@faststore/core 3.0.148 → 3.0.150

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 (127) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +46 -46
  3. package/.next/cache/.tsbuildinfo +1 -1
  4. package/.next/cache/config.json +3 -3
  5. package/.next/cache/eslint/.cache_1gneedd +1 -1
  6. package/.next/cache/webpack/client-production/0.pack +0 -0
  7. package/.next/cache/webpack/client-production/index.pack +0 -0
  8. package/.next/cache/webpack/server-production/0.pack +0 -0
  9. package/.next/cache/webpack/server-production/index.pack +0 -0
  10. package/.next/next-minimal-server.js.nft.json +1 -1
  11. package/.next/next-server.js.nft.json +1 -1
  12. package/.next/prerender-manifest.js +1 -1
  13. package/.next/prerender-manifest.json +1 -1
  14. package/.next/react-loadable-manifest.json +60 -11
  15. package/.next/routes-manifest.json +1 -1
  16. package/.next/server/chunks/1844.js +1 -1
  17. package/.next/server/chunks/2195.js +1 -0
  18. package/.next/server/chunks/2245.js +1 -0
  19. package/.next/server/chunks/350.js +1 -1
  20. package/.next/server/chunks/463.js +1 -0
  21. package/.next/server/chunks/5771.js +1 -0
  22. package/.next/server/chunks/6150.js +1 -0
  23. package/.next/server/chunks/6604.js +2 -2
  24. package/.next/server/chunks/9088.js +1 -0
  25. package/.next/server/chunks/9646.js +3 -3
  26. package/.next/server/chunks/UIBannerText.js +1 -0
  27. package/.next/server/middleware-build-manifest.js +1 -1
  28. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  29. package/.next/server/pages/404.js +1 -1
  30. package/.next/server/pages/404.js.nft.json +1 -1
  31. package/.next/server/pages/500.js +1 -1
  32. package/.next/server/pages/500.js.nft.json +1 -1
  33. package/.next/server/pages/[...slug].js +1 -1
  34. package/.next/server/pages/[...slug].js.nft.json +1 -1
  35. package/.next/server/pages/[slug]/p.js +1 -1
  36. package/.next/server/pages/[slug]/p.js.nft.json +1 -1
  37. package/.next/server/pages/_app.js.nft.json +1 -1
  38. package/.next/server/pages/_document.js.nft.json +1 -1
  39. package/.next/server/pages/_error.js.nft.json +1 -1
  40. package/.next/server/pages/account.js.nft.json +1 -1
  41. package/.next/server/pages/api/graphql.js +1 -1
  42. package/.next/server/pages/api/graphql.js.nft.json +1 -1
  43. package/.next/server/pages/api/health/live.js.nft.json +1 -1
  44. package/.next/server/pages/api/health/ready.js.nft.json +1 -1
  45. package/.next/server/pages/api/preview.js.nft.json +1 -1
  46. package/.next/server/pages/checkout.js.nft.json +1 -1
  47. package/.next/server/pages/en-US/404.html +1 -1
  48. package/.next/server/pages/en-US/404.json +1 -1
  49. package/.next/server/pages/en-US/500.html +1 -1
  50. package/.next/server/pages/en-US/500.json +1 -1
  51. package/.next/server/pages/en-US/account.html +1 -1
  52. package/.next/server/pages/en-US/account.json +1 -1
  53. package/.next/server/pages/en-US/checkout.html +1 -1
  54. package/.next/server/pages/en-US/checkout.json +1 -1
  55. package/.next/server/pages/en-US/login.html +1 -1
  56. package/.next/server/pages/en-US/login.json +1 -1
  57. package/.next/server/pages/en-US/s.html +1 -1
  58. package/.next/server/pages/en-US/s.json +1 -1
  59. package/.next/server/pages/en-US.html +2 -2
  60. package/.next/server/pages/en-US.json +1 -1
  61. package/.next/server/pages/index.js +1 -1
  62. package/.next/server/pages/index.js.nft.json +1 -1
  63. package/.next/server/pages/login.js +1 -1
  64. package/.next/server/pages/login.js.nft.json +1 -1
  65. package/.next/server/pages/s.js +1 -1
  66. package/.next/server/pages/s.js.nft.json +1 -1
  67. package/.next/server/pages-manifest.json +1 -1
  68. package/.next/server/webpack-runtime.js +1 -1
  69. package/.next/static/chunks/16.f4ecc14d79dc118b.js +1 -0
  70. package/.next/static/chunks/523.fe333b7a44e82888.js +1 -0
  71. package/.next/static/chunks/707-83d159430b49c007.js +1 -0
  72. package/.next/static/chunks/721-4610a9b937a1b5e9.js +1 -0
  73. package/.next/static/chunks/844.dd528a0bb7646dd6.js +1 -0
  74. package/.next/static/chunks/941-cee2b9776c3d2607.js +33 -0
  75. package/.next/static/chunks/973-840ef2154b9d2940.js +1 -0
  76. package/.next/static/chunks/CartItem.1b93d9b5f36a1120.js +1 -0
  77. package/.next/static/chunks/EmptyCart.a48b5bfb30ee09f0.js +1 -0
  78. package/.next/static/chunks/Gift.9a645d71d393dd98.js +1 -0
  79. package/.next/static/chunks/OrderSummary.637b2fff8f2574e1.js +1 -0
  80. package/.next/static/chunks/Toast.41ed93193046b5a5.js +1 -0
  81. package/.next/static/chunks/UIBannerText.4e11acdb3624808c.js +1 -0
  82. package/.next/static/chunks/UIToast.a17cb67e284572a7.js +1 -0
  83. package/.next/static/chunks/pages/404-8428a5072b126db7.js +1 -0
  84. package/.next/static/chunks/pages/500-0f7529c8c8b90253.js +1 -0
  85. package/.next/static/chunks/pages/{[...slug]-7cba9be5af68debd.js → [...slug]-7251a2458aa75965.js} +1 -1
  86. package/.next/static/chunks/pages/[slug]/p-1433a856605b917b.js +1 -0
  87. package/.next/static/chunks/pages/{account-4f98162de058e79c.js → account-c0db07a5e90d1ee0.js} +1 -1
  88. package/.next/static/chunks/pages/{checkout-be462a7367e61849.js → checkout-a751fc8e1dcb5285.js} +1 -1
  89. package/.next/static/chunks/pages/{index-a8402bc13a271123.js → index-a4ffe552b1b4a4a6.js} +1 -1
  90. package/.next/static/chunks/pages/login-93bbc8089da5ce4a.js +1 -0
  91. package/.next/static/chunks/pages/{s-9929660020f45aff.js → s-9002e83fb35c96b7.js} +1 -1
  92. package/.next/static/chunks/webpack-39f5c3558a96182c.js +1 -0
  93. package/.next/static/lGVnz_12piw54w7FhWXZY/_buildManifest.js +1 -0
  94. package/.next/trace +98 -99
  95. package/.turbo/turbo-build.log +17 -17
  96. package/.turbo/turbo-lint.log +1 -1
  97. package/.turbo/turbo-test.log +5 -5
  98. package/@generated/gql.ts +2 -2
  99. package/@generated/graphql.ts +5 -2
  100. package/@generated/persisted-documents.json +1 -1
  101. package/@generated/schema.graphql +3 -1
  102. package/package.json +9 -9
  103. package/src/components/cart/CartSidebar/CartSidebar.tsx +128 -89
  104. package/src/components/cms/global/Components.ts +40 -0
  105. package/src/components/sections/BannerText/DefaultComponents.ts +12 -4
  106. package/src/sdk/cart/index.ts +2 -0
  107. package/.next/server/chunks/3887.js +0 -1
  108. package/.next/server/chunks/416.js +0 -1
  109. package/.next/server/chunks/5110.js +0 -1
  110. package/.next/server/chunks/5679.js +0 -1
  111. package/.next/server/chunks/5703.js +0 -1
  112. package/.next/server/chunks/UINavbarSlider.js +0 -1
  113. package/.next/static/chunks/16.7f3891e1a4a8aa04.js +0 -1
  114. package/.next/static/chunks/427-c8efc212fd14e9db.js +0 -33
  115. package/.next/static/chunks/523.3d7b72011d05148e.js +0 -1
  116. package/.next/static/chunks/61-85c56c64992419d8.js +0 -1
  117. package/.next/static/chunks/707-04bc546eb86a5e61.js +0 -1
  118. package/.next/static/chunks/721-66e815a3ca564aa6.js +0 -1
  119. package/.next/static/chunks/Toast.9c015005521b0f2d.js +0 -1
  120. package/.next/static/chunks/UIToast.b5c0885cbd078c88.js +0 -1
  121. package/.next/static/chunks/pages/404-d7b1eb14a5394ee4.js +0 -1
  122. package/.next/static/chunks/pages/500-6a48f2fbd9244e01.js +0 -1
  123. package/.next/static/chunks/pages/[slug]/p-eacbeeb44f49a9ab.js +0 -1
  124. package/.next/static/chunks/pages/login-678965fdcbeed715.js +0 -1
  125. package/.next/static/chunks/webpack-642f67e818afdfea.js +0 -1
  126. package/.next/static/xMJeuq2CpfkQ-Z8xALZD0/_buildManifest.js +0 -1
  127. /package/.next/static/{xMJeuq2CpfkQ-Z8xALZD0 → lGVnz_12piw54w7FhWXZY}/_ssgManifest.js +0 -0
@@ -46,32 +46,32 @@ Warning: Dynamic Content not found for the page: home. Refer to the Dynamic Cont
46
46
  Collecting build traces ...
47
47
 
48
48
  Route (pages) Size First Load JS
49
- ┌ ● / 1.23 kB 144 kB
49
+ ┌ ● / 1.23 kB 139 kB
50
50
  ├ └ css/197e314c5a03eabd.css 740 B
51
- ├ /_app 0 B 90.9 kB
52
- ├ ● /[...slug] 2.79 kB 157 kB
51
+ ├ /_app 0 B 91 kB
52
+ ├ ● /[...slug] 2.79 kB 152 kB
53
53
  ├ └ css/e47f1a002bdcf76f.css 2.38 kB
54
- ├ ● /[slug]/p 11.8 kB 154 kB
54
+ ├ ● /[slug]/p 12.3 kB 150 kB
55
55
  ├ └ css/9b6bba2472d272ec.css 10.5 kB
56
- ├ ○ /404 1.28 kB 127 kB
57
- ├ ● /500 1.28 kB 127 kB
58
- ├ ● /account 676 B 126 kB
59
- ├ λ /api/graphql 0 B 90.9 kB
60
- ├ λ /api/health/live 0 B 90.9 kB
61
- ├ λ /api/health/ready 0 B 90.9 kB
62
- ├ λ /api/preview 0 B 90.9 kB
63
- ├ ● /checkout 659 B 126 kB
64
- ├ ● /login 1.4 kB 127 kB
65
- └ ● /s 2.23 kB 156 kB
66
- + First Load JS shared by all 94 kB
56
+ ├ ○ /404 1.45 kB 122 kB
57
+ ├ ● /500 1.45 kB 122 kB
58
+ ├ ● /account 678 B 121 kB
59
+ ├ λ /api/graphql 0 B 91 kB
60
+ ├ λ /api/health/live 0 B 91 kB
61
+ ├ λ /api/health/ready 0 B 91 kB
62
+ ├ λ /api/preview 0 B 91 kB
63
+ ├ ● /checkout 660 B 121 kB
64
+ ├ ● /login 1.56 kB 122 kB
65
+ └ ● /s 2.23 kB 152 kB
66
+ + First Load JS shared by all 94.1 kB
67
67
  ├ chunks/framework-8e279965036b6169.js 45.4 kB
68
68
  ├ chunks/main-029f1328cfee9686.js 33.1 kB
69
69
  ├ chunks/pages/_app-cb1c3a94f987c5c8.js 9.87 kB
70
- ├ chunks/webpack-642f67e818afdfea.js 2.6 kB
70
+ ├ chunks/webpack-39f5c3558a96182c.js 2.73 kB
71
71
  └ css/ee0556daedda6306.css 3.07 kB
72
72
 
73
73
  λ (Server) server-side renders at runtime (uses getInitialProps or getServerSideProps)
74
74
  ○ (Static) automatically rendered as static HTML (uses no initial props)
75
75
  ● (SSG) automatically generated as static HTML + JSON (uses getStaticProps)
76
76
 
77
- Done in 72.55s.
77
+ Done in 76.19s.
@@ -1,4 +1,4 @@
1
1
  yarn run v1.22.22
2
2
  $ next lint
3
3
  ✔ No ESLint warnings or errors
4
- Done in 6.02s.
4
+ Done in 6.32s.
@@ -1,12 +1,12 @@
1
1
  yarn run v1.22.22
2
2
  $ jest
3
- PASS test/utils/multipleTemplates.test.ts (34.693 s)
4
- PASS test/server/cms/index.test.ts (35.568 s)
5
- PASS test/server/index.test.ts (38.301 s)
3
+ PASS test/server/cms/index.test.ts (35.931 s)
4
+ PASS test/utils/multipleTemplates.test.ts (36.352 s)
5
+ PASS test/server/index.test.ts (39.939 s)
6
6
 
7
7
  Test Suites: 3 passed, 3 total
8
8
  Tests: 19 passed, 19 total
9
9
  Snapshots: 0 total
10
- Time: 39.41 s
10
+ Time: 41.087 s
11
11
  Ran all test suites.
12
- Done in 41.20s.
12
+ Done in 43.17s.
package/@generated/gql.ts CHANGED
@@ -38,7 +38,7 @@ const documents = {
38
38
  types.ServerCollectionPageQueryDocument,
39
39
  '\n query ServerProductQuery($locator: [IStoreSelectedFacet!]!) {\n ...ServerProduct\n product(locator: $locator) {\n id: productID\n\n seo {\n title\n description\n canonical\n }\n\n brand {\n name\n }\n\n sku\n gtin\n name\n description\n releaseDate\n\n breadcrumbList {\n itemListElement {\n item\n name\n position\n }\n }\n\n image {\n url\n alternateName\n }\n\n offers {\n lowPrice\n highPrice\n lowPriceWithTaxes\n priceCurrency\n offers {\n availability\n price\n priceValidUntil\n priceCurrency\n itemCondition\n seller {\n identifier\n }\n }\n }\n\n isVariantOf {\n productGroupID\n }\n\n ...ProductDetailsFragment_product\n }\n }\n':
40
40
  types.ServerProductQueryDocument,
41
- '\n mutation ValidateCartMutation($cart: IStoreCart!, $session: IStoreSession!) {\n validateCart(cart: $cart, session: $session) {\n order {\n orderNumber\n acceptedOffer {\n ...CartItem\n }\n }\n messages {\n ...CartMessage\n }\n }\n }\n\n fragment CartMessage on StoreCartMessage {\n text\n status\n }\n\n fragment CartItem on StoreOffer {\n seller {\n identifier\n }\n quantity\n price\n priceWithTaxes\n listPrice\n listPriceWithTaxes\n itemOffered {\n ...CartProductItem\n }\n }\n\n fragment CartProductItem on StoreProduct {\n sku\n name\n unitMultiplier\n image {\n url\n alternateName\n }\n brand {\n name\n }\n isVariantOf {\n productGroupID\n name\n skuVariants {\n activeVariations\n slugsMap\n availableVariations\n }\n }\n gtin\n additionalProperty {\n propertyID\n name\n value\n valueReference\n }\n }\n':
41
+ '\n mutation ValidateCartMutation($cart: IStoreCart!, $session: IStoreSession!) {\n validateCart(cart: $cart, session: $session) {\n order {\n orderNumber\n acceptedOffer {\n ...CartItem\n }\n shouldSplitItem\n }\n messages {\n ...CartMessage\n }\n }\n }\n\n fragment CartMessage on StoreCartMessage {\n text\n status\n }\n\n fragment CartItem on StoreOffer {\n seller {\n identifier\n }\n quantity\n price\n priceWithTaxes\n listPrice\n listPriceWithTaxes\n itemOffered {\n ...CartProductItem\n }\n }\n\n fragment CartProductItem on StoreProduct {\n sku\n name\n unitMultiplier\n image {\n url\n alternateName\n }\n brand {\n name\n }\n isVariantOf {\n productGroupID\n name\n skuVariants {\n activeVariations\n slugsMap\n availableVariations\n }\n }\n gtin\n additionalProperty {\n propertyID\n name\n value\n valueReference\n }\n }\n':
42
42
  types.ValidateCartMutationDocument,
43
43
  '\n mutation SubscribeToNewsletter($data: IPersonNewsletter!) {\n subscribeToNewsletter(data: $data) {\n id\n }\n }\n':
44
44
  types.SubscribeToNewsletterDocument,
@@ -140,7 +140,7 @@ export function gql(
140
140
  * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
141
141
  */
142
142
  export function gql(
143
- source: '\n mutation ValidateCartMutation($cart: IStoreCart!, $session: IStoreSession!) {\n validateCart(cart: $cart, session: $session) {\n order {\n orderNumber\n acceptedOffer {\n ...CartItem\n }\n }\n messages {\n ...CartMessage\n }\n }\n }\n\n fragment CartMessage on StoreCartMessage {\n text\n status\n }\n\n fragment CartItem on StoreOffer {\n seller {\n identifier\n }\n quantity\n price\n priceWithTaxes\n listPrice\n listPriceWithTaxes\n itemOffered {\n ...CartProductItem\n }\n }\n\n fragment CartProductItem on StoreProduct {\n sku\n name\n unitMultiplier\n image {\n url\n alternateName\n }\n brand {\n name\n }\n isVariantOf {\n productGroupID\n name\n skuVariants {\n activeVariations\n slugsMap\n availableVariations\n }\n }\n gtin\n additionalProperty {\n propertyID\n name\n value\n valueReference\n }\n }\n'
143
+ source: '\n mutation ValidateCartMutation($cart: IStoreCart!, $session: IStoreSession!) {\n validateCart(cart: $cart, session: $session) {\n order {\n orderNumber\n acceptedOffer {\n ...CartItem\n }\n shouldSplitItem\n }\n messages {\n ...CartMessage\n }\n }\n }\n\n fragment CartMessage on StoreCartMessage {\n text\n status\n }\n\n fragment CartItem on StoreOffer {\n seller {\n identifier\n }\n quantity\n price\n priceWithTaxes\n listPrice\n listPriceWithTaxes\n itemOffered {\n ...CartProductItem\n }\n }\n\n fragment CartProductItem on StoreProduct {\n sku\n name\n unitMultiplier\n image {\n url\n alternateName\n }\n brand {\n name\n }\n isVariantOf {\n productGroupID\n name\n skuVariants {\n activeVariations\n slugsMap\n availableVariations\n }\n }\n gtin\n additionalProperty {\n propertyID\n name\n value\n valueReference\n }\n }\n'
144
144
  ): typeof import('./graphql').ValidateCartMutationDocument
145
145
  /**
146
146
  * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
@@ -677,7 +677,7 @@ export type StoreBreadcrumbList = {
677
677
  export type StoreCart = {
678
678
  /** List of shopping cart messages. */
679
679
  messages: Array<StoreCartMessage>
680
- /** Order information, including `orderNumber` and `acceptedOffer`. */
680
+ /** Order information, including `orderNumber`, `acceptedOffer` and `shouldSplitItem`. */
681
681
  order: StoreOrder
682
682
  }
683
683
 
@@ -887,6 +887,8 @@ export type StoreOrder = {
887
887
  acceptedOffer: Array<StoreOffer>
888
888
  /** ID of the order in [VTEX order management](https://help.vtex.com/en/tutorial/license-manager-resources-oms--60QcBsvWeum02cFi3GjBzg#). */
889
889
  orderNumber: Scalars['String']['output']
890
+ /** Indicates whether or not items with attachments should be split. */
891
+ shouldSplitItem: Maybe<Scalars['Boolean']['output']>
890
892
  }
891
893
 
892
894
  /** Organization. */
@@ -1320,6 +1322,7 @@ export type ValidateCartMutationMutation = {
1320
1322
  validateCart: {
1321
1323
  order: {
1322
1324
  orderNumber: string
1325
+ shouldSplitItem: boolean | null
1323
1326
  acceptedOffer: Array<{
1324
1327
  quantity: number
1325
1328
  price: number
@@ -2069,7 +2072,7 @@ export const ServerProductQueryDocument = {
2069
2072
  export const ValidateCartMutationDocument = {
2070
2073
  __meta__: {
2071
2074
  operationName: 'ValidateCartMutation',
2072
- operationHash: '324471076994dca94a47adcaf1c6b8f7896e1b4f',
2075
+ operationHash: 'c2b3f8bff73ebf6ac79d758c66cabbc21ba9fcc0',
2073
2076
  },
2074
2077
  } as unknown as TypedDocumentString<
2075
2078
  ValidateCartMutationMutation,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "4b33c5c07f440dc7489e55619dc2211a13786e72": "fragment ServerCollectionPage on Query { collection(slug: $slug) { id } } query ServerCollectionPageQuery($slug: String!) { collection(slug: $slug) { breadcrumbList { itemListElement { item name position } } meta { selectedFacets { key value } } seo { description title } } ...ServerCollectionPage }",
3
3
  "46103bee661405bde706d72126fdbf9b0a0c9e6e": "fragment CartProductItem on StoreProduct { additionalProperty { name propertyID value valueReference } brand { name } gtin image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations availableVariations slugsMap } } name sku unitMultiplier } fragment ProductDetailsFragment_product on StoreProduct { additionalProperty { name propertyID value valueReference } brand { name } description gtin image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations availableVariations slugsMap } } name offers { lowPrice lowPriceWithTaxes offers { availability listPrice listPriceWithTaxes price priceWithTaxes seller { identifier } } } id: productID sku unitMultiplier ...CartProductItem } fragment ServerProduct on Query { product(locator: $locator) { id: productID } } query ServerProductQuery($locator: [IStoreSelectedFacet!]!) { product(locator: $locator) { brand { name } breadcrumbList { itemListElement { item name position } } description gtin image { alternateName url } isVariantOf { productGroupID } name offers { highPrice lowPrice lowPriceWithTaxes offers { availability itemCondition price priceCurrency priceValidUntil seller { identifier } } priceCurrency } id: productID releaseDate seo { canonical description title } sku ...ProductDetailsFragment_product } ...ServerProduct }",
4
- "324471076994dca94a47adcaf1c6b8f7896e1b4f": "fragment CartItem on StoreOffer { itemOffered { ...CartProductItem } listPrice listPriceWithTaxes price priceWithTaxes quantity seller { identifier } } fragment CartMessage on StoreCartMessage { status text } fragment CartProductItem on StoreProduct { additionalProperty { name propertyID value valueReference } brand { name } gtin image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations availableVariations slugsMap } } name sku unitMultiplier } mutation ValidateCartMutation($cart: IStoreCart!, $session: IStoreSession!) { validateCart(cart: $cart, session: $session) { messages { ...CartMessage } order { acceptedOffer { ...CartItem } orderNumber } } }",
4
+ "c2b3f8bff73ebf6ac79d758c66cabbc21ba9fcc0": "fragment CartItem on StoreOffer { itemOffered { ...CartProductItem } listPrice listPriceWithTaxes price priceWithTaxes quantity seller { identifier } } fragment CartMessage on StoreCartMessage { status text } fragment CartProductItem on StoreProduct { additionalProperty { name propertyID value valueReference } brand { name } gtin image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations availableVariations slugsMap } } name sku unitMultiplier } mutation ValidateCartMutation($cart: IStoreCart!, $session: IStoreSession!) { validateCart(cart: $cart, session: $session) { messages { ...CartMessage } order { acceptedOffer { ...CartItem } orderNumber shouldSplitItem } } }",
5
5
  "feb7005103a859e2bc8cf2360d568806fd88deba": "mutation SubscribeToNewsletter($data: IPersonNewsletter!) { subscribeToNewsletter(data: $data) { id } }",
6
6
  "ad2eb78cfccb9dbd5a9f2d1e150cc70fea5da99a": "fragment ClientManyProducts on Query { search( first: $first after: $after sort: $sort term: $term selectedFacets: $selectedFacets ) { products { pageInfo { totalCount } } } } fragment ProductSummary_product on StoreProduct { additionalProperty { name propertyID value valueReference } advertisement { adId adResponseId } brand { brandName: name } brand { name } gtin image { alternateName url } isVariantOf { name productGroupID } name offers { lowPrice lowPriceWithTaxes offers { availability listPrice listPriceWithTaxes price quantity seller { identifier } } } id: productID sku slug } query ClientManyProductsQuery($after: String, $first: Int!, $selectedFacets: [IStoreSelectedFacet!]!, $sort: StoreSort!, $term: String!) { search( first: $first after: $after sort: $sort term: $term selectedFacets: $selectedFacets ) { products { edges { node { ...ProductSummary_product } } pageInfo { totalCount } } } ...ClientManyProducts }",
7
7
  "177fe68cb385737b0901fc9e105f0a4813e18a20": "fragment ClientProductGallery on Query { search( first: $first after: $after sort: $sort term: $term selectedFacets: $selectedFacets ) { products { pageInfo { totalCount } } } } fragment Filter_facets on StoreFacet { ... on StoreFacetBoolean { __typename key label values { label quantity selected value } } ... on StoreFacetRange { __typename key label max { absolute selected } min { absolute selected } } } fragment SearchEvent_metadata on SearchMetadata { isTermMisspelled logicalOperator } query ClientProductGalleryQuery($after: String!, $first: Int!, $selectedFacets: [IStoreSelectedFacet!]!, $sort: StoreSort!, $term: String!) { redirect(term: $term, selectedFacets: $selectedFacets) { url } search( first: $first after: $after sort: $sort term: $term selectedFacets: $selectedFacets ) { facets { ...Filter_facets } metadata { ...SearchEvent_metadata } products { pageInfo { totalCount } } } ...ClientProductGallery }",
@@ -107,7 +107,7 @@ type StoreCartMessage {
107
107
 
108
108
  """Shopping cart information."""
109
109
  type StoreCart {
110
- """Order information, including `orderNumber` and `acceptedOffer`."""
110
+ """Order information, including `orderNumber`, `acceptedOffer` and `shouldSplitItem`."""
111
111
  order: StoreOrder!
112
112
  """List of shopping cart messages."""
113
113
  messages: [StoreCartMessage!]!
@@ -298,6 +298,8 @@ type StoreOrder {
298
298
  orderNumber: String!
299
299
  """Array with information on each accepted offer."""
300
300
  acceptedOffer: [StoreOffer!]!
301
+ """Indicates whether or not items with attachments should be split."""
302
+ shouldSplitItem: Boolean
301
303
  }
302
304
 
303
305
  """Order input."""
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@faststore/core",
3
- "version": "3.0.148",
3
+ "version": "3.0.150",
4
4
  "license": "MIT",
5
5
  "repository": "vtex/faststore",
6
6
  "browserslist": "supports es6-module and not dead",
@@ -43,12 +43,12 @@
43
43
  "@envelop/graphql-jit": "^8.0.3",
44
44
  "@envelop/parser-cache": "^6.0.2",
45
45
  "@envelop/validation-cache": "^6.0.2",
46
- "@faststore/api": "^3.0.140",
47
- "@faststore/components": "^3.0.144",
48
- "@faststore/graphql-utils": "^3.0.135",
49
- "@faststore/lighthouse": "^3.0.135",
50
- "@faststore/sdk": "^3.0.135",
51
- "@faststore/ui": "^3.0.144",
46
+ "@faststore/api": "^3.0.150",
47
+ "@faststore/components": "^3.0.150",
48
+ "@faststore/graphql-utils": "^3.0.150",
49
+ "@faststore/lighthouse": "^3.0.150",
50
+ "@faststore/sdk": "^3.0.150",
51
+ "@faststore/ui": "^3.0.150",
52
52
  "@graphql-codegen/cli": "5.0.2",
53
53
  "@graphql-codegen/client-preset": "4.2.6",
54
54
  "@graphql-codegen/typescript": "4.0.7",
@@ -87,7 +87,7 @@
87
87
  "devDependencies": {
88
88
  "@cypress/code-coverage": "^3.12.1",
89
89
  "@envelop/testing": "^6.0.0",
90
- "@faststore/eslint-config": "^3.0.135",
90
+ "@faststore/eslint-config": "^3.0.150",
91
91
  "@lhci/cli": "^0.9.0",
92
92
  "@testing-library/cypress": "^10.0.1",
93
93
  "@types/cypress": "^1.1.3",
@@ -128,5 +128,5 @@
128
128
  "node": "18.19.0",
129
129
  "yarn": "1.19.1"
130
130
  },
131
- "gitHead": "95acfb993977fe1cca3873b845c6b7861483ac1e"
131
+ "gitHead": "5d33a0289de83e8319b4be2f5b28932570a22775"
132
132
  }
@@ -1,23 +1,64 @@
1
- import {
2
- Button as UIButton,
3
- CartSidebar as UICartSidebar,
4
- CartSidebarFooter as UICartSidebarFooter,
5
- CartSidebarList as UICartSidebarList,
6
- } from '@faststore/ui'
1
+ import dynamic from 'next/dynamic'
7
2
 
8
- import type { CartSidebarProps as UICartSidebarProps } from '@faststore/ui'
3
+ import type {
4
+ ButtonProps,
5
+ CartSidebarProps as UICartSidebarProps,
6
+ } from '@faststore/ui'
9
7
 
10
8
  import type { CurrencyCode, ViewCartEvent } from '@faststore/sdk'
11
9
  import { Icon, useFadeEffect, useUI } from '@faststore/ui'
12
- import { Suspense, useCallback, useEffect, useMemo } from 'react'
10
+ import { ReactNode, useCallback, useEffect, useMemo } from 'react'
13
11
  import { useCart } from 'src/sdk/cart'
14
12
  import { useCheckoutButton } from 'src/sdk/cart/useCheckoutButton'
15
13
  import { useSession } from 'src/sdk/session'
16
14
 
17
- import Gift from '../../ui/Gift'
18
- import CartItem from '../CartItem'
19
- import EmptyCart from '../EmptyCart'
20
- import OrderSummary from '../OrderSummary'
15
+ const UIButton = dynamic<ButtonProps>(
16
+ () =>
17
+ import(/* webpackChunkName: "UIButton" */ '@faststore/ui').then(
18
+ (mod) => mod.Button
19
+ ),
20
+ { ssr: false }
21
+ )
22
+ const UICartSidebarFooter = dynamic<{ children: ReactNode }>(
23
+ () =>
24
+ import(/* webpackChunkName: "UICartSidebarFooter" */ '@faststore/ui').then(
25
+ (mod) => mod.CartSidebarFooter
26
+ ),
27
+ { ssr: false }
28
+ )
29
+ const UICartSidebarList = dynamic<{ children: ReactNode }>(
30
+ () =>
31
+ import(/* webpackChunkName: "UICartSidebarList" */ '@faststore/ui').then(
32
+ (mod) => mod.CartSidebarList
33
+ ),
34
+ { ssr: false }
35
+ )
36
+ const UICartSidebar = dynamic<UICartSidebarProps>(
37
+ () =>
38
+ import(/* webpackChunkName: "UICartSidebar" */ '@faststore/ui').then(
39
+ (mod) => mod.CartSidebar
40
+ ),
41
+ { ssr: false }
42
+ )
43
+ const EmptyCart = dynamic(
44
+ () => import(/* webpackChunkName: "EmptyCart" */ '../EmptyCart'),
45
+ { ssr: false }
46
+ )
47
+ const Gift = dynamic(
48
+ () => import(/* webpackChunkName: "Gift" */ '../../ui/Gift'),
49
+ {
50
+ ssr: false,
51
+ }
52
+ )
53
+ const CartItem = dynamic(
54
+ () => import(/* webpackChunkName: "CartItem" */ '../CartItem'),
55
+ { ssr: false }
56
+ )
57
+ const OrderSummary = dynamic(
58
+ () => import(/* webpackChunkName: "OrderSummary" */ '../OrderSummary'),
59
+ { ssr: false }
60
+ )
61
+
21
62
  import styles from './section.module.scss'
22
63
 
23
64
  function useViewCartEvent() {
@@ -121,84 +162,82 @@ function CartSidebar({
121
162
  return (
122
163
  <>
123
164
  {displayCart && (
124
- <Suspense fallback={null}>
125
- <UICartSidebar
126
- overlayProps={{
127
- className: `section ${styles.section} section-cart-sidebar`,
128
- }}
129
- title={title}
130
- totalItems={totalItems}
131
- alertIcon={<Icon name={alertIcon} aria-label={alertIconAlt} />}
132
- alertText={alertText}
133
- onClose={fadeOut}
134
- >
135
- {isEmpty ? (
136
- <EmptyCart onDismiss={closeCart} />
137
- ) : (
138
- <>
139
- <UICartSidebarList>
140
- {items.map((item) => (
141
- <li key={item.id}>
142
- <CartItem
143
- item={item}
144
- taxesConfiguration={taxesConfiguration}
145
- useUnitMultiplier={
146
- quantitySelector?.useUnitMultiplier ?? false
147
- }
148
- />
149
- </li>
150
- ))}
151
- {gifts.length > 0 && (
152
- <>
153
- {gifts.map((item) => (
154
- <li key={item.id}>
155
- <Gift item={item} />
156
- </li>
157
- ))}
158
- </>
159
- )}
160
- </UICartSidebarList>
165
+ <UICartSidebar
166
+ overlayProps={{
167
+ className: `section ${styles.section} section-cart-sidebar`,
168
+ }}
169
+ title={title}
170
+ totalItems={totalItems}
171
+ alertIcon={<Icon name={alertIcon} aria-label={alertIconAlt} />}
172
+ alertText={alertText}
173
+ onClose={fadeOut}
174
+ >
175
+ {isEmpty ? (
176
+ <EmptyCart onDismiss={closeCart} />
177
+ ) : (
178
+ <>
179
+ <UICartSidebarList>
180
+ {items.map((item) => (
181
+ <li key={item.id}>
182
+ <CartItem
183
+ item={item}
184
+ taxesConfiguration={taxesConfiguration}
185
+ useUnitMultiplier={
186
+ quantitySelector?.useUnitMultiplier ?? false
187
+ }
188
+ />
189
+ </li>
190
+ ))}
191
+ {gifts.length > 0 && (
192
+ <>
193
+ {gifts.map((item) => (
194
+ <li key={item.id}>
195
+ <Gift item={item} />
196
+ </li>
197
+ ))}
198
+ </>
199
+ )}
200
+ </UICartSidebarList>
161
201
 
162
- <UICartSidebarFooter>
163
- <OrderSummary
164
- subTotal={
165
- taxesConfiguration?.usePriceWithTaxes
166
- ? subTotalWithTaxes
167
- : subTotal
168
- }
169
- total={
170
- taxesConfiguration?.usePriceWithTaxes
171
- ? totalWithTaxes
172
- : total
173
- }
174
- includeTaxes={taxesConfiguration?.usePriceWithTaxes}
175
- includeTaxesLabel={taxesConfiguration?.taxesLabel}
176
- numberOfItems={totalItems}
177
- checkoutButton={
178
- <UIButton
179
- variant="primary"
180
- icon={
181
- !isValidating && (
182
- <Icon
183
- name={checkoutButtonIcon}
184
- aria-label={checkoutButtonIconAlt}
185
- width={18}
186
- height={18}
187
- />
188
- )
189
- }
190
- iconPosition="right"
191
- {...btnProps}
192
- >
193
- {isValidating ? checkoutLoadingLabel : checkoutLabel}
194
- </UIButton>
195
- }
196
- />
197
- </UICartSidebarFooter>
198
- </>
199
- )}
200
- </UICartSidebar>
201
- </Suspense>
202
+ <UICartSidebarFooter>
203
+ <OrderSummary
204
+ subTotal={
205
+ taxesConfiguration?.usePriceWithTaxes
206
+ ? subTotalWithTaxes
207
+ : subTotal
208
+ }
209
+ total={
210
+ taxesConfiguration?.usePriceWithTaxes
211
+ ? totalWithTaxes
212
+ : total
213
+ }
214
+ includeTaxes={taxesConfiguration?.usePriceWithTaxes}
215
+ includeTaxesLabel={taxesConfiguration?.taxesLabel}
216
+ numberOfItems={totalItems}
217
+ checkoutButton={
218
+ <UIButton
219
+ variant="primary"
220
+ icon={
221
+ !isValidating && (
222
+ <Icon
223
+ name={checkoutButtonIcon}
224
+ aria-label={checkoutButtonIconAlt}
225
+ width={18}
226
+ height={18}
227
+ />
228
+ )
229
+ }
230
+ iconPosition="right"
231
+ {...btnProps}
232
+ >
233
+ {isValidating ? checkoutLoadingLabel : checkoutLabel}
234
+ </UIButton>
235
+ }
236
+ />
237
+ </UICartSidebarFooter>
238
+ </>
239
+ )}
240
+ </UICartSidebar>
202
241
  )}
203
242
  </>
204
243
  )
@@ -0,0 +1,40 @@
1
+ import dynamic from 'next/dynamic'
2
+ import { ComponentType } from 'react'
3
+
4
+ import { OverriddenDefaultAlert as Alert } from 'src/components/sections/Alert/OverriddenDefaultAlert'
5
+ import { OverriddenDefaultNavbar as Navbar } from 'src/components/sections/Navbar/OverriddenDefaultNavbar'
6
+ import { OverriddenDefaultRegionBar as RegionBar } from 'src/components/sections/RegionBar/OverriddenDefaultRegionBar'
7
+
8
+ import CUSTOM_COMPONENTS from 'src/customizations/src/components'
9
+
10
+ const CartSidebar = dynamic(
11
+ () =>
12
+ import(
13
+ /* webpackChunkName: "CartSidebar" */ 'src/components/cart/CartSidebar'
14
+ ),
15
+ { ssr: false }
16
+ )
17
+ const RegionModal = dynamic(
18
+ () =>
19
+ import(
20
+ /* webpackChunkName: "RegionModal" */ 'src/components/region/RegionModal'
21
+ ),
22
+ { ssr: false }
23
+ )
24
+ const Footer = dynamic(
25
+ () =>
26
+ import(/* webpackChunkName: "Footer" */ 'src/components/sections/Footer'),
27
+ { ssr: false }
28
+ )
29
+
30
+ const COMPONENTS: Record<string, ComponentType<any>> = {
31
+ Alert,
32
+ Navbar,
33
+ RegionBar,
34
+ CartSidebar, // out of viewport
35
+ RegionModal, // out of viewport
36
+ Footer, // out of viewport
37
+ ...CUSTOM_COMPONENTS,
38
+ }
39
+
40
+ export default COMPONENTS
@@ -1,7 +1,15 @@
1
- import {
2
- BannerText as UIBannerText,
3
- BannerTextContent as UIBannerTextContent,
4
- } from '@faststore/ui'
1
+ import dynamic from 'next/dynamic'
2
+
3
+ const UIBannerText = dynamic(() =>
4
+ import(/* webpackChunkName: "UIBannerText" */ '@faststore/ui').then(
5
+ (mod) => mod.BannerText
6
+ )
7
+ )
8
+ const UIBannerTextContent = dynamic(() =>
9
+ import(/* webpackChunkName: "UIBannerTextContent" */ '@faststore/ui').then(
10
+ (mod) => mod.BannerTextContent
11
+ )
12
+ )
5
13
 
6
14
  export const BannerTextDefaultComponents = {
7
15
  BannerText: UIBannerText,
@@ -31,6 +31,7 @@ export const ValidateCartMutation = gql(`
31
31
  acceptedOffer {
32
32
  ...CartItem
33
33
  }
34
+ shouldSplitItem
34
35
  }
35
36
  messages {
36
37
  ...CartMessage
@@ -144,6 +145,7 @@ const validateCart = async (cart: Cart): Promise<Cart | null> => {
144
145
  id: getItemId(item),
145
146
  })),
146
147
  messages: validated.messages,
148
+ shouldSplitItem: validated.order.shouldSplitItem,
147
149
  }
148
150
  )
149
151
  }
@@ -1 +0,0 @@
1
- "use strict";exports.id=3887,exports.ids=[3887],exports.modules={2740:(e,t,a)=>{a.d(t,{Z:()=>i});var r=a(6689),l=a.n(r);let n=(0,r.forwardRef)(function({testId:e="fs-checkbox",partial:t,...a},r){return l().createElement("input",{ref:r,"data-fs-checkbox":!0,"data-testid":e,"data-fs-checkbox-partial":t,type:"checkbox",...a})}),i=n},4873:(e,t,a)=>{a.d(t,{Z:()=>u});var r=a(6689),l=a.n(r),n=a(2614);let i=(0,r.forwardRef)(function({options:e,id:t,testId:a="fs-select",...r},i){return l().createElement("div",{"data-fs-select":!0},l().createElement("select",{ref:i,id:t,"data-testid":a,...r},Object.keys(e).map(t=>l().createElement("option",{key:t,value:t},e[t]))),l().createElement(n.Z,{"data-fs-select-icon":!0,name:"CaretDown"}))}),u=i},9395:(e,t,a)=>{a.d(t,{Z:()=>i});var r=a(6689),l=a.n(r);let percent=(e,t,a)=>Math.round((e-t)/(a-t)*100),n=(0,r.forwardRef)(function({min:e,max:t,absoluteValuesLabel:a,onChange:n,onEnd:i,testId:u="fs-slider",getAriaValueText:s,step:o,minValueLabelComponent:m,maxValueLabelComponent:d,...c},f){let b=(0,r.useMemo)(()=>(t.absolute-e.absolute)/100,[t.absolute,e.absolute]),[E,_]=(0,r.useState)(()=>percent(e.selected,e.absolute,t.absolute)),[v,p]=(0,r.useState)(()=>percent(t.selected,e.absolute,t.absolute)),[x,h]=(0,r.useState)(()=>Math.floor(e.absolute+E*b)),[g,M]=(0,r.useState)(()=>Math.round(e.absolute+v*b));return(0,r.useImperativeHandle)(f,()=>({setSliderValues:a=>{let r=Math.min(Number(a.min),g);if(h(r),_(percent(r,e.absolute,t.absolute)),a.max>t.absolute){M(t.absolute),p(percent(t.absolute,e.absolute,t.absolute));return}let l=Math.max(Number(a.max),x);M(l),p(percent(l,e.absolute,t.absolute))}})),l().createElement("div",{"data-fs-slider":!0,"data-testid":u,...c},l().createElement("div",{"data-fs-slider-absolute-values":!0},l().createElement("span",null,a.min),l().createElement("span",null,a.max)),l().createElement("div",{"data-fs-slider-wrapper":!0},l().createElement("div",{"data-fs-slider-range":!0,style:{left:`${E}%`,width:`${v-E}%`}}),l().createElement("input",{type:"range",min:Math.floor(e.absolute),max:Math.round(t.absolute),value:x,step:o,onMouseUp:()=>i?.({min:x,max:g}),onTouchEnd:()=>i?.({min:x,max:g}),onChange:a=>{let r=Math.min(Number(a.target.value),g);h(r),_(percent(r,e.absolute,t.absolute)),n?.({min:r,max:g})},"data-fs-slider-thumb":"left","aria-valuemin":e.absolute,"aria-valuemax":t.absolute,"aria-valuenow":x,"aria-label":String(x),"aria-labelledby":s?.(x,"min")}),m&&l().createElement("span",{"data-fs-slider-value-label":"min",style:{left:`calc(${x/t.absolute*100}% + (${8-.2*(x/t.absolute*100)}px))`}},m(x)),l().createElement("input",{type:"range",min:Math.floor(e.absolute),max:Math.round(t.absolute),value:g,step:o,onMouseUp:()=>i?.({min:x,max:g}),onTouchEnd:()=>i?.({min:x,max:g}),onChange:a=>{let r=Math.max(Number(a.target.value),x);M(r),p(percent(r,e.absolute,t.absolute)),n?.({min:x,max:r})},"data-fs-slider-thumb":"right","aria-valuemin":e.absolute,"aria-valuemax":t.absolute,"aria-valuenow":g,"aria-label":String(g),"aria-labelledby":s?.(g,"max")}),d&&l().createElement("span",{"data-fs-slider-value-label":"max",style:{left:`calc(${g/t.absolute*100}% + (${8-.2*(g/t.absolute*100)}px))`}},d(g))))}),i=n},6335:(e,t,a)=>{a.d(t,{Z:()=>s});var r=a(6689),l=a.n(r),n=a(1953),i=a(4873);let u=(0,r.forwardRef)(function({id:e,label:t,options:a,testId:r="fs-select-field",...u},s){return l().createElement("div",{ref:s,"data-fs-select-field":!0},l().createElement(n.Z,{"data-fs-select-field-label":!0,htmlFor:e},t),l().createElement(i.Z,{id:e,options:a,"data-testid":r,...u}))}),s=u},5699:(e,t,a)=>{a.d(t,{Z:()=>__WEBPACK_DEFAULT_EXPORT__});var r=a(6689),l=a.n(r),n=a(1516);let __WEBPACK_DEFAULT_EXPORT__=function({testId:e,title:t,indicesExpanded:a,onAccordionChange:r,children:i}){return l().createElement("div",{"data-fs-filter":!0,"data-testid":e},l().createElement("h2",{"data-fs-filter-title":!0},t),l().createElement(n.Z,{indices:a,onChange:r,"data-fs-filter-accordion":!0},i))}},2815:(e,t,a)=>{a.d(t,{Z:()=>__WEBPACK_DEFAULT_EXPORT__});var r=a(6689),l=a.n(r),n=a(4564);let __WEBPACK_DEFAULT_EXPORT__=function({children:e}){return l().createElement(n.Z,{"data-fs-filter-list":!0},e)}},6174:(e,t,a)=>{a.d(t,{Z:()=>__WEBPACK_DEFAULT_EXPORT__});var r=a(6689),l=a.n(r),n=a(2740),i=a(1953),u=a(276);let __WEBPACK_DEFAULT_EXPORT__=function({testId:e,id:t,selected:a,value:r,quantity:s,facetKey:o,label:m,onFacetChange:d}){return l().createElement("li",{key:t,"data-fs-filter-list-item":!0},l().createElement(n.Z,{id:t,checked:a,onChange:()=>d({key:o,value:r},"BOOLEAN"),"data-fs-filter-list-item-checkbox":!0,"data-testid":`${e}-accordion-panel-checkbox`,"data-value":r,"data-quantity":s}),l().createElement(i.Z,{htmlFor:t,className:"text__title-mini-alt","data-fs-filter-list-item-label":!0},m," ",l().createElement(u.Z,{"data-fs-filter-list-item-badge":!0},s)))}},2230:(e,t,a)=>{a.d(t,{Z:()=>__WEBPACK_DEFAULT_EXPORT__});var r=a(6689),l=a.n(r),n=a(8110);let formatRange=(e,t)=>`${e.toFixed(2)}-to-${t.toFixed(2)}`,__WEBPACK_DEFAULT_EXPORT__=function({min:e,max:t,formatter:a,facetKey:r,onFacetChange:i}){return l().createElement(n.Z,{"data-fs-filter-facet-range":!0,min:e,max:t,formatter:a,step:1,onEnd:e=>i({key:r,value:formatRange(e.min,e.max)},"RANGE")})}},4199:(e,t,a)=>{a.d(t,{Z:()=>__WEBPACK_DEFAULT_EXPORT__});var r=a(6689),l=a.n(r),n=a(783),i=a(7734),u=a(7583);let __WEBPACK_DEFAULT_EXPORT__=function({testId:e,label:t,index:a,children:r,type:s}){return l().createElement(n.Z,{key:`${t}-${a}`,prefixId:e,testId:`${e}-accordion`,index:a,"data-type":s,"data-fs-filter-accordion-item":!0},l().createElement(i.Z,{testId:`${e}-accordion-button`},t),l().createElement(u.Z,null,r))}},8110:(e,t,a)=>{a.d(t,{Z:()=>o});var r=a(6689),l=a.n(r),n=a(9395),i=a(9767),u=a(3779);let s=(0,r.forwardRef)(function({formatter:e,max:t,min:a,step:s=1,onChange:o,onEnd:m,testId:d="fs-price-range",variant:c,"aria-label":f,...b},E){let _=(0,r.useRef)();(0,r.useImperativeHandle)(E,()=>({setPriceRangeValues:e=>{o?.(e),_.current?.setSliderValues(e)}}));let v=(0,r.useRef)(null),p=(0,r.useRef)(null),[x,h]=(0,r.useState)(),[g,M]=(0,r.useState)(),[Z,R]=(0,r.useState)({min:Math.floor(a.selected),max:Math.round(t.selected)});return l().createElement("div",{"data-fs-price-range":!0,"data-testid":d,...b},l().createElement(n.Z,{ref:_,min:a,max:t,step:s,onEnd:e=>{m?.(e),h(void 0),M(void 0),R({min:e.min,max:e.max}),v.current?.value&&(v.current.value=String(e.min)),p.current?.value&&(p.current.value=String(e.max))},"aria-label":f,onChange:e=>o?.(e),absoluteValuesLabel:{min:l().createElement(i.Z,{value:Math.floor(a.absolute),variant:c,formatter:e}),max:l().createElement(i.Z,{value:Math.round(t.absolute),variant:c,formatter:e})},minValueLabelComponent:t=>l().createElement(i.Z,{value:t,variant:c,formatter:e}),maxValueLabelComponent:t=>l().createElement(i.Z,{value:t,variant:c,formatter:e})}),l().createElement("div",{"data-fs-price-range-inputs":!0},l().createElement(u.Z,{id:"price-range-min",step:s,label:"Min",type:"number",inputMode:"numeric",error:x,inputRef:v,min:Math.floor(a.absolute),max:Z.max,value:Z.min,onChange:e=>{var t;return t=e.target.value,void(h(void 0),Number(t)<Math.floor(a.absolute)||(Number(t)>Math.floor(Z.max)&&h("Min price can't be greater than max"),R({...Z,min:Number(t)}),_.current?.setSliderValues({...Z,min:Number(t)})))},onBlur:()=>!x&&m?.(Z)}),l().createElement(u.Z,{id:"price-range-max",label:"Max",step:s,type:"number",inputMode:"numeric",error:g,inputRef:p,max:Math.round(t.absolute),min:Z.min,value:Z.max,onChange:e=>{var a;return a=e.target.value,void(M(void 0),Number(a)>Math.round(t.absolute)||(Number(a)<Math.round(Z.min)&&M("Max price can't be smaller than min"),R({...Z,max:Number(a)}),_.current?.setSliderValues({...Z,max:Number(a)})))},onBlur:()=>!g&&m?.(Z)})))}),o=s}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=416,exports.ids=[416],exports.modules={6476:(e,t,a)=>{a.d(t,{Z:()=>__WEBPACK_DEFAULT_EXPORT__});var l=a(6689),r=a.n(l),n=a(3339);let __WEBPACK_DEFAULT_EXPORT__=function({testId:e="fs-buy-button",icon:t,children:a,...l}){return r().createElement(n.Z,{"data-fs-buy-button":!0,icon:t,iconPosition:"left","data-testid":e,...l},a)}},7876:(e,t,a)=>{a.d(t,{Z:()=>o});var l=a(6689),r=a.n(l),n=a(3024);let i=(0,l.forwardRef)(function({title:e,label:t,refTag:a="Ref.: ",refNumber:l,testId:i="fs-product-title",ratingValue:o,...s},c){return r().createElement("header",{ref:c,"data-fs-product-title":!0,"data-testid":i,...s},r().createElement("div",{"data-fs-product-title-header":!0},e,!!t&&t),(l||o)&&r().createElement("div",{"data-fs-product-title-addendum":!0},o&&r().createElement(n.Z,{value:o}),l&&r().createElement(r().Fragment,null,a," ",l)))}),o=i},5136:(e,t,a)=>{a.d(t,{Z:()=>c});var l=a(6689),r=a.n(l),n=a(1953),i=a(727),o=a(5450);let getImageName=e=>{let t=new URL(e).pathname,a=t.split("/").slice(-1)[0];return a},useDefineVariant=(e,t)=>(0,l.useMemo)(()=>{if(t)return t;let a=e.every(e=>e.hexColor);if(a)return"color";let l=e[0]?.src&&getImageName(e[0].src);if(l&&1===e.length)return"image";let r=e.every(e=>{if(!e.src)return!0;let t=getImageName(e.src);return t===l});return r?"label":"image"},[e,t]),useSkuSlug=(e,t,a,r)=>{let n=(0,l.useCallback)(l=>{if(r)return{getItemHrefProp:r};let n=`/${function(e,t,a){let l=Object.entries(t).flat().join("-");if(l in e)return e[l];let r=Object.keys(e),n=`${a}-${t[a]}`,i=r.filter(e=>e.includes(n)),o=i.length>1?function(e,t){let[a,l]=t.split("-");return e.find(e=>{let t=function(e){let t={},a=e.split("-");for(let e=0;e<a.length;e+=2){let l=a[e].trim(),r=a[e+1]?a[e+1].trim():"";t[l]=r}return t}(e);return t[a]===l})}(i,n):i[0];return e[o??r[0]]}(t,{...e,[a]:l.value},a)}/p`;return n},[e,r,t,a]);return{getItemHref:n}},ImageComponentFallback=({src:e,alt:t,...a})=>r().createElement("img",{src:e,alt:t,...a}),s=(0,l.forwardRef)(function({availableVariations:e,skuPropertyName:t,testId:a,activeVariations:l,linkProps:s,slugsMap:c,getItemHref:d,ImageComponent:m=ImageComponentFallback,variant:u,...f},g){let E=l[t],p=e[t],h=useDefineVariant(p,u),{getItemHref:_}=useSkuSlug(l,c,t,d);return r().createElement("div",{ref:g,"data-fs-sku-selector":!0,"data-testid":a,"data-fs-sku-selector-variant":h,...f},t&&r().createElement(n.Z,{"data-fs-sku-selector-title":!0},t,": ",r().createElement("strong",null,E)),r().createElement("ul",{"data-fs-sku-selector-list":!0},p.map((e,a)=>r().createElement("li",{key:String(a),title:e.label,"data-fs-sku-selector-option":!0,"data-fs-sku-selector-disabled":e.disabled,"data-fs-sku-selector-checked":e.value===l[t]},r().createElement(i.Z,{"data-fs-sku-selector-option-link":!0,href:_(e),...s},r().createElement(o.Z,{text:e.label})),"label"===h&&r().createElement("span",null,e.value),"image"===h&&m&&r().createElement("span",null,r().createElement(m,{src:e.src??"",alt:e.alt??"","data-fs-sku-selector-option-image":!0})),"color"===h&&r().createElement("span",null,r().createElement("div",{"data-fs-sku-selector-option-color":!0,title:e.value,style:{"--data-fs-sku-selector-option-color-bkg-color":e.hexColor}}))))))}),c=s},7336:(e,t,a)=>{a.d(t,{Z:()=>i});var l=a(6689),r=a.n(l);let n=(0,l.forwardRef)(function({children:e,variant:t="colored",testId:a="fs-table",...l},n){return r().createElement("div",{"data-fs-table":!0},r().createElement("table",{ref:n,"data-fs-table-content":!0,"data-fs-table-variant":t,"data-testid":a,...l},e))}),i=n},9336:(e,t,a)=>{a.d(t,{Z:()=>i});var l=a(6689),r=a.n(l);let n=(0,l.forwardRef)(function({children:e,testId:t="fs-table-body",...a},l){return r().createElement("tbody",{ref:l,"data-testid":t,"data-fs-table-body":!0,...a},e)}),i=n},4256:(e,t,a)=>{a.d(t,{Z:()=>i});var l=a(6689),r=a.n(l);let n=(0,l.forwardRef)(function({scope:e,align:t,children:a,variant:l="data",testId:n="fs-table-cell",...i},o){return r().createElement("header"===l?"th":"td",{ref:o,"data-fs-table-cell":l,"data-fs-table-cell-align":t,"data-testid":n,scope:e,...i},a)}),i=n},4236:(e,t,a)=>{a.d(t,{Z:()=>i});var l=a(6689),r=a.n(l);let n=(0,l.forwardRef)(function({children:e,testId:t="fs-table-row",...a},l){return r().createElement("tr",{ref:l,"data-fs-table-row":!0,"data-testid":t,...a},e)}),i=n},165:(e,t,a)=>{a.d(t,{Z:()=>o});var l=a(6689),r=a.n(l),n=a(9362);let i=(0,l.forwardRef)(function({images:e,children:t,ImageComponent:a,selectedImageIdx:l,setSelectedImageIdx:i,testId:o="fs-image-gallery",...s},c){let d=e.length>1;return r().createElement("section",{ref:c,"data-fs-image-gallery":d?"with-selector":"without-selector","data-testid":o,...s},t,d&&r().createElement(n.Z,{images:e,onSelect:i,currentImageIdx:l,ImageComponent:a}))}),o=i},9362:(e,t,a)=>{a.d(t,{Z:()=>__WEBPACK_DEFAULT_EXPORT__});var l=a(6689),r=a.n(l),n=a(9785),i=a(7041),o=a(2614),s=a(3339);let moveScroll=(e,t)=>{e&&(e.scrollHeight>e.clientHeight?(e.style.overflow="auto",window.requestAnimationFrame(()=>e.scrollTo({top:t,behavior:"smooth"})),setTimeout(()=>e.style.overflow="hidden",2e3)):e.scrollLeft+=t)},hasScroll=e=>!!e&&(e.scrollHeight>e.clientHeight||e.scrollWidth>e.clientWidth),__WEBPACK_DEFAULT_EXPORT__=function({images:e,onSelect:t,ImageComponent:a,currentImageIdx:c,testId:d="fs-image-gallery-selector","aria-label":m="Product Images",navigationButtonLeftAriaLabel:u="Backward slide image selector",navigationButtonRightAriaLabel:f="Forward slide image selector"}){let g=(0,l.useRef)(null),E=hasScroll(g.current),[p,h]=(0,l.useState)(!0),[_,b]=(0,l.useState)(!0),v=(0,l.useCallback)((t,a)=>{0===t&&h(a),t===e.length-1&&b(a)},[e.length]);return r().createElement("section",{"data-fs-image-gallery-selector":!0,"data-testid":d,"aria-label":m},E&&!p&&r().createElement("div",{"data-fs-image-gallery-selector-control":!0},r().createElement(i.Z,{"data-fs-image-gallery-selector-control-button":!0,"aria-label":u,icon:r().createElement(o.Z,{name:"ArrowLeft"}),onClick:()=>moveScroll(g.current,-400)})),r().createElement("div",{"data-fs-image-gallery-selector-elements":!0,ref:g},e.map((l,i)=>r().createElement(n.InView,{key:i,onChange:e=>v(i,e)},r().createElement(s.Z,{key:i,"aria-label":`${l.alternateName} - Image ${i+1} of ${e.length}`,onClick:()=>t(i),"data-fs-image-gallery-selector-thumbnail":i===c?"selected":"true"},r().createElement(a,{url:l.url??"",loading:0===i?"eager":"lazy",alternateName:l.alternateName??""}))))),E&&!_&&r().createElement("div",{"data-fs-image-gallery-selector-control":!0},r().createElement(i.Z,{"data-fs-image-gallery-selector-control-button":!0,"aria-label":f,icon:r().createElement(o.Z,{name:"ArrowLeft"}),onClick:()=>moveScroll(g.current,400)})))}},1431:(e,t,a)=>{a.d(t,{Z:()=>__WEBPACK_DEFAULT_EXPORT__});var l=a(6689),r=a.n(l);let __WEBPACK_DEFAULT_EXPORT__=({children:e})=>r().createElement(r().Fragment,null,e)},8878:(e,t,a)=>{a.d(t,{Z:()=>__WEBPACK_DEFAULT_EXPORT__});var l=a(6689),r=a.n(l),n=a(3779),i=a(727),o=a(2614),s=a(7336),c=a(9336),d=a(4236),m=a(4256),u=a(9767);let __WEBPACK_DEFAULT_EXPORT__=function({testId:e="fs-shipping-simulation",formatter:t,title:a="Shipping",inputLabel:l="Postal Code",optionsLabel:f="Shipping options",idkPostalCodeLinkProps:g,onInput:E,onSubmit:p,onClear:h,location:_,options:b=[],displayClearButton:v=!1,errorMessage:Z,postalCode:k,...y}){let w=!!b&&b.length>0;return r().createElement("section",{"data-fs-shipping-simulation":!0,"data-fs-shipping-simulation-empty":w?"false":"true","data-testid":e,...y},r().createElement("h2",{"data-fs-shipping-simulation-title":!0},a),r().createElement(n.Z,{actionable:!0,error:Z,id:`${e}-input-field`,label:l,value:k,onInput:e=>E?.(e),onSubmit:()=>p?.(),onClear:()=>h?.(),displayClearButton:v}),r().createElement(i.Z,{href:"/","data-fs-shipping-simulation-link":!0,size:"small",...g},g?.children??r().createElement(r().Fragment,null,"I don't know my Postal Code",r().createElement(o.Z,{name:"ArrowSquareOut",width:20,height:20}))),w&&r().createElement(r().Fragment,null,r().createElement("header",{"data-fs-shipping-simulation-header":!0},r().createElement("h3",{"data-fs-shipping-simulation-subtitle":!0},f),r().createElement("p",{"data-fs-shipping-simulation-location":!0},_)),r().createElement(s.Z,null,r().createElement(c.Z,null,b.map(e=>r().createElement(d.Z,{key:e.carrier},r().createElement(m.Z,{align:"left"},e.carrier),r().createElement(m.Z,null,e.localizedEstimates),r().createElement(m.Z,{align:"right"},e.price&&r().createElement(u.Z,{formatter:t,value:e.price,SRText:"price"}))))))))}}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=5110,exports.ids=[5110],exports.modules={5110:(e,t,r)=>{r.d(t,{C:()=>c});var o=r(7296),n=r(945);function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,o)}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){var o;o=r[t],t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ownKeys(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}let c=(0,o.v)(_objectSpread(_objectSpread({},{section:"EmptyState"}),{},{Section:n.Z}))}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=5679,exports.ids=[5679],exports.modules={5679:(e,r,t)=>{t.d(r,{w:()=>useProductLink});var i=t(6689),a=t(5238);let useProductLink=({index:e,product:r,selectedOffer:s})=>{let{slug:n}=r,{currency:{code:o}}=(0,a.kP)(),c=(0,i.useCallback)(()=>{Promise.all([t.e(2880),t.e(1153)]).then(t.bind(t,1153)).then(({sendAnalyticsEvent:t})=>{t({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:e,price:r.offers.offers[s].price,discount:r.offers.offers[s].listPrice-r.offers.offers[s].price,currency:o,item_variant_name:r.name,product_reference_id:r.gtin}]}}),t({name:"search_select_item",params:{url:window.location.href,items:[{item_id:r.isVariantOf.productGroupID,item_variant:r.sku,index:e}]}})})},[o,r,e,s]);return{href:`/${n}/p`,onClick:c,"data-testid":"product-link"}}}};