@dropins/storefront-pdp 0.2.3-alpha1 → 0.2.3-alpha2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import{c as x}from"./initialize.js";import{FetchGraphQL as Q}from"@dropins/tools/fetch-graphql.js";const{setEndpoint:W,setFetchGraphQlHeader:Z,removeFetchGraphQlHeader:R,setFetchGraphQlHeaders:tt,fetchGraphQl:A,getConfig:et}=new Q().getMethods();function h(e){var o,u,n;const r=e?{name:e.name,sku:e.sku,addToCartAllowed:e.addToCartAllowed,inStock:e.inStock,shortDescription:e.shortDescription,metaDescription:e.metaDescription,metaKeyword:e.metaKeyword,metaTitle:e.metaTitle,description:e.description,images:K(e),prices:j(e),attributes:M(e),options:N(e),optionUIDs:e.optionUIDs,url:e.url,urlKey:e.urlKey,externalId:e.externalId,externalParentId:e.externalParentId}:null,t=(n=(u=(o=x.getConfig())==null?void 0:o.models)==null?void 0:u.ProductDetails)==null?void 0:n.transform;return t&&r?t(r):r}function K(e){var r;return(r=e.images)==null?void 0:r.map(t=>(t.url=t.url.replace(/^https?:/,""),t))}function M(e){var r,t;return(t=(r=e.attributes)==null?void 0:r.filter(({roles:o})=>(o==null?void 0:o.indexOf("visible_in_pdp"))!==-1))==null?void 0:t.map(({label:o,value:u,name:n})=>({id:n,label:o,value:u.toString().split(",").join(", ")}))}function N(e){const{options:r,optionUIDs:t}=e;return r==null?void 0:r.map(({id:o,title:u,required:n,multi:c,values:i})=>{var d,f;const l=(d=i==null?void 0:i[0])==null?void 0:d.__typename;let a=i==null?void 0:i[0].type;return((f=i==null?void 0:i[0])==null?void 0:f.__typename)==="ProductViewOptionValueProduct"?a=void 0:a?a=a.replace("COLOR_HEX","color").replace("TEXT","text").replace("IMAGE","image"):a="dropdown",{id:o,type:a,typename:l,label:u,required:n,multiple:c,items:i==null?void 0:i.map(({id:m,title:g,inStock:p,value:P})=>({id:m,label:g,inStock:p,value:(a==null?void 0:a.toLowerCase())==="dropdown"?m:P==null?void 0:P.replace(/^https?:/,""),selected:(t==null?void 0:t.indexOf(m))>-1}))}})}function j(e){var d,f,m,g,p;const{price:r,priceRange:t,__typename:o}=e;function u(){var D;const P=r.regular.amount.value,y=((D=r.final)==null?void 0:D.amount.value)??r.regular.amount.value,w=r.regular.amount.currency==="NONE"?"USD":r==null?void 0:r.regular.amount.currency;return[P,y,y,w]}function n(){var b,k,_,E,T,C,O,S,F,$,V,I;const P=(b=t==null?void 0:t.minimum)==null?void 0:b.final.amount.value,y=(k=t==null?void 0:t.maximum)==null?void 0:k.final.amount.value;let w;((E=(_=t==null?void 0:t.minimum)==null?void 0:_.regular)==null?void 0:E.amount.value)===((C=(T=t==null?void 0:t.maximum)==null?void 0:T.regular)==null?void 0:C.amount.value)&&(w=(S=(O=t==null?void 0:t.minimum)==null?void 0:O.regular)==null?void 0:S.amount.value);const D=(($=(F=t==null?void 0:t.minimum)==null?void 0:F.final)==null?void 0:$.amount.currency)==="NONE"?"USD":(I=(V=t==null?void 0:t.minimum)==null?void 0:V.final)==null?void 0:I.amount.currency;return[w,P,y,D]}const[c,i,l,a]=o==="SimpleProductView"?u():n(),s=o==="SimpleProductView"?(d=r==null?void 0:r.roles)==null?void 0:d.includes("visible"):((m=(f=t==null?void 0:t.maximum)==null?void 0:f.roles)==null?void 0:m.includes("visible"))&&((p=(g=t==null?void 0:t.minimum)==null?void 0:g.roles)==null?void 0:p.includes("visible"));return l&&i===l?{regular:{amount:c,currency:a,variant:c&&i!==c?"strikethrough":"default"},final:{amount:l,currency:a,variant:"default"},visible:s}:{final:{minimumAmount:i,maximumAmount:l,currency:a},visible:s}}const U=`
1
+ import{c as h}from"./initialize.js";import{FetchGraphQL as Q}from"@dropins/tools/fetch-graphql.js";const{setEndpoint:W,setFetchGraphQlHeader:Z,removeFetchGraphQlHeader:R,setFetchGraphQlHeaders:tt,fetchGraphQl:A,getConfig:et}=new Q().getMethods();function D(e){var o,u,n;const r=e?{name:e.name,sku:e.sku,addToCartAllowed:e.addToCartAllowed,inStock:e.inStock,shortDescription:e.shortDescription,metaDescription:e.metaDescription,metaKeyword:e.metaKeyword,metaTitle:e.metaTitle,description:e.description,images:K(e),prices:j(e),attributes:M(e),options:N(e),optionUIDs:e.optionUIDs,url:e.url,urlKey:e.urlKey,externalId:e.externalId,externalParentId:e.externalParentId,variantSku:e.variantSku}:null,t=(n=(u=(o=h.getConfig())==null?void 0:o.models)==null?void 0:u.ProductDetails)==null?void 0:n.transform;return t&&r?t(r):r}function K(e){var r;return(r=e.images)==null?void 0:r.map(t=>(t.url=t.url.replace(/^https?:/,""),t))}function M(e){var r,t;return(t=(r=e.attributes)==null?void 0:r.filter(({roles:o})=>(o==null?void 0:o.indexOf("visible_in_pdp"))!==-1))==null?void 0:t.map(({label:o,value:u,name:n})=>({id:n,label:o,value:u.toString().split(",").join(", ")}))}function N(e){const{options:r,optionUIDs:t}=e;return r==null?void 0:r.map(({id:o,title:u,required:n,multi:c,values:i})=>{var d,f;const l=(d=i==null?void 0:i[0])==null?void 0:d.__typename;let a=i==null?void 0:i[0].type;return((f=i==null?void 0:i[0])==null?void 0:f.__typename)==="ProductViewOptionValueProduct"?a=void 0:a?a=a.replace("COLOR_HEX","color").replace("TEXT","text").replace("IMAGE","image"):a="dropdown",{id:o,type:a,typename:l,label:u,required:n,multiple:c,items:i==null?void 0:i.map(({id:m,title:g,inStock:p,value:P})=>({id:m,label:g,inStock:p,value:(a==null?void 0:a.toLowerCase())==="dropdown"?m:P==null?void 0:P.replace(/^https?:/,""),selected:(t==null?void 0:t.indexOf(m))>-1}))}})}function j(e){var d,f,m,g,p;const{price:r,priceRange:t,__typename:o}=e;function u(){var k;const P=r.regular.amount.value,y=((k=r.final)==null?void 0:k.amount.value)??r.regular.amount.value,w=r.regular.amount.currency==="NONE"?"USD":r==null?void 0:r.regular.amount.currency;return[P,y,y,w]}function n(){var x,_,b,S,E,T,C,O,v,F,V,$;const P=(x=t==null?void 0:t.minimum)==null?void 0:x.final.amount.value,y=(_=t==null?void 0:t.maximum)==null?void 0:_.final.amount.value;let w;((S=(b=t==null?void 0:t.minimum)==null?void 0:b.regular)==null?void 0:S.amount.value)===((T=(E=t==null?void 0:t.maximum)==null?void 0:E.regular)==null?void 0:T.amount.value)&&(w=(O=(C=t==null?void 0:t.minimum)==null?void 0:C.regular)==null?void 0:O.amount.value);const k=((F=(v=t==null?void 0:t.minimum)==null?void 0:v.final)==null?void 0:F.amount.currency)==="NONE"?"USD":($=(V=t==null?void 0:t.minimum)==null?void 0:V.final)==null?void 0:$.amount.currency;return[w,P,y,k]}const[c,i,l,a]=o==="SimpleProductView"?u():n(),s=o==="SimpleProductView"?(d=r==null?void 0:r.roles)==null?void 0:d.includes("visible"):((m=(f=t==null?void 0:t.maximum)==null?void 0:f.roles)==null?void 0:m.includes("visible"))&&((p=(g=t==null?void 0:t.minimum)==null?void 0:g.roles)==null?void 0:p.includes("visible"));return l&&i===l?{regular:{amount:c,currency:a,variant:c&&i!==c?"strikethrough":"default"},final:{amount:l,currency:a,variant:"default"},visible:s}:{final:{minimumAmount:i,maximumAmount:l,currency:a},visible:s}}const U=`
2
2
  fragment ProductOptionFragment on ProductViewOption {
3
3
  id
4
4
  title
@@ -146,7 +146,7 @@ query GET_PRODUCT_DATA($skus: [String]) {
146
146
  }
147
147
 
148
148
  ${G}
149
- `,rt=async e=>{var u,n,c,i,l;const r=(i=(c=(n=(u=x)==null?void 0:u.getConfig())==null?void 0:n.models)==null?void 0:c.ProductDetails)==null?void 0:i.initialData;if(r)return h(r);const{data:t}=await A(q,{method:"GET",variables:{skus:[e]}}),o=(l=t==null?void 0:t.products)==null?void 0:l[0];return h(o)},H=`
149
+ `,rt=async e=>{var u,n,c,i,l;const r=(i=(c=(n=(u=h)==null?void 0:u.getConfig())==null?void 0:n.models)==null?void 0:c.ProductDetails)==null?void 0:i.initialData;if(r)return D(r);const{data:t}=await A(q,{method:"GET",variables:{skus:[e]}}),o=(l=t==null?void 0:t.products)==null?void 0:l[0];return D(o)},H=`
150
150
  query REFINE_PRODUCT_QUERY(
151
151
  $optionIds: [String!]!
152
152
  $sku: String!
@@ -168,7 +168,7 @@ query REFINE_PRODUCT_QUERY(
168
168
  }
169
169
 
170
170
  ${G}
171
- `;async function v(e,r){const t=L(r),o=B(t,e),u=H.replace("# %extendedPlaceholder%",o),{data:n}=await A(u,{method:"GET",variables:{optionIds:r,sku:e}});return n}const nt=async(e,r,t)=>{var d,f,m,g;const o=await v(e,r);if(!o)return null;let{products:u,refineProduct:n,...c}=o;const i=u==null?void 0:u[0],l=X(Object.values(c),i.options,t);if(t!=null&&t.length&&n===null){r=Y(l,r,t);const p=await v(e,r);n=p==null?void 0:p.refineProduct}const a=h({...n||i,sku:i.sku,name:i.name,externalParentId:i==null?void 0:i.externalId,options:l,optionUIDs:r}),s=(g=(m=(f=(d=x)==null?void 0:d.getConfig())==null?void 0:f.models)==null?void 0:m.ProductDetails)==null?void 0:g.fallbackData;return s?s(i,a):a};function L(e){if(e.length<2)return[e];const r=[];return e.forEach(t=>{const o=[];e.forEach(u=>{t!==u&&o.push(u)}),r.push(o)}),r}function B(e,r){return e.map((t,o)=>`
171
+ `;async function I(e,r){const t=L(r),o=B(t,e),u=H.replace("# %extendedPlaceholder%",o),{data:n}=await A(u,{method:"GET",variables:{optionIds:r,sku:e}});return n}const nt=async(e,r,t)=>{var d,f,m,g;const o=await I(e,r);if(!o)return null;let{products:u,refineProduct:n,...c}=o;const i=u==null?void 0:u[0],l=X(Object.values(c),i.options,t);if(t!=null&&t.length&&n===null){r=Y(l,r,t);const p=await I(e,r);n=p==null?void 0:p.refineProduct}const a=D({...n||i,sku:i.sku,name:i.name,externalParentId:i==null?void 0:i.externalId,options:l,optionUIDs:r,variantSku:(n==null?void 0:n.__typename)==="SimpleProductView"?n==null?void 0:n.sku:void 0}),s=(g=(m=(f=(d=h)==null?void 0:d.getConfig())==null?void 0:f.models)==null?void 0:m.ProductDetails)==null?void 0:g.fallbackData;return s?s(i,a):a};function L(e){if(e.length<2)return[e];const r=[];return e.forEach(t=>{const o=[];e.forEach(u=>{t!==u&&o.push(u)}),r.push(o)}),r}function B(e,r){return e.map((t,o)=>`
172
172
  ProductOption${o}: refineProduct(
173
173
  optionIds: [
174
174
  ${t.map(u=>`"${u}"`).join(", ")}
@@ -1 +1 @@
1
- {"version":3,"file":"getRefinedProduct.js","sources":["../../src/api/fetch-graphql/fetch-graphql.ts","../../src/data/transforms/product-transform.ts","../../src/api/graphql/ProductOptionFragment.graphql.ts","../../src/api/graphql/ProductFragment.graphql.ts","../../src/api/getProductData/graphql/getProductData.graphql.ts","../../src/api/getProductData/getProductData.ts","../../src/api/getRefinedProduct/graphql/RefineProductQuery.graphql.ts","../../src/api/getRefinedProduct/getRefinedProduct.ts"],"sourcesContent":["import { FetchGraphQL } from '@adobe/fetch-graphql';\n\nexport const {\n setEndpoint,\n setFetchGraphQlHeader,\n removeFetchGraphQlHeader,\n setFetchGraphQlHeaders,\n fetchGraphQl,\n getConfig,\n} = new FetchGraphQL().getMethods();\n","import { config } from '@/pdp/api';\nimport { ProductModel } from '@/pdp/data/models';\n\nexport function transformProductData(data: any): ProductModel | null {\n const productData = data\n ? ({\n name: data.name,\n sku: data.sku,\n addToCartAllowed: data.addToCartAllowed,\n inStock: data.inStock,\n shortDescription: data.shortDescription,\n metaDescription: data.metaDescription,\n metaKeyword: data.metaKeyword,\n metaTitle: data.metaTitle,\n description: data.description,\n images: transformImages(data),\n prices: transformPrices(data),\n attributes: transformAttributes(data),\n options: transformOptions(data),\n optionUIDs: data.optionUIDs,\n url: data.url,\n urlKey: data.urlKey,\n externalId: data.externalId,\n externalParentId: data.externalParentId,\n } as ProductModel)\n : null;\n\n const transform = config.getConfig()?.models?.ProductDetails?.transform;\n if (transform && productData) {\n return transform(productData);\n }\n\n return productData;\n}\n\nfunction transformImages(data: any) {\n return data.images?.map((image: any) => {\n // Remove protocol from image URL\n image.url = image.url.replace(/^https?:/, '');\n\n return image;\n });\n}\n\nfunction transformAttributes(data: any) {\n return (\n data.attributes\n // only show attributes that are visible in PDP\n ?.filter(({ roles }: any) => roles?.indexOf('visible_in_pdp') !== -1)\n // transform attribute values\n ?.map(({ label, value, name }: any) => {\n return { id: name, label, value: value.toString().split(',').join(', ') };\n })\n );\n}\n\nfunction transformOptions(data: any) {\n const { options, optionUIDs } = data;\n\n return options?.map(({ id, title, required, multi, values }: any) => {\n const typename = values?.[0]?.__typename;\n let type: any = values?.[0].type;\n\n const isBundle = values?.[0]?.__typename === 'ProductViewOptionValueProduct';\n\n if (isBundle) {\n type = undefined;\n } else {\n if (type) {\n type = type\n .replace('COLOR_HEX', 'color')\n .replace('TEXT', 'text')\n .replace('IMAGE', 'image');\n } else {\n type = 'dropdown';\n }\n }\n\n return {\n id,\n type,\n typename,\n label: title,\n required,\n multiple: multi,\n items: values?.map(({ id, title, inStock, value }: any) => {\n return {\n id,\n label: title,\n inStock,\n value: type?.toLowerCase() === 'dropdown' ? id : value?.replace(/^https?:/, ''),\n selected: optionUIDs?.indexOf(id) > -1,\n };\n }),\n };\n });\n}\n\nfunction transformPrices(data: any) {\n const { price, priceRange, __typename: type } = data;\n\n function getSimpleProductPrices() {\n const regularPrice = price.regular.amount.value;\n const finalPrice = price.final?.amount.value ?? price.regular.amount.value;\n\n const currency = price.regular.amount.currency === 'NONE' //temporary fix if there is no currency\n ? 'USD'\n : price?.regular.amount.currency\n\n return [regularPrice, finalPrice, finalPrice, currency];\n }\n\n function getComplexProductPrices() {\n const finalMinimumPrice = priceRange?.minimum?.final.amount.value;\n const finalMaximumPrice = priceRange?.maximum?.final.amount.value;\n let regularPrice;\n\n if (priceRange?.minimum?.regular?.amount.value === priceRange?.maximum?.regular?.amount.value) {\n regularPrice = priceRange?.minimum?.regular?.amount.value;\n }\n\n const currency = priceRange?.minimum?.final?.amount.currency === 'NONE'\n ? 'USD'\n : priceRange?.minimum?.final?.amount.currency;\n\n return [regularPrice, finalMinimumPrice, finalMaximumPrice, currency];\n }\n\n const [regularPrice, finalMinimumPrice, finalMaximumPrice, currency] = type === 'SimpleProductView'\n ? getSimpleProductPrices() : getComplexProductPrices();\n\n const visible =\n type === 'SimpleProductView'\n ? price?.roles?.includes('visible')\n : priceRange?.maximum?.roles?.includes('visible') &&\n priceRange?.minimum?.roles?.includes('visible');\n\n if (finalMaximumPrice && finalMinimumPrice === finalMaximumPrice) {\n const hasDiscount = regularPrice && finalMinimumPrice !== regularPrice;\n\n return {\n regular: {\n amount: regularPrice,\n currency,\n variant: hasDiscount ? 'strikethrough' : 'default',\n },\n final: {\n amount: finalMaximumPrice,\n currency,\n variant: 'default',\n },\n visible\n }\n }\n\n return {\n final: {\n minimumAmount: finalMinimumPrice,\n maximumAmount: finalMaximumPrice,\n currency\n },\n visible\n }\n}\n","export const ProductOptionFragment = `\nfragment ProductOptionFragment on ProductViewOption {\n id\n title\n required\n multi\n values {\n id\n title\n inStock\n __typename\n ... on ProductViewOptionValueProduct {\n title\n quantity\n isDefault\n product {\n sku\n shortDescription\n metaDescription\n metaKeyword\n metaTitle\n name\n price {\n final {\n amount {\n value\n currency\n }\n }\n regular {\n amount {\n value\n currency\n }\n }\n roles\n }\n }\n }\n ... on ProductViewOptionValueSwatch {\n id\n title\n type\n value\n inStock\n }\n }\n }\n`;\n","import { ProductOptionFragment } from '@/pdp/api/graphql/ProductOptionFragment.graphql';\n\nexport const ProductFragment = `\nfragment ProductFragment on ProductView {\n __typename\n id\n sku\n name\n shortDescription\n metaDescription\n metaKeyword\n metaTitle\n description\n inStock\n addToCartAllowed\n url\n urlKey\n externalId\n\n images(roles: []) {\n url\n label\n roles\n }\n\n attributes(roles: []) {\n name\n label\n value\n roles\n }\n\n... on SimpleProductView {\n price {\n roles\n\n regular {\n amount {\n value\n currency\n }\n }\n\n final {\n amount {\n value\n currency\n }\n }\n }\n}\n\n\n ... on ComplexProductView {\n options {\n ...ProductOptionFragment\n }\n\n priceRange {\n maximum {\n final {\n amount {\n value\n currency\n }\n }\n regular {\n amount {\n value\n currency\n }\n }\n roles\n }\n minimum {\n final {\n amount {\n value\n currency\n }\n }\n regular {\n amount {\n value\n currency\n }\n }\n roles\n }\n }\n }\n}\n\n${ProductOptionFragment}\n`;\n","import { ProductFragment } from '@/pdp/api/graphql/ProductFragment.graphql';\n\nexport const GET_PRODUCT_DATA = `\nquery GET_PRODUCT_DATA($skus: [String]) {\n products(skus: $skus) {\n ...ProductFragment\n }\n}\n\n${ProductFragment}\n`;\n","import { config, fetchGraphQl } from '@/pdp/api';\nimport { ProductModel } from '@/pdp/data/models';\nimport { transformProductData } from '@/pdp/data/transforms';\nimport { GET_PRODUCT_DATA } from './graphql/getProductData.graphql';\n\nexport const getProductData = async (\n sku: string\n): Promise<ProductModel | null> => {\n\n const initialData = config?.getConfig()?.models?.ProductDetails?.initialData;\n\n if (initialData) {\n return transformProductData(initialData);\n }\n\n const { data } = await fetchGraphQl(GET_PRODUCT_DATA, {\n method: 'GET',\n variables: { skus: [sku] },\n });\n\n const product = data?.products?.[0];\n\n return transformProductData(product);\n};\n","import { ProductFragment } from '@/pdp/api/graphql/ProductFragment.graphql';\n\nexport const REFINE_PRODUCT_QUERY = `\nquery REFINE_PRODUCT_QUERY(\n $optionIds: [String!]!\n $sku: String!\n) {\n # Refined Product\n refineProduct(\n optionIds: $optionIds \n sku: $sku\n ) {\n ...ProductFragment\n }\n\n # Parent Product\n products(skus: [$sku]) {\n ...ProductFragment\n }\n\n # %extendedPlaceholder%\n}\n\n${ProductFragment}\n`;\n","import { fetchGraphQl, config } from '@/pdp/api';\nimport { ProductModel } from '@/pdp/data/models';\nimport { transformProductData } from '@/pdp/data/transforms';\nimport { REFINE_PRODUCT_QUERY } from './graphql/RefineProductQuery.graphql';\n\nasync function getProductData(sku: string, optionUIDs: string[]): Promise<any> {\n const optionPairCombinations = getPairCombination(optionUIDs);\n const optionQueries = getProductOptionQuery(optionPairCombinations, sku);\n\n const mergedQueries = REFINE_PRODUCT_QUERY.replace(\n '# %extendedPlaceholder%',\n optionQueries\n );\n\n const { data } = await fetchGraphQl(mergedQueries, {\n method: 'GET',\n variables: { optionIds: optionUIDs, sku },\n });\n return data;\n}\n\nexport const getRefinedProduct = async (\n sku: string,\n optionUIDs: string[],\n anchorOptions?: string[]\n): Promise<ProductModel | null> => {\n\n const data = await getProductData(sku, optionUIDs);\n\n if (!data) return null;\n let { products, refineProduct, ...refinedOptions } = data;\n\n const parent = products?.[0];\n\n const options = mergeRefinedOptions(\n Object.values(refinedOptions),\n parent.options, anchorOptions\n );\n\n // needed when anchor options exist\n if (anchorOptions?.length && refineProduct === null) {\n optionUIDs = updateSelections(options, optionUIDs, anchorOptions);\n const updatedRefinedData = await getProductData(sku, optionUIDs);\n refineProduct = updatedRefinedData?.refineProduct;\n }\n\n const refinedData = transformProductData({\n ...(refineProduct || parent),\n sku: parent.sku,\n name: parent.name,\n externalParentId: parent?.externalId,\n options,\n optionUIDs,\n });\n\n const fallback = config?.getConfig()?.models?.ProductDetails?.fallbackData;\n\n if (fallback) {\n return fallback(parent, refinedData!);\n }\n\n return refinedData;\n};\n\nfunction getPairCombination(arr: string[]): string[][] {\n if (arr.length < 2) {\n return [arr];\n }\n\n const result: string[][] = [];\n\n arr.forEach((item) => {\n const temp: string[] = [];\n\n arr.forEach((item2) => {\n if (item !== item2) {\n temp.push(item2);\n }\n });\n\n result.push(temp);\n });\n\n return result;\n}\n\nfunction getProductOptionQuery(optionUIDs: string[][], sku: string): string {\n return optionUIDs\n .map((ids: string[], i: number) => {\n return `\n ProductOption${i}: refineProduct(\n optionIds: [\n ${ids.map((id) => `\"${id}\"`).join(', ')}\n ]\n sku: \"${sku}\"\n ) {\n ... on ComplexProductView {\n options {\n ...ProductOptionFragment\n }\n }\n }\n `;\n })\n .join('');\n}\n\nfunction mergeRefinedOptions(options: {}, parent: [], anchorOptions?: string[]) {\n // flat _refined[].options[] to _refinedOptions[]\n const refinedOptions: any = Object.values(options)\n .filter((x) => !!x)\n .reduce((acc: any, curr: any) => {\n if (!curr.options) return [...acc];\n\n return [...acc, ...curr.options];\n }, []);\n\n // Create a map to store items by their id from original\n const map = new Map(parent.map((item: any) => [item.id, item]));\n\n // Iterate through refinedOptions and merge items\n refinedOptions.forEach((current: any) => {\n\n // anchor options should display all values, so no merge is performed\n if (anchorOptions?.includes(current.id)) {\n return;\n }\n\n map.set(current.id, current);\n });\n\n return [...map.values()];\n}\n\nfunction updateSelections(options: any[], optionsUIDs: string[], anchorOptions: string[]): string[] {\n const updatedOptionsUIDs: string[] = [];\n\n let optionValue: string;\n options.forEach((option: any) => {\n if (anchorOptions.includes(option.id)) {\n optionValue = option.values?.find((value: any) => optionsUIDs.includes(value?.id))?.id || option.values[0]?.id;\n } else {\n optionValue = option.values[0]?.id; // TODO check if we should use default value instead\n }\n updatedOptionsUIDs.push(optionValue);\n });\n return updatedOptionsUIDs;\n}\n"],"names":["setEndpoint","setFetchGraphQlHeader","removeFetchGraphQlHeader","setFetchGraphQlHeaders","fetchGraphQl","getConfig","FetchGraphQL","getMethods","transformProductData","data","productData","name","sku","addToCartAllowed","inStock","shortDescription","metaDescription","metaKeyword","metaTitle","description","images","transformImages","prices","transformPrices","attributes","transformAttributes","options","transformOptions","optionUIDs","url","urlKey","externalId","externalParentId","transform","config","models","ProductDetails","map","image","replace","filter","roles","indexOf","label","value","id","toString","split","join","title","required","multi","values","typename","__typename","type","undefined","multiple","items","toLowerCase","selected","price","priceRange","getSimpleProductPrices","regularPrice","regular","amount","finalPrice","final","currency","getComplexProductPrices","finalMinimumPrice","minimum","finalMaximumPrice","maximum","visible","includes","variant","minimumAmount","maximumAmount","ProductOptionFragment","ProductFragment","GET_PRODUCT_DATA","getProductData","initialData","method","variables","skus","product","products","REFINE_PRODUCT_QUERY","optionPairCombinations","getPairCombination","optionQueries","getProductOptionQuery","mergedQueries","optionIds","getRefinedProduct","anchorOptions","refineProduct","refinedOptions","parent","mergeRefinedOptions","Object","length","updateSelections","updatedRefinedData","refinedData","fallback","fallbackData","arr","result","forEach","item","temp","item2","push","ids","i","x","reduce","acc","curr","Map","current","set","optionsUIDs","updatedOptionsUIDs","optionValue","option","find"],"mappings":"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"}
1
+ {"version":3,"file":"getRefinedProduct.js","sources":["../../src/api/fetch-graphql/fetch-graphql.ts","../../src/data/transforms/product-transform.ts","../../src/api/graphql/ProductOptionFragment.graphql.ts","../../src/api/graphql/ProductFragment.graphql.ts","../../src/api/getProductData/graphql/getProductData.graphql.ts","../../src/api/getProductData/getProductData.ts","../../src/api/getRefinedProduct/graphql/RefineProductQuery.graphql.ts","../../src/api/getRefinedProduct/getRefinedProduct.ts"],"sourcesContent":["import { FetchGraphQL } from '@adobe/fetch-graphql';\n\nexport const {\n setEndpoint,\n setFetchGraphQlHeader,\n removeFetchGraphQlHeader,\n setFetchGraphQlHeaders,\n fetchGraphQl,\n getConfig,\n} = new FetchGraphQL().getMethods();\n","import { config } from '@/pdp/api';\nimport { ProductModel } from '@/pdp/data/models';\n\nexport function transformProductData(data: any): ProductModel | null {\n const productData = data\n ? ({\n name: data.name,\n sku: data.sku,\n addToCartAllowed: data.addToCartAllowed,\n inStock: data.inStock,\n shortDescription: data.shortDescription,\n metaDescription: data.metaDescription,\n metaKeyword: data.metaKeyword,\n metaTitle: data.metaTitle,\n description: data.description,\n images: transformImages(data),\n prices: transformPrices(data),\n attributes: transformAttributes(data),\n options: transformOptions(data),\n optionUIDs: data.optionUIDs,\n url: data.url,\n urlKey: data.urlKey,\n externalId: data.externalId,\n externalParentId: data.externalParentId,\n variantSku: data.variantSku,\n } as ProductModel)\n : null;\n\n const transform = config.getConfig()?.models?.ProductDetails?.transform;\n if (transform && productData) {\n return transform(productData);\n }\n\n return productData;\n}\n\nfunction transformImages(data: any) {\n return data.images?.map((image: any) => {\n // Remove protocol from image URL\n image.url = image.url.replace(/^https?:/, '');\n\n return image;\n });\n}\n\nfunction transformAttributes(data: any) {\n return (\n data.attributes\n // only show attributes that are visible in PDP\n ?.filter(({ roles }: any) => roles?.indexOf('visible_in_pdp') !== -1)\n // transform attribute values\n ?.map(({ label, value, name }: any) => {\n return { id: name, label, value: value.toString().split(',').join(', ') };\n })\n );\n}\n\nfunction transformOptions(data: any) {\n const { options, optionUIDs } = data;\n\n return options?.map(({ id, title, required, multi, values }: any) => {\n const typename = values?.[0]?.__typename;\n let type: any = values?.[0].type;\n\n const isBundle = values?.[0]?.__typename === 'ProductViewOptionValueProduct';\n\n if (isBundle) {\n type = undefined;\n } else {\n if (type) {\n type = type\n .replace('COLOR_HEX', 'color')\n .replace('TEXT', 'text')\n .replace('IMAGE', 'image');\n } else {\n type = 'dropdown';\n }\n }\n\n return {\n id,\n type,\n typename,\n label: title,\n required,\n multiple: multi,\n items: values?.map(({ id, title, inStock, value }: any) => {\n return {\n id,\n label: title,\n inStock,\n value: type?.toLowerCase() === 'dropdown' ? id : value?.replace(/^https?:/, ''),\n selected: optionUIDs?.indexOf(id) > -1,\n };\n }),\n };\n });\n}\n\nfunction transformPrices(data: any) {\n const { price, priceRange, __typename: type } = data;\n\n function getSimpleProductPrices() {\n const regularPrice = price.regular.amount.value;\n const finalPrice = price.final?.amount.value ?? price.regular.amount.value;\n\n const currency = price.regular.amount.currency === 'NONE' //temporary fix if there is no currency\n ? 'USD'\n : price?.regular.amount.currency\n\n return [regularPrice, finalPrice, finalPrice, currency];\n }\n\n function getComplexProductPrices() {\n const finalMinimumPrice = priceRange?.minimum?.final.amount.value;\n const finalMaximumPrice = priceRange?.maximum?.final.amount.value;\n let regularPrice;\n\n if (priceRange?.minimum?.regular?.amount.value === priceRange?.maximum?.regular?.amount.value) {\n regularPrice = priceRange?.minimum?.regular?.amount.value;\n }\n\n const currency = priceRange?.minimum?.final?.amount.currency === 'NONE'\n ? 'USD'\n : priceRange?.minimum?.final?.amount.currency;\n\n return [regularPrice, finalMinimumPrice, finalMaximumPrice, currency];\n }\n\n const [regularPrice, finalMinimumPrice, finalMaximumPrice, currency] = type === 'SimpleProductView'\n ? getSimpleProductPrices() : getComplexProductPrices();\n\n const visible =\n type === 'SimpleProductView'\n ? price?.roles?.includes('visible')\n : priceRange?.maximum?.roles?.includes('visible') &&\n priceRange?.minimum?.roles?.includes('visible');\n\n if (finalMaximumPrice && finalMinimumPrice === finalMaximumPrice) {\n const hasDiscount = regularPrice && finalMinimumPrice !== regularPrice;\n\n return {\n regular: {\n amount: regularPrice,\n currency,\n variant: hasDiscount ? 'strikethrough' : 'default',\n },\n final: {\n amount: finalMaximumPrice,\n currency,\n variant: 'default',\n },\n visible\n }\n }\n\n return {\n final: {\n minimumAmount: finalMinimumPrice,\n maximumAmount: finalMaximumPrice,\n currency\n },\n visible\n }\n}\n","export const ProductOptionFragment = `\nfragment ProductOptionFragment on ProductViewOption {\n id\n title\n required\n multi\n values {\n id\n title\n inStock\n __typename\n ... on ProductViewOptionValueProduct {\n title\n quantity\n isDefault\n product {\n sku\n shortDescription\n metaDescription\n metaKeyword\n metaTitle\n name\n price {\n final {\n amount {\n value\n currency\n }\n }\n regular {\n amount {\n value\n currency\n }\n }\n roles\n }\n }\n }\n ... on ProductViewOptionValueSwatch {\n id\n title\n type\n value\n inStock\n }\n }\n }\n`;\n","import { ProductOptionFragment } from '@/pdp/api/graphql/ProductOptionFragment.graphql';\n\nexport const ProductFragment = `\nfragment ProductFragment on ProductView {\n __typename\n id\n sku\n name\n shortDescription\n metaDescription\n metaKeyword\n metaTitle\n description\n inStock\n addToCartAllowed\n url\n urlKey\n externalId\n\n images(roles: []) {\n url\n label\n roles\n }\n\n attributes(roles: []) {\n name\n label\n value\n roles\n }\n\n... on SimpleProductView {\n price {\n roles\n\n regular {\n amount {\n value\n currency\n }\n }\n\n final {\n amount {\n value\n currency\n }\n }\n }\n}\n\n\n ... on ComplexProductView {\n options {\n ...ProductOptionFragment\n }\n\n priceRange {\n maximum {\n final {\n amount {\n value\n currency\n }\n }\n regular {\n amount {\n value\n currency\n }\n }\n roles\n }\n minimum {\n final {\n amount {\n value\n currency\n }\n }\n regular {\n amount {\n value\n currency\n }\n }\n roles\n }\n }\n }\n}\n\n${ProductOptionFragment}\n`;\n","import { ProductFragment } from '@/pdp/api/graphql/ProductFragment.graphql';\n\nexport const GET_PRODUCT_DATA = `\nquery GET_PRODUCT_DATA($skus: [String]) {\n products(skus: $skus) {\n ...ProductFragment\n }\n}\n\n${ProductFragment}\n`;\n","import { config, fetchGraphQl } from '@/pdp/api';\nimport { ProductModel } from '@/pdp/data/models';\nimport { transformProductData } from '@/pdp/data/transforms';\nimport { GET_PRODUCT_DATA } from './graphql/getProductData.graphql';\n\n\nexport const getProductData = async (\n sku: string\n): Promise<ProductModel | null> => {\n\n const initialData = config?.getConfig()?.models?.ProductDetails?.initialData;\n\n if (initialData) {\n return transformProductData(initialData);\n }\n\n const { data } = await fetchGraphQl(GET_PRODUCT_DATA, {\n method: 'GET',\n variables: { skus: [sku] },\n });\n\n const product = data?.products?.[0];\n\n return transformProductData(product);\n};\n","import { ProductFragment } from '@/pdp/api/graphql/ProductFragment.graphql';\n\nexport const REFINE_PRODUCT_QUERY = `\nquery REFINE_PRODUCT_QUERY(\n $optionIds: [String!]!\n $sku: String!\n) {\n # Refined Product\n refineProduct(\n optionIds: $optionIds \n sku: $sku\n ) {\n ...ProductFragment\n }\n\n # Parent Product\n products(skus: [$sku]) {\n ...ProductFragment\n }\n\n # %extendedPlaceholder%\n}\n\n${ProductFragment}\n`;\n","import { fetchGraphQl, config } from '@/pdp/api';\nimport { ProductModel } from '@/pdp/data/models';\nimport { transformProductData } from '@/pdp/data/transforms';\nimport { REFINE_PRODUCT_QUERY } from './graphql/RefineProductQuery.graphql';\n\nasync function getProductData(sku: string, optionUIDs: string[]): Promise<any> {\n const optionPairCombinations = getPairCombination(optionUIDs);\n const optionQueries = getProductOptionQuery(optionPairCombinations, sku);\n\n const mergedQueries = REFINE_PRODUCT_QUERY.replace(\n '# %extendedPlaceholder%',\n optionQueries\n );\n\n const { data } = await fetchGraphQl(mergedQueries, {\n method: 'GET',\n variables: { optionIds: optionUIDs, sku },\n });\n return data;\n}\n\nexport const getRefinedProduct = async (\n sku: string,\n optionUIDs: string[],\n anchorOptions?: string[]\n): Promise<ProductModel | null> => {\n\n const data = await getProductData(sku, optionUIDs);\n\n if (!data) return null;\n let { products, refineProduct, ...refinedOptions } = data;\n\n const parent = products?.[0];\n\n const options = mergeRefinedOptions(\n Object.values(refinedOptions),\n parent.options, anchorOptions\n );\n\n // needed when anchor options exist\n if (anchorOptions?.length && refineProduct === null) {\n optionUIDs = updateSelections(options, optionUIDs, anchorOptions);\n const updatedRefinedData = await getProductData(sku, optionUIDs);\n refineProduct = updatedRefinedData?.refineProduct;\n }\n\n const refinedData = transformProductData({\n ...(refineProduct || parent),\n sku: parent.sku,\n name: parent.name,\n externalParentId: parent?.externalId,\n options,\n optionUIDs,\n variantSku: refineProduct?.__typename === 'SimpleProductView' ? refineProduct?.sku : undefined,\n });\n\n const fallback = config?.getConfig()?.models?.ProductDetails?.fallbackData;\n\n if (fallback) {\n return fallback(parent, refinedData!);\n }\n\n return refinedData;\n};\n\nfunction getPairCombination(arr: string[]): string[][] {\n if (arr.length < 2) {\n return [arr];\n }\n\n const result: string[][] = [];\n\n arr.forEach((item) => {\n const temp: string[] = [];\n\n arr.forEach((item2) => {\n if (item !== item2) {\n temp.push(item2);\n }\n });\n\n result.push(temp);\n });\n\n return result;\n}\n\nfunction getProductOptionQuery(optionUIDs: string[][], sku: string): string {\n return optionUIDs\n .map((ids: string[], i: number) => {\n return `\n ProductOption${i}: refineProduct(\n optionIds: [\n ${ids.map((id) => `\"${id}\"`).join(', ')}\n ]\n sku: \"${sku}\"\n ) {\n ... on ComplexProductView {\n options {\n ...ProductOptionFragment\n }\n }\n }\n `;\n })\n .join('');\n}\n\nfunction mergeRefinedOptions(options: {}, parent: [], anchorOptions?: string[]) {\n // flat _refined[].options[] to _refinedOptions[]\n const refinedOptions: any = Object.values(options)\n .filter((x) => !!x)\n .reduce((acc: any, curr: any) => {\n if (!curr.options) return [...acc];\n\n return [...acc, ...curr.options];\n }, []);\n\n // Create a map to store items by their id from original\n const map = new Map(parent.map((item: any) => [item.id, item]));\n\n // Iterate through refinedOptions and merge items\n refinedOptions.forEach((current: any) => {\n\n // anchor options should display all values, so no merge is performed\n if (anchorOptions?.includes(current.id)) {\n return;\n }\n\n map.set(current.id, current);\n });\n\n return [...map.values()];\n}\n\nfunction updateSelections(options: any[], optionsUIDs: string[], anchorOptions: string[]): string[] {\n const updatedOptionsUIDs: string[] = [];\n\n let optionValue: string;\n options.forEach((option: any) => {\n if (anchorOptions.includes(option.id)) {\n optionValue = option.values?.find((value: any) => optionsUIDs.includes(value?.id))?.id || option.values[0]?.id;\n } else {\n optionValue = option.values[0]?.id; // TODO check if we should use default value instead\n }\n updatedOptionsUIDs.push(optionValue);\n });\n return updatedOptionsUIDs;\n}\n"],"names":["setEndpoint","setFetchGraphQlHeader","removeFetchGraphQlHeader","setFetchGraphQlHeaders","fetchGraphQl","getConfig","FetchGraphQL","getMethods","transformProductData","data","productData","name","sku","addToCartAllowed","inStock","shortDescription","metaDescription","metaKeyword","metaTitle","description","images","transformImages","prices","transformPrices","attributes","transformAttributes","options","transformOptions","optionUIDs","url","urlKey","externalId","externalParentId","variantSku","transform","config","models","ProductDetails","map","image","replace","filter","roles","indexOf","label","value","id","toString","split","join","title","required","multi","values","typename","__typename","type","undefined","multiple","items","toLowerCase","selected","price","priceRange","getSimpleProductPrices","regularPrice","regular","amount","finalPrice","final","currency","getComplexProductPrices","finalMinimumPrice","minimum","finalMaximumPrice","maximum","visible","includes","variant","minimumAmount","maximumAmount","ProductOptionFragment","ProductFragment","GET_PRODUCT_DATA","getProductData","initialData","method","variables","skus","product","products","REFINE_PRODUCT_QUERY","optionPairCombinations","getPairCombination","optionQueries","getProductOptionQuery","mergedQueries","optionIds","getRefinedProduct","anchorOptions","refineProduct","refinedOptions","parent","mergeRefinedOptions","Object","length","updateSelections","updatedRefinedData","refinedData","fallback","fallbackData","arr","result","forEach","item","temp","item2","push","ids","i","x","reduce","acc","curr","Map","current","set","optionsUIDs","updatedOptionsUIDs","optionValue","option","find"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import*as pe from"@dropins/tools/preact-compat.js";import{useState as K,Children as te,useRef as Se,useMemo as ve,useEffect as re,useCallback as Q}from"@dropins/tools/preact-compat.js";import{debounce as ge,classes as x,VComponent as W,toLanguageTag as Ne,Slot as U}from"@dropins/tools/lib.js";import{Button as we,Icon as be,Price as ye,Picker as Ve,ColorSwatch as He,ImageSwatch as qe,TextSwatch as ze,Incrementer as Ge,Breadcrumbs as Ue,Image as xe}from"@dropins/tools/components.js";import{jsxs as R,jsx as e,Fragment as Pe}from"@dropins/tools/preact-jsx-runtime.js";import{useText as z}from"@dropins/tools/i18n.js";import{c as Be,d as Ie}from"../chunks/getRefinedProduct.js";import{events as Te}from"@dropins/tools/event-bus.js";import{c as Ee}from"../chunks/initialize.js";import"@dropins/tools/fetch-graphql.js";const je=c=>pe.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...c},pe.createElement("path",{d:"M7.74512 9.87701L12.0001 14.132L16.2551 9.87701",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"square",strokeLinejoin:"round"})),Fe=c=>pe.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...c},pe.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3599 5.64001L5.62988 18.37",stroke:"currentColor"}),pe.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3599 18.37L5.62988 5.64001",stroke:"currentColor"})),me=({show:c=1,scrollbar:s=!1,peak:_=!1,arrows:v=!1,controls:p="dots",arrowsOnMainImage:y=!1,loop:u=!1,gap:D=null,direction:l="horizontal",width:ee="100%",height:j="100%",defaultIndex:r=0,className:V,children:H,thumbnails:Y=null,isZoomed:P,...A})=>{const h=z("PDP.Carousel.label").label,m=z("PDP.Carousel.Slide.label").label,n=z("PDP.Carousel.Previous.label").label,O=z("PDP.Carousel.Next.label").label,f=z("PDP.Carousel.Controls.label").label,t=z("PDP.Carousel.Controls.Button.label").label,[$,T]=K(()=>$e(c)),I=Math.ceil(te.toArray(H).length/$),ne={small:16,medium:24,large:64},E=_?24:0,k=D?ne[D]:0,Z=te.toArray(H).length%$,le=16,C=2,ce="32",[g,ae]=K(u?r+1:r),J=Se([]),[G,X]=K(0),[ie,se]=K(0),i=ve(()=>te.toArray(Y),[Y]),o=ve(()=>{const a=te.toArray(H).reduce((d,L,S)=>S%$===0?[...d,[L]]:[...d.slice(0,-1),[...d[d.length-1],L]],[]);return!u||a.length===1?a:u&&te.toArray(H).length%$===0?[a[I-1]].concat(a).concat([a[0],a[1]]):[te.toArray(H).slice(-$)].concat(a).concat([a[0],a[1]])},[H,$,I,u]),b=Se(null),N=Se(null),w=p==="thumbnailsRow"||p==="thumbnailsColumn";re(()=>{const a=document.body,d=ge(()=>{var B,Ae;X(((B=b.current)==null?void 0:B.offsetWidth)??0),se(((Ae=b.current)==null?void 0:Ae.offsetHeight)??0);const S=window.innerWidth,M=$e(c,S);M!==$&&T(M)},50),L=new ResizeObserver(d);return L.observe(a),()=>{L.unobserve(a)}},[$,c]);const F=Q(a=>{const d=u?a-1:a,L=J==null?void 0:J.current[0],S=(L==null?void 0:L.offsetWidth)+le,M=(L==null?void 0:L.offsetHeight)+le,B=N.current;p==="thumbnailsRow"&&(B!=null&&B.offsetWidth)&&(S*(d+1)>B.offsetWidth&&(B.style.scrollBehavior="smooth",B.scrollLeft=(d+C)*S),B.scrollLeft>S*d&&(B.style.scrollBehavior="smooth",B.scrollLeft=(d-C)*S)),p==="thumbnailsColumn"&&(B!=null&&B.offsetHeight)&&(M*(d+1)>B.offsetHeight&&(B.style.scrollBehavior="smooth",B.scrollTop=(d+C)*M),B.scrollTop>M*d&&(B.style.scrollBehavior="smooth",B.scrollTop=(d-C)*M))},[p,u]),q=Q((a,d,L)=>{(p==="thumbnailsRow"||p==="thumbnailsColumn")&&F(a);const S=b.current,M=E?S.offsetWidth-E:S.offsetWidth-E+k;if(!Array.from(S.querySelectorAll("[data-index]")).filter(_e=>{const oe=Number(_e.getAttribute("data-index"));return!isNaN(oe)&&oe>-1})[a])return;if(L){const _e=a===0?I:0,oe=M*(I+(Z||$)/$);if(S.scrollLeft>=0&&S.scrollLeft<M-5){q(1,!0);return}if(S.scrollLeft>oe-M&&S.scrollLeft<=oe){q(I,!0);return}S.style.scrollBehavior="auto",S.scrollLeft=_e===0?0:oe,q(_e===0?1:I,!0);return}const We=(S.offsetWidth-k)/$*o[a].length-E;S.style.scrollBehavior=d?"smooth":"auto",S.scrollLeft=o[a].length===$?M*a:M*(a-1)+We},[k,I,E,$,Z,o,F,p]),de=Q(()=>{if(u){const d=g-1;q(d,!0,g===1);return}const a=g<=0?0:g-1;q(a,!0)},[g,q,u]),he=Q(()=>{const a=o.length-1;if(u){const L=g+1;q(L,!0,g===I);return}const d=g>=a?a:g+1;q(d,!0)},[o.length,u,g,q,I]);re(()=>{const a=d=>{d.key==="ArrowLeft"&&(d.preventDefault(),de()),d.key==="ArrowRight"&&(d.preventDefault(),he())};return window.addEventListener("keydown",a),()=>{window.removeEventListener("keydown",a)}},[he,de]),re(()=>{q(u?r+1:r,!1)},[r,q,u]);const fe=ge(()=>{const a=b.current,d=E?a.offsetWidth-E:a.offsetWidth-E+k,L=a.scrollLeft/d,S=Math.round(L)-L<1?Math.round(L):Math.ceil(L);if(w&&F(S),u){const M=d*(I+(Z||$)/$);if(Math.ceil(a.scrollLeft)>=Math.ceil(M)-5){a.style.scrollBehavior="auto",a.scrollLeft=a.offsetWidth*1+(Math.ceil(a.scrollLeft)-Math.ceil(M)-E);return}if(a.scrollLeft===0){a.style.scrollBehavior="auto",a.scrollLeft=M-a.offsetWidth+E;return}}g!==S&&ae(S)},100);re(()=>{const a=b.current;return a==null||a.addEventListener("scroll",fe),()=>{a==null||a.removeEventListener("scroll",fe)}},[fe]);const ue=(a,d,L)=>e(we,{className:x([["pdp-carousel__button",!a],[`pdp-carousel__button--${d}`,!a],[`pdp-carousel__button--${p}`,a]]),style:{"--height":`${ie}px`},variant:"tertiary","aria-label":d==="next"?O:n,onClick:L,disabled:u?!1:d==="next"?g>=o.length-1:g<1,children:e(be,{className:x([["pdp-carousel__button__icon",!a],[`pdp-carousel__button__icon--${d}`,!a],[`pdp-carousel__button__icon--${p}--${d}`,a]]),size:ce,source:je})}),Le=v&&o.length!=1&&ue(w,"prev",de),De=v&&o.length!=1&&ue(w,"next",he),Oe=v&&o.length!=1&&ue(!1,"prev",de),Re=v&&o.length!=1&&ue(!1,"next",he);return R("div",{role:"region","aria-roledescription":h,className:x(["pdp-carousel",["pdp-carousel--main-image-controls",y],["pdp-carousel--arrows",v&&!w],[`pdp-carousel--${p}`,w],V]),style:{"--flex-carousel":p==="thumbnailsColumn"?"row-reverse":"column","--gap":w?"0":"var(--spacing-small)","--width":ee},...A,children:[e("div",{ref:b,className:x(["pdp-carousel__wrapper",`pdp-carousel__wrapper--${l}`,["pdp-carousel__wrapper--scrollbar",s],["pdp-carousel__wrapper--peak",_]]),style:{"--total-width":p==="thumbnailsColumn"?"81.6%":"100%","--height":p==="thumbnailsColumn"?"auto":j,"--gap":D?`var(--spacing-${D})`:"0px","--per-page":$},tabIndex:0,children:o.map((a,d)=>{const L=a.length<$;return e("div",{role:"group","aria-roledescription":m,"data-index":d,className:x(["pdp-carousel__slide",`pdp-carousel__slide--${l}`,["pdp-carousel__slide--active",g===d],["pdp-carousel__slide--orphan",L]]),style:{"--length":a.length},children:a},d)})}),!w&&R(Pe,{children:[Le,De]}),w&&y&&R(Pe,{children:[Oe,Re]}),p&&o.length!=1&&R("div",{className:x([[`pdp-carousel__controls__container--${p}`,w],["pdp-carousel__controls__container--no-arrows",!v||y]]),style:{"--width":p==="thumbnailsRow"?`${G}px`:ee,"--height":`${ie}px`,"--nr-thumbnails":i.length},children:[(w||P)&&!y&&Le,e("div",{ref:N,className:x([[`pdp-carousel__controls__wrapper--${p}`,w],["pdp-carousel__controls__wrapper",w]]),children:e("div",{role:"group","aria-label":f,className:x(["pdp-carousel__controls",[`pdp-carousel__controls--${p}`,w]]),children:(u?o.slice(0,I):o).map((a,d)=>{const L=u?I:o.length,S=u?g-1===d:g===d;return w?R("label",{className:x(["pdp-carousel__thumbnail__container"]),ref:M=>{M&&(J.current[d]=M)},children:[e("input",{type:"radio",name:"carousel-thumbnails","aria-label":t.replace("{key}",String(d+1)).replace("{total}",String(L)),checked:S&&G!==0,onChange:()=>{q(u?d+1:d,!0)},...A,className:x(["pdp-carousel__thumbnail",["pdp-carousel__thumbnail--selected",S&&G!==0]])}),e("span",{className:x(["pdp-carousel__thumbnail__span"]),children:i[d]})]},d):e("button",{"aria-label":t.replace("{key}",String(d+1)).replace("{total}",String(L)),onClick:()=>{q(u?d+1:d,!0)},className:x(["pdp-carousel__controls__button",["pdp-carousel__controls__button--active",S]])},d)})})}),(w||P)&&!y&&De]})]})};function $e(c,s=0){if(typeof c=="number")return c;const{small:_,medium:v,large:p}=c,y=786;return s>1024?p:s>y?v:_}const Ke=({title:c,breadcrumbs:s,galleryContent:_,infoContent:v,productContent:p,sku:y,outOfStock:u,hideSku:D,shortDescription:l,description:ee,attributes:j,images:r,options:V,price:H,specialPrice:Y,className:P,children:A,quantity:h,actions:m,carouselConfig:n,...O})=>{var Z,le,C,ce,g,ae;const f=z("PDP.Product.RegularPrice.label").label,t=z("PDP.Product.SpecialPrice.label").label,$=z("PDP.Product.OutOfStock.label").label,T=z("PDP.Product.Image.label").label,[I,ne]=K(null),E=r!=null&&r.length?r.map((J,G)=>{var X;return e(W,{node:J,loading:G===0?"eager":"lazy",alt:((X=c==null?void 0:c.props)==null?void 0:X.children)&&(T==null?void 0:T.replace("{product}",c.props.children.toString()).replace("{key}",String(G+1)).replace("{total}",String(r.length))),onClick:()=>ne(G)},G)}):e("img",{src:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",className:"pdp-product__images__placeholder","aria-hidden":!0}),k=(Z=n==null?void 0:n.thumbnails)!=null&&Z.length?n.thumbnails.map((J,G)=>{var X;return e(W,{node:J,loading:(n==null?void 0:n.thumbnailsLoadingMode)||"lazy",alt:((X=c==null?void 0:c.props)==null?void 0:X.children)&&(T==null?void 0:T.replace("{product}",c.props.children.toString()).replace("{key}",String(G+1)).replace("{total}",String(r.length)))},G)}):e("img",{src:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",className:"pdp-product__images__placeholder","aria-hidden":!0});return R("div",{...O,className:x(["pdp-product",P]),children:[s&&e(W,{node:s,className:"pdp-product__breadcrumbs"}),R("div",{className:"pdp-product__column-container pdp-product__gallery-column",children:[e("div",{className:"pdp-product__column-body",children:n!=null&&n.controls?e(me,{className:"pdp-product__overlay__carousel",arrows:(r==null?void 0:r.length)>1,controls:(r==null?void 0:r.length)>1?n.controls:"dots",arrowsOnMainImage:n==null?void 0:n.arrowsOnMainImage,loop:(n==null?void 0:n.loopable)&&(r==null?void 0:r.length)>1,peak:((le=n==null?void 0:n.thumbnails)==null?void 0:le.length)>1&&((C=n==null?void 0:n.peak)==null?void 0:C.desktop)||!1,gap:(n==null?void 0:n.gap)||null,width:"100%",height:"100%",defaultIndex:I||0,thumbnails:k,children:E}):e(Qe,{className:"pdp-product__images",gap:"small",children:E})}),_&&e(W,{node:_,className:"pdp-product__gallery-content"})]}),R("div",{className:"pdp-product__column-container pdp-product__content-column",children:[R("div",{className:"pdp-product__column-body",children:[R("div",{className:"pdp-product__header",children:[c&&e(W,{node:c,className:"pdp-product__title"}),!D&&y&&e(W,{node:y,className:"pdp-product__sku"})]}),R("div",{className:"pdp-product__prices",children:[Y&&e(W,{node:Y,className:x(["pdp-product__price-special","pdp-product__price"]),"aria-label":t,role:"text"}),H&&e(W,{node:H,className:x(["pdp-product__price-regular","pdp-product__price--grey"]),"aria-label":f,role:"text"})]}),n!=null&&n.mobile?e(me,{className:"pdp-product__images pdp-product__images--carousel pdp-product__images--carousel--thumbnails",width:"100%",height:"auto",arrows:(r==null?void 0:r.length)>1,controls:(r==null?void 0:r.length)>1?"thumbnailsRow":null,loop:(n==null?void 0:n.loopable)&&(r==null?void 0:r.length)>1,peak:((ce=n==null?void 0:n.thumbnails)==null?void 0:ce.length)>1&&((g=n==null?void 0:n.peak)==null?void 0:g.mobile)||!1,gap:(n==null?void 0:n.gap)||null,thumbnails:k,children:E}):e(me,{className:"pdp-product__images pdp-product__images--carousel",peak:((ae=n==null?void 0:n.peak)==null?void 0:ae.mobile)&&(r==null?void 0:r.length)>1,gap:(n==null?void 0:n.gap)||null,width:"100%",height:"auto",arrows:(r==null?void 0:r.length)>1,controls:(r==null?void 0:r.length)>1?"dots":null,loop:(n==null?void 0:n.loopable)&&(r==null?void 0:r.length)>1,children:E}),R("div",{className:x(["pdp-product__actions",["pdp-product__actions--out-of-stock",u]]),children:[u&&e("div",{className:"pdp-product__out-of-stock__text",children:$}),V&&e(W,{node:V,className:x(["pdp-product__options"])}),h&&e("div",{className:"pdp-product__quantity",children:e(W,{node:h})}),m&&e(W,{node:m,className:x(["pdp-product__buttons"])})]}),l&&e(W,{node:l,className:x(["pdp-product__short_description"])}),ee&&e(W,{node:ee,className:x(["pdp-product__description"])}),j?e("div",{className:"pdp-product__attributes",children:j}):null]}),v&&e(W,{node:v,className:"pdp-product__info-content"})]}),p&&e(W,{node:p,className:"pdp-product__content"}),I===null?null:e(Ze,{className:"pdp-product__overlay",onClose:()=>ne(null),centered:!0,children:e(me,{className:"pdp-product__overlay__carousel",arrows:(r==null?void 0:r.length)>1,width:"100%",height:"100%",defaultIndex:I||0,loop:(r==null?void 0:r.length)>1,controls:(r==null?void 0:r.length)>1?"dots":null,isZoomed:!0,children:E})})]})},Qe=({children:c,gap:s=null,className:_,style:v,...p})=>{const y=te.count(c);return e("div",{...p,className:x(["pdp-gallery-grid",_]),style:{"--gap":s?`var(--spacing-${s})`:"0px",...v},children:te.map(c,(u,D)=>e("div",{className:"pdp-gallery-grid__item",children:e(W,{node:u,loading:D===0?"eager":"lazy"},u.props.src)},y+D))})},ke=({amount:c,currency:s,locale:_,variant:v,sale:p,minimumAmount:y,maximumAmount:u,className:D,...l})=>e(Pe,{children:c||y===u?e("div",{className:"pdp-price-range",...l,children:e(ye,{amount:c||y,currency:s,locale:_,variant:v,sale:p,className:D})}):R("div",{className:"pdp-price-range",...l,children:[e(ye,{amount:y,currency:s,locale:_,className:D}),e("span",{className:"pdp-price-range__label",children:"-"}),e(ye,{amount:u,currency:s,locale:_,className:D})]})}),Ze=({centered:c,onClose:s,className:_,children:v,...p})=>{const y=z("PDP.Overlay.Close.label").label,u=Q(()=>{s==null||s()},[s]);return re(()=>{const D=l=>{l.key==="Escape"&&u()};return document.addEventListener("keydown",D),()=>{document.removeEventListener("keydown",D)}},[u]),re(()=>{const D=document.scrollingElement,l=D.style.overflow;return D.style.overflow="hidden",()=>{D.style.overflow=l}},[]),R("div",{...p,className:x(["pdp-overlay",["pdp-overlay--centered",c],_]),children:[e("div",{className:"pdp-overlay__content",children:v}),e(we,{"aria-label":y,variant:"tertiary",className:"pdp-overlay__close-button",onClick:u,icon:e(Fe,{})})]})},Je=["text","image","color","dropdown"],Xe=c=>c.map(s=>({...s,text:s.label,disabled:!s.inStock})),Ye=({options:c,hideSelectedValue:s,onValues:_,onErrors:v,defaultOptions:p,selectionsToUpdate:y,className:u,children:D,...l})=>{const ee=z("PDP.Swatches.Required.label").label,[j,r]=K(()=>c==null?void 0:c.reduce((A,h)=>{const{items:m}=h,n=m==null?void 0:m.find(f=>p==null?void 0:p.includes(f.id)),O=m==null?void 0:m.find(f=>f.selected);return n?{...A,[h.id]:{label:n.label,value:n.id}}:O?{...A,[h.id]:{label:O.label,value:O.id}}:A},{}));re(()=>{y==null||y.forEach(P=>{r(A=>{var n;const h=(n=P==null?void 0:P.items)==null?void 0:n.find(O=>O.selected);return h?{...A,[P.id]:{label:h==null?void 0:h.label,value:h==null?void 0:h.id}}:A})})},[y,r]),ve(()=>{const P=c==null?void 0:c.reduce((A,h)=>{var m;return(m=h==null?void 0:h.items)==null||m.forEach(n=>{var f;const O=((f=j[h.id])==null?void 0:f.value)===n.id;h.required&&!O&&(A[h.id]=ee)}),A},{});return v==null||v(P),P},[j]);const V=Q((P,A,h)=>{r(m=>{const n={...m,[P]:{label:A,value:h}};return _==null||_(n,h),n})},[_]),H=(P,A)=>{var m;const h=((m=A.selectedOptions[0])==null?void 0:m.label)??"";V(P,h,A.value)},Y=Q(({items:P,id:A,required:h,type:m,selected:n,label:O})=>e("div",{className:x(["pdp-swatches__options"]),children:(m==null?void 0:m.toLowerCase())==="dropdown"?e(Ve,{"aria-label":O,handleSelect:f=>H(A,f.target),options:Xe(P),value:n}):P==null?void 0:P.map(f=>{const t={key:f.id,id:f.id,name:A,value:f.value,label:f.label,groupAriaLabel:O,selected:n===f.id,outOfStock:!f.inStock,required:h===null?!0:h,onValue:()=>{V(A,f.label,f.id)}};switch(m){case"text":return e(ze,{...t,label:f.label});case"image":return e(qe,{...t,src:f.value,alt:f.label});case"color":return e(He,{...t,size:"large",color:f.value});default:return console.warn(`Invalid swatch type ${m}`),null}})}),[V]);return e("div",{...l,className:x(["pdp-swatches",u]),children:c==null?void 0:c.map(({type:P,label:A,id:h,multiple:m,required:n,items:O})=>{var f;if(!P){console.warn("Bundle product not supported on UI.");return}return Je.includes(P)||console.warn(`Invalid swatch type ${P}`),m&&console.warn("Multiple selection swatches are not currently supported."),R("div",{id:`swatch-item-${h}`,"data-slot-key":`product-swatch--${h}`,className:"pdp-swatches__field",children:[e("div",{className:"pdp-swatches__field__label",children:j[h]?s?`${A}`:`${A}: ${j[h].label}`:A}),e(Y,{id:h,type:P,required:n,items:O,label:A,selected:(f=j[h])==null?void 0:f.value})]},`swatch-item-${h}`)})})};function Ce(c,s="en_US"){if(!Me(c))throw Error("Invalid date string");return c.split(" ")[1]||(c=`${c} 00:00:00`),new Date(c).toLocaleDateString(Ne(s)).toString()}function Me(c){if(![/^\d{4}-\d{2}-\d{2}$/,/^\d{1,2}\/\d{1,2}\/\d{4}$/,/^\d{2}\/\d{2}\/\d{4}$/,/^\d{4}\/\d{2}\/\d{2}$/,/^\d{1,2}\.\d{1,2}\.\d{4}$/,/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/].some(v=>v.test(c)))return!1;const _=new Date(c);return!isNaN(_.getTime())}function et(c){const s=new URLSearchParams(window.location.search);Object.entries(c).forEach(([v,p])=>{p===null?s.delete(v):s.set(v,String(p))});let _=window.location.pathname;_+=`?${s.toString()}`,_+=window.location.hash,window.history.replaceState({},"",_)}function tt(){const c=new URLSearchParams(window.location.search),s={};return c.forEach((_,v)=>{s[v]=_}),s}const rt=({sku:c,hideSku:s,hideQuantity:_,hideShortDescription:v,hideDescription:p,hideAttributes:y,hideURLParams:u,hideSelectedOptionValue:D,slots:l,children:ee,initialData:j,carousel:r,optionsConfig:V,onAddToCart:H,...Y})=>{var G,X,ie,se;const P=z("PDP.Product.AddToCart.label").label,A=z("PDP.Product.Incrementer.label").label,h=z("PDP.Product.Details.label").label,[m,n]=K(Ee.getConfig().defaultLocale||"en-US"),[O,f]=K(),[t=null,$]=K(j),[T,I]=K(()=>{const i={sku:c,quantity:1};return t!=null&&t.optionUIDs&&(i.optionsUIDs=t.optionUIDs),i}),[ne,E]=K(()=>{var i,o;return!(t!=null&&t.options&&((i=t==null?void 0:t.options)==null?void 0:i.length)>0&&((o=t==null?void 0:t.optionUIDs)==null?void 0:o.length)!==(t==null?void 0:t.options.length))}),k={data:t,values:T,valid:ne};re(()=>{const i=Te.on("locale",o=>{o!==m&&(n(o),Be(c).then($))});return()=>{i==null||i.off()}},[m,c]);const Z=Q(i=>{I(o=>({...o,...i}))},[]),le=Q(i=>{var b;let o=Object.keys(i).map(N=>i[N].value).filter(N=>N!==void 0);u||et({optionsUIDs:o.join(",")}),I(N=>({...N,optionsUIDs:o})),E((o==null?void 0:o.length)===((b=t==null?void 0:t.options)==null?void 0:b.length)),Ie(c,o,V==null?void 0:V.anchorOptions).then(N=>{var w;$(N),(w=V==null?void 0:V.anchorOptions)!=null&&w.length&&C(N,o)})},[c]),C=Q((i,o)=>{var w;const b=(i==null?void 0:i.optionUIDs)??[];o.every(F=>b.includes(F))||(f(i==null?void 0:i.options),I(F=>({...F,optionsUIDs:b})),E((b==null?void 0:b.length)===((w=i==null?void 0:i.options)==null?void 0:w.length)))},[c]),ce=Q(i=>{Object.keys(i).length!==0&&E(!1)},[]),g=ve(()=>{var i;return(i=t==null?void 0:t.attributes)==null?void 0:i.map(({label:o,value:b},N)=>{const w=Me(b)?Ce(b,m):b.toString();return R("li",{children:[o,": ",e("span",{dangerouslySetInnerHTML:{__html:w}})]},N)})},[t==null?void 0:t.attributes,m]),ae=!_&&(t!=null&&t.inStock)?e(U,{name:"Quantity",slot:l==null?void 0:l.Quantity,context:{...k},children:e(Ge,{name:"quantity",defaultValue:T.quantity.toString(),min:1,"aria-label":A,className:"pdp-product__quantity",onValue:i=>{Z({quantity:Number(i)})}},"quantity")}):void 0,J=()=>{if(t!=null&&t.options)return e(U,{name:"Options",slot:l==null?void 0:l.Options,context:{...k},children:e(Ye,{options:t.options,defaultOptions:T.optionsUIDs,selectionsToUpdate:O,hideSelectedValue:D,onValues:le,onErrors:ce})})};return e("div",{...Y,children:e(Ke,{title:e(U,{name:"Title",slot:l==null?void 0:l.Title,context:{...k},children:t==null?void 0:t.name}),sku:s?void 0:e(U,{name:"SKU",slot:l==null?void 0:l.SKU,context:{...k},children:t==null?void 0:t.sku}),options:J(),breadcrumbs:(l==null?void 0:l.Breadcrumbs)&&e(U,{name:"Breadcrumbs",slot:l==null?void 0:l.Breadcrumbs,context:{...k,setSeparator(i){this._registerMethod((...o)=>{const b=i(...o),N=b&&e(be,{source:b});this._setProps(w=>({...w,separator:N}))})},appendLink(i){this._registerMethod((...o)=>{const{text:b,...N}=i(...o),w=e("a",{...N,children:b});this._setProps(F=>({...F,categories:[...F.categories||[],w]}))})},appendHTMLElement(i){this._registerMethod((...o)=>{const b=i(...o),N=this._htmlElementToVNode(b);this._setProps(w=>({...w,categories:[...w.categories||[],N]}))})}},render:({separator:i,categories:o})=>e(Ue,{separator:i,categories:o})}),quantity:ae,actions:e(U,{name:"Actions",slot:l==null?void 0:l.Actions,context:{...k,appendButton(i){this._registerMethod((...o)=>{const b=i(...o);if(!b)return;const{text:N,icon:w,...F}=b,q=e(we,{type:"button",...F,icon:w&&e(be,{source:w}),children:N});this._setProps(de=>({children:[...de.children||[],q]}))})}},children:!(l!=null&&l.Actions)&&e(we,{size:"medium",type:"submit",icon:e(be,{source:"Cart"}),disabled:!(t!=null&&t.inStock)||!ne,"aria-label":P,onClick:()=>H==null?void 0:H(T),children:P})}),shortDescription:v?void 0:e(U,{name:"ShortDescription",slot:l==null?void 0:l.ShortDescription,context:{...k},children:e("div",{dangerouslySetInnerHTML:{__html:(t==null?void 0:t.shortDescription)??""}})}),description:p?void 0:e(U,{name:"Description",slot:l==null?void 0:l.Description,context:{...k},children:e("div",{dangerouslySetInnerHTML:{__html:(t==null?void 0:t.description)??""}})}),images:((G=t==null?void 0:t.images)==null?void 0:G.map(({label:i,url:o})=>{var b,N;return e(xe,{title:i,alt:i,src:o,width:((b=r==null?void 0:r.imageParams)==null?void 0:b.width)??960,height:((N=r==null?void 0:r.imageParams)==null?void 0:N.height)??1191,params:(r==null?void 0:r.imageParams)??{width:960}},o)}))??[],specialPrice:(X=t==null?void 0:t.prices)!=null&&X.visible?e(U,{name:"SpecialPrice",slot:l==null?void 0:l.SpecialPrice,context:{...k},children:e(ke,{...t.prices.final,locale:Ne(m)})}):void 0,price:(ie=t==null?void 0:t.prices)!=null&&ie.visible&&t.prices.regular&&t.prices.final.amount!==(t==null?void 0:t.prices.regular.amount)?e(U,{name:"RegularPrice",slot:l==null?void 0:l.RegularPrice,context:{...k},children:e(ke,{...t.prices.regular,locale:Ne(m)})}):void 0,carouselConfig:{...r,thumbnails:r?((se=t==null?void 0:t.images)==null?void 0:se.map(({label:i,url:o})=>{var b,N;return e(xe,{title:i,alt:i,src:o,width:((b=r==null?void 0:r.thumbnailParams)==null?void 0:b.width)??200,height:((N=r==null?void 0:r.thumbnailParams)==null?void 0:N.height)??248,params:(r==null?void 0:r.thumbnailParams)??{width:200}},o)}))??[]:[]},outOfStock:!(t!=null&&t.inStock),attributes:y?void 0:e(U,{name:"Attributes",slot:l==null?void 0:l.Attributes,context:{...k},children:g!=null&&g.length?R(Pe,{children:[h,e("ul",{children:g})]}):null}),galleryContent:(l==null?void 0:l.GalleryContent)&&e(U,{name:"GalleryContent",slot:l.GalleryContent,context:{...k}}),infoContent:(l==null?void 0:l.InfoContent)&&e(U,{name:"InfoContent",slot:l.InfoContent,context:{...k}}),productContent:(l==null?void 0:l.Content)&&e(U,{name:"Content",slot:l.Content,context:{...k}})})})};rt.getInitialData=async function({sku:c,optionsConfig:s}){var v,p,y,u,D,l;const _=((v=tt().optionsUIDs)==null?void 0:v.split(","))||((l=(D=(u=(y=(p=Ee)==null?void 0:p.getConfig())==null?void 0:y.models)==null?void 0:u.ProductDetails)==null?void 0:D.initialData)==null?void 0:l.optionsUIDs);return _!=null&&_.length?await Ie(c,_,s==null?void 0:s.anchorOptions):await Be(c)};export{rt as ProductDetails,rt as default};
1
+ import*as ie from"@dropins/tools/preact-compat.js";import{useState as K,Children as te,useRef as Se,useMemo as ve,useEffect as re,useCallback as Q}from"@dropins/tools/preact-compat.js";import{debounce as ge,classes as $,VComponent as V,toLanguageTag as Ne,Slot as T}from"@dropins/tools/lib.js";import{Button as we,Icon as be,Price as ye,Picker as Ve,ColorSwatch as He,ImageSwatch as qe,TextSwatch as ze,Incrementer as Ge,Breadcrumbs as Ue,Image as xe}from"@dropins/tools/components.js";import{jsxs as W,jsx as e,Fragment as Pe}from"@dropins/tools/preact-jsx-runtime.js";import{useText as G}from"@dropins/tools/i18n.js";import{c as Be,d as Ie}from"../chunks/getRefinedProduct.js";import{events as Te}from"@dropins/tools/event-bus.js";import{c as Ee}from"../chunks/initialize.js";import"@dropins/tools/fetch-graphql.js";const je=l=>ie.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...l},ie.createElement("path",{d:"M7.74512 9.87701L12.0001 14.132L16.2551 9.87701",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"square",strokeLinejoin:"round"})),Fe=l=>ie.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...l},ie.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3599 5.64001L5.62988 18.37",stroke:"currentColor"}),ie.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3599 18.37L5.62988 5.64001",stroke:"currentColor"})),me=({show:l=1,scrollbar:s=!1,peak:_=!1,arrows:b=!1,controls:p="dots",arrowsOnMainImage:y=!1,loop:u=!1,gap:D=null,direction:n="horizontal",width:C="100%",height:a="100%",defaultIndex:v=0,className:H,children:q,thumbnails:ee=null,isZoomed:A,...P})=>{const h=G("PDP.Carousel.label").label,t=G("PDP.Carousel.Slide.label").label,k=G("PDP.Carousel.Previous.label").label,O=G("PDP.Carousel.Next.label").label,f=G("PDP.Carousel.Controls.label").label,r=G("PDP.Carousel.Controls.Button.label").label,[g,Z]=K(()=>$e(l)),M=Math.ceil(te.toArray(q).length/g),J={small:16,medium:24,large:64},R=_?24:0,B=D?J[D]:0,X=te.toArray(q).length%g,ne=16,Y=2,ce="32",[x,le]=K(u?v+1:v),U=Se([]),[j,pe]=K(0),[oe,se]=K(0),i=ve(()=>te.toArray(ee),[ee]),o=ve(()=>{const c=te.toArray(q).reduce((d,L,S)=>S%g===0?[...d,[L]]:[...d.slice(0,-1),[...d[d.length-1],L]],[]);return!u||c.length===1?c:u&&te.toArray(q).length%g===0?[c[M-1]].concat(c).concat([c[0],c[1]]):[te.toArray(q).slice(-g)].concat(c).concat([c[0],c[1]])},[q,g,M,u]),m=Se(null),N=Se(null),w=p==="thumbnailsRow"||p==="thumbnailsColumn";re(()=>{const c=document.body,d=ge(()=>{var I,Ae;pe(((I=m.current)==null?void 0:I.offsetWidth)??0),se(((Ae=m.current)==null?void 0:Ae.offsetHeight)??0);const S=window.innerWidth,E=$e(l,S);E!==g&&Z(E)},50),L=new ResizeObserver(d);return L.observe(c),()=>{L.unobserve(c)}},[g,l]);const F=Q(c=>{const d=u?c-1:c,L=U==null?void 0:U.current[0],S=(L==null?void 0:L.offsetWidth)+ne,E=(L==null?void 0:L.offsetHeight)+ne,I=N.current;p==="thumbnailsRow"&&(I!=null&&I.offsetWidth)&&(S*(d+1)>I.offsetWidth&&(I.style.scrollBehavior="smooth",I.scrollLeft=(d+Y)*S),I.scrollLeft>S*d&&(I.style.scrollBehavior="smooth",I.scrollLeft=(d-Y)*S)),p==="thumbnailsColumn"&&(I!=null&&I.offsetHeight)&&(E*(d+1)>I.offsetHeight&&(I.style.scrollBehavior="smooth",I.scrollTop=(d+Y)*E),I.scrollTop>E*d&&(I.style.scrollBehavior="smooth",I.scrollTop=(d-Y)*E))},[p,u]),z=Q((c,d,L)=>{(p==="thumbnailsRow"||p==="thumbnailsColumn")&&F(c);const S=m.current,E=R?S.offsetWidth-R:S.offsetWidth-R+B;if(!Array.from(S.querySelectorAll("[data-index]")).filter(_e=>{const de=Number(_e.getAttribute("data-index"));return!isNaN(de)&&de>-1})[c])return;if(L){const _e=c===0?M:0,de=E*(M+(X||g)/g);if(S.scrollLeft>=0&&S.scrollLeft<E-5){z(1,!0);return}if(S.scrollLeft>de-E&&S.scrollLeft<=de){z(M,!0);return}S.style.scrollBehavior="auto",S.scrollLeft=_e===0?0:de,z(_e===0?1:M,!0);return}const We=(S.offsetWidth-B)/g*o[c].length-R;S.style.scrollBehavior=d?"smooth":"auto",S.scrollLeft=o[c].length===g?E*c:E*(c-1)+We},[B,M,R,g,X,o,F,p]),ae=Q(()=>{if(u){const d=x-1;z(d,!0,x===1);return}const c=x<=0?0:x-1;z(c,!0)},[x,z,u]),he=Q(()=>{const c=o.length-1;if(u){const L=x+1;z(L,!0,x===M);return}const d=x>=c?c:x+1;z(d,!0)},[o.length,u,x,z,M]);re(()=>{const c=d=>{d.key==="ArrowLeft"&&(d.preventDefault(),ae()),d.key==="ArrowRight"&&(d.preventDefault(),he())};return window.addEventListener("keydown",c),()=>{window.removeEventListener("keydown",c)}},[he,ae]),re(()=>{z(u?v+1:v,!1)},[v,z,u]);const fe=ge(()=>{const c=m.current,d=R?c.offsetWidth-R:c.offsetWidth-R+B,L=c.scrollLeft/d,S=Math.round(L)-L<1?Math.round(L):Math.ceil(L);if(w&&F(S),u){const E=d*(M+(X||g)/g);if(Math.ceil(c.scrollLeft)>=Math.ceil(E)-5){c.style.scrollBehavior="auto",c.scrollLeft=c.offsetWidth*1+(Math.ceil(c.scrollLeft)-Math.ceil(E)-R);return}if(c.scrollLeft===0){c.style.scrollBehavior="auto",c.scrollLeft=E-c.offsetWidth+R;return}}x!==S&&le(S)},100);re(()=>{const c=m.current;return c==null||c.addEventListener("scroll",fe),()=>{c==null||c.removeEventListener("scroll",fe)}},[fe]);const ue=(c,d,L)=>e(we,{className:$([["pdp-carousel__button",!c],[`pdp-carousel__button--${d}`,!c],[`pdp-carousel__button--${p}`,c]]),style:{"--height":`${oe}px`},variant:"tertiary","aria-label":d==="next"?O:k,onClick:L,disabled:u?!1:d==="next"?x>=o.length-1:x<1,children:e(be,{className:$([["pdp-carousel__button__icon",!c],[`pdp-carousel__button__icon--${d}`,!c],[`pdp-carousel__button__icon--${p}--${d}`,c]]),size:ce,source:je})}),Le=b&&o.length!=1&&ue(w,"prev",ae),De=b&&o.length!=1&&ue(w,"next",he),Oe=b&&o.length!=1&&ue(!1,"prev",ae),Re=b&&o.length!=1&&ue(!1,"next",he);return W("div",{role:"region","aria-roledescription":h,className:$(["pdp-carousel",["pdp-carousel--main-image-controls",y],["pdp-carousel--arrows",b&&!w],[`pdp-carousel--${p}`,w],H]),style:{"--flex-carousel":p==="thumbnailsColumn"?"row-reverse":"column","--gap":w?"0":"var(--spacing-small)","--width":C},...P,children:[e("div",{ref:m,className:$(["pdp-carousel__wrapper",`pdp-carousel__wrapper--${n}`,["pdp-carousel__wrapper--scrollbar",s],["pdp-carousel__wrapper--peak",_]]),style:{"--total-width":p==="thumbnailsColumn"?"81.6%":"100%","--height":p==="thumbnailsColumn"?"auto":a,"--gap":D?`var(--spacing-${D})`:"0px","--per-page":g},tabIndex:0,children:o.map((c,d)=>{const L=c.length<g;return e("div",{role:"group","aria-roledescription":t,"data-index":d,className:$(["pdp-carousel__slide",`pdp-carousel__slide--${n}`,["pdp-carousel__slide--active",x===d],["pdp-carousel__slide--orphan",L]]),style:{"--length":c.length},children:c},d)})}),!w&&W(Pe,{children:[Le,De]}),w&&y&&W(Pe,{children:[Oe,Re]}),p&&o.length!=1&&W("div",{className:$([[`pdp-carousel__controls__container--${p}`,w],["pdp-carousel__controls__container--no-arrows",!b||y]]),style:{"--width":p==="thumbnailsRow"?`${j}px`:C,"--height":`${oe}px`,"--nr-thumbnails":i.length},children:[(w||A)&&!y&&Le,e("div",{ref:N,className:$([[`pdp-carousel__controls__wrapper--${p}`,w],["pdp-carousel__controls__wrapper",w]]),children:e("div",{role:"group","aria-label":f,className:$(["pdp-carousel__controls",[`pdp-carousel__controls--${p}`,w]]),children:(u?o.slice(0,M):o).map((c,d)=>{const L=u?M:o.length,S=u?x-1===d:x===d;return w?W("label",{className:$(["pdp-carousel__thumbnail__container"]),ref:E=>{E&&(U.current[d]=E)},children:[e("input",{type:"radio",name:"carousel-thumbnails","aria-label":r.replace("{key}",String(d+1)).replace("{total}",String(L)),checked:S&&j!==0,onChange:()=>{z(u?d+1:d,!0)},...P,className:$(["pdp-carousel__thumbnail",["pdp-carousel__thumbnail--selected",S&&j!==0]])}),e("span",{className:$(["pdp-carousel__thumbnail__span"]),children:i[d]})]},d):e("button",{"aria-label":r.replace("{key}",String(d+1)).replace("{total}",String(L)),onClick:()=>{z(u?d+1:d,!0)},className:$(["pdp-carousel__controls__button",["pdp-carousel__controls__button--active",S]])},d)})})}),(w||A)&&!y&&De]})]})};function $e(l,s=0){if(typeof l=="number")return l;const{small:_,medium:b,large:p}=l,y=786;return s>1024?p:s>y?b:_}const Ke=({title:l,breadcrumbs:s,galleryContent:_,infoContent:b,productContent:p,sku:y,outOfStock:u,shortDescription:D,description:n,attributes:C,images:a,options:v,price:H,specialPrice:q,className:ee,children:A,quantity:P,actions:h,carouselConfig:t,...k})=>{var B,X,ne,Y,ce,x;const O=G("PDP.Product.RegularPrice.label").label,f=G("PDP.Product.SpecialPrice.label").label,r=G("PDP.Product.OutOfStock.label").label,g=G("PDP.Product.Image.label").label,[Z,M]=K(null),J=a!=null&&a.length?a.map((le,U)=>{var j;return e(V,{node:le,loading:U===0?"eager":"lazy",alt:((j=l==null?void 0:l.props)==null?void 0:j.children)&&(g==null?void 0:g.replace("{product}",l.props.children.toString()).replace("{key}",String(U+1)).replace("{total}",String(a.length))),onClick:()=>M(U)},U)}):e("img",{src:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",className:"pdp-product__images__placeholder","aria-hidden":!0}),R=(B=t==null?void 0:t.thumbnails)!=null&&B.length?t.thumbnails.map((le,U)=>{var j;return e(V,{node:le,loading:(t==null?void 0:t.thumbnailsLoadingMode)||"lazy",alt:((j=l==null?void 0:l.props)==null?void 0:j.children)&&(g==null?void 0:g.replace("{product}",l.props.children.toString()).replace("{key}",String(U+1)).replace("{total}",String(a.length)))},U)}):e("img",{src:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",className:"pdp-product__images__placeholder","aria-hidden":!0});return W("div",{...k,className:$(["pdp-product",ee]),children:[s&&e(V,{node:s,className:"pdp-product__breadcrumbs"}),W("div",{className:"pdp-product__column-container pdp-product__gallery-column",children:[e("div",{className:"pdp-product__column-body",children:t!=null&&t.controls?e(me,{className:"pdp-product__overlay__carousel",arrows:(a==null?void 0:a.length)>1,controls:(a==null?void 0:a.length)>1?t.controls:"dots",arrowsOnMainImage:t==null?void 0:t.arrowsOnMainImage,loop:(t==null?void 0:t.loopable)&&(a==null?void 0:a.length)>1,peak:((X=t==null?void 0:t.thumbnails)==null?void 0:X.length)>1&&((ne=t==null?void 0:t.peak)==null?void 0:ne.desktop)||!1,gap:(t==null?void 0:t.gap)||null,width:"100%",height:"100%",defaultIndex:Z||0,thumbnails:R,children:J}):e(Qe,{className:"pdp-product__images",gap:"small",children:J})}),_&&e(V,{node:_,className:"pdp-product__gallery-content"})]}),W("div",{className:"pdp-product__column-container pdp-product__content-column",children:[W("div",{className:"pdp-product__column-body",children:[W("div",{className:"pdp-product__header",children:[l&&e(V,{node:l,className:"pdp-product__title"}),y&&e(V,{node:y,className:"pdp-product__sku"})]}),W("div",{className:"pdp-product__prices",children:[q&&e(V,{node:q,className:$(["pdp-product__price-special","pdp-product__price"]),"aria-label":f,role:"text"}),H&&e(V,{node:H,className:$(["pdp-product__price-regular","pdp-product__price--grey"]),"aria-label":O,role:"text"})]}),t!=null&&t.mobile?e(me,{className:"pdp-product__images pdp-product__images--carousel pdp-product__images--carousel--thumbnails",width:"100%",height:"auto",arrows:(a==null?void 0:a.length)>1,controls:(a==null?void 0:a.length)>1?"thumbnailsRow":null,loop:(t==null?void 0:t.loopable)&&(a==null?void 0:a.length)>1,peak:((Y=t==null?void 0:t.thumbnails)==null?void 0:Y.length)>1&&((ce=t==null?void 0:t.peak)==null?void 0:ce.mobile)||!1,gap:(t==null?void 0:t.gap)||null,thumbnails:R,children:J}):e(me,{className:"pdp-product__images pdp-product__images--carousel",peak:((x=t==null?void 0:t.peak)==null?void 0:x.mobile)&&(a==null?void 0:a.length)>1,gap:(t==null?void 0:t.gap)||null,width:"100%",height:"auto",arrows:(a==null?void 0:a.length)>1,controls:(a==null?void 0:a.length)>1?"dots":null,loop:(t==null?void 0:t.loopable)&&(a==null?void 0:a.length)>1,children:J}),W("div",{className:$(["pdp-product__actions",["pdp-product__actions--out-of-stock",u]]),children:[u&&e("div",{className:"pdp-product__out-of-stock__text",children:r}),v&&e(V,{node:v,className:$(["pdp-product__options"])}),P&&e("div",{className:"pdp-product__quantity",children:e(V,{node:P})}),h&&e(V,{node:h,className:$(["pdp-product__buttons"])})]}),D&&e(V,{node:D,className:$(["pdp-product__short_description"])}),n&&e(V,{node:n,className:$(["pdp-product__description"])}),C?e("div",{className:"pdp-product__attributes",children:C}):null]}),b&&e(V,{node:b,className:"pdp-product__info-content"})]}),p&&e(V,{node:p,className:"pdp-product__content"}),Z===null?null:e(Ze,{className:"pdp-product__overlay",onClose:()=>M(null),centered:!0,children:e(me,{className:"pdp-product__overlay__carousel",arrows:(a==null?void 0:a.length)>1,width:"100%",height:"100%",defaultIndex:Z||0,loop:(a==null?void 0:a.length)>1,controls:(a==null?void 0:a.length)>1?"dots":null,isZoomed:!0,children:J})})]})},Qe=({children:l,gap:s=null,className:_,style:b,...p})=>{const y=te.count(l);return e("div",{...p,className:$(["pdp-gallery-grid",_]),style:{"--gap":s?`var(--spacing-${s})`:"0px",...b},children:te.map(l,(u,D)=>e("div",{className:"pdp-gallery-grid__item",children:e(V,{node:u,loading:D===0?"eager":"lazy"},u.props.src)},y+D))})},ke=({amount:l,currency:s,locale:_,variant:b,sale:p,minimumAmount:y,maximumAmount:u,className:D,...n})=>e(Pe,{children:l||y===u?e("div",{className:"pdp-price-range",...n,children:e(ye,{amount:l||y,currency:s,locale:_,variant:b,sale:p,className:D})}):W("div",{className:"pdp-price-range",...n,children:[e(ye,{amount:y,currency:s,locale:_,className:D}),e("span",{className:"pdp-price-range__label",children:"-"}),e(ye,{amount:u,currency:s,locale:_,className:D})]})}),Ze=({centered:l,onClose:s,className:_,children:b,...p})=>{const y=G("PDP.Overlay.Close.label").label,u=Q(()=>{s==null||s()},[s]);return re(()=>{const D=n=>{n.key==="Escape"&&u()};return document.addEventListener("keydown",D),()=>{document.removeEventListener("keydown",D)}},[u]),re(()=>{const D=document.scrollingElement,n=D.style.overflow;return D.style.overflow="hidden",()=>{D.style.overflow=n}},[]),W("div",{...p,className:$(["pdp-overlay",["pdp-overlay--centered",l],_]),children:[e("div",{className:"pdp-overlay__content",children:b}),e(we,{"aria-label":y,variant:"tertiary",className:"pdp-overlay__close-button",onClick:u,icon:e(Fe,{})})]})},Je=["text","image","color","dropdown"],Xe=l=>l.map(s=>({...s,text:s.label,disabled:!s.inStock})),Ye=({options:l,hideSelectedValue:s,onValues:_,onErrors:b,defaultOptions:p,selectionsToUpdate:y,className:u,children:D,...n})=>{const C=G("PDP.Swatches.Required.label").label,[a,v]=K(()=>l==null?void 0:l.reduce((P,h)=>{const{items:t}=h,k=t==null?void 0:t.find(f=>p==null?void 0:p.includes(f.id)),O=t==null?void 0:t.find(f=>f.selected);return k?{...P,[h.id]:{label:k.label,value:k.id}}:O?{...P,[h.id]:{label:O.label,value:O.id}}:P},{}));re(()=>{y==null||y.forEach(A=>{v(P=>{var k;const h=(k=A==null?void 0:A.items)==null?void 0:k.find(O=>O.selected);return h?{...P,[A.id]:{label:h==null?void 0:h.label,value:h==null?void 0:h.id}}:P})})},[y,v]),ve(()=>{const A=l==null?void 0:l.reduce((P,h)=>{var t;return(t=h==null?void 0:h.items)==null||t.forEach(k=>{var f;const O=((f=a[h.id])==null?void 0:f.value)===k.id;h.required&&!O&&(P[h.id]=C)}),P},{});return b==null||b(A),A},[a]);const H=Q((A,P,h)=>{v(t=>{const k={...t,[A]:{label:P,value:h}};return _==null||_(k,h),k})},[_]),q=(A,P)=>{var t;const h=((t=P.selectedOptions[0])==null?void 0:t.label)??"";H(A,h,P.value)},ee=Q(({items:A,id:P,required:h,type:t,selected:k,label:O})=>e("div",{className:$(["pdp-swatches__options"]),children:(t==null?void 0:t.toLowerCase())==="dropdown"?e(Ve,{"aria-label":O,handleSelect:f=>q(P,f.target),options:Xe(A),value:k}):A==null?void 0:A.map(f=>{const r={key:f.id,id:f.id,name:P,value:f.value,label:f.label,groupAriaLabel:O,selected:k===f.id,outOfStock:!f.inStock,required:h===null?!0:h,onValue:()=>{H(P,f.label,f.id)}};switch(t){case"text":return e(ze,{...r,label:f.label});case"image":return e(qe,{...r,src:f.value,alt:f.label});case"color":return e(He,{...r,size:"large",color:f.value});default:return console.warn(`Invalid swatch type ${t}`),null}})}),[H]);return e("div",{...n,className:$(["pdp-swatches",u]),children:l==null?void 0:l.map(({type:A,label:P,id:h,multiple:t,required:k,items:O})=>{var f;if(!A){console.warn("Bundle product not supported on UI.");return}return Je.includes(A)||console.warn(`Invalid swatch type ${A}`),t&&console.warn("Multiple selection swatches are not currently supported."),W("div",{id:`swatch-item-${h}`,"data-slot-key":`product-swatch--${h}`,className:"pdp-swatches__field",children:[e("div",{className:"pdp-swatches__field__label",children:a[h]?s?`${P}`:`${P}: ${a[h].label}`:P}),e(ee,{id:h,type:A,required:k,items:O,label:P,selected:(f=a[h])==null?void 0:f.value})]},`swatch-item-${h}`)})})};function Ce(l,s="en_US"){if(!Me(l))throw Error("Invalid date string");return l.split(" ")[1]||(l=`${l} 00:00:00`),new Date(l).toLocaleDateString(Ne(s)).toString()}function Me(l){if(![/^\d{4}-\d{2}-\d{2}$/,/^\d{1,2}\/\d{1,2}\/\d{4}$/,/^\d{2}\/\d{2}\/\d{4}$/,/^\d{4}\/\d{2}\/\d{2}$/,/^\d{1,2}\.\d{1,2}\.\d{4}$/,/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/].some(b=>b.test(l)))return!1;const _=new Date(l);return!isNaN(_.getTime())}function et(l){const s=new URLSearchParams(window.location.search);Object.entries(l).forEach(([b,p])=>{p===null?s.delete(b):s.set(b,String(p))});let _=window.location.pathname;_+=`?${s.toString()}`,_+=window.location.hash,window.history.replaceState({},"",_)}function tt(){const l=new URLSearchParams(window.location.search),s={};return l.forEach((_,b)=>{s[b]=_}),s}const rt=({sku:l,hideSku:s,hideQuantity:_,hideShortDescription:b,hideDescription:p,hideAttributes:y,hideURLParams:u,hideSelectedOptionValue:D,slots:n,children:C,initialData:a,carousel:v,optionsConfig:H,onAddToCart:q,...ee})=>{var j,pe,oe,se;const A=G("PDP.Product.AddToCart.label").label,P=G("PDP.Product.Incrementer.label").label,h=G("PDP.Product.Details.label").label,[t,k]=K(Ee.getConfig().defaultLocale||"en-US"),[O,f]=K(),[r=null,g]=K(a),[Z,M]=K(()=>{const i={sku:l,quantity:1};return r!=null&&r.optionUIDs&&(i.optionsUIDs=r.optionUIDs),i}),[J,R]=K(()=>{var i,o;return!(r!=null&&r.options&&((i=r==null?void 0:r.options)==null?void 0:i.length)>0&&((o=r==null?void 0:r.optionUIDs)==null?void 0:o.length)!==(r==null?void 0:r.options.length))}),B={data:r,values:Z,valid:J};re(()=>{const i=Te.on("locale",o=>{o!==t&&(k(o),Be(l).then(g))});return()=>{i==null||i.off()}},[t,l]);const X=Q(i=>{M(o=>({...o,...i}))},[]),ne=Q(i=>{var m;let o=Object.keys(i).map(N=>i[N].value).filter(N=>N!==void 0);u||et({optionsUIDs:o.join(",")}),M(N=>({...N,optionsUIDs:o})),R((o==null?void 0:o.length)===((m=r==null?void 0:r.options)==null?void 0:m.length)),Ie(l,o,H==null?void 0:H.anchorOptions).then(N=>{var w;g(N),(w=H==null?void 0:H.anchorOptions)!=null&&w.length&&Y(N,o)})},[l]),Y=Q((i,o)=>{var w;const m=(i==null?void 0:i.optionUIDs)??[];o.every(F=>m.includes(F))||(f(i==null?void 0:i.options),M(F=>({...F,optionsUIDs:m})),R((m==null?void 0:m.length)===((w=i==null?void 0:i.options)==null?void 0:w.length)))},[l]),ce=Q(i=>{Object.keys(i).length!==0&&R(!1)},[]),x=ve(()=>{var i;return(i=r==null?void 0:r.attributes)==null?void 0:i.map(({label:o,value:m},N)=>{const w=Me(m)?Ce(m,t):m.toString();return W("li",{children:[o,": ",e("span",{dangerouslySetInnerHTML:{__html:w}})]},N)})},[r==null?void 0:r.attributes,t]),le=!_&&(r!=null&&r.inStock)?e(T,{name:"Quantity",slot:n==null?void 0:n.Quantity,context:{...B},children:e(Ge,{name:"quantity",defaultValue:Z.quantity.toString(),min:1,"aria-label":P,className:"pdp-product__quantity",onValue:i=>{X({quantity:Number(i)})}},"quantity")}):void 0,U=()=>{if(r!=null&&r.options)return e(T,{name:"Options",slot:n==null?void 0:n.Options,context:{...B},children:e(Ye,{options:r.options,defaultOptions:Z.optionsUIDs,selectionsToUpdate:O,hideSelectedValue:D,onValues:ne,onErrors:ce})})};return e("div",{...ee,children:e(Ke,{title:e(T,{name:"Title",slot:n==null?void 0:n.Title,context:{...B},children:r==null?void 0:r.name}),sku:s?void 0:e(T,{name:"SKU",slot:n==null?void 0:n.SKU,context:{...B},children:r==null?void 0:r.sku}),options:U(),breadcrumbs:(n==null?void 0:n.Breadcrumbs)&&e(T,{name:"Breadcrumbs",slot:n==null?void 0:n.Breadcrumbs,context:{...B,setSeparator(i){this._registerMethod((...o)=>{const m=i(...o),N=m&&e(be,{source:m});this._setProps(w=>({...w,separator:N}))})},appendLink(i){this._registerMethod((...o)=>{const{text:m,...N}=i(...o),w=e("a",{...N,children:m});this._setProps(F=>({...F,categories:[...F.categories||[],w]}))})},appendHTMLElement(i){this._registerMethod((...o)=>{const m=i(...o),N=this._htmlElementToVNode(m);this._setProps(w=>({...w,categories:[...w.categories||[],N]}))})}},render:({separator:i,categories:o})=>e(Ue,{separator:i,categories:o})}),quantity:le,actions:e(T,{name:"Actions",slot:n==null?void 0:n.Actions,context:{...B,appendButton(i){this._registerMethod((...o)=>{const m=i(...o);if(!m)return;const{text:N,icon:w,...F}=m,z=e(we,{type:"button",...F,icon:w&&e(be,{source:w}),children:N});this._setProps(ae=>({children:[...ae.children||[],z]}))})}},children:!(n!=null&&n.Actions)&&e(we,{size:"medium",type:"submit",icon:e(be,{source:"Cart"}),disabled:!(r!=null&&r.inStock)||!J,"aria-label":A,onClick:()=>q==null?void 0:q(Z),children:A})}),shortDescription:b?void 0:e(T,{name:"ShortDescription",slot:n==null?void 0:n.ShortDescription,context:{...B},children:e("div",{dangerouslySetInnerHTML:{__html:(r==null?void 0:r.shortDescription)??""}})}),description:p?void 0:e(T,{name:"Description",slot:n==null?void 0:n.Description,context:{...B},children:e("div",{dangerouslySetInnerHTML:{__html:(r==null?void 0:r.description)??""}})}),images:((j=r==null?void 0:r.images)==null?void 0:j.map(({label:i,url:o})=>{var m,N;return e(xe,{title:i,alt:i,src:o,width:((m=v==null?void 0:v.imageParams)==null?void 0:m.width)??960,height:((N=v==null?void 0:v.imageParams)==null?void 0:N.height)??1191,params:(v==null?void 0:v.imageParams)??{width:960}},o)}))??[],specialPrice:(pe=r==null?void 0:r.prices)!=null&&pe.visible?e(T,{name:"SpecialPrice",slot:n==null?void 0:n.SpecialPrice,context:{...B},children:e(ke,{...r.prices.final,locale:Ne(t)})}):void 0,price:(oe=r==null?void 0:r.prices)!=null&&oe.visible&&r.prices.regular&&r.prices.final.amount!==(r==null?void 0:r.prices.regular.amount)?e(T,{name:"RegularPrice",slot:n==null?void 0:n.RegularPrice,context:{...B},children:e(ke,{...r.prices.regular,locale:Ne(t)})}):void 0,carouselConfig:{...v,thumbnails:v?((se=r==null?void 0:r.images)==null?void 0:se.map(({label:i,url:o})=>{var m,N;return e(xe,{title:i,alt:i,src:o,width:((m=v==null?void 0:v.thumbnailParams)==null?void 0:m.width)??200,height:((N=v==null?void 0:v.thumbnailParams)==null?void 0:N.height)??248,params:(v==null?void 0:v.thumbnailParams)??{width:200}},o)}))??[]:[]},outOfStock:!(r!=null&&r.inStock),attributes:y?void 0:e(T,{name:"Attributes",slot:n==null?void 0:n.Attributes,context:{...B},children:x!=null&&x.length?W(Pe,{children:[h,e("ul",{children:x})]}):null}),galleryContent:(n==null?void 0:n.GalleryContent)&&e(T,{name:"GalleryContent",slot:n.GalleryContent,context:{...B}}),infoContent:(n==null?void 0:n.InfoContent)&&e(T,{name:"InfoContent",slot:n.InfoContent,context:{...B}}),productContent:(n==null?void 0:n.Content)&&e(T,{name:"Content",slot:n.Content,context:{...B}})})})};rt.getInitialData=async function({sku:l,optionsConfig:s}){var b,p,y,u,D,n;const _=((b=tt().optionsUIDs)==null?void 0:b.split(","))||((n=(D=(u=(y=(p=Ee)==null?void 0:p.getConfig())==null?void 0:y.models)==null?void 0:u.ProductDetails)==null?void 0:D.initialData)==null?void 0:n.optionsUIDs);return _!=null&&_.length?await Ie(l,_,s==null?void 0:s.anchorOptions):await Be(l)};export{rt as ProductDetails,rt as default};
2
2
  //# sourceMappingURL=ProductDetails.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProductDetails.js","sources":["../../node_modules/@adobe/elsie/src/icons/ChevronDown.svg","../../node_modules/@adobe/elsie/src/icons/Close.svg","../../src/components/Carousel/Carousel.tsx","../../src/components/Product/Product.tsx","../../src/components/GalleryGrid/GalleryGrid.tsx","../../src/components/PriceRange/PriceRange.tsx","../../src/components/Overlay/Overlay.tsx","../../src/components/Swatches/Swatches.tsx","../../src/lib/date.ts","../../src/lib/url-params.ts","../../src/containers/ProductDetails/ProductDetails.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgChevronDown = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M7.74512 9.87701L12.0001 14.132L16.2551 9.87701\", stroke: \"currentColor\", strokeWidth: 1.5, strokeLinecap: \"square\", strokeLinejoin: \"round\" }));\nexport default SvgChevronDown;\n","import * as React from \"react\";\nconst SvgClose = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M18.3599 5.64001L5.62988 18.37\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M18.3599 18.37L5.62988 5.64001\", stroke: \"currentColor\" }));\nexport default SvgClose;\n","import { FunctionComponent, VNode } from 'preact';\nimport {\n HTMLAttributes,\n Children,\n useState,\n useRef,\n useEffect,\n useMemo,\n useCallback,\n} from 'preact/compat';\nimport { classes, debounce } from '@adobe/elsie/lib';\nimport { Button, Icon } from '@adobe/elsie/components';\nimport { ChevronDown } from '@adobe/elsie/icons';\nimport { useText } from '@adobe/elsie/i18n';\n\nimport '@/pdp/components/Carousel/Carousel.css';\n\ntype Show = number;\n\nexport interface CarouselProps extends Omit<HTMLAttributes<HTMLDivElement>, 'controls'> {\n children: VNode[] | VNode;\n thumbnails?: VNode[] | VNode;\n show?: Show | { small: Show; medium: Show; large: Show };\n gap?: 'small' | 'medium' | 'large' | null;\n scrollbar?: boolean;\n peak?: boolean;\n arrows?: boolean;\n controls?: 'thumbnailsRow' | 'thumbnailsColumn' | 'dots' | null;\n arrowsOnMainImage?: boolean;\n loop?: boolean;\n direction?: 'horizontal';\n style?: Record<string, string | number>;\n width?: string;\n height?: string;\n defaultIndex?: number;\n infinite?: boolean;\n isZoomed?: boolean;\n}\n\nexport const Carousel: FunctionComponent<CarouselProps> = ({\n show = 1,\n scrollbar = false,\n peak = false,\n arrows = false,\n controls = 'dots',\n arrowsOnMainImage = false,\n loop = false,\n gap = null,\n direction = 'horizontal',\n width = '100%',\n height = '100%',\n defaultIndex = 0,\n className,\n children,\n thumbnails = null,\n isZoomed,\n ...props\n}) => {\n // i18n\n const Label = useText('PDP.Carousel.label').label;\n const SlideLabel = useText('PDP.Carousel.Slide.label').label;\n const PreviousLabel = useText('PDP.Carousel.Previous.label').label;\n const NextLabel = useText('PDP.Carousel.Next.label').label;\n const ControlsLabel = useText('PDP.Carousel.Controls.label').label;\n const ControlsBtnLabel = useText('PDP.Carousel.Controls.Button.label').label;\n\n // States\n const [perPage, setPerPage] = useState(() => getPerPageFromBreakpoint(show));\n\n // Constants\n const length = Math.ceil(Children.toArray(children).length / perPage);\n const gapSizes = { small: 16, medium: 24, large: 64 };\n const peakWidth = peak ? 24 : 0;\n const gapWidth = gap ? gapSizes[gap] : 0;\n const rest = Children.toArray(children).length % perPage;\n const thumbGap = 16;\n const thumbSeen = 2;\n const iconSize = '32';\n\n // States\n const [current, setCurrent] = useState(\n loop ? defaultIndex + 1 : defaultIndex\n );\n\n // Thumbnails\n const thumbnailsRefs = useRef<HTMLLabelElement[]>([]);\n const [thumbWidth, setThumbWidth] = useState(0);\n const [thumbHeight, setThumbHeight] = useState(0);\n \n const thumbnailSlides = useMemo<VNode[]>(() => {\n return Children.toArray(thumbnails);\n }, [thumbnails]);\n\n // Slides\n const slides = useMemo<VNode[][]>(() => {\n const returnValue = Children.toArray(children).reduce((acc, child, i) => {\n if (i % perPage === 0) {\n return [...acc, [child]];\n }\n\n return [...acc.slice(0, -1), [...acc[acc.length - 1], child]];\n }, [] as VNode[][]);\n\n if (!loop || returnValue.length === 1) {\n return returnValue;\n }\n\n if (loop && !(Children.toArray(children).length % perPage !== 0)) {\n return [returnValue[length - 1]]\n .concat(returnValue)\n .concat([returnValue[0], returnValue[1]]);\n }\n\n return [Children.toArray(children).slice(-perPage)]\n .concat(returnValue)\n .concat([returnValue[0], returnValue[1]]);\n }, [children, perPage, length, loop]);\n\n // Wrapper\n const wrapperRef = useRef<HTMLDivElement>(null);\n const thumbnailsWrapperRef = useRef<HTMLDivElement>(null);\n const thumbnailControls = controls === 'thumbnailsRow' || controls === 'thumbnailsColumn';\n\n // Observe Window Resize (responsive)\n useEffect(() => {\n const wrapper = document.body;\n\n const handleResize = debounce(() => {\n setThumbWidth(wrapperRef.current?.offsetWidth ?? 0)\n setThumbHeight(wrapperRef.current?.offsetHeight ?? 0)\n const width = window.innerWidth;\n const newPerPage = getPerPageFromBreakpoint(show, width);\n\n if (newPerPage !== perPage) {\n setPerPage(newPerPage);\n }\n }, 50);\n\n const observer = new ResizeObserver(handleResize);\n observer.observe(wrapper);\n\n return () => {\n observer.unobserve(wrapper);\n };\n }, [perPage, show]);\n\n // Scrolling logic controls\n const handleThumbnailsScroll = useCallback((nextSlideIndex: number) => {\n const nextItem = loop ? nextSlideIndex - 1 : nextSlideIndex;\n const thumbnailRef = thumbnailsRefs?.current[0];\n const oneItemWidth = thumbnailRef?.offsetWidth + thumbGap;\n const oneItemHeight = thumbnailRef?.offsetHeight + thumbGap;\n const thumbnailsWrapper = thumbnailsWrapperRef.current!;\n\n if (controls === 'thumbnailsRow' && thumbnailsWrapper?.offsetWidth) {\n if (oneItemWidth * (nextItem + 1) > thumbnailsWrapper.offsetWidth) {\n thumbnailsWrapper.style.scrollBehavior = 'smooth';\n thumbnailsWrapper.scrollLeft = (nextItem + thumbSeen) * oneItemWidth;\n }\n\n if (thumbnailsWrapper.scrollLeft > oneItemWidth * nextItem) {\n thumbnailsWrapper.style.scrollBehavior = 'smooth';\n thumbnailsWrapper.scrollLeft = (nextItem - thumbSeen) * oneItemWidth;\n }\n }\n\n if (controls === 'thumbnailsColumn' && thumbnailsWrapper?.offsetHeight) {\n if (oneItemHeight * (nextItem + 1) > thumbnailsWrapper.offsetHeight) {\n thumbnailsWrapper.style.scrollBehavior = 'smooth';\n thumbnailsWrapper.scrollTop = (nextItem + thumbSeen) * oneItemHeight;\n }\n\n if (thumbnailsWrapper.scrollTop > oneItemHeight * nextItem) {\n thumbnailsWrapper.style.scrollBehavior = 'smooth';\n thumbnailsWrapper.scrollTop = (nextItem - thumbSeen) * oneItemHeight;\n }\n }\n }, [controls, loop]);\n\n // Navigation\n const handleScrollTo = useCallback(\n (nextSlideIndex: number, smooth?: boolean, reset?: boolean) => {\n if (controls === 'thumbnailsRow' || controls === 'thumbnailsColumn') {\n handleThumbnailsScroll(nextSlideIndex);\n }\n\n const wrapper = wrapperRef.current!;\n const realWidth = peakWidth\n ? wrapper.offsetWidth - peakWidth\n : wrapper.offsetWidth - peakWidth + gapWidth;\n\n const items = Array.from(wrapper.querySelectorAll('[data-index]')).filter(\n (element) => {\n const dataIndex = Number(element.getAttribute('data-index')!);\n return !isNaN(dataIndex) && dataIndex > -1;\n }\n );\n\n const item = items[nextSlideIndex];\n\n if (!item) {\n return;\n }\n\n if (reset) {\n const futureIndex = nextSlideIndex === 0 ? length : 0;\n const scrollWidth =\n realWidth * (length + (rest ? rest : perPage) / perPage);\n\n if (wrapper.scrollLeft >= 0 && wrapper.scrollLeft < realWidth - 5) {\n handleScrollTo(1, true);\n return;\n }\n\n if (\n wrapper.scrollLeft > scrollWidth - realWidth &&\n wrapper.scrollLeft <= scrollWidth\n ) {\n handleScrollTo(length, true);\n return;\n }\n\n wrapper.style.scrollBehavior = 'auto';\n wrapper.scrollLeft = futureIndex === 0 ? 0 : scrollWidth;\n handleScrollTo(futureIndex === 0 ? 1 : length, true);\n return;\n }\n\n const diff =\n ((wrapper.offsetWidth - gapWidth) / perPage) *\n slides[nextSlideIndex].length -\n peakWidth;\n\n wrapper.style.scrollBehavior = smooth ? 'smooth' : 'auto';\n wrapper.scrollLeft =\n slides[nextSlideIndex].length === perPage\n ? realWidth * nextSlideIndex\n : realWidth * (nextSlideIndex - 1) + diff;\n return;\n },\n [gapWidth, length, peakWidth, perPage, rest, slides, handleThumbnailsScroll, controls]\n );\n\n const handleGoToPrev = useCallback(() => {\n if (loop) {\n const nextSlideIndex = current - 1;\n handleScrollTo(nextSlideIndex, true, current === 1);\n return;\n }\n\n const nextSlideIndex = current <= 0 ? 0 : current - 1;\n\n handleScrollTo(nextSlideIndex, true);\n }, [current, handleScrollTo, loop]);\n\n const handleGoToNext = useCallback(() => {\n const lastSlideIndex = slides.length - 1;\n\n if (loop) {\n const nextSlideIndex = current + 1;\n handleScrollTo(nextSlideIndex, true, current === length);\n return;\n }\n\n const nextSlideIndex =\n current >= lastSlideIndex ? lastSlideIndex : current + 1;\n\n handleScrollTo(nextSlideIndex, true);\n }, [slides.length, loop, current, handleScrollTo, length]);\n\n // Navigate with keyboard\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n handleGoToPrev();\n }\n\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n handleGoToNext();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [handleGoToNext, handleGoToPrev]);\n\n // Set default index\n useEffect(() => {\n handleScrollTo(loop ? defaultIndex + 1 : defaultIndex, false);\n }, [defaultIndex, handleScrollTo, loop]);\n\n // Track scrolling (swipes)\n const handleOnScroll = debounce(() => {\n const wrapper = wrapperRef.current!;\n const realWidth = peakWidth\n ? wrapper.offsetWidth - peakWidth\n : wrapper.offsetWidth - peakWidth + gapWidth;\n const dividing = wrapper.scrollLeft / realWidth;\n const nextSlideIndex = Math.round(dividing) - dividing < 1 ? Math.round(dividing) : Math.ceil(dividing);\n\n if (thumbnailControls) {\n handleThumbnailsScroll(nextSlideIndex);\n }\n\n if (loop) {\n const totalWidth =\n realWidth * (length + (rest ? rest : perPage) / perPage);\n\n if (Math.ceil(wrapper.scrollLeft) >= Math.ceil(totalWidth) - 5) {\n wrapper.style.scrollBehavior = 'auto';\n wrapper.scrollLeft =\n wrapper.offsetWidth * 1 +\n (Math.ceil(wrapper.scrollLeft) - Math.ceil(totalWidth) - peakWidth);\n return;\n }\n\n if (wrapper.scrollLeft === 0) {\n wrapper.style.scrollBehavior = 'auto';\n wrapper.scrollLeft = totalWidth - wrapper.offsetWidth + peakWidth;\n return;\n }\n }\n\n if (current !== nextSlideIndex) {\n setCurrent(nextSlideIndex);\n }\n }, 100);\n\n useEffect(() => {\n const wrapper = wrapperRef.current;\n wrapper?.addEventListener('scroll', handleOnScroll);\n\n return () => {\n wrapper?.removeEventListener('scroll', handleOnScroll);\n };\n }, [handleOnScroll]);\n\n // thumbnails is column -> container is row reverse, controls is column\n // thumbnails is row -> container is column, controls is row\n const getArrow = (forThumbnails: boolean, direction: string, callback: () => void) => {\n return <Button\n className={classes([\n ['pdp-carousel__button', !forThumbnails],\n [`pdp-carousel__button--${direction}`, !forThumbnails],\n [`pdp-carousel__button--${controls}`, forThumbnails]\n ])}\n style={{\n '--height': `${thumbHeight}px`,\n }}\n variant=\"tertiary\"\n aria-label={direction === 'next' ? NextLabel : PreviousLabel}\n onClick={callback}\n disabled={loop ? false : direction === 'next' ? current >= slides.length - 1 : current < 1}\n >\n <Icon\n className={classes([\n ['pdp-carousel__button__icon', !forThumbnails],\n [`pdp-carousel__button__icon--${direction}`, !forThumbnails],\n [`pdp-carousel__button__icon--${controls}--${direction}`, forThumbnails]\n ])}\n size={iconSize}\n source={ChevronDown}\n />\n </Button>\n }\n\n const prevArrow = arrows && slides.length != 1 && getArrow(thumbnailControls, 'prev', handleGoToPrev);\n\n const nextArrow = arrows && slides.length != 1 && getArrow(thumbnailControls, 'next', handleGoToNext);\n\n const prevArrowMainImage = arrows && slides.length != 1 && getArrow(false, 'prev', handleGoToPrev);\n \n const nextArrowMainImage = arrows && slides.length != 1 && getArrow(false, 'next', handleGoToNext);\n\n return (\n <div\n role=\"region\"\n aria-roledescription={Label}\n className={classes([\n 'pdp-carousel',\n ['pdp-carousel--main-image-controls', arrowsOnMainImage],\n ['pdp-carousel--arrows', arrows && !thumbnailControls],\n [`pdp-carousel--${controls}`, thumbnailControls],\n className,\n ])}\n style={{\n '--flex-carousel': controls === 'thumbnailsColumn' ? 'row-reverse' : 'column',\n '--gap': thumbnailControls ? '0' : 'var(--spacing-small)',\n '--width': width,\n }}\n {...props}\n >\n\n {/* Slideshow */}\n <div\n ref={wrapperRef}\n className={classes([\n 'pdp-carousel__wrapper',\n `pdp-carousel__wrapper--${direction}`,\n ['pdp-carousel__wrapper--scrollbar', scrollbar],\n ['pdp-carousel__wrapper--peak', peak],\n ])}\n style={{\n '--total-width': controls === 'thumbnailsColumn' ? `81.6%` : `100%`,\n '--height': controls === 'thumbnailsColumn' ? 'auto' : height,\n '--gap': gap ? `var(--spacing-${gap})` : '0px',\n '--per-page': perPage,\n }}\n tabIndex={0}\n >\n {slides.map((page, index) => {\n const orphan = page.length < perPage;\n\n return (\n <div\n key={index}\n role=\"group\"\n aria-roledescription={SlideLabel}\n data-index={index}\n className={classes([\n 'pdp-carousel__slide',\n `pdp-carousel__slide--${direction}`,\n ['pdp-carousel__slide--active', current === index],\n ['pdp-carousel__slide--orphan', orphan],\n ])}\n style={{\n '--length': page.length,\n }}\n >\n {page}\n </div>\n );\n })}\n </div>\n\n {/* Previous and next arrows for Carousel without thumbnails */}\n {\n (!thumbnailControls) && (\n <>\n {prevArrow}\n {nextArrow}\n </>\n )\n }\n\n {\n (thumbnailControls && arrowsOnMainImage) && (\n <>\n {prevArrowMainImage}\n {nextArrowMainImage}\n </>\n )\n }\n\n {/* Controls */}\n {controls && slides.length != 1 && (\n <div\n className={classes([\n [`pdp-carousel__controls__container--${controls}`, thumbnailControls],\n ['pdp-carousel__controls__container--no-arrows', !arrows || arrowsOnMainImage],\n ])}\n style={{\n '--width': controls === 'thumbnailsRow' ? `${thumbWidth}px` : width,\n '--height': `${thumbHeight}px`,\n '--nr-thumbnails': thumbnailSlides.length,\n }}\n >\n {(thumbnailControls || isZoomed) && !arrowsOnMainImage && prevArrow}\n <div\n ref={thumbnailsWrapperRef}\n className={classes([\n [`pdp-carousel__controls__wrapper--${controls}`, thumbnailControls],\n [`pdp-carousel__controls__wrapper`, thumbnailControls],\n ])}\n >\n <div\n role=\"group\"\n aria-label={ControlsLabel}\n className={classes([\n 'pdp-carousel__controls',\n [`pdp-carousel__controls--${controls}`, thumbnailControls],\n ])}\n >\n {(loop ? slides.slice(0, length) : slides).map((_, key) => {\n const buttonsLength = loop ? length : slides.length;\n const active = loop ? current - 1 === key : current === key;\n\n if (!thumbnailControls) {\n return (\n <button\n key={key}\n aria-label={ControlsBtnLabel.replace(\n '{key}',\n String(key + 1)\n ).replace('{total}', String(buttonsLength))}\n onClick={() => {\n handleScrollTo(loop ? key + 1 : key, true);\n }}\n className={classes([\n 'pdp-carousel__controls__button',\n ['pdp-carousel__controls__button--active', active],\n ])}\n />\n );\n }\n return (\n <label\n className={classes(['pdp-carousel__thumbnail__container'])}\n key={key}\n ref={(el: HTMLLabelElement | null) => {\n if (el) {\n thumbnailsRefs.current[key] = el;\n }\n }}\n >\n <input\n type=\"radio\"\n name={\"carousel-thumbnails\"}\n aria-label={ControlsBtnLabel.replace(\n '{key}',\n String(key + 1)\n ).replace('{total}', String(buttonsLength))}\n checked={active && thumbWidth !== 0}\n onChange={() => {\n handleScrollTo(loop ? key + 1 : key, true);\n }}\n {...props}\n className={classes([\n 'pdp-carousel__thumbnail',\n ['pdp-carousel__thumbnail--selected', active && thumbWidth !== 0],\n ])}\n />\n\n <span\n className={classes([\n 'pdp-carousel__thumbnail__span',\n ])}\n >\n {thumbnailSlides[key]}\n </span>\n </label>\n )\n })}\n </div>\n </div>\n {(thumbnailControls || isZoomed) && !arrowsOnMainImage && nextArrow}\n </div>\n )}\n </div>\n );\n};\n\n// Utilities\nfunction getPerPageFromBreakpoint(\n breakpoints:\n | {\n small: number;\n medium: number;\n large: number;\n }\n | number,\n width = 0\n) {\n if (typeof breakpoints === 'number') return breakpoints;\n\n const { small, medium, large } = breakpoints;\n const mediumViewport = 786;\n const largeVierport = 1024;\n\n if (width > largeVierport) return large;\n if (width > mediumViewport) return medium;\n return small;\n}\n","import { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes, useState } from 'preact/compat';\nimport { classes, VComponent } from '@adobe/elsie/lib';\nimport { useText } from '@adobe/elsie/i18n';\n\nimport { Carousel, GalleryGrid, Overlay } from '@/pdp/components';\nimport '@/pdp/components/Product/Product.css';\n\nimport { CarouselConfig } from '@/pdp/containers';\n\ninterface ProductCarouselConfig extends CarouselConfig {\n thumbnails: VNode[];\n}\n\nexport interface ProductProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n title?: VNode;\n breadcrumbs?: VNode;\n galleryContent?: VNode;\n infoContent?: VNode;\n productContent?: VNode;\n shortDescription?: VNode;\n description?: VNode;\n attributes?: VNode;\n images: VNode[];\n options?: VNode;\n sku?: VNode;\n price?: VNode;\n specialPrice?: VNode;\n outOfStock: boolean;\n hideSku?: boolean;\n actions?: VNode;\n quantity?: VNode;\n carouselConfig?: ProductCarouselConfig;\n}\n\nexport const Product: FunctionComponent<ProductProps> = ({\n title,\n breadcrumbs,\n galleryContent,\n infoContent,\n productContent,\n sku,\n outOfStock,\n hideSku,\n shortDescription,\n description,\n attributes,\n images,\n options,\n price,\n specialPrice,\n className,\n children,\n quantity,\n actions,\n carouselConfig,\n ...props\n}) => {\n // i18n\n const RegularPriceLabel = useText('PDP.Product.RegularPrice.label').label;\n const SpecialPriceLabel = useText('PDP.Product.SpecialPrice.label').label;\n const OutOfStockLabel = useText('PDP.Product.OutOfStock.label').label;\n const ImagesLabel = useText('PDP.Product.Image.label').label;\n\n const [zoom, setZoom] = useState<number | null>(null);\n\n const galleryImages = images?.length ? (\n images.map((image, key) => (\n <VComponent\n key={key}\n node={image}\n loading={key === 0 ? 'eager' : 'lazy'}\n alt={\n title?.props?.children &&\n ImagesLabel?.replace('{product}', title.props.children.toString())\n .replace('{key}', String(key + 1))\n .replace('{total}', String(images.length))\n }\n onClick={() => setZoom(key)}\n />\n ))\n ) : (\n <img\n src=\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\"\n className=\"pdp-product__images__placeholder\"\n aria-hidden\n />\n );\n\n const localThumbnailsImages = carouselConfig?.thumbnails?.length ? (\n carouselConfig.thumbnails.map((image, key) => (\n <VComponent\n key={key}\n node={image}\n loading={carouselConfig?.thumbnailsLoadingMode || 'lazy'}\n alt={\n title?.props?.children &&\n ImagesLabel?.replace('{product}', title.props.children.toString())\n .replace('{key}', String(key + 1))\n .replace('{total}', String(images.length))}\n />\n ))\n ) : (\n <img\n src=\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\"\n className=\"pdp-product__images__placeholder\"\n aria-hidden\n />\n );\n\n return (\n <div {...props} className={classes(['pdp-product', className])}>\n {breadcrumbs && (\n <VComponent node={breadcrumbs} className=\"pdp-product__breadcrumbs\" />\n )}\n <div className=\"pdp-product__column-container pdp-product__gallery-column\">\n <div className=\"pdp-product__column-body\">\n {\n carouselConfig?.controls ?\n <Carousel\n className=\"pdp-product__overlay__carousel\"\n arrows={images?.length > 1}\n controls={images?.length > 1 ? carouselConfig.controls : 'dots'}\n arrowsOnMainImage={carouselConfig?.arrowsOnMainImage}\n loop={carouselConfig?.loopable && images?.length > 1}\n peak={carouselConfig?.thumbnails?.length > 1 && carouselConfig?.peak?.desktop || false}\n gap={carouselConfig?.gap || null}\n width=\"100%\"\n height=\"100%\"\n defaultIndex={zoom || 0}\n thumbnails={localThumbnailsImages}\n >\n {galleryImages}\n </Carousel>\n :\n <GalleryGrid className=\"pdp-product__images\" gap=\"small\">\n {galleryImages}\n </GalleryGrid>\n }\n </div>\n {galleryContent && (\n <VComponent\n node={galleryContent}\n className=\"pdp-product__gallery-content\"\n />\n )}\n </div>\n\n <div className=\"pdp-product__column-container pdp-product__content-column\">\n <div className=\"pdp-product__column-body\">\n <div className=\"pdp-product__header\">\n {title && (\n <VComponent\n node={title}\n className=\"pdp-product__title\"\n />\n )}\n\n {!hideSku && sku && (\n <VComponent node={sku} className=\"pdp-product__sku\" />\n )}\n </div>\n\n <div className=\"pdp-product__prices\">\n {specialPrice && (\n <VComponent\n node={specialPrice}\n className={classes(['pdp-product__price-special', 'pdp-product__price'])}\n aria-label={SpecialPriceLabel}\n role=\"text\"\n />\n )}\n {price && (\n <VComponent\n node={price}\n className={classes(['pdp-product__price-regular', 'pdp-product__price--grey'])}\n aria-label={RegularPriceLabel}\n role=\"text\"\n />\n )}\n </div>\n\n {/* Small Screen Gallery */}\n {\n carouselConfig?.mobile ?\n <Carousel\n className=\"pdp-product__images pdp-product__images--carousel pdp-product__images--carousel--thumbnails\"\n width=\"100%\"\n height=\"auto\"\n arrows={images?.length > 1}\n controls={images?.length > 1 ? 'thumbnailsRow' : null}\n loop={carouselConfig?.loopable && images?.length > 1}\n peak={carouselConfig?.thumbnails?.length > 1 && carouselConfig?.peak?.mobile || false}\n gap={carouselConfig?.gap || null}\n thumbnails={localThumbnailsImages}\n >\n {galleryImages}\n </Carousel>\n :\n <Carousel\n className=\"pdp-product__images pdp-product__images--carousel\"\n peak={carouselConfig?.peak?.mobile && images?.length > 1}\n gap={carouselConfig?.gap || null}\n width=\"100%\"\n height=\"auto\"\n arrows={images?.length > 1}\n controls={images?.length > 1 ? 'dots' : null}\n loop={carouselConfig?.loopable && images?.length > 1}\n >\n {galleryImages}\n </Carousel>\n }\n\n <div\n className={classes([\n 'pdp-product__actions',\n [`pdp-product__actions--out-of-stock`, outOfStock],\n ])}\n >\n {outOfStock && (\n <div className=\"pdp-product__out-of-stock__text\">\n {OutOfStockLabel}\n </div>\n )}\n\n {options && (\n <VComponent\n node={options}\n className={classes(['pdp-product__options'])}\n />\n )}\n\n {quantity && (\n <div className=\"pdp-product__quantity\">\n <VComponent node={quantity} />\n </div>\n )}\n\n {actions && (\n <VComponent\n node={actions}\n className={classes(['pdp-product__buttons'])}\n />\n )}\n </div>\n\n {shortDescription && (\n <VComponent\n node={shortDescription}\n className={classes(['pdp-product__short_description'])}\n />\n )}\n\n {description && (\n <VComponent\n node={description}\n className={classes(['pdp-product__description'])}\n />\n )}\n\n {attributes ? (\n <div className=\"pdp-product__attributes\">{attributes}</div>\n ) : null}\n </div>\n {infoContent && (\n <VComponent\n node={infoContent}\n className=\"pdp-product__info-content\" />\n )}\n </div>\n\n {productContent && (\n <VComponent\n node={productContent}\n className=\"pdp-product__content\"\n />\n )}\n\n {/* Zoom Overlay */}\n {zoom === null ? null : (\n <Overlay\n className=\"pdp-product__overlay\"\n onClose={() => setZoom(null)}\n centered\n >\n <Carousel\n className=\"pdp-product__overlay__carousel\"\n arrows={images?.length > 1}\n width=\"100%\"\n height=\"100%\"\n defaultIndex={zoom || 0}\n loop={images?.length > 1}\n controls={images?.length > 1 ? 'dots' : null}\n isZoomed\n >\n {galleryImages}\n </Carousel>\n </Overlay>\n )}\n </div>\n );\n};\n","import { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes, Children } from 'preact/compat';\nimport { classes, VComponent } from '@adobe/elsie/lib';\nimport '@/pdp/components/GalleryGrid/GalleryGrid.css';\n\nexport interface GalleryGridProps extends HTMLAttributes<HTMLDivElement> {\n children: VNode[] | VNode;\n gap?: 'small' | 'medium' | 'large' | null;\n style?: Record<string, string | number>;\n}\n\nexport const GalleryGrid: FunctionComponent<GalleryGridProps> = ({\n children,\n gap = null,\n className,\n style,\n ...props\n}) => {\n const count = Children.count(children);\n\n return (\n <div\n {...props}\n className={classes(['pdp-gallery-grid', className])}\n style={{\n '--gap': gap ? `var(--spacing-${gap})` : '0px',\n ...style,\n }}\n >\n {Children.map(\n children,\n (child: VNode<HTMLAttributes<HTMLElement>>, key) => (\n <div key={count + key} className=\"pdp-gallery-grid__item\">\n <VComponent\n key={child.props.src}\n node={child}\n loading={key === 0 ? 'eager' : 'lazy'}\n />\n </div>\n )\n )}\n </div>\n );\n};\n","/*\nADOBE CONFIDENTIAL\nCopyright 2023 Adobe\nAll Rights Reserved.\nNOTICE: All information contained herein is, and remains\nthe property of Adobe and its suppliers, if any. The intellectual\nand technical concepts contained herein are proprietary to Adobe\nand its suppliers and are protected by all applicable intellectual\nproperty laws, including trade secret and copyright laws.\nDissemination of this information or reproduction of this material\nis strictly forbidden unless prior written permission is obtained\nfrom Adobe.\n*/\n\nimport { HTMLAttributes } from 'preact/compat';\nimport '@/pdp/components/PriceRange/PriceRange.css';\nimport { FunctionalComponent } from 'preact';\nimport { Price } from '@adobe/elsie/components';\n\nexport interface PriceRangeProps extends HTMLAttributes<HTMLDivElement> {\n locale?: string;\n variant?: 'default' | 'strikethrough';\n currency?: string;\n\n // Simple product\n amount?: number;\n sale?: boolean;\n\n // Complex product (range)\n minimumAmount?: number;\n maximumAmount?: number;\n}\n\nexport const PriceRange: FunctionalComponent<PriceRangeProps> = ({\n amount,\n currency,\n locale,\n variant,\n sale,\n minimumAmount,\n maximumAmount,\n className,\n ...props\n}) => {\n return (\n <>\n {amount || minimumAmount === maximumAmount ? (\n <div className={'pdp-price-range'} {...props}>\n <Price\n amount={amount ? amount : minimumAmount}\n currency={currency}\n locale={locale}\n variant={variant}\n sale={sale}\n className={className}\n />\n </div>\n ) : (\n <div className={'pdp-price-range'} {...props}>\n <Price\n amount={minimumAmount}\n currency={currency}\n locale={locale}\n className={className}\n />\n <span className=\"pdp-price-range__label\">{'-'}</span>\n <Price\n amount={maximumAmount}\n currency={currency}\n locale={locale}\n className={className}\n />\n </div>\n )}\n </>\n );\n};\n","import { FunctionComponent } from 'preact';\nimport { HTMLAttributes, useCallback, useEffect } from 'preact/compat';\nimport { classes } from '@adobe/elsie/lib';\nimport { useText } from '@adobe/elsie/i18n';\nimport { Close as CloseSVG } from '@adobe/elsie/icons';\nimport { Button } from '@adobe/elsie/components';\n\nimport '@/pdp/components/Overlay/Overlay.css';\n\nexport interface OverlayProps extends HTMLAttributes<HTMLDivElement> {\n centered?: boolean;\n onClose?: () => void;\n}\n\nexport const Overlay: FunctionComponent<OverlayProps> = ({\n centered,\n onClose,\n className,\n children,\n ...props\n}) => {\n // i18n\n const CloseLabel = useText('PDP.Overlay.Close.label').label;\n\n const handleOnClose = useCallback(() => {\n onClose?.();\n }, [onClose]);\n\n // Close on ESC\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n handleOnClose();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [handleOnClose]);\n\n // Prevent document scrolling\n useEffect(() => {\n const scrollingElement = document.scrollingElement as HTMLElement;\n\n const defaultOverflowValue = scrollingElement.style.overflow;\n\n scrollingElement.style.overflow = 'hidden';\n\n return () => {\n scrollingElement.style.overflow = defaultOverflowValue;\n };\n }, []);\n\n return (\n <div\n {...props}\n className={classes([\n 'pdp-overlay',\n ['pdp-overlay--centered', centered],\n className,\n ])}\n >\n <div className=\"pdp-overlay__content\">{children}</div>\n\n <Button\n aria-label={CloseLabel}\n variant=\"tertiary\"\n className=\"pdp-overlay__close-button\"\n onClick={handleOnClose}\n icon={<CloseSVG />}\n />\n </div>\n );\n};\n","import { FunctionComponent } from 'preact';\nimport { HTMLAttributes, useState, useMemo, useCallback, useEffect } from 'preact/compat';\nimport { classes } from '@adobe/elsie/lib';\nimport { useText } from '@adobe/elsie/i18n';\nimport { ColorSwatch, ImageSwatch, TextSwatch, Picker, PickerOption } from '@adobe/elsie/components';\n\nimport '@/pdp/components/Swatches/Swatches.css';\n\nconst supportedTypes = ['text', 'image', 'color', 'dropdown'];\n\nconst mapToPickerOptions = (items: OptionValue[]): PickerOption[] => {\n return items.map((item: OptionValue) => ({ ...item, text: item.label, disabled: !item.inStock, }));\n}\n\ntype OptionValue = {\n id: string;\n label: string;\n inStock: boolean;\n value: string;\n selected?: boolean;\n};\n\nexport type Option = {\n id: string;\n type: (typeof supportedTypes)[number];\n label: string;\n required?: boolean;\n multiple?: boolean;\n items: OptionValue[];\n};\n\ntype Selection = { [id: string]: { label: string; value: string } };\n\nexport interface SwatchesProps extends HTMLAttributes<HTMLDivElement> {\n options: Array<{\n id: string;\n type: (typeof supportedTypes)[number];\n label: string;\n required?: boolean;\n multiple?: boolean;\n items: OptionValue[];\n }>;\n hideSelectedValue?: boolean;\n\n defaultOptions?: string[];\n selectionsToUpdate?: Option[];\n onValues?: (uids: Selection, current: string) => void;\n onErrors?: (errors: { [id: string]: string }) => void;\n}\n\nexport const Swatches: FunctionComponent<SwatchesProps> = ({\n options,\n hideSelectedValue,\n onValues,\n onErrors,\n defaultOptions,\n selectionsToUpdate,\n className,\n children,\n ...props\n}) => {\n // i18n\n const RequiredLabel = useText('PDP.Swatches.Required.label').label;\n\n const [selections, setSelections] = useState<Selection>(() => {\n const initial = options?.reduce((accum, option) => {\n const { items } = option;\n const defaultSelection = items?.find((item) => defaultOptions?.includes(item.id));\n const selected = items?.find((item) => item.selected);\n if (defaultSelection) {\n return {\n ...accum,\n [option.id]: { label: defaultSelection.label, value: defaultSelection.id },\n };\n } else if (selected) {\n return {\n ...accum,\n [option.id]: { label: selected.label, value: selected.id },\n };\n }\n return accum;\n }, {} as Selection);\n\n return initial;\n });\n\n // this only applies for the case with anchor options\n // update selections in the swatches if they are updated in the parent component\n useEffect(() => {\n selectionsToUpdate?.forEach((selectionToUpdate) => {\n setSelections((prev) => {\n const selectedItem = selectionToUpdate\n ?.items?.find((item) => item.selected);\n if (!selectedItem) return prev;\n\n const next = {\n ...prev,\n [selectionToUpdate.id]: {\n label: selectedItem?.label,\n value: selectedItem?.id\n },\n };\n return next;\n });\n });\n }, [selectionsToUpdate, setSelections]);\n\n // Update invalid options\n useMemo(() => {\n const errors = options?.reduce((accum, option) => {\n option?.items?.forEach((item) => {\n const selected = selections[option.id]?.value === item.id;\n\n // Validate required\n if (option.required && !selected) {\n accum[option.id] = RequiredLabel;\n }\n });\n\n return accum;\n }, {} as { [id: string]: string });\n\n // Call the callback\n onErrors?.(errors);\n\n return errors;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selections]);\n\n const handleOnSelection = useCallback(\n (id: string, label: string, optionId: string) => {\n setSelections((prev) => {\n const next = {\n ...prev,\n [id]: { label, value: optionId },\n };\n\n // Call the callback\n onValues?.(next, optionId);\n\n // Return the next state\n return next;\n });\n },\n [onValues]\n );\n\n // Function to handle the picker selection\n const handlePickerSelect = (optionId: string, selection: any ) => {\n const label = selection.selectedOptions[0]?.label ?? '';\n handleOnSelection(optionId, label, selection.value);\n };\n\n const Swatches = useCallback(\n ({ items, id, required, type, selected, label }: any) => {\n return (\n <div className={classes(['pdp-swatches__options'])}>\n {\n type?.toLowerCase() === 'dropdown' ?\n <Picker aria-label={label} handleSelect={(event) => handlePickerSelect(id, event.target)} options={mapToPickerOptions(items)} value={selected} />\n :\n items?.map((option: any) => {\n const common = {\n key: option.id,\n id: option.id,\n name: id,\n value: option.value,\n label: option.label,\n groupAriaLabel: label,\n selected: selected === option.id,\n outOfStock: !option.inStock,\n // API may return null, we default to true as all swatches are required.\n // we still comply to this in case the api return \"false\".\n required: required === null ? true : required,\n onValue: () => {\n handleOnSelection(id, option.label, option.id);\n },\n };\n\n switch (type) {\n case 'text':\n return <TextSwatch {...common} label={option.label} />;\n\n case 'image':\n return (\n <ImageSwatch\n {...common}\n src={option.value}\n alt={option.label}\n />\n );\n\n case 'color':\n return (\n <ColorSwatch {...common} size=\"large\" color={option.value} />\n );\n\n default:\n console.warn(`Invalid swatch type ${type}`);\n return null;\n }\n })}\n </div>\n );\n },\n [handleOnSelection]\n );\n\n return (\n <div {...props} className={classes(['pdp-swatches', className])}>\n {options?.map(({ type, label, id, multiple, required, items }) => {\n if (!type) {\n console.warn(`Bundle product not supported on UI.`);\n return;\n }\n\n // Only render supported types\n if (!supportedTypes.includes(type)) {\n console.warn(`Invalid swatch type ${type}`);\n }\n\n if (multiple) {\n console.warn(\n 'Multiple selection swatches are not currently supported.'\n );\n }\n\n return (\n <div\n key={`swatch-item-${id}`}\n id={`swatch-item-${id}`}\n data-slot-key={`product-swatch--${id}`}\n className=\"pdp-swatches__field\"\n >\n <div className=\"pdp-swatches__field__label\">\n {selections[id] ? (hideSelectedValue ? `${label}` : `${label}: ${selections[id].label}`) : label}\n </div>\n\n <Swatches\n id={id}\n type={type}\n required={required}\n items={items}\n label={label} //label referring to the name of the swatchGroup\n selected={selections[id]?.value}\n />\n </div>\n );\n })}\n </div>\n );\n};\n","import { toLanguageTag } from '@adobe/elsie/lib';\n\nexport function toDateString(value: string, locale = 'en_US') {\n if (!isDateValid(value)) throw Error('Invalid date string');\n\n // normalize time to 00:00:00\n const time = value.split(' ')[1];\n if (!time) value = `${value} 00:00:00`;\n\n return new Date(value).toLocaleDateString(toLanguageTag(locale)).toString();\n}\n\nexport function isDateValid(dateString: string) {\n const acceptedFormats = [\n /^\\d{4}-\\d{2}-\\d{2}$/, // YYYY-MM-DD\n /^\\d{1,2}\\/\\d{1,2}\\/\\d{4}$/, // MM/DD/YYYY\n /^\\d{2}\\/\\d{2}\\/\\d{4}$/, // MM/DD/YYYY\n /^\\d{4}\\/\\d{2}\\/\\d{2}$/, // YYYY/MM/DD\n /^\\d{1,2}\\.\\d{1,2}\\.\\d{4}$/, // DD.MM.YYYY\n /^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$/, // YYYY-MM-DD HH:mm:ss\n ];\n\n if (!acceptedFormats.some((format) => format.test(dateString))) return false;\n\n const date = new Date(dateString);\n return !isNaN(date.getTime());\n}\n","export function setUrlParams(\n params: Record<string, string | number | null>\n): void {\n const urlSearchParams = new URLSearchParams(window.location.search);\n\n Object.entries(params).forEach(([key, value]) => {\n if (value === null) {\n urlSearchParams.delete(key);\n } else {\n urlSearchParams.set(key, String(value));\n }\n });\n\n let url = window.location.pathname;\n url += `?${urlSearchParams.toString()}`;\n url += window.location.hash;\n\n window.history.replaceState({}, '', url);\n}\n\nexport function getUrlParams(): Record<string, string> {\n const urlSearchParams = new URLSearchParams(window.location.search);\n const params: Record<string, string> = {};\n\n urlSearchParams.forEach((value, key) => {\n params[key] = value;\n });\n\n return params;\n}\n","import {\n HTMLAttributes,\n useEffect,\n useState,\n useCallback,\n useMemo,\n} from 'preact/compat';\n\nimport {\n Container,\n toLanguageTag,\n SlotProps,\n SlotMethod,\n Slot,\n ResolveImageUrlOptions,\n} from '@adobe/elsie/lib';\n\nimport {\n Button,\n Icon,\n ButtonProps,\n Image,\n Incrementer,\n Breadcrumbs,\n} from '@adobe/elsie/components';\nimport { Product, Swatches, PriceRange, Option } from '@/pdp/components';\nimport { config, getProductData, getRefinedProduct } from '@/pdp/api';\nimport { events } from '@adobe/event-bus';\nimport { Lang, useText } from '@adobe/elsie/i18n';\nimport { isDateValid, toDateString } from '@/pdp/lib/date';\nimport { getUrlParams, setUrlParams } from '@/pdp/lib/url-params';\nimport { ProductModel } from '@/pdp/data/models';\n\ntype IconType = keyof typeof import('@adobe/elsie/icons');\n\ntype Values = {\n sku: string;\n quantity: number;\n optionsUIDs?: string[];\n};\n\ntype DefaultSlotContext = {\n data: ProductModel | null;\n values: Values;\n valid: boolean;\n};\n\nexport type CarouselConfig = {\n mobile?: boolean;\n controls?: 'thumbnailsRow' | 'thumbnailsColumn' | 'dots' | null;\n arrowsOnMainImage?: boolean;\n loopable?: boolean;\n peak?: {\n mobile: boolean,\n desktop: boolean,\n }\n gap?: 'small' | 'medium' | 'large' | null;\n thumbnailsLoadingMode?: 'lazy' | 'eager';\n imageParams?: ResolveImageUrlOptions,\n thumbnailParams?: ResolveImageUrlOptions\n};\n\nexport type OptionsConfig = {\n anchorOptions?: string[];\n};\n\nexport interface ProductDetailsProps extends HTMLAttributes<HTMLDivElement> {\n sku: string;\n hideSku?: boolean;\n productData?: ProductModel;\n hideQuantity?: boolean;\n hideShortDescription?: boolean;\n hideDescription?: boolean;\n hideAttributes?: boolean;\n hideURLParams?: boolean;\n hideSelectedOptionValue?: boolean;\n slots?: {\n Title?: SlotProps<DefaultSlotContext>;\n\n SKU?: SlotProps<DefaultSlotContext>;\n\n RegularPrice?: SlotProps<DefaultSlotContext>;\n\n SpecialPrice?: SlotProps<DefaultSlotContext>;\n\n Options?: SlotProps<DefaultSlotContext>;\n\n Quantity?: SlotProps<DefaultSlotContext>;\n\n Actions?: SlotProps<DefaultSlotContext & {\n appendButton: SlotMethod<\n Omit<ButtonProps, 'icon'> & {\n text?: string;\n icon?: IconType;\n }\n >;\n }>;\n\n ShortDescription?: SlotProps<DefaultSlotContext>;\n\n Description?: SlotProps<DefaultSlotContext>;\n\n Attributes?: SlotProps<DefaultSlotContext>;\n\n Breadcrumbs?: SlotProps<DefaultSlotContext & {\n setSeparator: SlotMethod<IconType>;\n\n appendLink: SlotMethod<\n HTMLAttributes<HTMLAnchorElement> & { text?: string }\n >;\n\n appendHTMLElement: SlotMethod<HTMLElement>;\n }>;\n\n GalleryContent?: SlotProps<DefaultSlotContext>;\n\n InfoContent?: SlotProps<DefaultSlotContext>;\n\n Content?: SlotProps<DefaultSlotContext>;\n };\n carousel?: CarouselConfig;\n optionsConfig?: OptionsConfig;\n onAddToCart?: (values: Values) => void;\n}\n\nexport const ProductDetails: Container<\n ProductDetailsProps,\n ProductModel | null\n> = ({\n sku,\n hideSku,\n hideQuantity,\n hideShortDescription,\n hideDescription,\n hideAttributes,\n hideURLParams,\n hideSelectedOptionValue,\n slots,\n children,\n initialData,\n carousel,\n optionsConfig,\n onAddToCart,\n ...props\n}) => {\n // i18n\n const AddToCartLabel = useText('PDP.Product.AddToCart.label').label;\n const IncrementerLabel = useText('PDP.Product.Incrementer.label').label;\n const DetailsLabel = useText('PDP.Product.Details.label').label;\n\n // TODO: Investigate if the \"|| 'en-US' \" is really necessary\n const [locale, setLocale] = useState<Lang>(config.getConfig().defaultLocale as Lang || 'en-US');\n\n const [selectionsToUpdate, setSelectionsToUpdate] = useState<Option[]>();\n\n const [data = null, setData] = useState(initialData);\n\n const [values, setValues] = useState<Values>(() => {\n const defaultValues: Values = { sku, quantity: 1 };\n\n if (data?.optionUIDs) {\n defaultValues.optionsUIDs = data.optionUIDs;\n }\n return defaultValues;\n });\n\n // the context is invalid for a configurable product that doesn't have all the options selected\n const [valid, setValid] = useState(() => {\n return !(\n data?.options &&\n data?.options?.length > 0 &&\n data?.optionUIDs?.length !== data?.options.length\n );\n });\n\n const defaultSlotContext: DefaultSlotContext = { data, values, valid };\n\n // Locale\n useEffect(() => {\n const localeEvent = events.on('locale', (payload: string) => {\n if (payload === locale) return;\n\n setLocale(payload as Lang);\n\n getProductData(sku).then(setData);\n\n // TODO: need to keep the optionsUIDs when locale changes\n // if (values?.optionsUIDs) {\n // getRefinedProduct(sku, values?.optionsUIDs).then(setData);\n // } else {\n // getProductData(sku).then(setData);\n // }\n });\n return () => {\n localeEvent?.off();\n };\n }, [locale, sku]);\n\n // Callbacks\n const handleOnValues = useCallback(\n (newValues: { [key: string]: string | number }) => {\n setValues((prev) => ({ ...prev, ...newValues }));\n },\n []\n );\n\n const handleOptionSelected = useCallback(\n (selections: { [id: string]: { label: string; value: string } }) => {\n // options Selected\n let optionsUIDs = Object.keys(selections)\n .map((id) => selections[id].value)\n .filter((element) => element !== undefined);\n\n // set optionUIDs to URL params\n // ?optionsUIDs=1,2,3\n if (!hideURLParams) {\n setUrlParams({ optionsUIDs: optionsUIDs.join(',') });\n }\n\n // update state\n setValues((prev) => ({ ...prev, optionsUIDs }));\n setValid(optionsUIDs?.length === data?.options?.length);\n\n // get refined product data and update state\n getRefinedProduct(sku, optionsUIDs, optionsConfig?.anchorOptions).then((next) => {\n setData(next);\n\n // special processing for anchor options (options that should not be refined when other options are selected)\n if (optionsConfig?.anchorOptions?.length) {\n processUpdates(next, optionsUIDs);\n }\n });\n },\n [sku]\n );\n\n const processUpdates = useCallback((next: ProductModel | null, previousOptionsUIDs: string[]) => {\n const updatedOptionsUIDs = next?.optionUIDs ?? [];\n const haveSameValues = previousOptionsUIDs.every(item => updatedOptionsUIDs.includes(item));\n if (!haveSameValues) {\n setSelectionsToUpdate(next?.options);\n setValues((prev) => ({ ...prev, optionsUIDs: updatedOptionsUIDs }));\n setValid(updatedOptionsUIDs?.length === next?.options?.length);\n }\n }, [sku]);\n\n const handleOnErrors = useCallback((_errors: { [id: string]: string }) => {\n if (Object.keys(_errors).length !== 0) setValid(false);\n }, []);\n\n // Product Attributes\n const attributes = useMemo(() => {\n return data?.attributes?.map(({ label, value }, key: number) => {\n const __html = isDateValid(value)\n ? toDateString(value, locale)\n : value.toString();\n\n return (\n <li key={key}>\n {/* eslint-disable-next-line react/no-danger */}\n {label}: <span dangerouslySetInnerHTML={{ __html }} />\n </li>\n );\n });\n }, [data?.attributes, locale]);\n\n const quantity =\n !hideQuantity && data?.inStock ? (\n <Slot\n name=\"Quantity\"\n slot={slots?.Quantity}\n context={{ ...defaultSlotContext }}\n >\n <Incrementer\n key=\"quantity\"\n name=\"quantity\"\n defaultValue={values.quantity.toString()}\n min={1}\n aria-label={IncrementerLabel}\n className=\"pdp-product__quantity\"\n onValue={(quantity) => {\n handleOnValues({ quantity: Number(quantity) });\n }}\n />\n </Slot>\n ) : undefined;\n\n const renderOptions = () => {\n if (data?.options) {\n return (\n <Slot name=\"Options\" slot={slots?.Options} context={{ ...defaultSlotContext }}>\n <Swatches\n options={data.options}\n defaultOptions={values.optionsUIDs}\n selectionsToUpdate={selectionsToUpdate}\n hideSelectedValue={hideSelectedOptionValue}\n onValues={handleOptionSelected}\n onErrors={handleOnErrors}\n />\n </Slot>\n );\n }\n };\n\n return (\n <div {...props}>\n <Product\n title={\n <Slot\n name=\"Title\"\n slot={slots?.Title}\n context={{ ...defaultSlotContext }}\n >\n {data?.name}\n </Slot>\n }\n sku={\n hideSku ? undefined : (\n <Slot\n name=\"SKU\"\n slot={slots?.SKU}\n context={{ ...defaultSlotContext }}\n >\n {data?.sku}\n </Slot>\n )\n }\n options={renderOptions()}\n breadcrumbs={\n slots?.Breadcrumbs && (\n <Slot\n name=\"Breadcrumbs\"\n slot={slots?.Breadcrumbs}\n context={{\n ...defaultSlotContext,\n\n setSeparator(callback) {\n this._registerMethod((...attrs) => {\n const nextSeparator = callback(...attrs);\n\n const separator = nextSeparator && <Icon source={nextSeparator} />;\n\n this._setProps((prev: any) => {\n return { ...prev, separator };\n });\n });\n },\n\n appendLink(callback) {\n this._registerMethod((...attrs) => {\n const { text, ...p } = callback(...attrs);\n\n const link = <a {...p}>{text}</a>;\n\n this._setProps((prev: any) => {\n return {\n ...prev,\n categories: [...(prev.categories || []), link],\n };\n });\n });\n },\n\n appendHTMLElement(callback) {\n this._registerMethod((...attrs) => {\n const domElement = callback(...attrs);\n\n const vnode = this._htmlElementToVNode(domElement);\n\n this._setProps((prev: any) => {\n return {\n ...prev,\n categories: [...(prev.categories || []), vnode],\n };\n });\n });\n },\n }}\n render={({ separator, categories }) => {\n return (\n <Breadcrumbs separator={separator} categories={categories} />\n );\n }}\n />\n )\n }\n quantity={quantity}\n actions={\n <Slot\n name=\"Actions\"\n slot={slots?.Actions}\n context={{\n ...defaultSlotContext,\n\n appendButton(callback) {\n this._registerMethod((...attrs) => {\n const _button = callback(...attrs);\n\n if (!_button) return;\n\n const { text, icon, ...buttonProps } = _button;\n\n const button = (\n <Button\n type=\"button\"\n {...buttonProps}\n icon={icon && <Icon source={icon} />}\n >\n {text}\n </Button>\n );\n\n this._setProps((prev: any) => ({\n children: [...(prev.children || []), button],\n }));\n });\n },\n }}\n >\n {\n // Default Add to Cart button if no slot is provided\n !slots?.Actions && (\n <Button\n size=\"medium\"\n type=\"submit\"\n icon={<Icon source=\"Cart\" />}\n disabled={!data?.inStock || !valid}\n aria-label={AddToCartLabel}\n onClick={() => {\n return onAddToCart?.(values);\n }}\n >\n {AddToCartLabel}\n </Button>\n )\n }\n </Slot>\n }\n shortDescription={\n !hideShortDescription ? (\n <Slot\n name=\"ShortDescription\"\n slot={slots?.ShortDescription}\n context={{ ...defaultSlotContext }}\n >\n {/* eslint-disable-next-line react/no-danger */}\n <div dangerouslySetInnerHTML={{ __html: data?.shortDescription ?? '' }} />\n </Slot>\n ) : undefined\n }\n description={\n !hideDescription ? (\n <Slot\n name=\"Description\"\n slot={slots?.Description}\n context={{ ...defaultSlotContext }}\n >\n {/* eslint-disable-next-line react/no-danger */}\n <div dangerouslySetInnerHTML={{ __html: data?.description ?? '' }} />\n </Slot>\n ) : undefined\n }\n images={\n data?.images?.map(({ label, url }) => (\n <Image\n key={url}\n title={label}\n alt={label}\n src={url}\n // TODO: change width/height for image aspect ratio\n // pending https://jira.corp.adobe.com/browse/DATA-5122\n width={carousel?.imageParams?.width ?? 960}\n height={carousel?.imageParams?.height ?? 1191}\n params={carousel?.imageParams ?? { width: 960 }}\n />\n )) ?? []\n }\n specialPrice={\n data?.prices?.visible ? (\n <Slot\n name=\"SpecialPrice\"\n slot={slots?.SpecialPrice}\n context={{ ...defaultSlotContext }}\n >\n <PriceRange {...data.prices.final} locale={toLanguageTag(locale)} />\n </Slot>\n ) : undefined\n }\n price={\n data?.prices?.visible &&\n data.prices.regular &&\n data.prices.final.amount !== data?.prices.regular.amount ? (\n <Slot\n name=\"RegularPrice\"\n slot={slots?.RegularPrice}\n context={{ ...defaultSlotContext }}\n >\n <PriceRange\n {...data.prices.regular}\n locale={toLanguageTag(locale)}\n />\n </Slot>\n ) : undefined\n }\n carouselConfig={{\n ...carousel,\n thumbnails: carousel\n ? data?.images?.map(({ label, url }) => (\n <Image\n key={url}\n title={label}\n alt={label}\n src={url}\n // TODO: change width/height for image aspect ratio\n // pending https://jira.corp.adobe.com/browse/DATA-5122\n width={carousel?.thumbnailParams?.width ?? 200}\n height={carousel?.thumbnailParams?.height ?? 248}\n params={carousel?.thumbnailParams ?? { width: 200 }}\n />\n )) ?? []\n : [],\n }}\n outOfStock={!data?.inStock}\n attributes={\n !hideAttributes ? (\n <Slot\n name=\"Attributes\"\n slot={slots?.Attributes}\n context={{ ...defaultSlotContext }}\n >\n {attributes?.length ? (\n <>\n {DetailsLabel}\n <ul>{attributes}</ul>\n </>\n ) : null}\n </Slot>\n ) : undefined\n }\n galleryContent={\n slots?.GalleryContent && (\n <Slot\n name=\"GalleryContent\"\n slot={slots.GalleryContent}\n context={{ ...defaultSlotContext }}\n />\n )\n }\n infoContent={\n slots?.InfoContent && (\n <Slot\n name=\"InfoContent\"\n slot={slots.InfoContent}\n context={{ ...defaultSlotContext }}\n />\n )\n }\n productContent={\n slots?.Content && (\n <Slot\n name=\"Content\"\n slot={slots.Content}\n context={{ ...defaultSlotContext }}\n />\n )\n }\n />\n </div>\n );\n};\n\nProductDetails.getInitialData = async function ({ sku, optionsConfig }) {\n // check if default selections are made\n const defaultSelections = getUrlParams().optionsUIDs?.split(',') || config?.getConfig()?.models?.ProductDetails?.initialData?.optionsUIDs;\n\n // if it has selections, refine the product data\n if (defaultSelections?.length) {\n return await getRefinedProduct(sku, defaultSelections, optionsConfig?.anchorOptions);\n }\n\n // otherwise return the product data\n return await getProductData(sku);\n};\n"],"names":["SvgChevronDown","props","React","SvgClose","Carousel","show","scrollbar","peak","arrows","controls","arrowsOnMainImage","loop","gap","direction","width","height","defaultIndex","className","children","thumbnails","isZoomed","Label","useText","label","SlideLabel","PreviousLabel","NextLabel","ControlsLabel","ControlsBtnLabel","perPage","setPerPage","useState","getPerPageFromBreakpoint","length","Math","ceil","Children","toArray","gapSizes","small","medium","large","peakWidth","gapWidth","rest","thumbGap","thumbSeen","iconSize","current","setCurrent","thumbnailsRefs","useRef","thumbWidth","setThumbWidth","thumbHeight","setThumbHeight","thumbnailSlides","useMemo","slides","returnValue","reduce","acc","child","i","slice","concat","wrapperRef","thumbnailsWrapperRef","thumbnailControls","useEffect","wrapper","document","body","handleResize","debounce","offsetWidth","offsetHeight","window","innerWidth","newPerPage","observer","ResizeObserver","observe","unobserve","handleThumbnailsScroll","useCallback","nextSlideIndex","nextItem","thumbnailRef","oneItemWidth","oneItemHeight","thumbnailsWrapper","style","scrollBehavior","scrollLeft","scrollTop","handleScrollTo","smooth","reset","realWidth","Array","from","querySelectorAll","filter","element","dataIndex","Number","getAttribute","isNaN","futureIndex","scrollWidth","diff","handleGoToPrev","handleGoToNext","lastSlideIndex","handleKeyDown","event","key","preventDefault","addEventListener","removeEventListener","handleOnScroll","dividing","round","totalWidth","getArrow","forThumbnails","callback","_jsx","Button","classes","variant","onClick","disabled","Icon","size","source","ChevronDown","prevArrow","nextArrow","prevArrowMainImage","nextArrowMainImage","_jsxs","role","ref","tabIndex","map","page","index","orphan","_Fragment","_","buttonsLength","active","el","type","name","replace","String","checked","onChange","breakpoints","mediumViewport","Product","title","breadcrumbs","galleryContent","infoContent","productContent","sku","outOfStock","hideSku","shortDescription","description","attributes","images","options","price","specialPrice","quantity","actions","carouselConfig","RegularPriceLabel","SpecialPriceLabel","OutOfStockLabel","ImagesLabel","zoom","setZoom","galleryImages","image","VComponent","node","loading","alt","toString","src","localThumbnailsImages","thumbnailsLoadingMode","loopable","desktop","GalleryGrid","mobile","Overlay","onClose","centered","count","PriceRange","amount","currency","locale","sale","minimumAmount","maximumAmount","Price","CloseLabel","handleOnClose","scrollingElement","defaultOverflowValue","overflow","icon","CloseSVG","supportedTypes","mapToPickerOptions","items","item","text","inStock","Swatches","hideSelectedValue","onValues","onErrors","defaultOptions","selectionsToUpdate","RequiredLabel","selections","setSelections","accum","option","defaultSelection","find","includes","id","selected","value","forEach","selectionToUpdate","prev","selectedItem","next","errors","required","handleOnSelection","optionId","handlePickerSelect","selection","selectedOptions","toLowerCase","Picker","handleSelect","target","common","groupAriaLabel","onValue","TextSwatch","ImageSwatch","ColorSwatch","color","warn","multiple","console","toDateString","isDateValid","Error","split","Date","toLocaleDateString","toLanguageTag","dateString","some","format","test","date","getTime","setUrlParams","params","urlSearchParams","URLSearchParams","location","search","entries","delete","set","url","pathname","hash","history","replaceState","getUrlParams","ProductDetails","hideQuantity","hideShortDescription","hideDescription","hideAttributes","hideURLParams","hideSelectedOptionValue","slots","initialData","carousel","optionsConfig","onAddToCart","AddToCartLabel","IncrementerLabel","DetailsLabel","setLocale","config","getConfig","defaultLocale","setSelectionsToUpdate","data","setData","values","setValues","defaultValues","optionUIDs","optionsUIDs","valid","setValid","defaultSlotContext","localeEvent","events","on","payload","then","off","handleOnValues","newValues","handleOptionSelected","Object","keys","undefined","join","getRefinedProduct","anchorOptions","processUpdates","previousOptionsUIDs","updatedOptionsUIDs","every","handleOnErrors","_errors","__html","dangerouslySetInnerHTML","Slot","slot","Quantity","context","Incrementer","defaultValue","min","renderOptions","Options","Title","SKU","Breadcrumbs","setSeparator","_registerMethod","attrs","nextSeparator","separator","_setProps","appendLink","p","link","categories","appendHTMLElement","domElement","vnode","_htmlElementToVNode","render","Actions","appendButton","_button","buttonProps","button","ShortDescription","Description","Image","imageParams","prices","visible","SpecialPrice","final","regular","RegularPrice","thumbnailParams","Attributes","GalleryContent","InfoContent","Content","getInitialData","defaultSelections","models","getProductData"],"mappings":"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","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"ProductDetails.js","sources":["../../node_modules/@adobe/elsie/src/icons/ChevronDown.svg","../../node_modules/@adobe/elsie/src/icons/Close.svg","../../src/components/Carousel/Carousel.tsx","../../src/components/Product/Product.tsx","../../src/components/GalleryGrid/GalleryGrid.tsx","../../src/components/PriceRange/PriceRange.tsx","../../src/components/Overlay/Overlay.tsx","../../src/components/Swatches/Swatches.tsx","../../src/lib/date.ts","../../src/lib/url-params.ts","../../src/containers/ProductDetails/ProductDetails.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgChevronDown = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M7.74512 9.87701L12.0001 14.132L16.2551 9.87701\", stroke: \"currentColor\", strokeWidth: 1.5, strokeLinecap: \"square\", strokeLinejoin: \"round\" }));\nexport default SvgChevronDown;\n","import * as React from \"react\";\nconst SvgClose = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M18.3599 5.64001L5.62988 18.37\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M18.3599 18.37L5.62988 5.64001\", stroke: \"currentColor\" }));\nexport default SvgClose;\n","import { FunctionComponent, VNode } from 'preact';\nimport {\n HTMLAttributes,\n Children,\n useState,\n useRef,\n useEffect,\n useMemo,\n useCallback,\n} from 'preact/compat';\nimport { classes, debounce } from '@adobe/elsie/lib';\nimport { Button, Icon } from '@adobe/elsie/components';\nimport { ChevronDown } from '@adobe/elsie/icons';\nimport { useText } from '@adobe/elsie/i18n';\n\nimport '@/pdp/components/Carousel/Carousel.css';\n\ntype Show = number;\n\nexport interface CarouselProps extends Omit<HTMLAttributes<HTMLDivElement>, 'controls'> {\n children: VNode[] | VNode;\n thumbnails?: VNode[] | VNode;\n show?: Show | { small: Show; medium: Show; large: Show };\n gap?: 'small' | 'medium' | 'large' | null;\n scrollbar?: boolean;\n peak?: boolean;\n arrows?: boolean;\n controls?: 'thumbnailsRow' | 'thumbnailsColumn' | 'dots' | null;\n arrowsOnMainImage?: boolean;\n loop?: boolean;\n direction?: 'horizontal';\n style?: Record<string, string | number>;\n width?: string;\n height?: string;\n defaultIndex?: number;\n infinite?: boolean;\n isZoomed?: boolean;\n}\n\nexport const Carousel: FunctionComponent<CarouselProps> = ({\n show = 1,\n scrollbar = false,\n peak = false,\n arrows = false,\n controls = 'dots',\n arrowsOnMainImage = false,\n loop = false,\n gap = null,\n direction = 'horizontal',\n width = '100%',\n height = '100%',\n defaultIndex = 0,\n className,\n children,\n thumbnails = null,\n isZoomed,\n ...props\n}) => {\n // i18n\n const Label = useText('PDP.Carousel.label').label;\n const SlideLabel = useText('PDP.Carousel.Slide.label').label;\n const PreviousLabel = useText('PDP.Carousel.Previous.label').label;\n const NextLabel = useText('PDP.Carousel.Next.label').label;\n const ControlsLabel = useText('PDP.Carousel.Controls.label').label;\n const ControlsBtnLabel = useText('PDP.Carousel.Controls.Button.label').label;\n\n // States\n const [perPage, setPerPage] = useState(() => getPerPageFromBreakpoint(show));\n\n // Constants\n const length = Math.ceil(Children.toArray(children).length / perPage);\n const gapSizes = { small: 16, medium: 24, large: 64 };\n const peakWidth = peak ? 24 : 0;\n const gapWidth = gap ? gapSizes[gap] : 0;\n const rest = Children.toArray(children).length % perPage;\n const thumbGap = 16;\n const thumbSeen = 2;\n const iconSize = '32';\n\n // States\n const [current, setCurrent] = useState(\n loop ? defaultIndex + 1 : defaultIndex\n );\n\n // Thumbnails\n const thumbnailsRefs = useRef<HTMLLabelElement[]>([]);\n const [thumbWidth, setThumbWidth] = useState(0);\n const [thumbHeight, setThumbHeight] = useState(0);\n \n const thumbnailSlides = useMemo<VNode[]>(() => {\n return Children.toArray(thumbnails);\n }, [thumbnails]);\n\n // Slides\n const slides = useMemo<VNode[][]>(() => {\n const returnValue = Children.toArray(children).reduce((acc, child, i) => {\n if (i % perPage === 0) {\n return [...acc, [child]];\n }\n\n return [...acc.slice(0, -1), [...acc[acc.length - 1], child]];\n }, [] as VNode[][]);\n\n if (!loop || returnValue.length === 1) {\n return returnValue;\n }\n\n if (loop && !(Children.toArray(children).length % perPage !== 0)) {\n return [returnValue[length - 1]]\n .concat(returnValue)\n .concat([returnValue[0], returnValue[1]]);\n }\n\n return [Children.toArray(children).slice(-perPage)]\n .concat(returnValue)\n .concat([returnValue[0], returnValue[1]]);\n }, [children, perPage, length, loop]);\n\n // Wrapper\n const wrapperRef = useRef<HTMLDivElement>(null);\n const thumbnailsWrapperRef = useRef<HTMLDivElement>(null);\n const thumbnailControls = controls === 'thumbnailsRow' || controls === 'thumbnailsColumn';\n\n // Observe Window Resize (responsive)\n useEffect(() => {\n const wrapper = document.body;\n\n const handleResize = debounce(() => {\n setThumbWidth(wrapperRef.current?.offsetWidth ?? 0)\n setThumbHeight(wrapperRef.current?.offsetHeight ?? 0)\n const width = window.innerWidth;\n const newPerPage = getPerPageFromBreakpoint(show, width);\n\n if (newPerPage !== perPage) {\n setPerPage(newPerPage);\n }\n }, 50);\n\n const observer = new ResizeObserver(handleResize);\n observer.observe(wrapper);\n\n return () => {\n observer.unobserve(wrapper);\n };\n }, [perPage, show]);\n\n // Scrolling logic controls\n const handleThumbnailsScroll = useCallback((nextSlideIndex: number) => {\n const nextItem = loop ? nextSlideIndex - 1 : nextSlideIndex;\n const thumbnailRef = thumbnailsRefs?.current[0];\n const oneItemWidth = thumbnailRef?.offsetWidth + thumbGap;\n const oneItemHeight = thumbnailRef?.offsetHeight + thumbGap;\n const thumbnailsWrapper = thumbnailsWrapperRef.current!;\n\n if (controls === 'thumbnailsRow' && thumbnailsWrapper?.offsetWidth) {\n if (oneItemWidth * (nextItem + 1) > thumbnailsWrapper.offsetWidth) {\n thumbnailsWrapper.style.scrollBehavior = 'smooth';\n thumbnailsWrapper.scrollLeft = (nextItem + thumbSeen) * oneItemWidth;\n }\n\n if (thumbnailsWrapper.scrollLeft > oneItemWidth * nextItem) {\n thumbnailsWrapper.style.scrollBehavior = 'smooth';\n thumbnailsWrapper.scrollLeft = (nextItem - thumbSeen) * oneItemWidth;\n }\n }\n\n if (controls === 'thumbnailsColumn' && thumbnailsWrapper?.offsetHeight) {\n if (oneItemHeight * (nextItem + 1) > thumbnailsWrapper.offsetHeight) {\n thumbnailsWrapper.style.scrollBehavior = 'smooth';\n thumbnailsWrapper.scrollTop = (nextItem + thumbSeen) * oneItemHeight;\n }\n\n if (thumbnailsWrapper.scrollTop > oneItemHeight * nextItem) {\n thumbnailsWrapper.style.scrollBehavior = 'smooth';\n thumbnailsWrapper.scrollTop = (nextItem - thumbSeen) * oneItemHeight;\n }\n }\n }, [controls, loop]);\n\n // Navigation\n const handleScrollTo = useCallback(\n (nextSlideIndex: number, smooth?: boolean, reset?: boolean) => {\n if (controls === 'thumbnailsRow' || controls === 'thumbnailsColumn') {\n handleThumbnailsScroll(nextSlideIndex);\n }\n\n const wrapper = wrapperRef.current!;\n const realWidth = peakWidth\n ? wrapper.offsetWidth - peakWidth\n : wrapper.offsetWidth - peakWidth + gapWidth;\n\n const items = Array.from(wrapper.querySelectorAll('[data-index]')).filter(\n (element) => {\n const dataIndex = Number(element.getAttribute('data-index')!);\n return !isNaN(dataIndex) && dataIndex > -1;\n }\n );\n\n const item = items[nextSlideIndex];\n\n if (!item) {\n return;\n }\n\n if (reset) {\n const futureIndex = nextSlideIndex === 0 ? length : 0;\n const scrollWidth =\n realWidth * (length + (rest ? rest : perPage) / perPage);\n\n if (wrapper.scrollLeft >= 0 && wrapper.scrollLeft < realWidth - 5) {\n handleScrollTo(1, true);\n return;\n }\n\n if (\n wrapper.scrollLeft > scrollWidth - realWidth &&\n wrapper.scrollLeft <= scrollWidth\n ) {\n handleScrollTo(length, true);\n return;\n }\n\n wrapper.style.scrollBehavior = 'auto';\n wrapper.scrollLeft = futureIndex === 0 ? 0 : scrollWidth;\n handleScrollTo(futureIndex === 0 ? 1 : length, true);\n return;\n }\n\n const diff =\n ((wrapper.offsetWidth - gapWidth) / perPage) *\n slides[nextSlideIndex].length -\n peakWidth;\n\n wrapper.style.scrollBehavior = smooth ? 'smooth' : 'auto';\n wrapper.scrollLeft =\n slides[nextSlideIndex].length === perPage\n ? realWidth * nextSlideIndex\n : realWidth * (nextSlideIndex - 1) + diff;\n return;\n },\n [gapWidth, length, peakWidth, perPage, rest, slides, handleThumbnailsScroll, controls]\n );\n\n const handleGoToPrev = useCallback(() => {\n if (loop) {\n const nextSlideIndex = current - 1;\n handleScrollTo(nextSlideIndex, true, current === 1);\n return;\n }\n\n const nextSlideIndex = current <= 0 ? 0 : current - 1;\n\n handleScrollTo(nextSlideIndex, true);\n }, [current, handleScrollTo, loop]);\n\n const handleGoToNext = useCallback(() => {\n const lastSlideIndex = slides.length - 1;\n\n if (loop) {\n const nextSlideIndex = current + 1;\n handleScrollTo(nextSlideIndex, true, current === length);\n return;\n }\n\n const nextSlideIndex =\n current >= lastSlideIndex ? lastSlideIndex : current + 1;\n\n handleScrollTo(nextSlideIndex, true);\n }, [slides.length, loop, current, handleScrollTo, length]);\n\n // Navigate with keyboard\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n handleGoToPrev();\n }\n\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n handleGoToNext();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [handleGoToNext, handleGoToPrev]);\n\n // Set default index\n useEffect(() => {\n handleScrollTo(loop ? defaultIndex + 1 : defaultIndex, false);\n }, [defaultIndex, handleScrollTo, loop]);\n\n // Track scrolling (swipes)\n const handleOnScroll = debounce(() => {\n const wrapper = wrapperRef.current!;\n const realWidth = peakWidth\n ? wrapper.offsetWidth - peakWidth\n : wrapper.offsetWidth - peakWidth + gapWidth;\n const dividing = wrapper.scrollLeft / realWidth;\n const nextSlideIndex = Math.round(dividing) - dividing < 1 ? Math.round(dividing) : Math.ceil(dividing);\n\n if (thumbnailControls) {\n handleThumbnailsScroll(nextSlideIndex);\n }\n\n if (loop) {\n const totalWidth =\n realWidth * (length + (rest ? rest : perPage) / perPage);\n\n if (Math.ceil(wrapper.scrollLeft) >= Math.ceil(totalWidth) - 5) {\n wrapper.style.scrollBehavior = 'auto';\n wrapper.scrollLeft =\n wrapper.offsetWidth * 1 +\n (Math.ceil(wrapper.scrollLeft) - Math.ceil(totalWidth) - peakWidth);\n return;\n }\n\n if (wrapper.scrollLeft === 0) {\n wrapper.style.scrollBehavior = 'auto';\n wrapper.scrollLeft = totalWidth - wrapper.offsetWidth + peakWidth;\n return;\n }\n }\n\n if (current !== nextSlideIndex) {\n setCurrent(nextSlideIndex);\n }\n }, 100);\n\n useEffect(() => {\n const wrapper = wrapperRef.current;\n wrapper?.addEventListener('scroll', handleOnScroll);\n\n return () => {\n wrapper?.removeEventListener('scroll', handleOnScroll);\n };\n }, [handleOnScroll]);\n\n // thumbnails is column -> container is row reverse, controls is column\n // thumbnails is row -> container is column, controls is row\n const getArrow = (forThumbnails: boolean, direction: string, callback: () => void) => {\n return <Button\n className={classes([\n ['pdp-carousel__button', !forThumbnails],\n [`pdp-carousel__button--${direction}`, !forThumbnails],\n [`pdp-carousel__button--${controls}`, forThumbnails]\n ])}\n style={{\n '--height': `${thumbHeight}px`,\n }}\n variant=\"tertiary\"\n aria-label={direction === 'next' ? NextLabel : PreviousLabel}\n onClick={callback}\n disabled={loop ? false : direction === 'next' ? current >= slides.length - 1 : current < 1}\n >\n <Icon\n className={classes([\n ['pdp-carousel__button__icon', !forThumbnails],\n [`pdp-carousel__button__icon--${direction}`, !forThumbnails],\n [`pdp-carousel__button__icon--${controls}--${direction}`, forThumbnails]\n ])}\n size={iconSize}\n source={ChevronDown}\n />\n </Button>\n }\n\n const prevArrow = arrows && slides.length != 1 && getArrow(thumbnailControls, 'prev', handleGoToPrev);\n\n const nextArrow = arrows && slides.length != 1 && getArrow(thumbnailControls, 'next', handleGoToNext);\n\n const prevArrowMainImage = arrows && slides.length != 1 && getArrow(false, 'prev', handleGoToPrev);\n \n const nextArrowMainImage = arrows && slides.length != 1 && getArrow(false, 'next', handleGoToNext);\n\n return (\n <div\n role=\"region\"\n aria-roledescription={Label}\n className={classes([\n 'pdp-carousel',\n ['pdp-carousel--main-image-controls', arrowsOnMainImage],\n ['pdp-carousel--arrows', arrows && !thumbnailControls],\n [`pdp-carousel--${controls}`, thumbnailControls],\n className,\n ])}\n style={{\n '--flex-carousel': controls === 'thumbnailsColumn' ? 'row-reverse' : 'column',\n '--gap': thumbnailControls ? '0' : 'var(--spacing-small)',\n '--width': width,\n }}\n {...props}\n >\n\n {/* Slideshow */}\n <div\n ref={wrapperRef}\n className={classes([\n 'pdp-carousel__wrapper',\n `pdp-carousel__wrapper--${direction}`,\n ['pdp-carousel__wrapper--scrollbar', scrollbar],\n ['pdp-carousel__wrapper--peak', peak],\n ])}\n style={{\n '--total-width': controls === 'thumbnailsColumn' ? `81.6%` : `100%`,\n '--height': controls === 'thumbnailsColumn' ? 'auto' : height,\n '--gap': gap ? `var(--spacing-${gap})` : '0px',\n '--per-page': perPage,\n }}\n tabIndex={0}\n >\n {slides.map((page, index) => {\n const orphan = page.length < perPage;\n\n return (\n <div\n key={index}\n role=\"group\"\n aria-roledescription={SlideLabel}\n data-index={index}\n className={classes([\n 'pdp-carousel__slide',\n `pdp-carousel__slide--${direction}`,\n ['pdp-carousel__slide--active', current === index],\n ['pdp-carousel__slide--orphan', orphan],\n ])}\n style={{\n '--length': page.length,\n }}\n >\n {page}\n </div>\n );\n })}\n </div>\n\n {/* Previous and next arrows for Carousel without thumbnails */}\n {\n (!thumbnailControls) && (\n <>\n {prevArrow}\n {nextArrow}\n </>\n )\n }\n\n {\n (thumbnailControls && arrowsOnMainImage) && (\n <>\n {prevArrowMainImage}\n {nextArrowMainImage}\n </>\n )\n }\n\n {/* Controls */}\n {controls && slides.length != 1 && (\n <div\n className={classes([\n [`pdp-carousel__controls__container--${controls}`, thumbnailControls],\n ['pdp-carousel__controls__container--no-arrows', !arrows || arrowsOnMainImage],\n ])}\n style={{\n '--width': controls === 'thumbnailsRow' ? `${thumbWidth}px` : width,\n '--height': `${thumbHeight}px`,\n '--nr-thumbnails': thumbnailSlides.length,\n }}\n >\n {(thumbnailControls || isZoomed) && !arrowsOnMainImage && prevArrow}\n <div\n ref={thumbnailsWrapperRef}\n className={classes([\n [`pdp-carousel__controls__wrapper--${controls}`, thumbnailControls],\n [`pdp-carousel__controls__wrapper`, thumbnailControls],\n ])}\n >\n <div\n role=\"group\"\n aria-label={ControlsLabel}\n className={classes([\n 'pdp-carousel__controls',\n [`pdp-carousel__controls--${controls}`, thumbnailControls],\n ])}\n >\n {(loop ? slides.slice(0, length) : slides).map((_, key) => {\n const buttonsLength = loop ? length : slides.length;\n const active = loop ? current - 1 === key : current === key;\n\n if (!thumbnailControls) {\n return (\n <button\n key={key}\n aria-label={ControlsBtnLabel.replace(\n '{key}',\n String(key + 1)\n ).replace('{total}', String(buttonsLength))}\n onClick={() => {\n handleScrollTo(loop ? key + 1 : key, true);\n }}\n className={classes([\n 'pdp-carousel__controls__button',\n ['pdp-carousel__controls__button--active', active],\n ])}\n />\n );\n }\n return (\n <label\n className={classes(['pdp-carousel__thumbnail__container'])}\n key={key}\n ref={(el: HTMLLabelElement | null) => {\n if (el) {\n thumbnailsRefs.current[key] = el;\n }\n }}\n >\n <input\n type=\"radio\"\n name={\"carousel-thumbnails\"}\n aria-label={ControlsBtnLabel.replace(\n '{key}',\n String(key + 1)\n ).replace('{total}', String(buttonsLength))}\n checked={active && thumbWidth !== 0}\n onChange={() => {\n handleScrollTo(loop ? key + 1 : key, true);\n }}\n {...props}\n className={classes([\n 'pdp-carousel__thumbnail',\n ['pdp-carousel__thumbnail--selected', active && thumbWidth !== 0],\n ])}\n />\n\n <span\n className={classes([\n 'pdp-carousel__thumbnail__span',\n ])}\n >\n {thumbnailSlides[key]}\n </span>\n </label>\n )\n })}\n </div>\n </div>\n {(thumbnailControls || isZoomed) && !arrowsOnMainImage && nextArrow}\n </div>\n )}\n </div>\n );\n};\n\n// Utilities\nfunction getPerPageFromBreakpoint(\n breakpoints:\n | {\n small: number;\n medium: number;\n large: number;\n }\n | number,\n width = 0\n) {\n if (typeof breakpoints === 'number') return breakpoints;\n\n const { small, medium, large } = breakpoints;\n const mediumViewport = 786;\n const largeVierport = 1024;\n\n if (width > largeVierport) return large;\n if (width > mediumViewport) return medium;\n return small;\n}\n","import { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes, useState } from 'preact/compat';\nimport { classes, VComponent } from '@adobe/elsie/lib';\nimport { useText } from '@adobe/elsie/i18n';\n\nimport { Carousel, GalleryGrid, Overlay } from '@/pdp/components';\nimport '@/pdp/components/Product/Product.css';\n\nimport { CarouselConfig } from '@/pdp/containers';\n\ninterface ProductCarouselConfig extends CarouselConfig {\n thumbnails: VNode[];\n}\n\nexport interface ProductProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n title?: VNode;\n breadcrumbs?: VNode;\n galleryContent?: VNode;\n infoContent?: VNode;\n productContent?: VNode;\n shortDescription?: VNode;\n description?: VNode;\n attributes?: VNode;\n images: VNode[];\n options?: VNode;\n sku?: VNode;\n price?: VNode;\n specialPrice?: VNode;\n outOfStock: boolean;\n actions?: VNode;\n quantity?: VNode;\n carouselConfig?: ProductCarouselConfig;\n}\n\nexport const Product: FunctionComponent<ProductProps> = ({\n title,\n breadcrumbs,\n galleryContent,\n infoContent,\n productContent,\n sku,\n outOfStock,\n shortDescription,\n description,\n attributes,\n images,\n options,\n price,\n specialPrice,\n className,\n children,\n quantity,\n actions,\n carouselConfig,\n ...props\n}) => {\n // i18n\n const RegularPriceLabel = useText('PDP.Product.RegularPrice.label').label;\n const SpecialPriceLabel = useText('PDP.Product.SpecialPrice.label').label;\n const OutOfStockLabel = useText('PDP.Product.OutOfStock.label').label;\n const ImagesLabel = useText('PDP.Product.Image.label').label;\n\n const [zoom, setZoom] = useState<number | null>(null);\n\n const galleryImages = images?.length ? (\n images.map((image, key) => (\n <VComponent\n key={key}\n node={image}\n loading={key === 0 ? 'eager' : 'lazy'}\n alt={\n title?.props?.children &&\n ImagesLabel?.replace('{product}', title.props.children.toString())\n .replace('{key}', String(key + 1))\n .replace('{total}', String(images.length))\n }\n onClick={() => setZoom(key)}\n />\n ))\n ) : (\n <img\n src=\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\"\n className=\"pdp-product__images__placeholder\"\n aria-hidden\n />\n );\n\n const localThumbnailsImages = carouselConfig?.thumbnails?.length ? (\n carouselConfig.thumbnails.map((image, key) => (\n <VComponent\n key={key}\n node={image}\n loading={carouselConfig?.thumbnailsLoadingMode || 'lazy'}\n alt={\n title?.props?.children &&\n ImagesLabel?.replace('{product}', title.props.children.toString())\n .replace('{key}', String(key + 1))\n .replace('{total}', String(images.length))}\n />\n ))\n ) : (\n <img\n src=\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\"\n className=\"pdp-product__images__placeholder\"\n aria-hidden\n />\n );\n\n return (\n <div {...props} className={classes(['pdp-product', className])}>\n {breadcrumbs && (\n <VComponent node={breadcrumbs} className=\"pdp-product__breadcrumbs\" />\n )}\n <div className=\"pdp-product__column-container pdp-product__gallery-column\">\n <div className=\"pdp-product__column-body\">\n {\n carouselConfig?.controls ?\n <Carousel\n className=\"pdp-product__overlay__carousel\"\n arrows={images?.length > 1}\n controls={images?.length > 1 ? carouselConfig.controls : 'dots'}\n arrowsOnMainImage={carouselConfig?.arrowsOnMainImage}\n loop={carouselConfig?.loopable && images?.length > 1}\n peak={carouselConfig?.thumbnails?.length > 1 && carouselConfig?.peak?.desktop || false}\n gap={carouselConfig?.gap || null}\n width=\"100%\"\n height=\"100%\"\n defaultIndex={zoom || 0}\n thumbnails={localThumbnailsImages}\n >\n {galleryImages}\n </Carousel>\n :\n <GalleryGrid className=\"pdp-product__images\" gap=\"small\">\n {galleryImages}\n </GalleryGrid>\n }\n </div>\n {galleryContent && (\n <VComponent\n node={galleryContent}\n className=\"pdp-product__gallery-content\"\n />\n )}\n </div>\n\n <div className=\"pdp-product__column-container pdp-product__content-column\">\n <div className=\"pdp-product__column-body\">\n <div className=\"pdp-product__header\">\n {title && (\n <VComponent\n node={title}\n className=\"pdp-product__title\"\n />\n )}\n\n {sku && (\n <VComponent node={sku} className=\"pdp-product__sku\" />\n )}\n </div>\n\n <div className=\"pdp-product__prices\">\n {specialPrice && (\n <VComponent\n node={specialPrice}\n className={classes(['pdp-product__price-special', 'pdp-product__price'])}\n aria-label={SpecialPriceLabel}\n role=\"text\"\n />\n )}\n {price && (\n <VComponent\n node={price}\n className={classes(['pdp-product__price-regular', 'pdp-product__price--grey'])}\n aria-label={RegularPriceLabel}\n role=\"text\"\n />\n )}\n </div>\n\n {/* Small Screen Gallery */}\n {\n carouselConfig?.mobile ?\n <Carousel\n className=\"pdp-product__images pdp-product__images--carousel pdp-product__images--carousel--thumbnails\"\n width=\"100%\"\n height=\"auto\"\n arrows={images?.length > 1}\n controls={images?.length > 1 ? 'thumbnailsRow' : null}\n loop={carouselConfig?.loopable && images?.length > 1}\n peak={carouselConfig?.thumbnails?.length > 1 && carouselConfig?.peak?.mobile || false}\n gap={carouselConfig?.gap || null}\n thumbnails={localThumbnailsImages}\n >\n {galleryImages}\n </Carousel>\n :\n <Carousel\n className=\"pdp-product__images pdp-product__images--carousel\"\n peak={carouselConfig?.peak?.mobile && images?.length > 1}\n gap={carouselConfig?.gap || null}\n width=\"100%\"\n height=\"auto\"\n arrows={images?.length > 1}\n controls={images?.length > 1 ? 'dots' : null}\n loop={carouselConfig?.loopable && images?.length > 1}\n >\n {galleryImages}\n </Carousel>\n }\n\n <div\n className={classes([\n 'pdp-product__actions',\n [`pdp-product__actions--out-of-stock`, outOfStock],\n ])}\n >\n {outOfStock && (\n <div className=\"pdp-product__out-of-stock__text\">\n {OutOfStockLabel}\n </div>\n )}\n\n {options && (\n <VComponent\n node={options}\n className={classes(['pdp-product__options'])}\n />\n )}\n\n {quantity && (\n <div className=\"pdp-product__quantity\">\n <VComponent node={quantity} />\n </div>\n )}\n\n {actions && (\n <VComponent\n node={actions}\n className={classes(['pdp-product__buttons'])}\n />\n )}\n </div>\n\n {shortDescription && (\n <VComponent\n node={shortDescription}\n className={classes(['pdp-product__short_description'])}\n />\n )}\n\n {description && (\n <VComponent\n node={description}\n className={classes(['pdp-product__description'])}\n />\n )}\n\n {attributes ? (\n <div className=\"pdp-product__attributes\">{attributes}</div>\n ) : null}\n </div>\n {infoContent && (\n <VComponent\n node={infoContent}\n className=\"pdp-product__info-content\" />\n )}\n </div>\n\n {productContent && (\n <VComponent\n node={productContent}\n className=\"pdp-product__content\"\n />\n )}\n\n {/* Zoom Overlay */}\n {zoom === null ? null : (\n <Overlay\n className=\"pdp-product__overlay\"\n onClose={() => setZoom(null)}\n centered\n >\n <Carousel\n className=\"pdp-product__overlay__carousel\"\n arrows={images?.length > 1}\n width=\"100%\"\n height=\"100%\"\n defaultIndex={zoom || 0}\n loop={images?.length > 1}\n controls={images?.length > 1 ? 'dots' : null}\n isZoomed\n >\n {galleryImages}\n </Carousel>\n </Overlay>\n )}\n </div>\n );\n};\n","import { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes, Children } from 'preact/compat';\nimport { classes, VComponent } from '@adobe/elsie/lib';\nimport '@/pdp/components/GalleryGrid/GalleryGrid.css';\n\nexport interface GalleryGridProps extends HTMLAttributes<HTMLDivElement> {\n children: VNode[] | VNode;\n gap?: 'small' | 'medium' | 'large' | null;\n style?: Record<string, string | number>;\n}\n\nexport const GalleryGrid: FunctionComponent<GalleryGridProps> = ({\n children,\n gap = null,\n className,\n style,\n ...props\n}) => {\n const count = Children.count(children);\n\n return (\n <div\n {...props}\n className={classes(['pdp-gallery-grid', className])}\n style={{\n '--gap': gap ? `var(--spacing-${gap})` : '0px',\n ...style,\n }}\n >\n {Children.map(\n children,\n (child: VNode<HTMLAttributes<HTMLElement>>, key) => (\n <div key={count + key} className=\"pdp-gallery-grid__item\">\n <VComponent\n key={child.props.src}\n node={child}\n loading={key === 0 ? 'eager' : 'lazy'}\n />\n </div>\n )\n )}\n </div>\n );\n};\n","/*\nADOBE CONFIDENTIAL\nCopyright 2023 Adobe\nAll Rights Reserved.\nNOTICE: All information contained herein is, and remains\nthe property of Adobe and its suppliers, if any. The intellectual\nand technical concepts contained herein are proprietary to Adobe\nand its suppliers and are protected by all applicable intellectual\nproperty laws, including trade secret and copyright laws.\nDissemination of this information or reproduction of this material\nis strictly forbidden unless prior written permission is obtained\nfrom Adobe.\n*/\n\nimport { HTMLAttributes } from 'preact/compat';\nimport '@/pdp/components/PriceRange/PriceRange.css';\nimport { FunctionalComponent } from 'preact';\nimport { Price } from '@adobe/elsie/components';\n\nexport interface PriceRangeProps extends HTMLAttributes<HTMLDivElement> {\n locale?: string;\n variant?: 'default' | 'strikethrough';\n currency?: string;\n\n // Simple product\n amount?: number;\n sale?: boolean;\n\n // Complex product (range)\n minimumAmount?: number;\n maximumAmount?: number;\n}\n\nexport const PriceRange: FunctionalComponent<PriceRangeProps> = ({\n amount,\n currency,\n locale,\n variant,\n sale,\n minimumAmount,\n maximumAmount,\n className,\n ...props\n}) => {\n return (\n <>\n {amount || minimumAmount === maximumAmount ? (\n <div className={'pdp-price-range'} {...props}>\n <Price\n amount={amount ? amount : minimumAmount}\n currency={currency}\n locale={locale}\n variant={variant}\n sale={sale}\n className={className}\n />\n </div>\n ) : (\n <div className={'pdp-price-range'} {...props}>\n <Price\n amount={minimumAmount}\n currency={currency}\n locale={locale}\n className={className}\n />\n <span className=\"pdp-price-range__label\">{'-'}</span>\n <Price\n amount={maximumAmount}\n currency={currency}\n locale={locale}\n className={className}\n />\n </div>\n )}\n </>\n );\n};\n","import { FunctionComponent } from 'preact';\nimport { HTMLAttributes, useCallback, useEffect } from 'preact/compat';\nimport { classes } from '@adobe/elsie/lib';\nimport { useText } from '@adobe/elsie/i18n';\nimport { Close as CloseSVG } from '@adobe/elsie/icons';\nimport { Button } from '@adobe/elsie/components';\n\nimport '@/pdp/components/Overlay/Overlay.css';\n\nexport interface OverlayProps extends HTMLAttributes<HTMLDivElement> {\n centered?: boolean;\n onClose?: () => void;\n}\n\nexport const Overlay: FunctionComponent<OverlayProps> = ({\n centered,\n onClose,\n className,\n children,\n ...props\n}) => {\n // i18n\n const CloseLabel = useText('PDP.Overlay.Close.label').label;\n\n const handleOnClose = useCallback(() => {\n onClose?.();\n }, [onClose]);\n\n // Close on ESC\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n handleOnClose();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [handleOnClose]);\n\n // Prevent document scrolling\n useEffect(() => {\n const scrollingElement = document.scrollingElement as HTMLElement;\n\n const defaultOverflowValue = scrollingElement.style.overflow;\n\n scrollingElement.style.overflow = 'hidden';\n\n return () => {\n scrollingElement.style.overflow = defaultOverflowValue;\n };\n }, []);\n\n return (\n <div\n {...props}\n className={classes([\n 'pdp-overlay',\n ['pdp-overlay--centered', centered],\n className,\n ])}\n >\n <div className=\"pdp-overlay__content\">{children}</div>\n\n <Button\n aria-label={CloseLabel}\n variant=\"tertiary\"\n className=\"pdp-overlay__close-button\"\n onClick={handleOnClose}\n icon={<CloseSVG />}\n />\n </div>\n );\n};\n","import { FunctionComponent } from 'preact';\nimport { HTMLAttributes, useState, useMemo, useCallback, useEffect } from 'preact/compat';\nimport { classes } from '@adobe/elsie/lib';\nimport { useText } from '@adobe/elsie/i18n';\nimport { ColorSwatch, ImageSwatch, TextSwatch, Picker, PickerOption } from '@adobe/elsie/components';\n\nimport '@/pdp/components/Swatches/Swatches.css';\n\nconst supportedTypes = ['text', 'image', 'color', 'dropdown'];\n\nconst mapToPickerOptions = (items: OptionValue[]): PickerOption[] => {\n return items.map((item: OptionValue) => ({ ...item, text: item.label, disabled: !item.inStock, }));\n}\n\ntype OptionValue = {\n id: string;\n label: string;\n inStock: boolean;\n value: string;\n selected?: boolean;\n};\n\nexport type Option = {\n id: string;\n type: (typeof supportedTypes)[number];\n label: string;\n required?: boolean;\n multiple?: boolean;\n items: OptionValue[];\n};\n\ntype Selection = { [id: string]: { label: string; value: string } };\n\nexport interface SwatchesProps extends HTMLAttributes<HTMLDivElement> {\n options: Array<{\n id: string;\n type: (typeof supportedTypes)[number];\n label: string;\n required?: boolean;\n multiple?: boolean;\n items: OptionValue[];\n }>;\n hideSelectedValue?: boolean;\n\n defaultOptions?: string[];\n selectionsToUpdate?: Option[];\n onValues?: (uids: Selection, current: string) => void;\n onErrors?: (errors: { [id: string]: string }) => void;\n}\n\nexport const Swatches: FunctionComponent<SwatchesProps> = ({\n options,\n hideSelectedValue,\n onValues,\n onErrors,\n defaultOptions,\n selectionsToUpdate,\n className,\n children,\n ...props\n}) => {\n // i18n\n const RequiredLabel = useText('PDP.Swatches.Required.label').label;\n\n const [selections, setSelections] = useState<Selection>(() => {\n const initial = options?.reduce((accum, option) => {\n const { items } = option;\n const defaultSelection = items?.find((item) => defaultOptions?.includes(item.id));\n const selected = items?.find((item) => item.selected);\n if (defaultSelection) {\n return {\n ...accum,\n [option.id]: { label: defaultSelection.label, value: defaultSelection.id },\n };\n } else if (selected) {\n return {\n ...accum,\n [option.id]: { label: selected.label, value: selected.id },\n };\n }\n return accum;\n }, {} as Selection);\n\n return initial;\n });\n\n // this only applies for the case with anchor options\n // update selections in the swatches if they are updated in the parent component\n useEffect(() => {\n selectionsToUpdate?.forEach((selectionToUpdate) => {\n setSelections((prev) => {\n const selectedItem = selectionToUpdate\n ?.items?.find((item) => item.selected);\n if (!selectedItem) return prev;\n\n const next = {\n ...prev,\n [selectionToUpdate.id]: {\n label: selectedItem?.label,\n value: selectedItem?.id\n },\n };\n return next;\n });\n });\n }, [selectionsToUpdate, setSelections]);\n\n // Update invalid options\n useMemo(() => {\n const errors = options?.reduce((accum, option) => {\n option?.items?.forEach((item) => {\n const selected = selections[option.id]?.value === item.id;\n\n // Validate required\n if (option.required && !selected) {\n accum[option.id] = RequiredLabel;\n }\n });\n\n return accum;\n }, {} as { [id: string]: string });\n\n // Call the callback\n onErrors?.(errors);\n\n return errors;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selections]);\n\n const handleOnSelection = useCallback(\n (id: string, label: string, optionId: string) => {\n setSelections((prev) => {\n const next = {\n ...prev,\n [id]: { label, value: optionId },\n };\n\n // Call the callback\n onValues?.(next, optionId);\n\n // Return the next state\n return next;\n });\n },\n [onValues]\n );\n\n // Function to handle the picker selection\n const handlePickerSelect = (optionId: string, selection: any ) => {\n const label = selection.selectedOptions[0]?.label ?? '';\n handleOnSelection(optionId, label, selection.value);\n };\n\n const Swatches = useCallback(\n ({ items, id, required, type, selected, label }: any) => {\n return (\n <div className={classes(['pdp-swatches__options'])}>\n {\n type?.toLowerCase() === 'dropdown' ?\n <Picker aria-label={label} handleSelect={(event) => handlePickerSelect(id, event.target)} options={mapToPickerOptions(items)} value={selected} />\n :\n items?.map((option: any) => {\n const common = {\n key: option.id,\n id: option.id,\n name: id,\n value: option.value,\n label: option.label,\n groupAriaLabel: label,\n selected: selected === option.id,\n outOfStock: !option.inStock,\n // API may return null, we default to true as all swatches are required.\n // we still comply to this in case the api return \"false\".\n required: required === null ? true : required,\n onValue: () => {\n handleOnSelection(id, option.label, option.id);\n },\n };\n\n switch (type) {\n case 'text':\n return <TextSwatch {...common} label={option.label} />;\n\n case 'image':\n return (\n <ImageSwatch\n {...common}\n src={option.value}\n alt={option.label}\n />\n );\n\n case 'color':\n return (\n <ColorSwatch {...common} size=\"large\" color={option.value} />\n );\n\n default:\n console.warn(`Invalid swatch type ${type}`);\n return null;\n }\n })}\n </div>\n );\n },\n [handleOnSelection]\n );\n\n return (\n <div {...props} className={classes(['pdp-swatches', className])}>\n {options?.map(({ type, label, id, multiple, required, items }) => {\n if (!type) {\n console.warn(`Bundle product not supported on UI.`);\n return;\n }\n\n // Only render supported types\n if (!supportedTypes.includes(type)) {\n console.warn(`Invalid swatch type ${type}`);\n }\n\n if (multiple) {\n console.warn(\n 'Multiple selection swatches are not currently supported.'\n );\n }\n\n return (\n <div\n key={`swatch-item-${id}`}\n id={`swatch-item-${id}`}\n data-slot-key={`product-swatch--${id}`}\n className=\"pdp-swatches__field\"\n >\n <div className=\"pdp-swatches__field__label\">\n {selections[id] ? (hideSelectedValue ? `${label}` : `${label}: ${selections[id].label}`) : label}\n </div>\n\n <Swatches\n id={id}\n type={type}\n required={required}\n items={items}\n label={label} //label referring to the name of the swatchGroup\n selected={selections[id]?.value}\n />\n </div>\n );\n })}\n </div>\n );\n};\n","import { toLanguageTag } from '@adobe/elsie/lib';\n\nexport function toDateString(value: string, locale = 'en_US') {\n if (!isDateValid(value)) throw Error('Invalid date string');\n\n // normalize time to 00:00:00\n const time = value.split(' ')[1];\n if (!time) value = `${value} 00:00:00`;\n\n return new Date(value).toLocaleDateString(toLanguageTag(locale)).toString();\n}\n\nexport function isDateValid(dateString: string) {\n const acceptedFormats = [\n /^\\d{4}-\\d{2}-\\d{2}$/, // YYYY-MM-DD\n /^\\d{1,2}\\/\\d{1,2}\\/\\d{4}$/, // MM/DD/YYYY\n /^\\d{2}\\/\\d{2}\\/\\d{4}$/, // MM/DD/YYYY\n /^\\d{4}\\/\\d{2}\\/\\d{2}$/, // YYYY/MM/DD\n /^\\d{1,2}\\.\\d{1,2}\\.\\d{4}$/, // DD.MM.YYYY\n /^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$/, // YYYY-MM-DD HH:mm:ss\n ];\n\n if (!acceptedFormats.some((format) => format.test(dateString))) return false;\n\n const date = new Date(dateString);\n return !isNaN(date.getTime());\n}\n","export function setUrlParams(\n params: Record<string, string | number | null>\n): void {\n const urlSearchParams = new URLSearchParams(window.location.search);\n\n Object.entries(params).forEach(([key, value]) => {\n if (value === null) {\n urlSearchParams.delete(key);\n } else {\n urlSearchParams.set(key, String(value));\n }\n });\n\n let url = window.location.pathname;\n url += `?${urlSearchParams.toString()}`;\n url += window.location.hash;\n\n window.history.replaceState({}, '', url);\n}\n\nexport function getUrlParams(): Record<string, string> {\n const urlSearchParams = new URLSearchParams(window.location.search);\n const params: Record<string, string> = {};\n\n urlSearchParams.forEach((value, key) => {\n params[key] = value;\n });\n\n return params;\n}\n","import {\n HTMLAttributes,\n useEffect,\n useState,\n useCallback,\n useMemo,\n} from 'preact/compat';\n\nimport {\n Container,\n toLanguageTag,\n SlotProps,\n SlotMethod,\n Slot,\n ResolveImageUrlOptions,\n} from '@adobe/elsie/lib';\n\nimport {\n Button,\n Icon,\n ButtonProps,\n Image,\n Incrementer,\n Breadcrumbs,\n} from '@adobe/elsie/components';\nimport { Product, Swatches, PriceRange, Option } from '@/pdp/components';\nimport { config, getProductData, getRefinedProduct } from '@/pdp/api';\nimport { events } from '@adobe/event-bus';\nimport { Lang, useText } from '@adobe/elsie/i18n';\nimport { isDateValid, toDateString } from '@/pdp/lib/date';\nimport { getUrlParams, setUrlParams } from '@/pdp/lib/url-params';\nimport { ProductModel } from '@/pdp/data/models';\n\ntype IconType = keyof typeof import('@adobe/elsie/icons');\n\ntype Values = {\n sku: string;\n quantity: number;\n optionsUIDs?: string[];\n};\n\ntype DefaultSlotContext = {\n data: ProductModel | null;\n values: Values;\n valid: boolean;\n};\n\nexport type CarouselConfig = {\n mobile?: boolean;\n controls?: 'thumbnailsRow' | 'thumbnailsColumn' | 'dots' | null;\n arrowsOnMainImage?: boolean;\n loopable?: boolean;\n peak?: {\n mobile: boolean,\n desktop: boolean,\n }\n gap?: 'small' | 'medium' | 'large' | null;\n thumbnailsLoadingMode?: 'lazy' | 'eager';\n imageParams?: ResolveImageUrlOptions,\n thumbnailParams?: ResolveImageUrlOptions\n};\n\nexport type OptionsConfig = {\n anchorOptions?: string[];\n};\n\nexport interface ProductDetailsProps extends HTMLAttributes<HTMLDivElement> {\n sku: string;\n productData?: ProductModel;\n hideSku?: boolean;\n hideQuantity?: boolean;\n hideShortDescription?: boolean;\n hideDescription?: boolean;\n hideAttributes?: boolean;\n hideSelectedOptionValue?: boolean;\n hideURLParams?: boolean;\n slots?: {\n Title?: SlotProps<DefaultSlotContext>;\n\n SKU?: SlotProps<DefaultSlotContext>;\n\n RegularPrice?: SlotProps<DefaultSlotContext>;\n\n SpecialPrice?: SlotProps<DefaultSlotContext>;\n\n Options?: SlotProps<DefaultSlotContext>;\n\n Quantity?: SlotProps<DefaultSlotContext>;\n\n Actions?: SlotProps<DefaultSlotContext & {\n appendButton: SlotMethod<\n Omit<ButtonProps, 'icon'> & {\n text?: string;\n icon?: IconType;\n }\n >;\n }>;\n\n ShortDescription?: SlotProps<DefaultSlotContext>;\n\n Description?: SlotProps<DefaultSlotContext>;\n\n Attributes?: SlotProps<DefaultSlotContext>;\n\n Breadcrumbs?: SlotProps<DefaultSlotContext & {\n setSeparator: SlotMethod<IconType>;\n\n appendLink: SlotMethod<\n HTMLAttributes<HTMLAnchorElement> & { text?: string }\n >;\n\n appendHTMLElement: SlotMethod<HTMLElement>;\n }>;\n\n GalleryContent?: SlotProps<DefaultSlotContext>;\n\n InfoContent?: SlotProps<DefaultSlotContext>;\n\n Content?: SlotProps<DefaultSlotContext>;\n };\n carousel?: CarouselConfig;\n optionsConfig?: OptionsConfig;\n onAddToCart?: (values: Values) => void;\n}\n\nexport const ProductDetails: Container<\n ProductDetailsProps,\n ProductModel | null\n> = ({\n sku,\n hideSku,\n hideQuantity,\n hideShortDescription,\n hideDescription,\n hideAttributes,\n hideURLParams,\n hideSelectedOptionValue,\n slots,\n children,\n initialData,\n carousel,\n optionsConfig,\n onAddToCart,\n ...props\n}) => {\n // i18n\n const AddToCartLabel = useText('PDP.Product.AddToCart.label').label;\n const IncrementerLabel = useText('PDP.Product.Incrementer.label').label;\n const DetailsLabel = useText('PDP.Product.Details.label').label;\n\n // TODO: Investigate if the \"|| 'en-US' \" is really necessary\n const [locale, setLocale] = useState<Lang>(config.getConfig().defaultLocale as Lang || 'en-US');\n\n const [selectionsToUpdate, setSelectionsToUpdate] = useState<Option[]>();\n\n const [data = null, setData] = useState(initialData);\n\n const [values, setValues] = useState<Values>(() => {\n const defaultValues: Values = { sku, quantity: 1 };\n\n if (data?.optionUIDs) {\n defaultValues.optionsUIDs = data.optionUIDs;\n }\n return defaultValues;\n });\n\n // the context is invalid for a configurable product that doesn't have all the options selected\n const [valid, setValid] = useState(() => {\n return !(\n data?.options &&\n data?.options?.length > 0 &&\n data?.optionUIDs?.length !== data?.options.length\n );\n });\n\n const defaultSlotContext: DefaultSlotContext = { data, values, valid };\n\n // Locale\n useEffect(() => {\n const localeEvent = events.on('locale', (payload: string) => {\n if (payload === locale) return;\n\n setLocale(payload as Lang);\n\n getProductData(sku).then(setData);\n\n // TODO: need to keep the optionsUIDs when locale changes\n // if (values?.optionsUIDs) {\n // getRefinedProduct(sku, values?.optionsUIDs).then(setData);\n // } else {\n // getProductData(sku).then(setData);\n // }\n });\n return () => {\n localeEvent?.off();\n };\n }, [locale, sku]);\n\n // Callbacks\n const handleOnValues = useCallback(\n (newValues: { [key: string]: string | number }) => {\n setValues((prev) => ({ ...prev, ...newValues }));\n },\n []\n );\n\n const handleOptionSelected = useCallback(\n (selections: { [id: string]: { label: string; value: string } }) => {\n // options Selected\n let optionsUIDs = Object.keys(selections)\n .map((id) => selections[id].value)\n .filter((element) => element !== undefined);\n\n // set optionUIDs to URL params\n // ?optionsUIDs=1,2,3\n if (!hideURLParams) {\n setUrlParams({ optionsUIDs: optionsUIDs.join(',') });\n }\n\n // update state\n setValues((prev) => ({ ...prev, optionsUIDs }));\n setValid(optionsUIDs?.length === data?.options?.length);\n\n // get refined product data and update state\n getRefinedProduct(sku, optionsUIDs, optionsConfig?.anchorOptions).then((next) => {\n setData(next);\n\n // special processing for anchor options (options that should not be refined when other options are selected)\n if (optionsConfig?.anchorOptions?.length) {\n processUpdates(next, optionsUIDs);\n }\n });\n },\n [sku]\n );\n\n const processUpdates = useCallback((next: ProductModel | null, previousOptionsUIDs: string[]) => {\n const updatedOptionsUIDs = next?.optionUIDs ?? [];\n const haveSameValues = previousOptionsUIDs.every(item => updatedOptionsUIDs.includes(item));\n if (!haveSameValues) {\n setSelectionsToUpdate(next?.options);\n setValues((prev) => ({ ...prev, optionsUIDs: updatedOptionsUIDs }));\n setValid(updatedOptionsUIDs?.length === next?.options?.length);\n }\n }, [sku]);\n\n const handleOnErrors = useCallback((_errors: { [id: string]: string }) => {\n if (Object.keys(_errors).length !== 0) setValid(false);\n }, []);\n\n // Product Attributes\n const attributes = useMemo(() => {\n return data?.attributes?.map(({ label, value }, key: number) => {\n const __html = isDateValid(value)\n ? toDateString(value, locale)\n : value.toString();\n\n return (\n <li key={key}>\n {/* eslint-disable-next-line react/no-danger */}\n {label}: <span dangerouslySetInnerHTML={{ __html }} />\n </li>\n );\n });\n }, [data?.attributes, locale]);\n\n const quantity =\n !hideQuantity && data?.inStock ? (\n <Slot\n name=\"Quantity\"\n slot={slots?.Quantity}\n context={{ ...defaultSlotContext }}\n >\n <Incrementer\n key=\"quantity\"\n name=\"quantity\"\n defaultValue={values.quantity.toString()}\n min={1}\n aria-label={IncrementerLabel}\n className=\"pdp-product__quantity\"\n onValue={(quantity) => {\n handleOnValues({ quantity: Number(quantity) });\n }}\n />\n </Slot>\n ) : undefined;\n\n const renderOptions = () => {\n if (data?.options) {\n return (\n <Slot name=\"Options\" slot={slots?.Options} context={{ ...defaultSlotContext }}>\n <Swatches\n options={data.options}\n defaultOptions={values.optionsUIDs}\n selectionsToUpdate={selectionsToUpdate}\n hideSelectedValue={hideSelectedOptionValue}\n onValues={handleOptionSelected}\n onErrors={handleOnErrors}\n />\n </Slot>\n );\n }\n };\n\n return (\n <div {...props}>\n <Product\n title={\n <Slot\n name=\"Title\"\n slot={slots?.Title}\n context={{ ...defaultSlotContext }}\n >\n {data?.name}\n </Slot>\n }\n sku={\n !hideSku ? (\n <Slot\n name=\"SKU\"\n slot={slots?.SKU}\n context={{ ...defaultSlotContext }}\n >\n {data?.sku}\n </Slot>\n ) : undefined\n }\n options={renderOptions()}\n breadcrumbs={\n slots?.Breadcrumbs && (\n <Slot\n name=\"Breadcrumbs\"\n slot={slots?.Breadcrumbs}\n context={{\n ...defaultSlotContext,\n\n setSeparator(callback) {\n this._registerMethod((...attrs) => {\n const nextSeparator = callback(...attrs);\n\n const separator = nextSeparator && <Icon source={nextSeparator} />;\n\n this._setProps((prev: any) => {\n return { ...prev, separator };\n });\n });\n },\n\n appendLink(callback) {\n this._registerMethod((...attrs) => {\n const { text, ...p } = callback(...attrs);\n\n const link = <a {...p}>{text}</a>;\n\n this._setProps((prev: any) => {\n return {\n ...prev,\n categories: [...(prev.categories || []), link],\n };\n });\n });\n },\n\n appendHTMLElement(callback) {\n this._registerMethod((...attrs) => {\n const domElement = callback(...attrs);\n\n const vnode = this._htmlElementToVNode(domElement);\n\n this._setProps((prev: any) => {\n return {\n ...prev,\n categories: [...(prev.categories || []), vnode],\n };\n });\n });\n },\n }}\n render={({ separator, categories }) => {\n return (\n <Breadcrumbs separator={separator} categories={categories} />\n );\n }}\n />\n )\n }\n quantity={quantity}\n actions={\n <Slot\n name=\"Actions\"\n slot={slots?.Actions}\n context={{\n ...defaultSlotContext,\n\n appendButton(callback) {\n this._registerMethod((...attrs) => {\n const _button = callback(...attrs);\n\n if (!_button) return;\n\n const { text, icon, ...buttonProps } = _button;\n\n const button = (\n <Button\n type=\"button\"\n {...buttonProps}\n icon={icon && <Icon source={icon} />}\n >\n {text}\n </Button>\n );\n\n this._setProps((prev: any) => ({\n children: [...(prev.children || []), button],\n }));\n });\n },\n }}\n >\n {\n // Default Add to Cart button if no slot is provided\n !slots?.Actions && (\n <Button\n size=\"medium\"\n type=\"submit\"\n icon={<Icon source=\"Cart\" />}\n disabled={!data?.inStock || !valid}\n aria-label={AddToCartLabel}\n onClick={() => {\n return onAddToCart?.(values);\n }}\n >\n {AddToCartLabel}\n </Button>\n )\n }\n </Slot>\n }\n shortDescription={\n !hideShortDescription ? (\n <Slot\n name=\"ShortDescription\"\n slot={slots?.ShortDescription}\n context={{ ...defaultSlotContext }}\n >\n {/* eslint-disable-next-line react/no-danger */}\n <div dangerouslySetInnerHTML={{ __html: data?.shortDescription ?? '' }} />\n </Slot>\n ) : undefined\n }\n description={\n !hideDescription ? (\n <Slot\n name=\"Description\"\n slot={slots?.Description}\n context={{ ...defaultSlotContext }}\n >\n {/* eslint-disable-next-line react/no-danger */}\n <div dangerouslySetInnerHTML={{ __html: data?.description ?? '' }} />\n </Slot>\n ) : undefined\n }\n images={\n data?.images?.map(({ label, url }) => (\n <Image\n key={url}\n title={label}\n alt={label}\n src={url}\n // TODO: change width/height for image aspect ratio\n // pending https://jira.corp.adobe.com/browse/DATA-5122\n width={carousel?.imageParams?.width ?? 960}\n height={carousel?.imageParams?.height ?? 1191}\n params={carousel?.imageParams ?? { width: 960 }}\n />\n )) ?? []\n }\n specialPrice={\n data?.prices?.visible ? (\n <Slot\n name=\"SpecialPrice\"\n slot={slots?.SpecialPrice}\n context={{ ...defaultSlotContext }}\n >\n <PriceRange {...data.prices.final} locale={toLanguageTag(locale)} />\n </Slot>\n ) : undefined\n }\n price={\n data?.prices?.visible &&\n data.prices.regular &&\n data.prices.final.amount !== data?.prices.regular.amount ? (\n <Slot\n name=\"RegularPrice\"\n slot={slots?.RegularPrice}\n context={{ ...defaultSlotContext }}\n >\n <PriceRange\n {...data.prices.regular}\n locale={toLanguageTag(locale)}\n />\n </Slot>\n ) : undefined\n }\n carouselConfig={{\n ...carousel,\n thumbnails: carousel\n ? data?.images?.map(({ label, url }) => (\n <Image\n key={url}\n title={label}\n alt={label}\n src={url}\n // TODO: change width/height for image aspect ratio\n // pending https://jira.corp.adobe.com/browse/DATA-5122\n width={carousel?.thumbnailParams?.width ?? 200}\n height={carousel?.thumbnailParams?.height ?? 248}\n params={carousel?.thumbnailParams ?? { width: 200 }}\n />\n )) ?? []\n : [],\n }}\n outOfStock={!data?.inStock}\n attributes={\n !hideAttributes ? (\n <Slot\n name=\"Attributes\"\n slot={slots?.Attributes}\n context={{ ...defaultSlotContext }}\n >\n {attributes?.length ? (\n <>\n {DetailsLabel}\n <ul>{attributes}</ul>\n </>\n ) : null}\n </Slot>\n ) : undefined\n }\n galleryContent={\n slots?.GalleryContent && (\n <Slot\n name=\"GalleryContent\"\n slot={slots.GalleryContent}\n context={{ ...defaultSlotContext }}\n />\n )\n }\n infoContent={\n slots?.InfoContent && (\n <Slot\n name=\"InfoContent\"\n slot={slots.InfoContent}\n context={{ ...defaultSlotContext }}\n />\n )\n }\n productContent={\n slots?.Content && (\n <Slot\n name=\"Content\"\n slot={slots.Content}\n context={{ ...defaultSlotContext }}\n />\n )\n }\n />\n </div>\n );\n};\n\nProductDetails.getInitialData = async function ({ sku, optionsConfig }) {\n // check if default selections are made\n const defaultSelections = getUrlParams().optionsUIDs?.split(',') || config?.getConfig()?.models?.ProductDetails?.initialData?.optionsUIDs;\n\n // if it has selections, refine the product data\n if (defaultSelections?.length) {\n return await getRefinedProduct(sku, defaultSelections, optionsConfig?.anchorOptions);\n }\n\n // otherwise return the product data\n return await getProductData(sku);\n};\n"],"names":["SvgChevronDown","props","React","SvgClose","Carousel","show","scrollbar","peak","arrows","controls","arrowsOnMainImage","loop","gap","direction","width","height","defaultIndex","className","children","thumbnails","isZoomed","Label","useText","label","SlideLabel","PreviousLabel","NextLabel","ControlsLabel","ControlsBtnLabel","perPage","setPerPage","useState","getPerPageFromBreakpoint","length","Math","ceil","Children","toArray","gapSizes","small","medium","large","peakWidth","gapWidth","rest","thumbGap","thumbSeen","iconSize","current","setCurrent","thumbnailsRefs","useRef","thumbWidth","setThumbWidth","thumbHeight","setThumbHeight","thumbnailSlides","useMemo","slides","returnValue","reduce","acc","child","i","slice","concat","wrapperRef","thumbnailsWrapperRef","thumbnailControls","useEffect","wrapper","document","body","handleResize","debounce","offsetWidth","offsetHeight","window","innerWidth","newPerPage","observer","ResizeObserver","observe","unobserve","handleThumbnailsScroll","useCallback","nextSlideIndex","nextItem","thumbnailRef","oneItemWidth","oneItemHeight","thumbnailsWrapper","style","scrollBehavior","scrollLeft","scrollTop","handleScrollTo","smooth","reset","realWidth","Array","from","querySelectorAll","filter","element","dataIndex","Number","getAttribute","isNaN","futureIndex","scrollWidth","diff","handleGoToPrev","handleGoToNext","lastSlideIndex","handleKeyDown","event","key","preventDefault","addEventListener","removeEventListener","handleOnScroll","dividing","round","totalWidth","getArrow","forThumbnails","callback","_jsx","Button","classes","variant","onClick","disabled","Icon","size","source","ChevronDown","prevArrow","nextArrow","prevArrowMainImage","nextArrowMainImage","_jsxs","role","ref","tabIndex","map","page","index","orphan","_Fragment","_","buttonsLength","active","el","type","name","replace","String","checked","onChange","breakpoints","mediumViewport","Product","title","breadcrumbs","galleryContent","infoContent","productContent","sku","outOfStock","shortDescription","description","attributes","images","options","price","specialPrice","quantity","actions","carouselConfig","RegularPriceLabel","SpecialPriceLabel","OutOfStockLabel","ImagesLabel","zoom","setZoom","galleryImages","image","VComponent","node","loading","alt","toString","src","localThumbnailsImages","thumbnailsLoadingMode","loopable","desktop","GalleryGrid","mobile","Overlay","onClose","centered","count","PriceRange","amount","currency","locale","sale","minimumAmount","maximumAmount","Price","CloseLabel","handleOnClose","scrollingElement","defaultOverflowValue","overflow","icon","CloseSVG","supportedTypes","mapToPickerOptions","items","item","text","inStock","Swatches","hideSelectedValue","onValues","onErrors","defaultOptions","selectionsToUpdate","RequiredLabel","selections","setSelections","accum","option","defaultSelection","find","includes","id","selected","value","forEach","selectionToUpdate","prev","selectedItem","next","errors","required","handleOnSelection","optionId","handlePickerSelect","selection","selectedOptions","toLowerCase","Picker","handleSelect","target","common","groupAriaLabel","onValue","TextSwatch","ImageSwatch","ColorSwatch","color","warn","multiple","console","toDateString","isDateValid","Error","split","Date","toLocaleDateString","toLanguageTag","dateString","some","format","test","date","getTime","setUrlParams","params","urlSearchParams","URLSearchParams","location","search","entries","delete","set","url","pathname","hash","history","replaceState","getUrlParams","ProductDetails","hideSku","hideQuantity","hideShortDescription","hideDescription","hideAttributes","hideURLParams","hideSelectedOptionValue","slots","initialData","carousel","optionsConfig","onAddToCart","AddToCartLabel","IncrementerLabel","DetailsLabel","setLocale","config","getConfig","defaultLocale","setSelectionsToUpdate","data","setData","values","setValues","defaultValues","optionUIDs","optionsUIDs","valid","setValid","defaultSlotContext","localeEvent","events","on","payload","then","off","handleOnValues","newValues","handleOptionSelected","Object","keys","undefined","join","getRefinedProduct","anchorOptions","processUpdates","previousOptionsUIDs","updatedOptionsUIDs","every","handleOnErrors","_errors","__html","dangerouslySetInnerHTML","Slot","slot","Quantity","context","Incrementer","defaultValue","min","renderOptions","Options","Title","SKU","Breadcrumbs","setSeparator","_registerMethod","attrs","nextSeparator","separator","_setProps","appendLink","p","link","categories","appendHTMLElement","domElement","vnode","_htmlElementToVNode","render","Actions","appendButton","_button","buttonProps","button","ShortDescription","Description","Image","imageParams","prices","visible","SpecialPrice","final","regular","RegularPrice","thumbnailParams","Attributes","GalleryContent","InfoContent","Content","getInitialData","defaultSelections","models","getProductData"],"mappings":"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","x_google_ignoreList":[0,1]}
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name": "@dropins/storefront-pdp", "version": "0.2.3-alpha1", "@dropins/tools": "0.23.0-alpha40"}
1
+ {"name": "@dropins/storefront-pdp", "version": "0.2.3-alpha2", "@dropins/tools": "0.23.0"}