@wewear/virtual-try-on 2.0.5 → 3.1.0

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.
@@ -1,2 +1,2 @@
1
- export declare function createButtonContainer(buttonPosition: string, hasVirtualTryOn: boolean | undefined, onCameraClick: () => void, onRefreshClick?: () => void, onToggleClick?: () => void, isShowingVirtualTryOn?: boolean): HTMLElement;
1
+ export declare function createButtonContainer(buttonPosition: string, hasVirtualTryOn: boolean | undefined, onCameraClick: () => void, onRefreshClick?: () => void, onToggleClick?: () => void, isShowingVirtualTryOn?: boolean, onSaveClick?: () => void, onShareClick?: () => void): HTMLElement;
2
2
  export declare function createButton(buttonPosition: string, onClick: () => void, disabled?: boolean): HTMLElement;
package/dist/index.esm.js CHANGED
@@ -42,6 +42,22 @@ const REFRESH_ICON = `
42
42
  <path d="M16 16h5v5"></path>
43
43
  </svg>
44
44
  `;
45
+ const SAVE_ICON = `
46
+ <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;">
47
+ <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path>
48
+ <polyline points="7 10 12 15 17 10"></polyline>
49
+ <line x1="12" y1="15" x2="12" y2="3"></line>
50
+ </svg>
51
+ `;
52
+ const SHARE_ICON = `
53
+ <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;">
54
+ <circle cx="18" cy="5" r="3"></circle>
55
+ <circle cx="6" cy="12" r="3"></circle>
56
+ <circle cx="18" cy="19" r="3"></circle>
57
+ <line x1="8.59" y1="13.51" x2="15.42" y2="17.49"></line>
58
+ <line x1="15.41" y1="6.51" x2="8.59" y2="10.49"></line>
59
+ </svg>
60
+ `;
45
61
  const CONTAINER_STYLE = `
46
62
  position: absolute;
47
63
  display: flex;
@@ -70,6 +86,10 @@ const PRIMARY_STYLE = `${ICON_BUTTON_STYLE}
70
86
  background: white;
71
87
  color: #000000;
72
88
  `;
89
+ const CAMERA_HIGHLIGHT_STYLE = `${ICON_BUTTON_STYLE}
90
+ background: white;
91
+ color: #333333;
92
+ `;
73
93
  function createIconButton(className, ariaLabel, iconHtml, styleCss, onClick) {
74
94
  const button = document.createElement("button");
75
95
  button.type = "button";
@@ -80,13 +100,18 @@ function createIconButton(className, ariaLabel, iconHtml, styleCss, onClick) {
80
100
  button.onclick = onClick;
81
101
  return button;
82
102
  }
83
- function createButtonContainer(buttonPosition, hasVirtualTryOn = false, onCameraClick, onRefreshClick, onToggleClick, isShowingVirtualTryOn = false) {
103
+ function createButtonContainer(buttonPosition, hasVirtualTryOn = false, onCameraClick, onRefreshClick, onToggleClick, isShowingVirtualTryOn = false, onSaveClick, onShareClick) {
84
104
  const container = document.createElement("div");
85
105
  container.className = `${CSS_CLASSES.BUTTON_CONTAINER} ww-button-group`;
86
- const positionStyles = getPositionStyles(buttonPosition);
87
- container.style.cssText = `${CONTAINER_STYLE} ${positionStyles}`;
106
+ const positionStyles = hasVirtualTryOn
107
+ ? "right: 20px; top: 20px;"
108
+ : getPositionStyles(buttonPosition);
109
+ const directionStyles = hasVirtualTryOn
110
+ ? "flex-direction: column;"
111
+ : "flex-direction: row;";
112
+ container.style.cssText = `${CONTAINER_STYLE} ${positionStyles} ${directionStyles}`;
88
113
  const cameraButton = hasVirtualTryOn
89
- ? createIconButton(`${CSS_CLASSES.BUTTON} ww-camera-btn`, "Virtual Try-On", CAMERA_ICON, PRIMARY_STYLE, onCameraClick)
114
+ ? createIconButton(`${CSS_CLASSES.BUTTON} ww-camera-btn`, "Virtual Try-On", CAMERA_ICON, CAMERA_HIGHLIGHT_STYLE, onCameraClick)
90
115
  : createIconButton(`${CSS_CLASSES.BUTTON} ww-camera-btn`, "Virtual Try-On", `${SPARKLES_ICON}<span style="display: block;">TRY THIS LOOK</span>`, `${PRIMARY_STYLE}
91
116
  padding: 10px 16px;
92
117
  gap: 8px;
@@ -96,6 +121,20 @@ function createButtonContainer(buttonPosition, hasVirtualTryOn = false, onCamera
96
121
  width: auto;
97
122
  height: auto;
98
123
  `, onCameraClick);
124
+ if (hasVirtualTryOn && onSaveClick) {
125
+ const saveButton = createIconButton("ww-save-btn", "Save virtual try-on image", SAVE_ICON, `${ICON_BUTTON_STYLE}
126
+ background: white;
127
+ color: #333333;
128
+ `, onSaveClick);
129
+ container.appendChild(saveButton);
130
+ }
131
+ if (hasVirtualTryOn && onShareClick) {
132
+ const shareButton = createIconButton("ww-share-btn", "Share virtual try-on image", SHARE_ICON, `${ICON_BUTTON_STYLE}
133
+ background: white;
134
+ color: #333333;
135
+ `, onShareClick);
136
+ container.appendChild(shareButton);
137
+ }
99
138
  container.appendChild(cameraButton);
100
139
  if (hasVirtualTryOn) {
101
140
  if (onRefreshClick) {
@@ -519,6 +558,78 @@ class VirtualTryOnWidget {
519
558
  autoSubmit: true,
520
559
  });
521
560
  }
561
+ async handleSaveClick() {
562
+ if (!this.virtualTryOnImageUrl) {
563
+ console.warn("[WeWear VTO] No virtual try-on image available to save.");
564
+ return;
565
+ }
566
+ try {
567
+ const response = await fetch(this.virtualTryOnImageUrl);
568
+ const imageBlob = await response.blob();
569
+ const objectUrl = URL.createObjectURL(imageBlob);
570
+ const link = document.createElement("a");
571
+ link.href = objectUrl;
572
+ link.download = `wewear-vto-${Date.now()}.png`;
573
+ document.body.appendChild(link);
574
+ link.click();
575
+ link.remove();
576
+ URL.revokeObjectURL(objectUrl);
577
+ }
578
+ catch (error) {
579
+ console.error("[WeWear VTO] Failed to save virtual try-on image:", error);
580
+ window.open(this.virtualTryOnImageUrl, "_blank");
581
+ }
582
+ }
583
+ async handleShareClick() {
584
+ var _a;
585
+ if (!this.virtualTryOnImageUrl) {
586
+ console.warn("[WeWear VTO] No virtual try-on image available to share.");
587
+ return;
588
+ }
589
+ const shareUrl = this.virtualTryOnImageUrl;
590
+ try {
591
+ if (navigator.share && navigator.canShare) {
592
+ const response = await fetch(shareUrl);
593
+ const imageBlob = await response.blob();
594
+ const imageFile = new File([imageBlob], "wewear-vto.png", {
595
+ type: imageBlob.type || "image/png",
596
+ });
597
+ if (navigator.canShare({ files: [imageFile] })) {
598
+ await navigator.share({
599
+ title: "My virtual try-on look",
600
+ text: "Check out my virtual try-on look.",
601
+ files: [imageFile],
602
+ });
603
+ return;
604
+ }
605
+ }
606
+ if (navigator.share) {
607
+ await navigator.share({
608
+ title: "My virtual try-on look",
609
+ text: "Check out my virtual try-on look.",
610
+ url: shareUrl,
611
+ });
612
+ return;
613
+ }
614
+ }
615
+ catch (error) {
616
+ console.error("[WeWear VTO] Native share failed:", error);
617
+ }
618
+ try {
619
+ if ((_a = navigator.clipboard) === null || _a === void 0 ? void 0 : _a.writeText) {
620
+ await navigator.clipboard.writeText(shareUrl);
621
+ window.alert("Virtual try-on link copied. You can paste it to share.");
622
+ return;
623
+ }
624
+ }
625
+ catch (error) {
626
+ console.error("[WeWear VTO] Clipboard copy failed:", error);
627
+ }
628
+ const newWindow = window.open(shareUrl, "_blank");
629
+ if (!newWindow) {
630
+ window.prompt("Copy this link to share your virtual try-on:", shareUrl);
631
+ }
632
+ }
522
633
  buildPhotoUploadUrl(productImages, options) {
523
634
  var _a;
524
635
  const photoUploadUrl = new URL(`${this.config.baseUrl}`);
@@ -565,6 +676,70 @@ class VirtualTryOnWidget {
565
676
  VirtualTryOnWidget.activeWidgetId = null;
566
677
  }
567
678
  }
679
+ showErrorToast(message) {
680
+ const existingToast = document.getElementById("ww-vto-error-toast");
681
+ if (existingToast) {
682
+ existingToast.remove();
683
+ }
684
+ const toast = document.createElement("div");
685
+ toast.id = "ww-vto-error-toast";
686
+ toast.setAttribute("role", "status");
687
+ toast.setAttribute("aria-live", "polite");
688
+ toast.style.cssText = `
689
+ position: fixed;
690
+ left: 50%;
691
+ bottom: 24px;
692
+ transform: translateX(-50%);
693
+ z-index: 2147483647;
694
+ max-width: min(92vw, 460px);
695
+ padding: 12px 14px;
696
+ border-radius: 12px;
697
+ background: #ffffff;
698
+ color: #111827;
699
+ border: 1px solid #e5e7eb;
700
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif;
701
+ font-size: 14px;
702
+ line-height: 1.35;
703
+ box-shadow: 0 10px 32px rgba(0, 0, 0, 0.16);
704
+ opacity: 0;
705
+ transition: opacity 180ms ease;
706
+ `;
707
+ const content = document.createElement("div");
708
+ content.style.cssText = `
709
+ display: flex;
710
+ align-items: flex-start;
711
+ gap: 10px;
712
+ `;
713
+ const text = document.createElement("div");
714
+ text.style.cssText = "flex: 1;";
715
+ text.textContent = message;
716
+ const closeButton = document.createElement("button");
717
+ closeButton.type = "button";
718
+ closeButton.setAttribute("aria-label", "Close message");
719
+ closeButton.textContent = "Close";
720
+ closeButton.style.cssText = `
721
+ border: none;
722
+ background: transparent;
723
+ color: #111827;
724
+ font-size: 12px;
725
+ font-weight: 600;
726
+ cursor: pointer;
727
+ padding: 0;
728
+ line-height: 1.2;
729
+ white-space: nowrap;
730
+ `;
731
+ closeButton.onclick = () => {
732
+ toast.style.opacity = "0";
733
+ window.setTimeout(() => toast.remove(), 220);
734
+ };
735
+ content.appendChild(text);
736
+ content.appendChild(closeButton);
737
+ toast.appendChild(content);
738
+ document.body.appendChild(toast);
739
+ requestAnimationFrame(() => {
740
+ toast.style.opacity = "1";
741
+ });
742
+ }
568
743
  sendPendingPrefillToModal() {
569
744
  this.modal.sendPendingPrefillToModal();
570
745
  }
@@ -622,6 +797,7 @@ class VirtualTryOnWidget {
622
797
  });
623
798
  }
624
799
  const container = this.getContainer();
800
+ let shouldShowErrorToast = false;
625
801
  try {
626
802
  const submitResponse = await this.vtoApiClient.submitTryOn(this.lastModelImage, this.preparedTryOnData.productImages, {
627
803
  modelTier: this.config.modelTier,
@@ -645,18 +821,22 @@ class VirtualTryOnWidget {
645
821
  }
646
822
  if (status.status === "FAILED") {
647
823
  console.error("[WeWear VTO] VTO process failed:", status.message);
648
- await new Promise((r) => setTimeout(r, 5000));
824
+ shouldShowErrorToast = true;
649
825
  }
650
826
  }
651
827
  catch (error) {
652
828
  console.error("[WeWear VTO] Error during virtual try-on process:", error);
653
- await new Promise((r) => setTimeout(r, 5000));
829
+ shouldShowErrorToast = true;
654
830
  }
655
831
  finally {
656
832
  this.postMessageToModal("VTO_SCAN_STOP");
657
833
  if (container instanceof HTMLElement) {
658
834
  this.showButtonContainer(container);
659
835
  }
836
+ if (shouldShowErrorToast) {
837
+ this.showErrorToast(VirtualTryOnWidget.ERROR_TOAST_MESSAGE);
838
+ await new Promise((r) => setTimeout(r, 500));
839
+ }
660
840
  this.closeModal();
661
841
  }
662
842
  }
@@ -724,7 +904,11 @@ class VirtualTryOnWidget {
724
904
  this.showVirtualTryOnImage(container);
725
905
  }
726
906
  this.updateButtonContainer(container);
727
- }, this.isShowingVirtualTryOn);
907
+ }, this.isShowingVirtualTryOn, async () => {
908
+ await this.handleSaveClick();
909
+ }, async () => {
910
+ await this.handleShareClick();
911
+ });
728
912
  container.appendChild(buttonContainer);
729
913
  }
730
914
  showVirtualTryOnImage(container) {
@@ -815,6 +999,7 @@ class VirtualTryOnWidget {
815
999
  }
816
1000
  VirtualTryOnWidget.instanceCounter = 0;
817
1001
  VirtualTryOnWidget.activeWidgetId = null;
1002
+ VirtualTryOnWidget.ERROR_TOAST_MESSAGE = "Virtual try-on is temporarily unavailable due to high traffic on Google services. Please try again in a moment.";
818
1003
 
819
1004
  let widgetInstances = [];
820
1005
  function initVirtualTryOn(config) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/constants.ts","../src/utils.ts","../src/components/button.ts","../src/widget/modal-manager.ts","../src/widget/vto-api-client.ts","../src/widget.ts","../src/installer.ts"],"sourcesContent":["export const CSS_CLASSES = {\n\tBUTTON_CONTAINER: \"wewear-vto-button-container\",\n\tBUTTON: \"wewear-vto-button\",\n\tMODAL: \"wewear-vto-modal\",\n};\n\nexport const Z_INDEX = {\n\tBUTTON: 10,\n};\n","export function getPositionStyles(position: string): string {\n\tswitch (position) {\n\t\tcase \"bottom-left\":\n\t\t\treturn \"left: 20px; bottom: 20px;\";\n\t\tcase \"top-right\":\n\t\t\treturn \"right: 20px; top: 20px;\";\n\t\tcase \"top-left\":\n\t\t\treturn \"left: 20px; top: 20px;\";\n\t\tdefault:\n\t\t\treturn \"right: 20px; bottom: 20px;\";\n\t}\n}\n","import { CSS_CLASSES, Z_INDEX } from \"../constants.js\";\nimport { getPositionStyles } from \"../utils.js\";\n\nconst CAMERA_ICON = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display: block;\">\n\t\t<path d=\"M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z\"></path>\n\t\t<circle cx=\"12\" cy=\"13\" r=\"3\"></circle>\n\t</svg>\n`;\n\nconst SPARKLES_ICON = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display: block; flex-shrink: 0;\">\n\t\t<path d=\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\"/>\n\t\t<path d=\"M20 2v4\"/>\n\t\t<path d=\"M22 4h-4\"/>\n\t\t<circle cx=\"4\" cy=\"20\" r=\"2\"/>\n\t</svg>\n`;\n\nconst REFRESH_ICON = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display: block;\">\n\t\t<path d=\"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"></path>\n\t\t<path d=\"M3 3v5h5\"></path>\n\t\t<path d=\"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16\"></path>\n\t\t<path d=\"M16 16h5v5\"></path>\n\t</svg>\n`;\n\nconst CONTAINER_STYLE = `\n\tposition: absolute;\n\tdisplay: flex;\n\tgap: 4px;\n\tborder-radius: 100px;\n\tbackground: white;\n\tpadding: 4px;\n\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n\tz-index: ${Z_INDEX.BUTTON};\n\ttransition: all 0.2s ease;\n`;\n\nconst ICON_BUTTON_STYLE = `\n\tdisplay: flex;\n\twidth: 40px;\n\theight: 40px;\n\tcursor: pointer;\n\talign-items: center;\n\tjustify-content: center;\n\tborder-radius: 100px;\n\tpadding: 0;\n\tborder: none;\n\ttransition: all 0.2s ease;\n\tflex-shrink: 0;\n`;\n\nconst PRIMARY_STYLE = `${ICON_BUTTON_STYLE}\n\tbackground: white;\n\tcolor: #000000;\n`;\n\nfunction createIconButton(\n\tclassName: string,\n\tariaLabel: string,\n\ticonHtml: string,\n\tstyleCss: string,\n\tonClick: () => void,\n): HTMLButtonElement {\n\tconst button = document.createElement(\"button\");\n\tbutton.type = \"button\";\n\tbutton.className = className;\n\tbutton.setAttribute(\"aria-label\", ariaLabel);\n\tbutton.style.cssText = styleCss;\n\tbutton.innerHTML = iconHtml;\n\tbutton.onclick = onClick;\n\treturn button;\n}\n\nexport function createButtonContainer(\n\tbuttonPosition: string,\n\thasVirtualTryOn: boolean = false,\n\tonCameraClick: () => void,\n\tonRefreshClick?: () => void,\n\tonToggleClick?: () => void,\n\tisShowingVirtualTryOn: boolean = false,\n): HTMLElement {\n\tconst container = document.createElement(\"div\");\n\tcontainer.className = `${CSS_CLASSES.BUTTON_CONTAINER} ww-button-group`;\n\n\tconst positionStyles = getPositionStyles(buttonPosition);\n\tcontainer.style.cssText = `${CONTAINER_STYLE} ${positionStyles}`;\n\n\tconst cameraButton = hasVirtualTryOn\n\t\t? createIconButton(\n\t\t\t\t`${CSS_CLASSES.BUTTON} ww-camera-btn`,\n\t\t\t\t\"Virtual Try-On\",\n\t\t\t\tCAMERA_ICON,\n\t\t\t\tPRIMARY_STYLE,\n\t\t\t\tonCameraClick,\n\t\t\t)\n\t\t: createIconButton(\n\t\t\t\t`${CSS_CLASSES.BUTTON} ww-camera-btn`,\n\t\t\t\t\"Virtual Try-On\",\n\t\t\t\t`${SPARKLES_ICON}<span style=\"display: block;\">TRY THIS LOOK</span>`,\n\t\t\t\t`${PRIMARY_STYLE}\n\t\t\t\t\tpadding: 10px 16px;\n\t\t\t\t\tgap: 8px;\n\t\t\t\t\tfont-size: 14px;\n\t\t\t\t\tfont-weight: 600;\n\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\twidth: auto;\n\t\t\t\t\theight: auto;\n\t\t\t\t`,\n\t\t\t\tonCameraClick,\n\t\t\t);\n\tcontainer.appendChild(cameraButton);\n\n\tif (hasVirtualTryOn) {\n\t\tif (onRefreshClick) {\n\t\t\tconst refreshButton = createIconButton(\n\t\t\t\t\"ww-refresh-btn\",\n\t\t\t\t\"Refresh virtual try-on\",\n\t\t\t\tREFRESH_ICON,\n\t\t\t\t`${ICON_BUTTON_STYLE}\n\t\t\t\t\tbackground: white;\n\t\t\t\t\tcolor: #333333;\n\t\t\t\t`,\n\t\t\t\tonRefreshClick,\n\t\t\t);\n\t\t\tcontainer.appendChild(refreshButton);\n\t\t}\n\n\t\tif (onToggleClick) {\n\t\t\tconst toggleButton = createIconButton(\n\t\t\t\t\"ww-toggle-btn\",\n\t\t\t\tisShowingVirtualTryOn ? \"Show Original Image\" : \"Show Virtual Try-On\",\n\t\t\t\tSPARKLES_ICON,\n\t\t\t\t`${ICON_BUTTON_STYLE}\n\t\t\t\t\tbackground: ${isShowingVirtualTryOn ? \"#333333\" : \"#e5e7eb\"};\n\t\t\t\t\tcolor: ${isShowingVirtualTryOn ? \"white\" : \"#333333\"};\n\t\t\t\t`,\n\t\t\t\tonToggleClick,\n\t\t\t);\n\n\t\t\ttoggleButton.onmouseover = () => {\n\t\t\t\tif (isShowingVirtualTryOn) {\n\t\t\t\t\ttoggleButton.style.background = \"#4a4a4a\";\n\t\t\t\t} else {\n\t\t\t\t\ttoggleButton.style.background = \"#d1d5db\";\n\t\t\t\t}\n\t\t\t};\n\t\t\ttoggleButton.onmouseout = () => {\n\t\t\t\tif (isShowingVirtualTryOn) {\n\t\t\t\t\ttoggleButton.style.background = \"#333333\";\n\t\t\t\t} else {\n\t\t\t\t\ttoggleButton.style.background = \"#e5e7eb\";\n\t\t\t\t}\n\t\t\t};\n\n\t\t\ttoggleButton.onclick = onToggleClick;\n\t\t\tcontainer.appendChild(toggleButton);\n\t\t}\n\t}\n\n\treturn container;\n}\n\nexport function createButton(\n\tbuttonPosition: string,\n\tonClick: () => void,\n\tdisabled: boolean = false,\n): HTMLElement {\n\tconst container = createButtonContainer(buttonPosition, false, onClick);\n\tconst cameraButton = container.querySelector(\n\t\t\".ww-camera-btn\",\n\t) as HTMLButtonElement;\n\tif (cameraButton) {\n\t\tcameraButton.disabled = disabled;\n\t\tif (disabled) {\n\t\t\tcameraButton.style.opacity = \"0.5\";\n\t\t\tcameraButton.style.cursor = \"not-allowed\";\n\t\t\tcameraButton.title = \"Find your ideal size first\";\n\t\t}\n\t}\n\treturn container;\n}\n","import { CSS_CLASSES } from \"../constants.js\";\n\nexport type ModalControlMessageType =\n\t| \"VTO_SCAN_START\"\n\t| \"VTO_SCAN_STOP\"\n\t| \"VTO_SCAN_COMPLETE\";\n\nexport interface ModalOpenOptions {\n\tprefillImage?: Blob;\n\tautoSubmit?: boolean;\n}\n\ninterface PendingModalPrefill {\n\timage: Blob;\n\tautoSubmit: boolean;\n}\n\nexport class ModalManager {\n\tprivate modalElement: HTMLElement | null = null;\n\tprivate pendingModalPrefill: PendingModalPrefill | null = null;\n\tprivate modalOrigin: string;\n\n\tconstructor(baseUrl: string) {\n\t\tthis.modalOrigin = new URL(baseUrl).origin;\n\t}\n\n\topen(\n\t\turl: string,\n\t\toptions: ModalOpenOptions | undefined,\n\t\tonClose: () => void,\n\t) {\n\t\tthis.close();\n\t\tthis.modalOrigin = new URL(url).origin;\n\t\tthis.pendingModalPrefill = options?.prefillImage\n\t\t\t? {\n\t\t\t\t\timage: options.prefillImage,\n\t\t\t\t\tautoSubmit: options.autoSubmit === true,\n\t\t\t\t}\n\t\t\t: null;\n\n\t\tconst modal = document.createElement(\"div\");\n\t\tmodal.className = CSS_CLASSES.MODAL;\n\t\tmodal.style.cssText = `\n\t\t\tposition: fixed;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\tbottom: 0;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tbackground-color: rgba(0, 0, 0, 0.8);\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: center;\n\t\t\talign-items: center;\n\t\t\tz-index: 999999999;\n\t\t\tanimation: ww-modal-fade-in 0.3s ease;\n\t\t`;\n\n\t\tif (!document.getElementById(\"ww-modal-animation\")) {\n\t\t\tconst style = document.createElement(\"style\");\n\t\t\tstyle.id = \"ww-modal-animation\";\n\t\t\tstyle.textContent = `\n\t\t\t\t@keyframes ww-modal-fade-in {\n\t\t\t\t\tfrom { opacity: 0; }\n\t\t\t\t\tto { opacity: 1; }\n\t\t\t\t}\n\t\t\t\t@keyframes ww-modal-scale-in {\n\t\t\t\t\tfrom { transform: scale(0.95); opacity: 0; }\n\t\t\t\t\tto { transform: scale(1); opacity: 1; }\n\t\t\t\t}\n\t\t\t`;\n\t\t\tdocument.head.appendChild(style);\n\t\t}\n\n\t\tconst iframeContainer = document.createElement(\"div\");\n\t\tiframeContainer.style.cssText = `\n\t\t\tposition: relative;\n\t\t\twidth: 90%;\n\t\t\theight: 90%;\n\t\t\tmax-width: 480px;\n\t\t\tmax-height: 720px;\n\t\t\tborder-radius: 20px;\n\t\t\toverflow: hidden;\n\t\t\tbox-shadow: 0 24px 48px rgba(0, 0, 0, 0.3), 0 12px 24px rgba(0, 0, 0, 0.2);\n\t\t\tanimation: ww-modal-scale-in 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n\t\t\tbackground: white;\n\t\t`;\n\n\t\tconst iframe = document.createElement(\"iframe\");\n\t\tiframe.src = url;\n\t\tiframe.style.cssText = `\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tborder: none;\n\t\t`;\n\n\t\tconst closeButton = document.createElement(\"button\");\n\t\tcloseButton.innerHTML = `\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n\t\t\t\t<line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n\t\t\t</svg>\n\t\t`;\n\t\tcloseButton.setAttribute(\"aria-label\", \"Close modal\");\n\t\tcloseButton.style.cssText = `\n\t\t\tposition: absolute;\n\t\t\ttop: -48px;\n\t\t\tright: 0;\n\t\t\tbackground: rgba(255, 255, 255, 0.95);\n\t\t\tbackdrop-filter: blur(8px);\n\t\t\t-webkit-backdrop-filter: blur(8px);\n\t\t\tborder: none;\n\t\t\tborder-radius: 50%;\n\t\t\twidth: 40px;\n\t\t\theight: 40px;\n\t\t\tcursor: pointer;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tcolor: #1f2937;\n\t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n\t\t\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n\t\t`;\n\t\tcloseButton.onmouseover = () => {\n\t\t\tcloseButton.style.transform = \"scale(1.1) rotate(90deg)\";\n\t\t\tcloseButton.style.background = \"#ef4444\";\n\t\t\tcloseButton.style.color = \"white\";\n\t\t};\n\t\tcloseButton.onmouseout = () => {\n\t\t\tcloseButton.style.transform = \"scale(1) rotate(0deg)\";\n\t\t\tcloseButton.style.background = \"rgba(255, 255, 255, 0.95)\";\n\t\t\tcloseButton.style.color = \"#1f2937\";\n\t\t};\n\t\tcloseButton.onclick = () => {\n\t\t\tmodal.style.opacity = \"0\";\n\t\t\tiframeContainer.style.transform = \"scale(0.95)\";\n\t\t\tiframeContainer.style.opacity = \"0\";\n\t\t\tsetTimeout(onClose, 300);\n\t\t};\n\n\t\tiframeContainer.appendChild(iframe);\n\t\tiframeContainer.appendChild(closeButton);\n\t\tmodal.appendChild(iframeContainer);\n\t\tdocument.body.appendChild(modal);\n\n\t\tmodal.onclick = (e) => {\n\t\t\tif (e.target === modal) {\n\t\t\t\tcloseButton.click();\n\t\t\t}\n\t\t};\n\n\t\tthis.modalElement = modal;\n\t}\n\n\tclose() {\n\t\tif (this.modalElement) {\n\t\t\tthis.modalElement.remove();\n\t\t\tthis.modalElement = null;\n\t\t}\n\t\tthis.pendingModalPrefill = null;\n\t}\n\n\tsendPendingPrefillToModal() {\n\t\tif (!this.pendingModalPrefill || !this.modalElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst iframe = this.modalElement.querySelector(\"iframe\");\n\t\tif (!(iframe instanceof HTMLIFrameElement) || !iframe.contentWindow) {\n\t\t\treturn;\n\t\t}\n\n\t\tiframe.contentWindow.postMessage(\n\t\t\t{\n\t\t\t\ttype: \"VTO_PREFILL_IMAGE\",\n\t\t\t\timage: this.pendingModalPrefill.image,\n\t\t\t\tautoSubmit: this.pendingModalPrefill.autoSubmit,\n\t\t\t},\n\t\t\tthis.modalOrigin,\n\t\t);\n\t\t// Fallback for production setups where iframe origin differs after redirects.\n\t\tiframe.contentWindow.postMessage(\n\t\t\t{\n\t\t\t\ttype: \"VTO_PREFILL_IMAGE\",\n\t\t\t\timage: this.pendingModalPrefill.image,\n\t\t\t\tautoSubmit: this.pendingModalPrefill.autoSubmit,\n\t\t\t},\n\t\t\t\"*\",\n\t\t);\n\t\tthis.pendingModalPrefill = null;\n\t}\n\n\tpostMessageToModal(type: ModalControlMessageType) {\n\t\tif (!this.modalElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst iframe = this.modalElement.querySelector(\"iframe\");\n\t\tif (!(iframe instanceof HTMLIFrameElement) || !iframe.contentWindow) {\n\t\t\treturn;\n\t\t}\n\n\t\tiframe.contentWindow.postMessage({ type }, this.modalOrigin);\n\t\t// Fallback for production setups where iframe origin differs after redirects.\n\t\tiframe.contentWindow.postMessage({ type }, \"*\");\n\t}\n}\n","export type JobStatus = \"PENDING\" | \"COMPLETED\" | \"FAILED\";\n\nexport interface JobStatusResponse {\n\tstatus: JobStatus;\n\tmessage: string;\n}\n\ninterface VtoDataResponse {\n\tgemini_model?: string;\n\timages?: string[];\n\tadditional_prompt?: string;\n\tis_image_visible?: boolean;\n}\n\ninterface SubmitTryOnOptions {\n\tmodelTier: string;\n\toutfitID: string;\n}\n\nexport interface PreparedTryOnData {\n\tmodelTier: string;\n\toutfitID: string;\n\tproductImages: string[];\n\tgeminiModel: string | null;\n\tadditionalPrompt: string | null;\n\tisImageVisible: boolean;\n}\n\nexport class VtoApiClient {\n\tconstructor(private readonly baseUrl: string) {}\n\n\tprivate async fetchVtoData(\n\t\toutfitId: string,\n\t): Promise<VtoDataResponse | null> {\n\t\ttry {\n\t\t\tconst vtoDataUrl = new URL(\"/api/vto/data\", this.baseUrl);\n\t\t\tvtoDataUrl.searchParams.set(\"outfit_id\", outfitId);\n\n\t\t\tconst response = await fetch(vtoDataUrl.toString());\n\t\t\tif (response.status === 404) return null;\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst errorText = await response.text();\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`[WeWear VTO] Failed to retrieve VTO data (${response.status}): ${errorText}`,\n\t\t\t\t);\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn (await response.json()) as VtoDataResponse;\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"[WeWear VTO] Error retrieving VTO data:\", error);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tasync submitTryOn(\n\t\tmodelImage: Blob,\n\t\tproductImages: string[],\n\t\toptions: SubmitTryOnOptions,\n\t\tpreparedData?: PreparedTryOnData,\n\t): Promise<{ job_id: string }> {\n\t\tconst resolved =\n\t\t\tpreparedData ?? (await this.prepareTryOnData(productImages, options));\n\n\t\tconst formData = new FormData();\n\t\tformData.append(\"model_image\", modelImage, \"model_image.png\");\n\t\tformData.append(\n\t\t\t\"product_image_urls\",\n\t\t\tJSON.stringify(resolved.productImages),\n\t\t);\n\t\tformData.append(\"page_url\", window.location.href);\n\t\tformData.append(\"model_tier\", resolved.modelTier);\n\t\tif (resolved.geminiModel)\n\t\t\tformData.append(\"gemini_model\", resolved.geminiModel);\n\t\tif (resolved.additionalPrompt) {\n\t\t\tformData.append(\"additional_prompt\", resolved.additionalPrompt);\n\t\t}\n\n\t\tif (resolved.outfitID) formData.append(\"outfit_id\", resolved.outfitID);\n\n\t\tconst res = await fetch(`${this.baseUrl}/api/vto`, {\n\t\t\tmethod: \"POST\",\n\t\t\tbody: formData,\n\t\t});\n\t\tif (!res.ok) {\n\t\t\tconst errorText = await res.text();\n\t\t\tconsole.error(\n\t\t\t\t\"[WeWear VTO] API submission failed:\",\n\t\t\t\tres.status,\n\t\t\t\terrorText,\n\t\t\t);\n\t\t\tthrow new Error(`API submission failed: ${res.status}`);\n\t\t}\n\t\treturn res.json();\n\t}\n\n\tasync prepareTryOnData(\n\t\tproductImages: string[],\n\t\toptions: SubmitTryOnOptions,\n\t): Promise<PreparedTryOnData> {\n\t\tconst outfitID = options.outfitID?.trim() ?? \"\";\n\t\tlet resolvedProductImages = productImages;\n\t\tlet resolvedGeminiModel: string | null = null;\n\t\tlet resolvedAdditionalPrompt: string | null = null;\n\t\tlet resolvedIsImageVisible = true;\n\n\t\tif (outfitID) {\n\t\t\tconst vtoData = await this.fetchVtoData(outfitID);\n\t\t\tif (vtoData) {\n\t\t\t\tif (Array.isArray(vtoData.images) && vtoData.images.length > 0) {\n\t\t\t\t\tresolvedProductImages = vtoData.images;\n\t\t\t\t}\n\t\t\t\tif (typeof vtoData.gemini_model === \"string\" && vtoData.gemini_model) {\n\t\t\t\t\tresolvedGeminiModel = vtoData.gemini_model;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\ttypeof vtoData.additional_prompt === \"string\" &&\n\t\t\t\t\tvtoData.additional_prompt\n\t\t\t\t) {\n\t\t\t\t\tresolvedAdditionalPrompt = vtoData.additional_prompt;\n\t\t\t\t}\n\t\t\t\tif (typeof vtoData.is_image_visible === \"boolean\") {\n\t\t\t\t\tresolvedIsImageVisible = vtoData.is_image_visible;\n\t\t\t\t}\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[WeWear VTO] Using stored VTO data for outfit_id=${outfitID}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tmodelTier: options.modelTier,\n\t\t\toutfitID,\n\t\t\tproductImages: resolvedProductImages,\n\t\t\tgeminiModel: resolvedGeminiModel,\n\t\t\tadditionalPrompt: resolvedAdditionalPrompt,\n\t\t\tisImageVisible: resolvedIsImageVisible,\n\t\t};\n\t}\n\n\tasync fetchJobStatus(jobId: string): Promise<JobStatusResponse> {\n\t\tconst res = await fetch(`${this.baseUrl}/api/vto/status?job_id=${jobId}`);\n\t\tif (!res.ok) throw new Error(`Status check failed: ${res.status}`);\n\t\treturn res.json();\n\t}\n\n\tasync fetchJobImage(jobId: string): Promise<string> {\n\t\tconst url = `${this.baseUrl}/api/vto/image?job_id=${jobId}`;\n\n\t\tconst res = await fetch(url);\n\t\tif (res.status === 202) throw new Error(\"202_PROCESSING\");\n\t\tif (!res.ok) throw new Error(`Image fetch failed: ${res.status}`);\n\n\t\tconst blob = await res.blob();\n\t\treturn URL.createObjectURL(blob);\n\t}\n}\n","import { createButton, createButtonContainer } from \"./components/index.js\";\nimport { CSS_CLASSES } from \"./constants.js\";\nimport type { VirtualTryOnConfig } from \"./index.js\";\nimport {\n\tModalManager,\n\ttype ModalControlMessageType,\n\ttype ModalOpenOptions,\n} from \"./widget/modal-manager.js\";\nimport {\n\tVtoApiClient,\n\ttype PreparedTryOnData,\n} from \"./widget/vto-api-client.js\";\n\nexport class VirtualTryOnWidget {\n\tprivate static instanceCounter = 0;\n\tprivate static activeWidgetId: number | null = null;\n\tprivate readonly config: VirtualTryOnConfig;\n\tprivate readonly instanceId: number;\n\tprivate virtualTryOnImageUrl: string | null = null;\n\tprivate originalProductImages: string[] = []; // Store all original product images\n\tprivate preparedTryOnData: PreparedTryOnData | null = null;\n\tprivate isShowingVirtualTryOn: boolean = false;\n\tprivate lastModelImage: Blob | null = null;\n\tprivate cameraButton: HTMLButtonElement | null = null;\n\tprivate readonly modal: ModalManager;\n\tprivate readonly vtoApiClient: VtoApiClient;\n\tprivate iframeMessageListener: ((event: MessageEvent) => void) | null = null;\n\n\tconstructor(config: VirtualTryOnConfig) {\n\t\tthis.instanceId = ++VirtualTryOnWidget.instanceCounter;\n\t\tthis.config = {\n\t\t\tbaseUrl: config.baseUrl,\n\t\t\tproductPageSelector: config.productPageSelector,\n\t\t\tgallerySelector: config.gallerySelector,\n\t\t\tproductImageSelector: config.productImageSelector,\n\t\t\tbuttonPosition: config.buttonPosition,\n\t\t\tmodelTier: config.modelTier,\n\t\t\toutfitID: config.outfitID,\n\t\t\tsingleton: config.singleton,\n\t\t\tgalleryElement: config.galleryElement,\n\t\t};\n\t\tthis.modal = new ModalManager(this.config.baseUrl);\n\t\tthis.vtoApiClient = new VtoApiClient(this.config.baseUrl);\n\t}\n\n\tprivate getContainer(): HTMLElement | null {\n\t\tconst configContainer = this.config.galleryElement;\n\t\tif (configContainer?.isConnected) {\n\t\t\treturn configContainer;\n\t\t}\n\n\t\tconst queriedContainer = document.querySelector(\n\t\t\tthis.config.gallerySelector,\n\t\t);\n\t\treturn queriedContainer instanceof HTMLElement ? queriedContainer : null;\n\t}\n\n\tpublic async init(): Promise<void> {\n\t\ttry {\n\t\t\tconst selectors = this.config.productPageSelector;\n\t\t\tconst currentPath = window.location.pathname;\n\t\t\tconst matches = selectors.some((sel) => currentPath.includes(sel));\n\t\t\tif (!matches) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst container = this.getContainer();\n\t\t\tif (!container) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[WeWear VTO] Gallery container not found:\",\n\t\t\t\t\tthis.config.gallerySelector,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (getComputedStyle(container).position === \"static\") {\n\t\t\t\tcontainer.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tconst button = createButton(this.config.buttonPosition, async () => {\n\t\t\t\tif (this.cameraButton && !this.cameraButton.disabled) {\n\t\t\t\t\tawait this.handleTryOnClick();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.cameraButton = button.querySelector(\".ww-camera-btn\");\n\t\t\tcontainer.appendChild(button);\n\t\t\tconsole.log(\"[WeWear VTO] Widget initialized successfully\");\n\n\t\t\tthis.setupIframeListener();\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Initialization failed:\", error);\n\t\t}\n\t}\n\n\tprivate async handleTryOnClick(): Promise<void> {\n\t\tconsole.log(\"[WeWear VTO] Button clicked, starting try-on process...\");\n\n\t\ttry {\n\t\t\tif (this.originalProductImages.length === 0) {\n\t\t\t\tthis.originalProductImages = this.getAllProductImages();\n\t\t\t\tconsole.log(\n\t\t\t\t\t\"[WeWear VTO] Stored original product images:\",\n\t\t\t\t\tthis.originalProductImages,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconsole.log(\"[WeWear VTO] Retrieved data:\", {\n\t\t\t\tproductImages: this.originalProductImages,\n\t\t\t});\n\n\t\t\tif (this.originalProductImages.length === 0) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[WeWear VTO] Product images not found:\",\n\t\t\t\t\tthis.config.productImageSelector,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.preparedTryOnData = await this.vtoApiClient.prepareTryOnData(\n\t\t\t\tthis.originalProductImages,\n\t\t\t\t{\n\t\t\t\t\tmodelTier: this.config.modelTier,\n\t\t\t\t\toutfitID: this.config.outfitID,\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tconst photoUploadUrl = this.buildPhotoUploadUrl(\n\t\t\t\tthis.preparedTryOnData.productImages,\n\t\t\t);\n\t\t\tthis.showPhotoUploadModal(photoUploadUrl.toString());\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Try-on request failed:\", error);\n\t\t}\n\t}\n\n\tprivate async handleRegenerateClick(): Promise<void> {\n\t\tif (!this.lastModelImage) {\n\t\t\tawait this.handleTryOnClick();\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tthis.originalProductImages = this.getAllProductImages();\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tconsole.warn(\"[WeWear VTO] No product images found for regenerate.\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.preparedTryOnData = await this.vtoApiClient.prepareTryOnData(\n\t\t\tthis.originalProductImages,\n\t\t\t{\n\t\t\t\tmodelTier: this.config.modelTier,\n\t\t\t\toutfitID: this.config.outfitID,\n\t\t\t},\n\t\t);\n\n\t\tconst photoUploadUrl = this.buildPhotoUploadUrl(\n\t\t\tthis.preparedTryOnData.productImages,\n\t\t\t{ startAtConfirm: true },\n\t\t);\n\t\tthis.showPhotoUploadModal(photoUploadUrl.toString(), {\n\t\t\tprefillImage: this.lastModelImage,\n\t\t\tautoSubmit: true,\n\t\t});\n\t}\n\n\tprivate buildPhotoUploadUrl(\n\t\tproductImages: string[],\n\t\toptions?: { startAtConfirm?: boolean },\n\t): URL {\n\t\tconst photoUploadUrl = new URL(`${this.config.baseUrl}`);\n\t\tconst previewProductImage = this.preparedTryOnData?.isImageVisible\n\t\t\t? productImages[0]\n\t\t\t: this.originalProductImages[0];\n\n\t\tphotoUploadUrl.searchParams.append(\n\t\t\t\"ww_product_images\",\n\t\t\tproductImages.join(\",\"),\n\t\t);\n\t\tif (previewProductImage) {\n\t\t\tphotoUploadUrl.searchParams.append(\n\t\t\t\t\"ww_product_preview_image\",\n\t\t\t\tpreviewProductImage,\n\t\t\t);\n\t\t}\n\t\tif (options?.startAtConfirm) {\n\t\t\tphotoUploadUrl.searchParams.append(\"ww_step\", \"2\");\n\t\t\tphotoUploadUrl.searchParams.append(\"ww_regenerate\", \"1\");\n\t\t}\n\t\treturn photoUploadUrl;\n\t}\n\n\tprivate getAllProductImages(): string[] {\n\t\tconst container = this.getContainer();\n\t\tconst scopedElements = container?.querySelectorAll(\n\t\t\tthis.config.productImageSelector,\n\t\t);\n\t\tconst fallbackElements = document.querySelectorAll(\n\t\t\tthis.config.productImageSelector,\n\t\t);\n\t\tconst productImageElements = (\n\t\t\tscopedElements?.length ? scopedElements : fallbackElements\n\t\t) as NodeListOf<HTMLImageElement>;\n\n\t\tconst images: string[] = [];\n\n\t\tproductImageElements.forEach((img) => {\n\t\t\tconst imageUrl =\n\t\t\t\timg.src ||\n\t\t\t\timg.getAttribute(\"data-src\") ||\n\t\t\t\timg.getAttribute(\"data-large_image\") ||\n\t\t\t\t\"\";\n\n\t\t\tif (\n\t\t\t\timageUrl &&\n\t\t\t\t(imageUrl.startsWith(\"http://\") || imageUrl.startsWith(\"https://\")) &&\n\t\t\t\t!images.includes(imageUrl)\n\t\t\t) {\n\t\t\t\timages.push(imageUrl);\n\t\t\t}\n\t\t});\n\n\t\treturn images;\n\t}\n\n\tprivate showPhotoUploadModal(url: string, options?: ModalOpenOptions): void {\n\t\tthis.closeModal();\n\t\tVirtualTryOnWidget.activeWidgetId = this.instanceId;\n\t\tthis.modal.open(url, options, () => this.closeModal());\n\t}\n\n\tprivate closeModal(): void {\n\t\tthis.modal.close();\n\t\tif (VirtualTryOnWidget.activeWidgetId === this.instanceId) {\n\t\t\tVirtualTryOnWidget.activeWidgetId = null;\n\t\t}\n\t}\n\n\tprivate sendPendingPrefillToModal(): void {\n\t\tthis.modal.sendPendingPrefillToModal();\n\t}\n\n\tprivate postMessageToModal(type: ModalControlMessageType): void {\n\t\tthis.modal.postMessageToModal(type);\n\t}\n\n\tprivate setupIframeListener(): void {\n\t\tif (this.iframeMessageListener) {\n\t\t\twindow.removeEventListener(\"message\", this.iframeMessageListener);\n\t\t}\n\n\t\tthis.iframeMessageListener = (event: MessageEvent) => {\n\t\t\tif (VirtualTryOnWidget.activeWidgetId !== this.instanceId) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.origin !== new URL(this.config.baseUrl).origin) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tswitch (event.data.type) {\n\t\t\t\tcase \"VTO_CONFIRM_READY\":\n\t\t\t\t\tthis.sendPendingPrefillToModal();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"VTO_IMAGE_SELECTED\":\n\t\t\t\t\tif (event.data.image) {\n\t\t\t\t\t\tthis.lastModelImage = event.data.image;\n\t\t\t\t\t\tthis.postMessageToModal(\"VTO_SCAN_START\");\n\t\t\t\t\t\tthis.startVirtualTryOn();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"CLOSE_MODAL\":\n\t\t\t\t\tthis.closeModal();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener(\"message\", this.iframeMessageListener);\n\t}\n\n\tprivate async startVirtualTryOn(isRefresh = false): Promise<void> {\n\t\tif (isRefresh) {\n\t\t\tconsole.log(\n\t\t\t\t\"[WeWear VTO] Refreshing virtual try-on with previous parameters...\",\n\t\t\t);\n\t\t}\n\n\t\tif (!this.lastModelImage) {\n\t\t\tconsole.warn(\n\t\t\t\t\"[WeWear VTO] Missing required data to start virtual try-on.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tthis.originalProductImages = this.getAllProductImages();\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tconsole.warn(\"[WeWear VTO] No product images found.\");\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.preparedTryOnData) {\n\t\t\tthis.preparedTryOnData = await this.vtoApiClient.prepareTryOnData(\n\t\t\t\tthis.originalProductImages,\n\t\t\t\t{\n\t\t\t\t\tmodelTier: this.config.modelTier,\n\t\t\t\t\toutfitID: this.config.outfitID,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\tconst container = this.getContainer();\n\n\t\ttry {\n\t\t\tconst submitResponse = await this.vtoApiClient.submitTryOn(\n\t\t\t\tthis.lastModelImage,\n\t\t\t\tthis.preparedTryOnData.productImages,\n\t\t\t\t{\n\t\t\t\t\tmodelTier: this.config.modelTier,\n\t\t\t\t\toutfitID: this.config.outfitID,\n\t\t\t\t},\n\t\t\t\tthis.preparedTryOnData,\n\t\t\t);\n\n\t\t\tlet status = await this.vtoApiClient.fetchJobStatus(\n\t\t\t\tsubmitResponse.job_id,\n\t\t\t);\n\n\t\t\twhile (status.status !== \"COMPLETED\" && status.status !== \"FAILED\") {\n\t\t\t\tawait new Promise((r) => setTimeout(r, 3000));\n\t\t\t\tstatus = await this.vtoApiClient.fetchJobStatus(submitResponse.job_id);\n\t\t\t}\n\n\t\t\tif (status.status === \"COMPLETED\") {\n\t\t\t\tconst finalImage = await this.vtoApiClient.fetchJobImage(\n\t\t\t\t\tsubmitResponse.job_id,\n\t\t\t\t);\n\t\t\t\tif (finalImage) {\n\t\t\t\t\tthis.postMessageToModal(\"VTO_SCAN_COMPLETE\");\n\t\t\t\t\tawait new Promise((r) => setTimeout(r, 500));\n\t\t\t\t\tthis.replaceProductImage(finalImage);\n\t\t\t\t}\n\t\t\t\tif (container instanceof HTMLElement) {\n\t\t\t\t\tthis.showButtonContainer(container);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (status.status === \"FAILED\") {\n\t\t\t\tconsole.error(\"[WeWear VTO] VTO process failed:\", status.message);\n\t\t\t\tawait new Promise((r) => setTimeout(r, 5000));\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Error during virtual try-on process:\", error);\n\t\t\tawait new Promise((r) => setTimeout(r, 5000));\n\t\t} finally {\n\t\t\tthis.postMessageToModal(\"VTO_SCAN_STOP\");\n\t\t\tif (container instanceof HTMLElement) {\n\t\t\t\tthis.showButtonContainer(container);\n\t\t\t}\n\t\t\tthis.closeModal();\n\t\t}\n\t}\n\n\tprivate replaceProductImage(imageUrl: string): void {\n\t\ttry {\n\t\t\tthis.virtualTryOnImageUrl = imageUrl;\n\n\t\t\tconst container = this.getContainer();\n\t\t\tif (!container) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[WeWear VTO] Gallery container not found for image replacement:\",\n\t\t\t\t\tthis.config.gallerySelector,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!container.hasAttribute(\"data-ww-original-content\")) {\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-content\", container.innerHTML);\n\t\t\t}\n\n\t\t\tif (!container.hasAttribute(\"data-ww-container-locked\")) {\n\t\t\t\tconst containerRect = container.getBoundingClientRect();\n\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-container-width\",\n\t\t\t\t\tcontainerRect.width.toString(),\n\t\t\t\t);\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-container-height\",\n\t\t\t\t\tcontainerRect.height.toString(),\n\t\t\t\t);\n\n\t\t\t\tcontainer.style.width = `${containerRect.width}px`;\n\t\t\t\tcontainer.style.height = `${containerRect.height}px`;\n\t\t\t\tcontainer.style.minWidth = `${containerRect.width}px`;\n\t\t\t\tcontainer.style.minHeight = `${containerRect.height}px`;\n\n\t\t\t\tcontainer.style.paddingBottom = \"0\";\n\n\t\t\t\tcontainer.setAttribute(\"data-ww-container-locked\", \"true\");\n\t\t\t}\n\n\t\t\tconst originalImg = container.querySelector(\"img\");\n\t\t\tif (\n\t\t\t\toriginalImg &&\n\t\t\t\t!container.hasAttribute(\"data-ww-original-dimensions\")\n\t\t\t) {\n\t\t\t\tconst computedStyle = window.getComputedStyle(originalImg);\n\t\t\t\tconst rect = originalImg.getBoundingClientRect();\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-width\", computedStyle.width);\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-height\", computedStyle.height);\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-original-rect-width\",\n\t\t\t\t\trect.width.toString(),\n\t\t\t\t);\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-original-rect-height\",\n\t\t\t\t\trect.height.toString(),\n\t\t\t\t);\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-dimensions\", \"true\");\n\t\t\t}\n\n\t\t\tthis.showVirtualTryOnImage(container);\n\n\t\t\tthis.updateButtonContainer(container);\n\n\t\t\tconsole.log(\n\t\t\t\t\"[WeWear VTO] Product image replaced with virtual try-on result\",\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Error replacing product image:\", error);\n\t\t}\n\t}\n\n\tprivate showButtonContainer(container: HTMLElement): void {\n\t\tconst buttonContainer = container.querySelector(\n\t\t\t`.${CSS_CLASSES.BUTTON_CONTAINER}`,\n\t\t) as HTMLElement;\n\t\tif (buttonContainer) {\n\t\t\tbuttonContainer.style.display = \"flex\";\n\t\t}\n\t}\n\n\tprivate updateButtonContainer(container: HTMLElement): void {\n\t\tconst existingButtons = container.querySelectorAll(\n\t\t\t`.${CSS_CLASSES.BUTTON_CONTAINER}`,\n\t\t);\n\t\texistingButtons.forEach((btn) => {\n\t\t\tbtn.remove();\n\t\t});\n\n\t\tconst buttonContainer = createButtonContainer(\n\t\t\tthis.config.buttonPosition,\n\t\t\tthis.virtualTryOnImageUrl !== null,\n\t\t\tasync () => {\n\t\t\t\tawait this.handleTryOnClick();\n\t\t\t},\n\t\t\tasync () => {\n\t\t\t\tawait this.handleRegenerateClick();\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tif (this.isShowingVirtualTryOn) {\n\t\t\t\t\tthis.showOriginalImage(container);\n\t\t\t\t} else {\n\t\t\t\t\tthis.showVirtualTryOnImage(container);\n\t\t\t\t}\n\t\t\t\tthis.updateButtonContainer(container);\n\t\t\t},\n\t\t\tthis.isShowingVirtualTryOn,\n\t\t);\n\n\t\tcontainer.appendChild(buttonContainer);\n\t}\n\n\tprivate showVirtualTryOnImage(container: HTMLElement): void {\n\t\tif (!this.virtualTryOnImageUrl) {\n\t\t\tconsole.warn(\"[WeWear VTO] No virtual try-on image URL available\");\n\t\t\treturn;\n\t\t}\n\n\t\tArray.from(container.children).forEach((child) => {\n\t\t\tif (!child.classList.contains(CSS_CLASSES.BUTTON_CONTAINER)) {\n\t\t\t\tchild.remove();\n\t\t\t}\n\t\t});\n\n\t\tconst originalWidth =\n\t\t\tcontainer.getAttribute(\"data-ww-original-width\") || \"\";\n\t\tconst originalHeight =\n\t\t\tcontainer.getAttribute(\"data-ww-original-height\") || \"\";\n\t\tconst originalRectWidth =\n\t\t\tcontainer.getAttribute(\"data-ww-original-rect-width\") || \"\";\n\t\tconst originalRectHeight =\n\t\t\tcontainer.getAttribute(\"data-ww-original-rect-height\") || \"\";\n\n\t\tconst image = document.createElement(\"img\");\n\t\timage.src = this.virtualTryOnImageUrl;\n\t\timage.alt = \"Virtual Try-On Result\";\n\n\t\tlet widthStyle = \"100%\";\n\t\tlet heightStyle = \"100%\";\n\n\t\tif (originalWidth && originalWidth !== \"auto\" && originalWidth !== \"0px\") {\n\t\t\twidthStyle = originalWidth;\n\t\t} else if (originalRectWidth && originalRectWidth !== \"0\") {\n\t\t\twidthStyle = `${originalRectWidth}px`;\n\t\t}\n\n\t\tif (\n\t\t\toriginalHeight &&\n\t\t\toriginalHeight !== \"auto\" &&\n\t\t\toriginalHeight !== \"0px\"\n\t\t) {\n\t\t\theightStyle = originalHeight;\n\t\t} else if (originalRectHeight && originalRectHeight !== \"0\") {\n\t\t\theightStyle = `${originalRectHeight}px`;\n\t\t}\n\n\t\timage.style.cssText = `\n width: ${widthStyle};\n height: ${heightStyle};\n object-fit: contain;\n `;\n\n\t\tcontainer.prepend(image);\n\n\t\tthis.isShowingVirtualTryOn = true;\n\n\t\tthis.updateButtonContainer(container);\n\n\t\tconsole.log(\n\t\t\t\"[WeWear VTO] Product image replaced with virtual try-on result\",\n\t\t);\n\t}\n\n\tprivate showOriginalImage(container: HTMLElement): void {\n\t\tconst originalContentHTML = container.getAttribute(\n\t\t\t\"data-ww-original-content\",\n\t\t);\n\t\tif (originalContentHTML) {\n\t\t\tArray.from(container.children).forEach((child) => {\n\t\t\t\tif (!child.classList.contains(CSS_CLASSES.BUTTON_CONTAINER)) {\n\t\t\t\t\tchild.remove();\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst tempDiv = document.createElement(\"div\");\n\t\t\ttempDiv.innerHTML = originalContentHTML;\n\t\t\tcontainer.append(...Array.from(tempDiv.children));\n\n\t\t\t// Remove temporary attributes used for VTO state\n\t\t\tcontainer.style.paddingBottom = \"\";\n\t\t}\n\n\t\tthis.isShowingVirtualTryOn = false;\n\t}\n\n\tpublic destroy(): void {\n\t\ttry {\n\t\t\tconst container = this.getContainer();\n\t\t\tif (container) {\n\t\t\t\tconst existingButtons = container.querySelectorAll(\n\t\t\t\t\t`.${CSS_CLASSES.BUTTON_CONTAINER}`,\n\t\t\t\t);\n\t\t\t\texistingButtons.forEach((btn) => {\n\t\t\t\t\tbtn.remove();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.closeModal();\n\n\t\t\tthis.cameraButton = null;\n\n\t\t\tif (this.iframeMessageListener) {\n\t\t\t\twindow.removeEventListener(\"message\", this.iframeMessageListener);\n\t\t\t\tthis.iframeMessageListener = null;\n\t\t\t}\n\n\t\t\tthis.virtualTryOnImageUrl = null;\n\t\t\tthis.isShowingVirtualTryOn = false;\n\t\t\tthis.lastModelImage = null;\n\t\t\tthis.originalProductImages = [];\n\t\t\tthis.preparedTryOnData = null;\n\n\t\t\tconsole.log(\"[WeWear VTO] Widget destroyed successfully\");\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Error during widget destruction:\", error);\n\t\t}\n\t}\n}\n","import type { VirtualTryOnConfig } from \"./index.js\";\nimport { VirtualTryOnWidget } from \"./widget.js\";\n\nlet widgetInstances: VirtualTryOnWidget[] = [];\n\nexport function initVirtualTryOn(config?: VirtualTryOnConfig): void {\n\ttry {\n\t\twidgetInstances.forEach((instance) => {\n\t\t\tinstance.destroy();\n\t\t});\n\t\twidgetInstances = [];\n\n\t\tif (!config) {\n\t\t\tconsole.log(\n\t\t\t\t\"[WeWear VTO] Missing configuration. Widget not initialized.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst allContainers = Array.from(\n\t\t\tdocument.querySelectorAll(config.gallerySelector),\n\t\t).filter(\n\t\t\t(container): container is HTMLElement => container instanceof HTMLElement,\n\t\t);\n\t\tconst shouldUseSingleton = config.singleton !== false;\n\n\t\tif (allContainers.length > 1 && !shouldUseSingleton) {\n\t\t\twidgetInstances = allContainers.map((galleryElement) => {\n\t\t\t\treturn new VirtualTryOnWidget({\n\t\t\t\t\t...config,\n\t\t\t\t\tgalleryElement,\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tconst firstContainer = allContainers[0];\n\t\t\twidgetInstances = [\n\t\t\t\tnew VirtualTryOnWidget({\n\t\t\t\t\t...config,\n\t\t\t\t\tgalleryElement: firstContainer,\n\t\t\t\t}),\n\t\t\t];\n\t\t}\n\n\t\tconst initializeWidgets = () => {\n\t\t\twidgetInstances.forEach((widget) => {\n\t\t\t\twidget.init().catch((error) => {\n\t\t\t\t\tconsole.error(\"[WeWear VTO] Failed to initialize:\", error);\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tif (document.readyState === \"loading\") {\n\t\t\tdocument.addEventListener(\"DOMContentLoaded\", initializeWidgets, {\n\t\t\t\tonce: true,\n\t\t\t});\n\t\t} else {\n\t\t\tinitializeWidgets();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\"[WeWear VTO] Initialization error:\", error);\n\t}\n}\n\nexport function getWidgetInstance(): VirtualTryOnWidget | null {\n\treturn widgetInstances[0] ?? null;\n}\n\nexport function getWidgetInstances(): VirtualTryOnWidget[] {\n\treturn [...widgetInstances];\n}\n\nif (typeof window !== \"undefined\") {\n\tinitVirtualTryOn();\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/constants.ts","../src/utils.ts","../src/components/button.ts","../src/widget/modal-manager.ts","../src/widget/vto-api-client.ts","../src/widget.ts","../src/installer.ts"],"sourcesContent":["export const CSS_CLASSES = {\n\tBUTTON_CONTAINER: \"wewear-vto-button-container\",\n\tBUTTON: \"wewear-vto-button\",\n\tMODAL: \"wewear-vto-modal\",\n};\n\nexport const Z_INDEX = {\n\tBUTTON: 10,\n};\n","export function getPositionStyles(position: string): string {\n\tswitch (position) {\n\t\tcase \"bottom-left\":\n\t\t\treturn \"left: 20px; bottom: 20px;\";\n\t\tcase \"top-right\":\n\t\t\treturn \"right: 20px; top: 20px;\";\n\t\tcase \"top-left\":\n\t\t\treturn \"left: 20px; top: 20px;\";\n\t\tdefault:\n\t\t\treturn \"right: 20px; bottom: 20px;\";\n\t}\n}\n","import { CSS_CLASSES, Z_INDEX } from \"../constants.js\";\nimport { getPositionStyles } from \"../utils.js\";\n\nconst CAMERA_ICON = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display: block;\">\n\t\t<path d=\"M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z\"></path>\n\t\t<circle cx=\"12\" cy=\"13\" r=\"3\"></circle>\n\t</svg>\n`;\n\nconst SPARKLES_ICON = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display: block; flex-shrink: 0;\">\n\t\t<path d=\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\"/>\n\t\t<path d=\"M20 2v4\"/>\n\t\t<path d=\"M22 4h-4\"/>\n\t\t<circle cx=\"4\" cy=\"20\" r=\"2\"/>\n\t</svg>\n`;\n\nconst REFRESH_ICON = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display: block;\">\n\t\t<path d=\"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"></path>\n\t\t<path d=\"M3 3v5h5\"></path>\n\t\t<path d=\"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16\"></path>\n\t\t<path d=\"M16 16h5v5\"></path>\n\t</svg>\n`;\n\nconst SAVE_ICON = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display: block;\">\n\t\t<path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path>\n\t\t<polyline points=\"7 10 12 15 17 10\"></polyline>\n\t\t<line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line>\n\t</svg>\n`;\n\nconst SHARE_ICON = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display: block;\">\n\t\t<circle cx=\"18\" cy=\"5\" r=\"3\"></circle>\n\t\t<circle cx=\"6\" cy=\"12\" r=\"3\"></circle>\n\t\t<circle cx=\"18\" cy=\"19\" r=\"3\"></circle>\n\t\t<line x1=\"8.59\" y1=\"13.51\" x2=\"15.42\" y2=\"17.49\"></line>\n\t\t<line x1=\"15.41\" y1=\"6.51\" x2=\"8.59\" y2=\"10.49\"></line>\n\t</svg>\n`;\n\nconst CONTAINER_STYLE = `\n\tposition: absolute;\n\tdisplay: flex;\n\tgap: 4px;\n\tborder-radius: 100px;\n\tbackground: white;\n\tpadding: 4px;\n\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n\tz-index: ${Z_INDEX.BUTTON};\n\ttransition: all 0.2s ease;\n`;\n\nconst ICON_BUTTON_STYLE = `\n\tdisplay: flex;\n\twidth: 40px;\n\theight: 40px;\n\tcursor: pointer;\n\talign-items: center;\n\tjustify-content: center;\n\tborder-radius: 100px;\n\tpadding: 0;\n\tborder: none;\n\ttransition: all 0.2s ease;\n\tflex-shrink: 0;\n`;\n\nconst PRIMARY_STYLE = `${ICON_BUTTON_STYLE}\n\tbackground: white;\n\tcolor: #000000;\n`;\n\nconst CAMERA_HIGHLIGHT_STYLE = `${ICON_BUTTON_STYLE}\n\tbackground: white;\n\tcolor: #333333;\n`;\n\nfunction createIconButton(\n\tclassName: string,\n\tariaLabel: string,\n\ticonHtml: string,\n\tstyleCss: string,\n\tonClick: () => void,\n): HTMLButtonElement {\n\tconst button = document.createElement(\"button\");\n\tbutton.type = \"button\";\n\tbutton.className = className;\n\tbutton.setAttribute(\"aria-label\", ariaLabel);\n\tbutton.style.cssText = styleCss;\n\tbutton.innerHTML = iconHtml;\n\tbutton.onclick = onClick;\n\treturn button;\n}\n\nexport function createButtonContainer(\n\tbuttonPosition: string,\n\thasVirtualTryOn: boolean = false,\n\tonCameraClick: () => void,\n\tonRefreshClick?: () => void,\n\tonToggleClick?: () => void,\n\tisShowingVirtualTryOn: boolean = false,\n\tonSaveClick?: () => void,\n\tonShareClick?: () => void,\n): HTMLElement {\n\tconst container = document.createElement(\"div\");\n\tcontainer.className = `${CSS_CLASSES.BUTTON_CONTAINER} ww-button-group`;\n\n\tconst positionStyles = hasVirtualTryOn\n\t\t? \"right: 20px; top: 20px;\"\n\t\t: getPositionStyles(buttonPosition);\n\tconst directionStyles = hasVirtualTryOn\n\t\t? \"flex-direction: column;\"\n\t\t: \"flex-direction: row;\";\n\tcontainer.style.cssText = `${CONTAINER_STYLE} ${positionStyles} ${directionStyles}`;\n\n\tconst cameraButton = hasVirtualTryOn\n\t\t? createIconButton(\n\t\t\t\t`${CSS_CLASSES.BUTTON} ww-camera-btn`,\n\t\t\t\t\"Virtual Try-On\",\n\t\t\t\tCAMERA_ICON,\n\t\t\t\tCAMERA_HIGHLIGHT_STYLE,\n\t\t\t\tonCameraClick,\n\t\t\t)\n\t\t: createIconButton(\n\t\t\t\t`${CSS_CLASSES.BUTTON} ww-camera-btn`,\n\t\t\t\t\"Virtual Try-On\",\n\t\t\t\t`${SPARKLES_ICON}<span style=\"display: block;\">TRY THIS LOOK</span>`,\n\t\t\t\t`${PRIMARY_STYLE}\n\t\t\t\t\tpadding: 10px 16px;\n\t\t\t\t\tgap: 8px;\n\t\t\t\t\tfont-size: 14px;\n\t\t\t\t\tfont-weight: 600;\n\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\twidth: auto;\n\t\t\t\t\theight: auto;\n\t\t\t\t`,\n\t\t\t\tonCameraClick,\n\t\t\t);\n\tif (hasVirtualTryOn && onSaveClick) {\n\t\tconst saveButton = createIconButton(\n\t\t\t\"ww-save-btn\",\n\t\t\t\"Save virtual try-on image\",\n\t\t\tSAVE_ICON,\n\t\t\t`${ICON_BUTTON_STYLE}\n\t\t\t\tbackground: white;\n\t\t\t\tcolor: #333333;\n\t\t\t`,\n\t\t\tonSaveClick,\n\t\t);\n\t\tcontainer.appendChild(saveButton);\n\t}\n\n\tif (hasVirtualTryOn && onShareClick) {\n\t\tconst shareButton = createIconButton(\n\t\t\t\"ww-share-btn\",\n\t\t\t\"Share virtual try-on image\",\n\t\t\tSHARE_ICON,\n\t\t\t`${ICON_BUTTON_STYLE}\n\t\t\t\tbackground: white;\n\t\t\t\tcolor: #333333;\n\t\t\t`,\n\t\t\tonShareClick,\n\t\t);\n\t\tcontainer.appendChild(shareButton);\n\t}\n\n\tcontainer.appendChild(cameraButton);\n\n\tif (hasVirtualTryOn) {\n\t\tif (onRefreshClick) {\n\t\t\tconst refreshButton = createIconButton(\n\t\t\t\t\"ww-refresh-btn\",\n\t\t\t\t\"Refresh virtual try-on\",\n\t\t\t\tREFRESH_ICON,\n\t\t\t\t`${ICON_BUTTON_STYLE}\n\t\t\t\t\tbackground: white;\n\t\t\t\t\tcolor: #333333;\n\t\t\t\t`,\n\t\t\t\tonRefreshClick,\n\t\t\t);\n\t\t\tcontainer.appendChild(refreshButton);\n\t\t}\n\n\t\tif (onToggleClick) {\n\t\t\tconst toggleButton = createIconButton(\n\t\t\t\t\"ww-toggle-btn\",\n\t\t\t\tisShowingVirtualTryOn ? \"Show Original Image\" : \"Show Virtual Try-On\",\n\t\t\t\tSPARKLES_ICON,\n\t\t\t\t`${ICON_BUTTON_STYLE}\n\t\t\t\t\tbackground: ${isShowingVirtualTryOn ? \"#333333\" : \"#e5e7eb\"};\n\t\t\t\t\tcolor: ${isShowingVirtualTryOn ? \"white\" : \"#333333\"};\n\t\t\t\t`,\n\t\t\t\tonToggleClick,\n\t\t\t);\n\n\t\t\ttoggleButton.onmouseover = () => {\n\t\t\t\tif (isShowingVirtualTryOn) {\n\t\t\t\t\ttoggleButton.style.background = \"#4a4a4a\";\n\t\t\t\t} else {\n\t\t\t\t\ttoggleButton.style.background = \"#d1d5db\";\n\t\t\t\t}\n\t\t\t};\n\t\t\ttoggleButton.onmouseout = () => {\n\t\t\t\tif (isShowingVirtualTryOn) {\n\t\t\t\t\ttoggleButton.style.background = \"#333333\";\n\t\t\t\t} else {\n\t\t\t\t\ttoggleButton.style.background = \"#e5e7eb\";\n\t\t\t\t}\n\t\t\t};\n\n\t\t\ttoggleButton.onclick = onToggleClick;\n\t\t\tcontainer.appendChild(toggleButton);\n\t\t}\n\t}\n\n\treturn container;\n}\n\nexport function createButton(\n\tbuttonPosition: string,\n\tonClick: () => void,\n\tdisabled: boolean = false,\n): HTMLElement {\n\tconst container = createButtonContainer(buttonPosition, false, onClick);\n\tconst cameraButton = container.querySelector(\n\t\t\".ww-camera-btn\",\n\t) as HTMLButtonElement;\n\tif (cameraButton) {\n\t\tcameraButton.disabled = disabled;\n\t\tif (disabled) {\n\t\t\tcameraButton.style.opacity = \"0.5\";\n\t\t\tcameraButton.style.cursor = \"not-allowed\";\n\t\t\tcameraButton.title = \"Find your ideal size first\";\n\t\t}\n\t}\n\treturn container;\n}\n","import { CSS_CLASSES } from \"../constants.js\";\n\nexport type ModalControlMessageType =\n\t| \"VTO_SCAN_START\"\n\t| \"VTO_SCAN_STOP\"\n\t| \"VTO_SCAN_COMPLETE\";\n\nexport interface ModalOpenOptions {\n\tprefillImage?: Blob;\n\tautoSubmit?: boolean;\n}\n\ninterface PendingModalPrefill {\n\timage: Blob;\n\tautoSubmit: boolean;\n}\n\nexport class ModalManager {\n\tprivate modalElement: HTMLElement | null = null;\n\tprivate pendingModalPrefill: PendingModalPrefill | null = null;\n\tprivate modalOrigin: string;\n\n\tconstructor(baseUrl: string) {\n\t\tthis.modalOrigin = new URL(baseUrl).origin;\n\t}\n\n\topen(\n\t\turl: string,\n\t\toptions: ModalOpenOptions | undefined,\n\t\tonClose: () => void,\n\t) {\n\t\tthis.close();\n\t\tthis.modalOrigin = new URL(url).origin;\n\t\tthis.pendingModalPrefill = options?.prefillImage\n\t\t\t? {\n\t\t\t\t\timage: options.prefillImage,\n\t\t\t\t\tautoSubmit: options.autoSubmit === true,\n\t\t\t\t}\n\t\t\t: null;\n\n\t\tconst modal = document.createElement(\"div\");\n\t\tmodal.className = CSS_CLASSES.MODAL;\n\t\tmodal.style.cssText = `\n\t\t\tposition: fixed;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\tbottom: 0;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tbackground-color: rgba(0, 0, 0, 0.8);\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: center;\n\t\t\talign-items: center;\n\t\t\tz-index: 999999999;\n\t\t\tanimation: ww-modal-fade-in 0.3s ease;\n\t\t`;\n\n\t\tif (!document.getElementById(\"ww-modal-animation\")) {\n\t\t\tconst style = document.createElement(\"style\");\n\t\t\tstyle.id = \"ww-modal-animation\";\n\t\t\tstyle.textContent = `\n\t\t\t\t@keyframes ww-modal-fade-in {\n\t\t\t\t\tfrom { opacity: 0; }\n\t\t\t\t\tto { opacity: 1; }\n\t\t\t\t}\n\t\t\t\t@keyframes ww-modal-scale-in {\n\t\t\t\t\tfrom { transform: scale(0.95); opacity: 0; }\n\t\t\t\t\tto { transform: scale(1); opacity: 1; }\n\t\t\t\t}\n\t\t\t`;\n\t\t\tdocument.head.appendChild(style);\n\t\t}\n\n\t\tconst iframeContainer = document.createElement(\"div\");\n\t\tiframeContainer.style.cssText = `\n\t\t\tposition: relative;\n\t\t\twidth: 90%;\n\t\t\theight: 90%;\n\t\t\tmax-width: 480px;\n\t\t\tmax-height: 720px;\n\t\t\tborder-radius: 20px;\n\t\t\toverflow: hidden;\n\t\t\tbox-shadow: 0 24px 48px rgba(0, 0, 0, 0.3), 0 12px 24px rgba(0, 0, 0, 0.2);\n\t\t\tanimation: ww-modal-scale-in 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n\t\t\tbackground: white;\n\t\t`;\n\n\t\tconst iframe = document.createElement(\"iframe\");\n\t\tiframe.src = url;\n\t\tiframe.style.cssText = `\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tborder: none;\n\t\t`;\n\n\t\tconst closeButton = document.createElement(\"button\");\n\t\tcloseButton.innerHTML = `\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n\t\t\t\t<line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n\t\t\t</svg>\n\t\t`;\n\t\tcloseButton.setAttribute(\"aria-label\", \"Close modal\");\n\t\tcloseButton.style.cssText = `\n\t\t\tposition: absolute;\n\t\t\ttop: -48px;\n\t\t\tright: 0;\n\t\t\tbackground: rgba(255, 255, 255, 0.95);\n\t\t\tbackdrop-filter: blur(8px);\n\t\t\t-webkit-backdrop-filter: blur(8px);\n\t\t\tborder: none;\n\t\t\tborder-radius: 50%;\n\t\t\twidth: 40px;\n\t\t\theight: 40px;\n\t\t\tcursor: pointer;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tcolor: #1f2937;\n\t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n\t\t\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n\t\t`;\n\t\tcloseButton.onmouseover = () => {\n\t\t\tcloseButton.style.transform = \"scale(1.1) rotate(90deg)\";\n\t\t\tcloseButton.style.background = \"#ef4444\";\n\t\t\tcloseButton.style.color = \"white\";\n\t\t};\n\t\tcloseButton.onmouseout = () => {\n\t\t\tcloseButton.style.transform = \"scale(1) rotate(0deg)\";\n\t\t\tcloseButton.style.background = \"rgba(255, 255, 255, 0.95)\";\n\t\t\tcloseButton.style.color = \"#1f2937\";\n\t\t};\n\t\tcloseButton.onclick = () => {\n\t\t\tmodal.style.opacity = \"0\";\n\t\t\tiframeContainer.style.transform = \"scale(0.95)\";\n\t\t\tiframeContainer.style.opacity = \"0\";\n\t\t\tsetTimeout(onClose, 300);\n\t\t};\n\n\t\tiframeContainer.appendChild(iframe);\n\t\tiframeContainer.appendChild(closeButton);\n\t\tmodal.appendChild(iframeContainer);\n\t\tdocument.body.appendChild(modal);\n\n\t\tmodal.onclick = (e) => {\n\t\t\tif (e.target === modal) {\n\t\t\t\tcloseButton.click();\n\t\t\t}\n\t\t};\n\n\t\tthis.modalElement = modal;\n\t}\n\n\tclose() {\n\t\tif (this.modalElement) {\n\t\t\tthis.modalElement.remove();\n\t\t\tthis.modalElement = null;\n\t\t}\n\t\tthis.pendingModalPrefill = null;\n\t}\n\n\tsendPendingPrefillToModal() {\n\t\tif (!this.pendingModalPrefill || !this.modalElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst iframe = this.modalElement.querySelector(\"iframe\");\n\t\tif (!(iframe instanceof HTMLIFrameElement) || !iframe.contentWindow) {\n\t\t\treturn;\n\t\t}\n\n\t\tiframe.contentWindow.postMessage(\n\t\t\t{\n\t\t\t\ttype: \"VTO_PREFILL_IMAGE\",\n\t\t\t\timage: this.pendingModalPrefill.image,\n\t\t\t\tautoSubmit: this.pendingModalPrefill.autoSubmit,\n\t\t\t},\n\t\t\tthis.modalOrigin,\n\t\t);\n\t\t// Fallback for production setups where iframe origin differs after redirects.\n\t\tiframe.contentWindow.postMessage(\n\t\t\t{\n\t\t\t\ttype: \"VTO_PREFILL_IMAGE\",\n\t\t\t\timage: this.pendingModalPrefill.image,\n\t\t\t\tautoSubmit: this.pendingModalPrefill.autoSubmit,\n\t\t\t},\n\t\t\t\"*\",\n\t\t);\n\t\tthis.pendingModalPrefill = null;\n\t}\n\n\tpostMessageToModal(type: ModalControlMessageType) {\n\t\tif (!this.modalElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst iframe = this.modalElement.querySelector(\"iframe\");\n\t\tif (!(iframe instanceof HTMLIFrameElement) || !iframe.contentWindow) {\n\t\t\treturn;\n\t\t}\n\n\t\tiframe.contentWindow.postMessage({ type }, this.modalOrigin);\n\t\t// Fallback for production setups where iframe origin differs after redirects.\n\t\tiframe.contentWindow.postMessage({ type }, \"*\");\n\t}\n}\n","export type JobStatus = \"PENDING\" | \"COMPLETED\" | \"FAILED\";\n\nexport interface JobStatusResponse {\n\tstatus: JobStatus;\n\tmessage: string;\n}\n\ninterface VtoDataResponse {\n\tgemini_model?: string;\n\timages?: string[];\n\tadditional_prompt?: string;\n\tis_image_visible?: boolean;\n}\n\ninterface SubmitTryOnOptions {\n\tmodelTier: string;\n\toutfitID: string;\n}\n\nexport interface PreparedTryOnData {\n\tmodelTier: string;\n\toutfitID: string;\n\tproductImages: string[];\n\tgeminiModel: string | null;\n\tadditionalPrompt: string | null;\n\tisImageVisible: boolean;\n}\n\nexport class VtoApiClient {\n\tconstructor(private readonly baseUrl: string) {}\n\n\tprivate async fetchVtoData(\n\t\toutfitId: string,\n\t): Promise<VtoDataResponse | null> {\n\t\ttry {\n\t\t\tconst vtoDataUrl = new URL(\"/api/vto/data\", this.baseUrl);\n\t\t\tvtoDataUrl.searchParams.set(\"outfit_id\", outfitId);\n\n\t\t\tconst response = await fetch(vtoDataUrl.toString());\n\t\t\tif (response.status === 404) return null;\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst errorText = await response.text();\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`[WeWear VTO] Failed to retrieve VTO data (${response.status}): ${errorText}`,\n\t\t\t\t);\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn (await response.json()) as VtoDataResponse;\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"[WeWear VTO] Error retrieving VTO data:\", error);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tasync submitTryOn(\n\t\tmodelImage: Blob,\n\t\tproductImages: string[],\n\t\toptions: SubmitTryOnOptions,\n\t\tpreparedData?: PreparedTryOnData,\n\t): Promise<{ job_id: string }> {\n\t\tconst resolved =\n\t\t\tpreparedData ?? (await this.prepareTryOnData(productImages, options));\n\n\t\tconst formData = new FormData();\n\t\tformData.append(\"model_image\", modelImage, \"model_image.png\");\n\t\tformData.append(\n\t\t\t\"product_image_urls\",\n\t\t\tJSON.stringify(resolved.productImages),\n\t\t);\n\t\tformData.append(\"page_url\", window.location.href);\n\t\tformData.append(\"model_tier\", resolved.modelTier);\n\t\tif (resolved.geminiModel)\n\t\t\tformData.append(\"gemini_model\", resolved.geminiModel);\n\t\tif (resolved.additionalPrompt) {\n\t\t\tformData.append(\"additional_prompt\", resolved.additionalPrompt);\n\t\t}\n\n\t\tif (resolved.outfitID) formData.append(\"outfit_id\", resolved.outfitID);\n\n\t\tconst res = await fetch(`${this.baseUrl}/api/vto`, {\n\t\t\tmethod: \"POST\",\n\t\t\tbody: formData,\n\t\t});\n\t\tif (!res.ok) {\n\t\t\tconst errorText = await res.text();\n\t\t\tconsole.error(\n\t\t\t\t\"[WeWear VTO] API submission failed:\",\n\t\t\t\tres.status,\n\t\t\t\terrorText,\n\t\t\t);\n\t\t\tthrow new Error(`API submission failed: ${res.status}`);\n\t\t}\n\t\treturn res.json();\n\t}\n\n\tasync prepareTryOnData(\n\t\tproductImages: string[],\n\t\toptions: SubmitTryOnOptions,\n\t): Promise<PreparedTryOnData> {\n\t\tconst outfitID = options.outfitID?.trim() ?? \"\";\n\t\tlet resolvedProductImages = productImages;\n\t\tlet resolvedGeminiModel: string | null = null;\n\t\tlet resolvedAdditionalPrompt: string | null = null;\n\t\tlet resolvedIsImageVisible = true;\n\n\t\tif (outfitID) {\n\t\t\tconst vtoData = await this.fetchVtoData(outfitID);\n\t\t\tif (vtoData) {\n\t\t\t\tif (Array.isArray(vtoData.images) && vtoData.images.length > 0) {\n\t\t\t\t\tresolvedProductImages = vtoData.images;\n\t\t\t\t}\n\t\t\t\tif (typeof vtoData.gemini_model === \"string\" && vtoData.gemini_model) {\n\t\t\t\t\tresolvedGeminiModel = vtoData.gemini_model;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\ttypeof vtoData.additional_prompt === \"string\" &&\n\t\t\t\t\tvtoData.additional_prompt\n\t\t\t\t) {\n\t\t\t\t\tresolvedAdditionalPrompt = vtoData.additional_prompt;\n\t\t\t\t}\n\t\t\t\tif (typeof vtoData.is_image_visible === \"boolean\") {\n\t\t\t\t\tresolvedIsImageVisible = vtoData.is_image_visible;\n\t\t\t\t}\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[WeWear VTO] Using stored VTO data for outfit_id=${outfitID}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tmodelTier: options.modelTier,\n\t\t\toutfitID,\n\t\t\tproductImages: resolvedProductImages,\n\t\t\tgeminiModel: resolvedGeminiModel,\n\t\t\tadditionalPrompt: resolvedAdditionalPrompt,\n\t\t\tisImageVisible: resolvedIsImageVisible,\n\t\t};\n\t}\n\n\tasync fetchJobStatus(jobId: string): Promise<JobStatusResponse> {\n\t\tconst res = await fetch(`${this.baseUrl}/api/vto/status?job_id=${jobId}`);\n\t\tif (!res.ok) throw new Error(`Status check failed: ${res.status}`);\n\t\treturn res.json();\n\t}\n\n\tasync fetchJobImage(jobId: string): Promise<string> {\n\t\tconst url = `${this.baseUrl}/api/vto/image?job_id=${jobId}`;\n\n\t\tconst res = await fetch(url);\n\t\tif (res.status === 202) throw new Error(\"202_PROCESSING\");\n\t\tif (!res.ok) throw new Error(`Image fetch failed: ${res.status}`);\n\n\t\tconst blob = await res.blob();\n\t\treturn URL.createObjectURL(blob);\n\t}\n}\n","import { createButton, createButtonContainer } from \"./components/index.js\";\nimport { CSS_CLASSES } from \"./constants.js\";\nimport type { VirtualTryOnConfig } from \"./index.js\";\nimport {\n\tModalManager,\n\ttype ModalControlMessageType,\n\ttype ModalOpenOptions,\n} from \"./widget/modal-manager.js\";\nimport {\n\tVtoApiClient,\n\ttype PreparedTryOnData,\n} from \"./widget/vto-api-client.js\";\n\nexport class VirtualTryOnWidget {\n\tprivate static instanceCounter = 0;\n\tprivate static activeWidgetId: number | null = null;\n\tprivate static readonly ERROR_TOAST_MESSAGE =\n\t\t\"Virtual try-on is temporarily unavailable due to high traffic on Google services. Please try again in a moment.\";\n\tprivate readonly config: VirtualTryOnConfig;\n\tprivate readonly instanceId: number;\n\tprivate virtualTryOnImageUrl: string | null = null;\n\tprivate originalProductImages: string[] = []; // Store all original product images\n\tprivate preparedTryOnData: PreparedTryOnData | null = null;\n\tprivate isShowingVirtualTryOn: boolean = false;\n\tprivate lastModelImage: Blob | null = null;\n\tprivate cameraButton: HTMLButtonElement | null = null;\n\tprivate readonly modal: ModalManager;\n\tprivate readonly vtoApiClient: VtoApiClient;\n\tprivate iframeMessageListener: ((event: MessageEvent) => void) | null = null;\n\n\tconstructor(config: VirtualTryOnConfig) {\n\t\tthis.instanceId = ++VirtualTryOnWidget.instanceCounter;\n\t\tthis.config = {\n\t\t\tbaseUrl: config.baseUrl,\n\t\t\tproductPageSelector: config.productPageSelector,\n\t\t\tgallerySelector: config.gallerySelector,\n\t\t\tproductImageSelector: config.productImageSelector,\n\t\t\tbuttonPosition: config.buttonPosition,\n\t\t\tmodelTier: config.modelTier,\n\t\t\toutfitID: config.outfitID,\n\t\t\tsingleton: config.singleton,\n\t\t\tgalleryElement: config.galleryElement,\n\t\t};\n\t\tthis.modal = new ModalManager(this.config.baseUrl);\n\t\tthis.vtoApiClient = new VtoApiClient(this.config.baseUrl);\n\t}\n\n\tprivate getContainer(): HTMLElement | null {\n\t\tconst configContainer = this.config.galleryElement;\n\t\tif (configContainer?.isConnected) {\n\t\t\treturn configContainer;\n\t\t}\n\n\t\tconst queriedContainer = document.querySelector(\n\t\t\tthis.config.gallerySelector,\n\t\t);\n\t\treturn queriedContainer instanceof HTMLElement ? queriedContainer : null;\n\t}\n\n\tpublic async init(): Promise<void> {\n\t\ttry {\n\t\t\tconst selectors = this.config.productPageSelector;\n\t\t\tconst currentPath = window.location.pathname;\n\t\t\tconst matches = selectors.some((sel) => currentPath.includes(sel));\n\t\t\tif (!matches) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst container = this.getContainer();\n\t\t\tif (!container) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[WeWear VTO] Gallery container not found:\",\n\t\t\t\t\tthis.config.gallerySelector,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (getComputedStyle(container).position === \"static\") {\n\t\t\t\tcontainer.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tconst button = createButton(this.config.buttonPosition, async () => {\n\t\t\t\tif (this.cameraButton && !this.cameraButton.disabled) {\n\t\t\t\t\tawait this.handleTryOnClick();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.cameraButton = button.querySelector(\".ww-camera-btn\");\n\t\t\tcontainer.appendChild(button);\n\t\t\tconsole.log(\"[WeWear VTO] Widget initialized successfully\");\n\n\t\t\tthis.setupIframeListener();\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Initialization failed:\", error);\n\t\t}\n\t}\n\n\tprivate async handleTryOnClick(): Promise<void> {\n\t\tconsole.log(\"[WeWear VTO] Button clicked, starting try-on process...\");\n\n\t\ttry {\n\t\t\tif (this.originalProductImages.length === 0) {\n\t\t\t\tthis.originalProductImages = this.getAllProductImages();\n\t\t\t\tconsole.log(\n\t\t\t\t\t\"[WeWear VTO] Stored original product images:\",\n\t\t\t\t\tthis.originalProductImages,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconsole.log(\"[WeWear VTO] Retrieved data:\", {\n\t\t\t\tproductImages: this.originalProductImages,\n\t\t\t});\n\n\t\t\tif (this.originalProductImages.length === 0) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[WeWear VTO] Product images not found:\",\n\t\t\t\t\tthis.config.productImageSelector,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.preparedTryOnData = await this.vtoApiClient.prepareTryOnData(\n\t\t\t\tthis.originalProductImages,\n\t\t\t\t{\n\t\t\t\t\tmodelTier: this.config.modelTier,\n\t\t\t\t\toutfitID: this.config.outfitID,\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tconst photoUploadUrl = this.buildPhotoUploadUrl(\n\t\t\t\tthis.preparedTryOnData.productImages,\n\t\t\t);\n\t\t\tthis.showPhotoUploadModal(photoUploadUrl.toString());\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Try-on request failed:\", error);\n\t\t}\n\t}\n\n\tprivate async handleRegenerateClick(): Promise<void> {\n\t\tif (!this.lastModelImage) {\n\t\t\tawait this.handleTryOnClick();\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tthis.originalProductImages = this.getAllProductImages();\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tconsole.warn(\"[WeWear VTO] No product images found for regenerate.\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.preparedTryOnData = await this.vtoApiClient.prepareTryOnData(\n\t\t\tthis.originalProductImages,\n\t\t\t{\n\t\t\t\tmodelTier: this.config.modelTier,\n\t\t\t\toutfitID: this.config.outfitID,\n\t\t\t},\n\t\t);\n\n\t\tconst photoUploadUrl = this.buildPhotoUploadUrl(\n\t\t\tthis.preparedTryOnData.productImages,\n\t\t\t{ startAtConfirm: true },\n\t\t);\n\t\tthis.showPhotoUploadModal(photoUploadUrl.toString(), {\n\t\t\tprefillImage: this.lastModelImage,\n\t\t\tautoSubmit: true,\n\t\t});\n\t}\n\n\tprivate async handleSaveClick(): Promise<void> {\n\t\tif (!this.virtualTryOnImageUrl) {\n\t\t\tconsole.warn(\"[WeWear VTO] No virtual try-on image available to save.\");\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst response = await fetch(this.virtualTryOnImageUrl);\n\t\t\tconst imageBlob = await response.blob();\n\t\t\tconst objectUrl = URL.createObjectURL(imageBlob);\n\n\t\t\tconst link = document.createElement(\"a\");\n\t\t\tlink.href = objectUrl;\n\t\t\tlink.download = `wewear-vto-${Date.now()}.png`;\n\t\t\tdocument.body.appendChild(link);\n\t\t\tlink.click();\n\t\t\tlink.remove();\n\t\t\tURL.revokeObjectURL(objectUrl);\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Failed to save virtual try-on image:\", error);\n\t\t\twindow.open(this.virtualTryOnImageUrl, \"_blank\");\n\t\t}\n\t}\n\n\tprivate async handleShareClick(): Promise<void> {\n\t\tif (!this.virtualTryOnImageUrl) {\n\t\t\tconsole.warn(\"[WeWear VTO] No virtual try-on image available to share.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst shareUrl = this.virtualTryOnImageUrl;\n\n\t\ttry {\n\t\t\tif (navigator.share && navigator.canShare) {\n\t\t\t\tconst response = await fetch(shareUrl);\n\t\t\t\tconst imageBlob = await response.blob();\n\t\t\t\tconst imageFile = new File([imageBlob], \"wewear-vto.png\", {\n\t\t\t\t\ttype: imageBlob.type || \"image/png\",\n\t\t\t\t});\n\n\t\t\t\tif (navigator.canShare({ files: [imageFile] })) {\n\t\t\t\t\tawait navigator.share({\n\t\t\t\t\t\ttitle: \"My virtual try-on look\",\n\t\t\t\t\t\ttext: \"Check out my virtual try-on look.\",\n\t\t\t\t\t\tfiles: [imageFile],\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (navigator.share) {\n\t\t\t\tawait navigator.share({\n\t\t\t\t\ttitle: \"My virtual try-on look\",\n\t\t\t\t\ttext: \"Check out my virtual try-on look.\",\n\t\t\t\t\turl: shareUrl,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Native share failed:\", error);\n\t\t}\n\n\t\ttry {\n\t\t\tif (navigator.clipboard?.writeText) {\n\t\t\t\tawait navigator.clipboard.writeText(shareUrl);\n\t\t\t\twindow.alert(\"Virtual try-on link copied. You can paste it to share.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Clipboard copy failed:\", error);\n\t\t}\n\n\t\tconst newWindow = window.open(shareUrl, \"_blank\");\n\t\tif (!newWindow) {\n\t\t\twindow.prompt(\"Copy this link to share your virtual try-on:\", shareUrl);\n\t\t}\n\t}\n\n\tprivate buildPhotoUploadUrl(\n\t\tproductImages: string[],\n\t\toptions?: { startAtConfirm?: boolean },\n\t): URL {\n\t\tconst photoUploadUrl = new URL(`${this.config.baseUrl}`);\n\t\tconst previewProductImage = this.preparedTryOnData?.isImageVisible\n\t\t\t? productImages[0]\n\t\t\t: this.originalProductImages[0];\n\n\t\tphotoUploadUrl.searchParams.append(\n\t\t\t\"ww_product_images\",\n\t\t\tproductImages.join(\",\"),\n\t\t);\n\t\tif (previewProductImage) {\n\t\t\tphotoUploadUrl.searchParams.append(\n\t\t\t\t\"ww_product_preview_image\",\n\t\t\t\tpreviewProductImage,\n\t\t\t);\n\t\t}\n\t\tif (options?.startAtConfirm) {\n\t\t\tphotoUploadUrl.searchParams.append(\"ww_step\", \"2\");\n\t\t\tphotoUploadUrl.searchParams.append(\"ww_regenerate\", \"1\");\n\t\t}\n\t\treturn photoUploadUrl;\n\t}\n\n\tprivate getAllProductImages(): string[] {\n\t\tconst container = this.getContainer();\n\t\tconst scopedElements = container?.querySelectorAll(\n\t\t\tthis.config.productImageSelector,\n\t\t);\n\t\tconst fallbackElements = document.querySelectorAll(\n\t\t\tthis.config.productImageSelector,\n\t\t);\n\t\tconst productImageElements = (\n\t\t\tscopedElements?.length ? scopedElements : fallbackElements\n\t\t) as NodeListOf<HTMLImageElement>;\n\n\t\tconst images: string[] = [];\n\n\t\tproductImageElements.forEach((img) => {\n\t\t\tconst imageUrl =\n\t\t\t\timg.src ||\n\t\t\t\timg.getAttribute(\"data-src\") ||\n\t\t\t\timg.getAttribute(\"data-large_image\") ||\n\t\t\t\t\"\";\n\n\t\t\tif (\n\t\t\t\timageUrl &&\n\t\t\t\t(imageUrl.startsWith(\"http://\") || imageUrl.startsWith(\"https://\")) &&\n\t\t\t\t!images.includes(imageUrl)\n\t\t\t) {\n\t\t\t\timages.push(imageUrl);\n\t\t\t}\n\t\t});\n\n\t\treturn images;\n\t}\n\n\tprivate showPhotoUploadModal(url: string, options?: ModalOpenOptions): void {\n\t\tthis.closeModal();\n\t\tVirtualTryOnWidget.activeWidgetId = this.instanceId;\n\t\tthis.modal.open(url, options, () => this.closeModal());\n\t}\n\n\tprivate closeModal(): void {\n\t\tthis.modal.close();\n\t\tif (VirtualTryOnWidget.activeWidgetId === this.instanceId) {\n\t\t\tVirtualTryOnWidget.activeWidgetId = null;\n\t\t}\n\t}\n\n\tprivate showErrorToast(message: string): void {\n\t\tconst existingToast = document.getElementById(\"ww-vto-error-toast\");\n\t\tif (existingToast) {\n\t\t\texistingToast.remove();\n\t\t}\n\n\t\tconst toast = document.createElement(\"div\");\n\t\ttoast.id = \"ww-vto-error-toast\";\n\t\ttoast.setAttribute(\"role\", \"status\");\n\t\ttoast.setAttribute(\"aria-live\", \"polite\");\n\t\ttoast.style.cssText = `\n\t\t\tposition: fixed;\n\t\t\tleft: 50%;\n\t\t\tbottom: 24px;\n\t\t\ttransform: translateX(-50%);\n\t\t\tz-index: 2147483647;\n\t\t\tmax-width: min(92vw, 460px);\n\t\t\tpadding: 12px 14px;\n\t\t\tborder-radius: 12px;\n\t\t\tbackground: #ffffff;\n\t\t\tcolor: #111827;\n\t\t\tborder: 1px solid #e5e7eb;\n\t\t\tfont-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Arial, sans-serif;\n\t\t\tfont-size: 14px;\n\t\t\tline-height: 1.35;\n\t\t\tbox-shadow: 0 10px 32px rgba(0, 0, 0, 0.16);\n\t\t\topacity: 0;\n\t\t\ttransition: opacity 180ms ease;\n\t\t`;\n\n\t\tconst content = document.createElement(\"div\");\n\t\tcontent.style.cssText = `\n\t\t\tdisplay: flex;\n\t\t\talign-items: flex-start;\n\t\t\tgap: 10px;\n\t\t`;\n\n\t\tconst text = document.createElement(\"div\");\n\t\ttext.style.cssText = \"flex: 1;\";\n\t\ttext.textContent = message;\n\n\t\tconst closeButton = document.createElement(\"button\");\n\t\tcloseButton.type = \"button\";\n\t\tcloseButton.setAttribute(\"aria-label\", \"Close message\");\n\t\tcloseButton.textContent = \"Close\";\n\t\tcloseButton.style.cssText = `\n\t\t\tborder: none;\n\t\t\tbackground: transparent;\n\t\t\tcolor: #111827;\n\t\t\tfont-size: 12px;\n\t\t\tfont-weight: 600;\n\t\t\tcursor: pointer;\n\t\t\tpadding: 0;\n\t\t\tline-height: 1.2;\n\t\t\twhite-space: nowrap;\n\t\t`;\n\t\tcloseButton.onclick = () => {\n\t\t\ttoast.style.opacity = \"0\";\n\t\t\twindow.setTimeout(() => toast.remove(), 220);\n\t\t};\n\n\t\tcontent.appendChild(text);\n\t\tcontent.appendChild(closeButton);\n\t\ttoast.appendChild(content);\n\t\tdocument.body.appendChild(toast);\n\n\t\trequestAnimationFrame(() => {\n\t\t\ttoast.style.opacity = \"1\";\n\t\t});\n\t}\n\n\tprivate sendPendingPrefillToModal(): void {\n\t\tthis.modal.sendPendingPrefillToModal();\n\t}\n\n\tprivate postMessageToModal(type: ModalControlMessageType): void {\n\t\tthis.modal.postMessageToModal(type);\n\t}\n\n\tprivate setupIframeListener(): void {\n\t\tif (this.iframeMessageListener) {\n\t\t\twindow.removeEventListener(\"message\", this.iframeMessageListener);\n\t\t}\n\n\t\tthis.iframeMessageListener = (event: MessageEvent) => {\n\t\t\tif (VirtualTryOnWidget.activeWidgetId !== this.instanceId) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.origin !== new URL(this.config.baseUrl).origin) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tswitch (event.data.type) {\n\t\t\t\tcase \"VTO_CONFIRM_READY\":\n\t\t\t\t\tthis.sendPendingPrefillToModal();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"VTO_IMAGE_SELECTED\":\n\t\t\t\t\tif (event.data.image) {\n\t\t\t\t\t\tthis.lastModelImage = event.data.image;\n\t\t\t\t\t\tthis.postMessageToModal(\"VTO_SCAN_START\");\n\t\t\t\t\t\tthis.startVirtualTryOn();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"CLOSE_MODAL\":\n\t\t\t\t\tthis.closeModal();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener(\"message\", this.iframeMessageListener);\n\t}\n\n\tprivate async startVirtualTryOn(isRefresh = false): Promise<void> {\n\t\tif (isRefresh) {\n\t\t\tconsole.log(\n\t\t\t\t\"[WeWear VTO] Refreshing virtual try-on with previous parameters...\",\n\t\t\t);\n\t\t}\n\n\t\tif (!this.lastModelImage) {\n\t\t\tconsole.warn(\n\t\t\t\t\"[WeWear VTO] Missing required data to start virtual try-on.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tthis.originalProductImages = this.getAllProductImages();\n\t\t}\n\n\t\tif (this.originalProductImages.length === 0) {\n\t\t\tconsole.warn(\"[WeWear VTO] No product images found.\");\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.preparedTryOnData) {\n\t\t\tthis.preparedTryOnData = await this.vtoApiClient.prepareTryOnData(\n\t\t\t\tthis.originalProductImages,\n\t\t\t\t{\n\t\t\t\t\tmodelTier: this.config.modelTier,\n\t\t\t\t\toutfitID: this.config.outfitID,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\tconst container = this.getContainer();\n\t\tlet shouldShowErrorToast = false;\n\n\t\ttry {\n\t\t\tconst submitResponse = await this.vtoApiClient.submitTryOn(\n\t\t\t\tthis.lastModelImage,\n\t\t\t\tthis.preparedTryOnData.productImages,\n\t\t\t\t{\n\t\t\t\t\tmodelTier: this.config.modelTier,\n\t\t\t\t\toutfitID: this.config.outfitID,\n\t\t\t\t},\n\t\t\t\tthis.preparedTryOnData,\n\t\t\t);\n\n\t\t\tlet status = await this.vtoApiClient.fetchJobStatus(\n\t\t\t\tsubmitResponse.job_id,\n\t\t\t);\n\n\t\t\twhile (status.status !== \"COMPLETED\" && status.status !== \"FAILED\") {\n\t\t\t\tawait new Promise((r) => setTimeout(r, 3000));\n\t\t\t\tstatus = await this.vtoApiClient.fetchJobStatus(submitResponse.job_id);\n\t\t\t}\n\n\t\t\tif (status.status === \"COMPLETED\") {\n\t\t\t\tconst finalImage = await this.vtoApiClient.fetchJobImage(\n\t\t\t\t\tsubmitResponse.job_id,\n\t\t\t\t);\n\t\t\t\tif (finalImage) {\n\t\t\t\t\tthis.postMessageToModal(\"VTO_SCAN_COMPLETE\");\n\t\t\t\t\tawait new Promise((r) => setTimeout(r, 500));\n\t\t\t\t\tthis.replaceProductImage(finalImage);\n\t\t\t\t}\n\t\t\t\tif (container instanceof HTMLElement) {\n\t\t\t\t\tthis.showButtonContainer(container);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (status.status === \"FAILED\") {\n\t\t\t\tconsole.error(\"[WeWear VTO] VTO process failed:\", status.message);\n\t\t\t\tshouldShowErrorToast = true;\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\tshouldShowErrorToast = true;\n\t\t} finally {\n\t\t\tthis.postMessageToModal(\"VTO_SCAN_STOP\");\n\t\t\tif (container instanceof HTMLElement) {\n\t\t\t\tthis.showButtonContainer(container);\n\t\t\t}\n\t\t\tif (shouldShowErrorToast) {\n\t\t\t\tthis.showErrorToast(VirtualTryOnWidget.ERROR_TOAST_MESSAGE);\n\t\t\t\tawait new Promise((r) => setTimeout(r, 500));\n\t\t\t}\n\t\t\tthis.closeModal();\n\t\t}\n\t}\n\n\tprivate replaceProductImage(imageUrl: string): void {\n\t\ttry {\n\t\t\tthis.virtualTryOnImageUrl = imageUrl;\n\n\t\t\tconst container = this.getContainer();\n\t\t\tif (!container) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[WeWear VTO] Gallery container not found for image replacement:\",\n\t\t\t\t\tthis.config.gallerySelector,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!container.hasAttribute(\"data-ww-original-content\")) {\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-content\", container.innerHTML);\n\t\t\t}\n\n\t\t\tif (!container.hasAttribute(\"data-ww-container-locked\")) {\n\t\t\t\tconst containerRect = container.getBoundingClientRect();\n\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-container-width\",\n\t\t\t\t\tcontainerRect.width.toString(),\n\t\t\t\t);\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-container-height\",\n\t\t\t\t\tcontainerRect.height.toString(),\n\t\t\t\t);\n\n\t\t\t\tcontainer.style.width = `${containerRect.width}px`;\n\t\t\t\tcontainer.style.height = `${containerRect.height}px`;\n\t\t\t\tcontainer.style.minWidth = `${containerRect.width}px`;\n\t\t\t\tcontainer.style.minHeight = `${containerRect.height}px`;\n\n\t\t\t\tcontainer.style.paddingBottom = \"0\";\n\n\t\t\t\tcontainer.setAttribute(\"data-ww-container-locked\", \"true\");\n\t\t\t}\n\n\t\t\tconst originalImg = container.querySelector(\"img\");\n\t\t\tif (\n\t\t\t\toriginalImg &&\n\t\t\t\t!container.hasAttribute(\"data-ww-original-dimensions\")\n\t\t\t) {\n\t\t\t\tconst computedStyle = window.getComputedStyle(originalImg);\n\t\t\t\tconst rect = originalImg.getBoundingClientRect();\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-width\", computedStyle.width);\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-height\", computedStyle.height);\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-original-rect-width\",\n\t\t\t\t\trect.width.toString(),\n\t\t\t\t);\n\t\t\t\tcontainer.setAttribute(\n\t\t\t\t\t\"data-ww-original-rect-height\",\n\t\t\t\t\trect.height.toString(),\n\t\t\t\t);\n\t\t\t\tcontainer.setAttribute(\"data-ww-original-dimensions\", \"true\");\n\t\t\t}\n\n\t\t\tthis.showVirtualTryOnImage(container);\n\n\t\t\tthis.updateButtonContainer(container);\n\n\t\t\tconsole.log(\n\t\t\t\t\"[WeWear VTO] Product image replaced with virtual try-on result\",\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Error replacing product image:\", error);\n\t\t}\n\t}\n\n\tprivate showButtonContainer(container: HTMLElement): void {\n\t\tconst buttonContainer = container.querySelector(\n\t\t\t`.${CSS_CLASSES.BUTTON_CONTAINER}`,\n\t\t) as HTMLElement;\n\t\tif (buttonContainer) {\n\t\t\tbuttonContainer.style.display = \"flex\";\n\t\t}\n\t}\n\n\tprivate updateButtonContainer(container: HTMLElement): void {\n\t\tconst existingButtons = container.querySelectorAll(\n\t\t\t`.${CSS_CLASSES.BUTTON_CONTAINER}`,\n\t\t);\n\t\texistingButtons.forEach((btn) => {\n\t\t\tbtn.remove();\n\t\t});\n\n\t\tconst buttonContainer = createButtonContainer(\n\t\t\tthis.config.buttonPosition,\n\t\t\tthis.virtualTryOnImageUrl !== null,\n\t\t\tasync () => {\n\t\t\t\tawait this.handleTryOnClick();\n\t\t\t},\n\t\t\tasync () => {\n\t\t\t\tawait this.handleRegenerateClick();\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tif (this.isShowingVirtualTryOn) {\n\t\t\t\t\tthis.showOriginalImage(container);\n\t\t\t\t} else {\n\t\t\t\t\tthis.showVirtualTryOnImage(container);\n\t\t\t\t}\n\t\t\t\tthis.updateButtonContainer(container);\n\t\t\t},\n\t\t\tthis.isShowingVirtualTryOn,\n\t\t\tasync () => {\n\t\t\t\tawait this.handleSaveClick();\n\t\t\t},\n\t\t\tasync () => {\n\t\t\t\tawait this.handleShareClick();\n\t\t\t},\n\t\t);\n\n\t\tcontainer.appendChild(buttonContainer);\n\t}\n\n\tprivate showVirtualTryOnImage(container: HTMLElement): void {\n\t\tif (!this.virtualTryOnImageUrl) {\n\t\t\tconsole.warn(\"[WeWear VTO] No virtual try-on image URL available\");\n\t\t\treturn;\n\t\t}\n\n\t\tArray.from(container.children).forEach((child) => {\n\t\t\tif (!child.classList.contains(CSS_CLASSES.BUTTON_CONTAINER)) {\n\t\t\t\tchild.remove();\n\t\t\t}\n\t\t});\n\n\t\tconst originalWidth =\n\t\t\tcontainer.getAttribute(\"data-ww-original-width\") || \"\";\n\t\tconst originalHeight =\n\t\t\tcontainer.getAttribute(\"data-ww-original-height\") || \"\";\n\t\tconst originalRectWidth =\n\t\t\tcontainer.getAttribute(\"data-ww-original-rect-width\") || \"\";\n\t\tconst originalRectHeight =\n\t\t\tcontainer.getAttribute(\"data-ww-original-rect-height\") || \"\";\n\n\t\tconst image = document.createElement(\"img\");\n\t\timage.src = this.virtualTryOnImageUrl;\n\t\timage.alt = \"Virtual Try-On Result\";\n\n\t\tlet widthStyle = \"100%\";\n\t\tlet heightStyle = \"100%\";\n\n\t\tif (originalWidth && originalWidth !== \"auto\" && originalWidth !== \"0px\") {\n\t\t\twidthStyle = originalWidth;\n\t\t} else if (originalRectWidth && originalRectWidth !== \"0\") {\n\t\t\twidthStyle = `${originalRectWidth}px`;\n\t\t}\n\n\t\tif (\n\t\t\toriginalHeight &&\n\t\t\toriginalHeight !== \"auto\" &&\n\t\t\toriginalHeight !== \"0px\"\n\t\t) {\n\t\t\theightStyle = originalHeight;\n\t\t} else if (originalRectHeight && originalRectHeight !== \"0\") {\n\t\t\theightStyle = `${originalRectHeight}px`;\n\t\t}\n\n\t\timage.style.cssText = `\n width: ${widthStyle};\n height: ${heightStyle};\n object-fit: contain;\n `;\n\n\t\tcontainer.prepend(image);\n\n\t\tthis.isShowingVirtualTryOn = true;\n\n\t\tthis.updateButtonContainer(container);\n\n\t\tconsole.log(\n\t\t\t\"[WeWear VTO] Product image replaced with virtual try-on result\",\n\t\t);\n\t}\n\n\tprivate showOriginalImage(container: HTMLElement): void {\n\t\tconst originalContentHTML = container.getAttribute(\n\t\t\t\"data-ww-original-content\",\n\t\t);\n\t\tif (originalContentHTML) {\n\t\t\tArray.from(container.children).forEach((child) => {\n\t\t\t\tif (!child.classList.contains(CSS_CLASSES.BUTTON_CONTAINER)) {\n\t\t\t\t\tchild.remove();\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst tempDiv = document.createElement(\"div\");\n\t\t\ttempDiv.innerHTML = originalContentHTML;\n\t\t\tcontainer.append(...Array.from(tempDiv.children));\n\n\t\t\t// Remove temporary attributes used for VTO state\n\t\t\tcontainer.style.paddingBottom = \"\";\n\t\t}\n\n\t\tthis.isShowingVirtualTryOn = false;\n\t}\n\n\tpublic destroy(): void {\n\t\ttry {\n\t\t\tconst container = this.getContainer();\n\t\t\tif (container) {\n\t\t\t\tconst existingButtons = container.querySelectorAll(\n\t\t\t\t\t`.${CSS_CLASSES.BUTTON_CONTAINER}`,\n\t\t\t\t);\n\t\t\t\texistingButtons.forEach((btn) => {\n\t\t\t\t\tbtn.remove();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.closeModal();\n\n\t\t\tthis.cameraButton = null;\n\n\t\t\tif (this.iframeMessageListener) {\n\t\t\t\twindow.removeEventListener(\"message\", this.iframeMessageListener);\n\t\t\t\tthis.iframeMessageListener = null;\n\t\t\t}\n\n\t\t\tthis.virtualTryOnImageUrl = null;\n\t\t\tthis.isShowingVirtualTryOn = false;\n\t\t\tthis.lastModelImage = null;\n\t\t\tthis.originalProductImages = [];\n\t\t\tthis.preparedTryOnData = null;\n\n\t\t\tconsole.log(\"[WeWear VTO] Widget destroyed successfully\");\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[WeWear VTO] Error during widget destruction:\", error);\n\t\t}\n\t}\n}\n","import type { VirtualTryOnConfig } from \"./index.js\";\nimport { VirtualTryOnWidget } from \"./widget.js\";\n\nlet widgetInstances: VirtualTryOnWidget[] = [];\n\nexport function initVirtualTryOn(config?: VirtualTryOnConfig): void {\n\ttry {\n\t\twidgetInstances.forEach((instance) => {\n\t\t\tinstance.destroy();\n\t\t});\n\t\twidgetInstances = [];\n\n\t\tif (!config) {\n\t\t\tconsole.log(\n\t\t\t\t\"[WeWear VTO] Missing configuration. Widget not initialized.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst allContainers = Array.from(\n\t\t\tdocument.querySelectorAll(config.gallerySelector),\n\t\t).filter(\n\t\t\t(container): container is HTMLElement => container instanceof HTMLElement,\n\t\t);\n\t\tconst shouldUseSingleton = config.singleton !== false;\n\n\t\tif (allContainers.length > 1 && !shouldUseSingleton) {\n\t\t\twidgetInstances = allContainers.map((galleryElement) => {\n\t\t\t\treturn new VirtualTryOnWidget({\n\t\t\t\t\t...config,\n\t\t\t\t\tgalleryElement,\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tconst firstContainer = allContainers[0];\n\t\t\twidgetInstances = [\n\t\t\t\tnew VirtualTryOnWidget({\n\t\t\t\t\t...config,\n\t\t\t\t\tgalleryElement: firstContainer,\n\t\t\t\t}),\n\t\t\t];\n\t\t}\n\n\t\tconst initializeWidgets = () => {\n\t\t\twidgetInstances.forEach((widget) => {\n\t\t\t\twidget.init().catch((error) => {\n\t\t\t\t\tconsole.error(\"[WeWear VTO] Failed to initialize:\", error);\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tif (document.readyState === \"loading\") {\n\t\t\tdocument.addEventListener(\"DOMContentLoaded\", initializeWidgets, {\n\t\t\t\tonce: true,\n\t\t\t});\n\t\t} else {\n\t\t\tinitializeWidgets();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\"[WeWear VTO] Initialization error:\", error);\n\t}\n}\n\nexport function getWidgetInstance(): VirtualTryOnWidget | null {\n\treturn widgetInstances[0] ?? null;\n}\n\nexport function getWidgetInstances(): VirtualTryOnWidget[] {\n\treturn [...widgetInstances];\n}\n\nif (typeof window !== \"undefined\") {\n\tinitVirtualTryOn();\n}\n"],"names":[],"mappings":"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"}