@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.
- package/CHANGELOG.md +12 -0
- package/dist/cjs/index.js +429 -328
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/components/container/container.js +2 -2
- package/dist/esm/components/container/container.js.map +1 -1
- package/dist/esm/components/flex/flex-flow.js +1 -1
- package/dist/esm/components/grid/grid-row.js.map +1 -1
- package/dist/esm/components/grid/grid.js +1 -1
- package/dist/esm/components/utils.js +74 -39
- package/dist/esm/components/utils.js.map +1 -1
- package/dist/esm/forms/form-tester/form-tester.js +2 -2
- package/dist/esm/forms/form-tester/form-tester.js.map +1 -1
- package/dist/esm/forms/radio-card/radio-card.js +2 -2
- package/dist/esm/forms/radio-card/radio-card.js.map +1 -1
- package/dist/esm/hoc/with-page-transition/with-page-transition.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/lazy/carousel-1/carousel-1.js +2 -2
- package/dist/esm/lazy/carousel-1/carousel-1.js.map +1 -1
- package/dist/esm/lazy/download-1/download-1.js +1 -1
- package/dist/esm/lazy/media-full-2/media-full-2.js +1 -1
- package/dist/esm/lazy/media-full-2/media-full-2.js.map +1 -1
- package/dist/esm/lazy/media-media-1/media-media-1.js +1 -1
- package/dist/esm/lazy/media-media-1/media-media-1.js.map +1 -1
- package/dist/esm/lazy/not-found/not-found.js +2 -2
- package/dist/esm/lazy/related-1/related-1-card.js +1 -1
- package/dist/esm/lazy/related-1/related-1.js +1 -1
- package/dist/esm/lazy/sizes-colors-1/sizes-colors-1.js +1 -1
- package/dist/esm/lazy/text-1/text-1.js +1 -1
- package/dist/esm/lazy/text-aside-1/text-aside-1.js +3 -3
- package/dist/esm/lazy/text-aside-1/text-aside-1.js.map +1 -1
- package/dist/esm/lazy/text-media-1/text-media-1.js +4 -4
- package/dist/esm/lazy/text-media-1/text-media-1.js.map +1 -1
- package/dist/esm/lazy/text-text-1/text-text-1.js +1 -1
- package/dist/esm/lazy/text-text-1/text-text-1.js.map +1 -1
- package/dist/esm/sections/auth/auth-forgot-success.js +3 -3
- package/dist/esm/sections/auth/auth-forgot-success.js.map +1 -1
- package/dist/esm/sections/auth/auth-forgot.js +1 -1
- package/dist/esm/sections/auth/auth-login.js +1 -1
- package/dist/esm/sections/auth/auth-register-success.js +3 -3
- package/dist/esm/sections/auth/auth-register-success.js.map +1 -1
- package/dist/esm/sections/auth/auth-register.js +2 -2
- package/dist/esm/sections/auth/auth-register.js.map +1 -1
- package/dist/esm/sections/blog-more/blog-card.js +4 -4
- package/dist/esm/sections/blog-more/blog-card.js.map +1 -1
- package/dist/esm/sections/blog-more/blog-more.js +1 -1
- package/dist/esm/sections/blog-proposition/blog-proposition.js +4 -4
- package/dist/esm/sections/blog-proposition/blog-proposition.js.map +1 -1
- package/dist/esm/sections/cart-mini/cart-mini-item.js +2 -2
- package/dist/esm/sections/cart-mini/cart-mini-item.js.map +1 -1
- package/dist/esm/sections/cart-mini/cart-mini.js +1 -1
- package/dist/esm/sections/cart-mini/cart-mini.js.map +1 -1
- package/dist/esm/sections/categories-proposition/categories-proposition-card.js +2 -2
- package/dist/esm/sections/categories-proposition/categories-proposition-card.js.map +1 -1
- package/dist/esm/sections/categories-proposition/categories-proposition.js +1 -1
- package/dist/esm/sections/category-hero/category-hero.js +4 -4
- package/dist/esm/sections/category-hero/category-hero.js.map +1 -1
- package/dist/esm/sections/category-proposition/category-proposition.js +2 -2
- package/dist/esm/sections/category-proposition/category-proposition.js.map +1 -1
- package/dist/esm/sections/checkout/checkout-basket-item.js +4 -4
- package/dist/esm/sections/checkout/checkout-basket-item.js.map +1 -1
- package/dist/esm/sections/checkout/checkout-basket.js +5 -5
- package/dist/esm/sections/checkout/checkout-basket.js.map +1 -1
- package/dist/esm/sections/checkout/checkout-delivery.js +2 -2
- package/dist/esm/sections/checkout/checkout-delivery.js.map +1 -1
- package/dist/esm/sections/checkout/checkout-empty.js +2 -2
- package/dist/esm/sections/checkout/checkout-empty.js.map +1 -1
- package/dist/esm/sections/checkout/checkout-error.js +4 -4
- package/dist/esm/sections/checkout/checkout-error.js.map +1 -1
- package/dist/esm/sections/checkout/checkout-info.js +6 -6
- package/dist/esm/sections/checkout/checkout-info.js.map +1 -1
- package/dist/esm/sections/checkout/checkout-payment.js +1 -1
- package/dist/esm/sections/checkout/checkout-review.js +9 -9
- package/dist/esm/sections/checkout/checkout-review.js.map +1 -1
- package/dist/esm/sections/checkout/checkout-success.js +3 -3
- package/dist/esm/sections/checkout/checkout-success.js.map +1 -1
- package/dist/esm/sections/checkout/checkout-user-info.js +2 -2
- package/dist/esm/sections/checkout/checkout-user-info.js.map +1 -1
- package/dist/esm/sections/colors/colors.js +6 -6
- package/dist/esm/sections/colors/colors.js.map +1 -1
- package/dist/esm/sections/contact-card/contact-card.js +2 -2
- package/dist/esm/sections/contact-card/contact-card.js.map +1 -1
- package/dist/esm/sections/contact-hero/contact-hero.js +3 -3
- package/dist/esm/sections/contact-hero/contact-hero.js.map +1 -1
- package/dist/esm/sections/footer/footer.js +7 -7
- package/dist/esm/sections/footer/footer.js.map +1 -1
- package/dist/esm/sections/header/header-card.js +1 -1
- package/dist/esm/sections/header/header.js +4 -4
- package/dist/esm/sections/hero/hero.js +2 -2
- package/dist/esm/sections/icons/icons.js +3 -3
- package/dist/esm/sections/icons/icons.js.map +1 -1
- package/dist/esm/sections/magazine-related/magazine-related.js +1 -1
- package/dist/esm/sections/magazine-search/magazine-search-card.js +3 -3
- package/dist/esm/sections/magazine-search/magazine-search-card.js.map +1 -1
- package/dist/esm/sections/magazine-search/magazine-search-filters-modal.js +1 -1
- package/dist/esm/sections/magazine-search/magazine-search-filters-modal.js.map +1 -1
- package/dist/esm/sections/magazine-search/magazine-search-filters.js +1 -1
- package/dist/esm/sections/magazine-search/magazine-search-filters.js.map +1 -1
- package/dist/esm/sections/magazine-search/magazine-search.js +1 -1
- package/dist/esm/sections/magazine-search/magazine-search.js.map +1 -1
- package/dist/esm/sections/markets-and-languages/markets-and-languages-drawer.js +1 -1
- package/dist/esm/sections/markets-and-languages/markets-and-languages-drawer.js.map +1 -1
- package/dist/esm/sections/order/order-address.js +1 -1
- package/dist/esm/sections/order/order-item.js +8 -8
- package/dist/esm/sections/order/order-item.js.map +1 -1
- package/dist/esm/sections/order/order-register.js +4 -4
- package/dist/esm/sections/order/order-register.js.map +1 -1
- package/dist/esm/sections/order/order-summary-item.js +2 -2
- package/dist/esm/sections/order/order-summary-item.js.map +1 -1
- package/dist/esm/sections/order/order-summary.js +1 -1
- package/dist/esm/sections/product-overview/product-overview.js +11 -11
- package/dist/esm/sections/product-overview/product-overview.js.map +1 -1
- package/dist/esm/sections/products-detail-download/products-detail-download.js +1 -1
- package/dist/esm/sections/products-detail-related/products-detail-related-card.js +1 -1
- package/dist/esm/sections/products-detail-related/products-detail-related.js +1 -1
- package/dist/esm/sections/products-detail-size-color/products-detail-size-color.js +1 -1
- package/dist/esm/sections/products-hero/products-hero-card.js +2 -2
- package/dist/esm/sections/products-hero/products-hero-card.js.map +1 -1
- package/dist/esm/sections/products-hero/products-hero.js +1 -1
- package/dist/esm/sections/products-hero/products-hero.js.map +1 -1
- package/dist/esm/sections/products-proposition/products-proposition-card.js +3 -3
- package/dist/esm/sections/products-proposition/products-proposition-card.js.map +1 -1
- package/dist/esm/sections/products-related/products-related-card.js +3 -3
- package/dist/esm/sections/products-related/products-related-card.js.map +1 -1
- package/dist/esm/sections/products-related/products-related.js +1 -1
- package/dist/esm/sections/products-search/products-search-card.js +1 -1
- package/dist/esm/sections/products-search/products-search-card.js.map +1 -1
- package/dist/esm/sections/products-search/products-search-filters-modal.js +1 -1
- package/dist/esm/sections/products-search/products-search-filters-modal.js.map +1 -1
- package/dist/esm/sections/products-search/products-search-filters.js +1 -1
- package/dist/esm/sections/products-search/products-search-filters.js.map +1 -1
- package/dist/esm/sections/products-search/products-search-recap.js +1 -1
- package/dist/esm/sections/products-search/products-search-recap.js.map +1 -1
- package/dist/esm/sections/products-search/products-search.js +2 -2
- package/dist/esm/sections/products-search/products-search.js.map +1 -1
- package/dist/esm/sections/proposition/proposition.js +1 -1
- package/dist/esm/sections/shop-category-hero/shop-category-hero.js +2 -2
- package/dist/esm/sections/shop-detail-related/shop-detail-related-card.js +1 -1
- package/dist/esm/sections/shop-detail-related/shop-detail-related-card.js.map +1 -1
- package/dist/esm/sections/shop-detail-related/shop-detail-related.js +1 -1
- package/dist/esm/sections/shop-hero/shop-hero-card.js +2 -2
- package/dist/esm/sections/shop-hero/shop-hero-card.js.map +1 -1
- package/dist/esm/sections/shop-hero/shop-hero.js +2 -2
- package/dist/esm/sections/shop-hero/shop-hero.js.map +1 -1
- package/dist/esm/sections/shop-incentive/shop-incentive.js +6 -6
- package/dist/esm/sections/shop-incentive/shop-incentive.js.map +1 -1
- package/dist/esm/sections/shop-items-proposition/shop-items-proposition-card.js +3 -3
- package/dist/esm/sections/shop-items-proposition/shop-items-proposition-card.js.map +1 -1
- package/dist/esm/sections/shop-search/shop-search-card.js +3 -3
- package/dist/esm/sections/shop-search/shop-search-card.js.map +1 -1
- package/dist/esm/sections/shop-search/shop-search-filters-modal.js +1 -1
- package/dist/esm/sections/shop-search/shop-search-filters-modal.js.map +1 -1
- package/dist/esm/sections/shop-search/shop-search-recap.js +1 -1
- package/dist/esm/sections/shop-search/shop-search-recap.js.map +1 -1
- package/dist/esm/sections/shop-search/shop-search.js +4 -4
- package/dist/esm/sections/shop-search/shop-search.js.map +1 -1
- package/dist/esm/sections/split/split.js +3 -3
- package/dist/esm/sections/split/split.js.map +1 -1
- package/dist/esm/sections/store-locator/store-locator-search.js +3 -3
- package/dist/esm/sections/store-locator/store-locator-search.js.map +1 -1
- package/dist/esm/sections/swiper-hero/swiper-hero.js +2 -2
- package/dist/esm/theme/global.vars.js +81 -42
- package/dist/esm/theme/global.vars.js.map +1 -1
- package/dist/esm/theme/theme.json.js +56 -35
- package/dist/esm/theme/theme.json.js.map +1 -1
- package/dist/types/components/breadcrumb/breadcrumb.d.ts +2 -2
- package/dist/types/components/button/button.d.ts +3 -3
- package/dist/types/components/button/button.d.ts.map +1 -1
- package/dist/types/components/button/button.variants.d.ts +32 -31
- package/dist/types/components/button/button.variants.d.ts.map +1 -1
- package/dist/types/components/container/container.d.ts +7 -8
- package/dist/types/components/container/container.d.ts.map +1 -1
- package/dist/types/components/css.d.ts +1 -1
- package/dist/types/components/grid/grid-row.d.ts +4 -2
- package/dist/types/components/grid/grid-row.d.ts.map +1 -1
- package/dist/types/components/utils.d.ts +12 -5
- package/dist/types/components/utils.d.ts.map +1 -1
- package/dist/types/forms/custom-select/custom-select.d.ts +1 -1
- package/dist/types/sections/colors/colors.d.ts.map +1 -1
- package/dist/types/theme/global.vars.d.ts.map +1 -1
- package/dist/types/theme/types.d.ts +19 -17
- package/dist/types/theme/types.d.ts.map +1 -1
- package/dist/types/useVariants/useVariants.d.ts +3 -14
- package/dist/types/useVariants/useVariants.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/__tests/example.test.ts +8 -0
- package/src/components/accordion/accordion-context.ts +14 -0
- package/src/components/accordion/accordion-group.tsx +82 -0
- package/src/components/accordion/accordion-icon.tsx +37 -0
- package/src/components/accordion/accordion.tsx +132 -0
- package/src/components/backdrop/backdrop.tsx +156 -0
- package/src/components/background/background.tsx +35 -0
- package/src/components/badge/badge.tsx +21 -0
- package/src/components/box/box.tsx +12 -0
- package/src/components/breadcrumb/breadcrumb-item.tsx +53 -0
- package/src/components/breadcrumb/breadcrumb-separator.tsx +33 -0
- package/src/components/breadcrumb/breadcrumb.group.tsx +27 -0
- package/src/components/breadcrumb/breadcrumb.tsx +77 -0
- package/src/components/breakpoint/breakpoint.tsx +46 -0
- package/src/components/button/__snapshots__/button.test.tsx.snap +61 -0
- package/src/components/button/button.test.enzyme.example +132 -0
- package/src/components/button/button.test.tsx +33 -0
- package/src/components/button/button.tsx +36 -0
- package/src/components/button/button.variants.ts +316 -0
- package/src/components/button-group/button-group.tsx +102 -0
- package/src/components/card/card-content.tsx +13 -0
- package/src/components/card/card-footer.tsx +18 -0
- package/src/components/card/card.tsx +144 -0
- package/src/components/carousel/carousel.tsx +62 -0
- package/src/components/carousel/slide.tsx +28 -0
- package/src/components/code/code.tsx +17 -0
- package/src/components/container/container.tsx +32 -0
- package/src/components/css.ts +292 -0
- package/src/components/divider/divider.tsx +54 -0
- package/src/components/drawer/drawer-wrapper.tsx +154 -0
- package/src/components/drawer/drawer.tsx +110 -0
- package/src/components/drawer/helper.ts +33 -0
- package/src/components/dropdown/dropdown-layout.ts +94 -0
- package/src/components/dropdown/dropdown.tsx +132 -0
- package/src/components/ellipsis/ellipsis.tsx +18 -0
- package/src/components/expand/expand.tsx +97 -0
- package/src/components/flex/flex-col.tsx +16 -0
- package/src/components/flex/flex-flow.tsx +165 -0
- package/src/components/flex/flex-responsive.tsx +28 -0
- package/src/components/flex/flex-row.tsx +18 -0
- package/src/components/flex/flex.tsx +29 -0
- package/src/components/google-map/google-map-context.ts +15 -0
- package/src/components/google-map/google-map-hooks._ts +28 -0
- package/src/components/google-map/google-map-info-window.tsx +68 -0
- package/src/components/google-map/google-map-loader.tsx +67 -0
- package/src/components/google-map/google-map-marker-clusterer-plus.tsx +104 -0
- package/src/components/google-map/google-map-marker-clusterer.tsx +126 -0
- package/src/components/google-map/google-map-marker.tsx +48 -0
- package/src/components/google-map/google-map-skeleton.tsx +6 -0
- package/src/components/google-map/google-map.service.ts +236 -0
- package/src/components/google-map/google-map.style.ts +80 -0
- package/src/components/google-map/google-map.tsx +136 -0
- package/src/components/google-map/types.tsx +47 -0
- package/src/components/google-map/useGoogleMaps._ts +37 -0
- package/src/components/grid/grid-row.tsx +19 -0
- package/src/components/grid/grid.tsx +55 -0
- package/src/components/highlight/highlight.tsx +79 -0
- package/src/components/index.ts +50 -0
- package/src/components/infinite-loader/infinite-loader.tsx +59 -0
- package/src/components/layout/layout.tsx +22 -0
- package/src/components/link/link-icon.tsx +25 -0
- package/src/components/link/link.tsx +63 -0
- package/src/components/list/list.tsx +24 -0
- package/src/components/loading/loading.tsx +51 -0
- package/src/components/media/media-image-next.tsx +43 -0
- package/src/components/media/media-image.tsx +110 -0
- package/src/components/media/media.tsx +195 -0
- package/src/components/media-gallery/media-gallery-context.tsx +14 -0
- package/src/components/media-gallery/media-gallery-navigation.tsx +68 -0
- package/src/components/media-gallery/media-gallery.tsx +163 -0
- package/src/components/meta/meta.tsx +33 -0
- package/src/components/modal/modal-button.tsx +103 -0
- package/src/components/modal/modal-close.tsx +67 -0
- package/src/components/modal/modal-content.tsx +46 -0
- package/src/components/modal/modal-context.ts +11 -0
- package/src/components/modal/modal-footer.tsx +40 -0
- package/src/components/modal/modal-subtitle.tsx +36 -0
- package/src/components/modal/modal-title.tsx +36 -0
- package/src/components/modal/modal-wrapper.tsx +119 -0
- package/src/components/modal/modal.tsx +138 -0
- package/src/components/nav/nav.tsx +71 -0
- package/src/components/nav-link/nav-link.tsx +32 -0
- package/src/components/page/page.tsx +13 -0
- package/src/components/page-nav/page-nav.tsx +120 -0
- package/src/components/pagination/pagination-context.ts +18 -0
- package/src/components/pagination/pagination-ellipsis.tsx +61 -0
- package/src/components/pagination/pagination-item.tsx +92 -0
- package/src/components/pagination/pagination-next.tsx +16 -0
- package/src/components/pagination/pagination-pages.tsx +90 -0
- package/src/components/pagination/pagination-previous.tsx +16 -0
- package/src/components/pagination/pagination.tsx +108 -0
- package/src/components/popover/popover-collections.tsx +157 -0
- package/src/components/popover/popover-context.ts +17 -0
- package/src/components/popover/popover-item.tsx +85 -0
- package/src/components/popover/popover.tsx +102 -0
- package/src/components/section/section.tsx +62 -0
- package/src/components/skeleton/skeleton.tsx +31 -0
- package/src/components/svg/svg.tsx +10 -0
- package/src/components/swiper/swiper-navigation.tsx +68 -0
- package/src/components/swiper/swiper-pagination.tsx +79 -0
- package/src/components/swiper/swiper.tsx +45 -0
- package/src/components/tabs/tabs-context.ts +31 -0
- package/src/components/tabs/tabs-item.tsx +148 -0
- package/src/components/tabs/tabs.tsx +169 -0
- package/src/components/text/text.tsx +101 -0
- package/src/components/tooltip/tooltip-content.tsx +112 -0
- package/src/components/tooltip/tooltip-helper.tsx +35 -0
- package/src/components/tooltip/tooltip-icon.tsx +32 -0
- package/src/components/tooltip/tooltip-placement.ts +196 -0
- package/src/components/tooltip/tooltip-props.ts +77 -0
- package/src/components/tooltip/tooltip.tsx +129 -0
- package/src/components/transition/transition.tsx +63 -0
- package/src/components/types.ts +144 -0
- package/src/components/utils.ts +236 -0
- package/src/custom.d.ts +4 -0
- package/src/fields/field-accept.tsx +65 -0
- package/src/fields/field-autocomplete.tsx +113 -0
- package/src/fields/field-card.tsx +69 -0
- package/src/fields/field-checkbox.tsx +67 -0
- package/src/fields/field-collection.tsx +71 -0
- package/src/fields/field-error.tsx +28 -0
- package/src/fields/field-password.tsx +72 -0
- package/src/fields/field-select.tsx +67 -0
- package/src/fields/field-text.tsx +66 -0
- package/src/fields/fields.tsx +31 -0
- package/src/fields/index.ts +10 -0
- package/src/forms/autocomplete/autocomplete-context.ts +25 -0
- package/src/forms/autocomplete/autocomplete-dropdown.tsx +55 -0
- package/src/forms/autocomplete/autocomplete-highlight.ts +32 -0
- package/src/forms/autocomplete/autocomplete.tsx +279 -0
- package/src/forms/checkbox/checkbox-icon.tsx +43 -0
- package/src/forms/checkbox/checkbox.tsx +66 -0
- package/src/forms/custom-select/custom-select-context.ts +22 -0
- package/src/forms/custom-select/custom-select-divider.tsx +28 -0
- package/src/forms/custom-select/custom-select-dropdown.tsx +55 -0
- package/src/forms/custom-select/custom-select-icon-clear.tsx +23 -0
- package/src/forms/custom-select/custom-select-icon.tsx +25 -0
- package/src/forms/custom-select/custom-select-input.tsx +56 -0
- package/src/forms/custom-select/custom-select-label.tsx +39 -0
- package/src/forms/custom-select/custom-select-multiple-value.tsx +59 -0
- package/src/forms/custom-select/custom-select-option.tsx +126 -0
- package/src/forms/custom-select/custom-select.tsx +313 -0
- package/src/forms/field/field.tsx +34 -0
- package/src/forms/form/form.tsx +30 -0
- package/src/forms/form-error/form-error.tsx +32 -0
- package/src/forms/form-tester/form-tester.tsx +38 -0
- package/src/forms/index.ts +19 -0
- package/src/forms/input/input.tsx +123 -0
- package/src/forms/input-group/input-group.tsx +74 -0
- package/src/forms/label/label.tsx +31 -0
- package/src/forms/radio/radio-group.tsx +78 -0
- package/src/forms/radio/radio-icon.tsx +43 -0
- package/src/forms/radio/radio.tsx +72 -0
- package/src/forms/radio-card/radio-card-group.tsx +70 -0
- package/src/forms/radio-card/radio-card.tsx +233 -0
- package/src/forms/radio-color/radio-color-group.tsx +66 -0
- package/src/forms/radio-color/radio-color.tsx +100 -0
- package/src/forms/radio-option/radio-option-group.tsx +66 -0
- package/src/forms/radio-option/radio-option.tsx +131 -0
- package/src/forms/rating/rating-icon.tsx +30 -0
- package/src/forms/rating/rating.tsx +126 -0
- package/src/forms/select/select.tsx +90 -0
- package/src/forms/textarea/textarea.tsx +71 -0
- package/src/hoc/index.ts +2 -0
- package/src/hoc/with-page-transition/with-page-transition.tsx +73 -0
- package/src/index.ts +12 -0
- package/src/lazy/carousel-1/carousel-1.tsx +91 -0
- package/src/lazy/download-1/download-1.tsx +45 -0
- package/src/lazy/index.ts +2 -0
- package/src/lazy/lazy-loader/lazy-loader-client.tsx +48 -0
- package/src/lazy/lazy-loader/lazy-loader.tsx +27 -0
- package/src/lazy/lazy.ts +28 -0
- package/src/lazy/media-full-1/media-full-1.tsx +26 -0
- package/src/lazy/media-full-2/media-full-2.tsx +31 -0
- package/src/lazy/media-media-1/media-media-1.tsx +37 -0
- package/src/lazy/not-found/not-found.tsx +31 -0
- package/src/lazy/related-1/related-1-card.tsx +59 -0
- package/src/lazy/related-1/related-1.tsx +44 -0
- package/src/lazy/sizes-colors-1/sizes-colors-1.tsx +54 -0
- package/src/lazy/text-1/text-1.tsx +34 -0
- package/src/lazy/text-aside-1/text-aside-1.tsx +52 -0
- package/src/lazy/text-media-1/text-media-1.tsx +45 -0
- package/src/lazy/text-text-1/text-text-1.tsx +32 -0
- package/src/sections/auth/auth-change-password.tsx +90 -0
- package/src/sections/auth/auth-drawer.tsx +22 -0
- package/src/sections/auth/auth-forgot-success.tsx +25 -0
- package/src/sections/auth/auth-forgot.tsx +98 -0
- package/src/sections/auth/auth-login.tsx +114 -0
- package/src/sections/auth/auth-register-success.tsx +25 -0
- package/src/sections/auth/auth-register.tsx +107 -0
- package/src/sections/auth/auth-update.tsx +91 -0
- package/src/sections/auth/auth.tsx +46 -0
- package/src/sections/blog-more/blog-card.tsx +58 -0
- package/src/sections/blog-more/blog-more.tsx +81 -0
- package/src/sections/blog-proposition/blog-proposition.tsx +58 -0
- package/src/sections/cart-mini/cart-mini-item.tsx +58 -0
- package/src/sections/cart-mini/cart-mini.tsx +76 -0
- package/src/sections/categories-proposition/categories-proposition-card.tsx +34 -0
- package/src/sections/categories-proposition/categories-proposition.tsx +39 -0
- package/src/sections/category-hero/category-hero.tsx +47 -0
- package/src/sections/category-proposition/category-proposition.tsx +49 -0
- package/src/sections/checkout/checkout-basket-item.tsx +64 -0
- package/src/sections/checkout/checkout-basket.tsx +115 -0
- package/src/sections/checkout/checkout-delivery.tsx +121 -0
- package/src/sections/checkout/checkout-discount.tsx +61 -0
- package/src/sections/checkout/checkout-empty.tsx +28 -0
- package/src/sections/checkout/checkout-error.tsx +31 -0
- package/src/sections/checkout/checkout-forgot-success.tsx +41 -0
- package/src/sections/checkout/checkout-forgot.tsx +55 -0
- package/src/sections/checkout/checkout-info.tsx +142 -0
- package/src/sections/checkout/checkout-login.tsx +56 -0
- package/src/sections/checkout/checkout-payment.tsx +120 -0
- package/src/sections/checkout/checkout-register-success.tsx +41 -0
- package/src/sections/checkout/checkout-register.tsx +48 -0
- package/src/sections/checkout/checkout-review.tsx +243 -0
- package/src/sections/checkout/checkout-success.tsx +57 -0
- package/src/sections/checkout/checkout-user-info.tsx +204 -0
- package/src/sections/checkout/checkout-wizard.tsx +157 -0
- package/src/sections/colors/colors.tsx +39 -0
- package/src/sections/contact-card/contact-card.tsx +104 -0
- package/src/sections/contact-form/contact-form.tsx +107 -0
- package/src/sections/contact-hero/contact-hero.tsx +54 -0
- package/src/sections/footer/footer.tsx +98 -0
- package/src/sections/header/header-card.tsx +36 -0
- package/src/sections/header/header-submenu.tsx +117 -0
- package/src/sections/header/header.tsx +306 -0
- package/src/sections/hero/hero.tsx +41 -0
- package/src/sections/icons/icons.tsx +74 -0
- package/src/sections/index.ts +70 -0
- package/src/sections/magazine-related/magazine-related.tsx +88 -0
- package/src/sections/magazine-search/magazine-search-card.tsx +46 -0
- package/src/sections/magazine-search/magazine-search-filters-modal.tsx +22 -0
- package/src/sections/magazine-search/magazine-search-filters.tsx +48 -0
- package/src/sections/magazine-search/magazine-search-recap.tsx +55 -0
- package/src/sections/magazine-search/magazine-search.tsx +151 -0
- package/src/sections/markets-and-languages/markets-and-languages-drawer.tsx +58 -0
- package/src/sections/order/order-address.tsx +22 -0
- package/src/sections/order/order-item.tsx +55 -0
- package/src/sections/order/order-register.tsx +105 -0
- package/src/sections/order/order-summary-item.tsx +38 -0
- package/src/sections/order/order-summary.tsx +72 -0
- package/src/sections/product-overview/product-overview-gallery.tsx +48 -0
- package/src/sections/product-overview/product-overview.tsx +112 -0
- package/src/sections/products-detail-download/products-detail-download.tsx +49 -0
- package/src/sections/products-detail-related/products-detail-related-card.tsx +59 -0
- package/src/sections/products-detail-related/products-detail-related.tsx +43 -0
- package/src/sections/products-detail-size-color/products-detail-size-color.tsx +57 -0
- package/src/sections/products-hero/products-hero-card.tsx +26 -0
- package/src/sections/products-hero/products-hero.tsx +54 -0
- package/src/sections/products-proposition/products-proposition-card.tsx +38 -0
- package/src/sections/products-proposition/products-proposition.tsx +27 -0
- package/src/sections/products-related/products-related-card.tsx +56 -0
- package/src/sections/products-related/products-related.tsx +30 -0
- package/src/sections/products-search/products-search-card.tsx +60 -0
- package/src/sections/products-search/products-search-filters-modal.tsx +22 -0
- package/src/sections/products-search/products-search-filters.tsx +92 -0
- package/src/sections/products-search/products-search-recap.tsx +55 -0
- package/src/sections/products-search/products-search.tsx +162 -0
- package/src/sections/proposition/proposition.tsx +32 -0
- package/src/sections/reserved_area/reserved_area.tsx +51 -0
- package/src/sections/reserved_area_menu/reserved_area_menu.tsx +67 -0
- package/src/sections/shop-category-hero/shop-category-hero.tsx +71 -0
- package/src/sections/shop-detail-related/shop-detail-related-card.tsx +59 -0
- package/src/sections/shop-detail-related/shop-detail-related.tsx +40 -0
- package/src/sections/shop-hero/shop-hero-card.tsx +26 -0
- package/src/sections/shop-hero/shop-hero.tsx +53 -0
- package/src/sections/shop-incentive/shop-incentive.tsx +46 -0
- package/src/sections/shop-items-proposition/shop-items-proposition-card.tsx +38 -0
- package/src/sections/shop-items-proposition/shop-items-proposition.tsx +28 -0
- package/src/sections/shop-search/shop-search-card.tsx +60 -0
- package/src/sections/shop-search/shop-search-filters-modal.tsx +22 -0
- package/src/sections/shop-search/shop-search-filters.tsx +53 -0
- package/src/sections/shop-search/shop-search-recap.tsx +45 -0
- package/src/sections/shop-search/shop-search.tsx +270 -0
- package/src/sections/split/split.tsx +60 -0
- package/src/sections/store-locator/store-locator-all.json +7433 -0
- package/src/sections/store-locator/store-locator-dots.tsx +1315 -0
- package/src/sections/store-locator/store-locator-features.json +26 -0
- package/src/sections/store-locator/store-locator-head._tsx +39 -0
- package/src/sections/store-locator/store-locator-search.tsx +417 -0
- package/src/sections/swiper-hero/swiper-hero.tsx +80 -0
- package/src/sections/test-framer-carousel/test-framer-carousel.tsx +56 -0
- package/src/sections/typography/typography.tsx +54 -0
- package/src/theme/global.style.ts +34 -0
- package/src/theme/global.vars.scss +134 -0
- package/src/theme/global.vars.ts +168 -0
- package/src/theme/index.ts +14 -0
- package/src/theme/mixins/_breakpoints.scss +101 -0
- package/src/theme/mixins/_fluid.scss +3 -0
- package/src/theme/mixins/_mixins.scss +3 -0
- package/src/theme/mixins/_scrollbar.scss +36 -0
- package/src/theme/styled.d.ts +13 -0
- package/src/theme/styles/_base.ts +15 -0
- package/src/theme/styles/_debug.ts +8 -0
- package/src/theme/styles/_print.ts +16 -0
- package/src/theme/styles/_reset.ts +234 -0
- package/src/theme/styles/_typography.ts +27 -0
- package/src/theme/styles/mixins/_scrollbar.ts +54 -0
- package/src/theme/theme.json +213 -0
- package/src/theme/types.ts +81 -0
- package/src/useVariants/useVariants.tsx +35 -0
- 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 & 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 & 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
|
+
};
|