@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/shopping-carts/shopping-cart.tsx"],"sourcesContent":["'use client'\n\nimport { useId, useState } from 'react'\nimport { ShoppingCart as ShoppingCartIcon, Zap, Clock, CreditCard, Wallet, Minus, Plus, X } from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport type { Money } from '@thorprovider/types'\nimport { Card, CardContent, CardHeader, CardTitle } from '../../../ui/card'\nimport { Button } from '../../../ui/button'\nimport { Input } from '../../../ui/input'\nimport { Separator } from '../../../ui/separator'\nimport { Progress } from '../../../ui/progress'\nimport { cn } from '../../../lib/utils'\nimport { formatMoney, isAvailableMoney } from '../../../lib/money'\nimport type { CartTotals, ShoppingCartItem, ShoppingCartSuggestion } from '../../../lib/contracts'\n\n/** Host-supplied promotion definition. Icons are React-side only. */\nexport interface ShoppingCartPromotion {\n threshold: number\n reward: string\n icon: LucideIcon\n}\n\nexport type ShoppingCartTotalsState = 'idle' | 'pending' | 'error'\n\nexport type ShoppingCartPresentation = 'compact' | 'page'\n\nexport interface ShoppingCartProps {\n /** Canonical cart lines keyed by backend cart line-item id. */\n items: ShoppingCartItem[]\n promotions?: ShoppingCartPromotion[]\n recentlyViewed?: ShoppingCartSuggestion[]\n /**\n * Layout presentation. `compact` (default) is the collapsible quick-cart\n * card; `page` is a wide, always-expanded review layout with a primary\n * heading, no collapse control, and normal page scrolling. Both use the same\n * line controls and authoritative monetary rendering.\n */\n presentation?: ShoppingCartPresentation\n /**\n * Backend-authoritative totals. The cart renders these verbatim; it never\n * computes subtotal/tax/shipping/total locally.\n */\n totals?: CartTotals\n /** Controlled state of the totals fetch/mutation. */\n totalsState?: ShoppingCartTotalsState\n totalsErrorLabel?: string\n /** Shown when a required total amount is absent or malformed (never as zero). */\n totalsUnavailableLabel?: string\n /** Shown for a line whose supplied line total is absent or malformed. */\n amountUnavailableLabel?: string\n retryLabel?: string\n onRetryTotals?: () => void\n /** Override money formatting (locale, currency). Defaults to `Money.currencyCode`. */\n formatMoney?: (money: Money) => string\n // labels (Spanish defaults):\n titleLabel?: string // 'Carrito de compras'\n subtotalLabel?: string // 'Subtotal'\n discountLabel?: string\n taxLabel?: string // 'Impuestos'\n shippingLabel?: string // 'Envío'\n shippingFreeLabel?: string // 'Gratis'\n totalLabel?: string // 'Total'\n totalsPendingLabel?: string\n awayFromLabel?: string // 'Te faltan ${amount} para'\n activatedLabel?: string // '¡{reward} activada!'\n itemsLabel?: string // 'artículos'\n expressCheckoutLabel?: string // 'Compra rápida'\n expressLabel?: string // 'Rápido'\n standardLabel?: string // 'Estándar'\n estimatedDeliveryLabel?: string\n secureCheckoutLabel?: string // 'Pago seguro • SSL cifrado'\n recentlyViewedLabel?: string // 'Vistos recientemente'\n promoPromptLabel?: string // '¿Tienes un código de descuento?'\n promoPlaceholderLabel?: string // 'Introduce tu código'\n promoApplyLabel?: string // 'Aplicar'\n collapseLabel?: string // 'Contraer carrito'\n expandLabel?: string // 'Expandir carrito'\n checkoutLabel?: string // 'Ver carrito y finalizar'\n quickCheckoutLabel?: string // 'Compra rápida'\n checkoutNowLabel?: string // 'Finalizar ahora'\n emptyLabel?: string\n removeLabel?: string\n decreaseLabel?: string\n increaseLabel?: string\n continueShoppingLabel?: string // 'Seguir comprando'\n // action availability:\n /** Suppress the checkout action (e.g. the checkout feature is not installed). */\n checkoutUnavailable?: boolean\n /** Disable checkout while the cart is not ready (pending/error/invalid totals). */\n checkoutDisabled?: boolean\n // callbacks:\n /**\n * ABSOLUTE quantity for a backend cart line-item id (distinct from the\n * Navbar's DELTA). The boundary mutates the cart by line-item id.\n */\n onQuantityChange?: (id: string, quantity: number) => void\n /** Remove the backend cart line-item id. */\n onRemove?: (id: string) => void\n onCheckout?: () => void\n onQuickCheckout?: () => void\n onPayWithApple?: () => void\n onPayWithGoogle?: () => void\n /**\n * Report an entered promotion code to the host. The block never validates\n * or resolves codes; the authoritative result arrives through `totals`\n * (discount) and `promotions`. When absent, the promo affordance is not\n * rendered.\n */\n onApplyPromo?: (code: string) => void\n onRecentlyViewedClick?: (id: string) => void\n /** Page presentation only: navigate back to browsing. */\n onContinueShopping?: () => void\n}\n\nconst fallbackFormatter = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' })\n\nconst interpolate = (template: string, values: Record<string, string>) =>\n template.replace(/\\$\\{(\\w+)\\}|\\{(\\w+)\\}/g, (match, dollarKey, braceKey) => {\n const key = dollarKey ?? braceKey\n return values[key] ?? match\n })\n\nexport function ShoppingCart({\n items,\n promotions,\n recentlyViewed,\n presentation = 'compact',\n totals,\n totalsState = 'idle',\n totalsErrorLabel = 'No se pudieron actualizar los totales.',\n totalsUnavailableLabel = 'Totales no disponibles.',\n amountUnavailableLabel = '—',\n retryLabel = 'Reintentar',\n onRetryTotals,\n formatMoney: formatMoneyProp,\n titleLabel = 'Carrito de compras',\n subtotalLabel = 'Subtotal',\n discountLabel = 'Descuento',\n taxLabel = 'Impuestos',\n shippingLabel = 'Envío',\n shippingFreeLabel = 'Gratis',\n totalLabel = 'Total',\n totalsPendingLabel = 'Actualizando totales…',\n awayFromLabel = 'Te faltan ${amount} para',\n activatedLabel = '¡{reward} activada!',\n itemsLabel = 'artículos',\n expressCheckoutLabel = 'Compra rápida',\n expressLabel = 'Rápido',\n standardLabel = 'Estándar',\n estimatedDeliveryLabel,\n secureCheckoutLabel = 'Pago seguro • SSL cifrado',\n recentlyViewedLabel = 'Vistos recientemente',\n promoPromptLabel = '¿Tienes un código de descuento?',\n promoPlaceholderLabel = 'Introduce tu código',\n promoApplyLabel = 'Aplicar',\n collapseLabel = 'Contraer carrito',\n expandLabel = 'Expandir carrito',\n checkoutLabel = 'Ver carrito y finalizar',\n quickCheckoutLabel = 'Compra rápida',\n checkoutNowLabel = 'Finalizar ahora',\n emptyLabel = 'Tu carrito está vacío',\n removeLabel = 'Quitar',\n decreaseLabel = 'Disminuir cantidad',\n increaseLabel = 'Aumentar cantidad',\n continueShoppingLabel = 'Seguir comprando',\n checkoutUnavailable,\n checkoutDisabled,\n onQuantityChange,\n onRemove,\n onCheckout,\n onQuickCheckout,\n onPayWithApple,\n onPayWithGoogle,\n onApplyPromo,\n onRecentlyViewedClick,\n onContinueShopping,\n}: ShoppingCartProps) {\n const [isExpanded, setIsExpanded] = useState(true)\n const [quickCheckout, setQuickCheckout] = useState(false)\n const [promoCode, setPromoCode] = useState('')\n const promoInputId = useId()\n\n const isPage = presentation === 'page'\n // The page presentation is always expanded; only the compact card collapses.\n const expanded = isPage ? true : isExpanded\n // Display currency derives from the authoritative Money subtotal; the USD\n // formatter is only the fallback when no authoritative currency exists.\n const format = formatMoneyProp\n ? (value: number) => {\n const money: Money = { amount: String(value), currencyCode: totals?.subtotal?.currencyCode ?? 'USD' }\n return formatMoneyProp(money)\n }\n : totals?.subtotal?.currencyCode && totals.subtotal.currencyCode !== 'USD'\n ? (value: number) =>\n new Intl.NumberFormat('en-US', { style: 'currency', currency: totals.subtotal.currencyCode }).format(value)\n : (value: number) => fallbackFormatter.format(value)\n const money = (value: Money | null | undefined) => formatMoney(value, formatMoneyProp)\n const subtotalAmount = isAvailableMoney(totals?.subtotal) ? Number(totals.subtotal.amount) : 0\n const itemCount = items.reduce((sum, item) => sum + item.quantity, 0)\n const hasExpress = Boolean(onQuickCheckout || onPayWithApple || onPayWithGoogle)\n // While totals/mutations are pending, keep confirmed data visible but block\n // conflicting edits and checkout until the backend responds.\n const mutationsDisabled = totalsState === 'pending'\n\n const sortedPromotions = [...(promotions ?? [])].sort((a, b) => a.threshold - b.threshold)\n const currentPromo = (() => {\n if (!isAvailableMoney(totals?.subtotal)) return null\n for (let i = sortedPromotions.length - 1; i >= 0; i--) {\n if (subtotalAmount >= sortedPromotions[i].threshold) {\n return { ...sortedPromotions[i], achieved: true }\n }\n }\n const next = sortedPromotions.find(p => subtotalAmount < p.threshold)\n return next ? { ...next, achieved: false } : null\n })()\n const progressPercentage =\n currentPromo && !currentPromo.achieved\n ? Math.min(100, (subtotalAmount / currentPromo.threshold) * 100)\n : 100\n\n const lineAmount = (item: ShoppingCartItem): string | null => {\n // The backend-authoritative line total renders verbatim. A malformed amount\n // is unavailable (never a fabricated zero); `unitPrice` is never multiplied\n // locally — the cart contract forbids local `unit × qty` arithmetic.\n if (item.lineTotal === undefined) return null\n return money(item.lineTotal)\n }\n\n const renderTotals = () => {\n if (totalsState === 'pending') {\n return (\n <div className='flex flex-col gap-2' aria-live='polite'>\n <p className='text-muted-foreground text-sm'>{totalsPendingLabel}</p>\n </div>\n )\n }\n if (totalsState === 'error') {\n return (\n <div className='flex flex-col gap-2' role='alert'>\n <p className='text-destructive text-sm'>{totalsErrorLabel}</p>\n {onRetryTotals ? (\n <Button variant='outline' size='sm' className='w-fit' onClick={onRetryTotals}>\n {retryLabel}\n </Button>\n ) : null}\n </div>\n )\n }\n if (!totals) return null\n\n const subtotalText = money(totals.subtotal)\n const totalText = money(totals.total)\n // Required totals: if either is absent/malformed, show an explicit\n // unavailable state (with recovery) rather than a fabricated zero.\n if (subtotalText === null || totalText === null) {\n return (\n <div className='flex flex-col gap-2' role='status'>\n <p className='text-muted-foreground text-sm'>{totalsUnavailableLabel}</p>\n {onRetryTotals ? (\n <Button variant='outline' size='sm' className='w-fit' onClick={onRetryTotals}>\n {retryLabel}\n </Button>\n ) : null}\n </div>\n )\n }\n\n const shippingText = money(totals.shipping)\n return (\n <>\n <div className='flex justify-between text-sm'>\n <span>{subtotalLabel}</span>\n <span className='tabular-nums'>{subtotalText}</span>\n </div>\n {isAvailableMoney(totals.discount) ? (\n <div className='flex justify-between text-sm'>\n <span>{discountLabel}</span>\n <span className='tabular-nums'>{money(totals.discount)}</span>\n </div>\n ) : null}\n {isAvailableMoney(totals.tax) ? (\n <div className='flex justify-between text-sm'>\n <span>{taxLabel}</span>\n <span className='tabular-nums'>{money(totals.tax)}</span>\n </div>\n ) : null}\n {shippingText !== null ? (\n <div className='flex justify-between text-sm text-success'>\n <span>{shippingLabel}</span>\n <span className='tabular-nums'>\n {Number(totals.shipping?.amount) === 0 ? shippingFreeLabel : shippingText}\n </span>\n </div>\n ) : null}\n <Separator />\n <div className='flex justify-between font-semibold'>\n <span>{totalLabel}</span>\n <span className='tabular-nums'>{totalText}</span>\n </div>\n </>\n )\n }\n\n const renderPromoEntry = () =>\n onApplyPromo ? (\n <form\n className='flex flex-col gap-2'\n onSubmit={event => {\n event.preventDefault()\n const code = promoCode.trim()\n if (!code) return\n onApplyPromo(code)\n setPromoCode('')\n }}\n >\n <label className='text-sm' htmlFor={promoInputId}>\n {promoPromptLabel}\n </label>\n <div className='flex gap-2'>\n <Input\n id={promoInputId}\n value={promoCode}\n onChange={event => setPromoCode(event.target.value)}\n placeholder={promoPlaceholderLabel}\n className='h-9 flex-1'\n />\n <Button type='submit' variant='outline' size='sm' className='h-9' disabled={mutationsDisabled}>\n {promoApplyLabel}\n </Button>\n </div>\n </form>\n ) : null\n\n return (\n <section className='py-8'>\n <div className={cn('mx-auto px-4', isPage ? 'max-w-3xl' : 'max-w-md')}>\n {isPage ? (\n <h1 className='mb-6 text-2xl font-semibold tracking-tight'>{titleLabel}</h1>\n ) : null}\n <Card className={isPage ? 'shadow-sm' : 'shadow-lg'}>\n {/* Header */}\n <CardHeader className='flex flex-row items-center justify-between space-y-0 pb-3'>\n <CardTitle className='flex items-center gap-2'>\n <ShoppingCartIcon className='size-5' />\n {titleLabel} ({itemCount})\n </CardTitle>\n {!isPage ? (\n <Button\n variant='ghost'\n className='h-8 cursor-pointer px-3 text-xs'\n size='sm'\n onClick={() => setIsExpanded(!isExpanded)}\n aria-expanded={isExpanded}\n aria-label={isExpanded ? collapseLabel : expandLabel}\n >\n {isExpanded ? <X /> : <Plus />}\n </Button>\n ) : null}\n </CardHeader>\n\n <CardContent className='flex flex-col gap-6'>\n {items.length === 0 ? (\n <div className='flex flex-col items-center justify-center gap-4 py-6 text-center'>\n <ShoppingCartIcon className='text-muted-foreground/50 size-10' />\n <p className='text-muted-foreground text-sm'>{emptyLabel}</p>\n {isPage && onContinueShopping ? (\n <Button variant='outline' onClick={onContinueShopping}>\n {continueShoppingLabel}\n </Button>\n ) : null}\n </div>\n ) : (\n <>\n {/* Promotion Progress */}\n {currentPromo && !currentPromo.achieved ? (\n <div className='flex flex-col gap-3'>\n <div className='flex items-center justify-between text-sm'>\n <span className='text-muted-foreground'>\n {interpolate(awayFromLabel, {\n amount: format(currentPromo.threshold - subtotalAmount),\n })}\n </span>\n <div className='flex items-center gap-1'>\n <currentPromo.icon className='text-primary size-4' />\n <span className='text-primary font-medium'>{currentPromo.reward}</span>\n </div>\n </div>\n <Progress value={progressPercentage} className='h-2' />\n </div>\n ) : null}\n\n {/* Active Promotion */}\n {currentPromo?.achieved ? (\n <div className='rounded-lg bg-success/10 p-3'>\n <div className='flex items-center gap-2 text-success'>\n <currentPromo.icon className='size-4' />\n <span className='text-sm font-medium'>\n {interpolate(activatedLabel, { reward: currentPromo.reward })}\n </span>\n </div>\n </div>\n ) : null}\n\n {expanded && (\n <>\n {/* Cart Items */}\n <div\n className={cn(\n 'flex flex-col gap-4',\n !isPage &&\n 'scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-gray-600 scrollbar-track-transparent max-h-64 overflow-y-auto',\n )}\n >\n {items.map(item => (\n <div key={item.id} className='flex items-start gap-3'>\n {item.image ? (\n <img src={item.image || undefined} alt='' className='h-12 w-12 rounded-md object-cover' />\n ) : (\n <div aria-hidden='true' className='bg-muted h-12 w-12 shrink-0 rounded-md' />\n )}\n\n <div className='flex flex-1 flex-col gap-1'>\n <h3 className='line-clamp-2 text-sm font-medium'>{item.name}</h3>\n {item.variant ? <p className='text-muted-foreground text-xs'>{item.variant}</p> : null}\n\n <div className='flex items-center justify-between'>\n <span className='text-sm font-semibold'>{lineAmount(item) ?? amountUnavailableLabel}</span>\n\n <div className='flex items-center'>\n <Button\n variant='ghost'\n size='sm'\n className='size-6 h-8 cursor-pointer p-0 px-3 text-xs'\n onClick={\n onQuantityChange\n ? () => onQuantityChange(item.id, item.quantity - 1)\n : undefined\n }\n disabled={item.quantity <= 1 || mutationsDisabled}\n aria-label={`${decreaseLabel}, ${item.name}`}\n >\n <Minus />\n </Button>\n <span className='mx-2 w-6 text-center text-sm'>{item.quantity}</span>\n <Button\n variant='ghost'\n size='sm'\n className='size-6 h-8 cursor-pointer p-0 px-3 text-xs'\n onClick={\n onQuantityChange\n ? () => onQuantityChange(item.id, item.quantity + 1)\n : undefined\n }\n aria-label={`${increaseLabel}, ${item.name}`}\n disabled={mutationsDisabled}\n >\n <Plus />\n </Button>\n <Button\n variant='ghost'\n size='sm'\n className='text-destructive hover:text-destructive ms-2 size-6 h-8 cursor-pointer p-0 px-3 text-xs'\n onClick={onRemove ? () => onRemove(item.id) : undefined}\n disabled={mutationsDisabled}\n aria-label={`${removeLabel} ${item.name}`}\n >\n <X />\n </Button>\n </div>\n </div>\n </div>\n </div>\n ))}\n </div>\n\n <Separator />\n\n {/* Order Summary — backend-authoritative only */}\n <div className='flex flex-col gap-2'>{renderTotals()}</div>\n\n {/* Promo code entry — reports to the host, never resolves locally */}\n {renderPromoEntry()}\n\n {/* Quick Actions */}\n <div className='flex flex-col gap-3'>\n {/* Express Checkout Toggle — only when the host supplies a handler */}\n {hasExpress ? (\n <>\n <div className='flex items-center justify-between text-sm'>\n <span>{expressCheckoutLabel}</span>\n <Button\n variant='outline'\n size='sm'\n onClick={() => setQuickCheckout(!quickCheckout)}\n className='h-8 cursor-pointer'\n aria-pressed={quickCheckout}\n >\n <Zap />\n {quickCheckout ? standardLabel : expressLabel}\n </Button>\n </div>\n\n {quickCheckout ? (\n <div className='grid grid-cols-2 gap-2'>\n {onPayWithApple ? (\n <Button size='sm' variant='outline' className='h-8 cursor-pointer px-3 text-xs' onClick={onPayWithApple}>\n <Wallet />\n Apple Pay\n </Button>\n ) : null}\n {onPayWithGoogle ? (\n <Button size='sm' variant='outline' className='h-8 cursor-pointer px-3 text-xs' onClick={onPayWithGoogle}>\n <CreditCard />\n Google Pay\n </Button>\n ) : null}\n </div>\n ) : null}\n </>\n ) : null}\n\n {/* Checkout Button */}\n {!checkoutUnavailable ? (\n <Button\n size='lg'\n className='h-10 w-full cursor-pointer px-8'\n onClick={hasExpress && quickCheckout ? onQuickCheckout : onCheckout}\n disabled={checkoutDisabled || totalsState === 'pending'}\n >\n {hasExpress && quickCheckout ? quickCheckoutLabel : checkoutLabel}\n </Button>\n ) : null}\n\n {/* Continue shopping — page presentation only */}\n {isPage && onContinueShopping ? (\n <Button\n variant='outline'\n size='lg'\n className='h-10 w-full cursor-pointer px-8'\n onClick={onContinueShopping}\n >\n {continueShoppingLabel}\n </Button>\n ) : null}\n\n {/* Estimated Delivery — only when supplied, never fabricated */}\n {estimatedDeliveryLabel ? (\n <div className='text-muted-foreground flex items-center justify-center gap-2 text-xs'>\n <Clock className='size-3' />\n <span>{estimatedDeliveryLabel}</span>\n </div>\n ) : null}\n </div>\n\n {/* Security Badge */}\n <div className='bg-muted/50 rounded-lg p-3 text-center'>\n <div className='text-muted-foreground flex items-center justify-center gap-2 text-xs'>\n <div className='size-2 rounded-full bg-success' aria-hidden='true' />\n <span>{secureCheckoutLabel}</span>\n </div>\n </div>\n </>\n )}\n\n {/* Collapsed Summary */}\n {!expanded && (\n <div className='flex flex-col gap-3'>\n <div className='flex items-center justify-between'>\n <span className='text-muted-foreground text-sm'>\n {itemCount} {itemsLabel}\n </span>\n {isAvailableMoney(totals?.total) ? (\n <span className='font-semibold tabular-nums'>{money(totals.total)}</span>\n ) : null}\n </div>\n\n <Button size='sm' className='h-8 w-full cursor-pointer px-3 text-xs' onClick={onCheckout}>\n {checkoutNowLabel}\n </Button>\n </div>\n )}\n\n {/* Recently Viewed — host-supplied suggestions only */}\n {expanded && recentlyViewed && recentlyViewed.length > 0 && (\n <div className='flex flex-col gap-3'>\n <h4 className='text-sm font-medium'>{recentlyViewedLabel}</h4>\n <div className='grid grid-cols-3 gap-2'>\n {recentlyViewed.map(item => {\n const suggestionPrice = money(item.unitPrice)\n return (\n <button\n key={item.id}\n type='button'\n className={cn(\n 'group text-start',\n onRecentlyViewedClick && 'cursor-pointer',\n )}\n onClick={onRecentlyViewedClick ? () => onRecentlyViewedClick(item.id) : undefined}\n >\n <div className='bg-muted mb-1 aspect-square overflow-hidden'>\n {item.image ? (\n <img\n src={item.image || undefined}\n alt={item.name}\n className='size-full rounded-md object-cover'\n />\n ) : null}\n </div>\n <p className='text-muted-foreground truncate text-xs'>{item.name}</p>\n {suggestionPrice !== null ? (\n <p className='text-xs font-medium tabular-nums'>{suggestionPrice}</p>\n ) : null}\n </button>\n )\n })}\n </div>\n </div>\n )}\n </>\n )}\n </CardContent>\n </Card>\n </div>\n </section>\n )\n}\n\nexport default ShoppingCart\n"],"mappings":"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","names":["money","ShoppingCartIcon"]}
|
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useId, useState } from "react";
|
|
4
|
+
import { ShoppingCart as ShoppingCartIcon, Zap, Clock, CreditCard, Wallet, Minus, Plus, X } from "lucide-react";
|
|
5
|
+
import { Card, CardContent, CardHeader, CardTitle } from "../../../ui/card.mjs";
|
|
6
|
+
import { Button } from "../../../ui/button.mjs";
|
|
7
|
+
import { Input } from "../../../ui/input.mjs";
|
|
8
|
+
import { Separator } from "../../../ui/separator.mjs";
|
|
9
|
+
import { Progress } from "../../../ui/progress.mjs";
|
|
10
|
+
import { cn } from "../../../lib/utils.mjs";
|
|
11
|
+
import { formatMoney, isAvailableMoney } from "../../../lib/money.mjs";
|
|
12
|
+
const fallbackFormatter = new Intl.NumberFormat("en-US", { style: "currency", currency: "USD" });
|
|
13
|
+
const interpolate = (template, values) => template.replace(/\$\{(\w+)\}|\{(\w+)\}/g, (match, dollarKey, braceKey) => {
|
|
14
|
+
const key = dollarKey ?? braceKey;
|
|
15
|
+
return values[key] ?? match;
|
|
16
|
+
});
|
|
17
|
+
function ShoppingCart({
|
|
18
|
+
items,
|
|
19
|
+
promotions,
|
|
20
|
+
recentlyViewed,
|
|
21
|
+
presentation = "compact",
|
|
22
|
+
totals,
|
|
23
|
+
totalsState = "idle",
|
|
24
|
+
totalsErrorLabel = "No se pudieron actualizar los totales.",
|
|
25
|
+
totalsUnavailableLabel = "Totales no disponibles.",
|
|
26
|
+
amountUnavailableLabel = "\u2014",
|
|
27
|
+
retryLabel = "Reintentar",
|
|
28
|
+
onRetryTotals,
|
|
29
|
+
formatMoney: formatMoneyProp,
|
|
30
|
+
titleLabel = "Carrito de compras",
|
|
31
|
+
subtotalLabel = "Subtotal",
|
|
32
|
+
discountLabel = "Descuento",
|
|
33
|
+
taxLabel = "Impuestos",
|
|
34
|
+
shippingLabel = "Env\xEDo",
|
|
35
|
+
shippingFreeLabel = "Gratis",
|
|
36
|
+
totalLabel = "Total",
|
|
37
|
+
totalsPendingLabel = "Actualizando totales\u2026",
|
|
38
|
+
awayFromLabel = "Te faltan ${amount} para",
|
|
39
|
+
activatedLabel = "\xA1{reward} activada!",
|
|
40
|
+
itemsLabel = "art\xEDculos",
|
|
41
|
+
expressCheckoutLabel = "Compra r\xE1pida",
|
|
42
|
+
expressLabel = "R\xE1pido",
|
|
43
|
+
standardLabel = "Est\xE1ndar",
|
|
44
|
+
estimatedDeliveryLabel,
|
|
45
|
+
secureCheckoutLabel = "Pago seguro \u2022 SSL cifrado",
|
|
46
|
+
recentlyViewedLabel = "Vistos recientemente",
|
|
47
|
+
promoPromptLabel = "\xBFTienes un c\xF3digo de descuento?",
|
|
48
|
+
promoPlaceholderLabel = "Introduce tu c\xF3digo",
|
|
49
|
+
promoApplyLabel = "Aplicar",
|
|
50
|
+
collapseLabel = "Contraer carrito",
|
|
51
|
+
expandLabel = "Expandir carrito",
|
|
52
|
+
checkoutLabel = "Ver carrito y finalizar",
|
|
53
|
+
quickCheckoutLabel = "Compra r\xE1pida",
|
|
54
|
+
checkoutNowLabel = "Finalizar ahora",
|
|
55
|
+
emptyLabel = "Tu carrito est\xE1 vac\xEDo",
|
|
56
|
+
removeLabel = "Quitar",
|
|
57
|
+
decreaseLabel = "Disminuir cantidad",
|
|
58
|
+
increaseLabel = "Aumentar cantidad",
|
|
59
|
+
continueShoppingLabel = "Seguir comprando",
|
|
60
|
+
checkoutUnavailable,
|
|
61
|
+
checkoutDisabled,
|
|
62
|
+
onQuantityChange,
|
|
63
|
+
onRemove,
|
|
64
|
+
onCheckout,
|
|
65
|
+
onQuickCheckout,
|
|
66
|
+
onPayWithApple,
|
|
67
|
+
onPayWithGoogle,
|
|
68
|
+
onApplyPromo,
|
|
69
|
+
onRecentlyViewedClick,
|
|
70
|
+
onContinueShopping
|
|
71
|
+
}) {
|
|
72
|
+
const [isExpanded, setIsExpanded] = useState(true);
|
|
73
|
+
const [quickCheckout, setQuickCheckout] = useState(false);
|
|
74
|
+
const [promoCode, setPromoCode] = useState("");
|
|
75
|
+
const promoInputId = useId();
|
|
76
|
+
const isPage = presentation === "page";
|
|
77
|
+
const expanded = isPage ? true : isExpanded;
|
|
78
|
+
const format = formatMoneyProp ? (value) => {
|
|
79
|
+
const money2 = { amount: String(value), currencyCode: totals?.subtotal?.currencyCode ?? "USD" };
|
|
80
|
+
return formatMoneyProp(money2);
|
|
81
|
+
} : totals?.subtotal?.currencyCode && totals.subtotal.currencyCode !== "USD" ? (value) => new Intl.NumberFormat("en-US", { style: "currency", currency: totals.subtotal.currencyCode }).format(value) : (value) => fallbackFormatter.format(value);
|
|
82
|
+
const money = (value) => formatMoney(value, formatMoneyProp);
|
|
83
|
+
const subtotalAmount = isAvailableMoney(totals?.subtotal) ? Number(totals.subtotal.amount) : 0;
|
|
84
|
+
const itemCount = items.reduce((sum, item) => sum + item.quantity, 0);
|
|
85
|
+
const hasExpress = Boolean(onQuickCheckout || onPayWithApple || onPayWithGoogle);
|
|
86
|
+
const mutationsDisabled = totalsState === "pending";
|
|
87
|
+
const sortedPromotions = [...promotions ?? []].sort((a, b) => a.threshold - b.threshold);
|
|
88
|
+
const currentPromo = (() => {
|
|
89
|
+
if (!isAvailableMoney(totals?.subtotal)) return null;
|
|
90
|
+
for (let i = sortedPromotions.length - 1; i >= 0; i--) {
|
|
91
|
+
if (subtotalAmount >= sortedPromotions[i].threshold) {
|
|
92
|
+
return { ...sortedPromotions[i], achieved: true };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const next = sortedPromotions.find((p) => subtotalAmount < p.threshold);
|
|
96
|
+
return next ? { ...next, achieved: false } : null;
|
|
97
|
+
})();
|
|
98
|
+
const progressPercentage = currentPromo && !currentPromo.achieved ? Math.min(100, subtotalAmount / currentPromo.threshold * 100) : 100;
|
|
99
|
+
const lineAmount = (item) => {
|
|
100
|
+
if (item.lineTotal === void 0) return null;
|
|
101
|
+
return money(item.lineTotal);
|
|
102
|
+
};
|
|
103
|
+
const renderTotals = () => {
|
|
104
|
+
if (totalsState === "pending") {
|
|
105
|
+
return /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2", "aria-live": "polite", children: /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm", children: totalsPendingLabel }) });
|
|
106
|
+
}
|
|
107
|
+
if (totalsState === "error") {
|
|
108
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", role: "alert", children: [
|
|
109
|
+
/* @__PURE__ */ jsx("p", { className: "text-destructive text-sm", children: totalsErrorLabel }),
|
|
110
|
+
onRetryTotals ? /* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm", className: "w-fit", onClick: onRetryTotals, children: retryLabel }) : null
|
|
111
|
+
] });
|
|
112
|
+
}
|
|
113
|
+
if (!totals) return null;
|
|
114
|
+
const subtotalText = money(totals.subtotal);
|
|
115
|
+
const totalText = money(totals.total);
|
|
116
|
+
if (subtotalText === null || totalText === null) {
|
|
117
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", role: "status", children: [
|
|
118
|
+
/* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm", children: totalsUnavailableLabel }),
|
|
119
|
+
onRetryTotals ? /* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm", className: "w-fit", onClick: onRetryTotals, children: retryLabel }) : null
|
|
120
|
+
] });
|
|
121
|
+
}
|
|
122
|
+
const shippingText = money(totals.shipping);
|
|
123
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
124
|
+
/* @__PURE__ */ jsxs("div", { className: "flex justify-between text-sm", children: [
|
|
125
|
+
/* @__PURE__ */ jsx("span", { children: subtotalLabel }),
|
|
126
|
+
/* @__PURE__ */ jsx("span", { className: "tabular-nums", children: subtotalText })
|
|
127
|
+
] }),
|
|
128
|
+
isAvailableMoney(totals.discount) ? /* @__PURE__ */ jsxs("div", { className: "flex justify-between text-sm", children: [
|
|
129
|
+
/* @__PURE__ */ jsx("span", { children: discountLabel }),
|
|
130
|
+
/* @__PURE__ */ jsx("span", { className: "tabular-nums", children: money(totals.discount) })
|
|
131
|
+
] }) : null,
|
|
132
|
+
isAvailableMoney(totals.tax) ? /* @__PURE__ */ jsxs("div", { className: "flex justify-between text-sm", children: [
|
|
133
|
+
/* @__PURE__ */ jsx("span", { children: taxLabel }),
|
|
134
|
+
/* @__PURE__ */ jsx("span", { className: "tabular-nums", children: money(totals.tax) })
|
|
135
|
+
] }) : null,
|
|
136
|
+
shippingText !== null ? /* @__PURE__ */ jsxs("div", { className: "flex justify-between text-sm text-success", children: [
|
|
137
|
+
/* @__PURE__ */ jsx("span", { children: shippingLabel }),
|
|
138
|
+
/* @__PURE__ */ jsx("span", { className: "tabular-nums", children: Number(totals.shipping?.amount) === 0 ? shippingFreeLabel : shippingText })
|
|
139
|
+
] }) : null,
|
|
140
|
+
/* @__PURE__ */ jsx(Separator, {}),
|
|
141
|
+
/* @__PURE__ */ jsxs("div", { className: "flex justify-between font-semibold", children: [
|
|
142
|
+
/* @__PURE__ */ jsx("span", { children: totalLabel }),
|
|
143
|
+
/* @__PURE__ */ jsx("span", { className: "tabular-nums", children: totalText })
|
|
144
|
+
] })
|
|
145
|
+
] });
|
|
146
|
+
};
|
|
147
|
+
const renderPromoEntry = () => onApplyPromo ? /* @__PURE__ */ jsxs(
|
|
148
|
+
"form",
|
|
149
|
+
{
|
|
150
|
+
className: "flex flex-col gap-2",
|
|
151
|
+
onSubmit: (event) => {
|
|
152
|
+
event.preventDefault();
|
|
153
|
+
const code = promoCode.trim();
|
|
154
|
+
if (!code) return;
|
|
155
|
+
onApplyPromo(code);
|
|
156
|
+
setPromoCode("");
|
|
157
|
+
},
|
|
158
|
+
children: [
|
|
159
|
+
/* @__PURE__ */ jsx("label", { className: "text-sm", htmlFor: promoInputId, children: promoPromptLabel }),
|
|
160
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
|
|
161
|
+
/* @__PURE__ */ jsx(
|
|
162
|
+
Input,
|
|
163
|
+
{
|
|
164
|
+
id: promoInputId,
|
|
165
|
+
value: promoCode,
|
|
166
|
+
onChange: (event) => setPromoCode(event.target.value),
|
|
167
|
+
placeholder: promoPlaceholderLabel,
|
|
168
|
+
className: "h-9 flex-1"
|
|
169
|
+
}
|
|
170
|
+
),
|
|
171
|
+
/* @__PURE__ */ jsx(Button, { type: "submit", variant: "outline", size: "sm", className: "h-9", disabled: mutationsDisabled, children: promoApplyLabel })
|
|
172
|
+
] })
|
|
173
|
+
]
|
|
174
|
+
}
|
|
175
|
+
) : null;
|
|
176
|
+
return /* @__PURE__ */ jsx("section", { className: "py-8", children: /* @__PURE__ */ jsxs("div", { className: cn("mx-auto px-4", isPage ? "max-w-3xl" : "max-w-md"), children: [
|
|
177
|
+
isPage ? /* @__PURE__ */ jsx("h1", { className: "mb-6 text-2xl font-semibold tracking-tight", children: titleLabel }) : null,
|
|
178
|
+
/* @__PURE__ */ jsxs(Card, { className: isPage ? "shadow-sm" : "shadow-lg", children: [
|
|
179
|
+
/* @__PURE__ */ jsxs(CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-3", children: [
|
|
180
|
+
/* @__PURE__ */ jsxs(CardTitle, { className: "flex items-center gap-2", children: [
|
|
181
|
+
/* @__PURE__ */ jsx(ShoppingCartIcon, { className: "size-5" }),
|
|
182
|
+
titleLabel,
|
|
183
|
+
" (",
|
|
184
|
+
itemCount,
|
|
185
|
+
")"
|
|
186
|
+
] }),
|
|
187
|
+
!isPage ? /* @__PURE__ */ jsx(
|
|
188
|
+
Button,
|
|
189
|
+
{
|
|
190
|
+
variant: "ghost",
|
|
191
|
+
className: "h-8 cursor-pointer px-3 text-xs",
|
|
192
|
+
size: "sm",
|
|
193
|
+
onClick: () => setIsExpanded(!isExpanded),
|
|
194
|
+
"aria-expanded": isExpanded,
|
|
195
|
+
"aria-label": isExpanded ? collapseLabel : expandLabel,
|
|
196
|
+
children: isExpanded ? /* @__PURE__ */ jsx(X, {}) : /* @__PURE__ */ jsx(Plus, {})
|
|
197
|
+
}
|
|
198
|
+
) : null
|
|
199
|
+
] }),
|
|
200
|
+
/* @__PURE__ */ jsx(CardContent, { className: "flex flex-col gap-6", children: items.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center gap-4 py-6 text-center", children: [
|
|
201
|
+
/* @__PURE__ */ jsx(ShoppingCartIcon, { className: "text-muted-foreground/50 size-10" }),
|
|
202
|
+
/* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm", children: emptyLabel }),
|
|
203
|
+
isPage && onContinueShopping ? /* @__PURE__ */ jsx(Button, { variant: "outline", onClick: onContinueShopping, children: continueShoppingLabel }) : null
|
|
204
|
+
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
205
|
+
currentPromo && !currentPromo.achieved ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", children: [
|
|
206
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between text-sm", children: [
|
|
207
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: interpolate(awayFromLabel, {
|
|
208
|
+
amount: format(currentPromo.threshold - subtotalAmount)
|
|
209
|
+
}) }),
|
|
210
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
|
|
211
|
+
/* @__PURE__ */ jsx(currentPromo.icon, { className: "text-primary size-4" }),
|
|
212
|
+
/* @__PURE__ */ jsx("span", { className: "text-primary font-medium", children: currentPromo.reward })
|
|
213
|
+
] })
|
|
214
|
+
] }),
|
|
215
|
+
/* @__PURE__ */ jsx(Progress, { value: progressPercentage, className: "h-2" })
|
|
216
|
+
] }) : null,
|
|
217
|
+
currentPromo?.achieved ? /* @__PURE__ */ jsx("div", { className: "rounded-lg bg-success/10 p-3", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-success", children: [
|
|
218
|
+
/* @__PURE__ */ jsx(currentPromo.icon, { className: "size-4" }),
|
|
219
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm font-medium", children: interpolate(activatedLabel, { reward: currentPromo.reward }) })
|
|
220
|
+
] }) }) : null,
|
|
221
|
+
expanded && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
222
|
+
/* @__PURE__ */ jsx(
|
|
223
|
+
"div",
|
|
224
|
+
{
|
|
225
|
+
className: cn(
|
|
226
|
+
"flex flex-col gap-4",
|
|
227
|
+
!isPage && "scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-gray-600 scrollbar-track-transparent max-h-64 overflow-y-auto"
|
|
228
|
+
),
|
|
229
|
+
children: items.map((item) => /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
|
|
230
|
+
item.image ? /* @__PURE__ */ jsx("img", { src: item.image || void 0, alt: "", className: "h-12 w-12 rounded-md object-cover" }) : /* @__PURE__ */ jsx("div", { "aria-hidden": "true", className: "bg-muted h-12 w-12 shrink-0 rounded-md" }),
|
|
231
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-1 flex-col gap-1", children: [
|
|
232
|
+
/* @__PURE__ */ jsx("h3", { className: "line-clamp-2 text-sm font-medium", children: item.name }),
|
|
233
|
+
item.variant ? /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-xs", children: item.variant }) : null,
|
|
234
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
235
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm font-semibold", children: lineAmount(item) ?? amountUnavailableLabel }),
|
|
236
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
|
|
237
|
+
/* @__PURE__ */ jsx(
|
|
238
|
+
Button,
|
|
239
|
+
{
|
|
240
|
+
variant: "ghost",
|
|
241
|
+
size: "sm",
|
|
242
|
+
className: "size-6 h-8 cursor-pointer p-0 px-3 text-xs",
|
|
243
|
+
onClick: onQuantityChange ? () => onQuantityChange(item.id, item.quantity - 1) : void 0,
|
|
244
|
+
disabled: item.quantity <= 1 || mutationsDisabled,
|
|
245
|
+
"aria-label": `${decreaseLabel}, ${item.name}`,
|
|
246
|
+
children: /* @__PURE__ */ jsx(Minus, {})
|
|
247
|
+
}
|
|
248
|
+
),
|
|
249
|
+
/* @__PURE__ */ jsx("span", { className: "mx-2 w-6 text-center text-sm", children: item.quantity }),
|
|
250
|
+
/* @__PURE__ */ jsx(
|
|
251
|
+
Button,
|
|
252
|
+
{
|
|
253
|
+
variant: "ghost",
|
|
254
|
+
size: "sm",
|
|
255
|
+
className: "size-6 h-8 cursor-pointer p-0 px-3 text-xs",
|
|
256
|
+
onClick: onQuantityChange ? () => onQuantityChange(item.id, item.quantity + 1) : void 0,
|
|
257
|
+
"aria-label": `${increaseLabel}, ${item.name}`,
|
|
258
|
+
disabled: mutationsDisabled,
|
|
259
|
+
children: /* @__PURE__ */ jsx(Plus, {})
|
|
260
|
+
}
|
|
261
|
+
),
|
|
262
|
+
/* @__PURE__ */ jsx(
|
|
263
|
+
Button,
|
|
264
|
+
{
|
|
265
|
+
variant: "ghost",
|
|
266
|
+
size: "sm",
|
|
267
|
+
className: "text-destructive hover:text-destructive ms-2 size-6 h-8 cursor-pointer p-0 px-3 text-xs",
|
|
268
|
+
onClick: onRemove ? () => onRemove(item.id) : void 0,
|
|
269
|
+
disabled: mutationsDisabled,
|
|
270
|
+
"aria-label": `${removeLabel} ${item.name}`,
|
|
271
|
+
children: /* @__PURE__ */ jsx(X, {})
|
|
272
|
+
}
|
|
273
|
+
)
|
|
274
|
+
] })
|
|
275
|
+
] })
|
|
276
|
+
] })
|
|
277
|
+
] }, item.id))
|
|
278
|
+
}
|
|
279
|
+
),
|
|
280
|
+
/* @__PURE__ */ jsx(Separator, {}),
|
|
281
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2", children: renderTotals() }),
|
|
282
|
+
renderPromoEntry(),
|
|
283
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", children: [
|
|
284
|
+
hasExpress ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
285
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between text-sm", children: [
|
|
286
|
+
/* @__PURE__ */ jsx("span", { children: expressCheckoutLabel }),
|
|
287
|
+
/* @__PURE__ */ jsxs(
|
|
288
|
+
Button,
|
|
289
|
+
{
|
|
290
|
+
variant: "outline",
|
|
291
|
+
size: "sm",
|
|
292
|
+
onClick: () => setQuickCheckout(!quickCheckout),
|
|
293
|
+
className: "h-8 cursor-pointer",
|
|
294
|
+
"aria-pressed": quickCheckout,
|
|
295
|
+
children: [
|
|
296
|
+
/* @__PURE__ */ jsx(Zap, {}),
|
|
297
|
+
quickCheckout ? standardLabel : expressLabel
|
|
298
|
+
]
|
|
299
|
+
}
|
|
300
|
+
)
|
|
301
|
+
] }),
|
|
302
|
+
quickCheckout ? /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-2", children: [
|
|
303
|
+
onPayWithApple ? /* @__PURE__ */ jsxs(Button, { size: "sm", variant: "outline", className: "h-8 cursor-pointer px-3 text-xs", onClick: onPayWithApple, children: [
|
|
304
|
+
/* @__PURE__ */ jsx(Wallet, {}),
|
|
305
|
+
"Apple Pay"
|
|
306
|
+
] }) : null,
|
|
307
|
+
onPayWithGoogle ? /* @__PURE__ */ jsxs(Button, { size: "sm", variant: "outline", className: "h-8 cursor-pointer px-3 text-xs", onClick: onPayWithGoogle, children: [
|
|
308
|
+
/* @__PURE__ */ jsx(CreditCard, {}),
|
|
309
|
+
"Google Pay"
|
|
310
|
+
] }) : null
|
|
311
|
+
] }) : null
|
|
312
|
+
] }) : null,
|
|
313
|
+
!checkoutUnavailable ? /* @__PURE__ */ jsx(
|
|
314
|
+
Button,
|
|
315
|
+
{
|
|
316
|
+
size: "lg",
|
|
317
|
+
className: "h-10 w-full cursor-pointer px-8",
|
|
318
|
+
onClick: hasExpress && quickCheckout ? onQuickCheckout : onCheckout,
|
|
319
|
+
disabled: checkoutDisabled || totalsState === "pending",
|
|
320
|
+
children: hasExpress && quickCheckout ? quickCheckoutLabel : checkoutLabel
|
|
321
|
+
}
|
|
322
|
+
) : null,
|
|
323
|
+
isPage && onContinueShopping ? /* @__PURE__ */ jsx(
|
|
324
|
+
Button,
|
|
325
|
+
{
|
|
326
|
+
variant: "outline",
|
|
327
|
+
size: "lg",
|
|
328
|
+
className: "h-10 w-full cursor-pointer px-8",
|
|
329
|
+
onClick: onContinueShopping,
|
|
330
|
+
children: continueShoppingLabel
|
|
331
|
+
}
|
|
332
|
+
) : null,
|
|
333
|
+
estimatedDeliveryLabel ? /* @__PURE__ */ jsxs("div", { className: "text-muted-foreground flex items-center justify-center gap-2 text-xs", children: [
|
|
334
|
+
/* @__PURE__ */ jsx(Clock, { className: "size-3" }),
|
|
335
|
+
/* @__PURE__ */ jsx("span", { children: estimatedDeliveryLabel })
|
|
336
|
+
] }) : null
|
|
337
|
+
] }),
|
|
338
|
+
/* @__PURE__ */ jsx("div", { className: "bg-muted/50 rounded-lg p-3 text-center", children: /* @__PURE__ */ jsxs("div", { className: "text-muted-foreground flex items-center justify-center gap-2 text-xs", children: [
|
|
339
|
+
/* @__PURE__ */ jsx("div", { className: "size-2 rounded-full bg-success", "aria-hidden": "true" }),
|
|
340
|
+
/* @__PURE__ */ jsx("span", { children: secureCheckoutLabel })
|
|
341
|
+
] }) })
|
|
342
|
+
] }),
|
|
343
|
+
!expanded && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", children: [
|
|
344
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
345
|
+
/* @__PURE__ */ jsxs("span", { className: "text-muted-foreground text-sm", children: [
|
|
346
|
+
itemCount,
|
|
347
|
+
" ",
|
|
348
|
+
itemsLabel
|
|
349
|
+
] }),
|
|
350
|
+
isAvailableMoney(totals?.total) ? /* @__PURE__ */ jsx("span", { className: "font-semibold tabular-nums", children: money(totals.total) }) : null
|
|
351
|
+
] }),
|
|
352
|
+
/* @__PURE__ */ jsx(Button, { size: "sm", className: "h-8 w-full cursor-pointer px-3 text-xs", onClick: onCheckout, children: checkoutNowLabel })
|
|
353
|
+
] }),
|
|
354
|
+
expanded && recentlyViewed && recentlyViewed.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", children: [
|
|
355
|
+
/* @__PURE__ */ jsx("h4", { className: "text-sm font-medium", children: recentlyViewedLabel }),
|
|
356
|
+
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-3 gap-2", children: recentlyViewed.map((item) => {
|
|
357
|
+
const suggestionPrice = money(item.unitPrice);
|
|
358
|
+
return /* @__PURE__ */ jsxs(
|
|
359
|
+
"button",
|
|
360
|
+
{
|
|
361
|
+
type: "button",
|
|
362
|
+
className: cn(
|
|
363
|
+
"group text-start",
|
|
364
|
+
onRecentlyViewedClick && "cursor-pointer"
|
|
365
|
+
),
|
|
366
|
+
onClick: onRecentlyViewedClick ? () => onRecentlyViewedClick(item.id) : void 0,
|
|
367
|
+
children: [
|
|
368
|
+
/* @__PURE__ */ jsx("div", { className: "bg-muted mb-1 aspect-square overflow-hidden", children: item.image ? /* @__PURE__ */ jsx(
|
|
369
|
+
"img",
|
|
370
|
+
{
|
|
371
|
+
src: item.image || void 0,
|
|
372
|
+
alt: item.name,
|
|
373
|
+
className: "size-full rounded-md object-cover"
|
|
374
|
+
}
|
|
375
|
+
) : null }),
|
|
376
|
+
/* @__PURE__ */ jsx("p", { className: "text-muted-foreground truncate text-xs", children: item.name }),
|
|
377
|
+
suggestionPrice !== null ? /* @__PURE__ */ jsx("p", { className: "text-xs font-medium tabular-nums", children: suggestionPrice }) : null
|
|
378
|
+
]
|
|
379
|
+
},
|
|
380
|
+
item.id
|
|
381
|
+
);
|
|
382
|
+
}) })
|
|
383
|
+
] })
|
|
384
|
+
] }) })
|
|
385
|
+
] })
|
|
386
|
+
] }) });
|
|
387
|
+
}
|
|
388
|
+
var shopping_cart_default = ShoppingCart;
|
|
389
|
+
export {
|
|
390
|
+
ShoppingCart,
|
|
391
|
+
shopping_cart_default as default
|
|
392
|
+
};
|
|
393
|
+
//# sourceMappingURL=shopping-cart.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/blocks/e-commerce/shopping-carts/shopping-cart.tsx"],"sourcesContent":["'use client'\n\nimport { useId, useState } from 'react'\nimport { ShoppingCart as ShoppingCartIcon, Zap, Clock, CreditCard, Wallet, Minus, Plus, X } from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport type { Money } from '@thorprovider/types'\nimport { Card, CardContent, CardHeader, CardTitle } from '../../../ui/card'\nimport { Button } from '../../../ui/button'\nimport { Input } from '../../../ui/input'\nimport { Separator } from '../../../ui/separator'\nimport { Progress } from '../../../ui/progress'\nimport { cn } from '../../../lib/utils'\nimport { formatMoney, isAvailableMoney } from '../../../lib/money'\nimport type { CartTotals, ShoppingCartItem, ShoppingCartSuggestion } from '../../../lib/contracts'\n\n/** Host-supplied promotion definition. Icons are React-side only. */\nexport interface ShoppingCartPromotion {\n threshold: number\n reward: string\n icon: LucideIcon\n}\n\nexport type ShoppingCartTotalsState = 'idle' | 'pending' | 'error'\n\nexport type ShoppingCartPresentation = 'compact' | 'page'\n\nexport interface ShoppingCartProps {\n /** Canonical cart lines keyed by backend cart line-item id. */\n items: ShoppingCartItem[]\n promotions?: ShoppingCartPromotion[]\n recentlyViewed?: ShoppingCartSuggestion[]\n /**\n * Layout presentation. `compact` (default) is the collapsible quick-cart\n * card; `page` is a wide, always-expanded review layout with a primary\n * heading, no collapse control, and normal page scrolling. Both use the same\n * line controls and authoritative monetary rendering.\n */\n presentation?: ShoppingCartPresentation\n /**\n * Backend-authoritative totals. The cart renders these verbatim; it never\n * computes subtotal/tax/shipping/total locally.\n */\n totals?: CartTotals\n /** Controlled state of the totals fetch/mutation. */\n totalsState?: ShoppingCartTotalsState\n totalsErrorLabel?: string\n /** Shown when a required total amount is absent or malformed (never as zero). */\n totalsUnavailableLabel?: string\n /** Shown for a line whose supplied line total is absent or malformed. */\n amountUnavailableLabel?: string\n retryLabel?: string\n onRetryTotals?: () => void\n /** Override money formatting (locale, currency). Defaults to `Money.currencyCode`. */\n formatMoney?: (money: Money) => string\n // labels (Spanish defaults):\n titleLabel?: string // 'Carrito de compras'\n subtotalLabel?: string // 'Subtotal'\n discountLabel?: string\n taxLabel?: string // 'Impuestos'\n shippingLabel?: string // 'Envío'\n shippingFreeLabel?: string // 'Gratis'\n totalLabel?: string // 'Total'\n totalsPendingLabel?: string\n awayFromLabel?: string // 'Te faltan ${amount} para'\n activatedLabel?: string // '¡{reward} activada!'\n itemsLabel?: string // 'artículos'\n expressCheckoutLabel?: string // 'Compra rápida'\n expressLabel?: string // 'Rápido'\n standardLabel?: string // 'Estándar'\n estimatedDeliveryLabel?: string\n secureCheckoutLabel?: string // 'Pago seguro • SSL cifrado'\n recentlyViewedLabel?: string // 'Vistos recientemente'\n promoPromptLabel?: string // '¿Tienes un código de descuento?'\n promoPlaceholderLabel?: string // 'Introduce tu código'\n promoApplyLabel?: string // 'Aplicar'\n collapseLabel?: string // 'Contraer carrito'\n expandLabel?: string // 'Expandir carrito'\n checkoutLabel?: string // 'Ver carrito y finalizar'\n quickCheckoutLabel?: string // 'Compra rápida'\n checkoutNowLabel?: string // 'Finalizar ahora'\n emptyLabel?: string\n removeLabel?: string\n decreaseLabel?: string\n increaseLabel?: string\n continueShoppingLabel?: string // 'Seguir comprando'\n // action availability:\n /** Suppress the checkout action (e.g. the checkout feature is not installed). */\n checkoutUnavailable?: boolean\n /** Disable checkout while the cart is not ready (pending/error/invalid totals). */\n checkoutDisabled?: boolean\n // callbacks:\n /**\n * ABSOLUTE quantity for a backend cart line-item id (distinct from the\n * Navbar's DELTA). The boundary mutates the cart by line-item id.\n */\n onQuantityChange?: (id: string, quantity: number) => void\n /** Remove the backend cart line-item id. */\n onRemove?: (id: string) => void\n onCheckout?: () => void\n onQuickCheckout?: () => void\n onPayWithApple?: () => void\n onPayWithGoogle?: () => void\n /**\n * Report an entered promotion code to the host. The block never validates\n * or resolves codes; the authoritative result arrives through `totals`\n * (discount) and `promotions`. When absent, the promo affordance is not\n * rendered.\n */\n onApplyPromo?: (code: string) => void\n onRecentlyViewedClick?: (id: string) => void\n /** Page presentation only: navigate back to browsing. */\n onContinueShopping?: () => void\n}\n\nconst fallbackFormatter = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' })\n\nconst interpolate = (template: string, values: Record<string, string>) =>\n template.replace(/\\$\\{(\\w+)\\}|\\{(\\w+)\\}/g, (match, dollarKey, braceKey) => {\n const key = dollarKey ?? braceKey\n return values[key] ?? match\n })\n\nexport function ShoppingCart({\n items,\n promotions,\n recentlyViewed,\n presentation = 'compact',\n totals,\n totalsState = 'idle',\n totalsErrorLabel = 'No se pudieron actualizar los totales.',\n totalsUnavailableLabel = 'Totales no disponibles.',\n amountUnavailableLabel = '—',\n retryLabel = 'Reintentar',\n onRetryTotals,\n formatMoney: formatMoneyProp,\n titleLabel = 'Carrito de compras',\n subtotalLabel = 'Subtotal',\n discountLabel = 'Descuento',\n taxLabel = 'Impuestos',\n shippingLabel = 'Envío',\n shippingFreeLabel = 'Gratis',\n totalLabel = 'Total',\n totalsPendingLabel = 'Actualizando totales…',\n awayFromLabel = 'Te faltan ${amount} para',\n activatedLabel = '¡{reward} activada!',\n itemsLabel = 'artículos',\n expressCheckoutLabel = 'Compra rápida',\n expressLabel = 'Rápido',\n standardLabel = 'Estándar',\n estimatedDeliveryLabel,\n secureCheckoutLabel = 'Pago seguro • SSL cifrado',\n recentlyViewedLabel = 'Vistos recientemente',\n promoPromptLabel = '¿Tienes un código de descuento?',\n promoPlaceholderLabel = 'Introduce tu código',\n promoApplyLabel = 'Aplicar',\n collapseLabel = 'Contraer carrito',\n expandLabel = 'Expandir carrito',\n checkoutLabel = 'Ver carrito y finalizar',\n quickCheckoutLabel = 'Compra rápida',\n checkoutNowLabel = 'Finalizar ahora',\n emptyLabel = 'Tu carrito está vacío',\n removeLabel = 'Quitar',\n decreaseLabel = 'Disminuir cantidad',\n increaseLabel = 'Aumentar cantidad',\n continueShoppingLabel = 'Seguir comprando',\n checkoutUnavailable,\n checkoutDisabled,\n onQuantityChange,\n onRemove,\n onCheckout,\n onQuickCheckout,\n onPayWithApple,\n onPayWithGoogle,\n onApplyPromo,\n onRecentlyViewedClick,\n onContinueShopping,\n}: ShoppingCartProps) {\n const [isExpanded, setIsExpanded] = useState(true)\n const [quickCheckout, setQuickCheckout] = useState(false)\n const [promoCode, setPromoCode] = useState('')\n const promoInputId = useId()\n\n const isPage = presentation === 'page'\n // The page presentation is always expanded; only the compact card collapses.\n const expanded = isPage ? true : isExpanded\n // Display currency derives from the authoritative Money subtotal; the USD\n // formatter is only the fallback when no authoritative currency exists.\n const format = formatMoneyProp\n ? (value: number) => {\n const money: Money = { amount: String(value), currencyCode: totals?.subtotal?.currencyCode ?? 'USD' }\n return formatMoneyProp(money)\n }\n : totals?.subtotal?.currencyCode && totals.subtotal.currencyCode !== 'USD'\n ? (value: number) =>\n new Intl.NumberFormat('en-US', { style: 'currency', currency: totals.subtotal.currencyCode }).format(value)\n : (value: number) => fallbackFormatter.format(value)\n const money = (value: Money | null | undefined) => formatMoney(value, formatMoneyProp)\n const subtotalAmount = isAvailableMoney(totals?.subtotal) ? Number(totals.subtotal.amount) : 0\n const itemCount = items.reduce((sum, item) => sum + item.quantity, 0)\n const hasExpress = Boolean(onQuickCheckout || onPayWithApple || onPayWithGoogle)\n // While totals/mutations are pending, keep confirmed data visible but block\n // conflicting edits and checkout until the backend responds.\n const mutationsDisabled = totalsState === 'pending'\n\n const sortedPromotions = [...(promotions ?? [])].sort((a, b) => a.threshold - b.threshold)\n const currentPromo = (() => {\n if (!isAvailableMoney(totals?.subtotal)) return null\n for (let i = sortedPromotions.length - 1; i >= 0; i--) {\n if (subtotalAmount >= sortedPromotions[i].threshold) {\n return { ...sortedPromotions[i], achieved: true }\n }\n }\n const next = sortedPromotions.find(p => subtotalAmount < p.threshold)\n return next ? { ...next, achieved: false } : null\n })()\n const progressPercentage =\n currentPromo && !currentPromo.achieved\n ? Math.min(100, (subtotalAmount / currentPromo.threshold) * 100)\n : 100\n\n const lineAmount = (item: ShoppingCartItem): string | null => {\n // The backend-authoritative line total renders verbatim. A malformed amount\n // is unavailable (never a fabricated zero); `unitPrice` is never multiplied\n // locally — the cart contract forbids local `unit × qty` arithmetic.\n if (item.lineTotal === undefined) return null\n return money(item.lineTotal)\n }\n\n const renderTotals = () => {\n if (totalsState === 'pending') {\n return (\n <div className='flex flex-col gap-2' aria-live='polite'>\n <p className='text-muted-foreground text-sm'>{totalsPendingLabel}</p>\n </div>\n )\n }\n if (totalsState === 'error') {\n return (\n <div className='flex flex-col gap-2' role='alert'>\n <p className='text-destructive text-sm'>{totalsErrorLabel}</p>\n {onRetryTotals ? (\n <Button variant='outline' size='sm' className='w-fit' onClick={onRetryTotals}>\n {retryLabel}\n </Button>\n ) : null}\n </div>\n )\n }\n if (!totals) return null\n\n const subtotalText = money(totals.subtotal)\n const totalText = money(totals.total)\n // Required totals: if either is absent/malformed, show an explicit\n // unavailable state (with recovery) rather than a fabricated zero.\n if (subtotalText === null || totalText === null) {\n return (\n <div className='flex flex-col gap-2' role='status'>\n <p className='text-muted-foreground text-sm'>{totalsUnavailableLabel}</p>\n {onRetryTotals ? (\n <Button variant='outline' size='sm' className='w-fit' onClick={onRetryTotals}>\n {retryLabel}\n </Button>\n ) : null}\n </div>\n )\n }\n\n const shippingText = money(totals.shipping)\n return (\n <>\n <div className='flex justify-between text-sm'>\n <span>{subtotalLabel}</span>\n <span className='tabular-nums'>{subtotalText}</span>\n </div>\n {isAvailableMoney(totals.discount) ? (\n <div className='flex justify-between text-sm'>\n <span>{discountLabel}</span>\n <span className='tabular-nums'>{money(totals.discount)}</span>\n </div>\n ) : null}\n {isAvailableMoney(totals.tax) ? (\n <div className='flex justify-between text-sm'>\n <span>{taxLabel}</span>\n <span className='tabular-nums'>{money(totals.tax)}</span>\n </div>\n ) : null}\n {shippingText !== null ? (\n <div className='flex justify-between text-sm text-success'>\n <span>{shippingLabel}</span>\n <span className='tabular-nums'>\n {Number(totals.shipping?.amount) === 0 ? shippingFreeLabel : shippingText}\n </span>\n </div>\n ) : null}\n <Separator />\n <div className='flex justify-between font-semibold'>\n <span>{totalLabel}</span>\n <span className='tabular-nums'>{totalText}</span>\n </div>\n </>\n )\n }\n\n const renderPromoEntry = () =>\n onApplyPromo ? (\n <form\n className='flex flex-col gap-2'\n onSubmit={event => {\n event.preventDefault()\n const code = promoCode.trim()\n if (!code) return\n onApplyPromo(code)\n setPromoCode('')\n }}\n >\n <label className='text-sm' htmlFor={promoInputId}>\n {promoPromptLabel}\n </label>\n <div className='flex gap-2'>\n <Input\n id={promoInputId}\n value={promoCode}\n onChange={event => setPromoCode(event.target.value)}\n placeholder={promoPlaceholderLabel}\n className='h-9 flex-1'\n />\n <Button type='submit' variant='outline' size='sm' className='h-9' disabled={mutationsDisabled}>\n {promoApplyLabel}\n </Button>\n </div>\n </form>\n ) : null\n\n return (\n <section className='py-8'>\n <div className={cn('mx-auto px-4', isPage ? 'max-w-3xl' : 'max-w-md')}>\n {isPage ? (\n <h1 className='mb-6 text-2xl font-semibold tracking-tight'>{titleLabel}</h1>\n ) : null}\n <Card className={isPage ? 'shadow-sm' : 'shadow-lg'}>\n {/* Header */}\n <CardHeader className='flex flex-row items-center justify-between space-y-0 pb-3'>\n <CardTitle className='flex items-center gap-2'>\n <ShoppingCartIcon className='size-5' />\n {titleLabel} ({itemCount})\n </CardTitle>\n {!isPage ? (\n <Button\n variant='ghost'\n className='h-8 cursor-pointer px-3 text-xs'\n size='sm'\n onClick={() => setIsExpanded(!isExpanded)}\n aria-expanded={isExpanded}\n aria-label={isExpanded ? collapseLabel : expandLabel}\n >\n {isExpanded ? <X /> : <Plus />}\n </Button>\n ) : null}\n </CardHeader>\n\n <CardContent className='flex flex-col gap-6'>\n {items.length === 0 ? (\n <div className='flex flex-col items-center justify-center gap-4 py-6 text-center'>\n <ShoppingCartIcon className='text-muted-foreground/50 size-10' />\n <p className='text-muted-foreground text-sm'>{emptyLabel}</p>\n {isPage && onContinueShopping ? (\n <Button variant='outline' onClick={onContinueShopping}>\n {continueShoppingLabel}\n </Button>\n ) : null}\n </div>\n ) : (\n <>\n {/* Promotion Progress */}\n {currentPromo && !currentPromo.achieved ? (\n <div className='flex flex-col gap-3'>\n <div className='flex items-center justify-between text-sm'>\n <span className='text-muted-foreground'>\n {interpolate(awayFromLabel, {\n amount: format(currentPromo.threshold - subtotalAmount),\n })}\n </span>\n <div className='flex items-center gap-1'>\n <currentPromo.icon className='text-primary size-4' />\n <span className='text-primary font-medium'>{currentPromo.reward}</span>\n </div>\n </div>\n <Progress value={progressPercentage} className='h-2' />\n </div>\n ) : null}\n\n {/* Active Promotion */}\n {currentPromo?.achieved ? (\n <div className='rounded-lg bg-success/10 p-3'>\n <div className='flex items-center gap-2 text-success'>\n <currentPromo.icon className='size-4' />\n <span className='text-sm font-medium'>\n {interpolate(activatedLabel, { reward: currentPromo.reward })}\n </span>\n </div>\n </div>\n ) : null}\n\n {expanded && (\n <>\n {/* Cart Items */}\n <div\n className={cn(\n 'flex flex-col gap-4',\n !isPage &&\n 'scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-gray-600 scrollbar-track-transparent max-h-64 overflow-y-auto',\n )}\n >\n {items.map(item => (\n <div key={item.id} className='flex items-start gap-3'>\n {item.image ? (\n <img src={item.image || undefined} alt='' className='h-12 w-12 rounded-md object-cover' />\n ) : (\n <div aria-hidden='true' className='bg-muted h-12 w-12 shrink-0 rounded-md' />\n )}\n\n <div className='flex flex-1 flex-col gap-1'>\n <h3 className='line-clamp-2 text-sm font-medium'>{item.name}</h3>\n {item.variant ? <p className='text-muted-foreground text-xs'>{item.variant}</p> : null}\n\n <div className='flex items-center justify-between'>\n <span className='text-sm font-semibold'>{lineAmount(item) ?? amountUnavailableLabel}</span>\n\n <div className='flex items-center'>\n <Button\n variant='ghost'\n size='sm'\n className='size-6 h-8 cursor-pointer p-0 px-3 text-xs'\n onClick={\n onQuantityChange\n ? () => onQuantityChange(item.id, item.quantity - 1)\n : undefined\n }\n disabled={item.quantity <= 1 || mutationsDisabled}\n aria-label={`${decreaseLabel}, ${item.name}`}\n >\n <Minus />\n </Button>\n <span className='mx-2 w-6 text-center text-sm'>{item.quantity}</span>\n <Button\n variant='ghost'\n size='sm'\n className='size-6 h-8 cursor-pointer p-0 px-3 text-xs'\n onClick={\n onQuantityChange\n ? () => onQuantityChange(item.id, item.quantity + 1)\n : undefined\n }\n aria-label={`${increaseLabel}, ${item.name}`}\n disabled={mutationsDisabled}\n >\n <Plus />\n </Button>\n <Button\n variant='ghost'\n size='sm'\n className='text-destructive hover:text-destructive ms-2 size-6 h-8 cursor-pointer p-0 px-3 text-xs'\n onClick={onRemove ? () => onRemove(item.id) : undefined}\n disabled={mutationsDisabled}\n aria-label={`${removeLabel} ${item.name}`}\n >\n <X />\n </Button>\n </div>\n </div>\n </div>\n </div>\n ))}\n </div>\n\n <Separator />\n\n {/* Order Summary — backend-authoritative only */}\n <div className='flex flex-col gap-2'>{renderTotals()}</div>\n\n {/* Promo code entry — reports to the host, never resolves locally */}\n {renderPromoEntry()}\n\n {/* Quick Actions */}\n <div className='flex flex-col gap-3'>\n {/* Express Checkout Toggle — only when the host supplies a handler */}\n {hasExpress ? (\n <>\n <div className='flex items-center justify-between text-sm'>\n <span>{expressCheckoutLabel}</span>\n <Button\n variant='outline'\n size='sm'\n onClick={() => setQuickCheckout(!quickCheckout)}\n className='h-8 cursor-pointer'\n aria-pressed={quickCheckout}\n >\n <Zap />\n {quickCheckout ? standardLabel : expressLabel}\n </Button>\n </div>\n\n {quickCheckout ? (\n <div className='grid grid-cols-2 gap-2'>\n {onPayWithApple ? (\n <Button size='sm' variant='outline' className='h-8 cursor-pointer px-3 text-xs' onClick={onPayWithApple}>\n <Wallet />\n Apple Pay\n </Button>\n ) : null}\n {onPayWithGoogle ? (\n <Button size='sm' variant='outline' className='h-8 cursor-pointer px-3 text-xs' onClick={onPayWithGoogle}>\n <CreditCard />\n Google Pay\n </Button>\n ) : null}\n </div>\n ) : null}\n </>\n ) : null}\n\n {/* Checkout Button */}\n {!checkoutUnavailable ? (\n <Button\n size='lg'\n className='h-10 w-full cursor-pointer px-8'\n onClick={hasExpress && quickCheckout ? onQuickCheckout : onCheckout}\n disabled={checkoutDisabled || totalsState === 'pending'}\n >\n {hasExpress && quickCheckout ? quickCheckoutLabel : checkoutLabel}\n </Button>\n ) : null}\n\n {/* Continue shopping — page presentation only */}\n {isPage && onContinueShopping ? (\n <Button\n variant='outline'\n size='lg'\n className='h-10 w-full cursor-pointer px-8'\n onClick={onContinueShopping}\n >\n {continueShoppingLabel}\n </Button>\n ) : null}\n\n {/* Estimated Delivery — only when supplied, never fabricated */}\n {estimatedDeliveryLabel ? (\n <div className='text-muted-foreground flex items-center justify-center gap-2 text-xs'>\n <Clock className='size-3' />\n <span>{estimatedDeliveryLabel}</span>\n </div>\n ) : null}\n </div>\n\n {/* Security Badge */}\n <div className='bg-muted/50 rounded-lg p-3 text-center'>\n <div className='text-muted-foreground flex items-center justify-center gap-2 text-xs'>\n <div className='size-2 rounded-full bg-success' aria-hidden='true' />\n <span>{secureCheckoutLabel}</span>\n </div>\n </div>\n </>\n )}\n\n {/* Collapsed Summary */}\n {!expanded && (\n <div className='flex flex-col gap-3'>\n <div className='flex items-center justify-between'>\n <span className='text-muted-foreground text-sm'>\n {itemCount} {itemsLabel}\n </span>\n {isAvailableMoney(totals?.total) ? (\n <span className='font-semibold tabular-nums'>{money(totals.total)}</span>\n ) : null}\n </div>\n\n <Button size='sm' className='h-8 w-full cursor-pointer px-3 text-xs' onClick={onCheckout}>\n {checkoutNowLabel}\n </Button>\n </div>\n )}\n\n {/* Recently Viewed — host-supplied suggestions only */}\n {expanded && recentlyViewed && recentlyViewed.length > 0 && (\n <div className='flex flex-col gap-3'>\n <h4 className='text-sm font-medium'>{recentlyViewedLabel}</h4>\n <div className='grid grid-cols-3 gap-2'>\n {recentlyViewed.map(item => {\n const suggestionPrice = money(item.unitPrice)\n return (\n <button\n key={item.id}\n type='button'\n className={cn(\n 'group text-start',\n onRecentlyViewedClick && 'cursor-pointer',\n )}\n onClick={onRecentlyViewedClick ? () => onRecentlyViewedClick(item.id) : undefined}\n >\n <div className='bg-muted mb-1 aspect-square overflow-hidden'>\n {item.image ? (\n <img\n src={item.image || undefined}\n alt={item.name}\n className='size-full rounded-md object-cover'\n />\n ) : null}\n </div>\n <p className='text-muted-foreground truncate text-xs'>{item.name}</p>\n {suggestionPrice !== null ? (\n <p className='text-xs font-medium tabular-nums'>{suggestionPrice}</p>\n ) : null}\n </button>\n )\n })}\n </div>\n </div>\n )}\n </>\n )}\n </CardContent>\n </Card>\n </div>\n </section>\n )\n}\n\nexport default ShoppingCart\n"],"mappings":";AAwOU,SAqCJ,UArCI,KAMF,YANE;AAtOV,SAAS,OAAO,gBAAgB;AAChC,SAAS,gBAAgB,kBAAkB,KAAK,OAAO,YAAY,QAAQ,OAAO,MAAM,SAAS;AAGjG,SAAS,MAAM,aAAa,YAAY,iBAAiB;AACzD,SAAS,cAAc;AACvB,SAAS,aAAa;AACtB,SAAS,iBAAiB;AAC1B,SAAS,gBAAgB;AACzB,SAAS,UAAU;AACnB,SAAS,aAAa,wBAAwB;AAsG9C,MAAM,oBAAoB,IAAI,KAAK,aAAa,SAAS,EAAE,OAAO,YAAY,UAAU,MAAM,CAAC;AAE/F,MAAM,cAAc,CAAC,UAAkB,WACrC,SAAS,QAAQ,0BAA0B,CAAC,OAAO,WAAW,aAAa;AACzE,QAAM,MAAM,aAAa;AACzB,SAAO,OAAO,GAAG,KAAK;AACxB,CAAC;AAEI,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,yBAAyB;AAAA,EACzB,yBAAyB;AAAA,EACzB,aAAa;AAAA,EACb;AAAA,EACA,aAAa;AAAA,EACb,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,aAAa;AAAA,EACb,qBAAqB;AAAA,EACrB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,uBAAuB;AAAA,EACvB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB;AAAA,EACA,sBAAsB;AAAA,EACtB,sBAAsB;AAAA,EACtB,mBAAmB;AAAA,EACnB,wBAAwB;AAAA,EACxB,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,qBAAqB;AAAA,EACrB,mBAAmB;AAAA,EACnB,aAAa;AAAA,EACb,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,wBAAwB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAsB;AACpB,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,IAAI;AACjD,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,KAAK;AACxD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,EAAE;AAC7C,QAAM,eAAe,MAAM;AAE3B,QAAM,SAAS,iBAAiB;AAEhC,QAAM,WAAW,SAAS,OAAO;AAGjC,QAAM,SAAS,kBACX,CAAC,UAAkB;AACjB,UAAMA,SAAe,EAAE,QAAQ,OAAO,KAAK,GAAG,cAAc,QAAQ,UAAU,gBAAgB,MAAM;AACpG,WAAO,gBAAgBA,MAAK;AAAA,EAC9B,IACA,QAAQ,UAAU,gBAAgB,OAAO,SAAS,iBAAiB,QACjE,CAAC,UACC,IAAI,KAAK,aAAa,SAAS,EAAE,OAAO,YAAY,UAAU,OAAO,SAAS,aAAa,CAAC,EAAE,OAAO,KAAK,IAC5G,CAAC,UAAkB,kBAAkB,OAAO,KAAK;AACvD,QAAM,QAAQ,CAAC,UAAoC,YAAY,OAAO,eAAe;AACrF,QAAM,iBAAiB,iBAAiB,QAAQ,QAAQ,IAAI,OAAO,OAAO,SAAS,MAAM,IAAI;AAC7F,QAAM,YAAY,MAAM,OAAO,CAAC,KAAK,SAAS,MAAM,KAAK,UAAU,CAAC;AACpE,QAAM,aAAa,QAAQ,mBAAmB,kBAAkB,eAAe;AAG/E,QAAM,oBAAoB,gBAAgB;AAE1C,QAAM,mBAAmB,CAAC,GAAI,cAAc,CAAC,CAAE,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,YAAY,EAAE,SAAS;AACzF,QAAM,gBAAgB,MAAM;AAC1B,QAAI,CAAC,iBAAiB,QAAQ,QAAQ,EAAG,QAAO;AAChD,aAAS,IAAI,iBAAiB,SAAS,GAAG,KAAK,GAAG,KAAK;AACrD,UAAI,kBAAkB,iBAAiB,CAAC,EAAE,WAAW;AACnD,eAAO,EAAE,GAAG,iBAAiB,CAAC,GAAG,UAAU,KAAK;AAAA,MAClD;AAAA,IACF;AACA,UAAM,OAAO,iBAAiB,KAAK,OAAK,iBAAiB,EAAE,SAAS;AACpE,WAAO,OAAO,EAAE,GAAG,MAAM,UAAU,MAAM,IAAI;AAAA,EAC/C,GAAG;AACH,QAAM,qBACJ,gBAAgB,CAAC,aAAa,WAC1B,KAAK,IAAI,KAAM,iBAAiB,aAAa,YAAa,GAAG,IAC7D;AAEN,QAAM,aAAa,CAAC,SAA0C;AAI5D,QAAI,KAAK,cAAc,OAAW,QAAO;AACzC,WAAO,MAAM,KAAK,SAAS;AAAA,EAC7B;AAEA,QAAM,eAAe,MAAM;AACzB,QAAI,gBAAgB,WAAW;AAC7B,aACE,oBAAC,SAAI,WAAU,uBAAsB,aAAU,UAC7C,8BAAC,OAAE,WAAU,iCAAiC,8BAAmB,GACnE;AAAA,IAEJ;AACA,QAAI,gBAAgB,SAAS;AAC3B,aACE,qBAAC,SAAI,WAAU,uBAAsB,MAAK,SACxC;AAAA,4BAAC,OAAE,WAAU,4BAA4B,4BAAiB;AAAA,QACzD,gBACC,oBAAC,UAAO,SAAQ,WAAU,MAAK,MAAK,WAAU,SAAQ,SAAS,eAC5D,sBACH,IACE;AAAA,SACN;AAAA,IAEJ;AACA,QAAI,CAAC,OAAQ,QAAO;AAEpB,UAAM,eAAe,MAAM,OAAO,QAAQ;AAC1C,UAAM,YAAY,MAAM,OAAO,KAAK;AAGpC,QAAI,iBAAiB,QAAQ,cAAc,MAAM;AAC/C,aACE,qBAAC,SAAI,WAAU,uBAAsB,MAAK,UACxC;AAAA,4BAAC,OAAE,WAAU,iCAAiC,kCAAuB;AAAA,QACpE,gBACC,oBAAC,UAAO,SAAQ,WAAU,MAAK,MAAK,WAAU,SAAQ,SAAS,eAC5D,sBACH,IACE;AAAA,SACN;AAAA,IAEJ;AAEA,UAAM,eAAe,MAAM,OAAO,QAAQ;AAC1C,WACE,iCACE;AAAA,2BAAC,SAAI,WAAU,gCACb;AAAA,4BAAC,UAAM,yBAAc;AAAA,QACrB,oBAAC,UAAK,WAAU,gBAAgB,wBAAa;AAAA,SAC/C;AAAA,MACC,iBAAiB,OAAO,QAAQ,IAC/B,qBAAC,SAAI,WAAU,gCACb;AAAA,4BAAC,UAAM,yBAAc;AAAA,QACrB,oBAAC,UAAK,WAAU,gBAAgB,gBAAM,OAAO,QAAQ,GAAE;AAAA,SACzD,IACE;AAAA,MACH,iBAAiB,OAAO,GAAG,IAC1B,qBAAC,SAAI,WAAU,gCACb;AAAA,4BAAC,UAAM,oBAAS;AAAA,QAChB,oBAAC,UAAK,WAAU,gBAAgB,gBAAM,OAAO,GAAG,GAAE;AAAA,SACpD,IACE;AAAA,MACH,iBAAiB,OAChB,qBAAC,SAAI,WAAU,6CACb;AAAA,4BAAC,UAAM,yBAAc;AAAA,QACrB,oBAAC,UAAK,WAAU,gBACb,iBAAO,OAAO,UAAU,MAAM,MAAM,IAAI,oBAAoB,cAC/D;AAAA,SACF,IACE;AAAA,MACJ,oBAAC,aAAU;AAAA,MACX,qBAAC,SAAI,WAAU,sCACb;AAAA,4BAAC,UAAM,sBAAW;AAAA,QAClB,oBAAC,UAAK,WAAU,gBAAgB,qBAAU;AAAA,SAC5C;AAAA,OACF;AAAA,EAEJ;AAEA,QAAM,mBAAmB,MACvB,eACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,UAAU,WAAS;AACjB,cAAM,eAAe;AACrB,cAAM,OAAO,UAAU,KAAK;AAC5B,YAAI,CAAC,KAAM;AACX,qBAAa,IAAI;AACjB,qBAAa,EAAE;AAAA,MACjB;AAAA,MAEA;AAAA,4BAAC,WAAM,WAAU,WAAU,SAAS,cACjC,4BACH;AAAA,QACA,qBAAC,SAAI,WAAU,cACb;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,IAAI;AAAA,cACJ,OAAO;AAAA,cACP,UAAU,WAAS,aAAa,MAAM,OAAO,KAAK;AAAA,cAClD,aAAa;AAAA,cACb,WAAU;AAAA;AAAA,UACZ;AAAA,UACA,oBAAC,UAAO,MAAK,UAAS,SAAQ,WAAU,MAAK,MAAK,WAAU,OAAM,UAAU,mBACzE,2BACH;AAAA,WACF;AAAA;AAAA;AAAA,EACF,IACE;AAEN,SACE,oBAAC,aAAQ,WAAU,QACjB,+BAAC,SAAI,WAAW,GAAG,gBAAgB,SAAS,cAAc,UAAU,GACjE;AAAA,aACC,oBAAC,QAAG,WAAU,8CAA8C,sBAAW,IACrE;AAAA,IACJ,qBAAC,QAAK,WAAW,SAAS,cAAc,aAEtC;AAAA,2BAAC,cAAW,WAAU,6DACpB;AAAA,6BAAC,aAAU,WAAU,2BACnB;AAAA,8BAAC,oBAAiB,WAAU,UAAS;AAAA,UACpC;AAAA,UAAW;AAAA,UAAG;AAAA,UAAU;AAAA,WAC3B;AAAA,QACC,CAAC,SACA;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,WAAU;AAAA,YACV,MAAK;AAAA,YACL,SAAS,MAAM,cAAc,CAAC,UAAU;AAAA,YACxC,iBAAe;AAAA,YACf,cAAY,aAAa,gBAAgB;AAAA,YAExC,uBAAa,oBAAC,KAAE,IAAK,oBAAC,QAAK;AAAA;AAAA,QAC9B,IACE;AAAA,SACN;AAAA,MAEA,oBAAC,eAAY,WAAU,uBACpB,gBAAM,WAAW,IAChB,qBAAC,SAAI,WAAU,oEACb;AAAA,4BAAC,oBAAiB,WAAU,oCAAmC;AAAA,QAC/D,oBAAC,OAAE,WAAU,iCAAiC,sBAAW;AAAA,QACxD,UAAU,qBACT,oBAAC,UAAO,SAAQ,WAAU,SAAS,oBAChC,iCACH,IACE;AAAA,SACN,IAEA,iCAEG;AAAA,wBAAgB,CAAC,aAAa,WAC7B,qBAAC,SAAI,WAAU,uBACb;AAAA,+BAAC,SAAI,WAAU,6CACb;AAAA,gCAAC,UAAK,WAAU,yBACb,sBAAY,eAAe;AAAA,cAC1B,QAAQ,OAAO,aAAa,YAAY,cAAc;AAAA,YACxD,CAAC,GACH;AAAA,YACA,qBAAC,SAAI,WAAU,2BACb;AAAA,kCAAC,aAAa,MAAb,EAAkB,WAAU,uBAAsB;AAAA,cACnD,oBAAC,UAAK,WAAU,4BAA4B,uBAAa,QAAO;AAAA,eAClE;AAAA,aACF;AAAA,UACA,oBAAC,YAAS,OAAO,oBAAoB,WAAU,OAAM;AAAA,WACvD,IACE;AAAA,QAGH,cAAc,WACb,oBAAC,SAAI,WAAU,gCACb,+BAAC,SAAI,WAAU,wCACb;AAAA,8BAAC,aAAa,MAAb,EAAkB,WAAU,UAAS;AAAA,UACtC,oBAAC,UAAK,WAAU,uBACb,sBAAY,gBAAgB,EAAE,QAAQ,aAAa,OAAO,CAAC,GAC9D;AAAA,WACF,GACF,IACE;AAAA,QAEH,YACC,iCAEE;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,CAAC,UACC;AAAA,cACJ;AAAA,cAEC,gBAAM,IAAI,UACT,qBAAC,SAAkB,WAAU,0BAC1B;AAAA,qBAAK,QACJ,oBAAC,SAAI,KAAK,KAAK,SAAS,QAAW,KAAI,IAAG,WAAU,qCAAoC,IAExF,oBAAC,SAAI,eAAY,QAAO,WAAU,0CAAyC;AAAA,gBAG7E,qBAAC,SAAI,WAAU,8BACb;AAAA,sCAAC,QAAG,WAAU,oCAAoC,eAAK,MAAK;AAAA,kBAC3D,KAAK,UAAU,oBAAC,OAAE,WAAU,iCAAiC,eAAK,SAAQ,IAAO;AAAA,kBAElF,qBAAC,SAAI,WAAU,qCACb;AAAA,wCAAC,UAAK,WAAU,yBAAyB,qBAAW,IAAI,KAAK,wBAAuB;AAAA,oBAEpF,qBAAC,SAAI,WAAU,qBACb;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,SAAQ;AAAA,0BACR,MAAK;AAAA,0BACL,WAAU;AAAA,0BACV,SACE,mBACI,MAAM,iBAAiB,KAAK,IAAI,KAAK,WAAW,CAAC,IACjD;AAAA,0BAEN,UAAU,KAAK,YAAY,KAAK;AAAA,0BAChC,cAAY,GAAG,aAAa,KAAK,KAAK,IAAI;AAAA,0BAE1C,8BAAC,SAAM;AAAA;AAAA,sBACT;AAAA,sBACA,oBAAC,UAAK,WAAU,gCAAgC,eAAK,UAAS;AAAA,sBAC9D;AAAA,wBAAC;AAAA;AAAA,0BACC,SAAQ;AAAA,0BACR,MAAK;AAAA,0BACL,WAAU;AAAA,0BACV,SACE,mBACI,MAAM,iBAAiB,KAAK,IAAI,KAAK,WAAW,CAAC,IACjD;AAAA,0BAEN,cAAY,GAAG,aAAa,KAAK,KAAK,IAAI;AAAA,0BAC1C,UAAU;AAAA,0BAEV,8BAAC,QAAK;AAAA;AAAA,sBACR;AAAA,sBACA;AAAA,wBAAC;AAAA;AAAA,0BACC,SAAQ;AAAA,0BACR,MAAK;AAAA,0BACL,WAAU;AAAA,0BACV,SAAS,WAAW,MAAM,SAAS,KAAK,EAAE,IAAI;AAAA,0BAC9C,UAAU;AAAA,0BACV,cAAY,GAAG,WAAW,IAAI,KAAK,IAAI;AAAA,0BAEvC,8BAAC,KAAE;AAAA;AAAA,sBACL;AAAA,uBACF;AAAA,qBACF;AAAA,mBACF;AAAA,mBAxDQ,KAAK,EAyDf,CACD;AAAA;AAAA,UACH;AAAA,UAEA,oBAAC,aAAU;AAAA,UAGX,oBAAC,SAAI,WAAU,uBAAuB,uBAAa,GAAE;AAAA,UAGpD,iBAAiB;AAAA,UAGlB,qBAAC,SAAI,WAAU,uBAEZ;AAAA,yBACC,iCACE;AAAA,mCAAC,SAAI,WAAU,6CACb;AAAA,oCAAC,UAAM,gCAAqB;AAAA,gBAC5B;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,MAAK;AAAA,oBACL,SAAS,MAAM,iBAAiB,CAAC,aAAa;AAAA,oBAC9C,WAAU;AAAA,oBACV,gBAAc;AAAA,oBAEd;AAAA,0CAAC,OAAI;AAAA,sBACJ,gBAAgB,gBAAgB;AAAA;AAAA;AAAA,gBACnC;AAAA,iBACF;AAAA,cAEC,gBACC,qBAAC,SAAI,WAAU,0BACZ;AAAA,iCACC,qBAAC,UAAO,MAAK,MAAK,SAAQ,WAAU,WAAU,mCAAkC,SAAS,gBACvF;AAAA,sCAAC,UAAO;AAAA,kBAAE;AAAA,mBAEZ,IACE;AAAA,gBACH,kBACC,qBAAC,UAAO,MAAK,MAAK,SAAQ,WAAU,WAAU,mCAAkC,SAAS,iBACvF;AAAA,sCAAC,cAAW;AAAA,kBAAE;AAAA,mBAEhB,IACE;AAAA,iBACN,IACE;AAAA,eACN,IACE;AAAA,YAGH,CAAC,sBACA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,SAAS,cAAc,gBAAgB,kBAAkB;AAAA,gBACzD,UAAU,oBAAoB,gBAAgB;AAAA,gBAE7C,wBAAc,gBAAgB,qBAAqB;AAAA;AAAA,YACtD,IACE;AAAA,YAGH,UAAU,qBACT;AAAA,cAAC;AAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,SAAS;AAAA,gBAER;AAAA;AAAA,YACH,IACE;AAAA,YAGH,yBACC,qBAAC,SAAI,WAAU,wEACb;AAAA,kCAAC,SAAM,WAAU,UAAS;AAAA,cAC1B,oBAAC,UAAM,kCAAuB;AAAA,eAChC,IACE;AAAA,aACN;AAAA,UAGA,oBAAC,SAAI,WAAU,0CACb,+BAAC,SAAI,WAAU,wEACb;AAAA,gCAAC,SAAI,WAAU,kCAAiC,eAAY,QAAO;AAAA,YACnE,oBAAC,UAAM,+BAAoB;AAAA,aAC7B,GACF;AAAA,WACF;AAAA,QAID,CAAC,YACA,qBAAC,SAAI,WAAU,uBACb;AAAA,+BAAC,SAAI,WAAU,qCACb;AAAA,iCAAC,UAAK,WAAU,iCACb;AAAA;AAAA,cAAU;AAAA,cAAE;AAAA,eACf;AAAA,YACC,iBAAiB,QAAQ,KAAK,IAC7B,oBAAC,UAAK,WAAU,8BAA8B,gBAAM,OAAO,KAAK,GAAE,IAChE;AAAA,aACN;AAAA,UAEA,oBAAC,UAAO,MAAK,MAAK,WAAU,0CAAyC,SAAS,YAC3E,4BACH;AAAA,WACF;AAAA,QAID,YAAY,kBAAkB,eAAe,SAAS,KACrD,qBAAC,SAAI,WAAU,uBACb;AAAA,8BAAC,QAAG,WAAU,uBAAuB,+BAAoB;AAAA,UACzD,oBAAC,SAAI,WAAU,0BACZ,yBAAe,IAAI,UAAQ;AAC1B,kBAAM,kBAAkB,MAAM,KAAK,SAAS;AAC5C,mBACE;AAAA,cAAC;AAAA;AAAA,gBAEC,MAAK;AAAA,gBACL,WAAW;AAAA,kBACT;AAAA,kBACA,yBAAyB;AAAA,gBAC3B;AAAA,gBACA,SAAS,wBAAwB,MAAM,sBAAsB,KAAK,EAAE,IAAI;AAAA,gBAExE;AAAA,sCAAC,SAAI,WAAU,+CACZ,eAAK,QACJ;AAAA,oBAAC;AAAA;AAAA,sBACC,KAAK,KAAK,SAAS;AAAA,sBACnB,KAAK,KAAK;AAAA,sBACV,WAAU;AAAA;AAAA,kBACZ,IACE,MACN;AAAA,kBACA,oBAAC,OAAE,WAAU,0CAA0C,eAAK,MAAK;AAAA,kBAChE,oBAAoB,OACnB,oBAAC,OAAE,WAAU,oCAAoC,2BAAgB,IAC/D;AAAA;AAAA;AAAA,cApBC,KAAK;AAAA,YAqBZ;AAAA,UAEJ,CAAC,GACH;AAAA,WACF;AAAA,SAEJ,GAEJ;AAAA,OACF;AAAA,KACF,GACF;AAEJ;AAEA,IAAO,wBAAQ;","names":["money"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface StoreContainer1Props {
|
|
3
|
+
size?: 'default' | 'narrow' | 'wide' | 'full';
|
|
4
|
+
className?: string;
|
|
5
|
+
children?: ReactNode;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Trivial presentational layout container used as the root of spec-driven
|
|
9
|
+
* storefront pages. Constrains content width; children render as-is.
|
|
10
|
+
*/
|
|
11
|
+
export declare function StoreContainer1({ size, className, children, }: StoreContainer1Props): import("react").JSX.Element;
|
|
12
|
+
export default StoreContainer1;
|
|
13
|
+
//# sourceMappingURL=store-container-1.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-container-1.d.ts","sourceRoot":"","sources":["../../../../src/blocks/e-commerce/store-containers/store-container-1.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAA;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AASD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAC9B,IAAgB,EAChB,SAAS,EACT,QAAQ,GACT,EAAE,oBAAoB,+BAEtB;AAED,eAAe,eAAe,CAAA"}
|