@mohasinac/appkit 2.1.1 → 2.2.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 +36 -65
- package/dist/cli/index.d.ts +6 -9
- package/dist/cli/index.js +167 -141
- package/dist/client.d.ts +15 -0
- package/dist/client.js +15 -0
- package/dist/constants/api-endpoint-resolver.d.ts +34 -0
- package/dist/constants/api-endpoint-resolver.js +38 -0
- package/dist/constants/api-endpoints.d.ts +388 -0
- package/dist/constants/api-endpoints.js +342 -0
- package/dist/constants/cache-invalidation.d.ts +18 -0
- package/dist/constants/cache-invalidation.js +33 -0
- package/dist/constants/index.d.ts +14 -0
- package/dist/constants/index.js +14 -0
- package/dist/contracts/auth.d.ts +58 -0
- package/dist/contracts/auth.js +2 -0
- package/dist/contracts/client-auth.d.ts +22 -0
- package/dist/contracts/client-auth.js +17 -0
- package/dist/contracts/client-payment-gateway.d.ts +65 -0
- package/dist/contracts/client-payment-gateway.js +25 -0
- package/dist/contracts/client-realtime.d.ts +24 -0
- package/dist/contracts/client-realtime.js +18 -0
- package/dist/contracts/client-session.d.ts +37 -0
- package/dist/contracts/client-session.js +22 -0
- package/dist/contracts/config.d.ts +53 -0
- package/dist/contracts/config.js +2 -0
- package/dist/contracts/email.d.ts +30 -0
- package/dist/contracts/email.js +2 -0
- package/dist/contracts/extend.d.ts +270 -0
- package/dist/contracts/extend.js +75 -0
- package/dist/contracts/feature.d.ts +53 -0
- package/dist/contracts/feature.js +2 -0
- package/dist/contracts/field-ops.d.ts +31 -0
- package/dist/contracts/field-ops.js +35 -0
- package/dist/contracts/form.d.ts +89 -0
- package/dist/contracts/form.js +80 -0
- package/dist/contracts/index.d.ts +32 -728
- package/dist/contracts/index.js +13 -4
- package/dist/contracts/infra.d.ts +43 -0
- package/dist/contracts/infra.js +2 -0
- package/dist/contracts/payment.d.ts +39 -0
- package/dist/contracts/payment.js +2 -0
- package/dist/contracts/registry.d.ts +26 -0
- package/dist/contracts/registry.js +14 -0
- package/dist/contracts/repository.d.ts +127 -0
- package/dist/contracts/repository.js +28 -0
- package/dist/contracts/search.d.ts +44 -0
- package/dist/contracts/search.js +2 -0
- package/dist/contracts/shipping.d.ts +64 -0
- package/dist/contracts/shipping.js +2 -0
- package/dist/contracts/storage.d.ts +27 -0
- package/dist/contracts/storage.js +2 -0
- package/dist/contracts/style.d.ts +23 -0
- package/dist/contracts/style.js +2 -0
- package/dist/contracts/table.d.ts +104 -0
- package/dist/contracts/table.js +68 -0
- package/dist/core/CacheManager.d.ts +31 -0
- package/dist/core/CacheManager.js +63 -0
- package/dist/core/EventBus.d.ts +27 -0
- package/dist/core/EventBus.js +75 -0
- package/dist/core/Logger.d.ts +60 -0
- package/dist/core/Logger.js +153 -0
- package/dist/core/Queue.d.ts +43 -0
- package/dist/core/Queue.js +92 -0
- package/dist/core/StorageManager.d.ts +36 -0
- package/dist/core/StorageManager.js +159 -0
- package/dist/core/baseline-resolver.d.ts +52 -0
- package/dist/core/baseline-resolver.js +74 -0
- package/dist/core/browser.d.ts +18 -0
- package/dist/core/browser.js +9 -0
- package/dist/core/copilot-log.repository.d.ts +44 -0
- package/dist/core/copilot-log.repository.js +61 -0
- package/dist/core/hooks/useSiteSettings.d.ts +1 -0
- package/dist/core/hooks/useSiteSettings.js +11 -0
- package/dist/core/index.d.ts +31 -326
- package/dist/core/index.js +21 -7
- package/dist/core/integration-keys.d.ts +30 -0
- package/dist/core/integration-keys.js +55 -0
- package/dist/core/mutation-events.d.ts +147 -0
- package/dist/core/mutation-events.js +193 -0
- package/dist/core/newsletter-actions.d.ts +20 -0
- package/dist/core/newsletter-actions.js +28 -0
- package/dist/core/newsletter.repository.d.ts +55 -0
- package/dist/core/newsletter.repository.js +109 -0
- package/dist/core/server-action.d.ts +114 -0
- package/dist/core/server-action.js +119 -0
- package/dist/core/site-config.d.ts +33 -0
- package/dist/core/site-config.js +74 -0
- package/dist/core/unit-of-work.d.ts +32 -0
- package/dist/core/unit-of-work.js +114 -0
- package/dist/errors/api-error.d.ts +4 -0
- package/dist/errors/api-error.js +6 -0
- package/dist/errors/authentication-error.d.ts +4 -0
- package/dist/errors/authentication-error.js +6 -0
- package/dist/errors/authorization-error.d.ts +4 -0
- package/dist/errors/authorization-error.js +6 -0
- package/dist/errors/base-error.d.ts +14 -0
- package/dist/errors/base-error.js +22 -0
- package/dist/errors/database-error.d.ts +4 -0
- package/dist/errors/database-error.js +6 -0
- package/dist/errors/error-codes.d.ts +43 -0
- package/dist/errors/error-codes.js +93 -0
- package/dist/errors/error-handler.d.ts +16 -0
- package/dist/errors/error-handler.js +57 -0
- package/dist/errors/index.d.ts +11 -96
- package/dist/errors/index.js +15 -4
- package/dist/errors/messages.d.ts +469 -0
- package/dist/errors/messages.js +503 -0
- package/dist/errors/not-found-error.d.ts +4 -0
- package/dist/errors/not-found-error.js +6 -0
- package/dist/errors/validation-error.d.ts +4 -0
- package/dist/errors/validation-error.js +6 -0
- package/dist/features/about/components/AboutView.d.ts +38 -0
- package/dist/features/about/components/AboutView.js +5 -0
- package/dist/features/about/index.d.ts +2 -42
- package/dist/features/about/index.js +1 -280
- package/dist/features/account/actions/address-actions.d.ts +7 -0
- package/dist/features/account/actions/address-actions.js +24 -0
- package/dist/features/account/actions/index.d.ts +1 -0
- package/dist/features/account/actions/index.js +1 -0
- package/dist/features/account/address-validation.d.ts +20 -0
- package/dist/features/account/address-validation.js +35 -0
- package/dist/features/account/api/[userId]/addresses/route.d.ts +21 -0
- package/dist/features/account/api/[userId]/addresses/route.js +91 -0
- package/dist/features/account/api/[userId]/route.d.ts +23 -0
- package/dist/features/account/api/[userId]/route.js +67 -0
- package/dist/features/account/columns/index.d.ts +17 -0
- package/dist/features/account/columns/index.js +39 -0
- package/dist/features/account/components/AddressBook.d.ts +39 -0
- package/dist/features/account/components/AddressBook.js +14 -0
- package/dist/features/account/components/AddressForm.d.ts +39 -0
- package/dist/features/account/components/AddressForm.js +55 -0
- package/dist/features/account/components/AddressSelectorCreate.d.ts +16 -0
- package/dist/features/account/components/AddressSelectorCreate.js +40 -0
- package/dist/features/account/components/BecomeSellerView.d.ts +17 -0
- package/dist/features/account/components/BecomeSellerView.js +5 -0
- package/dist/features/account/components/ChatList.d.ts +14 -0
- package/dist/features/account/components/ChatList.js +10 -0
- package/dist/features/account/components/ChatWindow.d.ts +17 -0
- package/dist/features/account/components/ChatWindow.js +6 -0
- package/dist/features/account/components/MessagesView.d.ts +16 -0
- package/dist/features/account/components/MessagesView.js +5 -0
- package/dist/features/account/components/NotificationBell.d.ts +32 -0
- package/dist/features/account/components/NotificationBell.js +80 -0
- package/dist/features/account/components/OrderDetailView.d.ts +18 -0
- package/dist/features/account/components/OrderDetailView.js +12 -0
- package/dist/features/account/components/ProfileView.d.ts +12 -0
- package/dist/features/account/components/ProfileView.js +5 -0
- package/dist/features/account/components/UserAccountHubView.d.ts +13 -0
- package/dist/features/account/components/UserAccountHubView.js +5 -0
- package/dist/features/account/components/UserAddressesView.d.ts +13 -0
- package/dist/features/account/components/UserAddressesView.js +5 -0
- package/dist/features/account/components/UserNotificationsView.d.ts +15 -0
- package/dist/features/account/components/UserNotificationsView.js +12 -0
- package/dist/features/account/components/UserOffersView.d.ts +10 -0
- package/dist/features/account/components/UserOffersView.js +5 -0
- package/dist/features/account/components/UserOrderTrackView.d.ts +16 -0
- package/dist/features/account/components/UserOrderTrackView.js +8 -0
- package/dist/features/account/components/UserOrdersView.d.ts +12 -0
- package/dist/features/account/components/UserOrdersView.js +5 -0
- package/dist/features/account/components/UserSettingsView.d.ts +15 -0
- package/dist/features/account/components/UserSettingsView.js +12 -0
- package/dist/features/account/components/index.d.ts +34 -0
- package/dist/features/account/components/index.js +17 -0
- package/dist/features/account/constants/addresses.d.ts +13 -0
- package/dist/features/account/constants/addresses.js +43 -0
- package/dist/features/account/hooks/useAccount.d.ts +13 -0
- package/dist/features/account/hooks/useAccount.js +19 -0
- package/dist/features/account/hooks/useAddressForm.d.ts +24 -0
- package/dist/features/account/hooks/useAddressForm.js +58 -0
- package/dist/features/account/hooks/useAddressSelector.d.ts +25 -0
- package/dist/features/account/hooks/useAddressSelector.js +30 -0
- package/dist/features/account/hooks/useAddresses.d.ts +59 -0
- package/dist/features/account/hooks/useAddresses.js +73 -0
- package/dist/features/account/hooks/useNotifications.d.ts +23 -0
- package/dist/features/account/hooks/useNotifications.js +31 -0
- package/dist/features/account/hooks/useProfile.d.ts +25 -0
- package/dist/features/account/hooks/useProfile.js +24 -0
- package/dist/features/account/hooks/useProfileStats.d.ts +6 -0
- package/dist/features/account/hooks/useProfileStats.js +21 -0
- package/dist/features/account/hooks/usePublicProfile.d.ts +78 -0
- package/dist/features/account/hooks/usePublicProfile.js +51 -0
- package/dist/features/account/index.d.ts +15 -555
- package/dist/features/account/index.js +15 -1003
- package/dist/features/account/manifest.d.ts +2 -0
- package/dist/features/account/manifest.js +27 -0
- package/dist/features/account/messages/en.json +12 -0
- package/dist/features/account/repository/account.repository.d.ts +11 -0
- package/dist/features/account/repository/account.repository.js +20 -0
- package/dist/features/account/repository/address.repository.d.ts +17 -0
- package/dist/features/account/repository/address.repository.js +185 -0
- package/dist/features/account/schemas/firestore.d.ts +48 -0
- package/dist/features/account/schemas/firestore.js +59 -0
- package/dist/features/account/schemas/index.d.ts +198 -0
- package/dist/features/account/schemas/index.js +51 -0
- package/dist/features/account/server.d.ts +9 -0
- package/dist/features/account/server.js +9 -0
- package/dist/features/account/types/index.d.ts +83 -0
- package/dist/features/account/types/index.js +2 -0
- package/dist/features/admin/actions/admin-actions.d.ts +35 -0
- package/dist/features/admin/actions/admin-actions.js +174 -0
- package/dist/features/admin/actions/admin-coupon-actions.d.ts +17 -0
- package/dist/features/admin/actions/admin-coupon-actions.js +87 -0
- package/dist/features/admin/actions/admin-read-actions.d.ts +105 -0
- package/dist/features/admin/actions/admin-read-actions.js +172 -0
- package/dist/features/admin/actions/chat-actions.d.ts +29 -0
- package/dist/features/admin/actions/chat-actions.js +97 -0
- package/dist/features/admin/actions/index.d.ts +6 -0
- package/dist/features/admin/actions/index.js +6 -0
- package/dist/features/admin/actions/notification-actions.d.ts +31 -0
- package/dist/features/admin/actions/notification-actions.js +42 -0
- package/dist/features/admin/actions/site-settings-actions.d.ts +8 -0
- package/dist/features/admin/actions/site-settings-actions.js +16 -0
- package/dist/features/admin/api/bids/route.d.ts +14 -0
- package/dist/features/admin/api/bids/route.js +53 -0
- package/dist/features/admin/api/coupons/route.d.ts +14 -0
- package/dist/features/admin/api/coupons/route.js +53 -0
- package/dist/features/admin/api/products/route.d.ts +14 -0
- package/dist/features/admin/api/products/route.js +54 -0
- package/dist/features/admin/api/reviews/route.d.ts +14 -0
- package/dist/features/admin/api/reviews/route.js +53 -0
- package/dist/features/admin/components/AdminAnalyticsView.d.ts +29 -0
- package/dist/features/admin/components/AdminAnalyticsView.js +15 -0
- package/dist/features/admin/components/AdminBidsView.d.ts +4 -0
- package/dist/features/admin/components/AdminBidsView.js +5 -0
- package/dist/features/admin/components/AdminBlogView.d.ts +4 -0
- package/dist/features/admin/components/AdminBlogView.js +5 -0
- package/dist/features/admin/components/AdminCarouselView.d.ts +9 -0
- package/dist/features/admin/components/AdminCarouselView.js +5 -0
- package/dist/features/admin/components/AdminCategoriesView.d.ts +9 -0
- package/dist/features/admin/components/AdminCategoriesView.js +5 -0
- package/dist/features/admin/components/AdminCouponsView.d.ts +4 -0
- package/dist/features/admin/components/AdminCouponsView.js +5 -0
- package/dist/features/admin/components/AdminDashboardView.d.ts +16 -0
- package/dist/features/admin/components/AdminDashboardView.js +11 -0
- package/dist/features/admin/components/AdminFaqsView.d.ts +4 -0
- package/dist/features/admin/components/AdminFaqsView.js +5 -0
- package/dist/features/admin/components/AdminFeatureFlagsView.d.ts +9 -0
- package/dist/features/admin/components/AdminFeatureFlagsView.js +5 -0
- package/dist/features/admin/components/AdminFilterBar.d.ts +65 -0
- package/dist/features/admin/components/AdminFilterBar.js +22 -0
- package/dist/features/admin/components/AdminMediaView.d.ts +9 -0
- package/dist/features/admin/components/AdminMediaView.js +5 -0
- package/dist/features/admin/components/AdminNavigationView.d.ts +9 -0
- package/dist/features/admin/components/AdminNavigationView.js +5 -0
- package/dist/features/admin/components/AdminOrdersView.d.ts +4 -0
- package/dist/features/admin/components/AdminOrdersView.js +5 -0
- package/dist/features/admin/components/AdminPageHeader.d.ts +53 -0
- package/dist/features/admin/components/AdminPageHeader.js +12 -0
- package/dist/features/admin/components/AdminPayoutsView.d.ts +4 -0
- package/dist/features/admin/components/AdminPayoutsView.js +5 -0
- package/dist/features/admin/components/AdminProductsView.d.ts +4 -0
- package/dist/features/admin/components/AdminProductsView.js +5 -0
- package/dist/features/admin/components/AdminReviewsView.d.ts +7 -0
- package/dist/features/admin/components/AdminReviewsView.js +5 -0
- package/dist/features/admin/components/AdminSectionsView.d.ts +9 -0
- package/dist/features/admin/components/AdminSectionsView.js +5 -0
- package/dist/features/admin/components/AdminSessionsManager.d.ts +9 -0
- package/dist/features/admin/components/AdminSessionsManager.js +5 -0
- package/dist/features/admin/components/AdminSidebar.d.ts +9 -0
- package/dist/features/admin/components/AdminSidebar.js +6 -0
- package/dist/features/admin/components/AdminSiteView.d.ts +10 -0
- package/dist/features/admin/components/AdminSiteView.js +5 -0
- package/dist/features/admin/components/AdminStoresView.d.ts +4 -0
- package/dist/features/admin/components/AdminStoresView.js +5 -0
- package/dist/features/admin/components/AdminTopBar.d.ts +8 -0
- package/dist/features/admin/components/AdminTopBar.js +8 -0
- package/dist/features/admin/components/AdminUsersView.d.ts +4 -0
- package/dist/features/admin/components/AdminUsersView.js +5 -0
- package/dist/features/admin/components/DashboardStats.d.ts +8 -0
- package/dist/features/admin/components/DashboardStats.js +21 -0
- package/dist/features/admin/components/DataTable.d.ts +19 -0
- package/dist/features/admin/components/DataTable.js +7 -0
- package/dist/features/admin/components/DemoSeedView.d.ts +11 -0
- package/dist/features/admin/components/DemoSeedView.js +5 -0
- package/dist/features/admin/components/DrawerFormFooter.d.ts +54 -0
- package/dist/features/admin/components/DrawerFormFooter.js +6 -0
- package/dist/features/admin/components/QuickActionsPanel.d.ts +15 -0
- package/dist/features/admin/components/QuickActionsPanel.js +6 -0
- package/dist/features/admin/components/analytics/AdminAnalyticsCharts.d.ts +17 -0
- package/dist/features/admin/components/analytics/AdminAnalyticsCharts.js +33 -0
- package/dist/features/admin/components/analytics/AdminStatCard.d.ts +8 -0
- package/dist/features/admin/components/analytics/AdminStatCard.js +6 -0
- package/dist/features/admin/components/analytics/AdminTopProductsTable.d.ts +16 -0
- package/dist/features/admin/components/analytics/AdminTopProductsTable.js +6 -0
- package/dist/features/admin/components/analytics/index.d.ts +3 -0
- package/dist/features/admin/components/analytics/index.js +3 -0
- package/dist/features/admin/components/index.d.ts +62 -0
- package/dist/features/admin/components/index.js +32 -0
- package/dist/features/admin/hooks/useAdmin.d.ts +9 -0
- package/dist/features/admin/hooks/useAdmin.js +14 -0
- package/dist/features/admin/hooks/useChat.d.ts +24 -0
- package/dist/features/admin/hooks/useChat.js +97 -0
- package/dist/features/admin/index.d.ts +8 -554
- package/dist/features/admin/index.js +7 -2703
- package/dist/features/admin/manifest.d.ts +2 -0
- package/dist/features/admin/manifest.js +13 -0
- package/dist/features/admin/messages/en.json +13 -0
- package/dist/features/admin/permission-map.d.ts +3 -0
- package/dist/features/admin/permission-map.js +24 -0
- package/dist/features/admin/repository/chat.repository.d.ts +70 -0
- package/dist/features/admin/repository/chat.repository.js +216 -0
- package/dist/features/admin/repository/notification.repository.d.ts +64 -0
- package/dist/features/admin/repository/notification.repository.js +225 -0
- package/dist/features/admin/repository/site-settings.repository.d.ts +118 -0
- package/dist/features/admin/repository/site-settings.repository.js +214 -0
- package/dist/features/admin/schemas/firestore.d.ts +311 -0
- package/dist/features/admin/schemas/firestore.js +246 -0
- package/dist/features/admin/schemas/index.d.ts +1 -0
- package/dist/features/admin/schemas/index.js +1 -0
- package/dist/features/admin/server.d.ts +15 -0
- package/dist/features/admin/server.js +14 -0
- package/dist/features/admin/types/index.d.ts +61 -0
- package/dist/features/admin/types/index.js +1 -0
- package/dist/features/admin/types/product.types.d.ts +78 -0
- package/dist/features/admin/types/product.types.js +13 -0
- package/dist/features/auctions/actions/bid-actions.d.ts +22 -0
- package/dist/features/auctions/actions/bid-actions.js +106 -0
- package/dist/features/auctions/actions/index.d.ts +1 -0
- package/dist/features/auctions/actions/index.js +1 -0
- package/dist/features/auctions/api/route.d.ts +14 -0
- package/dist/features/auctions/api/route.js +67 -0
- package/dist/features/auctions/columns/index.d.ts +14 -0
- package/dist/features/auctions/columns/index.js +63 -0
- package/dist/features/auctions/components/AuctionCard.d.ts +26 -0
- package/dist/features/auctions/components/AuctionCard.js +35 -0
- package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +56 -0
- package/dist/features/auctions/components/MarketplaceAuctionCard.js +112 -0
- package/dist/features/auctions/components/MarketplaceAuctionGrid.d.ts +22 -0
- package/dist/features/auctions/components/MarketplaceAuctionGrid.js +37 -0
- package/dist/features/auctions/components/index.d.ts +3 -0
- package/dist/features/auctions/components/index.js +3 -0
- package/dist/features/auctions/hooks/useAuctions.d.ts +50 -0
- package/dist/features/auctions/hooks/useAuctions.js +93 -0
- package/dist/features/auctions/hooks/usePlaceBid.d.ts +24 -0
- package/dist/features/auctions/hooks/usePlaceBid.js +29 -0
- package/dist/features/auctions/hooks/useRealtimeBids.d.ts +38 -0
- package/dist/features/auctions/hooks/useRealtimeBids.js +66 -0
- package/dist/features/auctions/index.d.ts +8 -513
- package/dist/features/auctions/index.js +8 -1194
- package/dist/features/auctions/manifest.d.ts +2 -0
- package/dist/features/auctions/manifest.js +17 -0
- package/dist/features/auctions/messages/en.json +18 -0
- package/dist/features/auctions/repository/auctions.repository.d.ts +12 -0
- package/dist/features/auctions/repository/auctions.repository.js +42 -0
- package/dist/features/auctions/repository/bid.repository.d.ts +145 -0
- package/dist/features/auctions/repository/bid.repository.js +370 -0
- package/dist/features/auctions/schemas/firestore.d.ts +48 -0
- package/dist/features/auctions/schemas/firestore.js +50 -0
- package/dist/features/auctions/schemas/index.d.ts +155 -0
- package/dist/features/auctions/schemas/index.js +64 -0
- package/dist/features/auctions/server.d.ts +10 -0
- package/dist/features/auctions/server.js +10 -0
- package/dist/features/auctions/types/index.d.ts +73 -0
- package/dist/features/auctions/types/index.js +1 -0
- package/dist/features/auth/actions/index.d.ts +2 -0
- package/dist/features/auth/actions/index.js +2 -0
- package/dist/features/auth/actions/profile-actions.d.ts +27 -0
- package/dist/features/auth/actions/profile-actions.js +50 -0
- package/dist/features/auth/actions/realtime-token-actions.d.ts +11 -0
- package/dist/features/auth/actions/realtime-token-actions.js +31 -0
- package/dist/features/auth/api/route.d.ts +22 -0
- package/dist/features/auth/api/route.js +48 -0
- package/dist/features/auth/auth-helpers.d.ts +14 -0
- package/dist/features/auth/auth-helpers.js +68 -0
- package/dist/features/auth/components/AuthStatusPanel.d.ts +10 -0
- package/dist/features/auth/components/AuthStatusPanel.js +22 -0
- package/dist/features/auth/components/ForgotPasswordView.d.ts +18 -0
- package/dist/features/auth/components/ForgotPasswordView.js +15 -0
- package/dist/features/auth/components/Guards.d.ts +86 -0
- package/dist/features/auth/components/Guards.js +91 -0
- package/dist/features/auth/components/LoginForm.d.ts +36 -0
- package/dist/features/auth/components/LoginForm.js +18 -0
- package/dist/features/auth/components/RegisterForm.d.ts +36 -0
- package/dist/features/auth/components/RegisterForm.js +27 -0
- package/dist/features/auth/components/ResetPasswordView.d.ts +23 -0
- package/dist/features/auth/components/ResetPasswordView.js +22 -0
- package/dist/features/auth/components/SocialAuthButtons.d.ts +8 -0
- package/dist/features/auth/components/SocialAuthButtons.js +6 -0
- package/dist/features/auth/components/VerifyEmailView.d.ts +20 -0
- package/dist/features/auth/components/VerifyEmailView.js +8 -0
- package/dist/features/auth/components/index.d.ts +14 -0
- package/dist/features/auth/components/index.js +8 -0
- package/dist/features/auth/consent-otp.d.ts +52 -0
- package/dist/features/auth/consent-otp.js +120 -0
- package/dist/features/auth/hooks/useAuth.d.ts +81 -0
- package/dist/features/auth/hooks/useAuth.js +164 -0
- package/dist/features/auth/hooks/useAuthEvent.d.ts +22 -0
- package/dist/features/auth/hooks/useAuthEvent.js +31 -0
- package/dist/features/auth/hooks/useLogout.d.ts +16 -0
- package/dist/features/auth/hooks/useLogout.js +22 -0
- package/dist/features/auth/hooks/useRBAC.d.ts +38 -0
- package/dist/features/auth/hooks/useRBAC.js +80 -0
- package/dist/features/auth/index.d.ts +10 -315
- package/dist/features/auth/index.js +10 -1874
- package/dist/features/auth/manifest.d.ts +2 -0
- package/dist/features/auth/manifest.js +21 -0
- package/dist/features/auth/messages/en.json +13 -0
- package/dist/features/auth/repository/index.d.ts +4 -0
- package/dist/features/auth/repository/index.js +4 -0
- package/dist/features/auth/repository/session.repository.d.ts +44 -0
- package/dist/features/auth/repository/session.repository.js +246 -0
- package/dist/features/auth/repository/sms-counter.repository.d.ts +15 -0
- package/dist/features/auth/repository/sms-counter.repository.js +54 -0
- package/dist/features/auth/repository/token.repository.d.ts +38 -0
- package/dist/features/auth/repository/token.repository.js +186 -0
- package/dist/features/auth/repository/user.repository.d.ts +46 -0
- package/dist/features/auth/repository/user.repository.js +233 -0
- package/dist/features/auth/schemas/firestore.d.ts +351 -0
- package/dist/features/auth/schemas/firestore.js +272 -0
- package/dist/features/auth/schemas/index.d.ts +72 -0
- package/dist/features/auth/schemas/index.js +41 -0
- package/dist/features/auth/server.d.ts +15 -18
- package/dist/features/auth/server.js +21 -529
- package/dist/features/auth/token-helpers.d.ts +7 -0
- package/dist/features/auth/token-helpers.js +37 -0
- package/dist/features/auth/token-store.d.ts +39 -0
- package/dist/features/auth/token-store.js +120 -0
- package/dist/features/auth/types/index.d.ts +30 -0
- package/dist/features/auth/types/index.js +1 -0
- package/dist/features/before-after/api/[id]/route.d.ts +26 -0
- package/dist/features/before-after/api/[id]/route.js +88 -0
- package/dist/features/before-after/api/route.d.ts +13 -0
- package/dist/features/before-after/api/route.js +79 -0
- package/dist/features/before-after/columns/index.d.ts +17 -0
- package/dist/features/before-after/columns/index.js +50 -0
- package/dist/features/before-after/components/BeforeAfterGallery.d.ts +7 -0
- package/dist/features/before-after/components/BeforeAfterGallery.js +8 -0
- package/dist/features/before-after/components/BeforeAfterSlider.d.ts +7 -0
- package/dist/features/before-after/components/BeforeAfterSlider.js +27 -0
- package/dist/features/before-after/components/index.d.ts +2 -0
- package/dist/features/before-after/components/index.js +2 -0
- package/dist/features/before-after/hooks/useBeforeAfter.d.ts +15 -0
- package/dist/features/before-after/hooks/useBeforeAfter.js +25 -0
- package/dist/features/before-after/index.d.ts +6 -128
- package/dist/features/before-after/index.js +6 -546
- package/dist/features/before-after/manifest.d.ts +2 -0
- package/dist/features/before-after/manifest.js +10 -0
- package/dist/features/before-after/messages/en.json +8 -0
- package/dist/features/before-after/repository/before-after.repository.d.ts +13 -0
- package/dist/features/before-after/repository/before-after.repository.js +36 -0
- package/dist/features/before-after/schemas/index.d.ts +48 -0
- package/dist/features/before-after/schemas/index.js +24 -0
- package/dist/features/before-after/server.d.ts +7 -0
- package/dist/features/before-after/server.js +7 -0
- package/dist/features/before-after/types/index.d.ts +18 -0
- package/dist/features/before-after/types/index.js +1 -0
- package/dist/features/blog/actions/blog-actions.d.ts +302 -0
- package/dist/features/blog/actions/blog-actions.js +119 -0
- package/dist/features/blog/actions/index.d.ts +1 -0
- package/dist/features/blog/actions/index.js +1 -0
- package/dist/features/blog/api/[slug]/route.d.ts +23 -0
- package/dist/features/blog/api/[slug]/route.js +40 -0
- package/dist/features/blog/api/route.d.ts +12 -0
- package/dist/features/blog/api/route.js +64 -0
- package/dist/features/blog/columns/index.d.ts +27 -0
- package/dist/features/blog/columns/index.js +54 -0
- package/dist/features/blog/components/BlogFeaturedCard.d.ts +17 -0
- package/dist/features/blog/components/BlogFeaturedCard.js +24 -0
- package/dist/features/blog/components/BlogFilters.d.ts +106 -0
- package/dist/features/blog/components/BlogFilters.js +67 -0
- package/dist/features/blog/components/BlogListView.d.ts +29 -0
- package/dist/features/blog/components/BlogListView.js +38 -0
- package/dist/features/blog/components/BlogPostForm.d.ts +56 -0
- package/dist/features/blog/components/BlogPostForm.js +24 -0
- package/dist/features/blog/components/BlogPostView.d.ts +32 -0
- package/dist/features/blog/components/BlogPostView.js +39 -0
- package/dist/features/blog/components/index.d.ts +9 -0
- package/dist/features/blog/components/index.js +5 -0
- package/dist/features/blog/hooks/useBlog.d.ts +27 -0
- package/dist/features/blog/hooks/useBlog.js +51 -0
- package/dist/features/blog/index.d.ts +6 -492
- package/dist/features/blog/index.js +6 -4062
- package/dist/features/blog/manifest.d.ts +2 -0
- package/dist/features/blog/manifest.js +14 -0
- package/dist/features/blog/messages/en.json +14 -0
- package/dist/features/blog/repository/blog.repository.d.ts +79 -0
- package/dist/features/blog/repository/blog.repository.js +130 -0
- package/dist/features/blog/schemas/firestore.d.ts +87 -0
- package/dist/features/blog/schemas/firestore.js +99 -0
- package/dist/features/blog/schemas/index.d.ts +207 -0
- package/dist/features/blog/schemas/index.js +71 -0
- package/dist/features/blog/server.d.ts +8 -71
- package/dist/features/blog/server.js +10 -180
- package/dist/features/blog/types/index.d.ts +47 -0
- package/dist/features/blog/types/index.js +1 -0
- package/dist/features/cart/actions/cart-actions.d.ts +16 -0
- package/dist/features/cart/actions/cart-actions.js +52 -0
- package/dist/features/cart/actions/index.d.ts +1 -0
- package/dist/features/cart/actions/index.js +1 -0
- package/dist/features/cart/api/[id]/route.d.ts +21 -0
- package/dist/features/cart/api/[id]/route.js +62 -0
- package/dist/features/cart/api/route.d.ts +13 -0
- package/dist/features/cart/api/route.js +79 -0
- package/dist/features/cart/columns/index.d.ts +17 -0
- package/dist/features/cart/columns/index.js +53 -0
- package/dist/features/cart/components/CartDrawer.d.ts +27 -0
- package/dist/features/cart/components/CartDrawer.js +14 -0
- package/dist/features/cart/components/CartSummary.d.ts +19 -0
- package/dist/features/cart/components/CartSummary.js +5 -0
- package/dist/features/cart/components/CartView.d.ts +17 -0
- package/dist/features/cart/components/CartView.js +7 -0
- package/dist/features/cart/components/CheckoutAddressStep.d.ts +20 -0
- package/dist/features/cart/components/CheckoutAddressStep.js +12 -0
- package/dist/features/cart/components/CheckoutOtpModal.d.ts +15 -0
- package/dist/features/cart/components/CheckoutOtpModal.js +12 -0
- package/dist/features/cart/components/CheckoutSuccessView.d.ts +12 -0
- package/dist/features/cart/components/CheckoutSuccessView.js +9 -0
- package/dist/features/cart/components/CheckoutView.d.ts +15 -0
- package/dist/features/cart/components/CheckoutView.js +18 -0
- package/dist/features/cart/components/index.d.ts +13 -0
- package/dist/features/cart/components/index.js +7 -0
- package/dist/features/cart/hooks/useAddToCart.d.ts +27 -0
- package/dist/features/cart/hooks/useAddToCart.js +52 -0
- package/dist/features/cart/hooks/useCart.d.ts +17 -0
- package/dist/features/cart/hooks/useCart.js +24 -0
- package/dist/features/cart/hooks/useCartCount.d.ts +7 -0
- package/dist/features/cart/hooks/useCartCount.js +19 -0
- package/dist/features/cart/hooks/useCartQuery.d.ts +8 -0
- package/dist/features/cart/hooks/useCartQuery.js +11 -0
- package/dist/features/cart/hooks/useCheckoutReadQueries.d.ts +14 -0
- package/dist/features/cart/hooks/useCheckoutReadQueries.js +18 -0
- package/dist/features/cart/hooks/useGuestCart.d.ts +18 -0
- package/dist/features/cart/hooks/useGuestCart.js +32 -0
- package/dist/features/cart/hooks/useGuestCartMerge.d.ts +15 -0
- package/dist/features/cart/hooks/useGuestCartMerge.js +50 -0
- package/dist/features/cart/hooks/useOrder.d.ts +13 -0
- package/dist/features/cart/hooks/useOrder.js +24 -0
- package/dist/features/cart/index.d.ts +14 -451
- package/dist/features/cart/index.js +14 -1064
- package/dist/features/cart/manifest.d.ts +2 -0
- package/dist/features/cart/manifest.js +10 -0
- package/dist/features/cart/messages/en.json +10 -0
- package/dist/features/cart/repository/cart.repository.d.ts +23 -0
- package/dist/features/cart/repository/cart.repository.js +210 -0
- package/dist/features/cart/schemas/firestore.d.ts +83 -0
- package/dist/features/cart/schemas/firestore.js +36 -0
- package/dist/features/cart/schemas/index.d.ts +184 -0
- package/dist/features/cart/schemas/index.js +35 -0
- package/dist/features/cart/server.d.ts +8 -0
- package/dist/features/cart/server.js +8 -0
- package/dist/features/cart/types/index.d.ts +27 -0
- package/dist/features/cart/types/index.js +1 -0
- package/dist/features/cart/utils/guest-cart.d.ts +26 -0
- package/dist/features/cart/utils/guest-cart.js +83 -0
- package/dist/features/categories/actions/category-actions.d.ts +17 -0
- package/dist/features/categories/actions/category-actions.js +63 -0
- package/dist/features/categories/actions/index.d.ts +1 -0
- package/dist/features/categories/actions/index.js +1 -0
- package/dist/features/categories/api/[id]/route.d.ts +23 -0
- package/dist/features/categories/api/[id]/route.js +98 -0
- package/dist/features/categories/api/route.d.ts +19 -0
- package/dist/features/categories/api/route.js +200 -0
- package/dist/features/categories/columns/index.d.ts +15 -0
- package/dist/features/categories/columns/index.js +38 -0
- package/dist/features/categories/components/BreadcrumbTrail.d.ts +47 -0
- package/dist/features/categories/components/BreadcrumbTrail.js +36 -0
- package/dist/features/categories/components/CategoriesListView.d.ts +31 -0
- package/dist/features/categories/components/CategoriesListView.js +27 -0
- package/dist/features/categories/components/CategoryFilters.d.ts +68 -0
- package/dist/features/categories/components/CategoryFilters.js +75 -0
- package/dist/features/categories/components/CategoryForm.d.ts +24 -0
- package/dist/features/categories/components/CategoryForm.js +42 -0
- package/dist/features/categories/components/CategoryGrid.d.ts +14 -0
- package/dist/features/categories/components/CategoryGrid.js +14 -0
- package/dist/features/categories/components/CategoryProductsView.d.ts +49 -0
- package/dist/features/categories/components/CategoryProductsView.js +21 -0
- package/dist/features/categories/components/CategorySelectorCreate.d.ts +17 -0
- package/dist/features/categories/components/CategorySelectorCreate.js +57 -0
- package/dist/features/categories/components/CategorySortSelect.d.ts +9 -0
- package/dist/features/categories/components/CategorySortSelect.js +8 -0
- package/dist/features/categories/components/CategoryTableColumns.d.ts +30 -0
- package/dist/features/categories/components/CategoryTableColumns.js +54 -0
- package/dist/features/categories/components/CategoryTree.d.ts +15 -0
- package/dist/features/categories/components/CategoryTree.js +49 -0
- package/dist/features/categories/components/ConcernCard.d.ts +8 -0
- package/dist/features/categories/components/ConcernCard.js +5 -0
- package/dist/features/categories/components/ConcernGrid.d.ts +8 -0
- package/dist/features/categories/components/ConcernGrid.js +8 -0
- package/dist/features/categories/components/index.d.ts +22 -0
- package/dist/features/categories/components/index.js +12 -0
- package/dist/features/categories/hooks/useCategories.d.ts +26 -0
- package/dist/features/categories/hooks/useCategories.js +50 -0
- package/dist/features/categories/hooks/useCategorySelector.d.ts +26 -0
- package/dist/features/categories/hooks/useCategorySelector.js +42 -0
- package/dist/features/categories/index.d.ts +7 -461
- package/dist/features/categories/index.js +7 -2031
- package/dist/features/categories/manifest.d.ts +2 -0
- package/dist/features/categories/manifest.js +20 -0
- package/dist/features/categories/messages/en.json +14 -0
- package/dist/features/categories/repository/categories.repository.d.ts +31 -0
- package/dist/features/categories/repository/categories.repository.js +399 -0
- package/dist/features/categories/schemas/firestore.d.ts +140 -0
- package/dist/features/categories/schemas/firestore.js +189 -0
- package/dist/features/categories/schemas/index.d.ts +207 -0
- package/dist/features/categories/schemas/index.js +67 -0
- package/dist/features/categories/server.d.ts +7 -44
- package/dist/features/categories/server.js +10 -789
- package/dist/features/categories/types/index.d.ts +80 -0
- package/dist/features/categories/types/index.js +13 -0
- package/dist/features/checkout/actions/checkout-actions.d.ts +14 -0
- package/dist/features/checkout/actions/checkout-actions.js +91 -0
- package/dist/features/checkout/actions/index.d.ts +1 -0
- package/dist/features/checkout/actions/index.js +1 -0
- package/dist/features/checkout/components/CheckoutStepper.d.ts +10 -0
- package/dist/features/checkout/components/CheckoutStepper.js +15 -0
- package/dist/features/checkout/components/index.d.ts +1 -0
- package/dist/features/checkout/components/index.js +1 -0
- package/dist/features/checkout/hooks/useCheckout.d.ts +9 -0
- package/dist/features/checkout/hooks/useCheckout.js +24 -0
- package/dist/features/checkout/hooks/useCheckoutApi.d.ts +74 -0
- package/dist/features/checkout/hooks/useCheckoutApi.js +48 -0
- package/dist/features/checkout/hooks/usePaymentCheckout.d.ts +78 -0
- package/dist/features/checkout/hooks/usePaymentCheckout.js +178 -0
- package/dist/features/checkout/index.d.ts +8 -70
- package/dist/features/checkout/index.js +7 -192
- package/dist/features/checkout/manifest.d.ts +2 -0
- package/dist/features/checkout/manifest.js +17 -0
- package/dist/features/checkout/messages/en.json +10 -0
- package/dist/features/checkout/repository/failed-checkout.repository.d.ts +18 -0
- package/dist/features/checkout/repository/failed-checkout.repository.js +29 -0
- package/dist/features/checkout/schemas/firestore.d.ts +33 -0
- package/dist/features/checkout/schemas/firestore.js +6 -0
- package/dist/features/checkout/schemas/index.d.ts +1 -0
- package/dist/features/checkout/schemas/index.js +1 -0
- package/dist/features/checkout/server.d.ts +8 -0
- package/dist/features/checkout/server.js +8 -0
- package/dist/features/checkout/types/index.d.ts +46 -0
- package/dist/features/checkout/types/index.js +2 -0
- package/dist/features/cms/index.d.ts +1 -2
- package/dist/features/cms/index.js +5 -4
- package/dist/features/collections/api/[slug]/route.d.ts +26 -0
- package/dist/features/collections/api/[slug]/route.js +102 -0
- package/dist/features/collections/api/route.d.ts +13 -0
- package/dist/features/collections/api/route.js +79 -0
- package/dist/features/collections/columns/index.d.ts +17 -0
- package/dist/features/collections/columns/index.js +55 -0
- package/dist/features/collections/components/CollectionCard.d.ts +12 -0
- package/dist/features/collections/components/CollectionCard.js +9 -0
- package/dist/features/collections/components/index.d.ts +1 -0
- package/dist/features/collections/components/index.js +1 -0
- package/dist/features/collections/hooks/useCollections.d.ts +7 -0
- package/dist/features/collections/hooks/useCollections.js +34 -0
- package/dist/features/collections/index.d.ts +6 -148
- package/dist/features/collections/index.js +6 -378
- package/dist/features/collections/manifest.d.ts +2 -0
- package/dist/features/collections/manifest.js +16 -0
- package/dist/features/collections/messages/en.json +10 -0
- package/dist/features/collections/repository/collections.repository.d.ts +8 -0
- package/dist/features/collections/repository/collections.repository.js +16 -0
- package/dist/features/collections/schemas/index.d.ts +76 -0
- package/dist/features/collections/schemas/index.js +34 -0
- package/dist/features/collections/server.d.ts +7 -0
- package/dist/features/collections/server.js +7 -0
- package/dist/features/collections/types/index.d.ts +25 -0
- package/dist/features/collections/types/index.js +1 -0
- package/dist/features/consultation/api/[id]/route.d.ts +26 -0
- package/dist/features/consultation/api/[id]/route.js +88 -0
- package/dist/features/consultation/api/route.d.ts +13 -0
- package/dist/features/consultation/api/route.js +79 -0
- package/dist/features/consultation/columns/index.d.ts +17 -0
- package/dist/features/consultation/columns/index.js +54 -0
- package/dist/features/consultation/components/ConsultationForm.d.ts +8 -0
- package/dist/features/consultation/components/ConsultationForm.js +51 -0
- package/dist/features/consultation/components/index.d.ts +1 -0
- package/dist/features/consultation/components/index.js +1 -0
- package/dist/features/consultation/hooks/useBookConsultation.d.ts +8 -0
- package/dist/features/consultation/hooks/useBookConsultation.js +16 -0
- package/dist/features/consultation/index.d.ts +6 -172
- package/dist/features/consultation/index.js +6 -1084
- package/dist/features/consultation/manifest.d.ts +2 -0
- package/dist/features/consultation/manifest.js +12 -0
- package/dist/features/consultation/messages/en.json +25 -0
- package/dist/features/consultation/repository/consultations.repository.d.ts +12 -0
- package/dist/features/consultation/repository/consultations.repository.js +28 -0
- package/dist/features/consultation/schemas/index.d.ts +87 -0
- package/dist/features/consultation/schemas/index.js +47 -0
- package/dist/features/consultation/server.d.ts +7 -0
- package/dist/features/consultation/server.js +7 -0
- package/dist/features/consultation/types/index.d.ts +33 -0
- package/dist/features/consultation/types/index.js +1 -0
- package/dist/features/contact/components/ContactForm.d.ts +32 -0
- package/dist/features/contact/components/ContactForm.js +58 -0
- package/dist/features/contact/components/ContactInfoSidebar.d.ts +20 -0
- package/dist/features/contact/components/ContactInfoSidebar.js +6 -0
- package/dist/features/contact/components/index.d.ts +4 -0
- package/dist/features/contact/components/index.js +2 -0
- package/dist/features/contact/email.d.ts +61 -0
- package/dist/features/contact/email.js +345 -0
- package/dist/features/contact/hooks/useContactSubmit.d.ts +4 -0
- package/dist/features/contact/hooks/useContactSubmit.js +7 -0
- package/dist/features/contact/index.d.ts +2 -56
- package/dist/features/contact/index.js +2 -586
- package/dist/features/contact/server.d.ts +7 -0
- package/dist/features/contact/server.js +7 -0
- package/dist/features/copilot/components/AdminCopilotView.d.ts +21 -0
- package/dist/features/copilot/components/AdminCopilotView.js +29 -0
- package/dist/features/copilot/components/index.d.ts +2 -0
- package/dist/features/copilot/components/index.js +1 -0
- package/dist/features/copilot/hooks/useCopilotChat.d.ts +22 -0
- package/dist/features/copilot/hooks/useCopilotChat.js +57 -0
- package/dist/features/copilot/hooks/useCopilotFeedback.d.ts +15 -0
- package/dist/features/copilot/hooks/useCopilotFeedback.js +16 -0
- package/dist/features/copilot/index.d.ts +3 -47
- package/dist/features/copilot/index.js +3 -681
- package/dist/features/corporate/api/[id]/route.d.ts +26 -0
- package/dist/features/corporate/api/[id]/route.js +88 -0
- package/dist/features/corporate/api/route.d.ts +13 -0
- package/dist/features/corporate/api/route.js +79 -0
- package/dist/features/corporate/columns/index.d.ts +17 -0
- package/dist/features/corporate/columns/index.js +54 -0
- package/dist/features/corporate/components/CorporateInquiryForm.d.ts +7 -0
- package/dist/features/corporate/components/CorporateInquiryForm.js +36 -0
- package/dist/features/corporate/components/index.d.ts +1 -0
- package/dist/features/corporate/components/index.js +1 -0
- package/dist/features/corporate/hooks/useSubmitCorporateInquiry.d.ts +8 -0
- package/dist/features/corporate/hooks/useSubmitCorporateInquiry.js +16 -0
- package/dist/features/corporate/index.d.ts +6 -183
- package/dist/features/corporate/index.js +6 -782
- package/dist/features/corporate/manifest.d.ts +2 -0
- package/dist/features/corporate/manifest.js +12 -0
- package/dist/features/corporate/messages/en.json +26 -0
- package/dist/features/corporate/repository/corporate.repository.d.ts +12 -0
- package/dist/features/corporate/repository/corporate.repository.js +28 -0
- package/dist/features/corporate/schemas/index.d.ts +95 -0
- package/dist/features/corporate/schemas/index.js +50 -0
- package/dist/features/corporate/server.d.ts +7 -0
- package/dist/features/corporate/server.js +7 -0
- package/dist/features/corporate/types/index.d.ts +37 -0
- package/dist/features/corporate/types/index.js +1 -0
- package/dist/features/cron/firebase-adapters.d.ts +70 -0
- package/dist/features/cron/firebase-adapters.js +68 -0
- package/dist/features/cron/index.d.ts +5 -0
- package/dist/features/cron/index.js +7 -0
- package/dist/features/cron/jobs/auction-expiry.job.d.ts +27 -0
- package/dist/features/cron/jobs/auction-expiry.job.js +38 -0
- package/dist/features/cron/jobs/preorder-reminder.job.d.ts +14 -0
- package/dist/features/cron/jobs/preorder-reminder.job.js +40 -0
- package/dist/features/cron/registry.d.ts +45 -0
- package/dist/features/cron/registry.js +86 -0
- package/dist/features/cron/types.d.ts +66 -0
- package/dist/features/cron/types.js +9 -0
- package/dist/features/events/actions/event-actions.d.ts +92 -0
- package/dist/features/events/actions/event-actions.js +253 -0
- package/dist/features/events/actions/index.d.ts +1 -0
- package/dist/features/events/actions/index.js +1 -0
- package/dist/features/events/api/[id]/route.d.ts +24 -0
- package/dist/features/events/api/[id]/route.js +83 -0
- package/dist/features/events/api/route.d.ts +12 -0
- package/dist/features/events/api/route.js +88 -0
- package/dist/features/events/columns/index.d.ts +22 -0
- package/dist/features/events/columns/index.js +41 -0
- package/dist/features/events/components/AdminEventEntriesView.d.ts +17 -0
- package/dist/features/events/components/AdminEventEntriesView.js +10 -0
- package/dist/features/events/components/AdminEventsView.d.ts +11 -0
- package/dist/features/events/components/AdminEventsView.js +5 -0
- package/dist/features/events/components/EventBanner.d.ts +13 -0
- package/dist/features/events/components/EventBanner.js +48 -0
- package/dist/features/events/components/EventCard.d.ts +13 -0
- package/dist/features/events/components/EventCard.js +21 -0
- package/dist/features/events/components/EventDetailView.d.ts +15 -0
- package/dist/features/events/components/EventDetailView.js +11 -0
- package/dist/features/events/components/EventFilters.d.ts +105 -0
- package/dist/features/events/components/EventFilters.js +73 -0
- package/dist/features/events/components/EventFormDrawer.d.ts +22 -0
- package/dist/features/events/components/EventFormDrawer.js +6 -0
- package/dist/features/events/components/EventLeaderboard.d.ts +23 -0
- package/dist/features/events/components/EventLeaderboard.js +18 -0
- package/dist/features/events/components/EventParticipateView.d.ts +19 -0
- package/dist/features/events/components/EventParticipateView.js +13 -0
- package/dist/features/events/components/EventStatusBadge.d.ts +7 -0
- package/dist/features/events/components/EventStatusBadge.js +12 -0
- package/dist/features/events/components/EventsListView.d.ts +16 -0
- package/dist/features/events/components/EventsListView.js +21 -0
- package/dist/features/events/components/index.d.ts +19 -0
- package/dist/features/events/components/index.js +11 -0
- package/dist/features/events/hooks/useBulkEvent.d.ts +19 -0
- package/dist/features/events/hooks/useBulkEvent.js +36 -0
- package/dist/features/events/hooks/useEvent.d.ts +43 -0
- package/dist/features/events/hooks/useEvent.js +55 -0
- package/dist/features/events/hooks/useEvents.d.ts +27 -0
- package/dist/features/events/hooks/useEvents.js +38 -0
- package/dist/features/events/index.d.ts +8 -841
- package/dist/features/events/index.js +8 -1453
- package/dist/features/events/manifest.d.ts +2 -0
- package/dist/features/events/manifest.js +24 -0
- package/dist/features/events/messages/en.json +28 -0
- package/dist/features/events/repository/event-entry.repository.d.ts +17 -0
- package/dist/features/events/repository/event-entry.repository.js +115 -0
- package/dist/features/events/repository/events.repository.d.ts +18 -0
- package/dist/features/events/repository/events.repository.js +128 -0
- package/dist/features/events/schemas/firestore.d.ts +115 -0
- package/dist/features/events/schemas/firestore.js +77 -0
- package/dist/features/events/schemas/index.d.ts +383 -0
- package/dist/features/events/schemas/index.js +87 -0
- package/dist/features/events/server.d.ts +8 -37
- package/dist/features/events/server.js +11 -195
- package/dist/features/events/types/index.d.ts +133 -0
- package/dist/features/events/types/index.js +1 -0
- package/dist/features/faq/actions/faq-actions.d.ts +191 -0
- package/dist/features/faq/actions/faq-actions.js +103 -0
- package/dist/features/faq/actions/index.d.ts +1 -0
- package/dist/features/faq/actions/index.js +1 -0
- package/dist/features/faq/api/route.d.ts +11 -0
- package/dist/features/faq/api/route.js +50 -0
- package/dist/features/faq/columns/index.d.ts +15 -0
- package/dist/features/faq/columns/index.js +47 -0
- package/dist/features/faq/components/ContactCTA.d.ts +16 -0
- package/dist/features/faq/components/ContactCTA.js +6 -0
- package/dist/features/faq/components/FAQAccordion.d.ts +20 -0
- package/dist/features/faq/components/FAQAccordion.js +17 -0
- package/dist/features/faq/components/FAQCategorySidebar.d.ts +24 -0
- package/dist/features/faq/components/FAQCategorySidebar.js +15 -0
- package/dist/features/faq/components/FAQHelpfulButtons.d.ts +19 -0
- package/dist/features/faq/components/FAQHelpfulButtons.js +46 -0
- package/dist/features/faq/components/FAQPageContent.d.ts +54 -0
- package/dist/features/faq/components/FAQPageContent.js +67 -0
- package/dist/features/faq/components/FAQSortDropdown.d.ts +13 -0
- package/dist/features/faq/components/FAQSortDropdown.js +11 -0
- package/dist/features/faq/components/RelatedFAQs.d.ts +10 -0
- package/dist/features/faq/components/RelatedFAQs.js +9 -0
- package/dist/features/faq/components/index.d.ts +9 -0
- package/dist/features/faq/components/index.js +7 -0
- package/dist/features/faq/hooks/useFAQs.d.ts +22 -0
- package/dist/features/faq/hooks/useFAQs.js +42 -0
- package/dist/features/faq/hooks/useFaqList.d.ts +194 -0
- package/dist/features/faq/hooks/useFaqList.js +35 -0
- package/dist/features/faq/hooks/useFaqVote.d.ts +14 -0
- package/dist/features/faq/hooks/useFaqVote.js +10 -0
- package/dist/features/faq/index.d.ts +8 -619
- package/dist/features/faq/index.js +8 -1685
- package/dist/features/faq/manifest.d.ts +2 -0
- package/dist/features/faq/manifest.js +10 -0
- package/dist/features/faq/messages/en.json +14 -0
- package/dist/features/faq/repository/faqs.repository.d.ts +43 -0
- package/dist/features/faq/repository/faqs.repository.js +300 -0
- package/dist/features/faq/schemas/firestore.d.ts +63 -0
- package/dist/features/faq/schemas/firestore.js +115 -0
- package/dist/features/faq/schemas/index.d.ts +157 -0
- package/dist/features/faq/schemas/index.js +62 -0
- package/dist/features/faq/server.d.ts +9 -0
- package/dist/features/faq/server.js +9 -0
- package/dist/features/faq/types/index.d.ts +52 -0
- package/dist/features/faq/types/index.js +1 -0
- package/dist/features/filters/FilterFacetSection.d.ts +23 -0
- package/dist/features/filters/FilterFacetSection.js +39 -0
- package/dist/features/filters/FilterPanel.d.ts +61 -0
- package/dist/features/filters/FilterPanel.js +40 -0
- package/dist/features/filters/RangeFilter.d.ts +23 -0
- package/dist/features/filters/RangeFilter.js +28 -0
- package/dist/features/filters/SwitchFilter.d.ts +12 -0
- package/dist/features/filters/SwitchFilter.js +19 -0
- package/dist/features/filters/filterUtils.d.ts +11 -0
- package/dist/features/filters/filterUtils.js +13 -0
- package/dist/features/filters/index.d.ts +10 -136
- package/dist/features/filters/index.js +6 -1061
- package/dist/features/forms/Checkbox.d.ts +8 -0
- package/dist/features/forms/Checkbox.js +15 -0
- package/dist/features/forms/Form.d.ts +25 -0
- package/dist/features/forms/Form.js +38 -0
- package/dist/features/forms/Input.d.ts +10 -0
- package/dist/features/forms/Input.js +23 -0
- package/dist/features/forms/Radio.d.ts +17 -0
- package/dist/features/forms/Radio.js +19 -0
- package/dist/features/forms/Select.d.ts +13 -0
- package/dist/features/forms/Select.js +8 -0
- package/dist/features/forms/Slider.d.ts +20 -0
- package/dist/features/forms/Slider.js +22 -0
- package/dist/features/forms/Textarea.d.ts +8 -0
- package/dist/features/forms/Textarea.js +15 -0
- package/dist/features/forms/Toggle.d.ts +15 -0
- package/dist/features/forms/Toggle.js +48 -0
- package/dist/features/forms/index.d.ts +17 -129
- package/dist/features/forms/index.js +11 -915
- package/dist/features/forms/utils.d.ts +10 -0
- package/dist/features/forms/utils.js +13 -0
- package/dist/features/homepage/actions/carousel-actions.d.ts +37 -0
- package/dist/features/homepage/actions/carousel-actions.js +54 -0
- package/dist/features/homepage/actions/homepage-section-actions.d.ts +46 -0
- package/dist/features/homepage/actions/homepage-section-actions.js +55 -0
- package/dist/features/homepage/actions/index.d.ts +2 -0
- package/dist/features/homepage/actions/index.js +2 -0
- package/dist/features/homepage/api/[id]/route.d.ts +23 -0
- package/dist/features/homepage/api/[id]/route.js +100 -0
- package/dist/features/homepage/api/carousel/[id]/route.d.ts +23 -0
- package/dist/features/homepage/api/carousel/[id]/route.js +122 -0
- package/dist/features/homepage/api/carousel/route.d.ts +15 -0
- package/dist/features/homepage/api/carousel/route.js +154 -0
- package/dist/features/homepage/api/route.d.ts +14 -0
- package/dist/features/homepage/api/route.js +136 -0
- package/dist/features/homepage/api/sections/[id]/route.d.ts +26 -0
- package/dist/features/homepage/api/sections/[id]/route.js +88 -0
- package/dist/features/homepage/api/sections/route.d.ts +13 -0
- package/dist/features/homepage/api/sections/route.js +79 -0
- package/dist/features/homepage/components/AdvertisementBanner.d.ts +13 -0
- package/dist/features/homepage/components/AdvertisementBanner.js +23 -0
- package/dist/features/homepage/components/BeforeAfterCard.d.ts +10 -0
- package/dist/features/homepage/components/BeforeAfterCard.js +54 -0
- package/dist/features/homepage/components/CharacterHotspot.d.ts +24 -0
- package/dist/features/homepage/components/CharacterHotspot.js +373 -0
- package/dist/features/homepage/components/CharacterHotspotForm.d.ts +26 -0
- package/dist/features/homepage/components/CharacterHotspotForm.js +309 -0
- package/dist/features/homepage/components/CustomerReviewsSection.d.ts +13 -0
- package/dist/features/homepage/components/CustomerReviewsSection.js +14 -0
- package/dist/features/homepage/components/FAQSection.d.ts +26 -0
- package/dist/features/homepage/components/FAQSection.js +20 -0
- package/dist/features/homepage/components/FeaturedResultsSection.d.ts +17 -0
- package/dist/features/homepage/components/FeaturedResultsSection.js +18 -0
- package/dist/features/homepage/components/HeroBanner.d.ts +7 -0
- package/dist/features/homepage/components/HeroBanner.js +93 -0
- package/dist/features/homepage/components/HeroCarousel.d.ts +12 -0
- package/dist/features/homepage/components/HeroCarousel.js +157 -0
- package/dist/features/homepage/components/HeroSection.d.ts +7 -0
- package/dist/features/homepage/components/HeroSection.js +12 -0
- package/dist/features/homepage/components/HomepageSkeleton.d.ts +2 -0
- package/dist/features/homepage/components/HomepageSkeleton.js +14 -0
- package/dist/features/homepage/components/HomepageView.d.ts +25 -0
- package/dist/features/homepage/components/HomepageView.js +5 -0
- package/dist/features/homepage/components/HowItWorksInfoView.d.ts +36 -0
- package/dist/features/homepage/components/HowItWorksInfoView.js +8 -0
- package/dist/features/homepage/components/HowItWorksSection.d.ts +23 -0
- package/dist/features/homepage/components/HowItWorksSection.js +36 -0
- package/dist/features/homepage/components/NewsletterBanner.d.ts +22 -0
- package/dist/features/homepage/components/NewsletterBanner.js +34 -0
- package/dist/features/homepage/components/NewsletterSection.d.ts +10 -0
- package/dist/features/homepage/components/NewsletterSection.js +8 -0
- package/dist/features/homepage/components/PromoGrid.d.ts +9 -0
- package/dist/features/homepage/components/PromoGrid.js +35 -0
- package/dist/features/homepage/components/SectionCarousel.d.ts +75 -0
- package/dist/features/homepage/components/SectionCarousel.js +39 -0
- package/dist/features/homepage/components/SecurityHighlightsSection.d.ts +21 -0
- package/dist/features/homepage/components/SecurityHighlightsSection.js +36 -0
- package/dist/features/homepage/components/SiteFeaturesSection.d.ts +13 -0
- package/dist/features/homepage/components/SiteFeaturesSection.js +9 -0
- package/dist/features/homepage/components/StatsCounterSection.d.ts +14 -0
- package/dist/features/homepage/components/StatsCounterSection.js +32 -0
- package/dist/features/homepage/components/TestimonialsCarousel.d.ts +9 -0
- package/dist/features/homepage/components/TestimonialsCarousel.js +30 -0
- package/dist/features/homepage/components/TrustBadges.d.ts +5 -0
- package/dist/features/homepage/components/TrustBadges.js +54 -0
- package/dist/features/homepage/components/TrustFeaturesSection.d.ts +16 -0
- package/dist/features/homepage/components/TrustFeaturesSection.js +41 -0
- package/dist/features/homepage/components/TrustIndicatorsSection.d.ts +11 -0
- package/dist/features/homepage/components/TrustIndicatorsSection.js +9 -0
- package/dist/features/homepage/components/WelcomeSection.d.ts +20 -0
- package/dist/features/homepage/components/WelcomeSection.js +12 -0
- package/dist/features/homepage/components/WhatsAppCommunitySection.d.ts +15 -0
- package/dist/features/homepage/components/WhatsAppCommunitySection.js +21 -0
- package/dist/features/homepage/components/index.d.ts +52 -0
- package/dist/features/homepage/components/index.js +27 -0
- package/dist/features/homepage/hooks/useBlogArticles.d.ts +12 -0
- package/dist/features/homepage/hooks/useBlogArticles.js +31 -0
- package/dist/features/homepage/hooks/useFeaturedAuctions.d.ts +2 -0
- package/dist/features/homepage/hooks/useFeaturedAuctions.js +26 -0
- package/dist/features/homepage/hooks/useFeaturedPreOrders.d.ts +2 -0
- package/dist/features/homepage/hooks/useFeaturedPreOrders.js +26 -0
- package/dist/features/homepage/hooks/useFeaturedProducts.d.ts +4 -0
- package/dist/features/homepage/hooks/useFeaturedProducts.js +32 -0
- package/dist/features/homepage/hooks/useHeroCarousel.d.ts +9 -0
- package/dist/features/homepage/hooks/useHeroCarousel.js +17 -0
- package/dist/features/homepage/hooks/useHomepage.d.ts +11 -0
- package/dist/features/homepage/hooks/useHomepage.js +18 -0
- package/dist/features/homepage/hooks/useHomepageReviews.d.ts +7 -0
- package/dist/features/homepage/hooks/useHomepageReviews.js +16 -0
- package/dist/features/homepage/hooks/useHomepageSections.d.ts +2 -0
- package/dist/features/homepage/hooks/useHomepageSections.js +11 -0
- package/dist/features/homepage/hooks/useNewsletter.d.ts +14 -0
- package/dist/features/homepage/hooks/useNewsletter.js +10 -0
- package/dist/features/homepage/hooks/useTopBrands.d.ts +2 -0
- package/dist/features/homepage/hooks/useTopBrands.js +12 -0
- package/dist/features/homepage/hooks/useTopCategories.d.ts +4 -0
- package/dist/features/homepage/hooks/useTopCategories.js +13 -0
- package/dist/features/homepage/index.d.ts +13 -846
- package/dist/features/homepage/index.js +13 -6279
- package/dist/features/homepage/manifest.d.ts +2 -0
- package/dist/features/homepage/manifest.js +14 -0
- package/dist/features/homepage/messages/en.json +6 -0
- package/dist/features/homepage/repository/carousel.repository.d.ts +101 -0
- package/dist/features/homepage/repository/carousel.repository.js +252 -0
- package/dist/features/homepage/repository/homepage-sections.repository.d.ts +27 -0
- package/dist/features/homepage/repository/homepage-sections.repository.js +174 -0
- package/dist/features/homepage/repository/homepage.repository.d.ts +11 -0
- package/dist/features/homepage/repository/homepage.repository.js +25 -0
- package/dist/features/homepage/schemas/firestore.d.ts +251 -0
- package/dist/features/homepage/schemas/firestore.js +83 -0
- package/dist/features/homepage/schemas/index.d.ts +1 -0
- package/dist/features/homepage/schemas/index.js +1 -0
- package/dist/features/homepage/server.d.ts +10 -121
- package/dist/features/homepage/server.js +10 -1024
- package/dist/features/homepage/types/index.d.ts +163 -0
- package/dist/features/homepage/types/index.js +1 -0
- package/dist/features/layout/AutoBreadcrumbs.d.ts +15 -0
- package/dist/features/layout/AutoBreadcrumbs.js +84 -0
- package/dist/features/layout/BackToTop.d.ts +16 -0
- package/dist/features/layout/BackToTop.js +26 -0
- package/dist/features/layout/BottomActions.d.ts +1 -0
- package/dist/features/layout/BottomActions.js +153 -0
- package/dist/features/layout/BottomActionsContext.d.ts +107 -0
- package/dist/features/layout/BottomActionsContext.js +114 -0
- package/dist/features/layout/BottomNavItem.d.ts +28 -0
- package/dist/features/layout/BottomNavItem.js +28 -0
- package/dist/features/layout/BottomNavLayout.d.ts +14 -0
- package/dist/features/layout/BottomNavLayout.js +12 -0
- package/dist/features/layout/BottomNavbar.d.ts +46 -0
- package/dist/features/layout/BottomNavbar.js +19 -0
- package/dist/features/layout/BottomSheet.d.ts +29 -0
- package/dist/features/layout/BottomSheet.js +40 -0
- package/dist/features/layout/Breadcrumbs.d.ts +26 -0
- package/dist/features/layout/Breadcrumbs.js +25 -0
- package/dist/features/layout/DashboardNavContext.d.ts +19 -0
- package/dist/features/layout/DashboardNavContext.js +36 -0
- package/dist/features/layout/FooterLayout.d.ts +39 -0
- package/dist/features/layout/FooterLayout.js +12 -0
- package/dist/features/layout/LayoutClient.d.ts +11 -0
- package/dist/features/layout/LayoutClient.js +7 -0
- package/dist/features/layout/ListingLayout.d.ts +35 -0
- package/dist/features/layout/ListingLayout.js +104 -0
- package/dist/features/layout/LocaleSwitcher.d.ts +22 -0
- package/dist/features/layout/LocaleSwitcher.js +12 -0
- package/dist/features/layout/MainNavbar.d.ts +32 -0
- package/dist/features/layout/MainNavbar.js +29 -0
- package/dist/features/layout/NavItem.d.ts +19 -0
- package/dist/features/layout/NavItem.js +35 -0
- package/dist/features/layout/NavbarLayout.d.ts +27 -0
- package/dist/features/layout/NavbarLayout.js +23 -0
- package/dist/features/layout/SidebarLayout.d.ts +24 -0
- package/dist/features/layout/SidebarLayout.js +29 -0
- package/dist/features/layout/TitleBar.d.ts +18 -0
- package/dist/features/layout/TitleBar.js +19 -0
- package/dist/features/layout/TitleBarLayout.d.ts +48 -0
- package/dist/features/layout/TitleBarLayout.js +17 -0
- package/dist/features/layout/hooks/useBottomActions.d.ts +7 -0
- package/dist/features/layout/hooks/useBottomActions.js +28 -0
- package/dist/features/layout/index.d.ts +41 -315
- package/dist/features/layout/index.js +23 -1745
- package/dist/features/loyalty/api/admin/loyalty/grant/route.d.ts +12 -0
- package/dist/features/loyalty/api/admin/loyalty/grant/route.js +36 -0
- package/dist/features/loyalty/api/balance/route.d.ts +12 -0
- package/dist/features/loyalty/api/balance/route.js +39 -0
- package/dist/features/loyalty/api/earn/route.d.ts +12 -0
- package/dist/features/loyalty/api/earn/route.js +36 -0
- package/dist/features/loyalty/api/history/route.d.ts +12 -0
- package/dist/features/loyalty/api/history/route.js +56 -0
- package/dist/features/loyalty/api/redeem/route.d.ts +12 -0
- package/dist/features/loyalty/api/redeem/route.js +36 -0
- package/dist/features/loyalty/columns/index.d.ts +17 -0
- package/dist/features/loyalty/columns/index.js +40 -0
- package/dist/features/loyalty/components/CoinsDisplay.d.ts +11 -0
- package/dist/features/loyalty/components/CoinsDisplay.js +9 -0
- package/dist/features/loyalty/components/index.d.ts +1 -0
- package/dist/features/loyalty/components/index.js +1 -0
- package/dist/features/loyalty/hooks/useLoyaltyBalance.d.ts +4 -0
- package/dist/features/loyalty/hooks/useLoyaltyBalance.js +18 -0
- package/dist/features/loyalty/index.d.ts +6 -174
- package/dist/features/loyalty/index.js +6 -332
- package/dist/features/loyalty/manifest.d.ts +2 -0
- package/dist/features/loyalty/manifest.js +16 -0
- package/dist/features/loyalty/messages/en.json +19 -0
- package/dist/features/loyalty/repository/loyalty.repository.d.ts +8 -0
- package/dist/features/loyalty/repository/loyalty.repository.js +22 -0
- package/dist/features/loyalty/schemas/index.d.ts +85 -0
- package/dist/features/loyalty/schemas/index.js +40 -0
- package/dist/features/loyalty/server.d.ts +7 -0
- package/dist/features/loyalty/server.js +7 -0
- package/dist/features/loyalty/types/index.d.ts +31 -0
- package/dist/features/loyalty/types/index.js +1 -0
- package/dist/features/loyalty/types/loyalty-config.d.ts +7 -0
- package/dist/features/loyalty/types/loyalty-config.js +1 -0
- package/dist/features/loyalty/types/loyalty-math.d.ts +9 -0
- package/dist/features/loyalty/types/loyalty-math.js +27 -0
- package/dist/features/media/AvatarUpload.d.ts +22 -0
- package/dist/features/media/AvatarUpload.js +133 -0
- package/dist/features/media/MediaAvatar.d.ts +12 -0
- package/dist/features/media/MediaAvatar.js +13 -0
- package/dist/features/media/MediaImage.d.ts +28 -0
- package/dist/features/media/MediaImage.js +35 -0
- package/dist/features/media/MediaLightbox.d.ts +32 -0
- package/dist/features/media/MediaLightbox.js +245 -0
- package/dist/features/media/MediaVideo.d.ts +22 -0
- package/dist/features/media/MediaVideo.js +38 -0
- package/dist/features/media/components/MediaSlider.d.ts +10 -0
- package/dist/features/media/components/MediaSlider.js +12 -0
- package/dist/features/media/finalize.d.ts +11 -0
- package/dist/features/media/finalize.js +70 -0
- package/dist/features/media/hooks/useMedia.d.ts +198 -0
- package/dist/features/media/hooks/useMedia.js +78 -0
- package/dist/features/media/index.d.ts +30 -425
- package/dist/features/media/index.js +21 -3593
- package/dist/features/media/messages/en.json +63 -0
- package/dist/features/media/modals/ImageCropModal.d.ts +16 -0
- package/dist/features/media/modals/ImageCropModal.js +99 -0
- package/dist/features/media/modals/VideoThumbnailSelector.d.ts +10 -0
- package/dist/features/media/modals/VideoThumbnailSelector.js +51 -0
- package/dist/features/media/modals/VideoTrimModal.d.ts +11 -0
- package/dist/features/media/modals/VideoTrimModal.js +73 -0
- package/dist/features/media/server.d.ts +2 -0
- package/dist/features/media/server.js +2 -0
- package/dist/features/media/types/index.d.ts +29 -0
- package/dist/features/media/types/index.js +43 -0
- package/dist/features/media/upload/CameraCapture.d.ts +8 -0
- package/dist/features/media/upload/CameraCapture.js +59 -0
- package/dist/features/media/upload/ImageUpload.d.ts +14 -0
- package/dist/features/media/upload/ImageUpload.js +132 -0
- package/dist/features/media/upload/MediaUploadField.d.ts +31 -0
- package/dist/features/media/upload/MediaUploadField.js +204 -0
- package/dist/features/media/upload/MediaUploadList.d.ts +26 -0
- package/dist/features/media/upload/MediaUploadList.js +104 -0
- package/dist/features/orders/actions/index.d.ts +2 -0
- package/dist/features/orders/actions/index.js +2 -0
- package/dist/features/orders/actions/order-actions.d.ts +16 -0
- package/dist/features/orders/actions/order-actions.js +46 -0
- package/dist/features/orders/actions/refund-actions.d.ts +16 -0
- package/dist/features/orders/actions/refund-actions.js +88 -0
- package/dist/features/orders/api/track/[trackingId]/route.d.ts +17 -0
- package/dist/features/orders/api/track/[trackingId]/route.js +30 -0
- package/dist/features/orders/columns/index.d.ts +15 -0
- package/dist/features/orders/columns/index.js +34 -0
- package/dist/features/orders/components/MarketplaceOrderCard.d.ts +37 -0
- package/dist/features/orders/components/MarketplaceOrderCard.js +52 -0
- package/dist/features/orders/components/OrderFilters.d.ts +82 -0
- package/dist/features/orders/components/OrderFilters.js +106 -0
- package/dist/features/orders/components/OrdersList.d.ts +18 -0
- package/dist/features/orders/components/OrdersList.js +37 -0
- package/dist/features/orders/components/index.d.ts +4 -0
- package/dist/features/orders/components/index.js +3 -0
- package/dist/features/orders/hooks/useOrders.d.ts +32 -0
- package/dist/features/orders/hooks/useOrders.js +57 -0
- package/dist/features/orders/index.d.ts +7 -370
- package/dist/features/orders/index.js +7 -863
- package/dist/features/orders/manifest.d.ts +2 -0
- package/dist/features/orders/manifest.js +18 -0
- package/dist/features/orders/messages/en.json +15 -0
- package/dist/features/orders/repository/orders.repository.d.ts +188 -0
- package/dist/features/orders/repository/orders.repository.js +300 -0
- package/dist/features/orders/schemas/firestore.d.ts +129 -0
- package/dist/features/orders/schemas/firestore.js +96 -0
- package/dist/features/orders/schemas/index.d.ts +217 -0
- package/dist/features/orders/schemas/index.js +76 -0
- package/dist/features/orders/server.d.ts +9 -0
- package/dist/features/orders/server.js +10 -0
- package/dist/features/orders/types/index.d.ts +69 -0
- package/dist/features/orders/types/index.js +2 -0
- package/dist/features/orders/utils/order-splitter.d.ts +14 -0
- package/dist/features/orders/utils/order-splitter.js +29 -0
- package/dist/features/payments/columns/index.d.ts +17 -0
- package/dist/features/payments/columns/index.js +45 -0
- package/dist/features/payments/hooks/usePaymentEvent.d.ts +17 -0
- package/dist/features/payments/hooks/usePaymentEvent.js +26 -0
- package/dist/features/payments/hooks/usePayments.d.ts +10 -0
- package/dist/features/payments/hooks/usePayments.js +19 -0
- package/dist/features/payments/index.d.ts +6 -141
- package/dist/features/payments/index.js +6 -331
- package/dist/features/payments/manifest.d.ts +2 -0
- package/dist/features/payments/manifest.js +12 -0
- package/dist/features/payments/messages/en.json +11 -0
- package/dist/features/payments/repository/payments.repository.d.ts +15 -0
- package/dist/features/payments/repository/payments.repository.js +36 -0
- package/dist/features/payments/repository/payout.repository.d.ts +111 -0
- package/dist/features/payments/repository/payout.repository.js +202 -0
- package/dist/features/payments/schemas/firestore.d.ts +74 -0
- package/dist/features/payments/schemas/firestore.js +65 -0
- package/dist/features/payments/schemas/index.d.ts +77 -0
- package/dist/features/payments/schemas/index.js +67 -0
- package/dist/features/payments/server.d.ts +8 -0
- package/dist/features/payments/server.js +8 -0
- package/dist/features/payments/types/index.d.ts +36 -0
- package/dist/features/payments/types/index.js +2 -0
- package/dist/features/pre-orders/api/[id]/route.d.ts +26 -0
- package/dist/features/pre-orders/api/[id]/route.js +88 -0
- package/dist/features/pre-orders/api/[slug]/route.d.ts +16 -0
- package/dist/features/pre-orders/api/[slug]/route.js +41 -0
- package/dist/features/pre-orders/api/admin/[id]/route.d.ts +21 -0
- package/dist/features/pre-orders/api/admin/[id]/route.js +65 -0
- package/dist/features/pre-orders/api/admin/route.d.ts +12 -0
- package/dist/features/pre-orders/api/admin/route.js +56 -0
- package/dist/features/pre-orders/api/route.d.ts +13 -0
- package/dist/features/pre-orders/api/route.js +77 -0
- package/dist/features/pre-orders/columns/index.d.ts +17 -0
- package/dist/features/pre-orders/columns/index.js +68 -0
- package/dist/features/pre-orders/components/MarketplacePreorderCard.d.ts +24 -0
- package/dist/features/pre-orders/components/MarketplacePreorderCard.js +53 -0
- package/dist/features/pre-orders/components/PreOrderBadge.d.ts +14 -0
- package/dist/features/pre-orders/components/PreOrderBadge.js +17 -0
- package/dist/features/pre-orders/components/PreorderCard.d.ts +12 -0
- package/dist/features/pre-orders/components/PreorderCard.js +27 -0
- package/dist/features/pre-orders/components/index.d.ts +2 -0
- package/dist/features/pre-orders/components/index.js +2 -0
- package/dist/features/pre-orders/hooks/usePreOrders.d.ts +7 -0
- package/dist/features/pre-orders/hooks/usePreOrders.js +34 -0
- package/dist/features/pre-orders/index.d.ts +6 -170
- package/dist/features/pre-orders/index.js +6 -538
- package/dist/features/pre-orders/manifest.d.ts +2 -0
- package/dist/features/pre-orders/manifest.js +17 -0
- package/dist/features/pre-orders/messages/en.json +13 -0
- package/dist/features/pre-orders/repository/pre-orders.repository.d.ts +14 -0
- package/dist/features/pre-orders/repository/pre-orders.repository.js +44 -0
- package/dist/features/pre-orders/repository/preorders.repository.d.ts +8 -0
- package/dist/features/pre-orders/repository/preorders.repository.js +21 -0
- package/dist/features/pre-orders/schemas/index.d.ts +79 -0
- package/dist/features/pre-orders/schemas/index.js +27 -0
- package/dist/features/pre-orders/server.d.ts +5 -14
- package/dist/features/pre-orders/server.js +8 -106
- package/dist/features/pre-orders/types/index.d.ts +29 -0
- package/dist/features/pre-orders/types/index.js +12 -0
- package/dist/features/products/actions/index.d.ts +1 -0
- package/dist/features/products/actions/index.js +1 -0
- package/dist/features/products/actions/product-actions.d.ts +26 -0
- package/dist/features/products/actions/product-actions.js +111 -0
- package/dist/features/products/api/[id]/route.d.ts +29 -0
- package/dist/features/products/api/[id]/route.js +137 -0
- package/dist/features/products/api/route.d.ts +19 -0
- package/dist/features/products/api/route.js +214 -0
- package/dist/features/products/columns/index.d.ts +64 -0
- package/dist/features/products/columns/index.js +85 -0
- package/dist/features/products/columns/productTableColumns.d.ts +27 -0
- package/dist/features/products/columns/productTableColumns.js +88 -0
- package/dist/features/products/components/AuctionDetailView.d.ts +13 -0
- package/dist/features/products/components/AuctionDetailView.js +9 -0
- package/dist/features/products/components/AuctionsView.d.ts +6 -0
- package/dist/features/products/components/AuctionsView.js +5 -0
- package/dist/features/products/components/BidHistory.d.ts +28 -0
- package/dist/features/products/components/BidHistory.js +18 -0
- package/dist/features/products/components/BuyBar.d.ts +21 -0
- package/dist/features/products/components/BuyBar.js +20 -0
- package/dist/features/products/components/InteractiveProductCard.d.ts +19 -0
- package/dist/features/products/components/InteractiveProductCard.js +18 -0
- package/dist/features/products/components/MakeOfferForm.d.ts +20 -0
- package/dist/features/products/components/MakeOfferForm.js +8 -0
- package/dist/features/products/components/PlaceBidForm.d.ts +20 -0
- package/dist/features/products/components/PlaceBidForm.js +6 -0
- package/dist/features/products/components/PreOrderDetailView.d.ts +14 -0
- package/dist/features/products/components/PreOrderDetailView.js +9 -0
- package/dist/features/products/components/PreOrdersView.d.ts +6 -0
- package/dist/features/products/components/PreOrdersView.js +5 -0
- package/dist/features/products/components/ProductDetailView.d.ts +11 -0
- package/dist/features/products/components/ProductDetailView.js +9 -0
- package/dist/features/products/components/ProductFeatureBadges.d.ts +32 -0
- package/dist/features/products/components/ProductFeatureBadges.js +103 -0
- package/dist/features/products/components/ProductFilters.d.ts +90 -0
- package/dist/features/products/components/ProductFilters.js +105 -0
- package/dist/features/products/components/ProductForm.d.ts +47 -0
- package/dist/features/products/components/ProductForm.js +120 -0
- package/dist/features/products/components/ProductGrid.d.ts +69 -0
- package/dist/features/products/components/ProductGrid.js +92 -0
- package/dist/features/products/components/ProductInfo.d.ts +20 -0
- package/dist/features/products/components/ProductInfo.js +4 -0
- package/dist/features/products/components/ProductTabs.d.ts +21 -0
- package/dist/features/products/components/ProductTabs.js +22 -0
- package/dist/features/products/components/ProductsView.d.ts +6 -0
- package/dist/features/products/components/ProductsView.js +5 -0
- package/dist/features/products/components/RelatedProducts.d.ts +16 -0
- package/dist/features/products/components/RelatedProducts.js +12 -0
- package/dist/features/products/components/index.d.ts +34 -0
- package/dist/features/products/components/index.js +18 -0
- package/dist/features/products/hooks/useBrands.d.ts +9 -0
- package/dist/features/products/hooks/useBrands.js +15 -0
- package/dist/features/products/hooks/useProductDetail.d.ts +15 -0
- package/dist/features/products/hooks/useProductDetail.js +29 -0
- package/dist/features/products/hooks/useProducts.d.ts +43 -0
- package/dist/features/products/hooks/useProducts.js +67 -0
- package/dist/features/products/hooks/useRelatedProducts.d.ts +2 -0
- package/dist/features/products/hooks/useRelatedProducts.js +17 -0
- package/dist/features/products/index.d.ts +10 -1066
- package/dist/features/products/index.js +10 -2475
- package/dist/features/products/manifest.d.ts +2 -0
- package/dist/features/products/manifest.js +16 -0
- package/dist/features/products/messages/en.json +11 -0
- package/dist/features/products/repository/products.repository.d.ts +213 -0
- package/dist/features/products/repository/products.repository.js +300 -0
- package/dist/features/products/schemas/firestore.d.ts +125 -0
- package/dist/features/products/schemas/firestore.js +149 -0
- package/dist/features/products/schemas/index.d.ts +400 -0
- package/dist/features/products/schemas/index.js +173 -0
- package/dist/features/products/server.d.ts +7 -49
- package/dist/features/products/server.js +10 -803
- package/dist/features/products/types/index.d.ts +122 -0
- package/dist/features/products/types/index.js +1 -0
- package/dist/features/products/utils/listing-type.d.ts +2 -0
- package/dist/features/products/utils/listing-type.js +9 -0
- package/dist/features/promotions/actions/coupon-actions.d.ts +28 -0
- package/dist/features/promotions/actions/coupon-actions.js +23 -0
- package/dist/features/promotions/actions/index.d.ts +3 -0
- package/dist/features/promotions/actions/index.js +3 -0
- package/dist/features/promotions/actions/promotions-actions.d.ts +18 -0
- package/dist/features/promotions/actions/promotions-actions.js +37 -0
- package/dist/features/promotions/actions/seller-coupon-actions.d.ts +41 -0
- package/dist/features/promotions/actions/seller-coupon-actions.js +92 -0
- package/dist/features/promotions/api/route.d.ts +21 -0
- package/dist/features/promotions/api/route.js +85 -0
- package/dist/features/promotions/columns/index.d.ts +12 -0
- package/dist/features/promotions/columns/index.js +45 -0
- package/dist/features/promotions/components/CouponCard.d.ts +16 -0
- package/dist/features/promotions/components/CouponCard.js +20 -0
- package/dist/features/promotions/components/PromotionsView.d.ts +43 -0
- package/dist/features/promotions/components/PromotionsView.js +10 -0
- package/dist/features/promotions/components/index.d.ts +3 -0
- package/dist/features/promotions/components/index.js +2 -0
- package/dist/features/promotions/hooks/useCouponValidate.d.ts +22 -0
- package/dist/features/promotions/hooks/useCouponValidate.js +10 -0
- package/dist/features/promotions/hooks/usePromotions.d.ts +21 -0
- package/dist/features/promotions/hooks/usePromotions.js +49 -0
- package/dist/features/promotions/index.d.ts +7 -301
- package/dist/features/promotions/index.js +7 -957
- package/dist/features/promotions/manifest.d.ts +2 -0
- package/dist/features/promotions/manifest.js +14 -0
- package/dist/features/promotions/messages/en.json +20 -0
- package/dist/features/promotions/repository/coupons.repository.d.ts +224 -0
- package/dist/features/promotions/repository/coupons.repository.js +539 -0
- package/dist/features/promotions/repository/promotions.repository.d.ts +14 -0
- package/dist/features/promotions/repository/promotions.repository.js +43 -0
- package/dist/features/promotions/schemas/firestore.d.ts +105 -0
- package/dist/features/promotions/schemas/firestore.js +124 -0
- package/dist/features/promotions/schemas/index.d.ts +117 -0
- package/dist/features/promotions/schemas/index.js +58 -0
- package/dist/features/promotions/server.d.ts +10 -0
- package/dist/features/promotions/server.js +10 -0
- package/dist/features/promotions/types/index.d.ts +51 -0
- package/dist/features/promotions/types/index.js +2 -0
- package/dist/features/reviews/actions/index.d.ts +1 -0
- package/dist/features/reviews/actions/index.js +1 -0
- package/dist/features/reviews/actions/review-actions.d.ts +40 -0
- package/dist/features/reviews/actions/review-actions.js +182 -0
- package/dist/features/reviews/api/[id]/route.d.ts +23 -0
- package/dist/features/reviews/api/[id]/route.js +109 -0
- package/dist/features/reviews/api/route.d.ts +21 -0
- package/dist/features/reviews/api/route.js +171 -0
- package/dist/features/reviews/columns/index.d.ts +15 -0
- package/dist/features/reviews/columns/index.js +44 -0
- package/dist/features/reviews/components/ReviewFilters.d.ts +74 -0
- package/dist/features/reviews/components/ReviewFilters.js +60 -0
- package/dist/features/reviews/components/ReviewModal.d.ts +11 -0
- package/dist/features/reviews/components/ReviewModal.js +25 -0
- package/dist/features/reviews/components/ReviewSummary.d.ts +16 -0
- package/dist/features/reviews/components/ReviewSummary.js +20 -0
- package/dist/features/reviews/components/ReviewsList.d.ts +15 -0
- package/dist/features/reviews/components/ReviewsList.js +25 -0
- package/dist/features/reviews/components/ReviewsListView.d.ts +31 -0
- package/dist/features/reviews/components/ReviewsListView.js +16 -0
- package/dist/features/reviews/components/index.d.ts +10 -0
- package/dist/features/reviews/components/index.js +5 -0
- package/dist/features/reviews/hooks/useCreateReview.d.ts +12 -0
- package/dist/features/reviews/hooks/useCreateReview.js +20 -0
- package/dist/features/reviews/hooks/useReviews.d.ts +34 -0
- package/dist/features/reviews/hooks/useReviews.js +49 -0
- package/dist/features/reviews/index.d.ts +7 -434
- package/dist/features/reviews/index.js +7 -2297
- package/dist/features/reviews/manifest.d.ts +2 -0
- package/dist/features/reviews/manifest.js +10 -0
- package/dist/features/reviews/messages/en.json +10 -0
- package/dist/features/reviews/repository/reviews.repository.d.ts +103 -0
- package/dist/features/reviews/repository/reviews.repository.js +214 -0
- package/dist/features/reviews/schemas/firestore.d.ts +67 -0
- package/dist/features/reviews/schemas/firestore.js +59 -0
- package/dist/features/reviews/schemas/index.d.ts +183 -0
- package/dist/features/reviews/schemas/index.js +68 -0
- package/dist/features/reviews/server.d.ts +7 -46
- package/dist/features/reviews/server.js +10 -769
- package/dist/features/reviews/types/index.d.ts +62 -0
- package/dist/features/reviews/types/index.js +1 -0
- package/dist/features/search/actions/index.d.ts +1 -0
- package/dist/features/search/actions/index.js +1 -0
- package/dist/features/search/actions/search-actions.d.ts +18 -0
- package/dist/features/search/actions/search-actions.js +43 -0
- package/dist/features/search/api/route.d.ts +22 -0
- package/dist/features/search/api/route.js +79 -0
- package/dist/features/search/columns/index.d.ts +17 -0
- package/dist/features/search/columns/index.js +49 -0
- package/dist/features/search/components/Search.d.ts +41 -0
- package/dist/features/search/components/Search.js +263 -0
- package/dist/features/search/components/SearchFiltersRow.d.ts +22 -0
- package/dist/features/search/components/SearchFiltersRow.js +21 -0
- package/dist/features/search/components/SearchResultsSection.d.ts +53 -0
- package/dist/features/search/components/SearchResultsSection.js +36 -0
- package/dist/features/search/components/SearchView.d.ts +29 -0
- package/dist/features/search/components/SearchView.js +8 -0
- package/dist/features/search/components/index.d.ts +8 -0
- package/dist/features/search/components/index.js +4 -0
- package/dist/features/search/hooks/useNavSuggestions.d.ts +11 -0
- package/dist/features/search/hooks/useNavSuggestions.js +32 -0
- package/dist/features/search/hooks/useSearch.d.ts +21 -0
- package/dist/features/search/hooks/useSearch.js +34 -0
- package/dist/features/search/index.d.ts +7 -298
- package/dist/features/search/index.js +7 -1351
- package/dist/features/search/manifest.d.ts +2 -0
- package/dist/features/search/manifest.js +10 -0
- package/dist/features/search/messages/en.json +15 -0
- package/dist/features/search/repository/search.repository.d.ts +14 -0
- package/dist/features/search/repository/search.repository.js +59 -0
- package/dist/features/search/schemas/index.d.ts +70 -0
- package/dist/features/search/schemas/index.js +34 -0
- package/dist/features/search/server.d.ts +5 -83
- package/dist/features/search/server.js +5 -149
- package/dist/features/search/types/index.d.ts +46 -0
- package/dist/features/search/types/index.js +2 -0
- package/dist/features/seller/actions/index.d.ts +2 -0
- package/dist/features/seller/actions/index.js +2 -0
- package/dist/features/seller/actions/offer-actions.d.ts +32 -0
- package/dist/features/seller/actions/offer-actions.js +266 -0
- package/dist/features/seller/actions/seller-actions.d.ts +172 -0
- package/dist/features/seller/actions/seller-actions.js +480 -0
- package/dist/features/seller/api/coupons/route.d.ts +17 -0
- package/dist/features/seller/api/coupons/route.js +47 -0
- package/dist/features/seller/api/offers/route.d.ts +17 -0
- package/dist/features/seller/api/offers/route.js +63 -0
- package/dist/features/seller/api/products/route.d.ts +17 -0
- package/dist/features/seller/api/products/route.js +64 -0
- package/dist/features/seller/api/store/route.d.ts +17 -0
- package/dist/features/seller/api/store/route.js +34 -0
- package/dist/features/seller/columns/index.d.ts +22 -0
- package/dist/features/seller/columns/index.js +73 -0
- package/dist/features/seller/components/SellerAddressesView.d.ts +13 -0
- package/dist/features/seller/components/SellerAddressesView.js +5 -0
- package/dist/features/seller/components/SellerAnalyticsView.d.ts +13 -0
- package/dist/features/seller/components/SellerAnalyticsView.js +17 -0
- package/dist/features/seller/components/SellerAuctionsView.d.ts +6 -0
- package/dist/features/seller/components/SellerAuctionsView.js +5 -0
- package/dist/features/seller/components/SellerCouponsView.d.ts +6 -0
- package/dist/features/seller/components/SellerCouponsView.js +5 -0
- package/dist/features/seller/components/SellerCreateProductView.d.ts +11 -0
- package/dist/features/seller/components/SellerCreateProductView.js +5 -0
- package/dist/features/seller/components/SellerDashboardView.d.ts +14 -0
- package/dist/features/seller/components/SellerDashboardView.js +11 -0
- package/dist/features/seller/components/SellerEditProductView.d.ts +11 -0
- package/dist/features/seller/components/SellerEditProductView.js +5 -0
- package/dist/features/seller/components/SellerGuideView.d.ts +12 -0
- package/dist/features/seller/components/SellerGuideView.js +5 -0
- package/dist/features/seller/components/SellerOffersView.d.ts +4 -0
- package/dist/features/seller/components/SellerOffersView.js +5 -0
- package/dist/features/seller/components/SellerOrdersView.d.ts +4 -0
- package/dist/features/seller/components/SellerOrdersView.js +5 -0
- package/dist/features/seller/components/SellerPayoutHistoryTable.d.ts +14 -0
- package/dist/features/seller/components/SellerPayoutHistoryTable.js +10 -0
- package/dist/features/seller/components/SellerPayoutSettingsView.d.ts +11 -0
- package/dist/features/seller/components/SellerPayoutSettingsView.js +5 -0
- package/dist/features/seller/components/SellerPayoutStats.d.ts +8 -0
- package/dist/features/seller/components/SellerPayoutStats.js +9 -0
- package/dist/features/seller/components/SellerPayoutsView.d.ts +18 -0
- package/dist/features/seller/components/SellerPayoutsView.js +11 -0
- package/dist/features/seller/components/SellerProductsView.d.ts +6 -0
- package/dist/features/seller/components/SellerProductsView.js +5 -0
- package/dist/features/seller/components/SellerShippingView.d.ts +12 -0
- package/dist/features/seller/components/SellerShippingView.js +5 -0
- package/dist/features/seller/components/SellerSidebar.d.ts +16 -0
- package/dist/features/seller/components/SellerSidebar.js +11 -0
- package/dist/features/seller/components/SellerStatCard.d.ts +14 -0
- package/dist/features/seller/components/SellerStatCard.js +5 -0
- package/dist/features/seller/components/SellerStoreSetupView.d.ts +12 -0
- package/dist/features/seller/components/SellerStoreSetupView.js +8 -0
- package/dist/features/seller/components/SellerStoreView.d.ts +8 -0
- package/dist/features/seller/components/SellerStoreView.js +8 -0
- package/dist/features/seller/components/SellerStorefrontView.d.ts +13 -0
- package/dist/features/seller/components/SellerStorefrontView.js +10 -0
- package/dist/features/seller/components/SellersListView.d.ts +4 -0
- package/dist/features/seller/components/SellersListView.js +5 -0
- package/dist/features/seller/components/analytics/SellerAnalyticsStats.d.ts +14 -0
- package/dist/features/seller/components/analytics/SellerAnalyticsStats.js +9 -0
- package/dist/features/seller/components/analytics/SellerRevenueChart.d.ts +13 -0
- package/dist/features/seller/components/analytics/SellerRevenueChart.js +28 -0
- package/dist/features/seller/components/analytics/SellerTopProducts.d.ts +17 -0
- package/dist/features/seller/components/analytics/SellerTopProducts.js +6 -0
- package/dist/features/seller/components/analytics/index.d.ts +3 -0
- package/dist/features/seller/components/analytics/index.js +3 -0
- package/dist/features/seller/components/index.d.ts +44 -0
- package/dist/features/seller/components/index.js +23 -0
- package/dist/features/seller/hooks/useBecomeSeller.d.ts +12 -0
- package/dist/features/seller/hooks/useBecomeSeller.js +26 -0
- package/dist/features/seller/hooks/useSellerPayouts.d.ts +25 -0
- package/dist/features/seller/hooks/useSellerPayouts.js +42 -0
- package/dist/features/seller/hooks/useSellerStore.d.ts +28 -0
- package/dist/features/seller/hooks/useSellerStore.js +48 -0
- package/dist/features/seller/hooks/useSellerStorefront.d.ts +16 -0
- package/dist/features/seller/hooks/useSellerStorefront.js +57 -0
- package/dist/features/seller/index.d.ts +10 -926
- package/dist/features/seller/index.js +10 -2029
- package/dist/features/seller/manifest.d.ts +2 -0
- package/dist/features/seller/manifest.js +74 -0
- package/dist/features/seller/messages/en.json +32 -0
- package/dist/features/seller/permission-map.d.ts +3 -0
- package/dist/features/seller/permission-map.js +15 -0
- package/dist/features/seller/repository/offer.repository.d.ts +66 -0
- package/dist/features/seller/repository/offer.repository.js +210 -0
- package/dist/features/seller/repository/seller.repository.d.ts +22 -0
- package/dist/features/seller/repository/seller.repository.js +72 -0
- package/dist/features/seller/schemas/firestore.d.ts +76 -0
- package/dist/features/seller/schemas/firestore.js +57 -0
- package/dist/features/seller/schemas/index.d.ts +244 -0
- package/dist/features/seller/schemas/index.js +100 -0
- package/dist/features/seller/server.d.ts +13 -0
- package/dist/features/seller/server.js +13 -0
- package/dist/features/seller/types/index.d.ts +147 -0
- package/dist/features/seller/types/index.js +2 -0
- package/dist/features/stores/actions/index.d.ts +2 -0
- package/dist/features/stores/actions/index.js +2 -0
- package/dist/features/stores/actions/store-address-actions.d.ts +11 -0
- package/dist/features/stores/actions/store-address-actions.js +54 -0
- package/dist/features/stores/actions/store-query-actions.d.ts +34 -0
- package/dist/features/stores/actions/store-query-actions.js +113 -0
- package/dist/features/stores/api/[storeSlug]/auctions/route.d.ts +23 -0
- package/dist/features/stores/api/[storeSlug]/auctions/route.js +92 -0
- package/dist/features/stores/api/[storeSlug]/products/route.d.ts +23 -0
- package/dist/features/stores/api/[storeSlug]/products/route.js +97 -0
- package/dist/features/stores/api/[storeSlug]/reviews/route.d.ts +23 -0
- package/dist/features/stores/api/[storeSlug]/reviews/route.js +101 -0
- package/dist/features/stores/api/[storeSlug]/route.d.ts +21 -0
- package/dist/features/stores/api/[storeSlug]/route.js +66 -0
- package/dist/features/stores/api/route.d.ts +12 -0
- package/dist/features/stores/api/route.js +101 -0
- package/dist/features/stores/columns/index.d.ts +16 -0
- package/dist/features/stores/columns/index.js +45 -0
- package/dist/features/stores/components/InteractiveStoreCard.d.ts +20 -0
- package/dist/features/stores/components/InteractiveStoreCard.js +16 -0
- package/dist/features/stores/components/StoreAboutView.d.ts +21 -0
- package/dist/features/stores/components/StoreAboutView.js +12 -0
- package/dist/features/stores/components/StoreAddressSelectorCreate.d.ts +16 -0
- package/dist/features/stores/components/StoreAddressSelectorCreate.js +40 -0
- package/dist/features/stores/components/StoreAuctionsView.d.ts +17 -0
- package/dist/features/stores/components/StoreAuctionsView.js +5 -0
- package/dist/features/stores/components/StoreHeader.d.ts +15 -0
- package/dist/features/stores/components/StoreHeader.js +8 -0
- package/dist/features/stores/components/StoreNavTabs.d.ts +15 -0
- package/dist/features/stores/components/StoreNavTabs.js +14 -0
- package/dist/features/stores/components/StoreProductsView.d.ts +30 -0
- package/dist/features/stores/components/StoreProductsView.js +11 -0
- package/dist/features/stores/components/StoreReviewsView.d.ts +17 -0
- package/dist/features/stores/components/StoreReviewsView.js +9 -0
- package/dist/features/stores/components/StoresListView.d.ts +19 -0
- package/dist/features/stores/components/StoresListView.js +24 -0
- package/dist/features/stores/components/index.d.ts +16 -0
- package/dist/features/stores/components/index.js +9 -0
- package/dist/features/stores/hooks/useStoreAddressSelector.d.ts +23 -0
- package/dist/features/stores/hooks/useStoreAddressSelector.js +30 -0
- package/dist/features/stores/hooks/useStores.d.ts +58 -0
- package/dist/features/stores/hooks/useStores.js +96 -0
- package/dist/features/stores/index.d.ts +7 -536
- package/dist/features/stores/index.js +7 -1911
- package/dist/features/stores/manifest.d.ts +2 -0
- package/dist/features/stores/manifest.js +35 -0
- package/dist/features/stores/messages/en.json +21 -0
- package/dist/features/stores/repository/store-address.repository.d.ts +55 -0
- package/dist/features/stores/repository/store-address.repository.js +188 -0
- package/dist/features/stores/repository/store.repository.d.ts +67 -0
- package/dist/features/stores/repository/store.repository.js +181 -0
- package/dist/features/stores/repository/stores.repository.d.ts +11 -0
- package/dist/features/stores/repository/stores.repository.js +34 -0
- package/dist/features/stores/schemas/firestore.d.ts +117 -0
- package/dist/features/stores/schemas/firestore.js +109 -0
- package/dist/features/stores/schemas/index.d.ts +85 -0
- package/dist/features/stores/schemas/index.js +48 -0
- package/dist/features/stores/server.d.ts +12 -103
- package/dist/features/stores/server.js +15 -444
- package/dist/features/stores/types/index.d.ts +102 -0
- package/dist/features/stores/types/index.js +2 -0
- package/dist/features/whatsapp-bot/api/send-status/route.d.ts +12 -0
- package/dist/features/whatsapp-bot/api/send-status/route.js +36 -0
- package/dist/features/whatsapp-bot/api/webhook/route.d.ts +12 -0
- package/dist/features/whatsapp-bot/api/webhook/route.js +41 -0
- package/dist/features/whatsapp-bot/components/WhatsAppChatButton.d.ts +8 -0
- package/dist/features/whatsapp-bot/components/WhatsAppChatButton.js +7 -0
- package/dist/features/whatsapp-bot/components/index.d.ts +1 -0
- package/dist/features/whatsapp-bot/components/index.js +1 -0
- package/dist/features/whatsapp-bot/helpers/whatsapp.d.ts +21 -0
- package/dist/features/whatsapp-bot/helpers/whatsapp.js +125 -0
- package/dist/features/whatsapp-bot/index.d.ts +3 -85
- package/dist/features/whatsapp-bot/index.js +3 -154
- package/dist/features/whatsapp-bot/manifest.d.ts +2 -0
- package/dist/features/whatsapp-bot/manifest.js +13 -0
- package/dist/features/whatsapp-bot/messages/en.json +7 -0
- package/dist/features/whatsapp-bot/server.d.ts +7 -0
- package/dist/features/whatsapp-bot/server.js +7 -0
- package/dist/features/whatsapp-bot/types/index.d.ts +50 -0
- package/dist/features/whatsapp-bot/types/index.js +1 -0
- package/dist/features/wishlist/actions/index.d.ts +1 -0
- package/dist/features/wishlist/actions/index.js +1 -0
- package/dist/features/wishlist/actions/wishlist-actions.d.ts +20 -0
- package/dist/features/wishlist/actions/wishlist-actions.js +29 -0
- package/dist/features/wishlist/columns/index.d.ts +17 -0
- package/dist/features/wishlist/columns/index.js +42 -0
- package/dist/features/wishlist/components/WishlistPage.d.ts +16 -0
- package/dist/features/wishlist/components/WishlistPage.js +17 -0
- package/dist/features/wishlist/components/WishlistToggleButton.d.ts +12 -0
- package/dist/features/wishlist/components/WishlistToggleButton.js +21 -0
- package/dist/features/wishlist/components/WishlistView.d.ts +33 -0
- package/dist/features/wishlist/components/WishlistView.js +41 -0
- package/dist/features/wishlist/components/index.d.ts +4 -0
- package/dist/features/wishlist/components/index.js +3 -0
- package/dist/features/wishlist/hooks/useUserWishlist.d.ts +187 -0
- package/dist/features/wishlist/hooks/useUserWishlist.js +17 -0
- package/dist/features/wishlist/hooks/useWishlist.d.ts +16 -0
- package/dist/features/wishlist/hooks/useWishlist.js +23 -0
- package/dist/features/wishlist/hooks/useWishlistToggle.d.ts +10 -0
- package/dist/features/wishlist/hooks/useWishlistToggle.js +32 -0
- package/dist/features/wishlist/index.d.ts +9 -360
- package/dist/features/wishlist/index.js +8 -888
- package/dist/features/wishlist/manifest.d.ts +2 -0
- package/dist/features/wishlist/manifest.js +12 -0
- package/dist/features/wishlist/messages/en.json +7 -0
- package/dist/features/wishlist/repository/user-wishlist.repository.d.ts +14 -0
- package/dist/features/wishlist/repository/user-wishlist.repository.js +91 -0
- package/dist/features/wishlist/repository/wishlist.repository.d.ts +13 -0
- package/dist/features/wishlist/repository/wishlist.repository.js +31 -0
- package/dist/features/wishlist/schemas/index.d.ts +46 -0
- package/dist/features/wishlist/schemas/index.js +24 -0
- package/dist/features/wishlist/server.d.ts +9 -0
- package/dist/features/wishlist/server.js +9 -0
- package/dist/features/wishlist/types/index.d.ts +16 -0
- package/dist/features/wishlist/types/index.js +1 -0
- package/dist/http/ApiClient.d.ts +59 -0
- package/dist/http/ApiClient.js +149 -0
- package/dist/http/api-handler.d.ts +33 -0
- package/dist/http/api-handler.js +89 -0
- package/dist/http/index.d.ts +6 -58
- package/dist/http/index.js +8 -4
- package/dist/index.d.ts +1 -17
- package/dist/index.js +1 -13
- package/dist/instrumentation/index.d.ts +4 -6
- package/dist/instrumentation/index.js +54 -14
- package/dist/monitoring/analytics.d.ts +79 -0
- package/dist/monitoring/analytics.js +171 -0
- package/dist/monitoring/browser.d.ts +10 -0
- package/dist/monitoring/browser.js +6 -0
- package/dist/monitoring/cache-metrics.d.ts +24 -0
- package/dist/monitoring/cache-metrics.js +83 -0
- package/dist/monitoring/client-logger.d.ts +29 -0
- package/dist/monitoring/client-logger.js +127 -0
- package/dist/monitoring/error-tracking.d.ts +50 -0
- package/dist/monitoring/error-tracking.js +54 -0
- package/dist/monitoring/index.d.ts +12 -181
- package/dist/monitoring/index.js +7 -8
- package/dist/monitoring/performance.d.ts +31 -0
- package/dist/monitoring/performance.js +34 -0
- package/dist/monitoring/runtime.d.ts +17 -0
- package/dist/monitoring/runtime.js +28 -0
- package/dist/monitoring/server-logger.d.ts +37 -0
- package/dist/monitoring/server-logger.js +289 -0
- package/dist/next/ErrorBoundary.d.ts +19 -0
- package/dist/next/ErrorBoundary.js +35 -0
- package/dist/next/IAuthVerifier.d.ts +54 -0
- package/dist/next/IAuthVerifier.js +23 -0
- package/dist/next/api/api-response.d.ts +29 -0
- package/dist/next/api/api-response.js +31 -0
- package/dist/next/api/apiHandler.d.ts +48 -0
- package/dist/next/api/apiHandler.js +87 -0
- package/dist/next/api/errorHandler.d.ts +57 -0
- package/dist/next/api/errorHandler.js +72 -0
- package/dist/next/api/routeHandler.d.ts +60 -0
- package/dist/next/api/routeHandler.js +113 -0
- package/dist/next/cache-middleware.d.ts +35 -0
- package/dist/next/cache-middleware.js +77 -0
- package/dist/next/components/ErrorView.d.ts +13 -0
- package/dist/next/components/ErrorView.js +32 -0
- package/dist/next/components/GlobalError.d.ts +7 -0
- package/dist/next/components/GlobalError.js +43 -0
- package/dist/next/components/NotFoundView.d.ts +28 -0
- package/dist/next/components/NotFoundView.js +25 -0
- package/dist/next/components/UnauthorizedView.d.ts +28 -0
- package/dist/next/components/UnauthorizedView.js +22 -0
- package/dist/next/index.d.ts +34 -776
- package/dist/next/index.js +30 -646
- package/dist/next/middleware/chain.d.ts +47 -0
- package/dist/next/middleware/chain.js +80 -0
- package/dist/next/middleware/index.d.ts +6 -0
- package/dist/next/middleware/index.js +3 -0
- package/dist/next/middleware/pii-redactor.d.ts +32 -0
- package/dist/next/middleware/pii-redactor.js +82 -0
- package/dist/next/middleware/pii-scrubber.d.ts +11 -0
- package/dist/next/middleware/pii-scrubber.js +43 -0
- package/dist/next/middleware/types.d.ts +18 -0
- package/dist/next/middleware/types.js +1 -0
- package/dist/next/request-helpers.d.ts +25 -0
- package/dist/next/request-helpers.js +52 -0
- package/dist/next/routing/route-map.d.ts +272 -0
- package/dist/next/routing/route-map.js +202 -0
- package/dist/providers/auth-firebase/browser-stub.d.ts +24 -0
- package/dist/providers/auth-firebase/browser-stub.js +28 -0
- package/dist/providers/auth-firebase/helpers.d.ts +83 -0
- package/dist/providers/auth-firebase/helpers.js +205 -0
- package/dist/providers/auth-firebase/index.d.ts +7 -133
- package/dist/providers/auth-firebase/index.js +16 -370
- package/dist/providers/auth-firebase/provider.d.ts +8 -0
- package/dist/providers/auth-firebase/provider.js +118 -0
- package/dist/providers/auth-firebase/session.d.ts +19 -0
- package/dist/providers/auth-firebase/session.js +86 -0
- package/dist/providers/db-firebase/admin-app-lite.d.ts +6 -0
- package/dist/providers/db-firebase/admin-app-lite.js +50 -0
- package/dist/providers/db-firebase/admin-auth-lite.d.ts +5 -0
- package/dist/providers/db-firebase/admin-auth-lite.js +10 -0
- package/dist/providers/db-firebase/admin-storage-lite.d.ts +6 -0
- package/dist/providers/db-firebase/admin-storage-lite.js +11 -0
- package/dist/providers/db-firebase/admin.d.ts +29 -0
- package/dist/providers/db-firebase/admin.js +163 -0
- package/dist/providers/db-firebase/base.d.ts +44 -0
- package/dist/providers/db-firebase/base.js +180 -0
- package/dist/providers/db-firebase/base.repository.d.ts +34 -0
- package/dist/providers/db-firebase/base.repository.js +235 -0
- package/dist/providers/db-firebase/browser-stub.d.ts +37 -0
- package/dist/providers/db-firebase/browser-stub.js +56 -0
- package/dist/providers/db-firebase/client-config.d.ts +22 -0
- package/dist/providers/db-firebase/client-config.js +30 -0
- package/dist/providers/db-firebase/field-ops.d.ts +7 -0
- package/dist/providers/db-firebase/field-ops.js +13 -0
- package/dist/providers/db-firebase/helpers.d.ts +23 -0
- package/dist/providers/db-firebase/helpers.js +67 -0
- package/dist/providers/db-firebase/index.d.ts +16 -250
- package/dist/providers/db-firebase/index.js +42 -498
- package/dist/providers/db-firebase/realtime.d.ts +43 -0
- package/dist/providers/db-firebase/realtime.js +122 -0
- package/dist/providers/db-firebase/rtdb-paths.d.ts +12 -0
- package/dist/providers/db-firebase/rtdb-paths.js +12 -0
- package/dist/providers/db-firebase/sieve.d.ts +76 -0
- package/dist/providers/db-firebase/sieve.js +83 -0
- package/dist/providers/email-resend/index.d.ts +6 -64
- package/dist/providers/email-resend/index.js +14 -56
- package/dist/providers/email-resend/provider.d.ts +43 -0
- package/dist/providers/email-resend/provider.js +75 -0
- package/dist/providers/firebase-client/auth.d.ts +12 -0
- package/dist/providers/firebase-client/auth.js +30 -0
- package/dist/providers/firebase-client/index.d.ts +9 -0
- package/dist/providers/firebase-client/index.js +9 -0
- package/dist/providers/firebase-client/realtime.d.ts +18 -0
- package/dist/providers/firebase-client/realtime.js +39 -0
- package/dist/providers/payment-razorpay/index.d.ts +66 -69
- package/dist/providers/payment-razorpay/index.js +201 -97
- package/dist/providers/shipping-shiprocket/index.d.ts +69 -33
- package/dist/providers/shipping-shiprocket/index.js +135 -122
- package/dist/providers/shipping-shiprocket/shiprocket-provider.d.ts +46 -0
- package/dist/providers/shipping-shiprocket/shiprocket-provider.js +152 -0
- package/dist/providers/storage-firebase/client.d.ts +56 -0
- package/dist/providers/storage-firebase/client.js +141 -0
- package/dist/providers/storage-firebase/index.d.ts +6 -43
- package/dist/providers/storage-firebase/index.js +16 -153
- package/dist/providers/storage-firebase/provider.d.ts +23 -0
- package/dist/providers/storage-firebase/provider.js +103 -0
- package/dist/react/ErrorBoundary.d.ts +31 -0
- package/dist/react/ErrorBoundary.js +68 -0
- package/dist/react/contexts/SessionContext.d.ts +80 -0
- package/dist/react/contexts/SessionContext.js +350 -0
- package/dist/react/contexts/ThemeContext.d.ts +14 -0
- package/dist/react/contexts/ThemeContext.js +65 -0
- package/dist/react/contexts/index.d.ts +4 -0
- package/dist/react/contexts/index.js +2 -0
- package/dist/react/hooks/useBreakpoint.d.ts +29 -0
- package/dist/react/hooks/useBreakpoint.js +37 -0
- package/dist/react/hooks/useBulkAction.d.ts +65 -0
- package/dist/react/hooks/useBulkAction.js +69 -0
- package/dist/react/hooks/useBulkSelection.d.ts +40 -0
- package/dist/react/hooks/useBulkSelection.js +58 -0
- package/dist/react/hooks/useCamera.d.ts +34 -0
- package/dist/react/hooks/useCamera.js +147 -0
- package/dist/react/hooks/useClickOutside.d.ts +37 -0
- package/dist/react/hooks/useClickOutside.js +57 -0
- package/dist/react/hooks/useContainerGrid.d.ts +39 -0
- package/dist/react/hooks/useContainerGrid.js +47 -0
- package/dist/react/hooks/useCountdown.d.ts +26 -0
- package/dist/react/hooks/useCountdown.js +49 -0
- package/dist/react/hooks/useGesture.d.ts +51 -0
- package/dist/react/hooks/useGesture.js +181 -0
- package/dist/react/hooks/useKeyPress.d.ts +48 -0
- package/dist/react/hooks/useKeyPress.js +62 -0
- package/dist/react/hooks/useLongPress.d.ts +26 -0
- package/dist/react/hooks/useLongPress.js +55 -0
- package/dist/react/hooks/useMediaQuery.d.ts +17 -0
- package/dist/react/hooks/useMediaQuery.js +34 -0
- package/dist/react/hooks/useMessage.d.ts +11 -0
- package/dist/react/hooks/useMessage.js +45 -0
- package/dist/react/hooks/usePendingFilters.d.ts +58 -0
- package/dist/react/hooks/usePendingFilters.js +79 -0
- package/dist/react/hooks/usePendingTable.d.ts +49 -0
- package/dist/react/hooks/usePendingTable.js +45 -0
- package/dist/react/hooks/usePullToRefresh.d.ts +38 -0
- package/dist/react/hooks/usePullToRefresh.js +82 -0
- package/dist/react/hooks/useRealtimeEvent.d.ts +53 -0
- package/dist/react/hooks/useRealtimeEvent.js +124 -0
- package/dist/react/hooks/useSwipe.d.ts +55 -0
- package/dist/react/hooks/useSwipe.js +165 -0
- package/dist/react/hooks/useUnsavedChanges.d.ts +44 -0
- package/dist/react/hooks/useUnsavedChanges.js +55 -0
- package/dist/react/hooks/useUrlTable.d.ts +31 -0
- package/dist/react/hooks/useUrlTable.js +137 -0
- package/dist/react/hooks/useVisibleItems.d.ts +37 -0
- package/dist/react/hooks/useVisibleItems.js +59 -0
- package/dist/react/index.d.ts +49 -787
- package/dist/react/index.js +47 -1665
- package/dist/react/useModalStack.d.ts +33 -0
- package/dist/react/useModalStack.js +61 -0
- package/dist/repositories/index.d.ts +38 -0
- package/dist/repositories/index.js +40 -0
- package/dist/security/authorization.d.ts +24 -0
- package/dist/security/authorization.js +73 -0
- package/dist/security/browser.d.ts +7 -0
- package/dist/security/browser.js +5 -0
- package/dist/security/csp.d.ts +16 -0
- package/dist/security/csp.js +44 -0
- package/dist/security/index.d.ts +11 -309
- package/dist/security/index.js +8 -5
- package/dist/security/pii-encrypt.d.ts +121 -0
- package/dist/security/pii-encrypt.js +351 -0
- package/dist/security/pii-redact.d.ts +20 -0
- package/dist/security/pii-redact.js +129 -0
- package/dist/security/pii-schemas.d.ts +38 -0
- package/dist/security/pii-schemas.js +62 -0
- package/dist/security/rate-limit.d.ts +70 -0
- package/dist/security/rate-limit.js +107 -0
- package/dist/security/rbac/Can.d.ts +31 -0
- package/dist/security/rbac/Can.js +24 -0
- package/dist/security/rbac/default-roles.d.ts +2 -0
- package/dist/security/rbac/default-roles.js +83 -0
- package/dist/security/rbac/hook.d.ts +20 -0
- package/dist/security/rbac/hook.js +30 -0
- package/dist/security/rbac/index.d.ts +8 -0
- package/dist/security/rbac/index.js +6 -0
- package/dist/security/rbac/middleware.d.ts +51 -0
- package/dist/security/rbac/middleware.js +51 -0
- package/dist/security/rbac/resolver.d.ts +5 -0
- package/dist/security/rbac/resolver.js +38 -0
- package/dist/security/rbac/server.d.ts +24 -0
- package/dist/security/rbac/server.js +42 -0
- package/dist/security/rbac/types.d.ts +22 -0
- package/dist/security/rbac/types.js +2 -0
- package/dist/security/settings-encryption.d.ts +5 -0
- package/dist/security/settings-encryption.js +48 -0
- package/dist/seed/actions/demo-seed-actions.d.ts +31 -0
- package/dist/seed/actions/demo-seed-actions.js +36 -0
- package/dist/seed/actions/index.d.ts +1 -0
- package/dist/seed/actions/index.js +1 -0
- package/dist/seed/addresses-seed-data.d.ts +19 -0
- package/dist/seed/addresses-seed-data.js +418 -0
- package/dist/seed/bids-seed-data.d.ts +7 -0
- package/dist/seed/bids-seed-data.js +1168 -0
- package/dist/seed/blog-posts-seed-data.d.ts +7 -0
- package/dist/seed/blog-posts-seed-data.js +215 -0
- package/dist/seed/carousel-slides-seed-data.d.ts +7 -0
- package/dist/seed/carousel-slides-seed-data.js +283 -0
- package/dist/seed/cart-seed-data.d.ts +20 -0
- package/dist/seed/cart-seed-data.js +179 -0
- package/dist/seed/categories-seed-data.d.ts +7 -0
- package/dist/seed/categories-seed-data.js +1220 -0
- package/dist/seed/coupons-seed-data.d.ts +7 -0
- package/dist/seed/coupons-seed-data.js +508 -0
- package/dist/seed/defaults/categories.d.ts +2 -0
- package/dist/seed/defaults/categories.js +12 -0
- package/dist/seed/defaults/faqs.d.ts +2 -0
- package/dist/seed/defaults/faqs.js +40 -0
- package/dist/seed/defaults/homepage-sections.d.ts +2 -0
- package/dist/seed/defaults/homepage-sections.js +59 -0
- package/dist/seed/events-seed-data.d.ts +8 -0
- package/dist/seed/events-seed-data.js +662 -0
- package/dist/seed/factories/address.factory.d.ts +21 -0
- package/dist/seed/factories/address.factory.js +44 -0
- package/dist/seed/factories/bid.factory.d.ts +15 -0
- package/dist/seed/factories/bid.factory.js +33 -0
- package/dist/seed/factories/blog-post.factory.d.ts +15 -0
- package/dist/seed/factories/blog-post.factory.js +22 -0
- package/dist/seed/factories/carousel.factory.d.ts +11 -0
- package/dist/seed/factories/carousel.factory.js +16 -0
- package/dist/seed/factories/cart.factory.d.ts +26 -0
- package/dist/seed/factories/cart.factory.js +35 -0
- package/dist/seed/factories/category.factory.d.ts +11 -0
- package/dist/seed/factories/category.factory.js +16 -0
- package/dist/seed/factories/coupon.factory.d.ts +21 -0
- package/dist/seed/factories/coupon.factory.js +43 -0
- package/dist/seed/factories/faq.factory.d.ts +10 -0
- package/dist/seed/factories/faq.factory.js +15 -0
- package/dist/seed/factories/homepage-section.factory.d.ts +9 -0
- package/dist/seed/factories/homepage-section.factory.js +13 -0
- package/dist/seed/factories/notification.factory.d.ts +17 -0
- package/dist/seed/factories/notification.factory.js +39 -0
- package/dist/seed/factories/order.factory.d.ts +20 -0
- package/dist/seed/factories/order.factory.js +20 -0
- package/dist/seed/factories/payout.factory.d.ts +21 -0
- package/dist/seed/factories/payout.factory.js +38 -0
- package/dist/seed/factories/product.factory.d.ts +27 -0
- package/dist/seed/factories/product.factory.js +111 -0
- package/dist/seed/factories/review.factory.d.ts +14 -0
- package/dist/seed/factories/review.factory.js +52 -0
- package/dist/seed/factories/session.factory.d.ts +15 -0
- package/dist/seed/factories/session.factory.js +31 -0
- package/dist/seed/factories/store.factory.d.ts +23 -0
- package/dist/seed/factories/store.factory.js +46 -0
- package/dist/seed/factories/user.factory.d.ts +19 -0
- package/dist/seed/factories/user.factory.js +55 -0
- package/dist/seed/faq-seed-data.d.ts +47 -0
- package/dist/seed/faq-seed-data.js +2320 -0
- package/dist/seed/firestore-indexes.d.ts +13 -0
- package/dist/seed/firestore-indexes.js +32 -0
- package/dist/seed/homepage-sections-seed-data.d.ts +18 -0
- package/dist/seed/homepage-sections-seed-data.js +339 -0
- package/dist/seed/index.d.ts +68 -397
- package/dist/seed/index.js +49 -1040
- package/dist/seed/notifications-seed-data.d.ts +7 -0
- package/dist/seed/notifications-seed-data.js +494 -0
- package/dist/seed/orders-seed-data.d.ts +7 -0
- package/dist/seed/orders-seed-data.js +578 -0
- package/dist/seed/payouts-seed-data.d.ts +7 -0
- package/dist/seed/payouts-seed-data.js +202 -0
- package/dist/seed/products-seed-data.d.ts +7 -0
- package/dist/seed/products-seed-data.js +2477 -0
- package/dist/seed/reviews-seed-data.d.ts +7 -0
- package/dist/seed/reviews-seed-data.js +618 -0
- package/dist/seed/runner.d.ts +3 -0
- package/dist/seed/runner.js +38 -0
- package/dist/seed/seed-market-config.d.ts +49 -0
- package/dist/seed/seed-market-config.js +198 -0
- package/dist/seed/sessions-seed-data.d.ts +17 -0
- package/dist/seed/sessions-seed-data.js +355 -0
- package/dist/seed/site-settings-seed-data.d.ts +7 -0
- package/dist/seed/site-settings-seed-data.js +236 -0
- package/dist/seed/store-addresses-seed-data.d.ts +19 -0
- package/dist/seed/store-addresses-seed-data.js +106 -0
- package/dist/seed/stores-seed-data.d.ts +14 -0
- package/dist/seed/stores-seed-data.js +127 -0
- package/dist/seed/test-utils.d.ts +49 -0
- package/dist/seed/test-utils.js +107 -0
- package/dist/seed/types.d.ts +33 -0
- package/dist/seed/types.js +1 -0
- package/dist/seed/users-seed-data.d.ts +7 -0
- package/dist/seed/users-seed-data.js +727 -0
- package/dist/seo/index.d.ts +2 -150
- package/dist/seo/index.js +2 -4
- package/dist/seo/json-ld.d.ts +69 -0
- package/dist/seo/json-ld.js +166 -0
- package/dist/seo/metadata.d.ts +77 -0
- package/dist/seo/metadata.js +157 -0
- package/dist/server.d.ts +109 -0
- package/dist/server.js +110 -0
- package/dist/style/tailwind/index.d.ts +5 -7
- package/dist/style/tailwind/index.js +54 -33
- package/dist/style/vanilla/index.d.ts +5 -7
- package/dist/style/vanilla/index.js +45 -33
- package/dist/tokens/index.d.ts +23 -24
- package/dist/tokens/index.js +786 -4
- package/dist/tokens/tokens.css +221 -0
- package/dist/ui/DataTable.d.ts +78 -0
- package/dist/ui/DataTable.js +157 -0
- package/dist/ui/DataTable.style.css +190 -0
- package/dist/ui/animation.helper.d.ts +17 -0
- package/dist/ui/animation.helper.js +17 -0
- package/dist/ui/color.helper.d.ts +12 -0
- package/dist/ui/color.helper.js +31 -0
- package/dist/ui/columns/build-columns.d.ts +21 -0
- package/dist/ui/columns/build-columns.js +33 -0
- package/dist/ui/columns/column-renderers.d.ts +33 -0
- package/dist/ui/columns/column-renderers.js +64 -0
- package/dist/ui/columns/index.d.ts +6 -0
- package/dist/ui/columns/index.js +5 -0
- package/dist/ui/components/Accordion.d.ts +27 -0
- package/dist/ui/components/Accordion.js +57 -0
- package/dist/ui/components/Accordion.style.css +82 -0
- package/dist/ui/components/ActiveFilterChips.d.ts +13 -0
- package/dist/ui/components/ActiveFilterChips.js +9 -0
- package/dist/ui/components/ActiveFilterChips.style.css +66 -0
- package/dist/ui/components/Alert.d.ts +43 -0
- package/dist/ui/components/Alert.js +47 -0
- package/dist/ui/components/Alert.style.css +187 -0
- package/dist/ui/components/Avatar.d.ts +18 -0
- package/dist/ui/components/Avatar.js +42 -0
- package/dist/ui/components/Avatar.style.css +73 -0
- package/dist/ui/components/AvatarDisplay.d.ts +10 -0
- package/dist/ui/components/AvatarDisplay.js +56 -0
- package/dist/ui/components/AvatarDisplay.style.css +46 -0
- package/dist/ui/components/BackgroundRenderer.d.ts +15 -0
- package/dist/ui/components/BackgroundRenderer.js +42 -0
- package/dist/ui/components/BackgroundRenderer.style.css +31 -0
- package/dist/ui/components/Badge.d.ts +33 -0
- package/dist/ui/components/Badge.js +34 -0
- package/dist/ui/components/Badge.style.css +114 -0
- package/dist/ui/components/BaseListingCard.d.ts +39 -0
- package/dist/ui/components/BaseListingCard.js +56 -0
- package/dist/ui/components/BaseListingCard.style.css +84 -0
- package/dist/ui/components/Breadcrumb.d.ts +15 -0
- package/dist/ui/components/Breadcrumb.js +12 -0
- package/dist/ui/components/Breadcrumb.style.css +60 -0
- package/dist/ui/components/BulkActionBar.d.ts +34 -0
- package/dist/ui/components/BulkActionBar.js +86 -0
- package/dist/ui/components/BulkActionBar.style.css +196 -0
- package/dist/ui/components/Button.d.ts +31 -0
- package/dist/ui/components/Button.js +29 -0
- package/dist/ui/components/Button.style.css +160 -0
- package/dist/ui/components/Card.d.ts +21 -0
- package/dist/ui/components/Card.js +51 -0
- package/dist/ui/components/Card.style.css +192 -0
- package/dist/ui/components/Checkbox.d.ts +8 -0
- package/dist/ui/components/Checkbox.js +38 -0
- package/dist/ui/components/Checkbox.style.css +113 -0
- package/dist/ui/components/ConfirmDeleteModal.d.ts +33 -0
- package/dist/ui/components/ConfirmDeleteModal.js +74 -0
- package/dist/ui/components/ConfirmDeleteModal.style.css +89 -0
- package/dist/ui/components/CountdownDisplay.d.ts +14 -0
- package/dist/ui/components/CountdownDisplay.js +50 -0
- package/dist/ui/components/CountdownDisplay.style.css +4 -0
- package/dist/ui/components/DashboardStatsCard.d.ts +15 -0
- package/dist/ui/components/DashboardStatsCard.js +28 -0
- package/dist/ui/components/DashboardStatsCard.style.css +70 -0
- package/dist/ui/components/DescriptionField.d.ts +23 -0
- package/dist/ui/components/DescriptionField.js +28 -0
- package/dist/ui/components/DescriptionField.style.css +36 -0
- package/dist/ui/components/DetailViewShell.d.ts +51 -0
- package/dist/ui/components/DetailViewShell.js +50 -0
- package/dist/ui/components/Div.d.ts +20 -0
- package/dist/ui/components/Div.js +19 -0
- package/dist/ui/components/Div.style.css +6 -0
- package/dist/ui/components/Divider.d.ts +12 -0
- package/dist/ui/components/Divider.js +11 -0
- package/dist/ui/components/Divider.style.css +39 -0
- package/dist/ui/components/Drawer.d.ts +21 -0
- package/dist/ui/components/Drawer.js +72 -0
- package/dist/ui/components/Drawer.style.css +146 -0
- package/dist/ui/components/Dropdown.d.ts +36 -0
- package/dist/ui/components/Dropdown.js +142 -0
- package/dist/ui/components/Dropdown.style.css +112 -0
- package/dist/ui/components/DynamicSelect.d.ts +24 -0
- package/dist/ui/components/DynamicSelect.js +78 -0
- package/dist/ui/components/DynamicSelect.style.css +101 -0
- package/dist/ui/components/EmptyState.d.ts +12 -0
- package/dist/ui/components/EmptyState.js +17 -0
- package/dist/ui/components/EmptyState.style.css +30 -0
- package/dist/ui/components/FilterDrawer.d.ts +16 -0
- package/dist/ui/components/FilterDrawer.js +39 -0
- package/dist/ui/components/FilterDrawer.style.css +61 -0
- package/dist/ui/components/FlowDiagram.d.ts +33 -0
- package/dist/ui/components/FlowDiagram.js +15 -0
- package/dist/ui/components/FlowDiagram.style.css +77 -0
- package/dist/ui/components/Form.d.ts +27 -0
- package/dist/ui/components/Form.js +48 -0
- package/dist/ui/components/Form.style.css +27 -0
- package/dist/ui/components/FormField.d.ts +26 -0
- package/dist/ui/components/FormField.js +25 -0
- package/dist/ui/components/FormField.style.css +30 -0
- package/dist/ui/components/FormGrid.d.ts +46 -0
- package/dist/ui/components/FormGrid.js +42 -0
- package/dist/ui/components/FormGrid.style.css +32 -0
- package/dist/ui/components/HorizontalScroller.d.ts +33 -0
- package/dist/ui/components/HorizontalScroller.js +47 -0
- package/dist/ui/components/HorizontalScroller.style.css +109 -0
- package/dist/ui/components/IconButton.d.ts +32 -0
- package/dist/ui/components/IconButton.js +31 -0
- package/dist/ui/components/IconButton.style.css +103 -0
- package/dist/ui/components/ImageGallery.d.ts +17 -0
- package/dist/ui/components/ImageGallery.js +108 -0
- package/dist/ui/components/ImageGallery.style.css +163 -0
- package/dist/ui/components/ImageLightbox.d.ts +24 -0
- package/dist/ui/components/ImageLightbox.js +61 -0
- package/dist/ui/components/ImageLightbox.style.css +58 -0
- package/dist/ui/components/Input.d.ts +12 -0
- package/dist/ui/components/Input.js +29 -0
- package/dist/ui/components/Input.style.css +28 -0
- package/dist/ui/components/ItemRow.d.ts +10 -0
- package/dist/ui/components/ItemRow.js +7 -0
- package/dist/ui/components/ItemRow.style.css +33 -0
- package/dist/ui/components/Layout.d.ts +282 -0
- package/dist/ui/components/Layout.js +184 -0
- package/dist/ui/components/Layout.style.css +212 -0
- package/dist/ui/components/ListingLayout.d.ts +60 -0
- package/dist/ui/components/ListingLayout.js +121 -0
- package/dist/ui/components/ListingLayout.style.css +527 -0
- package/dist/ui/components/ListingViewShell.d.ts +38 -0
- package/dist/ui/components/ListingViewShell.js +11 -0
- package/dist/ui/components/Menu.d.ts +29 -0
- package/dist/ui/components/Menu.js +19 -0
- package/dist/ui/components/Menu.style.css +6 -0
- package/dist/ui/components/Modal.d.ts +18 -0
- package/dist/ui/components/Modal.js +79 -0
- package/dist/ui/components/Modal.style.css +102 -0
- package/dist/ui/components/Pagination.d.ts +25 -0
- package/dist/ui/components/Pagination.js +56 -0
- package/dist/ui/components/Pagination.style.css +76 -0
- package/dist/ui/components/PasswordStrengthIndicator.d.ts +12 -0
- package/dist/ui/components/PasswordStrengthIndicator.js +35 -0
- package/dist/ui/components/PasswordStrengthIndicator.style.css +56 -0
- package/dist/ui/components/PriceDisplay.d.ts +8 -0
- package/dist/ui/components/PriceDisplay.js +28 -0
- package/dist/ui/components/PriceDisplay.style.css +47 -0
- package/dist/ui/components/Progress.d.ts +23 -0
- package/dist/ui/components/Progress.js +32 -0
- package/dist/ui/components/Progress.style.css +81 -0
- package/dist/ui/components/Radio.d.ts +18 -0
- package/dist/ui/components/Radio.js +64 -0
- package/dist/ui/components/Radio.style.css +155 -0
- package/dist/ui/components/RatingDisplay.d.ts +8 -0
- package/dist/ui/components/RatingDisplay.js +15 -0
- package/dist/ui/components/RatingDisplay.style.css +50 -0
- package/dist/ui/components/ResponsiveView.d.ts +12 -0
- package/dist/ui/components/ResponsiveView.js +9 -0
- package/dist/ui/components/ResponsiveView.style.css +69 -0
- package/dist/ui/components/RoleBadge.d.ts +7 -0
- package/dist/ui/components/RoleBadge.js +21 -0
- package/dist/ui/components/RoleBadge.style.css +7 -0
- package/dist/ui/components/RowActionMenu.d.ts +13 -0
- package/dist/ui/components/RowActionMenu.js +17 -0
- package/dist/ui/components/RowActionMenu.style.css +91 -0
- package/dist/ui/components/SectionTabs.d.ts +19 -0
- package/dist/ui/components/SectionTabs.js +66 -0
- package/dist/ui/components/SectionTabs.style.css +163 -0
- package/dist/ui/components/Select.d.ts +19 -0
- package/dist/ui/components/Select.js +27 -0
- package/dist/ui/components/Select.style.css +177 -0
- package/dist/ui/components/Semantic.d.ts +154 -0
- package/dist/ui/components/Semantic.js +32 -0
- package/dist/ui/components/Semantic.style.css +14 -0
- package/dist/ui/components/SideDrawer.d.ts +28 -0
- package/dist/ui/components/SideDrawer.js +151 -0
- package/dist/ui/components/SideDrawer.style.css +214 -0
- package/dist/ui/components/SideModal.d.ts +25 -0
- package/dist/ui/components/SideModal.js +61 -0
- package/dist/ui/components/SideModal.style.css +77 -0
- package/dist/ui/components/Skeleton.d.ts +14 -0
- package/dist/ui/components/Skeleton.js +22 -0
- package/dist/ui/components/Skeleton.style.css +55 -0
- package/dist/ui/components/SkipToMain.d.ts +6 -0
- package/dist/ui/components/SkipToMain.js +6 -0
- package/dist/ui/components/SkipToMain.style.css +34 -0
- package/dist/ui/components/Slider.d.ts +17 -0
- package/dist/ui/components/Slider.js +38 -0
- package/dist/ui/components/Slider.style.css +17 -0
- package/dist/ui/components/SlottedListingView.d.ts +62 -0
- package/dist/ui/components/SlottedListingView.js +41 -0
- package/dist/ui/components/SortDropdown.d.ts +15 -0
- package/dist/ui/components/SortDropdown.js +8 -0
- package/dist/ui/components/SortDropdown.style.css +12 -0
- package/dist/ui/components/Spinner.d.ts +13 -0
- package/dist/ui/components/Spinner.js +15 -0
- package/dist/ui/components/Spinner.style.css +76 -0
- package/dist/ui/components/StackedViewShell.d.ts +50 -0
- package/dist/ui/components/StackedViewShell.js +39 -0
- package/dist/ui/components/StarRating.d.ts +17 -0
- package/dist/ui/components/StarRating.js +29 -0
- package/dist/ui/components/StarRating.style.css +44 -0
- package/dist/ui/components/StatsGrid.d.ts +18 -0
- package/dist/ui/components/StatsGrid.js +17 -0
- package/dist/ui/components/StatsGrid.style.css +96 -0
- package/dist/ui/components/StatusBadge.d.ts +18 -0
- package/dist/ui/components/StatusBadge.js +60 -0
- package/dist/ui/components/StatusBadge.style.css +5 -0
- package/dist/ui/components/StepperNav.d.ts +10 -0
- package/dist/ui/components/StepperNav.js +23 -0
- package/dist/ui/components/StepperNav.style.css +110 -0
- package/dist/ui/components/SummaryCard.d.ts +21 -0
- package/dist/ui/components/SummaryCard.js +15 -0
- package/dist/ui/components/SummaryCard.style.css +82 -0
- package/dist/ui/components/TabStrip.d.ts +34 -0
- package/dist/ui/components/TabStrip.js +57 -0
- package/dist/ui/components/TabStrip.style.css +97 -0
- package/dist/ui/components/TablePagination.d.ts +21 -0
- package/dist/ui/components/TablePagination.js +32 -0
- package/dist/ui/components/TablePagination.style.css +89 -0
- package/dist/ui/components/Tabs.d.ts +28 -0
- package/dist/ui/components/Tabs.js +41 -0
- package/dist/ui/components/Tabs.style.css +46 -0
- package/dist/ui/components/TagInput.d.ts +10 -0
- package/dist/ui/components/TagInput.js +60 -0
- package/dist/ui/components/TagInput.style.css +121 -0
- package/dist/ui/components/TextLink.d.ts +42 -0
- package/dist/ui/components/TextLink.js +48 -0
- package/dist/ui/components/TextLink.style.css +94 -0
- package/dist/ui/components/Textarea.d.ts +9 -0
- package/dist/ui/components/Textarea.js +21 -0
- package/dist/ui/components/Textarea.style.css +30 -0
- package/dist/ui/components/Toast.d.ts +15 -0
- package/dist/ui/components/Toast.js +61 -0
- package/dist/ui/components/Toast.style.css +114 -0
- package/dist/ui/components/Toggle.d.ts +12 -0
- package/dist/ui/components/Toggle.js +47 -0
- package/dist/ui/components/Toggle.style.css +107 -0
- package/dist/ui/components/Tooltip.d.ts +34 -0
- package/dist/ui/components/Tooltip.js +110 -0
- package/dist/ui/components/Tooltip.style.css +114 -0
- package/dist/ui/components/Typography.d.ts +50 -0
- package/dist/ui/components/Typography.js +103 -0
- package/dist/ui/components/Typography.style.css +178 -0
- package/dist/ui/components/UnsavedChangesModal.d.ts +17 -0
- package/dist/ui/components/UnsavedChangesModal.js +52 -0
- package/dist/ui/components/UnsavedChangesModal.style.css +33 -0
- package/dist/ui/components/ViewToggle.d.ts +15 -0
- package/dist/ui/components/ViewToggle.js +29 -0
- package/dist/ui/components/ViewToggle.style.css +50 -0
- package/dist/ui/components/index.style.css +76 -0
- package/dist/ui/index.d.ts +165 -1644
- package/dist/ui/index.js +87 -4784
- package/dist/ui/rich-text/RichText.d.ts +46 -0
- package/dist/ui/rich-text/RichText.js +172 -0
- package/dist/ui/rich-text/RichText.style.css +5 -0
- package/dist/ui/rich-text/index.d.ts +2 -0
- package/dist/ui/rich-text/index.js +1 -0
- package/dist/ui/style.helper.d.ts +7 -0
- package/dist/ui/style.helper.js +12 -0
- package/dist/utils/animation.helper.d.ts +19 -0
- package/dist/utils/animation.helper.js +19 -0
- package/dist/utils/array.helper.d.ts +17 -0
- package/dist/utils/array.helper.js +53 -0
- package/dist/utils/business-day.d.ts +47 -0
- package/dist/utils/business-day.js +68 -0
- package/dist/utils/client.d.ts +1 -0
- package/dist/utils/client.js +1 -0
- package/dist/utils/color.helper.d.ts +32 -0
- package/dist/utils/color.helper.js +51 -0
- package/dist/utils/cookie.converter.d.ts +7 -0
- package/dist/utils/cookie.converter.js +32 -0
- package/dist/utils/date.formatter.d.ts +22 -0
- package/dist/utils/date.formatter.js +194 -0
- package/dist/utils/event-manager.d.ts +45 -0
- package/dist/utils/event-manager.js +185 -0
- package/dist/utils/filter.helper.d.ts +18 -0
- package/dist/utils/filter.helper.js +21 -0
- package/dist/utils/id-generators.d.ts +243 -0
- package/dist/utils/id-generators.js +360 -0
- package/dist/utils/index.d.ts +17 -545
- package/dist/utils/index.js +18 -4
- package/dist/utils/media-field.d.ts +2 -0
- package/dist/utils/media-field.js +1 -0
- package/dist/utils/number.formatter.d.ts +13 -0
- package/dist/utils/number.formatter.js +100 -0
- package/dist/utils/object.helper.d.ts +16 -0
- package/dist/utils/object.helper.js +82 -0
- package/dist/utils/pagination.helper.d.ts +23 -0
- package/dist/utils/pagination.helper.js +24 -0
- package/dist/utils/schema-ui.d.ts +83 -0
- package/dist/utils/schema-ui.js +185 -0
- package/dist/utils/sorting.helper.d.ts +7 -0
- package/dist/utils/sorting.helper.js +16 -0
- package/dist/utils/string.formatter.d.ts +19 -0
- package/dist/utils/string.formatter.js +140 -0
- package/dist/utils/type.converter.d.ts +14 -0
- package/dist/utils/type.converter.js +61 -0
- package/dist/validation/ZodSetup.d.ts +5 -0
- package/dist/validation/ZodSetup.js +11 -0
- package/dist/validation/email.validator.d.ts +7 -0
- package/dist/validation/email.validator.js +33 -0
- package/dist/validation/index.d.ts +9 -126
- package/dist/validation/index.js +8 -4
- package/dist/validation/input.validator.d.ts +11 -0
- package/dist/validation/input.validator.js +33 -0
- package/dist/validation/password.validator.d.ts +21 -0
- package/dist/validation/password.validator.js +77 -0
- package/dist/validation/phone.validator.d.ts +9 -0
- package/dist/validation/phone.validator.js +41 -0
- package/dist/validation/schemas.d.ts +267 -0
- package/dist/validation/schemas.js +176 -0
- package/dist/validation/url.validator.d.ts +7 -0
- package/dist/validation/url.validator.js +44 -0
- package/dist/validation/zod-error-map.d.ts +17 -0
- package/dist/validation/zod-error-map.js +85 -0
- package/dist/values/index.d.ts +6 -0
- package/dist/values/index.js +6 -0
- package/dist/values/success-messages.d.ts +242 -0
- package/dist/values/success-messages.js +272 -0
- package/package.json +87 -445
- package/dist/chunk-2NMEKWO5.js +0 -35
- package/dist/chunk-2NMEKWO5.js.map +0 -1
- package/dist/chunk-6344OTT4.js +0 -329
- package/dist/chunk-6344OTT4.js.map +0 -1
- package/dist/chunk-7HUFI4MW.cjs +0 -941
- package/dist/chunk-7HUFI4MW.cjs.map +0 -1
- package/dist/chunk-AZ2XDBYA.cjs +0 -150
- package/dist/chunk-AZ2XDBYA.cjs.map +0 -1
- package/dist/chunk-CI4ZFLS7.js +0 -1162
- package/dist/chunk-CI4ZFLS7.js.map +0 -1
- package/dist/chunk-DSCHV5OD.js +0 -620
- package/dist/chunk-DSCHV5OD.js.map +0 -1
- package/dist/chunk-EEMSMWIZ.js +0 -566
- package/dist/chunk-EEMSMWIZ.js.map +0 -1
- package/dist/chunk-EPJNBIKL.js +0 -916
- package/dist/chunk-EPJNBIKL.js.map +0 -1
- package/dist/chunk-FJEY6LN2.cjs +0 -64
- package/dist/chunk-FJEY6LN2.cjs.map +0 -1
- package/dist/chunk-GZXXRVTM.cjs +0 -343
- package/dist/chunk-GZXXRVTM.cjs.map +0 -1
- package/dist/chunk-IE5L2QHV.js +0 -204
- package/dist/chunk-IE5L2QHV.js.map +0 -1
- package/dist/chunk-JPHORBTI.cjs +0 -366
- package/dist/chunk-JPHORBTI.cjs.map +0 -1
- package/dist/chunk-K4C5Z22R.js +0 -146
- package/dist/chunk-K4C5Z22R.js.map +0 -1
- package/dist/chunk-PAHR3D5L.js +0 -56
- package/dist/chunk-PAHR3D5L.js.map +0 -1
- package/dist/chunk-PE44UBFV.js +0 -324
- package/dist/chunk-PE44UBFV.js.map +0 -1
- package/dist/chunk-RNELVIKK.cjs +0 -1287
- package/dist/chunk-RNELVIKK.cjs.map +0 -1
- package/dist/chunk-S367Y35J.cjs +0 -39
- package/dist/chunk-S367Y35J.cjs.map +0 -1
- package/dist/chunk-ULLW73KN.cjs +0 -217
- package/dist/chunk-ULLW73KN.cjs.map +0 -1
- package/dist/chunk-UNYFAUWW.cjs +0 -630
- package/dist/chunk-UNYFAUWW.cjs.map +0 -1
- package/dist/chunk-V55QYTXF.js +0 -259
- package/dist/chunk-V55QYTXF.js.map +0 -1
- package/dist/chunk-WKVCFDEA.cjs +0 -599
- package/dist/chunk-WKVCFDEA.cjs.map +0 -1
- package/dist/chunk-YT4QVIBP.cjs +0 -292
- package/dist/chunk-YT4QVIBP.cjs.map +0 -1
- package/dist/cli/index.cjs +0 -155
- package/dist/cli/index.cjs.map +0 -1
- package/dist/cli/index.d.cts +0 -41
- package/dist/cli/index.js.map +0 -1
- package/dist/contracts/index.cjs +0 -37
- package/dist/contracts/index.cjs.map +0 -1
- package/dist/contracts/index.d.cts +0 -728
- package/dist/contracts/index.js.map +0 -1
- package/dist/core/index.cjs +0 -84
- package/dist/core/index.cjs.map +0 -1
- package/dist/core/index.d.cts +0 -329
- package/dist/core/index.js.map +0 -1
- package/dist/errors/index.cjs +0 -57
- package/dist/errors/index.cjs.map +0 -1
- package/dist/errors/index.d.cts +0 -96
- package/dist/errors/index.js.map +0 -1
- package/dist/extend-D57fwPSu.d.cts +0 -122
- package/dist/extend-D57fwPSu.d.ts +0 -122
- package/dist/extend-D_0wzsse.d.cts +0 -79
- package/dist/extend-D_0wzsse.d.ts +0 -79
- package/dist/extend-jcOQfU2G.d.cts +0 -162
- package/dist/extend-jcOQfU2G.d.ts +0 -162
- package/dist/feature-C8mVv66I.d.cts +0 -84
- package/dist/feature-C8mVv66I.d.ts +0 -84
- package/dist/feature-DENiK3vd.d.cts +0 -55
- package/dist/feature-DENiK3vd.d.ts +0 -55
- package/dist/feature-RWXQ_lnf.d.cts +0 -41
- package/dist/feature-RWXQ_lnf.d.ts +0 -41
- package/dist/features/about/index.cjs +0 -286
- package/dist/features/about/index.cjs.map +0 -1
- package/dist/features/about/index.d.cts +0 -42
- package/dist/features/about/index.js.map +0 -1
- package/dist/features/account/index.cjs +0 -1032
- package/dist/features/account/index.cjs.map +0 -1
- package/dist/features/account/index.d.cts +0 -555
- package/dist/features/account/index.js.map +0 -1
- package/dist/features/admin/index.cjs +0 -2747
- package/dist/features/admin/index.cjs.map +0 -1
- package/dist/features/admin/index.d.cts +0 -554
- package/dist/features/admin/index.js.map +0 -1
- package/dist/features/auctions/index.cjs +0 -1219
- package/dist/features/auctions/index.cjs.map +0 -1
- package/dist/features/auctions/index.d.cts +0 -513
- package/dist/features/auctions/index.js.map +0 -1
- package/dist/features/auth/index.cjs +0 -1897
- package/dist/features/auth/index.cjs.map +0 -1
- package/dist/features/auth/index.d.cts +0 -315
- package/dist/features/auth/index.js.map +0 -1
- package/dist/features/auth/server.cjs +0 -531
- package/dist/features/auth/server.cjs.map +0 -1
- package/dist/features/auth/server.d.cts +0 -24
- package/dist/features/auth/server.js.map +0 -1
- package/dist/features/before-after/index.cjs +0 -559
- package/dist/features/before-after/index.cjs.map +0 -1
- package/dist/features/before-after/index.d.cts +0 -128
- package/dist/features/before-after/index.js.map +0 -1
- package/dist/features/blog/index.cjs +0 -4088
- package/dist/features/blog/index.cjs.map +0 -1
- package/dist/features/blog/index.d.cts +0 -492
- package/dist/features/blog/index.js.map +0 -1
- package/dist/features/blog/server.cjs +0 -184
- package/dist/features/blog/server.cjs.map +0 -1
- package/dist/features/blog/server.d.cts +0 -74
- package/dist/features/blog/server.js.map +0 -1
- package/dist/features/cart/index.cjs +0 -1097
- package/dist/features/cart/index.cjs.map +0 -1
- package/dist/features/cart/index.d.cts +0 -451
- package/dist/features/cart/index.js.map +0 -1
- package/dist/features/categories/index.cjs +0 -2062
- package/dist/features/categories/index.cjs.map +0 -1
- package/dist/features/categories/index.d.cts +0 -461
- package/dist/features/categories/index.js.map +0 -1
- package/dist/features/categories/server.cjs +0 -796
- package/dist/features/categories/server.cjs.map +0 -1
- package/dist/features/categories/server.d.cts +0 -47
- package/dist/features/categories/server.js.map +0 -1
- package/dist/features/checkout/index.cjs +0 -200
- package/dist/features/checkout/index.cjs.map +0 -1
- package/dist/features/checkout/index.d.cts +0 -70
- package/dist/features/checkout/index.js.map +0 -1
- package/dist/features/cms/index.cjs +0 -5
- package/dist/features/cms/index.cjs.map +0 -1
- package/dist/features/cms/index.d.cts +0 -2
- package/dist/features/cms/index.js.map +0 -1
- package/dist/features/collections/index.cjs +0 -394
- package/dist/features/collections/index.cjs.map +0 -1
- package/dist/features/collections/index.d.cts +0 -148
- package/dist/features/collections/index.js.map +0 -1
- package/dist/features/consultation/index.cjs +0 -1099
- package/dist/features/consultation/index.cjs.map +0 -1
- package/dist/features/consultation/index.d.cts +0 -172
- package/dist/features/consultation/index.js.map +0 -1
- package/dist/features/contact/index.cjs +0 -593
- package/dist/features/contact/index.cjs.map +0 -1
- package/dist/features/contact/index.d.cts +0 -56
- package/dist/features/contact/index.js.map +0 -1
- package/dist/features/copilot/index.cjs +0 -688
- package/dist/features/copilot/index.cjs.map +0 -1
- package/dist/features/copilot/index.d.cts +0 -47
- package/dist/features/copilot/index.js.map +0 -1
- package/dist/features/corporate/index.cjs +0 -796
- package/dist/features/corporate/index.cjs.map +0 -1
- package/dist/features/corporate/index.d.cts +0 -183
- package/dist/features/corporate/index.js.map +0 -1
- package/dist/features/events/index.cjs +0 -1486
- package/dist/features/events/index.cjs.map +0 -1
- package/dist/features/events/index.d.cts +0 -841
- package/dist/features/events/index.js.map +0 -1
- package/dist/features/events/server.cjs +0 -199
- package/dist/features/events/server.cjs.map +0 -1
- package/dist/features/events/server.d.cts +0 -40
- package/dist/features/events/server.js.map +0 -1
- package/dist/features/faq/index.cjs +0 -1714
- package/dist/features/faq/index.cjs.map +0 -1
- package/dist/features/faq/index.d.cts +0 -619
- package/dist/features/faq/index.js.map +0 -1
- package/dist/features/filters/index.cjs +0 -1073
- package/dist/features/filters/index.cjs.map +0 -1
- package/dist/features/filters/index.d.cts +0 -136
- package/dist/features/filters/index.js.map +0 -1
- package/dist/features/forms/index.cjs +0 -936
- package/dist/features/forms/index.cjs.map +0 -1
- package/dist/features/forms/index.d.cts +0 -129
- package/dist/features/forms/index.js.map +0 -1
- package/dist/features/homepage/index.cjs +0 -6321
- package/dist/features/homepage/index.cjs.map +0 -1
- package/dist/features/homepage/index.d.cts +0 -846
- package/dist/features/homepage/index.js.map +0 -1
- package/dist/features/homepage/server.cjs +0 -1038
- package/dist/features/homepage/server.cjs.map +0 -1
- package/dist/features/homepage/server.d.cts +0 -121
- package/dist/features/homepage/server.js.map +0 -1
- package/dist/features/layout/index.cjs +0 -1766
- package/dist/features/layout/index.cjs.map +0 -1
- package/dist/features/layout/index.d.cts +0 -315
- package/dist/features/layout/index.js.map +0 -1
- package/dist/features/loyalty/index.cjs +0 -352
- package/dist/features/loyalty/index.cjs.map +0 -1
- package/dist/features/loyalty/index.d.cts +0 -174
- package/dist/features/loyalty/index.js.map +0 -1
- package/dist/features/media/index.cjs +0 -3620
- package/dist/features/media/index.cjs.map +0 -1
- package/dist/features/media/index.d.cts +0 -425
- package/dist/features/media/index.js.map +0 -1
- package/dist/features/orders/index.cjs +0 -882
- package/dist/features/orders/index.cjs.map +0 -1
- package/dist/features/orders/index.d.cts +0 -370
- package/dist/features/orders/index.js.map +0 -1
- package/dist/features/payments/index.cjs +0 -341
- package/dist/features/payments/index.cjs.map +0 -1
- package/dist/features/payments/index.d.cts +0 -141
- package/dist/features/payments/index.js.map +0 -1
- package/dist/features/pre-orders/index.cjs +0 -558
- package/dist/features/pre-orders/index.cjs.map +0 -1
- package/dist/features/pre-orders/index.d.cts +0 -170
- package/dist/features/pre-orders/index.js.map +0 -1
- package/dist/features/pre-orders/server.cjs +0 -111
- package/dist/features/pre-orders/server.cjs.map +0 -1
- package/dist/features/pre-orders/server.d.cts +0 -17
- package/dist/features/pre-orders/server.js.map +0 -1
- package/dist/features/products/index.cjs +0 -2513
- package/dist/features/products/index.cjs.map +0 -1
- package/dist/features/products/index.d.cts +0 -1066
- package/dist/features/products/index.js.map +0 -1
- package/dist/features/products/server.cjs +0 -809
- package/dist/features/products/server.cjs.map +0 -1
- package/dist/features/products/server.d.cts +0 -52
- package/dist/features/products/server.js.map +0 -1
- package/dist/features/promotions/index.cjs +0 -977
- package/dist/features/promotions/index.cjs.map +0 -1
- package/dist/features/promotions/index.d.cts +0 -301
- package/dist/features/promotions/index.js.map +0 -1
- package/dist/features/reviews/index.cjs +0 -2324
- package/dist/features/reviews/index.cjs.map +0 -1
- package/dist/features/reviews/index.d.cts +0 -434
- package/dist/features/reviews/index.js.map +0 -1
- package/dist/features/reviews/server.cjs +0 -776
- package/dist/features/reviews/server.cjs.map +0 -1
- package/dist/features/reviews/server.d.cts +0 -49
- package/dist/features/reviews/server.js.map +0 -1
- package/dist/features/search/index.cjs +0 -1368
- package/dist/features/search/index.cjs.map +0 -1
- package/dist/features/search/index.d.cts +0 -298
- package/dist/features/search/index.js.map +0 -1
- package/dist/features/search/server.cjs +0 -154
- package/dist/features/search/server.cjs.map +0 -1
- package/dist/features/search/server.d.cts +0 -83
- package/dist/features/search/server.js.map +0 -1
- package/dist/features/seller/index.cjs +0 -2086
- package/dist/features/seller/index.cjs.map +0 -1
- package/dist/features/seller/index.d.cts +0 -926
- package/dist/features/seller/index.js.map +0 -1
- package/dist/features/stores/index.cjs +0 -1942
- package/dist/features/stores/index.cjs.map +0 -1
- package/dist/features/stores/index.d.cts +0 -536
- package/dist/features/stores/index.js.map +0 -1
- package/dist/features/stores/server.cjs +0 -451
- package/dist/features/stores/server.cjs.map +0 -1
- package/dist/features/stores/server.d.cts +0 -106
- package/dist/features/stores/server.js.map +0 -1
- package/dist/features/whatsapp-bot/index.cjs +0 -168
- package/dist/features/whatsapp-bot/index.cjs.map +0 -1
- package/dist/features/whatsapp-bot/index.d.cts +0 -85
- package/dist/features/whatsapp-bot/index.js.map +0 -1
- package/dist/features/wishlist/index.cjs +0 -904
- package/dist/features/wishlist/index.cjs.map +0 -1
- package/dist/features/wishlist/index.d.cts +0 -360
- package/dist/features/wishlist/index.js.map +0 -1
- package/dist/http/index.cjs +0 -21
- package/dist/http/index.cjs.map +0 -1
- package/dist/http/index.d.cts +0 -61
- package/dist/http/index.js.map +0 -1
- package/dist/index-B6T9NNcG.d.cts +0 -9
- package/dist/index-B6T9NNcG.d.ts +0 -9
- package/dist/index-CakUKzrE.d.cts +0 -10
- package/dist/index-CakUKzrE.d.ts +0 -10
- package/dist/index-D0Fxv9Z8.d.cts +0 -32
- package/dist/index-D0Fxv9Z8.d.ts +0 -32
- package/dist/index-Dh42RtMY.d.cts +0 -54
- package/dist/index-Dh42RtMY.d.ts +0 -54
- package/dist/index.cjs +0 -1182
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -17
- package/dist/index.js.map +0 -1
- package/dist/instrumentation/index.cjs +0 -17
- package/dist/instrumentation/index.cjs.map +0 -1
- package/dist/instrumentation/index.d.cts +0 -66
- package/dist/instrumentation/index.js.map +0 -1
- package/dist/monitoring/index.cjs +0 -141
- package/dist/monitoring/index.cjs.map +0 -1
- package/dist/monitoring/index.d.cts +0 -181
- package/dist/monitoring/index.js.map +0 -1
- package/dist/next/index.cjs +0 -693
- package/dist/next/index.cjs.map +0 -1
- package/dist/next/index.d.cts +0 -777
- package/dist/next/index.js.map +0 -1
- package/dist/providers/auth-firebase/index.cjs +0 -400
- package/dist/providers/auth-firebase/index.cjs.map +0 -1
- package/dist/providers/auth-firebase/index.d.cts +0 -137
- package/dist/providers/auth-firebase/index.js.map +0 -1
- package/dist/providers/db-firebase/index.cjs +0 -533
- package/dist/providers/db-firebase/index.cjs.map +0 -1
- package/dist/providers/db-firebase/index.d.cts +0 -265
- package/dist/providers/db-firebase/index.js.map +0 -1
- package/dist/providers/email-resend/index.cjs +0 -58
- package/dist/providers/email-resend/index.cjs.map +0 -1
- package/dist/providers/email-resend/index.d.cts +0 -73
- package/dist/providers/email-resend/index.js.map +0 -1
- package/dist/providers/payment-razorpay/index.cjs +0 -111
- package/dist/providers/payment-razorpay/index.cjs.map +0 -1
- package/dist/providers/payment-razorpay/index.d.cts +0 -96
- package/dist/providers/payment-razorpay/index.js.map +0 -1
- package/dist/providers/search-algolia/index.cjs +0 -301
- package/dist/providers/search-algolia/index.cjs.map +0 -1
- package/dist/providers/search-algolia/index.d.cts +0 -251
- package/dist/providers/search-algolia/index.d.ts +0 -251
- package/dist/providers/search-algolia/index.js +0 -280
- package/dist/providers/search-algolia/index.js.map +0 -1
- package/dist/providers/shipping-shiprocket/index.cjs +0 -147
- package/dist/providers/shipping-shiprocket/index.cjs.map +0 -1
- package/dist/providers/shipping-shiprocket/index.d.cts +0 -236
- package/dist/providers/shipping-shiprocket/index.js.map +0 -1
- package/dist/providers/storage-firebase/index.cjs +0 -176
- package/dist/providers/storage-firebase/index.cjs.map +0 -1
- package/dist/providers/storage-firebase/index.d.cts +0 -53
- package/dist/providers/storage-firebase/index.js.map +0 -1
- package/dist/react/index.cjs +0 -1687
- package/dist/react/index.cjs.map +0 -1
- package/dist/react/index.d.cts +0 -788
- package/dist/react/index.js.map +0 -1
- package/dist/repository-BO60jtdT.d.cts +0 -61
- package/dist/repository-BO60jtdT.d.ts +0 -61
- package/dist/repository-jKU_Ji1P.d.cts +0 -44
- package/dist/repository-jKU_Ji1P.d.ts +0 -44
- package/dist/security/index.cjs +0 -138
- package/dist/security/index.cjs.map +0 -1
- package/dist/security/index.d.cts +0 -309
- package/dist/security/index.js.map +0 -1
- package/dist/seed/index.cjs +0 -1085
- package/dist/seed/index.cjs.map +0 -1
- package/dist/seed/index.d.cts +0 -397
- package/dist/seed/index.js.map +0 -1
- package/dist/seo/index.cjs +0 -81
- package/dist/seo/index.cjs.map +0 -1
- package/dist/seo/index.d.cts +0 -150
- package/dist/seo/index.js.map +0 -1
- package/dist/style/tailwind/index.cjs +0 -40
- package/dist/style/tailwind/index.cjs.map +0 -1
- package/dist/style/tailwind/index.d.cts +0 -34
- package/dist/style/tailwind/index.js.map +0 -1
- package/dist/style/vanilla/index.cjs +0 -40
- package/dist/style/vanilla/index.cjs.map +0 -1
- package/dist/style/vanilla/index.d.cts +0 -26
- package/dist/style/vanilla/index.js.map +0 -1
- package/dist/style-BSlM-eWG.d.cts +0 -25
- package/dist/style-BSlM-eWG.d.ts +0 -25
- package/dist/tokens/index.cjs +0 -45
- package/dist/tokens/index.cjs.map +0 -1
- package/dist/tokens/index.d.cts +0 -734
- package/dist/tokens/index.js.map +0 -1
- package/dist/ui/index.cjs +0 -4870
- package/dist/ui/index.cjs.map +0 -1
- package/dist/ui/index.d.cts +0 -1644
- package/dist/ui/index.js.map +0 -1
- package/dist/utils/index.cjs +0 -505
- package/dist/utils/index.cjs.map +0 -1
- package/dist/utils/index.d.cts +0 -545
- package/dist/utils/index.js.map +0 -1
- package/dist/validation/index.cjs +0 -153
- package/dist/validation/index.cjs.map +0 -1
- package/dist/validation/index.d.cts +0 -126
- package/dist/validation/index.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/errors/base-error.ts","../../../src/errors/error-codes.ts","../../../src/errors/api-error.ts","../../../src/errors/validation-error.ts","../../../src/errors/authentication-error.ts","../../../src/errors/authorization-error.ts","../../../src/errors/not-found-error.ts","../../../src/errors/database-error.ts","../../../src/errors/error-handler.ts","../../../src/errors/index.ts","../../../src/http/ApiClient.ts","../../../src/features/homepage/hooks/useHomepage.ts","../../../src/features/homepage/hooks/useHeroCarousel.ts","../../../src/features/homepage/hooks/useFeaturedProducts.ts","../../../src/features/homepage/hooks/useFeaturedAuctions.ts","../../../src/features/homepage/hooks/useFeaturedPreOrders.ts","../../../src/features/homepage/hooks/useTopCategories.ts","../../../src/features/homepage/hooks/useTopBrands.ts","../../../src/features/homepage/hooks/useBlogArticles.ts","../../../src/ui/components/Semantic.tsx","../../../src/ui/components/Div.tsx","../../../src/ui/components/Typography.tsx","../../../node_modules/shared/src/utils/mergeClasses.ts","../../../node_modules/shared/src/utils/toKebabCase.ts","../../../node_modules/shared/src/utils/toCamelCase.ts","../../../node_modules/shared/src/utils/toPascalCase.ts","../../../node_modules/lucide-react/src/defaultAttributes.ts","../../../node_modules/shared/src/utils/hasA11yProp.ts","../../../node_modules/lucide-react/src/context.ts","../../../node_modules/lucide-react/src/Icon.ts","../../../node_modules/lucide-react/src/createLucideIcon.ts","../../../node_modules/lucide-react/src/icons/arrow-right.ts","../../../node_modules/lucide-react/src/icons/chevron-down.ts","../../../node_modules/lucide-react/src/icons/loader-circle.ts","../../../node_modules/lucide-react/src/icons/mail.ts","../../../node_modules/lucide-react/src/icons/message-circle.ts","../../../node_modules/lucide-react/src/icons/sparkles.ts","../../../node_modules/lucide-react/src/icons/star.ts","../../../src/ui/components/Button.tsx","../../../src/ui/components/TextLink.tsx","../../../src/ui/components/Accordion.tsx","../../../src/ui/components/Input.tsx","../../../src/ui/components/Textarea.tsx","../../../src/ui/components/StarRating.tsx","../../../src/ui/components/Layout.tsx","../../../src/ui/components/HorizontalScroller.tsx","../../../src/tokens/index.ts","../../../src/features/homepage/components/HeroSection.tsx","../../../src/react/hooks/useMediaQuery.ts","../../../src/core/Logger.ts","../../../src/core/Queue.ts","../../../src/core/StorageManager.ts","../../../src/core/EventBus.ts","../../../src/security/authorization.ts","../../../src/monitoring/client-logger.ts","../../../src/monitoring/server-logger.ts","../../../src/features/homepage/components/CharacterHotspot.tsx","../../../src/features/homepage/components/CharacterHotspotForm.tsx","../../../src/features/homepage/components/HeroBanner.tsx","../../../src/features/media/MediaImage.tsx","../../../src/features/media/MediaVideo.tsx","../../../src/features/media/types/index.ts","../../../src/features/homepage/components/HeroCarousel.tsx","../../../src/features/homepage/components/PromoGrid.tsx","../../../src/features/homepage/components/TrustBadges.tsx","../../../src/features/homepage/components/TestimonialsCarousel.tsx","../../../src/features/homepage/components/BeforeAfterCard.tsx","../../../src/features/homepage/components/NewsletterBanner.tsx","../../../src/features/homepage/components/HomepageView.tsx","../../../src/features/homepage/components/SectionCarousel.tsx","../../../src/features/homepage/components/WelcomeSection.tsx","../../../src/features/homepage/components/TrustFeaturesSection.tsx","../../../src/features/homepage/components/StatsCounterSection.tsx","../../../src/features/homepage/components/HowItWorksSection.tsx","../../../src/features/homepage/components/CustomerReviewsSection.tsx","../../../src/features/homepage/components/FAQSection.tsx","../../../src/features/homepage/components/NewsletterSection.tsx","../../../src/features/homepage/components/AdvertisementBanner.tsx","../../../src/features/homepage/components/SecurityHighlightsSection.tsx","../../../src/features/homepage/components/SiteFeaturesSection.tsx","../../../src/features/homepage/components/TrustIndicatorsSection.tsx","../../../src/features/homepage/components/WhatsAppCommunitySection.tsx","../../../src/features/homepage/components/HomepageSkeleton.tsx","../../../src/features/homepage/components/FeaturedResultsSection.tsx","../../../src/features/homepage/components/HowItWorksInfoView.tsx"],"names":["useQuery","MIN_COUNT","React","jsx","jsxs","createContext","useContext","forwardRef","_a","createElement","_b","Component","__iconNode","twMerge","Link","useState","useRef","useCallback","useEffect","Fragment","Image","e","z","useTranslations","position","flex"],"mappings":"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","file":"index.cjs","sourcesContent":["export class AppError extends Error {\n constructor(\n public statusCode: number,\n public message: string,\n public code: string,\n public data?: unknown,\n ) {\n super(message);\n this.name = this.constructor.name;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n\n toJSON(): {\n success: false;\n error: string;\n code: string;\n statusCode: number;\n data?: unknown;\n } {\n return {\n success: false,\n error: this.message,\n code: this.code,\n statusCode: this.statusCode,\n ...(this.data !== undefined && { data: this.data }),\n };\n }\n}\n","export const ERROR_CODES = {\n // Authentication\n AUTH_INVALID_CREDENTIALS: \"AUTH_001\",\n AUTH_TOKEN_EXPIRED: \"AUTH_002\",\n AUTH_TOKEN_INVALID: \"AUTH_003\",\n AUTH_SESSION_EXPIRED: \"AUTH_004\",\n AUTH_EMAIL_NOT_VERIFIED: \"AUTH_005\",\n\n // Validation\n VALIDATION_REQUIRED_FIELD: \"VAL_001\",\n VALIDATION_INVALID_INPUT: \"VAL_002\",\n VALIDATION_INVALID_EMAIL: \"VAL_003\",\n VALIDATION_INVALID_PASSWORD: \"VAL_004\",\n VALIDATION_INVALID_PHONE: \"VAL_005\",\n\n // User\n USER_NOT_FOUND: \"USER_001\",\n USER_ALREADY_EXISTS: \"USER_002\",\n USER_NOT_AUTHENTICATED: \"USER_003\",\n USER_ACCOUNT_DISABLED: \"USER_004\",\n\n // Database\n DB_OPERATION_FAILED: \"DB_001\",\n DB_NOT_FOUND: \"DB_002\",\n DB_DUPLICATE_ENTRY: \"DB_003\",\n\n // Email\n EMAIL_SEND_FAILED: \"EMAIL_001\",\n EMAIL_INVALID_TEMPLATE: \"EMAIL_002\",\n EMAIL_RATE_LIMITED: \"EMAIL_003\",\n EMAIL_DELIVERY_FAILED: \"EMAIL_004\",\n\n // Password\n PWD_RESET_TOKEN_EXPIRED: \"PWD_001\",\n PWD_RESET_TOKEN_INVALID: \"PWD_002\",\n PWD_TOO_WEAK: \"PWD_003\",\n PWD_HISTORY_REUSE: \"PWD_004\",\n PWD_SAME_AS_CURRENT: \"PWD_005\",\n\n // Authorization\n AUTHZ_FORBIDDEN: \"AUTHZ_001\",\n AUTHZ_INSUFFICIENT_ROLE: \"AUTHZ_002\",\n\n // General\n GEN_BAD_REQUEST: \"GEN_001\",\n GEN_NOT_FOUND: \"GEN_002\",\n GEN_INTERNAL_ERROR: \"GEN_003\",\n GEN_SERVICE_UNAVAILABLE: \"GEN_004\",\n GEN_RATE_LIMITED: \"GEN_005\",\n GEN_UNKNOWN: \"GEN_999\",\n} as const;\n\nexport type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];\n\nexport const ERROR_MESSAGES: Record<ErrorCode, string> = {\n // Authentication\n AUTH_001: \"Invalid email or password\",\n AUTH_002: \"Your session has expired. Please log in again\",\n AUTH_003: \"Invalid authentication token\",\n AUTH_004: \"Your session has expired. Please log in again\",\n AUTH_005: \"Please verify your email address before logging in\",\n\n // Validation\n VAL_001: \"This field is required\",\n VAL_002: \"Invalid input provided\",\n VAL_003: \"Please enter a valid email address\",\n VAL_004:\n \"Password must be at least 12 characters with uppercase, lowercase, number and special character\",\n VAL_005: \"Please enter a valid phone number\",\n\n // User\n USER_001: \"User not found\",\n USER_002: \"An account with this email already exists\",\n USER_003: \"Please log in to continue\",\n USER_004: \"Your account has been disabled. Please contact support\",\n\n // Database\n DB_001: \"A database error occurred. Please try again\",\n DB_002: \"The requested resource was not found\",\n DB_003: \"This record already exists\",\n\n // Email\n EMAIL_001: \"Failed to send email. Please try again\",\n EMAIL_002: \"Invalid email template\",\n EMAIL_003: \"Too many emails sent. Please wait before trying again\",\n EMAIL_004: \"Email delivery failed. Please check the address and try again\",\n\n // Password\n PWD_001: \"Password reset link has expired. Please request a new one\",\n PWD_002: \"Invalid password reset link\",\n PWD_003: \"Password does not meet security requirements\",\n PWD_004: \"Cannot reuse a recent password\",\n PWD_005: \"New password must be different from your current password\",\n\n // Authorization\n AUTHZ_001: \"You do not have permission to perform this action\",\n AUTHZ_002: \"Insufficient role to perform this action\",\n\n // General\n GEN_001: \"Bad request\",\n GEN_002: \"The requested resource was not found\",\n GEN_003: \"An internal server error occurred\",\n GEN_004: \"Service temporarily unavailable\",\n GEN_005: \"Too many requests. Please slow down\",\n GEN_999: \"An unknown error occurred\",\n};\n","import { AppError } from \"./base-error\";\n\nexport class ApiError extends AppError {\n constructor(statusCode: number, message: string, data?: unknown) {\n super(statusCode, message, \"API_ERROR\", data);\n }\n}\n","import { AppError } from \"./base-error\";\n\nexport class ValidationError extends AppError {\n constructor(message: string, fields?: unknown) {\n super(400, message, \"VALIDATION_ERROR\", fields);\n }\n}\n","import { AppError } from \"./base-error\";\n\nexport class AuthenticationError extends AppError {\n constructor(message: string, data?: unknown) {\n super(401, message, \"AUTHENTICATION_ERROR\", data);\n }\n}\n","import { AppError } from \"./base-error\";\n\nexport class AuthorizationError extends AppError {\n constructor(message: string, data?: unknown) {\n super(403, message, \"AUTHORIZATION_ERROR\", data);\n }\n}\n","import { AppError } from \"./base-error\";\n\nexport class NotFoundError extends AppError {\n constructor(message: string, data?: unknown) {\n super(404, message, \"NOT_FOUND\", data);\n }\n}\n","import { AppError } from \"./base-error\";\n\nexport class DatabaseError extends AppError {\n constructor(message: string, data?: unknown) {\n super(500, message, \"DATABASE_ERROR\", data);\n }\n}\n","import { NextResponse } from \"next/server.js\";\nimport { AppError } from \"./base-error\";\nimport { ERROR_CODES, ERROR_MESSAGES } from \"./error-codes\";\n\n/**\n * Handle API errors with consistent response format.\n * Use in Next.js API route catch blocks.\n */\nexport function handleApiError(error: unknown): NextResponse {\n if (error instanceof AppError) {\n if (error.statusCode >= 500) {\n console.error(\"[API Error]\", {\n code: error.code,\n message: error.message,\n statusCode: error.statusCode,\n data: error.data,\n });\n }\n return NextResponse.json(error.toJSON(), { status: error.statusCode });\n }\n\n // Zod / schema validation errors\n if (error && typeof error === \"object\" && \"issues\" in error) {\n return NextResponse.json(\n {\n success: false,\n error: \"Validation failed\",\n code: ERROR_CODES.VALIDATION_INVALID_INPUT,\n data: error,\n },\n { status: 400 },\n );\n }\n\n console.error(\"[Unexpected API Error]\", {\n error:\n error instanceof Error\n ? { name: error.name, message: error.message, stack: error.stack }\n : error,\n });\n\n return NextResponse.json(\n {\n success: false,\n error: ERROR_MESSAGES[ERROR_CODES.GEN_INTERNAL_ERROR],\n code: ERROR_CODES.GEN_INTERNAL_ERROR,\n },\n { status: 500 },\n );\n}\n\n/**\n * Log an error with optional context. Wraps console.error for package portability;\n * replace with your structured logger if needed.\n */\nexport function logError(\n error: unknown,\n context?: Record<string, unknown>,\n): void {\n console.error(\"[Application Error]\", {\n ...(context && { context }),\n error:\n error instanceof Error\n ? { name: error.name, message: error.message, stack: error.stack }\n : error,\n });\n}\n\n/**\n * Type guard — check if a value is an AppError instance.\n */\nexport function isAppError(error: unknown): error is AppError {\n return error instanceof AppError;\n}\n","export { AppError } from \"./base-error\";\nexport { ERROR_CODES, ERROR_MESSAGES } from \"./error-codes\";\nexport type { ErrorCode } from \"./error-codes\";\nexport { ApiError } from \"./api-error\";\nexport { ValidationError } from \"./validation-error\";\nexport { AuthenticationError } from \"./authentication-error\";\nexport { AuthorizationError } from \"./authorization-error\";\nexport { NotFoundError } from \"./not-found-error\";\nexport { DatabaseError } from \"./database-error\";\n// error-handler uses `next/server` — only import in server/API-route contexts\nexport { handleApiError, logError, isAppError } from \"./error-handler\";\n","/**\n * ApiClient — @mohasinac/http\n *\n * Centralized HTTP client with consistent error handling,\n * timeout management, abort controller, and JSON parsing.\n *\n * Stripped of app-specific `API_ENDPOINTS` dependency from the original\n * `src/lib/api-client.ts`. The constructor accepts a `baseURL` option\n * instead of reading `process.env.NEXT_PUBLIC_API_URL` directly.\n *\n * Usage:\n * ```ts\n * import { ApiClient, ApiClientError } from \"@mohasinac/http\";\n *\n * const client = new ApiClient({ baseURL: process.env.NEXT_PUBLIC_APP_URL });\n * const data = await client.get(\"/api/products\");\n * ```\n */\n\nexport class ApiClientError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n public readonly data?: unknown,\n ) {\n super(message);\n this.name = \"ApiClientError\";\n }\n}\n\nexport interface RequestConfig extends RequestInit {\n params?: Record<string, string | number | boolean>;\n timeout?: number;\n}\n\nexport interface ApiResponse<T = unknown> {\n success: boolean;\n data?: T;\n error?: string;\n message?: string;\n}\n\nexport interface ApiClientOptions {\n /**\n * Base URL for relative endpoint resolution.\n * Falls back to `window.location.origin` in browsers or\n * `process.env.NEXT_PUBLIC_APP_URL` / `http://localhost:3000` on the server.\n */\n baseURL?: string;\n /** Default request timeout in milliseconds. Default: 120000 (2 min). */\n defaultTimeout?: number;\n}\n\nexport class ApiClient {\n private readonly baseURL: string;\n private readonly defaultTimeout: number;\n\n constructor(options?: ApiClientOptions) {\n this.baseURL = options?.baseURL ?? process.env.NEXT_PUBLIC_APP_URL ?? \"\";\n this.defaultTimeout = options?.defaultTimeout ?? 120_000;\n }\n\n private buildURL(\n endpoint: string,\n params?: Record<string, string | number | boolean>,\n ): string {\n const origin =\n this.baseURL ||\n (typeof window !== \"undefined\"\n ? window.location.origin\n : (process.env.NEXT_PUBLIC_APP_URL ?? \"http://localhost:3000\"));\n const url = new URL(endpoint, origin);\n if (params) {\n Object.entries(params).forEach(([key, value]) =>\n url.searchParams.append(key, String(value)),\n );\n }\n return url.toString();\n }\n\n private async getHeaders(\n method: string,\n customHeaders?: HeadersInit,\n ): Promise<HeadersInit> {\n const hasBody = ![\"GET\", \"HEAD\", \"DELETE\"].includes(method.toUpperCase());\n return {\n ...(hasBody ? { \"Content-Type\": \"application/json\" } : {}),\n ...customHeaders,\n };\n }\n\n private async request<T>(\n endpoint: string,\n config: RequestConfig = {},\n ): Promise<T> {\n const {\n params,\n timeout = this.defaultTimeout,\n headers: customHeaders,\n signal: externalSignal,\n ...fetchConfig\n } = config;\n const method = (fetchConfig.method ?? \"GET\").toUpperCase();\n\n const url = this.buildURL(endpoint, params);\n const headers = await this.getHeaders(method, customHeaders);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n let onAbort: (() => void) | null = null;\n if (externalSignal) {\n if (externalSignal.aborted) {\n controller.abort();\n } else {\n onAbort = () => controller.abort();\n externalSignal.addEventListener(\"abort\", onAbort);\n }\n }\n\n try {\n const response = await fetch(url, {\n ...fetchConfig,\n headers,\n signal: controller.signal,\n credentials: \"include\",\n });\n\n clearTimeout(timeoutId);\n\n const data: ApiResponse<T> = await response.json().catch(() => ({\n success: false,\n error: \"Invalid JSON response\",\n }));\n\n if (!response.ok) {\n throw new ApiClientError(\n data.error ??\n data.message ??\n `Request failed with status ${response.status}`,\n response.status,\n data,\n );\n }\n\n if (!data.success) {\n throw new ApiClientError(\n data.error ?? data.message ?? \"Request failed\",\n response.status,\n data,\n );\n }\n\n return data.data as T;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof Error && error.name === \"AbortError\") {\n if (externalSignal?.aborted) throw error;\n throw new ApiClientError(\"Request timeout\", 408);\n }\n\n if (error instanceof TypeError) {\n throw new ApiClientError(\n \"Network error. Please check your connection.\",\n 0,\n );\n }\n\n if (error instanceof ApiClientError) throw error;\n\n throw new ApiClientError(\n error instanceof Error ? error.message : \"An unexpected error occurred\",\n 500,\n );\n } finally {\n if (onAbort) externalSignal?.removeEventListener(\"abort\", onAbort);\n }\n }\n\n async get<T = unknown>(endpoint: string, config?: RequestConfig): Promise<T> {\n return this.request<T>(endpoint, { ...config, method: \"GET\" });\n }\n\n async post<T = unknown>(\n endpoint: string,\n data?: unknown,\n config?: RequestConfig,\n ): Promise<T> {\n return this.request<T>(endpoint, {\n ...config,\n method: \"POST\",\n body: data != null ? JSON.stringify(data) : undefined,\n });\n }\n\n async put<T = unknown>(\n endpoint: string,\n data?: unknown,\n config?: RequestConfig,\n ): Promise<T> {\n return this.request<T>(endpoint, {\n ...config,\n method: \"PUT\",\n body: data != null ? JSON.stringify(data) : undefined,\n });\n }\n\n async patch<T = unknown>(\n endpoint: string,\n data?: unknown,\n config?: RequestConfig,\n ): Promise<T> {\n return this.request<T>(endpoint, {\n ...config,\n method: \"PATCH\",\n body: data != null ? JSON.stringify(data) : undefined,\n });\n }\n\n async delete<T = unknown>(\n endpoint: string,\n config?: RequestConfig,\n ): Promise<T> {\n return this.request<T>(endpoint, { ...config, method: \"DELETE\" });\n }\n\n async upload<T = unknown>(\n endpoint: string,\n formData: FormData,\n config?: RequestConfig,\n ): Promise<T> {\n const { headers, ...restConfig } = config ?? {};\n const uploadHeaders = await this.getHeaders(\"POST\", headers);\n // Remove Content-Type so browser can set it with multipart boundary\n delete (uploadHeaders as Record<string, string>)[\"Content-Type\"];\n return this.request<T>(endpoint, {\n ...restConfig,\n method: \"POST\",\n body: formData,\n headers: uploadHeaders,\n });\n }\n}\n\n/** Default singleton instance — reads NEXT_PUBLIC_APP_URL from env */\nexport const apiClient = new ApiClient();\n","\"use client\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { apiClient } from \"@mohasinac/http\";\nimport type { HomepageData } from \"../types\";\n\ninterface UseHomepageOptions {\n initialData?: HomepageData;\n enabled?: boolean;\n}\n\nexport function useHomepage(opts?: UseHomepageOptions) {\n const query = useQuery<HomepageData>({\n queryKey: [\"homepage\"],\n queryFn: () => apiClient.get<HomepageData>(\"/api/homepage\"),\n initialData: opts?.initialData,\n enabled: opts?.enabled,\n staleTime: 5 * 60 * 1000,\n });\n\n return {\n sections: query.data?.sections ?? [],\n isLoading: query.isLoading,\n error: query.error,\n };\n}\n","\"use client\";\r\n\r\nimport { useQuery } from \"@tanstack/react-query\";\r\nimport { apiClient } from \"@mohasinac/http\";\r\nimport type { CarouselSlide } from \"../types/index.js\";\r\n\r\n/**\r\n * useHeroCarousel\r\n * Fetches active carousel slides for the homepage hero.\r\n * Data is pre-filtered to active slides, sorted by order, capped at 5.\r\n */\r\nexport function useHeroCarousel(options?: { initialData?: CarouselSlide[] }) {\r\n return useQuery<CarouselSlide[]>({\r\n queryKey: [\"carousel\", \"active\"],\r\n queryFn: () => apiClient.get<CarouselSlide[]>(\"/api/carousel\"),\r\n staleTime: 5 * 60 * 1000, // 5 minutes\r\n initialData: options?.initialData,\r\n });\r\n}\r\n","\"use client\";\r\n\r\nimport { useQuery } from \"@tanstack/react-query\";\r\nimport { apiClient } from \"@mohasinac/http\";\r\nimport type { ProductListResponse } from \"@mohasinac/feat-products\";\r\n\r\nconst MIN_COUNT = 12;\r\n\r\nexport function useFeaturedProducts(options?: {\r\n initialData?: ProductListResponse;\r\n}) {\r\n return useQuery<ProductListResponse>({\r\n queryKey: [\"products\", \"featured\"],\r\n queryFn: async () => {\r\n const promotedRes = await apiClient.get<ProductListResponse>(\r\n \"/api/products?filters=isPromoted%3D%3Dtrue%2Cstatus%3D%3Dpublished&pageSize=18\",\r\n );\r\n const promoted = promotedRes?.items ?? [];\r\n\r\n if (promoted.length >= MIN_COUNT) return promotedRes;\r\n\r\n const remaining = MIN_COUNT - promoted.length;\r\n const latestRes = await apiClient.get<ProductListResponse>(\r\n `/api/products?filters=status%3D%3Dpublished&sorts=-createdAt&pageSize=${remaining + promoted.length}`,\r\n );\r\n const latest = latestRes?.items ?? [];\r\n\r\n const existingIds = new Set(promoted.map((p) => p.id));\r\n const filler = latest\r\n .filter((p) => !existingIds.has(p.id))\r\n .slice(0, remaining);\r\n\r\n const merged = [...promoted, ...filler];\r\n return {\r\n ...promotedRes,\r\n items: merged,\r\n total: merged.length,\r\n };\r\n },\r\n initialData: options?.initialData,\r\n staleTime: 10 * 60 * 1000,\r\n gcTime: 30 * 60 * 1000,\r\n });\r\n}\r\n","\"use client\";\r\n\r\nimport { useQuery } from \"@tanstack/react-query\";\r\nimport { apiClient } from \"@mohasinac/http\";\r\nimport type {\r\n ProductItem,\r\n ProductListResponse,\r\n} from \"@mohasinac/feat-products\";\r\n\r\nconst MIN_COUNT = 12;\r\n\r\nexport function useFeaturedAuctions() {\r\n return useQuery<ProductItem[]>({\r\n queryKey: [\"auctions\", \"featured\"],\r\n queryFn: async () => {\r\n const promotedRes = await apiClient.get<ProductListResponse>(\r\n \"/api/products?filters=isAuction%3D%3Dtrue%2Cstatus%3D%3Dpublished%2CisPromoted%3D%3Dtrue&pageSize=18\",\r\n );\r\n const promoted = promotedRes?.items ?? [];\r\n\r\n if (promoted.length >= MIN_COUNT) return promoted;\r\n\r\n const remaining = MIN_COUNT - promoted.length;\r\n const latestRes = await apiClient.get<ProductListResponse>(\r\n `/api/products?filters=isAuction%3D%3Dtrue%2Cstatus%3D%3Dpublished&sorts=-createdAt&pageSize=${remaining + promoted.length}`,\r\n );\r\n const latest = latestRes?.items ?? [];\r\n\r\n const existingIds = new Set(promoted.map((a) => a.id));\r\n const filler = latest\r\n .filter((a) => !existingIds.has(a.id))\r\n .slice(0, remaining);\r\n\r\n return [...promoted, ...filler];\r\n },\r\n staleTime: 30_000,\r\n gcTime: 2 * 60 * 1000,\r\n });\r\n}\r\n","\"use client\";\r\n\r\nimport { useQuery } from \"@tanstack/react-query\";\r\nimport { apiClient } from \"@mohasinac/http\";\r\nimport type {\r\n ProductItem,\r\n ProductListResponse,\r\n} from \"@mohasinac/feat-products\";\r\n\r\nconst MIN_COUNT = 12;\r\n\r\nexport function useFeaturedPreOrders() {\r\n return useQuery<ProductItem[]>({\r\n queryKey: [\"pre-orders\", \"featured\"],\r\n queryFn: async () => {\r\n const featuredRes = await apiClient.get<ProductListResponse>(\r\n \"/api/products?filters=isPreOrder%3D%3Dtrue%2Cstatus%3D%3Dpublished&sorts=preOrderDeliveryDate&pageSize=6\",\r\n );\r\n const featured = featuredRes?.items ?? [];\r\n\r\n if (featured.length >= MIN_COUNT) return featured;\r\n\r\n const remaining = MIN_COUNT - featured.length;\r\n const latestRes = await apiClient.get<ProductListResponse>(\r\n `/api/products?filters=isPreOrder%3D%3Dtrue%2Cstatus%3D%3Dpublished&sorts=-createdAt&pageSize=${remaining + featured.length}`,\r\n );\r\n const latest = latestRes?.items ?? [];\r\n\r\n const existingIds = new Set(featured.map((p) => p.id));\r\n const filler = latest\r\n .filter((p) => !existingIds.has(p.id))\r\n .slice(0, remaining);\r\n\r\n return [...featured, ...filler];\r\n },\r\n staleTime: 10 * 60 * 1000,\r\n gcTime: 30 * 60 * 1000,\r\n });\r\n}\r\n","\"use client\";\r\n\r\nimport { useQuery } from \"@tanstack/react-query\";\r\nimport { apiClient } from \"@mohasinac/http\";\r\nimport type { CategoryItem } from \"@mohasinac/feat-categories\";\r\n\r\nexport function useTopCategories(\r\n limit = 12,\r\n options?: { initialData?: CategoryItem[] },\r\n) {\r\n return useQuery<CategoryItem[]>({\r\n queryKey: [\"categories\", \"top\", String(limit)],\r\n queryFn: () =>\r\n apiClient.get<CategoryItem[]>(`/api/categories?tier=0&pageSize=${limit}`),\r\n staleTime: Infinity,\r\n gcTime: Infinity,\r\n initialData: options?.initialData,\r\n });\r\n}\r\n","\"use client\";\r\n\r\nimport { useQuery } from \"@tanstack/react-query\";\r\nimport { apiClient } from \"@mohasinac/http\";\r\nimport type { CategoryItem } from \"@mohasinac/feat-categories\";\r\n\r\nexport function useTopBrands(limit = 12) {\r\n return useQuery<CategoryItem[]>({\r\n queryKey: [\"categories\", \"brands\", String(limit)],\r\n queryFn: () =>\r\n apiClient.get<CategoryItem[]>(\r\n `/api/categories?isBrand=true&pageSize=${limit}`,\r\n ),\r\n staleTime: Infinity,\r\n gcTime: Infinity,\r\n });\r\n}\r\n","\"use client\";\r\n\r\nimport { useQuery } from \"@tanstack/react-query\";\r\nimport { apiClient } from \"@mohasinac/http\";\r\nimport type { BlogListResponse } from \"@mohasinac/feat-blog\";\r\n\r\nconst MIN_BLOG_COUNT = 4;\r\n\r\nexport interface BlogListResult {\r\n posts: BlogListResponse[\"posts\"];\r\n meta: { total: number; page: number; pageSize: number };\r\n}\r\n\r\nexport function useBlogArticles() {\r\n return useQuery<BlogListResult>({\r\n queryKey: [\"blog\", \"featured\"],\r\n queryFn: async () => {\r\n const featuredResult = await apiClient.get<BlogListResponse>(\r\n `/api/blog?featured=true&perPage=${MIN_BLOG_COUNT}`,\r\n );\r\n const featured = featuredResult.posts;\r\n\r\n if (featured.length >= MIN_BLOG_COUNT) {\r\n return featuredResult;\r\n }\r\n\r\n const remaining = MIN_BLOG_COUNT - featured.length;\r\n const latestResult = await apiClient.get<BlogListResponse>(\r\n `/api/blog?sort=-publishedAt&perPage=${MIN_BLOG_COUNT + remaining}`,\r\n );\r\n\r\n const existingIds = new Set(featured.map((p) => p.id));\r\n const filler = latestResult.posts\r\n .filter((p) => !existingIds.has(p.id))\r\n .slice(0, remaining);\r\n\r\n const posts = [...featured, ...filler];\r\n return {\r\n posts,\r\n meta: { total: posts.length, page: 1, pageSize: posts.length },\r\n };\r\n },\r\n staleTime: 10 * 60 * 1000,\r\n gcTime: 30 * 60 * 1000,\r\n });\r\n}\r\n","import React from \"react\";\n\n/**\n * Semantic HTML Wrapper Components\n *\n * Thin wrappers around HTML5 semantic elements.\n * Using these instead of raw tags enables:\n * - Future one-place theming (add default padding/colour here, it applies everywhere)\n * - Enforced accessibility attributes (Nav requires aria-label)\n * - Consistent documentation / IDE autocomplete\n * - Clean migration path if element defaults change\n *\n * All components pass through every standard HTML attribute via `...props`.\n * Style via `className` using Tailwind CSS classes.\n *\n * @example\n * ```tsx\n * import { Section, Article, Main, Aside, Nav, Ul, Ol, Li } from '@mohasinac/ui';\n *\n * <Main className=\"max-w-7xl mx-auto px-4\">\n * <Section className=\"py-12\">\n * <Article>...</Article>\n * </Section>\n * <Aside className=\"w-64 shrink-0\">...</Aside>\n * </Main>\n *\n * <Nav aria-label=\"Main navigation\">\n * <Ul className=\"flex gap-4\">\n * <Li>Products</Li>\n * </Ul>\n * </Nav>\n * ```\n */\n\n// ─── Section ─────────────────────────────────────────────────────────────────\n/**\n * Semantic `<section>` element.\n * Use for thematically grouped content that would appear in an outline.\n * Prefer this over a plain `<div>` when the block has a heading.\n */\nexport interface SectionProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport const Section = React.forwardRef<HTMLElement, SectionProps>(\n ({ className = \"\", children, ...props }, ref) => (\n <section className={className} ref={ref} {...props}>\n {children}\n </section>\n ),\n);\nSection.displayName = \"Section\";\n\n// ─── Article ─────────────────────────────────────────────────────────────────\n/**\n * Semantic `<article>` element.\n * Use for self-contained compositions: blog posts, product cards, reviews, forum posts.\n */\nexport interface ArticleProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\nexport function Article({ className = \"\", children, ...props }: ArticleProps) {\n return (\n <article className={className} {...props}>\n {children}\n </article>\n );\n}\n\n// ─── Main ─────────────────────────────────────────────────────────────────────\n/**\n * Semantic `<main>` element.\n * Wraps the primary content of the document. Should appear only once per page.\n */\nexport interface MainProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport function Main({ className = \"\", children, ...props }: MainProps) {\n return (\n <main className={className} {...props}>\n {children}\n </main>\n );\n}\n\n// ─── Aside ────────────────────────────────────────────────────────────────────\n/**\n * Semantic `<aside>` element.\n * Use for supplementary content tangentially related to the main content:\n * sidebars, callout boxes, related-link panels.\n */\nexport interface AsideProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport const Aside = React.forwardRef<HTMLElement, AsideProps>(\n ({ className = \"\", children, ...props }, ref) => (\n <aside className={className} ref={ref} {...props}>\n {children}\n </aside>\n ),\n);\nAside.displayName = \"Aside\";\n\n// ─── Nav ─────────────────────────────────────────────────────────────────────\n/**\n * Semantic `<nav>` element with enforced `aria-label`.\n *\n * Every `<nav>` on a page MUST have a unique `aria-label` so assistive\n * technologies can distinguish between multiple navigation landmarks.\n *\n * @example\n * ```tsx\n * <Nav aria-label=\"Breadcrumb\">...</Nav>\n * <Nav aria-label=\"Product categories\">...</Nav>\n * ```\n */\nexport interface NavProps extends React.HTMLAttributes<HTMLElement> {\n /** REQUIRED — describes the purpose of this navigation region for screen readers. */\n \"aria-label\": string;\n children: React.ReactNode;\n}\n\nexport function Nav({ className = \"\", children, ...props }: NavProps) {\n return (\n <nav className={className} {...props}>\n {children}\n </nav>\n );\n}\n\n// ─── Header (block-level) ─────────────────────────────────────────────────────\n/**\n * Semantic `<header>` element for block-level component headers.\n * Use inside `Section`, `Article`, or card bodies — NOT as the page-level header.\n *\n * @example\n * ```tsx\n * <Article>\n * <BlockHeader className=\"mb-4\">\n * <Heading level={2}>Post title</Heading>\n * </BlockHeader>\n * </Article>\n * ```\n */\nexport interface BlockHeaderProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport function BlockHeader({\n className = \"\",\n children,\n ...props\n}: BlockHeaderProps) {\n return (\n <header className={className} {...props}>\n {children}\n </header>\n );\n}\n\n// ─── Footer (block-level) ─────────────────────────────────────────────────────\n/**\n * Semantic `<footer>` element for block-level component footers.\n * Use inside `Section`, `Article`, or card bodies — NOT as the page-level footer.\n */\nexport interface BlockFooterProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport function BlockFooter({\n className = \"\",\n children,\n ...props\n}: BlockFooterProps) {\n return (\n <footer className={className} {...props}>\n {children}\n </footer>\n );\n}\n\n// ─── Ul ──────────────────────────────────────────────────────────────────────\n/**\n * Semantic `<ul>` (unordered list) element.\n *\n * @example\n * ```tsx\n * <Ul className=\"space-y-2\">\n * <Li>Item one</Li>\n * <Li>Item two</Li>\n * </Ul>\n * ```\n */\nexport interface UlProps extends React.HTMLAttributes<HTMLUListElement> {\n children: React.ReactNode;\n}\n\nexport function Ul({ className = \"\", children, ...props }: UlProps) {\n return (\n <ul className={className} {...props}>\n {children}\n </ul>\n );\n}\n\n// ─── Ol ──────────────────────────────────────────────────────────────────────\n/**\n * Semantic `<ol>` (ordered list) element.\n *\n * @example\n * ```tsx\n * <Ol className=\"list-decimal pl-4 space-y-1\">\n * <Li>Step one</Li>\n * <Li>Step two</Li>\n * </Ol>\n * ```\n */\nexport interface OlProps extends React.HTMLAttributes<HTMLOListElement> {\n children: React.ReactNode;\n}\n\nexport function Ol({ className = \"\", children, ...props }: OlProps) {\n return (\n <ol className={className} {...props}>\n {children}\n </ol>\n );\n}\n\n// ─── Li ──────────────────────────────────────────────────────────────────────\n/**\n * Semantic `<li>` (list item) element. Use inside `Ul` or `Ol`.\n */\nexport interface LiProps extends React.LiHTMLAttributes<HTMLLIElement> {\n children: React.ReactNode;\n}\n\nexport function Li({ className = \"\", children, ...props }: LiProps) {\n return (\n <li className={className} {...props}>\n {children}\n </li>\n );\n}\n\n// ─── Header / Footer — convenience aliases ────────────────────────────────────\n/**\n * Aliases for `BlockHeader` and `BlockFooter`.\n * Use when importing from the standard `<Header>` / `<Footer>` names.\n */\nexport type HeaderProps = BlockHeaderProps;\nexport const Header = BlockHeader;\nexport type FooterProps = BlockFooterProps;\nexport const Footer = BlockFooter;\n","import React from \"react\";\r\n\r\nexport interface DivProps extends React.HTMLAttributes<HTMLDivElement> {\r\n children?: React.ReactNode;\r\n}\r\n\r\n/**\r\n * Semantic `<div>` wrapper for general-purpose layout containers.\r\n *\r\n * Use when no more specific semantic element applies\r\n * (`<Section>`, `<Article>`, `<Main>`, `<Aside>` etc). Enables\r\n * future one-place theming and consistent import from `@mohasinac/appkit/ui`.\r\n *\r\n * @example\r\n * ```tsx\r\n * <Div className=\"flex items-center gap-4\">\r\n * <Badge>New</Badge>\r\n * <Text>Product title</Text>\r\n * </Div>\r\n * ```\r\n */\r\nexport const Div = React.forwardRef<HTMLDivElement, DivProps>(\r\n ({ className = \"\", children, ...props }, ref) => (\r\n <div ref={ref} className={className} {...props}>\r\n {children}\r\n </div>\r\n ),\r\n);\r\nDiv.displayName = \"Div\";\r\n","import React from \"react\";\n\n/**\n * UI_THEME — inlined subset of the app-level THEME_CONSTANTS.\n * Consumer apps can override by passing `className` on each component.\n * Full THEME_CONSTANTS lives in the host app (`@/constants`).\n */\nconst UI_THEME = {\n typography: {\n h1: \"text-3xl md:text-4xl lg:text-5xl font-bold tracking-tight font-display\",\n h2: \"text-2xl md:text-3xl lg:text-4xl font-bold tracking-tight font-display\",\n h3: \"text-xl md:text-2xl lg:text-3xl font-bold tracking-tight font-display\",\n h4: \"text-lg md:text-xl lg:text-2xl font-bold font-display\",\n h5: \"text-base md:text-lg lg:text-xl font-medium\",\n h6: \"text-sm md:text-base lg:text-lg font-medium\",\n body: \"text-base lg:text-lg\",\n small: \"text-sm lg:text-base\",\n xs: \"text-xs lg:text-sm\",\n },\n themed: {\n textPrimary: \"text-zinc-900 dark:text-zinc-50\",\n textSecondary: \"text-zinc-500 dark:text-zinc-400\",\n textMuted: \"text-zinc-400 dark:text-zinc-500\",\n textError: \"text-red-600 dark:text-red-400\",\n textSuccess: \"text-emerald-600 dark:text-emerald-400\",\n },\n colors: {\n form: {\n required: \"text-red-500\",\n },\n },\n} as const;\n\n// ─── Heading ─────────────────────────────────────────────────────────────────\n\ninterface HeadingProps extends React.HTMLAttributes<HTMLHeadingElement> {\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n variant?: \"primary\" | \"secondary\" | \"muted\" | \"none\";\n children: React.ReactNode;\n}\n\nexport function Heading({\n level = 1,\n variant = \"primary\",\n className = \"\",\n children,\n ...props\n}: HeadingProps) {\n const Tag = `h${level}` as \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n const { typography, themed } = UI_THEME;\n\n const sizeClasses = {\n 1: typography.h1,\n 2: typography.h2,\n 3: typography.h3,\n 4: typography.h4,\n 5: typography.h5,\n 6: typography.h6,\n };\n\n const variantClasses = {\n primary: themed.textPrimary,\n secondary: themed.textSecondary,\n muted: themed.textMuted,\n none: \"\",\n };\n\n return (\n <Tag\n className={`${sizeClasses[level]} ${variantClasses[variant]} ${className}`}\n {...props}\n >\n {children}\n </Tag>\n );\n}\n\n// ─── Text ─────────────────────────────────────────────────────────────────────\n\ninterface TextProps extends React.HTMLAttributes<HTMLParagraphElement> {\n variant?: \"primary\" | \"secondary\" | \"muted\" | \"error\" | \"success\" | \"none\";\n size?: \"xs\" | \"sm\" | \"base\" | \"lg\" | \"xl\";\n weight?: \"normal\" | \"medium\" | \"semibold\" | \"bold\";\n /** Override the rendered element. Defaults to `p`. */\n as?: React.ElementType;\n children: React.ReactNode;\n}\n\nexport function Text({\n variant = \"primary\",\n size = \"base\",\n weight = \"normal\",\n className = \"\",\n as: Tag = \"p\",\n children,\n ...props\n}: TextProps) {\n const { typography, themed } = UI_THEME;\n\n const sizeClasses = {\n xs: typography.xs,\n sm: typography.small,\n base: typography.body,\n lg: \"text-lg\",\n xl: \"text-xl\",\n };\n\n const weightClasses = {\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n bold: \"font-bold\",\n };\n\n const variantClasses = {\n primary: themed.textPrimary,\n secondary: themed.textSecondary,\n muted: themed.textMuted,\n error: themed.textError,\n success: themed.textSuccess,\n none: \"\",\n };\n\n return (\n <Tag\n className={`${sizeClasses[size]} ${weightClasses[weight]} ${variantClasses[variant]} ${className}`}\n {...props}\n >\n {children}\n </Tag>\n );\n}\n\n// ─── Label ────────────────────────────────────────────────────────────────────\n\ninterface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n required?: boolean;\n children: React.ReactNode;\n}\n\nexport function Label({\n required,\n className = \"\",\n children,\n ...props\n}: LabelProps) {\n const { themed, typography, colors } = UI_THEME;\n return (\n <label\n className={`block ${typography.small} font-medium ${themed.textSecondary} mb-1.5 ${className}`}\n {...props}\n >\n {children}\n {required && <span className={`${colors.form.required} ml-1`}>*</span>}\n </label>\n );\n}\n\n// ─── Caption ─────────────────────────────────────────────────────────────────\n\ninterface CaptionProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** \"default\" — muted grey (default); \"accent\" — indigo, semibold; \"inverse\" — light indigo for use on dark indigo backgrounds */\n variant?: \"default\" | \"accent\" | \"inverse\";\n children: React.ReactNode;\n}\n\nexport function Caption({\n variant = \"default\",\n className = \"\",\n children,\n ...props\n}: CaptionProps) {\n const { themed, typography } = UI_THEME;\n\n const variantClasses = {\n default: themed.textMuted,\n accent: \"text-primary font-semibold\",\n inverse: \"text-primary/40\",\n };\n\n return (\n <span\n className={`${typography.xs} ${variantClasses[variant]} ${className}`}\n {...props}\n >\n {children}\n </span>\n );\n}\n\n// ─── Span ─────────────────────────────────────────────────────────────────────\n/**\n * Inline wrapper for styled text fragments. Use instead of a raw `<span>`.\n * When `variant` is \"inherit\" (default) the element carries no colour classes\n * so it blends with its parent — perfect for purely structural/CSS wrappers.\n *\n * @example\n * ```tsx\n * <Span className=\"bg-gradient-to-r from-indigo-500 to-purple-500 bg-clip-text text-transparent\">\n * Highlighted\n * </Span>\n *\n * <Span variant=\"error\" weight=\"semibold\">Required</Span>\n * ```\n */\ninterface SpanProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Colour variant. \"inherit\" (default) applies no colour class. */\n variant?:\n | \"inherit\"\n | \"primary\"\n | \"secondary\"\n | \"muted\"\n | \"error\"\n | \"success\"\n | \"accent\";\n size?: \"xs\" | \"sm\" | \"base\" | \"lg\" | \"xl\";\n weight?: \"normal\" | \"medium\" | \"semibold\" | \"bold\";\n children?: React.ReactNode;\n}\n\nexport function Span({\n variant = \"inherit\",\n size,\n weight,\n className = \"\",\n children,\n ...props\n}: SpanProps) {\n const { themed, typography } = UI_THEME;\n\n const variantClasses: Record<NonNullable<SpanProps[\"variant\"]>, string> = {\n inherit: \"\",\n primary: themed.textPrimary,\n secondary: themed.textSecondary,\n muted: themed.textMuted,\n error: themed.textError,\n success: themed.textSuccess,\n accent: \"text-primary\",\n };\n\n const sizeClasses: Record<NonNullable<SpanProps[\"size\"]>, string> = {\n xs: typography.xs,\n sm: typography.small,\n base: typography.body,\n lg: \"text-lg\",\n xl: \"text-xl\",\n };\n\n const weightClasses: Record<NonNullable<SpanProps[\"weight\"]>, string> = {\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n bold: \"font-bold\",\n };\n\n const classes = [\n size ? sizeClasses[size] : \"\",\n weight ? weightClasses[weight] : \"\",\n variantClasses[variant],\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <span className={classes} {...props}>\n {children}\n </span>\n );\n}\n","/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n","/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n","/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n","import { CamelToPascal } from '../utility-types';\nimport { toCamelCase } from './toCamelCase';\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n","export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n","/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record<string, any>) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n\n return false;\n};\n","'use client';\n\nimport { createContext, createElement, type ReactNode, useContext, useMemo } from 'react';\nimport { LucideProps } from './types';\n\ntype LucideConfig = {\n size: number;\n color: string;\n strokeWidth: number;\n absoluteStrokeWidth: boolean;\n className: string;\n};\n\nconst LucideContext = createContext<LucideProps>({});\n\ntype LucideProviderProps = {\n children: ReactNode;\n} & Partial<LucideConfig>;\n\nexport function LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className,\n}: LucideProviderProps) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className,\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, className],\n );\n\n return createElement(LucideContext.Provider, { value }, children);\n}\n\nexport const useLucideContext = () => useContext(LucideContext);\n","'use client';\n\nimport { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\nimport { useLucideContext } from './context';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n { color, size, strokeWidth, absoluteStrokeWidth, className = '', children, iconNode, ...rest },\n ref,\n ) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n color: contextColor = 'currentColor',\n className: contextClass = '',\n } = useLucideContext() ?? {};\n\n const calculatedStrokeWidth =\n absoluteStrokeWidth ?? contextAbsoluteStrokeWidth\n ? (Number(strokeWidth ?? contextStrokeWidth) * 24) / Number(size ?? contextSize)\n : strokeWidth ?? contextStrokeWidth;\n\n return createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size ?? contextSize ?? defaultAttributes.width,\n height: size ?? contextSize ?? defaultAttributes.height,\n stroke: color ?? contextColor,\n strokeWidth: calculatedStrokeWidth,\n className: mergeClasses('lucide', contextClass, className),\n ...(!children && !hasA11yProp(rest) && { 'aria-hidden': 'true' }),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n );\n },\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className,\n ),\n ...props,\n }),\n );\n\n Component.displayName = toPascalCase(iconName);\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M5 12h14', key: '1ays0h' }],\n ['path', { d: 'm12 5 7 7-7 7', key: 'xquz4c' }],\n];\n\n/**\n * @component @name ArrowRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/arrow-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowRight = createLucideIcon('arrow-right', __iconNode);\n\nexport default ArrowRight;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }]];\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/chevron-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronDown = createLucideIcon('chevron-down', __iconNode);\n\nexport default ChevronDown;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M21 12a9 9 0 1 1-6.219-8.56', key: '13zald' }]];\n\n/**\n * @component @name LoaderCircle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/loader-circle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst LoaderCircle = createLucideIcon('loader-circle', __iconNode);\n\nexport default LoaderCircle;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7', key: '132q7q' }],\n ['rect', { x: '2', y: '4', width: '20', height: '16', rx: '2', key: 'izxlao' }],\n];\n\n/**\n * @component @name Mail\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/mail\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Mail = createLucideIcon('mail', __iconNode);\n\nexport default Mail;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719',\n key: '1sd12s',\n },\n ],\n];\n\n/**\n * @component @name MessageCircle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/message-circle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MessageCircle = createLucideIcon('message-circle', __iconNode);\n\nexport default MessageCircle;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z',\n key: '1s2grr',\n },\n ],\n ['path', { d: 'M20 2v4', key: '1rf3ol' }],\n ['path', { d: 'M22 4h-4', key: 'gwowj6' }],\n ['circle', { cx: '4', cy: '20', r: '2', key: '6kqj1y' }],\n];\n\n/**\n * @component @name Sparkles\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/sparkles\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Sparkles = createLucideIcon('sparkles', __iconNode);\n\nexport default Sparkles;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z',\n key: 'r04s7s',\n },\n ],\n];\n\n/**\n * @component @name Star\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/star\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Star = createLucideIcon('star', __iconNode);\n\nexport default Star;\n","import React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { Loader2 } from \"lucide-react\";\n\n/**\n * Button — versatile button with multiple variants, sizes, and loading state.\n *\n * Extracted from src/components/ui/Button.tsx for @mohasinac/ui.\n * Theme values inlined from THEME_CONSTANTS.button and THEME_CONSTANTS.colors.button.\n */\n\n// Inlined from THEME_CONSTANTS\nconst UI_BUTTON = {\n base: \"inline-flex items-center justify-center font-medium rounded-xl transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed\",\n active: \"active:scale-95\",\n variants: {\n primary:\n \"bg-primary-600 text-white hover:bg-primary-700 active:bg-primary-800 shadow-sm focus:ring-primary-500/30 dark:bg-secondary-500 dark:text-white dark:hover:bg-secondary-400 dark:active:bg-secondary-600 dark:focus:ring-secondary-400/30\",\n secondary:\n \"bg-primary-700 text-white hover:bg-primary-600 active:bg-primary-800 shadow-md focus:ring-primary-500 dark:bg-secondary-700 dark:text-white dark:hover:bg-secondary-600 dark:active:bg-secondary-800 dark:focus:ring-secondary-500\",\n outline:\n \"border border-zinc-200 dark:border-slate-700 bg-white dark:bg-transparent text-zinc-900 dark:text-zinc-100 hover:bg-zinc-50 dark:hover:bg-slate-800 focus:ring-zinc-400\",\n ghost:\n \"text-zinc-700 dark:text-zinc-300 hover:bg-zinc-100 dark:hover:bg-slate-800 focus:ring-zinc-400\",\n danger:\n \"bg-red-600 text-white hover:bg-red-500 active:bg-red-700 shadow-sm shadow-red-600/10 focus:ring-red-500\",\n warning:\n \"bg-amber-500 text-white hover:bg-amber-400 active:bg-amber-600 shadow-sm shadow-amber-500/10 focus:ring-amber-500\",\n },\n sizes: {\n sm: \"px-2.5 py-1.5 text-xs sm:px-3 sm:text-sm gap-1.5 min-h-[36px]\",\n md: \"px-3 py-2 text-sm sm:px-4 sm:py-2.5 sm:text-base gap-2 min-h-[44px]\",\n lg: \"px-4 py-2.5 text-base sm:px-6 sm:py-3 sm:text-lg gap-2.5 min-h-[44px]\",\n },\n} as const;\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: keyof typeof UI_BUTTON.variants;\n size?: keyof typeof UI_BUTTON.sizes;\n isLoading?: boolean;\n children?: React.ReactNode;\n}\n\nexport function Button({\n variant = \"primary\",\n size = \"md\",\n className = \"\",\n isLoading = false,\n disabled,\n children,\n ...props\n}: ButtonProps) {\n return (\n <button\n className={twMerge(\n UI_BUTTON.base,\n UI_BUTTON.active,\n UI_BUTTON.variants[variant],\n UI_BUTTON.sizes[size],\n className,\n )}\n disabled={disabled || isLoading}\n aria-busy={isLoading || undefined}\n {...props}\n >\n {isLoading && (\n <Loader2\n className=\"w-4 h-4 animate-spin flex-shrink-0\"\n aria-hidden=\"true\"\n />\n )}\n {isLoading ? <span className=\"opacity-70\">{children}</span> : children}\n </button>\n );\n}\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport Link from \"next/link\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nconst VARIANTS = {\r\n default:\r\n \"text-primary-600 dark:text-primary-400 hover:text-primary-800 dark:hover:text-primary-200 transition-colors\",\r\n muted:\r\n \"text-zinc-500 dark:text-zinc-400 hover:text-zinc-700 dark:hover:text-zinc-200 transition-colors\",\r\n underline:\r\n \"text-primary-600 dark:text-primary-400 underline hover:no-underline transition-all\",\r\n none: \"\",\r\n} as const;\r\n\r\nexport interface TextLinkProps\r\n extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\r\n href: string;\r\n children: React.ReactNode;\r\n variant?: keyof typeof VARIANTS;\r\n /**\r\n * Set to true to render a plain `<a>` targeting \"_blank\" with rel=\"noopener noreferrer\".\r\n * Defaults to false — renders a Next.js `<Link>` for SPA navigation.\r\n */\r\n external?: boolean;\r\n}\r\n\r\n/**\r\n * Styled anchor wrapper. Uses `next/link` for internal navigation and\r\n * a plain `<a>` for external links.\r\n *\r\n * @example\r\n * ```tsx\r\n * <TextLink href=\"/products\">View all products</TextLink>\r\n * <TextLink href=\"https://example.com\" external>External site</TextLink>\r\n * ```\r\n */\r\nexport function TextLink({\r\n href,\r\n children,\r\n variant = \"default\",\r\n external = false,\r\n className = \"\",\r\n ...props\r\n}: TextLinkProps) {\r\n const cls = twMerge(VARIANTS[variant], className);\r\n\r\n if (external) {\r\n return (\r\n <a\r\n href={href}\r\n className={cls}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n {...props}\r\n >\r\n {children}\r\n </a>\r\n );\r\n }\r\n\r\n return (\r\n <Link href={href} className={cls} {...(props as Record<string, unknown>)}>\r\n {children}\r\n </Link>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { createContext, useContext, useMemo, useState } from \"react\";\r\nimport { Button } from \"./Button\";\r\nimport { Div } from \"./Div\";\r\nimport { Span } from \"./Typography\";\r\n\r\ninterface AccordionContextValue {\r\n type: \"single\" | \"multiple\";\r\n openValues: string[];\r\n toggle: (value: string) => void;\r\n}\r\n\r\nconst AccordionContext = createContext<AccordionContextValue | null>(null);\r\n\r\nexport interface AccordionProps {\r\n /** Legacy simple mode: renders a native details/summary accordion */\r\n title?: React.ReactNode;\r\n /** Legacy simple mode open state */\r\n open?: boolean;\r\n /** Legacy simple mode title styling */\r\n titleClassName?: string;\r\n /** Legacy simple mode content styling */\r\n contentClassName?: string;\r\n\r\n /** Controlled/list mode: single or multiple expanded items */\r\n type?: \"single\" | \"multiple\";\r\n defaultValue?: string | string[];\r\n value?: string | string[];\r\n onChange?: (value: string | string[]) => void;\r\n\r\n className?: string;\r\n children?: React.ReactNode;\r\n}\r\n\r\nexport interface AccordionItemProps {\r\n value: string;\r\n title: React.ReactNode;\r\n disabled?: boolean;\r\n className?: string;\r\n children?: React.ReactNode;\r\n}\r\n\r\nfunction toArray(value?: string | string[]): string[] {\r\n if (!value) return [];\r\n return Array.isArray(value) ? value : [value];\r\n}\r\n\r\nfunction renderLegacyAccordion({\r\n title,\r\n children,\r\n open,\r\n className = \"\",\r\n titleClassName = \"\",\r\n contentClassName = \"\",\r\n}: {\r\n title: React.ReactNode;\r\n children?: React.ReactNode;\r\n open: boolean;\r\n className?: string;\r\n titleClassName?: string;\r\n contentClassName?: string;\r\n}) {\r\n return (\r\n <details\r\n open={open}\r\n className={`group border-b border-zinc-200 dark:border-zinc-700 ${className}`}\r\n >\r\n <summary\r\n className={`flex cursor-pointer select-none list-none items-center justify-between py-3 text-sm font-medium text-zinc-900 dark:text-zinc-100 ${titleClassName}`}\r\n >\r\n {title}\r\n <span\r\n className=\"ml-2 flex-shrink-0 text-zinc-400 transition-transform duration-200 group-open:rotate-180\"\r\n aria-hidden=\"true\"\r\n >\r\n ▾\r\n </span>\r\n </summary>\r\n <div\r\n className={`pb-4 text-sm text-zinc-600 dark:text-zinc-400 ${contentClassName}`}\r\n >\r\n {children}\r\n </div>\r\n </details>\r\n );\r\n}\r\n\r\nexport function Accordion({\r\n title,\r\n children,\r\n open = false,\r\n className = \"\",\r\n titleClassName = \"\",\r\n contentClassName = \"\",\r\n type = \"single\",\r\n defaultValue,\r\n value,\r\n onChange,\r\n}: AccordionProps) {\r\n // Backward-compatible simple details mode.\r\n if (title !== undefined) {\r\n return renderLegacyAccordion({\r\n title,\r\n children,\r\n open,\r\n className,\r\n titleClassName,\r\n contentClassName,\r\n });\r\n }\r\n\r\n const initialOpen = useMemo(() => {\r\n if (value !== undefined) return toArray(value);\r\n return toArray(defaultValue);\r\n }, [defaultValue, value]);\r\n\r\n const [internalOpenValues, setInternalOpenValues] =\r\n useState<string[]>(initialOpen);\r\n\r\n const activeOpenValues =\r\n value !== undefined ? toArray(value) : internalOpenValues;\r\n\r\n const toggle = (itemValue: string) => {\r\n const nextOpenValues =\r\n type === \"single\"\r\n ? activeOpenValues.includes(itemValue)\r\n ? []\r\n : [itemValue]\r\n : activeOpenValues.includes(itemValue)\r\n ? activeOpenValues.filter((v) => v !== itemValue)\r\n : [...activeOpenValues, itemValue];\r\n\r\n if (value === undefined) {\r\n setInternalOpenValues(nextOpenValues);\r\n }\r\n\r\n onChange?.(type === \"single\" ? (nextOpenValues[0] ?? \"\") : nextOpenValues);\r\n };\r\n\r\n return (\r\n <AccordionContext.Provider\r\n value={{ type, openValues: activeOpenValues, toggle }}\r\n >\r\n <Div className={className}>{children}</Div>\r\n </AccordionContext.Provider>\r\n );\r\n}\r\n\r\nexport function AccordionItem({\r\n value,\r\n title,\r\n disabled = false,\r\n className = \"\",\r\n children,\r\n}: AccordionItemProps) {\r\n const ctx = useContext(AccordionContext);\r\n if (!ctx) {\r\n throw new Error(\"AccordionItem must be used within Accordion.\");\r\n }\r\n\r\n const isOpen = ctx.openValues.includes(value);\r\n\r\n return (\r\n <Div\r\n className={`border-b border-gray-200 dark:border-gray-700 ${className}`}\r\n >\r\n <Button\r\n type=\"button\"\r\n disabled={disabled}\r\n aria-expanded={isOpen}\r\n onClick={() => ctx.toggle(value)}\r\n className=\"w-full flex items-center justify-between py-3 px-1 text-left text-sm font-medium disabled:opacity-50 disabled:cursor-not-allowed\"\r\n >\r\n <Span>{title}</Span>\r\n <Span\r\n className={`transition-transform duration-200 ${isOpen ? \"rotate-180\" : \"\"}`}\r\n >\r\n ▾\r\n </Span>\r\n </Button>\r\n {isOpen && (\r\n <Div className=\"pb-3 px-1 text-sm text-gray-600 dark:text-gray-400\">\r\n {children}\r\n </Div>\r\n )}\r\n </Div>\r\n );\r\n}\r\n","import React from \"react\";\r\n\r\nexport type InputProps = React.InputHTMLAttributes<HTMLInputElement>;\r\n\r\nexport function Input({ className = \"\", ...props }: InputProps) {\r\n return (\r\n <input\r\n className={[\r\n \"w-full rounded-md border border-zinc-200 dark:border-slate-700 bg-white dark:bg-slate-800/60 px-2.5 py-1.5 text-sm text-zinc-900 dark:text-zinc-100 focus:outline-none focus:ring-2 focus:ring-primary-500/20 dark:focus:ring-secondary-400/20\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n {...props}\r\n />\r\n );\r\n}\r\n","import React from \"react\";\r\n\r\nexport type TextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement>;\r\n\r\nexport function Textarea({ className = \"\", ...props }: TextareaProps) {\r\n return (\r\n <textarea\r\n className={[\r\n \"w-full rounded-md border border-zinc-200 dark:border-slate-700 bg-white dark:bg-slate-800/60 px-2.5 py-1.5 text-sm text-zinc-900 dark:text-zinc-100 focus:outline-none focus:ring-2 focus:ring-primary-500/20 dark:focus:ring-secondary-400/20\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n {...props}\r\n />\r\n );\r\n}\r\n","\"use client\";\n\nimport React, { useState } from \"react\";\nimport { Star } from \"lucide-react\";\nimport { Span } from \"./Typography\";\n\n/**\n * StarRating — 0–5 star display/interactive rating.\n *\n * Standalone @mohasinac/ui primitive. No app-specific imports.\n * Use `readOnly` for display, omit it for interactive mode with hover preview.\n */\n\nexport interface StarRatingProps {\n value?: number;\n onChange?: (value: number) => void;\n max?: number;\n size?: \"sm\" | \"md\" | \"lg\";\n readOnly?: boolean;\n className?: string;\n /** Accessible label describing what is being rated */\n label?: string;\n}\n\nconst SIZE_PX = { sm: \"w-4 h-4\", md: \"w-5 h-5\", lg: \"w-6 h-6\" } as const;\n\nexport function StarRating({\n value = 0,\n onChange,\n max = 5,\n size = \"md\",\n readOnly = false,\n className = \"\",\n label,\n}: StarRatingProps) {\n const [hovered, setHovered] = useState<number | null>(null);\n\n const displayed = hovered ?? value;\n\n return (\n <Span\n className={`inline-flex items-center gap-0.5 ${className}`}\n role={readOnly ? \"img\" : \"group\"}\n aria-label={label ?? `${value} out of ${max} stars`}\n >\n {Array.from({ length: max }, (_, i) => {\n const starValue = i + 1;\n const filled = starValue <= displayed;\n const half = !filled && starValue - 0.5 <= displayed;\n\n return (\n <Span\n key={starValue}\n className={readOnly ? undefined : \"cursor-pointer\"}\n onClick={() => !readOnly && onChange?.(starValue)}\n onMouseEnter={() => !readOnly && setHovered(starValue)}\n onMouseLeave={() => !readOnly && setHovered(null)}\n aria-hidden={!readOnly ? \"true\" : undefined}\n >\n <Star\n className={[\n SIZE_PX[size],\n \"transition-colors duration-100\",\n filled || half\n ? \"fill-amber-400 text-amber-400\"\n : \"fill-transparent text-zinc-300 dark:text-slate-600\",\n !readOnly && !filled\n ? \"hover:fill-amber-300 hover:text-amber-300\"\n : \"\",\n ].join(\" \")}\n aria-hidden=\"true\"\n />\n </Span>\n );\n })}\n\n {/* Screen-reader-only value for interactive mode */}\n {!readOnly && (\n <Span className=\"sr-only\">\n {value} out of {max}\n </Span>\n )}\n </Span>\n );\n}\n","import React from \"react\";\n\n/**\n * Layout Primitives — Container, Stack, Row, Grid\n *\n * Thin component wrappers that turn semantic prop names into the correct\n * Tailwind class strings from the app's THEME_CONSTANTS token map.\n * Eliminates repeated inline class strings like \"grid grid-cols-1 sm:grid-cols-2\n * lg:grid-cols-3 gap-4\" and \"flex flex-row items-center justify-between gap-2\".\n *\n * Token maps are inlined here (like UI_THEME in Typography.tsx) so the package\n * stays independent of the host app's @/constants import path.\n *\n * @example\n * ```tsx\n * // Before\n * <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\n * <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4\">\n * <div className=\"flex flex-row items-center justify-between gap-2\">\n * <div className=\"flex flex-col gap-4\">\n *\n * // After\n * <Container>\n * <Grid cols={3} gap=\"md\">\n * <Row justify=\"between\" gap=\"sm\">\n * <Stack gap=\"md\">\n * ```\n */\n\n// ─── Token maps ──────────────────────────────────────────────────────────────\n\n/**\n * Gap tokens — maps to `gap-*` Tailwind classes.\n * Mirrors THEME_CONSTANTS.spacing.gap in the host app.\n */\nconst GAP_MAP = {\n none: \"\",\n px: \"gap-px\",\n xs: \"gap-1\",\n sm: \"gap-2\",\n \"2.5\": \"gap-2.5\",\n \"3\": \"gap-3\",\n md: \"gap-4\",\n \"5\": \"gap-5\",\n lg: \"gap-6\",\n xl: \"gap-8\",\n \"2xl\": \"gap-12\",\n} as const;\n\nexport type GapKey = keyof typeof GAP_MAP;\n\n/**\n * Page container sizes.\n * Mirrors THEME_CONSTANTS.page.container in the host app.\n */\nconst CONTAINER_MAP = {\n /** `max-w-3xl` — blog posts, legal / policy pages */\n sm: \"max-w-3xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** `max-w-4xl` — narrow content, contact, about */\n md: \"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** `max-w-5xl` — medium content, checkout, help */\n lg: \"max-w-5xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** `max-w-6xl` — product detail, cart */\n xl: \"max-w-6xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** `max-w-7xl` — main content grids (default) */\n \"2xl\": \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** `max-w-screen-2xl` — full-bleed wide content */\n full: \"max-w-screen-2xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** `max-w-screen-2xl` — wide store/seller layouts (compact px) */\n wide: \"max-w-screen-2xl mx-auto px-4 sm:px-6\",\n /** `max-w-[1920px]` — ultra-wide / 4K displays */\n ultra: \"max-w-[1920px] mx-auto px-4 sm:px-6 lg:px-8\",\n} as const;\n\nexport type ContainerSize = keyof typeof CONTAINER_MAP;\n\nexport type ContainerSizeValue = (typeof CONTAINER_MAP)[ContainerSize];\n\n/**\n * Responsive grid column presets.\n * Mirrors THEME_CONSTANTS.grid in the host app.\n */\nexport const GRID_MAP = {\n /** Single column */\n 1: \"grid grid-cols-1\",\n /** 1 → 2 */\n 2: \"grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-2 2xl:grid-cols-2\",\n /** 1 → 2 → 3 → 4 on widescreen */\n 3: \"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-3 2xl:grid-cols-4\",\n /** 1 → 2 → 3 → 4 → 5 on widescreen */\n 4: \"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5\",\n /** 1 → 2 → 3 → 4 → 5 */\n 5: \"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-4 2xl:grid-cols-5\",\n /** 2 → 3 → 4 → 5 → 6 */\n 6: \"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 xl:grid-cols-5 2xl:grid-cols-6\",\n /**\n * Generic card grid — 1 col on portrait mobile → 5 on ultrawide.\n * Starts at 1 so product cards are readable even on 320 px handsets.\n */\n cards:\n \"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-4 2xl:grid-cols-5\",\n /** Auto-fill product cards — min 200 px */\n productCards: \"grid grid-cols-[repeat(auto-fill,minmax(200px,1fr))] gap-6\",\n /** Auto-fill product cards (compact) — min 220 px */\n productCardsCompact:\n \"grid grid-cols-[repeat(auto-fill,minmax(220px,1fr))] gap-4\",\n /** Auto-fill store cards — min 220 px */\n storeCards: \"grid grid-cols-[repeat(auto-fill,minmax(220px,1fr))] gap-6\",\n /** Auto-fill category tiles — min 130 px */\n categoryCards: \"grid grid-cols-[repeat(auto-fill,minmax(130px,1fr))] gap-4\",\n /** Auto-fill coupon/promo cards — min 264 px */\n couponCards: \"grid grid-cols-[repeat(auto-fill,minmax(264px,1fr))] gap-6\",\n /** Auto-fill address / wide cards — min 300 px */\n addressCards: \"grid grid-cols-[repeat(auto-fill,minmax(300px,1fr))] gap-4\",\n /** Auto-fill KPI/stat tiles — min 180 px */\n statTiles: \"grid grid-cols-[repeat(auto-fill,minmax(180px,1fr))] gap-4\",\n /** Auto-fill account nav tiles — min 160 px */\n navTiles: \"grid grid-cols-[repeat(auto-fill,minmax(160px,1fr))] gap-4\",\n /** Equal halves on md+ */\n halves: \"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-2 2xl:grid-cols-2\",\n /** 2fr / 1fr split on md+ */\n twoThird: \"grid grid-cols-1 md:grid-cols-[2fr_1fr]\",\n /** 1fr / 2fr split on md+ */\n oneThird: \"grid grid-cols-1 md:grid-cols-[1fr_2fr]\",\n /** Fixed 280px left sidebar + 1fr on lg+ */\n sidebar: \"grid grid-cols-1 lg:grid-cols-[280px_1fr]\",\n /** 1fr + fixed 280px right sidebar on lg+ */\n sidebarRight: \"grid grid-cols-1 lg:grid-cols-[1fr_280px]\",\n /** Fixed 320px left sidebar + 1fr on lg+ (admin layout) */\n sidebarWide: \"grid grid-cols-1 lg:grid-cols-[320px_1fr]\",\n /** Product detail triplet: gallery | info | actions sidebar */\n productDetailTriplet:\n \"grid grid-cols-1 lg:grid-cols-[1fr_1fr_280px] xl:grid-cols-[1fr_1fr_300px] 2xl:grid-cols-[1fr_1fr_320px] gap-6 lg:gap-8\",\n /** CSS auto-fill, min 200px columns */\n autoSm: \"grid grid-cols-[repeat(auto-fill,minmax(200px,1fr))]\",\n /** CSS auto-fill, min 280px columns */\n autoMd: \"grid grid-cols-[repeat(auto-fill,minmax(280px,1fr))]\",\n /** CSS auto-fill, min 360px columns */\n autoLg: \"grid grid-cols-[repeat(auto-fill,minmax(360px,1fr))]\",\n} as const;\n\nexport type GridCols = keyof typeof GRID_MAP;\n\n// Alignment helpers shared across Stack and Row\nconst ITEMS_MAP = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n baseline: \"items-baseline\",\n} as const;\n\ntype ItemsAlign = keyof typeof ITEMS_MAP;\n\nconst JUSTIFY_MAP = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n around: \"justify-around\",\n evenly: \"justify-evenly\",\n} as const;\n\ntype JustifyContent = keyof typeof JUSTIFY_MAP;\n\n// ─── Container ────────────────────────────────────────────────────────────────\n\n/**\n * Page-level container with max-width + centering + responsive horizontal padding.\n * Replaces repeated `max-w-7xl mx-auto px-4 sm:px-6 lg:px-8` strings.\n *\n * @example\n * ```tsx\n * <Container>...</Container> // max-w-7xl (default)\n * <Container size=\"lg\">...</Container> // max-w-5xl\n * <Container size=\"full\" as=\"main\">...</Container>\n * ```\n */\nexport interface ContainerProps extends React.HTMLAttributes<HTMLElement> {\n /**\n * Max-width breakpoint preset.\n * - `sm` → `max-w-3xl` (blog / policy)\n * - `md` → `max-w-4xl` (contact / about)\n * - `lg` → `max-w-5xl` (checkout / help)\n * - `xl` → `max-w-6xl` (product detail / cart)\n * - `2xl` → `max-w-7xl` (main content grids — **default**)\n * - `full` → `max-w-screen-2xl` (full-bleed)\n * - `wide` → `max-w-screen-2xl` (compact px, no lg step)\n * - `ultra` → `max-w-[1920px]` (ultra-wide / 4K displays)\n */\n size?: ContainerSize;\n /** Render as a different element (e.g. `\"main\"`, `\"section\"`). Defaults to `\"div\"`. */\n as?: React.ElementType;\n children?: React.ReactNode;\n}\n\nexport function Container({\n size = \"2xl\",\n as,\n className = \"\",\n children,\n ...props\n}: ContainerProps) {\n const Tag = (as ?? \"div\") as React.ElementType;\n return (\n <Tag\n className={[CONTAINER_MAP[size], className].filter(Boolean).join(\" \")}\n {...props}\n >\n {children}\n </Tag>\n );\n}\n\n// ─── Stack ────────────────────────────────────────────────────────────────────\n\n/**\n * Vertical flex column. Use instead of `<div className=\"flex flex-col gap-4\">`.\n *\n * @example\n * ```tsx\n * <Stack gap=\"sm\">\n * <Text>Line one</Text>\n * <Text>Line two</Text>\n * </Stack>\n *\n * // As a list\n * <Stack as=\"ul\" gap=\"xs\">\n * <Li>Item</Li>\n * </Stack>\n * ```\n */\nexport interface StackProps extends React.HTMLAttributes<HTMLElement> {\n /** Space between children. Defaults to `\"md\"` (`gap-4`). */\n gap?: GapKey;\n /** Centers children on both axes (`items-center justify-center`). */\n centered?: boolean;\n /** Cross-axis (horizontal) alignment. Defaults to `\"stretch\"`. */\n align?: Extract<ItemsAlign, \"start\" | \"center\" | \"end\" | \"stretch\">;\n /** Render as a different element. Defaults to `\"div\"`. */\n as?: React.ElementType;\n children?: React.ReactNode;\n}\n\nexport function Stack({\n gap = \"md\",\n centered = false,\n align = \"stretch\",\n as,\n className = \"\",\n children,\n ...props\n}: StackProps) {\n const Tag = (as ?? \"div\") as React.ElementType;\n const classes = [\n \"flex flex-col\",\n GAP_MAP[gap],\n centered ? \"items-center justify-center\" : \"\",\n !centered && align !== \"stretch\" ? ITEMS_MAP[align] : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <Tag className={classes} {...props}>\n {children}\n </Tag>\n );\n}\n\n// ─── Row ─────────────────────────────────────────────────────────────────────\n\n/**\n * Horizontal flex row. Use instead of `<div className=\"flex items-center gap-3\">`.\n *\n * @example\n * ```tsx\n * <Row gap=\"sm\" justify=\"between\">\n * <Heading level={3}>Title</Heading>\n * <Button>Action</Button>\n * </Row>\n *\n * <Row gap=\"xs\" wrap>\n * <Badge>tag</Badge>\n * <Badge>other</Badge>\n * </Row>\n * ```\n */\nexport interface RowProps extends React.HTMLAttributes<HTMLElement> {\n /** Space between children. Defaults to `\"md\"` (`gap-4`). */\n gap?: GapKey;\n /** Centers children on both axes (`items-center justify-center`). */\n centered?: boolean;\n /** Cross-axis (vertical) alignment. Defaults to `\"center\"`. */\n align?: ItemsAlign;\n /** Main-axis (horizontal) distribution. Defaults to `\"start\"`. */\n justify?: JustifyContent;\n /** Allow children to wrap onto multiple lines. */\n wrap?: boolean;\n /** Render as a different element. Defaults to `\"div\"`. */\n as?: React.ElementType;\n children?: React.ReactNode;\n}\n\nexport function Row({\n gap = \"md\",\n centered = false,\n align = \"center\",\n justify = \"start\",\n wrap = false,\n as,\n className = \"\",\n children,\n ...props\n}: RowProps) {\n const Tag = (as ?? \"div\") as React.ElementType;\n const classes = [\n \"flex flex-row\",\n centered ? \"items-center justify-center\" : ITEMS_MAP[align],\n !centered && justify !== \"start\" ? JUSTIFY_MAP[justify] : \"\",\n GAP_MAP[gap],\n wrap ? \"flex-wrap\" : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <Tag className={classes} {...props}>\n {children}\n </Tag>\n );\n}\n\n// ─── Grid ─────────────────────────────────────────────────────────────────────\n\n/**\n * Responsive CSS grid. Use instead of `<div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4\">`.\n *\n * @example\n * ```tsx\n * <Grid cols={3} gap=\"md\">\n * <ProductCard />\n * <ProductCard />\n * </Grid>\n *\n * <Grid cols=\"sidebar\" gap=\"lg\">\n * <Aside>Filters</Aside>\n * <Main>Results</Main>\n * </Grid>\n * ```\n */\nexport interface GridProps extends React.HTMLAttributes<HTMLElement> {\n /**\n * Column preset.\n * - Numbers `1`–`6` → mobile-first responsive stacks\n * - `\"halves\"` → equal 2-col on md+\n * - `\"sidebar\"` / `\"sidebarRight\"` / `\"sidebarWide\"` → fixed+flexible splits\n * - `\"twoThird\"` / `\"oneThird\"` → 2fr/1fr splits\n * - `\"autoSm\"` / `\"autoMd\"` / `\"autoLg\"` → CSS auto-fill grids\n * - Omit (or `undefined`) to use a raw `grid` base and supply columns via\n * the `className` prop directly (e.g. `className=\"grid-cols-2\"`). Useful\n * for fixed non-responsive column counts (form field pairs, button rows).\n */\n cols?: GridCols;\n /** Space between grid cells. Defaults to `\"md\"` (`gap-4`). */\n gap?: GapKey;\n /** Render as a different element. Defaults to `\"div\"`. */\n as?: React.ElementType;\n children?: React.ReactNode;\n}\n\nexport function Grid({\n cols,\n gap = \"md\",\n as,\n className = \"\",\n children,\n ...props\n}: GridProps) {\n const Tag = (as ?? \"div\") as React.ElementType;\n // When cols is omitted callers supply grid-cols-* themselves via className.\n const baseClass = cols !== undefined ? GRID_MAP[cols] : \"grid\";\n const classes = [baseClass, GAP_MAP[gap], className]\n .filter(Boolean)\n .join(\" \");\n return (\n <Tag className={classes} {...props}>\n {children}\n </Tag>\n );\n}\n","\"use client\";\r\n\r\nimport {\r\n useRef,\r\n useEffect,\r\n useCallback,\r\n type RefObject,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nexport interface PerViewConfig {\r\n base?: number;\r\n xs?: number;\r\n sm?: number;\r\n md?: number;\r\n lg?: number;\r\n xl?: number;\r\n \"2xl\"?: number;\r\n}\r\n\r\nexport interface HorizontalScrollerProps<T = unknown> {\r\n children?: ReactNode;\r\n className?: string;\r\n gap?: number;\r\n snapToItems?: boolean;\r\n showArrows?: boolean;\r\n arrowSize?: \"sm\" | \"md\" | \"lg\";\r\n showScrollbar?: boolean;\r\n showFadeEdges?: boolean;\r\n scrollContainerRef?: RefObject<HTMLDivElement | null>;\r\n onScroll?: () => void;\r\n items?: T[];\r\n renderItem?: (item: T, index: number) => ReactNode;\r\n keyExtractor?: (item: T, index: number) => string;\r\n perView?: number | PerViewConfig;\r\n rows?: number;\r\n autoScroll?: boolean;\r\n autoScrollInterval?: number;\r\n minItemWidth?: number;\r\n pauseOnHover?: boolean;\r\n itemClassName?: string;\r\n}\r\n\r\nexport function HorizontalScroller<T = unknown>({\r\n children,\r\n className = \"\",\r\n gap = 16,\r\n snapToItems,\r\n showArrows,\r\n arrowSize = \"md\",\r\n showScrollbar,\r\n showFadeEdges,\r\n scrollContainerRef: externalRef,\r\n onScroll,\r\n items,\r\n renderItem,\r\n keyExtractor,\r\n perView,\r\n rows = 1,\r\n autoScroll,\r\n autoScrollInterval = 3500,\r\n minItemWidth,\r\n itemClassName = \"\",\r\n}: HorizontalScrollerProps<T>) {\r\n void perView;\r\n void rows;\r\n\r\n const internalRef = useRef<HTMLDivElement>(null);\r\n const containerRef = (externalRef ??\r\n internalRef) as RefObject<HTMLDivElement>;\r\n const autoScrollTimer = useRef<ReturnType<typeof setInterval> | undefined>(\r\n undefined,\r\n );\r\n\r\n const scrollBy = useCallback(\r\n (direction: 1 | -1) => {\r\n const el = containerRef.current;\r\n if (!el) return;\r\n const width = el.clientWidth;\r\n el.scrollBy({ left: direction * width * 0.8, behavior: \"smooth\" });\r\n },\r\n [containerRef],\r\n );\r\n\r\n useEffect(() => {\r\n if (!autoScroll) return;\r\n autoScrollTimer.current = setInterval(\r\n () => scrollBy(1),\r\n autoScrollInterval,\r\n );\r\n return () => clearInterval(autoScrollTimer.current);\r\n }, [autoScroll, autoScrollInterval, scrollBy]);\r\n\r\n const itemsMode = items != null && renderItem != null;\r\n\r\n const arrowCls = {\r\n sm: \"w-7 h-7 text-sm\",\r\n md: \"w-9 h-9 text-base\",\r\n lg: \"w-11 h-11 text-lg\",\r\n }[arrowSize];\r\n\r\n const scrollerCls = [\r\n \"flex h-full overflow-x-auto scroll-smooth\",\r\n snapToItems ? \"snap-x snap-mandatory\" : \"\",\r\n showScrollbar ? \"\" : \"[scrollbar-width:none] [&::-webkit-scrollbar]:hidden\",\r\n \"pb-1\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n const content = itemsMode\r\n ? items.map((item, i) => (\r\n <div\r\n key={keyExtractor ? keyExtractor(item, i) : i}\r\n className={[\r\n snapToItems ? \"snap-start flex-none\" : \"flex-none\",\r\n itemClassName,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n style={minItemWidth ? { minWidth: minItemWidth } : undefined}\r\n >\r\n {renderItem(item, i)}\r\n </div>\r\n ))\r\n : children;\r\n\r\n if (showArrows) {\r\n return (\r\n <div className={`relative ${className}`}>\r\n {showFadeEdges && (\r\n <>\r\n <div className=\"absolute left-0 top-0 bottom-0 w-8 bg-gradient-to-r from-white dark:from-gray-900 to-transparent z-10 pointer-events-none\" />\r\n <div className=\"absolute right-0 top-0 bottom-0 w-8 bg-gradient-to-l from-white dark:from-gray-900 to-transparent z-10 pointer-events-none\" />\r\n </>\r\n )}\r\n <button\r\n type=\"button\"\r\n onClick={() => scrollBy(-1)}\r\n aria-label=\"Previous\"\r\n className={`absolute left-0 top-1/2 -translate-y-1/2 z-20 ${arrowCls} rounded-full bg-white/90 dark:bg-gray-800/90 border border-gray-200 dark:border-gray-700 shadow flex items-center justify-center hover:bg-white dark:hover:bg-gray-700 transition-colors`}\r\n >\r\n {\"<\"}\r\n </button>\r\n <div\r\n ref={containerRef}\r\n onScroll={onScroll}\r\n className={scrollerCls}\r\n style={{ gap: `${gap}px`, paddingLeft: 36, paddingRight: 36 }}\r\n >\r\n {content}\r\n </div>\r\n <button\r\n type=\"button\"\r\n onClick={() => scrollBy(1)}\r\n aria-label=\"Next\"\r\n className={`absolute right-0 top-1/2 -translate-y-1/2 z-20 ${arrowCls} rounded-full bg-white/90 dark:bg-gray-800/90 border border-gray-200 dark:border-gray-700 shadow flex items-center justify-center hover:bg-white dark:hover:bg-gray-700 transition-colors`}\r\n >\r\n {\">\"}\r\n </button>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className={`relative ${className}`}>\r\n {showFadeEdges && (\r\n <>\r\n <div className=\"absolute left-0 top-0 bottom-0 w-8 bg-gradient-to-r from-white dark:from-gray-900 to-transparent z-10 pointer-events-none\" />\r\n <div className=\"absolute right-0 top-0 bottom-0 w-8 bg-gradient-to-l from-white dark:from-gray-900 to-transparent z-10 pointer-events-none\" />\r\n </>\r\n )}\r\n <div\r\n ref={containerRef}\r\n onScroll={onScroll}\r\n className={scrollerCls}\r\n style={{ gap: `${gap}px` }}\r\n >\r\n {content}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","/**\n * @mohasinac/tokens — TypeScript constants\n *\n * Mirrors the CSS custom properties in tokens.css as typed TS values.\n * Use these when you need token values in JS (e.g. canvas drawing, charting,\n * or building the tailwind.config.js color palette from a single source).\n *\n * In CSS/Tailwind prefer `var(--appkit-*)` references over these constants.\n */\n\n// ─── Brand Colors ──────────────────────────────────────────────────────────\n\nexport const COLORS = {\n primary: {\n DEFAULT: \"#84e122\",\n 50: \"#f3ffe3\",\n 100: \"#e4ffc5\",\n 200: \"#c8ff90\",\n 300: \"#a3f550\",\n 400: \"#84e122\",\n 500: \"#65c408\",\n 600: \"#509c02\",\n 700: \"#3e7708\",\n 800: \"#345e0d\",\n 900: \"#2c5011\",\n 950: \"#142d03\",\n },\n secondary: {\n DEFAULT: \"#e91e8c\",\n 50: \"#fdf0f8\",\n 100: \"#fce2f2\",\n 200: \"#fac6e6\",\n 300: \"#f79dd2\",\n 400: \"#f063b9\",\n 500: \"#e91e8c\",\n 600: \"#d4107a\",\n 700: \"#b00d66\",\n 800: \"#900f56\",\n 900: \"#771249\",\n 950: \"#480525\",\n },\n cobalt: {\n DEFAULT: \"#3570fc\",\n 50: \"#eef5ff\",\n 100: \"#d9e8ff\",\n 200: \"#bcd4ff\",\n 300: \"#8eb9ff\",\n 400: \"#5992ff\",\n 500: \"#3570fc\",\n 600: \"#1a55f2\",\n 700: \"#1343de\",\n 800: \"#1536b4\",\n 900: \"#18318e\",\n 950: \"#111e58\",\n },\n accent: {\n DEFAULT: \"#8393b2\",\n 50: \"#f5f7fa\",\n 100: \"#eaeef4\",\n 200: \"#d1dae6\",\n 300: \"#adb9cf\",\n 400: \"#8393b2\",\n 500: \"#657599\",\n 600: \"#505f7f\",\n 700: \"#424d67\",\n 800: \"#394257\",\n 900: \"#333b4b\",\n 950: \"#222730\",\n },\n semantic: {\n success: \"#059669\",\n warning: \"#d97706\",\n error: \"#dc2626\",\n info: \"#0284c7\",\n },\n} as const;\n\n// ─── Border Radius ─────────────────────────────────────────────────────────\n\nexport const RADIUS = {\n sm: \"0.25rem\",\n md: \"0.375rem\",\n lg: \"0.5rem\",\n xl: \"0.75rem\",\n \"2xl\": \"1rem\",\n \"3xl\": \"1.5rem\",\n card: \"1rem\",\n btn: \"0.75rem\",\n full: \"9999px\",\n} as const;\n\n// ─── Shadow ────────────────────────────────────────────────────────────────\n\nexport const SHADOWS = {\n sm: \"0 1px 2px 0 rgba(0,0,0,0.05)\",\n md: \"0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1)\",\n lg: \"0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)\",\n xl: \"0 20px 25px -5px rgba(0,0,0,0.1), 0 8px 10px -6px rgba(0,0,0,0.1)\",\n soft: \"0 2px 15px -3px rgba(0,0,0,0.07), 0 10px 20px -2px rgba(0,0,0,0.04)\",\n glow: \"0 0 20px rgba(80, 156, 2, 0.45)\",\n glowPink: \"0 0 20px rgba(233, 30, 140, 0.5)\",\n} as const;\n\n// ─── Z-index ───────────────────────────────────────────────────────────────\n\nexport const Z_INDEX = {\n dropdown: 30,\n searchBackdrop: 35,\n navbar: 40,\n bottomNav: 40,\n overlay: 45,\n sidebar: 50,\n titleBar: 50,\n modal: 60,\n toast: 70,\n} as const;\n\n// ─── Token helper ──────────────────────────────────────────────────────────\n\n/**\n * Returns a CSS custom property reference for the given token name.\n *\n * @example\n * token(\"color-primary\") // \"var(--appkit-color-primary)\"\n * token(\"radius-card\") // \"var(--appkit-radius-card)\"\n * token(\"shadow-glow\") // \"var(--appkit-shadow-glow)\"\n */\nexport function token(name: string): string {\n return `var(--appkit-${name})`;\n}\n\n// ─── Convenience groups ────────────────────────────────────────────────────\n\nexport const TOKENS = {\n colors: COLORS,\n radius: RADIUS,\n shadows: SHADOWS,\n zIndex: Z_INDEX,\n token,\n} as const;\n\n// ─── LOCALE_CONFIG ─────────────────────────────────────────────────────────\n\n/**\n * Locale and currency defaults for Indian e-commerce.\n * Consumer projects can override individual keys in their own constants.\n *\n * @example\n * ```ts\n * import { LOCALE_CONFIG } from \"@mohasinac/appkit/tokens\";\n *\n * const price = new Intl.NumberFormat(LOCALE_CONFIG.defaultLocale, {\n * style: \"currency\",\n * currency: LOCALE_CONFIG.defaultCurrency,\n * }).format(1299);\n * // => \"\\u20b91,299.00\"\n * ```\n */\nexport const LOCALE_CONFIG = {\n /** IETF language tag used for Intl formatters. */\n defaultLocale: \"en-IN\",\n /** ISO 4217 currency code. */\n defaultCurrency: \"INR\",\n /** IANA timezone for server-side date rendering. */\n defaultTimezone: \"Asia/Kolkata\",\n /** ISO 3166-1 alpha-2 country code. */\n defaultCountry: \"IN\",\n /** Locales available for the i18n router. */\n supportedLocales: [\"en-IN\", \"en-US\", \"en-GB\"] as const,\n /** Currencies the platform accepts. */\n supportedCurrencies: [\"INR\", \"USD\", \"GBP\", \"EUR\", \"AED\", \"SGD\"] as const,\n /** Currency symbol map for quick display use. */\n currencySymbols: {\n INR: \"\\u20b9\",\n USD: \"$\",\n GBP: \"\\u00a3\",\n EUR: \"\\u20ac\",\n AED: \"\\u062f.\\u0625\",\n SGD: \"S$\",\n } as const,\n /** Phone number prefix for IN locale. */\n defaultPhonePrefix: \"+91\",\n /** Postal code pattern for India (6 digits). */\n postalPattern: /^[1-9][0-9]{5}$/,\n} as const;\n\n//\n// Responsive-first design system constants for Tailwind CSS.\n// Framework rule: every grid includes xl: and 2xl: breakpoints (widescreen).\n// Touch targets are ≥ 44×44 px (WCAG 2.5.5).\n//\n// Projects (letitrip.in, licorice, hobson) import this as their base and\n// extend with brand-specific values. The `primary`/`secondary` Tailwind color\n// names are resolved by each consumer project's tailwind.config.js.\n\n/**\n * Dark-mode aware classes for backgrounds, text, and borders.\n * Base = zinc (light) / slate (dark — navy-tinted).\n */\nconst THEMED = {\n // Backgrounds\n bgPrimary: \"bg-zinc-50 dark:bg-slate-950\",\n bgSecondary: \"bg-zinc-100 dark:bg-slate-900\",\n bgTertiary: \"bg-zinc-200 dark:bg-slate-800\",\n bgElevated: \"bg-white dark:bg-slate-900/90\",\n bgInput: \"bg-white dark:bg-slate-800/60\",\n // Text\n textPrimary: \"text-zinc-900 dark:text-zinc-50\",\n textSecondary: \"text-zinc-500 dark:text-zinc-400\",\n textMuted: \"text-zinc-400 dark:text-zinc-500\",\n textError: \"text-red-600 dark:text-red-400\",\n textSuccess: \"text-emerald-600 dark:text-emerald-400\",\n textOnPrimary: \"text-white\",\n textOnDark: \"text-white\",\n // Borders\n border: \"border-zinc-200 dark:border-slate-700\",\n borderSubtle: \"border-zinc-100 dark:border-slate-800/60\",\n borderLight: \"border-zinc-100 dark:border-slate-700/60\",\n borderError: \"border-red-500\",\n borderColor: \"border-zinc-200 dark:border-slate-700\",\n // Interactive\n hover: \"hover:bg-zinc-100 dark:hover:bg-slate-800\",\n hoverCard: \"hover:bg-zinc-50 dark:hover:bg-slate-800/60\",\n hoverBorder: \"hover:border-zinc-300 dark:hover:border-slate-600\",\n hoverText: \"hover:text-zinc-800 dark:hover:text-zinc-100\",\n activeRow: \"bg-primary-50 dark:bg-secondary-950/30\",\n focusRing: \"focus:ring-primary-500 dark:focus:ring-secondary-400\",\n divider: \"divide-zinc-200 dark:divide-slate-700\",\n placeholder: \"placeholder-zinc-400 dark:placeholder-zinc-500\",\n} as const;\n\n/**\n * Layout dimension constants (height, width strings for Tailwind).\n */\nconst LAYOUT = {\n titleBarHeight: \"h-12\",\n navbarHeight: \"h-10 md:h-12\",\n sidebarWidth: \"w-80\",\n bottomNavHeight: \"h-14\",\n maxContentWidth: \"max-w-[1920px]\",\n containerWidth: \"max-w-[1920px]\",\n contentPadding: \"px-4 md:px-6 lg:px-8\",\n navPadding: \"px-4 sm:px-6 lg:px-8\",\n titleBarBg:\n \"bg-white/90 dark:bg-slate-950/90 backdrop-blur-md border-b border-zinc-200/80 dark:border-slate-800/80\",\n navbarBg:\n \"bg-white/90 dark:bg-slate-950/90 backdrop-blur-md border-b border-zinc-200/80 dark:border-slate-800/80\",\n sidebarBg:\n \"bg-white dark:bg-slate-900 border-l border-zinc-200 dark:border-slate-800\",\n bottomNavBg:\n \"bg-white/90 dark:bg-slate-950/90 backdrop-blur-md border-t border-zinc-200/80 dark:border-slate-800/80\",\n footerBg:\n \"bg-zinc-50 dark:bg-slate-900 border-t border-zinc-200 dark:border-slate-800\",\n fullScreen: \"min-h-screen\",\n flexCenter: \"flex items-center justify-center\",\n centerText: \"text-center\",\n // Mobile-first layout zone tokens (Phase 20)\n /** Full-width content zone: max screen-xl, centred, responsive px */\n content: \"w-full max-w-screen-xl mx-auto px-4 sm:px-6 xl:px-8\",\n /** Narrow zone for forms, articles, policy pages */\n tight: \"w-full max-w-3xl mx-auto px-4 sm:px-6\",\n /** Vertical rhythm padding for sections */\n section: \"py-10 sm:py-14 xl:py-20\",\n /** Compact sections (filters, related products) */\n sectionSm: \"py-6 sm:py-10\",\n /** Responsive gap for flex/grid children */\n gap: \"gap-4 sm:gap-6 xl:gap-8\",\n /** Responsive vertical stack spacing */\n stack: \"space-y-4 sm:space-y-6\",\n /** Kill trailing space from last child in a zone */\n noBleed: \"pb-0 mb-0\",\n /** Kill top margin from first element in a zone */\n firstChild: \"mt-0 pt-0\",\n /** Kill bottom margin from last element in a zone */\n lastChild: \"mb-0 pb-0\",\n /** Combined bottom-nav bar (hidden on lg+, iPhone safe-area aware) */\n bottomNav:\n \"fixed bottom-0 inset-x-0 z-50 flex justify-around items-center h-16 bg-white dark:bg-zinc-900 border-t border-zinc-200 dark:border-zinc-800 lg:hidden pb-[env(safe-area-inset-bottom)]\",\n /** Main content bottom padding to clear the bottom nav on mobile */\n mainPadBottomNav: \"pb-20 lg:pb-0\",\n} as const;\n\n/**\n * Typography scale — fluid steps across sm/md/lg breakpoints.\n */\nconst TYPOGRAPHY = {\n pageTitle:\n \"text-2xl md:text-3xl lg:text-4xl font-bold tracking-tight leading-tight\",\n pageSubtitle:\n \"text-base md:text-lg text-zinc-500 dark:text-zinc-400 leading-relaxed mt-1\",\n sectionTitle: \"text-xl md:text-2xl lg:text-3xl font-semibold tracking-tight\",\n sectionSubtitle:\n \"text-sm md:text-base lg:text-lg text-zinc-500 dark:text-zinc-400\",\n cardTitle: \"text-base md:text-lg font-semibold leading-snug\",\n cardBody: \"text-sm md:text-base leading-relaxed\",\n label: \"text-sm font-medium text-zinc-700 dark:text-zinc-300\",\n caption: \"text-xs text-zinc-500 dark:text-zinc-400\",\n overline:\n \"text-xs font-semibold uppercase tracking-wider text-zinc-500 dark:text-zinc-400\",\n h1: \"text-3xl md:text-4xl lg:text-5xl font-bold tracking-tight font-display\",\n h2: \"text-2xl md:text-3xl lg:text-4xl font-bold tracking-tight font-display\",\n h3: \"text-xl md:text-2xl lg:text-3xl font-bold tracking-tight font-display\",\n h4: \"text-lg md:text-xl lg:text-2xl font-bold font-display\",\n h5: \"text-base md:text-lg lg:text-xl font-medium\",\n h6: \"text-sm md:text-base lg:text-lg font-medium\",\n body: \"text-base lg:text-lg\",\n small: \"text-sm lg:text-base\",\n xs: \"text-xs lg:text-sm\",\n display: \"text-8xl md:text-9xl font-bold font-display\",\n} as const;\n\n/**\n * Spacing — section, form, and element stacking patterns + gap token map.\n * The gap map mirrors the GAP_MAP inlined in @mohasinac/ui Layout.tsx.\n */\nconst SPACING = {\n section: \"space-y-8 md:space-y-12 lg:space-y-16\",\n formGroup: \"space-y-6 lg:space-y-8\",\n stack: \"space-y-4\",\n stackSmall: \"space-y-2\",\n inline: \"space-x-4\",\n inlineSmall: \"gap-2 lg:gap-3\",\n inlineLarge: \"gap-4 lg:gap-6\",\n pageY: \"py-6 sm:py-8 lg:py-10\",\n sectionGap: \"mt-8 md:mt-12\",\n cardPadding: \"p-5 sm:p-6 lg:p-8\",\n padding: {\n xs: \"p-2\",\n sm: \"p-3\",\n md: \"p-4\",\n lg: \"p-6\",\n xl: \"p-8\",\n },\n gap: {\n none: \"\",\n px: \"gap-px\",\n xs: \"gap-1\",\n sm: \"gap-2\",\n \"2.5\": \"gap-2.5\",\n \"3\": \"gap-3\",\n md: \"gap-4\",\n lg: \"gap-6\",\n xl: \"gap-8\",\n \"2xl\": \"gap-12\",\n },\n} as const;\n\n/**\n * Responsive grid presets — mobile-first, every preset reaches xl: and 2xl:.\n *\n * Rules:\n * - Fixed column grids (cols1–cols6) scale gracefully to widescreen.\n * - Card grids start at 1 col on portrait mobile (≤639 px) for readability.\n * - Auto-fill grids use minmax so columns form naturally at any viewport width.\n */\nconst GRID = {\n /** Single column */\n cols1: \"grid grid-cols-1\",\n /** 1 → 2 */\n cols2: \"grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-2 2xl:grid-cols-2\",\n /** 1 → 2 → 3 → 4 on widescreen */\n cols3:\n \"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-3 2xl:grid-cols-4\",\n /** 1 → 2 → 3 → 4 → 5 on widescreen */\n cols4:\n \"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5\",\n /** 1 → 2 → 3 → 4 → 5 */\n cols5:\n \"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-4 2xl:grid-cols-5\",\n /** 2 → 3 → 4 → 5 → 6 */\n cols6:\n \"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 xl:grid-cols-5 2xl:grid-cols-6\",\n /**\n * Generic card grid — 1 col on portrait mobile → 5 on ultrawide.\n * Starts at 1 (not 2) so product cards with title+image+price are readable\n * even on 320 px handsets in portrait orientation.\n */\n cards:\n \"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-4 2xl:grid-cols-5\",\n /** Auto-fill product cards — min 200 px */\n productCards: \"grid grid-cols-[repeat(auto-fill,minmax(200px,1fr))] gap-6\",\n /** Auto-fill store cards — min 220 px */\n storeCards: \"grid grid-cols-[repeat(auto-fill,minmax(220px,1fr))] gap-6\",\n /** Auto-fill category icon+label tiles — min 130 px */\n categoryCards: \"grid grid-cols-[repeat(auto-fill,minmax(130px,1fr))] gap-4\",\n /** Auto-fill coupon/promo cards — min 264 px */\n couponCards: \"grid grid-cols-[repeat(auto-fill,minmax(264px,1fr))] gap-6\",\n /** Auto-fill address / wide cards — min 300 px */\n addressCards: \"grid grid-cols-[repeat(auto-fill,minmax(300px,1fr))] gap-4\",\n /** Auto-fill KPI/stat tiles — min 180 px */\n statTiles: \"grid grid-cols-[repeat(auto-fill,minmax(180px,1fr))] gap-4\",\n /** Auto-fill account nav tiles — min 160 px */\n navTiles: \"grid grid-cols-[repeat(auto-fill,minmax(160px,1fr))] gap-4\",\n /** Auto-fill, min 200 px */\n autoFillSm: \"grid grid-cols-[repeat(auto-fill,minmax(200px,1fr))]\",\n /** Auto-fill, min 280 px */\n autoFillMd: \"grid grid-cols-[repeat(auto-fill,minmax(280px,1fr))]\",\n /** Auto-fill, min 360 px */\n autoFillLg: \"grid grid-cols-[repeat(auto-fill,minmax(360px,1fr))]\",\n /** Fixed 280 px left sidebar + 1fr */\n sidebar: \"grid grid-cols-1 lg:grid-cols-[280px_1fr]\",\n /** 1fr + fixed 280 px right sidebar */\n sidebarRight: \"grid grid-cols-1 lg:grid-cols-[1fr_280px]\",\n /** Fixed 320 px left sidebar + 1fr (admin) */\n sidebarWide: \"grid grid-cols-1 lg:grid-cols-[320px_1fr]\",\n /** Equal halves on md+ */\n halves: \"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-2 2xl:grid-cols-2\",\n /** 2fr / 1fr */\n twoThird: \"grid grid-cols-1 md:grid-cols-[2fr_1fr]\",\n /** 1fr / 2fr */\n oneThird: \"grid grid-cols-1 md:grid-cols-[1fr_2fr]\",\n // Phase 20 mobile-first named grid presets\n /** Product grid — 2 cols on mobile, scales to 5 on ultrawide */\n products:\n \"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 gap-3 sm:gap-4 xl:gap-6\",\n /** Wide card grid — 1 col on mobile → 3 on xl */\n wide: \"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-6 xl:gap-8\",\n /** Admin stats grid — 1 col → 4 KPI tiles on xl */\n admin: \"grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-4 gap-4\",\n /** Filter sidebar + main content + optional right aside */\n withFilter:\n \"grid grid-cols-1 lg:grid-cols-[220px_1fr] xl:grid-cols-[260px_1fr_200px] gap-4 xl:gap-6\",\n} as const;\n\n// ─── FLUID GRID ─────────────────────────────────────────────────────────────\n/**\n * Minimum item widths for auto-fill fluid grids matching the four\n * `fluid-grid-*` CSS utilities (defined in tailwind.config.js plugin).\n *\n * Usage: `useContainerGrid({ minItemWidth: FLUID_GRID_MIN_WIDTHS.card })`\n */\nexport const FLUID_GRID_MIN_WIDTHS = {\n /** Product cards, store cards */\n card: 220,\n /** Admin stat cards, user cards */\n admin: 260,\n /** Blog cards, event cards */\n wide: 300,\n /** Gallery thumbnails */\n thumb: 160,\n /** Form fields — two-column threshold */\n form: 280,\n /** Tab strip items */\n tabItem: 100,\n /** Filter chips */\n chip: 80,\n} as const;\n\n/**\n * Tailwind CSS class strings for fluid auto-fill grids.\n * Use these instead of `grid grid-cols-*` breakpoint classes.\n */\nconst FLUID_GRID = {\n /** Product / store cards — min 220 px */\n card: \"fluid-grid-card\",\n /** Admin stat / user cards — min 260 px */\n admin: \"fluid-grid-admin\",\n /** Blog / event cards — min 300 px */\n wide: \"fluid-grid-wide\",\n /** Gallery thumbnails — min 160 px */\n thumb: \"fluid-grid-thumb\",\n} as const;\n\n/**\n * Page container presets — max-width + centering + responsive horizontal padding.\n * Mirrors the CONTAINER_MAP inlined in @mohasinac/ui Layout.tsx.\n */\nconst PAGE = {\n px: \"px-4 sm:px-6 lg:px-8\",\n container: {\n /** max-w-3xl — blog / policy */\n sm: \"max-w-3xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** max-w-4xl — contact / about */\n md: \"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** max-w-5xl — checkout / help */\n lg: \"max-w-5xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** max-w-6xl — product detail / cart */\n xl: \"max-w-6xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** max-w-7xl — main content grids (default) */\n \"2xl\": \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** max-w-screen-2xl — full-bleed content */\n full: \"max-w-screen-2xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** max-w-screen-2xl — wide store/seller layouts (compact px) */\n wide: \"max-w-screen-2xl mx-auto px-4 sm:px-6\",\n /** max-w-[1920px] — ultra-wide / 4K displays */\n ultra: \"max-w-[1920px] mx-auto px-4 sm:px-6 lg:px-8\",\n },\n} as const;\n\n/**\n * Form input styles — border, bg, focus ring, error/success/disabled states.\n */\nconst INPUT = {\n base: \"rounded-lg border border-zinc-200 dark:border-slate-700 bg-white dark:bg-slate-800/60 px-3.5 py-2.5 text-base sm:text-sm text-zinc-900 dark:text-zinc-100 focus:ring-2 focus:ring-primary-500/40 dark:focus:ring-secondary-400/40 focus:border-primary-500 dark:focus:border-secondary-400 focus:outline-none transition-colors duration-150 placeholder:text-zinc-400 dark:placeholder:text-zinc-500\",\n error:\n \"border-red-400 dark:border-red-500 focus:ring-red-500/20 focus:border-red-500 bg-red-50/30 dark:bg-red-950/10\",\n success:\n \"border-emerald-400 dark:border-emerald-500 focus:ring-emerald-500/20 focus:border-emerald-500\",\n disabled:\n \"bg-zinc-50 dark:bg-slate-800/30 text-zinc-400 dark:text-zinc-500 cursor-not-allowed opacity-60\",\n withIcon: \"pl-10\",\n} as const;\n\n/**\n * Card styles — base, hover, elevated, glass, and interactive variants.\n */\nconst CARD = {\n base: \"rounded-2xl overflow-hidden transition-all\",\n shadow: \"shadow-sm\",\n shadowElevated: \"shadow-lg\",\n hover:\n \"hover:shadow-md dark:hover:shadow-xl cursor-pointer transition-shadow duration-200\",\n standard:\n \"rounded-2xl border border-zinc-200 dark:border-slate-700 bg-white dark:bg-slate-900 shadow-sm hover:shadow-md transition-all duration-200\",\n elevated:\n \"rounded-2xl bg-white dark:bg-slate-900 border border-zinc-200 dark:border-slate-700 shadow-md hover:shadow-lg transition-shadow duration-200\",\n interactive:\n \"rounded-2xl border border-zinc-200 dark:border-slate-700 bg-white dark:bg-slate-900 shadow-sm hover:shadow-md hover:border-primary-300/60 dark:hover:border-secondary-500/60 transition-all duration-200 cursor-pointer\",\n glass:\n \"rounded-2xl backdrop-blur-md bg-white/85 dark:bg-slate-900/85 border border-zinc-200/60 dark:border-slate-700/40 shadow-lg\",\n // Card anatomy tokens (Phase 20)\n /** Product card image wrapper — portrait aspect ratio */\n image: \"relative aspect-[3/4] overflow-hidden bg-zinc-100 dark:bg-zinc-800\",\n /** Wide image wrapper — video/landscape ratio */\n imageWide:\n \"relative aspect-video overflow-hidden bg-zinc-100 dark:bg-zinc-800\",\n /** Square image wrapper */\n imageSquare:\n \"relative aspect-square overflow-hidden bg-zinc-100 dark:bg-zinc-800\",\n /** Card body — flex-column, responsive padding */\n body: \"flex flex-col flex-1 gap-1 p-3 sm:p-4\",\n /** Card footer — responsive padding */\n footer: \"px-3 pb-3 sm:px-4 sm:pb-4\",\n /** Badge overlay (top-left) */\n badge: \"absolute top-2 left-2 z-10\",\n /** Action overlay, e.g. wishlist button (top-right) */\n action: \"absolute top-2 right-2 z-10\",\n} as const;\n\n/**\n * Flex layout compositions — pre-composed flex containers.\n * Use these instead of writing flex classes inline.\n */\nconst FLEX = {\n row: \"flex flex-row\",\n col: \"flex flex-col\",\n rowWrap: \"flex flex-row flex-wrap\",\n colWrap: \"flex flex-col flex-wrap\",\n inline: \"inline-flex\",\n center: \"flex items-center justify-center\",\n between: \"flex items-center justify-between\",\n betweenStart: \"flex items-start justify-between\",\n betweenEnd: \"flex items-end justify-between\",\n start: \"flex items-center justify-start\",\n end: \"flex items-center justify-end\",\n rowCenter: \"flex flex-row items-center\",\n rowStart: \"flex flex-row items-start\",\n rowEnd: \"flex flex-row items-end\",\n centerCol: \"flex flex-col items-center justify-center\",\n colStart: \"flex flex-col items-start\",\n colCenter: \"flex flex-col items-center\",\n colEnd: \"flex flex-col items-end\",\n colBetween: \"flex flex-col justify-between\",\n inlineCenter: \"inline-flex items-center\",\n inlineFull: \"inline-flex items-center justify-center\",\n grow: \"flex-1\",\n growMin: \"flex-1 min-w-0\",\n growMinH: \"flex-1 min-h-0\",\n noShrink: \"flex-shrink-0\",\n none: \"flex-none\",\n hCenter: \"flex justify-center\",\n} as const;\n\n/**\n * Position utilities.\n */\nconst POSITION = {\n relative: \"relative\",\n absolute: \"absolute\",\n fixed: \"fixed\",\n sticky: \"sticky\",\n static: \"static\",\n fill: \"absolute inset-0\",\n absoluteCenter: \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\",\n absoluteTop: \"absolute top-0 inset-x-0\",\n absoluteBottom: \"absolute bottom-0 inset-x-0\",\n absoluteTopRight: \"absolute top-0 right-0\",\n absoluteTopLeft: \"absolute top-0 left-0\",\n absoluteBottomRight: \"absolute bottom-0 right-0\",\n absoluteBottomLeft: \"absolute bottom-0 left-0\",\n} as const;\n\n/**\n * Component state modifiers.\n */\nconst STATES = {\n disabled: \"opacity-50 cursor-not-allowed pointer-events-none\",\n loading: \"opacity-75 cursor-wait\",\n readonly: \"bg-zinc-100 dark:bg-slate-800 cursor-default\",\n error: \"border-red-500 dark:border-red-500\",\n success: \"border-green-500 dark:border-green-500\",\n focus:\n \"focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2 dark:focus:ring-secondary-400 dark:focus:ring-offset-slate-950\",\n} as const;\n\n/**\n * Transition classes.\n */\nconst TRANSITIONS = {\n default: \"transition-all duration-200 ease-in-out\",\n fast: \"transition-all duration-150 ease-in-out\",\n slow: \"transition-all duration-500 ease-in-out\",\n colors: \"transition-colors duration-200 ease-in-out\",\n transform: \"transition-transform duration-200 ease-in-out\",\n opacity: \"transition-opacity duration-200 ease-in-out\",\n} as const;\n\n/**\n * Skeleton loading placeholders.\n *\n * Two variants:\n * - `pulse` (default) — fade in/out via `animate-pulse`.\n * - `shimmer` — left-to-right highlight sweep. Requires `animate-shimmer`\n * keyframe defined in tailwind.config.js:\n * ```js\n * // tailwind.config.js\n * theme: { extend: { animation: { shimmer: \"shimmer 1.5s infinite\" },\n * keyframes: { shimmer: { \"0%\": { backgroundPosition: \"-400% 0\" },\n * \"100%\": { backgroundPosition: \"400% 0\" } } } } }\n * ```\n */\nconst SKELETON = {\n // ─ Pulse (fade) variant ────────────────────────────────────────────────────────────────\n base: \"animate-pulse rounded bg-zinc-200 dark:bg-slate-700/60\",\n text: \"animate-pulse rounded bg-zinc-200 dark:bg-slate-700/60 h-4\",\n heading: \"animate-pulse rounded bg-zinc-200 dark:bg-slate-700/60 h-7\",\n image: \"animate-pulse rounded-xl bg-zinc-200 dark:bg-slate-700/60\",\n card: \"animate-pulse rounded-2xl bg-zinc-200 dark:bg-slate-700/60\",\n // ─ Shimmer (sweep) variant ──────────────────────────────────────────────────────────\n shimmer:\n \"animate-shimmer bg-[length:400%_100%] rounded bg-gradient-to-r from-zinc-200 via-zinc-100 to-zinc-200 dark:from-slate-800 dark:via-slate-700/60 dark:to-slate-800\",\n shimmerText:\n \"animate-shimmer bg-[length:400%_100%] h-4 rounded bg-gradient-to-r from-zinc-200 via-zinc-100 to-zinc-200 dark:from-slate-800 dark:via-slate-700/60 dark:to-slate-800\",\n shimmerCard:\n \"animate-shimmer bg-[length:400%_100%] rounded-2xl bg-gradient-to-r from-zinc-200 via-zinc-100 to-zinc-200 dark:from-slate-800 dark:via-slate-700/60 dark:to-slate-800\",\n} as const;\n\n/**\n * Touch target sizes — WCAG 2.5.5 (minimum 44 × 44 px).\n */\nconst TOUCH = {\n target: \"min-h-[44px] min-w-[44px]\",\n targetSm: \"min-h-[36px] min-w-[36px]\",\n targetH: \"min-h-[44px]\",\n targetW: \"min-w-[44px]\",\n /** 44 px height primary button */\n button: \"h-11 px-5 py-2.5\",\n /** 44×44 icon button */\n icon: \"h-11 w-11 flex items-center justify-center\",\n /** 44 px height input */\n input: \"h-11 px-3 py-2\",\n /** 48 px height tab */\n tab: \"h-12 px-4\",\n /** Secondary chip (smaller but acceptable) */\n chip: \"h-9 px-3\",\n} as const;\n\n/**\n * Scrollbar and safe-area utilities.\n */\nconst UTILITIES = {\n scrollbarHide:\n \"scrollbar-hide [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none]\",\n scrollbarThin:\n \"scrollbar-thin [&::-webkit-scrollbar]:w-1.5 [&::-webkit-scrollbar-track]:bg-zinc-100 dark:[&::-webkit-scrollbar-track]:bg-slate-800/60 [&::-webkit-scrollbar-track]:rounded-full [&::-webkit-scrollbar-thumb]:bg-zinc-300 dark:[&::-webkit-scrollbar-thumb]:bg-slate-600 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb:hover]:bg-zinc-400 dark:[&::-webkit-scrollbar-thumb:hover]:bg-slate-500\",\n scrollbarThinX:\n \"[&::-webkit-scrollbar]:h-1.5 [&::-webkit-scrollbar-track]:rounded-full [&::-webkit-scrollbar-track]:bg-zinc-100 dark:[&::-webkit-scrollbar-track]:bg-slate-800/60 [&::-webkit-scrollbar-thumb]:bg-zinc-300 dark:[&::-webkit-scrollbar-thumb]:bg-slate-600 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb:hover]:bg-zinc-400 dark:[&::-webkit-scrollbar-thumb:hover]:bg-slate-500\",\n safeAreaBottom: \"pb-[env(safe-area-inset-bottom)]\",\n safeAreaTop: \"pt-[env(safe-area-inset-top)]\",\n safeAreaInline:\n \"px-[env(safe-area-inset-left)] px-[env(safe-area-inset-right)]\",\n gradientText:\n \"bg-gradient-to-r from-primary-600 to-primary-800 bg-clip-text text-transparent\",\n} as const;\n\n/**\n * Common component pattern compositions.\n */\nconst PATTERNS = {\n pageContainer: \"min-h-screen bg-white dark:bg-slate-950\",\n sectionContainer: \"max-w-7xl mx-auto px-4 md:px-6 lg:px-8 py-8 lg:py-12\",\n formContainer:\n \"bg-white dark:bg-slate-900 rounded-2xl border border-zinc-200 dark:border-slate-700 shadow-sm p-6 lg:p-8 space-y-6\",\n listItem:\n \"bg-white dark:bg-slate-900 border border-zinc-200 dark:border-slate-700 rounded-xl p-4 hover:border-zinc-300 dark:hover:border-slate-600 transition-colors\",\n linkDefault:\n \"text-primary-600 dark:text-secondary-400 hover:text-primary-500 dark:hover:text-secondary-300 transition-colors underline-offset-2 hover:underline\",\n iconButton:\n \"p-2 rounded-lg transition-colors hover:bg-zinc-100 dark:hover:bg-slate-800 active:bg-zinc-200 dark:active:bg-slate-700 min-h-[44px] min-w-[44px] flex items-center justify-center\",\n modalOverlay:\n \"fixed inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center z-50\",\n modalContent:\n \"bg-white dark:bg-slate-900 rounded-2xl border border-zinc-200 dark:border-slate-700 shadow-xl max-w-lg w-full mx-4 overflow-hidden\",\n divider: \"border-t border-zinc-200 dark:border-slate-700\",\n emptyState:\n \"flex flex-col items-center justify-center py-12 text-center text-zinc-500 dark:text-zinc-400\",\n} as const;\n\n/** Icon colour variants and sizes. */\nconst ICON = {\n muted: \"text-zinc-400 dark:text-zinc-500\",\n primary: \"text-primary-600 dark:text-secondary-400\",\n success: \"text-emerald-500 dark:text-emerald-400\",\n danger: \"text-red-500 dark:text-red-400\",\n warning: \"text-amber-500 dark:text-amber-400\",\n size: {\n sm: \"w-4 h-4\",\n md: \"w-6 h-6\",\n lg: \"w-8 h-8\",\n xl: \"w-16 h-16\",\n },\n} as const;\n\n/** Horizontal tab active / inactive states. */\nconst TAB = {\n active:\n \"border-b-2 border-primary-600 dark:border-secondary-400 text-primary-600 dark:text-secondary-400 font-semibold\",\n inactive:\n \"border-transparent text-zinc-500 dark:text-zinc-400 hover:text-zinc-700 dark:hover:text-zinc-300\",\n} as const;\n\n/**\n * Motion tokens — respect prefers-reduced-motion via motion-safe: prefix.\n * Custom keyframes must be defined in tailwind.config.js:\n * fade-in, slide-up, scale-in\n */\nconst MOTION = {\n fadeIn: \"motion-safe:animate-fade-in\",\n slideUp: \"motion-safe:animate-slide-up\",\n scaleIn: \"motion-safe:animate-scale-in\",\n skeleton: \"motion-safe:animate-pulse\",\n transition: \"motion-safe:transition-all motion-safe:duration-200\",\n transitionSlow:\n \"motion-safe:transition-all motion-safe:duration-500 motion-safe:ease-in-out\",\n} as const;\n\n/**\n * Mobile-first typography scale — maps to named semantic sizes.\n * Use in place of raw text-* utilities.\n */\nconst TEXT = {\n h1: \"text-2xl sm:text-3xl xl:text-4xl font-bold tracking-tight leading-tight\",\n h2: \"text-xl sm:text-2xl xl:text-3xl font-semibold tracking-tight\",\n h3: \"text-lg sm:text-xl xl:text-2xl font-semibold\",\n h4: \"text-base sm:text-lg font-semibold\",\n body: \"text-sm sm:text-base leading-relaxed\",\n bodyLg: \"text-base sm:text-lg leading-relaxed\",\n small: \"text-xs sm:text-sm\",\n label: \"text-xs font-medium uppercase tracking-wide\",\n price: \"text-lg sm:text-xl font-bold tabular-nums\",\n priceLg: \"text-2xl sm:text-3xl font-bold tabular-nums\",\n muted: \"text-zinc-500 dark:text-zinc-400\",\n error: \"text-red-600 dark:text-red-400\",\n success: \"text-green-600 dark:text-green-400\",\n} as const;\n\n/** Star rating colours. */\nconst RATING = {\n filled: \"text-yellow-400\",\n empty: \"text-zinc-300 dark:text-zinc-600\",\n} as const;\n\n/**\n * THEME_CONSTANTS\n *\n * The complete, responsive-first design system constant map.\n * Import in your project's `constants/theme.ts` and extend with\n * brand-specific values (accentBanner gradients, badge role variants, etc.).\n *\n * @example\n * ```ts\n * // In your project constants/theme.ts:\n * import { THEME_CONSTANTS } from \"@mohasinac/tokens\";\n *\n * export { THEME_CONSTANTS }; // re-export as-is\n *\n * // or merge with project-specific extensions:\n * export const THEME_CONSTANTS = {\n * ...baseTheme,\n * accentBanner: { ... }, // project-specific\n * };\n * ```\n */\nexport const THEME_CONSTANTS = {\n themed: THEMED,\n layout: LAYOUT,\n typography: TYPOGRAPHY,\n spacing: SPACING,\n grid: GRID,\n page: PAGE,\n input: INPUT,\n card: CARD,\n flex: FLEX,\n position: POSITION,\n states: STATES,\n transitions: TRANSITIONS,\n skeleton: SKELETON,\n motion: MOTION,\n text: TEXT,\n touch: TOUCH,\n fluidGrid: FLUID_GRID,\n /** Form layout tokens — pair with FormGrid / FormField components */\n form: {\n grid: \"flex flex-wrap gap-4\",\n field: \"flex-1 min-w-[280px] flex flex-col gap-1.5\",\n fieldWide: \"w-full flex flex-col gap-1.5\",\n fieldHalf: \"w-1/2 min-w-[280px] flex flex-col gap-1.5\",\n label: \"text-sm font-medium text-zinc-700 dark:text-zinc-300\",\n hint: \"text-xs text-zinc-500 dark:text-zinc-400\",\n error: \"text-xs text-red-600 dark:text-red-400\",\n section: \"space-y-6\",\n sectionHead:\n \"text-base font-semibold text-zinc-900 dark:text-zinc-100 border-b pb-2 mb-2 border-zinc-200 dark:border-zinc-700\",\n } as const,\n /** Tooltip bubble styles — used by the <Tooltip> component. */\n tooltip: {\n content:\n \"z-50 px-2 py-1 text-xs font-medium rounded bg-zinc-900 dark:bg-zinc-100 text-white dark:text-zinc-900 shadow-sm\",\n arrow: \"fill-zinc-900 dark:fill-zinc-100\",\n } as const,\n utilities: UTILITIES,\n patterns: PATTERNS,\n icon: ICON,\n tab: TAB,\n rating: RATING,\n /** Breakpoints for reference (matches Tailwind defaults). */\n breakpoints: {\n sm: \"640px\",\n md: \"768px\",\n lg: \"1024px\",\n xl: \"1280px\",\n \"2xl\": \"1536px\",\n \"3xl\": \"1920px\",\n },\n /** Global body/html base classes. */\n base: {\n body: 'bg-white dark:bg-slate-950 text-zinc-900 dark:text-zinc-100 antialiased font-[Inter,ui-sans-serif,system-ui,-apple-system,\"Segoe_UI\",Roboto,\"Helvetica_Neue\",Arial,sans-serif]',\n html: \"scroll-smooth\",\n },\n /** Hero / homepage section layout tokens. */\n homepage: {\n heroMinH: \"min-h-[clamp(420px,72vh,680px)]\" as const,\n heroMinHMobile: \"min-h-[clamp(120px,14vh,200px)]\" as const,\n },\n /** Carousel navigation tokens — shared by HeroCarousel and SectionCarousel. */\n carousel: {\n arrow:\n \"w-10 h-10 rounded-2xl bg-white/85 dark:bg-slate-800/90 backdrop-blur-sm shadow-lg border border-zinc-300/70 dark:border-slate-600 text-zinc-800 dark:text-zinc-200 hover:-translate-y-0.5 hover:bg-white hover:shadow-xl hover:border-zinc-400 dark:hover:border-slate-500 active:scale-95 transition-all duration-200 flex items-center justify-center\" as const,\n dotActive:\n \"w-8 h-2 !min-h-0 rounded-full bg-white shadow-sm transition-all duration-500\" as const,\n dotInactive:\n \"w-2 h-2 !min-h-0 rounded-full bg-white/55 shadow-sm transition-all duration-500\" as const,\n },\n} as const;\n","import React from \"react\";\nimport { Button, Div, Heading, Section, Text } from \"@mohasinac/ui\";\nimport type { HomepageSection } from \"../types\";\n\ninterface HeroSectionProps {\n section: HomepageSection;\n onCtaClick?: () => void;\n}\n\nexport function HeroSection({ section, onCtaClick }: HeroSectionProps) {\n const { content } = section;\n return (\n <Section\n className=\"relative flex min-h-[60vh] items-center overflow-hidden bg-neutral-900\"\n style={\n content?.imageUrl\n ? {\n backgroundImage: `url(${content.imageUrl})`,\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n }\n : undefined\n }\n >\n <Div className=\"absolute inset-0 bg-black/40\" />\n <Div className=\"relative mx-auto max-w-7xl px-4 py-16 text-center text-white sm:px-6 lg:px-8\">\n {content?.title && (\n <Heading\n level={1}\n className=\"text-4xl font-bold leading-tight sm:text-5xl lg:text-6xl\"\n >\n {content.title}\n </Heading>\n )}\n {content?.subtitle && (\n <Text className=\"mx-auto mt-4 max-w-2xl text-lg opacity-90\">\n {content.subtitle}\n </Text>\n )}\n {content?.ctaLabel && (\n <Button\n onClick={onCtaClick}\n className=\"mt-8 inline-block rounded-full bg-white px-8 py-3 text-sm font-semibold text-neutral-900 transition hover:bg-neutral-100\"\n >\n {content.ctaLabel}\n </Button>\n )}\n </Div>\n </Section>\n );\n}\n","\"use client\";\n\nimport { useState, useEffect } from \"react\";\n\n/**\n * useMediaQuery Hook\n *\n * Detects if a CSS media query matches the current viewport.\n * Returns true/false based on whether the query matches.\n *\n * @param query - CSS media query string (e.g., '(min-width: 768px)')\n * @returns boolean - Whether the media query currently matches\n *\n * @example\n * ```tsx\n * const isMobile = useMediaQuery('(max-width: 767px)');\n * const isDesktop = useMediaQuery('(min-width: 1024px)');\n * ```\n */\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState(\n // Lazy initializer: use real value on first client render, suppressing the flash.\n // Returns false on server (no window) — consistent with no-match default.\n () => typeof window !== \"undefined\" && window.matchMedia(query).matches,\n );\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n const media = window.matchMedia(query);\n setMatches(media.matches);\n\n const listener = (e: MediaQueryListEvent) => setMatches(e.matches);\n media.addEventListener(\"change\", listener);\n\n return () => media.removeEventListener(\"change\", listener);\n }, [query]);\n\n return matches;\n}\n","/**\n * Logger Class — @mohasinac/core\n *\n * Singleton class for application logging.\n * Pure utility — no framework or app-specific imports.\n *\n * The `logFileUrl` constructor option replaces the previous app-specific\n * `import(\"@/constants\")` call, making this usable in any context.\n */\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nexport interface LogEntry {\n level: LogLevel;\n message: string;\n timestamp: Date;\n data?: unknown;\n}\n\nexport interface LoggerOptions {\n minLevel?: LogLevel;\n enableConsole?: boolean;\n enableStorage?: boolean;\n /**\n * URL to POST error log entries. Set to your `/api/logs/write` route.\n */\n logFileUrl?: string;\n /**\n * @deprecated Prefer `logFileUrl`. When `true` and `logFileUrl` is not set,\n * defaults to `/api/logs/write` for backward compatibility with the\n * previous app-coupled Logger implementation.\n */\n enableFileLogging?: boolean;\n maxEntries?: number;\n /** Optional function to sanitize data before logging (e.g., PII redaction). */\n sanitizer?: (data: unknown) => unknown;\n}\n\nexport class Logger {\n private static instance: Logger;\n private logs: LogEntry[] = [];\n private options: Required<\n Omit<LoggerOptions, \"logFileUrl\" | \"enableFileLogging\" | \"sanitizer\">\n > & {\n logFileUrl?: string;\n sanitizer?: (data: unknown) => unknown;\n };\n private levelPriority: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n };\n\n private constructor(options?: LoggerOptions) {\n // `enableFileLogging: true` is a backward-compat alias for logFileUrl.\n const fileUrl =\n options?.logFileUrl ??\n (options?.enableFileLogging ? \"/api/logs/write\" : undefined);\n this.options = {\n minLevel: options?.minLevel ?? \"debug\",\n enableConsole: options?.enableConsole ?? true,\n enableStorage: options?.enableStorage ?? false,\n logFileUrl: fileUrl,\n maxEntries: options?.maxEntries ?? 1000,\n sanitizer: options?.sanitizer,\n };\n }\n\n /** Get singleton instance */\n public static getInstance(options?: LoggerOptions): Logger {\n if (!Logger.instance) {\n Logger.instance = new Logger(options);\n }\n return Logger.instance;\n }\n\n /** Set or update the data sanitizer (e.g., for PII redaction). */\n public static setSanitizer(fn: (data: unknown) => unknown): void {\n Logger.getInstance().options.sanitizer = fn;\n }\n\n private shouldLog(level: LogLevel): boolean {\n return (\n this.levelPriority[level] >= this.levelPriority[this.options.minLevel]\n );\n }\n\n private addLog(level: LogLevel, message: string, data?: unknown): void {\n if (!this.shouldLog(level)) return;\n\n const sanitized =\n data && this.options.sanitizer ? this.options.sanitizer(data) : data;\n const entry: LogEntry = {\n level,\n message,\n timestamp: new Date(),\n data: sanitized,\n };\n\n this.logs.push(entry);\n if (this.logs.length > this.options.maxEntries) {\n this.logs.shift();\n }\n\n if (this.options.enableConsole) {\n this.logToConsole(entry);\n }\n\n if (this.options.enableStorage && typeof window !== \"undefined\") {\n this.saveToStorage();\n }\n\n if (this.options.logFileUrl && level === \"error\") {\n this.writeToFile(entry).catch(() => {\n // Silently fail to prevent recursive logging\n });\n }\n }\n\n private logToConsole(entry: LogEntry): void {\n const prefix = `[${entry.level.toUpperCase()}] ${entry.timestamp.toISOString()}`;\n const message = `${prefix} ${entry.message}`;\n switch (entry.level) {\n case \"debug\":\n console.debug(message, entry.data);\n break;\n case \"info\":\n console.info(message, entry.data);\n break;\n case \"warn\":\n console.warn(message, entry.data);\n break;\n case \"error\":\n console.error(message, entry.data);\n break;\n }\n }\n\n private saveToStorage(): void {\n try {\n localStorage.setItem(\"app_logs\", JSON.stringify(this.logs));\n } catch {\n // Silently fail\n }\n }\n\n private async writeToFile(entry: LogEntry): Promise<void> {\n if (typeof window === \"undefined\" || !this.options.logFileUrl) return;\n try {\n await fetch(this.options.logFileUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n level: entry.level,\n message: entry.message,\n timestamp: entry.timestamp.toISOString(),\n data: entry.data,\n }),\n });\n } catch {\n // Silently fail\n }\n }\n\n public debug(message: string, data?: unknown): void {\n this.addLog(\"debug\", message, data);\n }\n\n public info(message: string, data?: unknown): void {\n this.addLog(\"info\", message, data);\n }\n\n public warn(message: string, data?: unknown): void {\n this.addLog(\"warn\", message, data);\n }\n\n public error(message: string, data?: unknown): void {\n this.addLog(\"error\", message, data);\n }\n\n public getLogs(level?: LogLevel): LogEntry[] {\n if (level) return this.logs.filter((log) => log.level === level);\n return [...this.logs];\n }\n\n public clear(): void {\n this.logs = [];\n if (this.options.enableStorage && typeof window !== \"undefined\") {\n localStorage.removeItem(\"app_logs\");\n }\n }\n\n public export(): string {\n return JSON.stringify(this.logs, null, 2);\n }\n\n public getStats(): Record<LogLevel, number> {\n return {\n debug: this.logs.filter((l) => l.level === \"debug\").length,\n info: this.logs.filter((l) => l.level === \"info\").length,\n warn: this.logs.filter((l) => l.level === \"warn\").length,\n error: this.logs.filter((l) => l.level === \"error\").length,\n };\n }\n}\n\n/** Shared singleton instance */\nexport const logger = Logger.getInstance();\n","/**\n * Queue Class — @mohasinac/core\n *\n * Generic priority queue for task management.\n * Pure utility — no framework or app-specific imports.\n */\n\nimport { Logger } from \"./Logger\";\n\nconst qLogger = Logger.getInstance();\n\nexport interface QueueOptions {\n concurrency?: number;\n autoStart?: boolean;\n}\n\nexport interface Task<T = unknown> {\n id: string;\n fn: () => Promise<T>;\n priority?: number;\n}\n\nexport class Queue<T = unknown> {\n private tasks: Task<T>[] = [];\n private running: number = 0;\n private readonly concurrency: number;\n private autoStart: boolean;\n private results: Map<string, T> = new Map();\n private errors: Map<string, Error> = new Map();\n\n constructor(options?: QueueOptions) {\n this.concurrency = options?.concurrency ?? 1;\n this.autoStart = options?.autoStart ?? true;\n }\n\n /** Add a task to the queue */\n public add(id: string, fn: () => Promise<T>, priority: number = 0): void {\n this.tasks.push({ id, fn, priority });\n this.tasks.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n if (this.autoStart) {\n this.process();\n }\n }\n\n private process(): void {\n while (this.running < this.concurrency && this.tasks.length > 0) {\n const task = this.tasks.shift();\n if (!task) break;\n this.running++;\n task\n .fn()\n .then((result) => {\n this.results.set(task.id, result);\n })\n .catch((error: unknown) => {\n this.errors.set(task.id, error as Error);\n })\n .finally(() => {\n this.running--;\n this.process();\n })\n .catch((err: unknown) => {\n qLogger.error(\"Queue.process error in finally\", { err });\n });\n }\n }\n\n public start(): void {\n this.process();\n }\n\n public pause(): void {\n this.autoStart = false;\n }\n\n public resume(): void {\n this.autoStart = true;\n this.process();\n }\n\n public clear(): void {\n this.tasks = [];\n this.results.clear();\n this.errors.clear();\n }\n\n public getResult(id: string): T | undefined {\n return this.results.get(id);\n }\n\n public getError(id: string): Error | undefined {\n return this.errors.get(id);\n }\n\n public size(): number {\n return this.tasks.length;\n }\n\n public getRunning(): number {\n return this.running;\n }\n\n public isEmpty(): boolean {\n return this.tasks.length === 0 && this.running === 0;\n }\n\n public async waitForCompletion(): Promise<void> {\n while (!this.isEmpty()) {\n await new Promise<void>((resolve) => setTimeout(resolve, 100));\n }\n }\n\n public getStats(): {\n pending: number;\n running: number;\n completed: number;\n failed: number;\n } {\n return {\n pending: this.tasks.length,\n running: this.running,\n completed: this.results.size,\n failed: this.errors.size,\n };\n }\n}\n","/**\n * StorageManager Class — @mohasinac/core\n *\n * Singleton class for managing localStorage and sessionStorage with\n * namespace prefixing and SSR-safe fallbacks.\n * Pure utility — no framework or app-specific imports.\n */\n\nimport { Logger } from \"./Logger\";\n\nconst sLogger = Logger.getInstance();\n\nexport type StorageType = \"local\" | \"session\";\n\nexport interface StorageOptions {\n type?: StorageType;\n prefix?: string;\n}\n\nexport class StorageManager {\n /** Per-prefix instance map — prevents namespace collisions */\n private static instances = new Map<string, StorageManager>();\n private readonly prefix: string;\n\n private constructor(prefix: string = \"app_\") {\n this.prefix = prefix;\n }\n\n /**\n * Get-or-create a StorageManager for the given prefix.\n * Each prefix returns an independent instance.\n */\n public static getInstance(prefix: string = \"\"): StorageManager {\n if (!StorageManager.instances.has(prefix)) {\n StorageManager.instances.set(prefix, new StorageManager(prefix));\n }\n return StorageManager.instances.get(prefix)!;\n }\n\n private getStorage(type: StorageType): Storage | null {\n try {\n if (typeof window === \"undefined\") return null;\n const storage =\n type === \"local\" ? window.localStorage : window.sessionStorage;\n return storage ?? null;\n } catch {\n return null;\n }\n }\n\n private generateKey(key: string): string {\n return `${this.prefix}${key}`;\n }\n\n public set<T>(key: string, value: T, options?: StorageOptions): boolean {\n const storage = this.getStorage(options?.type ?? \"local\");\n if (!storage) return false;\n try {\n storage.setItem(this.generateKey(key), JSON.stringify(value));\n return true;\n } catch (error) {\n sLogger.error(\"StorageManager.set error\", { error });\n return false;\n }\n }\n\n public get<T>(key: string, options?: StorageOptions): T | null {\n const storage = this.getStorage(options?.type ?? \"local\");\n if (!storage) return null;\n try {\n const item = storage.getItem(this.generateKey(key));\n if (item === null) return null;\n return JSON.parse(item) as T;\n } catch (error) {\n sLogger.error(\"StorageManager.get error\", { error });\n return null;\n }\n }\n\n public remove(key: string, options?: StorageOptions): boolean {\n const storage = this.getStorage(options?.type ?? \"local\");\n if (!storage) return false;\n try {\n storage.removeItem(this.generateKey(key));\n return true;\n } catch (error) {\n sLogger.error(\"StorageManager.remove error\", { error });\n return false;\n }\n }\n\n public clear(options?: StorageOptions): boolean {\n const storage = this.getStorage(options?.type ?? \"local\");\n if (!storage) return false;\n try {\n const keys = Object.keys(storage);\n keys.forEach((k) => {\n if (k.startsWith(this.prefix)) storage.removeItem(k);\n });\n return true;\n } catch (error) {\n sLogger.error(\"StorageManager.clear error\", { error });\n return false;\n }\n }\n\n public has(key: string, options?: StorageOptions): boolean {\n return this.get(key, options) !== null;\n }\n\n public keys(options?: StorageOptions): string[] {\n const storage = this.getStorage(options?.type ?? \"local\");\n if (!storage) return [];\n const result: string[] = [];\n for (let i = 0; i < storage.length; i++) {\n const k = storage.key(i);\n if (k?.startsWith(this.prefix)) {\n result.push(k.slice(this.prefix.length));\n }\n }\n return result;\n }\n\n public size(options?: StorageOptions): number {\n const storage = this.getStorage(options?.type ?? \"local\");\n if (!storage) return 0;\n let bytes = 0;\n for (let i = 0; i < storage.length; i++) {\n const k = storage.key(i);\n if (k?.startsWith(this.prefix)) {\n const v = storage.getItem(k);\n bytes += k.length + (v?.length ?? 0);\n }\n }\n return bytes;\n }\n\n public isAvailable(type: StorageType = \"local\"): boolean {\n const storage = this.getStorage(type);\n if (!storage) return false;\n try {\n const testKey = \"__storage_test__\";\n storage.setItem(testKey, \"1\");\n storage.removeItem(testKey);\n return true;\n } catch {\n return false;\n }\n }\n\n public getAll<T = unknown>(options?: StorageOptions): Record<string, T> {\n const storage = this.getStorage(options?.type ?? \"local\");\n if (!storage) return {};\n const result: Record<string, T> = {};\n for (let i = 0; i < storage.length; i++) {\n const k = storage.key(i);\n if (k?.startsWith(this.prefix)) {\n const v = this.get<T>(k.slice(this.prefix.length), options);\n if (v !== null) result[k.slice(this.prefix.length)] = v;\n }\n }\n return result;\n }\n}\n\n/** Default StorageManager instance (empty prefix) */\nexport const storageManager = StorageManager.getInstance(\"\");\n","/**\n * EventBus Class — @mohasinac/core\n *\n * Singleton pub/sub event bus for decoupled communication.\n * Pure utility — no framework or app-specific imports.\n */\n\nimport { Logger } from \"./Logger\";\n\nconst logger = Logger.getInstance();\n\ntype EventCallback = (...args: unknown[]) => void;\n\nexport interface EventSubscription {\n unsubscribe: () => void;\n}\n\nexport class EventBus {\n private static instance: EventBus;\n private readonly events: Map<string, EventCallback[]> = new Map();\n\n private constructor() {}\n\n public static getInstance(): EventBus {\n if (!EventBus.instance) {\n EventBus.instance = new EventBus();\n }\n return EventBus.instance;\n }\n\n public on(event: string, callback: EventCallback): EventSubscription {\n if (!this.events.has(event)) {\n this.events.set(event, []);\n }\n this.events.get(event)!.push(callback);\n return { unsubscribe: () => this.off(event, callback) };\n }\n\n public once(event: string, callback: EventCallback): EventSubscription {\n const wrapped = (...args: unknown[]) => {\n callback(...args);\n this.off(event, wrapped);\n };\n return this.on(event, wrapped);\n }\n\n public off(event: string, callback: EventCallback): void {\n const callbacks = this.events.get(event);\n if (!callbacks) return;\n const idx = callbacks.indexOf(callback);\n if (idx > -1) callbacks.splice(idx, 1);\n if (callbacks.length === 0) this.events.delete(event);\n }\n\n public emit(event: string, ...args: unknown[]): void {\n const callbacks = this.events.get(event);\n if (!callbacks) return;\n callbacks.forEach((cb) => {\n try {\n cb(...args);\n } catch (error) {\n logger.error(`EventBus: error in handler for \"${event}\"`, { error });\n }\n });\n }\n\n public removeAllListeners(event?: string): void {\n if (event) {\n this.events.delete(event);\n } else {\n this.events.clear();\n }\n }\n\n public listenerCount(event: string): number {\n return this.events.get(event)?.length ?? 0;\n }\n\n public eventNames(): string[] {\n return Array.from(this.events.keys());\n }\n\n public hasListeners(event: string): boolean {\n return this.listenerCount(event) > 0;\n }\n}\n\n/** Shared singleton instance */\nexport const eventBus = EventBus.getInstance();\n","/**\n * Authorization Guards\n *\n * Pure utility functions that throw AuthenticationError / AuthorizationError.\n * Suitable for API routes, Server Actions, and middleware.\n *\n * Note: getUserFromRequest / requireAuthFromRequest are intentionally omitted —\n * they depend on Firebase Admin and the user repository; implement them in your\n * app layer using these primitives.\n */\n\nimport { AuthenticationError, AuthorizationError } from \"@mohasinac/errors\";\n\nexport type UserRole = \"admin\" | \"moderator\" | \"seller\" | \"user\";\n\nconst ROLE_HIERARCHY: Record<UserRole, number> = {\n admin: 4,\n moderator: 3,\n seller: 2,\n user: 1,\n};\n\nconst MSG = {\n NOT_AUTHENTICATED: \"Please log in to continue\",\n FORBIDDEN: \"You do not have permission to perform this action\",\n EMAIL_NOT_VERIFIED: \"Please verify your email address before logging in\",\n ACCOUNT_DISABLED: \"Your account has been disabled. Please contact support\",\n};\n\nexport function requireAuth(user: unknown): void {\n if (!user) {\n throw new AuthenticationError(MSG.NOT_AUTHENTICATED);\n }\n}\n\nexport function requireRole(\n user: Record<string, unknown> | null | undefined,\n roles: UserRole | UserRole[],\n): void {\n if (!user) throw new AuthenticationError(MSG.NOT_AUTHENTICATED);\n const requiredRoles = Array.isArray(roles) ? roles : [roles];\n const userRole = (user.role as UserRole) || \"user\";\n if (!requiredRoles.includes(userRole)) {\n throw new AuthorizationError(MSG.FORBIDDEN);\n }\n}\n\nexport function requireOwnership(\n user: Record<string, unknown> | null | undefined,\n resourceOwnerId: string,\n): void {\n if (!user) throw new AuthenticationError(MSG.NOT_AUTHENTICATED);\n if (user.uid !== resourceOwnerId) {\n throw new AuthorizationError(MSG.FORBIDDEN);\n }\n}\n\nexport function requireEmailVerified(\n user: Record<string, unknown> | null | undefined,\n): void {\n if (!user) throw new AuthenticationError(MSG.NOT_AUTHENTICATED);\n if (!user.emailVerified) throw new AuthorizationError(MSG.EMAIL_NOT_VERIFIED);\n}\n\nexport function requireActiveAccount(\n user: Record<string, unknown> | null | undefined,\n): void {\n if (!user) throw new AuthenticationError(MSG.NOT_AUTHENTICATED);\n if (user.disabled) throw new AuthorizationError(MSG.ACCOUNT_DISABLED);\n}\n\n/**\n * Check if currentUserRole is allowed to change a target user's role.\n * - admin: can change anyone's role\n * - moderator: can only change user → seller\n */\nexport function canChangeRole(\n currentUserRole: UserRole,\n targetCurrentRole: UserRole,\n targetNewRole: UserRole,\n): boolean {\n if (currentUserRole === \"admin\") return true;\n if (currentUserRole === \"moderator\") {\n return targetCurrentRole === \"user\" && targetNewRole === \"seller\";\n }\n return false;\n}\n\n/** Return the numeric hierarchy level for a role. */\nexport function getRoleLevel(role: UserRole): number {\n return ROLE_HIERARCHY[role] ?? 0;\n}\n","/**\r\n * Client-Side Error Logging Utilities\r\n *\r\n * Wraps the Logger singleton for use in React components, client hooks, and\r\n * browser-only code. Automatically attaches timestamp, userAgent, and current URL.\r\n *\r\n * For server-side logging use `server-logger.ts`.\r\n */\r\n\r\nimport { logger } from \"../core\";\r\nimport { AppError } from \"../errors\";\r\n\r\nexport interface ClientErrorContext {\r\n userId?: string;\r\n component?: string;\r\n action?: string;\r\n url?: string;\r\n method?: string;\r\n statusCode?: number;\r\n [key: string]: unknown;\r\n}\r\n\r\nfunction buildClientMeta(\r\n error: unknown,\r\n context?: ClientErrorContext,\r\n): Record<string, unknown> {\r\n const base: Record<string, unknown> = {\r\n ...context,\r\n timestamp: new Date().toISOString(),\r\n userAgent:\r\n typeof navigator !== \"undefined\" ? navigator.userAgent : \"unknown\",\r\n url: typeof window !== \"undefined\" ? window.location.href : \"unknown\",\r\n };\r\n\r\n if (error instanceof AppError) {\r\n base.error = {\r\n name: error.name,\r\n message: error.message,\r\n code: error.code,\r\n statusCode: error.statusCode,\r\n data: error.data,\r\n };\r\n } else if (error instanceof Error) {\r\n base.error = {\r\n name: error.name,\r\n message: error.message,\r\n stack: error.stack,\r\n };\r\n } else {\r\n base.error = error;\r\n }\r\n\r\n return base;\r\n}\r\n\r\nexport const logClientError = (\r\n message: string,\r\n error: unknown,\r\n context?: ClientErrorContext,\r\n): void => {\r\n logger.error(message, buildClientMeta(error, context));\r\n};\r\n\r\nexport const logClientWarning = (\r\n message: string,\r\n data?: ClientErrorContext,\r\n): void => {\r\n logger.warn(message, { ...data, timestamp: new Date().toISOString() });\r\n};\r\n\r\nexport const logClientInfo = (\r\n message: string,\r\n data?: ClientErrorContext,\r\n): void => {\r\n logger.info(message, { ...data, timestamp: new Date().toISOString() });\r\n};\r\n\r\nexport const logClientDebug = (\r\n message: string,\r\n data?: ClientErrorContext,\r\n): void => {\r\n logger.debug(message, { ...data, timestamp: new Date().toISOString() });\r\n};\r\n","/**\r\n * Server-Side Error Logging Utilities\r\n *\r\n * Wraps the Logger singleton for use in API routes, server components, and\r\n * server actions. Attaches request metadata when a NextRequest is available.\r\n *\r\n * IMPORTANT: Only import this file in server-side code. For client-side code\r\n * use `client-logger.ts`.\r\n */\r\n\r\nimport { logger } from \"../core\";\r\nimport { AppError } from \"../errors\";\r\nimport { type NextRequest } from \"next/server\";\r\n\r\nexport interface ServerErrorContext {\r\n userId?: string;\r\n endpoint?: string;\r\n method?: string;\r\n statusCode?: number;\r\n requestId?: string;\r\n [key: string]: unknown;\r\n}\r\n\r\n/** Pull the commonly needed headers from a NextRequest in one call. */\r\nexport const extractRequestMetadata = (request: NextRequest) => ({\r\n method: request.method,\r\n url: request.url,\r\n userAgent: request.headers.get(\"user-agent\") ?? \"unknown\",\r\n ip:\r\n request.headers.get(\"x-forwarded-for\") ??\r\n request.headers.get(\"x-real-ip\") ??\r\n \"unknown\",\r\n referer: request.headers.get(\"referer\") ?? \"none\",\r\n});\r\n\r\nfunction buildServerMeta(\r\n error: unknown,\r\n context?: ServerErrorContext,\r\n): Record<string, unknown> {\r\n const base: Record<string, unknown> = {\r\n ...context,\r\n timestamp: new Date().toISOString(),\r\n };\r\n\r\n if (error instanceof AppError) {\r\n base.error = {\r\n name: error.name,\r\n message: error.message,\r\n code: error.code,\r\n statusCode: error.statusCode,\r\n data: error.data,\r\n };\r\n } else if (error instanceof Error) {\r\n base.error = {\r\n name: error.name,\r\n message: error.message,\r\n stack: error.stack,\r\n };\r\n } else {\r\n base.error = error;\r\n }\r\n\r\n return base;\r\n}\r\n\r\nexport const logServerError = (\r\n message: string,\r\n error: unknown,\r\n context?: ServerErrorContext,\r\n): void => {\r\n logger.error(message, buildServerMeta(error, context));\r\n};\r\n\r\nexport const logServerWarning = (\r\n message: string,\r\n data?: ServerErrorContext,\r\n): void => {\r\n logger.warn(message, { ...data, timestamp: new Date().toISOString() });\r\n};\r\n\r\nexport const logServerInfo = (\r\n message: string,\r\n data?: ServerErrorContext,\r\n): void => {\r\n logger.info(message, { ...data, timestamp: new Date().toISOString() });\r\n};\r\n\r\nexport const logServerDebug = (\r\n message: string,\r\n data?: ServerErrorContext,\r\n): void => {\r\n logger.debug(message, { ...data, timestamp: new Date().toISOString() });\r\n};\r\n","\"use client\";\r\n\r\nimport { useState, useCallback, useEffect, useRef } from \"react\";\r\nimport Image from \"next/image\";\r\nimport Link from \"next/link\";\r\nimport { useMediaQuery } from \"@mohasinac/react\";\r\nimport { Button, Div, Heading, Row, Section, Span, Text } from \"@mohasinac/ui\";\r\nimport type { CharacterHotspotConfig, HotspotPin } from \"../types\";\r\n\r\n/* ── Fallback when no Firestore config is saved yet ──────────────────────────\r\n Consumers can override the full config via the `config` prop.\r\n───────────────────────────────────────────────────────────────── */\r\nconst FALLBACK_IMAGE = \"/animevssuperhero.jpg\";\r\nconst FALLBACK_IMAGE_ALT = \"DC, Marvel and Anime characters\";\r\n\r\nconst DEFAULT_HOTSPOTS: HotspotPin[] = [\r\n {\r\n id: \"spiderman\",\r\n name: \"SPIDER-MAN\",\r\n universe: \"Marvel\",\r\n description:\r\n \"Mid-swing, wall-crawling, Symbiote — Peter Parker in every iconic pose. Hot Toys & Iron Studios pieces with real fabric suits and LED arc detail.\",\r\n href: \"/franchise/marvel\",\r\n xPct: 8,\r\n yPct: 22,\r\n accent: \"#E8001C\",\r\n badge: \"MARVEL\",\r\n buyText: \"Get Spider-Man Figures\",\r\n },\r\n {\r\n id: \"ironman\",\r\n name: \"IRON MAN\",\r\n universe: \"Marvel\",\r\n description:\r\n \"Tony Stark's armour at display scale. Arc-reactor glow, battle-damaged panels, nano-tech variants — the cornerstone of every serious Marvel shelf.\",\r\n href: \"/franchise/marvel\",\r\n xPct: 18,\r\n yPct: 58,\r\n accent: \"#E8001C\",\r\n badge: \"MARVEL\",\r\n buyText: \"Get Iron Man Figures\",\r\n },\r\n {\r\n id: \"robin\",\r\n name: \"ROBIN\",\r\n universe: \"DC Comics\",\r\n description:\r\n \"Dick Grayson's acrobatic grace in resin. Flying-kick, staff-spin & Nightwing-transition statues — the most underrated must-have in the Bat-family lineup.\",\r\n href: \"/franchise/dc-comics\",\r\n xPct: 28,\r\n yPct: 18,\r\n accent: \"#4A90D9\",\r\n badge: \"DC\",\r\n buyText: \"Get Robin Figures\",\r\n },\r\n {\r\n id: \"batman\",\r\n name: \"BATMAN\",\r\n universe: \"DC Comics\",\r\n description:\r\n \"Gotham's Dark Knight on your shelf. Full-armoured, Nanosuit & Bat-suit variants from Hot Toys & Prime 1 Studio — every grim detail preserved in 1/6 scale.\",\r\n href: \"/franchise/dc-comics\",\r\n xPct: 36,\r\n yPct: 42,\r\n accent: \"#4A90D9\",\r\n badge: \"DC\",\r\n buyText: \"Get Batman Figures\",\r\n },\r\n {\r\n id: \"captain-america\",\r\n name: \"CAPTAIN AMERICA\",\r\n universe: \"Marvel\",\r\n description:\r\n \"Shield raised, Endgame-ready. WW2 Origin, MCU & Broken Shield variants — the most recognisable Marvel statue in any collection. Limited stock.\",\r\n href: \"/franchise/marvel\",\r\n xPct: 12,\r\n yPct: 76,\r\n accent: \"#0057FF\",\r\n badge: \"MARVEL\",\r\n buyText: \"Get Cap Figures\",\r\n },\r\n {\r\n id: \"superman\",\r\n name: \"SUPERMAN\",\r\n universe: \"DC Comics\",\r\n description:\r\n \"Kal-El soaring above your display. XM Studios & Iron Studios full-sculpt statues — classic red cape and New 52 dark variants, ready to ship.\",\r\n href: \"/franchise/dc-comics\",\r\n xPct: 44,\r\n yPct: 68,\r\n accent: \"#0057FF\",\r\n badge: \"DC\",\r\n buyText: \"Get Superman Figures\",\r\n },\r\n {\r\n id: \"goku\",\r\n name: \"SON GOKU\",\r\n universe: \"Dragon Ball\",\r\n description:\r\n \"Ultra Instinct, SSJ4, Kamehameha — every legendary form. S.H.Figuarts & Banpresto pieces sell out within hours of restock. Order yours today.\",\r\n href: \"/franchise/dragon-ball\",\r\n xPct: 51,\r\n yPct: 36,\r\n accent: \"#FFE500\",\r\n badge: \"ANIME\",\r\n buyText: \"Get Goku Figures\",\r\n },\r\n {\r\n id: \"naruto\",\r\n name: \"NARUTO UZUMAKI\",\r\n universe: \"Naruto Shippuden\",\r\n description:\r\n \"Sage Mode, Baryon Mode, Nine-Tails Chakra — Naruto's greatest forms frozen in resin. These restock and sell out within days. Don't sleep on it.\",\r\n href: \"/franchise/naruto\",\r\n xPct: 57,\r\n yPct: 78,\r\n accent: \"#FF6B00\",\r\n badge: \"ANIME\",\r\n buyText: \"Get Naruto Figures\",\r\n },\r\n {\r\n id: \"ichigo\",\r\n name: \"ICHIGO KUROSAKI\",\r\n universe: \"Bleach\",\r\n description:\r\n \"Bankai Tensa Zangetsu, Hollow & Final Getsuga forms — some of anime's most dramatic poses. Bleach figures are rare. When they restock, they go fast.\",\r\n href: \"/franchise/bleach\",\r\n xPct: 70,\r\n yPct: 20,\r\n accent: \"#4A90D9\",\r\n badge: \"ANIME\",\r\n buyText: \"Get Ichigo Figures\",\r\n },\r\n {\r\n id: \"luffy\",\r\n name: \"MONKEY D. LUFFY\",\r\n universe: \"One Piece\",\r\n description:\r\n \"Gear 5, Red Roc, Boundman — Luffy's explosive power takes centre stage. One Piece is the fastest-moving anime series on our platform. Grab yours now.\",\r\n href: \"/franchise/one-piece\",\r\n xPct: 80,\r\n yPct: 50,\r\n accent: \"#FFE500\",\r\n badge: \"ANIME\",\r\n buyText: \"Get Luffy Figures\",\r\n },\r\n {\r\n id: \"saitama\",\r\n name: \"SAITAMA\",\r\n universe: \"One Punch Man\",\r\n description:\r\n \"One punch. That's all it takes. From deadpan standing pose to the single devastating strike — Saitama figures are deceptively brilliant shelf pieces.\",\r\n href: \"/franchise/one-punch-man\",\r\n xPct: 91,\r\n yPct: 50,\r\n accent: \"#FFE500\",\r\n badge: \"ANIME\",\r\n buyText: \"Get Saitama Figures\",\r\n },\r\n];\r\n\r\nexport interface CharacterHotspotProps {\r\n config?: CharacterHotspotConfig | null;\r\n /**\r\n * Override the default fallback hotspot pins shown when no config is supplied.\r\n * Useful for non-collectibles storefronts.\r\n */\r\n defaultHotspots?: HotspotPin[];\r\n /** Universe quick-browse links shown below the panorama. */\r\n universeLinks?: {\r\n label: string;\r\n href: string;\r\n color: string;\r\n icon: string;\r\n }[];\r\n /** \"Shop all\" button href */\r\n shopAllHref?: string;\r\n /** Section heading */\r\n heading?: string;\r\n /** Sub-heading / helper text */\r\n subheading?: string;\r\n}\r\n\r\nexport function CharacterHotspot({\r\n config,\r\n defaultHotspots = DEFAULT_HOTSPOTS,\r\n universeLinks,\r\n shopAllHref = \"/search\",\r\n heading = \"HEROES & LEGENDS\",\r\n subheading,\r\n}: CharacterHotspotProps) {\r\n if (config !== undefined && config !== null && !config.active) return null;\r\n\r\n const panoramicImage = config?.imageUrl || FALLBACK_IMAGE;\r\n const panoramicAlt = config?.imageAlt || FALLBACK_IMAGE_ALT;\r\n const hotspots: HotspotPin[] =\r\n config?.pins && config.pins.length > 0 ? config.pins : defaultHotspots;\r\n\r\n return (\r\n <CharacterHotspotInner\r\n panoramicImage={panoramicImage}\r\n panoramicAlt={panoramicAlt}\r\n hotspots={hotspots}\r\n universeLinks={universeLinks ?? DEFAULT_UNIVERSE_LINKS}\r\n shopAllHref={shopAllHref}\r\n heading={heading}\r\n subheading={subheading}\r\n />\r\n );\r\n}\r\n\r\ninterface InnerProps {\r\n panoramicImage: string;\r\n panoramicAlt: string;\r\n hotspots: HotspotPin[];\r\n universeLinks: { label: string; href: string; color: string; icon: string }[];\r\n shopAllHref: string;\r\n heading: string;\r\n subheading?: string;\r\n}\r\n\r\nconst DEFAULT_UNIVERSE_LINKS: InnerProps[\"universeLinks\"] = [\r\n { label: \"MARVEL\", href: \"/franchise/marvel\", color: \"#E8001C\", icon: \"⚡\" },\r\n {\r\n label: \"DC COMICS\",\r\n href: \"/franchise/dc-comics\",\r\n color: \"#4A90D9\",\r\n icon: \"🦇\",\r\n },\r\n {\r\n label: \"DRAGON BALL\",\r\n href: \"/franchise/dragon-ball\",\r\n color: \"#FFE500\",\r\n icon: \"✦\",\r\n },\r\n { label: \"NARUTO\", href: \"/franchise/naruto\", color: \"#FF6B00\", icon: \"🍃\" },\r\n {\r\n label: \"ONE PIECE\",\r\n href: \"/franchise/one-piece\",\r\n color: \"#FFE500\",\r\n icon: \"⚓\",\r\n },\r\n { label: \"BLEACH\", href: \"/franchise/bleach\", color: \"#4A90D9\", icon: \"⚔\" },\r\n];\r\n\r\nfunction CharacterHotspotInner({\r\n panoramicImage,\r\n panoramicAlt,\r\n hotspots,\r\n universeLinks,\r\n shopAllHref,\r\n heading,\r\n subheading,\r\n}: InnerProps) {\r\n const [activeId, setActiveId] = useState<string | null>(null);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const isMobile = useMediaQuery(\"(max-width: 767px)\");\r\n\r\n const toggle = useCallback((id: string) => {\r\n setActiveId((prev) => (prev === id ? null : id));\r\n }, []);\r\n\r\n useEffect(() => {\r\n function handleClick(e: MouseEvent) {\r\n if (\r\n containerRef.current &&\r\n !containerRef.current.contains(e.target as Node)\r\n ) {\r\n setActiveId(null);\r\n }\r\n }\r\n document.addEventListener(\"mousedown\", handleClick);\r\n return () => document.removeEventListener(\"mousedown\", handleClick);\r\n }, []);\r\n\r\n useEffect(() => {\r\n function handleKey(e: KeyboardEvent) {\r\n if (e.key === \"Escape\") setActiveId(null);\r\n }\r\n document.addEventListener(\"keydown\", handleKey);\r\n return () => document.removeEventListener(\"keydown\", handleKey);\r\n }, []);\r\n\r\n const active = hotspots.find((h) => h.id === activeId) ?? null;\r\n\r\n return (\r\n <Section\r\n style={{\r\n background: \"var(--dark-section-deep)\",\r\n borderTop: \"3px solid var(--dark-section-bg)\",\r\n borderBottom: \"3px solid var(--dark-section-bg)\",\r\n overflow: \"hidden\",\r\n }}\r\n >\r\n {/* Panoramic scene — 16:9 container */}\r\n <Div\r\n ref={containerRef}\r\n className=\"relative w-full\"\r\n style={{ aspectRatio: \"16/9\", minHeight: \"420px\" }}\r\n >\r\n {/* Header overlay */}\r\n <Div\r\n className=\"absolute top-0 left-0 right-0 z-10 pointer-events-none\"\r\n style={{\r\n background:\r\n \"linear-gradient(to bottom, rgba(10,10,18,0.88) 0%, rgba(10,10,18,0.40) 50%, transparent 100%)\",\r\n }}\r\n >\r\n <Row\r\n wrap\r\n align=\"start\"\r\n justify=\"between\"\r\n gap=\"sm\"\r\n className=\"pointer-events-auto mx-auto max-w-7xl px-4 pt-4 pb-6 gap-y-3\"\r\n >\r\n <Div>\r\n <Text\r\n className=\"mb-1 text-xs font-black uppercase tracking-[0.2em]\"\r\n style={{ color: \"var(--color-red)\" }}\r\n >\r\n Explore the Universe\r\n </Text>\r\n <Heading\r\n level={2}\r\n style={{\r\n fontFamily: \"var(--font-bangers, Bangers, cursive)\",\r\n fontSize: \"clamp(1.8rem, 4.5vw, 3rem)\",\r\n letterSpacing: \"0.07em\",\r\n color: \"#FFFFFF\",\r\n lineHeight: 1,\r\n }}\r\n >\r\n {heading}\r\n </Heading>\r\n {subheading && (\r\n <Text\r\n className=\"mt-2 text-sm font-medium max-w-md\"\r\n style={{ color: \"var(--dark-section-muted)\" }}\r\n >\r\n {subheading}\r\n </Text>\r\n )}\r\n {!subheading && (\r\n <Text\r\n className=\"mt-2 text-sm font-medium max-w-md\"\r\n style={{ color: \"var(--dark-section-muted)\" }}\r\n >\r\n & beyond — tap the{\" \"}\r\n <Span\r\n className=\"inline-flex items-center justify-center rounded-full font-light\"\r\n style={{\r\n background: \"rgba(255,255,255,0.92)\",\r\n color: \"#111111\",\r\n width: 18,\r\n height: 18,\r\n border: \"1.5px solid rgba(0,0,0,0.18)\",\r\n boxShadow: \"0 1px 4px rgba(0,0,0,0.4)\",\r\n verticalAlign: \"middle\",\r\n fontSize: 13,\r\n lineHeight: 1,\r\n }}\r\n >\r\n +\r\n </Span>{\" \"}\r\n pins to get & buy each character.\r\n </Text>\r\n )}\r\n </Div>\r\n <Link\r\n href={shopAllHref}\r\n className=\"hidden sm:inline-flex items-center gap-2 px-5 py-2 text-sm font-black uppercase tracking-widest transition-transform hover:-translate-y-0.5\"\r\n style={{\r\n fontFamily: \"var(--font-bangers, Bangers, cursive)\",\r\n letterSpacing: \"0.1em\",\r\n background: \"var(--color-red)\",\r\n color: \"#FFFFFF\",\r\n border: \"3px solid var(--border-ink)\",\r\n boxShadow: \"4px 4px 0px var(--border-ink)\",\r\n }}\r\n >\r\n SHOP ALL →\r\n </Link>\r\n </Row>\r\n </Div>\r\n\r\n {/* Image layer */}\r\n <Div className=\"absolute inset-0 overflow-hidden\">\r\n <Image\r\n src={panoramicImage}\r\n alt={panoramicAlt}\r\n fill\r\n className=\"object-cover object-top\"\r\n sizes=\"100vw\"\r\n priority={false}\r\n />\r\n <Div\r\n className=\"absolute inset-0\"\r\n style={{\r\n background:\r\n \"linear-gradient(to right, rgba(10,10,18,0.72) 0%, rgba(10,10,18,0.30) 50%, rgba(10,10,18,0.72) 100%)\",\r\n }}\r\n />\r\n <Div\r\n className=\"absolute inset-0\"\r\n style={{\r\n background:\r\n \"linear-gradient(to bottom, rgba(10,10,18,0.25) 0%, transparent 40%, rgba(10,10,18,0.65) 100%)\",\r\n }}\r\n />\r\n <Div\r\n className=\"absolute bottom-0 left-0 right-0 h-16 pointer-events-none\"\r\n style={{\r\n background: \"linear-gradient(to bottom, transparent, #0A0A12)\",\r\n }}\r\n />\r\n </Div>\r\n\r\n {/* Universe zone labels */}\r\n <Div\r\n className=\"hidden sm:flex absolute left-0 right-0 justify-around items-start pointer-events-none\"\r\n style={{ top: \"clamp(120px, 18vh, 165px)\", zIndex: 5 }}\r\n >\r\n {(\r\n [\r\n { label: \"MARVEL\", color: \"#E8001C\" },\r\n { label: \"DC COMICS\", color: \"#4A90D9\" },\r\n { label: \"ANIME\", color: \"#FFE500\" },\r\n ] as { label: string; color: string }[]\r\n ).map(({ label, color }) => (\r\n <Div key={label} className=\"flex flex-col items-center\">\r\n <Span\r\n className=\"px-3 py-1 text-[10px] sm:text-xs font-black uppercase tracking-[0.18em] rounded-sm\"\r\n style={{\r\n background: color,\r\n color: color === \"#FFE500\" ? \"#0D0D0D\" : \"#FFFFFF\",\r\n boxShadow: \"2px 2px 0px rgba(0,0,0,0.6)\",\r\n fontFamily: \"var(--font-bangers, Bangers, cursive)\",\r\n letterSpacing: \"0.16em\",\r\n }}\r\n >\r\n {label}\r\n </Span>\r\n <Div\r\n className=\"mt-1 h-5 sm:h-8 w-px\"\r\n style={{ background: color, opacity: 0.5 }}\r\n />\r\n </Div>\r\n ))}\r\n </Div>\r\n\r\n {/* Hotspot pins */}\r\n {hotspots.map((hotspot) => {\r\n const isActive = activeId === hotspot.id;\r\n const popupLeft = hotspot.xPct <= 55;\r\n const popupAbove = hotspot.yPct > 65;\r\n\r\n return (\r\n <Div\r\n key={hotspot.id}\r\n className=\"absolute\"\r\n style={{\r\n left: `${hotspot.xPct}%`,\r\n top: `${hotspot.yPct}%`,\r\n zIndex: isActive ? 30 : 10,\r\n transform: \"translate(-50%, -50%)\",\r\n }}\r\n >\r\n {!isActive && (\r\n <Span\r\n className=\"absolute rounded-full animate-ping\"\r\n style={{\r\n inset: -6,\r\n background: \"rgba(255,255,255,0.2)\",\r\n pointerEvents: \"none\",\r\n }}\r\n />\r\n )}\r\n\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={() => toggle(hotspot.id)}\r\n aria-label={`Info about ${hotspot.name}`}\r\n aria-expanded={isActive}\r\n className=\"relative flex items-center justify-center rounded-full\"\r\n style={{\r\n width: isMobile ? 18 : 38,\r\n height: isMobile ? 18 : 38,\r\n background: isMobile\r\n ? \"none\"\r\n : isActive\r\n ? \"rgba(30,30,30,0.92)\"\r\n : \"rgba(255,255,255,0.95)\",\r\n border: isMobile\r\n ? \"none\"\r\n : isActive\r\n ? \"2px solid rgba(255,255,255,0.25)\"\r\n : \"2px solid rgba(0,0,0,0.18)\",\r\n boxShadow: isMobile ? \"none\" : \"0 2px 12px rgba(0,0,0,0.55)\",\r\n backdropFilter: isMobile ? \"none\" : \"blur(4px)\",\r\n padding: 0,\r\n transition: \"transform 0.2s ease, opacity 0.2s ease\",\r\n transform: isActive ? \"scale(1.2) rotate(45deg)\" : \"scale(1)\",\r\n color: isMobile\r\n ? \"#FFFFFF\"\r\n : isActive\r\n ? \"#FFFFFF\"\r\n : \"#111111\",\r\n fontSize: isMobile ? 18 : 22,\r\n fontWeight: 200,\r\n lineHeight: 1,\r\n cursor: \"pointer\",\r\n textShadow: isMobile ? \"0 1px 6px rgba(0,0,0,0.8)\" : \"none\",\r\n opacity: isActive ? 0.7 : 1,\r\n }}\r\n >\r\n +\r\n </Button>\r\n\r\n {/* Desktop side popup */}\r\n {isActive && !isMobile && (\r\n <Div\r\n className=\"absolute\"\r\n style={{\r\n ...(popupAbove\r\n ? {\r\n bottom: \"calc(100% + 12px)\",\r\n top: \"auto\",\r\n transform: \"none\",\r\n }\r\n : { top: \"50%\", transform: \"translateY(-50%)\" }),\r\n ...(popupLeft\r\n ? { left: \"calc(100% + 14px)\" }\r\n : { right: \"calc(100% + 14px)\" }),\r\n width: 300,\r\n background: \"rgba(255,255,255,0.97)\",\r\n boxShadow:\r\n \"0 12px 48px rgba(0,0,0,0.55), 0 2px 8px rgba(0,0,0,0.3)\",\r\n borderRadius: 4,\r\n overflow: \"hidden\",\r\n zIndex: 40,\r\n animation: \"fadeInUp 0.2s ease both\",\r\n }}\r\n >\r\n <Div style={{ height: 4, background: hotspot.accent }} />\r\n <Div className=\"px-5 py-4\">\r\n <Text\r\n className=\"text-[10px] font-bold uppercase tracking-[0.18em] mb-1\"\r\n style={{\r\n color:\r\n hotspot.accent === \"#FFE500\"\r\n ? \"#b08800\"\r\n : hotspot.accent,\r\n }}\r\n >\r\n {hotspot.universe}\r\n </Text>\r\n <Heading\r\n level={3}\r\n className=\"font-black leading-tight mb-3\"\r\n style={{\r\n fontFamily: \"var(--font-bangers, Bangers, cursive)\",\r\n fontSize: \"1.45rem\",\r\n letterSpacing: \"0.06em\",\r\n color: \"#111111\",\r\n }}\r\n >\r\n {hotspot.name}\r\n </Heading>\r\n <Text\r\n className=\"text-xs leading-relaxed mb-4\"\r\n style={{ color: \"#374151\" }}\r\n >\r\n {hotspot.description}\r\n </Text>\r\n <Link\r\n href={hotspot.href}\r\n onClick={() => setActiveId(null)}\r\n className=\"flex items-center justify-between px-4 py-2.5 text-sm font-black uppercase transition-opacity hover:opacity-85\"\r\n style={{\r\n fontFamily: \"var(--font-bangers, Bangers, cursive)\",\r\n letterSpacing: \"0.1em\",\r\n background: hotspot.accent,\r\n color:\r\n hotspot.accent === \"#FFE500\" ? \"#0D0D0D\" : \"#FFFFFF\",\r\n borderRadius: 2,\r\n }}\r\n >\r\n {hotspot.buyText}\r\n <Span aria-hidden=\"true\">→</Span>\r\n </Link>\r\n </Div>\r\n </Div>\r\n )}\r\n </Div>\r\n );\r\n })}\r\n </Div>\r\n\r\n {/* Mobile bottom-sheet popup */}\r\n {isMobile && active && (\r\n <Div\r\n className=\"fixed inset-0 z-50 flex items-end\"\r\n style={{ background: \"rgba(0,0,0,0.6)\", backdropFilter: \"blur(3px)\" }}\r\n onClick={(e) => {\r\n if (e.target === e.currentTarget) setActiveId(null);\r\n }}\r\n >\r\n <Div\r\n className=\"w-full\"\r\n style={{\r\n background: \"var(--surface-elevated)\",\r\n borderTopLeftRadius: 16,\r\n borderTopRightRadius: 16,\r\n overflow: \"hidden\",\r\n animation: \"fadeInUp 0.22s ease both\",\r\n }}\r\n >\r\n <Div className=\"flex justify-center pt-3 pb-1\">\r\n <Div\r\n style={{\r\n width: 40,\r\n height: 4,\r\n borderRadius: 2,\r\n background: \"#D1D5DB\",\r\n }}\r\n />\r\n </Div>\r\n <Div style={{ height: 4, background: active.accent }} />\r\n <Div className=\"px-5 pt-4 pb-10\">\r\n <Text\r\n className=\"text-[10px] font-bold uppercase tracking-[0.18em] mb-1\"\r\n style={{\r\n color:\r\n active.accent === \"#FFE500\" ? \"#b08800\" : active.accent,\r\n }}\r\n >\r\n {active.universe}\r\n </Text>\r\n <Heading\r\n level={3}\r\n className=\"font-black leading-tight mb-2\"\r\n style={{\r\n fontFamily: \"var(--font-bangers, Bangers, cursive)\",\r\n fontSize: \"clamp(1.5rem, 6vw, 2rem)\",\r\n letterSpacing: \"0.06em\",\r\n color: \"#111111\",\r\n }}\r\n >\r\n {active.name}\r\n </Heading>\r\n <Text\r\n className=\"text-sm leading-relaxed mb-5\"\r\n style={{ color: \"#374151\" }}\r\n >\r\n {active.description}\r\n </Text>\r\n <Div className=\"flex gap-3\">\r\n <Link\r\n href={active.href}\r\n onClick={() => setActiveId(null)}\r\n className=\"flex-1 flex items-center justify-between px-4 py-3 font-black uppercase\"\r\n style={{\r\n fontFamily: \"var(--font-bangers, Bangers, cursive)\",\r\n letterSpacing: \"0.1em\",\r\n fontSize: \"0.9rem\",\r\n background: active.accent,\r\n color: active.accent === \"#FFE500\" ? \"#0D0D0D\" : \"#FFFFFF\",\r\n borderRadius: 4,\r\n }}\r\n >\r\n {active.buyText}\r\n <Span aria-hidden=\"true\">→</Span>\r\n </Link>\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n onClick={() => setActiveId(null)}\r\n className=\"px-5 py-3 text-sm font-bold rounded\"\r\n style={{ background: \"#F1F5F9\", color: \"#475569\" }}\r\n >\r\n Close\r\n </Button>\r\n </Div>\r\n </Div>\r\n </Div>\r\n </Div>\r\n )}\r\n\r\n {/* Universe quick-browse row */}\r\n <Div\r\n className=\"mx-auto max-w-7xl px-4 py-6 grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-6\"\r\n style={{ borderTop: \"1px solid rgba(255,255,255,0.08)\" }}\r\n >\r\n {universeLinks.map(({ label, href, color, icon }) => (\r\n <Link\r\n key={label}\r\n href={href}\r\n className=\"group flex items-center gap-2.5 px-3 py-2.5 rounded-sm transition-all hover:-translate-y-0.5\"\r\n style={{\r\n background: \"rgba(255,255,255,0.04)\",\r\n border: \"1px solid rgba(255,255,255,0.08)\",\r\n transition: \"all 0.15s ease\",\r\n }}\r\n onMouseEnter={(e) => {\r\n (e.currentTarget as HTMLAnchorElement).style.borderColor = color;\r\n (e.currentTarget as HTMLAnchorElement).style.background =\r\n `${color}18`;\r\n }}\r\n onMouseLeave={(e) => {\r\n (e.currentTarget as HTMLAnchorElement).style.borderColor =\r\n \"rgba(255,255,255,0.08)\";\r\n (e.currentTarget as HTMLAnchorElement).style.background =\r\n \"rgba(255,255,255,0.04)\";\r\n }}\r\n >\r\n <Span className=\"text-base select-none\" aria-hidden=\"true\">\r\n {icon}\r\n </Span>\r\n <Span\r\n className=\"text-xs font-black uppercase tracking-wide\"\r\n style={{\r\n fontFamily: \"var(--font-bangers, Bangers, cursive)\",\r\n letterSpacing: \"0.1em\",\r\n color: \"#E2E8F0\",\r\n }}\r\n >\r\n {label}\r\n </Span>\r\n <Span\r\n className=\"ml-auto text-xs\"\r\n style={{ color: \"#475569\", transition: \"color 0.15s\" }}\r\n >\r\n →\r\n </Span>\r\n </Link>\r\n ))}\r\n </Div>\r\n </Section>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { useState, useRef } from \"react\";\r\nimport Image from \"next/image\";\r\nimport {\r\n Button,\r\n Div,\r\n Heading,\r\n Input,\r\n Label,\r\n Li,\r\n Span,\r\n Text,\r\n Textarea,\r\n Ul,\r\n} from \"@mohasinac/ui\";\r\nimport type { CharacterHotspotConfig, HotspotPin } from \"../types\";\r\n\r\ntype WizardStep = \"image\" | \"place\" | \"details\" | \"review\";\r\n\r\ninterface DraftPosition {\r\n id: string;\r\n xPct: number;\r\n yPct: number;\r\n}\r\n\r\nfunction randomId() {\r\n return Math.random().toString(36).slice(2, 9);\r\n}\r\n\r\nexport interface CharacterHotspotFormProps {\r\n initial?: CharacterHotspotConfig | null;\r\n /**\r\n * Upload an image and return its public URL.\r\n * Implement however suits your storage backend:\r\n * ```ts\r\n * onUploadImage={async (file) => {\r\n * const storage = getStorage(getFirebaseApp());\r\n * const storageRef = ref(storage, `character-hotspot/${Date.now()}_${file.name}`);\r\n * await uploadBytes(storageRef, file);\r\n * return getDownloadURL(storageRef);\r\n * }}\r\n * ```\r\n */\r\n onUploadImage: (file: File) => Promise<string>;\r\n /**\r\n * Persist the final config (e.g. write to Firestore).\r\n */\r\n onSave: (config: CharacterHotspotConfig) => Promise<void>;\r\n /**\r\n * Optional callback after a successful save (e.g. revalidate cache).\r\n */\r\n onAfterSave?: () => void | Promise<void>;\r\n}\r\n\r\nexport function CharacterHotspotForm({\r\n initial,\r\n onUploadImage,\r\n onSave,\r\n onAfterSave,\r\n}: CharacterHotspotFormProps) {\r\n const [imageUrl, setImageUrl] = useState(initial?.imageUrl ?? \"\");\r\n const [imageAlt, setImageAlt] = useState(\r\n initial?.imageAlt ?? \"DC, Marvel and Anime characters\",\r\n );\r\n const [active, setActive] = useState(initial?.active ?? true);\r\n const [pins, setPins] = useState<HotspotPin[]>(initial?.pins ?? []);\r\n const [step, setStep] = useState<WizardStep>(\r\n initial?.imageUrl ? \"review\" : \"image\",\r\n );\r\n\r\n const [draftPos, setDraftPos] = useState<DraftPosition | null>(null);\r\n const [draftName, setDraftName] = useState(\"\");\r\n const [draftUniverse, setDraftUniverse] = useState(\"\");\r\n const [draftDescription, setDraftDescription] = useState(\"\");\r\n const [draftHref, setDraftHref] = useState(\"\");\r\n const [draftBuyText, setDraftBuyText] = useState(\"Shop Now\");\r\n const [draftBadge, setDraftBadge] = useState(\"\");\r\n const [draftAccent, setDraftAccent] = useState(\"#E8001C\");\r\n\r\n const [uploading, setUploading] = useState(false);\r\n const [saving, setSaving] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const [success, setSuccess] = useState(false);\r\n\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n\r\n async function handleImageUpload(e: React.ChangeEvent<HTMLInputElement>) {\r\n const file = e.target.files?.[0];\r\n if (!file) return;\r\n setUploading(true);\r\n setError(null);\r\n try {\r\n const url = await onUploadImage(file);\r\n setImageUrl(url);\r\n } catch {\r\n setError(\"Image upload failed.\");\r\n } finally {\r\n setUploading(false);\r\n }\r\n }\r\n\r\n function handleImageClick(e: React.MouseEvent<HTMLDivElement>) {\r\n if (!containerRef.current) return;\r\n const rect = containerRef.current.getBoundingClientRect();\r\n const xPct =\r\n Math.round(\r\n Math.max(\r\n 1,\r\n Math.min(99, ((e.clientX - rect.left) / rect.width) * 100),\r\n ) * 10,\r\n ) / 10;\r\n const yPct =\r\n Math.round(\r\n Math.max(\r\n 1,\r\n Math.min(99, ((e.clientY - rect.top) / rect.height) * 100),\r\n ) * 10,\r\n ) / 10;\r\n setDraftPos((prev) => ({ id: prev?.id ?? randomId(), xPct, yPct }));\r\n }\r\n\r\n function commitDraftPin() {\r\n if (!draftPos) return;\r\n setPins((prev) => [\r\n ...prev,\r\n {\r\n id: draftPos.id,\r\n name: draftName,\r\n universe: draftUniverse,\r\n description: draftDescription,\r\n href: draftHref,\r\n xPct: draftPos.xPct,\r\n yPct: draftPos.yPct,\r\n accent: draftAccent,\r\n badge: draftBadge,\r\n buyText: draftBuyText,\r\n },\r\n ]);\r\n setDraftPos(null);\r\n setDraftName(\"\");\r\n setDraftUniverse(\"\");\r\n setDraftDescription(\"\");\r\n setDraftHref(\"\");\r\n setDraftBuyText(\"Shop Now\");\r\n setDraftBadge(\"\");\r\n setDraftAccent(\"#E8001C\");\r\n }\r\n\r\n function deletePin(id: string) {\r\n setPins((prev) => prev.filter((p) => p.id !== id));\r\n }\r\n\r\n async function handleSave() {\r\n if (!imageUrl) return;\r\n setSaving(true);\r\n setError(null);\r\n setSuccess(false);\r\n try {\r\n await onSave({ imageUrl, imageAlt, active, pins });\r\n await onAfterSave?.();\r\n setSuccess(true);\r\n } catch {\r\n setError(\"Save failed. Check your connection and try again.\");\r\n } finally {\r\n setSaving(false);\r\n }\r\n }\r\n\r\n const STEPS: { key: WizardStep; label: string }[] = [\r\n { key: \"image\", label: \"Image\" },\r\n { key: \"place\", label: \"Place Pin\" },\r\n { key: \"details\", label: \"Pin Details\" },\r\n { key: \"review\", label: \"Review & Save\" },\r\n ];\r\n const stepIndex = STEPS.findIndex((s) => s.key === step);\r\n\r\n return (\r\n <Div className=\"mx-auto max-w-3xl space-y-6\">\r\n {error && (\r\n <Text className=\"rounded border border-red-200 bg-red-50 px-4 py-2 text-sm font-bold text-red-600\">\r\n {error}\r\n </Text>\r\n )}\r\n {success && (\r\n <Text className=\"rounded border border-green-200 bg-green-50 px-4 py-2 text-sm font-bold text-green-700\">\r\n Saved to database successfully!\r\n </Text>\r\n )}\r\n\r\n {/* Progress stepper */}\r\n <Div className=\"flex items-start\">\r\n {STEPS.map((s, i) => (\r\n <Div key={s.key} className=\"flex flex-1 flex-col items-center\">\r\n <Div className=\"flex w-full items-center\">\r\n {i > 0 && (\r\n <Div\r\n className=\"h-0.5 flex-1\"\r\n style={{\r\n background:\r\n i <= stepIndex\r\n ? \"var(--color-black)\"\r\n : \"var(--border-ink)\",\r\n }}\r\n />\r\n )}\r\n <Div\r\n className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-sm font-bold\"\r\n style={{\r\n background:\r\n i < stepIndex\r\n ? \"var(--color-black)\"\r\n : i === stepIndex\r\n ? \"var(--color-yellow)\"\r\n : \"var(--surface-elevated)\",\r\n color:\r\n i < stepIndex\r\n ? \"var(--color-yellow)\"\r\n : \"var(--color-black)\",\r\n border:\r\n i <= stepIndex\r\n ? \"2px solid var(--color-black)\"\r\n : \"2px solid var(--border-ink)\",\r\n }}\r\n >\r\n {i < stepIndex ? \"✓\" : i + 1}\r\n </Div>\r\n {i < STEPS.length - 1 && (\r\n <Div\r\n className=\"h-0.5 flex-1\"\r\n style={{\r\n background:\r\n i < stepIndex\r\n ? \"var(--color-black)\"\r\n : \"var(--border-ink)\",\r\n }}\r\n />\r\n )}\r\n </Div>\r\n <Span\r\n className=\"mt-1 text-center text-[10px] font-medium\"\r\n style={{ color: \"var(--color-muted)\" }}\r\n >\r\n {s.label}\r\n </Span>\r\n </Div>\r\n ))}\r\n </Div>\r\n\r\n {/* ── Step 1: Upload Image ── */}\r\n {step === \"image\" && (\r\n <Div\r\n className=\"space-y-4 rounded-lg border-2 p-6\"\r\n style={{\r\n borderColor: \"var(--border-ink)\",\r\n background: \"var(--surface-elevated)\",\r\n }}\r\n >\r\n <Heading level={2} className=\"text-lg font-bold\">\r\n Upload Background Image\r\n </Heading>\r\n <Text className=\"text-sm\" style={{ color: \"var(--color-muted)\" }}>\r\n Choose a wide panoramic image that shows all the characters. You\r\n will place pins on it in the next step.\r\n </Text>\r\n\r\n <Label\r\n className=\"flex cursor-pointer flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed p-8 transition-colors hover:opacity-80\"\r\n style={{ borderColor: \"var(--border-ink)\" }}\r\n >\r\n <Span className=\"text-3xl\">🖼</Span>\r\n <Span className=\"font-medium\">\r\n {uploading ? \"Uploading…\" : \"Click to choose image\"}\r\n </Span>\r\n <Span className=\"text-xs\" style={{ color: \"var(--color-muted)\" }}>\r\n JPG, PNG, WebP — wide landscape images work best\r\n </Span>\r\n <Input\r\n type=\"file\"\r\n accept=\"image/*\"\r\n className=\"hidden\"\r\n onChange={handleImageUpload}\r\n disabled={uploading}\r\n />\r\n </Label>\r\n\r\n {imageUrl && (\r\n <Div className=\"space-y-1\">\r\n <Div\r\n className=\"relative w-full overflow-hidden rounded-lg\"\r\n style={{ paddingTop: \"37.5%\" }}\r\n >\r\n <Image\r\n src={imageUrl}\r\n alt={imageAlt}\r\n fill\r\n className=\"object-cover\"\r\n sizes=\"680px\"\r\n />\r\n </Div>\r\n <Text className=\"text-xs font-medium text-green-700\">\r\n ✓ Image uploaded\r\n </Text>\r\n </Div>\r\n )}\r\n\r\n <Div className=\"flex flex-col gap-1\">\r\n <Label className=\"text-sm font-bold\">Image Alt Text</Label>\r\n <Input\r\n type=\"text\"\r\n value={imageAlt}\r\n onChange={(e) => setImageAlt(e.target.value)}\r\n placeholder=\"DC, Marvel and Anime characters\"\r\n className=\"rounded border-2 px-3 py-2 text-sm outline-none\"\r\n style={{\r\n borderColor: \"var(--border-ink)\",\r\n background: \"var(--surface-elevated)\",\r\n color: \"var(--color-black)\",\r\n }}\r\n />\r\n </Div>\r\n\r\n <Label className=\"inline-flex cursor-pointer items-center gap-2 text-sm font-medium\">\r\n <Input\r\n type=\"checkbox\"\r\n checked={active}\r\n onChange={(e) => setActive(e.target.checked)}\r\n className=\"h-4 w-4 rounded\"\r\n />\r\n Active (show on homepage)\r\n </Label>\r\n\r\n <Div\r\n className=\"flex items-center justify-end gap-3 border-t pt-4\"\r\n style={{ borderColor: \"var(--border-ink)\" }}\r\n >\r\n {(initial?.pins?.length ?? 0) > 0 && (\r\n <Button\r\n type=\"button\"\r\n onClick={() => setStep(\"review\")}\r\n variant=\"ghost\"\r\n className=\"px-4 py-2 text-sm font-medium rounded transition-opacity hover:opacity-70\"\r\n style={{\r\n background: \"transparent\",\r\n color: \"var(--color-black)\",\r\n }}\r\n >\r\n Skip to Review\r\n </Button>\r\n )}\r\n <Button\r\n type=\"button\"\r\n onClick={() => setStep(\"place\")}\r\n disabled={!imageUrl || uploading}\r\n variant=\"primary\"\r\n className=\"px-4 py-2 text-sm font-bold rounded transition-opacity disabled:opacity-50\"\r\n style={{\r\n background: \"var(--color-black)\",\r\n color: \"var(--color-yellow)\",\r\n }}\r\n >\r\n Next: Place Pins →\r\n </Button>\r\n </Div>\r\n </Div>\r\n )}\r\n\r\n {/* ── Step 2: Place Pin ── */}\r\n {step === \"place\" && (\r\n <Div\r\n className=\"space-y-4 rounded-lg border-2 p-6\"\r\n style={{\r\n borderColor: \"var(--border-ink)\",\r\n background: \"var(--surface-elevated)\",\r\n }}\r\n >\r\n <Heading level={2} className=\"text-lg font-bold\">\r\n Place a Pin\r\n </Heading>\r\n <Text className=\"text-sm\" style={{ color: \"var(--color-muted)\" }}>\r\n <strong>Click anywhere on the image</strong> to drop a pin, or enter\r\n exact coordinates below.\r\n </Text>\r\n\r\n <Div\r\n ref={containerRef}\r\n className=\"relative w-full overflow-hidden rounded-lg\"\r\n style={{\r\n paddingTop: \"56.25%\",\r\n cursor: \"crosshair\",\r\n background: \"#111\",\r\n }}\r\n onClick={handleImageClick}\r\n >\r\n <Image\r\n src={imageUrl}\r\n alt={imageAlt}\r\n fill\r\n className=\"object-cover\"\r\n sizes=\"(max-width: 680px) 100vw\"\r\n />\r\n\r\n {pins.map((pin) => (\r\n <Div\r\n key={pin.id}\r\n className=\"pointer-events-none absolute\"\r\n style={{\r\n left: `${pin.xPct}%`,\r\n top: `${pin.yPct}%`,\r\n transform: \"translate(-50%, -50%)\",\r\n zIndex: 10,\r\n }}\r\n >\r\n <Div\r\n className=\"flex items-center justify-center rounded-full text-xs font-bold text-white\"\r\n style={{\r\n width: 24,\r\n height: 24,\r\n background: pin.accent || \"#E8001C\",\r\n border: \"2px solid white\",\r\n boxShadow: \"0 1px 4px rgba(0,0,0,0.5)\",\r\n }}\r\n >\r\n +\r\n </Div>\r\n {pin.name && (\r\n <Div\r\n className=\"pointer-events-none absolute left-7 top-1/2 -translate-y-1/2 whitespace-nowrap rounded px-1.5 py-0.5 text-[9px] font-bold text-white\"\r\n style={{ background: \"#0D0D0D\" }}\r\n >\r\n {pin.name}\r\n </Div>\r\n )}\r\n </Div>\r\n ))}\r\n\r\n {draftPos && (\r\n <Div\r\n className=\"absolute\"\r\n style={{\r\n left: `${draftPos.xPct}%`,\r\n top: `${draftPos.yPct}%`,\r\n transform: \"translate(-50%, -50%)\",\r\n zIndex: 20,\r\n }}\r\n >\r\n <Span\r\n className=\"absolute animate-ping rounded-full\"\r\n style={{\r\n inset: -6,\r\n background: \"rgba(255,228,0,0.4)\",\r\n pointerEvents: \"none\",\r\n }}\r\n />\r\n <Div\r\n className=\"relative flex items-center justify-center rounded-full font-bold\"\r\n style={{\r\n width: 32,\r\n height: 32,\r\n background: \"var(--color-yellow)\",\r\n border: \"3px solid var(--color-black)\",\r\n boxShadow: \"0 2px 8px rgba(0,0,0,0.55)\",\r\n color: \"var(--color-black)\",\r\n fontSize: 18,\r\n }}\r\n >\r\n ★\r\n </Div>\r\n <Div\r\n className=\"pointer-events-none absolute left-9 top-1/2 -translate-y-1/2 whitespace-nowrap rounded px-2 py-0.5 text-[10px] font-bold\"\r\n style={{\r\n background: \"var(--color-black)\",\r\n color: \"var(--color-yellow)\",\r\n }}\r\n >\r\n NEW PIN\r\n </Div>\r\n </Div>\r\n )}\r\n </Div>\r\n\r\n <Div className=\"grid grid-cols-2 gap-3\">\r\n {(\r\n [\r\n {\r\n label: \"X Position (%)\",\r\n field: \"xPct\",\r\n value: draftPos?.xPct ?? \"\",\r\n onChange: (v: number) =>\r\n setDraftPos((prev) => ({\r\n id: prev?.id ?? randomId(),\r\n xPct: Math.max(1, Math.min(99, v)),\r\n yPct: prev?.yPct ?? 50,\r\n })),\r\n },\r\n {\r\n label: \"Y Position (%)\",\r\n field: \"yPct\",\r\n value: draftPos?.yPct ?? \"\",\r\n onChange: (v: number) =>\r\n setDraftPos((prev) => ({\r\n id: prev?.id ?? randomId(),\r\n xPct: prev?.xPct ?? 50,\r\n yPct: Math.max(1, Math.min(99, v)),\r\n })),\r\n },\r\n ] as const\r\n ).map(({ label, field, value, onChange }) => (\r\n <Div key={field} className=\"flex flex-col gap-1\">\r\n <Label className=\"text-sm font-bold\">{label}</Label>\r\n <Input\r\n type=\"number\"\r\n min={1}\r\n max={99}\r\n step={0.1}\r\n value={value}\r\n placeholder=\"e.g. 42.5\"\r\n onChange={(e) => {\r\n const v = parseFloat(e.target.value);\r\n if (!isNaN(v)) onChange(v);\r\n }}\r\n className=\"rounded border-2 px-3 py-2 text-sm outline-none\"\r\n style={{\r\n borderColor: \"var(--border-ink)\",\r\n background: \"var(--surface-elevated)\",\r\n color: \"var(--color-black)\",\r\n }}\r\n />\r\n </Div>\r\n ))}\r\n </Div>\r\n\r\n {pins.length > 0 && (\r\n <Text className=\"text-xs\" style={{ color: \"var(--color-muted)\" }}>\r\n {pins.length} pin{pins.length !== 1 ? \"s\" : \"\"} already placed on\r\n this image.\r\n </Text>\r\n )}\r\n\r\n <Div\r\n className=\"flex items-center justify-between border-t pt-4\"\r\n style={{ borderColor: \"var(--border-ink)\" }}\r\n >\r\n <Button\r\n type=\"button\"\r\n onClick={() => setStep(\"image\")}\r\n variant=\"ghost\"\r\n className=\"px-4 py-2 text-sm font-medium rounded transition-opacity hover:opacity-70\"\r\n style={{ background: \"transparent\", color: \"var(--color-black)\" }}\r\n >\r\n ← Back\r\n </Button>\r\n <Div className=\"flex items-center gap-3\">\r\n {pins.length > 0 && (\r\n <Button\r\n type=\"button\"\r\n onClick={() => setStep(\"review\")}\r\n variant=\"outline\"\r\n className=\"px-4 py-2 text-sm font-bold rounded transition-opacity\"\r\n style={{\r\n background: \"var(--surface-warm)\",\r\n color: \"var(--color-black)\",\r\n border: \"2px solid var(--border-ink)\",\r\n }}\r\n >\r\n Done Adding Pins\r\n </Button>\r\n )}\r\n <Button\r\n type=\"button\"\r\n onClick={() => setStep(\"details\")}\r\n disabled={!draftPos}\r\n variant=\"primary\"\r\n className=\"px-4 py-2 text-sm font-bold rounded transition-opacity disabled:opacity-50\"\r\n style={{\r\n background: \"var(--color-black)\",\r\n color: \"var(--color-yellow)\",\r\n }}\r\n >\r\n Continue: Add Details →\r\n </Button>\r\n </Div>\r\n </Div>\r\n </Div>\r\n )}\r\n\r\n {/* ── Step 3: Pin Details ── */}\r\n {step === \"details\" && (\r\n <Div\r\n className=\"space-y-4 rounded-lg border-2 p-6\"\r\n style={{\r\n borderColor: \"var(--border-ink)\",\r\n background: \"var(--surface-elevated)\",\r\n }}\r\n >\r\n <Heading level={2} className=\"text-lg font-bold\">\r\n Pin Details\r\n </Heading>\r\n <Text className=\"text-sm\" style={{ color: \"var(--color-muted)\" }}>\r\n Fill in the details for the pin at{\" \"}\r\n <strong>\r\n {draftPos?.xPct}%, {draftPos?.yPct}%\r\n </strong>\r\n .\r\n </Text>\r\n\r\n <Div className=\"grid grid-cols-2 gap-3\">\r\n {(\r\n [\r\n {\r\n label: \"Name *\",\r\n value: draftName,\r\n onChange: setDraftName,\r\n placeholder: \"SPIDER-MAN\",\r\n },\r\n {\r\n label: \"Universe / Category *\",\r\n value: draftUniverse,\r\n onChange: setDraftUniverse,\r\n placeholder: \"Marvel\",\r\n },\r\n ] as const\r\n ).map(({ label, value, onChange, placeholder }) => (\r\n <Div key={label} className=\"flex flex-col gap-1\">\r\n <Label className=\"text-sm font-bold\">{label}</Label>\r\n <Input\r\n type=\"text\"\r\n value={value}\r\n onChange={(e) =>\r\n (onChange as (v: string) => void)(e.target.value)\r\n }\r\n placeholder={placeholder}\r\n className=\"rounded border-2 px-3 py-2 text-sm outline-none\"\r\n style={{\r\n borderColor: \"var(--border-ink)\",\r\n background: \"var(--surface-elevated)\",\r\n color: \"var(--color-black)\",\r\n }}\r\n />\r\n </Div>\r\n ))}\r\n </Div>\r\n\r\n <Div className=\"flex flex-col gap-1\">\r\n <Label className=\"text-sm font-bold\">Description *</Label>\r\n <Textarea\r\n rows={3}\r\n value={draftDescription}\r\n onChange={(e) => setDraftDescription(e.target.value)}\r\n className=\"resize-none rounded border-2 px-3 py-2 text-sm outline-none\"\r\n style={{\r\n borderColor: \"var(--border-ink)\",\r\n background: \"var(--surface-elevated)\",\r\n color: \"var(--color-black)\",\r\n }}\r\n placeholder=\"Short description shown in the popup…\"\r\n />\r\n </Div>\r\n\r\n <Div className=\"flex flex-col gap-1\">\r\n <Label className=\"text-sm font-bold\">Link (href) *</Label>\r\n <Input\r\n type=\"text\"\r\n value={draftHref}\r\n onChange={(e) => setDraftHref(e.target.value)}\r\n placeholder=\"/franchise/marvel\"\r\n className=\"rounded border-2 px-3 py-2 text-sm outline-none\"\r\n style={{\r\n borderColor: \"var(--border-ink)\",\r\n background: \"var(--surface-elevated)\",\r\n color: \"var(--color-black)\",\r\n }}\r\n />\r\n </Div>\r\n\r\n <Div className=\"grid grid-cols-2 gap-3\">\r\n {(\r\n [\r\n {\r\n label: \"Button Text *\",\r\n value: draftBuyText,\r\n onChange: setDraftBuyText,\r\n placeholder: \"Get Spider-Man Figures\",\r\n },\r\n {\r\n label: \"Badge Label\",\r\n value: draftBadge,\r\n onChange: setDraftBadge,\r\n placeholder: \"MARVEL\",\r\n },\r\n ] as const\r\n ).map(({ label, value, onChange, placeholder }) => (\r\n <Div key={label} className=\"flex flex-col gap-1\">\r\n <Label className=\"text-sm font-bold\">{label}</Label>\r\n <Input\r\n type=\"text\"\r\n value={value}\r\n onChange={(e) =>\r\n (onChange as (v: string) => void)(e.target.value)\r\n }\r\n placeholder={placeholder}\r\n className=\"rounded border-2 px-3 py-2 text-sm outline-none\"\r\n style={{\r\n borderColor: \"var(--border-ink)\",\r\n background: \"var(--surface-elevated)\",\r\n color: \"var(--color-black)\",\r\n }}\r\n />\r\n </Div>\r\n ))}\r\n </Div>\r\n\r\n <Div className=\"flex items-end gap-3\">\r\n <Div className=\"flex-1 flex flex-col gap-1\">\r\n <Label className=\"text-sm font-bold\">Accent Colour (hex)</Label>\r\n <Input\r\n type=\"text\"\r\n value={draftAccent}\r\n onChange={(e) => setDraftAccent(e.target.value)}\r\n placeholder=\"#E8001C\"\r\n className=\"rounded border-2 px-3 py-2 text-sm outline-none\"\r\n style={{\r\n borderColor: \"var(--border-ink)\",\r\n background: \"var(--surface-elevated)\",\r\n color: \"var(--color-black)\",\r\n }}\r\n />\r\n </Div>\r\n <Input\r\n type=\"color\"\r\n value={draftAccent}\r\n onChange={(e) => setDraftAccent(e.target.value)}\r\n className=\"mb-0.5 h-10 w-10 cursor-pointer rounded border-2\"\r\n style={{ borderColor: \"var(--border-ink)\" }}\r\n title=\"Pick colour\"\r\n />\r\n </Div>\r\n\r\n <Div\r\n className=\"flex items-center justify-between border-t pt-4\"\r\n style={{ borderColor: \"var(--border-ink)\" }}\r\n >\r\n <Button\r\n type=\"button\"\r\n onClick={() => setStep(\"place\")}\r\n variant=\"ghost\"\r\n className=\"px-4 py-2 text-sm font-medium rounded transition-opacity hover:opacity-70\"\r\n style={{ background: \"transparent\", color: \"var(--color-black)\" }}\r\n >\r\n ← Back\r\n </Button>\r\n <Div className=\"flex items-center gap-3\">\r\n <Button\r\n type=\"button\"\r\n disabled={!draftName || !draftHref}\r\n onClick={() => {\r\n commitDraftPin();\r\n setStep(\"review\");\r\n }}\r\n variant=\"outline\"\r\n className=\"px-4 py-2 text-sm font-bold rounded transition-opacity disabled:opacity-50\"\r\n style={{\r\n background: \"var(--surface-warm)\",\r\n color: \"var(--color-black)\",\r\n border: \"2px solid var(--border-ink)\",\r\n }}\r\n >\r\n Save Pin & Finish\r\n </Button>\r\n <Button\r\n type=\"button\"\r\n disabled={!draftName || !draftHref}\r\n onClick={() => {\r\n commitDraftPin();\r\n setStep(\"place\");\r\n }}\r\n variant=\"primary\"\r\n className=\"px-4 py-2 text-sm font-bold rounded transition-opacity disabled:opacity-50\"\r\n style={{\r\n background: \"var(--color-black)\",\r\n color: \"var(--color-yellow)\",\r\n }}\r\n >\r\n Save Pin & Add Another →\r\n </Button>\r\n </Div>\r\n </Div>\r\n </Div>\r\n )}\r\n\r\n {/* ── Step 4: Review & Save ── */}\r\n {step === \"review\" && (\r\n <Div\r\n className=\"space-y-4 rounded-lg border-2 p-6\"\r\n style={{\r\n borderColor: \"var(--border-ink)\",\r\n background: \"var(--surface-elevated)\",\r\n }}\r\n >\r\n <Div className=\"flex items-center justify-between\">\r\n <Heading level={2} className=\"text-lg font-bold\">\r\n Review & Save\r\n </Heading>\r\n <Span\r\n className=\"rounded-full px-3 py-1 text-sm font-bold\"\r\n style={{ background: \"var(--surface-warm)\" }}\r\n >\r\n {pins.length} pin{pins.length !== 1 ? \"s\" : \"\"}\r\n </Span>\r\n </Div>\r\n\r\n {/* Preview image */}\r\n <Div\r\n className=\"relative w-full overflow-hidden rounded-lg\"\r\n style={{ paddingTop: \"56.25%\", background: \"#111\" }}\r\n >\r\n <Image\r\n src={imageUrl}\r\n alt={imageAlt}\r\n fill\r\n className=\"object-cover\"\r\n sizes=\"(max-width: 680px) 100vw\"\r\n />\r\n {pins.map((pin) => (\r\n <Div\r\n key={pin.id}\r\n className=\"pointer-events-none absolute\"\r\n style={{\r\n left: `${pin.xPct}%`,\r\n top: `${pin.yPct}%`,\r\n transform: \"translate(-50%, -50%)\",\r\n zIndex: 10,\r\n }}\r\n >\r\n <Div\r\n className=\"flex items-center justify-center rounded-full text-xs font-bold text-white\"\r\n style={{\r\n width: 28,\r\n height: 28,\r\n background: pin.accent || \"#E8001C\",\r\n border: \"2px solid white\",\r\n boxShadow: \"0 2px 6px rgba(0,0,0,0.55)\",\r\n }}\r\n >\r\n +\r\n </Div>\r\n {pin.name && (\r\n <Div\r\n className=\"pointer-events-none absolute left-8 top-1/2 -translate-y-1/2 whitespace-nowrap rounded px-1.5 py-0.5 text-[9px] font-bold text-white\"\r\n style={{ background: \"#0D0D0D\" }}\r\n >\r\n {pin.name}\r\n </Div>\r\n )}\r\n </Div>\r\n ))}\r\n </Div>\r\n\r\n {/* Pin list */}\r\n {pins.length > 0 ? (\r\n <Ul\r\n className=\"divide-y rounded-lg border\"\r\n style={{ borderColor: \"var(--border-ink)\" }}\r\n >\r\n {pins.map((pin, i) => (\r\n <Li key={pin.id} className=\"flex items-center gap-3 px-4 py-3\">\r\n <Span\r\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-xs font-bold text-white\"\r\n style={{ background: pin.accent || \"#E8001C\" }}\r\n >\r\n {i + 1}\r\n </Span>\r\n <Div className=\"min-w-0 flex-1\">\r\n <Text className=\"truncate text-sm font-bold\">\r\n {pin.name || (\r\n <Span\r\n className=\"italic\"\r\n style={{ color: \"var(--color-muted)\" }}\r\n >\r\n Unnamed\r\n </Span>\r\n )}\r\n </Text>\r\n <Text\r\n className=\"text-xs\"\r\n style={{ color: \"var(--color-muted)\" }}\r\n >\r\n {pin.universe} · {pin.xPct.toFixed(0)}%,{\" \"}\r\n {pin.yPct.toFixed(0)}%\r\n </Text>\r\n </Div>\r\n <Button\r\n type=\"button\"\r\n onClick={() => deletePin(pin.id)}\r\n variant=\"ghost\"\r\n className=\"shrink-0 rounded p-1 text-xs text-red-500 hover:bg-red-50\"\r\n title=\"Remove pin\"\r\n >\r\n ✕\r\n </Button>\r\n </Li>\r\n ))}\r\n </Ul>\r\n ) : (\r\n <Div\r\n className=\"rounded-lg border-2 border-dashed p-8 text-center text-sm\"\r\n style={{\r\n borderColor: \"var(--border-ink)\",\r\n color: \"var(--color-muted)\",\r\n }}\r\n >\r\n No pins yet — add some using the button below.\r\n </Div>\r\n )}\r\n\r\n {/* Image settings */}\r\n <details\r\n className=\"rounded-lg border p-3\"\r\n style={{ borderColor: \"var(--border-ink)\" }}\r\n >\r\n <summary className=\"cursor-pointer text-sm font-medium\">\r\n Image Settings\r\n </summary>\r\n <Div className=\"mt-3 space-y-3\">\r\n <Label\r\n className=\"inline-flex cursor-pointer items-center gap-2 rounded border-2 border-dashed px-3 py-1.5 text-sm font-medium transition-colors hover:opacity-80\"\r\n style={{ borderColor: \"var(--border-ink)\" }}\r\n >\r\n {uploading ? \"Uploading…\" : \"Replace Image\"}\r\n <Input\r\n type=\"file\"\r\n accept=\"image/*\"\r\n className=\"hidden\"\r\n onChange={handleImageUpload}\r\n disabled={uploading}\r\n />\r\n </Label>\r\n <Div className=\"flex flex-col gap-1\">\r\n <Label className=\"text-sm font-bold\">Image Alt Text</Label>\r\n <Input\r\n type=\"text\"\r\n value={imageAlt}\r\n onChange={(e) => setImageAlt(e.target.value)}\r\n className=\"rounded border-2 px-3 py-2 text-sm outline-none\"\r\n style={{\r\n borderColor: \"var(--border-ink)\",\r\n background: \"var(--surface-elevated)\",\r\n color: \"var(--color-black)\",\r\n }}\r\n />\r\n </Div>\r\n <Label className=\"inline-flex cursor-pointer items-center gap-2 text-sm font-medium\">\r\n <Input\r\n type=\"checkbox\"\r\n checked={active}\r\n onChange={(e) => setActive(e.target.checked)}\r\n className=\"h-4 w-4 rounded\"\r\n />\r\n Active (show on homepage)\r\n </Label>\r\n </Div>\r\n </details>\r\n\r\n <Div\r\n className=\"flex items-center justify-between border-t pt-4\"\r\n style={{ borderColor: \"var(--border-ink)\" }}\r\n >\r\n <Button\r\n type=\"button\"\r\n onClick={() => {\r\n setDraftPos(null);\r\n setStep(\"place\");\r\n }}\r\n variant=\"outline\"\r\n className=\"px-4 py-2 text-sm font-bold rounded transition-opacity\"\r\n style={{\r\n background: \"var(--surface-warm)\",\r\n color: \"var(--color-black)\",\r\n border: \"2px solid var(--border-ink)\",\r\n }}\r\n >\r\n + Add Another Pin\r\n </Button>\r\n <Button\r\n type=\"button\"\r\n onClick={handleSave}\r\n disabled={!imageUrl || saving || pins.length === 0}\r\n variant=\"primary\"\r\n className=\"px-4 py-2 text-sm font-bold rounded transition-opacity disabled:opacity-50\"\r\n style={{\r\n background: \"var(--color-black)\",\r\n color: \"var(--color-yellow)\",\r\n }}\r\n >\r\n {saving ? \"Saving…\" : \"Save to Database\"}\r\n </Button>\r\n </Div>\r\n </Div>\r\n )}\r\n </Div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { useState, useEffect, useCallback } from \"react\";\r\nimport Image from \"next/image\";\r\nimport Link from \"next/link\";\r\nimport { Button, Div, Heading, Row, Span } from \"@mohasinac/ui\";\r\nimport type { Banner } from \"../types\";\r\n\r\nexport interface HeroBannerProps {\r\n banners: Banner[];\r\n /** Milliseconds between automatic slide advances. Default: 5000. */\r\n autoplayMs?: number;\r\n}\r\n\r\nexport function HeroBanner({ banners, autoplayMs = 5000 }: HeroBannerProps) {\r\n const [current, setCurrent] = useState(0);\r\n const [animating, setAnimating] = useState(false);\r\n\r\n const goTo = useCallback(\r\n (idx: number) => {\r\n if (animating) return;\r\n setAnimating(true);\r\n setCurrent(idx);\r\n setTimeout(() => setAnimating(false), 600);\r\n },\r\n [animating],\r\n );\r\n\r\n const next = useCallback(() => {\r\n goTo((current + 1) % banners.length);\r\n }, [current, banners.length, goTo]);\r\n\r\n const prev = useCallback(() => {\r\n goTo((current - 1 + banners.length) % banners.length);\r\n }, [current, banners.length, goTo]);\r\n\r\n useEffect(() => {\r\n if (banners.length <= 1) return;\r\n const id = setInterval(next, autoplayMs);\r\n return () => clearInterval(id);\r\n }, [next, banners.length, autoplayMs]);\r\n\r\n if (banners.length === 0) return null;\r\n\r\n const banner = banners[current]!;\r\n\r\n return (\r\n <Div\r\n className=\"relative overflow-hidden\"\r\n style={{\r\n minHeight: \"100svh\",\r\n background: banner.backgroundColor ?? \"var(--dark-section-deep)\",\r\n }}\r\n >\r\n {/* Background images — cross-fade between slides */}\r\n {banners.map((b, i) => (\r\n <Div\r\n key={b.id}\r\n className=\"absolute inset-0 transition-opacity duration-700\"\r\n style={{ opacity: i === current ? 1 : 0, zIndex: 1 }}\r\n >\r\n {b.backgroundImage && (\r\n <Image\r\n src={b.backgroundImage}\r\n alt={b.title}\r\n fill\r\n className=\"object-cover object-center\"\r\n priority={i === 0}\r\n sizes=\"100vw\"\r\n />\r\n )}\r\n </Div>\r\n ))}\r\n\r\n {/* Cinematic gradient overlays */}\r\n <Div\r\n className=\"absolute inset-0\"\r\n style={{\r\n background:\r\n \"linear-gradient(110deg, rgba(0,0,0,0.82) 0%, rgba(0,0,0,0.45) 55%, rgba(0,0,0,0.18) 100%)\",\r\n zIndex: 2,\r\n }}\r\n />\r\n <Div\r\n className=\"absolute inset-0\"\r\n style={{\r\n background:\r\n \"linear-gradient(to bottom, rgba(0,0,0,0.08) 0%, transparent 30%, rgba(0,0,0,0.55) 100%)\",\r\n zIndex: 3,\r\n }}\r\n />\r\n\r\n {/* Content */}\r\n <Div\r\n className=\"relative flex flex-col justify-end px-5 pb-16 sm:px-12 sm:pb-24 lg:px-20\"\r\n style={{\r\n minHeight: \"100svh\",\r\n zIndex: 10,\r\n paddingTop: \"var(--header-height, 4rem)\",\r\n }}\r\n >\r\n {banner.subtitle && (\r\n <Div className=\"mb-3\">\r\n <Span\r\n className=\"inline-block px-3 py-1 text-xs font-black uppercase tracking-[0.18em]\"\r\n style={{\r\n background: \"var(--color-red)\",\r\n color: \"#FFFFFF\",\r\n fontFamily: \"var(--font-bangers, Bangers, cursive)\",\r\n letterSpacing: \"0.16em\",\r\n }}\r\n >\r\n {banner.subtitle}\r\n </Span>\r\n </Div>\r\n )}\r\n\r\n <Heading\r\n level={2}\r\n className=\"mb-5 max-w-xl leading-none\"\r\n style={{\r\n fontFamily: \"var(--font-bangers, Bangers, cursive)\",\r\n fontSize: \"clamp(3rem, 9vw, 6.5rem)\",\r\n letterSpacing: \"0.04em\",\r\n color: banner.textColor ?? \"#FFFFFF\",\r\n textShadow: \"0 4px 32px rgba(0,0,0,0.5)\",\r\n }}\r\n >\r\n {banner.title}\r\n </Heading>\r\n\r\n {banner.ctaLabel && banner.ctaUrl && (\r\n <Row wrap gap=\"md\">\r\n <Link\r\n href={banner.ctaUrl}\r\n className=\"inline-flex items-center gap-2 sm:gap-3 px-5 py-3 sm:px-8 sm:py-3.5 font-black uppercase transition-all hover:-translate-y-0.5\"\r\n style={{\r\n fontFamily: \"var(--font-bangers, Bangers, cursive)\",\r\n letterSpacing: \"0.1em\",\r\n fontSize: \"clamp(0.85rem, 2.5vw, 1.1rem)\",\r\n background: \"var(--color-yellow)\",\r\n color: \"#1A1A1A\",\r\n boxShadow: \"0 4px 24px rgba(255,229,0,0.35)\",\r\n }}\r\n >\r\n {banner.ctaLabel}\r\n <Span\r\n aria-hidden=\"true\"\r\n className=\"text-lg sm:text-xl leading-none\"\r\n >\r\n →\r\n </Span>\r\n </Link>\r\n </Row>\r\n )}\r\n </Div>\r\n\r\n {/* Prev / Next arrows */}\r\n {banners.length > 1 && (\r\n <>\r\n <Button\r\n onClick={prev}\r\n aria-label=\"Previous slide\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"absolute left-3 sm:left-6 top-1/2 -translate-y-1/2 flex items-center justify-center rounded-full transition-all hover:scale-105\"\r\n style={{\r\n zIndex: 15,\r\n width: 40,\r\n height: 40,\r\n background: \"rgba(255,255,255,0.12)\",\r\n border: \"1px solid rgba(255,255,255,0.2)\",\r\n color: \"#ffffff\",\r\n backdropFilter: \"blur(6px)\",\r\n }}\r\n >\r\n <svg\r\n className=\"h-4 w-4 sm:h-5 sm:w-5\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n viewBox=\"0 0 24 24\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2.5}\r\n d=\"M15 19l-7-7 7-7\"\r\n />\r\n </svg>\r\n </Button>\r\n <Button\r\n onClick={next}\r\n aria-label=\"Next slide\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"absolute right-3 sm:right-6 top-1/2 -translate-y-1/2 flex items-center justify-center rounded-full transition-all hover:scale-105\"\r\n style={{\r\n zIndex: 15,\r\n width: 40,\r\n height: 40,\r\n background: \"rgba(255,255,255,0.12)\",\r\n border: \"1px solid rgba(255,255,255,0.2)\",\r\n color: \"#ffffff\",\r\n backdropFilter: \"blur(6px)\",\r\n }}\r\n >\r\n <svg\r\n className=\"h-4 w-4 sm:h-5 sm:w-5\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n viewBox=\"0 0 24 24\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2.5}\r\n d=\"M9 5l7 7-7 7\"\r\n />\r\n </svg>\r\n </Button>\r\n </>\r\n )}\r\n\r\n {/* Dot indicator + counter */}\r\n {banners.length > 1 && (\r\n <Div\r\n className=\"absolute bottom-8 right-6 sm:right-12 flex items-center gap-3\"\r\n style={{ zIndex: 15 }}\r\n >\r\n <Span\r\n className=\"text-xs font-black tabular-nums\"\r\n style={{\r\n color: \"rgba(255,255,255,0.6)\",\r\n fontFamily: \"var(--font-bangers, Bangers, cursive)\",\r\n letterSpacing: \"0.1em\",\r\n }}\r\n >\r\n {String(current + 1).padStart(2, \"0\")} /{\" \"}\r\n {String(banners.length).padStart(2, \"0\")}\r\n </Span>\r\n <Div className=\"flex gap-1.5\">\r\n {banners.map((_, i) => (\r\n <Button\r\n key={i}\r\n onClick={() => goTo(i)}\r\n aria-label={`Go to slide ${i + 1}`}\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"transition-all\"\r\n style={{\r\n height: 3,\r\n width: i === current ? 28 : 10,\r\n borderRadius: 2,\r\n background:\r\n i === current\r\n ? \"var(--color-yellow)\"\r\n : \"rgba(255,255,255,0.35)\",\r\n }}\r\n />\r\n ))}\r\n </Div>\r\n </Div>\r\n )}\r\n\r\n {/* Scroll-down hint */}\r\n <Div\r\n className=\"absolute bottom-6 left-1/2 -translate-x-1/2 flex flex-col items-center gap-1\"\r\n style={{ zIndex: 15, opacity: 0.5 }}\r\n aria-hidden=\"true\"\r\n >\r\n <Div\r\n className=\"h-8 w-px\"\r\n style={{\r\n background:\r\n \"linear-gradient(to bottom, rgba(255,255,255,0), rgba(255,255,255,0.8))\",\r\n }}\r\n />\r\n </Div>\r\n </Div>\r\n );\r\n}\r\n","\"use client\";\n\nimport Image from \"next/image\";\nimport { useState } from \"react\";\nimport { Div, Span } from \"@mohasinac/ui\";\n\n// ─── Size presets ─────────────────────────────────────────────────────────────\n\nexport type MediaImageSize =\n | \"thumbnail\"\n | \"card\"\n | \"hero\"\n | \"banner\"\n | \"gallery\"\n | \"avatar\";\n\nconst SIZE_HINTS: Record<MediaImageSize, string> = {\n thumbnail: \"(max-width: 640px) 80px, (max-width: 1024px) 96px, 112px\",\n card: \"(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw\",\n hero: \"100vw\",\n banner: \"100vw\",\n gallery: \"(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 33vw\",\n avatar: \"(max-width: 640px) 48px, 56px\",\n};\n\nconst FALLBACK_ICONS: Record<MediaImageSize, string> = {\n thumbnail: \"📦\",\n card: \"📦\",\n hero: \"🖼️\",\n banner: \"🖼️\",\n gallery: \"📦\",\n avatar: \"👤\",\n};\n\n// ─── MediaImageProps ──────────────────────────────────────────────────────────\n\nexport interface MediaImageProps {\n /** Image URL. When undefined the fallback icon is rendered instead. */\n src: string | undefined;\n /** Descriptive alt text — required for accessibility and SEO. */\n alt: string;\n /**\n * Sizing preset — controls the `sizes` attribute passed to Next.js Image.\n * Defaults to `'card'`.\n */\n size?: MediaImageSize;\n /** Pass `true` for above-the-fold hero / banner images to skip lazy loading. */\n priority?: boolean;\n /** CSS object-fit applied to the underlying img element. Defaults to `'cover'`. */\n objectFit?: \"cover\" | \"contain\";\n /**\n * Emoji or text to show when `src` is undefined.\n * Falls back to the per-size default icon.\n */\n fallback?: string;\n /**\n * Extra Tailwind classes applied to the absolute-fill wrapper div.\n * Use for hover animations, e.g. `group-hover:scale-110 transition-transform duration-300`.\n */\n className?: string;\n}\n\nexport function MediaImage({\n src,\n alt,\n size = \"card\",\n priority = false,\n objectFit = \"cover\",\n fallback,\n className,\n}: MediaImageProps) {\n const [hasError, setHasError] = useState(false);\n const [isLoaded, setIsLoaded] = useState(false);\n const icon = fallback ?? FALLBACK_ICONS[size];\n const fitClass = objectFit === \"contain\" ? \"object-contain\" : \"object-cover\";\n\n if (!src || hasError) {\n return (\n <Div\n className={`absolute inset-0 flex items-center justify-center bg-zinc-100 dark:bg-slate-800 text-zinc-400 text-4xl${className ? ` ${className}` : \"\"}`}\n role=\"img\"\n aria-label={alt}\n >\n <Span aria-hidden=\"true\">{icon}</Span>\n </Div>\n );\n }\n\n const isSvg =\n src.toLowerCase().endsWith(\".svg\") ||\n src.includes(\"image/svg\") ||\n /[./]svg(\\?|$)/i.test(src);\n\n return (\n <Div\n className={`absolute inset-0 overflow-hidden${className ? ` ${className}` : \"\"}`}\n >\n {!isLoaded && (\n <Div\n className=\"absolute inset-0 bg-zinc-200 dark:bg-slate-700 animate-pulse\"\n aria-hidden=\"true\"\n />\n )}\n <Image\n src={src}\n alt={alt}\n fill\n priority={priority}\n className={fitClass}\n sizes={SIZE_HINTS[size]}\n onLoad={() => setIsLoaded(true)}\n onError={() => setHasError(true)}\n unoptimized={isSvg}\n />\n </Div>\n );\n}\n\nexport default MediaImage;\n","\"use client\";\n\nimport { useRef, useEffect } from \"react\";\nimport { Div, Span } from \"@mohasinac/ui\";\n\nexport interface MediaVideoProps {\n /** Video URL. When undefined the fallback placeholder is rendered. */\n src: string | undefined;\n /** Poster / thumbnail URL shown before the video plays. */\n thumbnailUrl?: string;\n /** Accessible label for the video element. */\n alt?: string;\n /** Show native video controls (play, pause, volume, …). Defaults to `true`. */\n controls?: boolean;\n /** Autoplay with muted audio — allowed by browsers without user gesture. Defaults to `false`. */\n autoPlayMuted?: boolean;\n /** Whether the video should loop. Defaults to `false`. */\n loop?: boolean;\n /** Trim: seek to this time (in seconds) when the video loads. */\n trimStart?: number;\n /** Trim: pause the video when this time (in seconds) is reached. */\n trimEnd?: number;\n /** CSS `object-fit` applied to the <video> element. Defaults to `'cover'`. */\n objectFit?: \"cover\" | \"contain\";\n}\n\nexport function MediaVideo({\n src,\n thumbnailUrl,\n alt = \"Video\",\n controls = true,\n autoPlayMuted = false,\n loop = false,\n trimStart,\n trimEnd,\n objectFit = \"cover\",\n}: MediaVideoProps) {\n const videoRef = useRef<HTMLVideoElement>(null);\n const fitClass = objectFit === \"contain\" ? \"object-contain\" : \"object-cover\";\n\n // Apply trimStart on load\n useEffect(() => {\n const el = videoRef.current;\n if (!el || trimStart === undefined) return;\n const onLoaded = () => {\n el.currentTime = trimStart;\n };\n el.addEventListener(\"loadedmetadata\", onLoaded);\n return () => el.removeEventListener(\"loadedmetadata\", onLoaded);\n }, [trimStart]);\n\n // Enforce trimEnd\n useEffect(() => {\n const el = videoRef.current;\n if (!el || trimEnd === undefined) return;\n const onTimeUpdate = () => {\n if (el.currentTime >= trimEnd) {\n el.pause();\n el.currentTime = trimStart ?? 0;\n }\n };\n el.addEventListener(\"timeupdate\", onTimeUpdate);\n return () => el.removeEventListener(\"timeupdate\", onTimeUpdate);\n }, [trimEnd, trimStart]);\n\n if (!src) {\n return (\n <Div\n className=\"absolute inset-0 flex items-center justify-center bg-zinc-100 dark:bg-slate-800 text-zinc-400 text-4xl\"\n role=\"img\"\n aria-label={alt}\n >\n <Span aria-hidden=\"true\">🎬</Span>\n </Div>\n );\n }\n\n return (\n <video\n ref={videoRef}\n src={src}\n poster={thumbnailUrl}\n controls={controls}\n autoPlay={autoPlayMuted}\n muted={autoPlayMuted}\n loop={loop}\n playsInline\n aria-label={alt}\n className={`absolute inset-0 w-full h-full ${fitClass}`}\n />\n );\n}\n\nexport default MediaVideo;\n","import { z } from \"zod\";\r\n\r\nexport type MediaFieldType = \"image\" | \"video\" | \"file\";\r\n\r\nexport type MediaFieldInput = MediaField | string | null | undefined;\r\n\r\nexport interface MediaField {\r\n url: string;\r\n type: MediaFieldType;\r\n alt?: string;\r\n thumbnailUrl?: string;\r\n}\r\n\r\nexport const mediaFieldSchema = z.object({\r\n url: z.string().url(),\r\n type: z.enum([\"image\", \"video\", \"file\"]),\r\n alt: z.string().optional(),\r\n thumbnailUrl: z.string().url().optional(),\r\n});\r\n\r\nexport function coerceMediaField(\r\n value: MediaFieldInput,\r\n fallbackType: MediaFieldType = \"image\",\r\n): MediaField | null {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n if (typeof value === \"string\") {\r\n return {\r\n url: value,\r\n type: fallbackType,\r\n };\r\n }\r\n\r\n return value;\r\n}\r\n\r\nexport function coerceMediaFieldArray(\r\n values: Array<MediaField | string> | null | undefined,\r\n fallbackType: MediaFieldType = \"image\",\r\n): MediaField[] {\r\n if (!values || values.length === 0) {\r\n return [];\r\n }\r\n\r\n return values\r\n .map((value) => coerceMediaField(value, fallbackType))\r\n .filter((value): value is MediaField => value !== null);\r\n}\r\n\r\nexport function getMediaUrl(value: MediaFieldInput): string | undefined {\r\n return coerceMediaField(value)?.url;\r\n}\r\n\r\nexport function inferMediaTypeFromMime(\r\n mimeType?: string,\r\n url?: string,\r\n): MediaFieldType {\r\n if (mimeType?.startsWith(\"image/\")) return \"image\";\r\n if (mimeType?.startsWith(\"video/\")) return \"video\";\r\n\r\n if (url) {\r\n if (/\\.(jpe?g|png|gif|webp|svg)(\\?|$)/i.test(url)) return \"image\";\r\n if (/\\.(mp4|webm|ogg|mov|avi)(\\?|$)/i.test(url)) return \"video\";\r\n }\r\n\r\n return \"file\";\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useState, useEffect, useRef, useCallback } from \"react\";\r\nimport { useTranslations } from \"next-intl\";\r\nimport { useMediaQuery } from \"@mohasinac/react\";\r\nimport { THEME_CONSTANTS } from \"@mohasinac/tokens\";\r\nimport { Button, Div, Heading, Row, Section, Span, Text } from \"@mohasinac/ui\";\r\nimport { MediaImage, MediaVideo } from \"@mohasinac/feat-media\";\r\nimport { useHeroCarousel } from \"../hooks/useHeroCarousel.js\";\r\nimport type { CarouselSlide, CarouselSlideCard } from \"../types/index.js\";\r\n\r\nconst { flex, position, homepage } = THEME_CONSTANTS;\r\n\r\nexport interface HeroCarouselProps {\r\n initialSlides?: CarouselSlide[];\r\n /**\r\n * Navigate to an internal path.\r\n * Pass `useRouter().push` from your locale-aware router (e.g. `@/i18n/navigation`).\r\n * Falls back to `window.location.href` assignment when omitted.\r\n */\r\n push?: (href: string) => void;\r\n}\r\n\r\nfunction navigate(href: string, push?: (href: string) => void) {\r\n if (push) {\r\n push(href);\r\n } else {\r\n window.location.href = href;\r\n }\r\n}\r\n\r\nexport function HeroCarousel({ initialSlides, push }: HeroCarouselProps = {}) {\r\n const tLoading = useTranslations(\"loading\");\r\n const tA11y = useTranslations(\"accessibility\");\r\n const [currentSlide, setCurrentSlide] = useState(0);\r\n const [isPaused, setIsPaused] = useState(false);\r\n const sectionRef = useRef<HTMLElement>(null);\r\n const slidesRef = useRef<HTMLDivElement>(null);\r\n const isScrollingRef = useRef(false);\r\n const isMobile = useMediaQuery(\"(max-width: 767px)\");\r\n const prefersReducedMotion = useMediaQuery(\r\n \"(prefers-reduced-motion: reduce)\",\r\n );\r\n\r\n const { data, isLoading } = useHeroCarousel({ initialData: initialSlides });\r\n\r\n const slides =\r\n data\r\n ?.filter((s) => s.active)\r\n ?.sort((a, b) => a.order - b.order)\r\n ?.slice(0, 5) || [];\r\n\r\n const goToSlide = useCallback((index: number) => {\r\n const el = slidesRef.current;\r\n if (!el) return;\r\n setCurrentSlide(index);\r\n isScrollingRef.current = true;\r\n el.scrollTo({ left: index * el.offsetWidth, behavior: \"smooth\" });\r\n setTimeout(() => {\r\n isScrollingRef.current = false;\r\n }, 600);\r\n }, []);\r\n\r\n const goNext = useCallback(\r\n () => goToSlide((currentSlide + 1) % slides.length),\r\n [currentSlide, slides.length, goToSlide],\r\n );\r\n\r\n const goPrev = useCallback(\r\n () => goToSlide((currentSlide - 1 + slides.length) % slides.length),\r\n [currentSlide, slides.length, goToSlide],\r\n );\r\n\r\n const handleSlidesScroll = useCallback(() => {\r\n if (isScrollingRef.current) return;\r\n const el = slidesRef.current;\r\n if (!el || el.offsetWidth === 0) return;\r\n const idx = Math.round(el.scrollLeft / el.offsetWidth);\r\n if (idx >= 0 && idx < slides.length) setCurrentSlide(idx);\r\n }, [slides.length]);\r\n\r\n useEffect(() => {\r\n if (slides.length <= 1 || isPaused || prefersReducedMotion) return;\r\n const interval = setInterval(goNext, 4000);\r\n return () => clearInterval(interval);\r\n }, [slides.length, isPaused, prefersReducedMotion, goNext]);\r\n\r\n if (isLoading) {\r\n return (\r\n <Div\r\n className={`relative w-full ${homepage.heroMinH} ${THEME_CONSTANTS.themed.bgTertiary} animate-pulse`}\r\n >\r\n <Div className={`${position.fill} ${flex.center}`}>\r\n <Text variant=\"secondary\">{tLoading(\"default\")}</Text>\r\n </Div>\r\n </Div>\r\n );\r\n }\r\n\r\n if (!slides || slides.length === 0) {\r\n return null;\r\n }\r\n\r\n const getBackgroundStyle = (card: CarouselSlideCard) => {\r\n const { type, value } = card.background;\r\n if (type === \"transparent\") return { background: \"transparent\" };\r\n if (type === \"color\") return { backgroundColor: value };\r\n if (type === \"gradient\") return { background: value };\r\n return {};\r\n };\r\n\r\n const getGridPosition = (card: CarouselSlideCard) => ({\r\n gridRow: String(card.gridRow),\r\n gridColumn: isMobile ? \"1\" : String(card.gridCol),\r\n });\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent) => {\r\n if (e.key === \"ArrowRight\") goNext();\r\n if (e.key === \"ArrowLeft\") goPrev();\r\n if (e.key === \" \") {\r\n e.preventDefault();\r\n setIsPaused((p) => !p);\r\n }\r\n };\r\n\r\n return (\r\n <Section\r\n ref={sectionRef}\r\n className={`relative w-full ${homepage.heroMinH} overflow-hidden`}\r\n aria-roledescription=\"carousel\"\r\n aria-label={tA11y(\"heroCarouselAriaLabel\")}\r\n onKeyDown={handleKeyDown}\r\n onMouseEnter={() => setIsPaused(true)}\r\n onMouseLeave={() => setIsPaused(false)}\r\n onFocus={() => setIsPaused(true)}\r\n onBlur={() => setIsPaused(false)}\r\n tabIndex={0}\r\n >\r\n <Div aria-live=\"polite\" aria-atomic=\"true\" className=\"sr-only\">\r\n {tA11y(\"heroCarouselSlideOf\", {\r\n current: currentSlide + 1,\r\n total: slides.length,\r\n })}\r\n </Div>\r\n\r\n {/* Snap Scroll Rail */}\r\n <Div className={position.fill}>\r\n <Div\r\n ref={slidesRef}\r\n onScroll={handleSlidesScroll}\r\n className=\"flex h-full overflow-x-auto scroll-smooth snap-x snap-mandatory [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\"\r\n style={{ gap: 0 }}\r\n >\r\n {slides.map((slide, slideIndex) => (\r\n <Div\r\n key={slide.id}\r\n className=\"snap-start flex-none w-full relative self-stretch bg-zinc-900\"\r\n >\r\n {/* Background Media */}\r\n <Div className={position.fill}>\r\n {slide.media.type === \"image\" ? (\r\n <MediaImage\r\n src={\r\n isMobile && slide.mobileMedia\r\n ? slide.mobileMedia.url\r\n : slide.media.url\r\n }\r\n alt={slide.media.alt}\r\n size=\"hero\"\r\n priority={slideIndex === 0}\r\n />\r\n ) : (\r\n <MediaVideo\r\n src={\r\n isMobile && slide.mobileMedia\r\n ? slide.mobileMedia.url\r\n : slide.media.url\r\n }\r\n thumbnailUrl={slide.media.thumbnail}\r\n alt={slide.media.alt}\r\n autoPlayMuted\r\n loop\r\n controls={false}\r\n />\r\n )}\r\n <Div className={`${position.fill} bg-black/10`} />\r\n </Div>\r\n\r\n {/* Overlay mode — centred text + optional button */}\r\n {slide.overlay ? (\r\n <Div\r\n className={`${position.fill} ${flex.center} flex-col text-center px-6 md:px-16 lg:px-32`}\r\n >\r\n {slide.overlay.subtitle && (\r\n <Text className=\"stagger-1 text-xs md:text-sm !text-white/80 mb-1 md:mb-2 drop-shadow-sm uppercase tracking-widest\">\r\n {slide.overlay.subtitle}\r\n </Text>\r\n )}\r\n {slide.overlay.title && (\r\n <Heading\r\n level={1}\r\n className=\"stagger-2 font-display text-4xl md:text-6xl lg:text-8xl !text-white drop-shadow-2xl mb-2 md:mb-4\"\r\n >\r\n {slide.overlay.title}\r\n </Heading>\r\n )}\r\n {slide.overlay.description && (\r\n <Text className=\"stagger-3 text-sm md:text-lg lg:text-xl !text-white/90 mb-4 md:mb-8 drop-shadow-sm max-w-2xl mx-auto\">\r\n {slide.overlay.description}\r\n </Text>\r\n )}\r\n {slide.overlay.button && (\r\n <Div className=\"stagger-4\">\r\n <Button\r\n variant={slide.overlay.button.variant}\r\n size=\"sm\"\r\n onClick={() => {\r\n const btn = slide.overlay!.button!;\r\n if (btn.openInNewTab) {\r\n window.open(\r\n btn.link,\r\n \"_blank\",\r\n \"noopener,noreferrer\",\r\n );\r\n } else {\r\n navigate(btn.link, push);\r\n }\r\n }}\r\n >\r\n {slide.overlay.button.text}\r\n </Button>\r\n </Div>\r\n )}\r\n </Div>\r\n ) : (\r\n /* Grid Overlay with Cards */\r\n <Div\r\n className={`${position.fill} grid gap-2 md:gap-4 p-4 md:p-8`}\r\n style={{\r\n gridTemplateRows: \"repeat(2, 1fr)\",\r\n gridTemplateColumns: isMobile ? \"1fr\" : \"repeat(3, 1fr)\",\r\n justifyItems: isMobile ? \"center\" : undefined,\r\n alignItems: isMobile ? \"center\" : undefined,\r\n }}\r\n >\r\n {slide.cards.map((card) => (\r\n <Div\r\n key={card.id}\r\n className=\"relative rounded-lg overflow-hidden shadow-lg transition-transform hover:scale-105\"\r\n style={{\r\n ...getGridPosition(card),\r\n ...getBackgroundStyle(card),\r\n width: card.sizing?.widthPct\r\n ? `${isMobile ? Math.min(card.sizing.widthPct, 65) : card.sizing.widthPct}%`\r\n : isMobile\r\n ? \"65%\"\r\n : \"100%\",\r\n height: card.sizing?.heightPct\r\n ? `${isMobile ? Math.min(card.sizing.heightPct, 55) : card.sizing.heightPct}%`\r\n : isMobile\r\n ? \"55%\"\r\n : \"100%\",\r\n justifySelf: \"center\",\r\n alignSelf: \"center\",\r\n }}\r\n >\r\n {card.background.type === \"image\" &&\r\n card.background.value && (\r\n <MediaImage\r\n src={card.background.value}\r\n alt=\"\"\r\n size=\"card\"\r\n />\r\n )}\r\n {!card.isButtonOnly && (\r\n <Div\r\n className={`${position.fill} flex flex-col justify-end bg-gradient-to-t from-black/80 via-black/30 to-transparent ${\r\n card.sizing?.padding === \"none\"\r\n ? \"p-0\"\r\n : card.sizing?.padding === \"sm\"\r\n ? \"p-1.5 md:p-3\"\r\n : card.sizing?.padding === \"lg\"\r\n ? \"p-3 md:p-8\"\r\n : \"p-2 md:p-6\"\r\n }`}\r\n >\r\n {card.content?.subtitle && (\r\n <Text className=\"hidden md:block text-xs md:text-sm !text-white/90 mb-0.5 md:mb-2 drop-shadow-sm\">\r\n {card.content.subtitle}\r\n </Text>\r\n )}\r\n {card.content?.title && (\r\n <Heading\r\n level={2}\r\n className=\"text-[11px] md:text-2xl lg:text-3xl font-bold !text-white mb-0.5 md:mb-3 line-clamp-1 md:line-clamp-2 drop-shadow-md\"\r\n >\r\n {card.content.title}\r\n </Heading>\r\n )}\r\n {card.content?.description && (\r\n <Text className=\"text-[10px] md:text-sm lg:text-base !text-white/80 mb-1 md:mb-4 line-clamp-1 drop-shadow-sm\">\r\n {card.content.description}\r\n </Text>\r\n )}\r\n {(card.buttons?.length ?? 0) > 0 && (\r\n <Row wrap gap=\"xs\" className=\"md:gap-2\">\r\n {(card.buttons ?? []).map((btn) => (\r\n <Button\r\n key={btn.id}\r\n variant={btn.variant}\r\n size=\"sm\"\r\n onClick={() => {\r\n if (btn.openInNewTab) {\r\n window.open(\r\n btn.link,\r\n \"_blank\",\r\n \"noopener,noreferrer\",\r\n );\r\n } else {\r\n navigate(btn.link, push);\r\n }\r\n }}\r\n >\r\n {btn.text}\r\n </Button>\r\n ))}\r\n </Row>\r\n )}\r\n </Div>\r\n )}\r\n {card.isButtonOnly && card.buttons?.[0] && (\r\n <Button\r\n variant=\"ghost\"\r\n className={`${position.fill} ${flex.center} font-semibold text-white hover:bg-black/20 transition-colors rounded-none p-0`}\r\n onClick={() => {\r\n const btn = card.buttons![0]!;\r\n if (btn.openInNewTab) {\r\n window.open(\r\n btn.link,\r\n \"_blank\",\r\n \"noopener,noreferrer\",\r\n );\r\n } else {\r\n navigate(btn.link, push);\r\n }\r\n }}\r\n >\r\n <Span className=\"text-lg md:text-2xl\">\r\n {card.buttons![0]!.text}\r\n </Span>\r\n </Button>\r\n )}\r\n </Div>\r\n ))}\r\n </Div>\r\n )}\r\n </Div>\r\n ))}\r\n </Div>\r\n </Div>\r\n\r\n {/* Navigation Dots */}\r\n {slides.length > 1 && (\r\n <Div className=\"absolute bottom-4 left-1/2 -translate-x-1/2 flex gap-2 z-10\">\r\n {slides.map((_, index) => (\r\n <Button\r\n key={index}\r\n variant=\"ghost\"\r\n className={`relative overflow-hidden rounded-full transition-all duration-500 p-0 !min-h-0 ${\r\n index === currentSlide\r\n ? THEME_CONSTANTS.carousel.dotActive\r\n : `${THEME_CONSTANTS.carousel.dotInactive} hover:bg-white/75`\r\n }`}\r\n onClick={() => goToSlide(index)}\r\n aria-label={tA11y(\"heroCarouselGoToSlide\", { number: index + 1 })}\r\n >\r\n {index === currentSlide && (\r\n <Span\r\n className=\"absolute inset-y-0 left-0 bg-black/20 rounded-full animate-[progress-fill_4s_linear_forwards]\"\r\n aria-hidden=\"true\"\r\n />\r\n )}\r\n </Button>\r\n ))}\r\n </Div>\r\n )}\r\n\r\n {/* Bottom gradient bleed */}\r\n <Div\r\n className=\"absolute bottom-0 left-0 right-0 h-32 bg-gradient-to-t from-white dark:from-slate-950 to-transparent pointer-events-none z-[5]\"\r\n aria-hidden=\"true\"\r\n />\r\n\r\n {/* Navigation Arrows */}\r\n {slides.length > 1 && (\r\n <Div className=\"absolute bottom-4 right-4 z-20 flex gap-2\">\r\n <Button\r\n variant=\"ghost\"\r\n className={`p-0 ${THEME_CONSTANTS.carousel.arrow}`}\r\n onClick={goPrev}\r\n aria-label={tA11y(\"heroCarouselPrevSlide\")}\r\n >\r\n <svg\r\n className=\"w-7 h-7\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2.5}\r\n d=\"M15 19l-7-7 7-7\"\r\n />\r\n </svg>\r\n </Button>\r\n <Button\r\n variant=\"ghost\"\r\n className={`p-0 ${THEME_CONSTANTS.carousel.arrow}`}\r\n onClick={goNext}\r\n aria-label={tA11y(\"heroCarouselNextSlide\")}\r\n >\r\n <svg\r\n className=\"w-7 h-7\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2.5}\r\n d=\"M9 5l7 7-7 7\"\r\n />\r\n </svg>\r\n </Button>\r\n </Div>\r\n )}\r\n </Section>\r\n );\r\n}\r\n","import Image from \"next/image\";\r\nimport Link from \"next/link\";\r\nimport { Div, Heading, Row, Section, Span, Text } from \"@mohasinac/ui\";\r\nimport type { PromoBanner } from \"../types\";\r\n\r\nexport interface PromoGridProps {\r\n banners: PromoBanner[];\r\n /** Eyebrow label above the section heading. Default: \"LIMITED TIME\". */\r\n eyebrow?: string;\r\n /** Section heading. Default: \"HOT DEALS & PROMOS\". */\r\n heading?: string;\r\n}\r\n\r\nexport function PromoGrid({\r\n banners,\r\n eyebrow = \"LIMITED TIME\",\r\n heading = \"HOT DEALS & PROMOS\",\r\n}: PromoGridProps) {\r\n if (banners.length === 0) return null;\r\n\r\n return (\r\n <Section\r\n className=\"py-10 sm:py-16\"\r\n style={{\r\n background: \"var(--dark-section-alt)\",\r\n borderTop: \"1px solid rgba(255,255,255,0.06)\",\r\n borderBottom: \"1px solid rgba(255,255,255,0.06)\",\r\n }}\r\n >\r\n <Div className=\"mx-auto max-w-7xl px-4\">\r\n <Row\r\n wrap\r\n align=\"end\"\r\n justify=\"between\"\r\n gap=\"sm\"\r\n className=\"mb-7 gap-y-2\"\r\n >\r\n <Div>\r\n <Text\r\n className=\"mb-1 text-xs font-black uppercase tracking-widest\"\r\n style={{ color: \"var(--color-red)\", letterSpacing: \"0.18em\" }}\r\n >\r\n {eyebrow}\r\n </Text>\r\n <Heading\r\n level={2}\r\n style={{\r\n fontFamily: \"var(--font-bangers, Bangers, cursive)\",\r\n fontSize: \"clamp(1.6rem, 4vw, 2.4rem)\",\r\n letterSpacing: \"0.08em\",\r\n color: \"#FFFFFF\",\r\n lineHeight: 1,\r\n }}\r\n >\r\n {heading}\r\n </Heading>\r\n </Div>\r\n </Row>\r\n\r\n {/*\r\n Layout:\r\n - Mobile: single column stack\r\n - sm: 2 columns\r\n - lg: 3 cols, first card spans 2 rows\r\n */}\r\n <Div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3\">\r\n {banners.slice(0, 4).map((banner, i) => (\r\n <Link\r\n key={banner.id}\r\n href={banner.ctaUrl}\r\n className={`group relative block overflow-hidden ${i === 0 ? \"sm:row-span-2\" : \"\"}`}\r\n style={{\r\n minHeight:\r\n i === 0\r\n ? \"clamp(220px, 32vh, 480px)\"\r\n : \"clamp(130px, 16vh, 240px)\",\r\n background: \"var(--dark-section-card)\",\r\n }}\r\n >\r\n <Image\r\n src={banner.image}\r\n alt={banner.title}\r\n fill\r\n className=\"object-cover transition-transform duration-500 group-hover:scale-105\"\r\n sizes={\r\n i === 0\r\n ? \"(max-width: 640px) 100vw, 40vw\"\r\n : \"(max-width: 640px) 50vw, 30vw\"\r\n }\r\n />\r\n <Div\r\n className=\"absolute inset-0\"\r\n style={{\r\n background:\r\n i === 0\r\n ? \"linear-gradient(to top, rgba(0,0,0,0.9) 0%, rgba(0,0,0,0.3) 50%, transparent 100%)\"\r\n : \"linear-gradient(to top, rgba(0,0,0,0.85) 0%, rgba(0,0,0,0.15) 100%)\",\r\n }}\r\n />\r\n {/* Yellow inset border on hover */}\r\n <Div\r\n className=\"absolute inset-0 opacity-0 transition-opacity duration-300 group-hover:opacity-100\"\r\n style={{ boxShadow: \"inset 0 0 0 2px var(--color-yellow)\" }}\r\n />\r\n <Div className=\"absolute bottom-0 left-0 right-0 p-4\">\r\n <Text\r\n className=\"leading-tight\"\r\n style={{\r\n fontFamily: \"var(--font-bangers, Bangers, cursive)\",\r\n fontSize: i === 0 ? \"1.35rem\" : \"1rem\",\r\n letterSpacing: \"0.06em\",\r\n color: \"#FFFFFF\",\r\n }}\r\n >\r\n {banner.title}\r\n </Text>\r\n <Span\r\n className=\"mt-1 inline-flex items-center gap-1 text-xs font-black uppercase\"\r\n style={{ color: \"var(--color-yellow)\" }}\r\n >\r\n {banner.ctaLabel} →\r\n </Span>\r\n </Div>\r\n </Link>\r\n ))}\r\n </Div>\r\n </Div>\r\n </Section>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { Div, Section, Text } from \"@mohasinac/ui\";\r\nimport type { TrustBadge, TrustBadgeIconKey } from \"../types\";\r\n\r\nconst BADGE_ICONS: Record<TrustBadgeIconKey, React.ReactNode> = {\r\n shipping: (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth={2}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"h-7 w-7\"\r\n aria-hidden=\"true\"\r\n >\r\n <path d=\"M5 12H19\" />\r\n <path d=\"M15 7l5 5-5 5\" />\r\n <path d=\"M1 17V7a4 4 0 0 1 4-4h10\" />\r\n <path d=\"M22 17a4 4 0 0 1-4 4H5\" />\r\n </svg>\r\n ),\r\n support: (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth={2}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"h-7 w-7\"\r\n aria-hidden=\"true\"\r\n >\r\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\r\n </svg>\r\n ),\r\n rewards: (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth={2}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"h-7 w-7\"\r\n aria-hidden=\"true\"\r\n >\r\n <polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\" />\r\n </svg>\r\n ),\r\n secure: (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth={2}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"h-7 w-7\"\r\n aria-hidden=\"true\"\r\n >\r\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\r\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\r\n </svg>\r\n ),\r\n};\r\n\r\nconst FALLBACK_BADGES: TrustBadge[] = [\r\n {\r\n id: \"shipping\",\r\n title: \"Free Shipping\",\r\n sub: \"On qualifying orders\",\r\n iconKey: \"shipping\",\r\n sortOrder: 1,\r\n active: true,\r\n },\r\n {\r\n id: \"support\",\r\n title: \"Expert Support\",\r\n sub: \"Mon–Sat, 10 AM – 7 PM\",\r\n iconKey: \"support\",\r\n sortOrder: 2,\r\n active: true,\r\n },\r\n {\r\n id: \"rewards\",\r\n title: \"Loyalty Rewards\",\r\n sub: \"Earn points on every order\",\r\n iconKey: \"rewards\",\r\n sortOrder: 3,\r\n active: true,\r\n },\r\n {\r\n id: \"secure\",\r\n title: \"Secure Payments\",\r\n sub: \"UPI · Cards · EMI available\",\r\n iconKey: \"secure\",\r\n sortOrder: 4,\r\n active: true,\r\n },\r\n];\r\n\r\nexport interface TrustBadgesProps {\r\n badges?: TrustBadge[];\r\n}\r\n\r\nexport function TrustBadges({ badges }: TrustBadgesProps) {\r\n const items = badges && badges.length > 0 ? badges : FALLBACK_BADGES;\r\n\r\n return (\r\n <Section\r\n style={{\r\n background: \"var(--section-bg)\",\r\n borderTop: \"var(--section-border)\",\r\n borderBottom: \"var(--section-border)\",\r\n }}\r\n >\r\n <Div className=\"mx-auto max-w-7xl px-4 py-6 sm:py-10\">\r\n <Div className=\"grid grid-cols-2 gap-6 sm:grid-cols-4\">\r\n {items.map((badge) => (\r\n <Div\r\n key={badge.id}\r\n className=\"flex flex-col items-center gap-2 text-center sm:flex-row sm:items-center sm:text-left sm:gap-4\"\r\n >\r\n <Div\r\n className=\"flex h-12 w-12 shrink-0 items-center justify-center rounded-full\"\r\n style={{\r\n background: \"rgba(240,196,23,0.12)\",\r\n color: \"var(--color-red)\",\r\n border: \"2px solid var(--border-ink)\",\r\n }}\r\n >\r\n {BADGE_ICONS[badge.iconKey]}\r\n </Div>\r\n <Div>\r\n <Text\r\n className=\"text-sm font-black uppercase tracking-wide\"\r\n style={{ color: \"var(--section-title-color)\" }}\r\n >\r\n {badge.title}\r\n </Text>\r\n <Text\r\n className=\"text-xs font-medium\"\r\n style={{ color: \"var(--color-muted)\" }}\r\n >\r\n {badge.sub}\r\n </Text>\r\n </Div>\r\n </Div>\r\n ))}\r\n </Div>\r\n </Div>\r\n </Section>\r\n );\r\n}\r\n","import { Div, Heading, Section, StarRating, Text } from \"@mohasinac/ui\";\r\nimport type { Testimonial } from \"../types\";\r\n\r\nexport interface TestimonialsCarouselProps {\r\n testimonials: Testimonial[];\r\n /** Eyebrow label. Default: \"COLLECTOR REVIEWS\". */\r\n eyebrow?: string;\r\n /** Section heading. Default: \"WHAT OUR COLLECTORS SAY\". */\r\n heading?: string;\r\n}\r\n\r\nexport function TestimonialsCarousel({\r\n testimonials,\r\n eyebrow = \"COLLECTOR REVIEWS\",\r\n heading = \"WHAT OUR COLLECTORS SAY\",\r\n}: TestimonialsCarouselProps) {\r\n if (testimonials.length === 0) return null;\r\n\r\n return (\r\n <Section\r\n style={{\r\n background: \"var(--section-bg)\",\r\n borderTop: \"var(--section-border)\",\r\n borderBottom: \"var(--section-border)\",\r\n minHeight: \"calc(100svh - var(--header-height, 4rem))\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n paddingBlock: \"clamp(3rem, 6vh, 5rem)\",\r\n }}\r\n >\r\n <Div\r\n className=\"mx-auto w-full max-w-7xl px-6 sm:px-8 flex flex-col\"\r\n style={{ minHeight: 0 }}\r\n >\r\n {/* Heading */}\r\n <Div className=\"mb-6 text-center\" style={{ flexShrink: 0 }}>\r\n <Text\r\n className=\"mb-1 text-xs font-black uppercase tracking-widest\"\r\n style={{ color: \"var(--color-red)\", letterSpacing: \"0.18em\" }}\r\n >\r\n {eyebrow}\r\n </Text>\r\n <Heading\r\n level={2}\r\n style={{\r\n fontFamily: \"var(--font-bangers, Bangers, cursive)\",\r\n fontSize: \"clamp(1.8rem, 4vw, 2.8rem)\",\r\n letterSpacing: \"0.08em\",\r\n color: \"var(--section-title-color)\",\r\n lineHeight: 1,\r\n }}\r\n >\r\n {heading}\r\n </Heading>\r\n </Div>\r\n\r\n {/* 2-row masonry grid — wraps into 2 rows, scrolls horizontally on overflow */}\r\n <Div\r\n className=\"flex flex-col flex-wrap gap-4 overflow-x-auto scrollbar-none\"\r\n style={{ maxHeight: \"50svh\", alignContent: \"flex-start\" }}\r\n >\r\n {testimonials.map((t) => (\r\n <Div\r\n key={t.id}\r\n className=\"flex shrink-0 flex-col gap-3 p-5\"\r\n style={{\r\n width: \"clamp(260px, 28vw, 360px)\",\r\n background: \"var(--card-bg)\",\r\n border: \"var(--card-border)\",\r\n boxShadow: \"var(--card-shadow)\",\r\n }}\r\n >\r\n <StarRating value={t.rating} readOnly size=\"sm\" />\r\n <Text\r\n className=\"flex-1 text-sm leading-relaxed\"\r\n style={{ color: \"var(--text-secondary)\" }}\r\n >\r\n “{t.text}”\r\n </Text>\r\n <Text\r\n className=\"text-xs font-black uppercase\"\r\n style={{\r\n color: \"var(--color-yellow)\",\r\n letterSpacing: \"0.06em\",\r\n }}\r\n >\r\n — {t.name}\r\n </Text>\r\n </Div>\r\n ))}\r\n </Div>\r\n </Div>\r\n </Section>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { useRef, useState, useCallback, useEffect } from \"react\";\r\nimport Image from \"next/image\";\r\nimport { Div, Span, Text } from \"@mohasinac/ui\";\r\nimport type { BeforeAfterItem } from \"../types\";\r\n\r\nexport interface BeforeAfterCardProps {\r\n item: BeforeAfterItem;\r\n /** Label shown on the left (before) side. Default: \"Before\". */\r\n beforeLabel?: string;\r\n /** Label shown on the right (after) side. Default: \"After\". */\r\n afterLabel?: string;\r\n}\r\n\r\nexport function BeforeAfterCard({\r\n item,\r\n beforeLabel = \"Before\",\r\n afterLabel = \"After\",\r\n}: BeforeAfterCardProps) {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const [position, setPosition] = useState(50);\r\n const [dragging, setDragging] = useState(false);\r\n\r\n const updatePosition = useCallback((clientX: number) => {\r\n const container = containerRef.current;\r\n if (!container) return;\r\n const rect = container.getBoundingClientRect();\r\n const x = clientX - rect.left;\r\n const pct = Math.max(0, Math.min(100, (x / rect.width) * 100));\r\n setPosition(pct);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!dragging) return;\r\n\r\n const onMove = (e: MouseEvent | TouchEvent) => {\r\n e.preventDefault();\r\n const clientX =\r\n \"touches\" in e\r\n ? (e as TouchEvent).touches[0]!.clientX\r\n : (e as MouseEvent).clientX;\r\n updatePosition(clientX);\r\n };\r\n const onUp = () => setDragging(false);\r\n\r\n window.addEventListener(\"mousemove\", onMove);\r\n window.addEventListener(\"mouseup\", onUp);\r\n window.addEventListener(\"touchmove\", onMove, { passive: false });\r\n window.addEventListener(\"touchend\", onUp);\r\n return () => {\r\n window.removeEventListener(\"mousemove\", onMove);\r\n window.removeEventListener(\"mouseup\", onUp);\r\n window.removeEventListener(\"touchmove\", onMove);\r\n window.removeEventListener(\"touchend\", onUp);\r\n };\r\n }, [dragging, updatePosition]);\r\n\r\n return (\r\n <Div className=\"border-border overflow-hidden rounded-2xl border bg-card shadow-sm\">\r\n <Div\r\n ref={containerRef}\r\n className=\"relative aspect-[4/3] cursor-col-resize overflow-hidden select-none\"\r\n onMouseDown={(e) => {\r\n setDragging(true);\r\n updatePosition(e.clientX);\r\n }}\r\n onTouchStart={(e) => {\r\n setDragging(true);\r\n updatePosition(e.touches[0]!.clientX);\r\n }}\r\n role=\"slider\"\r\n aria-label={`Before and after comparison: ${item.caption}`}\r\n aria-valuemin={0}\r\n aria-valuemax={100}\r\n aria-valuenow={Math.round(position)}\r\n tabIndex={0}\r\n onKeyDown={(e) => {\r\n if (e.key === \"ArrowLeft\") setPosition((p) => Math.max(0, p - 2));\r\n if (e.key === \"ArrowRight\") setPosition((p) => Math.min(100, p + 2));\r\n }}\r\n >\r\n {/* After image — full, behind */}\r\n <Image\r\n src={item.afterImage}\r\n alt={afterLabel}\r\n fill\r\n sizes=\"(max-width: 640px) 100vw, 50vw\"\r\n className=\"object-cover\"\r\n />\r\n\r\n {/* Before image — clipped to left of divider */}\r\n <Div\r\n className=\"absolute inset-0 overflow-hidden\"\r\n style={{ width: `${position}%` }}\r\n >\r\n <Image\r\n src={item.beforeImage}\r\n alt={beforeLabel}\r\n fill\r\n sizes=\"(max-width: 640px) 100vw, 50vw\"\r\n className=\"object-cover\"\r\n />\r\n </Div>\r\n\r\n {/* Divider */}\r\n <Div\r\n className=\"absolute top-0 bottom-0 z-10 w-0.5 bg-card shadow-md\"\r\n style={{ left: `${position}%` }}\r\n >\r\n <Div className=\"absolute top-1/2 left-1/2 flex h-8 w-8 -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-full bg-card shadow-lg\">\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M4 8L1 5M4 8L1 11M4 8H12M12 8L15 5M12 8L15 11\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n </Div>\r\n </Div>\r\n\r\n {/* Labels */}\r\n <Span className=\"absolute top-3 left-3 z-10 rounded-full bg-black/50 px-2.5 py-0.5 text-xs font-medium text-white\">\r\n {beforeLabel}\r\n </Span>\r\n <Span className=\"absolute top-3 right-3 z-10 rounded-full bg-black/50 px-2.5 py-0.5 text-xs font-medium text-white\">\r\n {afterLabel}\r\n </Span>\r\n </Div>\r\n\r\n {/* Caption */}\r\n <Div className=\"p-4\">\r\n <Text className=\"text-foreground text-sm font-medium\">\r\n {item.caption}\r\n </Text>\r\n </Div>\r\n </Div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport {\r\n Button,\r\n Div,\r\n Heading,\r\n Input,\r\n Section,\r\n Span,\r\n Text,\r\n} from \"@mohasinac/ui\";\r\n\r\nexport interface NewsletterBannerProps {\r\n /**\r\n * Called when the user submits the form. Throw on failure — the component\r\n * will show a generic error message.\r\n */\r\n onSubscribe: (email: string) => Promise<void>;\r\n /** Eyebrow label. Default: \"STAY CONNECTED\". */\r\n eyebrow?: string;\r\n /** Section heading. Default: \"Join Our Newsletter\". */\r\n heading?: string;\r\n /** Sub-heading. Default: \"Get exclusive offers, new arrivals and more.\" */\r\n subheading?: string;\r\n /** Email placeholder text. Default: \"Enter your email\". */\r\n placeholder?: string;\r\n /** CTA button label. Default: \"Subscribe\". */\r\n ctaLabel?: string;\r\n /** Success message shown after subscribe. Default: \"You're in! Check your inbox.\" */\r\n successMessage?: string;\r\n /** Error message on failure. Default: \"Something went wrong. Please try again.\" */\r\n errorMessage?: string;\r\n}\r\n\r\nexport function NewsletterBanner({\r\n onSubscribe,\r\n eyebrow = \"STAY CONNECTED\",\r\n heading = \"Join Our Newsletter\",\r\n subheading = \"Get exclusive offers, new arrivals and more.\",\r\n placeholder = \"Enter your email\",\r\n ctaLabel = \"Subscribe\",\r\n successMessage = \"You're in! Check your inbox.\",\r\n errorMessage = \"Something went wrong. Please try again.\",\r\n}: NewsletterBannerProps) {\r\n const [email, setEmail] = useState(\"\");\r\n const [loading, setLoading] = useState(false);\r\n const [success, setSuccess] = useState(false);\r\n const [error, setError] = useState(false);\r\n\r\n async function handleSubmit(e: React.FormEvent) {\r\n e.preventDefault();\r\n if (!email) return;\r\n setLoading(true);\r\n setError(false);\r\n try {\r\n await onSubscribe(email);\r\n setEmail(\"\");\r\n setSuccess(true);\r\n } catch {\r\n setError(true);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n\r\n return (\r\n <Section\r\n className=\"relative overflow-hidden py-24\"\r\n style={{\r\n background:\r\n \"var(--newsletter-bg, linear-gradient(135deg, var(--color-primary, #1e40af) 0%, var(--color-secondary, #7c3aed) 100%))\",\r\n }}\r\n >\r\n {/* Decorative rings */}\r\n <Div className=\"pointer-events-none absolute -top-20 -right-20 h-60 w-60 rounded-full border border-white/[0.06]\" />\r\n <Div className=\"pointer-events-none absolute -bottom-16 -left-16 h-48 w-48 rounded-full border border-dashed border-white/[0.08]\" />\r\n\r\n <Div className=\"relative mx-auto max-w-2xl px-4 text-center sm:px-6\">\r\n <Span className=\"mb-4 inline-flex rounded-full border border-white/20 px-3 py-1 text-xs font-semibold uppercase tracking-widest text-white/70\">\r\n {eyebrow}\r\n </Span>\r\n <Heading\r\n level={2}\r\n className=\"text-3xl font-bold text-white sm:text-4xl\"\r\n >\r\n {heading}\r\n </Heading>\r\n <Text className=\"mt-4 text-white/60\">{subheading}</Text>\r\n\r\n {success ? (\r\n <Text className=\"mt-8 rounded-xl border border-white/20 bg-white/10 px-6 py-4 text-sm font-semibold text-white\">\r\n {successMessage}\r\n </Text>\r\n ) : (\r\n <form onSubmit={handleSubmit} className=\"mt-8 flex gap-3\">\r\n <Input\r\n type=\"email\"\r\n value={email}\r\n onChange={(e) => setEmail(e.target.value)}\r\n placeholder={placeholder}\r\n required\r\n className=\"flex-1 rounded-xl border border-white/20 bg-white/10 px-4 py-3 text-sm text-white placeholder:text-white/40 outline-none focus:border-white/40\"\r\n />\r\n <Button\r\n type=\"submit\"\r\n disabled={loading}\r\n variant=\"primary\"\r\n className=\"shrink-0 rounded-xl px-5 py-3 text-sm font-bold transition-opacity disabled:opacity-60\"\r\n style={{\r\n background: \"var(--color-yellow, #FFE500)\",\r\n color: \"#0D0D0D\",\r\n }}\r\n >\r\n {loading ? \"…\" : ctaLabel}\r\n </Button>\r\n </form>\r\n )}\r\n\r\n {error && (\r\n <Text className=\"mt-3 text-sm text-red-300\">{errorMessage}</Text>\r\n )}\r\n\r\n <Text className=\"mt-4 text-xs text-white/40\">\r\n No spam, ever. Unsubscribe anytime.\r\n </Text>\r\n </Div>\r\n </Section>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Div } from \"@mohasinac/ui\";\r\n\r\nexport interface HomepageViewProps {\r\n renderHero?: () => React.ReactNode;\r\n renderWelcome?: () => React.ReactNode;\r\n renderTrustFeatures?: () => React.ReactNode;\r\n renderStats?: () => React.ReactNode;\r\n renderTopCategories?: () => React.ReactNode;\r\n renderTopBrands?: () => React.ReactNode;\r\n renderFeaturedProducts?: () => React.ReactNode;\r\n renderFeaturedAuctions?: () => React.ReactNode;\r\n renderFeaturedPreOrders?: () => React.ReactNode;\r\n renderFeaturedStores?: () => React.ReactNode;\r\n renderFeaturedEvents?: () => React.ReactNode;\r\n renderAdvertisement?: () => React.ReactNode;\r\n renderCustomerReviews?: () => React.ReactNode;\r\n renderCommunity?: () => React.ReactNode;\r\n renderFaq?: () => React.ReactNode;\r\n renderBlogArticles?: () => React.ReactNode;\r\n renderHowItWorks?: () => React.ReactNode;\r\n renderSecurity?: () => React.ReactNode;\r\n renderNewsletter?: () => React.ReactNode;\r\n renderFeaturedResults?: () => React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function HomepageView({\r\n renderHero,\r\n renderWelcome,\r\n renderTrustFeatures,\r\n renderStats,\r\n renderTopCategories,\r\n renderTopBrands,\r\n renderFeaturedProducts,\r\n renderFeaturedAuctions,\r\n renderFeaturedPreOrders,\r\n renderFeaturedStores,\r\n renderFeaturedEvents,\r\n renderAdvertisement,\r\n renderCustomerReviews,\r\n renderCommunity,\r\n renderFaq,\r\n renderBlogArticles,\r\n renderHowItWorks,\r\n renderSecurity,\r\n renderNewsletter,\r\n renderFeaturedResults,\r\n className = \"\",\r\n}: HomepageViewProps) {\r\n return (\r\n <Div className={className}>\r\n {renderHero?.()}\r\n {renderWelcome?.()}\r\n {renderTrustFeatures?.()}\r\n {renderStats?.()}\r\n {renderTopCategories?.()}\r\n {renderTopBrands?.()}\r\n {renderFeaturedProducts?.()}\r\n {renderFeaturedAuctions?.()}\r\n {renderFeaturedPreOrders?.()}\r\n {renderFeaturedStores?.()}\r\n {renderFeaturedEvents?.()}\r\n {renderAdvertisement?.()}\r\n {renderCustomerReviews?.()}\r\n {renderCommunity?.()}\r\n {renderFaq?.()}\r\n {renderBlogArticles?.()}\r\n {renderHowItWorks?.()}\r\n {renderSecurity?.()}\r\n {renderNewsletter?.()}\r\n {renderFeaturedResults?.()}\r\n </Div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { THEME_CONSTANTS } from \"@mohasinac/tokens\";\r\nimport {\r\n Button,\r\n Heading,\r\n HorizontalScroller,\r\n Section,\r\n Span,\r\n Text,\r\n TextLink,\r\n type PerViewConfig,\r\n} from \"@mohasinac/ui\";\r\nimport { MediaImage } from \"@mohasinac/feat-media\";\r\n\r\n// ─── Props ───────────────────────────────────────────────────────────────────\r\n\r\nexport interface SectionCarouselProps<T = unknown> {\r\n /** Section heading */\r\n title: string;\r\n\r\n /** Optional subtitle below the heading */\r\n description?: string;\r\n\r\n /**\r\n * Heading visual variant.\r\n * - `\"default\"` — standard themed text\r\n * - `\"gradient\"` — primary→cobalt gradient clip text\r\n * - `\"editorial\"` — pill + font-display H2 + ornament\r\n */\r\n headingVariant?: \"default\" | \"gradient\" | \"editorial\";\r\n\r\n /**\r\n * Pill label shown above the heading when `headingVariant=\"editorial\"`.\r\n * Required for editorial variant; ignored otherwise.\r\n */\r\n pillLabel?: string;\r\n\r\n /**\r\n * URL of an image to use as the section background.\r\n * A dark semi-transparent overlay is applied so text remains readable.\r\n */\r\n backgroundImage?: string;\r\n\r\n /** Route for the \"View More\" button. Omit to hide the button. */\r\n viewMoreHref?: string;\r\n\r\n /**\r\n * Label for the \"View More\" button.\r\n * Defaults to \"View all →\" when omitted.\r\n */\r\n viewMoreLabel?: string;\r\n\r\n /** Items to render in the carousel. */\r\n items: T[];\r\n\r\n /** Renders a single item. Receives (item, index). */\r\n renderItem: (item: T, index: number) => React.ReactNode;\r\n\r\n /** Responsive items-per-view breakpoint config. Default: { base: 1, sm: 2, md: 3 } */\r\n perView?: PerViewConfig;\r\n\r\n /** Gap between cards in px. Default: 16 */\r\n gap?: number;\r\n\r\n /** Enable circular auto-scroll. Default: false */\r\n autoScroll?: boolean;\r\n\r\n /** Interval between auto-scroll steps in ms. Default: 3500 */\r\n autoScrollInterval?: number;\r\n\r\n /** Key extractor for the HorizontalScroller. */\r\n keyExtractor?: (item: T, index: number) => string;\r\n\r\n /**\r\n * Number of rows (for 2-row grid mode).\r\n * Auto-scroll is disabled in grid mode.\r\n * Default: 1\r\n */\r\n rows?: number;\r\n\r\n /** Additional classes on the outer `<Section>`. */\r\n className?: string;\r\n\r\n /** Show a loading skeleton instead of items. */\r\n isLoading?: boolean;\r\n\r\n /** Number of skeleton cards to show. Default: 4 */\r\n skeletonCount?: number;\r\n\r\n /**\r\n * Whether the heading and description text should be light-coloured.\r\n * Defaults to `true` when `backgroundImage` is provided, `false` otherwise.\r\n */\r\n lightText?: boolean;\r\n\r\n /**\r\n * When `true`, adds a negative right margin to the scroller wrapper so the\r\n * last visible item peeks at the edge.\r\n * Default: false\r\n */\r\n showPeek?: boolean;\r\n\r\n /**\r\n * Minimum item width in px.\r\n * Default: 220\r\n */\r\n minItemWidth?: number;\r\n}\r\n\r\n// ─── Skeleton ────────────────────────────────────────────────────────────────\r\n\r\nfunction CarouselSkeleton({ count }: { count: number }) {\r\n const { skeleton } = THEME_CONSTANTS;\r\n return (\r\n <div className=\"flex gap-4 overflow-hidden px-4\">\r\n {Array.from({ length: count }).map((_, i) => (\r\n <div\r\n key={i}\r\n className=\"flex-none min-w-[clamp(150px,18vw,260px)] max-w-[clamp(240px,36vw,380px)] h-[clamp(180px,26vh,260px)] space-y-2\"\r\n >\r\n <div className={`aspect-square rounded-xl ${skeleton.image}`} />\r\n <div className={`${skeleton.text} w-3/4`} />\r\n <div className={`${skeleton.text} w-1/2`} />\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\n// ─── Component ───────────────────────────────────────────────────────────────\r\n\r\nexport function SectionCarousel<T = unknown>({\r\n title,\r\n description,\r\n headingVariant = \"default\",\r\n pillLabel,\r\n backgroundImage,\r\n viewMoreHref,\r\n viewMoreLabel = \"View all →\",\r\n items,\r\n renderItem,\r\n perView = { base: 1, sm: 2, md: 3 },\r\n gap = 16,\r\n autoScroll = false,\r\n autoScrollInterval = 3500,\r\n keyExtractor,\r\n rows = 1,\r\n className = \"\",\r\n isLoading = false,\r\n skeletonCount = 4,\r\n lightText,\r\n showPeek = false,\r\n minItemWidth = 220,\r\n}: SectionCarouselProps<T>) {\r\n const hasBg = Boolean(backgroundImage);\r\n const useLightText = lightText ?? hasBg;\r\n\r\n const { themed, flex } = THEME_CONSTANTS;\r\n\r\n const headingClass = useLightText\r\n ? \"text-white\"\r\n : headingVariant === \"gradient\"\r\n ? \"bg-gradient-to-r from-primary to-cobalt bg-clip-text text-transparent\"\r\n : themed.textPrimary;\r\n\r\n const descVariant = useLightText ? \"text-white/80\" : themed.textSecondary;\r\n\r\n const pillClass =\r\n \"inline-flex items-center gap-2 rounded-full border border-primary-500/30 bg-primary-500/10 px-5 py-1.5 text-xs font-medium tracking-[0.2em] uppercase text-primary-700 dark:text-primary-400 backdrop-blur-sm\";\r\n\r\n return (\r\n <Section\r\n className={[\r\n \"relative overflow-hidden w-full\",\r\n hasBg ? \"\" : themed.bgSecondary,\r\n \"p-8\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n >\r\n {/* Background image + overlay */}\r\n {hasBg && backgroundImage && (\r\n <>\r\n <div className=\"absolute inset-0 overflow-hidden\">\r\n <MediaImage src={backgroundImage} alt=\"\" size=\"hero\" />\r\n </div>\r\n <div className=\"absolute inset-0 bg-black/55\" />\r\n </>\r\n )}\r\n\r\n {/* Content — sits above the background */}\r\n <div className=\"relative z-10 w-full max-w-7xl mx-auto\">\r\n {/* Header */}\r\n <div className=\"text-center mb-6\">\r\n {/* Editorial pill */}\r\n {headingVariant === \"editorial\" && pillLabel && (\r\n <div className=\"mb-4\">\r\n <Span className={pillClass}>\r\n <Span\r\n className=\"w-1.5 h-1.5 rounded-full bg-primary-500 inline-block\"\r\n aria-hidden=\"true\"\r\n />\r\n {pillLabel}\r\n <Span\r\n className=\"w-1.5 h-1.5 rounded-full bg-primary-500 inline-block\"\r\n aria-hidden=\"true\"\r\n />\r\n </Span>\r\n </div>\r\n )}\r\n\r\n {/* Heading */}\r\n <Heading\r\n level={2}\r\n variant=\"none\"\r\n className={[\r\n \"text-3xl md:text-4xl font-bold mb-2\",\r\n headingVariant === \"editorial\" ? \"font-display text-4xl\" : \"\",\r\n headingClass,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n >\r\n {title}\r\n </Heading>\r\n\r\n {/* Editorial ornament */}\r\n {headingVariant === \"editorial\" && (\r\n <div\r\n className={`${flex.center} gap-2 mt-1 text-zinc-400 dark:text-zinc-500 text-xs select-none`}\r\n aria-hidden=\"true\"\r\n >\r\n <Span className=\"h-px w-6 bg-current\" />\r\n <Span className=\"text-xs\">✶</Span>\r\n <Span className=\"h-px w-6 bg-current\" />\r\n </div>\r\n )}\r\n\r\n {description && (\r\n <Text className={`text-base ${descVariant} mt-2`}>\r\n {description}\r\n </Text>\r\n )}\r\n </div>\r\n\r\n {/* Carousel or skeleton */}\r\n {isLoading ? (\r\n <CarouselSkeleton count={skeletonCount} />\r\n ) : (\r\n <HorizontalScroller\r\n items={items}\r\n renderItem={renderItem}\r\n perView={perView}\r\n gap={gap}\r\n autoScroll={autoScroll}\r\n autoScrollInterval={autoScrollInterval}\r\n keyExtractor={keyExtractor}\r\n rows={rows}\r\n minItemWidth={minItemWidth}\r\n />\r\n )}\r\n\r\n {/* View More button */}\r\n {viewMoreHref && !isLoading && (\r\n <div className=\"mt-6 text-center\">\r\n <TextLink\r\n href={viewMoreHref}\r\n className={`inline-flex items-center gap-2 px-6 py-2.5 rounded-full text-sm font-medium transition-colors ${\r\n useLightText\r\n ? \"bg-white/20 text-white hover:bg-white/30 backdrop-blur-sm\"\r\n : \"bg-primary/10 text-primary hover:bg-primary/20 dark:bg-primary/15 dark:text-primary-400\"\r\n }`}\r\n >\r\n {viewMoreLabel}\r\n </TextLink>\r\n </div>\r\n )}\r\n </div>\r\n </Section>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { THEME_CONSTANTS } from \"@mohasinac/tokens\";\r\nimport { Button, Grid, Heading, Row, Section, Span, Text } from \"@mohasinac/ui\";\r\n\r\n// ─── Props ───────────────────────────────────────────────────────────────────\r\n\r\nexport interface WelcomeSectionChip {\r\n key: string;\r\n emoji: string;\r\n label: string;\r\n}\r\n\r\nexport interface WelcomeSectionProps {\r\n title: string;\r\n subtitle?: string;\r\n pillLabel?: string;\r\n showCTA?: boolean;\r\n ctaLabel?: string;\r\n onCtaClick?: () => void;\r\n secondaryCtaLabel?: string;\r\n onSecondaryCtaClick?: () => void;\r\n trustChips?: WelcomeSectionChip[];\r\n isLoading?: boolean;\r\n brandLogoText?: string;\r\n className?: string;\r\n}\r\n\r\n// ─── Component ───────────────────────────────────────────────────────────────\r\n\r\nexport function WelcomeSection({\r\n title,\r\n subtitle,\r\n pillLabel,\r\n showCTA = true,\r\n ctaLabel = \"Shop now\",\r\n onCtaClick,\r\n secondaryCtaLabel = \"Browse products\",\r\n onSecondaryCtaClick,\r\n trustChips = [],\r\n isLoading = false,\r\n brandLogoText = \"\",\r\n className = \"\",\r\n}: WelcomeSectionProps) {\r\n const { themed, flex } = THEME_CONSTANTS;\r\n\r\n if (isLoading) {\r\n return (\r\n <Section\r\n className={`relative overflow-hidden py-16 md:py-24 px-4 ${className}`}\r\n >\r\n <div className=\"animate-pulse max-w-4xl mx-auto text-center\">\r\n <div className=\"h-6 bg-zinc-200 dark:bg-slate-700 rounded-full w-52 mx-auto mb-6\" />\r\n <div className=\"h-20 bg-zinc-200 dark:bg-slate-700 rounded-lg mb-4 max-w-2xl mx-auto\" />\r\n <div className=\"h-6 bg-zinc-200 dark:bg-slate-700 rounded-lg mb-8 max-w-lg mx-auto\" />\r\n <div className=\"flex justify-center gap-4\">\r\n <div className=\"h-12 bg-zinc-200 dark:bg-slate-700 rounded-xl w-36\" />\r\n <div className=\"h-12 bg-zinc-200 dark:bg-slate-700 rounded-xl w-36\" />\r\n </div>\r\n </div>\r\n </Section>\r\n );\r\n }\r\n\r\n return (\r\n <Section\r\n className={`relative overflow-hidden py-16 md:py-24 px-4 ${className}`}\r\n >\r\n {/* Decorative rings */}\r\n <div\r\n className=\"pointer-events-none absolute -top-24 -left-24 w-96 h-96 rounded-full border border-dashed border-primary/10 animate-spin [animation-duration:60s]\"\r\n aria-hidden=\"true\"\r\n />\r\n <div\r\n className=\"pointer-events-none absolute -bottom-32 -right-32 w-[32rem] h-[32rem] rounded-full border border-dashed border-cobalt/10 animate-spin [animation-duration:80s] [animation-direction:reverse]\"\r\n aria-hidden=\"true\"\r\n />\r\n\r\n <div className=\"relative z-10 max-w-7xl mx-auto\">\r\n <Grid\r\n gap=\"2xl\"\r\n className=\"grid-cols-1 lg:grid-cols-2 xl:grid-cols-2 2xl:grid-cols-2 items-center\"\r\n >\r\n {/* Left: text content */}\r\n <div className=\"text-center lg:text-left\">\r\n {/* Pill badge */}\r\n {pillLabel && (\r\n <div>\r\n <Span className=\"inline-flex items-center gap-2 rounded-full border border-primary-500/30 bg-primary-500/10 px-5 py-1.5 text-xs font-medium tracking-[0.2em] uppercase text-primary-700 dark:text-primary-400 backdrop-blur-sm\">\r\n <Span\r\n className=\"w-1.5 h-1.5 rounded-full bg-primary-500 inline-block\"\r\n aria-hidden=\"true\"\r\n />\r\n {pillLabel}\r\n <Span\r\n className=\"w-1.5 h-1.5 rounded-full bg-primary-500 inline-block\"\r\n aria-hidden=\"true\"\r\n />\r\n </Span>\r\n </div>\r\n )}\r\n\r\n {/* H1 */}\r\n <Heading\r\n level={1}\r\n variant=\"none\"\r\n className=\"mt-4 font-display text-5xl md:text-7xl lg:text-8xl bg-gradient-to-r from-primary via-cobalt to-secondary dark:from-secondary dark:via-cobalt dark:to-primary bg-clip-text text-transparent leading-tight\"\r\n >\r\n {title}\r\n </Heading>\r\n\r\n {/* Subtitle */}\r\n {subtitle && (\r\n <Text\r\n className={`mt-4 text-xl ${themed.textSecondary} max-w-xl leading-relaxed mx-auto lg:mx-0`}\r\n >\r\n {subtitle}\r\n </Text>\r\n )}\r\n\r\n {/* CTAs */}\r\n {showCTA && (\r\n <Row\r\n wrap\r\n gap=\"md\"\r\n className=\"mt-8 justify-center lg:justify-start\"\r\n >\r\n <Button variant=\"primary\" size=\"lg\" onClick={onCtaClick}>\r\n {ctaLabel}\r\n </Button>\r\n <Button\r\n variant=\"outline\"\r\n size=\"lg\"\r\n onClick={onSecondaryCtaClick}\r\n >\r\n {secondaryCtaLabel}\r\n </Button>\r\n </Row>\r\n )}\r\n\r\n {/* Trust chips */}\r\n {trustChips.length > 0 && (\r\n <Row\r\n wrap\r\n gap=\"sm\"\r\n className=\"mt-6 justify-center lg:justify-start\"\r\n >\r\n {trustChips.map((chip) => (\r\n <Span\r\n key={chip.key}\r\n className=\"bg-zinc-100 dark:bg-slate-800 rounded-full px-3 py-1 text-xs text-zinc-600 dark:text-zinc-400\"\r\n >\r\n {chip.emoji} {chip.label}\r\n </Span>\r\n ))}\r\n </Row>\r\n )}\r\n </div>\r\n\r\n {/* Right: brand placeholder (desktop only) */}\r\n <div className=\"hidden lg:block\">\r\n <div\r\n className={`relative rounded-3xl overflow-hidden aspect-[4/3] bg-gradient-to-br from-primary/10 via-cobalt/10 to-secondary/10 border ${themed.border}`}\r\n >\r\n <div className=\"absolute inset-0 bg-gradient-to-br from-primary/5 via-transparent to-cobalt/5\" />\r\n <div className={`absolute inset-0 ${flex.center}`}>\r\n <Span className=\"font-display text-8xl text-primary/20 select-none\">\r\n {brandLogoText}\r\n </Span>\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n </div>\r\n </Section>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\nimport { THEME_CONSTANTS } from \"@mohasinac/tokens\";\r\nimport { Grid, Heading, Section, Span, Text } from \"@mohasinac/ui\";\r\n\r\n// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\nexport interface TrustFeatureItem {\r\n iconName: string;\r\n title: string;\r\n description: string;\r\n renderIcon?: (props: { className?: string }) => React.ReactNode;\r\n}\r\n\r\nexport interface TrustFeaturesSectionProps {\r\n items: TrustFeatureItem[];\r\n title?: string;\r\n variant?: \"cards\" | \"strip\";\r\n className?: string;\r\n}\r\n\r\n// ─── Single cards-variant card ───────────────────────────────────────────────\r\n\r\nfunction TrustFeatureCard({\r\n item,\r\n visible,\r\n delay,\r\n}: {\r\n item: TrustFeatureItem;\r\n visible: boolean;\r\n delay: number;\r\n}) {\r\n return (\r\n <div\r\n className={[\r\n \"flex flex-col items-center text-center p-4\",\r\n \"transition-all duration-500\",\r\n visible ? \"opacity-100 translate-y-0\" : \"opacity-0 translate-y-4\",\r\n ].join(\" \")}\r\n style={{ transitionDelay: `${delay}ms` }}\r\n >\r\n {/* Icon box */}\r\n <div className=\"from-primary-500/10 to-cobalt-500/10 flex h-14 w-14 items-center justify-center rounded-2xl bg-gradient-to-br flex-shrink-0\">\r\n {item.renderIcon ? (\r\n item.renderIcon({ className: \"w-7 h-7\" })\r\n ) : (\r\n <Span\r\n className=\"text-primary-600 dark:text-primary-400 text-2xl\"\r\n aria-hidden=\"true\"\r\n >\r\n ✓\r\n </Span>\r\n )}\r\n </div>\r\n\r\n <Heading\r\n level={3}\r\n className=\"mt-3 mb-1 text-sm font-semibold tracking-wide uppercase text-zinc-800 dark:text-zinc-100\"\r\n >\r\n {item.title}\r\n </Heading>\r\n <Text className=\"text-xs leading-relaxed text-zinc-500 dark:text-zinc-400\">\r\n {item.description}\r\n </Text>\r\n </div>\r\n );\r\n}\r\n\r\n// ─── Single strip-variant item ───────────────────────────────────────────────\r\n\r\nfunction TrustStripItem({ item }: { item: TrustFeatureItem }) {\r\n return (\r\n <div className=\"inline-flex flex-shrink-0 items-center gap-2 px-6\">\r\n {item.renderIcon ? (\r\n item.renderIcon({ className: \"w-5 h-5\" })\r\n ) : (\r\n <Span\r\n className=\"text-primary-600 dark:text-primary-400 text-lg\"\r\n aria-hidden=\"true\"\r\n >\r\n ✓\r\n </Span>\r\n )}\r\n <Text className=\"text-sm font-medium text-zinc-700 dark:text-zinc-300 whitespace-nowrap\">\r\n {item.title}\r\n </Text>\r\n </div>\r\n );\r\n}\r\n\r\n// ─── Section ─────────────────────────────────────────────────────────────────\r\n\r\nexport function TrustFeaturesSection({\r\n items,\r\n title,\r\n variant = \"cards\",\r\n className = \"\",\r\n}: TrustFeaturesSectionProps) {\r\n const { themed } = THEME_CONSTANTS;\r\n const sectionRef = useRef<HTMLElement>(null);\r\n const [visible, setVisible] = useState(false);\r\n\r\n useEffect(() => {\r\n const el = sectionRef.current;\r\n if (!el) return;\r\n const observer = new IntersectionObserver(\r\n ([entry], obs) => {\r\n if (entry.isIntersecting) {\r\n setVisible(true);\r\n obs.disconnect();\r\n }\r\n },\r\n { threshold: 0.15 },\r\n );\r\n observer.observe(el);\r\n return () => observer.disconnect();\r\n }, []);\r\n\r\n if (variant === \"strip\") {\r\n const doubled = [...items, ...items];\r\n return (\r\n <Section\r\n ref={sectionRef}\r\n className={`py-4 overflow-hidden border-y border-zinc-100 dark:border-slate-800 ${className}`}\r\n >\r\n <div className=\"flex animate-marquee\">\r\n {doubled.map((item, i) => (\r\n <TrustStripItem key={`${item.iconName}-${i}`} item={item} />\r\n ))}\r\n </div>\r\n </Section>\r\n );\r\n }\r\n\r\n return (\r\n <Section\r\n ref={sectionRef}\r\n className={`py-10 px-4 ${themed.bgSecondary} ${className}`}\r\n >\r\n <div className=\"max-w-6xl mx-auto\">\r\n {title && (\r\n <div className=\"text-center mb-8\">\r\n <Heading\r\n level={2}\r\n className={`text-3xl md:text-4xl font-bold ${themed.textPrimary}`}\r\n >\r\n {title}\r\n </Heading>\r\n </div>\r\n )}\r\n <Grid\r\n gap=\"lg\"\r\n className=\"grid-cols-2 sm:grid-cols-4 xl:grid-cols-4 2xl:grid-cols-4\"\r\n >\r\n {items.map((item, index) => (\r\n <TrustFeatureCard\r\n key={item.iconName}\r\n item={item}\r\n visible={visible}\r\n delay={index * 100}\r\n />\r\n ))}\r\n </Grid>\r\n </div>\r\n </Section>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\nimport { THEME_CONSTANTS } from \"@mohasinac/tokens\";\r\nimport { Grid, Heading, Section, Text } from \"@mohasinac/ui\";\r\n\r\n// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\nexport interface StatItem {\r\n key: string;\r\n value: string;\r\n label: string;\r\n renderIcon?: (props: { className?: string }) => React.ReactNode;\r\n}\r\n\r\nexport interface StatsCounterSectionProps {\r\n stats: StatItem[];\r\n className?: string;\r\n}\r\n\r\n// ─── Single stat item ─────────────────────────────────────────────────────────\r\n\r\nfunction StatCard({\r\n stat,\r\n visible,\r\n delay,\r\n isLast,\r\n}: {\r\n stat: StatItem;\r\n visible: boolean;\r\n delay: number;\r\n isLast: boolean;\r\n}) {\r\n return (\r\n <div\r\n className={[\r\n \"relative flex flex-col items-center text-center px-6 py-8\",\r\n \"transition-all duration-700\",\r\n visible ? \"opacity-100 translate-y-0\" : \"opacity-0 translate-y-6\",\r\n !isLast ? \"md:border-r border-cobalt-200 dark:border-white/10\" : \"\",\r\n ].join(\" \")}\r\n style={{ transitionDelay: `${delay}ms` }}\r\n >\r\n {/* Icon wrapper */}\r\n {stat.renderIcon && (\r\n <div className=\"w-14 h-14 rounded-2xl bg-cobalt-100 dark:bg-white/10 backdrop-blur flex items-center justify-center mb-4\">\r\n {stat.renderIcon({ className: \"w-7 h-7\" })}\r\n </div>\r\n )}\r\n\r\n {/* Stat value */}\r\n <Heading\r\n level={2}\r\n variant=\"none\"\r\n className=\"font-display text-4xl md:text-5xl text-zinc-900 dark:text-white mb-1\"\r\n >\r\n {stat.value}\r\n </Heading>\r\n\r\n {/* Label */}\r\n <Text\r\n variant=\"none\"\r\n className=\"text-zinc-500 dark:text-white/60 text-sm uppercase tracking-widest\"\r\n >\r\n {stat.label}\r\n </Text>\r\n </div>\r\n );\r\n}\r\n\r\n// ─── Section ─────────────────────────────────────────────────────────────────\r\n\r\nexport function StatsCounterSection({\r\n stats,\r\n className = \"\",\r\n}: StatsCounterSectionProps) {\r\n const sectionRef = useRef<HTMLElement>(null);\r\n const [visible, setVisible] = useState(false);\r\n\r\n useEffect(() => {\r\n const el = sectionRef.current;\r\n if (!el) return;\r\n const observer = new IntersectionObserver(\r\n ([entry], obs) => {\r\n if (entry.isIntersecting) {\r\n setVisible(true);\r\n obs.disconnect();\r\n }\r\n },\r\n { threshold: 0.2 },\r\n );\r\n observer.observe(el);\r\n return () => observer.disconnect();\r\n }, []);\r\n\r\n return (\r\n <Section\r\n ref={sectionRef}\r\n className={`bg-gradient-to-br from-cobalt-50 via-zinc-50 to-cobalt-50 dark:from-cobalt-900 dark:via-slate-900 dark:to-cobalt-950 py-12 px-4 ${className}`}\r\n >\r\n <div className=\"max-w-5xl mx-auto\">\r\n <Grid\r\n gap=\"none\"\r\n className=\"grid-cols-2 md:grid-cols-4 xl:grid-cols-4 2xl:grid-cols-4\"\r\n >\r\n {stats.map((stat, i) => (\r\n <StatCard\r\n key={stat.key}\r\n stat={stat}\r\n visible={visible}\r\n delay={i * 120}\r\n isLast={i === stats.length - 1}\r\n />\r\n ))}\r\n </Grid>\r\n </div>\r\n </Section>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\nimport { THEME_CONSTANTS } from \"@mohasinac/tokens\";\r\nimport { Button, Div, Grid, Heading, Section, Text } from \"@mohasinac/ui\";\r\n\r\n// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\nexport interface HowItWorksStep {\r\n number: number;\r\n title: string;\r\n desc: string;\r\n renderIcon?: (props: { className?: string }) => React.ReactNode;\r\n accentFrom?: string;\r\n iconColor?: string;\r\n iconBg?: string;\r\n badgeBg?: string;\r\n}\r\n\r\nexport interface HowItWorksSectionProps {\r\n title: string;\r\n subtitle?: string;\r\n pillLabel?: string;\r\n ctaLabel?: string;\r\n onCtaClick?: () => void;\r\n steps: HowItWorksStep[];\r\n className?: string;\r\n}\r\n\r\n// ─── Single step card ─────────────────────────────────────────────────────────\r\n\r\nfunction StepCard({\r\n step,\r\n visible,\r\n delay,\r\n}: {\r\n step: HowItWorksStep;\r\n visible: boolean;\r\n delay: number;\r\n}) {\r\n const {\r\n badgeBg = \"bg-primary\",\r\n iconColor = \"text-primary\",\r\n iconBg = \"bg-primary/5 dark:bg-primary/10\",\r\n } = step;\r\n\r\n return (\r\n <div\r\n className={[\r\n \"relative rounded-3xl p-8\",\r\n \"bg-white dark:bg-slate-900\",\r\n \"shadow-md group hover:-translate-y-2 hover:shadow-xl\",\r\n \"transition-all duration-300\",\r\n visible ? \"opacity-100 translate-y-0\" : \"opacity-0 translate-y-8\",\r\n ].join(\" \")}\r\n style={{ transitionDelay: `${delay}ms` }}\r\n >\r\n {/* Step number watermark */}\r\n <div\r\n className=\"absolute top-4 right-5 font-display text-7xl bg-gradient-to-br from-primary to-cobalt opacity-10 bg-clip-text text-transparent select-none pointer-events-none leading-none\"\r\n aria-hidden=\"true\"\r\n >\r\n {step.number}\r\n </div>\r\n\r\n {/* Visible index badge */}\r\n <div\r\n className={`relative z-10 w-10 h-10 rounded-full ${badgeBg} text-white font-bold text-sm flex items-center justify-center mb-5 shadow-md`}\r\n >\r\n {step.number}\r\n </div>\r\n\r\n {/* Icon */}\r\n {step.renderIcon && (\r\n <div\r\n className={`relative z-10 w-14 h-14 rounded-2xl ${iconBg} flex items-center justify-center mb-4 border border-white/80 dark:border-slate-700/50`}\r\n >\r\n <span className={`${iconColor}`} aria-hidden=\"true\">\r\n {step.renderIcon({ className: \"w-6 h-6\" })}\r\n </span>\r\n </div>\r\n )}\r\n\r\n {/* Text */}\r\n <Heading\r\n level={3}\r\n className={`relative z-10 text-base font-semibold ${THEME_CONSTANTS.themed.textPrimary} mb-2`}\r\n >\r\n {step.title}\r\n </Heading>\r\n <Text\r\n className={`relative z-10 text-sm ${THEME_CONSTANTS.themed.textSecondary} leading-relaxed`}\r\n >\r\n {step.desc}\r\n </Text>\r\n </div>\r\n );\r\n}\r\n\r\n// ─── Section ─────────────────────────────────────────────────────────────────\r\n\r\nexport function HowItWorksSection({\r\n title,\r\n subtitle,\r\n pillLabel,\r\n ctaLabel,\r\n onCtaClick,\r\n steps,\r\n className = \"\",\r\n}: HowItWorksSectionProps) {\r\n const { themed } = THEME_CONSTANTS;\r\n const sectionRef = useRef<HTMLElement>(null);\r\n const [visible, setVisible] = useState(false);\r\n\r\n useEffect(() => {\r\n const el = sectionRef.current;\r\n if (!el) return;\r\n const observer = new IntersectionObserver(\r\n ([entry], obs) => {\r\n if (entry.isIntersecting) {\r\n setVisible(true);\r\n obs.disconnect();\r\n }\r\n },\r\n { threshold: 0.15 },\r\n );\r\n observer.observe(el);\r\n return () => observer.disconnect();\r\n }, []);\r\n\r\n return (\r\n <Section\r\n ref={sectionRef}\r\n className={`p-8 ${themed.bgPrimary} ${className}`}\r\n >\r\n <Div className=\"max-w-6xl mx-auto\">\r\n {/* Header */}\r\n <div\r\n className={`text-center mb-12 transition-all duration-700 ${\r\n visible ? \"opacity-100 translate-y-0\" : \"opacity-0 translate-y-4\"\r\n }`}\r\n >\r\n {pillLabel && (\r\n <div className=\"inline-block mb-4 inline-flex items-center gap-2 rounded-full border border-primary-500/30 bg-primary-500/10 px-5 py-1.5 text-xs font-medium tracking-[0.2em] uppercase text-primary-700 dark:text-primary-400 backdrop-blur-sm\">\r\n {pillLabel}\r\n </div>\r\n )}\r\n\r\n <Heading\r\n level={2}\r\n className={`text-3xl md:text-4xl font-bold ${themed.textPrimary} mb-3`}\r\n >\r\n {title}\r\n </Heading>\r\n {subtitle && (\r\n <Text\r\n className={`text-base ${themed.textSecondary} max-w-xl mx-auto`}\r\n >\r\n {subtitle}\r\n </Text>\r\n )}\r\n </div>\r\n\r\n {/* Steps */}\r\n <Grid\r\n gap=\"lg\"\r\n className=\"grid-cols-1 md:grid-cols-3 xl:grid-cols-3 2xl:grid-cols-3 mb-10\"\r\n >\r\n {steps.map((step, i) => (\r\n <StepCard\r\n key={step.number}\r\n step={step}\r\n visible={visible}\r\n delay={i * 150}\r\n />\r\n ))}\r\n </Grid>\r\n\r\n {/* CTA */}\r\n {ctaLabel && onCtaClick && (\r\n <div\r\n className={`text-center transition-all duration-700 delay-500 ${\r\n visible ? \"opacity-100 translate-y-0\" : \"opacity-0 translate-y-4\"\r\n }`}\r\n >\r\n <Button variant=\"primary\" size=\"lg\" onClick={onCtaClick}>\r\n {ctaLabel}\r\n </Button>\r\n </div>\r\n )}\r\n </Div>\r\n </Section>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { THEME_CONSTANTS } from \"@mohasinac/tokens\";\r\nimport {\r\n Heading,\r\n HorizontalScroller,\r\n Section,\r\n Text,\r\n TextLink,\r\n} from \"@mohasinac/ui\";\r\n\r\n// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\nexport interface CustomerReviewsSectionProps<T = unknown> {\r\n title: string;\r\n subtitle?: string;\r\n items: T[];\r\n renderItem: (item: T) => React.ReactNode;\r\n viewMoreHref?: string;\r\n viewMoreLabel?: string;\r\n isLoading?: boolean;\r\n keyExtractor?: (item: T) => string;\r\n className?: string;\r\n}\r\n\r\n// ─── Section ─────────────────────────────────────────────────────────────────\r\n\r\nexport function CustomerReviewsSection<T = unknown>({\r\n title,\r\n subtitle,\r\n items,\r\n renderItem,\r\n viewMoreHref,\r\n viewMoreLabel = \"See all reviews\",\r\n isLoading = false,\r\n keyExtractor,\r\n className = \"\",\r\n}: CustomerReviewsSectionProps<T>) {\r\n const { themed, skeleton } = THEME_CONSTANTS;\r\n\r\n if (isLoading) {\r\n return (\r\n <Section className={`p-8 ${themed.bgPrimary} ${className}`}>\r\n <div className=\"w-full max-w-7xl mx-auto\">\r\n <div className={`h-8 ${skeleton.base} mb-8 max-w-xs mx-auto`} />\r\n <div className=\"flex gap-6 overflow-hidden\">\r\n {[...Array(3)].map((_, i) => (\r\n <div\r\n key={i}\r\n className={`${skeleton.card} h-[clamp(180px,26vh,260px)] min-w-[clamp(150px,18vw,260px)] max-w-[clamp(240px,36vw,380px)] flex-none`}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n </Section>\r\n );\r\n }\r\n\r\n if (items.length === 0) return null;\r\n\r\n return (\r\n <Section className={`py-12 ${themed.bgPrimary} ${className}`}>\r\n <div className=\"w-full max-w-7xl mx-auto px-4 md:px-8\">\r\n {/* Section Header */}\r\n <div className=\"text-center mb-10\">\r\n <Heading\r\n level={2}\r\n className={`text-3xl md:text-4xl font-bold ${themed.textPrimary} mb-3`}\r\n >\r\n {title}\r\n </Heading>\r\n {subtitle && (\r\n <Text className={`text-base ${themed.textSecondary}`}>\r\n {subtitle}\r\n </Text>\r\n )}\r\n </div>\r\n\r\n {/* Scrollable reviews */}\r\n <HorizontalScroller\r\n items={items}\r\n renderItem={(item) => renderItem(item)}\r\n perView={{ base: 1, sm: 2, md: 3, lg: 3, \"2xl\": 4 }}\r\n gap={24}\r\n autoScroll\r\n autoScrollInterval={4500}\r\n pauseOnHover\r\n snapToItems\r\n showArrows\r\n keyExtractor={keyExtractor}\r\n />\r\n\r\n {/* See all link */}\r\n {viewMoreHref && (\r\n <div className=\"text-center mt-8\">\r\n <TextLink\r\n href={viewMoreHref}\r\n className=\"text-sm font-medium text-primary hover:text-primary/80\"\r\n >\r\n {viewMoreLabel}\r\n </TextLink>\r\n </div>\r\n )}\r\n </div>\r\n </Section>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useState } from \"react\";\r\nimport { THEME_CONSTANTS } from \"@mohasinac/tokens\";\r\nimport { Button, Heading, Section, Span, Text, TextLink } from \"@mohasinac/ui\";\r\nimport { ChevronDown } from \"lucide-react\";\r\n\r\n// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\nexport interface FAQTab {\r\n value: string;\r\n label: string;\r\n icon?: string;\r\n}\r\n\r\nexport interface FAQItem {\r\n id: string;\r\n question: string;\r\n answer: string;\r\n}\r\n\r\nexport interface FAQSectionProps {\r\n title: string;\r\n subtitle?: string;\r\n tabs: FAQTab[];\r\n activeTab: string;\r\n onTabChange: (tab: string) => void;\r\n items: FAQItem[];\r\n viewMoreHref?: string;\r\n viewMoreLabel?: string;\r\n hasMore?: boolean;\r\n moreCount?: number;\r\n renderTabs?: () => React.ReactNode;\r\n className?: string;\r\n}\r\n\r\n// ─── Section ─────────────────────────────────────────────────────────────────\r\n\r\nexport function FAQSection({\r\n title,\r\n subtitle,\r\n items,\r\n viewMoreHref,\r\n viewMoreLabel = \"View all →\",\r\n hasMore = false,\r\n moreCount = 0,\r\n renderTabs,\r\n className = \"\",\r\n}: FAQSectionProps) {\r\n const { themed, spacing, flex } = THEME_CONSTANTS;\r\n const [openFaqId, setOpenFaqId] = useState<string | null>(null);\r\n\r\n const toggleFaq = (faqId: string) => {\r\n setOpenFaqId(openFaqId === faqId ? null : faqId);\r\n };\r\n\r\n return (\r\n <Section className={`p-8 ${themed.bgSecondary} ${className}`}>\r\n <div className=\"w-full max-w-7xl mx-auto\">\r\n {/* Section Header */}\r\n <div className=\"text-center mb-8\">\r\n <Heading\r\n level={2}\r\n variant=\"none\"\r\n className=\"bg-gradient-to-r from-primary to-cobalt bg-clip-text text-transparent text-3xl md:text-4xl font-bold mb-3\"\r\n >\r\n {title}\r\n </Heading>\r\n {subtitle && (\r\n <Text className={`text-base ${themed.textSecondary}`}>\r\n {subtitle}\r\n </Text>\r\n )}\r\n </div>\r\n\r\n {/* Category Tabs (rendered externally) */}\r\n {renderTabs && <div className=\"mb-8 -mx-8\">{renderTabs()}</div>}\r\n\r\n {/* FAQ Accordion */}\r\n <div className={`${spacing.stack} max-w-5xl mx-auto`}>\r\n {items.length === 0 && (\r\n <Text className={`text-center py-8 ${themed.textSecondary}`}>\r\n No FAQs found.\r\n </Text>\r\n )}\r\n {items.map((faq) => {\r\n const isOpen = openFaqId === faq.id;\r\n return (\r\n <div\r\n key={faq.id}\r\n className={`${themed.bgPrimary} rounded-2xl overflow-hidden transition-all border-l-4 ${\r\n isOpen\r\n ? \"border-primary bg-primary/5 dark:bg-primary/10\"\r\n : \"border-transparent\"\r\n }`}\r\n >\r\n {/* Question Button */}\r\n <Button\r\n variant=\"ghost\"\r\n className={`w-full text-left p-6 ${flex.between} gap-4 hover:bg-zinc-50 dark:hover:bg-slate-800 transition-colors`}\r\n onClick={() => toggleFaq(faq.id)}\r\n aria-expanded={isOpen}\r\n >\r\n <Span\r\n className={`text-base ${themed.textPrimary} font-medium flex-1`}\r\n >\r\n {faq.question}\r\n </Span>\r\n <ChevronDown\r\n className={`w-5 h-5 flex-shrink-0 ${themed.textSecondary} transition-transform duration-300 ${\r\n isOpen ? \"rotate-180\" : \"\"\r\n }`}\r\n />\r\n </Button>\r\n\r\n {/* Answer */}\r\n <div\r\n className={`overflow-hidden transition-all duration-300 ease-out ${\r\n isOpen ? \"max-h-96 opacity-100\" : \"max-h-0 opacity-0\"\r\n }`}\r\n >\r\n <div className=\"p-6 pt-0\">\r\n <Text\r\n className={`text-base ${themed.textSecondary} rounded-md ${themed.bgTertiary} p-4`}\r\n >\r\n {faq.answer}\r\n </Text>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n\r\n {/* View More link */}\r\n {viewMoreHref && (\r\n <div className=\"text-center mt-8\">\r\n <TextLink\r\n href={viewMoreHref}\r\n className=\"inline-flex items-center gap-2 px-6 py-2.5 rounded-full text-sm font-medium bg-primary/10 text-primary hover:bg-primary/20 dark:bg-primary/15 dark:text-primary-400 transition-colors\"\r\n >\r\n {viewMoreLabel}\r\n {hasMore && moreCount > 0 && (\r\n <Span className=\"bg-primary dark:bg-primary/80 text-white text-xs px-2 py-0.5 rounded-full\">\r\n +{moreCount}\r\n </Span>\r\n )}\r\n </TextLink>\r\n </div>\r\n )}\r\n </div>\r\n </Section>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Heading, Section, Text, TextLink } from \"@mohasinac/ui\";\r\nimport { Mail } from \"lucide-react\";\r\n\r\n// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\nexport interface NewsletterSectionProps {\r\n title: string;\r\n subtitle?: string;\r\n privacyLabel?: string;\r\n privacyHref?: string;\r\n renderForm: () => React.ReactNode;\r\n className?: string;\r\n}\r\n\r\n// ─── Section ─────────────────────────────────────────────────────────────────\r\n\r\nexport function NewsletterSection({\r\n title,\r\n subtitle,\r\n privacyLabel,\r\n privacyHref,\r\n renderForm,\r\n className = \"\",\r\n}: NewsletterSectionProps) {\r\n return (\r\n <Section className={`py-16 px-4 relative overflow-hidden ${className}`}>\r\n {/* Gradient background layer */}\r\n <div\r\n className=\"absolute inset-0 bg-gradient-to-br from-primary/10 via-cobalt/5 to-secondary/10 dark:from-primary/15 dark:via-cobalt/10 dark:to-secondary/15 pointer-events-none\"\r\n aria-hidden\r\n />\r\n {/* Decorative circles */}\r\n <div\r\n className=\"absolute -top-20 -right-20 w-80 h-80 rounded-full bg-primary/5 dark:bg-primary/10 pointer-events-none\"\r\n aria-hidden\r\n />\r\n <div\r\n className=\"absolute -bottom-16 -left-16 w-64 h-64 rounded-full bg-cobalt/5 dark:bg-cobalt/10 pointer-events-none\"\r\n aria-hidden\r\n />\r\n\r\n <div className=\"relative z-10 max-w-2xl mx-auto text-center\">\r\n {/* Icon badge */}\r\n <div className=\"inline-flex items-center justify-center w-14 h-14 rounded-2xl bg-primary/10 dark:bg-primary/20 border border-primary/20 mb-5 mx-auto\">\r\n <Mail className=\"w-7 h-7 text-primary\" />\r\n </div>\r\n\r\n <Heading\r\n level={2}\r\n className=\"text-2xl sm:text-3xl font-bold text-zinc-900 dark:text-white mb-3\"\r\n >\r\n {title}\r\n </Heading>\r\n {subtitle && (\r\n <Text\r\n size=\"base\"\r\n className=\"text-zinc-500 dark:text-zinc-400 mb-8 max-w-md mx-auto\"\r\n >\r\n {subtitle}\r\n </Text>\r\n )}\r\n\r\n {/* Form slot */}\r\n {renderForm()}\r\n\r\n {/* Privacy */}\r\n {privacyLabel && privacyHref && (\r\n <Text size=\"xs\" className=\"text-zinc-400 dark:text-zinc-500 mt-4\">\r\n {privacyLabel}{\" \"}\r\n <TextLink\r\n href={privacyHref}\r\n className=\"underline underline-offset-2 hover:text-primary\"\r\n >\r\n Privacy Policy\r\n </TextLink>\r\n .\r\n </Text>\r\n )}\r\n </div>\r\n </Section>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Button, Heading, Section, Span, Text } from \"@mohasinac/ui\";\r\nimport { MediaImage } from \"@mohasinac/feat-media\";\r\nimport { ArrowRight, Sparkles } from \"lucide-react\";\r\n\r\n// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\nexport interface AdvertisementBannerProps {\r\n title: string;\r\n subtitle?: string;\r\n ctaLabel?: string;\r\n onCtaClick?: () => void;\r\n backgroundImage?: string;\r\n backgroundColor?: string;\r\n tagLabel?: string;\r\n isLoading?: boolean;\r\n compact?: boolean;\r\n className?: string;\r\n}\r\n\r\n// ─── Component ───────────────────────────────────────────────────────────────\r\n\r\nexport function AdvertisementBanner({\r\n title,\r\n subtitle,\r\n ctaLabel = \"Shop now\",\r\n onCtaClick,\r\n backgroundImage,\r\n backgroundColor,\r\n tagLabel,\r\n isLoading = false,\r\n compact = false,\r\n className = \"\",\r\n}: AdvertisementBannerProps) {\r\n const wrapClass =\r\n \"bg-gradient-to-br from-amber-50/40 to-orange-50/20 dark:from-amber-950/10 dark:to-orange-950/5\";\r\n\r\n if (isLoading) {\r\n return (\r\n <Section className={`p-8 ${wrapClass} ${className}`}>\r\n <div className=\"w-full max-w-7xl mx-auto\">\r\n <div className=\"h-72 bg-zinc-200 dark:bg-slate-700 rounded-2xl animate-pulse\" />\r\n </div>\r\n </Section>\r\n );\r\n }\r\n\r\n // ── Split layout: when a backgroundImage is provided ──\r\n if (backgroundImage) {\r\n return (\r\n <Section className={`p-8 ${wrapClass} ${className}`}>\r\n <div className=\"w-full max-w-7xl mx-auto\">\r\n <div className=\"relative overflow-hidden rounded-2xl bg-zinc-900 shadow-xl\">\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 xl:grid-cols-2 2xl:grid-cols-2 min-h-[clamp(300px,40vh,420px)]\">\r\n {/* Left: image */}\r\n <div className=\"relative aspect-[4/3] md:aspect-auto order-last md:order-first min-h-0 min-h-[clamp(300px,40vh,420px)]\">\r\n <MediaImage\r\n src={backgroundImage}\r\n alt={title}\r\n size=\"banner\"\r\n priority\r\n />\r\n <div className=\"hidden md:block absolute inset-y-0 right-0 w-24 bg-gradient-to-r from-transparent to-zinc-900/60 pointer-events-none\" />\r\n </div>\r\n\r\n {/* Right: content */}\r\n <div className=\"relative flex flex-col justify-center px-8 py-10 md:px-12 md:py-14\">\r\n <div\r\n className=\"absolute top-0 right-0 w-32 h-32 opacity-10 pointer-events-none bg-[radial-gradient(circle,_white_1px,_transparent_1px)] bg-[length:12px_12px]\"\r\n aria-hidden\r\n />\r\n {tagLabel && (\r\n <div className=\"inline-flex items-center gap-1.5 self-start bg-white/10 text-white/80 text-xs font-semibold uppercase tracking-widest px-3 py-1 rounded-full mb-5 backdrop-blur-sm\">\r\n <Sparkles className=\"w-3.5 h-3.5\" />\r\n {tagLabel}\r\n </div>\r\n )}\r\n <Heading\r\n level={2}\r\n variant=\"none\"\r\n className=\"text-3xl md:text-4xl lg:text-5xl font-extrabold text-white mb-4 leading-tight\"\r\n >\r\n {title}\r\n </Heading>\r\n {subtitle && (\r\n <Text\r\n variant=\"none\"\r\n className=\"text-white/75 text-base md:text-lg mb-8 leading-relaxed\"\r\n >\r\n {subtitle}\r\n </Text>\r\n )}\r\n {ctaLabel && onCtaClick && (\r\n <Button\r\n variant=\"secondary\"\r\n size=\"lg\"\r\n onClick={onCtaClick}\r\n className=\"self-start bg-white text-zinc-900 hover:bg-zinc-100 font-semibold shadow-lg gap-2\"\r\n >\r\n {ctaLabel}\r\n <ArrowRight className=\"w-4 h-4\" />\r\n </Button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </Section>\r\n );\r\n }\r\n\r\n // ── Full-width gradient layout ──\r\n return (\r\n <Section className={`p-8 ${wrapClass} ${className}`}>\r\n <div className=\"w-full max-w-7xl mx-auto\">\r\n <div\r\n className={[\r\n \"relative overflow-hidden rounded-2xl flex items-center\",\r\n compact\r\n ? \"h-[clamp(112px,16vh,160px)]\"\r\n : \"min-h-[clamp(240px,34vh,360px)]\",\r\n ].join(\" \")}\r\n style={backgroundColor ? { backgroundColor } : undefined}\r\n >\r\n {/* Gradient background */}\r\n {!backgroundColor && (\r\n <div\r\n className=\"absolute inset-0 bg-gradient-to-br from-indigo-600 via-purple-600 to-fuchsia-600\"\r\n aria-hidden\r\n />\r\n )}\r\n\r\n {/* Decorative blobs */}\r\n <div className=\"absolute inset-0 overflow-hidden\" aria-hidden>\r\n <div className=\"absolute -top-16 -left-16 w-64 h-64 rounded-full bg-primary/20 blur-3xl animate-pulse\" />\r\n <div className=\"absolute -bottom-16 right-0 w-80 h-80 rounded-full bg-cobalt/20 blur-3xl animate-pulse\" />\r\n </div>\r\n\r\n {/* Content */}\r\n {compact ? (\r\n <div className=\"relative z-10 flex items-center justify-between w-full px-6 py-4 gap-4 flex-wrap\">\r\n <div className=\"inline-flex items-center gap-2\">\r\n <Sparkles className=\"w-4 h-4 text-white/80\" />\r\n <Span className=\"text-white font-semibold text-sm\">\r\n {title}\r\n </Span>\r\n </div>\r\n {ctaLabel && onCtaClick && (\r\n <Button\r\n variant=\"secondary\"\r\n size=\"sm\"\r\n onClick={onCtaClick}\r\n className=\"bg-white text-indigo-700 hover:bg-zinc-50 font-semibold gap-1.5 flex-shrink-0\"\r\n >\r\n {ctaLabel}\r\n <ArrowRight className=\"w-3.5 h-3.5\" />\r\n </Button>\r\n )}\r\n </div>\r\n ) : (\r\n <div className=\"relative z-10 w-full max-w-4xl mx-auto px-6 py-12 md:py-16 text-center\">\r\n {tagLabel && (\r\n <div className=\"inline-flex items-center gap-1.5 bg-white/15 text-white/90 text-xs font-semibold uppercase tracking-widest px-4 py-1.5 rounded-full mb-5 backdrop-blur-sm shadow-sm\">\r\n <Sparkles className=\"w-3.5 h-3.5\" />\r\n {tagLabel}\r\n </div>\r\n )}\r\n <Heading\r\n level={2}\r\n variant=\"none\"\r\n className=\"text-3xl md:text-5xl lg:text-6xl font-extrabold text-white mb-4 drop-shadow-lg leading-tight\"\r\n >\r\n {title}\r\n </Heading>\r\n {subtitle && (\r\n <Text\r\n variant=\"none\"\r\n className=\"text-white text-base md:text-xl mb-10 max-w-2xl mx-auto\"\r\n >\r\n {subtitle}\r\n </Text>\r\n )}\r\n {ctaLabel && onCtaClick && (\r\n <Button\r\n variant=\"secondary\"\r\n size=\"lg\"\r\n onClick={onCtaClick}\r\n className=\"bg-white text-indigo-700 hover:bg-zinc-50 font-semibold shadow-lg gap-2\"\r\n >\r\n {ctaLabel}\r\n <ArrowRight className=\"w-4 h-4\" />\r\n </Button>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </Section>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\nimport { THEME_CONSTANTS } from \"@mohasinac/tokens\";\r\nimport { Grid, Heading, Section, Span, Text, TextLink } from \"@mohasinac/ui\";\r\n\r\n// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\nexport interface SecurityHighlightItem {\r\n key: string;\r\n title: string;\r\n description: string;\r\n renderIcon?: (props: { className?: string }) => React.ReactNode;\r\n colorClass?: string;\r\n iconColorClass?: string;\r\n}\r\n\r\nexport interface SecurityHighlightsSectionProps {\r\n title: string;\r\n subtitle?: string;\r\n pillLabel?: string;\r\n items: SecurityHighlightItem[];\r\n learnMoreHref?: string;\r\n learnMoreLabel?: string;\r\n className?: string;\r\n}\r\n\r\n// ─── Single card ─────────────────────────────────────────────────────────────\r\n\r\nfunction SecurityCard({\r\n item,\r\n visible,\r\n delay,\r\n}: {\r\n item: SecurityHighlightItem;\r\n visible: boolean;\r\n delay: number;\r\n}) {\r\n const colorClass =\r\n item.colorClass ??\r\n \"bg-primary/5 border-primary/20 dark:bg-primary/10 dark:border-primary/30\";\r\n const iconColorClass = item.iconColorClass ?? \"text-primary\";\r\n\r\n return (\r\n <div\r\n className={[\r\n \"rounded-xl border p-5 transition-all duration-500\",\r\n colorClass,\r\n visible ? \"opacity-100 translate-y-0\" : \"opacity-0 translate-y-4\",\r\n ].join(\" \")}\r\n style={{ transitionDelay: `${delay}ms` }}\r\n >\r\n {item.renderIcon && (\r\n <div className=\"w-10 h-10 rounded-lg bg-white/60 dark:bg-white/10 flex items-center justify-center mb-3\">\r\n <span className={iconColorClass} aria-hidden=\"true\">\r\n {item.renderIcon({ className: \"w-6 h-6\" })}\r\n </span>\r\n </div>\r\n )}\r\n <Text className=\"font-semibold mb-1\">{item.title}</Text>\r\n <Text variant=\"secondary\" className=\"text-sm leading-relaxed\">\r\n {item.description}\r\n </Text>\r\n </div>\r\n );\r\n}\r\n\r\n// ─── Section ─────────────────────────────────────────────────────────────────\r\n\r\nexport function SecurityHighlightsSection({\r\n title,\r\n subtitle,\r\n pillLabel,\r\n items,\r\n learnMoreHref,\r\n learnMoreLabel = \"Learn more →\",\r\n className = \"\",\r\n}: SecurityHighlightsSectionProps) {\r\n const { themed } = THEME_CONSTANTS;\r\n const sectionRef = useRef<HTMLElement>(null);\r\n const [visible, setVisible] = useState(false);\r\n\r\n useEffect(() => {\r\n const el = sectionRef.current;\r\n if (!el) return;\r\n const observer = new IntersectionObserver(\r\n ([entry], obs) => {\r\n if (entry.isIntersecting) {\r\n setVisible(true);\r\n obs.disconnect();\r\n }\r\n },\r\n { threshold: 0.15 },\r\n );\r\n observer.observe(el);\r\n return () => observer.disconnect();\r\n }, []);\r\n\r\n return (\r\n <Section\r\n ref={sectionRef}\r\n className={`py-14 px-4 ${themed.bgPrimary} ${className}`}\r\n >\r\n <div className=\"max-w-6xl mx-auto\">\r\n {/* Header */}\r\n <div className=\"text-center mb-10\">\r\n {pillLabel && (\r\n <Span className=\"inline-flex items-center gap-2 rounded-full border border-primary-500/30 bg-primary-500/10 px-5 py-1.5 text-xs font-medium tracking-[0.2em] uppercase text-primary-700 dark:text-primary-400 backdrop-blur-sm\">\r\n {pillLabel}\r\n </Span>\r\n )}\r\n <Heading\r\n level={2}\r\n className={`mt-4 text-3xl md:text-4xl font-bold ${themed.textPrimary}`}\r\n >\r\n {title}\r\n </Heading>\r\n {subtitle && (\r\n <Text variant=\"secondary\" className=\"mt-2 max-w-xl mx-auto\">\r\n {subtitle}\r\n </Text>\r\n )}\r\n </div>\r\n\r\n {/* Cards grid */}\r\n <Grid\r\n gap=\"none\"\r\n className=\"grid-cols-1 sm:grid-cols-2 xl:grid-cols-4 gap-5\"\r\n >\r\n {items.map((item, index) => (\r\n <SecurityCard\r\n key={item.key}\r\n item={item}\r\n visible={visible}\r\n delay={index * 100}\r\n />\r\n ))}\r\n </Grid>\r\n\r\n {/* CTA link */}\r\n {learnMoreHref && (\r\n <div className=\"text-center mt-8\">\r\n <TextLink href={learnMoreHref}>{learnMoreLabel}</TextLink>\r\n </div>\r\n )}\r\n </div>\r\n </Section>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { THEME_CONSTANTS } from \"@mohasinac/tokens\";\r\nimport { Grid, Heading, Section, Text } from \"@mohasinac/ui\";\r\n\r\n// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\nexport interface SiteFeatureItem {\r\n id: string;\r\n icon: string;\r\n title: string;\r\n description: string;\r\n}\r\n\r\nexport interface SiteFeaturesSectionProps {\r\n title: string;\r\n subtitle?: string;\r\n features: SiteFeatureItem[];\r\n className?: string;\r\n}\r\n\r\n// ─── Section ─────────────────────────────────────────────────────────────────\r\n\r\nexport function SiteFeaturesSection({\r\n title,\r\n subtitle,\r\n features,\r\n className = \"\",\r\n}: SiteFeaturesSectionProps) {\r\n const { themed } = THEME_CONSTANTS;\r\n\r\n return (\r\n <Section className={`p-8 ${themed.bgSecondary} ${className}`}>\r\n <div className=\"w-full\">\r\n {/* Section Header */}\r\n <div className=\"text-center mb-12\">\r\n <Heading\r\n level={2}\r\n className={`text-3xl md:text-4xl font-bold ${themed.textPrimary} mb-3`}\r\n >\r\n {title}\r\n </Heading>\r\n {subtitle && (\r\n <Text\r\n className={`text-base ${themed.textSecondary} max-w-2xl mx-auto`}\r\n >\r\n {subtitle}\r\n </Text>\r\n )}\r\n </div>\r\n\r\n {/* Features Grid */}\r\n <Grid\r\n gap=\"lg\"\r\n className=\"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 md:gap-8\"\r\n >\r\n {features.map((feature) => (\r\n <div\r\n key={feature.id}\r\n className=\"p-6 text-center hover:shadow-lg transition-all group rounded-2xl bg-white dark:bg-slate-900 border border-zinc-100 dark:border-slate-800\"\r\n >\r\n {/* Icon */}\r\n <div className=\"text-6xl mb-4 group-hover:scale-110 transition-transform\">\r\n {feature.icon}\r\n </div>\r\n\r\n {/* Title */}\r\n <Heading\r\n level={3}\r\n className={`text-base font-bold ${themed.textPrimary} mb-2`}\r\n >\r\n {feature.title}\r\n </Heading>\r\n\r\n {/* Description */}\r\n <Text className={`text-base ${themed.textSecondary}`}>\r\n {feature.description}\r\n </Text>\r\n </div>\r\n ))}\r\n </Grid>\r\n </div>\r\n </Section>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { THEME_CONSTANTS } from \"@mohasinac/tokens\";\r\nimport { Grid, Heading, Section, Text } from \"@mohasinac/ui\";\r\n\r\n// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\nexport interface TrustIndicatorItem {\r\n key?: string;\r\n icon: string;\r\n title: string;\r\n description: string;\r\n}\r\n\r\nexport interface TrustIndicatorsSectionProps {\r\n items: TrustIndicatorItem[];\r\n className?: string;\r\n}\r\n\r\n// ─── Section ─────────────────────────────────────────────────────────────────\r\n\r\nexport function TrustIndicatorsSection({\r\n items,\r\n className = \"\",\r\n}: TrustIndicatorsSectionProps) {\r\n const { themed } = THEME_CONSTANTS;\r\n\r\n return (\r\n <Section className={`p-6 ${themed.bgSecondary} ${className}`}>\r\n <div className=\"w-full\">\r\n <Grid\r\n gap=\"md\"\r\n className=\"grid-cols-2 sm:grid-cols-3 md:grid-cols-4 xl:grid-cols-4 2xl:grid-cols-4 md:gap-8\"\r\n >\r\n {items.map((indicator, index) => (\r\n <div\r\n key={index}\r\n className=\"text-center p-4 rounded-2xl bg-white dark:bg-slate-900 border border-zinc-100 dark:border-slate-800 hover:shadow-md transition-shadow\"\r\n >\r\n <div className=\"text-4xl md:text-5xl mb-2 md:mb-3\">\r\n {indicator.icon}\r\n </div>\r\n <Heading\r\n level={3}\r\n className={`text-sm font-semibold ${themed.textPrimary} mb-1 md:mb-2`}\r\n >\r\n {indicator.title}\r\n </Heading>\r\n <Text className={`text-xs ${themed.textSecondary}`}>\r\n {indicator.description}\r\n </Text>\r\n </div>\r\n ))}\r\n </Grid>\r\n </div>\r\n </Section>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { THEME_CONSTANTS } from \"@mohasinac/tokens\";\r\nimport { Button, Grid, Heading, Section, Span, Text } from \"@mohasinac/ui\";\r\nimport { MessageCircle } from \"lucide-react\";\r\n\r\n// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\nexport interface WhatsAppCommunitySectionProps {\r\n title: string;\r\n /** HTML string for the description (safe server-rendered HTML). */\r\n descriptionHtml?: string;\r\n memberCount?: number;\r\n memberCountLabel?: string;\r\n testimonial?: string;\r\n benefits?: string[];\r\n buttonText?: string;\r\n groupLink?: string;\r\n isLoading?: boolean;\r\n className?: string;\r\n}\r\n\r\n// ─── Section ─────────────────────────────────────────────────────────────────\r\n\r\nexport function WhatsAppCommunitySection({\r\n title,\r\n descriptionHtml,\r\n memberCount,\r\n memberCountLabel = \"members\",\r\n testimonial,\r\n benefits = [],\r\n buttonText = \"Join our WhatsApp community\",\r\n groupLink,\r\n isLoading = false,\r\n className = \"\",\r\n}: WhatsAppCommunitySectionProps) {\r\n const { themed, flex } = THEME_CONSTANTS;\r\n\r\n if (isLoading) {\r\n return (\r\n <Section className={`p-8 ${themed.bgSecondary} ${className}`}>\r\n <div className=\"w-full max-w-7xl mx-auto\">\r\n <div className=\"h-80 bg-zinc-200 dark:bg-slate-700 rounded-2xl animate-pulse\" />\r\n </div>\r\n </Section>\r\n );\r\n }\r\n\r\n if (!title && !groupLink) return null;\r\n\r\n const handleJoin = () => {\r\n if (groupLink) window.open(groupLink, \"_blank\");\r\n };\r\n\r\n return (\r\n <Section className={`p-8 ${themed.bgSecondary} ${className}`}>\r\n <div className=\"w-full max-w-7xl mx-auto\">\r\n <div className=\"bg-gradient-to-br from-green-700 to-green-800 dark:from-emerald-800 dark:to-emerald-900 rounded-2xl p-8 text-white overflow-hidden relative\">\r\n {/* Decorative Pattern */}\r\n <div className=\"absolute inset-0 opacity-10\" aria-hidden>\r\n <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <defs>\r\n <pattern\r\n id=\"wa-dots\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"40\"\r\n height=\"40\"\r\n patternUnits=\"userSpaceOnUse\"\r\n >\r\n <circle cx=\"20\" cy=\"20\" r=\"2\" fill=\"white\" />\r\n </pattern>\r\n </defs>\r\n <rect width=\"100%\" height=\"100%\" fill=\"url(#wa-dots)\" />\r\n </svg>\r\n </div>\r\n\r\n <div className=\"relative z-10 text-center\">\r\n {/* WhatsApp Icon */}\r\n <div\r\n className={`inline-flex items-center justify-center w-20 h-20 rounded-full bg-white/20 backdrop-blur-sm mb-6 mx-auto`}\r\n >\r\n <MessageCircle className=\"w-10 h-10 text-white\" />\r\n </div>\r\n\r\n {/* Heading */}\r\n <Heading level={2} className=\"mb-3 text-white\">\r\n {title}\r\n </Heading>\r\n\r\n {descriptionHtml && (\r\n <div\r\n className=\"text-lg md:text-xl mb-2 opacity-90 prose prose-invert max-w-none\"\r\n dangerouslySetInnerHTML={{ __html: descriptionHtml }}\r\n />\r\n )}\r\n\r\n {/* Facepile + member counter */}\r\n {memberCount && (\r\n <div className={`${flex.center} gap-3 mb-4`}>\r\n <div className=\"flex -space-x-2\">\r\n {[\"A\", \"R\", \"S\", \"M\", \"P\"].map((initial, i) => (\r\n <div\r\n key={i}\r\n className={`w-8 h-8 rounded-full border-2 border-white bg-green-700 ${flex.center} text-white text-xs font-bold`}\r\n >\r\n {initial}\r\n </div>\r\n ))}\r\n </div>\r\n <Text variant=\"none\" className=\"text-white font-bold\">\r\n <Span className=\"text-xl font-extrabold\">\r\n {memberCount.toLocaleString(\"en-IN\")}\r\n </Span>{\" \"}\r\n {memberCountLabel}\r\n </Text>\r\n </div>\r\n )}\r\n\r\n {/* Testimonial */}\r\n {testimonial && (\r\n <Text\r\n size=\"sm\"\r\n variant=\"none\"\r\n className=\"italic text-white/90 max-w-sm mx-auto mb-6\"\r\n >\r\n “{testimonial}”\r\n </Text>\r\n )}\r\n\r\n {/* Benefits */}\r\n {benefits.length > 0 && (\r\n <Grid className=\"grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 xl:grid-cols-4 2xl:grid-cols-4 max-w-2xl mx-auto my-8\">\r\n {benefits.slice(0, 4).map((benefit, index) => (\r\n <div\r\n key={index}\r\n className=\"flex items-start gap-3 text-left bg-white/10 backdrop-blur-sm p-4 rounded-lg\"\r\n >\r\n <svg\r\n className=\"w-6 h-6 mt-0.5 flex-shrink-0\"\r\n fill=\"currentColor\"\r\n viewBox=\"0 0 20 20\"\r\n >\r\n <path\r\n fillRule=\"evenodd\"\r\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\"\r\n clipRule=\"evenodd\"\r\n />\r\n </svg>\r\n <Span className=\"text-sm md:text-base\">{benefit}</Span>\r\n </div>\r\n ))}\r\n </Grid>\r\n )}\r\n\r\n {/* CTA Button */}\r\n {groupLink && (\r\n <div className=\"relative inline-block\">\r\n <div\r\n className=\"absolute inset-0 rounded-full bg-lime-400/30 animate-pulse blur-md scale-110\"\r\n aria-hidden\r\n />\r\n <Button\r\n variant=\"primary\"\r\n size=\"lg\"\r\n aria-label={buttonText}\r\n onClick={handleJoin}\r\n className=\"relative bg-white text-green-600 hover:bg-zinc-100 shadow-xl hover:shadow-2xl\"\r\n >\r\n <svg\r\n className=\"w-6 h-6 mr-2\"\r\n fill=\"currentColor\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z\" />\r\n </svg>\r\n {buttonText}\r\n </Button>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </Section>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { THEME_CONSTANTS } from \"@mohasinac/tokens\";\r\nimport { Grid, Section } from \"@mohasinac/ui\";\r\n\r\n/** Full-page skeleton shown while homepage data loads. */\r\nexport function HomepageSkeleton() {\r\n const { skeleton, flex, themed } = THEME_CONSTANTS;\r\n\r\n // Hardcoded clamp values (extended THEME_CONSTANTS keys not in @mohasinac/tokens)\r\n const heroSkeletonH = \"h-[clamp(420px,72vh,680px)]\";\r\n const trustCardH = \"h-[clamp(120px,18vh,170px)]\";\r\n const categoryTileH = \"h-[clamp(112px,16vh,160px)]\";\r\n const newsletterH = \"h-[clamp(220px,28vh,320px)]\";\r\n\r\n return (\r\n <div className=\"w-full overflow-hidden\">\r\n {/* Hero Carousel skeleton */}\r\n <div\r\n className={`${skeleton.card} w-full ${heroSkeletonH}`}\r\n aria-hidden=\"true\"\r\n />\r\n\r\n {/* Trust Features skeleton — 4 cards */}\r\n <Section className={`p-8 ${themed.bgPrimary}`}>\r\n <Grid className=\"grid-cols-2 md:grid-cols-4 xl:grid-cols-4 2xl:grid-cols-4\">\r\n {Array.from({ length: 4 }).map((_, i) => (\r\n <div\r\n key={i}\r\n className={`${skeleton.card} flex flex-col items-center gap-3 p-6 ${trustCardH}`}\r\n />\r\n ))}\r\n </Grid>\r\n </Section>\r\n\r\n {/* Top Categories skeleton — 6 tiles */}\r\n <Section className={`p-8 ${themed.bgSecondary}`}>\r\n <div className={`${skeleton.heading} w-48 mx-auto mb-6`} />\r\n <Grid className=\"grid-cols-2 sm:grid-cols-4\">\r\n {Array.from({ length: 6 }).map((_, i) => (\r\n <div key={i} className={`${skeleton.card} ${categoryTileH}`} />\r\n ))}\r\n </Grid>\r\n </Section>\r\n\r\n {/* Featured Products skeleton — 5 cards */}\r\n <Section className={`p-8 ${themed.bgPrimary}`}>\r\n <div className={`${flex.between} mb-6`}>\r\n <div className={`${skeleton.heading} w-52`} />\r\n <div className={`${skeleton.text} w-24`} />\r\n </div>\r\n <Grid className=\"grid-cols-2 sm:grid-cols-3 md:grid-cols-4 xl:grid-cols-4 2xl:grid-cols-5\">\r\n {Array.from({ length: 5 }).map((_, i) => (\r\n <div key={i} className=\"flex flex-col gap-2\">\r\n <div className={`${skeleton.image} w-full pb-[100%]`} />\r\n <div className={`${skeleton.text} w-3/4`} />\r\n <div className={`${skeleton.text} w-1/2`} />\r\n </div>\r\n ))}\r\n </Grid>\r\n </Section>\r\n\r\n {/* Featured Auctions skeleton — 5 cards */}\r\n <Section className={`p-8 ${themed.bgSecondary}`}>\r\n <div className={`${flex.between} mb-6`}>\r\n <div className={`${skeleton.heading} w-56`} />\r\n <div className={`${skeleton.text} w-24`} />\r\n </div>\r\n <Grid className=\"grid-cols-2 sm:grid-cols-3 md:grid-cols-4 xl:grid-cols-4 2xl:grid-cols-5\">\r\n {Array.from({ length: 5 }).map((_, i) => (\r\n <div key={i} className=\"flex flex-col gap-2\">\r\n <div className={`${skeleton.image} w-full pb-[100%]`} />\r\n <div className={`${skeleton.text} w-3/4`} />\r\n <div className={`${skeleton.text} w-1/2`} />\r\n </div>\r\n ))}\r\n </Grid>\r\n </Section>\r\n\r\n {/* Newsletter skeleton */}\r\n <Section className={`p-8 ${themed.bgPrimary}`}>\r\n <div\r\n className={`${skeleton.card} rounded-2xl max-w-2xl mx-auto ${newsletterH}`}\r\n />\r\n </Section>\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { THEME_CONSTANTS } from \"@mohasinac/tokens\";\r\nimport { Div, Grid, Heading, Section, Span, Text } from \"@mohasinac/ui\";\r\nimport { BeforeAfterCard } from \"./BeforeAfterCard\";\r\nimport type { BeforeAfterItem } from \"../types\";\r\n\r\n// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\n/** Minimal result item — maps to BeforeAfterItem but with optional fields for convenience. */\r\nexport interface FeaturedResultItem {\r\n id?: string;\r\n beforeImage: string;\r\n afterImage: string;\r\n caption?: string;\r\n sortOrder?: number;\r\n}\r\n\r\nexport interface FeaturedResultsSectionProps {\r\n title: string;\r\n subtitle?: string;\r\n pillLabel?: string;\r\n ornamentLabel?: string;\r\n items: FeaturedResultItem[];\r\n className?: string;\r\n}\r\n\r\n// ─── Section ─────────────────────────────────────────────────────────────────\r\n\r\nexport function FeaturedResultsSection({\r\n title,\r\n subtitle,\r\n pillLabel,\r\n ornamentLabel = \"✶\",\r\n items,\r\n className = \"\",\r\n}: FeaturedResultsSectionProps) {\r\n const { flex } = THEME_CONSTANTS;\r\n\r\n const pillCls =\r\n \"inline-flex items-center gap-2 rounded-full border border-primary-500/30 bg-primary-500/10 px-5 py-1.5 text-xs font-medium tracking-[0.2em] uppercase text-primary-700 dark:text-primary-400 backdrop-blur-sm\";\r\n\r\n if (!items.length) return null;\r\n\r\n return (\r\n <Section className={`py-16 md:py-20 px-4 ${className}`}>\r\n {/* Section header */}\r\n <Div className=\"mb-12 text-center\">\r\n {pillLabel && (\r\n <Span className={pillCls}>\r\n <Span\r\n className=\"inline-block h-1.5 w-1.5 rounded-full bg-primary-500\"\r\n aria-hidden=\"true\"\r\n />\r\n {pillLabel}\r\n </Span>\r\n )}\r\n\r\n <Heading\r\n level={2}\r\n className=\"font-display mt-3 text-4xl text-zinc-900 dark:text-white\"\r\n >\r\n {title}\r\n </Heading>\r\n\r\n {/* Ornament */}\r\n <Div\r\n className={`mt-3 ${flex.center} gap-2 text-zinc-400 dark:text-zinc-500`}\r\n aria-hidden=\"true\"\r\n >\r\n <Span className=\"h-px w-6 bg-current\" />\r\n <Span className=\"text-xs\">{ornamentLabel}</Span>\r\n <Span className=\"h-px w-6 bg-current\" />\r\n </Div>\r\n\r\n {subtitle && (\r\n <Text className=\"mx-auto mt-4 max-w-md text-sm text-zinc-500 dark:text-zinc-400\">\r\n {subtitle}\r\n </Text>\r\n )}\r\n </Div>\r\n\r\n {/* Card grid */}\r\n <Grid\r\n gap=\"lg\"\r\n className=\"mx-auto max-w-7xl grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-4\"\r\n >\r\n {items.map((item, i) => (\r\n <BeforeAfterCard\r\n key={item.id ?? `result-${i}`}\r\n item={{\r\n id: item.id ?? `result-${i}`,\r\n beforeImage: item.beforeImage,\r\n afterImage: item.afterImage,\r\n caption: item.caption ?? \"\",\r\n sortOrder: item.sortOrder ?? i,\r\n }}\r\n />\r\n ))}\r\n </Grid>\r\n </Section>\r\n );\r\n}\r\n","import React, { ReactNode } from \"react\";\r\nimport { THEME_CONSTANTS } from \"@mohasinac/tokens\";\r\nimport { Grid, Heading, Section, Span, Text } from \"@mohasinac/ui\";\r\n\r\n// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\nexport interface HowItWorksInfoStep {\r\n number: number;\r\n icon: string;\r\n title: string;\r\n text: string;\r\n /** Optional accent colour class for the step number badge, e.g. \"bg-emerald-100 …\" */\r\n accentClass?: string;\r\n /** Optional text colour class for the number */\r\n textClass?: string;\r\n}\r\n\r\nexport interface HowItWorksInfoDetail {\r\n title: string;\r\n text: string;\r\n}\r\n\r\nexport interface HowItWorksInfoViewProps {\r\n /** Page hero heading */\r\n title: string;\r\n subtitle?: string;\r\n /** Tailwind gradient class for the hero header, e.g. \"bg-gradient-to-r from-cobalt-600 to-violet-700\" */\r\n heroClass?: string;\r\n /** Step-by-step section heading */\r\n stepsTitle?: string;\r\n steps: HowItWorksInfoStep[];\r\n /** \"Important things to know\" or similar detail cards below the steps */\r\n detailsSectionTitle?: string;\r\n details?: HowItWorksInfoDetail[];\r\n /** Optional: render the flow/status diagram above the steps list */\r\n renderDiagram?: () => ReactNode;\r\n /** Optional extra content at the bottom (CTAs, links, etc.) */\r\n renderFooter?: () => ReactNode;\r\n /** Accent colour for the step number badges (default: cobalt/blue) */\r\n accentClass?: string;\r\n className?: string;\r\n}\r\n\r\n// ─── View ─────────────────────────────────────────────────────────────────────\r\n\r\nexport function HowItWorksInfoView({\r\n title,\r\n subtitle,\r\n heroClass = \"bg-gradient-to-br from-cobalt-700 via-cobalt-600 to-violet-700\",\r\n stepsTitle,\r\n steps,\r\n detailsSectionTitle,\r\n details = [],\r\n renderDiagram,\r\n renderFooter,\r\n accentClass = \"bg-blue-100 dark:bg-blue-900/40 text-blue-700 dark:text-blue-400\",\r\n className = \"\",\r\n}: HowItWorksInfoViewProps) {\r\n const { themed, flex, spacing } = THEME_CONSTANTS;\r\n\r\n return (\r\n <div\r\n className={`-mx-4 md:-mx-6 lg:-mx-8 -mt-6 sm:-mt-8 lg:-mt-10 ${className}`}\r\n >\r\n {/* Header */}\r\n <Section className={`${heroClass} text-white py-14 md:py-16 lg:py-20`}>\r\n <div className=\"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center\">\r\n <Heading level={1} variant=\"none\" className=\"mb-4 text-white\">\r\n {title}\r\n </Heading>\r\n {subtitle && (\r\n <Text variant=\"none\" className=\"text-white/80 max-w-2xl mx-auto\">\r\n {subtitle}\r\n </Text>\r\n )}\r\n </div>\r\n </Section>\r\n\r\n <div className=\"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-10 md:py-12 lg:py-16\">\r\n {/* Optional diagram slot */}\r\n {renderDiagram?.()}\r\n\r\n {/* Steps */}\r\n {stepsTitle && (\r\n <Heading level={2} className=\"mb-6\">\r\n {stepsTitle}\r\n </Heading>\r\n )}\r\n\r\n <div className={`${spacing.stack} mb-14`}>\r\n {steps.map(\r\n ({\r\n number,\r\n icon,\r\n title: stepTitle,\r\n text,\r\n accentClass: stepAccent,\r\n textClass,\r\n }) => (\r\n <Section\r\n key={number}\r\n className={`flex gap-4 items-start ${themed.bgSecondary} rounded-xl p-6 border ${themed.border}`}\r\n >\r\n <div\r\n className={`shrink-0 w-10 h-10 rounded-xl ${stepAccent ?? accentClass} ${flex.center} text-sm font-bold`}\r\n >\r\n <Span className={textClass}>{number}</Span>\r\n </div>\r\n <div>\r\n <Heading level={3} className=\"font-semibold mb-1\">\r\n {icon} {stepTitle}\r\n </Heading>\r\n <Text\r\n variant=\"secondary\"\r\n size=\"sm\"\r\n className=\"leading-relaxed\"\r\n >\r\n {text}\r\n </Text>\r\n </div>\r\n </Section>\r\n ),\r\n )}\r\n </div>\r\n\r\n {/* Detail cards */}\r\n {details.length > 0 && (\r\n <>\r\n {detailsSectionTitle && (\r\n <Heading level={2} className=\"mb-6\">\r\n {detailsSectionTitle}\r\n </Heading>\r\n )}\r\n <Grid className=\"grid-cols-1 sm:grid-cols-2 xl:grid-cols-2 2xl:grid-cols-3 mb-12\">\r\n {details.map(({ title: dt, text: dx }) => (\r\n <div\r\n key={dt}\r\n className={`${themed.bgSecondary} border ${themed.border} rounded-xl p-5`}\r\n >\r\n <Heading level={3} className=\"font-semibold mb-2\">\r\n {dt}\r\n </Heading>\r\n <Text\r\n variant=\"secondary\"\r\n size=\"sm\"\r\n className=\"leading-relaxed\"\r\n >\r\n {dx}\r\n </Text>\r\n </div>\r\n ))}\r\n </Grid>\r\n </>\r\n )}\r\n\r\n {/* Footer slot (CTAs, links) */}\r\n {renderFooter?.()}\r\n </div>\r\n </div>\r\n );\r\n}\r\n"]}
|