@evenicanpm/storefront-core 1.8.4 → 2.0.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 (471) hide show
  1. package/.storybook/main.ts +2 -3
  2. package/.storybook/preview.tsx +0 -2
  3. package/__mocks__/create-mutation.ts +16 -8
  4. package/__mocks__/next-image.tsx +12 -3
  5. package/docs.tsconfig.json +5 -5
  6. package/package.json +3 -3
  7. package/src/api-manager/datasources/d365/d365-cart.datasource.ts +13 -8
  8. package/src/api-manager/datasources/d365/d365-categories.datasource.ts +2 -3
  9. package/src/api-manager/datasources/d365/d365-order.datasource.ts +4 -4
  10. package/src/api-manager/datasources/d365/d365-organization.datasource.ts +15 -8
  11. package/src/api-manager/datasources/d365/d365-product.datasource.ts +34 -19
  12. package/src/api-manager/datasources/d365/d365-user.datasource.ts +47 -19
  13. package/src/api-manager/datasources/e4/address/e4-address.remaps.ts +2 -2
  14. package/src/api-manager/datasources/e4/cart/e4-cart.datasource.ts +7 -5
  15. package/src/api-manager/datasources/e4/cart/e4-cart.remaps.ts +1 -1
  16. package/src/api-manager/datasources/e4/categories/e4-categories.translator.ts +3 -3
  17. package/src/api-manager/datasources/e4/product/e4-product.remaps.ts +3 -3
  18. package/src/api-manager/datasources/e4/product/e4-product.translator.ts +3 -1
  19. package/src/api-manager/datasources/e4/user/e4-user.datasource.ts +4 -8
  20. package/src/api-manager/index.ts +10 -128
  21. package/src/api-manager/lib/category-helpers.ts +1 -1
  22. package/src/api-manager/lib/get-graphql-client.ts +2 -2
  23. package/src/api-manager/schemas/product.schema.ts +9 -0
  24. package/src/api-manager/services/create-extension-query.ts +1 -1
  25. package/src/api-manager/services/create-query.ts +106 -266
  26. package/src/api-manager/types/Datasource.ts +0 -3
  27. package/src/auth/auth-options.test.ts +1 -1
  28. package/src/auth/msal.ts +1 -1
  29. package/src/auth/providers/entra-external-id-provider.ts +1 -1
  30. package/src/auth/providers/index.ts +1 -1
  31. package/src/cms/blocks/components/category-card.tsx +0 -1
  32. package/src/cms/blocks/components/category-carousel/index.tsx +3 -4
  33. package/src/cms/blocks/components/featured-categories.tsx +1 -2
  34. package/src/cms/blocks/components/featured-products.tsx +1 -2
  35. package/src/cms/blocks/components/footer/index.tsx +1 -2
  36. package/src/cms/blocks/components/footer/sections/footer-app-store.tsx +2 -2
  37. package/src/cms/blocks/components/footer/sections/footer-contact.tsx +1 -2
  38. package/src/cms/blocks/components/footer/sections/footer-links.tsx +1 -1
  39. package/src/cms/blocks/components/footer/sections/footer-logo.tsx +2 -3
  40. package/src/cms/blocks/components/footer/sections/footer-social-links.tsx +7 -3
  41. package/src/cms/blocks/components/footer.tsx +0 -1
  42. package/src/cms/blocks/components/hero-carousel/index.tsx +2 -3
  43. package/src/cms/blocks/components/hero.tsx +0 -1
  44. package/src/cms/blocks/components/image.tsx +0 -1
  45. package/src/cms/blocks/components/media-card.tsx +0 -1
  46. package/src/cms/blocks/components/product-carousel/index.tsx +3 -4
  47. package/src/cms/blocks/components/product-section-fullwidth/index.tsx +4 -5
  48. package/src/cms/blocks/components/rich-text.tsx +0 -1
  49. package/src/cms/blocks/components/seo/index.tsx +1 -2
  50. package/src/cms/blocks/components/services/index.tsx +0 -1
  51. package/src/cms/blocks/components/services/service-card.tsx +1 -2
  52. package/src/cms/blocks/components/shared/featured-product-card.tsx +3 -4
  53. package/src/cms/blocks/components/shared/product-category-item.tsx +4 -4
  54. package/src/cms/blocks/components/shared/product-grid.tsx +2 -3
  55. package/src/cms/blocks/components/shared/top-categories-card.tsx +2 -3
  56. package/src/cms/blocks/components/shared/top-rating-product-card.tsx +4 -5
  57. package/src/cms/blocks/icons/components/category.tsx +1 -1
  58. package/src/cms/blocks/icons/components/dotted-star.tsx +1 -1
  59. package/src/cms/blocks/icons/components/fallback-icon.tsx +0 -1
  60. package/src/cms/blocks/icons/components/gift-box.tsx +1 -1
  61. package/src/cms/blocks/icons/components/light.tsx +1 -1
  62. package/src/cms/blocks/icons/components/new-arrival.tsx +1 -1
  63. package/src/cms/blocks/icons/components/rank-badge.tsx +1 -1
  64. package/src/cms/blocks/icons/index.ts +1 -6
  65. package/src/{components-v2 → components}/BazaarTextField.tsx +8 -8
  66. package/src/{components-v2 → components}/CountryInput.stories.tsx +4 -2
  67. package/src/{components-v2 → components}/DropZone.tsx +1 -1
  68. package/src/{components-v2 → components}/ImageWithFallback.tsx +1 -1
  69. package/src/{components-v2 → components}/T/__tests__/T.test.tsx +9 -13
  70. package/src/{components-v2 → components}/T/index.tsx +0 -1
  71. package/src/{components-v2 → components}/Typography.tsx +0 -1
  72. package/src/components/_tests_/BazaarCard.test.tsx +16 -0
  73. package/src/components/_tests_/BazaarImage.test.tsx +18 -0
  74. package/src/components/_tests_/BazaarMenu.test.tsx +46 -0
  75. package/src/components/_tests_/BazaarSwitch.test.tsx +17 -0
  76. package/src/components/_tests_/BazaarTextField.test.tsx +22 -0
  77. package/src/components/_tests_/BoxShadowCard.test.tsx +14 -0
  78. package/src/components/_tests_/DropZone.test.tsx +51 -0
  79. package/src/components/_tests_/HoverBox.test.tsx +9 -0
  80. package/src/components/_tests_/Image.test.tsx +12 -0
  81. package/src/components/_tests_/ImageWithFallback.test.tsx +76 -0
  82. package/src/components/_tests_/LazyImage.test.tsx +32 -0
  83. package/src/components/_tests_/Loading.test.tsx +15 -0
  84. package/src/components/_tests_/SearchInput.test.tsx +14 -0
  85. package/src/components/_tests_/SnackbarProvider.test.tsx +22 -0
  86. package/src/components/_tests_/Typography.test.tsx +53 -0
  87. package/src/components/_tests_/WhiteButton.test.tsx +20 -0
  88. package/src/components/_tests_/countries-input.test.tsx +39 -0
  89. package/src/components/_tests_/no-records.test.tsx +14 -0
  90. package/src/components/_tests_/site-logo.test.tsx +28 -0
  91. package/src/{components-v2 → components}/accordion/accordion-header.tsx +1 -1
  92. package/src/{components-v2 → components}/accordion/index.ts +1 -1
  93. package/src/{components-v2 → components}/carousel/carousel.tsx +3 -3
  94. package/src/{components-v2 → components}/carousel/components/carousel-arrows.tsx +1 -1
  95. package/src/{components-v2 → components}/carousel/components/carousel-dots.tsx +1 -1
  96. package/src/{components-v2 → components}/carousel/index.ts +1 -1
  97. package/src/{components-v2 → components}/carousel-cards/carousel-card-1/carousel-card-1.tsx +3 -3
  98. package/src/components/carousel-cards/carousel-card-1/index.ts +1 -0
  99. package/src/{components-v2 → components}/categories/Categories.stories.tsx +1 -1
  100. package/src/{components-v2 → components}/categories/__tests__/category-menu.test.tsx +1 -1
  101. package/src/{components-v2 → components}/categories/category-list/category-list.tsx +5 -5
  102. package/src/{components-v2/navbar/mega-menu → components/categories/category-list}/index.ts +1 -1
  103. package/src/{components-v2 → components}/categories/category-list/styles.ts +1 -1
  104. package/src/{components-v2 → components}/categories/category-list-item/category-menu-item.tsx +1 -1
  105. package/src/components/categories/category-list-item/index.ts +1 -0
  106. package/src/{components-v2 → components}/categories/category-menu.tsx +1 -1
  107. package/src/{components-v2 → components}/categories/mega-menu/banner.tsx +3 -3
  108. package/src/{components-v2 → components}/categories/mega-menu/column-list.tsx +4 -4
  109. package/src/{components-v2 → components}/categories/mega-menu/mega-menu-1.tsx +3 -3
  110. package/src/{components-v2 → components}/categories/mega-menu/mega-menu-2.tsx +4 -4
  111. package/src/{components-v2 → components}/countries-input.tsx +1 -1
  112. package/src/{components-v2 → components}/flex-box/__tests__/flex-box.test.tsx +6 -8
  113. package/src/components/flex-box/index.ts +5 -0
  114. package/src/{components-v2 → components}/header/__tests__/header.test.tsx +8 -4
  115. package/src/{components-v2 → components}/header/__tests__/user.test.tsx +1 -1
  116. package/src/{components-v2 → components}/header/components/categories-menu.tsx +3 -3
  117. package/src/{components-v2 → components}/header/components/mobile-header.tsx +11 -11
  118. package/src/{components-v2 → components}/header/components/user.tsx +3 -3
  119. package/src/{components-v2 → components}/header/header.tsx +6 -6
  120. package/src/{components-v2 → components}/header/index.ts +1 -1
  121. package/src/{components-v2 → components}/header/sticky-header.tsx +3 -3
  122. package/src/{components-v2 → components}/icons/cart-bag.tsx +1 -0
  123. package/src/{components-v2 → components}/icons/category-outline.tsx +1 -0
  124. package/src/{components-v2 → components}/icons/category.tsx +1 -0
  125. package/src/{components-v2 → components}/icons/home.tsx +1 -0
  126. package/src/{components-v2 → components}/icons/search.tsx +1 -0
  127. package/src/{components-v2 → components}/icons/shopping-bag-outlined.tsx +1 -0
  128. package/src/{components-v2 → components}/icons/up-down.tsx +1 -0
  129. package/src/{components-v2 → components}/icons/user.tsx +1 -0
  130. package/src/{components-v2 → components}/icons/user2.tsx +1 -0
  131. package/src/{components-v2 → components}/mini-cart/components/cart-item.tsx +2 -2
  132. package/src/{components-v2 → components}/mini-cart/components/empty-view.tsx +2 -2
  133. package/src/{components-v2 → components}/mini-cart/components/top-header.tsx +2 -2
  134. package/src/{components-v2 → components}/mini-cart/index.ts +1 -1
  135. package/src/{components-v2 → components}/mini-cart/mini-cart-trigger.tsx +3 -5
  136. package/src/{components-v2 → components}/mini-cart/mini-cart.tsx +5 -5
  137. package/src/{components-v2 → components}/mobile-navigation/MobileNavigationBar.stories.tsx +2 -2
  138. package/src/{components-v2 → components}/mobile-navigation/index.ts +1 -1
  139. package/src/{components-v2 → components}/mobile-navigation/mobile-navigation-bar.tsx +5 -5
  140. package/src/{components-v2 → components}/mobile-navigation/styles/index.ts +2 -2
  141. package/src/{components-v2 → components}/nav-link/__tests__/nav-link.test.tsx +2 -1
  142. package/src/{components-v2 → components}/nav-link/index.ts +3 -3
  143. package/src/{components-v2 → components}/nav-link/nav-link-2.tsx +1 -1
  144. package/src/{components-v2 → components}/nav-link/nav-link-3.tsx +1 -1
  145. package/src/{components-v2 → components}/nav-link/nav-link.tsx +20 -10
  146. package/src/{components-v2 → components}/navbar/__tests__/navbar.test.tsx +4 -7
  147. package/src/{components-v2 → components}/navbar/categories.tsx +4 -4
  148. package/src/{components-v2 → components}/navbar/category-based-menu/category-based-menu.tsx +5 -5
  149. package/src/components/navbar/category-based-menu/index.ts +1 -0
  150. package/src/{components-v2 → components}/navbar/category-based-menu/styles.ts +4 -4
  151. package/src/{components-v2 → components}/navbar/index.ts +1 -1
  152. package/src/components/navbar/mega-menu/index.ts +1 -0
  153. package/src/{components-v2 → components}/navbar/mega-menu/mega-menu.tsx +10 -4
  154. package/src/{components-v2 → components}/navbar/mega-menu/styles.ts +1 -1
  155. package/src/{components-v2 → components}/navbar/mobile-menu/index.ts +1 -1
  156. package/src/{components-v2 → components}/navbar/mobile-menu/mobile-menu.test.tsx +4 -3
  157. package/src/{components-v2 → components}/navbar/mobile-menu/mobile-menu.tsx +4 -4
  158. package/src/{components-v2 → components}/navbar/nav-list/cms-nav.test.tsx +1 -2
  159. package/src/components/navbar/nav-list/index.ts +1 -0
  160. package/src/{components-v2 → components}/navbar/nav-list/nav-item-child.tsx +4 -4
  161. package/src/{components-v2 → components}/navbar/nav-list/nav-list.tsx +8 -8
  162. package/src/{components-v2 → components}/navbar/navbar.tsx +3 -3
  163. package/src/{components-v2 → components}/navbar/styles.ts +2 -2
  164. package/src/{components-v2 → components}/navbar/utils/transform-nav.test.ts +1 -1
  165. package/src/{components-v2 → components}/no-records.tsx +1 -2
  166. package/src/{components-v2 → components}/product-cards/favorite-button.tsx +0 -1
  167. package/src/{components-v2/navbar/nav-list → components/product-cards/product-card}/index.ts +1 -1
  168. package/src/{components-v2 → components}/product-cards/product-card/product-card.tsx +11 -11
  169. package/src/{components-v2 → components}/product-cards/product-card/styles/index.ts +3 -3
  170. package/src/{components-v2/categories/category-list → components/product-cards/product-card-plp}/index.ts +1 -1
  171. package/src/{components-v2 → components}/product-cards/product-card-plp/product-card.tsx +9 -9
  172. package/src/{components-v2 → components}/product-cards/product-card-plp-list/ProductCardPlpList.stories.tsx +0 -1
  173. package/src/components/product-cards/product-card-plp-list/index.ts +1 -0
  174. package/src/{components-v2 → components}/product-cards/product-card-plp-list/product-card.tsx +9 -9
  175. package/src/{components-v2 → components}/product-cards/product-card-search/ProductCardSearch.stories.tsx +0 -1
  176. package/src/components/product-cards/product-card-search/index.ts +1 -0
  177. package/src/{components-v2 → components}/product-cards/product-card-search/product-card.tsx +7 -7
  178. package/src/{components-v2 → components}/product-cards/product-price.tsx +2 -2
  179. package/src/{components-v2 → components}/product-cards/product-rating.tsx +2 -2
  180. package/src/{components-v2 → components}/product-cards/product-title.tsx +1 -1
  181. package/src/{components-v2 → components}/product-cards/quantity-buttons.tsx +2 -2
  182. package/src/{components-v2 → components}/product-dialog/__tests__/product-dialog.test.tsx +1 -1
  183. package/src/{components-v2 → components}/product-dialog/compound/product-dialog.tsx +5 -5
  184. package/src/{components-v2 → components}/product-dialog/index.tsx +1 -1
  185. package/src/{components-v2 → components}/product-dimensions/Dimensions.stories.tsx +2 -4
  186. package/src/{components-v2 → components}/product-dimensions/__tests__/product-dimensions.test.tsx +2 -2
  187. package/src/{components-v2 → components}/product-dimensions/compound/dimensions-group-error.tsx +4 -4
  188. package/src/{components-v2 → components}/product-dimensions/compound/dimensions-group-label.tsx +2 -2
  189. package/src/{components-v2 → components}/product-dimensions/compound/dimensions-group-list-chip.tsx +2 -2
  190. package/src/{components-v2 → components}/product-dimensions/compound/dimensions-group-list.tsx +2 -2
  191. package/src/{components-v2 → components}/product-dimensions/compound/dimensions-group.tsx +3 -3
  192. package/src/{components-v2 → components}/product-dimensions/compound/dimensions.tsx +2 -2
  193. package/src/{components-v2 → components}/product-dimensions/index.tsx +1 -1
  194. package/src/{components-v2 → components}/product-quantity-buttons/ProductQuantity.stories.tsx +1 -3
  195. package/src/{components-v2 → components}/product-quantity-buttons/__tests__/product-quantity-buttons.test.tsx +12 -2
  196. package/src/{components-v2 → components}/product-quantity-buttons/compound/quantity-buttons-root.tsx +3 -3
  197. package/src/{components-v2 → components}/product-quantity-buttons/index.tsx +1 -2
  198. package/src/{components-v2 → components}/product-quantity-variants/ProductQuantity.stories.tsx +1 -3
  199. package/src/{components-v2 → components}/product-quantity-variants/__tests__/product-quantity-variants.test.tsx +6 -4
  200. package/src/{components-v2 → components}/product-quantity-variants/index.tsx +2 -2
  201. package/src/{components-v2 → components}/products-view/ProductsGrid.stories.tsx +1 -3
  202. package/src/{components-v2 → components}/products-view/ProductsList.stories.tsx +1 -3
  203. package/src/{components-v2 → components}/products-view/__tests__/products-view.test.tsx +31 -12
  204. package/src/{components-v2 → components}/products-view/compound/products-grid-view.tsx +7 -7
  205. package/src/{components-v2 → components}/products-view/compound/products-list-view.tsx +4 -4
  206. package/src/{components-v2 → components}/products-view/compound/types.ts +1 -1
  207. package/src/{components-v2 → components}/products-view/index.tsx +3 -3
  208. package/src/{components-v2/side-nav → components/progress}/index.ts +1 -1
  209. package/src/{components-v2 → components}/progress/progress.tsx +3 -3
  210. package/src/{components-v2 → components}/scrollbar/Scrollbar.stories.tsx +1 -3
  211. package/src/{components-v2 → components}/scrollbar/__tests__/scrollbar.test.tsx +7 -1
  212. package/src/{components-v2/progress → components/scrollbar}/index.ts +1 -1
  213. package/src/{components-v2 → components}/scrollbar/scrollbar.tsx +1 -1
  214. package/src/{components-v2 → components}/search-bar/SearchBarLarge.stories.tsx +1 -3
  215. package/src/{components-v2 → components}/search-bar/__tests__/search-bar.test.tsx +7 -1
  216. package/src/{components-v2 → components}/search-bar/compound/results-item-lg.tsx +2 -3
  217. package/src/{components-v2 → components}/search-bar/compound/results-item-sm.tsx +4 -5
  218. package/src/{components-v2 → components}/search-bar/compound/results-suspense.tsx +5 -5
  219. package/src/{components-v2 → components}/search-bar/compound/results.tsx +2 -2
  220. package/src/{components-v2 → components}/search-bar/compound/search-bar-root.tsx +5 -5
  221. package/src/{components-v2 → components}/search-bar/compound/textfield-adornment-category.tsx +3 -4
  222. package/src/{components-v2 → components}/search-bar/compound/textfield-adornment-search-icon.tsx +1 -1
  223. package/src/{components-v2 → components}/search-bar/compound/textfield.tsx +5 -6
  224. package/src/{components-v2 → components}/search-bar/index.tsx +1 -1
  225. package/src/{components-v2 → components}/search-bar/utils/findCategoryNameById.ts +3 -3
  226. package/src/{components-v2 → components}/section/__tests__/section.test.tsx +14 -7
  227. package/src/{components-v2 → components}/section/compound/section-header.tsx +2 -2
  228. package/src/{components-v2 → components}/section/compound/section.tsx +1 -1
  229. package/src/{components-v2 → components}/section/index.ts +1 -1
  230. package/src/{components-v2 → components}/side-nav/SideNav.stories.tsx +1 -1
  231. package/src/{components-v2 → components}/side-nav/__tests__/side-nav.test.tsx +17 -14
  232. package/src/{components-v2/scrollbar → components/side-nav}/index.ts +1 -1
  233. package/src/{components-v2 → components}/side-nav/side-nav.tsx +1 -1
  234. package/src/{components-v2 → components}/site-logo.tsx +8 -1
  235. package/src/{components-v2 → components}/wishlist-dialogs/__tests__/create-new-list.test.tsx +1 -1
  236. package/src/{components-v2 → components}/wishlist-dialogs/add-to-wishlist/add-to-wishlist-button.tsx +3 -3
  237. package/src/{components-v2 → components}/wishlist-dialogs/add-to-wishlist/compound/add-to-wishlist-bottom-ui.tsx +2 -2
  238. package/src/{components-v2 → components}/wishlist-dialogs/add-to-wishlist/compound/add-to-wishlist-dialog.tsx +4 -4
  239. package/src/{components-v2 → components}/wishlist-dialogs/add-to-wishlist/compound/add-to-wishlist-list.tsx +3 -3
  240. package/src/{components-v2 → components}/wishlist-dialogs/add-to-wishlist/compound/wishlist-dialog-header.tsx +3 -4
  241. package/src/{components-v2 → components}/wishlist-dialogs/add-to-wishlist/compound/wishlist-dialog-item.tsx +4 -4
  242. package/src/{components-v2 → components}/wishlist-dialogs/add-to-wishlist/index.tsx +1 -1
  243. package/src/{components-v2 → components}/wishlist-dialogs/create-wishlist/compound/create-wishlist-bottom-ui.tsx +2 -2
  244. package/src/{components-v2 → components}/wishlist-dialogs/create-wishlist/compound/create-wishlist-dialog.tsx +2 -2
  245. package/src/{components-v2 → components}/wishlist-dialogs/create-wishlist/compound/create-wishlist-form.tsx +2 -2
  246. package/src/{components-v2 → components}/wishlist-dialogs/create-wishlist/create-wishlist-button.tsx +2 -2
  247. package/src/{components-v2 → components}/wishlist-dialogs/create-wishlist/index.tsx +1 -1
  248. package/src/{components-v2 → components}/wishlist-dialogs/styles.ts +1 -1
  249. package/src/hooks/use-nextauth-session.ts +4 -1
  250. package/src/hooks/use-overflow-detect.ts +4 -4
  251. package/src/lib/cart-cookie-handler.ts +2 -2
  252. package/src/lib/category-helpers.ts +1 -1
  253. package/src/lib/lib.ts +2 -2
  254. package/src/lib/page-slugs.ts +0 -2
  255. package/src/lib/refiner-utils.ts +5 -5
  256. package/src/{pages-v2 → pages}/account/account-navigation.tsx +20 -23
  257. package/src/{pages-v2 → pages}/account/addresses/address-form.tsx +15 -7
  258. package/src/{pages-v2 → pages}/account/addresses/address-item.tsx +2 -2
  259. package/src/{pages-v2 → pages}/account/dashboard-header.tsx +5 -5
  260. package/src/{pages-v2 → pages}/account/orders/icons/delivery.tsx +1 -0
  261. package/src/{pages-v2 → pages}/account/orders/icons/package-box.tsx +1 -0
  262. package/src/{pages-v2 → pages}/account/orders/icons/truck-filled.tsx +1 -0
  263. package/src/{pages-v2 → pages}/account/orders/order-progress.tsx +5 -5
  264. package/src/{pages-v2 → pages}/account/orders/order-row.tsx +2 -2
  265. package/src/{pages-v2 → pages}/account/orders/order-summary.tsx +4 -4
  266. package/src/{pages-v2 → pages}/account/orders/ordered-products.tsx +2 -2
  267. package/src/{pages-v2 → pages}/account/profile/profile-button.test.tsx +2 -2
  268. package/src/{pages-v2 → pages}/account/profile/profile-button.tsx +1 -1
  269. package/src/{pages-v2 → pages}/account/profile/user-info.tsx +2 -2
  270. package/src/{pages-v2 → pages}/account/styles.ts +1 -1
  271. package/src/{pages-v2 → pages}/account/wishlist/create-new-list.tsx +2 -2
  272. package/src/{pages-v2 → pages}/account/wishlist/create-wishlist-button.tsx +2 -2
  273. package/src/{pages-v2 → pages}/account/wishlist/wishlist-item.tsx +3 -3
  274. package/src/{pages-v2 → pages}/blog/blog-card.tsx +4 -4
  275. package/src/{pages-v2 → pages}/cart/__tests__/cart-item.test.tsx +1 -1
  276. package/src/{pages-v2 → pages}/cart/__tests__/checkout-form.test.tsx +1 -1
  277. package/src/{pages-v2 → pages}/cart/__tests__/estimate-shipping.test.tsx +11 -11
  278. package/src/{pages-v2 → pages}/cart/cart-item.tsx +50 -22
  279. package/src/{pages-v2 → pages}/cart/checkout-form.tsx +5 -5
  280. package/src/{pages-v2 → pages}/cart/coupon-entry.tsx +2 -2
  281. package/src/{pages-v2 → pages}/cart/estimate-shipping.tsx +2 -2
  282. package/src/{pages-v2 → pages}/checkout/checkout-alt-form/checkout-form.tsx +2 -2
  283. package/src/{pages-v2 → pages}/checkout/checkout-alt-form/checkout-step.tsx +5 -5
  284. package/src/{pages-v2 → pages}/checkout/checkout-alt-form/index.ts +1 -1
  285. package/src/{pages-v2 → pages}/checkout/checkout-alt-form/step-heading.tsx +4 -4
  286. package/src/{pages-v2 → pages}/checkout/checkout-alt-form/steps/address/address-card.tsx +2 -2
  287. package/src/{pages-v2 → pages}/checkout/checkout-alt-form/steps/address/delivery-address.tsx +25 -21
  288. package/src/{pages-v2 → pages}/checkout/checkout-alt-form/steps/address/new-address-form.tsx +3 -3
  289. package/src/{pages-v2 → pages}/checkout/checkout-alt-form/steps/customer-info/customer-information.tsx +2 -2
  290. package/src/{pages-v2 → pages}/checkout/checkout-alt-form/steps/payment/payment-details.tsx +36 -16
  291. package/src/{pages-v2 → pages}/checkout/checkout-alt-form/steps/shipping/delivery-date.tsx +2 -2
  292. package/src/{pages-v2 → pages}/checkout/checkout-alt-form/steps/shipping/delivery-options.tsx +3 -3
  293. package/src/{pages-v2 → pages}/checkout/checkout-alt-summary/cart-item.tsx +3 -3
  294. package/src/{pages-v2 → pages}/checkout/checkout-alt-summary/checkout-alt-summary.tsx +4 -4
  295. package/src/pages/checkout/checkout-alt-summary/index.ts +1 -0
  296. package/src/{pages-v2 → pages}/checkout/checkout-alt-summary/list-item.tsx +2 -2
  297. package/src/{pages-v2 → pages}/confirmation/address.tsx +2 -2
  298. package/src/{pages-v2 → pages}/confirmation/confirmation-summary.tsx +3 -3
  299. package/src/{pages-v2 → pages}/confirmation/ordered-products.tsx +2 -2
  300. package/src/{pages-v2 → pages}/product-details/available-shops.tsx +2 -5
  301. package/src/{pages-v2 → pages}/product-details/bopis/find-in-store-button.tsx +1 -2
  302. package/src/{pages-v2 → pages}/product-details/bopis/find-in-store-modal.tsx +4 -8
  303. package/src/{pages-v2 → pages}/product-details/bopis/pickup-option-select.tsx +1 -1
  304. package/src/pages/product-details/bopis/store-card/index.ts +1 -0
  305. package/src/{pages-v2 → pages}/product-details/bopis/store-card/shop-card.tsx +5 -5
  306. package/src/{pages-v2 → pages}/product-details/currency.ts +2 -2
  307. package/src/{pages-v2 → pages}/product-details/frequently-bought.tsx +3 -3
  308. package/src/{pages-v2 → pages}/product-details/frequently-product-card.tsx +5 -5
  309. package/src/{pages-v2 → pages}/product-details/product-comment.tsx +2 -2
  310. package/src/{pages-v2 → pages}/product-details/product-description.tsx +4 -2
  311. package/src/{pages-v2 → pages}/product-details/product-filter-card.tsx +5 -5
  312. package/src/{pages-v2 → pages}/product-details/product-intro/compound/product-info.tsx +8 -9
  313. package/src/{pages-v2 → pages}/product-details/product-intro/compound/product-intro-images.tsx +4 -4
  314. package/src/{pages-v2 → pages}/product-details/product-intro/compound/product-intro.tsx +3 -3
  315. package/src/{pages-v2 → pages}/product-details/product-intro/compound/thumbnail-with-skeleton.tsx +4 -1
  316. package/src/{pages-v2 → pages}/product-details/product-review.tsx +3 -6
  317. package/src/{pages-v2 → pages}/product-details/product-tabs.tsx +1 -1
  318. package/src/{pages-v2 → pages}/product-details/related-products.tsx +2 -2
  319. package/src/{pages-v2 → pages}/product-list/breadcrumbs.tsx +0 -1
  320. package/src/{pages-v2 → pages}/product-list/facet-group.tsx +1 -1
  321. package/src/{pages-v2 → pages}/product-list/list-filter.tsx +2 -3
  322. package/src/{pages-v2 → pages}/product-list/pagination.tsx +1 -1
  323. package/src/{pages-v2 → pages}/product-list/product-list-context.tsx +4 -4
  324. package/src/{pages-v2 → pages}/product-list/product-list-view.tsx +6 -6
  325. package/src/{pages-v2 → pages}/product-list/quick-view-dialog-content.tsx +6 -11
  326. package/src/{pages-v2 → pages}/product-list/selected-facets.tsx +2 -2
  327. package/src/{pages-v2 → pages}/product-list/utils/search-for-category.ts +3 -3
  328. package/src/{pages-v2 → pages}/quickorder/context.ts +8 -2
  329. package/src/{pages-v2 → pages}/quickorder/order-upload.tsx +31 -10
  330. package/src/{pages-v2 → pages}/quickorder/provider.tsx +16 -17
  331. package/src/{pages-v2 → pages}/quickorder/quick-order-header.tsx +3 -3
  332. package/src/{pages-v2 → pages}/quickorder/quick-order-row.tsx +1 -1
  333. package/src/{pages-v2 → pages}/quickorder/quick-order-table.tsx +1 -1
  334. package/src/{pages-v2 → pages}/quickorder/quick-order.tsx +27 -21
  335. package/src/providers/nav-provider/index.tsx +1 -1
  336. package/src/providers/notifications/README.md +1 -1
  337. package/src/providers/notifications/notification-context.tsx +10 -4
  338. package/tsconfig.json +1 -2
  339. package/typedoc.js +1 -1
  340. package/src/components-v2/carousel-cards/carousel-card-1/index.ts +0 -1
  341. package/src/components-v2/categories/category-list-item/index.ts +0 -1
  342. package/src/components-v2/flex-box/index.ts +0 -5
  343. package/src/components-v2/navbar/category-based-menu/index.ts +0 -1
  344. package/src/components-v2/product-cards/product-card/index.ts +0 -1
  345. package/src/components-v2/product-cards/product-card-plp/index.ts +0 -1
  346. package/src/components-v2/product-cards/product-card-plp-list/index.ts +0 -1
  347. package/src/components-v2/product-cards/product-card-search/index.ts +0 -1
  348. package/src/pages-v2/checkout/checkout-alt-summary/index.ts +0 -1
  349. package/src/pages-v2/product-details/bopis/store-card/index.ts +0 -1
  350. package/src/{components-v2 → components}/BazaarCard.stories.tsx +0 -0
  351. package/src/{components-v2 → components}/BazaarCard.tsx +0 -0
  352. package/src/{components-v2 → components}/BazaarImage.tsx +0 -0
  353. package/src/{components-v2 → components}/BazaarMenu.stories.tsx +0 -0
  354. package/src/{components-v2 → components}/BazaarMenu.tsx +0 -0
  355. package/src/{components-v2 → components}/BazaarSwitch.stories.tsx +0 -0
  356. package/src/{components-v2 → components}/BazaarSwitch.tsx +0 -0
  357. package/src/{components-v2 → components}/BazaarTextField.stories.tsx +0 -0
  358. package/src/{components-v2 → components}/BorderShadowCard.stories.tsx +0 -0
  359. package/src/{components-v2 → components}/BoxShadowCard.tsx +0 -0
  360. package/src/{components-v2 → components}/DropZone.stories.tsx +0 -0
  361. package/src/{components-v2 → components}/HoverBox.stories.tsx +0 -0
  362. package/src/{components-v2 → components}/HoverBox.tsx +0 -0
  363. package/src/{components-v2 → components}/Image.tsx +0 -0
  364. package/src/{components-v2 → components}/LazyImage.tsx +0 -0
  365. package/src/{components-v2 → components}/Loading.stories.tsx +0 -0
  366. package/src/{components-v2 → components}/Loading.tsx +0 -0
  367. package/src/{components-v2 → components}/NoRecords.stories.tsx +0 -0
  368. package/src/{components-v2 → components}/README.md +0 -0
  369. package/src/{components-v2 → components}/SearchInput.stories.tsx +0 -0
  370. package/src/{components-v2 → components}/SearchInput.tsx +0 -0
  371. package/src/{components-v2 → components}/SiteLogo.stories.tsx +0 -0
  372. package/src/{components-v2 → components}/SnackbarProvider.tsx +0 -0
  373. package/src/{components-v2 → components}/Typography.stories.tsx +0 -0
  374. package/src/{components-v2 → components}/WhiteButton.stories.tsx +0 -0
  375. package/src/{components-v2 → components}/WhiteButton.tsx +0 -0
  376. package/src/{components-v2 → components}/accordion/AccordionHeader.stories.tsx +0 -0
  377. package/src/{components-v2 → components}/accordion/__tests__/accordion-header.test.tsx +0 -0
  378. package/src/{components-v2 → components}/carousel/Carousel.stories.tsx +0 -0
  379. package/src/{components-v2 → components}/carousel/__tests__/carousel.test.tsx +0 -0
  380. package/src/{components-v2 → components}/carousel/styles/index.ts +0 -0
  381. package/src/{components-v2 → components}/carousel-cards/carousel-card-1/CarouselCard1.stories.tsx +0 -0
  382. package/src/{components-v2 → components}/carousel-cards/carousel-card-1/__tests__/carousel-card-1.test.tsx +0 -0
  383. package/src/{components-v2 → components}/carousel-cards/carousel-card-1/styles.ts +0 -0
  384. package/src/{components-v2 → components}/categories/category-list/types.ts +0 -0
  385. package/src/{components-v2 → components}/categories/category-list-item/styles.ts +0 -0
  386. package/src/{components-v2 → components}/categories/mega-menu/styles.ts +0 -0
  387. package/src/{components-v2 → components}/categories/types.ts +0 -0
  388. package/src/{components-v2 → components}/flex-box/Flex.stories.tsx +0 -0
  389. package/src/{components-v2 → components}/flex-box/flex-between.tsx +0 -0
  390. package/src/{components-v2 → components}/flex-box/flex-box.tsx +0 -0
  391. package/src/{components-v2 → components}/flex-box/flex-row-center.tsx +0 -0
  392. package/src/{components-v2 → components}/header/Header.stories.tsx +0 -0
  393. package/src/{components-v2 → components}/header/hooks/use-header.ts +0 -0
  394. package/src/{components-v2 → components}/header/styles/index.ts +0 -0
  395. package/src/{components-v2 → components}/icons/__tests__/icons.test.tsx +1 -1
  396. package/src/{components-v2 → components}/mini-cart/__tests__/cart-item.test.tsx +0 -0
  397. package/src/{components-v2 → components}/mini-cart/__tests__/mini-cart.test.tsx +0 -0
  398. package/src/{components-v2 → components}/mini-cart/__tests__/test-cart-empty.json +0 -0
  399. package/src/{components-v2 → components}/mini-cart/__tests__/test-cart-with-item.json +0 -0
  400. package/src/{components-v2 → components}/mini-cart/components/bottom-actions.tsx +0 -0
  401. package/src/{components-v2 → components}/mobile-navigation/__tests__/mobile-navigation-bar.test.tsx +2 -2
  402. package/src/{components-v2 → components}/nav-link/NavLink.stories.tsx +0 -0
  403. package/src/{components-v2 → components}/nav-link/NavLink2.stories.tsx +0 -0
  404. package/src/{components-v2 → components}/nav-link/NavLink3.stories.tsx +0 -0
  405. package/src/{components-v2 → components}/navbar/category-based-menu/types.ts +0 -0
  406. package/src/{components-v2 → components}/navbar/utils/transform-nav.ts +0 -0
  407. package/src/{components-v2 → components}/product-cards/__tests__/product-cards.test.tsx +0 -0
  408. package/src/{components-v2 → components}/product-cards/discount-chip.tsx +0 -0
  409. package/src/{components-v2 → components}/product-cards/product-card/ProductCard.stories.tsx +0 -0
  410. package/src/{components-v2 → components}/product-cards/product-card-plp/ProductCardPlp.stories.tsx +0 -0
  411. package/src/{components-v2 → components}/product-cards/product-card-plp/styles/index.ts +0 -0
  412. package/src/{components-v2 → components}/product-cards/product-card-plp-list/components/tags.tsx +0 -0
  413. package/src/{components-v2 → components}/product-cards/product-card-search/styles/index.ts +0 -0
  414. package/src/{components-v2 → components}/product-dialog/ProductDialog.stories.tsx +0 -0
  415. package/src/{components-v2 → components}/product-dimensions/__mocks__/data.ts +0 -0
  416. package/src/{components-v2 → components}/product-dimensions/utils/has-selected-dimension.ts +0 -0
  417. package/src/{components-v2 → components}/products-view/compound/context.ts +0 -0
  418. package/src/{components-v2 → components}/progress/ProgressBar.stories.tsx +0 -0
  419. package/src/{components-v2 → components}/progress/__tests__/progress.test.tsx +0 -0
  420. package/src/{components-v2 → components}/scrollbar/styles.ts +0 -0
  421. package/src/{components-v2 → components}/search-bar/compound/context.ts +0 -0
  422. package/src/{components-v2 → components}/search-bar/compound/textfield-adornment-button.tsx +0 -0
  423. package/src/{components-v2 → components}/search-bar/hooks/use-click-outside.ts +0 -0
  424. package/src/{components-v2 → components}/search-bar/hooks/use-search.ts +0 -0
  425. package/src/{components-v2 → components}/search-bar/styles/index.ts +0 -0
  426. package/src/{components-v2 → components}/section/Section.stories.tsx +0 -0
  427. package/src/{components-v2 → components}/wishlist-dialogs/__tests__/wishlistDetailData.json +0 -0
  428. package/src/{components-v2 → components}/wishlist-dialogs/__tests__/wishlistsData.json +0 -0
  429. package/src/{components-v2 → components}/wishlist-dialogs/add-to-wishlist/AddToWishlist.stories.tsx +0 -0
  430. package/src/{components-v2 → components}/wishlist-dialogs/add-to-wishlist/compound/context.ts +0 -0
  431. package/src/{components-v2 → components}/wishlist-dialogs/add-to-wishlist/hooks/use-add-to-wishlist.ts +0 -0
  432. package/src/{components-v2 → components}/wishlist-dialogs/create-wishlist/CreateWishlistButton.stories.tsx +0 -0
  433. package/src/{pages-v2 → pages}/README.md +0 -0
  434. package/src/{pages-v2 → pages}/account/table-row.tsx +0 -0
  435. package/src/{pages-v2 → pages}/blog/pagination.tsx +0 -0
  436. package/src/{pages-v2 → pages}/cart/__tests__/cart-with-items.json +0 -0
  437. package/src/{pages-v2 → pages}/cart/__tests__/conutries.json +0 -0
  438. package/src/{pages-v2 → pages}/cart/__tests__/countries.json +0 -0
  439. package/src/{pages-v2 → pages}/cart/wrapper.tsx +0 -0
  440. package/src/{pages-v2 → pages}/checkout/checkout-alt-form/node.tsx +0 -0
  441. package/src/{pages-v2 → pages}/checkout/checkout-alt-form/steps/address/styles.ts +0 -0
  442. package/src/{pages-v2 → pages}/checkout/checkout-alt-form/steps/payment/safe-card-preview-data.tsx +0 -0
  443. package/src/{pages-v2 → pages}/checkout/checkout-alt-form/types.ts +0 -0
  444. package/src/{pages-v2 → pages}/product-details/bopis/search-header.tsx +0 -0
  445. package/src/{pages-v2 → pages}/product-details/bopis/store-card/styles.ts +0 -0
  446. package/src/{pages-v2 → pages}/product-details/bopis/store-card/utils/convertSecondsToTime.ts +0 -0
  447. package/src/{pages-v2 → pages}/product-details/bopis/store-card/utils/getDaysResources.ts +0 -0
  448. package/src/{pages-v2 → pages}/product-details/checkbox-label.tsx +0 -0
  449. package/src/{pages-v2 → pages}/product-details/product-intro/compound/context.ts +0 -0
  450. package/src/{pages-v2 → pages}/product-details/product-intro/utils.ts +0 -0
  451. package/src/{pages-v2 → pages}/product-details/types.ts +0 -0
  452. package/src/{pages-v2 → pages}/product-list/checkbox-label.tsx +0 -0
  453. package/src/{pages-v2 → pages}/product-list/facet.tsx +0 -0
  454. package/src/{pages-v2 → pages}/product-list/product-list-state.ts +0 -0
  455. package/src/{pages-v2 → pages}/product-list/product-rating.tsx +0 -0
  456. package/src/{pages-v2 → pages}/product-list/quick-view-dialog.tsx +4 -4
  457. package/src/{pages-v2 → pages}/product-list/range-filter.tsx +0 -0
  458. package/src/{pages-v2 → pages}/product-list/scrollbar.tsx +0 -0
  459. package/src/{pages-v2 → pages}/product-list/search-bar.tsx +0 -0
  460. package/src/{pages-v2 → pages}/product-list/side-nav.tsx +0 -0
  461. package/src/{pages-v2 → pages}/product-list/swatch.tsx +0 -0
  462. package/src/{pages-v2 → pages}/product-list/types.ts +0 -0
  463. package/src/{pages-v2 → pages}/product-list/use-product-list.ts +0 -0
  464. package/src/{pages-v2 → pages}/product-list/useCategoryFilter.tsx +0 -0
  465. package/src/{pages-v2 → pages}/product-list/utils/facet-helpers.ts +0 -0
  466. package/src/{pages-v2 → pages}/product-list/utils/generate-breadcrumbs.ts +0 -0
  467. package/src/{pages-v2 → pages}/product-list/utils/getCategoryFilterFromSlug.ts +0 -0
  468. package/src/{pages-v2 → pages}/product-list/utils/product-list-helper.ts +4 -4
  469. /package/src/{pages-v2 → pages}/product-list/utils/product-list-types.ts +0 -0
  470. /package/src/{pages-v2 → pages}/product-list/utils/sort-options.ts +0 -0
  471. /package/src/{pages-v2 → pages}/product-list/utils/use-previous-refiners.ts +0 -0
@@ -0,0 +1,12 @@
1
+ import { render, screen } from "@testing-library/react";
2
+ import Image from "../Image";
3
+
4
+ describe("Image", () => {
5
+ it("renders img element", () => {
6
+ render(<Image src="/sample.jpg" alt="Sample" data-testid="styled-image" />);
7
+ const image = screen.getByTestId("styled-image");
8
+ expect(image).toBeInTheDocument();
9
+ expect(image).toHaveAttribute("src", "/sample.jpg");
10
+ expect(image).toHaveAttribute("alt", "Sample");
11
+ });
12
+ });
@@ -0,0 +1,76 @@
1
+ import { fireEvent, render, screen } from "@testing-library/react";
2
+ import { vi } from "vitest";
3
+ import ImageWithFallback from "../ImageWithFallback";
4
+
5
+ vi.mock("@evenicanpm/storefront-core/src/components/LazyImage", () => ({
6
+ default: ({
7
+ src,
8
+ alt,
9
+ onError,
10
+ }: {
11
+ src: string;
12
+ alt: string;
13
+ onError?: () => void;
14
+ }) => (
15
+ <button
16
+ type="button"
17
+ data-testid="lazy-image"
18
+ data-src={src}
19
+ data-alt={alt}
20
+ onClick={onError}
21
+ >
22
+ LazyImageMock
23
+ </button>
24
+ ),
25
+ }));
26
+
27
+ describe("ImageWithFallback", () => {
28
+ it("renders provided src when valid", () => {
29
+ render(
30
+ <ImageWithFallback
31
+ src="/valid.png"
32
+ alt="Valid"
33
+ width={100}
34
+ height={100}
35
+ />,
36
+ );
37
+ expect(screen.getByTestId("lazy-image")).toHaveAttribute(
38
+ "data-src",
39
+ "/valid.png",
40
+ );
41
+ });
42
+
43
+ it("uses fallback src when src is empty", () => {
44
+ render(
45
+ <ImageWithFallback
46
+ src={""}
47
+ fallbackSrc="/fallback.png"
48
+ alt="Fallback"
49
+ width={100}
50
+ height={100}
51
+ />,
52
+ );
53
+ expect(screen.getByTestId("lazy-image")).toHaveAttribute(
54
+ "data-src",
55
+ "/fallback.png",
56
+ );
57
+ });
58
+
59
+ it("switches to fallback on error", () => {
60
+ render(
61
+ <ImageWithFallback
62
+ src="/broken.png"
63
+ fallbackSrc="/fallback.png"
64
+ alt="Error Fallback"
65
+ width={100}
66
+ height={100}
67
+ />,
68
+ );
69
+
70
+ fireEvent.click(screen.getByTestId("lazy-image"));
71
+ expect(screen.getByTestId("lazy-image")).toHaveAttribute(
72
+ "data-src",
73
+ "/fallback.png",
74
+ );
75
+ });
76
+ });
@@ -0,0 +1,32 @@
1
+ import { render, screen } from "@testing-library/react";
2
+ import { vi } from "vitest";
3
+ import LazyImage, { ZoomLazyImage } from "../LazyImage";
4
+
5
+ vi.mock("next/image", () => ({
6
+ default: ({ src, alt }: { src: string; alt: string }) => (
7
+ <div data-testid="next-image" data-src={src} data-alt={alt}>
8
+ {alt}
9
+ </div>
10
+ ),
11
+ }));
12
+
13
+ describe("LazyImage", () => {
14
+ it("renders default lazy image", () => {
15
+ render(<LazyImage src="/lazy.png" alt="Lazy" width={100} height={100} />);
16
+ expect(screen.getByTestId("next-image")).toBeInTheDocument();
17
+ expect(screen.getByTestId("next-image")).toHaveAttribute(
18
+ "data-src",
19
+ "/lazy.png",
20
+ );
21
+ });
22
+
23
+ it("renders zoom lazy image", () => {
24
+ render(
25
+ <ZoomLazyImage src="/zoom.png" alt="Zoom" width={100} height={100} />,
26
+ );
27
+ expect(screen.getByTestId("next-image")).toHaveAttribute(
28
+ "data-src",
29
+ "/zoom.png",
30
+ );
31
+ });
32
+ });
@@ -0,0 +1,15 @@
1
+ import { render, screen } from "@testing-library/react";
2
+ import Loading from "../Loading";
3
+
4
+ describe("Loading", () => {
5
+ it("renders loader", () => {
6
+ const { container } = render(<Loading />);
7
+ expect(container.firstChild).toBeTruthy();
8
+ expect(screen.getByRole("progressbar")).toBeInTheDocument();
9
+ });
10
+
11
+ it("sets fullscreen data attribute when enabled", () => {
12
+ const { container } = render(<Loading fullscreen />);
13
+ expect(container.firstChild).toHaveAttribute("data-full", "true");
14
+ });
15
+ });
@@ -0,0 +1,14 @@
1
+ import { render, screen } from "@testing-library/react";
2
+ import SearchInput from "../SearchInput";
3
+
4
+ describe("SearchInput", () => {
5
+ it("renders input with placeholder", () => {
6
+ render(<SearchInput placeholder="Search products" />);
7
+ expect(screen.getByPlaceholderText("Search products")).toBeInTheDocument();
8
+ });
9
+
10
+ it("accepts input value", () => {
11
+ render(<SearchInput value="nike" readOnly />);
12
+ expect(screen.getByDisplayValue("nike")).toBeInTheDocument();
13
+ });
14
+ });
@@ -0,0 +1,22 @@
1
+ import { render, screen } from "@testing-library/react";
2
+ import { vi } from "vitest";
3
+ import SnackbarProvider from "../SnackbarProvider";
4
+
5
+ vi.mock("notistack", () => ({
6
+ SnackbarProvider: ({ children }: { children: React.ReactNode }) => (
7
+ <div data-testid="notistack-provider">{children}</div>
8
+ ),
9
+ }));
10
+
11
+ describe("SnackbarProvider", () => {
12
+ it("renders children inside provider", () => {
13
+ render(
14
+ <SnackbarProvider>
15
+ <div>Snackbar Child</div>
16
+ </SnackbarProvider>,
17
+ );
18
+
19
+ expect(screen.getByTestId("notistack-provider")).toBeInTheDocument();
20
+ expect(screen.getByText("Snackbar Child")).toBeInTheDocument();
21
+ });
22
+ });
@@ -0,0 +1,53 @@
1
+ import { render, screen } from "@testing-library/react";
2
+ import {
3
+ Display,
4
+ H1,
5
+ H4,
6
+ Paragraph,
7
+ Small,
8
+ Span,
9
+ Subtitle,
10
+ Tiny,
11
+ } from "../Typography";
12
+
13
+ describe("Typography", () => {
14
+ it("renders heading components", () => {
15
+ render(
16
+ <>
17
+ <H1>Heading One</H1>
18
+ <H4>Heading Four</H4>
19
+ </>,
20
+ );
21
+
22
+ expect(screen.getByText("Heading One").tagName).toBe("H1");
23
+ expect(screen.getByText("Heading Four").tagName).toBe("H4");
24
+ });
25
+
26
+ it("renders text components", () => {
27
+ render(
28
+ <>
29
+ <Paragraph>Body Copy</Paragraph>
30
+ <Small>Small Copy</Small>
31
+ <Span>Inline Copy</Span>
32
+ <Tiny>Tiny Copy</Tiny>
33
+ </>,
34
+ );
35
+
36
+ expect(screen.getByText("Body Copy").tagName).toBe("P");
37
+ expect(screen.getByText("Small Copy").tagName).toBe("SMALL");
38
+ expect(screen.getByText("Inline Copy").tagName).toBe("SPAN");
39
+ expect(screen.getByText("Tiny Copy").tagName).toBe("SMALL");
40
+ });
41
+
42
+ it("renders display components", () => {
43
+ render(
44
+ <>
45
+ <Display>Display Text</Display>
46
+ <Subtitle>Subtitle Text</Subtitle>
47
+ </>,
48
+ );
49
+
50
+ expect(screen.getByText("Display Text").tagName).toBe("H1");
51
+ expect(screen.getByText("Subtitle Text").tagName).toBe("H1");
52
+ });
53
+ });
@@ -0,0 +1,20 @@
1
+ import { fireEvent, render, screen } from "@testing-library/react";
2
+ import { vi } from "vitest";
3
+ import WhiteButton from "../WhiteButton";
4
+
5
+ describe("WhiteButton", () => {
6
+ it("renders children", () => {
7
+ render(<WhiteButton>White CTA</WhiteButton>);
8
+ expect(
9
+ screen.getByRole("button", { name: "White CTA" }),
10
+ ).toBeInTheDocument();
11
+ });
12
+
13
+ it("calls onClick handler", () => {
14
+ const handleClick = vi.fn();
15
+ render(<WhiteButton onClick={handleClick}>Click Me</WhiteButton>);
16
+
17
+ fireEvent.click(screen.getByRole("button", { name: "Click Me" }));
18
+ expect(handleClick).toHaveBeenCalledTimes(1);
19
+ });
20
+ });
@@ -0,0 +1,39 @@
1
+ import type { CountryRegionInfo } from "@msdyn365-commerce/retail-proxy";
2
+ import { fireEvent, render, screen } from "@testing-library/react";
3
+ import { vi } from "vitest";
4
+ import CountryInput from "../countries-input";
5
+
6
+ describe("CountryInput", () => {
7
+ const countries: CountryRegionInfo[] = [
8
+ { CountryRegionId: "US", ShortName: "United States" } as CountryRegionInfo,
9
+ { CountryRegionId: "CA", ShortName: "Canada" } as CountryRegionInfo,
10
+ ];
11
+
12
+ it("renders input label", () => {
13
+ render(
14
+ <CountryInput
15
+ countries={countries}
16
+ label="Country"
17
+ selectedCountry={null}
18
+ setSelectedCountry={vi.fn()}
19
+ />,
20
+ );
21
+
22
+ expect(screen.getByLabelText("Country")).toBeInTheDocument();
23
+ });
24
+
25
+ it("accepts typed input", () => {
26
+ render(
27
+ <CountryInput
28
+ countries={countries}
29
+ label="Country"
30
+ selectedCountry={null}
31
+ setSelectedCountry={vi.fn()}
32
+ />,
33
+ );
34
+
35
+ const input = screen.getByRole("combobox");
36
+ fireEvent.change(input, { target: { value: "Can" } });
37
+ expect(input).toBeInTheDocument();
38
+ });
39
+ });
@@ -0,0 +1,14 @@
1
+ import { render, screen } from "@testing-library/react";
2
+ import { vi } from "vitest";
3
+ import NoRecords from "../no-records";
4
+
5
+ vi.mock("next-intl", () => ({
6
+ useTranslations: () => (key: string) => key,
7
+ }));
8
+
9
+ describe("NoRecords", () => {
10
+ it("renders translated message", () => {
11
+ render(<NoRecords message="empty.message" />);
12
+ expect(screen.getByText("empty.message")).toBeInTheDocument();
13
+ });
14
+ });
@@ -0,0 +1,28 @@
1
+ import { render, screen } from "@testing-library/react";
2
+ import { vi } from "vitest";
3
+ import SiteLogo from "../site-logo";
4
+
5
+ vi.mock("next/link", () => ({
6
+ default: ({
7
+ href,
8
+ children,
9
+ }: {
10
+ href: string;
11
+ children: React.ReactNode;
12
+ }) => <a href={href}>{children}</a>,
13
+ }));
14
+
15
+ describe("SiteLogo", () => {
16
+ it("renders logo image", () => {
17
+ render(<SiteLogo />);
18
+ const logo = screen.getByAltText("E4 Logo");
19
+ expect(logo).toBeInTheDocument();
20
+ // next/image rewrites src to an optimized URL (e.g. /_next/image?url=...)
21
+ expect(logo.getAttribute("src")).toMatch(/logo-blue\.png/);
22
+ });
23
+
24
+ it("wraps logo in home link", () => {
25
+ render(<SiteLogo />);
26
+ expect(screen.getByRole("link")).toHaveAttribute("href", "/");
27
+ });
28
+ });
@@ -1,5 +1,5 @@
1
1
  // GLOBAL CUSTOM COMPONENT
2
- import FlexBox from "@evenicanpm/storefront-core/src/components-v2/flex-box/flex-box";
2
+ import FlexBox from "@evenicanpm/storefront-core/src/components/flex-box/flex-box";
3
3
  // MUI ICON COMPONENTS
4
4
  import ChevronRight from "@mui/icons-material/ChevronRight";
5
5
  import type { BoxProps } from "@mui/material/Box";
@@ -1 +1 @@
1
- export { default as AccordionHeader } from "@evenicanpm/storefront-core/src/components-v2/accordion/accordion-header";
1
+ export { default as AccordionHeader } from "@evenicanpm/storefront-core/src/components/accordion/accordion-header";
@@ -6,9 +6,9 @@ import { forwardRef, type PropsWithChildren } from "react";
6
6
  import Slider, { type CustomArrowProps, type Settings } from "react-slick";
7
7
  import "slick-carousel/slick/slick.css";
8
8
  import "slick-carousel/slick/slick-theme.css";
9
- import { createArrows } from "@evenicanpm/storefront-core/src/components-v2/carousel/components/carousel-arrows";
10
- import { createDots } from "@evenicanpm/storefront-core/src/components-v2/carousel/components/carousel-dots";
11
- import { RootStyle } from "@evenicanpm/storefront-core/src/components-v2/carousel/styles/index";
9
+ import { createArrows } from "@evenicanpm/storefront-core/src/components/carousel/components/carousel-arrows";
10
+ import { createDots } from "@evenicanpm/storefront-core/src/components/carousel/components/carousel-dots";
11
+ import { RootStyle } from "@evenicanpm/storefront-core/src/components/carousel/styles/index";
12
12
 
13
13
  type ArrowConfig = {
14
14
  sx?: SxProps<Theme>;
@@ -1,5 +1,5 @@
1
1
  // STYLED COMPONENT
2
- import { ArrowButton } from "@evenicanpm/storefront-core/src/components-v2/carousel/styles/index";
2
+ import { ArrowButton } from "@evenicanpm/storefront-core/src/components/carousel/styles/index";
3
3
  // MUI ICON COMPONENTS
4
4
  import ArrowBack from "@mui/icons-material/ArrowBack";
5
5
  import ArrowForward from "@mui/icons-material/ArrowForward";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  Dot,
4
4
  DotList,
5
- } from "@evenicanpm/storefront-core/src/components-v2/carousel/styles/index";
5
+ } from "@evenicanpm/storefront-core/src/components/carousel/styles/index";
6
6
  import type { SxProps, Theme } from "@mui/material/styles";
7
7
  import type { Settings } from "react-slick";
8
8
 
@@ -1 +1 @@
1
- export { default as Carousel } from "@evenicanpm/storefront-core/src/components-v2/carousel/carousel";
1
+ export { default as Carousel } from "@evenicanpm/storefront-core/src/components/carousel/carousel";
@@ -1,8 +1,8 @@
1
1
  // GLOBAL CUSTOM COMPONENTS
2
- import BazaarImage from "@evenicanpm/storefront-core/src/components-v2/BazaarImage";
2
+ import BazaarImage from "@evenicanpm/storefront-core/src/components/BazaarImage";
3
3
  // STYLED COMPONENT
4
- import { StyledRoot } from "@evenicanpm/storefront-core/src/components-v2/carousel-cards/carousel-card-1/styles";
5
- import { Paragraph } from "@evenicanpm/storefront-core/src/components-v2/Typography";
4
+ import { StyledRoot } from "@evenicanpm/storefront-core/src/components/carousel-cards/carousel-card-1/styles";
5
+ import { Paragraph } from "@evenicanpm/storefront-core/src/components/Typography";
6
6
  import Button from "@mui/material/Button";
7
7
  import Grid from "@mui/material/Grid2";
8
8
  import type { ReactNode } from "react";
@@ -0,0 +1 @@
1
+ export { default } from "@evenicanpm/storefront-core/src/components/carousel-cards/carousel-card-1/carousel-card-1";
@@ -2,7 +2,7 @@
2
2
 
3
3
  // CUSTOM ICON COMPONENTS
4
4
  // GLOBAL CUSTOM COMPONENTS
5
- import { FlexBox } from "@evenicanpm/storefront-core/src/components-v2/flex-box";
5
+ import { FlexBox } from "@evenicanpm/storefront-core/src/components/flex-box";
6
6
  // MUI ICON COMPONENT
7
7
  import KeyboardArrowDown from "@mui/icons-material/KeyboardArrowDown";
8
8
 
@@ -3,7 +3,7 @@ import { vi } from "vitest";
3
3
  import CategoryMenu from "../category-menu";
4
4
 
5
5
  vi.mock(
6
- "@evenicanpm/storefront-core/src/components-v2/categories/category-list/index",
6
+ "@evenicanpm/storefront-core/src/components/categories/category-list/index",
7
7
  () => ({
8
8
  default: ({ open }: { open: boolean }) => (
9
9
  <div data-testid="category-list" data-open={String(open)}>
@@ -4,12 +4,12 @@ import getCategories from "@evenicanpm/storefront-core/src/api-manager/services/
4
4
  import {
5
5
  StyledRoot,
6
6
  SubMenuStyledRoot,
7
- } from "@evenicanpm/storefront-core/src/components-v2/categories/category-list/styles";
8
- import CategoryListItem from "@evenicanpm/storefront-core/src/components-v2/categories/category-list-item/index";
9
- import MegaMenu1 from "@evenicanpm/storefront-core/src/components-v2/categories/mega-menu/mega-menu-1";
10
- import MegaMenu2 from "@evenicanpm/storefront-core/src/components-v2/categories/mega-menu/mega-menu-2";
7
+ } from "@evenicanpm/storefront-core/src/components/categories/category-list/styles";
8
+ import CategoryListItem from "@evenicanpm/storefront-core/src/components/categories/category-list-item/index";
9
+ import MegaMenu1 from "@evenicanpm/storefront-core/src/components/categories/mega-menu/mega-menu-1";
10
+ import MegaMenu2 from "@evenicanpm/storefront-core/src/components/categories/mega-menu/mega-menu-2";
11
11
  import type { CategoryHierarchy } from "@evenicanpm/storefront-core/src/lib/category-helpers";
12
- import React, { createContext, type ReactNode, useContext } from "react";
12
+ import { createContext, type ReactNode, useContext } from "react";
13
13
 
14
14
  type MegaMenuType = "default" | "mega-menu-1" | "mega-menu-2";
15
15
 
@@ -1 +1 @@
1
- export { default } from "@evenicanpm/storefront-core/src/components-v2/navbar/mega-menu/mega-menu";
1
+ export { default } from "@evenicanpm/storefront-core/src/components/categories/category-list/category-list";
@@ -1,4 +1,4 @@
1
- import type { Props } from "@evenicanpm/storefront-core/src/components-v2/categories/category-list/types";
1
+ import type { Props } from "@evenicanpm/storefront-core/src/components/categories/category-list/types";
2
2
  import Card from "@mui/material/Card";
3
3
  import styled from "@mui/material/styles/styled";
4
4
 
@@ -1,5 +1,5 @@
1
1
  // STYLED COMPONENT
2
- import { Wrapper } from "@evenicanpm/storefront-core/src/components-v2/categories/category-list-item/styles";
2
+ import { Wrapper } from "@evenicanpm/storefront-core/src/components/categories/category-list-item/styles";
3
3
  // MUI ICON COMPONENTS
4
4
  import type { SvgIconComponent } from "@mui/icons-material";
5
5
  import ChevronRight from "@mui/icons-material/ChevronRight";
@@ -0,0 +1 @@
1
+ export { default } from "@evenicanpm/storefront-core/src/components/categories/category-list-item/category-menu-item";
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import CategoryList from "@evenicanpm/storefront-core/src/components-v2/categories/category-list/index";
3
+ import CategoryList from "@evenicanpm/storefront-core/src/components/categories/category-list/index";
4
4
  import styled from "@mui/material/styles/styled";
5
5
  import { useCallback, useEffect, useRef, useState } from "react";
6
6
 
@@ -1,12 +1,12 @@
1
1
  "use client";
2
2
 
3
- import FlexBox from "@evenicanpm/storefront-core/src/components-v2/flex-box/flex-box";
4
- import LazyImage from "@evenicanpm/storefront-core/src/components-v2/LazyImage";
3
+ import FlexBox from "@evenicanpm/storefront-core/src/components/flex-box/flex-box";
4
+ import LazyImage from "@evenicanpm/storefront-core/src/components/LazyImage";
5
5
  import {
6
6
  H3,
7
7
  Paragraph,
8
8
  Small,
9
- } from "@evenicanpm/storefront-core/src/components-v2/Typography";
9
+ } from "@evenicanpm/storefront-core/src/components/Typography";
10
10
  import Box from "@mui/material/Box";
11
11
  import Grid from "@mui/material/Grid2";
12
12
  import Link from "next/link";
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
 
3
- import { StyledRoot } from "@evenicanpm/storefront-core/src/components-v2/categories/mega-menu/styles";
4
- import { FlexBox } from "@evenicanpm/storefront-core/src/components-v2/flex-box/index";
5
- import LazyImage from "@evenicanpm/storefront-core/src/components-v2/LazyImage";
6
- import { NavLink } from "@evenicanpm/storefront-core/src/components-v2/nav-link/index";
3
+ import { StyledRoot } from "@evenicanpm/storefront-core/src/components/categories/mega-menu/styles";
4
+ import { FlexBox } from "@evenicanpm/storefront-core/src/components/flex-box/index";
5
+ import LazyImage from "@evenicanpm/storefront-core/src/components/LazyImage";
6
+ import { NavLink } from "@evenicanpm/storefront-core/src/components/nav-link/index";
7
7
  import Box from "@mui/material/Box";
8
8
  import Grid from "@mui/material/Grid2";
9
9
  import Link from "next/link";
@@ -1,9 +1,9 @@
1
1
  // LOCAL CUSTOM COMPONENTS
2
- import ColumnList from "@evenicanpm/storefront-core/src/components-v2/categories/mega-menu/column-list";
2
+ import ColumnList from "@evenicanpm/storefront-core/src/components/categories/mega-menu/column-list";
3
3
  // DATA TYPE
4
- import type { CategoryItemOffer } from "@evenicanpm/storefront-core/src/components-v2/categories/types";
4
+ import type { CategoryItemOffer } from "@evenicanpm/storefront-core/src/components/categories/types";
5
5
  // GLOBAL CUSTOM COMPONENTS
6
- import LazyImage from "@evenicanpm/storefront-core/src/components-v2/LazyImage";
6
+ import LazyImage from "@evenicanpm/storefront-core/src/components/LazyImage";
7
7
  import type { CategoryHierarchy } from "@evenicanpm/storefront-core/src/lib/category-helpers";
8
8
  // MUI
9
9
  import Box from "@mui/material/Box";
@@ -1,10 +1,10 @@
1
1
  // LOCAL CUSTOM COMPONENTS
2
2
 
3
- import CategoryMenuItem from "@evenicanpm/storefront-core/src/components-v2/categories/category-list-item/index";
4
- import OfferBanner from "@evenicanpm/storefront-core/src/components-v2/categories/mega-menu/banner";
5
- import ColumnList from "@evenicanpm/storefront-core/src/components-v2/categories/mega-menu/column-list";
3
+ import CategoryMenuItem from "@evenicanpm/storefront-core/src/components/categories/category-list-item/index";
4
+ import OfferBanner from "@evenicanpm/storefront-core/src/components/categories/mega-menu/banner";
5
+ import ColumnList from "@evenicanpm/storefront-core/src/components/categories/mega-menu/column-list";
6
6
  // STYLED COMPONENT
7
- import { StyledRoot } from "@evenicanpm/storefront-core/src/components-v2/categories/mega-menu/styles";
7
+ import { StyledRoot } from "@evenicanpm/storefront-core/src/components/categories/mega-menu/styles";
8
8
  // DATA TYPE
9
9
  import type { CategoryHierarchy } from "@evenicanpm/storefront-core/src/lib/category-helpers";
10
10
 
@@ -28,7 +28,7 @@ export default function CountryInput({
28
28
 
29
29
  const renderOption = (
30
30
  props: React.HTMLAttributes<HTMLLIElement> & {
31
- key: any;
31
+ key: string | number;
32
32
  },
33
33
  option: CountryRegionInfo,
34
34
  ) => {
@@ -1,6 +1,6 @@
1
1
  import { render, screen } from "@testing-library/react";
2
- import FlexBox from "../flex-box";
3
2
  import FlexBetween from "../flex-between";
3
+ import FlexBox from "../flex-box";
4
4
  import FlexRowCenter from "../flex-row-center";
5
5
 
6
6
  describe("FlexBox components", () => {
@@ -27,7 +27,7 @@ describe("FlexBox components", () => {
27
27
 
28
28
  const box = screen.getByTestId("flex-box");
29
29
  expect(box).toBeInTheDocument();
30
- expect(box).toHaveStyle("display: flex");
30
+ expect(box.className).toContain("MuiBox-root");
31
31
  });
32
32
  });
33
33
 
@@ -44,9 +44,8 @@ describe("FlexBox components", () => {
44
44
  expect(screen.getByText("Right")).toBeInTheDocument();
45
45
 
46
46
  const box = screen.getByTestId("flex-between");
47
- expect(box).toHaveStyle("display: flex");
48
- expect(box).toHaveStyle("justify-content: space-between");
49
- expect(box).toHaveStyle("align-items: center");
47
+ expect(box).toBeInTheDocument();
48
+ expect(box.className).toContain("MuiBox-root");
50
49
  });
51
50
 
52
51
  it("accepts custom props", () => {
@@ -70,9 +69,8 @@ describe("FlexBox components", () => {
70
69
 
71
70
  const box = screen.getByTestId("flex-row-center");
72
71
  expect(screen.getByText("Centered")).toBeInTheDocument();
73
- expect(box).toHaveStyle("display: flex");
74
- expect(box).toHaveStyle("justify-content: center");
75
- expect(box).toHaveStyle("align-items: center");
72
+ expect(box).toBeInTheDocument();
73
+ expect(box.className).toContain("MuiBox-root");
76
74
  });
77
75
 
78
76
  it("applies custom styles", () => {
@@ -0,0 +1,5 @@
1
+ import FlexBetween from "@evenicanpm/storefront-core/src/components/flex-box/flex-between";
2
+ import FlexBox from "@evenicanpm/storefront-core/src/components/flex-box/flex-box";
3
+ import FlexRowCenter from "@evenicanpm/storefront-core/src/components/flex-box/flex-row-center";
4
+
5
+ export { FlexBetween, FlexBox, FlexRowCenter };
@@ -7,6 +7,10 @@ vi.mock("@evenicanpm/storefront-core/src/hooks/use-nextauth-session", () => ({
7
7
  useAppSession: vi.fn(() => ({ session: null })),
8
8
  }));
9
9
 
10
+ vi.mock("next-auth/react", () => ({
11
+ useSession: () => ({ data: null, status: "unauthenticated" }),
12
+ }));
13
+
10
14
  vi.mock(
11
15
  "@evenicanpm/storefront-core/src/api-manager/services/cart/queries/get-cart",
12
16
  () => ({
@@ -17,7 +21,7 @@ vi.mock(
17
21
  );
18
22
 
19
23
  vi.mock(
20
- "@evenicanpm/storefront-core/src/components-v2/mini-cart/mini-cart-trigger",
24
+ "@evenicanpm/storefront-core/src/components/mini-cart/mini-cart-trigger",
21
25
  () => ({
22
26
  default: ({ children }: { children: React.ReactNode }) => (
23
27
  <div data-testid="mini-cart-trigger">{children}</div>
@@ -25,19 +29,19 @@ vi.mock(
25
29
  }),
26
30
  );
27
31
 
28
- vi.mock("@evenicanpm/storefront-core/src/components-v2/site-logo", () => ({
32
+ vi.mock("@evenicanpm/storefront-core/src/components/site-logo", () => ({
29
33
  default: () => <div data-testid="site-logo">Logo</div>,
30
34
  }));
31
35
 
32
36
  vi.mock(
33
- "@evenicanpm/storefront-core/src/components-v2/header/components/categories-menu",
37
+ "@evenicanpm/storefront-core/src/components/header/components/categories-menu",
34
38
  () => ({
35
39
  default: () => <div data-testid="categories-menu">Categories</div>,
36
40
  }),
37
41
  );
38
42
 
39
43
  vi.mock(
40
- "@evenicanpm/storefront-core/src/components-v2/header/components/user",
44
+ "@evenicanpm/storefront-core/src/components/header/components/user",
41
45
  () => {
42
46
  const User = ({ children }: { children?: ReactNode }) => (
43
47
  <div data-testid="user-component">User: {children}</div>