@thorprovider/blocks 2.0.0 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +120 -8
- package/dist/.tsbuildinfo +1 -0
- package/dist/blocks/application/app-shells/app-shell-1-sidebar.d.ts +21 -0
- package/dist/blocks/application/app-shells/app-shell-1-sidebar.d.ts.map +1 -0
- package/dist/blocks/application/app-shells/app-shell-1-sidebar.js +147 -0
- package/dist/blocks/application/app-shells/app-shell-1-sidebar.js.map +1 -0
- package/dist/blocks/application/app-shells/app-shell-1-sidebar.mjs +153 -0
- package/dist/blocks/application/app-shells/app-shell-1-sidebar.mjs.map +1 -0
- package/dist/blocks/application/app-shells/app-shell-1.d.ts +27 -0
- package/dist/blocks/application/app-shells/app-shell-1.d.ts.map +1 -0
- package/dist/blocks/application/app-shells/app-shell-1.js +150 -0
- package/dist/blocks/application/app-shells/app-shell-1.js.map +1 -0
- package/dist/blocks/application/app-shells/app-shell-1.mjs +123 -0
- package/dist/blocks/application/app-shells/app-shell-1.mjs.map +1 -0
- package/dist/blocks/application/login-forms/login-page.d.ts +42 -0
- package/dist/blocks/application/login-forms/login-page.d.ts.map +1 -0
- package/dist/blocks/application/login-forms/login-page.js +209 -0
- package/dist/blocks/application/login-forms/login-page.js.map +1 -0
- package/dist/blocks/application/login-forms/login-page.mjs +185 -0
- package/dist/blocks/application/login-forms/login-page.mjs.map +1 -0
- package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.d.ts +3 -0
- package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.d.ts.map +1 -0
- package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.js +74 -0
- package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.js.map +1 -0
- package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.mjs +50 -0
- package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.mjs.map +1 -0
- package/dist/blocks/application/password-recovery/forgot-password-page-1.d.ts +42 -0
- package/dist/blocks/application/password-recovery/forgot-password-page-1.d.ts.map +1 -0
- package/dist/blocks/application/password-recovery/forgot-password-page-1.js +293 -0
- package/dist/blocks/application/password-recovery/forgot-password-page-1.js.map +1 -0
- package/dist/blocks/application/password-recovery/forgot-password-page-1.mjs +259 -0
- package/dist/blocks/application/password-recovery/forgot-password-page-1.mjs.map +1 -0
- package/dist/blocks/application/signup-forms/signup-page-1.d.ts +41 -0
- package/dist/blocks/application/signup-forms/signup-page-1.d.ts.map +1 -0
- package/dist/blocks/application/signup-forms/signup-page-1.js +195 -0
- package/dist/blocks/application/signup-forms/signup-page-1.js.map +1 -0
- package/dist/blocks/application/signup-forms/signup-page-1.mjs +171 -0
- package/dist/blocks/application/signup-forms/signup-page-1.mjs.map +1 -0
- package/dist/blocks/application/verification/verify-1.d.ts +35 -0
- package/dist/blocks/application/verification/verify-1.d.ts.map +1 -0
- package/dist/blocks/application/verification/verify-1.js +243 -0
- package/dist/blocks/application/verification/verify-1.js.map +1 -0
- package/dist/blocks/application/verification/verify-1.mjs +219 -0
- package/dist/blocks/application/verification/verify-1.mjs.map +1 -0
- package/dist/blocks/application/verification/verify-confetti.d.ts +22 -0
- package/dist/blocks/application/verification/verify-confetti.d.ts.map +1 -0
- package/dist/blocks/application/verification/verify-confetti.js +145 -0
- package/dist/blocks/application/verification/verify-confetti.js.map +1 -0
- package/dist/blocks/application/verification/verify-confetti.mjs +121 -0
- package/dist/blocks/application/verification/verify-confetti.mjs.map +1 -0
- package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.d.ts +39 -0
- package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.d.ts.map +1 -0
- package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.js +180 -0
- package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.js.map +1 -0
- package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.mjs +156 -0
- package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.mjs.map +1 -0
- package/dist/blocks/e-commerce/category-filters/category-listing.d.ts +236 -0
- package/dist/blocks/e-commerce/category-filters/category-listing.d.ts.map +1 -0
- package/dist/blocks/e-commerce/category-filters/category-listing.js +562 -0
- package/dist/blocks/e-commerce/category-filters/category-listing.js.map +1 -0
- package/dist/blocks/e-commerce/category-filters/category-listing.mjs +539 -0
- package/dist/blocks/e-commerce/category-filters/category-listing.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkbox-check.d.ts +4 -0
- package/dist/blocks/e-commerce/checkout-forms/checkbox-check.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkbox-check.js +97 -0
- package/dist/blocks/e-commerce/checkout-forms/checkbox-check.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkbox-check.mjs +73 -0
- package/dist/blocks/e-commerce/checkout-forms/checkbox-check.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.d.ts +41 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.js +115 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.mjs +91 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.d.ts +107 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.js +180 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.mjs +156 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.d.ts +13 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.js +180 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.mjs +156 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.d.ts +12 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.js +50 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.mjs +33 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.d.ts +11 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.js +50 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.mjs +25 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.d.ts +5 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.js +17 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.mjs +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.d.ts +20 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.js +176 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.mjs +152 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.d.ts +12 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.js +93 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.mjs +69 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-progress.d.ts +11 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-progress.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-progress.js +76 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-progress.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-progress.mjs +52 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-progress.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.d.ts +11 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.js +64 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.mjs +40 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.d.ts +17 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.js +199 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.mjs +175 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout.d.ts +164 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout.js +351 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout.mjs +327 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout.mjs.map +1 -0
- package/dist/blocks/e-commerce/navigation/back-to-top.d.ts +28 -0
- package/dist/blocks/e-commerce/navigation/back-to-top.d.ts.map +1 -0
- package/dist/blocks/e-commerce/navigation/back-to-top.js +78 -0
- package/dist/blocks/e-commerce/navigation/back-to-top.js.map +1 -0
- package/dist/blocks/e-commerce/navigation/back-to-top.mjs +52 -0
- package/dist/blocks/e-commerce/navigation/back-to-top.mjs.map +1 -0
- package/dist/blocks/e-commerce/navigation/breadcrumb.d.ts +61 -0
- package/dist/blocks/e-commerce/navigation/breadcrumb.d.ts.map +1 -0
- package/dist/blocks/e-commerce/navigation/breadcrumb.js +111 -0
- package/dist/blocks/e-commerce/navigation/breadcrumb.js.map +1 -0
- package/dist/blocks/e-commerce/navigation/breadcrumb.mjs +93 -0
- package/dist/blocks/e-commerce/navigation/breadcrumb.mjs.map +1 -0
- package/dist/blocks/e-commerce/navigation/category-icon.d.ts +28 -0
- package/dist/blocks/e-commerce/navigation/category-icon.d.ts.map +1 -0
- package/dist/blocks/e-commerce/navigation/category-icon.js +86 -0
- package/dist/blocks/e-commerce/navigation/category-icon.js.map +1 -0
- package/dist/blocks/e-commerce/navigation/category-icon.mjs +79 -0
- package/dist/blocks/e-commerce/navigation/category-icon.mjs.map +1 -0
- package/dist/blocks/e-commerce/navigation/mega-menu.d.ts +112 -0
- package/dist/blocks/e-commerce/navigation/mega-menu.d.ts.map +1 -0
- package/dist/blocks/e-commerce/navigation/mega-menu.js +250 -0
- package/dist/blocks/e-commerce/navigation/mega-menu.js.map +1 -0
- package/dist/blocks/e-commerce/navigation/mega-menu.mjs +228 -0
- package/dist/blocks/e-commerce/navigation/mega-menu.mjs.map +1 -0
- package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.d.ts +71 -0
- package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.d.ts.map +1 -0
- package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.js +94 -0
- package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.js.map +1 -0
- package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.mjs +68 -0
- package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.mjs.map +1 -0
- package/dist/blocks/e-commerce/navigation/mobile-category-drawer.d.ts +121 -0
- package/dist/blocks/e-commerce/navigation/mobile-category-drawer.d.ts.map +1 -0
- package/dist/blocks/e-commerce/navigation/mobile-category-drawer.js +257 -0
- package/dist/blocks/e-commerce/navigation/mobile-category-drawer.js.map +1 -0
- package/dist/blocks/e-commerce/navigation/mobile-category-drawer.mjs +235 -0
- package/dist/blocks/e-commerce/navigation/mobile-category-drawer.mjs.map +1 -0
- package/dist/blocks/e-commerce/navigation/skip-to-content.d.ts +25 -0
- package/dist/blocks/e-commerce/navigation/skip-to-content.d.ts.map +1 -0
- package/dist/blocks/e-commerce/navigation/skip-to-content.js +55 -0
- package/dist/blocks/e-commerce/navigation/skip-to-content.js.map +1 -0
- package/dist/blocks/e-commerce/navigation/skip-to-content.mjs +30 -0
- package/dist/blocks/e-commerce/navigation/skip-to-content.mjs.map +1 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.d.ts +23 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.d.ts.map +1 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.js +127 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.js.map +1 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.mjs +111 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.mjs.map +1 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.d.ts +66 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.d.ts.map +1 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.js +280 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.js.map +1 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.mjs +263 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.mjs.map +1 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.d.ts +13 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.d.ts.map +1 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.js +83 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.js.map +1 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.mjs +59 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.mjs.map +1 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.d.ts +8 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.d.ts.map +1 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.js +73 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.js.map +1 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.mjs +49 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.mjs.map +1 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar.d.ts +121 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar.d.ts.map +1 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar.js +424 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar.js.map +1 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar.mjs +399 -0
- package/dist/blocks/e-commerce/navigation/storefront-navbar.mjs.map +1 -0
- package/dist/blocks/e-commerce/order-history/order-history.d.ts +74 -0
- package/dist/blocks/e-commerce/order-history/order-history.d.ts.map +1 -0
- package/dist/blocks/e-commerce/order-history/order-history.js +161 -0
- package/dist/blocks/e-commerce/order-history/order-history.js.map +1 -0
- package/dist/blocks/e-commerce/order-history/order-history.mjs +141 -0
- package/dist/blocks/e-commerce/order-history/order-history.mjs.map +1 -0
- package/dist/blocks/e-commerce/order-history/order-line.d.ts +50 -0
- package/dist/blocks/e-commerce/order-history/order-line.d.ts.map +1 -0
- package/dist/blocks/e-commerce/order-history/order-line.js +75 -0
- package/dist/blocks/e-commerce/order-history/order-line.js.map +1 -0
- package/dist/blocks/e-commerce/order-history/order-line.mjs +49 -0
- package/dist/blocks/e-commerce/order-history/order-line.mjs.map +1 -0
- package/dist/blocks/e-commerce/product-categories/category-card.d.ts +9 -0
- package/dist/blocks/e-commerce/product-categories/category-card.d.ts.map +1 -0
- package/dist/blocks/e-commerce/product-categories/category-card.js +154 -0
- package/dist/blocks/e-commerce/product-categories/category-card.js.map +1 -0
- package/dist/blocks/e-commerce/product-categories/category-card.mjs +134 -0
- package/dist/blocks/e-commerce/product-categories/category-card.mjs.map +1 -0
- package/dist/blocks/e-commerce/product-categories/category-shared.d.ts +15 -0
- package/dist/blocks/e-commerce/product-categories/category-shared.d.ts.map +1 -0
- package/dist/blocks/e-commerce/product-categories/category-shared.js +101 -0
- package/dist/blocks/e-commerce/product-categories/category-shared.js.map +1 -0
- package/dist/blocks/e-commerce/product-categories/category-shared.mjs +97 -0
- package/dist/blocks/e-commerce/product-categories/category-shared.mjs.map +1 -0
- package/dist/blocks/e-commerce/product-categories/product-category-grid.d.ts +10 -0
- package/dist/blocks/e-commerce/product-categories/product-category-grid.d.ts.map +1 -0
- package/dist/blocks/e-commerce/product-categories/product-category-grid.js +138 -0
- package/dist/blocks/e-commerce/product-categories/product-category-grid.js.map +1 -0
- package/dist/blocks/e-commerce/product-categories/product-category-grid.mjs +114 -0
- package/dist/blocks/e-commerce/product-categories/product-category-grid.mjs.map +1 -0
- package/dist/blocks/e-commerce/product-categories/product-category.d.ts +41 -0
- package/dist/blocks/e-commerce/product-categories/product-category.d.ts.map +1 -0
- package/dist/blocks/e-commerce/product-categories/product-category.js +319 -0
- package/dist/blocks/e-commerce/product-categories/product-category.js.map +1 -0
- package/dist/blocks/e-commerce/product-categories/product-category.mjs +322 -0
- package/dist/blocks/e-commerce/product-categories/product-category.mjs.map +1 -0
- package/dist/blocks/e-commerce/product-list/product-card.d.ts +47 -0
- package/dist/blocks/e-commerce/product-list/product-card.d.ts.map +1 -0
- package/dist/blocks/e-commerce/product-list/product-card.js +361 -0
- package/dist/blocks/e-commerce/product-list/product-card.js.map +1 -0
- package/dist/blocks/e-commerce/product-list/product-card.mjs +337 -0
- package/dist/blocks/e-commerce/product-list/product-card.mjs.map +1 -0
- package/dist/blocks/e-commerce/product-list/product-grid.d.ts +28 -0
- package/dist/blocks/e-commerce/product-list/product-grid.d.ts.map +1 -0
- package/dist/blocks/e-commerce/product-list/product-grid.js +92 -0
- package/dist/blocks/e-commerce/product-list/product-grid.js.map +1 -0
- package/dist/blocks/e-commerce/product-list/product-grid.mjs +68 -0
- package/dist/blocks/e-commerce/product-list/product-grid.mjs.map +1 -0
- package/dist/blocks/e-commerce/product-list/product-showcase-1.d.ts +30 -0
- package/dist/blocks/e-commerce/product-list/product-showcase-1.d.ts.map +1 -0
- package/dist/blocks/e-commerce/product-list/product-showcase-1.js +245 -0
- package/dist/blocks/e-commerce/product-list/product-showcase-1.js.map +1 -0
- package/dist/blocks/e-commerce/product-list/product-showcase-1.mjs +221 -0
- package/dist/blocks/e-commerce/product-list/product-showcase-1.mjs.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-gallery.d.ts +20 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-gallery.d.ts.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-gallery.js +71 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-gallery.js.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-gallery.mjs +47 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-gallery.mjs.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.d.ts +15 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.d.ts.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.js +118 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.js.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.mjs +94 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.mjs.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.d.ts +26 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.d.ts.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.js +85 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.js.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.mjs +61 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.mjs.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-tabs.d.ts +32 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-tabs.d.ts.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-tabs.js +79 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-tabs.js.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-tabs.mjs +51 -0
- package/dist/blocks/e-commerce/product-overview/product-overview-tabs.mjs.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-overview.d.ts +121 -0
- package/dist/blocks/e-commerce/product-overview/product-overview.d.ts.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-overview.js +844 -0
- package/dist/blocks/e-commerce/product-overview/product-overview.js.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-overview.mjs +821 -0
- package/dist/blocks/e-commerce/product-overview/product-overview.mjs.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-quick-view-card.d.ts +17 -0
- package/dist/blocks/e-commerce/product-overview/product-quick-view-card.d.ts.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-quick-view-card.js +123 -0
- package/dist/blocks/e-commerce/product-overview/product-quick-view-card.js.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-quick-view-card.mjs +99 -0
- package/dist/blocks/e-commerce/product-overview/product-quick-view-card.mjs.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.d.ts +20 -0
- package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.d.ts.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.js +271 -0
- package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.js.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.mjs +253 -0
- package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.mjs.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-quick-view.d.ts +68 -0
- package/dist/blocks/e-commerce/product-overview/product-quick-view.d.ts.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-quick-view.js +84 -0
- package/dist/blocks/e-commerce/product-overview/product-quick-view.js.map +1 -0
- package/dist/blocks/e-commerce/product-overview/product-quick-view.mjs +60 -0
- package/dist/blocks/e-commerce/product-overview/product-quick-view.mjs.map +1 -0
- package/dist/blocks/e-commerce/reviews/review-card.d.ts +60 -0
- package/dist/blocks/e-commerce/reviews/review-card.d.ts.map +1 -0
- package/dist/blocks/e-commerce/reviews/review-card.js +166 -0
- package/dist/blocks/e-commerce/reviews/review-card.js.map +1 -0
- package/dist/blocks/e-commerce/reviews/review-card.mjs +139 -0
- package/dist/blocks/e-commerce/reviews/review-card.mjs.map +1 -0
- package/dist/blocks/e-commerce/reviews/review-composer.d.ts +50 -0
- package/dist/blocks/e-commerce/reviews/review-composer.d.ts.map +1 -0
- package/dist/blocks/e-commerce/reviews/review-composer.js +180 -0
- package/dist/blocks/e-commerce/reviews/review-composer.js.map +1 -0
- package/dist/blocks/e-commerce/reviews/review-composer.mjs +155 -0
- package/dist/blocks/e-commerce/reviews/review-composer.mjs.map +1 -0
- package/dist/blocks/e-commerce/reviews/review-list.d.ts +40 -0
- package/dist/blocks/e-commerce/reviews/review-list.d.ts.map +1 -0
- package/dist/blocks/e-commerce/reviews/review-list.js +138 -0
- package/dist/blocks/e-commerce/reviews/review-list.js.map +1 -0
- package/dist/blocks/e-commerce/reviews/review-list.mjs +119 -0
- package/dist/blocks/e-commerce/reviews/review-list.mjs.map +1 -0
- package/dist/blocks/e-commerce/reviews/review-summary.d.ts +49 -0
- package/dist/blocks/e-commerce/reviews/review-summary.d.ts.map +1 -0
- package/dist/blocks/e-commerce/reviews/review-summary.js +150 -0
- package/dist/blocks/e-commerce/reviews/review-summary.js.map +1 -0
- package/dist/blocks/e-commerce/reviews/review-summary.mjs +124 -0
- package/dist/blocks/e-commerce/reviews/review-summary.mjs.map +1 -0
- package/dist/blocks/e-commerce/shopping-carts/shopping-cart.d.ts +98 -0
- package/dist/blocks/e-commerce/shopping-carts/shopping-cart.d.ts.map +1 -0
- package/dist/blocks/e-commerce/shopping-carts/shopping-cart.js +417 -0
- package/dist/blocks/e-commerce/shopping-carts/shopping-cart.js.map +1 -0
- package/dist/blocks/e-commerce/shopping-carts/shopping-cart.mjs +393 -0
- package/dist/blocks/e-commerce/shopping-carts/shopping-cart.mjs.map +1 -0
- package/dist/blocks/e-commerce/store-containers/store-container-1.d.ts +13 -0
- package/dist/blocks/e-commerce/store-containers/store-container-1.d.ts.map +1 -0
- package/dist/blocks/e-commerce/store-containers/store-container-1.js +45 -0
- package/dist/blocks/e-commerce/store-containers/store-container-1.js.map +1 -0
- package/dist/blocks/e-commerce/store-containers/store-container-1.mjs +21 -0
- package/dist/blocks/e-commerce/store-containers/store-container-1.mjs.map +1 -0
- package/dist/blocks/e-commerce/storefront-hero/storefront-hero.d.ts +163 -0
- package/dist/blocks/e-commerce/storefront-hero/storefront-hero.d.ts.map +1 -0
- package/dist/blocks/e-commerce/storefront-hero/storefront-hero.js +810 -0
- package/dist/blocks/e-commerce/storefront-hero/storefront-hero.js.map +1 -0
- package/dist/blocks/e-commerce/storefront-hero/storefront-hero.mjs +786 -0
- package/dist/blocks/e-commerce/storefront-hero/storefront-hero.mjs.map +1 -0
- package/dist/blocks/marketing/banners/avatar-group.d.ts +8 -0
- package/dist/blocks/marketing/banners/avatar-group.d.ts.map +1 -0
- package/dist/blocks/marketing/banners/avatar-group.js +90 -0
- package/dist/blocks/marketing/banners/avatar-group.js.map +1 -0
- package/dist/blocks/marketing/banners/avatar-group.mjs +56 -0
- package/dist/blocks/marketing/banners/avatar-group.mjs.map +1 -0
- package/dist/blocks/marketing/banners/banner-1.d.ts +26 -0
- package/dist/blocks/marketing/banners/banner-1.d.ts.map +1 -0
- package/dist/blocks/marketing/banners/banner-1.js +177 -0
- package/dist/blocks/marketing/banners/banner-1.js.map +1 -0
- package/dist/blocks/marketing/banners/banner-1.mjs +153 -0
- package/dist/blocks/marketing/banners/banner-1.mjs.map +1 -0
- package/dist/blocks/marketing/cta/cta-section-1.d.ts +13 -0
- package/dist/blocks/marketing/cta/cta-section-1.d.ts.map +1 -0
- package/dist/blocks/marketing/cta/cta-section-1.js +116 -0
- package/dist/blocks/marketing/cta/cta-section-1.js.map +1 -0
- package/dist/blocks/marketing/cta/cta-section-1.mjs +92 -0
- package/dist/blocks/marketing/cta/cta-section-1.mjs.map +1 -0
- package/dist/blocks/marketing/faq/faq-block-1.d.ts +16 -0
- package/dist/blocks/marketing/faq/faq-block-1.d.ts.map +1 -0
- package/dist/blocks/marketing/faq/faq-block-1.js +49 -0
- package/dist/blocks/marketing/faq/faq-block-1.js.map +1 -0
- package/dist/blocks/marketing/faq/faq-block-1.mjs +25 -0
- package/dist/blocks/marketing/faq/faq-block-1.mjs.map +1 -0
- package/dist/blocks/marketing/features/feature.d.ts +45 -0
- package/dist/blocks/marketing/features/feature.d.ts.map +1 -0
- package/dist/blocks/marketing/features/feature.js +135 -0
- package/dist/blocks/marketing/features/feature.js.map +1 -0
- package/dist/blocks/marketing/features/feature.mjs +111 -0
- package/dist/blocks/marketing/features/feature.mjs.map +1 -0
- package/dist/blocks/marketing/footers/footer-section.d.ts +59 -0
- package/dist/blocks/marketing/footers/footer-section.d.ts.map +1 -0
- package/dist/blocks/marketing/footers/footer-section.js +356 -0
- package/dist/blocks/marketing/footers/footer-section.js.map +1 -0
- package/dist/blocks/marketing/footers/footer-section.mjs +332 -0
- package/dist/blocks/marketing/footers/footer-section.mjs.map +1 -0
- package/dist/blocks/marketing/hero-sections/avatar-group.d.ts +9 -0
- package/dist/blocks/marketing/hero-sections/avatar-group.d.ts.map +1 -0
- package/dist/blocks/marketing/hero-sections/avatar-group.js +92 -0
- package/dist/blocks/marketing/hero-sections/avatar-group.js.map +1 -0
- package/dist/blocks/marketing/hero-sections/avatar-group.mjs +58 -0
- package/dist/blocks/marketing/hero-sections/avatar-group.mjs.map +1 -0
- package/dist/blocks/marketing/hero-sections/hero-section-1.d.ts +27 -0
- package/dist/blocks/marketing/hero-sections/hero-section-1.d.ts.map +1 -0
- package/dist/blocks/marketing/hero-sections/hero-section-1.js +124 -0
- package/dist/blocks/marketing/hero-sections/hero-section-1.js.map +1 -0
- package/dist/blocks/marketing/hero-sections/hero-section-1.mjs +100 -0
- package/dist/blocks/marketing/hero-sections/hero-section-1.mjs.map +1 -0
- package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.d.ts +19 -0
- package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.d.ts.map +1 -0
- package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.js +63 -0
- package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.js.map +1 -0
- package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.mjs +39 -0
- package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.mjs.map +1 -0
- package/dist/blocks/marketing/logo-clouds/logo-cloud-1.d.ts +13 -0
- package/dist/blocks/marketing/logo-clouds/logo-cloud-1.d.ts.map +1 -0
- package/dist/blocks/marketing/logo-clouds/logo-cloud-1.js +49 -0
- package/dist/blocks/marketing/logo-clouds/logo-cloud-1.js.map +1 -0
- package/dist/blocks/marketing/logo-clouds/logo-cloud-1.mjs +25 -0
- package/dist/blocks/marketing/logo-clouds/logo-cloud-1.mjs.map +1 -0
- package/dist/blocks/marketing/navbars/navbar.d.ts +80 -0
- package/dist/blocks/marketing/navbars/navbar.d.ts.map +1 -0
- package/dist/blocks/marketing/navbars/navbar.js +484 -0
- package/dist/blocks/marketing/navbars/navbar.js.map +1 -0
- package/dist/blocks/marketing/navbars/navbar.mjs +475 -0
- package/dist/blocks/marketing/navbars/navbar.mjs.map +1 -0
- package/dist/blocks/marketing/pricing/pricing-section-1.d.ts +23 -0
- package/dist/blocks/marketing/pricing/pricing-section-1.d.ts.map +1 -0
- package/dist/blocks/marketing/pricing/pricing-section-1.js +89 -0
- package/dist/blocks/marketing/pricing/pricing-section-1.js.map +1 -0
- package/dist/blocks/marketing/pricing/pricing-section-1.mjs +65 -0
- package/dist/blocks/marketing/pricing/pricing-section-1.mjs.map +1 -0
- package/dist/blocks/marketing/statistics/statistic-1.d.ts +19 -0
- package/dist/blocks/marketing/statistics/statistic-1.d.ts.map +1 -0
- package/dist/blocks/marketing/statistics/statistic-1.js +83 -0
- package/dist/blocks/marketing/statistics/statistic-1.js.map +1 -0
- package/dist/blocks/marketing/statistics/statistic-1.mjs +59 -0
- package/dist/blocks/marketing/statistics/statistic-1.mjs.map +1 -0
- package/dist/blocks/marketing/testimonials/testimonial-section.d.ts +29 -0
- package/dist/blocks/marketing/testimonials/testimonial-section.d.ts.map +1 -0
- package/dist/blocks/marketing/testimonials/testimonial-section.js +173 -0
- package/dist/blocks/marketing/testimonials/testimonial-section.js.map +1 -0
- package/dist/blocks/marketing/testimonials/testimonial-section.mjs +155 -0
- package/dist/blocks/marketing/testimonials/testimonial-section.mjs.map +1 -0
- package/dist/blocks/shared/reaction-toggle.d.ts +14 -0
- package/dist/blocks/shared/reaction-toggle.d.ts.map +1 -0
- package/dist/blocks/shared/reaction-toggle.js +138 -0
- package/dist/blocks/shared/reaction-toggle.js.map +1 -0
- package/dist/blocks/shared/reaction-toggle.mjs +114 -0
- package/dist/blocks/shared/reaction-toggle.mjs.map +1 -0
- package/dist/hooks/use-mobile.d.ts +2 -0
- package/dist/hooks/use-mobile.d.ts.map +1 -0
- package/dist/hooks/use-mobile.js +53 -0
- package/dist/hooks/use-mobile.js.map +1 -0
- package/dist/hooks/use-mobile.mjs +19 -0
- package/dist/hooks/use-mobile.mjs.map +1 -0
- package/dist/index.d.ts +100 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +339 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +238 -0
- package/dist/index.mjs.map +1 -0
- package/{src/lib/cart.ts → dist/lib/cart.d.ts} +2 -3
- package/dist/lib/cart.d.ts.map +1 -0
- package/dist/lib/cart.js +31 -0
- package/dist/lib/cart.js.map +1 -0
- package/dist/lib/cart.mjs +7 -0
- package/dist/lib/cart.mjs.map +1 -0
- package/dist/lib/contracts.d.ts +4008 -0
- package/dist/lib/contracts.d.ts.map +1 -0
- package/dist/lib/contracts.js +828 -0
- package/dist/lib/contracts.js.map +1 -0
- package/dist/lib/contracts.mjs +737 -0
- package/dist/lib/contracts.mjs.map +1 -0
- package/dist/lib/money.d.ts +28 -0
- package/dist/lib/money.d.ts.map +1 -0
- package/dist/lib/money.js +50 -0
- package/dist/lib/money.js.map +1 -0
- package/dist/lib/money.mjs +24 -0
- package/dist/lib/money.mjs.map +1 -0
- package/dist/lib/types/menu.d.ts +40 -0
- package/dist/lib/types/menu.d.ts.map +1 -0
- package/dist/lib/types/menu.js +50 -0
- package/dist/lib/types/menu.js.map +1 -0
- package/dist/lib/types/menu.mjs +25 -0
- package/dist/lib/types/menu.mjs.map +1 -0
- package/dist/lib/types.d.ts +5 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +17 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/types.mjs +1 -0
- package/dist/lib/types.mjs.map +1 -0
- package/dist/lib/utils.d.ts +7 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +33 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/utils.mjs +9 -0
- package/dist/lib/utils.mjs.map +1 -0
- package/dist/ui/accordion.d.ts +8 -0
- package/dist/ui/accordion.d.ts.map +1 -0
- package/dist/ui/accordion.js +93 -0
- package/dist/ui/accordion.js.map +1 -0
- package/dist/ui/accordion.mjs +66 -0
- package/dist/ui/accordion.mjs.map +1 -0
- package/dist/ui/avatar.d.ts +12 -0
- package/dist/ui/avatar.d.ts.map +1 -0
- package/dist/ui/avatar.js +134 -0
- package/dist/ui/avatar.js.map +1 -0
- package/{src/ui/avatar.tsx → dist/ui/avatar.mjs} +67 -70
- package/dist/ui/avatar.mjs.map +1 -0
- package/dist/ui/badge.d.ts +10 -0
- package/dist/ui/badge.d.ts.map +1 -0
- package/dist/ui/badge.js +69 -0
- package/dist/ui/badge.js.map +1 -0
- package/dist/ui/badge.mjs +44 -0
- package/dist/ui/badge.mjs.map +1 -0
- package/dist/ui/breadcrumb.d.ts +12 -0
- package/dist/ui/breadcrumb.d.ts.map +1 -0
- package/dist/ui/breadcrumb.js +134 -0
- package/dist/ui/breadcrumb.js.map +1 -0
- package/dist/ui/breadcrumb.mjs +104 -0
- package/dist/ui/breadcrumb.mjs.map +1 -0
- package/dist/ui/button-group.d.ts +12 -0
- package/dist/ui/button-group.d.ts.map +1 -0
- package/dist/ui/button-group.js +104 -0
- package/dist/ui/button-group.js.map +1 -0
- package/dist/ui/button-group.mjs +77 -0
- package/dist/ui/button-group.mjs.map +1 -0
- package/dist/ui/button.d.ts +11 -0
- package/dist/ui/button.d.ts.map +1 -0
- package/dist/ui/button.js +82 -0
- package/dist/ui/button.js.map +1 -0
- package/dist/ui/button.mjs +57 -0
- package/dist/ui/button.mjs.map +1 -0
- package/dist/ui/card.d.ts +10 -0
- package/dist/ui/card.d.ts.map +1 -0
- package/dist/ui/card.js +121 -0
- package/dist/ui/card.js.map +1 -0
- package/dist/ui/card.mjs +91 -0
- package/dist/ui/card.mjs.map +1 -0
- package/dist/ui/carousel.d.ts +20 -0
- package/dist/ui/carousel.d.ts.map +1 -0
- package/dist/ui/carousel.js +238 -0
- package/dist/ui/carousel.js.map +1 -0
- package/dist/ui/carousel.mjs +200 -0
- package/dist/ui/carousel.mjs.map +1 -0
- package/dist/ui/dialog.d.ts +18 -0
- package/dist/ui/dialog.d.ts.map +1 -0
- package/dist/ui/dialog.js +181 -0
- package/dist/ui/dialog.js.map +1 -0
- package/dist/ui/dialog.mjs +148 -0
- package/dist/ui/dialog.mjs.map +1 -0
- package/dist/ui/drawer.d.ts +14 -0
- package/dist/ui/drawer.d.ts.map +1 -0
- package/dist/ui/drawer.js +163 -0
- package/dist/ui/drawer.js.map +1 -0
- package/dist/ui/drawer.mjs +130 -0
- package/dist/ui/drawer.mjs.map +1 -0
- package/dist/ui/dropdown-menu.d.ts +26 -0
- package/dist/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/ui/dropdown-menu.js +271 -0
- package/dist/ui/dropdown-menu.js.map +1 -0
- package/dist/ui/dropdown-menu.mjs +233 -0
- package/dist/ui/dropdown-menu.mjs.map +1 -0
- package/dist/ui/empty.d.ts +12 -0
- package/dist/ui/empty.d.ts.map +1 -0
- package/dist/ui/empty.js +132 -0
- package/dist/ui/empty.js.map +1 -0
- package/dist/ui/empty.mjs +103 -0
- package/dist/ui/empty.mjs.map +1 -0
- package/dist/ui/field.d.ts +25 -0
- package/dist/ui/field.d.ts.map +1 -0
- package/dist/ui/field.js +264 -0
- package/dist/ui/field.js.map +1 -0
- package/{src/ui/field.tsx → dist/ui/field.mjs} +142 -159
- package/dist/ui/field.mjs.map +1 -0
- package/dist/ui/input-group.d.ts +17 -0
- package/dist/ui/input-group.d.ts.map +1 -0
- package/dist/ui/input-group.js +185 -0
- package/dist/ui/input-group.js.map +1 -0
- package/{src/ui/input-group.tsx → dist/ui/input-group.mjs} +92 -106
- package/dist/ui/input-group.mjs.map +1 -0
- package/dist/ui/input-otp.d.ts +12 -0
- package/dist/ui/input-otp.d.ts.map +1 -0
- package/dist/ui/input-otp.js +105 -0
- package/dist/ui/input-otp.js.map +1 -0
- package/dist/ui/input-otp.mjs +68 -0
- package/dist/ui/input-otp.mjs.map +1 -0
- package/dist/ui/input.d.ts +4 -0
- package/dist/ui/input.d.ts.map +1 -0
- package/dist/ui/input.js +46 -0
- package/dist/ui/input.js.map +1 -0
- package/{src/ui/input.tsx → dist/ui/input.mjs} +17 -15
- package/dist/ui/input.mjs.map +1 -0
- package/dist/ui/label.d.ts +5 -0
- package/dist/ui/label.d.ts.map +1 -0
- package/dist/ui/label.js +48 -0
- package/dist/ui/label.js.map +1 -0
- package/dist/ui/label.mjs +24 -0
- package/dist/ui/label.mjs.map +1 -0
- package/dist/ui/navigation-menu.d.ts +15 -0
- package/dist/ui/navigation-menu.d.ts.map +1 -0
- package/dist/ui/navigation-menu.js +203 -0
- package/dist/ui/navigation-menu.js.map +1 -0
- package/{src/ui/navigation-menu.tsx → dist/ui/navigation-menu.mjs} +116 -112
- package/dist/ui/navigation-menu.mjs.map +1 -0
- package/dist/ui/pagination.d.ts +14 -0
- package/dist/ui/pagination.d.ts.map +1 -0
- package/dist/ui/pagination.js +149 -0
- package/dist/ui/pagination.js.map +1 -0
- package/dist/ui/pagination.mjs +123 -0
- package/dist/ui/pagination.mjs.map +1 -0
- package/dist/ui/progress.d.ts +5 -0
- package/dist/ui/progress.d.ts.map +1 -0
- package/dist/ui/progress.js +57 -0
- package/dist/ui/progress.js.map +1 -0
- package/dist/ui/progress.mjs +33 -0
- package/dist/ui/progress.mjs.map +1 -0
- package/dist/ui/radio-group.d.ts +6 -0
- package/dist/ui/radio-group.d.ts.map +1 -0
- package/dist/ui/radio-group.js +72 -0
- package/dist/ui/radio-group.js.map +1 -0
- package/dist/ui/radio-group.mjs +47 -0
- package/dist/ui/radio-group.mjs.map +1 -0
- package/dist/ui/select.d.ts +16 -0
- package/dist/ui/select.d.ts.map +1 -0
- package/dist/ui/select.js +213 -0
- package/dist/ui/select.js.map +1 -0
- package/dist/ui/select.mjs +180 -0
- package/dist/ui/select.mjs.map +1 -0
- package/dist/ui/separator.d.ts +5 -0
- package/dist/ui/separator.d.ts.map +1 -0
- package/dist/ui/separator.js +52 -0
- package/dist/ui/separator.js.map +1 -0
- package/dist/ui/separator.mjs +28 -0
- package/dist/ui/separator.mjs.map +1 -0
- package/dist/ui/sheet.d.ts +15 -0
- package/dist/ui/sheet.d.ts.map +1 -0
- package/dist/ui/sheet.js +160 -0
- package/dist/ui/sheet.js.map +1 -0
- package/dist/ui/sheet.mjs +129 -0
- package/dist/ui/sheet.mjs.map +1 -0
- package/dist/ui/sidebar.d.ts +70 -0
- package/dist/ui/sidebar.d.ts.map +1 -0
- package/dist/ui/sidebar.js +697 -0
- package/dist/ui/sidebar.js.map +1 -0
- package/dist/ui/sidebar.mjs +651 -0
- package/dist/ui/sidebar.mjs.map +1 -0
- package/dist/ui/skeleton.d.ts +3 -0
- package/dist/ui/skeleton.d.ts.map +1 -0
- package/dist/ui/skeleton.js +40 -0
- package/dist/ui/skeleton.js.map +1 -0
- package/dist/ui/skeleton.mjs +16 -0
- package/dist/ui/skeleton.mjs.map +1 -0
- package/dist/ui/table.d.ts +11 -0
- package/dist/ui/table.d.ts.map +1 -0
- package/dist/ui/table.js +147 -0
- package/dist/ui/table.js.map +1 -0
- package/dist/ui/table.mjs +116 -0
- package/dist/ui/table.mjs.map +1 -0
- package/dist/ui/tabs.d.ts +12 -0
- package/dist/ui/tabs.d.ts.map +1 -0
- package/dist/ui/tabs.js +121 -0
- package/dist/ui/tabs.js.map +1 -0
- package/{src/ui/tabs.tsx → dist/ui/tabs.mjs} +59 -56
- package/dist/ui/tabs.mjs.map +1 -0
- package/dist/ui/textarea.d.ts +4 -0
- package/dist/ui/textarea.d.ts.map +1 -0
- package/dist/ui/textarea.js +43 -0
- package/dist/ui/textarea.js.map +1 -0
- package/{src/ui/textarea.tsx → dist/ui/textarea.mjs} +16 -14
- package/dist/ui/textarea.mjs.map +1 -0
- package/dist/ui/toggle-group.d.ts +10 -0
- package/dist/ui/toggle-group.d.ts.map +1 -0
- package/dist/ui/toggle-group.js +105 -0
- package/dist/ui/toggle-group.js.map +1 -0
- package/dist/ui/toggle-group.mjs +70 -0
- package/dist/ui/toggle-group.mjs.map +1 -0
- package/dist/ui/toggle.d.ts +10 -0
- package/dist/ui/toggle.d.ts.map +1 -0
- package/dist/ui/toggle.js +70 -0
- package/dist/ui/toggle.js.map +1 -0
- package/{src/ui/toggle.tsx → dist/ui/toggle.mjs} +25 -26
- package/dist/ui/toggle.mjs.map +1 -0
- package/dist/ui/tooltip.d.ts +8 -0
- package/dist/ui/tooltip.d.ts.map +1 -0
- package/dist/ui/tooltip.js +84 -0
- package/dist/ui/tooltip.js.map +1 -0
- package/dist/ui/tooltip.mjs +57 -0
- package/dist/ui/tooltip.mjs.map +1 -0
- package/package.json +10 -2
- package/AGENTS.md +0 -1
- package/CHANGELOG.md +0 -155
- package/components.json +0 -33
- package/docs/standards/data-contracts.md +0 -81
- package/docs/standards/theming.md +0 -112
- package/scripts/fix-esm-extensions.mjs +0 -40
- package/src/blocks/application/app-shells/app-shell-1-sidebar.tsx +0 -198
- package/src/blocks/application/app-shells/app-shell-1.tsx +0 -196
- package/src/blocks/application/login-forms/login-page.test.tsx +0 -190
- package/src/blocks/application/login-forms/login-page.tsx +0 -240
- package/src/blocks/application/password-recovery/forgot-password-page-1-brand-mark.tsx +0 -38
- package/src/blocks/application/password-recovery/forgot-password-page-1.tsx +0 -318
- package/src/blocks/application/signup-forms/signup-page-1.tsx +0 -229
- package/src/blocks/application/verification/verify-1.tsx +0 -307
- package/src/blocks/application/verification/verify-confetti.tsx +0 -192
- package/src/blocks/application/viewport-ownership.test.tsx +0 -41
- package/src/blocks/e-commerce/category-filters/category-listing-filter-fields.tsx +0 -218
- package/src/blocks/e-commerce/category-filters/category-listing.test.tsx +0 -601
- package/src/blocks/e-commerce/category-filters/category-listing.tsx +0 -934
- package/src/blocks/e-commerce/checkout-forms/checkbox-check.tsx +0 -74
- package/src/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.tsx +0 -195
- package/src/blocks/e-commerce/checkout-forms/checkout-confirmation.test.tsx +0 -136
- package/src/blocks/e-commerce/checkout-forms/checkout-confirmation.tsx +0 -329
- package/src/blocks/e-commerce/checkout-forms/checkout-contact-step.tsx +0 -149
- package/src/blocks/e-commerce/checkout-forms/checkout-country-field.tsx +0 -53
- package/src/blocks/e-commerce/checkout-forms/checkout-field-feedback.tsx +0 -29
- package/src/blocks/e-commerce/checkout-forms/checkout-form-types.ts +0 -7
- package/src/blocks/e-commerce/checkout-forms/checkout-order-summary.tsx +0 -230
- package/src/blocks/e-commerce/checkout-forms/checkout-payment-step.tsx +0 -100
- package/src/blocks/e-commerce/checkout-forms/checkout-progress.tsx +0 -62
- package/src/blocks/e-commerce/checkout-forms/checkout-review-step.tsx +0 -59
- package/src/blocks/e-commerce/checkout-forms/checkout-shipping-step.tsx +0 -180
- package/src/blocks/e-commerce/checkout-forms/checkout.test.tsx +0 -478
- package/src/blocks/e-commerce/checkout-forms/checkout.tsx +0 -550
- package/src/blocks/e-commerce/navigation/back-to-top.test.tsx +0 -27
- package/src/blocks/e-commerce/navigation/back-to-top.tsx +0 -71
- package/src/blocks/e-commerce/navigation/breadcrumb.test.tsx +0 -174
- package/src/blocks/e-commerce/navigation/breadcrumb.tsx +0 -130
- package/src/blocks/e-commerce/navigation/category-icon.test.tsx +0 -54
- package/src/blocks/e-commerce/navigation/category-icon.tsx +0 -94
- package/src/blocks/e-commerce/navigation/mega-menu.test.tsx +0 -139
- package/src/blocks/e-commerce/navigation/mega-menu.tsx +0 -271
- package/src/blocks/e-commerce/navigation/mobile-bottom-nav.test.tsx +0 -74
- package/src/blocks/e-commerce/navigation/mobile-bottom-nav.tsx +0 -78
- package/src/blocks/e-commerce/navigation/mobile-category-drawer.test.tsx +0 -192
- package/src/blocks/e-commerce/navigation/mobile-category-drawer.tsx +0 -278
- package/src/blocks/e-commerce/navigation/skip-to-content.test.tsx +0 -35
- package/src/blocks/e-commerce/navigation/skip-to-content.tsx +0 -37
- package/src/blocks/e-commerce/navigation/storefront-navbar-account-menu.test.tsx +0 -56
- package/src/blocks/e-commerce/navigation/storefront-navbar-account-menu.tsx +0 -134
- package/src/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.test.tsx +0 -204
- package/src/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.tsx +0 -371
- package/src/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.tsx +0 -96
- package/src/blocks/e-commerce/navigation/storefront-navbar-search-bar.tsx +0 -52
- package/src/blocks/e-commerce/navigation/storefront-navbar.test.tsx +0 -264
- package/src/blocks/e-commerce/navigation/storefront-navbar.tsx +0 -604
- package/src/blocks/e-commerce/order-history/order-history-1.tsx +0 -159
- package/src/blocks/e-commerce/order-history/order-history-2.tsx +0 -222
- package/src/blocks/e-commerce/product-categories/category-card-grid.test.tsx +0 -122
- package/src/blocks/e-commerce/product-categories/category-card.test.tsx +0 -68
- package/src/blocks/e-commerce/product-categories/category-card.tsx +0 -172
- package/src/blocks/e-commerce/product-categories/category-grid.test.tsx +0 -67
- package/src/blocks/e-commerce/product-categories/category-shared.tsx +0 -109
- package/src/blocks/e-commerce/product-categories/product-category-grid.tsx +0 -170
- package/src/blocks/e-commerce/product-categories/product-category.test.tsx +0 -266
- package/src/blocks/e-commerce/product-categories/product-category.tsx +0 -462
- package/src/blocks/e-commerce/product-list/product-card.test.tsx +0 -263
- package/src/blocks/e-commerce/product-list/product-card.tsx +0 -447
- package/src/blocks/e-commerce/product-list/product-grid.test.tsx +0 -162
- package/src/blocks/e-commerce/product-list/product-grid.tsx +0 -114
- package/src/blocks/e-commerce/product-list/product-showcase-1.test.tsx +0 -78
- package/src/blocks/e-commerce/product-list/product-showcase-1.tsx +0 -277
- package/src/blocks/e-commerce/product-overview/product-overview-gallery.tsx +0 -71
- package/src/blocks/e-commerce/product-overview/product-overview-lightbox-tab.tsx +0 -116
- package/src/blocks/e-commerce/product-overview/product-overview-reviews-tab.tsx +0 -105
- package/src/blocks/e-commerce/product-overview/product-overview-tabs.tsx +0 -70
- package/src/blocks/e-commerce/product-overview/product-overview.test.tsx +0 -283
- package/src/blocks/e-commerce/product-overview/product-overview.tsx +0 -1186
- package/src/blocks/e-commerce/product-overview/product-quick-view-card.tsx +0 -135
- package/src/blocks/e-commerce/product-overview/product-quick-view-dialog.tsx +0 -393
- package/src/blocks/e-commerce/product-overview/product-quick-view.tsx +0 -136
- package/src/blocks/e-commerce/reviews/review-rating-1-review-form.tsx +0 -133
- package/src/blocks/e-commerce/reviews/review-rating-1.tsx +0 -178
- package/src/blocks/e-commerce/reviews/review-rating-2.tsx +0 -245
- package/src/blocks/e-commerce/shopping-carts/shopping-cart.test.tsx +0 -399
- package/src/blocks/e-commerce/shopping-carts/shopping-cart.tsx +0 -628
- package/src/blocks/e-commerce/store-containers/store-container-1.tsx +0 -29
- package/src/blocks/e-commerce/storefront-hero/storefront-hero.test.tsx +0 -412
- package/src/blocks/e-commerce/storefront-hero/storefront-hero.tsx +0 -1283
- package/src/blocks/marketing/banners/avatar-group.tsx +0 -69
- package/src/blocks/marketing/banners/banner-1.tsx +0 -188
- package/src/blocks/marketing/cta/cta-section-1.tsx +0 -112
- package/src/blocks/marketing/faq/faq-block-1.tsx +0 -45
- package/src/blocks/marketing/features/feature.test.tsx +0 -153
- package/src/blocks/marketing/features/feature.tsx +0 -195
- package/src/blocks/marketing/footers/footer-section-accessibility.test.tsx +0 -118
- package/src/blocks/marketing/footers/footer-section-actions.test.tsx +0 -131
- package/src/blocks/marketing/footers/footer-section-data.test.tsx +0 -127
- package/src/blocks/marketing/footers/footer-section-native-links.test.tsx +0 -100
- package/src/blocks/marketing/footers/footer-section-public-api.test.tsx +0 -11
- package/src/blocks/marketing/footers/footer-section.test.tsx +0 -46
- package/src/blocks/marketing/footers/footer-section.tsx +0 -532
- package/src/blocks/marketing/hero-sections/avatar-group.tsx +0 -86
- package/src/blocks/marketing/hero-sections/hero-section-1.tsx +0 -135
- package/src/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.tsx +0 -52
- package/src/blocks/marketing/logo-clouds/logo-cloud-1.tsx +0 -56
- package/src/blocks/marketing/navbars/navbar-public-api.test.tsx +0 -57
- package/src/blocks/marketing/navbars/navbar.mega.test.tsx +0 -149
- package/src/blocks/marketing/navbars/navbar.test.tsx +0 -155
- package/src/blocks/marketing/navbars/navbar.tsx +0 -735
- package/src/blocks/marketing/pricing/pricing-section-1.tsx +0 -94
- package/src/blocks/marketing/statistics/statistic-1.tsx +0 -93
- package/src/blocks/marketing/testimonials/testimonial-section.test.tsx +0 -171
- package/src/blocks/marketing/testimonials/testimonial-section.tsx +0 -237
- package/src/blocks/shared/reaction-toggle.tsx +0 -145
- package/src/hooks/use-mobile.ts +0 -19
- package/src/index.ts +0 -284
- package/src/lib/cart.test.ts +0 -15
- package/src/lib/contracts-curated.test.ts +0 -225
- package/src/lib/contracts-server-boundary.test.ts +0 -52
- package/src/lib/contracts.test.ts +0 -228
- package/src/lib/contracts.ts +0 -857
- package/src/lib/money.test.ts +0 -64
- package/src/lib/money.ts +0 -65
- package/src/lib/types/menu.ts +0 -43
- package/src/lib/types.ts +0 -4
- package/src/lib/utils.ts +0 -10
- package/src/ui/accordion.tsx +0 -65
- package/src/ui/badge.tsx +0 -47
- package/src/ui/breadcrumb.tsx +0 -108
- package/src/ui/button-group.tsx +0 -83
- package/src/ui/button.tsx +0 -63
- package/src/ui/card.tsx +0 -91
- package/src/ui/carousel.tsx +0 -241
- package/src/ui/dialog.tsx +0 -158
- package/src/ui/drawer.tsx +0 -134
- package/src/ui/dropdown-menu.tsx +0 -256
- package/src/ui/empty.tsx +0 -103
- package/src/ui/input-otp.tsx +0 -76
- package/src/ui/label.tsx +0 -23
- package/src/ui/pagination.tsx +0 -127
- package/src/ui/progress.tsx +0 -30
- package/src/ui/radio-group.tsx +0 -44
- package/src/ui/select.tsx +0 -189
- package/src/ui/separator.tsx +0 -27
- package/src/ui/sheet.tsx +0 -142
- package/src/ui/sidebar.tsx +0 -726
- package/src/ui/skeleton.tsx +0 -13
- package/src/ui/table.tsx +0 -115
- package/src/ui/toggle-group.tsx +0 -83
- package/src/ui/tooltip.tsx +0 -56
- package/tsconfig.build.json +0 -12
- package/tsconfig.json +0 -20
- package/tsup.config.ts +0 -19
- package/vitest.config.ts +0 -17
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/blocks/e-commerce/category-filters/category-listing.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useId, useState, type ReactNode } from 'react'\nimport { Search, SlidersHorizontal, X } from 'lucide-react'\n\nimport { Badge } from '../../../ui/badge'\nimport { Button } from '../../../ui/button'\nimport { Drawer, DrawerContent, DrawerHeader, DrawerTitle } from '../../../ui/drawer'\nimport { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyTitle } from '../../../ui/empty'\nimport { Input } from '../../../ui/input'\nimport { Label } from '../../../ui/label'\nimport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n} from '../../../ui/pagination'\nimport { RadioGroup, RadioGroupItem } from '../../../ui/radio-group'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../../ui/select'\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '../../../ui/sheet'\nimport { Skeleton } from '../../../ui/skeleton'\nimport { cn } from '../../../lib/utils'\nimport type { ProductPresentation } from '../../../lib/contracts'\n\nimport { ProductCard } from '../product-list/product-card'\n\nimport { CategoryListingFilterFields } from './category-listing-filter-fields'\n\n/** The bounded presentation surface. The data contract and callbacks are identical. */\nexport type CategoryListingPresentation = 'sidebar' | 'toolbar'\n\nexport interface CategoryListingOption {\n id: string\n label: string\n}\n\nexport interface CategoryListingPriceRange {\n min: number\n max: number\n step: number\n}\n\nexport interface CategoryListingSortOption {\n value: string\n label: string\n}\n\n/**\n * A provider-backed facet value. `count` is rendered only when it is a real\n * non-negative number — a true zero is preserved, never recomputed or summed.\n */\nexport interface CategoryListingFacetOption {\n value: string\n label: string\n count?: number\n}\n\n/**\n * A generic facet group. The block never derives sector-specific fields\n * (frame size, colourway, range…) and never invents groups or options.\n */\nexport interface CategoryListingFacetGroup {\n id: string\n label: string\n options: CategoryListingFacetOption[]\n}\n\n/** The absolute canonical filter set emitted upward. */\nexport interface CategoryListingFilters {\n categories: string[]\n collections: string[]\n priceRange?: [number, number]\n facets?: Record<string, string[]>\n}\n\n/**\n * A typed catalog-query error the listing renders for repair. It mirrors the\n * runtime boundary error: `fields` names the exact raw parameters to remove and\n * `feature` is present only for `unmounted-capability`. The block never builds a\n * host URL — it emits the fields through `onRepair`.\n */\nexport interface CategoryListingQueryError {\n code: 'invalid-query' | 'unsupported-query' | 'unmounted-capability'\n /** Exact raw URL parameter names that must be removed to repair the query. */\n fields: string[]\n message?: string\n feature?: 'catalog-search' | 'category-filters'\n}\n\n/**\n * The observable listing status. The host derives it from the URL boundary and\n * the provider outcome; the block only renders it. Distinct states stay\n * distinct — a valid empty result is never shown as an error and a raw failure\n * is never swallowed as empty.\n */\nexport type CategoryListingStatus =\n | { state: 'loading' }\n | { state: 'ready' }\n | { state: 'empty' }\n | { state: 'invalid-query'; error: CategoryListingQueryError }\n | { state: 'unsupported-query'; error: CategoryListingQueryError }\n | { state: 'unmounted-capability'; error: CategoryListingQueryError }\n | { state: 'error'; message?: string }\n\n/** The kind of canonical filter an active chip represents. */\nexport type CategoryListingActiveFilterKind =\n | 'text'\n | 'category'\n | 'collection'\n | 'price'\n | 'attribute'\n\n/**\n * A removable active-filter chip. Built only from the actual canonical query:\n * `params` are the raw URL parameter names carrying the filter and `value` is\n * the specific list value to drop.\n */\nexport interface CategoryListingActiveFilter {\n /** Stable identity for React keys and removal callbacks. */\n id: string\n kind: CategoryListingActiveFilterKind\n /** Human-readable label shown on the chip. */\n label: string\n /** Raw URL parameter names that carry this filter. */\n params: string[]\n /** The specific list value this chip removes; absent for scalar filters. */\n value?: string\n}\n\nexport interface CategoryListingProps {\n /** Bounded presentation option; defaults to `sidebar`. */\n presentation?: CategoryListingPresentation\n\n /** Exactly the provider-paged products for the current page. Never re-paginated. */\n products: ProductPresentation[]\n pagination: (number | string)[]\n\n // ── Controlled canonical-query values ─────────────────────────────────────\n // The listing owns no private query state: these values are authoritative and\n // every interaction reports the absolute next value through a callback.\n searchValue: string\n selectedCategories: string[]\n selectedCollections: string[]\n selectedSort: string\n selectedPage: number\n selectedPageSize: number\n selectedPriceRange?: [number, number]\n selectedFacets?: Record<string, string[]>\n\n // ── Provider-declared option sets ─────────────────────────────────────────\n categories?: CategoryListingOption[]\n collections?: CategoryListingOption[]\n sortOptions?: CategoryListingSortOption[]\n /**\n * Real backend-provided price range only. When absent the price control is\n * omitted; the block never falls back to a fabricated `0..1000` default.\n */\n priceRange?: CategoryListingPriceRange\n /** Generic provider-backed facet groups; a group renders only when non-empty. */\n facets?: CategoryListingFacetGroup[]\n viewOptions?: number[]\n\n // ── Per-control visibility (selected from installed features) ─────────────\n showSearch: boolean\n showFilters: boolean\n showSort: boolean\n /** Price remains gated on a real `priceRange` even when this is true. */\n showPrice?: boolean\n\n // ── Observable listing states + active-filter chips ───────────────────────\n status: CategoryListingStatus\n activeFilters: CategoryListingActiveFilter[]\n\n // ── Copy ──────────────────────────────────────────────────────────────────\n filtersTitle?: string\n applyFiltersLabel?: string\n selectedText?: string\n clearAllLabel?: string\n priceRangeTitle?: string\n minLabel?: string\n maxLabel?: string\n categoriesTitle?: string\n collectionsTitle?: string\n sortTitle?: string\n viewLabel?: string\n viewPlaceholder?: string\n sortPlaceholder?: string\n productsTitle?: string\n currentLabel?: string\n searchLabel?: string\n searchPlaceholder?: string\n loadingLabel?: string\n emptyTitle?: string\n emptyDescription?: string\n clearFiltersLabel?: string\n invalidQueryTitle?: string\n unsupportedQueryTitle?: string\n unmountedCapabilityTitle?: string\n errorTitle?: string\n errorDescription?: string\n repairLabel?: string\n retryLabel?: string\n activeFiltersTitle?: string\n removeFilterLabel?: string\n\n // ── Emit-only callbacks: the block never fetches or rewrites the URL ─────\n onProductClick?: (product: ProductPresentation) => void\n onPageChange?: (page: number) => void\n onPageSizeChange?: (pageSize: number) => void\n onSortChange?: (sort: string) => void\n onFilterChange?: (next: CategoryListingFilters) => void\n onSearchChange?: (value: string) => void\n /** Empty-state clear: drops the active filters but never base scope/sort/pageSize. */\n onClearFilters?: () => void\n /** Invalid/unsupported/unmounted repair: receives the exact bad fields to remove. */\n onRepair?: (remove: string[]) => void\n /** Query/network failure retry: preserves the current query/input. */\n onRetry?: () => void\n /** Removes a single active-filter chip. */\n onRemoveFilter?: (filter: CategoryListingActiveFilter) => void\n}\n\nconst DEFAULT_VIEW_OPTIONS = [10, 25, 50, 100]\n\n/**\n * Pure selection reducer shared by checkbox handlers. Exported so the emitted\n * contract is unit-testable without a DOM (this package's tests render with\n * `react-dom/server`).\n */\nexport function toggleFilterValue(\n current: readonly string[],\n value: string,\n checked: boolean,\n): string[] {\n return checked ? [...current, value] : current.filter(candidate => candidate !== value)\n}\n\n/** Assemble the typed absolute filter change emitted upward. */\nexport function buildFilterChange(input: {\n categories: string[]\n collections: string[]\n priceRange?: [number, number]\n facets?: Record<string, string[]>\n}): CategoryListingFilters {\n const change: CategoryListingFilters = {\n categories: input.categories,\n collections: input.collections,\n }\n if (input.priceRange) change.priceRange = input.priceRange\n if (input.facets) change.facets = input.facets\n return change\n}\n\n/**\n * Reconcile the controlled search draft with the URL-backed `searchValue`.\n *\n * The URL is authoritative, but it only updates after an async server\n * navigation. Binding the input directly to that lagging prop makes React reset\n * it to the previous server value on every re-render, so fast typing loses every\n * character but the last. This pure function keeps a local draft authoritative\n * while the shopper is typing and adopts an external `searchValue`\n * (navigation / reload / back-forward) only when no uncommitted edit is pending.\n */\nexport function reconcileSearchDraft(input: {\n searchValue?: string\n prevSearchValue?: string\n draft: string\n}): { draft: string; prevSearchValue?: string } | null {\n const { searchValue, prevSearchValue, draft } = input\n if (searchValue === undefined || searchValue === prevSearchValue) return null\n const clean = prevSearchValue === undefined || draft === prevSearchValue\n return { draft: clean ? searchValue : draft, prevSearchValue: searchValue }\n}\n\nexport interface CategoryListingStatusViewProps {\n status: CategoryListingStatus\n activeFilters?: CategoryListingActiveFilter[]\n activeFiltersTitle?: string\n removeFilterLabel?: string\n loadingLabel?: string\n emptyTitle?: string\n emptyDescription?: string\n clearFiltersLabel?: string\n invalidQueryTitle?: string\n unsupportedQueryTitle?: string\n unmountedCapabilityTitle?: string\n errorTitle?: string\n errorDescription?: string\n repairLabel?: string\n retryLabel?: string\n onClearFilters?: () => void\n onRepair?: (remove: string[]) => void\n onRetry?: () => void\n onRemoveFilter?: (filter: CategoryListingActiveFilter) => void\n}\n\n/** Human-readable description naming the exact offending parameters. */\nfunction describeQueryError(\n error: CategoryListingQueryError,\n state: 'invalid-query' | 'unsupported-query' | 'unmounted-capability',\n): string {\n const fields = error.fields.join(', ')\n if (state === 'unmounted-capability' && error.feature) {\n return `${fields} pertenece a la función «${error.feature}», que no está instalada.`\n }\n return error.message ?? `Parámetros: ${fields}`\n}\n\n/**\n * Hooks-free presentation of the observable listing states and the removable\n * active-filter chips. Kept separate from `CategoryListing` so the interaction\n * contract (clear / repair / retry / chip removal) is testable by invoking the\n * rendered handlers without a DOM. It renders no products and performs no fetch.\n */\nexport function CategoryListingStatusView({\n status,\n activeFilters = [],\n activeFiltersTitle = 'Filtros activos',\n removeFilterLabel = 'Quitar filtro',\n loadingLabel = 'Cargando productos',\n emptyTitle = 'Sin resultados',\n emptyDescription = 'Ningún producto coincide con los filtros activos.',\n clearFiltersLabel = 'Limpiar filtros',\n invalidQueryTitle = 'Consulta no válida',\n unsupportedQueryTitle = 'Filtro no disponible',\n unmountedCapabilityTitle = 'Función no disponible',\n errorTitle = 'No se pudieron cargar los productos',\n errorDescription = 'Inténtalo de nuevo.',\n repairLabel = 'Corregir búsqueda',\n retryLabel = 'Reintentar',\n onClearFilters,\n onRepair,\n onRetry,\n onRemoveFilter,\n}: CategoryListingStatusViewProps) {\n const chips =\n activeFilters.length > 0 ? (\n <div role='group' aria-label={activeFiltersTitle} className='flex flex-wrap items-center gap-2'>\n {activeFilters.map(filter => (\n <Badge key={filter.id} variant='secondary' className='gap-1 pr-1'>\n <span>{filter.label}</span>\n <Button\n type='button'\n variant='ghost'\n size='icon-xs'\n className='size-4 cursor-pointer rounded-full'\n aria-label={`${removeFilterLabel}: ${filter.label}`}\n data-action='remove-filter'\n data-filter-id={filter.id}\n onClick={() => onRemoveFilter?.(filter)}\n >\n <X aria-hidden='true' />\n </Button>\n </Badge>\n ))}\n </div>\n ) : null\n\n if (status.state === 'ready') return chips\n\n let body: ReactNode\n switch (status.state) {\n case 'loading':\n body = (\n <div role='status' aria-live='polite' aria-busy='true' className='flex flex-col gap-4'>\n <span className='sr-only'>{loadingLabel}</span>\n <div className='grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-6 lg:grid-cols-3'>\n {Array.from({ length: 6 }, (_, index) => (\n <div key={index} className='flex flex-col gap-2'>\n <Skeleton className='aspect-3/4 w-full rounded-lg' />\n <Skeleton className='h-4 w-3/4' />\n <Skeleton className='h-4 w-1/3' />\n </div>\n ))}\n </div>\n </div>\n )\n break\n case 'empty':\n body = (\n <Empty role='status'>\n <EmptyHeader>\n <EmptyTitle>{emptyTitle}</EmptyTitle>\n <EmptyDescription>{emptyDescription}</EmptyDescription>\n </EmptyHeader>\n {onClearFilters ? (\n <EmptyContent>\n <Button type='button' variant='outline' data-action='clear-filters' onClick={() => onClearFilters()}>\n {clearFiltersLabel}\n </Button>\n </EmptyContent>\n ) : null}\n </Empty>\n )\n break\n case 'invalid-query':\n case 'unsupported-query':\n case 'unmounted-capability':\n body = (\n <Empty role='alert'>\n <EmptyHeader>\n <EmptyTitle>\n {status.state === 'invalid-query'\n ? invalidQueryTitle\n : status.state === 'unsupported-query'\n ? unsupportedQueryTitle\n : unmountedCapabilityTitle}\n </EmptyTitle>\n <EmptyDescription>{describeQueryError(status.error, status.state)}</EmptyDescription>\n </EmptyHeader>\n {onRepair ? (\n <EmptyContent>\n <Button\n type='button'\n variant='outline'\n data-action='repair'\n onClick={() => onRepair(status.error.fields)}\n >\n {repairLabel}\n </Button>\n </EmptyContent>\n ) : null}\n </Empty>\n )\n break\n case 'error':\n body = (\n <Empty role='alert'>\n <EmptyHeader>\n <EmptyTitle>{errorTitle}</EmptyTitle>\n <EmptyDescription>{status.message ?? errorDescription}</EmptyDescription>\n </EmptyHeader>\n {onRetry ? (\n <EmptyContent>\n <Button type='button' variant='default' data-action='retry' onClick={() => onRetry()}>\n {retryLabel}\n </Button>\n </EmptyContent>\n ) : null}\n </Empty>\n )\n break\n }\n\n return (\n <div className='flex flex-col gap-4'>\n {chips}\n {body}\n </div>\n )\n}\n\nexport function CategoryListing({\n presentation = 'sidebar',\n products,\n pagination,\n searchValue,\n selectedCategories,\n selectedCollections,\n selectedSort,\n selectedPage,\n selectedPageSize,\n selectedPriceRange,\n selectedFacets = {},\n categories = [],\n collections = [],\n sortOptions = [],\n priceRange: priceRangeConfig,\n facets = [],\n viewOptions = DEFAULT_VIEW_OPTIONS,\n showSearch,\n showFilters,\n showSort,\n showPrice = true,\n status,\n activeFilters,\n filtersTitle = 'Filtros',\n applyFiltersLabel = 'Aplicar filtros',\n selectedText = 'Filtros',\n clearAllLabel = 'Restablecer',\n priceRangeTitle = 'Rango de precio',\n minLabel = 'Mínimo',\n maxLabel = 'Máximo',\n categoriesTitle = 'Categoría',\n collectionsTitle = 'Colección',\n sortTitle = 'Ordenar por',\n viewLabel = 'Ver',\n viewPlaceholder = 'Seleccionar',\n sortPlaceholder = 'Ordenar por',\n productsTitle = 'Productos',\n currentLabel = '(actual)',\n searchLabel = 'Buscar',\n searchPlaceholder = 'Buscar',\n loadingLabel,\n emptyTitle,\n emptyDescription,\n clearFiltersLabel,\n invalidQueryTitle,\n unsupportedQueryTitle,\n unmountedCapabilityTitle,\n errorTitle,\n errorDescription,\n repairLabel,\n retryLabel,\n activeFiltersTitle,\n removeFilterLabel,\n onProductClick,\n onPageChange,\n onPageSizeChange,\n onSortChange,\n onFilterChange,\n onSearchChange,\n onClearFilters,\n onRepair,\n onRetry,\n onRemoveFilter,\n}: CategoryListingProps) {\n const searchInputId = useId()\n const [draftSearch, setDraftSearch] = useState(searchValue)\n const [prevSearchValue, setPrevSearchValue] = useState<string | undefined>(searchValue)\n const [isSheetOpen, setIsSheetOpen] = useState(false)\n const [isFilterDrawerOpen, setIsFilterDrawerOpen] = useState(false)\n const [isSortDrawerOpen, setIsSortDrawerOpen] = useState(false)\n\n const reconciledSearch = reconcileSearchDraft({ searchValue, prevSearchValue, draft: draftSearch })\n if (reconciledSearch) {\n setPrevSearchValue(reconciledSearch.prevSearchValue)\n if (reconciledSearch.draft !== draftSearch) setDraftSearch(reconciledSearch.draft)\n }\n\n // The desktop surface owns the filters; close every mobile overlay when the\n // viewport crosses into the desktop layout.\n useEffect(() => {\n const mediaQuery = window.matchMedia('(min-width: 1024px)')\n const handleChange = (event: MediaQueryListEvent) => {\n if (event.matches) {\n setIsSheetOpen(false)\n setIsFilterDrawerOpen(false)\n setIsSortDrawerOpen(false)\n }\n }\n mediaQuery.addEventListener('change', handleChange)\n return () => mediaQuery.removeEventListener('change', handleChange)\n }, [])\n\n const priceRangeValue: [number, number] = priceRangeConfig\n ? (selectedPriceRange ?? [priceRangeConfig.min, priceRangeConfig.max])\n : [0, 0]\n\n const emitFilters = (overrides: Partial<CategoryListingFilters> = {}) => {\n onFilterChange?.(\n buildFilterChange({\n categories: selectedCategories,\n collections: selectedCollections,\n ...(priceRangeConfig ? { priceRange: priceRangeValue } : {}),\n facets: selectedFacets,\n ...overrides,\n }),\n )\n }\n\n const handleCategoryChange = (category: string, checked: boolean) => {\n emitFilters({ categories: toggleFilterValue(selectedCategories, category, checked) })\n }\n\n const handleCollectionChange = (collection: string, checked: boolean) => {\n emitFilters({ collections: toggleFilterValue(selectedCollections, collection, checked) })\n }\n\n const handleFacetChange = (group: CategoryListingFacetGroup, value: string, checked: boolean) => {\n const current = selectedFacets[group.id] ?? []\n const nextValues = toggleFilterValue(current, value, checked)\n const nextFacets: Record<string, string[]> = { ...selectedFacets }\n if (nextValues.length > 0) nextFacets[group.id] = nextValues\n else delete nextFacets[group.id]\n emitFilters({ facets: nextFacets })\n }\n\n const handlePriceChange = (next: [number, number]) => {\n emitFilters({ priceRange: next })\n }\n\n const handleClearAll = () => {\n emitFilters({\n categories: [],\n collections: [],\n ...(priceRangeConfig ? { priceRange: [priceRangeConfig.min, priceRangeConfig.max] as [number, number] } : {}),\n facets: {},\n })\n }\n\n const handlePageSizeChange = (size: number) => {\n if (Number.isFinite(size)) onPageSizeChange?.(size)\n }\n\n const handlePageChange = (page: number | string) => {\n if (page === '...') return\n const numeric = Number(page)\n if (Number.isFinite(numeric)) onPageChange?.(numeric)\n }\n\n const handleSortChange = (sort: string) => {\n onSortChange?.(sort)\n }\n\n const handleSearchChange = (text: string) => {\n setDraftSearch(text)\n onSearchChange?.(text)\n }\n\n const fields = (\n <CategoryListingFilterFields\n selectedText={selectedText}\n clearAllLabel={clearAllLabel}\n priceRangeTitle={priceRangeTitle}\n priceRange={priceRangeValue}\n priceRangeConfig={showPrice ? priceRangeConfig : undefined}\n minLabel={minLabel}\n maxLabel={maxLabel}\n onPriceChange={handlePriceChange}\n categoriesTitle={categoriesTitle}\n categories={categories}\n selectedCategories={selectedCategories}\n onCategoryChange={handleCategoryChange}\n collectionsTitle={collectionsTitle}\n collections={collections}\n selectedCollections={selectedCollections}\n onCollectionChange={handleCollectionChange}\n facets={facets}\n selectedFacets={selectedFacets}\n onFacetChange={handleFacetChange}\n onClearAll={handleClearAll}\n />\n )\n\n const sortControl = (ariaLabel: string) =>\n showSort && sortOptions.length > 0 ? (\n <Select value={selectedSort} onValueChange={handleSortChange}>\n <SelectTrigger className='h-8 w-[180px]' aria-label={ariaLabel}>\n <SelectValue placeholder={sortPlaceholder} />\n </SelectTrigger>\n <SelectContent>\n {sortOptions.map(option => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : null\n\n const searchControl = showSearch ? (\n <div className='relative w-full sm:w-64'>\n <label htmlFor={searchInputId} className='sr-only'>\n {searchLabel}\n </label>\n <Search\n aria-hidden='true'\n className='text-muted-foreground pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2'\n />\n <Input\n id={searchInputId}\n type='search'\n value={draftSearch}\n onChange={event => handleSearchChange(event.target.value)}\n placeholder={searchPlaceholder}\n aria-label={searchLabel}\n className='h-8 pl-8'\n />\n </div>\n ) : null\n\n const pageSizeControl =\n viewOptions.length > 0 ? (\n <div className='hidden items-center gap-2 sm:flex'>\n <span className='text-sm'>{viewLabel}</span>\n <Select\n value={String(selectedPageSize)}\n onValueChange={value => {\n const option = viewOptions.find(candidate => String(candidate) === value)\n handlePageSizeChange(option ?? Number(value))\n }}\n >\n <SelectTrigger className='h-8 w-[100px]' aria-label={viewLabel}>\n <SelectValue placeholder={viewPlaceholder} />\n </SelectTrigger>\n <SelectContent>\n {viewOptions.map(option => (\n <SelectItem key={option} value={String(option)}>\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n ) : null\n\n const statusView = (\n <CategoryListingStatusView\n status={status}\n activeFilters={activeFilters}\n loadingLabel={loadingLabel}\n emptyTitle={emptyTitle}\n emptyDescription={emptyDescription}\n clearFiltersLabel={clearFiltersLabel}\n invalidQueryTitle={invalidQueryTitle}\n unsupportedQueryTitle={unsupportedQueryTitle}\n unmountedCapabilityTitle={unmountedCapabilityTitle}\n errorTitle={errorTitle}\n errorDescription={errorDescription}\n repairLabel={repairLabel}\n retryLabel={retryLabel}\n activeFiltersTitle={activeFiltersTitle}\n removeFilterLabel={removeFilterLabel}\n onClearFilters={onClearFilters}\n onRepair={onRepair}\n onRetry={onRetry}\n onRemoveFilter={onRemoveFilter}\n />\n )\n\n const results =\n status.state === 'ready' ? (\n <section aria-labelledby='products-heading' className='flex flex-col gap-6'>\n <h2 id='products-heading' className='sr-only'>\n {productsTitle}\n </h2>\n <ul\n data-slot='category-listing-products'\n className={cn(\n 'grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-6',\n presentation === 'sidebar' ? 'lg:grid-cols-3' : 'lg:grid-cols-4',\n )}\n >\n {products.map(product => (\n <li key={product.id}>\n <ProductCard\n item={product}\n presentation='minimal'\n hideAddToCart\n onProductClick={onProductClick}\n />\n </li>\n ))}\n </ul>\n\n {pagination.length > 0 ? (\n <Pagination aria-label='Paginación'>\n <PaginationContent>\n {pagination.map((page, index) =>\n page === '...' ? (\n <PaginationEllipsis key={`${page}-${index}`} />\n ) : (\n <PaginationItem key={page}>\n <Button\n type='button'\n variant={selectedPage === page ? 'outline' : 'ghost'}\n size='icon'\n data-slot='pagination-link'\n data-active={selectedPage === page}\n aria-current={selectedPage === page ? 'page' : undefined}\n className='size-8 cursor-pointer p-0'\n onClick={() => handlePageChange(page)}\n >\n {page}\n {selectedPage === page && <span className='sr-only'>{currentLabel}</span>}\n </Button>\n </PaginationItem>\n ),\n )}\n </PaginationContent>\n </Pagination>\n ) : null}\n </section>\n ) : null\n\n return (\n <div className='mx-auto w-full max-w-7xl px-4 py-8 sm:px-6 lg:px-8'>\n <div className={cn('flex flex-col gap-8', presentation === 'sidebar' && 'lg:flex-row')}>\n {presentation === 'sidebar' && showFilters ? (\n <aside className='hidden w-full flex-none lg:block lg:w-72'>\n <div className='max-h-100vh sticky top-4 overflow-y-auto'>\n <div className='flex flex-col gap-6 pb-6'>{fields}</div>\n </div>\n </aside>\n ) : null}\n\n <main className='flex min-w-0 flex-1 flex-col gap-6'>\n {presentation === 'toolbar' ? (\n <>\n <div className='bg-background/95 supports-[backdrop-filter]:bg-background/80 sticky top-0 z-10 -mx-4 flex items-center gap-2 border-b px-4 py-2 backdrop-blur lg:hidden'>\n {showFilters ? (\n <Button\n type='button'\n variant='outline'\n size='sm'\n className='h-9 flex-1 cursor-pointer justify-start'\n onClick={() => setIsFilterDrawerOpen(true)}\n >\n <SlidersHorizontal aria-hidden='true' />\n {filtersTitle}\n {activeFilters.length > 0 ? (\n <Badge variant='secondary' className='ms-auto'>\n {activeFilters.length}\n </Badge>\n ) : null}\n </Button>\n ) : null}\n {showSort && sortOptions.length > 0 ? (\n <Button\n type='button'\n variant='outline'\n size='sm'\n className='h-9 cursor-pointer'\n aria-label={sortTitle}\n onClick={() => setIsSortDrawerOpen(true)}\n >\n {sortTitle}\n </Button>\n ) : null}\n </div>\n\n <div className='hidden items-center gap-3 lg:flex'>\n {showFilters ? (\n <Button\n type='button'\n variant='outline'\n size='sm'\n className='h-8 cursor-pointer'\n onClick={() => setIsFilterDrawerOpen(true)}\n >\n <SlidersHorizontal aria-hidden='true' />\n {filtersTitle}\n {activeFilters.length > 0 ? (\n <Badge variant='secondary'>{activeFilters.length}</Badge>\n ) : null}\n </Button>\n ) : null}\n <div className='ms-auto'>{sortControl(sortTitle)}</div>\n </div>\n </>\n ) : null}\n\n <div className='flex flex-wrap items-center justify-between gap-4'>\n <div className='flex flex-1 items-center gap-4'>\n {presentation === 'sidebar' && showFilters ? (\n <Sheet open={isSheetOpen} onOpenChange={setIsSheetOpen}>\n <SheetTrigger asChild>\n <Button\n variant='outline'\n size='sm'\n className='h-8 cursor-pointer px-3 text-xs lg:hidden'\n >\n <SlidersHorizontal aria-hidden='true' />\n {filtersTitle}\n </Button>\n </SheetTrigger>\n <SheetContent side='left' className='w-full p-0 sm:w-[380px] lg:hidden'>\n <SheetHeader className='border-b px-6 py-4'>\n <SheetTitle className='text-lg'>{filtersTitle}</SheetTitle>\n </SheetHeader>\n <div className='h-[calc(100vh-4rem)] overflow-y-auto p-6'>\n <div className='flex flex-col gap-6'>{fields}</div>\n </div>\n </SheetContent>\n </Sheet>\n ) : null}\n {searchControl}\n {pageSizeControl}\n </div>\n {presentation === 'sidebar' ? (\n <div className='flex items-center gap-4'>{sortControl(sortPlaceholder)}</div>\n ) : null}\n </div>\n\n {statusView}\n {results}\n </main>\n </div>\n\n {presentation === 'toolbar' && showFilters ? (\n <Drawer open={isFilterDrawerOpen} onOpenChange={setIsFilterDrawerOpen}>\n <DrawerContent>\n <DrawerHeader>\n <DrawerTitle>{filtersTitle}</DrawerTitle>\n </DrawerHeader>\n <div className='min-h-0 flex-1 overflow-y-auto px-4'>{fields}</div>\n <div className='flex items-center gap-2 border-t p-4 pb-[max(1rem,env(safe-area-inset-bottom))]'>\n <Button type='button' variant='ghost' onClick={handleClearAll}>\n {clearAllLabel}\n </Button>\n <Button type='button' className='flex-1' onClick={() => setIsFilterDrawerOpen(false)}>\n {applyFiltersLabel}\n </Button>\n </div>\n </DrawerContent>\n </Drawer>\n ) : null}\n\n {presentation === 'toolbar' && showSort && sortOptions.length > 0 ? (\n <Drawer open={isSortDrawerOpen} onOpenChange={setIsSortDrawerOpen}>\n <DrawerContent>\n <DrawerHeader>\n <DrawerTitle>{sortTitle}</DrawerTitle>\n </DrawerHeader>\n <div className='px-4 pb-6'>\n <RadioGroup\n value={selectedSort}\n onValueChange={value => {\n if (typeof value === 'string') {\n handleSortChange(value)\n setIsSortDrawerOpen(false)\n }\n }}\n className='gap-3'\n >\n {sortOptions.map(option => (\n <div key={option.value} className='flex items-center gap-2'>\n <RadioGroupItem value={option.value} id={`listing-sort-${option.value}`} />\n <Label htmlFor={`listing-sort-${option.value}`} className='min-h-11 font-normal'>\n {option.label}\n </Label>\n </div>\n ))}\n </RadioGroup>\n </div>\n </DrawerContent>\n </Drawer>\n ) : null}\n </div>\n )\n}\n\nexport default CategoryListing\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,539 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useId, useState } from "react";
|
|
4
|
+
import { Search, SlidersHorizontal, X } from "lucide-react";
|
|
5
|
+
import { Badge } from "../../../ui/badge.mjs";
|
|
6
|
+
import { Button } from "../../../ui/button.mjs";
|
|
7
|
+
import { Drawer, DrawerContent, DrawerHeader, DrawerTitle } from "../../../ui/drawer.mjs";
|
|
8
|
+
import { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyTitle } from "../../../ui/empty.mjs";
|
|
9
|
+
import { Input } from "../../../ui/input.mjs";
|
|
10
|
+
import { Label } from "../../../ui/label.mjs";
|
|
11
|
+
import {
|
|
12
|
+
Pagination,
|
|
13
|
+
PaginationContent,
|
|
14
|
+
PaginationEllipsis,
|
|
15
|
+
PaginationItem
|
|
16
|
+
} from "../../../ui/pagination.mjs";
|
|
17
|
+
import { RadioGroup, RadioGroupItem } from "../../../ui/radio-group.mjs";
|
|
18
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../../../ui/select.mjs";
|
|
19
|
+
import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from "../../../ui/sheet.mjs";
|
|
20
|
+
import { Skeleton } from "../../../ui/skeleton.mjs";
|
|
21
|
+
import { cn } from "../../../lib/utils.mjs";
|
|
22
|
+
import { ProductCard } from "../product-list/product-card.mjs";
|
|
23
|
+
import { CategoryListingFilterFields } from "./category-listing-filter-fields.mjs";
|
|
24
|
+
const DEFAULT_VIEW_OPTIONS = [10, 25, 50, 100];
|
|
25
|
+
function toggleFilterValue(current, value, checked) {
|
|
26
|
+
return checked ? [...current, value] : current.filter((candidate) => candidate !== value);
|
|
27
|
+
}
|
|
28
|
+
function buildFilterChange(input) {
|
|
29
|
+
const change = {
|
|
30
|
+
categories: input.categories,
|
|
31
|
+
collections: input.collections
|
|
32
|
+
};
|
|
33
|
+
if (input.priceRange) change.priceRange = input.priceRange;
|
|
34
|
+
if (input.facets) change.facets = input.facets;
|
|
35
|
+
return change;
|
|
36
|
+
}
|
|
37
|
+
function reconcileSearchDraft(input) {
|
|
38
|
+
const { searchValue, prevSearchValue, draft } = input;
|
|
39
|
+
if (searchValue === void 0 || searchValue === prevSearchValue) return null;
|
|
40
|
+
const clean = prevSearchValue === void 0 || draft === prevSearchValue;
|
|
41
|
+
return { draft: clean ? searchValue : draft, prevSearchValue: searchValue };
|
|
42
|
+
}
|
|
43
|
+
function describeQueryError(error, state) {
|
|
44
|
+
const fields = error.fields.join(", ");
|
|
45
|
+
if (state === "unmounted-capability" && error.feature) {
|
|
46
|
+
return `${fields} pertenece a la funci\xF3n \xAB${error.feature}\xBB, que no est\xE1 instalada.`;
|
|
47
|
+
}
|
|
48
|
+
return error.message ?? `Par\xE1metros: ${fields}`;
|
|
49
|
+
}
|
|
50
|
+
function CategoryListingStatusView({
|
|
51
|
+
status,
|
|
52
|
+
activeFilters = [],
|
|
53
|
+
activeFiltersTitle = "Filtros activos",
|
|
54
|
+
removeFilterLabel = "Quitar filtro",
|
|
55
|
+
loadingLabel = "Cargando productos",
|
|
56
|
+
emptyTitle = "Sin resultados",
|
|
57
|
+
emptyDescription = "Ning\xFAn producto coincide con los filtros activos.",
|
|
58
|
+
clearFiltersLabel = "Limpiar filtros",
|
|
59
|
+
invalidQueryTitle = "Consulta no v\xE1lida",
|
|
60
|
+
unsupportedQueryTitle = "Filtro no disponible",
|
|
61
|
+
unmountedCapabilityTitle = "Funci\xF3n no disponible",
|
|
62
|
+
errorTitle = "No se pudieron cargar los productos",
|
|
63
|
+
errorDescription = "Int\xE9ntalo de nuevo.",
|
|
64
|
+
repairLabel = "Corregir b\xFAsqueda",
|
|
65
|
+
retryLabel = "Reintentar",
|
|
66
|
+
onClearFilters,
|
|
67
|
+
onRepair,
|
|
68
|
+
onRetry,
|
|
69
|
+
onRemoveFilter
|
|
70
|
+
}) {
|
|
71
|
+
const chips = activeFilters.length > 0 ? /* @__PURE__ */ jsx("div", { role: "group", "aria-label": activeFiltersTitle, className: "flex flex-wrap items-center gap-2", children: activeFilters.map((filter) => /* @__PURE__ */ jsxs(Badge, { variant: "secondary", className: "gap-1 pr-1", children: [
|
|
72
|
+
/* @__PURE__ */ jsx("span", { children: filter.label }),
|
|
73
|
+
/* @__PURE__ */ jsx(
|
|
74
|
+
Button,
|
|
75
|
+
{
|
|
76
|
+
type: "button",
|
|
77
|
+
variant: "ghost",
|
|
78
|
+
size: "icon-xs",
|
|
79
|
+
className: "size-4 cursor-pointer rounded-full",
|
|
80
|
+
"aria-label": `${removeFilterLabel}: ${filter.label}`,
|
|
81
|
+
"data-action": "remove-filter",
|
|
82
|
+
"data-filter-id": filter.id,
|
|
83
|
+
onClick: () => onRemoveFilter?.(filter),
|
|
84
|
+
children: /* @__PURE__ */ jsx(X, { "aria-hidden": "true" })
|
|
85
|
+
}
|
|
86
|
+
)
|
|
87
|
+
] }, filter.id)) }) : null;
|
|
88
|
+
if (status.state === "ready") return chips;
|
|
89
|
+
let body;
|
|
90
|
+
switch (status.state) {
|
|
91
|
+
case "loading":
|
|
92
|
+
body = /* @__PURE__ */ jsxs("div", { role: "status", "aria-live": "polite", "aria-busy": "true", className: "flex flex-col gap-4", children: [
|
|
93
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: loadingLabel }),
|
|
94
|
+
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-6 lg:grid-cols-3", children: Array.from({ length: 6 }, (_, index) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
95
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "aspect-3/4 w-full rounded-lg" }),
|
|
96
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-3/4" }),
|
|
97
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-1/3" })
|
|
98
|
+
] }, index)) })
|
|
99
|
+
] });
|
|
100
|
+
break;
|
|
101
|
+
case "empty":
|
|
102
|
+
body = /* @__PURE__ */ jsxs(Empty, { role: "status", children: [
|
|
103
|
+
/* @__PURE__ */ jsxs(EmptyHeader, { children: [
|
|
104
|
+
/* @__PURE__ */ jsx(EmptyTitle, { children: emptyTitle }),
|
|
105
|
+
/* @__PURE__ */ jsx(EmptyDescription, { children: emptyDescription })
|
|
106
|
+
] }),
|
|
107
|
+
onClearFilters ? /* @__PURE__ */ jsx(EmptyContent, { children: /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", "data-action": "clear-filters", onClick: () => onClearFilters(), children: clearFiltersLabel }) }) : null
|
|
108
|
+
] });
|
|
109
|
+
break;
|
|
110
|
+
case "invalid-query":
|
|
111
|
+
case "unsupported-query":
|
|
112
|
+
case "unmounted-capability":
|
|
113
|
+
body = /* @__PURE__ */ jsxs(Empty, { role: "alert", children: [
|
|
114
|
+
/* @__PURE__ */ jsxs(EmptyHeader, { children: [
|
|
115
|
+
/* @__PURE__ */ jsx(EmptyTitle, { children: status.state === "invalid-query" ? invalidQueryTitle : status.state === "unsupported-query" ? unsupportedQueryTitle : unmountedCapabilityTitle }),
|
|
116
|
+
/* @__PURE__ */ jsx(EmptyDescription, { children: describeQueryError(status.error, status.state) })
|
|
117
|
+
] }),
|
|
118
|
+
onRepair ? /* @__PURE__ */ jsx(EmptyContent, { children: /* @__PURE__ */ jsx(
|
|
119
|
+
Button,
|
|
120
|
+
{
|
|
121
|
+
type: "button",
|
|
122
|
+
variant: "outline",
|
|
123
|
+
"data-action": "repair",
|
|
124
|
+
onClick: () => onRepair(status.error.fields),
|
|
125
|
+
children: repairLabel
|
|
126
|
+
}
|
|
127
|
+
) }) : null
|
|
128
|
+
] });
|
|
129
|
+
break;
|
|
130
|
+
case "error":
|
|
131
|
+
body = /* @__PURE__ */ jsxs(Empty, { role: "alert", children: [
|
|
132
|
+
/* @__PURE__ */ jsxs(EmptyHeader, { children: [
|
|
133
|
+
/* @__PURE__ */ jsx(EmptyTitle, { children: errorTitle }),
|
|
134
|
+
/* @__PURE__ */ jsx(EmptyDescription, { children: status.message ?? errorDescription })
|
|
135
|
+
] }),
|
|
136
|
+
onRetry ? /* @__PURE__ */ jsx(EmptyContent, { children: /* @__PURE__ */ jsx(Button, { type: "button", variant: "default", "data-action": "retry", onClick: () => onRetry(), children: retryLabel }) }) : null
|
|
137
|
+
] });
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
|
|
141
|
+
chips,
|
|
142
|
+
body
|
|
143
|
+
] });
|
|
144
|
+
}
|
|
145
|
+
function CategoryListing({
|
|
146
|
+
presentation = "sidebar",
|
|
147
|
+
products,
|
|
148
|
+
pagination,
|
|
149
|
+
searchValue,
|
|
150
|
+
selectedCategories,
|
|
151
|
+
selectedCollections,
|
|
152
|
+
selectedSort,
|
|
153
|
+
selectedPage,
|
|
154
|
+
selectedPageSize,
|
|
155
|
+
selectedPriceRange,
|
|
156
|
+
selectedFacets = {},
|
|
157
|
+
categories = [],
|
|
158
|
+
collections = [],
|
|
159
|
+
sortOptions = [],
|
|
160
|
+
priceRange: priceRangeConfig,
|
|
161
|
+
facets = [],
|
|
162
|
+
viewOptions = DEFAULT_VIEW_OPTIONS,
|
|
163
|
+
showSearch,
|
|
164
|
+
showFilters,
|
|
165
|
+
showSort,
|
|
166
|
+
showPrice = true,
|
|
167
|
+
status,
|
|
168
|
+
activeFilters,
|
|
169
|
+
filtersTitle = "Filtros",
|
|
170
|
+
applyFiltersLabel = "Aplicar filtros",
|
|
171
|
+
selectedText = "Filtros",
|
|
172
|
+
clearAllLabel = "Restablecer",
|
|
173
|
+
priceRangeTitle = "Rango de precio",
|
|
174
|
+
minLabel = "M\xEDnimo",
|
|
175
|
+
maxLabel = "M\xE1ximo",
|
|
176
|
+
categoriesTitle = "Categor\xEDa",
|
|
177
|
+
collectionsTitle = "Colecci\xF3n",
|
|
178
|
+
sortTitle = "Ordenar por",
|
|
179
|
+
viewLabel = "Ver",
|
|
180
|
+
viewPlaceholder = "Seleccionar",
|
|
181
|
+
sortPlaceholder = "Ordenar por",
|
|
182
|
+
productsTitle = "Productos",
|
|
183
|
+
currentLabel = "(actual)",
|
|
184
|
+
searchLabel = "Buscar",
|
|
185
|
+
searchPlaceholder = "Buscar",
|
|
186
|
+
loadingLabel,
|
|
187
|
+
emptyTitle,
|
|
188
|
+
emptyDescription,
|
|
189
|
+
clearFiltersLabel,
|
|
190
|
+
invalidQueryTitle,
|
|
191
|
+
unsupportedQueryTitle,
|
|
192
|
+
unmountedCapabilityTitle,
|
|
193
|
+
errorTitle,
|
|
194
|
+
errorDescription,
|
|
195
|
+
repairLabel,
|
|
196
|
+
retryLabel,
|
|
197
|
+
activeFiltersTitle,
|
|
198
|
+
removeFilterLabel,
|
|
199
|
+
onProductClick,
|
|
200
|
+
onPageChange,
|
|
201
|
+
onPageSizeChange,
|
|
202
|
+
onSortChange,
|
|
203
|
+
onFilterChange,
|
|
204
|
+
onSearchChange,
|
|
205
|
+
onClearFilters,
|
|
206
|
+
onRepair,
|
|
207
|
+
onRetry,
|
|
208
|
+
onRemoveFilter
|
|
209
|
+
}) {
|
|
210
|
+
const searchInputId = useId();
|
|
211
|
+
const [draftSearch, setDraftSearch] = useState(searchValue);
|
|
212
|
+
const [prevSearchValue, setPrevSearchValue] = useState(searchValue);
|
|
213
|
+
const [isSheetOpen, setIsSheetOpen] = useState(false);
|
|
214
|
+
const [isFilterDrawerOpen, setIsFilterDrawerOpen] = useState(false);
|
|
215
|
+
const [isSortDrawerOpen, setIsSortDrawerOpen] = useState(false);
|
|
216
|
+
const reconciledSearch = reconcileSearchDraft({ searchValue, prevSearchValue, draft: draftSearch });
|
|
217
|
+
if (reconciledSearch) {
|
|
218
|
+
setPrevSearchValue(reconciledSearch.prevSearchValue);
|
|
219
|
+
if (reconciledSearch.draft !== draftSearch) setDraftSearch(reconciledSearch.draft);
|
|
220
|
+
}
|
|
221
|
+
useEffect(() => {
|
|
222
|
+
const mediaQuery = window.matchMedia("(min-width: 1024px)");
|
|
223
|
+
const handleChange = (event) => {
|
|
224
|
+
if (event.matches) {
|
|
225
|
+
setIsSheetOpen(false);
|
|
226
|
+
setIsFilterDrawerOpen(false);
|
|
227
|
+
setIsSortDrawerOpen(false);
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
mediaQuery.addEventListener("change", handleChange);
|
|
231
|
+
return () => mediaQuery.removeEventListener("change", handleChange);
|
|
232
|
+
}, []);
|
|
233
|
+
const priceRangeValue = priceRangeConfig ? selectedPriceRange ?? [priceRangeConfig.min, priceRangeConfig.max] : [0, 0];
|
|
234
|
+
const emitFilters = (overrides = {}) => {
|
|
235
|
+
onFilterChange?.(
|
|
236
|
+
buildFilterChange({
|
|
237
|
+
categories: selectedCategories,
|
|
238
|
+
collections: selectedCollections,
|
|
239
|
+
...priceRangeConfig ? { priceRange: priceRangeValue } : {},
|
|
240
|
+
facets: selectedFacets,
|
|
241
|
+
...overrides
|
|
242
|
+
})
|
|
243
|
+
);
|
|
244
|
+
};
|
|
245
|
+
const handleCategoryChange = (category, checked) => {
|
|
246
|
+
emitFilters({ categories: toggleFilterValue(selectedCategories, category, checked) });
|
|
247
|
+
};
|
|
248
|
+
const handleCollectionChange = (collection, checked) => {
|
|
249
|
+
emitFilters({ collections: toggleFilterValue(selectedCollections, collection, checked) });
|
|
250
|
+
};
|
|
251
|
+
const handleFacetChange = (group, value, checked) => {
|
|
252
|
+
const current = selectedFacets[group.id] ?? [];
|
|
253
|
+
const nextValues = toggleFilterValue(current, value, checked);
|
|
254
|
+
const nextFacets = { ...selectedFacets };
|
|
255
|
+
if (nextValues.length > 0) nextFacets[group.id] = nextValues;
|
|
256
|
+
else delete nextFacets[group.id];
|
|
257
|
+
emitFilters({ facets: nextFacets });
|
|
258
|
+
};
|
|
259
|
+
const handlePriceChange = (next) => {
|
|
260
|
+
emitFilters({ priceRange: next });
|
|
261
|
+
};
|
|
262
|
+
const handleClearAll = () => {
|
|
263
|
+
emitFilters({
|
|
264
|
+
categories: [],
|
|
265
|
+
collections: [],
|
|
266
|
+
...priceRangeConfig ? { priceRange: [priceRangeConfig.min, priceRangeConfig.max] } : {},
|
|
267
|
+
facets: {}
|
|
268
|
+
});
|
|
269
|
+
};
|
|
270
|
+
const handlePageSizeChange = (size) => {
|
|
271
|
+
if (Number.isFinite(size)) onPageSizeChange?.(size);
|
|
272
|
+
};
|
|
273
|
+
const handlePageChange = (page) => {
|
|
274
|
+
if (page === "...") return;
|
|
275
|
+
const numeric = Number(page);
|
|
276
|
+
if (Number.isFinite(numeric)) onPageChange?.(numeric);
|
|
277
|
+
};
|
|
278
|
+
const handleSortChange = (sort) => {
|
|
279
|
+
onSortChange?.(sort);
|
|
280
|
+
};
|
|
281
|
+
const handleSearchChange = (text) => {
|
|
282
|
+
setDraftSearch(text);
|
|
283
|
+
onSearchChange?.(text);
|
|
284
|
+
};
|
|
285
|
+
const fields = /* @__PURE__ */ jsx(
|
|
286
|
+
CategoryListingFilterFields,
|
|
287
|
+
{
|
|
288
|
+
selectedText,
|
|
289
|
+
clearAllLabel,
|
|
290
|
+
priceRangeTitle,
|
|
291
|
+
priceRange: priceRangeValue,
|
|
292
|
+
priceRangeConfig: showPrice ? priceRangeConfig : void 0,
|
|
293
|
+
minLabel,
|
|
294
|
+
maxLabel,
|
|
295
|
+
onPriceChange: handlePriceChange,
|
|
296
|
+
categoriesTitle,
|
|
297
|
+
categories,
|
|
298
|
+
selectedCategories,
|
|
299
|
+
onCategoryChange: handleCategoryChange,
|
|
300
|
+
collectionsTitle,
|
|
301
|
+
collections,
|
|
302
|
+
selectedCollections,
|
|
303
|
+
onCollectionChange: handleCollectionChange,
|
|
304
|
+
facets,
|
|
305
|
+
selectedFacets,
|
|
306
|
+
onFacetChange: handleFacetChange,
|
|
307
|
+
onClearAll: handleClearAll
|
|
308
|
+
}
|
|
309
|
+
);
|
|
310
|
+
const sortControl = (ariaLabel) => showSort && sortOptions.length > 0 ? /* @__PURE__ */ jsxs(Select, { value: selectedSort, onValueChange: handleSortChange, children: [
|
|
311
|
+
/* @__PURE__ */ jsx(SelectTrigger, { className: "h-8 w-[180px]", "aria-label": ariaLabel, children: /* @__PURE__ */ jsx(SelectValue, { placeholder: sortPlaceholder }) }),
|
|
312
|
+
/* @__PURE__ */ jsx(SelectContent, { children: sortOptions.map((option) => /* @__PURE__ */ jsx(SelectItem, { value: option.value, children: option.label }, option.value)) })
|
|
313
|
+
] }) : null;
|
|
314
|
+
const searchControl = showSearch ? /* @__PURE__ */ jsxs("div", { className: "relative w-full sm:w-64", children: [
|
|
315
|
+
/* @__PURE__ */ jsx("label", { htmlFor: searchInputId, className: "sr-only", children: searchLabel }),
|
|
316
|
+
/* @__PURE__ */ jsx(
|
|
317
|
+
Search,
|
|
318
|
+
{
|
|
319
|
+
"aria-hidden": "true",
|
|
320
|
+
className: "text-muted-foreground pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2"
|
|
321
|
+
}
|
|
322
|
+
),
|
|
323
|
+
/* @__PURE__ */ jsx(
|
|
324
|
+
Input,
|
|
325
|
+
{
|
|
326
|
+
id: searchInputId,
|
|
327
|
+
type: "search",
|
|
328
|
+
value: draftSearch,
|
|
329
|
+
onChange: (event) => handleSearchChange(event.target.value),
|
|
330
|
+
placeholder: searchPlaceholder,
|
|
331
|
+
"aria-label": searchLabel,
|
|
332
|
+
className: "h-8 pl-8"
|
|
333
|
+
}
|
|
334
|
+
)
|
|
335
|
+
] }) : null;
|
|
336
|
+
const pageSizeControl = viewOptions.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "hidden items-center gap-2 sm:flex", children: [
|
|
337
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm", children: viewLabel }),
|
|
338
|
+
/* @__PURE__ */ jsxs(
|
|
339
|
+
Select,
|
|
340
|
+
{
|
|
341
|
+
value: String(selectedPageSize),
|
|
342
|
+
onValueChange: (value) => {
|
|
343
|
+
const option = viewOptions.find((candidate) => String(candidate) === value);
|
|
344
|
+
handlePageSizeChange(option ?? Number(value));
|
|
345
|
+
},
|
|
346
|
+
children: [
|
|
347
|
+
/* @__PURE__ */ jsx(SelectTrigger, { className: "h-8 w-[100px]", "aria-label": viewLabel, children: /* @__PURE__ */ jsx(SelectValue, { placeholder: viewPlaceholder }) }),
|
|
348
|
+
/* @__PURE__ */ jsx(SelectContent, { children: viewOptions.map((option) => /* @__PURE__ */ jsx(SelectItem, { value: String(option), children: option }, option)) })
|
|
349
|
+
]
|
|
350
|
+
}
|
|
351
|
+
)
|
|
352
|
+
] }) : null;
|
|
353
|
+
const statusView = /* @__PURE__ */ jsx(
|
|
354
|
+
CategoryListingStatusView,
|
|
355
|
+
{
|
|
356
|
+
status,
|
|
357
|
+
activeFilters,
|
|
358
|
+
loadingLabel,
|
|
359
|
+
emptyTitle,
|
|
360
|
+
emptyDescription,
|
|
361
|
+
clearFiltersLabel,
|
|
362
|
+
invalidQueryTitle,
|
|
363
|
+
unsupportedQueryTitle,
|
|
364
|
+
unmountedCapabilityTitle,
|
|
365
|
+
errorTitle,
|
|
366
|
+
errorDescription,
|
|
367
|
+
repairLabel,
|
|
368
|
+
retryLabel,
|
|
369
|
+
activeFiltersTitle,
|
|
370
|
+
removeFilterLabel,
|
|
371
|
+
onClearFilters,
|
|
372
|
+
onRepair,
|
|
373
|
+
onRetry,
|
|
374
|
+
onRemoveFilter
|
|
375
|
+
}
|
|
376
|
+
);
|
|
377
|
+
const results = status.state === "ready" ? /* @__PURE__ */ jsxs("section", { "aria-labelledby": "products-heading", className: "flex flex-col gap-6", children: [
|
|
378
|
+
/* @__PURE__ */ jsx("h2", { id: "products-heading", className: "sr-only", children: productsTitle }),
|
|
379
|
+
/* @__PURE__ */ jsx(
|
|
380
|
+
"ul",
|
|
381
|
+
{
|
|
382
|
+
"data-slot": "category-listing-products",
|
|
383
|
+
className: cn(
|
|
384
|
+
"grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-6",
|
|
385
|
+
presentation === "sidebar" ? "lg:grid-cols-3" : "lg:grid-cols-4"
|
|
386
|
+
),
|
|
387
|
+
children: products.map((product) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
|
|
388
|
+
ProductCard,
|
|
389
|
+
{
|
|
390
|
+
item: product,
|
|
391
|
+
presentation: "minimal",
|
|
392
|
+
hideAddToCart: true,
|
|
393
|
+
onProductClick
|
|
394
|
+
}
|
|
395
|
+
) }, product.id))
|
|
396
|
+
}
|
|
397
|
+
),
|
|
398
|
+
pagination.length > 0 ? /* @__PURE__ */ jsx(Pagination, { "aria-label": "Paginaci\xF3n", children: /* @__PURE__ */ jsx(PaginationContent, { children: pagination.map(
|
|
399
|
+
(page, index) => page === "..." ? /* @__PURE__ */ jsx(PaginationEllipsis, {}, `${page}-${index}`) : /* @__PURE__ */ jsx(PaginationItem, { children: /* @__PURE__ */ jsxs(
|
|
400
|
+
Button,
|
|
401
|
+
{
|
|
402
|
+
type: "button",
|
|
403
|
+
variant: selectedPage === page ? "outline" : "ghost",
|
|
404
|
+
size: "icon",
|
|
405
|
+
"data-slot": "pagination-link",
|
|
406
|
+
"data-active": selectedPage === page,
|
|
407
|
+
"aria-current": selectedPage === page ? "page" : void 0,
|
|
408
|
+
className: "size-8 cursor-pointer p-0",
|
|
409
|
+
onClick: () => handlePageChange(page),
|
|
410
|
+
children: [
|
|
411
|
+
page,
|
|
412
|
+
selectedPage === page && /* @__PURE__ */ jsx("span", { className: "sr-only", children: currentLabel })
|
|
413
|
+
]
|
|
414
|
+
}
|
|
415
|
+
) }, page)
|
|
416
|
+
) }) }) : null
|
|
417
|
+
] }) : null;
|
|
418
|
+
return /* @__PURE__ */ jsxs("div", { className: "mx-auto w-full max-w-7xl px-4 py-8 sm:px-6 lg:px-8", children: [
|
|
419
|
+
/* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-8", presentation === "sidebar" && "lg:flex-row"), children: [
|
|
420
|
+
presentation === "sidebar" && showFilters ? /* @__PURE__ */ jsx("aside", { className: "hidden w-full flex-none lg:block lg:w-72", children: /* @__PURE__ */ jsx("div", { className: "max-h-100vh sticky top-4 overflow-y-auto", children: /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-6 pb-6", children: fields }) }) }) : null,
|
|
421
|
+
/* @__PURE__ */ jsxs("main", { className: "flex min-w-0 flex-1 flex-col gap-6", children: [
|
|
422
|
+
presentation === "toolbar" ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
423
|
+
/* @__PURE__ */ jsxs("div", { className: "bg-background/95 supports-[backdrop-filter]:bg-background/80 sticky top-0 z-10 -mx-4 flex items-center gap-2 border-b px-4 py-2 backdrop-blur lg:hidden", children: [
|
|
424
|
+
showFilters ? /* @__PURE__ */ jsxs(
|
|
425
|
+
Button,
|
|
426
|
+
{
|
|
427
|
+
type: "button",
|
|
428
|
+
variant: "outline",
|
|
429
|
+
size: "sm",
|
|
430
|
+
className: "h-9 flex-1 cursor-pointer justify-start",
|
|
431
|
+
onClick: () => setIsFilterDrawerOpen(true),
|
|
432
|
+
children: [
|
|
433
|
+
/* @__PURE__ */ jsx(SlidersHorizontal, { "aria-hidden": "true" }),
|
|
434
|
+
filtersTitle,
|
|
435
|
+
activeFilters.length > 0 ? /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: "ms-auto", children: activeFilters.length }) : null
|
|
436
|
+
]
|
|
437
|
+
}
|
|
438
|
+
) : null,
|
|
439
|
+
showSort && sortOptions.length > 0 ? /* @__PURE__ */ jsx(
|
|
440
|
+
Button,
|
|
441
|
+
{
|
|
442
|
+
type: "button",
|
|
443
|
+
variant: "outline",
|
|
444
|
+
size: "sm",
|
|
445
|
+
className: "h-9 cursor-pointer",
|
|
446
|
+
"aria-label": sortTitle,
|
|
447
|
+
onClick: () => setIsSortDrawerOpen(true),
|
|
448
|
+
children: sortTitle
|
|
449
|
+
}
|
|
450
|
+
) : null
|
|
451
|
+
] }),
|
|
452
|
+
/* @__PURE__ */ jsxs("div", { className: "hidden items-center gap-3 lg:flex", children: [
|
|
453
|
+
showFilters ? /* @__PURE__ */ jsxs(
|
|
454
|
+
Button,
|
|
455
|
+
{
|
|
456
|
+
type: "button",
|
|
457
|
+
variant: "outline",
|
|
458
|
+
size: "sm",
|
|
459
|
+
className: "h-8 cursor-pointer",
|
|
460
|
+
onClick: () => setIsFilterDrawerOpen(true),
|
|
461
|
+
children: [
|
|
462
|
+
/* @__PURE__ */ jsx(SlidersHorizontal, { "aria-hidden": "true" }),
|
|
463
|
+
filtersTitle,
|
|
464
|
+
activeFilters.length > 0 ? /* @__PURE__ */ jsx(Badge, { variant: "secondary", children: activeFilters.length }) : null
|
|
465
|
+
]
|
|
466
|
+
}
|
|
467
|
+
) : null,
|
|
468
|
+
/* @__PURE__ */ jsx("div", { className: "ms-auto", children: sortControl(sortTitle) })
|
|
469
|
+
] })
|
|
470
|
+
] }) : null,
|
|
471
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-4", children: [
|
|
472
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-1 items-center gap-4", children: [
|
|
473
|
+
presentation === "sidebar" && showFilters ? /* @__PURE__ */ jsxs(Sheet, { open: isSheetOpen, onOpenChange: setIsSheetOpen, children: [
|
|
474
|
+
/* @__PURE__ */ jsx(SheetTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
475
|
+
Button,
|
|
476
|
+
{
|
|
477
|
+
variant: "outline",
|
|
478
|
+
size: "sm",
|
|
479
|
+
className: "h-8 cursor-pointer px-3 text-xs lg:hidden",
|
|
480
|
+
children: [
|
|
481
|
+
/* @__PURE__ */ jsx(SlidersHorizontal, { "aria-hidden": "true" }),
|
|
482
|
+
filtersTitle
|
|
483
|
+
]
|
|
484
|
+
}
|
|
485
|
+
) }),
|
|
486
|
+
/* @__PURE__ */ jsxs(SheetContent, { side: "left", className: "w-full p-0 sm:w-[380px] lg:hidden", children: [
|
|
487
|
+
/* @__PURE__ */ jsx(SheetHeader, { className: "border-b px-6 py-4", children: /* @__PURE__ */ jsx(SheetTitle, { className: "text-lg", children: filtersTitle }) }),
|
|
488
|
+
/* @__PURE__ */ jsx("div", { className: "h-[calc(100vh-4rem)] overflow-y-auto p-6", children: /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-6", children: fields }) })
|
|
489
|
+
] })
|
|
490
|
+
] }) : null,
|
|
491
|
+
searchControl,
|
|
492
|
+
pageSizeControl
|
|
493
|
+
] }),
|
|
494
|
+
presentation === "sidebar" ? /* @__PURE__ */ jsx("div", { className: "flex items-center gap-4", children: sortControl(sortPlaceholder) }) : null
|
|
495
|
+
] }),
|
|
496
|
+
statusView,
|
|
497
|
+
results
|
|
498
|
+
] })
|
|
499
|
+
] }),
|
|
500
|
+
presentation === "toolbar" && showFilters ? /* @__PURE__ */ jsx(Drawer, { open: isFilterDrawerOpen, onOpenChange: setIsFilterDrawerOpen, children: /* @__PURE__ */ jsxs(DrawerContent, { children: [
|
|
501
|
+
/* @__PURE__ */ jsx(DrawerHeader, { children: /* @__PURE__ */ jsx(DrawerTitle, { children: filtersTitle }) }),
|
|
502
|
+
/* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-y-auto px-4", children: fields }),
|
|
503
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 border-t p-4 pb-[max(1rem,env(safe-area-inset-bottom))]", children: [
|
|
504
|
+
/* @__PURE__ */ jsx(Button, { type: "button", variant: "ghost", onClick: handleClearAll, children: clearAllLabel }),
|
|
505
|
+
/* @__PURE__ */ jsx(Button, { type: "button", className: "flex-1", onClick: () => setIsFilterDrawerOpen(false), children: applyFiltersLabel })
|
|
506
|
+
] })
|
|
507
|
+
] }) }) : null,
|
|
508
|
+
presentation === "toolbar" && showSort && sortOptions.length > 0 ? /* @__PURE__ */ jsx(Drawer, { open: isSortDrawerOpen, onOpenChange: setIsSortDrawerOpen, children: /* @__PURE__ */ jsxs(DrawerContent, { children: [
|
|
509
|
+
/* @__PURE__ */ jsx(DrawerHeader, { children: /* @__PURE__ */ jsx(DrawerTitle, { children: sortTitle }) }),
|
|
510
|
+
/* @__PURE__ */ jsx("div", { className: "px-4 pb-6", children: /* @__PURE__ */ jsx(
|
|
511
|
+
RadioGroup,
|
|
512
|
+
{
|
|
513
|
+
value: selectedSort,
|
|
514
|
+
onValueChange: (value) => {
|
|
515
|
+
if (typeof value === "string") {
|
|
516
|
+
handleSortChange(value);
|
|
517
|
+
setIsSortDrawerOpen(false);
|
|
518
|
+
}
|
|
519
|
+
},
|
|
520
|
+
className: "gap-3",
|
|
521
|
+
children: sortOptions.map((option) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
522
|
+
/* @__PURE__ */ jsx(RadioGroupItem, { value: option.value, id: `listing-sort-${option.value}` }),
|
|
523
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: `listing-sort-${option.value}`, className: "min-h-11 font-normal", children: option.label })
|
|
524
|
+
] }, option.value))
|
|
525
|
+
}
|
|
526
|
+
) })
|
|
527
|
+
] }) }) : null
|
|
528
|
+
] });
|
|
529
|
+
}
|
|
530
|
+
var category_listing_default = CategoryListing;
|
|
531
|
+
export {
|
|
532
|
+
CategoryListing,
|
|
533
|
+
CategoryListingStatusView,
|
|
534
|
+
buildFilterChange,
|
|
535
|
+
category_listing_default as default,
|
|
536
|
+
reconcileSearchDraft,
|
|
537
|
+
toggleFilterValue
|
|
538
|
+
};
|
|
539
|
+
//# sourceMappingURL=category-listing.mjs.map
|