@thorprovider/blocks 1.0.0 → 3.0.0
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 +274 -46
- 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 +8 -1
- package/AGENTS.md +0 -1
- package/CHANGELOG.md +0 -107
- 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-1.tsx +0 -246
- package/src/blocks/application/login-forms/login-page-2.tsx +0 -207
- 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 -320
- package/src/blocks/application/signup-forms/signup-page-1.tsx +0 -231
- package/src/blocks/application/verification/verify-1.tsx +0 -307
- package/src/blocks/application/verification/verify-confetti.tsx +0 -192
- package/src/blocks/e-commerce/category-filters/category-filter-1.tsx +0 -260
- package/src/blocks/e-commerce/category-filters/category-filter-2-filter-panel.tsx +0 -222
- package/src/blocks/e-commerce/category-filters/category-filter-2.test.tsx +0 -513
- package/src/blocks/e-commerce/category-filters/category-filter-2.tsx +0 -921
- package/src/blocks/e-commerce/category-filters/category-filter-4-chip-rail.tsx +0 -57
- package/src/blocks/e-commerce/category-filters/category-filter-4-drawer.tsx +0 -124
- package/src/blocks/e-commerce/category-filters/category-filter-4-fields.tsx +0 -170
- package/src/blocks/e-commerce/category-filters/category-filter-4-sidebar.tsx +0 -52
- package/src/blocks/e-commerce/category-filters/category-filter-4-sort-sheet.tsx +0 -57
- package/src/blocks/e-commerce/category-filters/category-filter-4-state.ts +0 -68
- package/src/blocks/e-commerce/category-filters/category-filter-4.tsx +0 -298
- package/src/blocks/e-commerce/checkout-forms/card-formatting.test.ts +0 -47
- package/src/blocks/e-commerce/checkout-forms/card-formatting.ts +0 -9
- 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-field-feedback.tsx +0 -29
- package/src/blocks/e-commerce/checkout-forms/checkout-form-1-contact-step.tsx +0 -96
- package/src/blocks/e-commerce/checkout-forms/checkout-form-1-country-field.tsx +0 -51
- package/src/blocks/e-commerce/checkout-forms/checkout-form-1-order-summary.tsx +0 -252
- package/src/blocks/e-commerce/checkout-forms/checkout-form-1-payment-step.tsx +0 -188
- package/src/blocks/e-commerce/checkout-forms/checkout-form-1-progress.tsx +0 -36
- package/src/blocks/e-commerce/checkout-forms/checkout-form-1-shipping-step.tsx +0 -156
- package/src/blocks/e-commerce/checkout-forms/checkout-form-1.test.tsx +0 -216
- package/src/blocks/e-commerce/checkout-forms/checkout-form-1.tsx +0 -338
- package/src/blocks/e-commerce/checkout-forms/checkout-form-2-order-summary.tsx +0 -130
- package/src/blocks/e-commerce/checkout-forms/checkout-form-2-payment-card.tsx +0 -175
- package/src/blocks/e-commerce/checkout-forms/checkout-form-2-shipping-card.tsx +0 -190
- package/src/blocks/e-commerce/checkout-forms/checkout-form-2.tsx +0 -312
- package/src/blocks/e-commerce/checkout-forms/checkout-form-3-information-step.tsx +0 -91
- package/src/blocks/e-commerce/checkout-forms/checkout-form-3-order-summary.tsx +0 -110
- package/src/blocks/e-commerce/checkout-forms/checkout-form-3-payment-step.tsx +0 -137
- package/src/blocks/e-commerce/checkout-forms/checkout-form-3-progress.tsx +0 -68
- package/src/blocks/e-commerce/checkout-forms/checkout-form-3-review-step.tsx +0 -79
- package/src/blocks/e-commerce/checkout-forms/checkout-form-3-shipping-step.tsx +0 -172
- package/src/blocks/e-commerce/checkout-forms/checkout-form-3.tsx +0 -392
- package/src/blocks/e-commerce/checkout-forms/checkout-form-types.ts +0 -7
- 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/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 -424
- 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-1.test.tsx +0 -117
- package/src/blocks/marketing/footers/footer-section-1.tsx +0 -178
- package/src/blocks/marketing/footers/footer-section-3.tsx +0 -192
- package/src/blocks/marketing/footers/footer-section-4.tsx +0 -355
- 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-1.tsx +0 -267
- package/src/blocks/marketing/navbars/navbar-2.tsx +0 -351
- package/src/blocks/marketing/navbars/navbar-3.tsx +0 -303
- package/src/blocks/marketing/navbars/navbar-4-account-menu.test.tsx +0 -56
- package/src/blocks/marketing/navbars/navbar-4-account-menu.tsx +0 -134
- package/src/blocks/marketing/navbars/navbar-4-cart-sheet.test.tsx +0 -204
- package/src/blocks/marketing/navbars/navbar-4-cart-sheet.tsx +0 -371
- package/src/blocks/marketing/navbars/navbar-4-like-button.tsx +0 -177
- package/src/blocks/marketing/navbars/navbar-4-mobile-nav.tsx +0 -104
- package/src/blocks/marketing/navbars/navbar-4-product-grid.tsx +0 -219
- package/src/blocks/marketing/navbars/navbar-4-search-bar.tsx +0 -52
- package/src/blocks/marketing/navbars/navbar-4.test.tsx +0 -264
- package/src/blocks/marketing/navbars/navbar-4.tsx +0 -604
- 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-1.tsx +0 -141
- package/src/blocks/marketing/testimonials/testimonial-2.tsx +0 -108
- package/src/blocks/shared/reaction-toggle.tsx +0 -145
- package/src/hooks/use-mobile.ts +0 -19
- package/src/index.ts +0 -285
- 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 -173
- package/src/lib/contracts.ts +0 -795
- 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/navigation/storefront-navbar.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { AnimatePresence, motion, useReducedMotion } from 'motion/react'\nimport { Menu, Search, ShoppingBag, UserRound, RotateCcw, X } from 'lucide-react'\n\nimport { Button } from '../../../ui/button'\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '../../../ui/sheet'\nimport { cn } from '../../../lib/utils'\n\nimport { StorefrontNavbarAccountMenu, type AccountMenuItem, type StoreUser } from './storefront-navbar-account-menu'\nimport { StorefrontNavbarCartSheet, type CartItem, type CartSheetState } from './storefront-navbar-cart-sheet'\nimport type { UtilityLink } from './storefront-navbar-mobile-nav'\nimport { StorefrontNavbarSearchBar } from './storefront-navbar-search-bar'\nimport { MegaMenu } from './mega-menu'\nimport { MobileCategoryDrawer } from './mobile-category-drawer'\nimport type { MenuItem } from '../../../lib/types/menu'\nimport type { Money } from '@thorprovider/types'\nimport type { StoreCategory } from '../../../lib/contracts'\n\nfunction toMenuItem(category: StoreCategory): MenuItem {\n return {\n id: category.href,\n label: category.label,\n href: category.href,\n children: category.children?.map(toMenuItem),\n }\n}\n\n/**\n * Drawer entries come from three sources (categories, utility links, account\n * link). Hosts may reuse the same href across sources (e.g. a placeholder\n * href), which would produce duplicate React keys if passed through as-is.\n * Dedupe by href so every rendered item gets a unique id.\n */\nfunction uniqueById<T extends { id: string }>(items: T[]): T[] {\n const seen = new Set<string>()\n return items.filter((item) => {\n if (seen.has(item.id)) return false\n seen.add(item.id)\n return true\n })\n}\n\nexport interface LogoAccent {\n /** Trailing segment of `logoText` to render with the accent styling. */\n text: string\n /** Consumer-supplied classes for the accent span (e.g. a brand color token). */\n className?: string\n}\n\nfunction Logo({ text, href, accent }: { text: string; href?: string; accent?: LogoAccent }) {\n const className =\n 'focus-visible:ring-ring flex items-center gap-2 rounded-sm focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none'\n\n const accentText = accent?.text ?? ''\n const hasAccent = accentText.length > 0 && text.endsWith(accentText)\n const baseText = hasAccent ? text.slice(0, text.length - accentText.length) : text\n\n const content = (\n <>\n <svg viewBox='0 0 32 32' aria-hidden='true' className='text-primary size-7' fill='none' xmlns='http://www.w3.org/2000/svg'>\n <path\n d='M26 24.75C26.4142 24.75 26.75 24.4142 26.75 24C26.75 23.5858 26.4142 23.25 26 23.25V24.75ZM26 23.25H11V24.75H26V23.25ZM8.75 21V15H7.25V21H8.75ZM11 23.25C9.75736 23.25 8.75 22.2426 8.75 21H7.25C7.25 23.0711 8.92893 24.75 11 24.75V23.25Z'\n fill='currentColor'\n />\n <path\n d='M1.5 3.25C1.08579 3.25 0.75 3.58579 0.75 4C0.75 4.41421 1.08579 4.75 1.5 4.75V3.25ZM1.5 4.75H6V3.25H1.5V4.75ZM7.25 6V21H8.75V6H7.25ZM6 4.75C6.69036 4.75 7.25 5.30964 7.25 6H8.75C8.75 4.48122 7.51878 3.25 6 3.25V4.75Z'\n fill='currentColor'\n />\n <path\n d='M22 21.75C22.4142 21.75 22.75 21.4142 22.75 21C22.75 20.5858 22.4142 20.25 22 20.25V21.75ZM22 20.25H11V21.75H22V20.25ZM8.75 18V12H7.25V18H8.75ZM11 20.25C9.75736 20.25 8.75 19.2426 8.75 18H7.25C7.25 20.0711 8.92893 21.75 11 21.75V20.25Z'\n fill='currentColor'\n />\n <path\n d='M27.2057 19.754C27.0654 20.1438 26.6357 20.346 26.246 20.2057C25.8562 20.0654 25.654 19.6357 25.7943 19.246L27.2057 19.754ZM30.0361 9.67744L29.3305 9.4234L29.3305 9.4234L30.0361 9.67744ZM25.7943 19.246L29.3305 9.4234L30.7418 9.93148L27.2057 19.754L25.7943 19.246ZM28.1543 7.75L8 7.75V6.25L28.1543 6.25V7.75ZM29.3305 9.4234C29.6237 8.60882 29.0201 7.75 28.1543 7.75V6.25C30.059 6.25 31.3869 8.13941 30.7418 9.93148L29.3305 9.4234Z'\n fill='currentColor'\n />\n <path\n d='M13.5 21.75C13.0858 21.75 12.75 21.4142 12.75 21C12.75 20.5858 13.0858 20.25 13.5 20.25V21.75ZM26.7111 19.009L27.4174 19.2613L27.4174 19.2613L26.7111 19.009ZM13.5 20.25H23.8858V21.75H13.5V20.25ZM26.0048 18.7568L27.7937 13.7477L29.2063 14.2523L27.4174 19.2613L26.0048 18.7568ZM23.8858 20.25C24.8367 20.25 25.6849 19.6522 26.0048 18.7568L27.4174 19.2613C26.8843 20.7537 25.4706 21.75 23.8858 21.75V20.25Z'\n fill='currentColor'\n />\n <path d='M21.1694 10.5806L14.5651 17.1849' stroke='currentColor' strokeWidth='1.5' strokeLinecap='round' />\n <path d='M22.1694 14.5806L18.5632 18.1868' stroke='currentColor' strokeWidth='1.5' strokeLinecap='round' />\n <circle cx='13.1' cy='26.1' r='1.7' stroke='currentColor' strokeWidth='1.2' />\n <circle cx='22.1' cy='26.1' r='1.7' stroke='currentColor' strokeWidth='1.2' />\n </svg>\n <span className='text-base font-semibold tracking-tight'>\n {baseText}\n {hasAccent ? <span className={accent?.className}>{accentText}</span> : null}\n </span>\n </>\n )\n\n if (!href) {\n return <span className={className}>{content}</span>\n }\n\n return (\n <a href={href} className={className}>\n {content}\n </a>\n )\n}\n\ntype CartBadgeProps = {\n count: number\n}\n\n/**\n * Transitions.dev `notification-badge`: diagonal slide + spring pop when the\n * count appears or changes. Positioned outside the bag so it never covers the icon.\n */\nfunction CartBadge({ count }: CartBadgeProps) {\n const reduceMotion = useReducedMotion()\n\n return (\n <AnimatePresence>\n {count > 0 ? (\n <motion.span\n key='badge-shell'\n className='bg-foreground text-background pointer-events-none absolute -top-2.5 -end-3.5 flex size-[1.125rem] items-center justify-center overflow-hidden rounded-full text-[10px] font-medium tabular-nums shadow-sm ring-2 ring-background'\n initial={\n reduceMotion\n ? false\n : { scale: 0, x: -8.2, y: 12.4, opacity: 0, filter: 'blur(2px)' }\n }\n animate={{ scale: 1, x: 0, y: 0, opacity: 1, filter: 'blur(0px)' }}\n exit={\n reduceMotion\n ? { opacity: 0 }\n : {\n scale: 0,\n opacity: 0,\n filter: 'blur(2px)',\n transition: { duration: 0.18, ease: [0.4, 0, 0.2, 1] },\n }\n }\n transition={\n reduceMotion\n ? { duration: 0 }\n : { type: 'spring', stiffness: 520, damping: 18, mass: 0.6 }\n }\n style={{ willChange: 'transform, opacity, filter' }}\n >\n <AnimatePresence mode='popLayout' initial={false}>\n <motion.span\n key={count}\n className='block'\n initial={reduceMotion ? false : { y: 8, opacity: 0, filter: 'blur(2px)' }}\n animate={{ y: 0, opacity: 1, filter: 'blur(0px)' }}\n exit={reduceMotion ? undefined : { y: -8, opacity: 0, filter: 'blur(2px)' }}\n transition={{ duration: 0.22, ease: [0.22, 1, 0.36, 1] }}\n >\n {count > 99 ? '99+' : count}\n </motion.span>\n </AnimatePresence>\n </motion.span>\n ) : null}\n </AnimatePresence>\n )\n}\n\nexport interface StorefrontNavbarAccountRetryProps {\n /** Consumer-owned reconciliation in flight; holds the affordance inert. */\n pending?: boolean\n /** Consumer-owned recovery action. Without it the affordance is inert. */\n onRetry?: () => void\n}\n\n/**\n * Recovery affordance for an unavailable session. The block never resolves the\n * session itself: it surfaces the state and dispatches the consumer's retry.\n * Extracted (hooks-free) so the dispatch is testable without a DOM.\n */\nexport function StorefrontNavbarAccountRetry({ pending = false, onRetry }: StorefrontNavbarAccountRetryProps) {\n return (\n <Button\n variant='ghost'\n size='icon'\n className='size-11'\n disabled={pending || !onRetry}\n aria-label='Retry account session'\n title='Account session unavailable'\n onClick={onRetry}\n >\n <RotateCcw aria-hidden='true' />\n </Button>\n )\n}\n\nexport interface StorefrontNavbarProps {\n storeCategories: StoreCategory[]\n /**\n * Optional note shown in the desktop utility strip. When omitted (or empty)\n * and there are no `utilityLinks`, the strip is not rendered at all, so a\n * block with no optional content paints no empty decorative chrome.\n */\n shippingNote?: string\n utilityLinks: UtilityLink[]\n logoText: string\n logoHref?: string\n /**\n * Optional accent for a trailing segment of `logoText` (e.g. the \"Cuba\" in\n * \"ElectroCuba\"). When omitted, or when `text` is not a trailing segment of\n * `logoText`, the wordmark renders unchanged.\n */\n logoAccent?: LogoAccent\n /** Account destination for anonymous shoppers on every viewport. */\n accountHref?: string\n /**\n * When `false`, no search control is rendered at all — neither the desktop\n * input, the mobile trigger, nor the mobile panel. Defaults to `true` so\n * legacy consumers keep the existing self-contained search. The generated\n * storefront passes `false` while no verified global search contract exists\n * (E2 task 5.4), so no global search is presented as working.\n */\n /**\n * The storefront's current route path. When it matches a destination the link\n * is marked as the current page (accessibly, beyond color alone).\n */\n currentPath?: string\n showSearch?: boolean\n searchQuery?: string\n onSearchChange?: (value: string) => void\n items?: CartItem[]\n /**\n * Quantity DELTA for a backend cart line-item id. The boundary converts the\n * delta into an absolute quantity against the authoritative current line\n * quantity before mutating the cart.\n */\n onQtyChange?: (id: string, delta: number) => void\n /** Remove the backend cart line-item id. */\n onRemove?: (id: string) => void\n /** Authoritative backend subtotal for the mini-cart. */\n subtotal?: Money\n /** Shown when an authoritative subtotal is supplied but absent/malformed. */\n subtotalUnavailableLabel?: string\n /** Override money formatting (locale, currency). Defaults to `Money.currencyCode`. */\n formatMoney?: (money: Money) => string\n user?: StoreUser\n accountMenuItems?: AccountMenuItem[]\n onHelp?: () => void\n onSignOut?: () => void\n accountPending?: boolean\n accountUnavailable?: boolean\n onAccountRetry?: () => void\n onCheckout?: () => void\n onViewCart?: () => void\n /**\n * Controlled visibility for the cart sheet. When provided, the sheet opens\n * and closes from this value and `onCartOpenChange` instead of internal\n * state, so a host can share one cart surface across the navbar trigger and\n * successful add-to-cart. Omit both to keep the legacy uncontrolled sheet.\n */\n cartOpen?: boolean\n /** Change handler paired with `cartOpen` for a controlled sheet. */\n onCartOpenChange?: (open: boolean) => void\n /**\n * Backend-authoritative cart rendering for the sheet. When `true`, line\n * amounts use each item's canonical `lineTotal` Money and never fall back to\n * numeric `price * qty`. Omit for the legacy numeric rendering.\n */\n canonicalCart?: boolean\n /** Cart read/mutation lifecycle for the sheet. */\n cartState?: CartSheetState\n /** Message shown when `cartState` is `error`. */\n cartErrorLabel?: string\n /** Recovery action label for the error state. */\n cartRetryLabel?: string\n /** Recovery action invoked from the error state. */\n onCartRetry?: () => void\n /** When `true`, the sheet's checkout action is suppressed (checkout not installed). */\n checkoutUnavailable?: boolean\n /** When `true`, the sheet's checkout action is disabled (cart not ready). */\n checkoutDisabled?: boolean\n /** When `true`, the sheet's review action is suppressed (cart view not installed). */\n viewCartUnavailable?: boolean\n /**\n * Consumer-supplied classes merged onto the outer `<header>` as the final\n * argument, so a semantic surface such as `bg-brand-nav\n * text-brand-nav-foreground` overrides the default `bg-background`. Purely\n * presentational: no layout, structure, or behavior changes.\n */\n className?: string\n}\n\nexport function StorefrontNavbar({\n storeCategories,\n shippingNote = '',\n utilityLinks,\n logoText,\n logoHref,\n logoAccent,\n accountHref,\n currentPath,\n showSearch = true,\n searchQuery: searchQueryProp,\n onSearchChange,\n items: itemsProp,\n onQtyChange: onQtyChangeProp,\n onRemove: onRemoveProp,\n subtotal,\n subtotalUnavailableLabel,\n formatMoney,\n user,\n accountMenuItems,\n onHelp,\n onSignOut,\n accountPending = false,\n accountUnavailable = false,\n onAccountRetry,\n onCheckout,\n onViewCart,\n cartOpen,\n onCartOpenChange,\n canonicalCart,\n cartState,\n cartErrorLabel,\n cartRetryLabel,\n onCartRetry,\n checkoutUnavailable,\n checkoutDisabled,\n viewCartUnavailable,\n className,\n}: StorefrontNavbarProps) {\n /**\n * Integration seam\n * ----------------\n * Pass cart + search from your storefront, or leave uncontrolled for a\n * self-contained demo. Controlled props win when provided.\n */\n const [internalItems, setInternalItems] = useState<CartItem[]>([])\n const [internalSearch, setInternalSearch] = useState('')\n const [searchOpen, setSearchOpen] = useState(false)\n const [menuOpen, setMenuOpen] = useState(false)\n const searchTriggerRef = useRef<HTMLButtonElement>(null)\n\n const items = itemsProp ?? internalItems\n const searchQuery = searchQueryProp ?? internalSearch\n\n const setSearchQuery = (value: string) => {\n onSearchChange?.(value)\n if (searchQueryProp === undefined) {\n setInternalSearch(value)\n }\n }\n\n const changeQty =\n onQtyChangeProp ??\n ((id: string, delta: number) =>\n setInternalItems(current =>\n current.flatMap(item => {\n if (item.id !== id) {\n return item\n }\n\n const qty = item.qty + delta\n return qty <= 0 ? [] : [{ ...item, qty }]\n }),\n ))\n\n const removeItem =\n onRemoveProp ?? ((id: string) => setInternalItems(current => current.filter(item => item.id !== id)))\n\n const count = useMemo(() => items.reduce((total, item) => total + item.qty, 0), [items])\n\n useEffect(() => {\n if (!showSearch || !searchOpen) {\n return\n }\n\n document.getElementById('store-search-mobile')?.focus()\n }, [searchOpen, showSearch])\n\n const dismissSearch = () => {\n setSearchOpen(false)\n searchTriggerRef.current?.focus()\n }\n\n // When the consumer overrides the header surface via `className`, the nav\n // links inherit its text color and need an explicit hover foreground so\n // `hover:bg-muted` never paints white-on-light; otherwise they keep the\n // default foreground (and the default hover surface).\n const navLinkColor =\n className !== undefined ? 'text-inherit hover:text-foreground' : 'text-foreground'\n // The current page is marked beyond color: an accessible current state plus a\n // visible weight/underline, and nothing when no destination matches.\n const isCurrent = (href?: string) => href !== undefined && href === currentPath\n\n // The desktop utility strip is decorative chrome: it is painted only when it\n // has content (a non-empty note or at least one utility link), never empty.\n const hasUtilityContent = shippingNote.trim().length > 0 || utilityLinks.length > 0\n\n return (\n <header\n className={cn(\n 'border-border sticky top-0 z-40 w-full border-b backdrop-blur-md',\n className ?? 'bg-background/95 supports-backdrop-filter:bg-background/80',\n )}\n >\n {hasUtilityContent ? (\n <div className='bg-foreground text-background hidden lg:block'>\n <div className='mx-auto flex h-9 w-full max-w-7xl items-center justify-between px-4 text-xs tracking-wide sm:px-6 lg:px-8'>\n <p className='text-background/80'>{shippingNote}</p>\n <ul className='flex items-center gap-5'>\n {utilityLinks.map(link => (\n <li key={`${link.href}:${link.label}`}>\n <a\n href={link.href}\n className='text-background/80 hover:text-background transition-colors duration-150'\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n ) : null}\n\n <div className='mx-auto flex h-16 w-full max-w-7xl items-center gap-3 px-4 sm:px-6 lg:px-8'>\n <Button\n variant='ghost'\n size='icon'\n className='lg:hidden'\n aria-label='Open menu'\n aria-expanded={menuOpen}\n onClick={() => setMenuOpen(open => !open)}\n >\n <Menu />\n </Button>\n\n <MobileCategoryDrawer\n categories={uniqueById([\n ...storeCategories.map(toMenuItem),\n ...utilityLinks.map(link => ({ id: link.href, label: link.label, href: link.href })),\n ...(accountHref ? [{ id: accountHref, label: 'Account', href: accountHref }] : []),\n ])}\n collections={[]}\n open={menuOpen}\n onClose={() => setMenuOpen(false)}\n viewAllHref=''\n />\n\n <div className='flex-1 lg:flex-none'>\n <Logo text={logoText} href={logoHref} accent={logoAccent} />\n </div>\n\n <nav aria-label='Store' className='hidden flex-1 lg:block'>\n <ul className='flex items-center gap-0.5'>\n {storeCategories.map(category =>\n category.children && category.children.length > 0 ? (\n <li key={category.href} className='group relative'>\n <a\n href={category.href}\n aria-current={isCurrent(category.href) ? 'page' : undefined}\n className={cn(\n 'hover:bg-muted focus-visible:ring-ring rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150 focus-visible:ring-2 focus-visible:outline-none',\n category.emphasis ? 'text-destructive' : navLinkColor,\n isCurrent(category.href) && 'font-semibold underline underline-offset-4',\n )}\n >\n {category.label}\n </a>\n <div className='invisible absolute left-0 top-full z-50 pt-2 opacity-0 transition-opacity duration-150 group-hover:visible group-hover:opacity-100'>\n <MegaMenu\n categories={[toMenuItem(category)]}\n collections={[]}\n collectionsHref=''\n categoryColumnTitle={category.label}\n />\n </div>\n </li>\n ) : (\n <li key={category.href}>\n <a\n href={category.href}\n aria-current={isCurrent(category.href) ? 'page' : undefined}\n className={cn(\n 'hover:bg-muted focus-visible:ring-ring rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150 focus-visible:ring-2 focus-visible:outline-none',\n category.emphasis ? 'text-destructive' : navLinkColor,\n isCurrent(category.href) && 'font-semibold underline underline-offset-4',\n )}\n >\n {category.label}\n </a>\n </li>\n ),\n )}\n </ul>\n </nav>\n\n <div className='flex items-center gap-1.5'>\n {showSearch ? (\n <>\n <div className='hidden lg:block lg:w-64'>\n <StorefrontNavbarSearchBar\n id='store-search'\n value={searchQuery}\n onValueChange={setSearchQuery}\n />\n </div>\n\n <Button\n ref={searchTriggerRef}\n variant='ghost'\n size='icon'\n className='lg:hidden'\n aria-label='Search products'\n aria-expanded={searchOpen}\n onClick={() => setSearchOpen(open => !open)}\n >\n {searchOpen ? <X /> : <Search />}\n </Button>\n </>\n ) : null}\n\n {accountUnavailable ? (\n <StorefrontNavbarAccountRetry pending={accountPending} onRetry={onAccountRetry} />\n ) : user ? (\n <StorefrontNavbarAccountMenu\n user={user}\n items={accountMenuItems}\n onHelp={onHelp}\n onSignOut={onSignOut}\n pending={accountPending}\n />\n ) : accountHref ? (\n accountPending ? (\n <Button variant='ghost' size='icon' className='size-11' disabled aria-label='Loading account session'>\n <UserRound aria-hidden='true' />\n </Button>\n ) : (\n <Button variant='ghost' size='icon' className='size-11' asChild>\n <a href={accountHref} aria-label='Account' aria-current={isCurrent(accountHref) ? 'page' : undefined}>\n <UserRound aria-hidden='true' />\n </a>\n </Button>\n )\n ) : null}\n\n <Sheet\n {...(cartOpen !== undefined ? { open: cartOpen, onOpenChange: onCartOpenChange } : {})}\n >\n <SheetTrigger asChild>\n <Button\n variant='ghost'\n size='icon'\n className='relative overflow-visible'\n aria-label={`Cart, ${count} ${count === 1 ? 'item' : 'items'}`}\n >\n <ShoppingBag className='size-5' />\n <CartBadge count={count} />\n </Button>\n </SheetTrigger>\n <SheetContent side='right' className='flex w-full max-w-sm flex-col gap-0 p-0'>\n <SheetHeader className='border-border border-b'>\n <SheetTitle className='text-left text-base'>\n Cart{count > 0 ? ` (${count})` : ''}\n </SheetTitle>\n </SheetHeader>\n <StorefrontNavbarCartSheet\n items={items}\n onQtyChange={changeQty}\n onRemove={removeItem}\n subtotal={subtotal}\n subtotalUnavailableLabel={subtotalUnavailableLabel}\n formatMoney={formatMoney}\n onCheckout={onCheckout}\n onViewCart={onViewCart}\n canonical={canonicalCart}\n state={cartState}\n errorLabel={cartErrorLabel}\n retryLabel={cartRetryLabel}\n onRetry={onCartRetry}\n checkoutUnavailable={checkoutUnavailable}\n checkoutDisabled={checkoutDisabled}\n viewCartUnavailable={viewCartUnavailable}\n />\n </SheetContent>\n </Sheet>\n </div>\n </div>\n\n <p aria-live='polite' className='sr-only'>\n {`Cart contains ${count} ${count === 1 ? 'item' : 'items'}`}\n </p>\n\n {showSearch && searchOpen ? (\n <div className='border-border flex flex-col gap-0 border-t p-4 lg:hidden'>\n <StorefrontNavbarSearchBar\n id='store-search-mobile'\n value={searchQuery}\n onValueChange={setSearchQuery}\n onDismiss={dismissSearch}\n />\n </div>\n ) : null}\n </header>\n )\n}\n\nexport default StorefrontNavbar\n"],"mappings":"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","names":["import_react"]}
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
4
|
+
import { AnimatePresence, motion, useReducedMotion } from "motion/react";
|
|
5
|
+
import { Menu, Search, ShoppingBag, UserRound, RotateCcw, X } from "lucide-react";
|
|
6
|
+
import { Button } from "../../../ui/button.mjs";
|
|
7
|
+
import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from "../../../ui/sheet.mjs";
|
|
8
|
+
import { cn } from "../../../lib/utils.mjs";
|
|
9
|
+
import { StorefrontNavbarAccountMenu } from "./storefront-navbar-account-menu.mjs";
|
|
10
|
+
import { StorefrontNavbarCartSheet } from "./storefront-navbar-cart-sheet.mjs";
|
|
11
|
+
import { StorefrontNavbarSearchBar } from "./storefront-navbar-search-bar.mjs";
|
|
12
|
+
import { MegaMenu } from "./mega-menu.mjs";
|
|
13
|
+
import { MobileCategoryDrawer } from "./mobile-category-drawer.mjs";
|
|
14
|
+
function toMenuItem(category) {
|
|
15
|
+
return {
|
|
16
|
+
id: category.href,
|
|
17
|
+
label: category.label,
|
|
18
|
+
href: category.href,
|
|
19
|
+
children: category.children?.map(toMenuItem)
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function uniqueById(items) {
|
|
23
|
+
const seen = /* @__PURE__ */ new Set();
|
|
24
|
+
return items.filter((item) => {
|
|
25
|
+
if (seen.has(item.id)) return false;
|
|
26
|
+
seen.add(item.id);
|
|
27
|
+
return true;
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function Logo({ text, href, accent }) {
|
|
31
|
+
const className = "focus-visible:ring-ring flex items-center gap-2 rounded-sm focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none";
|
|
32
|
+
const accentText = accent?.text ?? "";
|
|
33
|
+
const hasAccent = accentText.length > 0 && text.endsWith(accentText);
|
|
34
|
+
const baseText = hasAccent ? text.slice(0, text.length - accentText.length) : text;
|
|
35
|
+
const content = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
36
|
+
/* @__PURE__ */ jsxs("svg", { viewBox: "0 0 32 32", "aria-hidden": "true", className: "text-primary size-7", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
37
|
+
/* @__PURE__ */ jsx(
|
|
38
|
+
"path",
|
|
39
|
+
{
|
|
40
|
+
d: "M26 24.75C26.4142 24.75 26.75 24.4142 26.75 24C26.75 23.5858 26.4142 23.25 26 23.25V24.75ZM26 23.25H11V24.75H26V23.25ZM8.75 21V15H7.25V21H8.75ZM11 23.25C9.75736 23.25 8.75 22.2426 8.75 21H7.25C7.25 23.0711 8.92893 24.75 11 24.75V23.25Z",
|
|
41
|
+
fill: "currentColor"
|
|
42
|
+
}
|
|
43
|
+
),
|
|
44
|
+
/* @__PURE__ */ jsx(
|
|
45
|
+
"path",
|
|
46
|
+
{
|
|
47
|
+
d: "M1.5 3.25C1.08579 3.25 0.75 3.58579 0.75 4C0.75 4.41421 1.08579 4.75 1.5 4.75V3.25ZM1.5 4.75H6V3.25H1.5V4.75ZM7.25 6V21H8.75V6H7.25ZM6 4.75C6.69036 4.75 7.25 5.30964 7.25 6H8.75C8.75 4.48122 7.51878 3.25 6 3.25V4.75Z",
|
|
48
|
+
fill: "currentColor"
|
|
49
|
+
}
|
|
50
|
+
),
|
|
51
|
+
/* @__PURE__ */ jsx(
|
|
52
|
+
"path",
|
|
53
|
+
{
|
|
54
|
+
d: "M22 21.75C22.4142 21.75 22.75 21.4142 22.75 21C22.75 20.5858 22.4142 20.25 22 20.25V21.75ZM22 20.25H11V21.75H22V20.25ZM8.75 18V12H7.25V18H8.75ZM11 20.25C9.75736 20.25 8.75 19.2426 8.75 18H7.25C7.25 20.0711 8.92893 21.75 11 21.75V20.25Z",
|
|
55
|
+
fill: "currentColor"
|
|
56
|
+
}
|
|
57
|
+
),
|
|
58
|
+
/* @__PURE__ */ jsx(
|
|
59
|
+
"path",
|
|
60
|
+
{
|
|
61
|
+
d: "M27.2057 19.754C27.0654 20.1438 26.6357 20.346 26.246 20.2057C25.8562 20.0654 25.654 19.6357 25.7943 19.246L27.2057 19.754ZM30.0361 9.67744L29.3305 9.4234L29.3305 9.4234L30.0361 9.67744ZM25.7943 19.246L29.3305 9.4234L30.7418 9.93148L27.2057 19.754L25.7943 19.246ZM28.1543 7.75L8 7.75V6.25L28.1543 6.25V7.75ZM29.3305 9.4234C29.6237 8.60882 29.0201 7.75 28.1543 7.75V6.25C30.059 6.25 31.3869 8.13941 30.7418 9.93148L29.3305 9.4234Z",
|
|
62
|
+
fill: "currentColor"
|
|
63
|
+
}
|
|
64
|
+
),
|
|
65
|
+
/* @__PURE__ */ jsx(
|
|
66
|
+
"path",
|
|
67
|
+
{
|
|
68
|
+
d: "M13.5 21.75C13.0858 21.75 12.75 21.4142 12.75 21C12.75 20.5858 13.0858 20.25 13.5 20.25V21.75ZM26.7111 19.009L27.4174 19.2613L27.4174 19.2613L26.7111 19.009ZM13.5 20.25H23.8858V21.75H13.5V20.25ZM26.0048 18.7568L27.7937 13.7477L29.2063 14.2523L27.4174 19.2613L26.0048 18.7568ZM23.8858 20.25C24.8367 20.25 25.6849 19.6522 26.0048 18.7568L27.4174 19.2613C26.8843 20.7537 25.4706 21.75 23.8858 21.75V20.25Z",
|
|
69
|
+
fill: "currentColor"
|
|
70
|
+
}
|
|
71
|
+
),
|
|
72
|
+
/* @__PURE__ */ jsx("path", { d: "M21.1694 10.5806L14.5651 17.1849", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }),
|
|
73
|
+
/* @__PURE__ */ jsx("path", { d: "M22.1694 14.5806L18.5632 18.1868", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }),
|
|
74
|
+
/* @__PURE__ */ jsx("circle", { cx: "13.1", cy: "26.1", r: "1.7", stroke: "currentColor", strokeWidth: "1.2" }),
|
|
75
|
+
/* @__PURE__ */ jsx("circle", { cx: "22.1", cy: "26.1", r: "1.7", stroke: "currentColor", strokeWidth: "1.2" })
|
|
76
|
+
] }),
|
|
77
|
+
/* @__PURE__ */ jsxs("span", { className: "text-base font-semibold tracking-tight", children: [
|
|
78
|
+
baseText,
|
|
79
|
+
hasAccent ? /* @__PURE__ */ jsx("span", { className: accent?.className, children: accentText }) : null
|
|
80
|
+
] })
|
|
81
|
+
] });
|
|
82
|
+
if (!href) {
|
|
83
|
+
return /* @__PURE__ */ jsx("span", { className, children: content });
|
|
84
|
+
}
|
|
85
|
+
return /* @__PURE__ */ jsx("a", { href, className, children: content });
|
|
86
|
+
}
|
|
87
|
+
function CartBadge({ count }) {
|
|
88
|
+
const reduceMotion = useReducedMotion();
|
|
89
|
+
return /* @__PURE__ */ jsx(AnimatePresence, { children: count > 0 ? /* @__PURE__ */ jsx(
|
|
90
|
+
motion.span,
|
|
91
|
+
{
|
|
92
|
+
className: "bg-foreground text-background pointer-events-none absolute -top-2.5 -end-3.5 flex size-[1.125rem] items-center justify-center overflow-hidden rounded-full text-[10px] font-medium tabular-nums shadow-sm ring-2 ring-background",
|
|
93
|
+
initial: reduceMotion ? false : { scale: 0, x: -8.2, y: 12.4, opacity: 0, filter: "blur(2px)" },
|
|
94
|
+
animate: { scale: 1, x: 0, y: 0, opacity: 1, filter: "blur(0px)" },
|
|
95
|
+
exit: reduceMotion ? { opacity: 0 } : {
|
|
96
|
+
scale: 0,
|
|
97
|
+
opacity: 0,
|
|
98
|
+
filter: "blur(2px)",
|
|
99
|
+
transition: { duration: 0.18, ease: [0.4, 0, 0.2, 1] }
|
|
100
|
+
},
|
|
101
|
+
transition: reduceMotion ? { duration: 0 } : { type: "spring", stiffness: 520, damping: 18, mass: 0.6 },
|
|
102
|
+
style: { willChange: "transform, opacity, filter" },
|
|
103
|
+
children: /* @__PURE__ */ jsx(AnimatePresence, { mode: "popLayout", initial: false, children: /* @__PURE__ */ jsx(
|
|
104
|
+
motion.span,
|
|
105
|
+
{
|
|
106
|
+
className: "block",
|
|
107
|
+
initial: reduceMotion ? false : { y: 8, opacity: 0, filter: "blur(2px)" },
|
|
108
|
+
animate: { y: 0, opacity: 1, filter: "blur(0px)" },
|
|
109
|
+
exit: reduceMotion ? void 0 : { y: -8, opacity: 0, filter: "blur(2px)" },
|
|
110
|
+
transition: { duration: 0.22, ease: [0.22, 1, 0.36, 1] },
|
|
111
|
+
children: count > 99 ? "99+" : count
|
|
112
|
+
},
|
|
113
|
+
count
|
|
114
|
+
) })
|
|
115
|
+
},
|
|
116
|
+
"badge-shell"
|
|
117
|
+
) : null });
|
|
118
|
+
}
|
|
119
|
+
function StorefrontNavbarAccountRetry({ pending = false, onRetry }) {
|
|
120
|
+
return /* @__PURE__ */ jsx(
|
|
121
|
+
Button,
|
|
122
|
+
{
|
|
123
|
+
variant: "ghost",
|
|
124
|
+
size: "icon",
|
|
125
|
+
className: "size-11",
|
|
126
|
+
disabled: pending || !onRetry,
|
|
127
|
+
"aria-label": "Retry account session",
|
|
128
|
+
title: "Account session unavailable",
|
|
129
|
+
onClick: onRetry,
|
|
130
|
+
children: /* @__PURE__ */ jsx(RotateCcw, { "aria-hidden": "true" })
|
|
131
|
+
}
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
function StorefrontNavbar({
|
|
135
|
+
storeCategories,
|
|
136
|
+
shippingNote = "",
|
|
137
|
+
utilityLinks,
|
|
138
|
+
logoText,
|
|
139
|
+
logoHref,
|
|
140
|
+
logoAccent,
|
|
141
|
+
accountHref,
|
|
142
|
+
currentPath,
|
|
143
|
+
showSearch = true,
|
|
144
|
+
searchQuery: searchQueryProp,
|
|
145
|
+
onSearchChange,
|
|
146
|
+
items: itemsProp,
|
|
147
|
+
onQtyChange: onQtyChangeProp,
|
|
148
|
+
onRemove: onRemoveProp,
|
|
149
|
+
subtotal,
|
|
150
|
+
subtotalUnavailableLabel,
|
|
151
|
+
formatMoney,
|
|
152
|
+
user,
|
|
153
|
+
accountMenuItems,
|
|
154
|
+
onHelp,
|
|
155
|
+
onSignOut,
|
|
156
|
+
accountPending = false,
|
|
157
|
+
accountUnavailable = false,
|
|
158
|
+
onAccountRetry,
|
|
159
|
+
onCheckout,
|
|
160
|
+
onViewCart,
|
|
161
|
+
cartOpen,
|
|
162
|
+
onCartOpenChange,
|
|
163
|
+
canonicalCart,
|
|
164
|
+
cartState,
|
|
165
|
+
cartErrorLabel,
|
|
166
|
+
cartRetryLabel,
|
|
167
|
+
onCartRetry,
|
|
168
|
+
checkoutUnavailable,
|
|
169
|
+
checkoutDisabled,
|
|
170
|
+
viewCartUnavailable,
|
|
171
|
+
className
|
|
172
|
+
}) {
|
|
173
|
+
const [internalItems, setInternalItems] = useState([]);
|
|
174
|
+
const [internalSearch, setInternalSearch] = useState("");
|
|
175
|
+
const [searchOpen, setSearchOpen] = useState(false);
|
|
176
|
+
const [menuOpen, setMenuOpen] = useState(false);
|
|
177
|
+
const searchTriggerRef = useRef(null);
|
|
178
|
+
const items = itemsProp ?? internalItems;
|
|
179
|
+
const searchQuery = searchQueryProp ?? internalSearch;
|
|
180
|
+
const setSearchQuery = (value) => {
|
|
181
|
+
onSearchChange?.(value);
|
|
182
|
+
if (searchQueryProp === void 0) {
|
|
183
|
+
setInternalSearch(value);
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
const changeQty = onQtyChangeProp ?? ((id, delta) => setInternalItems(
|
|
187
|
+
(current) => current.flatMap((item) => {
|
|
188
|
+
if (item.id !== id) {
|
|
189
|
+
return item;
|
|
190
|
+
}
|
|
191
|
+
const qty = item.qty + delta;
|
|
192
|
+
return qty <= 0 ? [] : [{ ...item, qty }];
|
|
193
|
+
})
|
|
194
|
+
));
|
|
195
|
+
const removeItem = onRemoveProp ?? ((id) => setInternalItems((current) => current.filter((item) => item.id !== id)));
|
|
196
|
+
const count = useMemo(() => items.reduce((total, item) => total + item.qty, 0), [items]);
|
|
197
|
+
useEffect(() => {
|
|
198
|
+
if (!showSearch || !searchOpen) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
document.getElementById("store-search-mobile")?.focus();
|
|
202
|
+
}, [searchOpen, showSearch]);
|
|
203
|
+
const dismissSearch = () => {
|
|
204
|
+
setSearchOpen(false);
|
|
205
|
+
searchTriggerRef.current?.focus();
|
|
206
|
+
};
|
|
207
|
+
const navLinkColor = className !== void 0 ? "text-inherit hover:text-foreground" : "text-foreground";
|
|
208
|
+
const isCurrent = (href) => href !== void 0 && href === currentPath;
|
|
209
|
+
const hasUtilityContent = shippingNote.trim().length > 0 || utilityLinks.length > 0;
|
|
210
|
+
return /* @__PURE__ */ jsxs(
|
|
211
|
+
"header",
|
|
212
|
+
{
|
|
213
|
+
className: cn(
|
|
214
|
+
"border-border sticky top-0 z-40 w-full border-b backdrop-blur-md",
|
|
215
|
+
className ?? "bg-background/95 supports-backdrop-filter:bg-background/80"
|
|
216
|
+
),
|
|
217
|
+
children: [
|
|
218
|
+
hasUtilityContent ? /* @__PURE__ */ jsx("div", { className: "bg-foreground text-background hidden lg:block", children: /* @__PURE__ */ jsxs("div", { className: "mx-auto flex h-9 w-full max-w-7xl items-center justify-between px-4 text-xs tracking-wide sm:px-6 lg:px-8", children: [
|
|
219
|
+
/* @__PURE__ */ jsx("p", { className: "text-background/80", children: shippingNote }),
|
|
220
|
+
/* @__PURE__ */ jsx("ul", { className: "flex items-center gap-5", children: utilityLinks.map((link) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
|
|
221
|
+
"a",
|
|
222
|
+
{
|
|
223
|
+
href: link.href,
|
|
224
|
+
className: "text-background/80 hover:text-background transition-colors duration-150",
|
|
225
|
+
children: link.label
|
|
226
|
+
}
|
|
227
|
+
) }, `${link.href}:${link.label}`)) })
|
|
228
|
+
] }) }) : null,
|
|
229
|
+
/* @__PURE__ */ jsxs("div", { className: "mx-auto flex h-16 w-full max-w-7xl items-center gap-3 px-4 sm:px-6 lg:px-8", children: [
|
|
230
|
+
/* @__PURE__ */ jsx(
|
|
231
|
+
Button,
|
|
232
|
+
{
|
|
233
|
+
variant: "ghost",
|
|
234
|
+
size: "icon",
|
|
235
|
+
className: "lg:hidden",
|
|
236
|
+
"aria-label": "Open menu",
|
|
237
|
+
"aria-expanded": menuOpen,
|
|
238
|
+
onClick: () => setMenuOpen((open) => !open),
|
|
239
|
+
children: /* @__PURE__ */ jsx(Menu, {})
|
|
240
|
+
}
|
|
241
|
+
),
|
|
242
|
+
/* @__PURE__ */ jsx(
|
|
243
|
+
MobileCategoryDrawer,
|
|
244
|
+
{
|
|
245
|
+
categories: uniqueById([
|
|
246
|
+
...storeCategories.map(toMenuItem),
|
|
247
|
+
...utilityLinks.map((link) => ({ id: link.href, label: link.label, href: link.href })),
|
|
248
|
+
...accountHref ? [{ id: accountHref, label: "Account", href: accountHref }] : []
|
|
249
|
+
]),
|
|
250
|
+
collections: [],
|
|
251
|
+
open: menuOpen,
|
|
252
|
+
onClose: () => setMenuOpen(false),
|
|
253
|
+
viewAllHref: ""
|
|
254
|
+
}
|
|
255
|
+
),
|
|
256
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1 lg:flex-none", children: /* @__PURE__ */ jsx(Logo, { text: logoText, href: logoHref, accent: logoAccent }) }),
|
|
257
|
+
/* @__PURE__ */ jsx("nav", { "aria-label": "Store", className: "hidden flex-1 lg:block", children: /* @__PURE__ */ jsx("ul", { className: "flex items-center gap-0.5", children: storeCategories.map(
|
|
258
|
+
(category) => category.children && category.children.length > 0 ? /* @__PURE__ */ jsxs("li", { className: "group relative", children: [
|
|
259
|
+
/* @__PURE__ */ jsx(
|
|
260
|
+
"a",
|
|
261
|
+
{
|
|
262
|
+
href: category.href,
|
|
263
|
+
"aria-current": isCurrent(category.href) ? "page" : void 0,
|
|
264
|
+
className: cn(
|
|
265
|
+
"hover:bg-muted focus-visible:ring-ring rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150 focus-visible:ring-2 focus-visible:outline-none",
|
|
266
|
+
category.emphasis ? "text-destructive" : navLinkColor,
|
|
267
|
+
isCurrent(category.href) && "font-semibold underline underline-offset-4"
|
|
268
|
+
),
|
|
269
|
+
children: category.label
|
|
270
|
+
}
|
|
271
|
+
),
|
|
272
|
+
/* @__PURE__ */ jsx("div", { className: "invisible absolute left-0 top-full z-50 pt-2 opacity-0 transition-opacity duration-150 group-hover:visible group-hover:opacity-100", children: /* @__PURE__ */ jsx(
|
|
273
|
+
MegaMenu,
|
|
274
|
+
{
|
|
275
|
+
categories: [toMenuItem(category)],
|
|
276
|
+
collections: [],
|
|
277
|
+
collectionsHref: "",
|
|
278
|
+
categoryColumnTitle: category.label
|
|
279
|
+
}
|
|
280
|
+
) })
|
|
281
|
+
] }, category.href) : /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
|
|
282
|
+
"a",
|
|
283
|
+
{
|
|
284
|
+
href: category.href,
|
|
285
|
+
"aria-current": isCurrent(category.href) ? "page" : void 0,
|
|
286
|
+
className: cn(
|
|
287
|
+
"hover:bg-muted focus-visible:ring-ring rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150 focus-visible:ring-2 focus-visible:outline-none",
|
|
288
|
+
category.emphasis ? "text-destructive" : navLinkColor,
|
|
289
|
+
isCurrent(category.href) && "font-semibold underline underline-offset-4"
|
|
290
|
+
),
|
|
291
|
+
children: category.label
|
|
292
|
+
}
|
|
293
|
+
) }, category.href)
|
|
294
|
+
) }) }),
|
|
295
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
296
|
+
showSearch ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
297
|
+
/* @__PURE__ */ jsx("div", { className: "hidden lg:block lg:w-64", children: /* @__PURE__ */ jsx(
|
|
298
|
+
StorefrontNavbarSearchBar,
|
|
299
|
+
{
|
|
300
|
+
id: "store-search",
|
|
301
|
+
value: searchQuery,
|
|
302
|
+
onValueChange: setSearchQuery
|
|
303
|
+
}
|
|
304
|
+
) }),
|
|
305
|
+
/* @__PURE__ */ jsx(
|
|
306
|
+
Button,
|
|
307
|
+
{
|
|
308
|
+
ref: searchTriggerRef,
|
|
309
|
+
variant: "ghost",
|
|
310
|
+
size: "icon",
|
|
311
|
+
className: "lg:hidden",
|
|
312
|
+
"aria-label": "Search products",
|
|
313
|
+
"aria-expanded": searchOpen,
|
|
314
|
+
onClick: () => setSearchOpen((open) => !open),
|
|
315
|
+
children: searchOpen ? /* @__PURE__ */ jsx(X, {}) : /* @__PURE__ */ jsx(Search, {})
|
|
316
|
+
}
|
|
317
|
+
)
|
|
318
|
+
] }) : null,
|
|
319
|
+
accountUnavailable ? /* @__PURE__ */ jsx(StorefrontNavbarAccountRetry, { pending: accountPending, onRetry: onAccountRetry }) : user ? /* @__PURE__ */ jsx(
|
|
320
|
+
StorefrontNavbarAccountMenu,
|
|
321
|
+
{
|
|
322
|
+
user,
|
|
323
|
+
items: accountMenuItems,
|
|
324
|
+
onHelp,
|
|
325
|
+
onSignOut,
|
|
326
|
+
pending: accountPending
|
|
327
|
+
}
|
|
328
|
+
) : accountHref ? accountPending ? /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon", className: "size-11", disabled: true, "aria-label": "Loading account session", children: /* @__PURE__ */ jsx(UserRound, { "aria-hidden": "true" }) }) : /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon", className: "size-11", asChild: true, children: /* @__PURE__ */ jsx("a", { href: accountHref, "aria-label": "Account", "aria-current": isCurrent(accountHref) ? "page" : void 0, children: /* @__PURE__ */ jsx(UserRound, { "aria-hidden": "true" }) }) }) : null,
|
|
329
|
+
/* @__PURE__ */ jsxs(
|
|
330
|
+
Sheet,
|
|
331
|
+
{
|
|
332
|
+
...cartOpen !== void 0 ? { open: cartOpen, onOpenChange: onCartOpenChange } : {},
|
|
333
|
+
children: [
|
|
334
|
+
/* @__PURE__ */ jsx(SheetTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
335
|
+
Button,
|
|
336
|
+
{
|
|
337
|
+
variant: "ghost",
|
|
338
|
+
size: "icon",
|
|
339
|
+
className: "relative overflow-visible",
|
|
340
|
+
"aria-label": `Cart, ${count} ${count === 1 ? "item" : "items"}`,
|
|
341
|
+
children: [
|
|
342
|
+
/* @__PURE__ */ jsx(ShoppingBag, { className: "size-5" }),
|
|
343
|
+
/* @__PURE__ */ jsx(CartBadge, { count })
|
|
344
|
+
]
|
|
345
|
+
}
|
|
346
|
+
) }),
|
|
347
|
+
/* @__PURE__ */ jsxs(SheetContent, { side: "right", className: "flex w-full max-w-sm flex-col gap-0 p-0", children: [
|
|
348
|
+
/* @__PURE__ */ jsx(SheetHeader, { className: "border-border border-b", children: /* @__PURE__ */ jsxs(SheetTitle, { className: "text-left text-base", children: [
|
|
349
|
+
"Cart",
|
|
350
|
+
count > 0 ? ` (${count})` : ""
|
|
351
|
+
] }) }),
|
|
352
|
+
/* @__PURE__ */ jsx(
|
|
353
|
+
StorefrontNavbarCartSheet,
|
|
354
|
+
{
|
|
355
|
+
items,
|
|
356
|
+
onQtyChange: changeQty,
|
|
357
|
+
onRemove: removeItem,
|
|
358
|
+
subtotal,
|
|
359
|
+
subtotalUnavailableLabel,
|
|
360
|
+
formatMoney,
|
|
361
|
+
onCheckout,
|
|
362
|
+
onViewCart,
|
|
363
|
+
canonical: canonicalCart,
|
|
364
|
+
state: cartState,
|
|
365
|
+
errorLabel: cartErrorLabel,
|
|
366
|
+
retryLabel: cartRetryLabel,
|
|
367
|
+
onRetry: onCartRetry,
|
|
368
|
+
checkoutUnavailable,
|
|
369
|
+
checkoutDisabled,
|
|
370
|
+
viewCartUnavailable
|
|
371
|
+
}
|
|
372
|
+
)
|
|
373
|
+
] })
|
|
374
|
+
]
|
|
375
|
+
}
|
|
376
|
+
)
|
|
377
|
+
] })
|
|
378
|
+
] }),
|
|
379
|
+
/* @__PURE__ */ jsx("p", { "aria-live": "polite", className: "sr-only", children: `Cart contains ${count} ${count === 1 ? "item" : "items"}` }),
|
|
380
|
+
showSearch && searchOpen ? /* @__PURE__ */ jsx("div", { className: "border-border flex flex-col gap-0 border-t p-4 lg:hidden", children: /* @__PURE__ */ jsx(
|
|
381
|
+
StorefrontNavbarSearchBar,
|
|
382
|
+
{
|
|
383
|
+
id: "store-search-mobile",
|
|
384
|
+
value: searchQuery,
|
|
385
|
+
onValueChange: setSearchQuery,
|
|
386
|
+
onDismiss: dismissSearch
|
|
387
|
+
}
|
|
388
|
+
) }) : null
|
|
389
|
+
]
|
|
390
|
+
}
|
|
391
|
+
);
|
|
392
|
+
}
|
|
393
|
+
var storefront_navbar_default = StorefrontNavbar;
|
|
394
|
+
export {
|
|
395
|
+
StorefrontNavbar,
|
|
396
|
+
StorefrontNavbarAccountRetry,
|
|
397
|
+
storefront_navbar_default as default
|
|
398
|
+
};
|
|
399
|
+
//# sourceMappingURL=storefront-navbar.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/blocks/e-commerce/navigation/storefront-navbar.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { AnimatePresence, motion, useReducedMotion } from 'motion/react'\nimport { Menu, Search, ShoppingBag, UserRound, RotateCcw, X } from 'lucide-react'\n\nimport { Button } from '../../../ui/button'\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '../../../ui/sheet'\nimport { cn } from '../../../lib/utils'\n\nimport { StorefrontNavbarAccountMenu, type AccountMenuItem, type StoreUser } from './storefront-navbar-account-menu'\nimport { StorefrontNavbarCartSheet, type CartItem, type CartSheetState } from './storefront-navbar-cart-sheet'\nimport type { UtilityLink } from './storefront-navbar-mobile-nav'\nimport { StorefrontNavbarSearchBar } from './storefront-navbar-search-bar'\nimport { MegaMenu } from './mega-menu'\nimport { MobileCategoryDrawer } from './mobile-category-drawer'\nimport type { MenuItem } from '../../../lib/types/menu'\nimport type { Money } from '@thorprovider/types'\nimport type { StoreCategory } from '../../../lib/contracts'\n\nfunction toMenuItem(category: StoreCategory): MenuItem {\n return {\n id: category.href,\n label: category.label,\n href: category.href,\n children: category.children?.map(toMenuItem),\n }\n}\n\n/**\n * Drawer entries come from three sources (categories, utility links, account\n * link). Hosts may reuse the same href across sources (e.g. a placeholder\n * href), which would produce duplicate React keys if passed through as-is.\n * Dedupe by href so every rendered item gets a unique id.\n */\nfunction uniqueById<T extends { id: string }>(items: T[]): T[] {\n const seen = new Set<string>()\n return items.filter((item) => {\n if (seen.has(item.id)) return false\n seen.add(item.id)\n return true\n })\n}\n\nexport interface LogoAccent {\n /** Trailing segment of `logoText` to render with the accent styling. */\n text: string\n /** Consumer-supplied classes for the accent span (e.g. a brand color token). */\n className?: string\n}\n\nfunction Logo({ text, href, accent }: { text: string; href?: string; accent?: LogoAccent }) {\n const className =\n 'focus-visible:ring-ring flex items-center gap-2 rounded-sm focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none'\n\n const accentText = accent?.text ?? ''\n const hasAccent = accentText.length > 0 && text.endsWith(accentText)\n const baseText = hasAccent ? text.slice(0, text.length - accentText.length) : text\n\n const content = (\n <>\n <svg viewBox='0 0 32 32' aria-hidden='true' className='text-primary size-7' fill='none' xmlns='http://www.w3.org/2000/svg'>\n <path\n d='M26 24.75C26.4142 24.75 26.75 24.4142 26.75 24C26.75 23.5858 26.4142 23.25 26 23.25V24.75ZM26 23.25H11V24.75H26V23.25ZM8.75 21V15H7.25V21H8.75ZM11 23.25C9.75736 23.25 8.75 22.2426 8.75 21H7.25C7.25 23.0711 8.92893 24.75 11 24.75V23.25Z'\n fill='currentColor'\n />\n <path\n d='M1.5 3.25C1.08579 3.25 0.75 3.58579 0.75 4C0.75 4.41421 1.08579 4.75 1.5 4.75V3.25ZM1.5 4.75H6V3.25H1.5V4.75ZM7.25 6V21H8.75V6H7.25ZM6 4.75C6.69036 4.75 7.25 5.30964 7.25 6H8.75C8.75 4.48122 7.51878 3.25 6 3.25V4.75Z'\n fill='currentColor'\n />\n <path\n d='M22 21.75C22.4142 21.75 22.75 21.4142 22.75 21C22.75 20.5858 22.4142 20.25 22 20.25V21.75ZM22 20.25H11V21.75H22V20.25ZM8.75 18V12H7.25V18H8.75ZM11 20.25C9.75736 20.25 8.75 19.2426 8.75 18H7.25C7.25 20.0711 8.92893 21.75 11 21.75V20.25Z'\n fill='currentColor'\n />\n <path\n d='M27.2057 19.754C27.0654 20.1438 26.6357 20.346 26.246 20.2057C25.8562 20.0654 25.654 19.6357 25.7943 19.246L27.2057 19.754ZM30.0361 9.67744L29.3305 9.4234L29.3305 9.4234L30.0361 9.67744ZM25.7943 19.246L29.3305 9.4234L30.7418 9.93148L27.2057 19.754L25.7943 19.246ZM28.1543 7.75L8 7.75V6.25L28.1543 6.25V7.75ZM29.3305 9.4234C29.6237 8.60882 29.0201 7.75 28.1543 7.75V6.25C30.059 6.25 31.3869 8.13941 30.7418 9.93148L29.3305 9.4234Z'\n fill='currentColor'\n />\n <path\n d='M13.5 21.75C13.0858 21.75 12.75 21.4142 12.75 21C12.75 20.5858 13.0858 20.25 13.5 20.25V21.75ZM26.7111 19.009L27.4174 19.2613L27.4174 19.2613L26.7111 19.009ZM13.5 20.25H23.8858V21.75H13.5V20.25ZM26.0048 18.7568L27.7937 13.7477L29.2063 14.2523L27.4174 19.2613L26.0048 18.7568ZM23.8858 20.25C24.8367 20.25 25.6849 19.6522 26.0048 18.7568L27.4174 19.2613C26.8843 20.7537 25.4706 21.75 23.8858 21.75V20.25Z'\n fill='currentColor'\n />\n <path d='M21.1694 10.5806L14.5651 17.1849' stroke='currentColor' strokeWidth='1.5' strokeLinecap='round' />\n <path d='M22.1694 14.5806L18.5632 18.1868' stroke='currentColor' strokeWidth='1.5' strokeLinecap='round' />\n <circle cx='13.1' cy='26.1' r='1.7' stroke='currentColor' strokeWidth='1.2' />\n <circle cx='22.1' cy='26.1' r='1.7' stroke='currentColor' strokeWidth='1.2' />\n </svg>\n <span className='text-base font-semibold tracking-tight'>\n {baseText}\n {hasAccent ? <span className={accent?.className}>{accentText}</span> : null}\n </span>\n </>\n )\n\n if (!href) {\n return <span className={className}>{content}</span>\n }\n\n return (\n <a href={href} className={className}>\n {content}\n </a>\n )\n}\n\ntype CartBadgeProps = {\n count: number\n}\n\n/**\n * Transitions.dev `notification-badge`: diagonal slide + spring pop when the\n * count appears or changes. Positioned outside the bag so it never covers the icon.\n */\nfunction CartBadge({ count }: CartBadgeProps) {\n const reduceMotion = useReducedMotion()\n\n return (\n <AnimatePresence>\n {count > 0 ? (\n <motion.span\n key='badge-shell'\n className='bg-foreground text-background pointer-events-none absolute -top-2.5 -end-3.5 flex size-[1.125rem] items-center justify-center overflow-hidden rounded-full text-[10px] font-medium tabular-nums shadow-sm ring-2 ring-background'\n initial={\n reduceMotion\n ? false\n : { scale: 0, x: -8.2, y: 12.4, opacity: 0, filter: 'blur(2px)' }\n }\n animate={{ scale: 1, x: 0, y: 0, opacity: 1, filter: 'blur(0px)' }}\n exit={\n reduceMotion\n ? { opacity: 0 }\n : {\n scale: 0,\n opacity: 0,\n filter: 'blur(2px)',\n transition: { duration: 0.18, ease: [0.4, 0, 0.2, 1] },\n }\n }\n transition={\n reduceMotion\n ? { duration: 0 }\n : { type: 'spring', stiffness: 520, damping: 18, mass: 0.6 }\n }\n style={{ willChange: 'transform, opacity, filter' }}\n >\n <AnimatePresence mode='popLayout' initial={false}>\n <motion.span\n key={count}\n className='block'\n initial={reduceMotion ? false : { y: 8, opacity: 0, filter: 'blur(2px)' }}\n animate={{ y: 0, opacity: 1, filter: 'blur(0px)' }}\n exit={reduceMotion ? undefined : { y: -8, opacity: 0, filter: 'blur(2px)' }}\n transition={{ duration: 0.22, ease: [0.22, 1, 0.36, 1] }}\n >\n {count > 99 ? '99+' : count}\n </motion.span>\n </AnimatePresence>\n </motion.span>\n ) : null}\n </AnimatePresence>\n )\n}\n\nexport interface StorefrontNavbarAccountRetryProps {\n /** Consumer-owned reconciliation in flight; holds the affordance inert. */\n pending?: boolean\n /** Consumer-owned recovery action. Without it the affordance is inert. */\n onRetry?: () => void\n}\n\n/**\n * Recovery affordance for an unavailable session. The block never resolves the\n * session itself: it surfaces the state and dispatches the consumer's retry.\n * Extracted (hooks-free) so the dispatch is testable without a DOM.\n */\nexport function StorefrontNavbarAccountRetry({ pending = false, onRetry }: StorefrontNavbarAccountRetryProps) {\n return (\n <Button\n variant='ghost'\n size='icon'\n className='size-11'\n disabled={pending || !onRetry}\n aria-label='Retry account session'\n title='Account session unavailable'\n onClick={onRetry}\n >\n <RotateCcw aria-hidden='true' />\n </Button>\n )\n}\n\nexport interface StorefrontNavbarProps {\n storeCategories: StoreCategory[]\n /**\n * Optional note shown in the desktop utility strip. When omitted (or empty)\n * and there are no `utilityLinks`, the strip is not rendered at all, so a\n * block with no optional content paints no empty decorative chrome.\n */\n shippingNote?: string\n utilityLinks: UtilityLink[]\n logoText: string\n logoHref?: string\n /**\n * Optional accent for a trailing segment of `logoText` (e.g. the \"Cuba\" in\n * \"ElectroCuba\"). When omitted, or when `text` is not a trailing segment of\n * `logoText`, the wordmark renders unchanged.\n */\n logoAccent?: LogoAccent\n /** Account destination for anonymous shoppers on every viewport. */\n accountHref?: string\n /**\n * When `false`, no search control is rendered at all — neither the desktop\n * input, the mobile trigger, nor the mobile panel. Defaults to `true` so\n * legacy consumers keep the existing self-contained search. The generated\n * storefront passes `false` while no verified global search contract exists\n * (E2 task 5.4), so no global search is presented as working.\n */\n /**\n * The storefront's current route path. When it matches a destination the link\n * is marked as the current page (accessibly, beyond color alone).\n */\n currentPath?: string\n showSearch?: boolean\n searchQuery?: string\n onSearchChange?: (value: string) => void\n items?: CartItem[]\n /**\n * Quantity DELTA for a backend cart line-item id. The boundary converts the\n * delta into an absolute quantity against the authoritative current line\n * quantity before mutating the cart.\n */\n onQtyChange?: (id: string, delta: number) => void\n /** Remove the backend cart line-item id. */\n onRemove?: (id: string) => void\n /** Authoritative backend subtotal for the mini-cart. */\n subtotal?: Money\n /** Shown when an authoritative subtotal is supplied but absent/malformed. */\n subtotalUnavailableLabel?: string\n /** Override money formatting (locale, currency). Defaults to `Money.currencyCode`. */\n formatMoney?: (money: Money) => string\n user?: StoreUser\n accountMenuItems?: AccountMenuItem[]\n onHelp?: () => void\n onSignOut?: () => void\n accountPending?: boolean\n accountUnavailable?: boolean\n onAccountRetry?: () => void\n onCheckout?: () => void\n onViewCart?: () => void\n /**\n * Controlled visibility for the cart sheet. When provided, the sheet opens\n * and closes from this value and `onCartOpenChange` instead of internal\n * state, so a host can share one cart surface across the navbar trigger and\n * successful add-to-cart. Omit both to keep the legacy uncontrolled sheet.\n */\n cartOpen?: boolean\n /** Change handler paired with `cartOpen` for a controlled sheet. */\n onCartOpenChange?: (open: boolean) => void\n /**\n * Backend-authoritative cart rendering for the sheet. When `true`, line\n * amounts use each item's canonical `lineTotal` Money and never fall back to\n * numeric `price * qty`. Omit for the legacy numeric rendering.\n */\n canonicalCart?: boolean\n /** Cart read/mutation lifecycle for the sheet. */\n cartState?: CartSheetState\n /** Message shown when `cartState` is `error`. */\n cartErrorLabel?: string\n /** Recovery action label for the error state. */\n cartRetryLabel?: string\n /** Recovery action invoked from the error state. */\n onCartRetry?: () => void\n /** When `true`, the sheet's checkout action is suppressed (checkout not installed). */\n checkoutUnavailable?: boolean\n /** When `true`, the sheet's checkout action is disabled (cart not ready). */\n checkoutDisabled?: boolean\n /** When `true`, the sheet's review action is suppressed (cart view not installed). */\n viewCartUnavailable?: boolean\n /**\n * Consumer-supplied classes merged onto the outer `<header>` as the final\n * argument, so a semantic surface such as `bg-brand-nav\n * text-brand-nav-foreground` overrides the default `bg-background`. Purely\n * presentational: no layout, structure, or behavior changes.\n */\n className?: string\n}\n\nexport function StorefrontNavbar({\n storeCategories,\n shippingNote = '',\n utilityLinks,\n logoText,\n logoHref,\n logoAccent,\n accountHref,\n currentPath,\n showSearch = true,\n searchQuery: searchQueryProp,\n onSearchChange,\n items: itemsProp,\n onQtyChange: onQtyChangeProp,\n onRemove: onRemoveProp,\n subtotal,\n subtotalUnavailableLabel,\n formatMoney,\n user,\n accountMenuItems,\n onHelp,\n onSignOut,\n accountPending = false,\n accountUnavailable = false,\n onAccountRetry,\n onCheckout,\n onViewCart,\n cartOpen,\n onCartOpenChange,\n canonicalCart,\n cartState,\n cartErrorLabel,\n cartRetryLabel,\n onCartRetry,\n checkoutUnavailable,\n checkoutDisabled,\n viewCartUnavailable,\n className,\n}: StorefrontNavbarProps) {\n /**\n * Integration seam\n * ----------------\n * Pass cart + search from your storefront, or leave uncontrolled for a\n * self-contained demo. Controlled props win when provided.\n */\n const [internalItems, setInternalItems] = useState<CartItem[]>([])\n const [internalSearch, setInternalSearch] = useState('')\n const [searchOpen, setSearchOpen] = useState(false)\n const [menuOpen, setMenuOpen] = useState(false)\n const searchTriggerRef = useRef<HTMLButtonElement>(null)\n\n const items = itemsProp ?? internalItems\n const searchQuery = searchQueryProp ?? internalSearch\n\n const setSearchQuery = (value: string) => {\n onSearchChange?.(value)\n if (searchQueryProp === undefined) {\n setInternalSearch(value)\n }\n }\n\n const changeQty =\n onQtyChangeProp ??\n ((id: string, delta: number) =>\n setInternalItems(current =>\n current.flatMap(item => {\n if (item.id !== id) {\n return item\n }\n\n const qty = item.qty + delta\n return qty <= 0 ? [] : [{ ...item, qty }]\n }),\n ))\n\n const removeItem =\n onRemoveProp ?? ((id: string) => setInternalItems(current => current.filter(item => item.id !== id)))\n\n const count = useMemo(() => items.reduce((total, item) => total + item.qty, 0), [items])\n\n useEffect(() => {\n if (!showSearch || !searchOpen) {\n return\n }\n\n document.getElementById('store-search-mobile')?.focus()\n }, [searchOpen, showSearch])\n\n const dismissSearch = () => {\n setSearchOpen(false)\n searchTriggerRef.current?.focus()\n }\n\n // When the consumer overrides the header surface via `className`, the nav\n // links inherit its text color and need an explicit hover foreground so\n // `hover:bg-muted` never paints white-on-light; otherwise they keep the\n // default foreground (and the default hover surface).\n const navLinkColor =\n className !== undefined ? 'text-inherit hover:text-foreground' : 'text-foreground'\n // The current page is marked beyond color: an accessible current state plus a\n // visible weight/underline, and nothing when no destination matches.\n const isCurrent = (href?: string) => href !== undefined && href === currentPath\n\n // The desktop utility strip is decorative chrome: it is painted only when it\n // has content (a non-empty note or at least one utility link), never empty.\n const hasUtilityContent = shippingNote.trim().length > 0 || utilityLinks.length > 0\n\n return (\n <header\n className={cn(\n 'border-border sticky top-0 z-40 w-full border-b backdrop-blur-md',\n className ?? 'bg-background/95 supports-backdrop-filter:bg-background/80',\n )}\n >\n {hasUtilityContent ? (\n <div className='bg-foreground text-background hidden lg:block'>\n <div className='mx-auto flex h-9 w-full max-w-7xl items-center justify-between px-4 text-xs tracking-wide sm:px-6 lg:px-8'>\n <p className='text-background/80'>{shippingNote}</p>\n <ul className='flex items-center gap-5'>\n {utilityLinks.map(link => (\n <li key={`${link.href}:${link.label}`}>\n <a\n href={link.href}\n className='text-background/80 hover:text-background transition-colors duration-150'\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n ) : null}\n\n <div className='mx-auto flex h-16 w-full max-w-7xl items-center gap-3 px-4 sm:px-6 lg:px-8'>\n <Button\n variant='ghost'\n size='icon'\n className='lg:hidden'\n aria-label='Open menu'\n aria-expanded={menuOpen}\n onClick={() => setMenuOpen(open => !open)}\n >\n <Menu />\n </Button>\n\n <MobileCategoryDrawer\n categories={uniqueById([\n ...storeCategories.map(toMenuItem),\n ...utilityLinks.map(link => ({ id: link.href, label: link.label, href: link.href })),\n ...(accountHref ? [{ id: accountHref, label: 'Account', href: accountHref }] : []),\n ])}\n collections={[]}\n open={menuOpen}\n onClose={() => setMenuOpen(false)}\n viewAllHref=''\n />\n\n <div className='flex-1 lg:flex-none'>\n <Logo text={logoText} href={logoHref} accent={logoAccent} />\n </div>\n\n <nav aria-label='Store' className='hidden flex-1 lg:block'>\n <ul className='flex items-center gap-0.5'>\n {storeCategories.map(category =>\n category.children && category.children.length > 0 ? (\n <li key={category.href} className='group relative'>\n <a\n href={category.href}\n aria-current={isCurrent(category.href) ? 'page' : undefined}\n className={cn(\n 'hover:bg-muted focus-visible:ring-ring rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150 focus-visible:ring-2 focus-visible:outline-none',\n category.emphasis ? 'text-destructive' : navLinkColor,\n isCurrent(category.href) && 'font-semibold underline underline-offset-4',\n )}\n >\n {category.label}\n </a>\n <div className='invisible absolute left-0 top-full z-50 pt-2 opacity-0 transition-opacity duration-150 group-hover:visible group-hover:opacity-100'>\n <MegaMenu\n categories={[toMenuItem(category)]}\n collections={[]}\n collectionsHref=''\n categoryColumnTitle={category.label}\n />\n </div>\n </li>\n ) : (\n <li key={category.href}>\n <a\n href={category.href}\n aria-current={isCurrent(category.href) ? 'page' : undefined}\n className={cn(\n 'hover:bg-muted focus-visible:ring-ring rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150 focus-visible:ring-2 focus-visible:outline-none',\n category.emphasis ? 'text-destructive' : navLinkColor,\n isCurrent(category.href) && 'font-semibold underline underline-offset-4',\n )}\n >\n {category.label}\n </a>\n </li>\n ),\n )}\n </ul>\n </nav>\n\n <div className='flex items-center gap-1.5'>\n {showSearch ? (\n <>\n <div className='hidden lg:block lg:w-64'>\n <StorefrontNavbarSearchBar\n id='store-search'\n value={searchQuery}\n onValueChange={setSearchQuery}\n />\n </div>\n\n <Button\n ref={searchTriggerRef}\n variant='ghost'\n size='icon'\n className='lg:hidden'\n aria-label='Search products'\n aria-expanded={searchOpen}\n onClick={() => setSearchOpen(open => !open)}\n >\n {searchOpen ? <X /> : <Search />}\n </Button>\n </>\n ) : null}\n\n {accountUnavailable ? (\n <StorefrontNavbarAccountRetry pending={accountPending} onRetry={onAccountRetry} />\n ) : user ? (\n <StorefrontNavbarAccountMenu\n user={user}\n items={accountMenuItems}\n onHelp={onHelp}\n onSignOut={onSignOut}\n pending={accountPending}\n />\n ) : accountHref ? (\n accountPending ? (\n <Button variant='ghost' size='icon' className='size-11' disabled aria-label='Loading account session'>\n <UserRound aria-hidden='true' />\n </Button>\n ) : (\n <Button variant='ghost' size='icon' className='size-11' asChild>\n <a href={accountHref} aria-label='Account' aria-current={isCurrent(accountHref) ? 'page' : undefined}>\n <UserRound aria-hidden='true' />\n </a>\n </Button>\n )\n ) : null}\n\n <Sheet\n {...(cartOpen !== undefined ? { open: cartOpen, onOpenChange: onCartOpenChange } : {})}\n >\n <SheetTrigger asChild>\n <Button\n variant='ghost'\n size='icon'\n className='relative overflow-visible'\n aria-label={`Cart, ${count} ${count === 1 ? 'item' : 'items'}`}\n >\n <ShoppingBag className='size-5' />\n <CartBadge count={count} />\n </Button>\n </SheetTrigger>\n <SheetContent side='right' className='flex w-full max-w-sm flex-col gap-0 p-0'>\n <SheetHeader className='border-border border-b'>\n <SheetTitle className='text-left text-base'>\n Cart{count > 0 ? ` (${count})` : ''}\n </SheetTitle>\n </SheetHeader>\n <StorefrontNavbarCartSheet\n items={items}\n onQtyChange={changeQty}\n onRemove={removeItem}\n subtotal={subtotal}\n subtotalUnavailableLabel={subtotalUnavailableLabel}\n formatMoney={formatMoney}\n onCheckout={onCheckout}\n onViewCart={onViewCart}\n canonical={canonicalCart}\n state={cartState}\n errorLabel={cartErrorLabel}\n retryLabel={cartRetryLabel}\n onRetry={onCartRetry}\n checkoutUnavailable={checkoutUnavailable}\n checkoutDisabled={checkoutDisabled}\n viewCartUnavailable={viewCartUnavailable}\n />\n </SheetContent>\n </Sheet>\n </div>\n </div>\n\n <p aria-live='polite' className='sr-only'>\n {`Cart contains ${count} ${count === 1 ? 'item' : 'items'}`}\n </p>\n\n {showSearch && searchOpen ? (\n <div className='border-border flex flex-col gap-0 border-t p-4 lg:hidden'>\n <StorefrontNavbarSearchBar\n id='store-search-mobile'\n value={searchQuery}\n onValueChange={setSearchQuery}\n onDismiss={dismissSearch}\n />\n </div>\n ) : null}\n </header>\n )\n}\n\nexport default StorefrontNavbar\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { Money } from '@thorprovider/types';
|
|
2
|
+
import { type OrderLineData } from './order-line';
|
|
3
|
+
export type OrderHistoryPresentation = 'cards' | 'rows';
|
|
4
|
+
/** Semantic badge tone. The host owns the mapping from its status model. */
|
|
5
|
+
export type OrderHistoryStatusTone = 'default' | 'secondary' | 'destructive' | 'outline';
|
|
6
|
+
/** Order status as data: the label is rendered and the tone styles it. */
|
|
7
|
+
export interface OrderHistoryStatus {
|
|
8
|
+
label: string;
|
|
9
|
+
tone?: OrderHistoryStatusTone;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Canonical order-history row: one order of the collection.
|
|
13
|
+
*
|
|
14
|
+
* `id` is the backend order identity — the React key and the value reported to
|
|
15
|
+
* `onViewOrder`/`onTrackOrder`. `total` is the backend order total and is
|
|
16
|
+
* rendered verbatim: the collection never sums its lines.
|
|
17
|
+
*/
|
|
18
|
+
export interface OrderHistoryOrder {
|
|
19
|
+
/** Backend order identity. Used as the React key; never rendered. */
|
|
20
|
+
id: string;
|
|
21
|
+
/** Human-readable order number, rendered through `orderLabel`. */
|
|
22
|
+
number: string;
|
|
23
|
+
/** Placement date, already formatted by the host. */
|
|
24
|
+
date: string;
|
|
25
|
+
status: OrderHistoryStatus;
|
|
26
|
+
/** Backend order total. Rendered verbatim; a malformed amount is unavailable. */
|
|
27
|
+
total: Money;
|
|
28
|
+
items: OrderLineData[];
|
|
29
|
+
/** When true (and `onTrackOrder` is supplied) the tracking action renders. */
|
|
30
|
+
trackable?: boolean;
|
|
31
|
+
}
|
|
32
|
+
/** Every user-facing string the collection renders. All are overridable. */
|
|
33
|
+
export interface OrderHistoryLabels {
|
|
34
|
+
title: string;
|
|
35
|
+
description: string;
|
|
36
|
+
orderLabel: string;
|
|
37
|
+
placedOnLabel: string;
|
|
38
|
+
quantityLabel: string;
|
|
39
|
+
totalLabel: string;
|
|
40
|
+
viewOrderLabel: string;
|
|
41
|
+
trackOrderLabel: string;
|
|
42
|
+
amountUnavailableLabel: string;
|
|
43
|
+
emptyLabel: string;
|
|
44
|
+
}
|
|
45
|
+
export interface OrderHistoryProps {
|
|
46
|
+
orders: OrderHistoryOrder[];
|
|
47
|
+
/**
|
|
48
|
+
* Bounded structure switch. `cards` (default) renders one card per order;
|
|
49
|
+
* `rows` renders one bordered row per order. Both accept the same data and
|
|
50
|
+
* report the same actions. Responsiveness is CSS only.
|
|
51
|
+
*/
|
|
52
|
+
presentation?: OrderHistoryPresentation;
|
|
53
|
+
labels?: Partial<OrderHistoryLabels>;
|
|
54
|
+
/** Locale used to format amounts from their own currency code. */
|
|
55
|
+
locale?: string;
|
|
56
|
+
/** Host amount formatter; wins over `locale`. */
|
|
57
|
+
formatMoney?: (money: Money) => string;
|
|
58
|
+
/** Report the backend order id of the order whose detail should open. */
|
|
59
|
+
onViewOrder?: (id: string) => void;
|
|
60
|
+
/** Report the backend order id of the order to track. */
|
|
61
|
+
onTrackOrder?: (id: string) => void;
|
|
62
|
+
className?: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The canonical order-history collection section.
|
|
66
|
+
*
|
|
67
|
+
* It renders exactly the orders it is given: pagination, ordering, detail,
|
|
68
|
+
* loading/error states, and the money values all belong to the host. The block
|
|
69
|
+
* holds no selection state, never counts the collection, never compares a
|
|
70
|
+
* status label to a literal, and never measures the viewport.
|
|
71
|
+
*/
|
|
72
|
+
export declare function OrderHistory({ orders, presentation, labels, locale, formatMoney: formatMoneyProp, onViewOrder, onTrackOrder, className, }: OrderHistoryProps): import("react").JSX.Element;
|
|
73
|
+
export default OrderHistory;
|
|
74
|
+
//# sourceMappingURL=order-history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order-history.d.ts","sourceRoot":"","sources":["../../../../src/blocks/e-commerce/order-history/order-history.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAKhD,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,cAAc,CAAA;AAErB,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,MAAM,CAAA;AAEvD,4EAA4E;AAC5E,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,CAAA;AAExF,0EAA0E;AAC1E,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,sBAAsB,CAAA;CAC9B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,EAAE,EAAE,MAAM,CAAA;IACV,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAA;IACd,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,kBAAkB,CAAA;IAC1B,iFAAiF;IACjF,KAAK,EAAE,KAAK,CAAA;IACZ,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,4EAA4E;AAC5E,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,iBAAiB,EAAE,CAAA;IAC3B;;;;OAIG;IACH,YAAY,CAAC,EAAE,wBAAwB,CAAA;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACpC,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iDAAiD;IACjD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAA;IACtC,yEAAyE;IACzE,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,yDAAyD;IACzD,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAoBD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,YAAsB,EACtB,MAAM,EACN,MAAM,EACN,WAAW,EAAE,eAAe,EAC5B,WAAW,EACX,YAAY,EACZ,SAAS,GACV,EAAE,iBAAiB,+BAgJnB;AAED,eAAe,YAAY,CAAA"}
|