@dropins/storefront-product-discovery 3.1.0 → 3.1.1-beta1

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
1
  /*! Copyright 2026 Adobe
2
2
  All Rights Reserved. */
3
- import{jsx as g}from"@dropins/tools/preact-jsx-runtime.js";import{useState as n,useEffect as $}from"@dropins/tools/preact-compat.js";import{Picker as w}from"@dropins/tools/components.js";import{events as x}from"@dropins/tools/event-bus.js";import{d}from"../chunks/search.js";import{useText as p}from"@dropins/tools/i18n.js";import"@dropins/tools/lib.js";import"../chunks/initialize.js";import"../fragments.js";import"../chunks/acdlEvents.js";import"@dropins/tools/fetch-graphql.js";const j=({scope:t,onSortChange:e})=>{const r=p({sortLabel:"Search.SortBy.title",lowToHigh:"Search.SortBy.lowToHigh",highToLow:"Search.SortBy.highToLow"}),[s,u]=n([]),[f,S]=n("relevance_DESC"),[b,h]=n({});$(()=>{const i=x.on("search/result",o=>{var a,c;if(h(o.request),(c=(a=o.result)==null?void 0:a.metadata)!=null&&c.sortableAttributes&&(u([...o.result.metadata.sortableAttributes]),o.request.sort)){const l=L(o.request.sort);l&&S(l)}},{eager:!0,scope:t});return()=>{i==null||i.off()}},[]);const m=async i=>{e==null||e(i[0]),d({...b,sort:i,currentPage:1},{scope:t})};return g(w,{required:!0,floatingLabel:r.sortLabel,...T(s,r),value:f,handleSelect:i=>{const{value:o}=i.target,a=C(o);m(a)}})};function T(t,e){const r=[];return t.forEach((s,u)=>{s.bidirectional?r.splice(u+r.length,0,{text:`${s.label}: ${e.lowToHigh}`,value:`${s.attribute}_ASC`},{text:`${s.label}: ${e.highToLow}`,value:`${s.attribute}_DESC`}):r.splice(u+r.length,0,{text:s.label,value:`${s.attribute}_DESC`})}),{options:r}}function C(t){const e=t.indexOf("_");return[{attribute:t.substring(0,e),direction:t.substring(e+1)==="ASC"?"ASC":"DESC"}]}function L(t){return t.length>0&&t[0]?`${t[0].attribute}_${t[0].direction}`:""}export{j as SortBy,j as default};
3
+ import{jsx as p}from"@dropins/tools/preact-jsx-runtime.js";import{useState as S,useEffect as g}from"@dropins/tools/preact-compat.js";import{Picker as v}from"@dropins/tools/components.js";import{events as $}from"@dropins/tools/event-bus.js";import{d}from"../chunks/search.js";import{useText as w}from"@dropins/tools/i18n.js";import"@dropins/tools/lib.js";import"../chunks/initialize.js";import"../fragments.js";import"../chunks/acdlEvents.js";import"@dropins/tools/fetch-graphql.js";const P=({scope:t,onSortChange:e})=>{const s=w({sortLabel:"Search.SortBy.title",lowToHigh:"Search.SortBy.lowToHigh",highToLow:"Search.SortBy.highToLow",relevance:"Search.SortBy.relevance",position:"Search.SortBy.position",name:"Search.SortBy.name",price:"Search.SortBy.price"}),[o,r]=S([]),[c,a]=S("relevance_DESC"),[m,f]=S({});g(()=>{const i=$.on("search/result",n=>{var u,l;if(f(n.request),(l=(u=n.result)==null?void 0:u.metadata)!=null&&l.sortableAttributes&&(r([...n.result.metadata.sortableAttributes]),n.request.sort)){const h=L(n.request.sort);h&&a(h)}},{eager:!0,scope:t});return()=>{i==null||i.off()}},[]);const b=async i=>{e==null||e(i[0]),d({...m,sort:i,currentPage:1},{scope:t})};return p(v,{required:!0,floatingLabel:s.sortLabel,...x(o,s),value:c,handleSelect:i=>{const{value:n}=i.target,u=B(n);b(u)}})};function x(t,e){const s={relevance:e.relevance,position:e.position,name:e.name,price:e.price},o=[];return t.forEach((r,c)=>{const a=s[r.attribute]||r.label;r.bidirectional?o.splice(c+o.length,0,{text:`${a}: ${e.lowToHigh}`,value:`${r.attribute}_ASC`},{text:`${a}: ${e.highToLow}`,value:`${r.attribute}_DESC`}):o.splice(c+o.length,0,{text:a,value:`${r.attribute}_DESC`})}),{options:o}}function B(t){const e=t.indexOf("_");return[{attribute:t.substring(0,e),direction:t.substring(e+1)==="ASC"?"ASC":"DESC"}]}function L(t){return t.length>0&&t[0]?`${t[0].attribute}_${t[0].direction}`:""}export{P as SortBy,P as default};
4
4
  //# sourceMappingURL=SortBy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SortBy.js","sources":["/@dropins/storefront-product-discovery/src/containers/SortBy/SortBy.tsx"],"sourcesContent":["/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { HTMLAttributes, useState, useEffect } from 'preact/compat';\nimport { Container } from '@adobe-commerce/elsie/lib';\nimport { Picker } from '@adobe-commerce/elsie/components';\nimport { events } from '@adobe-commerce/event-bus';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Scope, SearchVariables, SortOrder } from '@/plp/data/models';\nimport { search } from '@/plp/api';\n\nexport interface SortByProps extends HTMLAttributes<HTMLDivElement> {\n scope?: Scope;\n onSortChange?: (value: SortOrder | null) => void;\n}\n\nexport const SortBy: Container<SortByProps> = ({ scope, onSortChange }) => {\n const labels = useText({\n sortLabel: 'Search.SortBy.title',\n lowToHigh: 'Search.SortBy.lowToHigh',\n highToLow: 'Search.SortBy.highToLow',\n });\n\n\n const [sortOptions, setSortOptions] = useState<any[]>([]);\n const [current, setCurrent] = useState('relevance_DESC');\n const [currentSearchVariables, setCurrentSearchVariables] = useState<SearchVariables>({});\n\n useEffect(() => {\n // Listen for search results\n const searchEvent = events.on('search/result', (payload) => {\n setCurrentSearchVariables(payload.request);\n\n // Configure sort options from metadata\n if (payload.result?.metadata?.sortableAttributes) {\n setSortOptions([...payload.result.metadata.sortableAttributes]);\n\n // Set current sort value from request\n if (payload.request.sort) {\n const sortValue = getSortValue(payload.request.sort);\n\n if (sortValue) {\n setCurrent(sortValue);\n }\n }\n }\n }, { eager: true, scope });\n\n return () => {\n searchEvent?.off();\n };\n }, []);\n\n const handleSortChange = async (value: SortOrder[]): Promise<void> => {\n onSortChange?.(value[0]!);\n\n search({ ...currentSearchVariables, sort: value, currentPage: 1 }, { scope });\n };\n\n return (\n <Picker\n required\n floatingLabel={labels.sortLabel}\n {...getSortOptions(sortOptions, labels)}\n value={current}\n handleSelect={(event) => {\n const { value } = event.target as HTMLSelectElement;\n const next = getSortSearchVariables(value);\n handleSortChange(next);\n }}\n />\n );\n};\n\n/** Utility functions */\n\nfunction getSortOptions(sortOptions: any, labels: any): any {\n // if sortOption is bidirectional, then we need to add two options: lowToHigh and highToLow\n const options: any[] = [];\n \n sortOptions.forEach((option: any, index: number) => {\n if (option.bidirectional) {\n // Insert the two options at the current position\n options.splice(index + options.length, 0,\n { text: `${option.label}: ${labels.lowToHigh}`, value: `${option.attribute}_ASC` },\n { text: `${option.label}: ${labels.highToLow}`, value: `${option.attribute}_DESC` }\n );\n } else {\n // Add single option at the current position\n options.splice(index + options.length, 0,\n { text: option.label, value: `${option.attribute}_DESC` }\n );\n }\n });\n\n return { options };\n}\n\n\nfunction getSortSearchVariables(sortValue: string): SortOrder[] {\n const index = sortValue.indexOf('_');\n const newSort: SortOrder[] = [\n {\n attribute: sortValue.substring(0, index) as string,\n direction: sortValue.substring(index + 1) === 'ASC' ? 'ASC' : 'DESC',\n },\n ];\n return newSort;\n}\n\nfunction getSortValue(sort: SortOrder[]) {\n if (sort.length > 0 && sort[0]) {\n return `${sort[0].attribute}_${sort[0].direction}`;\n }\n return '';\n}\n"],"names":["SortBy","scope","onSortChange","labels","useText","sortOptions","setSortOptions","useState","current","setCurrent","currentSearchVariables","setCurrentSearchVariables","useEffect","searchEvent","events","payload","_b","_a","sortValue","getSortValue","handleSortChange","value","search","jsx","Picker","getSortOptions","event","next","getSortSearchVariables","options","option","index","sort"],"mappings":"keAsBO,MAAMA,EAAiC,CAAC,CAAE,MAAAC,EAAO,aAAAC,KAAmB,CACzE,MAAMC,EAASC,EAAQ,CACrB,UAAW,sBACX,UAAW,0BACX,UAAW,yBAAA,CACZ,EAGK,CAACC,EAAaC,CAAc,EAAIC,EAAgB,CAAA,CAAE,EAClD,CAACC,EAASC,CAAU,EAAIF,EAAS,gBAAgB,EACjD,CAACG,EAAwBC,CAAyB,EAAIJ,EAA0B,CAAA,CAAE,EAExFK,EAAU,IAAM,CAEd,MAAMC,EAAcC,EAAO,GAAG,gBAAkBC,GAAY,SAI1D,GAHAJ,EAA0BI,EAAQ,OAAO,GAGrCC,GAAAC,EAAAF,EAAQ,SAAR,YAAAE,EAAgB,WAAhB,MAAAD,EAA0B,qBAC5BV,EAAe,CAAC,GAAGS,EAAQ,OAAO,SAAS,kBAAkB,CAAC,EAG1DA,EAAQ,QAAQ,MAAM,CACxB,MAAMG,EAAYC,EAAaJ,EAAQ,QAAQ,IAAI,EAE/CG,GACFT,EAAWS,CAAS,CAExB,CAEJ,EAAG,CAAE,MAAO,GAAM,MAAAjB,EAAO,EAEzB,MAAO,IAAM,CACXY,GAAA,MAAAA,EAAa,KACf,CACF,EAAG,CAAA,CAAE,EAEL,MAAMO,EAAmB,MAAOC,GAAsC,CACpEnB,GAAA,MAAAA,EAAemB,EAAM,CAAC,GAEtBC,EAAO,CAAE,GAAGZ,EAAwB,KAAMW,EAAO,YAAa,CAAA,EAAK,CAAE,MAAApB,EAAO,CAC9E,EAEA,OACEsB,EAACC,EAAA,CACC,SAAQ,GACR,cAAerB,EAAO,UACrB,GAAGsB,EAAepB,EAAaF,CAAM,EACtC,MAAOK,EACP,aAAekB,GAAU,CACvB,KAAM,CAAE,MAAAL,GAAUK,EAAM,OAClBC,EAAOC,EAAuBP,CAAK,EACzCD,EAAiBO,CAAI,CACvB,CAAA,CAAA,CAGN,EAIA,SAASF,EAAepB,EAAkBF,EAAkB,CAE1D,MAAM0B,EAAiB,CAAA,EAEvB,OAAAxB,EAAY,QAAQ,CAACyB,EAAaC,IAAkB,CAC9CD,EAAO,cAETD,EAAQ,OAAOE,EAAQF,EAAQ,OAAQ,EACrC,CAAE,KAAM,GAAGC,EAAO,KAAK,KAAK3B,EAAO,SAAS,GAAI,MAAO,GAAG2B,EAAO,SAAS,MAAA,EAC1E,CAAE,KAAM,GAAGA,EAAO,KAAK,KAAK3B,EAAO,SAAS,GAAI,MAAO,GAAG2B,EAAO,SAAS,OAAA,CAAQ,EAIpFD,EAAQ,OAAOE,EAAQF,EAAQ,OAAQ,EACrC,CAAE,KAAMC,EAAO,MAAO,MAAO,GAAGA,EAAO,SAAS,OAAA,CAAQ,CAG9D,CAAC,EAEM,CAAE,QAAAD,CAAA,CACX,CAGA,SAASD,EAAuBV,EAAgC,CAC9D,MAAMa,EAAQb,EAAU,QAAQ,GAAG,EAOnC,MAN6B,CAC3B,CACE,UAAWA,EAAU,UAAU,EAAGa,CAAK,EACvC,UAAWb,EAAU,UAAUa,EAAQ,CAAC,IAAM,MAAQ,MAAQ,MAAA,CAChE,CAGJ,CAEA,SAASZ,EAAaa,EAAmB,CACvC,OAAIA,EAAK,OAAS,GAAKA,EAAK,CAAC,EACpB,GAAGA,EAAK,CAAC,EAAE,SAAS,IAAIA,EAAK,CAAC,EAAE,SAAS,GAE3C,EACT"}
1
+ {"version":3,"file":"SortBy.js","sources":["/@dropins/storefront-product-discovery/src/containers/SortBy/SortBy.tsx"],"sourcesContent":["/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { HTMLAttributes, useState, useEffect } from 'preact/compat';\nimport { Container } from '@adobe-commerce/elsie/lib';\nimport { Picker } from '@adobe-commerce/elsie/components';\nimport { events } from '@adobe-commerce/event-bus';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Scope, SearchVariables, SortOrder } from '@/plp/data/models';\nimport { search } from '@/plp/api';\n\nexport interface SortByProps extends HTMLAttributes<HTMLDivElement> {\n scope?: Scope;\n onSortChange?: (value: SortOrder | null) => void;\n}\n\nexport const SortBy: Container<SortByProps> = ({ scope, onSortChange }) => {\n const labels = useText({\n sortLabel: 'Search.SortBy.title',\n lowToHigh: 'Search.SortBy.lowToHigh',\n highToLow: 'Search.SortBy.highToLow',\n relevance: 'Search.SortBy.relevance',\n position: 'Search.SortBy.position',\n name: 'Search.SortBy.name',\n price: 'Search.SortBy.price',\n });\n\n\n const [sortOptions, setSortOptions] = useState<any[]>([]);\n const [current, setCurrent] = useState('relevance_DESC');\n const [currentSearchVariables, setCurrentSearchVariables] = useState<SearchVariables>({});\n\n useEffect(() => {\n // Listen for search results\n const searchEvent = events.on('search/result', (payload) => {\n setCurrentSearchVariables(payload.request);\n\n // Configure sort options from metadata\n if (payload.result?.metadata?.sortableAttributes) {\n setSortOptions([...payload.result.metadata.sortableAttributes]);\n\n // Set current sort value from request\n if (payload.request.sort) {\n const sortValue = getSortValue(payload.request.sort);\n\n if (sortValue) {\n setCurrent(sortValue);\n }\n }\n }\n }, { eager: true, scope });\n\n return () => {\n searchEvent?.off();\n };\n }, []);\n\n const handleSortChange = async (value: SortOrder[]): Promise<void> => {\n onSortChange?.(value[0]!);\n\n search({ ...currentSearchVariables, sort: value, currentPage: 1 }, { scope });\n };\n\n return (\n <Picker\n required\n floatingLabel={labels.sortLabel}\n {...getSortOptions(sortOptions, labels)}\n value={current}\n handleSelect={(event) => {\n const { value } = event.target as HTMLSelectElement;\n const next = getSortSearchVariables(value);\n handleSortChange(next);\n }}\n />\n );\n};\n\n/** Utility functions */\n\nfunction getSortOptions(sortOptions: any, labels: any): any {\n const attributeLabels: Record<string, string> = {\n relevance: labels.relevance,\n position: labels.position,\n name: labels.name,\n price: labels.price,\n };\n\n const options: any[] = [];\n\n // if sortOption is bidirectional, then we need to add two options: lowToHigh and highToLow\n sortOptions.forEach((option: any, index: number) => {\n const displayLabel = attributeLabels[option.attribute] || option.label;\n\n if (option.bidirectional) {\n // Insert the two options at the current position\n options.splice(index + options.length, 0,\n { text: `${displayLabel}: ${labels.lowToHigh}`, value: `${option.attribute}_ASC` },\n { text: `${displayLabel}: ${labels.highToLow}`, value: `${option.attribute}_DESC` }\n );\n } else {\n // Add single option at the current position\n options.splice(index + options.length, 0,\n { text: displayLabel, value: `${option.attribute}_DESC` }\n );\n }\n });\n\n return { options };\n}\n\n\nfunction getSortSearchVariables(sortValue: string): SortOrder[] {\n const index = sortValue.indexOf('_');\n const newSort: SortOrder[] = [\n {\n attribute: sortValue.substring(0, index) as string,\n direction: sortValue.substring(index + 1) === 'ASC' ? 'ASC' : 'DESC',\n },\n ];\n return newSort;\n}\n\nfunction getSortValue(sort: SortOrder[]) {\n if (sort.length > 0 && sort[0]) {\n return `${sort[0].attribute}_${sort[0].direction}`;\n }\n return '';\n}\n"],"names":["SortBy","scope","onSortChange","labels","useText","sortOptions","setSortOptions","useState","current","setCurrent","currentSearchVariables","setCurrentSearchVariables","useEffect","searchEvent","events","payload","_b","_a","sortValue","getSortValue","handleSortChange","value","search","jsx","Picker","getSortOptions","event","next","getSortSearchVariables","attributeLabels","options","option","index","displayLabel","sort"],"mappings":"keAsBO,MAAMA,EAAiC,CAAC,CAAE,MAAAC,EAAO,aAAAC,KAAmB,CACzE,MAAMC,EAASC,EAAQ,CACrB,UAAW,sBACX,UAAW,0BACX,UAAW,0BACX,UAAW,0BACX,SAAU,yBACV,KAAM,qBACN,MAAO,qBAAA,CACR,EAGK,CAACC,EAAaC,CAAc,EAAIC,EAAgB,CAAA,CAAE,EAClD,CAACC,EAASC,CAAU,EAAIF,EAAS,gBAAgB,EACjD,CAACG,EAAwBC,CAAyB,EAAIJ,EAA0B,CAAA,CAAE,EAExFK,EAAU,IAAM,CAEd,MAAMC,EAAcC,EAAO,GAAG,gBAAkBC,GAAY,SAI1D,GAHAJ,EAA0BI,EAAQ,OAAO,GAGrCC,GAAAC,EAAAF,EAAQ,SAAR,YAAAE,EAAgB,WAAhB,MAAAD,EAA0B,qBAC5BV,EAAe,CAAC,GAAGS,EAAQ,OAAO,SAAS,kBAAkB,CAAC,EAG1DA,EAAQ,QAAQ,MAAM,CACxB,MAAMG,EAAYC,EAAaJ,EAAQ,QAAQ,IAAI,EAE/CG,GACFT,EAAWS,CAAS,CAExB,CAEJ,EAAG,CAAE,MAAO,GAAM,MAAAjB,EAAO,EAEzB,MAAO,IAAM,CACXY,GAAA,MAAAA,EAAa,KACf,CACF,EAAG,CAAA,CAAE,EAEL,MAAMO,EAAmB,MAAOC,GAAsC,CACpEnB,GAAA,MAAAA,EAAemB,EAAM,CAAC,GAEtBC,EAAO,CAAE,GAAGZ,EAAwB,KAAMW,EAAO,YAAa,CAAA,EAAK,CAAE,MAAApB,EAAO,CAC9E,EAEA,OACEsB,EAACC,EAAA,CACC,SAAQ,GACR,cAAerB,EAAO,UACrB,GAAGsB,EAAepB,EAAaF,CAAM,EACtC,MAAOK,EACP,aAAekB,GAAU,CACvB,KAAM,CAAE,MAAAL,GAAUK,EAAM,OAClBC,EAAOC,EAAuBP,CAAK,EACzCD,EAAiBO,CAAI,CACvB,CAAA,CAAA,CAGN,EAIA,SAASF,EAAepB,EAAkBF,EAAkB,CAC1D,MAAM0B,EAA0C,CAC9C,UAAW1B,EAAO,UAClB,SAAUA,EAAO,SACjB,KAAMA,EAAO,KACb,MAAOA,EAAO,KAAA,EAGV2B,EAAiB,CAAA,EAGvB,OAAAzB,EAAY,QAAQ,CAAC0B,EAAaC,IAAkB,CAClD,MAAMC,EAAeJ,EAAgBE,EAAO,SAAS,GAAKA,EAAO,MAE7DA,EAAO,cAETD,EAAQ,OAAOE,EAAQF,EAAQ,OAAQ,EACrC,CAAE,KAAM,GAAGG,CAAY,KAAK9B,EAAO,SAAS,GAAI,MAAO,GAAG4B,EAAO,SAAS,MAAA,EAC1E,CAAE,KAAM,GAAGE,CAAY,KAAK9B,EAAO,SAAS,GAAI,MAAO,GAAG4B,EAAO,SAAS,OAAA,CAAQ,EAIpFD,EAAQ,OAAOE,EAAQF,EAAQ,OAAQ,EACrC,CAAE,KAAMG,EAAc,MAAO,GAAGF,EAAO,SAAS,OAAA,CAAQ,CAG9D,CAAC,EAEM,CAAE,QAAAD,CAAA,CACX,CAGA,SAASF,EAAuBV,EAAgC,CAC9D,MAAMc,EAAQd,EAAU,QAAQ,GAAG,EAOnC,MAN6B,CAC3B,CACE,UAAWA,EAAU,UAAU,EAAGc,CAAK,EACvC,UAAWd,EAAU,UAAUc,EAAQ,CAAC,IAAM,MAAQ,MAAQ,MAAA,CAChE,CAGJ,CAEA,SAASb,EAAae,EAAmB,CACvC,OAAIA,EAAK,OAAS,GAAKA,EAAK,CAAC,EACpB,GAAGA,EAAK,CAAC,EAAE,SAAS,IAAIA,EAAK,CAAC,EAAE,SAAS,GAE3C,EACT"}
@@ -12,7 +12,11 @@ declare const _default: {
12
12
  "SortBy": {
13
13
  "title": "Sort by",
14
14
  "lowToHigh": "Low to High",
15
- "highToLow": "High to Low"
15
+ "highToLow": "High to Low",
16
+ "relevance": "Relevance",
17
+ "position": "Position",
18
+ "name": "Product Name",
19
+ "price": "Price"
16
20
  }
17
21
  }
18
22
  };
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name": "@dropins/storefront-product-discovery", "version": "3.1.0", "@dropins/tools": "^1.6.0", "license": "SEE LICENSE IN LICENSE.md"}
1
+ {"name": "@dropins/storefront-product-discovery", "version": "3.1.1-beta1", "@dropins/tools": "^1.6.0", "license": "SEE LICENSE IN LICENSE.md"}
package/render.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*! Copyright 2026 Adobe
2
2
  All Rights Reserved. */
3
3
  (function(d,r){try{if(typeof document<"u"){const t=document.createElement("style"),o=r.styleId;for(const e in r.attributes)t.setAttribute(e,r.attributes[e]);t.setAttribute("data-dropin",o),t.appendChild(document.createTextNode(d));const i=document.querySelector('style[data-dropin="sdk"]');if(i)i.after(t);else{const e=document.querySelector('link[rel="stylesheet"], style');e?e.before(t):document.head.append(t)}}}catch(t){console.error("dropin-styles (injectCodeFunction)",t)}})(".product-discovery-product-list{container-type:inline-size;display:flex;flex-direction:column;width:100%}.product-discovery-product-list__container{display:flex;flex-direction:column;width:100%}.product-discovery-product-list__grid{display:grid;grid-template-columns:1fr;gap:var(--spacing-small)}.product-discovery-product-list__grid .dropin-product-item-card{margin:unset;width:100%}.product-discovery-product-list__grid .dropin-product-item-card img,.product-discovery-product-list__grid .dropin-product-item-card__skeleton__image{aspect-ratio:var(--imageWidth) / var(--imageHeight);max-height:unset;height:unset}.product-discovery-product-list .product-price{display:flex;gap:8px}.product-discovery-product-list .special-price-crossed{text-decoration:line-through;opacity:.5}@container (min-width: 600px){.product-discovery-product-list__grid{grid-template-columns:repeat(2,1fr)}}@container (min-width: 900px){.product-discovery-product-list__grid{grid-template-columns:repeat(3,1fr)}}@container (min-width: 1200px){.product-discovery-product-list__grid{grid-template-columns:repeat(4,1fr)}}.product-discovery-search-alert-message__wrapper{display:flex;flex-direction:column;justify-content:center;width:100%;min-height:300px}.product-discovery-search-alert-message__content{display:flex;justify-content:center}.product-discovery-facet{padding-block:var(--spacing-small)}.product-discovery-facet:not(.product-discovery-facet--last){border-bottom:1px solid var(--color-neutral-400)}.product-discovery-facet__header{display:block;margin-block-end:var(--spacing-xsmall)}.product-discovery-facet__bucket .dropin-price-range .dropin-price--small.dropin-price--bold{font:var(--type-body-2-default-font)}.product-discovery-facet__bucket .dropin-radio-button__label:before{margin-right:var(--spacing-xsmall)}.product-discovery-facet-list{display:flex;flex-direction:column;width:100%}.product-discovery-facet-list__selected-filters{display:flex;flex-direction:row;flex-wrap:wrap;row-gap:var(--spacing-xxsmall);padding:0 0 var(--spacing-xxsmall) 0}.product-discovery-facet-list__selected-filters button{padding:0 var(--spacing-xxsmall);margin:0 var(--spacing-xxsmall);border-radius:var(--shape-border-radius-2)}.product-discovery-facet-list__selected-filters .dropin-price-range .dropin-price--small.dropin-price--bold{font:var(--type-button-2-font)}.product-discovery-facet-list__facet-options{text-align:left}.product-discovery-facet-list__facet-options button{padding:0}.product-discovery-facet-list__facet-options .dropin-radio-button{padding:var(--spacing-xxsmall) 0}.product-discovery-facet-list__facet-options--hidden{display:none}.product-discovery-facet-list .dropin-divider{margin:var(--spacing-xsmall) 0 var(--spacing-xsmall) 0}",{styleId:"storefront-product-discovery"});
4
- import{jsx as r}from"@dropins/tools/preact-jsx-runtime.js";import{deepmerge as f,Render as l}from"@dropins/tools/lib.js";import{useState as g,useEffect as h}from"@dropins/tools/preact-hooks.js";import{UIProvider as m}from"@dropins/tools/components.js";import{events as u}from"@dropins/tools/event-bus.js";import{c as w}from"./chunks/initialize.js";const d={PLP:{noResults:"Your search returned no results.",searchError:"An error occurred while searching."},Facet:{showMore:"Show more",showLess:"Show less",clearAll:"Clear all"},SortBy:{title:"Sort by",lowToHigh:"Low to High",highToLow:"High to Low"}},S={Search:d},p={default:S},L=({children:n})=>{var e;const[t,s]=g("en_US"),i=(e=w.getConfig())==null?void 0:e.langDefinitions;h(()=>{const o=u.on("locale",a=>{s(a)},{eager:!0});return()=>{o==null||o.off()}},[]);const c=f(p,i??{});return r(m,{lang:t,langDefinitions:c,children:n})},y=new l(r(L,{}));export{y as render};
4
+ import{jsx as r}from"@dropins/tools/preact-jsx-runtime.js";import{deepmerge as l,Render as f}from"@dropins/tools/lib.js";import{useState as g,useEffect as m}from"@dropins/tools/preact-hooks.js";import{UIProvider as h}from"@dropins/tools/components.js";import{events as u}from"@dropins/tools/event-bus.js";import{c as d}from"./chunks/initialize.js";const p={PLP:{noResults:"Your search returned no results.",searchError:"An error occurred while searching."},Facet:{showMore:"Show more",showLess:"Show less",clearAll:"Clear all"},SortBy:{title:"Sort by",lowToHigh:"Low to High",highToLow:"High to Low",relevance:"Relevance",position:"Position",name:"Product Name",price:"Price"}},w={Search:p},S={default:w},L=({children:n})=>{var o;const[t,i]=g("en_US"),s=(o=d.getConfig())==null?void 0:o.langDefinitions;m(()=>{const e=u.on("locale",a=>{i(a)},{eager:!0});return()=>{e==null||e.off()}},[]);const c=l(S,s??{});return r(h,{lang:t,langDefinitions:c,children:n})},x=new f(r(L,{}));export{x as render};
5
5
  //# sourceMappingURL=render.js.map
package/render.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sources":["/@dropins/storefront-product-discovery/src/render/Provider.tsx","/@dropins/storefront-product-discovery/src/render/render.tsx"],"sourcesContent":["/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { useState, useEffect } from 'preact/hooks';\nimport { UIProvider } from '@adobe-commerce/elsie/components';\nimport { Lang } from '@adobe-commerce/elsie/i18n';\nimport { events } from '@adobe-commerce/event-bus';\nimport { deepmerge } from '@adobe-commerce/elsie/lib';\n\nimport en_US from '../i18n/en_US.json';\nimport { config } from '../api';\n\n// Langs\nconst langDefinitions = {\n default: en_US,\n};\n\ninterface CartProviderProps {\n children?: any;\n}\n\nexport const Provider: FunctionComponent<CartProviderProps> = ({ children }) => {\n const [lang, setLang] = useState<Lang>('en_US');\n\n const userLangDefinitions = config.getConfig()?.langDefinitions;\n\n\n // Events\n useEffect(() => {\n const localeEvent = events.on(\n 'locale',\n (locale: string) => {\n setLang(locale as Lang);\n },\n { eager: true },\n );\n return () => {\n localeEvent?.off();\n };\n }, []);\n\n // Merge language definitions with user language definitions\n const definitions = deepmerge(langDefinitions, userLangDefinitions ?? {});\n\n return (\n <UIProvider lang={lang} langDefinitions={definitions}>\n {children}\n </UIProvider>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { Render } from '@adobe-commerce/elsie/lib';\nimport { Provider } from './Provider';\n\nexport const render = new Render(<Provider />);\n"],"names":["langDefinitions","en_US","Provider","children","lang","setLang","useState","userLangDefinitions","_a","config","useEffect","localeEvent","events","locale","definitions","deepmerge","jsx","UIProvider","render","Render"],"mappings":"umBAoBMA,EAAkB,CACtB,QAASC,CACX,EAMaC,EAAiD,CAAC,CAAE,SAAAC,KAAe,OAC9E,KAAM,CAACC,EAAMC,CAAO,EAAIC,EAAe,OAAO,EAExCC,GAAsBC,EAAAC,EAAO,UAAA,IAAP,YAAAD,EAAoB,gBAIhDE,EAAU,IAAM,CACd,MAAMC,EAAcC,EAAO,GACzB,SACCC,GAAmB,CAClBR,EAAQQ,CAAc,CACxB,EACA,CAAE,MAAO,EAAA,CAAK,EAEhB,MAAO,IAAM,CACXF,GAAA,MAAAA,EAAa,KACf,CACF,EAAG,CAAA,CAAE,EAGL,MAAMG,EAAcC,EAAUf,EAAiBO,GAAuB,CAAA,CAAE,EAExE,OACES,EAACC,EAAA,CAAW,KAAAb,EAAY,gBAAiBU,EACtC,SAAAX,EACH,CAEJ,EC5Cae,EAAS,IAAIC,EAAOH,EAACd,IAAS,CAAE"}
1
+ {"version":3,"file":"render.js","sources":["/@dropins/storefront-product-discovery/src/render/Provider.tsx","/@dropins/storefront-product-discovery/src/render/render.tsx"],"sourcesContent":["/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { useState, useEffect } from 'preact/hooks';\nimport { UIProvider } from '@adobe-commerce/elsie/components';\nimport { Lang } from '@adobe-commerce/elsie/i18n';\nimport { events } from '@adobe-commerce/event-bus';\nimport { deepmerge } from '@adobe-commerce/elsie/lib';\n\nimport en_US from '../i18n/en_US.json';\nimport { config } from '../api';\n\n// Langs\nconst langDefinitions = {\n default: en_US,\n};\n\ninterface CartProviderProps {\n children?: any;\n}\n\nexport const Provider: FunctionComponent<CartProviderProps> = ({ children }) => {\n const [lang, setLang] = useState<Lang>('en_US');\n\n const userLangDefinitions = config.getConfig()?.langDefinitions;\n\n\n // Events\n useEffect(() => {\n const localeEvent = events.on(\n 'locale',\n (locale: string) => {\n setLang(locale as Lang);\n },\n { eager: true },\n );\n return () => {\n localeEvent?.off();\n };\n }, []);\n\n // Merge language definitions with user language definitions\n const definitions = deepmerge(langDefinitions, userLangDefinitions ?? {});\n\n return (\n <UIProvider lang={lang} langDefinitions={definitions}>\n {children}\n </UIProvider>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { Render } from '@adobe-commerce/elsie/lib';\nimport { Provider } from './Provider';\n\nexport const render = new Render(<Provider />);\n"],"names":["langDefinitions","en_US","Provider","children","lang","setLang","useState","userLangDefinitions","_a","config","useEffect","localeEvent","events","locale","definitions","deepmerge","jsx","UIProvider","render","Render"],"mappings":"mrBAoBMA,EAAkB,CACtB,QAASC,CACX,EAMaC,EAAiD,CAAC,CAAE,SAAAC,KAAe,OAC9E,KAAM,CAACC,EAAMC,CAAO,EAAIC,EAAe,OAAO,EAExCC,GAAsBC,EAAAC,EAAO,UAAA,IAAP,YAAAD,EAAoB,gBAIhDE,EAAU,IAAM,CACd,MAAMC,EAAcC,EAAO,GACzB,SACCC,GAAmB,CAClBR,EAAQQ,CAAc,CACxB,EACA,CAAE,MAAO,EAAA,CAAK,EAEhB,MAAO,IAAM,CACXF,GAAA,MAAAA,EAAa,KACf,CACF,EAAG,CAAA,CAAE,EAGL,MAAMG,EAAcC,EAAUf,EAAiBO,GAAuB,CAAA,CAAE,EAExE,OACES,EAACC,EAAA,CAAW,KAAAb,EAAY,gBAAiBU,EACtC,SAAAX,EACH,CAEJ,EC5Cae,EAAS,IAAIC,EAAOH,EAACd,IAAS,CAAE"}