@websolutespa/bom-mixer-ui 0.4.0 → 0.4.2

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 (486) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/index.js +429 -328
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/esm/components/container/container.js +2 -2
  5. package/dist/esm/components/container/container.js.map +1 -1
  6. package/dist/esm/components/flex/flex-flow.js +1 -1
  7. package/dist/esm/components/grid/grid-row.js.map +1 -1
  8. package/dist/esm/components/grid/grid.js +1 -1
  9. package/dist/esm/components/utils.js +74 -39
  10. package/dist/esm/components/utils.js.map +1 -1
  11. package/dist/esm/forms/form-tester/form-tester.js +2 -2
  12. package/dist/esm/forms/form-tester/form-tester.js.map +1 -1
  13. package/dist/esm/forms/radio-card/radio-card.js +2 -2
  14. package/dist/esm/forms/radio-card/radio-card.js.map +1 -1
  15. package/dist/esm/hoc/with-page-transition/with-page-transition.js +1 -1
  16. package/dist/esm/index.js +1 -1
  17. package/dist/esm/lazy/carousel-1/carousel-1.js +2 -2
  18. package/dist/esm/lazy/carousel-1/carousel-1.js.map +1 -1
  19. package/dist/esm/lazy/download-1/download-1.js +1 -1
  20. package/dist/esm/lazy/media-full-2/media-full-2.js +1 -1
  21. package/dist/esm/lazy/media-full-2/media-full-2.js.map +1 -1
  22. package/dist/esm/lazy/media-media-1/media-media-1.js +1 -1
  23. package/dist/esm/lazy/media-media-1/media-media-1.js.map +1 -1
  24. package/dist/esm/lazy/not-found/not-found.js +2 -2
  25. package/dist/esm/lazy/related-1/related-1-card.js +1 -1
  26. package/dist/esm/lazy/related-1/related-1.js +1 -1
  27. package/dist/esm/lazy/sizes-colors-1/sizes-colors-1.js +1 -1
  28. package/dist/esm/lazy/text-1/text-1.js +1 -1
  29. package/dist/esm/lazy/text-aside-1/text-aside-1.js +3 -3
  30. package/dist/esm/lazy/text-aside-1/text-aside-1.js.map +1 -1
  31. package/dist/esm/lazy/text-media-1/text-media-1.js +4 -4
  32. package/dist/esm/lazy/text-media-1/text-media-1.js.map +1 -1
  33. package/dist/esm/lazy/text-text-1/text-text-1.js +1 -1
  34. package/dist/esm/lazy/text-text-1/text-text-1.js.map +1 -1
  35. package/dist/esm/sections/auth/auth-forgot-success.js +3 -3
  36. package/dist/esm/sections/auth/auth-forgot-success.js.map +1 -1
  37. package/dist/esm/sections/auth/auth-forgot.js +1 -1
  38. package/dist/esm/sections/auth/auth-login.js +1 -1
  39. package/dist/esm/sections/auth/auth-register-success.js +3 -3
  40. package/dist/esm/sections/auth/auth-register-success.js.map +1 -1
  41. package/dist/esm/sections/auth/auth-register.js +2 -2
  42. package/dist/esm/sections/auth/auth-register.js.map +1 -1
  43. package/dist/esm/sections/blog-more/blog-card.js +4 -4
  44. package/dist/esm/sections/blog-more/blog-card.js.map +1 -1
  45. package/dist/esm/sections/blog-more/blog-more.js +1 -1
  46. package/dist/esm/sections/blog-proposition/blog-proposition.js +4 -4
  47. package/dist/esm/sections/blog-proposition/blog-proposition.js.map +1 -1
  48. package/dist/esm/sections/cart-mini/cart-mini-item.js +2 -2
  49. package/dist/esm/sections/cart-mini/cart-mini-item.js.map +1 -1
  50. package/dist/esm/sections/cart-mini/cart-mini.js +1 -1
  51. package/dist/esm/sections/cart-mini/cart-mini.js.map +1 -1
  52. package/dist/esm/sections/categories-proposition/categories-proposition-card.js +2 -2
  53. package/dist/esm/sections/categories-proposition/categories-proposition-card.js.map +1 -1
  54. package/dist/esm/sections/categories-proposition/categories-proposition.js +1 -1
  55. package/dist/esm/sections/category-hero/category-hero.js +4 -4
  56. package/dist/esm/sections/category-hero/category-hero.js.map +1 -1
  57. package/dist/esm/sections/category-proposition/category-proposition.js +2 -2
  58. package/dist/esm/sections/category-proposition/category-proposition.js.map +1 -1
  59. package/dist/esm/sections/checkout/checkout-basket-item.js +4 -4
  60. package/dist/esm/sections/checkout/checkout-basket-item.js.map +1 -1
  61. package/dist/esm/sections/checkout/checkout-basket.js +5 -5
  62. package/dist/esm/sections/checkout/checkout-basket.js.map +1 -1
  63. package/dist/esm/sections/checkout/checkout-delivery.js +2 -2
  64. package/dist/esm/sections/checkout/checkout-delivery.js.map +1 -1
  65. package/dist/esm/sections/checkout/checkout-empty.js +2 -2
  66. package/dist/esm/sections/checkout/checkout-empty.js.map +1 -1
  67. package/dist/esm/sections/checkout/checkout-error.js +4 -4
  68. package/dist/esm/sections/checkout/checkout-error.js.map +1 -1
  69. package/dist/esm/sections/checkout/checkout-info.js +6 -6
  70. package/dist/esm/sections/checkout/checkout-info.js.map +1 -1
  71. package/dist/esm/sections/checkout/checkout-payment.js +1 -1
  72. package/dist/esm/sections/checkout/checkout-review.js +9 -9
  73. package/dist/esm/sections/checkout/checkout-review.js.map +1 -1
  74. package/dist/esm/sections/checkout/checkout-success.js +3 -3
  75. package/dist/esm/sections/checkout/checkout-success.js.map +1 -1
  76. package/dist/esm/sections/checkout/checkout-user-info.js +2 -2
  77. package/dist/esm/sections/checkout/checkout-user-info.js.map +1 -1
  78. package/dist/esm/sections/colors/colors.js +6 -6
  79. package/dist/esm/sections/colors/colors.js.map +1 -1
  80. package/dist/esm/sections/contact-card/contact-card.js +2 -2
  81. package/dist/esm/sections/contact-card/contact-card.js.map +1 -1
  82. package/dist/esm/sections/contact-hero/contact-hero.js +3 -3
  83. package/dist/esm/sections/contact-hero/contact-hero.js.map +1 -1
  84. package/dist/esm/sections/footer/footer.js +7 -7
  85. package/dist/esm/sections/footer/footer.js.map +1 -1
  86. package/dist/esm/sections/header/header-card.js +1 -1
  87. package/dist/esm/sections/header/header.js +4 -4
  88. package/dist/esm/sections/hero/hero.js +2 -2
  89. package/dist/esm/sections/icons/icons.js +3 -3
  90. package/dist/esm/sections/icons/icons.js.map +1 -1
  91. package/dist/esm/sections/magazine-related/magazine-related.js +1 -1
  92. package/dist/esm/sections/magazine-search/magazine-search-card.js +3 -3
  93. package/dist/esm/sections/magazine-search/magazine-search-card.js.map +1 -1
  94. package/dist/esm/sections/magazine-search/magazine-search-filters-modal.js +1 -1
  95. package/dist/esm/sections/magazine-search/magazine-search-filters-modal.js.map +1 -1
  96. package/dist/esm/sections/magazine-search/magazine-search-filters.js +1 -1
  97. package/dist/esm/sections/magazine-search/magazine-search-filters.js.map +1 -1
  98. package/dist/esm/sections/magazine-search/magazine-search.js +1 -1
  99. package/dist/esm/sections/magazine-search/magazine-search.js.map +1 -1
  100. package/dist/esm/sections/markets-and-languages/markets-and-languages-drawer.js +1 -1
  101. package/dist/esm/sections/markets-and-languages/markets-and-languages-drawer.js.map +1 -1
  102. package/dist/esm/sections/order/order-address.js +1 -1
  103. package/dist/esm/sections/order/order-item.js +8 -8
  104. package/dist/esm/sections/order/order-item.js.map +1 -1
  105. package/dist/esm/sections/order/order-register.js +4 -4
  106. package/dist/esm/sections/order/order-register.js.map +1 -1
  107. package/dist/esm/sections/order/order-summary-item.js +2 -2
  108. package/dist/esm/sections/order/order-summary-item.js.map +1 -1
  109. package/dist/esm/sections/order/order-summary.js +1 -1
  110. package/dist/esm/sections/product-overview/product-overview.js +11 -11
  111. package/dist/esm/sections/product-overview/product-overview.js.map +1 -1
  112. package/dist/esm/sections/products-detail-download/products-detail-download.js +1 -1
  113. package/dist/esm/sections/products-detail-related/products-detail-related-card.js +1 -1
  114. package/dist/esm/sections/products-detail-related/products-detail-related.js +1 -1
  115. package/dist/esm/sections/products-detail-size-color/products-detail-size-color.js +1 -1
  116. package/dist/esm/sections/products-hero/products-hero-card.js +2 -2
  117. package/dist/esm/sections/products-hero/products-hero-card.js.map +1 -1
  118. package/dist/esm/sections/products-hero/products-hero.js +1 -1
  119. package/dist/esm/sections/products-hero/products-hero.js.map +1 -1
  120. package/dist/esm/sections/products-proposition/products-proposition-card.js +3 -3
  121. package/dist/esm/sections/products-proposition/products-proposition-card.js.map +1 -1
  122. package/dist/esm/sections/products-related/products-related-card.js +3 -3
  123. package/dist/esm/sections/products-related/products-related-card.js.map +1 -1
  124. package/dist/esm/sections/products-related/products-related.js +1 -1
  125. package/dist/esm/sections/products-search/products-search-card.js +1 -1
  126. package/dist/esm/sections/products-search/products-search-card.js.map +1 -1
  127. package/dist/esm/sections/products-search/products-search-filters-modal.js +1 -1
  128. package/dist/esm/sections/products-search/products-search-filters-modal.js.map +1 -1
  129. package/dist/esm/sections/products-search/products-search-filters.js +1 -1
  130. package/dist/esm/sections/products-search/products-search-filters.js.map +1 -1
  131. package/dist/esm/sections/products-search/products-search-recap.js +1 -1
  132. package/dist/esm/sections/products-search/products-search-recap.js.map +1 -1
  133. package/dist/esm/sections/products-search/products-search.js +2 -2
  134. package/dist/esm/sections/products-search/products-search.js.map +1 -1
  135. package/dist/esm/sections/proposition/proposition.js +1 -1
  136. package/dist/esm/sections/shop-category-hero/shop-category-hero.js +2 -2
  137. package/dist/esm/sections/shop-detail-related/shop-detail-related-card.js +1 -1
  138. package/dist/esm/sections/shop-detail-related/shop-detail-related-card.js.map +1 -1
  139. package/dist/esm/sections/shop-detail-related/shop-detail-related.js +1 -1
  140. package/dist/esm/sections/shop-hero/shop-hero-card.js +2 -2
  141. package/dist/esm/sections/shop-hero/shop-hero-card.js.map +1 -1
  142. package/dist/esm/sections/shop-hero/shop-hero.js +2 -2
  143. package/dist/esm/sections/shop-hero/shop-hero.js.map +1 -1
  144. package/dist/esm/sections/shop-incentive/shop-incentive.js +6 -6
  145. package/dist/esm/sections/shop-incentive/shop-incentive.js.map +1 -1
  146. package/dist/esm/sections/shop-items-proposition/shop-items-proposition-card.js +3 -3
  147. package/dist/esm/sections/shop-items-proposition/shop-items-proposition-card.js.map +1 -1
  148. package/dist/esm/sections/shop-search/shop-search-card.js +3 -3
  149. package/dist/esm/sections/shop-search/shop-search-card.js.map +1 -1
  150. package/dist/esm/sections/shop-search/shop-search-filters-modal.js +1 -1
  151. package/dist/esm/sections/shop-search/shop-search-filters-modal.js.map +1 -1
  152. package/dist/esm/sections/shop-search/shop-search-recap.js +1 -1
  153. package/dist/esm/sections/shop-search/shop-search-recap.js.map +1 -1
  154. package/dist/esm/sections/shop-search/shop-search.js +4 -4
  155. package/dist/esm/sections/shop-search/shop-search.js.map +1 -1
  156. package/dist/esm/sections/split/split.js +3 -3
  157. package/dist/esm/sections/split/split.js.map +1 -1
  158. package/dist/esm/sections/store-locator/store-locator-search.js +3 -3
  159. package/dist/esm/sections/store-locator/store-locator-search.js.map +1 -1
  160. package/dist/esm/sections/swiper-hero/swiper-hero.js +2 -2
  161. package/dist/esm/theme/global.vars.js +81 -42
  162. package/dist/esm/theme/global.vars.js.map +1 -1
  163. package/dist/esm/theme/theme.json.js +56 -35
  164. package/dist/esm/theme/theme.json.js.map +1 -1
  165. package/dist/types/components/breadcrumb/breadcrumb.d.ts +2 -2
  166. package/dist/types/components/button/button.d.ts +3 -3
  167. package/dist/types/components/button/button.d.ts.map +1 -1
  168. package/dist/types/components/button/button.variants.d.ts +32 -31
  169. package/dist/types/components/button/button.variants.d.ts.map +1 -1
  170. package/dist/types/components/container/container.d.ts +7 -8
  171. package/dist/types/components/container/container.d.ts.map +1 -1
  172. package/dist/types/components/css.d.ts +1 -1
  173. package/dist/types/components/grid/grid-row.d.ts +4 -2
  174. package/dist/types/components/grid/grid-row.d.ts.map +1 -1
  175. package/dist/types/components/utils.d.ts +12 -5
  176. package/dist/types/components/utils.d.ts.map +1 -1
  177. package/dist/types/forms/custom-select/custom-select.d.ts +1 -1
  178. package/dist/types/sections/colors/colors.d.ts.map +1 -1
  179. package/dist/types/theme/global.vars.d.ts.map +1 -1
  180. package/dist/types/theme/types.d.ts +19 -17
  181. package/dist/types/theme/types.d.ts.map +1 -1
  182. package/dist/types/useVariants/useVariants.d.ts +3 -14
  183. package/dist/types/useVariants/useVariants.d.ts.map +1 -1
  184. package/package.json +3 -3
  185. package/src/__tests/example.test.ts +8 -0
  186. package/src/components/accordion/accordion-context.ts +14 -0
  187. package/src/components/accordion/accordion-group.tsx +82 -0
  188. package/src/components/accordion/accordion-icon.tsx +37 -0
  189. package/src/components/accordion/accordion.tsx +132 -0
  190. package/src/components/backdrop/backdrop.tsx +156 -0
  191. package/src/components/background/background.tsx +35 -0
  192. package/src/components/badge/badge.tsx +21 -0
  193. package/src/components/box/box.tsx +12 -0
  194. package/src/components/breadcrumb/breadcrumb-item.tsx +53 -0
  195. package/src/components/breadcrumb/breadcrumb-separator.tsx +33 -0
  196. package/src/components/breadcrumb/breadcrumb.group.tsx +27 -0
  197. package/src/components/breadcrumb/breadcrumb.tsx +77 -0
  198. package/src/components/breakpoint/breakpoint.tsx +46 -0
  199. package/src/components/button/__snapshots__/button.test.tsx.snap +61 -0
  200. package/src/components/button/button.test.enzyme.example +132 -0
  201. package/src/components/button/button.test.tsx +33 -0
  202. package/src/components/button/button.tsx +36 -0
  203. package/src/components/button/button.variants.ts +316 -0
  204. package/src/components/button-group/button-group.tsx +102 -0
  205. package/src/components/card/card-content.tsx +13 -0
  206. package/src/components/card/card-footer.tsx +18 -0
  207. package/src/components/card/card.tsx +144 -0
  208. package/src/components/carousel/carousel.tsx +62 -0
  209. package/src/components/carousel/slide.tsx +28 -0
  210. package/src/components/code/code.tsx +17 -0
  211. package/src/components/container/container.tsx +32 -0
  212. package/src/components/css.ts +292 -0
  213. package/src/components/divider/divider.tsx +54 -0
  214. package/src/components/drawer/drawer-wrapper.tsx +154 -0
  215. package/src/components/drawer/drawer.tsx +110 -0
  216. package/src/components/drawer/helper.ts +33 -0
  217. package/src/components/dropdown/dropdown-layout.ts +94 -0
  218. package/src/components/dropdown/dropdown.tsx +132 -0
  219. package/src/components/ellipsis/ellipsis.tsx +18 -0
  220. package/src/components/expand/expand.tsx +97 -0
  221. package/src/components/flex/flex-col.tsx +16 -0
  222. package/src/components/flex/flex-flow.tsx +165 -0
  223. package/src/components/flex/flex-responsive.tsx +28 -0
  224. package/src/components/flex/flex-row.tsx +18 -0
  225. package/src/components/flex/flex.tsx +29 -0
  226. package/src/components/google-map/google-map-context.ts +15 -0
  227. package/src/components/google-map/google-map-hooks._ts +28 -0
  228. package/src/components/google-map/google-map-info-window.tsx +68 -0
  229. package/src/components/google-map/google-map-loader.tsx +67 -0
  230. package/src/components/google-map/google-map-marker-clusterer-plus.tsx +104 -0
  231. package/src/components/google-map/google-map-marker-clusterer.tsx +126 -0
  232. package/src/components/google-map/google-map-marker.tsx +48 -0
  233. package/src/components/google-map/google-map-skeleton.tsx +6 -0
  234. package/src/components/google-map/google-map.service.ts +236 -0
  235. package/src/components/google-map/google-map.style.ts +80 -0
  236. package/src/components/google-map/google-map.tsx +136 -0
  237. package/src/components/google-map/types.tsx +47 -0
  238. package/src/components/google-map/useGoogleMaps._ts +37 -0
  239. package/src/components/grid/grid-row.tsx +19 -0
  240. package/src/components/grid/grid.tsx +55 -0
  241. package/src/components/highlight/highlight.tsx +79 -0
  242. package/src/components/index.ts +50 -0
  243. package/src/components/infinite-loader/infinite-loader.tsx +59 -0
  244. package/src/components/layout/layout.tsx +22 -0
  245. package/src/components/link/link-icon.tsx +25 -0
  246. package/src/components/link/link.tsx +63 -0
  247. package/src/components/list/list.tsx +24 -0
  248. package/src/components/loading/loading.tsx +51 -0
  249. package/src/components/media/media-image-next.tsx +43 -0
  250. package/src/components/media/media-image.tsx +110 -0
  251. package/src/components/media/media.tsx +195 -0
  252. package/src/components/media-gallery/media-gallery-context.tsx +14 -0
  253. package/src/components/media-gallery/media-gallery-navigation.tsx +68 -0
  254. package/src/components/media-gallery/media-gallery.tsx +163 -0
  255. package/src/components/meta/meta.tsx +33 -0
  256. package/src/components/modal/modal-button.tsx +103 -0
  257. package/src/components/modal/modal-close.tsx +67 -0
  258. package/src/components/modal/modal-content.tsx +46 -0
  259. package/src/components/modal/modal-context.ts +11 -0
  260. package/src/components/modal/modal-footer.tsx +40 -0
  261. package/src/components/modal/modal-subtitle.tsx +36 -0
  262. package/src/components/modal/modal-title.tsx +36 -0
  263. package/src/components/modal/modal-wrapper.tsx +119 -0
  264. package/src/components/modal/modal.tsx +138 -0
  265. package/src/components/nav/nav.tsx +71 -0
  266. package/src/components/nav-link/nav-link.tsx +32 -0
  267. package/src/components/page/page.tsx +13 -0
  268. package/src/components/page-nav/page-nav.tsx +120 -0
  269. package/src/components/pagination/pagination-context.ts +18 -0
  270. package/src/components/pagination/pagination-ellipsis.tsx +61 -0
  271. package/src/components/pagination/pagination-item.tsx +92 -0
  272. package/src/components/pagination/pagination-next.tsx +16 -0
  273. package/src/components/pagination/pagination-pages.tsx +90 -0
  274. package/src/components/pagination/pagination-previous.tsx +16 -0
  275. package/src/components/pagination/pagination.tsx +108 -0
  276. package/src/components/popover/popover-collections.tsx +157 -0
  277. package/src/components/popover/popover-context.ts +17 -0
  278. package/src/components/popover/popover-item.tsx +85 -0
  279. package/src/components/popover/popover.tsx +102 -0
  280. package/src/components/section/section.tsx +62 -0
  281. package/src/components/skeleton/skeleton.tsx +31 -0
  282. package/src/components/svg/svg.tsx +10 -0
  283. package/src/components/swiper/swiper-navigation.tsx +68 -0
  284. package/src/components/swiper/swiper-pagination.tsx +79 -0
  285. package/src/components/swiper/swiper.tsx +45 -0
  286. package/src/components/tabs/tabs-context.ts +31 -0
  287. package/src/components/tabs/tabs-item.tsx +148 -0
  288. package/src/components/tabs/tabs.tsx +169 -0
  289. package/src/components/text/text.tsx +101 -0
  290. package/src/components/tooltip/tooltip-content.tsx +112 -0
  291. package/src/components/tooltip/tooltip-helper.tsx +35 -0
  292. package/src/components/tooltip/tooltip-icon.tsx +32 -0
  293. package/src/components/tooltip/tooltip-placement.ts +196 -0
  294. package/src/components/tooltip/tooltip-props.ts +77 -0
  295. package/src/components/tooltip/tooltip.tsx +129 -0
  296. package/src/components/transition/transition.tsx +63 -0
  297. package/src/components/types.ts +144 -0
  298. package/src/components/utils.ts +236 -0
  299. package/src/custom.d.ts +4 -0
  300. package/src/fields/field-accept.tsx +65 -0
  301. package/src/fields/field-autocomplete.tsx +113 -0
  302. package/src/fields/field-card.tsx +69 -0
  303. package/src/fields/field-checkbox.tsx +67 -0
  304. package/src/fields/field-collection.tsx +71 -0
  305. package/src/fields/field-error.tsx +28 -0
  306. package/src/fields/field-password.tsx +72 -0
  307. package/src/fields/field-select.tsx +67 -0
  308. package/src/fields/field-text.tsx +66 -0
  309. package/src/fields/fields.tsx +31 -0
  310. package/src/fields/index.ts +10 -0
  311. package/src/forms/autocomplete/autocomplete-context.ts +25 -0
  312. package/src/forms/autocomplete/autocomplete-dropdown.tsx +55 -0
  313. package/src/forms/autocomplete/autocomplete-highlight.ts +32 -0
  314. package/src/forms/autocomplete/autocomplete.tsx +279 -0
  315. package/src/forms/checkbox/checkbox-icon.tsx +43 -0
  316. package/src/forms/checkbox/checkbox.tsx +66 -0
  317. package/src/forms/custom-select/custom-select-context.ts +22 -0
  318. package/src/forms/custom-select/custom-select-divider.tsx +28 -0
  319. package/src/forms/custom-select/custom-select-dropdown.tsx +55 -0
  320. package/src/forms/custom-select/custom-select-icon-clear.tsx +23 -0
  321. package/src/forms/custom-select/custom-select-icon.tsx +25 -0
  322. package/src/forms/custom-select/custom-select-input.tsx +56 -0
  323. package/src/forms/custom-select/custom-select-label.tsx +39 -0
  324. package/src/forms/custom-select/custom-select-multiple-value.tsx +59 -0
  325. package/src/forms/custom-select/custom-select-option.tsx +126 -0
  326. package/src/forms/custom-select/custom-select.tsx +313 -0
  327. package/src/forms/field/field.tsx +34 -0
  328. package/src/forms/form/form.tsx +30 -0
  329. package/src/forms/form-error/form-error.tsx +32 -0
  330. package/src/forms/form-tester/form-tester.tsx +38 -0
  331. package/src/forms/index.ts +19 -0
  332. package/src/forms/input/input.tsx +123 -0
  333. package/src/forms/input-group/input-group.tsx +74 -0
  334. package/src/forms/label/label.tsx +31 -0
  335. package/src/forms/radio/radio-group.tsx +78 -0
  336. package/src/forms/radio/radio-icon.tsx +43 -0
  337. package/src/forms/radio/radio.tsx +72 -0
  338. package/src/forms/radio-card/radio-card-group.tsx +70 -0
  339. package/src/forms/radio-card/radio-card.tsx +233 -0
  340. package/src/forms/radio-color/radio-color-group.tsx +66 -0
  341. package/src/forms/radio-color/radio-color.tsx +100 -0
  342. package/src/forms/radio-option/radio-option-group.tsx +66 -0
  343. package/src/forms/radio-option/radio-option.tsx +131 -0
  344. package/src/forms/rating/rating-icon.tsx +30 -0
  345. package/src/forms/rating/rating.tsx +126 -0
  346. package/src/forms/select/select.tsx +90 -0
  347. package/src/forms/textarea/textarea.tsx +71 -0
  348. package/src/hoc/index.ts +2 -0
  349. package/src/hoc/with-page-transition/with-page-transition.tsx +73 -0
  350. package/src/index.ts +12 -0
  351. package/src/lazy/carousel-1/carousel-1.tsx +91 -0
  352. package/src/lazy/download-1/download-1.tsx +45 -0
  353. package/src/lazy/index.ts +2 -0
  354. package/src/lazy/lazy-loader/lazy-loader-client.tsx +48 -0
  355. package/src/lazy/lazy-loader/lazy-loader.tsx +27 -0
  356. package/src/lazy/lazy.ts +28 -0
  357. package/src/lazy/media-full-1/media-full-1.tsx +26 -0
  358. package/src/lazy/media-full-2/media-full-2.tsx +31 -0
  359. package/src/lazy/media-media-1/media-media-1.tsx +37 -0
  360. package/src/lazy/not-found/not-found.tsx +31 -0
  361. package/src/lazy/related-1/related-1-card.tsx +59 -0
  362. package/src/lazy/related-1/related-1.tsx +44 -0
  363. package/src/lazy/sizes-colors-1/sizes-colors-1.tsx +54 -0
  364. package/src/lazy/text-1/text-1.tsx +34 -0
  365. package/src/lazy/text-aside-1/text-aside-1.tsx +52 -0
  366. package/src/lazy/text-media-1/text-media-1.tsx +45 -0
  367. package/src/lazy/text-text-1/text-text-1.tsx +32 -0
  368. package/src/sections/auth/auth-change-password.tsx +90 -0
  369. package/src/sections/auth/auth-drawer.tsx +22 -0
  370. package/src/sections/auth/auth-forgot-success.tsx +25 -0
  371. package/src/sections/auth/auth-forgot.tsx +98 -0
  372. package/src/sections/auth/auth-login.tsx +114 -0
  373. package/src/sections/auth/auth-register-success.tsx +25 -0
  374. package/src/sections/auth/auth-register.tsx +107 -0
  375. package/src/sections/auth/auth-update.tsx +91 -0
  376. package/src/sections/auth/auth.tsx +46 -0
  377. package/src/sections/blog-more/blog-card.tsx +58 -0
  378. package/src/sections/blog-more/blog-more.tsx +81 -0
  379. package/src/sections/blog-proposition/blog-proposition.tsx +58 -0
  380. package/src/sections/cart-mini/cart-mini-item.tsx +58 -0
  381. package/src/sections/cart-mini/cart-mini.tsx +76 -0
  382. package/src/sections/categories-proposition/categories-proposition-card.tsx +34 -0
  383. package/src/sections/categories-proposition/categories-proposition.tsx +39 -0
  384. package/src/sections/category-hero/category-hero.tsx +47 -0
  385. package/src/sections/category-proposition/category-proposition.tsx +49 -0
  386. package/src/sections/checkout/checkout-basket-item.tsx +64 -0
  387. package/src/sections/checkout/checkout-basket.tsx +115 -0
  388. package/src/sections/checkout/checkout-delivery.tsx +121 -0
  389. package/src/sections/checkout/checkout-discount.tsx +61 -0
  390. package/src/sections/checkout/checkout-empty.tsx +28 -0
  391. package/src/sections/checkout/checkout-error.tsx +31 -0
  392. package/src/sections/checkout/checkout-forgot-success.tsx +41 -0
  393. package/src/sections/checkout/checkout-forgot.tsx +55 -0
  394. package/src/sections/checkout/checkout-info.tsx +142 -0
  395. package/src/sections/checkout/checkout-login.tsx +56 -0
  396. package/src/sections/checkout/checkout-payment.tsx +120 -0
  397. package/src/sections/checkout/checkout-register-success.tsx +41 -0
  398. package/src/sections/checkout/checkout-register.tsx +48 -0
  399. package/src/sections/checkout/checkout-review.tsx +243 -0
  400. package/src/sections/checkout/checkout-success.tsx +57 -0
  401. package/src/sections/checkout/checkout-user-info.tsx +204 -0
  402. package/src/sections/checkout/checkout-wizard.tsx +157 -0
  403. package/src/sections/colors/colors.tsx +39 -0
  404. package/src/sections/contact-card/contact-card.tsx +104 -0
  405. package/src/sections/contact-form/contact-form.tsx +107 -0
  406. package/src/sections/contact-hero/contact-hero.tsx +54 -0
  407. package/src/sections/footer/footer.tsx +98 -0
  408. package/src/sections/header/header-card.tsx +36 -0
  409. package/src/sections/header/header-submenu.tsx +117 -0
  410. package/src/sections/header/header.tsx +306 -0
  411. package/src/sections/hero/hero.tsx +41 -0
  412. package/src/sections/icons/icons.tsx +74 -0
  413. package/src/sections/index.ts +70 -0
  414. package/src/sections/magazine-related/magazine-related.tsx +88 -0
  415. package/src/sections/magazine-search/magazine-search-card.tsx +46 -0
  416. package/src/sections/magazine-search/magazine-search-filters-modal.tsx +22 -0
  417. package/src/sections/magazine-search/magazine-search-filters.tsx +48 -0
  418. package/src/sections/magazine-search/magazine-search-recap.tsx +55 -0
  419. package/src/sections/magazine-search/magazine-search.tsx +151 -0
  420. package/src/sections/markets-and-languages/markets-and-languages-drawer.tsx +58 -0
  421. package/src/sections/order/order-address.tsx +22 -0
  422. package/src/sections/order/order-item.tsx +55 -0
  423. package/src/sections/order/order-register.tsx +105 -0
  424. package/src/sections/order/order-summary-item.tsx +38 -0
  425. package/src/sections/order/order-summary.tsx +72 -0
  426. package/src/sections/product-overview/product-overview-gallery.tsx +48 -0
  427. package/src/sections/product-overview/product-overview.tsx +112 -0
  428. package/src/sections/products-detail-download/products-detail-download.tsx +49 -0
  429. package/src/sections/products-detail-related/products-detail-related-card.tsx +59 -0
  430. package/src/sections/products-detail-related/products-detail-related.tsx +43 -0
  431. package/src/sections/products-detail-size-color/products-detail-size-color.tsx +57 -0
  432. package/src/sections/products-hero/products-hero-card.tsx +26 -0
  433. package/src/sections/products-hero/products-hero.tsx +54 -0
  434. package/src/sections/products-proposition/products-proposition-card.tsx +38 -0
  435. package/src/sections/products-proposition/products-proposition.tsx +27 -0
  436. package/src/sections/products-related/products-related-card.tsx +56 -0
  437. package/src/sections/products-related/products-related.tsx +30 -0
  438. package/src/sections/products-search/products-search-card.tsx +60 -0
  439. package/src/sections/products-search/products-search-filters-modal.tsx +22 -0
  440. package/src/sections/products-search/products-search-filters.tsx +92 -0
  441. package/src/sections/products-search/products-search-recap.tsx +55 -0
  442. package/src/sections/products-search/products-search.tsx +162 -0
  443. package/src/sections/proposition/proposition.tsx +32 -0
  444. package/src/sections/reserved_area/reserved_area.tsx +51 -0
  445. package/src/sections/reserved_area_menu/reserved_area_menu.tsx +67 -0
  446. package/src/sections/shop-category-hero/shop-category-hero.tsx +71 -0
  447. package/src/sections/shop-detail-related/shop-detail-related-card.tsx +59 -0
  448. package/src/sections/shop-detail-related/shop-detail-related.tsx +40 -0
  449. package/src/sections/shop-hero/shop-hero-card.tsx +26 -0
  450. package/src/sections/shop-hero/shop-hero.tsx +53 -0
  451. package/src/sections/shop-incentive/shop-incentive.tsx +46 -0
  452. package/src/sections/shop-items-proposition/shop-items-proposition-card.tsx +38 -0
  453. package/src/sections/shop-items-proposition/shop-items-proposition.tsx +28 -0
  454. package/src/sections/shop-search/shop-search-card.tsx +60 -0
  455. package/src/sections/shop-search/shop-search-filters-modal.tsx +22 -0
  456. package/src/sections/shop-search/shop-search-filters.tsx +53 -0
  457. package/src/sections/shop-search/shop-search-recap.tsx +45 -0
  458. package/src/sections/shop-search/shop-search.tsx +270 -0
  459. package/src/sections/split/split.tsx +60 -0
  460. package/src/sections/store-locator/store-locator-all.json +7433 -0
  461. package/src/sections/store-locator/store-locator-dots.tsx +1315 -0
  462. package/src/sections/store-locator/store-locator-features.json +26 -0
  463. package/src/sections/store-locator/store-locator-head._tsx +39 -0
  464. package/src/sections/store-locator/store-locator-search.tsx +417 -0
  465. package/src/sections/swiper-hero/swiper-hero.tsx +80 -0
  466. package/src/sections/test-framer-carousel/test-framer-carousel.tsx +56 -0
  467. package/src/sections/typography/typography.tsx +54 -0
  468. package/src/theme/global.style.ts +34 -0
  469. package/src/theme/global.vars.scss +134 -0
  470. package/src/theme/global.vars.ts +168 -0
  471. package/src/theme/index.ts +14 -0
  472. package/src/theme/mixins/_breakpoints.scss +101 -0
  473. package/src/theme/mixins/_fluid.scss +3 -0
  474. package/src/theme/mixins/_mixins.scss +3 -0
  475. package/src/theme/mixins/_scrollbar.scss +36 -0
  476. package/src/theme/styled.d.ts +13 -0
  477. package/src/theme/styles/_base.ts +15 -0
  478. package/src/theme/styles/_debug.ts +8 -0
  479. package/src/theme/styles/_print.ts +16 -0
  480. package/src/theme/styles/_reset.ts +234 -0
  481. package/src/theme/styles/_typography.ts +27 -0
  482. package/src/theme/styles/mixins/_scrollbar.ts +54 -0
  483. package/src/theme/theme.json +213 -0
  484. package/src/theme/types.ts +81 -0
  485. package/src/useVariants/useVariants.tsx +35 -0
  486. package/src/utils/index.ts +5 -0
@@ -0,0 +1,38 @@
1
+ import { IMedia } from '@websolutespa/bom-core';
2
+ import { useCurrency } from '@websolutespa/bom-mixer-hooks';
3
+ import Link from 'next/link';
4
+ import { Card, Flex, Media, Text } from '../../components';
5
+ import { UIStyledComponentProps } from '../../components/types';
6
+
7
+ type Props = {
8
+ item: ProductsPropositionItem
9
+ };
10
+
11
+ export type ProductsPropositionItem = {
12
+ id: number;
13
+ href: string;
14
+ title: string;
15
+ abstract: string;
16
+ price: number;
17
+ media: IMedia;
18
+ };
19
+
20
+ export type ProductsPropositionCardProps = UIStyledComponentProps<Props, 'a'>;
21
+
22
+ export const ProductsPropositionCard: React.FC<ProductsPropositionCardProps> = ({ item, ...props }: ProductsPropositionCardProps) => {
23
+ const currency = useCurrency();
24
+ return (
25
+ <Link href={item.href} passHref>
26
+ <Card as="a" {...props} hoverable>
27
+ <Media aspectRatio={4 / 3} aspectRatioMd={3 / 4} borderRadius="0.4rem" marginBottom="1rem" item={item.media} />
28
+ <Card.Content>
29
+ <Flex.Row justifyContent="space-between">
30
+ <Text variant="paragraph10" fontWeight="700">{item.title}</Text>
31
+ <Text variant="paragraph10" fontWeight="700">{currency(item.price)}</Text>
32
+ </Flex.Row>
33
+ <Text variant="paragraph10">{item.abstract}</Text>
34
+ </Card.Content>
35
+ </Card>
36
+ </Link>
37
+ );
38
+ };
@@ -0,0 +1,27 @@
1
+ import { Container, Grid, Section } from '../../components';
2
+ import { UIComponentProps } from '../../components/types';
3
+ import { ProductsPropositionCard, ProductsPropositionItem } from './products-proposition-card';
4
+
5
+ type Props = {
6
+ items: ProductsPropositionItem[],
7
+ };
8
+
9
+ export type ProductsPropositionProps = UIComponentProps<Props>;
10
+
11
+ export const ProductsProposition: React.FC<ProductsPropositionProps> = ({ items }: ProductsPropositionProps) => {
12
+ return (
13
+ <Section padding="3rem 0">
14
+ <Container>
15
+ {items && (
16
+ <Grid.Row columnGap="1rem" rowGap="2rem">
17
+ {items.map((item, i) => (
18
+ <Grid sm={6} md={4} key={i}>
19
+ <ProductsPropositionCard item={item}></ProductsPropositionCard>
20
+ </Grid>
21
+ ))}
22
+ </Grid.Row>
23
+ )}
24
+ </Container>
25
+ </Section>
26
+ );
27
+ };
@@ -0,0 +1,56 @@
1
+ import { IMedia } from '@websolutespa/bom-core';
2
+ import { useCart, useCurrency, useDrawer } from '@websolutespa/bom-mixer-hooks';
3
+ import Link from 'next/link';
4
+ import { Button, Card, Flex, Media, MediaImage, Text } from '../../components';
5
+ import { UIStyledComponentProps } from '../../components/types';
6
+
7
+ type Props = {
8
+ item: ProductsRelatedItem
9
+ };
10
+
11
+ export type ProductsRelatedItem = {
12
+ id: number;
13
+ schema: string;
14
+ href: string;
15
+ title: string;
16
+ abstract: string;
17
+ price: number;
18
+ media: IMedia;
19
+ };
20
+
21
+ export type ProductsRelatedCardProps = UIStyledComponentProps<Props>;
22
+
23
+ export const ProductsRelatedCard: React.FC<ProductsRelatedCardProps> = ({ item, ...props }: ProductsRelatedCardProps) => {
24
+ const currency = useCurrency();
25
+ const [drawer, openDrawer, closeDrawer] = useDrawer();
26
+ const { add } = useCart((state) => state.actions);
27
+ // const find = useCart((state) => state.find);
28
+ // const cartItem = find(item);
29
+ // const isAddedToCart = cartItem != null;
30
+ // const [qty, setQty] = useState(isAddedToCart ? cartItem.qty : 1);
31
+ function onAddToCart() {
32
+ add(item, 1);
33
+ openDrawer('cart');
34
+ }
35
+ return (
36
+ <Card {...props} hoverable>
37
+ <Link href={item.href} passHref>
38
+ <Media as="a" aspectRatio={1} borderRadius="0.4rem" marginBottom="1rem" overlay>
39
+ <MediaImage {...item.media} />
40
+ <Media.Info padding="1rem" justifyContent="flex-end" alignItems="flex-end">
41
+ <Text variant="paragraph10">{currency(item.price)}</Text>
42
+ </Media.Info>
43
+ </Media>
44
+ </Link>
45
+ <Card.Content>
46
+ <Flex.Row justifyContent="space-between">
47
+ <Link href={item.href} passHref>
48
+ <Text variant="paragraph20" fontWeight="700" as="a">{item.title}</Text>
49
+ </Link>
50
+ </Flex.Row>
51
+ <Text variant="paragraph20" marginBottom="2rem">{item.abstract}</Text>
52
+ <Button variant="secondary" width="100%" justifyContent="center" onClick={onAddToCart}>Add to bag</Button>
53
+ </Card.Content>
54
+ </Card>
55
+ );
56
+ };
@@ -0,0 +1,30 @@
1
+ import { Container, Flex, Grid, Section, Text } from '../../components';
2
+ import { UIComponentProps } from '../../components/types';
3
+ import { ProductsRelatedCard, ProductsRelatedItem } from './products-related-card';
4
+
5
+ type Props = {
6
+ items: ProductsRelatedItem[],
7
+ };
8
+
9
+ export type ProductsRelatedProps = UIComponentProps<Props>;
10
+
11
+ export const ProductsRelated: React.FC<ProductsRelatedProps> = ({ items }: ProductsRelatedProps) => {
12
+ return (
13
+ <Section padding="3rem 0">
14
+ <Container>
15
+ <Flex.Row justifyContent="space-between" marginBottom="1rem">
16
+ <Text variant="heading40" fontWeight="700">Customers also bought</Text>
17
+ </Flex.Row>
18
+ {items && (
19
+ <Grid.Row columnGap="1rem" rowGap="1rem">
20
+ {items.map((item, i) => (
21
+ <Grid sm={6} md={3} key={i}>
22
+ <ProductsRelatedCard item={item}></ProductsRelatedCard>
23
+ </Grid>
24
+ ))}
25
+ </Grid.Row>
26
+ )}
27
+ </Container>
28
+ </Section>
29
+ );
30
+ };
@@ -0,0 +1,60 @@
1
+ import { IEquatable, IMedia } from '@websolutespa/bom-core';
2
+ import Link from 'next/link';
3
+ import styled from 'styled-components';
4
+ import { Button, Card, Flex, Media, Text } from '../../components';
5
+ import { UIStyledComponentProps } from '../../components/types';
6
+
7
+ type Props = {
8
+ item: ProductSearchItem
9
+ };
10
+
11
+ export type ProductSearchItem = {
12
+ href: string;
13
+ title: string;
14
+ medias: IMedia[];
15
+ designer?: IEquatable;
16
+ colors: IEquatable[];
17
+ };
18
+
19
+ export type ProductsSearchCardProps = UIStyledComponentProps<Props>;
20
+
21
+ const StyledCard = styled(Card)`
22
+ .media{
23
+ .image {
24
+ position: absolute;
25
+ top: 0;
26
+ right: 0;
27
+ bottom: 0;
28
+ left: 0;
29
+ object-fit: cover;
30
+
31
+ &:not(:first-child) {
32
+ opacity: 0!important;
33
+ }
34
+ }
35
+ }
36
+ &:hover {
37
+ .media {
38
+ .image:nth-child(2) {
39
+ opacity: 1!important;
40
+ }
41
+ }
42
+ }
43
+ `;
44
+
45
+ export const ProductsSearchCard: React.FC<ProductsSearchCardProps> = ({ item, ...props }: ProductsSearchCardProps) => {
46
+ return (
47
+ <StyledCard {...props} hoverable>
48
+ <Link href={item.href} passHref>
49
+ <Media as="a" aspectRatio={1} borderRadius="0.4rem" marginBottom="0.5rem" item={item.medias} />
50
+ </Link>
51
+ <Card.Content>
52
+ <Flex.Row justifyContent="space-between">
53
+ <Button variant="nav">
54
+ <Text variant="paragraph10" dangerouslySetInnerHTML={{ __html: item.title || 'untitled' }}></Text>
55
+ </Button>
56
+ </Flex.Row>
57
+ </Card.Content>
58
+ </StyledCard>
59
+ );
60
+ };
@@ -0,0 +1,22 @@
1
+ import { ReactNode } from 'react';
2
+ import { Drawer, Text } from '../../components';
3
+ import { ProductsSearchFilters } from './products-search-filters';
4
+
5
+ export type ProductsSearchFiltersModalProps = {
6
+ children?: ReactNode;
7
+ visible: boolean;
8
+ onClose: () => void;
9
+ };
10
+
11
+ export const ProductsSearchFiltersModal: React.FC<ProductsSearchFiltersModalProps> = ({ visible, onClose }: ProductsSearchFiltersModalProps) => {
12
+ return (
13
+ <Drawer visible={visible} onClose={onClose} placement="right">
14
+ <Drawer.Title>
15
+ <Text variant="paragraph10" fontWeight="700">Filters</Text>
16
+ </Drawer.Title>
17
+ <Drawer.Content width="100vw" maxWidth="400px">
18
+ <ProductsSearchFilters />
19
+ </Drawer.Content>
20
+ </Drawer>
21
+ );
22
+ };
@@ -0,0 +1,92 @@
1
+ import { Box, Flex, Text } from '../../components';
2
+ import { UIStyledComponentProps } from '../../components/types';
3
+ import { CustomSelect } from '../../forms';
4
+
5
+ type Props = {
6
+ };
7
+
8
+ export type ProductsSearchFiltersProps = UIStyledComponentProps<Props>;
9
+
10
+ export const ProductsSearchFilters: React.FC<ProductsSearchFiltersProps> = ({ ...props }: ProductsSearchFiltersProps) => {
11
+ return (
12
+ <Box {...props}>
13
+ <Flex.Row gap="1rem">
14
+ <Text variant="paragraph40" fontWeight="700" textTransform="uppercase">Filter By</Text>
15
+ <CustomSelect name="color" id="color" placeholder="Color" minWidth="200px">
16
+ <CustomSelect.Label>Color</CustomSelect.Label>
17
+ <CustomSelect.Option value="white">Bianco</CustomSelect.Option>
18
+ <CustomSelect.Option value="gray">Grigio</CustomSelect.Option>
19
+ <CustomSelect.Option value="brown">Marrone</CustomSelect.Option>
20
+ <CustomSelect.Option value="green">Verde</CustomSelect.Option>
21
+ <CustomSelect.Option value="red">Rosso</CustomSelect.Option>
22
+ <CustomSelect.Option value="blue">Blu</CustomSelect.Option>
23
+ <CustomSelect.Option value="black">Nero</CustomSelect.Option>
24
+ <CustomSelect.Option value="earth">Terre</CustomSelect.Option>
25
+ <CustomSelect.Option value="yellow">Giallo</CustomSelect.Option>
26
+ <CustomSelect.Option value="violet">Viola</CustomSelect.Option>
27
+ <CustomSelect.Option value="azure">Azzurro</CustomSelect.Option>
28
+ <CustomSelect.Option value="pink">rosa</CustomSelect.Option>
29
+ </CustomSelect>
30
+ <CustomSelect name="designer" id="designer" placeholder="Designer" minWidth="200px">
31
+ <CustomSelect.Label>Designer</CustomSelect.Label>
32
+ <CustomSelect.Option value="1">Patricia Urquiola</CustomSelect.Option>
33
+ <CustomSelect.Option value="2">Hella Jongerius</CustomSelect.Option>
34
+ <CustomSelect.Option value="3">Edward Barber &amp; Jay Osgerby</CustomSelect.Option>
35
+ <CustomSelect.Option value="4">Inga Sempé</CustomSelect.Option>
36
+ <CustomSelect.Option value="5">Konstantin Grcic</CustomSelect.Option>
37
+ <CustomSelect.Option value="6">Tokujin Yoshioka</CustomSelect.Option>
38
+ <CustomSelect.Option value="7">Ronan &amp; Erwan Bouroullec</CustomSelect.Option>
39
+ <CustomSelect.Option value="8">Raw Edges</CustomSelect.Option>
40
+ <CustomSelect.Option value="9">Nathalie Du Pasquier</CustomSelect.Option>
41
+ <CustomSelect.Option value="10">Laboratorio Avallone</CustomSelect.Option>
42
+ <CustomSelect.Option value="11">OEO Studio</CustomSelect.Option>
43
+ <CustomSelect.Option value="12">Vincent Van Duysen</CustomSelect.Option>
44
+ </CustomSelect>
45
+ </Flex.Row>
46
+
47
+
48
+ {/*
49
+ <Box {...props}>
50
+ <Nav.Col marginBottom="2rem" fontSize="0.9rem">
51
+ <Button variant="nav" as="a">Totes</Button>
52
+ <Button variant="nav" as="a">Backpacks</Button>
53
+ <Button variant="nav" as="a">Travel Bags</Button>
54
+ <Button variant="nav" as="a">Hip Bags</Button>
55
+ <Button variant="nav" as="a">Laptop Sleeves</Button>
56
+ </Nav.Col>
57
+ <Accordion.Group>
58
+ <Accordion title="Color">
59
+ <Box padding="0 0.15rem">
60
+ <Label><Checkbox value='white' /> White</Label>
61
+ <Label><Checkbox value='beige' /> Beige</Label>
62
+ <Label><Checkbox value='blue' /> Blue</Label>
63
+ <Label><Checkbox value='brown' /> Brown</Label>
64
+ <Label><Checkbox value='green' /> Green</Label>
65
+ <Label><Checkbox value='purple' /> Purple</Label>
66
+ </Box>
67
+ </Accordion>
68
+ <Accordion title="Category">
69
+ <Box padding="0 0.15rem">
70
+ <Label><Checkbox value='white' /> New Arrivals</Label>
71
+ <Label><Checkbox value='white' /> Sale</Label>
72
+ <Label><Checkbox value='white' /> Travel</Label>
73
+ <Label><Checkbox value='white' /> Organization</Label>
74
+ <Label><Checkbox value='white' /> Accessories</Label>
75
+ </Box>
76
+ </Accordion>
77
+ <Accordion title="Size">
78
+ <Box padding="0 0.15rem">
79
+ <Label><Checkbox value='white' /> 2L</Label>
80
+ <Label><Checkbox value='white' /> 6L</Label>
81
+ <Label><Checkbox value='white' /> 12L</Label>
82
+ <Label><Checkbox value='white' /> 18L</Label>
83
+ <Label><Checkbox value='white' /> 20L</Label>
84
+ <Label><Checkbox value='white' /> 40L</Label>
85
+ </Box>
86
+ </Accordion>
87
+ </Accordion.Group>
88
+ </Box>
89
+ */}
90
+ </Box>
91
+ );
92
+ };
@@ -0,0 +1,55 @@
1
+
2
+ import { IEquatable } from '@websolutespa/bom-core';
3
+ import { Filter, IFilterOption } from '@websolutespa/bom-mixer-hooks';
4
+ import { IconXCircle } from '@websolutespa/bom-mixer-icons';
5
+ import { Box, Button, Container, Flex, Text } from '../../components';
6
+ import { ProductSearchItem } from './products-search-card';
7
+
8
+ export function ProductsSearchRecap({ filters, onChange }: { filters: Filter<ProductSearchItem>[], onChange: (filter: Filter<ProductSearchItem>, values: IEquatable[]) => void }) {
9
+
10
+ const selectedFilters = filters.filter(x => x.hasAny());
11
+
12
+ if (!selectedFilters.length) {
13
+ return null;
14
+ }
15
+
16
+ const onRemove = (filter: Filter<ProductSearchItem>, option: IFilterOption) => {
17
+ const values = [...filter.values];
18
+ const index = values.indexOf(option.id);
19
+ if (index !== -1) {
20
+ values.splice(index, 1);
21
+ // console.log('onRemove', filter.id, option.id, values);
22
+ onChange(filter, values);
23
+ }
24
+ };
25
+
26
+ return (
27
+ <Box padding="1rem 0" borderBottom="2px solid var(--color-neutral-200)">
28
+ <Container>
29
+ <Flex.Row gap="1rem" flexWrap="wrap">
30
+ {selectedFilters.map((filter, i) => (
31
+ <Flex.Row key={filter.id} gap="1rem">
32
+ <Text variant="paragraph40" fontWeight="700" textTransform="uppercase" paddingRight="10px">{filter.title}</Text>
33
+ <Flex.Row gap="0.5rem">
34
+ {filter.options && filter.options.filter(x => filter.has(x)).map((option) => (
35
+ <Button key={option.id} variant="secondary" size="sm" onClick={() => onRemove(filter, option)}>
36
+ <IconXCircle />
37
+ <span>{option.title}</span>
38
+ </Button>
39
+ ))}
40
+ </Flex.Row>
41
+
42
+ {false && filter.options && filter.options.filter(x => filter.has(x)).map((option) => (
43
+ <Button key={option.id} onClick={() => onRemove(filter, option)}>
44
+ <IconXCircle />
45
+ <span>{option.title}</span>
46
+ </Button>
47
+ ))}
48
+
49
+ </Flex.Row>
50
+ ))}
51
+ </Flex.Row>
52
+ </Container>
53
+ </Box>
54
+ );
55
+ }
@@ -0,0 +1,162 @@
1
+ import { getClassNames, IEquatable } from '@websolutespa/bom-core';
2
+ import { Filter, filtersToParams, useDrawer, useFilters, useInfiniteLoader, useSearchParamsEncoded } from '@websolutespa/bom-mixer-hooks';
3
+ import { IconChevronDown, IconFilter, IconGrid, IconSquare } from '@websolutespa/bom-mixer-icons';
4
+ import { IFeatureType } from '@websolutespa/bom-mixer-models';
5
+ import { useCallback, useState } from 'react';
6
+ import { Box, Button, Container, Flex, Grid, InfiniteLoader, Nav, Popover, Section, Text } from '../../components';
7
+ import { UIStyledComponentProps } from '../../components/types';
8
+ import { CustomSelect } from '../../forms';
9
+ import { ProductSearchItem, ProductsSearchCard } from './products-search-card';
10
+ import { ProductsSearchFilters } from './products-search-filters';
11
+ import { ProductsSearchFiltersModal } from './products-search-filters-modal';
12
+ import { ProductsSearchRecap } from './products-search-recap';
13
+
14
+ const SortMenu = () => (
15
+ <Nav.Col minWidth="150px">
16
+ <Button variant="nav" as="a">Most Popular</Button>
17
+ <Button variant="nav" as="a">Best Rating</Button>
18
+ <Button variant="nav" as="a">Newest</Button>
19
+ <Button variant="nav" as="a">Price: Low to High</Button>
20
+ <Button variant="nav" as="a">Price: High to Low</Button>
21
+ </Nav.Col>
22
+ );
23
+
24
+ // this is the actual filtering function of the products
25
+ function filterProductItem(key: string, item: ProductSearchItem, value: IEquatable) {
26
+ switch (key) {
27
+ case 'color':
28
+ return item.colors.includes(value);
29
+ case 'designer':
30
+ return item.designer === value;
31
+ case 'title':
32
+ return item.title.toLowerCase().includes(value.toString().toLowerCase());
33
+ default:
34
+ return false;
35
+ }
36
+ }
37
+
38
+ type Props = {
39
+ items: ProductSearchItem[];
40
+ featureTypes: IFeatureType[];
41
+ };
42
+
43
+ export type ProductsSearchProps = UIStyledComponentProps<Props>;
44
+
45
+ export const ProductsSearch: React.FC<ProductsSearchProps> = ({ items, featureTypes, ...props }: ProductsSearchProps) => {
46
+
47
+ // deserialize queryString encoded params
48
+ const { params, replaceParamsSilently } = useSearchParamsEncoded();
49
+
50
+ // using item filter callback from service
51
+ const filterItem = useCallback(filterProductItem, []);
52
+
53
+ // initialize filters with items, featureTypes and queryString params
54
+ const { filteredItems, filters, setFilter } = useFilters<ProductSearchItem>(items, featureTypes, filterItem, params?.filter);
55
+
56
+ // fires when user make a change on filters
57
+ const onFilterChange = (filter: Filter<ProductSearchItem>, values?: IEquatable[]) => {
58
+ // console.log('ProductSearchCSR.onFilterChange', filter, values);
59
+ setFilter(filter, values);
60
+ // pagination.goToPage(1);
61
+ // serializing querystring filter
62
+ const filterParams = filtersToParams(filters);
63
+ replaceParamsSilently({ filter: filterParams, pagination: { page: 1 } });
64
+ };
65
+
66
+ const onCustomSelectChange = (value: string | string[], filter: Filter<ProductSearchItem>) => {
67
+ const ids = Array.isArray(value) ? value : [value];
68
+ const option = filter.options?.find(x => {
69
+ return x.id === parseInt(ids[0]);
70
+ });
71
+ if (option) {
72
+ filter.toggle(option);
73
+ onFilterChange(filter, filter.values);
74
+ }
75
+ console.log('onCustomSelectChange', filter, option, value);
76
+ };
77
+
78
+ // visible results paged by the infinite scroll or button loader
79
+ const [visibleItems, onMore, hasMore] = useInfiniteLoader(filteredItems);
80
+
81
+ const [drawer, openDrawer, closeDrawer] = useDrawer();
82
+ const [large, setLarge] = useState<boolean>(false);
83
+
84
+ return (
85
+ <>
86
+ <Box padding="1rem 0" borderBottom="2px solid var(--color-neutral-200)">
87
+ <Container>
88
+ <Flex.Row gap="2rem" justifyContent="space-between" alignItems="center">
89
+
90
+ {false &&
91
+ <ProductsSearchFilters display="none" displaySm="flex" />
92
+ }
93
+
94
+ <Flex.Row display="none" displaySm="flex" gap="1rem" flex="1">
95
+ <Text variant="paragraph40" fontWeight="700" textTransform="uppercase">Filter By</Text>
96
+ {filters.map((filter, f) => (
97
+ <CustomSelect key={f} name={filter.id} id={filter.id} value={''} placeholder={filter.title} onChange={(event) => onCustomSelectChange(event, filter)}
98
+ flex="1" minWidth="200px">
99
+ <CustomSelect.Label>{filter.title}</CustomSelect.Label>
100
+ {filter.options.map((option, o) => (
101
+ <CustomSelect.Option key={o} value={option.id.toString()}>{option.title}</CustomSelect.Option>
102
+ ))}
103
+ </CustomSelect>
104
+ ))}
105
+ </Flex.Row>
106
+
107
+ <Flex.Row gap="2rem">
108
+
109
+ {false &&
110
+ <Popover content={SortMenu}>
111
+ <Button variant="nav">
112
+ <Text variant="paragraph40" fontWeight="700" textTransform="uppercase">Sort</Text>
113
+ <IconChevronDown />
114
+ </Button>
115
+ </Popover>
116
+ }
117
+
118
+ <Flex.Row gap="1rem">
119
+ <Text variant="paragraph40" fontWeight="700" textTransform="uppercase">View</Text>
120
+ <Button variant="toggle" className={getClassNames({ active: !large })} onClick={() => setLarge(false)}><IconGrid /></Button>
121
+ <Button variant="toggle" className={getClassNames({ active: large })} onClick={() => setLarge(true)}><IconSquare /></Button>
122
+ </Flex.Row>
123
+
124
+ </Flex.Row>
125
+ <Button variant="nav" display="block" displaySm="none" onClick={() => openDrawer('filters')}><IconFilter /></Button>
126
+
127
+ <ProductsSearchFiltersModal visible={drawer == 'filters'} onClose={closeDrawer} />
128
+
129
+ </Flex.Row>
130
+ </Container>
131
+ </Box>
132
+ <ProductsSearchRecap filters={filters} onChange={onFilterChange} />
133
+ <Section padding="3rem 0" id="serp">
134
+ <Container>
135
+ <Grid.Row columnGap="1rem" rowGap="2.5rem">
136
+ {visibleItems.map((item, i) => (
137
+ <Grid key={i} sm={large ? 12 : 6} md={large ? 6 : 4} lg={large ? 4 : 3}>
138
+ <ProductsSearchCard item={item}></ProductsSearchCard>
139
+ </Grid>
140
+ ))}
141
+ {true && hasMore &&
142
+ <Grid alignItems="center">
143
+ <Button variant="outline" onClick={onMore}>View More</Button>
144
+ </Grid>
145
+ }
146
+ {false && hasMore &&
147
+ <Grid>
148
+ <InfiniteLoader onMore={onMore}>more</InfiniteLoader>
149
+ </Grid>
150
+ }
151
+ </Grid.Row>
152
+ {/*
153
+ <Pagination count={5} margin="2rem 0">
154
+ <Pagination.Previous><ChevronLeft /></Pagination.Previous>
155
+ <Pagination.Next><ChevronRight /></Pagination.Next>
156
+ </Pagination>
157
+ */}
158
+ </Container>
159
+ </Section>
160
+ </>
161
+ );
162
+ };
@@ -0,0 +1,32 @@
1
+ import { useDrawer, useModal } from '@websolutespa/bom-mixer-hooks';
2
+ import Link from 'next/link';
3
+ import { Button, Container, Flex, Section, Text } from '../../components';
4
+ import { UIComponentProps } from '../../components/types';
5
+
6
+ type Props = {
7
+ };
8
+
9
+ export type PropositionProps = UIComponentProps<Props>;
10
+
11
+ export const Proposition: React.FC<PropositionProps> = (props: PropositionProps) => {
12
+ const [modal, openModal, closeModal] = useModal();
13
+ const [drawer, openDrawer, closeDrawer] = useDrawer();
14
+ return (
15
+ <>
16
+ <Section padding="7rem 0" background="var(--color-primary-100)" color="var(--color-primary-900)">
17
+ <Container>
18
+ <Flex.Col justifyContent="center" alignItems="center">
19
+ <Text variant="display40" fontWeight="700" marginBottom="2rem">Prow scuttle parrel provost Sail.</Text>
20
+ <Link href="https://design-system-ruddy.vercel.app" passHref>
21
+ <Button as="a" variant="primary" marginBottom="1rem" target="_blank">Read documentation</Button>
22
+ </Link>
23
+ <Link href="https://github.com/actarian/design-system" passHref>
24
+ <Button as="a" variant="link" target="_blank">view on GitHub</Button>
25
+ </Link>
26
+ <Button as="a" variant="link" onClick={() => openModal('foreign-market')}>open modal</Button>
27
+ </Flex.Col>
28
+ </Container>
29
+ </Section>
30
+ </>
31
+ );
32
+ };
@@ -0,0 +1,51 @@
1
+ import { ILayout, IPage } from '@websolutespa/bom-core';
2
+ import { Breadcrumb, Container, Grid, Section } from '../../components';
3
+ import { UIComponentProps } from '../../components/types';
4
+ import { ReservedAreaMenu } from '../reserved_area_menu/reserved_area_menu';
5
+
6
+ type Props = {
7
+ children?: React.ReactNode;
8
+ layout: ILayout;
9
+ page: IPage,
10
+ };
11
+
12
+ export type ReservedAreaProps = UIComponentProps<Props>;
13
+
14
+ export const ReservedArea: React.FC<ReservedAreaProps> = ({ children, layout, page }: ReservedAreaProps) => {
15
+
16
+ const menu = layout.topLevelRoutes.reserved_area?.items;
17
+
18
+ return (
19
+ <>
20
+ <Section className="print-none">
21
+ <Container>
22
+ <Breadcrumb.Group items={page.breadcrumb} />
23
+ </Container>
24
+ </Section>
25
+ <Section padding="0 0 3rem 0">
26
+ <Container minHeight="50vh">
27
+ <Grid.Row>
28
+ {/* Left menu sticky column */}
29
+ <Grid className="print-none" display="none" displaySm="block" sm={4} md={3}>
30
+ {menu && <ReservedAreaMenu items={menu} />}
31
+ </Grid>
32
+ {/* Right main content */}
33
+ <Grid sm={8} md={9}>
34
+ {children}
35
+ </Grid>
36
+ </Grid.Row>
37
+ {/* (
38
+ <Flex.Responsive gap="1rem" alignItemsSm="stretch">
39
+ <Box flexBasis="260px">
40
+ {menu && <ReservedAreaMenu items={menu} />}
41
+ </Box>
42
+ <Box flexGrow="1">
43
+ {children}
44
+ </Box>
45
+ </Flex.Responsive>
46
+ )*/}
47
+ </Container>
48
+ </Section>
49
+ </>
50
+ );
51
+ };