From 49a38824410dc30fed18e4763f4cc419bfb6d3e2 Mon Sep 17 00:00:00 2001 From: AI Bot Date: Wed, 30 Sep 2026 17:15:53 +0530 Subject: [PATCH] fix: resolve 401 Unauthorized in Gemini editUVLayer by properly passing auth token, update loading UI with grayscale/blur, fix WebGLShadowMap deprecation warnings --- src/components/ImageTo3DModal.tsx | 43 +++++++++++++++++-------------- src/components/UVEditor.tsx | 4 +-- src/pages/Editor.tsx | 2 +- src/pages/SparkPlug.tsx | 2 +- 4 files changed, 28 insertions(+), 23 deletions(-) diff --git a/src/components/ImageTo3DModal.tsx b/src/components/ImageTo3DModal.tsx index 9fa2d11..eeff78e 100644 --- a/src/components/ImageTo3DModal.tsx +++ b/src/components/ImageTo3DModal.tsx @@ -29,7 +29,7 @@ const ModelPreview = ({ url }: { url: string }) => { if (!model) return
; return ( - + @@ -39,7 +39,7 @@ const ModelPreview = ({ url }: { url: string }) => { }; export const ImageTo3DModal: React.FC = ({ isOpen, onClose, onPushToApp }) => { - const { profile, setProfile, token } = useAuthStore(); + const { profile, setProfile } = useAuthStore(); const [meshyApiKey, setMeshyApiKey] = useState(''); // Image states @@ -97,6 +97,7 @@ export const ImageTo3DModal: React.FC = ({ isOpen, onClose, setCleanedImagePreview(null); try { const base64 = await fileToDataUrl(fileToClean); + const token = localStorage.getItem('auth_token') || ''; const newUrl = await editUVLayer("Remove the background and make it solid transparent or white. Also carefully remove all text, labels, logos, and stickers, keeping the product as a perfectly clean, plain, unbranded object.", base64, token); const res = await fetch(newUrl); @@ -300,10 +301,13 @@ export const ImageTo3DModal: React.FC = ({ isOpen, onClose, {/* Cleaned Image */}
{isCleaningImage ? ( -
- - AI Cleaning... -
+ <> + Original Grayscale +
+ + AI Cleaning Image... +
+ ) : cleanedImagePreview ? ( <> Cleaned @@ -405,22 +409,23 @@ export const ImageTo3DModal: React.FC = ({ isOpen, onClose,

3D Preview

-
- {generatedModelUrl ? ( +
+ {isGenerating ? ( + <> + {cleanedImagePreview || originalImagePreview ? ( + Generating Base + ) : null} +
+ +

{progressMessage}

+
+ + ) : generatedModelUrl ? ( ) : (
- {isGenerating ? ( - <> - -

{progressMessage}

- - ) : ( - <> - -

Your 3D model will appear here

- - )} + +

Your 3D model will appear here

)}
diff --git a/src/components/UVEditor.tsx b/src/components/UVEditor.tsx index 8287413..6fa93f0 100644 --- a/src/components/UVEditor.tsx +++ b/src/components/UVEditor.tsx @@ -48,7 +48,7 @@ export function UVEditor({ onClose, onSave, targetObject, loadedModel, sceneObje const fileInputRef = useRef(null); const dragRef = useRef<{ handle: Handle; startX: number; startY: number; layer: Layer } | null>(null); - const token = useAuthStore(state => state.token); + const token = localStorage.getItem('auth_token') || ''; const [aiPrompt, setAiPrompt] = useState(""); const [isEditingLayer, setIsEditingLayer] = useState(false); const [aiPreviewUrl, setAiPreviewUrl] = useState(null); @@ -596,7 +596,7 @@ export function UVEditor({ onClose, onSave, targetObject, loadedModel, sceneObje 3D Preview
- + diff --git a/src/pages/Editor.tsx b/src/pages/Editor.tsx index 686d897..e292d95 100644 --- a/src/pages/Editor.tsx +++ b/src/pages/Editor.tsx @@ -2451,7 +2451,7 @@ export default function Editor() {
{generatedGlbUrl ? ( - +