@faststore/core 3.99.0 → 4.0.0-dev.1

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 (543) hide show
  1. package/.turbo/turbo-generate.log +29 -0
  2. package/.turbo/turbo-test.log +47 -16
  3. package/@generated/cached-operations.json +24 -0
  4. package/@generated/gql.ts +134 -210
  5. package/@generated/graphql.ts +1628 -3037
  6. package/@generated/index.ts +1 -1
  7. package/@generated/persisted-documents.json +1 -1
  8. package/@generated/schema.graphql +1854 -1743
  9. package/CHANGELOG.md +12 -2
  10. package/README.md +2 -1
  11. package/api/index.ts +6 -7
  12. package/cms/faststore/base.jsonc +1 -1
  13. package/cms/faststore/components/cms_component__alert.jsonc +5 -1
  14. package/cms/faststore/components/cms_component__bannernewsletter.jsonc +5 -1
  15. package/cms/faststore/components/cms_component__bannertext.jsonc +5 -1
  16. package/cms/faststore/components/cms_component__breadcrumb.jsonc +16 -4
  17. package/cms/faststore/components/cms_component__cartsidebar.jsonc +21 -1
  18. package/cms/faststore/components/cms_component__children.jsonc +5 -1
  19. package/cms/faststore/components/cms_component__crosssellingshelf.jsonc +5 -1
  20. package/cms/faststore/components/cms_component__emptystate.jsonc +8 -3
  21. package/cms/faststore/components/cms_component__footer.jsonc +9 -3
  22. package/cms/faststore/components/cms_component__hero.jsonc +5 -1
  23. package/cms/faststore/components/cms_component__incentives.jsonc +5 -1
  24. package/cms/faststore/components/cms_component__navbar.jsonc +139 -1
  25. package/cms/faststore/components/cms_component__newsletter.jsonc +5 -1
  26. package/cms/faststore/components/cms_component__productdetails.jsonc +33 -1
  27. package/cms/faststore/components/cms_component__productgallery.jsonc +113 -15
  28. package/cms/faststore/components/cms_component__productshelf.jsonc +5 -1
  29. package/cms/faststore/components/cms_component__producttiles.jsonc +5 -1
  30. package/cms/faststore/components/cms_component__regionbar.jsonc +5 -1
  31. package/cms/faststore/components/cms_component__regionmodal.jsonc +5 -1
  32. package/cms/faststore/components/cms_component__regionpopover.jsonc +5 -1
  33. package/cms/faststore/components/cms_component__scrolltotopbutton.jsonc +29 -0
  34. package/cms/faststore/components/cms_component__search.jsonc +5 -1
  35. package/cms/faststore/content-types.json +115 -0
  36. package/cms/faststore/pages/cms_content_type__globalsections.jsonc +52 -0
  37. package/cms/faststore/pages/cms_content_type__home.jsonc +6 -0
  38. package/cms/faststore/pages/cms_content_type__landingpage.jsonc +8 -1
  39. package/cms/faststore/pages/cms_content_type__pdp.jsonc +6 -0
  40. package/cms/faststore/pages/cms_content_type__plp.jsonc +17 -0
  41. package/cms/faststore/pages/cms_content_type__search.jsonc +17 -0
  42. package/cms/faststore/schema.json +547 -43
  43. package/cms/faststore/sections.json +330 -21
  44. package/discovery.config.default.js +49 -3
  45. package/next-env.d.ts +2 -1
  46. package/next.config.js +48 -26
  47. package/package.json +47 -60
  48. package/public/icons.svg +5 -1
  49. package/scripts/i18n.js +76 -0
  50. package/src/components/account/MyAccountDrawer/OrganizationDrawer/OrganizationDrawer.tsx +2 -1
  51. package/src/components/account/MyAccountDrawer/OrganizationDrawer/section.module.scss +25 -24
  52. package/src/components/account/MyAccountDrawer/ProfileSummary/profile-summary.scss +8 -6
  53. package/src/components/account/MyAccountLayout/styles.scss +16 -12
  54. package/src/components/account/MyAccountMenu/styles.scss +21 -22
  55. package/src/components/account/MyAccountUserDetails/styles.module.scss +4 -2
  56. package/src/components/account/components/MyAccountAccordion/styles.scss +4 -2
  57. package/src/components/account/components/MyAccountHeader/styles.scss +3 -1
  58. package/src/components/account/components/MyAccountTable/styles.scss +6 -4
  59. package/src/components/account/orders/MyAccountListOrders/MyAccountFilterSlider/section.module.scss +21 -19
  60. package/src/components/account/orders/MyAccountListOrders/MyAccountListOrdersTable/MyAccountListOrdersTable.tsx +3 -1
  61. package/src/components/account/orders/MyAccountListOrders/MyAccountListOrdersTable/styles.scss +5 -3
  62. package/src/components/account/orders/MyAccountListOrders/styles.module.scss +25 -22
  63. package/src/components/account/orders/MyAccountOrderDetails/MyAccountBudgetsCard/styles.scss +7 -5
  64. package/src/components/account/orders/MyAccountOrderDetails/MyAccountDeliveryOptionAccordion/styles.scss +7 -5
  65. package/src/components/account/orders/MyAccountOrderDetails/MyAccountMoreInformationCard/styles.scss +3 -1
  66. package/src/components/account/orders/MyAccountOrderDetails/MyAccountOrderActionModal/styles.module.scss +8 -6
  67. package/src/components/account/orders/MyAccountOrderDetails/MyAccountOrderActions/styles.scss +3 -1
  68. package/src/components/account/orders/MyAccountOrderDetails/MyAccountStatusCard/styles.scss +8 -6
  69. package/src/components/account/orders/MyAccountOrderDetails/section.module.scss +36 -43
  70. package/src/components/account/profile/profile.module.scss +3 -1
  71. package/src/components/account/section.module.scss +3 -1
  72. package/src/components/account/security/styles.module.scss +14 -8
  73. package/src/components/cart/CartSidebar/CartSidebar.tsx +10 -1
  74. package/src/components/cart/CartSidebar/section.module.scss +19 -17
  75. package/src/components/cart/EmptyCart/EmptyCart.tsx +12 -4
  76. package/src/components/cms/GlobalSections.tsx +12 -12
  77. package/src/components/cms/RenderSections.tsx +10 -2
  78. package/src/components/cms/plp/Components.ts +9 -0
  79. package/src/components/common/Alert/section.module.scss +10 -5
  80. package/src/components/common/PreviewTag/section.module.scss +48 -40
  81. package/src/components/common/Toast/section.module.scss +4 -2
  82. package/src/components/localization/LocalizationSelector/LocalizationSelector.tsx +320 -0
  83. package/src/components/localization/LocalizationSelector/index.ts +1 -0
  84. package/src/components/localization/LocalizationSelector/section.module.scss +18 -0
  85. package/src/components/localization/index.ts +1 -0
  86. package/src/components/navigation/Navbar/Navbar.tsx +49 -1
  87. package/src/components/navigation/NavbarSlider/NavbarSlider.tsx +19 -1
  88. package/src/components/navigation/NavbarSlider/section.module.scss +12 -10
  89. package/src/components/product/OutOfStock/OutOfStock.tsx +6 -1
  90. package/src/components/product/ProductCard/ProductCard.tsx +1 -1
  91. package/src/components/region/RegionModal/RegionModal.tsx +4 -1
  92. package/src/components/region/RegionModal/section.module.scss +10 -8
  93. package/src/components/region/RegionPopover/RegionPopover.tsx +6 -5
  94. package/src/components/region/RegionPopover/section.module.scss +9 -7
  95. package/src/components/region/RegionSlider/RegionSlider.tsx +5 -2
  96. package/src/components/region/RegionSlider/section.module.scss +16 -13
  97. package/src/components/search/Filter/FilterDeliveryMethodFacet.tsx +5 -5
  98. package/src/components/search/Filter/FilterDesktop.tsx +13 -4
  99. package/src/components/search/Filter/FilterSlider.tsx +18 -6
  100. package/src/components/search/Filter/section.module.scss +21 -19
  101. package/src/components/search/SearchDropdown/SearchDropdown.tsx +9 -7
  102. package/src/components/search/SearchHistory/SearchHistory.tsx +7 -2
  103. package/src/components/search/SearchInput/SearchInput.tsx +21 -8
  104. package/src/components/search/SearchProductItem/SearchProductItem.tsx +10 -3
  105. package/src/components/search/SearchTop/SearchTop.tsx +30 -24
  106. package/src/components/search/Sort/Sort.tsx +17 -19
  107. package/src/components/sections/Alert/Alert.tsx +6 -1
  108. package/src/components/sections/BannerNewsletter/section.module.scss +6 -4
  109. package/src/components/sections/BannerText/section.module.scss +5 -3
  110. package/src/components/sections/Breadcrumb/Breadcrumb.tsx +6 -2
  111. package/src/components/sections/Breadcrumb/section.module.scss +7 -5
  112. package/src/components/sections/EmptyState/section.module.scss +5 -3
  113. package/src/components/sections/Footer/Footer.tsx +1 -5
  114. package/src/components/sections/Footer/section.module.scss +10 -8
  115. package/src/components/sections/Hero/Hero.tsx +3 -1
  116. package/src/components/sections/Hero/section.module.scss +6 -4
  117. package/src/components/sections/Incentives/section.module.scss +5 -3
  118. package/src/components/sections/Navbar/Navbar.tsx +45 -0
  119. package/src/components/sections/Navbar/section.module.scss +34 -33
  120. package/src/components/sections/Newsletter/section.module.scss +10 -8
  121. package/src/components/sections/ProductDetails/ProductDetails.tsx +23 -1
  122. package/src/components/sections/ProductDetails/section.module.scss +32 -30
  123. package/src/components/sections/ProductGallery/EmptyGallery.tsx +13 -16
  124. package/src/components/sections/ProductGallery/section.module.scss +42 -39
  125. package/src/components/sections/ProductShelf/section.module.scss +22 -17
  126. package/src/components/sections/ProductTiles/section.module.scss +15 -13
  127. package/src/components/sections/RegionBar/section.module.scss +5 -3
  128. package/src/components/sections/ScrollToTopButton/ScrollToTopButton.tsx +4 -3
  129. package/src/components/sections/ScrollToTopButton/section.module.scss +4 -2
  130. package/src/components/templates/LandingPage/LandingPage.tsx +22 -16
  131. package/src/components/templates/ProductListingPage/ProductListing.tsx +1 -13
  132. package/src/components/templates/ProductListingPage/ProductListingPage.tsx +8 -3
  133. package/src/components/ui/Breadcrumb/Breadcrumb.tsx +14 -11
  134. package/src/components/ui/Button/ButtonSignIn/ButtonSignIn.tsx +2 -1
  135. package/src/components/ui/Button/ButtonSignIn/ButtonSignInFallback/ButtonSignInFallback.tsx +3 -1
  136. package/src/components/ui/Link/Link.tsx +19 -2
  137. package/src/components/ui/LinkButton/LinkButton.tsx +28 -0
  138. package/src/components/ui/LinkButton/index.ts +2 -0
  139. package/src/components/ui/LocalizationButton/LocalizationButton.tsx +124 -0
  140. package/src/components/ui/LocalizationButton/index.ts +1 -0
  141. package/src/components/ui/PickupPoints/PickupPointCards.tsx +2 -4
  142. package/src/components/ui/ProductComparison/ProductComparisonSidebar.tsx +34 -17
  143. package/src/components/ui/ProductDescription/ProductDescription.tsx +8 -3
  144. package/src/components/ui/ProductDetails/AddToCartLoadingSkeleton.tsx +6 -2
  145. package/src/components/ui/ProductDetails/ProductDetailsSettings.tsx +17 -5
  146. package/src/components/ui/ProductGallery/ProductGallery.tsx +7 -3
  147. package/src/components/ui/ProductGallery/ProductGalleryPage.tsx +1 -3
  148. package/src/components/ui/ShippingSimulation/ShippingSimulation.tsx +6 -1
  149. package/src/customizations/src/styles/custom-mixins.scss +0 -2
  150. package/src/experimental/index.ts +26 -0
  151. package/src/experimental/myAccountServerSideProps.ts +11 -2
  152. package/src/experimental/searchServerSideFunctions/getServerSideProps.ts +13 -7
  153. package/src/experimental/searchServerSideFunctions/getStaticProps.ts +5 -4
  154. package/src/instrumentation.ts +20 -6
  155. package/src/pages/404.tsx +5 -4
  156. package/src/pages/500.tsx +5 -4
  157. package/src/pages/[...slug].tsx +7 -4
  158. package/src/pages/[slug]/p.tsx +26 -8
  159. package/src/pages/_app.tsx +9 -1
  160. package/src/pages/api/fs/logout.ts +3 -2
  161. package/src/pages/api/graphql.ts +7 -23
  162. package/src/pages/api/preview.ts +21 -8
  163. package/src/pages/checkout.tsx +15 -5
  164. package/src/pages/index.tsx +18 -9
  165. package/src/pages/login.tsx +5 -4
  166. package/src/pages/pvt/account/403.tsx +11 -2
  167. package/src/pages/pvt/account/404.tsx +13 -3
  168. package/src/pages/pvt/account/index.tsx +6 -4
  169. package/src/pages/pvt/account/orders/[id].tsx +11 -3
  170. package/src/pages/pvt/account/orders/index.tsx +11 -3
  171. package/src/pages/pvt/account/profile.tsx +11 -2
  172. package/src/pages/pvt/account/security.tsx +11 -2
  173. package/src/pages/pvt/account/user-details.tsx +11 -2
  174. package/src/pages/s.tsx +26 -6
  175. package/src/proxy.ts +154 -0
  176. package/src/sdk/account/refreshToken.ts +4 -4
  177. package/src/sdk/account/useReorder.ts +8 -2
  178. package/src/sdk/analytics/platform/vtex/search.ts +3 -2
  179. package/src/sdk/cart/redirectToCheckout.ts +14 -8
  180. package/src/sdk/cart/useCheckoutButton.ts +7 -1
  181. package/src/sdk/deliveryPromise/useDeliveryPromise.ts +10 -18
  182. package/src/sdk/graphql/request.ts +102 -50
  183. package/src/sdk/localization/bindingSelector.ts +91 -0
  184. package/src/sdk/localization/index.ts +4 -0
  185. package/src/sdk/localization/match-url.ts +64 -0
  186. package/src/sdk/localization/types.ts +31 -0
  187. package/src/sdk/localization/useBindingSelector.ts +183 -0
  188. package/src/sdk/localization/useLocaleValidation.ts +49 -0
  189. package/src/sdk/localization/useLocalizationConfig.tsx +160 -0
  190. package/src/sdk/offer/fetcher.ts +3 -2
  191. package/src/sdk/product/useLocalizedVariables.ts +1 -1
  192. package/src/sdk/product/usePageProductsQuery.ts +2 -2
  193. package/src/sdk/product/useProductGalleryQuery.ts +1 -2
  194. package/src/sdk/product/useProductLink.ts +3 -1
  195. package/src/sdk/search/formatSearchPath.ts +28 -3
  196. package/src/sdk/search/state.ts +22 -13
  197. package/src/sdk/search/useSearchBase.ts +10 -0
  198. package/src/sdk/search/useSearchHistory.ts +41 -7
  199. package/src/sdk/session/index.ts +21 -3
  200. package/src/sdk/shipping/useShippingSimulation.ts +10 -2
  201. package/src/sdk/tsconfig.json +6 -0
  202. package/src/sdk/ui/useLink.ts +48 -0
  203. package/src/server/cms/global.ts +40 -0
  204. package/src/server/cms/index.ts +18 -10
  205. package/src/server/cms/pdp.ts +1 -0
  206. package/src/server/cms/plp.ts +3 -0
  207. package/src/server/content/service.ts +36 -24
  208. package/src/server/content/types.ts +10 -3
  209. package/src/server/index.ts +27 -20
  210. package/src/server/options.ts +27 -2
  211. package/src/styles/global/index.scss +10 -7
  212. package/src/styles/main.scss +3 -3
  213. package/src/typings/locales.ts +41 -0
  214. package/src/utils/fetchProductGallerySSR.ts +3 -1
  215. package/src/utils/getBaseDomain.ts +2 -1
  216. package/src/utils/getRequestHostname.ts +26 -0
  217. package/src/utils/globalSettings.ts +11 -0
  218. package/src/utils/localization/bindingPaths.ts +337 -0
  219. package/src/utils/localization/validateLocaleForHostname.ts +69 -0
  220. package/src/utils/localization/withLocaleValidation.ts +36 -0
  221. package/src/utils/utilities.ts +22 -0
  222. package/test/pages/api/preview.test.ts +93 -0
  223. package/test/sdk/localization/bindingSelector.test.ts +246 -0
  224. package/test/sdk/localization/store-url.browser.test.ts +140 -0
  225. package/test/sdk/localization/store-url.test.ts +96 -0
  226. package/test/sdk/localization/useBindingSelector.test.tsx +219 -0
  227. package/test/sdk/search/useSearchHistory.test.ts +222 -0
  228. package/test/server/cms/index.test.ts +3 -4
  229. package/test/server/content/service.test.ts +98 -0
  230. package/test/server/index.test.ts +10 -22
  231. package/test/utils/cookieCacheBusting.test.ts +32 -24
  232. package/test/utils/getRequestHostname.test.ts +71 -0
  233. package/test/utils/localization/bindingPaths.test.ts +706 -0
  234. package/test/utils/match-url.test.ts +388 -0
  235. package/tsconfig.json +11 -3
  236. package/vitest.config.ts +61 -0
  237. package/.next/BUILD_ID +0 -1
  238. package/.next/build-manifest.json +0 -197
  239. package/.next/cache/.tsbuildinfo +0 -1
  240. package/.next/cache/config.json +0 -7
  241. package/.next/cache/webpack/client-production/0.pack +0 -0
  242. package/.next/cache/webpack/client-production/index.pack +0 -0
  243. package/.next/cache/webpack/edge-server-production/0.pack +0 -0
  244. package/.next/cache/webpack/edge-server-production/index.pack +0 -0
  245. package/.next/cache/webpack/server-production/0.pack +0 -0
  246. package/.next/cache/webpack/server-production/index.pack +0 -0
  247. package/.next/export-marker.json +0 -1
  248. package/.next/images-manifest.json +0 -1
  249. package/.next/next-minimal-server.js.nft.json +0 -1
  250. package/.next/next-server.js.nft.json +0 -1
  251. package/.next/package.json +0 -1
  252. package/.next/prerender-manifest.js +0 -1
  253. package/.next/prerender-manifest.json +0 -1
  254. package/.next/react-loadable-manifest.json +0 -478
  255. package/.next/required-server-files.json +0 -1
  256. package/.next/routes-manifest.json +0 -1
  257. package/.next/server/chunks/1280.js +0 -1
  258. package/.next/server/chunks/1454.js +0 -1
  259. package/.next/server/chunks/1554.js +0 -1
  260. package/.next/server/chunks/1607.js +0 -1
  261. package/.next/server/chunks/1780.js +0 -1
  262. package/.next/server/chunks/1917.js +0 -1
  263. package/.next/server/chunks/1972.js +0 -1
  264. package/.next/server/chunks/2230.js +0 -1
  265. package/.next/server/chunks/2249.js +0 -1
  266. package/.next/server/chunks/2430.js +0 -1
  267. package/.next/server/chunks/2445.js +0 -12
  268. package/.next/server/chunks/2570.js +0 -1
  269. package/.next/server/chunks/2792.js +0 -1
  270. package/.next/server/chunks/2903.js +0 -1
  271. package/.next/server/chunks/294.js +0 -1
  272. package/.next/server/chunks/2955.js +0 -1
  273. package/.next/server/chunks/3006.js +0 -1
  274. package/.next/server/chunks/3029.js +0 -1
  275. package/.next/server/chunks/3060.js +0 -1
  276. package/.next/server/chunks/3408.js +0 -1
  277. package/.next/server/chunks/3483.js +0 -1
  278. package/.next/server/chunks/3683.js +0 -1
  279. package/.next/server/chunks/3836.js +0 -1
  280. package/.next/server/chunks/3890.js +0 -494
  281. package/.next/server/chunks/3922.js +0 -1
  282. package/.next/server/chunks/3945.js +0 -1
  283. package/.next/server/chunks/3951.js +0 -7
  284. package/.next/server/chunks/416.js +0 -1
  285. package/.next/server/chunks/4194.js +0 -1
  286. package/.next/server/chunks/4365.js +0 -1
  287. package/.next/server/chunks/4451.js +0 -1
  288. package/.next/server/chunks/4803.js +0 -1
  289. package/.next/server/chunks/4913.js +0 -13
  290. package/.next/server/chunks/5402.js +0 -1
  291. package/.next/server/chunks/5723.js +0 -13
  292. package/.next/server/chunks/5796.js +0 -1
  293. package/.next/server/chunks/6393.js +0 -1
  294. package/.next/server/chunks/6457.js +0 -6
  295. package/.next/server/chunks/6698.js +0 -1
  296. package/.next/server/chunks/6804.js +0 -6
  297. package/.next/server/chunks/6886.js +0 -1
  298. package/.next/server/chunks/7098.js +0 -9
  299. package/.next/server/chunks/7169.js +0 -1
  300. package/.next/server/chunks/7228.js +0 -1
  301. package/.next/server/chunks/7275.js +0 -1
  302. package/.next/server/chunks/7371.js +0 -1
  303. package/.next/server/chunks/7692.js +0 -1
  304. package/.next/server/chunks/7799.js +0 -1
  305. package/.next/server/chunks/8068.js +0 -1
  306. package/.next/server/chunks/83.js +0 -1
  307. package/.next/server/chunks/831.js +0 -1
  308. package/.next/server/chunks/8563.js +0 -1
  309. package/.next/server/chunks/8569.js +0 -1
  310. package/.next/server/chunks/8687.js +0 -1
  311. package/.next/server/chunks/870.js +0 -1
  312. package/.next/server/chunks/8737.js +0 -1
  313. package/.next/server/chunks/8741.js +0 -1
  314. package/.next/server/chunks/9088.js +0 -1
  315. package/.next/server/chunks/9117.js +0 -1
  316. package/.next/server/chunks/9237.js +0 -1
  317. package/.next/server/chunks/948.js +0 -3
  318. package/.next/server/chunks/9563.js +0 -3
  319. package/.next/server/chunks/9570.js +0 -1
  320. package/.next/server/chunks/9740.js +0 -1
  321. package/.next/server/chunks/9853.js +0 -1
  322. package/.next/server/chunks/9984.js +0 -1
  323. package/.next/server/chunks/9985.js +0 -1
  324. package/.next/server/chunks/9990.js +0 -1
  325. package/.next/server/chunks/ButtonSignIn.js +0 -1
  326. package/.next/server/chunks/Dropdown.js +0 -1
  327. package/.next/server/chunks/DropdownButton.js +0 -1
  328. package/.next/server/chunks/DropdownItem.js +0 -1
  329. package/.next/server/chunks/DropdownMenu.js +0 -1
  330. package/.next/server/chunks/FilterSkeleton.js +0 -1
  331. package/.next/server/chunks/ScrollToTopButton.js +0 -1
  332. package/.next/server/chunks/UIBannerText.js +0 -1
  333. package/.next/server/chunks/UISKUMatrixSidebar.js +0 -1
  334. package/.next/server/chunks/font-manifest.json +0 -1
  335. package/.next/server/edge-instrumentation.js +0 -2
  336. package/.next/server/edge-instrumentation.js.map +0 -1
  337. package/.next/server/edge-runtime-webpack.js +0 -157
  338. package/.next/server/edge-runtime-webpack.js.map +0 -1
  339. package/.next/server/font-manifest.json +0 -1
  340. package/.next/server/functions-config-manifest.json +0 -1
  341. package/.next/server/instrumentation.js +0 -1
  342. package/.next/server/instrumentation.js.nft.json +0 -1
  343. package/.next/server/middleware-build-manifest.js +0 -1
  344. package/.next/server/middleware-manifest.json +0 -6
  345. package/.next/server/middleware-react-loadable-manifest.js +0 -1
  346. package/.next/server/next-font-manifest.js +0 -1
  347. package/.next/server/next-font-manifest.json +0 -1
  348. package/.next/server/pages/404.js +0 -1
  349. package/.next/server/pages/404.js.nft.json +0 -1
  350. package/.next/server/pages/500.js +0 -1
  351. package/.next/server/pages/500.js.nft.json +0 -1
  352. package/.next/server/pages/[...slug].js +0 -1
  353. package/.next/server/pages/[...slug].js.nft.json +0 -1
  354. package/.next/server/pages/[slug]/p.js +0 -1
  355. package/.next/server/pages/[slug]/p.js.nft.json +0 -1
  356. package/.next/server/pages/_app.js +0 -1
  357. package/.next/server/pages/_app.js.nft.json +0 -1
  358. package/.next/server/pages/_document.js +0 -1
  359. package/.next/server/pages/_document.js.nft.json +0 -1
  360. package/.next/server/pages/_error.js +0 -1
  361. package/.next/server/pages/_error.js.nft.json +0 -1
  362. package/.next/server/pages/api/fs/logout.js +0 -1
  363. package/.next/server/pages/api/fs/logout.js.nft.json +0 -1
  364. package/.next/server/pages/api/graphql.js +0 -3
  365. package/.next/server/pages/api/graphql.js.nft.json +0 -1
  366. package/.next/server/pages/api/health/live.js +0 -1
  367. package/.next/server/pages/api/health/live.js.nft.json +0 -1
  368. package/.next/server/pages/api/health/ready.js +0 -1
  369. package/.next/server/pages/api/health/ready.js.nft.json +0 -1
  370. package/.next/server/pages/api/preview.js +0 -1
  371. package/.next/server/pages/api/preview.js.nft.json +0 -1
  372. package/.next/server/pages/checkout.js +0 -1
  373. package/.next/server/pages/checkout.js.nft.json +0 -1
  374. package/.next/server/pages/en-US/404.html +0 -42
  375. package/.next/server/pages/en-US/404.json +0 -1
  376. package/.next/server/pages/en-US/500.html +0 -42
  377. package/.next/server/pages/en-US/500.json +0 -1
  378. package/.next/server/pages/en-US/checkout.html +0 -42
  379. package/.next/server/pages/en-US/checkout.json +0 -1
  380. package/.next/server/pages/en-US/login.html +0 -42
  381. package/.next/server/pages/en-US/login.json +0 -1
  382. package/.next/server/pages/en-US/s.html +0 -42
  383. package/.next/server/pages/en-US/s.json +0 -1
  384. package/.next/server/pages/en-US.html +0 -42
  385. package/.next/server/pages/en-US.json +0 -1
  386. package/.next/server/pages/index.js +0 -1
  387. package/.next/server/pages/index.js.nft.json +0 -1
  388. package/.next/server/pages/login.js +0 -1
  389. package/.next/server/pages/login.js.nft.json +0 -1
  390. package/.next/server/pages/pvt/account/403.js +0 -1
  391. package/.next/server/pages/pvt/account/403.js.nft.json +0 -1
  392. package/.next/server/pages/pvt/account/404.js +0 -1
  393. package/.next/server/pages/pvt/account/404.js.nft.json +0 -1
  394. package/.next/server/pages/pvt/account/[...unknown].js +0 -1
  395. package/.next/server/pages/pvt/account/[...unknown].js.nft.json +0 -1
  396. package/.next/server/pages/pvt/account/orders/[id].js +0 -1
  397. package/.next/server/pages/pvt/account/orders/[id].js.nft.json +0 -1
  398. package/.next/server/pages/pvt/account/orders.js +0 -1
  399. package/.next/server/pages/pvt/account/orders.js.nft.json +0 -1
  400. package/.next/server/pages/pvt/account/profile.js +0 -1
  401. package/.next/server/pages/pvt/account/profile.js.nft.json +0 -1
  402. package/.next/server/pages/pvt/account/security.js +0 -1
  403. package/.next/server/pages/pvt/account/security.js.nft.json +0 -1
  404. package/.next/server/pages/pvt/account/user-details.js +0 -1
  405. package/.next/server/pages/pvt/account/user-details.js.nft.json +0 -1
  406. package/.next/server/pages/pvt/account.js +0 -1
  407. package/.next/server/pages/pvt/account.js.nft.json +0 -1
  408. package/.next/server/pages/s.js +0 -1
  409. package/.next/server/pages/s.js.nft.json +0 -1
  410. package/.next/server/pages-manifest.json +0 -1
  411. package/.next/server/webpack-api-runtime.js +0 -1
  412. package/.next/server/webpack-runtime.js +0 -1
  413. package/.next/static/chunks/227-f109b24190a008ab.js +0 -8
  414. package/.next/static/chunks/2284.185d834d9829b652.js +0 -1
  415. package/.next/static/chunks/2851.e68ed3c8d27a032a.js +0 -1
  416. package/.next/static/chunks/2927.23bae2c79f0ac0f3.js +0 -1
  417. package/.next/static/chunks/3155.7bc4c730a79d9ecb.js +0 -1
  418. package/.next/static/chunks/3166-0b30a3887c0c346d.js +0 -1
  419. package/.next/static/chunks/3399.017c5209b74b0d97.js +0 -1
  420. package/.next/static/chunks/3483.ef53d632a763da3f.js +0 -1
  421. package/.next/static/chunks/349.b3b38e1e9f719dda.js +0 -1
  422. package/.next/static/chunks/3802.5e8b0b689eacc0f8.js +0 -1
  423. package/.next/static/chunks/3836.620480018be48233.js +0 -1
  424. package/.next/static/chunks/4436.e7af66f0b654ee36.js +0 -1
  425. package/.next/static/chunks/4803.b1920b6e3a1a6304.js +0 -1
  426. package/.next/static/chunks/5796.4351370494d8b8b6.js +0 -1
  427. package/.next/static/chunks/6393.55f991b1a6bb4fe7.js +0 -1
  428. package/.next/static/chunks/6700.b23221a57514e737.js +0 -1
  429. package/.next/static/chunks/6789.960162355435a81d.js +0 -1
  430. package/.next/static/chunks/7191-befad64ba238a817.js +0 -1
  431. package/.next/static/chunks/7692.8d5bf4560341a2f6.js +0 -1
  432. package/.next/static/chunks/7861.7f9f1a124a43da30.js +0 -6
  433. package/.next/static/chunks/8068.43663fb64762f7b8.js +0 -1
  434. package/.next/static/chunks/83.e0c16f0299b364a5.js +0 -1
  435. package/.next/static/chunks/8325.dabe9aa22eaadeed.js +0 -1
  436. package/.next/static/chunks/8587.53c8ce185ed1a2cb.js +0 -1
  437. package/.next/static/chunks/9173-e89da04079c35360.js +0 -2
  438. package/.next/static/chunks/9237.7555603703f81bf7.js +0 -1
  439. package/.next/static/chunks/9298-1d1ed0a54133cb59.js +0 -28
  440. package/.next/static/chunks/9399.d116a7fd62024783.js +0 -1
  441. package/.next/static/chunks/941.3e2782ab9c490eb0.js +0 -1
  442. package/.next/static/chunks/9701.f9a0bfffba8807dc.js +0 -1
  443. package/.next/static/chunks/9909.787576b171184aa5.js +0 -1
  444. package/.next/static/chunks/9960.7ef77f8a8b046170.js +0 -1
  445. package/.next/static/chunks/9979.aedbc094bdc2c599.js +0 -1
  446. package/.next/static/chunks/BannerNewsletter.00328ad162109908.js +0 -1
  447. package/.next/static/chunks/BannerText.dbbec87cadb8a521.js +0 -1
  448. package/.next/static/chunks/ButtonSignIn.f6e210eaca873e48.js +0 -1
  449. package/.next/static/chunks/CartItem.b34e295377f6f94f.js +0 -1
  450. package/.next/static/chunks/CartSidebar.ac447d1ef6276da1.js +0 -1
  451. package/.next/static/chunks/Dropdown.38b48c749bad6b60.js +0 -1
  452. package/.next/static/chunks/DropdownButton.66fa6b25dddb3a07.js +0 -1
  453. package/.next/static/chunks/DropdownItem.38b8f5a07c7f422a.js +0 -1
  454. package/.next/static/chunks/DropdownMenu.48b11521a24c6efd.js +0 -1
  455. package/.next/static/chunks/EmptyCart.320e2f94a0d5e6b1.js +0 -1
  456. package/.next/static/chunks/FilterSkeleton.7ab99e28f92341c9.js +0 -1
  457. package/.next/static/chunks/Footer.166b02c2f13980c6.js +0 -1
  458. package/.next/static/chunks/Gift.c49ba26da2fbab5e.js +0 -1
  459. package/.next/static/chunks/Newsletter.fc406f6029057022.js +0 -1
  460. package/.next/static/chunks/OrderSummary.5957d69f990d9add.js +0 -1
  461. package/.next/static/chunks/PreviewTag.f4f0c8710a7bcad9.js +0 -1
  462. package/.next/static/chunks/ProductShelf.cc46f5cdeeaeaff6.js +0 -1
  463. package/.next/static/chunks/ProductTiles.9b804e51b0704d60.js +0 -1
  464. package/.next/static/chunks/RegionModal.319ad44250cb12d2.js +0 -1
  465. package/.next/static/chunks/RegionSlider.0e0e93369f4f9c92.js +0 -1
  466. package/.next/static/chunks/ScrollToTopButton.c15431f2e8bb93ef.js +0 -1
  467. package/.next/static/chunks/ShoppingAssistant.ba191eb4dbed67e5.js +0 -1
  468. package/.next/static/chunks/Toast.5f90f0436708be5e.js +0 -1
  469. package/.next/static/chunks/UIBannerText.7315b16af4457059.js +0 -1
  470. package/.next/static/chunks/UISKUMatrixSidebar.b4349b2682bbe183.js +0 -1
  471. package/.next/static/chunks/UIToast.de15325248043ce5.js +0 -1
  472. package/.next/static/chunks/framework-d514426edf885c68.js +0 -33
  473. package/.next/static/chunks/main-ec03882c4375091d.js +0 -1
  474. package/.next/static/chunks/pages/404-e3dfbbac003b02a2.js +0 -1
  475. package/.next/static/chunks/pages/500-c7814e085081d7b8.js +0 -1
  476. package/.next/static/chunks/pages/[...slug]-dc8a395a43b081f1.js +0 -1
  477. package/.next/static/chunks/pages/[slug]/p-644f1132f5a0f736.js +0 -1
  478. package/.next/static/chunks/pages/_app-84aaff8a9d4de60e.js +0 -1
  479. package/.next/static/chunks/pages/_error-2b0148be56a716e9.js +0 -1
  480. package/.next/static/chunks/pages/checkout-2071467ad42dfb99.js +0 -1
  481. package/.next/static/chunks/pages/index-8774d5b4a8744eb2.js +0 -1
  482. package/.next/static/chunks/pages/login-e74747c9f9cb5b49.js +0 -1
  483. package/.next/static/chunks/pages/pvt/account/403-491e6b062487b30f.js +0 -1
  484. package/.next/static/chunks/pages/pvt/account/404-5ad472d9f2ee1980.js +0 -1
  485. package/.next/static/chunks/pages/pvt/account/[...unknown]-f80f645594d2740c.js +0 -1
  486. package/.next/static/chunks/pages/pvt/account/orders/[id]-64e42157c0974c48.js +0 -1
  487. package/.next/static/chunks/pages/pvt/account/orders-faab39f2aff05fae.js +0 -1
  488. package/.next/static/chunks/pages/pvt/account/profile-9672177ee2665bc0.js +0 -1
  489. package/.next/static/chunks/pages/pvt/account/security-03eb1ccab9a30563.js +0 -1
  490. package/.next/static/chunks/pages/pvt/account/user-details-7838e3f79781596c.js +0 -1
  491. package/.next/static/chunks/pages/pvt/account-65fefcc699344bdb.js +0 -1
  492. package/.next/static/chunks/pages/s-162ba789e6611175.js +0 -1
  493. package/.next/static/chunks/polyfills-c67a75d1b6f99dc8.js +0 -1
  494. package/.next/static/chunks/webpack-dbc0d9f67d2f928f.js +0 -1
  495. package/.next/static/css/02259c549b2179f2.css +0 -1
  496. package/.next/static/css/02eaf202d3d11fd1.css +0 -1
  497. package/.next/static/css/033e241c58ba6fbb.css +0 -1
  498. package/.next/static/css/042d012bc1895b5c.css +0 -1
  499. package/.next/static/css/14176a4704ff97b2.css +0 -1
  500. package/.next/static/css/146a8678babc61bf.css +0 -1
  501. package/.next/static/css/16d65422bfa80f51.css +0 -1
  502. package/.next/static/css/1c4983f11b861ea0.css +0 -1
  503. package/.next/static/css/204754bbd8cc4bef.css +0 -1
  504. package/.next/static/css/24d91007fc96be10.css +0 -1
  505. package/.next/static/css/2980acad3f8e1028.css +0 -1
  506. package/.next/static/css/2c19433e38fd7533.css +0 -1
  507. package/.next/static/css/31380ebc6e671486.css +0 -1
  508. package/.next/static/css/42df884711219edb.css +0 -1
  509. package/.next/static/css/4f0597b0bf0ef2e1.css +0 -1
  510. package/.next/static/css/54cedf4b65e5863f.css +0 -1
  511. package/.next/static/css/6580147d7ab8fcca.css +0 -1
  512. package/.next/static/css/6819dddf2b1b5ea7.css +0 -1
  513. package/.next/static/css/7ef7762f412ed665.css +0 -1
  514. package/.next/static/css/82f3cd529b672812.css +0 -1
  515. package/.next/static/css/837662922091162f.css +0 -1
  516. package/.next/static/css/8e6ab59ace21e03b.css +0 -1
  517. package/.next/static/css/a852afa9be31e946.css +0 -1
  518. package/.next/static/css/b684b347c5cc6514.css +0 -1
  519. package/.next/static/css/bcdaef0a83277ef5.css +0 -1
  520. package/.next/static/css/c33615999008d3f9.css +0 -1
  521. package/.next/static/css/c34f6ea9953e2f63.css +0 -1
  522. package/.next/static/css/ea11d74a2848b093.css +0 -1
  523. package/.next/static/css/f16438bcf4508fb3.css +0 -1
  524. package/.next/static/css/f60366555f563deb.css +0 -1
  525. package/.next/static/es3Z4hhE6B4Nut0ZqqUuB/_buildManifest.js +0 -1
  526. package/.next/static/es3Z4hhE6B4Nut0ZqqUuB/_ssgManifest.js +0 -1
  527. package/.next/trace +0 -143
  528. package/.turbo/turbo-build.log +0 -134
  529. package/jest.config.js +0 -17
  530. package/public/~partytown/debug/partytown-atomics.js +0 -556
  531. package/public/~partytown/debug/partytown-media.js +0 -374
  532. package/public/~partytown/debug/partytown-sandbox-sw.js +0 -543
  533. package/public/~partytown/debug/partytown-sw.js +0 -59
  534. package/public/~partytown/debug/partytown-ww-atomics.js +0 -1789
  535. package/public/~partytown/debug/partytown-ww-sw.js +0 -1781
  536. package/public/~partytown/debug/partytown.js +0 -72
  537. package/public/~partytown/partytown-atomics.js +0 -2
  538. package/public/~partytown/partytown-media.js +0 -2
  539. package/public/~partytown/partytown-sw.js +0 -2
  540. package/public/~partytown/partytown.js +0 -2
  541. package/src/middleware__DISABLED.ts +0 -65
  542. package/src/server/generator/generateGraphQLSchemaFile.ts +0 -3
  543. package/src/server/generator/schema.ts +0 -81
@@ -115,6 +115,7 @@ function RegionSlider() {
115
115
  const cmsData = getGlobalSettings()
116
116
  const inputField = cmsData?.regionalization?.inputField
117
117
  const idkPostalCodeLink = cmsData?.regionalization?.idkPostalCodeLink
118
+ const inputLoadingLabel = inputField?.loadingLabel
118
119
 
119
120
  const handleSubmit = async () => {
120
121
  if (isValidating) {
@@ -343,7 +344,7 @@ function RegionSlider() {
343
344
  onClick: () => clearFilter(),
344
345
  children:
345
346
  cmsData?.deliveryPromise?.regionSlider
346
- ?.pickupPointClearFilterButtonLabel ?? 'Clear filter',
347
+ ?.pickupPointClearFilterButtonLabel,
347
348
  }
348
349
  : undefined
349
350
  }
@@ -358,7 +359,9 @@ function RegionSlider() {
358
359
  label={inputField?.label}
359
360
  actionable
360
361
  value={input}
361
- buttonActionText={dataLoading ? '...' : inputField?.buttonActionText}
362
+ buttonActionText={
363
+ dataLoading ? inputLoadingLabel : inputField?.buttonActionText
364
+ }
362
365
  onInput={(e) => {
363
366
  setInput(e.currentTarget.value)
364
367
  regionError !== '' && setRegionError('')
@@ -1,15 +1,18 @@
1
+ @use "sass:meta";
2
+ @use "@faststore/ui/src/styles/base/utilities";
3
+
1
4
  .section {
2
- @import "@faststore/ui/src/components/atoms/Button/styles.scss";
3
- @import "@faststore/ui/src/components/atoms/Icon/styles.scss";
4
- @import "@faststore/ui/src/components/atoms/Input/styles.scss";
5
- @import "@faststore/ui/src/components/atoms/Link/styles.scss";
6
- @import "@faststore/ui/src/components/molecules/InputField/styles.scss";
7
- @import "@faststore/ui/src/components/molecules/Modal/styles.scss";
8
- @import "@faststore/ui/src/components/molecules/PickupPointCard/styles.scss";
9
- @import "@faststore/ui/src/components/organisms/EmptyState/styles.scss";
10
- @import "@faststore/ui/src/components/organisms/FilterSlider/styles.scss";
11
- @import "@faststore/ui/src/components/organisms/PickupPointCards/styles.scss";
12
- @import "@faststore/ui/src/components/organisms/SlideOver/styles.scss";
5
+ @include meta.load-css("~@faststore/ui/src/components/atoms/Button/styles.scss");
6
+ @include meta.load-css("~@faststore/ui/src/components/atoms/Icon/styles.scss");
7
+ @include meta.load-css("~@faststore/ui/src/components/atoms/Input/styles.scss");
8
+ @include meta.load-css("~@faststore/ui/src/components/atoms/Link/styles.scss");
9
+ @include meta.load-css("~@faststore/ui/src/components/molecules/InputField/styles.scss");
10
+ @include meta.load-css("~@faststore/ui/src/components/molecules/Modal/styles.scss");
11
+ @include meta.load-css("~@faststore/ui/src/components/molecules/PickupPointCard/styles.scss");
12
+ @include meta.load-css("~@faststore/ui/src/components/organisms/EmptyState/styles.scss");
13
+ @include meta.load-css("~@faststore/ui/src/components/organisms/FilterSlider/styles.scss");
14
+ @include meta.load-css("~@faststore/ui/src/components/organisms/PickupPointCards/styles.scss");
15
+ @include meta.load-css("~@faststore/ui/src/components/organisms/SlideOver/styles.scss");
13
16
 
14
17
  [data-fs-filter-region-slider] {
15
18
  [data-fs-filter-slider-title] {
@@ -28,7 +31,7 @@
28
31
  }
29
32
 
30
33
  [data-fs-slide-over-header] {
31
- @include media(">=notebook") {
34
+ @include utilities.media(">=notebook") {
32
35
  padding-right: var(--fs-spacing-6);
33
36
  padding-left: var(--fs-spacing-6);
34
37
  }
@@ -38,7 +41,7 @@
38
41
  height: 100%;
39
42
  padding: 0 var(--fs-spacing-3);
40
43
 
41
- @include media(">=notebook") {
44
+ @include utilities.media(">=notebook") {
42
45
  padding: 0 var(--fs-spacing-6);
43
46
  }
44
47
 
@@ -17,11 +17,11 @@ export default function FilterDeliveryMethodFacet({
17
17
  const { openRegionSlider } = useUI()
18
18
 
19
19
  const location = city ? `${textToTitleCase(city)}, ${postalCode}` : postalCode
20
- const mapDeliveryMethodLabel: Record<string, string> = {
21
- delivery: deliveryMethods?.delivery ?? 'Shipping to',
22
- 'pickup-in-point': deliveryMethods?.pickupInPoint ?? 'Pickup at',
23
- 'pickup-nearby': deliveryMethods?.pickupNearby ?? 'Pickup Nearby',
24
- 'pickup-all': deliveryMethods?.pickupAll?.label ?? 'Pickup Anywhere',
20
+ const mapDeliveryMethodLabel: Record<string, string | undefined> = {
21
+ delivery: deliveryMethods?.delivery,
22
+ 'pickup-in-point': deliveryMethods?.pickupInPoint,
23
+ 'pickup-nearby': deliveryMethods?.pickupNearby,
24
+ 'pickup-all': deliveryMethods?.pickupAll?.label,
25
25
  }
26
26
 
27
27
  if (item.value === 'delivery') {
@@ -40,7 +40,9 @@ function FilterDesktop({
40
40
  title,
41
41
  }: FilterDesktopProps & ReturnType<typeof useFilter>) {
42
42
  const cmsData = getGlobalSettings()
43
- const { deliveryPromise: deliveryPromiseSettings } = cmsData ?? {}
43
+ const { deliveryPromise: deliveryPromiseSettings, filters: filtersSettings } =
44
+ cmsData ?? {}
45
+ const filterFacetRangeSettings = filtersSettings?.filterFacetRange
44
46
  const {
45
47
  resetInfiniteScroll,
46
48
  state: searchState,
@@ -75,7 +77,7 @@ function FilterDesktop({
75
77
  testId={testId}
76
78
  index={0}
77
79
  type=""
78
- label={labelsMap[SHIPPING_FACET_KEY] ?? 'Delivery'}
80
+ label={labelsMap[SHIPPING_FACET_KEY]}
79
81
  description={deliveryPromiseSettings?.deliveryMethods?.description}
80
82
  >
81
83
  <UIButton
@@ -84,8 +86,7 @@ function FilterDesktop({
84
86
  onClick={() => openRegionSlider(regionSliderTypes.setLocation)}
85
87
  icon={<UIIcon name="MapPin" />}
86
88
  >
87
- {deliveryPromiseSettings?.deliveryMethods
88
- ?.setLocationButtonLabel ?? 'Set Location'}
89
+ {deliveryPromiseSettings?.deliveryMethods?.setLocationButtonLabel}
89
90
  </UIButton>
90
91
  </UIFilterFacets>
91
92
  )}
@@ -163,6 +164,14 @@ function FilterDesktop({
163
164
  ? useFormattedPrice
164
165
  : undefined
165
166
  }
167
+ minLabel={filterFacetRangeSettings?.minLabel}
168
+ maxLabel={filterFacetRangeSettings?.maxLabel}
169
+ minPriceErrorMessage={
170
+ filterFacetRangeSettings?.minPriceErrorMessage
171
+ }
172
+ maxPriceErrorMessage={
173
+ filterFacetRangeSettings?.maxPriceErrorMessage
174
+ }
166
175
  onFacetChange={(facet) => {
167
176
  setSearchState({
168
177
  selectedFacets: setFacet(
@@ -100,7 +100,9 @@ function FilterSlider({
100
100
  const { closeFilter, openRegionSlider } = useUI()
101
101
 
102
102
  const cmsData = getGlobalSettings()
103
- const { deliveryPromise: deliveryPromiseSettings } = cmsData ?? {}
103
+ const { deliveryPromise: deliveryPromiseSettings, filters: filtersSettings } =
104
+ cmsData ?? {}
105
+ const filterFacetRangeSettings = filtersSettings?.filterFacetRange
104
106
 
105
107
  const {
106
108
  facets: filteredFacets,
@@ -126,7 +128,7 @@ function FilterSlider({
126
128
  clearBtnProps={{
127
129
  variant: 'secondary',
128
130
  onClick: () => dispatch({ type: 'selectFacets', payload: [] }),
129
- children: clearButtonLabel ?? 'Clear All',
131
+ children: clearButtonLabel,
130
132
  }}
131
133
  applyBtnProps={{
132
134
  variant: 'primary',
@@ -150,7 +152,7 @@ function FilterSlider({
150
152
 
151
153
  closeFilter()
152
154
  },
153
- children: applyButtonLabel ?? 'Apply',
155
+ children: applyButtonLabel,
154
156
  }}
155
157
  onClose={() => {
156
158
  dispatch({
@@ -172,7 +174,7 @@ function FilterSlider({
172
174
  testId={testId}
173
175
  index={0}
174
176
  type=""
175
- label={labelsMap[SHIPPING_FACET_KEY] ?? 'Delivery'}
177
+ label={labelsMap[SHIPPING_FACET_KEY]}
176
178
  description={
177
179
  deliveryPromiseSettings?.deliveryMethods?.description
178
180
  }
@@ -183,8 +185,10 @@ function FilterSlider({
183
185
  onClick={() => openRegionSlider(regionSliderTypes.setLocation)}
184
186
  icon={<UIIcon name="MapPin" />}
185
187
  >
186
- {deliveryPromiseSettings?.deliveryMethods
187
- ?.setLocationButtonLabel ?? 'Set Location'}
188
+ {
189
+ deliveryPromiseSettings?.deliveryMethods
190
+ ?.setLocationButtonLabel
191
+ }
188
192
  </UIButton>
189
193
  </UIFilterFacets>
190
194
  )}
@@ -265,6 +269,14 @@ function FilterSlider({
265
269
  ? useFormattedPrice
266
270
  : undefined
267
271
  }
272
+ minLabel={filterFacetRangeSettings?.minLabel}
273
+ maxLabel={filterFacetRangeSettings?.maxLabel}
274
+ minPriceErrorMessage={
275
+ filterFacetRangeSettings?.minPriceErrorMessage
276
+ }
277
+ maxPriceErrorMessage={
278
+ filterFacetRangeSettings?.maxPriceErrorMessage
279
+ }
268
280
  onFacetChange={(facet) =>
269
281
  dispatch({
270
282
  type: 'setFacet',
@@ -1,21 +1,23 @@
1
+ @use "sass:meta";
2
+
1
3
  .section {
2
- @import "@faststore/ui/src/components/atoms/Button/styles.scss";
3
- @import "@faststore/ui/src/components/atoms/Badge/styles.scss";
4
- @import "@faststore/ui/src/components/atoms/Checkbox/styles.scss";
5
- @import "@faststore/ui/src/components/atoms/Icon/styles.scss";
6
- @import "@faststore/ui/src/components/atoms/Input/styles.scss";
7
- @import "@faststore/ui/src/components/atoms/Link/styles.scss";
8
- @import "@faststore/ui/src/components/atoms/List/styles.scss";
9
- @import "@faststore/ui/src/components/atoms/Radio/styles.scss";
10
- @import "@faststore/ui/src/components/atoms/Slider/styles.scss";
11
- @import "@faststore/ui/src/components/molecules/DiscountBadge/styles.scss";
12
- @import "@faststore/ui/src/components/molecules/Accordion/styles.scss";
13
- @import "@faststore/ui/src/components/molecules/InputField/styles.scss";
14
- @import "@faststore/ui/src/components/molecules/Modal/styles.scss";
15
- @import "@faststore/ui/src/components/molecules/RadioField/styles.scss";
16
- @import "@faststore/ui/src/components/molecules/SelectField/styles.scss";
17
- @import "@faststore/ui/src/components/organisms/Filter/styles.scss";
18
- @import "@faststore/ui/src/components/organisms/FilterSlider/styles.scss";
19
- @import "@faststore/ui/src/components/organisms/PriceRange/styles.scss";
20
- @import "@faststore/ui/src/components/organisms/SlideOver/styles.scss";
4
+ @include meta.load-css("~@faststore/ui/src/components/atoms/Button/styles.scss");
5
+ @include meta.load-css("~@faststore/ui/src/components/atoms/Badge/styles.scss");
6
+ @include meta.load-css("~@faststore/ui/src/components/atoms/Checkbox/styles.scss");
7
+ @include meta.load-css("~@faststore/ui/src/components/atoms/Icon/styles.scss");
8
+ @include meta.load-css("~@faststore/ui/src/components/atoms/Input/styles.scss");
9
+ @include meta.load-css("~@faststore/ui/src/components/atoms/Link/styles.scss");
10
+ @include meta.load-css("~@faststore/ui/src/components/atoms/List/styles.scss");
11
+ @include meta.load-css("~@faststore/ui/src/components/atoms/Radio/styles.scss");
12
+ @include meta.load-css("~@faststore/ui/src/components/atoms/Slider/styles.scss");
13
+ @include meta.load-css("~@faststore/ui/src/components/molecules/DiscountBadge/styles.scss");
14
+ @include meta.load-css("~@faststore/ui/src/components/molecules/Accordion/styles.scss");
15
+ @include meta.load-css("~@faststore/ui/src/components/molecules/InputField/styles.scss");
16
+ @include meta.load-css("~@faststore/ui/src/components/molecules/Modal/styles.scss");
17
+ @include meta.load-css("~@faststore/ui/src/components/molecules/RadioField/styles.scss");
18
+ @include meta.load-css("~@faststore/ui/src/components/molecules/SelectField/styles.scss");
19
+ @include meta.load-css("~@faststore/ui/src/components/organisms/Filter/styles.scss");
20
+ @include meta.load-css("~@faststore/ui/src/components/organisms/FilterSlider/styles.scss");
21
+ @include meta.load-css("~@faststore/ui/src/components/organisms/PriceRange/styles.scss");
22
+ @include meta.load-css("~@faststore/ui/src/components/organisms/SlideOver/styles.scss");
21
23
  }
@@ -18,11 +18,13 @@ import type {
18
18
  IntelligentSearchAutocompleteClickEvent,
19
19
  IntelligentSearchAutocompleteClickParams,
20
20
  } from 'src/sdk/analytics/types'
21
- import { formatSearchPath } from 'src/sdk/search/formatSearchPath'
21
+ import { useFormatSearchPath } from 'src/sdk/search/formatSearchPath'
22
22
 
23
23
  interface SearchDropdownProps {
24
24
  sort: SearchState['sort']
25
25
  quickOrderSettings?: NavbarProps['searchInput']['quickOrderSettings']
26
+ searchHistoryTitle?: string
27
+ searchTopTitle?: string
26
28
  [key: string]: any
27
29
  onChangeCustomSearchDropdownVisible?: Dispatch<SetStateAction<boolean>>
28
30
  }
@@ -44,17 +46,20 @@ export function sendAutocompleteClickEvent({
44
46
  function SearchDropdown({
45
47
  sort,
46
48
  quickOrderSettings,
49
+ searchHistoryTitle,
50
+ searchTopTitle,
47
51
  onChangeCustomSearchDropdownVisible,
48
52
  ...otherProps
49
53
  }: SearchDropdownProps) {
50
54
  const {
51
55
  values: { onSearchSelection, products, term, terms, searchId },
52
56
  } = useSearch()
57
+ const formatSearchPath = useFormatSearchPath()
53
58
 
54
59
  return (
55
60
  <UISearchDropdown {...otherProps}>
56
- <SearchHistory sort={sort} />
57
- <SearchTop sort={sort} />
61
+ <SearchHistory title={searchHistoryTitle} sort={sort} />
62
+ <SearchTop title={searchTopTitle} sort={sort} />
58
63
  <UISearchAutoComplete>
59
64
  {terms?.map(({ value: suggestion }) => (
60
65
  <UISearchAutoCompleteTerm
@@ -62,10 +67,7 @@ function SearchDropdown({
62
67
  term={term}
63
68
  suggestion={suggestion}
64
69
  linkProps={{
65
- href: formatSearchPath({
66
- term: suggestion,
67
- sort,
68
- }),
70
+ href: formatSearchPath({ term: suggestion, sort }),
69
71
  onClick: async (event: React.MouseEvent<HTMLAnchorElement>) => {
70
72
  event.preventDefault()
71
73
 
@@ -5,7 +5,12 @@ import {
5
5
  } from '@faststore/ui'
6
6
  import useSearchHistory from 'src/sdk/search/useSearchHistory'
7
7
 
8
- const SearchHistory = ({ ...props }) => {
8
+ interface SearchHistoryProps {
9
+ title?: string
10
+ [key: string]: unknown
11
+ }
12
+
13
+ const SearchHistory = ({ title, ...props }: SearchHistoryProps) => {
9
14
  const {
10
15
  values: { onSearchSelection },
11
16
  } = useSearch()
@@ -16,7 +21,7 @@ const SearchHistory = ({ ...props }) => {
16
21
  }
17
22
 
18
23
  return (
19
- <UISearchHistory title="History" onClear={clearSearchHistory} {...props}>
24
+ <UISearchHistory title={title} onClear={clearSearchHistory} {...props}>
20
25
  {searchHistory.map((item) => (
21
26
  <UISearchHistoryTerm
22
27
  key={item.term}
@@ -33,10 +33,10 @@ import {
33
33
  } from '@faststore/ui'
34
34
 
35
35
  import type {
36
- SearchInputFieldProps as UISearchInputFieldProps,
37
- SearchInputFieldRef as UISearchInputFieldRef,
38
36
  CSVData,
39
37
  Product,
38
+ SearchInputFieldProps as UISearchInputFieldProps,
39
+ SearchInputFieldRef as UISearchInputFieldRef,
40
40
  } from '@faststore/ui'
41
41
 
42
42
  import type { SearchProviderContextValue } from '@faststore/ui'
@@ -49,7 +49,7 @@ import { cartStore } from 'src/sdk/cart'
49
49
  import { convertProductToQuickOrder } from 'src/sdk/product/convertProductToQuickOrder'
50
50
  import { useBulkProductsQuery } from 'src/sdk/product/useBulkProductsQuery'
51
51
  import { usePriceFormatter } from 'src/sdk/product/useFormattedPrice'
52
- import { formatSearchPath } from 'src/sdk/search/formatSearchPath'
52
+ import { useFormatSearchPath } from 'src/sdk/search/formatSearchPath'
53
53
  import { formatFileName, formatFileSize } from 'src/utils/utilities'
54
54
 
55
55
  const SearchDropdown = lazy(
@@ -70,10 +70,12 @@ export type SearchInputProps = {
70
70
  placeholder?: string
71
71
  quickOrderSettings?: NavbarProps['searchInput']['quickOrderSettings']
72
72
  sort?: string
73
- /**
74
- * Called when the user clicks Search in the file upload card, with the parsed CSV data.
75
- * Use this to run bulk search, add to cart, or analytics.
76
- */
73
+ submitButtonAriaLabel?: string
74
+ loadingLabel?: string
75
+ searchHistoryTitle?: string
76
+ searchTopTitle?: string
77
+ // Called when the user clicks Search in the file upload card, with the parsed CSV data.
78
+ // Use this to run bulk search, add to cart, or analytics.
77
79
  onFileSearch?: (data: CSVData) => void
78
80
  } & Omit<UISearchInputFieldProps, 'onSubmit' | 'attachmentButtonIcon'>
79
81
 
@@ -99,6 +101,10 @@ const SearchInput = forwardRef<SearchInputRef, SearchInputProps>(
99
101
  sort,
100
102
  placeholder,
101
103
  quickOrderSettings,
104
+ submitButtonAriaLabel,
105
+ loadingLabel,
106
+ searchHistoryTitle,
107
+ searchTopTitle,
102
108
  onFileSearch,
103
109
  ...otherProps
104
110
  },
@@ -123,6 +129,7 @@ const SearchInput = forwardRef<SearchInputRef, SearchInputProps>(
123
129
  const searchRef = useRef<HTMLDivElement>(null)
124
130
  const { addToSearchHistory } = useSearchHistory()
125
131
  const router = useRouter()
132
+ const formatSearchPath = useFormatSearchPath()
126
133
  const priceFormatter = usePriceFormatter()
127
134
  const { pushToast } = useUI()
128
135
 
@@ -444,6 +451,7 @@ const SearchInput = forwardRef<SearchInputRef, SearchInputProps>(
444
451
  const buttonProps = {
445
452
  onClick: onSearchClick,
446
453
  testId: buttonTestId,
454
+ 'aria-label': submitButtonAriaLabel,
447
455
  }
448
456
 
449
457
  const handleAddToCart = useCallback(
@@ -513,7 +521,9 @@ const SearchInput = forwardRef<SearchInputRef, SearchInputProps>(
513
521
  {hidden ? (
514
522
  <UIIconButton
515
523
  type="submit"
516
- aria-label={a11yLabels?.searchButtonAriaLabel}
524
+ aria-label={
525
+ a11yLabels?.searchButtonAriaLabel ?? submitButtonAriaLabel
526
+ }
517
527
  icon={<UIIcon name="MagnifyingGlass" />}
518
528
  size="small"
519
529
  {...buttonProps}
@@ -575,6 +585,9 @@ const SearchInput = forwardRef<SearchInputRef, SearchInputProps>(
575
585
  <SearchDropdown
576
586
  sort={sort as SearchState['sort']}
577
587
  quickOrderSettings={quickOrderSettings}
588
+ loadingLabel={loadingLabel}
589
+ searchHistoryTitle={searchHistoryTitle}
590
+ searchTopTitle={searchTopTitle}
578
591
  onChangeCustomSearchDropdownVisible={
579
592
  setCustomSearchDropdownVisibleCondition
580
593
  }
@@ -155,15 +155,19 @@ function SearchProductItem({
155
155
  }}
156
156
  onValidateBlur={(min, max, quantity) =>
157
157
  pushToast({
158
- title: 'Invalid quantity!',
159
- message: `The quantity you entered is outside the range of ${min} to ${max}. The quantity was set to ${quantity}.`,
158
+ title: quickOrderSettings?.invalidQuantityToastLabels?.title,
159
+ message:
160
+ quickOrderSettings?.invalidQuantityToastLabels?.message
161
+ ?.replace('%{min}', min.toString())
162
+ ?.replace('%{max}', max.toString())
163
+ ?.replace('%{quantity}', quantity.toString()) || '',
160
164
  status: 'INFO',
161
165
  icon: <Icon name="CircleWavyWarning" width={30} height={30} />,
162
166
  })
163
167
  }
164
168
  quickOrder={{
165
169
  enabled: quickOrderSettings?.quickOrder,
166
- outOfStockLabel: 'Out of stock',
170
+ outOfStockLabel: quickOrderSettings?.outOfStockLabel,
167
171
  availability: !outOfStock,
168
172
  hasVariants,
169
173
  buyProps,
@@ -186,6 +190,9 @@ function SearchProductItem({
186
190
  status={(status: string | null) =>
187
191
  onChangeCustomSearchDropdownVisible(status === 'visible')
188
192
  }
193
+ invalidQuantityToastLabels={
194
+ quickOrderSettings?.invalidQuantityToastLabels
195
+ }
189
196
  />
190
197
  </UISKUMatrix>
191
198
  )}
@@ -7,7 +7,7 @@ import type { HTMLAttributes } from 'react'
7
7
 
8
8
  import type { SearchState } from '@faststore/sdk'
9
9
  import type { StoreSuggestionTerm } from '@generated/graphql'
10
- import { formatSearchPath } from 'src/sdk/search/formatSearchPath'
10
+ import { useFormatSearchPath } from 'src/sdk/search/formatSearchPath'
11
11
  import useTopSearch from 'src/sdk/search/useTopSearch'
12
12
 
13
13
  const MAX_TOP_SEARCH_TERMS = 5
@@ -21,12 +21,22 @@ export interface SearchTopProps extends HTMLAttributes<HTMLDivElement> {
21
21
  * Default sort by value
22
22
  */
23
23
  sort?: string
24
+ /**
25
+ * Title for the top search section
26
+ */
27
+ title?: string
24
28
  }
25
29
 
26
- function SearchTop({ topTerms = [], sort, ...otherProps }: SearchTopProps) {
30
+ function SearchTop({
31
+ topTerms = [],
32
+ sort,
33
+ title,
34
+ ...otherProps
35
+ }: SearchTopProps) {
27
36
  const {
28
37
  values: { onSearchSelection },
29
38
  } = useSearch()
39
+ const formatSearchPath = useFormatSearchPath()
30
40
  const { data } = useTopSearch()
31
41
  const terms = (data?.search.suggestions.terms ?? topTerms).slice(
32
42
  0,
@@ -38,28 +48,24 @@ function SearchTop({ topTerms = [], sort, ...otherProps }: SearchTopProps) {
38
48
  }
39
49
 
40
50
  return (
41
- <UISearchTop title="Top Search" {...otherProps}>
42
- {terms.map((term, index) => (
43
- <UISearchTopTerm
44
- key={index}
45
- value={term.value}
46
- index={index}
47
- linkProps={{
48
- href: formatSearchPath({
49
- term: term.value,
50
- sort: sort as SearchState['sort'],
51
- }),
52
- onClick: () =>
53
- onSearchSelection?.(
54
- term.value,
55
- formatSearchPath({
56
- term: term.value,
57
- sort: sort as SearchState['sort'],
58
- })
59
- ),
60
- }}
61
- />
62
- ))}
51
+ <UISearchTop title={title} {...otherProps}>
52
+ {terms.map((term, index) => {
53
+ const path = formatSearchPath({
54
+ term: term.value,
55
+ sort: sort as SearchState['sort'],
56
+ })
57
+ return (
58
+ <UISearchTopTerm
59
+ key={index}
60
+ value={term.value}
61
+ index={index}
62
+ linkProps={{
63
+ href: path,
64
+ onClick: () => onSearchSelection?.(term.value, path),
65
+ }}
66
+ />
67
+ )
68
+ })}
63
69
  </UISearchTop>
64
70
  )
65
71
  }
@@ -1,7 +1,7 @@
1
1
  import { useSearch } from '@faststore/sdk'
2
2
  import { SelectField } from '@faststore/ui'
3
3
 
4
- const OptionsMap = {
4
+ const DEFAULT_OPTIONS = {
5
5
  price_desc: 'Price, descending',
6
6
  price_asc: 'Price, ascending',
7
7
  orders_desc: 'Top sales',
@@ -10,36 +10,34 @@ const OptionsMap = {
10
10
  release_desc: 'Release date',
11
11
  discount_desc: 'Discount',
12
12
  score_desc: 'Relevance',
13
- }
13
+ } as const
14
+
15
+ const SORT_OPTIONS_KEYS = Object.keys(DEFAULT_OPTIONS) as Array<
16
+ keyof typeof DEFAULT_OPTIONS
17
+ >
18
+
19
+ type SortOptionKeys = (typeof SORT_OPTIONS_KEYS)[number]
14
20
 
15
- const keys = Object.keys(OptionsMap) as Array<keyof typeof OptionsMap>
16
21
  export interface SortProps {
17
22
  label?: string
18
- options?: {
19
- price_desc?: string
20
- price_asc?: string
21
- orders_desc?: string
22
- name_asc?: string
23
- name_desc?: string
24
- release_desc?: string
25
- discount_desc?: string
26
- score_desc?: string
27
- }
23
+ options?: Partial<Record<SortOptionKeys, string>>
28
24
  }
29
25
 
30
- type SortOptionKeys = keyof SortProps['options']
31
-
32
- function Sort({ label = 'Sort by', options = OptionsMap }: SortProps) {
26
+ function Sort({ label = 'Sort by', options = DEFAULT_OPTIONS }: SortProps) {
33
27
  const { state, setState } = useSearch()
34
28
 
35
- const optionsMap = Object.keys(options).reduce(
36
- (acc, currentKey: SortOptionKeys) => {
37
- acc[currentKey] = options[currentKey] ?? OptionsMap[currentKey]
29
+ const optionsMap = SORT_OPTIONS_KEYS.reduce(
30
+ (acc, key) => {
31
+ if (Object.hasOwn(options, key)) {
32
+ acc[key] = options[key] ?? DEFAULT_OPTIONS[key]
33
+ }
38
34
  return acc
39
35
  },
40
36
  {} as Record<SortOptionKeys, string>
41
37
  )
42
38
 
39
+ const keys = Object.keys(optionsMap) as Array<SortOptionKeys>
40
+
43
41
  return (
44
42
  <SelectField
45
43
  id="sort-select"
@@ -3,6 +3,7 @@ import type { ReactNode } from 'react'
3
3
  import CommonAlert, {
4
4
  type AlertProps as CommonAlertProps,
5
5
  } from '../../../components/common/Alert'
6
+ import { useLink } from 'src/sdk/ui/useLink'
6
7
  import { useOverrideComponents } from '../../../sdk/overrides/OverrideContext'
7
8
  import { AlertDefaultComponents } from './DefaultComponents'
8
9
  import { getOverridableSection } from '../../../sdk/overrides/getOverriddenSection'
@@ -18,8 +19,12 @@ export interface AlertProps extends Omit<CommonAlertProps, 'link' | 'icon'> {
18
19
 
19
20
  // TODO: Change actionPath and actionLabel with Link
20
21
  function Alert({ icon, content, link: { text, to }, dismissible }: AlertProps) {
22
+ const { resolveLink } = useLink()
21
23
  const { Alert: AlertWrapper, Icon } = useOverrideComponents<'Alert'>()
22
24
 
25
+ const rawHref = to ?? AlertWrapper.props.link?.href
26
+ const href = resolveLink(rawHref) ?? rawHref
27
+
23
28
  return (
24
29
  <CommonAlert
25
30
  icon={<Icon.Component {...Icon.props} name={icon ?? Icon.props.name} />}
@@ -27,7 +32,7 @@ function Alert({ icon, content, link: { text, to }, dismissible }: AlertProps) {
27
32
  link={{
28
33
  ...(AlertWrapper.props.link ?? {}),
29
34
  children: text ?? AlertWrapper.props.link?.children,
30
- href: to ?? AlertWrapper.props.link?.href,
35
+ href,
31
36
  target: AlertWrapper.props.link?.target ?? '_self',
32
37
  }}
33
38
  dismissible={dismissible ?? AlertWrapper.props.dismissible}
@@ -1,8 +1,10 @@
1
+ @use "sass:meta";
2
+
1
3
  @layer components {
2
4
  .section {
3
- @import "@faststore/ui/src/components/atoms/Button/styles.scss";
4
- @import "@faststore/ui/src/components/molecules/LinkButton/styles.scss";
5
- @import "@faststore/ui/src/components/organisms/BannerText/styles.scss";
6
- @import "@faststore/ui/src/components/organisms/BannerNewsletter/styles.scss";
5
+ @include meta.load-css("~@faststore/ui/src/components/atoms/Button/styles.scss");
6
+ @include meta.load-css("~@faststore/ui/src/components/molecules/LinkButton/styles.scss");
7
+ @include meta.load-css("~@faststore/ui/src/components/organisms/BannerText/styles.scss");
8
+ @include meta.load-css("~@faststore/ui/src/components/organisms/BannerNewsletter/styles.scss");
7
9
  }
8
10
  }
@@ -1,7 +1,9 @@
1
+ @use "sass:meta";
2
+
1
3
  @layer components {
2
4
  .section {
3
- @import "@faststore/ui/src/components/atoms/Button/styles";
4
- @import "@faststore/ui/src/components/molecules/LinkButton/styles";
5
- @import "@faststore/ui/src/components/organisms/BannerText/styles";
5
+ @include meta.load-css("~@faststore/ui/src/components/atoms/Button/styles");
6
+ @include meta.load-css("~@faststore/ui/src/components/molecules/LinkButton/styles");
7
+ @include meta.load-css("~@faststore/ui/src/components/organisms/BannerText/styles");
6
8
  }
7
9
  }