@faststore/core 3.0.146 → 3.0.148

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +24 -24
  3. package/.next/cache/.tsbuildinfo +1 -1
  4. package/.next/cache/config.json +3 -3
  5. package/.next/cache/eslint/.cache_1gneedd +1 -1
  6. package/.next/cache/webpack/client-production/0.pack +0 -0
  7. package/.next/cache/webpack/client-production/index.pack +0 -0
  8. package/.next/cache/webpack/server-production/0.pack +0 -0
  9. package/.next/cache/webpack/server-production/index.pack +0 -0
  10. package/.next/next-minimal-server.js.nft.json +1 -1
  11. package/.next/next-server.js.nft.json +1 -1
  12. package/.next/prerender-manifest.js +1 -1
  13. package/.next/prerender-manifest.json +1 -1
  14. package/.next/react-loadable-manifest.json +25 -24
  15. package/.next/routes-manifest.json +1 -1
  16. package/.next/server/chunks/5679.js +1 -1
  17. package/.next/server/chunks/6604.js +1 -1
  18. package/.next/server/chunks/7675.js +1 -0
  19. package/.next/server/chunks/7917.js +1 -1
  20. package/.next/server/chunks/9646.js +3 -3
  21. package/.next/server/chunks/9844.js +1 -1
  22. package/.next/server/chunks/UINavbarSlider.js +1 -1
  23. package/.next/server/middleware-build-manifest.js +1 -1
  24. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  25. package/.next/server/pages/404.js +1 -1
  26. package/.next/server/pages/404.js.nft.json +1 -1
  27. package/.next/server/pages/500.js +1 -1
  28. package/.next/server/pages/500.js.nft.json +1 -1
  29. package/.next/server/pages/[...slug].js +1 -1
  30. package/.next/server/pages/[...slug].js.nft.json +1 -1
  31. package/.next/server/pages/[slug]/p.js +1 -1
  32. package/.next/server/pages/[slug]/p.js.nft.json +1 -1
  33. package/.next/server/pages/_app.js.nft.json +1 -1
  34. package/.next/server/pages/_document.js.nft.json +1 -1
  35. package/.next/server/pages/_error.js.nft.json +1 -1
  36. package/.next/server/pages/account.js +1 -1
  37. package/.next/server/pages/account.js.nft.json +1 -1
  38. package/.next/server/pages/api/graphql.js.nft.json +1 -1
  39. package/.next/server/pages/api/health/live.js.nft.json +1 -1
  40. package/.next/server/pages/api/health/ready.js.nft.json +1 -1
  41. package/.next/server/pages/api/preview.js.nft.json +1 -1
  42. package/.next/server/pages/checkout.js +1 -1
  43. package/.next/server/pages/checkout.js.nft.json +1 -1
  44. package/.next/server/pages/en-US/404.html +1 -1
  45. package/.next/server/pages/en-US/404.json +1 -1
  46. package/.next/server/pages/en-US/500.html +1 -1
  47. package/.next/server/pages/en-US/500.json +1 -1
  48. package/.next/server/pages/en-US/account.html +1 -1
  49. package/.next/server/pages/en-US/account.json +1 -1
  50. package/.next/server/pages/en-US/checkout.html +1 -1
  51. package/.next/server/pages/en-US/checkout.json +1 -1
  52. package/.next/server/pages/en-US/login.html +1 -1
  53. package/.next/server/pages/en-US/login.json +1 -1
  54. package/.next/server/pages/en-US/s.html +1 -1
  55. package/.next/server/pages/en-US/s.json +1 -1
  56. package/.next/server/pages/en-US.html +2 -2
  57. package/.next/server/pages/en-US.json +1 -1
  58. package/.next/server/pages/index.js +1 -1
  59. package/.next/server/pages/index.js.nft.json +1 -1
  60. package/.next/server/pages/login.js +1 -1
  61. package/.next/server/pages/login.js.nft.json +1 -1
  62. package/.next/server/pages/s.js +1 -1
  63. package/.next/server/pages/s.js.nft.json +1 -1
  64. package/.next/server/pages-manifest.json +1 -1
  65. package/.next/static/chunks/343.d1c1e47ba6dfb4d9.js +1 -0
  66. package/.next/static/chunks/{388.5781b3f7dbc6616d.js → 388.0b1a49b31ff12af9.js} +1 -1
  67. package/.next/static/chunks/523.3d7b72011d05148e.js +1 -0
  68. package/.next/static/chunks/61-85c56c64992419d8.js +1 -0
  69. package/.next/static/chunks/{617.8816a140189edbcf.js → 617.0a2a7e39a7f3d4cc.js} +1 -1
  70. package/.next/static/chunks/{707-5963faf534c5cd23.js → 707-04bc546eb86a5e61.js} +1 -1
  71. package/.next/static/chunks/Toast.9c015005521b0f2d.js +1 -0
  72. package/.next/static/chunks/{UIToast.b6a96d79a157fa0a.js → UIToast.b5c0885cbd078c88.js} +1 -1
  73. package/.next/static/chunks/webpack-642f67e818afdfea.js +1 -0
  74. package/.next/static/{O3CQ1qoEzO8xogw5LMeSH → xMJeuq2CpfkQ-Z8xALZD0}/_buildManifest.js +1 -1
  75. package/.next/trace +99 -99
  76. package/.turbo/turbo-build.log +3 -3
  77. package/.turbo/turbo-lint.log +1 -1
  78. package/.turbo/turbo-test.log +5 -5
  79. package/package.json +2 -2
  80. package/src/components/navigation/Navbar/Navbar.tsx +20 -17
  81. package/src/components/navigation/NavbarLinks/NavbarLinks.tsx +3 -3
  82. package/src/components/search/SearchDropdown/SearchDropdown.tsx +0 -1
  83. package/src/components/search/SearchInput/SearchInput.tsx +73 -46
  84. package/src/middleware__DISABLED.ts +65 -0
  85. package/.next/server/chunks/2524.js +0 -1
  86. package/.next/server/chunks/3295.js +0 -1
  87. package/.next/server/chunks/8188.js +0 -1
  88. package/.next/static/chunks/295.063a68ad8bfc881d.js +0 -1
  89. package/.next/static/chunks/343.f76546894e65db1a.js +0 -1
  90. package/.next/static/chunks/523.21a1ec53ebcfbb52.js +0 -1
  91. package/.next/static/chunks/61-122c72064f15206c.js +0 -1
  92. package/.next/static/chunks/Toast.e5749c27bbb861c8.js +0 -1
  93. package/.next/static/chunks/webpack-7fd9ef0958e17118.js +0 -1
  94. /package/.next/static/{O3CQ1qoEzO8xogw5LMeSH → xMJeuq2CpfkQ-Z8xALZD0}/_ssgManifest.js +0 -0
@@ -46,7 +46,7 @@ Warning: Dynamic Content not found for the page: home. Refer to the Dynamic Cont
46
46
  Collecting build traces ...
47
47
 
48
48
  Route (pages) Size First Load JS
49
- ┌ ● / 1.23 kB 143 kB
49
+ ┌ ● / 1.23 kB 144 kB
50
50
  ├ └ css/197e314c5a03eabd.css 740 B
51
51
  ├ /_app 0 B 90.9 kB
52
52
  ├ ● /[...slug] 2.79 kB 157 kB
@@ -67,11 +67,11 @@ Route (pages) Size First Load JS
67
67
  ├ chunks/framework-8e279965036b6169.js 45.4 kB
68
68
  ├ chunks/main-029f1328cfee9686.js 33.1 kB
69
69
  ├ chunks/pages/_app-cb1c3a94f987c5c8.js 9.87 kB
70
- ├ chunks/webpack-7fd9ef0958e17118.js 2.61 kB
70
+ ├ chunks/webpack-642f67e818afdfea.js 2.6 kB
71
71
  └ css/ee0556daedda6306.css 3.07 kB
72
72
 
73
73
  λ (Server) server-side renders at runtime (uses getInitialProps or getServerSideProps)
74
74
  ○ (Static) automatically rendered as static HTML (uses no initial props)
75
75
  ● (SSG) automatically generated as static HTML + JSON (uses getStaticProps)
76
76
 
77
- Done in 71.33s.
77
+ Done in 72.55s.
@@ -1,4 +1,4 @@
1
1
  yarn run v1.22.22
2
2
  $ next lint
3
3
  ✔ No ESLint warnings or errors
4
- Done in 6.03s.
4
+ Done in 6.02s.
@@ -1,12 +1,12 @@
1
1
  yarn run v1.22.22
2
2
  $ jest
3
- PASS test/server/cms/index.test.ts (35.183 s)
4
- PASS test/utils/multipleTemplates.test.ts (35.323 s)
5
- PASS test/server/index.test.ts (38.869 s)
3
+ PASS test/utils/multipleTemplates.test.ts (34.693 s)
4
+ PASS test/server/cms/index.test.ts (35.568 s)
5
+ PASS test/server/index.test.ts (38.301 s)
6
6
 
7
7
  Test Suites: 3 passed, 3 total
8
8
  Tests: 19 passed, 19 total
9
9
  Snapshots: 0 total
10
- Time: 39.975 s
10
+ Time: 39.41 s
11
11
  Ran all test suites.
12
- Done in 41.66s.
12
+ Done in 41.20s.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@faststore/core",
3
- "version": "3.0.146",
3
+ "version": "3.0.148",
4
4
  "license": "MIT",
5
5
  "repository": "vtex/faststore",
6
6
  "browserslist": "supports es6-module and not dead",
@@ -128,5 +128,5 @@
128
128
  "node": "18.19.0",
129
129
  "yarn": "1.19.1"
130
130
  },
131
- "gitHead": "5cbeb9bb9b67371aa23b6e5ca51d582629dfb6d3"
131
+ "gitHead": "95acfb993977fe1cca3873b845c6b7861483ac1e"
132
132
  }
@@ -97,7 +97,7 @@ function Navbar({
97
97
  } = useOverrideComponents<'Navbar'>()
98
98
  const scrollDirection = useScrollDirection()
99
99
  const { openNavbar, navbar: displayNavbar } = useUI()
100
- const { isDesktop } = useScreenResize()
100
+ const { isDesktop, isMobile } = useScreenResize()
101
101
 
102
102
  const searchMobileRef = useRef<SearchInputRef>(null)
103
103
  const [searchExpanded, setSearchExpanded] = useState(false)
@@ -139,10 +139,12 @@ function Navbar({
139
139
  </>
140
140
  )}
141
141
 
142
- <SearchInput
143
- placeholder={searchInput?.placeholder}
144
- sort={searchInput?.sort}
145
- />
142
+ {isDesktop && (
143
+ <SearchInput
144
+ placeholder={searchInput?.placeholder}
145
+ sort={searchInput?.sort}
146
+ />
147
+ )}
146
148
 
147
149
  <NavbarButtons.Component
148
150
  searchExpanded={searchExpanded}
@@ -160,18 +162,19 @@ function Navbar({
160
162
  />
161
163
  )}
162
164
 
163
- <SearchInput
164
- placeholder=""
165
- ref={searchMobileRef}
166
- testId="store-input-mobile"
167
- buttonTestId="store-input-mobile-button"
168
- onSearchClick={handlerExpandSearch}
169
- sort={searchInput?.sort}
170
- hidden={!searchExpanded}
171
- aria-hidden={!searchExpanded}
172
- />
173
-
174
- <ButtonSignIn.Component {...signInButton} />
165
+ {!isDesktop && (
166
+ <SearchInput
167
+ placeholder=""
168
+ ref={searchMobileRef}
169
+ testId="store-input-mobile"
170
+ buttonTestId="store-input-mobile-button"
171
+ onSearchClick={handlerExpandSearch}
172
+ sort={searchInput?.sort}
173
+ hidden={!searchExpanded}
174
+ aria-hidden={!searchExpanded}
175
+ />
176
+ )}
177
+ {!isMobile && <ButtonSignIn.Component {...signInButton} />}
175
178
 
176
179
  <CartToggle {...cart} />
177
180
  </NavbarButtons.Component>
@@ -1,11 +1,11 @@
1
1
  import type { AnchorHTMLAttributes } from 'react'
2
2
 
3
- import { NavbarLinksListItem as UINavbarLinksListItem } from '@faststore/ui'
4
3
  import type { NavbarLinksProps as UINavbarLinksProps } from '@faststore/ui'
4
+ import { NavbarLinksListItem as UINavbarLinksListItem } from '@faststore/ui'
5
5
 
6
- import Link from 'src/components/ui/Link'
7
- import RegionButton from 'src/components/region/RegionButton'
8
6
  import type { NavbarProps } from 'src/components/navigation/Navbar'
7
+ import RegionButton from 'src/components/region/RegionButton'
8
+ import Link from 'src/components/ui/Link'
9
9
 
10
10
  import { useOverrideComponents } from 'src/sdk/overrides/OverrideContext'
11
11
 
@@ -13,7 +13,6 @@ import { SearchState } from '@faststore/sdk'
13
13
  import { ProductSummary_ProductFragment } from '@generated/graphql'
14
14
  import SearchProductItem from 'src/components/search/SearchProductItem'
15
15
  import { formatSearchPath } from 'src/sdk/search/formatSearchPath'
16
-
17
16
  interface SearchDropdownProps {
18
17
  sort: SearchState['sort']
19
18
  [key: string]: any
@@ -1,16 +1,4 @@
1
- import type { SearchEvent, SearchState } from '@faststore/sdk'
2
-
3
- import type {
4
- SearchInputFieldProps as UISearchInputFieldProps,
5
- SearchInputFieldRef as UISearchInputFieldRef,
6
- } from '@faststore/ui'
7
- import {
8
- SearchProviderContextValue,
9
- SearchInput as UISearchInput,
10
- SearchInputField as UISearchInputField,
11
- } from '@faststore/ui'
12
- import { useRouter } from 'next/router'
13
- import type { CSSProperties } from 'react'
1
+ import type { CSSProperties, SetStateAction } from 'react'
14
2
  import {
15
3
  Suspense,
16
4
  forwardRef,
@@ -21,14 +9,40 @@ import {
21
9
  useState,
22
10
  } from 'react'
23
11
 
12
+ import dynamic from 'next/dynamic'
13
+ import { useRouter } from 'next/router'
14
+
15
+ import type { SearchEvent, SearchState } from '@faststore/sdk'
16
+
17
+ import {
18
+ Icon as UIIcon,
19
+ IconButton as UIIconButton,
20
+ SearchInput as UISearchInput,
21
+ } from '@faststore/ui'
22
+
23
+ import type {
24
+ SearchInputFieldProps as UISearchInputFieldProps,
25
+ SearchInputFieldRef as UISearchInputFieldRef,
26
+ } from '@faststore/ui'
27
+
28
+ import { SearchProviderContextValue } from '@faststore/ui'
29
+
24
30
  import useSearchHistory from 'src/sdk/search/useSearchHistory'
25
31
  import useSuggestions from 'src/sdk/search/useSuggestions'
26
32
  import useOnClickOutside from 'src/sdk/ui/useOnClickOutside'
27
33
 
34
+ import { formatSearchPath } from 'src/sdk/search/formatSearchPath'
35
+
28
36
  const SearchDropdown = lazy(
37
+ /* webpackChunkName: "SearchDropdown" */
29
38
  () => import('src/components/search/SearchDropdown')
30
39
  )
31
40
 
41
+ const UISearchInputField = dynamic<UISearchInputFieldProps & any>(() =>
42
+ /* webpackChunkName: "UISearchInputField" */
43
+ import('@faststore/ui').then((module) => module.SearchInputField)
44
+ )
45
+
32
46
  const MAX_SUGGESTIONS = 5
33
47
 
34
48
  export type SearchInputProps = {
@@ -64,6 +78,7 @@ const SearchInput = forwardRef<SearchInputRef, SearchInputProps>(
64
78
  },
65
79
  ref
66
80
  ) {
81
+ const { hidden } = otherProps
67
82
  const [searchQuery, setSearchQuery] = useState<string>('')
68
83
  const searchQueryDeferred = useDeferredValue(searchQuery)
69
84
  const [searchDropdownVisible, setSearchDropdownVisible] =
@@ -100,27 +115,39 @@ const SearchInput = forwardRef<SearchInputRef, SearchInputProps>(
100
115
  )
101
116
  const isLoading = !error && !data
102
117
 
118
+ const buttonProps = {
119
+ onClick: onSearchClick,
120
+ testId: buttonTestId,
121
+ }
122
+
103
123
  return (
104
- <UISearchInput
105
- ref={searchRef}
106
- visibleDropdown={searchDropdownVisible}
107
- onSearchSelection={onSearchSelection}
108
- term={searchQueryDeferred}
109
- terms={terms}
110
- products={products}
111
- isLoading={isLoading}
112
- >
113
- <UISearchInputField
114
- ref={ref}
115
- buttonProps={{
116
- onClick: onSearchClick,
117
- testId: buttonTestId,
118
- }}
119
- placeholder={placeholder}
120
- onChange={(e) => setSearchQuery(e.target.value)}
121
- onSubmit={(term) => {
122
- import('src/sdk/search/formatSearchPath').then(
123
- ({ formatSearchPath }) => {
124
+ <>
125
+ {hidden ? (
126
+ <UIIconButton
127
+ type="submit"
128
+ aria-label="Submit Search"
129
+ icon={<UIIcon name="MagnifyingGlass" />}
130
+ size="small"
131
+ {...buttonProps}
132
+ />
133
+ ) : (
134
+ <UISearchInput
135
+ ref={searchRef}
136
+ visibleDropdown={searchDropdownVisible}
137
+ onSearchSelection={onSearchSelection}
138
+ term={searchQueryDeferred}
139
+ terms={terms}
140
+ products={products}
141
+ isLoading={isLoading}
142
+ >
143
+ <UISearchInputField
144
+ ref={ref}
145
+ buttonProps={buttonProps}
146
+ placeholder={placeholder}
147
+ onChange={(e: { target: { value: SetStateAction<string> } }) =>
148
+ setSearchQuery(e.target.value)
149
+ }
150
+ onSubmit={(term: string) => {
124
151
  const path = formatSearchPath({
125
152
  term,
126
153
  sort: sort as SearchState['sort'],
@@ -128,20 +155,20 @@ const SearchInput = forwardRef<SearchInputRef, SearchInputProps>(
128
155
 
129
156
  onSearchSelection(term, path)
130
157
  router.push(path)
131
- }
132
- )
133
- }}
134
- onFocus={() => setSearchDropdownVisible(true)}
135
- value={searchQuery}
136
- {...otherProps}
137
- />
138
-
139
- {searchDropdownVisible && (
140
- <Suspense fallback={null}>
141
- <SearchDropdown sort={sort as SearchState['sort']} />
142
- </Suspense>
158
+ }}
159
+ onFocus={() => setSearchDropdownVisible(true)}
160
+ value={searchQuery}
161
+ {...otherProps}
162
+ />
163
+
164
+ {searchDropdownVisible && (
165
+ <Suspense fallback={null}>
166
+ <SearchDropdown sort={sort as SearchState['sort']} />
167
+ </Suspense>
168
+ )}
169
+ </UISearchInput>
143
170
  )}
144
- </UISearchInput>
171
+ </>
145
172
  )
146
173
  }
147
174
  )
@@ -0,0 +1,65 @@
1
+ /*
2
+ * This middleware is disabled by default. Only stores that are in
3
+ * homebrew and want this functionality will be able to enable it via
4
+ * a feature flag. When the flag is active, the CLI at build time will
5
+ * check whether the ENABLE_REDIRECTS_MIDDLEWARE flag is set or not,
6
+ * if so, the file name will be changed to middleware.ts and nextjs
7
+ * will know how to automatically deal with it.
8
+ */
9
+
10
+ import { NextResponse } from 'next/server'
11
+ import type { NextRequest } from 'next/server'
12
+ import storeConfig from 'discovery.config'
13
+
14
+ type Redirect = {
15
+ from: string
16
+ to: string
17
+ type: 'permanent' | 'temporary'
18
+ }
19
+ interface RedirectsClient {
20
+ get(from: string): Promise<Redirect | null>
21
+ }
22
+
23
+ class DynamoRedirectsClient implements RedirectsClient {
24
+ async get(from: string): Promise<Redirect | null> {
25
+ // TODO: Implement DynamoDB client. Ensure that the cluster has access to DynamoDB first.
26
+ return null
27
+ }
28
+ }
29
+
30
+ const redirectsClient = new DynamoRedirectsClient()
31
+
32
+ export async function middleware(request: NextRequest) {
33
+ const { pathname } = request.nextUrl
34
+
35
+ const redirect = await redirectsClient.get(pathname)
36
+
37
+ if (redirect) {
38
+ const redirectUrl = new URL(redirect.to, storeConfig.storeUrl)
39
+ const redirectStatusCode = redirect.type === 'permanent' ? 301 : 302
40
+
41
+ const response = NextResponse.redirect(redirectUrl, redirectStatusCode)
42
+
43
+ response.headers.set(
44
+ 'Cache-Control',
45
+ 'public, max-age=300, stale-while-revalidate=31536000'
46
+ )
47
+
48
+ return response
49
+ }
50
+
51
+ return NextResponse.next()
52
+ }
53
+
54
+ export const config = {
55
+ matcher: [
56
+ /*
57
+ * Match all request paths except for the ones starting with:
58
+ * - api (API routes)
59
+ * - _next/static (static files)
60
+ * - _next/image (image optimization files)
61
+ * - favicon.ico (favicon file)
62
+ */
63
+ '/((?!api|_next/static|_next/image|favicon.ico).*)',
64
+ ],
65
+ }
@@ -1 +0,0 @@
1
- "use strict";exports.id=2524,exports.ids=[2524],exports.modules={2524:(e,a,s)=>{s.d(a,{X:()=>useSearchState,j:()=>initialize});var t=s(6689),r=s(2339);let initialize=({sort:e="score_desc",selectedFacets:a=[],term:s=null,base:t="/",page:r=0,passThrough:l=new URLSearchParams}={})=>({sort:e,selectedFacets:a,term:s,base:t,page:r,passThrough:l}),equals=(e,a)=>(0,r.Z)(e).href===(0,r.Z)(a).href,useSearchState=(e,a)=>{let s=(0,t.useMemo)(()=>initialize(e),[e]);return(0,t.useMemo)(()=>({state:s,setState:e=>!equals(e,s)&&a((0,r.Z)(e))}),[a,s])}},2339:(e,a,s)=>{s.d(a,{Z:()=>__WEBPACK_DEFAULT_EXPORT__});let __WEBPACK_DEFAULT_EXPORT__=e=>{let a=new URL(e.base,"http://localhost"),{page:s,selectedFacets:t,sort:r,term:l,passThrough:i}=e;null!==l&&a.searchParams.set("q",l);let o=new Set;for(let e of t)a.searchParams.append(e.key,e.value),o.add(e.key);if(t.length>0&&a.searchParams.set("facets",Array.from(o).join(",")),a.searchParams.set("sort",r),a.searchParams.set("page",s.toString()),i)for(let[e,s]of i.entries())a.searchParams.append(e,s);return a}}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=3295,exports.ids=[3295],exports.modules={1120:(r,t,e)=>{e.r(t),e.d(t,{formatSearchPath:()=>formatSearchPath});var a=e(2339),s=e(2524);let formatSearchPath=({term:r,sort:t})=>{let{pathname:e,search:o}=(0,a.Z)((0,s.j)({term:r,sort:t,base:"/s"}));return`${e}${o}`}}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=8188,exports.ids=[8188],exports.modules={9380:(e,t,r)=>{r.d(t,{n:()=>createCartStore});var s=r(2254),i=r(9578);let createCartStore=(e,t,r="fs::cart")=>{let a=(0,i.M)(e,r,t),getItem=e=>a.read().items.find(t=>t.id===e);return{...a,getItem,addItem:e=>{if(!e.id)throw new s.q("You must provide an `id` for items");if(e.quantity<0)throw new s.q("Item quantity needs to be higher than zero");let t=a.read(),r=getItem(e.id),i=r?{...e,quantity:r.quantity+e.quantity}:e;a.set({...t,items:r?t.items.map(e=>e===r?i:e):[...t.items,i]})},updateItemQuantity:(e,t)=>{let r=a.read(),i=getItem(e);if(!i)throw new s.q(`Item with id not found: ${e}`);let n={...i,quantity:t};a.set({...r,items:r.items.map(e=>e===i?n:e).filter(e=>e.quantity>0)})},removeItem:e=>{let t=a.read(),r=getItem(e);a.set({...t,items:t.items.filter(e=>e!==r)})},emptyCart:()=>a.set({...a.read(),items:[]}),inCart:e=>!!getItem(e),isEmpty:()=>0===a.read().items.length}}},8987:(e,t,r)=>{r.d(t,{S:()=>createSessionStore});var s=r(9578);let createSessionStore=(e,t,r="fs::session")=>(0,s.M)(e,r,t)},3365:(e,t,r)=>{r.d(t,{M:()=>createStore});let createStore=e=>{let t=new Set,r=new Set,s=e;return{set:e=>{s=e,r.forEach(e=>e()),r.clear(),t.forEach(t=>{let s=t(e);"function"==typeof s&&r.add(s)})},read:()=>s,readInitial:()=>e,subscribe:e=>(t.add(e),()=>{t.delete(e)})}}},9578:(e,t,r)=>{r.d(t,{M:()=>createStore});var s=r(4375),i=r(5214),a=r(8901),n=r(8956),d=r(3365);let identity=e=>e,createStore=(e,t,r)=>(0,n.q)([t?(0,a.r)(t):identity,t?(0,s.R)(t):identity,r?(0,i.A)(r):identity],(0,d.M)(e))},5214:(e,t,r)=>{r.d(t,{A:()=>optimistic});let trivial=async()=>null,optimistic=(e=trivial)=>{let t=Promise.resolve();return r=>(r.subscribe(s=>{let i=!1,handler=async()=>{if(i)return;let t=await e(s);i||null===t||r.set(t)};return t=t.then(handler),()=>{i=!0}}),r)}},4375:(e,t,r)=>{r.d(t,{R:()=>persisted});var s=r(3430);let getIDB=async e=>{try{return await (0,s.get)(e)}catch(e){return}},setIDB=async(e,t)=>{try{await (0,s.set)(e,t)}catch(e){}},debounce=(e,t)=>{let r;return(...s)=>{clearTimeout(r),r=setTimeout(()=>{e(...s)},t)}},persisted=e=>t=>{let handler=async()=>{let r=await getIDB(e);"undefined"!=typeof document&&t.set(r??t.readInitial())},r=debounce(handler,500);return r(),globalThis.addEventListener?.("focus",()=>r()),globalThis.document?.addEventListener("visibilitychange",()=>"visible"===document.visibilityState&&r()),t.subscribe(t=>{setIDB(e,t)}),t}},8901:(e,t,r)=>{r.d(t,{r:()=>singleton}),globalThis.faststore_sdk_stores=globalThis.faststore_sdk_stores??new Map;let singleton=e=>t=>{let r=globalThis.faststore_sdk_stores;return r.has(e)||r.set(e,t),r.get(e)}},8956:(e,t,r)=>{r.d(t,{q:()=>compose});let compose=(e,t)=>e.reduce((e,t)=>t(e),t)},2254:(e,t,r)=>{r.d(t,{q:()=>SDKError});let SDKError=class SDKError extends Error{constructor(e){super(`[sdk]: ${e}`)}}}};
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[295],{1120:function(e,a,t){t.r(a),t.d(a,{formatSearchPath:function(){return formatSearchPath}});var r=t(2339),s=t(2524),formatSearchPath=e=>{var{term:a,sort:t}=e,{pathname:n,search:c}=(0,r.Z)((0,s.j)({term:a,sort:t,base:"/s"}));return"".concat(n).concat(c)}},2524:function(e,a,t){t.d(a,{X:function(){return useSearchState},j:function(){return initialize}});var r=t(2784),s=t(2339);let initialize=({sort:e="score_desc",selectedFacets:a=[],term:t=null,base:r="/",page:s=0,passThrough:n=new URLSearchParams}={})=>({sort:e,selectedFacets:a,term:t,base:r,page:s,passThrough:n}),equals=(e,a)=>(0,s.Z)(e).href===(0,s.Z)(a).href,useSearchState=(e,a)=>{let t=(0,r.useMemo)(()=>initialize(e),[e]);return(0,r.useMemo)(()=>({state:t,setState:e=>!equals(e,t)&&a((0,s.Z)(e))}),[a,t])}},2339:function(e,a){a.Z=e=>{let a=new URL(e.base,"http://localhost"),{page:t,selectedFacets:r,sort:s,term:n,passThrough:c}=e;null!==n&&a.searchParams.set("q",n);let u=new Set;for(let e of r)a.searchParams.append(e.key,e.value),u.add(e.key);if(r.length>0&&a.searchParams.set("facets",Array.from(u).join(",")),a.searchParams.set("sort",s),a.searchParams.set("page",t.toString()),c)for(let[e,t]of c.entries())a.searchParams.append(e,t);return a}}}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[343,195],{1153:function(e,t,r){r.r(t),r.d(t,{ANALYTICS_EVENT_TYPE:function(){return n.vi},STORE_EVENT_PREFIX:function(){return n.Mi},SearchProvider:function(){return c.z},UIContext:function(){return g},UIProvider:function(){return Provider_Provider},compose:function(){return I.q},createBaseStore:function(){return m.M},createCartStore:function(){return v.n},createSessionStore:function(){return p.S},createStore:function(){return y.M},formatSearchState:function(){return u.Z},initSearchState:function(){return i.j},isSearchSort:function(){return s.wb},optimistic:function(){return _.A},parseSearchState:function(){return o.Q},persisted:function(){return w.R},removeFacet:function(){return s.Ru},sendAnalyticsEvent:function(){return sendAnalyticsEvent},setFacet:function(){return s.uL},singleton:function(){return P.r},toggleFacet:function(){return s.wB},toggleFacets:function(){return s.a2},useAnalyticsEvent:function(){return a.W},useGlobalUIState:function(){return useGlobalUIState},usePagination:function(){return f.h},useSearch:function(){return l.R}});var n=r(4950);let sendAnalyticsEvent=e=>{try{window.postMessage((0,n.re)(e),window.origin)}catch(e){console.error(e)}};var a=r(8529),o=r(6142),u=r(2339),i=r(2524),s=r(9664),c=r(1197),l=r(9029),f=r(1341),d=r(2784);let g=(0,d.createContext)(void 0);g.displayName="UIContext";let S={displayMinicart:!1},reducer=e=>{let t={OPEN_MINICART:e=>({...e,displayMinicart:!0}),CLOSE_MINICART:e=>({...e,displayMinicart:!1}),...e};return(e,{type:r,data:n})=>{let a=t[r];if("function"==typeof a)return a(e,n);throw Error("Unknown UI state")}},defaultEffects=()=>({}),Provider_Provider=({children:e,actions:t={},effects:r=defaultEffects,initialState:n={}})=>{let[a,o]=(0,d.useReducer)(reducer(t),{...S,...n}),u=(0,d.useMemo)(()=>({...r(o),openMinicart:()=>o({type:"OPEN_MINICART"}),closeMinicart:()=>o({type:"CLOSE_MINICART"})}),[r]),i=(0,d.useMemo)(()=>({...a,...u}),[u,a]);return d.createElement(g.Provider,{value:i},e)};var h=r(7943);let useGlobalUIState=()=>(0,h.q)(g);var p=r(8987),v=r(9380),m=r(3365),y=r(9578),_=r(5214),w=r(4375),P=r(8901),I=r(8956)},1197:function(e,t,r){r.d(t,{_:function(){return u},z:function(){return Provider}});var n=r(2784),a=r(2254);function setPagesSessionStorage(e){try{let t=window.history.state?.key;if(!t)return;let r=`__fs_gallery_page_${t}`;sessionStorage.setItem(r,JSON.stringify(e))}catch(e){return}}let reducer=(e,t)=>{switch(t.type){case"addPrev":{let t=e[0]-1,r=[t,...e];return setPagesSessionStorage(r),r}case"addNext":{let t=Number(e[e.length-1])+1,r=[...e,t];return setPagesSessionStorage(r),r}case"reset":{let{payload:e}=t,r=[e];return setPagesSessionStorage(r),r}default:throw new a.q("Unknown action for infinite search")}},useSearchInfiniteState=e=>{let[t,r]=(0,n.useReducer)(reducer,void 0,()=>(function(){try{let e=window.history.state?.key;if(!e)return null;let t=`__fs_gallery_page_${e}`,r=sessionStorage.getItem(t);return r?JSON.parse(r):null}catch(e){return null}})()??[e]),a=(0,n.useMemo)(()=>({addPrevPage:()=>r({type:"addPrev"}),addNextPage:()=>r({type:"addNext"}),resetInfiniteScroll:e=>r({type:"reset",payload:e})}),[]);return{pages:t,...a}};var o=r(2524);let u=(0,n.createContext)(void 0),Provider=({children:e,itemsPerPage:t,onChange:r,...a})=>{let{state:i,...s}=(0,o.X)(a,r),{pages:c,...l}=useSearchInfiniteState(i.page),f=(0,n.useMemo)(()=>({state:i,...s,pages:c,...l,itemsPerPage:t}),[l,t,c,s,i]);return n.createElement(u.Provider,{value:f},e)}},9664:function(e,t,r){r.d(t,{Ru:function(){return removeFacet},a2:function(){return toggleFacets},uL:function(){return setFacet},wB:function(){return toggleFacet},wb:function(){return isSearchSort}});var n=r(2254);let a=new Set(["price_desc","price_asc","orders_desc","name_desc","name_asc","release_desc","discount_desc","score_desc"]),isSearchSort=e=>a.has(e),removeFacet=(e,t)=>{let{value:r}=t,a=e.findIndex(e=>e.value===r);if(a<0)throw new n.q(`Cannot remove ${r} from search params`);return e.filter((e,t)=>t!==a)},setFacet=(e,t,r)=>{if(!0===r){let r=e.findIndex(e=>e.key===t.key);if(r>-1)return e.map((e,n)=>n===r?t:e)}return[...e,t]},toggleFacet=(e,t)=>{let r=e.find(e=>e.key===t.key&&e.value===t.value);return void 0!==r?removeFacet(e,t):setFacet(e,t,!1)},toggleFacets=(e,t)=>t.reduce((e,t)=>toggleFacet(e,t),e)},6142:function(e,t,r){r.d(t,{Q:function(){return parse}});var n=r(2254),a=r(9664),o=r(2524);let parse=({pathname:e,searchParams:t})=>{let r=(0,o.j)({base:e,term:t.get("q")??null,sort:t.get("sort")??void 0,page:Number(t.get("page")??0)});if(!(0,a.wb)(r.sort))throw new n.q(`Uknown sorting option ${r.sort}`);let u=t.get("facets")?.split(",")??[];for(let e of u){let n=t.getAll(e);for(let t of n)r.selectedFacets=(0,a.uL)(r.selectedFacets,{key:e,value:t})}return r.passThrough=function(e,t){let r=new URLSearchParams,n=new Set(t),a=Array.from(e.entries());for(let[e,t]of a)n.has(e)||r.append(e,t);return r}(t,["q","sort","page","facets",...u]),r}},1341:function(e,t,r){r.d(t,{h:function(){return usePagination}});var n=r(2784),a=r(2339),o=r(9029);let getLink=e=>{let{pathname:t,search:r}=(0,a.Z)(e);return`${t}${r}`},usePagination=e=>{let{pages:t,itemsPerPage:r,state:a}=(0,o.R)(),u=Math.ceil(e/r),i=Number(t[t.length-1])+1,s=t[0]-1;return(0,n.useMemo)(()=>({next:i<u&&{cursor:i,link:getLink({...a,page:i})},prev:s>-1&&{cursor:s,link:getLink({...a,page:s})}}),[i,s,a,u])}},9029:function(e,t,r){r.d(t,{R:function(){return useSearch}});var n=r(1197),a=r(7943);let useSearch=()=>(0,a.q)(n._)},2524:function(e,t,r){r.d(t,{X:function(){return useSearchState},j:function(){return initialize}});var n=r(2784),a=r(2339);let initialize=({sort:e="score_desc",selectedFacets:t=[],term:r=null,base:n="/",page:a=0,passThrough:o=new URLSearchParams}={})=>({sort:e,selectedFacets:t,term:r,base:n,page:a,passThrough:o}),equals=(e,t)=>(0,a.Z)(e).href===(0,a.Z)(t).href,useSearchState=(e,t)=>{let r=(0,n.useMemo)(()=>initialize(e),[e]);return(0,n.useMemo)(()=>({state:r,setState:e=>!equals(e,r)&&t((0,a.Z)(e))}),[t,r])}},2339:function(e,t){t.Z=e=>{let t=new URL(e.base,"http://localhost"),{page:r,selectedFacets:n,sort:a,term:o,passThrough:u}=e;null!==o&&t.searchParams.set("q",o);let i=new Set;for(let e of n)t.searchParams.append(e.key,e.value),i.add(e.key);if(n.length>0&&t.searchParams.set("facets",Array.from(i).join(",")),t.searchParams.set("sort",a),t.searchParams.set("page",r.toString()),u)for(let[e,r]of u.entries())t.searchParams.append(e,r);return t}},7943:function(e,t,r){r.d(t,{q:function(){return useContext}});var n=r(2784),a=r(2254);let useContext=e=>{let t=(0,n.useContext)(e);if(void 0===t)throw new a.q(`${e.displayName??"Context"} needs to be on the React tree`);return t}}}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[523,295],{1933:function(e,t,r){r.d(t,{R:function(){return useSearch}});var a=r(2784),n=r(101);let useSearch=()=>{let e=(0,a.useContext)(n.c);return e?{inContext:!0,values:e}:{inContext:!1}}},2174:function(e,t,r){var a=r(2784),n=r(1933),c=r(4564);t.Z=({testId:e="fs-search-auto-complete",children:t,...r})=>{let{inContext:o,values:s}=(0,n.R)();return o&&(s.terms.length<=0||s.term.length<=0)?null:a.createElement("section",{"data-testid":e,"data-fs-search-auto-complete":!0,...r},a.createElement(c.Z,{as:"ol"},t))}},757:function(e,t,r){var a=r(2784),n=r(2614),c=r(727);t.Z=({testId:e="fs-search-auto-complete-term",suggestion:t,term:r,linkProps:o,icon:s=a.createElement(n.Z,{name:"MagnifyingGlass",width:18,height:18})})=>{let i=t.toLowerCase().split(r.toLowerCase());return a.createElement("li",{"data-fs-search-auto-complete-item":!0,"data-testid":e},a.createElement(c.Z,{...o,"data-fs-search-auto-complete-item-link":!0,variant:"display"},a.createElement("span",{"data-fs-search-auto-complete-item-icon":!0},s),a.createElement("p",null,i.map((e,n)=>a.createElement(a.Fragment,{key:[e,n].join()},e.length>0&&a.createElement("strong",{"data-fs-search-auto-complete-item-suggestion":!0},0===n?e.charAt(0).toUpperCase()+e.slice(1):e),n!==i.length-1&&(0===n?r.split("").map((e,r)=>0===r&&0===t.indexOf(e.toUpperCase())?e.toUpperCase():e.toLowerCase()).join(""):r.toLowerCase()))))))}},4583:function(e,t,r){var a=r(2784),n=r(1933);let SearchLoading=()=>{let{inContext:e,values:t}=(0,n.R)();return a.createElement(a.Fragment,null,e&&t.isLoading&&a.createElement("p",{"data-fs-search-dropdown-loading-text":!0},"Loading..."))},c=(0,a.forwardRef)(function({testId:e="fs-search-dropdown",children:t,...r},n){return a.createElement("div",{ref:n,"data-fs-search-dropdown":!0,"data-testid":e,...r},a.createElement("section",null,a.createElement(SearchLoading,null),t))});t.Z=c},2701:function(e,t,r){var a=r(2784),n=r(1933),c=r(3339),o=r(4564);t.Z=({testId:e="fs-search-history",title:t="History",clearLabel:r="Clear History",onClear:s,children:i,...l})=>{let{inContext:u,values:f}=(0,n.R)();return u&&(0!==f.term.length||f.isLoading)?null:a.createElement("section",{"data-testid":e,"data-fs-search-history":!0,...l},a.createElement("header",{"data-fs-search-history-header":!0},a.createElement("p",{"data-fs-search-history-title":!0},t),a.createElement(c.Z,{variant:"tertiary",onClick:s,size:"small"},r)),a.createElement(o.Z,{as:"ol"},i))}},9482:function(e,t,r){var a=r(2784),n=r(2614),c=r(727);t.Z=({testId:e="fs-search-history-term",value:t,linkProps:r,icon:o=a.createElement(n.Z,{name:"ClockClockwise",width:18,height:18})})=>a.createElement("li",{"data-fs-search-history-item":!0,"data-testid":e},a.createElement(c.Z,{...r,"data-fs-search-history-item-link":!0,variant:"display"},a.createElement("span",{"data-fs-search-history-item-icon":!0},o),a.createElement("span",null,t)))},6035:function(e,t,r){var a=r(2784),n=r(727);let c=(0,a.forwardRef)(function({testId:e="fs-search-product-item",linkProps:t,children:r},c){return a.createElement("li",{ref:c,"data-fs-search-product-item":!0,"data-testid":e},a.createElement(n.Z,{...t,"data-fs-search-product-item-link":!0,variant:"display"},r))});t.Z=c},3454:function(e,t,r){var a=r(2784),n=r(9088);let c=(0,a.forwardRef)(function({price:e,title:t,...r},c){return a.createElement("section",{ref:c,"data-fs-search-product-item-content":!0,...r},a.createElement("p",{"data-fs-search-product-item-title":!0},t),0!==e.value&&a.createElement(n.Z,{"data-fs-search-product-item-prices":!0,listPrice:e.listPrice,value:e.value,formatter:e.formatter}))});t.Z=c},9082:function(e,t,r){var a=r(2784);let n=(0,a.forwardRef)(function({testId:e="fs-search-product-item-image",children:t,...r},n){return a.createElement("div",{ref:n,"data-fs-search-product-item-image":!0,"data-testid":e,...r},t)});t.Z=n},9994:function(e,t,r){var a=r(2784),n=r(1933),c=r(4564);t.Z=({testId:e="fs-search-products",title:t="Suggested Products",children:r,...o})=>{let{inContext:s,values:i}=(0,n.R)();return s&&i.products.length<=0?null:a.createElement("section",{"data-testid":e,"data-fs-search-products":!0,...o},a.createElement("header",{"data-fs-search-products-header":!0},a.createElement("p",{"data-fs-search-products-title":!0},t)),a.createElement(c.Z,{as:"ol"},r))}},3311:function(e,t,r){var a=r(2784),n=r(1933),c=r(4564);let o=(0,a.forwardRef)(function({testId:e="fs-top-search",title:t="Top Search",children:r,...o},s){let{inContext:i,values:l}=(0,n.R)();return i&&(0!==l.term.length||l.isLoading)?null:a.createElement("section",{ref:s,"data-testid":e,"data-fs-search-top":!0,...o},a.createElement("header",{"data-fs-search-top-header":!0},a.createElement("p",{"data-fs-search-top-title":!0},t)),a.createElement(c.Z,{as:"ol"},r))});t.Z=o},1287:function(e,t,r){var a=r(2784),n=r(727),c=r(276);let o=(0,a.forwardRef)(function({testId:e="fs-top-search-term",value:t,linkProps:r,index:o},s){return a.createElement("li",{ref:s,"data-fs-search-top-item":!0,"data-testid":e},a.createElement(n.Z,{...r,"data-fs-search-top-item-link":!0,variant:"display"},a.createElement(c.Z,{"data-fs-search-top-item-badge":!0,variant:"info"},o+1),t))});t.Z=o},6942:function(e,t,r){r.r(t),r.d(t,{default:function(){return search_SearchDropdown_SearchDropdown}});var a=r(9499),n=r(4730),c=r(1933),o=r(4583),s=r(2174),i=r(757),l=r(9994),u=r(2701),f=r(9482),h=r(8543),d=r(2322);function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function _objectSpread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ownKeys(Object(r),!0).forEach(function(t){(0,a.Z)(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ownKeys(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var search_SearchHistory_SearchHistory=e=>{var t=Object.assign({},e),{values:{onSearchSelection:r}}=(0,c.R)(),{searchHistory:a,clearSearchHistory:n}=(0,h.Z)();return a.length?(0,d.jsx)(u.Z,_objectSpread(_objectSpread({title:"History",onClear:n},t),{},{children:a.map(e=>(0,d.jsx)(f.Z,{value:e.term,linkProps:{href:e.path,onClick:()=>null==r?void 0:r(e.term,e.path)}},e.term))})):null},p=r(3311),m=r(1287),y=r(1120),v=r(3523),S=r(7553),b=r(5238),j=v.M,search_useTopSearch=function(){var{channel:e,locale:t}=(0,b.kP)(),{data:r,error:a}=(0,S.aM)(j,{term:"",selectedFacets:[{key:"channel",value:null!=e?e:""},{key:"locale",value:t}]});return{data:r,error:a}},O=["topTerms","sort"];function SearchTop_ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function SearchTop_objectSpread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?SearchTop_ownKeys(Object(r),!0).forEach(function(t){(0,a.Z)(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):SearchTop_ownKeys(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var search_SearchTop_SearchTop=function(e){var t,{topTerms:r=[],sort:a}=e,o=(0,n.Z)(e,O),{values:{onSearchSelection:s}}=(0,c.R)(),{data:i}=search_useTopSearch(),l=(null!==(t=null==i?void 0:i.search.suggestions.terms)&&void 0!==t?t:r).slice(0,5);return 0===l.length?null:(0,d.jsx)(p.Z,SearchTop_objectSpread(SearchTop_objectSpread({title:"Top Search"},o),{},{children:l.map((e,t)=>(0,d.jsx)(m.Z,{value:e.value,index:t,linkProps:{href:(0,y.formatSearchPath)({term:e.value,sort:a}),onClick:()=>null==s?void 0:s(e.value,(0,y.formatSearchPath)({term:e.value,sort:a}))}},t))}))},w=r(6035),P=r(9082),g=r(3454),_=r(8918),E=r(113),Z=r(5679),k=["product","index"],D=["href","onClick"];function SearchProductItem_ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function SearchProductItem_objectSpread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?SearchProductItem_ownKeys(Object(r),!0).forEach(function(t){(0,a.Z)(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):SearchProductItem_ownKeys(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var search_SearchProductItem_SearchProductItem=function(e){var{product:t,index:r}=e,a=(0,n.Z)(e,k),{values:{onSearchSelection:o}}=(0,c.R)(),s=(0,Z.w)({product:t,selectedOffer:0,index:r}),{href:i,onClick:l}=s,u=(0,n.Z)(s,D),{isVariantOf:{name:f},image:[h],offers:{lowPrice:p,offers:[{listPrice:m}]}}=t,y=SearchProductItem_objectSpread({href:i,onClick:()=>{l(),null==o||o(f,i)}},u);return(0,d.jsxs)(w.Z,SearchProductItem_objectSpread(SearchProductItem_objectSpread({linkProps:y},a),{},{children:[(0,d.jsx)(P.Z,{children:(0,d.jsx)(_.Z,{src:h.url,alt:h.alternateName,width:56,height:56})}),(0,d.jsx)(g.Z,{title:f,price:{value:p,listPrice:m,formatter:E.P}})]}))},C=["sort"];function SearchDropdown_ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function SearchDropdown_objectSpread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?SearchDropdown_ownKeys(Object(r),!0).forEach(function(t){(0,a.Z)(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):SearchDropdown_ownKeys(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var search_SearchDropdown_SearchDropdown=function(e){var{sort:t}=e,r=(0,n.Z)(e,C),{values:{onSearchSelection:a,products:u,term:f,terms:h}}=(0,c.R)();return(0,d.jsxs)(o.Z,SearchDropdown_objectSpread(SearchDropdown_objectSpread({},r),{},{children:[(0,d.jsx)(search_SearchHistory_SearchHistory,{sort:t}),(0,d.jsx)(search_SearchTop_SearchTop,{sort:t}),(0,d.jsx)(s.Z,{children:null==h?void 0:h.map(e=>{var{value:r}=e;return(0,d.jsx)(i.Z,{term:f,suggestion:r,linkProps:{href:(0,y.formatSearchPath)({term:r,sort:t}),onClick:()=>null==a?void 0:a(r,(0,y.formatSearchPath)({term:r,sort:t}))}},r)})}),(0,d.jsx)(l.Z,{children:u.map((e,t)=>(0,d.jsx)(search_SearchProductItem_SearchProductItem,{product:e,index:t},e.id))})]}))}},5679:function(e,t,r){r.d(t,{w:function(){return useProductLink}});var a=r(2784),n=r(5238),useProductLink=e=>{var{index:t,product:c,selectedOffer:o}=e,{slug:s}=c,{currency:{code:i}}=(0,n.kP)(),l=(0,a.useCallback)(()=>{r.e(343).then(r.bind(r,1153)).then(e=>{var{sendAnalyticsEvent:r}=e;r({name:"select_item",params:{items:[{item_id:c.isVariantOf.productGroupID,item_name:c.isVariantOf.name,item_brand:c.brand.name,item_variant:c.sku,index:t,price:c.offers.offers[o].price,discount:c.offers.offers[o].listPrice-c.offers.offers[o].price,currency:i,item_variant_name:c.name,product_reference_id:c.gtin}]}}),r({name:"search_select_item",params:{url:window.location.href,items:[{item_id:c.isVariantOf.productGroupID,item_variant:c.sku,index:t}]}})})},[i,c,t,o]);return{href:"/".concat(s,"/p"),onClick:l,"data-testid":"product-link"}}},1120:function(e,t,r){r.r(t),r.d(t,{formatSearchPath:function(){return formatSearchPath}});var a=r(2339),n=r(2524),formatSearchPath=e=>{var{term:t,sort:r}=e,{pathname:c,search:o}=(0,a.Z)((0,n.j)({term:t,sort:r,base:"/s"}));return"".concat(c).concat(o)}},2524:function(e,t,r){r.d(t,{X:function(){return useSearchState},j:function(){return initialize}});var a=r(2784),n=r(2339);let initialize=({sort:e="score_desc",selectedFacets:t=[],term:r=null,base:a="/",page:n=0,passThrough:c=new URLSearchParams}={})=>({sort:e,selectedFacets:t,term:r,base:a,page:n,passThrough:c}),equals=(e,t)=>(0,n.Z)(e).href===(0,n.Z)(t).href,useSearchState=(e,t)=>{let r=(0,a.useMemo)(()=>initialize(e),[e]);return(0,a.useMemo)(()=>({state:r,setState:e=>!equals(e,r)&&t((0,n.Z)(e))}),[t,r])}},2339:function(e,t){t.Z=e=>{let t=new URL(e.base,"http://localhost"),{page:r,selectedFacets:a,sort:n,term:c,passThrough:o}=e;null!==c&&t.searchParams.set("q",c);let s=new Set;for(let e of a)t.searchParams.append(e.key,e.value),s.add(e.key);if(a.length>0&&t.searchParams.set("facets",Array.from(s).join(",")),t.searchParams.set("sort",n),t.searchParams.set("page",r.toString()),o)for(let[e,r]of o.entries())t.searchParams.append(e,r);return t}}}]);