@dropins/storefront-product-discovery 1.1.0-beta2 → 2.0.0-alpha002

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/api/index.d.ts +1 -2
  2. package/api/{productSearch/graphql/productSearch.graphql.d.ts → search/graphql/search.graphql.d.ts} +1 -1
  3. package/api/{productSearch → search}/index.d.ts +1 -1
  4. package/api/search/search.d.ts +8 -0
  5. package/api.js +1 -1
  6. package/chunks/acdlEvents.js +1 -1
  7. package/chunks/search.js +57 -0
  8. package/chunks/search.js.map +1 -0
  9. package/components/ProductList/ProductList.d.ts +3 -1
  10. package/components/index.d.ts +0 -4
  11. package/containers/Facets/Facets.d.ts +3 -1
  12. package/containers/Facets.js +1 -1
  13. package/containers/Facets.js.map +1 -1
  14. package/containers/Pagination/Pagination.d.ts +10 -0
  15. package/containers/{ProductList/utils/getAttributeMetadata.d.ts → Pagination/index.d.ts} +3 -2
  16. package/containers/Pagination.d.ts +3 -0
  17. package/containers/Pagination.js +4 -0
  18. package/containers/Pagination.js.map +1 -0
  19. package/containers/SearchResults/SearchResults.d.ts +41 -0
  20. package/{components/ProductItem → containers/SearchResults}/index.d.ts +2 -2
  21. package/containers/SearchResults.d.ts +3 -0
  22. package/containers/SearchResults.js +4 -0
  23. package/containers/SearchResults.js.map +1 -0
  24. package/containers/SortBy/SortBy.d.ts +10 -0
  25. package/{api/attributeMetadata → containers/SortBy}/index.d.ts +2 -1
  26. package/containers/SortBy.d.ts +3 -0
  27. package/containers/SortBy.js +4 -0
  28. package/containers/SortBy.js.map +1 -0
  29. package/containers/index.d.ts +3 -4
  30. package/data/models/api.d.ts +2 -0
  31. package/data/transforms/api.d.ts +0 -1
  32. package/package.json +1 -1
  33. package/render.js +1 -5
  34. package/types/api/index.d.ts +0 -1
  35. package/api/attributeMetadata/attributeMetadata.d.ts +0 -4
  36. package/api/attributeMetadata/graphql/attributeMetadata.graphql.d.ts +0 -17
  37. package/api/productSearch/productSearch.d.ts +0 -4
  38. package/chunks/api.js +0 -4
  39. package/chunks/api.js.map +0 -1
  40. package/chunks/attributeMetadata.js +0 -19
  41. package/chunks/attributeMetadata.js.map +0 -1
  42. package/chunks/productSearch.js +0 -44
  43. package/chunks/productSearch.js.map +0 -1
  44. package/components/ProductItem/ProductItem.d.ts +0 -13
  45. package/components/ResultsInfo/ResultsInfo.d.ts +0 -9
  46. package/components/ResultsInfo/index.d.ts +0 -19
  47. package/components/SearchBarInput/SearchBarInput.d.ts +0 -15
  48. package/components/SearchBarInput/index.d.ts +0 -11
  49. package/components/SearchBarResults/SearchBarResults.d.ts +0 -10
  50. package/components/SearchBarResults/index.d.ts +0 -11
  51. package/containers/ProductList/ProductList.d.ts +0 -20
  52. package/containers/ProductList/index.d.ts +0 -11
  53. package/containers/ProductList/utils/getProductSearch.d.ts +0 -4
  54. package/containers/ProductList/utils/sortUtils.d.ts +0 -9
  55. package/containers/ProductList/utils/urlUtils.d.ts +0 -16
  56. package/containers/ProductList.d.ts +0 -3
  57. package/containers/ProductList.js +0 -4
  58. package/containers/ProductList.js.map +0 -1
  59. package/containers/ResultsInfo/ResultsInfo.d.ts +0 -11
  60. package/containers/ResultsInfo/index.d.ts +0 -19
  61. package/containers/ResultsInfo.d.ts +0 -3
  62. package/containers/ResultsInfo.js +0 -4
  63. package/containers/ResultsInfo.js.map +0 -1
  64. package/containers/SearchBarInput/SearchBarInput.d.ts +0 -16
  65. package/containers/SearchBarInput/index.d.ts +0 -11
  66. package/containers/SearchBarInput/utils/getSearchBarInputSearch.d.ts +0 -4
  67. package/containers/SearchBarInput.d.ts +0 -3
  68. package/containers/SearchBarInput.js +0 -4
  69. package/containers/SearchBarInput.js.map +0 -1
  70. package/containers/SearchBarResults/SearchBarResults.d.ts +0 -16
  71. package/containers/SearchBarResults/index.d.ts +0 -11
  72. package/containers/SearchBarResults.d.ts +0 -3
  73. package/containers/SearchBarResults.js +0 -5
  74. package/containers/SearchBarResults.js.map +0 -1
  75. package/types/api/attributeMetadata.d.ts +0 -12
package/api/index.d.ts CHANGED
@@ -8,6 +8,5 @@
8
8
  *******************************************************************/
9
9
  export * from './initialize';
10
10
  export * from './fetch-graphql';
11
- export * from './attributeMetadata';
12
- export * from './productSearch';
11
+ export * from './search';
13
12
  //# sourceMappingURL=index.d.ts.map
@@ -8,4 +8,4 @@
8
8
  *******************************************************************/
9
9
  declare const PRODUCT_SEARCH_QUERY: string;
10
10
  export { PRODUCT_SEARCH_QUERY };
11
- //# sourceMappingURL=productSearch.graphql.d.ts.map
11
+ //# sourceMappingURL=search.graphql.d.ts.map
@@ -6,5 +6,5 @@
6
6
  * file in accordance with the terms of the Adobe license agreement
7
7
  * accompanying it.
8
8
  *******************************************************************/
9
- export * from './productSearch';
9
+ export * from './search';
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,8 @@
1
+ import { ProductSearchResult, Scope, SearchVariables } from '../../data/models';
2
+
3
+ type SearchOptions = {
4
+ scope?: Scope;
5
+ };
6
+ export declare const search: (variables: SearchVariables | null, options?: SearchOptions) => Promise<ProductSearchResult>;
7
+ export {};
8
+ //# sourceMappingURL=search.d.ts.map
package/api.js CHANGED
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{a as i}from"./chunks/attributeMetadata.js";import{c as p,f as h,g as c,i as d,p as f,r as m,s as l,a as n,b as g}from"./chunks/productSearch.js";import"@dropins/tools/lib.js";import"./fragments.js";import"@dropins/tools/fetch-graphql.js";export{i as attributeMetadata,p as config,h as fetchGraphQl,c as getConfig,d as initialize,f as productSearch,m as removeFetchGraphQlHeader,l as setEndpoint,n as setFetchGraphQlHeader,g as setFetchGraphQlHeaders};
3
+ import{c as p,f as h,g as c,i as m,r as d,d as f,s as l,a as n,b as g}from"./chunks/search.js";import"@dropins/tools/lib.js";import"@dropins/tools/event-bus.js";import"./fragments.js";import"./chunks/acdlEvents.js";import"@dropins/tools/fetch-graphql.js";export{p as config,h as fetchGraphQl,c as getConfig,m as initialize,d as removeFetchGraphQlHeader,f as search,l as setEndpoint,n as setFetchGraphQlHeader,g as setFetchGraphQlHeaders};
4
4
  //# sourceMappingURL=api.js.map
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- const f="searchInputContext",C="searchResultsContext",w="livesearch-plp",N="livesearch-popover",_="search-product-click",I="search-request-sent",b="search-response-received",T="search-results-view",i="category-results-view",y="channelContext";function g(){return window.adobeDataLayer=window.adobeDataLayer||[],window.adobeDataLayer}function R(s){const t=g();return t.getState?t.getState(s):{}}function S(s,t){const n=g();n.push({[s]:null}),n.push({[s]:t})}function x(){return{_id:"https://ns.adobe.com/xdm/channels/web",_type:"https://ns.adobe.com/xdm/channel-types/web"}}function l(){S(y,x())}function h(s,t){g().push(c=>{const e=c.getState?c.getState():{};c.push({event:s,eventInfo:{...e,...t}})})}const v=s=>{l(),h(I,{searchUnitId:s})},P=s=>{l(),h(b,{searchUnitId:s})},A=s=>{h(i,{searchUnitId:s})},k=s=>{h(T,{searchUnitId:s})},H=(s,t)=>{h(_,{sku:s,searchUnitId:t})},O=(s,t,n,c,e,o,r)=>{if(!g)return;const a=R(f)||{};a!=null&&a.units||(a.units=[]);const u={searchUnitId:s,searchRequestId:t,queryTypes:["products","suggestions"],phrase:n,pageSize:e,currentPage:o,filter:c,sort:r},d=a.units.findIndex(E=>E.searchUnitId===s);d<0?a.units.push(u):a.units[d]=u,S(f,a)},V=(s,t,n)=>{var p,a;if(!g)return;const e=R(C)||{};e!=null&&e.units||(e.units=[]);const o=e.units.findIndex(u=>u.searchUnitId===s),r={searchUnitId:s,searchRequestId:t,products:L(n.items),categories:[],suggestions:D(n.suggestions),page:((p=n==null?void 0:n.pageInfo)==null?void 0:p.currentPage)||1,perPage:((a=n==null?void 0:n.pageInfo)==null?void 0:a.pageSize)||20,facets:U(n.facets)};o<0?e.units.push(r):e.units[o]=r,S(C,e)},L=s=>s?s.map((n,c)=>{var e,o,r,p,a,u,d,E;return{name:n==null?void 0:n.name,sku:n==null?void 0:n.sku,url:(n==null?void 0:n.url)??"",imageUrl:((e=n==null?void 0:n.images[0])==null?void 0:e.url)??"",price:((p=(r=(o=n==null?void 0:n.price)==null?void 0:o.final)==null?void 0:r.amount)==null?void 0:p.value)??((E=(d=(u=(a=n==null?void 0:n.priceRange)==null?void 0:a.minimum)==null?void 0:u.regular)==null?void 0:d.amount)==null?void 0:E.value),rank:c}}):[],D=s=>s?s.map((n,c)=>({suggestion:n,rank:c})):[],U=s=>s?s.map(n=>({attribute:n==null?void 0:n.attribute,title:n==null?void 0:n.title,type:(n==null?void 0:n.type)||"PINNED",buckets:n==null?void 0:n.buckets.map(c=>c)})):[];export{w as P,N as S,v as a,V as b,P as c,k as d,A as e,H as s,O as u};
3
+ const f="searchInputContext",C="searchResultsContext",w="livesearch-plp",N="livesearch-popover",_="search-product-click",I="search-request-sent",b="search-response-received",T="search-results-view",i="category-results-view",y="channelContext";function g(){return window.adobeDataLayer=window.adobeDataLayer||[],window.adobeDataLayer}function R(s){const t=g();return t.getState?t.getState(s):{}}function S(s,t){const n=g();n.push({[s]:null}),n.push({[s]:t})}function x(){return{_id:"https://ns.adobe.com/xdm/channels/web",_type:"https://ns.adobe.com/xdm/channel-types/web"}}function l(){S(y,x())}function h(s,t){g().push(c=>{const e=c.getState?c.getState():{};c.push({event:s,eventInfo:{...e,...t}})})}const v=s=>{l(),h(I,{searchUnitId:s})},P=s=>{l(),h(b,{searchUnitId:s})},A=s=>{h(i,{searchUnitId:s})},k=s=>{h(T,{searchUnitId:s})},H=(s,t)=>{h(_,{sku:s,searchUnitId:t})},O=(s,t,n,c,e,o,r)=>{if(!g)return;const a=R(f)||{};a!=null&&a.units||(a.units=[]);const u={searchUnitId:s,searchRequestId:t,queryTypes:["products","suggestions"],phrase:n,pageSize:e,currentPage:o,filter:c,sort:r},d=a.units.findIndex(E=>E.searchUnitId===s);d<0?a.units.push(u):a.units[d]=u,S(f,a)},V=(s,t,n)=>{var p,a;if(!g)return;const e=R(C)||{};e!=null&&e.units||(e.units=[]);const o=e.units.findIndex(u=>u.searchUnitId===s),r={searchUnitId:s,searchRequestId:t,products:L(n.items),categories:[],suggestions:D(n.suggestions),page:((p=n==null?void 0:n.pageInfo)==null?void 0:p.currentPage)||1,perPage:((a=n==null?void 0:n.pageInfo)==null?void 0:a.pageSize)||20,facets:U(n.facets)};o<0?e.units.push(r):e.units[o]=r,S(C,e)},L=s=>s?s.map((n,c)=>{var e,o,r,p,a,u,d,E;return{name:n==null?void 0:n.name,sku:n==null?void 0:n.sku,url:(n==null?void 0:n.url)??"",imageUrl:((e=n==null?void 0:n.images[0])==null?void 0:e.url)??"",price:((p=(r=(o=n==null?void 0:n.price)==null?void 0:o.final)==null?void 0:r.amount)==null?void 0:p.value)??((E=(d=(u=(a=n==null?void 0:n.priceRange)==null?void 0:a.minimum)==null?void 0:u.regular)==null?void 0:d.amount)==null?void 0:E.value),rank:c}}):[],D=s=>s?s.map((n,c)=>({suggestion:n,rank:c})):[],U=s=>s?s.map(n=>({attribute:n==null?void 0:n.attribute,title:n==null?void 0:n.title,type:(n==null?void 0:n.type)||"PINNED",buckets:n==null?void 0:n.buckets.map(c=>c)})):[];export{w as P,N as S,H as a,v as b,A as c,V as d,P as e,k as s,O as u};
4
4
  //# sourceMappingURL=acdlEvents.js.map
@@ -0,0 +1,57 @@
1
+ /*! Copyright 2025 Adobe
2
+ All Rights Reserved. */
3
+ import{Initializer as ie,merge as ee}from"@dropins/tools/lib.js";import{events as p}from"@dropins/tools/event-bus.js";import{ProductView as oe,Facet as se}from"../fragments.js";import{S as ue,P as le,u as ce,b as me,d as te,e as pe}from"./acdlEvents.js";import{FetchGraphQL as ge}from"@dropins/tools/fetch-graphql.js";const re=new ie({init:async e=>{const r={};re.config.setConfig({...r,...e})},listeners:()=>[]}),ne=re.config,{setEndpoint:Ce,setFetchGraphQlHeader:xe,removeFetchGraphQlHeader:Se,setFetchGraphQlHeaders:ve,fetchGraphQl:fe,getConfig:$e}=new ge().getMethods(),he=e=>{var o,u,c,m,i,t,l,n,s,h,y,R,_,I,b,w,P,C,x,S,v,$,k,z,D,T,A,E,Q,U,F,G,K,q,H,M,O,V,L,N,Y,j,B,J,W,X,Z,g,a;if(!e)return{id:"",name:"",sku:"",shortDescription:"",url:"",urlKey:"",metaTitle:"",metaKeywords:"",metaDescription:"",lowStock:!1,links:[],images:[],description:"",externalId:"",inputOptions:[],addToCartAllowed:!1,price:void 0,priceRange:void 0,inStock:!1,typename:""};const r={id:(e==null?void 0:e.id)||"",name:(e==null?void 0:e.name)||"",sku:(e==null?void 0:e.sku)||"",shortDescription:(e==null?void 0:e.shortDescription)||"",url:(e==null?void 0:e.url)||"",urlKey:(e==null?void 0:e.urlKey)||"",metaTitle:(e==null?void 0:e.metaTitle)||"",metaKeywords:(e==null?void 0:e.metaKeywords)||"",metaDescription:(e==null?void 0:e.metaDescription)||"",lowStock:(e==null?void 0:e.lowStock)||!1,links:(e==null?void 0:e.links)||[],images:((o=e==null?void 0:e.images)==null?void 0:o.map(f=>{var d;return{label:f.label||"",roles:f.roles||[],url:((d=f.url)==null?void 0:d.replace(/^https?:\/\//,"//"))||""}}))||[],description:(e==null?void 0:e.description)||"",externalId:(e==null?void 0:e.externalId)||"",inputOptions:(e==null?void 0:e.inputOptions)||[],addToCartAllowed:(e==null?void 0:e.addToCartAllowed)||!1,price:e.price?{final:{amount:{value:((m=(c=(u=e==null?void 0:e.price)==null?void 0:u.final)==null?void 0:c.amount)==null?void 0:m.value)||0,currency:((l=(t=(i=e==null?void 0:e.price)==null?void 0:i.final)==null?void 0:t.amount)==null?void 0:l.currency)||""}},regular:{amount:{value:((h=(s=(n=e==null?void 0:e.price)==null?void 0:n.regular)==null?void 0:s.amount)==null?void 0:h.value)||0,currency:((_=(R=(y=e==null?void 0:e.price)==null?void 0:y.regular)==null?void 0:R.amount)==null?void 0:_.currency)||""}},roles:((I=e==null?void 0:e.price)==null?void 0:I.roles)||[]}:void 0,priceRange:e!=null&&e.priceRange?{minimum:{final:{amount:{value:((C=(P=(w=(b=e==null?void 0:e.priceRange)==null?void 0:b.minimum)==null?void 0:w.final)==null?void 0:P.amount)==null?void 0:C.value)||0,currency:(($=(v=(S=(x=e==null?void 0:e.priceRange)==null?void 0:x.minimum)==null?void 0:S.final)==null?void 0:v.amount)==null?void 0:$.currency)||""}},regular:{amount:{value:((T=(D=(z=(k=e==null?void 0:e.priceRange)==null?void 0:k.minimum)==null?void 0:z.regular)==null?void 0:D.amount)==null?void 0:T.value)||0,currency:((U=(Q=(E=(A=e==null?void 0:e.priceRange)==null?void 0:A.minimum)==null?void 0:E.regular)==null?void 0:Q.amount)==null?void 0:U.currency)||""}}},maximum:{final:{amount:{value:((q=(K=(G=(F=e==null?void 0:e.priceRange)==null?void 0:F.maximum)==null?void 0:G.final)==null?void 0:K.amount)==null?void 0:q.value)||0,currency:((V=(O=(M=(H=e==null?void 0:e.priceRange)==null?void 0:H.maximum)==null?void 0:M.final)==null?void 0:O.amount)==null?void 0:V.currency)||""}},regular:{amount:{value:((j=(Y=(N=(L=e==null?void 0:e.priceRange)==null?void 0:L.maximum)==null?void 0:N.regular)==null?void 0:Y.amount)==null?void 0:j.value)||0,currency:((X=(W=(J=(B=e==null?void 0:e.priceRange)==null?void 0:B.maximum)==null?void 0:J.regular)==null?void 0:W.amount)==null?void 0:X.currency)||""}}}}:void 0,inStock:(e==null?void 0:e.inStock)||!1,typename:(e==null?void 0:e.__typename)||""};return ee(r,(a=(g=(Z=ne.getConfig().models)==null?void 0:Z.Product)==null?void 0:g.transformer)==null?void 0:a.call(g,e))};function ye(e){var u,c,m,i,t,l,n;const r=e==null?void 0:e.productSearch,o={facets:(r==null?void 0:r.facets)||[],items:(r==null?void 0:r.items.map(s=>he(s==null?void 0:s.productView)))||[],pageInfo:{currentPage:((u=r==null?void 0:r.page_info)==null?void 0:u.current_page)||1,totalPages:((c=r==null?void 0:r.page_info)==null?void 0:c.total_pages)||1,totalItems:((m=r==null?void 0:r.page_info)==null?void 0:m.total_items)||0,pageSize:((i=r==null?void 0:r.page_info)==null?void 0:i.page_size)||10},totalCount:(r==null?void 0:r.total_count)||0};return ee(o,(n=(l=(t=ne.getConfig().models)==null?void 0:t.ProductSearchResult)==null?void 0:l.transformer)==null?void 0:n.call(l,e))}const Re=`
4
+ query productSearch(
5
+ $phrase: String!
6
+ $pageSize: Int
7
+ $currentPage: Int = 1
8
+ $filter: [SearchClauseInput!]
9
+ $sort: [ProductSearchSortInput!]
10
+ $context: QueryContextInput
11
+ ) {
12
+ attributeMetadata {
13
+ sortable {
14
+ label
15
+ attribute
16
+ numeric
17
+ }
18
+ filterableInSearch {
19
+ label
20
+ attribute
21
+ numeric
22
+ }
23
+ }
24
+
25
+ productSearch(
26
+ phrase: $phrase
27
+ page_size: $pageSize
28
+ current_page: $currentPage
29
+ filter: $filter
30
+ sort: $sort
31
+ context: $context
32
+ ) {
33
+ total_count
34
+ items {
35
+ ...ProductView
36
+ }
37
+ facets {
38
+ ...Facet
39
+ }
40
+ page_info {
41
+ current_page
42
+ page_size
43
+ total_pages
44
+ }
45
+ }
46
+ attributeMetadata {
47
+ sortable {
48
+ label
49
+ attribute
50
+ numeric
51
+ }
52
+ }
53
+ }
54
+ ${oe}
55
+ ${se}
56
+ `,ke=async(e,r={})=>{var c,m;const o=r.scope==="search"?void 0:r.scope,u={request:e||{},result:{facets:[],pageInfo:{currentPage:0,totalPages:0,totalItems:0,pageSize:0},items:[],totalCount:0,suggestions:[]},metadata:{filterableAttributes:[],sortableAttributes:[]}};if(e===null)return p.emit("search/result",u,{scope:o}),u.result;p.emit("search/loading",!0,{scope:o});try{const i=o==="popover"?ue:le,t=window.crypto.randomUUID();ce(i,t,e.phrase||"",e.filter||[],e.pageSize||0,e.currentPage||0,e.sort||[]),me(i);const{errors:l,data:n}=await fe(Re,{method:"GET",variables:{...e}});if(l&&!n)throw new Error("Error fetching product search");const s=ye(n);return te(i,t,s),pe(i),p.emit("search/result",{request:e,result:s,metadata:{filterableAttributes:((c=n==null?void 0:n.attributeMetadata)==null?void 0:c.filterableInSearch)||[],sortableAttributes:((m=n==null?void 0:n.attributeMetadata)==null?void 0:m.sortable)||[]}},{scope:o}),s}catch(i){throw p.emit("search/error",i.message,{scope:o}),p.emit("search/result",u,{scope:o}),i}finally{p.emit("search/loading",!1,{scope:o})}};export{xe as a,ve as b,ne as c,ke as d,fe as f,$e as g,re as i,Se as r,Ce as s};
57
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sources":["/@dropins/storefront-product-discovery/src/api/initialize/initialize.ts","/@dropins/storefront-product-discovery/src/api/fetch-graphql/fetch-graphql.ts","/@dropins/storefront-product-discovery/src/data/transforms/product.ts","/@dropins/storefront-product-discovery/src/data/transforms/api.ts","/@dropins/storefront-product-discovery/src/api/search/graphql/search.graphql.ts","/@dropins/storefront-product-discovery/src/api/search/search.ts"],"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 { Initializer, Model } from '@adobe-commerce/elsie/lib';\nimport { Lang } from '@adobe-commerce/elsie/i18n';\nimport { Product } from '@/plp/data/models/product';\nimport { ProductSearchResult } from '@/plp/data/models';\n\ntype ConfigProps = {\n langDefinitions?: Lang;\n\n models?: {\n Product?: Model<Product>\n ProductSearchResult?: Model<ProductSearchResult>\n }\n};\n\nexport const initialize = new Initializer<ConfigProps>({\n init: async (config) => {\n const defaultConfig = {};\n\n initialize.config.setConfig({ ...defaultConfig, ...config });\n },\n\n listeners: () => [],\n});\n\nexport const config = initialize.config;\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 { FetchGraphQL } from '@adobe-commerce/fetch-graphql';\n\nexport const {\n setEndpoint,\n setFetchGraphQlHeader,\n removeFetchGraphQlHeader,\n setFetchGraphQlHeaders,\n fetchGraphQl,\n getConfig,\n} = new FetchGraphQL().getMethods();\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 *******************************************************************/\nimport { merge } from '@adobe-commerce/elsie/lib';\nimport { config } from '@/plp/api/initialize/initialize';\nimport { Product } from '../models/product';\n\nexport const transformProduct = (data: any): Product | null => {\n // check if data is null or undefined, and if so return an empty object\n if (!data) {\n return {\n id: '',\n name: '',\n sku: '',\n shortDescription: '',\n url: '',\n urlKey: '',\n metaTitle: '',\n metaKeywords: '',\n metaDescription: '',\n lowStock: false,\n links: [],\n images: [],\n description: '',\n externalId: '',\n inputOptions: [],\n addToCartAllowed: false,\n price: undefined,\n priceRange: undefined,\n inStock: false,\n typename: '',\n };\n }\n\n const transformedProduct = {\n id: data?.id || '',\n name: data?.name || '',\n sku: data?.sku || '',\n shortDescription: data?.shortDescription || '',\n url: data?.url || '',\n urlKey: data?.urlKey || '',\n metaTitle: data?.metaTitle || '',\n metaKeywords: data?.metaKeywords || '',\n metaDescription: data?.metaDescription || '',\n lowStock: data?.lowStock || false,\n links: data?.links || [],\n images:\n data?.images?.map((image: any) => ({\n label: image.label || '',\n roles: image.roles || [],\n url: image.url?.replace(/^https?:\\/\\//, '//') || '',\n })) || [],\n description: data?.description || '',\n externalId: data?.externalId || '',\n inputOptions: data?.inputOptions || [],\n addToCartAllowed: data?.addToCartAllowed || false,\n price: data.price\n ? {\n final: {\n amount: {\n value: data?.price?.final?.amount?.value || 0,\n currency: data?.price?.final?.amount?.currency || '',\n },\n },\n regular: {\n amount: {\n value: data?.price?.regular?.amount?.value || 0,\n currency: data?.price?.regular?.amount?.currency || '',\n },\n },\n roles: data?.price?.roles || [],\n }\n : undefined,\n priceRange: data?.priceRange\n ? {\n minimum: {\n final: {\n amount: {\n value: data?.priceRange?.minimum?.final?.amount?.value || 0,\n currency: data?.priceRange?.minimum?.final?.amount?.currency || '',\n },\n },\n regular: {\n amount: {\n value: data?.priceRange?.minimum?.regular?.amount?.value || 0,\n currency: data?.priceRange?.minimum?.regular?.amount?.currency || '',\n },\n },\n },\n maximum: {\n final: {\n amount: {\n value: data?.priceRange?.maximum?.final?.amount?.value || 0,\n currency: data?.priceRange?.maximum?.final?.amount?.currency || '',\n },\n },\n regular: {\n amount: {\n value: data?.priceRange?.maximum?.regular?.amount?.value || 0,\n currency: data?.priceRange?.maximum?.regular?.amount?.currency || '',\n },\n },\n },\n }\n : undefined,\n inStock: data?.inStock || false,\n typename: data?.__typename || '',\n };\n\n return merge(\n transformedProduct, // default transformer\n config.getConfig().models?.Product?.transformer?.(data), // custom transformer\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 *******************************************************************/\nimport { merge } from '@adobe-commerce/elsie/lib';\nimport { config } from '@/plp/api/initialize/initialize';\nimport { ProductSearchResult } from '@/plp/data/models';\nimport { Product } from '@/plp/data/models/product';\n\nimport { transformProduct } from './product';\n\nexport function transformProductSearchResponse(data: any): ProductSearchResult {\n const productSearch = data?.productSearch;\n const transformedResponse: ProductSearchResult = {\n facets: productSearch?.facets || [],\n items: productSearch?.items.map((product: any) => transformProduct(product?.productView)) || [],\n pageInfo: {\n currentPage: productSearch?.page_info?.current_page || 1,\n totalPages: productSearch?.page_info?.total_pages || 1,\n totalItems: productSearch?.page_info?.total_items || 0,\n pageSize: productSearch?.page_info?.page_size || 10, //replace with default constant\n },\n totalCount: productSearch?.total_count || 0,\n };\n return merge(\n transformedResponse, // default transformer\n config.getConfig().models?.ProductSearchResult?.transformer?.(data), // custom transformer\n );\n}\n\nexport const transformSearchResultProducts = (searchResponse: { productSearch: { items: any[] } }): Product[] =>\n searchResponse?.productSearch?.items?.reduce<Product[]>((returnedProductList, productItem) => {\n if (!productItem?.productView) return returnedProductList; // Skip if no productView and product is null\n\n const transformed = transformProduct(productItem.productView);\n if (transformed) {\n returnedProductList.push(transformed);\n }\n\n return returnedProductList;\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 { Facet, ProductView } from '../../graphql/fragments.graphql';\n\nconst PRODUCT_SEARCH_QUERY = /* GraphQL */ `\n query productSearch(\n $phrase: String!\n $pageSize: Int\n $currentPage: Int = 1\n $filter: [SearchClauseInput!]\n $sort: [ProductSearchSortInput!]\n $context: QueryContextInput\n ) {\n attributeMetadata {\n sortable {\n label\n attribute\n numeric\n }\n filterableInSearch {\n label\n attribute\n numeric\n }\n }\n\n productSearch(\n phrase: $phrase\n page_size: $pageSize\n current_page: $currentPage\n filter: $filter\n sort: $sort\n context: $context\n ) {\n total_count\n items {\n ...ProductView\n }\n facets {\n ...Facet\n }\n page_info {\n current_page\n page_size\n total_pages\n }\n }\n attributeMetadata {\n sortable {\n label\n attribute\n numeric\n }\n }\n }\n ${ProductView}\n ${Facet}\n`;\n\nexport { PRODUCT_SEARCH_QUERY };\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 { ProductSearchResult, Scope, SearchVariables } from '@/plp/data/models';\nimport { fetchGraphQl } from '@/plp/api';\nimport { transformProductSearchResponse } from '@/plp/data/transforms';\nimport { events } from '@adobe-commerce/event-bus';\nimport { PRODUCT_SEARCH_QUERY } from './graphql/search.graphql';\nimport { \n searchRequestSent, \n searchResponseReceived, \n updateSearchInputCtx,\n updateSearchResultsCtx,\n SEARCH_UNIT_ID, \n PLP_UNIT_ID,\n} from '@/plp/utils/acdlEvents';\n\ntype SearchOptions = {\n scope?: Scope;\n}\n\nexport const search = async (variables: SearchVariables | null, options: SearchOptions = {}): Promise<ProductSearchResult> => {\n const scope = options.scope === 'search' ? undefined : options.scope;\n\n // empty result\n const emptyResult = {\n request: variables || {} ,\n result: {\n facets: [],\n pageInfo: { currentPage: 0, totalPages: 0, totalItems: 0, pageSize: 0 },\n items: [],\n totalCount: 0,\n suggestions: []\n },\n metadata: {\n filterableAttributes: [],\n sortableAttributes: []\n }\n };\n\n // clear search results if no variables are provided\n if (variables === null) {\n events.emit('search/result', emptyResult, { scope });\n return emptyResult.result;\n }\n\n\n // Emit loading state\n events.emit('search/loading', true, { scope });\n\n try {\n const acdlUnitId = scope === 'popover' ? SEARCH_UNIT_ID : PLP_UNIT_ID;\n const searchRequestId = window.crypto.randomUUID();\n\n // Update search input context in ACDL\n updateSearchInputCtx(\n acdlUnitId,\n searchRequestId,\n variables.phrase || '',\n variables.filter || [],\n variables.pageSize || 0,\n variables.currentPage || 0,\n variables.sort || [],\n );\n\n // Publish search request event to ACDL\n searchRequestSent(acdlUnitId);\n\n // Execute search with validated variables\n const { errors, data } = await fetchGraphQl(PRODUCT_SEARCH_QUERY, {\n method: 'GET',\n variables: { ...variables },\n });\n\n if (errors && !data) {\n throw new Error('Error fetching product search');\n }\n\n const result = transformProductSearchResponse(data);\n\n // Update search results context in ACDL\n updateSearchResultsCtx(acdlUnitId, searchRequestId, result);\n\n // Publish search response event to ACDL\n searchResponseReceived(acdlUnitId)\n\n // Emit single event with result and metadata\n events.emit('search/result', {\n request: variables,\n result,\n metadata: {\n filterableAttributes: data?.attributeMetadata?.filterableInSearch || [],\n sortableAttributes: data?.attributeMetadata?.sortable || []\n }\n }, { scope });\n\n return result;\n\n } catch (error) {\n // Emit error event\n events.emit('search/error', (error as Error).message, { scope });\n\n // Emit result event with empty result\n events.emit('search/result', emptyResult, { scope });\n\n throw error;\n } finally {\n // Reset loading state\n events.emit('search/loading', false, { scope });\n }\n};"],"names":["initialize","Initializer","config","defaultConfig","setEndpoint","setFetchGraphQlHeader","removeFetchGraphQlHeader","setFetchGraphQlHeaders","fetchGraphQl","getConfig","FetchGraphQL","transformProduct","data","transformedProduct","_a","image","_d","_c","_b","_g","_f","_e","_j","_i","_h","_m","_l","_k","_n","_r","_q","_p","_o","_v","_u","_t","_s","_z","_y","_x","_w","_D","_C","_B","_A","_H","_G","_F","_E","_L","_K","_J","_I","_P","_O","_N","_M","_T","_S","_R","_Q","merge","_W","_V","_U","transformProductSearchResponse","productSearch","transformedResponse","product","PRODUCT_SEARCH_QUERY","ProductView","Facet","search","variables","options","scope","emptyResult","events","acdlUnitId","SEARCH_UNIT_ID","PLP_UNIT_ID","searchRequestId","updateSearchInputCtx","searchRequestSent","errors","result","updateSearchResultsCtx","searchResponseReceived","error"],"mappings":"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"}
@@ -2,9 +2,11 @@ import { FunctionComponent, VNode } from 'preact';
2
2
  import { HTMLAttributes } from 'preact/compat';
3
3
 
4
4
  export interface ProductListProps extends HTMLAttributes<HTMLDivElement> {
5
- header?: VNode;
6
5
  productList?: VNode[];
6
+ header?: VNode;
7
7
  footer?: VNode;
8
+ imageWidth?: number;
9
+ imageHeight?: number;
8
10
  }
9
11
  export declare const ProductList: FunctionComponent<ProductListProps>;
10
12
  //# sourceMappingURL=ProductList.d.ts.map
@@ -10,8 +10,4 @@ export * from './ProductList';
10
10
  export * from './SearchAlertMessage';
11
11
  export * from './Facet';
12
12
  export * from './FacetList';
13
- export * from './ResultsInfo';
14
- export * from './SearchBarInput';
15
- export * from './SearchBarResults';
16
- export * from './ProductItem';
17
13
  //# sourceMappingURL=index.d.ts.map
@@ -1,8 +1,10 @@
1
1
  import { HTMLAttributes } from 'preact/compat';
2
2
  import { Container, SlotProps } from '@dropins/tools/types/elsie/src/lib';
3
- import { SearchFacet, FacetBucket } from '../../data/models/api';
3
+ import { SearchFacet, FacetBucket, Scope } from '../../data/models/api';
4
4
 
5
5
  export interface FacetsProps extends HTMLAttributes<HTMLDivElement> {
6
+ rootCategory?: string;
7
+ scope?: Scope;
6
8
  slots?: {
7
9
  Facet?: SlotProps<{
8
10
  data: SearchFacet;
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsxs as p,jsx as c,Fragment as b}from"@dropins/tools/preact-jsx-runtime.js";import*as d from"@dropins/tools/preact-compat.js";import{useState as x,useEffect as D}from"@dropins/tools/preact-compat.js";import{VComponent as C,classes as z,Slot as S}from"@dropins/tools/lib.js";import{Button as A,Icon as R,ActionButton as H,PriceRange as N,Divider as U,Checkbox as V,RadioButton as j}from"@dropins/tools/components.js";/* empty css */import{useText as $}from"@dropins/tools/i18n.js";/* empty css *//* empty css *//* empty css */import{events as M}from"@dropins/tools/event-bus.js";const P=e=>d.createElement("svg",{id:"Icon_Add_Base","data-name":"Icon \\u2013 Add \\u2013 Base",xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",...e},d.createElement("g",{id:"Large"},d.createElement("rect",{id:"Placement_area","data-name":"Placement area",width:24,height:24,fill:"#fff",opacity:0}),d.createElement("g",{id:"Add_icon","data-name":"Add icon",transform:"translate(9.734 9.737)"},d.createElement("line",{vectorEffect:"non-scaling-stroke",id:"Line_579","data-name":"Line 579",y2:12.7,transform:"translate(2.216 -4.087)",fill:"none",stroke:"currentColor"}),d.createElement("line",{vectorEffect:"non-scaling-stroke",id:"Line_580","data-name":"Line 580",x2:12.7,transform:"translate(-4.079 2.263)",fill:"none",stroke:"currentColor"})))),T=e=>d.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e},d.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M3 12H21",stroke:"currentColor"}),d.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M3 6H21",stroke:"currentColor"}),d.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M3 18H21",stroke:"currentColor"})),W=e=>d.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e},d.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3599 5.64001L5.62988 18.37",stroke:"currentColor"}),d.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3599 18.37L5.62988 5.64001",stroke:"currentColor"})),Y=e=>d.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e},d.createElement("path",{d:"M17.3332 11.75H6.6665",strokeWidth:1.5,strokeLinecap:"square",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke",fill:"none",stroke:"currentColor"})),G=({numberOfOptionsConfig:e=5,header:n,buckets:a})=>{const l=$({showMore:"Search.Facet.showMore",showLess:"Search.Facet.showLess"}),h=e,[g,f]=x(a.length<h),w=g?a.length:h;return p("div",{children:[c(C,{className:"product-discovery-facet__header",node:n}),a.slice(0,w).map((v,F)=>c(C,{className:"product-discovery-facet__bucket",node:v},F)),!g&&a.length>h&&c(A,{variant:"tertiary",icon:c(R,{source:P,size:"24"}),onClick:()=>f(!g),children:l.showMore}),g&&a.length>h&&c(A,{variant:"tertiary",icon:c(R,{source:Y,size:"24"}),onClick:()=>f(!g),children:l.showLess})]})},J=({selectedFacets:e,facets:n})=>{const[a,l]=x(!0),h=()=>{l(!a)};return p("div",{className:"product-discovery-facet-list",children:[c("div",{className:"product-discovery-facet-list__show-filters-button",children:p(H,{onClick:()=>{h()},children:[c(R,{source:T,size:"16"}),c("span",{children:"Filters"})]})}),c(C,{className:"product-discovery-facet-list__selected-filters",node:e}),c(C,{className:z(["product-discovery-facet-list__facet-options",["product-discovery-facet-list__facet-options--hidden",a]]),node:n})]})},K="no",Q="yes",X=e=>{const n=e.buckets.find(a=>a.selected);return n?{attribute:e.attribute,range:{from:n.from,to:n.to}}:null},Z=e=>{const n=e.buckets.reduce((a,l)=>(l.selected&&a.push(l.title),a),[]);return n.length===0?null:{attribute:e.attribute,in:n}},I=e=>{var n;switch((n=e.buckets[0])==null?void 0:n.__typename){case"RangeBucket":return X(e);case"ScalarBucket":case"CategoryView":return Z(e)}},ee=e=>{var a,l,h,g,f,w,v,F,k,_,E;const n=e[0];return(h=(l=(a=n==null?void 0:n.price)==null?void 0:a.regular)==null?void 0:l.amount)!=null&&h.currency?n.price.regular.amount.currency:(v=(w=(f=(g=n==null?void 0:n.priceRange)==null?void 0:g.minimum)==null?void 0:f.regular)==null?void 0:w.amount)!=null&&v.currency?(E=(_=(k=(F=n==null?void 0:n.priceRange)==null?void 0:F.minimum)==null?void 0:k.regular)==null?void 0:_.amount)==null?void 0:E.currency:"USD"},te=(e,n,a)=>(n==null?void 0:n.attribute)==="price"?e.from===0?p("div",{style:"display:flex",children:[c(N,{amount:e.from,currency:a||"USD"}),c("span",{style:"padding: 0 2px",children:"-"}),c(N,{amount:e.to,currency:a||"USD"})]}):c(N,{minimumAmount:e.from,maximumAmount:e.to,currency:a||"USD",display:"dash"}):e.title,ne=(e,n)=>e.title===K?`Not ${n.title}`:e.title===Q?n.title:e.title,O=(e,n,a)=>{switch(e.__typename){case"RangeBucket":return te(e,n,a);case"ScalarBucket":case"CategoryView":return ne(e,n)}},he=({slots:e})=>{const n=$({clearAll:"Search.Facet.clearAll"}),[a,l]=x([]),[h,g]=x(null),f=r=>{if(!r||!r.result.facets&&!r.result.items&&!r.request.filter){l([]);return}const{facets:i,items:m}=r.result;g(ee(m));const t=r.request.filter;if(i){const s=i.map(o=>{const B=o.buckets.map(u=>{u.selected=!1;const L=t==null?void 0:t.find(y=>y.attribute===o.attribute);if(L){const y=L.range;(y&&u.from===y.from&&u.to===y.to||L.in&&L.in.includes(u.title))&&(u.selected=!0)}return u});return o.buckets=B,o});l(s)}},w=r=>{const i=a.map(t=>{const s=r.find(o=>o.attribute===t.attribute);return s||t}),m=i.reduce((t,s)=>{const o=I(s);return o&&t.push(o),t},[]);l(i),M.emit("search/request",{filter:m})},v=(r,i)=>{const m=r.buckets.map(s=>(s.title===i&&(s.selected=!1),s)),t=r;t.buckets=m,w([t])},F=()=>{const r=a.map(i=>{const m=i.buckets.map(t=>(t.selected=!1,t));return i.buckets=m,i});l(r),M.emit("search/request",{filter:[]})},k=(r,i)=>{const m=i.buckets.map(s=>{var o;return((o=i.buckets[0])==null?void 0:o.__typename)==="RangeBucket"&&(s.selected=!1),s.title===r.target.value&&(s.selected=r.target.checked),s}),t=i;t.buckets=m,w([t])},_=r=>{const i=c("span",{children:r.title}),m=r.buckets.map(t=>{var B;const s=O(t,r,h),o=u=>p(S,{name:"FacetBucketLabel",slot:e==null?void 0:e.FacetBucketLabel,context:{data:t},children:[s," ",u?`(${u})`:""]});switch((B=r.buckets[0])==null?void 0:B.__typename){case"RangeBucket":return c(S,{name:"FacetBucket",slot:e==null?void 0:e.FacetBucket,context:{data:t},children:c(j,{"data-testid":`${t.title}-radio`,label:o(),name:r.attribute,value:t.title,checked:t.selected,onChange:u=>{k(u,r)}})});case"ScalarBucket":case"CategoryView":return c(S,{name:"FacetBucket",slot:e==null?void 0:e.FacetBucket,context:{data:t},children:c(V,{"data-testid":`${t.title}-checkbox`,label:o(t.count),name:r.attribute,value:t.title,checked:t.selected,onChange:u=>{k(u,r)}})});default:return null}}).filter(t=>t!==null);return c(G,{header:i,buckets:m})},E=()=>c(S,{name:"Facets",slot:e==null?void 0:e.Facets,context:{data:a},children:a.map(r=>r.buckets.length>0?p(b,{children:[c(S,{name:"Facet",slot:e==null?void 0:e.Facet,context:{data:r},children:_(r)}),c(U,{variant:"secondary"})]}):null)}),q=()=>{const r=a.reduce((t,s)=>(s.buckets.filter(B=>B.selected).length>0&&t.push(s),t),[]),i=r.map(t=>t.buckets.map(s=>{if(s.selected){const o=O(s,t,h);return c(A,{"data-testid":`${s.title}-selected-btn`,"aria-label":`Remove ${t.title} filter: ${s.title}`,variant:"secondary",children:p(b,{children:[c("span",{children:o}),c(R,{source:W,size:"16"})]}),onClick:()=>{v(t,s.title)}})}return null})),m=i.length>0?c(A,{variant:"secondary",onClick:()=>{F()},children:c("span",{children:n.clearAll})}):null;return p(S,{name:"SelectedFacets",slot:e==null?void 0:e.SelectedFacets,context:{data:r},children:[i,m]})};return D(()=>{M.on("search/result",f)},[]),c(J,{selectedFacets:q(),facets:E()})};export{he as Facets,he as default};
3
+ import{jsxs as w,jsx as a,Fragment as b}from"@dropins/tools/preact-jsx-runtime.js";import*as d from"@dropins/tools/preact-compat.js";import{useState as E,useEffect as V}from"@dropins/tools/preact-compat.js";import{VComponent as C,classes as j,Slot as B}from"@dropins/tools/lib.js";import{Button as R,Icon as A,ActionButton as T,PriceRange as N,Divider as W,Checkbox as Y,RadioButton as G}from"@dropins/tools/components.js";/* empty css */import{useText as q}from"@dropins/tools/i18n.js";import{events as J}from"@dropins/tools/event-bus.js";import{d as O}from"../chunks/search.js";import"../fragments.js";import"../chunks/acdlEvents.js";import"@dropins/tools/fetch-graphql.js";const K=e=>d.createElement("svg",{id:"Icon_Add_Base","data-name":"Icon \\u2013 Add \\u2013 Base",xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",...e},d.createElement("g",{id:"Large"},d.createElement("rect",{id:"Placement_area","data-name":"Placement area",width:24,height:24,fill:"#fff",opacity:0}),d.createElement("g",{id:"Add_icon","data-name":"Add icon",transform:"translate(9.734 9.737)"},d.createElement("line",{vectorEffect:"non-scaling-stroke",id:"Line_579","data-name":"Line 579",y2:12.7,transform:"translate(2.216 -4.087)",fill:"none",stroke:"currentColor"}),d.createElement("line",{vectorEffect:"non-scaling-stroke",id:"Line_580","data-name":"Line 580",x2:12.7,transform:"translate(-4.079 2.263)",fill:"none",stroke:"currentColor"})))),Q=e=>d.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e},d.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M3 12H21",stroke:"currentColor"}),d.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M3 6H21",stroke:"currentColor"}),d.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M3 18H21",stroke:"currentColor"})),X=e=>d.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e},d.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3599 5.64001L5.62988 18.37",stroke:"currentColor"}),d.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3599 18.37L5.62988 5.64001",stroke:"currentColor"})),Z=e=>d.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e},d.createElement("path",{d:"M17.3332 11.75H6.6665",strokeWidth:1.5,strokeLinecap:"square",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke",fill:"none",stroke:"currentColor"})),I=({numberOfOptionsConfig:e=5,header:c,buckets:t})=>{const g=q({showMore:"Search.Facet.showMore",showLess:"Search.Facet.showLess"}),l=e,[m,p]=E(t.length<l),F=m?t.length:l;return w("div",{children:[a(C,{className:"product-discovery-facet__header",node:c}),t.slice(0,F).map((f,v)=>a(C,{className:"product-discovery-facet__bucket",node:f},v)),!m&&t.length>l&&a(R,{variant:"tertiary",icon:a(A,{source:K,size:"24"}),onClick:()=>p(!m),children:g.showMore}),m&&t.length>l&&a(R,{variant:"tertiary",icon:a(A,{source:Z,size:"24"}),onClick:()=>p(!m),children:g.showLess})]})},ee=({selectedFacets:e,facets:c})=>{const[t,g]=E(!0),l=()=>{g(!t)};return w("div",{className:"product-discovery-facet-list",children:[a("div",{className:"product-discovery-facet-list__show-filters-button",children:w(T,{onClick:()=>{l()},children:[a(A,{source:Q,size:"16"}),a("span",{children:"Filters"})]})}),a(C,{className:"product-discovery-facet-list__selected-filters",node:e}),a(C,{className:j(["product-discovery-facet-list__facet-options",["product-discovery-facet-list__facet-options--hidden",t]]),node:c})]})},te="no",re="yes",ne=e=>{const c=e.buckets.find(t=>t.selected);return c?{attribute:e.attribute,range:{from:c.from,to:c.to}}:null},ce=e=>{const c=e.buckets.reduce((t,g)=>(g.selected&&t.push(g.title),t),[]);return c.length===0?null:{attribute:e.attribute,in:c}},ae=e=>{var c;switch((c=e.buckets[0])==null?void 0:c.__typename){case"RangeBucket":return ne(e);case"ScalarBucket":case"CategoryView":return ce(e)}},se=e=>{var t,g,l,m,p,F,f,v,k,L,y;const c=e[0];return(l=(g=(t=c==null?void 0:c.price)==null?void 0:t.regular)==null?void 0:g.amount)!=null&&l.currency?c.price.regular.amount.currency:(f=(F=(p=(m=c==null?void 0:c.priceRange)==null?void 0:m.minimum)==null?void 0:p.regular)==null?void 0:F.amount)!=null&&f.currency?(y=(L=(k=(v=c==null?void 0:c.priceRange)==null?void 0:v.minimum)==null?void 0:k.regular)==null?void 0:L.amount)==null?void 0:y.currency:"USD"},ie=(e,c,t)=>(c==null?void 0:c.attribute)==="price"?e.from===0?w("div",{style:"display:flex",children:[a(N,{amount:e.from,currency:t||"USD"}),a("span",{style:"padding: 0 2px",children:"-"}),a(N,{amount:e.to,currency:t||"USD"})]}):a(N,{minimumAmount:e.from,maximumAmount:e.to,currency:t||"USD",display:"dash"}):e.title,oe=(e,c)=>e.title===te?`Not ${c.title}`:e.title===re?c.title:e.title,$=(e,c,t)=>{switch(e.__typename){case"RangeBucket":return ie(e,c,t);case"ScalarBucket":case"CategoryView":return oe(e,c)}},Se=({rootCategory:e,scope:c,slots:t})=>{const g=q({clearAll:"Search.Facet.clearAll"}),[l,m]=E([]),[p,F]=E(null),[f,v]=E(),k=r=>{e?O({...r,filter:[{attribute:"categoryPath",eq:e},...r.filter||[]]},{scope:c}):O(r,{scope:c})},L=r=>{if(!r||!r.result.facets&&!r.result.items&&!r.request.filter){m([]);return}v(r.request);const{facets:i,items:h}=r.result;F(se(h));const n=r.request.filter;if(i){const s=i.map(o=>{const S=o.buckets.map(u=>{u.selected=!1;const x=n==null?void 0:n.find(_=>_.attribute===o.attribute);if(x){const _=x.range;(_&&u.from===_.from&&u.to===_.to||x.in&&x.in.includes(u.title))&&(u.selected=!0)}return u});return o.buckets=S,o});m(s)}},y=r=>{const i=l.map(n=>{const s=r.find(o=>o.attribute===n.attribute);return s||n}),h=i.reduce((n,s)=>{const o=ae(s);return o&&n.push(o),n},[]);m(i),f&&k({...f,filter:h})},D=(r,i)=>{const h=r.buckets.map(s=>(s.title===i&&(s.selected=!1),s)),n=r;n.buckets=h,y([n])},z=()=>{const r=l.map(i=>{const h=i.buckets.map(n=>(n.selected=!1,n));return i.buckets=h,i});m(r),f&&k({...f,filter:[]})},M=(r,i)=>{const h=i.buckets.map(s=>{var o;return((o=i.buckets[0])==null?void 0:o.__typename)==="RangeBucket"&&(s.selected=!1),s.title===r.target.value&&(s.selected=r.target.checked),s}),n=i;n.buckets=h,y([n])},H=r=>{const i=a("span",{children:r.title}),h=r.buckets.map(n=>{var S;const s=$(n,r,p),o=u=>w(B,{name:"FacetBucketLabel",slot:t==null?void 0:t.FacetBucketLabel,context:{data:n},children:[s," ",u?`(${u})`:""]});switch((S=r.buckets[0])==null?void 0:S.__typename){case"RangeBucket":return a(B,{name:"FacetBucket",slot:t==null?void 0:t.FacetBucket,context:{data:n},children:a(G,{"data-testid":`${n.title}-radio`,label:o(),name:r.attribute,value:n.title,checked:n.selected,onChange:u=>{M(u,r)}})});case"ScalarBucket":case"CategoryView":return a(B,{name:"FacetBucket",slot:t==null?void 0:t.FacetBucket,context:{data:n},children:a(Y,{"data-testid":`${n.title}-checkbox`,label:o(n.count),name:r.attribute,value:n.title,checked:n.selected,onChange:u=>{M(u,r)}})});default:return null}}).filter(n=>n!==null);return a(I,{header:i,buckets:h})},P=()=>a(B,{name:"Facets",slot:t==null?void 0:t.Facets,context:{data:l},children:l.map(r=>r.buckets.length>0?w(b,{children:[a(B,{name:"Facet",slot:t==null?void 0:t.Facet,context:{data:r},children:H(r)}),a(W,{variant:"secondary"})]}):null)}),U=()=>{const r=l.reduce((n,s)=>(s.buckets.filter(S=>S.selected).length>0&&n.push(s),n),[]),i=r.map(n=>n.buckets.map(s=>{if(s.selected){const o=$(s,n,p);return a(R,{"data-testid":`${s.title}-selected-btn`,"aria-label":`Remove ${n.title} filter: ${s.title}`,variant:"secondary",children:w(b,{children:[a("span",{children:o}),a(A,{source:X,size:"16"})]}),onClick:()=>{D(n,s.title)}})}return null})),h=i.length>0?a(R,{variant:"secondary",onClick:()=>{z()},children:a("span",{children:g.clearAll})}):null;return w(B,{name:"SelectedFacets",slot:t==null?void 0:t.SelectedFacets,context:{data:r},children:[i,h]})};return V(()=>{const r=J.on("search/result",L,{eager:!0,scope:c});return()=>{r==null||r.off()}},[]),a(ee,{selectedFacets:U(),facets:P()})};export{Se as Facets,Se as default};
4
4
  //# sourceMappingURL=Facets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Facets.js","sources":["../../node_modules/@adobe-commerce/elsie/src/icons/Add.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Burger.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Close.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Minus.svg","/@dropins/storefront-product-discovery/src/components/Facet/Facet.tsx","/@dropins/storefront-product-discovery/src/components/FacetList/FacetList.tsx","/@dropins/storefront-product-discovery/src/containers/Facets/utils/facetUtils.tsx","/@dropins/storefront-product-discovery/src/containers/Facets/Facets.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgAdd = (props) => /* @__PURE__ */ React.createElement(\"svg\", { id: \"Icon_Add_Base\", \"data-name\": \"Icon \\\\u2013 Add \\\\u2013 Base\", xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { id: \"Large\" }, /* @__PURE__ */ React.createElement(\"rect\", { id: \"Placement_area\", \"data-name\": \"Placement area\", width: 24, height: 24, fill: \"#fff\", opacity: 0 }), /* @__PURE__ */ React.createElement(\"g\", { id: \"Add_icon\", \"data-name\": \"Add icon\", transform: \"translate(9.734 9.737)\" }, /* @__PURE__ */ React.createElement(\"line\", { vectorEffect: \"non-scaling-stroke\", id: \"Line_579\", \"data-name\": \"Line 579\", y2: 12.7, transform: \"translate(2.216 -4.087)\", fill: \"none\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"line\", { vectorEffect: \"non-scaling-stroke\", id: \"Line_580\", \"data-name\": \"Line 580\", x2: 12.7, transform: \"translate(-4.079 2.263)\", fill: \"none\", stroke: \"currentColor\" }))));\nexport default SvgAdd;\n","import * as React from \"react\";\nconst SvgBurger = (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: \"M3 12H21\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M3 6H21\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M3 18H21\", stroke: \"currentColor\" }));\nexport default SvgBurger;\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 * as React from \"react\";\nconst SvgMinus = (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: \"M17.3332 11.75H6.6665\", strokeWidth: 1.5, strokeLinecap: \"square\", strokeLinejoin: \"round\", vectorEffect: \"non-scaling-stroke\", fill: \"none\", stroke: \"currentColor\" }));\nexport default SvgMinus;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes, useState } from 'preact/compat';\nimport '@/plp/components/Facet/Facet.css';\nimport { Button, Icon } from '@adobe-commerce/elsie/components';\nimport { Minus, Add } from '@adobe-commerce/elsie/icons';\nimport { VComponent } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\n\nexport interface FacetProps extends HTMLAttributes<HTMLDivElement> {\n numberOfOptionsConfig?: number;\n header: VNode;\n buckets: VNode[];\n}\n\nexport const Facet: FunctionComponent<FacetProps> = ({ numberOfOptionsConfig = 5, header, buckets }) => {\n const translations = useText({\n showMore: 'Search.Facet.showMore',\n showLess: 'Search.Facet.showLess',\n });\n const numberOfOptionsShown = numberOfOptionsConfig;\n const [showMore, setShowMore] = useState(buckets.length < numberOfOptionsShown);\n\n const numberOfOptions = showMore ? buckets.length : numberOfOptionsShown;\n\n return (\n <div>\n <VComponent className=\"product-discovery-facet__header\" node={header} />\n {buckets.slice(0, numberOfOptions).map((bucket, index) => {\n return <VComponent key={index} className=\"product-discovery-facet__bucket\" node={bucket} />;\n })}\n {!showMore && buckets.length > numberOfOptionsShown && (\n <Button variant=\"tertiary\" icon={<Icon source={Add} size=\"24\" />} onClick={(): void => setShowMore(!showMore)}>\n {translations.showMore}\n </Button>\n )}\n {showMore && buckets.length > numberOfOptionsShown && (\n <Button\n variant=\"tertiary\"\n icon={<Icon source={Minus} size=\"24\" />}\n onClick={(): void => setShowMore(!showMore)}\n >\n {translations.showLess}\n </Button>\n )}\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes, useState } from 'preact/compat';\nimport '@/plp/components/FacetList/FacetList.css';\nimport { ActionButton, Icon } from '@adobe-commerce/elsie/components';\nimport { Burger } from '@adobe-commerce/elsie/icons';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\n\nexport interface FacetListProps extends HTMLAttributes<HTMLDivElement> {\n selectedFacets: VNode;\n facets: VNode;\n}\n\nexport const FacetList: FunctionComponent<FacetListProps> = ({ selectedFacets, facets }) => {\n const [showFilters, setShowFilters] = useState(true);\n\n const handleShowFilters = () => {\n setShowFilters(!showFilters);\n };\n\n return (\n <div className=\"product-discovery-facet-list\">\n <div className=\"product-discovery-facet-list__show-filters-button\">\n <ActionButton\n onClick={() => {\n handleShowFilters();\n }}\n >\n <Icon source={Burger} size=\"16\" />\n <span>Filters</span>\n </ActionButton>\n </div>\n <VComponent className=\"product-discovery-facet-list__selected-filters\" node={selectedFacets} />\n <VComponent\n className={classes([\n 'product-discovery-facet-list__facet-options',\n ['product-discovery-facet-list__facet-options--hidden', showFilters],\n ])}\n node={facets}\n />\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { SearchFacet } from '@/plp/data/models/api';\nimport { Product } from '@/plp/data/models/product';\nimport { PriceRange } from '@adobe-commerce/elsie/components';\n\nconst BOOLEAN_NO = 'no';\nconst BOOLEAN_YES = 'yes';\n\nconst getRangeFacetFilter = (facet: SearchFacet) => {\n const selectedRange = facet.buckets.find((bucket) => bucket.selected);\n if (!selectedRange) {\n return null;\n }\n return {\n attribute: facet.attribute,\n range: {\n from: selectedRange.from,\n to: selectedRange.to,\n },\n };\n};\n\nconst getScalarFacetFilter = (facet: SearchFacet) => {\n const scalarSelections = facet.buckets.reduce((accu, curr) => {\n if (curr.selected) {\n accu.push(curr.title);\n }\n return accu;\n }, [] as string[]);\n if (scalarSelections.length === 0) {\n return null;\n }\n return {\n attribute: facet.attribute,\n in: scalarSelections,\n };\n};\n\nconst getFilterSelection = (facet: SearchFacet) => {\n switch (facet.buckets[0]?.__typename) {\n case 'RangeBucket':\n return getRangeFacetFilter(facet);\n case 'ScalarBucket':\n case 'CategoryView':\n return getScalarFacetFilter(facet);\n default:\n break;\n }\n};\n\nconst getCurrencyType = (items: Product[]) => {\n const firstItem = items[0];\n if (firstItem?.price?.regular?.amount?.currency) {\n return firstItem.price.regular.amount.currency;\n } else if (firstItem?.priceRange?.minimum?.regular?.amount?.currency) {\n return firstItem?.priceRange?.minimum?.regular?.amount?.currency;\n }\n return 'USD'; // Default currency if not found\n};\n\nconst getRangeBucketLabel = (bucket: any, facet: SearchFacet, currency: string | null) => {\n if (facet?.attribute === 'price') {\n //Temp fix for Price range not handling value when minumum is zero\n if (bucket.from === 0) {\n return (\n <div style={'display:flex'}>\n <PriceRange amount={bucket.from} currency={currency || 'USD'} />\n <span style={'padding: 0 2px'}>{'-'}</span>\n <PriceRange amount={bucket.to} currency={currency || 'USD'} />\n </div>\n );\n }\n return (\n <PriceRange minimumAmount={bucket.from} maximumAmount={bucket.to} currency={currency || 'USD'} display=\"dash\" />\n );\n }\n return bucket.title;\n};\n\nconst getScalarBucketLabel = (bucket: any, facet: SearchFacet) => {\n if (bucket.title === BOOLEAN_NO) {\n return `Not ${facet.title}`;\n } else if (bucket.title === BOOLEAN_YES) {\n return facet.title;\n }\n return bucket.title;\n};\n\nconst getBucketLabel = (bucket: any, facet: SearchFacet, currency: string | null) => {\n switch (bucket.__typename) {\n case 'RangeBucket':\n return getRangeBucketLabel(bucket, facet, currency);\n case 'ScalarBucket':\n case 'CategoryView':\n return getScalarBucketLabel(bucket, facet);\n default:\n break;\n }\n};\n\nexport { getBucketLabel, getCurrencyType, getFilterSelection };\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { HTMLAttributes, useEffect, useState } from 'preact/compat';\nimport { Container, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport { ProductSearchResult, SearchFilter, SearchFacet, SearchVariables, FacetBucket } from '@/plp/data/models/api';\nimport { getBucketLabel, getCurrencyType, getFilterSelection } from './utils/facetUtils';\nimport FacetList from '@/plp/components/FacetList';\nimport { Button, Checkbox, Divider, Icon, RadioButton } from '@adobe-commerce/elsie/components';\nimport { Facet } from '@/plp/components';\nimport { VNode } from 'preact';\nimport { Close } from '@adobe-commerce/elsie/icons';\nimport { events } from '@adobe-commerce/event-bus';\nimport { useText } from '@adobe-commerce/elsie/i18n';\n\nexport interface FacetsProps extends HTMLAttributes<HTMLDivElement> {\n slots?: {\n Facet?: SlotProps<{ data: SearchFacet }>;\n SelectedFacets?: SlotProps<{ data: SearchFacet[] }>;\n Facets?: SlotProps<{ data: SearchFacet[] }>;\n FacetBucket?: SlotProps<{ data: FacetBucket }>;\n FacetBucketLabel?: SlotProps<{ data: FacetBucket }>;\n };\n}\n\nexport const Facets: Container<FacetsProps> = ({ slots }) => {\n const translations = useText({\n clearAll: 'Search.Facet.clearAll',\n });\n\n const [facetList, setFacetList] = useState<SearchFacet[]>([]);\n const [currency, setCurrency] = useState<string | null>(null);\n\n const handleSearchResult = (payload: { result: ProductSearchResult; request: SearchVariables }): void => {\n if (!payload || (!payload.result.facets && !payload.result.items && !payload.request.filter)) {\n setFacetList([]);\n return;\n }\n const { facets, items } = payload.result;\n setCurrency(getCurrencyType(items));\n const filterList = payload.request.filter;\n if (facets) {\n const facetsWithSelections = facets.map((facet: SearchFacet) => {\n const selectedBuckets = facet.buckets.map((bucket) => {\n bucket.selected = false;\n const selectedFilter = filterList?.find((filter) => filter.attribute === facet.attribute);\n if (selectedFilter) {\n const selectedRange = selectedFilter.range;\n if (selectedRange && bucket.from === selectedRange.from && bucket.to === selectedRange.to) {\n bucket.selected = true;\n } else if (selectedFilter.in && selectedFilter.in.includes(bucket.title)) {\n bucket.selected = true;\n }\n }\n return bucket;\n });\n facet.buckets = selectedBuckets;\n return facet;\n });\n setFacetList(facetsWithSelections);\n }\n };\n\n const updateFacetSelections = (facets: SearchFacet[]): void => {\n const updatedFacetList = facetList.map((f) => {\n const newFacet = facets.find((facet) => facet.attribute === f.attribute);\n if (newFacet) {\n return newFacet;\n }\n return f;\n });\n const selectedFilterList = updatedFacetList.reduce((accu: SearchFilter[], facet: SearchFacet) => {\n const selectedFilter = getFilterSelection(facet);\n if (selectedFilter) {\n accu.push(selectedFilter as SearchFilter);\n }\n return accu;\n }, [] as SearchFilter[]);\n setFacetList(updatedFacetList);\n events.emit('search/request', { filter: selectedFilterList });\n };\n\n const handleCancelSelection = (facet: SearchFacet, title: string): void => {\n const newBuckets = facet.buckets.map((bucket) => {\n if (bucket.title === title) {\n bucket.selected = false;\n }\n return bucket;\n });\n const newFacet = facet;\n newFacet.buckets = newBuckets;\n updateFacetSelections([newFacet]);\n };\n\n const clearAllSelections = (): void => {\n const updatedFacetList = facetList.map((facet) => {\n const updatedBuckets = facet.buckets.map((bucket) => {\n bucket.selected = false;\n return bucket;\n });\n facet.buckets = updatedBuckets;\n return facet;\n });\n setFacetList(updatedFacetList);\n events.emit('search/request', { filter: [] });\n };\n\n const changeFilter = (event: any, facet: SearchFacet): void => {\n const newBuckets = facet.buckets.map((bucket) => {\n if (facet.buckets[0]?.__typename === 'RangeBucket') {\n bucket.selected = false;\n }\n if (bucket.title === event.target.value) {\n bucket.selected = event.target.checked;\n }\n return bucket;\n });\n const newFacet = facet;\n newFacet.buckets = newBuckets;\n updateFacetSelections([newFacet]);\n };\n\n const getFacetNode = (facet: SearchFacet): VNode => {\n const header = <span>{facet.title}</span>; \n const buckets = facet.buckets\n .map((bucket: FacetBucket) => {\n const bucketLabel = getBucketLabel(bucket, facet, currency);\n\n const renderedBucketLabel = (count?: number) => (\n <Slot name=\"FacetBucketLabel\" \n slot={slots?.FacetBucketLabel} \n context={{ data: bucket }}>\n {bucketLabel} {count ? `(${count})` : ''}\n </Slot>\n );\n\n switch (facet.buckets[0]?.__typename) {\n case 'RangeBucket':\n return (\n <Slot name=\"FacetBucket\" slot={slots?.FacetBucket} context={{ data: bucket }}>\n <RadioButton\n data-testid={`${bucket.title}-radio`}\n label={renderedBucketLabel()}\n name={facet.attribute}\n value={bucket.title}\n checked={bucket.selected}\n onChange={(event): void => {\n changeFilter(event, facet);\n }}\n />\n </Slot>\n ) as VNode;\n case 'ScalarBucket':\n case 'CategoryView':\n return (\n <Slot name=\"FacetBucket\" slot={slots?.FacetBucket} context={{ data: bucket }}>\n <Checkbox\n data-testid={`${bucket.title}-checkbox`}\n label={renderedBucketLabel(bucket.count)}\n name={facet.attribute}\n value={bucket.title}\n checked={bucket.selected}\n onChange={(event): void => {\n changeFilter(event, facet);\n }}\n />\n </Slot>\n ) as VNode;\n default:\n return null;\n }\n })\n .filter((bucket) => bucket !== null);\n\n return <Facet header={header} buckets={buckets} />\n };\n\n const getFacetsNode = (): VNode => {\n return (\n <Slot name=\"Facets\" slot={slots?.Facets} context={{ data: facetList }}>\n {facetList.map((facet) => {\n return facet.buckets.length > 0\n ? ((\n <>\n <Slot name=\"Facet\" slot={slots?.Facet} context={{ data: facet }}>\n {getFacetNode(facet)}\n </Slot>\n <Divider variant=\"secondary\" />\n </>\n ) as VNode)\n : null;\n })}\n </Slot>\n );\n };\n\n const getSelectedFacetsNode = (): VNode => {\n const selectedFacets = facetList.reduce((accu, curr) => {\n const selected = curr.buckets.filter((bucket: FacetBucket) => bucket.selected);\n if (selected.length > 0) {\n accu.push(curr);\n }\n return accu;\n }, [] as SearchFacet[]);\n const selectedFilterBtns = selectedFacets.map((facet) => {\n return facet.buckets.map((bucket) => {\n if (bucket.selected) {\n const bucketTitle = getBucketLabel(bucket, facet, currency);\n return (\n <Button\n data-testid={`${bucket.title}-selected-btn`}\n aria-label={`Remove ${facet.title} filter: ${bucket.title}`}\n variant=\"secondary\"\n children={\n <>\n <span>{bucketTitle}</span>\n <Icon source={Close} size=\"16\" />\n </>\n }\n onClick={(): void => {\n handleCancelSelection(facet, bucket.title);\n }}\n />\n ) as VNode;\n }\n return null;\n });\n });\n\n const clearAllBtn =\n selectedFilterBtns.length > 0 ? (\n <Button\n variant=\"secondary\"\n onClick={(): void => {\n clearAllSelections();\n }}\n >\n <span>{translations.clearAll}</span>\n </Button>\n ) : null;\n return (\n <Slot name=\"SelectedFacets\" slot={slots?.SelectedFacets} context={{ data: selectedFacets }}>\n {selectedFilterBtns}\n {clearAllBtn}\n </Slot>\n );\n };\n\n useEffect(() => {\n events.on('search/result', handleSearchResult);\n }, []);\n\n return <FacetList selectedFacets={getSelectedFacetsNode()} facets={getFacetsNode()} />;\n};\n"],"names":["SvgAdd","props","React","SvgBurger","SvgClose","SvgMinus","Facet","numberOfOptionsConfig","header","buckets","translations","useText","numberOfOptionsShown","showMore","setShowMore","useState","numberOfOptions","jsx","VComponent","bucket","index","Button","Icon","Add","Minus","FacetList","selectedFacets","facets","showFilters","setShowFilters","handleShowFilters","jsxs","ActionButton","Burger","classes","BOOLEAN_NO","BOOLEAN_YES","getRangeFacetFilter","facet","selectedRange","getScalarFacetFilter","scalarSelections","accu","curr","getFilterSelection","_a","getCurrencyType","items","firstItem","_c","_b","_g","_f","_e","_d","_k","_j","_i","_h","getRangeBucketLabel","currency","PriceRange","getScalarBucketLabel","getBucketLabel","Facets","slots","facetList","setFacetList","setCurrency","handleSearchResult","payload","filterList","facetsWithSelections","selectedBuckets","selectedFilter","filter","updateFacetSelections","updatedFacetList","f","newFacet","selectedFilterList","events","handleCancelSelection","title","newBuckets","clearAllSelections","updatedBuckets","changeFilter","event","getFacetNode","bucketLabel","renderedBucketLabel","count","Slot","RadioButton","Checkbox","getFacetsNode","Fragment","Divider","getSelectedFacetsNode","selectedFilterBtns","bucketTitle","Close","clearAllBtn","useEffect"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
1
+ {"version":3,"file":"Facets.js","sources":["../../node_modules/@adobe-commerce/elsie/src/icons/Add.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Burger.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Close.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Minus.svg","/@dropins/storefront-product-discovery/src/components/Facet/Facet.tsx","/@dropins/storefront-product-discovery/src/components/FacetList/FacetList.tsx","/@dropins/storefront-product-discovery/src/containers/Facets/utils/facetUtils.tsx","/@dropins/storefront-product-discovery/src/containers/Facets/Facets.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgAdd = (props) => /* @__PURE__ */ React.createElement(\"svg\", { id: \"Icon_Add_Base\", \"data-name\": \"Icon \\\\u2013 Add \\\\u2013 Base\", xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { id: \"Large\" }, /* @__PURE__ */ React.createElement(\"rect\", { id: \"Placement_area\", \"data-name\": \"Placement area\", width: 24, height: 24, fill: \"#fff\", opacity: 0 }), /* @__PURE__ */ React.createElement(\"g\", { id: \"Add_icon\", \"data-name\": \"Add icon\", transform: \"translate(9.734 9.737)\" }, /* @__PURE__ */ React.createElement(\"line\", { vectorEffect: \"non-scaling-stroke\", id: \"Line_579\", \"data-name\": \"Line 579\", y2: 12.7, transform: \"translate(2.216 -4.087)\", fill: \"none\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"line\", { vectorEffect: \"non-scaling-stroke\", id: \"Line_580\", \"data-name\": \"Line 580\", x2: 12.7, transform: \"translate(-4.079 2.263)\", fill: \"none\", stroke: \"currentColor\" }))));\nexport default SvgAdd;\n","import * as React from \"react\";\nconst SvgBurger = (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: \"M3 12H21\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M3 6H21\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M3 18H21\", stroke: \"currentColor\" }));\nexport default SvgBurger;\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 * as React from \"react\";\nconst SvgMinus = (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: \"M17.3332 11.75H6.6665\", strokeWidth: 1.5, strokeLinecap: \"square\", strokeLinejoin: \"round\", vectorEffect: \"non-scaling-stroke\", fill: \"none\", stroke: \"currentColor\" }));\nexport default SvgMinus;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes, useState } from 'preact/compat';\nimport '@/plp/components/Facet/Facet.css';\nimport { Button, Icon } from '@adobe-commerce/elsie/components';\nimport { Minus, Add } from '@adobe-commerce/elsie/icons';\nimport { VComponent } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\n\nexport interface FacetProps extends HTMLAttributes<HTMLDivElement> {\n numberOfOptionsConfig?: number;\n header: VNode;\n buckets: VNode[];\n}\n\nexport const Facet: FunctionComponent<FacetProps> = ({ numberOfOptionsConfig = 5, header, buckets }) => {\n const translations = useText({\n showMore: 'Search.Facet.showMore',\n showLess: 'Search.Facet.showLess',\n });\n const numberOfOptionsShown = numberOfOptionsConfig;\n const [showMore, setShowMore] = useState(buckets.length < numberOfOptionsShown);\n\n const numberOfOptions = showMore ? buckets.length : numberOfOptionsShown;\n\n return (\n <div>\n <VComponent className=\"product-discovery-facet__header\" node={header} />\n {buckets.slice(0, numberOfOptions).map((bucket, index) => {\n return <VComponent key={index} className=\"product-discovery-facet__bucket\" node={bucket} />;\n })}\n {!showMore && buckets.length > numberOfOptionsShown && (\n <Button variant=\"tertiary\" icon={<Icon source={Add} size=\"24\" />} onClick={(): void => setShowMore(!showMore)}>\n {translations.showMore}\n </Button>\n )}\n {showMore && buckets.length > numberOfOptionsShown && (\n <Button\n variant=\"tertiary\"\n icon={<Icon source={Minus} size=\"24\" />}\n onClick={(): void => setShowMore(!showMore)}\n >\n {translations.showLess}\n </Button>\n )}\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes, useState } from 'preact/compat';\nimport '@/plp/components/FacetList/FacetList.css';\nimport { ActionButton, Icon } from '@adobe-commerce/elsie/components';\nimport { Burger } from '@adobe-commerce/elsie/icons';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\n\nexport interface FacetListProps extends HTMLAttributes<HTMLDivElement> {\n selectedFacets: VNode;\n facets: VNode;\n}\n\nexport const FacetList: FunctionComponent<FacetListProps> = ({ selectedFacets, facets }) => {\n const [showFilters, setShowFilters] = useState(true);\n\n const handleShowFilters = () => {\n setShowFilters(!showFilters);\n };\n\n return (\n <div className=\"product-discovery-facet-list\">\n <div className=\"product-discovery-facet-list__show-filters-button\">\n <ActionButton\n onClick={() => {\n handleShowFilters();\n }}\n >\n <Icon source={Burger} size=\"16\" />\n <span>Filters</span>\n </ActionButton>\n </div>\n <VComponent className=\"product-discovery-facet-list__selected-filters\" node={selectedFacets} />\n <VComponent\n className={classes([\n 'product-discovery-facet-list__facet-options',\n ['product-discovery-facet-list__facet-options--hidden', showFilters],\n ])}\n node={facets}\n />\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { SearchFacet } from '@/plp/data/models/api';\nimport { Product } from '@/plp/data/models/product';\nimport { PriceRange } from '@adobe-commerce/elsie/components';\n\nconst BOOLEAN_NO = 'no';\nconst BOOLEAN_YES = 'yes';\n\nconst getRangeFacetFilter = (facet: SearchFacet) => {\n const selectedRange = facet.buckets.find((bucket) => bucket.selected);\n if (!selectedRange) {\n return null;\n }\n return {\n attribute: facet.attribute,\n range: {\n from: selectedRange.from,\n to: selectedRange.to,\n },\n };\n};\n\nconst getScalarFacetFilter = (facet: SearchFacet) => {\n const scalarSelections = facet.buckets.reduce((accu, curr) => {\n if (curr.selected) {\n accu.push(curr.title);\n }\n return accu;\n }, [] as string[]);\n if (scalarSelections.length === 0) {\n return null;\n }\n return {\n attribute: facet.attribute,\n in: scalarSelections,\n };\n};\n\nconst getFilterSelection = (facet: SearchFacet) => {\n switch (facet.buckets[0]?.__typename) {\n case 'RangeBucket':\n return getRangeFacetFilter(facet);\n case 'ScalarBucket':\n case 'CategoryView':\n return getScalarFacetFilter(facet);\n default:\n break;\n }\n};\n\nconst getCurrencyType = (items: Product[]) => {\n const firstItem = items[0];\n if (firstItem?.price?.regular?.amount?.currency) {\n return firstItem.price.regular.amount.currency;\n } else if (firstItem?.priceRange?.minimum?.regular?.amount?.currency) {\n return firstItem?.priceRange?.minimum?.regular?.amount?.currency;\n }\n return 'USD'; // Default currency if not found\n};\n\nconst getRangeBucketLabel = (bucket: any, facet: SearchFacet, currency: string | null) => {\n if (facet?.attribute === 'price') {\n //Temp fix for Price range not handling value when minumum is zero\n if (bucket.from === 0) {\n return (\n <div style={'display:flex'}>\n <PriceRange amount={bucket.from} currency={currency || 'USD'} />\n <span style={'padding: 0 2px'}>{'-'}</span>\n <PriceRange amount={bucket.to} currency={currency || 'USD'} />\n </div>\n );\n }\n return (\n <PriceRange minimumAmount={bucket.from} maximumAmount={bucket.to} currency={currency || 'USD'} display=\"dash\" />\n );\n }\n return bucket.title;\n};\n\nconst getScalarBucketLabel = (bucket: any, facet: SearchFacet) => {\n if (bucket.title === BOOLEAN_NO) {\n return `Not ${facet.title}`;\n } else if (bucket.title === BOOLEAN_YES) {\n return facet.title;\n }\n return bucket.title;\n};\n\nconst getBucketLabel = (bucket: any, facet: SearchFacet, currency: string | null) => {\n switch (bucket.__typename) {\n case 'RangeBucket':\n return getRangeBucketLabel(bucket, facet, currency);\n case 'ScalarBucket':\n case 'CategoryView':\n return getScalarBucketLabel(bucket, facet);\n default:\n break;\n }\n};\n\nexport { getBucketLabel, getCurrencyType, getFilterSelection };\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { HTMLAttributes, useEffect, useState } from 'preact/compat';\nimport { Container, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport { ProductSearchResult, SearchFilter, SearchFacet, SearchVariables, FacetBucket, Scope } from '@/plp/data/models/api';\nimport { getBucketLabel, getCurrencyType, getFilterSelection } from './utils/facetUtils';\nimport FacetList from '@/plp/components/FacetList';\nimport { Button, Checkbox, Divider, Icon, RadioButton } from '@adobe-commerce/elsie/components';\nimport { Facet } from '@/plp/components';\nimport { VNode } from 'preact';\nimport { Close } from '@adobe-commerce/elsie/icons';\nimport { events } from '@adobe-commerce/event-bus';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { search } from '@/plp/api';\n\nexport interface FacetsProps extends HTMLAttributes<HTMLDivElement> {\n rootCategory?: string;\n scope?: Scope;\n slots?: {\n Facet?: SlotProps<{ data: SearchFacet }>;\n SelectedFacets?: SlotProps<{ data: SearchFacet[] }>;\n Facets?: SlotProps<{ data: SearchFacet[] }>;\n FacetBucket?: SlotProps<{ data: FacetBucket }>;\n FacetBucketLabel?: SlotProps<{ data: FacetBucket }>;\n };\n}\n\nexport const Facets: Container<FacetsProps> = ({ rootCategory, scope, slots }) => {\n const labels = useText({\n clearAll: 'Search.Facet.clearAll',\n });\n\n const [facetList, setFacetList] = useState<SearchFacet[]>([]);\n const [currency, setCurrency] = useState<string | null>(null);\n const [currentSearchVariables, setCurrentSearchVariables] = useState<SearchVariables>();\n\n const handleSearchRequest = (searchVariables: SearchVariables): void => {\n if (rootCategory) {\n search({ ...searchVariables, filter: [{ attribute: 'categoryPath', eq: rootCategory }, ...(searchVariables.filter || [])] }, { scope });\n } else {\n search(searchVariables, { scope });\n }\n };\n\n const handleSearchResult = (payload: { result: ProductSearchResult; request: SearchVariables }): void => {\n if (!payload || (!payload.result.facets && !payload.result.items && !payload.request.filter)) {\n setFacetList([]);\n return;\n }\n \n setCurrentSearchVariables(payload.request);\n \n const { facets, items } = payload.result;\n \n setCurrency(getCurrencyType(items));\n \n const filterList = payload.request.filter;\n \n if (facets) {\n const facetsWithSelections = facets.map((facet: SearchFacet) => {\n const selectedBuckets = facet.buckets.map((bucket) => {\n bucket.selected = false;\n const selectedFilter = filterList?.find((filter) => filter.attribute === facet.attribute);\n if (selectedFilter) {\n const selectedRange = selectedFilter.range;\n if (selectedRange && bucket.from === selectedRange.from && bucket.to === selectedRange.to) {\n bucket.selected = true;\n } else if (selectedFilter.in && selectedFilter.in.includes(bucket.title)) {\n bucket.selected = true;\n }\n }\n return bucket;\n });\n facet.buckets = selectedBuckets;\n return facet;\n });\n \n setFacetList(facetsWithSelections);\n }\n };\n\n const updateFacetSelections = (facets: SearchFacet[]): void => {\n const updatedFacetList = facetList.map((f) => {\n const newFacet = facets.find((facet) => facet.attribute === f.attribute);\n if (newFacet) {\n return newFacet;\n }\n return f;\n });\n const selectedFilterList = updatedFacetList.reduce((accu: SearchFilter[], facet: SearchFacet) => {\n const selectedFilter = getFilterSelection(facet);\n if (selectedFilter) {\n accu.push(selectedFilter as SearchFilter);\n }\n return accu;\n }, [] as SearchFilter[]);\n setFacetList(updatedFacetList);\n\n if (currentSearchVariables) {\n handleSearchRequest({ ...currentSearchVariables, filter: selectedFilterList });\n }\n };\n\n const handleCancelSelection = (facet: SearchFacet, title: string): void => {\n const newBuckets = facet.buckets.map((bucket) => {\n if (bucket.title === title) {\n bucket.selected = false;\n }\n return bucket;\n });\n const newFacet = facet;\n newFacet.buckets = newBuckets;\n updateFacetSelections([newFacet]);\n };\n\n const clearAllSelections = (): void => {\n const updatedFacetList = facetList.map((facet) => {\n const updatedBuckets = facet.buckets.map((bucket) => {\n bucket.selected = false;\n return bucket;\n });\n facet.buckets = updatedBuckets;\n return facet;\n });\n setFacetList(updatedFacetList);\n if (currentSearchVariables) {\n handleSearchRequest({ ...currentSearchVariables, filter: [] });\n }\n };\n\n const changeFilter = (event: any, facet: SearchFacet): void => {\n const newBuckets = facet.buckets.map((bucket) => {\n if (facet.buckets[0]?.__typename === 'RangeBucket') {\n bucket.selected = false;\n }\n if (bucket.title === event.target.value) {\n bucket.selected = event.target.checked;\n }\n return bucket;\n });\n const newFacet = facet;\n newFacet.buckets = newBuckets;\n updateFacetSelections([newFacet]);\n };\n\n const getFacetNode = (facet: SearchFacet): VNode => {\n const header = <span>{facet.title}</span>; \n const buckets = facet.buckets\n .map((bucket: FacetBucket) => {\n const bucketLabel = getBucketLabel(bucket, facet, currency);\n\n const renderedBucketLabel = (count?: number) => (\n <Slot name=\"FacetBucketLabel\" \n slot={slots?.FacetBucketLabel} \n context={{ data: bucket }}>\n {bucketLabel} {count ? `(${count})` : ''}\n </Slot>\n );\n\n switch (facet.buckets[0]?.__typename) {\n case 'RangeBucket':\n return (\n <Slot name=\"FacetBucket\" slot={slots?.FacetBucket} context={{ data: bucket }}>\n <RadioButton\n data-testid={`${bucket.title}-radio`}\n label={renderedBucketLabel()}\n name={facet.attribute}\n value={bucket.title}\n checked={bucket.selected}\n onChange={(event): void => {\n changeFilter(event, facet);\n }}\n />\n </Slot>\n ) as VNode;\n case 'ScalarBucket':\n case 'CategoryView':\n return (\n <Slot name=\"FacetBucket\" slot={slots?.FacetBucket} context={{ data: bucket }}>\n <Checkbox\n data-testid={`${bucket.title}-checkbox`}\n label={renderedBucketLabel(bucket.count)}\n name={facet.attribute}\n value={bucket.title}\n checked={bucket.selected}\n onChange={(event): void => {\n changeFilter(event, facet);\n }}\n />\n </Slot>\n ) as VNode;\n default:\n return null;\n }\n })\n .filter((bucket) => bucket !== null);\n\n return <Facet header={header} buckets={buckets} />\n };\n\n const getFacetsNode = (): VNode => {\n return (\n <Slot name=\"Facets\" slot={slots?.Facets} context={{ data: facetList }}>\n {facetList.map((facet) => {\n return facet.buckets.length > 0\n ? ((\n <>\n <Slot name=\"Facet\" slot={slots?.Facet} context={{ data: facet }}>\n {getFacetNode(facet)}\n </Slot>\n <Divider variant=\"secondary\" />\n </>\n ) as VNode)\n : null;\n })}\n </Slot>\n );\n };\n\n const getSelectedFacetsNode = (): VNode => {\n const selectedFacets = facetList.reduce((accu, curr) => {\n const selected = curr.buckets.filter((bucket: FacetBucket) => bucket.selected);\n if (selected.length > 0) {\n accu.push(curr);\n }\n return accu;\n }, [] as SearchFacet[]);\n const selectedFilterBtns = selectedFacets.map((facet) => {\n return facet.buckets.map((bucket) => {\n if (bucket.selected) {\n const bucketTitle = getBucketLabel(bucket, facet, currency);\n return (\n <Button\n data-testid={`${bucket.title}-selected-btn`}\n aria-label={`Remove ${facet.title} filter: ${bucket.title}`}\n variant=\"secondary\"\n children={\n <>\n <span>{bucketTitle}</span>\n <Icon source={Close} size=\"16\" />\n </>\n }\n onClick={(): void => {\n handleCancelSelection(facet, bucket.title);\n }}\n />\n ) as VNode;\n }\n return null;\n });\n });\n\n const clearAllBtn =\n selectedFilterBtns.length > 0 ? (\n <Button\n variant=\"secondary\"\n onClick={(): void => {\n clearAllSelections();\n }}\n >\n <span>{labels.clearAll}</span>\n </Button>\n ) : null;\n return (\n <Slot name=\"SelectedFacets\" slot={slots?.SelectedFacets} context={{ data: selectedFacets }}>\n {selectedFilterBtns}\n {clearAllBtn}\n </Slot>\n );\n };\n\n useEffect(() => {\n const dataEvents = events.on('search/result', handleSearchResult, { eager: true, scope });\n\n return () => {\n dataEvents?.off();\n };\n }, []);\n\n return <FacetList selectedFacets={getSelectedFacetsNode()} facets={getFacetsNode()} />;\n};\n"],"names":["SvgAdd","props","React","SvgBurger","SvgClose","SvgMinus","Facet","numberOfOptionsConfig","header","buckets","translations","useText","numberOfOptionsShown","showMore","setShowMore","useState","numberOfOptions","jsx","VComponent","bucket","index","Button","Icon","Add","Minus","FacetList","selectedFacets","facets","showFilters","setShowFilters","handleShowFilters","jsxs","ActionButton","Burger","classes","BOOLEAN_NO","BOOLEAN_YES","getRangeFacetFilter","facet","selectedRange","getScalarFacetFilter","scalarSelections","accu","curr","getFilterSelection","_a","getCurrencyType","items","firstItem","_c","_b","_g","_f","_e","_d","_k","_j","_i","_h","getRangeBucketLabel","currency","PriceRange","getScalarBucketLabel","getBucketLabel","Facets","rootCategory","scope","slots","labels","facetList","setFacetList","setCurrency","currentSearchVariables","setCurrentSearchVariables","handleSearchRequest","searchVariables","search","handleSearchResult","payload","filterList","facetsWithSelections","selectedBuckets","selectedFilter","filter","updateFacetSelections","updatedFacetList","f","newFacet","selectedFilterList","handleCancelSelection","title","newBuckets","clearAllSelections","updatedBuckets","changeFilter","event","getFacetNode","bucketLabel","renderedBucketLabel","count","Slot","RadioButton","Checkbox","getFacetsNode","Fragment","Divider","getSelectedFacetsNode","selectedFilterBtns","bucketTitle","Close","clearAllBtn","useEffect","dataEvents","events"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
@@ -0,0 +1,10 @@
1
+ import { HTMLAttributes } from 'preact/compat';
2
+ import { Container } from '@dropins/tools/types/elsie/src/lib';
3
+ import { Scope } from '../../data/models';
4
+
5
+ export interface PaginationProps extends HTMLAttributes<HTMLDivElement> {
6
+ scope?: Scope;
7
+ onPageChange?: (page: number) => void;
8
+ }
9
+ export declare const Pagination: Container<PaginationProps>;
10
+ //# sourceMappingURL=Pagination.d.ts.map
@@ -6,5 +6,6 @@
6
6
  * file in accordance with the terms of the Adobe license agreement
7
7
  * accompanying it.
8
8
  *******************************************************************/
9
- export declare function getAttributeMetadata(): any;
10
- //# sourceMappingURL=getAttributeMetadata.d.ts.map
9
+ export * from './Pagination';
10
+ export { Pagination as default } from './Pagination';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,3 @@
1
+ export * from './Pagination/index'
2
+ import _default from './Pagination/index'
3
+ export default _default
@@ -0,0 +1,4 @@
1
+ /*! Copyright 2025 Adobe
2
+ All Rights Reserved. */
3
+ import{jsx as S}from"@dropins/tools/preact-jsx-runtime.js";import{useState as s,useEffect as b}from"@dropins/tools/preact-compat.js";import{Pagination as h}from"@dropins/tools/components.js";import{events as x}from"@dropins/tools/event-bus.js";import{d as I}from"../chunks/search.js";import"@dropins/tools/lib.js";import"../fragments.js";import"../chunks/acdlEvents.js";import"@dropins/tools/fetch-graphql.js";const z=({scope:o,onPageChange:r})=>{const[a,f]=s(),[n,l]=s(),[p,g]=s({});b(()=>{const t=x.on("search/result",e=>{var i,u,c,m;g(e.request),f((u=(i=e.result)==null?void 0:i.pageInfo)==null?void 0:u.currentPage),l((m=(c=e.result)==null?void 0:c.pageInfo)==null?void 0:m.totalPages)},{eager:!0,scope:o});return()=>{t==null||t.off()}},[]);const P=async t=>{r==null||r(t),I({...p,currentPage:t},{scope:o})};return!a||!n?null:S(h,{currentPage:a,totalPages:n,onChange:P})};export{z as Pagination,z as default};
4
+ //# sourceMappingURL=Pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pagination.js","sources":["/@dropins/storefront-product-discovery/src/containers/Pagination/Pagination.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 { Pagination as PaginationComponent } from '@adobe-commerce/elsie/components';\nimport { events } from '@adobe-commerce/event-bus';\nimport { Scope, SearchVariables } from '@/plp/data/models';\nimport { search } from '@/plp/api';\n\nexport interface PaginationProps extends HTMLAttributes<HTMLDivElement> {\n scope?: Scope;\n onPageChange?: (page: number) => void;\n }\n \nexport const Pagination: Container<PaginationProps> = ({ scope, onPageChange }) => {\n const [currentPage, setCurrentPage] = useState<number>();\n const [totalPages, setTotalPages] = useState<number>();\n const [currentSearchVariables, setCurrentSearchVariables] = useState<SearchVariables>({});\n\n useEffect(() => {\n const searchEvent = events.on('search/result', (payload) => {\n setCurrentSearchVariables(payload.request);\n setCurrentPage(payload.result?.pageInfo?.currentPage);\n setTotalPages(payload.result?.pageInfo?.totalPages);\n }, { eager: true, scope });\n\n return () => {\n searchEvent?.off();\n };\n }, []);\n\n const handlePageChange = async (page: number): Promise<void> => {\n onPageChange?.(page);\n\n search({ ...currentSearchVariables, currentPage: page }, { scope });\n };\n\n // Don't render if we don't have the variables\n if (!currentPage || !totalPages) {\n return null;\n }\n\n return (\n <PaginationComponent \n currentPage={currentPage}\n totalPages={totalPages}\n onChange={handlePageChange}\n />\n );\n};"],"names":["Pagination","scope","onPageChange","currentPage","setCurrentPage","useState","totalPages","setTotalPages","currentSearchVariables","setCurrentSearchVariables","useEffect","searchEvent","events","payload","_b","_a","_d","_c","handlePageChange","page","search","jsx","PaginationComponent"],"mappings":"0ZAqBO,MAAMA,EAAyC,CAAC,CAAE,MAAAC,EAAO,aAAAC,KAAmB,CACjF,KAAM,CAACC,EAAaC,CAAc,EAAIC,EAAA,EAChC,CAACC,EAAYC,CAAa,EAAIF,EAAA,EAC9B,CAACG,EAAwBC,CAAyB,EAAIJ,EAA0B,CAAA,CAAE,EAExFK,EAAU,IAAM,CACd,MAAMC,EAAcC,EAAO,GAAG,gBAAkBC,GAAY,aAC1DJ,EAA0BI,EAAQ,OAAO,EACzCT,GAAeU,GAAAC,EAAAF,EAAQ,SAAR,YAAAE,EAAgB,WAAhB,YAAAD,EAA0B,WAAW,EACpDP,GAAcS,GAAAC,EAAAJ,EAAQ,SAAR,YAAAI,EAAgB,WAAhB,YAAAD,EAA0B,UAAU,CACpD,EAAG,CAAE,MAAO,GAAM,MAAAf,EAAO,EAEzB,MAAO,IAAM,CACXU,GAAA,MAAAA,EAAa,KACf,CACF,EAAG,CAAA,CAAE,EAEL,MAAMO,EAAmB,MAAOC,GAAgC,CAC9DjB,GAAA,MAAAA,EAAeiB,GAEfC,EAAO,CAAE,GAAGZ,EAAwB,YAAaW,GAAQ,CAAE,MAAAlB,EAAO,CACpE,EAGA,MAAI,CAACE,GAAe,CAACG,EACZ,KAIPe,EAACC,EAAA,CACC,YAAAnB,EACA,WAAAG,EACA,SAAUY,CAAA,CAAA,CAGhB"}
@@ -0,0 +1,41 @@
1
+ import { HTMLAttributes } from 'preact/compat';
2
+ import { Container, SlotProps } from '@dropins/tools/types/elsie/src/lib';
3
+ import { ImageProps } from '@dropins/tools/types/elsie/src/components';
4
+ import { Scope, SearchVariables } from '../../data/models';
5
+ import { Product } from '../../data/models/product';
6
+
7
+ type SlotDefaultContext = {
8
+ product: Product;
9
+ variables: SearchVariables | null;
10
+ };
11
+ export interface SearchResultsProps extends HTMLAttributes<HTMLDivElement> {
12
+ routeProduct?: (product: Product) => string;
13
+ scope?: Scope;
14
+ imageWidth?: number;
15
+ imageHeight?: number;
16
+ skeletonCount?: number;
17
+ onSearchResult?: (payload: Product[]) => void;
18
+ slots?: {
19
+ ProductActions?: SlotProps<SlotDefaultContext>;
20
+ ProductPrice?: SlotProps<SlotDefaultContext>;
21
+ ProductName?: SlotProps<SlotDefaultContext>;
22
+ ProductImage?: SlotProps<SlotDefaultContext & {
23
+ defaultImageProps: ImageProps;
24
+ }>;
25
+ NoResults?: SlotProps<{
26
+ error: string | null;
27
+ variables: SearchVariables | null;
28
+ }>;
29
+ Header?: SlotProps<{
30
+ products: Product[];
31
+ variables: SearchVariables | null;
32
+ }>;
33
+ Footer?: SlotProps<{
34
+ products: Product[];
35
+ variables: SearchVariables | null;
36
+ }>;
37
+ };
38
+ }
39
+ export declare const SearchResults: Container<SearchResultsProps>;
40
+ export {};
41
+ //# sourceMappingURL=SearchResults.d.ts.map
@@ -6,6 +6,6 @@
6
6
  * file in accordance with the terms of the Adobe license agreement
7
7
  * accompanying it.
8
8
  *******************************************************************/
9
- export * from './ProductItem';
10
- export { ProductItem as default } from './ProductItem';
9
+ export * from './SearchResults';
10
+ export { SearchResults as default } from './SearchResults';
11
11
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,3 @@
1
+ export * from './SearchResults/index'
2
+ import _default from './SearchResults/index'
3
+ export default _default
@@ -0,0 +1,4 @@
1
+ /*! Copyright 2025 Adobe
2
+ All Rights Reserved. */
3
+ import{jsxs as Z,jsx as n}from"@dropins/tools/preact-jsx-runtime.js";import*as d from"@dropins/tools/preact-compat.js";import{useState as v,useEffect as q}from"@dropins/tools/preact-compat.js";import{VComponent as W,classes as G,Slot as g}from"@dropins/tools/lib.js";import{events as y}from"@dropins/tools/event-bus.js";import{InLineAlert as J,Icon as K,ProductItemCard as L,PriceRange as S,Image as Q}from"@dropins/tools/components.js";/* empty css */import{s as X,c as Y,a as $,S as ee,P as re}from"../chunks/acdlEvents.js";import{useText as ne}from"@dropins/tools/i18n.js";const E=a=>new DOMParser().parseFromString(a,"text/html").documentElement.textContent,R=({productList:a,header:o,footer:r,imageWidth:h,imageHeight:f})=>Z("div",{className:"product-discovery-product-list",style:{"--imageWidth":h,"--imageHeight":f},children:[o&&n("div",{className:"product-discovery-product-list__header",children:o}),n("div",{className:"product-discovery-product-list__grid",children:a&&n(W,{node:a})}),r&&n("div",{className:"product-discovery-product-list__footer",children:r})]}),te=a=>d.createElement("svg",{id:"Icon_Warning_Base",width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...a},d.createElement("g",{clipPath:"url(#clip0_841_1324)"},d.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M11.9949 2.30237L0.802734 21.6977H23.1977L11.9949 2.30237Z",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"}),d.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M12.4336 10.5504L12.3373 14.4766H11.6632L11.5669 10.5504V9.51273H12.4336V10.5504ZM11.5883 18.2636V17.2687H12.4229V18.2636H11.5883Z",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"})),d.createElement("defs",null,d.createElement("clipPath",{id:"clip0_841_1324"},d.createElement("rect",{width:24,height:21,fill:"white",transform:"translate(0 1.5)"})))),ae=({alertMessage:a=""})=>n("div",{className:G(["product-discovery-search-alert-message__wrapper"]),children:n("div",{className:"product-discovery-search-alert-message__content",children:n(J,{heading:a,type:"warning",icon:n(K,{source:te,size:"24"}),onDismiss:void 0})})}),he=({routeProduct:a,scope:o,slots:r,imageWidth:h=400,imageHeight:f=450,skeletonCount:A=8,onSearchResult:_})=>{const x=o==="popover"?ee:re,I=ne({noResults:"Search.PLP.Warning.noResults",searchError:"Search.PLP.Warning.searchError"}),[u,V]=v(null),[k,H]=v([]),[D,M]=v(!1),[P,N]=v(null);q(()=>{const e=y.on("search/loading",M,{eager:!0,scope:o}),t=y.on("search/error",()=>{N(I.searchError)},{eager:!0,scope:o}),i=y.on("search/result",c=>{var m,s,l;N(((m=c.result)==null?void 0:m.items.length)<1?I.noResults:null),V(c.request),H((s=c.result)==null?void 0:s.items),_==null||_((l=c.result)==null?void 0:l.items),c.request.phrase?X(x):Y(x)},{eager:!0,scope:o});return()=>{e==null||e.off(),t==null||t.off(),i==null||i.off()}},[]);const w=e=>{$(e.sku,x)},b=(e,t)=>{var s,l,p,C;const i={loading:t<8?"eager":"lazy",src:((l=(s=e.images)==null?void 0:s[0])==null?void 0:l.url)||"",alt:((C=(p=e.images)==null?void 0:p[0])==null?void 0:C.label)||"",width:h,height:f,params:{width:h}},c=e.name!==null?E(e.name):e.sku,m=n(Q,{class:"product-discovery-product-item__image",...i,"aria-label":c});return n(g,{name:"ProductImage",slot:r==null?void 0:r.ProductImage,context:{product:e,defaultImageProps:i,variables:u},children:a?n("a",{href:a(e),onClick:()=>w(e),children:m}):m})},j=e=>{const t=e.name!==null?E(e.name):"";return n(g,{name:"ProductName",slot:r==null?void 0:r.ProductName,context:{product:e,variables:u},children:a?n("a",{href:a(e),onClick:()=>w(e),children:t}):t})},z=e=>{var c,m,s,l,p;let t=e.typename==="ComplexProductView"?(c=e.priceRange)==null?void 0:c.minimum.regular.amount.currency:(m=e.price)==null?void 0:m.regular.amount.currency;Intl.supportedValuesOf("currency").indexOf(t||"")===-1&&(t="USD");const i=e.typename==="ComplexProductView"?n(S,{display:"from to",minimumAmount:(s=e.priceRange)==null?void 0:s.minimum.regular.amount.value,maximumAmount:(l=e.priceRange)==null?void 0:l.maximum.regular.amount.value,currency:t}):n(S,{amount:(p=e.price)==null?void 0:p.regular.amount.value,currency:t});return n(g,{name:"ProductPrice",slot:r==null?void 0:r.ProductPrice,context:{product:e,variables:u},children:a?n("a",{href:a(e),onClick:()=>w(e),children:i}):i})},F=e=>n(g,{name:"ProductActions",slot:r==null?void 0:r.ProductActions,context:{product:e,variables:u}}),U=()=>n(g,{name:"NoResults",slot:r==null?void 0:r.NoResults,context:{error:P,variables:u},children:P&&n(ae,{alertMessage:P})}),B=()=>n(R,{imageWidth:h,imageHeight:f,productList:Array.from({length:A}).map((e,t)=>n(L,{initialized:!1},t))}),O=()=>n(g,{name:"Header",slot:r==null?void 0:r.Header,context:{products:k,variables:u}}),T=()=>n(g,{name:"Footer",slot:r==null?void 0:r.Footer,context:{products:k,variables:u}});return n("div",{children:D?B():P?U():n(R,{header:O(),footer:T(),imageWidth:h,imageHeight:f,productList:k.map((e,t)=>n(L,{image:b(e,t),titleNode:j(e),price:z(e),actionButton:r!=null&&r.ProductActions?F(e):void 0,initialized:!0},e.id||e.sku||t))})})};export{he as SearchResults,he as default};
4
+ //# sourceMappingURL=SearchResults.js.map