@evenicanpm/storefront-core 1.2.2 → 1.4.0

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 (449) hide show
  1. package/.storybook/main.ts +1 -1
  2. package/.storybook/preview.tsx +5 -4
  3. package/__mocks__/countries.ts +1 -1
  4. package/__mocks__/create-query.ts +3 -2
  5. package/__mocks__/get-product-by-id.ts +0 -1
  6. package/__mocks__/query-client.ts +1 -1
  7. package/package.json +10 -2
  8. package/src/api-manager/datasources/d365/d365-address.datasource.ts +15 -13
  9. package/src/api-manager/datasources/d365/d365-base.datasource.ts +1 -1
  10. package/src/api-manager/datasources/d365/d365-cart.datasource.ts +41 -42
  11. package/src/api-manager/datasources/d365/d365-categories.datasource.ts +4 -4
  12. package/src/api-manager/datasources/d365/d365-order.datasource.ts +10 -9
  13. package/src/api-manager/datasources/d365/d365-organization.datasource.ts +10 -10
  14. package/src/api-manager/datasources/d365/d365-product.datasource.ts +49 -36
  15. package/src/api-manager/datasources/d365/d365-session.datasource.ts +7 -9
  16. package/src/api-manager/datasources/d365/d365-user.datasource.ts +34 -43
  17. package/src/api-manager/datasources/d365/d365.datasource.ts +15 -17
  18. package/src/api-manager/datasources/d365/index.ts +2 -4
  19. package/src/api-manager/datasources/d365/test-context.ts +1 -1
  20. package/src/api-manager/datasources/d365/utils/create-search-criteria.ts +1 -1
  21. package/src/api-manager/datasources/d365/utils/decode-jwt.ts +1 -2
  22. package/src/api-manager/datasources/d365/utils/get-context-cookie.ts +3 -3
  23. package/src/api-manager/datasources/d365/utils/parse-object.ts +1 -1
  24. package/src/api-manager/datasources/d365/utils/product-images-utils.ts +29 -10
  25. package/src/api-manager/datasources/d365/utils/product-inventory-utils.ts +1 -1
  26. package/src/api-manager/datasources/e4/address/e4-address.datasource.ts +5 -5
  27. package/src/api-manager/datasources/e4/address/e4-address.remaps.ts +4 -4
  28. package/src/api-manager/datasources/e4/address/e4-address.translator.ts +9 -9
  29. package/src/api-manager/datasources/e4/cart/e4-cart.datasource.ts +37 -37
  30. package/src/api-manager/datasources/e4/cart/e4-cart.remaps.ts +10 -9
  31. package/src/api-manager/datasources/e4/cart/e4-cart.translator.ts +4 -4
  32. package/src/api-manager/datasources/e4/categories/e4-categories.datasource.ts +4 -4
  33. package/src/api-manager/datasources/e4/categories/e4-categories.translator.ts +24 -24
  34. package/src/api-manager/datasources/e4/e4.datasource.ts +7 -7
  35. package/src/api-manager/datasources/e4/graphqlRequestSdk.ts +8103 -41393
  36. package/src/api-manager/datasources/e4/order/e4-order.datasource.ts +7 -7
  37. package/src/api-manager/datasources/e4/order/e4-order.remaps.ts +8 -7
  38. package/src/api-manager/datasources/e4/organization/e4-organization.datasource.ts +4 -9
  39. package/src/api-manager/datasources/e4/product/e4-product.datasource.ts +12 -11
  40. package/src/api-manager/datasources/e4/product/e4-product.remaps.ts +4 -4
  41. package/src/api-manager/datasources/e4/product/e4-product.translator.ts +27 -43
  42. package/src/api-manager/datasources/e4/session/e4-session.datasource.ts +3 -5
  43. package/src/api-manager/datasources/e4/session/e4-session.translator.ts +2 -2
  44. package/src/api-manager/datasources/e4/user/e4-user.datasource.ts +10 -10
  45. package/src/api-manager/datasources/e4/user/e4-user.remaps.ts +6 -8
  46. package/src/api-manager/datasources/e4/user/e4-user.translator.ts +6 -4
  47. package/src/api-manager/datasources/e4/utils/unwrap-e4-variants.ts +6 -6
  48. package/src/api-manager/index.ts +8 -8
  49. package/src/api-manager/lib/category-helpers.ts +4 -3
  50. package/src/api-manager/lib/get-dynamics-context.ts +1 -1
  51. package/src/api-manager/lib/get-graphql-client.ts +4 -6
  52. package/src/api-manager/schemas/address.schema.ts +1 -1
  53. package/src/api-manager/schemas/cart.schema.ts +1 -1
  54. package/src/api-manager/schemas/d365.schema.ts +207 -206
  55. package/src/api-manager/schemas/order.schema.ts +1 -1
  56. package/src/api-manager/schemas/organization.schema.ts +1 -1
  57. package/src/api-manager/schemas/product.schema.ts +4 -4
  58. package/src/api-manager/schemas/session.schema.ts +1 -1
  59. package/src/api-manager/schemas/user.schema.ts +1 -1
  60. package/src/api-manager/services/address/mutations/create-address.ts +3 -3
  61. package/src/api-manager/services/address/mutations/delete-address.ts +2 -2
  62. package/src/api-manager/services/address/mutations/get-delivery-options.ts +4 -4
  63. package/src/api-manager/services/address/mutations/update-address.ts +3 -3
  64. package/src/api-manager/services/address/queries/get-countries.ts +6 -4
  65. package/src/api-manager/services/address/queries/get-states.ts +3 -3
  66. package/src/api-manager/services/cart/mutations/add-discount-code.ts +6 -6
  67. package/src/api-manager/services/cart/mutations/add-to-cart.ts +6 -6
  68. package/src/api-manager/services/cart/mutations/checkout.ts +2 -2
  69. package/src/api-manager/services/cart/mutations/delete-cart-line.ts +2 -2
  70. package/src/api-manager/services/cart/mutations/get-payment-accept-result.ts +4 -4
  71. package/src/api-manager/services/cart/mutations/remove-cart-line-delivery-mode.ts +3 -3
  72. package/src/api-manager/services/cart/mutations/remove-discount-code.ts +2 -2
  73. package/src/api-manager/services/cart/mutations/update-cart-line-delivery-mode.ts +2 -2
  74. package/src/api-manager/services/cart/mutations/update-cart-lines.ts +3 -3
  75. package/src/api-manager/services/cart/mutations/update-cart.ts +2 -2
  76. package/src/api-manager/services/cart/queries/get-cart-lines-inventory.ts +2 -2
  77. package/src/api-manager/services/cart/queries/get-cart.ts +5 -3
  78. package/src/api-manager/services/cart/queries/get-payment-accept-point.ts +3 -3
  79. package/src/api-manager/services/categories/queries/get-categories.ts +1 -1
  80. package/src/api-manager/services/create-extension-query.ts +1 -1
  81. package/src/api-manager/services/create-mutation.ts +2 -2
  82. package/src/api-manager/services/create-query.ts +6 -6
  83. package/src/api-manager/services/get-query-client.ts +2 -2
  84. package/src/api-manager/services/order/queries/get-order-details.ts +2 -2
  85. package/src/api-manager/services/order/queries/get-orders.ts +1 -1
  86. package/src/api-manager/services/organization/queries/get-channel-configuration.ts +1 -1
  87. package/src/api-manager/services/organization/queries/get-stores.ts +1 -1
  88. package/src/api-manager/services/product/mutations/search-products.ts +3 -4
  89. package/src/api-manager/services/product/queries/get-product-availability.ts +2 -2
  90. package/src/api-manager/services/product/queries/get-product-by-id.ts +1 -1
  91. package/src/api-manager/services/product/queries/get-product-by-ids.ts +2 -2
  92. package/src/api-manager/services/product/queries/get-product-list.ts +1 -1
  93. package/src/api-manager/services/product/queries/get-product-prices.ts +2 -2
  94. package/src/api-manager/services/product/queries/get-related-products.ts +2 -2
  95. package/src/api-manager/services/product/queries/search-products.ts +2 -2
  96. package/src/api-manager/services/product/server/product.server.ts +4 -4
  97. package/src/api-manager/services/session/mutations/session-init.ts +2 -2
  98. package/src/api-manager/services/session/mutations/session-logout.ts +1 -1
  99. package/src/api-manager/services/session/queries/get-session.ts +1 -1
  100. package/src/api-manager/services/user/mutations/add-to-wishlist.ts +3 -3
  101. package/src/api-manager/services/user/mutations/copy-cart-to-wishlist.ts +3 -3
  102. package/src/api-manager/services/user/mutations/create-wishlist.ts +4 -4
  103. package/src/api-manager/services/user/mutations/delete-wishlist.ts +3 -3
  104. package/src/api-manager/services/user/mutations/remove-from-wishlist.ts +3 -3
  105. package/src/api-manager/services/user/mutations/update-user.ts +2 -2
  106. package/src/api-manager/services/user/mutations/update-wishlist.ts +2 -2
  107. package/src/api-manager/services/user/queries/get-user-counts.ts +1 -1
  108. package/src/api-manager/services/user/queries/get-user.ts +1 -1
  109. package/src/api-manager/services/user/queries/get-wishlist-details.ts +1 -1
  110. package/src/api-manager/services/user/queries/get-wishlists.ts +1 -1
  111. package/src/api-manager/types/Datasource.ts +23 -28
  112. package/src/auth/auth-options.test.ts +6 -63
  113. package/src/auth/auth-options.ts +6 -7
  114. package/src/auth/msal.ts +4 -1
  115. package/src/auth/next-auth-cookie-manager.ts +7 -8
  116. package/src/auth/refresh-token.ts +5 -7
  117. package/src/auth/signout.ts +1 -1
  118. package/src/cms/blocks/block-manager.tsx +13 -13
  119. package/src/cms/blocks/components/brand-logos-scroller.tsx +4 -4
  120. package/src/cms/blocks/components/category-card.tsx +3 -3
  121. package/src/cms/blocks/components/category-carousel/index.tsx +8 -10
  122. package/src/cms/blocks/components/feature-pill.tsx +5 -4
  123. package/src/cms/blocks/components/featured-categories.tsx +5 -2
  124. package/src/cms/blocks/components/featured-products.tsx +2 -2
  125. package/src/cms/blocks/components/footer/data/index.ts +6 -3
  126. package/src/cms/blocks/components/footer/index.tsx +9 -13
  127. package/src/cms/blocks/components/footer/sections/footer-app-store.tsx +2 -2
  128. package/src/cms/blocks/components/footer/sections/footer-contact.tsx +3 -3
  129. package/src/cms/blocks/components/footer/sections/footer-links.tsx +5 -5
  130. package/src/cms/blocks/components/footer/sections/footer-logo.tsx +4 -4
  131. package/src/cms/blocks/components/footer/sections/footer-social-links.tsx +19 -11
  132. package/src/cms/blocks/components/footer/styles/index.ts +1 -1
  133. package/src/cms/blocks/components/footer.tsx +4 -4
  134. package/src/cms/blocks/components/hero-carousel/index.tsx +32 -29
  135. package/src/cms/blocks/components/hero.tsx +4 -5
  136. package/src/cms/blocks/components/image.tsx +4 -5
  137. package/src/cms/blocks/components/media-card.tsx +3 -3
  138. package/src/cms/blocks/components/product-carousel/index.tsx +8 -9
  139. package/src/cms/blocks/components/product-section-fullwidth/index.tsx +18 -22
  140. package/src/cms/blocks/components/rich-text.tsx +2 -2
  141. package/src/cms/blocks/components/seo/index.tsx +7 -3
  142. package/src/cms/blocks/components/services/index.tsx +5 -5
  143. package/src/cms/blocks/components/services/service-card.tsx +8 -10
  144. package/src/cms/blocks/components/shared/featured-product-card.tsx +6 -3
  145. package/src/cms/blocks/components/shared/product-category-item.tsx +5 -6
  146. package/src/cms/blocks/components/shared/product-grid.tsx +9 -5
  147. package/src/cms/blocks/components/shared/top-categories-card.tsx +10 -7
  148. package/src/cms/blocks/components/shared/top-rating-product-card.tsx +4 -4
  149. package/src/cms/blocks/icons/components/category.tsx +3 -3
  150. package/src/cms/blocks/icons/components/dotted-star.tsx +1 -1
  151. package/src/cms/blocks/icons/components/fallback-icon.tsx +1 -1
  152. package/src/cms/blocks/icons/components/gift-box.tsx +1 -1
  153. package/src/cms/blocks/icons/components/light.tsx +1 -1
  154. package/src/cms/blocks/icons/components/new-arrival.tsx +1 -1
  155. package/src/cms/blocks/icons/components/rank-badge.tsx +1 -1
  156. package/src/cms/blocks/icons/index.ts +3 -3
  157. package/src/cms/blocks/index.tsx +6 -6
  158. package/src/cms/blog.ts +2 -2
  159. package/src/cms/endpoints.ts +1 -1
  160. package/src/components-v2/BazaarCard.stories.tsx +1 -1
  161. package/src/components-v2/BazaarCard.tsx +1 -1
  162. package/src/components-v2/BazaarImage.tsx +2 -2
  163. package/src/components-v2/BazaarMenu.stories.tsx +1 -1
  164. package/src/components-v2/BazaarMenu.tsx +4 -4
  165. package/src/components-v2/BazaarSwitch.tsx +1 -1
  166. package/src/components-v2/BazaarTextField.tsx +5 -5
  167. package/src/components-v2/BorderShadowCard.stories.tsx +2 -2
  168. package/src/components-v2/CountryInput.stories.tsx +2 -2
  169. package/src/components-v2/DropZone.stories.tsx +1 -1
  170. package/src/components-v2/DropZone.tsx +8 -9
  171. package/src/components-v2/HoverBox.stories.tsx +1 -1
  172. package/src/components-v2/ImageWithFallback.tsx +3 -2
  173. package/src/components-v2/LazyImage.tsx +10 -2
  174. package/src/components-v2/Loading.tsx +1 -2
  175. package/src/components-v2/SearchInput.stories.tsx +1 -1
  176. package/src/components-v2/SearchInput.tsx +2 -2
  177. package/src/components-v2/SnackbarProvider.tsx +1 -1
  178. package/src/components-v2/T/index.tsx +1 -1
  179. package/src/components-v2/Typography.stories.tsx +2 -2
  180. package/src/components-v2/Typography.tsx +13 -13
  181. package/src/components-v2/WhiteButton.tsx +2 -2
  182. package/src/components-v2/accordion/accordion-header.tsx +6 -6
  183. package/src/components-v2/carousel/Carousel.stories.tsx +1 -1
  184. package/src/components-v2/carousel/carousel.tsx +4 -4
  185. package/src/components-v2/carousel/components/carousel-arrows.tsx +4 -4
  186. package/src/components-v2/carousel/components/carousel-dots.tsx +2 -2
  187. package/src/components-v2/carousel-cards/carousel-card-1/carousel-card-1.tsx +4 -4
  188. package/src/components-v2/categories/Categories.stories.tsx +6 -5
  189. package/src/components-v2/categories/category-list/category-list.tsx +4 -5
  190. package/src/components-v2/categories/category-list/styles.ts +2 -9
  191. package/src/components-v2/categories/category-list-item/category-menu-item.tsx +6 -6
  192. package/src/components-v2/categories/category-menu.tsx +18 -15
  193. package/src/components-v2/categories/mega-menu/banner.tsx +4 -4
  194. package/src/components-v2/categories/mega-menu/column-list.tsx +6 -6
  195. package/src/components-v2/categories/mega-menu/mega-menu-1.tsx +8 -8
  196. package/src/components-v2/categories/mega-menu/mega-menu-2.tsx +5 -4
  197. package/src/components-v2/categories/types.ts +1 -1
  198. package/src/components-v2/countries-input.tsx +2 -2
  199. package/src/components-v2/flex-box/Flex.stories.tsx +1 -1
  200. package/src/components-v2/flex-box/flex-between.tsx +1 -1
  201. package/src/components-v2/flex-box/flex-box.tsx +1 -1
  202. package/src/components-v2/flex-box/flex-row-center.tsx +1 -1
  203. package/src/components-v2/flex-box/index.ts +1 -1
  204. package/src/components-v2/header/__tests__/user.test.tsx +3 -3
  205. package/src/components-v2/header/components/categories-menu.tsx +6 -6
  206. package/src/components-v2/header/components/mobile-header.tsx +17 -18
  207. package/src/components-v2/header/components/user.tsx +29 -28
  208. package/src/components-v2/header/header.tsx +9 -10
  209. package/src/components-v2/header/sticky-header.tsx +3 -3
  210. package/src/components-v2/header/styles/index.ts +3 -2
  211. package/src/components-v2/mini-cart/__tests__/cart-item.test.tsx +18 -18
  212. package/src/components-v2/mini-cart/__tests__/mini-cart.test.tsx +7 -7
  213. package/src/components-v2/mini-cart/components/bottom-actions.tsx +4 -3
  214. package/src/components-v2/mini-cart/components/cart-item.tsx +16 -15
  215. package/src/components-v2/mini-cart/components/empty-view.tsx +2 -1
  216. package/src/components-v2/mini-cart/components/top-header.tsx +8 -7
  217. package/src/components-v2/mini-cart/mini-cart-trigger.tsx +4 -4
  218. package/src/components-v2/mini-cart/mini-cart.tsx +11 -12
  219. package/src/components-v2/mobile-navigation/MobileNavigationBar.stories.tsx +2 -2
  220. package/src/components-v2/mobile-navigation/mobile-navigation-bar.tsx +15 -15
  221. package/src/components-v2/mobile-navigation/styles/index.ts +2 -2
  222. package/src/components-v2/nav-link/nav-link-2.tsx +2 -2
  223. package/src/components-v2/nav-link/nav-link-3.tsx +4 -4
  224. package/src/components-v2/nav-link/nav-link.tsx +4 -4
  225. package/src/components-v2/navbar/categories.tsx +8 -6
  226. package/src/components-v2/navbar/category-based-menu/category-based-menu.tsx +17 -16
  227. package/src/components-v2/navbar/category-based-menu/styles.ts +3 -3
  228. package/src/components-v2/navbar/category-based-menu/types.ts +1 -1
  229. package/src/components-v2/navbar/mega-menu/mega-menu.tsx +11 -10
  230. package/src/components-v2/navbar/mega-menu/styles.ts +2 -2
  231. package/src/components-v2/navbar/mobile-menu/mobile-menu.test.tsx +3 -3
  232. package/src/components-v2/navbar/mobile-menu/mobile-menu.tsx +21 -13
  233. package/src/components-v2/navbar/nav-list/cms-nav.test.tsx +4 -4
  234. package/src/components-v2/navbar/nav-list/nav-item-child.tsx +13 -14
  235. package/src/components-v2/navbar/nav-list/nav-list.tsx +128 -90
  236. package/src/components-v2/navbar/navbar.tsx +4 -5
  237. package/src/components-v2/navbar/styles.ts +4 -4
  238. package/src/components-v2/navbar/utils/transform-nav.test.ts +3 -3
  239. package/src/components-v2/navbar/utils/transform-nav.ts +3 -3
  240. package/src/components-v2/no-records.tsx +3 -3
  241. package/src/components-v2/product-cards/discount-chip.tsx +1 -1
  242. package/src/components-v2/product-cards/favorite-button.tsx +3 -3
  243. package/src/components-v2/product-cards/product-card/ProductCard.stories.tsx +2 -2
  244. package/src/components-v2/product-cards/product-card/product-card.tsx +43 -45
  245. package/src/components-v2/product-cards/product-card/styles/index.ts +2 -2
  246. package/src/components-v2/product-cards/product-card-plp/ProductCardPlp.stories.tsx +2 -2
  247. package/src/components-v2/product-cards/product-card-plp/product-card.tsx +25 -24
  248. package/src/components-v2/product-cards/product-card-plp-list/ProductCardPlpList.stories.tsx +1 -1
  249. package/src/components-v2/product-cards/product-card-plp-list/components/tags.tsx +1 -1
  250. package/src/components-v2/product-cards/product-card-plp-list/product-card.tsx +22 -19
  251. package/src/components-v2/product-cards/product-card-search/ProductCardSearch.stories.tsx +2 -2
  252. package/src/components-v2/product-cards/product-card-search/product-card.tsx +20 -18
  253. package/src/components-v2/product-cards/product-price.tsx +2 -2
  254. package/src/components-v2/product-cards/product-rating.tsx +4 -4
  255. package/src/components-v2/product-cards/product-title.tsx +2 -2
  256. package/src/components-v2/product-cards/quantity-buttons.tsx +6 -6
  257. package/src/components-v2/product-dialog/ProductDialog.stories.tsx +2 -2
  258. package/src/components-v2/product-dialog/compound/product-dialog.tsx +16 -16
  259. package/src/components-v2/product-dialog/index.tsx +1 -1
  260. package/src/components-v2/product-dimensions/Dimensions.stories.tsx +3 -2
  261. package/src/components-v2/product-dimensions/compound/dimensions-group-error.tsx +3 -3
  262. package/src/components-v2/product-dimensions/compound/dimensions-group-label.tsx +1 -1
  263. package/src/components-v2/product-dimensions/compound/dimensions-group-list-chip.tsx +5 -4
  264. package/src/components-v2/product-dimensions/compound/dimensions-group-list.tsx +7 -2
  265. package/src/components-v2/product-dimensions/compound/dimensions-group.tsx +3 -4
  266. package/src/components-v2/product-dimensions/compound/dimensions.tsx +6 -2
  267. package/src/components-v2/product-dimensions/index.tsx +4 -4
  268. package/src/components-v2/product-dimensions/utils/has-selected-dimension.ts +1 -1
  269. package/src/components-v2/product-quantity-buttons/ProductQuantity.stories.tsx +2 -1
  270. package/src/components-v2/product-quantity-buttons/compound/quantity-buttons-root.tsx +8 -8
  271. package/src/components-v2/product-quantity-buttons/index.tsx +5 -2
  272. package/src/components-v2/product-quantity-variants/ProductQuantity.stories.tsx +3 -2
  273. package/src/components-v2/product-quantity-variants/index.tsx +14 -15
  274. package/src/components-v2/products-view/ProductsGrid.stories.tsx +3 -2
  275. package/src/components-v2/products-view/ProductsList.stories.tsx +3 -4
  276. package/src/components-v2/products-view/compound/context.ts +4 -3
  277. package/src/components-v2/products-view/compound/products-grid-view.tsx +9 -8
  278. package/src/components-v2/products-view/compound/products-list-view.tsx +9 -8
  279. package/src/components-v2/products-view/compound/types.ts +2 -2
  280. package/src/components-v2/products-view/index.tsx +5 -5
  281. package/src/components-v2/progress/ProgressBar.stories.tsx +2 -2
  282. package/src/components-v2/progress/progress.tsx +4 -4
  283. package/src/components-v2/scrollbar/Scrollbar.stories.tsx +2 -1
  284. package/src/components-v2/scrollbar/scrollbar.tsx +4 -4
  285. package/src/components-v2/search-bar/SearchBarLarge.stories.tsx +2 -1
  286. package/src/components-v2/search-bar/compound/context.ts +2 -3
  287. package/src/components-v2/search-bar/compound/results-item-lg.tsx +3 -2
  288. package/src/components-v2/search-bar/compound/results-item-sm.tsx +10 -9
  289. package/src/components-v2/search-bar/compound/results-suspense.tsx +5 -6
  290. package/src/components-v2/search-bar/compound/results.tsx +11 -7
  291. package/src/components-v2/search-bar/compound/search-bar-root.tsx +10 -10
  292. package/src/components-v2/search-bar/compound/textfield-adornment-category.tsx +32 -33
  293. package/src/components-v2/search-bar/compound/textfield-adornment-search-icon.tsx +3 -2
  294. package/src/components-v2/search-bar/compound/textfield.tsx +5 -8
  295. package/src/components-v2/search-bar/hooks/use-search.ts +2 -3
  296. package/src/components-v2/search-bar/styles/index.ts +2 -2
  297. package/src/components-v2/search-bar/utils/findCategoryNameById.ts +1 -1
  298. package/src/components-v2/section/Section.stories.tsx +4 -4
  299. package/src/components-v2/section/compound/section-header.tsx +7 -7
  300. package/src/components-v2/section/compound/section.tsx +4 -3
  301. package/src/components-v2/side-nav/SideNav.stories.tsx +4 -4
  302. package/src/components-v2/side-nav/side-nav.tsx +3 -3
  303. package/src/components-v2/wishlist-dialogs/__tests__/create-new-list.test.tsx +5 -7
  304. package/src/components-v2/wishlist-dialogs/add-to-wishlist/AddToWishlist.stories.tsx +2 -2
  305. package/src/components-v2/wishlist-dialogs/add-to-wishlist/add-to-wishlist-button.tsx +2 -2
  306. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/add-to-wishlist-bottom-ui.tsx +3 -3
  307. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/add-to-wishlist-dialog.tsx +8 -9
  308. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/add-to-wishlist-list.tsx +6 -7
  309. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/context.ts +2 -1
  310. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/wishlist-dialog-header.tsx +8 -10
  311. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/wishlist-dialog-item.tsx +6 -6
  312. package/src/components-v2/wishlist-dialogs/add-to-wishlist/hooks/use-add-to-wishlist.ts +6 -6
  313. package/src/components-v2/wishlist-dialogs/add-to-wishlist/index.tsx +11 -13
  314. package/src/components-v2/wishlist-dialogs/create-wishlist/compound/create-wishlist-bottom-ui.tsx +3 -3
  315. package/src/components-v2/wishlist-dialogs/create-wishlist/compound/create-wishlist-dialog.tsx +11 -9
  316. package/src/components-v2/wishlist-dialogs/create-wishlist/compound/create-wishlist-form.tsx +6 -4
  317. package/src/components-v2/wishlist-dialogs/create-wishlist/create-wishlist-button.tsx +2 -2
  318. package/src/components-v2/wishlist-dialogs/styles.ts +4 -4
  319. package/src/hooks/use-cart.ts +1 -1
  320. package/src/hooks/use-nextauth-session.ts +65 -0
  321. package/src/hooks/use-overflow-detect.ts +1 -1
  322. package/src/hooks/use-settings.ts +1 -1
  323. package/src/hooks/use-variants.ts +29 -31
  324. package/src/lib/build-detail-url.ts +1 -1
  325. package/src/lib/build-product-detail-url.ts +1 -1
  326. package/src/lib/cart-cookie-handler.ts +1 -1
  327. package/src/lib/category-helpers.ts +4 -4
  328. package/src/lib/create-graphql-client.ts +1 -2
  329. package/src/lib/get-palette-color.ts +36 -16
  330. package/src/lib/graphqlRequestSdk.ts +2 -3
  331. package/src/lib/hexToLuma.ts +4 -4
  332. package/src/lib/product-list-types.ts +1 -1
  333. package/src/lib/refiner-utils.ts +1 -1
  334. package/src/lib/store-hours-helper.ts +6 -6
  335. package/src/pages-v2/account/account-navigation.tsx +13 -13
  336. package/src/pages-v2/account/addresses/address-form.tsx +26 -23
  337. package/src/pages-v2/account/addresses/address-item.tsx +14 -15
  338. package/src/pages-v2/account/dashboard-header.tsx +9 -9
  339. package/src/pages-v2/account/orders/order-progress.tsx +14 -14
  340. package/src/pages-v2/account/orders/order-row.tsx +11 -10
  341. package/src/pages-v2/account/orders/order-summary.tsx +7 -6
  342. package/src/pages-v2/account/orders/ordered-products.tsx +19 -18
  343. package/src/pages-v2/account/profile/profile-button.test.tsx +3 -3
  344. package/src/pages-v2/account/profile/profile-button.tsx +5 -4
  345. package/src/pages-v2/account/profile/user-info.tsx +8 -10
  346. package/src/pages-v2/account/styles.ts +1 -1
  347. package/src/pages-v2/account/wishlist/create-new-list.tsx +11 -9
  348. package/src/pages-v2/account/wishlist/create-wishlist-button.tsx +2 -2
  349. package/src/pages-v2/account/wishlist/wishlist-item.tsx +15 -14
  350. package/src/pages-v2/blog/blog-card.tsx +58 -0
  351. package/src/pages-v2/blog/pagination.tsx +1 -2
  352. package/src/pages-v2/cart/__tests__/cart-item.test.tsx +8 -10
  353. package/src/pages-v2/cart/__tests__/checkout-form.test.tsx +8 -16
  354. package/src/pages-v2/cart/__tests__/countries.json +19407 -0
  355. package/src/pages-v2/cart/__tests__/estimate-shipping.test.tsx +11 -11
  356. package/src/pages-v2/cart/cart-item.tsx +110 -100
  357. package/src/pages-v2/cart/checkout-form.tsx +20 -22
  358. package/src/pages-v2/cart/coupon-entry.tsx +12 -10
  359. package/src/pages-v2/cart/estimate-shipping.tsx +11 -10
  360. package/src/pages-v2/checkout/checkout-alt-form/checkout-form.tsx +19 -18
  361. package/src/pages-v2/checkout/checkout-alt-form/checkout-step.tsx +7 -7
  362. package/src/pages-v2/checkout/checkout-alt-form/step-heading.tsx +4 -4
  363. package/src/pages-v2/checkout/checkout-alt-form/steps/address/address-card.tsx +4 -4
  364. package/src/pages-v2/checkout/checkout-alt-form/steps/address/delivery-address.tsx +33 -31
  365. package/src/pages-v2/checkout/checkout-alt-form/steps/address/new-address-form.tsx +19 -21
  366. package/src/pages-v2/checkout/checkout-alt-form/steps/address/styles.ts +1 -1
  367. package/src/pages-v2/checkout/checkout-alt-form/steps/customer-info/customer-information.tsx +16 -17
  368. package/src/pages-v2/checkout/checkout-alt-form/steps/payment/payment-details.tsx +25 -28
  369. package/src/pages-v2/checkout/checkout-alt-form/steps/payment/safe-card-preview-data.tsx +2 -2
  370. package/src/pages-v2/checkout/checkout-alt-form/steps/shipping/delivery-date.tsx +5 -5
  371. package/src/pages-v2/checkout/checkout-alt-form/steps/shipping/delivery-options.tsx +33 -34
  372. package/src/pages-v2/checkout/checkout-alt-summary/cart-item.tsx +2 -2
  373. package/src/pages-v2/checkout/checkout-alt-summary/checkout-alt-summary.tsx +9 -9
  374. package/src/pages-v2/checkout/checkout-alt-summary/list-item.tsx +2 -2
  375. package/src/pages-v2/confirmation/address.tsx +4 -4
  376. package/src/pages-v2/confirmation/confirmation-summary.tsx +11 -10
  377. package/src/pages-v2/confirmation/ordered-products.tsx +12 -11
  378. package/src/pages-v2/product-details/available-shops.tsx +6 -6
  379. package/src/pages-v2/product-details/bopis/find-in-store-button.tsx +3 -3
  380. package/src/pages-v2/product-details/bopis/find-in-store-modal.tsx +16 -17
  381. package/src/pages-v2/product-details/bopis/pickup-option-select.tsx +5 -5
  382. package/src/pages-v2/product-details/bopis/search-header.tsx +3 -2
  383. package/src/pages-v2/product-details/bopis/store-card/shop-card.tsx +15 -16
  384. package/src/pages-v2/product-details/bopis/store-card/utils/getDaysResources.ts +1 -1
  385. package/src/pages-v2/product-details/checkbox-label.tsx +3 -3
  386. package/src/pages-v2/product-details/currency.ts +1 -0
  387. package/src/pages-v2/product-details/frequently-bought.tsx +12 -12
  388. package/src/pages-v2/product-details/frequently-product-card.tsx +5 -5
  389. package/src/pages-v2/product-details/product-comment.tsx +4 -4
  390. package/src/pages-v2/product-details/product-description.tsx +3 -3
  391. package/src/pages-v2/product-details/product-filter-card.tsx +17 -14
  392. package/src/pages-v2/product-details/product-intro/compound/context.ts +10 -5
  393. package/src/pages-v2/product-details/product-intro/compound/product-info.tsx +19 -19
  394. package/src/pages-v2/product-details/product-intro/compound/product-intro-images.tsx +39 -33
  395. package/src/pages-v2/product-details/product-intro/compound/product-intro.tsx +7 -7
  396. package/src/pages-v2/product-details/product-intro/compound/thumbnail-with-skeleton.tsx +2 -2
  397. package/src/pages-v2/product-details/product-intro/utils.ts +3 -5
  398. package/src/pages-v2/product-details/product-review.tsx +9 -9
  399. package/src/pages-v2/product-details/product-tabs.tsx +11 -8
  400. package/src/pages-v2/product-details/related-products.tsx +12 -9
  401. package/src/pages-v2/product-list/breadcrumbs.tsx +3 -3
  402. package/src/pages-v2/product-list/checkbox-label.tsx +3 -3
  403. package/src/pages-v2/product-list/facet-group.tsx +8 -8
  404. package/src/pages-v2/product-list/facet.tsx +4 -3
  405. package/src/pages-v2/product-list/list-filter.tsx +6 -6
  406. package/src/pages-v2/product-list/pagination.tsx +2 -2
  407. package/src/pages-v2/product-list/product-list-context.tsx +22 -18
  408. package/src/pages-v2/product-list/product-list-state.ts +14 -14
  409. package/src/pages-v2/product-list/product-list-view.tsx +18 -17
  410. package/src/pages-v2/product-list/product-rating.tsx +6 -3
  411. package/src/pages-v2/product-list/quick-view-dialog-content.tsx +21 -23
  412. package/src/pages-v2/product-list/quick-view-dialog.tsx +7 -3
  413. package/src/pages-v2/product-list/range-filter.tsx +5 -6
  414. package/src/pages-v2/product-list/scrollbar.tsx +4 -4
  415. package/src/pages-v2/product-list/search-bar.tsx +12 -12
  416. package/src/pages-v2/product-list/selected-facets.tsx +4 -4
  417. package/src/pages-v2/product-list/side-nav.tsx +2 -2
  418. package/src/pages-v2/product-list/swatch.tsx +15 -11
  419. package/src/pages-v2/product-list/utils/generate-breadcrumbs.ts +1 -1
  420. package/src/pages-v2/product-list/utils/getCategoryFilterFromSlug.ts +33 -68
  421. package/src/pages-v2/product-list/utils/product-list-helper.ts +5 -5
  422. package/src/pages-v2/product-list/utils/product-list-types.ts +1 -1
  423. package/src/pages-v2/product-list/utils/search-for-category.ts +4 -4
  424. package/src/pages-v2/product-list/utils/sort-options.ts +1 -1
  425. package/src/pages-v2/quickorder/order-upload.tsx +92 -78
  426. package/src/pages-v2/quickorder/provider.tsx +13 -10
  427. package/src/pages-v2/quickorder/quick-order-header.tsx +1 -1
  428. package/src/pages-v2/quickorder/quick-order-row.tsx +9 -8
  429. package/src/pages-v2/quickorder/quick-order-table.tsx +3 -3
  430. package/src/pages-v2/quickorder/quick-order.tsx +48 -43
  431. package/src/providers/nav-provider/index.tsx +3 -3
  432. package/src/providers/nav-provider/utils/createLink.ts +1 -1
  433. package/src/providers/notifications/notification-context.tsx +3 -4
  434. package/src/providers/notifications/use-notification.ts +1 -1
  435. package/tsconfig.json +1 -1
  436. package/src/components-v2/sticky/Sticky.stories.tsx +0 -88
  437. package/src/components-v2/sticky/index.ts +0 -1
  438. package/src/components-v2/sticky/sticky.tsx +0 -62
  439. package/src/components-v2/sticky/styles.ts +0 -38
  440. package/src/components-v2/utils/constants.ts +0 -8
  441. package/src/theme/build-mui-theme.ts +0 -104
  442. package/src/theme/components.ts +0 -163
  443. package/src/theme/emotion-cache.tsx +0 -101
  444. package/src/theme/theme-colors.ts +0 -205
  445. package/src/theme/theme-options-sample.ts +0 -69
  446. package/src/theme/theme-options.ts +0 -172
  447. package/src/theme/theme-provider.tsx +0 -44
  448. package/src/theme/typography.ts +0 -22
  449. package/src/theme/utils.ts +0 -17
@@ -1,35 +1,124 @@
1
1
  "use client";
2
2
 
3
- import { createContext, useContext, ReactNode } from "react";
4
- // import { useContext as useReactContext } from "react";
5
- import MenuItem from "@mui/material/MenuItem";
6
- import KeyboardArrowDown from "@mui/icons-material/KeyboardArrowDown";
3
+ import BazaarCard from "@evenicanpm/storefront-core/src/components-v2/BazaarCard";
7
4
  import { FlexBox } from "@evenicanpm/storefront-core/src/components-v2/flex-box";
8
5
  import { NavLink } from "@evenicanpm/storefront-core/src/components-v2/nav-link";
9
- import BazaarCard from "@evenicanpm/storefront-core/src/components-v2/BazaarCard";
10
- import MegaMenu from "@evenicanpm/storefront-core/src/components-v2/navbar/mega-menu";
11
6
  import CategoryBasedMenu from "@evenicanpm/storefront-core/src/components-v2/navbar/category-based-menu";
7
+ import MegaMenu from "@evenicanpm/storefront-core/src/components-v2/navbar/mega-menu";
8
+ import NavItemChild from "@evenicanpm/storefront-core/src/components-v2/navbar/nav-list/nav-item-child";
12
9
  import {
13
- StyledNavLink,
14
- NAV_LINK_STYLES,
15
10
  ChildNavListWrapper,
11
+ NAV_LINK_STYLES,
12
+ StyledNavLink,
16
13
  } from "@evenicanpm/storefront-core/src/components-v2/navbar/styles";
17
- import { NavContext } from "@evenicanpm/storefront-core/src/providers/nav-provider";
18
14
  import {
15
+ type TransformedNavItem,
19
16
  transformCmsNav,
20
- TransformedNavItem,
21
17
  } from "@evenicanpm/storefront-core/src/components-v2/navbar/utils/transform-nav";
22
- import NavItemChild from "@evenicanpm/storefront-core/src/components-v2/navbar/nav-list/nav-item-child";
18
+ import { NavContext } from "@evenicanpm/storefront-core/src/providers/nav-provider";
19
+ import KeyboardArrowDown from "@mui/icons-material/KeyboardArrowDown";
20
+ import MenuItem from "@mui/material/MenuItem";
21
+ import { createContext, type ReactNode, useContext } from "react";
23
22
 
24
23
  type NavigationContextValue = {
25
24
  list: TransformedNavItem[];
26
25
  };
26
+
27
27
  const NavigationContext = createContext<NavigationContextValue | undefined>(
28
28
  undefined,
29
29
  );
30
30
 
31
- export default function Navigation({ children }: { children?: ReactNode }) {
31
+ type NavigationItemProps = Readonly<{
32
+ nav: TransformedNavItem;
33
+ isRoot?: boolean;
34
+ }>;
35
+
36
+ function RenderMegaMenu(props: Readonly<{ nav: TransformedNavItem }>) {
37
+ const { nav } = props;
38
+ const columns = nav.items.map((item) => [item]);
39
+ const columnCount = columns.length;
40
+
41
+ return (
42
+ <MegaMenu title={nav.title}>
43
+ <MegaMenu.Container>
44
+ {columns.map((column) => {
45
+ const columnKey = column.map((c) => c.title).join("-");
46
+
47
+ return (
48
+ <MegaMenu.Column key={columnKey} count={columnCount}>
49
+ {column.map((cat) => (
50
+ <MegaMenu.Category key={cat.title} title={cat.title}>
51
+ {cat.items.map((sub) => (
52
+ <MegaMenu.Item key={sub.title} href={sub.href}>
53
+ {sub.title}
54
+ </MegaMenu.Item>
55
+ ))}
56
+ </MegaMenu.Category>
57
+ ))}
58
+ </MegaMenu.Column>
59
+ );
60
+ })}
61
+ </MegaMenu.Container>
62
+ </MegaMenu>
63
+ );
64
+ }
65
+
66
+ function RenderFullScreenMenu({ nav }: Readonly<{ nav: TransformedNavItem }>) {
67
+ return (
68
+ <CategoryBasedMenu key={nav.title} title={nav.title} menuList={nav.items}>
69
+ <CategoryBasedMenu.MainList />
70
+ <CategoryBasedMenu.Section />
71
+ </CategoryBasedMenu>
72
+ );
73
+ }
74
+
75
+ function RenderRootWithChildren({
76
+ nav,
77
+ }: Readonly<{ nav: TransformedNavItem }>) {
78
+ const { title, items } = nav;
79
+
80
+ return (
81
+ <FlexBox
82
+ alignItems="center"
83
+ position="relative"
84
+ flexDirection="column"
85
+ sx={{
86
+ "&:hover": { "& > .child-nav-item": { display: "block" } },
87
+ }}
88
+ >
89
+ <FlexBox alignItems="flex-end" gap={0.3} sx={NAV_LINK_STYLES}>
90
+ {title}
91
+ <KeyboardArrowDown sx={{ color: "grey.500", fontSize: "1.1rem" }} />
92
+ </FlexBox>
93
+
94
+ <ChildNavListWrapper className="child-nav-item">
95
+ <BazaarCard elevation={3} sx={{ mt: 2.5, py: 1, minWidth: 100 }}>
96
+ {items.map((child) => (
97
+ <Navigation.Item key={child.title} nav={child} />
98
+ ))}
99
+ </BazaarCard>
100
+ </ChildNavListWrapper>
101
+ </FlexBox>
102
+ );
103
+ }
104
+
105
+ function RenderChildWithChildren({
106
+ nav,
107
+ }: Readonly<{ nav: TransformedNavItem }>) {
108
+ return (
109
+ <Navigation.Child nav={nav}>
110
+ {nav.items.map((child) => (
111
+ <Navigation.Item key={child.title} nav={child} />
112
+ ))}
113
+ </Navigation.Child>
114
+ );
115
+ }
116
+
117
+ export default function Navigation({
118
+ children,
119
+ }: Readonly<{ children?: ReactNode }>) {
32
120
  const cmsList = transformCmsNav(useContext(NavContext).cmsNav ?? []);
121
+
33
122
  return (
34
123
  <NavigationContext.Provider value={{ list: cmsList }}>
35
124
  <FlexBox gap={4}>{children ?? <Navigation.List />}</FlexBox>
@@ -40,6 +129,7 @@ export default function Navigation({ children }: { children?: ReactNode }) {
40
129
  Navigation.List = function List() {
41
130
  const ctx = useContext(NavigationContext);
42
131
  if (!ctx) return null;
132
+
43
133
  return (
44
134
  <>
45
135
  {ctx.list.map((nav) => (
@@ -49,96 +139,44 @@ Navigation.List = function List() {
49
139
  );
50
140
  };
51
141
 
52
- Navigation.Item = function Item({
53
- nav,
54
- isRoot = false,
55
- }: {
56
- nav: TransformedNavItem;
57
- isRoot?: boolean;
58
- }) {
142
+ Navigation.Item = function Item({ nav, isRoot = false }: NavigationItemProps) {
59
143
  const { href, title, items, menuType } = nav;
60
- const hasChildren = !!(items && items.length);
144
+ const hasChildren = !!items?.length;
61
145
 
146
+ // ROOT ITEMS
62
147
  if (isRoot) {
63
148
  if (menuType === "mega-menu") {
64
- return (
65
- <MegaMenu title={title}>
66
- <MegaMenu.Container>
67
- {nav.items
68
- .map((i) => [i])
69
- .map((column, i) => (
70
- <MegaMenu.Column
71
- key={i}
72
- count={nav.items.map((i) => [i]).length}
73
- >
74
- {column.map((cat) => (
75
- <MegaMenu.Category key={cat.title} title={cat.title}>
76
- {cat.items.map((sub) => (
77
- <MegaMenu.Item key={sub.title} href={sub.href}>
78
- {sub.title}
79
- </MegaMenu.Item>
80
- ))}
81
- </MegaMenu.Category>
82
- ))}
83
- </MegaMenu.Column>
84
- ))}
85
- </MegaMenu.Container>
86
- </MegaMenu>
87
- );
149
+ return <RenderMegaMenu nav={nav} />;
88
150
  }
151
+
89
152
  if (menuType === "full-screen-mega-menu") {
90
- return (
91
- <CategoryBasedMenu key={title} title={title} menuList={nav.items}>
92
- <CategoryBasedMenu.MainList />
93
- <CategoryBasedMenu.Section />
94
- </CategoryBasedMenu>
95
- );
153
+ return <RenderFullScreenMenu nav={nav} />;
96
154
  }
97
- if (href && !hasChildren) {
155
+
156
+ if (!hasChildren && href) {
98
157
  return <StyledNavLink href={href}>{title}</StyledNavLink>;
99
158
  }
159
+
100
160
  if (hasChildren) {
101
- return (
102
- <FlexBox
103
- alignItems="center"
104
- position="relative"
105
- flexDirection="column"
106
- sx={{
107
- "&:hover": { "& > .child-nav-item": { display: "block" } },
108
- }}
109
- >
110
- <FlexBox alignItems="flex-end" gap={0.3} sx={NAV_LINK_STYLES}>
111
- {title}{" "}
112
- <KeyboardArrowDown sx={{ color: "grey.500", fontSize: "1.1rem" }} />
113
- </FlexBox>
114
- <ChildNavListWrapper className="child-nav-item">
115
- <BazaarCard elevation={3} sx={{ mt: 2.5, py: 1, minWidth: 100 }}>
116
- {items.map((child) => (
117
- <Navigation.Item key={child.title} nav={child} />
118
- ))}
119
- </BazaarCard>
120
- </ChildNavListWrapper>
121
- </FlexBox>
122
- );
123
- }
124
- } else {
125
- if (href && !hasChildren) {
126
- return (
127
- <NavLink href={href}>
128
- <MenuItem>{title}</MenuItem>
129
- </NavLink>
130
- );
131
- }
132
- if (hasChildren) {
133
- return (
134
- <Navigation.Child nav={nav}>
135
- {items.map((child) => (
136
- <Navigation.Item key={child.title} nav={child} />
137
- ))}
138
- </Navigation.Child>
139
- );
161
+ return <RenderRootWithChildren nav={nav} />;
140
162
  }
163
+
164
+ return null;
165
+ }
166
+
167
+ // CHILD ITEMS
168
+ if (!hasChildren && href) {
169
+ return (
170
+ <NavLink href={href}>
171
+ <MenuItem>{title}</MenuItem>
172
+ </NavLink>
173
+ );
174
+ }
175
+
176
+ if (hasChildren) {
177
+ return <RenderChildWithChildren nav={nav} />;
141
178
  }
179
+
142
180
  return null;
143
181
  };
144
182
 
@@ -1,16 +1,15 @@
1
1
  "use client";
2
2
 
3
- import React, { createContext, useContext } from "react";
4
-
5
3
  // LOCAL CUSTOM COMPONENTS
6
4
  import Categories from "@evenicanpm/storefront-core/src/components-v2/navbar/categories";
7
5
  import NavigationList from "@evenicanpm/storefront-core/src/components-v2/navbar/nav-list/index";
8
-
9
6
  // STYLED COMPONENTS
10
7
  import {
11
- NavBarWrapper,
12
8
  InnerContainer,
9
+ NavBarWrapper,
13
10
  } from "@evenicanpm/storefront-core/src/components-v2/navbar/styles";
11
+ import type React from "react";
12
+ import { createContext, useContext } from "react";
14
13
 
15
14
  /**
16
15
  * Usage Examples:
@@ -57,7 +56,7 @@ export default function Navbar({
57
56
  elevation = 2,
58
57
  hideCategories = false,
59
58
  children,
60
- }: Props) {
59
+ }: Readonly<Props>) {
61
60
  return (
62
61
  <NavbarContext.Provider value={{ hideCategories }}>
63
62
  <NavBarWrapper hoverEffect={false} elevation={elevation} border={border}>
@@ -1,10 +1,10 @@
1
+ import BazaarCard from "@evenicanpm/storefront-core/src/components-v2/BazaarCard";
2
+ // GLOBAL CUSTOM COMPONENTS
3
+ import { NavLink } from "@evenicanpm/storefront-core/src/components-v2/nav-link/index";
1
4
  import Box from "@mui/material/Box";
2
5
  import Button from "@mui/material/Button";
3
- import styled from "@mui/material/styles/styled";
4
6
  import Container from "@mui/material/Container";
5
- // GLOBAL CUSTOM COMPONENTS
6
- import { NavLink } from "@evenicanpm/storefront-core/src/components-v2/nav-link/index";
7
- import BazaarCard from "@evenicanpm/storefront-core/src/components-v2/BazaarCard";
7
+ import styled from "@mui/material/styles/styled";
8
8
 
9
9
  // COMMON STYLED OBJECT
10
10
  export const NAV_LINK_STYLES = {
@@ -1,10 +1,10 @@
1
- import { describe, it, expect } from "vitest";
2
1
  import {
3
2
  transformCategoryNav,
4
3
  transformCmsNav,
5
4
  } from "@evenicanpm/storefront-core/src/components-v2/navbar/utils/transform-nav";
6
- import { CmsNavItem } from "@/cms/interfaces/navigation";
7
- import { CategoryHierarchy } from "@evenicanpm/storefront-core/src/lib/category-helpers";
5
+ import type { CategoryHierarchy } from "@evenicanpm/storefront-core/src/lib/category-helpers";
6
+ import { describe, expect, it } from "vitest";
7
+ import type { CmsNavItem } from "@/cms/interfaces/navigation";
8
8
 
9
9
  describe("transform nav items", () => {
10
10
  it("should recursively transform deeply nested categories and its children with correct href, title, and items", () => {
@@ -1,6 +1,6 @@
1
- import { CmsNavItem } from "@/cms/interfaces/navigation";
2
- import { CategoryHierarchy } from "@evenicanpm/storefront-core/src/lib/category-helpers";
3
- import { SvgIconComponent } from "@mui/icons-material";
1
+ import type { CategoryHierarchy } from "@evenicanpm/storefront-core/src/lib/category-helpers";
2
+ import type { SvgIconComponent } from "@mui/icons-material";
3
+ import type { CmsNavItem } from "@/cms/interfaces/navigation";
4
4
 
5
5
  type MenuType = "default" | "mega-menu" | "full-screen-mega-menu";
6
6
  export interface TransformedNavItem {
@@ -1,11 +1,11 @@
1
- import React from "react";
2
- import { Box } from "@mui/material";
3
1
  import { H4 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
2
+ import { Box } from "@mui/material";
4
3
  import { useTranslations } from "next-intl";
4
+ import React from "react";
5
5
 
6
6
  type Props = { message: string };
7
7
 
8
- export default function NoRecords({ message }: Props) {
8
+ export default function NoRecords({ message }: Readonly<Props>) {
9
9
  const t = useTranslations();
10
10
  return (
11
11
  <Box
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import Chip, { ChipProps } from "@mui/material/Chip";
3
+ import Chip, { type ChipProps } from "@mui/material/Chip";
4
4
  import styled from "@mui/material/styles/styled";
5
5
 
6
6
  // STYLED COMPONENT
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
 
3
- import React from "react";
4
- import IconButton, { IconButtonProps } from "@mui/material/IconButton";
5
3
  import Favorite from "@mui/icons-material/Favorite";
6
4
  import FavoriteBorder from "@mui/icons-material/FavoriteBorder";
5
+ import IconButton, { type IconButtonProps } from "@mui/material/IconButton";
6
+ import React from "react";
7
7
 
8
8
  export interface FavoriteButtonProps extends Omit<IconButtonProps, "onClick"> {
9
9
  isFavorite: boolean;
@@ -28,7 +28,7 @@ export default function FavoriteButton({
28
28
  activeColor = "primary",
29
29
  inactiveColor = "disabled",
30
30
  ...rest
31
- }: FavoriteButtonProps) {
31
+ }: Readonly<FavoriteButtonProps>) {
32
32
  const iconProps = customIconSize
33
33
  ? { sx: { fontSize: customIconSize } }
34
34
  : { fontSize: iconSize };
@@ -1,7 +1,7 @@
1
+ import { Box } from "@mui/material";
1
2
  import type { Meta, StoryObj } from "@storybook/react";
2
- import ProductCard from "./index";
3
3
  import { data } from "../../../../__mocks__/products";
4
- import { Box } from "@mui/material";
4
+ import ProductCard from "./index";
5
5
 
6
6
  const meta = {
7
7
  title: "Product/ProductCards/ProductCard",
@@ -1,54 +1,54 @@
1
1
  "use client";
2
2
 
3
- import React, {
4
- createContext,
5
- ReactNode,
6
- useContext,
7
- useMemo,
8
- useState,
9
- } from "react";
10
- import Link from "next/link";
11
- import Box from "@mui/material/Box";
12
- import Rating from "@mui/material/Rating";
13
- import IconButton from "@mui/material/IconButton";
14
- import { Delete, ShoppingCart } from "@mui/icons-material";
15
- import RemoveRedEye from "@mui/icons-material/RemoveRedEye";
16
- import { useTranslations } from "next-intl";
17
- import { useIsFetching } from "@tanstack/react-query";
3
+ import type { Cart } from "@evenicanpm/storefront-core/src/api-manager/schemas/cart.schema";
4
+ import type {
5
+ ExtendedProductListLine,
6
+ ExtendedWishlist,
7
+ WishlistLinesInput,
8
+ } from "@evenicanpm/storefront-core/src/api-manager/schemas/user.schema";
9
+ import useAddToCart from "@evenicanpm/storefront-core/src/api-manager/services/cart/mutations/add-to-cart";
10
+ // API AND SCHEMAS
11
+ import useRemoveFromWishlist from "@evenicanpm/storefront-core/src/api-manager/services/user/mutations/remove-from-wishlist";
12
+ import useUpdateWishlist from "@evenicanpm/storefront-core/src/api-manager/services/user/mutations/update-wishlist";
13
+ import { WISHLIST_DETAILS_QUERY_KEY } from "@evenicanpm/storefront-core/src/api-manager/services/user/queries/get-wishlist-details";
14
+ import { FlexBox } from "@evenicanpm/storefront-core/src/components-v2/flex-box";
18
15
  // GLOBAL CUSTOM COMPONENTS
19
16
  import LazyImage from "@evenicanpm/storefront-core/src/components-v2/LazyImage";
20
- import { Span } from "@evenicanpm/storefront-core/src/components-v2/Typography";
21
- import { FlexBox } from "@evenicanpm/storefront-core/src/components-v2/flex-box";
22
- import { useNotification } from "@evenicanpm/storefront-core/src/providers/notifications/use-notification";
23
- import AddToWishlistDialog from "@evenicanpm/storefront-core/src/components-v2/wishlist-dialogs/add-to-wishlist";
24
- import ProductViewDialog from "@evenicanpm/storefront-core/src/components-v2/product-dialog";
25
- // LOCAL CUSTOM COMPONENTS
26
- import ProductPrice from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-price";
27
- import ProductTitle from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-title";
28
- import QuantityBtns from "@evenicanpm/storefront-core/src/components-v2/product-cards/quantity-buttons";
29
17
  import DiscountChip from "@evenicanpm/storefront-core/src/components-v2/product-cards/discount-chip";
30
18
  import FavoriteButton from "@evenicanpm/storefront-core/src/components-v2/product-cards/favorite-button";
31
19
  // STYLED COMPONENTS
32
20
  import {
33
- ImageWrapper,
34
21
  ContentWrapper,
35
- StyledBazaarCard,
36
22
  HoverIconWrapper,
23
+ ImageWrapper,
24
+ StyledBazaarCard,
37
25
  } from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-card/styles/index";
26
+ // LOCAL CUSTOM COMPONENTS
27
+ import ProductPrice from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-price";
28
+ import ProductTitle from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-title";
29
+ import QuantityBtns from "@evenicanpm/storefront-core/src/components-v2/product-cards/quantity-buttons";
30
+ import ProductViewDialog from "@evenicanpm/storefront-core/src/components-v2/product-dialog";
31
+ import { Span } from "@evenicanpm/storefront-core/src/components-v2/Typography";
32
+ import AddToWishlistDialog from "@evenicanpm/storefront-core/src/components-v2/wishlist-dialogs/add-to-wishlist";
33
+ import useFavorite from "@evenicanpm/storefront-core/src/hooks/use-favorite";
38
34
  // LIBRARY AND HOOKS
39
35
  import buildDetailUrl from "@evenicanpm/storefront-core/src/lib/build-detail-url";
40
- import useFavorite from "@evenicanpm/storefront-core/src/hooks/use-favorite";
41
- // API AND SCHEMAS
42
- import useRemoveFromWishlist from "@evenicanpm/storefront-core/src/api-manager/services/user/mutations/remove-from-wishlist";
43
- import useUpdateWishlist from "@evenicanpm/storefront-core/src/api-manager/services/user/mutations/update-wishlist";
44
- import useAddToCart from "@evenicanpm/storefront-core/src/api-manager/services/cart/mutations/add-to-cart";
45
- import { WISHLIST_DETAILS_QUERY_KEY } from "@evenicanpm/storefront-core/src/api-manager/services/user/queries/get-wishlist-details";
46
- import {
47
- ExtendedWishlist,
48
- ExtendedProductListLine,
49
- WishlistLinesInput,
50
- } from "@evenicanpm/storefront-core/src/api-manager/schemas/user.schema";
51
- import { Cart } from "@evenicanpm/storefront-core/src/api-manager/schemas/cart.schema";
36
+ import { useNotification } from "@evenicanpm/storefront-core/src/providers/notifications/use-notification";
37
+ import { Delete, ShoppingCart } from "@mui/icons-material";
38
+ import RemoveRedEye from "@mui/icons-material/RemoveRedEye";
39
+ import Box from "@mui/material/Box";
40
+ import IconButton from "@mui/material/IconButton";
41
+ import Rating from "@mui/material/Rating";
42
+ import { useIsFetching } from "@tanstack/react-query";
43
+ import Link from "next/link";
44
+ import { useTranslations } from "next-intl";
45
+ import React, {
46
+ createContext,
47
+ type ReactNode,
48
+ useContext,
49
+ useMemo,
50
+ useState,
51
+ } from "react";
52
52
 
53
53
  function findChild(
54
54
  children: ReactNode,
@@ -397,16 +397,14 @@ ProductCard.QuickViewButton = () => {
397
397
 
398
398
  ProductCard.FavoriteButton = () => {
399
399
  const internal = useContext(ProductCardInternalContext);
400
- if (!internal) return null;
401
-
402
- const { handleToggleFavorite } = internal;
403
-
404
400
  const ctx = useContext(ProductCardContext);
405
- if (!ctx) return null;
406
401
 
407
- const { id } = ctx.product;
402
+ const id = ctx?.product?.id;
403
+ const isFavorite = useFavorite(id ? Number(id) : undefined);
408
404
 
409
- const isFavorite = useFavorite(Number(id));
405
+ if (!internal || !ctx) return null;
406
+
407
+ const { handleToggleFavorite } = internal;
410
408
 
411
409
  return (
412
410
  <FavoriteButton isFavorite={isFavorite} onToggle={handleToggleFavorite} />
@@ -1,7 +1,7 @@
1
- import styled from "@mui/material/styles/styled";
2
- import { StyledComponent } from "@mui/styled-engine";
3
1
  // GLOBAL CUSTOM COMPONENT
4
2
  import BazaarCard from "@evenicanpm/storefront-core/src/components-v2/BazaarCard";
3
+ import styled from "@mui/material/styles/styled";
4
+ import type { StyledComponent } from "@mui/styled-engine";
5
5
 
6
6
  export const StyledBazaarCard = styled(BazaarCard)({
7
7
  height: "100%",
@@ -1,7 +1,7 @@
1
- import type { Meta, StoryObj } from "@storybook/react";
2
- import ProductCardPlp from "./index";
3
1
  import { Box } from "@mui/material";
2
+ import type { Meta, StoryObj } from "@storybook/react";
4
3
  import { data } from "../../../../__mocks__/products";
4
+ import ProductCardPlp from "./index";
5
5
 
6
6
  const meta = {
7
7
  title: "Product/ProductCards/ProductCardPlp",
@@ -1,34 +1,34 @@
1
- import { createContext, useContext, ReactNode, useState } from "react";
2
- import Link from "next/link";
3
- import Rating from "@mui/material/Rating";
4
- import IconButton from "@mui/material/IconButton";
5
- import RemoveRedEye from "@mui/icons-material/RemoveRedEye";
6
- // GLOBAL CUSTOM COMPONENTS
7
- import { H6 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
8
1
  import {
9
2
  FlexBetween,
10
3
  FlexBox,
11
4
  } from "@evenicanpm/storefront-core/src/components-v2/flex-box/index";
12
5
  import ImageWithFallback from "@evenicanpm/storefront-core/src/components-v2/ImageWithFallback";
13
- import AddToWishlistDialog from "@evenicanpm/storefront-core/src/components-v2/wishlist-dialogs/add-to-wishlist";
14
- import ProductViewDialog from "@evenicanpm/storefront-core/src/components-v2/product-dialog";
15
6
  // LOCAL CUSTOM COMPONENTS
16
7
  import DiscountChip from "@evenicanpm/storefront-core/src/components-v2/product-cards/discount-chip";
17
- import QuantityButtons from "@evenicanpm/storefront-core/src/components-v2/product-cards/quantity-buttons";
18
8
  import FavoriteButton from "@evenicanpm/storefront-core/src/components-v2/product-cards/favorite-button";
9
+ // STYLED COMPONENTS
10
+ import {
11
+ HoverIconWrapper,
12
+ PriceText,
13
+ } from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-card-plp/styles/index";
14
+ import QuantityButtons from "@evenicanpm/storefront-core/src/components-v2/product-cards/quantity-buttons";
15
+ import ProductViewDialog from "@evenicanpm/storefront-core/src/components-v2/product-dialog";
16
+ // GLOBAL CUSTOM COMPONENTS
17
+ import { H6 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
18
+ import AddToWishlistDialog from "@evenicanpm/storefront-core/src/components-v2/wishlist-dialogs/add-to-wishlist";
19
+ import useCart from "@evenicanpm/storefront-core/src/hooks/use-cart";
20
+ import useFavorite from "@evenicanpm/storefront-core/src/hooks/use-favorite";
21
+ import buildDetailUrl from "@evenicanpm/storefront-core/src/lib/build-detail-url";
19
22
  // LIBRARY AND HOOKS
20
23
  import {
21
24
  calculateDiscount,
22
25
  currency,
23
26
  } from "@evenicanpm/storefront-core/src/lib/lib";
24
- import buildDetailUrl from "@evenicanpm/storefront-core/src/lib/build-detail-url";
25
- import useCart from "@evenicanpm/storefront-core/src/hooks/use-cart";
26
- import useFavorite from "@evenicanpm/storefront-core/src/hooks/use-favorite";
27
- // STYLED COMPONENTS
28
- import {
29
- PriceText,
30
- HoverIconWrapper,
31
- } from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-card-plp/styles/index";
27
+ import RemoveRedEye from "@mui/icons-material/RemoveRedEye";
28
+ import IconButton from "@mui/material/IconButton";
29
+ import Rating from "@mui/material/Rating";
30
+ import Link from "next/link";
31
+ import { createContext, type ReactNode, useContext, useState } from "react";
32
32
 
33
33
  type Product = {
34
34
  title: string;
@@ -201,11 +201,11 @@ ProductCardPlp.QuickViewButton = () => {
201
201
 
202
202
  ProductCardPlp.FavoriteButton = () => {
203
203
  const ctx = useContext(ProductCardPlpContext);
204
- if (!ctx) return null;
205
204
 
206
- const { id } = ctx.product;
205
+ const id = ctx?.product?.id;
206
+ const isFavorite = useFavorite(id ? Number(id) : undefined);
207
207
 
208
- const isFavorite = useFavorite(Number(id));
208
+ if (!ctx) return null;
209
209
 
210
210
  return (
211
211
  <FavoriteButton
@@ -216,17 +216,18 @@ ProductCardPlp.FavoriteButton = () => {
216
216
  />
217
217
  );
218
218
  };
219
-
220
219
  // Using quantity buttons (addtocart) doesn't make sense when we have product variants to select.
221
220
  // So hide them for now, implement based on client requirements.
222
221
  ProductCardPlp.QuantityButtons = () => {
223
222
  const ctx = useContext(ProductCardPlpContext);
224
- if (!ctx) return null;
225
223
 
226
- const { id } = ctx.product;
224
+ const id = ctx?.product?.id;
227
225
  const { currentCartLine, handleCartAmountChange, loading } = useCart(id);
226
+
228
227
  const [quantity, setQuantity] = useState(currentCartLine?.Quantity || 0);
229
228
 
229
+ if (!ctx) return null;
230
+
230
231
  const handleIncrementQuantity = () => {
231
232
  const qty = quantity + 1;
232
233
  handleCartAmountChange(qty);
@@ -1,7 +1,7 @@
1
1
  import type { Meta, StoryObj } from "@storybook/react";
2
2
  import React from "react";
3
- import { ProductCardPlpList } from "./index";
4
3
  import { data } from "../../../../__mocks__/products";
4
+ import { ProductCardPlpList } from "./index";
5
5
 
6
6
  const meta = {
7
7
  title: "Product/ProductCards/ProductCardPlpList",
@@ -20,7 +20,7 @@ interface Props {
20
20
  }
21
21
  // ==============================================================
22
22
 
23
- export default function ProductTags({ tags }: Props) {
23
+ export default function ProductTags({ tags }: Readonly<Props>) {
24
24
  return (
25
25
  <StyledRoot>
26
26
  {tags.map((item) => (