the-foxy-library 1.0.20 → 1.0.21
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/{factory-DOvX72Vv.js → factory-NSOuLE3E.js} +4 -3
- package/dist/cjs/factory-NSOuLE3E.js.map +1 -0
- package/dist/cjs/ion-icon_12.cjs.entry.js +1 -1
- package/dist/cjs/iv-card_3.cjs.entry.js +1 -1
- package/dist/cjs/iv-dynamic-products-carousel.cjs.entry.js +1 -1
- package/dist/cjs/iv-dynamic-products.cjs.entry.js +1 -1
- package/dist/cjs/iv-recently-viewed.cjs.entry.js +1 -1
- package/dist/collection/utils/storefront_api/factory.js +2 -1
- package/dist/collection/utils/storefront_api/factory.js.map +1 -1
- package/dist/components/iv-card.js +1 -1
- package/dist/components/iv-dynamic-products-carousel.js +2 -2
- package/dist/components/iv-dynamic-products.js +2 -2
- package/dist/components/iv-modal.js +1 -1
- package/dist/components/iv-recently-viewed.js +2 -2
- package/dist/components/iv-sidebar.js +1 -1
- package/dist/components/iv-suggest.js +1 -1
- package/dist/components/iv-wishlist-view.js +1 -1
- package/dist/components/{p-CTpPxZeS.js → p-BVL7DqEj.js} +4 -3
- package/dist/components/p-BVL7DqEj.js.map +1 -0
- package/dist/components/{p-CZzebQGC.js → p-DE0H3IbO.js} +3 -3
- package/dist/components/{p-CZzebQGC.js.map → p-DE0H3IbO.js.map} +1 -1
- package/dist/components/{p-DbjqrXQL.js → p-IJUHvLzw.js} +3 -3
- package/dist/components/{p-DbjqrXQL.js.map → p-IJUHvLzw.js.map} +1 -1
- package/dist/esm/{factory-CEG06b1_.js → factory-Bf2IW1Vz.js} +4 -3
- package/dist/esm/factory-Bf2IW1Vz.js.map +1 -0
- package/dist/esm/ion-icon_12.entry.js +1 -1
- package/dist/esm/iv-card_3.entry.js +1 -1
- package/dist/esm/iv-dynamic-products-carousel.entry.js +1 -1
- package/dist/esm/iv-dynamic-products.entry.js +1 -1
- package/dist/esm/iv-recently-viewed.entry.js +1 -1
- package/dist/intravenous/intravenous.esm.js +1 -1
- package/dist/intravenous/{p-b4e1f1e2.entry.js → p-28d83a02.entry.js} +2 -2
- package/dist/intravenous/{p-9d4362b5.entry.js → p-7e46d5b9.entry.js} +2 -2
- package/dist/intravenous/{p-c8ce6b0d.entry.js → p-8d726fec.entry.js} +2 -2
- package/dist/intravenous/p-DujflZ2b.js +2 -0
- package/dist/intravenous/p-DujflZ2b.js.map +1 -0
- package/dist/intravenous/{p-a222b1b9.entry.js → p-a28bd4eb.entry.js} +2 -2
- package/dist/intravenous/{p-deb1d7cf.entry.js → p-ff2b5ad8.entry.js} +2 -2
- package/package.json +1 -1
- package/dist/cjs/factory-DOvX72Vv.js.map +0 -1
- package/dist/components/p-CTpPxZeS.js.map +0 -1
- package/dist/esm/factory-CEG06b1_.js.map +0 -1
- package/dist/intravenous/p-DiJKGz2q.js +0 -2
- package/dist/intravenous/p-DiJKGz2q.js.map +0 -1
- /package/dist/intravenous/{p-b4e1f1e2.entry.js.map → p-28d83a02.entry.js.map} +0 -0
- /package/dist/intravenous/{p-9d4362b5.entry.js.map → p-7e46d5b9.entry.js.map} +0 -0
- /package/dist/intravenous/{p-c8ce6b0d.entry.js.map → p-8d726fec.entry.js.map} +0 -0
- /package/dist/intravenous/{p-a222b1b9.entry.js.map → p-a28bd4eb.entry.js.map} +0 -0
- /package/dist/intravenous/{p-deb1d7cf.entry.js.map → p-ff2b5ad8.entry.js.map} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { r as registerInstance, j as createErrorHandler, a as state, h } from './index-Cb3Nnjkn.js';
|
|
2
|
-
import { f as fetchProducts } from './factory-
|
|
2
|
+
import { f as fetchProducts } from './factory-Bf2IW1Vz.js';
|
|
3
3
|
import { p as productCache } from './productCache-C9YXddZh.js';
|
|
4
4
|
|
|
5
5
|
const ivDynamicProductsCss = ".iv-dynamic-products{box-sizing:border-box;width:var(--iv-dynamic-products-width, 100%);max-width:var(--iv-dynamic-products-max-width, 100%);margin:var(--iv-dynamic-products-margin, 0);padding:var(--iv-dynamic-products-padding, 0);background:var(--iv-dynamic-products-bg, transparent);border:var(--iv-dynamic-products-border, none);border-radius:var(--iv-dynamic-products-radius, 0);box-shadow:var(--iv-dynamic-products-shadow, none);color:var(--iv-dynamic-products-color, inherit);--iv-layout-gap:var(--iv-dynamic-products-gap, 1.5rem)}.iv-dynamic-products-title{margin:var(--iv-dynamic-products-title-margin, 0 0 1rem 0);font-size:var(--iv-dynamic-products-title-font-size, clamp(1.125rem, 1vw + 1rem, 1.75rem));font-weight:var(--iv-dynamic-products-title-font-weight, 600);line-height:var(--iv-dynamic-products-title-line-height, 1.2);letter-spacing:var(--iv-dynamic-products-title-letter-spacing, normal)}.iv-dynamic-products-error,.iv-dynamic-products-empty{padding:var(--iv-dynamic-products-state-padding, 1rem);border:var(--iv-dynamic-products-state-border, none);background:var(--iv-dynamic-products-state-bg, transparent);color:var(--iv-dynamic-products-state-color, inherit);font-size:var(--iv-dynamic-products-state-font-size, 0.875rem);text-align:var(--iv-dynamic-products-state-text-align, center)}.iv-dynamic-products-products{width:100%;margin:var(--iv-dynamic-products-products-margin, 0);padding:var(--iv-dynamic-products-products-padding, 0)}.iv-layout--iv-dynamic-products-layout{--iv-layout-gap:var(--iv-dynamic-products-grid-gap, var(--iv-dynamic-products-gap, 1.5rem));align-items:var(--iv-dynamic-products-grid-align, stretch);justify-content:var(--iv-dynamic-products-grid-justify, flex-start)}.iv-dynamic-products .iv-card{margin:var(--iv-dynamic-products-card-margin, 0);--iv-card-padding:var(--iv-dynamic-products-card-padding, var(--iv-card-padding, 0))}@media (min-width: 40rem){.iv-dynamic-products{--iv-dynamic-products-gap:var(--iv-dynamic-products-gap-md, var(--iv-dynamic-products-gap, 1.5rem))}}@media (min-width: 64rem){.iv-dynamic-products{--iv-dynamic-products-gap:var(--iv-dynamic-products-gap-lg, var(--iv-dynamic-products-gap, 1.5rem))}}.iv-dynamic-products--scroll-x .iv-layout--iv-dynamic-products-layout{display:flex !important;overflow-x:auto;scrollbar-width:var(--iv-dynamic-products-scrollbar-width, thin);-webkit-overflow-scrolling:touch}.iv-dynamic-products--scroll-x .iv-layout--iv-dynamic-products-layout>*{flex:0 0 var(--iv-dynamic-products-scroll-item-width, 75%)}@media (prefers-reduced-motion: reduce){.iv-dynamic-products{scroll-behavior:auto}}";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { r as registerInstance, h } from './index-Cb3Nnjkn.js';
|
|
2
|
-
import { g as getIdFromHandle, b as fetchProductByID } from './factory-
|
|
2
|
+
import { g as getIdFromHandle, b as fetchProductByID } from './factory-Bf2IW1Vz.js';
|
|
3
3
|
import { d as getProductHandle } from './factory-CL9gCgzW.js';
|
|
4
4
|
|
|
5
5
|
const ivRecentlyViewedCss = ".iv-recently-viewed{background:var(--iv-recently-viewed-background, none);padding:var(--iv-recently-viewed-padding, 1rem 0);margin:var(--iv-recently-viewed-margin, 0);border:var(--iv-recently-viewed-border, none);border-radius:var(--iv-recently-viewed-radius, 0);position:relative;box-sizing:border-box;width:100%;display:block}.iv-recently-viewed-title{margin:var(--iv-recently-viewed-title-margin, 0 0 0.75rem);font-size:var(--iv-recently-viewed-title-font-size, 1.25rem);line-height:var(--iv-recently-viewed-title-line-height, 1.2);font-weight:var(--iv-recently-viewed-title-weight, 600);color:var(--iv-recently-viewed-title-color, inherit)}.iv-recently-viewed__list,.iv-recently-viewed__items{list-style:none;margin:0;padding:0}.iv-recently-viewed iv-layout,.iv-recently-viewed .iv-layout{--gap:var(--iv-recently-viewed-gap, 1rem);gap:var(--iv-recently-viewed-gap, 1rem)}.iv-recently-viewed iv-card,.iv-recently-viewed .iv-card{max-width:var(--iv-recently-viewed-card-max-width, 260px);width:100%}.iv-recently-viewed-no-history,.iv-recently-viewed__no-history,.iv-recently-viewed-no-history-message{font-size:var(--iv-recently-viewed-no-history-font-size, 0.875rem);color:var(--iv-recently-viewed-no-history-color, #666);padding:var(--iv-recently-viewed-no-history-padding, 0.5rem 0)}.iv-recently-viewed>*+*{margin-top:var(--iv-recently-viewed-stack-gap, 1rem)}@media (min-width: 640px){.iv-recently-viewed{padding:var(--iv-recently-viewed-padding-md, var(--iv-recently-viewed-padding, 1.25rem 0))}.iv-recently-viewed-title{font-size:var(--iv-recently-viewed-title-font-size-md, 1.375rem)}}@media (min-width: 960px){.iv-recently-viewed-title{font-size:var(--iv-recently-viewed-title-font-size-lg, 1.5rem)}}.iv-recently-viewed::after{content:var(--iv-recently-viewed-after-content, \"\");display:var(--iv-recently-viewed-after-display, none);position:absolute;left:0;right:0;bottom:0;height:1px;background:var(--iv-recently-viewed-after-border-color, currentColor);opacity:var(--iv-recently-viewed-after-opacity, 0.1)}.iv-recently-viewed[data-tight]{--iv-recently-viewed-gap:0.5rem;--iv-recently-viewed-stack-gap:0.75rem}";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{p as e,b as t}from"./p-Cb3Nnjkn.js";export{s as setNonce}from"./p-Cb3Nnjkn.js";import{g as a}from"./p-6yYowr-X.js";var i=()=>{const t=import.meta.url;const a={};if(t!==""){a.resourcesUrl=new URL(".",t).href}return e(a)};i().then((async e=>{await a();return t([["p-
|
|
1
|
+
import{p as e,b as t}from"./p-Cb3Nnjkn.js";export{s as setNonce}from"./p-Cb3Nnjkn.js";import{g as a}from"./p-6yYowr-X.js";var i=()=>{const t=import.meta.url;const a={};if(t!==""){a.resourcesUrl=new URL(".",t).href}return e(a)};i().then((async e=>{await a();return t([["p-8d726fec",[[256,"iv-dynamic-products",{type:[1],limit:[2],reversed:[4],componenttitle:[1],titletag:[1],collectionhandle:[1],carousel:[4],requestedfields:[1],calltoaction:[4],buttontext:[1],addtocarttext:[1],emptystring:[1],gridlayout:[1],cachettl:[2],stale:[4],products:[32],errorMsg:[32],staleData:[32]},null,{type:["handlePropChange"],limit:["handlePropChange"],collectionhandle:["handlePropChange"],requestedfields:["handlePropChange"]}]]],["p-3a43aff3",[[256,"iv-suggest",{topqueries:[1],collections:[1],products:[1],banner:[1],bannerurl:[1],bannertitle:[1],bannertitletag:[1],bannerbuttontext:[1],topquerytitle:[1],productstitle:[1],collectionstitle:[1],gridlayout:[1],requestfields:[1]}]]],["p-a28bd4eb",[[256,"iv-dynamic-products-carousel",{type:[1],limit:[2],reversed:[4],componenttitle:[1],titletag:[1],collectionhandle:[1],requestedfields:[1],calltoaction:[4],buttontext:[1],addtocarttext:[1],emptystring:[1],cachettl:[2],stale:[4],excluse:[1],products:[32],errorMsg:[32],staleData:[32],page:[32]},null,{type:["handlePropChange"],limit:["handlePropChange"],collectionhandle:["handlePropChange"],requestedfields:["handlePropChange"]}]]],["p-51f91c3c",[[256,"iv-predictive-search",{searchlabel:[1],labelposition:[1],action:[1],method:[1],placeholder:[1],minchars:[2],debounce:[2],resultslimit:[2],showspinner:[4],noresultstext:[1],requestedfields:[1],requestedresources:[1],showallbuttontext:[1],querybuttontext:[1],clearbutton:[1],expandable:[4],tablayout:[1],gridlayout:[1],searchTerm:[32],searchReturnData:[32],noResults:[32]}]]],["p-28d83a02",[[256,"iv-recently-viewed",{componenttitle:[1],titletag:[1],numbertoshow:[2],noviewhistory:[1],requestedfields:[1],items:[32]}]]],["p-40d5f2dd",[[260,"iv-shop-the-look",{behaviour:[1],coordinates:[1],producthandles:[1]}]]],["p-19185e49",[[256,"iv-toast-container",{_bump:[32]}]]],["p-a7d8309c",[[256,"iv-wishlist",{buttonaddvalue:[1],buttonremovevalue:[1],wishlistempty:[1],buttonaddtocartvalue:[1],viewwishlistvalue:[1],productdata:[1],usefields:[1],previewtype:[1]}]]],["p-a66c7492",[[257,"iv-carousel"]]],["p-b2e8bb5f",[[256,"iv-compare-product"]]],["p-1d169085",[[256,"iv-filters"]]],["p-7a73eb94",[[257,"iv-product-upsell"]]],["p-ca10d662",[[260,"sw-in-grid-content"]]],["p-0f07e69c",[[260,"sw-size-guide",{sizeUnits:[32]}]]],["p-3ad476a3",[[260,"iv-banner",{classmodifier:[1],bannerurl:[1],bannerbuttontext:[1],bannertype:[1]}]]],["p-bfe01a14",[[256,"iv-product-pin",{pinProduct:[1,"pin-product"],pinKey:[2,"pin-key"],pinCords:[16],pinBehaviour:[1,"pin-behaviour"]}]]],["p-affde66d",[[260,"iv-tabs",{labels:[16],classModifier:[1,"class-modifier"],tabLayout:[1,"tab-layout"],activeTab:[32]}]]],["p-1394ddc3",[[256,"iv-toast",{message:[1],toastId:[2,"toast-id"],duration:[2],type:[1]}]]],["p-7e46d5b9",[[260,"iv-modal",{newsletterpopuptrigger:[1],newsletterpopuptimedelay:[2],newsletterpopuptitle:[1],newsletterpopuptext:[1],newsletterpopupimage:[1],newsletterpopupdisclaimer:[1],modalState:[32],contentName:[32]},[[4,"openModal","handleOpenModal"]]],[260,"iv-sidebar",{newsletterpopuptrigger:[1],newsletterpopuptimedelay:[2],newsletterpopuptitle:[1],newsletterpopuptext:[1],newsletterpopupimage:[1],newsletterpopupdisclaimer:[1],sidebarState:[32],contentName:[32]},[[4,"openSidebar","handleopenSidebar"]]],[260,"iv-accordion",{labels:[1],allowmultiple:[4],startopen:[4],dropdownicon:[1],openPanels:[32]}],[256,"iv-link-list",{linktype:[1],showicons:[4],links:[1],layout:[1]}],[256,"iv-newsletter",{formsubmitbtntext:[1],formsuccessmessage:[1],formfailuremessage:[1],formplaceholdertext:[1],formlabeltext:[1],formstackbutton:[4],formtitletag:[1],formtitletext:[1],formdescriptiontext:[1],includeloadingspinner:[4],email:[32],formFeedback:[32],status:[32]}],[260,"iv-event-button",{eventname:[1],eventdetail:[8],buttontext:[1]}],[260,"iv-footer",{gridtemplateareas:[1],blockElements:[32]}],[260,"iv-two-col-media",{mobilebehaviour:[1],whichcolumn:[1],stackorder:[1],verticalalign:[1],horizontalalign:[1],gap:[1],hasMediaCol1:[32],hasMediaCol2:[32]}],[256,"iv-wishlist-view"],[257,"ion-icon",{mode:[1025],color:[1],ios:[1],md:[1],flipRtl:[4,"flip-rtl"],name:[513],src:[1],icon:[8],size:[1],lazy:[4],sanitize:[4],svgContent:[32],isVisible:[32]},null,{name:["loadIcon"],src:["loadIcon"],icon:["loadIcon"],ios:["loadIcon"],md:["loadIcon"]}],[256,"iv-spinner",{show:[4]}],[260,"iv-button",{type:[1],classmodifier:[1],eventname:[1],eventdetail:[1],buttonClick:[16]}]]],["p-ff2b5ad8",[[256,"iv-card",{data:[16],fields:[1],cardtype:[1],classmodifier:[1],buttontext:[1],calltoaction:[4],addtocarttext:[1]}],[260,"iv-layout",{sectionId:[1,"section-id"],gridTemplateAreas:[1,"grid-template-areas"],gap:[1],verticalAlign:[1,"vertical-align"],horizontalAlign:[1,"horizontal-align"],wrapperTag:[1,"wrapper-tag"],classModifier:[1,"class-modifier"]}],[260,"iv-link",{classmodifier:[1],linktype:[1],linkhref:[1],linktarget:[1],linkrel:[1],linkariaLabel:[1,"linkaria-label"]}]]]],e)}));
|
|
2
2
|
//# sourceMappingURL=intravenous.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e,h as i}from"./p-Cb3Nnjkn.js";import{g as t,b as r}from"./p-
|
|
2
|
-
//# sourceMappingURL=p-
|
|
1
|
+
import{r as e,h as i}from"./p-Cb3Nnjkn.js";import{g as t,b as r}from"./p-DujflZ2b.js";import{d as n}from"./p-CL9gCgzW.js";const a='.iv-recently-viewed{background:var(--iv-recently-viewed-background, none);padding:var(--iv-recently-viewed-padding, 1rem 0);margin:var(--iv-recently-viewed-margin, 0);border:var(--iv-recently-viewed-border, none);border-radius:var(--iv-recently-viewed-radius, 0);position:relative;box-sizing:border-box;width:100%;display:block}.iv-recently-viewed-title{margin:var(--iv-recently-viewed-title-margin, 0 0 0.75rem);font-size:var(--iv-recently-viewed-title-font-size, 1.25rem);line-height:var(--iv-recently-viewed-title-line-height, 1.2);font-weight:var(--iv-recently-viewed-title-weight, 600);color:var(--iv-recently-viewed-title-color, inherit)}.iv-recently-viewed__list,.iv-recently-viewed__items{list-style:none;margin:0;padding:0}.iv-recently-viewed iv-layout,.iv-recently-viewed .iv-layout{--gap:var(--iv-recently-viewed-gap, 1rem);gap:var(--iv-recently-viewed-gap, 1rem)}.iv-recently-viewed iv-card,.iv-recently-viewed .iv-card{max-width:var(--iv-recently-viewed-card-max-width, 260px);width:100%}.iv-recently-viewed-no-history,.iv-recently-viewed__no-history,.iv-recently-viewed-no-history-message{font-size:var(--iv-recently-viewed-no-history-font-size, 0.875rem);color:var(--iv-recently-viewed-no-history-color, #666);padding:var(--iv-recently-viewed-no-history-padding, 0.5rem 0)}.iv-recently-viewed>*+*{margin-top:var(--iv-recently-viewed-stack-gap, 1rem)}@media (min-width: 640px){.iv-recently-viewed{padding:var(--iv-recently-viewed-padding-md, var(--iv-recently-viewed-padding, 1.25rem 0))}.iv-recently-viewed-title{font-size:var(--iv-recently-viewed-title-font-size-md, 1.375rem)}}@media (min-width: 960px){.iv-recently-viewed-title{font-size:var(--iv-recently-viewed-title-font-size-lg, 1.5rem)}}.iv-recently-viewed::after{content:var(--iv-recently-viewed-after-content, "");display:var(--iv-recently-viewed-after-display, none);position:absolute;left:0;right:0;bottom:0;height:1px;background:var(--iv-recently-viewed-after-border-color, currentColor);opacity:var(--iv-recently-viewed-after-opacity, 0.1)}.iv-recently-viewed[data-tight]{--iv-recently-viewed-gap:0.5rem;--iv-recently-viewed-stack-gap:0.75rem}';const v="iv-recently-viewed";const o="iv:recentlyViewed";const d=class{constructor(i){e(this,i)}componenttitle;titletag="span";numbertoshow=4;noviewhistory;requestedfields="images,title,price";items=[];currentProductId=null;historyAvailable;async componentWillLoad(){await this.trackCurrentProduct();await this.loadForRender();this.items.length>0?this.historyAvailable=true:this.historyAvailable=false}safeParse(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}loadStorage(){if(typeof window==="undefined")return{};return this.safeParse(localStorage.getItem(o))||{}}saveStorage(e){try{localStorage.setItem(o,JSON.stringify(e))}catch(e){console.warn("Unable to persist recently viewed",e)}}async trackCurrentProduct(){const e=n();if(!e)return;const i=await t(e);if(!i)return;this.currentProductId=i;const a=this.loadStorage();if(a[i])return;try{const e=this.requestedfields;const t=await r(i,e);if(!t)return;a[i]=t;this.saveStorage(a)}catch(e){console.warn("Failed to fetch/store recently viewed product",e)}}async loadForRender(){const e=this.loadStorage();const i=Object.values(e);const t=this.currentProductId?i.filter((e=>e.id!==this.currentProductId)):i;const r=[...t].reverse();this.items=r.slice(0,this.numbertoshow)}render(){const e=this.titletag;return i("div",{key:"8fca1f07b147d3591f011d7cde2378958c2990f5",class:v},this.historyAvailable?[this.componenttitle&&i(e,{class:`${v}-title`},this.componenttitle),i("iv-layout",{classModifier:v},this.items.map((e=>i("iv-card",{data:e,fields:this.requestedfields,classmodifier:v,calltoaction:true,addtocarttext:"Add to cart",cardtype:"products"}))))]:this.noviewhistory?i("div",{class:`${v}-no-history`},this.noviewhistory):null)}};d.style=a;export{d as iv_recently_viewed};
|
|
2
|
+
//# sourceMappingURL=p-28d83a02.entry.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{g as t,r as e,h as i,H as o,c as n,d as s,a as r,e as a}from"./p-Cb3Nnjkn.js";import{r as c,i as l,a as d,c as h,g as b}from"./p-CL9gCgzW.js";import{a as u}from"./p-DiJKGz2q.js";let v;const f=()=>{if(typeof window==="undefined"){return new Map}else{if(!v){const t=window;t.Ionicons=t.Ionicons||{};v=t.Ionicons.map=t.Ionicons.map||new Map}return v}};const m=t=>{let e=w(t.src);if(e){return e}e=g(t.name,t.icon,t.mode,t.ios,t.md);if(e){return p(e,t)}if(t.icon){e=w(t.icon);if(e){return e}e=w(t.icon[t.mode]);if(e){return e}}return null};const p=(e,i)=>{const o=f().get(e);if(o){return o}try{return t(`svg/${e}.svg`)}catch(t){console.log("e",t);console.warn(`[Ionicons Warning]: Could not load icon with name "${e}". Ensure that the icon is registered using addIcons or that the icon SVG data is passed directly to the icon component.`,i)}};const g=(t,e,i,o,n)=>{i=(i&&x(i))==="ios"?"ios":"md";if(o&&i==="ios"){t=x(o)}else if(n&&i==="md"){t=x(n)}else{if(!t&&e&&!y(e)){t=e}if(k(t)){t=x(t)}}if(!k(t)||t.trim()===""){return null}const s=t.replace(/[a-z]|-|\d/gi,"");if(s!==""){return null}return t};const w=t=>{if(k(t)){t=t.trim();if(y(t)){return t}}return null};const y=t=>t.length>0&&/(\/|\.)/.test(t);const k=t=>typeof t==="string";const x=t=>t.toLowerCase();const $=(t,e=[])=>{const i={};e.forEach((e=>{if(t.hasAttribute(e)){const o=t.getAttribute(e);if(o!==null){i[e]=t.getAttribute(e)}t.removeAttribute(e)}}));return i};const z=t=>{if(t){if(t.dir!==""){return t.dir.toLowerCase()==="rtl"}}return(document===null||document===void 0?void 0:document.dir.toLowerCase())==="rtl"};const C=t=>{const e=document.createElement("div");e.innerHTML=t;for(let t=e.childNodes.length-1;t>=0;t--){if(e.childNodes[t].nodeName.toLowerCase()!=="svg"){e.removeChild(e.childNodes[t])}}const i=e.firstElementChild;if(i&&i.nodeName.toLowerCase()==="svg"){const t=i.getAttribute("class")||"";i.setAttribute("class",(t+" s-ion-icon").trim());if(S(i)){return e.innerHTML}}return""};const S=t=>{if(t.nodeType===1){if(t.nodeName.toLowerCase()==="script"){return false}for(let e=0;e<t.attributes.length;e++){const i=t.attributes[e].name;if(k(i)&&i.toLowerCase().indexOf("on")===0){return false}}for(let e=0;e<t.childNodes.length;e++){if(!S(t.childNodes[e])){return false}}}return true};const _=t=>t.startsWith("data:image/svg+xml");const M=t=>t.indexOf(";utf8,")!==-1;const j=new Map;const T=new Map;let L;function P(t){const e="";j.set(t,e);return e}const N=(t,e)=>{const i=T.get(t);if(i){return i}if(typeof fetch!=="undefined"&&typeof document!=="undefined"){if(_(t)&&M(t)){return Promise.resolve(I(t))}return D(t,e)}return Promise.resolve(P(t))};function I(t){if(!L){L=new DOMParser}const e=L.parseFromString(t,"text/html");const i=e.querySelector("svg");if(i){j.set(t,i.outerHTML);return i.outerHTML}throw new Error(`Could not parse svg from ${t}`)}function D(t,e){const i=fetch(t).then((i=>i.text().then((i=>{if(i&&e!==false){i=C(i)}const o=i||"";j.set(t,o);return o})).catch((()=>P(t))))).catch((()=>P(t)));T.set(t,i);return i}const F=":host{display:inline-block;width:1em;height:1em;contain:strict;fill:currentColor;box-sizing:content-box !important}:host .ionicon{stroke:currentColor}.ionicon-fill-none{fill:none}.ionicon-stroke-width{stroke-width:var(--ionicon-stroke-width, 32px)}.icon-inner,.ionicon,svg{display:block;height:100%;width:100%}@supports (background: -webkit-named-image(i)){:host(.icon-rtl) .icon-inner{transform:scaleX(-1)}}@supports not selector(:dir(rtl)) and selector(:host-context([dir='rtl'])){:host(.icon-rtl) .icon-inner{transform:scaleX(-1)}}:host(.flip-rtl):host-context([dir='rtl']) .icon-inner{transform:scaleX(-1)}@supports selector(:dir(rtl)){:host(.flip-rtl:dir(rtl)) .icon-inner{transform:scaleX(-1)}:host(.flip-rtl:dir(ltr)) .icon-inner{transform:scaleX(1)}}:host(.icon-small){font-size:1.125rem !important}:host(.icon-large){font-size:2rem !important}:host(.ion-color){color:var(--ion-color-base) !important}:host(.ion-color-primary){--ion-color-base:var(--ion-color-primary, #3880ff)}:host(.ion-color-secondary){--ion-color-base:var(--ion-color-secondary, #0cd1e8)}:host(.ion-color-tertiary){--ion-color-base:var(--ion-color-tertiary, #f4a942)}:host(.ion-color-success){--ion-color-base:var(--ion-color-success, #10dc60)}:host(.ion-color-warning){--ion-color-base:var(--ion-color-warning, #ffce00)}:host(.ion-color-danger){--ion-color-base:var(--ion-color-danger, #f14141)}:host(.ion-color-light){--ion-color-base:var(--ion-color-light, #f4f5f8)}:host(.ion-color-medium){--ion-color-base:var(--ion-color-medium, #989aa2)}:host(.ion-color-dark){--ion-color-base:var(--ion-color-dark, #222428)}";const E=class{constructor(t){e(this,t);this.iconName=null;this.inheritedAttributes={};this.didLoadIcon=false;this.isVisible=false;this.mode=O();this.lazy=false;this.sanitize=true}componentWillLoad(){this.inheritedAttributes=$(this.el,["aria-label"])}connectedCallback(){this.waitUntilVisible(this.el,"50px",(()=>{this.isVisible=true;this.loadIcon()}))}componentDidLoad(){if(!this.didLoadIcon){this.loadIcon()}}disconnectedCallback(){if(this.io){this.io.disconnect();this.io=undefined}}waitUntilVisible(t,e,i){const o=Boolean(this.lazy&&typeof window!=="undefined"&&window.IntersectionObserver);if(!o){return i()}const n=this.io=new window.IntersectionObserver((t=>{if(t[0].isIntersecting){n.disconnect();this.io=undefined;i()}}),{rootMargin:e});n.observe(t)}loadIcon(){if(this.isVisible){const t=m(this);if(t){if(j.has(t)){this.svgContent=j.get(t)}else{N(t,this.sanitize).then((()=>this.svgContent=j.get(t)))}this.didLoadIcon=true}}this.iconName=g(this.name,this.icon,this.mode,this.ios,this.md)}render(){const{flipRtl:t,iconName:e,inheritedAttributes:n,el:s}=this;const r=this.mode||"md";const a=e?(e.includes("arrow")||e.includes("chevron"))&&t!==false:false;const c=t||a;return i(o,Object.assign({key:"0578c899781ca145dd8205acd9670af39b57cf2e",role:"img",class:Object.assign(Object.assign({[r]:true},X(this.color)),{[`icon-${this.size}`]:!!this.size,"flip-rtl":c,"icon-rtl":c&&z(s)})},n),this.svgContent?i("div",{class:"icon-inner",innerHTML:this.svgContent}):i("div",{class:"icon-inner"}))}static get assetsDirs(){return["svg"]}get el(){return n(this)}static get watchers(){return{name:["loadIcon"],src:["loadIcon"],icon:["loadIcon"],ios:["loadIcon"],md:["loadIcon"]}}};const O=()=>typeof document!=="undefined"&&document.documentElement.getAttribute("mode")||"md";const X=t=>t?{"ion-color":true,[`ion-color-${t}`]:true}:null;E.style=F;const W=":host{display:block}";const H="iv-accordion";const R=class{constructor(t){e(this,t)}labels;allowmultiple;startopen;dropdownicon;openPanels=[];componentWillLoad(){this.openPanels=this.startopen?[0]:[]}togglePanel(t){if(this.allowmultiple){this.openPanels=this.openPanels.includes(t)?this.openPanels.filter((e=>e!==t)):[...this.openPanels,t]}else{this.openPanels=this.openPanels.includes(t)?[]:[t]}}render(){return i("div",{key:"9047082c09a26440770df8f12b107495dcb193cf",class:H},c(this.labels).map(((t,e)=>i("div",{class:"accordion-panel",key:e},i("button",{class:{copy:true,"accordion-header":true,open:this.openPanels.includes(e)},onClick:()=>this.togglePanel(e),"aria-expanded":this.openPanels.includes(e),"aria-controls":`panel-content-${e}`,id:`panel-header-${e}`,type:"button"},t,this.dropdownicon&&i("ion-icon",{class:"accordion-icon",name:this.dropdownicon})),i("div",{id:`panel-content-${e}`,class:{"accordion-content":true,open:this.openPanels.includes(e)},role:"region","aria-labelledby":`panel-header-${e}`,hidden:!this.openPanels.includes(e)},i("slot",{name:`panel-${e}`}))))))}};R.style=W;const G=".iv-button{display:var(--iv-button-display, inline-flex);align-items:var(--iv-button-align, center);justify-content:var(--iv-button-justify, center);gap:var(--iv-button-gap, 0.5rem);box-sizing:border-box;padding:var(--iv-button-padding, 0.75rem 1rem);background:var(--iv-button-bg, transparent);color:var(--iv-button-color, inherit);border:var(--iv-button-border, none);border-radius:var(--iv-button-radius, 0);font:inherit;font-size:var(--iv-button-font-size, inherit);font-weight:var(--iv-button-font-weight, 500);line-height:var(--iv-button-line-height, 1.2);text-decoration:none;cursor:pointer;position:relative;min-width:var(--iv-button-min-width, unset);min-height:var(--iv-button-min-height, 2.5rem);box-shadow:var(--iv-button-shadow, none);transition:var(--iv-button-transition, background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease);-webkit-appearance:none;appearance:none}.iv-button:hover:not(.disabled):not([disabled]),.iv-button:focus-visible:not(.disabled):not([disabled]){background:var(--iv-button-hover-bg, var(--iv-button-bg, transparent));color:var(--iv-button-hover-color, var(--iv-button-color, inherit));border:var(--iv-button-hover-border, var(--iv-button-border, none));box-shadow:var(--iv-button-hover-shadow, var(--iv-button-shadow, none));outline:var(--iv-button-focus-outline, none)}.iv-button:active:not(.disabled):not([disabled]){background:var(--iv-button-active-bg, var(--iv-button-hover-bg, var(--iv-button-bg, transparent)));color:var(--iv-button-active-color, var(--iv-button-hover-color, var(--iv-button-color, inherit)));border:var(--iv-button-active-border, var(--iv-button-hover-border, var(--iv-button-border, none)));box-shadow:var(--iv-button-active-shadow, var(--iv-button-hover-shadow, var(--iv-button-shadow, none)))}.iv-button.disabled,.iv-button[disabled]{cursor:not-allowed;opacity:var(--iv-button-disabled-opacity, 0.5);background:var(--iv-button-disabled-bg, var(--iv-button-bg, transparent));color:var(--iv-button-disabled-color, var(--iv-button-color, inherit));border:var(--iv-button-disabled-border, var(--iv-button-border, none));box-shadow:var(--iv-button-disabled-shadow, none)}.iv-button.variant-card,.iv-card-add-to-cart-btn.iv-button{--iv-button-bg:var(--iv-card-button-bg, transparent);--iv-button-border:var(--iv-card-button-border, none);--iv-button-color:var(--iv-card-button-color, inherit);--iv-button-hover-bg:var(--iv-card-button-hover-bg, var(--iv-button-bg));--iv-button-hover-border:var(--iv-card-button-hover-border, var(--iv-button-border));--iv-button-hover-color:var(--iv-card-button-hover-color, var(--iv-button-color))}.iv-button:focus-visible:not(.disabled):not([disabled]){box-shadow:var(--iv-button-focus-ring, var(--iv-button-hover-shadow, var(--iv-button-shadow, none)))}.iv-button--sm{--iv-button-padding:var(--iv-button-sm-padding, 0.5rem 0.75rem);font-size:var(--iv-button-sm-font-size, 0.875rem)}.iv-button--lg{--iv-button-padding:var(--iv-button-lg-padding, 1rem 1.25rem);font-size:var(--iv-button-lg-font-size, 1.125rem)}.iv-button>svg,.iv-button .icon{width:var(--iv-button-icon-size, 1em);height:var(--iv-button-icon-size, 1em);flex:0 0 auto}@media (prefers-reduced-motion: reduce){.iv-button{transition:none}}";const q=class{constructor(t){e(this,t);this.action=s(this,"action")}type="button";classmodifier;eventname;eventdetail;buttonClick;action;get el(){return n(this)}handleClick=t=>{if(this.buttonClick)this.buttonClick(t);if(this.eventname){const t=this.eventdetail||undefined;this.el.dispatchEvent(new CustomEvent(this.eventname,{bubbles:true,detail:t,composed:true}));this.action.emit(t)}};render(){return i("button",{key:"3b8eb05a504676795eb86bec9b645866630b9023",class:`iv-button ${r.loading?"disabled":undefined} ${this.classmodifier||""}`,type:this.type,disabled:r.loading,onClick:this.handleClick},i("slot",{key:"4b7cea68ef1dfe921dc15feeb54de66f845551c7"}))}};q.style=G;const A=":host{display:block}";const U="iv-event-button";const V=class{constructor(t){e(this,t);this.action=s(this,"action")}eventname;eventdetail;buttontext="Click Me";get host(){return n(this)}action;handleClick=()=>{this.action.emit({eventname:this.eventname,eventdetail:this.eventdetail});if(this.eventname){const t=new CustomEvent(this.eventname,{bubbles:true,composed:true,detail:{content:this.eventdetail}});this.host.dispatchEvent(t)}};render(){return i("button",{key:"98d2d89f17b8f729dfed17e6d2796326bd473569",class:U,onClick:this.handleClick},i("span",{key:"1a3bce85a0a3738c99061be783aeff8f9a387c0b",class:`${U}-text`},i("slot",{key:"831422c3f7ecc8922d24affd65b1a60e2c04cea1"})))}};V.style=A;const B=".iv-footer{display:grid;gap:2rem}.iv-footer .footer-social-links{grid-area:social}.iv-footer .footer-contact-links{grid-area:contact}.iv-footer .footer-newsletter-signup{grid-area:newsletter}.iv-footer .footer-menu{grid-area:menu}.iv-footer .footer-boilerplate{grid-area:boilerplate}.iv-footer .footer-payment-icons{grid-area:payment}";const J="iv-footer";const K=class{constructor(t){e(this,t)}gridtemplateareas;get host(){return n(this)}blockElements=[];get getAreas(){return!!this.gridtemplateareas}get test(){return this.getAreas?this.gridtemplateareas.split(",").map((t=>`"${t.trim()}"`)).join(" "):""}render(){return i("footer",{key:"fd9868c22ce1e5e8926cb739735eada4d08f0931",class:J,style:{gridTemplateAreas:this.test}},i("slot",{key:"35307299f77a40d5803c0a31c9161a7e527eca16"}))}};K.style=B;const Q=":host{display:block}";const Y="iv-link-list";const Z=class{constructor(t){e(this,t)}linktype="social";showicons=false;links;layout="vertical";getSocialSource(t){try{const e=new URL(t);const i=e.hostname.replace("www.","");return i.split(".")[0]}catch{return t}}getCustomLabel(t){const[e,i]=t.split("|");return{url:e,customLabel:i}}constructLinkObject(){const t=c(this.links);const e=[];t?.forEach(((t,i)=>{let o=t;let n="";let s="";if(this.linktype==="contact"&&t.includes("|")){const e=this.getCustomLabel(t);o=e.url.trim();s=e.customLabel.trim()}if(l(t))t=`mailto:${t}`;if(d(t))t=`tel:${t}`;n=s||(this.linktype==="social"?this.getSocialSource(o):o);e.push({url:o,label:n,icon:this.linktype==="social"?`logo-${this.getSocialSource(o)}`:"call"})}));return e.length?e:null}render(){return i("ul",{key:"6c7bb09e2b74d4847ff02266caba4b8c4c217b3f",class:Y+` ${Y}--${this.layout}`},this.constructLinkObject()?.map(((t,e)=>i("li",{class:`${Y}-item`,key:e},i("a",{class:`${Y}-link`,href:t.url,target:"_blank",rel:"noopener noreferrer"},this.showicons&&i("ion-icon",{name:t.icon}),t.label)))))}};Z.style=Q;function tt(t){return sessionStorage.getItem(t)!==null}function et(t,e){sessionStorage.setItem(t,e)}function it(t,e,i){t.newsletterTimerStart=Date.now();t.newsletterTimerRemaining=e;t.newsletterTimer=setTimeout((()=>{i();et("newsletterPopupShown","true");t.newsletterTimer=null}),t.newsletterTimerRemaining)}function ot(t){if(t.newsletterTimer){clearTimeout(t.newsletterTimer);t.newsletterTimerRemaining-=Date.now()-t.newsletterTimerStart;t.newsletterTimer=null}}function nt(t,e){if(t.newsletterTimerRemaining>0){t.newsletterTimerStart=Date.now();t.newsletterTimer=setTimeout((()=>{e();et("newsletterPopupShown","true");t.newsletterTimer=null}),t.newsletterTimerRemaining)}}function st(){return tt("newsletterPopupShown")}function rt({event:t,modalState:e,contentName:i,toggleModal:o,setContentName:n,setSession:s}){if(t.clientY<=0&&!st()){if(e&&i!=="newsletter"){o();setTimeout((()=>{n("newsletter");o();s()}),300)}else{n("newsletter");o();s()}document.removeEventListener("mouseout",rt)}}function at(){return{newsletterTimer:null,newsletterTimerRemaining:0,newsletterTimerStart:0}}const ct=".iv-modal-overlay{position:fixed;top:0;left:0;width:100vw;height:100vh;background:rgba(0, 0, 0, 0.5);display:flex;align-items:center;justify-content:center;z-index:9999}.iv-modal{background:#fff;border-radius:8px;box-shadow:0 4px 24px rgba(0, 0, 0, 0.18);padding:2rem;min-width:320px;max-width:90vw;max-height:90vh;overflow-y:auto;position:relative}.iv-modal-close{position:absolute;top:1rem;right:1rem;background:none;border:none;font-size:2rem;cursor:pointer;color:#333}.iv-modal-wishlist{margin-top:1rem}.iv-modal-wishlist-item{border-bottom:1px solid #eee;padding:1rem 0;display:flex;gap:1rem;align-items:center}.iv-modal-wishlist-field{font-size:1rem;color:#222}.iv-modal-wishlist-empty{text-align:center;color:#888;padding:2rem 0}";const lt="iv-modal";const dt=class{constructor(t){e(this,t)}newsletterpopuptrigger;newsletterpopuptimedelay;newsletterpopuptitle;newsletterpopuptext;newsletterpopupimage;newsletterpopupdisclaimer;modalState=false;contentName;newsletterTimerState=at();handleOpenModal(t){ot(this.newsletterTimerState);const{content:e}=t.detail;this.contentName=e;this.toggleModal()}componentWillLoad(){const t=Number(this.newsletterpopuptimedelay)||0;if(this.newsletterpopuptrigger==="time_delay"&&t>0&&!st()){it(this.newsletterTimerState,t,(()=>{this.contentName="newsletter";this.toggleModal()}))}if(this.newsletterpopuptrigger==="exit_intent"&&!st()){document.addEventListener("mouseout",(t=>{rt({event:t,modalState:this.modalState,contentName:this.contentName,toggleModal:this.toggleModal.bind(this),setContentName:t=>this.contentName=t,setSession:()=>sessionStorage.setItem("newsletterPopupShown","true")})}))}}toggleModal(){this.modalState=!this.modalState;if(!this.modalState){ot(this.newsletterTimerState);if(this.contentName!=="newsletter"&&this.newsletterTimerState.newsletterTimerRemaining>0&&!st()){nt(this.newsletterTimerState,(()=>{this.contentName="newsletter";this.toggleModal()}))}}}render(){return i(o,{key:"ba41c95a7490fbc114e830d30048c978c4948601"},this.modalState&&i("div",{key:"71bc9573d326955e8218fe5cb771b306befdadae",class:`${lt}-overlay`,role:"dialog","aria-modal":"true","aria-labelledby":"iv-modal-title","aria-describedby":`${lt}-content`,onClick:()=>this.toggleModal()},i("div",{key:"2b483d3849d64d234a96b3269769e02fc20e0af3",class:lt,onClick:t=>t.stopPropagation()},i("iv-button",{key:"9cd3934adc78036546aa572e542df46a8f722692",class:`${lt}-close`,"aria-label":"Close modal",onClick:()=>this.toggleModal()},"×"),this.contentName==="wishlist"?i("iv-wishlist-view",null):this.contentName&&i("slot",{name:this.contentName}))))}};dt.style=ct;const ht=":host{display:block}";const bt="iv-newsletter";const ut=class{constructor(t){e(this,t);this.newsletterSuccess=s(this,"newsletterSuccess");this.newsletterFail=s(this,"newsletterFail")}formsubmitbtntext="Subscribe";formsuccessmessage;formfailuremessage;formplaceholdertext;formlabeltext;formstackbutton;formtitletag="h2";formtitletext;formdescriptiontext;includeloadingspinner;email="";formFeedback="";status="idle";newsletterSuccess;newsletterFail;getEffectiveSuccessMessage(){return this.formsuccessmessage||window.newsletterSuccessMessage}submitHandler(t){t.preventDefault();this.status="submitting";if(!l(this.email)){this.formFeedback="Please enter a valid email address.";this.status="error";this.newsletterFail.emit({reason:"invalid-email"});return}const e=this.getEffectiveSuccessMessage();const i=t.target;const o=i.querySelector('[name="contact[email]"]').value;const n=new FormData;n.append("contact[email]",o);n.append("form_type","customer");n.append("utf8","✓");fetch("/contact",{method:"POST",body:n}).then((t=>t.text())).then((t=>{if(e&&t.includes(this.formsuccessmessage)){this.status="success";this.formFeedback=e;this.newsletterSuccess.emit({email:o});i.reset()}else{throw new Error(this.formfailuremessage||"There was a problem. Please try again.")}})).catch((t=>{this.status="error";this.formFeedback=this.formfailuremessage||t.message;this.newsletterFail.emit({reason:"shopify-failure",error:this.formFeedback,email:o})}))}render(){const t=this.formtitletag;return i("div",{key:"afead480b67fc8c9bc6a4914ee7592b34b2be82d",class:`${bt} status-${this.status} ${this.includeloadingspinner&&`${bt}--with-spinner`}`},(this.formtitletext||this.formdescriptiontext)&&i("div",{key:"177af6be94a97899745de5b4a2cfc6717082214e",class:`${bt}-header`},this.formtitletext&&i(t,{key:"94fb25e4191d77db961277cb6a1f2b2c0c005558",class:`${bt}-title`},this.formtitletext),this.formdescriptiontext&&i("p",{key:"bea621b6550b21d85ace5e3199db9eeaea250de3",class:`${bt}-description`},this.formdescriptiontext)),i("form",{key:"fde75a31c2766a62cfde6d188b06fb783742551f",class:`${bt}-form`,method:"post",onSubmit:t=>this.submitHandler(t),"accept-charset":"UTF-8","aria-busy":this.status==="submitting","aria-live":"polite"},i("input",{key:"9a0c2c0deca001af3cfa65c6021e9a6743c132c3",type:"hidden",name:"form_type",value:"customer"}),i("input",{key:"b10601ba0766a987b8e92de0ec76a58c4c2b1f02",type:"hidden",name:"utf8",value:"✓"}),this.formlabeltext&&i("label",{key:"b818c7823e323c2d36157a9f1e7c6a280a34e9c3",htmlFor:"ContactForm-email",class:`${bt}-form-label`},this.formlabeltext),i("div",{key:"751577f0107696a8f1cba5ba198cc95987e9cc62",class:`${bt}-form-row${this.formstackbutton?` ${bt}-form-row--stacked`:""}`},i("input",{key:"93efc3edcf9e8f0a83407c9852a0fa1aca25e3e2",id:"ContactForm-email",class:`${bt}-form-input`,type:"email",name:"contact[email]",...this.formplaceholdertext?{placeholder:this.formplaceholdertext}:{},onInput:t=>this.email=t.target.value,value:this.email,required:true,"aria-required":"true","aria-label":this.formlabeltext||"Email",autoComplete:"email"}),i("button",{key:"9b020666431f39766e6ec5d160f28f9618c61761",class:`${bt}-form-button`,type:"submit",disabled:this.status==="submitting","aria-disabled":this.status==="submitting"},this.formsubmitbtntext))),this.includeloadingspinner&&this.status==="submitting"&&i("iv-spinner",{key:"43d79cb04b6fab3d280b13c11d102698f9ec008b",show:true}),this.formFeedback&&i("div",{key:"a71af40ada9c72da2fed3142ace6ed29a0fd6d7b",class:`${bt}-form-feedback`,"aria-live":"polite"},i("p",{key:"4add76f7f45a806949c0806f1cc09ab467d911ab",class:`${bt}-form-feedback`},this.formFeedback)))}};ut.style=ht;const vt="iv-sidebar .iv-sidebar{position:fixed;top:0;right:0;left:auto;height:100%;background-color:#fff;box-shadow:2px 0 5px rgba(0, 0, 0, 0.1);transform:translateX(100%);transition:transform 0.3s ease-in-out;z-index:1001;padding:var(--iv-sidebar-padding-top, 2rem) var(--iv-sidebar-padding-right, 2rem) var(--iv-sidebar-padding-bottom, 2rem) var(--iv-sidebar-padding-left, 2rem);overflow-y:auto;max-height:100vh;box-sizing:border-box;display:flex;flex-direction:column;width:40%}@media (max-width: 1024px){iv-sidebar .iv-sidebar{width:95%}}iv-sidebar .iv-sidebar.close{font-size:2.25rem;font-weight:400;pointer-events:none;user-select:none;line-height:1;color:inherit;display:flex;align-items:center;justify-content:center}iv-sidebar .iv-sidebar.open{transform:translateX(0)}iv-sidebar .iv-sidebar-close-button{position:absolute;top:1rem;right:1rem;background:none;border:none;color:#111;font-size:2.25rem;font-weight:400;line-height:1;cursor:pointer;padding:0;width:2.5rem;height:2.5rem;display:flex;align-items:center;justify-content:center;z-index:1002;transition:color 0.2s}iv-sidebar .iv-sidebar-close-button:hover{color:#000}iv-sidebar .iv-sidebar-close-button:focus{outline:none;color:#000}iv-sidebar .iv-sidebar-overlay{position:fixed;top:0;left:0;width:100%;height:100%;backdrop-filter:blur(8px);background-color:rgba(14, 13, 13, 0.5019607843);opacity:0;visibility:hidden;transition:opacity 0.3s ease-in-out, visibility 0.3s ease-in-out;z-index:1000}iv-sidebar .iv-sidebar-overlay.open{opacity:1;visibility:visible}";const ft="iv-sidebar";const mt=class{constructor(t){e(this,t)}newsletterpopuptrigger;newsletterpopuptimedelay;newsletterpopuptitle;newsletterpopuptext;newsletterpopupimage;newsletterpopupdisclaimer;sidebarState=false;contentName;newsletterTimerState=at();handleopenSidebar(t){ot(this.newsletterTimerState);const{content:e}=t.detail;this.contentName=e;this.toggleSidebar()}componentWillLoad(){const t=Number(this.newsletterpopuptimedelay)||0;if(this.newsletterpopuptrigger==="time_delay"&&t>0&&!st()){it(this.newsletterTimerState,t,(()=>{this.contentName="newsletter";this.toggleSidebar()}))}if(this.newsletterpopuptrigger==="exit_intent"&&!st()){document.addEventListener("mouseout",(t=>{rt({event:t,modalState:this.sidebarState,contentName:this.contentName,toggleModal:this.toggleSidebar.bind(this),setContentName:t=>this.contentName=t,setSession:()=>sessionStorage.setItem("newsletterPopupShown","true")})}))}}toggleSidebar(){this.sidebarState=!this.sidebarState;if(!this.sidebarState){ot(this.newsletterTimerState);if(this.contentName!=="newsletter"&&this.newsletterTimerState.newsletterTimerRemaining>0&&!st()){nt(this.newsletterTimerState,(()=>{this.contentName="newsletter";this.toggleSidebar()}))}}}render(){return[i("div",{key:"271c6ba4d3c8240840bd345fabe5e1cd9cc6c506",class:`${ft} ${this.sidebarState&&"open"}`,role:"complementary","aria-labelledby":"iv-sidebar-title"},i("iv-button",{key:"40eaa50a4c128ef4386c6dfa561ec87decb8f89d",class:`${ft}-close`,"aria-label":"Close modal",onClick:()=>this.toggleSidebar()},"×"),i("slot",{key:"63c9a7c90458e2714c591925eba1a3fa0f90cd8e",name:"header"}),this.contentName==="wishlist"?i("iv-wishlist-view",null):this.contentName&&i("slot",{name:this.contentName}),i("slot",{key:"2473810ba26a8ffa8986af92a393fef6524eec32",name:"footer"})),i("div",{key:"10915565e6ead3eff6f9e564b96c8a9c23c40219",class:`${ft}-overlay ${this.sidebarState&&"open"}`,onClick:()=>this.toggleSidebar()})]}};mt.style=vt;const pt=".iv-spinner{display:flex;align-items:center;justify-content:center;min-height:2.5rem}.iv-spinner-circle,.spinner{width:2rem;height:2rem;border:3px solid #e0e0e0;border-top:3px solid #0078d4;border-radius:50%;animation:iv-spinner-spin 0.8s linear infinite;display:inline-block}.iv-spinner-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}@keyframes iv-spinner-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}";const gt="iv-spinner";const wt=class{constructor(t){e(this,t)}show=false;render(){return this.show?i("div",{class:gt,role:"status","aria-live":"polite","aria-busy":"true"},i("span",{class:`${gt}-circle`,"aria-hidden":"true"}),i("span",{class:`${gt}-sr`},"Loading...")):null}};wt.style=pt;const yt=".iv-two-col-media{display:grid;grid-template-columns:1fr 1fr;gap:var(--iv-two-col-media-gap, 2rem);min-height:300px}@media (max-width: 900px){.iv-two-col-media{grid-template-columns:1fr}.iv-two-col-media.order-1{order:1}.iv-two-col-media.order-2{order:2}}@media (max-width: 600px){.iv-two-col-media.hide-for-mobile{display:none !important}}.iv-two-col-media.has-media{min-height:240px;background:#f5f5f5;position:relative;overflow:hidden}.iv-two-col-media .layout-stabilizer{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100%;width:100%;position:relative;z-index:2}.iv-two-col-media.has-media img{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;z-index:1}.iv-two-col-media.has-media .layout-stabilizer>*:not(img){position:relative;z-index:2}.iv-two-col-media.has-media img{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;z-index:1}.iv-two-col-media.has-media .media-overlay{position:relative;z-index:2;display:flex;flex-direction:column;height:100%;width:100%;justify-content:var(--iv-two-col-media-vertical, center);align-items:var(--iv-two-col-media-horizontal, center);padding:2rem}.iv-two-col-media.hide-column{display:none}";const kt="iv-two-col-media";const xt=class{constructor(t){e(this,t)}mobilebehaviour;whichcolumn;stackorder;verticalalign;horizontalalign;gap;hasMediaCol1=false;hasMediaCol2=false;leftSlotRef;rightSlotRef;get hideForMobile(){return this.mobilebehaviour==="hide_both"}componentDidLoad(){const t=this.leftSlotRef;const e=this.rightSlotRef;this.hasMediaCol1=t?.assignedElements().some((t=>t.tagName==="IMG"||t.querySelector("img")));this.hasMediaCol2=e?.assignedElements().some((t=>t.tagName==="IMG"||t.querySelector("img")))}render(){return i("section",{key:"c760219b256e631e8156672b6ddac69aec0bede9",class:h(kt,this.hideForMobile&&"hide-for-mobile"),style:{gap:this.gap}},i("div",{key:"1eadf665b2da628a6c399ac0c1d5c3ea33cee0f3",class:h(kt,this?.whichcolumn==="col-1"&&"hide-column",this.hasMediaCol1&&"has-media",this.stackorder==="col-1"?"order-1":"order-2",`vertical-align-${this.verticalalign}`,`horizontal-align-${this.horizontalalign}`)},i("div",{key:"60daa7db0684d93bd371c6f564a49b4c73f26af1",class:"layout-stabilizer"},i("slot",{key:"16dfa910139d3b0b83122d805bce6076a7b2d9af",name:"col-1",ref:t=>this.leftSlotRef=t}))),i("div",{key:"d55ad541be939f2f70902ab5d6db8c9723ee3bca",class:h(kt,this?.whichcolumn==="col-2"&&"hide-column",this.hasMediaCol2&&"has-media",this.stackorder==="col-2"?"order-1":"order-2",`vertical-align-${this.verticalalign}`,`horizontal-align-${this.horizontalalign}`)},i("div",{key:"59e7f0669fb0d982f1c287c18eca8be2e260829e",class:"layout-stabilizer"},i("slot",{key:"e8f6b349decf55eec82f227517b01406a7cf3d1b",name:"col-2",ref:t=>this.rightSlotRef=t}))))}};xt.style=yt;const $t=":host{display:block}";const zt="iv-wishlist-view";const Ct=class{constructor(t){e(this,t)}render(){return i("div",{key:"5b3d6847d5b710be643a6e96238e1d6320b0c306",class:zt},i("ul",{key:"e310393c56cc2e3aa56cdaccd74b332a30a4a0e8",class:`${zt}-list`},r.wishlist.length===0?i("li",{class:`${zt}-empty`},r.wishlistLabels.emptyMessage):r.wishlist.map(((t,e)=>i("li",{class:`${zt}-item`,key:t.id||e},i("div",{class:`${zt}-fields`},Object.entries(t).map((([t,e])=>i("div",{class:`${zt}-field ${zt}-field-${t}`},e)))),i("div",{class:`${zt}-actions`},i("iv-button",{classmodifier:`${zt}-remove`,onClick:()=>a(t.id)},i("span",{class:"inner-button",innerHTML:r.wishlistLabels.removeLabel})),i("iv-button",{classmodifier:`${zt}-add-to-cart`,onClick:()=>u({id:b(t.id)})},i("span",{class:"inner-button",innerHTML:r.wishlistLabels.addToCartLabel}))))))))}};Ct.style=$t;export{E as ion_icon,R as iv_accordion,q as iv_button,V as iv_event_button,K as iv_footer,Z as iv_link_list,dt as iv_modal,ut as iv_newsletter,mt as iv_sidebar,wt as iv_spinner,xt as iv_two_col_media,Ct as iv_wishlist_view};
|
|
2
|
-
//# sourceMappingURL=p-
|
|
1
|
+
import{g as t,r as e,h as i,H as o,c as n,d as s,a as r,e as a}from"./p-Cb3Nnjkn.js";import{r as c,i as l,a as d,c as h,g as b}from"./p-CL9gCgzW.js";import{a as u}from"./p-DujflZ2b.js";let v;const f=()=>{if(typeof window==="undefined"){return new Map}else{if(!v){const t=window;t.Ionicons=t.Ionicons||{};v=t.Ionicons.map=t.Ionicons.map||new Map}return v}};const m=t=>{let e=w(t.src);if(e){return e}e=g(t.name,t.icon,t.mode,t.ios,t.md);if(e){return p(e,t)}if(t.icon){e=w(t.icon);if(e){return e}e=w(t.icon[t.mode]);if(e){return e}}return null};const p=(e,i)=>{const o=f().get(e);if(o){return o}try{return t(`svg/${e}.svg`)}catch(t){console.log("e",t);console.warn(`[Ionicons Warning]: Could not load icon with name "${e}". Ensure that the icon is registered using addIcons or that the icon SVG data is passed directly to the icon component.`,i)}};const g=(t,e,i,o,n)=>{i=(i&&x(i))==="ios"?"ios":"md";if(o&&i==="ios"){t=x(o)}else if(n&&i==="md"){t=x(n)}else{if(!t&&e&&!y(e)){t=e}if(k(t)){t=x(t)}}if(!k(t)||t.trim()===""){return null}const s=t.replace(/[a-z]|-|\d/gi,"");if(s!==""){return null}return t};const w=t=>{if(k(t)){t=t.trim();if(y(t)){return t}}return null};const y=t=>t.length>0&&/(\/|\.)/.test(t);const k=t=>typeof t==="string";const x=t=>t.toLowerCase();const $=(t,e=[])=>{const i={};e.forEach((e=>{if(t.hasAttribute(e)){const o=t.getAttribute(e);if(o!==null){i[e]=t.getAttribute(e)}t.removeAttribute(e)}}));return i};const z=t=>{if(t){if(t.dir!==""){return t.dir.toLowerCase()==="rtl"}}return(document===null||document===void 0?void 0:document.dir.toLowerCase())==="rtl"};const C=t=>{const e=document.createElement("div");e.innerHTML=t;for(let t=e.childNodes.length-1;t>=0;t--){if(e.childNodes[t].nodeName.toLowerCase()!=="svg"){e.removeChild(e.childNodes[t])}}const i=e.firstElementChild;if(i&&i.nodeName.toLowerCase()==="svg"){const t=i.getAttribute("class")||"";i.setAttribute("class",(t+" s-ion-icon").trim());if(S(i)){return e.innerHTML}}return""};const S=t=>{if(t.nodeType===1){if(t.nodeName.toLowerCase()==="script"){return false}for(let e=0;e<t.attributes.length;e++){const i=t.attributes[e].name;if(k(i)&&i.toLowerCase().indexOf("on")===0){return false}}for(let e=0;e<t.childNodes.length;e++){if(!S(t.childNodes[e])){return false}}}return true};const _=t=>t.startsWith("data:image/svg+xml");const M=t=>t.indexOf(";utf8,")!==-1;const j=new Map;const T=new Map;let L;function P(t){const e="";j.set(t,e);return e}const N=(t,e)=>{const i=T.get(t);if(i){return i}if(typeof fetch!=="undefined"&&typeof document!=="undefined"){if(_(t)&&M(t)){return Promise.resolve(I(t))}return D(t,e)}return Promise.resolve(P(t))};function I(t){if(!L){L=new DOMParser}const e=L.parseFromString(t,"text/html");const i=e.querySelector("svg");if(i){j.set(t,i.outerHTML);return i.outerHTML}throw new Error(`Could not parse svg from ${t}`)}function D(t,e){const i=fetch(t).then((i=>i.text().then((i=>{if(i&&e!==false){i=C(i)}const o=i||"";j.set(t,o);return o})).catch((()=>P(t))))).catch((()=>P(t)));T.set(t,i);return i}const F=":host{display:inline-block;width:1em;height:1em;contain:strict;fill:currentColor;box-sizing:content-box !important}:host .ionicon{stroke:currentColor}.ionicon-fill-none{fill:none}.ionicon-stroke-width{stroke-width:var(--ionicon-stroke-width, 32px)}.icon-inner,.ionicon,svg{display:block;height:100%;width:100%}@supports (background: -webkit-named-image(i)){:host(.icon-rtl) .icon-inner{transform:scaleX(-1)}}@supports not selector(:dir(rtl)) and selector(:host-context([dir='rtl'])){:host(.icon-rtl) .icon-inner{transform:scaleX(-1)}}:host(.flip-rtl):host-context([dir='rtl']) .icon-inner{transform:scaleX(-1)}@supports selector(:dir(rtl)){:host(.flip-rtl:dir(rtl)) .icon-inner{transform:scaleX(-1)}:host(.flip-rtl:dir(ltr)) .icon-inner{transform:scaleX(1)}}:host(.icon-small){font-size:1.125rem !important}:host(.icon-large){font-size:2rem !important}:host(.ion-color){color:var(--ion-color-base) !important}:host(.ion-color-primary){--ion-color-base:var(--ion-color-primary, #3880ff)}:host(.ion-color-secondary){--ion-color-base:var(--ion-color-secondary, #0cd1e8)}:host(.ion-color-tertiary){--ion-color-base:var(--ion-color-tertiary, #f4a942)}:host(.ion-color-success){--ion-color-base:var(--ion-color-success, #10dc60)}:host(.ion-color-warning){--ion-color-base:var(--ion-color-warning, #ffce00)}:host(.ion-color-danger){--ion-color-base:var(--ion-color-danger, #f14141)}:host(.ion-color-light){--ion-color-base:var(--ion-color-light, #f4f5f8)}:host(.ion-color-medium){--ion-color-base:var(--ion-color-medium, #989aa2)}:host(.ion-color-dark){--ion-color-base:var(--ion-color-dark, #222428)}";const E=class{constructor(t){e(this,t);this.iconName=null;this.inheritedAttributes={};this.didLoadIcon=false;this.isVisible=false;this.mode=O();this.lazy=false;this.sanitize=true}componentWillLoad(){this.inheritedAttributes=$(this.el,["aria-label"])}connectedCallback(){this.waitUntilVisible(this.el,"50px",(()=>{this.isVisible=true;this.loadIcon()}))}componentDidLoad(){if(!this.didLoadIcon){this.loadIcon()}}disconnectedCallback(){if(this.io){this.io.disconnect();this.io=undefined}}waitUntilVisible(t,e,i){const o=Boolean(this.lazy&&typeof window!=="undefined"&&window.IntersectionObserver);if(!o){return i()}const n=this.io=new window.IntersectionObserver((t=>{if(t[0].isIntersecting){n.disconnect();this.io=undefined;i()}}),{rootMargin:e});n.observe(t)}loadIcon(){if(this.isVisible){const t=m(this);if(t){if(j.has(t)){this.svgContent=j.get(t)}else{N(t,this.sanitize).then((()=>this.svgContent=j.get(t)))}this.didLoadIcon=true}}this.iconName=g(this.name,this.icon,this.mode,this.ios,this.md)}render(){const{flipRtl:t,iconName:e,inheritedAttributes:n,el:s}=this;const r=this.mode||"md";const a=e?(e.includes("arrow")||e.includes("chevron"))&&t!==false:false;const c=t||a;return i(o,Object.assign({key:"0578c899781ca145dd8205acd9670af39b57cf2e",role:"img",class:Object.assign(Object.assign({[r]:true},X(this.color)),{[`icon-${this.size}`]:!!this.size,"flip-rtl":c,"icon-rtl":c&&z(s)})},n),this.svgContent?i("div",{class:"icon-inner",innerHTML:this.svgContent}):i("div",{class:"icon-inner"}))}static get assetsDirs(){return["svg"]}get el(){return n(this)}static get watchers(){return{name:["loadIcon"],src:["loadIcon"],icon:["loadIcon"],ios:["loadIcon"],md:["loadIcon"]}}};const O=()=>typeof document!=="undefined"&&document.documentElement.getAttribute("mode")||"md";const X=t=>t?{"ion-color":true,[`ion-color-${t}`]:true}:null;E.style=F;const W=":host{display:block}";const H="iv-accordion";const R=class{constructor(t){e(this,t)}labels;allowmultiple;startopen;dropdownicon;openPanels=[];componentWillLoad(){this.openPanels=this.startopen?[0]:[]}togglePanel(t){if(this.allowmultiple){this.openPanels=this.openPanels.includes(t)?this.openPanels.filter((e=>e!==t)):[...this.openPanels,t]}else{this.openPanels=this.openPanels.includes(t)?[]:[t]}}render(){return i("div",{key:"9047082c09a26440770df8f12b107495dcb193cf",class:H},c(this.labels).map(((t,e)=>i("div",{class:"accordion-panel",key:e},i("button",{class:{copy:true,"accordion-header":true,open:this.openPanels.includes(e)},onClick:()=>this.togglePanel(e),"aria-expanded":this.openPanels.includes(e),"aria-controls":`panel-content-${e}`,id:`panel-header-${e}`,type:"button"},t,this.dropdownicon&&i("ion-icon",{class:"accordion-icon",name:this.dropdownicon})),i("div",{id:`panel-content-${e}`,class:{"accordion-content":true,open:this.openPanels.includes(e)},role:"region","aria-labelledby":`panel-header-${e}`,hidden:!this.openPanels.includes(e)},i("slot",{name:`panel-${e}`}))))))}};R.style=W;const A=".iv-button{display:var(--iv-button-display, inline-flex);align-items:var(--iv-button-align, center);justify-content:var(--iv-button-justify, center);gap:var(--iv-button-gap, 0.5rem);box-sizing:border-box;padding:var(--iv-button-padding, 0.75rem 1rem);background:var(--iv-button-bg, transparent);color:var(--iv-button-color, inherit);border:var(--iv-button-border, none);border-radius:var(--iv-button-radius, 0);font:inherit;font-size:var(--iv-button-font-size, inherit);font-weight:var(--iv-button-font-weight, 500);line-height:var(--iv-button-line-height, 1.2);text-decoration:none;cursor:pointer;position:relative;min-width:var(--iv-button-min-width, unset);min-height:var(--iv-button-min-height, 2.5rem);box-shadow:var(--iv-button-shadow, none);transition:var(--iv-button-transition, background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease);-webkit-appearance:none;appearance:none}.iv-button:hover:not(.disabled):not([disabled]),.iv-button:focus-visible:not(.disabled):not([disabled]){background:var(--iv-button-hover-bg, var(--iv-button-bg, transparent));color:var(--iv-button-hover-color, var(--iv-button-color, inherit));border:var(--iv-button-hover-border, var(--iv-button-border, none));box-shadow:var(--iv-button-hover-shadow, var(--iv-button-shadow, none));outline:var(--iv-button-focus-outline, none)}.iv-button:active:not(.disabled):not([disabled]){background:var(--iv-button-active-bg, var(--iv-button-hover-bg, var(--iv-button-bg, transparent)));color:var(--iv-button-active-color, var(--iv-button-hover-color, var(--iv-button-color, inherit)));border:var(--iv-button-active-border, var(--iv-button-hover-border, var(--iv-button-border, none)));box-shadow:var(--iv-button-active-shadow, var(--iv-button-hover-shadow, var(--iv-button-shadow, none)))}.iv-button.disabled,.iv-button[disabled]{cursor:not-allowed;opacity:var(--iv-button-disabled-opacity, 0.5);background:var(--iv-button-disabled-bg, var(--iv-button-bg, transparent));color:var(--iv-button-disabled-color, var(--iv-button-color, inherit));border:var(--iv-button-disabled-border, var(--iv-button-border, none));box-shadow:var(--iv-button-disabled-shadow, none)}.iv-button.variant-card,.iv-card-add-to-cart-btn.iv-button{--iv-button-bg:var(--iv-card-button-bg, transparent);--iv-button-border:var(--iv-card-button-border, none);--iv-button-color:var(--iv-card-button-color, inherit);--iv-button-hover-bg:var(--iv-card-button-hover-bg, var(--iv-button-bg));--iv-button-hover-border:var(--iv-card-button-hover-border, var(--iv-button-border));--iv-button-hover-color:var(--iv-card-button-hover-color, var(--iv-button-color))}.iv-button:focus-visible:not(.disabled):not([disabled]){box-shadow:var(--iv-button-focus-ring, var(--iv-button-hover-shadow, var(--iv-button-shadow, none)))}.iv-button--sm{--iv-button-padding:var(--iv-button-sm-padding, 0.5rem 0.75rem);font-size:var(--iv-button-sm-font-size, 0.875rem)}.iv-button--lg{--iv-button-padding:var(--iv-button-lg-padding, 1rem 1.25rem);font-size:var(--iv-button-lg-font-size, 1.125rem)}.iv-button>svg,.iv-button .icon{width:var(--iv-button-icon-size, 1em);height:var(--iv-button-icon-size, 1em);flex:0 0 auto}@media (prefers-reduced-motion: reduce){.iv-button{transition:none}}";const G=class{constructor(t){e(this,t);this.action=s(this,"action")}type="button";classmodifier;eventname;eventdetail;buttonClick;action;get el(){return n(this)}handleClick=t=>{if(this.buttonClick)this.buttonClick(t);if(this.eventname){const t=this.eventdetail||undefined;this.el.dispatchEvent(new CustomEvent(this.eventname,{bubbles:true,detail:t,composed:true}));this.action.emit(t)}};render(){return i("button",{key:"3b8eb05a504676795eb86bec9b645866630b9023",class:`iv-button ${r.loading?"disabled":undefined} ${this.classmodifier||""}`,type:this.type,disabled:r.loading,onClick:this.handleClick},i("slot",{key:"4b7cea68ef1dfe921dc15feeb54de66f845551c7"}))}};G.style=A;const U=":host{display:block}";const q="iv-event-button";const V=class{constructor(t){e(this,t);this.action=s(this,"action")}eventname;eventdetail;buttontext="Click Me";get host(){return n(this)}action;handleClick=()=>{this.action.emit({eventname:this.eventname,eventdetail:this.eventdetail});if(this.eventname){const t=new CustomEvent(this.eventname,{bubbles:true,composed:true,detail:{content:this.eventdetail}});this.host.dispatchEvent(t)}};render(){return i("button",{key:"98d2d89f17b8f729dfed17e6d2796326bd473569",class:q,onClick:this.handleClick},i("span",{key:"1a3bce85a0a3738c99061be783aeff8f9a387c0b",class:`${q}-text`},i("slot",{key:"831422c3f7ecc8922d24affd65b1a60e2c04cea1"})))}};V.style=U;const B=".iv-footer{display:grid;gap:2rem}.iv-footer .footer-social-links{grid-area:social}.iv-footer .footer-contact-links{grid-area:contact}.iv-footer .footer-newsletter-signup{grid-area:newsletter}.iv-footer .footer-menu{grid-area:menu}.iv-footer .footer-boilerplate{grid-area:boilerplate}.iv-footer .footer-payment-icons{grid-area:payment}";const Z="iv-footer";const J=class{constructor(t){e(this,t)}gridtemplateareas;get host(){return n(this)}blockElements=[];get getAreas(){return!!this.gridtemplateareas}get test(){return this.getAreas?this.gridtemplateareas.split(",").map((t=>`"${t.trim()}"`)).join(" "):""}render(){return i("footer",{key:"fd9868c22ce1e5e8926cb739735eada4d08f0931",class:Z,style:{gridTemplateAreas:this.test}},i("slot",{key:"35307299f77a40d5803c0a31c9161a7e527eca16"}))}};J.style=B;const K=":host{display:block}";const Q="iv-link-list";const Y=class{constructor(t){e(this,t)}linktype="social";showicons=false;links;layout="vertical";getSocialSource(t){try{const e=new URL(t);const i=e.hostname.replace("www.","");return i.split(".")[0]}catch{return t}}getCustomLabel(t){const[e,i]=t.split("|");return{url:e,customLabel:i}}constructLinkObject(){const t=c(this.links);const e=[];t?.forEach(((t,i)=>{let o=t;let n="";let s="";if(this.linktype==="contact"&&t.includes("|")){const e=this.getCustomLabel(t);o=e.url.trim();s=e.customLabel.trim()}if(l(t))t=`mailto:${t}`;if(d(t))t=`tel:${t}`;n=s||(this.linktype==="social"?this.getSocialSource(o):o);e.push({url:o,label:n,icon:this.linktype==="social"?`logo-${this.getSocialSource(o)}`:"call"})}));return e.length?e:null}render(){return i("ul",{key:"6c7bb09e2b74d4847ff02266caba4b8c4c217b3f",class:Q+` ${Q}--${this.layout}`},this.constructLinkObject()?.map(((t,e)=>i("li",{class:`${Q}-item`,key:e},i("a",{class:`${Q}-link`,href:t.url,target:"_blank",rel:"noopener noreferrer"},this.showicons&&i("ion-icon",{name:t.icon}),t.label)))))}};Y.style=K;function tt(t){return sessionStorage.getItem(t)!==null}function et(t,e){sessionStorage.setItem(t,e)}function it(t,e,i){t.newsletterTimerStart=Date.now();t.newsletterTimerRemaining=e;t.newsletterTimer=setTimeout((()=>{i();et("newsletterPopupShown","true");t.newsletterTimer=null}),t.newsletterTimerRemaining)}function ot(t){if(t.newsletterTimer){clearTimeout(t.newsletterTimer);t.newsletterTimerRemaining-=Date.now()-t.newsletterTimerStart;t.newsletterTimer=null}}function nt(t,e){if(t.newsletterTimerRemaining>0){t.newsletterTimerStart=Date.now();t.newsletterTimer=setTimeout((()=>{e();et("newsletterPopupShown","true");t.newsletterTimer=null}),t.newsletterTimerRemaining)}}function st(){return tt("newsletterPopupShown")}function rt({event:t,modalState:e,contentName:i,toggleModal:o,setContentName:n,setSession:s}){if(t.clientY<=0&&!st()){if(e&&i!=="newsletter"){o();setTimeout((()=>{n("newsletter");o();s()}),300)}else{n("newsletter");o();s()}document.removeEventListener("mouseout",rt)}}function at(){return{newsletterTimer:null,newsletterTimerRemaining:0,newsletterTimerStart:0}}const ct=".iv-modal-overlay{position:fixed;top:0;left:0;width:100vw;height:100vh;background:rgba(0, 0, 0, 0.5);display:flex;align-items:center;justify-content:center;z-index:9999}.iv-modal{background:#fff;border-radius:8px;box-shadow:0 4px 24px rgba(0, 0, 0, 0.18);padding:2rem;min-width:320px;max-width:90vw;max-height:90vh;overflow-y:auto;position:relative}.iv-modal-close{position:absolute;top:1rem;right:1rem;background:none;border:none;font-size:2rem;cursor:pointer;color:#333}.iv-modal-wishlist{margin-top:1rem}.iv-modal-wishlist-item{border-bottom:1px solid #eee;padding:1rem 0;display:flex;gap:1rem;align-items:center}.iv-modal-wishlist-field{font-size:1rem;color:#222}.iv-modal-wishlist-empty{text-align:center;color:#888;padding:2rem 0}";const lt="iv-modal";const dt=class{constructor(t){e(this,t)}newsletterpopuptrigger;newsletterpopuptimedelay;newsletterpopuptitle;newsletterpopuptext;newsletterpopupimage;newsletterpopupdisclaimer;modalState=false;contentName;newsletterTimerState=at();handleOpenModal(t){ot(this.newsletterTimerState);const{content:e}=t.detail;this.contentName=e;this.toggleModal()}componentWillLoad(){const t=Number(this.newsletterpopuptimedelay)||0;if(this.newsletterpopuptrigger==="time_delay"&&t>0&&!st()){it(this.newsletterTimerState,t,(()=>{this.contentName="newsletter";this.toggleModal()}))}if(this.newsletterpopuptrigger==="exit_intent"&&!st()){document.addEventListener("mouseout",(t=>{rt({event:t,modalState:this.modalState,contentName:this.contentName,toggleModal:this.toggleModal.bind(this),setContentName:t=>this.contentName=t,setSession:()=>sessionStorage.setItem("newsletterPopupShown","true")})}))}}toggleModal(){this.modalState=!this.modalState;if(!this.modalState){ot(this.newsletterTimerState);if(this.contentName!=="newsletter"&&this.newsletterTimerState.newsletterTimerRemaining>0&&!st()){nt(this.newsletterTimerState,(()=>{this.contentName="newsletter";this.toggleModal()}))}}}render(){return i(o,{key:"ba41c95a7490fbc114e830d30048c978c4948601"},this.modalState&&i("div",{key:"71bc9573d326955e8218fe5cb771b306befdadae",class:`${lt}-overlay`,role:"dialog","aria-modal":"true","aria-labelledby":"iv-modal-title","aria-describedby":`${lt}-content`,onClick:()=>this.toggleModal()},i("div",{key:"2b483d3849d64d234a96b3269769e02fc20e0af3",class:lt,onClick:t=>t.stopPropagation()},i("iv-button",{key:"9cd3934adc78036546aa572e542df46a8f722692",class:`${lt}-close`,"aria-label":"Close modal",onClick:()=>this.toggleModal()},"×"),this.contentName==="wishlist"?i("iv-wishlist-view",null):this.contentName&&i("slot",{name:this.contentName}))))}};dt.style=ct;const ht=":host{display:block}";const bt="iv-newsletter";const ut=class{constructor(t){e(this,t);this.newsletterSuccess=s(this,"newsletterSuccess");this.newsletterFail=s(this,"newsletterFail")}formsubmitbtntext="Subscribe";formsuccessmessage;formfailuremessage;formplaceholdertext;formlabeltext;formstackbutton;formtitletag="h2";formtitletext;formdescriptiontext;includeloadingspinner;email="";formFeedback="";status="idle";newsletterSuccess;newsletterFail;getEffectiveSuccessMessage(){return this.formsuccessmessage||window.newsletterSuccessMessage}submitHandler(t){t.preventDefault();this.status="submitting";if(!l(this.email)){this.formFeedback="Please enter a valid email address.";this.status="error";this.newsletterFail.emit({reason:"invalid-email"});return}const e=this.getEffectiveSuccessMessage();const i=t.target;const o=i.querySelector('[name="contact[email]"]').value;const n=new FormData;n.append("contact[email]",o);n.append("form_type","customer");n.append("utf8","✓");fetch("/contact",{method:"POST",body:n}).then((t=>t.text())).then((t=>{if(e&&t.includes(this.formsuccessmessage)){this.status="success";this.formFeedback=e;this.newsletterSuccess.emit({email:o});i.reset()}else{throw new Error(this.formfailuremessage||"There was a problem. Please try again.")}})).catch((t=>{this.status="error";this.formFeedback=this.formfailuremessage||t.message;this.newsletterFail.emit({reason:"shopify-failure",error:this.formFeedback,email:o})}))}render(){const t=this.formtitletag;return i("div",{key:"afead480b67fc8c9bc6a4914ee7592b34b2be82d",class:`${bt} status-${this.status} ${this.includeloadingspinner&&`${bt}--with-spinner`}`},(this.formtitletext||this.formdescriptiontext)&&i("div",{key:"177af6be94a97899745de5b4a2cfc6717082214e",class:`${bt}-header`},this.formtitletext&&i(t,{key:"94fb25e4191d77db961277cb6a1f2b2c0c005558",class:`${bt}-title`},this.formtitletext),this.formdescriptiontext&&i("p",{key:"bea621b6550b21d85ace5e3199db9eeaea250de3",class:`${bt}-description`},this.formdescriptiontext)),i("form",{key:"fde75a31c2766a62cfde6d188b06fb783742551f",class:`${bt}-form`,method:"post",onSubmit:t=>this.submitHandler(t),"accept-charset":"UTF-8","aria-busy":this.status==="submitting","aria-live":"polite"},i("input",{key:"9a0c2c0deca001af3cfa65c6021e9a6743c132c3",type:"hidden",name:"form_type",value:"customer"}),i("input",{key:"b10601ba0766a987b8e92de0ec76a58c4c2b1f02",type:"hidden",name:"utf8",value:"✓"}),this.formlabeltext&&i("label",{key:"b818c7823e323c2d36157a9f1e7c6a280a34e9c3",htmlFor:"ContactForm-email",class:`${bt}-form-label`},this.formlabeltext),i("div",{key:"751577f0107696a8f1cba5ba198cc95987e9cc62",class:`${bt}-form-row${this.formstackbutton?` ${bt}-form-row--stacked`:""}`},i("input",{key:"93efc3edcf9e8f0a83407c9852a0fa1aca25e3e2",id:"ContactForm-email",class:`${bt}-form-input`,type:"email",name:"contact[email]",...this.formplaceholdertext?{placeholder:this.formplaceholdertext}:{},onInput:t=>this.email=t.target.value,value:this.email,required:true,"aria-required":"true","aria-label":this.formlabeltext||"Email",autoComplete:"email"}),i("button",{key:"9b020666431f39766e6ec5d160f28f9618c61761",class:`${bt}-form-button`,type:"submit",disabled:this.status==="submitting","aria-disabled":this.status==="submitting"},this.formsubmitbtntext))),this.includeloadingspinner&&this.status==="submitting"&&i("iv-spinner",{key:"43d79cb04b6fab3d280b13c11d102698f9ec008b",show:true}),this.formFeedback&&i("div",{key:"a71af40ada9c72da2fed3142ace6ed29a0fd6d7b",class:`${bt}-form-feedback`,"aria-live":"polite"},i("p",{key:"4add76f7f45a806949c0806f1cc09ab467d911ab",class:`${bt}-form-feedback`},this.formFeedback)))}};ut.style=ht;const vt="iv-sidebar .iv-sidebar{position:fixed;top:0;right:0;left:auto;height:100%;background-color:#fff;box-shadow:2px 0 5px rgba(0, 0, 0, 0.1);transform:translateX(100%);transition:transform 0.3s ease-in-out;z-index:1001;padding:var(--iv-sidebar-padding-top, 2rem) var(--iv-sidebar-padding-right, 2rem) var(--iv-sidebar-padding-bottom, 2rem) var(--iv-sidebar-padding-left, 2rem);overflow-y:auto;max-height:100vh;box-sizing:border-box;display:flex;flex-direction:column;width:40%}@media (max-width: 1024px){iv-sidebar .iv-sidebar{width:95%}}iv-sidebar .iv-sidebar.close{font-size:2.25rem;font-weight:400;pointer-events:none;user-select:none;line-height:1;color:inherit;display:flex;align-items:center;justify-content:center}iv-sidebar .iv-sidebar.open{transform:translateX(0)}iv-sidebar .iv-sidebar-close-button{position:absolute;top:1rem;right:1rem;background:none;border:none;color:#111;font-size:2.25rem;font-weight:400;line-height:1;cursor:pointer;padding:0;width:2.5rem;height:2.5rem;display:flex;align-items:center;justify-content:center;z-index:1002;transition:color 0.2s}iv-sidebar .iv-sidebar-close-button:hover{color:#000}iv-sidebar .iv-sidebar-close-button:focus{outline:none;color:#000}iv-sidebar .iv-sidebar-overlay{position:fixed;top:0;left:0;width:100%;height:100%;backdrop-filter:blur(8px);background-color:rgba(14, 13, 13, 0.5019607843);opacity:0;visibility:hidden;transition:opacity 0.3s ease-in-out, visibility 0.3s ease-in-out;z-index:1000}iv-sidebar .iv-sidebar-overlay.open{opacity:1;visibility:visible}";const ft="iv-sidebar";const mt=class{constructor(t){e(this,t)}newsletterpopuptrigger;newsletterpopuptimedelay;newsletterpopuptitle;newsletterpopuptext;newsletterpopupimage;newsletterpopupdisclaimer;sidebarState=false;contentName;newsletterTimerState=at();handleopenSidebar(t){ot(this.newsletterTimerState);const{content:e}=t.detail;this.contentName=e;this.toggleSidebar()}componentWillLoad(){const t=Number(this.newsletterpopuptimedelay)||0;if(this.newsletterpopuptrigger==="time_delay"&&t>0&&!st()){it(this.newsletterTimerState,t,(()=>{this.contentName="newsletter";this.toggleSidebar()}))}if(this.newsletterpopuptrigger==="exit_intent"&&!st()){document.addEventListener("mouseout",(t=>{rt({event:t,modalState:this.sidebarState,contentName:this.contentName,toggleModal:this.toggleSidebar.bind(this),setContentName:t=>this.contentName=t,setSession:()=>sessionStorage.setItem("newsletterPopupShown","true")})}))}}toggleSidebar(){this.sidebarState=!this.sidebarState;if(!this.sidebarState){ot(this.newsletterTimerState);if(this.contentName!=="newsletter"&&this.newsletterTimerState.newsletterTimerRemaining>0&&!st()){nt(this.newsletterTimerState,(()=>{this.contentName="newsletter";this.toggleSidebar()}))}}}render(){return[i("div",{key:"271c6ba4d3c8240840bd345fabe5e1cd9cc6c506",class:`${ft} ${this.sidebarState&&"open"}`,role:"complementary","aria-labelledby":"iv-sidebar-title"},i("iv-button",{key:"40eaa50a4c128ef4386c6dfa561ec87decb8f89d",class:`${ft}-close`,"aria-label":"Close modal",onClick:()=>this.toggleSidebar()},"×"),i("slot",{key:"63c9a7c90458e2714c591925eba1a3fa0f90cd8e",name:"header"}),this.contentName==="wishlist"?i("iv-wishlist-view",null):this.contentName&&i("slot",{name:this.contentName}),i("slot",{key:"2473810ba26a8ffa8986af92a393fef6524eec32",name:"footer"})),i("div",{key:"10915565e6ead3eff6f9e564b96c8a9c23c40219",class:`${ft}-overlay ${this.sidebarState&&"open"}`,onClick:()=>this.toggleSidebar()})]}};mt.style=vt;const pt=".iv-spinner{display:flex;align-items:center;justify-content:center;min-height:2.5rem}.iv-spinner-circle,.spinner{width:2rem;height:2rem;border:3px solid #e0e0e0;border-top:3px solid #0078d4;border-radius:50%;animation:iv-spinner-spin 0.8s linear infinite;display:inline-block}.iv-spinner-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}@keyframes iv-spinner-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}";const gt="iv-spinner";const wt=class{constructor(t){e(this,t)}show=false;render(){return this.show?i("div",{class:gt,role:"status","aria-live":"polite","aria-busy":"true"},i("span",{class:`${gt}-circle`,"aria-hidden":"true"}),i("span",{class:`${gt}-sr`},"Loading...")):null}};wt.style=pt;const yt=".iv-two-col-media{display:grid;grid-template-columns:1fr 1fr;gap:var(--iv-two-col-media-gap, 2rem);min-height:300px}@media (max-width: 900px){.iv-two-col-media{grid-template-columns:1fr}.iv-two-col-media.order-1{order:1}.iv-two-col-media.order-2{order:2}}@media (max-width: 600px){.iv-two-col-media.hide-for-mobile{display:none !important}}.iv-two-col-media.has-media{min-height:240px;background:#f5f5f5;position:relative;overflow:hidden}.iv-two-col-media .layout-stabilizer{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100%;width:100%;position:relative;z-index:2}.iv-two-col-media.has-media img{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;z-index:1}.iv-two-col-media.has-media .layout-stabilizer>*:not(img){position:relative;z-index:2}.iv-two-col-media.has-media img{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;z-index:1}.iv-two-col-media.has-media .media-overlay{position:relative;z-index:2;display:flex;flex-direction:column;height:100%;width:100%;justify-content:var(--iv-two-col-media-vertical, center);align-items:var(--iv-two-col-media-horizontal, center);padding:2rem}.iv-two-col-media.hide-column{display:none}";const kt="iv-two-col-media";const xt=class{constructor(t){e(this,t)}mobilebehaviour;whichcolumn;stackorder;verticalalign;horizontalalign;gap;hasMediaCol1=false;hasMediaCol2=false;leftSlotRef;rightSlotRef;get hideForMobile(){return this.mobilebehaviour==="hide_both"}componentDidLoad(){const t=this.leftSlotRef;const e=this.rightSlotRef;this.hasMediaCol1=t?.assignedElements().some((t=>t.tagName==="IMG"||t.querySelector("img")));this.hasMediaCol2=e?.assignedElements().some((t=>t.tagName==="IMG"||t.querySelector("img")))}render(){return i("section",{key:"c760219b256e631e8156672b6ddac69aec0bede9",class:h(kt,this.hideForMobile&&"hide-for-mobile"),style:{gap:this.gap}},i("div",{key:"1eadf665b2da628a6c399ac0c1d5c3ea33cee0f3",class:h(kt,this?.whichcolumn==="col-1"&&"hide-column",this.hasMediaCol1&&"has-media",this.stackorder==="col-1"?"order-1":"order-2",`vertical-align-${this.verticalalign}`,`horizontal-align-${this.horizontalalign}`)},i("div",{key:"60daa7db0684d93bd371c6f564a49b4c73f26af1",class:"layout-stabilizer"},i("slot",{key:"16dfa910139d3b0b83122d805bce6076a7b2d9af",name:"col-1",ref:t=>this.leftSlotRef=t}))),i("div",{key:"d55ad541be939f2f70902ab5d6db8c9723ee3bca",class:h(kt,this?.whichcolumn==="col-2"&&"hide-column",this.hasMediaCol2&&"has-media",this.stackorder==="col-2"?"order-1":"order-2",`vertical-align-${this.verticalalign}`,`horizontal-align-${this.horizontalalign}`)},i("div",{key:"59e7f0669fb0d982f1c287c18eca8be2e260829e",class:"layout-stabilizer"},i("slot",{key:"e8f6b349decf55eec82f227517b01406a7cf3d1b",name:"col-2",ref:t=>this.rightSlotRef=t}))))}};xt.style=yt;const $t=":host{display:block}";const zt="iv-wishlist-view";const Ct=class{constructor(t){e(this,t)}render(){return i("div",{key:"5b3d6847d5b710be643a6e96238e1d6320b0c306",class:zt},i("ul",{key:"e310393c56cc2e3aa56cdaccd74b332a30a4a0e8",class:`${zt}-list`},r.wishlist.length===0?i("li",{class:`${zt}-empty`},r.wishlistLabels.emptyMessage):r.wishlist.map(((t,e)=>i("li",{class:`${zt}-item`,key:t.id||e},i("div",{class:`${zt}-fields`},Object.entries(t).map((([t,e])=>i("div",{class:`${zt}-field ${zt}-field-${t}`},e)))),i("div",{class:`${zt}-actions`},i("iv-button",{classmodifier:`${zt}-remove`,onClick:()=>a(t.id)},i("span",{class:"inner-button",innerHTML:r.wishlistLabels.removeLabel})),i("iv-button",{classmodifier:`${zt}-add-to-cart`,onClick:()=>u({id:b(t.id)})},i("span",{class:"inner-button",innerHTML:r.wishlistLabels.addToCartLabel}))))))))}};Ct.style=$t;export{E as ion_icon,R as iv_accordion,G as iv_button,V as iv_event_button,J as iv_footer,Y as iv_link_list,dt as iv_modal,ut as iv_newsletter,mt as iv_sidebar,wt as iv_spinner,xt as iv_two_col_media,Ct as iv_wishlist_view};
|
|
2
|
+
//# sourceMappingURL=p-7e46d5b9.entry.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as t,j as i,a,h as r}from"./p-Cb3Nnjkn.js";import{f as d}from"./p-
|
|
2
|
-
//# sourceMappingURL=p-
|
|
1
|
+
import{r as t,j as i,a,h as r}from"./p-Cb3Nnjkn.js";import{f as d}from"./p-DujflZ2b.js";import{p as s}from"./p-C9YXddZh.js";const c=".iv-dynamic-products{box-sizing:border-box;width:var(--iv-dynamic-products-width, 100%);max-width:var(--iv-dynamic-products-max-width, 100%);margin:var(--iv-dynamic-products-margin, 0);padding:var(--iv-dynamic-products-padding, 0);background:var(--iv-dynamic-products-bg, transparent);border:var(--iv-dynamic-products-border, none);border-radius:var(--iv-dynamic-products-radius, 0);box-shadow:var(--iv-dynamic-products-shadow, none);color:var(--iv-dynamic-products-color, inherit);--iv-layout-gap:var(--iv-dynamic-products-gap, 1.5rem)}.iv-dynamic-products-title{margin:var(--iv-dynamic-products-title-margin, 0 0 1rem 0);font-size:var(--iv-dynamic-products-title-font-size, clamp(1.125rem, 1vw + 1rem, 1.75rem));font-weight:var(--iv-dynamic-products-title-font-weight, 600);line-height:var(--iv-dynamic-products-title-line-height, 1.2);letter-spacing:var(--iv-dynamic-products-title-letter-spacing, normal)}.iv-dynamic-products-error,.iv-dynamic-products-empty{padding:var(--iv-dynamic-products-state-padding, 1rem);border:var(--iv-dynamic-products-state-border, none);background:var(--iv-dynamic-products-state-bg, transparent);color:var(--iv-dynamic-products-state-color, inherit);font-size:var(--iv-dynamic-products-state-font-size, 0.875rem);text-align:var(--iv-dynamic-products-state-text-align, center)}.iv-dynamic-products-products{width:100%;margin:var(--iv-dynamic-products-products-margin, 0);padding:var(--iv-dynamic-products-products-padding, 0)}.iv-layout--iv-dynamic-products-layout{--iv-layout-gap:var(--iv-dynamic-products-grid-gap, var(--iv-dynamic-products-gap, 1.5rem));align-items:var(--iv-dynamic-products-grid-align, stretch);justify-content:var(--iv-dynamic-products-grid-justify, flex-start)}.iv-dynamic-products .iv-card{margin:var(--iv-dynamic-products-card-margin, 0);--iv-card-padding:var(--iv-dynamic-products-card-padding, var(--iv-card-padding, 0))}@media (min-width: 40rem){.iv-dynamic-products{--iv-dynamic-products-gap:var(--iv-dynamic-products-gap-md, var(--iv-dynamic-products-gap, 1.5rem))}}@media (min-width: 64rem){.iv-dynamic-products{--iv-dynamic-products-gap:var(--iv-dynamic-products-gap-lg, var(--iv-dynamic-products-gap, 1.5rem))}}.iv-dynamic-products--scroll-x .iv-layout--iv-dynamic-products-layout{display:flex !important;overflow-x:auto;scrollbar-width:var(--iv-dynamic-products-scrollbar-width, thin);-webkit-overflow-scrolling:touch}.iv-dynamic-products--scroll-x .iv-layout--iv-dynamic-products-layout>*{flex:0 0 var(--iv-dynamic-products-scroll-item-width, 75%)}@media (prefers-reduced-motion: reduce){.iv-dynamic-products{scroll-behavior:auto}}";const o="iv-dynamic-products";const e=class{constructor(i){t(this,i)}type="CREATED_AT";limit=8;reversed=false;componenttitle;titletag="h2";collectionhandle="all";carousel=false;requestedfields;calltoaction=false;buttontext;addtocarttext;emptystring="No products found";gridlayout;cachettl;stale=true;products=[];errorMsg;staleData=false;errors=i({component:"iv-dynamic-products"});handlePropChange(){this.loadProducts(true)}async componentWillLoad(){await this.loadProducts(false)}buildParams(){return{handle:this.collectionhandle||"all",sort:this.type,fields:this.requestedfields,limit:this.limit,currency:a.currencyCode,reversed:this.reversed}}async loadProducts(t){const i=this.buildParams();const r=this.cachettl||1e3*60*5;a.loading=!t;try{const t=await s.getOrSetData(i,(async()=>{const t=await d(this.limit,this.collectionhandle,this.type,this.requestedfields,this.reversed);return t}),{ttl:r,staleWhileRevalidate:this.stale,transform:t=>t});const a=s.getData(i);this.staleData=a.isExpired&&a.isStale;this.products=t||[]}catch(t){this.errorMsg="Failed to load products";this.errors.handle({error:t,scope:"loadProducts",userMessage:"Unable to load products right now.",devMessage:"fetchProducts failed in iv-dynamic-products",severity:"error"})}finally{a.loading=false}}render(){const t=this.titletag;return r("div",{key:"4f9c90aa043ff480a747f924651a1ebf1ebafe76",class:o,"data-stale":this.staleData?"true":"false"},this.componenttitle&&r(t,{key:"26ff36f9203d0db08cf0a865f25426aa0afed40e",class:`${o}-title`},this.componenttitle),a.loading?r("iv-spinner",null):this.errorMsg?r("div",{class:`${o}-error`},this.errorMsg):this.products.length===0?r("div",{class:`${o}-empty`},this.emptystring):r("div",{class:`${o}-products`},r("iv-layout",{classModifier:`${o}-layout`,gridTemplateAreas:this.gridlayout},this.products.map((t=>r("iv-card",{cardtype:"products",calltoaction:this.calltoaction,buttontext:this.buttontext,addtocarttext:this.addtocarttext,data:t,classmodifier:`${o}-card`})))),this.staleData&&r("div",{class:`${o}-stale-indicator`,"aria-live":"polite"},"Refreshing…")))}static get watchers(){return{type:["handlePropChange"],limit:["handlePropChange"],collectionhandle:["handlePropChange"],requestedfields:["handlePropChange"]}}};e.style=c;export{e as iv_dynamic_products};
|
|
2
|
+
//# sourceMappingURL=p-8d726fec.entry.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{k as n,a as t}from"./p-Cb3Nnjkn.js";async function o(n,o={}){try{if(!t.shopDomainApi||!t.storefrontToken)throw new Error("Missing Shopify configuration (shopDomain/storefrontToken)");const r="https://craftnberry-co-uk.myshopify.com/api/2025-07/graphql.json";console.log("[IV] Shopify Fetch to",r);const e=t.storefrontToken;console.log("[IV] Using storefront token",e);const s=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json","X-Shopify-Storefront-Access-Token":e},body:JSON.stringify({query:n,variables:o})});const c=await s.json();if(c.errors)throw new Error(c.errors.map((n=>n.message)).join(", "));return c.data}catch(n){console.error("Shopify Fetch Error:",n);throw n}}async function r(n){const t=`\n query ($handle: String!) {\n product(handle: $handle) {\n id\n }\n }`;try{const r=await o(t,{handle:n});return r?.product?.id||null}catch(n){console.error("getIdFromHandle error:",n);return null}}const e=["id","handle","title"];const s=["id","title","price { amount currencyCode }"];function c(n,t){const o=(Array.isArray(n)?n:n.split(",")).map((n=>n.trim())).filter(Boolean);const r=new Set;const e=[];for(const n of o){if(!r.has(n)){r.add(n);e.push(n)}}for(const n of t){if(!r.has(n)){r.add(n);e.push(n)}}return e}function i(n){return n.filter((n=>n!=="price")).map((n=>{if(n==="images")return"images(first: 10) { nodes { url altText } }";return n})).join("\n")}function a(n=s){return n.join("\n")}function d(n,t){const o=t||n.variants?.edges?.[0]?.node||{};let r=null;let e=null;if(n.images?.nodes&&n.images.nodes.length>0){r=n.images.nodes[0].url||null;e=n.images.nodes[0].altText||null}const{id:s,price:c}=o;return{id:n.id,...Object.fromEntries(Object.entries(n).filter((([n])=>n!=="variants"))),variantId:s,price:c?.amount||null,imageUrl:r,imageAlt:e}}function l(n,t){return`\n query ($limit: Int!, $sortKey: ProductSortKeys!, $reverse: Boolean) {\n products(first: $limit, sortKey: $sortKey, reverse: $reverse) {\n edges {\n node {\n ${n}\n variants(first: 1) { edges { node { ${t} } } }\n }\n }\n }\n }`}function u(n,t){return`\n query ($handle: String!, $limit: Int!, $sortKey: ProductCollectionSortKeys!, $reverse: Boolean) {\n collection(handle: $handle) {\n products(first: $limit, sortKey: $sortKey, reverse: $reverse) {\n edges {\n node {\n ${n}\n variants(first: 1) { edges { node { ${t} } } }\n }\n }\n }\n }\n }`}function f(n,t){return`\n query ($id: ID!) {\n product(id: $id) {\n ${n}\n variants(first: 1) { edges { node { ${t} } } }\n }\n }`}async function h(n,t,r,s,f=false){try{const h=c(s,e);const y=i(h);const p=a();const $=!t||t==="all";const w=$?l(y,p):u(y,p);const m=!!f;const g=$?{limit:n,sortKey:r,reverse:m}:{handle:t,limit:n,sortKey:r,reverse:m};const v=await o(w,g);const S=v.products?.edges||v.collection?.products?.edges||[];return S.map((n=>d(n.node)))}catch(n){console.error("Fetch Products Error:",n);throw n}}async function y(n,t,r){try{const r=c(t,e);const s=i(r);const l=a();const u=f(s,l);const h=await o(u,{id:n});const y=h?.product;if(!y)return null;return d(y)}catch(n){console.error("Fetch Product By ID Error:",n);throw n}}async function p(t){try{console.log("IV add to cart called");if(!t.id)throw new Error("No variant id provided for addToCart");const o=t.quantity||1;const r=t.properties||{};const e={items:[{id:t.id,quantity:o,properties:r}]};const s="/cart/add.js";const c=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","X-Requested-With":"XMLHttpRequest"},body:JSON.stringify(e)});if(!c.ok){const n=await c.text();throw new Error(n)}const i=await c.json();n("Added to cart!","success",3e3);return i}catch(t){n("Error adding to cart","error",5e3);throw t}}export{p as a,y as b,h as f,r as g};
|
|
2
|
+
//# sourceMappingURL=p-DujflZ2b.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p-DujflZ2b.js","sources":["src/utils/storefront_api/factory.ts"],"sourcesContent":["import { state, showToast } from \"../store/store\";\r\nasync function shopifyFetch(query: string, variables: Record<string, any> = {}): Promise<any> {\r\n try {\r\n if(!state.shopDomainApi || !state.storefrontToken) throw new Error('Missing Shopify configuration (shopDomain/storefrontToken)');\r\n // const endpoint = `https://${state.shopDomainApi}/api/2025-07/graphql.json`;\r\n const endpoint = 'https://craftnberry-co-uk.myshopify.com/api/2025-07/graphql.json';\r\n console.log('[IV] Shopify Fetch to', endpoint);\r\n const token = state.storefrontToken;\r\n console.log('[IV] Using storefront token', token);\r\n const res = await fetch(endpoint, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-Shopify-Storefront-Access-Token': token\r\n },\r\n body: JSON.stringify({ query, variables })\r\n });\r\n const json = await res.json();\r\n if(json.errors) throw new Error(json.errors.map((e: any) => e.message).join(', '));\r\n return json.data;\r\n } catch(error) {\r\n console.error('Shopify Fetch Error:', error);\r\n throw error; \r\n };\r\n};\r\n\r\nexport async function getIdFromHandle(handle: string): Promise<string | null> {\r\n const query = `\r\n query ($handle: String!) {\r\n product(handle: $handle) {\r\n id\r\n }\r\n }`;\r\n try {\r\n const data = await shopifyFetch(query, { handle });\r\n return data?.product?.id || null;\r\n } catch (error) {\r\n console.error('getIdFromHandle error:', error);\r\n return null;\r\n };\r\n};\r\n\r\n// Field + normalization helpers\r\nconst BASE_PRODUCT_FIELDS = ['id','handle','title'];\r\nconst DEFAULT_VARIANT_FIELDS = ['id','title','price { amount currencyCode }'];\r\n\r\nfunction mergeFields(requested: string[] | string, defaults: string[]): string[] {\r\n const req = (Array.isArray(requested) ? requested : requested.split(','))\r\n .map(f => f.trim())\r\n .filter(Boolean);\r\n const seen = new Set<string>();\r\n const ordered: string[] = [];\r\n for(const f of req) { \r\n if(!seen.has(f)) { \r\n seen.add(f); ordered.push(f); \r\n }; \r\n };\r\n for(const d of defaults) { \r\n if(!seen.has(d)) { \r\n seen.add(d); \r\n ordered.push(d); \r\n }; \r\n };\r\n return ordered;\r\n};\r\n\r\nfunction expandProductFields(fields: string[]): string {\r\n return fields\r\n .filter(f => f !== 'price')\r\n .map(f => {\r\n if(f === 'images') return 'images(first: 10) { nodes { url altText } }';\r\n return f;\r\n })\r\n .join('\\n');\r\n};\r\n\r\nfunction variantSelection(fields: string[] = DEFAULT_VARIANT_FIELDS): string {\r\n return fields.join('\\n');\r\n};\r\n\r\ninterface NormalizedProduct {\r\n id: string;\r\n handle?: string;\r\n title?: string;\r\n variantId?: string;\r\n price?: string | null;\r\n imageUrl?: string | null;\r\n imageAlt?: string | null;\r\n // index signature for dynamic requested fields\r\n [key: string]: any;\r\n};\r\n\r\nfunction normalizeProduct(product: any, selectedVariant?: any): NormalizedProduct {\r\n const variant = selectedVariant || product.variants?.edges?.[0]?.node || {};\r\n let imageUrl = null;\r\n let imageAlt = null;\r\n if(product.images?.nodes && product.images.nodes.length > 0) {\r\n imageUrl = product.images.nodes[0].url || null;\r\n imageAlt = product.images.nodes[0].altText || null;\r\n };\r\n const { id: variantId, price } = variant;\r\n return {\r\n id: product.id,\r\n ...Object.fromEntries(Object.entries(product).filter(([key]) => key !== 'variants')),\r\n variantId,\r\n price: price?.amount || null,\r\n imageUrl,\r\n imageAlt,\r\n };\r\n};\r\n\r\n// Query builders\r\nfunction buildProductsQuery(fieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($limit: Int!, $sortKey: ProductSortKeys!, $reverse: Boolean) {\r\n products(first: $limit, sortKey: $sortKey, reverse: $reverse) {\r\n edges {\r\n node {\r\n ${fieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }\r\n }\r\n }`;\r\n};\r\n\r\nfunction buildCollectionProductsQuery(fieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($handle: String!, $limit: Int!, $sortKey: ProductCollectionSortKeys!, $reverse: Boolean) {\r\n collection(handle: $handle) {\r\n products(first: $limit, sortKey: $sortKey, reverse: $reverse) {\r\n edges {\r\n node {\r\n ${fieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }\r\n }\r\n }\r\n }`;\r\n};\r\n\r\nfunction buildSingleProductQuery(fieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($id: ID!) {\r\n product(id: $id) {\r\n ${fieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }`;\r\n};\r\n\r\nfunction buildVariantProductQuery(productFieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($id: ID!) {\r\n productVariant(id: $id) {\r\n ${variantFieldsString}\r\n product {\r\n ${productFieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }\r\n }`;\r\n};\r\n\r\n// Public API\r\nexport async function fetchProducts(limit: number, collectionHandle: string, sortKey: string, fields: string[] | string, reversed: boolean = false) {\r\n try {\r\n const merged = mergeFields(fields, BASE_PRODUCT_FIELDS);\r\n const fieldsString = expandProductFields(merged);\r\n const variantFieldsString = variantSelection();\r\n const isAll = !collectionHandle || collectionHandle === 'all';\r\n const query = isAll ? buildProductsQuery(fieldsString, variantFieldsString) : buildCollectionProductsQuery(fieldsString, variantFieldsString);\r\n const reverse = !!reversed;\r\n const variables: Record<string, any> = isAll ? { limit, sortKey, reverse } : { handle: collectionHandle, limit, sortKey, reverse };\r\n const data = await shopifyFetch(query, variables);\r\n const productEdges = data.products?.edges || data.collection?.products?.edges || [];\r\n return productEdges.map((edge: any) => normalizeProduct(edge.node));\r\n } catch(error) { \r\n console.error('Fetch Products Error:', error); throw error;\r\n };\r\n};\r\n\r\nexport async function fetchProductByID(id: string, fields: string[] | string, options?: { variantId?: string }): Promise<NormalizedProduct | null> {\r\n try {\r\n if(options?.variantId) return await getVariantProduct(options.variantId, fields);\r\n const merged = mergeFields(fields, BASE_PRODUCT_FIELDS);\r\n const fieldsString = expandProductFields(merged);\r\n const variantFieldsString = variantSelection();\r\n const query = buildSingleProductQuery(fieldsString, variantFieldsString);\r\n const data = await shopifyFetch(query, { id });\r\n const product = data?.product;\r\n if(!product) return null;\r\n return normalizeProduct(product);\r\n } catch(error) { console.error('Fetch Product By ID Error:', error); throw error; };\r\n};\r\n\r\nexport async function getVariantProduct(variantId: string, fields: string[] | string): Promise<NormalizedProduct | null> {\r\n try {\r\n const merged = mergeFields(fields, BASE_PRODUCT_FIELDS);\r\n const productFieldsString = expandProductFields(merged);\r\n const variantFieldsString = variantSelection();\r\n const query = buildVariantProductQuery(productFieldsString, variantFieldsString);\r\n const data = await shopifyFetch(query, { id: variantId });\r\n const variantNode = data?.productVariant;\r\n if(!variantNode) return null;\r\n const product = variantNode.product;\r\n if(!product) return null;\r\n return normalizeProduct(product, variantNode); \r\n } catch(error) { console.error('Get Variant Product Error:', error); throw error; };\r\n};\r\n\r\nexport async function addToCart(options: {\r\n id: number;\r\n quantity?: number;\r\n properties?: Record<string, any>;\r\n}) {\r\n try {\r\n console.log('IV add to cart called');\r\n if(!options.id) throw new Error('No variant id provided for addToCart');\r\n const quantity = options.quantity || 1;\r\n const properties = options.properties || {};\r\n const payload = {\r\n items: [\r\n {\r\n id: options.id,\r\n quantity,\r\n properties\r\n }\r\n ]\r\n };\r\n const url = '/cart/add.js';\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json',\r\n 'X-Requested-With': 'XMLHttpRequest'\r\n },\r\n body: JSON.stringify(payload)\r\n });\r\n if(!res.ok) {\r\n const errorText = await res.text();\r\n throw new Error(errorText);\r\n };\r\n const cartItem = await res.json();\r\n showToast('Added to cart!', 'success', 3000);\r\n return cartItem;\r\n } catch (error) {\r\n showToast('Error adding to cart', 'error', 5000);\r\n throw error;\r\n };\r\n};"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as t,j as e,a as i,h as s}from"./p-Cb3Nnjkn.js";import{f as a}from"./p-
|
|
2
|
-
//# sourceMappingURL=p-
|
|
1
|
+
import{r as t,j as e,a as i,h as s}from"./p-Cb3Nnjkn.js";import{f as a}from"./p-DujflZ2b.js";import{p as r}from"./p-C9YXddZh.js";const o=":host{display:block}.iv-dynamic-products-carousel{position:relative}.iv-dynamic-products-carousel-carousel{position:relative}.iv-dynamic-products-carousel-viewport{overflow:hidden;width:100%}.iv-dynamic-products-carousel-track{display:flex;width:100%;transition:transform 0.55s cubic-bezier(0.4, 0.7, 0.2, 1);will-change:transform}.iv-dynamic-products-carousel-slide{flex:0 0 100%;box-sizing:border-box;padding:0.25rem 0.5rem;display:grid;grid-template-columns:repeat(6, minmax(0, 1fr));gap:1rem;align-items:stretch;grid-auto-rows:1fr}@media (max-width: 1200px){.iv-dynamic-products-carousel-slide{grid-template-columns:repeat(4, minmax(0, 1fr))}}@media (max-width: 900px){.iv-dynamic-products-carousel-slide{grid-template-columns:repeat(3, minmax(0, 1fr))}}@media (max-width: 640px){.iv-dynamic-products-carousel-slide{grid-template-columns:repeat(2, minmax(0, 1fr));gap:0.75rem}}.iv-dynamic-products-carousel-card{height:100%;display:flex;flex-direction:column;background:#fff;padding:0.75rem 0.75rem 0.9rem;box-shadow:0 2px 6px rgba(0, 0, 0, 0.08);transition:box-shadow 0.2s ease, transform 0.2s ease}.iv-dynamic-products-carousel-card .iv-card-title{line-height:1.2;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden;min-height:2.4em}.iv-dynamic-products-carousel-card .iv-card-controls{margin-top:auto;}.iv-dynamic-products-carousel-card:hover{box-shadow:0 4px 14px rgba(0, 0, 0, 0.15);transform:translateY(-2px)}.iv-dynamic-products-carousel-card:active{transform:translateY(0);box-shadow:0 2px 6px rgba(0, 0, 0, 0.12)}.iv-dynamic-products-carousel-card img,.iv-dynamic-products-carousel-card picture,.iv-dynamic-products-carousel-card .media{width:100%;aspect-ratio:1/1;object-fit:contain;display:flex;align-items:center;justify-content:center;margin:0 0 0.65rem}.iv-dynamic-products-carousel-nav{position:absolute;top:50%;transform:translateY(-50%);background:var(--iv-carousel-nav-bg, rgba(0, 0, 0, 0.55));color:#fff;border:none;width:2.75rem;height:2.75rem;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;backdrop-filter:blur(6px);box-shadow:0 4px 12px rgba(0, 0, 0, 0.25);transition:background 0.2s ease, transform 0.2s ease;outline:none;z-index:10}.iv-dynamic-products-carousel-nav:focus-visible{outline:2px solid #fff;outline-offset:3px}.iv-dynamic-products-carousel-nav:hover:not(:disabled){background:var(--iv-carousel-nav-bg-hover, rgba(0, 0, 0, 0.75));transform:translateY(-50%) scale(1.05);box-shadow:0 6px 18px rgba(0, 0, 0, 0.35)}.iv-dynamic-products-carousel-nav:disabled{opacity:0.4;cursor:default}.iv-dynamic-products-carousel-nav-prev{left:0.25rem}.iv-dynamic-products-carousel-nav-next{right:0.25rem}.iv-dynamic-products-carousel-status{margin-top:0.75rem;font-size:0.875rem;text-align:center;color:var(--iv-carousel-status-color, #555)}.iv-dynamic-products-carousel-viewport::-webkit-scrollbar{display:none}.iv-dynamic-products-carousel-viewport{-ms-overflow-style:none;scrollbar-width:none}";const c="iv-dynamic-products-carousel";const d=class{constructor(e){t(this,e)}type="CREATED_AT";limit=24;reversed=false;componenttitle;titletag="h2";collectionhandle="all";requestedfields;calltoaction=false;buttontext;addtocarttext;emptystring="No products found";cachettl;stale=true;excluse;products=[];errorMsg;staleData=false;page=0;itemsPerPage=6;errors=e({component:"iv-dynamic-products-carousel"});handlePropChange(){this.loadProducts(true)}async componentWillLoad(){await this.loadProducts(false)}buildParams(){return{handle:this.collectionhandle,sort:this.type,fields:this.requestedfields,limit:36,currency:i.currencyCode,reversed:this.reversed}}ensureProductTypeField(t){if(!t)return"productType";const e=t.split(",").map((t=>t.trim()));if(!e.includes("productType"))e.push("productType");return e.join(",")}filterAndSliceProducts(t){if(!this.excluse)return t.slice(0,this.limit);if(!this.requestedfields||!this.requestedfields.includes("productType")){this.requestedfields=this.ensureProductTypeField(this.requestedfields)}const e=t.filter((t=>t.productType!==this.excluse));return e.slice(0,this.limit)}async loadProducts(t){const e=this.buildParams();const s=this.cachettl||1e3*60*5;i.loading=!t;try{const t=await r.getOrSetData(e,(async()=>{const t=await a(36,this.collectionhandle,this.type,this.requestedfields,this.reversed);return t}),{ttl:s,staleWhileRevalidate:this.stale,transform:t=>t});const i=r.getData(e);this.staleData=i.isExpired&&i.isStale;this.products=Array.isArray(t)?this.filterAndSliceProducts(t):[];this.page=0}catch(t){this.errorMsg="Failed to load products";this.errors.handle({error:t,scope:"loadProducts",userMessage:"Unable to load products right now.",devMessage:"fetchProducts failed in iv-dynamic-products",severity:"error"})}finally{i.loading=false}}pagedProducts(){const t=[];for(let e=0;e<this.products.length;e+=this.itemsPerPage){t.push(this.products.slice(e,e+this.itemsPerPage))}return t}next=()=>{const t=this.pagedProducts().length;if(this.page<t-1)this.page++};prev=()=>{if(this.page>0)this.page--};render(){const t=this.titletag;return s("div",{key:"f9c5d95902865ca95a6094f0075269f2c8540698",class:c,"data-stale":this.staleData?"true":"false"},this.componenttitle&&s(t,{key:"718efc1f0e555ccbc6352dae5a78381b13b64cdf",class:`${c}-title`},this.componenttitle),i.loading?s("iv-spinner",null):this.errorMsg?s("div",{class:`${c}-error`},this.errorMsg):this.products.length===0?s("div",{class:`${c}-empty`},this.emptystring):s("div",{class:`${c}-carousel`,"aria-roledescription":"carousel"},s("button",{class:`${c}-nav ${c}-nav-prev`,onClick:this.prev,disabled:this.page===0,"aria-label":"Previous",type:"button"},"‹"),s("div",{class:`${c}-viewport`},s("div",{class:`${c}-track`,style:{transform:`translateX(-${this.page*100}%)`}},this.pagedProducts().map(((t,e)=>s("div",{class:`${c}-slide`,role:"group","aria-label":`Slide ${e+1} of ${this.pagedProducts().length}`},t.map((t=>s("iv-card",{cardtype:"products",calltoaction:this.calltoaction,buttontext:this.buttontext,addtocarttext:this.addtocarttext,data:t,classmodifier:`${c}-card`})))))))),s("button",{class:`${c}-nav ${c}-nav-next`,onClick:this.next,disabled:this.page===this.pagedProducts().length-1,"aria-label":"Next",type:"button"},"›"),s("div",{class:`${c}-status`,"aria-live":"polite"},this.pagedProducts().length>1?`Slide ${this.page+1} of ${this.pagedProducts().length}`:""),this.staleData&&s("div",{class:`${c}-stale-indicator`,"aria-live":"polite"},"Refreshing…")))}static get watchers(){return{type:["handlePropChange"],limit:["handlePropChange"],collectionhandle:["handlePropChange"],requestedfields:["handlePropChange"]}}};d.style=o;export{d as iv_dynamic_products_carousel};
|
|
2
|
+
//# sourceMappingURL=p-a28bd4eb.entry.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as i,h as r,a}from"./p-Cb3Nnjkn.js";import{r as t,g as e,f as o}from"./p-CL9gCgzW.js";import{a as n}from"./p-
|
|
2
|
-
//# sourceMappingURL=p-
|
|
1
|
+
import{r as i,h as r,a}from"./p-Cb3Nnjkn.js";import{r as t,g as e,f as o}from"./p-CL9gCgzW.js";import{a as n}from"./p-DujflZ2b.js";const d=".iv-card{display:var(--iv-card-display, block);box-sizing:border-box;padding:var(--iv-card-padding, 0);margin:var(--iv-card-margin, 0);background:var(--iv-card-bg, transparent);color:var(--iv-card-color, inherit);border:var(--iv-card-border, none);border-radius:var(--iv-card-border-radius, 0);box-shadow:var(--iv-card-shadow, none);font-size:var(--iv-card-font-size, inherit);line-height:var(--iv-card-line-height, 1.4);position:relative;text-decoration:none;transition:var(--iv-card-transition, background-color 0.2s ease, color 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease);gap:var(--iv-card-gap, 0.75rem);display:var(--iv-card-layout, flex);flex-direction:var(--iv-card-flex-direction, column)}.iv-card a,.iv-card a:visited,.iv-card a:hover,.iv-card a:focus{text-decoration:var(--iv-card-link-text-decoration, none);color:var(--iv-card-link-color, inherit)}.iv-card[href],.iv-card.is-interactive{cursor:pointer}.iv-card[href]:hover,.iv-card[href]:focus-visible,.iv-card.is-interactive:hover,.iv-card.is-interactive:focus-visible{background:var(--iv-card-hover-bg, var(--iv-card-bg, transparent));border:var(--iv-card-hover-border, var(--iv-card-border, none));box-shadow:var(--iv-card-hover-shadow, var(--iv-card-shadow, none));outline:var(--iv-card-focus-outline, none);box-shadow:var(--iv-card-focus-ring, var(--iv-card-hover-shadow, var(--iv-card-shadow, none)))}.iv-card-link-wrapper{display:var(--iv-card-link-wrapper-display, contents);text-decoration:none;color:inherit;cursor:pointer}.iv-card-field{display:block;margin:0;padding:0;font-weight:var(--iv-card-field-font-weight, inherit);color:var(--iv-card-field-color, inherit);word-break:break-word;text-decoration:none}.iv-card .iv-card-add-to-cart-btn{position:relative;z-index:2}.iv-card-link-wrapper:hover .iv-card-field,.iv-card-link-wrapper:focus-visible .iv-card-field{text-decoration:none}.iv-card-link-wrapper:hover,.iv-card-link-wrapper:focus-visible{background:var(--iv-card-link-hover-bg, var(--iv-card-hover-bg, transparent))}.iv-card-image{display:block;width:100%;height:auto;aspect-ratio:var(--iv-card-image-aspect-ratio, auto);object-fit:var(--iv-card-image-object-fit, cover);border-radius:var(--iv-card-image-border-radius, var(--iv-card-border-radius, 0));background:var(--iv-card-image-bg, transparent)}.iv-card-title{font-weight:var(--iv-card-heading-font-weight, 600);font-size:var(--iv-card-title-font-size, 1em);line-height:var(--iv-card-title-line-height, 1.2)}.iv-card-price{color:var(--iv-card-price-color, inherit);font-weight:var(--iv-card-price-weight, 500)}.iv-card-controls{display:flex;flex-wrap:wrap;gap:var(--iv-card-control-gap, 0.5rem);align-items:center;margin-top:var(--iv-card-controls-margin-top, var(--iv-card-gap, 0.75rem))}.iv-card-add-to-cart-btn{--iv-button-variant:var(--iv-card-button-variant, primary)}.iv-card-inner{width:100%;display:contents}@media (prefers-reduced-motion: reduce){.iv-card{transition:none}}";const s="iv-card";const l=new Set(["id","handle","url","productUrl","imageUrl","imageAlt","variantId","images"]);const v=class{constructor(r){i(this,r)}data;fields;cardtype;classmodifier;buttontext;calltoaction=false;addtocarttext;allowedFields=null;componentWillLoad(){if(this.fields)this.allowedFields=t(this.fields)}generateImage(i,a){return r("img",{src:i,alt:a||"Product image",class:`${s}-image`})}appendAddToCartButton(i,a){const t=e(i);return r("iv-button",{classmodifier:`${s}-add-to-cart-btn`,onClick:i=>{i.preventDefault();i.stopPropagation();n({id:t,quantity:a})}},r("span",{class:"inner-button",innerHTML:this.addtocarttext}))}buildProductHref(){const i=this.data?.handle;if(!i)return null;const r=this.cardtype||"products";return`/${r}/${i}`.replace(/\\+/g,"/")}render(){let i=this.data?Object.entries(this.data):[];if(this.allowedFields&&this.allowedFields.length>0)i=i.filter((([i])=>this.allowedFields.includes(i)));const t=this.data?.imageUrl;const e=this.data?.imageAlt;const n=!this.allowedFields||this.allowedFields.includes("imageUrl")||this.allowedFields.includes("images");const d=n&&!!t;const v=this.buildProductHref();const c=[d?this.generateImage(t,e):null,...i.map((([i,t])=>{if(l.has(i))return null;if(t===undefined||t===null||t==="")return null;return r("span",{key:i,class:`${s}-field ${s}-${i}`},i.includes("price")?o(t,a.currencyCode):t)}))];if(this.calltoaction&&v){return r("div",{class:`${s} ${this.classmodifier||""}`.trim()},r("iv-link",{classmodifier:`${s}-link-wrapper`,linktype:"wrapper",linkhref:v},c),r("div",{class:`${s}-controls`},this.buttontext&&r("iv-link",{linktype:"button",classmodifier:`${s}-cta-btn`,linkhref:v},this.buttontext),this.addtocarttext&&this.data?.variantId&&this.appendAddToCartButton(this.data.variantId,1)))}return r("div",{class:`${s} ${this.classmodifier||""}`.trim()},c,r("div",{class:`${s}-controls`},this.buttontext&&v&&r("iv-link",{linktype:"button",classmodifier:`${s}-cta-btn`,linkhref:v},this.buttontext),this.addtocarttext&&this.data?.variantId&&this.appendAddToCartButton(this.data.variantId,1)))}};v.style=d;const c=".iv-layout{box-sizing:border-box;width:var(--iv-layout-width, 100%);max-width:var(--iv-layout-max-width, 100%);margin:var(--iv-layout-margin, 0);padding:var(--iv-layout-padding, 0);gap:var(--iv-layout-gap, 1rem);align-items:var(--iv-layout-align, stretch);justify-content:var(--iv-layout-justify, flex-start);flex-wrap:var(--iv-layout-flex-wrap, wrap);grid-auto-rows:var(--iv-layout-grid-auto-rows, auto);grid-auto-columns:var(--iv-layout-grid-auto-columns, auto);grid-auto-flow:var(--iv-layout-grid-auto-flow, row);grid-template-columns:var(--iv-layout-grid-template-columns, none);grid-template-rows:var(--iv-layout-grid-template-rows, none);background:var(--iv-layout-bg, transparent);border:var(--iv-layout-border, none);border-radius:var(--iv-layout-radius, 0);box-shadow:var(--iv-layout-shadow, none)}.iv-layout>*{flex:var(--iv-layout-flex-child, 1 1 0);min-width:var(--iv-layout-child-min-width, 0);max-width:var(--iv-layout-child-max-width, 100%);box-sizing:border-box}.iv-layout--tight{--iv-layout-gap:var(--iv-layout-tight-gap, 0.5rem)}.iv-layout--relaxed{--iv-layout-gap:var(--iv-layout-relaxed-gap, 2rem)}.iv-layout--scroll-x{display:flex !important;overflow-x:auto;scrollbar-width:var(--iv-layout-scrollbar-width, thin);-webkit-overflow-scrolling:touch}.iv-layout--scroll-x>*{flex:0 0 var(--iv-layout-scroll-item-width, 80%)}.iv-layout--debug>*{outline:1px dashed var(--iv-layout-debug-color, magenta)}@media (min-width: 40rem){.iv-layout{--iv-layout-gap:var(--iv-layout-gap-md, var(--iv-layout-gap, 1rem))}}@media (min-width: 64rem){.iv-layout{--iv-layout-gap:var(--iv-layout-gap-lg, var(--iv-layout-gap, 1rem))}}@media (prefers-reduced-motion: reduce){.iv-layout{scroll-behavior:auto}}";const u=class{constructor(r){i(this,r)}sectionId;gridTemplateAreas;gap="2rem";verticalAlign="center";horizontalAlign="center";wrapperTag="div";classModifier;handleNamedSlots(){const i=[];if(this.gridTemplateAreas){const r=this.gridTemplateAreas.replace(/"/g,"").split(/\s+/).filter(Boolean);r.forEach((r=>{if(!i.includes(r))i.push(r)}))}return i}generateGridStyes(){let i={};if(this.gridTemplateAreas){i={display:"grid",gridTemplateAreas:this.gridTemplateAreas,gap:this.gap}}else{i={display:"flex",gap:this.gap,alignItems:this.verticalAlign,justifyContent:this.horizontalAlign}}return i}render(){const i=this.wrapperTag;return r(i,{key:"96af1136543f8b5680f1687f74cd37c21acef125",id:this.sectionId?this.sectionId:undefined,class:`iv-layout${this.classModifier?` iv-layout--${this.classModifier}`:""}`,style:this.generateGridStyes()},this.gridTemplateAreas?this.handleNamedSlots().map((i=>r("div",{style:{gridArea:i}},r("slot",{name:i})))):r("slot",null))}};u.style=c;const h="";const g="iv-link";const p=class{constructor(r){i(this,r)}classmodifier;linktype="inline";linkhref;linktarget="_self";linkrel="noopener noreferrer";linkariaLabel;render(){return r("a",{key:"e2d3df743af308cc928e50ba80652258ff61974d",class:`${g} ${this.classmodifier||undefined} ${this.linktype}`,href:this.linkhref,target:this.linktarget,rel:this.linkrel,"aria-label":this.linkariaLabel},r("slot",{key:"7580e2b01cfc3d86631323882bfbbce663eba912"}))}};p.style=h;export{v as iv_card,u as iv_layout,p as iv_link};
|
|
2
|
+
//# sourceMappingURL=p-ff2b5ad8.entry.js.map
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"factory-DOvX72Vv.js","sources":["src/utils/storefront_api/factory.ts"],"sourcesContent":["import { state, showToast } from \"../store/store\";\r\n\r\nasync function shopifyFetch(query: string, variables: Record<string, any> = {}): Promise<any> {\r\n try {\r\n if(!state.shopDomainApi || !state.storefrontToken) throw new Error('Missing Shopify configuration (shopDomain/storefrontToken)');\r\n const endpoint = `https://${state.shopDomainApi}/api/2025-07/graphql.json`;\r\n console.log('[IV] Shopify Fetch to', endpoint);\r\n const token = state.storefrontToken;\r\n console.log('[IV] Using storefront token', token);\r\n const res = await fetch(endpoint, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-Shopify-Storefront-Access-Token': token\r\n },\r\n body: JSON.stringify({ query, variables })\r\n });\r\n const json = await res.json();\r\n if(json.errors) throw new Error(json.errors.map((e: any) => e.message).join(', '));\r\n return json.data;\r\n } catch(error) {\r\n console.error('Shopify Fetch Error:', error);\r\n throw error; \r\n };\r\n};\r\n\r\nexport async function getIdFromHandle(handle: string): Promise<string | null> {\r\n const query = `\r\n query ($handle: String!) {\r\n product(handle: $handle) {\r\n id\r\n }\r\n }`;\r\n try {\r\n const data = await shopifyFetch(query, { handle });\r\n return data?.product?.id || null;\r\n } catch (error) {\r\n console.error('getIdFromHandle error:', error);\r\n return null;\r\n };\r\n};\r\n\r\n// Field + normalization helpers\r\nconst BASE_PRODUCT_FIELDS = ['id','handle','title'];\r\nconst DEFAULT_VARIANT_FIELDS = ['id','title','price { amount currencyCode }'];\r\n\r\nfunction mergeFields(requested: string[] | string, defaults: string[]): string[] {\r\n const req = (Array.isArray(requested) ? requested : requested.split(','))\r\n .map(f => f.trim())\r\n .filter(Boolean);\r\n const seen = new Set<string>();\r\n const ordered: string[] = [];\r\n for(const f of req) { \r\n if(!seen.has(f)) { \r\n seen.add(f); ordered.push(f); \r\n }; \r\n };\r\n for(const d of defaults) { \r\n if(!seen.has(d)) { \r\n seen.add(d); \r\n ordered.push(d); \r\n }; \r\n };\r\n return ordered;\r\n};\r\n\r\nfunction expandProductFields(fields: string[]): string {\r\n return fields\r\n .filter(f => f !== 'price')\r\n .map(f => {\r\n if(f === 'images') return 'images(first: 10) { nodes { url altText } }';\r\n return f;\r\n })\r\n .join('\\n');\r\n};\r\n\r\nfunction variantSelection(fields: string[] = DEFAULT_VARIANT_FIELDS): string {\r\n return fields.join('\\n');\r\n};\r\n\r\ninterface NormalizedProduct {\r\n id: string;\r\n handle?: string;\r\n title?: string;\r\n variantId?: string;\r\n price?: string | null;\r\n imageUrl?: string | null;\r\n imageAlt?: string | null;\r\n // index signature for dynamic requested fields\r\n [key: string]: any;\r\n};\r\n\r\nfunction normalizeProduct(product: any, selectedVariant?: any): NormalizedProduct {\r\n const variant = selectedVariant || product.variants?.edges?.[0]?.node || {};\r\n let imageUrl = null;\r\n let imageAlt = null;\r\n if(product.images?.nodes && product.images.nodes.length > 0) {\r\n imageUrl = product.images.nodes[0].url || null;\r\n imageAlt = product.images.nodes[0].altText || null;\r\n };\r\n const { id: variantId, price } = variant;\r\n return {\r\n id: product.id,\r\n ...Object.fromEntries(Object.entries(product).filter(([key]) => key !== 'variants')),\r\n variantId,\r\n price: price?.amount || null,\r\n imageUrl,\r\n imageAlt,\r\n };\r\n};\r\n\r\n// Query builders\r\nfunction buildProductsQuery(fieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($limit: Int!, $sortKey: ProductSortKeys!, $reverse: Boolean) {\r\n products(first: $limit, sortKey: $sortKey, reverse: $reverse) {\r\n edges {\r\n node {\r\n ${fieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }\r\n }\r\n }`;\r\n};\r\n\r\nfunction buildCollectionProductsQuery(fieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($handle: String!, $limit: Int!, $sortKey: ProductCollectionSortKeys!, $reverse: Boolean) {\r\n collection(handle: $handle) {\r\n products(first: $limit, sortKey: $sortKey, reverse: $reverse) {\r\n edges {\r\n node {\r\n ${fieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }\r\n }\r\n }\r\n }`;\r\n};\r\n\r\nfunction buildSingleProductQuery(fieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($id: ID!) {\r\n product(id: $id) {\r\n ${fieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }`;\r\n};\r\n\r\nfunction buildVariantProductQuery(productFieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($id: ID!) {\r\n productVariant(id: $id) {\r\n ${variantFieldsString}\r\n product {\r\n ${productFieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }\r\n }`;\r\n};\r\n\r\n// Public API\r\nexport async function fetchProducts(limit: number, collectionHandle: string, sortKey: string, fields: string[] | string, reversed: boolean = false) {\r\n try {\r\n const merged = mergeFields(fields, BASE_PRODUCT_FIELDS);\r\n const fieldsString = expandProductFields(merged);\r\n const variantFieldsString = variantSelection();\r\n const isAll = !collectionHandle || collectionHandle === 'all';\r\n const query = isAll ? buildProductsQuery(fieldsString, variantFieldsString) : buildCollectionProductsQuery(fieldsString, variantFieldsString);\r\n const reverse = !!reversed;\r\n const variables: Record<string, any> = isAll ? { limit, sortKey, reverse } : { handle: collectionHandle, limit, sortKey, reverse };\r\n const data = await shopifyFetch(query, variables);\r\n const productEdges = data.products?.edges || data.collection?.products?.edges || [];\r\n return productEdges.map((edge: any) => normalizeProduct(edge.node));\r\n } catch(error) { \r\n console.error('Fetch Products Error:', error); throw error;\r\n };\r\n};\r\n\r\nexport async function fetchProductByID(id: string, fields: string[] | string, options?: { variantId?: string }): Promise<NormalizedProduct | null> {\r\n try {\r\n if(options?.variantId) return await getVariantProduct(options.variantId, fields);\r\n const merged = mergeFields(fields, BASE_PRODUCT_FIELDS);\r\n const fieldsString = expandProductFields(merged);\r\n const variantFieldsString = variantSelection();\r\n const query = buildSingleProductQuery(fieldsString, variantFieldsString);\r\n const data = await shopifyFetch(query, { id });\r\n const product = data?.product;\r\n if(!product) return null;\r\n return normalizeProduct(product);\r\n } catch(error) { console.error('Fetch Product By ID Error:', error); throw error; };\r\n};\r\n\r\nexport async function getVariantProduct(variantId: string, fields: string[] | string): Promise<NormalizedProduct | null> {\r\n try {\r\n const merged = mergeFields(fields, BASE_PRODUCT_FIELDS);\r\n const productFieldsString = expandProductFields(merged);\r\n const variantFieldsString = variantSelection();\r\n const query = buildVariantProductQuery(productFieldsString, variantFieldsString);\r\n const data = await shopifyFetch(query, { id: variantId });\r\n const variantNode = data?.productVariant;\r\n if(!variantNode) return null;\r\n const product = variantNode.product;\r\n if(!product) return null;\r\n return normalizeProduct(product, variantNode); \r\n } catch(error) { console.error('Get Variant Product Error:', error); throw error; };\r\n};\r\n\r\nexport async function addToCart(options: {\r\n id: number;\r\n quantity?: number;\r\n properties?: Record<string, any>;\r\n}) {\r\n try {\r\n console.log('IV add to cart called');\r\n if(!options.id) throw new Error('No variant id provided for addToCart');\r\n const quantity = options.quantity || 1;\r\n const properties = options.properties || {};\r\n const payload = {\r\n items: [\r\n {\r\n id: options.id,\r\n quantity,\r\n properties\r\n }\r\n ]\r\n };\r\n const url = '/cart/add.js';\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json',\r\n 'X-Requested-With': 'XMLHttpRequest'\r\n },\r\n body: JSON.stringify(payload)\r\n });\r\n if(!res.ok) {\r\n const errorText = await res.text();\r\n throw new Error(errorText);\r\n };\r\n const cartItem = await res.json();\r\n showToast('Added to cart!', 'success', 3000);\r\n return cartItem;\r\n } catch (error) {\r\n showToast('Error adding to cart', 'error', 5000);\r\n throw error;\r\n };\r\n};"],"names":["state","showToast"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"file":"p-CTpPxZeS.js","mappings":"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","names":[],"sources":["src/utils/storefront_api/factory.ts"],"sourcesContent":["import { state, showToast } from \"../store/store\";\r\n\r\nasync function shopifyFetch(query: string, variables: Record<string, any> = {}): Promise<any> {\r\n try {\r\n if(!state.shopDomainApi || !state.storefrontToken) throw new Error('Missing Shopify configuration (shopDomain/storefrontToken)');\r\n const endpoint = `https://${state.shopDomainApi}/api/2025-07/graphql.json`;\r\n console.log('[IV] Shopify Fetch to', endpoint);\r\n const token = state.storefrontToken;\r\n console.log('[IV] Using storefront token', token);\r\n const res = await fetch(endpoint, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-Shopify-Storefront-Access-Token': token\r\n },\r\n body: JSON.stringify({ query, variables })\r\n });\r\n const json = await res.json();\r\n if(json.errors) throw new Error(json.errors.map((e: any) => e.message).join(', '));\r\n return json.data;\r\n } catch(error) {\r\n console.error('Shopify Fetch Error:', error);\r\n throw error; \r\n };\r\n};\r\n\r\nexport async function getIdFromHandle(handle: string): Promise<string | null> {\r\n const query = `\r\n query ($handle: String!) {\r\n product(handle: $handle) {\r\n id\r\n }\r\n }`;\r\n try {\r\n const data = await shopifyFetch(query, { handle });\r\n return data?.product?.id || null;\r\n } catch (error) {\r\n console.error('getIdFromHandle error:', error);\r\n return null;\r\n };\r\n};\r\n\r\n// Field + normalization helpers\r\nconst BASE_PRODUCT_FIELDS = ['id','handle','title'];\r\nconst DEFAULT_VARIANT_FIELDS = ['id','title','price { amount currencyCode }'];\r\n\r\nfunction mergeFields(requested: string[] | string, defaults: string[]): string[] {\r\n const req = (Array.isArray(requested) ? requested : requested.split(','))\r\n .map(f => f.trim())\r\n .filter(Boolean);\r\n const seen = new Set<string>();\r\n const ordered: string[] = [];\r\n for(const f of req) { \r\n if(!seen.has(f)) { \r\n seen.add(f); ordered.push(f); \r\n }; \r\n };\r\n for(const d of defaults) { \r\n if(!seen.has(d)) { \r\n seen.add(d); \r\n ordered.push(d); \r\n }; \r\n };\r\n return ordered;\r\n};\r\n\r\nfunction expandProductFields(fields: string[]): string {\r\n return fields\r\n .filter(f => f !== 'price')\r\n .map(f => {\r\n if(f === 'images') return 'images(first: 10) { nodes { url altText } }';\r\n return f;\r\n })\r\n .join('\\n');\r\n};\r\n\r\nfunction variantSelection(fields: string[] = DEFAULT_VARIANT_FIELDS): string {\r\n return fields.join('\\n');\r\n};\r\n\r\ninterface NormalizedProduct {\r\n id: string;\r\n handle?: string;\r\n title?: string;\r\n variantId?: string;\r\n price?: string | null;\r\n imageUrl?: string | null;\r\n imageAlt?: string | null;\r\n // index signature for dynamic requested fields\r\n [key: string]: any;\r\n};\r\n\r\nfunction normalizeProduct(product: any, selectedVariant?: any): NormalizedProduct {\r\n const variant = selectedVariant || product.variants?.edges?.[0]?.node || {};\r\n let imageUrl = null;\r\n let imageAlt = null;\r\n if(product.images?.nodes && product.images.nodes.length > 0) {\r\n imageUrl = product.images.nodes[0].url || null;\r\n imageAlt = product.images.nodes[0].altText || null;\r\n };\r\n const { id: variantId, price } = variant;\r\n return {\r\n id: product.id,\r\n ...Object.fromEntries(Object.entries(product).filter(([key]) => key !== 'variants')),\r\n variantId,\r\n price: price?.amount || null,\r\n imageUrl,\r\n imageAlt,\r\n };\r\n};\r\n\r\n// Query builders\r\nfunction buildProductsQuery(fieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($limit: Int!, $sortKey: ProductSortKeys!, $reverse: Boolean) {\r\n products(first: $limit, sortKey: $sortKey, reverse: $reverse) {\r\n edges {\r\n node {\r\n ${fieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }\r\n }\r\n }`;\r\n};\r\n\r\nfunction buildCollectionProductsQuery(fieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($handle: String!, $limit: Int!, $sortKey: ProductCollectionSortKeys!, $reverse: Boolean) {\r\n collection(handle: $handle) {\r\n products(first: $limit, sortKey: $sortKey, reverse: $reverse) {\r\n edges {\r\n node {\r\n ${fieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }\r\n }\r\n }\r\n }`;\r\n};\r\n\r\nfunction buildSingleProductQuery(fieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($id: ID!) {\r\n product(id: $id) {\r\n ${fieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }`;\r\n};\r\n\r\nfunction buildVariantProductQuery(productFieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($id: ID!) {\r\n productVariant(id: $id) {\r\n ${variantFieldsString}\r\n product {\r\n ${productFieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }\r\n }`;\r\n};\r\n\r\n// Public API\r\nexport async function fetchProducts(limit: number, collectionHandle: string, sortKey: string, fields: string[] | string, reversed: boolean = false) {\r\n try {\r\n const merged = mergeFields(fields, BASE_PRODUCT_FIELDS);\r\n const fieldsString = expandProductFields(merged);\r\n const variantFieldsString = variantSelection();\r\n const isAll = !collectionHandle || collectionHandle === 'all';\r\n const query = isAll ? buildProductsQuery(fieldsString, variantFieldsString) : buildCollectionProductsQuery(fieldsString, variantFieldsString);\r\n const reverse = !!reversed;\r\n const variables: Record<string, any> = isAll ? { limit, sortKey, reverse } : { handle: collectionHandle, limit, sortKey, reverse };\r\n const data = await shopifyFetch(query, variables);\r\n const productEdges = data.products?.edges || data.collection?.products?.edges || [];\r\n return productEdges.map((edge: any) => normalizeProduct(edge.node));\r\n } catch(error) { \r\n console.error('Fetch Products Error:', error); throw error;\r\n };\r\n};\r\n\r\nexport async function fetchProductByID(id: string, fields: string[] | string, options?: { variantId?: string }): Promise<NormalizedProduct | null> {\r\n try {\r\n if(options?.variantId) return await getVariantProduct(options.variantId, fields);\r\n const merged = mergeFields(fields, BASE_PRODUCT_FIELDS);\r\n const fieldsString = expandProductFields(merged);\r\n const variantFieldsString = variantSelection();\r\n const query = buildSingleProductQuery(fieldsString, variantFieldsString);\r\n const data = await shopifyFetch(query, { id });\r\n const product = data?.product;\r\n if(!product) return null;\r\n return normalizeProduct(product);\r\n } catch(error) { console.error('Fetch Product By ID Error:', error); throw error; };\r\n};\r\n\r\nexport async function getVariantProduct(variantId: string, fields: string[] | string): Promise<NormalizedProduct | null> {\r\n try {\r\n const merged = mergeFields(fields, BASE_PRODUCT_FIELDS);\r\n const productFieldsString = expandProductFields(merged);\r\n const variantFieldsString = variantSelection();\r\n const query = buildVariantProductQuery(productFieldsString, variantFieldsString);\r\n const data = await shopifyFetch(query, { id: variantId });\r\n const variantNode = data?.productVariant;\r\n if(!variantNode) return null;\r\n const product = variantNode.product;\r\n if(!product) return null;\r\n return normalizeProduct(product, variantNode); \r\n } catch(error) { console.error('Get Variant Product Error:', error); throw error; };\r\n};\r\n\r\nexport async function addToCart(options: {\r\n id: number;\r\n quantity?: number;\r\n properties?: Record<string, any>;\r\n}) {\r\n try {\r\n console.log('IV add to cart called');\r\n if(!options.id) throw new Error('No variant id provided for addToCart');\r\n const quantity = options.quantity || 1;\r\n const properties = options.properties || {};\r\n const payload = {\r\n items: [\r\n {\r\n id: options.id,\r\n quantity,\r\n properties\r\n }\r\n ]\r\n };\r\n const url = '/cart/add.js';\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json',\r\n 'X-Requested-With': 'XMLHttpRequest'\r\n },\r\n body: JSON.stringify(payload)\r\n });\r\n if(!res.ok) {\r\n const errorText = await res.text();\r\n throw new Error(errorText);\r\n };\r\n const cartItem = await res.json();\r\n showToast('Added to cart!', 'success', 3000);\r\n return cartItem;\r\n } catch (error) {\r\n showToast('Error adding to cart', 'error', 5000);\r\n throw error;\r\n };\r\n};"],"version":3}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"factory-CEG06b1_.js","sources":["src/utils/storefront_api/factory.ts"],"sourcesContent":["import { state, showToast } from \"../store/store\";\r\n\r\nasync function shopifyFetch(query: string, variables: Record<string, any> = {}): Promise<any> {\r\n try {\r\n if(!state.shopDomainApi || !state.storefrontToken) throw new Error('Missing Shopify configuration (shopDomain/storefrontToken)');\r\n const endpoint = `https://${state.shopDomainApi}/api/2025-07/graphql.json`;\r\n console.log('[IV] Shopify Fetch to', endpoint);\r\n const token = state.storefrontToken;\r\n console.log('[IV] Using storefront token', token);\r\n const res = await fetch(endpoint, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-Shopify-Storefront-Access-Token': token\r\n },\r\n body: JSON.stringify({ query, variables })\r\n });\r\n const json = await res.json();\r\n if(json.errors) throw new Error(json.errors.map((e: any) => e.message).join(', '));\r\n return json.data;\r\n } catch(error) {\r\n console.error('Shopify Fetch Error:', error);\r\n throw error; \r\n };\r\n};\r\n\r\nexport async function getIdFromHandle(handle: string): Promise<string | null> {\r\n const query = `\r\n query ($handle: String!) {\r\n product(handle: $handle) {\r\n id\r\n }\r\n }`;\r\n try {\r\n const data = await shopifyFetch(query, { handle });\r\n return data?.product?.id || null;\r\n } catch (error) {\r\n console.error('getIdFromHandle error:', error);\r\n return null;\r\n };\r\n};\r\n\r\n// Field + normalization helpers\r\nconst BASE_PRODUCT_FIELDS = ['id','handle','title'];\r\nconst DEFAULT_VARIANT_FIELDS = ['id','title','price { amount currencyCode }'];\r\n\r\nfunction mergeFields(requested: string[] | string, defaults: string[]): string[] {\r\n const req = (Array.isArray(requested) ? requested : requested.split(','))\r\n .map(f => f.trim())\r\n .filter(Boolean);\r\n const seen = new Set<string>();\r\n const ordered: string[] = [];\r\n for(const f of req) { \r\n if(!seen.has(f)) { \r\n seen.add(f); ordered.push(f); \r\n }; \r\n };\r\n for(const d of defaults) { \r\n if(!seen.has(d)) { \r\n seen.add(d); \r\n ordered.push(d); \r\n }; \r\n };\r\n return ordered;\r\n};\r\n\r\nfunction expandProductFields(fields: string[]): string {\r\n return fields\r\n .filter(f => f !== 'price')\r\n .map(f => {\r\n if(f === 'images') return 'images(first: 10) { nodes { url altText } }';\r\n return f;\r\n })\r\n .join('\\n');\r\n};\r\n\r\nfunction variantSelection(fields: string[] = DEFAULT_VARIANT_FIELDS): string {\r\n return fields.join('\\n');\r\n};\r\n\r\ninterface NormalizedProduct {\r\n id: string;\r\n handle?: string;\r\n title?: string;\r\n variantId?: string;\r\n price?: string | null;\r\n imageUrl?: string | null;\r\n imageAlt?: string | null;\r\n // index signature for dynamic requested fields\r\n [key: string]: any;\r\n};\r\n\r\nfunction normalizeProduct(product: any, selectedVariant?: any): NormalizedProduct {\r\n const variant = selectedVariant || product.variants?.edges?.[0]?.node || {};\r\n let imageUrl = null;\r\n let imageAlt = null;\r\n if(product.images?.nodes && product.images.nodes.length > 0) {\r\n imageUrl = product.images.nodes[0].url || null;\r\n imageAlt = product.images.nodes[0].altText || null;\r\n };\r\n const { id: variantId, price } = variant;\r\n return {\r\n id: product.id,\r\n ...Object.fromEntries(Object.entries(product).filter(([key]) => key !== 'variants')),\r\n variantId,\r\n price: price?.amount || null,\r\n imageUrl,\r\n imageAlt,\r\n };\r\n};\r\n\r\n// Query builders\r\nfunction buildProductsQuery(fieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($limit: Int!, $sortKey: ProductSortKeys!, $reverse: Boolean) {\r\n products(first: $limit, sortKey: $sortKey, reverse: $reverse) {\r\n edges {\r\n node {\r\n ${fieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }\r\n }\r\n }`;\r\n};\r\n\r\nfunction buildCollectionProductsQuery(fieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($handle: String!, $limit: Int!, $sortKey: ProductCollectionSortKeys!, $reverse: Boolean) {\r\n collection(handle: $handle) {\r\n products(first: $limit, sortKey: $sortKey, reverse: $reverse) {\r\n edges {\r\n node {\r\n ${fieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }\r\n }\r\n }\r\n }`;\r\n};\r\n\r\nfunction buildSingleProductQuery(fieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($id: ID!) {\r\n product(id: $id) {\r\n ${fieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }`;\r\n};\r\n\r\nfunction buildVariantProductQuery(productFieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($id: ID!) {\r\n productVariant(id: $id) {\r\n ${variantFieldsString}\r\n product {\r\n ${productFieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }\r\n }`;\r\n};\r\n\r\n// Public API\r\nexport async function fetchProducts(limit: number, collectionHandle: string, sortKey: string, fields: string[] | string, reversed: boolean = false) {\r\n try {\r\n const merged = mergeFields(fields, BASE_PRODUCT_FIELDS);\r\n const fieldsString = expandProductFields(merged);\r\n const variantFieldsString = variantSelection();\r\n const isAll = !collectionHandle || collectionHandle === 'all';\r\n const query = isAll ? buildProductsQuery(fieldsString, variantFieldsString) : buildCollectionProductsQuery(fieldsString, variantFieldsString);\r\n const reverse = !!reversed;\r\n const variables: Record<string, any> = isAll ? { limit, sortKey, reverse } : { handle: collectionHandle, limit, sortKey, reverse };\r\n const data = await shopifyFetch(query, variables);\r\n const productEdges = data.products?.edges || data.collection?.products?.edges || [];\r\n return productEdges.map((edge: any) => normalizeProduct(edge.node));\r\n } catch(error) { \r\n console.error('Fetch Products Error:', error); throw error;\r\n };\r\n};\r\n\r\nexport async function fetchProductByID(id: string, fields: string[] | string, options?: { variantId?: string }): Promise<NormalizedProduct | null> {\r\n try {\r\n if(options?.variantId) return await getVariantProduct(options.variantId, fields);\r\n const merged = mergeFields(fields, BASE_PRODUCT_FIELDS);\r\n const fieldsString = expandProductFields(merged);\r\n const variantFieldsString = variantSelection();\r\n const query = buildSingleProductQuery(fieldsString, variantFieldsString);\r\n const data = await shopifyFetch(query, { id });\r\n const product = data?.product;\r\n if(!product) return null;\r\n return normalizeProduct(product);\r\n } catch(error) { console.error('Fetch Product By ID Error:', error); throw error; };\r\n};\r\n\r\nexport async function getVariantProduct(variantId: string, fields: string[] | string): Promise<NormalizedProduct | null> {\r\n try {\r\n const merged = mergeFields(fields, BASE_PRODUCT_FIELDS);\r\n const productFieldsString = expandProductFields(merged);\r\n const variantFieldsString = variantSelection();\r\n const query = buildVariantProductQuery(productFieldsString, variantFieldsString);\r\n const data = await shopifyFetch(query, { id: variantId });\r\n const variantNode = data?.productVariant;\r\n if(!variantNode) return null;\r\n const product = variantNode.product;\r\n if(!product) return null;\r\n return normalizeProduct(product, variantNode); \r\n } catch(error) { console.error('Get Variant Product Error:', error); throw error; };\r\n};\r\n\r\nexport async function addToCart(options: {\r\n id: number;\r\n quantity?: number;\r\n properties?: Record<string, any>;\r\n}) {\r\n try {\r\n console.log('IV add to cart called');\r\n if(!options.id) throw new Error('No variant id provided for addToCart');\r\n const quantity = options.quantity || 1;\r\n const properties = options.properties || {};\r\n const payload = {\r\n items: [\r\n {\r\n id: options.id,\r\n quantity,\r\n properties\r\n }\r\n ]\r\n };\r\n const url = '/cart/add.js';\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json',\r\n 'X-Requested-With': 'XMLHttpRequest'\r\n },\r\n body: JSON.stringify(payload)\r\n });\r\n if(!res.ok) {\r\n const errorText = await res.text();\r\n throw new Error(errorText);\r\n };\r\n const cartItem = await res.json();\r\n showToast('Added to cart!', 'success', 3000);\r\n return cartItem;\r\n } catch (error) {\r\n showToast('Error adding to cart', 'error', 5000);\r\n throw error;\r\n };\r\n};"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{k as n,a as t}from"./p-Cb3Nnjkn.js";async function o(n,o={}){try{if(!t.shopDomainApi||!t.storefrontToken)throw new Error("Missing Shopify configuration (shopDomain/storefrontToken)");const r=`https://${t.shopDomainApi}/api/2025-07/graphql.json`;console.log("[IV] Shopify Fetch to",r);const e=t.storefrontToken;console.log("[IV] Using storefront token",e);const s=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json","X-Shopify-Storefront-Access-Token":e},body:JSON.stringify({query:n,variables:o})});const c=await s.json();if(c.errors)throw new Error(c.errors.map((n=>n.message)).join(", "));return c.data}catch(n){console.error("Shopify Fetch Error:",n);throw n}}async function r(n){const t=`\n query ($handle: String!) {\n product(handle: $handle) {\n id\n }\n }`;try{const r=await o(t,{handle:n});return r?.product?.id||null}catch(n){console.error("getIdFromHandle error:",n);return null}}const e=["id","handle","title"];const s=["id","title","price { amount currencyCode }"];function c(n,t){const o=(Array.isArray(n)?n:n.split(",")).map((n=>n.trim())).filter(Boolean);const r=new Set;const e=[];for(const n of o){if(!r.has(n)){r.add(n);e.push(n)}}for(const n of t){if(!r.has(n)){r.add(n);e.push(n)}}return e}function i(n){return n.filter((n=>n!=="price")).map((n=>{if(n==="images")return"images(first: 10) { nodes { url altText } }";return n})).join("\n")}function a(n=s){return n.join("\n")}function d(n,t){const o=t||n.variants?.edges?.[0]?.node||{};let r=null;let e=null;if(n.images?.nodes&&n.images.nodes.length>0){r=n.images.nodes[0].url||null;e=n.images.nodes[0].altText||null}const{id:s,price:c}=o;return{id:n.id,...Object.fromEntries(Object.entries(n).filter((([n])=>n!=="variants"))),variantId:s,price:c?.amount||null,imageUrl:r,imageAlt:e}}function l(n,t){return`\n query ($limit: Int!, $sortKey: ProductSortKeys!, $reverse: Boolean) {\n products(first: $limit, sortKey: $sortKey, reverse: $reverse) {\n edges {\n node {\n ${n}\n variants(first: 1) { edges { node { ${t} } } }\n }\n }\n }\n }`}function u(n,t){return`\n query ($handle: String!, $limit: Int!, $sortKey: ProductCollectionSortKeys!, $reverse: Boolean) {\n collection(handle: $handle) {\n products(first: $limit, sortKey: $sortKey, reverse: $reverse) {\n edges {\n node {\n ${n}\n variants(first: 1) { edges { node { ${t} } } }\n }\n }\n }\n }\n }`}function f(n,t){return`\n query ($id: ID!) {\n product(id: $id) {\n ${n}\n variants(first: 1) { edges { node { ${t} } } }\n }\n }`}async function h(n,t,r,s,f=false){try{const h=c(s,e);const y=i(h);const p=a();const $=!t||t==="all";const w=$?l(y,p):u(y,p);const g=!!f;const m=$?{limit:n,sortKey:r,reverse:g}:{handle:t,limit:n,sortKey:r,reverse:g};const v=await o(w,m);const S=v.products?.edges||v.collection?.products?.edges||[];return S.map((n=>d(n.node)))}catch(n){console.error("Fetch Products Error:",n);throw n}}async function y(n,t,r){try{const r=c(t,e);const s=i(r);const l=a();const u=f(s,l);const h=await o(u,{id:n});const y=h?.product;if(!y)return null;return d(y)}catch(n){console.error("Fetch Product By ID Error:",n);throw n}}async function p(t){try{console.log("IV add to cart called");if(!t.id)throw new Error("No variant id provided for addToCart");const o=t.quantity||1;const r=t.properties||{};const e={items:[{id:t.id,quantity:o,properties:r}]};const s="/cart/add.js";const c=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","X-Requested-With":"XMLHttpRequest"},body:JSON.stringify(e)});if(!c.ok){const n=await c.text();throw new Error(n)}const i=await c.json();n("Added to cart!","success",3e3);return i}catch(t){n("Error adding to cart","error",5e3);throw t}}export{p as a,y as b,h as f,r as g};
|
|
2
|
-
//# sourceMappingURL=p-DiJKGz2q.js.map
|