@faststore/core 2.1.94 → 2.1.96
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.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +44 -44
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/cache/config.json +3 -3
- package/.next/cache/eslint/.cache_1gneedd +1 -1
- package/.next/cache/next-server.js.nft.json +1 -1
- package/.next/cache/webpack/client-production/0.pack +0 -0
- package/.next/cache/webpack/client-production/index.pack +0 -0
- package/.next/cache/webpack/server-production/0.pack +0 -0
- package/.next/cache/webpack/server-production/index.pack +0 -0
- package/.next/next-server.js.nft.json +1 -1
- package/.next/prerender-manifest.json +1 -1
- package/.next/react-loadable-manifest.json +3 -3
- package/.next/routes-manifest.json +1 -1
- package/.next/server/chunks/183.js +1 -0
- package/.next/server/chunks/350.js +1 -1
- package/.next/server/chunks/530.js +58 -36
- package/.next/server/chunks/574.js +42 -23
- package/.next/server/chunks/576.js +1 -0
- package/.next/server/chunks/74.js +31 -9
- package/.next/server/chunks/907.js +25 -3
- package/.next/server/chunks/98.js +42 -23
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/404.js.nft.json +1 -1
- package/.next/server/pages/500.js.nft.json +1 -1
- package/.next/server/pages/[...slug].js.nft.json +1 -1
- package/.next/server/pages/[slug]/p.js.nft.json +1 -1
- package/.next/server/pages/_app.js.nft.json +1 -1
- package/.next/server/pages/account.js.nft.json +1 -1
- package/.next/server/pages/api/graphql.js +1 -1
- package/.next/server/pages/checkout.js.nft.json +1 -1
- package/.next/server/pages/en-US/404.html +2 -2
- package/.next/server/pages/en-US/500.html +2 -2
- package/.next/server/pages/en-US/account.html +2 -2
- package/.next/server/pages/en-US/checkout.html +2 -2
- package/.next/server/pages/en-US/login.html +2 -2
- package/.next/server/pages/en-US/s.html +2 -2
- package/.next/server/pages/en-US.html +2 -2
- package/.next/server/pages/index.js.nft.json +1 -1
- package/.next/server/pages/login.js.nft.json +1 -1
- package/.next/server/pages/s.js.nft.json +1 -1
- package/.next/server/pages-manifest.json +4 -4
- package/.next/static/8EkJazrZDz4rsTIa4IP5R/_buildManifest.js +1 -0
- package/.next/static/chunks/148.3bb7e05cc5d1c1c4.js +1 -0
- package/.next/static/chunks/238-2ad31f382e7c6f14.js +1 -0
- package/.next/static/chunks/243-8c394e91ccf75fdb.js +1 -0
- package/.next/static/chunks/{530.ec68de379130c11e.js → 530.da3ec94477af00a4.js} +1 -1
- package/.next/static/chunks/548-ab84e9e8b49413ab.js +1 -0
- package/.next/static/chunks/{574.d13dd0afe15cd635.js → 574.70612be06fd1365f.js} +1 -1
- package/.next/static/chunks/603-be78b9dfb8fa6c49.js +1 -0
- package/.next/static/chunks/{738-a5ff304828f20cbf.js → 738-67a288ca3569cdbb.js} +1 -1
- package/.next/static/chunks/98.40c7e17d9de4eb8f.js +1 -0
- package/.next/static/chunks/988.d10040040cdfebbb.js +1 -0
- package/.next/static/chunks/pages/{[...slug]-3f4e5f74ff9436ec.js → [...slug]-ca533c74c22cb787.js} +1 -1
- package/.next/static/chunks/pages/[slug]/p-3383e9b97bffafdd.js +1 -0
- package/.next/static/chunks/pages/{_app-6d0e6ab9a4dd8106.js → _app-40cff0982559d0b8.js} +1 -1
- package/.next/static/chunks/pages/{index-73110361a184aa10.js → index-d521ce4f4e2b89a6.js} +1 -1
- package/.next/static/chunks/pages/s-1f885639c2605ace.js +1 -0
- package/.next/static/chunks/{webpack-92f756189996e763.js → webpack-fac5a4eeea429971.js} +1 -1
- package/.next/trace +80 -80
- package/.turbo/turbo-build.log +5 -5
- package/@generated/graphql/index.ts +8 -0
- package/@generated/graphql/persisted.json +3 -3
- package/README.md +3 -3
- package/cypress/global.js +8 -0
- package/cypress/integration/a11y.test.js +7 -24
- package/cypress/integration/analytics.test.js +78 -87
- package/cypress/integration/cart.test.js +4 -4
- package/cypress/integration/plp.test.js +6 -6
- package/cypress/integration/search.test.js +1 -1
- package/cypress/integration/seo.test.js +14 -14
- package/cypress.config.ts +19 -0
- package/faststore.config.js +1 -0
- package/package.json +8 -8
- package/src/components/cart/CartSidebar/CartSidebar.tsx +41 -27
- package/src/components/sections/ProductGallery/useGalleryQuery.ts +31 -2
- package/src/sdk/analytics/platform/vtex/search.ts +53 -21
- package/src/sdk/analytics/types.ts +14 -0
- package/src/sdk/search/useSuggestions.ts +41 -7
- package/.next/static/chunks/148.582eaa81293ee470.js +0 -1
- package/.next/static/chunks/238-15fad228a6c8b1b5.js +0 -1
- package/.next/static/chunks/243-b4f8e506d156ee41.js +0 -1
- package/.next/static/chunks/548-4ee971bf7bdb3e81.js +0 -1
- package/.next/static/chunks/603-072c8fb73ac35775.js +0 -1
- package/.next/static/chunks/98.1632997dfd4d3a52.js +0 -1
- package/.next/static/chunks/988.afda042dd9ba11d1.js +0 -1
- package/.next/static/chunks/pages/[slug]/p-c36fb1ebf1df3462.js +0 -1
- package/.next/static/chunks/pages/s-51ec424952b59bd0.js +0 -1
- package/.next/static/i157UtW0mfErYKy2acCzJ/_buildManifest.js +0 -1
- package/cypress.json +0 -9
- /package/.next/static/{i157UtW0mfErYKy2acCzJ → 8EkJazrZDz4rsTIa4IP5R}/_ssgManifest.js +0 -0
|
@@ -16,7 +16,7 @@ describe('Home Page Seo', () => {
|
|
|
16
16
|
cy.clearIDB()
|
|
17
17
|
})
|
|
18
18
|
|
|
19
|
-
it
|
|
19
|
+
it('has meta/canonical/link tags', () => {
|
|
20
20
|
cy.visit(pages.home, options)
|
|
21
21
|
cy.waitForHydration()
|
|
22
22
|
|
|
@@ -34,7 +34,7 @@ describe('Home Page Seo', () => {
|
|
|
34
34
|
})
|
|
35
35
|
})
|
|
36
36
|
|
|
37
|
-
it
|
|
37
|
+
it('has structured data', () => {
|
|
38
38
|
cy.visit(pages.home, options)
|
|
39
39
|
cy.waitForHydration()
|
|
40
40
|
|
|
@@ -48,7 +48,7 @@ describe('Home Page Seo', () => {
|
|
|
48
48
|
})
|
|
49
49
|
})
|
|
50
50
|
|
|
51
|
-
it
|
|
51
|
+
it('has OpenGraph tags', () => {
|
|
52
52
|
cy.visit(pages.home, options)
|
|
53
53
|
cy.waitForHydration()
|
|
54
54
|
|
|
@@ -77,7 +77,7 @@ describe('Product Page Seo', () => {
|
|
|
77
77
|
cy.clearIDB()
|
|
78
78
|
})
|
|
79
79
|
|
|
80
|
-
it
|
|
80
|
+
it('has meta/canonical/link tags', () => {
|
|
81
81
|
cy.visit(pages.pdp, options)
|
|
82
82
|
cy.waitForHydration()
|
|
83
83
|
|
|
@@ -95,7 +95,7 @@ describe('Product Page Seo', () => {
|
|
|
95
95
|
})
|
|
96
96
|
})
|
|
97
97
|
|
|
98
|
-
it
|
|
98
|
+
it('has structured data', () => {
|
|
99
99
|
cy.visit(pages.pdp, options)
|
|
100
100
|
cy.waitForHydration()
|
|
101
101
|
|
|
@@ -115,7 +115,7 @@ describe('Product Page Seo', () => {
|
|
|
115
115
|
})
|
|
116
116
|
})
|
|
117
117
|
|
|
118
|
-
it
|
|
118
|
+
it('has OpenGraph tags', () => {
|
|
119
119
|
cy.visit(pages.pdp, options)
|
|
120
120
|
cy.waitForHydration()
|
|
121
121
|
|
|
@@ -162,7 +162,7 @@ describe('Collection Page Seo', () => {
|
|
|
162
162
|
cy.clearIDB()
|
|
163
163
|
})
|
|
164
164
|
|
|
165
|
-
it
|
|
165
|
+
it('has meta/canonical/link tags', () => {
|
|
166
166
|
cy.visit(pages.collection, options)
|
|
167
167
|
cy.waitForHydration()
|
|
168
168
|
|
|
@@ -182,7 +182,7 @@ describe('Collection Page Seo', () => {
|
|
|
182
182
|
})
|
|
183
183
|
})
|
|
184
184
|
|
|
185
|
-
it
|
|
185
|
+
it('has structured data', () => {
|
|
186
186
|
cy.visit(pages.collection, options)
|
|
187
187
|
cy.waitForHydration()
|
|
188
188
|
|
|
@@ -201,7 +201,7 @@ describe('Collection Page Seo', () => {
|
|
|
201
201
|
})
|
|
202
202
|
})
|
|
203
203
|
|
|
204
|
-
it
|
|
204
|
+
it('has OpenGraph tags', () => {
|
|
205
205
|
cy.visit(pages.collection, options)
|
|
206
206
|
cy.waitForHydration()
|
|
207
207
|
|
|
@@ -226,7 +226,7 @@ describe('Collection Page Seo', () => {
|
|
|
226
226
|
})
|
|
227
227
|
|
|
228
228
|
describe('Filtered Collection Page Seo', () => {
|
|
229
|
-
it
|
|
229
|
+
it('has canonical pointing to parent url', () => {
|
|
230
230
|
cy.visit(pages.collection_filtered, options)
|
|
231
231
|
cy.waitForHydration()
|
|
232
232
|
|
|
@@ -239,7 +239,7 @@ describe('Filtered Collection Page Seo', () => {
|
|
|
239
239
|
})
|
|
240
240
|
})
|
|
241
241
|
|
|
242
|
-
it
|
|
242
|
+
it('has structured data', () => {
|
|
243
243
|
cy.visit(pages.collection_filtered, options)
|
|
244
244
|
cy.waitForHydration()
|
|
245
245
|
|
|
@@ -258,7 +258,7 @@ describe('Filtered Collection Page Seo', () => {
|
|
|
258
258
|
})
|
|
259
259
|
})
|
|
260
260
|
|
|
261
|
-
it
|
|
261
|
+
it('has OpenGraph tags', () => {
|
|
262
262
|
cy.visit(pages.collection_filtered, options)
|
|
263
263
|
cy.waitForHydration()
|
|
264
264
|
|
|
@@ -283,7 +283,7 @@ describe('Filtered Collection Page Seo', () => {
|
|
|
283
283
|
})
|
|
284
284
|
|
|
285
285
|
describe('Search Page Seo', () => {
|
|
286
|
-
it
|
|
286
|
+
it('has meta/canonical/link tags', () => {
|
|
287
287
|
cy.visit(pages.search, options)
|
|
288
288
|
cy.waitForHydration()
|
|
289
289
|
|
|
@@ -297,7 +297,7 @@ describe('Search Page Seo', () => {
|
|
|
297
297
|
cy.get('link[rel="canonical"]').should('not.exist')
|
|
298
298
|
})
|
|
299
299
|
|
|
300
|
-
it
|
|
300
|
+
it('has OpenGraph tags', () => {
|
|
301
301
|
cy.visit(pages.search, options)
|
|
302
302
|
cy.waitForHydration()
|
|
303
303
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineConfig } from 'cypress'
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
retries: 0,
|
|
5
|
+
video: true,
|
|
6
|
+
trashAssetsBeforeRuns: true,
|
|
7
|
+
screenshotOnRunFailure: true,
|
|
8
|
+
viewportWidth: 1000,
|
|
9
|
+
viewportHeight: 600,
|
|
10
|
+
e2e: {
|
|
11
|
+
supportFile: 'cypress/support/index.js',
|
|
12
|
+
specPattern: 'cypress/integration/**/*.test.{js,jsx,ts,tsx}',
|
|
13
|
+
setupNodeEvents(on, config) {
|
|
14
|
+
return require('cypress/plugins/index.js')(on, config)
|
|
15
|
+
},
|
|
16
|
+
baseUrl: 'http://localhost:3000/',
|
|
17
|
+
experimentalRunAllSpecs: true,
|
|
18
|
+
},
|
|
19
|
+
})
|
package/faststore.config.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@faststore/core",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.96",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"browserslist": "supports es6-module and not dead",
|
|
6
6
|
"scripts": {
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"typescript": "4.7.3"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
|
-
"@cypress/code-coverage": "^3.
|
|
63
|
+
"@cypress/code-coverage": "^3.12.1",
|
|
64
64
|
"@faststore/eslint-config": "^2.1.82",
|
|
65
65
|
"@faststore/lighthouse": "^1.12.32",
|
|
66
66
|
"@graphql-codegen/cli": "^2.6.2",
|
|
@@ -74,13 +74,13 @@
|
|
|
74
74
|
"@storybook/builder-webpack5": "^6.5.9",
|
|
75
75
|
"@storybook/manager-webpack5": "^6.5.9",
|
|
76
76
|
"@storybook/react": "^6.5.9",
|
|
77
|
-
"@testing-library/cypress": "^
|
|
77
|
+
"@testing-library/cypress": "^10.0.1",
|
|
78
78
|
"@types/cypress": "^1.1.3",
|
|
79
79
|
"@vtex/prettier-config": "1.0.0",
|
|
80
|
-
"axe-core": "^4.
|
|
81
|
-
"cypress": "
|
|
82
|
-
"cypress-axe": "^
|
|
83
|
-
"cypress-wait-until": "^
|
|
80
|
+
"axe-core": "^4.8.1",
|
|
81
|
+
"cypress": "12.17.4",
|
|
82
|
+
"cypress-axe": "^1.5.0",
|
|
83
|
+
"cypress-wait-until": "^2.0.1",
|
|
84
84
|
"dotenv": "^8.2.0",
|
|
85
85
|
"eslint": "^7.32.0",
|
|
86
86
|
"husky": "^5.2.0",
|
|
@@ -110,5 +110,5 @@
|
|
|
110
110
|
"msw": {
|
|
111
111
|
"workerDirectory": "public"
|
|
112
112
|
},
|
|
113
|
-
"gitHead": "
|
|
113
|
+
"gitHead": "7a9d3f22a02b6c882cda586da99a7b073a458ee9"
|
|
114
114
|
}
|
|
@@ -10,7 +10,7 @@ import type { CartSidebarProps as UICartSidebarProps } from '@faststore/ui'
|
|
|
10
10
|
|
|
11
11
|
import type { CurrencyCode, ViewCartEvent } from '@faststore/sdk'
|
|
12
12
|
import { Icon, useFadeEffect, useUI } from '@faststore/ui'
|
|
13
|
-
import { Suspense, useEffect } from 'react'
|
|
13
|
+
import { Suspense, useCallback, useEffect, useMemo } from 'react'
|
|
14
14
|
import { useCart } from 'src/sdk/cart'
|
|
15
15
|
import { useCheckoutButton } from 'src/sdk/cart/useCheckoutButton'
|
|
16
16
|
import { useSession } from 'src/sdk/session'
|
|
@@ -21,6 +21,37 @@ import EmptyCart from '../EmptyCart'
|
|
|
21
21
|
import OrderSummary from '../OrderSummary'
|
|
22
22
|
import styles from './section.module.scss'
|
|
23
23
|
|
|
24
|
+
function useViewCartEvent() {
|
|
25
|
+
const {
|
|
26
|
+
currency: { code },
|
|
27
|
+
} = useSession()
|
|
28
|
+
const { items, gifts, total } = useCart()
|
|
29
|
+
|
|
30
|
+
const sendViewCartEvent = useCallback(() => {
|
|
31
|
+
return sendAnalyticsEvent<ViewCartEvent>({
|
|
32
|
+
name: 'view_cart',
|
|
33
|
+
params: {
|
|
34
|
+
currency: code as CurrencyCode,
|
|
35
|
+
value: total,
|
|
36
|
+
items: items.concat(gifts).map((item) => ({
|
|
37
|
+
item_id: item.itemOffered.isVariantOf.productGroupID,
|
|
38
|
+
item_name: item.itemOffered.isVariantOf.name,
|
|
39
|
+
item_brand: item.itemOffered.brand.name,
|
|
40
|
+
item_variant: item.itemOffered.sku,
|
|
41
|
+
quantity: item.quantity,
|
|
42
|
+
price: item.price,
|
|
43
|
+
discount: item.listPrice - item.price,
|
|
44
|
+
currency: code as CurrencyCode,
|
|
45
|
+
item_variant_name: item.itemOffered.name,
|
|
46
|
+
product_reference_id: item.itemOffered.gtin,
|
|
47
|
+
})),
|
|
48
|
+
},
|
|
49
|
+
})
|
|
50
|
+
}, [code, gifts, items, total])
|
|
51
|
+
|
|
52
|
+
return useMemo(() => ({ sendViewCartEvent }), [sendViewCartEvent])
|
|
53
|
+
}
|
|
54
|
+
|
|
24
55
|
export interface CartSidebarProps {
|
|
25
56
|
title: UICartSidebarProps['title']
|
|
26
57
|
alert?: {
|
|
@@ -52,38 +83,21 @@ function CartSidebar({
|
|
|
52
83
|
icon: { icon: checkoutButtonIcon, alt: checkoutButtonIconAlt },
|
|
53
84
|
},
|
|
54
85
|
}: CartSidebarProps) {
|
|
55
|
-
const { currency } = useSession()
|
|
56
86
|
const btnProps = useCheckoutButton()
|
|
57
|
-
const
|
|
87
|
+
const { items, gifts, totalItems, isValidating, subTotal, total } = useCart()
|
|
58
88
|
const { cart: displayCart, closeCart } = useUI()
|
|
59
89
|
const { fadeOut } = useFadeEffect()
|
|
90
|
+
const { sendViewCartEvent } = useViewCartEvent()
|
|
60
91
|
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
const isEmpty = items.length === 0
|
|
92
|
+
const isEmpty = useMemo(() => items.length === 0, [items])
|
|
64
93
|
|
|
65
94
|
useEffect(() => {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
item_id: item.itemOffered.isVariantOf.productGroupID,
|
|
73
|
-
item_name: item.itemOffered.isVariantOf.name,
|
|
74
|
-
item_brand: item.itemOffered.brand.name,
|
|
75
|
-
item_variant: item.itemOffered.sku,
|
|
76
|
-
quantity: item.quantity,
|
|
77
|
-
price: item.price,
|
|
78
|
-
discount: item.listPrice - item.price,
|
|
79
|
-
currency: currency.code as CurrencyCode,
|
|
80
|
-
item_variant_name: item.itemOffered.name,
|
|
81
|
-
product_reference_id: item.itemOffered.gtin,
|
|
82
|
-
})),
|
|
83
|
-
},
|
|
84
|
-
})
|
|
85
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
86
|
-
}, [])
|
|
95
|
+
if (!displayCart) {
|
|
96
|
+
return
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
sendViewCartEvent()
|
|
100
|
+
}, [displayCart, sendViewCartEvent])
|
|
87
101
|
|
|
88
102
|
return (
|
|
89
103
|
<>
|
|
@@ -1,19 +1,27 @@
|
|
|
1
|
-
import { useSearch } from '@faststore/sdk'
|
|
1
|
+
import { sendAnalyticsEvent, useSearch } from '@faststore/sdk'
|
|
2
2
|
import { gql } from '@faststore/graphql-utils'
|
|
3
3
|
|
|
4
4
|
import { useQuery } from 'src/sdk/graphql/useQuery'
|
|
5
|
+
|
|
5
6
|
import type {
|
|
6
7
|
ProductGalleryQueryQuery as Query,
|
|
7
8
|
ProductGalleryQueryQueryVariables as Variables,
|
|
8
9
|
} from '@generated/graphql'
|
|
10
|
+
import type { IntelligentSearchQueryEvent } from 'src/sdk/analytics/types'
|
|
9
11
|
|
|
10
12
|
import { useLocalizedVariables } from '../../../sdk/product/useProductsQuery'
|
|
13
|
+
import { useSession } from 'src/sdk/session'
|
|
11
14
|
|
|
12
15
|
/**
|
|
13
16
|
* This query is run on the browser and contains
|
|
14
17
|
* the current search state of the user
|
|
15
18
|
*/
|
|
16
19
|
export const query = gql`
|
|
20
|
+
fragment SearchEvent_metadata on SearchMetadata {
|
|
21
|
+
isTermMisspelled
|
|
22
|
+
logicalOperator
|
|
23
|
+
}
|
|
24
|
+
|
|
17
25
|
query ProductGalleryQuery(
|
|
18
26
|
$first: Int!
|
|
19
27
|
$after: String!
|
|
@@ -36,6 +44,9 @@ export const query = gql`
|
|
|
36
44
|
facets {
|
|
37
45
|
...Filter_facets
|
|
38
46
|
}
|
|
47
|
+
metadata {
|
|
48
|
+
...SearchEvent_metadata
|
|
49
|
+
}
|
|
39
50
|
}
|
|
40
51
|
}
|
|
41
52
|
`
|
|
@@ -46,6 +57,8 @@ export const useGalleryQuery = () => {
|
|
|
46
57
|
itemsPerPage,
|
|
47
58
|
} = useSearch()
|
|
48
59
|
|
|
60
|
+
const { locale } = useSession()
|
|
61
|
+
|
|
49
62
|
const localizedVariables = useLocalizedVariables({
|
|
50
63
|
first: itemsPerPage,
|
|
51
64
|
after: '0',
|
|
@@ -54,5 +67,21 @@ export const useGalleryQuery = () => {
|
|
|
54
67
|
selectedFacets,
|
|
55
68
|
})
|
|
56
69
|
|
|
57
|
-
return useQuery<Query, Variables>(query, localizedVariables
|
|
70
|
+
return useQuery<Query, Variables>(query, localizedVariables, {
|
|
71
|
+
onSuccess: (data) => {
|
|
72
|
+
if (data && term) {
|
|
73
|
+
sendAnalyticsEvent<IntelligentSearchQueryEvent>({
|
|
74
|
+
name: 'intelligent_search_query',
|
|
75
|
+
params: {
|
|
76
|
+
locale,
|
|
77
|
+
term,
|
|
78
|
+
url: window.location.href,
|
|
79
|
+
logicalOperator: data.search.metadata?.logicalOperator ?? 'and',
|
|
80
|
+
isTermMisspelled: data.search.metadata?.isTermMisspelled ?? false,
|
|
81
|
+
totalCount: data.search.products.pageInfo.totalCount,
|
|
82
|
+
},
|
|
83
|
+
})
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
})
|
|
58
87
|
}
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
* More info at: https://www.notion.so/vtexhandbook/Event-API-Documentation-48eee26730cf4d7f80f8fd7262231f84
|
|
3
3
|
*/
|
|
4
4
|
import type { AnalyticsEvent } from '@faststore/sdk'
|
|
5
|
-
import type {
|
|
5
|
+
import type {
|
|
6
|
+
IntelligentSearchQueryEvent,
|
|
7
|
+
SearchSelectItemEvent,
|
|
8
|
+
} from '../../types'
|
|
6
9
|
|
|
7
10
|
import config from '../../../../../faststore.config'
|
|
8
11
|
import { getCookie } from '../../../../utils/getCookie'
|
|
@@ -52,6 +55,15 @@ type SearchEvent =
|
|
|
52
55
|
url: string
|
|
53
56
|
type: 'search.click'
|
|
54
57
|
}
|
|
58
|
+
| {
|
|
59
|
+
text: string
|
|
60
|
+
misspelled: boolean
|
|
61
|
+
match: number
|
|
62
|
+
operator: string
|
|
63
|
+
locale: string
|
|
64
|
+
url: string
|
|
65
|
+
type: 'search.query'
|
|
66
|
+
}
|
|
55
67
|
|
|
56
68
|
const sendEvent = (options: SearchEvent & { url?: string }) =>
|
|
57
69
|
fetch(`https://sp.vtex.com/event-api/v1/${config.api.storeId}/event`, {
|
|
@@ -71,30 +83,50 @@ const isFullTextSearch = (url: URL) =>
|
|
|
71
83
|
typeof url.searchParams.get('q') === 'string' &&
|
|
72
84
|
/^\/s(\/)?$/g.test(url.pathname)
|
|
73
85
|
|
|
74
|
-
const handleEvent = (
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
const handleEvent = (
|
|
87
|
+
event: AnalyticsEvent | SearchSelectItemEvent | IntelligentSearchQueryEvent
|
|
88
|
+
) => {
|
|
89
|
+
switch (event.name) {
|
|
90
|
+
case 'search_select_item': {
|
|
91
|
+
const url = new URL(event.params.url)
|
|
92
|
+
|
|
93
|
+
if (!isFullTextSearch(url)) {
|
|
94
|
+
return
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
for (const item of event.params.items ?? []) {
|
|
98
|
+
const productId = item.item_id ?? item.item_variant
|
|
99
|
+
const position = item.index
|
|
100
|
+
|
|
101
|
+
if (productId && position) {
|
|
102
|
+
sendEvent({
|
|
103
|
+
type: 'search.click',
|
|
104
|
+
productId,
|
|
105
|
+
position,
|
|
106
|
+
url: url.href,
|
|
107
|
+
text: url.searchParams.get('q') ?? '<empty>',
|
|
108
|
+
})
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
break
|
|
113
|
+
}
|
|
88
114
|
|
|
89
|
-
|
|
115
|
+
case 'intelligent_search_query': {
|
|
90
116
|
sendEvent({
|
|
91
|
-
type: 'search.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
117
|
+
type: 'search.query',
|
|
118
|
+
url: event.params.url,
|
|
119
|
+
text: event.params.term,
|
|
120
|
+
misspelled: event.params.isTermMisspelled,
|
|
121
|
+
match: event.params.totalCount,
|
|
122
|
+
operator: event.params.logicalOperator,
|
|
123
|
+
locale: event.params.locale,
|
|
96
124
|
})
|
|
125
|
+
|
|
126
|
+
break
|
|
97
127
|
}
|
|
128
|
+
|
|
129
|
+
default:
|
|
98
130
|
}
|
|
99
131
|
}
|
|
100
132
|
|
|
@@ -20,3 +20,17 @@ export interface SearchSelectItemEvent {
|
|
|
20
20
|
name: 'search_select_item'
|
|
21
21
|
params: SearchSelectItemParams
|
|
22
22
|
}
|
|
23
|
+
|
|
24
|
+
export interface IntelligentSearchQueryParams {
|
|
25
|
+
url: string
|
|
26
|
+
locale: string
|
|
27
|
+
term: string
|
|
28
|
+
logicalOperator: string
|
|
29
|
+
isTermMisspelled: boolean
|
|
30
|
+
totalCount: number
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface IntelligentSearchQueryEvent {
|
|
34
|
+
name: 'intelligent_search_query'
|
|
35
|
+
params: IntelligentSearchQueryParams
|
|
36
|
+
}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useMemo } from 'react'
|
|
2
2
|
|
|
3
|
+
import { sendAnalyticsEvent } from '@faststore/sdk'
|
|
4
|
+
import { gql } from '@faststore/graphql-utils'
|
|
3
5
|
import { useQuery } from 'src/sdk/graphql/useQuery'
|
|
6
|
+
|
|
4
7
|
import type {
|
|
5
8
|
SearchSuggestionsQueryQuery as Query,
|
|
6
9
|
SearchSuggestionsQueryQueryVariables as Variables,
|
|
7
10
|
} from '@generated/graphql'
|
|
11
|
+
import type { IntelligentSearchQueryEvent } from '../analytics/types'
|
|
8
12
|
|
|
9
13
|
import { useSession } from '../session'
|
|
10
14
|
|
|
@@ -24,6 +28,14 @@ const query = gql`
|
|
|
24
28
|
...ProductSummary_product
|
|
25
29
|
}
|
|
26
30
|
}
|
|
31
|
+
products {
|
|
32
|
+
pageInfo {
|
|
33
|
+
totalCount
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
metadata {
|
|
37
|
+
...SearchEvent_metadata
|
|
38
|
+
}
|
|
27
39
|
}
|
|
28
40
|
}
|
|
29
41
|
`
|
|
@@ -31,12 +43,34 @@ const query = gql`
|
|
|
31
43
|
function useSuggestions(term: string, limit: number = MAX_SUGGESTIONS) {
|
|
32
44
|
const { channel, locale } = useSession()
|
|
33
45
|
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
46
|
+
const variables = useMemo(
|
|
47
|
+
() => ({
|
|
48
|
+
term,
|
|
49
|
+
selectedFacets: [
|
|
50
|
+
{ key: 'channel', value: channel ?? '' },
|
|
51
|
+
{ key: 'locale', value: locale },
|
|
52
|
+
],
|
|
53
|
+
}),
|
|
54
|
+
[term, locale, channel]
|
|
55
|
+
)
|
|
56
|
+
const { data, error } = useQuery<Query, Variables>(query, variables, {
|
|
57
|
+
onSuccess: (callbackData) => {
|
|
58
|
+
if (callbackData && term) {
|
|
59
|
+
sendAnalyticsEvent<IntelligentSearchQueryEvent>({
|
|
60
|
+
name: 'intelligent_search_query',
|
|
61
|
+
params: {
|
|
62
|
+
locale,
|
|
63
|
+
term,
|
|
64
|
+
url: window.location.href,
|
|
65
|
+
logicalOperator:
|
|
66
|
+
callbackData.search.metadata?.logicalOperator ?? 'and',
|
|
67
|
+
isTermMisspelled:
|
|
68
|
+
callbackData.search.metadata?.isTermMisspelled ?? false,
|
|
69
|
+
totalCount: callbackData.search.products.pageInfo.totalCount,
|
|
70
|
+
},
|
|
71
|
+
})
|
|
72
|
+
}
|
|
73
|
+
},
|
|
40
74
|
})
|
|
41
75
|
|
|
42
76
|
return {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[148],{9767:function(e,t,r){var a=r(2784),n=r(5450);const c=(0,a.forwardRef)((function({value:e,as:t="span",variant:r="selling",testId:c="fs-price",formatter:i=(e=>e),SRText:s,...o},l){const u=i(e,r);return a.createElement(t,{ref:l,"data-fs-price":!0,"data-fs-price-variant":r,"data-testid":c,...o},s&&a.createElement(n.Z,{text:s}),u)}));t.Z=c},6148:function(e,t,r){r.r(t),r.d(t,{default:function(){return X}});var a=r(9499),n=r(4730),c=r(2784),i=r(101);const s=()=>{const e=(0,c.useContext)(i.c);return e?{inContext:!0,values:e}:{inContext:!1}},o=()=>{const{inContext:e,values:t}=s();return c.createElement(c.Fragment,null,e&&t.isLoading&&c.createElement("p",{"data-fs-search-dropdown-loading-text":!0},"Loading..."))};var l=(0,c.forwardRef)((function({testId:e="fs-search-dropdown",children:t,...r},a){return c.createElement("div",{ref:a,"data-fs-search-dropdown":!0,"data-testid":e,...r},c.createElement("section",null,c.createElement(o,null),t))})),u=r(4564);var d=({testId:e="fs-search-auto-complete",children:t,...r})=>{const{inContext:a,values:n}=s();return a&&(n.terms.length<=0||n.term.length<=0)?null:c.createElement("section",{"data-testid":e,"data-fs-search-auto-complete":!0,...r},c.createElement(u.Z,{as:"ol"},t))},f=r(2614),p=r(727);var m=({testId:e="fs-search-auto-complete-term",suggestion:t,term:r,linkProps:a,icon:n=c.createElement(f.Z,{name:"MagnifyingGlass",width:18,height:18})})=>{const i=t.toLowerCase().split(r.toLowerCase());return c.createElement("li",{"data-fs-search-auto-complete-item":!0,"data-testid":e},c.createElement(p.Z,{...a,"data-fs-search-auto-complete-item-link":!0,variant:"display"},c.createElement("span",{"data-fs-search-auto-complete-item-icon":!0},n),c.createElement("p",null,i.map(((e,a)=>c.createElement(c.Fragment,{key:[e,a].join()},e.length>0&&c.createElement("strong",{"data-fs-search-auto-complete-item-suggestion":!0},0===a?e.charAt(0).toUpperCase()+e.slice(1):e),a!==i.length-1&&function(e,t,r){return 0===e?t.split("").map(((e,t)=>0===t&&0===r.indexOf(e.toUpperCase())?e.toUpperCase():e.toLowerCase())).join(""):t.toLowerCase()}(a,r,t)))))))};var h=({testId:e="fs-search-products",title:t="Suggested Products",children:r,...a})=>{const{inContext:n,values:i}=s();return n&&i.products.length<=0?null:c.createElement("section",{"data-testid":e,"data-fs-search-products":!0,...a},c.createElement("header",{"data-fs-search-products-header":!0},c.createElement("p",{"data-fs-search-products-title":!0},t)),c.createElement(u.Z,{as:"ol"},r))},v=r(3339);var g=({testId:e="fs-search-history",title:t="History",clearLabel:r="Clear History",onClear:a,children:n,...i})=>{const{inContext:o,values:l}=s();return o&&(0!==l.term.length||l.isLoading)?null:c.createElement("section",{"data-testid":e,"data-fs-search-history":!0,...i},c.createElement("header",{"data-fs-search-history-header":!0},c.createElement("p",{"data-fs-search-history-title":!0},t),c.createElement(v.Z,{variant:"tertiary",onClick:a,size:"small"},r)),c.createElement(u.Z,{as:"ol"},n))};var O=({testId:e="fs-search-history-term",value:t,linkProps:r,icon:a=c.createElement(f.Z,{name:"ClockClockwise",width:18,height:18})})=>c.createElement("li",{"data-fs-search-history-item":!0,"data-testid":e},c.createElement(p.Z,{...r,"data-fs-search-history-item-link":!0,variant:"display"},c.createElement("span",{"data-fs-search-history-item-icon":!0},a),c.createElement("span",null,t))),y=r(5098),b=r(2322);function j(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 E(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?j(Object(r),!0).forEach((function(t){(0,a.Z)(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):j(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var P=e=>{var t=Object.assign({},e),{values:{onSearchSelection:r}}=s(),{searchHistory:a,clearSearchHistory:n}=(0,y.Z)();return a.length?(0,b.jsx)(g,E(E({title:"History",onClear:n},t),{},{children:a.map((e=>(0,b.jsx)(O,{value:e.term,linkProps:{href:e.path,onClick:()=>null===r||void 0===r?void 0:r(e.term,e.path)}},e.term)))})):null};var w=(0,c.forwardRef)((function({testId:e="fs-top-search",title:t="Top Search",children:r,...a},n){const{inContext:i,values:o}=s();return i&&(0!==o.term.length||o.isLoading)?null:c.createElement("section",{ref:n,"data-testid":e,"data-fs-search-top":!0,...a},c.createElement("header",{"data-fs-search-top-header":!0},c.createElement("p",{"data-fs-search-top-title":!0},t)),c.createElement(u.Z,{as:"ol"},r))})),k=r(276);var x=(0,c.forwardRef)((function({testId:e="fs-top-search-term",value:t,linkProps:r,index:a},n){return c.createElement("li",{ref:n,"data-fs-search-top-item":!0,"data-testid":e},c.createElement(p.Z,{...r,"data-fs-search-top-item-link":!0,variant:"display"},c.createElement(k.Z,{"data-fs-search-top-item-badge":!0,variant:"info"},a+1),t))})),C=r(5882),S=r(7732),Z=r(7295),D="TopSearchSuggestionsQuery";var _=function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5,{channel:a,locale:n}=(0,Z.kP)(),{data:c,error:i}=(0,S.aM)(D,{term:"",selectedFacets:[{key:"channel",value:null!==a&&void 0!==a?a:""},{key:"locale",value:n}]});return{terms:(null!==(e=null===c||void 0===c?void 0:c.search.suggestions.terms)&&void 0!==e?e:t).slice(0,r),isLoading:!i&&!c}},I=["topTerms","sort"];function L(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 R(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?L(Object(r),!0).forEach((function(t){(0,a.Z)(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):L(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var T=function(e){var{topTerms:t,sort:r}=e,a=(0,n.Z)(e,I),{values:{onSearchSelection:c}}=s(),{terms:i}=_(t);return 0===i.length?null:(0,b.jsx)(w,R(R({title:"Top Search"},a),{},{children:i.map(((e,t)=>(0,b.jsx)(x,{value:e.value,index:t,linkProps:{href:(0,C.u)({term:e.value,sort:r}),onClick:()=>null===c||void 0===c?void 0:c(e.value,(0,C.u)({term:e.value,sort:r}))}},t)))}))};var F=(0,c.forwardRef)((function({testId:e="fs-search-product-item",linkProps:t,children:r},a){return c.createElement("li",{ref:a,"data-fs-search-product-item":!0,"data-testid":e},c.createElement(p.Z,{...t,"data-fs-search-product-item-link":!0,variant:"display"},r))}));var H=(0,c.forwardRef)((function({testId:e="fs-search-product-item-image",children:t,...r},a){return c.createElement("div",{ref:a,"data-fs-search-product-item-image":!0,"data-testid":e,...r},t)})),N=r(9767);var V=(0,c.forwardRef)((function({price:e,title:t,...r},a){return c.createElement("section",{ref:a,"data-fs-search-product-item-content":!0,...r},c.createElement("p",{"data-fs-search-product-item-title":!0},t),c.createElement("span",{"data-fs-search-product-item-prices":!0},c.createElement(N.Z,{value:e?.listPrice?e.listPrice:0,formatter:e?.formatter,testId:"list-price","data-value":e?.listPrice,variant:"listing",SRText:"Original price:"}),c.createElement(N.Z,{value:e?.value?e.value:0,formatter:e?.formatter,testId:"price","data-value":e?.value,variant:"spot",SRText:"Price:"})))})),G=r(9266),M=r(5346),U=r(9854),z=["product","index"],A=["href","onClick"];function Q(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 q(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Q(Object(r),!0).forEach((function(t){(0,a.Z)(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Q(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var B=function(e){var{product:t,index:r}=e,a=(0,n.Z)(e,z),{values:{onSearchSelection:c}}=s(),i=(0,U.w)({product:t,selectedOffer:0,index:r}),{href:o,onClick:l}=i,u=(0,n.Z)(i,A),{isVariantOf:{name:d},image:[f],offers:{lowPrice:p,offers:[{listPrice:m}]}}=t,h=q({href:o,onClick:()=>{l(),null===c||void 0===c||c(d,o)}},u);return(0,b.jsxs)(F,q(q({linkProps:h},a),{},{children:[(0,b.jsx)(H,{children:(0,b.jsx)(G.E,{src:f.url,alt:f.alternateName,width:56,height:56})}),(0,b.jsx)(V,{title:d,price:{value:p,listPrice:m,formatter:M.P}})]}))},J=["sort"];function K(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 W(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?K(Object(r),!0).forEach((function(t){(0,a.Z)(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):K(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var X=function(e){var{sort:t}=e,r=(0,n.Z)(e,J),{values:{onSearchSelection:a,products:c,term:i,terms:o}}=s();return(0,b.jsxs)(l,W(W({},r),{},{children:[(0,b.jsx)(P,{sort:t}),(0,b.jsx)(T,{sort:t}),(0,b.jsx)(d,{children:null===o||void 0===o?void 0:o.map((e=>{var{value:r}=e;return(0,b.jsx)(m,{term:i,suggestion:r,linkProps:{href:(0,C.u)({term:r,sort:t}),onClick:()=>null===a||void 0===a?void 0:a(r,(0,C.u)({term:r,sort:t}))}},r)}))}),(0,b.jsx)(h,{children:c.map(((e,t)=>{var r=e;return(0,b.jsx)(B,{product:r,index:t},r.id)}))})]}))}},5346:function(e,t,r){r.d(t,{P:function(){return c}});var a=r(2784),n=r(7295),c=e=>{var t=function(){var{decimals:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{currency:t,locale:r}=(0,n.kP)();return(0,a.useCallback)((a=>Intl.NumberFormat(r,{style:"currency",currency:t.code,minimumFractionDigits:e?2:0}).format(a)),[t.code,r,e])}();return(0,a.useMemo)((()=>t(e)),[t,e])}},9854:function(e,t,r){r.d(t,{w:function(){return i}});var a=r(1072),n=r(2784),c=r(7295),i=e=>{var{index:t,product:r,selectedOffer:i}=e,{slug:s}=r,{currency:{code:o}}=(0,c.kP)(),l=(0,n.useCallback)((()=>{(0,a._)({name:"select_item",params:{items:[{item_id:r.isVariantOf.productGroupID,item_name:r.isVariantOf.name,item_brand:r.brand.name,item_variant:r.sku,index:t,price:r.offers.offers[i].price,discount:r.offers.offers[i].listPrice-r.offers.offers[i].price,currency:o,item_variant_name:r.name,product_reference_id:r.gtin}]}}),(0,a._)({name:"search_select_item",params:{url:window.location.href,items:[{item_id:r.isVariantOf.productGroupID,item_variant:r.sku,index:t}]}})}),[o,r,t,i]);return{href:"/".concat(s,"/p"),onClick:l,"data-testid":"product-link"}}}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[238],{1953:function(e,t,r){"use strict";var n=r(2784);const a=(0,n.forwardRef)((function({testId:e="fs-label",children:t,...r},a){return n.createElement("label",{ref:a,"data-fs-label":!0,"data-testid":e,...r},t)}));t.Z=a},9767:function(e,t,r){"use strict";var n=r(2784),a=r(5450);const i=(0,n.forwardRef)((function({value:e,as:t="span",variant:r="selling",testId:i="fs-price",formatter:o=(e=>e),SRText:s,...c},l){const d=o(e,r);return n.createElement(t,{ref:l,"data-fs-price":!0,"data-fs-price-variant":r,"data-testid":i,...c},s&&n.createElement(a.Z,{text:s}),d)}));t.Z=i},792:function(e,t,r){"use strict";var n=r(2784);const a=(0,n.forwardRef)((function({testId:e="fs-skeleton",loading:t=!0,shimmer:r=!0,children:a,size:i,border:o,borderRadius:s,...c},l){const d={width:i.width,height:i.height};return t?n.createElement("div",{ref:l,"data-fs-skeleton":!0,"data-testid":e,"data-fs-skeleton-border":o||null,style:s?{...d,borderRadius:s}:d,...c},r&&n.createElement("div",{"data-fs-skeleton-shimmer":!0})):n.createElement(n.Fragment,null,a)}));t.Z=a},2946:function(e,t,r){"use strict";r.d(t,{Z:function(){return i}});var n=r(2784),a=r(276);var i=({listPrice:e,spotPrice:t,thresholdLow:r=15,thresholdHigh:i=40,size:o,testId:s="fs-discount-badge"})=>{const c=((e,t)=>(0,n.useMemo)((()=>{const r=100*(e-t)/e;return Math.round(r)}),[t,e]))(e,t);if(0===c)return n.createElement(n.Fragment,null);const l=c<=r?"low":c<=i?"medium":"high";return n.createElement(a.Z,{"data-fs-discount-badge":!0,"data-fs-discount-badge-variant":l,size:o,"data-testid":s},c,"% off")}},3779:function(e,t,r){"use strict";var n=r(2784),a=r(2256),i=r(1953),o=r(7041),s=r(2614),c=r(3339);t.Z=({id:e,label:t,type:r="text",error:l,displayClearButton:d,actionable:u,buttonActionText:f="Apply",onSubmit:p,onClear:m,placeholder:v=" ",inputRef:b,disabled:g,value:h,testId:y="fs-input-field",...P})=>{const w=!g&&l&&""!==l,O=u&&!g&&""!==h;return n.createElement("div",{"data-fs-input-field":!0,"data-fs-input-field-actionable":u,"data-fs-input-field-error":l&&""!==l,"data-testid":y},n.createElement(a.Z,{id:e,type:r,value:h,ref:b,disabled:g,placeholder:v,...P}),n.createElement(i.Z,{htmlFor:e},t),O&&(d||l?n.createElement(o.Z,{size:"small","aria-label":"Clear Field",icon:n.createElement(s.Z,{name:"XCircle"}),onClick:()=>{m?.(),b?.current?.focus()}}):n.createElement(c.Z,{variant:"tertiary",size:"small",onClick:p},f)),w&&n.createElement("span",{"data-fs-input-field-error-message":!0},l))}},3024:function(e,t,r){"use strict";var n=r(2784),a=r(2614),i=r(7041),o=r(4564);const s=(0,n.forwardRef)((function({children:e,testId:t="fs-rating",length:r=5,value:s=0,icon:c,onChange:l,...d},u){const[f,p]=(0,n.useState)(0),m={"data-fs-rating-icon-outline":!0},v=n.isValidElement(c)?c:n.createElement(a.Z,{name:"Star"});return n.createElement(o.Z,{ref:u,"data-fs-rating":!0,"data-fs-rating-actionable":"function"===typeof l,"data-testid":t,...d},Array.from({length:r}).map(((e,r)=>{const o=r+1;return n.createElement("li",{key:`rating-${r}`,"data-fs-rating-item":o<=(f||s)?"full":o-s>0&&o-s<1?"partial":"empty","data-testid":`${t}-item`},l?n.createElement(i.Z,{"data-fs-rating-button":!0,icon:v,size:"small","aria-label":"rate",onClick:()=>{l(o)},onMouseEnter:()=>p(o),onMouseLeave:()=>p(s)}):n.createElement(n.Fragment,null,n.createElement("div",{"data-fs-rating-icon-wrapper":!0},v),n.isValidElement(c)?n.cloneElement(c,m):n.createElement(a.Z,{name:"Star","data-fs-rating-icon-outline":!0})))})))}));t.Z=s},8091:function(e,t,r){"use strict";r.d(t,{Z:function(){return k}});var n=r(9499),a=r(4730),i=r(2784);var o=(0,i.forwardRef)((function({testId:e="fs-product-card",variant:t="default",bordered:r=!1,outOfStock:n,children:a,...o},s){return i.createElement("article",{ref:s,"data-fs-product-card":n?"out-of-stock":"","data-fs-product-card-variant":t,"data-fs-product-card-bordered":r,"data-testid":e,...o},a)}));var s=(0,i.forwardRef)((function({testId:e="fs-product-card-image",aspectRatio:t=1,children:r,...n},a){return i.createElement("div",{ref:a,"data-fs-product-card-image":!0,"data-testid":e,style:{"--fs-product-card-image-aspect-ratio":t},...n},r)})),c=r(727),l=r(9767),d=r(3024),u=r(2614),f=r(2946),p=r(276),m=r(3339);var v=(0,i.forwardRef)((function({testId:e="fs-product-card-content",title:t,linkProps:r,price:n,outOfStock:a,outOfStockLabel:o="Out of stock",ratingValue:s,showDiscountBadge:v,buttonLabel:b="Add",onButtonClick:g,children:h,...y},P){const w=n?.listPrice??0,O=n?.value??0;return i.createElement("section",{ref:P,"data-fs-product-card-content":!0,"data-fs-product-card-badge":v,"data-testid":e,...y},i.createElement("div",{"data-fs-product-card-heading":!0},i.createElement("h3",{"data-fs-product-card-title":!0},i.createElement(c.Z,{...r,title:t},i.createElement("span",null,t))),!a&&i.createElement("div",{"data-fs-product-card-prices":!0},O!==w?i.createElement(i.Fragment,null,i.createElement(l.Z,{value:w,formatter:n?.formatter,testId:"list-price","data-value":w,variant:"listing",SRText:"Original price:"}),i.createElement(l.Z,{value:O,formatter:n?.formatter,testId:"price","data-value":O,variant:"spot",SRText:"Sale Price:"})):i.createElement(l.Z,{value:O,formatter:n?.formatter,testId:"price","data-value":O,variant:"spot",SRText:"Sale Price:"})),s&&i.createElement(d.Z,{value:s,icon:i.createElement(u.Z,{name:"Star"})})),v&&!a&&i.createElement(f.Z,{listPrice:n?.listPrice?n.listPrice:0,spotPrice:n?.value?n.value:0}),a&&i.createElement(p.Z,null,o),g&&!a&&i.createElement("div",{"data-fs-product-card-actions":!0},i.createElement(m.Z,{variant:"primary",icon:i.createElement(u.Z,{name:"ShoppingCart"}),iconPosition:"left",size:"small",onClick:g},b)))})),b=r(1664),g=r.n(b),h=r(9266),y=r(5346),P=r(9854),w=r(2322),O=["product","index","bordered","variant","aspectRatio","imgProps","ratingValue","buttonLabel","onButtonClick","showDiscountBadge"];function x(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function E(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?x(Object(r),!0).forEach((function(t){(0,n.Z)(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):x(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function j(e){var t,r,{product:n,index:c,bordered:l=!0,variant:d="default",aspectRatio:u=1,imgProps:f,ratingValue:p,buttonLabel:m="Add",onButtonClick:b,showDiscountBadge:x=!0}=e,j=(0,a.Z)(e,O),{sku:k,isVariantOf:{name:I},image:[S],offers:{lowPrice:_,offers:[{listPrice:Z,availability:C}]}}=n,R=E(E({},(0,P.w)({product:n,selectedOffer:0,index:c})),{},{as:g(),passHref:!0,legacyBehavior:!1,prefetch:!1}),D=(0,i.useMemo)((()=>"https://schema.org/InStock"!==C),[C]);return(0,w.jsxs)(o,E(E({outOfStock:D,bordered:l,variant:d,"data-fs-product-card-sku":k},j),{},{children:[(0,w.jsx)(s,{aspectRatio:u,children:(0,w.jsx)(h.E,{src:S.url,alt:S.alternateName,sizes:"".concat(null!==(t=null===f||void 0===f?void 0:f.sizes)&&void 0!==t?t:"(max-width: 768px) 40vw, 30vw"),width:null!==(r=null===f||void 0===f?void 0:f.width)&&void 0!==r?r:360,height:Math.round((Number(null===f||void 0===f?void 0:f.height)||360)/u),loading:null===f||void 0===f?void 0:f.loading})}),(0,w.jsx)(v,{title:I,price:{value:_,listPrice:Z,formatter:y.P},ratingValue:p,outOfStock:D,onButtonClick:b,linkProps:R,showDiscountBadge:x})]}))}var k=(0,i.memo)(j)},8463:function(e,t,r){"use strict";r.d(t,{Z:function(){return y}});var n=r(9499),a=r(2784);const i=(0,a.createContext)(void 0);var o=(0,a.forwardRef)((function({children:e,testId:t="fs-banner-text",variant:r="primary",colorVariant:n="main",...o},s){const c={variant:r,colorVariant:n};return a.createElement(i.Provider,{value:c},a.createElement("article",{ref:s,"data-fs-banner-text":!0,"data-fs-banner-text-variant":r,"data-fs-banner-text-color-variant":n,"data-testid":t,...o},e))})),s=r(3922);var c=(0,a.forwardRef)((function({testId:e="fs-banner-text-content",title:t,caption:r,link:n,linkText:o,...c},l){const{variant:d,colorVariant:u}=function(){const e=(0,a.useContext)(i);if(void 0===e)throw new Error("Do not use BannerText components outside the BannerText context.");return e}();return a.createElement("header",{ref:l,"data-fs-banner-text-content":!0,"data-fs-content":"banner-text","data-testid":e,...c},a.createElement("div",{"data-fs-banner-text-heading":!0,"data-fs-banner-text-color-variant":u},a.createElement("h2",null,t),"secondary"===d&&r&&a.createElement("p",null,r)),a.createElement(s.Z,{"data-fs-banner-text-link":!0,href:n,variant:d,inverse:"main"===u,"aria-label":o},o))})),l=r(9104),d={section:"BannerText"},{BannerText:u,BannerTextContent:f}=(0,l.f)({BannerText:o,BannerTextContent:c},d),p=r(7067),m=r(23),v=r.n(m),b=r(2322);function g(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function h(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?g(Object(r),!0).forEach((function(t){(0,n.Z)(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):g(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var y=function(e){var t,r,{title:n,caption:a,link:{url:i=f.props.link,text:o=f.props.linkText},variant:s=(null!==(t=u.props.variant)&&void 0!==t?t:"primary"),colorVariant:c=(null!==(r=u.props.colorVariant)&&void 0!==r?r:"main")}=e;return(0,b.jsx)(p.Z,{className:"".concat(v().section," section-banner layout__section"),children:(0,b.jsx)("div",{className:"layout__content",children:(0,b.jsx)(u.Component,h(h({},u.props),{},{variant:s,colorVariant:c,children:(0,b.jsx)(f.Component,h(h({},f.props),{},{title:n,caption:a,link:i,linkText:o}))}))})})}},5168:function(e,t,r){"use strict";r.d(t,{Z:function(){return L}});var n=r(9499),a=r(4730),i=r(2784),o=r(1503),s=r(4262),c=r(6652),l=r(29),d=r(9857),u=r(180),f=r(7732),p=(e,t,r)=>{var n=(0,d.ZP)((0,f.km)(e,t),(()=>null),f.WN),a=function(){var t=(0,l.Z)((function*(t){var a=yield(0,u.W)(e,t,r);n.mutate(a,!1)}));return function(e){return t.apply(this,arguments)}}();return[a,n]},m=r(2614),v=r(3779),b=r(3339),g=r(9104),h={section:"Newsletter"},{ToastIconSuccess:y,ToastIconError:P,HeaderIcon:w,InputFieldName:O,InputFieldEmail:x,Button:E}=(0,g.f)({ToastIconSuccess:m.Z,ToastIconError:m.Z,HeaderIcon:m.Z,InputFieldName:v.Z,InputFieldEmail:v.Z,Button:b.Z},h),j=r(2322);function k(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function I(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?k(Object(r),!0).forEach((function(t){(0,n.Z)(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):k(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var S=e=>{if(!e)return"";var t=JSON.parse(e);return(0,s.E)((0,o.convertFromRaw)(t),{entityStyleFn:e=>{if("link"===e.get("type").toLowerCase())return{element:"a",attributes:{"data-fs-link":"true","data-fs-link-variant":"inline","data-fs-link-inverse":"true","data-fs-link-size":"regular","data-testid":"fs-link",href:e.getData().url}}}})},_=(0,i.forwardRef)((function(e,t){var r,{icon:n,title:a,description:o,privacyPolicy:s,emailInputLabel:l,displayNameInput:d,nameInputLabel:u,subscribeButtonLabel:f,subscribeButtonLoadingLabel:m,card:v,toastSubscribe:b,toastSubscribeError:g}=e,{subscribeUser:h,loading:k,data:_}=(()=>{var[e,{data:t,error:r,isValidating:n}]=p("SubscribeToNewsletter",{data:{name:"",email:""}});return{subscribeUser:e,data:t,error:r,loading:n}})(),Z=(0,i.useRef)(null),C=(0,i.useRef)(null),{pushToast:R}=((0,i.useMemo)((()=>k?m:f),[k,f,m]),(0,c.l)());return(0,j.jsx)("div",{"data-fs-newsletter":v?"card":"",children:(0,j.jsxs)("form",{ref:t,"data-fs-newsletter-form":!0,"data-fs-content":"newsletter",onSubmit:e=>{var t,r,n,a,i,o,s;(e.preventDefault(),h({data:{name:null!==(t=null===(r=Z.current)||void 0===r?void 0:r.value)&&void 0!==t?t:"",email:null!==(n=null===(a=C.current)||void 0===a?void 0:a.value)&&void 0!==n?n:""}}),null!==_&&void 0!==_&&null!==(i=_.subscribeToNewsletter)&&void 0!==i&&i.id)?R(I(I({},b),{},{status:"INFO",icon:(0,j.jsx)(y.Component,I(I({width:30,height:30},y.props),{},{name:null!==(o=b.icon)&&void 0!==o?o:y.props.name}))})):R(I(I({},g),{},{status:"ERROR",icon:(0,j.jsx)(P.Component,I(I({width:30,height:30},P.props),{},{name:null!==(s=b.icon)&&void 0!==s?s:P.props.name}))}));e.currentTarget.reset()},children:[(0,j.jsxs)("header",{"data-fs-newsletter-header":!0,children:[(0,j.jsxs)("h3",{children:[(0,j.jsx)(w.Component,I(I({width:32,height:32},w.props),{},{name:null!==(r=null===n||void 0===n?void 0:n.icon)&&void 0!==r?r:w.props.name})),a]}),o&&(0,j.jsxs)("span",{children:[" ",o]})]}),(0,j.jsx)("div",{"data-fs-newsletter-controls":!0,children:(0,j.jsxs)(j.Fragment,{children:[d?(0,j.jsx)(O.Component,I(I({id:"newsletter-name",required:!0},O.props),{},{label:null!==u&&void 0!==u?u:O.props.label,inputRef:Z})):null,(0,j.jsx)(x.Component,I(I({id:"newsletter-email",type:"email",required:!0},x.props),{},{label:null!==l&&void 0!==l?l:x.props.label,inputRef:C})),(0,j.jsx)("span",{"data-fs-newsletter-addendum":!0,dangerouslySetInnerHTML:{__html:S(s)}}),(0,j.jsx)(E.Component,I(I({variant:"secondary",inverse:!0,type:"submit"},E.props),{},{children:k?m:f}))]})})]})})})),Z=r(7067),C=r(1778),R=r.n(C),D=["icon","title","description","privacyPolicy","emailInputLabel","displayNameInput","nameInputLabel","subscribeButtonLabel","card","toastSubscribe","toastSubscribeError"];function T(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function B(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?T(Object(r),!0).forEach((function(t){(0,n.Z)(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):T(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var L=function(e){var{icon:t,title:r,description:n,privacyPolicy:i,emailInputLabel:o,displayNameInput:s,nameInputLabel:c,subscribeButtonLabel:l,card:d,toastSubscribe:u,toastSubscribeError:f}=e,p=(0,a.Z)(e,D);return(0,j.jsx)(Z.Z,{className:"".concat(R().section," section-newsletter"),children:(0,j.jsx)(_,B({icon:t,title:r,description:n,privacyPolicy:i,emailInputLabel:o,displayNameInput:s,nameInputLabel:c,subscribeButtonLabel:l,toastSubscribe:u,toastSubscribeError:f,card:d},p))})}},3288:function(e,t,r){"use strict";r.d(t,{Z:function(){return i}});var n=r(792),a=r(2322);var i=function(e){var{bordered:t,sectioned:r,displayButton:i,aspectRatio:o=1,variant:s="default"}=e;return(0,a.jsxs)("div",{"data-fs-product-card-skeleton":!0,"data-fs-product-card-skeleton-variant":s,"data-fs-product-card-skeleton-bordered":t,"data-fs-product-card-skeleton-sectioned":r,children:[(0,a.jsx)("div",{"data-fs-product-card-skeleton-image":!0,style:{"--fs-product-card-skeleton-image-aspect-ratio":o},children:(0,a.jsx)(n.Z,{size:{width:"100%",height:"100%"}})}),(0,a.jsxs)("div",{"data-fs-product-card-skeleton-content":!0,children:[(0,a.jsx)(n.Z,{"data-fs-product-card-skeleton-text":!0,size:{width:"90%",height:"1.5rem"}}),(0,a.jsx)(n.Z,{"data-fs-product-card-skeleton-text":!0,size:{width:"70%",height:"1.5rem"}}),(0,a.jsx)(n.Z,{"data-fs-product-card-skeleton-badge":!0,size:{width:"6rem",height:"2rem"},border:"pill"}),i&&(0,a.jsx)(n.Z,{"data-fs-product-card-skeleton-button":!0,size:{width:"6rem",height:"2rem"},style:{columnGap:".75rem"}})]})]})}},1309:function(e,t,r){"use strict";r.d(t,{Z:function(){return L}});var n=r(9499),a=r(4730),i=r(2784);var o=(0,i.forwardRef)((function({testId:e="fs-product-shelf",children:t,...r},n){return i.createElement("div",{ref:n,"data-fs-product-shelf":!0,"data-fs-content":"product-shelf","data-testid":e,...r},t)}));var s=(0,i.forwardRef)((function({testId:e="fs-product-shelf-items",children:t,...r},n){return i.createElement("ul",{role:"list",ref:n,"data-fs-product-shelf-items":!0,"data-fs-content":"product-shelf","data-testid":e,...r},t)}));var c=(0,i.forwardRef)((function({testId:e="fs-product-shelf-item",children:t,...r},n){return i.createElement("li",{role:"listitem",ref:n,"data-fs-product-shelf-item":!0,"data-testid":e,...r},t)})),l=r(8459),d=r(3288),u=r(2322);var f=function(e){var{children:t,aspectRatio:r,loading:n=!0}=e;return n?(0,u.jsx)(o,{"data-fs-product-shelf-skeleton":!0,children:(0,u.jsx)(s,{children:Array.from({length:l.K},((e,t)=>(0,u.jsx)(c,{children:(0,u.jsx)(d.Z,{aspectRatio:r,sectioned:!0,bordered:!0})},String(t))))})}):(0,u.jsx)(u.Fragment,{children:t})},p=r(5184),m=r(737);var v=r(8091),b=r(7041),g=r(2614),h=r(5724);function y(e,t){switch(t.type){case"NEXT_PAGE":{const t=e.infinite?e.totalPages+1:e.totalPages,r=(e.currentPage+1)%t,n=r%t*e.itemsPerPage;return{...e,sliding:!0,slideDirection:"next",currentItem:n,currentPage:r}}case"PREVIOUS_PAGE":{const t=e.infinite?e.totalPages+1:e.totalPages,r=e.infinite&&0===e.currentPage?-1:((e,t)=>(t-(t-e+1)%t)%t)(e.currentPage,e.totalPages);return{...e,sliding:!0,slideDirection:"previous",currentItem:r%t*e.itemsPerPage,currentPage:r}}case"GO_TO_PAGE":return t.payload.pageIndex===e.currentPage?e:{...e,sliding:t.payload.shouldSlide,slideDirection:t.payload.pageIndex>e.currentPage?"next":"previous",currentItem:t.payload.pageIndex%e.totalPages*e.itemsPerPage,currentPage:t.payload.pageIndex};case"STOP_SLIDE":return{...e,sliding:!1};default:return e}}const P=(e,t)=>{"next"===e&&t({type:"NEXT_PAGE"}),"previous"===e&&t({type:"PREVIOUS_PAGE"}),"number"===typeof e&&t({type:"GO_TO_PAGE",payload:{pageIndex:e,shouldSlide:!0}})},w=({totalItems:e,itemsPerPage:t=1,infiniteMode:r=!1,shouldSlideOnSwipe:n=!0,...a})=>{const[o,s]=(0,i.useReducer)(y,void 0,(()=>((e,t,r)=>({currentItem:0,currentPage:0,sliding:!1,slideDirection:"next",totalItems:e,itemsPerPage:t,totalPages:Math.ceil(e/t),infinite:r}))(e,t,r)));return{handlers:(0,h.QS)({onSwipedRight:()=>n&&P("previous",s),onSwipedLeft:()=>n&&P("next",s),trackMouse:!0,...a}),slide:P,sliderState:o,sliderDispatch:s}};var O=r(3339);const x=(e,t,r)=>r?`Current page from ${e}`:`Go to page ${t+1} from ${e}`;var E=(0,i.forwardRef)((function({id:e,totalQuantity:t,activeBullet:r,onClick:n,testId:a="fs-carousel-bullets",ariaLabelGenerator:o=x,ariaControlsGenerator:s,...c},l){const d=(0,i.useMemo)((()=>Array(t).fill(0)),[t]);return i.createElement("div",{ref:l,"data-fs-carousel-bullets":!0,"data-testid":a,role:"tablist",...c},d.map(((t,c)=>{const l=r===c;return i.createElement(O.Z,{key:`${e}-${c}`,role:"tab",tabIndex:-1,"data-fs-carousel-bullet":!0,testId:`${a}-bullet`,onClick:e=>n(e,c),"aria-label":o(e,c,l),"aria-controls":s?.(c),"aria-selected":l,variant:"tertiary"})})))}));var j=function({id:e,index:t,state:r,children:n,totalItems:a,infiniteMode:o,isScrollCarousel:s}){const{isItemVisible:c,shouldRenderItem:l}=(({currentSlide:e,itemsPerPage:t,totalItems:r})=>{const n=(0,i.useRef)(new Set);(0,i.useEffect)((()=>{for(let r=0;r<t;r++)n.current.add(e+r)}),[e,t]);const a=n=>function({itemsPerPage:e,currentSlide:t,slideIdx:r,totalItems:n}){return t<0||t>=n||r>=t&&r<t+e}({slideIdx:n,currentSlide:e,itemsPerPage:t,totalItems:r});return{shouldRenderItem:e=>n.current.has(e)||a(e),isItemVisible:a}})({totalItems:a,currentSlide:r.currentItem,itemsPerPage:r.itemsPerPage}),d=!s&&{width:"100%"}||s&&{maxWidth:"60%",display:"inline-block"},u=s||l(t-Number(o));return i.createElement("li",{style:d,id:`${e}-carousel-item-${t}`,"data-fs-carousel-item":!0,"data-fs-carousel-item-visible":c(t-Number(o))||void 0},u?n:null)};var k=function({children:e,className:t,"aria-label":r,infiniteMode:n=!0,controls:a="complete",testId:o="fs-carousel",transition:s={duration:400,property:"transform"},id:c="fs-carousel",variant:l="slide",itemsPerPage:d=1,navigationIcons:u,...f}){const p=(0,i.useRef)(null),m="slide"===l,v="scroll"===l,h=i.Children.toArray(e),y=h.length,P=n?y+2:y,O=`${s.property} ${s.duration}ms ${s.timing??""} ${s.delay??""}`,{handlers:x,slide:k,sliderState:I,sliderDispatch:S}=w({itemsPerPage:d,infiniteMode:n,totalItems:y,shouldSlideOnSwipe:m,...f}),_=Math.ceil(y/I.itemsPerPage),Z=1!==_&&("complete"===a||"navigationArrows"===a),C=1!==_&&("complete"===a||"paginationBullets"===a),R=(0,i.useMemo)((()=>((e,t)=>{const r={},n=100/t;for(let a=0;a<t;++a){const t=-n*a;r[e?a-1:a]=t}return r})(n,P)),[P,n]),D=n&&e?h.slice(0,1):[],T=(n&&e?h.slice(y-1):[]).concat(e??[],D),B=(0,i.useMemo)((()=>({width:100*P+"%",transition:I.sliding?O:void 0,transform:`translate3d(${R[I.currentPage]}%, 0, 0)`})),[P,R,O,I.sliding,I.currentPage]),L=(0,i.useMemo)((()=>({width:"100%",overflowX:"scroll",whiteSpace:"nowrap"})),[]),N=m&&B||v&&L,V=()=>{I.sliding||!n&&0===I.currentPage||k("previous",S)},M=()=>{I.sliding||!n&&I.currentPage===y-1||k("next",S)},A=async(e,t)=>{if("previous"===t&&0===I.currentPage)return;if("next"===t&&I.currentPage===I.totalPages-1)return;let r;const n=Number(p.current?.firstElementChild?.clientWidth);r=d>1?e*n*d:e*n-.125*n,p.current?.scrollTo({left:r,behavior:"smooth"}),k(e,S)};return i.createElement("section",{id:c,"data-fs-carousel":!0,className:t,"data-testid":o,"aria-label":r},i.createElement("div",{"data-fs-carousel-track-container":!0,style:{width:"100%",overflow:"hidden",display:v?"block":void 0},...x},i.createElement("ul",{"aria-live":"polite",ref:p,style:N,"data-fs-carousel-track":!0,onScroll:e=>{if(m||d>1)return;const t=Number(e.currentTarget.firstElementChild?.scrollWidth),r=e.currentTarget?.scrollLeft,n=(r>t/2?Math.round:Math.floor)(r/t);k(n,S)},onTransitionEnd:()=>{S({type:"STOP_SLIDE"}),n&&I.currentItem>=y&&S({type:"GO_TO_PAGE",payload:{pageIndex:0,shouldSlide:!1}}),n&&I.currentItem<0&&S({type:"GO_TO_PAGE",payload:{pageIndex:I.totalPages-1,shouldSlide:!1}})}},T.map(((e,t)=>i.createElement(j,{id:c,index:t,key:String(t),state:I,totalItems:y,infiniteMode:n,isScrollCarousel:v},e))))),Z&&i.createElement("div",{"data-fs-carousel-controls":!0},i.createElement(b.Z,{"data-fs-carousel-control":"left","aria-controls":c,"aria-label":"previous",icon:u?.left??i.createElement(g.Z,{name:"ArrowLeft",width:20,height:20,weight:"bold"}),onClick:()=>{m&&V(),v&&A(I.currentPage-1,"previous")}}),i.createElement(b.Z,{"data-fs-carousel-control":"right","aria-controls":c,"aria-label":"next",icon:u?.right??i.createElement(g.Z,{name:"ArrowRight",width:20,height:20,weight:"bold"}),onClick:()=>{m&&M(),v&&A(I.currentPage+1,"next")}})),C&&i.createElement(E,{id:c,tabIndex:0,activeBullet:I.currentPage,totalQuantity:_,onKeyDown:e=>{switch(e.key){case"ArrowLeft":m&&V(),v&&A(I.currentPage-1,"previous");break;case"ArrowRight":m&&M(),v&&A(I.currentPage+1,"next");break;case"Home":k(0,S);break;case"End":k(y-1,S)}},onClick:async(e,t)=>{m&&!I.sliding&&k(t,S),v&&A(t)},onFocus:e=>e.currentTarget.focus(),ariaControlsGenerator:e=>`${c}-carousel-item-${e}`}))};var I=function(e){var{id:t,testId:r,children:n,itemsPerPage:a=5}=e,i=window.innerWidth<=768;return(0,u.jsx)(k,{id:t,testId:r,variant:"scroll",infiniteMode:!1,itemsPerPage:i?1:a,children:n})},S=r(9104),_={section:"ProductShelf"},{ProductShelf:Z,__experimentalCarousel:C,__experimentalProductCard:R}=(0,S.f)({ProductShelf:o,__experimentalCarousel:I,__experimentalProductCard:v.Z},_),D=["title","inView","productCardConfiguration"];function T(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function B(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?T(Object(r),!0).forEach((function(t){(0,n.Z)(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):T(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var L=function(e){var t,{title:r,inView:n,productCardConfiguration:{bordered:o=R.props.bordered,showDiscountBadge:s=R.props.showDiscountBadge}={}}=e,c=(0,a.Z)(e,D),l=function(e){var t,r=e.replace(/[^\w\s]/gi,"-");return null!==(t=r=(r=r.replace(/\s+/g,"-")).toLowerCase())&&void 0!==t?t:""}(r),d=(0,i.useId)(),v=(0,i.useRef)(!1),b=(0,m.kN)(c),g=null!==(t=null===b||void 0===b?void 0:b.edges)&&void 0!==t?t:[],{sendViewItemListEvent:h}=(0,p.m)({products:g,title:r,page:0,pageSize:0});return(0,i.useEffect)((()=>{n&&!v.current&&g.length&&(h(),v.current=!0)}),[n,g.length,h]),0===(null===b||void 0===b?void 0:b.edges.length)?null:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)("h2",{className:"text__title-section layout__content",children:r}),(0,u.jsx)(f,{aspectRatio:1,loading:void 0===b,children:(0,u.jsx)(Z.Component,B(B({},Z.props),{},{children:(0,u.jsx)(C.Component,B(B({id:l||d},C.props),{},{children:g.map(((e,t)=>(0,i.createElement)(R.Component,B(B({aspectRatio:1,imgProps:{width:216,height:216,sizes:"(max-width: 768px) 42vw, 30vw"}},R.props),{},{bordered:o,showDiscountBadge:s,key:"".concat(e.node.id),product:e.node,index:t+1}))))}))}))})]})}},8459:function(e,t,r){"use strict";r.d(t,{K:function(){return a},g:function(){return n}});var n=12,a=5},5184:function(e,t,r){"use strict";r.d(t,{m:function(){return o}});var n=r(1072),a=r(2784),i=r(7295),o=e=>{var{products:t,title:r,page:o,pageSize:s}=e,{currency:{code:c}}=(0,i.kP)();return{sendViewItemListEvent:(0,a.useCallback)((()=>{(0,n._)({name:"view_item_list",params:{item_list_name:r,item_list_id:r,items:t.map(((e,t)=>{var{node:r}=e;return{item_id:r.isVariantOf.productGroupID,item_name:r.isVariantOf.name,item_brand:r.brand.name,item_variant:r.sku,price:r.offers.offers[0].price,index:o*s+t+1,discount:r.offers.offers[0].listPrice-r.offers.offers[0].price,currency:c,item_variant_name:r.name,product_reference_id:r.gtin}}))}})}),[c,t,r,o,s])}}},5346:function(e,t,r){"use strict";r.d(t,{P:function(){return i}});var n=r(2784),a=r(7295),i=e=>{var t=function(){var{decimals:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{currency:t,locale:r}=(0,a.kP)();return(0,n.useCallback)((n=>Intl.NumberFormat(r,{style:"currency",currency:t.code,minimumFractionDigits:e?2:0}).format(n)),[t.code,r,e])}();return(0,n.useMemo)((()=>t(e)),[t,e])}},9854:function(e,t,r){"use strict";r.d(t,{w:function(){return o}});var n=r(1072),a=r(2784),i=r(7295),o=e=>{var{index:t,product:r,selectedOffer:o}=e,{slug:s}=r,{currency:{code:c}}=(0,i.kP)(),l=(0,a.useCallback)((()=>{(0,n._)({name:"select_item",params:{items:[{item_id:r.isVariantOf.productGroupID,item_name:r.isVariantOf.name,item_brand:r.brand.name,item_variant:r.sku,index:t,price:r.offers.offers[o].price,discount:r.offers.offers[o].listPrice-r.offers.offers[o].price,currency:c,item_variant_name:r.name,product_reference_id:r.gtin}]}}),(0,n._)({name:"search_select_item",params:{url:window.location.href,items:[{item_id:r.isVariantOf.productGroupID,item_variant:r.sku,index:t}]}})}),[c,r,t,o]);return{href:"/".concat(s,"/p"),onClick:l,"data-testid":"product-link"}}},737:function(e,t,r){"use strict";r.d(t,{yb:function(){return v},kN:function(){return b},BG:function(){return g}});var n=r(9499),a=r(2784),i=r(9857),o=r(8459),s=r(4730),c=r(180),l=r(7732),d=["cache"],u=r(7295);function f(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function p(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?f(Object(r),!0).forEach((function(t){(0,n.Z)(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):f(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var m="ProductsQuery",v=e=>{var{first:t,after:r,sort:n,term:i,selectedFacets:s}=e,{channel:c,locale:l}=(0,u.kP)();return(0,a.useMemo)((()=>{var e,a=(e=s,Array.isArray(e)?e:e?[e]:[]);return{first:null!==t&&void 0!==t?t:o.K,after:null!==r&&void 0!==r?r:"0",sort:null!==n&&void 0!==n?n:"score_desc",term:null!==i&&void 0!==i?i:"",selectedFacets:[...a,{key:"channel",value:null!==c&&void 0!==c?c:""},{key:"locale",value:l}]}}),[s,t,r,n,i,c,l])},b=(e,t)=>{var r,n=v(e),{data:a}=(0,l.aM)(m,n,p({fallbackData:null,suspense:!0},t));return null===a||void 0===a||null===(r=a.search)||void 0===r?void 0:r.products},g=(e,t)=>{var r=v(e),{cache:n}=(0,i.kY)();return(0,a.useCallback)((()=>((e,t,r)=>{var{cache:n}=r,a=(0,s.Z)(r,d),o=(0,l.km)(e,t);n.get(o)||(0,i.JG)(o,(0,c.W)(e,t,a))})(m,r,p({cache:n},t))),[r,n,t])}},23:function(e){e.exports={section:"section_section__ivuGF"}},1778:function(e){e.exports={section:"section_section__kRRBW"}},3262:function(e){e.exports={section:"section_section__C1DoH",loading:"section_loading__k5bCF"}}}]);
|