@faststore/core 2.2.53 → 2.2.55

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 (108) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +54 -60
  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/next-server.js.nft.json +1 -1
  7. package/.next/cache/webpack/client-production/0.pack +0 -0
  8. package/.next/cache/webpack/client-production/index.pack +0 -0
  9. package/.next/cache/webpack/server-production/0.pack +0 -0
  10. package/.next/cache/webpack/server-production/index.pack +0 -0
  11. package/.next/next-server.js.nft.json +1 -1
  12. package/.next/prerender-manifest.json +1 -1
  13. package/.next/react-loadable-manifest.json +3 -3
  14. package/.next/routes-manifest.json +1 -1
  15. package/.next/server/chunks/390.js +409 -404
  16. package/.next/server/chunks/520.js +491 -0
  17. package/.next/server/chunks/732.js +1 -1
  18. package/.next/server/chunks/74.js +2274 -636
  19. package/.next/server/chunks/796.js +495 -0
  20. package/.next/server/middleware-build-manifest.js +1 -1
  21. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  22. package/.next/server/pages/404.js +14 -0
  23. package/.next/server/pages/404.js.nft.json +1 -1
  24. package/.next/server/pages/500.js +14 -0
  25. package/.next/server/pages/500.js.nft.json +1 -1
  26. package/.next/server/pages/[...slug].js +12 -12
  27. package/.next/server/pages/[...slug].js.nft.json +1 -1
  28. package/.next/server/pages/[slug]/p.js +17 -61
  29. package/.next/server/pages/[slug]/p.js.nft.json +1 -1
  30. package/.next/server/pages/_app.js.nft.json +1 -1
  31. package/.next/server/pages/account.js +14 -0
  32. package/.next/server/pages/account.js.nft.json +1 -1
  33. package/.next/server/pages/api/graphql.js.nft.json +1 -1
  34. package/.next/server/pages/checkout.js +14 -0
  35. package/.next/server/pages/checkout.js.nft.json +1 -1
  36. package/.next/server/pages/en-US/404.html +2 -2
  37. package/.next/server/pages/en-US/500.html +2 -2
  38. package/.next/server/pages/en-US/account.html +2 -2
  39. package/.next/server/pages/en-US/checkout.html +2 -2
  40. package/.next/server/pages/en-US/login.html +2 -2
  41. package/.next/server/pages/en-US/s.html +2 -2
  42. package/.next/server/pages/en-US.html +2 -2
  43. package/.next/server/pages/index.js +7 -7
  44. package/.next/server/pages/index.js.nft.json +1 -1
  45. package/.next/server/pages/login.js +14 -0
  46. package/.next/server/pages/login.js.nft.json +1 -1
  47. package/.next/server/pages/s.js +8 -1
  48. package/.next/server/pages/s.js.nft.json +1 -1
  49. package/.next/server/pages-manifest.json +3 -3
  50. package/.next/static/chunks/158-df35a8644ae9d281.js +1 -0
  51. package/.next/static/chunks/251.98f500dd8ba008ae.js +1 -0
  52. package/.next/static/chunks/497-37c1e4e1d862b354.js +1 -0
  53. package/.next/static/chunks/585.4e673e43d8daf336.js +1 -0
  54. package/.next/static/chunks/800.ea75aa39e939d9af.js +1 -0
  55. package/.next/static/chunks/897-b07932d813bb7dac.js +1 -0
  56. package/.next/static/chunks/pages/{404-7710903c2a59fa6e.js → 404-0bacd82dcf801c94.js} +1 -1
  57. package/.next/static/chunks/pages/{500-88a231e61179db83.js → 500-4dceb834e001d990.js} +1 -1
  58. package/.next/static/chunks/pages/[...slug]-b82b56ce1651ea4f.js +1 -0
  59. package/.next/static/chunks/pages/[slug]/p-39599bd4d6faeeb6.js +1 -0
  60. package/.next/static/chunks/pages/{account-f163e14670372c05.js → account-57c0c1f70eed76a6.js} +1 -1
  61. package/.next/static/chunks/pages/{checkout-cf498a32e110bde8.js → checkout-e5db8918e7c9c75e.js} +1 -1
  62. package/.next/static/chunks/pages/index-84457d91d9060925.js +1 -0
  63. package/.next/static/chunks/pages/{login-707636c85f23cac6.js → login-39000c786b4f6222.js} +1 -1
  64. package/.next/static/chunks/pages/s-e195109f5acced7c.js +1 -0
  65. package/.next/static/chunks/webpack-ec84ae4e89cebb1f.js +1 -0
  66. package/.next/static/css/0cb5d7afb952bb02.css +1 -0
  67. package/.next/static/css/{4e42cc999ad62b57.css → 0dc997f9da3027b7.css} +1 -1
  68. package/.next/static/css/{d7bbfbd552f407e9.css → cbccabebb36f7f92.css} +1 -1
  69. package/.next/static/css/{d456bfc64bc489a2.css → cf062feb79245123.css} +1 -1
  70. package/.next/static/xNdv8Ze2mVN5lf__-4QVM/_buildManifest.js +1 -0
  71. package/.next/trace +81 -81
  72. package/.turbo/turbo-build.log +18 -18
  73. package/.turbo/turbo-test.log +9 -9
  74. package/package.json +2 -2
  75. package/src/components/sections/CrossSellingShelf/DefaultComponents.ts +9 -0
  76. package/src/components/sections/CrossSellingShelf/OverriddenDefaultCrossSellingShelf.ts +5 -0
  77. package/src/components/sections/ProductShelf/DefaultComponents.ts +9 -0
  78. package/src/components/sections/ProductShelf/OverriddenDefaultProductShelf.ts +12 -0
  79. package/src/components/templates/LandingPage/LandingPage.tsx +1 -1
  80. package/src/components/templates/ProductListingPage/ProductListing.tsx +1 -1
  81. package/src/components/ui/ProductShelf/ProductShelf.tsx +11 -12
  82. package/src/pages/[slug]/p.tsx +1 -1
  83. package/src/pages/index.tsx +1 -1
  84. package/src/sdk/overrides/sections.tsx +12 -4
  85. package/src/typings/overrides.ts +15 -1
  86. package/.next/server/chunks/117.js +0 -430
  87. package/.next/server/chunks/184.js +0 -61
  88. package/.next/server/chunks/53.js +0 -61
  89. package/.next/server/chunks/773.js +0 -550
  90. package/.next/server/chunks/854.js +0 -72
  91. package/.next/server/chunks/890.js +0 -1205
  92. package/.next/static/McclVBfxjOJEmRRYVXL7T/_buildManifest.js +0 -1
  93. package/.next/static/chunks/158-042441a60c3b4b56.js +0 -1
  94. package/.next/static/chunks/223-cb77217cce52d45c.js +0 -1
  95. package/.next/static/chunks/251.1c79f06f2a2814b1.js +0 -1
  96. package/.next/static/chunks/290-383e1d36f83c367d.js +0 -1
  97. package/.next/static/chunks/497-f3f10b00c609f0c2.js +0 -1
  98. package/.next/static/chunks/585.2d70151d75fdf960.js +0 -1
  99. package/.next/static/chunks/800.f63caad837409c7e.js +0 -1
  100. package/.next/static/chunks/pages/[...slug]-9b20bb8274fe7854.js +0 -1
  101. package/.next/static/chunks/pages/[slug]/p-0ef7dd71888c199e.js +0 -1
  102. package/.next/static/chunks/pages/index-1cfe3afbd6564f45.js +0 -1
  103. package/.next/static/chunks/pages/s-0bfcfd0d40841dcf.js +0 -1
  104. package/.next/static/chunks/webpack-ba86ae9a63f61805.js +0 -1
  105. package/.next/static/css/14c11109f82a6f9a.css +0 -1
  106. package/.next/static/css/e337ce16f77f08a7.css +0 -1
  107. package/src/components/sections/ProductShelf/Overrides.tsx +0 -20
  108. /package/.next/static/{McclVBfxjOJEmRRYVXL7T → xNdv8Ze2mVN5lf__-4QVM}/_ssgManifest.js +0 -0
@@ -151,6 +151,29 @@ const Loader = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function Loader
151
151
 
152
152
  /***/ }),
153
153
 
154
+ /***/ 9767:
155
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
156
+
157
+ "use strict";
158
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
159
+ /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
160
+ /* harmony export */ });
161
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6689);
162
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
163
+ /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5450);
164
+
165
+
166
+ const Price = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function Price({ value, as: Component = 'span', variant = 'selling', testId = 'fs-price', formatter = (price) => price, SRText, ...otherProps }, ref) {
167
+ const formattedPrice = formatter(value, variant);
168
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Component, { ref: ref, "data-fs-price": true, "data-fs-price-variant": variant, "data-testid": testId, ...otherProps },
169
+ SRText && react__WEBPACK_IMPORTED_MODULE_0___default().createElement(___WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, { text: SRText }),
170
+ formattedPrice));
171
+ });
172
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Price);
173
+ //# sourceMappingURL=Price.js.map
174
+
175
+ /***/ }),
176
+
154
177
  /***/ 5450:
155
178
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
156
179
 
@@ -170,6 +193,28 @@ function SROnly({ text, as }) {
170
193
 
171
194
  /***/ }),
172
195
 
196
+ /***/ 792:
197
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
198
+
199
+ "use strict";
200
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
201
+ /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
202
+ /* harmony export */ });
203
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6689);
204
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
205
+
206
+ const Skeleton = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function Skeleton({ testId = 'fs-skeleton', loading = true, shimmer = true, children, size, border, borderRadius, ...otherProps }, ref) {
207
+ const styles = {
208
+ width: size.width,
209
+ height: size.height,
210
+ };
211
+ return loading ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { ref: ref, "data-fs-skeleton": true, "data-testid": testId, "data-fs-skeleton-border": border ? border : null, style: borderRadius ? { ...styles, borderRadius: borderRadius } : styles, ...otherProps }, shimmer && react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { "data-fs-skeleton-shimmer": true }))) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, children));
212
+ });
213
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Skeleton);
214
+ //# sourceMappingURL=Skeleton.js.map
215
+
216
+ /***/ }),
217
+
173
218
  /***/ 3666:
174
219
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
175
220
 
@@ -412,6 +457,54 @@ const Alert = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function Alert({
412
457
 
413
458
  /***/ }),
414
459
 
460
+ /***/ 2946:
461
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
462
+
463
+ "use strict";
464
+
465
+ // EXPORTS
466
+ __webpack_require__.d(__webpack_exports__, {
467
+ "Z": () => (/* binding */ DiscountBadge_DiscountBadge)
468
+ });
469
+
470
+ // EXTERNAL MODULE: external "react"
471
+ var external_react_ = __webpack_require__(6689);
472
+ var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_);
473
+ // EXTERNAL MODULE: ../components/dist/esm/atoms/Badge/Badge.js
474
+ var Badge = __webpack_require__(276);
475
+ ;// CONCATENATED MODULE: ../components/dist/esm/molecules/DiscountBadge/useDiscountPercent.js
476
+
477
+ const useDiscountPercent = (listPrice, spotPrice) => {
478
+ return (0,external_react_.useMemo)(() => {
479
+ const diff = listPrice - spotPrice;
480
+ const discount = (diff * 100) / listPrice;
481
+ return Math.round(discount);
482
+ }, [spotPrice, listPrice]);
483
+ };
484
+ //# sourceMappingURL=useDiscountPercent.js.map
485
+ ;// CONCATENATED MODULE: ../components/dist/esm/molecules/DiscountBadge/DiscountBadge.js
486
+
487
+
488
+
489
+ const DiscountBadge = ({ listPrice, spotPrice, thresholdLow = 15, thresholdHigh = 40, size, testId = 'fs-discount-badge', }) => {
490
+ const discountPercent = useDiscountPercent(listPrice, spotPrice);
491
+ if (discountPercent === 0) {
492
+ return external_react_default().createElement((external_react_default()).Fragment, null);
493
+ }
494
+ const discountVariant = discountPercent <= thresholdLow
495
+ ? 'low'
496
+ : discountPercent <= thresholdHigh
497
+ ? 'medium'
498
+ : 'high';
499
+ return (external_react_default().createElement(Badge/* default */.Z, { "data-fs-discount-badge": true, "data-fs-discount-badge-variant": discountVariant, size: size, "data-testid": testId },
500
+ discountPercent,
501
+ "% off"));
502
+ };
503
+ /* harmony default export */ const DiscountBadge_DiscountBadge = (DiscountBadge);
504
+ //# sourceMappingURL=DiscountBadge.js.map
505
+
506
+ /***/ }),
507
+
415
508
  /***/ 7041:
416
509
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
417
510
 
@@ -631,6 +724,48 @@ const Modal = ({ children, testId = 'fs-modal', isOpen = true, onDismiss, overla
631
724
 
632
725
  /***/ }),
633
726
 
727
+ /***/ 3024:
728
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
729
+
730
+ "use strict";
731
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
732
+ /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
733
+ /* harmony export */ });
734
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6689);
735
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
736
+ /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2614);
737
+ /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7041);
738
+ /* harmony import */ var _atoms_List__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4564);
739
+
740
+
741
+
742
+ const Rating = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function Rating({ children, testId = 'fs-rating', length = 5, value = 0, icon, onChange, ...otherProps }, ref) {
743
+ const [hover, setHover] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);
744
+ const outlineProps = { 'data-fs-rating-icon-outline': true };
745
+ const ratingIcon = react__WEBPACK_IMPORTED_MODULE_0___default().isValidElement(icon) ? icon : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(___WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, { name: "Star" });
746
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_atoms_List__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z, { ref: ref, "data-fs-rating": true, "data-fs-rating-actionable": typeof onChange === 'function', "data-testid": testId, ...otherProps }, Array.from({ length }).map((_, index) => {
747
+ const tempIndex = index + 1;
748
+ const fillCheck = () => {
749
+ if (tempIndex <= (hover || value)) {
750
+ return 'full';
751
+ }
752
+ if (tempIndex - value > 0 && tempIndex - value < 1) {
753
+ return 'partial';
754
+ }
755
+ return 'empty';
756
+ };
757
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", { key: `rating-${index}`, "data-fs-rating-item": fillCheck(), "data-testid": `${testId}-item` }, onChange ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(___WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z, { "data-fs-rating-button": true, icon: ratingIcon, size: "small", "aria-label": "rate", onClick: () => {
758
+ onChange(tempIndex);
759
+ }, onMouseEnter: () => setHover(tempIndex), onMouseLeave: () => setHover(value) })) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null,
760
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { "data-fs-rating-icon-wrapper": true }, ratingIcon),
761
+ react__WEBPACK_IMPORTED_MODULE_0___default().isValidElement(icon) ? (react__WEBPACK_IMPORTED_MODULE_0___default().cloneElement(icon, outlineProps)) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(___WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, { name: "Star", "data-fs-rating-icon-outline": true }))))));
762
+ })));
763
+ });
764
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Rating);
765
+ //# sourceMappingURL=Rating.js.map
766
+
767
+ /***/ }),
768
+
634
769
  /***/ 6396:
635
770
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
636
771
 
@@ -688,6 +823,24 @@ function SearchProvider({ onSearchSelection, children, term, terms, products, is
688
823
 
689
824
  /***/ }),
690
825
 
826
+ /***/ 6737:
827
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
828
+
829
+ "use strict";
830
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
831
+ /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
832
+ /* harmony export */ });
833
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6689);
834
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
835
+
836
+ const ProductShelf = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function ProductShelf({ testId = 'fs-product-shelf', children, ...otherProps }, ref) {
837
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { ref: ref, "data-fs-product-shelf": true, "data-fs-content": "product-shelf", "data-testid": testId, ...otherProps }, children));
838
+ });
839
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ProductShelf);
840
+ //# sourceMappingURL=ProductShelf.js.map
841
+
842
+ /***/ }),
843
+
691
844
  /***/ 7683:
692
845
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
693
846
 
@@ -855,14 +1008,14 @@ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __we
855
1008
  /* harmony import */ var src_server_cms__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(9497);
856
1009
  /* harmony import */ var src_components_common_Toast__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(3746);
857
1010
  /* harmony import */ var _RenderSections__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(2224);
858
- /* harmony import */ var src_components_sections_Alert_OverriddenDefaultAlert__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2773);
1011
+ /* harmony import */ var src_components_sections_Alert_OverriddenDefaultAlert__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1605);
859
1012
  /* harmony import */ var src_components_sections_Footer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(11);
860
1013
  /* harmony import */ var src_components_sections_Navbar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6696);
861
1014
  /* harmony import */ var src_components_sections_RegionBar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3830);
862
1015
  /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(997);
863
1016
  /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__);
864
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([src_components_sections_Navbar__WEBPACK_IMPORTED_MODULE_3__, _RenderSections__WEBPACK_IMPORTED_MODULE_7__]);
865
- ([src_components_sections_Navbar__WEBPACK_IMPORTED_MODULE_3__, _RenderSections__WEBPACK_IMPORTED_MODULE_7__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
1017
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([src_components_sections_Alert_OverriddenDefaultAlert__WEBPACK_IMPORTED_MODULE_2__, src_components_sections_Navbar__WEBPACK_IMPORTED_MODULE_3__, _RenderSections__WEBPACK_IMPORTED_MODULE_7__]);
1018
+ ([src_components_sections_Alert_OverriddenDefaultAlert__WEBPACK_IMPORTED_MODULE_2__, src_components_sections_Navbar__WEBPACK_IMPORTED_MODULE_3__, _RenderSections__WEBPACK_IMPORTED_MODULE_7__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
866
1019
  const _excluded = ["children"];
867
1020
 
868
1021
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
@@ -887,7 +1040,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
887
1040
 
888
1041
 
889
1042
  const RegionModal = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.lazy)(() => Promise.all(/* import() */[__webpack_require__.e(779), __webpack_require__.e(988)]).then(__webpack_require__.bind(__webpack_require__, 5988)));
890
- const CartSidebar = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.lazy)(() => Promise.all(/* import() */[__webpack_require__.e(53), __webpack_require__.e(693), __webpack_require__.e(585)]).then(__webpack_require__.bind(__webpack_require__, 6585)));
1043
+ const CartSidebar = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.lazy)(() => Promise.all(/* import() */[__webpack_require__.e(693), __webpack_require__.e(585)]).then(__webpack_require__.bind(__webpack_require__, 6585)));
891
1044
  const GLOBAL_SECTIONS_CONTENT_TYPE = 'globalSections';
892
1045
 
893
1046
  /* A list of components that can be used in the CMS. */
@@ -1609,6 +1762,187 @@ function NavbarSlider({
1609
1762
 
1610
1763
  /***/ }),
1611
1764
 
1765
+ /***/ 8553:
1766
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1767
+
1768
+ "use strict";
1769
+
1770
+ // EXPORTS
1771
+ __webpack_require__.d(__webpack_exports__, {
1772
+ "Z": () => (/* binding */ product_ProductCard_ProductCard)
1773
+ });
1774
+
1775
+ // UNUSED EXPORTS: fragment
1776
+
1777
+ // EXTERNAL MODULE: external "react"
1778
+ var external_react_ = __webpack_require__(6689);
1779
+ var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_);
1780
+ ;// CONCATENATED MODULE: ../components/dist/esm/molecules/ProductCard/ProductCard.js
1781
+
1782
+ const ProductCard = (0,external_react_.forwardRef)(function ProductCard({ testId = 'fs-product-card', variant = 'default', bordered = false, outOfStock, children, ...otherProps }, ref) {
1783
+ return (external_react_default().createElement("article", { ref: ref, "data-fs-product-card": outOfStock ? 'out-of-stock' : '', "data-fs-product-card-variant": variant, "data-fs-product-card-bordered": bordered, "data-testid": testId, ...otherProps }, children));
1784
+ });
1785
+ /* harmony default export */ const ProductCard_ProductCard = (ProductCard);
1786
+ //# sourceMappingURL=ProductCard.js.map
1787
+ ;// CONCATENATED MODULE: ../components/dist/esm/molecules/ProductCard/ProductCardImage.js
1788
+
1789
+ const ProductCardImage = (0,external_react_.forwardRef)(function ProductCardImage({ testId = 'fs-product-card-image', aspectRatio = 1, children, ...otherProps }, ref) {
1790
+ return (external_react_default().createElement("div", { ref: ref, "data-fs-product-card-image": true, "data-testid": testId, style: {
1791
+ '--fs-product-card-image-aspect-ratio': aspectRatio
1792
+ }, ...otherProps }, children));
1793
+ });
1794
+ /* harmony default export */ const ProductCard_ProductCardImage = (ProductCardImage);
1795
+ //# sourceMappingURL=ProductCardImage.js.map
1796
+ // EXTERNAL MODULE: ../components/dist/esm/atoms/Link/Link.js
1797
+ var Link = __webpack_require__(727);
1798
+ // EXTERNAL MODULE: ../components/dist/esm/atoms/Price/Price.js
1799
+ var Price = __webpack_require__(9767);
1800
+ // EXTERNAL MODULE: ../components/dist/esm/molecules/Rating/Rating.js
1801
+ var Rating = __webpack_require__(3024);
1802
+ // EXTERNAL MODULE: ../components/dist/esm/atoms/Icon/Icon.js
1803
+ var Icon = __webpack_require__(2614);
1804
+ // EXTERNAL MODULE: ../components/dist/esm/molecules/DiscountBadge/DiscountBadge.js + 1 modules
1805
+ var DiscountBadge = __webpack_require__(2946);
1806
+ // EXTERNAL MODULE: ../components/dist/esm/atoms/Badge/Badge.js
1807
+ var Badge = __webpack_require__(276);
1808
+ // EXTERNAL MODULE: ../components/dist/esm/atoms/Button/Button.js
1809
+ var Button = __webpack_require__(3339);
1810
+ ;// CONCATENATED MODULE: ../components/dist/esm/molecules/ProductCard/ProductCardContent.js
1811
+
1812
+
1813
+ const ProductCardContent = (0,external_react_.forwardRef)(function CardContent({ testId = 'fs-product-card-content', title, linkProps, price, outOfStock, outOfStockLabel = 'Out of stock', ratingValue, showDiscountBadge, buttonLabel = 'Add', onButtonClick, children, ...otherProps }, ref) {
1814
+ const listPrice = price?.listPrice ?? 0;
1815
+ const sellingPrice = price?.value ?? 0;
1816
+ return (external_react_default().createElement("section", { ref: ref, "data-fs-product-card-content": true, "data-fs-product-card-badge": showDiscountBadge, "data-testid": testId, ...otherProps },
1817
+ external_react_default().createElement("div", { "data-fs-product-card-heading": true },
1818
+ external_react_default().createElement("h3", { "data-fs-product-card-title": true },
1819
+ external_react_default().createElement(Link/* default */.Z, { ...linkProps, title: title },
1820
+ external_react_default().createElement("span", null, title))),
1821
+ !outOfStock && (external_react_default().createElement("div", { "data-fs-product-card-prices": true }, sellingPrice !== listPrice
1822
+ ? (external_react_default().createElement((external_react_default()).Fragment, null,
1823
+ external_react_default().createElement(Price/* default */.Z, { value: listPrice, formatter: price?.formatter, testId: "list-price", "data-value": listPrice, variant: "listing", SRText: "Original price:" }),
1824
+ external_react_default().createElement(Price/* default */.Z, { value: sellingPrice, formatter: price?.formatter, testId: "price", "data-value": sellingPrice, variant: "spot", SRText: "Sale Price:" })))
1825
+ : (external_react_default().createElement(Price/* default */.Z, { value: sellingPrice, formatter: price?.formatter, testId: "price", "data-value": sellingPrice, variant: "spot", SRText: "Sale Price:" })))),
1826
+ ratingValue && (external_react_default().createElement(Rating/* default */.Z, { value: ratingValue, icon: external_react_default().createElement(Icon/* default */.Z, { name: "Star" }) }))),
1827
+ showDiscountBadge && !outOfStock && (external_react_default().createElement(DiscountBadge/* default */.Z, { listPrice: price?.listPrice ? price.listPrice : 0, spotPrice: price?.value ? price.value : 0 })),
1828
+ outOfStock && external_react_default().createElement(Badge/* default */.Z, null, outOfStockLabel),
1829
+ onButtonClick && !outOfStock && (external_react_default().createElement("div", { "data-fs-product-card-actions": true },
1830
+ external_react_default().createElement(Button/* default */.Z, { variant: "primary", icon: external_react_default().createElement(Icon/* default */.Z, { name: "ShoppingCart" }), iconPosition: "left", size: "small", onClick: onButtonClick }, buttonLabel)))));
1831
+ });
1832
+ /* harmony default export */ const ProductCard_ProductCardContent = (ProductCardContent);
1833
+ //# sourceMappingURL=ProductCardContent.js.map
1834
+ // EXTERNAL MODULE: ./node_modules/next/link.js
1835
+ var next_link = __webpack_require__(1664);
1836
+ var link_default = /*#__PURE__*/__webpack_require__.n(next_link);
1837
+ // EXTERNAL MODULE: ./src/components/ui/Image/Image.tsx + 1 modules
1838
+ var Image = __webpack_require__(5731);
1839
+ // EXTERNAL MODULE: ./src/sdk/product/useFormattedPrice.ts
1840
+ var useFormattedPrice = __webpack_require__(5346);
1841
+ // EXTERNAL MODULE: ./src/sdk/product/useProductLink.ts
1842
+ var useProductLink = __webpack_require__(9854);
1843
+ // EXTERNAL MODULE: external "react/jsx-runtime"
1844
+ var jsx_runtime_ = __webpack_require__(997);
1845
+ ;// CONCATENATED MODULE: ./src/components/product/ProductCard/ProductCard.tsx
1846
+ const _excluded = ["product", "index", "bordered", "variant", "aspectRatio", "imgProps", "ratingValue", "buttonLabel", "onButtonClick", "showDiscountBadge"];
1847
+
1848
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1849
+
1850
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1851
+
1852
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1853
+
1854
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
1855
+
1856
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
1857
+
1858
+
1859
+
1860
+
1861
+
1862
+
1863
+
1864
+
1865
+
1866
+
1867
+ function ProductCard_ProductCard_ProductCard(_ref) {
1868
+ let {
1869
+ product,
1870
+ index,
1871
+ bordered = true,
1872
+ variant = 'default',
1873
+ aspectRatio = 1,
1874
+ imgProps,
1875
+ ratingValue,
1876
+ buttonLabel = 'Add',
1877
+ onButtonClick,
1878
+ showDiscountBadge = true
1879
+ } = _ref,
1880
+ otherProps = _objectWithoutProperties(_ref, _excluded);
1881
+
1882
+ const {
1883
+ sku,
1884
+ isVariantOf: {
1885
+ name
1886
+ },
1887
+ image: [img],
1888
+ offers: {
1889
+ lowPrice: spotPrice,
1890
+ offers: [{
1891
+ listPrice,
1892
+ availability
1893
+ }]
1894
+ }
1895
+ } = product;
1896
+
1897
+ const linkProps = _objectSpread(_objectSpread({}, (0,useProductLink/* useProductLink */.w)({
1898
+ product,
1899
+ selectedOffer: 0,
1900
+ index
1901
+ })), {}, {
1902
+ as: (link_default()),
1903
+ passHref: true,
1904
+ legacyBehavior: false,
1905
+ prefetch: false
1906
+ });
1907
+
1908
+ const outOfStock = (0,external_react_.useMemo)(() => availability !== 'https://schema.org/InStock', [availability]);
1909
+ return /*#__PURE__*/(0,jsx_runtime_.jsxs)(ProductCard_ProductCard, _objectSpread(_objectSpread({
1910
+ outOfStock: outOfStock,
1911
+ bordered: bordered,
1912
+ variant: variant,
1913
+ "data-fs-product-card-sku": sku
1914
+ }, otherProps), {}, {
1915
+ children: [/*#__PURE__*/jsx_runtime_.jsx(ProductCard_ProductCardImage, {
1916
+ aspectRatio: aspectRatio,
1917
+ children: /*#__PURE__*/jsx_runtime_.jsx(Image/* default */.Z, {
1918
+ src: img.url,
1919
+ alt: img.alternateName,
1920
+ sizes: `${imgProps?.sizes ?? '(max-width: 768px) 40vw, 30vw'}`,
1921
+ width: imgProps?.width ?? 360,
1922
+ height: Math.round((Number(imgProps?.height) || 360) / aspectRatio),
1923
+ loading: imgProps?.loading
1924
+ })
1925
+ }), /*#__PURE__*/jsx_runtime_.jsx(ProductCard_ProductCardContent, {
1926
+ title: name,
1927
+ price: {
1928
+ value: spotPrice,
1929
+ listPrice: listPrice,
1930
+ formatter: useFormattedPrice/* useFormattedPrice */.P
1931
+ },
1932
+ ratingValue: ratingValue,
1933
+ outOfStock: outOfStock,
1934
+ onButtonClick: onButtonClick,
1935
+ linkProps: linkProps,
1936
+ showDiscountBadge: showDiscountBadge
1937
+ })]
1938
+ }));
1939
+ }
1940
+
1941
+ const fragment = "unknown";
1942
+ /* harmony default export */ const product_ProductCard_ProductCard = (/*#__PURE__*/(0,external_react_.memo)(ProductCard_ProductCard_ProductCard));
1943
+
1944
+ /***/ }),
1945
+
1612
1946
  /***/ 9471:
1613
1947
  /***/ ((module, __webpack_exports__, __webpack_require__) => {
1614
1948
 
@@ -1654,7 +1988,7 @@ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) r
1654
1988
 
1655
1989
 
1656
1990
 
1657
- const SearchDropdown = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.lazy)(() => Promise.all(/* import() */[__webpack_require__.e(53), __webpack_require__.e(854), __webpack_require__.e(312)]).then(__webpack_require__.bind(__webpack_require__, 4312)));
1991
+ const SearchDropdown = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.lazy)(() => __webpack_require__.e(/* import() */ 312).then(__webpack_require__.bind(__webpack_require__, 4312)));
1658
1992
  const MAX_SUGGESTIONS = 5;
1659
1993
 
1660
1994
  const sendAnalytics = async term => {
@@ -1751,95 +2085,429 @@ __webpack_async_result__();
1751
2085
 
1752
2086
  /***/ }),
1753
2087
 
1754
- /***/ 2773:
2088
+ /***/ 6893:
1755
2089
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1756
2090
 
1757
2091
  "use strict";
1758
2092
 
1759
2093
  // EXPORTS
1760
2094
  __webpack_require__.d(__webpack_exports__, {
1761
- "N": () => (/* binding */ OverriddenDefaultAlert)
2095
+ "Z": () => (/* binding */ sections_Alert_Alert)
1762
2096
  });
1763
2097
 
1764
- ;// CONCATENATED MODULE: ./src/customizations/src/components/overrides/Alert.tsx
1765
- // This is an example of how it can be used on the starter.
1766
- const SECTION = 'Alert';
1767
- const override = {
1768
- section: SECTION
1769
- };
2098
+ // EXTERNAL MODULE: external "react"
2099
+ var external_react_ = __webpack_require__(6689);
2100
+ // EXTERNAL MODULE: ./src/sdk/tests/mark.tsx
2101
+ var mark = __webpack_require__(2541);
2102
+ // EXTERNAL MODULE: ./src/components/sections/Section/Section.tsx
2103
+ var Section = __webpack_require__(3271);
2104
+ // EXTERNAL MODULE: ./src/components/common/Alert/section.module.scss
2105
+ var section_module = __webpack_require__(7651);
2106
+ var section_module_default = /*#__PURE__*/__webpack_require__.n(section_module);
2107
+ // EXTERNAL MODULE: ./src/sdk/overrides/OverrideContext.tsx
2108
+ var OverrideContext = __webpack_require__(5522);
2109
+ // EXTERNAL MODULE: external "react/jsx-runtime"
2110
+ var jsx_runtime_ = __webpack_require__(997);
2111
+ ;// CONCATENATED MODULE: ./src/components/common/Alert/Alert.tsx
2112
+ const _excluded = ["content", "children"];
1770
2113
 
1771
- // EXTERNAL MODULE: ./src/sdk/overrides/getOverriddenSection.tsx + 13 modules
1772
- var getOverriddenSection = __webpack_require__(170);
1773
- ;// CONCATENATED MODULE: ./src/components/sections/Alert/OverriddenDefaultAlert.ts
2114
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1774
2115
 
2116
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1775
2117
 
2118
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1776
2119
 
1777
- /**
1778
- * This component exists to support overrides 1.0
1779
- *
1780
- * This allows users to override the default Alert section present in the Headless CMS
1781
- */
1782
- const OverriddenDefaultAlert = (0,getOverriddenSection/* getOverriddenSection */.v)(override);
2120
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
1783
2121
 
1784
- /***/ }),
2122
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
1785
2123
 
1786
- /***/ 11:
1787
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1788
2124
 
1789
- "use strict";
1790
2125
 
1791
- // EXPORTS
1792
- __webpack_require__.d(__webpack_exports__, {
1793
- "Z": () => (/* binding */ sections_Footer_Footer)
1794
- });
1795
2126
 
1796
- // EXTERNAL MODULE: external "react"
1797
- var external_react_ = __webpack_require__(6689);
1798
- var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_);
1799
- // EXTERNAL MODULE: ../components/dist/esm/atoms/List/List.js
1800
- var List = __webpack_require__(4564);
1801
- // EXTERNAL MODULE: ../components/dist/esm/atoms/Icon/Icon.js
1802
- var Icon = __webpack_require__(2614);
1803
- // EXTERNAL MODULE: ../components/dist/esm/atoms/SROnly/SROnly.js
1804
- var SROnly = __webpack_require__(5450);
1805
- ;// CONCATENATED MODULE: ../components/dist/esm/organisms/PaymentMethods/PaymentMethods.js
1806
2127
 
1807
2128
 
1808
- const PaymentMethods = (0,external_react_.forwardRef)(function PaymentMethods({ testId = 'fs-payment-methods', title, 'aria-label': ariaLabel = 'Payment Methods', flagList, ...otherProps }, ref) {
1809
- return (external_react_default().createElement("div", { ref: ref, "data-fs-payment-methods": true, "data-testid": testId, ...otherProps },
1810
- !!title && external_react_default().createElement("div", { "data-fs-payment-methods-title": true }, title),
1811
- external_react_default().createElement(List/* default */.Z, { "data-fs-payment-methods-flags": true, "aria-label": title ? undefined : ariaLabel }, flagList.map(({ alt: text, icon: { icon } }, index) => (external_react_default().createElement("li", { "data-fs-payment-methods-flag": true, key: `fs-payment-method-${index}-${text}` },
1812
- external_react_default().createElement(Icon/* default */.Z, { width: 32, height: 22.5, name: icon }),
1813
- text && external_react_default().createElement(SROnly/* default */.Z, { text: text })))))));
1814
- });
1815
- /* harmony default export */ const PaymentMethods_PaymentMethods = (PaymentMethods);
1816
- //# sourceMappingURL=PaymentMethods.js.map
1817
- // EXTERNAL MODULE: ./src/components/sections/Section/Section.tsx
1818
- var Section = __webpack_require__(3271);
1819
- // EXTERNAL MODULE: ./src/sdk/tests/mark.tsx
1820
- var mark = __webpack_require__(2541);
1821
- // EXTERNAL MODULE: external "react/jsx-runtime"
1822
- var jsx_runtime_ = __webpack_require__(997);
1823
- ;// CONCATENATED MODULE: ./src/components/common/Footer/Footer.tsx
1824
2129
 
1825
2130
 
1826
- function FooterInfo({
1827
- children
1828
- }) {
1829
- return /*#__PURE__*/jsx_runtime_.jsx("div", {
1830
- "data-fs-footer-info": true,
1831
- children: children
1832
- });
1833
- }
1834
- function FooterNavigation({
1835
- children
1836
- }) {
1837
- return /*#__PURE__*/jsx_runtime_.jsx("div", {
1838
- "data-fs-footer-navigation": true,
1839
- children: children
2131
+ function Alert(_ref) {
2132
+ let {
2133
+ content,
2134
+ children
2135
+ } = _ref,
2136
+ otherProps = _objectWithoutProperties(_ref, _excluded);
2137
+
2138
+ const {
2139
+ Alert: AlertWrapper
2140
+ } = (0,OverrideContext/* useOverrideComponents */.r3)();
2141
+ const {
2142
+ 0: displayAlert,
2143
+ 1: setDisplayAlert
2144
+ } = (0,external_react_.useState)(true);
2145
+ const onAlertClose = (0,external_react_.useCallback)(() => setDisplayAlert(false), [setDisplayAlert]);
2146
+
2147
+ if (displayAlert === false) {
2148
+ return null;
2149
+ }
2150
+
2151
+ return /*#__PURE__*/jsx_runtime_.jsx(Section/* default */.Z, {
2152
+ className: `${(section_module_default()).section} section-alert`,
2153
+ children: /*#__PURE__*/jsx_runtime_.jsx(AlertWrapper.Component, _objectSpread(_objectSpread({}, otherProps), {}, {
2154
+ // Dynamic props, shouldn't be overridable
2155
+ // This decision can be reviewed later if needed
2156
+ onClose: onAlertClose,
2157
+ children: content ?? children
2158
+ }))
1840
2159
  });
1841
2160
  }
1842
- function Footer({
2161
+
2162
+ Alert.displayName = 'Alert';
2163
+ /* harmony default export */ const Alert_Alert = ((0,mark/* mark */.B)(Alert));
2164
+ ;// CONCATENATED MODULE: ./src/components/sections/Alert/Alert.tsx
2165
+ function Alert_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2166
+
2167
+ function Alert_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? Alert_ownKeys(Object(source), !0).forEach(function (key) { Alert_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : Alert_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
2168
+
2169
+ function Alert_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2170
+
2171
+
2172
+
2173
+
2174
+
2175
+ // TODO: Change actionPath and actionLabel with Link
2176
+ function Alert_Alert_Alert({
2177
+ icon,
2178
+ content,
2179
+ link: {
2180
+ text,
2181
+ to
2182
+ },
2183
+ dismissible
2184
+ }) {
2185
+ const {
2186
+ Alert: AlertWrapper,
2187
+ Icon
2188
+ } = (0,OverrideContext/* useOverrideComponents */.r3)();
2189
+ return /*#__PURE__*/jsx_runtime_.jsx(Alert_Alert, Alert_objectSpread(Alert_objectSpread({
2190
+ icon: /*#__PURE__*/jsx_runtime_.jsx(Icon.Component, Alert_objectSpread(Alert_objectSpread({}, Icon.props), {}, {
2191
+ name: icon ?? Icon.props.name
2192
+ }))
2193
+ }, AlertWrapper.props), {}, {
2194
+ link: Alert_objectSpread(Alert_objectSpread({}, AlertWrapper.props.link ?? {}), {}, {
2195
+ children: text ?? AlertWrapper.props.link?.children,
2196
+ href: to ?? AlertWrapper.props.link?.href,
2197
+ target: AlertWrapper.props.link?.target ?? '_self'
2198
+ }),
2199
+ dismissible: dismissible ?? AlertWrapper.props.dismissible,
2200
+ children: content
2201
+ }));
2202
+ }
2203
+
2204
+ /* harmony default export */ const sections_Alert_Alert = (Alert_Alert_Alert);
2205
+
2206
+ /***/ }),
2207
+
2208
+ /***/ 6948:
2209
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2210
+
2211
+ "use strict";
2212
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2213
+ /* harmony export */ "p": () => (/* binding */ AlertDefaultComponents)
2214
+ /* harmony export */ });
2215
+ /* harmony import */ var _faststore_ui__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8138);
2216
+ /* harmony import */ var _faststore_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2614);
2217
+
2218
+ const AlertDefaultComponents = {
2219
+ Alert: _faststore_ui__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z,
2220
+ Icon: _faststore_ui__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z
2221
+ };
2222
+
2223
+ /***/ }),
2224
+
2225
+ /***/ 1605:
2226
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
2227
+
2228
+ "use strict";
2229
+ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
2230
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2231
+ /* harmony export */ "N": () => (/* binding */ OverriddenDefaultAlert)
2232
+ /* harmony export */ });
2233
+ /* harmony import */ var src_customizations_src_components_overrides_Alert__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2463);
2234
+ /* harmony import */ var src_sdk_overrides_getOverriddenSection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8788);
2235
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([src_sdk_overrides_getOverriddenSection__WEBPACK_IMPORTED_MODULE_0__]);
2236
+ src_sdk_overrides_getOverriddenSection__WEBPACK_IMPORTED_MODULE_0__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
2237
+
2238
+
2239
+
2240
+ /**
2241
+ * This component exists to support overrides 1.0
2242
+ *
2243
+ * This allows users to override the default Alert section present in the Headless CMS
2244
+ */
2245
+ const OverriddenDefaultAlert = (0,src_sdk_overrides_getOverriddenSection__WEBPACK_IMPORTED_MODULE_0__/* .getOverriddenSection */ .v)(src_customizations_src_components_overrides_Alert__WEBPACK_IMPORTED_MODULE_1__/* .override */ .K);
2246
+ __webpack_async_result__();
2247
+ } catch(e) { __webpack_async_result__(e); } });
2248
+
2249
+ /***/ }),
2250
+
2251
+ /***/ 9315:
2252
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2253
+
2254
+ "use strict";
2255
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2256
+ /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
2257
+ /* harmony export */ });
2258
+ /* harmony import */ var src_sdk_overrides_OverrideContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5522);
2259
+ /* harmony import */ var _Section__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3271);
2260
+ /* harmony import */ var _section_module_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7283);
2261
+ /* harmony import */ var _section_module_scss__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_section_module_scss__WEBPACK_IMPORTED_MODULE_3__);
2262
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(997);
2263
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
2264
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2265
+
2266
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
2267
+
2268
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2269
+
2270
+
2271
+
2272
+
2273
+
2274
+
2275
+ // TODO: Change actionPath and actionLabel with Link
2276
+ function BannerText({
2277
+ title,
2278
+ caption,
2279
+ link: {
2280
+ url: linkUrl,
2281
+ text: linkText,
2282
+ linkTargetBlank
2283
+ },
2284
+ variant,
2285
+ colorVariant
2286
+ }) {
2287
+ const {
2288
+ BannerText: BannerTextWrapper,
2289
+ BannerTextContent
2290
+ } = (0,src_sdk_overrides_OverrideContext__WEBPACK_IMPORTED_MODULE_1__/* .useOverrideComponents */ .r3)();
2291
+ return /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_Section__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z, {
2292
+ className: `${(_section_module_scss__WEBPACK_IMPORTED_MODULE_3___default().section)} section-banner layout__section`,
2293
+ children: /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
2294
+ className: "layout__content",
2295
+ children: /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(BannerTextWrapper.Component, _objectSpread(_objectSpread({}, BannerTextWrapper.props), {}, {
2296
+ variant: variant ?? BannerTextWrapper.props.variant ?? 'primary',
2297
+ colorVariant: colorVariant ?? BannerTextWrapper.props.colorVariant ?? 'main',
2298
+ children: /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(BannerTextContent.Component, _objectSpread(_objectSpread({}, BannerTextContent.props), {}, {
2299
+ title: title,
2300
+ caption: caption,
2301
+ link: linkUrl ?? BannerTextContent.props.link,
2302
+ linkText: linkText ?? BannerTextContent.props.linkText,
2303
+ linkTargetBlank: linkTargetBlank ?? BannerTextContent.props.linkTargetBlank
2304
+ }))
2305
+ }))
2306
+ })
2307
+ });
2308
+ }
2309
+
2310
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BannerText);
2311
+
2312
+ /***/ }),
2313
+
2314
+ /***/ 719:
2315
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2316
+
2317
+ "use strict";
2318
+
2319
+ // EXPORTS
2320
+ __webpack_require__.d(__webpack_exports__, {
2321
+ "b": () => (/* binding */ BannerTextDefaultComponents)
2322
+ });
2323
+
2324
+ // EXTERNAL MODULE: external "react"
2325
+ var external_react_ = __webpack_require__(6689);
2326
+ var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_);
2327
+ ;// CONCATENATED MODULE: ../components/dist/esm/organisms/BannerText/BannerText.js
2328
+
2329
+ const BannerTextContext = (0,external_react_.createContext)(undefined);
2330
+ const BannerText = (0,external_react_.forwardRef)(function BannerText({ children, testId = 'fs-banner-text', variant = 'primary', colorVariant = 'main', ...otherProps }, ref) {
2331
+ const context = { variant, colorVariant };
2332
+ return (external_react_default().createElement(BannerTextContext.Provider, { value: context },
2333
+ external_react_default().createElement("article", { ref: ref, "data-fs-banner-text": true, "data-fs-banner-text-variant": variant, "data-fs-banner-text-color-variant": colorVariant, "data-testid": testId, ...otherProps }, children)));
2334
+ });
2335
+ function useBannerText() {
2336
+ const context = (0,external_react_.useContext)(BannerTextContext);
2337
+ if (context === undefined) {
2338
+ throw new Error('Do not use BannerText components outside the BannerText context.');
2339
+ }
2340
+ return context;
2341
+ }
2342
+ /* harmony default export */ const BannerText_BannerText = (BannerText);
2343
+ //# sourceMappingURL=BannerText.js.map
2344
+ // EXTERNAL MODULE: ../components/dist/esm/molecules/LinkButton/LinkButton.js
2345
+ var LinkButton = __webpack_require__(3922);
2346
+ ;// CONCATENATED MODULE: ../components/dist/esm/organisms/BannerText/BannerTextContent.js
2347
+
2348
+
2349
+
2350
+ const BannerTextContent = (0,external_react_.forwardRef)(function BannerTextContent({ testId = 'fs-banner-text-content', title, caption, link, linkText, linkTargetBlank, ...otherProps }, ref) {
2351
+ const { variant, colorVariant } = useBannerText();
2352
+ return (external_react_default().createElement("header", { ref: ref, "data-fs-banner-text-content": true, "data-fs-content": "banner-text", "data-testid": testId, ...otherProps },
2353
+ external_react_default().createElement("div", { "data-fs-banner-text-heading": true, "data-fs-banner-text-color-variant": colorVariant },
2354
+ external_react_default().createElement("h2", null, title),
2355
+ variant === 'secondary' && caption && external_react_default().createElement("p", null, caption)),
2356
+ external_react_default().createElement(LinkButton/* default */.Z, { "data-fs-banner-text-link": true, href: link, variant: variant, inverse: colorVariant === 'main', "aria-label": linkText, target: linkTargetBlank ? '_blank' : undefined }, linkText)));
2357
+ });
2358
+ /* harmony default export */ const BannerText_BannerTextContent = (BannerTextContent);
2359
+ //# sourceMappingURL=BannerTextContent.js.map
2360
+ ;// CONCATENATED MODULE: ./src/components/sections/BannerText/DefaultComponents.ts
2361
+
2362
+ const BannerTextDefaultComponents = {
2363
+ BannerText: BannerText_BannerText,
2364
+ BannerTextContent: BannerText_BannerTextContent
2365
+ };
2366
+
2367
+ /***/ }),
2368
+
2369
+ /***/ 994:
2370
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
2371
+
2372
+ "use strict";
2373
+ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
2374
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2375
+ /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
2376
+ /* harmony export */ });
2377
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6689);
2378
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
2379
+ /* harmony import */ var src_components_ui_ProductShelf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7691);
2380
+ /* harmony import */ var react_intersection_observer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9785);
2381
+ /* harmony import */ var react_intersection_observer__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intersection_observer__WEBPACK_IMPORTED_MODULE_1__);
2382
+ /* harmony import */ var src_sdk_overrides_PageProvider__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5953);
2383
+ /* harmony import */ var _ProductShelf_section_module_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6627);
2384
+ /* harmony import */ var _ProductShelf_section_module_scss__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_ProductShelf_section_module_scss__WEBPACK_IMPORTED_MODULE_5__);
2385
+ /* harmony import */ var _Section__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3271);
2386
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(997);
2387
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__);
2388
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([src_components_ui_ProductShelf__WEBPACK_IMPORTED_MODULE_6__]);
2389
+ src_components_ui_ProductShelf__WEBPACK_IMPORTED_MODULE_6__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
2390
+
2391
+
2392
+
2393
+
2394
+
2395
+
2396
+
2397
+
2398
+ const CrossSellingShelf = ({
2399
+ numberOfItems,
2400
+ itemsPerPage,
2401
+ title,
2402
+ kind
2403
+ }) => {
2404
+ const {
2405
+ ref,
2406
+ inView
2407
+ } = (0,react_intersection_observer__WEBPACK_IMPORTED_MODULE_1__.useInView)();
2408
+ const context = (0,src_sdk_overrides_PageProvider__WEBPACK_IMPORTED_MODULE_3__/* .usePDP */ .al)();
2409
+ const productGroupID = context?.data?.product?.isVariantOf?.productGroupID;
2410
+ const selectedFacets = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => [{
2411
+ key: kind,
2412
+ value: productGroupID
2413
+ }], [kind, productGroupID]);
2414
+ return /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx(_Section__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z, {
2415
+ className: `${(_ProductShelf_section_module_scss__WEBPACK_IMPORTED_MODULE_5___default().section)} section-product-shelf layout__section`,
2416
+ ref: ref,
2417
+ children: /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx(src_components_ui_ProductShelf__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z, {
2418
+ inView: inView,
2419
+ numberOfItems: numberOfItems,
2420
+ itemsPerPage: itemsPerPage,
2421
+ title: title,
2422
+ selectedFacets: selectedFacets
2423
+ })
2424
+ });
2425
+ };
2426
+
2427
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CrossSellingShelf);
2428
+ __webpack_async_result__();
2429
+ } catch(e) { __webpack_async_result__(e); } });
2430
+
2431
+ /***/ }),
2432
+
2433
+ /***/ 8435:
2434
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2435
+
2436
+ "use strict";
2437
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2438
+ /* harmony export */ "q": () => (/* binding */ CrossSellingShelfDefaultComponents)
2439
+ /* harmony export */ });
2440
+ /* harmony import */ var _faststore_ui__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6737);
2441
+ /* harmony import */ var src_components_product_ProductCard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8553);
2442
+ /* harmony import */ var src_components_ui_Carousel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8619);
2443
+
2444
+
2445
+
2446
+ const CrossSellingShelfDefaultComponents = {
2447
+ ProductShelf: _faststore_ui__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z,
2448
+ __experimentalCarousel: src_components_ui_Carousel__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z,
2449
+ __experimentalProductCard: src_components_product_ProductCard__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z
2450
+ };
2451
+
2452
+ /***/ }),
2453
+
2454
+ /***/ 11:
2455
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2456
+
2457
+ "use strict";
2458
+
2459
+ // EXPORTS
2460
+ __webpack_require__.d(__webpack_exports__, {
2461
+ "Z": () => (/* binding */ sections_Footer_Footer)
2462
+ });
2463
+
2464
+ // EXTERNAL MODULE: external "react"
2465
+ var external_react_ = __webpack_require__(6689);
2466
+ var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_);
2467
+ // EXTERNAL MODULE: ../components/dist/esm/atoms/List/List.js
2468
+ var List = __webpack_require__(4564);
2469
+ // EXTERNAL MODULE: ../components/dist/esm/atoms/Icon/Icon.js
2470
+ var Icon = __webpack_require__(2614);
2471
+ // EXTERNAL MODULE: ../components/dist/esm/atoms/SROnly/SROnly.js
2472
+ var SROnly = __webpack_require__(5450);
2473
+ ;// CONCATENATED MODULE: ../components/dist/esm/organisms/PaymentMethods/PaymentMethods.js
2474
+
2475
+
2476
+ const PaymentMethods = (0,external_react_.forwardRef)(function PaymentMethods({ testId = 'fs-payment-methods', title, 'aria-label': ariaLabel = 'Payment Methods', flagList, ...otherProps }, ref) {
2477
+ return (external_react_default().createElement("div", { ref: ref, "data-fs-payment-methods": true, "data-testid": testId, ...otherProps },
2478
+ !!title && external_react_default().createElement("div", { "data-fs-payment-methods-title": true }, title),
2479
+ external_react_default().createElement(List/* default */.Z, { "data-fs-payment-methods-flags": true, "aria-label": title ? undefined : ariaLabel }, flagList.map(({ alt: text, icon: { icon } }, index) => (external_react_default().createElement("li", { "data-fs-payment-methods-flag": true, key: `fs-payment-method-${index}-${text}` },
2480
+ external_react_default().createElement(Icon/* default */.Z, { width: 32, height: 22.5, name: icon }),
2481
+ text && external_react_default().createElement(SROnly/* default */.Z, { text: text })))))));
2482
+ });
2483
+ /* harmony default export */ const PaymentMethods_PaymentMethods = (PaymentMethods);
2484
+ //# sourceMappingURL=PaymentMethods.js.map
2485
+ // EXTERNAL MODULE: ./src/components/sections/Section/Section.tsx
2486
+ var Section = __webpack_require__(3271);
2487
+ // EXTERNAL MODULE: ./src/sdk/tests/mark.tsx
2488
+ var mark = __webpack_require__(2541);
2489
+ // EXTERNAL MODULE: external "react/jsx-runtime"
2490
+ var jsx_runtime_ = __webpack_require__(997);
2491
+ ;// CONCATENATED MODULE: ./src/components/common/Footer/Footer.tsx
2492
+
2493
+
2494
+ function FooterInfo({
2495
+ children
2496
+ }) {
2497
+ return /*#__PURE__*/jsx_runtime_.jsx("div", {
2498
+ "data-fs-footer-info": true,
2499
+ children: children
2500
+ });
2501
+ }
2502
+ function FooterNavigation({
2503
+ children
2504
+ }) {
2505
+ return /*#__PURE__*/jsx_runtime_.jsx("div", {
2506
+ "data-fs-footer-navigation": true,
2507
+ children: children
2508
+ });
2509
+ }
2510
+ function Footer({
1843
2511
  children
1844
2512
  }) {
1845
2513
  return /*#__PURE__*/jsx_runtime_.jsx("footer", {
@@ -2060,7 +2728,145 @@ const Footer_Footer_Footer = ({
2060
2728
  });
2061
2729
  };
2062
2730
 
2063
- /* harmony default export */ const sections_Footer_Footer = (Footer_Footer_Footer);
2731
+ /* harmony default export */ const sections_Footer_Footer = (Footer_Footer_Footer);
2732
+
2733
+ /***/ }),
2734
+
2735
+ /***/ 9569:
2736
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2737
+
2738
+ "use strict";
2739
+
2740
+ // EXPORTS
2741
+ __webpack_require__.d(__webpack_exports__, {
2742
+ "O": () => (/* binding */ HeroDefaultComponents)
2743
+ });
2744
+
2745
+ // EXTERNAL MODULE: external "react"
2746
+ var external_react_ = __webpack_require__(6689);
2747
+ var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_);
2748
+ ;// CONCATENATED MODULE: ../components/dist/esm/organisms/Hero/Hero.js
2749
+
2750
+ const HeroContext = (0,external_react_.createContext)(undefined);
2751
+ const Hero = (0,external_react_.forwardRef)(function Hero({ children, testId = 'fs-hero', variant = 'primary', colorVariant = 'main', ...otherProps }, ref) {
2752
+ const context = { variant, colorVariant };
2753
+ return (external_react_default().createElement(HeroContext.Provider, { value: context },
2754
+ external_react_default().createElement("article", { ref: ref, "data-fs-hero": true, "data-fs-hero-variant": variant, "data-fs-hero-color-variant": colorVariant, "data-testid": testId, ...otherProps }, children)));
2755
+ });
2756
+ function useHero() {
2757
+ const context = (0,external_react_.useContext)(HeroContext);
2758
+ if (context === undefined) {
2759
+ throw new Error('Do not use Hero components outside the Hero context.');
2760
+ }
2761
+ return context;
2762
+ }
2763
+ /* harmony default export */ const Hero_Hero = (Hero);
2764
+ //# sourceMappingURL=Hero.js.map
2765
+ ;// CONCATENATED MODULE: ../components/dist/esm/organisms/Hero/HeroImage.js
2766
+
2767
+ const HeroImage = (0,external_react_.forwardRef)(function HeroImage({ children, testId = 'fs-hero-image', ...otherProps }, ref) {
2768
+ return (external_react_default().createElement("div", { ref: ref, "data-fs-hero-image": true, "data-testid": testId, ...otherProps }, children));
2769
+ });
2770
+ /* harmony default export */ const Hero_HeroImage = (HeroImage);
2771
+ //# sourceMappingURL=HeroImage.js.map
2772
+ // EXTERNAL MODULE: ../components/dist/esm/molecules/LinkButton/LinkButton.js
2773
+ var LinkButton = __webpack_require__(3922);
2774
+ // EXTERNAL MODULE: ../components/dist/esm/atoms/Icon/Icon.js
2775
+ var Icon = __webpack_require__(2614);
2776
+ ;// CONCATENATED MODULE: ../components/dist/esm/organisms/Hero/HeroHeader.js
2777
+
2778
+
2779
+
2780
+ const HeroHeader = (0,external_react_.forwardRef)(function HeroHeader({ icon, link, title, linkText, linkTargetBlank, subtitle, children, testId = 'fs-hero-heading', ...otherProps }, ref) {
2781
+ const { variant, colorVariant } = useHero();
2782
+ return (external_react_default().createElement("header", { ref: ref, "data-fs-hero-heading": true, "data-testid": testId, ...otherProps },
2783
+ external_react_default().createElement("div", { "data-fs-hero-wrapper": true, "data-fs-content": "hero" },
2784
+ external_react_default().createElement("div", { "data-fs-hero-info": true },
2785
+ external_react_default().createElement("h1", { "data-fs-hero-title": true }, title),
2786
+ external_react_default().createElement("p", { "data-fs-hero-subtitle": true }, subtitle),
2787
+ !!link && (external_react_default().createElement(LinkButton/* default */.Z, { href: link, inverse: colorVariant === 'main', icon: external_react_default().createElement(Icon/* default */.Z, { name: "ArrowRight" }), iconPosition: "right", target: linkTargetBlank ? '_blank' : undefined }, linkText))),
2788
+ !!icon && variant === 'secondary' && (external_react_default().createElement("span", { "data-fs-hero-icon": true }, icon)))));
2789
+ });
2790
+ /* harmony default export */ const Hero_HeroHeader = (HeroHeader);
2791
+ //# sourceMappingURL=HeroHeader.js.map
2792
+ ;// CONCATENATED MODULE: ./src/components/sections/Hero/DefaultComponents.ts
2793
+
2794
+ const HeroDefaultComponents = {
2795
+ Hero: Hero_Hero,
2796
+ HeroImage: Hero_HeroImage,
2797
+ HeroHeader: Hero_HeroHeader
2798
+ };
2799
+
2800
+ /***/ }),
2801
+
2802
+ /***/ 2849:
2803
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2804
+
2805
+ "use strict";
2806
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2807
+ /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
2808
+ /* harmony export */ });
2809
+ /* harmony import */ var src_components_ui_Image__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(5731);
2810
+ /* harmony import */ var src_sdk_overrides_OverrideContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5522);
2811
+ /* harmony import */ var _Section__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3271);
2812
+ /* harmony import */ var _section_module_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6717);
2813
+ /* harmony import */ var _section_module_scss__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_section_module_scss__WEBPACK_IMPORTED_MODULE_3__);
2814
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(997);
2815
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
2816
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2817
+
2818
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
2819
+
2820
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2821
+
2822
+
2823
+
2824
+
2825
+
2826
+
2827
+
2828
+
2829
+ const Hero = ({
2830
+ link,
2831
+ title,
2832
+ subtitle,
2833
+ image,
2834
+ variant,
2835
+ colorVariant,
2836
+ icon
2837
+ }) => {
2838
+ const {
2839
+ Hero: HeroWrapper,
2840
+ HeroImage,
2841
+ HeroHeader
2842
+ } = (0,src_sdk_overrides_OverrideContext__WEBPACK_IMPORTED_MODULE_1__/* .useOverrideComponents */ .r3)();
2843
+ return /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_Section__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z, {
2844
+ className: `${(_section_module_scss__WEBPACK_IMPORTED_MODULE_3___default().section)} section-hero`,
2845
+ children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(HeroWrapper.Component, _objectSpread(_objectSpread({}, HeroWrapper.props), {}, {
2846
+ variant: variant ?? HeroWrapper.props.variant ?? 'primary',
2847
+ colorVariant: colorVariant ?? HeroWrapper.props.colorVariant ?? 'main',
2848
+ children: [/*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(HeroImage.Component, _objectSpread(_objectSpread({}, HeroImage.props), {}, {
2849
+ children: /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(src_components_ui_Image__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z, {
2850
+ loading: "eager",
2851
+ src: image.src,
2852
+ alt: image.alt,
2853
+ width: 360,
2854
+ height: 240,
2855
+ sizes: "(max-width: 360px) 50vw, (max-width: 768px) 90vw, 50vw"
2856
+ })
2857
+ })), /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(HeroHeader.Component, _objectSpread({
2858
+ title: title,
2859
+ subtitle: subtitle,
2860
+ link: link?.url,
2861
+ linkText: link?.text,
2862
+ linkTargetBlank: link?.linkTargetBlank,
2863
+ icon: icon
2864
+ }, HeroHeader.props))]
2865
+ }))
2866
+ });
2867
+ };
2868
+
2869
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Hero);
2064
2870
 
2065
2871
  /***/ }),
2066
2872
 
@@ -2274,6 +3080,78 @@ const {
2274
3080
  }, override);
2275
3081
 
2276
3082
 
3083
+ /***/ }),
3084
+
3085
+ /***/ 2432:
3086
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3087
+
3088
+ "use strict";
3089
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3090
+ /* harmony export */ "B": () => (/* binding */ ProductShelfDefaultComponents)
3091
+ /* harmony export */ });
3092
+ /* harmony import */ var _faststore_ui__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6737);
3093
+ /* harmony import */ var src_components_product_ProductCard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8553);
3094
+ /* harmony import */ var src_components_ui_Carousel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8619);
3095
+
3096
+
3097
+
3098
+ const ProductShelfDefaultComponents = {
3099
+ ProductShelf: _faststore_ui__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z,
3100
+ __experimentalCarousel: src_components_ui_Carousel__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z,
3101
+ __experimentalProductCard: src_components_product_ProductCard__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z
3102
+ };
3103
+
3104
+ /***/ }),
3105
+
3106
+ /***/ 8569:
3107
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
3108
+
3109
+ "use strict";
3110
+ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
3111
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3112
+ /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
3113
+ /* harmony export */ });
3114
+ /* harmony import */ var react_intersection_observer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9785);
3115
+ /* harmony import */ var react_intersection_observer__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_intersection_observer__WEBPACK_IMPORTED_MODULE_0__);
3116
+ /* harmony import */ var _Section__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3271);
3117
+ /* harmony import */ var src_components_ui_ProductShelf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7691);
3118
+ /* harmony import */ var _section_module_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6627);
3119
+ /* harmony import */ var _section_module_scss__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_section_module_scss__WEBPACK_IMPORTED_MODULE_3__);
3120
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(997);
3121
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__);
3122
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([src_components_ui_ProductShelf__WEBPACK_IMPORTED_MODULE_4__]);
3123
+ src_components_ui_ProductShelf__WEBPACK_IMPORTED_MODULE_4__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
3124
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3125
+
3126
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3127
+
3128
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3129
+
3130
+
3131
+
3132
+
3133
+
3134
+
3135
+
3136
+ function ProductShelfSection(_ref) {
3137
+ let otherProps = Object.assign({}, _ref);
3138
+ const {
3139
+ ref,
3140
+ inView
3141
+ } = (0,react_intersection_observer__WEBPACK_IMPORTED_MODULE_0__.useInView)();
3142
+ return /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx(_Section__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z, {
3143
+ className: `${(_section_module_scss__WEBPACK_IMPORTED_MODULE_3___default().section)} section-product-shelf layout__section`,
3144
+ ref: ref,
3145
+ children: /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx(src_components_ui_ProductShelf__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z, _objectSpread({
3146
+ inView: inView
3147
+ }, otherProps))
3148
+ });
3149
+ }
3150
+
3151
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ProductShelfSection);
3152
+ __webpack_async_result__();
3153
+ } catch(e) { __webpack_async_result__(e); } });
3154
+
2277
3155
  /***/ }),
2278
3156
 
2279
3157
  /***/ 3830:
@@ -2478,6 +3356,149 @@ const Section = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(f
2478
3356
 
2479
3357
  /***/ }),
2480
3358
 
3359
+ /***/ 6531:
3360
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3361
+
3362
+ "use strict";
3363
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3364
+ /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
3365
+ /* harmony export */ });
3366
+ /* harmony import */ var _faststore_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(792);
3367
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(997);
3368
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
3369
+
3370
+
3371
+
3372
+
3373
+ function ProductCardSkeleton({
3374
+ bordered,
3375
+ sectioned,
3376
+ displayButton,
3377
+ aspectRatio = 1,
3378
+ variant = 'default'
3379
+ }) {
3380
+ return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
3381
+ "data-fs-product-card-skeleton": true,
3382
+ "data-fs-product-card-skeleton-variant": variant,
3383
+ "data-fs-product-card-skeleton-bordered": bordered,
3384
+ "data-fs-product-card-skeleton-sectioned": sectioned,
3385
+ children: [/*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
3386
+ "data-fs-product-card-skeleton-image": true,
3387
+ style: {
3388
+ '--fs-product-card-skeleton-image-aspect-ratio': aspectRatio
3389
+ },
3390
+ children: /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_faststore_ui__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, {
3391
+ size: {
3392
+ width: '100%',
3393
+ height: '100%'
3394
+ }
3395
+ })
3396
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
3397
+ "data-fs-product-card-skeleton-content": true,
3398
+ children: [/*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_faststore_ui__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, {
3399
+ "data-fs-product-card-skeleton-text": true,
3400
+ size: {
3401
+ width: '90%',
3402
+ height: '1.5rem'
3403
+ }
3404
+ }), /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_faststore_ui__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, {
3405
+ "data-fs-product-card-skeleton-text": true,
3406
+ size: {
3407
+ width: '70%',
3408
+ height: '1.5rem'
3409
+ }
3410
+ }), /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_faststore_ui__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, {
3411
+ "data-fs-product-card-skeleton-badge": true,
3412
+ size: {
3413
+ width: '6rem',
3414
+ height: '2rem'
3415
+ },
3416
+ border: "pill"
3417
+ }), displayButton && /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_faststore_ui__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, {
3418
+ "data-fs-product-card-skeleton-button": true,
3419
+ size: {
3420
+ width: '6rem',
3421
+ height: '2rem'
3422
+ },
3423
+ style: {
3424
+ columnGap: '.75rem'
3425
+ }
3426
+ })]
3427
+ })]
3428
+ });
3429
+ }
3430
+
3431
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ProductCardSkeleton);
3432
+
3433
+ /***/ }),
3434
+
3435
+ /***/ 6523:
3436
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3437
+
3438
+ "use strict";
3439
+
3440
+ // EXPORTS
3441
+ __webpack_require__.d(__webpack_exports__, {
3442
+ "Z": () => (/* binding */ ProductShelfSkeleton_ProductShelfSkeleton)
3443
+ });
3444
+
3445
+ // EXTERNAL MODULE: ../components/dist/esm/organisms/ProductShelf/ProductShelf.js
3446
+ var ProductShelf = __webpack_require__(6737);
3447
+ // EXTERNAL MODULE: external "react"
3448
+ var external_react_ = __webpack_require__(6689);
3449
+ var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_);
3450
+ ;// CONCATENATED MODULE: ../components/dist/esm/organisms/ProductShelf/ProductShelfItems.js
3451
+
3452
+ const ProductShelfItems = (0,external_react_.forwardRef)(function ProductShelfItems({ testId = 'fs-product-shelf-items', children, ...otherProps }, ref) {
3453
+ return (external_react_default().createElement("ul", { role: "list", ref: ref, "data-fs-product-shelf-items": true, "data-fs-content": "product-shelf", "data-testid": testId, ...otherProps }, children));
3454
+ });
3455
+ /* harmony default export */ const ProductShelf_ProductShelfItems = (ProductShelfItems);
3456
+ //# sourceMappingURL=ProductShelfItems.js.map
3457
+ ;// CONCATENATED MODULE: ../components/dist/esm/organisms/ProductShelf/ProductShelfItem.js
3458
+
3459
+ const ProductShelfItem = (0,external_react_.forwardRef)(function ProductShelfItem({ testId = 'fs-product-shelf-item', children, ...otherProps }, ref) {
3460
+ return (external_react_default().createElement("li", { role: "listitem", ref: ref, "data-fs-product-shelf-item": true, "data-testid": testId, ...otherProps }, children));
3461
+ });
3462
+ /* harmony default export */ const ProductShelf_ProductShelfItem = (ProductShelfItem);
3463
+ //# sourceMappingURL=ProductShelfItem.js.map
3464
+ // EXTERNAL MODULE: ./src/components/skeletons/ProductCardSkeleton/ProductCardSkeleton.tsx
3465
+ var ProductCardSkeleton = __webpack_require__(6531);
3466
+ // EXTERNAL MODULE: external "react/jsx-runtime"
3467
+ var jsx_runtime_ = __webpack_require__(997);
3468
+ ;// CONCATENATED MODULE: ./src/components/skeletons/ProductShelfSkeleton/ProductShelfSkeleton.tsx
3469
+
3470
+
3471
+
3472
+
3473
+
3474
+ function ProductShelfSkeleton({
3475
+ children,
3476
+ aspectRatio,
3477
+ itemsPerPage,
3478
+ loading = true
3479
+ }) {
3480
+ return loading ? /*#__PURE__*/jsx_runtime_.jsx(ProductShelf/* default */.Z, {
3481
+ "data-fs-product-shelf-skeleton": true,
3482
+ children: /*#__PURE__*/jsx_runtime_.jsx(ProductShelf_ProductShelfItems, {
3483
+ children: Array.from({
3484
+ length: itemsPerPage
3485
+ }, (_, index) => /*#__PURE__*/jsx_runtime_.jsx(ProductShelf_ProductShelfItem, {
3486
+ children: /*#__PURE__*/jsx_runtime_.jsx(ProductCardSkeleton/* default */.Z, {
3487
+ aspectRatio: aspectRatio,
3488
+ sectioned: true,
3489
+ bordered: true
3490
+ })
3491
+ }, String(index)))
3492
+ })
3493
+ }) : /*#__PURE__*/jsx_runtime_.jsx(jsx_runtime_.Fragment, {
3494
+ children: children
3495
+ });
3496
+ }
3497
+
3498
+ /* harmony default export */ const ProductShelfSkeleton_ProductShelfSkeleton = (ProductShelfSkeleton);
3499
+
3500
+ /***/ }),
3501
+
2481
3502
  /***/ 2016:
2482
3503
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2483
3504
 
@@ -2494,35 +3515,442 @@ const Section = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(f
2494
3515
 
2495
3516
 
2496
3517
 
2497
- const ButtonSignIn = ({
2498
- label,
2499
- myAccountLabel,
2500
- icon: {
2501
- alt,
2502
- icon
2503
- }
2504
- }) => {
2505
- const {
2506
- person
2507
- } = (0,src_sdk_session__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .kP)();
2508
- return /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_faststore_ui__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z, {
2509
- "data-fs-button-signin-link": true,
2510
- href: person?.id ? `/account` : `/login`,
2511
- className: "text__title-mini",
2512
- "aria-label": alt,
2513
- variant: "tertiary",
2514
- icon: /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_faststore_ui__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z, {
2515
- name: icon,
2516
- width: 18,
2517
- height: 18,
2518
- weight: "bold"
2519
- }),
2520
- iconPosition: "left",
2521
- children: person?.id ? myAccountLabel : label
3518
+ const ButtonSignIn = ({
3519
+ label,
3520
+ myAccountLabel,
3521
+ icon: {
3522
+ alt,
3523
+ icon
3524
+ }
3525
+ }) => {
3526
+ const {
3527
+ person
3528
+ } = (0,src_sdk_session__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .kP)();
3529
+ return /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_faststore_ui__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z, {
3530
+ "data-fs-button-signin-link": true,
3531
+ href: person?.id ? `/account` : `/login`,
3532
+ className: "text__title-mini",
3533
+ "aria-label": alt,
3534
+ variant: "tertiary",
3535
+ icon: /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_faststore_ui__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z, {
3536
+ name: icon,
3537
+ width: 18,
3538
+ height: 18,
3539
+ weight: "bold"
3540
+ }),
3541
+ iconPosition: "left",
3542
+ children: person?.id ? myAccountLabel : label
3543
+ });
3544
+ };
3545
+
3546
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ButtonSignIn);
3547
+
3548
+ /***/ }),
3549
+
3550
+ /***/ 8619:
3551
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3552
+
3553
+ "use strict";
3554
+
3555
+ // EXPORTS
3556
+ __webpack_require__.d(__webpack_exports__, {
3557
+ "Z": () => (/* binding */ ui_Carousel_Carousel)
3558
+ });
3559
+
3560
+ // EXTERNAL MODULE: external "react"
3561
+ var external_react_ = __webpack_require__(6689);
3562
+ var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_);
3563
+ // EXTERNAL MODULE: ../components/dist/esm/molecules/IconButton/IconButton.js
3564
+ var IconButton = __webpack_require__(7041);
3565
+ // EXTERNAL MODULE: ../components/dist/esm/atoms/Icon/Icon.js
3566
+ var Icon = __webpack_require__(2614);
3567
+ // EXTERNAL MODULE: external "react-swipeable"
3568
+ var external_react_swipeable_ = __webpack_require__(3789);
3569
+ ;// CONCATENATED MODULE: ../components/dist/esm/hooks/useSlider.js
3570
+
3571
+
3572
+ const nextPage = (current, total) => (current + 1) % total;
3573
+ const previousPage = (current, total) => (total - ((total - current + 1) % total)) % total;
3574
+ function reducer(state, action) {
3575
+ switch (action.type) {
3576
+ case 'NEXT_PAGE': {
3577
+ // If `state.infinite` is true, we need to take into account an extra
3578
+ // page in the calculation. This extra page is a clone of the first page.
3579
+ const adjustedTotalPages = state.infinite
3580
+ ? state.totalPages + 1
3581
+ : state.totalPages;
3582
+ const nextPageIndex = nextPage(state.currentPage, adjustedTotalPages);
3583
+ const nextItemIndex = (nextPageIndex % adjustedTotalPages) * state.itemsPerPage;
3584
+ return {
3585
+ ...state,
3586
+ sliding: true,
3587
+ slideDirection: 'next',
3588
+ currentItem: nextItemIndex,
3589
+ currentPage: nextPageIndex,
3590
+ };
3591
+ }
3592
+ case 'PREVIOUS_PAGE': {
3593
+ // If `state.infinite` is true, we need to take into account an extra
3594
+ // page in the calculation. This extra page is a clone of the first page.
3595
+ const adjustedTotalPages = state.infinite
3596
+ ? state.totalPages + 1
3597
+ : state.totalPages;
3598
+ // If `state.infinite` is true and we're currently on page 0, we need to
3599
+ // let the slider go to page -1. This -1 page is a clone of the last page.
3600
+ const shouldGoToClone = state.infinite && state.currentPage === 0;
3601
+ const previousPageIndex = shouldGoToClone
3602
+ ? -1
3603
+ : previousPage(state.currentPage, state.totalPages);
3604
+ return {
3605
+ ...state,
3606
+ sliding: true,
3607
+ slideDirection: 'previous',
3608
+ currentItem: (previousPageIndex % adjustedTotalPages) * state.itemsPerPage,
3609
+ currentPage: previousPageIndex,
3610
+ };
3611
+ }
3612
+ case 'GO_TO_PAGE': {
3613
+ if (action.payload.pageIndex === state.currentPage) {
3614
+ return state;
3615
+ }
3616
+ return {
3617
+ ...state,
3618
+ sliding: action.payload.shouldSlide,
3619
+ slideDirection: action.payload.pageIndex > state.currentPage ? 'next' : 'previous',
3620
+ currentItem: (action.payload.pageIndex % state.totalPages) * state.itemsPerPage,
3621
+ currentPage: action.payload.pageIndex,
3622
+ };
3623
+ }
3624
+ case 'STOP_SLIDE':
3625
+ return { ...state, sliding: false };
3626
+ default:
3627
+ return state;
3628
+ }
3629
+ }
3630
+ const defaultSliderState = (totalItems, itemsPerPage, infinite) => ({
3631
+ currentItem: 0,
3632
+ currentPage: 0,
3633
+ sliding: false,
3634
+ slideDirection: 'next',
3635
+ totalItems,
3636
+ itemsPerPage,
3637
+ totalPages: Math.ceil(totalItems / itemsPerPage),
3638
+ infinite,
3639
+ });
3640
+ const slide = (page, dispatch) => {
3641
+ if (page === 'next') {
3642
+ dispatch({ type: 'NEXT_PAGE' });
3643
+ }
3644
+ if (page === 'previous') {
3645
+ dispatch({ type: 'PREVIOUS_PAGE' });
3646
+ }
3647
+ if (typeof page === 'number') {
3648
+ dispatch({
3649
+ type: 'GO_TO_PAGE',
3650
+ payload: {
3651
+ pageIndex: page,
3652
+ shouldSlide: true,
3653
+ },
3654
+ });
3655
+ }
3656
+ };
3657
+ const useSlider = ({ totalItems, itemsPerPage = 1, infiniteMode = false, shouldSlideOnSwipe = true, ...swipeableConfigOverrides }) => {
3658
+ const [sliderState, sliderDispatch] = (0,external_react_.useReducer)(reducer, undefined, () => defaultSliderState(totalItems, itemsPerPage, infiniteMode));
3659
+ const handlers = (0,external_react_swipeable_.useSwipeable)({
3660
+ onSwipedRight: () => shouldSlideOnSwipe && slide('previous', sliderDispatch),
3661
+ onSwipedLeft: () => shouldSlideOnSwipe && slide('next', sliderDispatch),
3662
+ trackMouse: true,
3663
+ ...swipeableConfigOverrides,
3664
+ });
3665
+ return {
3666
+ handlers,
3667
+ slide,
3668
+ sliderState,
3669
+ sliderDispatch,
3670
+ };
3671
+ };
3672
+ //# sourceMappingURL=useSlider.js.map
3673
+ // EXTERNAL MODULE: ../components/dist/esm/atoms/Button/Button.js
3674
+ var Button = __webpack_require__(3339);
3675
+ ;// CONCATENATED MODULE: ../components/dist/esm/molecules/Carousel/CarouselBullets.js
3676
+
3677
+
3678
+ const defaultAriaLabel = (id, idx, isActive) => isActive ? `Current page from ${id}` : `Go to page ${idx + 1} from ${id}`;
3679
+ const CarouselBullets = (0,external_react_.forwardRef)(function Bullets({ id, totalQuantity, activeBullet, onClick, testId = 'fs-carousel-bullets', ariaLabelGenerator = defaultAriaLabel, ariaControlsGenerator, ...otherProps }, ref) {
3680
+ const bulletIndexes = (0,external_react_.useMemo)(() => Array(totalQuantity).fill(0), [totalQuantity]);
3681
+ return (external_react_default().createElement("div", { ref: ref, "data-fs-carousel-bullets": true, "data-testid": testId, role: "tablist", ...otherProps }, bulletIndexes.map((_, idx) => {
3682
+ const isActive = activeBullet === idx;
3683
+ return (external_react_default().createElement(Button/* default */.Z, { key: `${id}-${idx}`, role: "tab", tabIndex: -1, "data-fs-carousel-bullet": true, testId: `${testId}-bullet`, onClick: (e) => onClick(e, idx), "aria-label": ariaLabelGenerator(id, idx, isActive), "aria-controls": ariaControlsGenerator?.(idx), "aria-selected": isActive, variant: "tertiary" }));
3684
+ })));
3685
+ });
3686
+ /* harmony default export */ const Carousel_CarouselBullets = (CarouselBullets);
3687
+ //# sourceMappingURL=CarouselBullets.js.map
3688
+ ;// CONCATENATED MODULE: ../components/dist/esm/hooks/useSlideVisibility.js
3689
+
3690
+ function isSlideVisible({ itemsPerPage, currentSlide, slideIdx, totalItems, }) {
3691
+ const isClonedSlide = currentSlide < 0 || currentSlide >= totalItems;
3692
+ const isVisible = slideIdx >= currentSlide && slideIdx < currentSlide + itemsPerPage;
3693
+ return isClonedSlide || isVisible;
3694
+ }
3695
+ const useSlideVisibility = ({ currentSlide, itemsPerPage, totalItems, }) => {
3696
+ /** Keeps track of slides that have been visualized before.
3697
+ * We want to keep rendering them because the issue is mostly rendering
3698
+ * slides that might never be viewed; On the other hand, hiding slides
3699
+ * that were visible causes visual glitches */
3700
+ const visitedSlides = (0,external_react_.useRef)(new Set());
3701
+ (0,external_react_.useEffect)(() => {
3702
+ for (let i = 0; i < itemsPerPage; i++) {
3703
+ visitedSlides.current.add(currentSlide + i);
3704
+ }
3705
+ }, [currentSlide, itemsPerPage]);
3706
+ const isItemVisible = (index) => isSlideVisible({
3707
+ slideIdx: index,
3708
+ currentSlide,
3709
+ itemsPerPage,
3710
+ totalItems,
3711
+ });
3712
+ const shouldRenderItem = (index) => {
3713
+ return visitedSlides.current.has(index) || isItemVisible(index);
3714
+ };
3715
+ return { shouldRenderItem, isItemVisible };
3716
+ };
3717
+ //# sourceMappingURL=useSlideVisibility.js.map
3718
+ ;// CONCATENATED MODULE: ../components/dist/esm/molecules/Carousel/CarouselItem.js
3719
+
3720
+
3721
+ function CarouselItem({ id, index, state, children, totalItems, infiniteMode, isScrollCarousel, marginRightValue, }) {
3722
+ const { isItemVisible, shouldRenderItem } = useSlideVisibility({
3723
+ totalItems,
3724
+ currentSlide: state.currentItem,
3725
+ itemsPerPage: state.itemsPerPage,
3726
+ });
3727
+ const defaultStyle = { width: '100%' };
3728
+ const scrollCarouselStyle = {
3729
+ width: `calc((100% - ${marginRightValue} * ${state.itemsPerPage - 1}) / ${state.itemsPerPage})`,
3730
+ };
3731
+ const style = isScrollCarousel && state.itemsPerPage > 1
3732
+ ? { ...scrollCarouselStyle }
3733
+ : { ...defaultStyle };
3734
+ const shouldDisplayItem = isScrollCarousel || shouldRenderItem(index - Number(infiniteMode));
3735
+ return (external_react_default().createElement("li", { style: style, id: `${id}-carousel-item-${index}`, "data-fs-carousel-item": true, "data-fs-carousel-item-visible": isItemVisible(index - Number(infiniteMode)) || undefined }, shouldDisplayItem ? children : null));
3736
+ }
3737
+ /* harmony default export */ const Carousel_CarouselItem = (CarouselItem);
3738
+ //# sourceMappingURL=CarouselItem.js.map
3739
+ ;// CONCATENATED MODULE: ../components/dist/esm/molecules/Carousel/Carousel.js
3740
+
3741
+
3742
+
3743
+
3744
+
3745
+ const createTransformValues = (infinite, totalItems) => {
3746
+ const transformMap = {};
3747
+ const slideWidth = 100 / totalItems;
3748
+ for (let idx = 0; idx < totalItems; ++idx) {
3749
+ const currIdx = infinite ? idx - 1 : idx;
3750
+ const transformValue = -(slideWidth * idx);
3751
+ transformMap[currIdx] = transformValue;
3752
+ }
3753
+ return transformMap;
3754
+ };
3755
+ function Carousel({ children, className, 'aria-label': ariaLabel, infiniteMode = false, controls = 'complete', testId = 'fs-carousel', transition = {
3756
+ duration: 400,
3757
+ property: 'transform',
3758
+ }, id = 'fs-carousel', variant = 'scroll', itemsPerPage = 1, navigationIcons = undefined, ...swipeableConfigOverrides }) {
3759
+ if (itemsPerPage < 1) {
3760
+ throw new Error('itemsPerPage must be greater than or equal to 1');
3761
+ }
3762
+ const carouselTrackRef = (0,external_react_.useRef)(null);
3763
+ const isSlideCarousel = variant === 'slide';
3764
+ const isScrollCarousel = variant === 'scroll';
3765
+ const childrenArray = external_react_default().Children.toArray(children);
3766
+ const childrenCount = childrenArray.length;
3767
+ const numberOfSlides = infiniteMode ? childrenCount + 2 : childrenCount;
3768
+ const slidingTransition = `${transition.property} ${transition.duration}ms ${transition.timing ?? ''} ${transition.delay ?? ''}`;
3769
+ const { handlers, slide, sliderState, sliderDispatch } = useSlider({
3770
+ itemsPerPage,
3771
+ infiniteMode,
3772
+ totalItems: childrenCount,
3773
+ shouldSlideOnSwipe: isSlideCarousel,
3774
+ ...swipeableConfigOverrides,
3775
+ });
3776
+ const pagesCount = Math.ceil(childrenCount / sliderState.itemsPerPage);
3777
+ const [marginRight, setMarginRight] = (0,external_react_.useState)('16px');
3778
+ const [carouselItemsWidth, setCarouselItemsWidth] = (0,external_react_.useState)(0);
3779
+ (0,external_react_.useEffect)(() => {
3780
+ const item = carouselTrackRef.current?.firstElementChild;
3781
+ if (item) {
3782
+ setMarginRight(getComputedStyle(item).getPropertyValue('margin-right'));
3783
+ setCarouselItemsWidth(Number(item.clientWidth) + parseInt(marginRight, 10) + 1);
3784
+ }
3785
+ }, [carouselItemsWidth]);
3786
+ const showNavigationArrows = pagesCount !== 1 &&
3787
+ (controls === 'complete' || controls === 'navigationArrows');
3788
+ const showPaginationBullets = pagesCount !== 1 &&
3789
+ (controls === 'complete' || controls === 'paginationBullets');
3790
+ const transformValues = (0,external_react_.useMemo)(() => createTransformValues(infiniteMode, numberOfSlides), [numberOfSlides, infiniteMode]);
3791
+ const postRenderedSlides = infiniteMode && children ? childrenArray.slice(0, 1) : [];
3792
+ const preRenderedSlides = infiniteMode && children ? childrenArray.slice(childrenCount - 1) : [];
3793
+ const slides = preRenderedSlides.concat(children ?? [], postRenderedSlides);
3794
+ const slideCarouselTrackStyle = (0,external_react_.useMemo)(() => ({
3795
+ width: `${numberOfSlides * 100}%`,
3796
+ transition: sliderState.sliding ? slidingTransition : undefined,
3797
+ transform: `translate3d(${transformValues[sliderState.currentPage]}%, 0, 0)`,
3798
+ }), [
3799
+ numberOfSlides,
3800
+ transformValues,
3801
+ slidingTransition,
3802
+ sliderState.sliding,
3803
+ sliderState.currentPage,
3804
+ ]);
3805
+ const scrollCarouselTrackStyle = (0,external_react_.useMemo)(() => ({
3806
+ width: '100%',
3807
+ overflowX: 'scroll',
3808
+ whiteSpace: 'nowrap',
3809
+ }), []);
3810
+ const carouselTrackStyle = (isSlideCarousel && slideCarouselTrackStyle) ||
3811
+ (isScrollCarousel && scrollCarouselTrackStyle);
3812
+ const slidePrevious = () => {
3813
+ if (sliderState.sliding ||
3814
+ (!infiniteMode && sliderState.currentPage === 0)) {
3815
+ return;
3816
+ }
3817
+ slide('previous', sliderDispatch);
3818
+ };
3819
+ const slideNext = () => {
3820
+ if (sliderState.sliding ||
3821
+ (!infiniteMode && sliderState.currentPage === childrenCount - 1)) {
3822
+ return;
3823
+ }
3824
+ slide('next', sliderDispatch);
3825
+ };
3826
+ const onScrollTrack = (event) => {
3827
+ if (isSlideCarousel || itemsPerPage > 1) {
3828
+ return;
3829
+ }
3830
+ const itemWidth = Number(event.currentTarget.firstElementChild?.scrollWidth);
3831
+ const scrollOffset = event.currentTarget?.scrollLeft;
3832
+ const formatter = scrollOffset > itemWidth / 2 ? Math.round : Math.floor;
3833
+ const page = formatter(scrollOffset / itemWidth);
3834
+ slide(page, sliderDispatch);
3835
+ };
3836
+ const onTransitionTrackEnd = () => {
3837
+ sliderDispatch({
3838
+ type: 'STOP_SLIDE',
3839
+ });
3840
+ if (infiniteMode && sliderState.currentItem >= childrenCount) {
3841
+ sliderDispatch({
3842
+ type: 'GO_TO_PAGE',
3843
+ payload: {
3844
+ pageIndex: 0,
3845
+ shouldSlide: false,
3846
+ },
3847
+ });
3848
+ }
3849
+ if (infiniteMode && sliderState.currentItem < 0) {
3850
+ sliderDispatch({
3851
+ type: 'GO_TO_PAGE',
3852
+ payload: {
3853
+ pageIndex: sliderState.totalPages - 1,
3854
+ shouldSlide: false,
3855
+ },
3856
+ });
3857
+ }
3858
+ };
3859
+ const onScrollPagination = async (index, slideDirection) => {
3860
+ if (slideDirection === 'previous' && sliderState.currentPage === 0) {
3861
+ return;
3862
+ }
3863
+ if (slideDirection === 'next' &&
3864
+ sliderState.currentPage === sliderState.totalPages - 1) {
3865
+ return;
3866
+ }
3867
+ let scrollOffset = index * carouselItemsWidth * itemsPerPage;
3868
+ carouselTrackRef.current?.scrollTo({
3869
+ left: scrollOffset,
3870
+ behavior: 'smooth',
3871
+ });
3872
+ slide(index, sliderDispatch);
3873
+ };
3874
+ // accessible behavior for tablist
3875
+ const handleBulletsKeyDown = (event) => {
3876
+ switch (event.key) {
3877
+ case 'ArrowLeft': {
3878
+ isSlideCarousel && slidePrevious();
3879
+ isScrollCarousel &&
3880
+ onScrollPagination(sliderState.currentPage - 1, 'previous');
3881
+ break;
3882
+ }
3883
+ case 'ArrowRight': {
3884
+ isSlideCarousel && slideNext();
3885
+ isScrollCarousel &&
3886
+ onScrollPagination(sliderState.currentPage + 1, 'next');
3887
+ break;
3888
+ }
3889
+ case 'Home': {
3890
+ slide(0, sliderDispatch);
3891
+ break;
3892
+ }
3893
+ case 'End': {
3894
+ slide(childrenCount - 1, sliderDispatch);
3895
+ break;
3896
+ }
3897
+ default:
3898
+ }
3899
+ };
3900
+ return (external_react_default().createElement("section", { id: id, "data-fs-carousel": true, "data-fs-carousel-variant": variant, className: className, "data-testid": testId, "aria-label": ariaLabel },
3901
+ external_react_default().createElement("div", { "data-fs-carousel-track-container": true, style: {
3902
+ width: '100%',
3903
+ overflow: 'hidden',
3904
+ display: isScrollCarousel ? 'block' : undefined,
3905
+ }, ...handlers },
3906
+ external_react_default().createElement("ul", { "aria-live": "polite", ref: carouselTrackRef, style: carouselTrackStyle, "data-fs-carousel-track": true, onScroll: onScrollTrack, onTransitionEnd: onTransitionTrackEnd }, slides.map((currentSlide, idx) => (external_react_default().createElement(Carousel_CarouselItem, { id: id, index: idx, key: String(idx), state: sliderState, totalItems: childrenCount, infiniteMode: infiniteMode, isScrollCarousel: isScrollCarousel, marginRightValue: marginRight }, currentSlide))))),
3907
+ showNavigationArrows && (external_react_default().createElement("div", { "data-fs-carousel-controls": true },
3908
+ external_react_default().createElement(IconButton/* default */.Z, { "data-fs-carousel-control": "left", "aria-controls": id, disabled: !infiniteMode && sliderState.currentPage === 0, "aria-label": "previous", icon: navigationIcons?.left ?? (external_react_default().createElement(Icon/* default */.Z, { name: "ArrowLeft", width: 20, height: 20, weight: "bold" })), onClick: () => {
3909
+ isSlideCarousel && slidePrevious();
3910
+ isScrollCarousel &&
3911
+ onScrollPagination(sliderState.currentPage - 1, 'previous');
3912
+ } }),
3913
+ external_react_default().createElement(IconButton/* default */.Z, { "data-fs-carousel-control": "right", "aria-controls": id, disabled: !infiniteMode &&
3914
+ sliderState.currentPage === sliderState.totalPages - 1, "aria-label": "next", icon: navigationIcons?.right ?? (external_react_default().createElement(Icon/* default */.Z, { name: "ArrowRight", width: 20, height: 20, weight: "bold" })), onClick: () => {
3915
+ isSlideCarousel && slideNext();
3916
+ isScrollCarousel &&
3917
+ onScrollPagination(sliderState.currentPage + 1, 'next');
3918
+ } }))),
3919
+ showPaginationBullets && (external_react_default().createElement(Carousel_CarouselBullets, { id: id, tabIndex: 0, activeBullet: sliderState.currentPage, totalQuantity: pagesCount, onKeyDown: handleBulletsKeyDown, onClick: async (_, idx) => {
3920
+ isSlideCarousel &&
3921
+ !sliderState.sliding &&
3922
+ slide(idx, sliderDispatch);
3923
+ isScrollCarousel && onScrollPagination(idx);
3924
+ }, onFocus: (event) => event.currentTarget.focus(), ariaControlsGenerator: (idx) => `${id}-carousel-item-${idx}` }))));
3925
+ }
3926
+ /* harmony default export */ const Carousel_Carousel = (Carousel);
3927
+ //# sourceMappingURL=Carousel.js.map
3928
+ // EXTERNAL MODULE: external "react/jsx-runtime"
3929
+ var jsx_runtime_ = __webpack_require__(997);
3930
+ ;// CONCATENATED MODULE: ./src/components/ui/Carousel/Carousel.tsx
3931
+
3932
+
3933
+
3934
+ function Carousel_Carousel_Carousel({
3935
+ id,
3936
+ testId,
3937
+ children,
3938
+ itemsPerPage,
3939
+ variant = 'scroll',
3940
+ infiniteMode = false
3941
+ }) {
3942
+ const isMobile = window.innerWidth <= 768;
3943
+ return /*#__PURE__*/jsx_runtime_.jsx(Carousel_Carousel, {
3944
+ id: id,
3945
+ testId: testId,
3946
+ variant: variant,
3947
+ infiniteMode: infiniteMode,
3948
+ itemsPerPage: isMobile ? 1.6 : itemsPerPage,
3949
+ children: children
2522
3950
  });
2523
- };
3951
+ }
2524
3952
 
2525
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ButtonSignIn);
3953
+ /* harmony default export */ const ui_Carousel_Carousel = (Carousel_Carousel_Carousel);
2526
3954
 
2527
3955
  /***/ }),
2528
3956
 
@@ -2785,120 +4213,39 @@ function Logo({
2785
4213
 
2786
4214
  /***/ }),
2787
4215
 
2788
- /***/ 3276:
2789
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4216
+ /***/ 7691:
4217
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
2790
4218
 
2791
4219
  "use strict";
4220
+ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
2792
4221
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2793
4222
  /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
2794
4223
  /* harmony export */ });
2795
- // eslint-disable-next-line import/no-anonymous-default-export
2796
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({});
2797
-
2798
- /***/ }),
2799
-
2800
- /***/ 6073:
2801
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4224
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6689);
4225
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
4226
+ /* harmony import */ var src_components_skeletons_ProductShelfSkeleton__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(6523);
4227
+ /* harmony import */ var src_sdk_analytics_hooks_useViewItemListEvent__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5184);
4228
+ /* harmony import */ var src_sdk_overrides_OverrideContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5522);
4229
+ /* harmony import */ var src_sdk_product_useProductsQuery__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4867);
4230
+ /* harmony import */ var src_utils_utilities__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3952);
4231
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(997);
4232
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__);
4233
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([src_sdk_product_useProductsQuery__WEBPACK_IMPORTED_MODULE_4__]);
4234
+ src_sdk_product_useProductsQuery__WEBPACK_IMPORTED_MODULE_4__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
4235
+ const _excluded = ["title", "inView", "productCardConfiguration", "numberOfItems", "itemsPerPage"];
2802
4236
 
2803
- "use strict";
4237
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2804
4238
 
2805
- // EXPORTS
2806
- __webpack_require__.d(__webpack_exports__, {
2807
- "i8": () => (/* binding */ cartStore),
2808
- "jD": () => (/* binding */ useCart)
2809
- });
4239
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
2810
4240
 
2811
- // UNUSED EXPORTS: ValidateCartMutation
4241
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2812
4242
 
2813
- // EXTERNAL MODULE: ../sdk/dist/utils/error.js
2814
- var error = __webpack_require__(2254);
2815
- // EXTERNAL MODULE: ../sdk/dist/store/composed.js + 4 modules
2816
- var composed = __webpack_require__(8283);
2817
- ;// CONCATENATED MODULE: ../sdk/dist/cart/index.js
4243
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
2818
4244
 
4245
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
2819
4246
 
2820
- const createCartStore = (defaultCart, onValidate, namespace = "fs::cart") => {
2821
- const store = (0,composed/* createStore */.M)(defaultCart, namespace, onValidate);
2822
- const addItem = (item) => {
2823
- if (!item.id) {
2824
- throw new error/* SDKError */.q("You must provide an `id` for items");
2825
- }
2826
- if (item.quantity < 0) {
2827
- throw new error/* SDKError */.q("Item quantity needs to be higher than zero");
2828
- }
2829
- const cart = store.read();
2830
- const currentItem = getItem(item.id);
2831
- const newItem = currentItem
2832
- ? {
2833
- ...item,
2834
- quantity: currentItem.quantity + item.quantity,
2835
- }
2836
- : item;
2837
- store.set({
2838
- ...cart,
2839
- items: currentItem
2840
- ? cart.items.map((item) => item === currentItem ? newItem : item)
2841
- : [...cart.items, newItem],
2842
- });
2843
- };
2844
- const updateItemQuantity = (id, quantity) => {
2845
- const cart = store.read();
2846
- const currentItem = getItem(id);
2847
- if (!currentItem) {
2848
- throw new error/* SDKError */.q(`Item with id not found: ${id}`);
2849
- }
2850
- const newItem = {
2851
- ...currentItem,
2852
- quantity,
2853
- };
2854
- store.set({
2855
- ...cart,
2856
- items: cart.items
2857
- .map((item) => item === currentItem ? newItem : item) // update item quantity
2858
- .filter((item) => item.quantity > 0), // remove items if quantity is <= 0
2859
- });
2860
- };
2861
- const removeItem = (id) => {
2862
- const cart = store.read();
2863
- const removed = getItem(id);
2864
- store.set({
2865
- ...cart,
2866
- items: cart.items.filter((item) => item !== removed),
2867
- });
2868
- };
2869
- const emptyCart = () => store.set({ ...store.read(), items: [] });
2870
- const getItem = (id) => store.read().items.find((item) => item.id === id);
2871
- const inCart = (id) => Boolean(getItem(id));
2872
- const isEmpty = () => store.read().items.length === 0;
2873
- return {
2874
- ...store,
2875
- getItem,
2876
- addItem,
2877
- updateItemQuantity,
2878
- removeItem,
2879
- emptyCart,
2880
- inCart,
2881
- isEmpty,
2882
- };
2883
- };
2884
- //# sourceMappingURL=index.js.map
2885
- // EXTERNAL MODULE: external "react"
2886
- var external_react_ = __webpack_require__(6689);
2887
- // EXTERNAL MODULE: ./faststore.config.js
2888
- var faststore_config = __webpack_require__(7183);
2889
- var faststore_config_default = /*#__PURE__*/__webpack_require__.n(faststore_config);
2890
- // EXTERNAL MODULE: ./src/sdk/graphql/request.ts
2891
- var request = __webpack_require__(180);
2892
- // EXTERNAL MODULE: ./src/sdk/session/index.ts + 1 modules
2893
- var session = __webpack_require__(7295);
2894
- // EXTERNAL MODULE: ./src/sdk/useStore.ts
2895
- var useStore = __webpack_require__(3818);
2896
- ;// CONCATENATED MODULE: ./src/sdk/cart/index.ts
2897
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2898
4247
 
2899
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
2900
4248
 
2901
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2902
4249
 
2903
4250
 
2904
4251
 
@@ -2906,546 +4253,565 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
2906
4253
 
2907
4254
 
2908
4255
 
2909
- const ValidateCartMutation = "ValidateCartMutation";
2910
4256
 
2911
- const isGift = item => item.price === 0;
2912
4257
 
2913
- const getItemId = item => [item.itemOffered.sku, item.seller.identifier, item.itemOffered.additionalProperty?.map(({
2914
- propertyID
2915
- }) => propertyID).join('-')].filter(Boolean).join('::');
4258
+ function ProductShelf(_ref) {
4259
+ let {
4260
+ title,
4261
+ inView,
4262
+ productCardConfiguration: {
4263
+ bordered,
4264
+ showDiscountBadge
4265
+ } = {},
4266
+ numberOfItems,
4267
+ itemsPerPage = 5
4268
+ } = _ref,
4269
+ otherProps = _objectWithoutProperties(_ref, _excluded);
2916
4270
 
2917
- const validateCart = async cart => {
2918
4271
  const {
2919
- validateCart: validated = null
2920
- } = await (0,request/* request */.W)(ValidateCartMutation, {
2921
- session: session/* sessionStore.read */.Qf.read(),
2922
- cart: {
2923
- order: {
2924
- orderNumber: cart.id,
2925
- shouldSplitItem: cart.shouldSplitItem,
2926
- acceptedOffer: cart.items.map(({
2927
- price,
2928
- listPrice,
2929
- seller,
2930
- quantity,
2931
- itemOffered
2932
- }) => ({
2933
- price,
2934
- listPrice,
2935
- seller,
2936
- quantity,
2937
- itemOffered: {
2938
- sku: itemOffered.sku,
2939
- image: itemOffered.image,
2940
- name: itemOffered.name,
2941
- additionalProperty: itemOffered.additionalProperty
2942
- }
2943
- }))
2944
- }
2945
- }
4272
+ ProductShelf: ProductShelfWrapper,
4273
+ __experimentalCarousel: Carousel,
4274
+ __experimentalProductCard: ProductCard
4275
+ } = (0,src_sdk_overrides_OverrideContext__WEBPACK_IMPORTED_MODULE_2__/* .useOverrideComponents */ .r3)();
4276
+ const titleId = (0,src_utils_utilities__WEBPACK_IMPORTED_MODULE_3__/* .textToKebabCase */ .B)(title);
4277
+ const id = (0,react__WEBPACK_IMPORTED_MODULE_0__.useId)();
4278
+ const viewedOnce = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);
4279
+ const data = (0,src_sdk_product_useProductsQuery__WEBPACK_IMPORTED_MODULE_4__/* .useProductsQuery */ .k)(_objectSpread({
4280
+ first: numberOfItems
4281
+ }, otherProps));
4282
+ const products = data?.search?.products;
4283
+ const productEdges = products?.edges ?? [];
4284
+ const aspectRatio = 1;
4285
+ const {
4286
+ sendViewItemListEvent
4287
+ } = (0,src_sdk_analytics_hooks_useViewItemListEvent__WEBPACK_IMPORTED_MODULE_5__/* .useViewItemListEvent */ .m)({
4288
+ products: productEdges,
4289
+ title,
4290
+ page: 0,
4291
+ pageSize: 0
2946
4292
  });
2947
- return validated && {
2948
- id: validated.order.orderNumber,
2949
- items: validated.order.acceptedOffer.map(item => _objectSpread(_objectSpread({}, item), {}, {
2950
- id: getItemId(item)
2951
- })),
2952
- messages: validated.messages
2953
- };
2954
- };
2955
-
2956
- const [validationStore, onValidate] = (0,useStore/* createValidationStore */.d)(validateCart);
2957
- const defaultCartStore = createCartStore((faststore_config_default()).cart, onValidate);
2958
- const cartStore = _objectSpread(_objectSpread({}, defaultCartStore), {}, {
2959
- addItem: item => {
2960
- const cartItem = _objectSpread(_objectSpread({}, item), {}, {
2961
- id: getItemId(item)
2962
- });
4293
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
4294
+ if (inView && !viewedOnce.current && productEdges.length) {
4295
+ sendViewItemListEvent();
4296
+ viewedOnce.current = true;
4297
+ }
4298
+ }, [inView, productEdges.length, sendViewItemListEvent]);
2963
4299
 
2964
- defaultCartStore.addItem(cartItem);
4300
+ if (products?.edges.length === 0) {
4301
+ return null;
2965
4302
  }
2966
- });
2967
- const useCart = () => {
2968
- const cart = (0,useStore/* useStore */.o)(cartStore);
2969
- const isValidating = (0,useStore/* useStore */.o)(validationStore);
2970
- return (0,external_react_.useMemo)(() => _objectSpread(_objectSpread({}, cart), {}, {
2971
- isValidating,
2972
- messages: cart.messages,
2973
- gifts: cart.items.filter(item => isGift(item)),
2974
- items: cart.items.filter(item => !isGift(item)),
2975
- totalUniqueItems: cart.items.length,
2976
- totalItems: cart.items.reduce((acc, curr) => acc + (isGift(curr) ? 0 : curr.quantity), 0),
2977
- total: cart.items.reduce((acc, curr) => acc + curr.price * curr.quantity, 0),
2978
- subTotal: cart.items.reduce((acc, curr) => acc + curr.listPrice * curr.quantity, 0)
2979
- }), [cart, isValidating]);
2980
- };
4303
+
4304
+ return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment, {
4305
+ children: [/*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx("h2", {
4306
+ className: "text__title-section layout__content",
4307
+ children: title
4308
+ }), /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx(src_components_skeletons_ProductShelfSkeleton__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z, {
4309
+ aspectRatio: aspectRatio,
4310
+ loading: products === undefined,
4311
+ itemsPerPage: itemsPerPage,
4312
+ children: /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx(ProductShelfWrapper.Component, _objectSpread(_objectSpread({}, ProductShelfWrapper.props), {}, {
4313
+ children: /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx(Carousel.Component, _objectSpread(_objectSpread({
4314
+ id: titleId || id,
4315
+ itemsPerPage: itemsPerPage
4316
+ }, Carousel.props), {}, {
4317
+ children: productEdges.map((product, idx) => /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(ProductCard.Component, _objectSpread(_objectSpread({
4318
+ aspectRatio: aspectRatio,
4319
+ imgProps: {
4320
+ width: 216,
4321
+ height: 216,
4322
+ sizes: '(max-width: 768px) 42vw, 30vw'
4323
+ }
4324
+ }, ProductCard.props), {}, {
4325
+ bordered: bordered ?? ProductCard.props.bordered,
4326
+ showDiscountBadge: showDiscountBadge ?? ProductCard.props.showDiscountBadge // Dynamic props shouldn't be overridable
4327
+ // This decision can be reviewed later if needed
4328
+ ,
4329
+ key: `${product.node.id}`,
4330
+ product: product.node,
4331
+ index: idx + 1
4332
+ })))
4333
+ }))
4334
+ }))
4335
+ })]
4336
+ });
4337
+ }
4338
+
4339
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ProductShelf);
4340
+ __webpack_async_result__();
4341
+ } catch(e) { __webpack_async_result__(e); } });
2981
4342
 
2982
4343
  /***/ }),
2983
4344
 
2984
- /***/ 3025:
4345
+ /***/ 8459:
2985
4346
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2986
4347
 
2987
4348
  "use strict";
2988
4349
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2989
- /* harmony export */ "Z": () => (/* binding */ MissingContentError)
4350
+ /* harmony export */ "K": () => (/* binding */ ITEMS_PER_SECTION),
4351
+ /* harmony export */ "g": () => (/* binding */ ITEMS_PER_PAGE)
2990
4352
  /* harmony export */ });
2991
- class MissingContentError extends Error {
2992
- constructor(options) {
2993
- super(`Missing content on the CMS for content type ${options.contentType}. Add content before proceeding. Context: ${JSON.stringify(options, null, 2)}`);
2994
- }
2995
-
2996
- }
4353
+ const ITEMS_PER_PAGE = 12;
4354
+ const ITEMS_PER_SECTION = 5;
2997
4355
 
2998
4356
  /***/ }),
2999
4357
 
3000
- /***/ 180:
4358
+ /***/ 3276:
3001
4359
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3002
4360
 
3003
4361
  "use strict";
3004
4362
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3005
- /* harmony export */ "W": () => (/* binding */ request)
4363
+ /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
3006
4364
  /* harmony export */ });
3007
- /* harmony import */ var _faststore_graphql_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5307);
3008
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3009
-
3010
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3011
-
3012
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3013
-
3014
-
3015
- const request = async (operationName, variables, options) => {
3016
- const {
3017
- data,
3018
- errors
3019
- } = await (0,_faststore_graphql_utils__WEBPACK_IMPORTED_MODULE_0__/* .request */ .WY)('/api/graphql', _objectSpread(_objectSpread({}, options), {}, {
3020
- variables,
3021
- operationName
3022
- }));
3023
-
3024
- if (errors?.length) {
3025
- throw errors[0];
3026
- }
3027
-
3028
- return data;
3029
- };
4365
+ // eslint-disable-next-line import/no-anonymous-default-export
4366
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({});
3030
4367
 
3031
4368
  /***/ }),
3032
4369
 
3033
- /***/ 7732:
3034
- /***/ ((module, __webpack_exports__, __webpack_require__) => {
4370
+ /***/ 2463:
4371
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3035
4372
 
3036
4373
  "use strict";
3037
- __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
3038
4374
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3039
- /* harmony export */ "WN": () => (/* binding */ DEFAULT_OPTIONS),
3040
- /* harmony export */ "aM": () => (/* binding */ useQuery),
3041
- /* harmony export */ "km": () => (/* binding */ getKey)
4375
+ /* harmony export */ "K": () => (/* binding */ override)
3042
4376
  /* harmony export */ });
3043
- /* harmony import */ var swr__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5941);
3044
- /* harmony import */ var _request__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(180);
3045
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([swr__WEBPACK_IMPORTED_MODULE_0__]);
3046
- swr__WEBPACK_IMPORTED_MODULE_0__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
3047
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3048
-
3049
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3050
-
3051
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3052
-
3053
-
3054
-
3055
- const getKey = (operationName, variables) => `${operationName}::${JSON.stringify(variables)}`;
3056
- const DEFAULT_OPTIONS = {
3057
- errorRetryCount: 3,
3058
- refreshWhenHidden: false,
3059
- refreshWhenOffline: false,
3060
- revalidateOnFocus: false,
3061
- revalidateOnReconnect: false,
3062
- shouldRetryOnError: true
4377
+ // This is an example of how it can be used on the starter.
4378
+ const SECTION = 'Alert';
4379
+ const override = {
4380
+ section: SECTION
3063
4381
  };
3064
- const useQuery = (operationName, variables, options) => (0,swr__WEBPACK_IMPORTED_MODULE_0__["default"])(() => options?.doNotRun ? null : getKey(operationName, variables), _objectSpread(_objectSpread({
3065
- fetcher: () => {
3066
- return new Promise(resolve => {
3067
- setTimeout(async () => {
3068
- resolve(await (0,_request__WEBPACK_IMPORTED_MODULE_1__/* .request */ .W)(operationName, variables, options));
3069
- });
3070
- });
3071
- }
3072
- }, DEFAULT_OPTIONS), options));
3073
- __webpack_async_result__();
3074
- } catch(e) { __webpack_async_result__(e); } });
4382
+
3075
4383
 
3076
4384
  /***/ }),
3077
4385
 
3078
- /***/ 5522:
4386
+ /***/ 5184:
3079
4387
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3080
4388
 
3081
4389
  "use strict";
3082
4390
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3083
- /* harmony export */ "Ju": () => (/* binding */ OverrideProvider),
3084
- /* harmony export */ "WB": () => (/* binding */ useOverrideClassName),
3085
- /* harmony export */ "r3": () => (/* binding */ useOverrideComponents)
4391
+ /* harmony export */ "m": () => (/* binding */ useViewItemListEvent)
3086
4392
  /* harmony export */ });
3087
- /* unused harmony export useOverrideContext */
4393
+ /* harmony import */ var _faststore_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1072);
3088
4394
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6689);
3089
4395
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
4396
+ /* harmony import */ var src_sdk_session__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7295);
3090
4397
 
3091
- const OverrideContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);
3092
- const OverrideProvider = OverrideContext.Provider;
3093
- const useOverrideContext = () => useContext(OverrideContext);
3094
- const useOverrideComponents = () => (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(OverrideContext).components;
3095
- const useOverrideClassName = () => (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(OverrideContext)?.className;
4398
+
4399
+
4400
+ const useViewItemListEvent = ({
4401
+ products,
4402
+ title,
4403
+ page,
4404
+ pageSize
4405
+ }) => {
4406
+ const {
4407
+ currency: {
4408
+ code
4409
+ }
4410
+ } = (0,src_sdk_session__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .kP)();
4411
+ const sendViewItemListEvent = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {
4412
+ (0,_faststore_sdk__WEBPACK_IMPORTED_MODULE_2__/* .sendAnalyticsEvent */ ._)({
4413
+ name: 'view_item_list',
4414
+ params: {
4415
+ item_list_name: title,
4416
+ item_list_id: title,
4417
+ items: products.map(({
4418
+ node: product
4419
+ }, index) => ({
4420
+ item_id: product.isVariantOf.productGroupID,
4421
+ item_name: product.isVariantOf.name,
4422
+ item_brand: product.brand.name,
4423
+ item_variant: product.sku,
4424
+ price: product.offers.offers[0].price,
4425
+ index: page * pageSize + index + 1,
4426
+ discount: product.offers.offers[0].listPrice - product.offers.offers[0].price,
4427
+ currency: code,
4428
+ item_variant_name: product.name,
4429
+ product_reference_id: product.gtin
4430
+ }))
4431
+ }
4432
+ });
4433
+ }, [code, products, title, page, pageSize]);
4434
+ return {
4435
+ sendViewItemListEvent
4436
+ };
4437
+ };
3096
4438
 
3097
4439
  /***/ }),
3098
4440
 
3099
- /***/ 170:
4441
+ /***/ 6073:
3100
4442
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3101
4443
 
3102
4444
  "use strict";
3103
4445
 
3104
4446
  // EXPORTS
3105
4447
  __webpack_require__.d(__webpack_exports__, {
3106
- "v": () => (/* binding */ getOverriddenSection)
4448
+ "i8": () => (/* binding */ cartStore),
4449
+ "jD": () => (/* binding */ useCart)
3107
4450
  });
3108
4451
 
3109
- // EXTERNAL MODULE: ./src/sdk/overrides/OverrideContext.tsx
3110
- var OverrideContext = __webpack_require__(5522);
4452
+ // UNUSED EXPORTS: ValidateCartMutation
4453
+
4454
+ // EXTERNAL MODULE: ../sdk/dist/utils/error.js
4455
+ var error = __webpack_require__(2254);
4456
+ // EXTERNAL MODULE: ../sdk/dist/store/composed.js + 4 modules
4457
+ var composed = __webpack_require__(8283);
4458
+ ;// CONCATENATED MODULE: ../sdk/dist/cart/index.js
4459
+
4460
+
4461
+ const createCartStore = (defaultCart, onValidate, namespace = "fs::cart") => {
4462
+ const store = (0,composed/* createStore */.M)(defaultCart, namespace, onValidate);
4463
+ const addItem = (item) => {
4464
+ if (!item.id) {
4465
+ throw new error/* SDKError */.q("You must provide an `id` for items");
4466
+ }
4467
+ if (item.quantity < 0) {
4468
+ throw new error/* SDKError */.q("Item quantity needs to be higher than zero");
4469
+ }
4470
+ const cart = store.read();
4471
+ const currentItem = getItem(item.id);
4472
+ const newItem = currentItem
4473
+ ? {
4474
+ ...item,
4475
+ quantity: currentItem.quantity + item.quantity,
4476
+ }
4477
+ : item;
4478
+ store.set({
4479
+ ...cart,
4480
+ items: currentItem
4481
+ ? cart.items.map((item) => item === currentItem ? newItem : item)
4482
+ : [...cart.items, newItem],
4483
+ });
4484
+ };
4485
+ const updateItemQuantity = (id, quantity) => {
4486
+ const cart = store.read();
4487
+ const currentItem = getItem(id);
4488
+ if (!currentItem) {
4489
+ throw new error/* SDKError */.q(`Item with id not found: ${id}`);
4490
+ }
4491
+ const newItem = {
4492
+ ...currentItem,
4493
+ quantity,
4494
+ };
4495
+ store.set({
4496
+ ...cart,
4497
+ items: cart.items
4498
+ .map((item) => item === currentItem ? newItem : item) // update item quantity
4499
+ .filter((item) => item.quantity > 0), // remove items if quantity is <= 0
4500
+ });
4501
+ };
4502
+ const removeItem = (id) => {
4503
+ const cart = store.read();
4504
+ const removed = getItem(id);
4505
+ store.set({
4506
+ ...cart,
4507
+ items: cart.items.filter((item) => item !== removed),
4508
+ });
4509
+ };
4510
+ const emptyCart = () => store.set({ ...store.read(), items: [] });
4511
+ const getItem = (id) => store.read().items.find((item) => item.id === id);
4512
+ const inCart = (id) => Boolean(getItem(id));
4513
+ const isEmpty = () => store.read().items.length === 0;
4514
+ return {
4515
+ ...store,
4516
+ getItem,
4517
+ addItem,
4518
+ updateItemQuantity,
4519
+ removeItem,
4520
+ emptyCart,
4521
+ inCart,
4522
+ isEmpty,
4523
+ };
4524
+ };
4525
+ //# sourceMappingURL=index.js.map
3111
4526
  // EXTERNAL MODULE: external "react"
3112
4527
  var external_react_ = __webpack_require__(6689);
3113
- var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_);
3114
- // EXTERNAL MODULE: ./src/sdk/tests/mark.tsx
3115
- var mark = __webpack_require__(2541);
3116
- // EXTERNAL MODULE: ./src/components/sections/Section/Section.tsx
3117
- var Section = __webpack_require__(3271);
3118
- // EXTERNAL MODULE: ./src/components/common/Alert/section.module.scss
3119
- var section_module = __webpack_require__(7651);
3120
- var section_module_default = /*#__PURE__*/__webpack_require__.n(section_module);
3121
- // EXTERNAL MODULE: external "react/jsx-runtime"
3122
- var jsx_runtime_ = __webpack_require__(997);
3123
- ;// CONCATENATED MODULE: ./src/components/common/Alert/Alert.tsx
3124
- const _excluded = ["content", "children"];
3125
-
4528
+ // EXTERNAL MODULE: ./faststore.config.js
4529
+ var faststore_config = __webpack_require__(7183);
4530
+ var faststore_config_default = /*#__PURE__*/__webpack_require__.n(faststore_config);
4531
+ // EXTERNAL MODULE: ./src/sdk/graphql/request.ts
4532
+ var request = __webpack_require__(180);
4533
+ // EXTERNAL MODULE: ./src/sdk/session/index.ts + 1 modules
4534
+ var session = __webpack_require__(7295);
4535
+ // EXTERNAL MODULE: ./src/sdk/useStore.ts
4536
+ var useStore = __webpack_require__(3818);
4537
+ ;// CONCATENATED MODULE: ./src/sdk/cart/index.ts
3126
4538
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3127
4539
 
3128
4540
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3129
4541
 
3130
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3131
-
3132
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
3133
-
3134
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
3135
-
3136
-
3137
-
3138
-
3139
-
3140
-
3141
-
3142
-
3143
- function Alert(_ref) {
3144
- let {
3145
- content,
3146
- children
3147
- } = _ref,
3148
- otherProps = _objectWithoutProperties(_ref, _excluded);
3149
-
3150
- const {
3151
- Alert: AlertWrapper
3152
- } = (0,OverrideContext/* useOverrideComponents */.r3)();
3153
- const {
3154
- 0: displayAlert,
3155
- 1: setDisplayAlert
3156
- } = (0,external_react_.useState)(true);
3157
- const onAlertClose = (0,external_react_.useCallback)(() => setDisplayAlert(false), [setDisplayAlert]);
3158
-
3159
- if (displayAlert === false) {
3160
- return null;
3161
- }
3162
-
3163
- return /*#__PURE__*/jsx_runtime_.jsx(Section/* default */.Z, {
3164
- className: `${(section_module_default()).section} section-alert`,
3165
- children: /*#__PURE__*/jsx_runtime_.jsx(AlertWrapper.Component, _objectSpread(_objectSpread({}, otherProps), {}, {
3166
- // Dynamic props, shouldn't be overridable
3167
- // This decision can be reviewed later if needed
3168
- onClose: onAlertClose,
3169
- children: content ?? children
3170
- }))
3171
- });
3172
- }
4542
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3173
4543
 
3174
- Alert.displayName = 'Alert';
3175
- /* harmony default export */ const Alert_Alert = ((0,mark/* mark */.B)(Alert));
3176
- ;// CONCATENATED MODULE: ./src/components/sections/Alert/Alert.tsx
3177
- function Alert_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3178
4544
 
3179
- function Alert_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? Alert_ownKeys(Object(source), !0).forEach(function (key) { Alert_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : Alert_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3180
4545
 
3181
- function Alert_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3182
4546
 
3183
4547
 
3184
4548
 
3185
4549
 
4550
+ const ValidateCartMutation = "ValidateCartMutation";
3186
4551
 
3187
- // TODO: Change actionPath and actionLabel with Link
3188
- function Alert_Alert_Alert({
3189
- icon,
3190
- content,
3191
- link: {
3192
- text,
3193
- to
3194
- },
3195
- dismissible
3196
- }) {
4552
+ const isGift = item => item.price === 0;
4553
+
4554
+ const getItemId = item => [item.itemOffered.sku, item.seller.identifier, item.itemOffered.additionalProperty?.map(({
4555
+ propertyID
4556
+ }) => propertyID).join('-')].filter(Boolean).join('::');
4557
+
4558
+ const validateCart = async cart => {
3197
4559
  const {
3198
- Alert: AlertWrapper,
3199
- Icon
3200
- } = (0,OverrideContext/* useOverrideComponents */.r3)();
3201
- return /*#__PURE__*/jsx_runtime_.jsx(Alert_Alert, Alert_objectSpread(Alert_objectSpread({
3202
- icon: /*#__PURE__*/jsx_runtime_.jsx(Icon.Component, Alert_objectSpread(Alert_objectSpread({}, Icon.props), {}, {
3203
- name: icon ?? Icon.props.name
3204
- }))
3205
- }, AlertWrapper.props), {}, {
3206
- link: Alert_objectSpread(Alert_objectSpread({}, AlertWrapper.props.link ?? {}), {}, {
3207
- children: text ?? AlertWrapper.props.link?.children,
3208
- href: to ?? AlertWrapper.props.link?.href,
3209
- target: AlertWrapper.props.link?.target ?? '_self'
3210
- }),
3211
- dismissible: dismissible ?? AlertWrapper.props.dismissible,
3212
- children: content
3213
- }));
3214
- }
4560
+ validateCart: validated = null
4561
+ } = await (0,request/* request */.W)(ValidateCartMutation, {
4562
+ session: session/* sessionStore.read */.Qf.read(),
4563
+ cart: {
4564
+ order: {
4565
+ orderNumber: cart.id,
4566
+ shouldSplitItem: cart.shouldSplitItem,
4567
+ acceptedOffer: cart.items.map(({
4568
+ price,
4569
+ listPrice,
4570
+ seller,
4571
+ quantity,
4572
+ itemOffered
4573
+ }) => ({
4574
+ price,
4575
+ listPrice,
4576
+ seller,
4577
+ quantity,
4578
+ itemOffered: {
4579
+ sku: itemOffered.sku,
4580
+ image: itemOffered.image,
4581
+ name: itemOffered.name,
4582
+ additionalProperty: itemOffered.additionalProperty
4583
+ }
4584
+ }))
4585
+ }
4586
+ }
4587
+ });
4588
+ return validated && {
4589
+ id: validated.order.orderNumber,
4590
+ items: validated.order.acceptedOffer.map(item => _objectSpread(_objectSpread({}, item), {}, {
4591
+ id: getItemId(item)
4592
+ })),
4593
+ messages: validated.messages
4594
+ };
4595
+ };
3215
4596
 
3216
- /* harmony default export */ const sections_Alert_Alert = (Alert_Alert_Alert);
3217
- // EXTERNAL MODULE: ./src/components/ui/Image/Image.tsx + 1 modules
3218
- var Image = __webpack_require__(5731);
3219
- // EXTERNAL MODULE: ./src/components/sections/Hero/section.module.scss
3220
- var Hero_section_module = __webpack_require__(6717);
3221
- var Hero_section_module_default = /*#__PURE__*/__webpack_require__.n(Hero_section_module);
3222
- ;// CONCATENATED MODULE: ./src/components/sections/Hero/Hero.tsx
3223
- function Hero_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4597
+ const [validationStore, onValidate] = (0,useStore/* createValidationStore */.d)(validateCart);
4598
+ const defaultCartStore = createCartStore((faststore_config_default()).cart, onValidate);
4599
+ const cartStore = _objectSpread(_objectSpread({}, defaultCartStore), {}, {
4600
+ addItem: item => {
4601
+ const cartItem = _objectSpread(_objectSpread({}, item), {}, {
4602
+ id: getItemId(item)
4603
+ });
3224
4604
 
3225
- function Hero_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? Hero_ownKeys(Object(source), !0).forEach(function (key) { Hero_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : Hero_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4605
+ defaultCartStore.addItem(cartItem);
4606
+ }
4607
+ });
4608
+ const useCart = () => {
4609
+ const cart = (0,useStore/* useStore */.o)(cartStore);
4610
+ const isValidating = (0,useStore/* useStore */.o)(validationStore);
4611
+ return (0,external_react_.useMemo)(() => _objectSpread(_objectSpread({}, cart), {}, {
4612
+ isValidating,
4613
+ messages: cart.messages,
4614
+ gifts: cart.items.filter(item => isGift(item)),
4615
+ items: cart.items.filter(item => !isGift(item)),
4616
+ totalUniqueItems: cart.items.length,
4617
+ totalItems: cart.items.reduce((acc, curr) => acc + (isGift(curr) ? 0 : curr.quantity), 0),
4618
+ total: cart.items.reduce((acc, curr) => acc + curr.price * curr.quantity, 0),
4619
+ subTotal: cart.items.reduce((acc, curr) => acc + curr.listPrice * curr.quantity, 0)
4620
+ }), [cart, isValidating]);
4621
+ };
3226
4622
 
3227
- function Hero_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4623
+ /***/ }),
3228
4624
 
4625
+ /***/ 3025:
4626
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3229
4627
 
4628
+ "use strict";
4629
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
4630
+ /* harmony export */ "Z": () => (/* binding */ MissingContentError)
4631
+ /* harmony export */ });
4632
+ class MissingContentError extends Error {
4633
+ constructor(options) {
4634
+ super(`Missing content on the CMS for content type ${options.contentType}. Add content before proceeding. Context: ${JSON.stringify(options, null, 2)}`);
4635
+ }
3230
4636
 
4637
+ }
3231
4638
 
4639
+ /***/ }),
3232
4640
 
4641
+ /***/ 180:
4642
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3233
4643
 
4644
+ "use strict";
4645
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
4646
+ /* harmony export */ "W": () => (/* binding */ request)
4647
+ /* harmony export */ });
4648
+ /* harmony import */ var _faststore_graphql_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5307);
4649
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3234
4650
 
4651
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3235
4652
 
3236
- const Hero = ({
3237
- link,
3238
- title,
3239
- subtitle,
3240
- image,
3241
- variant,
3242
- colorVariant,
3243
- icon
3244
- }) => {
3245
- const {
3246
- Hero: HeroWrapper,
3247
- HeroImage,
3248
- HeroHeader
3249
- } = (0,OverrideContext/* useOverrideComponents */.r3)();
3250
- return /*#__PURE__*/jsx_runtime_.jsx(Section/* default */.Z, {
3251
- className: `${(Hero_section_module_default()).section} section-hero`,
3252
- children: /*#__PURE__*/(0,jsx_runtime_.jsxs)(HeroWrapper.Component, Hero_objectSpread(Hero_objectSpread({}, HeroWrapper.props), {}, {
3253
- variant: variant ?? HeroWrapper.props.variant ?? 'primary',
3254
- colorVariant: colorVariant ?? HeroWrapper.props.colorVariant ?? 'main',
3255
- children: [/*#__PURE__*/jsx_runtime_.jsx(HeroImage.Component, Hero_objectSpread(Hero_objectSpread({}, HeroImage.props), {}, {
3256
- children: /*#__PURE__*/jsx_runtime_.jsx(Image/* default */.Z, {
3257
- loading: "eager",
3258
- src: image.src,
3259
- alt: image.alt,
3260
- width: 360,
3261
- height: 240,
3262
- sizes: "(max-width: 360px) 50vw, (max-width: 768px) 90vw, 50vw"
3263
- })
3264
- })), /*#__PURE__*/jsx_runtime_.jsx(HeroHeader.Component, Hero_objectSpread({
3265
- title: title,
3266
- subtitle: subtitle,
3267
- link: link?.url,
3268
- linkText: link?.text,
3269
- linkTargetBlank: link?.linkTargetBlank,
3270
- icon: icon
3271
- }, HeroHeader.props))]
3272
- }))
3273
- });
3274
- };
4653
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3275
4654
 
3276
- /* harmony default export */ const Hero_Hero = (Hero);
3277
- // EXTERNAL MODULE: ./src/components/sections/BannerText/section.module.scss
3278
- var BannerText_section_module = __webpack_require__(7283);
3279
- var BannerText_section_module_default = /*#__PURE__*/__webpack_require__.n(BannerText_section_module);
3280
- ;// CONCATENATED MODULE: ./src/components/sections/BannerText/BannerText.tsx
3281
- function BannerText_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3282
4655
 
3283
- function BannerText_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? BannerText_ownKeys(Object(source), !0).forEach(function (key) { BannerText_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : BannerText_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4656
+ const request = async (operationName, variables, options) => {
4657
+ const {
4658
+ data,
4659
+ errors
4660
+ } = await (0,_faststore_graphql_utils__WEBPACK_IMPORTED_MODULE_0__/* .request */ .WY)('/api/graphql', _objectSpread(_objectSpread({}, options), {}, {
4661
+ variables,
4662
+ operationName
4663
+ }));
4664
+
4665
+ if (errors?.length) {
4666
+ throw errors[0];
4667
+ }
3284
4668
 
3285
- function BannerText_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4669
+ return data;
4670
+ };
3286
4671
 
4672
+ /***/ }),
3287
4673
 
4674
+ /***/ 7732:
4675
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
3288
4676
 
4677
+ "use strict";
4678
+ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
4679
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
4680
+ /* harmony export */ "WN": () => (/* binding */ DEFAULT_OPTIONS),
4681
+ /* harmony export */ "aM": () => (/* binding */ useQuery),
4682
+ /* harmony export */ "km": () => (/* binding */ getKey)
4683
+ /* harmony export */ });
4684
+ /* harmony import */ var swr__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5941);
4685
+ /* harmony import */ var _request__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(180);
4686
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([swr__WEBPACK_IMPORTED_MODULE_0__]);
4687
+ swr__WEBPACK_IMPORTED_MODULE_0__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
4688
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3289
4689
 
4690
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3290
4691
 
4692
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3291
4693
 
3292
- // TODO: Change actionPath and actionLabel with Link
3293
- function BannerText({
3294
- title,
3295
- caption,
3296
- link: {
3297
- url: linkUrl,
3298
- text: linkText,
3299
- linkTargetBlank
3300
- },
3301
- variant,
3302
- colorVariant
3303
- }) {
3304
- const {
3305
- BannerText: BannerTextWrapper,
3306
- BannerTextContent
3307
- } = (0,OverrideContext/* useOverrideComponents */.r3)();
3308
- return /*#__PURE__*/jsx_runtime_.jsx(Section/* default */.Z, {
3309
- className: `${(BannerText_section_module_default()).section} section-banner layout__section`,
3310
- children: /*#__PURE__*/jsx_runtime_.jsx("div", {
3311
- className: "layout__content",
3312
- children: /*#__PURE__*/jsx_runtime_.jsx(BannerTextWrapper.Component, BannerText_objectSpread(BannerText_objectSpread({}, BannerTextWrapper.props), {}, {
3313
- variant: variant ?? BannerTextWrapper.props.variant ?? 'primary',
3314
- colorVariant: colorVariant ?? BannerTextWrapper.props.colorVariant ?? 'main',
3315
- children: /*#__PURE__*/jsx_runtime_.jsx(BannerTextContent.Component, BannerText_objectSpread(BannerText_objectSpread({}, BannerTextContent.props), {}, {
3316
- title: title,
3317
- caption: caption,
3318
- link: linkUrl ?? BannerTextContent.props.link,
3319
- linkText: linkText ?? BannerTextContent.props.linkText,
3320
- linkTargetBlank: linkTargetBlank ?? BannerTextContent.props.linkTargetBlank
3321
- }))
3322
- }))
3323
- })
3324
- });
3325
- }
3326
4694
 
3327
- /* harmony default export */ const BannerText_BannerText = (BannerText);
3328
- // EXTERNAL MODULE: ../components/dist/esm/molecules/Alert/Alert.js
3329
- var molecules_Alert_Alert = __webpack_require__(8138);
3330
- // EXTERNAL MODULE: ../components/dist/esm/atoms/Icon/Icon.js
3331
- var Icon = __webpack_require__(2614);
3332
- ;// CONCATENATED MODULE: ./src/components/sections/Alert/DefaultComponents.ts
3333
4695
 
3334
- const AlertDefaultComponents = {
3335
- Alert: molecules_Alert_Alert/* default */.Z,
3336
- Icon: Icon/* default */.Z
4696
+ const getKey = (operationName, variables) => `${operationName}::${JSON.stringify(variables)}`;
4697
+ const DEFAULT_OPTIONS = {
4698
+ errorRetryCount: 3,
4699
+ refreshWhenHidden: false,
4700
+ refreshWhenOffline: false,
4701
+ revalidateOnFocus: false,
4702
+ revalidateOnReconnect: false,
4703
+ shouldRetryOnError: true
3337
4704
  };
3338
- ;// CONCATENATED MODULE: ../components/dist/esm/organisms/Hero/Hero.js
3339
-
3340
- const HeroContext = (0,external_react_.createContext)(undefined);
3341
- const Hero_Hero_Hero = (0,external_react_.forwardRef)(function Hero({ children, testId = 'fs-hero', variant = 'primary', colorVariant = 'main', ...otherProps }, ref) {
3342
- const context = { variant, colorVariant };
3343
- return (external_react_default().createElement(HeroContext.Provider, { value: context },
3344
- external_react_default().createElement("article", { ref: ref, "data-fs-hero": true, "data-fs-hero-variant": variant, "data-fs-hero-color-variant": colorVariant, "data-testid": testId, ...otherProps }, children)));
3345
- });
3346
- function useHero() {
3347
- const context = (0,external_react_.useContext)(HeroContext);
3348
- if (context === undefined) {
3349
- throw new Error('Do not use Hero components outside the Hero context.');
3350
- }
3351
- return context;
3352
- }
3353
- /* harmony default export */ const organisms_Hero_Hero = (Hero_Hero_Hero);
3354
- //# sourceMappingURL=Hero.js.map
3355
- ;// CONCATENATED MODULE: ../components/dist/esm/organisms/Hero/HeroImage.js
4705
+ const useQuery = (operationName, variables, options) => (0,swr__WEBPACK_IMPORTED_MODULE_0__["default"])(() => options?.doNotRun ? null : getKey(operationName, variables), _objectSpread(_objectSpread({
4706
+ fetcher: () => {
4707
+ return new Promise(resolve => {
4708
+ setTimeout(async () => {
4709
+ resolve(await (0,_request__WEBPACK_IMPORTED_MODULE_1__/* .request */ .W)(operationName, variables, options));
4710
+ });
4711
+ });
4712
+ }
4713
+ }, DEFAULT_OPTIONS), options));
4714
+ __webpack_async_result__();
4715
+ } catch(e) { __webpack_async_result__(e); } });
3356
4716
 
3357
- const HeroImage = (0,external_react_.forwardRef)(function HeroImage({ children, testId = 'fs-hero-image', ...otherProps }, ref) {
3358
- return (external_react_default().createElement("div", { ref: ref, "data-fs-hero-image": true, "data-testid": testId, ...otherProps }, children));
3359
- });
3360
- /* harmony default export */ const Hero_HeroImage = (HeroImage);
3361
- //# sourceMappingURL=HeroImage.js.map
3362
- // EXTERNAL MODULE: ../components/dist/esm/molecules/LinkButton/LinkButton.js
3363
- var LinkButton = __webpack_require__(3922);
3364
- ;// CONCATENATED MODULE: ../components/dist/esm/organisms/Hero/HeroHeader.js
4717
+ /***/ }),
3365
4718
 
4719
+ /***/ 5522:
4720
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3366
4721
 
4722
+ "use strict";
4723
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
4724
+ /* harmony export */ "Ju": () => (/* binding */ OverrideProvider),
4725
+ /* harmony export */ "WB": () => (/* binding */ useOverrideClassName),
4726
+ /* harmony export */ "r3": () => (/* binding */ useOverrideComponents)
4727
+ /* harmony export */ });
4728
+ /* unused harmony export useOverrideContext */
4729
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6689);
4730
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
3367
4731
 
3368
- const HeroHeader = (0,external_react_.forwardRef)(function HeroHeader({ icon, link, title, linkText, linkTargetBlank, subtitle, children, testId = 'fs-hero-heading', ...otherProps }, ref) {
3369
- const { variant, colorVariant } = useHero();
3370
- return (external_react_default().createElement("header", { ref: ref, "data-fs-hero-heading": true, "data-testid": testId, ...otherProps },
3371
- external_react_default().createElement("div", { "data-fs-hero-wrapper": true, "data-fs-content": "hero" },
3372
- external_react_default().createElement("div", { "data-fs-hero-info": true },
3373
- external_react_default().createElement("h1", { "data-fs-hero-title": true }, title),
3374
- external_react_default().createElement("p", { "data-fs-hero-subtitle": true }, subtitle),
3375
- !!link && (external_react_default().createElement(LinkButton/* default */.Z, { href: link, inverse: colorVariant === 'main', icon: external_react_default().createElement(Icon/* default */.Z, { name: "ArrowRight" }), iconPosition: "right", target: linkTargetBlank ? '_blank' : undefined }, linkText))),
3376
- !!icon && variant === 'secondary' && (external_react_default().createElement("span", { "data-fs-hero-icon": true }, icon)))));
3377
- });
3378
- /* harmony default export */ const Hero_HeroHeader = (HeroHeader);
3379
- //# sourceMappingURL=HeroHeader.js.map
3380
- ;// CONCATENATED MODULE: ./src/components/sections/Hero/DefaultComponents.ts
4732
+ const OverrideContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);
4733
+ const OverrideProvider = OverrideContext.Provider;
4734
+ const useOverrideContext = () => useContext(OverrideContext);
4735
+ const useOverrideComponents = () => (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(OverrideContext).components;
4736
+ const useOverrideClassName = () => (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(OverrideContext)?.className;
3381
4737
 
3382
- const HeroDefaultComponents = {
3383
- Hero: organisms_Hero_Hero,
3384
- HeroImage: Hero_HeroImage,
3385
- HeroHeader: Hero_HeroHeader
3386
- };
3387
- ;// CONCATENATED MODULE: ../components/dist/esm/organisms/BannerText/BannerText.js
4738
+ /***/ }),
3388
4739
 
3389
- const BannerTextContext = (0,external_react_.createContext)(undefined);
3390
- const BannerText_BannerText_BannerText = (0,external_react_.forwardRef)(function BannerText({ children, testId = 'fs-banner-text', variant = 'primary', colorVariant = 'main', ...otherProps }, ref) {
3391
- const context = { variant, colorVariant };
3392
- return (external_react_default().createElement(BannerTextContext.Provider, { value: context },
3393
- external_react_default().createElement("article", { ref: ref, "data-fs-banner-text": true, "data-fs-banner-text-variant": variant, "data-fs-banner-text-color-variant": colorVariant, "data-testid": testId, ...otherProps }, children)));
3394
- });
3395
- function useBannerText() {
3396
- const context = (0,external_react_.useContext)(BannerTextContext);
3397
- if (context === undefined) {
3398
- throw new Error('Do not use BannerText components outside the BannerText context.');
3399
- }
3400
- return context;
3401
- }
3402
- /* harmony default export */ const organisms_BannerText_BannerText = (BannerText_BannerText_BannerText);
3403
- //# sourceMappingURL=BannerText.js.map
3404
- ;// CONCATENATED MODULE: ../components/dist/esm/organisms/BannerText/BannerTextContent.js
4740
+ /***/ 5953:
4741
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3405
4742
 
4743
+ "use strict";
4744
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
4745
+ /* harmony export */ "En": () => (/* binding */ isSearchPage),
4746
+ /* harmony export */ "OJ": () => (/* binding */ isPLP),
4747
+ /* harmony export */ "ZP": () => (__WEBPACK_DEFAULT_EXPORT__),
4748
+ /* harmony export */ "al": () => (/* binding */ usePDP),
4749
+ /* harmony export */ "qt": () => (/* binding */ usePage),
4750
+ /* harmony export */ "tS": () => (/* binding */ isPDP)
4751
+ /* harmony export */ });
4752
+ /* unused harmony exports usePLP, useSearchPage */
4753
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6689);
4754
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
4755
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(997);
4756
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__);
3406
4757
 
3407
4758
 
3408
- const BannerTextContent = (0,external_react_.forwardRef)(function BannerTextContent({ testId = 'fs-banner-text-content', title, caption, link, linkText, linkTargetBlank, ...otherProps }, ref) {
3409
- const { variant, colorVariant } = useBannerText();
3410
- return (external_react_default().createElement("header", { ref: ref, "data-fs-banner-text-content": true, "data-fs-content": "banner-text", "data-testid": testId, ...otherProps },
3411
- external_react_default().createElement("div", { "data-fs-banner-text-heading": true, "data-fs-banner-text-color-variant": colorVariant },
3412
- external_react_default().createElement("h2", null, title),
3413
- variant === 'secondary' && caption && external_react_default().createElement("p", null, caption)),
3414
- external_react_default().createElement(LinkButton/* default */.Z, { "data-fs-banner-text-link": true, href: link, variant: variant, inverse: colorVariant === 'main', "aria-label": linkText, target: linkTargetBlank ? '_blank' : undefined }, linkText)));
3415
- });
3416
- /* harmony default export */ const BannerText_BannerTextContent = (BannerTextContent);
3417
- //# sourceMappingURL=BannerTextContent.js.map
3418
- ;// CONCATENATED MODULE: ./src/components/sections/BannerText/DefaultComponents.ts
4759
+ const isPDP = x => x?.data?.product?.sku != undefined && x?.data?.product?.sku != null;
4760
+ const isPLP = x => x?.data?.collection?.seo != undefined && x?.data?.collection?.seo != null && x?.data?.collection?.sku == undefined;
4761
+ const isSearchPage = x => x === undefined || x?.data?.title != undefined || x?.data?.searchTerm != undefined;
4762
+ const PageContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);
3419
4763
 
3420
- const BannerTextDefaultComponents = {
3421
- BannerText: organisms_BannerText_BannerText,
3422
- BannerTextContent: BannerText_BannerTextContent
3423
- };
3424
- ;// CONCATENATED MODULE: ./src/sdk/overrides/sections.tsx
4764
+ function PageProvider({
4765
+ context,
4766
+ children
4767
+ }) {
4768
+ const value = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({
4769
+ context
4770
+ }), [context]);
4771
+ return /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx(PageContext.Provider, {
4772
+ value: value,
4773
+ children: children
4774
+ });
4775
+ }
3425
4776
 
4777
+ function usePage() {
4778
+ const {
4779
+ context
4780
+ } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(PageContext);
3426
4781
 
4782
+ if (context == null) {
4783
+ throw new Error('Missing Overrides context on React tree');
4784
+ }
3427
4785
 
4786
+ return context;
4787
+ }
4788
+ const usePDP = () => usePage();
4789
+ const usePLP = () => usePage();
4790
+ const useSearchPage = () => usePage();
4791
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PageProvider);
3428
4792
 
4793
+ /***/ }),
3429
4794
 
4795
+ /***/ 8788:
4796
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
3430
4797
 
3431
- const Sections = {
3432
- Alert: sections_Alert_Alert,
3433
- Hero: Hero_Hero,
3434
- BannerText: BannerText_BannerText
3435
- };
3436
- const DefaultComponents = {
3437
- Alert: AlertDefaultComponents,
3438
- Hero: HeroDefaultComponents,
3439
- BannerText: BannerTextDefaultComponents
3440
- };
3441
- // EXTERNAL MODULE: ./src/sdk/overrides/overrides.ts
3442
- var overrides = __webpack_require__(7506);
3443
- ;// CONCATENATED MODULE: ./src/sdk/overrides/getOverriddenSection.tsx
3444
- function getOverriddenSection_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4798
+ "use strict";
4799
+ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
4800
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
4801
+ /* harmony export */ "v": () => (/* binding */ getOverriddenSection)
4802
+ /* harmony export */ });
4803
+ /* harmony import */ var _OverrideContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5522);
4804
+ /* harmony import */ var _sections__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4027);
4805
+ /* harmony import */ var _overrides__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7506);
4806
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(997);
4807
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
4808
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_sections__WEBPACK_IMPORTED_MODULE_2__]);
4809
+ _sections__WEBPACK_IMPORTED_MODULE_2__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
4810
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3445
4811
 
3446
- function getOverriddenSection_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? getOverriddenSection_ownKeys(Object(source), !0).forEach(function (key) { getOverriddenSection_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : getOverriddenSection_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4812
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3447
4813
 
3448
- function getOverriddenSection_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4814
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3449
4815
 
3450
4816
 
3451
4817
 
@@ -3468,9 +4834,9 @@ function createOverriddenSection({
3468
4834
  return function OverriddenSection(props) {
3469
4835
  /** This type wizardry is here because the props won't behave correctly if nothing is done */
3470
4836
  const SectionComponent = Section;
3471
- return /*#__PURE__*/jsx_runtime_.jsx(OverrideContext/* OverrideProvider */.Ju, {
4837
+ return /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_OverrideContext__WEBPACK_IMPORTED_MODULE_1__/* .OverrideProvider */ .Ju, {
3472
4838
  value: overrideContextValue,
3473
- children: /*#__PURE__*/jsx_runtime_.jsx(SectionComponent, getOverriddenSection_objectSpread({}, props))
4839
+ children: /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(SectionComponent, _objectSpread({}, props))
3474
4840
  });
3475
4841
  };
3476
4842
  }
@@ -3485,19 +4851,21 @@ function createOverriddenSection({
3485
4851
 
3486
4852
 
3487
4853
  function getOverriddenSection(override) {
3488
- const defaultComponents = DefaultComponents[override.section];
4854
+ const defaultComponents = _sections__WEBPACK_IMPORTED_MODULE_2__/* .DefaultComponents */ .O[override.section];
3489
4855
 
3490
4856
  if (!defaultComponents) {
3491
4857
  throw new Error(`Section ${override.section} does not exist. Please provide a valid section name to override.`);
3492
4858
  }
3493
4859
 
3494
- const sectionOverrides = (0,overrides/* getSectionOverrides */.f)(defaultComponents, override);
4860
+ const sectionOverrides = (0,_overrides__WEBPACK_IMPORTED_MODULE_3__/* .getSectionOverrides */ .f)(defaultComponents, override);
3495
4861
  return createOverriddenSection({
3496
- Section: Sections[override.section],
4862
+ Section: _sections__WEBPACK_IMPORTED_MODULE_2__/* .Sections */ .b[override.section],
3497
4863
  sectionOverrides: sectionOverrides,
3498
4864
  className: override.className
3499
4865
  });
3500
4866
  }
4867
+ __webpack_async_result__();
4868
+ } catch(e) { __webpack_async_result__(e); } });
3501
4869
 
3502
4870
  /***/ }),
3503
4871
 
@@ -3542,6 +4910,244 @@ function getSectionOverrides(defaultComponents, override) {
3542
4910
 
3543
4911
  /***/ }),
3544
4912
 
4913
+ /***/ 4027:
4914
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
4915
+
4916
+ "use strict";
4917
+ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
4918
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
4919
+ /* harmony export */ "O": () => (/* binding */ DefaultComponents),
4920
+ /* harmony export */ "b": () => (/* binding */ Sections)
4921
+ /* harmony export */ });
4922
+ /* harmony import */ var _components_sections_Alert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6893);
4923
+ /* harmony import */ var _components_sections_BannerText__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9315);
4924
+ /* harmony import */ var _components_sections_Hero__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2849);
4925
+ /* harmony import */ var _components_sections_ProductShelf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(8569);
4926
+ /* harmony import */ var _components_sections_CrossSellingShelf__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(994);
4927
+ /* harmony import */ var _components_sections_Alert_DefaultComponents__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6948);
4928
+ /* harmony import */ var _components_sections_BannerText_DefaultComponents__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(719);
4929
+ /* harmony import */ var src_components_sections_CrossSellingShelf_DefaultComponents__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(8435);
4930
+ /* harmony import */ var _components_sections_Hero_DefaultComponents__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(9569);
4931
+ /* harmony import */ var _components_sections_ProductShelf_DefaultComponents__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(2432);
4932
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_sections_CrossSellingShelf__WEBPACK_IMPORTED_MODULE_2__, _components_sections_ProductShelf__WEBPACK_IMPORTED_MODULE_4__]);
4933
+ ([_components_sections_CrossSellingShelf__WEBPACK_IMPORTED_MODULE_2__, _components_sections_ProductShelf__WEBPACK_IMPORTED_MODULE_4__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
4934
+
4935
+
4936
+
4937
+
4938
+
4939
+
4940
+
4941
+
4942
+
4943
+
4944
+ const Sections = {
4945
+ Alert: _components_sections_Alert__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z,
4946
+ BannerText: _components_sections_BannerText__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z,
4947
+ CrossSellingShelf: _components_sections_CrossSellingShelf__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z,
4948
+ Hero: _components_sections_Hero__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z,
4949
+ ProductShelf: _components_sections_ProductShelf__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z
4950
+ };
4951
+ const DefaultComponents = {
4952
+ Alert: _components_sections_Alert_DefaultComponents__WEBPACK_IMPORTED_MODULE_5__/* .AlertDefaultComponents */ .p,
4953
+ BannerText: _components_sections_BannerText_DefaultComponents__WEBPACK_IMPORTED_MODULE_6__/* .BannerTextDefaultComponents */ .b,
4954
+ Hero: _components_sections_Hero_DefaultComponents__WEBPACK_IMPORTED_MODULE_7__/* .HeroDefaultComponents */ .O,
4955
+ ProductShelf: _components_sections_ProductShelf_DefaultComponents__WEBPACK_IMPORTED_MODULE_8__/* .ProductShelfDefaultComponents */ .B,
4956
+ CrossSellingShelf: src_components_sections_CrossSellingShelf_DefaultComponents__WEBPACK_IMPORTED_MODULE_9__/* .CrossSellingShelfDefaultComponents */ .q
4957
+ };
4958
+ __webpack_async_result__();
4959
+ } catch(e) { __webpack_async_result__(e); } });
4960
+
4961
+ /***/ }),
4962
+
4963
+ /***/ 5346:
4964
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4965
+
4966
+ "use strict";
4967
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
4968
+ /* harmony export */ "P": () => (/* binding */ useFormattedPrice)
4969
+ /* harmony export */ });
4970
+ /* unused harmony export usePriceFormatter */
4971
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6689);
4972
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
4973
+ /* harmony import */ var _session__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7295);
4974
+
4975
+
4976
+ const usePriceFormatter = ({
4977
+ decimals
4978
+ } = {}) => {
4979
+ const {
4980
+ currency,
4981
+ locale
4982
+ } = (0,_session__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .kP)();
4983
+ return (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(price => Intl.NumberFormat(locale, {
4984
+ style: 'currency',
4985
+ currency: currency.code,
4986
+ minimumFractionDigits: decimals ? 2 : 0
4987
+ }).format(price), [currency.code, locale, decimals]);
4988
+ };
4989
+ const useFormattedPrice = price => {
4990
+ const formatter = usePriceFormatter();
4991
+ return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => formatter(price), [formatter, price]);
4992
+ };
4993
+
4994
+ /***/ }),
4995
+
4996
+ /***/ 2523:
4997
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4998
+
4999
+ "use strict";
5000
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
5001
+ /* harmony export */ "y": () => (/* binding */ useLocalizedVariables)
5002
+ /* harmony export */ });
5003
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6689);
5004
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
5005
+ /* harmony import */ var _session__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7295);
5006
+ /* harmony import */ var src_constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8459);
5007
+
5008
+
5009
+
5010
+
5011
+ const toArray = x => Array.isArray(x) ? x : x ? [x] : [];
5012
+
5013
+ const useLocalizedVariables = ({
5014
+ first,
5015
+ after,
5016
+ sort,
5017
+ term,
5018
+ selectedFacets
5019
+ }) => {
5020
+ const {
5021
+ channel,
5022
+ locale
5023
+ } = (0,_session__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .kP)();
5024
+ return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {
5025
+ const facets = toArray(selectedFacets);
5026
+ return {
5027
+ first: first ?? src_constants__WEBPACK_IMPORTED_MODULE_2__/* .ITEMS_PER_SECTION */ .K,
5028
+ after: after ?? '0',
5029
+ sort: sort ?? 'score_desc',
5030
+ term: term ?? '',
5031
+ selectedFacets: [...facets, {
5032
+ key: 'channel',
5033
+ value: channel ?? ''
5034
+ }, {
5035
+ key: 'locale',
5036
+ value: locale
5037
+ }]
5038
+ };
5039
+ }, [selectedFacets, first, after, sort, term, channel, locale]);
5040
+ };
5041
+
5042
+ /***/ }),
5043
+
5044
+ /***/ 9854:
5045
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
5046
+
5047
+ "use strict";
5048
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
5049
+ /* harmony export */ "w": () => (/* binding */ useProductLink)
5050
+ /* harmony export */ });
5051
+ /* harmony import */ var _faststore_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1072);
5052
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6689);
5053
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
5054
+ /* harmony import */ var _session__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7295);
5055
+
5056
+
5057
+
5058
+ const useProductLink = ({
5059
+ index,
5060
+ product,
5061
+ selectedOffer
5062
+ }) => {
5063
+ const {
5064
+ slug
5065
+ } = product;
5066
+ const {
5067
+ currency: {
5068
+ code
5069
+ }
5070
+ } = (0,_session__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .kP)();
5071
+ const onClick = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {
5072
+ (0,_faststore_sdk__WEBPACK_IMPORTED_MODULE_2__/* .sendAnalyticsEvent */ ._)({
5073
+ name: 'select_item',
5074
+ params: {
5075
+ items: [{
5076
+ item_id: product.isVariantOf.productGroupID,
5077
+ item_name: product.isVariantOf.name,
5078
+ item_brand: product.brand.name,
5079
+ item_variant: product.sku,
5080
+ index,
5081
+ price: product.offers.offers[selectedOffer].price,
5082
+ discount: product.offers.offers[selectedOffer].listPrice - product.offers.offers[selectedOffer].price,
5083
+ currency: code,
5084
+ item_variant_name: product.name,
5085
+ product_reference_id: product.gtin
5086
+ }]
5087
+ }
5088
+ });
5089
+ (0,_faststore_sdk__WEBPACK_IMPORTED_MODULE_2__/* .sendAnalyticsEvent */ ._)({
5090
+ name: 'search_select_item',
5091
+ params: {
5092
+ url: window.location.href,
5093
+ items: [{
5094
+ item_id: product.isVariantOf.productGroupID,
5095
+ item_variant: product.sku,
5096
+ index
5097
+ }]
5098
+ }
5099
+ });
5100
+ }, [code, product, index, selectedOffer]);
5101
+ return {
5102
+ href: `/${slug}/p`,
5103
+ onClick,
5104
+ 'data-testid': 'product-link'
5105
+ };
5106
+ };
5107
+
5108
+ /***/ }),
5109
+
5110
+ /***/ 4867:
5111
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
5112
+
5113
+ "use strict";
5114
+ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
5115
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
5116
+ /* harmony export */ "k": () => (/* binding */ useProductsQuery)
5117
+ /* harmony export */ });
5118
+ /* unused harmony export query */
5119
+ /* harmony import */ var _graphql_useQuery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7732);
5120
+ /* harmony import */ var _useLocalizedVariables__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2523);
5121
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_graphql_useQuery__WEBPACK_IMPORTED_MODULE_1__]);
5122
+ _graphql_useQuery__WEBPACK_IMPORTED_MODULE_1__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
5123
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
5124
+
5125
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
5126
+
5127
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5128
+
5129
+
5130
+
5131
+ const query = "ClientManyProductsQuery";
5132
+ /**
5133
+ * Use this hook for fetching a list of products, like shelves and tiles
5134
+ */
5135
+
5136
+ const useProductsQuery = (variables, options) => {
5137
+ const localizedVariables = (0,_useLocalizedVariables__WEBPACK_IMPORTED_MODULE_0__/* .useLocalizedVariables */ .y)(variables);
5138
+ const {
5139
+ data
5140
+ } = (0,_graphql_useQuery__WEBPACK_IMPORTED_MODULE_1__/* .useQuery */ .aM)(query, localizedVariables, _objectSpread({
5141
+ fallbackData: null,
5142
+ suspense: true
5143
+ }, options));
5144
+ return data;
5145
+ };
5146
+ __webpack_async_result__();
5147
+ } catch(e) { __webpack_async_result__(e); } });
5148
+
5149
+ /***/ }),
5150
+
3545
5151
  /***/ 5882:
3546
5152
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3547
5153
 
@@ -3897,6 +5503,26 @@ const getPage = async options => {
3897
5503
 
3898
5504
  /***/ }),
3899
5505
 
5506
+ /***/ 3952:
5507
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
5508
+
5509
+ "use strict";
5510
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
5511
+ /* harmony export */ "B": () => (/* binding */ textToKebabCase)
5512
+ /* harmony export */ });
5513
+ //Input "Example Text!". Output: example-text
5514
+ function textToKebabCase(text) {
5515
+ // Replace spaces and special characters with hyphens
5516
+ let kebabCase = text.replace(/[^\w\s]/gi, '-'); // Remove whitespace
5517
+
5518
+ kebabCase = kebabCase.replace(/\s+/g, '-'); // Convert to lowercase
5519
+
5520
+ kebabCase = kebabCase.toLowerCase();
5521
+ return kebabCase ?? '';
5522
+ }
5523
+
5524
+ /***/ }),
5525
+
3900
5526
  /***/ 7651:
3901
5527
  /***/ ((module) => {
3902
5528
 
@@ -3972,6 +5598,18 @@ module.exports = {
3972
5598
  };
3973
5599
 
3974
5600
 
5601
+ /***/ }),
5602
+
5603
+ /***/ 6627:
5604
+ /***/ ((module) => {
5605
+
5606
+ // Exports
5607
+ module.exports = {
5608
+ "section": "section_section__C1DoH",
5609
+ "loading": "section_loading__k5bCF"
5610
+ };
5611
+
5612
+
3975
5613
  /***/ }),
3976
5614
 
3977
5615
  /***/ 3472: