@faststore/core 3.82.0 → 3.82.2

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 (104) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +43 -43
  3. package/.next/cache/.tsbuildinfo +1 -1
  4. package/.next/cache/config.json +3 -3
  5. package/.next/cache/webpack/client-production/0.pack +0 -0
  6. package/.next/cache/webpack/client-production/index.pack +0 -0
  7. package/.next/cache/webpack/server-production/0.pack +0 -0
  8. package/.next/cache/webpack/server-production/index.pack +0 -0
  9. package/.next/prerender-manifest.js +1 -1
  10. package/.next/prerender-manifest.json +1 -1
  11. package/.next/react-loadable-manifest.json +24 -24
  12. package/.next/routes-manifest.json +1 -1
  13. package/.next/server/chunks/2430.js +1 -1
  14. package/.next/server/chunks/2570.js +1 -1
  15. package/.next/server/chunks/8071.js +1 -1
  16. package/.next/server/chunks/8474.js +1 -1
  17. package/.next/server/chunks/8563.js +1 -1
  18. package/.next/server/chunks/8687.js +1 -1
  19. package/.next/server/chunks/9117.js +1 -1
  20. package/.next/server/chunks/948.js +2 -2
  21. package/.next/server/chunks/9563.js +1 -1
  22. package/.next/server/chunks/9630.js +3 -3
  23. package/.next/server/chunks/9853.js +1 -1
  24. package/.next/server/chunks/ButtonSignIn.js +1 -1
  25. package/.next/server/chunks/UISKUMatrixSidebar.js +1 -1
  26. package/.next/server/middleware-build-manifest.js +1 -1
  27. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  28. package/.next/server/pages/[...slug].js +1 -1
  29. package/.next/server/pages/[slug]/p.js +1 -1
  30. package/.next/server/pages/account/orders.js +1 -1
  31. package/.next/server/pages/api/graphql.js +1 -1
  32. package/.next/server/pages/en-US/404.html +1 -1
  33. package/.next/server/pages/en-US/500.html +1 -1
  34. package/.next/server/pages/en-US/checkout.html +1 -1
  35. package/.next/server/pages/en-US/login.html +1 -1
  36. package/.next/server/pages/en-US/s.html +1 -1
  37. package/.next/server/pages/en-US.html +1 -1
  38. package/.next/server/pages/s.js +1 -1
  39. package/.next/server/pages-manifest.json +1 -1
  40. package/.next/static/{vwdTFcgKjIi-gK7aiBeq3 → Uvcxd2ViFEhaCaNA_H3ts}/_buildManifest.js +1 -1
  41. package/.next/static/chunks/2284.6e01b30c38bb74fd.js +1 -0
  42. package/.next/static/chunks/3155.8ff6efc44151971f.js +1 -0
  43. package/.next/static/chunks/{3166-a1d98d71987c90d6.js → 3166-785c61fd0e214905.js} +1 -1
  44. package/.next/static/chunks/3399.15d4dbadc57c3f42.js +1 -0
  45. package/.next/static/chunks/3836.63a23109a71dbbdb.js +1 -0
  46. package/.next/static/chunks/4803.74cf987971db6d93.js +1 -0
  47. package/.next/static/chunks/6700.ddae2aa02d2dd401.js +1 -0
  48. package/.next/static/chunks/{6789.634a5fcc1ed30b8d.js → 6789.38bef760c1190c23.js} +1 -1
  49. package/.next/static/chunks/7191-102277856f196551.js +1 -0
  50. package/.next/static/chunks/83.730576d7ded8dfe2.js +1 -0
  51. package/.next/static/chunks/8325.40b7331df742c2f5.js +1 -0
  52. package/.next/static/chunks/9173-912ae438e42cb222.js +1 -0
  53. package/.next/static/chunks/ButtonSignIn.e767fc25322cf230.js +1 -0
  54. package/.next/static/chunks/CartItem.d4c2664933f93606.js +1 -0
  55. package/.next/static/chunks/CartSidebar.e21ad4975e18e6db.js +1 -0
  56. package/.next/static/chunks/Gift.5891ca280b4f0164.js +1 -0
  57. package/.next/static/chunks/OrderSummary.35d859a1e467ad91.js +1 -0
  58. package/.next/static/chunks/ProductShelf.9f3194be577c7cce.js +1 -0
  59. package/.next/static/chunks/ProductTiles.e0528e72234381e6.js +1 -0
  60. package/.next/static/chunks/RegionModal.b5edb6ada60d37ec.js +1 -0
  61. package/.next/static/chunks/RegionSlider.3d9063b0cb6733d9.js +1 -0
  62. package/.next/static/chunks/UISKUMatrixSidebar.5793df7899038286.js +1 -0
  63. package/.next/static/chunks/pages/[slug]/p-0287b5a8ac0b92e5.js +1 -0
  64. package/.next/static/chunks/pages/_app-f8a8608651b3f06b.js +1 -0
  65. package/.next/static/chunks/pages/account/orders/[id]-c2d355a49d409bb0.js +1 -0
  66. package/.next/static/chunks/pages/account/orders-68bef823fcd81bf9.js +1 -0
  67. package/.next/static/chunks/{webpack-70daccedc5bafd4f.js → webpack-3f872192534f3b6d.js} +1 -1
  68. package/.next/trace +136 -136
  69. package/.turbo/turbo-build.log +20 -20
  70. package/.turbo/turbo-test.log +5 -5
  71. package/CHANGELOG.md +4 -0
  72. package/package.json +2 -2
  73. package/src/Layout.tsx +0 -2
  74. package/src/components/region/RegionBar/RegionBar.tsx +17 -23
  75. package/src/components/region/RegionButton/RegionButton.tsx +4 -35
  76. package/src/sdk/geolocation/useGeolocation.ts +18 -28
  77. package/src/sdk/session/index.ts +11 -29
  78. package/src/sdk/userLocation/index.ts +142 -0
  79. package/.next/static/chunks/2284.6dd050e60172189a.js +0 -1
  80. package/.next/static/chunks/3155.45360f19bde878fa.js +0 -1
  81. package/.next/static/chunks/3399.60aae5ddb9123ef5.js +0 -1
  82. package/.next/static/chunks/3836.a2f49cd66f78bcb2.js +0 -1
  83. package/.next/static/chunks/4803.412bf2a7e15626a6.js +0 -1
  84. package/.next/static/chunks/6700.f046aa86e2c83b53.js +0 -1
  85. package/.next/static/chunks/7191-bfddc753cd9c143f.js +0 -1
  86. package/.next/static/chunks/83.45e987438cef99ba.js +0 -1
  87. package/.next/static/chunks/8325.b3ddbb43feda1a85.js +0 -1
  88. package/.next/static/chunks/9173-acced9d62b9088c8.js +0 -1
  89. package/.next/static/chunks/ButtonSignIn.111c95c4e7e2640f.js +0 -1
  90. package/.next/static/chunks/CartItem.e010557e686e1009.js +0 -1
  91. package/.next/static/chunks/CartSidebar.f2f885b6d9a227e2.js +0 -1
  92. package/.next/static/chunks/Gift.f93e4a95caf390e3.js +0 -1
  93. package/.next/static/chunks/OrderSummary.8092365254225970.js +0 -1
  94. package/.next/static/chunks/ProductShelf.dcdeffe85dca1ace.js +0 -1
  95. package/.next/static/chunks/ProductTiles.12e553830401871d.js +0 -1
  96. package/.next/static/chunks/RegionModal.0aff964cb36eb49a.js +0 -1
  97. package/.next/static/chunks/RegionSlider.cbf2ac28eeac8dbe.js +0 -1
  98. package/.next/static/chunks/UISKUMatrixSidebar.8b6fac58c48f999c.js +0 -1
  99. package/.next/static/chunks/pages/[slug]/p-2c73921b1ab00c27.js +0 -1
  100. package/.next/static/chunks/pages/_app-cdb132efa1562b88.js +0 -1
  101. package/.next/static/chunks/pages/account/orders/[id]-0a4ab1b9f4c54abb.js +0 -1
  102. package/.next/static/chunks/pages/account/orders-63e3a141c7bd9070.js +0 -1
  103. package/src/components/region/RegionModal/useRegionModal.ts +0 -44
  104. /package/.next/static/{vwdTFcgKjIi-gK7aiBeq3 → Uvcxd2ViFEhaCaNA_H3ts}/_ssgManifest.js +0 -0
@@ -1,23 +1,23 @@
1
1
 
2
- > @faststore/core@3.81.0 prebuild /home/runner/work/faststore/faststore/packages/core
2
+ > @faststore/core@3.82.0 prebuild /home/runner/work/faststore/faststore/packages/core
3
3
  > na run partytown && na run generate
4
4
 
5
5
 
6
- > @faststore/core@3.81.0 partytown /home/runner/work/faststore/faststore/packages/core
6
+ > @faststore/core@3.82.0 partytown /home/runner/work/faststore/faststore/packages/core
7
7
  > partytown copylib ./public/~partytown
8
8
 
9
9
  Partytown lib copied to: /home/runner/work/faststore/faststore/packages/core/public/~partytown
10
10
 
11
- > @faststore/core@3.81.0 generate /home/runner/work/faststore/faststore/packages/core
11
+ > @faststore/core@3.82.0 generate /home/runner/work/faststore/faststore/packages/core
12
12
  > na run generate:schema && na run generate:codegen && na run format:generated
13
13
 
14
14
 
15
- > @faststore/core@3.81.0 generate:schema /home/runner/work/faststore/faststore/packages/core
15
+ > @faststore/core@3.82.0 generate:schema /home/runner/work/faststore/faststore/packages/core
16
16
  > tsx src/server/generator/generateGraphQLSchemaFile.ts
17
17
 
18
18
  Schema GraphQL file generated successfully
19
19
 
20
- > @faststore/core@3.81.0 generate:codegen /home/runner/work/faststore/faststore/packages/core
20
+ > @faststore/core@3.82.0 generate:codegen /home/runner/work/faststore/faststore/packages/core
21
21
  > graphql-codegen
22
22
 
23
23
  [STARTED] Parse Configuration
@@ -37,11 +37,11 @@ Running lifecycle hook "afterStart" scripts...
37
37
  [CLI] Loading Documents
38
38
  [CLI] Generating output
39
39
 
40
- > @faststore/core@3.81.0 format:generated /home/runner/work/faststore/faststore/packages/core
40
+ > @faststore/core@3.82.0 format:generated /home/runner/work/faststore/faststore/packages/core
41
41
  > prettier --write "@generated/**/*.{ts,js,tsx,jsx,json}" --loglevel error
42
42
 
43
43
 
44
- > @faststore/core@3.81.0 build /home/runner/work/faststore/faststore/packages/core
44
+ > @faststore/core@3.82.0 build /home/runner/work/faststore/faststore/packages/core
45
45
  > next build
46
46
 
47
47
  ⚠ No build cache found. Please configure build caching for faster rebuilds. Read more: https://nextjs.org/docs/messages/no-cache
@@ -73,16 +73,16 @@ Warning: Dynamic Content not found for the page: home. Refer to the Dynamic Cont
73
73
  Collecting build traces ...
74
74
 
75
75
  Route (pages) Size First Load JS
76
- ┌ ● / 3.66 kB 140 kB
76
+ ┌ ● / 3.66 kB 141 kB
77
77
  ├ └ css/b1806cbafd0c1f81.css 3.06 kB
78
- ├ /_app 0 B 106 kB
79
- ├ ● /[...slug] 2.45 kB 154 kB
78
+ ├ /_app 0 B 107 kB
79
+ ├ ● /[...slug] 2.45 kB 155 kB
80
80
  ├ ● /[slug]/p 33.2 kB 170 kB
81
81
  ├ ├ css/a3ca6a9b63f657be.css 5.75 kB
82
82
  ├ ├ css/62a5153ac7061286.css 6.11 kB
83
83
  ├ └ css/6d92375b6ee8276a.css 16.1 kB
84
- ├ ○ /404 1.55 kB 138 kB
85
- ├ ● /500 1.55 kB 138 kB
84
+ ├ ○ /404 1.55 kB 139 kB
85
+ ├ ● /500 1.55 kB 139 kB
86
86
  ├ λ /account 240 B 107 kB
87
87
  ├ ● /account/[...unknown] 281 B 107 kB
88
88
  ├ λ /account/403 2.44 kB 139 kB
@@ -91,7 +91,7 @@ Route (pages) Size First Load JS
91
91
  ├ └ css/5347dbc8b71de47d.css 4.25 kB
92
92
  ├ λ /account/orders 10.1 kB 147 kB
93
93
  ├ └ css/38e3a4a55b13b062.css 12.7 kB
94
- ├ λ /account/orders/[id] 12.1 kB 149 kB
94
+ ├ λ /account/orders/[id] 12.2 kB 149 kB
95
95
  ├ └ css/297be4be3be36ff0.css 12.6 kB
96
96
  ├ λ /account/profile 1.79 kB 139 kB
97
97
  ├ └ css/831a1f72fe4b2d80.css 3.97 kB
@@ -99,18 +99,18 @@ Route (pages) Size First Load JS
99
99
  ├ └ css/ec7fdad03808422d.css 5.22 kB
100
100
  ├ λ /account/user-details 1.74 kB 139 kB
101
101
  ├ └ css/e46393a76c5d93a9.css 4.17 kB
102
- ├ λ /api/graphql 0 B 106 kB
103
- ├ λ /api/health/live 0 B 106 kB
104
- ├ λ /api/health/ready 0 B 106 kB
105
- ├ λ /api/preview 0 B 106 kB
102
+ ├ λ /api/graphql 0 B 107 kB
103
+ ├ λ /api/health/live 0 B 107 kB
104
+ ├ λ /api/health/ready 0 B 107 kB
105
+ ├ λ /api/preview 0 B 107 kB
106
106
  ├ ● /checkout 737 B 138 kB
107
- ├ ● /login 1.68 kB 138 kB
107
+ ├ ● /login 1.68 kB 139 kB
108
108
  └ ● /s 3.3 kB 155 kB
109
109
  + First Load JS shared by all 110 kB
110
110
  ├ chunks/framework-807b0f81cbc129f0.js 45.4 kB
111
111
  ├ chunks/main-f658704b53a96ab1.js 33.1 kB
112
- ├ chunks/pages/_app-cdb132efa1562b88.js 24.1 kB
113
- ├ chunks/webpack-70daccedc5bafd4f.js 3.85 kB
112
+ ├ chunks/pages/_app-f8a8608651b3f06b.js 24.3 kB
113
+ ├ chunks/webpack-3f872192534f3b6d.js 3.85 kB
114
114
  └ css/4b8252ed2f23ac67.css 3.51 kB
115
115
 
116
116
  λ (Server) server-side renders at runtime (uses getInitialProps or getServerSideProps)
@@ -1,14 +1,14 @@
1
1
 
2
- > @faststore/core@3.81.0 test /home/runner/work/faststore/faststore/packages/core
2
+ > @faststore/core@3.82.0 test /home/runner/work/faststore/faststore/packages/core
3
3
  > jest
4
4
 
5
- PASS test/utils/multipleTemplates.test.ts (26.552 s)
6
- PASS test/server/cms/global.test.ts (27.109 s)
5
+ PASS test/server/cms/global.test.ts (27.279 s)
6
+ PASS test/utils/multipleTemplates.test.ts (27.591 s)
7
7
  PASS test/server/cms/index.test.ts
8
- PASS test/server/index.test.ts (30.406 s)
8
+ PASS test/server/index.test.ts (31.521 s)
9
9
 
10
10
  Test Suites: 4 passed, 4 total
11
11
  Tests: 22 passed, 22 total
12
12
  Snapshots: 0 total
13
- Time: 31.589 s
13
+ Time: 32.836 s
14
14
  Ran all test suites.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,10 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [3.82.2](https://github.com/vtex/faststore/compare/v3.82.1...v3.82.2) (2025-09-05)
7
+
8
+ **Note:** Version bump only for package @faststore/core
9
+
6
10
  # [3.82.0](https://github.com/vtex/faststore/compare/v3.81.0...v3.82.0) (2025-09-05)
7
11
 
8
12
  ### Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@faststore/core",
3
- "version": "3.82.0",
3
+ "version": "3.82.2",
4
4
  "license": "MIT",
5
5
  "repository": "vtex/faststore",
6
6
  "browserslist": "supports es6-module and not dead",
@@ -108,5 +108,5 @@
108
108
  "ts-jest": "29.1.1",
109
109
  "typescript": "5.3.2"
110
110
  },
111
- "gitHead": "8037b2c4dccc4add6e048c8082942a6744187f54"
111
+ "gitHead": "fbbcce83dabcc215933fa167adc54ced9473c9f0"
112
112
  }
package/src/Layout.tsx CHANGED
@@ -1,12 +1,10 @@
1
1
  import { useMemo, type PropsWithChildren, type ReactElement } from 'react'
2
2
 
3
- import { useRegionModal } from './components/region/RegionModal/useRegionModal'
4
3
  import { usePageViewEvent } from './sdk/analytics/hooks/usePageViewEvent'
5
4
 
6
5
  function Layout({ children }: PropsWithChildren) {
7
6
  const props = useMemo(() => (children as ReactElement)?.props, [])
8
7
  usePageViewEvent(props)
9
- useRegionModal()
10
8
 
11
9
  return <>{children}</>
12
10
  }
@@ -1,20 +1,16 @@
1
- import {
2
- regionSliderTypes,
3
- type RegionBarProps as UIRegionBarProps,
4
- } from '@faststore/ui'
1
+ import type { RegionBarProps as UIRegionBarProps } from '@faststore/ui'
5
2
  import { useEffect, useRef } from 'react'
6
3
 
7
- import { useUI } from '@faststore/ui'
8
- import { useSession } from 'src/sdk/session'
4
+ import { regionSliderTypes, useUI } from '@faststore/ui'
5
+ import { sessionStore, useSession } from 'src/sdk/session'
9
6
  import { useDeliveryPromise } from 'src/sdk/deliveryPromise'
10
7
 
11
- import { deliveryPromise, session as initialSession } from 'discovery.config'
12
8
  import { useOverrideComponents } from 'src/sdk/overrides/OverrideContext'
13
9
  import { textToTitleCase } from 'src/utils/utilities'
14
10
  import { getGlobalSettings } from 'src/utils/globalSettings'
11
+ import { useCheckRegionState } from 'src/sdk/userLocation'
15
12
 
16
- import { useRegionModal } from '../RegionModal/useRegionModal'
17
-
13
+ import { deliveryPromise } from 'discovery.config'
18
14
  export interface RegionBarProps {
19
15
  /**
20
16
  * A React component that will be rendered as the location icon.
@@ -55,40 +51,38 @@ function RegionBar({
55
51
  FilterButtonIcon,
56
52
  } = useOverrideComponents<'RegionBar'>()
57
53
 
58
- const { openModal, openPopover, openRegionSlider } = useUI()
59
54
  const { city, postalCode } = useSession()
60
- const { isValidationComplete } = useRegionModal()
55
+ const regionBarRef = useRef<HTMLDivElement>(null)
56
+ const { openPopover, openRegionSlider } = useUI()
57
+ const { openModal } = useCheckRegionState(regionBarRef)
61
58
  const { globalPickupPoint } = useDeliveryPromise()
62
59
  const {
63
60
  deliveryPromise: { filterByPickupPoint } = {},
64
61
  } = getGlobalSettings()
65
- const regionBarRef = useRef<HTMLDivElement>(null)
62
+ const initialSession = sessionStore.readInitial()
66
63
 
67
- const defaultPostalCode =
68
- !!initialSession?.postalCode && postalCode === initialSession.postalCode
69
64
  const shouldDisplayGlobalFilter =
70
65
  deliveryPromise.enabled && !!postalCode && filterByPickupPoint?.enabled
71
66
 
72
- // If location is not mandatory, and default zipCode is provided or if the user has not set a zipCode, show the popover.
73
- const displayRegionPopover =
74
- defaultPostalCode || (!postalCode && !deliveryPromise.mandatory)
75
-
76
67
  useEffect(() => {
77
68
  if (!deliveryPromise.enabled) {
78
69
  return
79
70
  }
80
71
 
81
- if (!isValidationComplete) {
82
- return
83
- }
72
+ const defaultPostalCode =
73
+ !!initialSession?.postalCode && postalCode === initialSession.postalCode
74
+
75
+ // If location is not mandatory, and default zipCode is provided or if the user has not set a zipCode, show the popover.
76
+ const displayRegionPopover =
77
+ defaultPostalCode || (!postalCode && !deliveryPromise.mandatory)
84
78
 
85
- if (isValidationComplete && displayRegionPopover && regionBarRef.current) {
79
+ if (displayRegionPopover && regionBarRef.current) {
86
80
  openPopover({
87
81
  isOpen: true,
88
82
  triggerRef: regionBarRef,
89
83
  })
90
84
  }
91
- }, [isValidationComplete])
85
+ }, [])
92
86
 
93
87
  return (
94
88
  <RegionBarWrapper.Component
@@ -1,45 +1,14 @@
1
- import { useEffect, useRef } from 'react'
1
+ import { useRef } from 'react'
2
2
 
3
- import { Button as UIButton, Icon as UIIcon, useUI } from '@faststore/ui'
4
- import { deliveryPromise, session as initialSession } from 'discovery.config'
3
+ import { Button as UIButton, Icon as UIIcon } from '@faststore/ui'
5
4
  import { useSession } from 'src/sdk/session'
6
5
  import { textToTitleCase } from 'src/utils/utilities'
7
-
8
- import { useRegionModal } from '../RegionModal/useRegionModal'
6
+ import { useCheckRegionState } from 'src/sdk/userLocation'
9
7
 
10
8
  function RegionButton({ icon, label }: { icon: string; label: string }) {
11
- const { openModal, openPopover } = useUI()
12
9
  const { city, postalCode } = useSession()
13
- const { isValidationComplete } = useRegionModal()
14
10
  const regionButtonRef = useRef<HTMLButtonElement>(null)
15
-
16
- const defaultPostalCode =
17
- !!initialSession?.postalCode && postalCode === initialSession.postalCode
18
-
19
- // If location is not mandatory, and default zipCode is provided or if the user has not set a zipCode, show the popover.
20
- const displayRegionPopover =
21
- defaultPostalCode || (!postalCode && !deliveryPromise.mandatory)
22
-
23
- useEffect(() => {
24
- if (!deliveryPromise.enabled) {
25
- return
26
- }
27
-
28
- if (!isValidationComplete) {
29
- return
30
- }
31
-
32
- if (
33
- isValidationComplete &&
34
- displayRegionPopover &&
35
- regionButtonRef.current
36
- ) {
37
- openPopover({
38
- isOpen: true,
39
- triggerRef: regionButtonRef,
40
- })
41
- }
42
- }, [isValidationComplete])
11
+ const { openModal } = useCheckRegionState(regionButtonRef)
43
12
 
44
13
  return (
45
14
  <UIButton
@@ -3,33 +3,7 @@ import { useEffect } from 'react'
3
3
  import { deliveryPromise } from 'discovery.config'
4
4
  import { TIME_TO_VALIDATE_SESSION } from 'src/constants'
5
5
  import { sessionStore, validateSession } from 'src/sdk/session'
6
-
7
- async function askGeolocationConsent() {
8
- const { postalCode: stalePostalCode, geoCoordinates: staleGeoCoordinates } =
9
- sessionStore.read()
10
-
11
- if (navigator?.geolocation && (!stalePostalCode || !staleGeoCoordinates)) {
12
- navigator.geolocation.getCurrentPosition(
13
- async ({ coords: { latitude, longitude } }) => {
14
- // Revalidate the session because users can set a zip code while granting consent.
15
- const revalidatedSession = sessionStore.read()
16
- if (
17
- revalidatedSession.postalCode ||
18
- revalidatedSession.geoCoordinates
19
- ) {
20
- return
21
- }
22
-
23
- const newSession = {
24
- ...revalidatedSession,
25
- geoCoordinates: { latitude, longitude },
26
- }
27
- const validatedSession = await validateSession(newSession)
28
- sessionStore.set(validatedSession ?? newSession)
29
- }
30
- )
31
- }
32
- }
6
+ import { getNavigatorGeolocation } from '../userLocation'
33
7
 
34
8
  export default function useGeolocation() {
35
9
  useEffect(() => {
@@ -37,6 +11,22 @@ export default function useGeolocation() {
37
11
  return
38
12
  }
39
13
 
40
- setTimeout(() => askGeolocationConsent(), TIME_TO_VALIDATE_SESSION)
14
+ setTimeout(() => {
15
+ let session = sessionStore.read()
16
+
17
+ if (!session.postalCode || !session.geoCoordinates) {
18
+ getNavigatorGeolocation(session).then(async (newSession) => {
19
+ if (session === newSession) return
20
+
21
+ // checks if someone already filled the location data
22
+ session = sessionStore.read()
23
+ if (session.postalCode || session.geoCoordinates) {
24
+ return
25
+ }
26
+ const validatedSession = await validateSession(newSession)
27
+ sessionStore.set(validatedSession ?? newSession)
28
+ })
29
+ }
30
+ }, TIME_TO_VALIDATE_SESSION)
41
31
  }, [])
42
32
  }
@@ -13,8 +13,9 @@ import { sanitizeHost } from 'src/utils/utilities'
13
13
  import storeConfig from '../../../discovery.config'
14
14
  import { cartStore } from '../cart'
15
15
  import { request } from '../graphql/request'
16
- import { getSavedAddress } from '../profile'
17
16
  import { createValidationStore, useStore } from '../useStore'
17
+ import { getPostalCode } from '../userLocation/index'
18
+ import deepEqual from 'fast-deep-equal'
18
19
 
19
20
  const REFRESH_TOKEN_URL = `${discoveryConfig.storeUrl}/api/vtexid/refreshtoken/webstore`
20
21
 
@@ -75,41 +76,20 @@ export const mutation = gql(`
75
76
 
76
77
  export const validateSession = async (session: Session) => {
77
78
  // If deliveryPromise is enabled and there is no postalCode in the session
78
- if (storeConfig.deliveryPromise?.enabled && !session.postalCode) {
79
+ if (
80
+ storeConfig.deliveryPromise?.enabled &&
81
+ (!session.postalCode ||
82
+ session.postalCode === storeConfig.session.postalCode)
83
+ ) {
79
84
  // Case B2B: If a B2B shopper is logged in and a saved address is available, the postalCode field is automatically updated with the postal code from that address by the B2B session apps (shopper-session and profile-session).
80
85
  if (session.b2b && session.b2b?.savedPostalCode) {
81
86
  sessionStore.set({
82
87
  ...session,
83
88
  postalCode: session.b2b.savedPostalCode,
84
89
  })
85
- }
86
-
87
- // Case B2C: If a B2C shopper is logged in, try to get the location (postalCode, geoCoordinates, and country) from their saved address
88
- else if (session.person?.id) {
89
- const address = await getSavedAddress(session.person?.id)
90
-
91
- // Save the location in the session
92
- if (address) {
93
- sessionStore.set({
94
- ...session,
95
- city: address?.city,
96
- postalCode: address?.postalCode,
97
- geoCoordinates: {
98
- // the values come in the reverse expected order
99
- latitude: address?.geoCoordinate ? address?.geoCoordinate[1] : null,
100
- longitude: address?.geoCoordinate
101
- ? address?.geoCoordinate[0]
102
- : null,
103
- },
104
- country: address?.country,
105
- })
106
- }
107
90
  } else {
108
- // Fallback: use the initial postalCode defined in discovery.config.js
109
- const initialPostalCode = defaultStore.readInitial().postalCode
110
-
111
- !!initialPostalCode &&
112
- sessionStore.set({ ...session, postalCode: initialPostalCode })
91
+ const sessionWithLocation = await getPostalCode(session)
92
+ !!sessionWithLocation && sessionStore.set(sessionWithLocation)
113
93
  }
114
94
  }
115
95
 
@@ -170,6 +150,8 @@ const defaultStore = createSessionStore(storeConfig.session, onValidate)
170
150
  export const sessionStore = {
171
151
  ...defaultStore,
172
152
  set: (val: Session) => {
153
+ if (deepEqual(val, defaultStore.read()) === true) return
154
+
173
155
  defaultStore.set(val)
174
156
 
175
157
  // Trigger cart revalidation when session changes
@@ -0,0 +1,142 @@
1
+ import type { Session } from '@faststore/sdk'
2
+ import { getSavedAddress } from '../profile'
3
+ import DiscoveryConfig from 'discovery.config'
4
+ import { sessionStore } from '../session'
5
+ import { type RefObject, useEffect, useState } from 'react'
6
+ import { useUI } from '@faststore/ui'
7
+
8
+ const set = (session: Session, data: Partial<Session>) => {
9
+ if (!data || !Object.keys(data).length) return session
10
+
11
+ return { ...session, ...data }
12
+ }
13
+
14
+ let userAddress: Partial<
15
+ Pick<Session, 'city' | 'country' | 'geoCoordinates' | 'postalCode'>
16
+ > = undefined
17
+ const getUserSavedAddress = async (session: Session): Promise<Session> => {
18
+ if (!!userAddress) return set(session, userAddress)
19
+ const user = session?.person
20
+ if (!user?.id) return Promise.resolve(session)
21
+
22
+ const { city, country, geoCoordinate, postalCode } =
23
+ (await getSavedAddress(user.id)) ?? {}
24
+
25
+ userAddress = {
26
+ city,
27
+ country,
28
+ geoCoordinates: {
29
+ latitude: geoCoordinate?.[1] ?? null,
30
+ longitude: geoCoordinate?.[0] ?? null,
31
+ },
32
+ postalCode,
33
+ }
34
+
35
+ return set(session, userAddress)
36
+ }
37
+
38
+ let geoCoordinates: Session['geoCoordinates'] = undefined
39
+ export const getNavigatorGeolocation = (session: Session) => {
40
+ return new Promise<Session>((res) => {
41
+ if (!!geoCoordinates) return res(set(session, { geoCoordinates }))
42
+
43
+ const successLocation: PositionCallback = ({
44
+ coords: { latitude, longitude },
45
+ }) => {
46
+ geoCoordinates = { latitude, longitude }
47
+ return res(set(session, { geoCoordinates }))
48
+ }
49
+
50
+ const onError: PositionErrorCallback = (err) => {
51
+ console.warn('Failed to get navigator location: ', err)
52
+ return res(session)
53
+ }
54
+
55
+ if (!!navigator && 'geolocation' in navigator) {
56
+ const SECONDS = 1000,
57
+ MINUTE = 60 * SECONDS
58
+
59
+ return navigator.geolocation.getCurrentPosition(
60
+ successLocation,
61
+ onError,
62
+ {
63
+ timeout: 3 * MINUTE,
64
+ }
65
+ )
66
+ }
67
+
68
+ return session
69
+ })
70
+ }
71
+
72
+ export const getPostalCode = async (session: Session) => {
73
+ const sessionWithLoggedAddress = await getUserSavedAddress(session)
74
+
75
+ if (sessionWithLoggedAddress !== session) return sessionWithLoggedAddress
76
+
77
+ const defaultPostalCode: string | null =
78
+ DiscoveryConfig.session?.postalCode ?? null
79
+
80
+ return set(session, {
81
+ postalCode: defaultPostalCode,
82
+ })
83
+ }
84
+
85
+ const { deliveryPromise, session: defaultSession } = DiscoveryConfig
86
+
87
+ export const useCheckRegionState = (popoverRef?: RefObject<HTMLElement>) => {
88
+ const [regionPopoverState, setRegionPopoverState] = useState<
89
+ 'open' | 'closed'
90
+ >('closed')
91
+ const { openModal, openPopover, modal: modalOpen, closePopover } = useUI()
92
+
93
+ function getPopoverState(session: Session) {
94
+ const isDefaultPostalCode =
95
+ !!defaultSession.postalCode &&
96
+ defaultSession.postalCode === session?.postalCode
97
+
98
+ const newPopoverState =
99
+ isDefaultPostalCode ||
100
+ (!session?.postalCode && !deliveryPromise.mandatory)
101
+ ? 'open'
102
+ : 'closed'
103
+
104
+ return newPopoverState
105
+ }
106
+
107
+ useEffect(() => {
108
+ if (!deliveryPromise.enabled) return
109
+
110
+ const handle = (session: Session) => {
111
+ if (deliveryPromise.mandatory && !session?.postalCode && !modalOpen)
112
+ return openModal()
113
+
114
+ setRegionPopoverState((state) => {
115
+ const newState = getPopoverState(session)
116
+ return state !== newState ? newState : state
117
+ })
118
+ }
119
+
120
+ return sessionStore.subscribe(handle)
121
+ }, [modalOpen])
122
+
123
+ useEffect(() => {
124
+ if (regionPopoverState === 'closed') {
125
+ closePopover()
126
+ return
127
+ }
128
+
129
+ if (popoverRef) {
130
+ openPopover({
131
+ isOpen: true,
132
+ triggerRef: popoverRef,
133
+ })
134
+ }
135
+ }, [popoverRef, regionPopoverState])
136
+
137
+ return {
138
+ openModal,
139
+ openPopover,
140
+ regionPopoverState,
141
+ }
142
+ }
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2284],{2284:function(e,t,r){r.r(t),r.d(t,{default:function(){return search_SearchDropdown_SearchDropdown},sendAutocompleteClickEvent:function(){return sendAutocompleteClickEvent}});var a=r(3067),n=r(4235),i=r(1933),o=r(4583),c=r(2174),s=r(757),l=r(9994),u=r(2701),d=r(9482),m=r(1379),f=r(1549);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,i.R)(),{searchHistory:a,clearSearchHistory:n}=(0,m.Z)();return a.length?(0,f.jsx)(u.Z,_objectSpread(_objectSpread({title:"History",onClear:n},t),{},{children:a.map(e=>(0,f.jsx)(d.Z,{value:e.term,linkProps:{href:e.path,onClick:()=>null==r?void 0:r(e.term,e.path)}},e.term))})):null},p=r(3311),h=r(1287),v=r(704),y=r(5487),g=r(2693),b=r(31),O=y.M,search_useTopSearch=function(){var{channel:e,locale:t}=(0,b.kP)(),{data:r,error:a}=(0,g.aM)(O,{term:"",selectedFacets:[{key:"channel",value:null!=e?e:""},{key:"locale",value:t}]});return{data:r,error:a}},w=["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,w),{values:{onSearchSelection:c}}=(0,i.R)(),{data:s}=search_useTopSearch(),l=(null!==(t=null==s?void 0:s.search.suggestions.terms)&&void 0!==t?t:r).slice(0,5);return 0===l.length?null:(0,f.jsx)(p.Z,SearchTop_objectSpread(SearchTop_objectSpread({title:"Top Search"},o),{},{children:l.map((e,t)=>(0,f.jsx)(h.Z,{value:e.value,index:t,linkProps:{href:(0,v.u)({term:e.value,sort:a}),onClick:()=>null==c?void 0:c(e.value,(0,v.u)({term:e.value,sort:a}))}},t))}))},E=r(6652),S=r(6035),k=r(9082),j=r(7190),P=r(2614),_=r(7866),Z=r(7859),C=r(4194),x=r(2056),D=r(8687),I=r(9746),q=r(643),R=r(8563),T=r(1090),M=r.n(T),K=["product","index","quickOrderSettings","onChangeCustomSearchDropdownVisible"],V=["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,quickOrderSettings:a,onChangeCustomSearchDropdownVisible:o}=e,c=(0,n.Z)(e,K),{values:{term:s,onSearchSelection:l}}=(0,i.R)(),{pushToast:u}=(0,E.l8)(),{__experimentalSKUMatrixSidebar:d}=(0,I.r3)(),m=(0,R.w)({product:t,selectedOffer:0,index:r}),{href:p,onClick:h}=m,v=(0,n.Z)(m,V),{0:y,1:g}=(0,C.useState)(1),{id:b,sku:O,gtin:w,brand:T,isVariantOf:L,isVariantOf:{name:Q},unitMultiplier:B,image:[F],offers:{lowPrice:N,offers:[{listPrice:U,availability:A,price:H,listPriceWithTaxes:G,seller:z,priceWithTaxes:W,quantity:$}]},additionalProperty:J}=t,X=SearchProductItem_objectSpread({href:p,onClick:()=>{var e;h(),null==l||l(Q,p),sendAutocompleteClickEvent({url:p,term:s,position:r,productId:null!==(e=t.isVariantOf.productGroupID)&&void 0!==e?e:t.sku})}},v),Y=(0,C.useMemo)(()=>"https://schema.org/OutOfStock"===A,[A]),ee=(0,C.useMemo)(()=>!!Object.keys(t.isVariantOf.skuVariants.allVariantsByName).length,[t]),et=(0,D.Q)({id:b,price:H,priceWithTaxes:W,listPrice:U,listPriceWithTaxes:G,seller:z,quantity:y,itemOffered:{sku:O,name:Q,gtin:w,image:[F],brand:T,isVariantOf:L,additionalProperty:J,unitMultiplier:B}},!1);return(0,f.jsxs)(S.Z,SearchProductItem_objectSpread(SearchProductItem_objectSpread({linkProps:X},c),{},{children:[(0,f.jsx)(k.Z,{children:(0,f.jsx)(x.Z,{src:F.url,alt:F.alternateName,width:56,height:56})}),(0,f.jsx)(j.Z,{title:Q,price:{value:N,listPrice:U,formatter:q.P},onValidateBlur:(e,t,r)=>u({title:"Invalid quantity!",message:"The quantity you entered is outside the range of ".concat(e," to ").concat(t,". The quantity was set to ").concat(r,"."),status:"INFO",icon:(0,f.jsx)(P.Z,{name:"CircleWavyWarning",width:30,height:30})}),quickOrder:{enabled:null==a?void 0:a.quickOrder,outOfStockLabel:"Out of stock",availability:!Y,hasVariants:ee,buyProps:et,quantity:y,onChangeQuantity:g,max:$,skuMatrixControl:(0,f.jsx)(f.Fragment,{children:(null==a?void 0:a.quickOrder)&&(0,f.jsxs)(_.Z,{children:[(0,f.jsx)(Z.Z,{children:null==a?void 0:a.skuMatrix.triggerButtonLabel}),(0,f.jsx)(d.Component,{overlayProps:{className:M().section},formatter:q.P,columns:null==a?void 0:a.skuMatrix.columns,product:t,status:e=>o("visible"===e)})]})})}})]}))},L=["sort","quickOrderSettings","onChangeCustomSearchDropdownVisible"];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}function sendAutocompleteClickEvent(e){var{url:t,term:a,position:n,productId:i}=e;r.e(6393).then(r.bind(r,6393)).then(e=>{var{sendAnalyticsEvent:r}=e;r({name:"intelligent_search_autocomplete_click",params:{term:a,url:t,productId:i,position:n}})})}var search_SearchDropdown_SearchDropdown=function(e){var{sort:t,quickOrderSettings:r,onChangeCustomSearchDropdownVisible:a}=e,u=(0,n.Z)(e,L),{values:{onSearchSelection:d,products:m,term:p,terms:h}}=(0,i.R)();return(0,f.jsxs)(o.Z,SearchDropdown_objectSpread(SearchDropdown_objectSpread({},u),{},{children:[(0,f.jsx)(search_SearchHistory_SearchHistory,{sort:t}),(0,f.jsx)(search_SearchTop_SearchTop,{sort:t}),(0,f.jsx)(c.Z,{children:null==h?void 0:h.map(e=>{var{value:r}=e;return(0,f.jsx)(s.Z,{term:p,suggestion:r,linkProps:{href:(0,v.u)({term:r,sort:t}),onClick:()=>{null==d||d(p,(0,v.u)({term:p,sort:t})),sendAutocompleteClickEvent({term:p,url:window.location.href})}}},r)})}),(0,f.jsx)(l.Z,{children:m.map((e,t)=>(0,f.jsx)(search_SearchProductItem_SearchProductItem,{product:e,index:t,quickOrderSettings:r,onChangeCustomSearchDropdownVisible:a},e.id))})]}))}},8687:function(e,t,r){r.d(t,{Q:function(){return useBuyButton}});var a=r(4194),n=r(6652),i=r(31),o=r(1041),useBuyButton=function(e){var t,c=!(arguments.length>1)||void 0===arguments[1]||arguments[1],{openCart:s}=(0,n.l8)(),{currency:{code:l}}=(0,i.kP)(),u=Array.isArray(e);return{onClick:(0,a.useCallback)(t=>{if(t.preventDefault(),e){var a=u?e.reduce((e,t)=>e+=t.price*t.quantity,0):e.price*e.quantity;r.e(6393).then(r.bind(r,6393)).then(t=>{var{sendAnalyticsEvent:r}=t;r({name:"add_to_cart",params:{currency:l,value:a,items:u?e.map(generatedItem):[generatedItem(e)]}})}),u?e.forEach(e=>o.i8.addItem(e)):o.i8.addItem(e),c&&s()}function generatedItem(e){return{item_id:e.itemOffered.isVariantOf.productGroupID,item_name:e.itemOffered.isVariantOf.name,item_brand:e.itemOffered.brand.name,item_variant:e.itemOffered.sku,quantity:e.quantity,price:e.price,discount:e.listPrice-e.price,currency:l,item_variant_name:e.itemOffered.name,product_reference_id:e.itemOffered.gtin}}},[l,e,s,u]),"data-testid":"buy-button","data-sku":u?"sku-matrix-sidebar":null==e?void 0:e.itemOffered.sku,"data-seller":u?null===(t=e[0])||void 0===t?void 0:t.seller.identifier:null==e?void 0:e.seller.identifier}}},643:function(e,t,r){r.d(t,{P:function(){return useFormattedPrice}});var a=r(4194),n=r(31),usePriceFormatter=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])},useFormattedPrice=e=>{var t=usePriceFormatter();return(0,a.useMemo)(()=>t(e),[t,e])}},8563:function(e,t,r){r.d(t,{w:function(){return useProductLink}});var a=r(4194),n=r(31),useProductLink=e=>{var{index:t,product:i,selectedOffer:o}=e,{slug:c}=i,{currency:{code:s}}=(0,n.kP)(),l=(0,a.useCallback)(()=>{r.e(6393).then(r.bind(r,6393)).then(e=>{var{sendAnalyticsEvent:r}=e;r({name:"select_item",params:{items:[{item_id:i.isVariantOf.productGroupID,item_name:i.isVariantOf.name,item_brand:i.brand.name,item_variant:i.sku,index:t,price:i.offers.offers[o].price,discount:i.offers.offers[o].listPrice-i.offers.offers[o].price,currency:s,item_variant_name:i.name,product_reference_id:i.gtin}]}}),r({name:"search_select_item",params:{url:window.location.href,items:[{item_id:i.isVariantOf.productGroupID,item_variant:i.sku,index:t}]}})})},[s,i,t,o]);return{href:"/".concat(c,"/p"),onClick:l,"data-testid":"product-link"}}},9767:function(e,t,r){var a=r(4194),n=r(5450);let i=(0,a.forwardRef)(function({value:e,as:t="span",variant:r="selling",testId:i="fs-price",formatter:o=e=>e,SRText:c,...s},l){let u=o(e,r);return a.createElement(t,{ref:l,"data-fs-price":!0,"data-fs-price-variant":r,"data-testid":i,...s},c&&a.createElement(n.Z,{text:c}),u)});t.Z=i},5450:function(e,t,r){var a=r(4194);t.Z=function({text:e,as:t}){let r=t??"span";return a.createElement(r,{"data-fs-sr-only":!0},e)}},2955:function(e,t,r){r.d(t,{_:function(){return useSKUMatrix}});var a=r(4194),n=r(3442);function useSKUMatrix(){let e=(0,a.useContext)(n.m);if(!e)throw Error("Do not use SKUMatrix components outside the SKUMatrix context.");return e}},1933:function(e,t,r){r.d(t,{R:function(){return useSearch}});var a=r(4194),n=r(101);let useSearch=()=>{let e=(0,a.useContext)(n.c);return e?{inContext:!0,values:e}:{inContext:!1}}},9088:function(e,t,r){var a=r(4194),n=r(9767);let i=(0,a.forwardRef)(function({testId:e="fs-product-price",value:t,listPrice:r,formatter:i,...o},c){let s=r??0,l=t??0;return a.createElement("div",{ref:c,"data-fs-product-price":!0,"data-testid":e,...o},l!==s&&0!==s?a.createElement(a.Fragment,null,a.createElement(n.Z,{value:s,formatter:i,testId:"list-price","data-value":s,variant:"listing",SRText:"Original price:"}),a.createElement(n.Z,{value:l,formatter:i,testId:"price","data-value":l,variant:"spot",SRText:"Price:"})):a.createElement(n.Z,{value:l,formatter:i,testId:"price","data-value":l,variant:"spot",SRText:"Price:"}))});t.Z=i},6693:function(e,t,r){var a=r(4194),n=r(7041),i=r(2614),o=r(2256);t.Z=({max:e,min:t=1,unitMultiplier:r=1,useUnitMultiplier:c,initial:s,disabled:l=!1,onChange:u,onValidateBlur:d,testId:m="fs-quantity-selector",...f})=>{let[p,h]=(0,a.useState)(s??t),[v,y]=(0,a.useState)(p*r),roundUpQuantityIfNeeded=e=>c?Math.ceil(e/r)*r:e,g=p===t,b=p===e,changeQuantity=e=>{let t=validateQuantityBounds(p+e);u?.(t),h(t),y(t*r)};function validateQuantityBounds(a){let n=t?Math.max(a,t):a;return e?Math.min(n,c?e*r:e):n}return(0,a.useEffect)(()=>{s&&h(s)},[s]),a.createElement("div",{"data-fs-quantity-selector":l?"disabled":"true","data-testid":m,...f},a.createElement(n.Z,{"data-quantity-selector-button":"left",icon:a.createElement(i.Z,{name:"Minus",width:16,height:16,weight:"bold"}),"aria-label":"Decrement Quantity","aria-controls":"quantity-selector-input",disabled:g||l,onClick:()=>changeQuantity(-1),testId:`${m}-left-button`,size:"small"}),a.createElement(o.Z,{"data-quantity-selector-input":!0,id:"quantity-selector-input","aria-label":"Quantity",value:c?v:p,onChange:e=>{let t=e.target.value.replace(/\D/g,"");h(Number(t))},onBlur:function(){let a=validateQuantityBounds(p),n=roundUpQuantityIfNeeded(a),i=e??(t?Math.max(p,t):p),o=p>i||p<t;o&&d?.(t,i,n),h(()=>(y(n),u?.(n/r),n/r))},onInput:e=>{let t=e.currentTarget;t.value=t.value.replace(/\D/g,"")},disabled:l}),a.createElement(n.Z,{"data-quantity-selector-button":"right","aria-controls":"quantity-selector-input","aria-label":"Increment Quantity",disabled:b||l,icon:a.createElement(i.Z,{name:"Plus",width:16,height:16,weight:"bold"}),onClick:()=>changeQuantity(1),testId:`${m}-right-button`,size:"small"}))}},2174:function(e,t,r){var a=r(4194),n=r(1933),i=r(4564);t.Z=({testId:e="fs-search-auto-complete",children:t,...r})=>{let{inContext:o,values:c}=(0,n.R)();return o&&(c.terms.length<=0||c.term.length<=0)?null:a.createElement("section",{"data-testid":e,"data-fs-search-auto-complete":!0,...r},a.createElement(i.Z,{as:"ol"},t))}},757:function(e,t,r){var a=r(4194),n=r(2614),i=r(727);t.Z=({testId:e="fs-search-auto-complete-term",suggestion:t,term:r,linkProps:o,icon:c=a.createElement(n.Z,{name:"MagnifyingGlass",width:18,height:18})})=>{let s=t.toLowerCase().split(r.toLowerCase());return a.createElement("li",{"data-fs-search-auto-complete-item":!0,"data-testid":e},a.createElement(i.Z,{...o,"data-fs-search-auto-complete-item-link":!0,variant:"display"},a.createElement("span",{"data-fs-search-auto-complete-item-icon":!0},c),a.createElement("p",null,s.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!==s.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(4194),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..."))},i=(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=i},2701:function(e,t,r){var a=r(4194),n=r(1933),i=r(9009),o=r(4564);t.Z=({testId:e="fs-search-history",title:t="History",clearLabel:r="Clear History",onClear:c,children:s,...l})=>{let{inContext:u,values:d}=(0,n.R)();return u&&(0!==d.term.length||d.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(i.Z,{variant:"tertiary",onClick:c,size:"small"},r)),a.createElement(o.Z,{as:"ol"},s))}},9482:function(e,t,r){var a=r(4194),n=r(2614),i=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(i.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(4194),n=r(727);let i=(0,a.forwardRef)(function({testId:e="fs-search-product-item",linkProps:t,children:r},i){return a.createElement("li",{ref:i,"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=i},7190:function(e,t,r){r.d(t,{Z:function(){return f}});var a=r(4194),n=r(9088),i=r(1667),o=r(2614),c=r(276),s=r(6693),l=r(2256),u=r(7041);let d=(0,a.forwardRef)(function({availability:e,children:t,hasVariants:r,skuMatrixControl:n,quantity:d,outOfStockLabel:m,min:f=1,max:p,onClick:h,onChangeQuantity:v,onValidateBlur:y,...g},b){let[O,w]=(0,a.useState)("default"),E=e&&r;function stopPropagationClick(e){e.preventDefault(),e.stopPropagation()}let S=(0,a.useCallback)(()=>{switch(O){case"inProgress":return a.createElement(i.Z,null);case"completed":return a.createElement(o.Z,{name:"Checked",width:24,height:24});default:return a.createElement(o.Z,{name:"ShoppingCart",width:24,height:24})}},[O]);return a.createElement("div",{ref:b,"data-fs-search-product-item-control":!0,...g},a.createElement("div",{"data-fs-search-product-item-control-content":!0},!e&&a.createElement(c.Z,{"data-fs-search-product-item-control-badge":!0,variant:"warning"},m),t),e&&!r&&a.createElement("div",{"data-fs-search-product-item-control-actions":!0,role:"group","aria-hidden":!0,tabIndex:-1,onKeyDown:()=>{},onClick:stopPropagationClick},a.createElement("div",{"data-fs-search-product-item-control-actions-desktop":!0},a.createElement(s.Z,{disabled:"default"!==O,max:p,onValidateBlur:y,initial:d,onChange:v})),a.createElement("div",{"data-fs-search-product-item-control-actions-mobile":!0},a.createElement(l.Z,{"data-fs-product-item-control-input":!0,min:1,value:d,onChange:e=>v(e.target.value?Number(e.target.value):0),onBlur:function(){let e=p??(f?Math.max(d,f):d),t=d>e||d<f,r=d>e?e:d<f?f:d;t&&y?.(f,e,r),v(r)},onInput:e=>{let t=e.currentTarget;t.value=t.value.replace(/\D/g,"")}})),a.createElement(u.Z,{variant:"primary","aria-label":"Add product to cart",onClick:function(e){h&&(w("inProgress"),setTimeout(()=>{w("completed"),h(e)},1e3),setTimeout(()=>{w("default"),v(1)},2e3))},disabled:"inProgress"===O,icon:S()})),E&&a.createElement("div",{onClick:stopPropagationClick,"aria-hidden":!0,tabIndex:-1,onKeyDown:()=>{}},n))}),m=(0,a.forwardRef)(function({price:e,title:t,quickOrder:r,onValidateBlur:i,...o},c){let s=(0,a.useCallback)(()=>a.createElement(a.Fragment,null,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})),[e.formatter,e.listPrice,e.value,t]);return a.createElement("section",{ref:c,"data-fs-search-product-item-content":!0,...o},!r?.enabled&&s(),r?.enabled&&a.createElement(d,{outOfStockLabel:r.outOfStockLabel,availability:r.availability,hasVariants:r.hasVariants,skuMatrixControl:r.skuMatrixControl,quantity:r.quantity,onChangeQuantity:r.onChangeQuantity,max:r.max,onValidateBlur:i,...r.buyProps},s()))});var f=m},9082:function(e,t,r){var a=r(4194);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(4194),n=r(1933),i=r(4564);t.Z=({testId:e="fs-search-products",title:t="Suggested Products",children:r,...o})=>{let{inContext:c,values:s}=(0,n.R)();return c&&s.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(i.Z,{as:"ol"},r))}},3311:function(e,t,r){var a=r(4194),n=r(1933),i=r(4564);let o=(0,a.forwardRef)(function({testId:e="fs-top-search",title:t="Top Search",children:r,...o},c){let{inContext:s,values:l}=(0,n.R)();return s&&(0!==l.term.length||l.isLoading)?null:a.createElement("section",{ref:c,"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(i.Z,{as:"ol"},r))});t.Z=o},1287:function(e,t,r){var a=r(4194),n=r(727),i=r(276);let o=(0,a.forwardRef)(function({testId:e="fs-top-search-term",value:t,linkProps:r,index:o},c){return a.createElement("li",{ref:c,"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(i.Z,{"data-fs-search-top-item-badge":!0,variant:"info"},o+1),t))});t.Z=o},7866:function(e,t,r){var a=r(4194),n=r(3442);let i=(0,a.forwardRef)(function({testId:e="fs-sku-matrix",children:t,...r},i){return a.createElement("div",{ref:i,"data-fs-sku-matrix":!0,"data-testid":e,...r},a.createElement(n.Z,null,t))});t.Z=i},7859:function(e,t,r){var a=r(4194),n=r(9009),i=r(2955);let o=(0,a.forwardRef)(function({children:e,variant:t="secondary",onClick:r,...o},c){let{setIsOpen:s}=(0,i._)();return a.createElement(n.Z,{ref:c,variant:t,onClick:e=>{s(!0),r?.(e)},...o},e)});t.Z=o},3442:function(e,t,r){r.d(t,{m:function(){return n}});var a=r(4194);let n=(0,a.createContext)(null);t.Z=function({children:e}){let[t,r]=(0,a.useState)(!1),[i,o]=(0,a.useState)([]),c=(0,a.useCallback)((e,t)=>{let r=[...i],a=r.find(t=>t.id===e);return a&&(a.selectedCount=t),o(r),r},[i]);return a.createElement(n.Provider,{value:{isOpen:t,allVariantProducts:i,setAllVariantProducts:o,onChangeQuantityItem:c,setIsOpen:r}},e)}}}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3155],{2430:function(e,t,a){a.d(t,{Z:function(){return FilterDeliveryMethodFacet}});var n=a(6652),r=a(9009),l=a(31),i=a(4018),o=a(1549);function FilterDeliveryMethodFacet(e){var t,a,c,u,d,s,{item:m,deliveryMethods:f}=e,{city:v,postalCode:p}=l.Qf.read(),{openRegionSlider:b}=(0,n.l8)(),h=v?"".concat((0,i._W)(v),", ").concat(p):p,x={delivery:null!==(t=null==f?void 0:f.delivery)&&void 0!==t?t:"Shipping to","pickup-in-point":null!==(a=null==f?void 0:f.pickupInPoint)&&void 0!==a?a:"Pickup at","pickup-nearby":null!==(c=null==f?void 0:f.pickupNearby)&&void 0!==c?c:"Pickup Nearby","pickup-all":null!==(u=null==f?void 0:null===(d=f.pickupAll)||void 0===d?void 0:d.label)&&void 0!==u?u:"Pickup Anywhere"};return"delivery"===m.value?(0,o.jsxs)(o.Fragment,{children:[x[m.value],(0,o.jsx)(r.Z,{"data-fs-filter-list-item-button":!0,size:"small",onClick:()=>{b(n.gK.changeLocation)},children:h})]}):"pickup-in-point"===m.value?(0,o.jsxs)(o.Fragment,{children:[x[m.value],(0,o.jsx)(r.Z,{"data-fs-filter-list-item-button":!0,size:"small",onClick:()=>{b(n.gK.changePickupPoint)},children:m.label})]}):(0,o.jsx)(o.Fragment,{children:null!==(s=x[m.value])&&void 0!==s?s:m.label})}},3155:function(e,t,a){a.r(t),a.d(t,{fragment:function(){return E}});var n=a(5487),r=a(9029),l=a(9664),i=a(6652),o=a(5699),c=a(4199),u=a(9009),d=a(2614),s=a(2815),m=a(6174),f=a(2230),v=a(643),p=a(2011),b=a(3303),h=a(2430),x=a(1549),E=n.j9;t.default=function(e){var t,a,n,{facets:E,testId:y,dispatch:g,expanded:Z,title:k}=e,M=(0,b.T)(),{deliveryPromise:w}=null!=M?M:{},{resetInfiniteScroll:C,state:$,setState:N}=(0,r.R)(),{openRegionSlider:F}=(0,i.l8)(),{facets:A,deliveryLabel:S,deliveryOptionsLabel:R,isPickupAllEnabled:I,shouldDisplayDeliveryButton:j,onDeliveryFacetChange:P}=(0,p.z0)({allFacets:E,selectedFilterFacets:$.selectedFacets,deliveryPromiseSettings:w});return(0,x.jsx)(x.Fragment,{children:(0,x.jsxs)(o.Z,{testId:"desktop-".concat(y),title:k,indicesExpanded:Z,onAccordionChange:e=>g({type:"toggleExpanded",payload:e}),children:[j&&(0,x.jsx)(c.Z,{testId:y,index:0,type:"",label:S,description:null==w?void 0:null===(t=w.deliveryMethods)||void 0===t?void 0:t.description,children:(0,x.jsx)(u.Z,{"data-fs-filter-list-delivery-button":!0,variant:"secondary",onClick:()=>F(i.gK.setLocation),icon:(0,x.jsx)(d.Z,{name:"MapPin"}),children:null!==(a=null==w?void 0:null===(n=w.deliveryMethods)||void 0===n?void 0:n.setLocationButtonLabel)&&void 0!==a?a:"Set Location"})},"".concat(y,"-delivery-unset")),A.map((e,t)=>{var a,n=j?t+1:t,{__typename:r,label:i}=e,o=Z.has(n),u="shipping"===e.key,d="delivery-options"===e.key,b=u?S:d?R:i;return(0,x.jsxs)(c.Z,{testId:y,index:n,type:r,label:b,description:u?null==w?void 0:null===(a=w.deliveryMethods)||void 0===a?void 0:a.description:void 0,children:["StoreFacetBoolean"===r&&o&&(0,x.jsx)(s.Z,{children:e.values.map(t=>(t.value!==p.d||I)&&(0,x.jsx)(m.Z,{id:"".concat(y,"-").concat(e.label,"-").concat(t.value),testId:y,onFacetChange:e=>{P({facet:e}),C(0)},selected:t.selected,value:t.value,quantity:t.quantity,facetKey:e.key,label:u?(0,x.jsx)(h.Z,{item:t,deliveryMethods:null==w?void 0:w.deliveryMethods}):t.label,type:u||d?"radio":"checkbox"},"".concat(y,"-").concat(e.label,"-").concat(t.value)))}),"StoreFacetRange"===r&&o&&(0,x.jsx)(f.Z,{facetKey:e.key,min:e.min,max:e.max,formatter:"price"===e.key.toLowerCase()?v.P:void 0,onFacetChange:e=>{N({selectedFacets:(0,l.uL)($.selectedFacets,e,!0),page:0}),C(0)}})]},"".concat(y,"-").concat(b,"-").concat(n))})]})})}},2740:function(e,t,a){var n=a(4194);let r=(0,n.forwardRef)(function({testId:e="fs-checkbox",partial:t,...a},r){return n.createElement("input",{ref:r,"data-fs-checkbox":!0,"data-testid":e,"data-fs-checkbox-partial":t,type:"checkbox",...a})});t.Z=r},6735:function(e,t,a){var n=a(4194);let r=(0,n.forwardRef)(function({testId:e="fs-radio",...t},a){return n.createElement("input",{ref:a,"data-fs-radio":!0,type:"radio","data-testid":e,...t})});t.Z=r},9395:function(e,t,a){var n=a(4194);let percent=(e,t,a)=>Math.round((e-t)/(a-t)*100),r=(0,n.forwardRef)(function({min:e,max:t,absoluteValuesLabel:a,onChange:r,onEnd:l,testId:i="fs-slider",getAriaValueText:o,step:c,minValueLabelComponent:u,maxValueLabelComponent:d,...s},m){let f=(0,n.useMemo)(()=>(t.absolute-e.absolute)/100,[t.absolute,e.absolute]),[v,p]=(0,n.useState)(()=>percent(e.selected,e.absolute,t.absolute)),[b,h]=(0,n.useState)(()=>percent(t.selected,e.absolute,t.absolute)),[x,E]=(0,n.useState)(()=>Math.floor(e.absolute+v*f)),[y,g]=(0,n.useState)(()=>Math.round(e.absolute+b*f));return(0,n.useImperativeHandle)(m,()=>({setSliderValues:a=>{let n=Math.min(Number(a.min),y);if(E(n),p(percent(n,e.absolute,t.absolute)),a.max>t.absolute){g(t.absolute),h(percent(t.absolute,e.absolute,t.absolute));return}let r=Math.max(Number(a.max),x);g(r),h(percent(r,e.absolute,t.absolute))}})),n.createElement("div",{"data-fs-slider":!0,"data-testid":i,...s},n.createElement("div",{"data-fs-slider-absolute-values":!0},n.createElement("span",null,a.min),n.createElement("span",null,a.max)),n.createElement("div",{"data-fs-slider-wrapper":!0},n.createElement("div",{"data-fs-slider-range":!0,style:{left:`${v}%`,width:`${b-v}%`}}),n.createElement("input",{type:"range",min:Math.floor(e.absolute),max:Math.round(t.absolute),value:x,step:c,onMouseUp:()=>l?.({min:x,max:y}),onTouchEnd:()=>l?.({min:x,max:y}),onChange:a=>{let n=Math.min(Number(a.target.value),y);E(n),p(percent(n,e.absolute,t.absolute)),r?.({min:n,max:y})},"data-fs-slider-thumb":"left","aria-valuemin":e.absolute,"aria-valuemax":t.absolute,"aria-valuenow":x,"aria-label":String(x),"aria-labelledby":o?.(x,"min")}),u&&n.createElement("span",{"data-fs-slider-value-label":"min",style:{left:`calc(${x/t.absolute*100}% + (${8-.2*(x/t.absolute*100)}px))`}},u(x)),n.createElement("input",{type:"range",min:Math.floor(e.absolute),max:Math.round(t.absolute),value:y,step:c,onMouseUp:()=>l?.({min:x,max:y}),onTouchEnd:()=>l?.({min:x,max:y}),onChange:a=>{let n=Math.max(Number(a.target.value),x);g(n),h(percent(n,e.absolute,t.absolute)),r?.({min:x,max:n})},"data-fs-slider-thumb":"right","aria-valuemin":e.absolute,"aria-valuemax":t.absolute,"aria-valuenow":y,"aria-label":String(y),"aria-labelledby":o?.(y,"max")}),d&&n.createElement("span",{"data-fs-slider-value-label":"max",style:{left:`calc(${y/t.absolute*100}% + (${8-.2*(y/t.absolute*100)}px))`}},d(y))))});t.Z=r},1516:function(e,t,a){a.d(t,{A:function(){return useAccordion}});var n=a(4194);let r=(0,n.createContext)(void 0),l=(0,n.forwardRef)(function({testId:e="fs-accordion",indices:t,onChange:a,children:l,...i},o){let c=n.Children.map(l,(e,t)=>{if(e)return(0,n.cloneElement)(e,{index:e.props.index??t})}),u={indices:new Set(t),onChange:a,numberOfItems:c.length};return n.createElement(r.Provider,{value:u},n.createElement("div",{ref:o,"data-fs-accordion":!0,role:"region","data-testid":e,...i},c))});function useAccordion(){let e=(0,n.useContext)(r);if(void 0===e)throw Error("Do not use Accordion components outside the Accordion context.");return e}t.Z=l},7734:function(e,t,a){var n=a(4194),r=a(1516),l=a(783),i=a(2614),o=a(9009);let c=(0,n.forwardRef)(function({testId:e="fs-accordion-button",expandedIcon:t=n.createElement(i.Z,{name:"MinusCircle","data-icon":"expanded"}),collapsedIcon:a=n.createElement(i.Z,{name:"PlusCircle","data-icon":"collapsed"}),children:c,...u},d){let{indices:s,onChange:m,numberOfItems:f}=(0,r.A)(),{index:v,panel:p,button:b,prefixId:h}=(0,l.D)();return n.createElement(o.Z,{ref:d,id:b,variant:"tertiary","data-fs-accordion-button":s.has(v)?"expanded":"collapsed","aria-expanded":s.has(v),icon:s.has(v)?t:a,iconPosition:"right","aria-controls":p,onKeyDown:e=>{if(["ArrowDown","ArrowUp"].includes(e.key))switch(e.key){case"ArrowDown":e.preventDefault(),(()=>{let e=Number(v)+1===f?0:Number(v)+1;return document.getElementById(`${h&&`${h}-`}button--${e}`)})()?.focus();break;case"ArrowUp":e.preventDefault(),(()=>{let e=Number(v)-1<0?f-1:Number(v)-1;return document.getElementById(`${h&&`${h}-`}button--${e}`)})()?.focus()}},onClick:()=>{m(v)},"data-testid":e,...u},c)});t.Z=c},783:function(e,t,a){a.d(t,{D:function(){return useAccordionItem}});var n=a(4194);let r=(0,n.createContext)(void 0),l=(0,n.forwardRef)(function({prefixId:e="",index:t=0,as:a,children:l,testId:i="fs-accordion-item",...o},c){let u=a??"div",d={index:t,prefixId:e,panel:`${e&&`${e}-`}panel--${t}`,button:`${e&&`${e}-`}button--${t}`};return n.createElement(r.Provider,{value:d},n.createElement(u,{ref:c,"data-fs-accordion-item":!0,"data-testid":i,...o},l))});function useAccordionItem(){let e=(0,n.useContext)(r);if(void 0===e)throw Error("Do not use AccordionItem components outside the AccordionItem context.");return e}t.Z=l},7583:function(e,t,a){var n=a(4194),r=a(1516),l=a(783);let i=(0,n.forwardRef)(function({testId:e="fs-accordion-panel",children:t,...a},i){let{indices:o}=(0,r.A)(),{index:c,button:u,panel:d}=(0,l.D)();return n.createElement("div",{ref:i,id:d,"data-fs-accordion-panel":!0,"aria-labelledby":u,role:"region",hidden:!o.has(c),"data-testid":e,...a},t)});t.Z=i},5737:function(e,t,a){var n=a(4194),r=a(1953),l=a(6735);let i=(0,n.forwardRef)(function({testId:e="fs-radio-field",id:t,label:a,value:i,name:o,...c},u){return n.createElement("div",{ref:u,"data-fs-radio-field":!0,"data-testid":e},n.createElement(l.Z,{id:t,value:"string"==typeof a?a:i,name:o,...c}),n.createElement(r.Z,{htmlFor:t},a))});t.Z=i},5699:function(e,t,a){var n=a(4194),r=a(1516);t.Z=function({testId:e,title:t,indicesExpanded:a,onAccordionChange:l,children:i}){return n.createElement("div",{"data-fs-filter":!0,"data-testid":e},n.createElement("h2",{"data-fs-filter-title":!0},t),n.createElement(r.Z,{indices:a,onChange:l,"data-fs-filter-accordion":!0},i))}},2815:function(e,t,a){var n=a(4194),r=a(4564);t.Z=function({children:e}){return n.createElement(r.Z,{"data-fs-filter-list":!0},e)}},6174:function(e,t,a){var n=a(4194),r=a(2740),l=a(1953),i=a(276),o=a(5737);t.Z=function({testId:e,id:t,selected:a,value:c,quantity:u,facetKey:d,label:s,type:m="checkbox",onFacetChange:f}){return n.createElement("li",{key:t,"data-fs-filter-list-item":!0},"checkbox"===m?n.createElement(n.Fragment,null,n.createElement(r.Z,{id:t,checked:a,onChange:()=>f({key:d,value:c},"BOOLEAN"),"data-fs-filter-list-item-checkbox":!0,"data-testid":`${e}-accordion-panel-checkbox`,"data-value":c,"data-quantity":u}),n.createElement(l.Z,{htmlFor:t,className:"text__title-mini-alt","data-fs-filter-list-item-label":!0},s," ",n.createElement(i.Z,{"data-fs-filter-list-item-badge":!0},u))):n.createElement(o.Z,{id:t,name:d,value:c,checked:a,onChange:()=>f({key:d,value:c},"BOOLEAN"),"data-fs-filter-list-item-radio":!0,"data-testid":`${e}-accordion-panel-radio`,"data-value":c,label:s}))}},2230:function(e,t,a){var n=a(4194),r=a(8110);let formatRange=(e,t)=>`${e.toFixed(2)}-to-${t.toFixed(2)}`;t.Z=function({min:e,max:t,formatter:a,facetKey:l,onFacetChange:i}){return n.createElement(r.Z,{"data-fs-filter-facet-range":!0,min:e,max:t,formatter:a,step:1,onEnd:e=>i({key:l,value:formatRange(e.min,e.max)},"RANGE")})}},4199:function(e,t,a){var n=a(4194),r=a(783),l=a(7734),i=a(7583);t.Z=function({testId:e,label:t,index:a,children:o,type:c,description:u}){return n.createElement(r.Z,{key:`${t}-${a}`,prefixId:e,testId:`${e}-accordion`,index:a,"data-type":c,"data-fs-filter-accordion-item":!0},n.createElement(l.Z,{testId:`${e}-accordion-button`},t),n.createElement(i.Z,null,u&&n.createElement("span",{"data-fs-filter-accordion-item-description":!0},u),o))}},8110:function(e,t,a){var n=a(4194),r=a(9395),l=a(9767),i=a(3779);let o=(0,n.forwardRef)(function({formatter:e,max:t,min:a,step:o=1,onChange:c,onEnd:u,testId:d="fs-price-range",variant:s,"aria-label":m,...f},v){let p=(0,n.useRef)();(0,n.useImperativeHandle)(v,()=>({setPriceRangeValues:e=>{c?.(e),p.current?.setSliderValues(e)}}));let b=(0,n.useRef)(null),h=(0,n.useRef)(null),[x,E]=(0,n.useState)(),[y,g]=(0,n.useState)(),[Z,k]=(0,n.useState)({min:Math.floor(a.selected),max:Math.round(t.selected)});return n.createElement("div",{"data-fs-price-range":!0,"data-testid":d,...f},n.createElement(r.Z,{ref:p,min:a,max:t,step:o,onEnd:e=>{u?.(e),E(void 0),g(void 0),k({min:e.min,max:e.max}),b.current?.value&&(b.current.value=String(e.min)),h.current?.value&&(h.current.value=String(e.max))},"aria-label":m,onChange:e=>c?.(e),absoluteValuesLabel:{min:n.createElement(l.Z,{value:Math.floor(a.absolute),variant:s,formatter:e}),max:n.createElement(l.Z,{value:Math.round(t.absolute),variant:s,formatter:e})},minValueLabelComponent:t=>n.createElement(l.Z,{value:t,variant:s,formatter:e}),maxValueLabelComponent:t=>n.createElement(l.Z,{value:t,variant:s,formatter:e})}),n.createElement("div",{"data-fs-price-range-inputs":!0},n.createElement(i.Z,{id:"price-range-min",step:o,label:"Min",type:"number",inputMode:"numeric",error:x,inputRef:b,min:Math.floor(a.absolute),max:Z.max,value:Z.min,onChange:e=>{var t;return t=e.target.value,void(E(void 0),Number(t)<Math.floor(a.absolute)||(Number(t)>Math.floor(Z.max)&&E("Min price can't be greater than max"),k({...Z,min:Number(t)}),p.current?.setSliderValues({...Z,min:Number(t)})))},onBlur:()=>!x&&u?.(Z)}),n.createElement(i.Z,{id:"price-range-max",label:"Max",step:o,type:"number",inputMode:"numeric",error:y,inputRef:h,max:Math.round(t.absolute),min:Z.min,value:Z.max,onChange:e=>{var a;return a=e.target.value,void(g(void 0),Number(a)>Math.round(t.absolute)||(Number(a)<Math.round(Z.min)&&g("Max price can't be smaller than min"),k({...Z,max:Number(a)}),p.current?.setSliderValues({...Z,max:Number(a)})))},onBlur:()=>!y&&u?.(Z)})))});t.Z=o}}]);