@wewear/virtual-try-on 2.0.3 → 2.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.esm.js +69 -31
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +69 -31
- package/dist/index.js.map +1 -1
- package/dist/widget/vto-api-client.d.ts +10 -1
- package/dist/widget.d.ts +1 -0
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -332,12 +332,38 @@ class VtoApiClient {
|
|
|
332
332
|
return null;
|
|
333
333
|
}
|
|
334
334
|
}
|
|
335
|
-
async submitTryOn(modelImage, productImages, options) {
|
|
336
|
-
|
|
337
|
-
const
|
|
335
|
+
async submitTryOn(modelImage, productImages, options, preparedData) {
|
|
336
|
+
const resolved = preparedData !== null && preparedData !== void 0 ? preparedData : (await this.prepareTryOnData(productImages, options));
|
|
337
|
+
const formData = new FormData();
|
|
338
|
+
formData.append("model_image", modelImage, "model_image.png");
|
|
339
|
+
formData.append("product_image_urls", JSON.stringify(resolved.productImages));
|
|
340
|
+
formData.append("page_url", window.location.href);
|
|
341
|
+
formData.append("model_tier", resolved.modelTier);
|
|
342
|
+
if (resolved.geminiModel)
|
|
343
|
+
formData.append("gemini_model", resolved.geminiModel);
|
|
344
|
+
if (resolved.additionalPrompt) {
|
|
345
|
+
formData.append("additional_prompt", resolved.additionalPrompt);
|
|
346
|
+
}
|
|
347
|
+
if (resolved.outfitID)
|
|
348
|
+
formData.append("outfit_id", resolved.outfitID);
|
|
349
|
+
const res = await fetch(`${this.baseUrl}/api/vto`, {
|
|
350
|
+
method: "POST",
|
|
351
|
+
body: formData,
|
|
352
|
+
});
|
|
353
|
+
if (!res.ok) {
|
|
354
|
+
const errorText = await res.text();
|
|
355
|
+
console.error("[WeWear VTO] API submission failed:", res.status, errorText);
|
|
356
|
+
throw new Error(`API submission failed: ${res.status}`);
|
|
357
|
+
}
|
|
358
|
+
return res.json();
|
|
359
|
+
}
|
|
360
|
+
async prepareTryOnData(productImages, options) {
|
|
361
|
+
var _a, _b;
|
|
362
|
+
const outfitID = (_b = (_a = options.outfitID) === null || _a === void 0 ? void 0 : _a.trim()) !== null && _b !== void 0 ? _b : "";
|
|
338
363
|
let resolvedProductImages = productImages;
|
|
339
364
|
let resolvedGeminiModel = null;
|
|
340
365
|
let resolvedAdditionalPrompt = null;
|
|
366
|
+
let resolvedIsImageVisible = true;
|
|
341
367
|
if (outfitID) {
|
|
342
368
|
const vtoData = await this.fetchVtoData(outfitID);
|
|
343
369
|
if (vtoData) {
|
|
@@ -351,31 +377,20 @@ class VtoApiClient {
|
|
|
351
377
|
vtoData.additional_prompt) {
|
|
352
378
|
resolvedAdditionalPrompt = vtoData.additional_prompt;
|
|
353
379
|
}
|
|
380
|
+
if (typeof vtoData.is_image_visible === "boolean") {
|
|
381
|
+
resolvedIsImageVisible = vtoData.is_image_visible;
|
|
382
|
+
}
|
|
354
383
|
console.log(`[WeWear VTO] Using stored VTO data for outfit_id=${outfitID}`);
|
|
355
384
|
}
|
|
356
385
|
}
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
formData.append("additional_prompt", resolvedAdditionalPrompt);
|
|
366
|
-
}
|
|
367
|
-
if (outfitID)
|
|
368
|
-
formData.append("outfit_id", outfitID);
|
|
369
|
-
const res = await fetch(`${this.baseUrl}/api/vto`, {
|
|
370
|
-
method: "POST",
|
|
371
|
-
body: formData,
|
|
372
|
-
});
|
|
373
|
-
if (!res.ok) {
|
|
374
|
-
const errorText = await res.text();
|
|
375
|
-
console.error("[WeWear VTO] API submission failed:", res.status, errorText);
|
|
376
|
-
throw new Error(`API submission failed: ${res.status}`);
|
|
377
|
-
}
|
|
378
|
-
return res.json();
|
|
386
|
+
return {
|
|
387
|
+
modelTier: options.modelTier,
|
|
388
|
+
outfitID,
|
|
389
|
+
productImages: resolvedProductImages,
|
|
390
|
+
geminiModel: resolvedGeminiModel,
|
|
391
|
+
additionalPrompt: resolvedAdditionalPrompt,
|
|
392
|
+
isImageVisible: resolvedIsImageVisible,
|
|
393
|
+
};
|
|
379
394
|
}
|
|
380
395
|
async fetchJobStatus(jobId) {
|
|
381
396
|
const res = await fetch(`${this.baseUrl}/api/vto/status?job_id=${jobId}`);
|
|
@@ -399,6 +414,7 @@ class VirtualTryOnWidget {
|
|
|
399
414
|
constructor(config) {
|
|
400
415
|
this.virtualTryOnImageUrl = null;
|
|
401
416
|
this.originalProductImages = []; // Store all original product images
|
|
417
|
+
this.preparedTryOnData = null;
|
|
402
418
|
this.isShowingVirtualTryOn = false;
|
|
403
419
|
this.lastModelImage = null;
|
|
404
420
|
this.cameraButton = null;
|
|
@@ -470,7 +486,11 @@ class VirtualTryOnWidget {
|
|
|
470
486
|
console.warn("[WeWear VTO] Product images not found:", this.config.productImageSelector);
|
|
471
487
|
return;
|
|
472
488
|
}
|
|
473
|
-
|
|
489
|
+
this.preparedTryOnData = await this.vtoApiClient.prepareTryOnData(this.originalProductImages, {
|
|
490
|
+
modelTier: this.config.modelTier,
|
|
491
|
+
outfitID: this.config.outfitID,
|
|
492
|
+
});
|
|
493
|
+
const photoUploadUrl = this.buildPhotoUploadUrl(this.preparedTryOnData.productImages);
|
|
474
494
|
this.showPhotoUploadModal(photoUploadUrl.toString());
|
|
475
495
|
}
|
|
476
496
|
catch (error) {
|
|
@@ -489,15 +509,26 @@ class VirtualTryOnWidget {
|
|
|
489
509
|
console.warn("[WeWear VTO] No product images found for regenerate.");
|
|
490
510
|
return;
|
|
491
511
|
}
|
|
492
|
-
|
|
512
|
+
this.preparedTryOnData = await this.vtoApiClient.prepareTryOnData(this.originalProductImages, {
|
|
513
|
+
modelTier: this.config.modelTier,
|
|
514
|
+
outfitID: this.config.outfitID,
|
|
515
|
+
});
|
|
516
|
+
const photoUploadUrl = this.buildPhotoUploadUrl(this.preparedTryOnData.productImages, { startAtConfirm: true });
|
|
493
517
|
this.showPhotoUploadModal(photoUploadUrl.toString(), {
|
|
494
518
|
prefillImage: this.lastModelImage,
|
|
495
519
|
autoSubmit: true,
|
|
496
520
|
});
|
|
497
521
|
}
|
|
498
|
-
buildPhotoUploadUrl(options) {
|
|
522
|
+
buildPhotoUploadUrl(productImages, options) {
|
|
523
|
+
var _a;
|
|
499
524
|
const photoUploadUrl = new URL(`${this.config.baseUrl}`);
|
|
500
|
-
|
|
525
|
+
const previewProductImage = ((_a = this.preparedTryOnData) === null || _a === void 0 ? void 0 : _a.isImageVisible)
|
|
526
|
+
? productImages[0]
|
|
527
|
+
: this.originalProductImages[0];
|
|
528
|
+
photoUploadUrl.searchParams.append("ww_product_images", productImages.join(","));
|
|
529
|
+
if (previewProductImage) {
|
|
530
|
+
photoUploadUrl.searchParams.append("ww_product_preview_image", previewProductImage);
|
|
531
|
+
}
|
|
501
532
|
if (options === null || options === void 0 ? void 0 : options.startAtConfirm) {
|
|
502
533
|
photoUploadUrl.searchParams.append("ww_step", "2");
|
|
503
534
|
photoUploadUrl.searchParams.append("ww_regenerate", "1");
|
|
@@ -584,12 +615,18 @@ class VirtualTryOnWidget {
|
|
|
584
615
|
console.warn("[WeWear VTO] No product images found.");
|
|
585
616
|
return;
|
|
586
617
|
}
|
|
618
|
+
if (!this.preparedTryOnData) {
|
|
619
|
+
this.preparedTryOnData = await this.vtoApiClient.prepareTryOnData(this.originalProductImages, {
|
|
620
|
+
modelTier: this.config.modelTier,
|
|
621
|
+
outfitID: this.config.outfitID,
|
|
622
|
+
});
|
|
623
|
+
}
|
|
587
624
|
const container = this.getContainer();
|
|
588
625
|
try {
|
|
589
|
-
const submitResponse = await this.vtoApiClient.submitTryOn(this.lastModelImage, this.
|
|
626
|
+
const submitResponse = await this.vtoApiClient.submitTryOn(this.lastModelImage, this.preparedTryOnData.productImages, {
|
|
590
627
|
modelTier: this.config.modelTier,
|
|
591
628
|
outfitID: this.config.outfitID,
|
|
592
|
-
});
|
|
629
|
+
}, this.preparedTryOnData);
|
|
593
630
|
let status = await this.vtoApiClient.fetchJobStatus(submitResponse.job_id);
|
|
594
631
|
while (status.status !== "COMPLETED" && status.status !== "FAILED") {
|
|
595
632
|
await new Promise((r) => setTimeout(r, 3000));
|
|
@@ -768,6 +805,7 @@ class VirtualTryOnWidget {
|
|
|
768
805
|
this.isShowingVirtualTryOn = false;
|
|
769
806
|
this.lastModelImage = null;
|
|
770
807
|
this.originalProductImages = [];
|
|
808
|
+
this.preparedTryOnData = null;
|
|
771
809
|
console.log("[WeWear VTO] Widget destroyed successfully");
|
|
772
810
|
}
|
|
773
811
|
catch (error) {
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/constants.ts","../src/utils.ts","../src/components/button.ts","../src/widget/modal-manager.ts","../src/widget/vto-api-client.ts","../src/widget.ts","../src/installer.ts"],"sourcesContent":["export const CSS_CLASSES = {\n\tBUTTON_CONTAINER: \"wewear-vto-button-container\",\n\tBUTTON: \"wewear-vto-button\",\n\tMODAL: \"wewear-vto-modal\",\n};\n\nexport const Z_INDEX = {\n\tBUTTON: 10,\n};\n","export function getPositionStyles(position: string): string {\n\tswitch (position) {\n\t\tcase \"bottom-left\":\n\t\t\treturn \"left: 20px; bottom: 20px;\";\n\t\tcase \"top-right\":\n\t\t\treturn \"right: 20px; top: 20px;\";\n\t\tcase \"top-left\":\n\t\t\treturn \"left: 20px; top: 20px;\";\n\t\tdefault:\n\t\t\treturn \"right: 20px; bottom: 20px;\";\n\t}\n}\n","import { CSS_CLASSES, Z_INDEX } from \"../constants.js\";\nimport { getPositionStyles } from \"../utils.js\";\n\nconst CAMERA_ICON = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display: block;\">\n\t\t<path d=\"M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z\"></path>\n\t\t<circle cx=\"12\" cy=\"13\" r=\"3\"></circle>\n\t</svg>\n`;\n\nconst SPARKLES_ICON = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display: block; flex-shrink: 0;\">\n\t\t<path d=\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\"/>\n\t\t<path d=\"M20 2v4\"/>\n\t\t<path d=\"M22 4h-4\"/>\n\t\t<circle cx=\"4\" cy=\"20\" r=\"2\"/>\n\t</svg>\n`;\n\nconst REFRESH_ICON = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display: block;\">\n\t\t<path d=\"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"></path>\n\t\t<path d=\"M3 3v5h5\"></path>\n\t\t<path d=\"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16\"></path>\n\t\t<path d=\"M16 16h5v5\"></path>\n\t</svg>\n`;\n\nconst CONTAINER_STYLE = `\n\tposition: absolute;\n\tdisplay: flex;\n\tgap: 4px;\n\tborder-radius: 100px;\n\tbackground: white;\n\tpadding: 4px;\n\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n\tz-index: ${Z_INDEX.BUTTON};\n\ttransition: all 0.2s ease;\n`;\n\nconst ICON_BUTTON_STYLE = `\n\tdisplay: flex;\n\twidth: 40px;\n\theight: 40px;\n\tcursor: pointer;\n\talign-items: center;\n\tjustify-content: center;\n\tborder-radius: 100px;\n\tpadding: 0;\n\tborder: none;\n\ttransition: all 0.2s ease;\n\tflex-shrink: 0;\n`;\n\nconst PRIMARY_STYLE = `${ICON_BUTTON_STYLE}\n\tbackground: white;\n\tcolor: #000000;\n`;\n\nfunction createIconButton(\n\tclassName: string,\n\tariaLabel: string,\n\ticonHtml: string,\n\tstyleCss: string,\n\tonClick: () => void,\n): HTMLButtonElement {\n\tconst button = document.createElement(\"button\");\n\tbutton.type = \"button\";\n\tbutton.className = className;\n\tbutton.setAttribute(\"aria-label\", ariaLabel);\n\tbutton.style.cssText = styleCss;\n\tbutton.innerHTML = iconHtml;\n\tbutton.onclick = onClick;\n\treturn button;\n}\n\nexport function createButtonContainer(\n\tbuttonPosition: string,\n\thasVirtualTryOn: boolean = false,\n\tonCameraClick: () => void,\n\tonRefreshClick?: () => void,\n\tonToggleClick?: () => void,\n\tisShowingVirtualTryOn: boolean = false,\n): HTMLElement {\n\tconst container = document.createElement(\"div\");\n\tcontainer.className = `${CSS_CLASSES.BUTTON_CONTAINER} ww-button-group`;\n\n\tconst positionStyles = getPositionStyles(buttonPosition);\n\tcontainer.style.cssText = `${CONTAINER_STYLE} ${positionStyles}`;\n\n\tconst cameraButton = hasVirtualTryOn\n\t\t? createIconButton(\n\t\t\t\t`${CSS_CLASSES.BUTTON} ww-camera-btn`,\n\t\t\t\t\"Virtual Try-On\",\n\t\t\t\tCAMERA_ICON,\n\t\t\t\tPRIMARY_STYLE,\n\t\t\t\tonCameraClick,\n\t\t\t)\n\t\t: createIconButton(\n\t\t\t\t`${CSS_CLASSES.BUTTON} ww-camera-btn`,\n\t\t\t\t\"Virtual Try-On\",\n\t\t\t\t`${SPARKLES_ICON}<span style=\"display: block;\">TRY THIS LOOK</span>`,\n\t\t\t\t`${PRIMARY_STYLE}\n\t\t\t\t\tpadding: 10px 16px;\n\t\t\t\t\tgap: 8px;\n\t\t\t\t\tfont-size: 14px;\n\t\t\t\t\tfont-weight: 600;\n\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\twidth: auto;\n\t\t\t\t\theight: auto;\n\t\t\t\t`,\n\t\t\t\tonCameraClick,\n\t\t\t);\n\tcontainer.appendChild(cameraButton);\n\n\tif (hasVirtualTryOn) {\n\t\tif (onRefreshClick) {\n\t\t\tconst refreshButton = createIconButton(\n\t\t\t\t\"ww-refresh-btn\",\n\t\t\t\t\"Refresh virtual try-on\",\n\t\t\t\tREFRESH_ICON,\n\t\t\t\t`${ICON_BUTTON_STYLE}\n\t\t\t\t\tbackground: white;\n\t\t\t\t\tcolor: #333333;\n\t\t\t\t`,\n\t\t\t\tonRefreshClick,\n\t\t\t);\n\t\t\tcontainer.appendChild(refreshButton);\n\t\t}\n\n\t\tif (onToggleClick) {\n\t\t\tconst toggleButton = createIconButton(\n\t\t\t\t\"ww-toggle-btn\",\n\t\t\t\tisShowingVirtualTryOn ? \"Show Original Image\" : \"Show Virtual Try-On\",\n\t\t\t\tSPARKLES_ICON,\n\t\t\t\t`${ICON_BUTTON_STYLE}\n\t\t\t\t\tbackground: ${isShowingVirtualTryOn ? \"#333333\" : \"#e5e7eb\"};\n\t\t\t\t\tcolor: ${isShowingVirtualTryOn ? \"white\" : \"#333333\"};\n\t\t\t\t`,\n\t\t\t\tonToggleClick,\n\t\t\t);\n\n\t\t\ttoggleButton.onmouseover = () => {\n\t\t\t\tif (isShowingVirtualTryOn) {\n\t\t\t\t\ttoggleButton.style.background = \"#4a4a4a\";\n\t\t\t\t} else {\n\t\t\t\t\ttoggleButton.style.background = \"#d1d5db\";\n\t\t\t\t}\n\t\t\t};\n\t\t\ttoggleButton.onmouseout = () => {\n\t\t\t\tif (isShowingVirtualTryOn) {\n\t\t\t\t\ttoggleButton.style.background = \"#333333\";\n\t\t\t\t} else {\n\t\t\t\t\ttoggleButton.style.background = \"#e5e7eb\";\n\t\t\t\t}\n\t\t\t};\n\n\t\t\ttoggleButton.onclick = onToggleClick;\n\t\t\tcontainer.appendChild(toggleButton);\n\t\t}\n\t}\n\n\treturn container;\n}\n\nexport function createButton(\n\tbuttonPosition: string,\n\tonClick: () => void,\n\tdisabled: boolean = false,\n): HTMLElement {\n\tconst container = createButtonContainer(buttonPosition, false, onClick);\n\tconst cameraButton = container.querySelector(\n\t\t\".ww-camera-btn\",\n\t) as HTMLButtonElement;\n\tif (cameraButton) {\n\t\tcameraButton.disabled = disabled;\n\t\tif (disabled) {\n\t\t\tcameraButton.style.opacity = \"0.5\";\n\t\t\tcameraButton.style.cursor = \"not-allowed\";\n\t\t\tcameraButton.title = \"Find your ideal size first\";\n\t\t}\n\t}\n\treturn container;\n}\n","import { CSS_CLASSES } from \"../constants.js\";\n\nexport type ModalControlMessageType =\n\t| \"VTO_SCAN_START\"\n\t| \"VTO_SCAN_STOP\"\n\t| \"VTO_SCAN_COMPLETE\";\n\nexport interface ModalOpenOptions {\n\tprefillImage?: Blob;\n\tautoSubmit?: boolean;\n}\n\ninterface PendingModalPrefill {\n\timage: Blob;\n\tautoSubmit: boolean;\n}\n\nexport class ModalManager {\n\tprivate modalElement: HTMLElement | null = null;\n\tprivate pendingModalPrefill: PendingModalPrefill | null = null;\n\tprivate modalOrigin: string;\n\n\tconstructor(baseUrl: string) {\n\t\tthis.modalOrigin = new URL(baseUrl).origin;\n\t}\n\n\topen(\n\t\turl: string,\n\t\toptions: ModalOpenOptions | undefined,\n\t\tonClose: () => void,\n\t) {\n\t\tthis.close();\n\t\tthis.modalOrigin = new URL(url).origin;\n\t\tthis.pendingModalPrefill = options?.prefillImage\n\t\t\t? {\n\t\t\t\t\timage: options.prefillImage,\n\t\t\t\t\tautoSubmit: options.autoSubmit === true,\n\t\t\t\t}\n\t\t\t: null;\n\n\t\tconst modal = document.createElement(\"div\");\n\t\tmodal.className = CSS_CLASSES.MODAL;\n\t\tmodal.style.cssText = `\n\t\t\tposition: fixed;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\tbottom: 0;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tbackground-color: rgba(0, 0, 0, 0.8);\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: center;\n\t\t\talign-items: center;\n\t\t\tz-index: 999999999;\n\t\t\tanimation: ww-modal-fade-in 0.3s ease;\n\t\t`;\n\n\t\tif (!document.getElementById(\"ww-modal-animation\")) {\n\t\t\tconst style = document.createElement(\"style\");\n\t\t\tstyle.id = \"ww-modal-animation\";\n\t\t\tstyle.textContent = `\n\t\t\t\t@keyframes ww-modal-fade-in {\n\t\t\t\t\tfrom { opacity: 0; }\n\t\t\t\t\tto { opacity: 1; }\n\t\t\t\t}\n\t\t\t\t@keyframes ww-modal-scale-in {\n\t\t\t\t\tfrom { transform: scale(0.95); opacity: 0; }\n\t\t\t\t\tto { transform: scale(1); opacity: 1; }\n\t\t\t\t}\n\t\t\t`;\n\t\t\tdocument.head.appendChild(style);\n\t\t}\n\n\t\tconst iframeContainer = document.createElement(\"div\");\n\t\tiframeContainer.style.cssText = `\n\t\t\tposition: relative;\n\t\t\twidth: 90%;\n\t\t\theight: 90%;\n\t\t\tmax-width: 480px;\n\t\t\tmax-height: 720px;\n\t\t\tborder-radius: 20px;\n\t\t\toverflow: hidden;\n\t\t\tbox-shadow: 0 24px 48px rgba(0, 0, 0, 0.3), 0 12px 24px rgba(0, 0, 0, 0.2);\n\t\t\tanimation: ww-modal-scale-in 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n\t\t\tbackground: white;\n\t\t`;\n\n\t\tconst iframe = document.createElement(\"iframe\");\n\t\tiframe.src = url;\n\t\tiframe.style.cssText = `\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tborder: none;\n\t\t`;\n\n\t\tconst closeButton = document.createElement(\"button\");\n\t\tcloseButton.innerHTML = `\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n\t\t\t\t<line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n\t\t\t</svg>\n\t\t`;\n\t\tcloseButton.setAttribute(\"aria-label\", \"Close modal\");\n\t\tcloseButton.style.cssText = `\n\t\t\tposition: absolute;\n\t\t\ttop: -48px;\n\t\t\tright: 0;\n\t\t\tbackground: rgba(255, 255, 255, 0.95);\n\t\t\tbackdrop-filter: blur(8px);\n\t\t\t-webkit-backdrop-filter: blur(8px);\n\t\t\tborder: none;\n\t\t\tborder-radius: 50%;\n\t\t\twidth: 40px;\n\t\t\theight: 40px;\n\t\t\tcursor: pointer;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tcolor: #1f2937;\n\t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n\t\t\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n\t\t`;\n\t\tcloseButton.onmouseover = () => {\n\t\t\tcloseButton.style.transform = \"scale(1.1) rotate(90deg)\";\n\t\t\tcloseButton.style.background = \"#ef4444\";\n\t\t\tcloseButton.style.color = \"white\";\n\t\t};\n\t\tcloseButton.onmouseout = () => {\n\t\t\tcloseButton.style.transform = \"scale(1) rotate(0deg)\";\n\t\t\tcloseButton.style.background = \"rgba(255, 255, 255, 0.95)\";\n\t\t\tcloseButton.style.color = \"#1f2937\";\n\t\t};\n\t\tcloseButton.onclick = () => {\n\t\t\tmodal.style.opacity = \"0\";\n\t\t\tiframeContainer.style.transform = \"scale(0.95)\";\n\t\t\tiframeContainer.style.opacity = \"0\";\n\t\t\tsetTimeout(onClose, 300);\n\t\t};\n\n\t\tiframeContainer.appendChild(iframe);\n\t\tiframeContainer.appendChild(closeButton);\n\t\tmodal.appendChild(iframeContainer);\n\t\tdocument.body.appendChild(modal);\n\n\t\tmodal.onclick = (e) => {\n\t\t\tif (e.target === modal) {\n\t\t\t\tcloseButton.click();\n\t\t\t}\n\t\t};\n\n\t\tthis.modalElement = modal;\n\t}\n\n\tclose() {\n\t\tif (this.modalElement) {\n\t\t\tthis.modalElement.remove();\n\t\t\tthis.modalElement = null;\n\t\t}\n\t\tthis.pendingModalPrefill = null;\n\t}\n\n\tsendPendingPrefillToModal() {\n\t\tif (!this.pendingModalPrefill || !this.modalElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst iframe = this.modalElement.querySelector(\"iframe\");\n\t\tif (!(iframe instanceof HTMLIFrameElement) || !iframe.contentWindow) {\n\t\t\treturn;\n\t\t}\n\n\t\tiframe.contentWindow.postMessage(\n\t\t\t{\n\t\t\t\ttype: \"VTO_PREFILL_IMAGE\",\n\t\t\t\timage: this.pendingModalPrefill.image,\n\t\t\t\tautoSubmit: this.pendingModalPrefill.autoSubmit,\n\t\t\t},\n\t\t\tthis.modalOrigin,\n\t\t);\n\t\t// Fallback for production setups where iframe origin differs after redirects.\n\t\tiframe.contentWindow.postMessage(\n\t\t\t{\n\t\t\t\ttype: \"VTO_PREFILL_IMAGE\",\n\t\t\t\timage: this.pendingModalPrefill.image,\n\t\t\t\tautoSubmit: this.pendingModalPrefill.autoSubmit,\n\t\t\t},\n\t\t\t\"*\",\n\t\t);\n\t\tthis.pendingModalPrefill = null;\n\t}\n\n\tpostMessageToModal(type: ModalControlMessageType) {\n\t\tif (!this.modalElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst iframe = this.modalElement.querySelector(\"iframe\");\n\t\tif (!(iframe instanceof HTMLIFrameElement) || !iframe.contentWindow) {\n\t\t\treturn;\n\t\t}\n\n\t\tiframe.contentWindow.postMessage({ type }, this.modalOrigin);\n\t\t// Fallback for production setups where iframe origin differs after redirects.\n\t\tiframe.contentWindow.postMessage({ type }, \"*\");\n\t}\n}\n","export type JobStatus = \"PENDING\" | \"COMPLETED\" | \"FAILED\";\n\nexport interface JobStatusResponse {\n\tstatus: JobStatus;\n\tmessage: string;\n}\n\ninterface VtoDataResponse {\n\tgemini_model?: string;\n\timages?: string[];\n\tadditional_prompt?: string;\n}\n\ninterface SubmitTryOnOptions {\n\tmodelTier: string;\n\toutfitID: string;\n}\n\nexport class VtoApiClient {\n\tconstructor(private readonly baseUrl: string) {}\n\n\tprivate async fetchVtoData(\n\t\toutfitId: string,\n\t): Promise<VtoDataResponse | null> {\n\t\ttry {\n\t\t\tconst vtoDataUrl = new URL(\"/api/vto/data\", this.baseUrl);\n\t\t\tvtoDataUrl.searchParams.set(\"outfit_id\", outfitId);\n\n\t\t\tconst response = await fetch(vtoDataUrl.toString());\n\t\t\tif (response.status === 404) return null;\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst errorText = await response.text();\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`[WeWear VTO] Failed to retrieve VTO data (${response.status}): ${errorText}`,\n\t\t\t\t);\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn (await response.json()) as VtoDataResponse;\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"[WeWear VTO] Error retrieving VTO data:\", error);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tasync submitTryOn(\n\t\tmodelImage: Blob,\n\t\tproductImages: string[],\n\t\toptions: SubmitTryOnOptions,\n\t): Promise<{ job_id: string }> {\n\t\tconst outfitID = options.outfitID?.trim();\n\t\tlet resolvedProductImages = productImages;\n\t\tlet resolvedGeminiModel: string | null = null;\n\t\tlet resolvedAdditionalPrompt: string | null = null;\n\n\t\tif (outfitID) {\n\t\t\tconst vtoData = await this.fetchVtoData(outfitID);\n\t\t\tif (vtoData) {\n\t\t\t\tif (Array.isArray(vtoData.images) && vtoData.images.length > 0) {\n\t\t\t\t\tresolvedProductImages = vtoData.images;\n\t\t\t\t}\n\t\t\t\tif (typeof vtoData.gemini_model === \"string\" && vtoData.gemini_model) {\n\t\t\t\t\tresolvedGeminiModel = vtoData.gemini_model;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\ttypeof vtoData.additional_prompt === \"string\" &&\n\t\t\t\t\tvtoData.additional_prompt\n\t\t\t\t) {\n\t\t\t\t\tresolvedAdditionalPrompt = vtoData.additional_prompt;\n\t\t\t\t}\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[WeWear VTO] Using stored VTO data for outfit_id=${outfitID}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst formData = new FormData();\n\t\tformData.append(\"model_image\", modelImage, \"model_image.png\");\n\t\tformData.append(\n\t\t\t\"product_image_urls\",\n\t\t\tJSON.stringify(resolvedProductImages),\n\t\t);\n\t\tformData.append(\"page_url\", window.location.href);\n\t\tformData.append(\"model_tier\", options.modelTier);\n\t\tif (resolvedGeminiModel)\n\t\t\tformData.append(\"gemini_model\", resolvedGeminiModel);\n\t\tif (resolvedAdditionalPrompt) {\n\t\t\tformData.append(\"additional_prompt\", resolvedAdditionalPrompt);\n\t\t}\n\n\t\tif (outfitID) formData.append(\"outfit_id\", outfitID);\n\n\t\tconst res = await fetch(`${this.baseUrl}/api/vto`, {\n\t\t\tmethod: \"POST\",\n\t\t\tbody: formData,\n\t\t});\n\t\tif (!res.ok) {\n\t\t\tconst errorText = await res.text();\n\t\t\tconsole.error(\n\t\t\t\t\"[WeWear VTO] API submission failed:\",\n\t\t\t\tres.status,\n\t\t\t\terrorText,\n\t\t\t);\n\t\t\tthrow new Error(`API submission failed: ${res.status}`);\n\t\t}\n\t\treturn res.json();\n\t}\n\n\tasync fetchJobStatus(jobId: string): Promise<JobStatusResponse> {\n\t\tconst res = await fetch(`${this.baseUrl}/api/vto/status?job_id=${jobId}`);\n\t\tif (!res.ok) throw new Error(`Status check failed: ${res.status}`);\n\t\treturn res.json();\n\t}\n\n\tasync fetchJobImage(jobId: string): Promise<string> {\n\t\tconst url = `${this.baseUrl}/api/vto/image?job_id=${jobId}`;\n\n\t\tconst res = await fetch(url);\n\t\tif (res.status === 202) throw new Error(\"202_PROCESSING\");\n\t\tif (!res.ok) throw new Error(`Image fetch failed: ${res.status}`);\n\n\t\tconst blob = await res.blob();\n\t\treturn URL.createObjectURL(blob);\n\t}\n}\n","import { createButton, createButtonContainer } from \"./components/index.js\";\nimport { CSS_CLASSES } from \"./constants.js\";\nimport type { VirtualTryOnConfig } from \"./index.js\";\nimport {\n\tModalManager,\n\ttype ModalControlMessageType,\n\ttype ModalOpenOptions,\n} from \"./widget/modal-manager.js\";\nimport { VtoApiClient } from \"./widget/vto-api-client.js\";\n\nexport class VirtualTryOnWidget {\n\tprivate static instanceCounter = 0;\n\tprivate static activeWidgetId: number | null = null;\n\tprivate readonly config: VirtualTryOnConfig;\n\tprivate readonly instanceId: number;\n\tprivate virtualTryOnImageUrl: string | null = null;\n\tprivate originalProductImages: string[] = []; // Store all original product images\n\tprivate isShowingVirtualTryOn: boolean = false;\n\tprivate lastModelImage: Blob | null = null;\n\tprivate cameraButton: HTMLButtonElement | null = null;\n\tprivate readonly modal: ModalManager;\n\tprivate readonly vtoApiClient: VtoApiClient;\n\tprivate iframeMessageListener: ((event: MessageEvent) => void) | null = null;\n\n\tconstructor(config: VirtualTryOnConfig) {\n\t\tthis.instanceId = ++VirtualTryOnWidget.instanceCounter;\n\t\tthis.config = {\n\t\t\tbaseUrl: config.baseUrl,\n\t\t\tproductPageSelector: config.productPageSelector,\n\t\t\tgallerySelector: config.gallerySelector,\n\t\t\tproductImageSelector: config.productImageSelector,\n\t\t\tbuttonPosition: config.buttonPosition,\n\t\t\tmodelTier: config.modelTier,\n\t\t\toutfitID: config.outfitID,\n\t\t\tsingleton: config.singleton,\n\t\t\tgalleryElement: config.galleryElement,\n\t\t};\n\t\tthis.modal = new ModalManager(this.config.baseUrl);\n\t\tthis.vtoApiClient = new VtoApiClient(this.config.baseUrl);\n\t}\n\n\tprivate getContainer(): HTMLElement | null {\n\t\tconst configContainer = this.config.galleryElement;\n\t\tif (configContainer?.isConnected) {\n\t\t\treturn configContainer;\n\t\t}\n\n\t\tconst queriedContainer = document.querySelector(\n\t\t\tthis.config.gallerySelector,\n\t\t);\n\t\treturn queriedContainer instanceof HTMLElement ? queriedContainer : null;\n\t}\n\n\tpublic async init(): Promise<void> {\n\t\ttry {\n\t\t\tconst selectors = this.config.productPageSelector;\n\t\t\tconst currentPath = window.location.pathname;\n\t\t\tconst matches = selectors.some((sel) => currentPath.includes(sel));\n\t\t\tif (!matches) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst container = this.getContainer();\n\t\t\tif (!container) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[WeWear VTO] Gallery container not found:\",\n\t\t\t\t\tthis.config.gallerySelector,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (getComputedStyle(container).position === \"static\") {\n\t\t\t\tcontainer.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tconst button = createButton(this.config.buttonPosition, async () => {\n\t\t\t\tif (this.cameraButton && !this.cameraButton.disabled) {\n\t\t\t\t\tawait this.handleTryOnClick();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.cameraButton = button.querySelector(\".ww-camera-btn\");\n\t\t\tcontainer.appendChild(button);\n\t\t\tconsole.log(\"[WeWear VTO] Widget initialized successfully\");\n\n\t\t\tthis.setupIframeListener();\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Initialization failed:\", error);\n\t\t}\n\t}\n\n\tprivate async handleTryOnClick(): Promise<void> {\n\t\tconsole.log(\"[WeWear VTO] Button clicked, starting try-on process...\");\n\n\t\ttry {\n\t\t\tif (this.originalProductImages.length === 0) {\n\t\t\t\tthis.originalProductImages = this.getAllProductImages();\n\t\t\t\tconsole.log(\n\t\t\t\t\t\"[WeWear VTO] Stored original product images:\",\n\t\t\t\t\tthis.originalProductImages,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconsole.log(\"[WeWear VTO] Retrieved data:\", {\n\t\t\t\tproductImages: this.originalProductImages,\n\t\t\t});\n\n\t\t\tif (this.originalProductImages.length === 0) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[WeWear VTO] Product images not found:\",\n\t\t\t\t\tthis.config.productImageSelector,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst photoUploadUrl = this.buildPhotoUploadUrl();\n\t\t\tthis.showPhotoUploadModal(photoUploadUrl.toString());\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Try-on request failed:\", error);\n\t\t}\n\t}\n\n\tprivate async handleRegenerateClick(): Promise<void> {\n\t\tif (!this.lastModelImage) {\n\t\t\tawait this.handleTryOnClick();\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tthis.originalProductImages = this.getAllProductImages();\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tconsole.warn(\"[WeWear VTO] No product images found for regenerate.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst photoUploadUrl = this.buildPhotoUploadUrl({ startAtConfirm: true });\n\t\tthis.showPhotoUploadModal(photoUploadUrl.toString(), {\n\t\t\tprefillImage: this.lastModelImage,\n\t\t\tautoSubmit: true,\n\t\t});\n\t}\n\n\tprivate buildPhotoUploadUrl(options?: { startAtConfirm?: boolean }): URL {\n\t\tconst photoUploadUrl = new URL(`${this.config.baseUrl}`);\n\t\tphotoUploadUrl.searchParams.append(\n\t\t\t\"ww_product_images\",\n\t\t\tthis.originalProductImages.join(\",\"),\n\t\t);\n\t\tif (options?.startAtConfirm) {\n\t\t\tphotoUploadUrl.searchParams.append(\"ww_step\", \"2\");\n\t\t\tphotoUploadUrl.searchParams.append(\"ww_regenerate\", \"1\");\n\t\t}\n\t\treturn photoUploadUrl;\n\t}\n\n\tprivate getAllProductImages(): string[] {\n\t\tconst container = this.getContainer();\n\t\tconst scopedElements = container?.querySelectorAll(\n\t\t\tthis.config.productImageSelector,\n\t\t);\n\t\tconst fallbackElements = document.querySelectorAll(\n\t\t\tthis.config.productImageSelector,\n\t\t);\n\t\tconst productImageElements = (\n\t\t\tscopedElements?.length ? scopedElements : fallbackElements\n\t\t) as NodeListOf<HTMLImageElement>;\n\n\t\tconst images: string[] = [];\n\n\t\tproductImageElements.forEach((img) => {\n\t\t\tconst imageUrl =\n\t\t\t\timg.src ||\n\t\t\t\timg.getAttribute(\"data-src\") ||\n\t\t\t\timg.getAttribute(\"data-large_image\") ||\n\t\t\t\t\"\";\n\n\t\t\tif (\n\t\t\t\timageUrl &&\n\t\t\t\t(imageUrl.startsWith(\"http://\") || imageUrl.startsWith(\"https://\")) &&\n\t\t\t\t!images.includes(imageUrl)\n\t\t\t) {\n\t\t\t\timages.push(imageUrl);\n\t\t\t}\n\t\t});\n\n\t\treturn images;\n\t}\n\n\tprivate showPhotoUploadModal(url: string, options?: ModalOpenOptions): void {\n\t\tthis.closeModal();\n\t\tVirtualTryOnWidget.activeWidgetId = this.instanceId;\n\t\tthis.modal.open(url, options, () => this.closeModal());\n\t}\n\n\tprivate closeModal(): void {\n\t\tthis.modal.close();\n\t\tif (VirtualTryOnWidget.activeWidgetId === this.instanceId) {\n\t\t\tVirtualTryOnWidget.activeWidgetId = null;\n\t\t}\n\t}\n\n\tprivate sendPendingPrefillToModal(): void {\n\t\tthis.modal.sendPendingPrefillToModal();\n\t}\n\n\tprivate postMessageToModal(type: ModalControlMessageType): void {\n\t\tthis.modal.postMessageToModal(type);\n\t}\n\n\tprivate setupIframeListener(): void {\n\t\tif (this.iframeMessageListener) {\n\t\t\twindow.removeEventListener(\"message\", this.iframeMessageListener);\n\t\t}\n\n\t\tthis.iframeMessageListener = (event: MessageEvent) => {\n\t\t\tif (VirtualTryOnWidget.activeWidgetId !== this.instanceId) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.origin !== new URL(this.config.baseUrl).origin) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tswitch (event.data.type) {\n\t\t\t\tcase \"VTO_CONFIRM_READY\":\n\t\t\t\t\tthis.sendPendingPrefillToModal();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"VTO_IMAGE_SELECTED\":\n\t\t\t\t\tif (event.data.image) {\n\t\t\t\t\t\tthis.lastModelImage = event.data.image;\n\t\t\t\t\t\tthis.postMessageToModal(\"VTO_SCAN_START\");\n\t\t\t\t\t\tthis.startVirtualTryOn();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"CLOSE_MODAL\":\n\t\t\t\t\tthis.closeModal();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener(\"message\", this.iframeMessageListener);\n\t}\n\n\tprivate async startVirtualTryOn(isRefresh = false): Promise<void> {\n\t\tif (isRefresh) {\n\t\t\tconsole.log(\n\t\t\t\t\"[WeWear VTO] Refreshing virtual try-on with previous parameters...\",\n\t\t\t);\n\t\t}\n\n\t\tif (!this.lastModelImage) {\n\t\t\tconsole.warn(\n\t\t\t\t\"[WeWear VTO] Missing required data to start virtual try-on.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tthis.originalProductImages = this.getAllProductImages();\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tconsole.warn(\"[WeWear VTO] No product images found.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst container = this.getContainer();\n\n\t\ttry {\n\t\t\tconst submitResponse = await this.vtoApiClient.submitTryOn(\n\t\t\t\tthis.lastModelImage,\n\t\t\t\tthis.originalProductImages,\n\t\t\t\t{\n\t\t\t\t\tmodelTier: this.config.modelTier,\n\t\t\t\t\toutfitID: this.config.outfitID,\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tlet status = await this.vtoApiClient.fetchJobStatus(\n\t\t\t\tsubmitResponse.job_id,\n\t\t\t);\n\n\t\t\twhile (status.status !== \"COMPLETED\" && status.status !== \"FAILED\") {\n\t\t\t\tawait new Promise((r) => setTimeout(r, 3000));\n\t\t\t\tstatus = await this.vtoApiClient.fetchJobStatus(submitResponse.job_id);\n\t\t\t}\n\n\t\t\tif (status.status === \"COMPLETED\") {\n\t\t\t\tconst finalImage = await this.vtoApiClient.fetchJobImage(\n\t\t\t\t\tsubmitResponse.job_id,\n\t\t\t\t);\n\t\t\t\tif (finalImage) {\n\t\t\t\t\tthis.postMessageToModal(\"VTO_SCAN_COMPLETE\");\n\t\t\t\t\tawait new Promise((r) => setTimeout(r, 500));\n\t\t\t\t\tthis.replaceProductImage(finalImage);\n\t\t\t\t}\n\t\t\t\tif (container instanceof HTMLElement) {\n\t\t\t\t\tthis.showButtonContainer(container);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (status.status === \"FAILED\") {\n\t\t\t\tconsole.error(\"[WeWear VTO] VTO process failed:\", status.message);\n\t\t\t\tawait new Promise((r) => setTimeout(r, 5000));\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Error during virtual try-on process:\", error);\n\t\t\tawait new Promise((r) => setTimeout(r, 5000));\n\t\t} finally {\n\t\t\tthis.postMessageToModal(\"VTO_SCAN_STOP\");\n\t\t\tif (container instanceof HTMLElement) {\n\t\t\t\tthis.showButtonContainer(container);\n\t\t\t}\n\t\t\tthis.closeModal();\n\t\t}\n\t}\n\n\tprivate replaceProductImage(imageUrl: string): void {\n\t\ttry {\n\t\t\tthis.virtualTryOnImageUrl = imageUrl;\n\n\t\t\tconst container = this.getContainer();\n\t\t\tif (!container) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[WeWear VTO] Gallery container not found for image replacement:\",\n\t\t\t\t\tthis.config.gallerySelector,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!container.hasAttribute(\"data-ww-original-content\")) {\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-content\", container.innerHTML);\n\t\t\t}\n\n\t\t\tif (!container.hasAttribute(\"data-ww-container-locked\")) {\n\t\t\t\tconst containerRect = container.getBoundingClientRect();\n\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-container-width\",\n\t\t\t\t\tcontainerRect.width.toString(),\n\t\t\t\t);\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-container-height\",\n\t\t\t\t\tcontainerRect.height.toString(),\n\t\t\t\t);\n\n\t\t\t\tcontainer.style.width = `${containerRect.width}px`;\n\t\t\t\tcontainer.style.height = `${containerRect.height}px`;\n\t\t\t\tcontainer.style.minWidth = `${containerRect.width}px`;\n\t\t\t\tcontainer.style.minHeight = `${containerRect.height}px`;\n\n\t\t\t\tcontainer.style.paddingBottom = \"0\";\n\n\t\t\t\tcontainer.setAttribute(\"data-ww-container-locked\", \"true\");\n\t\t\t}\n\n\t\t\tconst originalImg = container.querySelector(\"img\");\n\t\t\tif (\n\t\t\t\toriginalImg &&\n\t\t\t\t!container.hasAttribute(\"data-ww-original-dimensions\")\n\t\t\t) {\n\t\t\t\tconst computedStyle = window.getComputedStyle(originalImg);\n\t\t\t\tconst rect = originalImg.getBoundingClientRect();\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-width\", computedStyle.width);\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-height\", computedStyle.height);\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-original-rect-width\",\n\t\t\t\t\trect.width.toString(),\n\t\t\t\t);\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-original-rect-height\",\n\t\t\t\t\trect.height.toString(),\n\t\t\t\t);\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-dimensions\", \"true\");\n\t\t\t}\n\n\t\t\tthis.showVirtualTryOnImage(container);\n\n\t\t\tthis.updateButtonContainer(container);\n\n\t\t\tconsole.log(\n\t\t\t\t\"[WeWear VTO] Product image replaced with virtual try-on result\",\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Error replacing product image:\", error);\n\t\t}\n\t}\n\n\tprivate showButtonContainer(container: HTMLElement): void {\n\t\tconst buttonContainer = container.querySelector(\n\t\t\t`.${CSS_CLASSES.BUTTON_CONTAINER}`,\n\t\t) as HTMLElement;\n\t\tif (buttonContainer) {\n\t\t\tbuttonContainer.style.display = \"flex\";\n\t\t}\n\t}\n\n\tprivate updateButtonContainer(container: HTMLElement): void {\n\t\tconst existingButtons = container.querySelectorAll(\n\t\t\t`.${CSS_CLASSES.BUTTON_CONTAINER}`,\n\t\t);\n\t\texistingButtons.forEach((btn) => {\n\t\t\tbtn.remove();\n\t\t});\n\n\t\tconst buttonContainer = createButtonContainer(\n\t\t\tthis.config.buttonPosition,\n\t\t\tthis.virtualTryOnImageUrl !== null,\n\t\t\tasync () => {\n\t\t\t\tawait this.handleTryOnClick();\n\t\t\t},\n\t\t\tasync () => {\n\t\t\t\tawait this.handleRegenerateClick();\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tif (this.isShowingVirtualTryOn) {\n\t\t\t\t\tthis.showOriginalImage(container);\n\t\t\t\t} else {\n\t\t\t\t\tthis.showVirtualTryOnImage(container);\n\t\t\t\t}\n\t\t\t\tthis.updateButtonContainer(container);\n\t\t\t},\n\t\t\tthis.isShowingVirtualTryOn,\n\t\t);\n\n\t\tcontainer.appendChild(buttonContainer);\n\t}\n\n\tprivate showVirtualTryOnImage(container: HTMLElement): void {\n\t\tif (!this.virtualTryOnImageUrl) {\n\t\t\tconsole.warn(\"[WeWear VTO] No virtual try-on image URL available\");\n\t\t\treturn;\n\t\t}\n\n\t\tArray.from(container.children).forEach((child) => {\n\t\t\tif (!child.classList.contains(CSS_CLASSES.BUTTON_CONTAINER)) {\n\t\t\t\tchild.remove();\n\t\t\t}\n\t\t});\n\n\t\tconst originalWidth =\n\t\t\tcontainer.getAttribute(\"data-ww-original-width\") || \"\";\n\t\tconst originalHeight =\n\t\t\tcontainer.getAttribute(\"data-ww-original-height\") || \"\";\n\t\tconst originalRectWidth =\n\t\t\tcontainer.getAttribute(\"data-ww-original-rect-width\") || \"\";\n\t\tconst originalRectHeight =\n\t\t\tcontainer.getAttribute(\"data-ww-original-rect-height\") || \"\";\n\n\t\tconst image = document.createElement(\"img\");\n\t\timage.src = this.virtualTryOnImageUrl;\n\t\timage.alt = \"Virtual Try-On Result\";\n\n\t\tlet widthStyle = \"100%\";\n\t\tlet heightStyle = \"100%\";\n\n\t\tif (originalWidth && originalWidth !== \"auto\" && originalWidth !== \"0px\") {\n\t\t\twidthStyle = originalWidth;\n\t\t} else if (originalRectWidth && originalRectWidth !== \"0\") {\n\t\t\twidthStyle = `${originalRectWidth}px`;\n\t\t}\n\n\t\tif (\n\t\t\toriginalHeight &&\n\t\t\toriginalHeight !== \"auto\" &&\n\t\t\toriginalHeight !== \"0px\"\n\t\t) {\n\t\t\theightStyle = originalHeight;\n\t\t} else if (originalRectHeight && originalRectHeight !== \"0\") {\n\t\t\theightStyle = `${originalRectHeight}px`;\n\t\t}\n\n\t\timage.style.cssText = `\n width: ${widthStyle};\n height: ${heightStyle};\n object-fit: contain;\n `;\n\n\t\tcontainer.prepend(image);\n\n\t\tthis.isShowingVirtualTryOn = true;\n\n\t\tthis.updateButtonContainer(container);\n\n\t\tconsole.log(\n\t\t\t\"[WeWear VTO] Product image replaced with virtual try-on result\",\n\t\t);\n\t}\n\n\tprivate showOriginalImage(container: HTMLElement): void {\n\t\tconst originalContentHTML = container.getAttribute(\n\t\t\t\"data-ww-original-content\",\n\t\t);\n\t\tif (originalContentHTML) {\n\t\t\tArray.from(container.children).forEach((child) => {\n\t\t\t\tif (!child.classList.contains(CSS_CLASSES.BUTTON_CONTAINER)) {\n\t\t\t\t\tchild.remove();\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst tempDiv = document.createElement(\"div\");\n\t\t\ttempDiv.innerHTML = originalContentHTML;\n\t\t\tcontainer.append(...Array.from(tempDiv.children));\n\n\t\t\t// Remove temporary attributes used for VTO state\n\t\t\tcontainer.style.paddingBottom = \"\";\n\t\t}\n\n\t\tthis.isShowingVirtualTryOn = false;\n\t}\n\n\tpublic destroy(): void {\n\t\ttry {\n\t\t\tconst container = this.getContainer();\n\t\t\tif (container) {\n\t\t\t\tconst existingButtons = container.querySelectorAll(\n\t\t\t\t\t`.${CSS_CLASSES.BUTTON_CONTAINER}`,\n\t\t\t\t);\n\t\t\t\texistingButtons.forEach((btn) => {\n\t\t\t\t\tbtn.remove();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.closeModal();\n\n\t\t\tthis.cameraButton = null;\n\n\t\t\tif (this.iframeMessageListener) {\n\t\t\t\twindow.removeEventListener(\"message\", this.iframeMessageListener);\n\t\t\t\tthis.iframeMessageListener = null;\n\t\t\t}\n\n\t\t\tthis.virtualTryOnImageUrl = null;\n\t\t\tthis.isShowingVirtualTryOn = false;\n\t\t\tthis.lastModelImage = null;\n\t\t\tthis.originalProductImages = [];\n\n\t\t\tconsole.log(\"[WeWear VTO] Widget destroyed successfully\");\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Error during widget destruction:\", error);\n\t\t}\n\t}\n}\n","import type { VirtualTryOnConfig } from \"./index.js\";\nimport { VirtualTryOnWidget } from \"./widget.js\";\n\nlet widgetInstances: VirtualTryOnWidget[] = [];\n\nexport function initVirtualTryOn(config?: VirtualTryOnConfig): void {\n\ttry {\n\t\twidgetInstances.forEach((instance) => {\n\t\t\tinstance.destroy();\n\t\t});\n\t\twidgetInstances = [];\n\n\t\tif (!config) {\n\t\t\tconsole.log(\n\t\t\t\t\"[WeWear VTO] Missing configuration. Widget not initialized.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst allContainers = Array.from(\n\t\t\tdocument.querySelectorAll(config.gallerySelector),\n\t\t).filter(\n\t\t\t(container): container is HTMLElement => container instanceof HTMLElement,\n\t\t);\n\t\tconst shouldUseSingleton = config.singleton !== false;\n\n\t\tif (allContainers.length > 1 && !shouldUseSingleton) {\n\t\t\twidgetInstances = allContainers.map((galleryElement) => {\n\t\t\t\treturn new VirtualTryOnWidget({\n\t\t\t\t\t...config,\n\t\t\t\t\tgalleryElement,\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tconst firstContainer = allContainers[0];\n\t\t\twidgetInstances = [\n\t\t\t\tnew VirtualTryOnWidget({\n\t\t\t\t\t...config,\n\t\t\t\t\tgalleryElement: firstContainer,\n\t\t\t\t}),\n\t\t\t];\n\t\t}\n\n\t\tconst initializeWidgets = () => {\n\t\t\twidgetInstances.forEach((widget) => {\n\t\t\t\twidget.init().catch((error) => {\n\t\t\t\t\tconsole.error(\"[WeWear VTO] Failed to initialize:\", error);\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tif (document.readyState === \"loading\") {\n\t\t\tdocument.addEventListener(\"DOMContentLoaded\", initializeWidgets, {\n\t\t\t\tonce: true,\n\t\t\t});\n\t\t} else {\n\t\t\tinitializeWidgets();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\"[WeWear VTO] Initialization error:\", error);\n\t}\n}\n\nexport function getWidgetInstance(): VirtualTryOnWidget | null {\n\treturn widgetInstances[0] ?? null;\n}\n\nexport function getWidgetInstances(): VirtualTryOnWidget[] {\n\treturn [...widgetInstances];\n}\n\nif (typeof window !== \"undefined\") {\n\tinitVirtualTryOn();\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/constants.ts","../src/utils.ts","../src/components/button.ts","../src/widget/modal-manager.ts","../src/widget/vto-api-client.ts","../src/widget.ts","../src/installer.ts"],"sourcesContent":["export const CSS_CLASSES = {\n\tBUTTON_CONTAINER: \"wewear-vto-button-container\",\n\tBUTTON: \"wewear-vto-button\",\n\tMODAL: \"wewear-vto-modal\",\n};\n\nexport const Z_INDEX = {\n\tBUTTON: 10,\n};\n","export function getPositionStyles(position: string): string {\n\tswitch (position) {\n\t\tcase \"bottom-left\":\n\t\t\treturn \"left: 20px; bottom: 20px;\";\n\t\tcase \"top-right\":\n\t\t\treturn \"right: 20px; top: 20px;\";\n\t\tcase \"top-left\":\n\t\t\treturn \"left: 20px; top: 20px;\";\n\t\tdefault:\n\t\t\treturn \"right: 20px; bottom: 20px;\";\n\t}\n}\n","import { CSS_CLASSES, Z_INDEX } from \"../constants.js\";\nimport { getPositionStyles } from \"../utils.js\";\n\nconst CAMERA_ICON = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display: block;\">\n\t\t<path d=\"M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z\"></path>\n\t\t<circle cx=\"12\" cy=\"13\" r=\"3\"></circle>\n\t</svg>\n`;\n\nconst SPARKLES_ICON = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display: block; flex-shrink: 0;\">\n\t\t<path d=\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\"/>\n\t\t<path d=\"M20 2v4\"/>\n\t\t<path d=\"M22 4h-4\"/>\n\t\t<circle cx=\"4\" cy=\"20\" r=\"2\"/>\n\t</svg>\n`;\n\nconst REFRESH_ICON = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display: block;\">\n\t\t<path d=\"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"></path>\n\t\t<path d=\"M3 3v5h5\"></path>\n\t\t<path d=\"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16\"></path>\n\t\t<path d=\"M16 16h5v5\"></path>\n\t</svg>\n`;\n\nconst CONTAINER_STYLE = `\n\tposition: absolute;\n\tdisplay: flex;\n\tgap: 4px;\n\tborder-radius: 100px;\n\tbackground: white;\n\tpadding: 4px;\n\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n\tz-index: ${Z_INDEX.BUTTON};\n\ttransition: all 0.2s ease;\n`;\n\nconst ICON_BUTTON_STYLE = `\n\tdisplay: flex;\n\twidth: 40px;\n\theight: 40px;\n\tcursor: pointer;\n\talign-items: center;\n\tjustify-content: center;\n\tborder-radius: 100px;\n\tpadding: 0;\n\tborder: none;\n\ttransition: all 0.2s ease;\n\tflex-shrink: 0;\n`;\n\nconst PRIMARY_STYLE = `${ICON_BUTTON_STYLE}\n\tbackground: white;\n\tcolor: #000000;\n`;\n\nfunction createIconButton(\n\tclassName: string,\n\tariaLabel: string,\n\ticonHtml: string,\n\tstyleCss: string,\n\tonClick: () => void,\n): HTMLButtonElement {\n\tconst button = document.createElement(\"button\");\n\tbutton.type = \"button\";\n\tbutton.className = className;\n\tbutton.setAttribute(\"aria-label\", ariaLabel);\n\tbutton.style.cssText = styleCss;\n\tbutton.innerHTML = iconHtml;\n\tbutton.onclick = onClick;\n\treturn button;\n}\n\nexport function createButtonContainer(\n\tbuttonPosition: string,\n\thasVirtualTryOn: boolean = false,\n\tonCameraClick: () => void,\n\tonRefreshClick?: () => void,\n\tonToggleClick?: () => void,\n\tisShowingVirtualTryOn: boolean = false,\n): HTMLElement {\n\tconst container = document.createElement(\"div\");\n\tcontainer.className = `${CSS_CLASSES.BUTTON_CONTAINER} ww-button-group`;\n\n\tconst positionStyles = getPositionStyles(buttonPosition);\n\tcontainer.style.cssText = `${CONTAINER_STYLE} ${positionStyles}`;\n\n\tconst cameraButton = hasVirtualTryOn\n\t\t? createIconButton(\n\t\t\t\t`${CSS_CLASSES.BUTTON} ww-camera-btn`,\n\t\t\t\t\"Virtual Try-On\",\n\t\t\t\tCAMERA_ICON,\n\t\t\t\tPRIMARY_STYLE,\n\t\t\t\tonCameraClick,\n\t\t\t)\n\t\t: createIconButton(\n\t\t\t\t`${CSS_CLASSES.BUTTON} ww-camera-btn`,\n\t\t\t\t\"Virtual Try-On\",\n\t\t\t\t`${SPARKLES_ICON}<span style=\"display: block;\">TRY THIS LOOK</span>`,\n\t\t\t\t`${PRIMARY_STYLE}\n\t\t\t\t\tpadding: 10px 16px;\n\t\t\t\t\tgap: 8px;\n\t\t\t\t\tfont-size: 14px;\n\t\t\t\t\tfont-weight: 600;\n\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\twidth: auto;\n\t\t\t\t\theight: auto;\n\t\t\t\t`,\n\t\t\t\tonCameraClick,\n\t\t\t);\n\tcontainer.appendChild(cameraButton);\n\n\tif (hasVirtualTryOn) {\n\t\tif (onRefreshClick) {\n\t\t\tconst refreshButton = createIconButton(\n\t\t\t\t\"ww-refresh-btn\",\n\t\t\t\t\"Refresh virtual try-on\",\n\t\t\t\tREFRESH_ICON,\n\t\t\t\t`${ICON_BUTTON_STYLE}\n\t\t\t\t\tbackground: white;\n\t\t\t\t\tcolor: #333333;\n\t\t\t\t`,\n\t\t\t\tonRefreshClick,\n\t\t\t);\n\t\t\tcontainer.appendChild(refreshButton);\n\t\t}\n\n\t\tif (onToggleClick) {\n\t\t\tconst toggleButton = createIconButton(\n\t\t\t\t\"ww-toggle-btn\",\n\t\t\t\tisShowingVirtualTryOn ? \"Show Original Image\" : \"Show Virtual Try-On\",\n\t\t\t\tSPARKLES_ICON,\n\t\t\t\t`${ICON_BUTTON_STYLE}\n\t\t\t\t\tbackground: ${isShowingVirtualTryOn ? \"#333333\" : \"#e5e7eb\"};\n\t\t\t\t\tcolor: ${isShowingVirtualTryOn ? \"white\" : \"#333333\"};\n\t\t\t\t`,\n\t\t\t\tonToggleClick,\n\t\t\t);\n\n\t\t\ttoggleButton.onmouseover = () => {\n\t\t\t\tif (isShowingVirtualTryOn) {\n\t\t\t\t\ttoggleButton.style.background = \"#4a4a4a\";\n\t\t\t\t} else {\n\t\t\t\t\ttoggleButton.style.background = \"#d1d5db\";\n\t\t\t\t}\n\t\t\t};\n\t\t\ttoggleButton.onmouseout = () => {\n\t\t\t\tif (isShowingVirtualTryOn) {\n\t\t\t\t\ttoggleButton.style.background = \"#333333\";\n\t\t\t\t} else {\n\t\t\t\t\ttoggleButton.style.background = \"#e5e7eb\";\n\t\t\t\t}\n\t\t\t};\n\n\t\t\ttoggleButton.onclick = onToggleClick;\n\t\t\tcontainer.appendChild(toggleButton);\n\t\t}\n\t}\n\n\treturn container;\n}\n\nexport function createButton(\n\tbuttonPosition: string,\n\tonClick: () => void,\n\tdisabled: boolean = false,\n): HTMLElement {\n\tconst container = createButtonContainer(buttonPosition, false, onClick);\n\tconst cameraButton = container.querySelector(\n\t\t\".ww-camera-btn\",\n\t) as HTMLButtonElement;\n\tif (cameraButton) {\n\t\tcameraButton.disabled = disabled;\n\t\tif (disabled) {\n\t\t\tcameraButton.style.opacity = \"0.5\";\n\t\t\tcameraButton.style.cursor = \"not-allowed\";\n\t\t\tcameraButton.title = \"Find your ideal size first\";\n\t\t}\n\t}\n\treturn container;\n}\n","import { CSS_CLASSES } from \"../constants.js\";\n\nexport type ModalControlMessageType =\n\t| \"VTO_SCAN_START\"\n\t| \"VTO_SCAN_STOP\"\n\t| \"VTO_SCAN_COMPLETE\";\n\nexport interface ModalOpenOptions {\n\tprefillImage?: Blob;\n\tautoSubmit?: boolean;\n}\n\ninterface PendingModalPrefill {\n\timage: Blob;\n\tautoSubmit: boolean;\n}\n\nexport class ModalManager {\n\tprivate modalElement: HTMLElement | null = null;\n\tprivate pendingModalPrefill: PendingModalPrefill | null = null;\n\tprivate modalOrigin: string;\n\n\tconstructor(baseUrl: string) {\n\t\tthis.modalOrigin = new URL(baseUrl).origin;\n\t}\n\n\topen(\n\t\turl: string,\n\t\toptions: ModalOpenOptions | undefined,\n\t\tonClose: () => void,\n\t) {\n\t\tthis.close();\n\t\tthis.modalOrigin = new URL(url).origin;\n\t\tthis.pendingModalPrefill = options?.prefillImage\n\t\t\t? {\n\t\t\t\t\timage: options.prefillImage,\n\t\t\t\t\tautoSubmit: options.autoSubmit === true,\n\t\t\t\t}\n\t\t\t: null;\n\n\t\tconst modal = document.createElement(\"div\");\n\t\tmodal.className = CSS_CLASSES.MODAL;\n\t\tmodal.style.cssText = `\n\t\t\tposition: fixed;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\tbottom: 0;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tbackground-color: rgba(0, 0, 0, 0.8);\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: center;\n\t\t\talign-items: center;\n\t\t\tz-index: 999999999;\n\t\t\tanimation: ww-modal-fade-in 0.3s ease;\n\t\t`;\n\n\t\tif (!document.getElementById(\"ww-modal-animation\")) {\n\t\t\tconst style = document.createElement(\"style\");\n\t\t\tstyle.id = \"ww-modal-animation\";\n\t\t\tstyle.textContent = `\n\t\t\t\t@keyframes ww-modal-fade-in {\n\t\t\t\t\tfrom { opacity: 0; }\n\t\t\t\t\tto { opacity: 1; }\n\t\t\t\t}\n\t\t\t\t@keyframes ww-modal-scale-in {\n\t\t\t\t\tfrom { transform: scale(0.95); opacity: 0; }\n\t\t\t\t\tto { transform: scale(1); opacity: 1; }\n\t\t\t\t}\n\t\t\t`;\n\t\t\tdocument.head.appendChild(style);\n\t\t}\n\n\t\tconst iframeContainer = document.createElement(\"div\");\n\t\tiframeContainer.style.cssText = `\n\t\t\tposition: relative;\n\t\t\twidth: 90%;\n\t\t\theight: 90%;\n\t\t\tmax-width: 480px;\n\t\t\tmax-height: 720px;\n\t\t\tborder-radius: 20px;\n\t\t\toverflow: hidden;\n\t\t\tbox-shadow: 0 24px 48px rgba(0, 0, 0, 0.3), 0 12px 24px rgba(0, 0, 0, 0.2);\n\t\t\tanimation: ww-modal-scale-in 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n\t\t\tbackground: white;\n\t\t`;\n\n\t\tconst iframe = document.createElement(\"iframe\");\n\t\tiframe.src = url;\n\t\tiframe.style.cssText = `\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tborder: none;\n\t\t`;\n\n\t\tconst closeButton = document.createElement(\"button\");\n\t\tcloseButton.innerHTML = `\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n\t\t\t\t<line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n\t\t\t</svg>\n\t\t`;\n\t\tcloseButton.setAttribute(\"aria-label\", \"Close modal\");\n\t\tcloseButton.style.cssText = `\n\t\t\tposition: absolute;\n\t\t\ttop: -48px;\n\t\t\tright: 0;\n\t\t\tbackground: rgba(255, 255, 255, 0.95);\n\t\t\tbackdrop-filter: blur(8px);\n\t\t\t-webkit-backdrop-filter: blur(8px);\n\t\t\tborder: none;\n\t\t\tborder-radius: 50%;\n\t\t\twidth: 40px;\n\t\t\theight: 40px;\n\t\t\tcursor: pointer;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tcolor: #1f2937;\n\t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n\t\t\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n\t\t`;\n\t\tcloseButton.onmouseover = () => {\n\t\t\tcloseButton.style.transform = \"scale(1.1) rotate(90deg)\";\n\t\t\tcloseButton.style.background = \"#ef4444\";\n\t\t\tcloseButton.style.color = \"white\";\n\t\t};\n\t\tcloseButton.onmouseout = () => {\n\t\t\tcloseButton.style.transform = \"scale(1) rotate(0deg)\";\n\t\t\tcloseButton.style.background = \"rgba(255, 255, 255, 0.95)\";\n\t\t\tcloseButton.style.color = \"#1f2937\";\n\t\t};\n\t\tcloseButton.onclick = () => {\n\t\t\tmodal.style.opacity = \"0\";\n\t\t\tiframeContainer.style.transform = \"scale(0.95)\";\n\t\t\tiframeContainer.style.opacity = \"0\";\n\t\t\tsetTimeout(onClose, 300);\n\t\t};\n\n\t\tiframeContainer.appendChild(iframe);\n\t\tiframeContainer.appendChild(closeButton);\n\t\tmodal.appendChild(iframeContainer);\n\t\tdocument.body.appendChild(modal);\n\n\t\tmodal.onclick = (e) => {\n\t\t\tif (e.target === modal) {\n\t\t\t\tcloseButton.click();\n\t\t\t}\n\t\t};\n\n\t\tthis.modalElement = modal;\n\t}\n\n\tclose() {\n\t\tif (this.modalElement) {\n\t\t\tthis.modalElement.remove();\n\t\t\tthis.modalElement = null;\n\t\t}\n\t\tthis.pendingModalPrefill = null;\n\t}\n\n\tsendPendingPrefillToModal() {\n\t\tif (!this.pendingModalPrefill || !this.modalElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst iframe = this.modalElement.querySelector(\"iframe\");\n\t\tif (!(iframe instanceof HTMLIFrameElement) || !iframe.contentWindow) {\n\t\t\treturn;\n\t\t}\n\n\t\tiframe.contentWindow.postMessage(\n\t\t\t{\n\t\t\t\ttype: \"VTO_PREFILL_IMAGE\",\n\t\t\t\timage: this.pendingModalPrefill.image,\n\t\t\t\tautoSubmit: this.pendingModalPrefill.autoSubmit,\n\t\t\t},\n\t\t\tthis.modalOrigin,\n\t\t);\n\t\t// Fallback for production setups where iframe origin differs after redirects.\n\t\tiframe.contentWindow.postMessage(\n\t\t\t{\n\t\t\t\ttype: \"VTO_PREFILL_IMAGE\",\n\t\t\t\timage: this.pendingModalPrefill.image,\n\t\t\t\tautoSubmit: this.pendingModalPrefill.autoSubmit,\n\t\t\t},\n\t\t\t\"*\",\n\t\t);\n\t\tthis.pendingModalPrefill = null;\n\t}\n\n\tpostMessageToModal(type: ModalControlMessageType) {\n\t\tif (!this.modalElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst iframe = this.modalElement.querySelector(\"iframe\");\n\t\tif (!(iframe instanceof HTMLIFrameElement) || !iframe.contentWindow) {\n\t\t\treturn;\n\t\t}\n\n\t\tiframe.contentWindow.postMessage({ type }, this.modalOrigin);\n\t\t// Fallback for production setups where iframe origin differs after redirects.\n\t\tiframe.contentWindow.postMessage({ type }, \"*\");\n\t}\n}\n","export type JobStatus = \"PENDING\" | \"COMPLETED\" | \"FAILED\";\n\nexport interface JobStatusResponse {\n\tstatus: JobStatus;\n\tmessage: string;\n}\n\ninterface VtoDataResponse {\n\tgemini_model?: string;\n\timages?: string[];\n\tadditional_prompt?: string;\n\tis_image_visible?: boolean;\n}\n\ninterface SubmitTryOnOptions {\n\tmodelTier: string;\n\toutfitID: string;\n}\n\nexport interface PreparedTryOnData {\n\tmodelTier: string;\n\toutfitID: string;\n\tproductImages: string[];\n\tgeminiModel: string | null;\n\tadditionalPrompt: string | null;\n\tisImageVisible: boolean;\n}\n\nexport class VtoApiClient {\n\tconstructor(private readonly baseUrl: string) {}\n\n\tprivate async fetchVtoData(\n\t\toutfitId: string,\n\t): Promise<VtoDataResponse | null> {\n\t\ttry {\n\t\t\tconst vtoDataUrl = new URL(\"/api/vto/data\", this.baseUrl);\n\t\t\tvtoDataUrl.searchParams.set(\"outfit_id\", outfitId);\n\n\t\t\tconst response = await fetch(vtoDataUrl.toString());\n\t\t\tif (response.status === 404) return null;\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst errorText = await response.text();\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`[WeWear VTO] Failed to retrieve VTO data (${response.status}): ${errorText}`,\n\t\t\t\t);\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn (await response.json()) as VtoDataResponse;\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"[WeWear VTO] Error retrieving VTO data:\", error);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tasync submitTryOn(\n\t\tmodelImage: Blob,\n\t\tproductImages: string[],\n\t\toptions: SubmitTryOnOptions,\n\t\tpreparedData?: PreparedTryOnData,\n\t): Promise<{ job_id: string }> {\n\t\tconst resolved =\n\t\t\tpreparedData ?? (await this.prepareTryOnData(productImages, options));\n\n\t\tconst formData = new FormData();\n\t\tformData.append(\"model_image\", modelImage, \"model_image.png\");\n\t\tformData.append(\n\t\t\t\"product_image_urls\",\n\t\t\tJSON.stringify(resolved.productImages),\n\t\t);\n\t\tformData.append(\"page_url\", window.location.href);\n\t\tformData.append(\"model_tier\", resolved.modelTier);\n\t\tif (resolved.geminiModel)\n\t\t\tformData.append(\"gemini_model\", resolved.geminiModel);\n\t\tif (resolved.additionalPrompt) {\n\t\t\tformData.append(\"additional_prompt\", resolved.additionalPrompt);\n\t\t}\n\n\t\tif (resolved.outfitID) formData.append(\"outfit_id\", resolved.outfitID);\n\n\t\tconst res = await fetch(`${this.baseUrl}/api/vto`, {\n\t\t\tmethod: \"POST\",\n\t\t\tbody: formData,\n\t\t});\n\t\tif (!res.ok) {\n\t\t\tconst errorText = await res.text();\n\t\t\tconsole.error(\n\t\t\t\t\"[WeWear VTO] API submission failed:\",\n\t\t\t\tres.status,\n\t\t\t\terrorText,\n\t\t\t);\n\t\t\tthrow new Error(`API submission failed: ${res.status}`);\n\t\t}\n\t\treturn res.json();\n\t}\n\n\tasync prepareTryOnData(\n\t\tproductImages: string[],\n\t\toptions: SubmitTryOnOptions,\n\t): Promise<PreparedTryOnData> {\n\t\tconst outfitID = options.outfitID?.trim() ?? \"\";\n\t\tlet resolvedProductImages = productImages;\n\t\tlet resolvedGeminiModel: string | null = null;\n\t\tlet resolvedAdditionalPrompt: string | null = null;\n\t\tlet resolvedIsImageVisible = true;\n\n\t\tif (outfitID) {\n\t\t\tconst vtoData = await this.fetchVtoData(outfitID);\n\t\t\tif (vtoData) {\n\t\t\t\tif (Array.isArray(vtoData.images) && vtoData.images.length > 0) {\n\t\t\t\t\tresolvedProductImages = vtoData.images;\n\t\t\t\t}\n\t\t\t\tif (typeof vtoData.gemini_model === \"string\" && vtoData.gemini_model) {\n\t\t\t\t\tresolvedGeminiModel = vtoData.gemini_model;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\ttypeof vtoData.additional_prompt === \"string\" &&\n\t\t\t\t\tvtoData.additional_prompt\n\t\t\t\t) {\n\t\t\t\t\tresolvedAdditionalPrompt = vtoData.additional_prompt;\n\t\t\t\t}\n\t\t\t\tif (typeof vtoData.is_image_visible === \"boolean\") {\n\t\t\t\t\tresolvedIsImageVisible = vtoData.is_image_visible;\n\t\t\t\t}\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[WeWear VTO] Using stored VTO data for outfit_id=${outfitID}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tmodelTier: options.modelTier,\n\t\t\toutfitID,\n\t\t\tproductImages: resolvedProductImages,\n\t\t\tgeminiModel: resolvedGeminiModel,\n\t\t\tadditionalPrompt: resolvedAdditionalPrompt,\n\t\t\tisImageVisible: resolvedIsImageVisible,\n\t\t};\n\t}\n\n\tasync fetchJobStatus(jobId: string): Promise<JobStatusResponse> {\n\t\tconst res = await fetch(`${this.baseUrl}/api/vto/status?job_id=${jobId}`);\n\t\tif (!res.ok) throw new Error(`Status check failed: ${res.status}`);\n\t\treturn res.json();\n\t}\n\n\tasync fetchJobImage(jobId: string): Promise<string> {\n\t\tconst url = `${this.baseUrl}/api/vto/image?job_id=${jobId}`;\n\n\t\tconst res = await fetch(url);\n\t\tif (res.status === 202) throw new Error(\"202_PROCESSING\");\n\t\tif (!res.ok) throw new Error(`Image fetch failed: ${res.status}`);\n\n\t\tconst blob = await res.blob();\n\t\treturn URL.createObjectURL(blob);\n\t}\n}\n","import { createButton, createButtonContainer } from \"./components/index.js\";\nimport { CSS_CLASSES } from \"./constants.js\";\nimport type { VirtualTryOnConfig } from \"./index.js\";\nimport {\n\tModalManager,\n\ttype ModalControlMessageType,\n\ttype ModalOpenOptions,\n} from \"./widget/modal-manager.js\";\nimport {\n\tVtoApiClient,\n\ttype PreparedTryOnData,\n} from \"./widget/vto-api-client.js\";\n\nexport class VirtualTryOnWidget {\n\tprivate static instanceCounter = 0;\n\tprivate static activeWidgetId: number | null = null;\n\tprivate readonly config: VirtualTryOnConfig;\n\tprivate readonly instanceId: number;\n\tprivate virtualTryOnImageUrl: string | null = null;\n\tprivate originalProductImages: string[] = []; // Store all original product images\n\tprivate preparedTryOnData: PreparedTryOnData | null = null;\n\tprivate isShowingVirtualTryOn: boolean = false;\n\tprivate lastModelImage: Blob | null = null;\n\tprivate cameraButton: HTMLButtonElement | null = null;\n\tprivate readonly modal: ModalManager;\n\tprivate readonly vtoApiClient: VtoApiClient;\n\tprivate iframeMessageListener: ((event: MessageEvent) => void) | null = null;\n\n\tconstructor(config: VirtualTryOnConfig) {\n\t\tthis.instanceId = ++VirtualTryOnWidget.instanceCounter;\n\t\tthis.config = {\n\t\t\tbaseUrl: config.baseUrl,\n\t\t\tproductPageSelector: config.productPageSelector,\n\t\t\tgallerySelector: config.gallerySelector,\n\t\t\tproductImageSelector: config.productImageSelector,\n\t\t\tbuttonPosition: config.buttonPosition,\n\t\t\tmodelTier: config.modelTier,\n\t\t\toutfitID: config.outfitID,\n\t\t\tsingleton: config.singleton,\n\t\t\tgalleryElement: config.galleryElement,\n\t\t};\n\t\tthis.modal = new ModalManager(this.config.baseUrl);\n\t\tthis.vtoApiClient = new VtoApiClient(this.config.baseUrl);\n\t}\n\n\tprivate getContainer(): HTMLElement | null {\n\t\tconst configContainer = this.config.galleryElement;\n\t\tif (configContainer?.isConnected) {\n\t\t\treturn configContainer;\n\t\t}\n\n\t\tconst queriedContainer = document.querySelector(\n\t\t\tthis.config.gallerySelector,\n\t\t);\n\t\treturn queriedContainer instanceof HTMLElement ? queriedContainer : null;\n\t}\n\n\tpublic async init(): Promise<void> {\n\t\ttry {\n\t\t\tconst selectors = this.config.productPageSelector;\n\t\t\tconst currentPath = window.location.pathname;\n\t\t\tconst matches = selectors.some((sel) => currentPath.includes(sel));\n\t\t\tif (!matches) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst container = this.getContainer();\n\t\t\tif (!container) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[WeWear VTO] Gallery container not found:\",\n\t\t\t\t\tthis.config.gallerySelector,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (getComputedStyle(container).position === \"static\") {\n\t\t\t\tcontainer.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tconst button = createButton(this.config.buttonPosition, async () => {\n\t\t\t\tif (this.cameraButton && !this.cameraButton.disabled) {\n\t\t\t\t\tawait this.handleTryOnClick();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.cameraButton = button.querySelector(\".ww-camera-btn\");\n\t\t\tcontainer.appendChild(button);\n\t\t\tconsole.log(\"[WeWear VTO] Widget initialized successfully\");\n\n\t\t\tthis.setupIframeListener();\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Initialization failed:\", error);\n\t\t}\n\t}\n\n\tprivate async handleTryOnClick(): Promise<void> {\n\t\tconsole.log(\"[WeWear VTO] Button clicked, starting try-on process...\");\n\n\t\ttry {\n\t\t\tif (this.originalProductImages.length === 0) {\n\t\t\t\tthis.originalProductImages = this.getAllProductImages();\n\t\t\t\tconsole.log(\n\t\t\t\t\t\"[WeWear VTO] Stored original product images:\",\n\t\t\t\t\tthis.originalProductImages,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconsole.log(\"[WeWear VTO] Retrieved data:\", {\n\t\t\t\tproductImages: this.originalProductImages,\n\t\t\t});\n\n\t\t\tif (this.originalProductImages.length === 0) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[WeWear VTO] Product images not found:\",\n\t\t\t\t\tthis.config.productImageSelector,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.preparedTryOnData = await this.vtoApiClient.prepareTryOnData(\n\t\t\t\tthis.originalProductImages,\n\t\t\t\t{\n\t\t\t\t\tmodelTier: this.config.modelTier,\n\t\t\t\t\toutfitID: this.config.outfitID,\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tconst photoUploadUrl = this.buildPhotoUploadUrl(\n\t\t\t\tthis.preparedTryOnData.productImages,\n\t\t\t);\n\t\t\tthis.showPhotoUploadModal(photoUploadUrl.toString());\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Try-on request failed:\", error);\n\t\t}\n\t}\n\n\tprivate async handleRegenerateClick(): Promise<void> {\n\t\tif (!this.lastModelImage) {\n\t\t\tawait this.handleTryOnClick();\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tthis.originalProductImages = this.getAllProductImages();\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tconsole.warn(\"[WeWear VTO] No product images found for regenerate.\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.preparedTryOnData = await this.vtoApiClient.prepareTryOnData(\n\t\t\tthis.originalProductImages,\n\t\t\t{\n\t\t\t\tmodelTier: this.config.modelTier,\n\t\t\t\toutfitID: this.config.outfitID,\n\t\t\t},\n\t\t);\n\n\t\tconst photoUploadUrl = this.buildPhotoUploadUrl(\n\t\t\tthis.preparedTryOnData.productImages,\n\t\t\t{ startAtConfirm: true },\n\t\t);\n\t\tthis.showPhotoUploadModal(photoUploadUrl.toString(), {\n\t\t\tprefillImage: this.lastModelImage,\n\t\t\tautoSubmit: true,\n\t\t});\n\t}\n\n\tprivate buildPhotoUploadUrl(\n\t\tproductImages: string[],\n\t\toptions?: { startAtConfirm?: boolean },\n\t): URL {\n\t\tconst photoUploadUrl = new URL(`${this.config.baseUrl}`);\n\t\tconst previewProductImage = this.preparedTryOnData?.isImageVisible\n\t\t\t? productImages[0]\n\t\t\t: this.originalProductImages[0];\n\n\t\tphotoUploadUrl.searchParams.append(\n\t\t\t\"ww_product_images\",\n\t\t\tproductImages.join(\",\"),\n\t\t);\n\t\tif (previewProductImage) {\n\t\t\tphotoUploadUrl.searchParams.append(\n\t\t\t\t\"ww_product_preview_image\",\n\t\t\t\tpreviewProductImage,\n\t\t\t);\n\t\t}\n\t\tif (options?.startAtConfirm) {\n\t\t\tphotoUploadUrl.searchParams.append(\"ww_step\", \"2\");\n\t\t\tphotoUploadUrl.searchParams.append(\"ww_regenerate\", \"1\");\n\t\t}\n\t\treturn photoUploadUrl;\n\t}\n\n\tprivate getAllProductImages(): string[] {\n\t\tconst container = this.getContainer();\n\t\tconst scopedElements = container?.querySelectorAll(\n\t\t\tthis.config.productImageSelector,\n\t\t);\n\t\tconst fallbackElements = document.querySelectorAll(\n\t\t\tthis.config.productImageSelector,\n\t\t);\n\t\tconst productImageElements = (\n\t\t\tscopedElements?.length ? scopedElements : fallbackElements\n\t\t) as NodeListOf<HTMLImageElement>;\n\n\t\tconst images: string[] = [];\n\n\t\tproductImageElements.forEach((img) => {\n\t\t\tconst imageUrl =\n\t\t\t\timg.src ||\n\t\t\t\timg.getAttribute(\"data-src\") ||\n\t\t\t\timg.getAttribute(\"data-large_image\") ||\n\t\t\t\t\"\";\n\n\t\t\tif (\n\t\t\t\timageUrl &&\n\t\t\t\t(imageUrl.startsWith(\"http://\") || imageUrl.startsWith(\"https://\")) &&\n\t\t\t\t!images.includes(imageUrl)\n\t\t\t) {\n\t\t\t\timages.push(imageUrl);\n\t\t\t}\n\t\t});\n\n\t\treturn images;\n\t}\n\n\tprivate showPhotoUploadModal(url: string, options?: ModalOpenOptions): void {\n\t\tthis.closeModal();\n\t\tVirtualTryOnWidget.activeWidgetId = this.instanceId;\n\t\tthis.modal.open(url, options, () => this.closeModal());\n\t}\n\n\tprivate closeModal(): void {\n\t\tthis.modal.close();\n\t\tif (VirtualTryOnWidget.activeWidgetId === this.instanceId) {\n\t\t\tVirtualTryOnWidget.activeWidgetId = null;\n\t\t}\n\t}\n\n\tprivate sendPendingPrefillToModal(): void {\n\t\tthis.modal.sendPendingPrefillToModal();\n\t}\n\n\tprivate postMessageToModal(type: ModalControlMessageType): void {\n\t\tthis.modal.postMessageToModal(type);\n\t}\n\n\tprivate setupIframeListener(): void {\n\t\tif (this.iframeMessageListener) {\n\t\t\twindow.removeEventListener(\"message\", this.iframeMessageListener);\n\t\t}\n\n\t\tthis.iframeMessageListener = (event: MessageEvent) => {\n\t\t\tif (VirtualTryOnWidget.activeWidgetId !== this.instanceId) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.origin !== new URL(this.config.baseUrl).origin) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tswitch (event.data.type) {\n\t\t\t\tcase \"VTO_CONFIRM_READY\":\n\t\t\t\t\tthis.sendPendingPrefillToModal();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"VTO_IMAGE_SELECTED\":\n\t\t\t\t\tif (event.data.image) {\n\t\t\t\t\t\tthis.lastModelImage = event.data.image;\n\t\t\t\t\t\tthis.postMessageToModal(\"VTO_SCAN_START\");\n\t\t\t\t\t\tthis.startVirtualTryOn();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"CLOSE_MODAL\":\n\t\t\t\t\tthis.closeModal();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener(\"message\", this.iframeMessageListener);\n\t}\n\n\tprivate async startVirtualTryOn(isRefresh = false): Promise<void> {\n\t\tif (isRefresh) {\n\t\t\tconsole.log(\n\t\t\t\t\"[WeWear VTO] Refreshing virtual try-on with previous parameters...\",\n\t\t\t);\n\t\t}\n\n\t\tif (!this.lastModelImage) {\n\t\t\tconsole.warn(\n\t\t\t\t\"[WeWear VTO] Missing required data to start virtual try-on.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tthis.originalProductImages = this.getAllProductImages();\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tconsole.warn(\"[WeWear VTO] No product images found.\");\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.preparedTryOnData) {\n\t\t\tthis.preparedTryOnData = await this.vtoApiClient.prepareTryOnData(\n\t\t\t\tthis.originalProductImages,\n\t\t\t\t{\n\t\t\t\t\tmodelTier: this.config.modelTier,\n\t\t\t\t\toutfitID: this.config.outfitID,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\tconst container = this.getContainer();\n\n\t\ttry {\n\t\t\tconst submitResponse = await this.vtoApiClient.submitTryOn(\n\t\t\t\tthis.lastModelImage,\n\t\t\t\tthis.preparedTryOnData.productImages,\n\t\t\t\t{\n\t\t\t\t\tmodelTier: this.config.modelTier,\n\t\t\t\t\toutfitID: this.config.outfitID,\n\t\t\t\t},\n\t\t\t\tthis.preparedTryOnData,\n\t\t\t);\n\n\t\t\tlet status = await this.vtoApiClient.fetchJobStatus(\n\t\t\t\tsubmitResponse.job_id,\n\t\t\t);\n\n\t\t\twhile (status.status !== \"COMPLETED\" && status.status !== \"FAILED\") {\n\t\t\t\tawait new Promise((r) => setTimeout(r, 3000));\n\t\t\t\tstatus = await this.vtoApiClient.fetchJobStatus(submitResponse.job_id);\n\t\t\t}\n\n\t\t\tif (status.status === \"COMPLETED\") {\n\t\t\t\tconst finalImage = await this.vtoApiClient.fetchJobImage(\n\t\t\t\t\tsubmitResponse.job_id,\n\t\t\t\t);\n\t\t\t\tif (finalImage) {\n\t\t\t\t\tthis.postMessageToModal(\"VTO_SCAN_COMPLETE\");\n\t\t\t\t\tawait new Promise((r) => setTimeout(r, 500));\n\t\t\t\t\tthis.replaceProductImage(finalImage);\n\t\t\t\t}\n\t\t\t\tif (container instanceof HTMLElement) {\n\t\t\t\t\tthis.showButtonContainer(container);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (status.status === \"FAILED\") {\n\t\t\t\tconsole.error(\"[WeWear VTO] VTO process failed:\", status.message);\n\t\t\t\tawait new Promise((r) => setTimeout(r, 5000));\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Error during virtual try-on process:\", error);\n\t\t\tawait new Promise((r) => setTimeout(r, 5000));\n\t\t} finally {\n\t\t\tthis.postMessageToModal(\"VTO_SCAN_STOP\");\n\t\t\tif (container instanceof HTMLElement) {\n\t\t\t\tthis.showButtonContainer(container);\n\t\t\t}\n\t\t\tthis.closeModal();\n\t\t}\n\t}\n\n\tprivate replaceProductImage(imageUrl: string): void {\n\t\ttry {\n\t\t\tthis.virtualTryOnImageUrl = imageUrl;\n\n\t\t\tconst container = this.getContainer();\n\t\t\tif (!container) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[WeWear VTO] Gallery container not found for image replacement:\",\n\t\t\t\t\tthis.config.gallerySelector,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!container.hasAttribute(\"data-ww-original-content\")) {\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-content\", container.innerHTML);\n\t\t\t}\n\n\t\t\tif (!container.hasAttribute(\"data-ww-container-locked\")) {\n\t\t\t\tconst containerRect = container.getBoundingClientRect();\n\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-container-width\",\n\t\t\t\t\tcontainerRect.width.toString(),\n\t\t\t\t);\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-container-height\",\n\t\t\t\t\tcontainerRect.height.toString(),\n\t\t\t\t);\n\n\t\t\t\tcontainer.style.width = `${containerRect.width}px`;\n\t\t\t\tcontainer.style.height = `${containerRect.height}px`;\n\t\t\t\tcontainer.style.minWidth = `${containerRect.width}px`;\n\t\t\t\tcontainer.style.minHeight = `${containerRect.height}px`;\n\n\t\t\t\tcontainer.style.paddingBottom = \"0\";\n\n\t\t\t\tcontainer.setAttribute(\"data-ww-container-locked\", \"true\");\n\t\t\t}\n\n\t\t\tconst originalImg = container.querySelector(\"img\");\n\t\t\tif (\n\t\t\t\toriginalImg &&\n\t\t\t\t!container.hasAttribute(\"data-ww-original-dimensions\")\n\t\t\t) {\n\t\t\t\tconst computedStyle = window.getComputedStyle(originalImg);\n\t\t\t\tconst rect = originalImg.getBoundingClientRect();\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-width\", computedStyle.width);\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-height\", computedStyle.height);\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-original-rect-width\",\n\t\t\t\t\trect.width.toString(),\n\t\t\t\t);\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-original-rect-height\",\n\t\t\t\t\trect.height.toString(),\n\t\t\t\t);\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-dimensions\", \"true\");\n\t\t\t}\n\n\t\t\tthis.showVirtualTryOnImage(container);\n\n\t\t\tthis.updateButtonContainer(container);\n\n\t\t\tconsole.log(\n\t\t\t\t\"[WeWear VTO] Product image replaced with virtual try-on result\",\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Error replacing product image:\", error);\n\t\t}\n\t}\n\n\tprivate showButtonContainer(container: HTMLElement): void {\n\t\tconst buttonContainer = container.querySelector(\n\t\t\t`.${CSS_CLASSES.BUTTON_CONTAINER}`,\n\t\t) as HTMLElement;\n\t\tif (buttonContainer) {\n\t\t\tbuttonContainer.style.display = \"flex\";\n\t\t}\n\t}\n\n\tprivate updateButtonContainer(container: HTMLElement): void {\n\t\tconst existingButtons = container.querySelectorAll(\n\t\t\t`.${CSS_CLASSES.BUTTON_CONTAINER}`,\n\t\t);\n\t\texistingButtons.forEach((btn) => {\n\t\t\tbtn.remove();\n\t\t});\n\n\t\tconst buttonContainer = createButtonContainer(\n\t\t\tthis.config.buttonPosition,\n\t\t\tthis.virtualTryOnImageUrl !== null,\n\t\t\tasync () => {\n\t\t\t\tawait this.handleTryOnClick();\n\t\t\t},\n\t\t\tasync () => {\n\t\t\t\tawait this.handleRegenerateClick();\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tif (this.isShowingVirtualTryOn) {\n\t\t\t\t\tthis.showOriginalImage(container);\n\t\t\t\t} else {\n\t\t\t\t\tthis.showVirtualTryOnImage(container);\n\t\t\t\t}\n\t\t\t\tthis.updateButtonContainer(container);\n\t\t\t},\n\t\t\tthis.isShowingVirtualTryOn,\n\t\t);\n\n\t\tcontainer.appendChild(buttonContainer);\n\t}\n\n\tprivate showVirtualTryOnImage(container: HTMLElement): void {\n\t\tif (!this.virtualTryOnImageUrl) {\n\t\t\tconsole.warn(\"[WeWear VTO] No virtual try-on image URL available\");\n\t\t\treturn;\n\t\t}\n\n\t\tArray.from(container.children).forEach((child) => {\n\t\t\tif (!child.classList.contains(CSS_CLASSES.BUTTON_CONTAINER)) {\n\t\t\t\tchild.remove();\n\t\t\t}\n\t\t});\n\n\t\tconst originalWidth =\n\t\t\tcontainer.getAttribute(\"data-ww-original-width\") || \"\";\n\t\tconst originalHeight =\n\t\t\tcontainer.getAttribute(\"data-ww-original-height\") || \"\";\n\t\tconst originalRectWidth =\n\t\t\tcontainer.getAttribute(\"data-ww-original-rect-width\") || \"\";\n\t\tconst originalRectHeight =\n\t\t\tcontainer.getAttribute(\"data-ww-original-rect-height\") || \"\";\n\n\t\tconst image = document.createElement(\"img\");\n\t\timage.src = this.virtualTryOnImageUrl;\n\t\timage.alt = \"Virtual Try-On Result\";\n\n\t\tlet widthStyle = \"100%\";\n\t\tlet heightStyle = \"100%\";\n\n\t\tif (originalWidth && originalWidth !== \"auto\" && originalWidth !== \"0px\") {\n\t\t\twidthStyle = originalWidth;\n\t\t} else if (originalRectWidth && originalRectWidth !== \"0\") {\n\t\t\twidthStyle = `${originalRectWidth}px`;\n\t\t}\n\n\t\tif (\n\t\t\toriginalHeight &&\n\t\t\toriginalHeight !== \"auto\" &&\n\t\t\toriginalHeight !== \"0px\"\n\t\t) {\n\t\t\theightStyle = originalHeight;\n\t\t} else if (originalRectHeight && originalRectHeight !== \"0\") {\n\t\t\theightStyle = `${originalRectHeight}px`;\n\t\t}\n\n\t\timage.style.cssText = `\n width: ${widthStyle};\n height: ${heightStyle};\n object-fit: contain;\n `;\n\n\t\tcontainer.prepend(image);\n\n\t\tthis.isShowingVirtualTryOn = true;\n\n\t\tthis.updateButtonContainer(container);\n\n\t\tconsole.log(\n\t\t\t\"[WeWear VTO] Product image replaced with virtual try-on result\",\n\t\t);\n\t}\n\n\tprivate showOriginalImage(container: HTMLElement): void {\n\t\tconst originalContentHTML = container.getAttribute(\n\t\t\t\"data-ww-original-content\",\n\t\t);\n\t\tif (originalContentHTML) {\n\t\t\tArray.from(container.children).forEach((child) => {\n\t\t\t\tif (!child.classList.contains(CSS_CLASSES.BUTTON_CONTAINER)) {\n\t\t\t\t\tchild.remove();\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst tempDiv = document.createElement(\"div\");\n\t\t\ttempDiv.innerHTML = originalContentHTML;\n\t\t\tcontainer.append(...Array.from(tempDiv.children));\n\n\t\t\t// Remove temporary attributes used for VTO state\n\t\t\tcontainer.style.paddingBottom = \"\";\n\t\t}\n\n\t\tthis.isShowingVirtualTryOn = false;\n\t}\n\n\tpublic destroy(): void {\n\t\ttry {\n\t\t\tconst container = this.getContainer();\n\t\t\tif (container) {\n\t\t\t\tconst existingButtons = container.querySelectorAll(\n\t\t\t\t\t`.${CSS_CLASSES.BUTTON_CONTAINER}`,\n\t\t\t\t);\n\t\t\t\texistingButtons.forEach((btn) => {\n\t\t\t\t\tbtn.remove();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.closeModal();\n\n\t\t\tthis.cameraButton = null;\n\n\t\t\tif (this.iframeMessageListener) {\n\t\t\t\twindow.removeEventListener(\"message\", this.iframeMessageListener);\n\t\t\t\tthis.iframeMessageListener = null;\n\t\t\t}\n\n\t\t\tthis.virtualTryOnImageUrl = null;\n\t\t\tthis.isShowingVirtualTryOn = false;\n\t\t\tthis.lastModelImage = null;\n\t\t\tthis.originalProductImages = [];\n\t\t\tthis.preparedTryOnData = null;\n\n\t\t\tconsole.log(\"[WeWear VTO] Widget destroyed successfully\");\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Error during widget destruction:\", error);\n\t\t}\n\t}\n}\n","import type { VirtualTryOnConfig } from \"./index.js\";\nimport { VirtualTryOnWidget } from \"./widget.js\";\n\nlet widgetInstances: VirtualTryOnWidget[] = [];\n\nexport function initVirtualTryOn(config?: VirtualTryOnConfig): void {\n\ttry {\n\t\twidgetInstances.forEach((instance) => {\n\t\t\tinstance.destroy();\n\t\t});\n\t\twidgetInstances = [];\n\n\t\tif (!config) {\n\t\t\tconsole.log(\n\t\t\t\t\"[WeWear VTO] Missing configuration. Widget not initialized.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst allContainers = Array.from(\n\t\t\tdocument.querySelectorAll(config.gallerySelector),\n\t\t).filter(\n\t\t\t(container): container is HTMLElement => container instanceof HTMLElement,\n\t\t);\n\t\tconst shouldUseSingleton = config.singleton !== false;\n\n\t\tif (allContainers.length > 1 && !shouldUseSingleton) {\n\t\t\twidgetInstances = allContainers.map((galleryElement) => {\n\t\t\t\treturn new VirtualTryOnWidget({\n\t\t\t\t\t...config,\n\t\t\t\t\tgalleryElement,\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tconst firstContainer = allContainers[0];\n\t\t\twidgetInstances = [\n\t\t\t\tnew VirtualTryOnWidget({\n\t\t\t\t\t...config,\n\t\t\t\t\tgalleryElement: firstContainer,\n\t\t\t\t}),\n\t\t\t];\n\t\t}\n\n\t\tconst initializeWidgets = () => {\n\t\t\twidgetInstances.forEach((widget) => {\n\t\t\t\twidget.init().catch((error) => {\n\t\t\t\t\tconsole.error(\"[WeWear VTO] Failed to initialize:\", error);\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tif (document.readyState === \"loading\") {\n\t\t\tdocument.addEventListener(\"DOMContentLoaded\", initializeWidgets, {\n\t\t\t\tonce: true,\n\t\t\t});\n\t\t} else {\n\t\t\tinitializeWidgets();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\"[WeWear VTO] Initialization error:\", error);\n\t}\n}\n\nexport function getWidgetInstance(): VirtualTryOnWidget | null {\n\treturn widgetInstances[0] ?? null;\n}\n\nexport function getWidgetInstances(): VirtualTryOnWidget[] {\n\treturn [...widgetInstances];\n}\n\nif (typeof window !== \"undefined\") {\n\tinitVirtualTryOn();\n}\n"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -338,12 +338,38 @@
|
|
|
338
338
|
return null;
|
|
339
339
|
}
|
|
340
340
|
}
|
|
341
|
-
async submitTryOn(modelImage, productImages, options) {
|
|
342
|
-
|
|
343
|
-
const
|
|
341
|
+
async submitTryOn(modelImage, productImages, options, preparedData) {
|
|
342
|
+
const resolved = preparedData !== null && preparedData !== void 0 ? preparedData : (await this.prepareTryOnData(productImages, options));
|
|
343
|
+
const formData = new FormData();
|
|
344
|
+
formData.append("model_image", modelImage, "model_image.png");
|
|
345
|
+
formData.append("product_image_urls", JSON.stringify(resolved.productImages));
|
|
346
|
+
formData.append("page_url", window.location.href);
|
|
347
|
+
formData.append("model_tier", resolved.modelTier);
|
|
348
|
+
if (resolved.geminiModel)
|
|
349
|
+
formData.append("gemini_model", resolved.geminiModel);
|
|
350
|
+
if (resolved.additionalPrompt) {
|
|
351
|
+
formData.append("additional_prompt", resolved.additionalPrompt);
|
|
352
|
+
}
|
|
353
|
+
if (resolved.outfitID)
|
|
354
|
+
formData.append("outfit_id", resolved.outfitID);
|
|
355
|
+
const res = await fetch(`${this.baseUrl}/api/vto`, {
|
|
356
|
+
method: "POST",
|
|
357
|
+
body: formData,
|
|
358
|
+
});
|
|
359
|
+
if (!res.ok) {
|
|
360
|
+
const errorText = await res.text();
|
|
361
|
+
console.error("[WeWear VTO] API submission failed:", res.status, errorText);
|
|
362
|
+
throw new Error(`API submission failed: ${res.status}`);
|
|
363
|
+
}
|
|
364
|
+
return res.json();
|
|
365
|
+
}
|
|
366
|
+
async prepareTryOnData(productImages, options) {
|
|
367
|
+
var _a, _b;
|
|
368
|
+
const outfitID = (_b = (_a = options.outfitID) === null || _a === void 0 ? void 0 : _a.trim()) !== null && _b !== void 0 ? _b : "";
|
|
344
369
|
let resolvedProductImages = productImages;
|
|
345
370
|
let resolvedGeminiModel = null;
|
|
346
371
|
let resolvedAdditionalPrompt = null;
|
|
372
|
+
let resolvedIsImageVisible = true;
|
|
347
373
|
if (outfitID) {
|
|
348
374
|
const vtoData = await this.fetchVtoData(outfitID);
|
|
349
375
|
if (vtoData) {
|
|
@@ -357,31 +383,20 @@
|
|
|
357
383
|
vtoData.additional_prompt) {
|
|
358
384
|
resolvedAdditionalPrompt = vtoData.additional_prompt;
|
|
359
385
|
}
|
|
386
|
+
if (typeof vtoData.is_image_visible === "boolean") {
|
|
387
|
+
resolvedIsImageVisible = vtoData.is_image_visible;
|
|
388
|
+
}
|
|
360
389
|
console.log(`[WeWear VTO] Using stored VTO data for outfit_id=${outfitID}`);
|
|
361
390
|
}
|
|
362
391
|
}
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
formData.append("additional_prompt", resolvedAdditionalPrompt);
|
|
372
|
-
}
|
|
373
|
-
if (outfitID)
|
|
374
|
-
formData.append("outfit_id", outfitID);
|
|
375
|
-
const res = await fetch(`${this.baseUrl}/api/vto`, {
|
|
376
|
-
method: "POST",
|
|
377
|
-
body: formData,
|
|
378
|
-
});
|
|
379
|
-
if (!res.ok) {
|
|
380
|
-
const errorText = await res.text();
|
|
381
|
-
console.error("[WeWear VTO] API submission failed:", res.status, errorText);
|
|
382
|
-
throw new Error(`API submission failed: ${res.status}`);
|
|
383
|
-
}
|
|
384
|
-
return res.json();
|
|
392
|
+
return {
|
|
393
|
+
modelTier: options.modelTier,
|
|
394
|
+
outfitID,
|
|
395
|
+
productImages: resolvedProductImages,
|
|
396
|
+
geminiModel: resolvedGeminiModel,
|
|
397
|
+
additionalPrompt: resolvedAdditionalPrompt,
|
|
398
|
+
isImageVisible: resolvedIsImageVisible,
|
|
399
|
+
};
|
|
385
400
|
}
|
|
386
401
|
async fetchJobStatus(jobId) {
|
|
387
402
|
const res = await fetch(`${this.baseUrl}/api/vto/status?job_id=${jobId}`);
|
|
@@ -405,6 +420,7 @@
|
|
|
405
420
|
constructor(config) {
|
|
406
421
|
this.virtualTryOnImageUrl = null;
|
|
407
422
|
this.originalProductImages = []; // Store all original product images
|
|
423
|
+
this.preparedTryOnData = null;
|
|
408
424
|
this.isShowingVirtualTryOn = false;
|
|
409
425
|
this.lastModelImage = null;
|
|
410
426
|
this.cameraButton = null;
|
|
@@ -476,7 +492,11 @@
|
|
|
476
492
|
console.warn("[WeWear VTO] Product images not found:", this.config.productImageSelector);
|
|
477
493
|
return;
|
|
478
494
|
}
|
|
479
|
-
|
|
495
|
+
this.preparedTryOnData = await this.vtoApiClient.prepareTryOnData(this.originalProductImages, {
|
|
496
|
+
modelTier: this.config.modelTier,
|
|
497
|
+
outfitID: this.config.outfitID,
|
|
498
|
+
});
|
|
499
|
+
const photoUploadUrl = this.buildPhotoUploadUrl(this.preparedTryOnData.productImages);
|
|
480
500
|
this.showPhotoUploadModal(photoUploadUrl.toString());
|
|
481
501
|
}
|
|
482
502
|
catch (error) {
|
|
@@ -495,15 +515,26 @@
|
|
|
495
515
|
console.warn("[WeWear VTO] No product images found for regenerate.");
|
|
496
516
|
return;
|
|
497
517
|
}
|
|
498
|
-
|
|
518
|
+
this.preparedTryOnData = await this.vtoApiClient.prepareTryOnData(this.originalProductImages, {
|
|
519
|
+
modelTier: this.config.modelTier,
|
|
520
|
+
outfitID: this.config.outfitID,
|
|
521
|
+
});
|
|
522
|
+
const photoUploadUrl = this.buildPhotoUploadUrl(this.preparedTryOnData.productImages, { startAtConfirm: true });
|
|
499
523
|
this.showPhotoUploadModal(photoUploadUrl.toString(), {
|
|
500
524
|
prefillImage: this.lastModelImage,
|
|
501
525
|
autoSubmit: true,
|
|
502
526
|
});
|
|
503
527
|
}
|
|
504
|
-
buildPhotoUploadUrl(options) {
|
|
528
|
+
buildPhotoUploadUrl(productImages, options) {
|
|
529
|
+
var _a;
|
|
505
530
|
const photoUploadUrl = new URL(`${this.config.baseUrl}`);
|
|
506
|
-
|
|
531
|
+
const previewProductImage = ((_a = this.preparedTryOnData) === null || _a === void 0 ? void 0 : _a.isImageVisible)
|
|
532
|
+
? productImages[0]
|
|
533
|
+
: this.originalProductImages[0];
|
|
534
|
+
photoUploadUrl.searchParams.append("ww_product_images", productImages.join(","));
|
|
535
|
+
if (previewProductImage) {
|
|
536
|
+
photoUploadUrl.searchParams.append("ww_product_preview_image", previewProductImage);
|
|
537
|
+
}
|
|
507
538
|
if (options === null || options === void 0 ? void 0 : options.startAtConfirm) {
|
|
508
539
|
photoUploadUrl.searchParams.append("ww_step", "2");
|
|
509
540
|
photoUploadUrl.searchParams.append("ww_regenerate", "1");
|
|
@@ -590,12 +621,18 @@
|
|
|
590
621
|
console.warn("[WeWear VTO] No product images found.");
|
|
591
622
|
return;
|
|
592
623
|
}
|
|
624
|
+
if (!this.preparedTryOnData) {
|
|
625
|
+
this.preparedTryOnData = await this.vtoApiClient.prepareTryOnData(this.originalProductImages, {
|
|
626
|
+
modelTier: this.config.modelTier,
|
|
627
|
+
outfitID: this.config.outfitID,
|
|
628
|
+
});
|
|
629
|
+
}
|
|
593
630
|
const container = this.getContainer();
|
|
594
631
|
try {
|
|
595
|
-
const submitResponse = await this.vtoApiClient.submitTryOn(this.lastModelImage, this.
|
|
632
|
+
const submitResponse = await this.vtoApiClient.submitTryOn(this.lastModelImage, this.preparedTryOnData.productImages, {
|
|
596
633
|
modelTier: this.config.modelTier,
|
|
597
634
|
outfitID: this.config.outfitID,
|
|
598
|
-
});
|
|
635
|
+
}, this.preparedTryOnData);
|
|
599
636
|
let status = await this.vtoApiClient.fetchJobStatus(submitResponse.job_id);
|
|
600
637
|
while (status.status !== "COMPLETED" && status.status !== "FAILED") {
|
|
601
638
|
await new Promise((r) => setTimeout(r, 3000));
|
|
@@ -774,6 +811,7 @@
|
|
|
774
811
|
this.isShowingVirtualTryOn = false;
|
|
775
812
|
this.lastModelImage = null;
|
|
776
813
|
this.originalProductImages = [];
|
|
814
|
+
this.preparedTryOnData = null;
|
|
777
815
|
console.log("[WeWear VTO] Widget destroyed successfully");
|
|
778
816
|
}
|
|
779
817
|
catch (error) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/constants.ts","../src/utils.ts","../src/components/button.ts","../src/widget/modal-manager.ts","../src/widget/vto-api-client.ts","../src/widget.ts","../src/installer.ts"],"sourcesContent":["export const CSS_CLASSES = {\n\tBUTTON_CONTAINER: \"wewear-vto-button-container\",\n\tBUTTON: \"wewear-vto-button\",\n\tMODAL: \"wewear-vto-modal\",\n};\n\nexport const Z_INDEX = {\n\tBUTTON: 10,\n};\n","export function getPositionStyles(position: string): string {\n\tswitch (position) {\n\t\tcase \"bottom-left\":\n\t\t\treturn \"left: 20px; bottom: 20px;\";\n\t\tcase \"top-right\":\n\t\t\treturn \"right: 20px; top: 20px;\";\n\t\tcase \"top-left\":\n\t\t\treturn \"left: 20px; top: 20px;\";\n\t\tdefault:\n\t\t\treturn \"right: 20px; bottom: 20px;\";\n\t}\n}\n","import { CSS_CLASSES, Z_INDEX } from \"../constants.js\";\nimport { getPositionStyles } from \"../utils.js\";\n\nconst CAMERA_ICON = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display: block;\">\n\t\t<path d=\"M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z\"></path>\n\t\t<circle cx=\"12\" cy=\"13\" r=\"3\"></circle>\n\t</svg>\n`;\n\nconst SPARKLES_ICON = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display: block; flex-shrink: 0;\">\n\t\t<path d=\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\"/>\n\t\t<path d=\"M20 2v4\"/>\n\t\t<path d=\"M22 4h-4\"/>\n\t\t<circle cx=\"4\" cy=\"20\" r=\"2\"/>\n\t</svg>\n`;\n\nconst REFRESH_ICON = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display: block;\">\n\t\t<path d=\"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"></path>\n\t\t<path d=\"M3 3v5h5\"></path>\n\t\t<path d=\"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16\"></path>\n\t\t<path d=\"M16 16h5v5\"></path>\n\t</svg>\n`;\n\nconst CONTAINER_STYLE = `\n\tposition: absolute;\n\tdisplay: flex;\n\tgap: 4px;\n\tborder-radius: 100px;\n\tbackground: white;\n\tpadding: 4px;\n\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n\tz-index: ${Z_INDEX.BUTTON};\n\ttransition: all 0.2s ease;\n`;\n\nconst ICON_BUTTON_STYLE = `\n\tdisplay: flex;\n\twidth: 40px;\n\theight: 40px;\n\tcursor: pointer;\n\talign-items: center;\n\tjustify-content: center;\n\tborder-radius: 100px;\n\tpadding: 0;\n\tborder: none;\n\ttransition: all 0.2s ease;\n\tflex-shrink: 0;\n`;\n\nconst PRIMARY_STYLE = `${ICON_BUTTON_STYLE}\n\tbackground: white;\n\tcolor: #000000;\n`;\n\nfunction createIconButton(\n\tclassName: string,\n\tariaLabel: string,\n\ticonHtml: string,\n\tstyleCss: string,\n\tonClick: () => void,\n): HTMLButtonElement {\n\tconst button = document.createElement(\"button\");\n\tbutton.type = \"button\";\n\tbutton.className = className;\n\tbutton.setAttribute(\"aria-label\", ariaLabel);\n\tbutton.style.cssText = styleCss;\n\tbutton.innerHTML = iconHtml;\n\tbutton.onclick = onClick;\n\treturn button;\n}\n\nexport function createButtonContainer(\n\tbuttonPosition: string,\n\thasVirtualTryOn: boolean = false,\n\tonCameraClick: () => void,\n\tonRefreshClick?: () => void,\n\tonToggleClick?: () => void,\n\tisShowingVirtualTryOn: boolean = false,\n): HTMLElement {\n\tconst container = document.createElement(\"div\");\n\tcontainer.className = `${CSS_CLASSES.BUTTON_CONTAINER} ww-button-group`;\n\n\tconst positionStyles = getPositionStyles(buttonPosition);\n\tcontainer.style.cssText = `${CONTAINER_STYLE} ${positionStyles}`;\n\n\tconst cameraButton = hasVirtualTryOn\n\t\t? createIconButton(\n\t\t\t\t`${CSS_CLASSES.BUTTON} ww-camera-btn`,\n\t\t\t\t\"Virtual Try-On\",\n\t\t\t\tCAMERA_ICON,\n\t\t\t\tPRIMARY_STYLE,\n\t\t\t\tonCameraClick,\n\t\t\t)\n\t\t: createIconButton(\n\t\t\t\t`${CSS_CLASSES.BUTTON} ww-camera-btn`,\n\t\t\t\t\"Virtual Try-On\",\n\t\t\t\t`${SPARKLES_ICON}<span style=\"display: block;\">TRY THIS LOOK</span>`,\n\t\t\t\t`${PRIMARY_STYLE}\n\t\t\t\t\tpadding: 10px 16px;\n\t\t\t\t\tgap: 8px;\n\t\t\t\t\tfont-size: 14px;\n\t\t\t\t\tfont-weight: 600;\n\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\twidth: auto;\n\t\t\t\t\theight: auto;\n\t\t\t\t`,\n\t\t\t\tonCameraClick,\n\t\t\t);\n\tcontainer.appendChild(cameraButton);\n\n\tif (hasVirtualTryOn) {\n\t\tif (onRefreshClick) {\n\t\t\tconst refreshButton = createIconButton(\n\t\t\t\t\"ww-refresh-btn\",\n\t\t\t\t\"Refresh virtual try-on\",\n\t\t\t\tREFRESH_ICON,\n\t\t\t\t`${ICON_BUTTON_STYLE}\n\t\t\t\t\tbackground: white;\n\t\t\t\t\tcolor: #333333;\n\t\t\t\t`,\n\t\t\t\tonRefreshClick,\n\t\t\t);\n\t\t\tcontainer.appendChild(refreshButton);\n\t\t}\n\n\t\tif (onToggleClick) {\n\t\t\tconst toggleButton = createIconButton(\n\t\t\t\t\"ww-toggle-btn\",\n\t\t\t\tisShowingVirtualTryOn ? \"Show Original Image\" : \"Show Virtual Try-On\",\n\t\t\t\tSPARKLES_ICON,\n\t\t\t\t`${ICON_BUTTON_STYLE}\n\t\t\t\t\tbackground: ${isShowingVirtualTryOn ? \"#333333\" : \"#e5e7eb\"};\n\t\t\t\t\tcolor: ${isShowingVirtualTryOn ? \"white\" : \"#333333\"};\n\t\t\t\t`,\n\t\t\t\tonToggleClick,\n\t\t\t);\n\n\t\t\ttoggleButton.onmouseover = () => {\n\t\t\t\tif (isShowingVirtualTryOn) {\n\t\t\t\t\ttoggleButton.style.background = \"#4a4a4a\";\n\t\t\t\t} else {\n\t\t\t\t\ttoggleButton.style.background = \"#d1d5db\";\n\t\t\t\t}\n\t\t\t};\n\t\t\ttoggleButton.onmouseout = () => {\n\t\t\t\tif (isShowingVirtualTryOn) {\n\t\t\t\t\ttoggleButton.style.background = \"#333333\";\n\t\t\t\t} else {\n\t\t\t\t\ttoggleButton.style.background = \"#e5e7eb\";\n\t\t\t\t}\n\t\t\t};\n\n\t\t\ttoggleButton.onclick = onToggleClick;\n\t\t\tcontainer.appendChild(toggleButton);\n\t\t}\n\t}\n\n\treturn container;\n}\n\nexport function createButton(\n\tbuttonPosition: string,\n\tonClick: () => void,\n\tdisabled: boolean = false,\n): HTMLElement {\n\tconst container = createButtonContainer(buttonPosition, false, onClick);\n\tconst cameraButton = container.querySelector(\n\t\t\".ww-camera-btn\",\n\t) as HTMLButtonElement;\n\tif (cameraButton) {\n\t\tcameraButton.disabled = disabled;\n\t\tif (disabled) {\n\t\t\tcameraButton.style.opacity = \"0.5\";\n\t\t\tcameraButton.style.cursor = \"not-allowed\";\n\t\t\tcameraButton.title = \"Find your ideal size first\";\n\t\t}\n\t}\n\treturn container;\n}\n","import { CSS_CLASSES } from \"../constants.js\";\n\nexport type ModalControlMessageType =\n\t| \"VTO_SCAN_START\"\n\t| \"VTO_SCAN_STOP\"\n\t| \"VTO_SCAN_COMPLETE\";\n\nexport interface ModalOpenOptions {\n\tprefillImage?: Blob;\n\tautoSubmit?: boolean;\n}\n\ninterface PendingModalPrefill {\n\timage: Blob;\n\tautoSubmit: boolean;\n}\n\nexport class ModalManager {\n\tprivate modalElement: HTMLElement | null = null;\n\tprivate pendingModalPrefill: PendingModalPrefill | null = null;\n\tprivate modalOrigin: string;\n\n\tconstructor(baseUrl: string) {\n\t\tthis.modalOrigin = new URL(baseUrl).origin;\n\t}\n\n\topen(\n\t\turl: string,\n\t\toptions: ModalOpenOptions | undefined,\n\t\tonClose: () => void,\n\t) {\n\t\tthis.close();\n\t\tthis.modalOrigin = new URL(url).origin;\n\t\tthis.pendingModalPrefill = options?.prefillImage\n\t\t\t? {\n\t\t\t\t\timage: options.prefillImage,\n\t\t\t\t\tautoSubmit: options.autoSubmit === true,\n\t\t\t\t}\n\t\t\t: null;\n\n\t\tconst modal = document.createElement(\"div\");\n\t\tmodal.className = CSS_CLASSES.MODAL;\n\t\tmodal.style.cssText = `\n\t\t\tposition: fixed;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\tbottom: 0;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tbackground-color: rgba(0, 0, 0, 0.8);\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: center;\n\t\t\talign-items: center;\n\t\t\tz-index: 999999999;\n\t\t\tanimation: ww-modal-fade-in 0.3s ease;\n\t\t`;\n\n\t\tif (!document.getElementById(\"ww-modal-animation\")) {\n\t\t\tconst style = document.createElement(\"style\");\n\t\t\tstyle.id = \"ww-modal-animation\";\n\t\t\tstyle.textContent = `\n\t\t\t\t@keyframes ww-modal-fade-in {\n\t\t\t\t\tfrom { opacity: 0; }\n\t\t\t\t\tto { opacity: 1; }\n\t\t\t\t}\n\t\t\t\t@keyframes ww-modal-scale-in {\n\t\t\t\t\tfrom { transform: scale(0.95); opacity: 0; }\n\t\t\t\t\tto { transform: scale(1); opacity: 1; }\n\t\t\t\t}\n\t\t\t`;\n\t\t\tdocument.head.appendChild(style);\n\t\t}\n\n\t\tconst iframeContainer = document.createElement(\"div\");\n\t\tiframeContainer.style.cssText = `\n\t\t\tposition: relative;\n\t\t\twidth: 90%;\n\t\t\theight: 90%;\n\t\t\tmax-width: 480px;\n\t\t\tmax-height: 720px;\n\t\t\tborder-radius: 20px;\n\t\t\toverflow: hidden;\n\t\t\tbox-shadow: 0 24px 48px rgba(0, 0, 0, 0.3), 0 12px 24px rgba(0, 0, 0, 0.2);\n\t\t\tanimation: ww-modal-scale-in 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n\t\t\tbackground: white;\n\t\t`;\n\n\t\tconst iframe = document.createElement(\"iframe\");\n\t\tiframe.src = url;\n\t\tiframe.style.cssText = `\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tborder: none;\n\t\t`;\n\n\t\tconst closeButton = document.createElement(\"button\");\n\t\tcloseButton.innerHTML = `\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n\t\t\t\t<line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n\t\t\t</svg>\n\t\t`;\n\t\tcloseButton.setAttribute(\"aria-label\", \"Close modal\");\n\t\tcloseButton.style.cssText = `\n\t\t\tposition: absolute;\n\t\t\ttop: -48px;\n\t\t\tright: 0;\n\t\t\tbackground: rgba(255, 255, 255, 0.95);\n\t\t\tbackdrop-filter: blur(8px);\n\t\t\t-webkit-backdrop-filter: blur(8px);\n\t\t\tborder: none;\n\t\t\tborder-radius: 50%;\n\t\t\twidth: 40px;\n\t\t\theight: 40px;\n\t\t\tcursor: pointer;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tcolor: #1f2937;\n\t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n\t\t\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n\t\t`;\n\t\tcloseButton.onmouseover = () => {\n\t\t\tcloseButton.style.transform = \"scale(1.1) rotate(90deg)\";\n\t\t\tcloseButton.style.background = \"#ef4444\";\n\t\t\tcloseButton.style.color = \"white\";\n\t\t};\n\t\tcloseButton.onmouseout = () => {\n\t\t\tcloseButton.style.transform = \"scale(1) rotate(0deg)\";\n\t\t\tcloseButton.style.background = \"rgba(255, 255, 255, 0.95)\";\n\t\t\tcloseButton.style.color = \"#1f2937\";\n\t\t};\n\t\tcloseButton.onclick = () => {\n\t\t\tmodal.style.opacity = \"0\";\n\t\t\tiframeContainer.style.transform = \"scale(0.95)\";\n\t\t\tiframeContainer.style.opacity = \"0\";\n\t\t\tsetTimeout(onClose, 300);\n\t\t};\n\n\t\tiframeContainer.appendChild(iframe);\n\t\tiframeContainer.appendChild(closeButton);\n\t\tmodal.appendChild(iframeContainer);\n\t\tdocument.body.appendChild(modal);\n\n\t\tmodal.onclick = (e) => {\n\t\t\tif (e.target === modal) {\n\t\t\t\tcloseButton.click();\n\t\t\t}\n\t\t};\n\n\t\tthis.modalElement = modal;\n\t}\n\n\tclose() {\n\t\tif (this.modalElement) {\n\t\t\tthis.modalElement.remove();\n\t\t\tthis.modalElement = null;\n\t\t}\n\t\tthis.pendingModalPrefill = null;\n\t}\n\n\tsendPendingPrefillToModal() {\n\t\tif (!this.pendingModalPrefill || !this.modalElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst iframe = this.modalElement.querySelector(\"iframe\");\n\t\tif (!(iframe instanceof HTMLIFrameElement) || !iframe.contentWindow) {\n\t\t\treturn;\n\t\t}\n\n\t\tiframe.contentWindow.postMessage(\n\t\t\t{\n\t\t\t\ttype: \"VTO_PREFILL_IMAGE\",\n\t\t\t\timage: this.pendingModalPrefill.image,\n\t\t\t\tautoSubmit: this.pendingModalPrefill.autoSubmit,\n\t\t\t},\n\t\t\tthis.modalOrigin,\n\t\t);\n\t\t// Fallback for production setups where iframe origin differs after redirects.\n\t\tiframe.contentWindow.postMessage(\n\t\t\t{\n\t\t\t\ttype: \"VTO_PREFILL_IMAGE\",\n\t\t\t\timage: this.pendingModalPrefill.image,\n\t\t\t\tautoSubmit: this.pendingModalPrefill.autoSubmit,\n\t\t\t},\n\t\t\t\"*\",\n\t\t);\n\t\tthis.pendingModalPrefill = null;\n\t}\n\n\tpostMessageToModal(type: ModalControlMessageType) {\n\t\tif (!this.modalElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst iframe = this.modalElement.querySelector(\"iframe\");\n\t\tif (!(iframe instanceof HTMLIFrameElement) || !iframe.contentWindow) {\n\t\t\treturn;\n\t\t}\n\n\t\tiframe.contentWindow.postMessage({ type }, this.modalOrigin);\n\t\t// Fallback for production setups where iframe origin differs after redirects.\n\t\tiframe.contentWindow.postMessage({ type }, \"*\");\n\t}\n}\n","export type JobStatus = \"PENDING\" | \"COMPLETED\" | \"FAILED\";\n\nexport interface JobStatusResponse {\n\tstatus: JobStatus;\n\tmessage: string;\n}\n\ninterface VtoDataResponse {\n\tgemini_model?: string;\n\timages?: string[];\n\tadditional_prompt?: string;\n}\n\ninterface SubmitTryOnOptions {\n\tmodelTier: string;\n\toutfitID: string;\n}\n\nexport class VtoApiClient {\n\tconstructor(private readonly baseUrl: string) {}\n\n\tprivate async fetchVtoData(\n\t\toutfitId: string,\n\t): Promise<VtoDataResponse | null> {\n\t\ttry {\n\t\t\tconst vtoDataUrl = new URL(\"/api/vto/data\", this.baseUrl);\n\t\t\tvtoDataUrl.searchParams.set(\"outfit_id\", outfitId);\n\n\t\t\tconst response = await fetch(vtoDataUrl.toString());\n\t\t\tif (response.status === 404) return null;\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst errorText = await response.text();\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`[WeWear VTO] Failed to retrieve VTO data (${response.status}): ${errorText}`,\n\t\t\t\t);\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn (await response.json()) as VtoDataResponse;\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"[WeWear VTO] Error retrieving VTO data:\", error);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tasync submitTryOn(\n\t\tmodelImage: Blob,\n\t\tproductImages: string[],\n\t\toptions: SubmitTryOnOptions,\n\t): Promise<{ job_id: string }> {\n\t\tconst outfitID = options.outfitID?.trim();\n\t\tlet resolvedProductImages = productImages;\n\t\tlet resolvedGeminiModel: string | null = null;\n\t\tlet resolvedAdditionalPrompt: string | null = null;\n\n\t\tif (outfitID) {\n\t\t\tconst vtoData = await this.fetchVtoData(outfitID);\n\t\t\tif (vtoData) {\n\t\t\t\tif (Array.isArray(vtoData.images) && vtoData.images.length > 0) {\n\t\t\t\t\tresolvedProductImages = vtoData.images;\n\t\t\t\t}\n\t\t\t\tif (typeof vtoData.gemini_model === \"string\" && vtoData.gemini_model) {\n\t\t\t\t\tresolvedGeminiModel = vtoData.gemini_model;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\ttypeof vtoData.additional_prompt === \"string\" &&\n\t\t\t\t\tvtoData.additional_prompt\n\t\t\t\t) {\n\t\t\t\t\tresolvedAdditionalPrompt = vtoData.additional_prompt;\n\t\t\t\t}\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[WeWear VTO] Using stored VTO data for outfit_id=${outfitID}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst formData = new FormData();\n\t\tformData.append(\"model_image\", modelImage, \"model_image.png\");\n\t\tformData.append(\n\t\t\t\"product_image_urls\",\n\t\t\tJSON.stringify(resolvedProductImages),\n\t\t);\n\t\tformData.append(\"page_url\", window.location.href);\n\t\tformData.append(\"model_tier\", options.modelTier);\n\t\tif (resolvedGeminiModel)\n\t\t\tformData.append(\"gemini_model\", resolvedGeminiModel);\n\t\tif (resolvedAdditionalPrompt) {\n\t\t\tformData.append(\"additional_prompt\", resolvedAdditionalPrompt);\n\t\t}\n\n\t\tif (outfitID) formData.append(\"outfit_id\", outfitID);\n\n\t\tconst res = await fetch(`${this.baseUrl}/api/vto`, {\n\t\t\tmethod: \"POST\",\n\t\t\tbody: formData,\n\t\t});\n\t\tif (!res.ok) {\n\t\t\tconst errorText = await res.text();\n\t\t\tconsole.error(\n\t\t\t\t\"[WeWear VTO] API submission failed:\",\n\t\t\t\tres.status,\n\t\t\t\terrorText,\n\t\t\t);\n\t\t\tthrow new Error(`API submission failed: ${res.status}`);\n\t\t}\n\t\treturn res.json();\n\t}\n\n\tasync fetchJobStatus(jobId: string): Promise<JobStatusResponse> {\n\t\tconst res = await fetch(`${this.baseUrl}/api/vto/status?job_id=${jobId}`);\n\t\tif (!res.ok) throw new Error(`Status check failed: ${res.status}`);\n\t\treturn res.json();\n\t}\n\n\tasync fetchJobImage(jobId: string): Promise<string> {\n\t\tconst url = `${this.baseUrl}/api/vto/image?job_id=${jobId}`;\n\n\t\tconst res = await fetch(url);\n\t\tif (res.status === 202) throw new Error(\"202_PROCESSING\");\n\t\tif (!res.ok) throw new Error(`Image fetch failed: ${res.status}`);\n\n\t\tconst blob = await res.blob();\n\t\treturn URL.createObjectURL(blob);\n\t}\n}\n","import { createButton, createButtonContainer } from \"./components/index.js\";\nimport { CSS_CLASSES } from \"./constants.js\";\nimport type { VirtualTryOnConfig } from \"./index.js\";\nimport {\n\tModalManager,\n\ttype ModalControlMessageType,\n\ttype ModalOpenOptions,\n} from \"./widget/modal-manager.js\";\nimport { VtoApiClient } from \"./widget/vto-api-client.js\";\n\nexport class VirtualTryOnWidget {\n\tprivate static instanceCounter = 0;\n\tprivate static activeWidgetId: number | null = null;\n\tprivate readonly config: VirtualTryOnConfig;\n\tprivate readonly instanceId: number;\n\tprivate virtualTryOnImageUrl: string | null = null;\n\tprivate originalProductImages: string[] = []; // Store all original product images\n\tprivate isShowingVirtualTryOn: boolean = false;\n\tprivate lastModelImage: Blob | null = null;\n\tprivate cameraButton: HTMLButtonElement | null = null;\n\tprivate readonly modal: ModalManager;\n\tprivate readonly vtoApiClient: VtoApiClient;\n\tprivate iframeMessageListener: ((event: MessageEvent) => void) | null = null;\n\n\tconstructor(config: VirtualTryOnConfig) {\n\t\tthis.instanceId = ++VirtualTryOnWidget.instanceCounter;\n\t\tthis.config = {\n\t\t\tbaseUrl: config.baseUrl,\n\t\t\tproductPageSelector: config.productPageSelector,\n\t\t\tgallerySelector: config.gallerySelector,\n\t\t\tproductImageSelector: config.productImageSelector,\n\t\t\tbuttonPosition: config.buttonPosition,\n\t\t\tmodelTier: config.modelTier,\n\t\t\toutfitID: config.outfitID,\n\t\t\tsingleton: config.singleton,\n\t\t\tgalleryElement: config.galleryElement,\n\t\t};\n\t\tthis.modal = new ModalManager(this.config.baseUrl);\n\t\tthis.vtoApiClient = new VtoApiClient(this.config.baseUrl);\n\t}\n\n\tprivate getContainer(): HTMLElement | null {\n\t\tconst configContainer = this.config.galleryElement;\n\t\tif (configContainer?.isConnected) {\n\t\t\treturn configContainer;\n\t\t}\n\n\t\tconst queriedContainer = document.querySelector(\n\t\t\tthis.config.gallerySelector,\n\t\t);\n\t\treturn queriedContainer instanceof HTMLElement ? queriedContainer : null;\n\t}\n\n\tpublic async init(): Promise<void> {\n\t\ttry {\n\t\t\tconst selectors = this.config.productPageSelector;\n\t\t\tconst currentPath = window.location.pathname;\n\t\t\tconst matches = selectors.some((sel) => currentPath.includes(sel));\n\t\t\tif (!matches) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst container = this.getContainer();\n\t\t\tif (!container) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[WeWear VTO] Gallery container not found:\",\n\t\t\t\t\tthis.config.gallerySelector,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (getComputedStyle(container).position === \"static\") {\n\t\t\t\tcontainer.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tconst button = createButton(this.config.buttonPosition, async () => {\n\t\t\t\tif (this.cameraButton && !this.cameraButton.disabled) {\n\t\t\t\t\tawait this.handleTryOnClick();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.cameraButton = button.querySelector(\".ww-camera-btn\");\n\t\t\tcontainer.appendChild(button);\n\t\t\tconsole.log(\"[WeWear VTO] Widget initialized successfully\");\n\n\t\t\tthis.setupIframeListener();\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Initialization failed:\", error);\n\t\t}\n\t}\n\n\tprivate async handleTryOnClick(): Promise<void> {\n\t\tconsole.log(\"[WeWear VTO] Button clicked, starting try-on process...\");\n\n\t\ttry {\n\t\t\tif (this.originalProductImages.length === 0) {\n\t\t\t\tthis.originalProductImages = this.getAllProductImages();\n\t\t\t\tconsole.log(\n\t\t\t\t\t\"[WeWear VTO] Stored original product images:\",\n\t\t\t\t\tthis.originalProductImages,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconsole.log(\"[WeWear VTO] Retrieved data:\", {\n\t\t\t\tproductImages: this.originalProductImages,\n\t\t\t});\n\n\t\t\tif (this.originalProductImages.length === 0) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[WeWear VTO] Product images not found:\",\n\t\t\t\t\tthis.config.productImageSelector,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst photoUploadUrl = this.buildPhotoUploadUrl();\n\t\t\tthis.showPhotoUploadModal(photoUploadUrl.toString());\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Try-on request failed:\", error);\n\t\t}\n\t}\n\n\tprivate async handleRegenerateClick(): Promise<void> {\n\t\tif (!this.lastModelImage) {\n\t\t\tawait this.handleTryOnClick();\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tthis.originalProductImages = this.getAllProductImages();\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tconsole.warn(\"[WeWear VTO] No product images found for regenerate.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst photoUploadUrl = this.buildPhotoUploadUrl({ startAtConfirm: true });\n\t\tthis.showPhotoUploadModal(photoUploadUrl.toString(), {\n\t\t\tprefillImage: this.lastModelImage,\n\t\t\tautoSubmit: true,\n\t\t});\n\t}\n\n\tprivate buildPhotoUploadUrl(options?: { startAtConfirm?: boolean }): URL {\n\t\tconst photoUploadUrl = new URL(`${this.config.baseUrl}`);\n\t\tphotoUploadUrl.searchParams.append(\n\t\t\t\"ww_product_images\",\n\t\t\tthis.originalProductImages.join(\",\"),\n\t\t);\n\t\tif (options?.startAtConfirm) {\n\t\t\tphotoUploadUrl.searchParams.append(\"ww_step\", \"2\");\n\t\t\tphotoUploadUrl.searchParams.append(\"ww_regenerate\", \"1\");\n\t\t}\n\t\treturn photoUploadUrl;\n\t}\n\n\tprivate getAllProductImages(): string[] {\n\t\tconst container = this.getContainer();\n\t\tconst scopedElements = container?.querySelectorAll(\n\t\t\tthis.config.productImageSelector,\n\t\t);\n\t\tconst fallbackElements = document.querySelectorAll(\n\t\t\tthis.config.productImageSelector,\n\t\t);\n\t\tconst productImageElements = (\n\t\t\tscopedElements?.length ? scopedElements : fallbackElements\n\t\t) as NodeListOf<HTMLImageElement>;\n\n\t\tconst images: string[] = [];\n\n\t\tproductImageElements.forEach((img) => {\n\t\t\tconst imageUrl =\n\t\t\t\timg.src ||\n\t\t\t\timg.getAttribute(\"data-src\") ||\n\t\t\t\timg.getAttribute(\"data-large_image\") ||\n\t\t\t\t\"\";\n\n\t\t\tif (\n\t\t\t\timageUrl &&\n\t\t\t\t(imageUrl.startsWith(\"http://\") || imageUrl.startsWith(\"https://\")) &&\n\t\t\t\t!images.includes(imageUrl)\n\t\t\t) {\n\t\t\t\timages.push(imageUrl);\n\t\t\t}\n\t\t});\n\n\t\treturn images;\n\t}\n\n\tprivate showPhotoUploadModal(url: string, options?: ModalOpenOptions): void {\n\t\tthis.closeModal();\n\t\tVirtualTryOnWidget.activeWidgetId = this.instanceId;\n\t\tthis.modal.open(url, options, () => this.closeModal());\n\t}\n\n\tprivate closeModal(): void {\n\t\tthis.modal.close();\n\t\tif (VirtualTryOnWidget.activeWidgetId === this.instanceId) {\n\t\t\tVirtualTryOnWidget.activeWidgetId = null;\n\t\t}\n\t}\n\n\tprivate sendPendingPrefillToModal(): void {\n\t\tthis.modal.sendPendingPrefillToModal();\n\t}\n\n\tprivate postMessageToModal(type: ModalControlMessageType): void {\n\t\tthis.modal.postMessageToModal(type);\n\t}\n\n\tprivate setupIframeListener(): void {\n\t\tif (this.iframeMessageListener) {\n\t\t\twindow.removeEventListener(\"message\", this.iframeMessageListener);\n\t\t}\n\n\t\tthis.iframeMessageListener = (event: MessageEvent) => {\n\t\t\tif (VirtualTryOnWidget.activeWidgetId !== this.instanceId) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.origin !== new URL(this.config.baseUrl).origin) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tswitch (event.data.type) {\n\t\t\t\tcase \"VTO_CONFIRM_READY\":\n\t\t\t\t\tthis.sendPendingPrefillToModal();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"VTO_IMAGE_SELECTED\":\n\t\t\t\t\tif (event.data.image) {\n\t\t\t\t\t\tthis.lastModelImage = event.data.image;\n\t\t\t\t\t\tthis.postMessageToModal(\"VTO_SCAN_START\");\n\t\t\t\t\t\tthis.startVirtualTryOn();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"CLOSE_MODAL\":\n\t\t\t\t\tthis.closeModal();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener(\"message\", this.iframeMessageListener);\n\t}\n\n\tprivate async startVirtualTryOn(isRefresh = false): Promise<void> {\n\t\tif (isRefresh) {\n\t\t\tconsole.log(\n\t\t\t\t\"[WeWear VTO] Refreshing virtual try-on with previous parameters...\",\n\t\t\t);\n\t\t}\n\n\t\tif (!this.lastModelImage) {\n\t\t\tconsole.warn(\n\t\t\t\t\"[WeWear VTO] Missing required data to start virtual try-on.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tthis.originalProductImages = this.getAllProductImages();\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tconsole.warn(\"[WeWear VTO] No product images found.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst container = this.getContainer();\n\n\t\ttry {\n\t\t\tconst submitResponse = await this.vtoApiClient.submitTryOn(\n\t\t\t\tthis.lastModelImage,\n\t\t\t\tthis.originalProductImages,\n\t\t\t\t{\n\t\t\t\t\tmodelTier: this.config.modelTier,\n\t\t\t\t\toutfitID: this.config.outfitID,\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tlet status = await this.vtoApiClient.fetchJobStatus(\n\t\t\t\tsubmitResponse.job_id,\n\t\t\t);\n\n\t\t\twhile (status.status !== \"COMPLETED\" && status.status !== \"FAILED\") {\n\t\t\t\tawait new Promise((r) => setTimeout(r, 3000));\n\t\t\t\tstatus = await this.vtoApiClient.fetchJobStatus(submitResponse.job_id);\n\t\t\t}\n\n\t\t\tif (status.status === \"COMPLETED\") {\n\t\t\t\tconst finalImage = await this.vtoApiClient.fetchJobImage(\n\t\t\t\t\tsubmitResponse.job_id,\n\t\t\t\t);\n\t\t\t\tif (finalImage) {\n\t\t\t\t\tthis.postMessageToModal(\"VTO_SCAN_COMPLETE\");\n\t\t\t\t\tawait new Promise((r) => setTimeout(r, 500));\n\t\t\t\t\tthis.replaceProductImage(finalImage);\n\t\t\t\t}\n\t\t\t\tif (container instanceof HTMLElement) {\n\t\t\t\t\tthis.showButtonContainer(container);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (status.status === \"FAILED\") {\n\t\t\t\tconsole.error(\"[WeWear VTO] VTO process failed:\", status.message);\n\t\t\t\tawait new Promise((r) => setTimeout(r, 5000));\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Error during virtual try-on process:\", error);\n\t\t\tawait new Promise((r) => setTimeout(r, 5000));\n\t\t} finally {\n\t\t\tthis.postMessageToModal(\"VTO_SCAN_STOP\");\n\t\t\tif (container instanceof HTMLElement) {\n\t\t\t\tthis.showButtonContainer(container);\n\t\t\t}\n\t\t\tthis.closeModal();\n\t\t}\n\t}\n\n\tprivate replaceProductImage(imageUrl: string): void {\n\t\ttry {\n\t\t\tthis.virtualTryOnImageUrl = imageUrl;\n\n\t\t\tconst container = this.getContainer();\n\t\t\tif (!container) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[WeWear VTO] Gallery container not found for image replacement:\",\n\t\t\t\t\tthis.config.gallerySelector,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!container.hasAttribute(\"data-ww-original-content\")) {\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-content\", container.innerHTML);\n\t\t\t}\n\n\t\t\tif (!container.hasAttribute(\"data-ww-container-locked\")) {\n\t\t\t\tconst containerRect = container.getBoundingClientRect();\n\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-container-width\",\n\t\t\t\t\tcontainerRect.width.toString(),\n\t\t\t\t);\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-container-height\",\n\t\t\t\t\tcontainerRect.height.toString(),\n\t\t\t\t);\n\n\t\t\t\tcontainer.style.width = `${containerRect.width}px`;\n\t\t\t\tcontainer.style.height = `${containerRect.height}px`;\n\t\t\t\tcontainer.style.minWidth = `${containerRect.width}px`;\n\t\t\t\tcontainer.style.minHeight = `${containerRect.height}px`;\n\n\t\t\t\tcontainer.style.paddingBottom = \"0\";\n\n\t\t\t\tcontainer.setAttribute(\"data-ww-container-locked\", \"true\");\n\t\t\t}\n\n\t\t\tconst originalImg = container.querySelector(\"img\");\n\t\t\tif (\n\t\t\t\toriginalImg &&\n\t\t\t\t!container.hasAttribute(\"data-ww-original-dimensions\")\n\t\t\t) {\n\t\t\t\tconst computedStyle = window.getComputedStyle(originalImg);\n\t\t\t\tconst rect = originalImg.getBoundingClientRect();\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-width\", computedStyle.width);\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-height\", computedStyle.height);\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-original-rect-width\",\n\t\t\t\t\trect.width.toString(),\n\t\t\t\t);\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-original-rect-height\",\n\t\t\t\t\trect.height.toString(),\n\t\t\t\t);\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-dimensions\", \"true\");\n\t\t\t}\n\n\t\t\tthis.showVirtualTryOnImage(container);\n\n\t\t\tthis.updateButtonContainer(container);\n\n\t\t\tconsole.log(\n\t\t\t\t\"[WeWear VTO] Product image replaced with virtual try-on result\",\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Error replacing product image:\", error);\n\t\t}\n\t}\n\n\tprivate showButtonContainer(container: HTMLElement): void {\n\t\tconst buttonContainer = container.querySelector(\n\t\t\t`.${CSS_CLASSES.BUTTON_CONTAINER}`,\n\t\t) as HTMLElement;\n\t\tif (buttonContainer) {\n\t\t\tbuttonContainer.style.display = \"flex\";\n\t\t}\n\t}\n\n\tprivate updateButtonContainer(container: HTMLElement): void {\n\t\tconst existingButtons = container.querySelectorAll(\n\t\t\t`.${CSS_CLASSES.BUTTON_CONTAINER}`,\n\t\t);\n\t\texistingButtons.forEach((btn) => {\n\t\t\tbtn.remove();\n\t\t});\n\n\t\tconst buttonContainer = createButtonContainer(\n\t\t\tthis.config.buttonPosition,\n\t\t\tthis.virtualTryOnImageUrl !== null,\n\t\t\tasync () => {\n\t\t\t\tawait this.handleTryOnClick();\n\t\t\t},\n\t\t\tasync () => {\n\t\t\t\tawait this.handleRegenerateClick();\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tif (this.isShowingVirtualTryOn) {\n\t\t\t\t\tthis.showOriginalImage(container);\n\t\t\t\t} else {\n\t\t\t\t\tthis.showVirtualTryOnImage(container);\n\t\t\t\t}\n\t\t\t\tthis.updateButtonContainer(container);\n\t\t\t},\n\t\t\tthis.isShowingVirtualTryOn,\n\t\t);\n\n\t\tcontainer.appendChild(buttonContainer);\n\t}\n\n\tprivate showVirtualTryOnImage(container: HTMLElement): void {\n\t\tif (!this.virtualTryOnImageUrl) {\n\t\t\tconsole.warn(\"[WeWear VTO] No virtual try-on image URL available\");\n\t\t\treturn;\n\t\t}\n\n\t\tArray.from(container.children).forEach((child) => {\n\t\t\tif (!child.classList.contains(CSS_CLASSES.BUTTON_CONTAINER)) {\n\t\t\t\tchild.remove();\n\t\t\t}\n\t\t});\n\n\t\tconst originalWidth =\n\t\t\tcontainer.getAttribute(\"data-ww-original-width\") || \"\";\n\t\tconst originalHeight =\n\t\t\tcontainer.getAttribute(\"data-ww-original-height\") || \"\";\n\t\tconst originalRectWidth =\n\t\t\tcontainer.getAttribute(\"data-ww-original-rect-width\") || \"\";\n\t\tconst originalRectHeight =\n\t\t\tcontainer.getAttribute(\"data-ww-original-rect-height\") || \"\";\n\n\t\tconst image = document.createElement(\"img\");\n\t\timage.src = this.virtualTryOnImageUrl;\n\t\timage.alt = \"Virtual Try-On Result\";\n\n\t\tlet widthStyle = \"100%\";\n\t\tlet heightStyle = \"100%\";\n\n\t\tif (originalWidth && originalWidth !== \"auto\" && originalWidth !== \"0px\") {\n\t\t\twidthStyle = originalWidth;\n\t\t} else if (originalRectWidth && originalRectWidth !== \"0\") {\n\t\t\twidthStyle = `${originalRectWidth}px`;\n\t\t}\n\n\t\tif (\n\t\t\toriginalHeight &&\n\t\t\toriginalHeight !== \"auto\" &&\n\t\t\toriginalHeight !== \"0px\"\n\t\t) {\n\t\t\theightStyle = originalHeight;\n\t\t} else if (originalRectHeight && originalRectHeight !== \"0\") {\n\t\t\theightStyle = `${originalRectHeight}px`;\n\t\t}\n\n\t\timage.style.cssText = `\n width: ${widthStyle};\n height: ${heightStyle};\n object-fit: contain;\n `;\n\n\t\tcontainer.prepend(image);\n\n\t\tthis.isShowingVirtualTryOn = true;\n\n\t\tthis.updateButtonContainer(container);\n\n\t\tconsole.log(\n\t\t\t\"[WeWear VTO] Product image replaced with virtual try-on result\",\n\t\t);\n\t}\n\n\tprivate showOriginalImage(container: HTMLElement): void {\n\t\tconst originalContentHTML = container.getAttribute(\n\t\t\t\"data-ww-original-content\",\n\t\t);\n\t\tif (originalContentHTML) {\n\t\t\tArray.from(container.children).forEach((child) => {\n\t\t\t\tif (!child.classList.contains(CSS_CLASSES.BUTTON_CONTAINER)) {\n\t\t\t\t\tchild.remove();\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst tempDiv = document.createElement(\"div\");\n\t\t\ttempDiv.innerHTML = originalContentHTML;\n\t\t\tcontainer.append(...Array.from(tempDiv.children));\n\n\t\t\t// Remove temporary attributes used for VTO state\n\t\t\tcontainer.style.paddingBottom = \"\";\n\t\t}\n\n\t\tthis.isShowingVirtualTryOn = false;\n\t}\n\n\tpublic destroy(): void {\n\t\ttry {\n\t\t\tconst container = this.getContainer();\n\t\t\tif (container) {\n\t\t\t\tconst existingButtons = container.querySelectorAll(\n\t\t\t\t\t`.${CSS_CLASSES.BUTTON_CONTAINER}`,\n\t\t\t\t);\n\t\t\t\texistingButtons.forEach((btn) => {\n\t\t\t\t\tbtn.remove();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.closeModal();\n\n\t\t\tthis.cameraButton = null;\n\n\t\t\tif (this.iframeMessageListener) {\n\t\t\t\twindow.removeEventListener(\"message\", this.iframeMessageListener);\n\t\t\t\tthis.iframeMessageListener = null;\n\t\t\t}\n\n\t\t\tthis.virtualTryOnImageUrl = null;\n\t\t\tthis.isShowingVirtualTryOn = false;\n\t\t\tthis.lastModelImage = null;\n\t\t\tthis.originalProductImages = [];\n\n\t\t\tconsole.log(\"[WeWear VTO] Widget destroyed successfully\");\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Error during widget destruction:\", error);\n\t\t}\n\t}\n}\n","import type { VirtualTryOnConfig } from \"./index.js\";\nimport { VirtualTryOnWidget } from \"./widget.js\";\n\nlet widgetInstances: VirtualTryOnWidget[] = [];\n\nexport function initVirtualTryOn(config?: VirtualTryOnConfig): void {\n\ttry {\n\t\twidgetInstances.forEach((instance) => {\n\t\t\tinstance.destroy();\n\t\t});\n\t\twidgetInstances = [];\n\n\t\tif (!config) {\n\t\t\tconsole.log(\n\t\t\t\t\"[WeWear VTO] Missing configuration. Widget not initialized.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst allContainers = Array.from(\n\t\t\tdocument.querySelectorAll(config.gallerySelector),\n\t\t).filter(\n\t\t\t(container): container is HTMLElement => container instanceof HTMLElement,\n\t\t);\n\t\tconst shouldUseSingleton = config.singleton !== false;\n\n\t\tif (allContainers.length > 1 && !shouldUseSingleton) {\n\t\t\twidgetInstances = allContainers.map((galleryElement) => {\n\t\t\t\treturn new VirtualTryOnWidget({\n\t\t\t\t\t...config,\n\t\t\t\t\tgalleryElement,\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tconst firstContainer = allContainers[0];\n\t\t\twidgetInstances = [\n\t\t\t\tnew VirtualTryOnWidget({\n\t\t\t\t\t...config,\n\t\t\t\t\tgalleryElement: firstContainer,\n\t\t\t\t}),\n\t\t\t];\n\t\t}\n\n\t\tconst initializeWidgets = () => {\n\t\t\twidgetInstances.forEach((widget) => {\n\t\t\t\twidget.init().catch((error) => {\n\t\t\t\t\tconsole.error(\"[WeWear VTO] Failed to initialize:\", error);\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tif (document.readyState === \"loading\") {\n\t\t\tdocument.addEventListener(\"DOMContentLoaded\", initializeWidgets, {\n\t\t\t\tonce: true,\n\t\t\t});\n\t\t} else {\n\t\t\tinitializeWidgets();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\"[WeWear VTO] Initialization error:\", error);\n\t}\n}\n\nexport function getWidgetInstance(): VirtualTryOnWidget | null {\n\treturn widgetInstances[0] ?? null;\n}\n\nexport function getWidgetInstances(): VirtualTryOnWidget[] {\n\treturn [...widgetInstances];\n}\n\nif (typeof window !== \"undefined\") {\n\tinitVirtualTryOn();\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/constants.ts","../src/utils.ts","../src/components/button.ts","../src/widget/modal-manager.ts","../src/widget/vto-api-client.ts","../src/widget.ts","../src/installer.ts"],"sourcesContent":["export const CSS_CLASSES = {\n\tBUTTON_CONTAINER: \"wewear-vto-button-container\",\n\tBUTTON: \"wewear-vto-button\",\n\tMODAL: \"wewear-vto-modal\",\n};\n\nexport const Z_INDEX = {\n\tBUTTON: 10,\n};\n","export function getPositionStyles(position: string): string {\n\tswitch (position) {\n\t\tcase \"bottom-left\":\n\t\t\treturn \"left: 20px; bottom: 20px;\";\n\t\tcase \"top-right\":\n\t\t\treturn \"right: 20px; top: 20px;\";\n\t\tcase \"top-left\":\n\t\t\treturn \"left: 20px; top: 20px;\";\n\t\tdefault:\n\t\t\treturn \"right: 20px; bottom: 20px;\";\n\t}\n}\n","import { CSS_CLASSES, Z_INDEX } from \"../constants.js\";\nimport { getPositionStyles } from \"../utils.js\";\n\nconst CAMERA_ICON = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display: block;\">\n\t\t<path d=\"M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z\"></path>\n\t\t<circle cx=\"12\" cy=\"13\" r=\"3\"></circle>\n\t</svg>\n`;\n\nconst SPARKLES_ICON = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display: block; flex-shrink: 0;\">\n\t\t<path d=\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\"/>\n\t\t<path d=\"M20 2v4\"/>\n\t\t<path d=\"M22 4h-4\"/>\n\t\t<circle cx=\"4\" cy=\"20\" r=\"2\"/>\n\t</svg>\n`;\n\nconst REFRESH_ICON = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display: block;\">\n\t\t<path d=\"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"></path>\n\t\t<path d=\"M3 3v5h5\"></path>\n\t\t<path d=\"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16\"></path>\n\t\t<path d=\"M16 16h5v5\"></path>\n\t</svg>\n`;\n\nconst CONTAINER_STYLE = `\n\tposition: absolute;\n\tdisplay: flex;\n\tgap: 4px;\n\tborder-radius: 100px;\n\tbackground: white;\n\tpadding: 4px;\n\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n\tz-index: ${Z_INDEX.BUTTON};\n\ttransition: all 0.2s ease;\n`;\n\nconst ICON_BUTTON_STYLE = `\n\tdisplay: flex;\n\twidth: 40px;\n\theight: 40px;\n\tcursor: pointer;\n\talign-items: center;\n\tjustify-content: center;\n\tborder-radius: 100px;\n\tpadding: 0;\n\tborder: none;\n\ttransition: all 0.2s ease;\n\tflex-shrink: 0;\n`;\n\nconst PRIMARY_STYLE = `${ICON_BUTTON_STYLE}\n\tbackground: white;\n\tcolor: #000000;\n`;\n\nfunction createIconButton(\n\tclassName: string,\n\tariaLabel: string,\n\ticonHtml: string,\n\tstyleCss: string,\n\tonClick: () => void,\n): HTMLButtonElement {\n\tconst button = document.createElement(\"button\");\n\tbutton.type = \"button\";\n\tbutton.className = className;\n\tbutton.setAttribute(\"aria-label\", ariaLabel);\n\tbutton.style.cssText = styleCss;\n\tbutton.innerHTML = iconHtml;\n\tbutton.onclick = onClick;\n\treturn button;\n}\n\nexport function createButtonContainer(\n\tbuttonPosition: string,\n\thasVirtualTryOn: boolean = false,\n\tonCameraClick: () => void,\n\tonRefreshClick?: () => void,\n\tonToggleClick?: () => void,\n\tisShowingVirtualTryOn: boolean = false,\n): HTMLElement {\n\tconst container = document.createElement(\"div\");\n\tcontainer.className = `${CSS_CLASSES.BUTTON_CONTAINER} ww-button-group`;\n\n\tconst positionStyles = getPositionStyles(buttonPosition);\n\tcontainer.style.cssText = `${CONTAINER_STYLE} ${positionStyles}`;\n\n\tconst cameraButton = hasVirtualTryOn\n\t\t? createIconButton(\n\t\t\t\t`${CSS_CLASSES.BUTTON} ww-camera-btn`,\n\t\t\t\t\"Virtual Try-On\",\n\t\t\t\tCAMERA_ICON,\n\t\t\t\tPRIMARY_STYLE,\n\t\t\t\tonCameraClick,\n\t\t\t)\n\t\t: createIconButton(\n\t\t\t\t`${CSS_CLASSES.BUTTON} ww-camera-btn`,\n\t\t\t\t\"Virtual Try-On\",\n\t\t\t\t`${SPARKLES_ICON}<span style=\"display: block;\">TRY THIS LOOK</span>`,\n\t\t\t\t`${PRIMARY_STYLE}\n\t\t\t\t\tpadding: 10px 16px;\n\t\t\t\t\tgap: 8px;\n\t\t\t\t\tfont-size: 14px;\n\t\t\t\t\tfont-weight: 600;\n\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\twidth: auto;\n\t\t\t\t\theight: auto;\n\t\t\t\t`,\n\t\t\t\tonCameraClick,\n\t\t\t);\n\tcontainer.appendChild(cameraButton);\n\n\tif (hasVirtualTryOn) {\n\t\tif (onRefreshClick) {\n\t\t\tconst refreshButton = createIconButton(\n\t\t\t\t\"ww-refresh-btn\",\n\t\t\t\t\"Refresh virtual try-on\",\n\t\t\t\tREFRESH_ICON,\n\t\t\t\t`${ICON_BUTTON_STYLE}\n\t\t\t\t\tbackground: white;\n\t\t\t\t\tcolor: #333333;\n\t\t\t\t`,\n\t\t\t\tonRefreshClick,\n\t\t\t);\n\t\t\tcontainer.appendChild(refreshButton);\n\t\t}\n\n\t\tif (onToggleClick) {\n\t\t\tconst toggleButton = createIconButton(\n\t\t\t\t\"ww-toggle-btn\",\n\t\t\t\tisShowingVirtualTryOn ? \"Show Original Image\" : \"Show Virtual Try-On\",\n\t\t\t\tSPARKLES_ICON,\n\t\t\t\t`${ICON_BUTTON_STYLE}\n\t\t\t\t\tbackground: ${isShowingVirtualTryOn ? \"#333333\" : \"#e5e7eb\"};\n\t\t\t\t\tcolor: ${isShowingVirtualTryOn ? \"white\" : \"#333333\"};\n\t\t\t\t`,\n\t\t\t\tonToggleClick,\n\t\t\t);\n\n\t\t\ttoggleButton.onmouseover = () => {\n\t\t\t\tif (isShowingVirtualTryOn) {\n\t\t\t\t\ttoggleButton.style.background = \"#4a4a4a\";\n\t\t\t\t} else {\n\t\t\t\t\ttoggleButton.style.background = \"#d1d5db\";\n\t\t\t\t}\n\t\t\t};\n\t\t\ttoggleButton.onmouseout = () => {\n\t\t\t\tif (isShowingVirtualTryOn) {\n\t\t\t\t\ttoggleButton.style.background = \"#333333\";\n\t\t\t\t} else {\n\t\t\t\t\ttoggleButton.style.background = \"#e5e7eb\";\n\t\t\t\t}\n\t\t\t};\n\n\t\t\ttoggleButton.onclick = onToggleClick;\n\t\t\tcontainer.appendChild(toggleButton);\n\t\t}\n\t}\n\n\treturn container;\n}\n\nexport function createButton(\n\tbuttonPosition: string,\n\tonClick: () => void,\n\tdisabled: boolean = false,\n): HTMLElement {\n\tconst container = createButtonContainer(buttonPosition, false, onClick);\n\tconst cameraButton = container.querySelector(\n\t\t\".ww-camera-btn\",\n\t) as HTMLButtonElement;\n\tif (cameraButton) {\n\t\tcameraButton.disabled = disabled;\n\t\tif (disabled) {\n\t\t\tcameraButton.style.opacity = \"0.5\";\n\t\t\tcameraButton.style.cursor = \"not-allowed\";\n\t\t\tcameraButton.title = \"Find your ideal size first\";\n\t\t}\n\t}\n\treturn container;\n}\n","import { CSS_CLASSES } from \"../constants.js\";\n\nexport type ModalControlMessageType =\n\t| \"VTO_SCAN_START\"\n\t| \"VTO_SCAN_STOP\"\n\t| \"VTO_SCAN_COMPLETE\";\n\nexport interface ModalOpenOptions {\n\tprefillImage?: Blob;\n\tautoSubmit?: boolean;\n}\n\ninterface PendingModalPrefill {\n\timage: Blob;\n\tautoSubmit: boolean;\n}\n\nexport class ModalManager {\n\tprivate modalElement: HTMLElement | null = null;\n\tprivate pendingModalPrefill: PendingModalPrefill | null = null;\n\tprivate modalOrigin: string;\n\n\tconstructor(baseUrl: string) {\n\t\tthis.modalOrigin = new URL(baseUrl).origin;\n\t}\n\n\topen(\n\t\turl: string,\n\t\toptions: ModalOpenOptions | undefined,\n\t\tonClose: () => void,\n\t) {\n\t\tthis.close();\n\t\tthis.modalOrigin = new URL(url).origin;\n\t\tthis.pendingModalPrefill = options?.prefillImage\n\t\t\t? {\n\t\t\t\t\timage: options.prefillImage,\n\t\t\t\t\tautoSubmit: options.autoSubmit === true,\n\t\t\t\t}\n\t\t\t: null;\n\n\t\tconst modal = document.createElement(\"div\");\n\t\tmodal.className = CSS_CLASSES.MODAL;\n\t\tmodal.style.cssText = `\n\t\t\tposition: fixed;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\tbottom: 0;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tbackground-color: rgba(0, 0, 0, 0.8);\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: center;\n\t\t\talign-items: center;\n\t\t\tz-index: 999999999;\n\t\t\tanimation: ww-modal-fade-in 0.3s ease;\n\t\t`;\n\n\t\tif (!document.getElementById(\"ww-modal-animation\")) {\n\t\t\tconst style = document.createElement(\"style\");\n\t\t\tstyle.id = \"ww-modal-animation\";\n\t\t\tstyle.textContent = `\n\t\t\t\t@keyframes ww-modal-fade-in {\n\t\t\t\t\tfrom { opacity: 0; }\n\t\t\t\t\tto { opacity: 1; }\n\t\t\t\t}\n\t\t\t\t@keyframes ww-modal-scale-in {\n\t\t\t\t\tfrom { transform: scale(0.95); opacity: 0; }\n\t\t\t\t\tto { transform: scale(1); opacity: 1; }\n\t\t\t\t}\n\t\t\t`;\n\t\t\tdocument.head.appendChild(style);\n\t\t}\n\n\t\tconst iframeContainer = document.createElement(\"div\");\n\t\tiframeContainer.style.cssText = `\n\t\t\tposition: relative;\n\t\t\twidth: 90%;\n\t\t\theight: 90%;\n\t\t\tmax-width: 480px;\n\t\t\tmax-height: 720px;\n\t\t\tborder-radius: 20px;\n\t\t\toverflow: hidden;\n\t\t\tbox-shadow: 0 24px 48px rgba(0, 0, 0, 0.3), 0 12px 24px rgba(0, 0, 0, 0.2);\n\t\t\tanimation: ww-modal-scale-in 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n\t\t\tbackground: white;\n\t\t`;\n\n\t\tconst iframe = document.createElement(\"iframe\");\n\t\tiframe.src = url;\n\t\tiframe.style.cssText = `\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tborder: none;\n\t\t`;\n\n\t\tconst closeButton = document.createElement(\"button\");\n\t\tcloseButton.innerHTML = `\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n\t\t\t\t<line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n\t\t\t</svg>\n\t\t`;\n\t\tcloseButton.setAttribute(\"aria-label\", \"Close modal\");\n\t\tcloseButton.style.cssText = `\n\t\t\tposition: absolute;\n\t\t\ttop: -48px;\n\t\t\tright: 0;\n\t\t\tbackground: rgba(255, 255, 255, 0.95);\n\t\t\tbackdrop-filter: blur(8px);\n\t\t\t-webkit-backdrop-filter: blur(8px);\n\t\t\tborder: none;\n\t\t\tborder-radius: 50%;\n\t\t\twidth: 40px;\n\t\t\theight: 40px;\n\t\t\tcursor: pointer;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tcolor: #1f2937;\n\t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n\t\t\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n\t\t`;\n\t\tcloseButton.onmouseover = () => {\n\t\t\tcloseButton.style.transform = \"scale(1.1) rotate(90deg)\";\n\t\t\tcloseButton.style.background = \"#ef4444\";\n\t\t\tcloseButton.style.color = \"white\";\n\t\t};\n\t\tcloseButton.onmouseout = () => {\n\t\t\tcloseButton.style.transform = \"scale(1) rotate(0deg)\";\n\t\t\tcloseButton.style.background = \"rgba(255, 255, 255, 0.95)\";\n\t\t\tcloseButton.style.color = \"#1f2937\";\n\t\t};\n\t\tcloseButton.onclick = () => {\n\t\t\tmodal.style.opacity = \"0\";\n\t\t\tiframeContainer.style.transform = \"scale(0.95)\";\n\t\t\tiframeContainer.style.opacity = \"0\";\n\t\t\tsetTimeout(onClose, 300);\n\t\t};\n\n\t\tiframeContainer.appendChild(iframe);\n\t\tiframeContainer.appendChild(closeButton);\n\t\tmodal.appendChild(iframeContainer);\n\t\tdocument.body.appendChild(modal);\n\n\t\tmodal.onclick = (e) => {\n\t\t\tif (e.target === modal) {\n\t\t\t\tcloseButton.click();\n\t\t\t}\n\t\t};\n\n\t\tthis.modalElement = modal;\n\t}\n\n\tclose() {\n\t\tif (this.modalElement) {\n\t\t\tthis.modalElement.remove();\n\t\t\tthis.modalElement = null;\n\t\t}\n\t\tthis.pendingModalPrefill = null;\n\t}\n\n\tsendPendingPrefillToModal() {\n\t\tif (!this.pendingModalPrefill || !this.modalElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst iframe = this.modalElement.querySelector(\"iframe\");\n\t\tif (!(iframe instanceof HTMLIFrameElement) || !iframe.contentWindow) {\n\t\t\treturn;\n\t\t}\n\n\t\tiframe.contentWindow.postMessage(\n\t\t\t{\n\t\t\t\ttype: \"VTO_PREFILL_IMAGE\",\n\t\t\t\timage: this.pendingModalPrefill.image,\n\t\t\t\tautoSubmit: this.pendingModalPrefill.autoSubmit,\n\t\t\t},\n\t\t\tthis.modalOrigin,\n\t\t);\n\t\t// Fallback for production setups where iframe origin differs after redirects.\n\t\tiframe.contentWindow.postMessage(\n\t\t\t{\n\t\t\t\ttype: \"VTO_PREFILL_IMAGE\",\n\t\t\t\timage: this.pendingModalPrefill.image,\n\t\t\t\tautoSubmit: this.pendingModalPrefill.autoSubmit,\n\t\t\t},\n\t\t\t\"*\",\n\t\t);\n\t\tthis.pendingModalPrefill = null;\n\t}\n\n\tpostMessageToModal(type: ModalControlMessageType) {\n\t\tif (!this.modalElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst iframe = this.modalElement.querySelector(\"iframe\");\n\t\tif (!(iframe instanceof HTMLIFrameElement) || !iframe.contentWindow) {\n\t\t\treturn;\n\t\t}\n\n\t\tiframe.contentWindow.postMessage({ type }, this.modalOrigin);\n\t\t// Fallback for production setups where iframe origin differs after redirects.\n\t\tiframe.contentWindow.postMessage({ type }, \"*\");\n\t}\n}\n","export type JobStatus = \"PENDING\" | \"COMPLETED\" | \"FAILED\";\n\nexport interface JobStatusResponse {\n\tstatus: JobStatus;\n\tmessage: string;\n}\n\ninterface VtoDataResponse {\n\tgemini_model?: string;\n\timages?: string[];\n\tadditional_prompt?: string;\n\tis_image_visible?: boolean;\n}\n\ninterface SubmitTryOnOptions {\n\tmodelTier: string;\n\toutfitID: string;\n}\n\nexport interface PreparedTryOnData {\n\tmodelTier: string;\n\toutfitID: string;\n\tproductImages: string[];\n\tgeminiModel: string | null;\n\tadditionalPrompt: string | null;\n\tisImageVisible: boolean;\n}\n\nexport class VtoApiClient {\n\tconstructor(private readonly baseUrl: string) {}\n\n\tprivate async fetchVtoData(\n\t\toutfitId: string,\n\t): Promise<VtoDataResponse | null> {\n\t\ttry {\n\t\t\tconst vtoDataUrl = new URL(\"/api/vto/data\", this.baseUrl);\n\t\t\tvtoDataUrl.searchParams.set(\"outfit_id\", outfitId);\n\n\t\t\tconst response = await fetch(vtoDataUrl.toString());\n\t\t\tif (response.status === 404) return null;\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst errorText = await response.text();\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`[WeWear VTO] Failed to retrieve VTO data (${response.status}): ${errorText}`,\n\t\t\t\t);\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn (await response.json()) as VtoDataResponse;\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"[WeWear VTO] Error retrieving VTO data:\", error);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tasync submitTryOn(\n\t\tmodelImage: Blob,\n\t\tproductImages: string[],\n\t\toptions: SubmitTryOnOptions,\n\t\tpreparedData?: PreparedTryOnData,\n\t): Promise<{ job_id: string }> {\n\t\tconst resolved =\n\t\t\tpreparedData ?? (await this.prepareTryOnData(productImages, options));\n\n\t\tconst formData = new FormData();\n\t\tformData.append(\"model_image\", modelImage, \"model_image.png\");\n\t\tformData.append(\n\t\t\t\"product_image_urls\",\n\t\t\tJSON.stringify(resolved.productImages),\n\t\t);\n\t\tformData.append(\"page_url\", window.location.href);\n\t\tformData.append(\"model_tier\", resolved.modelTier);\n\t\tif (resolved.geminiModel)\n\t\t\tformData.append(\"gemini_model\", resolved.geminiModel);\n\t\tif (resolved.additionalPrompt) {\n\t\t\tformData.append(\"additional_prompt\", resolved.additionalPrompt);\n\t\t}\n\n\t\tif (resolved.outfitID) formData.append(\"outfit_id\", resolved.outfitID);\n\n\t\tconst res = await fetch(`${this.baseUrl}/api/vto`, {\n\t\t\tmethod: \"POST\",\n\t\t\tbody: formData,\n\t\t});\n\t\tif (!res.ok) {\n\t\t\tconst errorText = await res.text();\n\t\t\tconsole.error(\n\t\t\t\t\"[WeWear VTO] API submission failed:\",\n\t\t\t\tres.status,\n\t\t\t\terrorText,\n\t\t\t);\n\t\t\tthrow new Error(`API submission failed: ${res.status}`);\n\t\t}\n\t\treturn res.json();\n\t}\n\n\tasync prepareTryOnData(\n\t\tproductImages: string[],\n\t\toptions: SubmitTryOnOptions,\n\t): Promise<PreparedTryOnData> {\n\t\tconst outfitID = options.outfitID?.trim() ?? \"\";\n\t\tlet resolvedProductImages = productImages;\n\t\tlet resolvedGeminiModel: string | null = null;\n\t\tlet resolvedAdditionalPrompt: string | null = null;\n\t\tlet resolvedIsImageVisible = true;\n\n\t\tif (outfitID) {\n\t\t\tconst vtoData = await this.fetchVtoData(outfitID);\n\t\t\tif (vtoData) {\n\t\t\t\tif (Array.isArray(vtoData.images) && vtoData.images.length > 0) {\n\t\t\t\t\tresolvedProductImages = vtoData.images;\n\t\t\t\t}\n\t\t\t\tif (typeof vtoData.gemini_model === \"string\" && vtoData.gemini_model) {\n\t\t\t\t\tresolvedGeminiModel = vtoData.gemini_model;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\ttypeof vtoData.additional_prompt === \"string\" &&\n\t\t\t\t\tvtoData.additional_prompt\n\t\t\t\t) {\n\t\t\t\t\tresolvedAdditionalPrompt = vtoData.additional_prompt;\n\t\t\t\t}\n\t\t\t\tif (typeof vtoData.is_image_visible === \"boolean\") {\n\t\t\t\t\tresolvedIsImageVisible = vtoData.is_image_visible;\n\t\t\t\t}\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[WeWear VTO] Using stored VTO data for outfit_id=${outfitID}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tmodelTier: options.modelTier,\n\t\t\toutfitID,\n\t\t\tproductImages: resolvedProductImages,\n\t\t\tgeminiModel: resolvedGeminiModel,\n\t\t\tadditionalPrompt: resolvedAdditionalPrompt,\n\t\t\tisImageVisible: resolvedIsImageVisible,\n\t\t};\n\t}\n\n\tasync fetchJobStatus(jobId: string): Promise<JobStatusResponse> {\n\t\tconst res = await fetch(`${this.baseUrl}/api/vto/status?job_id=${jobId}`);\n\t\tif (!res.ok) throw new Error(`Status check failed: ${res.status}`);\n\t\treturn res.json();\n\t}\n\n\tasync fetchJobImage(jobId: string): Promise<string> {\n\t\tconst url = `${this.baseUrl}/api/vto/image?job_id=${jobId}`;\n\n\t\tconst res = await fetch(url);\n\t\tif (res.status === 202) throw new Error(\"202_PROCESSING\");\n\t\tif (!res.ok) throw new Error(`Image fetch failed: ${res.status}`);\n\n\t\tconst blob = await res.blob();\n\t\treturn URL.createObjectURL(blob);\n\t}\n}\n","import { createButton, createButtonContainer } from \"./components/index.js\";\nimport { CSS_CLASSES } from \"./constants.js\";\nimport type { VirtualTryOnConfig } from \"./index.js\";\nimport {\n\tModalManager,\n\ttype ModalControlMessageType,\n\ttype ModalOpenOptions,\n} from \"./widget/modal-manager.js\";\nimport {\n\tVtoApiClient,\n\ttype PreparedTryOnData,\n} from \"./widget/vto-api-client.js\";\n\nexport class VirtualTryOnWidget {\n\tprivate static instanceCounter = 0;\n\tprivate static activeWidgetId: number | null = null;\n\tprivate readonly config: VirtualTryOnConfig;\n\tprivate readonly instanceId: number;\n\tprivate virtualTryOnImageUrl: string | null = null;\n\tprivate originalProductImages: string[] = []; // Store all original product images\n\tprivate preparedTryOnData: PreparedTryOnData | null = null;\n\tprivate isShowingVirtualTryOn: boolean = false;\n\tprivate lastModelImage: Blob | null = null;\n\tprivate cameraButton: HTMLButtonElement | null = null;\n\tprivate readonly modal: ModalManager;\n\tprivate readonly vtoApiClient: VtoApiClient;\n\tprivate iframeMessageListener: ((event: MessageEvent) => void) | null = null;\n\n\tconstructor(config: VirtualTryOnConfig) {\n\t\tthis.instanceId = ++VirtualTryOnWidget.instanceCounter;\n\t\tthis.config = {\n\t\t\tbaseUrl: config.baseUrl,\n\t\t\tproductPageSelector: config.productPageSelector,\n\t\t\tgallerySelector: config.gallerySelector,\n\t\t\tproductImageSelector: config.productImageSelector,\n\t\t\tbuttonPosition: config.buttonPosition,\n\t\t\tmodelTier: config.modelTier,\n\t\t\toutfitID: config.outfitID,\n\t\t\tsingleton: config.singleton,\n\t\t\tgalleryElement: config.galleryElement,\n\t\t};\n\t\tthis.modal = new ModalManager(this.config.baseUrl);\n\t\tthis.vtoApiClient = new VtoApiClient(this.config.baseUrl);\n\t}\n\n\tprivate getContainer(): HTMLElement | null {\n\t\tconst configContainer = this.config.galleryElement;\n\t\tif (configContainer?.isConnected) {\n\t\t\treturn configContainer;\n\t\t}\n\n\t\tconst queriedContainer = document.querySelector(\n\t\t\tthis.config.gallerySelector,\n\t\t);\n\t\treturn queriedContainer instanceof HTMLElement ? queriedContainer : null;\n\t}\n\n\tpublic async init(): Promise<void> {\n\t\ttry {\n\t\t\tconst selectors = this.config.productPageSelector;\n\t\t\tconst currentPath = window.location.pathname;\n\t\t\tconst matches = selectors.some((sel) => currentPath.includes(sel));\n\t\t\tif (!matches) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst container = this.getContainer();\n\t\t\tif (!container) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[WeWear VTO] Gallery container not found:\",\n\t\t\t\t\tthis.config.gallerySelector,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (getComputedStyle(container).position === \"static\") {\n\t\t\t\tcontainer.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tconst button = createButton(this.config.buttonPosition, async () => {\n\t\t\t\tif (this.cameraButton && !this.cameraButton.disabled) {\n\t\t\t\t\tawait this.handleTryOnClick();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.cameraButton = button.querySelector(\".ww-camera-btn\");\n\t\t\tcontainer.appendChild(button);\n\t\t\tconsole.log(\"[WeWear VTO] Widget initialized successfully\");\n\n\t\t\tthis.setupIframeListener();\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Initialization failed:\", error);\n\t\t}\n\t}\n\n\tprivate async handleTryOnClick(): Promise<void> {\n\t\tconsole.log(\"[WeWear VTO] Button clicked, starting try-on process...\");\n\n\t\ttry {\n\t\t\tif (this.originalProductImages.length === 0) {\n\t\t\t\tthis.originalProductImages = this.getAllProductImages();\n\t\t\t\tconsole.log(\n\t\t\t\t\t\"[WeWear VTO] Stored original product images:\",\n\t\t\t\t\tthis.originalProductImages,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconsole.log(\"[WeWear VTO] Retrieved data:\", {\n\t\t\t\tproductImages: this.originalProductImages,\n\t\t\t});\n\n\t\t\tif (this.originalProductImages.length === 0) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[WeWear VTO] Product images not found:\",\n\t\t\t\t\tthis.config.productImageSelector,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.preparedTryOnData = await this.vtoApiClient.prepareTryOnData(\n\t\t\t\tthis.originalProductImages,\n\t\t\t\t{\n\t\t\t\t\tmodelTier: this.config.modelTier,\n\t\t\t\t\toutfitID: this.config.outfitID,\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tconst photoUploadUrl = this.buildPhotoUploadUrl(\n\t\t\t\tthis.preparedTryOnData.productImages,\n\t\t\t);\n\t\t\tthis.showPhotoUploadModal(photoUploadUrl.toString());\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Try-on request failed:\", error);\n\t\t}\n\t}\n\n\tprivate async handleRegenerateClick(): Promise<void> {\n\t\tif (!this.lastModelImage) {\n\t\t\tawait this.handleTryOnClick();\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tthis.originalProductImages = this.getAllProductImages();\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tconsole.warn(\"[WeWear VTO] No product images found for regenerate.\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.preparedTryOnData = await this.vtoApiClient.prepareTryOnData(\n\t\t\tthis.originalProductImages,\n\t\t\t{\n\t\t\t\tmodelTier: this.config.modelTier,\n\t\t\t\toutfitID: this.config.outfitID,\n\t\t\t},\n\t\t);\n\n\t\tconst photoUploadUrl = this.buildPhotoUploadUrl(\n\t\t\tthis.preparedTryOnData.productImages,\n\t\t\t{ startAtConfirm: true },\n\t\t);\n\t\tthis.showPhotoUploadModal(photoUploadUrl.toString(), {\n\t\t\tprefillImage: this.lastModelImage,\n\t\t\tautoSubmit: true,\n\t\t});\n\t}\n\n\tprivate buildPhotoUploadUrl(\n\t\tproductImages: string[],\n\t\toptions?: { startAtConfirm?: boolean },\n\t): URL {\n\t\tconst photoUploadUrl = new URL(`${this.config.baseUrl}`);\n\t\tconst previewProductImage = this.preparedTryOnData?.isImageVisible\n\t\t\t? productImages[0]\n\t\t\t: this.originalProductImages[0];\n\n\t\tphotoUploadUrl.searchParams.append(\n\t\t\t\"ww_product_images\",\n\t\t\tproductImages.join(\",\"),\n\t\t);\n\t\tif (previewProductImage) {\n\t\t\tphotoUploadUrl.searchParams.append(\n\t\t\t\t\"ww_product_preview_image\",\n\t\t\t\tpreviewProductImage,\n\t\t\t);\n\t\t}\n\t\tif (options?.startAtConfirm) {\n\t\t\tphotoUploadUrl.searchParams.append(\"ww_step\", \"2\");\n\t\t\tphotoUploadUrl.searchParams.append(\"ww_regenerate\", \"1\");\n\t\t}\n\t\treturn photoUploadUrl;\n\t}\n\n\tprivate getAllProductImages(): string[] {\n\t\tconst container = this.getContainer();\n\t\tconst scopedElements = container?.querySelectorAll(\n\t\t\tthis.config.productImageSelector,\n\t\t);\n\t\tconst fallbackElements = document.querySelectorAll(\n\t\t\tthis.config.productImageSelector,\n\t\t);\n\t\tconst productImageElements = (\n\t\t\tscopedElements?.length ? scopedElements : fallbackElements\n\t\t) as NodeListOf<HTMLImageElement>;\n\n\t\tconst images: string[] = [];\n\n\t\tproductImageElements.forEach((img) => {\n\t\t\tconst imageUrl =\n\t\t\t\timg.src ||\n\t\t\t\timg.getAttribute(\"data-src\") ||\n\t\t\t\timg.getAttribute(\"data-large_image\") ||\n\t\t\t\t\"\";\n\n\t\t\tif (\n\t\t\t\timageUrl &&\n\t\t\t\t(imageUrl.startsWith(\"http://\") || imageUrl.startsWith(\"https://\")) &&\n\t\t\t\t!images.includes(imageUrl)\n\t\t\t) {\n\t\t\t\timages.push(imageUrl);\n\t\t\t}\n\t\t});\n\n\t\treturn images;\n\t}\n\n\tprivate showPhotoUploadModal(url: string, options?: ModalOpenOptions): void {\n\t\tthis.closeModal();\n\t\tVirtualTryOnWidget.activeWidgetId = this.instanceId;\n\t\tthis.modal.open(url, options, () => this.closeModal());\n\t}\n\n\tprivate closeModal(): void {\n\t\tthis.modal.close();\n\t\tif (VirtualTryOnWidget.activeWidgetId === this.instanceId) {\n\t\t\tVirtualTryOnWidget.activeWidgetId = null;\n\t\t}\n\t}\n\n\tprivate sendPendingPrefillToModal(): void {\n\t\tthis.modal.sendPendingPrefillToModal();\n\t}\n\n\tprivate postMessageToModal(type: ModalControlMessageType): void {\n\t\tthis.modal.postMessageToModal(type);\n\t}\n\n\tprivate setupIframeListener(): void {\n\t\tif (this.iframeMessageListener) {\n\t\t\twindow.removeEventListener(\"message\", this.iframeMessageListener);\n\t\t}\n\n\t\tthis.iframeMessageListener = (event: MessageEvent) => {\n\t\t\tif (VirtualTryOnWidget.activeWidgetId !== this.instanceId) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.origin !== new URL(this.config.baseUrl).origin) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tswitch (event.data.type) {\n\t\t\t\tcase \"VTO_CONFIRM_READY\":\n\t\t\t\t\tthis.sendPendingPrefillToModal();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"VTO_IMAGE_SELECTED\":\n\t\t\t\t\tif (event.data.image) {\n\t\t\t\t\t\tthis.lastModelImage = event.data.image;\n\t\t\t\t\t\tthis.postMessageToModal(\"VTO_SCAN_START\");\n\t\t\t\t\t\tthis.startVirtualTryOn();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"CLOSE_MODAL\":\n\t\t\t\t\tthis.closeModal();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener(\"message\", this.iframeMessageListener);\n\t}\n\n\tprivate async startVirtualTryOn(isRefresh = false): Promise<void> {\n\t\tif (isRefresh) {\n\t\t\tconsole.log(\n\t\t\t\t\"[WeWear VTO] Refreshing virtual try-on with previous parameters...\",\n\t\t\t);\n\t\t}\n\n\t\tif (!this.lastModelImage) {\n\t\t\tconsole.warn(\n\t\t\t\t\"[WeWear VTO] Missing required data to start virtual try-on.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tthis.originalProductImages = this.getAllProductImages();\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tconsole.warn(\"[WeWear VTO] No product images found.\");\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.preparedTryOnData) {\n\t\t\tthis.preparedTryOnData = await this.vtoApiClient.prepareTryOnData(\n\t\t\t\tthis.originalProductImages,\n\t\t\t\t{\n\t\t\t\t\tmodelTier: this.config.modelTier,\n\t\t\t\t\toutfitID: this.config.outfitID,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\tconst container = this.getContainer();\n\n\t\ttry {\n\t\t\tconst submitResponse = await this.vtoApiClient.submitTryOn(\n\t\t\t\tthis.lastModelImage,\n\t\t\t\tthis.preparedTryOnData.productImages,\n\t\t\t\t{\n\t\t\t\t\tmodelTier: this.config.modelTier,\n\t\t\t\t\toutfitID: this.config.outfitID,\n\t\t\t\t},\n\t\t\t\tthis.preparedTryOnData,\n\t\t\t);\n\n\t\t\tlet status = await this.vtoApiClient.fetchJobStatus(\n\t\t\t\tsubmitResponse.job_id,\n\t\t\t);\n\n\t\t\twhile (status.status !== \"COMPLETED\" && status.status !== \"FAILED\") {\n\t\t\t\tawait new Promise((r) => setTimeout(r, 3000));\n\t\t\t\tstatus = await this.vtoApiClient.fetchJobStatus(submitResponse.job_id);\n\t\t\t}\n\n\t\t\tif (status.status === \"COMPLETED\") {\n\t\t\t\tconst finalImage = await this.vtoApiClient.fetchJobImage(\n\t\t\t\t\tsubmitResponse.job_id,\n\t\t\t\t);\n\t\t\t\tif (finalImage) {\n\t\t\t\t\tthis.postMessageToModal(\"VTO_SCAN_COMPLETE\");\n\t\t\t\t\tawait new Promise((r) => setTimeout(r, 500));\n\t\t\t\t\tthis.replaceProductImage(finalImage);\n\t\t\t\t}\n\t\t\t\tif (container instanceof HTMLElement) {\n\t\t\t\t\tthis.showButtonContainer(container);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (status.status === \"FAILED\") {\n\t\t\t\tconsole.error(\"[WeWear VTO] VTO process failed:\", status.message);\n\t\t\t\tawait new Promise((r) => setTimeout(r, 5000));\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Error during virtual try-on process:\", error);\n\t\t\tawait new Promise((r) => setTimeout(r, 5000));\n\t\t} finally {\n\t\t\tthis.postMessageToModal(\"VTO_SCAN_STOP\");\n\t\t\tif (container instanceof HTMLElement) {\n\t\t\t\tthis.showButtonContainer(container);\n\t\t\t}\n\t\t\tthis.closeModal();\n\t\t}\n\t}\n\n\tprivate replaceProductImage(imageUrl: string): void {\n\t\ttry {\n\t\t\tthis.virtualTryOnImageUrl = imageUrl;\n\n\t\t\tconst container = this.getContainer();\n\t\t\tif (!container) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[WeWear VTO] Gallery container not found for image replacement:\",\n\t\t\t\t\tthis.config.gallerySelector,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!container.hasAttribute(\"data-ww-original-content\")) {\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-content\", container.innerHTML);\n\t\t\t}\n\n\t\t\tif (!container.hasAttribute(\"data-ww-container-locked\")) {\n\t\t\t\tconst containerRect = container.getBoundingClientRect();\n\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-container-width\",\n\t\t\t\t\tcontainerRect.width.toString(),\n\t\t\t\t);\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-container-height\",\n\t\t\t\t\tcontainerRect.height.toString(),\n\t\t\t\t);\n\n\t\t\t\tcontainer.style.width = `${containerRect.width}px`;\n\t\t\t\tcontainer.style.height = `${containerRect.height}px`;\n\t\t\t\tcontainer.style.minWidth = `${containerRect.width}px`;\n\t\t\t\tcontainer.style.minHeight = `${containerRect.height}px`;\n\n\t\t\t\tcontainer.style.paddingBottom = \"0\";\n\n\t\t\t\tcontainer.setAttribute(\"data-ww-container-locked\", \"true\");\n\t\t\t}\n\n\t\t\tconst originalImg = container.querySelector(\"img\");\n\t\t\tif (\n\t\t\t\toriginalImg &&\n\t\t\t\t!container.hasAttribute(\"data-ww-original-dimensions\")\n\t\t\t) {\n\t\t\t\tconst computedStyle = window.getComputedStyle(originalImg);\n\t\t\t\tconst rect = originalImg.getBoundingClientRect();\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-width\", computedStyle.width);\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-height\", computedStyle.height);\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-original-rect-width\",\n\t\t\t\t\trect.width.toString(),\n\t\t\t\t);\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-original-rect-height\",\n\t\t\t\t\trect.height.toString(),\n\t\t\t\t);\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-dimensions\", \"true\");\n\t\t\t}\n\n\t\t\tthis.showVirtualTryOnImage(container);\n\n\t\t\tthis.updateButtonContainer(container);\n\n\t\t\tconsole.log(\n\t\t\t\t\"[WeWear VTO] Product image replaced with virtual try-on result\",\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Error replacing product image:\", error);\n\t\t}\n\t}\n\n\tprivate showButtonContainer(container: HTMLElement): void {\n\t\tconst buttonContainer = container.querySelector(\n\t\t\t`.${CSS_CLASSES.BUTTON_CONTAINER}`,\n\t\t) as HTMLElement;\n\t\tif (buttonContainer) {\n\t\t\tbuttonContainer.style.display = \"flex\";\n\t\t}\n\t}\n\n\tprivate updateButtonContainer(container: HTMLElement): void {\n\t\tconst existingButtons = container.querySelectorAll(\n\t\t\t`.${CSS_CLASSES.BUTTON_CONTAINER}`,\n\t\t);\n\t\texistingButtons.forEach((btn) => {\n\t\t\tbtn.remove();\n\t\t});\n\n\t\tconst buttonContainer = createButtonContainer(\n\t\t\tthis.config.buttonPosition,\n\t\t\tthis.virtualTryOnImageUrl !== null,\n\t\t\tasync () => {\n\t\t\t\tawait this.handleTryOnClick();\n\t\t\t},\n\t\t\tasync () => {\n\t\t\t\tawait this.handleRegenerateClick();\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tif (this.isShowingVirtualTryOn) {\n\t\t\t\t\tthis.showOriginalImage(container);\n\t\t\t\t} else {\n\t\t\t\t\tthis.showVirtualTryOnImage(container);\n\t\t\t\t}\n\t\t\t\tthis.updateButtonContainer(container);\n\t\t\t},\n\t\t\tthis.isShowingVirtualTryOn,\n\t\t);\n\n\t\tcontainer.appendChild(buttonContainer);\n\t}\n\n\tprivate showVirtualTryOnImage(container: HTMLElement): void {\n\t\tif (!this.virtualTryOnImageUrl) {\n\t\t\tconsole.warn(\"[WeWear VTO] No virtual try-on image URL available\");\n\t\t\treturn;\n\t\t}\n\n\t\tArray.from(container.children).forEach((child) => {\n\t\t\tif (!child.classList.contains(CSS_CLASSES.BUTTON_CONTAINER)) {\n\t\t\t\tchild.remove();\n\t\t\t}\n\t\t});\n\n\t\tconst originalWidth =\n\t\t\tcontainer.getAttribute(\"data-ww-original-width\") || \"\";\n\t\tconst originalHeight =\n\t\t\tcontainer.getAttribute(\"data-ww-original-height\") || \"\";\n\t\tconst originalRectWidth =\n\t\t\tcontainer.getAttribute(\"data-ww-original-rect-width\") || \"\";\n\t\tconst originalRectHeight =\n\t\t\tcontainer.getAttribute(\"data-ww-original-rect-height\") || \"\";\n\n\t\tconst image = document.createElement(\"img\");\n\t\timage.src = this.virtualTryOnImageUrl;\n\t\timage.alt = \"Virtual Try-On Result\";\n\n\t\tlet widthStyle = \"100%\";\n\t\tlet heightStyle = \"100%\";\n\n\t\tif (originalWidth && originalWidth !== \"auto\" && originalWidth !== \"0px\") {\n\t\t\twidthStyle = originalWidth;\n\t\t} else if (originalRectWidth && originalRectWidth !== \"0\") {\n\t\t\twidthStyle = `${originalRectWidth}px`;\n\t\t}\n\n\t\tif (\n\t\t\toriginalHeight &&\n\t\t\toriginalHeight !== \"auto\" &&\n\t\t\toriginalHeight !== \"0px\"\n\t\t) {\n\t\t\theightStyle = originalHeight;\n\t\t} else if (originalRectHeight && originalRectHeight !== \"0\") {\n\t\t\theightStyle = `${originalRectHeight}px`;\n\t\t}\n\n\t\timage.style.cssText = `\n width: ${widthStyle};\n height: ${heightStyle};\n object-fit: contain;\n `;\n\n\t\tcontainer.prepend(image);\n\n\t\tthis.isShowingVirtualTryOn = true;\n\n\t\tthis.updateButtonContainer(container);\n\n\t\tconsole.log(\n\t\t\t\"[WeWear VTO] Product image replaced with virtual try-on result\",\n\t\t);\n\t}\n\n\tprivate showOriginalImage(container: HTMLElement): void {\n\t\tconst originalContentHTML = container.getAttribute(\n\t\t\t\"data-ww-original-content\",\n\t\t);\n\t\tif (originalContentHTML) {\n\t\t\tArray.from(container.children).forEach((child) => {\n\t\t\t\tif (!child.classList.contains(CSS_CLASSES.BUTTON_CONTAINER)) {\n\t\t\t\t\tchild.remove();\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst tempDiv = document.createElement(\"div\");\n\t\t\ttempDiv.innerHTML = originalContentHTML;\n\t\t\tcontainer.append(...Array.from(tempDiv.children));\n\n\t\t\t// Remove temporary attributes used for VTO state\n\t\t\tcontainer.style.paddingBottom = \"\";\n\t\t}\n\n\t\tthis.isShowingVirtualTryOn = false;\n\t}\n\n\tpublic destroy(): void {\n\t\ttry {\n\t\t\tconst container = this.getContainer();\n\t\t\tif (container) {\n\t\t\t\tconst existingButtons = container.querySelectorAll(\n\t\t\t\t\t`.${CSS_CLASSES.BUTTON_CONTAINER}`,\n\t\t\t\t);\n\t\t\t\texistingButtons.forEach((btn) => {\n\t\t\t\t\tbtn.remove();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.closeModal();\n\n\t\t\tthis.cameraButton = null;\n\n\t\t\tif (this.iframeMessageListener) {\n\t\t\t\twindow.removeEventListener(\"message\", this.iframeMessageListener);\n\t\t\t\tthis.iframeMessageListener = null;\n\t\t\t}\n\n\t\t\tthis.virtualTryOnImageUrl = null;\n\t\t\tthis.isShowingVirtualTryOn = false;\n\t\t\tthis.lastModelImage = null;\n\t\t\tthis.originalProductImages = [];\n\t\t\tthis.preparedTryOnData = null;\n\n\t\t\tconsole.log(\"[WeWear VTO] Widget destroyed successfully\");\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Error during widget destruction:\", error);\n\t\t}\n\t}\n}\n","import type { VirtualTryOnConfig } from \"./index.js\";\nimport { VirtualTryOnWidget } from \"./widget.js\";\n\nlet widgetInstances: VirtualTryOnWidget[] = [];\n\nexport function initVirtualTryOn(config?: VirtualTryOnConfig): void {\n\ttry {\n\t\twidgetInstances.forEach((instance) => {\n\t\t\tinstance.destroy();\n\t\t});\n\t\twidgetInstances = [];\n\n\t\tif (!config) {\n\t\t\tconsole.log(\n\t\t\t\t\"[WeWear VTO] Missing configuration. Widget not initialized.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst allContainers = Array.from(\n\t\t\tdocument.querySelectorAll(config.gallerySelector),\n\t\t).filter(\n\t\t\t(container): container is HTMLElement => container instanceof HTMLElement,\n\t\t);\n\t\tconst shouldUseSingleton = config.singleton !== false;\n\n\t\tif (allContainers.length > 1 && !shouldUseSingleton) {\n\t\t\twidgetInstances = allContainers.map((galleryElement) => {\n\t\t\t\treturn new VirtualTryOnWidget({\n\t\t\t\t\t...config,\n\t\t\t\t\tgalleryElement,\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tconst firstContainer = allContainers[0];\n\t\t\twidgetInstances = [\n\t\t\t\tnew VirtualTryOnWidget({\n\t\t\t\t\t...config,\n\t\t\t\t\tgalleryElement: firstContainer,\n\t\t\t\t}),\n\t\t\t];\n\t\t}\n\n\t\tconst initializeWidgets = () => {\n\t\t\twidgetInstances.forEach((widget) => {\n\t\t\t\twidget.init().catch((error) => {\n\t\t\t\t\tconsole.error(\"[WeWear VTO] Failed to initialize:\", error);\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tif (document.readyState === \"loading\") {\n\t\t\tdocument.addEventListener(\"DOMContentLoaded\", initializeWidgets, {\n\t\t\t\tonce: true,\n\t\t\t});\n\t\t} else {\n\t\t\tinitializeWidgets();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\"[WeWear VTO] Initialization error:\", error);\n\t}\n}\n\nexport function getWidgetInstance(): VirtualTryOnWidget | null {\n\treturn widgetInstances[0] ?? null;\n}\n\nexport function getWidgetInstances(): VirtualTryOnWidget[] {\n\treturn [...widgetInstances];\n}\n\nif (typeof window !== \"undefined\") {\n\tinitVirtualTryOn();\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -7,13 +7,22 @@ interface SubmitTryOnOptions {
|
|
|
7
7
|
modelTier: string;
|
|
8
8
|
outfitID: string;
|
|
9
9
|
}
|
|
10
|
+
export interface PreparedTryOnData {
|
|
11
|
+
modelTier: string;
|
|
12
|
+
outfitID: string;
|
|
13
|
+
productImages: string[];
|
|
14
|
+
geminiModel: string | null;
|
|
15
|
+
additionalPrompt: string | null;
|
|
16
|
+
isImageVisible: boolean;
|
|
17
|
+
}
|
|
10
18
|
export declare class VtoApiClient {
|
|
11
19
|
private readonly baseUrl;
|
|
12
20
|
constructor(baseUrl: string);
|
|
13
21
|
private fetchVtoData;
|
|
14
|
-
submitTryOn(modelImage: Blob, productImages: string[], options: SubmitTryOnOptions): Promise<{
|
|
22
|
+
submitTryOn(modelImage: Blob, productImages: string[], options: SubmitTryOnOptions, preparedData?: PreparedTryOnData): Promise<{
|
|
15
23
|
job_id: string;
|
|
16
24
|
}>;
|
|
25
|
+
prepareTryOnData(productImages: string[], options: SubmitTryOnOptions): Promise<PreparedTryOnData>;
|
|
17
26
|
fetchJobStatus(jobId: string): Promise<JobStatusResponse>;
|
|
18
27
|
fetchJobImage(jobId: string): Promise<string>;
|
|
19
28
|
}
|
package/dist/widget.d.ts
CHANGED