@mohasinac/appkit 3.2.8 → 3.2.9

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.
Files changed (268) hide show
  1. package/dist/_internal/client/features/filters/filter-load-options.js +11 -9
  2. package/dist/_internal/client/theme/ThemeProvider.js +14 -4
  3. package/dist/_internal/server/features/auth/firebase-identity.d.ts +12 -0
  4. package/dist/_internal/server/features/auth/firebase-identity.js +25 -0
  5. package/dist/_internal/server/features/site-settings/safe-settings.d.ts +12 -0
  6. package/dist/_internal/server/features/site-settings/safe-settings.js +25 -0
  7. package/dist/_internal/shared/features/layout/config.js +7 -7
  8. package/dist/_internal/shared/styles/skeleton.d.ts +8 -8
  9. package/dist/_internal/shared/styles/skeleton.js +10 -10
  10. package/dist/_internal/shared/styles/themed.d.ts +12 -12
  11. package/dist/_internal/shared/styles/themed.js +12 -12
  12. package/dist/features/about/components/AboutView.js +1 -1
  13. package/dist/features/about/components/FAQPageView.js +1 -1
  14. package/dist/features/about/components/FeesView.js +2 -2
  15. package/dist/features/about/components/HowAuctionsWorkView.js +2 -2
  16. package/dist/features/about/components/HowCheckoutWorksView.js +2 -2
  17. package/dist/features/about/components/HowOffersWorkView.js +2 -2
  18. package/dist/features/about/components/HowOrdersWorkView.js +2 -2
  19. package/dist/features/about/components/HowPayoutsWorkView.js +2 -2
  20. package/dist/features/about/components/HowPreOrdersWorkView.js +2 -2
  21. package/dist/features/about/components/HowReviewsWorkView.js +2 -2
  22. package/dist/features/about/components/PublicProfileView.js +3 -3
  23. package/dist/features/about/components/SecurityPrivacyView.js +2 -2
  24. package/dist/features/account/components/AddressBook.js +2 -2
  25. package/dist/features/account/components/AddressesIndexListing.js +1 -1
  26. package/dist/features/account/components/ChatWindow.js +1 -1
  27. package/dist/features/account/components/MessagesView.js +1 -1
  28. package/dist/features/account/components/NotificationBell.js +2 -2
  29. package/dist/features/account/components/NotificationPreferencesPanel.js +1 -1
  30. package/dist/features/account/components/UserSidebar.js +3 -3
  31. package/dist/features/account/components/UserSupportView.js +3 -3
  32. package/dist/features/admin/components/AdminAdEditorView.js +1 -1
  33. package/dist/features/admin/components/AdminAdsView.js +5 -5
  34. package/dist/features/admin/components/AdminAnalyticsView.js +1 -1
  35. package/dist/features/admin/components/AdminBrandsView.js +1 -1
  36. package/dist/features/admin/components/AdminBundlesView.js +2 -2
  37. package/dist/features/admin/components/AdminCarouselEditorView.js +4 -4
  38. package/dist/features/admin/components/AdminCarouselView.js +2 -2
  39. package/dist/features/admin/components/AdminCategoriesView.js +2 -2
  40. package/dist/features/admin/components/AdminContactEditorView.js +1 -1
  41. package/dist/features/admin/components/AdminCouponEditorView.js +1 -1
  42. package/dist/features/admin/components/AdminEmployeeEditorView.js +3 -3
  43. package/dist/features/admin/components/AdminFaqsView.js +1 -1
  44. package/dist/features/admin/components/AdminFeatureEditorView.js +2 -2
  45. package/dist/features/admin/components/AdminFeatureFlagsView.js +1 -1
  46. package/dist/features/admin/components/AdminFeaturesView.js +2 -2
  47. package/dist/features/admin/components/AdminNavigationView.js +2 -2
  48. package/dist/features/admin/components/AdminNotificationsView.js +1 -1
  49. package/dist/features/admin/components/AdminOrderEditorView.js +1 -1
  50. package/dist/features/admin/components/AdminPageHeader.d.ts +1 -1
  51. package/dist/features/admin/components/AdminPageHeader.js +1 -1
  52. package/dist/features/admin/components/AdminReviewsView.js +1 -1
  53. package/dist/features/admin/components/AdminScammerEditorView.js +3 -3
  54. package/dist/features/admin/components/AdminScammersView.js +1 -1
  55. package/dist/features/admin/components/AdminSectionsView.js +1 -1
  56. package/dist/features/admin/components/AdminSessionsView.js +1 -1
  57. package/dist/features/admin/components/AdminSidebar.js +5 -5
  58. package/dist/features/admin/components/AdminSiteSettingsView.js +3 -3
  59. package/dist/features/admin/components/AdminStoreEditorView.js +3 -3
  60. package/dist/features/admin/components/AdminSupportTicketDetailView.js +3 -3
  61. package/dist/features/admin/components/AdminSupportTicketsView.js +2 -2
  62. package/dist/features/admin/components/AdminViewCards.js +5 -5
  63. package/dist/features/admin/components/DataTable.js +1 -1
  64. package/dist/features/admin/components/DrawerFormFooter.js +1 -1
  65. package/dist/features/admin/components/QuickActionsPanel.js +1 -1
  66. package/dist/features/admin/components/analytics/AdminTopProductsTable.js +1 -1
  67. package/dist/features/auctions/components/AuctionDetailPageView.js +2 -2
  68. package/dist/features/auctions/components/CollapsibleBidHistory.js +1 -1
  69. package/dist/features/auctions/components/MarketplaceAuctionCard.js +1 -1
  70. package/dist/features/auth/components/ForgotPasswordView.js +1 -1
  71. package/dist/features/auth/components/Guards.js +1 -1
  72. package/dist/features/auth/components/RegisterForm.js +1 -1
  73. package/dist/features/auth/components/ResetPasswordView.js +1 -1
  74. package/dist/features/auth/components/SocialAuthButtons.js +1 -1
  75. package/dist/features/blog/components/BlogIndexListing.js +1 -1
  76. package/dist/features/blog/components/BlogListView.js +3 -3
  77. package/dist/features/blog/components/BlogPostView.js +1 -1
  78. package/dist/features/cart/components/CartDrawer.js +5 -5
  79. package/dist/features/categories/components/BrandDetailPageView.js +1 -1
  80. package/dist/features/categories/components/BrandDetailTabs.js +1 -1
  81. package/dist/features/categories/components/CategoriesIndexListing.js +2 -2
  82. package/dist/features/categories/components/CategoryDetailPageView.js +1 -1
  83. package/dist/features/categories/components/CategoryDetailTabs.js +1 -1
  84. package/dist/features/categories/components/CategoryGrid.js +3 -3
  85. package/dist/features/categories/components/CategoryTree.js +2 -2
  86. package/dist/features/categories/components/ConcernCard.js +1 -1
  87. package/dist/features/checkout/components/CheckoutStepper.js +1 -1
  88. package/dist/features/classified/components/ClassifiedIndexListing.js +1 -1
  89. package/dist/features/collections/components/CollectionCard.js +1 -1
  90. package/dist/features/collections/hooks/useCollections.js +12 -12
  91. package/dist/features/contact/components/ContactForm.js +1 -1
  92. package/dist/features/copilot/components/AdminCopilotView.js +5 -5
  93. package/dist/features/digital-codes/components/DigitalCodesIndexListing.js +1 -1
  94. package/dist/features/events/components/AdminEventEntriesView.js +1 -1
  95. package/dist/features/events/components/EventCard.js +1 -1
  96. package/dist/features/events/components/EventPollWidget.js +1 -1
  97. package/dist/features/events/components/EventStatusBadge.js +1 -1
  98. package/dist/features/events/components/EventsIndexListing.js +1 -1
  99. package/dist/features/faq/components/ContactCTA.js +2 -2
  100. package/dist/features/faq/components/FAQAccordion.js +4 -4
  101. package/dist/features/faq/components/FAQCategorySidebar.js +2 -2
  102. package/dist/features/faq/components/FAQHelpfulButtons.js +4 -4
  103. package/dist/features/faq/components/RelatedFAQs.js +1 -1
  104. package/dist/features/filters/AsyncFacetSection.js +3 -3
  105. package/dist/features/filters/FilterFacetSection.js +5 -5
  106. package/dist/features/filters/RangeFilter.js +3 -3
  107. package/dist/features/filters/SwitchFilter.js +2 -2
  108. package/dist/features/forms/Checkbox.js +1 -1
  109. package/dist/features/forms/Input.js +2 -2
  110. package/dist/features/forms/Radio.js +2 -2
  111. package/dist/features/forms/Select.js +1 -1
  112. package/dist/features/forms/Slider.js +1 -1
  113. package/dist/features/forms/Textarea.js +1 -1
  114. package/dist/features/forms/Toggle.js +3 -3
  115. package/dist/features/forms/utils.d.ts +4 -4
  116. package/dist/features/forms/utils.js +4 -4
  117. package/dist/features/homepage/components/AdSlot.js +1 -1
  118. package/dist/features/homepage/components/AdvertisementBanner.js +3 -3
  119. package/dist/features/homepage/components/BrandsSection.js +2 -2
  120. package/dist/features/homepage/components/GoogleReviewsSection.js +1 -1
  121. package/dist/features/homepage/components/HeroSection.js +1 -1
  122. package/dist/features/homepage/components/HomepageCustomerReviewsSection.js +1 -1
  123. package/dist/features/homepage/components/HowItWorksSection.js +1 -1
  124. package/dist/features/homepage/components/ShopByCategorySection.js +2 -2
  125. package/dist/features/homepage/components/SiteFeaturesSection.js +1 -1
  126. package/dist/features/homepage/components/SocialPostCard.js +1 -1
  127. package/dist/features/homepage/components/StatsCounterSection.js +1 -1
  128. package/dist/features/homepage/components/TrustIndicatorsSection.js +1 -1
  129. package/dist/features/homepage/constants/hero-carousel-styles.d.ts +3 -3
  130. package/dist/features/homepage/constants/hero-carousel-styles.js +3 -3
  131. package/dist/features/homepage/hooks/useActiveAd.d.ts +1 -3
  132. package/dist/features/homepage/hooks/useActiveAd.js +9 -17
  133. package/dist/features/layout/AppLayoutShell.js +12 -12
  134. package/dist/features/layout/AutoBreadcrumbs.js +1 -1
  135. package/dist/features/layout/BackToTop.js +2 -2
  136. package/dist/features/layout/BottomActions.js +8 -8
  137. package/dist/features/layout/BottomNavItem.js +1 -1
  138. package/dist/features/layout/BottomNavLayout.js +1 -1
  139. package/dist/features/layout/BottomNavbar.d.ts +1 -1
  140. package/dist/features/layout/BottomNavbar.js +2 -2
  141. package/dist/features/layout/BottomSheet.js +1 -1
  142. package/dist/features/layout/Breadcrumbs.js +2 -2
  143. package/dist/features/layout/FooterLayout.js +2 -2
  144. package/dist/features/layout/MainNavbar.js +1 -1
  145. package/dist/features/layout/NavItem.js +1 -1
  146. package/dist/features/layout/NavbarLayout.js +3 -3
  147. package/dist/features/layout/SidebarLayout.js +1 -1
  148. package/dist/features/layout/TitleBarLayout.js +3 -3
  149. package/dist/features/live/components/LiveItemsIndexListing.js +1 -1
  150. package/dist/features/loyalty/components/CoinsDisplay.js +1 -1
  151. package/dist/features/loyalty/hooks/useLoyaltyBalance.js +11 -3
  152. package/dist/features/media/AvatarUpload.js +1 -1
  153. package/dist/features/media/MediaPickerModal.js +1 -1
  154. package/dist/features/media/components/MediaSlider.js +1 -1
  155. package/dist/features/media/finalize.d.ts +12 -1
  156. package/dist/features/media/finalize.js +64 -11
  157. package/dist/features/media/modals/ImageCropModal.js +1 -1
  158. package/dist/features/media/modals/ImageEditor.js +1 -1
  159. package/dist/features/media/repository/media-assets.repository.d.ts +33 -0
  160. package/dist/features/media/repository/media-assets.repository.js +43 -0
  161. package/dist/features/media/upload/MediaUploadField.js +1 -1
  162. package/dist/features/messages/hooks/useConversation.js +12 -17
  163. package/dist/features/messages/hooks/useConversations.js +3 -5
  164. package/dist/features/orders/components/MarketplaceOrderCard.js +1 -1
  165. package/dist/features/orders/components/OrdersList.js +3 -3
  166. package/dist/features/pre-orders/components/MarketplacePreorderCard.js +1 -1
  167. package/dist/features/pre-orders/components/PreOrderBadge.js +1 -1
  168. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +2 -2
  169. package/dist/features/pre-orders/components/PreOrdersIndexListing.js +1 -1
  170. package/dist/features/pre-orders/hooks/usePreOrders.js +12 -12
  171. package/dist/features/products/columns/productTableColumns.js +3 -3
  172. package/dist/features/products/components/BidHistory.js +1 -1
  173. package/dist/features/products/components/CompareOverlay.js +9 -9
  174. package/dist/features/products/components/CustomSectionTabContent.js +1 -1
  175. package/dist/features/products/components/CustomSectionsEditor.js +1 -1
  176. package/dist/features/products/components/FeatureBadge.js +2 -2
  177. package/dist/features/products/components/GroupSettingsPanel.js +2 -2
  178. package/dist/features/products/components/PrizeDrawDetailPageView.js +2 -2
  179. package/dist/features/products/components/PrizeDrawsIndexListing.js +1 -1
  180. package/dist/features/products/components/ProductDetailPageView.js +4 -4
  181. package/dist/features/products/components/ProductFeatureBadges.js +2 -2
  182. package/dist/features/products/components/ProductFeaturesSelector.js +4 -4
  183. package/dist/features/products/components/ProductGalleryClient.js +1 -1
  184. package/dist/features/products/components/ProductGrid.js +8 -8
  185. package/dist/features/products/components/ProductTabs.js +1 -1
  186. package/dist/features/products/components/ProductTabsShell.js +1 -1
  187. package/dist/features/products/components/ShareButton.js +1 -1
  188. package/dist/features/products/components/ShowGroupSection.js +2 -2
  189. package/dist/features/products/components/SublistingCarouselSection.js +2 -2
  190. package/dist/features/promotions/components/CouponCard.js +2 -2
  191. package/dist/features/promotions/components/CouponsIndexListing.js +2 -2
  192. package/dist/features/reviews/components/ReviewDetailPageView.js +1 -1
  193. package/dist/features/reviews/components/ReviewDetailShell.js +5 -5
  194. package/dist/features/reviews/components/ReviewModal.js +1 -1
  195. package/dist/features/reviews/components/ReviewSummary.js +2 -2
  196. package/dist/features/reviews/components/ReviewsIndexListing.js +1 -1
  197. package/dist/features/reviews/components/ReviewsList.js +2 -2
  198. package/dist/features/scams/components/ScamRegistryView.js +2 -2
  199. package/dist/features/search/components/Search.js +11 -11
  200. package/dist/features/search/components/SearchFiltersRow.js +1 -1
  201. package/dist/features/search/components/SearchResultsSection.js +2 -2
  202. package/dist/features/seller/components/SellerAddressesView.js +4 -4
  203. package/dist/features/seller/components/SellerAnalyticsAlertsView.js +1 -1
  204. package/dist/features/seller/components/SellerCouponEditorView.js +1 -1
  205. package/dist/features/seller/components/SellerCouponsView.js +1 -1
  206. package/dist/features/seller/components/SellerFeaturesView.js +2 -2
  207. package/dist/features/seller/components/SellerGoogleReviewsView.js +1 -1
  208. package/dist/features/seller/components/SellerOrdersView.js +1 -1
  209. package/dist/features/seller/components/SellerPayoutMethodsView.js +1 -1
  210. package/dist/features/seller/components/SellerSidebar.js +4 -4
  211. package/dist/features/seller/components/analytics/SellerRevenueChart.js +1 -1
  212. package/dist/features/seller/components/analytics/SellerTopProducts.js +1 -1
  213. package/dist/features/site-settings/components/ActionPermissionsManager.js +2 -2
  214. package/dist/features/site-settings/components/NavPermissionsManager.js +1 -1
  215. package/dist/features/stores/components/InteractiveStoreCard.js +3 -3
  216. package/dist/features/stores/components/StoreHeader.js +2 -2
  217. package/dist/features/stores/components/StoreNavTabs.js +2 -2
  218. package/dist/features/stores/components/StorePreOrdersListing.js +1 -1
  219. package/dist/features/stores/components/StoreReviewsListing.js +1 -1
  220. package/dist/features/stores/components/StoresIndexListing.js +1 -1
  221. package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +2 -2
  222. package/dist/features/wishlist/components/WishlistPage.js +2 -2
  223. package/dist/features/wishlist/hooks/useWishlistCount.js +5 -13
  224. package/dist/http/index.d.ts +1 -0
  225. package/dist/http/index.js +1 -0
  226. package/dist/http/retry.d.ts +1 -0
  227. package/dist/http/retry.js +26 -0
  228. package/dist/index.d.ts +4 -0
  229. package/dist/index.js +8 -0
  230. package/dist/next/ErrorBoundary.js +1 -1
  231. package/dist/repositories/index.d.ts +2 -0
  232. package/dist/repositories/index.js +2 -0
  233. package/dist/seed/site-settings-seed-data.js +476 -0
  234. package/dist/server.d.ts +4 -0
  235. package/dist/server.js +9 -0
  236. package/dist/styles.css +1 -1
  237. package/dist/tailwind-utilities.css +1 -1
  238. package/dist/tokens/index.d.ts +6 -6
  239. package/dist/tokens/index.js +59 -59
  240. package/dist/ui/DataTable.js +3 -3
  241. package/dist/ui/components/Avatar.js +1 -1
  242. package/dist/ui/components/BaseListingCard.js +7 -7
  243. package/dist/ui/components/Button.js +3 -3
  244. package/dist/ui/components/DetailPageGallery.js +3 -3
  245. package/dist/ui/components/DetailPageHero.js +1 -1
  246. package/dist/ui/components/DetailPageTabs.js +4 -4
  247. package/dist/ui/components/FilterChipGroup.js +2 -2
  248. package/dist/ui/components/Input.js +1 -1
  249. package/dist/ui/components/Layout.d.ts +2 -2
  250. package/dist/ui/components/ListingFilterDrawer.js +2 -2
  251. package/dist/ui/components/ListingToolbar.js +6 -6
  252. package/dist/ui/components/LoginRequiredModal.js +1 -1
  253. package/dist/ui/components/Modal.js +1 -1
  254. package/dist/ui/components/NavbarChevron.js +1 -1
  255. package/dist/ui/components/PageLoader.js +3 -3
  256. package/dist/ui/components/Radio.js +1 -1
  257. package/dist/ui/components/RichTextEditor.js +1 -1
  258. package/dist/ui/components/Select.js +1 -1
  259. package/dist/ui/components/SettingsSection.js +3 -3
  260. package/dist/ui/components/SideModal.js +1 -1
  261. package/dist/ui/components/Slider.js +2 -2
  262. package/dist/ui/components/StatsGrid.js +1 -1
  263. package/dist/ui/components/Typography.js +3 -3
  264. package/dist/ui/components/surface-tokens.d.ts +11 -11
  265. package/dist/ui/components/surface-tokens.js +12 -12
  266. package/dist/utils/safe-fire-forget.d.ts +14 -0
  267. package/dist/utils/safe-fire-forget.js +23 -0
  268. package/package.json +1 -1
@@ -0,0 +1,26 @@
1
+ /** Exponential-backoff retry for idempotent async operations.
2
+ *
3
+ * Use for GCS / Firestore transient errors (429, 503) where retrying is safe.
4
+ * Do NOT use for non-idempotent writes unless the underlying operation is
5
+ * already idempotent (e.g. Firestore set-with-merge at a known document path).
6
+ *
7
+ * @param fn Async operation to attempt.
8
+ * @param retries Number of additional attempts after the first (default 2 → up to 3 total).
9
+ * @param baseDelayMs Base delay before first retry; doubles each attempt (default 200ms).
10
+ */
11
+ import { normalizeError } from "../errors/normalize";
12
+ export async function withRetry(fn, retries = 2, baseDelayMs = 200) {
13
+ let lastErr;
14
+ for (let attempt = 0; attempt <= retries; attempt++) {
15
+ try {
16
+ return await fn();
17
+ }
18
+ catch (err) {
19
+ lastErr = normalizeError(err);
20
+ if (attempt < retries) {
21
+ await new Promise((res) => setTimeout(res, baseDelayMs * 2 ** attempt));
22
+ }
23
+ }
24
+ }
25
+ throw lastErr;
26
+ }
package/dist/index.d.ts CHANGED
@@ -586,6 +586,8 @@ export type { ProductTemplateDocument, ProductTemplateCreateInput, ProductTempla
586
586
  export { tokenRepository } from "./repositories/index";
587
587
  export { userRepository } from "./repositories/index";
588
588
  export { wishlistRepository } from "./repositories/index";
589
+ export { MediaAssetsRepository, mediaAssetsRepository } from "./repositories/index";
590
+ export type { MediaAssetDocument, MediaAssetCreateInput } from "./repositories/index";
589
591
  export { GroupedListingsRepository, groupedListingsRepository } from "./repositories/index";
590
592
  export type { NewsletterListModel } from "./repositories/index";
591
593
  export type { WishlistItem } from "./repositories/index";
@@ -3212,5 +3214,7 @@ export { SellerLiveView } from "./features/seller/components/SellerLiveView";
3212
3214
  export type { SellerLiveViewProps } from "./features/seller/components/SellerLiveView";
3213
3215
  export { SCHEMAS, lookupApiSchema, lookupFirestoreSchema, } from "./schemas/index";
3214
3216
  export type { ApiRouteKey, ApiRouteSchema, FirestoreDocument, FirestoreValue, FormFieldValue, FormValues, HttpVerb, JsonArray, JsonObject, JsonObjectWithUndefined, JsonPrimitive, JsonValue, JsonValueWithUndefined, RegisteredApiRouteKey, RegisteredFirestoreCollection, RegisteredFormId, RegisteredRtdbChannel, RegisteredSieveCollection, RegisteredStorageOp, RegisteredWebhookProvider, RegistryEntry, SchemaRegistry, SchemasShape, WebhookSchemaBucket, } from "./schemas/index";
3217
+ export { safeFireAndForget } from "./utils/safe-fire-forget";
3218
+ export { withRetry } from "./http/retry";
3215
3219
  export { normalizeError, getErrorMessage, isApiNormalized, isAppNormalized, isFirebaseAuthNormalized, isFirebaseFirestoreNormalized, isFirebaseStorageNormalized, isNativeNormalized, isNetworkNormalized, isUnknownNormalized, isZodNormalized, } from "./errors/normalize";
3216
3220
  export type { NormalizedError, NormalizedApiError, NormalizedAppError, NormalizedFirebaseAuthError, NormalizedFirebaseFirestoreError, NormalizedFirebaseStorageError, NormalizedNativeError, NormalizedNetworkError, NormalizedUnknownThrownValue, NormalizedZodError, } from "./errors/normalize";
package/dist/index.js CHANGED
@@ -1170,6 +1170,8 @@ export { userRepository } from "./repositories/index";
1170
1170
  // [DB]-Database layer â€" uses firebase-admin or another server-side DB SDK; can only run in a trusted server environment.
1171
1171
  // wishlistRepository - Shared export for wishlist repository.
1172
1172
  export { wishlistRepository } from "./repositories/index";
1173
+ // [DB]-Database layer — mediaAssetsRepository for SEO-friendly /media/{shortId} URL mapping.
1174
+ export { MediaAssetsRepository, mediaAssetsRepository } from "./repositories/index";
1173
1175
  export { GroupedListingsRepository, groupedListingsRepository } from "./repositories/index";
1174
1176
  // ./seed/index
1175
1177
  // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
@@ -5660,6 +5662,12 @@ export { SellerLiveView } from "./features/seller/components/SellerLiveView";
5660
5662
  // Per-feature `schemas/index.ts` files register into the relevant bucket.
5661
5663
  // Pure Zod, isomorphic — safe on both client and server.
5662
5664
  export { SCHEMAS, lookupApiSchema, lookupFirestoreSchema, } from "./schemas/index";
5665
+ // ── Fire-and-forget safety wrapper ─────────────────────────────────────────
5666
+ // Replaces .catch(console.error) for non-critical background operations.
5667
+ export { safeFireAndForget } from "./utils/safe-fire-forget";
5668
+ // ── Exponential-backoff retry ───────────────────────────────────────────────
5669
+ // Use for GCS / Firestore transient errors where retrying is safe.
5670
+ export { withRetry } from "./http/retry";
5663
5671
  // ── W3 catch-clause normalizer ──────────────────────────────────────────────
5664
5672
  // Every catch (e: unknown) funnels through normalizeError(e) which returns
5665
5673
  // a NormalizedError discriminated union. Audit-catch-normalize enforces this.
@@ -4,7 +4,7 @@ import { Component } from "react";
4
4
  import { Button } from "../ui/components/Button";
5
5
  import { Heading, Text } from "../ui/components/Typography";
6
6
  function DefaultFallback({ error, onReset, }) {
7
- return (_jsxs("div", { className: "flex min-h-[40vh] flex-col items-center justify-center gap-4 rounded-xl border border-zinc-200 bg-white p-6 text-center dark:border-slate-700 dark:bg-slate-900", "data-section": "errorboundary-div-445", children: [_jsx(Heading, { level: 2, children: "Something went wrong" }), _jsx(Text, { variant: "secondary", children: "An unexpected error occurred. Please try again." }), process.env.NODE_ENV === "development" && error ? (_jsx("pre", { className: "max-w-full overflow-auto rounded-md bg-zinc-100 p-3 text-left text-xs dark:bg-slate-800", children: error.message })) : null, _jsx(Button, { type: "button", onClick: onReset, children: "Try again" })] }));
7
+ return (_jsxs("div", { className: "flex min-h-[40vh] flex-col items-center justify-center gap-4 rounded-xl border border-zinc-200 bg-[var(--appkit-color-surface)] p-6 text-center border-[var(--appkit-color-border)] bg-[var(--appkit-color-surface)]", "data-section": "errorboundary-div-445", children: [_jsx(Heading, { level: 2, children: "Something went wrong" }), _jsx(Text, { variant: "secondary", children: "An unexpected error occurred. Please try again." }), process.env.NODE_ENV === "development" && error ? (_jsx("pre", { className: "max-w-full overflow-auto rounded-md bg-[var(--appkit-color-surface)] p-3 text-left text-xs bg-[var(--appkit-color-surface-elevated)]", children: error.message })) : null, _jsx(Button, { type: "button", onClick: onReset, children: "Try again" })] }));
8
8
  }
9
9
  export class ErrorBoundary extends Component {
10
10
  constructor(props) {
@@ -51,3 +51,5 @@ export { ProductFeaturesRepository, productFeaturesRepository, } from "../featur
51
51
  export type { ProductFeatureListFilter } from "../features/products/repository/product-features.repository";
52
52
  export { loadProductFeaturesForStore } from "../features/products/repository/loadProductFeatures";
53
53
  export { LotteryEntryRepository, lotteryEntryRepository, } from "../features/lottery/repository/lottery-entry.repository";
54
+ export { MediaAssetsRepository, mediaAssetsRepository, } from "../features/media/repository/media-assets.repository";
55
+ export type { MediaAssetDocument, MediaAssetCreateInput, } from "../features/media/repository/media-assets.repository";
@@ -62,3 +62,5 @@ export { loadProductFeaturesForStore } from "../features/products/repository/loa
62
62
  // listByType / findBySlugAndType helpers.
63
63
  // Lottery entries repository
64
64
  export { LotteryEntryRepository, lotteryEntryRepository, } from "../features/lottery/repository/lottery-entry.repository";
65
+ // Media assets — short ID → storagePath mapping for SEO-friendly /media/{id} URLs
66
+ export { MediaAssetsRepository, mediaAssetsRepository, } from "../features/media/repository/media-assets.repository";
@@ -426,4 +426,480 @@ export const siteSettingsSeedData = {
426
426
  actionConfig: {},
427
427
  navConfig: {},
428
428
  disabledRoutes: [],
429
+ theme: {
430
+ themes: [
431
+ /* ── LIGHT THEMES ──────────────────────────────────────── */
432
+ {
433
+ id: "crimson-warrior",
434
+ name: "Crimson Warrior",
435
+ mode: "light",
436
+ builtIn: false,
437
+ tokens: {
438
+ "appkit-color-primary": "#dc2626",
439
+ "appkit-color-primary-50": "#fef2f2",
440
+ "appkit-color-primary-100": "#fee2e2",
441
+ "appkit-color-primary-200": "#fecaca",
442
+ "appkit-color-primary-300": "#fca5a5",
443
+ "appkit-color-primary-400": "#f87171",
444
+ "appkit-color-primary-500": "#ef4444",
445
+ "appkit-color-primary-600": "#dc2626",
446
+ "appkit-color-primary-700": "#b91c1c",
447
+ "appkit-color-primary-800": "#991b1b",
448
+ "appkit-color-primary-900": "#7f1d1d",
449
+ "appkit-color-primary-950": "#450a0a",
450
+ "appkit-color-secondary": "#d97706",
451
+ "appkit-color-secondary-50": "#fffbeb",
452
+ "appkit-color-secondary-100": "#fef3c7",
453
+ "appkit-color-secondary-200": "#fde68a",
454
+ "appkit-color-secondary-300": "#fcd34d",
455
+ "appkit-color-secondary-400": "#fbbf24",
456
+ "appkit-color-secondary-500": "#f59e0b",
457
+ "appkit-color-secondary-600": "#d97706",
458
+ "appkit-color-secondary-700": "#b45309",
459
+ "appkit-color-secondary-800": "#92400e",
460
+ "appkit-color-secondary-900": "#78350f",
461
+ "appkit-color-secondary-950": "#451a03",
462
+ "appkit-color-bg": "#fafaf9",
463
+ "appkit-color-surface": "#ffffff",
464
+ "appkit-color-surface-elevated": "#ffffff",
465
+ "appkit-color-surface-input": "#ffffff",
466
+ "appkit-color-border": "#e7e5e4",
467
+ "appkit-color-border-subtle": "#f5f5f4",
468
+ "appkit-color-text": "#1c1917",
469
+ "appkit-color-text-muted": "#78716c",
470
+ "appkit-color-text-faint": "#a8a29e",
471
+ "appkit-color-text-on-primary": "#ffffff",
472
+ "appkit-color-success": "#059669",
473
+ "appkit-color-success-surface": "#ecfdf5",
474
+ "appkit-color-warning": "#d97706",
475
+ "appkit-color-warning-surface": "#fffbeb",
476
+ "appkit-color-error": "#dc2626",
477
+ "appkit-color-error-surface": "#fef2f2",
478
+ "appkit-color-info": "#0284c7",
479
+ "appkit-color-info-surface": "#f0f9ff",
480
+ "appkit-color-focus-ring": "#dc2626",
481
+ "appkit-shadow-glow": "0 0 0 1px rgba(220,38,38,0.10), 0 4px 16px -4px rgba(220,38,38,0.20)",
482
+ "appkit-shadow-glow-pink": "0 0 0 1px rgba(220,38,38,0.12), 0 4px 16px -4px rgba(220,38,38,0.22)",
483
+ "appkit-font-display": "var(--font-display), \"Poppins\", ui-sans-serif, system-ui, sans-serif",
484
+ "appkit-font-sans": "var(--font-body), ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif",
485
+ "appkit-font-editorial": "var(--font-editorial), \"Georgia\", serif",
486
+ "appkit-font-mono": "ui-monospace, \"SFMono-Regular\", \"Cascadia Mono\", \"Consolas\", monospace",
487
+ },
488
+ gradients: {
489
+ brand: "linear-gradient(to right, var(--appkit-color-primary), var(--appkit-color-secondary))",
490
+ "brand-tri": "linear-gradient(to right, #dc2626, #d97706, #0284c7)",
491
+ accent: "linear-gradient(to right, var(--appkit-color-primary-600), var(--appkit-color-secondary-500))",
492
+ "accent-divider": "linear-gradient(to right, transparent, var(--appkit-color-primary), transparent)",
493
+ "page-header": "linear-gradient(to bottom right, var(--appkit-color-primary-50), transparent 60%, transparent)",
494
+ "section-warm": "linear-gradient(to bottom right, var(--appkit-color-secondary-50), var(--appkit-color-surface))",
495
+ "section-cool": "linear-gradient(to bottom right, var(--appkit-color-primary-50), var(--appkit-color-info-surface))",
496
+ "section-mesh": "radial-gradient(ellipse at top, var(--appkit-color-primary-50), var(--appkit-color-surface), var(--appkit-color-secondary-50))",
497
+ "accent-banner": "linear-gradient(to right, var(--appkit-color-primary), var(--appkit-color-secondary))",
498
+ promotion: "linear-gradient(to bottom right, var(--appkit-color-primary), var(--appkit-color-secondary), var(--appkit-color-warning))",
499
+ spotlight: "linear-gradient(to bottom right, var(--appkit-color-secondary-50), var(--appkit-color-bg), var(--appkit-color-secondary-50))",
500
+ "whatsapp-card": "linear-gradient(to bottom right, var(--appkit-color-success), var(--appkit-color-success))",
501
+ glass: "linear-gradient(to bottom right, color-mix(in srgb, var(--appkit-color-surface) 85%, transparent), color-mix(in srgb, var(--appkit-color-surface) 65%, transparent))",
502
+ "card-indigo": "linear-gradient(to bottom right, var(--appkit-color-primary-50), var(--appkit-color-surface), var(--appkit-color-surface))",
503
+ "card-teal": "linear-gradient(to bottom right, var(--appkit-color-secondary-50), var(--appkit-color-surface), var(--appkit-color-surface))",
504
+ "card-amber": "linear-gradient(to bottom right, var(--appkit-color-warning-surface), var(--appkit-color-surface), var(--appkit-color-surface))",
505
+ "card-rose": "linear-gradient(to bottom right, var(--appkit-color-error-surface), var(--appkit-color-surface), var(--appkit-color-surface))",
506
+ logo: "linear-gradient(to right, var(--appkit-color-primary-700) 0%, var(--appkit-color-primary-500) 55%, var(--appkit-color-secondary-400) 100%)",
507
+ sidebar: "linear-gradient(to bottom, var(--appkit-color-primary-700), var(--appkit-color-secondary-600))",
508
+ },
509
+ },
510
+ {
511
+ id: "phantom-ice",
512
+ name: "Phantom Ice",
513
+ mode: "light",
514
+ builtIn: false,
515
+ tokens: {
516
+ "appkit-color-primary": "#0284c7",
517
+ "appkit-color-primary-50": "#f0f9ff",
518
+ "appkit-color-primary-100": "#e0f2fe",
519
+ "appkit-color-primary-200": "#bae6fd",
520
+ "appkit-color-primary-300": "#7dd3fc",
521
+ "appkit-color-primary-400": "#38bdf8",
522
+ "appkit-color-primary-500": "#0ea5e9",
523
+ "appkit-color-primary-600": "#0284c7",
524
+ "appkit-color-primary-700": "#0369a1",
525
+ "appkit-color-primary-800": "#075985",
526
+ "appkit-color-primary-900": "#0c4a6e",
527
+ "appkit-color-primary-950": "#082f49",
528
+ "appkit-color-secondary": "#475569",
529
+ "appkit-color-secondary-50": "#f8fafc",
530
+ "appkit-color-secondary-100": "#f1f5f9",
531
+ "appkit-color-secondary-200": "#e2e8f0",
532
+ "appkit-color-secondary-300": "#cbd5e1",
533
+ "appkit-color-secondary-400": "#94a3b8",
534
+ "appkit-color-secondary-500": "#64748b",
535
+ "appkit-color-secondary-600": "#475569",
536
+ "appkit-color-secondary-700": "#334155",
537
+ "appkit-color-secondary-800": "#1e293b",
538
+ "appkit-color-secondary-900": "#0f172a",
539
+ "appkit-color-secondary-950": "#020617",
540
+ "appkit-color-bg": "#f0f9ff",
541
+ "appkit-color-surface": "#ffffff",
542
+ "appkit-color-surface-elevated": "#ffffff",
543
+ "appkit-color-surface-input": "#f8fafc",
544
+ "appkit-color-border": "#e2e8f0",
545
+ "appkit-color-border-subtle": "#f1f5f9",
546
+ "appkit-color-text": "#0f172a",
547
+ "appkit-color-text-muted": "#475569",
548
+ "appkit-color-text-faint": "#94a3b8",
549
+ "appkit-color-text-on-primary": "#ffffff",
550
+ "appkit-color-success": "#059669",
551
+ "appkit-color-success-surface": "#ecfdf5",
552
+ "appkit-color-warning": "#d97706",
553
+ "appkit-color-warning-surface": "#fffbeb",
554
+ "appkit-color-error": "#dc2626",
555
+ "appkit-color-error-surface": "#fef2f2",
556
+ "appkit-color-info": "#0284c7",
557
+ "appkit-color-info-surface": "#f0f9ff",
558
+ "appkit-color-focus-ring": "#0284c7",
559
+ "appkit-shadow-glow": "0 0 0 1px rgba(2,132,199,0.10), 0 4px 16px -4px rgba(2,132,199,0.20)",
560
+ "appkit-shadow-glow-pink": "0 0 0 1px rgba(2,132,199,0.12), 0 4px 16px -4px rgba(2,132,199,0.22)",
561
+ "appkit-font-display": "var(--font-display), \"Poppins\", ui-sans-serif, system-ui, sans-serif",
562
+ "appkit-font-sans": "var(--font-body), ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif",
563
+ "appkit-font-editorial": "var(--font-editorial), \"Georgia\", serif",
564
+ "appkit-font-mono": "ui-monospace, \"SFMono-Regular\", \"Cascadia Mono\", \"Consolas\", monospace",
565
+ },
566
+ gradients: {
567
+ brand: "linear-gradient(to right, var(--appkit-color-primary), var(--appkit-color-secondary))",
568
+ "brand-tri": "linear-gradient(to right, #0284c7, #475569, #38bdf8)",
569
+ accent: "linear-gradient(to right, var(--appkit-color-primary-600), var(--appkit-color-secondary-500))",
570
+ "accent-divider": "linear-gradient(to right, transparent, var(--appkit-color-primary), transparent)",
571
+ "page-header": "linear-gradient(to bottom right, var(--appkit-color-primary-50), transparent 60%, transparent)",
572
+ "section-warm": "linear-gradient(to bottom right, var(--appkit-color-secondary-50), var(--appkit-color-surface))",
573
+ "section-cool": "linear-gradient(to bottom right, var(--appkit-color-primary-50), var(--appkit-color-info-surface))",
574
+ "section-mesh": "radial-gradient(ellipse at top, var(--appkit-color-primary-50), var(--appkit-color-surface), var(--appkit-color-secondary-50))",
575
+ "accent-banner": "linear-gradient(to right, var(--appkit-color-primary), var(--appkit-color-secondary))",
576
+ promotion: "linear-gradient(to bottom right, var(--appkit-color-error), var(--appkit-color-primary), var(--appkit-color-warning))",
577
+ spotlight: "linear-gradient(to bottom right, var(--appkit-color-primary-50), var(--appkit-color-bg), var(--appkit-color-primary-50))",
578
+ "whatsapp-card": "linear-gradient(to bottom right, var(--appkit-color-success), var(--appkit-color-success))",
579
+ glass: "linear-gradient(to bottom right, color-mix(in srgb, var(--appkit-color-surface) 85%, transparent), color-mix(in srgb, var(--appkit-color-surface) 65%, transparent))",
580
+ "card-indigo": "linear-gradient(to bottom right, var(--appkit-color-primary-50), var(--appkit-color-surface), var(--appkit-color-surface))",
581
+ "card-teal": "linear-gradient(to bottom right, var(--appkit-color-secondary-50), var(--appkit-color-surface), var(--appkit-color-surface))",
582
+ "card-amber": "linear-gradient(to bottom right, var(--appkit-color-warning-surface), var(--appkit-color-surface), var(--appkit-color-surface))",
583
+ "card-rose": "linear-gradient(to bottom right, var(--appkit-color-error-surface), var(--appkit-color-surface), var(--appkit-color-surface))",
584
+ logo: "linear-gradient(to right, var(--appkit-color-primary-700) 0%, var(--appkit-color-primary-400) 55%, var(--appkit-color-secondary-400) 100%)",
585
+ sidebar: "linear-gradient(to bottom, var(--appkit-color-primary-800), var(--appkit-color-secondary-600))",
586
+ },
587
+ },
588
+ {
589
+ id: "sunset",
590
+ name: "Sunset",
591
+ mode: "light",
592
+ builtIn: false,
593
+ tokens: {
594
+ "appkit-color-primary": "#d97706",
595
+ "appkit-color-primary-50": "#fffbeb",
596
+ "appkit-color-primary-100": "#fef3c7",
597
+ "appkit-color-primary-200": "#fde68a",
598
+ "appkit-color-primary-300": "#fcd34d",
599
+ "appkit-color-primary-400": "#fbbf24",
600
+ "appkit-color-primary-500": "#f59e0b",
601
+ "appkit-color-primary-600": "#d97706",
602
+ "appkit-color-primary-700": "#b45309",
603
+ "appkit-color-primary-800": "#92400e",
604
+ "appkit-color-primary-900": "#78350f",
605
+ "appkit-color-primary-950": "#451a03",
606
+ "appkit-color-secondary": "#e11d48",
607
+ "appkit-color-secondary-50": "#fff1f2",
608
+ "appkit-color-secondary-100": "#ffe4e6",
609
+ "appkit-color-secondary-200": "#fecdd3",
610
+ "appkit-color-secondary-300": "#fda4af",
611
+ "appkit-color-secondary-400": "#fb7185",
612
+ "appkit-color-secondary-500": "#f43f5e",
613
+ "appkit-color-secondary-600": "#e11d48",
614
+ "appkit-color-secondary-700": "#be123c",
615
+ "appkit-color-secondary-800": "#9f1239",
616
+ "appkit-color-secondary-900": "#881337",
617
+ "appkit-color-secondary-950": "#4c0519",
618
+ "appkit-color-bg": "#fff7ed",
619
+ "appkit-color-surface": "#ffffff",
620
+ "appkit-color-surface-elevated": "#ffffff",
621
+ "appkit-color-surface-input": "#fffbeb",
622
+ "appkit-color-border": "#fed7aa",
623
+ "appkit-color-border-subtle": "#ffedd5",
624
+ "appkit-color-text": "#431407",
625
+ "appkit-color-text-muted": "#9a3412",
626
+ "appkit-color-text-faint": "#c2410c",
627
+ "appkit-color-text-on-primary": "#ffffff",
628
+ "appkit-color-success": "#16a34a",
629
+ "appkit-color-success-surface": "#f0fdf4",
630
+ "appkit-color-warning": "#d97706",
631
+ "appkit-color-warning-surface": "#fffbeb",
632
+ "appkit-color-error": "#dc2626",
633
+ "appkit-color-error-surface": "#fef2f2",
634
+ "appkit-color-info": "#0284c7",
635
+ "appkit-color-info-surface": "#f0f9ff",
636
+ "appkit-color-focus-ring": "#f59e0b",
637
+ "appkit-shadow-glow": "0 0 0 1px rgba(245,158,11,0.10), 0 4px 16px -4px rgba(245,158,11,0.20)",
638
+ "appkit-shadow-glow-pink": "0 0 0 1px rgba(225,29,72,0.12), 0 4px 16px -4px rgba(225,29,72,0.22)",
639
+ "appkit-font-display": "var(--font-display), \"Poppins\", ui-sans-serif, system-ui, sans-serif",
640
+ "appkit-font-sans": "var(--font-body), ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif",
641
+ "appkit-font-editorial": "var(--font-editorial), \"Georgia\", serif",
642
+ "appkit-font-mono": "ui-monospace, \"SFMono-Regular\", \"Cascadia Mono\", \"Consolas\", monospace",
643
+ },
644
+ gradients: {
645
+ brand: "linear-gradient(to right, var(--appkit-color-primary), var(--appkit-color-secondary))",
646
+ "brand-tri": "linear-gradient(to right, #d97706, #f43f5e, #e11d48)",
647
+ accent: "linear-gradient(to right, var(--appkit-color-primary-600), var(--appkit-color-secondary-500))",
648
+ "accent-divider": "linear-gradient(to right, transparent, var(--appkit-color-primary), transparent)",
649
+ "page-header": "linear-gradient(to bottom right, #fffbeb, transparent 60%, transparent)",
650
+ "section-warm": "linear-gradient(to bottom right, #fff7ed, var(--appkit-color-surface))",
651
+ "section-cool": "linear-gradient(to bottom right, #fffbeb, #f0f9ff)",
652
+ "section-mesh": "radial-gradient(ellipse at top, #fffbeb, var(--appkit-color-surface), #fff1f2)",
653
+ "accent-banner": "linear-gradient(to right, var(--appkit-color-primary), var(--appkit-color-secondary))",
654
+ promotion: "linear-gradient(to bottom right, var(--appkit-color-secondary), var(--appkit-color-primary), var(--appkit-color-warning))",
655
+ spotlight: "linear-gradient(to bottom right, #fffbeb, var(--appkit-color-bg), #fffbeb)",
656
+ "whatsapp-card": "linear-gradient(to bottom right, var(--appkit-color-success), var(--appkit-color-success))",
657
+ glass: "linear-gradient(to bottom right, color-mix(in srgb, var(--appkit-color-surface) 85%, transparent), color-mix(in srgb, var(--appkit-color-surface) 65%, transparent))",
658
+ "card-indigo": "linear-gradient(to bottom right, #fffbeb, var(--appkit-color-surface), var(--appkit-color-surface))",
659
+ "card-teal": "linear-gradient(to bottom right, #fff1f2, var(--appkit-color-surface), var(--appkit-color-surface))",
660
+ "card-amber": "linear-gradient(to bottom right, #fff7ed, var(--appkit-color-surface), var(--appkit-color-surface))",
661
+ "card-rose": "linear-gradient(to bottom right, var(--appkit-color-error-surface), var(--appkit-color-surface), var(--appkit-color-surface))",
662
+ logo: "linear-gradient(to right, var(--appkit-color-primary-700) 0%, var(--appkit-color-primary-500) 55%, var(--appkit-color-secondary-400) 100%)",
663
+ sidebar: "linear-gradient(to bottom, var(--appkit-color-primary-700), var(--appkit-color-secondary-600))",
664
+ },
665
+ },
666
+ /* ── DARK THEMES ───────────────────────────────────────── */
667
+ {
668
+ id: "shadow-abyss",
669
+ name: "Shadow Abyss",
670
+ mode: "dark",
671
+ builtIn: false,
672
+ tokens: {
673
+ "appkit-color-primary": "#7c3aed",
674
+ "appkit-color-primary-50": "#f5f3ff",
675
+ "appkit-color-primary-100": "#ede9fe",
676
+ "appkit-color-primary-200": "#ddd6fe",
677
+ "appkit-color-primary-300": "#c4b5fd",
678
+ "appkit-color-primary-400": "#a78bfa",
679
+ "appkit-color-primary-500": "#8b5cf6",
680
+ "appkit-color-primary-600": "#7c3aed",
681
+ "appkit-color-primary-700": "#6d28d9",
682
+ "appkit-color-primary-800": "#5b21b6",
683
+ "appkit-color-primary-900": "#4c1d95",
684
+ "appkit-color-primary-950": "#2e1065",
685
+ "appkit-color-secondary": "#a21caf",
686
+ "appkit-color-secondary-50": "#fdf4ff",
687
+ "appkit-color-secondary-100": "#fae8ff",
688
+ "appkit-color-secondary-200": "#f5d0fe",
689
+ "appkit-color-secondary-300": "#f0abfc",
690
+ "appkit-color-secondary-400": "#e879f9",
691
+ "appkit-color-secondary-500": "#d946ef",
692
+ "appkit-color-secondary-600": "#c026d3",
693
+ "appkit-color-secondary-700": "#a21caf",
694
+ "appkit-color-secondary-800": "#86198f",
695
+ "appkit-color-secondary-900": "#701a75",
696
+ "appkit-color-secondary-950": "#4a044e",
697
+ "appkit-color-bg": "#0a000f",
698
+ "appkit-color-surface": "#12001e",
699
+ "appkit-color-surface-elevated": "rgba(18,0,30,0.9)",
700
+ "appkit-color-surface-input": "rgba(30,0,46,0.6)",
701
+ "appkit-color-border": "#2d1b4e",
702
+ "appkit-color-border-subtle": "rgba(45,27,78,0.6)",
703
+ "appkit-color-text": "#fafafa",
704
+ "appkit-color-text-muted": "#c4b5fd",
705
+ "appkit-color-text-faint": "#a78bfa",
706
+ "appkit-color-text-on-primary": "#ffffff",
707
+ "appkit-color-success": "#34d399",
708
+ "appkit-color-success-surface": "rgba(6,78,59,0.25)",
709
+ "appkit-color-warning": "#fbbf24",
710
+ "appkit-color-warning-surface": "#1c1508",
711
+ "appkit-color-error": "#f87171",
712
+ "appkit-color-error-surface": "rgba(127,29,29,0.25)",
713
+ "appkit-color-info": "#38bdf8",
714
+ "appkit-color-info-surface": "rgba(12,74,110,0.25)",
715
+ "appkit-color-focus-ring": "#a78bfa",
716
+ "appkit-shadow-glow": "0 0 0 1px rgba(124,58,237,0.20), 0 4px 16px -4px rgba(124,58,237,0.40)",
717
+ "appkit-shadow-glow-pink": "0 0 0 1px rgba(162,28,175,0.20), 0 4px 20px -4px rgba(162,28,175,0.35)",
718
+ "appkit-font-display": "var(--font-display), \"Poppins\", ui-sans-serif, system-ui, sans-serif",
719
+ "appkit-font-sans": "var(--font-body), ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif",
720
+ "appkit-font-editorial": "var(--font-editorial), \"Georgia\", serif",
721
+ "appkit-font-mono": "ui-monospace, \"SFMono-Regular\", \"Cascadia Mono\", \"Consolas\", monospace",
722
+ },
723
+ gradients: {
724
+ brand: "linear-gradient(to right, var(--appkit-color-primary), var(--appkit-color-secondary))",
725
+ "brand-tri": "linear-gradient(to right, #7c3aed, #a21caf, #38bdf8)",
726
+ accent: "linear-gradient(to right, var(--appkit-color-info), var(--appkit-color-primary))",
727
+ "accent-divider": "linear-gradient(to right, transparent, var(--appkit-color-primary), transparent)",
728
+ "page-header": "linear-gradient(to bottom right, rgba(124,58,237,0.15), transparent 60%, transparent)",
729
+ "section-warm": "linear-gradient(to bottom right, rgba(162,28,175,0.10), transparent)",
730
+ "section-cool": "linear-gradient(to bottom right, rgba(56,189,248,0.10), transparent)",
731
+ "section-mesh": "radial-gradient(ellipse at top, rgba(124,58,237,0.15), var(--appkit-color-surface), rgba(56,189,248,0.08))",
732
+ "accent-banner": "linear-gradient(to right, var(--appkit-color-primary), var(--appkit-color-secondary))",
733
+ promotion: "linear-gradient(to bottom right, var(--appkit-color-error), var(--appkit-color-primary), var(--appkit-color-warning))",
734
+ spotlight: "linear-gradient(to bottom right, rgba(124,58,237,0.12), var(--appkit-color-bg), rgba(56,189,248,0.10))",
735
+ "whatsapp-card": "linear-gradient(to bottom right, var(--appkit-color-success), var(--appkit-color-success))",
736
+ glass: "linear-gradient(to bottom right, color-mix(in srgb, var(--appkit-color-surface) 85%, transparent), color-mix(in srgb, var(--appkit-color-surface) 65%, transparent))",
737
+ "card-indigo": "linear-gradient(to bottom right, rgba(124,58,237,0.12), var(--appkit-color-surface), var(--appkit-color-surface))",
738
+ "card-teal": "linear-gradient(to bottom right, rgba(56,189,248,0.10), var(--appkit-color-surface), var(--appkit-color-surface))",
739
+ "card-amber": "linear-gradient(to bottom right, var(--appkit-color-warning-surface), var(--appkit-color-surface), var(--appkit-color-surface))",
740
+ "card-rose": "linear-gradient(to bottom right, var(--appkit-color-error-surface), var(--appkit-color-surface), var(--appkit-color-surface))",
741
+ logo: "linear-gradient(to right, var(--appkit-color-primary-400) 0%, var(--appkit-color-primary-300) 55%, var(--appkit-color-info) 100%)",
742
+ sidebar: "linear-gradient(to bottom, var(--appkit-color-primary-800), var(--appkit-color-secondary-800))",
743
+ },
744
+ },
745
+ {
746
+ id: "storm-champion",
747
+ name: "Storm Champion",
748
+ mode: "dark",
749
+ builtIn: false,
750
+ tokens: {
751
+ "appkit-color-primary": "#2563eb",
752
+ "appkit-color-primary-50": "#eff6ff",
753
+ "appkit-color-primary-100": "#dbeafe",
754
+ "appkit-color-primary-200": "#bfdbfe",
755
+ "appkit-color-primary-300": "#93c5fd",
756
+ "appkit-color-primary-400": "#60a5fa",
757
+ "appkit-color-primary-500": "#3b82f6",
758
+ "appkit-color-primary-600": "#2563eb",
759
+ "appkit-color-primary-700": "#1d4ed8",
760
+ "appkit-color-primary-800": "#1e40af",
761
+ "appkit-color-primary-900": "#1e3a8a",
762
+ "appkit-color-primary-950": "#172554",
763
+ "appkit-color-secondary": "#ca8a04",
764
+ "appkit-color-secondary-50": "#fefce8",
765
+ "appkit-color-secondary-100": "#fef9c3",
766
+ "appkit-color-secondary-200": "#fef08a",
767
+ "appkit-color-secondary-300": "#fde047",
768
+ "appkit-color-secondary-400": "#facc15",
769
+ "appkit-color-secondary-500": "#eab308",
770
+ "appkit-color-secondary-600": "#ca8a04",
771
+ "appkit-color-secondary-700": "#a16207",
772
+ "appkit-color-secondary-800": "#854d0e",
773
+ "appkit-color-secondary-900": "#713f12",
774
+ "appkit-color-secondary-950": "#422006",
775
+ "appkit-color-bg": "#020c1b",
776
+ "appkit-color-surface": "#0a1628",
777
+ "appkit-color-surface-elevated": "rgba(10,22,40,0.9)",
778
+ "appkit-color-surface-input": "rgba(20,40,70,0.6)",
779
+ "appkit-color-border": "#1e3a5f",
780
+ "appkit-color-border-subtle": "rgba(30,58,95,0.6)",
781
+ "appkit-color-text": "#fafafa",
782
+ "appkit-color-text-muted": "#93c5fd",
783
+ "appkit-color-text-faint": "#60a5fa",
784
+ "appkit-color-text-on-primary": "#ffffff",
785
+ "appkit-color-success": "#34d399",
786
+ "appkit-color-success-surface": "rgba(6,78,59,0.25)",
787
+ "appkit-color-warning": "#fbbf24",
788
+ "appkit-color-warning-surface": "#1c1508",
789
+ "appkit-color-error": "#f87171",
790
+ "appkit-color-error-surface": "rgba(127,29,29,0.25)",
791
+ "appkit-color-info": "#38bdf8",
792
+ "appkit-color-info-surface": "rgba(12,74,110,0.25)",
793
+ "appkit-color-focus-ring": "#60a5fa",
794
+ "appkit-shadow-glow": "0 0 0 1px rgba(37,99,235,0.20), 0 4px 16px -4px rgba(37,99,235,0.40)",
795
+ "appkit-shadow-glow-pink": "0 0 0 1px rgba(202,138,4,0.20), 0 4px 20px -4px rgba(202,138,4,0.35)",
796
+ "appkit-font-display": "var(--font-display), \"Poppins\", ui-sans-serif, system-ui, sans-serif",
797
+ "appkit-font-sans": "var(--font-body), ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif",
798
+ "appkit-font-editorial": "var(--font-editorial), \"Georgia\", serif",
799
+ "appkit-font-mono": "ui-monospace, \"SFMono-Regular\", \"Cascadia Mono\", \"Consolas\", monospace",
800
+ },
801
+ gradients: {
802
+ brand: "linear-gradient(to right, var(--appkit-color-primary), var(--appkit-color-secondary))",
803
+ "brand-tri": "linear-gradient(to right, #2563eb, #ca8a04, #ef4444)",
804
+ accent: "linear-gradient(to right, var(--appkit-color-secondary), var(--appkit-color-primary))",
805
+ "accent-divider": "linear-gradient(to right, transparent, var(--appkit-color-primary), transparent)",
806
+ "page-header": "linear-gradient(to bottom right, rgba(37,99,235,0.15), transparent 60%, transparent)",
807
+ "section-warm": "linear-gradient(to bottom right, rgba(202,138,4,0.10), transparent)",
808
+ "section-cool": "linear-gradient(to bottom right, rgba(37,99,235,0.12), transparent)",
809
+ "section-mesh": "radial-gradient(ellipse at top, rgba(37,99,235,0.15), var(--appkit-color-surface), rgba(202,138,4,0.08))",
810
+ "accent-banner": "linear-gradient(to right, var(--appkit-color-primary), var(--appkit-color-secondary))",
811
+ promotion: "linear-gradient(to bottom right, var(--appkit-color-error), var(--appkit-color-primary), var(--appkit-color-secondary))",
812
+ spotlight: "linear-gradient(to bottom right, rgba(37,99,235,0.12), var(--appkit-color-bg), rgba(202,138,4,0.08))",
813
+ "whatsapp-card": "linear-gradient(to bottom right, var(--appkit-color-success), var(--appkit-color-success))",
814
+ glass: "linear-gradient(to bottom right, color-mix(in srgb, var(--appkit-color-surface) 85%, transparent), color-mix(in srgb, var(--appkit-color-surface) 65%, transparent))",
815
+ "card-indigo": "linear-gradient(to bottom right, rgba(37,99,235,0.12), var(--appkit-color-surface), var(--appkit-color-surface))",
816
+ "card-teal": "linear-gradient(to bottom right, rgba(202,138,4,0.10), var(--appkit-color-surface), var(--appkit-color-surface))",
817
+ "card-amber": "linear-gradient(to bottom right, var(--appkit-color-warning-surface), var(--appkit-color-surface), var(--appkit-color-surface))",
818
+ "card-rose": "linear-gradient(to bottom right, var(--appkit-color-error-surface), var(--appkit-color-surface), var(--appkit-color-surface))",
819
+ logo: "linear-gradient(to right, var(--appkit-color-primary-400) 0%, var(--appkit-color-primary-300) 55%, var(--appkit-color-secondary-400) 100%)",
820
+ sidebar: "linear-gradient(to bottom, var(--appkit-color-primary-800), var(--appkit-color-primary-900))",
821
+ },
822
+ },
823
+ {
824
+ id: "cobalt-night",
825
+ name: "Cobalt Night",
826
+ mode: "dark",
827
+ builtIn: false,
828
+ tokens: {
829
+ "appkit-color-primary": "#3570fc",
830
+ "appkit-color-primary-50": "#eef5ff",
831
+ "appkit-color-primary-100": "#d9e8ff",
832
+ "appkit-color-primary-200": "#bcd4ff",
833
+ "appkit-color-primary-300": "#8eb9ff",
834
+ "appkit-color-primary-400": "#5992ff",
835
+ "appkit-color-primary-500": "#3570fc",
836
+ "appkit-color-primary-600": "#1a55f2",
837
+ "appkit-color-primary-700": "#1343de",
838
+ "appkit-color-primary-800": "#1536b4",
839
+ "appkit-color-primary-900": "#18318e",
840
+ "appkit-color-primary-950": "#111e58",
841
+ "appkit-color-secondary": "#65c408",
842
+ "appkit-color-secondary-50": "#f3ffe3",
843
+ "appkit-color-secondary-100": "#e4ffc5",
844
+ "appkit-color-secondary-200": "#c8ff90",
845
+ "appkit-color-secondary-300": "#a3f550",
846
+ "appkit-color-secondary-400": "#84e122",
847
+ "appkit-color-secondary-500": "#65c408",
848
+ "appkit-color-secondary-600": "#509c02",
849
+ "appkit-color-secondary-700": "#3e7708",
850
+ "appkit-color-secondary-800": "#345e0d",
851
+ "appkit-color-secondary-900": "#2c5011",
852
+ "appkit-color-secondary-950": "#142d03",
853
+ "appkit-color-bg": "#111e58",
854
+ "appkit-color-surface": "#1536b4",
855
+ "appkit-color-surface-elevated": "rgba(21,54,180,0.9)",
856
+ "appkit-color-surface-input": "rgba(24,49,142,0.6)",
857
+ "appkit-color-border": "#1343de",
858
+ "appkit-color-border-subtle": "rgba(24,49,142,0.6)",
859
+ "appkit-color-text": "#eef5ff",
860
+ "appkit-color-text-muted": "#bcd4ff",
861
+ "appkit-color-text-faint": "#8eb9ff",
862
+ "appkit-color-text-on-primary": "#ffffff",
863
+ "appkit-color-success": "#4ade80",
864
+ "appkit-color-success-surface": "rgba(6,78,59,0.25)",
865
+ "appkit-color-warning": "#fbbf24",
866
+ "appkit-color-warning-surface": "#1c1508",
867
+ "appkit-color-error": "#f87171",
868
+ "appkit-color-error-surface": "rgba(127,29,29,0.25)",
869
+ "appkit-color-info": "#38bdf8",
870
+ "appkit-color-info-surface": "rgba(12,74,110,0.25)",
871
+ "appkit-color-focus-ring": "#8eb9ff",
872
+ "appkit-shadow-glow": "0 0 0 1px rgba(53,112,252,0.20), 0 4px 16px -4px rgba(53,112,252,0.40)",
873
+ "appkit-shadow-glow-pink": "0 0 0 1px rgba(101,196,8,0.20), 0 4px 20px -4px rgba(101,196,8,0.35)",
874
+ "appkit-font-display": "var(--font-display), \"Poppins\", ui-sans-serif, system-ui, sans-serif",
875
+ "appkit-font-sans": "var(--font-body), ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif",
876
+ "appkit-font-editorial": "var(--font-editorial), \"Georgia\", serif",
877
+ "appkit-font-mono": "ui-monospace, \"SFMono-Regular\", \"Cascadia Mono\", \"Consolas\", monospace",
878
+ },
879
+ gradients: {
880
+ brand: "linear-gradient(to right, var(--appkit-color-primary), var(--appkit-color-secondary))",
881
+ "brand-tri": "linear-gradient(to right, #3570fc, #65c408, #8eb9ff)",
882
+ accent: "linear-gradient(to right, var(--appkit-color-secondary), var(--appkit-color-primary))",
883
+ "accent-divider": "linear-gradient(to right, transparent, var(--appkit-color-primary), transparent)",
884
+ "page-header": "linear-gradient(to bottom right, rgba(53,112,252,0.20), transparent 60%, transparent)",
885
+ "section-warm": "linear-gradient(to bottom right, rgba(101,196,8,0.10), transparent)",
886
+ "section-cool": "linear-gradient(to bottom right, rgba(53,112,252,0.20), transparent)",
887
+ "section-mesh": "radial-gradient(ellipse at top, rgba(53,112,252,0.20), var(--appkit-color-surface), rgba(101,196,8,0.10))",
888
+ "accent-banner": "linear-gradient(to right, var(--appkit-color-primary), var(--appkit-color-secondary))",
889
+ promotion: "linear-gradient(to bottom right, var(--appkit-color-error), var(--appkit-color-primary), var(--appkit-color-warning))",
890
+ spotlight: "linear-gradient(to bottom right, rgba(53,112,252,0.15), var(--appkit-color-bg), rgba(53,112,252,0.15))",
891
+ "whatsapp-card": "linear-gradient(to bottom right, var(--appkit-color-success), var(--appkit-color-success))",
892
+ glass: "linear-gradient(to bottom right, color-mix(in srgb, var(--appkit-color-surface) 85%, transparent), color-mix(in srgb, var(--appkit-color-surface) 65%, transparent))",
893
+ "card-indigo": "linear-gradient(to bottom right, rgba(53,112,252,0.20), var(--appkit-color-surface), var(--appkit-color-surface))",
894
+ "card-teal": "linear-gradient(to bottom right, rgba(101,196,8,0.15), var(--appkit-color-surface), var(--appkit-color-surface))",
895
+ "card-amber": "linear-gradient(to bottom right, var(--appkit-color-warning-surface), var(--appkit-color-surface), var(--appkit-color-surface))",
896
+ "card-rose": "linear-gradient(to bottom right, var(--appkit-color-error-surface), var(--appkit-color-surface), var(--appkit-color-surface))",
897
+ logo: "linear-gradient(to right, var(--appkit-color-secondary-400) 0%, var(--appkit-color-primary-400) 55%, var(--appkit-color-primary-300) 100%)",
898
+ sidebar: "linear-gradient(to bottom, var(--appkit-color-primary-950), var(--appkit-color-primary-900))",
899
+ },
900
+ },
901
+ ],
902
+ defaultLightThemeId: "crimson-warrior",
903
+ defaultDarkThemeId: "shadow-abyss",
904
+ },
429
905
  };
package/dist/server.d.ts CHANGED
@@ -442,6 +442,8 @@ export { removeFromWishlist } from "./features/wishlist/server";
442
442
  export { siteSettingsRepository } from "./repositories/index";
443
443
  export { storeRepository } from "./repositories/index";
444
444
  export { serverLogger } from "./monitoring/index";
445
+ export { withRetry } from "./http/retry";
446
+ export { safeFireAndForget } from "./utils/safe-fire-forget";
445
447
  export { applyRateLimit } from "./security/index";
446
448
  export { rateLimitByIdentifier } from "./security/index";
447
449
  export { RateLimitPresets } from "./security/index";
@@ -510,6 +512,8 @@ export type { SitemapOptions, RobotsOptions, ManifestOptions, DefaultOgOptions }
510
512
  export { checkActionAllowed } from "./features/admin/utils/checkActionAllowed";
511
513
  export { getDisabledRoutes } from "./features/admin/utils/getDisabledRoutes";
512
514
  export { getSiteSettingsGlobal } from "./features/admin/utils/getSiteSettingsGlobal";
515
+ export { getSiteSettingsSafe } from "./_internal/server/features/site-settings/safe-settings";
516
+ export { callFirebaseIdentityToolkit } from "./_internal/server/features/auth/firebase-identity";
513
517
  export { updateActionConfigDomain, updateNavConfigDomain } from "./_internal/server/features/site-settings/actions";
514
518
  export { getClassifiedForDetail } from "./_internal/server/features/classified/data";
515
519
  export { getPrizeDrawForDetail, renderPrizeDrawOg, renderPrizeDrawOgImage, type PrizeDrawOgData, } from "./_internal/server/features/prize-draws/index";