payaza-storefront-layouts 1.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 +108 -0
- package/dist/components/learning/CertificateTemplates.d.ts +25 -0
- package/dist/components/learning/CertificateTemplates.d.ts.map +1 -0
- package/dist/components/learning/CertificateTemplates.js +31 -0
- package/dist/components/learning/CertificateViewer.d.ts +11 -0
- package/dist/components/learning/CertificateViewer.d.ts.map +1 -0
- package/dist/components/learning/CertificateViewer.js +114 -0
- package/dist/components/learning/MentorshipProgress.d.ts +18 -0
- package/dist/components/learning/MentorshipProgress.d.ts.map +1 -0
- package/dist/components/learning/MentorshipProgress.js +19 -0
- package/dist/components/ui/address-selector.d.ts +11 -0
- package/dist/components/ui/address-selector.d.ts.map +1 -0
- package/dist/components/ui/address-selector.js +21 -0
- package/dist/components/ui/avatar-image.d.ts +11 -0
- package/dist/components/ui/avatar-image.d.ts.map +1 -0
- package/dist/components/ui/avatar-image.js +39 -0
- package/dist/components/ui/background-patterns.d.ts +27 -0
- package/dist/components/ui/background-patterns.d.ts.map +1 -0
- package/dist/components/ui/background-patterns.js +5 -0
- package/dist/components/ui/badge.d.ts +10 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/badge.js +20 -0
- package/dist/components/ui/breadcrumbs.d.ts +11 -0
- package/dist/components/ui/breadcrumbs.d.ts.map +1 -0
- package/dist/components/ui/breadcrumbs.js +8 -0
- package/dist/components/ui/button.d.ts +11 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +33 -0
- package/dist/components/ui/card.d.ts +10 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/card.js +24 -0
- package/dist/components/ui/category-tree.d.ts +16 -0
- package/dist/components/ui/category-tree.d.ts.map +1 -0
- package/dist/components/ui/category-tree.js +74 -0
- package/dist/components/ui/checkout-button.d.ts +11 -0
- package/dist/components/ui/checkout-button.d.ts.map +1 -0
- package/dist/components/ui/checkout-button.js +174 -0
- package/dist/components/ui/guest-checkout-modal.d.ts +19 -0
- package/dist/components/ui/guest-checkout-modal.d.ts.map +1 -0
- package/dist/components/ui/guest-checkout-modal.js +92 -0
- package/dist/components/ui/image-skeleton.d.ts +7 -0
- package/dist/components/ui/image-skeleton.d.ts.map +1 -0
- package/dist/components/ui/image-skeleton.js +15 -0
- package/dist/components/ui/image-with-fallback.d.ts +9 -0
- package/dist/components/ui/image-with-fallback.d.ts.map +1 -0
- package/dist/components/ui/image-with-fallback.js +203 -0
- package/dist/components/ui/input.d.ts +6 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/input.js +8 -0
- package/dist/components/ui/loading-skeleton-wrapper.d.ts +6 -0
- package/dist/components/ui/loading-skeleton-wrapper.d.ts.map +1 -0
- package/dist/components/ui/loading-skeleton-wrapper.js +10 -0
- package/dist/components/ui/modal.d.ts +11 -0
- package/dist/components/ui/modal.d.ts.map +1 -0
- package/dist/components/ui/modal.js +26 -0
- package/dist/components/ui/otp-input.d.ts +10 -0
- package/dist/components/ui/otp-input.d.ts.map +1 -0
- package/dist/components/ui/otp-input.js +57 -0
- package/dist/components/ui/out-of-stock-overlay.d.ts +8 -0
- package/dist/components/ui/out-of-stock-overlay.d.ts.map +1 -0
- package/dist/components/ui/out-of-stock-overlay.js +12 -0
- package/dist/components/ui/page-animate-wrapper.d.ts +7 -0
- package/dist/components/ui/page-animate-wrapper.d.ts.map +1 -0
- package/dist/components/ui/page-animate-wrapper.js +16 -0
- package/dist/components/ui/page-content-loader.d.ts +13 -0
- package/dist/components/ui/page-content-loader.d.ts.map +1 -0
- package/dist/components/ui/page-content-loader.js +12 -0
- package/dist/components/ui/page-loader.d.ts +20 -0
- package/dist/components/ui/page-loader.d.ts.map +1 -0
- package/dist/components/ui/page-loader.js +31 -0
- package/dist/components/ui/product-card.d.ts +11 -0
- package/dist/components/ui/product-card.d.ts.map +1 -0
- package/dist/components/ui/product-card.js +95 -0
- package/dist/components/ui/product-rating.d.ts +17 -0
- package/dist/components/ui/product-rating.d.ts.map +1 -0
- package/dist/components/ui/product-rating.js +54 -0
- package/dist/components/ui/review-form.d.ts +9 -0
- package/dist/components/ui/review-form.d.ts.map +1 -0
- package/dist/components/ui/review-form.js +28 -0
- package/dist/components/ui/route-skeleton-loader.d.ts +7 -0
- package/dist/components/ui/route-skeleton-loader.d.ts.map +1 -0
- package/dist/components/ui/route-skeleton-loader.js +75 -0
- package/dist/components/ui/sheet.d.ts +12 -0
- package/dist/components/ui/sheet.d.ts.map +1 -0
- package/dist/components/ui/sheet.js +29 -0
- package/dist/components/ui/skeleton.d.ts +3 -0
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeleton.js +6 -0
- package/dist/components/ui/skeletons/category-grid-skeleton.d.ts +6 -0
- package/dist/components/ui/skeletons/category-grid-skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeletons/category-grid-skeleton.js +16 -0
- package/dist/components/ui/skeletons/checkout-skeleton.d.ts +2 -0
- package/dist/components/ui/skeletons/checkout-skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeletons/checkout-skeleton.js +4 -0
- package/dist/components/ui/skeletons/index.d.ts +6 -0
- package/dist/components/ui/skeletons/index.d.ts.map +1 -0
- package/dist/components/ui/skeletons/index.js +5 -0
- package/dist/components/ui/skeletons/page-skeleton.d.ts +2 -0
- package/dist/components/ui/skeletons/page-skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeletons/page-skeleton.js +4 -0
- package/dist/components/ui/skeletons/product-card-skeleton.d.ts +2 -0
- package/dist/components/ui/skeletons/product-card-skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeletons/product-card-skeleton.js +4 -0
- package/dist/components/ui/skeletons/product-detail-skeleton.d.ts +2 -0
- package/dist/components/ui/skeletons/product-detail-skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeletons/product-detail-skeleton.js +4 -0
- package/dist/components/ui/skeletons/product-grid-skeleton.d.ts +7 -0
- package/dist/components/ui/skeletons/product-grid-skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeletons/product-grid-skeleton.js +12 -0
- package/dist/components/ui/store-logos.d.ts +43 -0
- package/dist/components/ui/store-logos.d.ts.map +1 -0
- package/dist/components/ui/store-logos.js +83 -0
- package/dist/components/ui/toast.d.ts +19 -0
- package/dist/components/ui/toast.d.ts.map +1 -0
- package/dist/components/ui/toast.js +33 -0
- package/dist/components/ui/video-player.d.ts +48 -0
- package/dist/components/ui/video-player.d.ts.map +1 -0
- package/dist/components/ui/video-player.js +96 -0
- package/dist/hooks/use-analytics.d.ts +14 -0
- package/dist/hooks/use-analytics.d.ts.map +1 -0
- package/dist/hooks/use-analytics.js +66 -0
- package/dist/hooks/use-api.d.ts +17 -0
- package/dist/hooks/use-api.d.ts.map +1 -0
- package/dist/hooks/use-api.js +53 -0
- package/dist/hooks/use-cart-api.d.ts +17 -0
- package/dist/hooks/use-cart-api.d.ts.map +1 -0
- package/dist/hooks/use-cart-api.js +134 -0
- package/dist/hooks/use-content-ready.d.ts +17 -0
- package/dist/hooks/use-content-ready.d.ts.map +1 -0
- package/dist/hooks/use-content-ready.js +197 -0
- package/dist/hooks/use-navigation-loading.d.ts +4 -0
- package/dist/hooks/use-navigation-loading.d.ts.map +1 -0
- package/dist/hooks/use-navigation-loading.js +14 -0
- package/dist/hooks/use-payaza-checkout.d.ts +14 -0
- package/dist/hooks/use-payaza-checkout.d.ts.map +1 -0
- package/dist/hooks/use-payaza-checkout.js +56 -0
- package/dist/hooks/use-products-api.d.ts +19 -0
- package/dist/hooks/use-products-api.d.ts.map +1 -0
- package/dist/hooks/use-products-api.js +84 -0
- package/dist/hooks/use-store-api.d.ts +12 -0
- package/dist/hooks/use-store-api.d.ts.map +1 -0
- package/dist/hooks/use-store-api.js +73 -0
- package/dist/index.d.ts +116 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +126 -0
- package/dist/json/booking-agenda.json +18 -0
- package/dist/json/booking.json +71 -0
- package/dist/json/clothing-minimal.json +26 -0
- package/dist/json/clothing.json +169 -0
- package/dist/json/electronics-grid.json +18 -0
- package/dist/json/electronics.json +50 -0
- package/dist/json/food-modern.json +38 -0
- package/dist/json/food.json +85 -0
- package/dist/json/json-map.d.ts +7 -0
- package/dist/json/json-map.d.ts.map +1 -0
- package/dist/json/json-map.js +36 -0
- package/dist/json/motivational-speaker.json +96 -0
- package/dist/layouts/booking/components/BookingHomePage.d.ts +7 -0
- package/dist/layouts/booking/components/BookingHomePage.d.ts.map +1 -0
- package/dist/layouts/booking/components/BookingHomePage.js +49 -0
- package/dist/layouts/booking/index.d.ts +9 -0
- package/dist/layouts/booking/index.d.ts.map +1 -0
- package/dist/layouts/booking/index.js +9 -0
- package/dist/layouts/booking/pages/AboutPage.d.ts +7 -0
- package/dist/layouts/booking/pages/AboutPage.d.ts.map +1 -0
- package/dist/layouts/booking/pages/AboutPage.js +45 -0
- package/dist/layouts/booking/pages/BookPage.d.ts +8 -0
- package/dist/layouts/booking/pages/BookPage.d.ts.map +1 -0
- package/dist/layouts/booking/pages/BookPage.js +441 -0
- package/dist/layouts/booking/pages/CategoriesPage.d.ts +7 -0
- package/dist/layouts/booking/pages/CategoriesPage.d.ts.map +1 -0
- package/dist/layouts/booking/pages/CategoriesPage.js +162 -0
- package/dist/layouts/booking/pages/CategoryPage.d.ts +8 -0
- package/dist/layouts/booking/pages/CategoryPage.d.ts.map +1 -0
- package/dist/layouts/booking/pages/CategoryPage.js +67 -0
- package/dist/layouts/booking/pages/ContactPage.d.ts +7 -0
- package/dist/layouts/booking/pages/ContactPage.d.ts.map +1 -0
- package/dist/layouts/booking/pages/ContactPage.js +20 -0
- package/dist/layouts/booking/pages/ProductDetailPage.d.ts +8 -0
- package/dist/layouts/booking/pages/ProductDetailPage.d.ts.map +1 -0
- package/dist/layouts/booking/pages/ProductDetailPage.js +502 -0
- package/dist/layouts/booking/pages/ServicesPage.d.ts +9 -0
- package/dist/layouts/booking/pages/ServicesPage.d.ts.map +1 -0
- package/dist/layouts/booking/pages/ServicesPage.js +31 -0
- package/dist/layouts/booking-agenda/components/BookingHomePageAgenda.d.ts +7 -0
- package/dist/layouts/booking-agenda/components/BookingHomePageAgenda.d.ts.map +1 -0
- package/dist/layouts/booking-agenda/components/BookingHomePageAgenda.js +186 -0
- package/dist/layouts/booking-agenda/index.d.ts +9 -0
- package/dist/layouts/booking-agenda/index.d.ts.map +1 -0
- package/dist/layouts/booking-agenda/index.js +9 -0
- package/dist/layouts/booking-agenda/pages/AboutPage.d.ts +7 -0
- package/dist/layouts/booking-agenda/pages/AboutPage.d.ts.map +1 -0
- package/dist/layouts/booking-agenda/pages/AboutPage.js +45 -0
- package/dist/layouts/booking-agenda/pages/BookPage.d.ts +8 -0
- package/dist/layouts/booking-agenda/pages/BookPage.d.ts.map +1 -0
- package/dist/layouts/booking-agenda/pages/BookPage.js +441 -0
- package/dist/layouts/booking-agenda/pages/CategoriesPage.d.ts +7 -0
- package/dist/layouts/booking-agenda/pages/CategoriesPage.d.ts.map +1 -0
- package/dist/layouts/booking-agenda/pages/CategoriesPage.js +162 -0
- package/dist/layouts/booking-agenda/pages/CategoryPage.d.ts +8 -0
- package/dist/layouts/booking-agenda/pages/CategoryPage.d.ts.map +1 -0
- package/dist/layouts/booking-agenda/pages/CategoryPage.js +67 -0
- package/dist/layouts/booking-agenda/pages/ContactPage.d.ts +7 -0
- package/dist/layouts/booking-agenda/pages/ContactPage.d.ts.map +1 -0
- package/dist/layouts/booking-agenda/pages/ContactPage.js +20 -0
- package/dist/layouts/booking-agenda/pages/ProductDetailPage.d.ts +8 -0
- package/dist/layouts/booking-agenda/pages/ProductDetailPage.d.ts.map +1 -0
- package/dist/layouts/booking-agenda/pages/ProductDetailPage.js +502 -0
- package/dist/layouts/booking-agenda/pages/ServicesPage.d.ts +9 -0
- package/dist/layouts/booking-agenda/pages/ServicesPage.d.ts.map +1 -0
- package/dist/layouts/booking-agenda/pages/ServicesPage.js +31 -0
- package/dist/layouts/clothing/components/ClothingHomePage.d.ts +7 -0
- package/dist/layouts/clothing/components/ClothingHomePage.d.ts.map +1 -0
- package/dist/layouts/clothing/components/ClothingHomePage.js +295 -0
- package/dist/layouts/clothing/index.d.ts +8 -0
- package/dist/layouts/clothing/index.d.ts.map +1 -0
- package/dist/layouts/clothing/index.js +8 -0
- package/dist/layouts/clothing/pages/AboutPage.d.ts +7 -0
- package/dist/layouts/clothing/pages/AboutPage.d.ts.map +1 -0
- package/dist/layouts/clothing/pages/AboutPage.js +45 -0
- package/dist/layouts/clothing/pages/CategoriesPage.d.ts +7 -0
- package/dist/layouts/clothing/pages/CategoriesPage.d.ts.map +1 -0
- package/dist/layouts/clothing/pages/CategoriesPage.js +162 -0
- package/dist/layouts/clothing/pages/CategoryPage.d.ts +8 -0
- package/dist/layouts/clothing/pages/CategoryPage.d.ts.map +1 -0
- package/dist/layouts/clothing/pages/CategoryPage.js +67 -0
- package/dist/layouts/clothing/pages/ContactPage.d.ts +7 -0
- package/dist/layouts/clothing/pages/ContactPage.d.ts.map +1 -0
- package/dist/layouts/clothing/pages/ContactPage.js +20 -0
- package/dist/layouts/clothing/pages/ProductDetailPage.d.ts +8 -0
- package/dist/layouts/clothing/pages/ProductDetailPage.d.ts.map +1 -0
- package/dist/layouts/clothing/pages/ProductDetailPage.js +502 -0
- package/dist/layouts/clothing/pages/ProductsPage.d.ts +7 -0
- package/dist/layouts/clothing/pages/ProductsPage.d.ts.map +1 -0
- package/dist/layouts/clothing/pages/ProductsPage.js +297 -0
- package/dist/layouts/clothing-minimal/components/ClothingHomePageMinimal.d.ts +7 -0
- package/dist/layouts/clothing-minimal/components/ClothingHomePageMinimal.d.ts.map +1 -0
- package/dist/layouts/clothing-minimal/components/ClothingHomePageMinimal.js +48 -0
- package/dist/layouts/clothing-minimal/index.d.ts +8 -0
- package/dist/layouts/clothing-minimal/index.d.ts.map +1 -0
- package/dist/layouts/clothing-minimal/index.js +8 -0
- package/dist/layouts/clothing-minimal/pages/AboutPage.d.ts +7 -0
- package/dist/layouts/clothing-minimal/pages/AboutPage.d.ts.map +1 -0
- package/dist/layouts/clothing-minimal/pages/AboutPage.js +45 -0
- package/dist/layouts/clothing-minimal/pages/CategoriesPage.d.ts +7 -0
- package/dist/layouts/clothing-minimal/pages/CategoriesPage.d.ts.map +1 -0
- package/dist/layouts/clothing-minimal/pages/CategoriesPage.js +162 -0
- package/dist/layouts/clothing-minimal/pages/CategoryPage.d.ts +8 -0
- package/dist/layouts/clothing-minimal/pages/CategoryPage.d.ts.map +1 -0
- package/dist/layouts/clothing-minimal/pages/CategoryPage.js +67 -0
- package/dist/layouts/clothing-minimal/pages/ContactPage.d.ts +7 -0
- package/dist/layouts/clothing-minimal/pages/ContactPage.d.ts.map +1 -0
- package/dist/layouts/clothing-minimal/pages/ContactPage.js +20 -0
- package/dist/layouts/clothing-minimal/pages/ProductDetailPage.d.ts +8 -0
- package/dist/layouts/clothing-minimal/pages/ProductDetailPage.d.ts.map +1 -0
- package/dist/layouts/clothing-minimal/pages/ProductDetailPage.js +502 -0
- package/dist/layouts/clothing-minimal/pages/ProductsPage.d.ts +7 -0
- package/dist/layouts/clothing-minimal/pages/ProductsPage.d.ts.map +1 -0
- package/dist/layouts/clothing-minimal/pages/ProductsPage.js +297 -0
- package/dist/layouts/electronics/components/ElectronicsCategoriesPage.d.ts +7 -0
- package/dist/layouts/electronics/components/ElectronicsCategoriesPage.d.ts.map +1 -0
- package/dist/layouts/electronics/components/ElectronicsCategoriesPage.js +34 -0
- package/dist/layouts/electronics/components/ElectronicsGridProductCard.d.ts +10 -0
- package/dist/layouts/electronics/components/ElectronicsGridProductCard.d.ts.map +1 -0
- package/dist/layouts/electronics/components/ElectronicsGridProductCard.js +107 -0
- package/dist/layouts/electronics/components/ElectronicsHomePage.d.ts +7 -0
- package/dist/layouts/electronics/components/ElectronicsHomePage.d.ts.map +1 -0
- package/dist/layouts/electronics/components/ElectronicsHomePage.js +78 -0
- package/dist/layouts/electronics/components/ElectronicsPageWrapper.d.ts +8 -0
- package/dist/layouts/electronics/components/ElectronicsPageWrapper.d.ts.map +1 -0
- package/dist/layouts/electronics/components/ElectronicsPageWrapper.js +10 -0
- package/dist/layouts/electronics/components/ElectronicsProductsPage.d.ts +7 -0
- package/dist/layouts/electronics/components/ElectronicsProductsPage.d.ts.map +1 -0
- package/dist/layouts/electronics/components/ElectronicsProductsPage.js +100 -0
- package/dist/layouts/electronics/components/ElectronicsStoreFooter.d.ts +7 -0
- package/dist/layouts/electronics/components/ElectronicsStoreFooter.d.ts.map +1 -0
- package/dist/layouts/electronics/components/ElectronicsStoreFooter.js +10 -0
- package/dist/layouts/electronics/components/ElectronicsStoreHeader.d.ts +7 -0
- package/dist/layouts/electronics/components/ElectronicsStoreHeader.d.ts.map +1 -0
- package/dist/layouts/electronics/components/ElectronicsStoreHeader.js +27 -0
- package/dist/layouts/electronics/index.d.ts +19 -0
- package/dist/layouts/electronics/index.d.ts.map +1 -0
- package/dist/layouts/electronics/index.js +19 -0
- package/dist/layouts/electronics/pages/AboutPage.d.ts +7 -0
- package/dist/layouts/electronics/pages/AboutPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/AboutPage.js +45 -0
- package/dist/layouts/electronics/pages/CategoriesPage.d.ts +7 -0
- package/dist/layouts/electronics/pages/CategoriesPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/CategoriesPage.js +6 -0
- package/dist/layouts/electronics/pages/CategoryPage.d.ts +8 -0
- package/dist/layouts/electronics/pages/CategoryPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/CategoryPage.js +67 -0
- package/dist/layouts/electronics/pages/ContactPage.d.ts +7 -0
- package/dist/layouts/electronics/pages/ContactPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/ContactPage.js +20 -0
- package/dist/layouts/electronics/pages/HelpCenterPage.d.ts +7 -0
- package/dist/layouts/electronics/pages/HelpCenterPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/HelpCenterPage.js +55 -0
- package/dist/layouts/electronics/pages/PrivacyPolicyPage.d.ts +7 -0
- package/dist/layouts/electronics/pages/PrivacyPolicyPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/PrivacyPolicyPage.js +8 -0
- package/dist/layouts/electronics/pages/ProductDetailPage.d.ts +8 -0
- package/dist/layouts/electronics/pages/ProductDetailPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/ProductDetailPage.js +502 -0
- package/dist/layouts/electronics/pages/ProductsPage.d.ts +7 -0
- package/dist/layouts/electronics/pages/ProductsPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/ProductsPage.js +297 -0
- package/dist/layouts/electronics/pages/ShippingReturnsPage.d.ts +7 -0
- package/dist/layouts/electronics/pages/ShippingReturnsPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/ShippingReturnsPage.js +7 -0
- package/dist/layouts/electronics/pages/TermsPage.d.ts +7 -0
- package/dist/layouts/electronics/pages/TermsPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/TermsPage.js +8 -0
- package/dist/layouts/electronics/pages/TrackOrderPage.d.ts +7 -0
- package/dist/layouts/electronics/pages/TrackOrderPage.d.ts.map +1 -0
- package/dist/layouts/electronics/pages/TrackOrderPage.js +371 -0
- package/dist/layouts/electronics-grid/components/ElectronicsGridProductCard.d.ts +10 -0
- package/dist/layouts/electronics-grid/components/ElectronicsGridProductCard.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/components/ElectronicsGridProductCard.js +107 -0
- package/dist/layouts/electronics-grid/components/ElectronicsHomePageGrid.d.ts +7 -0
- package/dist/layouts/electronics-grid/components/ElectronicsHomePageGrid.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/components/ElectronicsHomePageGrid.js +89 -0
- package/dist/layouts/electronics-grid/index.d.ts +15 -0
- package/dist/layouts/electronics-grid/index.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/index.js +15 -0
- package/dist/layouts/electronics-grid/pages/AboutPage.d.ts +7 -0
- package/dist/layouts/electronics-grid/pages/AboutPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/AboutPage.js +45 -0
- package/dist/layouts/electronics-grid/pages/CategoriesPage.d.ts +7 -0
- package/dist/layouts/electronics-grid/pages/CategoriesPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/CategoriesPage.js +6 -0
- package/dist/layouts/electronics-grid/pages/CategoryPage.d.ts +8 -0
- package/dist/layouts/electronics-grid/pages/CategoryPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/CategoryPage.js +67 -0
- package/dist/layouts/electronics-grid/pages/ContactPage.d.ts +7 -0
- package/dist/layouts/electronics-grid/pages/ContactPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/ContactPage.js +20 -0
- package/dist/layouts/electronics-grid/pages/ElectronicsGridCategoriesPage.d.ts +7 -0
- package/dist/layouts/electronics-grid/pages/ElectronicsGridCategoriesPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/ElectronicsGridCategoriesPage.js +15 -0
- package/dist/layouts/electronics-grid/pages/HelpCenterPage.d.ts +7 -0
- package/dist/layouts/electronics-grid/pages/HelpCenterPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/HelpCenterPage.js +55 -0
- package/dist/layouts/electronics-grid/pages/PrivacyPolicyPage.d.ts +7 -0
- package/dist/layouts/electronics-grid/pages/PrivacyPolicyPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/PrivacyPolicyPage.js +8 -0
- package/dist/layouts/electronics-grid/pages/ProductDetailPage.d.ts +8 -0
- package/dist/layouts/electronics-grid/pages/ProductDetailPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/ProductDetailPage.js +502 -0
- package/dist/layouts/electronics-grid/pages/ProductsPage.d.ts +7 -0
- package/dist/layouts/electronics-grid/pages/ProductsPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/ProductsPage.js +297 -0
- package/dist/layouts/electronics-grid/pages/ShippingReturnsPage.d.ts +7 -0
- package/dist/layouts/electronics-grid/pages/ShippingReturnsPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/ShippingReturnsPage.js +7 -0
- package/dist/layouts/electronics-grid/pages/TermsPage.d.ts +7 -0
- package/dist/layouts/electronics-grid/pages/TermsPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/TermsPage.js +8 -0
- package/dist/layouts/electronics-grid/pages/TrackOrderPage.d.ts +7 -0
- package/dist/layouts/electronics-grid/pages/TrackOrderPage.d.ts.map +1 -0
- package/dist/layouts/electronics-grid/pages/TrackOrderPage.js +371 -0
- package/dist/layouts/food/components/FoodHomePage.d.ts +7 -0
- package/dist/layouts/food/components/FoodHomePage.d.ts.map +1 -0
- package/dist/layouts/food/components/FoodHomePage.js +304 -0
- package/dist/layouts/food/index.d.ts +9 -0
- package/dist/layouts/food/index.d.ts.map +1 -0
- package/dist/layouts/food/index.js +9 -0
- package/dist/layouts/food/pages/AboutPage.d.ts +7 -0
- package/dist/layouts/food/pages/AboutPage.d.ts.map +1 -0
- package/dist/layouts/food/pages/AboutPage.js +45 -0
- package/dist/layouts/food/pages/CategoriesPage.d.ts +7 -0
- package/dist/layouts/food/pages/CategoriesPage.d.ts.map +1 -0
- package/dist/layouts/food/pages/CategoriesPage.js +162 -0
- package/dist/layouts/food/pages/CategoryPage.d.ts +8 -0
- package/dist/layouts/food/pages/CategoryPage.d.ts.map +1 -0
- package/dist/layouts/food/pages/CategoryPage.js +67 -0
- package/dist/layouts/food/pages/ContactPage.d.ts +7 -0
- package/dist/layouts/food/pages/ContactPage.d.ts.map +1 -0
- package/dist/layouts/food/pages/ContactPage.js +20 -0
- package/dist/layouts/food/pages/MenuPage.d.ts +8 -0
- package/dist/layouts/food/pages/MenuPage.d.ts.map +1 -0
- package/dist/layouts/food/pages/MenuPage.js +75 -0
- package/dist/layouts/food/pages/ProductDetailPage.d.ts +8 -0
- package/dist/layouts/food/pages/ProductDetailPage.d.ts.map +1 -0
- package/dist/layouts/food/pages/ProductDetailPage.js +502 -0
- package/dist/layouts/food/pages/ProductsPage.d.ts +7 -0
- package/dist/layouts/food/pages/ProductsPage.d.ts.map +1 -0
- package/dist/layouts/food/pages/ProductsPage.js +297 -0
- package/dist/layouts/food-modern/components/FoodHomePageModern.d.ts +7 -0
- package/dist/layouts/food-modern/components/FoodHomePageModern.d.ts.map +1 -0
- package/dist/layouts/food-modern/components/FoodHomePageModern.js +118 -0
- package/dist/layouts/food-modern/index.d.ts +9 -0
- package/dist/layouts/food-modern/index.d.ts.map +1 -0
- package/dist/layouts/food-modern/index.js +9 -0
- package/dist/layouts/food-modern/pages/AboutPage.d.ts +7 -0
- package/dist/layouts/food-modern/pages/AboutPage.d.ts.map +1 -0
- package/dist/layouts/food-modern/pages/AboutPage.js +45 -0
- package/dist/layouts/food-modern/pages/CategoriesPage.d.ts +7 -0
- package/dist/layouts/food-modern/pages/CategoriesPage.d.ts.map +1 -0
- package/dist/layouts/food-modern/pages/CategoriesPage.js +162 -0
- package/dist/layouts/food-modern/pages/CategoryPage.d.ts +8 -0
- package/dist/layouts/food-modern/pages/CategoryPage.d.ts.map +1 -0
- package/dist/layouts/food-modern/pages/CategoryPage.js +67 -0
- package/dist/layouts/food-modern/pages/ContactPage.d.ts +7 -0
- package/dist/layouts/food-modern/pages/ContactPage.d.ts.map +1 -0
- package/dist/layouts/food-modern/pages/ContactPage.js +20 -0
- package/dist/layouts/food-modern/pages/MenuPage.d.ts +8 -0
- package/dist/layouts/food-modern/pages/MenuPage.d.ts.map +1 -0
- package/dist/layouts/food-modern/pages/MenuPage.js +75 -0
- package/dist/layouts/food-modern/pages/ProductDetailPage.d.ts +8 -0
- package/dist/layouts/food-modern/pages/ProductDetailPage.d.ts.map +1 -0
- package/dist/layouts/food-modern/pages/ProductDetailPage.js +502 -0
- package/dist/layouts/food-modern/pages/ProductsPage.d.ts +7 -0
- package/dist/layouts/food-modern/pages/ProductsPage.d.ts.map +1 -0
- package/dist/layouts/food-modern/pages/ProductsPage.js +297 -0
- package/dist/layouts/motivational-speaker/components/MotivationalHomePage.d.ts +7 -0
- package/dist/layouts/motivational-speaker/components/MotivationalHomePage.d.ts.map +1 -0
- package/dist/layouts/motivational-speaker/components/MotivationalHomePage.js +115 -0
- package/dist/layouts/motivational-speaker/components/MotivationalPageWrapper.d.ts +8 -0
- package/dist/layouts/motivational-speaker/components/MotivationalPageWrapper.d.ts.map +1 -0
- package/dist/layouts/motivational-speaker/components/MotivationalPageWrapper.js +10 -0
- package/dist/layouts/motivational-speaker/index.d.ts +10 -0
- package/dist/layouts/motivational-speaker/index.d.ts.map +1 -0
- package/dist/layouts/motivational-speaker/index.js +10 -0
- package/dist/layouts/motivational-speaker/pages/AboutPage.d.ts +7 -0
- package/dist/layouts/motivational-speaker/pages/AboutPage.d.ts.map +1 -0
- package/dist/layouts/motivational-speaker/pages/AboutPage.js +45 -0
- package/dist/layouts/motivational-speaker/pages/CategoryPage.d.ts +8 -0
- package/dist/layouts/motivational-speaker/pages/CategoryPage.d.ts.map +1 -0
- package/dist/layouts/motivational-speaker/pages/CategoryPage.js +67 -0
- package/dist/layouts/motivational-speaker/pages/ContactPage.d.ts +7 -0
- package/dist/layouts/motivational-speaker/pages/ContactPage.d.ts.map +1 -0
- package/dist/layouts/motivational-speaker/pages/ContactPage.js +20 -0
- package/dist/layouts/motivational-speaker/pages/ProductsPage.d.ts +7 -0
- package/dist/layouts/motivational-speaker/pages/ProductsPage.d.ts.map +1 -0
- package/dist/layouts/motivational-speaker/pages/ProductsPage.js +297 -0
- package/dist/layouts/motivational-speaker/pages/ServiceDetailPage.d.ts +8 -0
- package/dist/layouts/motivational-speaker/pages/ServiceDetailPage.d.ts.map +1 -0
- package/dist/layouts/motivational-speaker/pages/ServiceDetailPage.js +144 -0
- package/dist/layouts/motivational-speaker/pages/ServicesPage.d.ts +9 -0
- package/dist/layouts/motivational-speaker/pages/ServicesPage.d.ts.map +1 -0
- package/dist/layouts/motivational-speaker/pages/ServicesPage.js +31 -0
- package/dist/layouts/motivational-speaker/pages/SubscriptionPage.d.ts +7 -0
- package/dist/layouts/motivational-speaker/pages/SubscriptionPage.d.ts.map +1 -0
- package/dist/layouts/motivational-speaker/pages/SubscriptionPage.js +136 -0
- package/dist/layouts/shared/components/BaseStoreLayout.d.ts +8 -0
- package/dist/layouts/shared/components/BaseStoreLayout.d.ts.map +1 -0
- package/dist/layouts/shared/components/BaseStoreLayout.js +59 -0
- package/dist/layouts/shared/components/GenericPageWrapper.d.ts +8 -0
- package/dist/layouts/shared/components/GenericPageWrapper.d.ts.map +1 -0
- package/dist/layouts/shared/components/GenericPageWrapper.js +19 -0
- package/dist/layouts/shared/components/PromoBanner.d.ts +9 -0
- package/dist/layouts/shared/components/PromoBanner.d.ts.map +1 -0
- package/dist/layouts/shared/components/PromoBanner.js +14 -0
- package/dist/layouts/shared/components/StoreFooter.d.ts +7 -0
- package/dist/layouts/shared/components/StoreFooter.d.ts.map +1 -0
- package/dist/layouts/shared/components/StoreFooter.js +147 -0
- package/dist/layouts/shared/components/StoreHeader.d.ts +8 -0
- package/dist/layouts/shared/components/StoreHeader.d.ts.map +1 -0
- package/dist/layouts/shared/components/StoreHeader.js +87 -0
- package/dist/layouts/shared/components/TestimonialCard.d.ts +8 -0
- package/dist/layouts/shared/components/TestimonialCard.d.ts.map +1 -0
- package/dist/layouts/shared/components/TestimonialCard.js +10 -0
- package/dist/layouts/shared/index.d.ts +23 -0
- package/dist/layouts/shared/index.d.ts.map +1 -0
- package/dist/layouts/shared/index.js +23 -0
- package/dist/layouts/shared/pages/AccountPage.d.ts +7 -0
- package/dist/layouts/shared/pages/AccountPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/AccountPage.js +605 -0
- package/dist/layouts/shared/pages/CartPage.d.ts +7 -0
- package/dist/layouts/shared/pages/CartPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/CartPage.js +83 -0
- package/dist/layouts/shared/pages/CheckoutPage.d.ts +7 -0
- package/dist/layouts/shared/pages/CheckoutPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/CheckoutPage.js +860 -0
- package/dist/layouts/shared/pages/CookiePolicyPage.d.ts +7 -0
- package/dist/layouts/shared/pages/CookiePolicyPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/CookiePolicyPage.js +8 -0
- package/dist/layouts/shared/pages/FeatureDisabledPage.d.ts +9 -0
- package/dist/layouts/shared/pages/FeatureDisabledPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/FeatureDisabledPage.js +8 -0
- package/dist/layouts/shared/pages/HelpCenterPage.d.ts +7 -0
- package/dist/layouts/shared/pages/HelpCenterPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/HelpCenterPage.js +55 -0
- package/dist/layouts/shared/pages/MaintenancePage.d.ts +7 -0
- package/dist/layouts/shared/pages/MaintenancePage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/MaintenancePage.js +44 -0
- package/dist/layouts/shared/pages/PortfolioPage.d.ts +7 -0
- package/dist/layouts/shared/pages/PortfolioPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/PortfolioPage.js +130 -0
- package/dist/layouts/shared/pages/PrivacyPolicyPage.d.ts +7 -0
- package/dist/layouts/shared/pages/PrivacyPolicyPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/PrivacyPolicyPage.js +8 -0
- package/dist/layouts/shared/pages/ShippingReturnsPage.d.ts +7 -0
- package/dist/layouts/shared/pages/ShippingReturnsPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/ShippingReturnsPage.js +7 -0
- package/dist/layouts/shared/pages/SizeGuidePage.d.ts +7 -0
- package/dist/layouts/shared/pages/SizeGuidePage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/SizeGuidePage.js +10 -0
- package/dist/layouts/shared/pages/StyleGuidePage.d.ts +7 -0
- package/dist/layouts/shared/pages/StyleGuidePage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/StyleGuidePage.js +126 -0
- package/dist/layouts/shared/pages/TeamPage.d.ts +7 -0
- package/dist/layouts/shared/pages/TeamPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/TeamPage.js +39 -0
- package/dist/layouts/shared/pages/TermsPage.d.ts +7 -0
- package/dist/layouts/shared/pages/TermsPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/TermsPage.js +8 -0
- package/dist/layouts/shared/pages/TrackOrderPage.d.ts +7 -0
- package/dist/layouts/shared/pages/TrackOrderPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/TrackOrderPage.js +371 -0
- package/dist/layouts/shared/pages/WishlistPage.d.ts +7 -0
- package/dist/layouts/shared/pages/WishlistPage.d.ts.map +1 -0
- package/dist/layouts/shared/pages/WishlistPage.js +162 -0
- package/dist/lib/api.d.ts +8 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +109 -0
- package/dist/lib/auth-context.d.ts +30 -0
- package/dist/lib/auth-context.d.ts.map +1 -0
- package/dist/lib/auth-context.js +207 -0
- package/dist/lib/content-selectors.d.ts +21 -0
- package/dist/lib/content-selectors.d.ts.map +1 -0
- package/dist/lib/content-selectors.js +75 -0
- package/dist/lib/countries.d.ts +11 -0
- package/dist/lib/countries.d.ts.map +1 -0
- package/dist/lib/countries.js +252 -0
- package/dist/lib/currency-symbols.d.ts +36 -0
- package/dist/lib/currency-symbols.d.ts.map +1 -0
- package/dist/lib/currency-symbols.js +153 -0
- package/dist/lib/guest-user.d.ts +27 -0
- package/dist/lib/guest-user.d.ts.map +1 -0
- package/dist/lib/guest-user.js +71 -0
- package/dist/lib/loading-context.d.ts +19 -0
- package/dist/lib/loading-context.d.ts.map +1 -0
- package/dist/lib/loading-context.js +197 -0
- package/dist/lib/mock-stores.d.ts +22 -0
- package/dist/lib/mock-stores.d.ts.map +1 -0
- package/dist/lib/mock-stores.js +2099 -0
- package/dist/lib/payaza-checkout.d.ts +167 -0
- package/dist/lib/payaza-checkout.d.ts.map +1 -0
- package/dist/lib/payaza-checkout.js +455 -0
- package/dist/lib/services/analytics.service.d.ts +58 -0
- package/dist/lib/services/analytics.service.d.ts.map +1 -0
- package/dist/lib/services/analytics.service.js +182 -0
- package/dist/lib/services/auth.service.d.ts +63 -0
- package/dist/lib/services/auth.service.d.ts.map +1 -0
- package/dist/lib/services/auth.service.js +101 -0
- package/dist/lib/services/booking.service.d.ts +53 -0
- package/dist/lib/services/booking.service.d.ts.map +1 -0
- package/dist/lib/services/booking.service.js +52 -0
- package/dist/lib/services/cart.service.d.ts +37 -0
- package/dist/lib/services/cart.service.d.ts.map +1 -0
- package/dist/lib/services/cart.service.js +55 -0
- package/dist/lib/services/category.service.d.ts +21 -0
- package/dist/lib/services/category.service.d.ts.map +1 -0
- package/dist/lib/services/category.service.js +41 -0
- package/dist/lib/services/checkout.service.d.ts +79 -0
- package/dist/lib/services/checkout.service.d.ts.map +1 -0
- package/dist/lib/services/checkout.service.js +37 -0
- package/dist/lib/services/customer.service.d.ts +52 -0
- package/dist/lib/services/customer.service.d.ts.map +1 -0
- package/dist/lib/services/customer.service.js +64 -0
- package/dist/lib/services/fees.service.d.ts +23 -0
- package/dist/lib/services/fees.service.d.ts.map +1 -0
- package/dist/lib/services/fees.service.js +13 -0
- package/dist/lib/services/index.d.ts +19 -0
- package/dist/lib/services/index.d.ts.map +1 -0
- package/dist/lib/services/index.js +18 -0
- package/dist/lib/services/order.service.d.ts +107 -0
- package/dist/lib/services/order.service.d.ts.map +1 -0
- package/dist/lib/services/order.service.js +82 -0
- package/dist/lib/services/payment.service.d.ts +51 -0
- package/dist/lib/services/payment.service.d.ts.map +1 -0
- package/dist/lib/services/payment.service.js +105 -0
- package/dist/lib/services/product.service.d.ts +90 -0
- package/dist/lib/services/product.service.d.ts.map +1 -0
- package/dist/lib/services/product.service.js +86 -0
- package/dist/lib/services/promo.service.d.ts +31 -0
- package/dist/lib/services/promo.service.d.ts.map +1 -0
- package/dist/lib/services/promo.service.js +29 -0
- package/dist/lib/services/review.service.d.ts +47 -0
- package/dist/lib/services/review.service.d.ts.map +1 -0
- package/dist/lib/services/review.service.js +54 -0
- package/dist/lib/services/service.service.d.ts +55 -0
- package/dist/lib/services/service.service.d.ts.map +1 -0
- package/dist/lib/services/service.service.js +37 -0
- package/dist/lib/services/shipping.service.d.ts +44 -0
- package/dist/lib/services/shipping.service.d.ts.map +1 -0
- package/dist/lib/services/shipping.service.js +23 -0
- package/dist/lib/services/store.service.d.ts +87 -0
- package/dist/lib/services/store.service.d.ts.map +1 -0
- package/dist/lib/services/store.service.js +41 -0
- package/dist/lib/services/wishlist.service.d.ts +30 -0
- package/dist/lib/services/wishlist.service.d.ts.map +1 -0
- package/dist/lib/services/wishlist.service.js +53 -0
- package/dist/lib/store-config-utils.d.ts +41 -0
- package/dist/lib/store-config-utils.d.ts.map +1 -0
- package/dist/lib/store-config-utils.js +1535 -0
- package/dist/lib/store-config.d.ts +3 -0
- package/dist/lib/store-config.d.ts.map +1 -0
- package/dist/lib/store-config.js +2 -0
- package/dist/lib/store-context.d.ts +39 -0
- package/dist/lib/store-context.d.ts.map +1 -0
- package/dist/lib/store-context.js +803 -0
- package/dist/lib/store-types.d.ts +663 -0
- package/dist/lib/store-types.d.ts.map +1 -0
- package/dist/lib/store-types.js +1 -0
- package/dist/lib/utils/asset-helpers.d.ts +102 -0
- package/dist/lib/utils/asset-helpers.d.ts.map +1 -0
- package/dist/lib/utils/asset-helpers.js +395 -0
- package/dist/lib/utils/category-tree.d.ts +25 -0
- package/dist/lib/utils/category-tree.d.ts.map +1 -0
- package/dist/lib/utils/category-tree.js +85 -0
- package/dist/lib/utils/demo-detection.d.ts +23 -0
- package/dist/lib/utils/demo-detection.d.ts.map +1 -0
- package/dist/lib/utils/demo-detection.js +36 -0
- package/dist/lib/utils/fee-calculations.d.ts +35 -0
- package/dist/lib/utils/fee-calculations.d.ts.map +1 -0
- package/dist/lib/utils/fee-calculations.js +64 -0
- package/dist/lib/utils/index.d.ts +37 -0
- package/dist/lib/utils/index.d.ts.map +1 -0
- package/dist/lib/utils/index.js +160 -0
- package/dist/lib/utils/url-helpers.d.ts +30 -0
- package/dist/lib/utils/url-helpers.d.ts.map +1 -0
- package/dist/lib/utils/url-helpers.js +56 -0
- package/dist/lib/utils/video-helpers.d.ts +32 -0
- package/dist/lib/utils/video-helpers.d.ts.map +1 -0
- package/dist/lib/utils/video-helpers.js +210 -0
- package/package.json +92 -0
package/README.md
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# storefront-layouts
|
|
2
|
+
|
|
3
|
+
Shared layout components package for StoreFront applications.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
This package contains all layout components used by both `storefront-app` and `storefront-admin`. The layouts are data-agnostic and accept `storeConfig` as props, allowing multiple stores to use the same layout instances with different data.
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install storefront-layouts
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Or using npm workspaces:
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"storefront-layouts": "workspace:*"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Usage
|
|
26
|
+
|
|
27
|
+
### In storefront-app
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
import { FoodHomePage } from 'storefront-layouts';
|
|
31
|
+
|
|
32
|
+
export default function StorePage({ storeConfig }) {
|
|
33
|
+
return <FoodHomePage storeConfig={storeConfig} />;
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### In storefront-admin
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
import { getLayoutJSON } from 'storefront-layouts';
|
|
41
|
+
|
|
42
|
+
const layoutData = getLayoutJSON('food');
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Available Layouts
|
|
46
|
+
|
|
47
|
+
- `food` - Food/Restaurant layout
|
|
48
|
+
- `food-modern` - Modern food layout
|
|
49
|
+
- `clothing` - Clothing/Fashion layout
|
|
50
|
+
- `clothing-minimal` - Minimal clothing layout
|
|
51
|
+
- `booking` - Booking/Service layout
|
|
52
|
+
- `booking-agenda` - Agenda-based booking layout
|
|
53
|
+
- `electronics` - Electronics layout
|
|
54
|
+
- `electronics-grid` - Grid-based electronics layout
|
|
55
|
+
- `motivational-speaker` - Motivational speaker layout
|
|
56
|
+
- `shared` - Shared components used across layouts
|
|
57
|
+
|
|
58
|
+
## Dependencies
|
|
59
|
+
|
|
60
|
+
This package requires the following peer dependencies (provided by consuming apps):
|
|
61
|
+
|
|
62
|
+
- `react` ^19.2.0
|
|
63
|
+
- `react-dom` ^19.2.0
|
|
64
|
+
- `next` ^16.0.3
|
|
65
|
+
|
|
66
|
+
## TypeScript Configuration
|
|
67
|
+
|
|
68
|
+
Consuming apps need to configure TypeScript paths to resolve imports:
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"compilerOptions": {
|
|
73
|
+
"paths": {
|
|
74
|
+
"@/*": ["./*"],
|
|
75
|
+
"storefront-layouts": ["../storefront-layouts/src"]
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Next.js Configuration
|
|
82
|
+
|
|
83
|
+
Add to `next.config.ts`:
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
const nextConfig = {
|
|
87
|
+
transpilePackages: ['storefront-layouts'],
|
|
88
|
+
};
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Dynamic Data Support
|
|
92
|
+
|
|
93
|
+
Layouts are designed to work with dynamic data:
|
|
94
|
+
|
|
95
|
+
- All layout components accept `storeConfig: StoreConfig` as props
|
|
96
|
+
- Layouts use hooks like `useStore()` from consuming apps
|
|
97
|
+
- No hardcoded data - all data comes from consuming apps
|
|
98
|
+
- Supports `preview_layout` query parameter for layout preview
|
|
99
|
+
|
|
100
|
+
## Building
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
npm run build
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
This compiles TypeScript to JavaScript in the `dist/` directory.
|
|
107
|
+
|
|
108
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type CertificateDesign = 'classic' | 'modern' | 'minimal' | 'premium' | 'luxury';
|
|
2
|
+
export interface CertificateData {
|
|
3
|
+
studentName: string;
|
|
4
|
+
courseName: string;
|
|
5
|
+
completionDate: string;
|
|
6
|
+
certificateId: string;
|
|
7
|
+
instructorName: string;
|
|
8
|
+
instructorTitle: string;
|
|
9
|
+
institutionName?: string;
|
|
10
|
+
signatureUrl?: string;
|
|
11
|
+
brandLogo?: string;
|
|
12
|
+
primaryColor?: string;
|
|
13
|
+
}
|
|
14
|
+
interface CertificateTemplateProps {
|
|
15
|
+
data: CertificateData;
|
|
16
|
+
design: CertificateDesign;
|
|
17
|
+
className?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function CertificateTemplate({ data, design, className }: CertificateTemplateProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export declare function CertificateCard({ certificate, onDownload }: {
|
|
21
|
+
certificate: any;
|
|
22
|
+
onDownload: (id: string) => void;
|
|
23
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=CertificateTemplates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CertificateTemplates.d.ts","sourceRoot":"","sources":["../../../src/components/learning/CertificateTemplates.tsx"],"names":[],"mappings":"AAOA,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAExF,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,wBAAwB;IAChC,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,wBAAwB,2CAyWxF;AAED,wBAAgB,eAAe,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE;IAC3D,WAAW,EAAE,GAAG,CAAC;IACjB,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CACjC,2CAsDA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { cn } from '../../lib/utils';
|
|
4
|
+
import { Award, CheckCircle, ShieldCheck, Star, Shield, QrCode } from 'lucide-react';
|
|
5
|
+
import { motion } from 'framer-motion';
|
|
6
|
+
import { Button } from '../../components/ui/button';
|
|
7
|
+
export function CertificateTemplate({ data, design, className }) {
|
|
8
|
+
const { studentName, courseName, completionDate, certificateId, instructorName, instructorTitle, institutionName = 'Mindset Mastery Academy', signatureUrl, brandLogo, primaryColor = '#0F172A' } = data;
|
|
9
|
+
const renderClassic = () => (_jsxs("div", { className: "w-full h-full bg-white border-[20px] border-double p-12 flex flex-col items-center text-center font-serif relative", style: { borderColor: primaryColor }, children: [_jsx("div", { className: "absolute top-6 left-6 w-16 h-16 border-t-4 border-l-4", style: { borderColor: primaryColor } }), _jsx("div", { className: "absolute top-6 right-6 w-16 h-16 border-t-4 border-r-4", style: { borderColor: primaryColor } }), _jsx("div", { className: "absolute bottom-6 left-6 w-16 h-16 border-b-4 border-l-4", style: { borderColor: primaryColor } }), _jsx("div", { className: "absolute bottom-6 right-6 w-16 h-16 border-b-4 border-r-4", style: { borderColor: primaryColor } }), _jsxs("div", { className: "mb-6", children: [_jsx("p", { className: "text-[10px] font-bold uppercase tracking-[0.3em] mb-2 text-slate-400", children: institutionName }), _jsx(Award, { className: "w-16 h-16 mb-4 mx-auto", style: { color: primaryColor } }), _jsx("h1", { className: "text-5xl font-black tracking-widest uppercase mb-1", children: "Certificate" }), _jsx("h2", { className: "text-xl italic text-gray-500", children: "of Achievement" })] }), _jsx("p", { className: "text-lg mb-4", children: "This is to certify that" }), _jsx("h3", { className: "text-5xl font-bold mb-6 underline decoration-1 underline-offset-8 text-slate-900", children: studentName }), _jsx("p", { className: "text-lg mb-4", children: "has successfully demonstrated mastery in" }), _jsx("h4", { className: "text-3xl font-bold mb-10 text-slate-800 tracking-tight", children: courseName }), _jsxs("div", { className: "mt-auto w-full flex justify-between items-end px-12 pb-4", children: [_jsxs("div", { className: "text-left w-56", children: [_jsx("div", { className: "border-b border-slate-200 w-full mb-2 h-12 flex items-end justify-center", children: signatureUrl ? (_jsx("img", { src: signatureUrl, alt: "Signature", className: "h-10 object-contain" })) : (_jsx("span", { className: "text-3xl opacity-80 italic font-signature", children: instructorName })) }), _jsx("p", { className: "font-bold text-[10px] text-slate-900", children: instructorName }), _jsx("p", { className: "text-[8px] text-slate-400 uppercase tracking-widest", children: instructorTitle })] }), _jsxs("div", { className: "flex flex-col items-center", children: [_jsx("div", { className: "w-24 h-24 rounded-full border-4 flex items-center justify-center mb-2 shadow-inner", style: { borderColor: `${primaryColor}20` }, children: _jsxs("div", { className: "w-18 h-18 rounded-full border flex items-center justify-center relative bg-white shadow-sm", style: { borderColor: primaryColor }, children: [_jsx(Shield, { className: "w-8 h-8", style: { color: primaryColor } }), _jsx("span", { className: "absolute text-[6px] font-black uppercase tracking-tighter rotate-[-15deg] bg-white px-1", children: "Verified" })] }) }), _jsxs("p", { className: "text-[8px] font-mono text-slate-400", children: ["ID: ", certificateId] })] }), _jsxs("div", { className: "text-right w-56", children: [_jsx("div", { className: "border-b border-slate-200 w-full mb-2 h-12 flex items-end justify-center", children: _jsx("span", { className: "font-bold text-[12px] text-slate-900", children: completionDate }) }), _jsx("p", { className: "text-[8px] text-slate-400 uppercase tracking-widest", children: "Date of Graduation" })] })] })] }));
|
|
10
|
+
const renderModern = () => (_jsxs("div", { className: "w-full h-full bg-slate-50 flex font-sans relative", children: [_jsx("div", { className: "absolute top-0 right-0 w-1/2 h-full opacity-[0.03] pointer-events-none", children: _jsx("svg", { viewBox: "0 0 100 100", className: "w-full h-full fill-current", style: { color: primaryColor }, children: _jsx("path", { d: "M0,0 L100,0 L100,100 Z" }) }) }), _jsxs("div", { className: "w-16 h-full flex flex-col items-center justify-center gap-8 text-white relative z-10", style: { backgroundColor: primaryColor }, children: [_jsx("div", { className: "rotate-[-90deg] whitespace-nowrap font-black tracking-[0.4em] text-[10px] uppercase opacity-40", children: "ACADEMIC EXCELLENCE" }), _jsx("div", { className: "w-8 h-8 rounded-lg bg-white/10 backdrop-blur-md flex items-center justify-center", children: _jsx(Star, { className: "w-4 h-4 fill-white" }) })] }), _jsxs("div", { className: "flex-1 p-12 flex flex-col relative z-10 text-left", children: [_jsxs("div", { className: "flex justify-between items-start mb-10", children: [_jsxs("div", { className: "space-y-1", children: [_jsx("p", { className: "text-[8px] font-black uppercase tracking-[0.4em] text-primary", children: institutionName }), brandLogo ? (_jsx("img", { src: brandLogo, alt: "Logo", className: "h-8 object-contain" })) : (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("div", { className: "w-6 h-6 rounded flex items-center justify-center text-white", style: { backgroundColor: primaryColor }, children: _jsx(ShieldCheck, { className: "w-4 h-4" }) }), _jsx("span", { className: "font-black text-xl tracking-tighter text-slate-900", children: "CERTIFIED" })] }))] }), _jsxs("div", { className: "text-right", children: [_jsx("p", { className: "text-[8px] font-black uppercase tracking-widest text-slate-400", children: "Secure Credential" }), _jsx("p", { className: "text-[10px] font-mono font-bold text-slate-900", children: certificateId })] })] }), _jsxs("div", { className: "mb-8", children: [_jsx("span", { className: "inline-block py-1 px-3 rounded-full bg-slate-900 text-white text-[8px] font-black uppercase tracking-[0.2em] mb-4", children: "Official Certification" }), _jsxs("h1", { className: "text-6xl font-black text-slate-900 leading-[0.9] mb-3", children: ["Certificate ", _jsx("br", {}), _jsx("span", { style: { color: primaryColor }, children: "Of Completion" })] }), _jsx("div", { className: "w-24 h-1.5 rounded-full", style: { backgroundColor: primaryColor } })] }), _jsxs("div", { className: "mt-2 space-y-6", children: [_jsx("p", { className: "text-lg text-slate-400 font-medium tracking-wide", children: "This document confirms that" }), _jsx("h2", { className: "text-6xl font-black text-slate-900 tracking-tight leading-none", children: studentName }), _jsxs("p", { className: "text-base text-slate-500 font-medium max-w-2xl leading-relaxed", children: ["has successfully completed all requirements for the professional curriculum", _jsx("span", { className: "font-black text-slate-900 block mt-1 text-xl", style: { color: primaryColor }, children: courseName })] })] }), _jsxs("div", { className: "mt-auto flex items-end justify-between pb-2", children: [_jsxs("div", { className: "flex gap-12", children: [_jsxs("div", { className: "text-left", children: [_jsx("p", { className: "text-[8px] font-black uppercase tracking-widest text-slate-400 mb-2", children: "Lead Instructor" }), _jsx("div", { className: "mb-1 h-10 flex items-end", children: signatureUrl ? (_jsx("img", { src: signatureUrl, alt: "Signature", className: "h-8 object-contain" })) : (_jsx("span", { className: "text-2xl opacity-80 italic font-signature text-slate-900", children: instructorName })) }), _jsx("p", { className: "font-black text-slate-900 text-[10px] tracking-tight", children: instructorName }), _jsx("p", { className: "text-[8px] text-slate-400 font-bold uppercase tracking-widest", children: instructorTitle })] }), _jsxs("div", { className: "text-left", children: [_jsx("p", { className: "text-[8px] font-black uppercase tracking-widest text-slate-400 mb-10", children: "Issued On" }), _jsx("p", { className: "font-black text-slate-900 text-[10px] tracking-tight", children: completionDate }), _jsx("p", { className: "text-[8px] text-slate-400 font-bold uppercase tracking-widest", children: "Graduation Date" })] })] }), _jsxs("div", { className: "flex items-center gap-4", children: [_jsxs("div", { className: "text-right", children: [_jsx("p", { className: "text-[8px] font-black uppercase tracking-widest text-slate-400 mb-0.5", children: "Authenticated" }), _jsx("p", { className: "text-[8px] text-slate-900 font-bold", children: "Scan to verify" })] }), _jsx("div", { className: "w-16 h-16 bg-white p-1.5 rounded-xl border border-slate-100 flex items-center justify-center shadow-md", children: _jsx(QrCode, { className: "w-full h-full opacity-20" }) })] })] })] })] }));
|
|
11
|
+
const renderMinimal = () => (_jsxs("div", { className: "w-full h-full bg-white p-16 flex flex-col font-sans relative", children: [_jsx("div", { className: "absolute inset-0 border-[1px] border-slate-100 m-8 pointer-events-none" }), _jsxs("div", { className: "flex justify-between items-center mb-20", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "w-2.5 h-2.5 rounded-full", style: { backgroundColor: primaryColor } }), _jsx("span", { className: "text-[10px] font-black uppercase tracking-[0.4em] text-slate-900", children: institutionName })] }), _jsx("h1", { className: "text-[10px] font-black uppercase tracking-[0.6em] text-slate-300", children: "Official Certificate" })] }), _jsxs("div", { className: "space-y-12 text-left", children: [_jsxs("div", { children: [_jsx("p", { className: "text-slate-400 uppercase tracking-[0.3em] text-[8px] font-black mb-4", children: "Presented to" }), _jsx("h2", { className: "text-7xl font-light text-slate-900 tracking-tighter leading-none", children: studentName })] }), _jsxs("div", { className: "flex items-center gap-8", children: [_jsx("div", { className: "h-[1px] flex-1 bg-slate-100" }), _jsx("p", { className: "text-slate-400 font-medium italic text-base", children: "for completion of" }), _jsx("div", { className: "h-[1px] flex-1 bg-slate-100" })] }), _jsx("h3", { className: "text-4xl font-black text-slate-900 tracking-tight leading-none", children: courseName })] }), _jsxs("div", { className: "mt-auto flex justify-between items-end pb-4", children: [_jsxs("div", { className: "space-y-4 text-left", children: [_jsxs("div", { className: "flex items-center gap-2 py-1.5 px-3 rounded-full bg-slate-50 border border-slate-100 w-fit", children: [_jsx(CheckCircle, { className: "w-3 h-3 text-green-500" }), _jsx("span", { className: "text-[8px] font-black uppercase tracking-[0.2em] text-slate-500", children: "Verified Achievement" })] }), _jsxs("p", { className: "text-[8px] font-mono font-bold text-slate-300 tracking-widest uppercase", children: ["ID: ", certificateId] })] }), _jsxs("div", { className: "text-right space-y-8", children: [_jsxs("div", { className: "space-y-1", children: [_jsx("div", { className: "mb-2 h-10 flex items-end justify-end", children: signatureUrl ? (_jsx("img", { src: signatureUrl, alt: "Signature", className: "h-8 object-contain ml-auto" })) : (_jsx("span", { className: "text-2xl opacity-60 italic font-signature text-slate-900", children: instructorName })) }), _jsx("p", { className: "font-black text-slate-900 text-[10px] uppercase tracking-[0.2em]", children: instructorName }), _jsx("p", { className: "text-[8px] text-slate-400 font-black uppercase tracking-[0.3em]", children: instructorTitle })] }), _jsx("div", { className: "pt-4 border-t border-slate-100", children: _jsx("p", { className: "text-[8px] text-slate-400 font-black uppercase tracking-[0.4em]", children: completionDate }) })] })] })] }));
|
|
12
|
+
const renderPremium = () => (_jsxs("div", { className: "w-full h-full bg-slate-900 flex flex-col items-center justify-center p-16 font-sans relative overflow-hidden", children: [_jsx("div", { className: "absolute top-0 left-0 w-full h-1 bg-gradient-to-r from-transparent via-amber-500 to-transparent opacity-50" }), _jsx("div", { className: "absolute bottom-0 left-0 w-full h-1 bg-gradient-to-r from-transparent via-amber-500 to-transparent opacity-50" }), _jsx("div", { className: "absolute top-0 left-0 w-1 h-full bg-gradient-to-b from-transparent via-amber-500 to-transparent opacity-20" }), _jsx("div", { className: "absolute top-0 right-0 w-1 h-full bg-gradient-to-b from-transparent via-amber-500 to-transparent opacity-20" }), _jsx("div", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[800px] h-[800px] bg-amber-500 opacity-[0.03] blur-[120px] rounded-full pointer-events-none" }), _jsxs("div", { className: "mb-10 flex flex-col items-center gap-4 relative z-10", children: [_jsx("div", { className: "w-16 h-16 rounded-2xl bg-gradient-to-br from-amber-400 to-amber-600 flex items-center justify-center shadow-lg shadow-amber-500/20", children: _jsx(Award, { className: "w-8 h-8 text-white" }) }), _jsxs("div", { className: "text-center", children: [_jsx("p", { className: "text-[10px] font-black uppercase tracking-[0.5em] text-amber-500 mb-1", children: institutionName }), _jsx("h1", { className: "text-4xl font-black text-white tracking-[0.2em] uppercase", children: "Certificate" }), _jsx("p", { className: "text-amber-500/60 text-xs font-bold uppercase tracking-[0.3em]", children: "of Premium Excellence" })] })] }), _jsxs("div", { className: "text-center space-y-8 relative z-10", children: [_jsxs("div", { children: [_jsx("p", { className: "text-slate-400 text-sm font-medium italic mb-4", children: "This highly distinguished award is presented to" }), _jsx("h2", { className: "text-6xl font-black text-transparent bg-clip-text bg-gradient-to-b from-white to-slate-400 tracking-tight leading-none py-2", children: studentName })] }), _jsxs("div", { className: "max-w-xl mx-auto space-y-4", children: [_jsx("p", { className: "text-slate-500 text-sm font-medium", children: "for the exceptional completion and mastery of the professional curriculum" }), _jsx("h3", { className: "text-2xl font-black text-amber-500 tracking-tight", children: courseName })] })] }), _jsxs("div", { className: "mt-auto w-full flex justify-between items-end px-4 relative z-10", children: [_jsxs("div", { className: "text-left", children: [_jsx("div", { className: "mb-2 h-10 flex items-end", children: signatureUrl ? (_jsx("img", { src: signatureUrl, alt: "Signature", className: "h-8 object-contain" })) : (_jsx("span", { className: "text-2xl opacity-80 italic font-signature text-white", children: instructorName })) }), _jsx("p", { className: "font-black text-white text-[10px] tracking-widest uppercase", children: instructorName }), _jsx("p", { className: "text-[8px] text-slate-500 font-bold uppercase tracking-[0.2em]", children: instructorTitle })] }), _jsxs("div", { className: "flex flex-col items-center gap-2", children: [_jsx("div", { className: "px-4 py-1.5 rounded-full bg-slate-800 border border-slate-700 shadow-inner", children: _jsx("p", { className: "text-[8px] font-mono text-amber-500/80 font-bold tracking-widest", children: certificateId }) }), _jsx("p", { className: "text-[7px] text-slate-600 font-black uppercase tracking-[0.3em]", children: "Official Verification ID" })] }), _jsxs("div", { className: "text-right", children: [_jsx("p", { className: "text-white text-[10px] font-black tracking-widest uppercase mb-1", children: completionDate }), _jsx("p", { className: "text-[8px] text-slate-500 font-bold uppercase tracking-[0.2em]", children: "Distinguished Graduate" })] })] })] }));
|
|
13
|
+
const renderLuxury = () => (_jsxs("div", { className: "w-full h-full bg-[#1A1A1A] flex flex-col items-center justify-center p-20 font-serif relative overflow-hidden", children: [_jsx("div", { className: "absolute inset-4 border border-[#C5A059] opacity-40 pointer-events-none" }), _jsx("div", { className: "absolute inset-8 border-4 border-[#C5A059] opacity-20 pointer-events-none" }), _jsx("div", { className: "absolute top-10 left-1/2 -translate-x-1/2 opacity-60", children: _jsxs("svg", { width: "200", height: "40", viewBox: "0 0 200 40", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [_jsx("path", { d: "M0 20C50 20 50 0 100 0C150 0 150 20 200 20", stroke: "#C5A059", strokeWidth: "1" }), _jsx("circle", { cx: "100", cy: "0", r: "4", fill: "#C5A059" })] }) }), _jsxs("div", { className: "text-center relative z-10", children: [_jsx("p", { className: "text-[#C5A059] text-xs font-bold uppercase tracking-[0.6em] mb-12", children: institutionName }), _jsxs("div", { className: "space-y-4 mb-16", children: [_jsx("h1", { className: "text-6xl font-light text-white tracking-[0.3em] uppercase", children: "Certificate" }), _jsxs("div", { className: "flex items-center justify-center gap-6", children: [_jsx("div", { className: "h-[1px] w-12 bg-[#C5A059]/40" }), _jsx("p", { className: "text-[#C5A059] italic text-lg tracking-widest", children: "of Distinction" }), _jsx("div", { className: "h-[1px] w-12 bg-[#C5A059]/40" })] })] }), _jsxs("div", { className: "space-y-12", children: [_jsxs("div", { className: "space-y-2", children: [_jsx("p", { className: "text-slate-500 uppercase tracking-[0.4em] text-[10px]", children: "This is to certify that" }), _jsx("h2", { className: "text-7xl font-bold text-white tracking-tight italic", children: studentName })] }), _jsxs("div", { className: "space-y-4", children: [_jsx("p", { className: "text-slate-500 uppercase tracking-[0.4em] text-[10px]", children: "has achieved mastery in" }), _jsx("h3", { className: "text-3xl font-light text-white tracking-[0.2em] uppercase", children: courseName })] })] })] }), _jsxs("div", { className: "mt-auto w-full flex justify-between items-end px-12 relative z-10 pb-4", children: [_jsxs("div", { className: "text-left", children: [_jsx("div", { className: "mb-4 h-12 flex items-end", children: signatureUrl ? (_jsx("img", { src: signatureUrl, alt: "Signature", className: "h-10 object-contain" })) : (_jsx("span", { className: "text-3xl opacity-60 italic font-signature text-[#C5A059]", children: instructorName })) }), _jsx("div", { className: "h-[1px] w-32 bg-[#C5A059]/40 mb-2" }), _jsx("p", { className: "font-bold text-white text-[10px] tracking-widest uppercase", children: instructorName }), _jsx("p", { className: "text-[8px] text-[#C5A059] uppercase tracking-[0.3em]", children: instructorTitle })] }), _jsxs("div", { className: "flex flex-col items-center", children: [_jsx("div", { className: "w-20 h-20 border border-[#C5A059]/40 rounded-full flex items-center justify-center rotate-45 mb-4", children: _jsx("div", { className: "w-16 h-16 border-4 border-[#C5A059]/20 rounded-full flex items-center justify-center -rotate-45", children: _jsx(Star, { className: "w-8 h-8 text-[#C5A059]" }) }) }), _jsxs("p", { className: "text-[8px] font-mono text-slate-600 tracking-tighter uppercase", children: ["Authentic ", certificateId] })] }), _jsxs("div", { className: "text-right", children: [_jsx("p", { className: "text-white text-[10px] font-bold tracking-widest uppercase mb-2", children: completionDate }), _jsx("div", { className: "h-[1px] w-32 bg-[#C5A059]/40 mb-2 ml-auto" }), _jsx("p", { className: "text-[8px] text-[#C5A059] uppercase tracking-[0.3em]", children: "Conferred Date" })] })] })] }));
|
|
14
|
+
return (_jsx("div", { className: cn("aspect-[1.414/1] w-full overflow-hidden shadow-2xl relative", "print:aspect-none print:w-full print:h-full print:shadow-none print:rounded-none", className), children: design === 'modern' ? renderModern() :
|
|
15
|
+
design === 'minimal' ? renderMinimal() :
|
|
16
|
+
design === 'premium' ? renderPremium() :
|
|
17
|
+
design === 'luxury' ? renderLuxury() :
|
|
18
|
+
renderClassic() }));
|
|
19
|
+
}
|
|
20
|
+
export function CertificateCard({ certificate, onDownload }) {
|
|
21
|
+
return (_jsxs(motion.div, { whileHover: { y: -5 }, className: "bg-white border border-slate-200 rounded-2xl p-6 flex flex-col gap-4 shadow-sm hover:shadow-xl transition-all group", children: [_jsxs("div", { className: "relative aspect-[1.414/1] rounded-lg overflow-hidden bg-slate-100 border border-slate-100 group-hover:border-slate-200 transition-colors", children: [_jsx("div", { className: "absolute inset-0 flex items-center justify-center opacity-40 group-hover:opacity-100 transition-opacity", children: _jsx(CertificateTemplate, { data: {
|
|
22
|
+
studentName: "Student Name",
|
|
23
|
+
courseName: certificate.courseName,
|
|
24
|
+
completionDate: certificate.date,
|
|
25
|
+
certificateId: certificate.id,
|
|
26
|
+
instructorName: certificate.instructor,
|
|
27
|
+
instructorTitle: "Lead Mentor",
|
|
28
|
+
institutionName: certificate.institutionName || 'Mindset Mastery Academy',
|
|
29
|
+
primaryColor: certificate.color || '#0F172A'
|
|
30
|
+
}, design: certificate.design || 'modern', className: "scale-[0.25] origin-center w-[400%] h-[400%]" }) }), _jsx("div", { className: "absolute inset-0 bg-black/0 group-hover:bg-black/5 transition-colors" })] }), _jsxs("div", { className: "flex-1", children: [_jsxs("div", { className: "flex items-center gap-2 mb-2", children: [_jsx("div", { className: "w-2 h-2 rounded-full bg-green-500" }), _jsx("span", { className: "text-[10px] font-bold text-slate-400 uppercase tracking-widest", children: "Verified Certificate" })] }), _jsx("h3", { className: "font-bold text-slate-900 text-lg leading-tight mb-1", children: certificate.courseName }), _jsxs("p", { className: "text-xs text-slate-500", children: ["Issued on ", certificate.date] })] }), _jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { variant: "outline", size: "sm", className: "flex-1 rounded-xl h-10 text-xs font-bold uppercase tracking-widest", onClick: () => window.open(`/demo/mindset-mastery/account/certificates/${certificate.id}`, '_blank'), children: "View" }), _jsx(Button, { size: "sm", className: "flex-1 rounded-xl h-10 text-xs font-bold uppercase tracking-widest bg-black text-white", onClick: () => onDownload(certificate.id), children: "Download" })] })] }));
|
|
31
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CertificateDesign, CertificateData } from './CertificateTemplates';
|
|
2
|
+
interface CertificateViewerProps {
|
|
3
|
+
certificateId?: string;
|
|
4
|
+
data?: CertificateData;
|
|
5
|
+
design?: CertificateDesign;
|
|
6
|
+
onClose?: () => void;
|
|
7
|
+
isStandalone?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function CertificateViewer({ certificateId, data: initialData, design: initialDesign, onClose, isStandalone }: CertificateViewerProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=CertificateViewer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CertificateViewer.d.ts","sourceRoot":"","sources":["../../../src/components/learning/CertificateViewer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAuB,iBAAiB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAOjG,UAAU,sBAAsB;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,YAAoB,EAAE,EAAE,sBAAsB,2CA2LnJ"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { CertificateTemplate } from './CertificateTemplates';
|
|
4
|
+
import { Button } from '../../components/ui/button';
|
|
5
|
+
import { Download, Printer, X, Share2, ArrowLeft, ShieldCheck } from 'lucide-react';
|
|
6
|
+
import { useState, useRef, useEffect } from 'react';
|
|
7
|
+
import { motion } from 'framer-motion';
|
|
8
|
+
import { cn } from '../../lib/utils';
|
|
9
|
+
export function CertificateViewer({ certificateId, data: initialData, design: initialDesign, onClose, isStandalone = false }) {
|
|
10
|
+
const [isPrinting, setIsPrinting] = useState(false);
|
|
11
|
+
const certificateRef = useRef(null);
|
|
12
|
+
// Mock data fetching if only ID is provided (for standalone route)
|
|
13
|
+
const [data, setData] = useState(initialData || null);
|
|
14
|
+
const [design, setDesign] = useState(initialDesign || 'modern');
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
if (certificateId && !initialData) {
|
|
17
|
+
// In a real app, fetch from API. For demo, we use mock data.
|
|
18
|
+
// This ensures the standalone page /account/certificates/[id] works.
|
|
19
|
+
const mockCerts = {
|
|
20
|
+
'CERT-8821': {
|
|
21
|
+
data: {
|
|
22
|
+
studentName: 'Kehinde Omotoso', // Usually comes from auth session
|
|
23
|
+
courseName: 'The Art of Focus',
|
|
24
|
+
completionDate: 'Dec 15, 2025',
|
|
25
|
+
certificateId: 'CERT-8821',
|
|
26
|
+
instructorName: 'Dr. Sarah Mitchell',
|
|
27
|
+
instructorTitle: 'Lead Mentor',
|
|
28
|
+
institutionName: 'Mindset Mastery Academy'
|
|
29
|
+
},
|
|
30
|
+
design: 'modern'
|
|
31
|
+
},
|
|
32
|
+
'CERT-7732': {
|
|
33
|
+
data: {
|
|
34
|
+
studentName: 'Kehinde Omotoso',
|
|
35
|
+
courseName: 'Strategic Planning Guide',
|
|
36
|
+
completionDate: 'Nov 20, 2025',
|
|
37
|
+
certificateId: 'CERT-7732',
|
|
38
|
+
instructorName: 'Marcus Aurelius',
|
|
39
|
+
instructorTitle: 'Lead Mentor',
|
|
40
|
+
institutionName: 'Global Vision Academy'
|
|
41
|
+
},
|
|
42
|
+
design: 'minimal'
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const cert = mockCerts[certificateId];
|
|
46
|
+
if (cert) {
|
|
47
|
+
setData(cert.data);
|
|
48
|
+
setDesign(cert.design);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}, [certificateId, initialData]);
|
|
52
|
+
const handlePrint = () => {
|
|
53
|
+
setIsPrinting(true);
|
|
54
|
+
setTimeout(() => {
|
|
55
|
+
window.print();
|
|
56
|
+
setIsPrinting(false);
|
|
57
|
+
}, 100);
|
|
58
|
+
};
|
|
59
|
+
const handleDownload = () => {
|
|
60
|
+
handlePrint(); // Print to PDF is the primary download method for high-fidelity
|
|
61
|
+
};
|
|
62
|
+
if (!data)
|
|
63
|
+
return (_jsx("div", { className: "min-h-screen bg-slate-50 flex items-center justify-center font-sans", children: _jsxs("div", { className: "text-center", children: [_jsx(ShieldCheck, { className: "w-12 h-12 text-slate-200 mx-auto mb-4" }), _jsx("p", { className: "text-slate-500 font-bold uppercase tracking-widest text-xs", children: "Verifying Credential..." })] }) }));
|
|
64
|
+
return (_jsxs("div", { className: cn("min-h-screen bg-slate-100 flex flex-col print:bg-white print:p-0 font-sans", !isStandalone && "fixed inset-0 z-[100] p-4 md:p-8"), children: [_jsxs("div", { className: "container mx-auto max-w-6xl py-6 flex items-center justify-between print:hidden", children: [_jsxs("div", { className: "flex items-center gap-4", children: [!isStandalone && (_jsx(Button, { variant: "ghost", onClick: onClose, className: "rounded-full w-10 h-10 p-0 bg-white shadow-sm border border-slate-200", children: _jsx(X, { className: "w-5 h-5" }) })), isStandalone && (_jsxs(Button, { variant: "ghost", onClick: () => window.history.back(), className: "gap-3 bg-white shadow-sm rounded-full px-6 border border-slate-200 font-bold text-xs uppercase tracking-widest", children: [_jsx(ArrowLeft, { className: "w-4 h-4" }), " Back to Account"] }))] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsxs(Button, { variant: "outline", className: "rounded-full gap-2 bg-white shadow-sm border-slate-200 font-bold text-xs uppercase tracking-widest px-6", onClick: handlePrint, children: [_jsx(Printer, { className: "w-4 h-4" }), " Print"] }), _jsxs(Button, { className: "rounded-full gap-2 bg-black text-white shadow-lg shadow-black/20 font-bold text-xs uppercase tracking-widest px-8", onClick: handleDownload, children: [_jsx(Download, { className: "w-4 h-4" }), " Download PDF"] })] })] }), _jsx("div", { className: "flex-1 flex items-center justify-center p-4 md:p-8 overflow-auto print:p-0 print:overflow-visible print:block", children: _jsx(motion.div, { layout: true, initial: { opacity: 0, scale: 0.98 }, animate: { opacity: 1, scale: 1 }, className: "w-full max-w-5xl shadow-[0_40px_100px_-20px_rgba(0,0,0,0.15)] print:shadow-none bg-white print:max-w-none print:w-[297mm] print:h-[210mm] print:mx-auto", ref: certificateRef, id: "certificate-to-print", children: _jsx(CertificateTemplate, { data: data, design: design }) }) }), _jsxs("div", { className: "container mx-auto max-w-6xl py-12 flex flex-col items-center gap-4 print:hidden", children: [_jsxs("div", { className: "flex items-center gap-3 text-slate-400", children: [_jsx(ShieldCheck, { className: "w-5 h-5" }), _jsx("p", { className: "text-xs font-black uppercase tracking-[0.3em]", children: "Verified Digital Achievement" })] }), _jsxs("p", { className: "text-[10px] font-mono text-slate-400 bg-white px-4 py-2 rounded-full border border-slate-100 shadow-sm", children: ["Credential ID: ", data.certificateId] }), _jsx("div", { className: "flex gap-4 mt-2", children: _jsx("button", { className: "text-slate-400 hover:text-blue-600 transition-colors", children: _jsx(Share2, { className: "w-5 h-5" }) }) })] }), _jsx("style", { jsx: true, global: true, children: `
|
|
65
|
+
@media print {
|
|
66
|
+
@page {
|
|
67
|
+
size: landscape;
|
|
68
|
+
margin: 0;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* Hide everything by default */
|
|
72
|
+
html, body {
|
|
73
|
+
margin: 0 !important;
|
|
74
|
+
padding: 0 !important;
|
|
75
|
+
width: 297mm !important;
|
|
76
|
+
height: 210mm !important;
|
|
77
|
+
overflow: hidden !important;
|
|
78
|
+
-webkit-print-color-adjust: exact !important;
|
|
79
|
+
print-color-adjust: exact !important;
|
|
80
|
+
background: white !important;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* Hide all elements except the certificate */
|
|
84
|
+
body > * {
|
|
85
|
+
display: none !important;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* Special container for printing */
|
|
89
|
+
#print-root {
|
|
90
|
+
display: block !important;
|
|
91
|
+
position: absolute !important;
|
|
92
|
+
left: 0 !important;
|
|
93
|
+
top: 0 !important;
|
|
94
|
+
width: 297mm !important;
|
|
95
|
+
height: 210mm !important;
|
|
96
|
+
margin: 0 !important;
|
|
97
|
+
padding: 0 !important;
|
|
98
|
+
background: white !important;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
#print-root > div {
|
|
102
|
+
width: 100% !important;
|
|
103
|
+
height: 100% !important;
|
|
104
|
+
box-shadow: none !important;
|
|
105
|
+
border: none !important;
|
|
106
|
+
border-radius: 0 !important;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
#print-root {
|
|
111
|
+
display: none;
|
|
112
|
+
}
|
|
113
|
+
` }), _jsx("div", { id: "print-root", children: _jsx("div", { children: _jsx(CertificateTemplate, { data: data, design: design }) }) })] }));
|
|
114
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
interface MentorshipProgram {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
mentorName: string;
|
|
5
|
+
mentorAvatar?: string;
|
|
6
|
+
startDate: string;
|
|
7
|
+
expiryDate: string;
|
|
8
|
+
sessionsTotal: number;
|
|
9
|
+
sessionsCompleted: number;
|
|
10
|
+
status: 'active' | 'expired' | 'completed';
|
|
11
|
+
lastSessionDate?: string;
|
|
12
|
+
nextSessionDate?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function MentorshipProgress({ programs }: {
|
|
15
|
+
programs: MentorshipProgram[];
|
|
16
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=MentorshipProgress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MentorshipProgress.d.ts","sourceRoot":"","sources":["../../../src/components/learning/MentorshipProgress.tsx"],"names":[],"mappings":"AASA,UAAU,iBAAiB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IAC3C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAA;CAAE,2CAkKjF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Button } from '../../components/ui/button';
|
|
4
|
+
import { Calendar, Clock, User, MessageSquare, Video, ExternalLink, AlertCircle } from 'lucide-react';
|
|
5
|
+
import Image from 'next/image';
|
|
6
|
+
import { cn } from '../../lib/utils';
|
|
7
|
+
import { motion } from 'framer-motion';
|
|
8
|
+
export function MentorshipProgress({ programs }) {
|
|
9
|
+
if (programs.length === 0) {
|
|
10
|
+
return (_jsxs("div", { className: "text-center py-12 bg-slate-50 rounded-3xl border-2 border-dashed border-slate-200", children: [_jsx("div", { className: "w-16 h-16 bg-white rounded-full flex items-center justify-center mx-auto mb-4 shadow-sm", children: _jsx(User, { className: "w-8 h-8 text-slate-300" }) }), _jsx("h3", { className: "text-lg font-bold text-slate-900", children: "No active mentorships" }), _jsx("p", { className: "text-slate-500 max-w-xs mx-auto mt-2", children: "Ready to level up? Browse our mentorship programs and connect with an expert." }), _jsx(Button, { className: "mt-6 rounded-full bg-black text-white px-8", children: "Browse Mentors" })] }));
|
|
11
|
+
}
|
|
12
|
+
return (_jsx("div", { className: "space-y-6", children: programs.map((program) => {
|
|
13
|
+
const isExpired = program.status === 'expired' || new Date(program.expiryDate) < new Date();
|
|
14
|
+
const progress = (program.sessionsCompleted / program.sessionsTotal) * 100;
|
|
15
|
+
// Calculate days remaining
|
|
16
|
+
const daysRemaining = Math.ceil((new Date(program.expiryDate).getTime() - new Date().getTime()) / (1000 * 60 * 60 * 24));
|
|
17
|
+
return (_jsxs(motion.div, { initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, className: cn("bg-white border-2 rounded-3xl overflow-hidden transition-all", isExpired ? "border-slate-100 opacity-75" : "border-slate-100 hover:border-blue-200 hover:shadow-xl shadow-sm"), children: [_jsx("div", { className: "p-6 md:p-8", children: _jsxs("div", { className: "flex flex-col md:flex-row gap-8", children: [_jsxs("div", { className: "flex flex-row md:flex-col items-center md:items-center gap-4 md:w-48 text-center border-b md:border-b-0 md:border-r border-slate-100 pb-6 md:pb-0 md:pr-8", children: [_jsx("div", { className: "relative w-20 h-20 md:w-24 md:h-24 rounded-full overflow-hidden border-4 border-slate-50 shadow-sm", children: _jsx(Image, { src: program.mentorAvatar || "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=150&h=150&fit=crop", alt: program.mentorName, fill: true, className: "object-cover", unoptimized: true }) }), _jsxs("div", { children: [_jsx("h4", { className: "font-bold text-slate-900 mt-2", children: program.mentorName }), _jsx("p", { className: "text-xs font-medium text-blue-600 uppercase tracking-widest", children: "Lead Mentor" })] })] }), _jsxs("div", { className: "flex-1 space-y-6", children: [_jsxs("div", { className: "flex flex-col md:flex-row justify-between items-start gap-4", children: [_jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-2 mb-1", children: [_jsx("span", { className: cn("px-2 py-0.5 rounded-full text-[10px] font-black uppercase tracking-widest", isExpired ? "bg-slate-100 text-slate-500" : "bg-blue-100 text-blue-700"), children: isExpired ? 'Completed' : 'Active Program' }), !isExpired && daysRemaining <= 7 && (_jsxs("span", { className: "flex items-center gap-1 text-orange-600 text-[10px] font-bold", children: [_jsx(AlertCircle, { className: "w-3 h-3" }), " Expiers Soon"] }))] }), _jsx("h3", { className: "text-2xl font-black text-slate-900", children: program.name })] }), _jsxs("div", { className: "text-right", children: [_jsx("p", { className: "text-xs font-bold text-slate-400 uppercase tracking-widest mb-1", children: "Expires On" }), _jsx("p", { className: cn("font-mono font-bold", isExpired ? "text-slate-400" : "text-slate-900"), children: new Date(program.expiryDate).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' }) })] })] }), _jsxs("div", { className: "space-y-2", children: [_jsxs("div", { className: "flex justify-between items-end text-sm", children: [_jsx("span", { className: "font-bold text-slate-600", children: "Session Progress" }), _jsxs("span", { className: "font-mono font-black text-slate-900", children: [program.sessionsCompleted, "/", program.sessionsTotal, " ", _jsx("span", { className: "text-slate-400 font-medium text-xs", children: "SESSIONS" })] })] }), _jsx("div", { className: "w-full h-3 bg-slate-100 rounded-full overflow-hidden", children: _jsx(motion.div, { initial: { width: 0 }, animate: { width: `${progress}%` }, transition: { duration: 1, ease: "easeOut" }, className: cn("h-full rounded-full transition-all", isExpired ? "bg-slate-300" : "bg-gradient-to-r from-blue-500 to-indigo-600") }) })] }), _jsxs("div", { className: "grid grid-cols-2 md:grid-cols-3 gap-4 pt-4 border-t border-slate-50", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "w-10 h-10 rounded-xl bg-slate-50 flex items-center justify-center text-slate-400", children: _jsx(Calendar, { className: "w-5 h-5" }) }), _jsxs("div", { children: [_jsx("p", { className: "text-[10px] font-black uppercase tracking-widest text-slate-400", children: "Next Session" }), _jsx("p", { className: "text-sm font-bold text-slate-700", children: program.nextSessionDate || 'TBD' })] })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "w-10 h-10 rounded-xl bg-slate-50 flex items-center justify-center text-slate-400", children: _jsx(MessageSquare, { className: "w-5 h-5" }) }), _jsxs("div", { children: [_jsx("p", { className: "text-[10px] font-black uppercase tracking-widest text-slate-400", children: "Messages" }), _jsx("p", { className: "text-sm font-bold text-slate-700", children: "12 New" })] })] }), _jsxs("div", { className: "flex items-center gap-3 hidden md:flex", children: [_jsx("div", { className: "w-10 h-10 rounded-xl bg-slate-50 flex items-center justify-center text-slate-400", children: _jsx(Clock, { className: "w-5 h-5" }) }), _jsxs("div", { children: [_jsx("p", { className: "text-[10px] font-black uppercase tracking-widest text-slate-400", children: "Enrollment" }), _jsx("p", { className: "text-sm font-bold text-slate-700", children: daysRemaining > 0 ? `${daysRemaining} days left` : 'Expired' })] })] })] })] })] }) }), _jsxs("div", { className: "bg-slate-50/50 border-t border-slate-100 px-8 py-4 flex flex-col sm:flex-row justify-between items-center gap-4", children: [_jsxs("div", { className: "flex items-center gap-4", children: [_jsxs("button", { className: "text-sm font-bold text-slate-500 hover:text-slate-900 transition-colors flex items-center gap-2", children: [_jsx(Video, { className: "w-4 h-4" }), " Room Link"] }), _jsx("div", { className: "w-[1px] h-4 bg-slate-200" }), _jsxs("button", { className: "text-sm font-bold text-slate-500 hover:text-slate-900 transition-colors flex items-center gap-2", children: [_jsx(ExternalLink, { className: "w-4 h-4" }), " Resources"] })] }), _jsxs("div", { className: "flex gap-3 w-full sm:w-auto", children: [_jsx(Button, { variant: "outline", className: "flex-1 sm:flex-none rounded-full px-6 font-bold h-11 border-slate-200", children: "Manage Schedule" }), _jsx(Button, { className: "flex-1 sm:flex-none rounded-full px-8 font-bold h-11 bg-black text-white hover:bg-slate-800 shadow-lg shadow-black/10", children: "Enter Session" })] })] })] }, program.id));
|
|
18
|
+
}) }));
|
|
19
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Address } from '../../lib/services/customer.service';
|
|
2
|
+
interface AddressSelectorProps {
|
|
3
|
+
addresses: Address[];
|
|
4
|
+
selectedAddressId: string | null;
|
|
5
|
+
onSelect: (addressId: string | null) => void;
|
|
6
|
+
isLoading?: boolean;
|
|
7
|
+
isAuthenticated: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function AddressSelector({ addresses, selectedAddressId, onSelect, isLoading, isAuthenticated, }: AddressSelectorProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=address-selector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"address-selector.d.ts","sourceRoot":"","sources":["../../../src/components/ui/address-selector.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAI1D,UAAU,oBAAoB;IAC5B,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,iBAAiB,EACjB,QAAQ,EACR,SAAiB,EACjB,eAAe,GAChB,EAAE,oBAAoB,2CA4EtB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { MapPin, Check } from 'lucide-react';
|
|
4
|
+
export function AddressSelector({ addresses, selectedAddressId, onSelect, isLoading = false, isAuthenticated, }) {
|
|
5
|
+
if (!isAuthenticated) {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
const formatAddress = (address) => {
|
|
9
|
+
const parts = [
|
|
10
|
+
address.address1,
|
|
11
|
+
address.address2,
|
|
12
|
+
`${address.city}, ${address.state} ${address.zipCode}`,
|
|
13
|
+
address.country,
|
|
14
|
+
].filter(Boolean);
|
|
15
|
+
return parts.join(', ');
|
|
16
|
+
};
|
|
17
|
+
if (isLoading) {
|
|
18
|
+
return (_jsx("div", { className: "mb-6 p-4 bg-gray-50 rounded-xl border border-gray-200", children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "w-5 h-5 border-2 border-gray-300 border-t-black rounded-full animate-spin" }), _jsx("span", { className: "text-sm font-medium text-gray-600", children: "Loading addresses..." })] }) }));
|
|
19
|
+
}
|
|
20
|
+
return (_jsxs("div", { className: "mb-6 space-y-3", children: [_jsx("label", { className: "text-sm font-bold text-gray-700 ml-1 block", children: "Select or Add Address" }), _jsxs("div", { className: "space-y-2", children: [addresses.length > 0 && (_jsxs("select", { value: selectedAddressId || '', onChange: (e) => onSelect(e.target.value || null), className: "w-full px-5 py-3.5 bg-white border-2 border-gray-100 rounded-xl focus:outline-none focus:ring-0 focus:border-black transition-all font-medium text-gray-900", children: [_jsx("option", { value: "", children: "Add new address" }), addresses.map((address) => (_jsxs("option", { value: address.id, children: [address.label ? `${address.label} - ` : '', formatAddress(address), address.isDefault ? ' (Default)' : ''] }, address.id)))] })), selectedAddressId && (_jsx("div", { className: "p-4 bg-green-50 border-2 border-green-200 rounded-xl", children: _jsxs("div", { className: "flex items-start gap-3", children: [_jsx(Check, { className: "w-5 h-5 text-green-600 mt-0.5 flex-shrink-0" }), _jsxs("div", { className: "flex-1", children: [_jsx("p", { className: "text-sm font-bold text-green-900 mb-1", children: addresses.find(a => a.id === selectedAddressId)?.label || 'Selected Address' }), _jsx("p", { className: "text-sm text-green-700", children: formatAddress(addresses.find(a => a.id === selectedAddressId)) })] })] }) })), addresses.length === 0 && (_jsx("div", { className: "p-4 bg-blue-50 border-2 border-blue-200 rounded-xl", children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx(MapPin, { className: "w-5 h-5 text-blue-600" }), _jsx("p", { className: "text-sm font-medium text-blue-900", children: "No saved addresses. Fill in the form below to add one." })] }) }))] })] }));
|
|
21
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface AvatarImageProps {
|
|
2
|
+
src?: string | null;
|
|
3
|
+
alt?: string;
|
|
4
|
+
size?: number;
|
|
5
|
+
className?: string;
|
|
6
|
+
fallbackIcon?: React.ReactNode;
|
|
7
|
+
fill?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function AvatarImage({ src, alt, size, className, fallbackIcon, fill, }: AvatarImageProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=avatar-image.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar-image.d.ts","sourceRoot":"","sources":["../../../src/components/ui/avatar-image.tsx"],"names":[],"mappings":"AAMA,UAAU,gBAAgB;IACxB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,EAC1B,GAAG,EACH,GAAe,EACf,IAAS,EACT,SAAS,EACT,YAAY,EACZ,IAAY,GACb,EAAE,gBAAgB,2CAwElB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useEffect, useRef } from 'react';
|
|
4
|
+
import { User } from 'lucide-react';
|
|
5
|
+
import { cn } from '../../lib/utils';
|
|
6
|
+
export function AvatarImage({ src, alt = 'Profile', size = 40, className, fallbackIcon, fill = false, }) {
|
|
7
|
+
const [imageError, setImageError] = useState(false);
|
|
8
|
+
const [imageLoaded, setImageLoaded] = useState(false);
|
|
9
|
+
const imageRef = useRef(null);
|
|
10
|
+
const prevSrcRef = useRef(src);
|
|
11
|
+
// Reset error and loading state when src changes
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
const currentSrcValue = typeof src === 'string' && src.trim() ? src : undefined;
|
|
14
|
+
const hasChanged = currentSrcValue !== prevSrcRef.current;
|
|
15
|
+
if (hasChanged) {
|
|
16
|
+
setImageError(false);
|
|
17
|
+
setImageLoaded(false);
|
|
18
|
+
prevSrcRef.current = currentSrcValue;
|
|
19
|
+
// Reset image ref to force reload
|
|
20
|
+
if (imageRef.current) {
|
|
21
|
+
imageRef.current.src = '';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}, [src]);
|
|
25
|
+
const handleLoad = () => {
|
|
26
|
+
setImageLoaded(true);
|
|
27
|
+
setImageError(false);
|
|
28
|
+
};
|
|
29
|
+
const handleError = () => {
|
|
30
|
+
console.warn('[AvatarImage] Image failed to load:', { src, alt });
|
|
31
|
+
setImageError(true);
|
|
32
|
+
setImageLoaded(false);
|
|
33
|
+
};
|
|
34
|
+
// If no src or error occurred, show fallback
|
|
35
|
+
if (!src || imageError) {
|
|
36
|
+
return (_jsx("div", { className: cn('flex items-center justify-center bg-gradient-to-br from-gray-100 to-gray-200 text-gray-400 rounded-full', className), style: fill ? undefined : { width: size, height: size }, children: fallbackIcon || _jsx(User, { className: "text-gray-400", style: { width: `${size / 2}px`, height: `${size / 2}px` } }) }));
|
|
37
|
+
}
|
|
38
|
+
return (_jsxs("div", { className: cn('relative overflow-hidden rounded-full', className), style: fill ? undefined : { width: size, height: size }, children: [!imageLoaded && (_jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-gradient-to-br from-gray-100 to-gray-200 z-10", children: _jsx(User, { className: "text-gray-400 animate-pulse", style: { width: `${size / 2}px`, height: `${size / 2}px` } }) })), _jsx("img", { ref: imageRef, src: src, alt: alt, className: cn('object-cover transition-opacity duration-200 rounded-full', imageLoaded ? 'opacity-100' : 'opacity-0', fill ? 'w-full h-full' : ''), style: fill ? undefined : { width: size, height: size }, onLoad: handleLoad, onError: handleError, loading: "lazy" })] }));
|
|
39
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare const DotPattern: ({ className, width, height, cx, cy, cr, color }: {
|
|
3
|
+
className?: string;
|
|
4
|
+
width?: number;
|
|
5
|
+
height?: number;
|
|
6
|
+
cx?: number;
|
|
7
|
+
cy?: number;
|
|
8
|
+
cr?: number;
|
|
9
|
+
color?: string;
|
|
10
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export declare const GridPattern: ({ className, width, height, strokeDasharray, stroke }: {
|
|
12
|
+
className?: string;
|
|
13
|
+
width?: number;
|
|
14
|
+
height?: number;
|
|
15
|
+
strokeDasharray?: string;
|
|
16
|
+
stroke?: string;
|
|
17
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export declare const WavePattern: ({ className, color }: {
|
|
19
|
+
className?: string;
|
|
20
|
+
color?: string;
|
|
21
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
export declare const CircleBlur: ({ className, color, style }: {
|
|
23
|
+
className?: string;
|
|
24
|
+
color?: string;
|
|
25
|
+
style?: React.CSSProperties;
|
|
26
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
//# sourceMappingURL=background-patterns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-patterns.d.ts","sourceRoot":"","sources":["../../../src/components/ui/background-patterns.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAO,MAAM,UAAU,GAAI;;;;;;;;CAAsF,4CAqBhH,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI;;;;;;CAAsF,4CA2BjH,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI;;;CAAqC,4CAahE,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,6BAA+D;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;CAAE,4CAK5J,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export const DotPattern = ({ className = "", width = 20, height = 20, cx = 1, cy = 1, cr = 1, color = "#CBD5E1" }) => (_jsxs("svg", { className: className, width: "100%", height: "100%", xmlns: "http://www.w3.org/2000/svg", children: [_jsx("defs", { children: _jsx("pattern", { id: "dot-pattern", x: "0", y: "0", width: width, height: height, patternUnits: "userSpaceOnUse", children: _jsx("circle", { cx: cx, cy: cy, r: cr, fill: color }) }) }), _jsx("rect", { width: "100%", height: "100%", fill: "url(#dot-pattern)" })] }));
|
|
3
|
+
export const GridPattern = ({ className = "", width = 40, height = 40, strokeDasharray = "0", stroke = "#E2E8F0" }) => (_jsxs("svg", { className: className, width: "100%", height: "100%", xmlns: "http://www.w3.org/2000/svg", children: [_jsx("defs", { children: _jsx("pattern", { id: "grid-pattern", x: "0", y: "0", width: width, height: height, patternUnits: "userSpaceOnUse", children: _jsx("path", { d: `M ${width} 0 L 0 0 0 ${height}`, fill: "none", stroke: stroke, strokeWidth: "1", strokeDasharray: strokeDasharray }) }) }), _jsx("rect", { width: "100%", height: "100%", fill: "url(#grid-pattern)" })] }));
|
|
4
|
+
export const WavePattern = ({ className = "", color = "#F1F5F9" }) => (_jsx("svg", { className: className, viewBox: "0 0 1440 320", xmlns: "http://www.w3.org/2000/svg", preserveAspectRatio: "none", children: _jsx("path", { fill: color, fillOpacity: "1", d: "M0,96L48,112C96,128,192,160,288,160C384,160,480,128,576,112C672,96,768,96,864,112C960,128,1056,160,1152,160C1248,160,1344,128,1392,112L1440,96L1440,320L1392,320C1344,320,1248,320,1152,320C1056,320,960,320,864,320C768,320,672,320,576,320C480,320,384,320,288,320C192,320,96,320,48,320L0,320Z" }) }));
|
|
5
|
+
export const CircleBlur = ({ className = "", color = "rgba(99, 102, 241, 0.15)", style }) => (_jsx("div", { className: `absolute rounded-full filter blur-3xl ${className}`, style: { backgroundColor: color, ...style } }));
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type VariantProps } from "class-variance-authority";
|
|
3
|
+
declare const badgeVariants: (props?: {
|
|
4
|
+
variant?: "default" | "destructive" | "outline" | "secondary";
|
|
5
|
+
} & import("class-variance-authority/dist/types").ClassProp) => string;
|
|
6
|
+
export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
|
|
7
|
+
}
|
|
8
|
+
declare function Badge({ className, variant, ...props }: BadgeProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export { Badge, badgeVariants };
|
|
10
|
+
//# sourceMappingURL=badge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../../src/components/ui/badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAIjE,QAAA,MAAM,aAAa;;sEAkBlB,CAAA;AAED,MAAM,WAAW,UACf,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAC1C,YAAY,CAAC,OAAO,aAAa,CAAC;CAAG;AAEzC,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,2CAI1D;AAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cva } from "class-variance-authority";
|
|
3
|
+
import { cn } from "../../lib/utils";
|
|
4
|
+
const badgeVariants = cva("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", {
|
|
5
|
+
variants: {
|
|
6
|
+
variant: {
|
|
7
|
+
default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
|
|
8
|
+
secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
|
9
|
+
destructive: "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
|
|
10
|
+
outline: "text-foreground",
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
defaultVariants: {
|
|
14
|
+
variant: "default",
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
function Badge({ className, variant, ...props }) {
|
|
18
|
+
return (_jsx("div", { className: cn(badgeVariants({ variant }), className), ...props }));
|
|
19
|
+
}
|
|
20
|
+
export { Badge, badgeVariants };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface BreadcrumbItem {
|
|
2
|
+
label: string;
|
|
3
|
+
href?: string;
|
|
4
|
+
}
|
|
5
|
+
interface BreadcrumbsProps {
|
|
6
|
+
items: BreadcrumbItem[];
|
|
7
|
+
variant?: 'default' | 'light';
|
|
8
|
+
}
|
|
9
|
+
export declare function Breadcrumbs({ items, variant }: BreadcrumbsProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=breadcrumbs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breadcrumbs.d.ts","sourceRoot":"","sources":["../../../src/components/ui/breadcrumbs.tsx"],"names":[],"mappings":"AAKA,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;CAC/B;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,OAAmB,EAAE,EAAE,gBAAgB,2CAwB3E"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import Link from 'next/link';
|
|
4
|
+
import { ChevronRight } from 'lucide-react';
|
|
5
|
+
export function Breadcrumbs({ items, variant = 'default' }) {
|
|
6
|
+
const isLight = variant === 'light';
|
|
7
|
+
return (_jsx("nav", { className: `flex items-center space-x-2 text-sm ${isLight ? 'text-white' : 'text-gray-600'} ${variant === 'default' ? 'mb-6' : ''}`, children: items.map((item, index) => (_jsxs("div", { className: "flex items-center space-x-2", children: [index > 0 && _jsx(ChevronRight, { className: `h-4 w-4 ${isLight ? 'text-white/70' : 'text-gray-400'}` }), item.href && index < items.length - 1 ? (_jsx(Link, { href: item.href, className: `transition-colors ${isLight ? 'hover:text-white/90 text-white' : 'hover:text-gray-900'}`, children: item.label })) : (_jsx("span", { className: index === items.length - 1 ? `${isLight ? 'text-white font-medium' : 'text-gray-900 font-medium'}` : '', children: item.label }))] }, index))) }));
|
|
8
|
+
}
|