@wewear/virtual-try-on 1.4.28 → 1.4.30

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
@@ -406,7 +406,7 @@ class VirtualTryOnWidget {
406
406
  }
407
407
  getContainer() {
408
408
  const configContainer = this.config.galleryElement;
409
- if (configContainer && configContainer.isConnected) {
409
+ if (configContainer === null || configContainer === void 0 ? void 0 : configContainer.isConnected) {
410
410
  return configContainer;
411
411
  }
412
412
  const queriedContainer = document.querySelector(this.config.gallerySelector);
@@ -697,14 +697,57 @@ class VirtualTryOnWidget {
697
697
  this.closeModal();
698
698
  }
699
699
  }
700
+ async fetchVtoData(outfitId) {
701
+ try {
702
+ const vtoDataUrl = new URL("/api/vto/data", this.config.baseUrl);
703
+ vtoDataUrl.searchParams.set("outfit_id", outfitId);
704
+ const response = await fetch(vtoDataUrl.toString());
705
+ if (response.status === 404)
706
+ return null;
707
+ if (!response.ok) {
708
+ const errorText = await response.text();
709
+ console.warn(`[WeWear VTO] Failed to retrieve VTO data (${response.status}): ${errorText}`);
710
+ return null;
711
+ }
712
+ return (await response.json());
713
+ }
714
+ catch (error) {
715
+ console.warn("[WeWear VTO] Error retrieving VTO data:", error);
716
+ return null;
717
+ }
718
+ }
700
719
  async callVtoApi(modelImage, productImages) {
701
720
  var _a;
721
+ const outfitID = (_a = this.config.outfitID) === null || _a === void 0 ? void 0 : _a.trim();
722
+ let resolvedProductImages = productImages;
723
+ let resolvedGeminiModel = null;
724
+ let resolvedAdditionalPrompt = null;
725
+ if (outfitID) {
726
+ const vtoData = await this.fetchVtoData(outfitID);
727
+ if (vtoData) {
728
+ if (Array.isArray(vtoData.images) && vtoData.images.length > 0) {
729
+ resolvedProductImages = vtoData.images;
730
+ }
731
+ if (typeof vtoData.gemini_model === "string" && vtoData.gemini_model) {
732
+ resolvedGeminiModel = vtoData.gemini_model;
733
+ }
734
+ if (typeof vtoData.additional_prompt === "string" &&
735
+ vtoData.additional_prompt) {
736
+ resolvedAdditionalPrompt = vtoData.additional_prompt;
737
+ }
738
+ console.log(`[WeWear VTO] Using stored VTO data for outfit_id=${outfitID}`);
739
+ }
740
+ }
702
741
  const formData = new FormData();
703
742
  formData.append("model_image", modelImage, "model_image.png");
704
- formData.append("product_image_urls", JSON.stringify(productImages));
743
+ formData.append("product_image_urls", JSON.stringify(resolvedProductImages));
705
744
  formData.append("page_url", window.location.href);
706
745
  formData.append("model_tier", this.config.modelTier);
707
- const outfitID = (_a = this.config.outfitID) === null || _a === void 0 ? void 0 : _a.trim();
746
+ if (resolvedGeminiModel)
747
+ formData.append("gemini_model", resolvedGeminiModel);
748
+ if (resolvedAdditionalPrompt) {
749
+ formData.append("additional_prompt", resolvedAdditionalPrompt);
750
+ }
708
751
  if (outfitID)
709
752
  formData.append("outfit_id", outfitID);
710
753
  const res = await fetch(`${this.config.baseUrl}/api/vto`, {
@@ -869,7 +912,9 @@ class VirtualTryOnWidget {
869
912
  const container = this.getContainer();
870
913
  if (container) {
871
914
  const existingButtons = container.querySelectorAll(`.${CSS_CLASSES.BUTTON_CONTAINER}`);
872
- existingButtons.forEach((btn) => btn.remove());
915
+ existingButtons.forEach((btn) => {
916
+ btn.remove();
917
+ });
873
918
  }
874
919
  this.closeModal();
875
920
  this.cameraButton = null;
@@ -895,7 +940,9 @@ VirtualTryOnWidget.activeWidgetId = null;
895
940
  let widgetInstances = [];
896
941
  function initVirtualTryOn(config) {
897
942
  try {
898
- widgetInstances.forEach((instance) => instance.destroy());
943
+ widgetInstances.forEach((instance) => {
944
+ instance.destroy();
945
+ });
899
946
  widgetInstances = [];
900
947
  if (!config) {
901
948
  console.log("[WeWear VTO] Missing configuration. Widget not initialized.");
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/constants.ts","../src/utils.ts","../src/components/button.ts","../src/components/loading-overlay.ts","../src/components/status-badge.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\tMODAL: 99999,\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\nexport function removeElements(selector: string): void {\n\tconst elements = document.querySelectorAll(selector);\n\telements.forEach((element) => {\n\t\telement.remove();\n\t});\n}\n","import { CSS_CLASSES, Z_INDEX } from \"../constants.js\";\nimport { getPositionStyles } from \"../utils.js\";\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 = `\n position: absolute;\n ${positionStyles}\n display: flex;\n gap: 4px;\n border-radius: 100px;\n background: white;\n padding: 4px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n z-index: ${Z_INDEX.BUTTON};\n transition: all 0.2s ease;\n `;\n\n\tconst cameraButton = document.createElement(\"button\");\n\tcameraButton.type = \"button\";\n\tcameraButton.className = `${CSS_CLASSES.BUTTON} ww-camera-btn`;\n\tcameraButton.setAttribute(\"aria-label\", \"Virtual Try-On\");\n\n\tif (hasVirtualTryOn) {\n\t\tcameraButton.style.cssText = `\n display: flex;\n width: 40px;\n height: 40px;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n border-radius: 100px;\n padding: 0;\n border: none;\n background: white;\n color: #000000;\n transition: all 0.2s ease;\n flex-shrink: 0;\n `;\n\n\t\tcameraButton.innerHTML = `\n <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 <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 <circle cx=\"12\" cy=\"13\" r=\"3\"></circle>\n </svg>\n `;\n\t} else {\n\t\tcameraButton.style.cssText = `\n display: flex;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n border-radius: 100px;\n padding: 10px 16px;\n border: none;\n background: white;\n color: #000000;\n transition: all 0.2s ease;\n flex-shrink: 0;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n white-space: nowrap;\n `;\n\n\t\tcameraButton.innerHTML = `\n <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 <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 <path d=\"M20 2v4\"/>\n <path d=\"M22 4h-4\"/>\n <circle cx=\"4\" cy=\"20\" r=\"2\"/>\n </svg>\n <span style=\"display: block;\">TRY THIS LOOK</span>\n `;\n\t}\n\n\tcameraButton.onclick = onCameraClick;\n\tcontainer.appendChild(cameraButton);\n\n\tif (hasVirtualTryOn) {\n\t\tif (onRefreshClick) {\n\t\t\tconst refreshButton = document.createElement(\"button\");\n\t\t\trefreshButton.type = \"button\";\n\t\t\trefreshButton.className = \"ww-refresh-btn\";\n\t\t\trefreshButton.setAttribute(\"aria-label\", \"Refresh virtual try-on\");\n\t\t\trefreshButton.style.cssText = `\n display: flex;\n width: 40px;\n height: 40px;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n border-radius: 100px;\n padding: 0;\n border: none;\n background: white;\n color: #333333;\n transition: all 0.2s ease;\n flex-shrink: 0;\n `;\n\n\t\t\trefreshButton.innerHTML = `\n <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 <path d=\"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"></path>\n <path d=\"M3 3v5h5\"></path>\n <path d=\"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16\"></path>\n <path d=\"M16 16h5v5\"></path>\n </svg>\n `;\n\n\t\t\trefreshButton.onclick = onRefreshClick;\n\n\t\t\trefreshButton.onclick = onRefreshClick;\n\t\t\tcontainer.appendChild(refreshButton);\n\t\t}\n\n\t\tif (onToggleClick) {\n\t\t\tconst toggleButton = document.createElement(\"button\");\n\t\t\ttoggleButton.type = \"button\";\n\t\t\ttoggleButton.className = \"ww-toggle-btn\";\n\t\t\ttoggleButton.setAttribute(\n\t\t\t\t\"aria-label\",\n\t\t\t\tisShowingVirtualTryOn ? \"Show Original Image\" : \"Show Virtual Try-On\",\n\t\t\t);\n\t\t\ttoggleButton.style.cssText = `\n display: flex;\n width: 40px;\n height: 40px;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n border-radius: 100px;\n padding: 0;\n border: none;\n background: ${isShowingVirtualTryOn ? \"#333333\" : \"#e5e7eb\"};\n color: ${isShowingVirtualTryOn ? \"white\" : \"#333333\"};\n transition: all 0.2s ease;\n flex-shrink: 0;\n `;\n\n\t\t\ttoggleButton.innerHTML = `\n <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 <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 <path d=\"M20 2v4\"/>\n <path d=\"M22 4h-4\"/>\n <circle cx=\"4\" cy=\"20\" r=\"2\"/>\n </svg>\n `;\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 { Z_INDEX } from \"../constants.js\";\n\nexport function createLoadingOverlay(\n\ttext: string = \"Processing...\",\n): HTMLElement {\n\tconst overlay = document.createElement(\"div\");\n\toverlay.className = \"ww-loading-overlay\";\n\toverlay.style.cssText = `\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: linear-gradient(135deg, rgba(0, 0, 0, 0.92) 0%, rgba(0, 0, 0, 0.88) 100%);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n z-index: ${Z_INDEX.MODAL + 1};\n border-radius: inherit;\n animation: ww-fade-in 0.3s ease;\n `;\n\n\tif (!document.getElementById(\"ww-loading-animation\")) {\n\t\tconst style = document.createElement(\"style\");\n\t\tstyle.id = \"ww-loading-animation\";\n\t\tstyle.textContent = `\n @keyframes ww-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n \n @keyframes ww-pulse-logo {\n 0%, 100% { \n opacity: 0.8; \n transform: scale(1);\n }\n 50% { \n opacity: 1; \n transform: scale(1.05);\n }\n }\n \n @keyframes ww-spinner-rotate {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n @keyframes ww-dot-bounce {\n 0%, 80%, 100% { \n transform: scale(0);\n opacity: 0.5;\n }\n 40% { \n transform: scale(1);\n opacity: 1;\n }\n }\n \n .ww-loading-logo {\n animation: ww-pulse-logo 2s ease-in-out infinite;\n }\n \n .ww-loading-spinner {\n animation: ww-spinner-rotate 1s linear infinite;\n }\n `;\n\t\tdocument.head.appendChild(style);\n\t}\n\n\toverlay.innerHTML = `\n <div style=\"display: flex; flex-direction: column; align-items: center; gap: 32px;\">\n <div style=\"position: relative; width: 120px; height: 120px; display: flex; align-items: center; justify-content: center;\">\n <!-- Outer spinning circle -->\n <div class=\"ww-loading-spinner\" style=\"\n position: absolute;\n width: 120px;\n height: 120px;\n border: 3px solid transparent;\n border-top: 3px solid #333333;\n border-right: 3px solid #333333;\n border-radius: 50%;\n \"></div>\n \n <!-- Logo -->\n <svg class=\"ww-loading-logo\" width=\"80\" height=\"50\" viewBox=\"0 0 214 135\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M102.906 74.8679C102.906 77.9717 101.574 80.7453 98.9104 83.1887C96.6871 85.1918 93.9025 86.6997 90.5566 87.7123C87.695 88.5708 84.6462 89 81.4104 89C73.8821 89 68.0047 87.0189 63.7783 83.0566C59.5519 87.0189 53.6855 89 46.1792 89C42.9434 89 39.9057 88.5708 37.066 87.7123C33.7201 86.6997 30.9245 85.1918 28.6792 83.1887C26.0157 80.7453 24.684 77.9717 24.684 74.8679V41.6509H32.3774V74.8679C32.3774 76.2547 33.489 77.5645 35.7123 78.7972C37.3632 79.7217 39.0692 80.3711 40.8302 80.7453C42.5252 81.1195 44.3082 81.3066 46.1792 81.3066C48.0063 81.3066 49.7673 81.1195 51.4623 80.7453C53.2453 80.3711 54.9623 79.7217 56.6132 78.7972C58.8585 77.5645 59.9811 76.2547 59.9811 74.8679V41.6509H67.6085V74.8679C67.6085 76.2547 68.7311 77.5645 70.9764 78.7972C72.6274 79.7217 74.3443 80.3711 76.1274 80.7453C77.8223 81.1195 79.5833 81.3066 81.4104 81.3066C83.2814 81.3066 85.0755 81.1195 86.7925 80.7453C88.5314 80.3711 90.2264 79.7217 91.8774 78.7972C94.1006 77.5645 95.2123 76.2547 95.2123 74.8679V41.6509H102.906V74.8679ZM189.283 74.8679C189.283 77.9717 187.951 80.7453 185.288 83.1887C183.064 85.1918 180.28 86.6997 176.934 87.7123C174.072 88.5708 171.024 89 167.788 89C160.259 89 154.382 87.0189 150.156 83.0566C145.929 87.0189 140.063 89 132.557 89C129.321 89 126.283 88.5708 123.443 87.7123C120.097 86.6997 117.302 85.1918 115.057 83.1887C112.393 80.7453 111.061 77.9717 111.061 74.8679V41.6509H118.755V74.8679C118.755 76.2547 119.866 77.5645 122.09 78.7972C123.741 79.7217 125.447 80.3711 127.208 80.7453C128.903 81.1195 130.686 81.3066 132.557 81.3066C134.384 81.3066 136.145 81.1195 137.84 80.7453C139.623 80.3711 141.34 79.7217 142.991 78.7972C145.236 77.5645 146.358 76.2547 146.358 74.8679V41.6509H153.986V74.8679C153.986 76.2547 155.108 77.5645 157.354 78.7972C159.005 79.7217 160.722 80.3711 162.505 80.7453C164.2 81.1195 165.961 81.3066 167.788 81.3066C169.659 81.3066 171.453 81.1195 173.17 80.7453C174.909 80.3711 176.604 79.7217 178.255 78.7972C180.478 77.5645 181.59 76.2547 181.59 74.8679V41.6509H189.283V74.8679Z\" fill=\"white\"/>\n </svg>\n </div>\n \n <div style=\"font-size: 17px; font-weight: 500; text-align: center; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; color: white; letter-spacing: 0.5px; max-width: 280px;\">${text}</div>\n \n <div style=\"display: flex; gap: 10px; margin-top: 4px;\">\n <div style=\"width: 10px; height: 10px; border-radius: 50%; background: #333333; animation: ww-dot-bounce 1.4s ease-in-out infinite;\"></div>\n <div style=\"width: 10px; height: 10px; border-radius: 50%; background: #333333; animation: ww-dot-bounce 1.4s ease-in-out 0.2s infinite;\"></div>\n <div style=\"width: 10px; height: 10px; border-radius: 50%; background: #333333; animation: ww-dot-bounce 1.4s ease-in-out 0.4s infinite;\"></div>\n </div>\n </div>\n `;\n\n\treturn overlay;\n}\n\nexport function showProductLoading(\n\tcontainer: HTMLElement,\n\ttext: string = \"Generating virtual try-on...\",\n): void {\n\tconst existingOverlay = container.querySelector(\".ww-loading-overlay\");\n\tif (existingOverlay) {\n\t\tconst textElement = existingOverlay.querySelector(\n\t\t\t'div[style*=\"font-size: 17px\"]',\n\t\t);\n\t\tif (textElement) {\n\t\t\ttextElement.textContent = text;\n\t\t}\n\t\treturn;\n\t}\n\n\tconst computedStyle = window.getComputedStyle(container);\n\tif (computedStyle.position === \"static\") {\n\t\tcontainer.style.position = \"relative\";\n\t}\n\n\tconst loadingOverlay = createLoadingOverlay(text);\n\tcontainer.appendChild(loadingOverlay);\n}\n\nexport function removeProductLoading(container: HTMLElement): void {\n\tconst existingOverlay = container.querySelector(\".ww-loading-overlay\");\n\tif (existingOverlay) {\n\t\texistingOverlay.remove();\n\t}\n}\n","export function createStatusBadge(message: string): HTMLElement {\n\tconst badge = document.createElement(\"div\");\n\tbadge.className = \"ww-status-badge\";\n\n\tbadge.style.cssText = `\n\t\tposition: absolute;\n\t\tbottom: 16px;\n\t\tleft: 50%;\n\t\ttransform: translateX(-50%);\n\t\tbackground: linear-gradient(135deg, rgba(0, 0, 0, 0.92) 0%, rgba(0, 0, 0, 0.88) 100%);\n\t\tbackdrop-filter: blur(12px);\n\t\t-webkit-backdrop-filter: blur(12px);\n\t\tcolor: white;\n\t\tpadding: 12px 24px;\n\t\tborder-radius: 24px;\n\t\tfont-size: 14px;\n\t\tfont-weight: 500;\n\t\tfont-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n\t\tbox-shadow: 0 4px 16px rgba(0, 0, 0, 0.3), 0 2px 8px rgba(0, 0, 0, 0.2);\n\t\tz-index: 1000;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 10px;\n\t\tanimation: ww-badge-fade-in 0.3s ease;\n\t\tletter-spacing: 0.3px;\n\t`;\n\n\tif (!document.getElementById(\"ww-status-badge-animation\")) {\n\t\tconst style = document.createElement(\"style\");\n\t\tstyle.id = \"ww-status-badge-animation\";\n\t\tstyle.textContent = `\n\t\t\t@keyframes ww-badge-fade-in {\n\t\t\t\tfrom { opacity: 0; transform: translateX(-50%) translateY(-10px); }\n\t\t\t\tto { opacity: 1; transform: translateX(-50%) translateY(0); }\n\t\t\t}\n\t\t\t\n\t\t\t@keyframes ww-badge-pulse {\n\t\t\t\t0%, 100% { opacity: 0.6; }\n\t\t\t\t50% { opacity: 1; }\n\t\t\t}\n\t\t`;\n\t\tdocument.head.appendChild(style);\n\t}\n\n\tbadge.innerHTML = `\n\t\t<div style=\"display: flex; gap: 4px;\">\n\t\t\t<div style=\"width: 6px; height: 6px; border-radius: 50%; background: white; animation: ww-badge-pulse 1.4s ease-in-out infinite;\"></div>\n\t\t\t<div style=\"width: 6px; height: 6px; border-radius: 50%; background: white; animation: ww-badge-pulse 1.4s ease-in-out 0.2s infinite;\"></div>\n\t\t\t<div style=\"width: 6px; height: 6px; border-radius: 50%; background: white; animation: ww-badge-pulse 1.4s ease-in-out 0.4s infinite;\"></div>\n\t\t</div>\n\t\t<span>${message}</span>\n\t`;\n\n\treturn badge;\n}\n\nexport function showStatusBadge(container: HTMLElement, message: string): void {\n\tconst existingBadge = container.querySelector(\".ww-status-badge\");\n\tif (existingBadge) {\n\t\tconst textElement = existingBadge.querySelector(\"span\");\n\t\tif (textElement) {\n\t\t\ttextElement.textContent = message;\n\t\t}\n\t\treturn;\n\t}\n\n\tconst badge = createStatusBadge(message);\n\tcontainer.appendChild(badge);\n}\n\nexport function removeStatusBadge(container: HTMLElement): void {\n\tconst badge = container.querySelector(\".ww-status-badge\");\n\tif (badge) {\n\t\tbadge.remove();\n\t}\n}\n","import {\n\tcreateButton,\n\tcreateButtonContainer,\n\tremoveProductLoading,\n\tremoveStatusBadge,\n\tshowProductLoading,\n\tshowStatusBadge,\n} from \"./components/index.js\";\nimport { CSS_CLASSES } from \"./constants.js\";\nimport type { VirtualTryOnConfig } from \"./index.js\";\n\ntype JobStatus = \"PENDING\" | \"COMPLETED\" | \"FAILED\";\n\ninterface JobStatusResponse {\n\tstatus: JobStatus;\n\tmessage: string;\n}\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 originalProductImageUrl: 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 modalElement: HTMLElement | null = null;\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}\n\n\tprivate getContainer(): HTMLElement | null {\n\t\tconst configContainer = this.config.galleryElement;\n\t\tif (configContainer && 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\tif (!this.originalProductImageUrl) {\n\t\t\t\tthis.originalProductImageUrl = this.originalProductImages[0];\n\t\t\t}\n\n\t\t\tconst photoUploadUrl = new URL(`${this.config.baseUrl}`);\n\t\t\tphotoUploadUrl.searchParams.append(\n\t\t\t\t\"ww_product_images\",\n\t\t\t\tthis.originalProductImages.join(\",\"),\n\t\t\t);\n\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 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): void {\n\t\tthis.closeModal();\n\t\tVirtualTryOnWidget.activeWidgetId = this.instanceId;\n\n\t\tconst modal = document.createElement(\"div\");\n\t\tmodal.className = CSS_CLASSES.MODAL;\n\t\tmodal.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.8);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 999999999;\n animation: ww-modal-fade-in 0.3s ease;\n `;\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 width: 100%;\n height: 100%;\n border: none;\n `;\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 position: absolute;\n top: -48px;\n right: 0;\n background: rgba(255, 255, 255, 0.95);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n border: none;\n border-radius: 50%;\n width: 40px;\n height: 40px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #1f2937;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n `;\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(() => this.closeModal(), 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\tprivate closeModal(): void {\n\t\tif (this.modalElement) {\n\t\t\tthis.modalElement.remove();\n\t\t\tthis.modalElement = null;\n\t\t}\n\t\tif (VirtualTryOnWidget.activeWidgetId === this.instanceId) {\n\t\t\tVirtualTryOnWidget.activeWidgetId = null;\n\t\t}\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_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.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 modal = document.querySelector(`.${CSS_CLASSES.MODAL}`);\n\t\tif (modal && modal instanceof HTMLElement) {\n\t\t\tmodal.style.display = \"none\";\n\t\t}\n\t\tconst container = this.getContainer();\n\t\tif (container) {\n\t\t\tshowProductLoading(container, \"Preparing your personalized look\");\n\t\t}\n\n\t\ttry {\n\t\t\tconst submitResponse = await this.callVtoApi(\n\t\t\t\tthis.lastModelImage,\n\t\t\t\tthis.originalProductImages,\n\t\t\t);\n\n\t\t\tlet status = await this.fetchJobStatus(submitResponse.job_id);\n\n\t\t\twhile (status.status !== \"COMPLETED\" && status.status !== \"FAILED\") {\n\t\t\t\tif (container instanceof HTMLElement) {\n\t\t\t\t\tconst statusMessage = \"Preparing your personalized look\";\n\t\t\t\t\tshowProductLoading(container, statusMessage);\n\t\t\t\t}\n\n\t\t\t\tawait new Promise((r) => setTimeout(r, 3000));\n\t\t\t\tstatus = await this.fetchJobStatus(submitResponse.job_id);\n\t\t\t}\n\n\t\t\tif (status.status === \"COMPLETED\") {\n\t\t\t\tconst finalImage = await this.fetchJobImage(submitResponse.job_id);\n\t\t\t\tif (finalImage) {\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\tremoveStatusBadge(container);\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\tif (container instanceof HTMLElement) {\n\t\t\t\t\tshowStatusBadge(\n\t\t\t\t\t\tcontainer,\n\t\t\t\t\t\t\"We are experiencing some technical issues and apologise for any inconvenience caused. Please come back later again\",\n\t\t\t\t\t);\n\t\t\t\t}\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\tif (container instanceof HTMLElement) {\n\t\t\t\tshowProductLoading(\n\t\t\t\t\tcontainer,\n\t\t\t\t\t\"We are experiencing technical issues and apologise for any inconvenience caused. Please come back later again\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait new Promise((r) => setTimeout(r, 5000));\n\t\t} finally {\n\t\t\tif (container instanceof HTMLElement) {\n\t\t\t\tremoveProductLoading(container);\n\t\t\t\tremoveStatusBadge(container);\n\t\t\t\tthis.showButtonContainer(container);\n\t\t\t}\n\t\t\tthis.closeModal();\n\t\t}\n\t}\n\n\tprivate async callVtoApi(\n\t\tmodelImage: Blob,\n\t\tproductImages: string[],\n\t): Promise<{ job_id: string }> {\n\t\tconst formData = new FormData();\n\t\tformData.append(\"model_image\", modelImage, \"model_image.png\");\n\n\t\tformData.append(\"product_image_urls\", JSON.stringify(productImages));\n\t\tformData.append(\"page_url\", window.location.href);\n\t\tformData.append(\"model_tier\", this.config.modelTier);\n\n\t\tconst outfitID = this.config.outfitID?.trim();\n\t\tif (outfitID) formData.append(\"outfit_id\", outfitID);\n\n\t\tconst res = await fetch(`${this.config.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\tprivate async fetchJobStatus(jobId: string): Promise<JobStatusResponse> {\n\t\tconst res = await fetch(\n\t\t\t`${this.config.baseUrl}/api/vto/status?job_id=${jobId}`,\n\t\t);\n\t\tif (!res.ok) throw new Error(`Status check failed: ${res.status}`);\n\t\treturn res.json();\n\t}\n\n\tprivate async fetchJobImage(jobId: string): Promise<string> {\n\t\tconst url = `${this.config.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\tprivate async refreshVirtualTryOn(): Promise<void> {\n\t\tawait this.startVirtualTryOn(true);\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.refreshVirtualTryOn();\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\tremoveProductLoading(container);\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) => btn.remove());\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.originalProductImageUrl = 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) => instance.destroy());\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/components/loading-overlay.ts","../src/components/status-badge.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\tMODAL: 99999,\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\nexport function removeElements(selector: string): void {\n\tconst elements = document.querySelectorAll(selector);\n\telements.forEach((element) => {\n\t\telement.remove();\n\t});\n}\n","import { CSS_CLASSES, Z_INDEX } from \"../constants.js\";\nimport { getPositionStyles } from \"../utils.js\";\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 = `\n position: absolute;\n ${positionStyles}\n display: flex;\n gap: 4px;\n border-radius: 100px;\n background: white;\n padding: 4px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n z-index: ${Z_INDEX.BUTTON};\n transition: all 0.2s ease;\n `;\n\n\tconst cameraButton = document.createElement(\"button\");\n\tcameraButton.type = \"button\";\n\tcameraButton.className = `${CSS_CLASSES.BUTTON} ww-camera-btn`;\n\tcameraButton.setAttribute(\"aria-label\", \"Virtual Try-On\");\n\n\tif (hasVirtualTryOn) {\n\t\tcameraButton.style.cssText = `\n display: flex;\n width: 40px;\n height: 40px;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n border-radius: 100px;\n padding: 0;\n border: none;\n background: white;\n color: #000000;\n transition: all 0.2s ease;\n flex-shrink: 0;\n `;\n\n\t\tcameraButton.innerHTML = `\n <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 <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 <circle cx=\"12\" cy=\"13\" r=\"3\"></circle>\n </svg>\n `;\n\t} else {\n\t\tcameraButton.style.cssText = `\n display: flex;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n border-radius: 100px;\n padding: 10px 16px;\n border: none;\n background: white;\n color: #000000;\n transition: all 0.2s ease;\n flex-shrink: 0;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n white-space: nowrap;\n `;\n\n\t\tcameraButton.innerHTML = `\n <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 <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 <path d=\"M20 2v4\"/>\n <path d=\"M22 4h-4\"/>\n <circle cx=\"4\" cy=\"20\" r=\"2\"/>\n </svg>\n <span style=\"display: block;\">TRY THIS LOOK</span>\n `;\n\t}\n\n\tcameraButton.onclick = onCameraClick;\n\tcontainer.appendChild(cameraButton);\n\n\tif (hasVirtualTryOn) {\n\t\tif (onRefreshClick) {\n\t\t\tconst refreshButton = document.createElement(\"button\");\n\t\t\trefreshButton.type = \"button\";\n\t\t\trefreshButton.className = \"ww-refresh-btn\";\n\t\t\trefreshButton.setAttribute(\"aria-label\", \"Refresh virtual try-on\");\n\t\t\trefreshButton.style.cssText = `\n display: flex;\n width: 40px;\n height: 40px;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n border-radius: 100px;\n padding: 0;\n border: none;\n background: white;\n color: #333333;\n transition: all 0.2s ease;\n flex-shrink: 0;\n `;\n\n\t\t\trefreshButton.innerHTML = `\n <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 <path d=\"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"></path>\n <path d=\"M3 3v5h5\"></path>\n <path d=\"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16\"></path>\n <path d=\"M16 16h5v5\"></path>\n </svg>\n `;\n\n\t\t\trefreshButton.onclick = onRefreshClick;\n\n\t\t\trefreshButton.onclick = onRefreshClick;\n\t\t\tcontainer.appendChild(refreshButton);\n\t\t}\n\n\t\tif (onToggleClick) {\n\t\t\tconst toggleButton = document.createElement(\"button\");\n\t\t\ttoggleButton.type = \"button\";\n\t\t\ttoggleButton.className = \"ww-toggle-btn\";\n\t\t\ttoggleButton.setAttribute(\n\t\t\t\t\"aria-label\",\n\t\t\t\tisShowingVirtualTryOn ? \"Show Original Image\" : \"Show Virtual Try-On\",\n\t\t\t);\n\t\t\ttoggleButton.style.cssText = `\n display: flex;\n width: 40px;\n height: 40px;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n border-radius: 100px;\n padding: 0;\n border: none;\n background: ${isShowingVirtualTryOn ? \"#333333\" : \"#e5e7eb\"};\n color: ${isShowingVirtualTryOn ? \"white\" : \"#333333\"};\n transition: all 0.2s ease;\n flex-shrink: 0;\n `;\n\n\t\t\ttoggleButton.innerHTML = `\n <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 <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 <path d=\"M20 2v4\"/>\n <path d=\"M22 4h-4\"/>\n <circle cx=\"4\" cy=\"20\" r=\"2\"/>\n </svg>\n `;\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 { Z_INDEX } from \"../constants.js\";\n\nexport function createLoadingOverlay(\n\ttext: string = \"Processing...\",\n): HTMLElement {\n\tconst overlay = document.createElement(\"div\");\n\toverlay.className = \"ww-loading-overlay\";\n\toverlay.style.cssText = `\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: linear-gradient(135deg, rgba(0, 0, 0, 0.92) 0%, rgba(0, 0, 0, 0.88) 100%);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n z-index: ${Z_INDEX.MODAL + 1};\n border-radius: inherit;\n animation: ww-fade-in 0.3s ease;\n `;\n\n\tif (!document.getElementById(\"ww-loading-animation\")) {\n\t\tconst style = document.createElement(\"style\");\n\t\tstyle.id = \"ww-loading-animation\";\n\t\tstyle.textContent = `\n @keyframes ww-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n \n @keyframes ww-pulse-logo {\n 0%, 100% { \n opacity: 0.8; \n transform: scale(1);\n }\n 50% { \n opacity: 1; \n transform: scale(1.05);\n }\n }\n \n @keyframes ww-spinner-rotate {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n @keyframes ww-dot-bounce {\n 0%, 80%, 100% { \n transform: scale(0);\n opacity: 0.5;\n }\n 40% { \n transform: scale(1);\n opacity: 1;\n }\n }\n \n .ww-loading-logo {\n animation: ww-pulse-logo 2s ease-in-out infinite;\n }\n \n .ww-loading-spinner {\n animation: ww-spinner-rotate 1s linear infinite;\n }\n `;\n\t\tdocument.head.appendChild(style);\n\t}\n\n\toverlay.innerHTML = `\n <div style=\"display: flex; flex-direction: column; align-items: center; gap: 32px;\">\n <div style=\"position: relative; width: 120px; height: 120px; display: flex; align-items: center; justify-content: center;\">\n <!-- Outer spinning circle -->\n <div class=\"ww-loading-spinner\" style=\"\n position: absolute;\n width: 120px;\n height: 120px;\n border: 3px solid transparent;\n border-top: 3px solid #333333;\n border-right: 3px solid #333333;\n border-radius: 50%;\n \"></div>\n \n <!-- Logo -->\n <svg class=\"ww-loading-logo\" width=\"80\" height=\"50\" viewBox=\"0 0 214 135\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M102.906 74.8679C102.906 77.9717 101.574 80.7453 98.9104 83.1887C96.6871 85.1918 93.9025 86.6997 90.5566 87.7123C87.695 88.5708 84.6462 89 81.4104 89C73.8821 89 68.0047 87.0189 63.7783 83.0566C59.5519 87.0189 53.6855 89 46.1792 89C42.9434 89 39.9057 88.5708 37.066 87.7123C33.7201 86.6997 30.9245 85.1918 28.6792 83.1887C26.0157 80.7453 24.684 77.9717 24.684 74.8679V41.6509H32.3774V74.8679C32.3774 76.2547 33.489 77.5645 35.7123 78.7972C37.3632 79.7217 39.0692 80.3711 40.8302 80.7453C42.5252 81.1195 44.3082 81.3066 46.1792 81.3066C48.0063 81.3066 49.7673 81.1195 51.4623 80.7453C53.2453 80.3711 54.9623 79.7217 56.6132 78.7972C58.8585 77.5645 59.9811 76.2547 59.9811 74.8679V41.6509H67.6085V74.8679C67.6085 76.2547 68.7311 77.5645 70.9764 78.7972C72.6274 79.7217 74.3443 80.3711 76.1274 80.7453C77.8223 81.1195 79.5833 81.3066 81.4104 81.3066C83.2814 81.3066 85.0755 81.1195 86.7925 80.7453C88.5314 80.3711 90.2264 79.7217 91.8774 78.7972C94.1006 77.5645 95.2123 76.2547 95.2123 74.8679V41.6509H102.906V74.8679ZM189.283 74.8679C189.283 77.9717 187.951 80.7453 185.288 83.1887C183.064 85.1918 180.28 86.6997 176.934 87.7123C174.072 88.5708 171.024 89 167.788 89C160.259 89 154.382 87.0189 150.156 83.0566C145.929 87.0189 140.063 89 132.557 89C129.321 89 126.283 88.5708 123.443 87.7123C120.097 86.6997 117.302 85.1918 115.057 83.1887C112.393 80.7453 111.061 77.9717 111.061 74.8679V41.6509H118.755V74.8679C118.755 76.2547 119.866 77.5645 122.09 78.7972C123.741 79.7217 125.447 80.3711 127.208 80.7453C128.903 81.1195 130.686 81.3066 132.557 81.3066C134.384 81.3066 136.145 81.1195 137.84 80.7453C139.623 80.3711 141.34 79.7217 142.991 78.7972C145.236 77.5645 146.358 76.2547 146.358 74.8679V41.6509H153.986V74.8679C153.986 76.2547 155.108 77.5645 157.354 78.7972C159.005 79.7217 160.722 80.3711 162.505 80.7453C164.2 81.1195 165.961 81.3066 167.788 81.3066C169.659 81.3066 171.453 81.1195 173.17 80.7453C174.909 80.3711 176.604 79.7217 178.255 78.7972C180.478 77.5645 181.59 76.2547 181.59 74.8679V41.6509H189.283V74.8679Z\" fill=\"white\"/>\n </svg>\n </div>\n \n <div style=\"font-size: 17px; font-weight: 500; text-align: center; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; color: white; letter-spacing: 0.5px; max-width: 280px;\">${text}</div>\n \n <div style=\"display: flex; gap: 10px; margin-top: 4px;\">\n <div style=\"width: 10px; height: 10px; border-radius: 50%; background: #333333; animation: ww-dot-bounce 1.4s ease-in-out infinite;\"></div>\n <div style=\"width: 10px; height: 10px; border-radius: 50%; background: #333333; animation: ww-dot-bounce 1.4s ease-in-out 0.2s infinite;\"></div>\n <div style=\"width: 10px; height: 10px; border-radius: 50%; background: #333333; animation: ww-dot-bounce 1.4s ease-in-out 0.4s infinite;\"></div>\n </div>\n </div>\n `;\n\n\treturn overlay;\n}\n\nexport function showProductLoading(\n\tcontainer: HTMLElement,\n\ttext: string = \"Generating virtual try-on...\",\n): void {\n\tconst existingOverlay = container.querySelector(\".ww-loading-overlay\");\n\tif (existingOverlay) {\n\t\tconst textElement = existingOverlay.querySelector(\n\t\t\t'div[style*=\"font-size: 17px\"]',\n\t\t);\n\t\tif (textElement) {\n\t\t\ttextElement.textContent = text;\n\t\t}\n\t\treturn;\n\t}\n\n\tconst computedStyle = window.getComputedStyle(container);\n\tif (computedStyle.position === \"static\") {\n\t\tcontainer.style.position = \"relative\";\n\t}\n\n\tconst loadingOverlay = createLoadingOverlay(text);\n\tcontainer.appendChild(loadingOverlay);\n}\n\nexport function removeProductLoading(container: HTMLElement): void {\n\tconst existingOverlay = container.querySelector(\".ww-loading-overlay\");\n\tif (existingOverlay) {\n\t\texistingOverlay.remove();\n\t}\n}\n","export function createStatusBadge(message: string): HTMLElement {\n\tconst badge = document.createElement(\"div\");\n\tbadge.className = \"ww-status-badge\";\n\n\tbadge.style.cssText = `\n\t\tposition: absolute;\n\t\tbottom: 16px;\n\t\tleft: 50%;\n\t\ttransform: translateX(-50%);\n\t\tbackground: linear-gradient(135deg, rgba(0, 0, 0, 0.92) 0%, rgba(0, 0, 0, 0.88) 100%);\n\t\tbackdrop-filter: blur(12px);\n\t\t-webkit-backdrop-filter: blur(12px);\n\t\tcolor: white;\n\t\tpadding: 12px 24px;\n\t\tborder-radius: 24px;\n\t\tfont-size: 14px;\n\t\tfont-weight: 500;\n\t\tfont-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n\t\tbox-shadow: 0 4px 16px rgba(0, 0, 0, 0.3), 0 2px 8px rgba(0, 0, 0, 0.2);\n\t\tz-index: 1000;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 10px;\n\t\tanimation: ww-badge-fade-in 0.3s ease;\n\t\tletter-spacing: 0.3px;\n\t`;\n\n\tif (!document.getElementById(\"ww-status-badge-animation\")) {\n\t\tconst style = document.createElement(\"style\");\n\t\tstyle.id = \"ww-status-badge-animation\";\n\t\tstyle.textContent = `\n\t\t\t@keyframes ww-badge-fade-in {\n\t\t\t\tfrom { opacity: 0; transform: translateX(-50%) translateY(-10px); }\n\t\t\t\tto { opacity: 1; transform: translateX(-50%) translateY(0); }\n\t\t\t}\n\t\t\t\n\t\t\t@keyframes ww-badge-pulse {\n\t\t\t\t0%, 100% { opacity: 0.6; }\n\t\t\t\t50% { opacity: 1; }\n\t\t\t}\n\t\t`;\n\t\tdocument.head.appendChild(style);\n\t}\n\n\tbadge.innerHTML = `\n\t\t<div style=\"display: flex; gap: 4px;\">\n\t\t\t<div style=\"width: 6px; height: 6px; border-radius: 50%; background: white; animation: ww-badge-pulse 1.4s ease-in-out infinite;\"></div>\n\t\t\t<div style=\"width: 6px; height: 6px; border-radius: 50%; background: white; animation: ww-badge-pulse 1.4s ease-in-out 0.2s infinite;\"></div>\n\t\t\t<div style=\"width: 6px; height: 6px; border-radius: 50%; background: white; animation: ww-badge-pulse 1.4s ease-in-out 0.4s infinite;\"></div>\n\t\t</div>\n\t\t<span>${message}</span>\n\t`;\n\n\treturn badge;\n}\n\nexport function showStatusBadge(container: HTMLElement, message: string): void {\n\tconst existingBadge = container.querySelector(\".ww-status-badge\");\n\tif (existingBadge) {\n\t\tconst textElement = existingBadge.querySelector(\"span\");\n\t\tif (textElement) {\n\t\t\ttextElement.textContent = message;\n\t\t}\n\t\treturn;\n\t}\n\n\tconst badge = createStatusBadge(message);\n\tcontainer.appendChild(badge);\n}\n\nexport function removeStatusBadge(container: HTMLElement): void {\n\tconst badge = container.querySelector(\".ww-status-badge\");\n\tif (badge) {\n\t\tbadge.remove();\n\t}\n}\n","import {\n\tcreateButton,\n\tcreateButtonContainer,\n\tremoveProductLoading,\n\tremoveStatusBadge,\n\tshowProductLoading,\n\tshowStatusBadge,\n} from \"./components/index.js\";\nimport { CSS_CLASSES } from \"./constants.js\";\nimport type { VirtualTryOnConfig } from \"./index.js\";\n\ntype JobStatus = \"PENDING\" | \"COMPLETED\" | \"FAILED\";\n\ninterface JobStatusResponse {\n\tstatus: JobStatus;\n\tmessage: string;\n}\n\ninterface VtoDataResponse {\n\tgemini_model?: string;\n\timages?: string[];\n\tadditional_prompt?: string;\n}\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 originalProductImageUrl: 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 modalElement: HTMLElement | null = null;\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}\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\tif (!this.originalProductImageUrl) {\n\t\t\t\tthis.originalProductImageUrl = this.originalProductImages[0];\n\t\t\t}\n\n\t\t\tconst photoUploadUrl = new URL(`${this.config.baseUrl}`);\n\t\t\tphotoUploadUrl.searchParams.append(\n\t\t\t\t\"ww_product_images\",\n\t\t\t\tthis.originalProductImages.join(\",\"),\n\t\t\t);\n\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 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): void {\n\t\tthis.closeModal();\n\t\tVirtualTryOnWidget.activeWidgetId = this.instanceId;\n\n\t\tconst modal = document.createElement(\"div\");\n\t\tmodal.className = CSS_CLASSES.MODAL;\n\t\tmodal.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.8);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 999999999;\n animation: ww-modal-fade-in 0.3s ease;\n `;\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 width: 100%;\n height: 100%;\n border: none;\n `;\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 position: absolute;\n top: -48px;\n right: 0;\n background: rgba(255, 255, 255, 0.95);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n border: none;\n border-radius: 50%;\n width: 40px;\n height: 40px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #1f2937;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n `;\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(() => this.closeModal(), 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\tprivate closeModal(): void {\n\t\tif (this.modalElement) {\n\t\t\tthis.modalElement.remove();\n\t\t\tthis.modalElement = null;\n\t\t}\n\t\tif (VirtualTryOnWidget.activeWidgetId === this.instanceId) {\n\t\t\tVirtualTryOnWidget.activeWidgetId = null;\n\t\t}\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_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.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 modal = document.querySelector(`.${CSS_CLASSES.MODAL}`);\n\t\tif (modal && modal instanceof HTMLElement) {\n\t\t\tmodal.style.display = \"none\";\n\t\t}\n\t\tconst container = this.getContainer();\n\t\tif (container) {\n\t\t\tshowProductLoading(container, \"Preparing your personalized look\");\n\t\t}\n\n\t\ttry {\n\t\t\tconst submitResponse = await this.callVtoApi(\n\t\t\t\tthis.lastModelImage,\n\t\t\t\tthis.originalProductImages,\n\t\t\t);\n\n\t\t\tlet status = await this.fetchJobStatus(submitResponse.job_id);\n\n\t\t\twhile (status.status !== \"COMPLETED\" && status.status !== \"FAILED\") {\n\t\t\t\tif (container instanceof HTMLElement) {\n\t\t\t\t\tconst statusMessage = \"Preparing your personalized look\";\n\t\t\t\t\tshowProductLoading(container, statusMessage);\n\t\t\t\t}\n\n\t\t\t\tawait new Promise((r) => setTimeout(r, 3000));\n\t\t\t\tstatus = await this.fetchJobStatus(submitResponse.job_id);\n\t\t\t}\n\n\t\t\tif (status.status === \"COMPLETED\") {\n\t\t\t\tconst finalImage = await this.fetchJobImage(submitResponse.job_id);\n\t\t\t\tif (finalImage) {\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\tremoveStatusBadge(container);\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\tif (container instanceof HTMLElement) {\n\t\t\t\t\tshowStatusBadge(\n\t\t\t\t\t\tcontainer,\n\t\t\t\t\t\t\"We are experiencing some technical issues and apologise for any inconvenience caused. Please come back later again\",\n\t\t\t\t\t);\n\t\t\t\t}\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\tif (container instanceof HTMLElement) {\n\t\t\t\tshowProductLoading(\n\t\t\t\t\tcontainer,\n\t\t\t\t\t\"We are experiencing technical issues and apologise for any inconvenience caused. Please come back later again\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait new Promise((r) => setTimeout(r, 5000));\n\t\t} finally {\n\t\t\tif (container instanceof HTMLElement) {\n\t\t\t\tremoveProductLoading(container);\n\t\t\t\tremoveStatusBadge(container);\n\t\t\t\tthis.showButtonContainer(container);\n\t\t\t}\n\t\t\tthis.closeModal();\n\t\t}\n\t}\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.config.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\tprivate async callVtoApi(\n\t\tmodelImage: Blob,\n\t\tproductImages: string[],\n\t): Promise<{ job_id: string }> {\n\t\tconst outfitID = this.config.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\", this.config.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.config.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\tprivate async fetchJobStatus(jobId: string): Promise<JobStatusResponse> {\n\t\tconst res = await fetch(\n\t\t\t`${this.config.baseUrl}/api/vto/status?job_id=${jobId}`,\n\t\t);\n\t\tif (!res.ok) throw new Error(`Status check failed: ${res.status}`);\n\t\treturn res.json();\n\t}\n\n\tprivate async fetchJobImage(jobId: string): Promise<string> {\n\t\tconst url = `${this.config.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\tprivate async refreshVirtualTryOn(): Promise<void> {\n\t\tawait this.startVirtualTryOn(true);\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.refreshVirtualTryOn();\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\tremoveProductLoading(container);\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.originalProductImageUrl = 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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"}
package/dist/index.js CHANGED
@@ -412,7 +412,7 @@
412
412
  }
413
413
  getContainer() {
414
414
  const configContainer = this.config.galleryElement;
415
- if (configContainer && configContainer.isConnected) {
415
+ if (configContainer === null || configContainer === void 0 ? void 0 : configContainer.isConnected) {
416
416
  return configContainer;
417
417
  }
418
418
  const queriedContainer = document.querySelector(this.config.gallerySelector);
@@ -703,14 +703,57 @@
703
703
  this.closeModal();
704
704
  }
705
705
  }
706
+ async fetchVtoData(outfitId) {
707
+ try {
708
+ const vtoDataUrl = new URL("/api/vto/data", this.config.baseUrl);
709
+ vtoDataUrl.searchParams.set("outfit_id", outfitId);
710
+ const response = await fetch(vtoDataUrl.toString());
711
+ if (response.status === 404)
712
+ return null;
713
+ if (!response.ok) {
714
+ const errorText = await response.text();
715
+ console.warn(`[WeWear VTO] Failed to retrieve VTO data (${response.status}): ${errorText}`);
716
+ return null;
717
+ }
718
+ return (await response.json());
719
+ }
720
+ catch (error) {
721
+ console.warn("[WeWear VTO] Error retrieving VTO data:", error);
722
+ return null;
723
+ }
724
+ }
706
725
  async callVtoApi(modelImage, productImages) {
707
726
  var _a;
727
+ const outfitID = (_a = this.config.outfitID) === null || _a === void 0 ? void 0 : _a.trim();
728
+ let resolvedProductImages = productImages;
729
+ let resolvedGeminiModel = null;
730
+ let resolvedAdditionalPrompt = null;
731
+ if (outfitID) {
732
+ const vtoData = await this.fetchVtoData(outfitID);
733
+ if (vtoData) {
734
+ if (Array.isArray(vtoData.images) && vtoData.images.length > 0) {
735
+ resolvedProductImages = vtoData.images;
736
+ }
737
+ if (typeof vtoData.gemini_model === "string" && vtoData.gemini_model) {
738
+ resolvedGeminiModel = vtoData.gemini_model;
739
+ }
740
+ if (typeof vtoData.additional_prompt === "string" &&
741
+ vtoData.additional_prompt) {
742
+ resolvedAdditionalPrompt = vtoData.additional_prompt;
743
+ }
744
+ console.log(`[WeWear VTO] Using stored VTO data for outfit_id=${outfitID}`);
745
+ }
746
+ }
708
747
  const formData = new FormData();
709
748
  formData.append("model_image", modelImage, "model_image.png");
710
- formData.append("product_image_urls", JSON.stringify(productImages));
749
+ formData.append("product_image_urls", JSON.stringify(resolvedProductImages));
711
750
  formData.append("page_url", window.location.href);
712
751
  formData.append("model_tier", this.config.modelTier);
713
- const outfitID = (_a = this.config.outfitID) === null || _a === void 0 ? void 0 : _a.trim();
752
+ if (resolvedGeminiModel)
753
+ formData.append("gemini_model", resolvedGeminiModel);
754
+ if (resolvedAdditionalPrompt) {
755
+ formData.append("additional_prompt", resolvedAdditionalPrompt);
756
+ }
714
757
  if (outfitID)
715
758
  formData.append("outfit_id", outfitID);
716
759
  const res = await fetch(`${this.config.baseUrl}/api/vto`, {
@@ -875,7 +918,9 @@
875
918
  const container = this.getContainer();
876
919
  if (container) {
877
920
  const existingButtons = container.querySelectorAll(`.${CSS_CLASSES.BUTTON_CONTAINER}`);
878
- existingButtons.forEach((btn) => btn.remove());
921
+ existingButtons.forEach((btn) => {
922
+ btn.remove();
923
+ });
879
924
  }
880
925
  this.closeModal();
881
926
  this.cameraButton = null;
@@ -901,7 +946,9 @@
901
946
  let widgetInstances = [];
902
947
  function initVirtualTryOn(config) {
903
948
  try {
904
- widgetInstances.forEach((instance) => instance.destroy());
949
+ widgetInstances.forEach((instance) => {
950
+ instance.destroy();
951
+ });
905
952
  widgetInstances = [];
906
953
  if (!config) {
907
954
  console.log("[WeWear VTO] Missing configuration. Widget not initialized.");
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/components/loading-overlay.ts","../src/components/status-badge.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\tMODAL: 99999,\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\nexport function removeElements(selector: string): void {\n\tconst elements = document.querySelectorAll(selector);\n\telements.forEach((element) => {\n\t\telement.remove();\n\t});\n}\n","import { CSS_CLASSES, Z_INDEX } from \"../constants.js\";\nimport { getPositionStyles } from \"../utils.js\";\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 = `\n position: absolute;\n ${positionStyles}\n display: flex;\n gap: 4px;\n border-radius: 100px;\n background: white;\n padding: 4px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n z-index: ${Z_INDEX.BUTTON};\n transition: all 0.2s ease;\n `;\n\n\tconst cameraButton = document.createElement(\"button\");\n\tcameraButton.type = \"button\";\n\tcameraButton.className = `${CSS_CLASSES.BUTTON} ww-camera-btn`;\n\tcameraButton.setAttribute(\"aria-label\", \"Virtual Try-On\");\n\n\tif (hasVirtualTryOn) {\n\t\tcameraButton.style.cssText = `\n display: flex;\n width: 40px;\n height: 40px;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n border-radius: 100px;\n padding: 0;\n border: none;\n background: white;\n color: #000000;\n transition: all 0.2s ease;\n flex-shrink: 0;\n `;\n\n\t\tcameraButton.innerHTML = `\n <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 <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 <circle cx=\"12\" cy=\"13\" r=\"3\"></circle>\n </svg>\n `;\n\t} else {\n\t\tcameraButton.style.cssText = `\n display: flex;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n border-radius: 100px;\n padding: 10px 16px;\n border: none;\n background: white;\n color: #000000;\n transition: all 0.2s ease;\n flex-shrink: 0;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n white-space: nowrap;\n `;\n\n\t\tcameraButton.innerHTML = `\n <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 <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 <path d=\"M20 2v4\"/>\n <path d=\"M22 4h-4\"/>\n <circle cx=\"4\" cy=\"20\" r=\"2\"/>\n </svg>\n <span style=\"display: block;\">TRY THIS LOOK</span>\n `;\n\t}\n\n\tcameraButton.onclick = onCameraClick;\n\tcontainer.appendChild(cameraButton);\n\n\tif (hasVirtualTryOn) {\n\t\tif (onRefreshClick) {\n\t\t\tconst refreshButton = document.createElement(\"button\");\n\t\t\trefreshButton.type = \"button\";\n\t\t\trefreshButton.className = \"ww-refresh-btn\";\n\t\t\trefreshButton.setAttribute(\"aria-label\", \"Refresh virtual try-on\");\n\t\t\trefreshButton.style.cssText = `\n display: flex;\n width: 40px;\n height: 40px;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n border-radius: 100px;\n padding: 0;\n border: none;\n background: white;\n color: #333333;\n transition: all 0.2s ease;\n flex-shrink: 0;\n `;\n\n\t\t\trefreshButton.innerHTML = `\n <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 <path d=\"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"></path>\n <path d=\"M3 3v5h5\"></path>\n <path d=\"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16\"></path>\n <path d=\"M16 16h5v5\"></path>\n </svg>\n `;\n\n\t\t\trefreshButton.onclick = onRefreshClick;\n\n\t\t\trefreshButton.onclick = onRefreshClick;\n\t\t\tcontainer.appendChild(refreshButton);\n\t\t}\n\n\t\tif (onToggleClick) {\n\t\t\tconst toggleButton = document.createElement(\"button\");\n\t\t\ttoggleButton.type = \"button\";\n\t\t\ttoggleButton.className = \"ww-toggle-btn\";\n\t\t\ttoggleButton.setAttribute(\n\t\t\t\t\"aria-label\",\n\t\t\t\tisShowingVirtualTryOn ? \"Show Original Image\" : \"Show Virtual Try-On\",\n\t\t\t);\n\t\t\ttoggleButton.style.cssText = `\n display: flex;\n width: 40px;\n height: 40px;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n border-radius: 100px;\n padding: 0;\n border: none;\n background: ${isShowingVirtualTryOn ? \"#333333\" : \"#e5e7eb\"};\n color: ${isShowingVirtualTryOn ? \"white\" : \"#333333\"};\n transition: all 0.2s ease;\n flex-shrink: 0;\n `;\n\n\t\t\ttoggleButton.innerHTML = `\n <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 <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 <path d=\"M20 2v4\"/>\n <path d=\"M22 4h-4\"/>\n <circle cx=\"4\" cy=\"20\" r=\"2\"/>\n </svg>\n `;\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 { Z_INDEX } from \"../constants.js\";\n\nexport function createLoadingOverlay(\n\ttext: string = \"Processing...\",\n): HTMLElement {\n\tconst overlay = document.createElement(\"div\");\n\toverlay.className = \"ww-loading-overlay\";\n\toverlay.style.cssText = `\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: linear-gradient(135deg, rgba(0, 0, 0, 0.92) 0%, rgba(0, 0, 0, 0.88) 100%);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n z-index: ${Z_INDEX.MODAL + 1};\n border-radius: inherit;\n animation: ww-fade-in 0.3s ease;\n `;\n\n\tif (!document.getElementById(\"ww-loading-animation\")) {\n\t\tconst style = document.createElement(\"style\");\n\t\tstyle.id = \"ww-loading-animation\";\n\t\tstyle.textContent = `\n @keyframes ww-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n \n @keyframes ww-pulse-logo {\n 0%, 100% { \n opacity: 0.8; \n transform: scale(1);\n }\n 50% { \n opacity: 1; \n transform: scale(1.05);\n }\n }\n \n @keyframes ww-spinner-rotate {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n @keyframes ww-dot-bounce {\n 0%, 80%, 100% { \n transform: scale(0);\n opacity: 0.5;\n }\n 40% { \n transform: scale(1);\n opacity: 1;\n }\n }\n \n .ww-loading-logo {\n animation: ww-pulse-logo 2s ease-in-out infinite;\n }\n \n .ww-loading-spinner {\n animation: ww-spinner-rotate 1s linear infinite;\n }\n `;\n\t\tdocument.head.appendChild(style);\n\t}\n\n\toverlay.innerHTML = `\n <div style=\"display: flex; flex-direction: column; align-items: center; gap: 32px;\">\n <div style=\"position: relative; width: 120px; height: 120px; display: flex; align-items: center; justify-content: center;\">\n <!-- Outer spinning circle -->\n <div class=\"ww-loading-spinner\" style=\"\n position: absolute;\n width: 120px;\n height: 120px;\n border: 3px solid transparent;\n border-top: 3px solid #333333;\n border-right: 3px solid #333333;\n border-radius: 50%;\n \"></div>\n \n <!-- Logo -->\n <svg class=\"ww-loading-logo\" width=\"80\" height=\"50\" viewBox=\"0 0 214 135\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M102.906 74.8679C102.906 77.9717 101.574 80.7453 98.9104 83.1887C96.6871 85.1918 93.9025 86.6997 90.5566 87.7123C87.695 88.5708 84.6462 89 81.4104 89C73.8821 89 68.0047 87.0189 63.7783 83.0566C59.5519 87.0189 53.6855 89 46.1792 89C42.9434 89 39.9057 88.5708 37.066 87.7123C33.7201 86.6997 30.9245 85.1918 28.6792 83.1887C26.0157 80.7453 24.684 77.9717 24.684 74.8679V41.6509H32.3774V74.8679C32.3774 76.2547 33.489 77.5645 35.7123 78.7972C37.3632 79.7217 39.0692 80.3711 40.8302 80.7453C42.5252 81.1195 44.3082 81.3066 46.1792 81.3066C48.0063 81.3066 49.7673 81.1195 51.4623 80.7453C53.2453 80.3711 54.9623 79.7217 56.6132 78.7972C58.8585 77.5645 59.9811 76.2547 59.9811 74.8679V41.6509H67.6085V74.8679C67.6085 76.2547 68.7311 77.5645 70.9764 78.7972C72.6274 79.7217 74.3443 80.3711 76.1274 80.7453C77.8223 81.1195 79.5833 81.3066 81.4104 81.3066C83.2814 81.3066 85.0755 81.1195 86.7925 80.7453C88.5314 80.3711 90.2264 79.7217 91.8774 78.7972C94.1006 77.5645 95.2123 76.2547 95.2123 74.8679V41.6509H102.906V74.8679ZM189.283 74.8679C189.283 77.9717 187.951 80.7453 185.288 83.1887C183.064 85.1918 180.28 86.6997 176.934 87.7123C174.072 88.5708 171.024 89 167.788 89C160.259 89 154.382 87.0189 150.156 83.0566C145.929 87.0189 140.063 89 132.557 89C129.321 89 126.283 88.5708 123.443 87.7123C120.097 86.6997 117.302 85.1918 115.057 83.1887C112.393 80.7453 111.061 77.9717 111.061 74.8679V41.6509H118.755V74.8679C118.755 76.2547 119.866 77.5645 122.09 78.7972C123.741 79.7217 125.447 80.3711 127.208 80.7453C128.903 81.1195 130.686 81.3066 132.557 81.3066C134.384 81.3066 136.145 81.1195 137.84 80.7453C139.623 80.3711 141.34 79.7217 142.991 78.7972C145.236 77.5645 146.358 76.2547 146.358 74.8679V41.6509H153.986V74.8679C153.986 76.2547 155.108 77.5645 157.354 78.7972C159.005 79.7217 160.722 80.3711 162.505 80.7453C164.2 81.1195 165.961 81.3066 167.788 81.3066C169.659 81.3066 171.453 81.1195 173.17 80.7453C174.909 80.3711 176.604 79.7217 178.255 78.7972C180.478 77.5645 181.59 76.2547 181.59 74.8679V41.6509H189.283V74.8679Z\" fill=\"white\"/>\n </svg>\n </div>\n \n <div style=\"font-size: 17px; font-weight: 500; text-align: center; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; color: white; letter-spacing: 0.5px; max-width: 280px;\">${text}</div>\n \n <div style=\"display: flex; gap: 10px; margin-top: 4px;\">\n <div style=\"width: 10px; height: 10px; border-radius: 50%; background: #333333; animation: ww-dot-bounce 1.4s ease-in-out infinite;\"></div>\n <div style=\"width: 10px; height: 10px; border-radius: 50%; background: #333333; animation: ww-dot-bounce 1.4s ease-in-out 0.2s infinite;\"></div>\n <div style=\"width: 10px; height: 10px; border-radius: 50%; background: #333333; animation: ww-dot-bounce 1.4s ease-in-out 0.4s infinite;\"></div>\n </div>\n </div>\n `;\n\n\treturn overlay;\n}\n\nexport function showProductLoading(\n\tcontainer: HTMLElement,\n\ttext: string = \"Generating virtual try-on...\",\n): void {\n\tconst existingOverlay = container.querySelector(\".ww-loading-overlay\");\n\tif (existingOverlay) {\n\t\tconst textElement = existingOverlay.querySelector(\n\t\t\t'div[style*=\"font-size: 17px\"]',\n\t\t);\n\t\tif (textElement) {\n\t\t\ttextElement.textContent = text;\n\t\t}\n\t\treturn;\n\t}\n\n\tconst computedStyle = window.getComputedStyle(container);\n\tif (computedStyle.position === \"static\") {\n\t\tcontainer.style.position = \"relative\";\n\t}\n\n\tconst loadingOverlay = createLoadingOverlay(text);\n\tcontainer.appendChild(loadingOverlay);\n}\n\nexport function removeProductLoading(container: HTMLElement): void {\n\tconst existingOverlay = container.querySelector(\".ww-loading-overlay\");\n\tif (existingOverlay) {\n\t\texistingOverlay.remove();\n\t}\n}\n","export function createStatusBadge(message: string): HTMLElement {\n\tconst badge = document.createElement(\"div\");\n\tbadge.className = \"ww-status-badge\";\n\n\tbadge.style.cssText = `\n\t\tposition: absolute;\n\t\tbottom: 16px;\n\t\tleft: 50%;\n\t\ttransform: translateX(-50%);\n\t\tbackground: linear-gradient(135deg, rgba(0, 0, 0, 0.92) 0%, rgba(0, 0, 0, 0.88) 100%);\n\t\tbackdrop-filter: blur(12px);\n\t\t-webkit-backdrop-filter: blur(12px);\n\t\tcolor: white;\n\t\tpadding: 12px 24px;\n\t\tborder-radius: 24px;\n\t\tfont-size: 14px;\n\t\tfont-weight: 500;\n\t\tfont-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n\t\tbox-shadow: 0 4px 16px rgba(0, 0, 0, 0.3), 0 2px 8px rgba(0, 0, 0, 0.2);\n\t\tz-index: 1000;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 10px;\n\t\tanimation: ww-badge-fade-in 0.3s ease;\n\t\tletter-spacing: 0.3px;\n\t`;\n\n\tif (!document.getElementById(\"ww-status-badge-animation\")) {\n\t\tconst style = document.createElement(\"style\");\n\t\tstyle.id = \"ww-status-badge-animation\";\n\t\tstyle.textContent = `\n\t\t\t@keyframes ww-badge-fade-in {\n\t\t\t\tfrom { opacity: 0; transform: translateX(-50%) translateY(-10px); }\n\t\t\t\tto { opacity: 1; transform: translateX(-50%) translateY(0); }\n\t\t\t}\n\t\t\t\n\t\t\t@keyframes ww-badge-pulse {\n\t\t\t\t0%, 100% { opacity: 0.6; }\n\t\t\t\t50% { opacity: 1; }\n\t\t\t}\n\t\t`;\n\t\tdocument.head.appendChild(style);\n\t}\n\n\tbadge.innerHTML = `\n\t\t<div style=\"display: flex; gap: 4px;\">\n\t\t\t<div style=\"width: 6px; height: 6px; border-radius: 50%; background: white; animation: ww-badge-pulse 1.4s ease-in-out infinite;\"></div>\n\t\t\t<div style=\"width: 6px; height: 6px; border-radius: 50%; background: white; animation: ww-badge-pulse 1.4s ease-in-out 0.2s infinite;\"></div>\n\t\t\t<div style=\"width: 6px; height: 6px; border-radius: 50%; background: white; animation: ww-badge-pulse 1.4s ease-in-out 0.4s infinite;\"></div>\n\t\t</div>\n\t\t<span>${message}</span>\n\t`;\n\n\treturn badge;\n}\n\nexport function showStatusBadge(container: HTMLElement, message: string): void {\n\tconst existingBadge = container.querySelector(\".ww-status-badge\");\n\tif (existingBadge) {\n\t\tconst textElement = existingBadge.querySelector(\"span\");\n\t\tif (textElement) {\n\t\t\ttextElement.textContent = message;\n\t\t}\n\t\treturn;\n\t}\n\n\tconst badge = createStatusBadge(message);\n\tcontainer.appendChild(badge);\n}\n\nexport function removeStatusBadge(container: HTMLElement): void {\n\tconst badge = container.querySelector(\".ww-status-badge\");\n\tif (badge) {\n\t\tbadge.remove();\n\t}\n}\n","import {\n\tcreateButton,\n\tcreateButtonContainer,\n\tremoveProductLoading,\n\tremoveStatusBadge,\n\tshowProductLoading,\n\tshowStatusBadge,\n} from \"./components/index.js\";\nimport { CSS_CLASSES } from \"./constants.js\";\nimport type { VirtualTryOnConfig } from \"./index.js\";\n\ntype JobStatus = \"PENDING\" | \"COMPLETED\" | \"FAILED\";\n\ninterface JobStatusResponse {\n\tstatus: JobStatus;\n\tmessage: string;\n}\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 originalProductImageUrl: 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 modalElement: HTMLElement | null = null;\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}\n\n\tprivate getContainer(): HTMLElement | null {\n\t\tconst configContainer = this.config.galleryElement;\n\t\tif (configContainer && 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\tif (!this.originalProductImageUrl) {\n\t\t\t\tthis.originalProductImageUrl = this.originalProductImages[0];\n\t\t\t}\n\n\t\t\tconst photoUploadUrl = new URL(`${this.config.baseUrl}`);\n\t\t\tphotoUploadUrl.searchParams.append(\n\t\t\t\t\"ww_product_images\",\n\t\t\t\tthis.originalProductImages.join(\",\"),\n\t\t\t);\n\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 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): void {\n\t\tthis.closeModal();\n\t\tVirtualTryOnWidget.activeWidgetId = this.instanceId;\n\n\t\tconst modal = document.createElement(\"div\");\n\t\tmodal.className = CSS_CLASSES.MODAL;\n\t\tmodal.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.8);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 999999999;\n animation: ww-modal-fade-in 0.3s ease;\n `;\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 width: 100%;\n height: 100%;\n border: none;\n `;\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 position: absolute;\n top: -48px;\n right: 0;\n background: rgba(255, 255, 255, 0.95);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n border: none;\n border-radius: 50%;\n width: 40px;\n height: 40px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #1f2937;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n `;\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(() => this.closeModal(), 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\tprivate closeModal(): void {\n\t\tif (this.modalElement) {\n\t\t\tthis.modalElement.remove();\n\t\t\tthis.modalElement = null;\n\t\t}\n\t\tif (VirtualTryOnWidget.activeWidgetId === this.instanceId) {\n\t\t\tVirtualTryOnWidget.activeWidgetId = null;\n\t\t}\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_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.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 modal = document.querySelector(`.${CSS_CLASSES.MODAL}`);\n\t\tif (modal && modal instanceof HTMLElement) {\n\t\t\tmodal.style.display = \"none\";\n\t\t}\n\t\tconst container = this.getContainer();\n\t\tif (container) {\n\t\t\tshowProductLoading(container, \"Preparing your personalized look\");\n\t\t}\n\n\t\ttry {\n\t\t\tconst submitResponse = await this.callVtoApi(\n\t\t\t\tthis.lastModelImage,\n\t\t\t\tthis.originalProductImages,\n\t\t\t);\n\n\t\t\tlet status = await this.fetchJobStatus(submitResponse.job_id);\n\n\t\t\twhile (status.status !== \"COMPLETED\" && status.status !== \"FAILED\") {\n\t\t\t\tif (container instanceof HTMLElement) {\n\t\t\t\t\tconst statusMessage = \"Preparing your personalized look\";\n\t\t\t\t\tshowProductLoading(container, statusMessage);\n\t\t\t\t}\n\n\t\t\t\tawait new Promise((r) => setTimeout(r, 3000));\n\t\t\t\tstatus = await this.fetchJobStatus(submitResponse.job_id);\n\t\t\t}\n\n\t\t\tif (status.status === \"COMPLETED\") {\n\t\t\t\tconst finalImage = await this.fetchJobImage(submitResponse.job_id);\n\t\t\t\tif (finalImage) {\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\tremoveStatusBadge(container);\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\tif (container instanceof HTMLElement) {\n\t\t\t\t\tshowStatusBadge(\n\t\t\t\t\t\tcontainer,\n\t\t\t\t\t\t\"We are experiencing some technical issues and apologise for any inconvenience caused. Please come back later again\",\n\t\t\t\t\t);\n\t\t\t\t}\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\tif (container instanceof HTMLElement) {\n\t\t\t\tshowProductLoading(\n\t\t\t\t\tcontainer,\n\t\t\t\t\t\"We are experiencing technical issues and apologise for any inconvenience caused. Please come back later again\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait new Promise((r) => setTimeout(r, 5000));\n\t\t} finally {\n\t\t\tif (container instanceof HTMLElement) {\n\t\t\t\tremoveProductLoading(container);\n\t\t\t\tremoveStatusBadge(container);\n\t\t\t\tthis.showButtonContainer(container);\n\t\t\t}\n\t\t\tthis.closeModal();\n\t\t}\n\t}\n\n\tprivate async callVtoApi(\n\t\tmodelImage: Blob,\n\t\tproductImages: string[],\n\t): Promise<{ job_id: string }> {\n\t\tconst formData = new FormData();\n\t\tformData.append(\"model_image\", modelImage, \"model_image.png\");\n\n\t\tformData.append(\"product_image_urls\", JSON.stringify(productImages));\n\t\tformData.append(\"page_url\", window.location.href);\n\t\tformData.append(\"model_tier\", this.config.modelTier);\n\n\t\tconst outfitID = this.config.outfitID?.trim();\n\t\tif (outfitID) formData.append(\"outfit_id\", outfitID);\n\n\t\tconst res = await fetch(`${this.config.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\tprivate async fetchJobStatus(jobId: string): Promise<JobStatusResponse> {\n\t\tconst res = await fetch(\n\t\t\t`${this.config.baseUrl}/api/vto/status?job_id=${jobId}`,\n\t\t);\n\t\tif (!res.ok) throw new Error(`Status check failed: ${res.status}`);\n\t\treturn res.json();\n\t}\n\n\tprivate async fetchJobImage(jobId: string): Promise<string> {\n\t\tconst url = `${this.config.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\tprivate async refreshVirtualTryOn(): Promise<void> {\n\t\tawait this.startVirtualTryOn(true);\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.refreshVirtualTryOn();\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\tremoveProductLoading(container);\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) => btn.remove());\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.originalProductImageUrl = 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) => instance.destroy());\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/components/loading-overlay.ts","../src/components/status-badge.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\tMODAL: 99999,\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\nexport function removeElements(selector: string): void {\n\tconst elements = document.querySelectorAll(selector);\n\telements.forEach((element) => {\n\t\telement.remove();\n\t});\n}\n","import { CSS_CLASSES, Z_INDEX } from \"../constants.js\";\nimport { getPositionStyles } from \"../utils.js\";\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 = `\n position: absolute;\n ${positionStyles}\n display: flex;\n gap: 4px;\n border-radius: 100px;\n background: white;\n padding: 4px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n z-index: ${Z_INDEX.BUTTON};\n transition: all 0.2s ease;\n `;\n\n\tconst cameraButton = document.createElement(\"button\");\n\tcameraButton.type = \"button\";\n\tcameraButton.className = `${CSS_CLASSES.BUTTON} ww-camera-btn`;\n\tcameraButton.setAttribute(\"aria-label\", \"Virtual Try-On\");\n\n\tif (hasVirtualTryOn) {\n\t\tcameraButton.style.cssText = `\n display: flex;\n width: 40px;\n height: 40px;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n border-radius: 100px;\n padding: 0;\n border: none;\n background: white;\n color: #000000;\n transition: all 0.2s ease;\n flex-shrink: 0;\n `;\n\n\t\tcameraButton.innerHTML = `\n <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 <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 <circle cx=\"12\" cy=\"13\" r=\"3\"></circle>\n </svg>\n `;\n\t} else {\n\t\tcameraButton.style.cssText = `\n display: flex;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n border-radius: 100px;\n padding: 10px 16px;\n border: none;\n background: white;\n color: #000000;\n transition: all 0.2s ease;\n flex-shrink: 0;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n white-space: nowrap;\n `;\n\n\t\tcameraButton.innerHTML = `\n <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 <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 <path d=\"M20 2v4\"/>\n <path d=\"M22 4h-4\"/>\n <circle cx=\"4\" cy=\"20\" r=\"2\"/>\n </svg>\n <span style=\"display: block;\">TRY THIS LOOK</span>\n `;\n\t}\n\n\tcameraButton.onclick = onCameraClick;\n\tcontainer.appendChild(cameraButton);\n\n\tif (hasVirtualTryOn) {\n\t\tif (onRefreshClick) {\n\t\t\tconst refreshButton = document.createElement(\"button\");\n\t\t\trefreshButton.type = \"button\";\n\t\t\trefreshButton.className = \"ww-refresh-btn\";\n\t\t\trefreshButton.setAttribute(\"aria-label\", \"Refresh virtual try-on\");\n\t\t\trefreshButton.style.cssText = `\n display: flex;\n width: 40px;\n height: 40px;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n border-radius: 100px;\n padding: 0;\n border: none;\n background: white;\n color: #333333;\n transition: all 0.2s ease;\n flex-shrink: 0;\n `;\n\n\t\t\trefreshButton.innerHTML = `\n <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 <path d=\"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"></path>\n <path d=\"M3 3v5h5\"></path>\n <path d=\"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16\"></path>\n <path d=\"M16 16h5v5\"></path>\n </svg>\n `;\n\n\t\t\trefreshButton.onclick = onRefreshClick;\n\n\t\t\trefreshButton.onclick = onRefreshClick;\n\t\t\tcontainer.appendChild(refreshButton);\n\t\t}\n\n\t\tif (onToggleClick) {\n\t\t\tconst toggleButton = document.createElement(\"button\");\n\t\t\ttoggleButton.type = \"button\";\n\t\t\ttoggleButton.className = \"ww-toggle-btn\";\n\t\t\ttoggleButton.setAttribute(\n\t\t\t\t\"aria-label\",\n\t\t\t\tisShowingVirtualTryOn ? \"Show Original Image\" : \"Show Virtual Try-On\",\n\t\t\t);\n\t\t\ttoggleButton.style.cssText = `\n display: flex;\n width: 40px;\n height: 40px;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n border-radius: 100px;\n padding: 0;\n border: none;\n background: ${isShowingVirtualTryOn ? \"#333333\" : \"#e5e7eb\"};\n color: ${isShowingVirtualTryOn ? \"white\" : \"#333333\"};\n transition: all 0.2s ease;\n flex-shrink: 0;\n `;\n\n\t\t\ttoggleButton.innerHTML = `\n <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 <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 <path d=\"M20 2v4\"/>\n <path d=\"M22 4h-4\"/>\n <circle cx=\"4\" cy=\"20\" r=\"2\"/>\n </svg>\n `;\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 { Z_INDEX } from \"../constants.js\";\n\nexport function createLoadingOverlay(\n\ttext: string = \"Processing...\",\n): HTMLElement {\n\tconst overlay = document.createElement(\"div\");\n\toverlay.className = \"ww-loading-overlay\";\n\toverlay.style.cssText = `\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: linear-gradient(135deg, rgba(0, 0, 0, 0.92) 0%, rgba(0, 0, 0, 0.88) 100%);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n z-index: ${Z_INDEX.MODAL + 1};\n border-radius: inherit;\n animation: ww-fade-in 0.3s ease;\n `;\n\n\tif (!document.getElementById(\"ww-loading-animation\")) {\n\t\tconst style = document.createElement(\"style\");\n\t\tstyle.id = \"ww-loading-animation\";\n\t\tstyle.textContent = `\n @keyframes ww-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n \n @keyframes ww-pulse-logo {\n 0%, 100% { \n opacity: 0.8; \n transform: scale(1);\n }\n 50% { \n opacity: 1; \n transform: scale(1.05);\n }\n }\n \n @keyframes ww-spinner-rotate {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n @keyframes ww-dot-bounce {\n 0%, 80%, 100% { \n transform: scale(0);\n opacity: 0.5;\n }\n 40% { \n transform: scale(1);\n opacity: 1;\n }\n }\n \n .ww-loading-logo {\n animation: ww-pulse-logo 2s ease-in-out infinite;\n }\n \n .ww-loading-spinner {\n animation: ww-spinner-rotate 1s linear infinite;\n }\n `;\n\t\tdocument.head.appendChild(style);\n\t}\n\n\toverlay.innerHTML = `\n <div style=\"display: flex; flex-direction: column; align-items: center; gap: 32px;\">\n <div style=\"position: relative; width: 120px; height: 120px; display: flex; align-items: center; justify-content: center;\">\n <!-- Outer spinning circle -->\n <div class=\"ww-loading-spinner\" style=\"\n position: absolute;\n width: 120px;\n height: 120px;\n border: 3px solid transparent;\n border-top: 3px solid #333333;\n border-right: 3px solid #333333;\n border-radius: 50%;\n \"></div>\n \n <!-- Logo -->\n <svg class=\"ww-loading-logo\" width=\"80\" height=\"50\" viewBox=\"0 0 214 135\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M102.906 74.8679C102.906 77.9717 101.574 80.7453 98.9104 83.1887C96.6871 85.1918 93.9025 86.6997 90.5566 87.7123C87.695 88.5708 84.6462 89 81.4104 89C73.8821 89 68.0047 87.0189 63.7783 83.0566C59.5519 87.0189 53.6855 89 46.1792 89C42.9434 89 39.9057 88.5708 37.066 87.7123C33.7201 86.6997 30.9245 85.1918 28.6792 83.1887C26.0157 80.7453 24.684 77.9717 24.684 74.8679V41.6509H32.3774V74.8679C32.3774 76.2547 33.489 77.5645 35.7123 78.7972C37.3632 79.7217 39.0692 80.3711 40.8302 80.7453C42.5252 81.1195 44.3082 81.3066 46.1792 81.3066C48.0063 81.3066 49.7673 81.1195 51.4623 80.7453C53.2453 80.3711 54.9623 79.7217 56.6132 78.7972C58.8585 77.5645 59.9811 76.2547 59.9811 74.8679V41.6509H67.6085V74.8679C67.6085 76.2547 68.7311 77.5645 70.9764 78.7972C72.6274 79.7217 74.3443 80.3711 76.1274 80.7453C77.8223 81.1195 79.5833 81.3066 81.4104 81.3066C83.2814 81.3066 85.0755 81.1195 86.7925 80.7453C88.5314 80.3711 90.2264 79.7217 91.8774 78.7972C94.1006 77.5645 95.2123 76.2547 95.2123 74.8679V41.6509H102.906V74.8679ZM189.283 74.8679C189.283 77.9717 187.951 80.7453 185.288 83.1887C183.064 85.1918 180.28 86.6997 176.934 87.7123C174.072 88.5708 171.024 89 167.788 89C160.259 89 154.382 87.0189 150.156 83.0566C145.929 87.0189 140.063 89 132.557 89C129.321 89 126.283 88.5708 123.443 87.7123C120.097 86.6997 117.302 85.1918 115.057 83.1887C112.393 80.7453 111.061 77.9717 111.061 74.8679V41.6509H118.755V74.8679C118.755 76.2547 119.866 77.5645 122.09 78.7972C123.741 79.7217 125.447 80.3711 127.208 80.7453C128.903 81.1195 130.686 81.3066 132.557 81.3066C134.384 81.3066 136.145 81.1195 137.84 80.7453C139.623 80.3711 141.34 79.7217 142.991 78.7972C145.236 77.5645 146.358 76.2547 146.358 74.8679V41.6509H153.986V74.8679C153.986 76.2547 155.108 77.5645 157.354 78.7972C159.005 79.7217 160.722 80.3711 162.505 80.7453C164.2 81.1195 165.961 81.3066 167.788 81.3066C169.659 81.3066 171.453 81.1195 173.17 80.7453C174.909 80.3711 176.604 79.7217 178.255 78.7972C180.478 77.5645 181.59 76.2547 181.59 74.8679V41.6509H189.283V74.8679Z\" fill=\"white\"/>\n </svg>\n </div>\n \n <div style=\"font-size: 17px; font-weight: 500; text-align: center; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; color: white; letter-spacing: 0.5px; max-width: 280px;\">${text}</div>\n \n <div style=\"display: flex; gap: 10px; margin-top: 4px;\">\n <div style=\"width: 10px; height: 10px; border-radius: 50%; background: #333333; animation: ww-dot-bounce 1.4s ease-in-out infinite;\"></div>\n <div style=\"width: 10px; height: 10px; border-radius: 50%; background: #333333; animation: ww-dot-bounce 1.4s ease-in-out 0.2s infinite;\"></div>\n <div style=\"width: 10px; height: 10px; border-radius: 50%; background: #333333; animation: ww-dot-bounce 1.4s ease-in-out 0.4s infinite;\"></div>\n </div>\n </div>\n `;\n\n\treturn overlay;\n}\n\nexport function showProductLoading(\n\tcontainer: HTMLElement,\n\ttext: string = \"Generating virtual try-on...\",\n): void {\n\tconst existingOverlay = container.querySelector(\".ww-loading-overlay\");\n\tif (existingOverlay) {\n\t\tconst textElement = existingOverlay.querySelector(\n\t\t\t'div[style*=\"font-size: 17px\"]',\n\t\t);\n\t\tif (textElement) {\n\t\t\ttextElement.textContent = text;\n\t\t}\n\t\treturn;\n\t}\n\n\tconst computedStyle = window.getComputedStyle(container);\n\tif (computedStyle.position === \"static\") {\n\t\tcontainer.style.position = \"relative\";\n\t}\n\n\tconst loadingOverlay = createLoadingOverlay(text);\n\tcontainer.appendChild(loadingOverlay);\n}\n\nexport function removeProductLoading(container: HTMLElement): void {\n\tconst existingOverlay = container.querySelector(\".ww-loading-overlay\");\n\tif (existingOverlay) {\n\t\texistingOverlay.remove();\n\t}\n}\n","export function createStatusBadge(message: string): HTMLElement {\n\tconst badge = document.createElement(\"div\");\n\tbadge.className = \"ww-status-badge\";\n\n\tbadge.style.cssText = `\n\t\tposition: absolute;\n\t\tbottom: 16px;\n\t\tleft: 50%;\n\t\ttransform: translateX(-50%);\n\t\tbackground: linear-gradient(135deg, rgba(0, 0, 0, 0.92) 0%, rgba(0, 0, 0, 0.88) 100%);\n\t\tbackdrop-filter: blur(12px);\n\t\t-webkit-backdrop-filter: blur(12px);\n\t\tcolor: white;\n\t\tpadding: 12px 24px;\n\t\tborder-radius: 24px;\n\t\tfont-size: 14px;\n\t\tfont-weight: 500;\n\t\tfont-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n\t\tbox-shadow: 0 4px 16px rgba(0, 0, 0, 0.3), 0 2px 8px rgba(0, 0, 0, 0.2);\n\t\tz-index: 1000;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 10px;\n\t\tanimation: ww-badge-fade-in 0.3s ease;\n\t\tletter-spacing: 0.3px;\n\t`;\n\n\tif (!document.getElementById(\"ww-status-badge-animation\")) {\n\t\tconst style = document.createElement(\"style\");\n\t\tstyle.id = \"ww-status-badge-animation\";\n\t\tstyle.textContent = `\n\t\t\t@keyframes ww-badge-fade-in {\n\t\t\t\tfrom { opacity: 0; transform: translateX(-50%) translateY(-10px); }\n\t\t\t\tto { opacity: 1; transform: translateX(-50%) translateY(0); }\n\t\t\t}\n\t\t\t\n\t\t\t@keyframes ww-badge-pulse {\n\t\t\t\t0%, 100% { opacity: 0.6; }\n\t\t\t\t50% { opacity: 1; }\n\t\t\t}\n\t\t`;\n\t\tdocument.head.appendChild(style);\n\t}\n\n\tbadge.innerHTML = `\n\t\t<div style=\"display: flex; gap: 4px;\">\n\t\t\t<div style=\"width: 6px; height: 6px; border-radius: 50%; background: white; animation: ww-badge-pulse 1.4s ease-in-out infinite;\"></div>\n\t\t\t<div style=\"width: 6px; height: 6px; border-radius: 50%; background: white; animation: ww-badge-pulse 1.4s ease-in-out 0.2s infinite;\"></div>\n\t\t\t<div style=\"width: 6px; height: 6px; border-radius: 50%; background: white; animation: ww-badge-pulse 1.4s ease-in-out 0.4s infinite;\"></div>\n\t\t</div>\n\t\t<span>${message}</span>\n\t`;\n\n\treturn badge;\n}\n\nexport function showStatusBadge(container: HTMLElement, message: string): void {\n\tconst existingBadge = container.querySelector(\".ww-status-badge\");\n\tif (existingBadge) {\n\t\tconst textElement = existingBadge.querySelector(\"span\");\n\t\tif (textElement) {\n\t\t\ttextElement.textContent = message;\n\t\t}\n\t\treturn;\n\t}\n\n\tconst badge = createStatusBadge(message);\n\tcontainer.appendChild(badge);\n}\n\nexport function removeStatusBadge(container: HTMLElement): void {\n\tconst badge = container.querySelector(\".ww-status-badge\");\n\tif (badge) {\n\t\tbadge.remove();\n\t}\n}\n","import {\n\tcreateButton,\n\tcreateButtonContainer,\n\tremoveProductLoading,\n\tremoveStatusBadge,\n\tshowProductLoading,\n\tshowStatusBadge,\n} from \"./components/index.js\";\nimport { CSS_CLASSES } from \"./constants.js\";\nimport type { VirtualTryOnConfig } from \"./index.js\";\n\ntype JobStatus = \"PENDING\" | \"COMPLETED\" | \"FAILED\";\n\ninterface JobStatusResponse {\n\tstatus: JobStatus;\n\tmessage: string;\n}\n\ninterface VtoDataResponse {\n\tgemini_model?: string;\n\timages?: string[];\n\tadditional_prompt?: string;\n}\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 originalProductImageUrl: 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 modalElement: HTMLElement | null = null;\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}\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\tif (!this.originalProductImageUrl) {\n\t\t\t\tthis.originalProductImageUrl = this.originalProductImages[0];\n\t\t\t}\n\n\t\t\tconst photoUploadUrl = new URL(`${this.config.baseUrl}`);\n\t\t\tphotoUploadUrl.searchParams.append(\n\t\t\t\t\"ww_product_images\",\n\t\t\t\tthis.originalProductImages.join(\",\"),\n\t\t\t);\n\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 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): void {\n\t\tthis.closeModal();\n\t\tVirtualTryOnWidget.activeWidgetId = this.instanceId;\n\n\t\tconst modal = document.createElement(\"div\");\n\t\tmodal.className = CSS_CLASSES.MODAL;\n\t\tmodal.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.8);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 999999999;\n animation: ww-modal-fade-in 0.3s ease;\n `;\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 width: 100%;\n height: 100%;\n border: none;\n `;\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 position: absolute;\n top: -48px;\n right: 0;\n background: rgba(255, 255, 255, 0.95);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n border: none;\n border-radius: 50%;\n width: 40px;\n height: 40px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #1f2937;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n `;\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(() => this.closeModal(), 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\tprivate closeModal(): void {\n\t\tif (this.modalElement) {\n\t\t\tthis.modalElement.remove();\n\t\t\tthis.modalElement = null;\n\t\t}\n\t\tif (VirtualTryOnWidget.activeWidgetId === this.instanceId) {\n\t\t\tVirtualTryOnWidget.activeWidgetId = null;\n\t\t}\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_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.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 modal = document.querySelector(`.${CSS_CLASSES.MODAL}`);\n\t\tif (modal && modal instanceof HTMLElement) {\n\t\t\tmodal.style.display = \"none\";\n\t\t}\n\t\tconst container = this.getContainer();\n\t\tif (container) {\n\t\t\tshowProductLoading(container, \"Preparing your personalized look\");\n\t\t}\n\n\t\ttry {\n\t\t\tconst submitResponse = await this.callVtoApi(\n\t\t\t\tthis.lastModelImage,\n\t\t\t\tthis.originalProductImages,\n\t\t\t);\n\n\t\t\tlet status = await this.fetchJobStatus(submitResponse.job_id);\n\n\t\t\twhile (status.status !== \"COMPLETED\" && status.status !== \"FAILED\") {\n\t\t\t\tif (container instanceof HTMLElement) {\n\t\t\t\t\tconst statusMessage = \"Preparing your personalized look\";\n\t\t\t\t\tshowProductLoading(container, statusMessage);\n\t\t\t\t}\n\n\t\t\t\tawait new Promise((r) => setTimeout(r, 3000));\n\t\t\t\tstatus = await this.fetchJobStatus(submitResponse.job_id);\n\t\t\t}\n\n\t\t\tif (status.status === \"COMPLETED\") {\n\t\t\t\tconst finalImage = await this.fetchJobImage(submitResponse.job_id);\n\t\t\t\tif (finalImage) {\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\tremoveStatusBadge(container);\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\tif (container instanceof HTMLElement) {\n\t\t\t\t\tshowStatusBadge(\n\t\t\t\t\t\tcontainer,\n\t\t\t\t\t\t\"We are experiencing some technical issues and apologise for any inconvenience caused. Please come back later again\",\n\t\t\t\t\t);\n\t\t\t\t}\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\tif (container instanceof HTMLElement) {\n\t\t\t\tshowProductLoading(\n\t\t\t\t\tcontainer,\n\t\t\t\t\t\"We are experiencing technical issues and apologise for any inconvenience caused. Please come back later again\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait new Promise((r) => setTimeout(r, 5000));\n\t\t} finally {\n\t\t\tif (container instanceof HTMLElement) {\n\t\t\t\tremoveProductLoading(container);\n\t\t\t\tremoveStatusBadge(container);\n\t\t\t\tthis.showButtonContainer(container);\n\t\t\t}\n\t\t\tthis.closeModal();\n\t\t}\n\t}\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.config.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\tprivate async callVtoApi(\n\t\tmodelImage: Blob,\n\t\tproductImages: string[],\n\t): Promise<{ job_id: string }> {\n\t\tconst outfitID = this.config.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\", this.config.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.config.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\tprivate async fetchJobStatus(jobId: string): Promise<JobStatusResponse> {\n\t\tconst res = await fetch(\n\t\t\t`${this.config.baseUrl}/api/vto/status?job_id=${jobId}`,\n\t\t);\n\t\tif (!res.ok) throw new Error(`Status check failed: ${res.status}`);\n\t\treturn res.json();\n\t}\n\n\tprivate async fetchJobImage(jobId: string): Promise<string> {\n\t\tconst url = `${this.config.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\tprivate async refreshVirtualTryOn(): Promise<void> {\n\t\tawait this.startVirtualTryOn(true);\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.refreshVirtualTryOn();\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\tremoveProductLoading(container);\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.originalProductImageUrl = 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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"}
package/dist/widget.d.ts CHANGED
@@ -21,6 +21,7 @@ export declare class VirtualTryOnWidget {
21
21
  private closeModal;
22
22
  private setupIframeListener;
23
23
  private startVirtualTryOn;
24
+ private fetchVtoData;
24
25
  private callVtoApi;
25
26
  private fetchJobStatus;
26
27
  private fetchJobImage;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wewear/virtual-try-on",
3
- "version": "1.4.28",
3
+ "version": "1.4.30",
4
4
  "description": "Virtual Try-On widget for e-commerce integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",