vviinn-widgets 2.221.0 → 2.223.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.
- package/dist/cjs/{index-sL3iGA57.js → index-DZw3p4dq.js} +1 -1
- package/dist/cjs/{search.store-C-fS-eJR.js → search.store-Bh2_GSpU.js} +2 -1
- package/dist/cjs/vviinn-button_6.cjs.entry.js +1 -1
- package/dist/cjs/vviinn-camera_12.cjs.entry.js +259 -107
- package/dist/cjs/vviinn-carousel_10.cjs.entry.js +2 -53
- package/dist/cjs/vviinn-shop-the-look.cjs.entry.js +1 -1
- package/dist/cjs/vviinn-text-search.cjs.entry.js +1 -1
- package/dist/collection/components/vviinn-cropper/helpers/cropperOcrGate.js +36 -0
- package/dist/collection/components/vviinn-cropper/helpers/hasSelectedOcrFilter.js +4 -0
- package/dist/collection/components/vviinn-cropper/vviinn-cropper.js +108 -38
- package/dist/collection/components/vviinn-filters/vviinn-extended-filters.js +2 -2
- package/dist/collection/components/vviinn-results/vviinn-results.js +78 -3
- package/dist/collection/components/vviinn-suggestions/helpers.js +27 -10
- package/dist/collection/components/vviinn-suggestions/render-helpers.js +42 -15
- package/dist/esm/{index-D5yWioO8.js → index-DQQYIioG.js} +1 -1
- package/dist/esm/{search.store-C8LIDQfX.js → search.store-lTerE9Yh.js} +2 -2
- package/dist/esm/vviinn-button_6.entry.js +1 -1
- package/dist/esm/vviinn-camera_12.entry.js +259 -107
- package/dist/esm/vviinn-carousel_10.entry.js +2 -53
- package/dist/esm/vviinn-shop-the-look.entry.js +1 -1
- package/dist/esm/vviinn-text-search.entry.js +1 -1
- package/dist/storybook/helpers/industryToken.js +6 -8
- package/dist/types/components/vviinn-cropper/helpers/cropperOcrGate.d.ts +19 -0
- package/dist/types/components/vviinn-cropper/helpers/hasSelectedOcrFilter.d.ts +2 -0
- package/dist/types/components/vviinn-cropper/vviinn-cropper.d.ts +14 -0
- package/dist/types/components/vviinn-filters/vviinn-extended-filters.d.ts +51 -0
- package/dist/types/components/vviinn-results/vviinn-results.d.ts +1 -1
- package/dist/types/components/vviinn-suggestions/helpers.d.ts +1 -0
- package/dist/vviinn-widgets/p-08d39cc9.entry.js +1 -0
- package/dist/vviinn-widgets/{p-07211a51.entry.js → p-1e2f9b9f.entry.js} +1 -1
- package/dist/vviinn-widgets/{p-95423f25.entry.js → p-3daed25b.entry.js} +1 -1
- package/dist/vviinn-widgets/{p-DTASrq1W.js → p-CJAxBbhA.js} +1 -1
- package/dist/vviinn-widgets/{p-BpHXy3Gg.js → p-DhCqK4d8.js} +1 -1
- package/dist/vviinn-widgets/{p-f46ad1fd.entry.js → p-eb579723.entry.js} +1 -1
- package/{www/build/p-f48452fd.entry.js → dist/vviinn-widgets/p-f9f4e909.entry.js} +1 -1
- package/dist/vviinn-widgets/vviinn-widgets.esm.js +1 -1
- package/package.json +1 -1
- package/www/build/p-08d39cc9.entry.js +1 -0
- package/www/build/{p-07211a51.entry.js → p-1e2f9b9f.entry.js} +1 -1
- package/www/build/{p-95423f25.entry.js → p-3daed25b.entry.js} +1 -1
- package/www/build/{p-2d5777fa.js → p-4f556dc3.js} +1 -1
- package/www/build/{p-DTASrq1W.js → p-CJAxBbhA.js} +1 -1
- package/www/build/{p-BpHXy3Gg.js → p-DhCqK4d8.js} +1 -1
- package/www/build/{p-f46ad1fd.entry.js → p-eb579723.entry.js} +1 -1
- package/{dist/vviinn-widgets/p-f48452fd.entry.js → www/build/p-f9f4e909.entry.js} +1 -1
- package/www/build/vviinn-widgets.esm.js +1 -1
- package/www/index.html +1 -1
- package/dist/vviinn-widgets/p-e7b0a5b9.entry.js +0 -1
- package/www/build/p-e7b0a5b9.entry.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as t,r as e,c as i,H as o,g as s}from"./p-B89nCb_F.js";import{a as r,E as a}from"./p-CrEgr0jU.js";import{C as n,c,g as l,i as d}from"./p-Bc_yqCDQ.js";import{g as h,c as p,r as u,e as g,s as b}from"./p-Er2KrWw1.js";import{i as v,s as f,m,a as w,b as x,c as y,g as k}from"./p-DTASrq1W.js";import{S as C}from"./p-DvD16Fp_.js";import{i as S,a as j}from"./p-BadZr0hq.js";import{d as I}from"./p-BJxQCbNV.js";import{r as O}from"./p-BfTXDLup.js";import{o as T}from"./p-C7_qzUNW.js";const z=()=>t("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none"},t("path",{d:"M5 21C4.45 21 3.97917 20.8042 3.5875 20.4125C3.19583 20.0208 3 19.55 3 19V5C3 4.45 3.19583 3.97917 3.5875 3.5875C3.97917 3.19583 4.45 3 5 3H13C13.2833 3 13.5208 3.09583 13.7125 3.2875C13.9042 3.47917 14 3.71667 14 4C14 4.28333 13.9042 4.52083 13.7125 4.7125C13.5208 4.90417 13.2833 5 13 5H5V19H19V11C19 10.7167 19.0958 10.4792 19.2875 10.2875C19.4792 10.0958 19.7167 10 20 10C20.2833 10 20.5208 10.0958 20.7125 10.2875C20.9042 10.4792 21 10.7167 21 11V19C21 19.55 20.8042 20.0208 20.4125 20.4125C20.0208 20.8042 19.55 21 19 21H5ZM17 7H16C15.7167 7 15.4792 6.90417 15.2875 6.7125C15.0958 6.52083 15 6.28333 15 6C15 5.71667 15.0958 5.47917 15.2875 5.2875C15.4792 5.09583 15.7167 5 16 5H17V4C17 3.71667 17.0958 3.47917 17.2875 3.2875C17.4792 3.09583 17.7167 3 18 3C18.2833 3 18.5208 3.09583 18.7125 3.2875C18.9042 3.47917 19 3.71667 19 4V5H20C20.2833 5 20.5208 5.09583 20.7125 5.2875C20.9042 5.47917 21 5.71667 21 6C21 6.28333 20.9042 6.52083 20.7125 6.7125C20.5208 6.90417 20.2833 7 20 7H19V8C19 8.28333 18.9042 8.52083 18.7125 8.7125C18.5208 8.90417 18.2833 9 18 9C17.7167 9 17.4792 8.90417 17.2875 8.7125C17.0958 8.52083 17 8.28333 17 8V7ZM11.25 16L9.4 13.525C9.3 13.3917 9.16667 13.325 9 13.325C8.83333 13.325 8.7 13.3917 8.6 13.525L6.6 16.2C6.46667 16.3667 6.45 16.5417 6.55 16.725C6.65 16.9083 6.8 17 7 17H17C17.2 17 17.35 16.9083 17.45 16.725C17.55 16.5417 17.5333 16.3667 17.4 16.2L14.65 12.525C14.55 12.3917 14.4167 12.325 14.25 12.325C14.0833 12.325 13.95 12.3917 13.85 12.525L11.25 16Z",fill:"white"}));class P{constructor(t){this.cropperInstances=new Map,this.startCropBoxData=new Map,this.pendingImageLoads=new Map,this.config=t}destroyCropper(t){const e=this.cropperInstances.get(t);e&&(e.destroy(),this.cropperInstances.delete(t),this.startCropBoxData.delete(t));const i=this.pendingImageLoads.get(t);i&&(i.element.removeEventListener("load",i.handlers.load),i.element.removeEventListener("error",i.handlers.error),this.pendingImageLoads.delete(t))}initializeCropper(t,e,i){if(e!==i)return;this.cropperInstances.has(e)&&this.destroyCropper(e);const o=new n(t,Object.assign(Object.assign({},c),{cropstart:()=>this.handleCropStart(o,e),cropend:()=>this.handleCropEnd(o,e)}));this.cropperInstances.set(e,o)}handleCropStart(t,e){this.startCropBoxData.set(e,l(t))}handleCropEnd(t,e){const i=l(t),o=this.startCropBoxData.get(e);if(o&&d(o,i))return;const s=t.getImageData(),a={left:i.left-s.left,top:i.top-s.top,width:i.width,height:i.height},n=r({width:s.width,height:s.height})(a);this.config.onCropEnd(n,e)}activateCropperForSlide(t,e){if(this.cropperInstances.forEach(((e,i)=>{i!==t&&this.destroyCropper(i)})),!this.cropperInstances.has(t)){const i=e(t);if(!i)return;const o=()=>{this.pendingImageLoads.delete(t),i.offsetWidth>0&&this.initializeCropper(i,t,t)},s=()=>{this.pendingImageLoads.delete(t),console.warn(`Failed to load image for cropper at index ${t}`)};if(i.complete&&i.offsetWidth>0)o();else{const e={load:o,error:s};this.pendingImageLoads.set(t,{element:i,handlers:e}),i.addEventListener("load",e.load,{once:!0}),i.addEventListener("error",e.error,{once:!0})}}}destroyAll(){Array.from(this.cropperInstances.keys()).forEach((t=>this.destroyCropper(t)))}hasCropper(t){return this.cropperInstances.has(t)}updateCropperDimensions(t,e){if(this.cropperInstances.has(t)){this.destroyCropper(t);const i=e(t);i&&i.complete&&i.offsetWidth>0&&this.initializeCropper(i,t,t)}}}const V=t=>{if(!t)return null;const e=t.getBoundingClientRect();return{left:e.left,top:e.top,width:e.width,height:e.height}},M=v,D=(t,e,i,o)=>{const s=o||V(t);if(!s)return{x:0,y:0};const r=(e.left+e.width/2)*s.width,a=(e.top+e.height/2)*s.height,n=[a>s.height/2?"bottom":"top",r>s.width/2?"right":"left"].join("-"),c=M()?24:16,l=!M();let d=0,h=0;switch(n){case"top-left":d=l?c-32:c,h=l?c+6:c;break;case"top-right":d=l?32-c:-c,h=l?c+6:c;break;case"bottom-left":d=l?c-32:c,h=l?-c-6:-c;break;case"bottom-right":d=l?32-c:-c,h=l?-c-6:-c}const p=s.left+r+d,u=s.top+a+h;if(i){const t=i.getBoundingClientRect();return{x:p-t.left,y:u-t.top,anchor:n}}return{x:p,y:u,anchor:n}},A=async t=>{try{const e=await w("shopTheLook",t.imageUrl,t.token,t.apiPath,t.campaignId);return a.fold((t=>a.left(`Visual search failed: ${t.inner}`)),(t=>{var e,i;const o=(null===(i=null===(e=t.interactions)||void 0===e?void 0:e.suggestedSearchAreas)||void 0===i?void 0:i.map((t=>t.rectangle)))||[];return a.right({detectedObjects:o,searchResults:[],visualSearchId:t.requestId||null})}))(e)}catch(t){return a.left(`Visual search initialization failed: ${t}`)}},$=(t,e)=>[...t,...e&&e.trim()?e.split(",").map((t=>t.trim())).filter((t=>t.length>0)):[]],L=t=>({detectedObjects:[],searchCompleted:!1,searchResults:[],isVisible:!1,imageElement:t||null,imageBounds:null,visualSearchId:null,searchTriggered:!1,observerSetup:!1,refProcessed:!1});class E{constructor(t){this.imageStates=new Map,this.config=t}updateConfig(t){this.config=Object.assign(Object.assign({},this.config),t)}getImageState(t){return this.imageStates.has(t)||this.imageStates.set(t,L()),this.imageStates.get(t)}updateImageState(t,e){const i=this.getImageState(t);Object.assign(i,e),this.imageStates.set(t,i)}setupImageIntersectionObserver(t,e){if(this.getImageState(e).observerSetup)return;const i=new IntersectionObserver((t=>{t.forEach((t=>{this.updateImageVisibility(e,t.intersectionRatio>=this.config.threshold)}))}),{threshold:this.config.threshold,root:null,rootMargin:"0px"});i.observe(t),this.updateImageState(e,{observer:i,observerSetup:!0})}updateImageVisibility(t,e){var i;const o=this.getImageState(t),s=o.isVisible;if(s===e)return;e&&o.imageElement&&!o.imageBounds&&(o.imageBounds=V(o.imageElement)),this.updateImageState(t,{isVisible:e});const r=null!==(i=this.config.isModalOpen)&&void 0!==i&&i;this.shouldTriggerSearch(t,e,s,o,r)&&(this.updateImageState(t,{searchTriggered:!0}),this.config.onVisualSearchTrigger(t))}shouldTriggerSearch(t,e,i,o,s=!1){if(s)return!1;const r=e&&!1===i,a=!!this.config.token,n=!o.searchCompleted&&!o.searchTriggered,c=this.getTriggeredSearchCount()<this.config.totalImages;return r&&a&&n&&c}getTriggeredSearchCount(){return Array.from(this.imageStates.values()).filter((t=>t.searchTriggered)).length}setImageElement(t,e){this.updateImageState(t,{imageElement:e})}getImageElement(t){return this.getImageState(t).imageElement}setImageState(t,e){this.imageStates.set(t,e)}updateImageStateData(t,e,i,o,s){const r={detectedObjects:e,searchCompleted:i,searchResults:o};void 0!==s&&(r.visualSearchId=s),this.updateImageState(t,r)}disconnectAll(){this.imageStates.forEach((t=>{t.observer&&t.observer.disconnect()})),this.imageStates.clear()}getAllImageStates(){return new Map(this.imageStates)}hasImageState(t){return this.imageStates.has(t)}hasActiveSearches(){return Array.from(this.imageStates.values()).some((t=>t.searchTriggered&&!t.searchCompleted))}shiftIndicesForward(t=0){Array.from(this.imageStates.entries()).filter((([e])=>e>=t)).sort((([t],[e])=>e-t)).forEach((([t,e])=>{this.imageStates.delete(t),this.imageStates.set(t+1,e)}))}}const B=t=>({maxWidth:"100%",maxHeight:`${t}px`,width:"auto",height:v()?`${t}px`:"auto",objectFit:"contain"}),R={campaignTypeId:"VPR",campaignTypeName:"Similar Products",widgetVersion:"1.0.0"};"undefined"!=typeof window&&u();const F=class{constructor(o){e(this,o),this.vviinnShopTheLookDetectedObjectClick=i(this,"vviinnShopTheLookDetectedObjectClick"),this.vviinnShopTheLookProductClick=i(this,"vviinnShopTheLookProductClick"),this.vviinnShopTheLookModalClose=i(this,"vviinnShopTheLookModalClose"),this.imageUrls="",this.height=500,this.campaignId="",this.widgetStyle="rounded",this.showCropper=!1,this.uploadMode=!1,this.showMultipleImages=!1,this.cssUrl=null,this.productDetailsNewTab=!1,this.productDetailsRedirect=!0,this.selectedDetectedObject=null,this.showModal=!1,this.modalPosition=null,this.showDetailedView=!1,this.selectedProductIndex=0,this.modalImageIndex=0,this.swiperActiveIndex=0,this.totalImages=1,this.imageUrlsList=[],this.swiperKey="swiper-0",this.needNavigation=!1,this.showLoadingSpinner=!1,this.isSearchInProgress=!1,this.currentViewMode=null,this.isWidgetVisible=!1,this.uploadedImageUrls=[],this.isManualObjectSelection=!1,this.isNavigatingToSlide=!1,this.resetDetailedView=()=>{this.showDetailedView=!1,this.selectedProductIndex=0},this.handleResize=()=>{this.checkViewModeChange(),this.updateNavigationVisibility(),this.showCropper&&this.cropperManager&&requestAnimationFrame((()=>{this.cropperManager.updateCropperDimensions(this.swiperActiveIndex,(t=>this.imageStore.getImageElement(t)))}))},this.handleDocumentClick=t=>{if(!this.showModal||this.showLoadingSpinner)return;const e=t.target;e&&(this.modalContentRef&&this.modalContentRef.contains(e)||e.closest("vviinn-detected-object")||this.handleModalClose())},this.checkViewModeChange=()=>{const t=M()?"desktop":"mobile";t!==this.currentViewMode&&(this.currentViewMode=t,this.showModal&&this.handleModalClose(),this.swiperKey=`swiper-${Date.now()}`)},this.updateNavigationVisibility=()=>{if(this.imageElement&&this.imageElement.offsetWidth>0){const t=window.innerWidth-100,e=Math.floor(t/(this.imageElement.offsetWidth+20));this.needNavigation=this.totalImages>e}else this.needNavigation=this.totalImages>1},this.handleSwiperPointerDown=t=>{var e;const i=(t=>t.target.closest("swiper-slide"))(t);if(!i)return;const o=((t,e)=>e?Array.from(e.querySelectorAll("swiper-slide")||[]).indexOf(t):-1)(i,this.el.shadowRoot);if(-1===o)return;const s=null===(e=this.cropperManager)||void 0===e?void 0:e.hasCropper(o);this.updateSwiperAllowTouchMove(!s)},this.handleSwiperScroll=()=>{this.showModal&&this.handleModalClose()},this.handleVisualSearchTrigger=t=>{this.showModal||(this.performVisualSearchForImage(t),this.updateSearchingState())},this.handleDetectedObjectClick=async(t,e,i=this.swiperActiveIndex)=>{var o,s;if(!this.token)return;M()&&!this.isCurrentSlide(i)?(this.isManualObjectSelection=!0,this.isNavigatingToSlide=!0,this.swiperActiveIndex=i,this.navigateToSlide(i),this.selectedDetectedObject=t,this.modalImageIndex=i,await new Promise((t=>setTimeout((()=>{this.isNavigatingToSlide=!1,requestAnimationFrame((()=>requestAnimationFrame(t)))}),300)))):(this.selectedDetectedObject=t,this.modalImageIndex=i),this.showCropper&&((null===(s=null===(o=this.cropperManager)||void 0===o?void 0:o.hasCropper)||void 0===s?void 0:s.call(o,i))||this.activateCropperForSlide(i)),this.isManualObjectSelection=!1,this.showLoadingSpinner=!0,this.showModal=!1,this.resetDetailedView();const r=this.getImageBounds(i),n=this.imageStore.getImageElement(i)||this.imageElement;r&&n&&(this.modalPosition=D(n,t,this.el,r));const c=this.imageStore.getImageState(i),l={detectedObject:t,imageElement:n,containerElement:this.el,token:this.token,visualSearchId:(null==c?void 0:c.visualSearchId)||f.visualSearchId||null,campaignId:this.campaignId,apiPath:this.apiPath,imageBounds:r,isSearchInProgress:this.isSearchInProgress,setSearchInProgress:t=>{this.isSearchInProgress=t}},d=await(async t=>{const{imageElement:e,detectedObject:i,containerElement:o,visualSearchId:s,token:r,imageBounds:n,campaignId:c,apiPath:l,isSearchInProgress:d,setSearchInProgress:h}=t;if(d)return a.left("Search already in progress");h(!0);try{if(!e)return a.left("Image element is missing");f.searchArea=i;const t=await m("shopTheLook",s||null,r,l,c);return a.fold((t=>a.left(`Visual search failed: ${t.inner}`)),(t=>{var s;const r=(null===(s=t.data)||void 0===s?void 0:s.products)||[],c=D(e,i,o,n);return a.right({searchResults:r,modalPosition:c})}))(t)}catch(t){return a.left(`Visual search failed: ${t}`)}finally{h(!1)}})(l);a.fold((t=>{t.includes("Search already in progress")||(console.error("Visual search failed:",t),this.showLoadingSpinner=!1)}),(t=>{t.searchResults&&t.searchResults.length>0&&this.imageStore.updateImageState(i,{searchResults:t.searchResults}),this.showLoadingSpinner=!1,t.searchResults&&t.searchResults.length>0&&this.isCurrentSlide(i)&&(this.showModal=!0),this.vviinnShopTheLookDetectedObjectClick.emit(Object.assign(Object.assign({},R),{detectedObjectId:`detected-${i}-${e}`,product:t.searchResults[0]||null}))}))(d)},this.performVisualSearch=async(t=this.swiperActiveIndex)=>{const e=this.imageUrlsList[t];if(!this.token||!e)return;const i=this.isCurrentSlide(t);i&&(this.showLoadingSpinner=!0);const o={imageUrl:e,token:this.token,campaignId:this.campaignId,apiPath:this.apiPath},s=await A(o);a.fold((e=>{console.error(`Visual search failed for image ${t}:`,e),this.imageStore.updateImageState(t,{searchCompleted:!0}),i&&(this.showLoadingSpinner=!1)}),(e=>{this.imageStore.updateImageStateData(t,e.detectedObjects,!0,e.searchResults,e.visualSearchId||null);const o=this.imageStore.getImageState(t);i&&(this.showLoadingSpinner=!1),o.detectedObjects.length>0&&i&&this.isCurrentSlide(t)&&!this.showModal&&this.scheduleAutoSelectFirstObject(t,o.detectedObjects),this.imageStore.updateImageState(t,{searchCompleted:!0})}))(s)},this.handleProductClick=t=>{this.vviinnShopTheLookProductClick.emit(Object.assign(Object.assign({},R),{detectedObjectId:this.selectedDetectedObject?`detected-${Date.now()}`:"",product:t}))},this.activateCropperForSlide=t=>{var e;null===(e=this.cropperManager)||void 0===e||e.activateCropperForSlide(t,(t=>this.imageStore.getImageElement(t)))},this.debouncedCropSearch=(t,e)=>{this.cropDebounceTimeout&&clearTimeout(this.cropDebounceTimeout),this.cropDebounceTimeout=window.setTimeout((()=>{this.cropDebounceTimeout=void 0,this.handleDetectedObjectClick(t,0,e)}),500)},this.handleModalClose=t=>{this.showLoadingSpinner||t&&t.target!==t.currentTarget||(this.clearModalAndSlideState(),this.vviinnShopTheLookModalClose.emit(R))},this.handleProductDetailsClick=(t,e)=>{this.selectedProductIndex=e,this.showDetailedView=!0},this.handleNavigateProduct=t=>{const e=this.imageStore.getImageState(this.modalImageIndex);"prev"===t&&this.selectedProductIndex>0?this.selectedProductIndex--:"next"===t&&this.selectedProductIndex<e.searchResults.length-1&&this.selectedProductIndex++},this.renderDetectedObjectsWrapper=e=>{const i=this.imageStore.getImageState(e);return((t,e)=>{var i;return!!t&&(M()?t.searchCompleted&&!!(null===(i=t.detectedObjects)||void 0===i?void 0:i.length):e)})(i,this.isCurrentSlide(e))?(e=>{const{imageBounds:i,detectedObjects:o,initialSearchCompleted:s,selectedDetectedObject:r,basicEventData:a,onSelectObject:n}=e;return i&&o.length&&s?o.map(((e,o)=>t("vviinn-detected-object",{key:`detected-${o}`,detectedObject:e,selectedDetectedObject:r,basicEventData:a,imageBounds:i,showInWidget:!1,style:{zIndex:"10"},onVviinnSelectObject:t=>{t.stopPropagation(),n(t.detail.detectedObject,o)}}))):null})({imageBounds:this.getImageBounds(e),detectedObjects:i.detectedObjects,initialSearchCompleted:i.searchCompleted,selectedDetectedObject:this.selectedDetectedObject,basicEventData:R,onSelectObject:(t,i)=>this.handleDetectedObjectClick(t,i,e)}):null},this.handleSlideChange=t=>{var e;const i=g(t);if(void 0!==i){if(i!==this.swiperActiveIndex&&(this.swiperActiveIndex=i),this.clearModalAndSlideState(),this.shouldManageDragging){const t=null===(e=this.cropperManager)||void 0===e?void 0:e.hasCropper(i);this.updateSwiperAllowTouchMove(!t)}setTimeout((()=>{this.isNavigatingToSlide=!1,this.ensureSlideSearchTriggered(this.swiperActiveIndex)}),100)}},this.handleImageRef=(t,e)=>{const i=this.imageStore.getImageState(e);if((!(null==i?void 0:i.refProcessed)||this.imageStore.getImageElement(e)!==t)&&(this.imageStore.updateImageState(e,{refProcessed:!0}),(this.isCurrentSlide(e)||this.totalImages<=1)&&(this.imageElement=t),t)){if(this.imageStore.setImageElement(e,t),this.imageStore.hasImageState(e)){const i=this.imageStore.getImageState(e);i.imageElement=t,this.imageStore.setImageState(e,i)}else{const i=L(t);this.imageStore.setImageState(e,i),this.imageStore.setImageState(e,i)}M()&&this.setupObserverAfterSwiper(t,e);const i=()=>{this.initializeImageForCropper(t,e),this.pendingUploadData&&0===e&&(this.imageStore.updateImageStateData(0,this.pendingUploadData.detectedObjects,!0,[],this.pendingUploadData.visualSearchId),this.pendingUploadData.detectedObjects.length>0&&this.scheduleAutoSelectFirstObject(0,this.pendingUploadData.detectedObjects),this.pendingUploadData=null)};t.complete&&t.offsetWidth>0?i():t.addEventListener("load",i,{once:!0})}},this.updateImageBoundsForElement=(t,e)=>{requestAnimationFrame((()=>{(this.isCurrentSlide(e)||this.totalImages<=1)&&this.updateNavigationVisibility()}))},this.initializeImageForCropper=(t,e)=>{var i;this.updateImageBoundsForElement(t,e),this.isCurrentSlide(e)&&(null===(i=this.cropperManager)||void 0===i||i.initializeCropper(t,e,this.swiperActiveIndex))},this.performVisualSearchForImage=async t=>{const e=this.imageUrlsList[t];if(!this.token||!e)return;const i=this.isCurrentSlide(t);i&&(this.showLoadingSpinner=!0);const o={imageUrl:e,token:this.token,campaignId:this.campaignId,apiPath:this.apiPath},s=await A(o);a.fold((e=>{console.error(`Visual search failed for image ${t}:`,e),this.imageStore.updateImageStateData(t,[],!0,[],null),this.updateSearchingState(i)}),(e=>{this.imageStore.updateImageStateData(t,e.detectedObjects,!0,e.searchResults,e.visualSearchId||null),this.updateSearchingState(i),e.detectedObjects.length>0&&this.isCurrentSlide(t)&&!this.showModal&&!this.isManualObjectSelection&&this.scheduleAutoSelectFirstObject(t,e.detectedObjects)}))(s)},this.pendingUploadData=null,this.handleFileUpload=async t=>{var e;const i=t.target,o=null===(e=i.files)||void 0===e?void 0:e[0];if(!o)return;this.showLoadingSpinner=!0;const s={file:o,token:this.token,campaignId:this.campaignId,apiPath:this.apiPath},r=await(async t=>{const{file:e,token:i,campaignId:o,apiPath:s}=t;try{const t=(await x(e)()).src,r=await y("shopTheLook",i,s,o)(e);return a.fold((t=>a.left(`Upload failed: ${t.inner}`)),(e=>{var i,o;const s=(null===(o=null===(i=e.interactions)||void 0===i?void 0:i.suggestedSearchAreas)||void 0===o?void 0:o.map((t=>t.rectangle)))||[];return a.right({imageUrl:t,detectedObjects:s,visualSearchId:e.requestId||null})}))(r)}catch(t){return a.left(`Failed to process image: ${t}`)}})(s);a.fold((t=>{console.error(t),this.showLoadingSpinner=!1}),(t=>{var e;this.clearModalAndSlideState(),this.showCropper&&(null===(e=this.cropperManager)||void 0===e||e.destroyAll()),this.imageStore.shiftIndicesForward(0),this.pendingUploadData={detectedObjects:t.detectedObjects,visualSearchId:t.visualSearchId},this.uploadedImageUrls=[t.imageUrl,...this.uploadedImageUrls],this.imageUrlsList=$(this.uploadedImageUrls,this.imageUrls),this.totalImages=this.imageUrlsList.length,this.swiperActiveIndex=0,this.showLoadingSpinner=!1,requestAnimationFrame((()=>{this.navigateToSlide(0)}))}))(r),i.value=""},this.handleNavigatePrev=()=>{this.swiperActiveIndex>0&&this.updateSlideIndex(this.swiperActiveIndex-1)},this.handleNavigateNext=()=>{this.swiperActiveIndex<this.totalImages-1&&this.updateSlideIndex(this.swiperActiveIndex+1)},this.updateSlideIndex=t=>{this.isNavigatingToSlide=!0,this.swiperActiveIndex=t,this.navigateToSlide(t),this.clearModalAndSlideState(),setTimeout((()=>{this.isNavigatingToSlide=!1;const e=this.imageStore.getImageState(t);e.searchCompleted||e.searchTriggered?this.performVisualSearchIfReady():this.forceSearchForSlide(t),this.showCropper&&this.activateCropperForSlide(t)}),100)},this.showNavigation=()=>this.needNavigation&&M()||this.showCropper,this.renderSwiperWrapper=()=>{const e=!this.showCropper||M();return(e=>{const{imageUrls:i,swiperActiveIndex:o,height:s,onSlideChange:r,onImageRef:a,renderDetectedObjects:n,onSwiperRef:c,swiperKey:l,allowTouchMove:d=!0}=e;if(!i||i.length<=1)return t("div",{class:"image-container"},t("img",{ref:t=>a(t,0),src:(null==i?void 0:i[0])||"",alt:"Shop-the-Look",class:"main-image",style:B(s)}),n(0));const u=v(),g=h(u);return t("div",{class:"swiper-container-wrapper"},t("div",{class:"swiper-wrapper "+(u?"desktop-carousel":"mobile-slider")},t("swiper-container",{key:l,ref:t=>{t&&!t.swiper&&p(t,{isDesktop:u,initialSlide:o,pagination:!0,keyboard:!0,allowTouchMove:d}),c&&c(t)},onSlideChange:r,style:g,pagination:u?void 0:"true","pagination-clickable":u?void 0:"true"},i.map(((e,i)=>t("swiper-slide",{key:i},t("div",{class:"image-container"},t("img",{ref:t=>a(t,i),src:e,alt:`Shop-the-Look ${i+1}`,class:"main-image",style:B(s)}),n(i))))))))})({imageUrls:this.imageUrlsList,swiperActiveIndex:this.swiperActiveIndex,height:this.height,detectedObjects:this.getCurrentImageState().detectedObjects,onSlideChange:this.handleSlideChange,onImageRef:this.handleImageRef,renderDetectedObjects:this.renderDetectedObjectsWrapper,swiperKey:this.swiperKey,allowTouchMove:e})},this.renderModalWrapper=()=>(e=>{const{showModal:i,selectedDetectedObject:o,modalPosition:s,searchResults:r,onProductClick:a,showDetailedView:n=!1,selectedProductIndex:c=0,onProductDetailsClick:l,onBackToGrid:d,currencySign:h,locale:p,numberLocale:u,showMultipleImages:g=!1,modalContentRef:b}=e;if(!i||!o||!(null==r?void 0:r.length))return null;const f=!v();return t("div",{ref:b,class:"modal-content-wrapper "+(f?"mobile-modal":"desktop-modal"),style:s?{"--modal-x":`${s.x}px`,"--modal-y":`${s.y}px`,"--modal-anchor":s.anchor}:{},onClick:t=>t.stopPropagation()},t("div",{class:"modal-body"},t("div",{class:"product-grid-container "+(n?"hidden":"")},r.length>0&&(e=>{const{searchResults:i,onProductClick:o,onProductDetailsClick:s}=e;if(!i.length)return null;const r=i.slice(0,4);return t("div",{class:"search-results-grid"},r.map(((e,i)=>{var r,a;return t("div",{key:`${e.productId}-${i}`,class:"result-item",onClick:()=>{s?s(e,i):o(e)}},t("div",{class:"result-image"},t("vviinn-image",{width:120,alt:e.title||"",imageTitle:e.title||"",src:(null===(r=e.image)||void 0===r?void 0:r.thumbnail)||(null===(a=e.image)||void 0===a?void 0:a.original)||"",responsive:!0,imageResolutionWidth:300})))})))})({searchResults:r,onProductClick:a,onProductDetailsClick:l})),t("div",{class:"product-details-container "+(n?"":"hidden")},r.length>0&&(e=>{var i,o,s,r;const{searchResults:a,selectedProductIndex:n,onProductClick:c,onBackToGrid:l,currencySign:d,locale:h,numberLocale:p,showMultipleImages:u=!1}=e;if(!a.length)return null;const g=a[n];return g?t("div",{class:"product-details"},t("div",{class:"product-header"},t("button",{class:"back-to-grid-button",onClick:l},t(C,null))),t("div",{class:"product-content"},t("div",{class:"product-details-card-wrapper"},t("vviinn-product-card",{key:g.productId,product:g,class:"product-details-card",productId:g.productId||"",productTitle:g.title||"",brand:g.brand,price:g.price.actual,salePrice:g.price.sale,addPriceContainer:!0,image:null!==(r=null!==(o=null===(i=g.image)||void 0===i?void 0:i.thumbnail)&&void 0!==o?o:null===(s=g.image)||void 0===s?void 0:s.original)&&void 0!==r?r:"",images:g.images,showMultipleImages:u,imageResolutionWidth:300,imageWidth:v()?160:120,currencySign:d||"",locale:h,numberLocale:p,deeplink:g.deeplink,onVviinnProductClick:()=>c(g)})))):null})({searchResults:r,selectedProductIndex:c,onProductClick:a,currencySign:h,locale:p,numberLocale:u,showMultipleImages:g,onBackToGrid:d}))))})({showModal:this.showModal,selectedDetectedObject:this.selectedDetectedObject,modalPosition:this.modalPosition,searchResults:this.imageStore.getImageState(this.modalImageIndex).searchResults,onProductClick:this.handleProductClick,showDetailedView:this.showDetailedView,selectedProductIndex:this.selectedProductIndex,onProductDetailsClick:this.handleProductDetailsClick,onBackToGrid:this.resetDetailedView,currencySign:this.effectiveCurrencySign,locale:this.locale,numberLocale:this.effectiveNumberLocale,showMultipleImages:this.showMultipleImages,modalContentRef:t=>{this.modalContentRef=t}})}handleProductCardClick(t){var e,i;const{productId:o,clickEvent:s}=t.detail,r=null===(e=this.imageStore)||void 0===e?void 0:e.getImageState(this.modalImageIndex),a=null===(i=null==r?void 0:r.searchResults)||void 0===i?void 0:i.find((t=>t.productId===o));(null==a?void 0:a.deeplink)&&T(a.deeplink,s,this.productDetailsRedirect,this.productDetailsNewTab)}async componentWillLoad(){await S(this.locale),this.imageUrlsList=$(this.uploadedImageUrls,this.imageUrls),this.totalImages=this.imageUrlsList.length,this.currentViewMode=M()?"desktop":"mobile",this.updateNavigationVisibility();M();this.imageStore=new E({threshold:.01,token:this.token,isWidgetVisible:this.isWidgetVisible,totalImages:this.totalImages,isModalOpen:this.showModal,onVisualSearchTrigger:this.handleVisualSearchTrigger.bind(this)}),this.showCropper&&(this.cropperManager=new P({onCropEnd:(t,e)=>{this.debouncedCropSearch(t,e)}}))}componentDidLoad(){window.addEventListener("resize",this.handleResize),document.addEventListener("click",this.handleDocumentClick),this.initializeContainerVisibilityTracking(),this.setupSwiperEventListener(),this.setupSwiperDragEventListeners()}onViewModeChange(t){t&&requestAnimationFrame((()=>{this.setupSwiperEventListener(),this.setupSwiperDragEventListeners()}))}onShowModalChange(t){var e;null===(e=this.imageStore)||void 0===e||e.updateConfig({isModalOpen:t})}clearModalAndSlideState(){this.showModal=!1,this.selectedDetectedObject=null,this.modalPosition=null,this.resetDetailedView(),this.modalImageIndex=0,this.autoSelectTimeout&&(clearTimeout(this.autoSelectTimeout),this.autoSelectTimeout=void 0)}updateSearchingState(t=!1){var e,i;this.showLoadingSpinner=null!==(i=null===(e=this.imageStore)||void 0===e?void 0:e.hasActiveSearches())&&void 0!==i&&i,t&&(this.showLoadingSpinner=!1)}getCurrentImageState(){var t;return null===(t=this.imageStore)||void 0===t?void 0:t.getImageState(this.swiperActiveIndex)}isCurrentSlide(t){return t===this.swiperActiveIndex}get shouldManageDragging(){return this.showCropper&&M()}get effectiveCurrencySign(){var t;return null!==(t=this.currencySign)&&void 0!==t?t:I.currencySign}get effectiveNumberLocale(){return this.numberLocale||this.locale||I.locale}disconnectedCallback(){var t,e,i,o;window.removeEventListener("resize",this.handleResize),document.removeEventListener("click",this.handleDocumentClick),null===(t=this.intersectionObserver)||void 0===t||t.disconnect(),null===(e=this.imageStore)||void 0===e||e.disconnectAll(),null===(i=this.cropperManager)||void 0===i||i.destroyAll(),this.autoSelectTimeout&&clearTimeout(this.autoSelectTimeout),this.cropDebounceTimeout&&clearTimeout(this.cropDebounceTimeout);const s=null===(o=this.el.shadowRoot)||void 0===o?void 0:o.querySelector("swiper-container");s&&(s.removeEventListener("swiperslidechange",this.handleSlideChange),s.removeEventListener("swipersliderfirstmove",this.handleSwiperScroll),this.shouldManageDragging&&s.removeEventListener("pointerdown",this.handleSwiperPointerDown))}initializeContainerVisibilityTracking(){M();this.intersectionObserver=b(this.el,{threshold:.01,onIntersectionChange:t=>{var e;const i=this.isWidgetVisible;this.isWidgetVisible=t,null===(e=this.imageStore)||void 0===e||e.updateConfig({isWidgetVisible:this.isWidgetVisible,isModalOpen:this.showModal}),!i&&this.isWidgetVisible&&this.performVisualSearchIfReady()}})}setupSwiperEventListener(){var t;const e=null===(t=this.el.shadowRoot)||void 0===t?void 0:t.querySelector("swiper-container");e&&setTimeout((()=>{e.addEventListener("swiperslidechange",this.handleSlideChange)}),200)}setupSwiperDragEventListeners(){var t;const e=null===(t=this.el.shadowRoot)||void 0===t?void 0:t.querySelector("swiper-container");e&&setTimeout((()=>{e.addEventListener("swipersliderfirstmove",this.handleSwiperScroll,{passive:!0}),this.shouldManageDragging&&e.addEventListener("pointerdown",this.handleSwiperPointerDown,{capture:!0})}),200)}updateSwiperAllowTouchMove(t){var e;const i=null===(e=this.el.shadowRoot)||void 0===e?void 0:e.querySelector("swiper-container"),o=null==i?void 0:i.swiper;void 0!==(null==o?void 0:o.allowTouchMove)&&(o.allowTouchMove=t)}setupObserverAfterSwiper(t,e){setTimeout((()=>{var i;const o=null===(i=this.el.shadowRoot)||void 0===i?void 0:i.querySelector("swiper-container");if(o){const i=()=>{this.imageStore.setupImageIntersectionObserver(t,e)};(null==o?void 0:o.swiper)?i():(o.addEventListener("swiperinit",i,{once:!0}),setTimeout((()=>{const i=this.imageStore.getImageState(e);(null==i?void 0:i.observerSetup)||this.imageStore.setupImageIntersectionObserver(t,e)}),1e3))}}),200)}performVisualSearchIfReady(){const t=M();if(this.imageStore.updateConfig({isWidgetVisible:this.isWidgetVisible,token:this.token,totalImages:this.totalImages,isModalOpen:this.showModal}),this.token&&this.isWidgetVisible){const e=this.imageStore.getImageState(this.swiperActiveIndex);if(null==e?void 0:e.searchCompleted)this.activateCurrentSlide();else if(1===this.totalImages||!t||this.showCropper){t&&1!==this.totalImages&&!this.showCropper||this.markCurrentImageAsVisible();const e=this.imageStore.getImageState(this.swiperActiveIndex);(null==e?void 0:e.searchTriggered)||(this.imageStore.updateImageState(this.swiperActiveIndex,{searchTriggered:!0}),this.performVisualSearch(this.swiperActiveIndex)),this.showCropper&&this.activateCropperForSlide(this.swiperActiveIndex)}}}markCurrentImageAsVisible(){const t=this.imageStore.getImageState(this.swiperActiveIndex);t&&(t.isVisible=!0,this.imageStore.setImageState(this.swiperActiveIndex,t))}navigateToSlide(t){var e;const i=null===(e=this.el.shadowRoot)||void 0===e?void 0:e.querySelector("swiper-container");(null==i?void 0:i.swiper)&&i.swiper.slideTo(t)}forceSearchForSlide(t){const e=this.imageStore.getImageState(t);e&&(e.isVisible=!0,this.imageStore.setImageState(t,e)),this.imageStore.updateImageState(t,{searchTriggered:!0}),this.performVisualSearch(t)}ensureSlideSearchTriggered(t){const e=this.imageStore.getImageState(t);e.searchCompleted||e.searchTriggered?e.searchCompleted?this.activateCurrentSlide():this.performVisualSearchIfReady():this.forceSearchForSlide(t)}activateCurrentSlide(){var t;this.markCurrentImageAsVisible();const e=this.imageStore.getImageState(this.swiperActiveIndex);(null===(t=null==e?void 0:e.detectedObjects)||void 0===t?void 0:t.length)>0&&!this.showModal&&this.scheduleAutoSelectFirstObject(this.swiperActiveIndex,e.detectedObjects)}getCropperBounds(t){var e,i;if(this.showCropper&&(null===(e=this.cropperManager)||void 0===e?void 0:e.hasCropper)&&this.cropperManager.hasCropper(t)){const t=null===(i=this.el.shadowRoot)||void 0===i?void 0:i.querySelector(".cropper-container .cropper-canvas img");if(t&&t.offsetWidth>0)return V(t)}return null}getStoreBounds(t){const e=this.imageStore.getImageElement(t);return e&&e.offsetWidth>0?V(e):null}getVisibleSlideBounds(t){var e;const i=Array.from((null===(e=this.el.shadowRoot)||void 0===e?void 0:e.querySelectorAll("swiper-slide img"))||[]).filter((t=>!t.closest(".cropper-container")&&t.offsetWidth>0));return i&&i[t]?V(i[t]):null}getImageBounds(t){return this.getCropperBounds(t)||this.getStoreBounds(t)||this.getVisibleSlideBounds(t)}scheduleAutoSelectFirstObject(t,e){const i=!(null==e?void 0:e.length),o=!this.isCurrentSlide(t);i||o||this.autoSelectTimeout||this.isManualObjectSelection||this.isNavigatingToSlide||(this.autoSelectTimeout=window.setTimeout((()=>{if(this.autoSelectTimeout=void 0,!this.isCurrentSlide(t)||this.showModal||this.isNavigatingToSlide)return;const i=e[0];i&&this.handleDetectedObjectClick(i,0,t)}),500))}render(){return t(o,{key:"810afce8775ce69f39d3ddb19dbfafc081f90b95",exportparts:j},O(this.cssUrl),t("div",{key:"ab678e97ff5878b7d68fb63fa6ad0344f55e56eb",class:`shop-the-look-container ${this.showModal?"modal-open":""} ${this.showCropper?"with-cropper":""} widget-style-${this.widgetStyle}`},t("div",{key:"78fe26aa58f8c8da8a49a0a1f20d27025de4270e",class:"main-content"},this.renderSwiperWrapper(),this.showLoadingSpinner&&t("div",{key:"02ee522ea4f2f60a5becae75834123f7f2059d31",class:"search-loader"},t("vviinn-preloader",{key:"209d5b1caf48f57ef4ab0f143e77c83e9547403d"}))),this.renderModalWrapper(),t("div",{key:"8a92411b196592578c1811e88b20b5c79d955751",class:"actions-container",part:"shop-the-look-actions-container"},this.uploadMode&&t("div",{key:"283494b6ed7e2279ebc12ba00bff48679bd84515",class:"upload-button-container"},t("button",{key:"6843b123419ab70e75c38d2ef1fc6f95724198f6",class:"upload-button",part:"shop-the-look-upload-button",onClick:()=>{var t;return null===(t=this.fileInput)||void 0===t?void 0:t.click()},disabled:this.showLoadingSpinner},t("span",{key:"921d7b5487c68d1e5f3095415d7d195a76de5a53",class:"upload-button-icon",part:"shop-the-look-upload-button-icon"},t("slot",{key:"c5a149403be172d546d34e4271a04b6bf7184cf2",name:"vviinn-image-upload-icon"},t(z,{key:"363804dec9e24cf917d8da7244285f14dd874e61"}))),t("span",{key:"fde616b05fc029c9cc45e063483f0401efdf2ba5",class:"upload-button-text",part:"shop-the-look-upload-button-text"},t("slot",{key:"756831c7b944e0f651b7907bf522375a35acb247",name:"upload-button-text"}))),t("input",{key:"6489e9ccae6426f4a96d57c2bec5b9c41b77916b",type:"file",class:"visually-hidden",accept:k(),onChange:this.handleFileUpload,ref:t=>this.fileInput=t})),this.showNavigation()&&(i=this.totalImages,s=this.handleNavigatePrev,r=this.handleNavigateNext,t("div",{class:"carousel-navigation"},t("button",{class:"swiper-button-prev "+(0===(e=this.swiperActiveIndex)?"disabled":""),onClick:()=>s()},t(C,null)),t("button",{class:"swiper-button-next "+(e===i-1?"disabled":""),onClick:()=>r()},t(C,null)))))));var e,i,s,r}get el(){return s(this)}static get watchers(){return{currentViewMode:["onViewModeChange"],showModal:["onShowModalChange"]}}};F.style=":host{--font-family-base:Inter, system-ui, sans-serif;--font-family-mono:monospace;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--font-size-display:32px;--font-size-title:24px;--font-size-headline:18px;--font-size-label-large:16px;--font-size-label:14px;--font-size-body-large:16px;--font-size-body:14px;--font-size-caption:12px;--line-height-display:40px;--line-height-title:32px;--line-height-headline:24px;--line-height-label-large:24px;--line-height-label:20px;--line-height-body-large:24px;--line-height-body:20px;--line-height-caption:16px;--letter-spacing-title:0px;--letter-spacing-headline:0px;--letter-spacing-label-large:0px;--letter-spacing-label:0px;--letter-spacing-body-large:0px;--letter-spacing-body:0px;--letter-spacing-caption:0px;--font-weight-400:400;--font-weight-500:500;--font-weight-600:600;--font-weight-700:700;--spacing-none:0px;--spacing-25:2px;--spacing-50:4px;--spacing-75:6px;--spacing-100:8px;--spacing-125:10px;--spacing-150:12px;--spacing-200:16px;--spacing-250:20px;--spacing-300:24px;--spacing-400:32px;--spacing-500:40px;--spacing-600:48px;--border-radius-none:0px;--border-radius-25:2px;--border-radius-50:4px;--border-radius-100:8px;--border-radius-150:12px;--border-radius-200:16px;--border-radius-300:24px;--border-radius-400:32px;--border-radius-full:9999px;--stroke-width-none:0px;--stroke-width-25:1px;--stroke-width-50:2px;--stroke-width-75:3px;--stroke-width-100:4px;--stroke-width-150:6px;--stroke-width-200:8px;--stroke-width-300:12px;--product-card-widget-min-width:135px;--product-card-results-min-width:250px;--image-set-mode-min-width:155px;--source-card-set-mode-max-width:500px;--filter-blur-none:0px;--filter-blur-100:8px;--filter-blur-150:12px;--filter-blur-200:16px;--color-bg-base:#ffffff;--color-bg-inverse:#161616;--color-border-00:#ffffff;--color-border-01:#f4f4f4;--color-border-02:#e0e0e0;--color-border-03:#c6c6c6;--color-border-inverse-00:#161616;--color-border-inverse-01:#393939;--color-field-01:#ffffff;--color-field-02:#f4f4f4;--color-icon-primary:#161616;--color-icon-secondary:#525252;--color-icon-helper:#8d8d8d;--color-icon-on-color:#ffffff;--color-icon-inverse:#ffffff;--color-icon-disabled:#16161640;--color-text-primary:#161616;--color-text-secondary:#707070;--color-text-helper:#8d8d8d;--color-text-placeholder:#a8a8a8;--color-text-on-color:#ffffff;--color-text-inverse:#ffffff;--color-text-disabled:#16161640;--button-bg-color-primary:#000000;--button-bg-color-primary-hover:#161616;--button-bg-color-primary-active:#1e1e1e;--button-bg-color-secondary:#f4f4f4;--button-bg-color-secondary-hover:#e0e0e0;--button-bg-color-secondary-active:#c6c6c6;--button-bg-color-ghost-hover:#f4f4f4;--button-bg-color-ghost-active:#eaeaea;--button-bg-color-frosted:#6f6f6f66;--button-bg-color-frosted-hover:#6f6f6f80;--button-bg-color-frosted-active:#6f6f6f99;--button-bg-color-disabled:#e0e0e0;--button-bg-color-positive:#dcfce7;--surface-bg-color-01:#f4f4f4;--surface-bg-color-01-hover:#eaeaea;--surface-bg-color-01-active:#e0e0e0;--surface-bg-color-02:#ffffff;--surface-bg-color-inverse:#262626;--surface-bg-color-inverse-hover:#303030;--surface-bg-color-inverse-active:#393939;--surface-bg-color-disabled:#e0e0e0;--surface-bg-color-shadow-01:#dddddd;--surface-bg-color-shadow-02:#c6c6c6;--chip-bg-color-primary:#161616;--chip-bg-color-primary-hover:#1e1e1e;--chip-bg-color-primary-active:#262626;--chip-bg-color-subtle:#f4f4f4;--chip-bg-color-subtle-hover:#eaeaea;--chip-bg-color-subtle-active:#e0e0e0;--chip-bg-color-outline-hover:#f4f4f4;--chip-bg-color-outline-active:#eaeaea;--label-bg-color-accent:#ff3944;--sidebar-animation-duration-default:0.5s;--search-modal-animation-duration-default:0.25s;--search-modal-animation-duration-mobile-default:0.35s;}.cropper-container{direction:ltr;font-size:0;line-height:0;position:relative;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cropper-container img{backface-visibility:hidden;display:block;height:100%;image-orientation:0deg;max-height:none !important;max-width:none !important;min-height:0 !important;min-width:0 !important;width:100%}.cropper-wrap-box,.cropper-canvas,.cropper-drag-box,.cropper-crop-box,.cropper-modal{bottom:0;left:0;position:absolute;right:0;top:0}.cropper-wrap-box,.cropper-canvas{overflow:hidden}.cropper-drag-box{background-color:#fff;opacity:0}.cropper-modal{background-color:#000;opacity:0.4}.cropper-view-box{display:block;height:100%;overflow:hidden;width:100%;border-radius:5px}.cropper-face,.cropper-point{display:block;height:100%;opacity:0.1;position:absolute;width:100%}.cropper-face{left:0;top:0;border-radius:5px}.cropper-point{--cropper-point-width:44px;height:var(--cropper-point-width);width:var(--cropper-point-width);opacity:1}.point-e,.point-s,.point-w,.point-n{display:none}.point-ne,.point-nw,.point-sw,.point-se{--delta:-9px}.point-ne{cursor:nesw-resize;right:var(--delta);top:var(--delta)}.point-nw{cursor:nwse-resize;left:var(--delta);top:var(--delta)}.point-sw{cursor:nesw-resize;bottom:var(--delta);left:var(--delta)}.point-se{cursor:nwse-resize;bottom:var(--delta);right:var(--delta)}.cropper-point::before{position:absolute;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='38' height='38' viewBox='0 0 38 38' fill='none'%3E%3Cpath d='M3 35H23C29.6274 35 35 29.6274 35 23V3' stroke='white' stroke-width='6' stroke-linecap='square'/%3E%3C/svg%3E\");display:block;pointer-events:none}.point-ne::before{transform:rotate(-90deg);left:0px;top:6px}.point-nw::before{transform:rotate(180deg);left:6px;top:6px}.point-sw::before{transform:rotate(90deg);left:6px;top:0px}.point-se::before{left:0px;top:0px}.cropper-invisible{opacity:0}.cropper-hide{display:block;height:0;position:absolute;width:0}.cropper-hidden{display:none !important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}.visually-hidden{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}swiper-container::part(bullet){width:8px;height:8px;border-radius:var(--border-radius-full);background:var(--color-border-02);transition:width 0.25s cubic-bezier(0.4, 0, 0.2, 1),\n height 0.25s cubic-bezier(0.4, 0, 0.2, 1),\n border-radius 0.25s cubic-bezier(0.4, 0, 0.2, 1),\n background 0.25s cubic-bezier(0.4, 0, 0.2, 1),\n transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);margin:0;opacity:1;cursor:pointer;border:none;outline:none;transform:scale(1);position:relative}swiper-container::part(bullet)::after{content:\"\";position:absolute;top:-8px;left:-8px;right:-8px;bottom:-8px;cursor:pointer}swiper-container::part(bullet):hover{background:rgba(22, 22, 22, 0.5);transform:scale(1.2)}swiper-container::part(bullet-active){width:24px;height:8px;border-radius:var(--spacing-50);background:var(--color-icon-helper)}swiper-container::part(bullet-active):hover{background:var(--color-icon-secondary);transform:scale(1.1)}:host{--shop-the-look-shadow:0px 2px 4px 0px rgba(0, 0, 0, 0.25);display:block;font-family:var(--font-family-base);box-sizing:border-box;max-width:100%}.shop-the-look-container{position:relative;width:100%;background:var(--color-bg-base)}.main-content{position:relative;display:flex;flex-direction:column;gap:var(--spacing-200);align-items:center}.actions-container{width:100%;display:flex;align-items:center;gap:var(--spacing-300);margin-top:var(--spacing-250);justify-content:flex-end}.upload-button{display:inline-flex;padding:var(--spacing-150);justify-content:center;align-items:center;gap:var(--spacing-100);background:var(--button-bg-color-primary);border:none;border-radius:var(--border-radius-100);color:var(--color-text-inverse);font-family:var(--font-family-base);font-size:16px;font-weight:500;cursor:pointer;transition:background 0.2s ease}.upload-button-icon{display:inline-flex;align-items:center}.upload-button-text{display:contents}.upload-button:hover{background:var(--button-bg-color-primary-hover)}.upload-button:disabled{cursor:not-allowed}.image-container{position:relative;border-radius:var(--border-radius-200);overflow:hidden;background:var(--color-field-02);display:flex;justify-content:center;align-items:center;box-sizing:border-box;max-width:100%}.main-image{display:block;-o-object-fit:contain;object-fit:contain}.swiper-container-wrapper{width:100%;height:100%;display:flex;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%}swiper-container{width:100%;height:100%;border-radius:var(--border-radius-200);overflow:hidden}swiper-slide{display:flex;justify-content:center;align-items:center;width:100%;height:100%;flex-shrink:0}swiper-container::part(pagination){bottom:var(--spacing-250);display:flex;justify-content:center;align-items:center;gap:var(--spacing-100);padding:var(--spacing-100) 0}swiper-container::part(bullet-active):hover{background:var(--color-icon-secondary);transform:scale(1.1)}.carousel-navigation{display:flex;gap:var(--spacing-100)}.swiper-button-prev,.swiper-button-next{position:relative;width:48px;height:48px;background:var(--button-bg-color-secondary);border:none;border-radius:var(--border-radius-full);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background 0.3s ease,\n opacity 0.3s ease;margin:0}.swiper-button-prev:hover,.swiper-button-next:hover{background:var(--button-bg-color-secondary-hover)}.swiper-button-next svg{transform:rotate(180deg)}.swiper-button-prev,.swiper-button-next{color:var(--color-text-secondary)}.swiper-button-prev.disabled,.swiper-button-next.disabled{opacity:0.5;cursor:not-allowed;pointer-events:none}.desktop-carousel{position:relative;width:100%;max-width:none}.desktop-carousel swiper-container{width:100%;height:100%;justify-content:flex-start}.desktop-carousel .swiper-wrapper{justify-content:flex-start;align-items:flex-start}.desktop-carousel .main-image{overflow:hidden;border-radius:var(--border-radius-200)}.desktop-carousel vviinn-detected-object{position:absolute;z-index:15;overflow:visible}.shop-the-look-container .desktop-carousel swiper-slide{width:auto;flex-shrink:0}.shop-the-look-container .desktop-carousel swiper-container::part(pagination){display:none}.mobile-slider swiper-slide{width:auto;display:flex;justify-content:center}.mobile-slider swiper-container::part(pagination){display:flex}.shop-the-look-container .mobile-slider swiper-container::part(pagination){display:flex;justify-content:center;align-items:center;gap:var(--spacing-100);padding:var(--spacing-100) 0}.modal-content-wrapper{position:absolute;background:var(--color-bg-base);border-radius:var(--border-radius-150);overflow:hidden;box-shadow:0 2px 4px 0 rgba(0, 0, 0, 0.25);z-index:10000;top:var(--modal-y, 50%);left:var(--modal-x, 50%)}.modal-content-wrapper.mobile-modal{max-width:calc(100vw - 32px);max-height:calc(100vh - 64px);margin:0}.modal-content-wrapper[style*=\"--modal-anchor: top-left\"]{transform:translate(0, 0)}.modal-content-wrapper[style*=\"--modal-anchor: top-right\"]{transform:translate(-100%, 0)}.modal-content-wrapper[style*=\"--modal-anchor: bottom-left\"]{transform:translate(0, -100%)}.modal-content-wrapper[style*=\"--modal-anchor: bottom-right\"]{transform:translate(-100%, -100%)}.modal-content-wrapper:not([style*=\"--modal-anchor\"]){transform:translate(-50%, -50%)}.modal-body{padding:var(--spacing-100)}.search-results-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--spacing-50);width:140px}.result-item{cursor:pointer;border-radius:var(--spacing-75);overflow:hidden;aspect-ratio:var(--product-card-image-aspect-ratio, 1)}.result-image{width:100%;height:100%;position:relative}.result-image img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.product-grid-container.hidden,.product-details-container.hidden{display:none}.product-details{display:flex;flex-direction:column;height:100%;gap:var(--spacing-75);width:-moz-fit-content;width:fit-content}.product-header{display:flex;align-items:center}.product-content{flex:1;position:relative}.product-details-card-wrapper{height:100%;padding:0;width:160px;max-width:160px}.product-details-card{height:100%;background:var(--color-bg-base);border:none;width:100%;max-width:100%}.back-to-grid-button{display:contents;background:none;border:none;cursor:pointer;padding:0}.back-to-grid-button svg{width:24px;height:24px;color:var(--color-icon-helper);transition:color 0.2s ease}.back-to-grid-button:hover svg{color:var(--color-icon-secondary)}vviinn-product-card::part(price-container){flex-direction:row}vviinn-image::part(image),.product-details-card-wrapper vviinn-product-card::part(image),.product-details-card-wrapper vviinn-product-card::part(image-picture){border-radius:var(--border-radius-100);overflow:hidden}.search-loader{position:absolute;top:var(--spacing-200);right:var(--spacing-200);z-index:100;background:rgba(255, 255, 255, 0.9);border-radius:var(--border-radius-full);padding:var(--spacing-100);backdrop-filter:blur(4px)}.search-loader vviinn-preloader{width:24px;height:24px}.shop-the-look-container.modal-open vviinn-detected-object{z-index:10001}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes slideUp{from{transform:translateY(100%)}to{transform:translateY(0)}}.desktop-carousel vviinn-detected-object{position:absolute;z-index:15;overflow:visible}.desktop-carousel .main-image{overflow:hidden;border-radius:var(--border-radius-200)}.shop-the-look-container .desktop-carousel swiper-container::part(pagination){display:none}.desktop-carousel .swiper-button-prev,.desktop-carousel .swiper-button-next{display:flex}.desktop-carousel{max-width:none}.desktop-carousel .swiper-wrapper{justify-content:flex-start;align-items:flex-start}.shop-the-look-container .desktop-carousel swiper-slide{width:auto;flex-shrink:0}.mobile-slider swiper-slide{width:auto;display:flex;justify-content:center}@media (max-width: 768px){.shop-the-look-container:not(.with-cropper) .carousel-navigation{display:none}.mobile-slider{width:100%}.shop-the-look-container .mobile-slider swiper-slide{width:100%;flex-shrink:0}.shop-the-look-container{width:100%;max-width:100vw}.shop-the-look-container .image-container,.shop-the-look-container swiper-container,.shop-the-look-container swiper-slide{width:-moz-fit-content;width:fit-content;max-width:100%}swiper-container::part(wrapper){align-items:center}.shop-the-look-container .main-image{max-width:100%;height:auto;width:auto;-o-object-fit:contain;object-fit:contain}.modal-content-wrapper.desktop-modal{max-width:calc(100vw - 16px);max-height:calc(100vh - 48px)}.search-results-grid{width:min(140px, calc(100vw - 32px));gap:var(--spacing-50)}.carousel-navigation{bottom:var(--spacing-50);right:var(--spacing-50)}.product-details-card-wrapper{width:120px;max-width:120px}}.cropper-wrap-box{border-radius:var(--border-radius-200);overflow:hidden}.widget-style-cornered .image-container,.widget-style-cornered swiper-container,.widget-style-cornered .desktop-carousel .main-image,.widget-style-cornered .modal-content-wrapper,.widget-style-cornered .result-item,.widget-style-cornered .desktop-carousel .swiper-button-prev,.widget-style-cornered .desktop-carousel .swiper-button-next,.widget-style-cornered .cropper-wrap-box,.widget-style-cornered vviinn-image::part(image),.widget-style-cornered .product-details-card-wrapper vviinn-product-card::part(image),.widget-style-cornered .product-details-card-wrapper vviinn-product-card::part(image-picture),.widget-style-cornered .upload-button,.widget-style-cornered .carousel-navigation button{border-radius:0}";export{F as vviinn_shop_the_look}
|
|
1
|
+
import{h as t,r as e,c as i,H as o,g as s}from"./p-B89nCb_F.js";import{a as r,E as a}from"./p-CrEgr0jU.js";import{C as n,c,g as l,i as d}from"./p-Bc_yqCDQ.js";import{g as h,c as p,r as u,e as g,s as b}from"./p-Er2KrWw1.js";import{i as v,s as f,m,a as w,b as x,c as y,g as k}from"./p-CJAxBbhA.js";import{S as C}from"./p-DvD16Fp_.js";import{i as S,a as j}from"./p-BadZr0hq.js";import{d as I}from"./p-BJxQCbNV.js";import{r as O}from"./p-BfTXDLup.js";import{o as T}from"./p-C7_qzUNW.js";const z=()=>t("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none"},t("path",{d:"M5 21C4.45 21 3.97917 20.8042 3.5875 20.4125C3.19583 20.0208 3 19.55 3 19V5C3 4.45 3.19583 3.97917 3.5875 3.5875C3.97917 3.19583 4.45 3 5 3H13C13.2833 3 13.5208 3.09583 13.7125 3.2875C13.9042 3.47917 14 3.71667 14 4C14 4.28333 13.9042 4.52083 13.7125 4.7125C13.5208 4.90417 13.2833 5 13 5H5V19H19V11C19 10.7167 19.0958 10.4792 19.2875 10.2875C19.4792 10.0958 19.7167 10 20 10C20.2833 10 20.5208 10.0958 20.7125 10.2875C20.9042 10.4792 21 10.7167 21 11V19C21 19.55 20.8042 20.0208 20.4125 20.4125C20.0208 20.8042 19.55 21 19 21H5ZM17 7H16C15.7167 7 15.4792 6.90417 15.2875 6.7125C15.0958 6.52083 15 6.28333 15 6C15 5.71667 15.0958 5.47917 15.2875 5.2875C15.4792 5.09583 15.7167 5 16 5H17V4C17 3.71667 17.0958 3.47917 17.2875 3.2875C17.4792 3.09583 17.7167 3 18 3C18.2833 3 18.5208 3.09583 18.7125 3.2875C18.9042 3.47917 19 3.71667 19 4V5H20C20.2833 5 20.5208 5.09583 20.7125 5.2875C20.9042 5.47917 21 5.71667 21 6C21 6.28333 20.9042 6.52083 20.7125 6.7125C20.5208 6.90417 20.2833 7 20 7H19V8C19 8.28333 18.9042 8.52083 18.7125 8.7125C18.5208 8.90417 18.2833 9 18 9C17.7167 9 17.4792 8.90417 17.2875 8.7125C17.0958 8.52083 17 8.28333 17 8V7ZM11.25 16L9.4 13.525C9.3 13.3917 9.16667 13.325 9 13.325C8.83333 13.325 8.7 13.3917 8.6 13.525L6.6 16.2C6.46667 16.3667 6.45 16.5417 6.55 16.725C6.65 16.9083 6.8 17 7 17H17C17.2 17 17.35 16.9083 17.45 16.725C17.55 16.5417 17.5333 16.3667 17.4 16.2L14.65 12.525C14.55 12.3917 14.4167 12.325 14.25 12.325C14.0833 12.325 13.95 12.3917 13.85 12.525L11.25 16Z",fill:"white"}));class P{constructor(t){this.cropperInstances=new Map,this.startCropBoxData=new Map,this.pendingImageLoads=new Map,this.config=t}destroyCropper(t){const e=this.cropperInstances.get(t);e&&(e.destroy(),this.cropperInstances.delete(t),this.startCropBoxData.delete(t));const i=this.pendingImageLoads.get(t);i&&(i.element.removeEventListener("load",i.handlers.load),i.element.removeEventListener("error",i.handlers.error),this.pendingImageLoads.delete(t))}initializeCropper(t,e,i){if(e!==i)return;this.cropperInstances.has(e)&&this.destroyCropper(e);const o=new n(t,Object.assign(Object.assign({},c),{cropstart:()=>this.handleCropStart(o,e),cropend:()=>this.handleCropEnd(o,e)}));this.cropperInstances.set(e,o)}handleCropStart(t,e){this.startCropBoxData.set(e,l(t))}handleCropEnd(t,e){const i=l(t),o=this.startCropBoxData.get(e);if(o&&d(o,i))return;const s=t.getImageData(),a={left:i.left-s.left,top:i.top-s.top,width:i.width,height:i.height},n=r({width:s.width,height:s.height})(a);this.config.onCropEnd(n,e)}activateCropperForSlide(t,e){if(this.cropperInstances.forEach(((e,i)=>{i!==t&&this.destroyCropper(i)})),!this.cropperInstances.has(t)){const i=e(t);if(!i)return;const o=()=>{this.pendingImageLoads.delete(t),i.offsetWidth>0&&this.initializeCropper(i,t,t)},s=()=>{this.pendingImageLoads.delete(t),console.warn(`Failed to load image for cropper at index ${t}`)};if(i.complete&&i.offsetWidth>0)o();else{const e={load:o,error:s};this.pendingImageLoads.set(t,{element:i,handlers:e}),i.addEventListener("load",e.load,{once:!0}),i.addEventListener("error",e.error,{once:!0})}}}destroyAll(){Array.from(this.cropperInstances.keys()).forEach((t=>this.destroyCropper(t)))}hasCropper(t){return this.cropperInstances.has(t)}updateCropperDimensions(t,e){if(this.cropperInstances.has(t)){this.destroyCropper(t);const i=e(t);i&&i.complete&&i.offsetWidth>0&&this.initializeCropper(i,t,t)}}}const V=t=>{if(!t)return null;const e=t.getBoundingClientRect();return{left:e.left,top:e.top,width:e.width,height:e.height}},M=v,D=(t,e,i,o)=>{const s=o||V(t);if(!s)return{x:0,y:0};const r=(e.left+e.width/2)*s.width,a=(e.top+e.height/2)*s.height,n=[a>s.height/2?"bottom":"top",r>s.width/2?"right":"left"].join("-"),c=M()?24:16,l=!M();let d=0,h=0;switch(n){case"top-left":d=l?c-32:c,h=l?c+6:c;break;case"top-right":d=l?32-c:-c,h=l?c+6:c;break;case"bottom-left":d=l?c-32:c,h=l?-c-6:-c;break;case"bottom-right":d=l?32-c:-c,h=l?-c-6:-c}const p=s.left+r+d,u=s.top+a+h;if(i){const t=i.getBoundingClientRect();return{x:p-t.left,y:u-t.top,anchor:n}}return{x:p,y:u,anchor:n}},A=async t=>{try{const e=await w("shopTheLook",t.imageUrl,t.token,t.apiPath,t.campaignId);return a.fold((t=>a.left(`Visual search failed: ${t.inner}`)),(t=>{var e,i;const o=(null===(i=null===(e=t.interactions)||void 0===e?void 0:e.suggestedSearchAreas)||void 0===i?void 0:i.map((t=>t.rectangle)))||[];return a.right({detectedObjects:o,searchResults:[],visualSearchId:t.requestId||null})}))(e)}catch(t){return a.left(`Visual search initialization failed: ${t}`)}},$=(t,e)=>[...t,...e&&e.trim()?e.split(",").map((t=>t.trim())).filter((t=>t.length>0)):[]],L=t=>({detectedObjects:[],searchCompleted:!1,searchResults:[],isVisible:!1,imageElement:t||null,imageBounds:null,visualSearchId:null,searchTriggered:!1,observerSetup:!1,refProcessed:!1});class B{constructor(t){this.imageStates=new Map,this.config=t}updateConfig(t){this.config=Object.assign(Object.assign({},this.config),t)}getImageState(t){return this.imageStates.has(t)||this.imageStates.set(t,L()),this.imageStates.get(t)}updateImageState(t,e){const i=this.getImageState(t);Object.assign(i,e),this.imageStates.set(t,i)}setupImageIntersectionObserver(t,e){if(this.getImageState(e).observerSetup)return;const i=new IntersectionObserver((t=>{t.forEach((t=>{this.updateImageVisibility(e,t.intersectionRatio>=this.config.threshold)}))}),{threshold:this.config.threshold,root:null,rootMargin:"0px"});i.observe(t),this.updateImageState(e,{observer:i,observerSetup:!0})}updateImageVisibility(t,e){var i;const o=this.getImageState(t),s=o.isVisible;if(s===e)return;e&&o.imageElement&&!o.imageBounds&&(o.imageBounds=V(o.imageElement)),this.updateImageState(t,{isVisible:e});const r=null!==(i=this.config.isModalOpen)&&void 0!==i&&i;this.shouldTriggerSearch(t,e,s,o,r)&&(this.updateImageState(t,{searchTriggered:!0}),this.config.onVisualSearchTrigger(t))}shouldTriggerSearch(t,e,i,o,s=!1){if(s)return!1;const r=e&&!1===i,a=!!this.config.token,n=!o.searchCompleted&&!o.searchTriggered,c=this.getTriggeredSearchCount()<this.config.totalImages;return r&&a&&n&&c}getTriggeredSearchCount(){return Array.from(this.imageStates.values()).filter((t=>t.searchTriggered)).length}setImageElement(t,e){this.updateImageState(t,{imageElement:e})}getImageElement(t){return this.getImageState(t).imageElement}setImageState(t,e){this.imageStates.set(t,e)}updateImageStateData(t,e,i,o,s){const r={detectedObjects:e,searchCompleted:i,searchResults:o};void 0!==s&&(r.visualSearchId=s),this.updateImageState(t,r)}disconnectAll(){this.imageStates.forEach((t=>{t.observer&&t.observer.disconnect()})),this.imageStates.clear()}getAllImageStates(){return new Map(this.imageStates)}hasImageState(t){return this.imageStates.has(t)}hasActiveSearches(){return Array.from(this.imageStates.values()).some((t=>t.searchTriggered&&!t.searchCompleted))}shiftIndicesForward(t=0){Array.from(this.imageStates.entries()).filter((([e])=>e>=t)).sort((([t],[e])=>e-t)).forEach((([t,e])=>{this.imageStates.delete(t),this.imageStates.set(t+1,e)}))}}const E=t=>({maxWidth:"100%",maxHeight:`${t}px`,width:"auto",height:v()?`${t}px`:"auto",objectFit:"contain"}),R={campaignTypeId:"VPR",campaignTypeName:"Similar Products",widgetVersion:"1.0.0"};"undefined"!=typeof window&&u();const F=class{constructor(o){e(this,o),this.vviinnShopTheLookDetectedObjectClick=i(this,"vviinnShopTheLookDetectedObjectClick"),this.vviinnShopTheLookProductClick=i(this,"vviinnShopTheLookProductClick"),this.vviinnShopTheLookModalClose=i(this,"vviinnShopTheLookModalClose"),this.imageUrls="",this.height=500,this.campaignId="",this.widgetStyle="rounded",this.showCropper=!1,this.uploadMode=!1,this.showMultipleImages=!1,this.cssUrl=null,this.productDetailsNewTab=!1,this.productDetailsRedirect=!0,this.selectedDetectedObject=null,this.showModal=!1,this.modalPosition=null,this.showDetailedView=!1,this.selectedProductIndex=0,this.modalImageIndex=0,this.swiperActiveIndex=0,this.totalImages=1,this.imageUrlsList=[],this.swiperKey="swiper-0",this.needNavigation=!1,this.showLoadingSpinner=!1,this.isSearchInProgress=!1,this.currentViewMode=null,this.isWidgetVisible=!1,this.uploadedImageUrls=[],this.isManualObjectSelection=!1,this.isNavigatingToSlide=!1,this.resetDetailedView=()=>{this.showDetailedView=!1,this.selectedProductIndex=0},this.handleResize=()=>{this.checkViewModeChange(),this.updateNavigationVisibility(),this.showCropper&&this.cropperManager&&requestAnimationFrame((()=>{this.cropperManager.updateCropperDimensions(this.swiperActiveIndex,(t=>this.imageStore.getImageElement(t)))}))},this.handleDocumentClick=t=>{if(!this.showModal||this.showLoadingSpinner)return;const e=t.target;e&&(this.modalContentRef&&this.modalContentRef.contains(e)||e.closest("vviinn-detected-object")||this.handleModalClose())},this.checkViewModeChange=()=>{const t=M()?"desktop":"mobile";t!==this.currentViewMode&&(this.currentViewMode=t,this.showModal&&this.handleModalClose(),this.swiperKey=`swiper-${Date.now()}`)},this.updateNavigationVisibility=()=>{if(this.imageElement&&this.imageElement.offsetWidth>0){const t=window.innerWidth-100,e=Math.floor(t/(this.imageElement.offsetWidth+20));this.needNavigation=this.totalImages>e}else this.needNavigation=this.totalImages>1},this.handleSwiperPointerDown=t=>{var e;const i=(t=>t.target.closest("swiper-slide"))(t);if(!i)return;const o=((t,e)=>e?Array.from(e.querySelectorAll("swiper-slide")||[]).indexOf(t):-1)(i,this.el.shadowRoot);if(-1===o)return;const s=null===(e=this.cropperManager)||void 0===e?void 0:e.hasCropper(o);this.updateSwiperAllowTouchMove(!s)},this.handleSwiperScroll=()=>{this.showModal&&this.handleModalClose()},this.handleVisualSearchTrigger=t=>{this.showModal||(this.performVisualSearchForImage(t),this.updateSearchingState())},this.handleDetectedObjectClick=async(t,e,i=this.swiperActiveIndex)=>{var o,s;if(!this.token)return;M()&&!this.isCurrentSlide(i)?(this.isManualObjectSelection=!0,this.isNavigatingToSlide=!0,this.swiperActiveIndex=i,this.navigateToSlide(i),this.selectedDetectedObject=t,this.modalImageIndex=i,await new Promise((t=>setTimeout((()=>{this.isNavigatingToSlide=!1,requestAnimationFrame((()=>requestAnimationFrame(t)))}),300)))):(this.selectedDetectedObject=t,this.modalImageIndex=i),this.showCropper&&((null===(s=null===(o=this.cropperManager)||void 0===o?void 0:o.hasCropper)||void 0===s?void 0:s.call(o,i))||this.activateCropperForSlide(i)),this.isManualObjectSelection=!1,this.showLoadingSpinner=!0,this.showModal=!1,this.resetDetailedView();const r=this.getImageBounds(i),n=this.imageStore.getImageElement(i)||this.imageElement;r&&n&&(this.modalPosition=D(n,t,this.el,r));const c=this.imageStore.getImageState(i),l={detectedObject:t,imageElement:n,containerElement:this.el,token:this.token,visualSearchId:(null==c?void 0:c.visualSearchId)||f.visualSearchId||null,campaignId:this.campaignId,apiPath:this.apiPath,imageBounds:r,isSearchInProgress:this.isSearchInProgress,setSearchInProgress:t=>{this.isSearchInProgress=t}},d=await(async t=>{const{imageElement:e,detectedObject:i,containerElement:o,visualSearchId:s,token:r,imageBounds:n,campaignId:c,apiPath:l,isSearchInProgress:d,setSearchInProgress:h}=t;if(d)return a.left("Search already in progress");h(!0);try{if(!e)return a.left("Image element is missing");f.searchArea=i;const t=await m("shopTheLook",s||null,r,l,c);return a.fold((t=>a.left(`Visual search failed: ${t.inner}`)),(t=>{var s;const r=(null===(s=t.data)||void 0===s?void 0:s.products)||[],c=D(e,i,o,n);return a.right({searchResults:r,modalPosition:c})}))(t)}catch(t){return a.left(`Visual search failed: ${t}`)}finally{h(!1)}})(l);a.fold((t=>{t.includes("Search already in progress")||(console.error("Visual search failed:",t),this.showLoadingSpinner=!1)}),(t=>{t.searchResults&&t.searchResults.length>0&&this.imageStore.updateImageState(i,{searchResults:t.searchResults}),this.showLoadingSpinner=!1,t.searchResults&&t.searchResults.length>0&&this.isCurrentSlide(i)&&(this.showModal=!0),this.vviinnShopTheLookDetectedObjectClick.emit(Object.assign(Object.assign({},R),{detectedObjectId:`detected-${i}-${e}`,product:t.searchResults[0]||null}))}))(d)},this.performVisualSearch=async(t=this.swiperActiveIndex)=>{const e=this.imageUrlsList[t];if(!this.token||!e)return;const i=this.isCurrentSlide(t);i&&(this.showLoadingSpinner=!0);const o={imageUrl:e,token:this.token,campaignId:this.campaignId,apiPath:this.apiPath},s=await A(o);a.fold((e=>{console.error(`Visual search failed for image ${t}:`,e),this.imageStore.updateImageState(t,{searchCompleted:!0}),i&&(this.showLoadingSpinner=!1)}),(e=>{this.imageStore.updateImageStateData(t,e.detectedObjects,!0,e.searchResults,e.visualSearchId||null);const o=this.imageStore.getImageState(t);i&&(this.showLoadingSpinner=!1),o.detectedObjects.length>0&&i&&this.isCurrentSlide(t)&&!this.showModal&&this.scheduleAutoSelectFirstObject(t,o.detectedObjects),this.imageStore.updateImageState(t,{searchCompleted:!0})}))(s)},this.handleProductClick=t=>{this.vviinnShopTheLookProductClick.emit(Object.assign(Object.assign({},R),{detectedObjectId:this.selectedDetectedObject?`detected-${Date.now()}`:"",product:t}))},this.activateCropperForSlide=t=>{var e;null===(e=this.cropperManager)||void 0===e||e.activateCropperForSlide(t,(t=>this.imageStore.getImageElement(t)))},this.debouncedCropSearch=(t,e)=>{this.cropDebounceTimeout&&clearTimeout(this.cropDebounceTimeout),this.cropDebounceTimeout=window.setTimeout((()=>{this.cropDebounceTimeout=void 0,this.handleDetectedObjectClick(t,0,e)}),500)},this.handleModalClose=t=>{this.showLoadingSpinner||t&&t.target!==t.currentTarget||(this.clearModalAndSlideState(),this.vviinnShopTheLookModalClose.emit(R))},this.handleProductDetailsClick=(t,e)=>{this.selectedProductIndex=e,this.showDetailedView=!0},this.handleNavigateProduct=t=>{const e=this.imageStore.getImageState(this.modalImageIndex);"prev"===t&&this.selectedProductIndex>0?this.selectedProductIndex--:"next"===t&&this.selectedProductIndex<e.searchResults.length-1&&this.selectedProductIndex++},this.renderDetectedObjectsWrapper=e=>{const i=this.imageStore.getImageState(e);return((t,e)=>{var i;return!!t&&(M()?t.searchCompleted&&!!(null===(i=t.detectedObjects)||void 0===i?void 0:i.length):e)})(i,this.isCurrentSlide(e))?(e=>{const{imageBounds:i,detectedObjects:o,initialSearchCompleted:s,selectedDetectedObject:r,basicEventData:a,onSelectObject:n}=e;return i&&o.length&&s?o.map(((e,o)=>t("vviinn-detected-object",{key:`detected-${o}`,detectedObject:e,selectedDetectedObject:r,basicEventData:a,imageBounds:i,showInWidget:!1,style:{zIndex:"10"},onVviinnSelectObject:t=>{t.stopPropagation(),n(t.detail.detectedObject,o)}}))):null})({imageBounds:this.getImageBounds(e),detectedObjects:i.detectedObjects,initialSearchCompleted:i.searchCompleted,selectedDetectedObject:this.selectedDetectedObject,basicEventData:R,onSelectObject:(t,i)=>this.handleDetectedObjectClick(t,i,e)}):null},this.handleSlideChange=t=>{var e;const i=g(t);if(void 0!==i){if(i!==this.swiperActiveIndex&&(this.swiperActiveIndex=i),this.clearModalAndSlideState(),this.shouldManageDragging){const t=null===(e=this.cropperManager)||void 0===e?void 0:e.hasCropper(i);this.updateSwiperAllowTouchMove(!t)}setTimeout((()=>{this.isNavigatingToSlide=!1,this.ensureSlideSearchTriggered(this.swiperActiveIndex)}),100)}},this.handleImageRef=(t,e)=>{const i=this.imageStore.getImageState(e);if((!(null==i?void 0:i.refProcessed)||this.imageStore.getImageElement(e)!==t)&&(this.imageStore.updateImageState(e,{refProcessed:!0}),(this.isCurrentSlide(e)||this.totalImages<=1)&&(this.imageElement=t),t)){if(this.imageStore.setImageElement(e,t),this.imageStore.hasImageState(e)){const i=this.imageStore.getImageState(e);i.imageElement=t,this.imageStore.setImageState(e,i)}else{const i=L(t);this.imageStore.setImageState(e,i),this.imageStore.setImageState(e,i)}M()&&this.setupObserverAfterSwiper(t,e);const i=()=>{this.initializeImageForCropper(t,e),this.pendingUploadData&&0===e&&(this.imageStore.updateImageStateData(0,this.pendingUploadData.detectedObjects,!0,[],this.pendingUploadData.visualSearchId),this.pendingUploadData.detectedObjects.length>0&&this.scheduleAutoSelectFirstObject(0,this.pendingUploadData.detectedObjects),this.pendingUploadData=null)};t.complete&&t.offsetWidth>0?i():t.addEventListener("load",i,{once:!0})}},this.updateImageBoundsForElement=(t,e)=>{requestAnimationFrame((()=>{(this.isCurrentSlide(e)||this.totalImages<=1)&&this.updateNavigationVisibility()}))},this.initializeImageForCropper=(t,e)=>{var i;this.updateImageBoundsForElement(t,e),this.isCurrentSlide(e)&&(null===(i=this.cropperManager)||void 0===i||i.initializeCropper(t,e,this.swiperActiveIndex))},this.performVisualSearchForImage=async t=>{const e=this.imageUrlsList[t];if(!this.token||!e)return;const i=this.isCurrentSlide(t);i&&(this.showLoadingSpinner=!0);const o={imageUrl:e,token:this.token,campaignId:this.campaignId,apiPath:this.apiPath},s=await A(o);a.fold((e=>{console.error(`Visual search failed for image ${t}:`,e),this.imageStore.updateImageStateData(t,[],!0,[],null),this.updateSearchingState(i)}),(e=>{this.imageStore.updateImageStateData(t,e.detectedObjects,!0,e.searchResults,e.visualSearchId||null),this.updateSearchingState(i),e.detectedObjects.length>0&&this.isCurrentSlide(t)&&!this.showModal&&!this.isManualObjectSelection&&this.scheduleAutoSelectFirstObject(t,e.detectedObjects)}))(s)},this.pendingUploadData=null,this.handleFileUpload=async t=>{var e;const i=t.target,o=null===(e=i.files)||void 0===e?void 0:e[0];if(!o)return;this.showLoadingSpinner=!0;const s={file:o,token:this.token,campaignId:this.campaignId,apiPath:this.apiPath},r=await(async t=>{const{file:e,token:i,campaignId:o,apiPath:s}=t;try{const t=(await x(e)()).src,r=await y("shopTheLook",i,s,o)(e);return a.fold((t=>a.left(`Upload failed: ${t.inner}`)),(e=>{var i,o;const s=(null===(o=null===(i=e.interactions)||void 0===i?void 0:i.suggestedSearchAreas)||void 0===o?void 0:o.map((t=>t.rectangle)))||[];return a.right({imageUrl:t,detectedObjects:s,visualSearchId:e.requestId||null})}))(r)}catch(t){return a.left(`Failed to process image: ${t}`)}})(s);a.fold((t=>{console.error(t),this.showLoadingSpinner=!1}),(t=>{var e;this.clearModalAndSlideState(),this.showCropper&&(null===(e=this.cropperManager)||void 0===e||e.destroyAll()),this.imageStore.shiftIndicesForward(0),this.pendingUploadData={detectedObjects:t.detectedObjects,visualSearchId:t.visualSearchId},this.uploadedImageUrls=[t.imageUrl,...this.uploadedImageUrls],this.imageUrlsList=$(this.uploadedImageUrls,this.imageUrls),this.totalImages=this.imageUrlsList.length,this.swiperActiveIndex=0,this.showLoadingSpinner=!1,requestAnimationFrame((()=>{this.navigateToSlide(0)}))}))(r),i.value=""},this.handleNavigatePrev=()=>{this.swiperActiveIndex>0&&this.updateSlideIndex(this.swiperActiveIndex-1)},this.handleNavigateNext=()=>{this.swiperActiveIndex<this.totalImages-1&&this.updateSlideIndex(this.swiperActiveIndex+1)},this.updateSlideIndex=t=>{this.isNavigatingToSlide=!0,this.swiperActiveIndex=t,this.navigateToSlide(t),this.clearModalAndSlideState(),setTimeout((()=>{this.isNavigatingToSlide=!1;const e=this.imageStore.getImageState(t);e.searchCompleted||e.searchTriggered?this.performVisualSearchIfReady():this.forceSearchForSlide(t),this.showCropper&&this.activateCropperForSlide(t)}),100)},this.showNavigation=()=>this.needNavigation&&M()||this.showCropper,this.renderSwiperWrapper=()=>{const e=!this.showCropper||M();return(e=>{const{imageUrls:i,swiperActiveIndex:o,height:s,onSlideChange:r,onImageRef:a,renderDetectedObjects:n,onSwiperRef:c,swiperKey:l,allowTouchMove:d=!0}=e;if(!i||i.length<=1)return t("div",{class:"image-container"},t("img",{ref:t=>a(t,0),src:(null==i?void 0:i[0])||"",alt:"Shop-the-Look",class:"main-image",style:E(s)}),n(0));const u=v(),g=h(u);return t("div",{class:"swiper-container-wrapper"},t("div",{class:"swiper-wrapper "+(u?"desktop-carousel":"mobile-slider")},t("swiper-container",{key:l,ref:t=>{t&&!t.swiper&&p(t,{isDesktop:u,initialSlide:o,pagination:!0,keyboard:!0,allowTouchMove:d}),c&&c(t)},onSlideChange:r,style:g,pagination:u?void 0:"true","pagination-clickable":u?void 0:"true"},i.map(((e,i)=>t("swiper-slide",{key:i},t("div",{class:"image-container"},t("img",{ref:t=>a(t,i),src:e,alt:`Shop-the-Look ${i+1}`,class:"main-image",style:E(s)}),n(i))))))))})({imageUrls:this.imageUrlsList,swiperActiveIndex:this.swiperActiveIndex,height:this.height,detectedObjects:this.getCurrentImageState().detectedObjects,onSlideChange:this.handleSlideChange,onImageRef:this.handleImageRef,renderDetectedObjects:this.renderDetectedObjectsWrapper,swiperKey:this.swiperKey,allowTouchMove:e})},this.renderModalWrapper=()=>(e=>{const{showModal:i,selectedDetectedObject:o,modalPosition:s,searchResults:r,onProductClick:a,showDetailedView:n=!1,selectedProductIndex:c=0,onProductDetailsClick:l,onBackToGrid:d,currencySign:h,locale:p,numberLocale:u,showMultipleImages:g=!1,modalContentRef:b}=e;if(!i||!o||!(null==r?void 0:r.length))return null;const f=!v();return t("div",{ref:b,class:"modal-content-wrapper "+(f?"mobile-modal":"desktop-modal"),style:s?{"--modal-x":`${s.x}px`,"--modal-y":`${s.y}px`,"--modal-anchor":s.anchor}:{},onClick:t=>t.stopPropagation()},t("div",{class:"modal-body"},t("div",{class:"product-grid-container "+(n?"hidden":"")},r.length>0&&(e=>{const{searchResults:i,onProductClick:o,onProductDetailsClick:s}=e;if(!i.length)return null;const r=i.slice(0,4);return t("div",{class:"search-results-grid"},r.map(((e,i)=>{var r,a;return t("div",{key:`${e.productId}-${i}`,class:"result-item",onClick:()=>{s?s(e,i):o(e)}},t("div",{class:"result-image"},t("vviinn-image",{width:120,alt:e.title||"",imageTitle:e.title||"",src:(null===(r=e.image)||void 0===r?void 0:r.thumbnail)||(null===(a=e.image)||void 0===a?void 0:a.original)||"",responsive:!0,imageResolutionWidth:300})))})))})({searchResults:r,onProductClick:a,onProductDetailsClick:l})),t("div",{class:"product-details-container "+(n?"":"hidden")},r.length>0&&(e=>{var i,o,s,r;const{searchResults:a,selectedProductIndex:n,onProductClick:c,onBackToGrid:l,currencySign:d,locale:h,numberLocale:p,showMultipleImages:u=!1}=e;if(!a.length)return null;const g=a[n];return g?t("div",{class:"product-details"},t("div",{class:"product-header"},t("button",{class:"back-to-grid-button",onClick:l},t(C,null))),t("div",{class:"product-content"},t("div",{class:"product-details-card-wrapper"},t("vviinn-product-card",{key:g.productId,product:g,class:"product-details-card",productId:g.productId||"",productTitle:g.title||"",brand:g.brand,price:g.price.actual,salePrice:g.price.sale,addPriceContainer:!0,image:null!==(r=null!==(o=null===(i=g.image)||void 0===i?void 0:i.thumbnail)&&void 0!==o?o:null===(s=g.image)||void 0===s?void 0:s.original)&&void 0!==r?r:"",images:g.images,showMultipleImages:u,imageResolutionWidth:300,imageWidth:v()?160:120,currencySign:d||"",locale:h,numberLocale:p,deeplink:g.deeplink,onVviinnProductClick:()=>c(g)})))):null})({searchResults:r,selectedProductIndex:c,onProductClick:a,currencySign:h,locale:p,numberLocale:u,showMultipleImages:g,onBackToGrid:d}))))})({showModal:this.showModal,selectedDetectedObject:this.selectedDetectedObject,modalPosition:this.modalPosition,searchResults:this.imageStore.getImageState(this.modalImageIndex).searchResults,onProductClick:this.handleProductClick,showDetailedView:this.showDetailedView,selectedProductIndex:this.selectedProductIndex,onProductDetailsClick:this.handleProductDetailsClick,onBackToGrid:this.resetDetailedView,currencySign:this.effectiveCurrencySign,locale:this.locale,numberLocale:this.effectiveNumberLocale,showMultipleImages:this.showMultipleImages,modalContentRef:t=>{this.modalContentRef=t}})}handleProductCardClick(t){var e,i;const{productId:o,clickEvent:s}=t.detail,r=null===(e=this.imageStore)||void 0===e?void 0:e.getImageState(this.modalImageIndex),a=null===(i=null==r?void 0:r.searchResults)||void 0===i?void 0:i.find((t=>t.productId===o));(null==a?void 0:a.deeplink)&&T(a.deeplink,s,this.productDetailsRedirect,this.productDetailsNewTab)}async componentWillLoad(){await S(this.locale),this.imageUrlsList=$(this.uploadedImageUrls,this.imageUrls),this.totalImages=this.imageUrlsList.length,this.currentViewMode=M()?"desktop":"mobile",this.updateNavigationVisibility();M();this.imageStore=new B({threshold:.01,token:this.token,isWidgetVisible:this.isWidgetVisible,totalImages:this.totalImages,isModalOpen:this.showModal,onVisualSearchTrigger:this.handleVisualSearchTrigger.bind(this)}),this.showCropper&&(this.cropperManager=new P({onCropEnd:(t,e)=>{this.debouncedCropSearch(t,e)}}))}componentDidLoad(){window.addEventListener("resize",this.handleResize),document.addEventListener("click",this.handleDocumentClick),this.initializeContainerVisibilityTracking(),this.setupSwiperEventListener(),this.setupSwiperDragEventListeners()}onViewModeChange(t){t&&requestAnimationFrame((()=>{this.setupSwiperEventListener(),this.setupSwiperDragEventListeners()}))}onShowModalChange(t){var e;null===(e=this.imageStore)||void 0===e||e.updateConfig({isModalOpen:t})}clearModalAndSlideState(){this.showModal=!1,this.selectedDetectedObject=null,this.modalPosition=null,this.resetDetailedView(),this.modalImageIndex=0,this.autoSelectTimeout&&(clearTimeout(this.autoSelectTimeout),this.autoSelectTimeout=void 0)}updateSearchingState(t=!1){var e,i;this.showLoadingSpinner=null!==(i=null===(e=this.imageStore)||void 0===e?void 0:e.hasActiveSearches())&&void 0!==i&&i,t&&(this.showLoadingSpinner=!1)}getCurrentImageState(){var t;return null===(t=this.imageStore)||void 0===t?void 0:t.getImageState(this.swiperActiveIndex)}isCurrentSlide(t){return t===this.swiperActiveIndex}get shouldManageDragging(){return this.showCropper&&M()}get effectiveCurrencySign(){var t;return null!==(t=this.currencySign)&&void 0!==t?t:I.currencySign}get effectiveNumberLocale(){return this.numberLocale||this.locale||I.locale}disconnectedCallback(){var t,e,i,o;window.removeEventListener("resize",this.handleResize),document.removeEventListener("click",this.handleDocumentClick),null===(t=this.intersectionObserver)||void 0===t||t.disconnect(),null===(e=this.imageStore)||void 0===e||e.disconnectAll(),null===(i=this.cropperManager)||void 0===i||i.destroyAll(),this.autoSelectTimeout&&clearTimeout(this.autoSelectTimeout),this.cropDebounceTimeout&&clearTimeout(this.cropDebounceTimeout);const s=null===(o=this.el.shadowRoot)||void 0===o?void 0:o.querySelector("swiper-container");s&&(s.removeEventListener("swiperslidechange",this.handleSlideChange),s.removeEventListener("swipersliderfirstmove",this.handleSwiperScroll),this.shouldManageDragging&&s.removeEventListener("pointerdown",this.handleSwiperPointerDown))}initializeContainerVisibilityTracking(){M();this.intersectionObserver=b(this.el,{threshold:.01,onIntersectionChange:t=>{var e;const i=this.isWidgetVisible;this.isWidgetVisible=t,null===(e=this.imageStore)||void 0===e||e.updateConfig({isWidgetVisible:this.isWidgetVisible,isModalOpen:this.showModal}),!i&&this.isWidgetVisible&&this.performVisualSearchIfReady()}})}setupSwiperEventListener(){var t;const e=null===(t=this.el.shadowRoot)||void 0===t?void 0:t.querySelector("swiper-container");e&&setTimeout((()=>{e.addEventListener("swiperslidechange",this.handleSlideChange)}),200)}setupSwiperDragEventListeners(){var t;const e=null===(t=this.el.shadowRoot)||void 0===t?void 0:t.querySelector("swiper-container");e&&setTimeout((()=>{e.addEventListener("swipersliderfirstmove",this.handleSwiperScroll,{passive:!0}),this.shouldManageDragging&&e.addEventListener("pointerdown",this.handleSwiperPointerDown,{capture:!0})}),200)}updateSwiperAllowTouchMove(t){var e;const i=null===(e=this.el.shadowRoot)||void 0===e?void 0:e.querySelector("swiper-container"),o=null==i?void 0:i.swiper;void 0!==(null==o?void 0:o.allowTouchMove)&&(o.allowTouchMove=t)}setupObserverAfterSwiper(t,e){setTimeout((()=>{var i;const o=null===(i=this.el.shadowRoot)||void 0===i?void 0:i.querySelector("swiper-container");if(o){const i=()=>{this.imageStore.setupImageIntersectionObserver(t,e)};(null==o?void 0:o.swiper)?i():(o.addEventListener("swiperinit",i,{once:!0}),setTimeout((()=>{const i=this.imageStore.getImageState(e);(null==i?void 0:i.observerSetup)||this.imageStore.setupImageIntersectionObserver(t,e)}),1e3))}}),200)}performVisualSearchIfReady(){const t=M();if(this.imageStore.updateConfig({isWidgetVisible:this.isWidgetVisible,token:this.token,totalImages:this.totalImages,isModalOpen:this.showModal}),this.token&&this.isWidgetVisible){const e=this.imageStore.getImageState(this.swiperActiveIndex);if(null==e?void 0:e.searchCompleted)this.activateCurrentSlide();else if(1===this.totalImages||!t||this.showCropper){t&&1!==this.totalImages&&!this.showCropper||this.markCurrentImageAsVisible();const e=this.imageStore.getImageState(this.swiperActiveIndex);(null==e?void 0:e.searchTriggered)||(this.imageStore.updateImageState(this.swiperActiveIndex,{searchTriggered:!0}),this.performVisualSearch(this.swiperActiveIndex)),this.showCropper&&this.activateCropperForSlide(this.swiperActiveIndex)}}}markCurrentImageAsVisible(){const t=this.imageStore.getImageState(this.swiperActiveIndex);t&&(t.isVisible=!0,this.imageStore.setImageState(this.swiperActiveIndex,t))}navigateToSlide(t){var e;const i=null===(e=this.el.shadowRoot)||void 0===e?void 0:e.querySelector("swiper-container");(null==i?void 0:i.swiper)&&i.swiper.slideTo(t)}forceSearchForSlide(t){const e=this.imageStore.getImageState(t);e&&(e.isVisible=!0,this.imageStore.setImageState(t,e)),this.imageStore.updateImageState(t,{searchTriggered:!0}),this.performVisualSearch(t)}ensureSlideSearchTriggered(t){const e=this.imageStore.getImageState(t);e.searchCompleted||e.searchTriggered?e.searchCompleted?this.activateCurrentSlide():this.performVisualSearchIfReady():this.forceSearchForSlide(t)}activateCurrentSlide(){var t;this.markCurrentImageAsVisible();const e=this.imageStore.getImageState(this.swiperActiveIndex);(null===(t=null==e?void 0:e.detectedObjects)||void 0===t?void 0:t.length)>0&&!this.showModal&&this.scheduleAutoSelectFirstObject(this.swiperActiveIndex,e.detectedObjects)}getCropperBounds(t){var e,i;if(this.showCropper&&(null===(e=this.cropperManager)||void 0===e?void 0:e.hasCropper)&&this.cropperManager.hasCropper(t)){const t=null===(i=this.el.shadowRoot)||void 0===i?void 0:i.querySelector(".cropper-container .cropper-canvas img");if(t&&t.offsetWidth>0)return V(t)}return null}getStoreBounds(t){const e=this.imageStore.getImageElement(t);return e&&e.offsetWidth>0?V(e):null}getVisibleSlideBounds(t){var e;const i=Array.from((null===(e=this.el.shadowRoot)||void 0===e?void 0:e.querySelectorAll("swiper-slide img"))||[]).filter((t=>!t.closest(".cropper-container")&&t.offsetWidth>0));return i&&i[t]?V(i[t]):null}getImageBounds(t){return this.getCropperBounds(t)||this.getStoreBounds(t)||this.getVisibleSlideBounds(t)}scheduleAutoSelectFirstObject(t,e){const i=!(null==e?void 0:e.length),o=!this.isCurrentSlide(t);i||o||this.autoSelectTimeout||this.isManualObjectSelection||this.isNavigatingToSlide||(this.autoSelectTimeout=window.setTimeout((()=>{if(this.autoSelectTimeout=void 0,!this.isCurrentSlide(t)||this.showModal||this.isNavigatingToSlide)return;const i=e[0];i&&this.handleDetectedObjectClick(i,0,t)}),500))}render(){return t(o,{key:"810afce8775ce69f39d3ddb19dbfafc081f90b95",exportparts:j},O(this.cssUrl),t("div",{key:"ab678e97ff5878b7d68fb63fa6ad0344f55e56eb",class:`shop-the-look-container ${this.showModal?"modal-open":""} ${this.showCropper?"with-cropper":""} widget-style-${this.widgetStyle}`},t("div",{key:"78fe26aa58f8c8da8a49a0a1f20d27025de4270e",class:"main-content"},this.renderSwiperWrapper(),this.showLoadingSpinner&&t("div",{key:"02ee522ea4f2f60a5becae75834123f7f2059d31",class:"search-loader"},t("vviinn-preloader",{key:"209d5b1caf48f57ef4ab0f143e77c83e9547403d"}))),this.renderModalWrapper(),t("div",{key:"8a92411b196592578c1811e88b20b5c79d955751",class:"actions-container",part:"shop-the-look-actions-container"},this.uploadMode&&t("div",{key:"283494b6ed7e2279ebc12ba00bff48679bd84515",class:"upload-button-container"},t("button",{key:"6843b123419ab70e75c38d2ef1fc6f95724198f6",class:"upload-button",part:"shop-the-look-upload-button",onClick:()=>{var t;return null===(t=this.fileInput)||void 0===t?void 0:t.click()},disabled:this.showLoadingSpinner},t("span",{key:"921d7b5487c68d1e5f3095415d7d195a76de5a53",class:"upload-button-icon",part:"shop-the-look-upload-button-icon"},t("slot",{key:"c5a149403be172d546d34e4271a04b6bf7184cf2",name:"vviinn-image-upload-icon"},t(z,{key:"363804dec9e24cf917d8da7244285f14dd874e61"}))),t("span",{key:"fde616b05fc029c9cc45e063483f0401efdf2ba5",class:"upload-button-text",part:"shop-the-look-upload-button-text"},t("slot",{key:"756831c7b944e0f651b7907bf522375a35acb247",name:"upload-button-text"}))),t("input",{key:"6489e9ccae6426f4a96d57c2bec5b9c41b77916b",type:"file",class:"visually-hidden",accept:k(),onChange:this.handleFileUpload,ref:t=>this.fileInput=t})),this.showNavigation()&&(i=this.totalImages,s=this.handleNavigatePrev,r=this.handleNavigateNext,t("div",{class:"carousel-navigation"},t("button",{class:"swiper-button-prev "+(0===(e=this.swiperActiveIndex)?"disabled":""),onClick:()=>s()},t(C,null)),t("button",{class:"swiper-button-next "+(e===i-1?"disabled":""),onClick:()=>r()},t(C,null)))))));var e,i,s,r}get el(){return s(this)}static get watchers(){return{currentViewMode:["onViewModeChange"],showModal:["onShowModalChange"]}}};F.style=":host{--font-family-base:Inter, system-ui, sans-serif;--font-family-mono:monospace;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--font-size-display:32px;--font-size-title:24px;--font-size-headline:18px;--font-size-label-large:16px;--font-size-label:14px;--font-size-body-large:16px;--font-size-body:14px;--font-size-caption:12px;--line-height-display:40px;--line-height-title:32px;--line-height-headline:24px;--line-height-label-large:24px;--line-height-label:20px;--line-height-body-large:24px;--line-height-body:20px;--line-height-caption:16px;--letter-spacing-title:0px;--letter-spacing-headline:0px;--letter-spacing-label-large:0px;--letter-spacing-label:0px;--letter-spacing-body-large:0px;--letter-spacing-body:0px;--letter-spacing-caption:0px;--font-weight-400:400;--font-weight-500:500;--font-weight-600:600;--font-weight-700:700;--spacing-none:0px;--spacing-25:2px;--spacing-50:4px;--spacing-75:6px;--spacing-100:8px;--spacing-125:10px;--spacing-150:12px;--spacing-200:16px;--spacing-250:20px;--spacing-300:24px;--spacing-400:32px;--spacing-500:40px;--spacing-600:48px;--border-radius-none:0px;--border-radius-25:2px;--border-radius-50:4px;--border-radius-100:8px;--border-radius-150:12px;--border-radius-200:16px;--border-radius-300:24px;--border-radius-400:32px;--border-radius-full:9999px;--stroke-width-none:0px;--stroke-width-25:1px;--stroke-width-50:2px;--stroke-width-75:3px;--stroke-width-100:4px;--stroke-width-150:6px;--stroke-width-200:8px;--stroke-width-300:12px;--product-card-widget-min-width:135px;--product-card-results-min-width:250px;--image-set-mode-min-width:155px;--source-card-set-mode-max-width:500px;--filter-blur-none:0px;--filter-blur-100:8px;--filter-blur-150:12px;--filter-blur-200:16px;--color-bg-base:#ffffff;--color-bg-inverse:#161616;--color-border-00:#ffffff;--color-border-01:#f4f4f4;--color-border-02:#e0e0e0;--color-border-03:#c6c6c6;--color-border-inverse-00:#161616;--color-border-inverse-01:#393939;--color-field-01:#ffffff;--color-field-02:#f4f4f4;--color-icon-primary:#161616;--color-icon-secondary:#525252;--color-icon-helper:#8d8d8d;--color-icon-on-color:#ffffff;--color-icon-inverse:#ffffff;--color-icon-disabled:#16161640;--color-text-primary:#161616;--color-text-secondary:#707070;--color-text-helper:#8d8d8d;--color-text-placeholder:#a8a8a8;--color-text-on-color:#ffffff;--color-text-inverse:#ffffff;--color-text-disabled:#16161640;--button-bg-color-primary:#000000;--button-bg-color-primary-hover:#161616;--button-bg-color-primary-active:#1e1e1e;--button-bg-color-secondary:#f4f4f4;--button-bg-color-secondary-hover:#e0e0e0;--button-bg-color-secondary-active:#c6c6c6;--button-bg-color-ghost-hover:#f4f4f4;--button-bg-color-ghost-active:#eaeaea;--button-bg-color-frosted:#6f6f6f66;--button-bg-color-frosted-hover:#6f6f6f80;--button-bg-color-frosted-active:#6f6f6f99;--button-bg-color-disabled:#e0e0e0;--button-bg-color-positive:#dcfce7;--surface-bg-color-01:#f4f4f4;--surface-bg-color-01-hover:#eaeaea;--surface-bg-color-01-active:#e0e0e0;--surface-bg-color-02:#ffffff;--surface-bg-color-inverse:#262626;--surface-bg-color-inverse-hover:#303030;--surface-bg-color-inverse-active:#393939;--surface-bg-color-disabled:#e0e0e0;--surface-bg-color-shadow-01:#dddddd;--surface-bg-color-shadow-02:#c6c6c6;--chip-bg-color-primary:#161616;--chip-bg-color-primary-hover:#1e1e1e;--chip-bg-color-primary-active:#262626;--chip-bg-color-subtle:#f4f4f4;--chip-bg-color-subtle-hover:#eaeaea;--chip-bg-color-subtle-active:#e0e0e0;--chip-bg-color-outline-hover:#f4f4f4;--chip-bg-color-outline-active:#eaeaea;--label-bg-color-accent:#ff3944;--sidebar-animation-duration-default:0.5s;--search-modal-animation-duration-default:0.25s;--search-modal-animation-duration-mobile-default:0.35s;}.cropper-container{direction:ltr;font-size:0;line-height:0;position:relative;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cropper-container img{backface-visibility:hidden;display:block;height:100%;image-orientation:0deg;max-height:none !important;max-width:none !important;min-height:0 !important;min-width:0 !important;width:100%}.cropper-wrap-box,.cropper-canvas,.cropper-drag-box,.cropper-crop-box,.cropper-modal{bottom:0;left:0;position:absolute;right:0;top:0}.cropper-wrap-box,.cropper-canvas{overflow:hidden}.cropper-drag-box{background-color:#fff;opacity:0}.cropper-modal{background-color:#000;opacity:0.4}.cropper-view-box{display:block;height:100%;overflow:hidden;width:100%;border-radius:5px}.cropper-face,.cropper-point{display:block;height:100%;opacity:0.1;position:absolute;width:100%}.cropper-face{left:0;top:0;border-radius:5px}.cropper-point{--cropper-point-width:44px;height:var(--cropper-point-width);width:var(--cropper-point-width);opacity:1}.point-e,.point-s,.point-w,.point-n{display:none}.point-ne,.point-nw,.point-sw,.point-se{--delta:-9px}.point-ne{cursor:nesw-resize;right:var(--delta);top:var(--delta)}.point-nw{cursor:nwse-resize;left:var(--delta);top:var(--delta)}.point-sw{cursor:nesw-resize;bottom:var(--delta);left:var(--delta)}.point-se{cursor:nwse-resize;bottom:var(--delta);right:var(--delta)}.cropper-point::before{position:absolute;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='38' height='38' viewBox='0 0 38 38' fill='none'%3E%3Cpath d='M3 35H23C29.6274 35 35 29.6274 35 23V3' stroke='white' stroke-width='6' stroke-linecap='square'/%3E%3C/svg%3E\");display:block;pointer-events:none}.point-ne::before{transform:rotate(-90deg);left:0px;top:6px}.point-nw::before{transform:rotate(180deg);left:6px;top:6px}.point-sw::before{transform:rotate(90deg);left:6px;top:0px}.point-se::before{left:0px;top:0px}.cropper-invisible{opacity:0}.cropper-hide{display:block;height:0;position:absolute;width:0}.cropper-hidden{display:none !important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}.visually-hidden{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}swiper-container::part(bullet){width:8px;height:8px;border-radius:var(--border-radius-full);background:var(--color-border-02);transition:width 0.25s cubic-bezier(0.4, 0, 0.2, 1),\n height 0.25s cubic-bezier(0.4, 0, 0.2, 1),\n border-radius 0.25s cubic-bezier(0.4, 0, 0.2, 1),\n background 0.25s cubic-bezier(0.4, 0, 0.2, 1),\n transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);margin:0;opacity:1;cursor:pointer;border:none;outline:none;transform:scale(1);position:relative}swiper-container::part(bullet)::after{content:\"\";position:absolute;top:-8px;left:-8px;right:-8px;bottom:-8px;cursor:pointer}swiper-container::part(bullet):hover{background:rgba(22, 22, 22, 0.5);transform:scale(1.2)}swiper-container::part(bullet-active){width:24px;height:8px;border-radius:var(--spacing-50);background:var(--color-icon-helper)}swiper-container::part(bullet-active):hover{background:var(--color-icon-secondary);transform:scale(1.1)}:host{--shop-the-look-shadow:0px 2px 4px 0px rgba(0, 0, 0, 0.25);display:block;font-family:var(--font-family-base);box-sizing:border-box;max-width:100%}.shop-the-look-container{position:relative;width:100%;background:var(--color-bg-base)}.main-content{position:relative;display:flex;flex-direction:column;gap:var(--spacing-200);align-items:center}.actions-container{width:100%;display:flex;align-items:center;gap:var(--spacing-300);margin-top:var(--spacing-250);justify-content:flex-end}.upload-button{display:inline-flex;padding:var(--spacing-150);justify-content:center;align-items:center;gap:var(--spacing-100);background:var(--button-bg-color-primary);border:none;border-radius:var(--border-radius-100);color:var(--color-text-inverse);font-family:var(--font-family-base);font-size:16px;font-weight:500;cursor:pointer;transition:background 0.2s ease}.upload-button-icon{display:inline-flex;align-items:center}.upload-button-text{display:contents}.upload-button:hover{background:var(--button-bg-color-primary-hover)}.upload-button:disabled{cursor:not-allowed}.image-container{position:relative;border-radius:var(--border-radius-200);overflow:hidden;background:var(--color-field-02);display:flex;justify-content:center;align-items:center;box-sizing:border-box;max-width:100%}.main-image{display:block;-o-object-fit:contain;object-fit:contain}.swiper-container-wrapper{width:100%;height:100%;display:flex;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%}swiper-container{width:100%;height:100%;border-radius:var(--border-radius-200);overflow:hidden}swiper-slide{display:flex;justify-content:center;align-items:center;width:100%;height:100%;flex-shrink:0}swiper-container::part(pagination){bottom:var(--spacing-250);display:flex;justify-content:center;align-items:center;gap:var(--spacing-100);padding:var(--spacing-100) 0}swiper-container::part(bullet-active):hover{background:var(--color-icon-secondary);transform:scale(1.1)}.carousel-navigation{display:flex;gap:var(--spacing-100)}.swiper-button-prev,.swiper-button-next{position:relative;width:48px;height:48px;background:var(--button-bg-color-secondary);border:none;border-radius:var(--border-radius-full);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background 0.3s ease,\n opacity 0.3s ease;margin:0}.swiper-button-prev:hover,.swiper-button-next:hover{background:var(--button-bg-color-secondary-hover)}.swiper-button-next svg{transform:rotate(180deg)}.swiper-button-prev,.swiper-button-next{color:var(--color-text-secondary)}.swiper-button-prev.disabled,.swiper-button-next.disabled{opacity:0.5;cursor:not-allowed;pointer-events:none}.desktop-carousel{position:relative;width:100%;max-width:none}.desktop-carousel swiper-container{width:100%;height:100%;justify-content:flex-start}.desktop-carousel .swiper-wrapper{justify-content:flex-start;align-items:flex-start}.desktop-carousel .main-image{overflow:hidden;border-radius:var(--border-radius-200)}.desktop-carousel vviinn-detected-object{position:absolute;z-index:15;overflow:visible}.shop-the-look-container .desktop-carousel swiper-slide{width:auto;flex-shrink:0}.shop-the-look-container .desktop-carousel swiper-container::part(pagination){display:none}.mobile-slider swiper-slide{width:auto;display:flex;justify-content:center}.mobile-slider swiper-container::part(pagination){display:flex}.shop-the-look-container .mobile-slider swiper-container::part(pagination){display:flex;justify-content:center;align-items:center;gap:var(--spacing-100);padding:var(--spacing-100) 0}.modal-content-wrapper{position:absolute;background:var(--color-bg-base);border-radius:var(--border-radius-150);overflow:hidden;box-shadow:0 2px 4px 0 rgba(0, 0, 0, 0.25);z-index:10000;top:var(--modal-y, 50%);left:var(--modal-x, 50%)}.modal-content-wrapper.mobile-modal{max-width:calc(100vw - 32px);max-height:calc(100vh - 64px);margin:0}.modal-content-wrapper[style*=\"--modal-anchor: top-left\"]{transform:translate(0, 0)}.modal-content-wrapper[style*=\"--modal-anchor: top-right\"]{transform:translate(-100%, 0)}.modal-content-wrapper[style*=\"--modal-anchor: bottom-left\"]{transform:translate(0, -100%)}.modal-content-wrapper[style*=\"--modal-anchor: bottom-right\"]{transform:translate(-100%, -100%)}.modal-content-wrapper:not([style*=\"--modal-anchor\"]){transform:translate(-50%, -50%)}.modal-body{padding:var(--spacing-100)}.search-results-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--spacing-50);width:140px}.result-item{cursor:pointer;border-radius:var(--spacing-75);overflow:hidden;aspect-ratio:var(--product-card-image-aspect-ratio, 1)}.result-image{width:100%;height:100%;position:relative}.result-image img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.product-grid-container.hidden,.product-details-container.hidden{display:none}.product-details{display:flex;flex-direction:column;height:100%;gap:var(--spacing-75);width:-moz-fit-content;width:fit-content}.product-header{display:flex;align-items:center}.product-content{flex:1;position:relative}.product-details-card-wrapper{height:100%;padding:0;width:160px;max-width:160px}.product-details-card{height:100%;background:var(--color-bg-base);border:none;width:100%;max-width:100%}.back-to-grid-button{display:contents;background:none;border:none;cursor:pointer;padding:0}.back-to-grid-button svg{width:24px;height:24px;color:var(--color-icon-helper);transition:color 0.2s ease}.back-to-grid-button:hover svg{color:var(--color-icon-secondary)}vviinn-product-card::part(price-container){flex-direction:row}vviinn-image::part(image),.product-details-card-wrapper vviinn-product-card::part(image),.product-details-card-wrapper vviinn-product-card::part(image-picture){border-radius:var(--border-radius-100);overflow:hidden}.search-loader{position:absolute;top:var(--spacing-200);right:var(--spacing-200);z-index:100;background:rgba(255, 255, 255, 0.9);border-radius:var(--border-radius-full);padding:var(--spacing-100);backdrop-filter:blur(4px)}.search-loader vviinn-preloader{width:24px;height:24px}.shop-the-look-container.modal-open vviinn-detected-object{z-index:10001}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes slideUp{from{transform:translateY(100%)}to{transform:translateY(0)}}.desktop-carousel vviinn-detected-object{position:absolute;z-index:15;overflow:visible}.desktop-carousel .main-image{overflow:hidden;border-radius:var(--border-radius-200)}.shop-the-look-container .desktop-carousel swiper-container::part(pagination){display:none}.desktop-carousel .swiper-button-prev,.desktop-carousel .swiper-button-next{display:flex}.desktop-carousel{max-width:none}.desktop-carousel .swiper-wrapper{justify-content:flex-start;align-items:flex-start}.shop-the-look-container .desktop-carousel swiper-slide{width:auto;flex-shrink:0}.mobile-slider swiper-slide{width:auto;display:flex;justify-content:center}@media (max-width: 768px){.shop-the-look-container:not(.with-cropper) .carousel-navigation{display:none}.mobile-slider{width:100%}.shop-the-look-container .mobile-slider swiper-slide{width:100%;flex-shrink:0}.shop-the-look-container{width:100%;max-width:100vw}.shop-the-look-container .image-container,.shop-the-look-container swiper-container,.shop-the-look-container swiper-slide{width:-moz-fit-content;width:fit-content;max-width:100%}swiper-container::part(wrapper){align-items:center}.shop-the-look-container .main-image{max-width:100%;height:auto;width:auto;-o-object-fit:contain;object-fit:contain}.modal-content-wrapper.desktop-modal{max-width:calc(100vw - 16px);max-height:calc(100vh - 48px)}.search-results-grid{width:min(140px, calc(100vw - 32px));gap:var(--spacing-50)}.carousel-navigation{bottom:var(--spacing-50);right:var(--spacing-50)}.product-details-card-wrapper{width:120px;max-width:120px}}.cropper-wrap-box{border-radius:var(--border-radius-200);overflow:hidden}.widget-style-cornered .image-container,.widget-style-cornered swiper-container,.widget-style-cornered .desktop-carousel .main-image,.widget-style-cornered .modal-content-wrapper,.widget-style-cornered .result-item,.widget-style-cornered .desktop-carousel .swiper-button-prev,.widget-style-cornered .desktop-carousel .swiper-button-next,.widget-style-cornered .cropper-wrap-box,.widget-style-cornered vviinn-image::part(image),.widget-style-cornered .product-details-card-wrapper vviinn-product-card::part(image),.widget-style-cornered .product-details-card-wrapper vviinn-product-card::part(image-picture),.widget-style-cornered .upload-button,.widget-style-cornered .carousel-navigation button{border-radius:0}";export{F as vviinn_shop_the_look}
|