@dropins/storefront-product-discovery 1.0.1 → 1.0.2-alpha5

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.
@@ -0,0 +1,2 @@
1
+ export { Facet, ProductView } from './graphql/fragments.graphql';
2
+ //# sourceMappingURL=fragments.d.ts.map
@@ -8,6 +8,5 @@
8
8
  *******************************************************************/
9
9
  declare const Facet = "\n fragment Facet on Aggregation {\n title\n attribute\n buckets {\n title\n __typename\n ... on CategoryView {\n name\n count\n path\n }\n ... on ScalarBucket {\n count\n }\n ... on RangeBucket {\n from\n to\n count\n }\n ... on StatsBucket {\n min\n max\n }\n }\n }\n";
10
10
  declare const ProductView = "\n fragment ProductView on ProductSearchItem {\n productView {\n __typename\n sku\n name\n inStock\n url\n urlKey\n images {\n label\n url\n roles\n }\n ... on ComplexProductView {\n priceRange {\n maximum {\n final {\n amount {\n value\n currency\n }\n }\n regular {\n amount {\n value\n currency\n }\n }\n }\n minimum {\n final {\n amount {\n value\n currency\n }\n }\n regular {\n amount {\n value\n currency\n }\n }\n }\n }\n options {\n id\n title\n values {\n title\n ... on ProductViewOptionValueSwatch {\n id\n inStock\n type\n value\n }\n }\n }\n }\n ... on SimpleProductView {\n price {\n final {\n amount {\n value\n currency\n }\n }\n regular {\n amount {\n value\n currency\n }\n }\n }\n }\n }\n highlights {\n attribute\n value\n matched_words\n }\n }\n";
11
- declare const Product = "\n fragment Product on ProductSearchItem {\n product {\n __typename\n sku\n description {\n html\n }\n short_description {\n html\n }\n name\n canonical_url\n small_image {\n url\n }\n image {\n url\n }\n thumbnail {\n url\n }\n price_range {\n minimum_price {\n fixed_product_taxes {\n amount {\n value\n currency\n }\n label\n }\n regular_price {\n value\n currency\n }\n final_price {\n value\n currency\n }\n discount {\n percent_off\n amount_off\n }\n }\n maximum_price {\n fixed_product_taxes {\n amount {\n value\n currency\n }\n label\n }\n regular_price {\n value\n currency\n }\n final_price {\n value\n currency\n }\n discount {\n percent_off\n amount_off\n }\n }\n }\n }\n }\n";
12
- export { Facet, Product, ProductView };
11
+ export { Facet, ProductView };
13
12
  //# sourceMappingURL=fragments.graphql.d.ts.map
@@ -1,8 +1,12 @@
1
- import { Initializer } from '@dropins/tools/types/elsie/src/lib';
1
+ import { Initializer, Model } from '@dropins/tools/types/elsie/src/lib';
2
2
  import { Lang } from '@dropins/tools/types/elsie/src/i18n';
3
+ import { Product } from '../../data/models/product';
3
4
 
4
5
  type ConfigProps = {
5
6
  langDefinitions?: Lang;
7
+ models?: {
8
+ Product?: Model<Product>;
9
+ };
6
10
  };
7
11
  export declare const initialize: Initializer<ConfigProps>;
8
12
  export declare const config: import('@dropins/tools/types/elsie/src/lib').Config<ConfigProps>;
package/api.js CHANGED
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{a as h}from"./chunks/attributeMetadata.js";import{f as d,g,p as m,r as u,s as G,a as Q,b as x}from"./chunks/productSearch.js";import{Initializer as o}from"@dropins/tools/lib.js";import{events as r}from"@dropins/tools/event-bus.js";import"@dropins/tools/fetch-graphql.js";const e=new o({init:async t=>{const a={};e.config.setConfig({...a,...t})},listeners:()=>[r.on("authenticated",t=>{console.log("authenticated",t)})]}),c=e.config;export{h as attributeMetadata,c as config,d as fetchGraphQl,g as getConfig,e as initialize,m as productSearch,u as removeFetchGraphQlHeader,G as setEndpoint,Q as setFetchGraphQlHeader,x as setFetchGraphQlHeaders};
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};
4
4
  //# sourceMappingURL=api.js.map
package/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sources":["/@dropins/storefront-product-discovery/src/api/initialize/initialize.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 } from '@adobe-commerce/elsie/lib';\nimport { Lang } from '@adobe-commerce/elsie/i18n';\nimport { events } from '@adobe-commerce/event-bus';\n\ntype ConfigProps = {\n langDefinitions?: Lang;\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 events.on('authenticated', (authenticated) => {\n console.log('authenticated', authenticated);\n }),\n ],\n});\n\nexport const config = initialize.config;\n"],"names":["initialize","Initializer","config","defaultConfig","events","authenticated"],"mappings":"sRAiBO,MAAMA,EAAa,IAAIC,EAAyB,CACrD,KAAM,MAAOC,GAAW,CACtB,MAAMC,EAAgB,CAAA,EAEtBH,EAAW,OAAO,UAAU,CAAE,GAAGG,EAAe,GAAGD,EAAQ,CAAA,EAG7D,UAAW,IAAM,CACfE,EAAO,GAAG,gBAAkBC,GAAkB,CAC5C,QAAQ,IAAI,gBAAiBA,CAAa,CAAA,CAC3C,CAAA,CAEL,CAAC,EAEYH,EAASF,EAAW"}
1
+ {"version":3,"file":"api.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- const f="searchInputContext",R="searchResultsContext",L="livesearch-plp",U="livesearch-popover",C="search-product-click",_="search-request-sent",l="search-response-received",T="search-results-view",y="category-results-view";function g(){return window.adobeDataLayer=window.adobeDataLayer||[],window.adobeDataLayer}function h(s){const a=g();return a.getState?a.getState(s):{}}function I(s,a){const n=g();n.push({[s]:null}),n.push({[s]:a})}function S(s,a){g().push(c=>{const t=c.getState?c.getState():{};c.push({event:s,eventInfo:{...t,...a}})})}const v=s=>{S(_,{searchUnitId:s})},P=s=>{S(l,{searchUnitId:s})},w=s=>{S(y,{searchUnitId:s})},x=s=>{S(T,{searchUnitId:s})},A=(s,a)=>{S(C,{sku:s,searchUnitId:a})},N=(s,a,n,c,t,o,r)=>{if(!g)return;const e=h(f)||{};e!=null&&e.units||(e.units=[]);const u={searchUnitId:s,searchRequestId:a,queryTypes:["products","suggestions"],phrase:n,pageSize:t,currentPage:o,filter:c,sort:r},d=e.units.findIndex(E=>E.searchUnitId===s);d<0?e.units.push(u):e.units[d]=u,I(f,e)},k=(s,a,n)=>{var p,e;if(!g)return;const t=h(R)||{};t!=null&&t.units||(t.units=[]);const o=t.units.findIndex(u=>u.searchUnitId===s),r={searchUnitId:s,searchRequestId:a,products:b(n.items),categories:[],suggestions:i(n.suggestions),page:((p=n==null?void 0:n.pageInfo)==null?void 0:p.currentPage)||1,perPage:((e=n==null?void 0:n.pageInfo)==null?void 0:e.pageSize)||20,facets:D(n.facets)};o<0?t.units.push(r):t.units[o]=r,I(R,t)},b=s=>s?s.map((n,c)=>{var t,o,r,p,e,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:((t=n==null?void 0:n.images[0])==null?void 0:t.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=(e=n==null?void 0:n.priceRange)==null?void 0:e.minimum)==null?void 0:u.regular)==null?void 0:d.amount)==null?void 0:E.value),rank:c}}):[],i=s=>s?s.map((n,c)=>({suggestion:n,rank:c})):[],D=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{L as P,U as S,v as a,k as b,P as c,x as d,w as e,A as s,N 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,v as a,V as b,P as c,k as d,A as e,H as s,O as u};
4
4
  //# sourceMappingURL=acdlEvents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"acdlEvents.js","sources":["/@dropins/storefront-product-discovery/src/utils/acdlEvents.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 { ProductSearchResponse } from '@/plp/data/models/api';\nimport {\n SearchFilter,\n SearchInput,\n SearchInputUnit,\n SearchSort,\n SearchResults,\n SearchResultUnit,\n SearchResultSuggestion,\n SearchFacetContext,\n SearchBucket,\n SearchResultProduct,\n} from '@/plp/data/models/acdl';\n\nconst SEARCH_INPUT_CONTEXT = 'searchInputContext';\nconst SEARCH_RESULTS_CONTEXT = 'searchResultsContext';\nconst PLP_UNIT_ID = 'livesearch-plp';\nconst SEARCH_UNIT_ID = 'livesearch-popover';\n//const SEARCH_CATEGORY_CLICK = 'search-category-click';\nconst SEARCH_PRODUCT_CLICK = 'search-product-click';\nconst SEARCH_REQUEST_SENT = 'search-request-sent';\nconst SEARCH_RESPONSE_RECEIVED = 'search-response-received';\nconst SEARCH_RESULTS_VIEW = 'search-results-view';\nconst CATEGORY_RESULTS_VIEW = 'category-results-view';\n\nfunction getAdobeDataLayer() {\n // @ts-ignore\n window.adobeDataLayer = window.adobeDataLayer || [];\n // @ts-ignore\n return window.adobeDataLayer;\n}\n\n// Get a context from ACDL\nfunction getContext<T>(name?: string): T {\n const adobeDataLayer = getAdobeDataLayer();\n return adobeDataLayer.getState ? adobeDataLayer.getState(name) : ({} as T);\n}\n\nfunction setContext(name: string, data: any) {\n const adobeDataLayer = getAdobeDataLayer();\n\n // Clear existing context\n adobeDataLayer.push({\n [name]: null,\n });\n\n // Set new context\n adobeDataLayer.push({\n [name]: data,\n });\n}\n\nfunction pushEvent(event: string, additionalContext?: any) {\n const adobeDataLayer = getAdobeDataLayer();\n\n adobeDataLayer.push((acdl: any) => {\n const state = acdl.getState ? acdl.getState() : {};\n\n acdl.push({\n event,\n eventInfo: {\n ...state,\n ...additionalContext,\n },\n });\n });\n}\n\nconst searchRequestSent = (searchUnitId: string) => {\n pushEvent(SEARCH_REQUEST_SENT, { searchUnitId });\n};\n\nconst searchResponseReceived = (searchUnitId: string) => {\n pushEvent(SEARCH_RESPONSE_RECEIVED, { searchUnitId });\n};\n\nconst categoryResultsView = (searchUnitId: string) => {\n pushEvent(CATEGORY_RESULTS_VIEW, { searchUnitId });\n};\n\nconst searchResultsView = (searchUnitId: string) => {\n pushEvent(SEARCH_RESULTS_VIEW, { searchUnitId });\n};\n\nconst searchProductClick = (sku: string, searchUnitId: string) => {\n pushEvent(SEARCH_PRODUCT_CLICK, { sku, searchUnitId });\n};\n\nconst updateSearchInputCtx = (\n searchUnitId: string,\n searchRequestId: string,\n phrase: string,\n filters: Array<SearchFilter>,\n pageSize: number,\n currentPage: number,\n sort: Array<SearchSort>,\n): void => {\n const acdl = getAdobeDataLayer;\n if (!acdl) {\n // don't break search if events are broken/not loading\n return;\n }\n\n const searchInputCtx: SearchInput = getContext(SEARCH_INPUT_CONTEXT) || {};\n if (!searchInputCtx?.units) {\n searchInputCtx.units = [];\n }\n\n // create search input unit\n const searchInputUnit: SearchInputUnit = {\n searchUnitId,\n searchRequestId,\n queryTypes: ['products', 'suggestions'],\n phrase,\n pageSize,\n currentPage,\n filter: filters,\n sort,\n };\n\n // find search input unit index\n const searchInputUnitIndex = searchInputCtx.units.findIndex((unit) => unit.searchUnitId === searchUnitId);\n\n // update search input unit\n if (searchInputUnitIndex < 0) {\n searchInputCtx.units.push(searchInputUnit);\n } else {\n searchInputCtx.units[searchInputUnitIndex] = searchInputUnit;\n }\n\n setContext(SEARCH_INPUT_CONTEXT, searchInputCtx);\n};\n\nconst updateSearchResultsCtx = (\n searchUnitId: string,\n searchRequestId: string,\n results: ProductSearchResponse['productSearch'],\n): void => {\n const acdl = getAdobeDataLayer;\n if (!acdl) {\n // don't break search if events are broken/not loading\n return;\n }\n const searchResultsCtx: SearchResults = getContext(SEARCH_RESULTS_CONTEXT) || {};\n if (!searchResultsCtx?.units) {\n searchResultsCtx.units = [];\n }\n\n // find search result unit index\n const searchResultUnitIndex = searchResultsCtx.units.findIndex((unit) => unit.searchUnitId === searchUnitId);\n\n // create search result unit\n const searchResultUnit: SearchResultUnit = {\n searchUnitId,\n searchRequestId,\n products: createProducts(results.items),\n categories: [],\n suggestions: createSuggestions(results.suggestions),\n page: results?.pageInfo?.currentPage || 1,\n perPage: results?.pageInfo?.pageSize || 20,\n facets: createFacets(results.facets as SearchFacetContext[]),\n };\n\n // update search result unit\n if (searchResultUnitIndex < 0) {\n searchResultsCtx.units.push(searchResultUnit);\n } else {\n searchResultsCtx.units[searchResultUnitIndex] = searchResultUnit;\n }\n\n setContext(SEARCH_RESULTS_CONTEXT, searchResultsCtx);\n};\n\nconst createProducts = (items: ProductSearchResponse['productSearch']['items']): SearchResultProduct[] => {\n if (!items) {\n return [];\n }\n\n const products: SearchResultProduct[] = items.map((item, index) => ({\n name: item?.name,\n sku: item?.sku,\n url: item?.url ?? '',\n imageUrl: item?.images[0]?.url ?? '',\n price: item?.price?.final?.amount?.value ?? item?.priceRange?.minimum?.regular?.amount?.value,\n rank: index,\n }));\n\n return products;\n};\n\nconst createSuggestions = (items: ProductSearchResponse['productSearch']['suggestions']): SearchResultSuggestion[] => {\n if (!items) {\n return [];\n }\n\n const suggestions: SearchResultSuggestion[] = items.map((suggestion, index) => ({\n suggestion,\n rank: index,\n }));\n\n return suggestions;\n};\n\nconst createFacets = (items: SearchFacetContext[]): SearchFacetContext[] => {\n if (!items) {\n return [];\n }\n\n const facets = items.map<SearchFacetContext>((item) => ({\n attribute: item?.attribute,\n title: item?.title,\n type: item?.type || 'PINNED',\n buckets: item?.buckets.map<SearchBucket>((bucket: any) => bucket),\n }));\n\n return facets;\n};\n\nexport {\n searchRequestSent,\n searchResponseReceived,\n categoryResultsView,\n searchResultsView,\n searchProductClick,\n updateSearchInputCtx,\n updateSearchResultsCtx,\n PLP_UNIT_ID,\n SEARCH_UNIT_ID,\n};\n"],"names":["SEARCH_INPUT_CONTEXT","SEARCH_RESULTS_CONTEXT","PLP_UNIT_ID","SEARCH_UNIT_ID","SEARCH_PRODUCT_CLICK","SEARCH_REQUEST_SENT","SEARCH_RESPONSE_RECEIVED","SEARCH_RESULTS_VIEW","CATEGORY_RESULTS_VIEW","getAdobeDataLayer","getContext","name","adobeDataLayer","setContext","data","pushEvent","event","additionalContext","acdl","state","searchRequestSent","searchUnitId","searchResponseReceived","categoryResultsView","searchResultsView","searchProductClick","sku","updateSearchInputCtx","searchRequestId","phrase","filters","pageSize","currentPage","sort","searchInputCtx","searchInputUnit","searchInputUnitIndex","unit","updateSearchResultsCtx","results","_a","_b","searchResultsCtx","searchResultUnitIndex","searchResultUnit","createProducts","createSuggestions","createFacets","items","item","index","_c","_d","_e","_f","_g","_h","suggestion","bucket"],"mappings":"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"}
1
+ {"version":3,"file":"acdlEvents.js","sources":["/@dropins/storefront-product-discovery/src/utils/acdlEvents.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 { ProductSearchResponse } from '@/plp/data/models/api';\nimport {\n SearchFilter,\n SearchInput,\n SearchInputUnit,\n SearchSort,\n SearchResults,\n SearchResultUnit,\n SearchResultSuggestion,\n SearchFacetContext,\n SearchBucket,\n SearchResultProduct,\n} from '@/plp/data/models/acdl';\n\nconst SEARCH_INPUT_CONTEXT = 'searchInputContext';\nconst SEARCH_RESULTS_CONTEXT = 'searchResultsContext';\nconst PLP_UNIT_ID = 'livesearch-plp';\nconst SEARCH_UNIT_ID = 'livesearch-popover';\n//const SEARCH_CATEGORY_CLICK = 'search-category-click';\nconst SEARCH_PRODUCT_CLICK = 'search-product-click';\nconst SEARCH_REQUEST_SENT = 'search-request-sent';\nconst SEARCH_RESPONSE_RECEIVED = 'search-response-received';\nconst SEARCH_RESULTS_VIEW = 'search-results-view';\nconst CATEGORY_RESULTS_VIEW = 'category-results-view';\nconst CHANNEL_CONTEXT = 'channelContext';\n\nfunction getAdobeDataLayer() {\n // @ts-ignore\n window.adobeDataLayer = window.adobeDataLayer || [];\n // @ts-ignore\n return window.adobeDataLayer;\n}\n\n// Get a context from ACDL\nfunction getContext<T>(name?: string): T {\n const adobeDataLayer = getAdobeDataLayer();\n return adobeDataLayer.getState ? adobeDataLayer.getState(name) : ({} as T);\n}\n\nfunction setContext(name: string, data: any) {\n const adobeDataLayer = getAdobeDataLayer();\n\n // Clear existing context\n adobeDataLayer.push({\n [name]: null,\n });\n\n // Set new context\n adobeDataLayer.push({\n [name]: data,\n });\n}\n\nfunction getChannelContext() {\n return {\n _id: \"https://ns.adobe.com/xdm/channels/web\",\n _type: \"https://ns.adobe.com/xdm/channel-types/web\",\n };\n}\n\nfunction setChannelContext() {\n setContext(CHANNEL_CONTEXT, getChannelContext());\n}\n\nfunction pushEvent(event: string, additionalContext?: any) {\n const adobeDataLayer = getAdobeDataLayer();\n\n adobeDataLayer.push((acdl: any) => {\n const state = acdl.getState ? acdl.getState() : {};\n\n acdl.push({\n event,\n eventInfo: {\n ...state,\n ...additionalContext,\n },\n });\n });\n}\n\nconst searchRequestSent = (searchUnitId: string) => {\n setChannelContext();\n pushEvent(SEARCH_REQUEST_SENT, { searchUnitId });\n};\n\nconst searchResponseReceived = (searchUnitId: string) => {\n setChannelContext();\n pushEvent(SEARCH_RESPONSE_RECEIVED, { searchUnitId });\n};\n\nconst categoryResultsView = (searchUnitId: string) => {\n pushEvent(CATEGORY_RESULTS_VIEW, { searchUnitId });\n};\n\nconst searchResultsView = (searchUnitId: string) => {\n pushEvent(SEARCH_RESULTS_VIEW, { searchUnitId });\n};\n\nconst searchProductClick = (sku: string, searchUnitId: string) => {\n pushEvent(SEARCH_PRODUCT_CLICK, { sku, searchUnitId });\n};\n\nconst updateSearchInputCtx = (\n searchUnitId: string,\n searchRequestId: string,\n phrase: string,\n filters: Array<SearchFilter>,\n pageSize: number,\n currentPage: number,\n sort: Array<SearchSort>,\n): void => {\n const acdl = getAdobeDataLayer;\n if (!acdl) {\n // don't break search if events are broken/not loading\n return;\n }\n\n const searchInputCtx: SearchInput = getContext(SEARCH_INPUT_CONTEXT) || {};\n if (!searchInputCtx?.units) {\n searchInputCtx.units = [];\n }\n\n // create search input unit\n const searchInputUnit: SearchInputUnit = {\n searchUnitId,\n searchRequestId,\n queryTypes: ['products', 'suggestions'],\n phrase,\n pageSize,\n currentPage,\n filter: filters,\n sort,\n };\n\n // find search input unit index\n const searchInputUnitIndex = searchInputCtx.units.findIndex((unit) => unit.searchUnitId === searchUnitId);\n\n // update search input unit\n if (searchInputUnitIndex < 0) {\n searchInputCtx.units.push(searchInputUnit);\n } else {\n searchInputCtx.units[searchInputUnitIndex] = searchInputUnit;\n }\n\n setContext(SEARCH_INPUT_CONTEXT, searchInputCtx);\n};\n\nconst updateSearchResultsCtx = (\n searchUnitId: string,\n searchRequestId: string,\n results: ProductSearchResponse['productSearch'],\n): void => {\n const acdl = getAdobeDataLayer;\n if (!acdl) {\n // don't break search if events are broken/not loading\n return;\n }\n const searchResultsCtx: SearchResults = getContext(SEARCH_RESULTS_CONTEXT) || {};\n if (!searchResultsCtx?.units) {\n searchResultsCtx.units = [];\n }\n\n // find search result unit index\n const searchResultUnitIndex = searchResultsCtx.units.findIndex((unit) => unit.searchUnitId === searchUnitId);\n\n // create search result unit\n const searchResultUnit: SearchResultUnit = {\n searchUnitId,\n searchRequestId,\n products: createProducts(results.items),\n categories: [],\n suggestions: createSuggestions(results.suggestions),\n page: results?.pageInfo?.currentPage || 1,\n perPage: results?.pageInfo?.pageSize || 20,\n facets: createFacets(results.facets as SearchFacetContext[]),\n };\n\n // update search result unit\n if (searchResultUnitIndex < 0) {\n searchResultsCtx.units.push(searchResultUnit);\n } else {\n searchResultsCtx.units[searchResultUnitIndex] = searchResultUnit;\n }\n\n setContext(SEARCH_RESULTS_CONTEXT, searchResultsCtx);\n};\n\nconst createProducts = (items: ProductSearchResponse['productSearch']['items']): SearchResultProduct[] => {\n if (!items) {\n return [];\n }\n\n const products: SearchResultProduct[] = items.map((item, index) => ({\n name: item?.name,\n sku: item?.sku,\n url: item?.url ?? '',\n imageUrl: item?.images[0]?.url ?? '',\n price: item?.price?.final?.amount?.value ?? item?.priceRange?.minimum?.regular?.amount?.value,\n rank: index,\n }));\n\n return products;\n};\n\nconst createSuggestions = (items: ProductSearchResponse['productSearch']['suggestions']): SearchResultSuggestion[] => {\n if (!items) {\n return [];\n }\n\n const suggestions: SearchResultSuggestion[] = items.map((suggestion, index) => ({\n suggestion,\n rank: index,\n }));\n\n return suggestions;\n};\n\nconst createFacets = (items: SearchFacetContext[]): SearchFacetContext[] => {\n if (!items) {\n return [];\n }\n\n const facets = items.map<SearchFacetContext>((item) => ({\n attribute: item?.attribute,\n title: item?.title,\n type: item?.type || 'PINNED',\n buckets: item?.buckets.map<SearchBucket>((bucket: any) => bucket),\n }));\n\n return facets;\n};\n\nexport {\n searchRequestSent,\n searchResponseReceived,\n categoryResultsView,\n searchResultsView,\n searchProductClick,\n updateSearchInputCtx,\n updateSearchResultsCtx,\n PLP_UNIT_ID,\n SEARCH_UNIT_ID,\n};\n"],"names":["SEARCH_INPUT_CONTEXT","SEARCH_RESULTS_CONTEXT","PLP_UNIT_ID","SEARCH_UNIT_ID","SEARCH_PRODUCT_CLICK","SEARCH_REQUEST_SENT","SEARCH_RESPONSE_RECEIVED","SEARCH_RESULTS_VIEW","CATEGORY_RESULTS_VIEW","CHANNEL_CONTEXT","getAdobeDataLayer","getContext","name","adobeDataLayer","setContext","data","getChannelContext","setChannelContext","pushEvent","event","additionalContext","acdl","state","searchRequestSent","searchUnitId","searchResponseReceived","categoryResultsView","searchResultsView","searchProductClick","sku","updateSearchInputCtx","searchRequestId","phrase","filters","pageSize","currentPage","sort","searchInputCtx","searchInputUnit","searchInputUnitIndex","unit","updateSearchResultsCtx","results","_a","_b","searchResultsCtx","searchResultUnitIndex","searchResultUnit","createProducts","createSuggestions","createFacets","items","item","index","_c","_d","_e","_f","_g","_h","suggestion","bucket"],"mappings":"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"}
package/chunks/api.js CHANGED
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- const L=e=>{var o,i,r,l,u,m,c,f,p,g,y,v,R,k,w,_,x,b,D,K,T,P,A,C,O,V,z,I,j,q,B,E,F,G,H,J,N,Q,S,U,W,X,Y,Z,$,M;return e?{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(s=>({label:s.label||"",roles:s.roles||[],url:s.url||""})))||[],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:((l=(r=(i=e==null?void 0:e.price)==null?void 0:i.final)==null?void 0:r.amount)==null?void 0:l.value)||0,currency:((c=(m=(u=e==null?void 0:e.price)==null?void 0:u.final)==null?void 0:m.amount)==null?void 0:c.currency)||""}},regular:{amount:{value:((g=(p=(f=e==null?void 0:e.price)==null?void 0:f.regular)==null?void 0:p.amount)==null?void 0:g.value)||0,currency:((R=(v=(y=e==null?void 0:e.price)==null?void 0:y.regular)==null?void 0:v.amount)==null?void 0:R.currency)||""}},roles:((k=e==null?void 0:e.price)==null?void 0:k.roles)||[]}:void 0,priceRange:e!=null&&e.priceRange?{minimum:{final:{amount:{value:((b=(x=(_=(w=e==null?void 0:e.priceRange)==null?void 0:w.minimum)==null?void 0:_.final)==null?void 0:x.amount)==null?void 0:b.value)||0,currency:((P=(T=(K=(D=e==null?void 0:e.priceRange)==null?void 0:D.minimum)==null?void 0:K.final)==null?void 0:T.amount)==null?void 0:P.currency)||""}},regular:{amount:{value:((V=(O=(C=(A=e==null?void 0:e.priceRange)==null?void 0:A.minimum)==null?void 0:C.regular)==null?void 0:O.amount)==null?void 0:V.value)||0,currency:((q=(j=(I=(z=e==null?void 0:e.priceRange)==null?void 0:z.minimum)==null?void 0:I.regular)==null?void 0:j.amount)==null?void 0:q.currency)||""}}},maximum:{final:{amount:{value:((G=(F=(E=(B=e==null?void 0:e.priceRange)==null?void 0:B.maximum)==null?void 0:E.final)==null?void 0:F.amount)==null?void 0:G.value)||0,currency:((Q=(N=(J=(H=e==null?void 0:e.priceRange)==null?void 0:H.maximum)==null?void 0:J.final)==null?void 0:N.amount)==null?void 0:Q.currency)||""}},regular:{amount:{value:((X=(W=(U=(S=e==null?void 0:e.priceRange)==null?void 0:S.maximum)==null?void 0:U.regular)==null?void 0:W.amount)==null?void 0:X.value)||0,currency:((M=($=(Z=(Y=e==null?void 0:e.priceRange)==null?void 0:Y.maximum)==null?void 0:Z.regular)==null?void 0:$.amount)==null?void 0:M.currency)||""}}}}:void 0,inStock:(e==null?void 0:e.inStock)||!1,typename:(e==null?void 0:e.__typename)||""}:{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:""}};function h(e){var i,r,l,u;const n=e==null?void 0:e.productSearch;return{facets:(n==null?void 0:n.facets)||[],items:(n==null?void 0:n.items.map(m=>L(m==null?void 0:m.productView)))||[],pageInfo:{currentPage:((i=n==null?void 0:n.page_info)==null?void 0:i.current_page)||1,totalPages:((r=n==null?void 0:n.page_info)==null?void 0:r.total_pages)||1,totalItems:((l=n==null?void 0:n.page_info)==null?void 0:l.total_items)||0,pageSize:((u=n==null?void 0:n.page_info)==null?void 0:u.page_size)||10},totalCount:(n==null?void 0:n.total_count)||0}}function t(e){const n=e==null?void 0:e.attributeMetadata;return{sortable:(n==null?void 0:n.sortable)||[],filterableInSearch:(n==null?void 0:n.filterableInSearch)||[]}}const d=e=>{var n,o;return((o=(n=e==null?void 0:e.productSearch)==null?void 0:n.items)==null?void 0:o.reduce((i,r)=>{if(!(r!=null&&r.productView))return i;const l=L(r.productView);return l&&i.push(l),i},[]))||[]};export{h as a,t as b,L as c,d as t};
3
+ import{merge as a}from"@dropins/tools/lib.js";import{c as ee}from"./productSearch.js";const d=e=>{var l,i,r,o,s,m,f,g,p,y,v,R,k,w,_,x,b,D,K,T,C,P,A,O,V,z,I,j,q,B,E,F,G,H,J,N,Q,S,U,W,X,Y,Z,$,M,L,h,u,t;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 n={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:((l=e==null?void 0:e.images)==null?void 0:l.map(c=>({label:c.label||"",roles:c.roles||[],url:c.url||""})))||[],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:((o=(r=(i=e==null?void 0:e.price)==null?void 0:i.final)==null?void 0:r.amount)==null?void 0:o.value)||0,currency:((f=(m=(s=e==null?void 0:e.price)==null?void 0:s.final)==null?void 0:m.amount)==null?void 0:f.currency)||""}},regular:{amount:{value:((y=(p=(g=e==null?void 0:e.price)==null?void 0:g.regular)==null?void 0:p.amount)==null?void 0:y.value)||0,currency:((k=(R=(v=e==null?void 0:e.price)==null?void 0:v.regular)==null?void 0:R.amount)==null?void 0:k.currency)||""}},roles:((w=e==null?void 0:e.price)==null?void 0:w.roles)||[]}:void 0,priceRange:e!=null&&e.priceRange?{minimum:{final:{amount:{value:((D=(b=(x=(_=e==null?void 0:e.priceRange)==null?void 0:_.minimum)==null?void 0:x.final)==null?void 0:b.amount)==null?void 0:D.value)||0,currency:((P=(C=(T=(K=e==null?void 0:e.priceRange)==null?void 0:K.minimum)==null?void 0:T.final)==null?void 0:C.amount)==null?void 0:P.currency)||""}},regular:{amount:{value:((z=(V=(O=(A=e==null?void 0:e.priceRange)==null?void 0:A.minimum)==null?void 0:O.regular)==null?void 0:V.amount)==null?void 0:z.value)||0,currency:((B=(q=(j=(I=e==null?void 0:e.priceRange)==null?void 0:I.minimum)==null?void 0:j.regular)==null?void 0:q.amount)==null?void 0:B.currency)||""}}},maximum:{final:{amount:{value:((H=(G=(F=(E=e==null?void 0:e.priceRange)==null?void 0:E.maximum)==null?void 0:F.final)==null?void 0:G.amount)==null?void 0:H.value)||0,currency:((S=(Q=(N=(J=e==null?void 0:e.priceRange)==null?void 0:J.maximum)==null?void 0:N.final)==null?void 0:Q.amount)==null?void 0:S.currency)||""}},regular:{amount:{value:((Y=(X=(W=(U=e==null?void 0:e.priceRange)==null?void 0:U.maximum)==null?void 0:W.regular)==null?void 0:X.amount)==null?void 0:Y.value)||0,currency:((L=(M=($=(Z=e==null?void 0:e.priceRange)==null?void 0:Z.maximum)==null?void 0:$.regular)==null?void 0:M.amount)==null?void 0:L.currency)||""}}}}:void 0,inStock:(e==null?void 0:e.inStock)||!1,typename:(e==null?void 0:e.__typename)||""};return a(n,(t=(u=(h=ee.getConfig().models)==null?void 0:h.Product)==null?void 0:u.transformer)==null?void 0:t.call(u,e))};function ie(e){var i,r,o,s;const n=e==null?void 0:e.productSearch;return{facets:(n==null?void 0:n.facets)||[],items:(n==null?void 0:n.items.map(m=>d(m==null?void 0:m.productView)))||[],pageInfo:{currentPage:((i=n==null?void 0:n.page_info)==null?void 0:i.current_page)||1,totalPages:((r=n==null?void 0:n.page_info)==null?void 0:r.total_pages)||1,totalItems:((o=n==null?void 0:n.page_info)==null?void 0:o.total_items)||0,pageSize:((s=n==null?void 0:n.page_info)==null?void 0:s.page_size)||10},totalCount:(n==null?void 0:n.total_count)||0}}function oe(e){const n=e==null?void 0:e.attributeMetadata;return{sortable:(n==null?void 0:n.sortable)||[],filterableInSearch:(n==null?void 0:n.filterableInSearch)||[]}}const le=e=>{var n,l;return((l=(n=e==null?void 0:e.productSearch)==null?void 0:n.items)==null?void 0:l.reduce((i,r)=>{if(!(r!=null&&r.productView))return i;const o=d(r.productView);return o&&i.push(o),i},[]))||[]};export{ie as a,oe as b,d as c,le as t};
4
4
  //# sourceMappingURL=api.js.map
package/chunks/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sources":["/@dropins/storefront-product-discovery/src/data/transforms/product.ts","/@dropins/storefront-product-discovery/src/data/transforms/api.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 { 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 || '',\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 transformedProduct;\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 { 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 transformedResponse;\n}\n\nexport function transformAttributeMetadata(data: any): any {\n const attributeMetadata = data?.attributeMetadata;\n const transformedResponse = {\n sortable: attributeMetadata?.sortable || [],\n filterableInSearch: attributeMetadata?.filterableInSearch || [],\n };\n return transformedResponse;\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"],"names":["transformProduct","data","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","_y","_z","_A","_B","_C","_D","_E","_F","_G","_H","_I","_J","_K","_L","_M","_N","_O","_P","_Q","_R","_S","_T","image","transformProductSearchResponse","productSearch","product","transformAttributeMetadata","attributeMetadata","transformSearchResultProducts","searchResponse","returnedProductList","productItem","transformed"],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sources":["/@dropins/storefront-product-discovery/src/data/transforms/product.ts","/@dropins/storefront-product-discovery/src/data/transforms/api.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 *******************************************************************/\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 || '',\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 *******************************************************************/\n\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 transformedResponse;\n}\n\nexport function transformAttributeMetadata(data: any): any {\n const attributeMetadata = data?.attributeMetadata;\n const transformedResponse = {\n sortable: attributeMetadata?.sortable || [],\n filterableInSearch: attributeMetadata?.filterableInSearch || [],\n };\n return transformedResponse;\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"],"names":["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","config","transformProductSearchResponse","productSearch","product","transformAttributeMetadata","attributeMetadata","transformSearchResultProducts","searchResponse","returnedProductList","productItem","transformed"],"mappings":"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"}
@@ -1,114 +1,6 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{FetchGraphQL as a}from"@dropins/tools/fetch-graphql.js";const{setEndpoint:l,setFetchGraphQlHeader:s,removeFetchGraphQlHeader:p,setFetchGraphQlHeaders:m,fetchGraphQl:n,getConfig:g}=new a().getMethods(),o=`
4
- fragment Facet on Aggregation {
5
- title
6
- attribute
7
- buckets {
8
- title
9
- __typename
10
- ... on CategoryView {
11
- name
12
- count
13
- path
14
- }
15
- ... on ScalarBucket {
16
- count
17
- }
18
- ... on RangeBucket {
19
- from
20
- to
21
- count
22
- }
23
- ... on StatsBucket {
24
- min
25
- max
26
- }
27
- }
28
- }
29
- `,c=`
30
- fragment ProductView on ProductSearchItem {
31
- productView {
32
- __typename
33
- sku
34
- name
35
- inStock
36
- url
37
- urlKey
38
- images {
39
- label
40
- url
41
- roles
42
- }
43
- ... on ComplexProductView {
44
- priceRange {
45
- maximum {
46
- final {
47
- amount {
48
- value
49
- currency
50
- }
51
- }
52
- regular {
53
- amount {
54
- value
55
- currency
56
- }
57
- }
58
- }
59
- minimum {
60
- final {
61
- amount {
62
- value
63
- currency
64
- }
65
- }
66
- regular {
67
- amount {
68
- value
69
- currency
70
- }
71
- }
72
- }
73
- }
74
- options {
75
- id
76
- title
77
- values {
78
- title
79
- ... on ProductViewOptionValueSwatch {
80
- id
81
- inStock
82
- type
83
- value
84
- }
85
- }
86
- }
87
- }
88
- ... on SimpleProductView {
89
- price {
90
- final {
91
- amount {
92
- value
93
- currency
94
- }
95
- }
96
- regular {
97
- amount {
98
- value
99
- currency
100
- }
101
- }
102
- }
103
- }
104
- }
105
- highlights {
106
- attribute
107
- value
108
- matched_words
109
- }
110
- }
111
- `,u=`
3
+ import{Initializer as o}from"@dropins/tools/lib.js";import{ProductView as n,Facet as c}from"../fragments.js";import{FetchGraphQL as s}from"@dropins/tools/fetch-graphql.js";const a=new o({init:async t=>{const e={};a.config.setConfig({...e,...t})},listeners:()=>[]}),l=a.config,{setEndpoint:f,setFetchGraphQlHeader:d,removeFetchGraphQlHeader:$,setFetchGraphQlHeaders:m,fetchGraphQl:i,getConfig:S}=new s().getMethods(),p=`
112
4
  query productSearch(
113
5
  $phrase: String!
114
6
  $pageSize: Int
@@ -146,7 +38,7 @@ import{FetchGraphQL as a}from"@dropins/tools/fetch-graphql.js";const{setEndpoint
146
38
  }
147
39
  }
148
40
  }
41
+ ${n}
149
42
  ${c}
150
- ${o}
151
- `,h=async r=>n(u,{method:"GET",variables:r}).then(({errors:e,data:t})=>{if(e&&!t)throw console.log("error",e),new Error("Error fetching product search");return t});export{s as a,m as b,n as f,g,h as p,p as r,l as s};
43
+ `,_=async t=>i(p,{method:"GET",variables:t}).then(({errors:e,data:r})=>{if(e&&!r)throw console.log("error",e),new Error("Error fetching product search");return r});export{d as a,m as b,l as c,i as f,S as g,a as i,_ as p,$ as r,f as s};
152
44
  //# sourceMappingURL=productSearch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"productSearch.js","sources":["/@dropins/storefront-product-discovery/src/api/fetch-graphql/fetch-graphql.ts","/@dropins/storefront-product-discovery/src/api/graphql/fragments.graphql.ts","/@dropins/storefront-product-discovery/src/api/productSearch/graphql/productSearch.graphql.ts","/@dropins/storefront-product-discovery/src/api/productSearch/productSearch.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 { 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 *******************************************************************/\n\nconst Facet = /* GraphQL */ `\n fragment Facet on Aggregation {\n title\n attribute\n buckets {\n title\n __typename\n ... on CategoryView {\n name\n count\n path\n }\n ... on ScalarBucket {\n count\n }\n ... on RangeBucket {\n from\n to\n count\n }\n ... on StatsBucket {\n min\n max\n }\n }\n }\n`;\n\nconst ProductView = /* GraphQL */ `\n fragment ProductView on ProductSearchItem {\n productView {\n __typename\n sku\n name\n inStock\n url\n urlKey\n images {\n label\n url\n roles\n }\n ... on ComplexProductView {\n priceRange {\n maximum {\n final {\n amount {\n value\n currency\n }\n }\n regular {\n amount {\n value\n currency\n }\n }\n }\n minimum {\n final {\n amount {\n value\n currency\n }\n }\n regular {\n amount {\n value\n currency\n }\n }\n }\n }\n options {\n id\n title\n values {\n title\n ... on ProductViewOptionValueSwatch {\n id\n inStock\n type\n value\n }\n }\n }\n }\n ... on SimpleProductView {\n price {\n final {\n amount {\n value\n currency\n }\n }\n regular {\n amount {\n value\n currency\n }\n }\n }\n }\n }\n highlights {\n attribute\n value\n matched_words\n }\n }\n`;\n\n//Unused in favor of ProductView from catalog service\nconst Product = /* GraphQL */ `\n fragment Product on ProductSearchItem {\n product {\n __typename\n sku\n description {\n html\n }\n short_description {\n html\n }\n name\n canonical_url\n small_image {\n url\n }\n image {\n url\n }\n thumbnail {\n url\n }\n price_range {\n minimum_price {\n fixed_product_taxes {\n amount {\n value\n currency\n }\n label\n }\n regular_price {\n value\n currency\n }\n final_price {\n value\n currency\n }\n discount {\n percent_off\n amount_off\n }\n }\n maximum_price {\n fixed_product_taxes {\n amount {\n value\n currency\n }\n label\n }\n regular_price {\n value\n currency\n }\n final_price {\n value\n currency\n }\n discount {\n percent_off\n amount_off\n }\n }\n }\n }\n }\n`;\n\nexport { Facet, Product, ProductView };\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 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 { fetchGraphQl } from '@/plp/api';\nimport { PRODUCT_SEARCH_QUERY } from './graphql/productSearch.graphql';\nimport { ProductSearchResponse } from '@/plp/types/api/productSearch';\n\nexport const productSearch = async (variables: any): Promise<ProductSearchResponse | null> => {\n return fetchGraphQl(PRODUCT_SEARCH_QUERY, { method: 'GET', variables }).then(({ errors, data }) => {\n if (errors && !data) {\n console.log('error', errors);\n throw new Error('Error fetching product search');\n } else {\n return data;\n }\n });\n};\n"],"names":["setEndpoint","setFetchGraphQlHeader","removeFetchGraphQlHeader","setFetchGraphQlHeaders","fetchGraphQl","getConfig","FetchGraphQL","Facet","ProductView","PRODUCT_SEARCH_QUERY","productSearch","variables","errors","data"],"mappings":"+DAWO,KAAM,CACX,YAAAA,EACA,sBAAAC,EACA,yBAAAC,EACA,uBAAAC,EACA,aAAAC,EACA,UAAAC,CACF,EAAI,IAAIC,EAAA,EAAe,WAAA,ECTjBC,EAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA4BtBC,EAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EC1B5BC,EAAqC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsCvCD,CAAW;AAAA,IACXD,CAAK;AAAA,ECrCIG,EAAgB,MAAOC,GAC3BP,EAAaK,EAAsB,CAAE,OAAQ,MAAO,UAAAE,EAAW,EAAE,KAAK,CAAC,CAAE,OAAAC,EAAQ,KAAAC,KAAW,CACjG,GAAID,GAAU,CAACC,EACb,cAAQ,IAAI,QAASD,CAAM,EACrB,IAAI,MAAM,+BAA+B,EAE/C,OAAOC,CACT,CACD"}
1
+ {"version":3,"file":"productSearch.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/api/productSearch/graphql/productSearch.graphql.ts","/@dropins/storefront-product-discovery/src/api/productSearch/productSearch.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';\n\ntype ConfigProps = {\n langDefinitions?: Lang;\n\n models?: {\n Product?: Model<Product>\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 *******************************************************************/\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 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 { fetchGraphQl } from '@/plp/api';\nimport { PRODUCT_SEARCH_QUERY } from './graphql/productSearch.graphql';\nimport { ProductSearchResponse } from '@/plp/types/api/productSearch';\n\nexport const productSearch = async (variables: any): Promise<ProductSearchResponse | null> => {\n return fetchGraphQl(PRODUCT_SEARCH_QUERY, { method: 'GET', variables }).then(({ errors, data }) => {\n if (errors && !data) {\n console.log('error', errors);\n throw new Error('Error fetching product search');\n } else {\n return data;\n }\n });\n};\n"],"names":["initialize","Initializer","config","defaultConfig","setEndpoint","setFetchGraphQlHeader","removeFetchGraphQlHeader","setFetchGraphQlHeaders","fetchGraphQl","getConfig","FetchGraphQL","PRODUCT_SEARCH_QUERY","ProductView","Facet","productSearch","variables","errors","data"],"mappings":"4KAqBO,MAAMA,EAAa,IAAIC,EAAyB,CACrD,KAAM,MAAOC,GAAW,CACtB,MAAMC,EAAgB,CAAA,EAEtBH,EAAW,OAAO,UAAU,CAAE,GAAGG,EAAe,GAAGD,EAAQ,CAC7D,EAEA,UAAW,IAAM,CAAA,CACnB,CAAC,EAEYA,EAASF,EAAW,OCpBpB,CACX,YAAAI,EACA,sBAAAC,EACA,yBAAAC,EACA,uBAAAC,EACA,aAAAC,EACA,UAAAC,CACF,EAAI,IAAIC,EAAA,EAAe,WAAA,ECPjBC,EAAqC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsCvCC,CAAW;AAAA,IACXC,CAAK;AAAA,ECrCIC,EAAgB,MAAOC,GAC3BP,EAAaG,EAAsB,CAAE,OAAQ,MAAO,UAAAI,EAAW,EAAE,KAAK,CAAC,CAAE,OAAAC,EAAQ,KAAAC,KAAW,CACjG,GAAID,GAAU,CAACC,EACb,cAAQ,IAAI,QAASD,CAAM,EACrB,IAAI,MAAM,+BAA+B,EAE/C,OAAOC,CAEX,CAAC"}
@@ -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;\n SelectedFacets?: SlotProps;\n Facets?: SlotProps;\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 switch (facet.buckets[0]?.__typename) {\n case 'RangeBucket':\n return (\n <RadioButton\n data-testid={`${bucket.title}-radio`}\n label={bucketLabel}\n name={facet.attribute}\n value={bucket.title}\n checked={bucket.selected}\n onChange={(event): void => {\n changeFilter(event, facet);\n }}\n />\n ) as VNode;\n case 'ScalarBucket':\n case 'CategoryView':\n return (\n <Checkbox\n data-testid={`${bucket.title}-checkbox`}\n label={`${bucketLabel} (${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 ) as VNode;\n default:\n return null;\n }\n })\n .filter((bucket) => bucket !== null);\n return (<Facet header={header} buckets={buckets} />) as VNode;\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","RadioButton","Checkbox","getFacetsNode","Slot","Fragment","Divider","getSelectedFacetsNode","selectedFilterBtns","bucketTitle","Close","clearAllBtn","useEffect"],"mappings":"kpBACA,MAAMA,EAAUC,GAA0BC,EAAM,cAAc,MAAO,CAAE,GAAI,gBAAiB,YAAa,gCAAiC,MAAO,6BAA8B,MAAO,GAAI,OAAQ,GAAI,QAAS,YAAa,GAAGD,GAAyBC,EAAM,cAAc,IAAK,CAAE,GAAI,OAAO,EAAoBA,EAAM,cAAc,OAAQ,CAAE,GAAI,iBAAkB,YAAa,iBAAkB,MAAO,GAAI,OAAQ,GAAI,KAAM,OAAQ,QAAS,CAAC,CAAE,EAAmBA,EAAM,cAAc,IAAK,CAAE,GAAI,WAAY,YAAa,WAAY,UAAW,wBAAwB,EAAoBA,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,GAAI,WAAY,YAAa,WAAY,GAAI,KAAM,UAAW,0BAA2B,KAAM,OAAQ,OAAQ,cAAc,CAAE,EAAmBA,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,GAAI,WAAY,YAAa,WAAY,GAAI,KAAM,UAAW,0BAA2B,KAAM,OAAQ,OAAQ,eAAgB,CAAC,CAAC,CAAC,ECAt9BC,EAAaF,GAA0BC,EAAM,cAAc,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,QAAS,YAAa,KAAM,OAAQ,MAAO,6BAA8B,GAAGD,CAAK,EAAoBC,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,EAAG,WAAY,OAAQ,cAAc,CAAE,EAAmBA,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,EAAG,UAAW,OAAQ,cAAc,CAAE,EAAmBA,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,EAAG,WAAY,OAAQ,cAAc,CAAE,CAAC,ECAjiBE,EAAYH,GAA0BC,EAAM,cAAc,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,QAAS,YAAa,KAAM,OAAQ,MAAO,6BAA8B,GAAGD,CAAK,EAAoBC,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,EAAG,iCAAkC,OAAQ,cAAc,CAAE,EAAmBA,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,EAAG,iCAAkC,OAAQ,cAAc,CAAE,CAAC,ECAjdG,EAAYJ,GAA0BC,EAAM,cAAc,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,QAAS,YAAa,KAAM,OAAQ,MAAO,6BAA8B,GAAGD,CAAK,EAAoBC,EAAM,cAAc,OAAQ,CAAE,EAAG,wBAAyB,YAAa,IAAK,cAAe,SAAU,eAAgB,QAAS,aAAc,qBAAsB,KAAM,OAAQ,OAAQ,cAAc,CAAE,CAAC,EC8BjYI,EAAuC,CAAC,CAAE,sBAAAC,EAAwB,EAAG,OAAAC,EAAQ,QAAAC,KAAc,CACtG,MAAMC,EAAeC,EAAQ,CAC3B,SAAU,wBACV,SAAU,uBAAA,CACX,EACKC,EAAuBL,EACvB,CAACM,EAAUC,CAAW,EAAIC,EAASN,EAAQ,OAASG,CAAoB,EAExEI,EAAkBH,EAAWJ,EAAQ,OAASG,EAEpD,SACG,MAAA,CACC,SAAA,CAAAK,EAACC,EAAA,CAAW,UAAU,kCAAkC,KAAMV,EAAQ,EACrEC,EAAQ,MAAM,EAAGO,CAAe,EAAE,IAAI,CAACG,EAAQC,MACtCF,EAAA,CAAuB,UAAU,kCAAkC,KAAMC,GAAzDC,CAAiE,CAC1F,EACA,CAACP,GAAYJ,EAAQ,OAASG,KAC5BS,EAAA,CAAO,QAAQ,WAAW,KAAMJ,EAACK,EAAA,CAAK,OAAQC,EAAK,KAAK,IAAA,CAAK,EAAI,QAAS,IAAYT,EAAY,CAACD,CAAQ,EACzG,SAAAH,EAAa,QAAA,CAChB,EAEDG,GAAYJ,EAAQ,OAASG,GAC5BK,EAACI,EAAA,CACC,QAAQ,WACR,KAAMJ,EAACK,EAAA,CAAK,OAAQE,EAAO,KAAK,KAAK,EACrC,QAAS,IAAYV,EAAY,CAACD,CAAQ,EAEzC,SAAAH,EAAa,QAAA,CAAA,CAChB,EAEJ,CAEJ,EClCae,EAA+C,CAAC,CAAE,eAAAC,EAAgB,OAAAC,KAAa,CAC1F,KAAM,CAACC,EAAaC,CAAc,EAAId,EAAS,EAAI,EAE7Ce,EAAoB,IAAM,CAC9BD,EAAe,CAACD,CAAW,CAAA,EAG7B,OACEG,EAAC,MAAA,CAAI,UAAU,+BACb,SAAA,CAAAd,EAAC,MAAA,CAAI,UAAU,oDACb,SAAAc,EAACC,EAAA,CACC,QAAS,IAAM,CACbF,EAAA,CAAkB,EAGpB,SAAA,CAAAb,EAACK,EAAA,CAAK,OAAQW,EAAQ,KAAK,KAAK,EAChChB,EAAC,QAAK,SAAA,SAAA,CAAO,CAAA,CAAA,CAAA,EAEjB,EACAA,EAACC,EAAA,CAAW,UAAU,iDAAiD,KAAMQ,EAAgB,EAC7FT,EAACC,EAAA,CACC,UAAWgB,EAAQ,CACjB,8CACA,CAAC,sDAAuDN,CAAW,CAAA,CACpE,EACD,KAAMD,CAAA,CAAA,CACR,EACF,CAEJ,ECrCMQ,EAAa,KACbC,EAAc,MAEdC,EAAuBC,GAAuB,CAClD,MAAMC,EAAgBD,EAAM,QAAQ,KAAMnB,GAAWA,EAAO,QAAQ,EACpE,OAAKoB,EAGE,CACL,UAAWD,EAAM,UACjB,MAAO,CACL,KAAMC,EAAc,KACpB,GAAIA,EAAc,EAAA,CACpB,EAPO,IASX,EAEMC,EAAwBF,GAAuB,CACnD,MAAMG,EAAmBH,EAAM,QAAQ,OAAO,CAACI,EAAMC,KAC/CA,EAAK,UACPD,EAAK,KAAKC,EAAK,KAAK,EAEfD,GACN,EAAc,EACjB,OAAID,EAAiB,SAAW,EACvB,KAEF,CACL,UAAWH,EAAM,UACjB,GAAIG,CAAA,CAER,EAEMG,EAAsBN,GAAuB,OACjD,QAAQO,EAAAP,EAAM,QAAQ,CAAC,IAAf,YAAAO,EAAkB,WAAA,CACxB,IAAK,cACH,OAAOR,EAAoBC,CAAK,EAClC,IAAK,eACL,IAAK,eACH,OAAOE,EAAqBF,CAAK,CAEjC,CAEN,EAEMQ,GAAmBC,GAAqB,2BAC5C,MAAMC,EAAYD,EAAM,CAAC,EACzB,OAAIE,GAAAC,GAAAL,EAAAG,GAAA,YAAAA,EAAW,QAAX,YAAAH,EAAkB,UAAlB,YAAAK,EAA2B,SAA3B,MAAAD,EAAmC,SAC9BD,EAAU,MAAM,QAAQ,OAAO,UAC7BG,GAAAC,GAAAC,GAAAC,EAAAN,GAAA,YAAAA,EAAW,aAAX,YAAAM,EAAuB,UAAvB,YAAAD,EAAgC,UAAhC,YAAAD,EAAyC,SAAzC,MAAAD,EAAiD,UACnDI,GAAAC,GAAAC,GAAAC,EAAAV,GAAA,YAAAA,EAAW,aAAX,YAAAU,EAAuB,UAAvB,YAAAD,EAAgC,UAAhC,YAAAD,EAAyC,SAAzC,YAAAD,EAAiD,SAEnD,KACT,EAEMI,GAAsB,CAACxC,EAAamB,EAAoBsB,KACxDtB,GAAA,YAAAA,EAAO,aAAc,QAEnBnB,EAAO,OAAS,EAEhBY,EAAC,MAAA,CAAI,MAAO,eACV,SAAA,CAAAd,EAAC4C,GAAW,OAAQ1C,EAAO,KAAM,SAAUyC,GAAY,MAAO,EAC9D3C,EAAC,OAAA,CAAK,MAAO,iBAAmB,SAAA,IAAI,IACnC4C,EAAA,CAAW,OAAQ1C,EAAO,GAAI,SAAUyC,GAAY,KAAA,CAAO,CAAA,EAC9D,EAIF3C,EAAC4C,EAAA,CAAW,cAAe1C,EAAO,KAAM,cAAeA,EAAO,GAAI,SAAUyC,GAAY,MAAO,QAAQ,MAAA,CAAO,EAG3GzC,EAAO,MAGV2C,GAAuB,CAAC3C,EAAamB,IACrCnB,EAAO,QAAUgB,EACZ,OAAOG,EAAM,KAAK,GAChBnB,EAAO,QAAUiB,EACnBE,EAAM,MAERnB,EAAO,MAGV4C,EAAiB,CAAC5C,EAAamB,EAAoBsB,IAA4B,CACnF,OAAQzC,EAAO,WAAA,CACb,IAAK,cACH,OAAOwC,GAAoBxC,EAAQmB,EAAOsB,CAAQ,EACpD,IAAK,eACL,IAAK,eACH,OAAOE,GAAqB3C,EAAQmB,CAAK,CAEzC,CAEN,EC7Ea0B,GAAiC,CAAC,CAAE,MAAAC,KAAY,CAC3D,MAAMvD,EAAeC,EAAQ,CAC3B,SAAU,uBAAA,CACX,EAEK,CAACuD,EAAWC,CAAY,EAAIpD,EAAwB,CAAA,CAAE,EACtD,CAAC6C,EAAUQ,CAAW,EAAIrD,EAAwB,IAAI,EAEtDsD,EAAsBC,GAA6E,CACvG,GAAI,CAACA,GAAY,CAACA,EAAQ,OAAO,QAAU,CAACA,EAAQ,OAAO,OAAS,CAACA,EAAQ,QAAQ,OAAS,CAC5FH,EAAa,CAAA,CAAE,EACf,MAAA,CAEF,KAAM,CAAE,OAAAxC,EAAQ,MAAAoB,CAAA,EAAUuB,EAAQ,OAClCF,EAAYtB,GAAgBC,CAAK,CAAC,EAClC,MAAMwB,EAAaD,EAAQ,QAAQ,OACnC,GAAI3C,EAAQ,CACV,MAAM6C,EAAuB7C,EAAO,IAAKW,GAAuB,CAC9D,MAAMmC,EAAkBnC,EAAM,QAAQ,IAAKnB,GAAW,CACpDA,EAAO,SAAW,GAClB,MAAMuD,EAAiBH,GAAA,YAAAA,EAAY,KAAMI,GAAWA,EAAO,YAAcrC,EAAM,WAC/E,GAAIoC,EAAgB,CAClB,MAAMnC,EAAgBmC,EAAe,OACjCnC,GAAiBpB,EAAO,OAASoB,EAAc,MAAQpB,EAAO,KAAOoB,EAAc,IAE5EmC,EAAe,IAAMA,EAAe,GAAG,SAASvD,EAAO,KAAK,KACrEA,EAAO,SAAW,GACpB,CAEF,OAAOA,CAAA,CACR,EACD,OAAAmB,EAAM,QAAUmC,EACTnC,CAAA,CACR,EACD6B,EAAaK,CAAoB,CAAA,CACnC,EAGII,EAAyBjD,GAAgC,CAC7D,MAAMkD,EAAmBX,EAAU,IAAKY,GAAM,CAC5C,MAAMC,EAAWpD,EAAO,KAAMW,GAAUA,EAAM,YAAcwC,EAAE,SAAS,EACvE,OAAIC,GAGGD,CAAA,CACR,EACKE,EAAqBH,EAAiB,OAAO,CAACnC,EAAsBJ,IAAuB,CAC/F,MAAMoC,EAAiB9B,EAAmBN,CAAK,EAC/C,OAAIoC,GACFhC,EAAK,KAAKgC,CAA8B,EAEnChC,CAAA,EACN,EAAoB,EACvByB,EAAaU,CAAgB,EAC7BI,EAAO,KAAK,iBAAkB,CAAE,OAAQD,EAAoB,CAAA,EAGxDE,EAAwB,CAAC5C,EAAoB6C,IAAwB,CACzE,MAAMC,EAAa9C,EAAM,QAAQ,IAAKnB,IAChCA,EAAO,QAAUgE,IACnBhE,EAAO,SAAW,IAEbA,EACR,EACK4D,EAAWzC,EACjByC,EAAS,QAAUK,EACnBR,EAAsB,CAACG,CAAQ,CAAC,CAAA,EAG5BM,EAAqB,IAAY,CACrC,MAAMR,EAAmBX,EAAU,IAAK5B,GAAU,CAChD,MAAMgD,EAAiBhD,EAAM,QAAQ,IAAKnB,IACxCA,EAAO,SAAW,GACXA,EACR,EACD,OAAAmB,EAAM,QAAUgD,EACThD,CAAA,CACR,EACD6B,EAAaU,CAAgB,EAC7BI,EAAO,KAAK,iBAAkB,CAAE,OAAQ,CAAA,EAAI,CAAA,EAGxCM,EAAe,CAACC,EAAYlD,IAA6B,CAC7D,MAAM8C,EAAa9C,EAAM,QAAQ,IAAKnB,GAAW,OAC/C,QAAI0B,EAAAP,EAAM,QAAQ,CAAC,IAAf,YAAAO,EAAkB,cAAe,gBACnC1B,EAAO,SAAW,IAEhBA,EAAO,QAAUqE,EAAM,OAAO,QAChCrE,EAAO,SAAWqE,EAAM,OAAO,SAE1BrE,CAAA,CACR,EACK4D,EAAWzC,EACjByC,EAAS,QAAUK,EACnBR,EAAsB,CAACG,CAAQ,CAAC,CAAA,EAG5BU,EAAgBnD,GAA8B,CAClD,MAAM9B,EAASS,EAAC,OAAA,CAAM,SAAAqB,EAAM,MAAM,EAC5B7B,EAAU6B,EAAM,QACnB,IAAKnB,GAAwB,OAC5B,MAAMuE,EAAc3B,EAAe5C,EAAQmB,EAAOsB,CAAQ,EAC1D,QAAQf,EAAAP,EAAM,QAAQ,CAAC,IAAf,YAAAO,EAAkB,WAAA,CACxB,IAAK,cACH,OACE5B,EAAC0E,EAAA,CACC,cAAa,GAAGxE,EAAO,KAAK,SAC5B,MAAOuE,EACP,KAAMpD,EAAM,UACZ,MAAOnB,EAAO,MACd,QAASA,EAAO,SAChB,SAAWqE,GAAgB,CACzBD,EAAaC,EAAOlD,CAAK,CAAA,CAC3B,CAAA,EAGN,IAAK,eACL,IAAK,eACH,OACErB,EAAC2E,EAAA,CACC,cAAa,GAAGzE,EAAO,KAAK,YAC5B,MAAO,GAAGuE,CAAW,KAAKvE,EAAO,KAAK,IACtC,KAAMmB,EAAM,UACZ,MAAOnB,EAAO,MACd,QAASA,EAAO,SAChB,SAAWqE,GAAgB,CACzBD,EAAaC,EAAOlD,CAAK,CAAA,CAC3B,CAAA,EAGN,QACE,OAAO,IAAA,CACX,CACD,EACA,OAAQnB,GAAWA,IAAW,IAAI,EACrC,OAAQF,EAACX,EAAA,CAAM,OAAAE,EAAgB,QAAAC,CAAA,CAAkB,CAAA,EAG7CoF,EAAgB,IAElB5E,EAAC6E,EAAA,CAAK,KAAK,SAAS,KAAM7B,GAAA,YAAAA,EAAO,OAAQ,QAAS,CAAE,KAAMC,GACvD,SAAAA,EAAU,IAAK5B,GACPA,EAAM,QAAQ,OAAS,EAExBP,EAAAgE,EAAA,CACE,SAAA,CAAA9E,EAAC6E,EAAA,CAAK,KAAK,QAAQ,KAAM7B,GAAA,YAAAA,EAAO,MAAO,QAAS,CAAE,KAAM3B,CAAA,EACrD,SAAAmD,EAAanD,CAAK,EACrB,EACArB,EAAC+E,EAAA,CAAQ,QAAQ,WAAA,CAAY,CAAA,CAAA,CAC/B,EAEF,IACL,EACH,EAIEC,EAAwB,IAAa,CACzC,MAAMvE,EAAiBwC,EAAU,OAAO,CAACxB,EAAMC,KAC5BA,EAAK,QAAQ,OAAQxB,GAAwBA,EAAO,QAAQ,EAChE,OAAS,GACpBuB,EAAK,KAAKC,CAAI,EAETD,GACN,EAAmB,EAChBwD,EAAqBxE,EAAe,IAAKY,GACtCA,EAAM,QAAQ,IAAKnB,GAAW,CACnC,GAAIA,EAAO,SAAU,CACnB,MAAMgF,EAAcpC,EAAe5C,EAAQmB,EAAOsB,CAAQ,EAC1D,OACE3C,EAACI,EAAA,CACC,cAAa,GAAGF,EAAO,KAAK,gBAC5B,aAAY,UAAUmB,EAAM,KAAK,YAAYnB,EAAO,KAAK,GACzD,QAAQ,YACR,SACEY,EAAAgE,EAAA,CACE,SAAA,CAAA9E,EAAC,QAAM,SAAAkF,CAAA,CAAY,EACnBlF,EAACK,EAAA,CAAK,OAAQ8E,EAAO,KAAK,IAAA,CAAK,CAAA,EACjC,EAEF,QAAS,IAAY,CACnBlB,EAAsB5C,EAAOnB,EAAO,KAAK,CAAA,CAC3C,CAAA,CACF,CAGJ,OAAO,IAAA,CACR,CACF,EAEKkF,EACJH,EAAmB,OAAS,EAC1BjF,EAACI,EAAA,CACC,QAAQ,YACR,QAAS,IAAY,CACnBgE,EAAA,CAAmB,EAGrB,SAAApE,EAAC,OAAA,CAAM,SAAAP,EAAa,QAAA,CAAS,CAAA,CAAA,EAE7B,KACN,OACEqB,EAAC+D,EAAA,CAAK,KAAK,iBAAiB,KAAM7B,GAAA,YAAAA,EAAO,eAAgB,QAAS,CAAE,KAAMvC,CAAA,EACvE,SAAA,CAAAwE,EACAG,CAAA,EACH,CAAA,EAIJ,OAAAC,EAAU,IAAM,CACdrB,EAAO,GAAG,gBAAiBZ,CAAkB,CAAA,EAC5C,EAAE,IAEG5C,EAAA,CAAU,eAAgBwE,IAAyB,OAAQJ,IAAiB,CACtF","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 } 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;\n SelectedFacets?: SlotProps;\n Facets?: SlotProps;\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 switch (facet.buckets[0]?.__typename) {\n case 'RangeBucket':\n return (\n <RadioButton\n data-testid={`${bucket.title}-radio`}\n label={bucketLabel}\n name={facet.attribute}\n value={bucket.title}\n checked={bucket.selected}\n onChange={(event): void => {\n changeFilter(event, facet);\n }}\n />\n ) as VNode;\n case 'ScalarBucket':\n case 'CategoryView':\n return (\n <Checkbox\n data-testid={`${bucket.title}-checkbox`}\n label={`${bucketLabel} (${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 ) as VNode;\n default:\n return null;\n }\n })\n .filter((bucket) => bucket !== null);\n return (<Facet header={header} buckets={buckets} />) as VNode;\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","RadioButton","Checkbox","getFacetsNode","Slot","Fragment","Divider","getSelectedFacetsNode","selectedFilterBtns","bucketTitle","Close","clearAllBtn","useEffect"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}