@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
package/dist/ui/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ui/components/Semantic.tsx","../../src/ui/components/Div.tsx","../../src/ui/components/Typography.tsx","../../src/ui/components/Spinner.tsx","../../src/ui/components/Skeleton.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/check.ts","../../node_modules/lucide-react/src/icons/chevron-down.ts","../../node_modules/lucide-react/src/icons/chevron-left.ts","../../node_modules/lucide-react/src/icons/chevron-right.ts","../../node_modules/lucide-react/src/icons/chevron-up.ts","../../node_modules/lucide-react/src/icons/loader-circle.ts","../../node_modules/lucide-react/src/icons/star.ts","../../node_modules/lucide-react/src/icons/x.ts","../../node_modules/lucide-react/src/icons/zoom-in.ts","../../src/ui/components/Button.tsx","../../src/ui/components/IconButton.tsx","../../src/ui/components/TextLink.tsx","../../src/ui/components/Tooltip.tsx","../../src/ui/components/Accordion.tsx","../../src/ui/components/Form.tsx","../../src/ui/components/Badge.tsx","../../src/ui/components/Alert.tsx","../../src/ui/components/Divider.tsx","../../src/ui/components/Progress.tsx","../../src/contracts/table.ts","../../src/ui/components/Pagination.tsx","../../src/ui/components/StatusBadge.tsx","../../src/ui/components/Modal.tsx","../../src/ui/components/Drawer.tsx","../../src/ui/components/Select.tsx","../../src/ui/components/Input.tsx","../../src/ui/components/Textarea.tsx","../../src/ui/components/Slider.tsx","../../src/ui/components/StarRating.tsx","../../src/ui/components/Breadcrumb.tsx","../../src/ui/components/ImageLightbox.tsx","../../src/ui/components/TagInput.tsx","../../src/ui/style.helper.ts","../../src/ui/components/StepperNav.tsx","../../src/ui/components/ViewToggle.tsx","../../src/ui/components/RatingDisplay.tsx","../../src/ui/components/Layout.tsx","../../src/ui/components/PriceDisplay.tsx","../../src/ui/components/StatsGrid.tsx","../../src/ui/components/SummaryCard.tsx","../../src/ui/components/CountdownDisplay.tsx","../../src/ui/components/ItemRow.tsx","../../src/ui/components/HorizontalScroller.tsx","../../src/react/hooks/useVisibleItems.ts","../../src/tokens/index.ts","../../src/ui/components/TabStrip.tsx","../../src/ui/components/FormGrid.tsx","../../src/ui/components/DescriptionField.tsx","../../src/ui/components/ActiveFilterChips.tsx","../../src/ui/components/SortDropdown.tsx","../../src/ui/components/TablePagination.tsx","../../src/ui/DataTable.tsx","../../src/ui/animation.helper.ts","../../src/ui/color.helper.ts","../../src/ui/components/SideModal.tsx","../../src/ui/rich-text/RichText.tsx","../../src/ui/components/BulkActionBar.tsx","../../src/ui/components/ListingLayout.tsx"],"names":["React","jsx","jsxs","_a","createElement","_b","forwardRef","__iconNode","twMerge","VARIANTS","createContext","useMemo","useState","useContext","SIZE_CLASSES","useRef","useEffect","useCallback","createPortal","useId","Fragment","DEFAULT_LABELS"],"mappings":"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","file":"index.js","sourcesContent":["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","import React from \"react\";\n\n/**\n * Spinner — generic loading indicator.\n *\n * Extracted from src/components/ui/Spinner.tsx for @mohasinac/ui.\n * No app-specific imports; pure Tailwind CSS.\n */\n\nexport interface SpinnerProps {\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n variant?: \"primary\" | \"white\" | \"current\";\n className?: string;\n label?: string;\n}\n\nexport function Spinner({\n size = \"md\",\n variant = \"primary\",\n className = \"\",\n label = \"Loading...\",\n}: SpinnerProps) {\n const sizeClasses: Record<NonNullable<SpinnerProps[\"size\"]>, string> = {\n sm: \"w-4 h-4 border-2\",\n md: \"w-8 h-8 border-2\",\n lg: \"w-12 h-12 border-[3px]\",\n xl: \"w-16 h-16 border-4\",\n };\n\n const variantClasses: Record<NonNullable<SpinnerProps[\"variant\"]>, string> = {\n primary:\n \"border-primary-600 border-t-transparent dark:border-secondary-500 dark:border-t-transparent\",\n white: \"border-white border-t-transparent\",\n current: \"border-current border-t-transparent\",\n };\n\n return (\n <div\n className={`inline-flex items-center gap-3 ${className}`}\n role=\"status\"\n aria-label={label}\n >\n <div\n className={`${sizeClasses[size]} ${variantClasses[variant]} rounded-full animate-spin force-spin`}\n />\n {label && <span className=\"sr-only\">{label}</span>}\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\n\n/**\n * Skeleton — content placeholder with pulse or wave animation.\n *\n * Extracted from src/components/ui/Skeleton.tsx for @mohasinac/ui.\n * Wave animation uses a plain <style> element (no styled-jsx dependency).\n */\n\nexport interface SkeletonProps {\n variant?: \"text\" | \"circular\" | \"rectangular\";\n width?: string | number;\n height?: string | number;\n className?: string;\n animation?: \"pulse\" | \"wave\" | \"none\";\n}\n\n// bgTertiary inlined from THEME_CONSTANTS.themed.bgTertiary\nconst BG_TERTIARY = \"bg-zinc-100 dark:bg-slate-800\";\n\nconst WAVE_CSS = `\n@keyframes appkit-skeleton-wave {\n 0% { transform: translateX(-100%); }\n 50%, 100% { transform: translateX(100%); }\n}\n.appkit-skeleton-wave {\n position: relative;\n overflow: hidden;\n}\n.appkit-skeleton-wave::after {\n content: \"\";\n position: absolute;\n top: 0; left: 0; right: 0; bottom: 0;\n background: linear-gradient(90deg, transparent, rgba(255,255,255,0.5), transparent);\n animation: appkit-skeleton-wave 1.5s infinite;\n}\n`;\n\nexport function Skeleton({\n variant = \"text\",\n width,\n height,\n className = \"\",\n animation = \"pulse\",\n}: SkeletonProps) {\n const variantClass = variant === \"circular\" ? \"rounded-full\" : \"rounded\";\n\n const defaultSize = {\n circular: { width: \"40px\", height: \"40px\" },\n rectangular: { width: \"100%\", height: \"140px\" },\n text: { width: \"100%\", height: \"1em\" },\n }[variant];\n\n const animationClass = {\n pulse: \"animate-pulse\",\n wave: \"appkit-skeleton-wave\",\n none: \"\",\n }[animation];\n\n const style: React.CSSProperties = {\n width: width ?? defaultSize.width,\n height: height ?? defaultSize.height,\n };\n\n return (\n <>\n {animation === \"wave\" && (\n <style dangerouslySetInnerHTML={{ __html: WAVE_CSS }} />\n )}\n <div\n className={`${BG_TERTIARY} ${variantClass} ${animationClass} ${className}`}\n style={style}\n role=\"status\"\n aria-label=\"Loading\"\n >\n <span className=\"sr-only\">Loading...</span>\n </div>\n </>\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 = [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]];\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/check\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 Check = createLucideIcon('check', __iconNode);\n\nexport default Check;\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: 'm15 18-6-6 6-6', key: '1wnfg3' }]];\n\n/**\n * @component @name ChevronLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/chevron-left\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 ChevronLeft = createLucideIcon('chevron-left', __iconNode);\n\nexport default ChevronLeft;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }]];\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/chevron-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 ChevronRight = createLucideIcon('chevron-right', __iconNode);\n\nexport default ChevronRight;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm18 15-6-6-6 6', key: '153udz' }]];\n\n/**\n * @component @name ChevronUp\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/chevron-up\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 ChevronUp = createLucideIcon('chevron-up', __iconNode);\n\nexport default ChevronUp;\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 [\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 createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n];\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/x\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 X = createLucideIcon('x', __iconNode);\n\nexport default X;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '11', cy: '11', r: '8', key: '4ej97u' }],\n ['line', { x1: '21', x2: '16.65', y1: '21', y2: '16.65', key: '13gj7c' }],\n ['line', { x1: '11', x2: '11', y1: '8', y2: '14', key: '1vmskp' }],\n ['line', { x1: '8', x2: '14', y1: '11', y2: '11', key: 'durymu' }],\n];\n\n/**\n * @component @name ZoomIn\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/zoom-in\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 ZoomIn = createLucideIcon('zoom-in', __iconNode);\n\nexport default ZoomIn;\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","import React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nconst BASE =\r\n \"inline-flex items-center justify-center flex-shrink-0 transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed\";\r\n\r\nconst SIZES = {\r\n sm: \"h-8 w-8 rounded-lg\",\r\n md: \"h-10 w-10 rounded-xl\",\r\n lg: \"h-12 w-12 rounded-xl\",\r\n} as const;\r\n\r\nconst VARIANTS = {\r\n ghost:\r\n \"text-zinc-600 hover:bg-zinc-100 dark:text-zinc-400 dark:hover:bg-zinc-800 focus:ring-zinc-400\",\r\n outline:\r\n \"border border-zinc-200 dark:border-zinc-700 bg-white dark:bg-transparent text-zinc-700 dark:text-zinc-300 hover:bg-zinc-50 dark:hover:bg-zinc-800 focus:ring-zinc-400\",\r\n primary:\r\n \"bg-primary-600 text-white hover:bg-primary-700 focus:ring-primary-500 dark:bg-secondary-500 dark:hover:bg-secondary-400\",\r\n danger:\r\n \"text-red-600 hover:bg-red-50 dark:hover:bg-red-900/20 focus:ring-red-500\",\r\n} as const;\r\n\r\nexport interface IconButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n /** Required — text alternative for screen readers. Also shown as tooltip. */\r\n \"aria-label\": string;\r\n /** Icon element to display (usually a Lucide icon). Falls back to children. */\r\n icon?: React.ReactNode;\r\n size?: keyof typeof SIZES;\r\n variant?: keyof typeof VARIANTS;\r\n}\r\n\r\n/**\r\n * Icon-only button. `aria-label` is required — will throw in development if omitted.\r\n *\r\n * @example\r\n * ```tsx\r\n * <Tooltip label=\"Add to wishlist\">\r\n * <IconButton aria-label=\"Add to wishlist\" icon={<HeartIcon />} onClick={handleWishlist} />\r\n * </Tooltip>\r\n * ```\r\n */\r\nexport function IconButton({\r\n size = \"md\",\r\n variant = \"ghost\",\r\n className = \"\",\r\n icon,\r\n children,\r\n ...props\r\n}: IconButtonProps) {\r\n if (\r\n process.env.NODE_ENV !== \"production\" &&\r\n !props[\"aria-label\"]\r\n ) {\r\n throw new Error(\r\n '[IconButton] Missing required \"aria-label\" prop. ' +\r\n \"Add aria-label=\\\"...\\\" to the button or wrap with <Tooltip label=\\\"...\\\">.\",\r\n );\r\n }\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n className={twMerge(BASE, SIZES[size], VARIANTS[variant], className)}\r\n {...props}\r\n >\r\n {icon ?? children}\r\n </button>\r\n );\r\n}\r\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, { useState, useEffect, useRef, useCallback } from \"react\";\r\n\r\nconst TOOLTIP_CONTENT =\r\n \"absolute z-50 whitespace-nowrap px-2 py-1 text-xs font-medium rounded bg-zinc-900 dark:bg-zinc-100 text-white dark:text-zinc-900 shadow-sm pointer-events-none\";\r\n\r\nconst POSITION: Record<string, string> = {\r\n top: \"bottom-full left-1/2 -translate-x-1/2 mb-2\",\r\n bottom: \"top-full left-1/2 -translate-x-1/2 mt-2\",\r\n left: \"right-full top-1/2 -translate-y-1/2 mr-2\",\r\n right: \"left-full top-1/2 -translate-y-1/2 ml-2\",\r\n};\r\n\r\nexport interface TooltipProps {\r\n /** Text shown in the tooltip bubble */\r\n label: string;\r\n /** Single child element — must accept mouse/focus events */\r\n children: React.ReactElement;\r\n /** Which side to render the tooltip on (default: \"top\") */\r\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\r\n /** Delay before showing tooltip in ms (default: 400) */\r\n delay?: number;\r\n /**\r\n * Enable long-press on touch devices to show a bottom-sheet tooltip panel.\r\n * Designed for mobile where hover is not available. Default: true.\r\n */\r\n mobileSheet?: boolean;\r\n /**\r\n * Duration in ms to hold touch before the mobile sheet opens. Default: 500.\r\n */\r\n longPressDelay?: number;\r\n}\r\n\r\n/**\r\n * Tooltip wrapper. Injects `aria-label` into the child if not already present,\r\n * and shows a visible label bubble on hover/focus (desktop) or long-press\r\n * (mobile — opens an accessible bottom-sheet panel).\r\n *\r\n * @example\r\n * ```tsx\r\n * <Tooltip label=\"Add to wishlist\">\r\n * <IconButton aria-label=\"Add to wishlist\" icon={<HeartIcon />} onClick={handleWishlist} />\r\n * </Tooltip>\r\n * ```\r\n */\r\nexport function Tooltip({\r\n label,\r\n children,\r\n side = \"top\",\r\n delay = 400,\r\n mobileSheet = true,\r\n longPressDelay = 500,\r\n}: TooltipProps) {\r\n const [visible, setVisible] = useState(false);\r\n const [mobileOpen, setMobileOpen] = useState(false);\r\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n const longPressRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (timeoutRef.current !== null) clearTimeout(timeoutRef.current);\r\n if (longPressRef.current !== null) clearTimeout(longPressRef.current);\r\n };\r\n }, []);\r\n\r\n const showTooltip = () => {\r\n timeoutRef.current = setTimeout(() => setVisible(true), delay);\r\n };\r\n\r\n const hideTooltip = () => {\r\n if (timeoutRef.current !== null) clearTimeout(timeoutRef.current);\r\n setVisible(false);\r\n };\r\n\r\n // ── Long-press handlers for touch devices ──────────────────────────────────\r\n\r\n const handleTouchStart = useCallback(() => {\r\n if (!mobileSheet) return;\r\n longPressRef.current = setTimeout(() => {\r\n setMobileOpen(true);\r\n }, longPressDelay);\r\n }, [mobileSheet, longPressDelay]);\r\n\r\n const handleTouchEnd = useCallback(() => {\r\n if (longPressRef.current !== null) {\r\n clearTimeout(longPressRef.current);\r\n longPressRef.current = null;\r\n }\r\n }, []);\r\n\r\n // Close mobile sheet on Escape\r\n useEffect(() => {\r\n if (!mobileOpen) return;\r\n const handler = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") setMobileOpen(false);\r\n };\r\n document.addEventListener(\"keydown\", handler);\r\n return () => document.removeEventListener(\"keydown\", handler);\r\n }, [mobileOpen]);\r\n\r\n // Clone child to inject aria-label + mouse/focus/touch handlers\r\n const existingProps = children.props as Record<string, unknown>;\r\n const child = React.cloneElement(\r\n children as React.ReactElement<Record<string, unknown>>,\r\n {\r\n \"aria-label\": (existingProps[\"aria-label\"] as string | undefined) ?? label,\r\n onMouseEnter: (e: React.MouseEvent) => {\r\n if (typeof existingProps.onMouseEnter === \"function\")\r\n existingProps.onMouseEnter(e);\r\n showTooltip();\r\n },\r\n onMouseLeave: (e: React.MouseEvent) => {\r\n if (typeof existingProps.onMouseLeave === \"function\")\r\n existingProps.onMouseLeave(e);\r\n hideTooltip();\r\n },\r\n onFocus: (e: React.FocusEvent) => {\r\n if (typeof existingProps.onFocus === \"function\") existingProps.onFocus(e);\r\n setVisible(true);\r\n },\r\n onBlur: (e: React.FocusEvent) => {\r\n if (typeof existingProps.onBlur === \"function\") existingProps.onBlur(e);\r\n hideTooltip();\r\n },\r\n onTouchStart: (e: React.TouchEvent) => {\r\n if (typeof existingProps.onTouchStart === \"function\")\r\n existingProps.onTouchStart(e);\r\n handleTouchStart();\r\n },\r\n onTouchEnd: (e: React.TouchEvent) => {\r\n if (typeof existingProps.onTouchEnd === \"function\")\r\n existingProps.onTouchEnd(e);\r\n handleTouchEnd();\r\n },\r\n onTouchCancel: (e: React.TouchEvent) => {\r\n if (typeof existingProps.onTouchCancel === \"function\")\r\n existingProps.onTouchCancel(e);\r\n handleTouchEnd();\r\n },\r\n },\r\n );\r\n\r\n return (\r\n <span className=\"relative inline-flex\">\r\n {child}\r\n\r\n {/* Desktop tooltip bubble */}\r\n {visible && (\r\n <span\r\n role=\"tooltip\"\r\n className={`${TOOLTIP_CONTENT} ${POSITION[side]}`}\r\n >\r\n {label}\r\n </span>\r\n )}\r\n\r\n {/* Mobile long-press bottom sheet */}\r\n {mobileOpen && (\r\n <span\r\n role=\"presentation\"\r\n className=\"fixed inset-0 z-50 md:hidden\"\r\n onClick={() => setMobileOpen(false)}\r\n >\r\n {/* Backdrop */}\r\n <span\r\n className=\"absolute inset-0 bg-black/40 backdrop-blur-sm\"\r\n aria-hidden=\"true\"\r\n />\r\n {/* Panel */}\r\n <span\r\n role=\"tooltip\"\r\n aria-label={label}\r\n className=\"absolute bottom-0 inset-x-0 flex flex-col items-center gap-2 rounded-t-2xl bg-white dark:bg-zinc-900 border-t border-zinc-200 dark:border-zinc-800 shadow-2xl px-6 py-5 pb-[calc(1.25rem+env(safe-area-inset-bottom,0px))]\"\r\n >\r\n {/* Drag handle */}\r\n <span\r\n className=\"w-10 h-1 rounded-full bg-zinc-300 dark:bg-zinc-600 mb-2\"\r\n aria-hidden=\"true\"\r\n />\r\n <span className=\"text-sm font-medium text-zinc-800 dark:text-zinc-100 text-center\">\r\n {label}\r\n </span>\r\n </span>\r\n </span>\r\n )}\r\n </span>\r\n );\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 interface FormProps extends React.FormHTMLAttributes<HTMLFormElement> {\r\n children: React.ReactNode;\r\n}\r\n\r\n/**\r\n * Semantic `<form>` wrapper. Passes all standard form attributes through.\r\n * Use with `react-hook-form`:\r\n *\r\n * ```tsx\r\n * const { handleSubmit } = useForm();\r\n * <Form onSubmit={handleSubmit(onSubmit)}>\r\n * <FormGrid>...</FormGrid>\r\n * <Button type=\"submit\">Submit</Button>\r\n * </Form>\r\n * ```\r\n */\r\nexport function Form({ children, className = \"\", ...props }: FormProps) {\r\n return (\r\n <form className={className} {...props}>\r\n {children}\r\n </form>\r\n );\r\n}\r\n","import React from \"react\";\nimport { Span } from \"./Typography\";\n\n/**\n * Badge — compact label with ring border variants for status, roles, and categories.\n *\n * Extracted from src/components/ui/Badge.tsx for @mohasinac/ui.\n * Theme values inlined from THEME_CONSTANTS.badge and THEME_CONSTANTS.colors.badge.\n */\n\n// Inlined from THEME_CONSTANTS.badge — full ring-border variants\nconst BADGE_CLASSES = {\n // Status badges\n active:\n \"inline-flex items-center gap-1 px-2.5 py-0.5 text-xs font-semibold rounded-full bg-emerald-50 text-emerald-700 ring-1 ring-emerald-600/20 dark:bg-emerald-900/30 dark:text-emerald-300 dark:ring-emerald-400/20\",\n inactive:\n \"inline-flex items-center gap-1 px-2.5 py-0.5 text-xs font-semibold rounded-full bg-zinc-100 text-zinc-600 ring-1 ring-zinc-500/10 dark:bg-slate-800 dark:text-zinc-400 dark:ring-zinc-400/20\",\n pending:\n \"inline-flex items-center gap-1 px-2.5 py-0.5 text-xs font-semibold rounded-full bg-amber-50 text-amber-700 ring-1 ring-amber-600/20 dark:bg-amber-900/30 dark:text-amber-300 dark:ring-amber-400/20\",\n approved:\n \"inline-flex items-center gap-1 px-2.5 py-0.5 text-xs font-semibold rounded-full bg-emerald-50 text-emerald-700 ring-1 ring-emerald-600/20 dark:bg-emerald-900/30 dark:text-emerald-300 dark:ring-emerald-400/20\",\n rejected:\n \"inline-flex items-center gap-1 px-2.5 py-0.5 text-xs font-semibold rounded-full bg-rose-50 text-rose-700 ring-1 ring-rose-600/20 dark:bg-rose-900/30 dark:text-rose-300 dark:ring-rose-400/20\",\n // Semantic badges\n success:\n \"inline-flex items-center gap-1 px-2.5 py-0.5 text-xs font-semibold rounded-full bg-emerald-50 text-emerald-700 ring-1 ring-emerald-600/20 dark:bg-emerald-900/30 dark:text-emerald-300 dark:ring-emerald-400/20\",\n warning:\n \"inline-flex items-center gap-1 px-2.5 py-0.5 text-xs font-semibold rounded-full bg-amber-50 text-amber-700 ring-1 ring-amber-600/20 dark:bg-amber-900/30 dark:text-amber-300 dark:ring-amber-400/20\",\n danger:\n \"inline-flex items-center gap-1 px-2.5 py-0.5 text-xs font-semibold rounded-full bg-rose-50 text-rose-700 ring-1 ring-rose-600/20 dark:bg-rose-900/30 dark:text-rose-300 dark:ring-rose-400/20\",\n info: \"inline-flex items-center gap-1 px-2.5 py-0.5 text-xs font-semibold rounded-full bg-sky-50 text-sky-700 ring-1 ring-sky-600/20 dark:bg-sky-900/30 dark:text-sky-300 dark:ring-sky-400/20\",\n // Role badges\n admin:\n \"inline-flex items-center gap-1 px-2.5 py-0.5 text-xs font-semibold rounded-full bg-purple-50 text-purple-700 ring-1 ring-purple-600/20 dark:bg-purple-900/30 dark:text-purple-300 dark:ring-purple-400/20\",\n moderator:\n \"inline-flex items-center gap-1 px-2.5 py-0.5 text-xs font-semibold rounded-full bg-sky-50 text-sky-700 ring-1 ring-sky-600/20 dark:bg-sky-900/30 dark:text-sky-300 dark:ring-sky-400/20\",\n seller:\n \"inline-flex items-center gap-1 px-2.5 py-0.5 text-xs font-semibold rounded-full bg-teal-50 text-teal-700 ring-1 ring-teal-600/20 dark:bg-teal-900/30 dark:text-teal-300 dark:ring-teal-400/20\",\n user: \"inline-flex items-center gap-1 px-2.5 py-0.5 text-xs font-semibold rounded-full bg-zinc-100 text-zinc-700 ring-1 ring-zinc-500/10 dark:bg-slate-800 dark:text-zinc-300 dark:ring-zinc-400/20\",\n // Legacy / generic variants\n default:\n \"inline-flex items-center gap-1 px-2.5 py-0.5 text-xs font-semibold rounded-full bg-zinc-100 text-zinc-700 ring-1 ring-zinc-500/10 dark:bg-slate-800 dark:text-zinc-300 dark:ring-zinc-400/20\",\n primary:\n \"inline-flex items-center gap-1 px-2.5 py-0.5 text-xs font-semibold rounded-full bg-primary-100 text-primary-700 dark:bg-primary-900/50 dark:text-primary-300\",\n secondary:\n \"inline-flex items-center gap-1 px-2.5 py-0.5 text-xs font-semibold rounded-full bg-primary-100 text-primary-700 dark:bg-primary-900/50 dark:text-primary-300\",\n} as const;\n\nexport type BadgeVariant = keyof typeof BADGE_CLASSES;\n\nexport interface BadgeProps {\n children: React.ReactNode;\n variant?: BadgeVariant;\n className?: string;\n}\n\nexport function Badge({\n children,\n variant = \"default\",\n className = \"\",\n}: BadgeProps) {\n return (\n <Span className={`${BADGE_CLASSES[variant]} ${className}`}>{children}</Span>\n );\n}\n","import React from \"react\";\nimport { Heading } from \"./Typography\";\nimport { Button } from \"./Button\";\n\n/**\n * Alert — flexible alert/notification with variant icons and optional dismiss.\n *\n * Extracted from src/components/feedback/Alert.tsx for @mohasinac/ui.\n * Theme values inlined from THEME_CONSTANTS.colors.alert and THEME_CONSTANTS.colors.button.\n */\n\n// Inlined from THEME_CONSTANTS.colors.alert\nconst ALERT_STYLES = {\n info: {\n container:\n \"bg-sky-50 border-sky-200/80 dark:bg-sky-950/30 dark:border-sky-800/50\",\n icon: \"text-sky-600 dark:text-sky-400\",\n title: \"text-sky-900 dark:text-sky-200\",\n text: \"text-sky-800 dark:text-sky-300\",\n },\n success: {\n container:\n \"bg-emerald-50 border-emerald-200/80 dark:bg-emerald-950/30 dark:border-emerald-800/50\",\n icon: \"text-emerald-600 dark:text-emerald-400\",\n title: \"text-emerald-900 dark:text-emerald-200\",\n text: \"text-emerald-800 dark:text-emerald-300\",\n },\n warning: {\n container:\n \"bg-amber-50 border-amber-200/80 dark:bg-amber-950/30 dark:border-amber-800/50\",\n icon: \"text-amber-600 dark:text-amber-400\",\n title: \"text-amber-900 dark:text-amber-200\",\n text: \"text-amber-800 dark:text-amber-300\",\n },\n error: {\n container:\n \"bg-red-50 border-red-200/80 dark:bg-red-950/30 dark:border-red-800/50\",\n icon: \"text-red-600 dark:text-red-400\",\n title: \"text-red-900 dark:text-red-200\",\n text: \"text-red-800 dark:text-red-300\",\n },\n} as const;\n\nconst ALERT_CLOSE_HOVER = \"hover:bg-black/5 dark:hover:bg-white/5\";\n\nconst ICONS = {\n info: (\n <svg\n className=\"w-5 h-5\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n success: (\n <svg\n className=\"w-5 h-5\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\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\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n warning: (\n <svg\n className=\"w-5 h-5\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n error: (\n <svg\n className=\"w-5 h-5\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n} as const;\n\nexport interface AlertProps {\n children: React.ReactNode;\n variant?: keyof typeof ALERT_STYLES;\n title?: string;\n onClose?: () => void;\n className?: string;\n}\n\nexport function Alert({\n children,\n variant = \"info\",\n title,\n onClose,\n className = \"\",\n}: AlertProps) {\n const styles = ALERT_STYLES[variant];\n\n return (\n <div\n className={`relative p-4 rounded-xl border ${styles.container} ${className}`}\n role=\"alert\"\n >\n <div className=\"flex gap-3\">\n <div className={`flex-shrink-0 ${styles.icon}`}>{ICONS[variant]}</div>\n\n <div className=\"flex-1 min-w-0\">\n {title && (\n <Heading\n level={3}\n className={`text-sm font-semibold mb-1 ${styles.title}`}\n >\n {title}\n </Heading>\n )}\n <div className={`text-sm ${styles.text}`}>{children}</div>\n </div>\n\n {onClose && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onClose}\n className={`flex-shrink-0 ml-3 rounded-lg p-1.5 min-h-0 ${styles.icon} ${ALERT_CLOSE_HOVER}`}\n aria-label=\"Close\"\n >\n <svg\n className=\"w-5 h-5\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </Button>\n )}\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { Span } from \"./Typography\";\n\n/**\n * Divider — horizontal or vertical visual separator with optional label.\n *\n * Extracted from src/components/ui/Divider.tsx for @mohasinac/ui.\n * Theme values inlined from THEME_CONSTANTS.themed.\n */\n\n// Inlined from THEME_CONSTANTS.themed\nconst BORDER_LIGHT = \"border-zinc-100 dark:border-slate-700/60\";\nconst TEXT_MUTED = \"text-zinc-400 dark:text-zinc-500\";\n\nexport interface DividerProps {\n label?: string;\n orientation?: \"horizontal\" | \"vertical\";\n className?: string;\n}\n\nexport function Divider({\n label,\n orientation = \"horizontal\",\n className = \"\",\n}: DividerProps) {\n if (orientation === \"vertical\") {\n return (\n <div\n className={`w-px h-full border-l ${BORDER_LIGHT} ${className}`}\n role=\"separator\"\n aria-orientation=\"vertical\"\n />\n );\n }\n\n if (label) {\n return (\n <div className={`flex items-center gap-4 ${className}`} role=\"separator\">\n <div className={`flex-1 h-px border-t ${BORDER_LIGHT}`} />\n <Span className={`text-sm font-medium ${TEXT_MUTED}`}>{label}</Span>\n <div className={`flex-1 h-px border-t ${BORDER_LIGHT}`} />\n </div>\n );\n }\n\n return (\n <div\n className={`w-full h-px border-t ${BORDER_LIGHT} ${className}`}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n />\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { Span } from \"./Typography\";\n\n/**\n * Progress / IndeterminateProgress — deterministic and animated loading bars.\n *\n * Extracted from src/components/ui/Progress.tsx for @mohasinac/ui.\n * Theme values inlined; styled-jsx replaced with plain <style> element.\n */\n\n// Inlined from THEME_CONSTANTS\nconst TEXT_PRIMARY = \"text-zinc-900 dark:text-zinc-50\";\nconst TEXT_SECONDARY = \"text-zinc-500 dark:text-zinc-400\";\nconst BG_SECONDARY = \"bg-zinc-50 dark:bg-slate-900\";\nconst FLEX_BETWEEN = \"flex items-center justify-between\";\nconst INDETERMINATE_CSS = `\n@keyframes appkit-progress-indeterminate {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(350%); }\n}\n.appkit-progress-indeterminate {\n animation: appkit-progress-indeterminate 1.5s ease-in-out infinite;\n}\n`;\n\nexport interface ProgressProps {\n value: number;\n max?: number;\n variant?: \"primary\" | \"success\" | \"warning\" | \"error\";\n size?: \"sm\" | \"md\" | \"lg\";\n label?: string;\n showValue?: boolean;\n className?: string;\n}\n\nexport function Progress({\n value,\n max = 100,\n variant = \"primary\",\n size = \"md\",\n label,\n showValue = false,\n className = \"\",\n}: ProgressProps) {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n\n const sizeClasses: Record<NonNullable<ProgressProps[\"size\"]>, string> = {\n sm: \"h-1\",\n md: \"h-2\",\n lg: \"h-3\",\n };\n\n const variantClasses: Record<\n NonNullable<ProgressProps[\"variant\"]>,\n string\n > = {\n primary: \"bg-primary\",\n success: \"bg-green-600 dark:bg-green-500\",\n warning: \"bg-yellow-600 dark:bg-yellow-500\",\n error: \"bg-red-600 dark:bg-red-500\",\n };\n\n return (\n <div className={className}>\n {(label || showValue) && (\n <div className={`${FLEX_BETWEEN} mb-2`}>\n {label && (\n <Span className={`text-sm font-medium ${TEXT_PRIMARY}`}>\n {label}\n </Span>\n )}\n {showValue && (\n <Span className={`text-sm font-medium ${TEXT_SECONDARY}`}>\n {Math.round(percentage)}%\n </Span>\n )}\n </div>\n )}\n\n <div\n className={`w-full ${sizeClasses[size]} rounded-full overflow-hidden ${BG_SECONDARY}`}\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label={label || `Progress: ${Math.round(percentage)}%`}\n >\n <div\n className={`h-full ${variantClasses[variant]} transition-all duration-300 ease-in-out rounded-full`}\n style={{ width: `${percentage}%` }}\n />\n </div>\n </div>\n );\n}\n\n// ─── IndeterminateProgress ─────────────────────────────────────────────────\n\nexport interface IndeterminateProgressProps {\n variant?: \"primary\" | \"success\" | \"warning\" | \"error\";\n size?: \"sm\" | \"md\" | \"lg\";\n label?: string;\n className?: string;\n}\n\nexport function IndeterminateProgress({\n variant = \"primary\",\n size = \"md\",\n label,\n className = \"\",\n}: IndeterminateProgressProps) {\n const sizeClasses: Record<\n NonNullable<IndeterminateProgressProps[\"size\"]>,\n string\n > = {\n sm: \"h-1\",\n md: \"h-2\",\n lg: \"h-3\",\n };\n\n const variantClasses: Record<\n NonNullable<IndeterminateProgressProps[\"variant\"]>,\n string\n > = {\n primary: \"bg-primary\",\n success: \"bg-green-600 dark:bg-green-500\",\n warning: \"bg-yellow-600 dark:bg-yellow-500\",\n error: \"bg-red-600 dark:bg-red-500\",\n };\n\n return (\n <div className={className}>\n <style dangerouslySetInnerHTML={{ __html: INDETERMINATE_CSS }} />\n {label && (\n <Span className={`block text-sm font-medium mb-2 ${TEXT_PRIMARY}`}>\n {label}\n </Span>\n )}\n\n <div\n className={`w-full ${sizeClasses[size]} rounded-full overflow-hidden ${BG_SECONDARY} relative`}\n role=\"progressbar\"\n aria-label={label || \"Loading...\"}\n >\n <div\n className={`absolute inset-0 ${variantClasses[variant]} appkit-progress-indeterminate rounded-full`}\n style={{ width: \"40%\" }}\n />\n </div>\n </div>\n );\n}\n","/**\r\n * Table, pagination and sticky-header configuration types.\r\n *\r\n * Every table/list view in every feat-* package accepts these config objects.\r\n * Apps can spread-merge over the exported defaults to override only what they need:\r\n *\r\n * @example\r\n * // App-level base config (one file, reused everywhere)\r\n * import { DEFAULT_TABLE_CONFIG, DEFAULT_PAGINATION_CONFIG } from \"@mohasinac/contracts\";\r\n *\r\n * export const myTableConfig: TableConfig = {\r\n * ...DEFAULT_TABLE_CONFIG,\r\n * pageSize: 10,\r\n * showViewToggle: true,\r\n * };\r\n *\r\n * export const myPaginationConfig: PaginationConfig = {\r\n * ...DEFAULT_PAGINATION_CONFIG,\r\n * perPage: 10,\r\n * showPageSizeSelector: true,\r\n * pageSizeOptions: [10, 25, 50],\r\n * };\r\n *\r\n * // In a component\r\n * <DataTable tableConfig={myTableConfig} paginationConfig={myPaginationConfig} ... />\r\n *\r\n * // In a hook\r\n * const { products } = useProducts(params, { paginationConfig: myPaginationConfig });\r\n */\r\n\r\n// ─── Pagination ────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Composable pagination configuration.\r\n * All fields are optional so apps can spread-merge over the defaults.\r\n */\r\nexport interface PaginationConfig {\r\n /** Items per page sent to the API. Default: 20 */\r\n perPage?: number;\r\n /** Hard cap on perPage (for page-size selector). Default: 100 */\r\n maxPerPage?: number;\r\n /** Show a page-size selector UI element. Default: false */\r\n showPageSizeSelector?: boolean;\r\n /** Options for the page-size selector. Default: [10, 20, 50, 100] */\r\n pageSizeOptions?: number[];\r\n /** Show first / last page buttons. Default: true */\r\n showFirstLast?: boolean;\r\n /** Show previous / next buttons. Default: true */\r\n showPrevNext?: boolean;\r\n /** Max visible page number buttons before ellipsis. Default: 7 */\r\n maxVisible?: number;\r\n /** Size variant for pagination button sizing. Default: \"md\" */\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n}\r\n\r\nexport const DEFAULT_PAGINATION_CONFIG: Required<PaginationConfig> = {\r\n perPage: 20,\r\n maxPerPage: 100,\r\n showPageSizeSelector: false,\r\n pageSizeOptions: [10, 20, 50, 100],\r\n showFirstLast: true,\r\n showPrevNext: true,\r\n maxVisible: 7,\r\n size: \"md\",\r\n};\r\n\r\n// ─── Sticky header ─────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Sticky header configuration for data tables.\r\n * When `enabled` is true the thead is pinned while the tbody scrolls.\r\n */\r\nexport interface StickyConfig {\r\n /** Pin the header while the body scrolls. Default: false */\r\n enabled?: boolean;\r\n /** Tailwind `top-*` class applied to the sticky thead. Default: \"top-0\" */\r\n topOffset?: string;\r\n /** Max height of the scrollable container. Default: \"600px\" */\r\n maxHeight?: string;\r\n /** z-index of the sticky header. Default: 10 */\r\n zIndex?: number;\r\n}\r\n\r\nexport const DEFAULT_STICKY_CONFIG: Required<StickyConfig> = {\r\n enabled: false,\r\n topOffset: \"top-0\",\r\n maxHeight: \"600px\",\r\n zIndex: 10,\r\n};\r\n\r\n// ─── Table ─────────────────────────────────────────────────────────────────────\r\n\r\n/** View mode options for DataTable. */\r\nexport type TableViewMode = \"table\" | \"grid\" | \"list\";\r\n\r\n/**\r\n * Composable table configuration.\r\n * Pass a Partial<TableConfig> to any DataTable / admin-list hook; values are\r\n * deep-merged with DEFAULT_TABLE_CONFIG at the use site.\r\n */\r\nexport interface TableConfig {\r\n /** Items shown per page (internal pagination). Default: 20 */\r\n pageSize?: number;\r\n /** Sticky header behaviour. Default: disabled */\r\n sticky?: StickyConfig;\r\n /** Alternate row background colour. Default: false */\r\n striped?: boolean;\r\n /** Enable row checkbox selection. Default: false */\r\n selectable?: boolean;\r\n /** Show view-mode toggle (table / grid / list). Default: false */\r\n showViewToggle?: boolean;\r\n /** Default view mode. Default: \"table\" */\r\n defaultViewMode?: TableViewMode;\r\n /** Pagination widget configuration. */\r\n pagination?: PaginationConfig;\r\n}\r\n\r\nexport const DEFAULT_TABLE_CONFIG: {\r\n pageSize: number;\r\n sticky: Required<StickyConfig>;\r\n striped: boolean;\r\n selectable: boolean;\r\n showViewToggle: boolean;\r\n defaultViewMode: TableViewMode;\r\n pagination: Required<PaginationConfig>;\r\n} = {\r\n pageSize: DEFAULT_PAGINATION_CONFIG.perPage,\r\n sticky: DEFAULT_STICKY_CONFIG,\r\n striped: false,\r\n selectable: false,\r\n showViewToggle: false,\r\n defaultViewMode: \"table\",\r\n pagination: DEFAULT_PAGINATION_CONFIG,\r\n};\r\n\r\n/**\r\n * Utility: merge a Partial<TableConfig> over the defaults.\r\n * Performs a shallow merge at the top level and deep merge for nested objects.\r\n */\r\nexport function mergeTableConfig(override?: Partial<TableConfig>): typeof DEFAULT_TABLE_CONFIG {\r\n if (!override) return DEFAULT_TABLE_CONFIG;\r\n return {\r\n ...DEFAULT_TABLE_CONFIG,\r\n ...override,\r\n sticky: { ...DEFAULT_STICKY_CONFIG, ...override.sticky },\r\n pagination: { ...DEFAULT_PAGINATION_CONFIG, ...override.pagination },\r\n };\r\n}\r\n","\"use client\";\n\nimport React from \"react\";\nimport type { PaginationConfig } from \"@mohasinac/contracts\";\nimport { DEFAULT_PAGINATION_CONFIG } from \"@mohasinac/contracts\";\n\n/**\n * Pagination — smart ellipsis pagination with prev/next chevrons.\n *\n * Accepts either individual props OR a `paginationConfig` object\n * (merged with DEFAULT_PAGINATION_CONFIG). Individual props take precedence.\n */\n\nexport interface PaginationProps {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n /**\n * Composable pagination config. Merged with DEFAULT_PAGINATION_CONFIG.\n * Individual flat props override this.\n */\n paginationConfig?: Partial<PaginationConfig>;\n /** Max visible page buttons before ellipsis kicks in. Default: 7 */\n maxVisible?: number;\n showFirstLast?: boolean;\n showPrevNext?: boolean;\n disabled?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nfunction getPageNumbers(\n currentPage: number,\n totalPages: number,\n maxVisible: number,\n): (number | \"...\")[] {\n if (totalPages <= maxVisible) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const pages: (number | \"...\")[] = [];\n const halfVisible = Math.floor(maxVisible / 2);\n\n let startPage = Math.max(1, currentPage - halfVisible);\n let endPage = Math.min(totalPages, currentPage + halfVisible);\n\n if (currentPage <= halfVisible) endPage = maxVisible;\n if (currentPage >= totalPages - halfVisible)\n startPage = totalPages - maxVisible + 1;\n\n if (startPage > 1) {\n pages.push(1);\n if (startPage > 2) pages.push(\"...\");\n }\n for (let i = startPage; i <= endPage; i++) pages.push(i);\n if (endPage < totalPages) {\n if (endPage < totalPages - 1) pages.push(\"...\");\n pages.push(totalPages);\n }\n return pages;\n}\n\nconst SIZE_CLASSES = {\n sm: \"text-xs px-2 py-1 min-w-[28px]\",\n md: \"text-sm px-3 py-1.5 min-w-[36px]\",\n lg: \"text-base px-4 py-2 min-w-[44px]\",\n} as const;\n\nexport function Pagination({\n currentPage,\n totalPages,\n onPageChange,\n paginationConfig,\n maxVisible: maxVisibleProp,\n showFirstLast: showFirstLastProp,\n showPrevNext: showPrevNextProp,\n disabled = false,\n size: sizeProp,\n className = \"\",\n}: PaginationProps) {\n const resolved = { ...DEFAULT_PAGINATION_CONFIG, ...paginationConfig };\n const maxVisible = maxVisibleProp ?? resolved.maxVisible;\n const showFirstLast = showFirstLastProp ?? resolved.showFirstLast;\n const showPrevNext = showPrevNextProp ?? resolved.showPrevNext;\n const size = sizeProp ?? resolved.size;\n const handle = (page: number) => {\n if (disabled || page < 1 || page > totalPages || page === currentPage)\n return;\n onPageChange(page);\n };\n\n const btnClass = (active: boolean, off: boolean) => {\n const base = `${SIZE_CLASSES[size]} rounded border font-medium transition-colors`;\n if (off)\n return `${base} bg-zinc-100 dark:bg-slate-800 opacity-50 text-zinc-400 dark:text-zinc-500 border-zinc-200 dark:border-slate-700 cursor-not-allowed`;\n if (active)\n return `${base} bg-primary-600 text-white border-primary-600 cursor-default`;\n return `${base} bg-white dark:bg-slate-900 text-zinc-700 dark:text-zinc-300 border-zinc-200 dark:border-slate-700 hover:bg-zinc-50 dark:hover:bg-slate-800 hover:border-zinc-300 dark:hover:border-slate-600 cursor-pointer`;\n };\n\n const pages = getPageNumbers(currentPage, totalPages, maxVisible);\n\n return (\n <nav\n className={`flex items-center gap-1 ${className}`}\n aria-label=\"Pagination\"\n >\n {showFirstLast && (\n <button\n type=\"button\"\n className={btnClass(false, disabled || currentPage === 1)}\n onClick={() => handle(1)}\n disabled={disabled || currentPage === 1}\n aria-label=\"First page\"\n >\n «\n </button>\n )}\n {showPrevNext && (\n <button\n type=\"button\"\n className={btnClass(false, disabled || currentPage === 1)}\n onClick={() => handle(currentPage - 1)}\n disabled={disabled || currentPage === 1}\n aria-label=\"Previous page\"\n >\n ‹\n </button>\n )}\n\n {pages.map((page, i) =>\n page === \"...\" ? (\n <span\n key={`ellipsis-${i}`}\n className={`${SIZE_CLASSES[size]} text-zinc-400 dark:text-zinc-500 text-center`}\n aria-hidden=\"true\"\n >\n …\n </span>\n ) : (\n <button\n key={page}\n type=\"button\"\n className={btnClass(\n page === currentPage,\n disabled && page !== currentPage,\n )}\n onClick={() => handle(page)}\n disabled={disabled}\n aria-label={`Page ${page}`}\n aria-current={page === currentPage ? \"page\" : undefined}\n >\n {page}\n </button>\n ),\n )}\n\n {showPrevNext && (\n <button\n type=\"button\"\n className={btnClass(false, disabled || currentPage === totalPages)}\n onClick={() => handle(currentPage + 1)}\n disabled={disabled || currentPage === totalPages}\n aria-label=\"Next page\"\n >\n ›\n </button>\n )}\n {showFirstLast && (\n <button\n type=\"button\"\n className={btnClass(false, disabled || currentPage === totalPages)}\n onClick={() => handle(totalPages)}\n disabled={disabled || currentPage === totalPages}\n aria-label=\"Last page\"\n >\n »\n </button>\n )}\n </nav>\n );\n}\n","import React from \"react\";\nimport { Badge } from \"./Badge\";\n\n/**\n * StatusBadge — semantic color map for order/payment/review/ticket status strings.\n *\n * Wraps @mohasinac/ui Badge with a pre-defined status → variant mapping.\n * No app-specific imports.\n */\n\nexport type OrderStatus =\n | \"pending\"\n | \"confirmed\"\n | \"processing\"\n | \"shipped\"\n | \"delivered\"\n | \"cancelled\"\n | \"refunded\"\n | \"failed\";\n\nexport type PaymentStatus =\n | \"pending\"\n | \"paid\"\n | \"failed\"\n | \"refunded\"\n | \"partially_refunded\";\n\nexport type ReviewStatus = \"pending\" | \"approved\" | \"rejected\";\n\nexport type TicketStatus = \"open\" | \"in_progress\" | \"resolved\" | \"closed\";\n\nexport type GenericStatus =\n | \"active\"\n | \"inactive\"\n | \"pending\"\n | \"approved\"\n | \"rejected\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\";\n\nexport type StatusBadgeStatus =\n | OrderStatus\n | PaymentStatus\n | ReviewStatus\n | TicketStatus\n | GenericStatus;\n\nexport interface StatusBadgeProps {\n status: StatusBadgeStatus;\n label?: string;\n className?: string;\n}\n\ntype BadgeVariantKey =\n | \"active\"\n | \"inactive\"\n | \"pending\"\n | \"approved\"\n | \"rejected\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\"\n | \"default\";\n\nconst STATUS_TO_VARIANT: Record<string, BadgeVariantKey> = {\n // Generic\n active: \"active\",\n inactive: \"inactive\",\n pending: \"pending\",\n approved: \"approved\",\n rejected: \"rejected\",\n success: \"success\",\n warning: \"warning\",\n danger: \"danger\",\n info: \"info\",\n // Order\n confirmed: \"success\",\n processing: \"info\",\n shipped: \"info\",\n delivered: \"success\",\n cancelled: \"danger\",\n refunded: \"warning\",\n failed: \"danger\",\n // Payment\n paid: \"success\",\n partially_refunded: \"warning\",\n // Review (pending/approved/rejected already covered)\n // Ticket\n open: \"warning\",\n in_progress: \"info\",\n resolved: \"success\",\n closed: \"inactive\",\n};\n\nconst STATUS_LABELS: Record<string, string> = {\n active: \"Active\",\n inactive: \"Inactive\",\n pending: \"Pending\",\n approved: \"Approved\",\n rejected: \"Rejected\",\n success: \"Success\",\n warning: \"Warning\",\n danger: \"Danger\",\n info: \"Info\",\n confirmed: \"Confirmed\",\n processing: \"Processing\",\n shipped: \"Shipped\",\n delivered: \"Delivered\",\n cancelled: \"Cancelled\",\n refunded: \"Refunded\",\n failed: \"Failed\",\n paid: \"Paid\",\n partially_refunded: \"Partially Refunded\",\n open: \"Open\",\n in_progress: \"In Progress\",\n resolved: \"Resolved\",\n closed: \"Closed\",\n};\n\nexport function StatusBadge({ status, label, className }: StatusBadgeProps) {\n const variant = STATUS_TO_VARIANT[status] ?? \"default\";\n const displayLabel = label ?? STATUS_LABELS[status] ?? status;\n return (\n <Badge variant={variant} className={className}>\n {displayLabel}\n </Badge>\n );\n}\n","\"use client\";\n\nimport React, { useCallback, useEffect, useId, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { X } from \"lucide-react\";\nimport { Heading } from \"./Typography\";\nimport { Button } from \"./Button\";\n\n/**\n * Modal — centered dialog with backdrop, multiple sizes, ESC-to-close, and scroll lock.\n *\n * Standalone @mohasinac/ui primitive. No app-specific imports.\n * Renders via React Portal for correct z-index layering.\n */\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n children: React.ReactNode;\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n showCloseButton?: boolean;\n /** Additional classNames for the modal panel */\n className?: string;\n}\n\nconst SIZE_CLASSES: Record<NonNullable<ModalProps[\"size\"]>, string> = {\n sm: \"max-w-sm\",\n md: \"max-w-lg\",\n lg: \"max-w-2xl\",\n xl: \"max-w-4xl\",\n full: \"max-w-[95vw] max-h-[95vh]\",\n};\n\nexport function Modal({\n isOpen,\n onClose,\n title,\n children,\n size = \"md\",\n showCloseButton = true,\n className = \"\",\n}: ModalProps) {\n const titleId = useId();\n const panelRef = useRef<HTMLDivElement>(null);\n const prevFocusRef = useRef<HTMLElement | null>(null);\n\n // Lock body scroll while open\n useEffect(() => {\n if (!isOpen) return;\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = prev;\n };\n }, [isOpen]);\n\n // Restore focus on close\n useEffect(() => {\n if (isOpen) {\n prevFocusRef.current = document.activeElement as HTMLElement;\n // Focus the panel itself so ESC works immediately\n requestAnimationFrame(() => panelRef.current?.focus());\n } else {\n prevFocusRef.current?.focus();\n }\n }, [isOpen]);\n\n // Trap focus inside modal\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Escape\") {\n onClose();\n return;\n }\n if (e.key !== \"Tab\") return;\n const panel = panelRef.current;\n if (!panel) return;\n const focusable = Array.from(\n panel.querySelectorAll<HTMLElement>(\n 'a[href],button:not([disabled]),textarea,input,select,[tabindex]:not([tabindex=\"-1\"])',\n ),\n );\n if (!focusable.length) return;\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n if (e.shiftKey && document.activeElement === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n },\n [onClose],\n );\n\n if (!isOpen) return null;\n if (typeof document === \"undefined\") return null;\n\n return createPortal(\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center p-4\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n onKeyDown={handleKeyDown}\n >\n {/* Backdrop */}\n <div\n className=\"absolute inset-0 bg-black/60 backdrop-blur-sm\"\n aria-hidden=\"true\"\n onClick={onClose}\n />\n\n {/* Panel */}\n <div\n ref={panelRef}\n tabIndex={-1}\n className={[\n \"relative w-full rounded-2xl bg-white dark:bg-slate-900\",\n \"shadow-2xl ring-1 ring-zinc-200 dark:ring-slate-700\",\n \"flex flex-col max-h-[90vh] overflow-hidden\",\n \"animate-[fadeInUp_0.15s_ease_forwards]\",\n SIZE_CLASSES[size],\n className,\n ].join(\" \")}\n >\n {/* Header */}\n {(title || showCloseButton) && (\n <div className=\"flex items-center justify-between px-6 py-4 border-b border-zinc-100 dark:border-slate-800 flex-shrink-0\">\n {title && (\n <Heading\n level={2}\n id={titleId}\n className=\"!text-lg !font-semibold !font-sans tracking-tight\"\n >\n {title}\n </Heading>\n )}\n {showCloseButton && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n onClick={onClose}\n className=\"ml-auto p-1.5 !min-h-0 rounded-lg text-zinc-400 hover:text-zinc-600 dark:text-zinc-500 dark:hover:text-zinc-300\"\n aria-label=\"Close\"\n >\n <X className=\"w-5 h-5\" />\n </Button>\n )}\n </div>\n )}\n\n {/* Scrollable body */}\n <div className=\"overflow-y-auto flex-1 px-6 py-4\">{children}</div>\n </div>\n </div>,\n document.body,\n );\n}\n","\"use client\";\n\nimport React, { useCallback, useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { X } from \"lucide-react\";\nimport { Heading } from \"./Typography\";\nimport { Button } from \"./Button\";\n\n/**\n * Drawer — slide-in panel from left, right, or bottom.\n *\n * Standalone @mohasinac/ui primitive. No app-specific imports.\n * Bottom variant gets `rounded-t-2xl` and can be swipe-dismissed via drag handle.\n */\n\nexport interface DrawerProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n children: React.ReactNode;\n footer?: React.ReactNode;\n side?: \"left\" | \"right\" | \"bottom\";\n /** Width for left/right drawers. Default: 'md' */\n size?: \"sm\" | \"md\" | \"lg\" | \"full\";\n showCloseButton?: boolean;\n className?: string;\n}\n\nconst SIDE_TRANSLATE = {\n left: {\n closed: \"-translate-x-full\",\n open: \"translate-x-0\",\n base: \"left-0 top-0 bottom-0\",\n },\n right: {\n closed: \"translate-x-full\",\n open: \"translate-x-0\",\n base: \"right-0 top-0 bottom-0\",\n },\n bottom: {\n closed: \"translate-y-full\",\n open: \"translate-y-0\",\n base: \"bottom-0 left-0 right-0\",\n },\n} as const;\n\nconst SIDE_SIZE: Record<\"sm\" | \"md\" | \"lg\" | \"full\", string> = {\n sm: \"w-72\",\n md: \"w-80 sm:w-96\",\n lg: \"w-full sm:w-[480px]\",\n full: \"w-full\",\n};\n\nexport function Drawer({\n isOpen,\n onClose,\n title,\n children,\n footer,\n side = \"right\",\n size = \"md\",\n showCloseButton = true,\n className = \"\",\n}: DrawerProps) {\n const panelRef = useRef<HTMLDivElement>(null);\n const prevFocusRef = useRef<HTMLElement | null>(null);\n\n // Body scroll lock\n useEffect(() => {\n if (!isOpen) return;\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = prev;\n };\n }, [isOpen]);\n\n // Focus management\n useEffect(() => {\n if (isOpen) {\n prevFocusRef.current = document.activeElement as HTMLElement;\n requestAnimationFrame(() => panelRef.current?.focus());\n } else {\n prevFocusRef.current?.focus();\n }\n }, [isOpen]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n },\n [onClose],\n );\n\n const { closed, open, base } = SIDE_TRANSLATE[side];\n const isBottom = side === \"bottom\";\n\n if (typeof document === \"undefined\") return null;\n\n return createPortal(\n <div\n className={`fixed inset-0 z-50 ${isOpen ? \"pointer-events-auto\" : \"pointer-events-none\"}`}\n onKeyDown={handleKeyDown}\n >\n {/* Backdrop */}\n <div\n className={`absolute inset-0 bg-black/50 backdrop-blur-sm transition-opacity duration-300 ${isOpen ? \"opacity-100\" : \"opacity-0\"}`}\n aria-hidden=\"true\"\n onClick={onClose}\n />\n\n {/* Panel */}\n <div\n ref={panelRef}\n tabIndex={-1}\n role=\"dialog\"\n aria-modal=\"true\"\n className={[\n \"absolute bg-white dark:bg-slate-900\",\n \"shadow-2xl ring-1 ring-zinc-200 dark:ring-slate-700\",\n \"flex flex-col\",\n \"transition-transform duration-300 ease-out\",\n base,\n isBottom ? \"rounded-t-2xl max-h-[90vh]\" : `${SIDE_SIZE[size]} h-full`,\n isOpen ? open : closed,\n className,\n ].join(\" \")}\n >\n {/* Drag handle (bottom drawer only) */}\n {isBottom && (\n <div className=\"flex justify-center pt-3 pb-1 flex-shrink-0\">\n <div\n className=\"w-10 h-1 rounded-full bg-zinc-300 dark:bg-slate-600\"\n aria-hidden=\"true\"\n />\n </div>\n )}\n\n {/* Header */}\n {(title || showCloseButton) && (\n <div className=\"flex items-center justify-between px-5 py-4 border-b border-zinc-100 dark:border-slate-800 flex-shrink-0\">\n {title && (\n <Heading\n level={2}\n className=\"!text-base !font-semibold !font-sans\"\n >\n {title}\n </Heading>\n )}\n {showCloseButton && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n onClick={onClose}\n className=\"ml-auto p-1.5 !min-h-0 rounded-lg text-zinc-400 hover:text-zinc-700 dark:text-zinc-500 dark:hover:text-zinc-300\"\n aria-label=\"Close\"\n >\n <X className=\"w-5 h-5\" />\n </Button>\n )}\n </div>\n )}\n\n {/* Scrollable body */}\n <div className=\"flex-1 overflow-y-auto px-5 py-4\">{children}</div>\n\n {/* Footer */}\n {footer && (\n <div className=\"flex-shrink-0 border-t border-zinc-100 dark:border-slate-800 px-5 py-4\">\n {footer}\n </div>\n )}\n </div>\n </div>,\n document.body,\n );\n}\n","\"use client\";\n\nimport React, { useCallback, useEffect, useId, useRef, useState } from \"react\";\nimport { Check, ChevronDown } from \"lucide-react\";\nimport { Label, Span, Text } from \"./Typography\";\nimport { Ul, Li } from \"./Semantic\";\nimport { Button } from \"./Button\";\n\n/**\n * Select — accessible combobox with label, error state, and disabled support.\n *\n * Standalone @mohasinac/ui primitive. No app-specific imports.\n */\n\nexport interface SelectOption<V = string> {\n label: string;\n value: V;\n disabled?: boolean;\n}\n\nexport interface SelectProps<V extends string = string> {\n options: SelectOption<V>[];\n value?: V;\n onChange?: (value: V) => void;\n placeholder?: string;\n label?: string;\n error?: string;\n disabled?: boolean;\n required?: boolean;\n className?: string;\n id?: string;\n}\n\nexport function Select<V extends string = string>({\n options,\n value,\n onChange,\n placeholder = \"Select…\",\n label,\n error,\n disabled = false,\n required,\n className = \"\",\n id: externalId,\n}: SelectProps<V>) {\n const generatedId = useId();\n const id = externalId ?? generatedId;\n const [open, setOpen] = useState(false);\n const [openUp, setOpenUp] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n const selected = options.find((o) => o.value === value);\n\n const toggle = useCallback(() => {\n if (!disabled) {\n if (!open && ref.current) {\n const rect = ref.current.getBoundingClientRect();\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n setOpenUp(spaceBelow < 160 && spaceAbove > spaceBelow);\n }\n setOpen((v) => !v);\n }\n }, [disabled, open]);\n\n const handleSelect = useCallback(\n (val: V) => {\n onChange?.(val);\n setOpen(false);\n },\n [onChange],\n );\n\n // Close on outside click\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setOpen(false);\n }\n };\n if (open) document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open]);\n\n // Keyboard navigation\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setOpen(false);\n return;\n }\n if (e.key === \"Enter\" || e.key === \" \") {\n toggle();\n e.preventDefault();\n return;\n }\n if (e.key === \"ArrowDown\" && !open) {\n setOpen(true);\n e.preventDefault();\n return;\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n const idx = options.findIndex((o) => o.value === value);\n const next = options\n .slice(idx < 0 ? 0 : idx + 1)\n .find((o) => !o.disabled);\n if (next) onChange?.(next.value);\n }\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n const idx = options.findIndex((o) => o.value === value);\n if (idx < 0) return;\n const prev = [...options]\n .slice(0, idx)\n .reverse()\n .find((o) => !o.disabled);\n if (prev) onChange?.(prev.value);\n }\n },\n [open, options, value, onChange, toggle],\n );\n\n const triggerClass = [\n \"flex h-10 w-full items-center justify-between rounded-lg border px-3 py-2 text-sm\",\n \"transition-colors bg-white dark:bg-slate-800/60\",\n \"focus:outline-none focus:ring-2 focus:ring-offset-0\",\n error\n ? \"border-red-400 dark:border-red-500 focus:ring-red-500/20\"\n : \"border-zinc-200 dark:border-slate-700 focus:ring-primary-500/20 dark:focus:ring-secondary-400/20 focus:border-primary-500 dark:focus:border-secondary-400\",\n disabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n className,\n ].join(\" \");\n\n return (\n <div ref={ref} className=\"relative w-full\">\n {label && (\n <Label\n htmlFor={id}\n className=\"!text-zinc-700 dark:!text-zinc-300\"\n required={required}\n >\n {label}\n </Label>\n )}\n\n <Button\n id={id}\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-disabled={disabled}\n disabled={disabled}\n variant=\"ghost\"\n className={triggerClass}\n onClick={toggle}\n onKeyDown={handleKeyDown}\n >\n <Span\n className={\n selected\n ? \"text-zinc-900 dark:text-zinc-50\"\n : \"text-zinc-400 dark:text-zinc-500\"\n }\n >\n {selected?.label ?? placeholder}\n </Span>\n <ChevronDown\n className={`h-4 w-4 flex-shrink-0 text-zinc-400 transition-transform duration-200 ${open ? \"rotate-180\" : \"\"}`}\n aria-hidden=\"true\"\n />\n </Button>\n\n {open && (\n <Ul\n role=\"listbox\"\n className={[\n \"absolute z-50 w-full overflow-auto rounded-lg border border-zinc-200 dark:border-slate-700 bg-white dark:bg-slate-800 shadow-lg max-h-60 py-1\",\n openUp ? \"bottom-full mb-1\" : \"top-full mt-1\",\n ].join(\" \")}\n >\n {options.map((option) => {\n const isSelected = option.value === value;\n return (\n <Li\n key={option.value}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n className={[\n \"relative flex cursor-pointer items-center px-3 py-2 text-sm select-none\",\n option.disabled\n ? \"opacity-40 cursor-not-allowed\"\n : isSelected\n ? \"bg-primary-50 dark:bg-primary-900/20 text-primary-700 dark:text-primary-300\"\n : \"text-zinc-700 dark:text-zinc-300 hover:bg-zinc-50 dark:hover:bg-slate-700\",\n ].join(\" \")}\n onClick={() => !option.disabled && handleSelect(option.value)}\n >\n <Span className=\"flex-1\">{option.label}</Span>\n {isSelected && (\n <Check\n className=\"h-4 w-4 ml-2 flex-shrink-0\"\n aria-hidden=\"true\"\n />\n )}\n </Li>\n );\n })}\n </Ul>\n )}\n\n {error && (\n <Text size=\"xs\" variant=\"error\" className=\"mt-1.5\" role=\"alert\">\n {error}\n </Text>\n )}\n </div>\n );\n}\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","import React from \"react\";\r\n\r\nexport interface SliderProps {\r\n value?: number;\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n onChange?: (value: number) => void;\r\n className?: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport function Slider({\r\n value = 0,\r\n min = 0,\r\n max = 100,\r\n step = 1,\r\n onChange,\r\n className = \"\",\r\n disabled = false,\r\n}: SliderProps) {\r\n return (\r\n <input\r\n type=\"range\"\r\n min={min}\r\n max={max}\r\n step={step}\r\n value={value}\r\n disabled={disabled}\r\n onChange={(e) => onChange?.(Number(e.target.value))}\r\n className={[\"w-full accent-primary dark:accent-secondary\", className]\r\n .filter(Boolean)\r\n .join(\" \")}\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\";\nimport { ChevronRight } from \"lucide-react\";\nimport { Nav, Ol, Li } from \"./Semantic\";\nimport { Span } from \"./Typography\";\n\n/**\n * Breadcrumb — accessible navigation trail with ChevronRight separators.\n *\n * Standalone @mohasinac/ui primitive. No app-specific imports.\n * Last item is displayed with `font-medium` (non-link, current page).\n */\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\nexport interface BreadcrumbProps {\n items: BreadcrumbItem[];\n className?: string;\n}\n\nexport function Breadcrumb({ items, className = \"\" }: BreadcrumbProps) {\n return (\n <Nav aria-label=\"Breadcrumb\" className={className}>\n <Ol className=\"flex items-center gap-1 flex-wrap text-sm text-zinc-500 dark:text-zinc-400\">\n {items.map((item, i) => {\n const isLast = i === items.length - 1;\n return (\n <Li key={i} className=\"flex items-center gap-1\">\n {i > 0 && (\n <ChevronRight\n className=\"w-3.5 h-3.5 flex-shrink-0 text-zinc-400 dark:text-zinc-600\"\n aria-hidden=\"true\"\n />\n )}\n {isLast || !item.href ? (\n <Span\n className={\n isLast\n ? \"font-medium text-zinc-900 dark:text-zinc-50\"\n : \"text-zinc-500 dark:text-zinc-400\"\n }\n aria-current={isLast ? \"page\" : undefined}\n >\n {item.label}\n </Span>\n ) : (\n <a\n href={item.href}\n className=\"hover:text-primary-600 dark:hover:text-primary-400 transition-colors\"\n >\n {item.label}\n </a>\n )}\n </Li>\n );\n })}\n </Ol>\n </Nav>\n );\n}\n","\"use client\";\n\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { ChevronLeft, ChevronRight, X, ZoomIn } from \"lucide-react\";\nimport { Button } from \"./Button\";\nimport { Text, Span } from \"./Typography\";\n\n/**\n * ImageLightbox — full-screen image overlay with keyboard navigation.\n *\n * Standalone @mohasinac/ui primitive. No app-specific imports.\n * Navigation: ← / → arrow keys, Esc to close. Displays item counter.\n *\n * Uses a standard <img> tag for framework portability.\n * In a Next.js app, callers may swap src with a blurDataURL if desired.\n */\n\nexport interface LightboxImage {\n src: string;\n alt?: string;\n caption?: string;\n}\n\nexport interface ImageLightboxProps {\n images: LightboxImage[];\n /** The index to open. Pass `null` or `-1` to close. */\n activeIndex: number | null;\n onClose: () => void;\n onNavigate?: (index: number) => void;\n}\n\nexport function ImageLightbox({\n images,\n activeIndex,\n onClose,\n onNavigate,\n}: ImageLightboxProps) {\n const [currentIndex, setCurrentIndex] = useState(activeIndex ?? 0);\n const overlayRef = useRef<HTMLDivElement>(null);\n\n // Sync external activeIndex\n useEffect(() => {\n if (activeIndex !== null && activeIndex >= 0) {\n setCurrentIndex(activeIndex);\n }\n }, [activeIndex]);\n\n const isOpen = activeIndex !== null && activeIndex >= 0 && images.length > 0;\n\n // Body scroll lock\n useEffect(() => {\n if (!isOpen) return;\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = prev;\n };\n }, [isOpen]);\n\n const navigate = useCallback(\n (dir: 1 | -1) => {\n setCurrentIndex((prev) => {\n const next = (prev + dir + images.length) % images.length;\n onNavigate?.(next);\n return next;\n });\n },\n [images.length, onNavigate],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n return;\n }\n if (e.key === \"ArrowLeft\") {\n navigate(-1);\n return;\n }\n if (e.key === \"ArrowRight\") {\n navigate(1);\n return;\n }\n },\n [onClose, navigate],\n );\n\n // Focus overlay on open for keyboard to work\n useEffect(() => {\n if (isOpen) {\n requestAnimationFrame(() => overlayRef.current?.focus());\n }\n }, [isOpen]);\n\n if (!isOpen || typeof document === \"undefined\") return null;\n\n const image = images[currentIndex];\n const hasMultiple = images.length > 1;\n\n return createPortal(\n <div\n ref={overlayRef}\n tabIndex={-1}\n className=\"fixed inset-0 z-[9999] bg-black/95 flex flex-col items-center justify-center outline-none\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Image lightbox\"\n onKeyDown={handleKeyDown}\n >\n {/* Close button */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n onClick={onClose}\n className=\"absolute top-4 right-4 z-10 w-12 h-12 p-0 !min-h-0 rounded-full bg-white/15 hover:bg-red-500/50 text-white flex items-center justify-center\"\n aria-label=\"Close lightbox\"\n >\n <X className=\"w-7 h-7\" />\n </Button>\n\n {/* Counter */}\n {hasMultiple && (\n <div className=\"absolute top-4 left-1/2 -translate-x-1/2 text-white/70 text-sm font-medium\">\n {currentIndex + 1} / {images.length}\n </div>\n )}\n\n {/* Prev button */}\n {hasMultiple && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n onClick={() => navigate(-1)}\n className=\"absolute left-4 top-1/2 -translate-y-1/2 w-12 h-12 p-0 !min-h-0 rounded-full bg-white/15 hover:bg-white/30 text-white z-10 flex items-center justify-center\"\n aria-label=\"Previous image\"\n >\n <ChevronLeft className=\"w-7 h-7\" />\n </Button>\n )}\n\n {/* Image */}\n <div className=\"flex-1 flex items-center justify-center p-16 w-full h-full relative\">\n <img\n src={image.src}\n alt={image.alt ?? \"\"}\n className=\"max-h-full max-w-full object-contain select-none\"\n draggable={false}\n />\n {/* Zoom icon hint */}\n <div className=\"absolute bottom-4 right-4 text-white/40 flex items-center gap-1 text-xs\">\n <ZoomIn className=\"w-4 h-4\" />\n <Span className=\"text-xs\">Scroll to zoom</Span>\n </div>\n </div>\n\n {/* Caption */}\n {image.caption && (\n <Text\n size=\"sm\"\n variant=\"secondary\"\n className=\"flex-shrink-0 !text-white/70 text-center px-8 pb-4\"\n >\n {image.caption}\n </Text>\n )}\n\n {/* Next button */}\n {hasMultiple && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n onClick={() => navigate(1)}\n className=\"absolute right-4 top-1/2 -translate-y-1/2 w-12 h-12 p-0 !min-h-0 rounded-full bg-white/15 hover:bg-white/30 text-white z-10 flex items-center justify-center\"\n aria-label=\"Next image\"\n >\n <ChevronRight className=\"w-7 h-7\" />\n </Button>\n )}\n </div>,\n document.body,\n );\n}\n","\"use client\";\r\n\r\nimport { useRef, useState } from \"react\";\r\nimport { Label, Span } from \"./Typography\";\r\n\r\nexport interface TagInputProps {\r\n value: string[];\r\n onChange: (tags: string[]) => void;\r\n disabled?: boolean;\r\n label?: string;\r\n placeholder?: string;\r\n className?: string;\r\n helperText?: string;\r\n}\r\n\r\nexport function TagInput({\r\n value,\r\n onChange,\r\n disabled = false,\r\n label,\r\n placeholder = \"Add a tag...\",\r\n className = \"\",\r\n helperText = \"Press Enter or comma to add a tag\",\r\n}: TagInputProps) {\r\n const [draft, setDraft] = useState(\"\");\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n const addTag = (raw: string) => {\r\n const tag = raw.trim().replace(/,+$/, \"\").trim();\r\n if (!tag || value.includes(tag)) {\r\n setDraft(\"\");\r\n return;\r\n }\r\n onChange([...value, tag]);\r\n setDraft(\"\");\r\n };\r\n\r\n const removeTag = (tag: string) => {\r\n onChange(value.filter((t) => t !== tag));\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (e.key === \"Enter\" || e.key === \",\") {\r\n e.preventDefault();\r\n addTag(draft);\r\n return;\r\n }\r\n\r\n if (e.key === \"Backspace\" && draft === \"\" && value.length > 0) {\r\n onChange(value.slice(0, -1));\r\n }\r\n };\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const inputValue = e.target.value;\r\n if (inputValue.includes(\",\")) {\r\n const parts = inputValue.split(\",\");\r\n const last = parts.pop() ?? \"\";\r\n parts.forEach((part) => addTag(part));\r\n setDraft(last);\r\n return;\r\n }\r\n\r\n setDraft(inputValue);\r\n };\r\n\r\n const handleBlur = () => {\r\n if (draft.trim()) {\r\n addTag(draft);\r\n }\r\n };\r\n\r\n return (\r\n <div className={className}>\r\n {label && <Label className=\"mb-1.5 block text-sm font-medium\">{label}</Label>}\r\n\r\n <div\r\n onClick={() => !disabled && inputRef.current?.focus()}\r\n className={[\r\n \"flex min-h-[42px] w-full cursor-text flex-wrap items-center gap-1.5 rounded-lg border px-3 py-2\",\r\n \"border-zinc-300 bg-white dark:border-slate-700 dark:bg-slate-900\",\r\n disabled\r\n ? \"cursor-not-allowed opacity-50\"\r\n : \"transition-colors focus-within:border-primary-500 focus-within:ring-2 focus-within:ring-primary-500/30\",\r\n ].join(\" \")}\r\n >\r\n {value.map((tag) => (\r\n <span\r\n key={tag}\r\n className=\"inline-flex items-center gap-1 rounded-full bg-primary-500/10 px-2 py-0.5 text-xs font-medium text-primary-700 dark:text-primary-300\"\r\n >\r\n <Span size=\"xs\">{tag}</Span>\r\n {!disabled && (\r\n <button\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n removeTag(tag);\r\n }}\r\n className=\"ml-0.5 text-primary-700/70 hover:text-primary-700 dark:text-primary-300/70 dark:hover:text-primary-300\"\r\n aria-label={`Remove tag ${tag}`}\r\n >\r\n x\r\n </button>\r\n )}\r\n </span>\r\n ))}\r\n\r\n <input\r\n ref={inputRef}\r\n value={draft}\r\n onChange={handleChange}\r\n onKeyDown={handleKeyDown}\r\n onBlur={handleBlur}\r\n disabled={disabled}\r\n placeholder={value.length === 0 ? placeholder : \"\"}\r\n className={[\r\n \"min-w-[100px] flex-1 bg-transparent text-sm outline-none\",\r\n \"text-zinc-900 placeholder:text-zinc-400 dark:text-zinc-100 dark:placeholder:text-zinc-500\",\r\n disabled ? \"cursor-not-allowed\" : \"\",\r\n ].join(\" \")}\r\n aria-label={label ?? \"Tag input\"}\r\n />\r\n </div>\r\n\r\n {helperText && (\r\n <Span size=\"xs\" className=\"mt-1 text-zinc-500 dark:text-zinc-400\">\r\n {helperText}\r\n </Span>\r\n )}\r\n </div>\r\n );\r\n}\r\n","/**\r\n * Style Helpers\r\n *\r\n * UI helpers for dynamic styling and CSS class management.\r\n */\r\n\r\nexport function classNames(\r\n ...classes: (string | boolean | undefined | null)[]\r\n): string {\r\n return classes.filter(Boolean).join(\" \");\r\n}\r\n\r\nexport function mergeTailwindClasses(\r\n ...classes: (string | undefined | null)[]\r\n): string {\r\n const classArray = classes.filter(Boolean).join(\" \").split(\" \");\r\n return Array.from(new Set(classArray)).join(\" \");\r\n}\r\n","\"use client\";\r\n\r\nimport { Li, Nav, Ol } from \"./Semantic\";\r\nimport { Span } from \"./Typography\";\r\nimport { classNames } from \"../style.helper\";\r\n\r\nexport interface StepperNavStep {\r\n number: number;\r\n label: string;\r\n}\r\n\r\nexport interface StepperNavProps {\r\n steps: StepperNavStep[];\r\n currentStep: number;\r\n className?: string;\r\n}\r\n\r\nexport function StepperNav({ steps, currentStep, className }: StepperNavProps) {\r\n return (\r\n <Nav aria-label=\"Steps\" className={classNames(\"mb-8\", className)}>\r\n <Ol className=\"flex items-center gap-0\">\r\n {steps.map((step, i) => {\r\n const isComplete = step.number < currentStep;\r\n const isActive = step.number === currentStep;\r\n const isLast = i === steps.length - 1;\r\n\r\n return (\r\n <Li key={step.number} className=\"flex flex-1 items-center\">\r\n <div className=\"flex flex-shrink-0 items-center gap-2\">\r\n <div\r\n className={classNames(\r\n \"flex h-8 w-8 items-center justify-center rounded-full border-2 text-sm font-semibold transition-colors\",\r\n isComplete\r\n ? \"border-primary bg-primary text-white\"\r\n : isActive\r\n ? \"border-primary bg-transparent text-primary\"\r\n : \"border-zinc-300 text-zinc-500 dark:border-slate-700 dark:text-zinc-400\",\r\n )}\r\n >\r\n {isComplete ? (\r\n <svg\r\n className=\"h-4 w-4\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\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=\"M5 13l4 4L19 7\"\r\n />\r\n </svg>\r\n ) : (\r\n step.number\r\n )}\r\n </div>\r\n <Span\r\n className={classNames(\r\n \"hidden text-sm font-medium sm:block\",\r\n isActive\r\n ? \"text-primary\"\r\n : isComplete\r\n ? \"text-zinc-900 dark:text-zinc-100\"\r\n : \"text-zinc-500 dark:text-zinc-400\",\r\n )}\r\n >\r\n {step.label}\r\n </Span>\r\n </div>\r\n\r\n {!isLast && (\r\n <div\r\n className={classNames(\r\n \"mx-3 h-0.5 flex-1 transition-colors\",\r\n isComplete\r\n ? \"bg-primary\"\r\n : \"bg-zinc-200 dark:bg-slate-700\",\r\n )}\r\n />\r\n )}\r\n </Li>\r\n );\r\n })}\r\n </Ol>\r\n </Nav>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { Button } from \"./Button\";\r\nimport { Div } from \"./Div\";\r\n\r\n/** Three layout modes for listing pages. Stored in URL as ?view=card|fluid|list */\r\nexport type ViewMode = \"card\" | \"fluid\" | \"list\";\r\n\r\nexport interface ViewToggleLabels {\r\n card: string;\r\n fluid: string;\r\n list: string;\r\n toolbar?: string;\r\n}\r\n\r\nexport interface ViewToggleProps {\r\n value: ViewMode;\r\n onChange: (mode: ViewMode) => void;\r\n labels?: ViewToggleLabels;\r\n className?: string;\r\n}\r\n\r\nconst ACTIVE = \"bg-primary/5 text-primary ring-primary/30 dark:bg-primary/10\";\r\nconst INACTIVE =\r\n \"text-zinc-500 ring-zinc-200 hover:bg-zinc-100 dark:text-zinc-400 dark:ring-slate-700 dark:hover:bg-slate-800\";\r\n\r\nconst DEFAULT_LABELS: ViewToggleLabels = {\r\n card: \"Card grid\",\r\n fluid: \"Fluid grid\",\r\n list: \"List view\",\r\n toolbar: \"View mode\",\r\n};\r\n\r\nexport function ViewToggle({\r\n value,\r\n onChange,\r\n labels,\r\n className,\r\n}: ViewToggleProps) {\r\n const mergedLabels = { ...DEFAULT_LABELS, ...labels };\r\n\r\n return (\r\n <Div\r\n className={[\"flex gap-1\", className ?? \"\"].join(\" \").trim()}\r\n role=\"toolbar\"\r\n aria-label={mergedLabels.toolbar}\r\n >\r\n {/* Card grid — fixed breakpoint columns */}\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={() => onChange(\"card\")}\r\n aria-label={mergedLabels.card}\r\n aria-pressed={value === \"card\"}\r\n className={`flex items-center justify-center rounded-lg p-2 ring-1 transition-colors ${\r\n value === \"card\" ? ACTIVE : INACTIVE\r\n }`}\r\n >\r\n <svg\r\n className=\"h-5 w-5\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n strokeWidth={1.5}\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n d=\"M3.75 6A2.25 2.25 0 016 3.75h2.25A2.25 2.25 0 0110.5 6v2.25a2.25 2.25 0 01-2.25 2.25H6a2.25 2.25 0 01-2.25-2.25V6zM3.75 15.75A2.25 2.25 0 016 13.5h2.25a2.25 2.25 0 012.25 2.25V18a2.25 2.25 0 01-2.25 2.25H6A2.25 2.25 0 013.75 18v-2.25zM13.5 6a2.25 2.25 0 012.25-2.25H18A2.25 2.25 0 0120.25 6v2.25A2.25 2.25 0 0118 10.5h-2.25a2.25 2.25 0 01-2.25-2.25V6zM13.5 15.75a2.25 2.25 0 012.25-2.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-2.25A2.25 2.25 0 0113.5 18v-2.25z\"\r\n />\r\n </svg>\r\n </Button>\r\n\r\n {/* Fluid grid — CSS auto-fill columns */}\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={() => onChange(\"fluid\")}\r\n aria-label={mergedLabels.fluid}\r\n aria-pressed={value === \"fluid\"}\r\n className={`flex items-center justify-center rounded-lg p-2 ring-1 transition-colors ${\r\n value === \"fluid\" ? ACTIVE : INACTIVE\r\n }`}\r\n >\r\n <svg\r\n className=\"h-5 w-5\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n strokeWidth={1.5}\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n d=\"M3.375 19.5h17.25m-17.25 0a1.125 1.125 0 01-1.125-1.125M3.375 19.5h1.5C5.496 19.5 6 18.996 6 18.375m-3.75 0V5.625m0 12.75v-1.5c0-.621.504-1.125 1.125-1.125m18.375 2.625V5.625m0 12.75c0 .621-.504 1.125-1.125 1.125m1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125m0 3.75h-1.5A1.125 1.125 0 0118 18.375M20.625 4.5H3.375m17.25 0c.621 0 1.125.504 1.125 1.125M20.625 4.5h-1.5C18.504 4.5 18 5.004 18 5.625m3.75 0v1.5c0 .621-.504 1.125-1.125 1.125M3.375 4.5c-.621 0-1.125.504-1.125 1.125M3.375 4.5h1.5C5.496 4.5 6 5.004 6 5.625m-3.75 0v1.5c0 .621.504 1.125 1.125 1.125m0 0h1.5m-1.5 0c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125m1.5-3.75C5.496 8.25 6 8.754 6 9.375v1.5m0-5.25v5.25m0-5.25C6 5.004 6.504 4.5 7.125 4.5h9.75c.621 0 1.125.504 1.125 1.125m1.125 2.625h1.5m-1.5 0A1.125 1.125 0 0118 9.375v1.5m1.5-3.75C19.496 8.25 20 8.754 20 9.375v1.5m0-5.25v5.25m0-5.25C20 5.004 19.496 4.5 18.875 4.5M7.5 15h9\"\r\n />\r\n </svg>\r\n </Button>\r\n\r\n {/* List mode — compact rows */}\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={() => onChange(\"list\")}\r\n aria-label={mergedLabels.list}\r\n aria-pressed={value === \"list\"}\r\n className={`flex items-center justify-center rounded-lg p-2 ring-1 transition-colors ${\r\n value === \"list\" ? ACTIVE : INACTIVE\r\n }`}\r\n >\r\n <svg\r\n className=\"h-5 w-5\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n strokeWidth={1.5}\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n d=\"M8.25 6.75h12M8.25 12h12m-12 5.25h12M3.75 6.75h.007v.008H3.75V6.75zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zM3.75 12h.007v.008H3.75V12zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zm-.375 5.25h.007v.008H3.75v-.008zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0z\"\r\n />\r\n </svg>\r\n </Button>\r\n </Div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { Span } from \"./Typography\";\r\nimport { classNames } from \"../style.helper\";\r\n\r\nconst sizeClass: Record<\"sm\" | \"md\" | \"lg\", string> = {\r\n sm: \"h-4 w-4\",\r\n md: \"h-5 w-5\",\r\n lg: \"h-6 w-6\",\r\n};\r\n\r\nexport interface RatingDisplayProps {\r\n rating: number;\r\n maxRating?: number;\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n showValue?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport function RatingDisplay({\r\n rating,\r\n maxRating = 5,\r\n size = \"sm\",\r\n showValue = false,\r\n className,\r\n}: RatingDisplayProps) {\r\n const starSize = sizeClass[size];\r\n\r\n return (\r\n <div className={classNames(\"flex items-center gap-1\", className)}>\r\n <div className=\"flex\">\r\n {Array.from({ length: maxRating }, (_, i) => i + 1).map((star) => (\r\n <svg\r\n key={star}\r\n className={classNames(\r\n starSize,\r\n star <= rating\r\n ? \"text-amber-400 dark:text-secondary-500\"\r\n : \"text-zinc-300 dark:text-zinc-700\",\r\n )}\r\n fill=\"currentColor\"\r\n viewBox=\"0 0 20 20\"\r\n aria-hidden=\"true\"\r\n >\r\n <path d=\"M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z\" />\r\n </svg>\r\n ))}\r\n </div>\r\n {showValue && (\r\n <Span className=\"text-sm font-medium text-zinc-700 dark:text-zinc-300\">\r\n {rating.toFixed(1)}\r\n </Span>\r\n )}\r\n </div>\r\n );\r\n}\r\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 { Span } from \"./Typography\";\r\nimport { Row } from \"./Layout\";\r\n\r\nexport interface PriceDisplayProps {\r\n amount: number;\r\n currency?: string;\r\n originalAmount?: number;\r\n variant?: \"compact\" | \"detail\";\r\n className?: string;\r\n}\r\n\r\nfunction formatCurrency(amount: number, currency: string): string {\r\n return new Intl.NumberFormat(\"en-IN\", {\r\n style: \"currency\",\r\n currency,\r\n maximumFractionDigits: 2,\r\n }).format(amount);\r\n}\r\n\r\nfunction formatPercent(value: number): string {\r\n return `${Math.round(value * 100)}%`;\r\n}\r\n\r\nexport function PriceDisplay({\r\n amount,\r\n currency = \"INR\",\r\n originalAmount,\r\n variant = \"compact\",\r\n className,\r\n}: PriceDisplayProps) {\r\n const hasDiscount = originalAmount !== undefined && originalAmount > amount;\r\n const discountPct = hasDiscount\r\n ? (originalAmount - amount) / originalAmount\r\n : 0;\r\n\r\n const priceClass =\r\n variant === \"detail\"\r\n ? \"text-xl font-bold text-primary\"\r\n : \"text-base font-bold text-primary\";\r\n\r\n const originalClass =\r\n variant === \"detail\"\r\n ? \"text-sm text-zinc-400 line-through dark:text-zinc-500\"\r\n : \"text-xs text-zinc-400 line-through dark:text-zinc-500\";\r\n\r\n return (\r\n <Row wrap align=\"baseline\" gap=\"xs\" className={className}>\r\n <Span className={priceClass}>{formatCurrency(amount, currency)}</Span>\r\n {hasDiscount && (\r\n <>\r\n <Span className={originalClass}>\r\n {formatCurrency(originalAmount, currency)}\r\n </Span>\r\n <Span className=\"rounded bg-emerald-100 px-1 py-0.5 text-xs font-semibold text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400\">\r\n -{formatPercent(discountPct)}\r\n </Span>\r\n </>\r\n )}\r\n </Row>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { Text } from \"./Typography\";\r\nimport { classNames } from \"../style.helper\";\r\n\r\nexport interface StatItem {\r\n label: string;\r\n value: number | string;\r\n icon?: React.ReactNode;\r\n colorClass?: string;\r\n}\r\n\r\nexport interface StatsGridProps {\r\n stats: StatItem[];\r\n columns?: 2 | 3 | 4;\r\n className?: string;\r\n}\r\n\r\nconst columnsClass: Record<2 | 3 | 4, string> = {\r\n 2: \"grid grid-cols-1 gap-4 sm:grid-cols-2\",\r\n 3: \"grid grid-cols-1 gap-4 sm:grid-cols-2 md:grid-cols-3\",\r\n 4: \"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\",\r\n};\r\n\r\nexport function StatsGrid({ stats, columns = 3, className }: StatsGridProps) {\r\n return (\r\n <div className={classNames(columnsClass[columns], className)}>\r\n {stats.map((stat, i) => (\r\n <div\r\n key={`${stat.label}-${i}`}\r\n className=\"rounded-xl border border-zinc-200 bg-white p-4 dark:border-slate-700 dark:bg-slate-900\"\r\n >\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <Text className=\"text-sm font-medium text-zinc-500 dark:text-zinc-400\">\r\n {stat.label}\r\n </Text>\r\n <Text className=\"mt-1 text-3xl font-bold\">{stat.value}</Text>\r\n </div>\r\n {stat.icon && (\r\n <div\r\n className={classNames(\r\n stat.colorClass ?? \"text-zinc-400 dark:text-zinc-500\",\r\n )}\r\n >\r\n {stat.icon}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { Divider } from \"./Divider\";\r\nimport { Span } from \"./Typography\";\r\nimport { classNames } from \"../style.helper\";\r\n\r\nexport interface SummaryLine {\r\n label: string;\r\n value: string;\r\n muted?: boolean;\r\n}\r\n\r\nexport interface SummaryCardProps {\r\n lines: SummaryLine[];\r\n total: { label: string; value: string };\r\n action?: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function SummaryCard({\r\n lines,\r\n total,\r\n action,\r\n className,\r\n}: SummaryCardProps) {\r\n return (\r\n <div\r\n className={classNames(\r\n \"space-y-4 rounded-xl border border-zinc-200 bg-white p-5 dark:border-slate-700 dark:bg-slate-900\",\r\n className,\r\n )}\r\n >\r\n <div className=\"space-y-2\">\r\n {lines.map((line, i) => (\r\n <div key={i} className=\"flex items-center justify-between text-sm\">\r\n <Span className=\"text-zinc-500 dark:text-zinc-400\">{line.label}</Span>\r\n <Span\r\n className={\r\n line.muted\r\n ? \"text-zinc-500 dark:text-zinc-400\"\r\n : \"text-zinc-900 dark:text-zinc-100\"\r\n }\r\n >\r\n {line.value}\r\n </Span>\r\n </div>\r\n ))}\r\n </div>\r\n\r\n <Divider />\r\n\r\n <div className=\"flex items-center justify-between\">\r\n <Span className=\"font-bold text-zinc-900 dark:text-zinc-100\">\r\n {total.label}\r\n </Span>\r\n <Span className=\"text-lg font-bold text-primary\">{total.value}</Span>\r\n </div>\r\n\r\n {action && <div>{action}</div>}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect, useMemo, useState } from \"react\";\r\nimport { Span } from \"./Typography\";\r\nimport { classNames } from \"../style.helper\";\r\n\r\nexport interface CountdownRemaining {\r\n days: number;\r\n hours: number;\r\n minutes: number;\r\n seconds: number;\r\n}\r\n\r\nexport interface CountdownDisplayProps {\r\n targetDate: Date;\r\n format?: \"dhms\" | \"hms\" | \"auto\";\r\n expiredLabel?: string;\r\n className?: string;\r\n}\r\n\r\nfunction getRemaining(targetDate: Date): CountdownRemaining | null {\r\n const now = Date.now();\r\n const distance = targetDate.getTime() - now;\r\n if (distance <= 0) {\r\n return null;\r\n }\r\n\r\n const totalSeconds = Math.floor(distance / 1000);\r\n const days = Math.floor(totalSeconds / 86400);\r\n const hours = Math.floor((totalSeconds % 86400) / 3600);\r\n const minutes = Math.floor((totalSeconds % 3600) / 60);\r\n const seconds = totalSeconds % 60;\r\n\r\n return { days, hours, minutes, seconds };\r\n}\r\n\r\nfunction formatLabel(\r\n remaining: CountdownRemaining,\r\n format: \"dhms\" | \"hms\" | \"auto\",\r\n): string {\r\n const { days, hours, minutes, seconds } = remaining;\r\n\r\n if (format === \"hms\") {\r\n const totalHours = days * 24 + hours;\r\n return `${totalHours}h ${minutes}m ${seconds}s`;\r\n }\r\n\r\n if (format === \"dhms\") {\r\n return `${days}d ${hours}h ${minutes}m ${seconds}s`;\r\n }\r\n\r\n if (days > 0) {\r\n return `${days}d ${hours}h ${minutes}m`;\r\n }\r\n if (hours > 0) {\r\n return `${hours}h ${minutes}m ${seconds}s`;\r\n }\r\n return `${minutes}m ${seconds}s`;\r\n}\r\n\r\nexport function CountdownDisplay({\r\n targetDate,\r\n format = \"auto\",\r\n expiredLabel = \"Ended\",\r\n className,\r\n}: CountdownDisplayProps) {\r\n const [tick, setTick] = useState(0);\r\n\r\n useEffect(() => {\r\n const id = window.setInterval(() => {\r\n setTick((value) => value + 1);\r\n }, 1000);\r\n\r\n return () => {\r\n window.clearInterval(id);\r\n };\r\n }, []);\r\n\r\n const remaining = useMemo(() => getRemaining(targetDate), [targetDate, tick]);\r\n const label = remaining ? formatLabel(remaining, format) : expiredLabel;\r\n\r\n return (\r\n <Span variant=\"inherit\" className={classNames(\"tabular-nums\", className)}>\r\n {label}\r\n </Span>\r\n );\r\n}\r\n","import { Caption, Text } from \"./Typography\";\r\nimport { Div } from \"./Div\";\r\nimport { classNames } from \"../style.helper\";\r\n\r\nexport interface ItemRowProps {\r\n thumbnail?: React.ReactNode;\r\n title: string;\r\n subtitle?: string;\r\n rightSlot?: React.ReactNode;\r\n actions?: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function ItemRow({\r\n thumbnail,\r\n title,\r\n subtitle,\r\n rightSlot,\r\n actions,\r\n className,\r\n}: ItemRowProps) {\r\n return (\r\n <Div className={classNames(\"flex items-start gap-4\", className)}>\r\n {thumbnail && <Div className=\"flex-shrink-0\">{thumbnail}</Div>}\r\n\r\n <Div className=\"min-w-0 flex-1\">\r\n <Text size=\"sm\" weight=\"medium\" className=\"line-clamp-2\">\r\n {title}\r\n </Text>\r\n {subtitle && <Caption className=\"mt-0.5\">{subtitle}</Caption>}\r\n {actions && <Div className=\"mt-2\">{actions}</Div>}\r\n </Div>\r\n\r\n {rightSlot && <Div className=\"flex-shrink-0\">{rightSlot}</Div>}\r\n </Div>\r\n );\r\n}\r\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","// appkit/src/react/hooks/useVisibleItems.ts\r\n\"use client\";\r\nimport { useRef, useState, useEffect, useCallback } from \"react\";\r\n\r\nexport interface UseVisibleItemsOptions {\r\n /** Total number of items */\r\n total: number;\r\n /** Minimum width of each item in pixels */\r\n minItemWidth: number;\r\n /** Width reserved for each scroll arrow button (default: 36) */\r\n arrowWidth?: number;\r\n /** Gap between items in pixels (default: 8) */\r\n gap?: number;\r\n}\r\n\r\nexport interface UseVisibleItemsResult {\r\n /** Attach to the scroll container element */\r\n containerRef: React.RefObject<HTMLElement | null>;\r\n /** Number of items that fit in the current container width */\r\n visibleCount: number;\r\n /** Whether any items are hidden (arrows should be shown) */\r\n hasOverflow: boolean;\r\n /** Index of the first visible item */\r\n scrollOffset: number;\r\n setScrollOffset: React.Dispatch<React.SetStateAction<number>>;\r\n /** Scroll left by one page */\r\n scrollLeft: () => void;\r\n /** Scroll right by one page */\r\n scrollRight: () => void;\r\n canScrollLeft: boolean;\r\n canScrollRight: boolean;\r\n}\r\n\r\n/**\r\n * `useVisibleItems` — compute how many items fit in a container, handling\r\n * arrow button reservations. Powers `HorizontalScroller` and `TabStrip`.\r\n *\r\n * **Formula** (when overflow exists):\r\n * `visible = floor((containerWidth - 2 × (arrowWidth + gap) + gap) / (minItemWidth + gap))`\r\n *\r\n * When all items fit without arrows, no arrows are shown.\r\n */\r\nexport function useVisibleItems({\r\n total,\r\n minItemWidth,\r\n arrowWidth = 36,\r\n gap = 8,\r\n}: UseVisibleItemsOptions): UseVisibleItemsResult {\r\n const containerRef = useRef<HTMLElement>(null);\r\n const [visibleCount, setVisibleCount] = useState(total);\r\n const [scrollOffset, setScrollOffset] = useState(0);\r\n\r\n useEffect(() => {\r\n const el = containerRef.current;\r\n if (!el) return;\r\n\r\n const compute = (width: number) => {\r\n // Check if all items fit without scrolling\r\n const totalItemsWidth = total * minItemWidth + Math.max(0, total - 1) * gap;\r\n if (totalItemsWidth <= width) {\r\n setVisibleCount(total);\r\n return;\r\n }\r\n // Reserve space for both arrows\r\n const usable = width - 2 * (arrowWidth + gap);\r\n const raw = Math.floor((usable + gap) / (minItemWidth + gap));\r\n setVisibleCount(Math.max(1, raw));\r\n };\r\n\r\n const ro = new ResizeObserver(([entry]) => {\r\n if (entry) compute(entry.contentRect.width);\r\n });\r\n ro.observe(el);\r\n compute(el.getBoundingClientRect().width);\r\n\r\n return () => ro.disconnect();\r\n }, [total, minItemWidth, arrowWidth, gap]);\r\n\r\n // Clamp scroll offset when visibleCount or total changes\r\n useEffect(() => {\r\n setScrollOffset((o) => Math.min(o, Math.max(0, total - visibleCount)));\r\n }, [visibleCount, total]);\r\n\r\n const hasOverflow = visibleCount < total;\r\n\r\n const scrollLeft = useCallback(\r\n () => setScrollOffset((o) => Math.max(0, o - visibleCount)),\r\n [visibleCount],\r\n );\r\n\r\n const scrollRight = useCallback(\r\n () =>\r\n setScrollOffset((o) =>\r\n Math.min(total - visibleCount, o + visibleCount),\r\n ),\r\n [visibleCount, total],\r\n );\r\n\r\n return {\r\n containerRef,\r\n visibleCount,\r\n hasOverflow,\r\n scrollOffset,\r\n setScrollOffset,\r\n scrollLeft,\r\n scrollRight,\r\n canScrollLeft: scrollOffset > 0,\r\n canScrollRight: scrollOffset + visibleCount < total,\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","// appkit/src/ui/components/TabStrip.tsx\r\n\"use client\";\r\nimport { useEffect } from \"react\";\r\nimport { Span } from \"./Typography\";\r\nimport { useVisibleItems } from \"../../react/hooks/useVisibleItems\";\r\nimport { FLUID_GRID_MIN_WIDTHS } from \"../../tokens\";\r\n\r\nexport interface TabStripTab {\r\n key: string;\r\n label: string;\r\n badge?: number;\r\n disabled?: boolean;\r\n}\r\n\r\nexport interface TabStripProps {\r\n tabs: TabStripTab[];\r\n activeKey: string;\r\n onChange: (key: string) => void;\r\n /** Minimum width per tab in pixels (default: FLUID_GRID_MIN_WIDTHS.tabItem = 100) */\r\n minTabWidth?: number;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * `TabStrip` — a horizontally scrollable tab bar that shows as many tabs as\r\n * fit the container width. Arrow buttons appear automatically when tabs overflow.\r\n * The active tab is always scrolled into the visible window.\r\n *\r\n * @example\r\n * ```tsx\r\n * <TabStrip\r\n * tabs={[\r\n * { key: \"all\", label: \"All\" },\r\n * { key: \"active\", label: \"Active\", badge: 3 },\r\n * { key: \"archived\", label: \"Archived\", disabled: true },\r\n * ]}\r\n * activeKey={activeTab}\r\n * onChange={setActiveTab}\r\n * />\r\n * ```\r\n */\r\nexport function TabStrip({\r\n tabs,\r\n activeKey,\r\n onChange,\r\n minTabWidth = FLUID_GRID_MIN_WIDTHS.tabItem,\r\n className,\r\n}: TabStripProps) {\r\n const {\r\n containerRef,\r\n visibleCount,\r\n hasOverflow,\r\n scrollLeft,\r\n scrollRight,\r\n setScrollOffset,\r\n scrollOffset,\r\n canScrollLeft,\r\n canScrollRight,\r\n } = useVisibleItems({\r\n total: tabs.length,\r\n minItemWidth: minTabWidth,\r\n gap: 0,\r\n });\r\n\r\n // Keep active tab scrolled into the visible window\r\n useEffect(() => {\r\n const idx = tabs.findIndex((t) => t.key === activeKey);\r\n if (idx < 0) return;\r\n if (idx < scrollOffset) {\r\n setScrollOffset(idx);\r\n } else if (idx >= scrollOffset + visibleCount) {\r\n setScrollOffset(idx - visibleCount + 1);\r\n }\r\n }, [activeKey, scrollOffset, visibleCount, tabs, setScrollOffset]);\r\n\r\n const visible = tabs.slice(scrollOffset, scrollOffset + visibleCount);\r\n\r\n return (\r\n <div\r\n ref={containerRef as React.RefObject<HTMLDivElement>}\r\n role=\"tablist\"\r\n className={[\r\n \"flex items-end border-b border-zinc-200 dark:border-zinc-700\",\r\n className ?? \"\",\r\n ]\r\n .join(\" \")\r\n .trim()}\r\n >\r\n {hasOverflow && (\r\n <button\r\n type=\"button\"\r\n onClick={scrollLeft}\r\n disabled={!canScrollLeft}\r\n aria-label=\"Previous tabs\"\r\n className=\"flex-none h-12 w-9 flex items-center justify-center text-zinc-500 disabled:opacity-30 hover:text-zinc-900 dark:hover:text-zinc-100 transition-colors\"\r\n >\r\n ‹\r\n </button>\r\n )}\r\n\r\n {visible.map((tab) => (\r\n <button\r\n key={tab.key}\r\n type=\"button\"\r\n role=\"tab\"\r\n aria-selected={tab.key === activeKey}\r\n aria-disabled={tab.disabled}\r\n onClick={() => !tab.disabled && onChange(tab.key)}\r\n style={{ minWidth: `${minTabWidth}px` }}\r\n className={[\r\n \"flex-1 h-12 px-4 text-sm font-medium whitespace-nowrap border-b-2 transition-colors\",\r\n tab.key === activeKey\r\n ? \"border-primary-500 text-primary-600 dark:text-primary-400\"\r\n : \"border-transparent text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-100\",\r\n tab.disabled ? \"opacity-40 cursor-not-allowed\" : \"cursor-pointer\",\r\n ]\r\n .join(\" \")\r\n .trim()}\r\n >\r\n {tab.label}\r\n {tab.badge != null && tab.badge > 0 && (\r\n <Span className=\"ml-1.5 inline-flex items-center justify-center h-4 min-w-[1rem] px-1 rounded-full text-[10px] bg-primary-100 dark:bg-primary-900/40 text-primary-600 dark:text-primary-400\">\r\n {tab.badge > 99 ? \"99+\" : tab.badge}\r\n </Span>\r\n )}\r\n </button>\r\n ))}\r\n\r\n {hasOverflow && (\r\n <button\r\n type=\"button\"\r\n onClick={scrollRight}\r\n disabled={!canScrollRight}\r\n aria-label=\"Next tabs\"\r\n className=\"flex-none h-12 w-9 flex items-center justify-center text-zinc-500 disabled:opacity-30 hover:text-zinc-900 dark:hover:text-zinc-100 transition-colors\"\r\n >\r\n ›\r\n </button>\r\n )}\r\n </div>\r\n );\r\n}\r\n","// appkit/src/ui/components/FormGrid.tsx\r\nimport type { ReactNode } from \"react\";\r\n\r\nexport interface FormGridProps {\r\n children: ReactNode;\r\n /** Minimum field width in pixels before wrapping to a new row (default: 280) */\r\n minFieldWidth?: number;\r\n /** Gap between fields in pixels (default: 16) */\r\n gap?: number;\r\n className?: string;\r\n}\r\n\r\nexport interface FormFieldProps {\r\n children: ReactNode;\r\n /**\r\n * - `\"auto\"` — fluid: `flex-1 min-w-[280px]` (default)\r\n * - `\"full\"` — always full width\r\n * - `\"half\"` — fixed 50%, min-width still respected\r\n */\r\n span?: \"auto\" | \"full\" | \"half\";\r\n className?: string;\r\n}\r\n\r\n/**\r\n * `FormGrid` — a flex-wrap container that naturally transitions from\r\n * multi-column to single-column without media queries.\r\n *\r\n * **Column count at given widths** (default minFieldWidth=280, gap=16):\r\n * | Container | Columns |\r\n * |-----------|---------|\r\n * | 360 px | 1 |\r\n * | 600 px | 2 |\r\n * | 900 px | 3 |\r\n * | 1200 px | 4 |\r\n *\r\n * @example\r\n * ```tsx\r\n * <FormGrid>\r\n * <FormField><Label>First name</Label><Input name=\"firstName\" /></FormField>\r\n * <FormField><Label>Last name</Label><Input name=\"lastName\" /></FormField>\r\n * <FormField span=\"full\"><Label>Bio</Label><Textarea name=\"bio\" /></FormField>\r\n * </FormGrid>\r\n * ```\r\n */\r\nexport function FormGrid({\r\n children,\r\n minFieldWidth = 280,\r\n gap = 16,\r\n className,\r\n}: FormGridProps) {\r\n return (\r\n <div\r\n className={`flex flex-wrap ${className ?? \"\"}`}\r\n style={{ gap: `${gap}px` }}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\n/**\r\n * `FormField` — a single form field slot inside a `FormGrid`.\r\n * Grows/shrinks to fill available space while respecting `minFieldWidth`.\r\n */\r\nexport function FormField({\r\n children,\r\n span = \"auto\",\r\n className,\r\n}: FormFieldProps) {\r\n const spanClass =\r\n span === \"full\"\r\n ? \"w-full\"\r\n : span === \"half\"\r\n ? \"w-1/2 min-w-[280px]\"\r\n : \"flex-1 min-w-[280px]\";\r\n\r\n return (\r\n <div className={`${spanClass} flex flex-col gap-1.5 ${className ?? \"\"}`}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n","// appkit/src/ui/components/DescriptionField.tsx\r\nimport { THEME_CONSTANTS } from \"../../tokens\";\r\n\r\nexport interface DescriptionFieldProps {\r\n label: string;\r\n value: string;\r\n /** Force full-width regardless of value length (default: auto-detect by length) */\r\n fullWidth?: boolean;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * `DescriptionField` — renders a label + value pair using the appropriate\r\n * text style. Short values render inline-ish (`flex-1 min-w-[280px]`);\r\n * long values (> 80 chars) take full width with `prose` wrapping.\r\n *\r\n * Designed for use inside `FormGrid` or `<Row as=\"dl\">` definition lists.\r\n *\r\n * @example\r\n * ```tsx\r\n * <Row as=\"dl\" wrap gap=\"md\">\r\n * <DescriptionField label=\"Store name\" value=\"My Amazing Store\" />\r\n * <DescriptionField label=\"Description\" value={longDescription} />\r\n * </Row>\r\n * ```\r\n */\r\nexport function DescriptionField({\r\n label,\r\n value,\r\n fullWidth,\r\n className,\r\n}: DescriptionFieldProps) {\r\n const isLong = fullWidth ?? value.length > 80;\r\n\r\n return (\r\n <div\r\n className={[\r\n \"flex flex-col gap-1\",\r\n isLong ? \"w-full\" : \"flex-1 min-w-[280px]\",\r\n className ?? \"\",\r\n ]\r\n .join(\" \")\r\n .trim()}\r\n >\r\n <dt className={THEME_CONSTANTS.text.label}>{label}</dt>\r\n <dd\r\n className={\r\n isLong ? THEME_CONSTANTS.text.body : THEME_CONSTANTS.text.body\r\n }\r\n >\r\n {value}\r\n </dd>\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Row } from \"./Layout\";\r\nimport { Span } from \"./Typography\";\r\n\r\nexport interface ActiveFilter {\r\n key: string;\r\n label: string;\r\n value: string;\r\n}\r\n\r\nexport interface ActiveFilterChipsProps {\r\n filters: ActiveFilter[];\r\n onRemove: (key: string) => void;\r\n onClearAll: () => void;\r\n className?: string;\r\n clearAllLabel?: string;\r\n}\r\n\r\nexport function ActiveFilterChips({\r\n filters,\r\n onRemove,\r\n onClearAll,\r\n className = \"\",\r\n clearAllLabel = \"Clear all\",\r\n}: ActiveFilterChipsProps) {\r\n if (filters.length === 0) return null;\r\n\r\n return (\r\n <Row\r\n wrap\r\n gap=\"sm\"\r\n className={className}\r\n role=\"list\"\r\n aria-label=\"Active filters\"\r\n >\r\n {filters.map((filter) => (\r\n <span\r\n key={filter.key}\r\n role=\"listitem\"\r\n className=\"inline-flex items-center gap-1 text-xs font-medium rounded-lg border border-zinc-200 dark:border-slate-700 bg-zinc-50 dark:bg-slate-800 text-zinc-800 dark:text-zinc-200 py-1 pl-2 pr-1\"\r\n >\r\n <Span className=\"text-zinc-500 dark:text-zinc-400 mr-0.5\">\r\n {filter.label}:\r\n </Span>\r\n {filter.value}\r\n <button\r\n type=\"button\"\r\n onClick={() => onRemove(filter.key)}\r\n aria-label={`Remove ${filter.label}: ${filter.value} filter`}\r\n className=\"ml-1 inline-flex items-center justify-center w-4 h-4 rounded-full hover:bg-zinc-300 dark:hover:bg-zinc-600 transition-colors\"\r\n >\r\n <svg\r\n className=\"w-2.5 h-2.5\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n strokeWidth={3}\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n d=\"M6 18L18 6M6 6l12 12\"\r\n />\r\n </svg>\r\n </button>\r\n </span>\r\n ))}\r\n\r\n <button\r\n type=\"button\"\r\n onClick={onClearAll}\r\n className=\"text-xs font-medium text-primary hover:underline p-2\"\r\n >\r\n {clearAllLabel}\r\n </button>\r\n </Row>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Row } from \"./Layout\";\r\nimport { Select } from \"./Select\";\r\nimport { Span } from \"./Typography\";\r\n\r\nexport interface SortOption {\r\n label: string;\r\n value: string;\r\n}\r\n\r\nexport interface SortDropdownProps {\r\n value?: string;\r\n onChange: (value: string) => void;\r\n options: SortOption[];\r\n label?: string;\r\n className?: string;\r\n}\r\n\r\nexport function SortDropdown({\r\n value,\r\n onChange,\r\n options,\r\n label,\r\n className = \"\",\r\n}: SortDropdownProps) {\r\n return (\r\n <Row gap=\"sm\" className={className}>\r\n {label && (\r\n <Span variant=\"secondary\" size=\"sm\" className=\"whitespace-nowrap\">\r\n {label}\r\n </Span>\r\n )}\r\n <Select\r\n value={value ?? \"\"}\r\n onChange={onChange}\r\n options={options}\r\n className=\"h-9 min-h-9\"\r\n />\r\n </Row>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Pagination } from \"./Pagination\";\r\nimport { Select } from \"./Select\";\r\nimport { Span, Text } from \"./Typography\";\r\n\r\nconst DEFAULT_PAGE_SIZE_OPTIONS = [10, 25, 50, 100] as const;\r\n\r\nexport interface TablePaginationLabels {\r\n paginationLabel?: string;\r\n showing?: string;\r\n of?: string;\r\n results?: string;\r\n perPage?: string;\r\n}\r\n\r\nexport interface TablePaginationProps {\r\n currentPage: number;\r\n totalPages: number;\r\n pageSize: number;\r\n total: number;\r\n onPageChange: (page: number) => void;\r\n onPageSizeChange?: (pageSize: number) => void;\r\n pageSizeOptions?: readonly number[];\r\n isLoading?: boolean;\r\n className?: string;\r\n compact?: boolean;\r\n labels?: TablePaginationLabels;\r\n}\r\n\r\nexport function TablePagination({\r\n currentPage,\r\n totalPages,\r\n pageSize,\r\n total,\r\n onPageChange,\r\n onPageSizeChange,\r\n pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,\r\n isLoading = false,\r\n className = \"\",\r\n compact = false,\r\n labels,\r\n}: TablePaginationProps) {\r\n const l = {\r\n paginationLabel: labels?.paginationLabel ?? \"Pagination\",\r\n showing: labels?.showing ?? \"Showing\",\r\n of: labels?.of ?? \"of\",\r\n results: labels?.results ?? \"results\",\r\n perPage: labels?.perPage ?? \"Per page\",\r\n };\r\n\r\n if (compact) {\r\n return (\r\n <div\r\n role=\"navigation\"\r\n aria-label={l.paginationLabel}\r\n className={`flex items-center gap-0.5 ${className}`}\r\n >\r\n <Pagination\r\n currentPage={currentPage}\r\n totalPages={totalPages}\r\n onPageChange={onPageChange}\r\n disabled={isLoading}\r\n size=\"sm\"\r\n maxVisible={5}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n const from = total === 0 ? 0 : (currentPage - 1) * pageSize + 1;\r\n const to = Math.min(currentPage * pageSize, total);\r\n\r\n return (\r\n <div\r\n role=\"navigation\"\r\n aria-label={l.paginationLabel}\r\n className={[\r\n \"flex flex-col sm:flex-row items-center gap-3 px-4 py-3\",\r\n \"border-t border-zinc-100 dark:border-slate-800/80\",\r\n className,\r\n ].join(\" \")}\r\n >\r\n <Text\r\n size=\"xs\"\r\n variant=\"none\"\r\n className=\"text-zinc-400 dark:text-slate-500 tabular-nums sm:mr-auto\"\r\n >\r\n {l.showing}{\" \"}\r\n <Span className=\"font-semibold text-zinc-600 dark:text-slate-300\">\r\n {from}–{to}\r\n </Span>{\" \"}\r\n {l.of}{\" \"}\r\n <Span className=\"font-semibold text-zinc-600 dark:text-slate-300\">\r\n {new Intl.NumberFormat().format(total)}\r\n </Span>{\" \"}\r\n {l.results}\r\n </Text>\r\n\r\n <div className=\"rounded-xl p-0.5 bg-zinc-100 dark:bg-slate-800 inline-flex\">\r\n <Pagination\r\n currentPage={currentPage}\r\n totalPages={totalPages}\r\n onPageChange={onPageChange}\r\n disabled={isLoading}\r\n />\r\n </div>\r\n\r\n {onPageSizeChange && (\r\n <div className=\"flex items-center gap-1.5 sm:ml-1\">\r\n <label\r\n htmlFor=\"page-size-select\"\r\n className=\"text-xs text-zinc-400 dark:text-slate-500 whitespace-nowrap\"\r\n >\r\n {l.perPage}\r\n </label>\r\n <Select\r\n id=\"page-size-select\"\r\n value={String(pageSize)}\r\n onChange={(value) => onPageSizeChange(Number(value))}\r\n disabled={isLoading}\r\n aria-label={l.perPage}\r\n className=\"text-xs h-7 py-0 px-2 rounded-lg\"\r\n options={pageSizeOptions.map((s) => ({\r\n value: String(s),\r\n label: String(s),\r\n }))}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\n\nimport { ReactNode, useState, useMemo } from \"react\";\nimport { Button } from \"./components/Button\";\nimport { Spinner } from \"./components/Spinner\";\nimport { Pagination } from \"./components/Pagination\";\nimport { Text } from \"./components/Typography\";\nimport { GRID_MAP } from \"./components/Layout\";\nimport type { GridCols } from \"./components/Layout\";\nimport type {\n TableColumn,\n TableConfig,\n PaginationConfig,\n} from \"@mohasinac/contracts\";\nimport {\n mergeTableConfig,\n DEFAULT_PAGINATION_CONFIG,\n} from \"@mohasinac/contracts\";\n\n/**\n * DataTable — generic sortable + paginated table promoted to @mohasinac/ui.\n *\n * Accepts `tableConfig` and `paginationConfig` for composable configuration.\n * Apps can spread-merge DEFAULT_TABLE_CONFIG / DEFAULT_PAGINATION_CONFIG and\n * override only the values they need, then pass the result once.\n *\n * Individual flat props (pageSize, stickyHeader, striped, …) still work and\n * take precedence over anything in tableConfig when explicitly provided.\n */\n\ntype ViewMode = \"table\" | \"grid\" | \"list\";\ntype SortDirection = \"asc\" | \"desc\" | null;\n\n/**\n * Column descriptor for the DataTable component.\n * Narrows `render` to return `ReactNode` (TableColumn uses `unknown` so\n * contracts stays React-free). Fully compatible with `TableColumn<T>`.\n */\nexport type DataTableColumn<T> = Omit<TableColumn<T>, \"render\"> & {\n render?: (item: T) => ReactNode;\n};\n\nexport interface DataTableProps<T> {\n data: T[];\n columns: DataTableColumn<T>[];\n /** Derives a stable key per row. Defaults to `(item) => (item as Record<string,string>).id`. */\n keyExtractor?: (item: T) => string;\n onRowClick?: (item: T) => void;\n loading?: boolean;\n emptyMessage?: string;\n actions?: (item: T) => ReactNode;\n /** When true, disables internal pagination — render your own externally. Default: false */\n externalPagination?: boolean;\n /**\n * Composable table configuration.\n * Deep-merged with DEFAULT_TABLE_CONFIG. Individual flat props (pageSize,\n * stickyHeader, etc.) override this when explicitly provided.\n */\n tableConfig?: Partial<TableConfig>;\n /**\n * Composable pagination configuration.\n * Merged with DEFAULT_PAGINATION_CONFIG. Individual flat props override this.\n */\n paginationConfig?: Partial<PaginationConfig>;\n /** Items per page. Explicit value overrides tableConfig.pageSize. Default: 20 */\n pageSize?: number;\n // Mobile view\n mobileCardRender?: (item: T) => ReactNode;\n // Custom empty state\n emptyState?: ReactNode;\n emptyIcon?: ReactNode;\n emptyTitle?: string;\n // Table enhancements — explicit values override tableConfig values\n stickyHeader?: boolean;\n striped?: boolean;\n // View toggle\n showViewToggle?: boolean;\n showTableView?: boolean;\n viewMode?: ViewMode;\n defaultViewMode?: ViewMode;\n onViewModeChange?: (mode: ViewMode) => void;\n // Row selection\n selectable?: boolean;\n selectedIds?: string[];\n onSelectionChange?: (ids: string[]) => void;\n /**\n * Number of grid columns for card grid view.\n * Matches Layout GRID_MAP keys: 1–6, \"autoSm\", \"autoMd\", \"autoLg\".\n * Default: 6 (2→3→4→5→6 across breakpoints).\n */\n gridCols?: GridCols;\n // Labels (override defaults for i18n)\n labels?: {\n loading?: string;\n noDataTitle?: string;\n noDataDescription?: string;\n actions?: string;\n tableView?: string;\n gridView?: string;\n listView?: string;\n };\n}\n\nexport function DataTable<T extends object>({\n data,\n columns,\n keyExtractor: keyExtractorProp,\n onRowClick,\n loading = false,\n emptyMessage,\n actions,\n mobileCardRender,\n emptyState,\n emptyIcon,\n emptyTitle,\n tableConfig,\n paginationConfig,\n externalPagination = false,\n // Explicit flat props — override tableConfig when provided\n pageSize: pageSizeProp,\n stickyHeader: stickyHeaderProp,\n striped: stripedProp,\n showViewToggle: showViewToggleProp,\n showTableView = true,\n viewMode: controlledViewMode,\n defaultViewMode: defaultViewModeProp,\n onViewModeChange,\n selectable: selectableProp,\n selectedIds = [],\n onSelectionChange,\n gridCols = \"cards\",\n labels = {},\n}: DataTableProps<T>) {\n // Merge tableConfig + paginationConfig with defaults; explicit flat props win\n const resolvedTable = mergeTableConfig(tableConfig);\n const resolvedPag = {\n ...DEFAULT_PAGINATION_CONFIG,\n ...tableConfig?.pagination,\n ...paginationConfig,\n };\n\n const keyExtractor: (item: T) => string =\n keyExtractorProp ??\n ((item) => (item as Record<string, string>).id ?? JSON.stringify(item));\n\n const pageSize = pageSizeProp ?? resolvedTable.pageSize;\n const stickyHeader = stickyHeaderProp ?? resolvedTable.sticky.enabled;\n const striped = stripedProp ?? resolvedTable.striped;\n const showViewToggle = showViewToggleProp ?? resolvedTable.showViewToggle;\n const selectable = selectableProp ?? resolvedTable.selectable;\n const defaultViewMode: ViewMode =\n defaultViewModeProp ?? resolvedTable.defaultViewMode;\n\n const [sortKey, setSortKey] = useState<string | null>(null);\n const [sortDirection, setSortDirection] = useState<SortDirection>(null);\n const [currentPage, setCurrentPage] = useState(1);\n const [internalViewMode, setInternalViewMode] =\n useState<ViewMode>(defaultViewMode);\n\n const activeViewMode: ViewMode = controlledViewMode ?? internalViewMode;\n\n const {\n loading: labelLoading = \"Loading…\",\n noDataTitle = \"No data found\",\n noDataDescription = \"There are no items to display.\",\n actions: labelActions = \"Actions\",\n tableView = \"Table view\",\n gridView = \"Grid view\",\n listView = \"List view\",\n } = labels;\n\n const handleViewModeChange = (mode: ViewMode) => {\n if (controlledViewMode === undefined) setInternalViewMode(mode);\n onViewModeChange?.(mode);\n };\n\n const handleSort = (key: string) => {\n const col = columns.find((c) => c.key === key);\n if (!col?.sortable) return;\n if (sortKey === key) {\n if (sortDirection === \"asc\") setSortDirection(\"desc\");\n else {\n setSortKey(null);\n setSortDirection(null);\n }\n } else {\n setSortKey(key);\n setSortDirection(\"asc\");\n }\n };\n\n const sortedData = useMemo(() => {\n const sorted = [...data];\n if (sortKey && sortDirection) {\n sorted.sort((a, b) => {\n const aVal = (a as Record<string, unknown>)[sortKey];\n const bVal = (b as Record<string, unknown>)[sortKey];\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n if (typeof aVal === \"string\" && typeof bVal === \"string\") {\n return sortDirection === \"asc\"\n ? aVal.localeCompare(bVal)\n : bVal.localeCompare(aVal);\n }\n if (aVal < bVal) return sortDirection === \"asc\" ? -1 : 1;\n if (aVal > bVal) return sortDirection === \"asc\" ? 1 : -1;\n return 0;\n });\n }\n return sorted;\n }, [data, sortKey, sortDirection]);\n\n const paginatedData = useMemo(() => {\n if (externalPagination) return sortedData;\n const start = (currentPage - 1) * pageSize;\n return sortedData.slice(start, start + pageSize);\n }, [sortedData, currentPage, externalPagination, pageSize]);\n\n const totalPages = Math.ceil(sortedData.length / pageSize);\n\n // ─── Loading state ──────────────────────────────────────────────────────────\n if (loading) {\n return (\n <div className=\"rounded-2xl border border-zinc-200 dark:border-slate-700 overflow-hidden\">\n <div className=\"flex items-center justify-center h-64\">\n <Spinner size=\"lg\" label={labelLoading} />\n </div>\n </div>\n );\n }\n\n // ─── Empty state ────────────────────────────────────────────────────────────\n if (data.length === 0) {\n if (emptyState) return <>{emptyState}</>;\n return (\n <div className=\"rounded-2xl border border-zinc-200 dark:border-slate-700 overflow-hidden\">\n <div className=\"flex items-center justify-center h-64\">\n <div className=\"text-center px-4\">\n {emptyIcon ?? (\n <svg\n className=\"mx-auto h-12 w-12 text-zinc-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4\"\n />\n </svg>\n )}\n <Text size=\"sm\" weight=\"semibold\" className=\"mt-4\">\n {emptyTitle ?? noDataTitle}\n </Text>\n <Text size=\"sm\" variant=\"secondary\" className=\"mt-1\">\n {emptyMessage ?? noDataDescription}\n </Text>\n </div>\n </div>\n </div>\n );\n }\n\n const renderViewToggle = () => {\n if (!showViewToggle) return null;\n return (\n <div\n className=\"flex justify-end gap-1\"\n role=\"toolbar\"\n aria-label=\"View mode\"\n >\n {showTableView && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => handleViewModeChange(\"table\")}\n aria-label={tableView}\n aria-pressed={activeViewMode === \"table\"}\n className={`hidden sm:flex items-center justify-center p-2 rounded-lg ring-1 transition-colors ${activeViewMode === \"table\" ? \"bg-primary/5 text-primary dark:bg-primary/10 ring-primary/30\" : \"text-zinc-500 dark:text-zinc-400 ring-zinc-200 dark:ring-slate-700 hover:bg-zinc-100 dark:hover:bg-slate-800\"}`}\n >\n <svg\n className=\"w-4 h-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M3 10h18M3 6h18M3 14h18M3 18h18\"\n />\n </svg>\n </Button>\n )}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => handleViewModeChange(\"grid\")}\n aria-label={gridView}\n aria-pressed={activeViewMode === \"grid\"}\n className={`flex items-center justify-center p-2 rounded-lg ring-1 transition-colors ${activeViewMode === \"grid\" ? \"bg-primary/5 text-primary dark:bg-primary/10 ring-primary/30\" : \"text-zinc-500 dark:text-zinc-400 ring-zinc-200 dark:ring-slate-700 hover:bg-zinc-100 dark:hover:bg-slate-800\"}`}\n >\n <svg\n className=\"w-4 h-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M3.75 6A2.25 2.25 0 016 3.75h2.25A2.25 2.25 0 0110.5 6v2.25a2.25 2.25 0 01-2.25 2.25H6a2.25 2.25 0 01-2.25-2.25V6zM3.75 15.75A2.25 2.25 0 016 13.5h2.25a2.25 2.25 0 012.25 2.25V18a2.25 2.25 0 01-2.25 2.25H6A2.25 2.25 0 013.75 18v-2.25zM13.5 6a2.25 2.25 0 012.25-2.25H18A2.25 2.25 0 0120.25 6v2.25A2.25 2.25 0 0118 10.5h-2.25a2.25 2.25 0 01-2.25-2.25V6zM13.5 15.75a2.25 2.25 0 012.25-2.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-2.25A2.25 2.25 0 0113.5 18v-2.25z\"\n />\n </svg>\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => handleViewModeChange(\"list\")}\n aria-label={listView}\n aria-pressed={activeViewMode === \"list\"}\n className={`flex items-center justify-center p-2 rounded-lg ring-1 transition-colors ${activeViewMode === \"list\" ? \"bg-primary/5 text-primary dark:bg-primary/10 ring-primary/30\" : \"text-zinc-500 dark:text-zinc-400 ring-zinc-200 dark:ring-slate-700 hover:bg-zinc-100 dark:hover:bg-slate-800\"}`}\n >\n <svg\n className=\"w-4 h-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M8.25 6.75h12M8.25 12h12m-12 5.25h12M3.75 6.75h.007v.008H3.75V6.75zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zM3.75 12h.007v.008H3.75V12zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zm-.375 5.25h.007v.008H3.75v-.008zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0z\"\n />\n </svg>\n </Button>\n </div>\n );\n };\n\n // ─── Card views (grid / list) ────────────────────────────────────────────────\n const renderCardGrid = (mode: \"grid\" | \"list\") => {\n if (!mobileCardRender) return null;\n return (\n <div\n className={\n mode === \"grid\"\n ? `${GRID_MAP[gridCols]} gap-6`\n : \"flex flex-col gap-4\"\n }\n >\n {paginatedData.map((item) => (\n <SelectableCard\n key={keyExtractor(item)}\n id={keyExtractor(item)}\n selectable={selectable}\n selected={selectedIds.includes(keyExtractor(item))}\n listMode={mode === \"list\"}\n onToggle={(id, checked) =>\n onSelectionChange?.(\n checked\n ? [...selectedIds, id]\n : selectedIds.filter((s) => s !== id),\n )\n }\n >\n {mobileCardRender(item)}\n </SelectableCard>\n ))}\n </div>\n );\n };\n\n // ─── Main render ─────────────────────────────────────────────────────────────\n return (\n <div className=\"space-y-4\">\n {renderViewToggle()}\n\n {/* Non-table views */}\n {activeViewMode !== \"table\" &&\n mobileCardRender &&\n renderCardGrid(activeViewMode as \"grid\" | \"list\")}\n\n {/* Mobile cards in table mode */}\n {activeViewMode === \"table\" && mobileCardRender && (\n <div className=\"md:hidden space-y-6\">\n {paginatedData.map((item) => (\n <SelectableCard\n key={keyExtractor(item)}\n id={keyExtractor(item)}\n selectable={selectable}\n selected={selectedIds.includes(keyExtractor(item))}\n onToggle={(id, checked) =>\n onSelectionChange?.(\n checked\n ? [...selectedIds, id]\n : selectedIds.filter((s) => s !== id),\n )\n }\n >\n {mobileCardRender(item)}\n </SelectableCard>\n ))}\n </div>\n )}\n\n {/* Desktop table */}\n {activeViewMode === \"table\" && (\n <div className=\"rounded-2xl border border-zinc-200 dark:border-slate-700 overflow-hidden\">\n <div\n className={`overflow-x-auto ${stickyHeader ? \"max-h-[600px] overflow-y-auto\" : \"\"}`}\n >\n <table className=\"min-w-full divide-y divide-zinc-200 dark:divide-slate-700\">\n <thead\n className={`bg-zinc-50 dark:bg-slate-800 ${stickyHeader ? \"sticky top-0 z-10\" : \"\"}`}\n >\n <tr>\n {selectable && (\n <th scope=\"col\" className=\"px-4 py-3 w-8\">\n <input\n type=\"checkbox\"\n className=\"rounded border-zinc-300\"\n aria-label=\"Select all on page\"\n checked={\n paginatedData.length > 0 &&\n paginatedData.every((item) =>\n selectedIds.includes(keyExtractor(item)),\n )\n }\n onChange={(e) => {\n const pageIds = paginatedData.map(keyExtractor);\n onSelectionChange?.(\n e.target.checked\n ? [...new Set([...selectedIds, ...pageIds])]\n : selectedIds.filter(\n (id) => !pageIds.includes(id),\n ),\n );\n }}\n />\n </th>\n )}\n {columns.map((col) => (\n <th\n key={col.key}\n scope=\"col\"\n aria-sort={\n col.sortable\n ? sortKey === col.key\n ? sortDirection === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : \"none\"\n : undefined\n }\n className={`px-6 py-3 text-left text-xs font-medium text-zinc-500 dark:text-zinc-400 uppercase tracking-wider ${col.sortable ? \"cursor-pointer select-none hover:bg-zinc-100 dark:hover:bg-slate-700\" : \"\"}`}\n style={{ width: col.width }}\n onClick={() => col.sortable && handleSort(col.key)}\n >\n <div className=\"flex items-center gap-2\">\n {col.header}\n {col.sortable && (\n <span className=\"text-zinc-400\" aria-hidden=\"true\">\n {sortKey === col.key ? (\n sortDirection === \"asc\" ? (\n \"↑\"\n ) : (\n \"↓\"\n )\n ) : (\n <span className=\"opacity-30\">↕</span>\n )}\n </span>\n )}\n </div>\n </th>\n ))}\n {actions && (\n <th\n scope=\"col\"\n className=\"px-6 py-3 text-right text-xs font-medium text-zinc-500 dark:text-zinc-400 uppercase tracking-wider\"\n >\n {labelActions}\n </th>\n )}\n </tr>\n </thead>\n <tbody className=\"bg-white dark:bg-slate-900 divide-y divide-zinc-200 dark:divide-slate-700\">\n {paginatedData.map((item, index) => (\n <tr\n key={keyExtractor(item)}\n className={[\n striped && index % 2 === 1\n ? \"bg-zinc-50 dark:bg-slate-800\"\n : \"\",\n onRowClick\n ? \"cursor-pointer hover:bg-zinc-50 dark:hover:bg-slate-800/60\"\n : \"\",\n \"transition-colors duration-150\",\n ].join(\" \")}\n onClick={() => onRowClick?.(item)}\n >\n {selectable && (\n <td\n className=\"px-4 py-4 w-8\"\n onClick={(e) => e.stopPropagation()}\n >\n <input\n type=\"checkbox\"\n className=\"rounded border-zinc-300\"\n aria-label=\"Select row\"\n checked={selectedIds.includes(keyExtractor(item))}\n onChange={(e) => {\n const id = keyExtractor(item);\n onSelectionChange?.(\n e.target.checked\n ? [...selectedIds, id]\n : selectedIds.filter((s) => s !== id),\n );\n }}\n />\n </td>\n )}\n {columns.map((col) => (\n <td\n key={col.key}\n className=\"px-6 py-4 whitespace-nowrap text-sm text-zinc-900 dark:text-zinc-100\"\n >\n {col.render\n ? col.render(item)\n : (((item as Record<string, unknown>)[\n col.key\n ] as string) ?? \"-\")}\n </td>\n ))}\n {actions && (\n <td\n className=\"px-6 py-4 whitespace-nowrap text-right text-sm font-medium\"\n onClick={(e) => e.stopPropagation()}\n >\n {actions(item)}\n </td>\n )}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n )}\n\n {/* Pagination */}\n {!externalPagination && totalPages > 1 && (\n <div className=\"flex justify-center\">\n <Pagination\n currentPage={currentPage}\n totalPages={totalPages}\n onPageChange={setCurrentPage}\n maxVisible={resolvedPag.maxVisible}\n showFirstLast={resolvedPag.showFirstLast}\n showPrevNext={resolvedPag.showPrevNext}\n size={resolvedPag.size}\n />\n </div>\n )}\n </div>\n );\n}\n\n// ─── SelectableCard (internal) ───────────────────────────────────────────────\n\ninterface SelectableCardProps {\n id: string;\n selectable: boolean;\n selected: boolean;\n onToggle: (id: string, checked: boolean) => void;\n children: ReactNode;\n listMode?: boolean;\n}\n\nfunction SelectableCard({\n id,\n selectable,\n selected,\n onToggle,\n children,\n listMode = false,\n}: SelectableCardProps) {\n if (!selectable) return <div className=\"h-full\">{children}</div>;\n return (\n <div className=\"relative group h-full\">\n {/* Checkbox overlay — always visible, bg/shadow ensures contrast over any card background */}\n <div\n className={[\n \"absolute z-10\",\n listMode ? \"left-2 top-1/2 -translate-y-1/2\" : \"top-2 left-2\",\n ].join(\" \")}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"w-6 h-6 rounded-md bg-white/95 dark:bg-slate-800/95 shadow-md flex items-center justify-center\">\n {/* relative wrapper ensures checkmark SVG centers over the input */}\n <div className=\"relative flex items-center justify-center\">\n <input\n type=\"checkbox\"\n className={[\n \"w-4 h-4 rounded cursor-pointer transition-all appearance-none\",\n selected\n ? \"border-2 border-primary bg-primary\"\n : \"border-2 border-zinc-500 dark:border-slate-400 bg-transparent group-hover:border-primary\",\n ].join(\" \")}\n checked={selected}\n onChange={(e) => onToggle(id, e.target.checked)}\n aria-label=\"Select item\"\n />\n {selected && (\n <svg\n className=\"absolute inset-0 m-auto w-2.5 h-2.5 text-white pointer-events-none\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={3}\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n )}\n </div>\n </div>\n </div>\n {selected && (\n <div\n className=\"absolute inset-0 z-[5] rounded-xl ring-2 ring-primary ring-offset-0 pointer-events-none\"\n aria-hidden=\"true\"\n />\n )}\n {children}\n </div>\n );\n}\n","/**\r\n * Animation Helpers\r\n *\r\n * Easing functions for animations and transitions.\r\n */\r\n\r\nexport const easings = {\r\n linear: (t: number) => t,\r\n easeInQuad: (t: number) => t * t,\r\n easeOutQuad: (t: number) => t * (2 - t),\r\n easeInOutQuad: (t: number) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t),\r\n easeInCubic: (t: number) => t * t * t,\r\n easeOutCubic: (t: number) => --t * t * t + 1,\r\n easeInOutCubic: (t: number) =>\r\n t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,\r\n easeInQuart: (t: number) => t * t * t * t,\r\n easeOutQuart: (t: number) => 1 - --t * t * t * t,\r\n easeInOutQuart: (t: number) =>\r\n t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t,\r\n};\r\n","/**\r\n * Color Helpers\r\n *\r\n * UI helpers for color manipulation and utilities.\r\n */\r\n\r\nexport function hexToRgb(\r\n hex: string,\r\n): { r: number; g: number; b: number } | null {\r\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n return result\r\n ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16),\r\n }\r\n : null;\r\n}\r\n\r\nexport function rgbToHex(r: number, g: number, b: number): string {\r\n return (\r\n \"#\" +\r\n [r, g, b]\r\n .map((x) => {\r\n const hex = x.toString(16);\r\n return hex.length === 1 ? \"0\" + hex : hex;\r\n })\r\n .join(\"\")\r\n );\r\n}\r\n\r\nexport function getContrastColor(hex: string): \"#000000\" | \"#ffffff\" {\r\n const rgb = hexToRgb(hex);\r\n if (!rgb) return \"#000000\";\r\n const luminance = (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255;\r\n return luminance > 0.5 ? \"#000000\" : \"#ffffff\";\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useEffect, useRef } from \"react\";\r\nimport { Button, Div, Heading } from \"@mohasinac/ui\";\r\n\r\n// ─── SideModal ─────────────────────────────────────────────────────────────────\r\n\r\nexport interface SideModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n title?: string;\r\n /** Default: \"right\". \"left\" opens from the left edge. */\r\n side?: \"left\" | \"right\";\r\n /** Width on desktop. Default: \"60vw\" clamped to max-w-2xl. */\r\n width?: string;\r\n children: React.ReactNode;\r\n /** Extra class on the panel Div. */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * SideModal — slides in from the right (or left) on desktop (60 vw),\r\n * full-screen drawer on mobile (< sm breakpoint).\r\n *\r\n * Accessibility:\r\n * - Traps focus inside the panel when open\r\n * - Closes on Escape key\r\n * - backdrop click closes panel\r\n * - role=\"dialog\" + aria-modal + aria-labelledby\r\n */\r\nexport function SideModal({\r\n isOpen,\r\n onClose,\r\n title,\r\n side = \"right\",\r\n children,\r\n className = \"\",\r\n}: SideModalProps) {\r\n const panelRef = useRef<HTMLDivElement>(null);\r\n const titleId = useRef(`side-modal-title-${Math.random().toString(36).slice(2, 8)}`);\r\n\r\n // Escape key handler\r\n useEffect(() => {\r\n if (!isOpen) return;\r\n const handler = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") onClose();\r\n };\r\n document.addEventListener(\"keydown\", handler);\r\n return () => document.removeEventListener(\"keydown\", handler);\r\n }, [isOpen, onClose]);\r\n\r\n // Focus trap — move focus into panel on open\r\n useEffect(() => {\r\n if (isOpen) {\r\n const el = panelRef.current;\r\n if (el) {\r\n const focusable = el.querySelector<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\r\n );\r\n focusable?.focus();\r\n }\r\n }\r\n }, [isOpen]);\r\n\r\n // Prevent body scroll while open\r\n useEffect(() => {\r\n if (isOpen) {\r\n document.body.style.overflow = \"hidden\";\r\n } else {\r\n document.body.style.overflow = \"\";\r\n }\r\n return () => {\r\n document.body.style.overflow = \"\";\r\n };\r\n }, [isOpen]);\r\n\r\n if (!isOpen) return null;\r\n\r\n const translateOut = side === \"right\" ? \"translate-x-full\" : \"-translate-x-full\";\r\n const origin = side === \"right\" ? \"right-0\" : \"left-0\";\r\n\r\n return (\r\n <Div\r\n className=\"fixed inset-0 z-50 flex\"\r\n aria-hidden={!isOpen}\r\n >\r\n {/* Backdrop */}\r\n <Div\r\n className=\"absolute inset-0 bg-black/50 transition-opacity duration-300\"\r\n onClick={onClose}\r\n aria-hidden=\"true\"\r\n />\r\n\r\n {/* Panel */}\r\n <Div\r\n ref={panelRef}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby={title ? titleId.current : undefined}\r\n className={`\r\n absolute inset-y-0 ${origin} flex flex-col\r\n w-full sm:w-[min(60vw,_672px)]\r\n bg-white dark:bg-zinc-900\r\n shadow-2xl\r\n transition-transform duration-300 ease-in-out\r\n ${isOpen ? \"translate-x-0\" : translateOut}\r\n ${className}\r\n `}\r\n >\r\n {/* Header */}\r\n {title && (\r\n <Div className=\"flex items-center justify-between border-b border-neutral-200 dark:border-zinc-700 px-5 py-4 flex-shrink-0\">\r\n <Heading\r\n level={2}\r\n id={titleId.current}\r\n className=\"text-base font-semibold text-neutral-900 dark:text-white truncate\"\r\n >\r\n {title}\r\n </Heading>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={onClose}\r\n aria-label=\"Close panel\"\r\n className=\"ml-2 flex-shrink-0\"\r\n >\r\n ✕\r\n </Button>\r\n </Div>\r\n )}\r\n\r\n {/* Body — scrollable */}\r\n <Div className=\"flex-1 overflow-y-auto p-5\">{children}</Div>\r\n </Div>\r\n </Div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useMemo, useRef, useState } from \"react\";\r\nimport { Div } from \"../components/Div\";\r\n\r\n// ─── Allowed HTML tags (safe subset — no script/iframe/object) ────────────────\r\n\r\nconst ALLOWED_TAGS = new Set([\r\n \"p\",\r\n \"br\",\r\n \"strong\",\r\n \"em\",\r\n \"u\",\r\n \"s\",\r\n \"del\",\r\n \"ins\",\r\n \"b\",\r\n \"i\",\r\n \"mark\",\r\n \"code\",\r\n \"pre\",\r\n \"blockquote\",\r\n \"h1\",\r\n \"h2\",\r\n \"h3\",\r\n \"h4\",\r\n \"h5\",\r\n \"h6\",\r\n \"ul\",\r\n \"ol\",\r\n \"li\",\r\n \"a\",\r\n \"hr\",\r\n \"table\",\r\n \"thead\",\r\n \"tbody\",\r\n \"tr\",\r\n \"th\",\r\n \"td\",\r\n \"caption\",\r\n \"figure\",\r\n \"figcaption\",\r\n \"img\",\r\n \"picture\",\r\n \"span\",\r\n \"div\",\r\n \"section\",\r\n \"article\",\r\n]);\r\n\r\n/** Attributes allowed per tag. \"*\" means allowed on any tag. */\r\nconst ALLOWED_ATTRS: Record<string, string[]> = {\r\n \"*\": [\"class\", \"id\", \"lang\", \"dir\", \"aria-label\", \"role\", \"tabindex\"],\r\n a: [\"href\", \"title\", \"target\", \"rel\"],\r\n img: [\"src\", \"alt\", \"width\", \"height\", \"loading\", \"data-align\"],\r\n td: [\"colspan\", \"rowspan\"],\r\n th: [\"colspan\", \"rowspan\", \"scope\"],\r\n ol: [\"type\", \"start\"],\r\n};\r\n\r\n// ─── Simple client-side sanitiser ─────────────────────────────────────────────\r\n// We avoid 3rd-party DOMPurify to keep the bundle lean.\r\n// This runs only on nodes rendered from trusted ProseMirror output (staff CMS).\r\n// For user-supplied HTML, add a server-side DOMPurify step before storing.\r\n\r\nfunction sanitiseHtml(dirty: string): string {\r\n if (typeof window === \"undefined\") {\r\n // SSR: return as-is; real sanitisation should happen before storage.\r\n return dirty;\r\n }\r\n\r\n const dp = new DOMParser();\r\n const doc = dp.parseFromString(dirty, \"text/html\");\r\n\r\n function walk(node: Element): void {\r\n const children = Array.from(node.children);\r\n for (const child of children) {\r\n const tag = child.tagName.toLowerCase();\r\n\r\n if (!ALLOWED_TAGS.has(tag)) {\r\n // Replace disallowed tag with its text content\r\n node.replaceChild(\r\n document.createTextNode(child.textContent ?? \"\"),\r\n child,\r\n );\r\n continue;\r\n }\r\n\r\n // Strip disallowed attributes\r\n const attrNames = Array.from(child.attributes).map((a) => a.name);\r\n const allowed = [\r\n ...(ALLOWED_ATTRS[\"*\"] ?? []),\r\n ...(ALLOWED_ATTRS[tag] ?? []),\r\n ];\r\n for (const attr of attrNames) {\r\n if (!allowed.includes(attr)) {\r\n child.removeAttribute(attr);\r\n }\r\n }\r\n\r\n // Force external links to be safe\r\n if (tag === \"a\") {\r\n const href = child.getAttribute(\"href\") ?? \"\";\r\n if (/^javascript:/i.test(href)) {\r\n child.removeAttribute(\"href\");\r\n }\r\n if (!href.startsWith(\"/\") && !href.startsWith(\"#\")) {\r\n child.setAttribute(\"rel\", \"noopener noreferrer\");\r\n child.setAttribute(\"target\", \"_blank\");\r\n }\r\n }\r\n\r\n // Strip src from img if it's a data URI (can exfiltrate data)\r\n if (tag === \"img\") {\r\n const src = child.getAttribute(\"src\") ?? \"\";\r\n if (/^data:/i.test(src)) {\r\n child.removeAttribute(\"src\");\r\n }\r\n }\r\n\r\n walk(child);\r\n }\r\n }\r\n\r\n walk(doc.body);\r\n return doc.body.innerHTML;\r\n}\r\n\r\n// ─── RichText component ───────────────────────────────────────────────────────\r\n\r\n/** Adds interactive copy buttons to every `<pre>` block inside a container. */\r\nfunction attachCopyButtons(container: HTMLDivElement) {\r\n container.querySelectorAll<HTMLElement>(\"pre\").forEach((pre) => {\r\n // Avoid double-adding\r\n if (pre.querySelector(\"[data-copy-btn]\")) return;\r\n\r\n pre.style.position = \"relative\";\r\n\r\n const btn = document.createElement(\"button\");\r\n btn.dataset.copyBtn = \"1\";\r\n btn.type = \"button\";\r\n btn.setAttribute(\"aria-label\", \"Copy code\");\r\n btn.textContent = \"Copy\";\r\n btn.style.cssText =\r\n \"position:absolute;top:8px;right:8px;padding:2px 10px;font-size:11px;font-family:inherit;\" +\r\n \"border-radius:6px;border:1px solid rgba(148,163,184,.4);background:rgba(30,41,59,.75);\" +\r\n \"color:#e2e8f0;cursor:pointer;line-height:1.6;user-select:none;transition:background .15s;\";\r\n\r\n btn.addEventListener(\"click\", () => {\r\n const code =\r\n pre.querySelector(\"code\")?.textContent ?? pre.textContent ?? \"\";\r\n navigator.clipboard\r\n .writeText(code)\r\n .then(() => {\r\n btn.textContent = \"Copied!\";\r\n setTimeout(() => {\r\n btn.textContent = \"Copy\";\r\n }, 1800);\r\n })\r\n .catch(() => {});\r\n });\r\n\r\n pre.appendChild(btn);\r\n });\r\n}\r\n\r\nexport interface RichTextProps {\r\n /** Raw HTML string — typically from ProseMirror / Tiptap JSON rendered to HTML. */\r\n html: string;\r\n /** Extra class names on the wrapper div. */\r\n className?: string;\r\n /** Tailwind prose class variant. Defaults to \"prose dark:prose-invert\". */\r\n proseClass?: string;\r\n /**\r\n * When true, every `<pre>` code block gets an overlay \"Copy\" button that\r\n * copies the code text to the clipboard on click. Defaults to false.\r\n */\r\n copyableCode?: boolean;\r\n /**\r\n * Optional syntax highlighter applied to every `<pre><code>` block.\r\n * Called with (rawCode, languageName) — return the highlighted HTML string.\r\n *\r\n * The language name is derived from the `language-*` CSS class on the `<code>`\r\n * element (e.g. \"ts\", \"js\", \"python\"). Falls back to `\"plaintext\"` when absent.\r\n *\r\n * @example\r\n * ```tsx\r\n * import hljs from \"highlight.js\";\r\n * <RichText\r\n * html={post.body}\r\n * highlightCode={(code, lang) =>\r\n * hljs.highlight(code, { language: lang || \"plaintext\", ignoreIllegals: true }).value\r\n * }\r\n * />\r\n * ```\r\n */\r\n highlightCode?: (code: string, lang: string) => string;\r\n}\r\n\r\n/**\r\n * RichText — renders sanitised HTML from a CMS / ProseMirror output.\r\n *\r\n * Security: client-side DOM-based sanitiser strips disallowed tags/attrs.\r\n * For defence-in-depth, also sanitise on the server before storing.\r\n *\r\n * Usage:\r\n * ```tsx\r\n * <RichText html={blogPost.body} className=\"max-w-2xl\" />\r\n * <RichText html={desc} copyableCode />\r\n * ```\r\n */\r\nexport function RichText({\r\n html,\r\n className = \"\",\r\n proseClass = \"prose dark:prose-invert max-w-none\",\r\n copyableCode = false,\r\n highlightCode,\r\n}: RichTextProps) {\r\n const containerRef = useRef<HTMLDivElement | null>(null);\r\n\r\n const safe = useMemo(() => {\r\n const sanitized = sanitiseHtml(html);\r\n\r\n if (!highlightCode || typeof document === \"undefined\") return sanitized;\r\n\r\n // Apply syntax highlighting to <pre><code> blocks after sanitisation\r\n const container = document.createElement(\"div\");\r\n container.innerHTML = sanitized;\r\n container.querySelectorAll(\"pre > code\").forEach((codeEl) => {\r\n const langClass = Array.from(codeEl.classList).find((c) =>\r\n c.startsWith(\"language-\"),\r\n );\r\n const lang = langClass ? langClass.replace(\"language-\", \"\") : \"plaintext\";\r\n const highlighted = highlightCode(codeEl.textContent ?? \"\", lang);\r\n codeEl.innerHTML = highlighted;\r\n });\r\n return container.innerHTML;\r\n }, [html, highlightCode]);\r\n\r\n // Attach copy buttons imperatively after the HTML is mounted / updated.\r\n const ref = (el: HTMLDivElement | null) => {\r\n containerRef.current = el;\r\n if (el && copyableCode) {\r\n attachCopyButtons(el);\r\n }\r\n };\r\n\r\n return (\r\n <Div\r\n ref={ref}\r\n className={`${proseClass} ${className}`}\r\n dangerouslySetInnerHTML={{ __html: safe }}\r\n />\r\n );\r\n}\r\n","\"use client\";\r\n\r\n/**\r\n * BulkActionBar\r\n *\r\n * Appears at the top of the content area whenever one or more list items are\r\n * selected. Shows a selection-count pill (tap ✕ to clear), a type-picker\r\n * dropdown, and an Apply button.\r\n *\r\n * Rendered by ListingLayout automatically when selectedCount > 0.\r\n */\r\n\r\nimport React, { useState, useRef, useEffect } from \"react\";\r\nimport { ChevronUp, ChevronDown, X } from \"lucide-react\";\r\nimport { Button } from \"./Button\";\r\nimport { Span } from \"./Typography\";\r\n\r\nexport interface BulkActionItem {\r\n id: string;\r\n label: string;\r\n variant?:\r\n | \"primary\"\r\n | \"secondary\"\r\n | \"outline\"\r\n | \"danger\"\r\n | \"ghost\"\r\n | \"warning\";\r\n icon?: React.ReactNode;\r\n onClick: () => void;\r\n disabled?: boolean;\r\n loading?: boolean;\r\n}\r\n\r\nexport interface BulkActionBarLabels {\r\n /** e.g. \"${count} selected\" — receives count as format arg */\r\n selected?: string;\r\n apply?: string;\r\n clearSelection?: string;\r\n bulkActions?: string;\r\n}\r\n\r\nexport interface BulkActionBarProps {\r\n selectedCount: number;\r\n onClearSelection?: () => void;\r\n actions?: BulkActionItem[];\r\n labels?: BulkActionBarLabels;\r\n}\r\n\r\nconst DEFAULT_LABELS: Required<BulkActionBarLabels> = {\r\n selected: \"selected\",\r\n apply: \"Apply\",\r\n clearSelection: \"Clear selection\",\r\n bulkActions: \"Bulk actions\",\r\n};\r\n\r\nexport function BulkActionBar({\r\n selectedCount,\r\n onClearSelection,\r\n actions = [],\r\n labels,\r\n}: BulkActionBarProps) {\r\n const l = { ...DEFAULT_LABELS, ...labels };\r\n\r\n const [pickerOpen, setPickerOpen] = useState(false);\r\n const [selectedActionId, setSelectedActionId] = useState<string | null>(null);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n\r\n // Inline click-outside handler\r\n useEffect(() => {\r\n const handler = (e: MouseEvent) => {\r\n if (!containerRef.current?.contains(e.target as Node)) {\r\n setPickerOpen(false);\r\n }\r\n };\r\n document.addEventListener(\"mousedown\", handler);\r\n return () => document.removeEventListener(\"mousedown\", handler);\r\n }, []);\r\n\r\n // Keep selectedActionId in sync with available actions\r\n useEffect(() => {\r\n setSelectedActionId((prev) => {\r\n const ids = actions.map((a) => a.id);\r\n if (prev && ids.includes(prev)) return prev;\r\n return ids[0] ?? null;\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [actions.map((a) => a.id).join(\",\")]);\r\n\r\n if (selectedCount === 0) return null;\r\n\r\n const selectedAction = actions.find((a) => a.id === selectedActionId);\r\n\r\n const handleApply = () => {\r\n if (!selectedActionId) return;\r\n selectedAction?.onClick();\r\n setPickerOpen(false);\r\n };\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className=\"relative rounded-lg overflow-hidden border border-primary/20 dark:border-primary/30 animate-in fade-in slide-in-from-top-1 duration-150\"\r\n role=\"region\"\r\n aria-live=\"polite\"\r\n aria-label={l.bulkActions}\r\n >\r\n {/* Accent stripe */}\r\n <div className=\"h-[3px] w-full bg-gradient-to-r from-primary-600 via-primary-400 to-primary-600 dark:from-secondary-600 dark:via-secondary-400 dark:to-secondary-600\" />\r\n\r\n {/* Main row */}\r\n <div className=\"flex items-center gap-2 px-3 py-2\">\r\n {/* Selection count pill */}\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n onClick={onClearSelection}\r\n className=\"inline-flex items-center gap-1.5 flex-shrink-0 bg-primary-50 hover:bg-primary-100 active:bg-primary-200 dark:bg-primary-950/30 dark:hover:bg-primary-900/50 text-primary-700 dark:text-primary-300 rounded-full pl-2 pr-3 h-8 border border-primary-200/70 dark:border-primary-800/50 transition-colors min-h-0\"\r\n aria-label={l.clearSelection}\r\n >\r\n <X className=\"w-3.5 h-3.5 flex-shrink-0\" aria-hidden=\"true\" />\r\n <Span className=\"text-xs font-semibold tabular-nums whitespace-nowrap leading-none\">\r\n {selectedCount} {l.selected}\r\n </Span>\r\n </Button>\r\n\r\n {/* Picker trigger */}\r\n {actions.length > 0 && (\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n onClick={() => setPickerOpen((o) => !o)}\r\n aria-haspopup=\"listbox\"\r\n aria-expanded={pickerOpen}\r\n className={[\r\n \"flex-1 min-w-0 h-10 flex items-center gap-2 px-3 rounded-lg border text-sm font-medium transition-colors\",\r\n \"bg-zinc-50 hover:bg-zinc-100 active:bg-zinc-200 dark:bg-slate-800/60 dark:hover:bg-slate-700/60\",\r\n \"border-zinc-200 dark:border-slate-700\",\r\n selectedAction?.variant === \"danger\"\r\n ? \"text-red-600 dark:text-red-400\"\r\n : \"text-zinc-800 dark:text-zinc-100\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n >\r\n {selectedAction?.icon && (\r\n <Span\r\n className=\"flex-shrink-0 w-4 h-4 flex items-center justify-center\"\r\n aria-hidden=\"true\"\r\n >\r\n {selectedAction.icon}\r\n </Span>\r\n )}\r\n <Span className=\"flex-1 truncate text-left leading-none\">\r\n {selectedAction?.label ?? l.bulkActions}\r\n </Span>\r\n {pickerOpen ? (\r\n <ChevronUp\r\n className=\"w-4 h-4 flex-shrink-0 text-zinc-400\"\r\n aria-hidden=\"true\"\r\n />\r\n ) : (\r\n <ChevronDown\r\n className=\"w-4 h-4 flex-shrink-0 text-zinc-400\"\r\n aria-hidden=\"true\"\r\n />\r\n )}\r\n </Button>\r\n )}\r\n\r\n {/* Apply button */}\r\n {actions.length > 0 && (\r\n <Button\r\n type=\"button\"\r\n variant={selectedAction?.variant ?? \"primary\"}\r\n size=\"sm\"\r\n isLoading={selectedAction?.loading}\r\n disabled={\r\n !selectedActionId ||\r\n selectedAction?.disabled ||\r\n selectedAction?.loading\r\n }\r\n onClick={handleApply}\r\n className=\"h-10 flex-shrink-0\"\r\n >\r\n <Span className=\"leading-none\">{l.apply}</Span>\r\n </Button>\r\n )}\r\n </div>\r\n\r\n {/* Picker dropdown */}\r\n {actions.length > 0 && (\r\n <div\r\n role=\"listbox\"\r\n aria-label={l.bulkActions}\r\n className={[\r\n \"overflow-hidden border-t border-zinc-200/80 dark:border-slate-700/80\",\r\n \"transition-[max-height,opacity] duration-200 ease-out\",\r\n pickerOpen\r\n ? \"max-h-64 opacity-100\"\r\n : \"max-h-0 opacity-0 pointer-events-none\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n >\r\n {actions.map((action) => (\r\n <button\r\n key={action.id}\r\n role=\"option\"\r\n aria-selected={selectedActionId === action.id}\r\n disabled={action.disabled}\r\n onClick={() => {\r\n setSelectedActionId(action.id);\r\n setPickerOpen(false);\r\n }}\r\n className={[\r\n \"w-full flex items-center gap-2.5 px-4 py-2.5 text-sm text-left transition-colors\",\r\n \"hover:bg-zinc-50 dark:hover:bg-slate-800/60\",\r\n action.variant === \"danger\"\r\n ? \"text-red-600 dark:text-red-400\"\r\n : \"text-zinc-700 dark:text-zinc-200\",\r\n selectedActionId === action.id\r\n ? \"bg-zinc-50 dark:bg-slate-800/60 font-medium\"\r\n : \"\",\r\n action.disabled\r\n ? \"opacity-40 cursor-not-allowed\"\r\n : \"cursor-pointer\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n >\r\n {action.icon && (\r\n <Span\r\n className=\"flex-shrink-0 w-4 h-4 flex items-center justify-center\"\r\n aria-hidden=\"true\"\r\n >\r\n {action.icon}\r\n </Span>\r\n )}\r\n <Span className=\"flex-1\">{action.label}</Span>\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\n/**\r\n * ListingLayout\r\n *\r\n * Standard layout shell for ALL listing / table pages — public, seller, admin,\r\n * and user. Provides a sticky toolbar with search, sort, view-toggle, filter\r\n * sidebar (desktop), filter overlay (mobile), and bulk-action bar.\r\n *\r\n * ┌──────────────────────────────────────────────────────────────────┐\r\n * │ [headerSlot — PageHeader / Heading + subtitle] │\r\n * ├──────────────────────────────────────────────────────────────────┤\r\n * │ [statusTabsSlot — status filter tabs] │\r\n * ├──────────────────────────────────────────────────────────────────┤\r\n * │ STICKY ─────────────────────────────────────────────────────── │\r\n * │ [Filters] [searchSlot] [viewToggle] [sortSlot] [acts] [page] │\r\n * ├──────────┬───────────────────────────────────────────────────────┤\r\n * │ Filters │ [activeFiltersSlot — chips] │\r\n * │ (sidebar)│ [DataTable / ProductGrid / card list — children] │\r\n * └──────────┴───────────────────────────────────────────────────────┘\r\n */\r\n\r\nimport { ReactNode, useState, useEffect, useRef } from \"react\";\r\nimport { Aside, Nav } from \"./Semantic\";\r\nimport { Text, Span } from \"./Typography\";\r\nimport { Button } from \"./Button\";\r\nimport { BulkActionBar } from \"./BulkActionBar\";\r\nimport type { BulkActionItem } from \"./BulkActionBar\";\r\n\r\nexport interface ListingLayoutLabels {\r\n filtersTitle?: string;\r\n clearAll?: string;\r\n applyFilters?: string;\r\n close?: string;\r\n showFilters?: string;\r\n hideFilters?: string;\r\n filterActiveCount?: (count: number) => string;\r\n}\r\n\r\nexport interface ListingLayoutProps {\r\n // ── Header ──────────────────────────────────────────────────────────────\r\n headerSlot?: ReactNode;\r\n\r\n // ── Status tabs ─────────────────────────────────────────────────────────\r\n statusTabsSlot?: ReactNode;\r\n\r\n // ── Filter ──────────────────────────────────────────────────────────────\r\n filterContent?: ReactNode;\r\n filterActiveCount?: number;\r\n onFilterApply?: () => void;\r\n onFilterClear?: () => void;\r\n filterTitle?: string;\r\n\r\n // ── Active filters ──────────────────────────────────────────────────────\r\n activeFiltersSlot?: ReactNode;\r\n\r\n // ── Toolbar slots ────────────────────────────────────────────────────────\r\n searchSlot?: ReactNode;\r\n sortSlot?: ReactNode;\r\n viewToggleSlot?: ReactNode;\r\n actionsSlot?: ReactNode;\r\n\r\n // ── Bulk selection ───────────────────────────────────────────────────────\r\n selectedCount?: number;\r\n onClearSelection?: () => void;\r\n bulkActionItems?: BulkActionItem[];\r\n\r\n // ── Pagination ───────────────────────────────────────────────────────────\r\n toolbarPaginationSlot?: ReactNode;\r\n paginationSlot?: ReactNode;\r\n\r\n // ── Content ──────────────────────────────────────────────────────────────\r\n children: ReactNode;\r\n\r\n // ── Options ──────────────────────────────────────────────────────────────\r\n /** When true, sticky toolbar sits at top-0 (inside overflow-y-auto container).\r\n * When false, accounts for a top navbar above (top-14/top-[120px]). */\r\n isDashboard?: boolean;\r\n defaultSidebarOpen?: boolean;\r\n className?: string;\r\n loading?: boolean;\r\n errorSlot?: ReactNode;\r\n\r\n // ── i18n labels ──────────────────────────────────────────────────────────\r\n labels?: ListingLayoutLabels;\r\n}\r\n\r\nconst DEFAULT_LABELS: Required<ListingLayoutLabels> = {\r\n filtersTitle: \"Filters\",\r\n clearAll: \"Clear all\",\r\n applyFilters: \"Apply filters\",\r\n close: \"Close\",\r\n showFilters: \"Show filters\",\r\n hideFilters: \"Hide filters\",\r\n filterActiveCount: (count) => `${count} active`,\r\n};\r\n\r\nexport function ListingLayout({\r\n headerSlot,\r\n statusTabsSlot,\r\n filterContent,\r\n filterActiveCount = 0,\r\n onFilterApply,\r\n onFilterClear,\r\n filterTitle,\r\n activeFiltersSlot,\r\n searchSlot,\r\n sortSlot,\r\n viewToggleSlot,\r\n actionsSlot,\r\n selectedCount = 0,\r\n onClearSelection,\r\n bulkActionItems,\r\n toolbarPaginationSlot,\r\n paginationSlot,\r\n children,\r\n isDashboard = false,\r\n defaultSidebarOpen = false,\r\n className = \"\",\r\n loading = false,\r\n errorSlot,\r\n labels,\r\n}: ListingLayoutProps) {\r\n const l = { ...DEFAULT_LABELS, ...labels };\r\n const [sidebarOpen, setSidebarOpen] = useState(defaultSidebarOpen);\r\n const [mobileFilterOpen, setMobileFilterOpen] = useState(false);\r\n const mobileOverlayRef = useRef<HTMLDivElement>(null);\r\n\r\n const hasFilter = Boolean(filterContent);\r\n const panelTitle = filterTitle ?? l.filtersTitle;\r\n\r\n // Sticky offset: dashboard containers scroll internally (top-0);\r\n // public pages have a top navbar (top-14 / top-[120px]).\r\n const stickyTop = isDashboard ? \"top-0\" : \"top-14 md:top-[120px]\";\r\n const sidebarSticky = isDashboard ? \"sticky top-16\" : \"sticky top-[176px]\";\r\n\r\n // Close mobile overlay on Escape key\r\n useEffect(() => {\r\n if (!mobileFilterOpen) return;\r\n const handle = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") setMobileFilterOpen(false);\r\n };\r\n document.addEventListener(\"keydown\", handle);\r\n return () => document.removeEventListener(\"keydown\", handle);\r\n }, [mobileFilterOpen]);\r\n\r\n // Lock body scroll while mobile filter is open\r\n useEffect(() => {\r\n if (mobileFilterOpen) {\r\n const w = window.innerWidth - document.documentElement.clientWidth;\r\n document.body.style.overflow = \"hidden\";\r\n document.body.style.paddingRight = `${w}px`;\r\n } else {\r\n document.body.style.overflow = \"\";\r\n document.body.style.paddingRight = \"\";\r\n }\r\n return () => {\r\n document.body.style.overflow = \"\";\r\n document.body.style.paddingRight = \"\";\r\n };\r\n }, [mobileFilterOpen]);\r\n\r\n const handleMobileApply = () => {\r\n onFilterApply?.();\r\n setMobileFilterOpen(false);\r\n };\r\n\r\n return (\r\n <div\r\n className={[\r\n \"w-full space-y-4\",\r\n toolbarPaginationSlot\r\n ? selectedCount > 0\r\n ? \"pb-28 lg:pb-0\"\r\n : \"pb-12 lg:pb-0\"\r\n : \"\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n >\r\n {/* Header */}\r\n {headerSlot}\r\n\r\n {/* Status tabs */}\r\n {statusTabsSlot && (\r\n <div className=\"overflow-x-auto touch-pan-x -mx-4 px-4 md:-mx-6 md:px-6\">\r\n {statusTabsSlot}\r\n </div>\r\n )}\r\n\r\n {/* Sticky toolbar */}\r\n <div\r\n className={[\r\n \"sticky z-20 -mx-4 px-4 md:-mx-6 md:px-6\",\r\n stickyTop,\r\n \"bg-white/80 dark:bg-slate-950/80 backdrop-blur-md\",\r\n \"border-b border-zinc-200/70 dark:border-slate-800/70\",\r\n \"shadow-[0_1px_3px_rgba(0,0,0,0.04)] dark:shadow-[0_1px_3px_rgba(0,0,0,0.2)]\",\r\n \"py-2.5\",\r\n ].join(\" \")}\r\n >\r\n {/* Desktop (lg+): single flex row */}\r\n <div className=\"hidden lg:flex items-center gap-2 min-w-0\">\r\n {hasFilter && (\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => setSidebarOpen((prev) => !prev)}\r\n aria-label={sidebarOpen ? l.hideFilters : l.showFilters}\r\n aria-expanded={sidebarOpen}\r\n className={[\r\n \"hidden lg:flex flex-shrink-0 items-center gap-1.5\",\r\n \"rounded-full h-8 px-3 text-sm font-medium\",\r\n \"border transition-all duration-150\",\r\n sidebarOpen\r\n ? \"bg-primary/10 border-primary/30 text-primary dark:bg-primary/15 dark:border-primary/40\"\r\n : \"border-zinc-200 dark:border-slate-700 text-zinc-600 dark:text-slate-300 hover:border-zinc-300 dark:hover:border-slate-600 hover:bg-zinc-50 dark:hover:bg-slate-800/60\",\r\n ].join(\" \")}\r\n >\r\n <FilterIcon />\r\n {l.filtersTitle}\r\n {filterActiveCount > 0 && (\r\n <Span\r\n className=\"inline-flex items-center justify-center w-4 h-4 text-[10px] font-bold rounded-full bg-primary text-white\"\r\n aria-label={l.filterActiveCount(filterActiveCount)}\r\n >\r\n {filterActiveCount}\r\n </Span>\r\n )}\r\n </Button>\r\n )}\r\n\r\n {searchSlot && <div className=\"flex-1 min-w-0\">{searchSlot}</div>}\r\n\r\n <div className=\"flex items-center gap-1.5 flex-shrink-0\">\r\n {sortSlot}\r\n {viewToggleSlot && (\r\n <div className=\"flex items-center gap-0.5 rounded-full border border-zinc-200 dark:border-slate-700 bg-white dark:bg-slate-900 p-0.5 shadow-sm\">\r\n {viewToggleSlot}\r\n </div>\r\n )}\r\n {actionsSlot}\r\n </div>\r\n\r\n {toolbarPaginationSlot && (\r\n <div className=\"ml-auto flex-shrink-0 pl-3 border-l border-zinc-200/70 dark:border-slate-700/70\">\r\n {toolbarPaginationSlot}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Mobile/Tablet (< lg): two stacked rows */}\r\n <div className=\"flex flex-col gap-2 lg:hidden\">\r\n <div className=\"flex items-center gap-2\">\r\n {hasFilter && (\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => setMobileFilterOpen(true)}\r\n aria-label={l.filtersTitle}\r\n className={[\r\n \"flex-shrink-0 flex items-center gap-1.5\",\r\n \"rounded-full h-9 px-3 text-sm font-medium\",\r\n \"border border-zinc-200 dark:border-slate-700\",\r\n \"text-zinc-600 dark:text-slate-300\",\r\n \"hover:bg-zinc-50 dark:hover:bg-slate-800/60 transition-colors\",\r\n filterActiveCount > 0\r\n ? \"border-primary/40 bg-primary/5 text-primary\"\r\n : \"\",\r\n ].join(\" \")}\r\n >\r\n <FilterIcon />\r\n {l.filtersTitle}\r\n {filterActiveCount > 0 && (\r\n <Span\r\n className=\"inline-flex items-center justify-center w-4 h-4 text-[10px] font-bold rounded-full bg-primary text-white\"\r\n aria-label={l.filterActiveCount(filterActiveCount)}\r\n >\r\n {filterActiveCount}\r\n </Span>\r\n )}\r\n </Button>\r\n )}\r\n {searchSlot && <div className=\"flex-1 min-w-0\">{searchSlot}</div>}\r\n </div>\r\n\r\n {(sortSlot || viewToggleSlot || actionsSlot) && (\r\n <div className=\"flex items-stretch min-h-[44px] gap-2 overflow-x-auto\">\r\n <div className=\"flex items-center gap-2 flex-shrink-0 pb-px\">\r\n {sortSlot}\r\n {viewToggleSlot}\r\n {actionsSlot}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Bulk action bar — desktop, inside toolbar */}\r\n {selectedCount > 0 && (\r\n <div className=\"hidden lg:block pt-2 mt-2 border-t border-zinc-100 dark:border-slate-800\">\r\n <BulkActionBar\r\n selectedCount={selectedCount}\r\n onClearSelection={onClearSelection}\r\n actions={bulkActionItems}\r\n labels={{\r\n selected: l.filtersTitle, // placeholder — callers provide proper labels\r\n apply: l.applyFilters,\r\n clearSelection: l.clearAll,\r\n }}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Sidebar + Content area */}\r\n <div className=\"flex gap-4 lg:gap-6 items-start\">\r\n {/* Desktop filter sidebar */}\r\n {hasFilter && (\r\n <Aside\r\n aria-label={panelTitle}\r\n className={[\r\n \"hidden lg:block flex-shrink-0 self-start\",\r\n sidebarSticky,\r\n \"transition-all duration-200 ease-in-out overflow-hidden\",\r\n sidebarOpen\r\n ? \"w-60 xl:w-64 2xl:w-72 opacity-100\"\r\n : \"w-0 opacity-0 pointer-events-none\",\r\n ].join(\" \")}\r\n >\r\n <div\r\n className={[\r\n \"w-60 xl:w-64 2xl:w-72 rounded-2xl overflow-hidden\",\r\n \"border border-zinc-200/80 dark:border-slate-700/60\",\r\n \"bg-white dark:bg-slate-900\",\r\n \"shadow-sm\",\r\n ].join(\" \")}\r\n >\r\n {/* Panel header */}\r\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-zinc-100 dark:border-slate-800\">\r\n <Text weight=\"semibold\" size=\"sm\">\r\n {panelTitle}\r\n </Text>\r\n {filterActiveCount > 0 && (\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={onFilterClear}\r\n className=\"text-xs text-primary hover:text-primary/80 hover:underline p-0 h-auto leading-none font-medium\"\r\n >\r\n {l.clearAll}\r\n </Button>\r\n )}\r\n </div>\r\n\r\n {/* Scrollable facets */}\r\n <div className=\"px-3 pt-5 pb-3 max-h-[calc(100vh-15rem)] overflow-y-auto space-y-4\">\r\n {filterContent}\r\n </div>\r\n\r\n {/* Apply button */}\r\n <div className=\"px-3 pb-3 pt-2 border-t border-zinc-100 dark:border-slate-800\">\r\n <Button\r\n type=\"button\"\r\n variant=\"primary\"\r\n className=\"w-full rounded-xl\"\r\n size=\"sm\"\r\n onClick={onFilterApply}\r\n >\r\n {l.applyFilters}\r\n </Button>\r\n </div>\r\n </div>\r\n </Aside>\r\n )}\r\n\r\n {/* Main content */}\r\n <div className=\"flex-1 min-w-0 space-y-3\">\r\n {activeFiltersSlot}\r\n\r\n {errorSlot ? (\r\n errorSlot\r\n ) : (\r\n <>\r\n {children}\r\n {paginationSlot && <div className=\"pt-2\">{paginationSlot}</div>}\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Mobile sticky pagination bar */}\r\n {toolbarPaginationSlot && (\r\n <Nav\r\n aria-label=\"Pagination\"\r\n className={[\r\n \"fixed left-0 right-0 lg:hidden\",\r\n isDashboard\r\n ? \"bottom-0\"\r\n : selectedCount > 0\r\n ? \"bottom-28\"\r\n : \"bottom-14\",\r\n \"z-[39]\",\r\n \"bg-white/90 dark:bg-slate-950/90 backdrop-blur-md border-t border-zinc-200/80 dark:border-slate-800/80\",\r\n \"shadow-[0_-2px_8px_rgba(0,0,0,0.06)] dark:shadow-[0_-2px_8px_rgba(0,0,0,0.20)]\",\r\n \"h-10 flex items-center justify-center px-3 overflow-x-auto pb-px\",\r\n ].join(\" \")}\r\n >\r\n {toolbarPaginationSlot}\r\n </Nav>\r\n )}\r\n\r\n {/* Mobile fullscreen filter overlay */}\r\n {hasFilter && mobileFilterOpen && (\r\n <>\r\n <div\r\n className=\"fixed inset-0 z-40 bg-black/40 lg:hidden\"\r\n onClick={() => setMobileFilterOpen(false)}\r\n aria-hidden=\"true\"\r\n />\r\n <div\r\n ref={mobileOverlayRef}\r\n className=\"fixed inset-0 z-50 flex flex-col lg:hidden bg-white dark:bg-slate-950\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-label={panelTitle}\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-zinc-100 dark:border-slate-800 flex-shrink-0\">\r\n <Text weight=\"semibold\">\r\n {panelTitle}\r\n {filterActiveCount > 0 && (\r\n <Span className=\"ml-2 inline-flex items-center justify-center w-5 h-5 text-[11px] font-bold rounded-full bg-primary text-white\">\r\n {filterActiveCount}\r\n </Span>\r\n )}\r\n </Text>\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={() => setMobileFilterOpen(false)}\r\n aria-label={l.close}\r\n className=\"rounded-full w-8 h-8 p-0 flex items-center justify-center hover:bg-zinc-100 dark:hover:bg-slate-800\"\r\n >\r\n <svg\r\n className=\"w-4 h-4\"\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}\r\n d=\"M6 18L18 6M6 6l12 12\"\r\n />\r\n </svg>\r\n </Button>\r\n </div>\r\n\r\n {/* Scrollable facets */}\r\n <div className=\"flex-1 overflow-y-auto px-4 pt-6 pb-4 space-y-4\">\r\n {filterContent}\r\n </div>\r\n\r\n {/* Footer actions */}\r\n <div className=\"flex-shrink-0 flex gap-3 px-4 py-4 border-t border-zinc-100 dark:border-slate-800 bg-white dark:bg-slate-950\">\r\n <Button\r\n type=\"button\"\r\n variant=\"secondary\"\r\n className=\"flex-1 rounded-xl\"\r\n onClick={() => onFilterClear?.()}\r\n >\r\n {l.clearAll}\r\n </Button>\r\n <Button\r\n type=\"button\"\r\n variant=\"primary\"\r\n className=\"flex-1 rounded-xl\"\r\n onClick={handleMobileApply}\r\n >\r\n {l.applyFilters}\r\n </Button>\r\n </div>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nfunction FilterIcon() {\r\n return (\r\n <svg\r\n className=\"w-4 h-4\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n strokeWidth={2}\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n d=\"M3 4a1 1 0 011-1h16a1 1 0 011 1v2a1 1 0 01-.293.707L13 13.414V19a1 1 0 01-.553.894l-4 2A1 1 0 017 21v-7.586L3.293 6.707A1 1 0 013 6V4z\"\r\n />\r\n </svg>\r\n );\r\n}\r\n"]}
|