@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 CHANGED
@@ -332,12 +332,38 @@ class VtoApiClient {
332
332
  return null;
333
333
  }
334
334
  }
335
- async submitTryOn(modelImage, productImages, options) {
336
- var _a;
337
- const outfitID = (_a = options.outfitID) === null || _a === void 0 ? void 0 : _a.trim();
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
- const formData = new FormData();
358
- formData.append("model_image", modelImage, "model_image.png");
359
- formData.append("product_image_urls", JSON.stringify(resolvedProductImages));
360
- formData.append("page_url", window.location.href);
361
- formData.append("model_tier", options.modelTier);
362
- if (resolvedGeminiModel)
363
- formData.append("gemini_model", resolvedGeminiModel);
364
- if (resolvedAdditionalPrompt) {
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
- const photoUploadUrl = this.buildPhotoUploadUrl();
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
- const photoUploadUrl = this.buildPhotoUploadUrl({ startAtConfirm: true });
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
- photoUploadUrl.searchParams.append("ww_product_images", this.originalProductImages.join(","));
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.originalProductImages, {
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) {
@@ -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
- var _a;
343
- const outfitID = (_a = options.outfitID) === null || _a === void 0 ? void 0 : _a.trim();
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
- const formData = new FormData();
364
- formData.append("model_image", modelImage, "model_image.png");
365
- formData.append("product_image_urls", JSON.stringify(resolvedProductImages));
366
- formData.append("page_url", window.location.href);
367
- formData.append("model_tier", options.modelTier);
368
- if (resolvedGeminiModel)
369
- formData.append("gemini_model", resolvedGeminiModel);
370
- if (resolvedAdditionalPrompt) {
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
- const photoUploadUrl = this.buildPhotoUploadUrl();
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
- const photoUploadUrl = this.buildPhotoUploadUrl({ startAtConfirm: true });
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
- photoUploadUrl.searchParams.append("ww_product_images", this.originalProductImages.join(","));
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.originalProductImages, {
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
@@ -6,6 +6,7 @@ export declare class VirtualTryOnWidget {
6
6
  private readonly instanceId;
7
7
  private virtualTryOnImageUrl;
8
8
  private originalProductImages;
9
+ private preparedTryOnData;
9
10
  private isShowingVirtualTryOn;
10
11
  private lastModelImage;
11
12
  private cameraButton;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wewear/virtual-try-on",
3
- "version": "2.0.3",
3
+ "version": "2.0.5",
4
4
  "description": "Virtual Try-On widget for e-commerce integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",