the-foxy-library 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/cjs/app-globals-DMja435B.js.map +1 -1
  2. package/dist/cjs/intravenous.cjs.js +1 -1
  3. package/dist/cjs/iv-dynamic-products-carousel.cjs.entry.js +3 -3
  4. package/dist/cjs/iv-dynamic-products-carousel.entry.cjs.js.map +1 -1
  5. package/dist/cjs/iv-pill.cjs.entry.js +5 -4
  6. package/dist/cjs/iv-pill.entry.cjs.js.map +1 -1
  7. package/dist/cjs/loader.cjs.js +1 -1
  8. package/dist/collection/components/iv-dynamic-products-carousel/iv-dynamic-products-carousel.js +5 -5
  9. package/dist/collection/components/iv-dynamic-products-carousel/iv-dynamic-products-carousel.js.map +1 -1
  10. package/dist/collection/components/iv-newsletter/iv-newsletter.js +2 -2
  11. package/dist/collection/components/iv-pill/iv-pill.css +2 -0
  12. package/dist/collection/components/iv-pill/iv-pill.js +4 -3
  13. package/dist/collection/components/iv-pill/iv-pill.js.map +1 -1
  14. package/dist/components/index.js.map +1 -1
  15. package/dist/components/iv-dynamic-products-carousel.js +4 -4
  16. package/dist/components/iv-dynamic-products-carousel.js.map +1 -1
  17. package/dist/components/iv-pill.js +5 -4
  18. package/dist/components/iv-pill.js.map +1 -1
  19. package/dist/esm/app-globals-vUQfdhxo.js.map +1 -1
  20. package/dist/esm/intravenous.js +1 -1
  21. package/dist/esm/iv-dynamic-products-carousel.entry.js +3 -3
  22. package/dist/esm/iv-dynamic-products-carousel.entry.js.map +1 -1
  23. package/dist/esm/iv-pill.entry.js +5 -4
  24. package/dist/esm/iv-pill.entry.js.map +1 -1
  25. package/dist/esm/loader.js +1 -1
  26. package/dist/intravenous/intravenous.esm.js +1 -1
  27. package/dist/intravenous/iv-dynamic-products-carousel.entry.esm.js.map +1 -1
  28. package/dist/intravenous/iv-pill.entry.esm.js.map +1 -1
  29. package/dist/intravenous/p-003e4edf.entry.js +2 -0
  30. package/dist/intravenous/{p-33ad5791.entry.js.map → p-003e4edf.entry.js.map} +1 -1
  31. package/dist/intravenous/p-DFXVdw7Z.js.map +1 -1
  32. package/dist/intravenous/{p-a5620fb5.entry.js → p-f13e0eaa.entry.js} +2 -2
  33. package/dist/intravenous/{p-a5620fb5.entry.js.map → p-f13e0eaa.entry.js.map} +1 -1
  34. package/dist/types/components/iv-dynamic-products-carousel/iv-dynamic-products-carousel.d.ts +1 -1
  35. package/dist/types/components.d.ts +2 -2
  36. package/package.json +1 -1
  37. package/dist/intravenous/p-33ad5791.entry.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"app-globals-DMja435B.js","sources":["@stencil/core/internal/app-globals"],"sourcesContent":["import appGlobalScript from 'C:/Users/bbuxt/OneDrive/Documents/Development/Freelance/Component Library/The-Foxy-Library/src/global/app.ts';\nexport const globalScripts = appGlobalScript;\nexport const globalStyles = \"\";\n"],"names":["appGlobalScript"],"mappings":";;;;AACY,MAAC,aAAa,GAAGA;;;;"}
1
+ {"version":3,"file":"app-globals-DMja435B.js","sources":["@stencil/core/internal/app-globals"],"sourcesContent":["import appGlobalScript from 'C:/Users/bbuxt/OneDrive/Documents/Development/Freelance/The-Foxy-Library/src/global/app.ts';\nexport const globalScripts = appGlobalScript;\nexport const globalStyles = \"\";\n"],"names":["appGlobalScript"],"mappings":";;;;AACY,MAAC,aAAa,GAAGA;;;;"}
@@ -19,7 +19,7 @@ var patchBrowser = () => {
19
19
 
20
20
  patchBrowser().then(async (options) => {
21
21
  await appGlobals.globalScripts();
22
- return index.bootstrapLazy([["iv-dynamic-products.cjs",[[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"]}]]],["iv-suggest.cjs",[[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]}]]],["iv-dynamic-products-carousel.cjs",[[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"]}]]],["iv-predictive-search.cjs",[[256,"iv-predictive-search",{"searchlabel":[1],"labelposition":[1],"action":[1],"placeholder":[1],"minchars":[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]}]]],["iv-recently-viewed.cjs",[[256,"iv-recently-viewed",{"componenttitle":[1],"titletag":[1],"numbertoshow":[2],"noviewhistory":[1],"requestedfields":[1],"items":[32]}]]],["iv-link-list.cjs",[[256,"iv-link-list",{"linktype":[1],"showicons":[4],"links":[1],"layout":[1]}]]],["iv-shop-the-look.cjs",[[260,"iv-shop-the-look",{"behaviour":[1],"coordinates":[1],"producthandles":[1]}]]],["iv-toast-container.cjs",[[256,"iv-toast-container",{"_bump":[32]}]]],["iv-wishlist.cjs",[[256,"iv-wishlist",{"buttonaddvalue":[1],"buttonremovevalue":[1],"wishlistempty":[1],"buttonaddtocartvalue":[1],"viewwishlistvalue":[1],"productdata":[1],"usefields":[1],"previewtype":[1]}]]],["iv-carousel.cjs",[[260,"iv-carousel",{"navarrows":[4],"navdots":[4],"showslidecount":[4],"autoplay":[4],"autoplayspeed":[2],"valign":[1],"halign":[1],"hasoverlay":[4],"currentIndex":[32],"items":[32]}]]],["iv-compare-product.cjs",[[256,"iv-compare-product"]]],["iv-filters.cjs",[[256,"iv-filters"]]],["iv-footer.cjs",[[260,"iv-footer",{"gridtemplateareas":[1],"footerbackground":[1],"blockElements":[32]}]]],["iv-pill.cjs",[[256,"iv-pill",{"label":[1],"content":[1],"bordered":[4],"internalspacing":[1],"externalspacing":[1],"roundedcorners":[1]}]]],["iv-product-upsell.cjs",[[257,"iv-product-upsell"]]],["iv-two-col-media.cjs",[[260,"iv-two-col-media",{"mobilebehaviour":[1],"whichcolumn":[1],"stackorder":[1],"verticalalign":[1],"horizontalalign":[1],"gap":[1],"hasMediaCol1":[32],"hasMediaCol2":[32]}]]],["sw-in-grid-content.cjs",[[260,"sw-in-grid-content"]]],["sw-size-guide.cjs",[[260,"sw-size-guide",{"sizeUnits":[32]}]]],["iv-banner.cjs",[[260,"iv-banner",{"classmodifier":[1],"bannerurl":[1],"bannerbuttontext":[1],"bannertype":[1]}]]],["iv-product-pin.cjs",[[256,"iv-product-pin",{"pinProduct":[1,"pin-product"],"pinKey":[2,"pin-key"],"pinCords":[16],"pinBehaviour":[1,"pin-behaviour"]}]]],["iv-tabs.cjs",[[260,"iv-tabs",{"labels":[16],"classModifier":[1,"class-modifier"],"tabLayout":[1,"tab-layout"],"activeTab":[32]}]]],["iv-toast.cjs",[[256,"iv-toast",{"message":[1],"toastId":[2,"toast-id"],"duration":[2],"type":[1]}]]],["ion-icon_9.cjs",[[257,"iv-modal",{"newsletterpopuptrigger":[1],"newsletterpopuptimedelay":[2],"modalState":[32],"contentName":[32]},[[4,"openModal","handleOpenModal"]]],[260,"iv-sidebar",{"newsletterpopuptrigger":[1],"newsletterpopuptimedelay":[2],"sidebarState":[32],"contentName":[32]},[[4,"openSidebar","handleopenSidebar"]]],[260,"iv-accordion",{"labels":[1],"allowmultiple":[4],"startopen":[4],"acordionlayout":[1],"contentplacement":[1],"dropdownicon":[1],"openPanels":[32]}],[256,"iv-newsletter",{"formimageurl":[1],"formimageposition":[1],"formimageheight":[1],"formsubmitbtntext":[1],"formsuccessmessage":[1],"formfailuremessage":[1],"formplaceholdertext":[1],"formlabeltext":[1],"formstackbutton":[4],"formtitletag":[1],"formtitletext":[1],"formdescriptiontext":[1],"includeloadingspinner":[4],"newsletterpopupdisclaimer":[1],"classmodifier":[1],"email":[32],"formFeedback":[32],"status":[32]}],[260,"iv-event-button",{"eventname":[1],"eventdetail":[8],"buttontext":[1]}],[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]}]]],["iv-card_3.cjs",[[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"]}]]]], options);
22
+ return index.bootstrapLazy([["iv-dynamic-products.cjs",[[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"]}]]],["iv-suggest.cjs",[[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]}]]],["iv-dynamic-products-carousel.cjs",[[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],"exclude":[1],"products":[32],"errorMsg":[32],"staleData":[32],"page":[32]},null,{"type":["handlePropChange"],"limit":["handlePropChange"],"collectionhandle":["handlePropChange"],"requestedfields":["handlePropChange"]}]]],["iv-predictive-search.cjs",[[256,"iv-predictive-search",{"searchlabel":[1],"labelposition":[1],"action":[1],"placeholder":[1],"minchars":[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]}]]],["iv-recently-viewed.cjs",[[256,"iv-recently-viewed",{"componenttitle":[1],"titletag":[1],"numbertoshow":[2],"noviewhistory":[1],"requestedfields":[1],"items":[32]}]]],["iv-link-list.cjs",[[256,"iv-link-list",{"linktype":[1],"showicons":[4],"links":[1],"layout":[1]}]]],["iv-shop-the-look.cjs",[[260,"iv-shop-the-look",{"behaviour":[1],"coordinates":[1],"producthandles":[1]}]]],["iv-toast-container.cjs",[[256,"iv-toast-container",{"_bump":[32]}]]],["iv-wishlist.cjs",[[256,"iv-wishlist",{"buttonaddvalue":[1],"buttonremovevalue":[1],"wishlistempty":[1],"buttonaddtocartvalue":[1],"viewwishlistvalue":[1],"productdata":[1],"usefields":[1],"previewtype":[1]}]]],["iv-carousel.cjs",[[260,"iv-carousel",{"navarrows":[4],"navdots":[4],"showslidecount":[4],"autoplay":[4],"autoplayspeed":[2],"valign":[1],"halign":[1],"hasoverlay":[4],"currentIndex":[32],"items":[32]}]]],["iv-compare-product.cjs",[[256,"iv-compare-product"]]],["iv-filters.cjs",[[256,"iv-filters"]]],["iv-footer.cjs",[[260,"iv-footer",{"gridtemplateareas":[1],"footerbackground":[1],"blockElements":[32]}]]],["iv-pill.cjs",[[256,"iv-pill",{"label":[1],"content":[1],"bordered":[4],"internalspacing":[1],"externalspacing":[1],"roundedcorners":[1]}]]],["iv-product-upsell.cjs",[[257,"iv-product-upsell"]]],["iv-two-col-media.cjs",[[260,"iv-two-col-media",{"mobilebehaviour":[1],"whichcolumn":[1],"stackorder":[1],"verticalalign":[1],"horizontalalign":[1],"gap":[1],"hasMediaCol1":[32],"hasMediaCol2":[32]}]]],["sw-in-grid-content.cjs",[[260,"sw-in-grid-content"]]],["sw-size-guide.cjs",[[260,"sw-size-guide",{"sizeUnits":[32]}]]],["iv-banner.cjs",[[260,"iv-banner",{"classmodifier":[1],"bannerurl":[1],"bannerbuttontext":[1],"bannertype":[1]}]]],["iv-product-pin.cjs",[[256,"iv-product-pin",{"pinProduct":[1,"pin-product"],"pinKey":[2,"pin-key"],"pinCords":[16],"pinBehaviour":[1,"pin-behaviour"]}]]],["iv-tabs.cjs",[[260,"iv-tabs",{"labels":[16],"classModifier":[1,"class-modifier"],"tabLayout":[1,"tab-layout"],"activeTab":[32]}]]],["iv-toast.cjs",[[256,"iv-toast",{"message":[1],"toastId":[2,"toast-id"],"duration":[2],"type":[1]}]]],["ion-icon_9.cjs",[[257,"iv-modal",{"newsletterpopuptrigger":[1],"newsletterpopuptimedelay":[2],"modalState":[32],"contentName":[32]},[[4,"openModal","handleOpenModal"]]],[260,"iv-sidebar",{"newsletterpopuptrigger":[1],"newsletterpopuptimedelay":[2],"sidebarState":[32],"contentName":[32]},[[4,"openSidebar","handleopenSidebar"]]],[260,"iv-accordion",{"labels":[1],"allowmultiple":[4],"startopen":[4],"acordionlayout":[1],"contentplacement":[1],"dropdownicon":[1],"openPanels":[32]}],[256,"iv-newsletter",{"formimageurl":[1],"formimageposition":[1],"formimageheight":[1],"formsubmitbtntext":[1],"formsuccessmessage":[1],"formfailuremessage":[1],"formplaceholdertext":[1],"formlabeltext":[1],"formstackbutton":[4],"formtitletag":[1],"formtitletext":[1],"formdescriptiontext":[1],"includeloadingspinner":[4],"newsletterpopupdisclaimer":[1],"classmodifier":[1],"email":[32],"formFeedback":[32],"status":[32]}],[260,"iv-event-button",{"eventname":[1],"eventdetail":[8],"buttontext":[1]}],[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]}]]],["iv-card_3.cjs",[[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"]}]]]], options);
23
23
  });
24
24
 
25
25
  exports.setNonce = index.setNonce;
@@ -159,7 +159,7 @@ const IvDynamicProductsCarousel = class {
159
159
  emptystring = 'No products found';
160
160
  cachettl;
161
161
  stale = true;
162
- excluse;
162
+ exclude;
163
163
  products = [];
164
164
  errorMsg;
165
165
  staleData = false;
@@ -192,12 +192,12 @@ const IvDynamicProductsCarousel = class {
192
192
  }
193
193
  ;
194
194
  filterAndSliceProducts(data) {
195
- if (!this.excluse)
195
+ if (!this.exclude)
196
196
  return data.slice(0, this.limit);
197
197
  if (!this.requestedfields || !this.requestedfields.includes('productType')) {
198
198
  this.requestedfields = this.ensureProductTypeField(this.requestedfields);
199
199
  }
200
- const filtered = data.filter(p => p.productType !== this.excluse);
200
+ const filtered = data.filter(p => p.productType !== this.exclude);
201
201
  return filtered.slice(0, this.limit);
202
202
  }
203
203
  ;
@@ -1 +1 @@
1
- {"version":3,"file":"iv-dynamic-products-carousel.entry.cjs.js","sources":["src/utils/storefront_api/queries.ts","src/utils/storefront_api/normalize.ts","src/utils/storefront_api/methods.ts","src/components/iv-dynamic-products-carousel/iv-dynamic-products-carousel.scss?tag=iv-dynamic-products-carousel","src/components/iv-dynamic-products-carousel/iv-dynamic-products-carousel.tsx"],"sourcesContent":["export function getIdFromHandleQuery(): string {\r\n return `\r\n query ($handle: String!) {\r\n product(handle: $handle) {\r\n id\r\n }\r\n }`;\r\n};\r\n\r\nexport function 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\nexport function 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\nexport function 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\nexport function 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// Change this to emit an event that the toast component can listen for\r\n// getProductByHandle\r\n// getProducts\r\n// getCollections (with sorting)\r\n// getMetafield\r\n// getMetafields","export interface 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 [key: string]: any;\r\n};\r\n\r\nexport function 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};","import { apiConfig } from './config';\r\nimport { createErrorHandler } from '../../utils/error_handling/factory';\r\nimport { getIdFromHandleQuery, buildProductsQuery, buildSingleProductQuery, buildVariantProductQuery, buildCollectionProductsQuery } from './queries';\r\nimport { normalizeProduct, NormalizedProduct } from './normalize';\r\n\r\nconst BASE_PRODUCT_FIELDS = ['id','handle','title'];\r\nconst DEFAULT_VARIANT_FIELDS = ['id','title','price { amount currencyCode }'];\r\nconst errors = createErrorHandler({ component: 'storefront-api-module-config' });\r\n\r\nexport async function shopifyFetch(query: string, variables: Record<string, any> = {}): Promise<any> { \r\n try {\r\n if(!apiConfig.isConnected()) throw new Error('Shopify config not connected');\r\n const res = await fetch(apiConfig.endpoint, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-Shopify-Storefront-Access-Token': apiConfig.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(err: any) {\r\n errors.handle({\r\n error: err,\r\n scope: 'loadProducts',\r\n userMessage: 'Unable to load products right now.',\r\n devMessage: 'fetchProducts failed in iv-dynamic-products',\r\n severity: 'error'\r\n });\r\n return null;\r\n };\r\n};\r\n\r\nexport async function getIdFromHandle(handle: string): Promise<string | null> {\r\n try {\r\n const query = getIdFromHandleQuery();\r\n const data = await shopifyFetch(query, { handle });\r\n const id = data?.product?.id;\r\n if(!id) throw new Error('No product found for given handle');\r\n return id;\r\n } catch (err: any) {\r\n errors.handle({\r\n error: err,\r\n scope: 'getIdFromHandle',\r\n userMessage: 'Unable to get product ID from handle right now.',\r\n devMessage: 'getIdFromHandle failed in iv-dynamic-products',\r\n severity: 'error'\r\n });\r\n return null;\r\n };\r\n};\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)) seen.add(f); ordered.push(f); \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\nexport async function fetchProducts(\r\n limit: number, \r\n collectionHandle: string, \r\n sortKey: string, \r\n fields: string[] | string, \r\n 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) { \r\n console.error('Fetch Product By ID Error:', error); throw error; \r\n };\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) { \r\n console.error('Get Variant Product Error:', error); throw error; \r\n };\r\n};",":host {\r\n display: block;\r\n}\r\n\r\n.iv-dynamic-products-carousel { \r\n position:relative;\r\n}\r\n\r\n.iv-dynamic-products-carousel-carousel { \r\n position:relative;\r\n}\r\n\r\n.iv-dynamic-products-carousel-viewport { \r\n overflow:hidden; \r\n width:100%;\r\n}\r\n\r\n.iv-dynamic-products-carousel-track { \r\n display:flex; \r\n width:100%; \r\n transition: \r\n transform .55s cubic-bezier(.4,.7,.2,1); \r\n will-change:transform;\r\n}\r\n\r\n.iv-dynamic-products-carousel-slide { \r\n flex:0 0 100%; \r\n box-sizing:border-box; \r\n padding:0.25rem 0.5rem; \r\n display:grid; \r\n grid-template-columns:repeat(6, minmax(0,1fr)); \r\n gap:1rem; \r\n align-items:stretch; \r\n grid-auto-rows:1fr; \r\n}\r\n\r\n@media (max-width: 1200px) { \r\n .iv-dynamic-products-carousel-slide { \r\n grid-template-columns:repeat(4, minmax(0,1fr)); \r\n } \r\n}\r\n\r\n@media (max-width: 900px) { \r\n .iv-dynamic-products-carousel-slide { \r\n grid-template-columns:repeat(3, minmax(0,1fr)); \r\n } \r\n}\r\n\r\n@media (max-width: 640px) { \r\n .iv-dynamic-products-carousel-slide { \r\n grid-template-columns:repeat(2, minmax(0,1fr)); \r\n gap:0.75rem; \r\n } \r\n}\r\n\r\n.iv-dynamic-products-carousel-card { \r\n height:100%; \r\n display:flex; \r\n flex-direction:column; \r\n background:#fff; \r\n padding:0.75rem 0.75rem 0.9rem; \r\n box-shadow:0 2px 6px rgba(0,0,0,.08); \r\n transition:box-shadow .2s ease, transform .2s ease; \r\n}\r\n\r\n/* Alignment fix: reserve consistent height for titles (2 lines) and anchor controls at bottom */\r\n.iv-dynamic-products-carousel-card .iv-card-title {\r\n line-height:1.2;\r\n display:-webkit-box;\r\n -webkit-box-orient:vertical;\r\n -webkit-line-clamp:2;\r\n line-clamp:2;\r\n overflow:hidden;\r\n min-height:calc(2 * 1.2em);\r\n}\r\n\r\n.iv-dynamic-products-carousel-card .iv-card-controls {\r\n margin-top:auto; /* push controls to bottom of flex column for uniform vertical alignment */\r\n}\r\n\r\n.iv-dynamic-products-carousel-card:hover { \r\n box-shadow:0 4px 14px rgba(0,0,0,.15); \r\n transform:translateY(-2px); \r\n}\r\n\r\n.iv-dynamic-products-carousel-card:active { \r\n transform:translateY(0); \r\n box-shadow:0 2px 6px rgba(0,0,0,.12); \r\n}\r\n\r\n.iv-dynamic-products-carousel-card img, \r\n.iv-dynamic-products-carousel-card picture, \r\n.iv-dynamic-products-carousel-card .media { \r\n width:100%; \r\n aspect-ratio:1/1; \r\n object-fit:contain; \r\n display:flex; \r\n align-items:center; \r\n justify-content:center; \r\n margin:0 0 .65rem; \r\n}\r\n\r\n.iv-dynamic-products-carousel-nav { \r\n position:absolute; \r\n top:50%; \r\n transform:translateY(-50%); \r\n background:var(--iv-carousel-nav-bg, rgba(0,0,0,.55)); \r\n color:#fff; \r\n border:none; \r\n width:2.75rem; \r\n height:2.75rem; \r\n border-radius:50%; \r\n display:flex; \r\n align-items:center; \r\n justify-content:center; \r\n cursor:pointer; \r\n backdrop-filter:blur(6px); \r\n box-shadow:0 4px 12px rgba(0,0,0,.25); \r\n transition:background .2s ease, \r\n transform .2s ease; \r\n outline:none;\r\n z-index: 10;\r\n }\r\n\r\n.iv-dynamic-products-carousel-nav:focus-visible { \r\n outline:2px solid #fff; \r\n outline-offset:3px; \r\n}\r\n\r\n.iv-dynamic-products-carousel-nav:hover:not(:disabled){\r\n background:var(--iv-carousel-nav-bg-hover, rgba(0,0,0,.75)); \r\n transform:translateY(-50%) scale(1.05); \r\n box-shadow:0 6px 18px rgba(0,0,0,.35);\r\n}\r\n\r\n.iv-dynamic-products-carousel-nav:disabled{ \r\n opacity:.4; cursor:default; \r\n}\r\n\r\n.iv-dynamic-products-carousel-nav-prev { \r\n left:0.25rem; \r\n}\r\n\r\n.iv-dynamic-products-carousel-nav-next { \r\n right:0.25rem; \r\n}\r\n\r\n.iv-dynamic-products-carousel-status { \r\n margin-top:0.75rem; \r\n font-size:0.875rem; \r\n text-align:center; \r\n color:var(--iv-carousel-status-color, #555); \r\n}\r\n\r\n.iv-dynamic-products-carousel-viewport::-webkit-scrollbar { \r\n display:none; \r\n}\r\n\r\n.iv-dynamic-products-carousel-viewport { \r\n -ms-overflow-style:none; \r\n scrollbar-width:none; \r\n}","// Refactor this to use the iv-carousel component\r\n\r\nimport { Component, h, Prop, State, Watch } from '@stencil/core';\r\nimport { state } from '../../utils/store/store';\r\nimport { fetchProducts } from '../../utils/storefront_api';\r\nimport { productCache } from '../../utils/caching/productCache';\r\nimport { createErrorHandler } from '../../utils/error_handling/factory';\r\n\r\nconst BLOCK = 'iv-dynamic-products-carousel';\r\n\r\n@Component({\r\n tag: 'iv-dynamic-products-carousel',\r\n styleUrl: 'iv-dynamic-products-carousel.scss',\r\n shadow: false\r\n})\r\n\r\nexport class IvDynamicProductsCarousel {\r\n @Prop() type: 'CREATED' | 'CREATED_AT' | 'BEST_SELLING' | 'PRICE' | 'TITLE' | 'RELEVANCE' = 'CREATED_AT'; \r\n @Prop() limit: number = 24;\r\n @Prop() reversed: boolean = false; \r\n @Prop() componenttitle?: string;\r\n @Prop() titletag: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' = 'h2';\r\n @Prop() collectionhandle: string = 'all';\r\n @Prop() requestedfields: string;\r\n @Prop() calltoaction: boolean = false;\r\n @Prop() buttontext?: string;\r\n @Prop() addtocarttext?: string;\r\n @Prop() emptystring: string = 'No products found';\r\n @Prop() cachettl?: number; \r\n @Prop() stale?: boolean = true;\r\n @Prop() excluse?: string;\r\n \r\n @State() products: any[] = [];\r\n @State() errorMsg: string; \r\n @State() staleData: boolean = false;\r\n @State() page: number = 0; \r\n\r\n private readonly itemsPerPage = 6;\r\n\r\n private errors = createErrorHandler({ component: 'iv-dynamic-products-carousel' });\r\n\r\n @Watch('type')\r\n @Watch('limit')\r\n @Watch('collectionhandle')\r\n @Watch('requestedfields')\r\n handlePropChange() { this.loadProducts(true); }\r\n\r\n async componentWillLoad() { \r\n await this.loadProducts(false); \r\n };\r\n \r\n private buildParams() {\r\n return {\r\n handle: this.collectionhandle,\r\n sort: this.type,\r\n fields: this.requestedfields,\r\n limit: 36, // Always fetch 36 products for filtering\r\n currency: state.currencyCode,\r\n reversed: this.reversed\r\n };\r\n };\r\n\r\n private ensureProductTypeField(fields: string): string {\r\n if(!fields) return 'productType';\r\n const arr = fields.split(',').map(f => f.trim());\r\n if(!arr.includes('productType')) arr.push('productType');\r\n return arr.join(',');\r\n };\r\n\r\n private filterAndSliceProducts(data: any[]): any[] {\r\n if(!this.excluse) return data.slice(0, this.limit);\r\n if(!this.requestedfields || !this.requestedfields.includes('productType')) {\r\n this.requestedfields = this.ensureProductTypeField(this.requestedfields);\r\n };\r\n const filtered = data.filter(p => p.productType !== this.excluse);\r\n return filtered.slice(0, this.limit);\r\n };\r\n\r\n private async loadProducts(fromWatch: boolean) {\r\n const params = this.buildParams();\r\n const ttl = this.cachettl || 1000 * 60 * 5;\r\n state.loading = !fromWatch;\r\n try {\r\n const data = await productCache.getOrSetData(\r\n params,\r\n async () => {\r\n const fresh = await fetchProducts(\r\n 36, \r\n this.collectionhandle, \r\n this.type, \r\n this.requestedfields, \r\n this.reversed\r\n );\r\n return fresh;\r\n },\r\n {\r\n ttl,\r\n staleWhileRevalidate: this.stale,\r\n transform: (fresh) => fresh \r\n }\r\n );\r\n const metaCheck = productCache.getData<typeof data>(params);\r\n this.staleData = metaCheck.isExpired && metaCheck.isStale;\r\n this.products = Array.isArray(data) ? this.filterAndSliceProducts(data) : [];\r\n this.page = 0;\r\n } catch (err: any) {\r\n this.errorMsg = 'Failed to load products';\r\n this.errors.handle({\r\n error: err,\r\n scope: 'loadProducts',\r\n userMessage: 'Unable to load products right now.',\r\n devMessage: 'fetchProducts failed in iv-dynamic-products',\r\n severity: 'error'\r\n });\r\n } finally {\r\n state.loading = false;\r\n };\r\n };\r\n \r\n private pagedProducts() {\r\n const chunks: any[][] = [];\r\n for(let i=0; i < this.products.length; i += this.itemsPerPage) {\r\n chunks.push(this.products.slice(i, i + this.itemsPerPage));\r\n };\r\n return chunks;\r\n };\r\n\r\n private next = () => { \r\n const pages = this.pagedProducts().length;\r\n if(this.page < pages - 1) this.page++;\r\n };\r\n\r\n private prev = () => { \r\n if(this.page > 0) this.page--;\r\n };\r\n\r\n render() {\r\n\r\n const TAG = this.titletag as any;\r\n\r\n return (\r\n <div class={BLOCK} data-stale={this.staleData ? 'true' : 'false'}>\r\n {this.componenttitle && <TAG class={`${BLOCK}-title`}>{this.componenttitle}</TAG>}\r\n {state.loading ? (\r\n <iv-spinner></iv-spinner>\r\n ) : this.errorMsg ? (\r\n <div class={`${BLOCK}-error`}>{this.errorMsg}</div>\r\n ) : this.products.length === 0 ? (\r\n <div class={`${BLOCK}-empty`}>{this.emptystring}</div>\r\n ) : (\r\n <div class={`${BLOCK}-carousel`} aria-roledescription=\"carousel\">\r\n <button class={`${BLOCK}-nav ${BLOCK}-nav-prev`} onClick={this.prev} disabled={this.page===0} aria-label=\"Previous\" type=\"button\">\r\n ‹\r\n </button>\r\n <div class={`${BLOCK}-viewport`}>\r\n <div class={`${BLOCK}-track`} style={{ transform: `translateX(-${this.page * 100}%)` }}>\r\n {this.pagedProducts().map((group, i) => (\r\n <div class={`${BLOCK}-slide`} role=\"group\" aria-label={`Slide ${i+1} of ${this.pagedProducts().length}`}> \r\n {group.map(product => (\r\n <iv-card\r\n cardtype='products'\r\n calltoaction={this.calltoaction}\r\n buttontext={this.buttontext}\r\n addtocarttext={this.addtocarttext}\r\n data={product}\r\n classmodifier={`${BLOCK}-card`} />\r\n ))}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n <button class={`${BLOCK}-nav ${BLOCK}-nav-next`} onClick={this.next} disabled={this.page===this.pagedProducts().length-1} aria-label=\"Next\" type=\"button\">\r\n ›\r\n </button>\r\n <div class={`${BLOCK}-status`} aria-live=\"polite\">{this.pagedProducts().length > 1 ? `Slide ${this.page+1} of ${this.pagedProducts().length}` : ''}</div>\r\n {this.staleData && (\r\n <div class={`${BLOCK}-stale-indicator`} aria-live=\"polite\">Refreshing…</div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n};"],"names":["createErrorHandler","apiConfig","state","productCache","h"],"mappings":"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"}
1
+ {"version":3,"file":"iv-dynamic-products-carousel.entry.cjs.js","sources":["src/utils/storefront_api/queries.ts","src/utils/storefront_api/normalize.ts","src/utils/storefront_api/methods.ts","src/components/iv-dynamic-products-carousel/iv-dynamic-products-carousel.scss?tag=iv-dynamic-products-carousel","src/components/iv-dynamic-products-carousel/iv-dynamic-products-carousel.tsx"],"sourcesContent":["export function getIdFromHandleQuery(): string {\r\n return `\r\n query ($handle: String!) {\r\n product(handle: $handle) {\r\n id\r\n }\r\n }`;\r\n};\r\n\r\nexport function 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\nexport function 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\nexport function 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\nexport function 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// Change this to emit an event that the toast component can listen for\r\n// getProductByHandle\r\n// getProducts\r\n// getCollections (with sorting)\r\n// getMetafield\r\n// getMetafields","export interface 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 [key: string]: any;\r\n};\r\n\r\nexport function 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};","import { apiConfig } from './config';\r\nimport { createErrorHandler } from '../../utils/error_handling/factory';\r\nimport { getIdFromHandleQuery, buildProductsQuery, buildSingleProductQuery, buildVariantProductQuery, buildCollectionProductsQuery } from './queries';\r\nimport { normalizeProduct, NormalizedProduct } from './normalize';\r\n\r\nconst BASE_PRODUCT_FIELDS = ['id','handle','title'];\r\nconst DEFAULT_VARIANT_FIELDS = ['id','title','price { amount currencyCode }'];\r\nconst errors = createErrorHandler({ component: 'storefront-api-module-config' });\r\n\r\nexport async function shopifyFetch(query: string, variables: Record<string, any> = {}): Promise<any> { \r\n try {\r\n if(!apiConfig.isConnected()) throw new Error('Shopify config not connected');\r\n const res = await fetch(apiConfig.endpoint, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-Shopify-Storefront-Access-Token': apiConfig.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(err: any) {\r\n errors.handle({\r\n error: err,\r\n scope: 'loadProducts',\r\n userMessage: 'Unable to load products right now.',\r\n devMessage: 'fetchProducts failed in iv-dynamic-products',\r\n severity: 'error'\r\n });\r\n return null;\r\n };\r\n};\r\n\r\nexport async function getIdFromHandle(handle: string): Promise<string | null> {\r\n try {\r\n const query = getIdFromHandleQuery();\r\n const data = await shopifyFetch(query, { handle });\r\n const id = data?.product?.id;\r\n if(!id) throw new Error('No product found for given handle');\r\n return id;\r\n } catch (err: any) {\r\n errors.handle({\r\n error: err,\r\n scope: 'getIdFromHandle',\r\n userMessage: 'Unable to get product ID from handle right now.',\r\n devMessage: 'getIdFromHandle failed in iv-dynamic-products',\r\n severity: 'error'\r\n });\r\n return null;\r\n };\r\n};\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)) seen.add(f); ordered.push(f); \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\nexport async function fetchProducts(\r\n limit: number, \r\n collectionHandle: string, \r\n sortKey: string, \r\n fields: string[] | string, \r\n 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) { \r\n console.error('Fetch Product By ID Error:', error); throw error; \r\n };\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) { \r\n console.error('Get Variant Product Error:', error); throw error; \r\n };\r\n};",":host {\r\n display: block;\r\n}\r\n\r\n.iv-dynamic-products-carousel { \r\n position:relative;\r\n}\r\n\r\n.iv-dynamic-products-carousel-carousel { \r\n position:relative;\r\n}\r\n\r\n.iv-dynamic-products-carousel-viewport { \r\n overflow:hidden; \r\n width:100%;\r\n}\r\n\r\n.iv-dynamic-products-carousel-track { \r\n display:flex; \r\n width:100%; \r\n transition: \r\n transform .55s cubic-bezier(.4,.7,.2,1); \r\n will-change:transform;\r\n}\r\n\r\n.iv-dynamic-products-carousel-slide { \r\n flex:0 0 100%; \r\n box-sizing:border-box; \r\n padding:0.25rem 0.5rem; \r\n display:grid; \r\n grid-template-columns:repeat(6, minmax(0,1fr)); \r\n gap:1rem; \r\n align-items:stretch; \r\n grid-auto-rows:1fr; \r\n}\r\n\r\n@media (max-width: 1200px) { \r\n .iv-dynamic-products-carousel-slide { \r\n grid-template-columns:repeat(4, minmax(0,1fr)); \r\n } \r\n}\r\n\r\n@media (max-width: 900px) { \r\n .iv-dynamic-products-carousel-slide { \r\n grid-template-columns:repeat(3, minmax(0,1fr)); \r\n } \r\n}\r\n\r\n@media (max-width: 640px) { \r\n .iv-dynamic-products-carousel-slide { \r\n grid-template-columns:repeat(2, minmax(0,1fr)); \r\n gap:0.75rem; \r\n } \r\n}\r\n\r\n.iv-dynamic-products-carousel-card { \r\n height:100%; \r\n display:flex; \r\n flex-direction:column; \r\n background:#fff; \r\n padding:0.75rem 0.75rem 0.9rem; \r\n box-shadow:0 2px 6px rgba(0,0,0,.08); \r\n transition:box-shadow .2s ease, transform .2s ease; \r\n}\r\n\r\n/* Alignment fix: reserve consistent height for titles (2 lines) and anchor controls at bottom */\r\n.iv-dynamic-products-carousel-card .iv-card-title {\r\n line-height:1.2;\r\n display:-webkit-box;\r\n -webkit-box-orient:vertical;\r\n -webkit-line-clamp:2;\r\n line-clamp:2;\r\n overflow:hidden;\r\n min-height:calc(2 * 1.2em);\r\n}\r\n\r\n.iv-dynamic-products-carousel-card .iv-card-controls {\r\n margin-top:auto; /* push controls to bottom of flex column for uniform vertical alignment */\r\n}\r\n\r\n.iv-dynamic-products-carousel-card:hover { \r\n box-shadow:0 4px 14px rgba(0,0,0,.15); \r\n transform:translateY(-2px); \r\n}\r\n\r\n.iv-dynamic-products-carousel-card:active { \r\n transform:translateY(0); \r\n box-shadow:0 2px 6px rgba(0,0,0,.12); \r\n}\r\n\r\n.iv-dynamic-products-carousel-card img, \r\n.iv-dynamic-products-carousel-card picture, \r\n.iv-dynamic-products-carousel-card .media { \r\n width:100%; \r\n aspect-ratio:1/1; \r\n object-fit:contain; \r\n display:flex; \r\n align-items:center; \r\n justify-content:center; \r\n margin:0 0 .65rem; \r\n}\r\n\r\n.iv-dynamic-products-carousel-nav { \r\n position:absolute; \r\n top:50%; \r\n transform:translateY(-50%); \r\n background:var(--iv-carousel-nav-bg, rgba(0,0,0,.55)); \r\n color:#fff; \r\n border:none; \r\n width:2.75rem; \r\n height:2.75rem; \r\n border-radius:50%; \r\n display:flex; \r\n align-items:center; \r\n justify-content:center; \r\n cursor:pointer; \r\n backdrop-filter:blur(6px); \r\n box-shadow:0 4px 12px rgba(0,0,0,.25); \r\n transition:background .2s ease, \r\n transform .2s ease; \r\n outline:none;\r\n z-index: 10;\r\n }\r\n\r\n.iv-dynamic-products-carousel-nav:focus-visible { \r\n outline:2px solid #fff; \r\n outline-offset:3px; \r\n}\r\n\r\n.iv-dynamic-products-carousel-nav:hover:not(:disabled){\r\n background:var(--iv-carousel-nav-bg-hover, rgba(0,0,0,.75)); \r\n transform:translateY(-50%) scale(1.05); \r\n box-shadow:0 6px 18px rgba(0,0,0,.35);\r\n}\r\n\r\n.iv-dynamic-products-carousel-nav:disabled{ \r\n opacity:.4; cursor:default; \r\n}\r\n\r\n.iv-dynamic-products-carousel-nav-prev { \r\n left:0.25rem; \r\n}\r\n\r\n.iv-dynamic-products-carousel-nav-next { \r\n right:0.25rem; \r\n}\r\n\r\n.iv-dynamic-products-carousel-status { \r\n margin-top:0.75rem; \r\n font-size:0.875rem; \r\n text-align:center; \r\n color:var(--iv-carousel-status-color, #555); \r\n}\r\n\r\n.iv-dynamic-products-carousel-viewport::-webkit-scrollbar { \r\n display:none; \r\n}\r\n\r\n.iv-dynamic-products-carousel-viewport { \r\n -ms-overflow-style:none; \r\n scrollbar-width:none; \r\n}","// Refactor this to use the iv-carousel component\r\n\r\nimport { Component, h, Prop, State, Watch } from '@stencil/core';\r\nimport { state } from '../../utils/store/store';\r\nimport { fetchProducts } from '../../utils/storefront_api';\r\nimport { productCache } from '../../utils/caching/productCache';\r\nimport { createErrorHandler } from '../../utils/error_handling/factory';\r\n\r\nconst BLOCK = 'iv-dynamic-products-carousel';\r\n\r\n@Component({\r\n tag: 'iv-dynamic-products-carousel',\r\n styleUrl: 'iv-dynamic-products-carousel.scss',\r\n shadow: false\r\n})\r\n\r\nexport class IvDynamicProductsCarousel {\r\n @Prop() type: 'CREATED' | 'CREATED_AT' | 'BEST_SELLING' | 'PRICE' | 'TITLE' | 'RELEVANCE' = 'CREATED_AT'; \r\n @Prop() limit: number = 24;\r\n @Prop() reversed: boolean = false; \r\n @Prop() componenttitle?: string;\r\n @Prop() titletag: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' = 'h2';\r\n @Prop() collectionhandle: string = 'all';\r\n @Prop() requestedfields: string;\r\n @Prop() calltoaction: boolean = false;\r\n @Prop() buttontext?: string;\r\n @Prop() addtocarttext?: string;\r\n @Prop() emptystring: string = 'No products found';\r\n @Prop() cachettl?: number; \r\n @Prop() stale?: boolean = true;\r\n @Prop() exclude?: string;\r\n \r\n @State() products: any[] = [];\r\n @State() errorMsg: string; \r\n @State() staleData: boolean = false;\r\n @State() page: number = 0; \r\n\r\n private readonly itemsPerPage = 6;\r\n\r\n private errors = createErrorHandler({ component: 'iv-dynamic-products-carousel' });\r\n\r\n @Watch('type')\r\n @Watch('limit')\r\n @Watch('collectionhandle')\r\n @Watch('requestedfields')\r\n handlePropChange() { this.loadProducts(true); }\r\n\r\n async componentWillLoad() { \r\n await this.loadProducts(false); \r\n };\r\n \r\n private buildParams() {\r\n return {\r\n handle: this.collectionhandle,\r\n sort: this.type,\r\n fields: this.requestedfields,\r\n limit: 36, // Always fetch 36 products for filtering\r\n currency: state.currencyCode,\r\n reversed: this.reversed\r\n };\r\n };\r\n\r\n private ensureProductTypeField(fields: string): string {\r\n if(!fields) return 'productType';\r\n const arr = fields.split(',').map(f => f.trim());\r\n if(!arr.includes('productType')) arr.push('productType');\r\n return arr.join(',');\r\n };\r\n\r\n private filterAndSliceProducts(data: any[]): any[] {\r\n if(!this.exclude) return data.slice(0, this.limit);\r\n if(!this.requestedfields || !this.requestedfields.includes('productType')) {\r\n this.requestedfields = this.ensureProductTypeField(this.requestedfields);\r\n };\r\n const filtered = data.filter(p => p.productType !== this.exclude);\r\n return filtered.slice(0, this.limit);\r\n };\r\n\r\n private async loadProducts(fromWatch: boolean) {\r\n const params = this.buildParams();\r\n const ttl = this.cachettl || 1000 * 60 * 5;\r\n state.loading = !fromWatch;\r\n try {\r\n const data = await productCache.getOrSetData(\r\n params,\r\n async () => {\r\n const fresh = await fetchProducts(\r\n 36, \r\n this.collectionhandle, \r\n this.type, \r\n this.requestedfields, \r\n this.reversed\r\n );\r\n return fresh;\r\n },\r\n {\r\n ttl,\r\n staleWhileRevalidate: this.stale,\r\n transform: (fresh) => fresh \r\n }\r\n );\r\n const metaCheck = productCache.getData<typeof data>(params);\r\n this.staleData = metaCheck.isExpired && metaCheck.isStale;\r\n this.products = Array.isArray(data) ? this.filterAndSliceProducts(data) : [];\r\n this.page = 0;\r\n } catch (err: any) {\r\n this.errorMsg = 'Failed to load products';\r\n this.errors.handle({\r\n error: err,\r\n scope: 'loadProducts',\r\n userMessage: 'Unable to load products right now.',\r\n devMessage: 'fetchProducts failed in iv-dynamic-products',\r\n severity: 'error'\r\n });\r\n } finally {\r\n state.loading = false;\r\n };\r\n };\r\n \r\n private pagedProducts() {\r\n const chunks: any[][] = [];\r\n for(let i=0; i < this.products.length; i += this.itemsPerPage) {\r\n chunks.push(this.products.slice(i, i + this.itemsPerPage));\r\n };\r\n return chunks;\r\n };\r\n\r\n private next = () => { \r\n const pages = this.pagedProducts().length;\r\n if(this.page < pages - 1) this.page++;\r\n };\r\n\r\n private prev = () => { \r\n if(this.page > 0) this.page--;\r\n };\r\n\r\n render() {\r\n\r\n const TAG = this.titletag as any;\r\n\r\n return (\r\n <div class={BLOCK} data-stale={this.staleData ? 'true' : 'false'}>\r\n {this.componenttitle && <TAG class={`${BLOCK}-title`}>{this.componenttitle}</TAG>}\r\n {state.loading ? (\r\n <iv-spinner></iv-spinner>\r\n ) : this.errorMsg ? (\r\n <div class={`${BLOCK}-error`}>{this.errorMsg}</div>\r\n ) : this.products.length === 0 ? (\r\n <div class={`${BLOCK}-empty`}>{this.emptystring}</div>\r\n ) : (\r\n <div class={`${BLOCK}-carousel`} aria-roledescription=\"carousel\">\r\n <button class={`${BLOCK}-nav ${BLOCK}-nav-prev`} onClick={this.prev} disabled={this.page===0} aria-label=\"Previous\" type=\"button\">\r\n ‹\r\n </button>\r\n <div class={`${BLOCK}-viewport`}>\r\n <div class={`${BLOCK}-track`} style={{ transform: `translateX(-${this.page * 100}%)` }}>\r\n {this.pagedProducts().map((group, i) => (\r\n <div class={`${BLOCK}-slide`} role=\"group\" aria-label={`Slide ${i+1} of ${this.pagedProducts().length}`}> \r\n {group.map(product => (\r\n <iv-card\r\n cardtype='products'\r\n calltoaction={this.calltoaction}\r\n buttontext={this.buttontext}\r\n addtocarttext={this.addtocarttext}\r\n data={product}\r\n classmodifier={`${BLOCK}-card`} />\r\n ))}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n <button class={`${BLOCK}-nav ${BLOCK}-nav-next`} onClick={this.next} disabled={this.page===this.pagedProducts().length-1} aria-label=\"Next\" type=\"button\">\r\n ›\r\n </button>\r\n <div class={`${BLOCK}-status`} aria-live=\"polite\">{this.pagedProducts().length > 1 ? `Slide ${this.page+1} of ${this.pagedProducts().length}` : ''}</div>\r\n {this.staleData && (\r\n <div class={`${BLOCK}-stale-indicator`} aria-live=\"polite\">Refreshing…</div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n};"],"names":["createErrorHandler","apiConfig","state","productCache","h"],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  var index = require('./index-CwOil7xd.js');
4
4
 
5
- const ivPillCss = ".iv-pill{background:var(--iv-pill-bgcolor, transparent)}.iv-pill.bordered{border-color:var(--iv-pill-bordercolor, black);border-width:1px;border-style:solid}.iv-pill.internal-none{padding:0}.iv-pill.internal-small{padding:0.25rem 0.5rem}.iv-pill.internal-medium{padding:0.5rem 1rem}.iv-pill.internal-large{padding:0.75rem 1.5rem}.iv-pill.external-none{margin:0}.iv-pill.external-small{margin:0.5rem}.iv-pill.external-medium{margin:0.75rem}.iv-pill.external-large{margin:1rem}.iv-pill.corners-none{border-radius:0}.iv-pill.corners-small{border-radius:0.5rem}.iv-pill.corners-medium{border-radius:1rem}.iv-pill.corners-large{border-radius:2rem}.iv-pill-content{color:var(--iv-pill-textcolor, black)}.iv-pill-label{font-weight:bold;margin-right:0.5rem}";
5
+ const ivPillCss = ".iv-pill{background:var(--iv-pill-bgcolor, transparent);width:fit-content;display:inline-block}.iv-pill.bordered{border-color:var(--iv-pill-bordercolor, black);border-width:1px;border-style:solid}.iv-pill.internal-none{padding:0}.iv-pill.internal-small{padding:0.25rem 0.5rem}.iv-pill.internal-medium{padding:0.5rem 1rem}.iv-pill.internal-large{padding:0.75rem 1.5rem}.iv-pill.external-none{margin:0}.iv-pill.external-small{margin:0.5rem}.iv-pill.external-medium{margin:0.75rem}.iv-pill.external-large{margin:1rem}.iv-pill.corners-none{border-radius:0}.iv-pill.corners-small{border-radius:0.5rem}.iv-pill.corners-medium{border-radius:1rem}.iv-pill.corners-large{border-radius:2rem}.iv-pill-content{color:var(--iv-pill-textcolor, black)}.iv-pill-label{font-weight:bold;margin-right:0.5rem}";
6
6
 
7
7
  const BLOCK = 'iv-pill';
8
8
  const IvPill = class {
@@ -16,11 +16,12 @@ const IvPill = class {
16
16
  externalspacing = 'none';
17
17
  roundedcorners = 'medium';
18
18
  render() {
19
- return (index.h("div", { key: '0315732a272ed0d12a32e42026b5e9c378c209a9', class: BLOCK + this.bordered && ' bordered'
19
+ return (index.h("div", { key: '0babc05c3604fd666838d6bea498781d569a4f6f', class: BLOCK
20
+ + (this.bordered ? ' bordered' : '')
20
21
  + ` internal-${this.internalspacing}`
21
22
  + ` external-${this.externalspacing}`
22
- + ` corners-${this.roundedcorners}` }, index.h("p", { key: '4de900ef1b2640a0be029491b263c0e1aa3347f5', class: `${BLOCK}-content` }, this.label &&
23
- index.h("span", { key: 'd63db09e06be920d963f95400713c1ad9cb96032', class: `${BLOCK}-label` }, this.label), this.content)));
23
+ + ` corners-${this.roundedcorners}` }, index.h("p", { key: '51816bcac1a1f30311b93eb0eddc5d7f6f5d6952', class: `${BLOCK}-content` }, this.label &&
24
+ index.h("span", { key: 'ef3aa3d8a44e23e469560501d71fc4b1409796f5', class: `${BLOCK}-label` }, this.label), this.content)));
24
25
  }
25
26
  ;
26
27
  };
@@ -1 +1 @@
1
- {"version":3,"file":"iv-pill.entry.cjs.js","sources":["src/components/iv-pill/iv-pill.scss?tag=iv-pill","src/components/iv-pill/iv-pill.tsx"],"sourcesContent":[".iv-pill {\n background: var(--iv-pill-bgcolor, transparent);\n\n &.bordered {\n border-color: var(--iv-pill-bordercolor, black);\n border-width: 1px;\n border-style: solid;\n }\n\n &.internal-none {\n padding: 0;\n }\n\n &.internal-small {\n padding: 0.25rem 0.5rem;\n }\n\n &.internal-medium {\n padding: 0.5rem 1rem;\n }\n\n &.internal-large {\n padding: 0.75rem 1.5rem;\n }\n\n &.external-none {\n margin: 0;\n }\n\n &.external-small {\n margin: .5rem;\n }\n\n &.external-medium {\n margin: .75rem;\n }\n\n &.external-large {\n margin: 1rem;\n }\n\n &.corners-none {\n border-radius: 0;\n }\n\n &.corners-small {\n border-radius: 0.5rem;\n }\n\n &.corners-medium {\n border-radius: 1rem;\n }\n\n &.corners-large {\n border-radius: 2rem;\n }\n\n &-content {\n color: var(--iv-pill-textcolor, black);\n }\n\n &-label {\n font-weight: bold;\n margin-right: 0.5rem;\n }\n\n}","import { Component, h, Prop } from '@stencil/core';\n\nconst BLOCK = 'iv-pill';\n\n@Component({\n tag: 'iv-pill',\n styleUrl: 'iv-pill.scss',\n shadow: false\n})\n\nexport class IvPill {\n\n @Prop() label?: string;\n @Prop() content: string;\n @Prop() bordered: boolean = true;\n @Prop() internalspacing: 'small' | 'medium' | 'large' = 'medium';\n @Prop() externalspacing: 'none' | 'small' | 'medium' | 'large' = 'none';\n @Prop() roundedcorners: 'none' | 'small' | 'medium' | 'large' = 'medium';\n\n render() {\n\n return (\n <div class={\n BLOCK + this.bordered && ' bordered'\n + ` internal-${this.internalspacing}`\n + ` external-${this.externalspacing}`\n + ` corners-${this.roundedcorners}`\n }>\n <p class={`${BLOCK}-content`}>\n {this.label && \n <span class={`${BLOCK}-label`}>{this.label}</span>\n }\n {this.content}\n </p>\n </div>\n );\n\n };\n\n};"],"names":["h"],"mappings":";;;;AAAA,MAAM,SAAS,GAAG,+uBAA+uB;;ACEjwB,MAAM,KAAK,GAAG,SAAS;MAQV,MAAM,GAAA,MAAA;;;;AAET,IAAA,KAAK;AACL,IAAA,OAAO;IACP,QAAQ,GAAY,IAAI;IACxB,eAAe,GAAiC,QAAQ;IACxD,eAAe,GAA0C,MAAM;IAC/D,cAAc,GAA0C,QAAQ;IAExE,MAAM,GAAA;AAEJ,QAAA,QACEA,OAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EACR,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI;kBACvB,CAAa,UAAA,EAAA,IAAI,CAAC,eAAe,CAAE;kBACnC,CAAa,UAAA,EAAA,IAAI,CAAC,eAAe,CAAE;kBACnC,CAAY,SAAA,EAAA,IAAI,CAAC,cAAc,CAAE,CAAA,EAAA,EAEnCA,OAAA,CAAA,GAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAG,KAAK,EAAE,CAAG,EAAA,KAAK,UAAU,EAAA,EACzB,IAAI,CAAC,KAAK;YACTA,OAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAE,CAAA,EAAG,KAAK,CAAA,MAAA,CAAQ,EAAG,EAAA,IAAI,CAAC,KAAK,CAAQ,EAEnD,IAAI,CAAC,OAAO,CACX,CACA;;;;;;;;"}
1
+ {"version":3,"file":"iv-pill.entry.cjs.js","sources":["src/components/iv-pill/iv-pill.scss?tag=iv-pill","src/components/iv-pill/iv-pill.tsx"],"sourcesContent":[".iv-pill {\n background: var(--iv-pill-bgcolor, transparent);\n width: fit-content;\n display: inline-block;\n\n &.bordered {\n border-color: var(--iv-pill-bordercolor, black);\n border-width: 1px;\n border-style: solid;\n }\n\n &.internal-none {\n padding: 0;\n }\n\n &.internal-small {\n padding: 0.25rem 0.5rem;\n }\n\n &.internal-medium {\n padding: 0.5rem 1rem;\n }\n\n &.internal-large {\n padding: 0.75rem 1.5rem;\n }\n\n &.external-none {\n margin: 0;\n }\n\n &.external-small {\n margin: .5rem;\n }\n\n &.external-medium {\n margin: .75rem;\n }\n\n &.external-large {\n margin: 1rem;\n }\n\n &.corners-none {\n border-radius: 0;\n }\n\n &.corners-small {\n border-radius: 0.5rem;\n }\n\n &.corners-medium {\n border-radius: 1rem;\n }\n\n &.corners-large {\n border-radius: 2rem;\n }\n\n &-content {\n color: var(--iv-pill-textcolor, black);\n }\n\n &-label {\n font-weight: bold;\n margin-right: 0.5rem;\n }\n\n}","import { Component, h, Prop } from '@stencil/core';\n\nconst BLOCK = 'iv-pill';\n\n@Component({\n tag: 'iv-pill',\n styleUrl: 'iv-pill.scss',\n shadow: false\n})\n\nexport class IvPill {\n\n @Prop() label?: string;\n @Prop() content: string;\n @Prop() bordered: boolean = true;\n @Prop() internalspacing: 'small' | 'medium' | 'large' = 'medium';\n @Prop() externalspacing: 'none' | 'small' | 'medium' | 'large' = 'none';\n @Prop() roundedcorners: 'none' | 'small' | 'medium' | 'large' = 'medium';\n\n render() {\n\n return (\n <div class={\n BLOCK \n + (this.bordered ? ' bordered' : '')\n + ` internal-${this.internalspacing}`\n + ` external-${this.externalspacing}`\n + ` corners-${this.roundedcorners}`\n }>\n <p class={`${BLOCK}-content`}>\n {this.label && \n <span class={`${BLOCK}-label`}>{this.label}</span>\n }\n {this.content}\n </p>\n </div>\n );\n\n };\n\n};"],"names":["h"],"mappings":";;;;AAAA,MAAM,SAAS,GAAG,sxBAAsxB;;ACExyB,MAAM,KAAK,GAAG,SAAS;MAQV,MAAM,GAAA,MAAA;;;;AAET,IAAA,KAAK;AACL,IAAA,OAAO;IACP,QAAQ,GAAY,IAAI;IACxB,eAAe,GAAiC,QAAQ;IACxD,eAAe,GAA0C,MAAM;IAC/D,cAAc,GAA0C,QAAQ;IAExE,MAAM,GAAA;AAEJ,QAAA,QACEA,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EACR;mBACG,IAAI,CAAC,QAAQ,GAAG,WAAW,GAAG,EAAE;kBACjC,CAAa,UAAA,EAAA,IAAI,CAAC,eAAe,CAAE;kBACnC,CAAa,UAAA,EAAA,IAAI,CAAC,eAAe,CAAE;kBACnC,CAAY,SAAA,EAAA,IAAI,CAAC,cAAc,CAAE,CAAA,EAAA,EAEnCA,OAAA,CAAA,GAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAG,KAAK,EAAE,CAAG,EAAA,KAAK,UAAU,EAAA,EACzB,IAAI,CAAC,KAAK;YACTA,OAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAE,CAAA,EAAG,KAAK,CAAA,MAAA,CAAQ,EAAG,EAAA,IAAI,CAAC,KAAK,CAAQ,EAEnD,IAAI,CAAC,OAAO,CACX,CACA;;;;;;;;"}
@@ -6,7 +6,7 @@ var appGlobals = require('./app-globals-DMja435B.js');
6
6
  const defineCustomElements = async (win, options) => {
7
7
  if (typeof window === 'undefined') return undefined;
8
8
  await appGlobals.globalScripts();
9
- return index.bootstrapLazy([["iv-dynamic-products.cjs",[[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"]}]]],["iv-suggest.cjs",[[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]}]]],["iv-dynamic-products-carousel.cjs",[[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"]}]]],["iv-predictive-search.cjs",[[256,"iv-predictive-search",{"searchlabel":[1],"labelposition":[1],"action":[1],"placeholder":[1],"minchars":[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]}]]],["iv-recently-viewed.cjs",[[256,"iv-recently-viewed",{"componenttitle":[1],"titletag":[1],"numbertoshow":[2],"noviewhistory":[1],"requestedfields":[1],"items":[32]}]]],["iv-link-list.cjs",[[256,"iv-link-list",{"linktype":[1],"showicons":[4],"links":[1],"layout":[1]}]]],["iv-shop-the-look.cjs",[[260,"iv-shop-the-look",{"behaviour":[1],"coordinates":[1],"producthandles":[1]}]]],["iv-toast-container.cjs",[[256,"iv-toast-container",{"_bump":[32]}]]],["iv-wishlist.cjs",[[256,"iv-wishlist",{"buttonaddvalue":[1],"buttonremovevalue":[1],"wishlistempty":[1],"buttonaddtocartvalue":[1],"viewwishlistvalue":[1],"productdata":[1],"usefields":[1],"previewtype":[1]}]]],["iv-carousel.cjs",[[260,"iv-carousel",{"navarrows":[4],"navdots":[4],"showslidecount":[4],"autoplay":[4],"autoplayspeed":[2],"valign":[1],"halign":[1],"hasoverlay":[4],"currentIndex":[32],"items":[32]}]]],["iv-compare-product.cjs",[[256,"iv-compare-product"]]],["iv-filters.cjs",[[256,"iv-filters"]]],["iv-footer.cjs",[[260,"iv-footer",{"gridtemplateareas":[1],"footerbackground":[1],"blockElements":[32]}]]],["iv-pill.cjs",[[256,"iv-pill",{"label":[1],"content":[1],"bordered":[4],"internalspacing":[1],"externalspacing":[1],"roundedcorners":[1]}]]],["iv-product-upsell.cjs",[[257,"iv-product-upsell"]]],["iv-two-col-media.cjs",[[260,"iv-two-col-media",{"mobilebehaviour":[1],"whichcolumn":[1],"stackorder":[1],"verticalalign":[1],"horizontalalign":[1],"gap":[1],"hasMediaCol1":[32],"hasMediaCol2":[32]}]]],["sw-in-grid-content.cjs",[[260,"sw-in-grid-content"]]],["sw-size-guide.cjs",[[260,"sw-size-guide",{"sizeUnits":[32]}]]],["iv-banner.cjs",[[260,"iv-banner",{"classmodifier":[1],"bannerurl":[1],"bannerbuttontext":[1],"bannertype":[1]}]]],["iv-product-pin.cjs",[[256,"iv-product-pin",{"pinProduct":[1,"pin-product"],"pinKey":[2,"pin-key"],"pinCords":[16],"pinBehaviour":[1,"pin-behaviour"]}]]],["iv-tabs.cjs",[[260,"iv-tabs",{"labels":[16],"classModifier":[1,"class-modifier"],"tabLayout":[1,"tab-layout"],"activeTab":[32]}]]],["iv-toast.cjs",[[256,"iv-toast",{"message":[1],"toastId":[2,"toast-id"],"duration":[2],"type":[1]}]]],["ion-icon_9.cjs",[[257,"iv-modal",{"newsletterpopuptrigger":[1],"newsletterpopuptimedelay":[2],"modalState":[32],"contentName":[32]},[[4,"openModal","handleOpenModal"]]],[260,"iv-sidebar",{"newsletterpopuptrigger":[1],"newsletterpopuptimedelay":[2],"sidebarState":[32],"contentName":[32]},[[4,"openSidebar","handleopenSidebar"]]],[260,"iv-accordion",{"labels":[1],"allowmultiple":[4],"startopen":[4],"acordionlayout":[1],"contentplacement":[1],"dropdownicon":[1],"openPanels":[32]}],[256,"iv-newsletter",{"formimageurl":[1],"formimageposition":[1],"formimageheight":[1],"formsubmitbtntext":[1],"formsuccessmessage":[1],"formfailuremessage":[1],"formplaceholdertext":[1],"formlabeltext":[1],"formstackbutton":[4],"formtitletag":[1],"formtitletext":[1],"formdescriptiontext":[1],"includeloadingspinner":[4],"newsletterpopupdisclaimer":[1],"classmodifier":[1],"email":[32],"formFeedback":[32],"status":[32]}],[260,"iv-event-button",{"eventname":[1],"eventdetail":[8],"buttontext":[1]}],[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]}]]],["iv-card_3.cjs",[[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"]}]]]], options);
9
+ return index.bootstrapLazy([["iv-dynamic-products.cjs",[[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"]}]]],["iv-suggest.cjs",[[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]}]]],["iv-dynamic-products-carousel.cjs",[[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],"exclude":[1],"products":[32],"errorMsg":[32],"staleData":[32],"page":[32]},null,{"type":["handlePropChange"],"limit":["handlePropChange"],"collectionhandle":["handlePropChange"],"requestedfields":["handlePropChange"]}]]],["iv-predictive-search.cjs",[[256,"iv-predictive-search",{"searchlabel":[1],"labelposition":[1],"action":[1],"placeholder":[1],"minchars":[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]}]]],["iv-recently-viewed.cjs",[[256,"iv-recently-viewed",{"componenttitle":[1],"titletag":[1],"numbertoshow":[2],"noviewhistory":[1],"requestedfields":[1],"items":[32]}]]],["iv-link-list.cjs",[[256,"iv-link-list",{"linktype":[1],"showicons":[4],"links":[1],"layout":[1]}]]],["iv-shop-the-look.cjs",[[260,"iv-shop-the-look",{"behaviour":[1],"coordinates":[1],"producthandles":[1]}]]],["iv-toast-container.cjs",[[256,"iv-toast-container",{"_bump":[32]}]]],["iv-wishlist.cjs",[[256,"iv-wishlist",{"buttonaddvalue":[1],"buttonremovevalue":[1],"wishlistempty":[1],"buttonaddtocartvalue":[1],"viewwishlistvalue":[1],"productdata":[1],"usefields":[1],"previewtype":[1]}]]],["iv-carousel.cjs",[[260,"iv-carousel",{"navarrows":[4],"navdots":[4],"showslidecount":[4],"autoplay":[4],"autoplayspeed":[2],"valign":[1],"halign":[1],"hasoverlay":[4],"currentIndex":[32],"items":[32]}]]],["iv-compare-product.cjs",[[256,"iv-compare-product"]]],["iv-filters.cjs",[[256,"iv-filters"]]],["iv-footer.cjs",[[260,"iv-footer",{"gridtemplateareas":[1],"footerbackground":[1],"blockElements":[32]}]]],["iv-pill.cjs",[[256,"iv-pill",{"label":[1],"content":[1],"bordered":[4],"internalspacing":[1],"externalspacing":[1],"roundedcorners":[1]}]]],["iv-product-upsell.cjs",[[257,"iv-product-upsell"]]],["iv-two-col-media.cjs",[[260,"iv-two-col-media",{"mobilebehaviour":[1],"whichcolumn":[1],"stackorder":[1],"verticalalign":[1],"horizontalalign":[1],"gap":[1],"hasMediaCol1":[32],"hasMediaCol2":[32]}]]],["sw-in-grid-content.cjs",[[260,"sw-in-grid-content"]]],["sw-size-guide.cjs",[[260,"sw-size-guide",{"sizeUnits":[32]}]]],["iv-banner.cjs",[[260,"iv-banner",{"classmodifier":[1],"bannerurl":[1],"bannerbuttontext":[1],"bannertype":[1]}]]],["iv-product-pin.cjs",[[256,"iv-product-pin",{"pinProduct":[1,"pin-product"],"pinKey":[2,"pin-key"],"pinCords":[16],"pinBehaviour":[1,"pin-behaviour"]}]]],["iv-tabs.cjs",[[260,"iv-tabs",{"labels":[16],"classModifier":[1,"class-modifier"],"tabLayout":[1,"tab-layout"],"activeTab":[32]}]]],["iv-toast.cjs",[[256,"iv-toast",{"message":[1],"toastId":[2,"toast-id"],"duration":[2],"type":[1]}]]],["ion-icon_9.cjs",[[257,"iv-modal",{"newsletterpopuptrigger":[1],"newsletterpopuptimedelay":[2],"modalState":[32],"contentName":[32]},[[4,"openModal","handleOpenModal"]]],[260,"iv-sidebar",{"newsletterpopuptrigger":[1],"newsletterpopuptimedelay":[2],"sidebarState":[32],"contentName":[32]},[[4,"openSidebar","handleopenSidebar"]]],[260,"iv-accordion",{"labels":[1],"allowmultiple":[4],"startopen":[4],"acordionlayout":[1],"contentplacement":[1],"dropdownicon":[1],"openPanels":[32]}],[256,"iv-newsletter",{"formimageurl":[1],"formimageposition":[1],"formimageheight":[1],"formsubmitbtntext":[1],"formsuccessmessage":[1],"formfailuremessage":[1],"formplaceholdertext":[1],"formlabeltext":[1],"formstackbutton":[4],"formtitletag":[1],"formtitletext":[1],"formdescriptiontext":[1],"includeloadingspinner":[4],"newsletterpopupdisclaimer":[1],"classmodifier":[1],"email":[32],"formFeedback":[32],"status":[32]}],[260,"iv-event-button",{"eventname":[1],"eventdetail":[8],"buttontext":[1]}],[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]}]]],["iv-card_3.cjs",[[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"]}]]]], options);
10
10
  };
11
11
 
12
12
  exports.setNonce = index.setNonce;
@@ -19,7 +19,7 @@ export class IvDynamicProductsCarousel {
19
19
  emptystring = 'No products found';
20
20
  cachettl;
21
21
  stale = true;
22
- excluse;
22
+ exclude;
23
23
  products = [];
24
24
  errorMsg;
25
25
  staleData = false;
@@ -52,13 +52,13 @@ export class IvDynamicProductsCarousel {
52
52
  }
53
53
  ;
54
54
  filterAndSliceProducts(data) {
55
- if (!this.excluse)
55
+ if (!this.exclude)
56
56
  return data.slice(0, this.limit);
57
57
  if (!this.requestedfields || !this.requestedfields.includes('productType')) {
58
58
  this.requestedfields = this.ensureProductTypeField(this.requestedfields);
59
59
  }
60
60
  ;
61
- const filtered = data.filter(p => p.productType !== this.excluse);
61
+ const filtered = data.filter(p => p.productType !== this.exclude);
62
62
  return filtered.slice(0, this.limit);
63
63
  }
64
64
  ;
@@ -387,7 +387,7 @@ export class IvDynamicProductsCarousel {
387
387
  "attribute": "stale",
388
388
  "defaultValue": "true"
389
389
  },
390
- "excluse": {
390
+ "exclude": {
391
391
  "type": "string",
392
392
  "mutable": false,
393
393
  "complexType": {
@@ -404,7 +404,7 @@ export class IvDynamicProductsCarousel {
404
404
  "getter": false,
405
405
  "setter": false,
406
406
  "reflect": false,
407
- "attribute": "excluse"
407
+ "attribute": "exclude"
408
408
  }
409
409
  };
410
410
  }
@@ -1 +1 @@
1
- {"version":3,"file":"iv-dynamic-products-carousel.js","sourceRoot":"","sources":["../../../src/components/iv-dynamic-products-carousel/iv-dynamic-products-carousel.tsx"],"names":[],"mappings":"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","sourcesContent":["// Refactor this to use the iv-carousel component\r\n\r\nimport { Component, h, Prop, State, Watch } from '@stencil/core';\r\nimport { state } from '../../utils/store/store';\r\nimport { fetchProducts } from '../../utils/storefront_api';\r\nimport { productCache } from '../../utils/caching/productCache';\r\nimport { createErrorHandler } from '../../utils/error_handling/factory';\r\n\r\nconst BLOCK = 'iv-dynamic-products-carousel';\r\n\r\n@Component({\r\n tag: 'iv-dynamic-products-carousel',\r\n styleUrl: 'iv-dynamic-products-carousel.scss',\r\n shadow: false\r\n})\r\n\r\nexport class IvDynamicProductsCarousel {\r\n @Prop() type: 'CREATED' | 'CREATED_AT' | 'BEST_SELLING' | 'PRICE' | 'TITLE' | 'RELEVANCE' = 'CREATED_AT'; \r\n @Prop() limit: number = 24;\r\n @Prop() reversed: boolean = false; \r\n @Prop() componenttitle?: string;\r\n @Prop() titletag: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' = 'h2';\r\n @Prop() collectionhandle: string = 'all';\r\n @Prop() requestedfields: string;\r\n @Prop() calltoaction: boolean = false;\r\n @Prop() buttontext?: string;\r\n @Prop() addtocarttext?: string;\r\n @Prop() emptystring: string = 'No products found';\r\n @Prop() cachettl?: number; \r\n @Prop() stale?: boolean = true;\r\n @Prop() excluse?: string;\r\n \r\n @State() products: any[] = [];\r\n @State() errorMsg: string; \r\n @State() staleData: boolean = false;\r\n @State() page: number = 0; \r\n\r\n private readonly itemsPerPage = 6;\r\n\r\n private errors = createErrorHandler({ component: 'iv-dynamic-products-carousel' });\r\n\r\n @Watch('type')\r\n @Watch('limit')\r\n @Watch('collectionhandle')\r\n @Watch('requestedfields')\r\n handlePropChange() { this.loadProducts(true); }\r\n\r\n async componentWillLoad() { \r\n await this.loadProducts(false); \r\n };\r\n \r\n private buildParams() {\r\n return {\r\n handle: this.collectionhandle,\r\n sort: this.type,\r\n fields: this.requestedfields,\r\n limit: 36, // Always fetch 36 products for filtering\r\n currency: state.currencyCode,\r\n reversed: this.reversed\r\n };\r\n };\r\n\r\n private ensureProductTypeField(fields: string): string {\r\n if(!fields) return 'productType';\r\n const arr = fields.split(',').map(f => f.trim());\r\n if(!arr.includes('productType')) arr.push('productType');\r\n return arr.join(',');\r\n };\r\n\r\n private filterAndSliceProducts(data: any[]): any[] {\r\n if(!this.excluse) return data.slice(0, this.limit);\r\n if(!this.requestedfields || !this.requestedfields.includes('productType')) {\r\n this.requestedfields = this.ensureProductTypeField(this.requestedfields);\r\n };\r\n const filtered = data.filter(p => p.productType !== this.excluse);\r\n return filtered.slice(0, this.limit);\r\n };\r\n\r\n private async loadProducts(fromWatch: boolean) {\r\n const params = this.buildParams();\r\n const ttl = this.cachettl || 1000 * 60 * 5;\r\n state.loading = !fromWatch;\r\n try {\r\n const data = await productCache.getOrSetData(\r\n params,\r\n async () => {\r\n const fresh = await fetchProducts(\r\n 36, \r\n this.collectionhandle, \r\n this.type, \r\n this.requestedfields, \r\n this.reversed\r\n );\r\n return fresh;\r\n },\r\n {\r\n ttl,\r\n staleWhileRevalidate: this.stale,\r\n transform: (fresh) => fresh \r\n }\r\n );\r\n const metaCheck = productCache.getData<typeof data>(params);\r\n this.staleData = metaCheck.isExpired && metaCheck.isStale;\r\n this.products = Array.isArray(data) ? this.filterAndSliceProducts(data) : [];\r\n this.page = 0;\r\n } catch (err: any) {\r\n this.errorMsg = 'Failed to load products';\r\n this.errors.handle({\r\n error: err,\r\n scope: 'loadProducts',\r\n userMessage: 'Unable to load products right now.',\r\n devMessage: 'fetchProducts failed in iv-dynamic-products',\r\n severity: 'error'\r\n });\r\n } finally {\r\n state.loading = false;\r\n };\r\n };\r\n \r\n private pagedProducts() {\r\n const chunks: any[][] = [];\r\n for(let i=0; i < this.products.length; i += this.itemsPerPage) {\r\n chunks.push(this.products.slice(i, i + this.itemsPerPage));\r\n };\r\n return chunks;\r\n };\r\n\r\n private next = () => { \r\n const pages = this.pagedProducts().length;\r\n if(this.page < pages - 1) this.page++;\r\n };\r\n\r\n private prev = () => { \r\n if(this.page > 0) this.page--;\r\n };\r\n\r\n render() {\r\n\r\n const TAG = this.titletag as any;\r\n\r\n return (\r\n <div class={BLOCK} data-stale={this.staleData ? 'true' : 'false'}>\r\n {this.componenttitle && <TAG class={`${BLOCK}-title`}>{this.componenttitle}</TAG>}\r\n {state.loading ? (\r\n <iv-spinner></iv-spinner>\r\n ) : this.errorMsg ? (\r\n <div class={`${BLOCK}-error`}>{this.errorMsg}</div>\r\n ) : this.products.length === 0 ? (\r\n <div class={`${BLOCK}-empty`}>{this.emptystring}</div>\r\n ) : (\r\n <div class={`${BLOCK}-carousel`} aria-roledescription=\"carousel\">\r\n <button class={`${BLOCK}-nav ${BLOCK}-nav-prev`} onClick={this.prev} disabled={this.page===0} aria-label=\"Previous\" type=\"button\">\r\n ‹\r\n </button>\r\n <div class={`${BLOCK}-viewport`}>\r\n <div class={`${BLOCK}-track`} style={{ transform: `translateX(-${this.page * 100}%)` }}>\r\n {this.pagedProducts().map((group, i) => (\r\n <div class={`${BLOCK}-slide`} role=\"group\" aria-label={`Slide ${i+1} of ${this.pagedProducts().length}`}> \r\n {group.map(product => (\r\n <iv-card\r\n cardtype='products'\r\n calltoaction={this.calltoaction}\r\n buttontext={this.buttontext}\r\n addtocarttext={this.addtocarttext}\r\n data={product}\r\n classmodifier={`${BLOCK}-card`} />\r\n ))}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n <button class={`${BLOCK}-nav ${BLOCK}-nav-next`} onClick={this.next} disabled={this.page===this.pagedProducts().length-1} aria-label=\"Next\" type=\"button\">\r\n ›\r\n </button>\r\n <div class={`${BLOCK}-status`} aria-live=\"polite\">{this.pagedProducts().length > 1 ? `Slide ${this.page+1} of ${this.pagedProducts().length}` : ''}</div>\r\n {this.staleData && (\r\n <div class={`${BLOCK}-stale-indicator`} aria-live=\"polite\">Refreshing…</div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n};"]}
1
+ {"version":3,"file":"iv-dynamic-products-carousel.js","sourceRoot":"","sources":["../../../src/components/iv-dynamic-products-carousel/iv-dynamic-products-carousel.tsx"],"names":[],"mappings":"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","sourcesContent":["// Refactor this to use the iv-carousel component\r\n\r\nimport { Component, h, Prop, State, Watch } from '@stencil/core';\r\nimport { state } from '../../utils/store/store';\r\nimport { fetchProducts } from '../../utils/storefront_api';\r\nimport { productCache } from '../../utils/caching/productCache';\r\nimport { createErrorHandler } from '../../utils/error_handling/factory';\r\n\r\nconst BLOCK = 'iv-dynamic-products-carousel';\r\n\r\n@Component({\r\n tag: 'iv-dynamic-products-carousel',\r\n styleUrl: 'iv-dynamic-products-carousel.scss',\r\n shadow: false\r\n})\r\n\r\nexport class IvDynamicProductsCarousel {\r\n @Prop() type: 'CREATED' | 'CREATED_AT' | 'BEST_SELLING' | 'PRICE' | 'TITLE' | 'RELEVANCE' = 'CREATED_AT'; \r\n @Prop() limit: number = 24;\r\n @Prop() reversed: boolean = false; \r\n @Prop() componenttitle?: string;\r\n @Prop() titletag: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' = 'h2';\r\n @Prop() collectionhandle: string = 'all';\r\n @Prop() requestedfields: string;\r\n @Prop() calltoaction: boolean = false;\r\n @Prop() buttontext?: string;\r\n @Prop() addtocarttext?: string;\r\n @Prop() emptystring: string = 'No products found';\r\n @Prop() cachettl?: number; \r\n @Prop() stale?: boolean = true;\r\n @Prop() exclude?: string;\r\n \r\n @State() products: any[] = [];\r\n @State() errorMsg: string; \r\n @State() staleData: boolean = false;\r\n @State() page: number = 0; \r\n\r\n private readonly itemsPerPage = 6;\r\n\r\n private errors = createErrorHandler({ component: 'iv-dynamic-products-carousel' });\r\n\r\n @Watch('type')\r\n @Watch('limit')\r\n @Watch('collectionhandle')\r\n @Watch('requestedfields')\r\n handlePropChange() { this.loadProducts(true); }\r\n\r\n async componentWillLoad() { \r\n await this.loadProducts(false); \r\n };\r\n \r\n private buildParams() {\r\n return {\r\n handle: this.collectionhandle,\r\n sort: this.type,\r\n fields: this.requestedfields,\r\n limit: 36, // Always fetch 36 products for filtering\r\n currency: state.currencyCode,\r\n reversed: this.reversed\r\n };\r\n };\r\n\r\n private ensureProductTypeField(fields: string): string {\r\n if(!fields) return 'productType';\r\n const arr = fields.split(',').map(f => f.trim());\r\n if(!arr.includes('productType')) arr.push('productType');\r\n return arr.join(',');\r\n };\r\n\r\n private filterAndSliceProducts(data: any[]): any[] {\r\n if(!this.exclude) return data.slice(0, this.limit);\r\n if(!this.requestedfields || !this.requestedfields.includes('productType')) {\r\n this.requestedfields = this.ensureProductTypeField(this.requestedfields);\r\n };\r\n const filtered = data.filter(p => p.productType !== this.exclude);\r\n return filtered.slice(0, this.limit);\r\n };\r\n\r\n private async loadProducts(fromWatch: boolean) {\r\n const params = this.buildParams();\r\n const ttl = this.cachettl || 1000 * 60 * 5;\r\n state.loading = !fromWatch;\r\n try {\r\n const data = await productCache.getOrSetData(\r\n params,\r\n async () => {\r\n const fresh = await fetchProducts(\r\n 36, \r\n this.collectionhandle, \r\n this.type, \r\n this.requestedfields, \r\n this.reversed\r\n );\r\n return fresh;\r\n },\r\n {\r\n ttl,\r\n staleWhileRevalidate: this.stale,\r\n transform: (fresh) => fresh \r\n }\r\n );\r\n const metaCheck = productCache.getData<typeof data>(params);\r\n this.staleData = metaCheck.isExpired && metaCheck.isStale;\r\n this.products = Array.isArray(data) ? this.filterAndSliceProducts(data) : [];\r\n this.page = 0;\r\n } catch (err: any) {\r\n this.errorMsg = 'Failed to load products';\r\n this.errors.handle({\r\n error: err,\r\n scope: 'loadProducts',\r\n userMessage: 'Unable to load products right now.',\r\n devMessage: 'fetchProducts failed in iv-dynamic-products',\r\n severity: 'error'\r\n });\r\n } finally {\r\n state.loading = false;\r\n };\r\n };\r\n \r\n private pagedProducts() {\r\n const chunks: any[][] = [];\r\n for(let i=0; i < this.products.length; i += this.itemsPerPage) {\r\n chunks.push(this.products.slice(i, i + this.itemsPerPage));\r\n };\r\n return chunks;\r\n };\r\n\r\n private next = () => { \r\n const pages = this.pagedProducts().length;\r\n if(this.page < pages - 1) this.page++;\r\n };\r\n\r\n private prev = () => { \r\n if(this.page > 0) this.page--;\r\n };\r\n\r\n render() {\r\n\r\n const TAG = this.titletag as any;\r\n\r\n return (\r\n <div class={BLOCK} data-stale={this.staleData ? 'true' : 'false'}>\r\n {this.componenttitle && <TAG class={`${BLOCK}-title`}>{this.componenttitle}</TAG>}\r\n {state.loading ? (\r\n <iv-spinner></iv-spinner>\r\n ) : this.errorMsg ? (\r\n <div class={`${BLOCK}-error`}>{this.errorMsg}</div>\r\n ) : this.products.length === 0 ? (\r\n <div class={`${BLOCK}-empty`}>{this.emptystring}</div>\r\n ) : (\r\n <div class={`${BLOCK}-carousel`} aria-roledescription=\"carousel\">\r\n <button class={`${BLOCK}-nav ${BLOCK}-nav-prev`} onClick={this.prev} disabled={this.page===0} aria-label=\"Previous\" type=\"button\">\r\n ‹\r\n </button>\r\n <div class={`${BLOCK}-viewport`}>\r\n <div class={`${BLOCK}-track`} style={{ transform: `translateX(-${this.page * 100}%)` }}>\r\n {this.pagedProducts().map((group, i) => (\r\n <div class={`${BLOCK}-slide`} role=\"group\" aria-label={`Slide ${i+1} of ${this.pagedProducts().length}`}> \r\n {group.map(product => (\r\n <iv-card\r\n cardtype='products'\r\n calltoaction={this.calltoaction}\r\n buttontext={this.buttontext}\r\n addtocarttext={this.addtocarttext}\r\n data={product}\r\n classmodifier={`${BLOCK}-card`} />\r\n ))}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n <button class={`${BLOCK}-nav ${BLOCK}-nav-next`} onClick={this.next} disabled={this.page===this.pagedProducts().length-1} aria-label=\"Next\" type=\"button\">\r\n ›\r\n </button>\r\n <div class={`${BLOCK}-status`} aria-live=\"polite\">{this.pagedProducts().length > 1 ? `Slide ${this.page+1} of ${this.pagedProducts().length}` : ''}</div>\r\n {this.staleData && (\r\n <div class={`${BLOCK}-stale-indicator`} aria-live=\"polite\">Refreshing…</div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n};"]}
@@ -401,7 +401,7 @@ export class IvNewsletter {
401
401
  "references": {
402
402
  "NewsletterSuccessDetail": {
403
403
  "location": "local",
404
- "path": "C:/Users/bbuxt/OneDrive/Documents/Development/Freelance/Component Library/The-Foxy-Library/src/components/iv-newsletter/iv-newsletter.tsx",
404
+ "path": "C:/Users/bbuxt/OneDrive/Documents/Development/Freelance/The-Foxy-Library/src/components/iv-newsletter/iv-newsletter.tsx",
405
405
  "id": "src/components/iv-newsletter/iv-newsletter.tsx::NewsletterSuccessDetail"
406
406
  }
407
407
  }
@@ -422,7 +422,7 @@ export class IvNewsletter {
422
422
  "references": {
423
423
  "NewsletterFailDetail": {
424
424
  "location": "local",
425
- "path": "C:/Users/bbuxt/OneDrive/Documents/Development/Freelance/Component Library/The-Foxy-Library/src/components/iv-newsletter/iv-newsletter.tsx",
425
+ "path": "C:/Users/bbuxt/OneDrive/Documents/Development/Freelance/The-Foxy-Library/src/components/iv-newsletter/iv-newsletter.tsx",
426
426
  "id": "src/components/iv-newsletter/iv-newsletter.tsx::NewsletterFailDetail"
427
427
  }
428
428
  }
@@ -1,5 +1,7 @@
1
1
  .iv-pill {
2
2
  background: var(--iv-pill-bgcolor, transparent);
3
+ width: fit-content;
4
+ display: inline-block;
3
5
  }
4
6
  .iv-pill.bordered {
5
7
  border-color: var(--iv-pill-bordercolor, black);
@@ -8,11 +8,12 @@ export class IvPill {
8
8
  externalspacing = 'none';
9
9
  roundedcorners = 'medium';
10
10
  render() {
11
- return (h("div", { key: '0315732a272ed0d12a32e42026b5e9c378c209a9', class: BLOCK + this.bordered && ' bordered'
11
+ return (h("div", { key: '0babc05c3604fd666838d6bea498781d569a4f6f', class: BLOCK
12
+ + (this.bordered ? ' bordered' : '')
12
13
  + ` internal-${this.internalspacing}`
13
14
  + ` external-${this.externalspacing}`
14
- + ` corners-${this.roundedcorners}` }, h("p", { key: '4de900ef1b2640a0be029491b263c0e1aa3347f5', class: `${BLOCK}-content` }, this.label &&
15
- h("span", { key: 'd63db09e06be920d963f95400713c1ad9cb96032', class: `${BLOCK}-label` }, this.label), this.content)));
15
+ + ` corners-${this.roundedcorners}` }, h("p", { key: '51816bcac1a1f30311b93eb0eddc5d7f6f5d6952', class: `${BLOCK}-content` }, this.label &&
16
+ h("span", { key: 'ef3aa3d8a44e23e469560501d71fc4b1409796f5', class: `${BLOCK}-label` }, this.label), this.content)));
16
17
  }
17
18
  ;
18
19
  static get is() { return "iv-pill"; }
@@ -1 +1 @@
1
- {"version":3,"file":"iv-pill.js","sourceRoot":"","sources":["../../../src/components/iv-pill/iv-pill.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,KAAK,GAAG,SAAS,CAAC;AAQxB,MAAM,OAAO,MAAM;IAET,KAAK,CAAU;IACf,OAAO,CAAS;IAChB,QAAQ,GAAY,IAAI,CAAC;IACzB,eAAe,GAAiC,QAAQ,CAAC;IACzD,eAAe,GAA0C,MAAM,CAAC;IAChE,cAAc,GAA0C,QAAQ,CAAC;IAEzE,MAAM;QAEJ,OAAO,CACL,4DAAK,KAAK,EACR,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,WAAW;kBAClC,aAAa,IAAI,CAAC,eAAe,EAAE;kBACnC,aAAa,IAAI,CAAC,eAAe,EAAE;kBACnC,YAAY,IAAI,CAAC,cAAc,EAAE;YAEnC,0DAAG,KAAK,EAAE,GAAG,KAAK,UAAU;gBACzB,IAAI,CAAC,KAAK;oBACT,6DAAM,KAAK,EAAE,GAAG,KAAK,QAAQ,IAAG,IAAI,CAAC,KAAK,CAAQ;gBAEnD,IAAI,CAAC,OAAO,CACX,CACA,CACP,CAAC;IAEJ,CAAC;IAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAEH;AAAA,CAAC","sourcesContent":["import { Component, h, Prop } from '@stencil/core';\n\nconst BLOCK = 'iv-pill';\n\n@Component({\n tag: 'iv-pill',\n styleUrl: 'iv-pill.scss',\n shadow: false\n})\n\nexport class IvPill {\n\n @Prop() label?: string;\n @Prop() content: string;\n @Prop() bordered: boolean = true;\n @Prop() internalspacing: 'small' | 'medium' | 'large' = 'medium';\n @Prop() externalspacing: 'none' | 'small' | 'medium' | 'large' = 'none';\n @Prop() roundedcorners: 'none' | 'small' | 'medium' | 'large' = 'medium';\n\n render() {\n\n return (\n <div class={\n BLOCK + this.bordered && ' bordered'\n + ` internal-${this.internalspacing}`\n + ` external-${this.externalspacing}`\n + ` corners-${this.roundedcorners}`\n }>\n <p class={`${BLOCK}-content`}>\n {this.label && \n <span class={`${BLOCK}-label`}>{this.label}</span>\n }\n {this.content}\n </p>\n </div>\n );\n\n };\n\n};"]}
1
+ {"version":3,"file":"iv-pill.js","sourceRoot":"","sources":["../../../src/components/iv-pill/iv-pill.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,KAAK,GAAG,SAAS,CAAC;AAQxB,MAAM,OAAO,MAAM;IAET,KAAK,CAAU;IACf,OAAO,CAAS;IAChB,QAAQ,GAAY,IAAI,CAAC;IACzB,eAAe,GAAiC,QAAQ,CAAC;IACzD,eAAe,GAA0C,MAAM,CAAC;IAChE,cAAc,GAA0C,QAAQ,CAAC;IAEzE,MAAM;QAEJ,OAAO,CACL,4DAAK,KAAK,EACR,KAAK;kBACH,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;kBAClC,aAAa,IAAI,CAAC,eAAe,EAAE;kBACnC,aAAa,IAAI,CAAC,eAAe,EAAE;kBACnC,YAAY,IAAI,CAAC,cAAc,EAAE;YAEnC,0DAAG,KAAK,EAAE,GAAG,KAAK,UAAU;gBACzB,IAAI,CAAC,KAAK;oBACT,6DAAM,KAAK,EAAE,GAAG,KAAK,QAAQ,IAAG,IAAI,CAAC,KAAK,CAAQ;gBAEnD,IAAI,CAAC,OAAO,CACX,CACA,CACP,CAAC;IAEJ,CAAC;IAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAEH;AAAA,CAAC","sourcesContent":["import { Component, h, Prop } from '@stencil/core';\n\nconst BLOCK = 'iv-pill';\n\n@Component({\n tag: 'iv-pill',\n styleUrl: 'iv-pill.scss',\n shadow: false\n})\n\nexport class IvPill {\n\n @Prop() label?: string;\n @Prop() content: string;\n @Prop() bordered: boolean = true;\n @Prop() internalspacing: 'small' | 'medium' | 'large' = 'medium';\n @Prop() externalspacing: 'none' | 'small' | 'medium' | 'large' = 'none';\n @Prop() roundedcorners: 'none' | 'small' | 'medium' | 'large' = 'medium';\n\n render() {\n\n return (\n <div class={\n BLOCK \n + (this.bordered ? ' bordered' : '')\n + ` internal-${this.internalspacing}`\n + ` external-${this.externalspacing}`\n + ` corners-${this.roundedcorners}`\n }>\n <p class={`${BLOCK}-content`}>\n {this.label && \n <span class={`${BLOCK}-label`}>{this.label}</span>\n }\n {this.content}\n </p>\n </div>\n );\n\n };\n\n};"]}
@@ -1 +1 @@
1
- {"file":"index.js","mappings":";;;AACO,MAAM,aAAa,GAAGA,IAAe;;SCD5B,MAAM,CAAC,KAAc,EAAE,MAAe,EAAE,IAAa,EAAA;AACnE,IAAA,OAAO,CAAC,KAAK,IAAI,EAAE,KAAK,MAAM,GAAG,CAAI,CAAA,EAAA,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,GAAG,CAAI,CAAA,EAAA,IAAI,EAAE,GAAG,EAAE,CAAC;AAChF;;;;;;","names":["appGlobalScript"],"sources":["@stencil/core/internal/app-globals","src/utils/utils.ts"],"sourcesContent":["import appGlobalScript from 'C:/Users/bbuxt/OneDrive/Documents/Development/Freelance/Component Library/The-Foxy-Library/src/global/app.ts';\nexport const globalScripts = appGlobalScript;\nexport const globalStyles = \"\";\n","export function format(first?: string, middle?: string, last?: string): string {\r\n return (first || '') + (middle ? ` ${middle}` : '') + (last ? ` ${last}` : '');\r\n};"],"version":3}
1
+ {"file":"index.js","mappings":";;;AACO,MAAM,aAAa,GAAGA,IAAe;;SCD5B,MAAM,CAAC,KAAc,EAAE,MAAe,EAAE,IAAa,EAAA;AACnE,IAAA,OAAO,CAAC,KAAK,IAAI,EAAE,KAAK,MAAM,GAAG,CAAI,CAAA,EAAA,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,GAAG,CAAI,CAAA,EAAA,IAAI,EAAE,GAAG,EAAE,CAAC;AAChF;;;;;;","names":["appGlobalScript"],"sources":["@stencil/core/internal/app-globals","src/utils/utils.ts"],"sourcesContent":["import appGlobalScript from 'C:/Users/bbuxt/OneDrive/Documents/Development/Freelance/The-Foxy-Library/src/global/app.ts';\nexport const globalScripts = appGlobalScript;\nexport const globalStyles = \"\";\n","export function format(first?: string, middle?: string, last?: string): string {\r\n return (first || '') + (middle ? ` ${middle}` : '') + (last ? ` ${last}` : '');\r\n};"],"version":3}
@@ -158,7 +158,7 @@ const IvDynamicProductsCarousel$1 = /*@__PURE__*/ proxyCustomElement(class IvDyn
158
158
  emptystring = 'No products found';
159
159
  cachettl;
160
160
  stale = true;
161
- excluse;
161
+ exclude;
162
162
  products = [];
163
163
  errorMsg;
164
164
  staleData = false;
@@ -191,12 +191,12 @@ const IvDynamicProductsCarousel$1 = /*@__PURE__*/ proxyCustomElement(class IvDyn
191
191
  }
192
192
  ;
193
193
  filterAndSliceProducts(data) {
194
- if (!this.excluse)
194
+ if (!this.exclude)
195
195
  return data.slice(0, this.limit);
196
196
  if (!this.requestedfields || !this.requestedfields.includes('productType')) {
197
197
  this.requestedfields = this.ensureProductTypeField(this.requestedfields);
198
198
  }
199
- const filtered = data.filter(p => p.productType !== this.excluse);
199
+ const filtered = data.filter(p => p.productType !== this.exclude);
200
200
  return filtered.slice(0, this.limit);
201
201
  }
202
202
  ;
@@ -276,7 +276,7 @@ const IvDynamicProductsCarousel$1 = /*@__PURE__*/ proxyCustomElement(class IvDyn
276
276
  "emptystring": [1],
277
277
  "cachettl": [2],
278
278
  "stale": [4],
279
- "excluse": [1],
279
+ "exclude": [1],
280
280
  "products": [32],
281
281
  "errorMsg": [32],
282
282
  "staleData": [32],