@evenicanpm/storefront-core 1.0.3 → 1.0.4

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 (319) hide show
  1. package/docs.tsconfig.json +35 -0
  2. package/package.json +6 -3
  3. package/src/api-manager/schemas/product.schema.ts +0 -1
  4. package/src/api-manager/services/create-query.ts +10 -0
  5. package/src/api-manager/services/product/queries/get-product-availability.ts +1 -1
  6. package/src/api-manager/services/user/mutations/add-to-wishlist.ts +23 -3
  7. package/src/api-manager/services/user/mutations/remove-from-wishlist.ts +23 -0
  8. package/src/cms/blocks/Components/CategoryCarousel/index.tsx +6 -7
  9. package/src/cms/blocks/Components/HeroCarousel/index.tsx +25 -19
  10. package/src/cms/blocks/Components/ProductCarousel/index.tsx +44 -38
  11. package/src/cms/blocks/Components/ProductSectionFullWidth/index.tsx +7 -3
  12. package/src/cms/blocks/Components/shared/product-grid.tsx +38 -23
  13. package/src/components/_components/wishlist/add-to-wishlist-dialog.tsx +1 -1
  14. package/src/components/_components/wishlist/remove-from-wishlist-dialog.tsx +1 -1
  15. package/src/components/_components/wishlist-modal/add-to-wishlist-dialog.tsx +1 -1
  16. package/src/components/_components/wishlist-modal/remove-from-wishlist-dialog.tsx +1 -1
  17. package/src/components-v2/carousel/carousel.tsx +69 -35
  18. package/src/components-v2/carousel/components/carousel-arrows.tsx +40 -46
  19. package/src/components-v2/carousel/components/carousel-dots.tsx +10 -13
  20. package/src/components-v2/carousel/index.ts +0 -2
  21. package/src/components-v2/carousel-cards/carousel-card-1/carousel-card-1.tsx +68 -49
  22. package/src/components-v2/categories/category-list/category-list.tsx +83 -41
  23. package/src/components-v2/categories/category-list/styles.ts +7 -1
  24. package/src/components-v2/categories/category-menu.tsx +2 -0
  25. package/src/components-v2/categories/mega-menu/banner.tsx +68 -37
  26. package/src/components-v2/categories/mega-menu/column-list.tsx +59 -52
  27. package/src/components-v2/categories/mega-menu/mega-menu-1.tsx +19 -1
  28. package/src/components-v2/categories/mega-menu/mega-menu-2.tsx +32 -2
  29. package/src/components-v2/header/components/mobile-header.tsx +119 -46
  30. package/src/components-v2/header/components/user.tsx +163 -117
  31. package/src/components-v2/header/header.tsx +62 -42
  32. package/src/components-v2/header/sticky-header.tsx +34 -2
  33. package/src/components-v2/mini-cart/components/bottom-actions.tsx +71 -17
  34. package/src/components-v2/mini-cart/components/cart-item.tsx +159 -101
  35. package/src/components-v2/mini-cart/components/empty-view.tsx +59 -19
  36. package/src/components-v2/mini-cart/components/top-header.tsx +61 -22
  37. package/src/components-v2/mini-cart/mini-cart-trigger.tsx +99 -0
  38. package/src/components-v2/mini-cart/mini-cart.tsx +111 -43
  39. package/src/components-v2/mobile-navigation/mobile-navigation-bar.tsx +93 -48
  40. package/src/components-v2/navbar/categories.tsx +70 -16
  41. package/src/components-v2/navbar/category-based-menu/category-based-menu.tsx +135 -41
  42. package/src/components-v2/navbar/mega-menu/mega-menu.tsx +115 -48
  43. package/src/components-v2/navbar/mobile-menu/mobile-menu.test.tsx +111 -0
  44. package/src/components-v2/navbar/mobile-menu/mobile-menu.tsx +127 -56
  45. package/src/components-v2/navbar/nav-list/nav-list.tsx +125 -103
  46. package/src/components-v2/navbar/navbar.tsx +72 -20
  47. package/src/components-v2/product-cards/{product-card-1 → product-card}/components/quantity-buttons.tsx +1 -1
  48. package/src/components-v2/product-cards/product-card/product-card.tsx +410 -0
  49. package/src/components-v2/product-cards/{product-card-1 → product-card}/styles/index.ts +6 -0
  50. package/src/components-v2/product-cards/product-card-plp/product-card.tsx +161 -0
  51. package/src/components-v2/product-cards/product-card-plp-list/index.ts +1 -0
  52. package/src/components-v2/product-cards/product-card-plp-list/product-card.tsx +219 -0
  53. package/src/components-v2/product-cards/product-card-search/product-card.tsx +166 -0
  54. package/src/components-v2/product-dialog/compound/product-dialog.tsx +225 -0
  55. package/src/components-v2/product-dialog/index.tsx +29 -0
  56. package/src/components-v2/product-dimensions/{components → compound}/dimensions-group-error.tsx +1 -1
  57. package/src/components-v2/product-dimensions/{components → compound}/dimensions-group-label.tsx +1 -1
  58. package/src/components-v2/product-dimensions/{components → compound}/dimensions-group-list-chip.tsx +1 -1
  59. package/src/components-v2/product-dimensions/{components → compound}/dimensions-group-list.tsx +1 -1
  60. package/src/components-v2/product-dimensions/{components → compound}/dimensions-group.tsx +1 -1
  61. package/src/components-v2/product-dimensions/{components → compound}/dimensions.tsx +0 -3
  62. package/src/components-v2/product-dimensions/index.tsx +1 -1
  63. package/src/components-v2/product-quantity-buttons/compound/quantity-buttons-root.tsx +181 -0
  64. package/src/components-v2/product-quantity-buttons/index.tsx +22 -0
  65. package/src/components-v2/product-quantity-variants/index.tsx +90 -0
  66. package/src/components-v2/products-view/compound/context.ts +25 -0
  67. package/src/components-v2/products-view/compound/products-grid-view.tsx +109 -0
  68. package/src/components-v2/products-view/compound/products-list-view.tsx +98 -0
  69. package/src/components-v2/products-view/compound/types.ts +12 -0
  70. package/src/components-v2/products-view/index.tsx +45 -0
  71. package/src/components-v2/products-view/products-grid-view.tsx +24 -11
  72. package/src/components-v2/products-view/products-list-view.tsx +29 -12
  73. package/src/components-v2/search-bar/compound/context.ts +31 -0
  74. package/src/components-v2/search-bar/compound/results-item-lg.tsx +43 -0
  75. package/src/components-v2/search-bar/compound/results-item-sm.tsx +48 -0
  76. package/src/components-v2/search-bar/compound/results-suspense.tsx +49 -0
  77. package/src/components-v2/search-bar/compound/results.tsx +42 -0
  78. package/src/components-v2/search-bar/compound/search-bar-root.tsx +64 -0
  79. package/src/components-v2/search-bar/compound/textfield-adornment-button.tsx +22 -0
  80. package/src/components-v2/{search-box/components/category-dropdown.tsx → search-bar/compound/textfield-adornment-category.tsx} +29 -7
  81. package/src/components-v2/search-bar/compound/textfield-adornment-search-icon.tsx +34 -0
  82. package/src/components-v2/search-bar/compound/textfield.tsx +58 -0
  83. package/src/components-v2/search-bar/hooks/use-click-outside.ts +20 -0
  84. package/src/components-v2/search-bar/hooks/use-search.ts +63 -0
  85. package/src/components-v2/search-bar/index.tsx +36 -0
  86. package/src/components-v2/{search-box → search-bar}/styles/index.ts +5 -3
  87. package/src/components-v2/search-bar/utils/findCategoryNameById.ts +18 -0
  88. package/src/components-v2/section/compound/section-header.tsx +63 -0
  89. package/src/components-v2/section/compound/section.tsx +26 -0
  90. package/src/components-v2/section/index.ts +1 -0
  91. package/src/components-v2/side-nav/side-nav.tsx +4 -5
  92. package/src/components-v2/sticky/index.ts +1 -1
  93. package/src/components-v2/{wishlist-modal → wishlist-dialogs/add-to-wishlist}/add-to-wishlist-button.tsx +1 -1
  94. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/add-to-wishlist-bottom-ui.tsx +35 -0
  95. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/add-to-wishlist-dialog.tsx +79 -0
  96. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/add-to-wishlist-list.tsx +41 -0
  97. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/context.ts +29 -0
  98. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/wishlist-dialog-header.tsx +74 -0
  99. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/wishlist-dialog-item.tsx +82 -0
  100. package/src/components-v2/wishlist-dialogs/add-to-wishlist/hooks/use-add-to-wishlist.ts +152 -0
  101. package/src/components-v2/wishlist-dialogs/add-to-wishlist/index.tsx +39 -0
  102. package/src/components-v2/wishlist-dialogs/create-wishlist/compound/context.ts +2 -0
  103. package/src/components-v2/wishlist-dialogs/create-wishlist/compound/create-wishlist-bottom-ui.tsx +42 -0
  104. package/src/components-v2/wishlist-dialogs/create-wishlist/compound/create-wishlist-dialog.tsx +92 -0
  105. package/src/components-v2/wishlist-dialogs/create-wishlist/compound/create-wishlist-form.tsx +96 -0
  106. package/src/components-v2/{wishlist/components → wishlist-dialogs/create-wishlist}/create-wishlist-button.tsx +5 -3
  107. package/src/components-v2/wishlist-dialogs/create-wishlist/index.tsx +22 -0
  108. package/src/hooks/use-cart.ts +29 -23
  109. package/src/hooks/use-variants.ts +106 -53
  110. package/src/lib/build-detail-url.ts +2 -1
  111. package/src/pages/product-details/product-intro/product-intro.tsx +26 -23
  112. package/src/pages/product-list/quick-view-dialog-content.tsx +18 -9
  113. package/src/pages-v2/product-details/bopis/find-in-store-button.tsx +9 -8
  114. package/src/pages-v2/product-details/bopis/find-in-store-modal.tsx +2 -2
  115. package/src/{components-v2/shop-card → pages-v2/product-details/bopis/store-card}/shop-card.tsx +17 -48
  116. package/src/pages-v2/product-details/bopis/store-card/utils/convertSecondsToTime.ts +8 -0
  117. package/src/pages-v2/product-details/bopis/store-card/utils/getDaysResources.ts +25 -0
  118. package/src/pages-v2/product-details/product-intro/compound/context.ts +52 -0
  119. package/src/pages-v2/product-details/product-intro/compound/product-info.tsx +231 -0
  120. package/src/pages-v2/product-details/product-intro/compound/product-intro-images.tsx +124 -0
  121. package/src/pages-v2/product-details/product-intro/compound/product-intro.tsx +49 -0
  122. package/src/pages-v2/product-details/product-intro/compound/thumbnail-with-skeleton.tsx +28 -0
  123. package/src/pages-v2/product-details/product-intro/utils.ts +42 -0
  124. package/src/pages-v2/product-details/product-tabs.tsx +87 -21
  125. package/src/pages-v2/product-details/related-products.tsx +26 -12
  126. package/src/pages-v2/product-list/quick-view-dialog-content.tsx +17 -10
  127. package/typedoc.js +3 -1
  128. package/src/components-v2/MiniCartClient.tsx +0 -65
  129. package/src/components-v2/carousel-cards/carousel-card-2/carousel-card-2.tsx +0 -78
  130. package/src/components-v2/carousel-cards/carousel-card-2/index.ts +0 -1
  131. package/src/components-v2/carousel-cards/carousel-card-2/styles.ts +0 -26
  132. package/src/components-v2/carousel-cards/carousel-card-3/carousel-card-3.tsx +0 -37
  133. package/src/components-v2/carousel-cards/carousel-card-3/index.ts +0 -1
  134. package/src/components-v2/carousel-cards/carousel-card-3/styles.ts +0 -28
  135. package/src/components-v2/carousel-cards/carousel-card-4/carousel-card-4.tsx +0 -81
  136. package/src/components-v2/carousel-cards/carousel-card-4/index.ts +0 -1
  137. package/src/components-v2/carousel-cards/carousel-card-4/styles.ts +0 -27
  138. package/src/components-v2/category-cards/category-card-1/category-card-1.tsx +0 -21
  139. package/src/components-v2/category-cards/category-card-1/index.ts +0 -1
  140. package/src/components-v2/category-cards/category-card-1/styles.ts +0 -37
  141. package/src/components-v2/countdown/count-box.tsx +0 -19
  142. package/src/components-v2/countdown/count-down.tsx +0 -24
  143. package/src/components-v2/countdown/index.tsx +0 -2
  144. package/src/components-v2/countdown/useCountDown.ts +0 -41
  145. package/src/components-v2/data-table/index.ts +0 -2
  146. package/src/components-v2/data-table/table-header.tsx +0 -91
  147. package/src/components-v2/data-table/table-pagination.tsx +0 -36
  148. package/src/components-v2/footer/components/about-links.tsx +0 -23
  149. package/src/components-v2/footer/components/app-store.tsx +0 -38
  150. package/src/components-v2/footer/components/customer-care-links.tsx +0 -21
  151. package/src/components-v2/footer/components/logo.tsx +0 -23
  152. package/src/components-v2/footer/components/social-links.tsx +0 -43
  153. package/src/components-v2/footer/data/index.ts +0 -54
  154. package/src/components-v2/footer/footer-1.tsx +0 -62
  155. package/src/components-v2/footer/footer-2.tsx +0 -57
  156. package/src/components-v2/footer/footer-3.tsx +0 -53
  157. package/src/components-v2/footer/footer-4.tsx +0 -71
  158. package/src/components-v2/footer/index.ts +0 -4
  159. package/src/components-v2/footer/styles/index.ts +0 -42
  160. package/src/components-v2/navbar/category-based-menu/components/categories.tsx +0 -44
  161. package/src/components-v2/navbar/category-based-menu/components/category-item.tsx +0 -31
  162. package/src/components-v2/navbar/category-based-menu/components/child-categories.tsx +0 -38
  163. package/src/components-v2/navbar/mega-menu/category-list.tsx +0 -29
  164. package/src/components-v2/navbar/mobile-menu/render-levels.test.tsx +0 -71
  165. package/src/components-v2/navbar/mobile-menu/render-levels.tsx +0 -62
  166. package/src/components-v2/newsletter/index.ts +0 -1
  167. package/src/components-v2/newsletter/newsletter.tsx +0 -112
  168. package/src/components-v2/newsletter/social-icons.tsx +0 -35
  169. package/src/components-v2/newsletter/styles.ts +0 -65
  170. package/src/components-v2/page-sidenav/grocery-side-nav/components/link-item.tsx +0 -21
  171. package/src/components-v2/page-sidenav/grocery-side-nav/components/list-item.tsx +0 -27
  172. package/src/components-v2/page-sidenav/grocery-side-nav/components/nav-accordion.tsx +0 -36
  173. package/src/components-v2/page-sidenav/grocery-side-nav/components/render-child.tsx +0 -26
  174. package/src/components-v2/page-sidenav/grocery-side-nav/grocery-side-nav.tsx +0 -32
  175. package/src/components-v2/page-sidenav/grocery-side-nav/index.ts +0 -1
  176. package/src/components-v2/page-sidenav/grocery-side-nav/styles/index.ts +0 -11
  177. package/src/components-v2/page-sidenav/health-beauty-side-nav/components/list-item.tsx +0 -27
  178. package/src/components-v2/page-sidenav/health-beauty-side-nav/components/nav-accordion.tsx +0 -44
  179. package/src/components-v2/page-sidenav/health-beauty-side-nav/components/render-child.tsx +0 -20
  180. package/src/components-v2/page-sidenav/health-beauty-side-nav/health-beauty-side-nav.tsx +0 -43
  181. package/src/components-v2/page-sidenav/health-beauty-side-nav/index.ts +0 -1
  182. package/src/components-v2/page-sidenav/health-beauty-side-nav/styles/index.ts +0 -27
  183. package/src/components-v2/page-sidenav/side-navbar/components/list-item.tsx +0 -25
  184. package/src/components-v2/page-sidenav/side-navbar/components/nav-accordion.tsx +0 -46
  185. package/src/components-v2/page-sidenav/side-navbar/components/render-child.tsx +0 -20
  186. package/src/components-v2/page-sidenav/side-navbar/index.ts +0 -1
  187. package/src/components-v2/page-sidenav/side-navbar/side-nav-bar.tsx +0 -77
  188. package/src/components-v2/page-sidenav/side-navbar/styles/index.ts +0 -73
  189. package/src/components-v2/page-sidenav/side-navbar-2/components/button-content.tsx +0 -32
  190. package/src/components-v2/page-sidenav/side-navbar-2/components/sidebar-accordion.tsx +0 -66
  191. package/src/components-v2/page-sidenav/side-navbar-2/index.ts +0 -1
  192. package/src/components-v2/page-sidenav/side-navbar-2/side-navbar-2.tsx +0 -63
  193. package/src/components-v2/page-sidenav/side-navbar-2/styles/index.ts +0 -68
  194. package/src/components-v2/product-cards/product-card-1/index.ts +0 -1
  195. package/src/components-v2/product-cards/product-card-1/product-card-1-wrapper.tsx +0 -304
  196. package/src/components-v2/product-cards/product-card-1/product-card.tsx +0 -107
  197. package/src/components-v2/product-cards/product-card-10/index.ts +0 -1
  198. package/src/components-v2/product-cards/product-card-10/product-card.tsx +0 -128
  199. package/src/components-v2/product-cards/product-card-10/styles/index.ts +0 -38
  200. package/src/components-v2/product-cards/product-card-11/index.ts +0 -1
  201. package/src/components-v2/product-cards/product-card-11/product-card.tsx +0 -66
  202. package/src/components-v2/product-cards/product-card-11/styles/index.ts +0 -16
  203. package/src/components-v2/product-cards/product-card-12/index.ts +0 -1
  204. package/src/components-v2/product-cards/product-card-12/product-card.tsx +0 -42
  205. package/src/components-v2/product-cards/product-card-12/styles/index.ts +0 -16
  206. package/src/components-v2/product-cards/product-card-13/index.ts +0 -1
  207. package/src/components-v2/product-cards/product-card-13/product-card.tsx +0 -48
  208. package/src/components-v2/product-cards/product-card-13/styles/index.ts +0 -25
  209. package/src/components-v2/product-cards/product-card-14/index.ts +0 -1
  210. package/src/components-v2/product-cards/product-card-14/product-card.tsx +0 -125
  211. package/src/components-v2/product-cards/product-card-14/styles/index.ts +0 -40
  212. package/src/components-v2/product-cards/product-card-15/index.ts +0 -1
  213. package/src/components-v2/product-cards/product-card-15/product-card.tsx +0 -121
  214. package/src/components-v2/product-cards/product-card-15/styles/index.ts +0 -57
  215. package/src/components-v2/product-cards/product-card-16/product-card.tsx +0 -116
  216. package/src/components-v2/product-cards/product-card-2/components/favorite-button.tsx +0 -29
  217. package/src/components-v2/product-cards/product-card-2/components/product-price.tsx +0 -26
  218. package/src/components-v2/product-cards/product-card-2/index.ts +0 -1
  219. package/src/components-v2/product-cards/product-card-2/product-card.tsx +0 -70
  220. package/src/components-v2/product-cards/product-card-3/components/hover-actions.tsx +0 -83
  221. package/src/components-v2/product-cards/product-card-3/index.ts +0 -1
  222. package/src/components-v2/product-cards/product-card-3/product-card.tsx +0 -110
  223. package/src/components-v2/product-cards/product-card-3/styles/index.ts +0 -89
  224. package/src/components-v2/product-cards/product-card-4/components/hover-actions.tsx +0 -50
  225. package/src/components-v2/product-cards/product-card-4/index.ts +0 -1
  226. package/src/components-v2/product-cards/product-card-4/product-card.tsx +0 -128
  227. package/src/components-v2/product-cards/product-card-4/styles/index.ts +0 -66
  228. package/src/components-v2/product-cards/product-card-5/components/button-actions.tsx +0 -49
  229. package/src/components-v2/product-cards/product-card-5/components/hover-actions.tsx +0 -50
  230. package/src/components-v2/product-cards/product-card-5/index.ts +0 -1
  231. package/src/components-v2/product-cards/product-card-5/product-card.tsx +0 -137
  232. package/src/components-v2/product-cards/product-card-5/styles/index.ts +0 -94
  233. package/src/components-v2/product-cards/product-card-6/components/hover-actions.tsx +0 -50
  234. package/src/components-v2/product-cards/product-card-6/index.ts +0 -1
  235. package/src/components-v2/product-cards/product-card-6/product-card.tsx +0 -121
  236. package/src/components-v2/product-cards/product-card-6/styles/index.ts +0 -63
  237. package/src/components-v2/product-cards/product-card-7/components/product-status.tsx +0 -18
  238. package/src/components-v2/product-cards/product-card-7/components/quantity-buttons.tsx +0 -47
  239. package/src/components-v2/product-cards/product-card-7/index.ts +0 -1
  240. package/src/components-v2/product-cards/product-card-7/product-card.tsx +0 -139
  241. package/src/components-v2/product-cards/product-card-7/styles/index.ts +0 -98
  242. package/src/components-v2/product-cards/product-card-8/product-card.tsx +0 -151
  243. package/src/components-v2/product-cards/product-card-9/index.ts +0 -1
  244. package/src/components-v2/product-cards/product-card-9/product-card.tsx +0 -169
  245. package/src/components-v2/product-cards/product-card-wishlist/components/hover-actions.tsx +0 -37
  246. package/src/components-v2/product-cards/product-card-wishlist/product-card.tsx +0 -118
  247. package/src/components-v2/product-cards/product-card-wishlist/styles/index.ts +0 -53
  248. package/src/components-v2/product-quantity-buttons/product-quantity-buttons.tsx +0 -88
  249. package/src/components-v2/products-view/product-view-dialog.tsx +0 -218
  250. package/src/components-v2/search-box/__test__/search-input-category.test.tsx +0 -110
  251. package/src/components-v2/search-box/__test__/search-input.test.tsx +0 -137
  252. package/src/components-v2/search-box/__test__/search-results.json +0 -165
  253. package/src/components-v2/search-box/components/search-result.tsx +0 -86
  254. package/src/components-v2/search-box/hooks/use-search.ts +0 -63
  255. package/src/components-v2/search-box/index.ts +0 -2
  256. package/src/components-v2/search-box/search-input-category.test.tsx +0 -110
  257. package/src/components-v2/search-box/search-input-category.tsx +0 -203
  258. package/src/components-v2/search-box/search-input.test.tsx +0 -41
  259. package/src/components-v2/search-box/search-input.tsx +0 -66
  260. package/src/components-v2/section-header/index.ts +0 -2
  261. package/src/components-v2/section-header/section-creator.tsx +0 -29
  262. package/src/components-v2/section-header/section-header.tsx +0 -44
  263. package/src/components-v2/service-cards/icon-component.tsx +0 -18
  264. package/src/components-v2/service-cards/service-card-1/index.ts +0 -1
  265. package/src/components-v2/service-cards/service-card-1/service-card-1.tsx +0 -42
  266. package/src/components-v2/service-cards/service-card-2/index.ts +0 -1
  267. package/src/components-v2/service-cards/service-card-2/service-card-2.tsx +0 -37
  268. package/src/components-v2/service-cards/service-card-3/index.ts +0 -1
  269. package/src/components-v2/service-cards/service-card-3/service-card-3.tsx +0 -28
  270. package/src/components-v2/service-cards/service-card-3/styles.ts +0 -23
  271. package/src/components-v2/settings/index.ts +0 -1
  272. package/src/components-v2/settings/setting.tsx +0 -141
  273. package/src/components-v2/settings/styles.ts +0 -57
  274. package/src/components-v2/sticky-wrapper/index.ts +0 -1
  275. package/src/components-v2/sticky-wrapper/sticky-wrapper.tsx +0 -21
  276. package/src/components-v2/sticky-wrapper/styles.ts +0 -25
  277. package/src/components-v2/stories/story-content/index.ts +0 -1
  278. package/src/components-v2/stories/story-content/story-content.tsx +0 -28
  279. package/src/components-v2/stories/story-content/styles.ts +0 -22
  280. package/src/components-v2/stories/story-item/index.ts +0 -1
  281. package/src/components-v2/stories/story-item/story-item.tsx +0 -24
  282. package/src/components-v2/stories/story-item/styles.ts +0 -11
  283. package/src/components-v2/stories/story-viewer/index.ts +0 -1
  284. package/src/components-v2/stories/story-viewer/story-viewer.tsx +0 -44
  285. package/src/components-v2/stories/story-viewer/styles.ts +0 -15
  286. package/src/components-v2/subscribe-input/index.ts +0 -1
  287. package/src/components-v2/subscribe-input/styles.ts +0 -14
  288. package/src/components-v2/subscribe-input/subscribe-input.tsx +0 -43
  289. package/src/components-v2/topbar/index.ts +0 -1
  290. package/src/components-v2/topbar/styles.ts +0 -55
  291. package/src/components-v2/topbar/top-bar.tsx +0 -115
  292. package/src/components-v2/wishlist/add-to-wishlist-dialog.tsx +0 -161
  293. package/src/components-v2/wishlist/components/create-new-list.tsx +0 -167
  294. package/src/components-v2/wishlist/components/dashboard-header.tsx +0 -123
  295. package/src/components-v2/wishlist/components/navigation.tsx +0 -87
  296. package/src/components-v2/wishlist/components/no-records.tsx +0 -20
  297. package/src/components-v2/wishlist/components/wishlist-modal-item.tsx +0 -66
  298. package/src/components-v2/wishlist/remove-from-wishlist-dialog.tsx +0 -175
  299. package/src/components-v2/wishlist-modal/TODO.md +0 -10
  300. package/src/components-v2/wishlist-modal/add-to-wishlist-dialog.tsx +0 -161
  301. package/src/components-v2/wishlist-modal/remove-from-wishlist-dialog.tsx +0 -174
  302. package/src/components-v2/wishlist-modal/wishlist-modal-item.tsx +0 -65
  303. package/src/pages-v2/product-details/product-intro/product-intro-images.tsx +0 -90
  304. package/src/pages-v2/product-details/product-intro/product-intro.tsx +0 -256
  305. /package/src/{pages-v2/account → components-v2}/no-records.tsx +0 -0
  306. /package/src/components-v2/product-cards/{product-card-1 → product-card}/components/hover-actions.tsx +0 -0
  307. /package/src/components-v2/product-cards/{product-card-16 → product-card}/index.ts +0 -0
  308. /package/src/components-v2/product-cards/{product-card-16 → product-card-plp}/components/quantity-buttons.tsx +0 -0
  309. /package/src/components-v2/product-cards/{product-card-wishlist → product-card-plp}/index.ts +0 -0
  310. /package/src/components-v2/product-cards/{product-card-16 → product-card-plp}/styles/index.ts +0 -0
  311. /package/src/components-v2/product-cards/{product-card-9 → product-card-plp-list}/components/add-to-cart.tsx +0 -0
  312. /package/src/components-v2/product-cards/{product-card-9 → product-card-plp-list}/components/favorite-button.tsx +0 -0
  313. /package/src/components-v2/product-cards/{product-card-9 → product-card-plp-list}/components/tags.tsx +0 -0
  314. /package/src/components-v2/product-cards/{product-card-8 → product-card-search}/index.ts +0 -0
  315. /package/src/components-v2/product-cards/{product-card-8 → product-card-search}/styles/index.ts +0 -0
  316. /package/src/components-v2/sticky/{Sticky.tsx → sticky.tsx} +0 -0
  317. /package/src/components-v2/{wishlist → wishlist-dialogs}/styles.ts +0 -0
  318. /package/src/{components-v2/shop-card → pages-v2/product-details/bopis/store-card}/index.ts +0 -0
  319. /package/src/{components-v2/shop-card → pages-v2/product-details/bopis/store-card}/styles.ts +0 -0
@@ -1,40 +1,60 @@
1
1
  "use client";
2
2
 
3
+ import React, { createContext, useContext } from "react";
3
4
  import { useRouter } from "next/navigation";
4
5
  import Box from "@mui/material/Box";
5
6
  import Divider from "@mui/material/Divider";
6
7
 
7
- // LOCAL CUSTOM COMPONENTS
8
+ import Scrollbar from "@evenicanpm/storefront-core/src/components-v2/scrollbar/index";
8
9
  import TopHeader from "./components/top-header";
9
10
  import MiniCartItem from "./components/cart-item";
10
- import EmptyCartView from "./components/empty-view";
11
+ import EmptyCart from "./components/empty-view";
11
12
  import BottomActions from "./components/bottom-actions";
12
- // GLOBAL CUSTOM COMPONENT
13
- import Scrollbar from "@evenicanpm/storefront-core/src/components-v2/scrollbar/index";
14
- // CUSTOM UTILS LIBRARY FUNCTION
15
- // CUSTOM DATA MODEL
13
+
16
14
  import { Cart, CartLine } from "@/schemas/cart.schema";
17
15
  import { useFormatter } from "next-intl";
18
16
  import useUpdateCartLines from "@/services/cart/mutations/update-cart-lines";
19
17
  import useDeleteCartLine from "@/services/cart/mutations/delete-cart-line";
20
18
 
21
- // =========================================================
19
+ interface MiniCartContextValue {
20
+ cart: Cart;
21
+ closeDrawer: () => void;
22
+ currency: (value: number) => string;
23
+ handleCartAmountChange: (cartLine: CartLine) => void;
24
+ shouldShowLoadingSpinner: (lineId: string) => boolean;
25
+ handleNavigate: (path: string) => () => void;
26
+ }
27
+
28
+ const MiniCartContext = createContext<MiniCartContextValue | null>(null);
29
+
30
+ const useMiniCartContext = () => {
31
+ const ctx = useContext(MiniCartContext);
32
+ if (!ctx) {
33
+ throw new Error(
34
+ "MiniCart compound components must be used inside <MiniCart>",
35
+ );
36
+ }
37
+ return ctx;
38
+ };
39
+
22
40
  export interface MiniCartProps {
23
41
  cart: Cart;
24
42
  closeDrawer: () => void;
43
+ children: React.ReactNode;
25
44
  }
26
- // =========================================================
27
45
 
28
- export default function MiniCart({ cart, closeDrawer }: MiniCartProps) {
46
+ const MiniCart = ({ cart, closeDrawer, children }: MiniCartProps) => {
29
47
  const { push } = useRouter();
30
48
  const { number } = useFormatter();
31
49
  const currency = (value: number) =>
32
50
  number(value, { style: "currency", currency: "USD" });
51
+
33
52
  const {
34
53
  mutate: updateLine,
35
54
  isPending: isUpdatePending,
36
55
  variables: updateVariables,
37
56
  } = useUpdateCartLines();
57
+
38
58
  const {
39
59
  mutate: deleteLine,
40
60
  isPending: isDeletePending,
@@ -63,45 +83,93 @@ export default function MiniCart({ cart, closeDrawer }: MiniCartProps) {
63
83
  };
64
84
 
65
85
  const handleNavigate = (path: string) => () => {
66
- // toggleSidenav();
67
86
  push(path);
68
87
  };
69
88
 
70
89
  return (
71
- <Box width="100%" minWidth={380}>
72
- {/* HEADING SECTION */}
73
- <TopHeader toggle={closeDrawer} total={cart?.CartLines.length || 0} />
74
-
75
- <Divider />
76
-
77
- <Box
78
- height={`calc(100vh - ${cart?.CartLines.length ? "207px" : "75px"})`}
79
- >
80
- {/* CART ITEM LIST */}
81
- {cart.CartLines.length > 0 ? (
82
- <Scrollbar>
83
- {cart?.CartLines?.map((item) => (
84
- <MiniCartItem
85
- item={item}
86
- key={item.LineId}
87
- handleCartAmountChange={handleCartAmountChange}
88
- isLineUpdating={shouldShowLoadingSpinner(item.LineId || "")}
89
- closeDrawer={closeDrawer}
90
- />
91
- ))}
92
- </Scrollbar>
93
- ) : (
94
- <EmptyCartView />
95
- )}
90
+ <MiniCartContext.Provider
91
+ value={{
92
+ cart,
93
+ closeDrawer,
94
+ currency,
95
+ handleCartAmountChange,
96
+ shouldShowLoadingSpinner,
97
+ handleNavigate,
98
+ }}
99
+ >
100
+ <Box width="100%" minWidth={380}>
101
+ {children}
96
102
  </Box>
103
+ </MiniCartContext.Provider>
104
+ );
105
+ };
97
106
 
98
- {/* CART BOTTOM ACTION BUTTONS */}
99
- {cart?.CartLines.length > 0 ? (
100
- <BottomActions
101
- total={currency(cart?.TotalAmount || 0)}
102
- handleNavigate={handleNavigate}
103
- />
104
- ) : null}
107
+ /* ---------- Subcomponents ---------- */
108
+
109
+ MiniCart.Header = () => {
110
+ const { cart, closeDrawer } = useMiniCartContext();
111
+ return (
112
+ <TopHeader toggle={closeDrawer} total={cart?.CartLines.length || 0}>
113
+ <TopHeader.Heading />
114
+ <TopHeader.CloseButton />
115
+ </TopHeader>
116
+ );
117
+ };
118
+
119
+ MiniCart.Divider = () => {
120
+ return <Divider />;
121
+ };
122
+
123
+ MiniCart.Items = () => {
124
+ const {
125
+ cart,
126
+ handleCartAmountChange,
127
+ shouldShowLoadingSpinner,
128
+ closeDrawer,
129
+ } = useMiniCartContext();
130
+
131
+ return (
132
+ <Box height={`calc(100vh - ${cart?.CartLines.length ? "207px" : "75px"})`}>
133
+ {cart.CartLines.length > 0 ? (
134
+ <Scrollbar>
135
+ {cart?.CartLines?.map((item) => (
136
+ <MiniCartItem
137
+ item={item}
138
+ key={item.LineId}
139
+ handleCartAmountChange={handleCartAmountChange}
140
+ isLineUpdating={shouldShowLoadingSpinner(item.LineId || "")}
141
+ closeDrawer={closeDrawer}
142
+ >
143
+ <MiniCartItem.QuantityControls />
144
+ <MiniCartItem.ProductImage />
145
+ <MiniCartItem.ProductDetails />
146
+ <MiniCartItem.RemoveButton />
147
+ </MiniCartItem>
148
+ ))}
149
+ </Scrollbar>
150
+ ) : (
151
+ <EmptyCart>
152
+ <EmptyCart.Icon />
153
+ <EmptyCart.Message />
154
+ </EmptyCart>
155
+ )}
105
156
  </Box>
106
157
  );
107
- }
158
+ };
159
+
160
+ MiniCart.Actions = () => {
161
+ const { cart, currency, handleNavigate } = useMiniCartContext();
162
+ return cart?.CartLines.length > 0 ? (
163
+ <BottomActions
164
+ total={currency(cart?.TotalAmount || 0)}
165
+ handleNavigate={handleNavigate}
166
+ >
167
+ <BottomActions.ViewCartButton />
168
+ {/* <BottomActions.CustomButton path="/custom" variant="text">
169
+ custom button name
170
+ </BottomActions.CustomButton> */}
171
+ </BottomActions>
172
+ ) : null;
173
+ };
174
+
175
+ export default MiniCart;
@@ -1,73 +1,118 @@
1
1
  "use client";
2
2
 
3
- import { Fragment, useContext } from "react";
3
+ import { Fragment, createContext, useContext } from "react";
4
4
  import Box from "@mui/material/Box";
5
5
  import Badge from "@mui/material/Badge";
6
6
  import { Theme } from "@mui/material/styles";
7
+ import { SvgIconComponent } from "@mui/icons-material";
7
8
  import useMediaQuery from "@mui/material/useMediaQuery";
8
9
  import { useTranslations } from "next-intl";
9
- // CUSTOM ICON COMPONENTS
10
+ // STYLED COMPONENTS
11
+ import { iconStyle, StyledBox, StyledNavLink, Wrapper } from "./styles/index";
12
+ // ICON COMPONENTS
10
13
  import Home from "@evenicanpm/storefront-core/src/components-v2/icons/home";
11
14
  import User2 from "@evenicanpm/storefront-core/src/components-v2/icons/user2";
12
15
  import CategoryOutlined from "@evenicanpm/storefront-core/src/components-v2/icons/category-outline";
13
16
  import ShoppingBagOutlined from "@evenicanpm/storefront-core/src/components-v2/icons/shopping-bag-outlined";
14
- // STYLED COMPONENTS
15
- import { iconStyle, StyledBox, StyledNavLink, Wrapper } from "./styles/index";
17
+ // API and Context
16
18
  import getCart from "@/services/cart/queries/get-cart";
17
19
  import { NavContext } from "@evenicanpm/storefront-core/src/providers/nav-provider";
18
20
 
19
- const MENU_LIST = [
20
- { title: "home", Icon: Home, href: "/" },
21
- { title: "category", Icon: CategoryOutlined },
22
- { title: "cart", Icon: ShoppingBagOutlined, href: "/cart" },
23
- { title: "account", Icon: User2, href: "/account/profile" },
24
- ];
21
+ /**
22
+ Usage Examples:
23
+
24
+ *** Default Menu:
25
+ <MobileNavigationBar />
26
+
27
+ *** Override Menu List:
28
+ <MobileNavigationBar
29
+ menuList={[
30
+ { title: "home", Icon: Home, href: "/" },
31
+ { title: "custom", Icon: SomeOtherIcon, href: "/custom" },
32
+ ]}
33
+ />
25
34
 
26
- export default function MobileNavigationBar2() {
35
+ *** Custom Menu Content (Full Control):
36
+ <MobileNavigationBar>
37
+ <MobileNavigationBar.MenuItem title="home" Icon={Home} href="/" />
38
+ <MobileNavigationBar.MenuItem title="custom" Icon={SomeOtherIcon} href="/custom" />
39
+ </MobileNavigationBar>
40
+ */
41
+
42
+ type MenuItemProps = {
43
+ title: string;
44
+ Icon: SvgIconComponent;
45
+ href?: string;
46
+ };
47
+
48
+ type MobileNavigationBarProps = {
49
+ children?: React.ReactNode;
50
+ menuList?: MenuItemProps[];
51
+ };
52
+
53
+ const MobileNavContext = createContext<{ menuList: MenuItemProps[] }>({
54
+ menuList: [],
55
+ });
56
+
57
+ export default function MobileNavigationBar({
58
+ children,
59
+ menuList,
60
+ }: MobileNavigationBarProps) {
27
61
  const DOWN_900 = useMediaQuery((theme: Theme) => theme.breakpoints.down(900));
28
62
 
29
- const t = useTranslations("Navigation.Mobile");
63
+ const defaultMenuList: MenuItemProps[] = [
64
+ { title: "home", Icon: Home, href: "/" },
65
+ { title: "category", Icon: CategoryOutlined },
66
+ { title: "cart", Icon: ShoppingBagOutlined, href: "/cart" },
67
+ { title: "account", Icon: User2, href: "/account/profile" },
68
+ ];
30
69
 
31
- const { toggleMobileSideNav } = useContext(NavContext);
70
+ const listToRender = menuList || defaultMenuList;
32
71
 
33
- const { data: cart } = getCart.useData();
72
+ if (!DOWN_900) return null;
34
73
 
35
- if (DOWN_900) {
36
- return (
74
+ return (
75
+ <MobileNavContext.Provider value={{ menuList: listToRender }}>
37
76
  <Box position="relative" display="flex" flexDirection="column">
38
77
  <Wrapper>
39
- {MENU_LIST.map(({ Icon, title, href }) => {
40
- // Link inner content
41
- const ICON = <Icon sx={iconStyle} fontSize="small" />;
42
-
43
- const CONTENT = (
44
- <Fragment>
45
- {title === "cart" ? (
46
- <Badge badgeContent={cart?.TotalItems || 0} color="primary">
47
- {ICON}
48
- </Badge>
49
- ) : (
50
- ICON
51
- )}
52
-
53
- {t(title)}
54
- </Fragment>
55
- );
56
-
57
- return href ? (
58
- <StyledNavLink key={title} href={href}>
59
- {CONTENT}
60
- </StyledNavLink>
61
- ) : (
62
- <StyledBox key={title} onClick={toggleMobileSideNav}>
63
- {CONTENT}
64
- </StyledBox>
65
- );
66
- })}
78
+ {children ??
79
+ listToRender.map((item) => (
80
+ <MobileNavigationBar.MenuItem key={item.title} {...item} />
81
+ ))}
67
82
  </Wrapper>
68
83
  </Box>
69
- );
70
- }
71
-
72
- return null;
84
+ </MobileNavContext.Provider>
85
+ );
73
86
  }
87
+
88
+ MobileNavigationBar.MenuItem = function MenuItem({
89
+ title,
90
+ Icon,
91
+ href,
92
+ }: MenuItemProps) {
93
+ const { toggleMobileSideNav } = useContext(NavContext);
94
+ const t = useTranslations("Navigation.Mobile");
95
+ const { data: cart } = getCart.useData();
96
+
97
+ const iconEl = <Icon sx={iconStyle} fontSize="small" />;
98
+ const isCart = title === "cart";
99
+
100
+ const content = (
101
+ <Fragment>
102
+ {isCart ? (
103
+ <Badge badgeContent={cart?.TotalItems || 0} color="primary">
104
+ {iconEl}
105
+ </Badge>
106
+ ) : (
107
+ iconEl
108
+ )}
109
+ {t(title)}
110
+ </Fragment>
111
+ );
112
+
113
+ return href ? (
114
+ <StyledNavLink href={href}>{content}</StyledNavLink>
115
+ ) : (
116
+ <StyledBox onClick={toggleMobileSideNav}>{content}</StyledBox>
117
+ );
118
+ };
@@ -1,27 +1,81 @@
1
+ "use client";
2
+
3
+ import React, { createContext, useContext, ReactNode } from "react";
1
4
  import { MdChevronRight as ChevronRight } from "react-icons/md";
2
5
  import { useTranslations } from "next-intl";
3
- // GLOBAL CUSTOM COMPONENTS
6
+
4
7
  import { Paragraph } from "@evenicanpm/storefront-core/src/components-v2/Typography";
5
8
  import CategoryMenu from "@evenicanpm/storefront-core/src/components-v2/categories/category-menu";
6
- // CUSTOM ICON COMPONENT
7
9
  import Category from "@evenicanpm/storefront-core/src/components-v2/icons/category";
8
- // STYLED COMPONENT
9
10
  import { CategoryMenuButton } from "./styles";
10
11
 
11
- export default function Categories() {
12
+ type CategoriesContextValue = {
13
+ label: string;
14
+ };
15
+
16
+ const CategoriesContext = createContext<CategoriesContextValue | undefined>(
17
+ undefined,
18
+ );
19
+
20
+ export default function Categories({ children }: { children?: ReactNode }) {
12
21
  const t = useTranslations("Navigation");
22
+
23
+ const label = t("topLevelCategoryName");
24
+
13
25
  return (
14
- <CategoryMenu
15
- render={(handler) => (
16
- <CategoryMenuButton variant="text" onClick={(e) => handler(e)}>
17
- <div className="prefix">
18
- <Category fontSize="small" />
19
- <Paragraph fontWeight={600}>{t("topLevelCategoryName")}</Paragraph>
20
- </div>
21
-
22
- <ChevronRight className="dropdown-icon" fontSize="large" />
23
- </CategoryMenuButton>
24
- )}
25
- />
26
+ <CategoriesContext.Provider value={{ label }}>
27
+ <CategoryMenu
28
+ render={(handler) =>
29
+ React.isValidElement(children) ? (
30
+ children
31
+ ) : (
32
+ <Categories.Trigger onClick={handler}>
33
+ <Categories.Prefix>
34
+ <Categories.Icon />
35
+ <Categories.Label />
36
+ </Categories.Prefix>
37
+ <Categories.Chevron />
38
+ </Categories.Trigger>
39
+ )
40
+ }
41
+ />
42
+ </CategoriesContext.Provider>
26
43
  );
27
44
  }
45
+
46
+ Categories.Trigger = function Trigger({
47
+ children,
48
+ onClick,
49
+ }: {
50
+ children: React.ReactNode;
51
+ onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;
52
+ }) {
53
+ return (
54
+ <CategoryMenuButton variant="text" onClick={onClick}>
55
+ {children}
56
+ </CategoryMenuButton>
57
+ );
58
+ };
59
+
60
+ // Prefix wrapper for icon + label
61
+ Categories.Prefix = function Prefix({
62
+ children,
63
+ }: {
64
+ children: React.ReactNode;
65
+ }) {
66
+ return <div className="prefix">{children}</div>;
67
+ };
68
+
69
+ Categories.Icon = function Icon() {
70
+ return <Category fontSize="small" />;
71
+ };
72
+
73
+ Categories.Label = function Label() {
74
+ const ctx = useContext(CategoriesContext);
75
+ if (!ctx) return null;
76
+ return <Paragraph fontWeight={600}>{ctx.label}</Paragraph>;
77
+ };
78
+
79
+ Categories.Chevron = function Chevron() {
80
+ return <ChevronRight className="dropdown-icon" fontSize="large" />;
81
+ };
@@ -1,52 +1,146 @@
1
1
  "use client";
2
2
 
3
- import { useState } from "react";
3
+ import React, { createContext, useContext, useState } from "react";
4
+ import Link from "next/link";
5
+ import Box from "@mui/material/Box";
6
+ import Avatar from "@mui/material/Avatar";
4
7
  import KeyboardArrowDown from "@mui/icons-material/KeyboardArrowDown";
5
- // GLOBAL CUSTOM COMPONENT
8
+ import ChevronRight from "@mui/icons-material/ChevronRight";
9
+ // GLOBAL COMPONENTS
6
10
  import FlexRowCenter from "@evenicanpm/storefront-core/src/components-v2/flex-box/flex-row-center";
7
- // LOCAL CUSTOM COMPONENTS
8
- import Categories from "./components/categories";
9
- import ChildCategories from "./components/child-categories";
10
- // STYLED COMPONENTS
11
- import { Wrapper, StyledCard, MenusContainer } from "./styles";
12
- // DATA TYPES
11
+ import { H6 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
12
+ import Scrollbar from "@evenicanpm/storefront-core/src/components-v2/scrollbar";
13
+ import useSettings from "@evenicanpm/storefront-core/src/hooks/use-settings";
14
+ // LOCAL COMPONENTS
13
15
  import { TransformedNavItem } from "../utils/transform-nav";
16
+ // STYLED COMPONENTS
17
+ import {
18
+ Wrapper,
19
+ StyledCard,
20
+ MenusContainer,
21
+ CategoryList,
22
+ CategoryListItem,
23
+ SubCategoryList,
24
+ SubCategoryListItem,
25
+ } from "./styles";
26
+
27
+ type MenuContextValue = {
28
+ openList: string;
29
+ setOpenList: (val: string) => void;
30
+ menuList: TransformedNavItem[];
31
+ };
32
+
33
+ const MenuContext = createContext<MenuContextValue | undefined>(undefined);
34
+
35
+ const useCategoryMenu = () => {
36
+ const ctx = useContext(MenuContext);
37
+ if (!ctx)
38
+ throw new Error("useCategoryMenu must be used inside CategoryBasedMenu");
39
+ return ctx;
40
+ };
41
+
42
+ type RootProps = {
43
+ title: string;
44
+ menuList: TransformedNavItem[];
45
+ children: React.ReactNode;
46
+ };
14
47
 
15
- // ===============================================================
16
- type Props = { menuList: TransformedNavItem[]; title: string };
17
- // ===============================================================
48
+ const CategoryBasedMenu = ({ title, menuList, children }: RootProps) => {
49
+ const [openList, setOpenList] = useState(menuList[0]?.title || "");
18
50
 
19
- export default function CategoryBasedMenu({ title, menuList }: Props) {
20
- const [openList, setOpenList] = useState(menuList[0]?.title);
51
+ return (
52
+ <MenuContext.Provider value={{ openList, setOpenList, menuList }}>
53
+ <Wrapper>
54
+ <CategoryBasedMenu.Trigger>{title}</CategoryBasedMenu.Trigger>
55
+ <MenusContainer className="menu-list">
56
+ <StyledCard>{children}</StyledCard>
57
+ </MenusContainer>
58
+ </Wrapper>
59
+ </MenuContext.Provider>
60
+ );
61
+ };
62
+
63
+ CategoryBasedMenu.Trigger = ({ children }: { children: React.ReactNode }) => {
64
+ return (
65
+ <FlexRowCenter fontWeight={600} alignItems="flex-end" gap={0.3}>
66
+ {children}
67
+ <KeyboardArrowDown sx={{ color: "grey.500", fontSize: "1.1rem" }} />
68
+ </FlexRowCenter>
69
+ );
70
+ };
21
71
 
22
- const categories = menuList.reduce<string[]>(
23
- (prev, curr) => [...prev, curr.title],
24
- [],
25
- ); // Designate the data type
26
- const subCategories = menuList.find((item) => item.title === openList);
72
+ // Main Categories List
73
+ CategoryBasedMenu.MainList = () => {
74
+ const { openList, setOpenList, menuList } = useCategoryMenu();
75
+ const { settings } = useSettings();
27
76
 
28
77
  return (
29
- <Wrapper>
30
- <FlexRowCenter fontWeight={600} alignItems="flex-end" gap={0.3}>
31
- {title}{" "}
32
- <KeyboardArrowDown sx={{ color: "grey.500", fontSize: "1.1rem" }} />
33
- </FlexRowCenter>
34
-
35
- <MenusContainer className="menu-list">
36
- <StyledCard>
37
- {/* MAIN CATEGORIES SECTION */}
38
- {categories && (
39
- <Categories
40
- openList={openList}
41
- categories={categories}
42
- handleOpen={(item) => setOpenList(item)}
43
- />
44
- )}
45
-
46
- {/* SUB / CHILD CATEGORIES SECTION */}
47
- {subCategories && <ChildCategories categories={subCategories} />}
48
- </StyledCard>
49
- </MenusContainer>
50
- </Wrapper>
78
+ <CategoryList>
79
+ {menuList.map((item) => (
80
+ <CategoryListItem
81
+ key={item.title}
82
+ active={openList === item.title ? 1 : 0}
83
+ onMouseEnter={() => setOpenList(item.title)}
84
+ >
85
+ {item.title}
86
+ <ChevronRight
87
+ fontSize="small"
88
+ sx={{
89
+ transform: `rotate(${settings.direction === "rtl" ? "180deg" : "0"})`,
90
+ }}
91
+ />
92
+ </CategoryListItem>
93
+ ))}
94
+ </CategoryList>
51
95
  );
52
- }
96
+ };
97
+
98
+ // Subcategories Panel
99
+ CategoryBasedMenu.Section = () => {
100
+ const { openList, menuList } = useCategoryMenu();
101
+ const category = menuList.find((c) => c.title === openList);
102
+
103
+ if (!category) return null;
104
+
105
+ return (
106
+ <Scrollbar autoHide={false} sx={{ width: "100%" }}>
107
+ <Box px={6} py={2} height="100%">
108
+ {category.items.map((item, idx) => (
109
+ <div key={idx}>
110
+ <H6 fontWeight={700} my={3}>
111
+ {item.title}
112
+ </H6>
113
+ <SubCategoryList>
114
+ {item.items.map((sub, subIdx) => (
115
+ <CategoryBasedMenu.Item item={sub} key={subIdx} />
116
+ ))}
117
+ </SubCategoryList>
118
+ </div>
119
+ ))}
120
+ </Box>
121
+ </Scrollbar>
122
+ );
123
+ };
124
+
125
+ // Single Category Item
126
+ CategoryBasedMenu.Item = ({ item }: { item: TransformedNavItem }) => {
127
+ const { title, href = "/", Icon, img } = item || {};
128
+
129
+ return (
130
+ <Link href={href}>
131
+ <SubCategoryListItem>
132
+ {img && (
133
+ <Avatar
134
+ alt={title}
135
+ src={img}
136
+ sx={{ backgroundColor: "grey.100", borderRadius: 1 }}
137
+ />
138
+ )}
139
+ {Icon && <Icon sx={{ fontSize: 16 }} />}
140
+ {title}
141
+ </SubCategoryListItem>
142
+ </Link>
143
+ );
144
+ };
145
+
146
+ export default CategoryBasedMenu;