@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.
Files changed (2600) hide show
  1. package/README.md +36 -65
  2. package/dist/cli/index.d.ts +6 -9
  3. package/dist/cli/index.js +167 -141
  4. package/dist/client.d.ts +15 -0
  5. package/dist/client.js +15 -0
  6. package/dist/constants/api-endpoint-resolver.d.ts +34 -0
  7. package/dist/constants/api-endpoint-resolver.js +38 -0
  8. package/dist/constants/api-endpoints.d.ts +388 -0
  9. package/dist/constants/api-endpoints.js +342 -0
  10. package/dist/constants/cache-invalidation.d.ts +18 -0
  11. package/dist/constants/cache-invalidation.js +33 -0
  12. package/dist/constants/index.d.ts +14 -0
  13. package/dist/constants/index.js +14 -0
  14. package/dist/contracts/auth.d.ts +58 -0
  15. package/dist/contracts/auth.js +2 -0
  16. package/dist/contracts/client-auth.d.ts +22 -0
  17. package/dist/contracts/client-auth.js +17 -0
  18. package/dist/contracts/client-payment-gateway.d.ts +65 -0
  19. package/dist/contracts/client-payment-gateway.js +25 -0
  20. package/dist/contracts/client-realtime.d.ts +24 -0
  21. package/dist/contracts/client-realtime.js +18 -0
  22. package/dist/contracts/client-session.d.ts +37 -0
  23. package/dist/contracts/client-session.js +22 -0
  24. package/dist/contracts/config.d.ts +53 -0
  25. package/dist/contracts/config.js +2 -0
  26. package/dist/contracts/email.d.ts +30 -0
  27. package/dist/contracts/email.js +2 -0
  28. package/dist/contracts/extend.d.ts +270 -0
  29. package/dist/contracts/extend.js +75 -0
  30. package/dist/contracts/feature.d.ts +53 -0
  31. package/dist/contracts/feature.js +2 -0
  32. package/dist/contracts/field-ops.d.ts +31 -0
  33. package/dist/contracts/field-ops.js +35 -0
  34. package/dist/contracts/form.d.ts +89 -0
  35. package/dist/contracts/form.js +80 -0
  36. package/dist/contracts/index.d.ts +32 -728
  37. package/dist/contracts/index.js +13 -4
  38. package/dist/contracts/infra.d.ts +43 -0
  39. package/dist/contracts/infra.js +2 -0
  40. package/dist/contracts/payment.d.ts +39 -0
  41. package/dist/contracts/payment.js +2 -0
  42. package/dist/contracts/registry.d.ts +26 -0
  43. package/dist/contracts/registry.js +14 -0
  44. package/dist/contracts/repository.d.ts +127 -0
  45. package/dist/contracts/repository.js +28 -0
  46. package/dist/contracts/search.d.ts +44 -0
  47. package/dist/contracts/search.js +2 -0
  48. package/dist/contracts/shipping.d.ts +64 -0
  49. package/dist/contracts/shipping.js +2 -0
  50. package/dist/contracts/storage.d.ts +27 -0
  51. package/dist/contracts/storage.js +2 -0
  52. package/dist/contracts/style.d.ts +23 -0
  53. package/dist/contracts/style.js +2 -0
  54. package/dist/contracts/table.d.ts +104 -0
  55. package/dist/contracts/table.js +68 -0
  56. package/dist/core/CacheManager.d.ts +31 -0
  57. package/dist/core/CacheManager.js +63 -0
  58. package/dist/core/EventBus.d.ts +27 -0
  59. package/dist/core/EventBus.js +75 -0
  60. package/dist/core/Logger.d.ts +60 -0
  61. package/dist/core/Logger.js +153 -0
  62. package/dist/core/Queue.d.ts +43 -0
  63. package/dist/core/Queue.js +92 -0
  64. package/dist/core/StorageManager.d.ts +36 -0
  65. package/dist/core/StorageManager.js +159 -0
  66. package/dist/core/baseline-resolver.d.ts +52 -0
  67. package/dist/core/baseline-resolver.js +74 -0
  68. package/dist/core/browser.d.ts +18 -0
  69. package/dist/core/browser.js +9 -0
  70. package/dist/core/copilot-log.repository.d.ts +44 -0
  71. package/dist/core/copilot-log.repository.js +61 -0
  72. package/dist/core/hooks/useSiteSettings.d.ts +1 -0
  73. package/dist/core/hooks/useSiteSettings.js +11 -0
  74. package/dist/core/index.d.ts +31 -326
  75. package/dist/core/index.js +21 -7
  76. package/dist/core/integration-keys.d.ts +30 -0
  77. package/dist/core/integration-keys.js +55 -0
  78. package/dist/core/mutation-events.d.ts +147 -0
  79. package/dist/core/mutation-events.js +193 -0
  80. package/dist/core/newsletter-actions.d.ts +20 -0
  81. package/dist/core/newsletter-actions.js +28 -0
  82. package/dist/core/newsletter.repository.d.ts +55 -0
  83. package/dist/core/newsletter.repository.js +109 -0
  84. package/dist/core/server-action.d.ts +114 -0
  85. package/dist/core/server-action.js +119 -0
  86. package/dist/core/site-config.d.ts +33 -0
  87. package/dist/core/site-config.js +74 -0
  88. package/dist/core/unit-of-work.d.ts +32 -0
  89. package/dist/core/unit-of-work.js +114 -0
  90. package/dist/errors/api-error.d.ts +4 -0
  91. package/dist/errors/api-error.js +6 -0
  92. package/dist/errors/authentication-error.d.ts +4 -0
  93. package/dist/errors/authentication-error.js +6 -0
  94. package/dist/errors/authorization-error.d.ts +4 -0
  95. package/dist/errors/authorization-error.js +6 -0
  96. package/dist/errors/base-error.d.ts +14 -0
  97. package/dist/errors/base-error.js +22 -0
  98. package/dist/errors/database-error.d.ts +4 -0
  99. package/dist/errors/database-error.js +6 -0
  100. package/dist/errors/error-codes.d.ts +43 -0
  101. package/dist/errors/error-codes.js +93 -0
  102. package/dist/errors/error-handler.d.ts +16 -0
  103. package/dist/errors/error-handler.js +57 -0
  104. package/dist/errors/index.d.ts +11 -96
  105. package/dist/errors/index.js +15 -4
  106. package/dist/errors/messages.d.ts +469 -0
  107. package/dist/errors/messages.js +503 -0
  108. package/dist/errors/not-found-error.d.ts +4 -0
  109. package/dist/errors/not-found-error.js +6 -0
  110. package/dist/errors/validation-error.d.ts +4 -0
  111. package/dist/errors/validation-error.js +6 -0
  112. package/dist/features/about/components/AboutView.d.ts +38 -0
  113. package/dist/features/about/components/AboutView.js +5 -0
  114. package/dist/features/about/index.d.ts +2 -42
  115. package/dist/features/about/index.js +1 -280
  116. package/dist/features/account/actions/address-actions.d.ts +7 -0
  117. package/dist/features/account/actions/address-actions.js +24 -0
  118. package/dist/features/account/actions/index.d.ts +1 -0
  119. package/dist/features/account/actions/index.js +1 -0
  120. package/dist/features/account/address-validation.d.ts +20 -0
  121. package/dist/features/account/address-validation.js +35 -0
  122. package/dist/features/account/api/[userId]/addresses/route.d.ts +21 -0
  123. package/dist/features/account/api/[userId]/addresses/route.js +91 -0
  124. package/dist/features/account/api/[userId]/route.d.ts +23 -0
  125. package/dist/features/account/api/[userId]/route.js +67 -0
  126. package/dist/features/account/columns/index.d.ts +17 -0
  127. package/dist/features/account/columns/index.js +39 -0
  128. package/dist/features/account/components/AddressBook.d.ts +39 -0
  129. package/dist/features/account/components/AddressBook.js +14 -0
  130. package/dist/features/account/components/AddressForm.d.ts +39 -0
  131. package/dist/features/account/components/AddressForm.js +55 -0
  132. package/dist/features/account/components/AddressSelectorCreate.d.ts +16 -0
  133. package/dist/features/account/components/AddressSelectorCreate.js +40 -0
  134. package/dist/features/account/components/BecomeSellerView.d.ts +17 -0
  135. package/dist/features/account/components/BecomeSellerView.js +5 -0
  136. package/dist/features/account/components/ChatList.d.ts +14 -0
  137. package/dist/features/account/components/ChatList.js +10 -0
  138. package/dist/features/account/components/ChatWindow.d.ts +17 -0
  139. package/dist/features/account/components/ChatWindow.js +6 -0
  140. package/dist/features/account/components/MessagesView.d.ts +16 -0
  141. package/dist/features/account/components/MessagesView.js +5 -0
  142. package/dist/features/account/components/NotificationBell.d.ts +32 -0
  143. package/dist/features/account/components/NotificationBell.js +80 -0
  144. package/dist/features/account/components/OrderDetailView.d.ts +18 -0
  145. package/dist/features/account/components/OrderDetailView.js +12 -0
  146. package/dist/features/account/components/ProfileView.d.ts +12 -0
  147. package/dist/features/account/components/ProfileView.js +5 -0
  148. package/dist/features/account/components/UserAccountHubView.d.ts +13 -0
  149. package/dist/features/account/components/UserAccountHubView.js +5 -0
  150. package/dist/features/account/components/UserAddressesView.d.ts +13 -0
  151. package/dist/features/account/components/UserAddressesView.js +5 -0
  152. package/dist/features/account/components/UserNotificationsView.d.ts +15 -0
  153. package/dist/features/account/components/UserNotificationsView.js +12 -0
  154. package/dist/features/account/components/UserOffersView.d.ts +10 -0
  155. package/dist/features/account/components/UserOffersView.js +5 -0
  156. package/dist/features/account/components/UserOrderTrackView.d.ts +16 -0
  157. package/dist/features/account/components/UserOrderTrackView.js +8 -0
  158. package/dist/features/account/components/UserOrdersView.d.ts +12 -0
  159. package/dist/features/account/components/UserOrdersView.js +5 -0
  160. package/dist/features/account/components/UserSettingsView.d.ts +15 -0
  161. package/dist/features/account/components/UserSettingsView.js +12 -0
  162. package/dist/features/account/components/index.d.ts +34 -0
  163. package/dist/features/account/components/index.js +17 -0
  164. package/dist/features/account/constants/addresses.d.ts +13 -0
  165. package/dist/features/account/constants/addresses.js +43 -0
  166. package/dist/features/account/hooks/useAccount.d.ts +13 -0
  167. package/dist/features/account/hooks/useAccount.js +19 -0
  168. package/dist/features/account/hooks/useAddressForm.d.ts +24 -0
  169. package/dist/features/account/hooks/useAddressForm.js +58 -0
  170. package/dist/features/account/hooks/useAddressSelector.d.ts +25 -0
  171. package/dist/features/account/hooks/useAddressSelector.js +30 -0
  172. package/dist/features/account/hooks/useAddresses.d.ts +59 -0
  173. package/dist/features/account/hooks/useAddresses.js +73 -0
  174. package/dist/features/account/hooks/useNotifications.d.ts +23 -0
  175. package/dist/features/account/hooks/useNotifications.js +31 -0
  176. package/dist/features/account/hooks/useProfile.d.ts +25 -0
  177. package/dist/features/account/hooks/useProfile.js +24 -0
  178. package/dist/features/account/hooks/useProfileStats.d.ts +6 -0
  179. package/dist/features/account/hooks/useProfileStats.js +21 -0
  180. package/dist/features/account/hooks/usePublicProfile.d.ts +78 -0
  181. package/dist/features/account/hooks/usePublicProfile.js +51 -0
  182. package/dist/features/account/index.d.ts +15 -555
  183. package/dist/features/account/index.js +15 -1003
  184. package/dist/features/account/manifest.d.ts +2 -0
  185. package/dist/features/account/manifest.js +27 -0
  186. package/dist/features/account/messages/en.json +12 -0
  187. package/dist/features/account/repository/account.repository.d.ts +11 -0
  188. package/dist/features/account/repository/account.repository.js +20 -0
  189. package/dist/features/account/repository/address.repository.d.ts +17 -0
  190. package/dist/features/account/repository/address.repository.js +185 -0
  191. package/dist/features/account/schemas/firestore.d.ts +48 -0
  192. package/dist/features/account/schemas/firestore.js +59 -0
  193. package/dist/features/account/schemas/index.d.ts +198 -0
  194. package/dist/features/account/schemas/index.js +51 -0
  195. package/dist/features/account/server.d.ts +9 -0
  196. package/dist/features/account/server.js +9 -0
  197. package/dist/features/account/types/index.d.ts +83 -0
  198. package/dist/features/account/types/index.js +2 -0
  199. package/dist/features/admin/actions/admin-actions.d.ts +35 -0
  200. package/dist/features/admin/actions/admin-actions.js +174 -0
  201. package/dist/features/admin/actions/admin-coupon-actions.d.ts +17 -0
  202. package/dist/features/admin/actions/admin-coupon-actions.js +87 -0
  203. package/dist/features/admin/actions/admin-read-actions.d.ts +105 -0
  204. package/dist/features/admin/actions/admin-read-actions.js +172 -0
  205. package/dist/features/admin/actions/chat-actions.d.ts +29 -0
  206. package/dist/features/admin/actions/chat-actions.js +97 -0
  207. package/dist/features/admin/actions/index.d.ts +6 -0
  208. package/dist/features/admin/actions/index.js +6 -0
  209. package/dist/features/admin/actions/notification-actions.d.ts +31 -0
  210. package/dist/features/admin/actions/notification-actions.js +42 -0
  211. package/dist/features/admin/actions/site-settings-actions.d.ts +8 -0
  212. package/dist/features/admin/actions/site-settings-actions.js +16 -0
  213. package/dist/features/admin/api/bids/route.d.ts +14 -0
  214. package/dist/features/admin/api/bids/route.js +53 -0
  215. package/dist/features/admin/api/coupons/route.d.ts +14 -0
  216. package/dist/features/admin/api/coupons/route.js +53 -0
  217. package/dist/features/admin/api/products/route.d.ts +14 -0
  218. package/dist/features/admin/api/products/route.js +54 -0
  219. package/dist/features/admin/api/reviews/route.d.ts +14 -0
  220. package/dist/features/admin/api/reviews/route.js +53 -0
  221. package/dist/features/admin/components/AdminAnalyticsView.d.ts +29 -0
  222. package/dist/features/admin/components/AdminAnalyticsView.js +15 -0
  223. package/dist/features/admin/components/AdminBidsView.d.ts +4 -0
  224. package/dist/features/admin/components/AdminBidsView.js +5 -0
  225. package/dist/features/admin/components/AdminBlogView.d.ts +4 -0
  226. package/dist/features/admin/components/AdminBlogView.js +5 -0
  227. package/dist/features/admin/components/AdminCarouselView.d.ts +9 -0
  228. package/dist/features/admin/components/AdminCarouselView.js +5 -0
  229. package/dist/features/admin/components/AdminCategoriesView.d.ts +9 -0
  230. package/dist/features/admin/components/AdminCategoriesView.js +5 -0
  231. package/dist/features/admin/components/AdminCouponsView.d.ts +4 -0
  232. package/dist/features/admin/components/AdminCouponsView.js +5 -0
  233. package/dist/features/admin/components/AdminDashboardView.d.ts +16 -0
  234. package/dist/features/admin/components/AdminDashboardView.js +11 -0
  235. package/dist/features/admin/components/AdminFaqsView.d.ts +4 -0
  236. package/dist/features/admin/components/AdminFaqsView.js +5 -0
  237. package/dist/features/admin/components/AdminFeatureFlagsView.d.ts +9 -0
  238. package/dist/features/admin/components/AdminFeatureFlagsView.js +5 -0
  239. package/dist/features/admin/components/AdminFilterBar.d.ts +65 -0
  240. package/dist/features/admin/components/AdminFilterBar.js +22 -0
  241. package/dist/features/admin/components/AdminMediaView.d.ts +9 -0
  242. package/dist/features/admin/components/AdminMediaView.js +5 -0
  243. package/dist/features/admin/components/AdminNavigationView.d.ts +9 -0
  244. package/dist/features/admin/components/AdminNavigationView.js +5 -0
  245. package/dist/features/admin/components/AdminOrdersView.d.ts +4 -0
  246. package/dist/features/admin/components/AdminOrdersView.js +5 -0
  247. package/dist/features/admin/components/AdminPageHeader.d.ts +53 -0
  248. package/dist/features/admin/components/AdminPageHeader.js +12 -0
  249. package/dist/features/admin/components/AdminPayoutsView.d.ts +4 -0
  250. package/dist/features/admin/components/AdminPayoutsView.js +5 -0
  251. package/dist/features/admin/components/AdminProductsView.d.ts +4 -0
  252. package/dist/features/admin/components/AdminProductsView.js +5 -0
  253. package/dist/features/admin/components/AdminReviewsView.d.ts +7 -0
  254. package/dist/features/admin/components/AdminReviewsView.js +5 -0
  255. package/dist/features/admin/components/AdminSectionsView.d.ts +9 -0
  256. package/dist/features/admin/components/AdminSectionsView.js +5 -0
  257. package/dist/features/admin/components/AdminSessionsManager.d.ts +9 -0
  258. package/dist/features/admin/components/AdminSessionsManager.js +5 -0
  259. package/dist/features/admin/components/AdminSidebar.d.ts +9 -0
  260. package/dist/features/admin/components/AdminSidebar.js +6 -0
  261. package/dist/features/admin/components/AdminSiteView.d.ts +10 -0
  262. package/dist/features/admin/components/AdminSiteView.js +5 -0
  263. package/dist/features/admin/components/AdminStoresView.d.ts +4 -0
  264. package/dist/features/admin/components/AdminStoresView.js +5 -0
  265. package/dist/features/admin/components/AdminTopBar.d.ts +8 -0
  266. package/dist/features/admin/components/AdminTopBar.js +8 -0
  267. package/dist/features/admin/components/AdminUsersView.d.ts +4 -0
  268. package/dist/features/admin/components/AdminUsersView.js +5 -0
  269. package/dist/features/admin/components/DashboardStats.d.ts +8 -0
  270. package/dist/features/admin/components/DashboardStats.js +21 -0
  271. package/dist/features/admin/components/DataTable.d.ts +19 -0
  272. package/dist/features/admin/components/DataTable.js +7 -0
  273. package/dist/features/admin/components/DemoSeedView.d.ts +11 -0
  274. package/dist/features/admin/components/DemoSeedView.js +5 -0
  275. package/dist/features/admin/components/DrawerFormFooter.d.ts +54 -0
  276. package/dist/features/admin/components/DrawerFormFooter.js +6 -0
  277. package/dist/features/admin/components/QuickActionsPanel.d.ts +15 -0
  278. package/dist/features/admin/components/QuickActionsPanel.js +6 -0
  279. package/dist/features/admin/components/analytics/AdminAnalyticsCharts.d.ts +17 -0
  280. package/dist/features/admin/components/analytics/AdminAnalyticsCharts.js +33 -0
  281. package/dist/features/admin/components/analytics/AdminStatCard.d.ts +8 -0
  282. package/dist/features/admin/components/analytics/AdminStatCard.js +6 -0
  283. package/dist/features/admin/components/analytics/AdminTopProductsTable.d.ts +16 -0
  284. package/dist/features/admin/components/analytics/AdminTopProductsTable.js +6 -0
  285. package/dist/features/admin/components/analytics/index.d.ts +3 -0
  286. package/dist/features/admin/components/analytics/index.js +3 -0
  287. package/dist/features/admin/components/index.d.ts +62 -0
  288. package/dist/features/admin/components/index.js +32 -0
  289. package/dist/features/admin/hooks/useAdmin.d.ts +9 -0
  290. package/dist/features/admin/hooks/useAdmin.js +14 -0
  291. package/dist/features/admin/hooks/useChat.d.ts +24 -0
  292. package/dist/features/admin/hooks/useChat.js +97 -0
  293. package/dist/features/admin/index.d.ts +8 -554
  294. package/dist/features/admin/index.js +7 -2703
  295. package/dist/features/admin/manifest.d.ts +2 -0
  296. package/dist/features/admin/manifest.js +13 -0
  297. package/dist/features/admin/messages/en.json +13 -0
  298. package/dist/features/admin/permission-map.d.ts +3 -0
  299. package/dist/features/admin/permission-map.js +24 -0
  300. package/dist/features/admin/repository/chat.repository.d.ts +70 -0
  301. package/dist/features/admin/repository/chat.repository.js +216 -0
  302. package/dist/features/admin/repository/notification.repository.d.ts +64 -0
  303. package/dist/features/admin/repository/notification.repository.js +225 -0
  304. package/dist/features/admin/repository/site-settings.repository.d.ts +118 -0
  305. package/dist/features/admin/repository/site-settings.repository.js +214 -0
  306. package/dist/features/admin/schemas/firestore.d.ts +311 -0
  307. package/dist/features/admin/schemas/firestore.js +246 -0
  308. package/dist/features/admin/schemas/index.d.ts +1 -0
  309. package/dist/features/admin/schemas/index.js +1 -0
  310. package/dist/features/admin/server.d.ts +15 -0
  311. package/dist/features/admin/server.js +14 -0
  312. package/dist/features/admin/types/index.d.ts +61 -0
  313. package/dist/features/admin/types/index.js +1 -0
  314. package/dist/features/admin/types/product.types.d.ts +78 -0
  315. package/dist/features/admin/types/product.types.js +13 -0
  316. package/dist/features/auctions/actions/bid-actions.d.ts +22 -0
  317. package/dist/features/auctions/actions/bid-actions.js +106 -0
  318. package/dist/features/auctions/actions/index.d.ts +1 -0
  319. package/dist/features/auctions/actions/index.js +1 -0
  320. package/dist/features/auctions/api/route.d.ts +14 -0
  321. package/dist/features/auctions/api/route.js +67 -0
  322. package/dist/features/auctions/columns/index.d.ts +14 -0
  323. package/dist/features/auctions/columns/index.js +63 -0
  324. package/dist/features/auctions/components/AuctionCard.d.ts +26 -0
  325. package/dist/features/auctions/components/AuctionCard.js +35 -0
  326. package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +56 -0
  327. package/dist/features/auctions/components/MarketplaceAuctionCard.js +112 -0
  328. package/dist/features/auctions/components/MarketplaceAuctionGrid.d.ts +22 -0
  329. package/dist/features/auctions/components/MarketplaceAuctionGrid.js +37 -0
  330. package/dist/features/auctions/components/index.d.ts +3 -0
  331. package/dist/features/auctions/components/index.js +3 -0
  332. package/dist/features/auctions/hooks/useAuctions.d.ts +50 -0
  333. package/dist/features/auctions/hooks/useAuctions.js +93 -0
  334. package/dist/features/auctions/hooks/usePlaceBid.d.ts +24 -0
  335. package/dist/features/auctions/hooks/usePlaceBid.js +29 -0
  336. package/dist/features/auctions/hooks/useRealtimeBids.d.ts +38 -0
  337. package/dist/features/auctions/hooks/useRealtimeBids.js +66 -0
  338. package/dist/features/auctions/index.d.ts +8 -513
  339. package/dist/features/auctions/index.js +8 -1194
  340. package/dist/features/auctions/manifest.d.ts +2 -0
  341. package/dist/features/auctions/manifest.js +17 -0
  342. package/dist/features/auctions/messages/en.json +18 -0
  343. package/dist/features/auctions/repository/auctions.repository.d.ts +12 -0
  344. package/dist/features/auctions/repository/auctions.repository.js +42 -0
  345. package/dist/features/auctions/repository/bid.repository.d.ts +145 -0
  346. package/dist/features/auctions/repository/bid.repository.js +370 -0
  347. package/dist/features/auctions/schemas/firestore.d.ts +48 -0
  348. package/dist/features/auctions/schemas/firestore.js +50 -0
  349. package/dist/features/auctions/schemas/index.d.ts +155 -0
  350. package/dist/features/auctions/schemas/index.js +64 -0
  351. package/dist/features/auctions/server.d.ts +10 -0
  352. package/dist/features/auctions/server.js +10 -0
  353. package/dist/features/auctions/types/index.d.ts +73 -0
  354. package/dist/features/auctions/types/index.js +1 -0
  355. package/dist/features/auth/actions/index.d.ts +2 -0
  356. package/dist/features/auth/actions/index.js +2 -0
  357. package/dist/features/auth/actions/profile-actions.d.ts +27 -0
  358. package/dist/features/auth/actions/profile-actions.js +50 -0
  359. package/dist/features/auth/actions/realtime-token-actions.d.ts +11 -0
  360. package/dist/features/auth/actions/realtime-token-actions.js +31 -0
  361. package/dist/features/auth/api/route.d.ts +22 -0
  362. package/dist/features/auth/api/route.js +48 -0
  363. package/dist/features/auth/auth-helpers.d.ts +14 -0
  364. package/dist/features/auth/auth-helpers.js +68 -0
  365. package/dist/features/auth/components/AuthStatusPanel.d.ts +10 -0
  366. package/dist/features/auth/components/AuthStatusPanel.js +22 -0
  367. package/dist/features/auth/components/ForgotPasswordView.d.ts +18 -0
  368. package/dist/features/auth/components/ForgotPasswordView.js +15 -0
  369. package/dist/features/auth/components/Guards.d.ts +86 -0
  370. package/dist/features/auth/components/Guards.js +91 -0
  371. package/dist/features/auth/components/LoginForm.d.ts +36 -0
  372. package/dist/features/auth/components/LoginForm.js +18 -0
  373. package/dist/features/auth/components/RegisterForm.d.ts +36 -0
  374. package/dist/features/auth/components/RegisterForm.js +27 -0
  375. package/dist/features/auth/components/ResetPasswordView.d.ts +23 -0
  376. package/dist/features/auth/components/ResetPasswordView.js +22 -0
  377. package/dist/features/auth/components/SocialAuthButtons.d.ts +8 -0
  378. package/dist/features/auth/components/SocialAuthButtons.js +6 -0
  379. package/dist/features/auth/components/VerifyEmailView.d.ts +20 -0
  380. package/dist/features/auth/components/VerifyEmailView.js +8 -0
  381. package/dist/features/auth/components/index.d.ts +14 -0
  382. package/dist/features/auth/components/index.js +8 -0
  383. package/dist/features/auth/consent-otp.d.ts +52 -0
  384. package/dist/features/auth/consent-otp.js +120 -0
  385. package/dist/features/auth/hooks/useAuth.d.ts +81 -0
  386. package/dist/features/auth/hooks/useAuth.js +164 -0
  387. package/dist/features/auth/hooks/useAuthEvent.d.ts +22 -0
  388. package/dist/features/auth/hooks/useAuthEvent.js +31 -0
  389. package/dist/features/auth/hooks/useLogout.d.ts +16 -0
  390. package/dist/features/auth/hooks/useLogout.js +22 -0
  391. package/dist/features/auth/hooks/useRBAC.d.ts +38 -0
  392. package/dist/features/auth/hooks/useRBAC.js +80 -0
  393. package/dist/features/auth/index.d.ts +10 -315
  394. package/dist/features/auth/index.js +10 -1874
  395. package/dist/features/auth/manifest.d.ts +2 -0
  396. package/dist/features/auth/manifest.js +21 -0
  397. package/dist/features/auth/messages/en.json +13 -0
  398. package/dist/features/auth/repository/index.d.ts +4 -0
  399. package/dist/features/auth/repository/index.js +4 -0
  400. package/dist/features/auth/repository/session.repository.d.ts +44 -0
  401. package/dist/features/auth/repository/session.repository.js +246 -0
  402. package/dist/features/auth/repository/sms-counter.repository.d.ts +15 -0
  403. package/dist/features/auth/repository/sms-counter.repository.js +54 -0
  404. package/dist/features/auth/repository/token.repository.d.ts +38 -0
  405. package/dist/features/auth/repository/token.repository.js +186 -0
  406. package/dist/features/auth/repository/user.repository.d.ts +46 -0
  407. package/dist/features/auth/repository/user.repository.js +233 -0
  408. package/dist/features/auth/schemas/firestore.d.ts +351 -0
  409. package/dist/features/auth/schemas/firestore.js +272 -0
  410. package/dist/features/auth/schemas/index.d.ts +72 -0
  411. package/dist/features/auth/schemas/index.js +41 -0
  412. package/dist/features/auth/server.d.ts +15 -18
  413. package/dist/features/auth/server.js +21 -529
  414. package/dist/features/auth/token-helpers.d.ts +7 -0
  415. package/dist/features/auth/token-helpers.js +37 -0
  416. package/dist/features/auth/token-store.d.ts +39 -0
  417. package/dist/features/auth/token-store.js +120 -0
  418. package/dist/features/auth/types/index.d.ts +30 -0
  419. package/dist/features/auth/types/index.js +1 -0
  420. package/dist/features/before-after/api/[id]/route.d.ts +26 -0
  421. package/dist/features/before-after/api/[id]/route.js +88 -0
  422. package/dist/features/before-after/api/route.d.ts +13 -0
  423. package/dist/features/before-after/api/route.js +79 -0
  424. package/dist/features/before-after/columns/index.d.ts +17 -0
  425. package/dist/features/before-after/columns/index.js +50 -0
  426. package/dist/features/before-after/components/BeforeAfterGallery.d.ts +7 -0
  427. package/dist/features/before-after/components/BeforeAfterGallery.js +8 -0
  428. package/dist/features/before-after/components/BeforeAfterSlider.d.ts +7 -0
  429. package/dist/features/before-after/components/BeforeAfterSlider.js +27 -0
  430. package/dist/features/before-after/components/index.d.ts +2 -0
  431. package/dist/features/before-after/components/index.js +2 -0
  432. package/dist/features/before-after/hooks/useBeforeAfter.d.ts +15 -0
  433. package/dist/features/before-after/hooks/useBeforeAfter.js +25 -0
  434. package/dist/features/before-after/index.d.ts +6 -128
  435. package/dist/features/before-after/index.js +6 -546
  436. package/dist/features/before-after/manifest.d.ts +2 -0
  437. package/dist/features/before-after/manifest.js +10 -0
  438. package/dist/features/before-after/messages/en.json +8 -0
  439. package/dist/features/before-after/repository/before-after.repository.d.ts +13 -0
  440. package/dist/features/before-after/repository/before-after.repository.js +36 -0
  441. package/dist/features/before-after/schemas/index.d.ts +48 -0
  442. package/dist/features/before-after/schemas/index.js +24 -0
  443. package/dist/features/before-after/server.d.ts +7 -0
  444. package/dist/features/before-after/server.js +7 -0
  445. package/dist/features/before-after/types/index.d.ts +18 -0
  446. package/dist/features/before-after/types/index.js +1 -0
  447. package/dist/features/blog/actions/blog-actions.d.ts +302 -0
  448. package/dist/features/blog/actions/blog-actions.js +119 -0
  449. package/dist/features/blog/actions/index.d.ts +1 -0
  450. package/dist/features/blog/actions/index.js +1 -0
  451. package/dist/features/blog/api/[slug]/route.d.ts +23 -0
  452. package/dist/features/blog/api/[slug]/route.js +40 -0
  453. package/dist/features/blog/api/route.d.ts +12 -0
  454. package/dist/features/blog/api/route.js +64 -0
  455. package/dist/features/blog/columns/index.d.ts +27 -0
  456. package/dist/features/blog/columns/index.js +54 -0
  457. package/dist/features/blog/components/BlogFeaturedCard.d.ts +17 -0
  458. package/dist/features/blog/components/BlogFeaturedCard.js +24 -0
  459. package/dist/features/blog/components/BlogFilters.d.ts +106 -0
  460. package/dist/features/blog/components/BlogFilters.js +67 -0
  461. package/dist/features/blog/components/BlogListView.d.ts +29 -0
  462. package/dist/features/blog/components/BlogListView.js +38 -0
  463. package/dist/features/blog/components/BlogPostForm.d.ts +56 -0
  464. package/dist/features/blog/components/BlogPostForm.js +24 -0
  465. package/dist/features/blog/components/BlogPostView.d.ts +32 -0
  466. package/dist/features/blog/components/BlogPostView.js +39 -0
  467. package/dist/features/blog/components/index.d.ts +9 -0
  468. package/dist/features/blog/components/index.js +5 -0
  469. package/dist/features/blog/hooks/useBlog.d.ts +27 -0
  470. package/dist/features/blog/hooks/useBlog.js +51 -0
  471. package/dist/features/blog/index.d.ts +6 -492
  472. package/dist/features/blog/index.js +6 -4062
  473. package/dist/features/blog/manifest.d.ts +2 -0
  474. package/dist/features/blog/manifest.js +14 -0
  475. package/dist/features/blog/messages/en.json +14 -0
  476. package/dist/features/blog/repository/blog.repository.d.ts +79 -0
  477. package/dist/features/blog/repository/blog.repository.js +130 -0
  478. package/dist/features/blog/schemas/firestore.d.ts +87 -0
  479. package/dist/features/blog/schemas/firestore.js +99 -0
  480. package/dist/features/blog/schemas/index.d.ts +207 -0
  481. package/dist/features/blog/schemas/index.js +71 -0
  482. package/dist/features/blog/server.d.ts +8 -71
  483. package/dist/features/blog/server.js +10 -180
  484. package/dist/features/blog/types/index.d.ts +47 -0
  485. package/dist/features/blog/types/index.js +1 -0
  486. package/dist/features/cart/actions/cart-actions.d.ts +16 -0
  487. package/dist/features/cart/actions/cart-actions.js +52 -0
  488. package/dist/features/cart/actions/index.d.ts +1 -0
  489. package/dist/features/cart/actions/index.js +1 -0
  490. package/dist/features/cart/api/[id]/route.d.ts +21 -0
  491. package/dist/features/cart/api/[id]/route.js +62 -0
  492. package/dist/features/cart/api/route.d.ts +13 -0
  493. package/dist/features/cart/api/route.js +79 -0
  494. package/dist/features/cart/columns/index.d.ts +17 -0
  495. package/dist/features/cart/columns/index.js +53 -0
  496. package/dist/features/cart/components/CartDrawer.d.ts +27 -0
  497. package/dist/features/cart/components/CartDrawer.js +14 -0
  498. package/dist/features/cart/components/CartSummary.d.ts +19 -0
  499. package/dist/features/cart/components/CartSummary.js +5 -0
  500. package/dist/features/cart/components/CartView.d.ts +17 -0
  501. package/dist/features/cart/components/CartView.js +7 -0
  502. package/dist/features/cart/components/CheckoutAddressStep.d.ts +20 -0
  503. package/dist/features/cart/components/CheckoutAddressStep.js +12 -0
  504. package/dist/features/cart/components/CheckoutOtpModal.d.ts +15 -0
  505. package/dist/features/cart/components/CheckoutOtpModal.js +12 -0
  506. package/dist/features/cart/components/CheckoutSuccessView.d.ts +12 -0
  507. package/dist/features/cart/components/CheckoutSuccessView.js +9 -0
  508. package/dist/features/cart/components/CheckoutView.d.ts +15 -0
  509. package/dist/features/cart/components/CheckoutView.js +18 -0
  510. package/dist/features/cart/components/index.d.ts +13 -0
  511. package/dist/features/cart/components/index.js +7 -0
  512. package/dist/features/cart/hooks/useAddToCart.d.ts +27 -0
  513. package/dist/features/cart/hooks/useAddToCart.js +52 -0
  514. package/dist/features/cart/hooks/useCart.d.ts +17 -0
  515. package/dist/features/cart/hooks/useCart.js +24 -0
  516. package/dist/features/cart/hooks/useCartCount.d.ts +7 -0
  517. package/dist/features/cart/hooks/useCartCount.js +19 -0
  518. package/dist/features/cart/hooks/useCartQuery.d.ts +8 -0
  519. package/dist/features/cart/hooks/useCartQuery.js +11 -0
  520. package/dist/features/cart/hooks/useCheckoutReadQueries.d.ts +14 -0
  521. package/dist/features/cart/hooks/useCheckoutReadQueries.js +18 -0
  522. package/dist/features/cart/hooks/useGuestCart.d.ts +18 -0
  523. package/dist/features/cart/hooks/useGuestCart.js +32 -0
  524. package/dist/features/cart/hooks/useGuestCartMerge.d.ts +15 -0
  525. package/dist/features/cart/hooks/useGuestCartMerge.js +50 -0
  526. package/dist/features/cart/hooks/useOrder.d.ts +13 -0
  527. package/dist/features/cart/hooks/useOrder.js +24 -0
  528. package/dist/features/cart/index.d.ts +14 -451
  529. package/dist/features/cart/index.js +14 -1064
  530. package/dist/features/cart/manifest.d.ts +2 -0
  531. package/dist/features/cart/manifest.js +10 -0
  532. package/dist/features/cart/messages/en.json +10 -0
  533. package/dist/features/cart/repository/cart.repository.d.ts +23 -0
  534. package/dist/features/cart/repository/cart.repository.js +210 -0
  535. package/dist/features/cart/schemas/firestore.d.ts +83 -0
  536. package/dist/features/cart/schemas/firestore.js +36 -0
  537. package/dist/features/cart/schemas/index.d.ts +184 -0
  538. package/dist/features/cart/schemas/index.js +35 -0
  539. package/dist/features/cart/server.d.ts +8 -0
  540. package/dist/features/cart/server.js +8 -0
  541. package/dist/features/cart/types/index.d.ts +27 -0
  542. package/dist/features/cart/types/index.js +1 -0
  543. package/dist/features/cart/utils/guest-cart.d.ts +26 -0
  544. package/dist/features/cart/utils/guest-cart.js +83 -0
  545. package/dist/features/categories/actions/category-actions.d.ts +17 -0
  546. package/dist/features/categories/actions/category-actions.js +63 -0
  547. package/dist/features/categories/actions/index.d.ts +1 -0
  548. package/dist/features/categories/actions/index.js +1 -0
  549. package/dist/features/categories/api/[id]/route.d.ts +23 -0
  550. package/dist/features/categories/api/[id]/route.js +98 -0
  551. package/dist/features/categories/api/route.d.ts +19 -0
  552. package/dist/features/categories/api/route.js +200 -0
  553. package/dist/features/categories/columns/index.d.ts +15 -0
  554. package/dist/features/categories/columns/index.js +38 -0
  555. package/dist/features/categories/components/BreadcrumbTrail.d.ts +47 -0
  556. package/dist/features/categories/components/BreadcrumbTrail.js +36 -0
  557. package/dist/features/categories/components/CategoriesListView.d.ts +31 -0
  558. package/dist/features/categories/components/CategoriesListView.js +27 -0
  559. package/dist/features/categories/components/CategoryFilters.d.ts +68 -0
  560. package/dist/features/categories/components/CategoryFilters.js +75 -0
  561. package/dist/features/categories/components/CategoryForm.d.ts +24 -0
  562. package/dist/features/categories/components/CategoryForm.js +42 -0
  563. package/dist/features/categories/components/CategoryGrid.d.ts +14 -0
  564. package/dist/features/categories/components/CategoryGrid.js +14 -0
  565. package/dist/features/categories/components/CategoryProductsView.d.ts +49 -0
  566. package/dist/features/categories/components/CategoryProductsView.js +21 -0
  567. package/dist/features/categories/components/CategorySelectorCreate.d.ts +17 -0
  568. package/dist/features/categories/components/CategorySelectorCreate.js +57 -0
  569. package/dist/features/categories/components/CategorySortSelect.d.ts +9 -0
  570. package/dist/features/categories/components/CategorySortSelect.js +8 -0
  571. package/dist/features/categories/components/CategoryTableColumns.d.ts +30 -0
  572. package/dist/features/categories/components/CategoryTableColumns.js +54 -0
  573. package/dist/features/categories/components/CategoryTree.d.ts +15 -0
  574. package/dist/features/categories/components/CategoryTree.js +49 -0
  575. package/dist/features/categories/components/ConcernCard.d.ts +8 -0
  576. package/dist/features/categories/components/ConcernCard.js +5 -0
  577. package/dist/features/categories/components/ConcernGrid.d.ts +8 -0
  578. package/dist/features/categories/components/ConcernGrid.js +8 -0
  579. package/dist/features/categories/components/index.d.ts +22 -0
  580. package/dist/features/categories/components/index.js +12 -0
  581. package/dist/features/categories/hooks/useCategories.d.ts +26 -0
  582. package/dist/features/categories/hooks/useCategories.js +50 -0
  583. package/dist/features/categories/hooks/useCategorySelector.d.ts +26 -0
  584. package/dist/features/categories/hooks/useCategorySelector.js +42 -0
  585. package/dist/features/categories/index.d.ts +7 -461
  586. package/dist/features/categories/index.js +7 -2031
  587. package/dist/features/categories/manifest.d.ts +2 -0
  588. package/dist/features/categories/manifest.js +20 -0
  589. package/dist/features/categories/messages/en.json +14 -0
  590. package/dist/features/categories/repository/categories.repository.d.ts +31 -0
  591. package/dist/features/categories/repository/categories.repository.js +399 -0
  592. package/dist/features/categories/schemas/firestore.d.ts +140 -0
  593. package/dist/features/categories/schemas/firestore.js +189 -0
  594. package/dist/features/categories/schemas/index.d.ts +207 -0
  595. package/dist/features/categories/schemas/index.js +67 -0
  596. package/dist/features/categories/server.d.ts +7 -44
  597. package/dist/features/categories/server.js +10 -789
  598. package/dist/features/categories/types/index.d.ts +80 -0
  599. package/dist/features/categories/types/index.js +13 -0
  600. package/dist/features/checkout/actions/checkout-actions.d.ts +14 -0
  601. package/dist/features/checkout/actions/checkout-actions.js +91 -0
  602. package/dist/features/checkout/actions/index.d.ts +1 -0
  603. package/dist/features/checkout/actions/index.js +1 -0
  604. package/dist/features/checkout/components/CheckoutStepper.d.ts +10 -0
  605. package/dist/features/checkout/components/CheckoutStepper.js +15 -0
  606. package/dist/features/checkout/components/index.d.ts +1 -0
  607. package/dist/features/checkout/components/index.js +1 -0
  608. package/dist/features/checkout/hooks/useCheckout.d.ts +9 -0
  609. package/dist/features/checkout/hooks/useCheckout.js +24 -0
  610. package/dist/features/checkout/hooks/useCheckoutApi.d.ts +74 -0
  611. package/dist/features/checkout/hooks/useCheckoutApi.js +48 -0
  612. package/dist/features/checkout/hooks/usePaymentCheckout.d.ts +78 -0
  613. package/dist/features/checkout/hooks/usePaymentCheckout.js +178 -0
  614. package/dist/features/checkout/index.d.ts +8 -70
  615. package/dist/features/checkout/index.js +7 -192
  616. package/dist/features/checkout/manifest.d.ts +2 -0
  617. package/dist/features/checkout/manifest.js +17 -0
  618. package/dist/features/checkout/messages/en.json +10 -0
  619. package/dist/features/checkout/repository/failed-checkout.repository.d.ts +18 -0
  620. package/dist/features/checkout/repository/failed-checkout.repository.js +29 -0
  621. package/dist/features/checkout/schemas/firestore.d.ts +33 -0
  622. package/dist/features/checkout/schemas/firestore.js +6 -0
  623. package/dist/features/checkout/schemas/index.d.ts +1 -0
  624. package/dist/features/checkout/schemas/index.js +1 -0
  625. package/dist/features/checkout/server.d.ts +8 -0
  626. package/dist/features/checkout/server.js +8 -0
  627. package/dist/features/checkout/types/index.d.ts +46 -0
  628. package/dist/features/checkout/types/index.js +2 -0
  629. package/dist/features/cms/index.d.ts +1 -2
  630. package/dist/features/cms/index.js +5 -4
  631. package/dist/features/collections/api/[slug]/route.d.ts +26 -0
  632. package/dist/features/collections/api/[slug]/route.js +102 -0
  633. package/dist/features/collections/api/route.d.ts +13 -0
  634. package/dist/features/collections/api/route.js +79 -0
  635. package/dist/features/collections/columns/index.d.ts +17 -0
  636. package/dist/features/collections/columns/index.js +55 -0
  637. package/dist/features/collections/components/CollectionCard.d.ts +12 -0
  638. package/dist/features/collections/components/CollectionCard.js +9 -0
  639. package/dist/features/collections/components/index.d.ts +1 -0
  640. package/dist/features/collections/components/index.js +1 -0
  641. package/dist/features/collections/hooks/useCollections.d.ts +7 -0
  642. package/dist/features/collections/hooks/useCollections.js +34 -0
  643. package/dist/features/collections/index.d.ts +6 -148
  644. package/dist/features/collections/index.js +6 -378
  645. package/dist/features/collections/manifest.d.ts +2 -0
  646. package/dist/features/collections/manifest.js +16 -0
  647. package/dist/features/collections/messages/en.json +10 -0
  648. package/dist/features/collections/repository/collections.repository.d.ts +8 -0
  649. package/dist/features/collections/repository/collections.repository.js +16 -0
  650. package/dist/features/collections/schemas/index.d.ts +76 -0
  651. package/dist/features/collections/schemas/index.js +34 -0
  652. package/dist/features/collections/server.d.ts +7 -0
  653. package/dist/features/collections/server.js +7 -0
  654. package/dist/features/collections/types/index.d.ts +25 -0
  655. package/dist/features/collections/types/index.js +1 -0
  656. package/dist/features/consultation/api/[id]/route.d.ts +26 -0
  657. package/dist/features/consultation/api/[id]/route.js +88 -0
  658. package/dist/features/consultation/api/route.d.ts +13 -0
  659. package/dist/features/consultation/api/route.js +79 -0
  660. package/dist/features/consultation/columns/index.d.ts +17 -0
  661. package/dist/features/consultation/columns/index.js +54 -0
  662. package/dist/features/consultation/components/ConsultationForm.d.ts +8 -0
  663. package/dist/features/consultation/components/ConsultationForm.js +51 -0
  664. package/dist/features/consultation/components/index.d.ts +1 -0
  665. package/dist/features/consultation/components/index.js +1 -0
  666. package/dist/features/consultation/hooks/useBookConsultation.d.ts +8 -0
  667. package/dist/features/consultation/hooks/useBookConsultation.js +16 -0
  668. package/dist/features/consultation/index.d.ts +6 -172
  669. package/dist/features/consultation/index.js +6 -1084
  670. package/dist/features/consultation/manifest.d.ts +2 -0
  671. package/dist/features/consultation/manifest.js +12 -0
  672. package/dist/features/consultation/messages/en.json +25 -0
  673. package/dist/features/consultation/repository/consultations.repository.d.ts +12 -0
  674. package/dist/features/consultation/repository/consultations.repository.js +28 -0
  675. package/dist/features/consultation/schemas/index.d.ts +87 -0
  676. package/dist/features/consultation/schemas/index.js +47 -0
  677. package/dist/features/consultation/server.d.ts +7 -0
  678. package/dist/features/consultation/server.js +7 -0
  679. package/dist/features/consultation/types/index.d.ts +33 -0
  680. package/dist/features/consultation/types/index.js +1 -0
  681. package/dist/features/contact/components/ContactForm.d.ts +32 -0
  682. package/dist/features/contact/components/ContactForm.js +58 -0
  683. package/dist/features/contact/components/ContactInfoSidebar.d.ts +20 -0
  684. package/dist/features/contact/components/ContactInfoSidebar.js +6 -0
  685. package/dist/features/contact/components/index.d.ts +4 -0
  686. package/dist/features/contact/components/index.js +2 -0
  687. package/dist/features/contact/email.d.ts +61 -0
  688. package/dist/features/contact/email.js +345 -0
  689. package/dist/features/contact/hooks/useContactSubmit.d.ts +4 -0
  690. package/dist/features/contact/hooks/useContactSubmit.js +7 -0
  691. package/dist/features/contact/index.d.ts +2 -56
  692. package/dist/features/contact/index.js +2 -586
  693. package/dist/features/contact/server.d.ts +7 -0
  694. package/dist/features/contact/server.js +7 -0
  695. package/dist/features/copilot/components/AdminCopilotView.d.ts +21 -0
  696. package/dist/features/copilot/components/AdminCopilotView.js +29 -0
  697. package/dist/features/copilot/components/index.d.ts +2 -0
  698. package/dist/features/copilot/components/index.js +1 -0
  699. package/dist/features/copilot/hooks/useCopilotChat.d.ts +22 -0
  700. package/dist/features/copilot/hooks/useCopilotChat.js +57 -0
  701. package/dist/features/copilot/hooks/useCopilotFeedback.d.ts +15 -0
  702. package/dist/features/copilot/hooks/useCopilotFeedback.js +16 -0
  703. package/dist/features/copilot/index.d.ts +3 -47
  704. package/dist/features/copilot/index.js +3 -681
  705. package/dist/features/corporate/api/[id]/route.d.ts +26 -0
  706. package/dist/features/corporate/api/[id]/route.js +88 -0
  707. package/dist/features/corporate/api/route.d.ts +13 -0
  708. package/dist/features/corporate/api/route.js +79 -0
  709. package/dist/features/corporate/columns/index.d.ts +17 -0
  710. package/dist/features/corporate/columns/index.js +54 -0
  711. package/dist/features/corporate/components/CorporateInquiryForm.d.ts +7 -0
  712. package/dist/features/corporate/components/CorporateInquiryForm.js +36 -0
  713. package/dist/features/corporate/components/index.d.ts +1 -0
  714. package/dist/features/corporate/components/index.js +1 -0
  715. package/dist/features/corporate/hooks/useSubmitCorporateInquiry.d.ts +8 -0
  716. package/dist/features/corporate/hooks/useSubmitCorporateInquiry.js +16 -0
  717. package/dist/features/corporate/index.d.ts +6 -183
  718. package/dist/features/corporate/index.js +6 -782
  719. package/dist/features/corporate/manifest.d.ts +2 -0
  720. package/dist/features/corporate/manifest.js +12 -0
  721. package/dist/features/corporate/messages/en.json +26 -0
  722. package/dist/features/corporate/repository/corporate.repository.d.ts +12 -0
  723. package/dist/features/corporate/repository/corporate.repository.js +28 -0
  724. package/dist/features/corporate/schemas/index.d.ts +95 -0
  725. package/dist/features/corporate/schemas/index.js +50 -0
  726. package/dist/features/corporate/server.d.ts +7 -0
  727. package/dist/features/corporate/server.js +7 -0
  728. package/dist/features/corporate/types/index.d.ts +37 -0
  729. package/dist/features/corporate/types/index.js +1 -0
  730. package/dist/features/cron/firebase-adapters.d.ts +70 -0
  731. package/dist/features/cron/firebase-adapters.js +68 -0
  732. package/dist/features/cron/index.d.ts +5 -0
  733. package/dist/features/cron/index.js +7 -0
  734. package/dist/features/cron/jobs/auction-expiry.job.d.ts +27 -0
  735. package/dist/features/cron/jobs/auction-expiry.job.js +38 -0
  736. package/dist/features/cron/jobs/preorder-reminder.job.d.ts +14 -0
  737. package/dist/features/cron/jobs/preorder-reminder.job.js +40 -0
  738. package/dist/features/cron/registry.d.ts +45 -0
  739. package/dist/features/cron/registry.js +86 -0
  740. package/dist/features/cron/types.d.ts +66 -0
  741. package/dist/features/cron/types.js +9 -0
  742. package/dist/features/events/actions/event-actions.d.ts +92 -0
  743. package/dist/features/events/actions/event-actions.js +253 -0
  744. package/dist/features/events/actions/index.d.ts +1 -0
  745. package/dist/features/events/actions/index.js +1 -0
  746. package/dist/features/events/api/[id]/route.d.ts +24 -0
  747. package/dist/features/events/api/[id]/route.js +83 -0
  748. package/dist/features/events/api/route.d.ts +12 -0
  749. package/dist/features/events/api/route.js +88 -0
  750. package/dist/features/events/columns/index.d.ts +22 -0
  751. package/dist/features/events/columns/index.js +41 -0
  752. package/dist/features/events/components/AdminEventEntriesView.d.ts +17 -0
  753. package/dist/features/events/components/AdminEventEntriesView.js +10 -0
  754. package/dist/features/events/components/AdminEventsView.d.ts +11 -0
  755. package/dist/features/events/components/AdminEventsView.js +5 -0
  756. package/dist/features/events/components/EventBanner.d.ts +13 -0
  757. package/dist/features/events/components/EventBanner.js +48 -0
  758. package/dist/features/events/components/EventCard.d.ts +13 -0
  759. package/dist/features/events/components/EventCard.js +21 -0
  760. package/dist/features/events/components/EventDetailView.d.ts +15 -0
  761. package/dist/features/events/components/EventDetailView.js +11 -0
  762. package/dist/features/events/components/EventFilters.d.ts +105 -0
  763. package/dist/features/events/components/EventFilters.js +73 -0
  764. package/dist/features/events/components/EventFormDrawer.d.ts +22 -0
  765. package/dist/features/events/components/EventFormDrawer.js +6 -0
  766. package/dist/features/events/components/EventLeaderboard.d.ts +23 -0
  767. package/dist/features/events/components/EventLeaderboard.js +18 -0
  768. package/dist/features/events/components/EventParticipateView.d.ts +19 -0
  769. package/dist/features/events/components/EventParticipateView.js +13 -0
  770. package/dist/features/events/components/EventStatusBadge.d.ts +7 -0
  771. package/dist/features/events/components/EventStatusBadge.js +12 -0
  772. package/dist/features/events/components/EventsListView.d.ts +16 -0
  773. package/dist/features/events/components/EventsListView.js +21 -0
  774. package/dist/features/events/components/index.d.ts +19 -0
  775. package/dist/features/events/components/index.js +11 -0
  776. package/dist/features/events/hooks/useBulkEvent.d.ts +19 -0
  777. package/dist/features/events/hooks/useBulkEvent.js +36 -0
  778. package/dist/features/events/hooks/useEvent.d.ts +43 -0
  779. package/dist/features/events/hooks/useEvent.js +55 -0
  780. package/dist/features/events/hooks/useEvents.d.ts +27 -0
  781. package/dist/features/events/hooks/useEvents.js +38 -0
  782. package/dist/features/events/index.d.ts +8 -841
  783. package/dist/features/events/index.js +8 -1453
  784. package/dist/features/events/manifest.d.ts +2 -0
  785. package/dist/features/events/manifest.js +24 -0
  786. package/dist/features/events/messages/en.json +28 -0
  787. package/dist/features/events/repository/event-entry.repository.d.ts +17 -0
  788. package/dist/features/events/repository/event-entry.repository.js +115 -0
  789. package/dist/features/events/repository/events.repository.d.ts +18 -0
  790. package/dist/features/events/repository/events.repository.js +128 -0
  791. package/dist/features/events/schemas/firestore.d.ts +115 -0
  792. package/dist/features/events/schemas/firestore.js +77 -0
  793. package/dist/features/events/schemas/index.d.ts +383 -0
  794. package/dist/features/events/schemas/index.js +87 -0
  795. package/dist/features/events/server.d.ts +8 -37
  796. package/dist/features/events/server.js +11 -195
  797. package/dist/features/events/types/index.d.ts +133 -0
  798. package/dist/features/events/types/index.js +1 -0
  799. package/dist/features/faq/actions/faq-actions.d.ts +191 -0
  800. package/dist/features/faq/actions/faq-actions.js +103 -0
  801. package/dist/features/faq/actions/index.d.ts +1 -0
  802. package/dist/features/faq/actions/index.js +1 -0
  803. package/dist/features/faq/api/route.d.ts +11 -0
  804. package/dist/features/faq/api/route.js +50 -0
  805. package/dist/features/faq/columns/index.d.ts +15 -0
  806. package/dist/features/faq/columns/index.js +47 -0
  807. package/dist/features/faq/components/ContactCTA.d.ts +16 -0
  808. package/dist/features/faq/components/ContactCTA.js +6 -0
  809. package/dist/features/faq/components/FAQAccordion.d.ts +20 -0
  810. package/dist/features/faq/components/FAQAccordion.js +17 -0
  811. package/dist/features/faq/components/FAQCategorySidebar.d.ts +24 -0
  812. package/dist/features/faq/components/FAQCategorySidebar.js +15 -0
  813. package/dist/features/faq/components/FAQHelpfulButtons.d.ts +19 -0
  814. package/dist/features/faq/components/FAQHelpfulButtons.js +46 -0
  815. package/dist/features/faq/components/FAQPageContent.d.ts +54 -0
  816. package/dist/features/faq/components/FAQPageContent.js +67 -0
  817. package/dist/features/faq/components/FAQSortDropdown.d.ts +13 -0
  818. package/dist/features/faq/components/FAQSortDropdown.js +11 -0
  819. package/dist/features/faq/components/RelatedFAQs.d.ts +10 -0
  820. package/dist/features/faq/components/RelatedFAQs.js +9 -0
  821. package/dist/features/faq/components/index.d.ts +9 -0
  822. package/dist/features/faq/components/index.js +7 -0
  823. package/dist/features/faq/hooks/useFAQs.d.ts +22 -0
  824. package/dist/features/faq/hooks/useFAQs.js +42 -0
  825. package/dist/features/faq/hooks/useFaqList.d.ts +194 -0
  826. package/dist/features/faq/hooks/useFaqList.js +35 -0
  827. package/dist/features/faq/hooks/useFaqVote.d.ts +14 -0
  828. package/dist/features/faq/hooks/useFaqVote.js +10 -0
  829. package/dist/features/faq/index.d.ts +8 -619
  830. package/dist/features/faq/index.js +8 -1685
  831. package/dist/features/faq/manifest.d.ts +2 -0
  832. package/dist/features/faq/manifest.js +10 -0
  833. package/dist/features/faq/messages/en.json +14 -0
  834. package/dist/features/faq/repository/faqs.repository.d.ts +43 -0
  835. package/dist/features/faq/repository/faqs.repository.js +300 -0
  836. package/dist/features/faq/schemas/firestore.d.ts +63 -0
  837. package/dist/features/faq/schemas/firestore.js +115 -0
  838. package/dist/features/faq/schemas/index.d.ts +157 -0
  839. package/dist/features/faq/schemas/index.js +62 -0
  840. package/dist/features/faq/server.d.ts +9 -0
  841. package/dist/features/faq/server.js +9 -0
  842. package/dist/features/faq/types/index.d.ts +52 -0
  843. package/dist/features/faq/types/index.js +1 -0
  844. package/dist/features/filters/FilterFacetSection.d.ts +23 -0
  845. package/dist/features/filters/FilterFacetSection.js +39 -0
  846. package/dist/features/filters/FilterPanel.d.ts +61 -0
  847. package/dist/features/filters/FilterPanel.js +40 -0
  848. package/dist/features/filters/RangeFilter.d.ts +23 -0
  849. package/dist/features/filters/RangeFilter.js +28 -0
  850. package/dist/features/filters/SwitchFilter.d.ts +12 -0
  851. package/dist/features/filters/SwitchFilter.js +19 -0
  852. package/dist/features/filters/filterUtils.d.ts +11 -0
  853. package/dist/features/filters/filterUtils.js +13 -0
  854. package/dist/features/filters/index.d.ts +10 -136
  855. package/dist/features/filters/index.js +6 -1061
  856. package/dist/features/forms/Checkbox.d.ts +8 -0
  857. package/dist/features/forms/Checkbox.js +15 -0
  858. package/dist/features/forms/Form.d.ts +25 -0
  859. package/dist/features/forms/Form.js +38 -0
  860. package/dist/features/forms/Input.d.ts +10 -0
  861. package/dist/features/forms/Input.js +23 -0
  862. package/dist/features/forms/Radio.d.ts +17 -0
  863. package/dist/features/forms/Radio.js +19 -0
  864. package/dist/features/forms/Select.d.ts +13 -0
  865. package/dist/features/forms/Select.js +8 -0
  866. package/dist/features/forms/Slider.d.ts +20 -0
  867. package/dist/features/forms/Slider.js +22 -0
  868. package/dist/features/forms/Textarea.d.ts +8 -0
  869. package/dist/features/forms/Textarea.js +15 -0
  870. package/dist/features/forms/Toggle.d.ts +15 -0
  871. package/dist/features/forms/Toggle.js +48 -0
  872. package/dist/features/forms/index.d.ts +17 -129
  873. package/dist/features/forms/index.js +11 -915
  874. package/dist/features/forms/utils.d.ts +10 -0
  875. package/dist/features/forms/utils.js +13 -0
  876. package/dist/features/homepage/actions/carousel-actions.d.ts +37 -0
  877. package/dist/features/homepage/actions/carousel-actions.js +54 -0
  878. package/dist/features/homepage/actions/homepage-section-actions.d.ts +46 -0
  879. package/dist/features/homepage/actions/homepage-section-actions.js +55 -0
  880. package/dist/features/homepage/actions/index.d.ts +2 -0
  881. package/dist/features/homepage/actions/index.js +2 -0
  882. package/dist/features/homepage/api/[id]/route.d.ts +23 -0
  883. package/dist/features/homepage/api/[id]/route.js +100 -0
  884. package/dist/features/homepage/api/carousel/[id]/route.d.ts +23 -0
  885. package/dist/features/homepage/api/carousel/[id]/route.js +122 -0
  886. package/dist/features/homepage/api/carousel/route.d.ts +15 -0
  887. package/dist/features/homepage/api/carousel/route.js +154 -0
  888. package/dist/features/homepage/api/route.d.ts +14 -0
  889. package/dist/features/homepage/api/route.js +136 -0
  890. package/dist/features/homepage/api/sections/[id]/route.d.ts +26 -0
  891. package/dist/features/homepage/api/sections/[id]/route.js +88 -0
  892. package/dist/features/homepage/api/sections/route.d.ts +13 -0
  893. package/dist/features/homepage/api/sections/route.js +79 -0
  894. package/dist/features/homepage/components/AdvertisementBanner.d.ts +13 -0
  895. package/dist/features/homepage/components/AdvertisementBanner.js +23 -0
  896. package/dist/features/homepage/components/BeforeAfterCard.d.ts +10 -0
  897. package/dist/features/homepage/components/BeforeAfterCard.js +54 -0
  898. package/dist/features/homepage/components/CharacterHotspot.d.ts +24 -0
  899. package/dist/features/homepage/components/CharacterHotspot.js +373 -0
  900. package/dist/features/homepage/components/CharacterHotspotForm.d.ts +26 -0
  901. package/dist/features/homepage/components/CharacterHotspotForm.js +309 -0
  902. package/dist/features/homepage/components/CustomerReviewsSection.d.ts +13 -0
  903. package/dist/features/homepage/components/CustomerReviewsSection.js +14 -0
  904. package/dist/features/homepage/components/FAQSection.d.ts +26 -0
  905. package/dist/features/homepage/components/FAQSection.js +20 -0
  906. package/dist/features/homepage/components/FeaturedResultsSection.d.ts +17 -0
  907. package/dist/features/homepage/components/FeaturedResultsSection.js +18 -0
  908. package/dist/features/homepage/components/HeroBanner.d.ts +7 -0
  909. package/dist/features/homepage/components/HeroBanner.js +93 -0
  910. package/dist/features/homepage/components/HeroCarousel.d.ts +12 -0
  911. package/dist/features/homepage/components/HeroCarousel.js +157 -0
  912. package/dist/features/homepage/components/HeroSection.d.ts +7 -0
  913. package/dist/features/homepage/components/HeroSection.js +12 -0
  914. package/dist/features/homepage/components/HomepageSkeleton.d.ts +2 -0
  915. package/dist/features/homepage/components/HomepageSkeleton.js +14 -0
  916. package/dist/features/homepage/components/HomepageView.d.ts +25 -0
  917. package/dist/features/homepage/components/HomepageView.js +5 -0
  918. package/dist/features/homepage/components/HowItWorksInfoView.d.ts +36 -0
  919. package/dist/features/homepage/components/HowItWorksInfoView.js +8 -0
  920. package/dist/features/homepage/components/HowItWorksSection.d.ts +23 -0
  921. package/dist/features/homepage/components/HowItWorksSection.js +36 -0
  922. package/dist/features/homepage/components/NewsletterBanner.d.ts +22 -0
  923. package/dist/features/homepage/components/NewsletterBanner.js +34 -0
  924. package/dist/features/homepage/components/NewsletterSection.d.ts +10 -0
  925. package/dist/features/homepage/components/NewsletterSection.js +8 -0
  926. package/dist/features/homepage/components/PromoGrid.d.ts +9 -0
  927. package/dist/features/homepage/components/PromoGrid.js +35 -0
  928. package/dist/features/homepage/components/SectionCarousel.d.ts +75 -0
  929. package/dist/features/homepage/components/SectionCarousel.js +39 -0
  930. package/dist/features/homepage/components/SecurityHighlightsSection.d.ts +21 -0
  931. package/dist/features/homepage/components/SecurityHighlightsSection.js +36 -0
  932. package/dist/features/homepage/components/SiteFeaturesSection.d.ts +13 -0
  933. package/dist/features/homepage/components/SiteFeaturesSection.js +9 -0
  934. package/dist/features/homepage/components/StatsCounterSection.d.ts +14 -0
  935. package/dist/features/homepage/components/StatsCounterSection.js +32 -0
  936. package/dist/features/homepage/components/TestimonialsCarousel.d.ts +9 -0
  937. package/dist/features/homepage/components/TestimonialsCarousel.js +30 -0
  938. package/dist/features/homepage/components/TrustBadges.d.ts +5 -0
  939. package/dist/features/homepage/components/TrustBadges.js +54 -0
  940. package/dist/features/homepage/components/TrustFeaturesSection.d.ts +16 -0
  941. package/dist/features/homepage/components/TrustFeaturesSection.js +41 -0
  942. package/dist/features/homepage/components/TrustIndicatorsSection.d.ts +11 -0
  943. package/dist/features/homepage/components/TrustIndicatorsSection.js +9 -0
  944. package/dist/features/homepage/components/WelcomeSection.d.ts +20 -0
  945. package/dist/features/homepage/components/WelcomeSection.js +12 -0
  946. package/dist/features/homepage/components/WhatsAppCommunitySection.d.ts +15 -0
  947. package/dist/features/homepage/components/WhatsAppCommunitySection.js +21 -0
  948. package/dist/features/homepage/components/index.d.ts +52 -0
  949. package/dist/features/homepage/components/index.js +27 -0
  950. package/dist/features/homepage/hooks/useBlogArticles.d.ts +12 -0
  951. package/dist/features/homepage/hooks/useBlogArticles.js +31 -0
  952. package/dist/features/homepage/hooks/useFeaturedAuctions.d.ts +2 -0
  953. package/dist/features/homepage/hooks/useFeaturedAuctions.js +26 -0
  954. package/dist/features/homepage/hooks/useFeaturedPreOrders.d.ts +2 -0
  955. package/dist/features/homepage/hooks/useFeaturedPreOrders.js +26 -0
  956. package/dist/features/homepage/hooks/useFeaturedProducts.d.ts +4 -0
  957. package/dist/features/homepage/hooks/useFeaturedProducts.js +32 -0
  958. package/dist/features/homepage/hooks/useHeroCarousel.d.ts +9 -0
  959. package/dist/features/homepage/hooks/useHeroCarousel.js +17 -0
  960. package/dist/features/homepage/hooks/useHomepage.d.ts +11 -0
  961. package/dist/features/homepage/hooks/useHomepage.js +18 -0
  962. package/dist/features/homepage/hooks/useHomepageReviews.d.ts +7 -0
  963. package/dist/features/homepage/hooks/useHomepageReviews.js +16 -0
  964. package/dist/features/homepage/hooks/useHomepageSections.d.ts +2 -0
  965. package/dist/features/homepage/hooks/useHomepageSections.js +11 -0
  966. package/dist/features/homepage/hooks/useNewsletter.d.ts +14 -0
  967. package/dist/features/homepage/hooks/useNewsletter.js +10 -0
  968. package/dist/features/homepage/hooks/useTopBrands.d.ts +2 -0
  969. package/dist/features/homepage/hooks/useTopBrands.js +12 -0
  970. package/dist/features/homepage/hooks/useTopCategories.d.ts +4 -0
  971. package/dist/features/homepage/hooks/useTopCategories.js +13 -0
  972. package/dist/features/homepage/index.d.ts +13 -846
  973. package/dist/features/homepage/index.js +13 -6279
  974. package/dist/features/homepage/manifest.d.ts +2 -0
  975. package/dist/features/homepage/manifest.js +14 -0
  976. package/dist/features/homepage/messages/en.json +6 -0
  977. package/dist/features/homepage/repository/carousel.repository.d.ts +101 -0
  978. package/dist/features/homepage/repository/carousel.repository.js +252 -0
  979. package/dist/features/homepage/repository/homepage-sections.repository.d.ts +27 -0
  980. package/dist/features/homepage/repository/homepage-sections.repository.js +174 -0
  981. package/dist/features/homepage/repository/homepage.repository.d.ts +11 -0
  982. package/dist/features/homepage/repository/homepage.repository.js +25 -0
  983. package/dist/features/homepage/schemas/firestore.d.ts +251 -0
  984. package/dist/features/homepage/schemas/firestore.js +83 -0
  985. package/dist/features/homepage/schemas/index.d.ts +1 -0
  986. package/dist/features/homepage/schemas/index.js +1 -0
  987. package/dist/features/homepage/server.d.ts +10 -121
  988. package/dist/features/homepage/server.js +10 -1024
  989. package/dist/features/homepage/types/index.d.ts +163 -0
  990. package/dist/features/homepage/types/index.js +1 -0
  991. package/dist/features/layout/AutoBreadcrumbs.d.ts +15 -0
  992. package/dist/features/layout/AutoBreadcrumbs.js +84 -0
  993. package/dist/features/layout/BackToTop.d.ts +16 -0
  994. package/dist/features/layout/BackToTop.js +26 -0
  995. package/dist/features/layout/BottomActions.d.ts +1 -0
  996. package/dist/features/layout/BottomActions.js +153 -0
  997. package/dist/features/layout/BottomActionsContext.d.ts +107 -0
  998. package/dist/features/layout/BottomActionsContext.js +114 -0
  999. package/dist/features/layout/BottomNavItem.d.ts +28 -0
  1000. package/dist/features/layout/BottomNavItem.js +28 -0
  1001. package/dist/features/layout/BottomNavLayout.d.ts +14 -0
  1002. package/dist/features/layout/BottomNavLayout.js +12 -0
  1003. package/dist/features/layout/BottomNavbar.d.ts +46 -0
  1004. package/dist/features/layout/BottomNavbar.js +19 -0
  1005. package/dist/features/layout/BottomSheet.d.ts +29 -0
  1006. package/dist/features/layout/BottomSheet.js +40 -0
  1007. package/dist/features/layout/Breadcrumbs.d.ts +26 -0
  1008. package/dist/features/layout/Breadcrumbs.js +25 -0
  1009. package/dist/features/layout/DashboardNavContext.d.ts +19 -0
  1010. package/dist/features/layout/DashboardNavContext.js +36 -0
  1011. package/dist/features/layout/FooterLayout.d.ts +39 -0
  1012. package/dist/features/layout/FooterLayout.js +12 -0
  1013. package/dist/features/layout/LayoutClient.d.ts +11 -0
  1014. package/dist/features/layout/LayoutClient.js +7 -0
  1015. package/dist/features/layout/ListingLayout.d.ts +35 -0
  1016. package/dist/features/layout/ListingLayout.js +104 -0
  1017. package/dist/features/layout/LocaleSwitcher.d.ts +22 -0
  1018. package/dist/features/layout/LocaleSwitcher.js +12 -0
  1019. package/dist/features/layout/MainNavbar.d.ts +32 -0
  1020. package/dist/features/layout/MainNavbar.js +29 -0
  1021. package/dist/features/layout/NavItem.d.ts +19 -0
  1022. package/dist/features/layout/NavItem.js +35 -0
  1023. package/dist/features/layout/NavbarLayout.d.ts +27 -0
  1024. package/dist/features/layout/NavbarLayout.js +23 -0
  1025. package/dist/features/layout/SidebarLayout.d.ts +24 -0
  1026. package/dist/features/layout/SidebarLayout.js +29 -0
  1027. package/dist/features/layout/TitleBar.d.ts +18 -0
  1028. package/dist/features/layout/TitleBar.js +19 -0
  1029. package/dist/features/layout/TitleBarLayout.d.ts +48 -0
  1030. package/dist/features/layout/TitleBarLayout.js +17 -0
  1031. package/dist/features/layout/hooks/useBottomActions.d.ts +7 -0
  1032. package/dist/features/layout/hooks/useBottomActions.js +28 -0
  1033. package/dist/features/layout/index.d.ts +41 -315
  1034. package/dist/features/layout/index.js +23 -1745
  1035. package/dist/features/loyalty/api/admin/loyalty/grant/route.d.ts +12 -0
  1036. package/dist/features/loyalty/api/admin/loyalty/grant/route.js +36 -0
  1037. package/dist/features/loyalty/api/balance/route.d.ts +12 -0
  1038. package/dist/features/loyalty/api/balance/route.js +39 -0
  1039. package/dist/features/loyalty/api/earn/route.d.ts +12 -0
  1040. package/dist/features/loyalty/api/earn/route.js +36 -0
  1041. package/dist/features/loyalty/api/history/route.d.ts +12 -0
  1042. package/dist/features/loyalty/api/history/route.js +56 -0
  1043. package/dist/features/loyalty/api/redeem/route.d.ts +12 -0
  1044. package/dist/features/loyalty/api/redeem/route.js +36 -0
  1045. package/dist/features/loyalty/columns/index.d.ts +17 -0
  1046. package/dist/features/loyalty/columns/index.js +40 -0
  1047. package/dist/features/loyalty/components/CoinsDisplay.d.ts +11 -0
  1048. package/dist/features/loyalty/components/CoinsDisplay.js +9 -0
  1049. package/dist/features/loyalty/components/index.d.ts +1 -0
  1050. package/dist/features/loyalty/components/index.js +1 -0
  1051. package/dist/features/loyalty/hooks/useLoyaltyBalance.d.ts +4 -0
  1052. package/dist/features/loyalty/hooks/useLoyaltyBalance.js +18 -0
  1053. package/dist/features/loyalty/index.d.ts +6 -174
  1054. package/dist/features/loyalty/index.js +6 -332
  1055. package/dist/features/loyalty/manifest.d.ts +2 -0
  1056. package/dist/features/loyalty/manifest.js +16 -0
  1057. package/dist/features/loyalty/messages/en.json +19 -0
  1058. package/dist/features/loyalty/repository/loyalty.repository.d.ts +8 -0
  1059. package/dist/features/loyalty/repository/loyalty.repository.js +22 -0
  1060. package/dist/features/loyalty/schemas/index.d.ts +85 -0
  1061. package/dist/features/loyalty/schemas/index.js +40 -0
  1062. package/dist/features/loyalty/server.d.ts +7 -0
  1063. package/dist/features/loyalty/server.js +7 -0
  1064. package/dist/features/loyalty/types/index.d.ts +31 -0
  1065. package/dist/features/loyalty/types/index.js +1 -0
  1066. package/dist/features/loyalty/types/loyalty-config.d.ts +7 -0
  1067. package/dist/features/loyalty/types/loyalty-config.js +1 -0
  1068. package/dist/features/loyalty/types/loyalty-math.d.ts +9 -0
  1069. package/dist/features/loyalty/types/loyalty-math.js +27 -0
  1070. package/dist/features/media/AvatarUpload.d.ts +22 -0
  1071. package/dist/features/media/AvatarUpload.js +133 -0
  1072. package/dist/features/media/MediaAvatar.d.ts +12 -0
  1073. package/dist/features/media/MediaAvatar.js +13 -0
  1074. package/dist/features/media/MediaImage.d.ts +28 -0
  1075. package/dist/features/media/MediaImage.js +35 -0
  1076. package/dist/features/media/MediaLightbox.d.ts +32 -0
  1077. package/dist/features/media/MediaLightbox.js +245 -0
  1078. package/dist/features/media/MediaVideo.d.ts +22 -0
  1079. package/dist/features/media/MediaVideo.js +38 -0
  1080. package/dist/features/media/components/MediaSlider.d.ts +10 -0
  1081. package/dist/features/media/components/MediaSlider.js +12 -0
  1082. package/dist/features/media/finalize.d.ts +11 -0
  1083. package/dist/features/media/finalize.js +70 -0
  1084. package/dist/features/media/hooks/useMedia.d.ts +198 -0
  1085. package/dist/features/media/hooks/useMedia.js +78 -0
  1086. package/dist/features/media/index.d.ts +30 -425
  1087. package/dist/features/media/index.js +21 -3593
  1088. package/dist/features/media/messages/en.json +63 -0
  1089. package/dist/features/media/modals/ImageCropModal.d.ts +16 -0
  1090. package/dist/features/media/modals/ImageCropModal.js +99 -0
  1091. package/dist/features/media/modals/VideoThumbnailSelector.d.ts +10 -0
  1092. package/dist/features/media/modals/VideoThumbnailSelector.js +51 -0
  1093. package/dist/features/media/modals/VideoTrimModal.d.ts +11 -0
  1094. package/dist/features/media/modals/VideoTrimModal.js +73 -0
  1095. package/dist/features/media/server.d.ts +2 -0
  1096. package/dist/features/media/server.js +2 -0
  1097. package/dist/features/media/types/index.d.ts +29 -0
  1098. package/dist/features/media/types/index.js +43 -0
  1099. package/dist/features/media/upload/CameraCapture.d.ts +8 -0
  1100. package/dist/features/media/upload/CameraCapture.js +59 -0
  1101. package/dist/features/media/upload/ImageUpload.d.ts +14 -0
  1102. package/dist/features/media/upload/ImageUpload.js +132 -0
  1103. package/dist/features/media/upload/MediaUploadField.d.ts +31 -0
  1104. package/dist/features/media/upload/MediaUploadField.js +204 -0
  1105. package/dist/features/media/upload/MediaUploadList.d.ts +26 -0
  1106. package/dist/features/media/upload/MediaUploadList.js +104 -0
  1107. package/dist/features/orders/actions/index.d.ts +2 -0
  1108. package/dist/features/orders/actions/index.js +2 -0
  1109. package/dist/features/orders/actions/order-actions.d.ts +16 -0
  1110. package/dist/features/orders/actions/order-actions.js +46 -0
  1111. package/dist/features/orders/actions/refund-actions.d.ts +16 -0
  1112. package/dist/features/orders/actions/refund-actions.js +88 -0
  1113. package/dist/features/orders/api/track/[trackingId]/route.d.ts +17 -0
  1114. package/dist/features/orders/api/track/[trackingId]/route.js +30 -0
  1115. package/dist/features/orders/columns/index.d.ts +15 -0
  1116. package/dist/features/orders/columns/index.js +34 -0
  1117. package/dist/features/orders/components/MarketplaceOrderCard.d.ts +37 -0
  1118. package/dist/features/orders/components/MarketplaceOrderCard.js +52 -0
  1119. package/dist/features/orders/components/OrderFilters.d.ts +82 -0
  1120. package/dist/features/orders/components/OrderFilters.js +106 -0
  1121. package/dist/features/orders/components/OrdersList.d.ts +18 -0
  1122. package/dist/features/orders/components/OrdersList.js +37 -0
  1123. package/dist/features/orders/components/index.d.ts +4 -0
  1124. package/dist/features/orders/components/index.js +3 -0
  1125. package/dist/features/orders/hooks/useOrders.d.ts +32 -0
  1126. package/dist/features/orders/hooks/useOrders.js +57 -0
  1127. package/dist/features/orders/index.d.ts +7 -370
  1128. package/dist/features/orders/index.js +7 -863
  1129. package/dist/features/orders/manifest.d.ts +2 -0
  1130. package/dist/features/orders/manifest.js +18 -0
  1131. package/dist/features/orders/messages/en.json +15 -0
  1132. package/dist/features/orders/repository/orders.repository.d.ts +188 -0
  1133. package/dist/features/orders/repository/orders.repository.js +300 -0
  1134. package/dist/features/orders/schemas/firestore.d.ts +129 -0
  1135. package/dist/features/orders/schemas/firestore.js +96 -0
  1136. package/dist/features/orders/schemas/index.d.ts +217 -0
  1137. package/dist/features/orders/schemas/index.js +76 -0
  1138. package/dist/features/orders/server.d.ts +9 -0
  1139. package/dist/features/orders/server.js +10 -0
  1140. package/dist/features/orders/types/index.d.ts +69 -0
  1141. package/dist/features/orders/types/index.js +2 -0
  1142. package/dist/features/orders/utils/order-splitter.d.ts +14 -0
  1143. package/dist/features/orders/utils/order-splitter.js +29 -0
  1144. package/dist/features/payments/columns/index.d.ts +17 -0
  1145. package/dist/features/payments/columns/index.js +45 -0
  1146. package/dist/features/payments/hooks/usePaymentEvent.d.ts +17 -0
  1147. package/dist/features/payments/hooks/usePaymentEvent.js +26 -0
  1148. package/dist/features/payments/hooks/usePayments.d.ts +10 -0
  1149. package/dist/features/payments/hooks/usePayments.js +19 -0
  1150. package/dist/features/payments/index.d.ts +6 -141
  1151. package/dist/features/payments/index.js +6 -331
  1152. package/dist/features/payments/manifest.d.ts +2 -0
  1153. package/dist/features/payments/manifest.js +12 -0
  1154. package/dist/features/payments/messages/en.json +11 -0
  1155. package/dist/features/payments/repository/payments.repository.d.ts +15 -0
  1156. package/dist/features/payments/repository/payments.repository.js +36 -0
  1157. package/dist/features/payments/repository/payout.repository.d.ts +111 -0
  1158. package/dist/features/payments/repository/payout.repository.js +202 -0
  1159. package/dist/features/payments/schemas/firestore.d.ts +74 -0
  1160. package/dist/features/payments/schemas/firestore.js +65 -0
  1161. package/dist/features/payments/schemas/index.d.ts +77 -0
  1162. package/dist/features/payments/schemas/index.js +67 -0
  1163. package/dist/features/payments/server.d.ts +8 -0
  1164. package/dist/features/payments/server.js +8 -0
  1165. package/dist/features/payments/types/index.d.ts +36 -0
  1166. package/dist/features/payments/types/index.js +2 -0
  1167. package/dist/features/pre-orders/api/[id]/route.d.ts +26 -0
  1168. package/dist/features/pre-orders/api/[id]/route.js +88 -0
  1169. package/dist/features/pre-orders/api/[slug]/route.d.ts +16 -0
  1170. package/dist/features/pre-orders/api/[slug]/route.js +41 -0
  1171. package/dist/features/pre-orders/api/admin/[id]/route.d.ts +21 -0
  1172. package/dist/features/pre-orders/api/admin/[id]/route.js +65 -0
  1173. package/dist/features/pre-orders/api/admin/route.d.ts +12 -0
  1174. package/dist/features/pre-orders/api/admin/route.js +56 -0
  1175. package/dist/features/pre-orders/api/route.d.ts +13 -0
  1176. package/dist/features/pre-orders/api/route.js +77 -0
  1177. package/dist/features/pre-orders/columns/index.d.ts +17 -0
  1178. package/dist/features/pre-orders/columns/index.js +68 -0
  1179. package/dist/features/pre-orders/components/MarketplacePreorderCard.d.ts +24 -0
  1180. package/dist/features/pre-orders/components/MarketplacePreorderCard.js +53 -0
  1181. package/dist/features/pre-orders/components/PreOrderBadge.d.ts +14 -0
  1182. package/dist/features/pre-orders/components/PreOrderBadge.js +17 -0
  1183. package/dist/features/pre-orders/components/PreorderCard.d.ts +12 -0
  1184. package/dist/features/pre-orders/components/PreorderCard.js +27 -0
  1185. package/dist/features/pre-orders/components/index.d.ts +2 -0
  1186. package/dist/features/pre-orders/components/index.js +2 -0
  1187. package/dist/features/pre-orders/hooks/usePreOrders.d.ts +7 -0
  1188. package/dist/features/pre-orders/hooks/usePreOrders.js +34 -0
  1189. package/dist/features/pre-orders/index.d.ts +6 -170
  1190. package/dist/features/pre-orders/index.js +6 -538
  1191. package/dist/features/pre-orders/manifest.d.ts +2 -0
  1192. package/dist/features/pre-orders/manifest.js +17 -0
  1193. package/dist/features/pre-orders/messages/en.json +13 -0
  1194. package/dist/features/pre-orders/repository/pre-orders.repository.d.ts +14 -0
  1195. package/dist/features/pre-orders/repository/pre-orders.repository.js +44 -0
  1196. package/dist/features/pre-orders/repository/preorders.repository.d.ts +8 -0
  1197. package/dist/features/pre-orders/repository/preorders.repository.js +21 -0
  1198. package/dist/features/pre-orders/schemas/index.d.ts +79 -0
  1199. package/dist/features/pre-orders/schemas/index.js +27 -0
  1200. package/dist/features/pre-orders/server.d.ts +5 -14
  1201. package/dist/features/pre-orders/server.js +8 -106
  1202. package/dist/features/pre-orders/types/index.d.ts +29 -0
  1203. package/dist/features/pre-orders/types/index.js +12 -0
  1204. package/dist/features/products/actions/index.d.ts +1 -0
  1205. package/dist/features/products/actions/index.js +1 -0
  1206. package/dist/features/products/actions/product-actions.d.ts +26 -0
  1207. package/dist/features/products/actions/product-actions.js +111 -0
  1208. package/dist/features/products/api/[id]/route.d.ts +29 -0
  1209. package/dist/features/products/api/[id]/route.js +137 -0
  1210. package/dist/features/products/api/route.d.ts +19 -0
  1211. package/dist/features/products/api/route.js +214 -0
  1212. package/dist/features/products/columns/index.d.ts +64 -0
  1213. package/dist/features/products/columns/index.js +85 -0
  1214. package/dist/features/products/columns/productTableColumns.d.ts +27 -0
  1215. package/dist/features/products/columns/productTableColumns.js +88 -0
  1216. package/dist/features/products/components/AuctionDetailView.d.ts +13 -0
  1217. package/dist/features/products/components/AuctionDetailView.js +9 -0
  1218. package/dist/features/products/components/AuctionsView.d.ts +6 -0
  1219. package/dist/features/products/components/AuctionsView.js +5 -0
  1220. package/dist/features/products/components/BidHistory.d.ts +28 -0
  1221. package/dist/features/products/components/BidHistory.js +18 -0
  1222. package/dist/features/products/components/BuyBar.d.ts +21 -0
  1223. package/dist/features/products/components/BuyBar.js +20 -0
  1224. package/dist/features/products/components/InteractiveProductCard.d.ts +19 -0
  1225. package/dist/features/products/components/InteractiveProductCard.js +18 -0
  1226. package/dist/features/products/components/MakeOfferForm.d.ts +20 -0
  1227. package/dist/features/products/components/MakeOfferForm.js +8 -0
  1228. package/dist/features/products/components/PlaceBidForm.d.ts +20 -0
  1229. package/dist/features/products/components/PlaceBidForm.js +6 -0
  1230. package/dist/features/products/components/PreOrderDetailView.d.ts +14 -0
  1231. package/dist/features/products/components/PreOrderDetailView.js +9 -0
  1232. package/dist/features/products/components/PreOrdersView.d.ts +6 -0
  1233. package/dist/features/products/components/PreOrdersView.js +5 -0
  1234. package/dist/features/products/components/ProductDetailView.d.ts +11 -0
  1235. package/dist/features/products/components/ProductDetailView.js +9 -0
  1236. package/dist/features/products/components/ProductFeatureBadges.d.ts +32 -0
  1237. package/dist/features/products/components/ProductFeatureBadges.js +103 -0
  1238. package/dist/features/products/components/ProductFilters.d.ts +90 -0
  1239. package/dist/features/products/components/ProductFilters.js +105 -0
  1240. package/dist/features/products/components/ProductForm.d.ts +47 -0
  1241. package/dist/features/products/components/ProductForm.js +120 -0
  1242. package/dist/features/products/components/ProductGrid.d.ts +69 -0
  1243. package/dist/features/products/components/ProductGrid.js +92 -0
  1244. package/dist/features/products/components/ProductInfo.d.ts +20 -0
  1245. package/dist/features/products/components/ProductInfo.js +4 -0
  1246. package/dist/features/products/components/ProductTabs.d.ts +21 -0
  1247. package/dist/features/products/components/ProductTabs.js +22 -0
  1248. package/dist/features/products/components/ProductsView.d.ts +6 -0
  1249. package/dist/features/products/components/ProductsView.js +5 -0
  1250. package/dist/features/products/components/RelatedProducts.d.ts +16 -0
  1251. package/dist/features/products/components/RelatedProducts.js +12 -0
  1252. package/dist/features/products/components/index.d.ts +34 -0
  1253. package/dist/features/products/components/index.js +18 -0
  1254. package/dist/features/products/hooks/useBrands.d.ts +9 -0
  1255. package/dist/features/products/hooks/useBrands.js +15 -0
  1256. package/dist/features/products/hooks/useProductDetail.d.ts +15 -0
  1257. package/dist/features/products/hooks/useProductDetail.js +29 -0
  1258. package/dist/features/products/hooks/useProducts.d.ts +43 -0
  1259. package/dist/features/products/hooks/useProducts.js +67 -0
  1260. package/dist/features/products/hooks/useRelatedProducts.d.ts +2 -0
  1261. package/dist/features/products/hooks/useRelatedProducts.js +17 -0
  1262. package/dist/features/products/index.d.ts +10 -1066
  1263. package/dist/features/products/index.js +10 -2475
  1264. package/dist/features/products/manifest.d.ts +2 -0
  1265. package/dist/features/products/manifest.js +16 -0
  1266. package/dist/features/products/messages/en.json +11 -0
  1267. package/dist/features/products/repository/products.repository.d.ts +213 -0
  1268. package/dist/features/products/repository/products.repository.js +300 -0
  1269. package/dist/features/products/schemas/firestore.d.ts +125 -0
  1270. package/dist/features/products/schemas/firestore.js +149 -0
  1271. package/dist/features/products/schemas/index.d.ts +400 -0
  1272. package/dist/features/products/schemas/index.js +173 -0
  1273. package/dist/features/products/server.d.ts +7 -49
  1274. package/dist/features/products/server.js +10 -803
  1275. package/dist/features/products/types/index.d.ts +122 -0
  1276. package/dist/features/products/types/index.js +1 -0
  1277. package/dist/features/products/utils/listing-type.d.ts +2 -0
  1278. package/dist/features/products/utils/listing-type.js +9 -0
  1279. package/dist/features/promotions/actions/coupon-actions.d.ts +28 -0
  1280. package/dist/features/promotions/actions/coupon-actions.js +23 -0
  1281. package/dist/features/promotions/actions/index.d.ts +3 -0
  1282. package/dist/features/promotions/actions/index.js +3 -0
  1283. package/dist/features/promotions/actions/promotions-actions.d.ts +18 -0
  1284. package/dist/features/promotions/actions/promotions-actions.js +37 -0
  1285. package/dist/features/promotions/actions/seller-coupon-actions.d.ts +41 -0
  1286. package/dist/features/promotions/actions/seller-coupon-actions.js +92 -0
  1287. package/dist/features/promotions/api/route.d.ts +21 -0
  1288. package/dist/features/promotions/api/route.js +85 -0
  1289. package/dist/features/promotions/columns/index.d.ts +12 -0
  1290. package/dist/features/promotions/columns/index.js +45 -0
  1291. package/dist/features/promotions/components/CouponCard.d.ts +16 -0
  1292. package/dist/features/promotions/components/CouponCard.js +20 -0
  1293. package/dist/features/promotions/components/PromotionsView.d.ts +43 -0
  1294. package/dist/features/promotions/components/PromotionsView.js +10 -0
  1295. package/dist/features/promotions/components/index.d.ts +3 -0
  1296. package/dist/features/promotions/components/index.js +2 -0
  1297. package/dist/features/promotions/hooks/useCouponValidate.d.ts +22 -0
  1298. package/dist/features/promotions/hooks/useCouponValidate.js +10 -0
  1299. package/dist/features/promotions/hooks/usePromotions.d.ts +21 -0
  1300. package/dist/features/promotions/hooks/usePromotions.js +49 -0
  1301. package/dist/features/promotions/index.d.ts +7 -301
  1302. package/dist/features/promotions/index.js +7 -957
  1303. package/dist/features/promotions/manifest.d.ts +2 -0
  1304. package/dist/features/promotions/manifest.js +14 -0
  1305. package/dist/features/promotions/messages/en.json +20 -0
  1306. package/dist/features/promotions/repository/coupons.repository.d.ts +224 -0
  1307. package/dist/features/promotions/repository/coupons.repository.js +539 -0
  1308. package/dist/features/promotions/repository/promotions.repository.d.ts +14 -0
  1309. package/dist/features/promotions/repository/promotions.repository.js +43 -0
  1310. package/dist/features/promotions/schemas/firestore.d.ts +105 -0
  1311. package/dist/features/promotions/schemas/firestore.js +124 -0
  1312. package/dist/features/promotions/schemas/index.d.ts +117 -0
  1313. package/dist/features/promotions/schemas/index.js +58 -0
  1314. package/dist/features/promotions/server.d.ts +10 -0
  1315. package/dist/features/promotions/server.js +10 -0
  1316. package/dist/features/promotions/types/index.d.ts +51 -0
  1317. package/dist/features/promotions/types/index.js +2 -0
  1318. package/dist/features/reviews/actions/index.d.ts +1 -0
  1319. package/dist/features/reviews/actions/index.js +1 -0
  1320. package/dist/features/reviews/actions/review-actions.d.ts +40 -0
  1321. package/dist/features/reviews/actions/review-actions.js +182 -0
  1322. package/dist/features/reviews/api/[id]/route.d.ts +23 -0
  1323. package/dist/features/reviews/api/[id]/route.js +109 -0
  1324. package/dist/features/reviews/api/route.d.ts +21 -0
  1325. package/dist/features/reviews/api/route.js +171 -0
  1326. package/dist/features/reviews/columns/index.d.ts +15 -0
  1327. package/dist/features/reviews/columns/index.js +44 -0
  1328. package/dist/features/reviews/components/ReviewFilters.d.ts +74 -0
  1329. package/dist/features/reviews/components/ReviewFilters.js +60 -0
  1330. package/dist/features/reviews/components/ReviewModal.d.ts +11 -0
  1331. package/dist/features/reviews/components/ReviewModal.js +25 -0
  1332. package/dist/features/reviews/components/ReviewSummary.d.ts +16 -0
  1333. package/dist/features/reviews/components/ReviewSummary.js +20 -0
  1334. package/dist/features/reviews/components/ReviewsList.d.ts +15 -0
  1335. package/dist/features/reviews/components/ReviewsList.js +25 -0
  1336. package/dist/features/reviews/components/ReviewsListView.d.ts +31 -0
  1337. package/dist/features/reviews/components/ReviewsListView.js +16 -0
  1338. package/dist/features/reviews/components/index.d.ts +10 -0
  1339. package/dist/features/reviews/components/index.js +5 -0
  1340. package/dist/features/reviews/hooks/useCreateReview.d.ts +12 -0
  1341. package/dist/features/reviews/hooks/useCreateReview.js +20 -0
  1342. package/dist/features/reviews/hooks/useReviews.d.ts +34 -0
  1343. package/dist/features/reviews/hooks/useReviews.js +49 -0
  1344. package/dist/features/reviews/index.d.ts +7 -434
  1345. package/dist/features/reviews/index.js +7 -2297
  1346. package/dist/features/reviews/manifest.d.ts +2 -0
  1347. package/dist/features/reviews/manifest.js +10 -0
  1348. package/dist/features/reviews/messages/en.json +10 -0
  1349. package/dist/features/reviews/repository/reviews.repository.d.ts +103 -0
  1350. package/dist/features/reviews/repository/reviews.repository.js +214 -0
  1351. package/dist/features/reviews/schemas/firestore.d.ts +67 -0
  1352. package/dist/features/reviews/schemas/firestore.js +59 -0
  1353. package/dist/features/reviews/schemas/index.d.ts +183 -0
  1354. package/dist/features/reviews/schemas/index.js +68 -0
  1355. package/dist/features/reviews/server.d.ts +7 -46
  1356. package/dist/features/reviews/server.js +10 -769
  1357. package/dist/features/reviews/types/index.d.ts +62 -0
  1358. package/dist/features/reviews/types/index.js +1 -0
  1359. package/dist/features/search/actions/index.d.ts +1 -0
  1360. package/dist/features/search/actions/index.js +1 -0
  1361. package/dist/features/search/actions/search-actions.d.ts +18 -0
  1362. package/dist/features/search/actions/search-actions.js +43 -0
  1363. package/dist/features/search/api/route.d.ts +22 -0
  1364. package/dist/features/search/api/route.js +79 -0
  1365. package/dist/features/search/columns/index.d.ts +17 -0
  1366. package/dist/features/search/columns/index.js +49 -0
  1367. package/dist/features/search/components/Search.d.ts +41 -0
  1368. package/dist/features/search/components/Search.js +263 -0
  1369. package/dist/features/search/components/SearchFiltersRow.d.ts +22 -0
  1370. package/dist/features/search/components/SearchFiltersRow.js +21 -0
  1371. package/dist/features/search/components/SearchResultsSection.d.ts +53 -0
  1372. package/dist/features/search/components/SearchResultsSection.js +36 -0
  1373. package/dist/features/search/components/SearchView.d.ts +29 -0
  1374. package/dist/features/search/components/SearchView.js +8 -0
  1375. package/dist/features/search/components/index.d.ts +8 -0
  1376. package/dist/features/search/components/index.js +4 -0
  1377. package/dist/features/search/hooks/useNavSuggestions.d.ts +11 -0
  1378. package/dist/features/search/hooks/useNavSuggestions.js +32 -0
  1379. package/dist/features/search/hooks/useSearch.d.ts +21 -0
  1380. package/dist/features/search/hooks/useSearch.js +34 -0
  1381. package/dist/features/search/index.d.ts +7 -298
  1382. package/dist/features/search/index.js +7 -1351
  1383. package/dist/features/search/manifest.d.ts +2 -0
  1384. package/dist/features/search/manifest.js +10 -0
  1385. package/dist/features/search/messages/en.json +15 -0
  1386. package/dist/features/search/repository/search.repository.d.ts +14 -0
  1387. package/dist/features/search/repository/search.repository.js +59 -0
  1388. package/dist/features/search/schemas/index.d.ts +70 -0
  1389. package/dist/features/search/schemas/index.js +34 -0
  1390. package/dist/features/search/server.d.ts +5 -83
  1391. package/dist/features/search/server.js +5 -149
  1392. package/dist/features/search/types/index.d.ts +46 -0
  1393. package/dist/features/search/types/index.js +2 -0
  1394. package/dist/features/seller/actions/index.d.ts +2 -0
  1395. package/dist/features/seller/actions/index.js +2 -0
  1396. package/dist/features/seller/actions/offer-actions.d.ts +32 -0
  1397. package/dist/features/seller/actions/offer-actions.js +266 -0
  1398. package/dist/features/seller/actions/seller-actions.d.ts +172 -0
  1399. package/dist/features/seller/actions/seller-actions.js +480 -0
  1400. package/dist/features/seller/api/coupons/route.d.ts +17 -0
  1401. package/dist/features/seller/api/coupons/route.js +47 -0
  1402. package/dist/features/seller/api/offers/route.d.ts +17 -0
  1403. package/dist/features/seller/api/offers/route.js +63 -0
  1404. package/dist/features/seller/api/products/route.d.ts +17 -0
  1405. package/dist/features/seller/api/products/route.js +64 -0
  1406. package/dist/features/seller/api/store/route.d.ts +17 -0
  1407. package/dist/features/seller/api/store/route.js +34 -0
  1408. package/dist/features/seller/columns/index.d.ts +22 -0
  1409. package/dist/features/seller/columns/index.js +73 -0
  1410. package/dist/features/seller/components/SellerAddressesView.d.ts +13 -0
  1411. package/dist/features/seller/components/SellerAddressesView.js +5 -0
  1412. package/dist/features/seller/components/SellerAnalyticsView.d.ts +13 -0
  1413. package/dist/features/seller/components/SellerAnalyticsView.js +17 -0
  1414. package/dist/features/seller/components/SellerAuctionsView.d.ts +6 -0
  1415. package/dist/features/seller/components/SellerAuctionsView.js +5 -0
  1416. package/dist/features/seller/components/SellerCouponsView.d.ts +6 -0
  1417. package/dist/features/seller/components/SellerCouponsView.js +5 -0
  1418. package/dist/features/seller/components/SellerCreateProductView.d.ts +11 -0
  1419. package/dist/features/seller/components/SellerCreateProductView.js +5 -0
  1420. package/dist/features/seller/components/SellerDashboardView.d.ts +14 -0
  1421. package/dist/features/seller/components/SellerDashboardView.js +11 -0
  1422. package/dist/features/seller/components/SellerEditProductView.d.ts +11 -0
  1423. package/dist/features/seller/components/SellerEditProductView.js +5 -0
  1424. package/dist/features/seller/components/SellerGuideView.d.ts +12 -0
  1425. package/dist/features/seller/components/SellerGuideView.js +5 -0
  1426. package/dist/features/seller/components/SellerOffersView.d.ts +4 -0
  1427. package/dist/features/seller/components/SellerOffersView.js +5 -0
  1428. package/dist/features/seller/components/SellerOrdersView.d.ts +4 -0
  1429. package/dist/features/seller/components/SellerOrdersView.js +5 -0
  1430. package/dist/features/seller/components/SellerPayoutHistoryTable.d.ts +14 -0
  1431. package/dist/features/seller/components/SellerPayoutHistoryTable.js +10 -0
  1432. package/dist/features/seller/components/SellerPayoutSettingsView.d.ts +11 -0
  1433. package/dist/features/seller/components/SellerPayoutSettingsView.js +5 -0
  1434. package/dist/features/seller/components/SellerPayoutStats.d.ts +8 -0
  1435. package/dist/features/seller/components/SellerPayoutStats.js +9 -0
  1436. package/dist/features/seller/components/SellerPayoutsView.d.ts +18 -0
  1437. package/dist/features/seller/components/SellerPayoutsView.js +11 -0
  1438. package/dist/features/seller/components/SellerProductsView.d.ts +6 -0
  1439. package/dist/features/seller/components/SellerProductsView.js +5 -0
  1440. package/dist/features/seller/components/SellerShippingView.d.ts +12 -0
  1441. package/dist/features/seller/components/SellerShippingView.js +5 -0
  1442. package/dist/features/seller/components/SellerSidebar.d.ts +16 -0
  1443. package/dist/features/seller/components/SellerSidebar.js +11 -0
  1444. package/dist/features/seller/components/SellerStatCard.d.ts +14 -0
  1445. package/dist/features/seller/components/SellerStatCard.js +5 -0
  1446. package/dist/features/seller/components/SellerStoreSetupView.d.ts +12 -0
  1447. package/dist/features/seller/components/SellerStoreSetupView.js +8 -0
  1448. package/dist/features/seller/components/SellerStoreView.d.ts +8 -0
  1449. package/dist/features/seller/components/SellerStoreView.js +8 -0
  1450. package/dist/features/seller/components/SellerStorefrontView.d.ts +13 -0
  1451. package/dist/features/seller/components/SellerStorefrontView.js +10 -0
  1452. package/dist/features/seller/components/SellersListView.d.ts +4 -0
  1453. package/dist/features/seller/components/SellersListView.js +5 -0
  1454. package/dist/features/seller/components/analytics/SellerAnalyticsStats.d.ts +14 -0
  1455. package/dist/features/seller/components/analytics/SellerAnalyticsStats.js +9 -0
  1456. package/dist/features/seller/components/analytics/SellerRevenueChart.d.ts +13 -0
  1457. package/dist/features/seller/components/analytics/SellerRevenueChart.js +28 -0
  1458. package/dist/features/seller/components/analytics/SellerTopProducts.d.ts +17 -0
  1459. package/dist/features/seller/components/analytics/SellerTopProducts.js +6 -0
  1460. package/dist/features/seller/components/analytics/index.d.ts +3 -0
  1461. package/dist/features/seller/components/analytics/index.js +3 -0
  1462. package/dist/features/seller/components/index.d.ts +44 -0
  1463. package/dist/features/seller/components/index.js +23 -0
  1464. package/dist/features/seller/hooks/useBecomeSeller.d.ts +12 -0
  1465. package/dist/features/seller/hooks/useBecomeSeller.js +26 -0
  1466. package/dist/features/seller/hooks/useSellerPayouts.d.ts +25 -0
  1467. package/dist/features/seller/hooks/useSellerPayouts.js +42 -0
  1468. package/dist/features/seller/hooks/useSellerStore.d.ts +28 -0
  1469. package/dist/features/seller/hooks/useSellerStore.js +48 -0
  1470. package/dist/features/seller/hooks/useSellerStorefront.d.ts +16 -0
  1471. package/dist/features/seller/hooks/useSellerStorefront.js +57 -0
  1472. package/dist/features/seller/index.d.ts +10 -926
  1473. package/dist/features/seller/index.js +10 -2029
  1474. package/dist/features/seller/manifest.d.ts +2 -0
  1475. package/dist/features/seller/manifest.js +74 -0
  1476. package/dist/features/seller/messages/en.json +32 -0
  1477. package/dist/features/seller/permission-map.d.ts +3 -0
  1478. package/dist/features/seller/permission-map.js +15 -0
  1479. package/dist/features/seller/repository/offer.repository.d.ts +66 -0
  1480. package/dist/features/seller/repository/offer.repository.js +210 -0
  1481. package/dist/features/seller/repository/seller.repository.d.ts +22 -0
  1482. package/dist/features/seller/repository/seller.repository.js +72 -0
  1483. package/dist/features/seller/schemas/firestore.d.ts +76 -0
  1484. package/dist/features/seller/schemas/firestore.js +57 -0
  1485. package/dist/features/seller/schemas/index.d.ts +244 -0
  1486. package/dist/features/seller/schemas/index.js +100 -0
  1487. package/dist/features/seller/server.d.ts +13 -0
  1488. package/dist/features/seller/server.js +13 -0
  1489. package/dist/features/seller/types/index.d.ts +147 -0
  1490. package/dist/features/seller/types/index.js +2 -0
  1491. package/dist/features/stores/actions/index.d.ts +2 -0
  1492. package/dist/features/stores/actions/index.js +2 -0
  1493. package/dist/features/stores/actions/store-address-actions.d.ts +11 -0
  1494. package/dist/features/stores/actions/store-address-actions.js +54 -0
  1495. package/dist/features/stores/actions/store-query-actions.d.ts +34 -0
  1496. package/dist/features/stores/actions/store-query-actions.js +113 -0
  1497. package/dist/features/stores/api/[storeSlug]/auctions/route.d.ts +23 -0
  1498. package/dist/features/stores/api/[storeSlug]/auctions/route.js +92 -0
  1499. package/dist/features/stores/api/[storeSlug]/products/route.d.ts +23 -0
  1500. package/dist/features/stores/api/[storeSlug]/products/route.js +97 -0
  1501. package/dist/features/stores/api/[storeSlug]/reviews/route.d.ts +23 -0
  1502. package/dist/features/stores/api/[storeSlug]/reviews/route.js +101 -0
  1503. package/dist/features/stores/api/[storeSlug]/route.d.ts +21 -0
  1504. package/dist/features/stores/api/[storeSlug]/route.js +66 -0
  1505. package/dist/features/stores/api/route.d.ts +12 -0
  1506. package/dist/features/stores/api/route.js +101 -0
  1507. package/dist/features/stores/columns/index.d.ts +16 -0
  1508. package/dist/features/stores/columns/index.js +45 -0
  1509. package/dist/features/stores/components/InteractiveStoreCard.d.ts +20 -0
  1510. package/dist/features/stores/components/InteractiveStoreCard.js +16 -0
  1511. package/dist/features/stores/components/StoreAboutView.d.ts +21 -0
  1512. package/dist/features/stores/components/StoreAboutView.js +12 -0
  1513. package/dist/features/stores/components/StoreAddressSelectorCreate.d.ts +16 -0
  1514. package/dist/features/stores/components/StoreAddressSelectorCreate.js +40 -0
  1515. package/dist/features/stores/components/StoreAuctionsView.d.ts +17 -0
  1516. package/dist/features/stores/components/StoreAuctionsView.js +5 -0
  1517. package/dist/features/stores/components/StoreHeader.d.ts +15 -0
  1518. package/dist/features/stores/components/StoreHeader.js +8 -0
  1519. package/dist/features/stores/components/StoreNavTabs.d.ts +15 -0
  1520. package/dist/features/stores/components/StoreNavTabs.js +14 -0
  1521. package/dist/features/stores/components/StoreProductsView.d.ts +30 -0
  1522. package/dist/features/stores/components/StoreProductsView.js +11 -0
  1523. package/dist/features/stores/components/StoreReviewsView.d.ts +17 -0
  1524. package/dist/features/stores/components/StoreReviewsView.js +9 -0
  1525. package/dist/features/stores/components/StoresListView.d.ts +19 -0
  1526. package/dist/features/stores/components/StoresListView.js +24 -0
  1527. package/dist/features/stores/components/index.d.ts +16 -0
  1528. package/dist/features/stores/components/index.js +9 -0
  1529. package/dist/features/stores/hooks/useStoreAddressSelector.d.ts +23 -0
  1530. package/dist/features/stores/hooks/useStoreAddressSelector.js +30 -0
  1531. package/dist/features/stores/hooks/useStores.d.ts +58 -0
  1532. package/dist/features/stores/hooks/useStores.js +96 -0
  1533. package/dist/features/stores/index.d.ts +7 -536
  1534. package/dist/features/stores/index.js +7 -1911
  1535. package/dist/features/stores/manifest.d.ts +2 -0
  1536. package/dist/features/stores/manifest.js +35 -0
  1537. package/dist/features/stores/messages/en.json +21 -0
  1538. package/dist/features/stores/repository/store-address.repository.d.ts +55 -0
  1539. package/dist/features/stores/repository/store-address.repository.js +188 -0
  1540. package/dist/features/stores/repository/store.repository.d.ts +67 -0
  1541. package/dist/features/stores/repository/store.repository.js +181 -0
  1542. package/dist/features/stores/repository/stores.repository.d.ts +11 -0
  1543. package/dist/features/stores/repository/stores.repository.js +34 -0
  1544. package/dist/features/stores/schemas/firestore.d.ts +117 -0
  1545. package/dist/features/stores/schemas/firestore.js +109 -0
  1546. package/dist/features/stores/schemas/index.d.ts +85 -0
  1547. package/dist/features/stores/schemas/index.js +48 -0
  1548. package/dist/features/stores/server.d.ts +12 -103
  1549. package/dist/features/stores/server.js +15 -444
  1550. package/dist/features/stores/types/index.d.ts +102 -0
  1551. package/dist/features/stores/types/index.js +2 -0
  1552. package/dist/features/whatsapp-bot/api/send-status/route.d.ts +12 -0
  1553. package/dist/features/whatsapp-bot/api/send-status/route.js +36 -0
  1554. package/dist/features/whatsapp-bot/api/webhook/route.d.ts +12 -0
  1555. package/dist/features/whatsapp-bot/api/webhook/route.js +41 -0
  1556. package/dist/features/whatsapp-bot/components/WhatsAppChatButton.d.ts +8 -0
  1557. package/dist/features/whatsapp-bot/components/WhatsAppChatButton.js +7 -0
  1558. package/dist/features/whatsapp-bot/components/index.d.ts +1 -0
  1559. package/dist/features/whatsapp-bot/components/index.js +1 -0
  1560. package/dist/features/whatsapp-bot/helpers/whatsapp.d.ts +21 -0
  1561. package/dist/features/whatsapp-bot/helpers/whatsapp.js +125 -0
  1562. package/dist/features/whatsapp-bot/index.d.ts +3 -85
  1563. package/dist/features/whatsapp-bot/index.js +3 -154
  1564. package/dist/features/whatsapp-bot/manifest.d.ts +2 -0
  1565. package/dist/features/whatsapp-bot/manifest.js +13 -0
  1566. package/dist/features/whatsapp-bot/messages/en.json +7 -0
  1567. package/dist/features/whatsapp-bot/server.d.ts +7 -0
  1568. package/dist/features/whatsapp-bot/server.js +7 -0
  1569. package/dist/features/whatsapp-bot/types/index.d.ts +50 -0
  1570. package/dist/features/whatsapp-bot/types/index.js +1 -0
  1571. package/dist/features/wishlist/actions/index.d.ts +1 -0
  1572. package/dist/features/wishlist/actions/index.js +1 -0
  1573. package/dist/features/wishlist/actions/wishlist-actions.d.ts +20 -0
  1574. package/dist/features/wishlist/actions/wishlist-actions.js +29 -0
  1575. package/dist/features/wishlist/columns/index.d.ts +17 -0
  1576. package/dist/features/wishlist/columns/index.js +42 -0
  1577. package/dist/features/wishlist/components/WishlistPage.d.ts +16 -0
  1578. package/dist/features/wishlist/components/WishlistPage.js +17 -0
  1579. package/dist/features/wishlist/components/WishlistToggleButton.d.ts +12 -0
  1580. package/dist/features/wishlist/components/WishlistToggleButton.js +21 -0
  1581. package/dist/features/wishlist/components/WishlistView.d.ts +33 -0
  1582. package/dist/features/wishlist/components/WishlistView.js +41 -0
  1583. package/dist/features/wishlist/components/index.d.ts +4 -0
  1584. package/dist/features/wishlist/components/index.js +3 -0
  1585. package/dist/features/wishlist/hooks/useUserWishlist.d.ts +187 -0
  1586. package/dist/features/wishlist/hooks/useUserWishlist.js +17 -0
  1587. package/dist/features/wishlist/hooks/useWishlist.d.ts +16 -0
  1588. package/dist/features/wishlist/hooks/useWishlist.js +23 -0
  1589. package/dist/features/wishlist/hooks/useWishlistToggle.d.ts +10 -0
  1590. package/dist/features/wishlist/hooks/useWishlistToggle.js +32 -0
  1591. package/dist/features/wishlist/index.d.ts +9 -360
  1592. package/dist/features/wishlist/index.js +8 -888
  1593. package/dist/features/wishlist/manifest.d.ts +2 -0
  1594. package/dist/features/wishlist/manifest.js +12 -0
  1595. package/dist/features/wishlist/messages/en.json +7 -0
  1596. package/dist/features/wishlist/repository/user-wishlist.repository.d.ts +14 -0
  1597. package/dist/features/wishlist/repository/user-wishlist.repository.js +91 -0
  1598. package/dist/features/wishlist/repository/wishlist.repository.d.ts +13 -0
  1599. package/dist/features/wishlist/repository/wishlist.repository.js +31 -0
  1600. package/dist/features/wishlist/schemas/index.d.ts +46 -0
  1601. package/dist/features/wishlist/schemas/index.js +24 -0
  1602. package/dist/features/wishlist/server.d.ts +9 -0
  1603. package/dist/features/wishlist/server.js +9 -0
  1604. package/dist/features/wishlist/types/index.d.ts +16 -0
  1605. package/dist/features/wishlist/types/index.js +1 -0
  1606. package/dist/http/ApiClient.d.ts +59 -0
  1607. package/dist/http/ApiClient.js +149 -0
  1608. package/dist/http/api-handler.d.ts +33 -0
  1609. package/dist/http/api-handler.js +89 -0
  1610. package/dist/http/index.d.ts +6 -58
  1611. package/dist/http/index.js +8 -4
  1612. package/dist/index.d.ts +1 -17
  1613. package/dist/index.js +1 -13
  1614. package/dist/instrumentation/index.d.ts +4 -6
  1615. package/dist/instrumentation/index.js +54 -14
  1616. package/dist/monitoring/analytics.d.ts +79 -0
  1617. package/dist/monitoring/analytics.js +171 -0
  1618. package/dist/monitoring/browser.d.ts +10 -0
  1619. package/dist/monitoring/browser.js +6 -0
  1620. package/dist/monitoring/cache-metrics.d.ts +24 -0
  1621. package/dist/monitoring/cache-metrics.js +83 -0
  1622. package/dist/monitoring/client-logger.d.ts +29 -0
  1623. package/dist/monitoring/client-logger.js +127 -0
  1624. package/dist/monitoring/error-tracking.d.ts +50 -0
  1625. package/dist/monitoring/error-tracking.js +54 -0
  1626. package/dist/monitoring/index.d.ts +12 -181
  1627. package/dist/monitoring/index.js +7 -8
  1628. package/dist/monitoring/performance.d.ts +31 -0
  1629. package/dist/monitoring/performance.js +34 -0
  1630. package/dist/monitoring/runtime.d.ts +17 -0
  1631. package/dist/monitoring/runtime.js +28 -0
  1632. package/dist/monitoring/server-logger.d.ts +37 -0
  1633. package/dist/monitoring/server-logger.js +289 -0
  1634. package/dist/next/ErrorBoundary.d.ts +19 -0
  1635. package/dist/next/ErrorBoundary.js +35 -0
  1636. package/dist/next/IAuthVerifier.d.ts +54 -0
  1637. package/dist/next/IAuthVerifier.js +23 -0
  1638. package/dist/next/api/api-response.d.ts +29 -0
  1639. package/dist/next/api/api-response.js +31 -0
  1640. package/dist/next/api/apiHandler.d.ts +48 -0
  1641. package/dist/next/api/apiHandler.js +87 -0
  1642. package/dist/next/api/errorHandler.d.ts +57 -0
  1643. package/dist/next/api/errorHandler.js +72 -0
  1644. package/dist/next/api/routeHandler.d.ts +60 -0
  1645. package/dist/next/api/routeHandler.js +113 -0
  1646. package/dist/next/cache-middleware.d.ts +35 -0
  1647. package/dist/next/cache-middleware.js +77 -0
  1648. package/dist/next/components/ErrorView.d.ts +13 -0
  1649. package/dist/next/components/ErrorView.js +32 -0
  1650. package/dist/next/components/GlobalError.d.ts +7 -0
  1651. package/dist/next/components/GlobalError.js +43 -0
  1652. package/dist/next/components/NotFoundView.d.ts +28 -0
  1653. package/dist/next/components/NotFoundView.js +25 -0
  1654. package/dist/next/components/UnauthorizedView.d.ts +28 -0
  1655. package/dist/next/components/UnauthorizedView.js +22 -0
  1656. package/dist/next/index.d.ts +34 -776
  1657. package/dist/next/index.js +30 -646
  1658. package/dist/next/middleware/chain.d.ts +47 -0
  1659. package/dist/next/middleware/chain.js +80 -0
  1660. package/dist/next/middleware/index.d.ts +6 -0
  1661. package/dist/next/middleware/index.js +3 -0
  1662. package/dist/next/middleware/pii-redactor.d.ts +32 -0
  1663. package/dist/next/middleware/pii-redactor.js +82 -0
  1664. package/dist/next/middleware/pii-scrubber.d.ts +11 -0
  1665. package/dist/next/middleware/pii-scrubber.js +43 -0
  1666. package/dist/next/middleware/types.d.ts +18 -0
  1667. package/dist/next/middleware/types.js +1 -0
  1668. package/dist/next/request-helpers.d.ts +25 -0
  1669. package/dist/next/request-helpers.js +52 -0
  1670. package/dist/next/routing/route-map.d.ts +272 -0
  1671. package/dist/next/routing/route-map.js +202 -0
  1672. package/dist/providers/auth-firebase/browser-stub.d.ts +24 -0
  1673. package/dist/providers/auth-firebase/browser-stub.js +28 -0
  1674. package/dist/providers/auth-firebase/helpers.d.ts +83 -0
  1675. package/dist/providers/auth-firebase/helpers.js +205 -0
  1676. package/dist/providers/auth-firebase/index.d.ts +7 -133
  1677. package/dist/providers/auth-firebase/index.js +16 -370
  1678. package/dist/providers/auth-firebase/provider.d.ts +8 -0
  1679. package/dist/providers/auth-firebase/provider.js +118 -0
  1680. package/dist/providers/auth-firebase/session.d.ts +19 -0
  1681. package/dist/providers/auth-firebase/session.js +86 -0
  1682. package/dist/providers/db-firebase/admin-app-lite.d.ts +6 -0
  1683. package/dist/providers/db-firebase/admin-app-lite.js +50 -0
  1684. package/dist/providers/db-firebase/admin-auth-lite.d.ts +5 -0
  1685. package/dist/providers/db-firebase/admin-auth-lite.js +10 -0
  1686. package/dist/providers/db-firebase/admin-storage-lite.d.ts +6 -0
  1687. package/dist/providers/db-firebase/admin-storage-lite.js +11 -0
  1688. package/dist/providers/db-firebase/admin.d.ts +29 -0
  1689. package/dist/providers/db-firebase/admin.js +163 -0
  1690. package/dist/providers/db-firebase/base.d.ts +44 -0
  1691. package/dist/providers/db-firebase/base.js +180 -0
  1692. package/dist/providers/db-firebase/base.repository.d.ts +34 -0
  1693. package/dist/providers/db-firebase/base.repository.js +235 -0
  1694. package/dist/providers/db-firebase/browser-stub.d.ts +37 -0
  1695. package/dist/providers/db-firebase/browser-stub.js +56 -0
  1696. package/dist/providers/db-firebase/client-config.d.ts +22 -0
  1697. package/dist/providers/db-firebase/client-config.js +30 -0
  1698. package/dist/providers/db-firebase/field-ops.d.ts +7 -0
  1699. package/dist/providers/db-firebase/field-ops.js +13 -0
  1700. package/dist/providers/db-firebase/helpers.d.ts +23 -0
  1701. package/dist/providers/db-firebase/helpers.js +67 -0
  1702. package/dist/providers/db-firebase/index.d.ts +16 -250
  1703. package/dist/providers/db-firebase/index.js +42 -498
  1704. package/dist/providers/db-firebase/realtime.d.ts +43 -0
  1705. package/dist/providers/db-firebase/realtime.js +122 -0
  1706. package/dist/providers/db-firebase/rtdb-paths.d.ts +12 -0
  1707. package/dist/providers/db-firebase/rtdb-paths.js +12 -0
  1708. package/dist/providers/db-firebase/sieve.d.ts +76 -0
  1709. package/dist/providers/db-firebase/sieve.js +83 -0
  1710. package/dist/providers/email-resend/index.d.ts +6 -64
  1711. package/dist/providers/email-resend/index.js +14 -56
  1712. package/dist/providers/email-resend/provider.d.ts +43 -0
  1713. package/dist/providers/email-resend/provider.js +75 -0
  1714. package/dist/providers/firebase-client/auth.d.ts +12 -0
  1715. package/dist/providers/firebase-client/auth.js +30 -0
  1716. package/dist/providers/firebase-client/index.d.ts +9 -0
  1717. package/dist/providers/firebase-client/index.js +9 -0
  1718. package/dist/providers/firebase-client/realtime.d.ts +18 -0
  1719. package/dist/providers/firebase-client/realtime.js +39 -0
  1720. package/dist/providers/payment-razorpay/index.d.ts +66 -69
  1721. package/dist/providers/payment-razorpay/index.js +201 -97
  1722. package/dist/providers/shipping-shiprocket/index.d.ts +69 -33
  1723. package/dist/providers/shipping-shiprocket/index.js +135 -122
  1724. package/dist/providers/shipping-shiprocket/shiprocket-provider.d.ts +46 -0
  1725. package/dist/providers/shipping-shiprocket/shiprocket-provider.js +152 -0
  1726. package/dist/providers/storage-firebase/client.d.ts +56 -0
  1727. package/dist/providers/storage-firebase/client.js +141 -0
  1728. package/dist/providers/storage-firebase/index.d.ts +6 -43
  1729. package/dist/providers/storage-firebase/index.js +16 -153
  1730. package/dist/providers/storage-firebase/provider.d.ts +23 -0
  1731. package/dist/providers/storage-firebase/provider.js +103 -0
  1732. package/dist/react/ErrorBoundary.d.ts +31 -0
  1733. package/dist/react/ErrorBoundary.js +68 -0
  1734. package/dist/react/contexts/SessionContext.d.ts +80 -0
  1735. package/dist/react/contexts/SessionContext.js +350 -0
  1736. package/dist/react/contexts/ThemeContext.d.ts +14 -0
  1737. package/dist/react/contexts/ThemeContext.js +65 -0
  1738. package/dist/react/contexts/index.d.ts +4 -0
  1739. package/dist/react/contexts/index.js +2 -0
  1740. package/dist/react/hooks/useBreakpoint.d.ts +29 -0
  1741. package/dist/react/hooks/useBreakpoint.js +37 -0
  1742. package/dist/react/hooks/useBulkAction.d.ts +65 -0
  1743. package/dist/react/hooks/useBulkAction.js +69 -0
  1744. package/dist/react/hooks/useBulkSelection.d.ts +40 -0
  1745. package/dist/react/hooks/useBulkSelection.js +58 -0
  1746. package/dist/react/hooks/useCamera.d.ts +34 -0
  1747. package/dist/react/hooks/useCamera.js +147 -0
  1748. package/dist/react/hooks/useClickOutside.d.ts +37 -0
  1749. package/dist/react/hooks/useClickOutside.js +57 -0
  1750. package/dist/react/hooks/useContainerGrid.d.ts +39 -0
  1751. package/dist/react/hooks/useContainerGrid.js +47 -0
  1752. package/dist/react/hooks/useCountdown.d.ts +26 -0
  1753. package/dist/react/hooks/useCountdown.js +49 -0
  1754. package/dist/react/hooks/useGesture.d.ts +51 -0
  1755. package/dist/react/hooks/useGesture.js +181 -0
  1756. package/dist/react/hooks/useKeyPress.d.ts +48 -0
  1757. package/dist/react/hooks/useKeyPress.js +62 -0
  1758. package/dist/react/hooks/useLongPress.d.ts +26 -0
  1759. package/dist/react/hooks/useLongPress.js +55 -0
  1760. package/dist/react/hooks/useMediaQuery.d.ts +17 -0
  1761. package/dist/react/hooks/useMediaQuery.js +34 -0
  1762. package/dist/react/hooks/useMessage.d.ts +11 -0
  1763. package/dist/react/hooks/useMessage.js +45 -0
  1764. package/dist/react/hooks/usePendingFilters.d.ts +58 -0
  1765. package/dist/react/hooks/usePendingFilters.js +79 -0
  1766. package/dist/react/hooks/usePendingTable.d.ts +49 -0
  1767. package/dist/react/hooks/usePendingTable.js +45 -0
  1768. package/dist/react/hooks/usePullToRefresh.d.ts +38 -0
  1769. package/dist/react/hooks/usePullToRefresh.js +82 -0
  1770. package/dist/react/hooks/useRealtimeEvent.d.ts +53 -0
  1771. package/dist/react/hooks/useRealtimeEvent.js +124 -0
  1772. package/dist/react/hooks/useSwipe.d.ts +55 -0
  1773. package/dist/react/hooks/useSwipe.js +165 -0
  1774. package/dist/react/hooks/useUnsavedChanges.d.ts +44 -0
  1775. package/dist/react/hooks/useUnsavedChanges.js +55 -0
  1776. package/dist/react/hooks/useUrlTable.d.ts +31 -0
  1777. package/dist/react/hooks/useUrlTable.js +137 -0
  1778. package/dist/react/hooks/useVisibleItems.d.ts +37 -0
  1779. package/dist/react/hooks/useVisibleItems.js +59 -0
  1780. package/dist/react/index.d.ts +49 -787
  1781. package/dist/react/index.js +47 -1665
  1782. package/dist/react/useModalStack.d.ts +33 -0
  1783. package/dist/react/useModalStack.js +61 -0
  1784. package/dist/repositories/index.d.ts +38 -0
  1785. package/dist/repositories/index.js +40 -0
  1786. package/dist/security/authorization.d.ts +24 -0
  1787. package/dist/security/authorization.js +73 -0
  1788. package/dist/security/browser.d.ts +7 -0
  1789. package/dist/security/browser.js +5 -0
  1790. package/dist/security/csp.d.ts +16 -0
  1791. package/dist/security/csp.js +44 -0
  1792. package/dist/security/index.d.ts +11 -309
  1793. package/dist/security/index.js +8 -5
  1794. package/dist/security/pii-encrypt.d.ts +121 -0
  1795. package/dist/security/pii-encrypt.js +351 -0
  1796. package/dist/security/pii-redact.d.ts +20 -0
  1797. package/dist/security/pii-redact.js +129 -0
  1798. package/dist/security/pii-schemas.d.ts +38 -0
  1799. package/dist/security/pii-schemas.js +62 -0
  1800. package/dist/security/rate-limit.d.ts +70 -0
  1801. package/dist/security/rate-limit.js +107 -0
  1802. package/dist/security/rbac/Can.d.ts +31 -0
  1803. package/dist/security/rbac/Can.js +24 -0
  1804. package/dist/security/rbac/default-roles.d.ts +2 -0
  1805. package/dist/security/rbac/default-roles.js +83 -0
  1806. package/dist/security/rbac/hook.d.ts +20 -0
  1807. package/dist/security/rbac/hook.js +30 -0
  1808. package/dist/security/rbac/index.d.ts +8 -0
  1809. package/dist/security/rbac/index.js +6 -0
  1810. package/dist/security/rbac/middleware.d.ts +51 -0
  1811. package/dist/security/rbac/middleware.js +51 -0
  1812. package/dist/security/rbac/resolver.d.ts +5 -0
  1813. package/dist/security/rbac/resolver.js +38 -0
  1814. package/dist/security/rbac/server.d.ts +24 -0
  1815. package/dist/security/rbac/server.js +42 -0
  1816. package/dist/security/rbac/types.d.ts +22 -0
  1817. package/dist/security/rbac/types.js +2 -0
  1818. package/dist/security/settings-encryption.d.ts +5 -0
  1819. package/dist/security/settings-encryption.js +48 -0
  1820. package/dist/seed/actions/demo-seed-actions.d.ts +31 -0
  1821. package/dist/seed/actions/demo-seed-actions.js +36 -0
  1822. package/dist/seed/actions/index.d.ts +1 -0
  1823. package/dist/seed/actions/index.js +1 -0
  1824. package/dist/seed/addresses-seed-data.d.ts +19 -0
  1825. package/dist/seed/addresses-seed-data.js +418 -0
  1826. package/dist/seed/bids-seed-data.d.ts +7 -0
  1827. package/dist/seed/bids-seed-data.js +1168 -0
  1828. package/dist/seed/blog-posts-seed-data.d.ts +7 -0
  1829. package/dist/seed/blog-posts-seed-data.js +215 -0
  1830. package/dist/seed/carousel-slides-seed-data.d.ts +7 -0
  1831. package/dist/seed/carousel-slides-seed-data.js +283 -0
  1832. package/dist/seed/cart-seed-data.d.ts +20 -0
  1833. package/dist/seed/cart-seed-data.js +179 -0
  1834. package/dist/seed/categories-seed-data.d.ts +7 -0
  1835. package/dist/seed/categories-seed-data.js +1220 -0
  1836. package/dist/seed/coupons-seed-data.d.ts +7 -0
  1837. package/dist/seed/coupons-seed-data.js +508 -0
  1838. package/dist/seed/defaults/categories.d.ts +2 -0
  1839. package/dist/seed/defaults/categories.js +12 -0
  1840. package/dist/seed/defaults/faqs.d.ts +2 -0
  1841. package/dist/seed/defaults/faqs.js +40 -0
  1842. package/dist/seed/defaults/homepage-sections.d.ts +2 -0
  1843. package/dist/seed/defaults/homepage-sections.js +59 -0
  1844. package/dist/seed/events-seed-data.d.ts +8 -0
  1845. package/dist/seed/events-seed-data.js +662 -0
  1846. package/dist/seed/factories/address.factory.d.ts +21 -0
  1847. package/dist/seed/factories/address.factory.js +44 -0
  1848. package/dist/seed/factories/bid.factory.d.ts +15 -0
  1849. package/dist/seed/factories/bid.factory.js +33 -0
  1850. package/dist/seed/factories/blog-post.factory.d.ts +15 -0
  1851. package/dist/seed/factories/blog-post.factory.js +22 -0
  1852. package/dist/seed/factories/carousel.factory.d.ts +11 -0
  1853. package/dist/seed/factories/carousel.factory.js +16 -0
  1854. package/dist/seed/factories/cart.factory.d.ts +26 -0
  1855. package/dist/seed/factories/cart.factory.js +35 -0
  1856. package/dist/seed/factories/category.factory.d.ts +11 -0
  1857. package/dist/seed/factories/category.factory.js +16 -0
  1858. package/dist/seed/factories/coupon.factory.d.ts +21 -0
  1859. package/dist/seed/factories/coupon.factory.js +43 -0
  1860. package/dist/seed/factories/faq.factory.d.ts +10 -0
  1861. package/dist/seed/factories/faq.factory.js +15 -0
  1862. package/dist/seed/factories/homepage-section.factory.d.ts +9 -0
  1863. package/dist/seed/factories/homepage-section.factory.js +13 -0
  1864. package/dist/seed/factories/notification.factory.d.ts +17 -0
  1865. package/dist/seed/factories/notification.factory.js +39 -0
  1866. package/dist/seed/factories/order.factory.d.ts +20 -0
  1867. package/dist/seed/factories/order.factory.js +20 -0
  1868. package/dist/seed/factories/payout.factory.d.ts +21 -0
  1869. package/dist/seed/factories/payout.factory.js +38 -0
  1870. package/dist/seed/factories/product.factory.d.ts +27 -0
  1871. package/dist/seed/factories/product.factory.js +111 -0
  1872. package/dist/seed/factories/review.factory.d.ts +14 -0
  1873. package/dist/seed/factories/review.factory.js +52 -0
  1874. package/dist/seed/factories/session.factory.d.ts +15 -0
  1875. package/dist/seed/factories/session.factory.js +31 -0
  1876. package/dist/seed/factories/store.factory.d.ts +23 -0
  1877. package/dist/seed/factories/store.factory.js +46 -0
  1878. package/dist/seed/factories/user.factory.d.ts +19 -0
  1879. package/dist/seed/factories/user.factory.js +55 -0
  1880. package/dist/seed/faq-seed-data.d.ts +47 -0
  1881. package/dist/seed/faq-seed-data.js +2320 -0
  1882. package/dist/seed/firestore-indexes.d.ts +13 -0
  1883. package/dist/seed/firestore-indexes.js +32 -0
  1884. package/dist/seed/homepage-sections-seed-data.d.ts +18 -0
  1885. package/dist/seed/homepage-sections-seed-data.js +339 -0
  1886. package/dist/seed/index.d.ts +68 -397
  1887. package/dist/seed/index.js +49 -1040
  1888. package/dist/seed/notifications-seed-data.d.ts +7 -0
  1889. package/dist/seed/notifications-seed-data.js +494 -0
  1890. package/dist/seed/orders-seed-data.d.ts +7 -0
  1891. package/dist/seed/orders-seed-data.js +578 -0
  1892. package/dist/seed/payouts-seed-data.d.ts +7 -0
  1893. package/dist/seed/payouts-seed-data.js +202 -0
  1894. package/dist/seed/products-seed-data.d.ts +7 -0
  1895. package/dist/seed/products-seed-data.js +2477 -0
  1896. package/dist/seed/reviews-seed-data.d.ts +7 -0
  1897. package/dist/seed/reviews-seed-data.js +618 -0
  1898. package/dist/seed/runner.d.ts +3 -0
  1899. package/dist/seed/runner.js +38 -0
  1900. package/dist/seed/seed-market-config.d.ts +49 -0
  1901. package/dist/seed/seed-market-config.js +198 -0
  1902. package/dist/seed/sessions-seed-data.d.ts +17 -0
  1903. package/dist/seed/sessions-seed-data.js +355 -0
  1904. package/dist/seed/site-settings-seed-data.d.ts +7 -0
  1905. package/dist/seed/site-settings-seed-data.js +236 -0
  1906. package/dist/seed/store-addresses-seed-data.d.ts +19 -0
  1907. package/dist/seed/store-addresses-seed-data.js +106 -0
  1908. package/dist/seed/stores-seed-data.d.ts +14 -0
  1909. package/dist/seed/stores-seed-data.js +127 -0
  1910. package/dist/seed/test-utils.d.ts +49 -0
  1911. package/dist/seed/test-utils.js +107 -0
  1912. package/dist/seed/types.d.ts +33 -0
  1913. package/dist/seed/types.js +1 -0
  1914. package/dist/seed/users-seed-data.d.ts +7 -0
  1915. package/dist/seed/users-seed-data.js +727 -0
  1916. package/dist/seo/index.d.ts +2 -150
  1917. package/dist/seo/index.js +2 -4
  1918. package/dist/seo/json-ld.d.ts +69 -0
  1919. package/dist/seo/json-ld.js +166 -0
  1920. package/dist/seo/metadata.d.ts +77 -0
  1921. package/dist/seo/metadata.js +157 -0
  1922. package/dist/server.d.ts +109 -0
  1923. package/dist/server.js +110 -0
  1924. package/dist/style/tailwind/index.d.ts +5 -7
  1925. package/dist/style/tailwind/index.js +54 -33
  1926. package/dist/style/vanilla/index.d.ts +5 -7
  1927. package/dist/style/vanilla/index.js +45 -33
  1928. package/dist/tokens/index.d.ts +23 -24
  1929. package/dist/tokens/index.js +786 -4
  1930. package/dist/tokens/tokens.css +221 -0
  1931. package/dist/ui/DataTable.d.ts +78 -0
  1932. package/dist/ui/DataTable.js +157 -0
  1933. package/dist/ui/DataTable.style.css +190 -0
  1934. package/dist/ui/animation.helper.d.ts +17 -0
  1935. package/dist/ui/animation.helper.js +17 -0
  1936. package/dist/ui/color.helper.d.ts +12 -0
  1937. package/dist/ui/color.helper.js +31 -0
  1938. package/dist/ui/columns/build-columns.d.ts +21 -0
  1939. package/dist/ui/columns/build-columns.js +33 -0
  1940. package/dist/ui/columns/column-renderers.d.ts +33 -0
  1941. package/dist/ui/columns/column-renderers.js +64 -0
  1942. package/dist/ui/columns/index.d.ts +6 -0
  1943. package/dist/ui/columns/index.js +5 -0
  1944. package/dist/ui/components/Accordion.d.ts +27 -0
  1945. package/dist/ui/components/Accordion.js +57 -0
  1946. package/dist/ui/components/Accordion.style.css +82 -0
  1947. package/dist/ui/components/ActiveFilterChips.d.ts +13 -0
  1948. package/dist/ui/components/ActiveFilterChips.js +9 -0
  1949. package/dist/ui/components/ActiveFilterChips.style.css +66 -0
  1950. package/dist/ui/components/Alert.d.ts +43 -0
  1951. package/dist/ui/components/Alert.js +47 -0
  1952. package/dist/ui/components/Alert.style.css +187 -0
  1953. package/dist/ui/components/Avatar.d.ts +18 -0
  1954. package/dist/ui/components/Avatar.js +42 -0
  1955. package/dist/ui/components/Avatar.style.css +73 -0
  1956. package/dist/ui/components/AvatarDisplay.d.ts +10 -0
  1957. package/dist/ui/components/AvatarDisplay.js +56 -0
  1958. package/dist/ui/components/AvatarDisplay.style.css +46 -0
  1959. package/dist/ui/components/BackgroundRenderer.d.ts +15 -0
  1960. package/dist/ui/components/BackgroundRenderer.js +42 -0
  1961. package/dist/ui/components/BackgroundRenderer.style.css +31 -0
  1962. package/dist/ui/components/Badge.d.ts +33 -0
  1963. package/dist/ui/components/Badge.js +34 -0
  1964. package/dist/ui/components/Badge.style.css +114 -0
  1965. package/dist/ui/components/BaseListingCard.d.ts +39 -0
  1966. package/dist/ui/components/BaseListingCard.js +56 -0
  1967. package/dist/ui/components/BaseListingCard.style.css +84 -0
  1968. package/dist/ui/components/Breadcrumb.d.ts +15 -0
  1969. package/dist/ui/components/Breadcrumb.js +12 -0
  1970. package/dist/ui/components/Breadcrumb.style.css +60 -0
  1971. package/dist/ui/components/BulkActionBar.d.ts +34 -0
  1972. package/dist/ui/components/BulkActionBar.js +86 -0
  1973. package/dist/ui/components/BulkActionBar.style.css +196 -0
  1974. package/dist/ui/components/Button.d.ts +31 -0
  1975. package/dist/ui/components/Button.js +29 -0
  1976. package/dist/ui/components/Button.style.css +160 -0
  1977. package/dist/ui/components/Card.d.ts +21 -0
  1978. package/dist/ui/components/Card.js +51 -0
  1979. package/dist/ui/components/Card.style.css +192 -0
  1980. package/dist/ui/components/Checkbox.d.ts +8 -0
  1981. package/dist/ui/components/Checkbox.js +38 -0
  1982. package/dist/ui/components/Checkbox.style.css +113 -0
  1983. package/dist/ui/components/ConfirmDeleteModal.d.ts +33 -0
  1984. package/dist/ui/components/ConfirmDeleteModal.js +74 -0
  1985. package/dist/ui/components/ConfirmDeleteModal.style.css +89 -0
  1986. package/dist/ui/components/CountdownDisplay.d.ts +14 -0
  1987. package/dist/ui/components/CountdownDisplay.js +50 -0
  1988. package/dist/ui/components/CountdownDisplay.style.css +4 -0
  1989. package/dist/ui/components/DashboardStatsCard.d.ts +15 -0
  1990. package/dist/ui/components/DashboardStatsCard.js +28 -0
  1991. package/dist/ui/components/DashboardStatsCard.style.css +70 -0
  1992. package/dist/ui/components/DescriptionField.d.ts +23 -0
  1993. package/dist/ui/components/DescriptionField.js +28 -0
  1994. package/dist/ui/components/DescriptionField.style.css +36 -0
  1995. package/dist/ui/components/DetailViewShell.d.ts +51 -0
  1996. package/dist/ui/components/DetailViewShell.js +50 -0
  1997. package/dist/ui/components/Div.d.ts +20 -0
  1998. package/dist/ui/components/Div.js +19 -0
  1999. package/dist/ui/components/Div.style.css +6 -0
  2000. package/dist/ui/components/Divider.d.ts +12 -0
  2001. package/dist/ui/components/Divider.js +11 -0
  2002. package/dist/ui/components/Divider.style.css +39 -0
  2003. package/dist/ui/components/Drawer.d.ts +21 -0
  2004. package/dist/ui/components/Drawer.js +72 -0
  2005. package/dist/ui/components/Drawer.style.css +146 -0
  2006. package/dist/ui/components/Dropdown.d.ts +36 -0
  2007. package/dist/ui/components/Dropdown.js +142 -0
  2008. package/dist/ui/components/Dropdown.style.css +112 -0
  2009. package/dist/ui/components/DynamicSelect.d.ts +24 -0
  2010. package/dist/ui/components/DynamicSelect.js +78 -0
  2011. package/dist/ui/components/DynamicSelect.style.css +101 -0
  2012. package/dist/ui/components/EmptyState.d.ts +12 -0
  2013. package/dist/ui/components/EmptyState.js +17 -0
  2014. package/dist/ui/components/EmptyState.style.css +30 -0
  2015. package/dist/ui/components/FilterDrawer.d.ts +16 -0
  2016. package/dist/ui/components/FilterDrawer.js +39 -0
  2017. package/dist/ui/components/FilterDrawer.style.css +61 -0
  2018. package/dist/ui/components/FlowDiagram.d.ts +33 -0
  2019. package/dist/ui/components/FlowDiagram.js +15 -0
  2020. package/dist/ui/components/FlowDiagram.style.css +77 -0
  2021. package/dist/ui/components/Form.d.ts +27 -0
  2022. package/dist/ui/components/Form.js +48 -0
  2023. package/dist/ui/components/Form.style.css +27 -0
  2024. package/dist/ui/components/FormField.d.ts +26 -0
  2025. package/dist/ui/components/FormField.js +25 -0
  2026. package/dist/ui/components/FormField.style.css +30 -0
  2027. package/dist/ui/components/FormGrid.d.ts +46 -0
  2028. package/dist/ui/components/FormGrid.js +42 -0
  2029. package/dist/ui/components/FormGrid.style.css +32 -0
  2030. package/dist/ui/components/HorizontalScroller.d.ts +33 -0
  2031. package/dist/ui/components/HorizontalScroller.js +47 -0
  2032. package/dist/ui/components/HorizontalScroller.style.css +109 -0
  2033. package/dist/ui/components/IconButton.d.ts +32 -0
  2034. package/dist/ui/components/IconButton.js +31 -0
  2035. package/dist/ui/components/IconButton.style.css +103 -0
  2036. package/dist/ui/components/ImageGallery.d.ts +17 -0
  2037. package/dist/ui/components/ImageGallery.js +108 -0
  2038. package/dist/ui/components/ImageGallery.style.css +163 -0
  2039. package/dist/ui/components/ImageLightbox.d.ts +24 -0
  2040. package/dist/ui/components/ImageLightbox.js +61 -0
  2041. package/dist/ui/components/ImageLightbox.style.css +58 -0
  2042. package/dist/ui/components/Input.d.ts +12 -0
  2043. package/dist/ui/components/Input.js +29 -0
  2044. package/dist/ui/components/Input.style.css +28 -0
  2045. package/dist/ui/components/ItemRow.d.ts +10 -0
  2046. package/dist/ui/components/ItemRow.js +7 -0
  2047. package/dist/ui/components/ItemRow.style.css +33 -0
  2048. package/dist/ui/components/Layout.d.ts +282 -0
  2049. package/dist/ui/components/Layout.js +184 -0
  2050. package/dist/ui/components/Layout.style.css +212 -0
  2051. package/dist/ui/components/ListingLayout.d.ts +60 -0
  2052. package/dist/ui/components/ListingLayout.js +121 -0
  2053. package/dist/ui/components/ListingLayout.style.css +527 -0
  2054. package/dist/ui/components/ListingViewShell.d.ts +38 -0
  2055. package/dist/ui/components/ListingViewShell.js +11 -0
  2056. package/dist/ui/components/Menu.d.ts +29 -0
  2057. package/dist/ui/components/Menu.js +19 -0
  2058. package/dist/ui/components/Menu.style.css +6 -0
  2059. package/dist/ui/components/Modal.d.ts +18 -0
  2060. package/dist/ui/components/Modal.js +79 -0
  2061. package/dist/ui/components/Modal.style.css +102 -0
  2062. package/dist/ui/components/Pagination.d.ts +25 -0
  2063. package/dist/ui/components/Pagination.js +56 -0
  2064. package/dist/ui/components/Pagination.style.css +76 -0
  2065. package/dist/ui/components/PasswordStrengthIndicator.d.ts +12 -0
  2066. package/dist/ui/components/PasswordStrengthIndicator.js +35 -0
  2067. package/dist/ui/components/PasswordStrengthIndicator.style.css +56 -0
  2068. package/dist/ui/components/PriceDisplay.d.ts +8 -0
  2069. package/dist/ui/components/PriceDisplay.js +28 -0
  2070. package/dist/ui/components/PriceDisplay.style.css +47 -0
  2071. package/dist/ui/components/Progress.d.ts +23 -0
  2072. package/dist/ui/components/Progress.js +32 -0
  2073. package/dist/ui/components/Progress.style.css +81 -0
  2074. package/dist/ui/components/Radio.d.ts +18 -0
  2075. package/dist/ui/components/Radio.js +64 -0
  2076. package/dist/ui/components/Radio.style.css +155 -0
  2077. package/dist/ui/components/RatingDisplay.d.ts +8 -0
  2078. package/dist/ui/components/RatingDisplay.js +15 -0
  2079. package/dist/ui/components/RatingDisplay.style.css +50 -0
  2080. package/dist/ui/components/ResponsiveView.d.ts +12 -0
  2081. package/dist/ui/components/ResponsiveView.js +9 -0
  2082. package/dist/ui/components/ResponsiveView.style.css +69 -0
  2083. package/dist/ui/components/RoleBadge.d.ts +7 -0
  2084. package/dist/ui/components/RoleBadge.js +21 -0
  2085. package/dist/ui/components/RoleBadge.style.css +7 -0
  2086. package/dist/ui/components/RowActionMenu.d.ts +13 -0
  2087. package/dist/ui/components/RowActionMenu.js +17 -0
  2088. package/dist/ui/components/RowActionMenu.style.css +91 -0
  2089. package/dist/ui/components/SectionTabs.d.ts +19 -0
  2090. package/dist/ui/components/SectionTabs.js +66 -0
  2091. package/dist/ui/components/SectionTabs.style.css +163 -0
  2092. package/dist/ui/components/Select.d.ts +19 -0
  2093. package/dist/ui/components/Select.js +27 -0
  2094. package/dist/ui/components/Select.style.css +177 -0
  2095. package/dist/ui/components/Semantic.d.ts +154 -0
  2096. package/dist/ui/components/Semantic.js +32 -0
  2097. package/dist/ui/components/Semantic.style.css +14 -0
  2098. package/dist/ui/components/SideDrawer.d.ts +28 -0
  2099. package/dist/ui/components/SideDrawer.js +151 -0
  2100. package/dist/ui/components/SideDrawer.style.css +214 -0
  2101. package/dist/ui/components/SideModal.d.ts +25 -0
  2102. package/dist/ui/components/SideModal.js +61 -0
  2103. package/dist/ui/components/SideModal.style.css +77 -0
  2104. package/dist/ui/components/Skeleton.d.ts +14 -0
  2105. package/dist/ui/components/Skeleton.js +22 -0
  2106. package/dist/ui/components/Skeleton.style.css +55 -0
  2107. package/dist/ui/components/SkipToMain.d.ts +6 -0
  2108. package/dist/ui/components/SkipToMain.js +6 -0
  2109. package/dist/ui/components/SkipToMain.style.css +34 -0
  2110. package/dist/ui/components/Slider.d.ts +17 -0
  2111. package/dist/ui/components/Slider.js +38 -0
  2112. package/dist/ui/components/Slider.style.css +17 -0
  2113. package/dist/ui/components/SlottedListingView.d.ts +62 -0
  2114. package/dist/ui/components/SlottedListingView.js +41 -0
  2115. package/dist/ui/components/SortDropdown.d.ts +15 -0
  2116. package/dist/ui/components/SortDropdown.js +8 -0
  2117. package/dist/ui/components/SortDropdown.style.css +12 -0
  2118. package/dist/ui/components/Spinner.d.ts +13 -0
  2119. package/dist/ui/components/Spinner.js +15 -0
  2120. package/dist/ui/components/Spinner.style.css +76 -0
  2121. package/dist/ui/components/StackedViewShell.d.ts +50 -0
  2122. package/dist/ui/components/StackedViewShell.js +39 -0
  2123. package/dist/ui/components/StarRating.d.ts +17 -0
  2124. package/dist/ui/components/StarRating.js +29 -0
  2125. package/dist/ui/components/StarRating.style.css +44 -0
  2126. package/dist/ui/components/StatsGrid.d.ts +18 -0
  2127. package/dist/ui/components/StatsGrid.js +17 -0
  2128. package/dist/ui/components/StatsGrid.style.css +96 -0
  2129. package/dist/ui/components/StatusBadge.d.ts +18 -0
  2130. package/dist/ui/components/StatusBadge.js +60 -0
  2131. package/dist/ui/components/StatusBadge.style.css +5 -0
  2132. package/dist/ui/components/StepperNav.d.ts +10 -0
  2133. package/dist/ui/components/StepperNav.js +23 -0
  2134. package/dist/ui/components/StepperNav.style.css +110 -0
  2135. package/dist/ui/components/SummaryCard.d.ts +21 -0
  2136. package/dist/ui/components/SummaryCard.js +15 -0
  2137. package/dist/ui/components/SummaryCard.style.css +82 -0
  2138. package/dist/ui/components/TabStrip.d.ts +34 -0
  2139. package/dist/ui/components/TabStrip.js +57 -0
  2140. package/dist/ui/components/TabStrip.style.css +97 -0
  2141. package/dist/ui/components/TablePagination.d.ts +21 -0
  2142. package/dist/ui/components/TablePagination.js +32 -0
  2143. package/dist/ui/components/TablePagination.style.css +89 -0
  2144. package/dist/ui/components/Tabs.d.ts +28 -0
  2145. package/dist/ui/components/Tabs.js +41 -0
  2146. package/dist/ui/components/Tabs.style.css +46 -0
  2147. package/dist/ui/components/TagInput.d.ts +10 -0
  2148. package/dist/ui/components/TagInput.js +60 -0
  2149. package/dist/ui/components/TagInput.style.css +121 -0
  2150. package/dist/ui/components/TextLink.d.ts +42 -0
  2151. package/dist/ui/components/TextLink.js +48 -0
  2152. package/dist/ui/components/TextLink.style.css +94 -0
  2153. package/dist/ui/components/Textarea.d.ts +9 -0
  2154. package/dist/ui/components/Textarea.js +21 -0
  2155. package/dist/ui/components/Textarea.style.css +30 -0
  2156. package/dist/ui/components/Toast.d.ts +15 -0
  2157. package/dist/ui/components/Toast.js +61 -0
  2158. package/dist/ui/components/Toast.style.css +114 -0
  2159. package/dist/ui/components/Toggle.d.ts +12 -0
  2160. package/dist/ui/components/Toggle.js +47 -0
  2161. package/dist/ui/components/Toggle.style.css +107 -0
  2162. package/dist/ui/components/Tooltip.d.ts +34 -0
  2163. package/dist/ui/components/Tooltip.js +110 -0
  2164. package/dist/ui/components/Tooltip.style.css +114 -0
  2165. package/dist/ui/components/Typography.d.ts +50 -0
  2166. package/dist/ui/components/Typography.js +103 -0
  2167. package/dist/ui/components/Typography.style.css +178 -0
  2168. package/dist/ui/components/UnsavedChangesModal.d.ts +17 -0
  2169. package/dist/ui/components/UnsavedChangesModal.js +52 -0
  2170. package/dist/ui/components/UnsavedChangesModal.style.css +33 -0
  2171. package/dist/ui/components/ViewToggle.d.ts +15 -0
  2172. package/dist/ui/components/ViewToggle.js +29 -0
  2173. package/dist/ui/components/ViewToggle.style.css +50 -0
  2174. package/dist/ui/components/index.style.css +76 -0
  2175. package/dist/ui/index.d.ts +165 -1644
  2176. package/dist/ui/index.js +87 -4784
  2177. package/dist/ui/rich-text/RichText.d.ts +46 -0
  2178. package/dist/ui/rich-text/RichText.js +172 -0
  2179. package/dist/ui/rich-text/RichText.style.css +5 -0
  2180. package/dist/ui/rich-text/index.d.ts +2 -0
  2181. package/dist/ui/rich-text/index.js +1 -0
  2182. package/dist/ui/style.helper.d.ts +7 -0
  2183. package/dist/ui/style.helper.js +12 -0
  2184. package/dist/utils/animation.helper.d.ts +19 -0
  2185. package/dist/utils/animation.helper.js +19 -0
  2186. package/dist/utils/array.helper.d.ts +17 -0
  2187. package/dist/utils/array.helper.js +53 -0
  2188. package/dist/utils/business-day.d.ts +47 -0
  2189. package/dist/utils/business-day.js +68 -0
  2190. package/dist/utils/client.d.ts +1 -0
  2191. package/dist/utils/client.js +1 -0
  2192. package/dist/utils/color.helper.d.ts +32 -0
  2193. package/dist/utils/color.helper.js +51 -0
  2194. package/dist/utils/cookie.converter.d.ts +7 -0
  2195. package/dist/utils/cookie.converter.js +32 -0
  2196. package/dist/utils/date.formatter.d.ts +22 -0
  2197. package/dist/utils/date.formatter.js +194 -0
  2198. package/dist/utils/event-manager.d.ts +45 -0
  2199. package/dist/utils/event-manager.js +185 -0
  2200. package/dist/utils/filter.helper.d.ts +18 -0
  2201. package/dist/utils/filter.helper.js +21 -0
  2202. package/dist/utils/id-generators.d.ts +243 -0
  2203. package/dist/utils/id-generators.js +360 -0
  2204. package/dist/utils/index.d.ts +17 -545
  2205. package/dist/utils/index.js +18 -4
  2206. package/dist/utils/media-field.d.ts +2 -0
  2207. package/dist/utils/media-field.js +1 -0
  2208. package/dist/utils/number.formatter.d.ts +13 -0
  2209. package/dist/utils/number.formatter.js +100 -0
  2210. package/dist/utils/object.helper.d.ts +16 -0
  2211. package/dist/utils/object.helper.js +82 -0
  2212. package/dist/utils/pagination.helper.d.ts +23 -0
  2213. package/dist/utils/pagination.helper.js +24 -0
  2214. package/dist/utils/schema-ui.d.ts +83 -0
  2215. package/dist/utils/schema-ui.js +185 -0
  2216. package/dist/utils/sorting.helper.d.ts +7 -0
  2217. package/dist/utils/sorting.helper.js +16 -0
  2218. package/dist/utils/string.formatter.d.ts +19 -0
  2219. package/dist/utils/string.formatter.js +140 -0
  2220. package/dist/utils/type.converter.d.ts +14 -0
  2221. package/dist/utils/type.converter.js +61 -0
  2222. package/dist/validation/ZodSetup.d.ts +5 -0
  2223. package/dist/validation/ZodSetup.js +11 -0
  2224. package/dist/validation/email.validator.d.ts +7 -0
  2225. package/dist/validation/email.validator.js +33 -0
  2226. package/dist/validation/index.d.ts +9 -126
  2227. package/dist/validation/index.js +8 -4
  2228. package/dist/validation/input.validator.d.ts +11 -0
  2229. package/dist/validation/input.validator.js +33 -0
  2230. package/dist/validation/password.validator.d.ts +21 -0
  2231. package/dist/validation/password.validator.js +77 -0
  2232. package/dist/validation/phone.validator.d.ts +9 -0
  2233. package/dist/validation/phone.validator.js +41 -0
  2234. package/dist/validation/schemas.d.ts +267 -0
  2235. package/dist/validation/schemas.js +176 -0
  2236. package/dist/validation/url.validator.d.ts +7 -0
  2237. package/dist/validation/url.validator.js +44 -0
  2238. package/dist/validation/zod-error-map.d.ts +17 -0
  2239. package/dist/validation/zod-error-map.js +85 -0
  2240. package/dist/values/index.d.ts +6 -0
  2241. package/dist/values/index.js +6 -0
  2242. package/dist/values/success-messages.d.ts +242 -0
  2243. package/dist/values/success-messages.js +272 -0
  2244. package/package.json +87 -445
  2245. package/dist/chunk-2NMEKWO5.js +0 -35
  2246. package/dist/chunk-2NMEKWO5.js.map +0 -1
  2247. package/dist/chunk-6344OTT4.js +0 -329
  2248. package/dist/chunk-6344OTT4.js.map +0 -1
  2249. package/dist/chunk-7HUFI4MW.cjs +0 -941
  2250. package/dist/chunk-7HUFI4MW.cjs.map +0 -1
  2251. package/dist/chunk-AZ2XDBYA.cjs +0 -150
  2252. package/dist/chunk-AZ2XDBYA.cjs.map +0 -1
  2253. package/dist/chunk-CI4ZFLS7.js +0 -1162
  2254. package/dist/chunk-CI4ZFLS7.js.map +0 -1
  2255. package/dist/chunk-DSCHV5OD.js +0 -620
  2256. package/dist/chunk-DSCHV5OD.js.map +0 -1
  2257. package/dist/chunk-EEMSMWIZ.js +0 -566
  2258. package/dist/chunk-EEMSMWIZ.js.map +0 -1
  2259. package/dist/chunk-EPJNBIKL.js +0 -916
  2260. package/dist/chunk-EPJNBIKL.js.map +0 -1
  2261. package/dist/chunk-FJEY6LN2.cjs +0 -64
  2262. package/dist/chunk-FJEY6LN2.cjs.map +0 -1
  2263. package/dist/chunk-GZXXRVTM.cjs +0 -343
  2264. package/dist/chunk-GZXXRVTM.cjs.map +0 -1
  2265. package/dist/chunk-IE5L2QHV.js +0 -204
  2266. package/dist/chunk-IE5L2QHV.js.map +0 -1
  2267. package/dist/chunk-JPHORBTI.cjs +0 -366
  2268. package/dist/chunk-JPHORBTI.cjs.map +0 -1
  2269. package/dist/chunk-K4C5Z22R.js +0 -146
  2270. package/dist/chunk-K4C5Z22R.js.map +0 -1
  2271. package/dist/chunk-PAHR3D5L.js +0 -56
  2272. package/dist/chunk-PAHR3D5L.js.map +0 -1
  2273. package/dist/chunk-PE44UBFV.js +0 -324
  2274. package/dist/chunk-PE44UBFV.js.map +0 -1
  2275. package/dist/chunk-RNELVIKK.cjs +0 -1287
  2276. package/dist/chunk-RNELVIKK.cjs.map +0 -1
  2277. package/dist/chunk-S367Y35J.cjs +0 -39
  2278. package/dist/chunk-S367Y35J.cjs.map +0 -1
  2279. package/dist/chunk-ULLW73KN.cjs +0 -217
  2280. package/dist/chunk-ULLW73KN.cjs.map +0 -1
  2281. package/dist/chunk-UNYFAUWW.cjs +0 -630
  2282. package/dist/chunk-UNYFAUWW.cjs.map +0 -1
  2283. package/dist/chunk-V55QYTXF.js +0 -259
  2284. package/dist/chunk-V55QYTXF.js.map +0 -1
  2285. package/dist/chunk-WKVCFDEA.cjs +0 -599
  2286. package/dist/chunk-WKVCFDEA.cjs.map +0 -1
  2287. package/dist/chunk-YT4QVIBP.cjs +0 -292
  2288. package/dist/chunk-YT4QVIBP.cjs.map +0 -1
  2289. package/dist/cli/index.cjs +0 -155
  2290. package/dist/cli/index.cjs.map +0 -1
  2291. package/dist/cli/index.d.cts +0 -41
  2292. package/dist/cli/index.js.map +0 -1
  2293. package/dist/contracts/index.cjs +0 -37
  2294. package/dist/contracts/index.cjs.map +0 -1
  2295. package/dist/contracts/index.d.cts +0 -728
  2296. package/dist/contracts/index.js.map +0 -1
  2297. package/dist/core/index.cjs +0 -84
  2298. package/dist/core/index.cjs.map +0 -1
  2299. package/dist/core/index.d.cts +0 -329
  2300. package/dist/core/index.js.map +0 -1
  2301. package/dist/errors/index.cjs +0 -57
  2302. package/dist/errors/index.cjs.map +0 -1
  2303. package/dist/errors/index.d.cts +0 -96
  2304. package/dist/errors/index.js.map +0 -1
  2305. package/dist/extend-D57fwPSu.d.cts +0 -122
  2306. package/dist/extend-D57fwPSu.d.ts +0 -122
  2307. package/dist/extend-D_0wzsse.d.cts +0 -79
  2308. package/dist/extend-D_0wzsse.d.ts +0 -79
  2309. package/dist/extend-jcOQfU2G.d.cts +0 -162
  2310. package/dist/extend-jcOQfU2G.d.ts +0 -162
  2311. package/dist/feature-C8mVv66I.d.cts +0 -84
  2312. package/dist/feature-C8mVv66I.d.ts +0 -84
  2313. package/dist/feature-DENiK3vd.d.cts +0 -55
  2314. package/dist/feature-DENiK3vd.d.ts +0 -55
  2315. package/dist/feature-RWXQ_lnf.d.cts +0 -41
  2316. package/dist/feature-RWXQ_lnf.d.ts +0 -41
  2317. package/dist/features/about/index.cjs +0 -286
  2318. package/dist/features/about/index.cjs.map +0 -1
  2319. package/dist/features/about/index.d.cts +0 -42
  2320. package/dist/features/about/index.js.map +0 -1
  2321. package/dist/features/account/index.cjs +0 -1032
  2322. package/dist/features/account/index.cjs.map +0 -1
  2323. package/dist/features/account/index.d.cts +0 -555
  2324. package/dist/features/account/index.js.map +0 -1
  2325. package/dist/features/admin/index.cjs +0 -2747
  2326. package/dist/features/admin/index.cjs.map +0 -1
  2327. package/dist/features/admin/index.d.cts +0 -554
  2328. package/dist/features/admin/index.js.map +0 -1
  2329. package/dist/features/auctions/index.cjs +0 -1219
  2330. package/dist/features/auctions/index.cjs.map +0 -1
  2331. package/dist/features/auctions/index.d.cts +0 -513
  2332. package/dist/features/auctions/index.js.map +0 -1
  2333. package/dist/features/auth/index.cjs +0 -1897
  2334. package/dist/features/auth/index.cjs.map +0 -1
  2335. package/dist/features/auth/index.d.cts +0 -315
  2336. package/dist/features/auth/index.js.map +0 -1
  2337. package/dist/features/auth/server.cjs +0 -531
  2338. package/dist/features/auth/server.cjs.map +0 -1
  2339. package/dist/features/auth/server.d.cts +0 -24
  2340. package/dist/features/auth/server.js.map +0 -1
  2341. package/dist/features/before-after/index.cjs +0 -559
  2342. package/dist/features/before-after/index.cjs.map +0 -1
  2343. package/dist/features/before-after/index.d.cts +0 -128
  2344. package/dist/features/before-after/index.js.map +0 -1
  2345. package/dist/features/blog/index.cjs +0 -4088
  2346. package/dist/features/blog/index.cjs.map +0 -1
  2347. package/dist/features/blog/index.d.cts +0 -492
  2348. package/dist/features/blog/index.js.map +0 -1
  2349. package/dist/features/blog/server.cjs +0 -184
  2350. package/dist/features/blog/server.cjs.map +0 -1
  2351. package/dist/features/blog/server.d.cts +0 -74
  2352. package/dist/features/blog/server.js.map +0 -1
  2353. package/dist/features/cart/index.cjs +0 -1097
  2354. package/dist/features/cart/index.cjs.map +0 -1
  2355. package/dist/features/cart/index.d.cts +0 -451
  2356. package/dist/features/cart/index.js.map +0 -1
  2357. package/dist/features/categories/index.cjs +0 -2062
  2358. package/dist/features/categories/index.cjs.map +0 -1
  2359. package/dist/features/categories/index.d.cts +0 -461
  2360. package/dist/features/categories/index.js.map +0 -1
  2361. package/dist/features/categories/server.cjs +0 -796
  2362. package/dist/features/categories/server.cjs.map +0 -1
  2363. package/dist/features/categories/server.d.cts +0 -47
  2364. package/dist/features/categories/server.js.map +0 -1
  2365. package/dist/features/checkout/index.cjs +0 -200
  2366. package/dist/features/checkout/index.cjs.map +0 -1
  2367. package/dist/features/checkout/index.d.cts +0 -70
  2368. package/dist/features/checkout/index.js.map +0 -1
  2369. package/dist/features/cms/index.cjs +0 -5
  2370. package/dist/features/cms/index.cjs.map +0 -1
  2371. package/dist/features/cms/index.d.cts +0 -2
  2372. package/dist/features/cms/index.js.map +0 -1
  2373. package/dist/features/collections/index.cjs +0 -394
  2374. package/dist/features/collections/index.cjs.map +0 -1
  2375. package/dist/features/collections/index.d.cts +0 -148
  2376. package/dist/features/collections/index.js.map +0 -1
  2377. package/dist/features/consultation/index.cjs +0 -1099
  2378. package/dist/features/consultation/index.cjs.map +0 -1
  2379. package/dist/features/consultation/index.d.cts +0 -172
  2380. package/dist/features/consultation/index.js.map +0 -1
  2381. package/dist/features/contact/index.cjs +0 -593
  2382. package/dist/features/contact/index.cjs.map +0 -1
  2383. package/dist/features/contact/index.d.cts +0 -56
  2384. package/dist/features/contact/index.js.map +0 -1
  2385. package/dist/features/copilot/index.cjs +0 -688
  2386. package/dist/features/copilot/index.cjs.map +0 -1
  2387. package/dist/features/copilot/index.d.cts +0 -47
  2388. package/dist/features/copilot/index.js.map +0 -1
  2389. package/dist/features/corporate/index.cjs +0 -796
  2390. package/dist/features/corporate/index.cjs.map +0 -1
  2391. package/dist/features/corporate/index.d.cts +0 -183
  2392. package/dist/features/corporate/index.js.map +0 -1
  2393. package/dist/features/events/index.cjs +0 -1486
  2394. package/dist/features/events/index.cjs.map +0 -1
  2395. package/dist/features/events/index.d.cts +0 -841
  2396. package/dist/features/events/index.js.map +0 -1
  2397. package/dist/features/events/server.cjs +0 -199
  2398. package/dist/features/events/server.cjs.map +0 -1
  2399. package/dist/features/events/server.d.cts +0 -40
  2400. package/dist/features/events/server.js.map +0 -1
  2401. package/dist/features/faq/index.cjs +0 -1714
  2402. package/dist/features/faq/index.cjs.map +0 -1
  2403. package/dist/features/faq/index.d.cts +0 -619
  2404. package/dist/features/faq/index.js.map +0 -1
  2405. package/dist/features/filters/index.cjs +0 -1073
  2406. package/dist/features/filters/index.cjs.map +0 -1
  2407. package/dist/features/filters/index.d.cts +0 -136
  2408. package/dist/features/filters/index.js.map +0 -1
  2409. package/dist/features/forms/index.cjs +0 -936
  2410. package/dist/features/forms/index.cjs.map +0 -1
  2411. package/dist/features/forms/index.d.cts +0 -129
  2412. package/dist/features/forms/index.js.map +0 -1
  2413. package/dist/features/homepage/index.cjs +0 -6321
  2414. package/dist/features/homepage/index.cjs.map +0 -1
  2415. package/dist/features/homepage/index.d.cts +0 -846
  2416. package/dist/features/homepage/index.js.map +0 -1
  2417. package/dist/features/homepage/server.cjs +0 -1038
  2418. package/dist/features/homepage/server.cjs.map +0 -1
  2419. package/dist/features/homepage/server.d.cts +0 -121
  2420. package/dist/features/homepage/server.js.map +0 -1
  2421. package/dist/features/layout/index.cjs +0 -1766
  2422. package/dist/features/layout/index.cjs.map +0 -1
  2423. package/dist/features/layout/index.d.cts +0 -315
  2424. package/dist/features/layout/index.js.map +0 -1
  2425. package/dist/features/loyalty/index.cjs +0 -352
  2426. package/dist/features/loyalty/index.cjs.map +0 -1
  2427. package/dist/features/loyalty/index.d.cts +0 -174
  2428. package/dist/features/loyalty/index.js.map +0 -1
  2429. package/dist/features/media/index.cjs +0 -3620
  2430. package/dist/features/media/index.cjs.map +0 -1
  2431. package/dist/features/media/index.d.cts +0 -425
  2432. package/dist/features/media/index.js.map +0 -1
  2433. package/dist/features/orders/index.cjs +0 -882
  2434. package/dist/features/orders/index.cjs.map +0 -1
  2435. package/dist/features/orders/index.d.cts +0 -370
  2436. package/dist/features/orders/index.js.map +0 -1
  2437. package/dist/features/payments/index.cjs +0 -341
  2438. package/dist/features/payments/index.cjs.map +0 -1
  2439. package/dist/features/payments/index.d.cts +0 -141
  2440. package/dist/features/payments/index.js.map +0 -1
  2441. package/dist/features/pre-orders/index.cjs +0 -558
  2442. package/dist/features/pre-orders/index.cjs.map +0 -1
  2443. package/dist/features/pre-orders/index.d.cts +0 -170
  2444. package/dist/features/pre-orders/index.js.map +0 -1
  2445. package/dist/features/pre-orders/server.cjs +0 -111
  2446. package/dist/features/pre-orders/server.cjs.map +0 -1
  2447. package/dist/features/pre-orders/server.d.cts +0 -17
  2448. package/dist/features/pre-orders/server.js.map +0 -1
  2449. package/dist/features/products/index.cjs +0 -2513
  2450. package/dist/features/products/index.cjs.map +0 -1
  2451. package/dist/features/products/index.d.cts +0 -1066
  2452. package/dist/features/products/index.js.map +0 -1
  2453. package/dist/features/products/server.cjs +0 -809
  2454. package/dist/features/products/server.cjs.map +0 -1
  2455. package/dist/features/products/server.d.cts +0 -52
  2456. package/dist/features/products/server.js.map +0 -1
  2457. package/dist/features/promotions/index.cjs +0 -977
  2458. package/dist/features/promotions/index.cjs.map +0 -1
  2459. package/dist/features/promotions/index.d.cts +0 -301
  2460. package/dist/features/promotions/index.js.map +0 -1
  2461. package/dist/features/reviews/index.cjs +0 -2324
  2462. package/dist/features/reviews/index.cjs.map +0 -1
  2463. package/dist/features/reviews/index.d.cts +0 -434
  2464. package/dist/features/reviews/index.js.map +0 -1
  2465. package/dist/features/reviews/server.cjs +0 -776
  2466. package/dist/features/reviews/server.cjs.map +0 -1
  2467. package/dist/features/reviews/server.d.cts +0 -49
  2468. package/dist/features/reviews/server.js.map +0 -1
  2469. package/dist/features/search/index.cjs +0 -1368
  2470. package/dist/features/search/index.cjs.map +0 -1
  2471. package/dist/features/search/index.d.cts +0 -298
  2472. package/dist/features/search/index.js.map +0 -1
  2473. package/dist/features/search/server.cjs +0 -154
  2474. package/dist/features/search/server.cjs.map +0 -1
  2475. package/dist/features/search/server.d.cts +0 -83
  2476. package/dist/features/search/server.js.map +0 -1
  2477. package/dist/features/seller/index.cjs +0 -2086
  2478. package/dist/features/seller/index.cjs.map +0 -1
  2479. package/dist/features/seller/index.d.cts +0 -926
  2480. package/dist/features/seller/index.js.map +0 -1
  2481. package/dist/features/stores/index.cjs +0 -1942
  2482. package/dist/features/stores/index.cjs.map +0 -1
  2483. package/dist/features/stores/index.d.cts +0 -536
  2484. package/dist/features/stores/index.js.map +0 -1
  2485. package/dist/features/stores/server.cjs +0 -451
  2486. package/dist/features/stores/server.cjs.map +0 -1
  2487. package/dist/features/stores/server.d.cts +0 -106
  2488. package/dist/features/stores/server.js.map +0 -1
  2489. package/dist/features/whatsapp-bot/index.cjs +0 -168
  2490. package/dist/features/whatsapp-bot/index.cjs.map +0 -1
  2491. package/dist/features/whatsapp-bot/index.d.cts +0 -85
  2492. package/dist/features/whatsapp-bot/index.js.map +0 -1
  2493. package/dist/features/wishlist/index.cjs +0 -904
  2494. package/dist/features/wishlist/index.cjs.map +0 -1
  2495. package/dist/features/wishlist/index.d.cts +0 -360
  2496. package/dist/features/wishlist/index.js.map +0 -1
  2497. package/dist/http/index.cjs +0 -21
  2498. package/dist/http/index.cjs.map +0 -1
  2499. package/dist/http/index.d.cts +0 -61
  2500. package/dist/http/index.js.map +0 -1
  2501. package/dist/index-B6T9NNcG.d.cts +0 -9
  2502. package/dist/index-B6T9NNcG.d.ts +0 -9
  2503. package/dist/index-CakUKzrE.d.cts +0 -10
  2504. package/dist/index-CakUKzrE.d.ts +0 -10
  2505. package/dist/index-D0Fxv9Z8.d.cts +0 -32
  2506. package/dist/index-D0Fxv9Z8.d.ts +0 -32
  2507. package/dist/index-Dh42RtMY.d.cts +0 -54
  2508. package/dist/index-Dh42RtMY.d.ts +0 -54
  2509. package/dist/index.cjs +0 -1182
  2510. package/dist/index.cjs.map +0 -1
  2511. package/dist/index.d.cts +0 -17
  2512. package/dist/index.js.map +0 -1
  2513. package/dist/instrumentation/index.cjs +0 -17
  2514. package/dist/instrumentation/index.cjs.map +0 -1
  2515. package/dist/instrumentation/index.d.cts +0 -66
  2516. package/dist/instrumentation/index.js.map +0 -1
  2517. package/dist/monitoring/index.cjs +0 -141
  2518. package/dist/monitoring/index.cjs.map +0 -1
  2519. package/dist/monitoring/index.d.cts +0 -181
  2520. package/dist/monitoring/index.js.map +0 -1
  2521. package/dist/next/index.cjs +0 -693
  2522. package/dist/next/index.cjs.map +0 -1
  2523. package/dist/next/index.d.cts +0 -777
  2524. package/dist/next/index.js.map +0 -1
  2525. package/dist/providers/auth-firebase/index.cjs +0 -400
  2526. package/dist/providers/auth-firebase/index.cjs.map +0 -1
  2527. package/dist/providers/auth-firebase/index.d.cts +0 -137
  2528. package/dist/providers/auth-firebase/index.js.map +0 -1
  2529. package/dist/providers/db-firebase/index.cjs +0 -533
  2530. package/dist/providers/db-firebase/index.cjs.map +0 -1
  2531. package/dist/providers/db-firebase/index.d.cts +0 -265
  2532. package/dist/providers/db-firebase/index.js.map +0 -1
  2533. package/dist/providers/email-resend/index.cjs +0 -58
  2534. package/dist/providers/email-resend/index.cjs.map +0 -1
  2535. package/dist/providers/email-resend/index.d.cts +0 -73
  2536. package/dist/providers/email-resend/index.js.map +0 -1
  2537. package/dist/providers/payment-razorpay/index.cjs +0 -111
  2538. package/dist/providers/payment-razorpay/index.cjs.map +0 -1
  2539. package/dist/providers/payment-razorpay/index.d.cts +0 -96
  2540. package/dist/providers/payment-razorpay/index.js.map +0 -1
  2541. package/dist/providers/search-algolia/index.cjs +0 -301
  2542. package/dist/providers/search-algolia/index.cjs.map +0 -1
  2543. package/dist/providers/search-algolia/index.d.cts +0 -251
  2544. package/dist/providers/search-algolia/index.d.ts +0 -251
  2545. package/dist/providers/search-algolia/index.js +0 -280
  2546. package/dist/providers/search-algolia/index.js.map +0 -1
  2547. package/dist/providers/shipping-shiprocket/index.cjs +0 -147
  2548. package/dist/providers/shipping-shiprocket/index.cjs.map +0 -1
  2549. package/dist/providers/shipping-shiprocket/index.d.cts +0 -236
  2550. package/dist/providers/shipping-shiprocket/index.js.map +0 -1
  2551. package/dist/providers/storage-firebase/index.cjs +0 -176
  2552. package/dist/providers/storage-firebase/index.cjs.map +0 -1
  2553. package/dist/providers/storage-firebase/index.d.cts +0 -53
  2554. package/dist/providers/storage-firebase/index.js.map +0 -1
  2555. package/dist/react/index.cjs +0 -1687
  2556. package/dist/react/index.cjs.map +0 -1
  2557. package/dist/react/index.d.cts +0 -788
  2558. package/dist/react/index.js.map +0 -1
  2559. package/dist/repository-BO60jtdT.d.cts +0 -61
  2560. package/dist/repository-BO60jtdT.d.ts +0 -61
  2561. package/dist/repository-jKU_Ji1P.d.cts +0 -44
  2562. package/dist/repository-jKU_Ji1P.d.ts +0 -44
  2563. package/dist/security/index.cjs +0 -138
  2564. package/dist/security/index.cjs.map +0 -1
  2565. package/dist/security/index.d.cts +0 -309
  2566. package/dist/security/index.js.map +0 -1
  2567. package/dist/seed/index.cjs +0 -1085
  2568. package/dist/seed/index.cjs.map +0 -1
  2569. package/dist/seed/index.d.cts +0 -397
  2570. package/dist/seed/index.js.map +0 -1
  2571. package/dist/seo/index.cjs +0 -81
  2572. package/dist/seo/index.cjs.map +0 -1
  2573. package/dist/seo/index.d.cts +0 -150
  2574. package/dist/seo/index.js.map +0 -1
  2575. package/dist/style/tailwind/index.cjs +0 -40
  2576. package/dist/style/tailwind/index.cjs.map +0 -1
  2577. package/dist/style/tailwind/index.d.cts +0 -34
  2578. package/dist/style/tailwind/index.js.map +0 -1
  2579. package/dist/style/vanilla/index.cjs +0 -40
  2580. package/dist/style/vanilla/index.cjs.map +0 -1
  2581. package/dist/style/vanilla/index.d.cts +0 -26
  2582. package/dist/style/vanilla/index.js.map +0 -1
  2583. package/dist/style-BSlM-eWG.d.cts +0 -25
  2584. package/dist/style-BSlM-eWG.d.ts +0 -25
  2585. package/dist/tokens/index.cjs +0 -45
  2586. package/dist/tokens/index.cjs.map +0 -1
  2587. package/dist/tokens/index.d.cts +0 -734
  2588. package/dist/tokens/index.js.map +0 -1
  2589. package/dist/ui/index.cjs +0 -4870
  2590. package/dist/ui/index.cjs.map +0 -1
  2591. package/dist/ui/index.d.cts +0 -1644
  2592. package/dist/ui/index.js.map +0 -1
  2593. package/dist/utils/index.cjs +0 -505
  2594. package/dist/utils/index.cjs.map +0 -1
  2595. package/dist/utils/index.d.cts +0 -545
  2596. package/dist/utils/index.js.map +0 -1
  2597. package/dist/validation/index.cjs +0 -153
  2598. package/dist/validation/index.cjs.map +0 -1
  2599. package/dist/validation/index.d.cts +0 -126
  2600. package/dist/validation/index.js.map +0 -1
@@ -1,4062 +1,6 @@
1
- "use client";
2
- import { NextResponse } from 'next/server.js';
3
- import { useQuery, useMutation } from '@tanstack/react-query';
4
- import React, { createContext, forwardRef, createElement, useContext, useState, useRef, useEffect, useId, useCallback } from 'react';
5
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
- import { twMerge } from 'tailwind-merge';
7
- import 'next/link';
8
- import { createPortal } from 'react-dom';
9
- import { z } from 'zod';
10
- import Image from 'next/image';
11
- import { useTranslations } from 'next-intl';
12
- import 'next/navigation';
13
- import 'crypto';
14
-
15
- var __defProp = Object.defineProperty;
16
- var __defProps = Object.defineProperties;
17
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
18
- var __getOwnPropNames = Object.getOwnPropertyNames;
19
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
20
- var __hasOwnProp = Object.prototype.hasOwnProperty;
21
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
22
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
23
- var __spreadValues = (a, b) => {
24
- for (var prop in b || (b = {}))
25
- if (__hasOwnProp.call(b, prop))
26
- __defNormalProp(a, prop, b[prop]);
27
- if (__getOwnPropSymbols)
28
- for (var prop of __getOwnPropSymbols(b)) {
29
- if (__propIsEnum.call(b, prop))
30
- __defNormalProp(a, prop, b[prop]);
31
- }
32
- return a;
33
- };
34
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
35
- var __objRest = (source, exclude) => {
36
- var target = {};
37
- for (var prop in source)
38
- if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
39
- target[prop] = source[prop];
40
- if (source != null && __getOwnPropSymbols)
41
- for (var prop of __getOwnPropSymbols(source)) {
42
- if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
43
- target[prop] = source[prop];
44
- }
45
- return target;
46
- };
47
- var __esm = (fn, res) => function __init() {
48
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
49
- };
50
-
51
- // src/errors/base-error.ts
52
- var init_base_error = __esm({
53
- "src/errors/base-error.ts"() {
54
- }
55
- });
56
-
57
- // src/errors/error-codes.ts
58
- var init_error_codes = __esm({
59
- "src/errors/error-codes.ts"() {
60
- }
61
- });
62
-
63
- // src/errors/api-error.ts
64
- var init_api_error = __esm({
65
- "src/errors/api-error.ts"() {
66
- init_base_error();
67
- }
68
- });
69
-
70
- // src/errors/validation-error.ts
71
- var init_validation_error = __esm({
72
- "src/errors/validation-error.ts"() {
73
- init_base_error();
74
- }
75
- });
76
-
77
- // src/errors/authentication-error.ts
78
- var init_authentication_error = __esm({
79
- "src/errors/authentication-error.ts"() {
80
- init_base_error();
81
- }
82
- });
83
-
84
- // src/errors/authorization-error.ts
85
- var init_authorization_error = __esm({
86
- "src/errors/authorization-error.ts"() {
87
- init_base_error();
88
- }
89
- });
90
-
91
- // src/errors/not-found-error.ts
92
- var init_not_found_error = __esm({
93
- "src/errors/not-found-error.ts"() {
94
- init_base_error();
95
- }
96
- });
97
-
98
- // src/errors/database-error.ts
99
- var init_database_error = __esm({
100
- "src/errors/database-error.ts"() {
101
- init_base_error();
102
- }
103
- });
104
- var init_error_handler = __esm({
105
- "src/errors/error-handler.ts"() {
106
- init_base_error();
107
- init_error_codes();
108
- }
109
- });
110
-
111
- // src/errors/index.ts
112
- var init_errors = __esm({
113
- "src/errors/index.ts"() {
114
- init_base_error();
115
- init_error_codes();
116
- init_api_error();
117
- init_validation_error();
118
- init_authentication_error();
119
- init_authorization_error();
120
- init_not_found_error();
121
- init_database_error();
122
- init_error_handler();
123
- }
124
- });
125
-
126
- // src/http/ApiClient.ts
127
- var ApiClientError = class extends Error {
128
- constructor(message, status, data) {
129
- super(message);
130
- this.status = status;
131
- this.data = data;
132
- this.name = "ApiClientError";
133
- }
134
- };
135
- var ApiClient = class {
136
- constructor(options) {
137
- var _a, _b, _c;
138
- this.baseURL = (_b = (_a = options == null ? void 0 : options.baseURL) != null ? _a : process.env.NEXT_PUBLIC_APP_URL) != null ? _b : "";
139
- this.defaultTimeout = (_c = options == null ? void 0 : options.defaultTimeout) != null ? _c : 12e4;
140
- }
141
- buildURL(endpoint, params) {
142
- var _a;
143
- const origin = this.baseURL || (typeof window !== "undefined" ? window.location.origin : (_a = process.env.NEXT_PUBLIC_APP_URL) != null ? _a : "http://localhost:3000");
144
- const url = new URL(endpoint, origin);
145
- if (params) {
146
- Object.entries(params).forEach(
147
- ([key, value]) => url.searchParams.append(key, String(value))
148
- );
149
- }
150
- return url.toString();
151
- }
152
- async getHeaders(method, customHeaders) {
153
- const hasBody = !["GET", "HEAD", "DELETE"].includes(method.toUpperCase());
154
- return __spreadValues(__spreadValues({}, hasBody ? { "Content-Type": "application/json" } : {}), customHeaders);
155
- }
156
- async request(endpoint, config = {}) {
157
- var _b, _c, _d, _e, _f;
158
- const _a = config, {
159
- params,
160
- timeout = this.defaultTimeout,
161
- headers: customHeaders,
162
- signal: externalSignal
163
- } = _a, fetchConfig = __objRest(_a, [
164
- "params",
165
- "timeout",
166
- "headers",
167
- "signal"
168
- ]);
169
- const method = ((_b = fetchConfig.method) != null ? _b : "GET").toUpperCase();
170
- const url = this.buildURL(endpoint, params);
171
- const headers = await this.getHeaders(method, customHeaders);
172
- const controller = new AbortController();
173
- const timeoutId = setTimeout(() => controller.abort(), timeout);
174
- let onAbort = null;
175
- if (externalSignal) {
176
- if (externalSignal.aborted) {
177
- controller.abort();
178
- } else {
179
- onAbort = () => controller.abort();
180
- externalSignal.addEventListener("abort", onAbort);
181
- }
182
- }
183
- try {
184
- const response = await fetch(url, __spreadProps(__spreadValues({}, fetchConfig), {
185
- headers,
186
- signal: controller.signal,
187
- credentials: "include"
188
- }));
189
- clearTimeout(timeoutId);
190
- const data = await response.json().catch(() => ({
191
- success: false,
192
- error: "Invalid JSON response"
193
- }));
194
- if (!response.ok) {
195
- throw new ApiClientError(
196
- (_d = (_c = data.error) != null ? _c : data.message) != null ? _d : `Request failed with status ${response.status}`,
197
- response.status,
198
- data
199
- );
200
- }
201
- if (!data.success) {
202
- throw new ApiClientError(
203
- (_f = (_e = data.error) != null ? _e : data.message) != null ? _f : "Request failed",
204
- response.status,
205
- data
206
- );
207
- }
208
- return data.data;
209
- } catch (error) {
210
- clearTimeout(timeoutId);
211
- if (error instanceof Error && error.name === "AbortError") {
212
- if (externalSignal == null ? void 0 : externalSignal.aborted) throw error;
213
- throw new ApiClientError("Request timeout", 408);
214
- }
215
- if (error instanceof TypeError) {
216
- throw new ApiClientError(
217
- "Network error. Please check your connection.",
218
- 0
219
- );
220
- }
221
- if (error instanceof ApiClientError) throw error;
222
- throw new ApiClientError(
223
- error instanceof Error ? error.message : "An unexpected error occurred",
224
- 500
225
- );
226
- } finally {
227
- if (onAbort) externalSignal == null ? void 0 : externalSignal.removeEventListener("abort", onAbort);
228
- }
229
- }
230
- async get(endpoint, config) {
231
- return this.request(endpoint, __spreadProps(__spreadValues({}, config), { method: "GET" }));
232
- }
233
- async post(endpoint, data, config) {
234
- return this.request(endpoint, __spreadProps(__spreadValues({}, config), {
235
- method: "POST",
236
- body: data != null ? JSON.stringify(data) : void 0
237
- }));
238
- }
239
- async put(endpoint, data, config) {
240
- return this.request(endpoint, __spreadProps(__spreadValues({}, config), {
241
- method: "PUT",
242
- body: data != null ? JSON.stringify(data) : void 0
243
- }));
244
- }
245
- async patch(endpoint, data, config) {
246
- return this.request(endpoint, __spreadProps(__spreadValues({}, config), {
247
- method: "PATCH",
248
- body: data != null ? JSON.stringify(data) : void 0
249
- }));
250
- }
251
- async delete(endpoint, config) {
252
- return this.request(endpoint, __spreadProps(__spreadValues({}, config), { method: "DELETE" }));
253
- }
254
- async upload(endpoint, formData, config) {
255
- const _a = config != null ? config : {}, { headers } = _a, restConfig = __objRest(_a, ["headers"]);
256
- const uploadHeaders = await this.getHeaders("POST", headers);
257
- delete uploadHeaders["Content-Type"];
258
- return this.request(endpoint, __spreadProps(__spreadValues({}, restConfig), {
259
- method: "POST",
260
- body: formData,
261
- headers: uploadHeaders
262
- }));
263
- }
264
- };
265
- var apiClient = new ApiClient();
266
-
267
- // src/features/blog/hooks/useBlog.ts
268
- function useBlogPosts(params = {}, opts) {
269
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
270
- const searchParams = new URLSearchParams();
271
- if (params.category) searchParams.set("category", params.category);
272
- if (params.q) searchParams.set("q", params.q);
273
- if (params.tags) searchParams.set("tags", params.tags);
274
- if (params.page) searchParams.set("page", String(params.page));
275
- if (params.perPage) searchParams.set("perPage", String(params.perPage));
276
- if (params.sort) searchParams.set("sort", params.sort);
277
- if (params.featured !== void 0)
278
- searchParams.set("featured", String(params.featured));
279
- const qs = searchParams.toString();
280
- const query = useQuery({
281
- queryKey: ["blog", qs],
282
- queryFn: () => apiClient.get(`/api/blog${qs ? `?${qs}` : ""}`),
283
- initialData: opts == null ? void 0 : opts.initialData,
284
- enabled: opts == null ? void 0 : opts.enabled
285
- });
286
- return {
287
- posts: (_b = (_a = query.data) == null ? void 0 : _a.posts) != null ? _b : [],
288
- meta: (_c = query.data) == null ? void 0 : _c.meta,
289
- total: (_f = (_e = (_d = query.data) == null ? void 0 : _d.meta) == null ? void 0 : _e.total) != null ? _f : 0,
290
- totalPages: (_i = (_h = (_g = query.data) == null ? void 0 : _g.meta) == null ? void 0 : _h.totalPages) != null ? _i : 1,
291
- page: (_l = (_k = (_j = query.data) == null ? void 0 : _j.meta) == null ? void 0 : _k.page) != null ? _l : 1,
292
- isLoading: query.isLoading,
293
- error: query.error
294
- };
295
- }
296
- function useBlogPost(slug, opts) {
297
- var _a, _b, _c, _d;
298
- const query = useQuery({
299
- queryKey: ["blog", "post", slug],
300
- queryFn: () => apiClient.get(`/api/blog/${slug}`),
301
- initialData: opts == null ? void 0 : opts.initialData,
302
- enabled: (opts == null ? void 0 : opts.enabled) !== false && !!slug
303
- });
304
- return {
305
- post: (_b = (_a = query.data) == null ? void 0 : _a.post) != null ? _b : null,
306
- related: (_d = (_c = query.data) == null ? void 0 : _c.related) != null ? _d : [],
307
- isLoading: query.isLoading,
308
- error: query.error
309
- };
310
- }
311
- var Section = React.forwardRef(
312
- (_a, ref) => {
313
- var _b = _a, { className = "", children } = _b, props = __objRest(_b, ["className", "children"]);
314
- return /* @__PURE__ */ jsx("section", __spreadProps(__spreadValues({ className, ref }, props), { children }));
315
- }
316
- );
317
- Section.displayName = "Section";
318
- function Article(_a) {
319
- var _b = _a, { className = "", children } = _b, props = __objRest(_b, ["className", "children"]);
320
- return /* @__PURE__ */ jsx("article", __spreadProps(__spreadValues({ className }, props), { children }));
321
- }
322
- var Aside = React.forwardRef(
323
- (_a, ref) => {
324
- var _b = _a, { className = "", children } = _b, props = __objRest(_b, ["className", "children"]);
325
- return /* @__PURE__ */ jsx("aside", __spreadProps(__spreadValues({ className, ref }, props), { children }));
326
- }
327
- );
328
- Aside.displayName = "Aside";
329
- function Ul(_a) {
330
- var _b = _a, { className = "", children } = _b, props = __objRest(_b, ["className", "children"]);
331
- return /* @__PURE__ */ jsx("ul", __spreadProps(__spreadValues({ className }, props), { children }));
332
- }
333
- function Li(_a) {
334
- var _b = _a, { className = "", children } = _b, props = __objRest(_b, ["className", "children"]);
335
- return /* @__PURE__ */ jsx("li", __spreadProps(__spreadValues({ className }, props), { children }));
336
- }
337
- var Div = React.forwardRef(
338
- (_a, ref) => {
339
- var _b = _a, { className = "", children } = _b, props = __objRest(_b, ["className", "children"]);
340
- return /* @__PURE__ */ jsx("div", __spreadProps(__spreadValues({ ref, className }, props), { children }));
341
- }
342
- );
343
- Div.displayName = "Div";
344
- var UI_THEME = {
345
- typography: {
346
- h1: "text-3xl md:text-4xl lg:text-5xl font-bold tracking-tight font-display",
347
- h2: "text-2xl md:text-3xl lg:text-4xl font-bold tracking-tight font-display",
348
- h3: "text-xl md:text-2xl lg:text-3xl font-bold tracking-tight font-display",
349
- h4: "text-lg md:text-xl lg:text-2xl font-bold font-display",
350
- h5: "text-base md:text-lg lg:text-xl font-medium",
351
- h6: "text-sm md:text-base lg:text-lg font-medium",
352
- body: "text-base lg:text-lg",
353
- small: "text-sm lg:text-base",
354
- xs: "text-xs lg:text-sm"
355
- },
356
- themed: {
357
- textPrimary: "text-zinc-900 dark:text-zinc-50",
358
- textSecondary: "text-zinc-500 dark:text-zinc-400",
359
- textMuted: "text-zinc-400 dark:text-zinc-500",
360
- textError: "text-red-600 dark:text-red-400",
361
- textSuccess: "text-emerald-600 dark:text-emerald-400"
362
- },
363
- colors: {
364
- form: {
365
- required: "text-red-500"
366
- }
367
- }
368
- };
369
- function Heading(_a) {
370
- var _b = _a, {
371
- level = 1,
372
- variant = "primary",
373
- className = "",
374
- children
375
- } = _b, props = __objRest(_b, [
376
- "level",
377
- "variant",
378
- "className",
379
- "children"
380
- ]);
381
- const Tag = `h${level}`;
382
- const { typography, themed } = UI_THEME;
383
- const sizeClasses = {
384
- 1: typography.h1,
385
- 2: typography.h2,
386
- 3: typography.h3,
387
- 4: typography.h4,
388
- 5: typography.h5,
389
- 6: typography.h6
390
- };
391
- const variantClasses = {
392
- primary: themed.textPrimary,
393
- secondary: themed.textSecondary,
394
- muted: themed.textMuted,
395
- none: ""
396
- };
397
- return /* @__PURE__ */ jsx(
398
- Tag,
399
- __spreadProps(__spreadValues({
400
- className: `${sizeClasses[level]} ${variantClasses[variant]} ${className}`
401
- }, props), {
402
- children
403
- })
404
- );
405
- }
406
- function Text(_a) {
407
- var _b = _a, {
408
- variant = "primary",
409
- size = "base",
410
- weight = "normal",
411
- className = "",
412
- as: Tag = "p",
413
- children
414
- } = _b, props = __objRest(_b, [
415
- "variant",
416
- "size",
417
- "weight",
418
- "className",
419
- "as",
420
- "children"
421
- ]);
422
- const { typography, themed } = UI_THEME;
423
- const sizeClasses = {
424
- xs: typography.xs,
425
- sm: typography.small,
426
- base: typography.body,
427
- lg: "text-lg",
428
- xl: "text-xl"
429
- };
430
- const weightClasses = {
431
- normal: "font-normal",
432
- medium: "font-medium",
433
- semibold: "font-semibold",
434
- bold: "font-bold"
435
- };
436
- const variantClasses = {
437
- primary: themed.textPrimary,
438
- secondary: themed.textSecondary,
439
- muted: themed.textMuted,
440
- error: themed.textError,
441
- success: themed.textSuccess,
442
- none: ""
443
- };
444
- return /* @__PURE__ */ jsx(
445
- Tag,
446
- __spreadProps(__spreadValues({
447
- className: `${sizeClasses[size]} ${weightClasses[weight]} ${variantClasses[variant]} ${className}`
448
- }, props), {
449
- children
450
- })
451
- );
452
- }
453
- function Label(_a) {
454
- var _b = _a, {
455
- required,
456
- className = "",
457
- children
458
- } = _b, props = __objRest(_b, [
459
- "required",
460
- "className",
461
- "children"
462
- ]);
463
- const { themed, typography, colors } = UI_THEME;
464
- return /* @__PURE__ */ jsxs(
465
- "label",
466
- __spreadProps(__spreadValues({
467
- className: `block ${typography.small} font-medium ${themed.textSecondary} mb-1.5 ${className}`
468
- }, props), {
469
- children: [
470
- children,
471
- required && /* @__PURE__ */ jsx("span", { className: `${colors.form.required} ml-1`, children: "*" })
472
- ]
473
- })
474
- );
475
- }
476
- function Span(_a) {
477
- var _b = _a, {
478
- variant = "inherit",
479
- size,
480
- weight,
481
- className = "",
482
- children
483
- } = _b, props = __objRest(_b, [
484
- "variant",
485
- "size",
486
- "weight",
487
- "className",
488
- "children"
489
- ]);
490
- const { themed, typography } = UI_THEME;
491
- const variantClasses = {
492
- inherit: "",
493
- primary: themed.textPrimary,
494
- secondary: themed.textSecondary,
495
- muted: themed.textMuted,
496
- error: themed.textError,
497
- success: themed.textSuccess,
498
- accent: "text-primary"
499
- };
500
- const sizeClasses = {
501
- xs: typography.xs,
502
- sm: typography.small,
503
- base: typography.body,
504
- lg: "text-lg",
505
- xl: "text-xl"
506
- };
507
- const weightClasses = {
508
- normal: "font-normal",
509
- medium: "font-medium",
510
- semibold: "font-semibold",
511
- bold: "font-bold"
512
- };
513
- const classes = [
514
- size ? sizeClasses[size] : "",
515
- weight ? weightClasses[weight] : "",
516
- variantClasses[variant],
517
- className
518
- ].filter(Boolean).join(" ");
519
- return /* @__PURE__ */ jsx("span", __spreadProps(__spreadValues({ className: classes }, props), { children }));
520
- }
521
- function Spinner({
522
- size = "md",
523
- variant = "primary",
524
- className = "",
525
- label = "Loading..."
526
- }) {
527
- const sizeClasses = {
528
- sm: "w-4 h-4 border-2",
529
- md: "w-8 h-8 border-2",
530
- lg: "w-12 h-12 border-[3px]",
531
- xl: "w-16 h-16 border-4"
532
- };
533
- const variantClasses = {
534
- primary: "border-primary-600 border-t-transparent dark:border-secondary-500 dark:border-t-transparent",
535
- white: "border-white border-t-transparent",
536
- current: "border-current border-t-transparent"
537
- };
538
- return /* @__PURE__ */ jsxs(
539
- "div",
540
- {
541
- className: `inline-flex items-center gap-3 ${className}`,
542
- role: "status",
543
- "aria-label": label,
544
- children: [
545
- /* @__PURE__ */ jsx(
546
- "div",
547
- {
548
- className: `${sizeClasses[size]} ${variantClasses[variant]} rounded-full animate-spin force-spin`
549
- }
550
- ),
551
- label && /* @__PURE__ */ jsx("span", { className: "sr-only", children: label })
552
- ]
553
- }
554
- );
555
- }
556
-
557
- // node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
558
- var mergeClasses = (...classes) => classes.filter((className, index, array) => {
559
- return Boolean(className) && className.trim() !== "" && array.indexOf(className) === index;
560
- }).join(" ").trim();
561
-
562
- // node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.js
563
- var toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
564
-
565
- // node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.js
566
- var toCamelCase = (string) => string.replace(
567
- /^([A-Z])|[\s-_]+(\w)/g,
568
- (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()
569
- );
570
-
571
- // node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.js
572
- var toPascalCase = (string) => {
573
- const camelCase = toCamelCase(string);
574
- return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);
575
- };
576
-
577
- // node_modules/lucide-react/dist/esm/defaultAttributes.js
578
- var defaultAttributes = {
579
- xmlns: "http://www.w3.org/2000/svg",
580
- width: 24,
581
- height: 24,
582
- viewBox: "0 0 24 24",
583
- fill: "none",
584
- stroke: "currentColor",
585
- strokeWidth: 2,
586
- strokeLinecap: "round",
587
- strokeLinejoin: "round"
588
- };
589
-
590
- // node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.js
591
- var hasA11yProp = (props) => {
592
- for (const prop in props) {
593
- if (prop.startsWith("aria-") || prop === "role" || prop === "title") {
594
- return true;
595
- }
596
- }
597
- return false;
598
- };
599
- var LucideContext = createContext({});
600
- var useLucideContext = () => useContext(LucideContext);
601
-
602
- // node_modules/lucide-react/dist/esm/Icon.js
603
- var Icon = forwardRef(
604
- (_a, ref) => {
605
- var _b = _a, { color, size, strokeWidth, absoluteStrokeWidth, className = "", children, iconNode } = _b, rest = __objRest(_b, ["color", "size", "strokeWidth", "absoluteStrokeWidth", "className", "children", "iconNode"]);
606
- var _a2, _b2, _c;
607
- const {
608
- size: contextSize = 24,
609
- strokeWidth: contextStrokeWidth = 2,
610
- absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,
611
- color: contextColor = "currentColor",
612
- className: contextClass = ""
613
- } = (_a2 = useLucideContext()) != null ? _a2 : {};
614
- const calculatedStrokeWidth = (absoluteStrokeWidth != null ? absoluteStrokeWidth : contextAbsoluteStrokeWidth) ? Number(strokeWidth != null ? strokeWidth : contextStrokeWidth) * 24 / Number(size != null ? size : contextSize) : strokeWidth != null ? strokeWidth : contextStrokeWidth;
615
- return createElement(
616
- "svg",
617
- __spreadValues(__spreadValues(__spreadProps(__spreadValues({
618
- ref
619
- }, defaultAttributes), {
620
- width: (_b2 = size != null ? size : contextSize) != null ? _b2 : defaultAttributes.width,
621
- height: (_c = size != null ? size : contextSize) != null ? _c : defaultAttributes.height,
622
- stroke: color != null ? color : contextColor,
623
- strokeWidth: calculatedStrokeWidth,
624
- className: mergeClasses("lucide", contextClass, className)
625
- }), !children && !hasA11yProp(rest) && { "aria-hidden": "true" }), rest),
626
- [
627
- ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),
628
- ...Array.isArray(children) ? children : [children]
629
- ]
630
- );
631
- }
632
- );
633
-
634
- // node_modules/lucide-react/dist/esm/createLucideIcon.js
635
- var createLucideIcon = (iconName, iconNode) => {
636
- const Component2 = forwardRef(
637
- (_a, ref) => {
638
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
639
- return createElement(Icon, __spreadValues({
640
- ref,
641
- iconNode,
642
- className: mergeClasses(
643
- `lucide-${toKebabCase(toPascalCase(iconName))}`,
644
- `lucide-${iconName}`,
645
- className
646
- )
647
- }, props));
648
- }
649
- );
650
- Component2.displayName = toPascalCase(iconName);
651
- return Component2;
652
- };
653
-
654
- // node_modules/lucide-react/dist/esm/icons/check.js
655
- var __iconNode = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
656
- var Check = createLucideIcon("check", __iconNode);
657
-
658
- // node_modules/lucide-react/dist/esm/icons/chevron-down.js
659
- var __iconNode2 = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
660
- var ChevronDown = createLucideIcon("chevron-down", __iconNode2);
661
-
662
- // node_modules/lucide-react/dist/esm/icons/loader-circle.js
663
- var __iconNode3 = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
664
- var LoaderCircle = createLucideIcon("loader-circle", __iconNode3);
665
-
666
- // node_modules/lucide-react/dist/esm/icons/x.js
667
- var __iconNode4 = [
668
- ["path", { d: "M18 6 6 18", key: "1bl5f8" }],
669
- ["path", { d: "m6 6 12 12", key: "d8bk6v" }]
670
- ];
671
- var X = createLucideIcon("x", __iconNode4);
672
- var UI_BUTTON = {
673
- 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",
674
- active: "active:scale-95",
675
- variants: {
676
- primary: "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",
677
- secondary: "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",
678
- outline: "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",
679
- ghost: "text-zinc-700 dark:text-zinc-300 hover:bg-zinc-100 dark:hover:bg-slate-800 focus:ring-zinc-400",
680
- danger: "bg-red-600 text-white hover:bg-red-500 active:bg-red-700 shadow-sm shadow-red-600/10 focus:ring-red-500",
681
- warning: "bg-amber-500 text-white hover:bg-amber-400 active:bg-amber-600 shadow-sm shadow-amber-500/10 focus:ring-amber-500"
682
- },
683
- sizes: {
684
- sm: "px-2.5 py-1.5 text-xs sm:px-3 sm:text-sm gap-1.5 min-h-[36px]",
685
- md: "px-3 py-2 text-sm sm:px-4 sm:py-2.5 sm:text-base gap-2 min-h-[44px]",
686
- lg: "px-4 py-2.5 text-base sm:px-6 sm:py-3 sm:text-lg gap-2.5 min-h-[44px]"
687
- }
688
- };
689
- function Button(_a) {
690
- var _b = _a, {
691
- variant = "primary",
692
- size = "md",
693
- className = "",
694
- isLoading = false,
695
- disabled,
696
- children
697
- } = _b, props = __objRest(_b, [
698
- "variant",
699
- "size",
700
- "className",
701
- "isLoading",
702
- "disabled",
703
- "children"
704
- ]);
705
- return /* @__PURE__ */ jsxs(
706
- "button",
707
- __spreadProps(__spreadValues({
708
- className: twMerge(
709
- UI_BUTTON.base,
710
- UI_BUTTON.active,
711
- UI_BUTTON.variants[variant],
712
- UI_BUTTON.sizes[size],
713
- className
714
- ),
715
- disabled: disabled || isLoading,
716
- "aria-busy": isLoading || void 0
717
- }, props), {
718
- children: [
719
- isLoading && /* @__PURE__ */ jsx(
720
- LoaderCircle,
721
- {
722
- className: "w-4 h-4 animate-spin flex-shrink-0",
723
- "aria-hidden": "true"
724
- }
725
- ),
726
- isLoading ? /* @__PURE__ */ jsx("span", { className: "opacity-70", children }) : children
727
- ]
728
- })
729
- );
730
- }
731
- createContext(null);
732
- var ALERT_STYLES = {
733
- info: {
734
- container: "bg-sky-50 border-sky-200/80 dark:bg-sky-950/30 dark:border-sky-800/50",
735
- icon: "text-sky-600 dark:text-sky-400",
736
- title: "text-sky-900 dark:text-sky-200",
737
- text: "text-sky-800 dark:text-sky-300"
738
- },
739
- success: {
740
- container: "bg-emerald-50 border-emerald-200/80 dark:bg-emerald-950/30 dark:border-emerald-800/50",
741
- icon: "text-emerald-600 dark:text-emerald-400",
742
- title: "text-emerald-900 dark:text-emerald-200",
743
- text: "text-emerald-800 dark:text-emerald-300"
744
- },
745
- warning: {
746
- container: "bg-amber-50 border-amber-200/80 dark:bg-amber-950/30 dark:border-amber-800/50",
747
- icon: "text-amber-600 dark:text-amber-400",
748
- title: "text-amber-900 dark:text-amber-200",
749
- text: "text-amber-800 dark:text-amber-300"
750
- },
751
- error: {
752
- container: "bg-red-50 border-red-200/80 dark:bg-red-950/30 dark:border-red-800/50",
753
- icon: "text-red-600 dark:text-red-400",
754
- title: "text-red-900 dark:text-red-200",
755
- text: "text-red-800 dark:text-red-300"
756
- }
757
- };
758
- var ALERT_CLOSE_HOVER = "hover:bg-black/5 dark:hover:bg-white/5";
759
- var ICONS = {
760
- info: /* @__PURE__ */ jsx(
761
- "svg",
762
- {
763
- className: "w-5 h-5",
764
- fill: "currentColor",
765
- viewBox: "0 0 20 20",
766
- "aria-hidden": "true",
767
- children: /* @__PURE__ */ jsx(
768
- "path",
769
- {
770
- fillRule: "evenodd",
771
- 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",
772
- clipRule: "evenodd"
773
- }
774
- )
775
- }
776
- ),
777
- success: /* @__PURE__ */ jsx(
778
- "svg",
779
- {
780
- className: "w-5 h-5",
781
- fill: "currentColor",
782
- viewBox: "0 0 20 20",
783
- "aria-hidden": "true",
784
- children: /* @__PURE__ */ jsx(
785
- "path",
786
- {
787
- fillRule: "evenodd",
788
- 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",
789
- clipRule: "evenodd"
790
- }
791
- )
792
- }
793
- ),
794
- warning: /* @__PURE__ */ jsx(
795
- "svg",
796
- {
797
- className: "w-5 h-5",
798
- fill: "currentColor",
799
- viewBox: "0 0 20 20",
800
- "aria-hidden": "true",
801
- children: /* @__PURE__ */ jsx(
802
- "path",
803
- {
804
- fillRule: "evenodd",
805
- 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",
806
- clipRule: "evenodd"
807
- }
808
- )
809
- }
810
- ),
811
- error: /* @__PURE__ */ jsx(
812
- "svg",
813
- {
814
- className: "w-5 h-5",
815
- fill: "currentColor",
816
- viewBox: "0 0 20 20",
817
- "aria-hidden": "true",
818
- children: /* @__PURE__ */ jsx(
819
- "path",
820
- {
821
- fillRule: "evenodd",
822
- 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",
823
- clipRule: "evenodd"
824
- }
825
- )
826
- }
827
- )
828
- };
829
- function Alert({
830
- children,
831
- variant = "info",
832
- title,
833
- onClose,
834
- className = ""
835
- }) {
836
- const styles = ALERT_STYLES[variant];
837
- return /* @__PURE__ */ jsx(
838
- "div",
839
- {
840
- className: `relative p-4 rounded-xl border ${styles.container} ${className}`,
841
- role: "alert",
842
- children: /* @__PURE__ */ jsxs("div", { className: "flex gap-3", children: [
843
- /* @__PURE__ */ jsx("div", { className: `flex-shrink-0 ${styles.icon}`, children: ICONS[variant] }),
844
- /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
845
- title && /* @__PURE__ */ jsx(
846
- Heading,
847
- {
848
- level: 3,
849
- className: `text-sm font-semibold mb-1 ${styles.title}`,
850
- children: title
851
- }
852
- ),
853
- /* @__PURE__ */ jsx("div", { className: `text-sm ${styles.text}`, children })
854
- ] }),
855
- onClose && /* @__PURE__ */ jsx(
856
- Button,
857
- {
858
- variant: "ghost",
859
- size: "sm",
860
- onClick: onClose,
861
- className: `flex-shrink-0 ml-3 rounded-lg p-1.5 min-h-0 ${styles.icon} ${ALERT_CLOSE_HOVER}`,
862
- "aria-label": "Close",
863
- children: /* @__PURE__ */ jsx(
864
- "svg",
865
- {
866
- className: "w-5 h-5",
867
- fill: "currentColor",
868
- viewBox: "0 0 20 20",
869
- "aria-hidden": "true",
870
- children: /* @__PURE__ */ jsx(
871
- "path",
872
- {
873
- fillRule: "evenodd",
874
- 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",
875
- clipRule: "evenodd"
876
- }
877
- )
878
- }
879
- )
880
- }
881
- )
882
- ] })
883
- }
884
- );
885
- }
886
- function getProviders() {
887
- {
888
- throw new Error(
889
- "[contracts] Call registerProviders() before getProviders(). Ensure providers.config.ts is imported at app startup."
890
- );
891
- }
892
- }
893
-
894
- // src/contracts/table.ts
895
- var DEFAULT_PAGINATION_CONFIG = {
896
- perPage: 20,
897
- maxPerPage: 100,
898
- showPageSizeSelector: false,
899
- pageSizeOptions: [10, 20, 50, 100],
900
- showFirstLast: true,
901
- showPrevNext: true,
902
- maxVisible: 7,
903
- size: "md"
904
- };
905
- ({
906
- pageSize: DEFAULT_PAGINATION_CONFIG.perPage});
907
- function getPageNumbers(currentPage, totalPages, maxVisible) {
908
- if (totalPages <= maxVisible) {
909
- return Array.from({ length: totalPages }, (_, i) => i + 1);
910
- }
911
- const pages = [];
912
- const halfVisible = Math.floor(maxVisible / 2);
913
- let startPage = Math.max(1, currentPage - halfVisible);
914
- let endPage = Math.min(totalPages, currentPage + halfVisible);
915
- if (currentPage <= halfVisible) endPage = maxVisible;
916
- if (currentPage >= totalPages - halfVisible)
917
- startPage = totalPages - maxVisible + 1;
918
- if (startPage > 1) {
919
- pages.push(1);
920
- if (startPage > 2) pages.push("...");
921
- }
922
- for (let i = startPage; i <= endPage; i++) pages.push(i);
923
- if (endPage < totalPages) {
924
- if (endPage < totalPages - 1) pages.push("...");
925
- pages.push(totalPages);
926
- }
927
- return pages;
928
- }
929
- var SIZE_CLASSES = {
930
- sm: "text-xs px-2 py-1 min-w-[28px]",
931
- md: "text-sm px-3 py-1.5 min-w-[36px]",
932
- lg: "text-base px-4 py-2 min-w-[44px]"
933
- };
934
- function Pagination({
935
- currentPage,
936
- totalPages,
937
- onPageChange,
938
- paginationConfig,
939
- maxVisible: maxVisibleProp,
940
- showFirstLast: showFirstLastProp,
941
- showPrevNext: showPrevNextProp,
942
- disabled = false,
943
- size: sizeProp,
944
- className = ""
945
- }) {
946
- const resolved = __spreadValues(__spreadValues({}, DEFAULT_PAGINATION_CONFIG), paginationConfig);
947
- const maxVisible = maxVisibleProp != null ? maxVisibleProp : resolved.maxVisible;
948
- const showFirstLast = showFirstLastProp != null ? showFirstLastProp : resolved.showFirstLast;
949
- const showPrevNext = showPrevNextProp != null ? showPrevNextProp : resolved.showPrevNext;
950
- const size = sizeProp != null ? sizeProp : resolved.size;
951
- const handle = (page) => {
952
- if (disabled || page < 1 || page > totalPages || page === currentPage)
953
- return;
954
- onPageChange(page);
955
- };
956
- const btnClass = (active, off) => {
957
- const base = `${SIZE_CLASSES[size]} rounded border font-medium transition-colors`;
958
- if (off)
959
- 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`;
960
- if (active)
961
- return `${base} bg-primary-600 text-white border-primary-600 cursor-default`;
962
- 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`;
963
- };
964
- const pages = getPageNumbers(currentPage, totalPages, maxVisible);
965
- return /* @__PURE__ */ jsxs(
966
- "nav",
967
- {
968
- className: `flex items-center gap-1 ${className}`,
969
- "aria-label": "Pagination",
970
- children: [
971
- showFirstLast && /* @__PURE__ */ jsx(
972
- "button",
973
- {
974
- type: "button",
975
- className: btnClass(false, disabled || currentPage === 1),
976
- onClick: () => handle(1),
977
- disabled: disabled || currentPage === 1,
978
- "aria-label": "First page",
979
- children: "\xAB"
980
- }
981
- ),
982
- showPrevNext && /* @__PURE__ */ jsx(
983
- "button",
984
- {
985
- type: "button",
986
- className: btnClass(false, disabled || currentPage === 1),
987
- onClick: () => handle(currentPage - 1),
988
- disabled: disabled || currentPage === 1,
989
- "aria-label": "Previous page",
990
- children: "\u2039"
991
- }
992
- ),
993
- pages.map(
994
- (page, i) => page === "..." ? /* @__PURE__ */ jsx(
995
- "span",
996
- {
997
- className: `${SIZE_CLASSES[size]} text-zinc-400 dark:text-zinc-500 text-center`,
998
- "aria-hidden": "true",
999
- children: "\u2026"
1000
- },
1001
- `ellipsis-${i}`
1002
- ) : /* @__PURE__ */ jsx(
1003
- "button",
1004
- {
1005
- type: "button",
1006
- className: btnClass(
1007
- page === currentPage,
1008
- disabled && page !== currentPage
1009
- ),
1010
- onClick: () => handle(page),
1011
- disabled,
1012
- "aria-label": `Page ${page}`,
1013
- "aria-current": page === currentPage ? "page" : void 0,
1014
- children: page
1015
- },
1016
- page
1017
- )
1018
- ),
1019
- showPrevNext && /* @__PURE__ */ jsx(
1020
- "button",
1021
- {
1022
- type: "button",
1023
- className: btnClass(false, disabled || currentPage === totalPages),
1024
- onClick: () => handle(currentPage + 1),
1025
- disabled: disabled || currentPage === totalPages,
1026
- "aria-label": "Next page",
1027
- children: "\u203A"
1028
- }
1029
- ),
1030
- showFirstLast && /* @__PURE__ */ jsx(
1031
- "button",
1032
- {
1033
- type: "button",
1034
- className: btnClass(false, disabled || currentPage === totalPages),
1035
- onClick: () => handle(totalPages),
1036
- disabled: disabled || currentPage === totalPages,
1037
- "aria-label": "Last page",
1038
- children: "\xBB"
1039
- }
1040
- )
1041
- ]
1042
- }
1043
- );
1044
- }
1045
- var SIZE_CLASSES2 = {
1046
- sm: "max-w-sm",
1047
- md: "max-w-lg",
1048
- lg: "max-w-2xl",
1049
- xl: "max-w-4xl",
1050
- full: "max-w-[95vw] max-h-[95vh]"
1051
- };
1052
- function Modal({
1053
- isOpen,
1054
- onClose,
1055
- title,
1056
- children,
1057
- size = "md",
1058
- showCloseButton = true,
1059
- className = ""
1060
- }) {
1061
- const titleId = useId();
1062
- const panelRef = useRef(null);
1063
- const prevFocusRef = useRef(null);
1064
- useEffect(() => {
1065
- if (!isOpen) return;
1066
- const prev = document.body.style.overflow;
1067
- document.body.style.overflow = "hidden";
1068
- return () => {
1069
- document.body.style.overflow = prev;
1070
- };
1071
- }, [isOpen]);
1072
- useEffect(() => {
1073
- var _a;
1074
- if (isOpen) {
1075
- prevFocusRef.current = document.activeElement;
1076
- requestAnimationFrame(() => {
1077
- var _a2;
1078
- return (_a2 = panelRef.current) == null ? void 0 : _a2.focus();
1079
- });
1080
- } else {
1081
- (_a = prevFocusRef.current) == null ? void 0 : _a.focus();
1082
- }
1083
- }, [isOpen]);
1084
- const handleKeyDown = useCallback(
1085
- (e) => {
1086
- if (e.key === "Escape") {
1087
- onClose();
1088
- return;
1089
- }
1090
- if (e.key !== "Tab") return;
1091
- const panel = panelRef.current;
1092
- if (!panel) return;
1093
- const focusable = Array.from(
1094
- panel.querySelectorAll(
1095
- 'a[href],button:not([disabled]),textarea,input,select,[tabindex]:not([tabindex="-1"])'
1096
- )
1097
- );
1098
- if (!focusable.length) return;
1099
- const first = focusable[0];
1100
- const last = focusable[focusable.length - 1];
1101
- if (e.shiftKey && document.activeElement === first) {
1102
- e.preventDefault();
1103
- last.focus();
1104
- } else if (!e.shiftKey && document.activeElement === last) {
1105
- e.preventDefault();
1106
- first.focus();
1107
- }
1108
- },
1109
- [onClose]
1110
- );
1111
- if (!isOpen) return null;
1112
- if (typeof document === "undefined") return null;
1113
- return createPortal(
1114
- /* @__PURE__ */ jsxs(
1115
- "div",
1116
- {
1117
- className: "fixed inset-0 z-50 flex items-center justify-center p-4",
1118
- role: "dialog",
1119
- "aria-modal": "true",
1120
- "aria-labelledby": title ? titleId : void 0,
1121
- onKeyDown: handleKeyDown,
1122
- children: [
1123
- /* @__PURE__ */ jsx(
1124
- "div",
1125
- {
1126
- className: "absolute inset-0 bg-black/60 backdrop-blur-sm",
1127
- "aria-hidden": "true",
1128
- onClick: onClose
1129
- }
1130
- ),
1131
- /* @__PURE__ */ jsxs(
1132
- "div",
1133
- {
1134
- ref: panelRef,
1135
- tabIndex: -1,
1136
- className: [
1137
- "relative w-full rounded-2xl bg-white dark:bg-slate-900",
1138
- "shadow-2xl ring-1 ring-zinc-200 dark:ring-slate-700",
1139
- "flex flex-col max-h-[90vh] overflow-hidden",
1140
- "animate-[fadeInUp_0.15s_ease_forwards]",
1141
- SIZE_CLASSES2[size],
1142
- className
1143
- ].join(" "),
1144
- children: [
1145
- (title || showCloseButton) && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-6 py-4 border-b border-zinc-100 dark:border-slate-800 flex-shrink-0", children: [
1146
- title && /* @__PURE__ */ jsx(
1147
- Heading,
1148
- {
1149
- level: 2,
1150
- id: titleId,
1151
- className: "!text-lg !font-semibold !font-sans tracking-tight",
1152
- children: title
1153
- }
1154
- ),
1155
- showCloseButton && /* @__PURE__ */ jsx(
1156
- Button,
1157
- {
1158
- variant: "ghost",
1159
- size: "sm",
1160
- type: "button",
1161
- onClick: onClose,
1162
- 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",
1163
- "aria-label": "Close",
1164
- children: /* @__PURE__ */ jsx(X, { className: "w-5 h-5" })
1165
- }
1166
- )
1167
- ] }),
1168
- /* @__PURE__ */ jsx("div", { className: "overflow-y-auto flex-1 px-6 py-4", children })
1169
- ]
1170
- }
1171
- )
1172
- ]
1173
- }
1174
- ),
1175
- document.body
1176
- );
1177
- }
1178
- function Select({
1179
- options,
1180
- value,
1181
- onChange,
1182
- placeholder = "Select\u2026",
1183
- label,
1184
- error,
1185
- disabled = false,
1186
- required,
1187
- className = "",
1188
- id: externalId
1189
- }) {
1190
- var _a;
1191
- const generatedId = useId();
1192
- const id = externalId != null ? externalId : generatedId;
1193
- const [open, setOpen] = useState(false);
1194
- const [openUp, setOpenUp] = useState(false);
1195
- const ref = useRef(null);
1196
- const selected = options.find((o) => o.value === value);
1197
- const toggle = useCallback(() => {
1198
- if (!disabled) {
1199
- if (!open && ref.current) {
1200
- const rect = ref.current.getBoundingClientRect();
1201
- const spaceBelow = window.innerHeight - rect.bottom;
1202
- const spaceAbove = rect.top;
1203
- setOpenUp(spaceBelow < 160 && spaceAbove > spaceBelow);
1204
- }
1205
- setOpen((v) => !v);
1206
- }
1207
- }, [disabled, open]);
1208
- const handleSelect = useCallback(
1209
- (val) => {
1210
- onChange == null ? void 0 : onChange(val);
1211
- setOpen(false);
1212
- },
1213
- [onChange]
1214
- );
1215
- useEffect(() => {
1216
- const handler = (e) => {
1217
- if (ref.current && !ref.current.contains(e.target)) {
1218
- setOpen(false);
1219
- }
1220
- };
1221
- if (open) document.addEventListener("mousedown", handler);
1222
- return () => document.removeEventListener("mousedown", handler);
1223
- }, [open]);
1224
- const handleKeyDown = useCallback(
1225
- (e) => {
1226
- if (e.key === "Escape") {
1227
- setOpen(false);
1228
- return;
1229
- }
1230
- if (e.key === "Enter" || e.key === " ") {
1231
- toggle();
1232
- e.preventDefault();
1233
- return;
1234
- }
1235
- if (e.key === "ArrowDown" && !open) {
1236
- setOpen(true);
1237
- e.preventDefault();
1238
- return;
1239
- }
1240
- if (e.key === "ArrowDown") {
1241
- e.preventDefault();
1242
- const idx = options.findIndex((o) => o.value === value);
1243
- const next = options.slice(idx < 0 ? 0 : idx + 1).find((o) => !o.disabled);
1244
- if (next) onChange == null ? void 0 : onChange(next.value);
1245
- }
1246
- if (e.key === "ArrowUp") {
1247
- e.preventDefault();
1248
- const idx = options.findIndex((o) => o.value === value);
1249
- if (idx < 0) return;
1250
- const prev = [...options].slice(0, idx).reverse().find((o) => !o.disabled);
1251
- if (prev) onChange == null ? void 0 : onChange(prev.value);
1252
- }
1253
- },
1254
- [open, options, value, onChange, toggle]
1255
- );
1256
- const triggerClass = [
1257
- "flex h-10 w-full items-center justify-between rounded-lg border px-3 py-2 text-sm",
1258
- "transition-colors bg-white dark:bg-slate-800/60",
1259
- "focus:outline-none focus:ring-2 focus:ring-offset-0",
1260
- error ? "border-red-400 dark:border-red-500 focus:ring-red-500/20" : "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",
1261
- disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer",
1262
- className
1263
- ].join(" ");
1264
- return /* @__PURE__ */ jsxs("div", { ref, className: "relative w-full", children: [
1265
- label && /* @__PURE__ */ jsx(
1266
- Label,
1267
- {
1268
- htmlFor: id,
1269
- className: "!text-zinc-700 dark:!text-zinc-300",
1270
- required,
1271
- children: label
1272
- }
1273
- ),
1274
- /* @__PURE__ */ jsxs(
1275
- Button,
1276
- {
1277
- id,
1278
- type: "button",
1279
- role: "combobox",
1280
- "aria-expanded": open,
1281
- "aria-haspopup": "listbox",
1282
- "aria-disabled": disabled,
1283
- disabled,
1284
- variant: "ghost",
1285
- className: triggerClass,
1286
- onClick: toggle,
1287
- onKeyDown: handleKeyDown,
1288
- children: [
1289
- /* @__PURE__ */ jsx(
1290
- Span,
1291
- {
1292
- className: selected ? "text-zinc-900 dark:text-zinc-50" : "text-zinc-400 dark:text-zinc-500",
1293
- children: (_a = selected == null ? void 0 : selected.label) != null ? _a : placeholder
1294
- }
1295
- ),
1296
- /* @__PURE__ */ jsx(
1297
- ChevronDown,
1298
- {
1299
- className: `h-4 w-4 flex-shrink-0 text-zinc-400 transition-transform duration-200 ${open ? "rotate-180" : ""}`,
1300
- "aria-hidden": "true"
1301
- }
1302
- )
1303
- ]
1304
- }
1305
- ),
1306
- open && /* @__PURE__ */ jsx(
1307
- Ul,
1308
- {
1309
- role: "listbox",
1310
- className: [
1311
- "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",
1312
- openUp ? "bottom-full mb-1" : "top-full mt-1"
1313
- ].join(" "),
1314
- children: options.map((option) => {
1315
- const isSelected = option.value === value;
1316
- return /* @__PURE__ */ jsxs(
1317
- Li,
1318
- {
1319
- role: "option",
1320
- "aria-selected": isSelected,
1321
- "aria-disabled": option.disabled,
1322
- className: [
1323
- "relative flex cursor-pointer items-center px-3 py-2 text-sm select-none",
1324
- option.disabled ? "opacity-40 cursor-not-allowed" : isSelected ? "bg-primary-50 dark:bg-primary-900/20 text-primary-700 dark:text-primary-300" : "text-zinc-700 dark:text-zinc-300 hover:bg-zinc-50 dark:hover:bg-slate-700"
1325
- ].join(" "),
1326
- onClick: () => !option.disabled && handleSelect(option.value),
1327
- children: [
1328
- /* @__PURE__ */ jsx(Span, { className: "flex-1", children: option.label }),
1329
- isSelected && /* @__PURE__ */ jsx(
1330
- Check,
1331
- {
1332
- className: "h-4 w-4 ml-2 flex-shrink-0",
1333
- "aria-hidden": "true"
1334
- }
1335
- )
1336
- ]
1337
- },
1338
- option.value
1339
- );
1340
- })
1341
- }
1342
- ),
1343
- error && /* @__PURE__ */ jsx(Text, { size: "xs", variant: "error", className: "mt-1.5", role: "alert", children: error })
1344
- ] });
1345
- }
1346
- function Input(_a) {
1347
- var _b = _a, { className = "" } = _b, props = __objRest(_b, ["className"]);
1348
- return /* @__PURE__ */ jsx(
1349
- "input",
1350
- __spreadValues({
1351
- className: [
1352
- "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",
1353
- className
1354
- ].filter(Boolean).join(" ")
1355
- }, props)
1356
- );
1357
- }
1358
- function Textarea(_a) {
1359
- var _b = _a, { className = "" } = _b, props = __objRest(_b, ["className"]);
1360
- return /* @__PURE__ */ jsx(
1361
- "textarea",
1362
- __spreadValues({
1363
- className: [
1364
- "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",
1365
- className
1366
- ].filter(Boolean).join(" ")
1367
- }, props)
1368
- );
1369
- }
1370
- function TagInput({
1371
- value,
1372
- onChange,
1373
- disabled = false,
1374
- label,
1375
- placeholder = "Add a tag...",
1376
- className = "",
1377
- helperText = "Press Enter or comma to add a tag"
1378
- }) {
1379
- const [draft, setDraft] = useState("");
1380
- const inputRef = useRef(null);
1381
- const addTag = (raw) => {
1382
- const tag = raw.trim().replace(/,+$/, "").trim();
1383
- if (!tag || value.includes(tag)) {
1384
- setDraft("");
1385
- return;
1386
- }
1387
- onChange([...value, tag]);
1388
- setDraft("");
1389
- };
1390
- const removeTag = (tag) => {
1391
- onChange(value.filter((t) => t !== tag));
1392
- };
1393
- const handleKeyDown = (e) => {
1394
- if (e.key === "Enter" || e.key === ",") {
1395
- e.preventDefault();
1396
- addTag(draft);
1397
- return;
1398
- }
1399
- if (e.key === "Backspace" && draft === "" && value.length > 0) {
1400
- onChange(value.slice(0, -1));
1401
- }
1402
- };
1403
- const handleChange = (e) => {
1404
- var _a;
1405
- const inputValue = e.target.value;
1406
- if (inputValue.includes(",")) {
1407
- const parts = inputValue.split(",");
1408
- const last = (_a = parts.pop()) != null ? _a : "";
1409
- parts.forEach((part) => addTag(part));
1410
- setDraft(last);
1411
- return;
1412
- }
1413
- setDraft(inputValue);
1414
- };
1415
- const handleBlur = () => {
1416
- if (draft.trim()) {
1417
- addTag(draft);
1418
- }
1419
- };
1420
- return /* @__PURE__ */ jsxs("div", { className, children: [
1421
- label && /* @__PURE__ */ jsx(Label, { className: "mb-1.5 block text-sm font-medium", children: label }),
1422
- /* @__PURE__ */ jsxs(
1423
- "div",
1424
- {
1425
- onClick: () => {
1426
- var _a;
1427
- return !disabled && ((_a = inputRef.current) == null ? void 0 : _a.focus());
1428
- },
1429
- className: [
1430
- "flex min-h-[42px] w-full cursor-text flex-wrap items-center gap-1.5 rounded-lg border px-3 py-2",
1431
- "border-zinc-300 bg-white dark:border-slate-700 dark:bg-slate-900",
1432
- disabled ? "cursor-not-allowed opacity-50" : "transition-colors focus-within:border-primary-500 focus-within:ring-2 focus-within:ring-primary-500/30"
1433
- ].join(" "),
1434
- children: [
1435
- value.map((tag) => /* @__PURE__ */ jsxs(
1436
- "span",
1437
- {
1438
- 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",
1439
- children: [
1440
- /* @__PURE__ */ jsx(Span, { size: "xs", children: tag }),
1441
- !disabled && /* @__PURE__ */ jsx(
1442
- "button",
1443
- {
1444
- type: "button",
1445
- onClick: (e) => {
1446
- e.stopPropagation();
1447
- removeTag(tag);
1448
- },
1449
- className: "ml-0.5 text-primary-700/70 hover:text-primary-700 dark:text-primary-300/70 dark:hover:text-primary-300",
1450
- "aria-label": `Remove tag ${tag}`,
1451
- children: "x"
1452
- }
1453
- )
1454
- ]
1455
- },
1456
- tag
1457
- )),
1458
- /* @__PURE__ */ jsx(
1459
- "input",
1460
- {
1461
- ref: inputRef,
1462
- value: draft,
1463
- onChange: handleChange,
1464
- onKeyDown: handleKeyDown,
1465
- onBlur: handleBlur,
1466
- disabled,
1467
- placeholder: value.length === 0 ? placeholder : "",
1468
- className: [
1469
- "min-w-[100px] flex-1 bg-transparent text-sm outline-none",
1470
- "text-zinc-900 placeholder:text-zinc-400 dark:text-zinc-100 dark:placeholder:text-zinc-500",
1471
- disabled ? "cursor-not-allowed" : ""
1472
- ].join(" "),
1473
- "aria-label": label != null ? label : "Tag input"
1474
- }
1475
- )
1476
- ]
1477
- }
1478
- ),
1479
- helperText && /* @__PURE__ */ jsx(Span, { size: "xs", className: "mt-1 text-zinc-500 dark:text-zinc-400", children: helperText })
1480
- ] });
1481
- }
1482
- var GAP_MAP = {
1483
- none: "",
1484
- px: "gap-px",
1485
- xs: "gap-1",
1486
- sm: "gap-2",
1487
- "2.5": "gap-2.5",
1488
- "3": "gap-3",
1489
- md: "gap-4",
1490
- "5": "gap-5",
1491
- lg: "gap-6",
1492
- xl: "gap-8",
1493
- "2xl": "gap-12"
1494
- };
1495
- var ITEMS_MAP = {
1496
- start: "items-start",
1497
- center: "items-center",
1498
- end: "items-end",
1499
- stretch: "items-stretch",
1500
- baseline: "items-baseline"
1501
- };
1502
- var JUSTIFY_MAP = {
1503
- start: "justify-start",
1504
- center: "justify-center",
1505
- end: "justify-end",
1506
- between: "justify-between",
1507
- around: "justify-around",
1508
- evenly: "justify-evenly"
1509
- };
1510
- function Row(_a) {
1511
- var _b = _a, {
1512
- gap = "md",
1513
- centered = false,
1514
- align = "center",
1515
- justify = "start",
1516
- wrap = false,
1517
- as,
1518
- className = "",
1519
- children
1520
- } = _b, props = __objRest(_b, [
1521
- "gap",
1522
- "centered",
1523
- "align",
1524
- "justify",
1525
- "wrap",
1526
- "as",
1527
- "className",
1528
- "children"
1529
- ]);
1530
- const Tag = as != null ? as : "div";
1531
- const classes = [
1532
- "flex flex-row",
1533
- centered ? "items-center justify-center" : ITEMS_MAP[align],
1534
- !centered && justify !== "start" ? JUSTIFY_MAP[justify] : "",
1535
- GAP_MAP[gap],
1536
- wrap ? "flex-wrap" : "",
1537
- className
1538
- ].filter(Boolean).join(" ");
1539
- return /* @__PURE__ */ jsx(Tag, __spreadProps(__spreadValues({ className: classes }, props), { children }));
1540
- }
1541
- var mediaFieldSchema = z.object({
1542
- url: z.string().url(),
1543
- type: z.enum(["image", "video", "file"]),
1544
- alt: z.string().optional(),
1545
- thumbnailUrl: z.string().url().optional()
1546
- });
1547
- function coerceMediaField(value, fallbackType = "image") {
1548
- if (!value) {
1549
- return null;
1550
- }
1551
- if (typeof value === "string") {
1552
- return {
1553
- url: value,
1554
- type: fallbackType
1555
- };
1556
- }
1557
- return value;
1558
- }
1559
- function coerceMediaFieldArray(values, fallbackType = "image") {
1560
- if (!values || values.length === 0) {
1561
- return [];
1562
- }
1563
- return values.map((value) => coerceMediaField(value, fallbackType)).filter((value) => value !== null);
1564
- }
1565
- function getMediaUrl(value) {
1566
- var _a;
1567
- return (_a = coerceMediaField(value)) == null ? void 0 : _a.url;
1568
- }
1569
- function inferMediaTypeFromMime(mimeType, url) {
1570
- if (mimeType == null ? void 0 : mimeType.startsWith("image/")) return "image";
1571
- if (mimeType == null ? void 0 : mimeType.startsWith("video/")) return "video";
1572
- if (url) {
1573
- if (/\.(jpe?g|png|gif|webp|svg)(\?|$)/i.test(url)) return "image";
1574
- if (/\.(mp4|webm|ogg|mov|avi)(\?|$)/i.test(url)) return "video";
1575
- }
1576
- return "file";
1577
- }
1578
- function BlogCard({ post, onClick, className = "" }) {
1579
- var _a;
1580
- const coverImageUrl = getMediaUrl(post.coverImage);
1581
- const date = post.publishedAt ? new Date(post.publishedAt).toLocaleDateString("en-US", {
1582
- year: "numeric",
1583
- month: "short",
1584
- day: "numeric"
1585
- }) : "";
1586
- return /* @__PURE__ */ jsxs(
1587
- Article,
1588
- {
1589
- role: onClick ? "button" : void 0,
1590
- tabIndex: onClick ? 0 : void 0,
1591
- onKeyDown: onClick ? (e) => (e.key === "Enter" || e.key === " ") && onClick(post) : void 0,
1592
- onClick: onClick ? () => onClick(post) : void 0,
1593
- className: `group flex flex-col h-full overflow-hidden rounded-xl border border-neutral-200 bg-white shadow-sm transition hover:shadow-md ${onClick ? "cursor-pointer" : ""} ${className}`,
1594
- children: [
1595
- coverImageUrl && /* @__PURE__ */ jsx(Div, { className: "aspect-video w-full overflow-hidden bg-neutral-100", children: /* @__PURE__ */ jsx(
1596
- Div,
1597
- {
1598
- role: "img",
1599
- "aria-label": post.title,
1600
- className: "h-full w-full bg-center bg-cover transition-transform duration-300 group-hover:scale-105",
1601
- style: { backgroundImage: `url(${coverImageUrl})` }
1602
- }
1603
- ) }),
1604
- /* @__PURE__ */ jsxs(Div, { className: "flex flex-1 flex-col p-5", children: [
1605
- /* @__PURE__ */ jsxs(Div, { className: "mb-2 flex items-center gap-2", children: [
1606
- /* @__PURE__ */ jsx(Span, { className: "rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium capitalize text-primary", children: post.category }),
1607
- post.readTimeMinutes && /* @__PURE__ */ jsxs(Span, { className: "text-xs text-neutral-400", children: [
1608
- post.readTimeMinutes,
1609
- " min read"
1610
- ] })
1611
- ] }),
1612
- /* @__PURE__ */ jsx(
1613
- Heading,
1614
- {
1615
- level: 3,
1616
- className: "line-clamp-2 text-base font-semibold text-neutral-900 group-hover:text-primary",
1617
- children: post.title
1618
- }
1619
- ),
1620
- post.excerpt && /* @__PURE__ */ jsx(Text, { className: "mt-2 line-clamp-3 flex-1 text-sm text-neutral-500", children: post.excerpt }),
1621
- /* @__PURE__ */ jsxs(Div, { className: "mt-4 flex items-center gap-3", children: [
1622
- post.authorAvatar && /* @__PURE__ */ jsx(
1623
- Div,
1624
- {
1625
- role: "img",
1626
- "aria-label": (_a = post.authorName) != null ? _a : "author",
1627
- className: "h-7 w-7 rounded-full bg-center bg-cover",
1628
- style: { backgroundImage: `url(${post.authorAvatar})` }
1629
- }
1630
- ),
1631
- /* @__PURE__ */ jsxs(Text, { className: "text-xs text-neutral-500", children: [
1632
- post.authorName && /* @__PURE__ */ jsx(Span, { className: "font-medium text-neutral-700", children: post.authorName }),
1633
- date && /* @__PURE__ */ jsxs(Span, { className: "ml-1", children: [
1634
- "\xB7 ",
1635
- date
1636
- ] })
1637
- ] })
1638
- ] })
1639
- ] })
1640
- ]
1641
- }
1642
- );
1643
- }
1644
- function BlogCategoryTabs({
1645
- categories,
1646
- active,
1647
- onSelect,
1648
- labels = {}
1649
- }) {
1650
- var _a;
1651
- return /* @__PURE__ */ jsxs(Div, { className: "scrollbar-none flex gap-2 overflow-x-auto pb-1", children: [
1652
- /* @__PURE__ */ jsx(
1653
- Button,
1654
- {
1655
- onClick: () => onSelect(null),
1656
- variant: !active ? "primary" : "ghost",
1657
- size: "sm",
1658
- className: `whitespace-nowrap rounded-full px-4 py-1.5 text-sm font-medium transition ${!active ? "bg-neutral-900 text-white" : "bg-neutral-100 text-neutral-600 hover:bg-neutral-200"}`,
1659
- children: (_a = labels.all) != null ? _a : "All"
1660
- }
1661
- ),
1662
- categories.map((cat) => {
1663
- var _a2;
1664
- return /* @__PURE__ */ jsx(
1665
- Button,
1666
- {
1667
- onClick: () => onSelect(cat),
1668
- variant: active === cat ? "primary" : "ghost",
1669
- size: "sm",
1670
- className: `whitespace-nowrap rounded-full px-4 py-1.5 text-sm font-medium capitalize transition ${active === cat ? "bg-neutral-900 text-white" : "bg-neutral-100 text-neutral-600 hover:bg-neutral-200"}`,
1671
- children: (_a2 = labels[cat]) != null ? _a2 : cat
1672
- },
1673
- cat
1674
- );
1675
- })
1676
- ] });
1677
- }
1678
- function BlogListView({
1679
- posts,
1680
- isLoading,
1681
- totalPages = 1,
1682
- currentPage = 1,
1683
- total = 0,
1684
- onPageChange,
1685
- onPostClick,
1686
- emptyLabel = "No posts found",
1687
- slots
1688
- }) {
1689
- if (isLoading) {
1690
- return /* @__PURE__ */ jsx(Div, { className: "grid gap-6 sm:grid-cols-2 lg:grid-cols-3", children: Array.from({ length: 6 }).map((_, i) => /* @__PURE__ */ jsxs(
1691
- Div,
1692
- {
1693
- className: "animate-pulse overflow-hidden rounded-xl border border-neutral-200 bg-neutral-100",
1694
- children: [
1695
- /* @__PURE__ */ jsx(Div, { className: "aspect-video bg-neutral-200" }),
1696
- /* @__PURE__ */ jsxs(Div, { className: "space-y-2 p-5", children: [
1697
- /* @__PURE__ */ jsx(Div, { className: "h-4 w-16 rounded bg-neutral-200" }),
1698
- /* @__PURE__ */ jsx(Div, { className: "h-5 w-full rounded bg-neutral-200" }),
1699
- /* @__PURE__ */ jsx(Div, { className: "h-4 w-3/4 rounded bg-neutral-200" })
1700
- ] })
1701
- ]
1702
- },
1703
- i
1704
- )) });
1705
- }
1706
- if (posts.length === 0) {
1707
- if (slots == null ? void 0 : slots.renderEmptyState) {
1708
- return /* @__PURE__ */ jsx(Fragment, { children: slots.renderEmptyState() });
1709
- }
1710
- return /* @__PURE__ */ jsx(Text, { className: "py-12 text-center text-sm text-neutral-500", children: emptyLabel });
1711
- }
1712
- return /* @__PURE__ */ jsxs(Div, { className: "space-y-8", children: [
1713
- (slots == null ? void 0 : slots.renderHeader) ? slots.renderHeader({ total }) : null,
1714
- /* @__PURE__ */ jsx(Div, { className: "grid gap-6 sm:grid-cols-2 lg:grid-cols-3", children: posts.map(
1715
- (post, i) => (slots == null ? void 0 : slots.renderCard) ? /* @__PURE__ */ jsx(React.Fragment, { children: slots.renderCard(post, i) }, post.id) : /* @__PURE__ */ jsx(
1716
- BlogCard,
1717
- {
1718
- post,
1719
- onClick: onPostClick
1720
- },
1721
- post.id
1722
- )
1723
- ) }),
1724
- (slots == null ? void 0 : slots.renderFooter) ? slots.renderFooter({
1725
- page: currentPage,
1726
- totalPages
1727
- }) : totalPages > 1 && onPageChange ? /* @__PURE__ */ jsx(Div, { className: "flex justify-center", children: /* @__PURE__ */ jsx(
1728
- Pagination,
1729
- {
1730
- currentPage,
1731
- totalPages,
1732
- onPageChange
1733
- }
1734
- ) }) : null
1735
- ] });
1736
- }
1737
- var CATEGORY_BADGE = {
1738
- news: "bg-blue-100 text-blue-800",
1739
- tips: "bg-emerald-100 text-emerald-800",
1740
- guides: "bg-indigo-100 text-indigo-800",
1741
- updates: "bg-purple-100 text-purple-800",
1742
- community: "bg-orange-100 text-orange-800"
1743
- };
1744
- function BlogFeaturedCard({
1745
- post,
1746
- href,
1747
- labels = {},
1748
- renderLink,
1749
- renderImage,
1750
- className = ""
1751
- }) {
1752
- var _a, _b, _c;
1753
- const coverImageUrl = getMediaUrl(post.coverImage);
1754
- const date = post.publishedAt ? new Date(post.publishedAt).toLocaleDateString("en-US", {
1755
- year: "numeric",
1756
- month: "short",
1757
- day: "numeric"
1758
- }) : "";
1759
- const inner = /* @__PURE__ */ jsxs(
1760
- Article,
1761
- {
1762
- className: `overflow-hidden rounded-xl border border-neutral-200 bg-white shadow-sm hover:shadow-lg transition-shadow duration-200 md:flex ${className}`,
1763
- children: [
1764
- coverImageUrl && /* @__PURE__ */ jsx(Div, { className: "md:w-1/2 relative h-64 md:min-h-[320px] overflow-hidden", children: renderImage ? renderImage(post) : /* @__PURE__ */ jsx(
1765
- Div,
1766
- {
1767
- role: "img",
1768
- "aria-label": post.title,
1769
- className: "h-full w-full bg-cover bg-center",
1770
- style: { backgroundImage: `url(${coverImageUrl})` }
1771
- }
1772
- ) }),
1773
- /* @__PURE__ */ jsxs(Div, { className: "p-8 md:w-1/2 flex flex-col justify-center", children: [
1774
- /* @__PURE__ */ jsxs(Div, { className: "flex items-center gap-2 mb-3", children: [
1775
- /* @__PURE__ */ jsx(
1776
- Span,
1777
- {
1778
- className: `inline-block px-2 py-0.5 rounded-full text-xs font-medium capitalize ${(_a = CATEGORY_BADGE[post.category]) != null ? _a : ""}`,
1779
- children: post.category
1780
- }
1781
- ),
1782
- post.isFeatured && /* @__PURE__ */ jsx(Span, { className: "bg-yellow-100 text-yellow-800 px-2 py-0.5 rounded-full text-xs font-medium", children: (_b = labels.featuredBadge) != null ? _b : "Featured" })
1783
- ] }),
1784
- /* @__PURE__ */ jsx(
1785
- Heading,
1786
- {
1787
- level: 2,
1788
- className: "text-xl font-semibold text-neutral-900 mb-3 leading-snug",
1789
- children: post.title
1790
- }
1791
- ),
1792
- post.excerpt && /* @__PURE__ */ jsx(Text, { className: "text-neutral-500 mb-4 line-clamp-3 text-sm", children: post.excerpt }),
1793
- /* @__PURE__ */ jsxs(Div, { className: "flex items-center gap-4 text-xs text-neutral-400", children: [
1794
- post.authorName && /* @__PURE__ */ jsx(Span, { children: post.authorName }),
1795
- post.readTimeMinutes != null && /* @__PURE__ */ jsxs(Span, { children: [
1796
- post.readTimeMinutes,
1797
- " ",
1798
- (_c = labels.readTime) != null ? _c : "min read"
1799
- ] }),
1800
- date && /* @__PURE__ */ jsx(Span, { children: date })
1801
- ] })
1802
- ] })
1803
- ]
1804
- }
1805
- );
1806
- return /* @__PURE__ */ jsx(Div, { className: "mb-10", children: renderLink ? renderLink(href, inner) : inner });
1807
- }
1808
-
1809
- // src/features/forms/utils.ts
1810
- function cn(...classes) {
1811
- return classes.filter(Boolean).join(" ");
1812
- }
1813
- var INPUT_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-sm text-zinc-900 dark:text-zinc-100 focus:ring-2 focus:ring-primary-500/20 dark:focus:ring-secondary-400/20 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";
1814
- var INPUT_ERROR = "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";
1815
- var INPUT_SUCCESS = "border-emerald-400 dark:border-emerald-500 focus:ring-emerald-500/20 focus:border-emerald-500";
1816
- var INPUT_DISABLED = "bg-zinc-50 dark:bg-slate-800/30 text-zinc-400 dark:text-zinc-500 cursor-not-allowed opacity-60";
1817
- var INPUT_WITH_ICON = "pl-10";
1818
- var LABEL_BASE = "block text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1.5";
1819
- var HELPER_BASE = "text-xs text-zinc-500 dark:text-zinc-400 mt-1";
1820
- var ERROR_BASE = "text-xs text-red-600 dark:text-red-400 mt-1";
1821
- var Input2 = React.forwardRef(
1822
- function Input3(_a, ref) {
1823
- var _b = _a, {
1824
- label,
1825
- error,
1826
- helperText,
1827
- icon,
1828
- rightIcon,
1829
- success,
1830
- className = "",
1831
- required,
1832
- disabled
1833
- } = _b, props = __objRest(_b, [
1834
- "label",
1835
- "error",
1836
- "helperText",
1837
- "icon",
1838
- "rightIcon",
1839
- "success",
1840
- "className",
1841
- "required",
1842
- "disabled"
1843
- ]);
1844
- const stateClasses = error ? INPUT_ERROR : success ? INPUT_SUCCESS : disabled ? INPUT_DISABLED : "";
1845
- return /* @__PURE__ */ jsxs(Div, { className: "w-full", children: [
1846
- label && /* @__PURE__ */ jsxs("label", { className: LABEL_BASE, children: [
1847
- label,
1848
- required && /* @__PURE__ */ jsx(Span, { className: "text-red-500 ml-1", "aria-hidden": "true", children: "*" })
1849
- ] }),
1850
- /* @__PURE__ */ jsxs(Div, { className: "relative group", children: [
1851
- icon && /* @__PURE__ */ jsx(
1852
- Div,
1853
- {
1854
- className: cn(
1855
- "absolute left-3 top-1/2 -translate-y-1/2 transition-colors duration-150",
1856
- error ? "text-red-600 dark:text-red-400" : "text-zinc-400 dark:text-zinc-500",
1857
- "group-focus-within:text-primary-500 dark:group-focus-within:text-secondary-400"
1858
- ),
1859
- children: icon
1860
- }
1861
- ),
1862
- /* @__PURE__ */ jsx(
1863
- "input",
1864
- __spreadValues({
1865
- ref,
1866
- className: cn(
1867
- "w-full",
1868
- INPUT_BASE,
1869
- icon ? INPUT_WITH_ICON : "",
1870
- rightIcon ? "pr-10" : "",
1871
- stateClasses,
1872
- className
1873
- ),
1874
- disabled,
1875
- "aria-invalid": error ? "true" : void 0,
1876
- "aria-describedby": error ? `${props.id}-error` : helperText ? `${props.id}-helper` : void 0
1877
- }, props)
1878
- ),
1879
- rightIcon && /* @__PURE__ */ jsx(
1880
- Div,
1881
- {
1882
- className: cn(
1883
- "absolute right-3 top-1/2 -translate-y-1/2 transition-colors duration-150",
1884
- error ? "text-red-600 dark:text-red-400" : "text-zinc-400 dark:text-zinc-500"
1885
- ),
1886
- children: rightIcon
1887
- }
1888
- )
1889
- ] }),
1890
- error && /* @__PURE__ */ jsx("p", { id: `${props.id}-error`, className: ERROR_BASE, role: "alert", children: error }),
1891
- !error && helperText && /* @__PURE__ */ jsx("p", { id: `${props.id}-helper`, className: HELPER_BASE, children: helperText })
1892
- ] });
1893
- }
1894
- );
1895
- Input2.displayName = "Input";
1896
- var Textarea2 = React.forwardRef(
1897
- function Textarea3(_a, ref) {
1898
- var _b = _a, {
1899
- label,
1900
- error,
1901
- helperText,
1902
- showCharCount,
1903
- className = "",
1904
- required,
1905
- maxLength,
1906
- value,
1907
- defaultValue
1908
- } = _b, props = __objRest(_b, [
1909
- "label",
1910
- "error",
1911
- "helperText",
1912
- "showCharCount",
1913
- "className",
1914
- "required",
1915
- "maxLength",
1916
- "value",
1917
- "defaultValue"
1918
- ]);
1919
- const charCount = typeof value === "string" ? value.length : typeof defaultValue === "string" ? defaultValue.length : 0;
1920
- return /* @__PURE__ */ jsxs(Div, { className: "w-full", children: [
1921
- label && /* @__PURE__ */ jsxs("label", { className: LABEL_BASE, children: [
1922
- label,
1923
- required && /* @__PURE__ */ jsx(Span, { className: "text-red-500 ml-1", "aria-hidden": "true", children: "*" })
1924
- ] }),
1925
- /* @__PURE__ */ jsx(
1926
- "textarea",
1927
- __spreadValues({
1928
- ref,
1929
- className: cn(
1930
- INPUT_BASE,
1931
- "resize-y min-h-[80px]",
1932
- error ? INPUT_ERROR : "",
1933
- className
1934
- ),
1935
- "aria-invalid": error ? "true" : void 0,
1936
- maxLength,
1937
- value,
1938
- defaultValue
1939
- }, props)
1940
- ),
1941
- /* @__PURE__ */ jsxs(Div, { className: "flex items-center justify-between mt-1.5", children: [
1942
- /* @__PURE__ */ jsxs(Div, { className: "flex-1", children: [
1943
- error && /* @__PURE__ */ jsx("p", { className: ERROR_BASE, role: "alert", children: error }),
1944
- !error && helperText && /* @__PURE__ */ jsx("p", { className: HELPER_BASE, children: helperText })
1945
- ] }),
1946
- showCharCount && maxLength && /* @__PURE__ */ jsxs(
1947
- "p",
1948
- {
1949
- className: cn(
1950
- "text-xs tabular-nums ml-2 flex-shrink-0",
1951
- charCount >= maxLength ? "text-red-500 dark:text-red-400" : "text-zinc-400 dark:text-zinc-500"
1952
- ),
1953
- children: [
1954
- charCount,
1955
- " / ",
1956
- maxLength
1957
- ]
1958
- }
1959
- )
1960
- ] })
1961
- ] });
1962
- }
1963
- );
1964
- Textarea2.displayName = "Textarea";
1965
- function Checkbox(_a) {
1966
- var _b = _a, {
1967
- label,
1968
- suffix,
1969
- error,
1970
- indeterminate,
1971
- className = "",
1972
- checked
1973
- } = _b, props = __objRest(_b, [
1974
- "label",
1975
- "suffix",
1976
- "error",
1977
- "indeterminate",
1978
- "className",
1979
- "checked"
1980
- ]);
1981
- const inputRef = React.useRef(null);
1982
- React.useEffect(() => {
1983
- if (inputRef.current) {
1984
- inputRef.current.indeterminate = !!indeterminate;
1985
- }
1986
- }, [indeterminate]);
1987
- return /* @__PURE__ */ jsxs(Div, { className: "w-full", children: [
1988
- /* @__PURE__ */ jsxs("label", { className: "flex flex-row items-center gap-3 cursor-pointer group", children: [
1989
- /* @__PURE__ */ jsxs(Div, { className: "relative flex items-center justify-center flex-shrink-0", children: [
1990
- /* @__PURE__ */ jsx(
1991
- "input",
1992
- __spreadValues({
1993
- ref: inputRef,
1994
- type: "checkbox",
1995
- checked,
1996
- className: cn(
1997
- "peer w-5 h-5 rounded-md border-2 cursor-pointer",
1998
- "transition-all duration-200 appearance-none",
1999
- error ? "border-red-400 dark:border-red-500" : "border-zinc-300 dark:border-slate-600",
2000
- "checked:bg-primary-600 checked:border-primary-600",
2001
- "dark:checked:bg-secondary-500 dark:checked:border-secondary-500",
2002
- "hover:border-primary-400 dark:hover:border-secondary-400",
2003
- "focus:outline-none focus:ring-2 focus:ring-primary-500/30 focus:ring-offset-1",
2004
- "dark:focus:ring-secondary-400/30 dark:focus:ring-offset-slate-900",
2005
- "disabled:opacity-50 disabled:cursor-not-allowed",
2006
- className
2007
- )
2008
- }, props)
2009
- ),
2010
- /* @__PURE__ */ jsx(
2011
- "svg",
2012
- {
2013
- className: "absolute w-3 h-3 text-white pointer-events-none opacity-0 peer-checked:opacity-100 transition-opacity duration-150",
2014
- viewBox: "0 0 12 12",
2015
- fill: "none",
2016
- "aria-hidden": "true",
2017
- children: indeterminate ? /* @__PURE__ */ jsx(
2018
- "line",
2019
- {
2020
- x1: "2",
2021
- y1: "6",
2022
- x2: "10",
2023
- y2: "6",
2024
- stroke: "currentColor",
2025
- strokeWidth: "2",
2026
- strokeLinecap: "round"
2027
- }
2028
- ) : /* @__PURE__ */ jsx(
2029
- "path",
2030
- {
2031
- d: "M2 6L5 9L10 3",
2032
- stroke: "currentColor",
2033
- strokeWidth: "1.5",
2034
- strokeLinecap: "round",
2035
- strokeLinejoin: "round"
2036
- }
2037
- )
2038
- }
2039
- )
2040
- ] }),
2041
- (label || suffix) && /* @__PURE__ */ jsxs(Span, { className: "flex items-center gap-2 text-sm text-zinc-700 dark:text-zinc-300 group-hover:text-zinc-900 dark:group-hover:text-zinc-100 transition-colors", children: [
2042
- label,
2043
- suffix
2044
- ] })
2045
- ] }),
2046
- error && /* @__PURE__ */ jsx("p", { className: cn(ERROR_BASE, "mt-1.5"), role: "alert", children: error })
2047
- ] });
2048
- }
2049
- var SIZE_HINTS = {
2050
- thumbnail: "(max-width: 640px) 80px, (max-width: 1024px) 96px, 112px",
2051
- card: "(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw",
2052
- hero: "100vw",
2053
- banner: "100vw",
2054
- gallery: "(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 33vw",
2055
- avatar: "(max-width: 640px) 48px, 56px"
2056
- };
2057
- var FALLBACK_ICONS = {
2058
- thumbnail: "\u{1F4E6}",
2059
- card: "\u{1F4E6}",
2060
- hero: "\u{1F5BC}\uFE0F",
2061
- banner: "\u{1F5BC}\uFE0F",
2062
- gallery: "\u{1F4E6}",
2063
- avatar: "\u{1F464}"
2064
- };
2065
- function MediaImage({
2066
- src,
2067
- alt,
2068
- size = "card",
2069
- priority = false,
2070
- objectFit = "cover",
2071
- fallback,
2072
- className
2073
- }) {
2074
- const [hasError, setHasError] = useState(false);
2075
- const [isLoaded, setIsLoaded] = useState(false);
2076
- const icon = fallback != null ? fallback : FALLBACK_ICONS[size];
2077
- const fitClass = objectFit === "contain" ? "object-contain" : "object-cover";
2078
- if (!src || hasError) {
2079
- return /* @__PURE__ */ jsx(
2080
- Div,
2081
- {
2082
- className: `absolute inset-0 flex items-center justify-center bg-zinc-100 dark:bg-slate-800 text-zinc-400 text-4xl${className ? ` ${className}` : ""}`,
2083
- role: "img",
2084
- "aria-label": alt,
2085
- children: /* @__PURE__ */ jsx(Span, { "aria-hidden": "true", children: icon })
2086
- }
2087
- );
2088
- }
2089
- const isSvg = src.toLowerCase().endsWith(".svg") || src.includes("image/svg") || /[./]svg(\?|$)/i.test(src);
2090
- return /* @__PURE__ */ jsxs(
2091
- Div,
2092
- {
2093
- className: `absolute inset-0 overflow-hidden${className ? ` ${className}` : ""}`,
2094
- children: [
2095
- !isLoaded && /* @__PURE__ */ jsx(
2096
- Div,
2097
- {
2098
- className: "absolute inset-0 bg-zinc-200 dark:bg-slate-700 animate-pulse",
2099
- "aria-hidden": "true"
2100
- }
2101
- ),
2102
- /* @__PURE__ */ jsx(
2103
- Image,
2104
- {
2105
- src,
2106
- alt,
2107
- fill: true,
2108
- priority,
2109
- className: fitClass,
2110
- sizes: SIZE_HINTS[size],
2111
- onLoad: () => setIsLoaded(true),
2112
- onError: () => setHasError(true),
2113
- unoptimized: isSvg
2114
- }
2115
- )
2116
- ]
2117
- }
2118
- );
2119
- }
2120
- function MediaVideo({
2121
- src,
2122
- thumbnailUrl,
2123
- alt = "Video",
2124
- controls = true,
2125
- autoPlayMuted = false,
2126
- loop = false,
2127
- trimStart,
2128
- trimEnd,
2129
- objectFit = "cover"
2130
- }) {
2131
- const videoRef = useRef(null);
2132
- const fitClass = objectFit === "contain" ? "object-contain" : "object-cover";
2133
- useEffect(() => {
2134
- const el = videoRef.current;
2135
- if (!el || trimStart === void 0) return;
2136
- const onLoaded = () => {
2137
- el.currentTime = trimStart;
2138
- };
2139
- el.addEventListener("loadedmetadata", onLoaded);
2140
- return () => el.removeEventListener("loadedmetadata", onLoaded);
2141
- }, [trimStart]);
2142
- useEffect(() => {
2143
- const el = videoRef.current;
2144
- if (!el || trimEnd === void 0) return;
2145
- const onTimeUpdate = () => {
2146
- if (el.currentTime >= trimEnd) {
2147
- el.pause();
2148
- el.currentTime = trimStart != null ? trimStart : 0;
2149
- }
2150
- };
2151
- el.addEventListener("timeupdate", onTimeUpdate);
2152
- return () => el.removeEventListener("timeupdate", onTimeUpdate);
2153
- }, [trimEnd, trimStart]);
2154
- if (!src) {
2155
- return /* @__PURE__ */ jsx(
2156
- Div,
2157
- {
2158
- className: "absolute inset-0 flex items-center justify-center bg-zinc-100 dark:bg-slate-800 text-zinc-400 text-4xl",
2159
- role: "img",
2160
- "aria-label": alt,
2161
- children: /* @__PURE__ */ jsx(Span, { "aria-hidden": "true", children: "\u{1F3AC}" })
2162
- }
2163
- );
2164
- }
2165
- return /* @__PURE__ */ jsx(
2166
- "video",
2167
- {
2168
- ref: videoRef,
2169
- src,
2170
- poster: thumbnailUrl,
2171
- controls,
2172
- autoPlay: autoPlayMuted,
2173
- muted: autoPlayMuted,
2174
- loop,
2175
- playsInline: true,
2176
- "aria-label": alt,
2177
- className: `absolute inset-0 w-full h-full ${fitClass}`
2178
- }
2179
- );
2180
- }
2181
- function MediaSlider({
2182
- value,
2183
- min = 0,
2184
- max = 100,
2185
- step = 1,
2186
- onChange,
2187
- onChangeEnd,
2188
- className = ""
2189
- }) {
2190
- return /* @__PURE__ */ jsx(
2191
- "input",
2192
- {
2193
- type: "range",
2194
- min,
2195
- max,
2196
- step,
2197
- value,
2198
- onChange: (e) => onChange == null ? void 0 : onChange(parseFloat(e.target.value)),
2199
- onMouseUp: (e) => onChangeEnd == null ? void 0 : onChangeEnd(parseFloat(e.target.value)),
2200
- onTouchEnd: (e) => onChangeEnd == null ? void 0 : onChangeEnd(parseFloat(e.target.value)),
2201
- className: [
2202
- "w-full h-2 appearance-none cursor-pointer rounded-full",
2203
- "bg-zinc-200 dark:bg-slate-700",
2204
- "accent-primary-600 dark:accent-secondary-400",
2205
- className
2206
- ].filter(Boolean).join(" ")
2207
- }
2208
- );
2209
- }
2210
- function useMediaTrim(endpoint = "/api/media/trim") {
2211
- return useMutation({
2212
- mutationFn: (data) => apiClient.post(endpoint, data)
2213
- });
2214
- }
2215
- function formatTime(seconds) {
2216
- const m = Math.floor(seconds / 60);
2217
- const s = Math.floor(seconds % 60);
2218
- return `${m}:${s.toString().padStart(2, "0")}`;
2219
- }
2220
- function VideoTrimModal({
2221
- isOpen,
2222
- videoUrl,
2223
- onClose,
2224
- onSave,
2225
- endpoint
2226
- }) {
2227
- const t = useTranslations("mediaEditor");
2228
- const [duration, setDuration] = useState(0);
2229
- const [startTime, setStartTime] = useState(0);
2230
- const [endTime, setEndTime] = useState(0);
2231
- const [quality, setQuality] = useState("medium");
2232
- const [error, setError] = useState(null);
2233
- const videoRef = useRef(null);
2234
- const { mutateAsync: trim, isPending } = useMediaTrim(endpoint);
2235
- useEffect(() => {
2236
- if (isOpen) {
2237
- setStartTime(0);
2238
- setEndTime(0);
2239
- setDuration(0);
2240
- setError(null);
2241
- }
2242
- }, [isOpen, videoUrl]);
2243
- const handleLoadedMetadata = () => {
2244
- const video = videoRef.current;
2245
- if (!video) return;
2246
- setDuration(video.duration);
2247
- setEndTime(video.duration);
2248
- };
2249
- const seekTo = (time) => {
2250
- if (videoRef.current) videoRef.current.currentTime = time;
2251
- };
2252
- const handleStartChange = (val) => {
2253
- const clamped = Math.min(val, endTime - 0.1);
2254
- setStartTime(clamped);
2255
- seekTo(clamped);
2256
- };
2257
- const handleEndChange = (val) => {
2258
- const clamped = Math.max(val, startTime + 0.1);
2259
- setEndTime(clamped);
2260
- seekTo(clamped);
2261
- };
2262
- const handleTrim = async () => {
2263
- setError(null);
2264
- try {
2265
- const result = await trim({ sourceUrl: videoUrl, startTime, endTime, quality });
2266
- onSave(result.url);
2267
- onClose();
2268
- } catch (err) {
2269
- setError(err instanceof Error ? err.message : t("trimError"));
2270
- }
2271
- };
2272
- const qualityLabels = {
2273
- low: t("trimQualityLow"),
2274
- medium: t("trimQualityMedium"),
2275
- high: t("trimQualityHigh")
2276
- };
2277
- return /* @__PURE__ */ jsx(Modal, { isOpen, onClose, title: t("trimTitle"), size: "lg", children: /* @__PURE__ */ jsxs(Div, { className: "space-y-4", children: [
2278
- /* @__PURE__ */ jsx(Text, { variant: "secondary", className: "text-xs", children: t("trimInstruction") }),
2279
- /* @__PURE__ */ jsx(Div, { className: "relative aspect-video overflow-hidden rounded-lg bg-black", children: /* @__PURE__ */ jsx(
2280
- "video",
2281
- {
2282
- ref: videoRef,
2283
- src: videoUrl,
2284
- className: "absolute inset-0 w-full h-full object-contain",
2285
- controls: true,
2286
- onLoadedMetadata: handleLoadedMetadata
2287
- }
2288
- ) }),
2289
- duration > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
2290
- /* @__PURE__ */ jsxs(Div, { className: "space-y-1", children: [
2291
- /* @__PURE__ */ jsxs(Div, { className: "flex items-center justify-between", children: [
2292
- /* @__PURE__ */ jsx(Text, { size: "sm", children: t("trimStart") }),
2293
- /* @__PURE__ */ jsx(Span, { className: "text-sm font-mono tabular-nums", children: formatTime(startTime) })
2294
- ] }),
2295
- /* @__PURE__ */ jsx(
2296
- MediaSlider,
2297
- {
2298
- value: startTime,
2299
- min: 0,
2300
- max: duration,
2301
- step: 0.1,
2302
- onChange: handleStartChange
2303
- }
2304
- )
2305
- ] }),
2306
- /* @__PURE__ */ jsxs(Div, { className: "space-y-1", children: [
2307
- /* @__PURE__ */ jsxs(Div, { className: "flex items-center justify-between", children: [
2308
- /* @__PURE__ */ jsx(Text, { size: "sm", children: t("trimEnd") }),
2309
- /* @__PURE__ */ jsx(Span, { className: "text-sm font-mono tabular-nums", children: formatTime(endTime) })
2310
- ] }),
2311
- /* @__PURE__ */ jsx(
2312
- MediaSlider,
2313
- {
2314
- value: endTime,
2315
- min: 0,
2316
- max: duration,
2317
- step: 0.1,
2318
- onChange: handleEndChange
2319
- }
2320
- )
2321
- ] }),
2322
- /* @__PURE__ */ jsx(Text, { size: "xs", variant: "secondary", children: t("trimDuration", { duration: (endTime - startTime).toFixed(1) }) }),
2323
- /* @__PURE__ */ jsxs(Div, { className: "space-y-1", children: [
2324
- /* @__PURE__ */ jsx(Text, { size: "sm", children: t("trimQuality") }),
2325
- /* @__PURE__ */ jsx(Div, { className: "flex gap-2", children: ["low", "medium", "high"].map((q) => /* @__PURE__ */ jsx(
2326
- Button,
2327
- {
2328
- type: "button",
2329
- variant: quality === q ? "primary" : "outline",
2330
- size: "sm",
2331
- onClick: () => setQuality(q),
2332
- disabled: isPending,
2333
- children: qualityLabels[q]
2334
- },
2335
- q
2336
- )) })
2337
- ] })
2338
- ] }),
2339
- error && /* @__PURE__ */ jsx(Alert, { variant: "error", children: error }),
2340
- /* @__PURE__ */ jsxs(Div, { className: "flex items-center justify-end gap-2", children: [
2341
- /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", size: "sm", onClick: onClose, disabled: isPending, children: t("trimSkip") }),
2342
- /* @__PURE__ */ jsx(
2343
- Button,
2344
- {
2345
- type: "button",
2346
- variant: "primary",
2347
- size: "sm",
2348
- onClick: handleTrim,
2349
- disabled: isPending || duration === 0,
2350
- children: isPending ? t("trimming") : t("trimSave")
2351
- }
2352
- )
2353
- ] })
2354
- ] }) });
2355
- }
2356
- function VideoThumbnailSelector({
2357
- isOpen,
2358
- videoUrl,
2359
- onClose,
2360
- onSelect,
2361
- onUpload
2362
- }) {
2363
- const t = useTranslations("mediaEditor");
2364
- const [isCapturing, setIsCapturing] = useState(false);
2365
- const [error, setError] = useState(null);
2366
- const videoRef = useRef(null);
2367
- const canvasRef = useRef(null);
2368
- const handleCapture = async () => {
2369
- const video = videoRef.current;
2370
- const canvas = canvasRef.current;
2371
- if (!video || !canvas) return;
2372
- setError(null);
2373
- setIsCapturing(true);
2374
- try {
2375
- video.pause();
2376
- canvas.width = video.videoWidth || 1280;
2377
- canvas.height = video.videoHeight || 720;
2378
- const ctx = canvas.getContext("2d");
2379
- if (!ctx) throw new Error("Canvas context unavailable");
2380
- ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
2381
- const blob = await new Promise(
2382
- (resolve) => canvas.toBlob(resolve, "image/jpeg", 0.9)
2383
- );
2384
- if (!blob) throw new Error(t("thumbnailError"));
2385
- const file = new File([blob], `thumbnail-${Date.now()}.jpg`, { type: "image/jpeg" });
2386
- const url = await onUpload(file);
2387
- onSelect(url);
2388
- onClose();
2389
- } catch (err) {
2390
- setError(err instanceof Error ? err.message : t("thumbnailError"));
2391
- } finally {
2392
- setIsCapturing(false);
2393
- }
2394
- };
2395
- return /* @__PURE__ */ jsx(Modal, { isOpen, onClose, title: t("thumbnailTitle"), size: "lg", children: /* @__PURE__ */ jsxs(Div, { className: "space-y-4", children: [
2396
- /* @__PURE__ */ jsx(Text, { variant: "secondary", className: "text-xs", children: t("thumbnailInstruction") }),
2397
- /* @__PURE__ */ jsx(Div, { className: "relative aspect-video overflow-hidden rounded-lg bg-black", children: /* @__PURE__ */ jsx(
2398
- "video",
2399
- {
2400
- ref: videoRef,
2401
- src: videoUrl,
2402
- className: "absolute inset-0 w-full h-full object-contain",
2403
- controls: true,
2404
- preload: "metadata"
2405
- }
2406
- ) }),
2407
- /* @__PURE__ */ jsx("canvas", { ref: canvasRef, className: "hidden", "aria-hidden": "true" }),
2408
- error && /* @__PURE__ */ jsx(Alert, { variant: "error", children: error }),
2409
- /* @__PURE__ */ jsxs(Div, { className: "flex items-center justify-end gap-2", children: [
2410
- /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", size: "sm", onClick: onClose, disabled: isCapturing, children: t("thumbnailSkip") }),
2411
- /* @__PURE__ */ jsx(
2412
- Button,
2413
- {
2414
- type: "button",
2415
- variant: "primary",
2416
- size: "sm",
2417
- onClick: handleCapture,
2418
- disabled: isCapturing,
2419
- children: isCapturing ? /* @__PURE__ */ jsxs(Span, { className: "flex items-center gap-2", children: [
2420
- /* @__PURE__ */ jsx(Spinner, { size: "sm" }),
2421
- t("thumbnailCapturing")
2422
- ] }) : t("thumbnailCapture")
2423
- }
2424
- )
2425
- ] })
2426
- ] }) });
2427
- }
2428
- function useCamera() {
2429
- const isSupported = typeof navigator !== "undefined" && typeof navigator.mediaDevices !== "undefined" && typeof navigator.mediaDevices.getUserMedia === "function";
2430
- const videoRef = useRef(null);
2431
- const streamRef = useRef(null);
2432
- const mediaRecorderRef = useRef(null);
2433
- const chunksRef = useRef([]);
2434
- const currentFacingModeRef = useRef("environment");
2435
- const stopRecordingResolveRef = useRef(null);
2436
- const [stream, setStream] = useState(null);
2437
- const [isActive, setIsActive] = useState(false);
2438
- const [isCapturing, setIsCapturing] = useState(false);
2439
- const [error, setError] = useState(null);
2440
- const stopCamera = useCallback(() => {
2441
- if (streamRef.current) {
2442
- streamRef.current.getTracks().forEach((t) => t.stop());
2443
- streamRef.current = null;
2444
- }
2445
- if (videoRef.current) {
2446
- videoRef.current.srcObject = null;
2447
- }
2448
- setStream(null);
2449
- setIsActive(false);
2450
- setIsCapturing(false);
2451
- }, []);
2452
- useEffect(() => {
2453
- return () => {
2454
- stopCamera();
2455
- };
2456
- }, [stopCamera]);
2457
- const startCamera = useCallback(
2458
- async (options) => {
2459
- var _a, _b;
2460
- if (!isSupported) {
2461
- setError("Camera is not supported on this device");
2462
- return;
2463
- }
2464
- setError(null);
2465
- stopCamera();
2466
- const facingMode = (_a = options == null ? void 0 : options.facingMode) != null ? _a : "environment";
2467
- currentFacingModeRef.current = facingMode;
2468
- const videoConstraints = (options == null ? void 0 : options.video) !== void 0 ? options.video : { facingMode };
2469
- try {
2470
- const mediaStream = await navigator.mediaDevices.getUserMedia({
2471
- video: videoConstraints,
2472
- audio: (_b = options == null ? void 0 : options.audio) != null ? _b : false
2473
- });
2474
- streamRef.current = mediaStream;
2475
- setStream(mediaStream);
2476
- setIsActive(true);
2477
- if (videoRef.current) {
2478
- videoRef.current.srcObject = mediaStream;
2479
- }
2480
- } catch (err) {
2481
- const message = err instanceof DOMException && err.name === "NotAllowedError" ? "Camera permission denied. Please allow access in your browser settings." : "Camera unavailable";
2482
- setError(message);
2483
- }
2484
- },
2485
- [isSupported, stopCamera]
2486
- );
2487
- const takePhoto = useCallback(() => {
2488
- const video = videoRef.current;
2489
- if (!video || !isActive) return null;
2490
- const canvas = document.createElement("canvas");
2491
- canvas.width = video.videoWidth;
2492
- canvas.height = video.videoHeight;
2493
- const ctx = canvas.getContext("2d");
2494
- if (!ctx) return null;
2495
- ctx.drawImage(video, 0, 0);
2496
- let result = null;
2497
- canvas.toBlob(
2498
- (blob) => {
2499
- result = blob;
2500
- },
2501
- "image/webp",
2502
- 0.92
2503
- );
2504
- return result;
2505
- }, [isActive]);
2506
- const startRecording = useCallback(() => {
2507
- if (!streamRef.current || !isActive) return;
2508
- chunksRef.current = [];
2509
- const recorder = new MediaRecorder(streamRef.current, {
2510
- mimeType: "video/webm"
2511
- });
2512
- recorder.ondataavailable = (e) => {
2513
- if (e.data.size > 0) chunksRef.current.push(e.data);
2514
- };
2515
- recorder.onstop = () => {
2516
- const blob = new Blob(chunksRef.current, { type: "video/webm" });
2517
- setIsCapturing(false);
2518
- if (stopRecordingResolveRef.current) {
2519
- stopRecordingResolveRef.current(blob);
2520
- stopRecordingResolveRef.current = null;
2521
- }
2522
- };
2523
- mediaRecorderRef.current = recorder;
2524
- recorder.start();
2525
- setIsCapturing(true);
2526
- }, [isActive]);
2527
- const stopRecording = useCallback(() => {
2528
- return new Promise((resolve) => {
2529
- stopRecordingResolveRef.current = resolve;
2530
- if (mediaRecorderRef.current && mediaRecorderRef.current.state !== "inactive") {
2531
- mediaRecorderRef.current.stop();
2532
- } else {
2533
- resolve(new Blob([], { type: "video/webm" }));
2534
- }
2535
- });
2536
- }, []);
2537
- const switchCamera = useCallback(async () => {
2538
- const next = currentFacingModeRef.current === "environment" ? "user" : "environment";
2539
- await startCamera({ facingMode: next });
2540
- }, [startCamera]);
2541
- return {
2542
- isSupported,
2543
- isActive,
2544
- isCapturing,
2545
- stream,
2546
- error,
2547
- videoRef,
2548
- startCamera,
2549
- stopCamera,
2550
- takePhoto,
2551
- startRecording,
2552
- stopRecording,
2553
- switchCamera
2554
- };
2555
- }
2556
-
2557
- // src/core/Logger.ts
2558
- var Logger = class _Logger {
2559
- constructor(options) {
2560
- this.logs = [];
2561
- this.levelPriority = {
2562
- debug: 0,
2563
- info: 1,
2564
- warn: 2,
2565
- error: 3
2566
- };
2567
- var _a, _b, _c, _d, _e;
2568
- const fileUrl = (_a = options == null ? void 0 : options.logFileUrl) != null ? _a : (options == null ? void 0 : options.enableFileLogging) ? "/api/logs/write" : void 0;
2569
- this.options = {
2570
- minLevel: (_b = options == null ? void 0 : options.minLevel) != null ? _b : "debug",
2571
- enableConsole: (_c = options == null ? void 0 : options.enableConsole) != null ? _c : true,
2572
- enableStorage: (_d = options == null ? void 0 : options.enableStorage) != null ? _d : false,
2573
- logFileUrl: fileUrl,
2574
- maxEntries: (_e = options == null ? void 0 : options.maxEntries) != null ? _e : 1e3,
2575
- sanitizer: options == null ? void 0 : options.sanitizer
2576
- };
2577
- }
2578
- /** Get singleton instance */
2579
- static getInstance(options) {
2580
- if (!_Logger.instance) {
2581
- _Logger.instance = new _Logger(options);
2582
- }
2583
- return _Logger.instance;
2584
- }
2585
- /** Set or update the data sanitizer (e.g., for PII redaction). */
2586
- static setSanitizer(fn) {
2587
- _Logger.getInstance().options.sanitizer = fn;
2588
- }
2589
- shouldLog(level) {
2590
- return this.levelPriority[level] >= this.levelPriority[this.options.minLevel];
2591
- }
2592
- addLog(level, message, data) {
2593
- if (!this.shouldLog(level)) return;
2594
- const sanitized = data && this.options.sanitizer ? this.options.sanitizer(data) : data;
2595
- const entry = {
2596
- level,
2597
- message,
2598
- timestamp: /* @__PURE__ */ new Date(),
2599
- data: sanitized
2600
- };
2601
- this.logs.push(entry);
2602
- if (this.logs.length > this.options.maxEntries) {
2603
- this.logs.shift();
2604
- }
2605
- if (this.options.enableConsole) {
2606
- this.logToConsole(entry);
2607
- }
2608
- if (this.options.enableStorage && typeof window !== "undefined") {
2609
- this.saveToStorage();
2610
- }
2611
- if (this.options.logFileUrl && level === "error") {
2612
- this.writeToFile(entry).catch(() => {
2613
- });
2614
- }
2615
- }
2616
- logToConsole(entry) {
2617
- const prefix = `[${entry.level.toUpperCase()}] ${entry.timestamp.toISOString()}`;
2618
- const message = `${prefix} ${entry.message}`;
2619
- switch (entry.level) {
2620
- case "debug":
2621
- console.debug(message, entry.data);
2622
- break;
2623
- case "info":
2624
- console.info(message, entry.data);
2625
- break;
2626
- case "warn":
2627
- console.warn(message, entry.data);
2628
- break;
2629
- case "error":
2630
- console.error(message, entry.data);
2631
- break;
2632
- }
2633
- }
2634
- saveToStorage() {
2635
- try {
2636
- localStorage.setItem("app_logs", JSON.stringify(this.logs));
2637
- } catch (e) {
2638
- }
2639
- }
2640
- async writeToFile(entry) {
2641
- if (typeof window === "undefined" || !this.options.logFileUrl) return;
2642
- try {
2643
- await fetch(this.options.logFileUrl, {
2644
- method: "POST",
2645
- headers: { "Content-Type": "application/json" },
2646
- body: JSON.stringify({
2647
- level: entry.level,
2648
- message: entry.message,
2649
- timestamp: entry.timestamp.toISOString(),
2650
- data: entry.data
2651
- })
2652
- });
2653
- } catch (e) {
2654
- }
2655
- }
2656
- debug(message, data) {
2657
- this.addLog("debug", message, data);
2658
- }
2659
- info(message, data) {
2660
- this.addLog("info", message, data);
2661
- }
2662
- warn(message, data) {
2663
- this.addLog("warn", message, data);
2664
- }
2665
- error(message, data) {
2666
- this.addLog("error", message, data);
2667
- }
2668
- getLogs(level) {
2669
- if (level) return this.logs.filter((log) => log.level === level);
2670
- return [...this.logs];
2671
- }
2672
- clear() {
2673
- this.logs = [];
2674
- if (this.options.enableStorage && typeof window !== "undefined") {
2675
- localStorage.removeItem("app_logs");
2676
- }
2677
- }
2678
- export() {
2679
- return JSON.stringify(this.logs, null, 2);
2680
- }
2681
- getStats() {
2682
- return {
2683
- debug: this.logs.filter((l) => l.level === "debug").length,
2684
- info: this.logs.filter((l) => l.level === "info").length,
2685
- warn: this.logs.filter((l) => l.level === "warn").length,
2686
- error: this.logs.filter((l) => l.level === "error").length
2687
- };
2688
- }
2689
- };
2690
- Logger.getInstance();
2691
-
2692
- // src/core/Queue.ts
2693
- Logger.getInstance();
2694
-
2695
- // src/core/StorageManager.ts
2696
- var sLogger = Logger.getInstance();
2697
- var _StorageManager = class _StorageManager {
2698
- constructor(prefix = "app_") {
2699
- this.prefix = prefix;
2700
- }
2701
- /**
2702
- * Get-or-create a StorageManager for the given prefix.
2703
- * Each prefix returns an independent instance.
2704
- */
2705
- static getInstance(prefix = "") {
2706
- if (!_StorageManager.instances.has(prefix)) {
2707
- _StorageManager.instances.set(prefix, new _StorageManager(prefix));
2708
- }
2709
- return _StorageManager.instances.get(prefix);
2710
- }
2711
- getStorage(type) {
2712
- try {
2713
- if (typeof window === "undefined") return null;
2714
- const storage = type === "local" ? window.localStorage : window.sessionStorage;
2715
- return storage != null ? storage : null;
2716
- } catch (e) {
2717
- return null;
2718
- }
2719
- }
2720
- generateKey(key) {
2721
- return `${this.prefix}${key}`;
2722
- }
2723
- set(key, value, options) {
2724
- var _a;
2725
- const storage = this.getStorage((_a = options == null ? void 0 : options.type) != null ? _a : "local");
2726
- if (!storage) return false;
2727
- try {
2728
- storage.setItem(this.generateKey(key), JSON.stringify(value));
2729
- return true;
2730
- } catch (error) {
2731
- sLogger.error("StorageManager.set error", { error });
2732
- return false;
2733
- }
2734
- }
2735
- get(key, options) {
2736
- var _a;
2737
- const storage = this.getStorage((_a = options == null ? void 0 : options.type) != null ? _a : "local");
2738
- if (!storage) return null;
2739
- try {
2740
- const item = storage.getItem(this.generateKey(key));
2741
- if (item === null) return null;
2742
- return JSON.parse(item);
2743
- } catch (error) {
2744
- sLogger.error("StorageManager.get error", { error });
2745
- return null;
2746
- }
2747
- }
2748
- remove(key, options) {
2749
- var _a;
2750
- const storage = this.getStorage((_a = options == null ? void 0 : options.type) != null ? _a : "local");
2751
- if (!storage) return false;
2752
- try {
2753
- storage.removeItem(this.generateKey(key));
2754
- return true;
2755
- } catch (error) {
2756
- sLogger.error("StorageManager.remove error", { error });
2757
- return false;
2758
- }
2759
- }
2760
- clear(options) {
2761
- var _a;
2762
- const storage = this.getStorage((_a = options == null ? void 0 : options.type) != null ? _a : "local");
2763
- if (!storage) return false;
2764
- try {
2765
- const keys = Object.keys(storage);
2766
- keys.forEach((k) => {
2767
- if (k.startsWith(this.prefix)) storage.removeItem(k);
2768
- });
2769
- return true;
2770
- } catch (error) {
2771
- sLogger.error("StorageManager.clear error", { error });
2772
- return false;
2773
- }
2774
- }
2775
- has(key, options) {
2776
- return this.get(key, options) !== null;
2777
- }
2778
- keys(options) {
2779
- var _a;
2780
- const storage = this.getStorage((_a = options == null ? void 0 : options.type) != null ? _a : "local");
2781
- if (!storage) return [];
2782
- const result = [];
2783
- for (let i = 0; i < storage.length; i++) {
2784
- const k = storage.key(i);
2785
- if (k == null ? void 0 : k.startsWith(this.prefix)) {
2786
- result.push(k.slice(this.prefix.length));
2787
- }
2788
- }
2789
- return result;
2790
- }
2791
- size(options) {
2792
- var _a, _b;
2793
- const storage = this.getStorage((_a = options == null ? void 0 : options.type) != null ? _a : "local");
2794
- if (!storage) return 0;
2795
- let bytes = 0;
2796
- for (let i = 0; i < storage.length; i++) {
2797
- const k = storage.key(i);
2798
- if (k == null ? void 0 : k.startsWith(this.prefix)) {
2799
- const v = storage.getItem(k);
2800
- bytes += k.length + ((_b = v == null ? void 0 : v.length) != null ? _b : 0);
2801
- }
2802
- }
2803
- return bytes;
2804
- }
2805
- isAvailable(type = "local") {
2806
- const storage = this.getStorage(type);
2807
- if (!storage) return false;
2808
- try {
2809
- const testKey = "__storage_test__";
2810
- storage.setItem(testKey, "1");
2811
- storage.removeItem(testKey);
2812
- return true;
2813
- } catch (e) {
2814
- return false;
2815
- }
2816
- }
2817
- getAll(options) {
2818
- var _a;
2819
- const storage = this.getStorage((_a = options == null ? void 0 : options.type) != null ? _a : "local");
2820
- if (!storage) return {};
2821
- const result = {};
2822
- for (let i = 0; i < storage.length; i++) {
2823
- const k = storage.key(i);
2824
- if (k == null ? void 0 : k.startsWith(this.prefix)) {
2825
- const v = this.get(k.slice(this.prefix.length), options);
2826
- if (v !== null) result[k.slice(this.prefix.length)] = v;
2827
- }
2828
- }
2829
- return result;
2830
- }
2831
- };
2832
- /** Per-prefix instance map — prevents namespace collisions */
2833
- _StorageManager.instances = /* @__PURE__ */ new Map();
2834
- var StorageManager = _StorageManager;
2835
- StorageManager.getInstance("");
2836
-
2837
- // src/core/EventBus.ts
2838
- Logger.getInstance();
2839
-
2840
- // src/security/authorization.ts
2841
- init_errors();
2842
-
2843
- // src/monitoring/client-logger.ts
2844
- init_errors();
2845
-
2846
- // src/monitoring/server-logger.ts
2847
- init_errors();
2848
- function CameraCapture({
2849
- mode,
2850
- facingMode = "environment",
2851
- onCapture,
2852
- onError,
2853
- className
2854
- }) {
2855
- const t = useTranslations("camera");
2856
- const camera = useCamera();
2857
- const [isStarting, setIsStarting] = useState(false);
2858
- const [hasMultipleCameras, setHasMultipleCameras] = useState(false);
2859
- useEffect(() => {
2860
- let cancelled = false;
2861
- async function init() {
2862
- var _a;
2863
- setIsStarting(true);
2864
- if (typeof navigator !== "undefined" && ((_a = navigator.mediaDevices) == null ? void 0 : _a.enumerateDevices)) {
2865
- const devices = await navigator.mediaDevices.enumerateDevices();
2866
- if (!cancelled) {
2867
- setHasMultipleCameras(
2868
- devices.filter((d) => d.kind === "videoinput").length > 1
2869
- );
2870
- }
2871
- }
2872
- await camera.startCamera({
2873
- facingMode,
2874
- audio: mode === "video" || mode === "both"
2875
- });
2876
- if (!cancelled) setIsStarting(false);
2877
- }
2878
- void init();
2879
- return () => {
2880
- cancelled = true;
2881
- };
2882
- }, []);
2883
- useEffect(() => {
2884
- if (camera.error && onError) onError(camera.error);
2885
- }, [camera.error, onError]);
2886
- const handleTakePhoto = () => {
2887
- const blob = camera.takePhoto();
2888
- if (blob) onCapture(blob, "photo");
2889
- };
2890
- const handleStopRecording = async () => {
2891
- const blob = await camera.stopRecording();
2892
- onCapture(blob, "video");
2893
- };
2894
- const showPhotoButton = mode === "photo" || mode === "both";
2895
- const showVideoButton = mode === "video" || mode === "both";
2896
- return /* @__PURE__ */ jsxs(
2897
- Div,
2898
- {
2899
- className: `relative rounded-xl overflow-hidden bg-black ${className != null ? className : ""}`,
2900
- children: [
2901
- /* @__PURE__ */ jsx(
2902
- "video",
2903
- {
2904
- ref: camera.videoRef,
2905
- autoPlay: true,
2906
- muted: true,
2907
- playsInline: true,
2908
- className: "w-full aspect-video object-cover"
2909
- }
2910
- ),
2911
- isStarting && /* @__PURE__ */ jsx(Div, { className: "absolute inset-0 flex items-center justify-center bg-black/60", children: /* @__PURE__ */ jsxs(Div, { className: "flex flex-col items-center gap-2", children: [
2912
- /* @__PURE__ */ jsx(Spinner, {}),
2913
- /* @__PURE__ */ jsx(Span, { className: "text-white text-sm", children: t("starting") })
2914
- ] }) }),
2915
- camera.error && /* @__PURE__ */ jsx(Div, { className: "absolute top-2 left-2 right-2", children: /* @__PURE__ */ jsx(Alert, { variant: "error", children: camera.error }) }),
2916
- !isStarting && !camera.error && camera.isActive && /* @__PURE__ */ jsxs(Div, { className: "absolute bottom-0 left-0 right-0 p-3 bg-black/40 flex items-center justify-center gap-3", children: [
2917
- showPhotoButton && /* @__PURE__ */ jsx(
2918
- Button,
2919
- {
2920
- variant: "secondary",
2921
- onClick: handleTakePhoto,
2922
- "aria-label": t("takePhoto"),
2923
- disabled: camera.isCapturing,
2924
- children: t("takePhoto")
2925
- }
2926
- ),
2927
- showVideoButton && /* @__PURE__ */ jsx(
2928
- Button,
2929
- {
2930
- variant: camera.isCapturing ? "danger" : "secondary",
2931
- onClick: camera.isCapturing ? handleStopRecording : () => camera.startRecording(),
2932
- "aria-label": camera.isCapturing ? t("stopRecording") : t("startRecording"),
2933
- children: camera.isCapturing ? t("stopRecording") : t("startRecording")
2934
- }
2935
- ),
2936
- hasMultipleCameras && /* @__PURE__ */ jsx(
2937
- Button,
2938
- {
2939
- variant: "outline",
2940
- onClick: () => void camera.switchCamera(),
2941
- "aria-label": t("flipCamera"),
2942
- disabled: camera.isCapturing,
2943
- children: t("flipCamera")
2944
- }
2945
- )
2946
- ] })
2947
- ]
2948
- }
2949
- );
2950
- }
2951
- function isVideo(url) {
2952
- return /\.(mp4|webm|ogg|mov|avi)(\?|$)/i.test(url);
2953
- }
2954
- function isImage(url) {
2955
- return /\.(jpe?g|png|gif|webp|svg)(\?|$)/i.test(url);
2956
- }
2957
- function filenameFromUrl(url) {
2958
- try {
2959
- const parts = new URL(url).pathname.split("/");
2960
- return decodeURIComponent(parts[parts.length - 1] || url);
2961
- } catch (e) {
2962
- return url;
2963
- }
2964
- }
2965
- function MediaUploadField({
2966
- label,
2967
- value,
2968
- onChange,
2969
- onChangeField,
2970
- onUpload,
2971
- accept = "*",
2972
- maxSizeMB = 50,
2973
- disabled = false,
2974
- helperText,
2975
- captureSource = "file-only",
2976
- captureMode = "photo",
2977
- enableTrim = true,
2978
- enableThumbnail = true,
2979
- onThumbnailChange,
2980
- onAbort,
2981
- onStagedUrlsChange,
2982
- isPersisted = false
2983
- }) {
2984
- const [isLoading, setIsLoading] = useState(false);
2985
- const [error, setError] = useState(null);
2986
- const [pendingVideoUrl, setPendingVideoUrl] = useState(null);
2987
- const [showTrimModal, setShowTrimModal] = useState(false);
2988
- const [showThumbnailModal, setShowThumbnailModal] = useState(false);
2989
- const [inputMode, setInputMode] = useState("file");
2990
- const fileInputRef = useRef(null);
2991
- const mobileCaptureRef = useRef(null);
2992
- const stagedUrlsRef = useRef([]);
2993
- const onAbortRef = useRef(onAbort);
2994
- const onStagedUrlsChangeRef = useRef(onStagedUrlsChange);
2995
- const isPersistedRef = useRef(isPersisted);
2996
- useEffect(() => {
2997
- onAbortRef.current = onAbort;
2998
- }, [onAbort]);
2999
- useEffect(() => {
3000
- onStagedUrlsChangeRef.current = onStagedUrlsChange;
3001
- }, [onStagedUrlsChange]);
3002
- useEffect(() => {
3003
- isPersistedRef.current = isPersisted;
3004
- }, [isPersisted]);
3005
- useEffect(() => {
3006
- return () => {
3007
- var _a;
3008
- if (!isPersistedRef.current && stagedUrlsRef.current.length > 0) {
3009
- (_a = onAbortRef.current) == null ? void 0 : _a.call(onAbortRef, [...stagedUrlsRef.current]);
3010
- }
3011
- };
3012
- }, []);
3013
- const emitStaged = () => {
3014
- var _a;
3015
- (_a = onStagedUrlsChangeRef.current) == null ? void 0 : _a.call(onStagedUrlsChangeRef, [...stagedUrlsRef.current]);
3016
- };
3017
- const stageUrl = (url) => {
3018
- if (!stagedUrlsRef.current.includes(url)) {
3019
- stagedUrlsRef.current.push(url);
3020
- emitStaged();
3021
- }
3022
- };
3023
- const unstageUrl = (url) => {
3024
- const next = stagedUrlsRef.current.filter((u) => u !== url);
3025
- if (next.length !== stagedUrlsRef.current.length) {
3026
- stagedUrlsRef.current = next;
3027
- emitStaged();
3028
- }
3029
- };
3030
- const t = useTranslations("camera");
3031
- const tUpload = useTranslations("upload");
3032
- const tMediaEditor = useTranslations("mediaEditor");
3033
- const { isSupported: isCameraSupported } = useCamera();
3034
- const showCamera = captureSource === "camera-only" || captureSource === "both" && inputMode === "camera";
3035
- const showFileInput = captureSource === "file-only" || captureSource === "both" && inputMode === "file";
3036
- const captureModeAccept = captureMode === "video" ? "video/*" : captureMode === "both" ? "image/*,video/*" : "image/*";
3037
- const afterUpload = (url, fileType) => {
3038
- onChangeField == null ? void 0 : onChangeField({
3039
- url,
3040
- type: inferMediaTypeFromMime(fileType, url)
3041
- });
3042
- const isVideoFile = fileType.startsWith("video/");
3043
- if (isVideoFile && enableTrim) {
3044
- setPendingVideoUrl(url);
3045
- setShowTrimModal(true);
3046
- return;
3047
- }
3048
- if (isVideoFile && enableThumbnail) {
3049
- setPendingVideoUrl(url);
3050
- setShowThumbnailModal(true);
3051
- return;
3052
- }
3053
- onChange(url);
3054
- };
3055
- const handleTrimSave = (trimmedUrl) => {
3056
- setShowTrimModal(false);
3057
- if (enableThumbnail) {
3058
- setPendingVideoUrl(trimmedUrl);
3059
- setShowThumbnailModal(true);
3060
- } else {
3061
- onChange(trimmedUrl);
3062
- setPendingVideoUrl(null);
3063
- }
3064
- };
3065
- const handleTrimClose = () => {
3066
- setShowTrimModal(false);
3067
- if (enableThumbnail && pendingVideoUrl) {
3068
- setShowThumbnailModal(true);
3069
- } else {
3070
- if (pendingVideoUrl) onChange(pendingVideoUrl);
3071
- setPendingVideoUrl(null);
3072
- }
3073
- };
3074
- const handleThumbnailSelect = (thumbUrl) => {
3075
- setShowThumbnailModal(false);
3076
- if (pendingVideoUrl) onChange(pendingVideoUrl);
3077
- onThumbnailChange == null ? void 0 : onThumbnailChange(thumbUrl);
3078
- setPendingVideoUrl(null);
3079
- };
3080
- const handleThumbnailClose = () => {
3081
- setShowThumbnailModal(false);
3082
- if (pendingVideoUrl) onChange(pendingVideoUrl);
3083
- setPendingVideoUrl(null);
3084
- };
3085
- const handleFileChange = async (e) => {
3086
- var _a;
3087
- const file = (_a = e.target.files) == null ? void 0 : _a[0];
3088
- if (!file) return;
3089
- const fileSizeMB = file.size / 1024 / 1024;
3090
- if (fileSizeMB > maxSizeMB) {
3091
- setError(`File size must be less than ${maxSizeMB}MB`);
3092
- return;
3093
- }
3094
- setError(null);
3095
- setIsLoading(true);
3096
- try {
3097
- const url = await onUpload(file);
3098
- stageUrl(url);
3099
- afterUpload(url, file.type);
3100
- } catch (err) {
3101
- setError(err instanceof Error ? err.message : "Upload failed");
3102
- } finally {
3103
- setIsLoading(false);
3104
- if (fileInputRef.current) fileInputRef.current.value = "";
3105
- }
3106
- };
3107
- const handleRemove = () => {
3108
- var _a;
3109
- if (value && stagedUrlsRef.current.includes(value)) {
3110
- (_a = onAbortRef.current) == null ? void 0 : _a.call(onAbortRef, [value]);
3111
- unstageUrl(value);
3112
- }
3113
- onChange("");
3114
- onChangeField == null ? void 0 : onChangeField(null);
3115
- setError(null);
3116
- };
3117
- const handleCameraCapture = async (blob, type) => {
3118
- const ext = type === "video" ? "webm" : "webp";
3119
- const file = new File([blob], `camera-capture.${ext}`, { type: blob.type });
3120
- setError(null);
3121
- setIsLoading(true);
3122
- try {
3123
- const url = await onUpload(file);
3124
- stageUrl(url);
3125
- afterUpload(url, blob.type);
3126
- } catch (err) {
3127
- setError(err instanceof Error ? err.message : "Upload failed");
3128
- } finally {
3129
- setIsLoading(false);
3130
- }
3131
- };
3132
- return /* @__PURE__ */ jsxs(Div, { className: "space-y-2", children: [
3133
- /* @__PURE__ */ jsx(Label, { className: "block text-sm font-medium text-zinc-600 dark:text-zinc-400", children: label }),
3134
- value && !isLoading && /* @__PURE__ */ jsxs(Div, { className: "rounded-lg border border-zinc-200 dark:border-zinc-700 bg-zinc-50 dark:bg-zinc-900 p-3", children: [
3135
- isVideo(value) ? /* @__PURE__ */ jsx(Div, { className: "relative aspect-video overflow-hidden rounded-lg", children: /* @__PURE__ */ jsx(
3136
- MediaVideo,
3137
- {
3138
- src: value,
3139
- alt: label,
3140
- controls: true,
3141
- objectFit: "contain"
3142
- }
3143
- ) }) : isImage(value) ? /* @__PURE__ */ jsx(Div, { className: "relative aspect-video overflow-hidden rounded-lg", children: /* @__PURE__ */ jsx(
3144
- MediaImage,
3145
- {
3146
- src: value,
3147
- alt: label,
3148
- size: "card",
3149
- objectFit: "contain"
3150
- }
3151
- ) }) : /* @__PURE__ */ jsx(
3152
- "a",
3153
- {
3154
- href: value,
3155
- target: "_blank",
3156
- rel: "noopener noreferrer",
3157
- className: "text-sm underline break-all text-blue-600 dark:text-blue-400",
3158
- children: filenameFromUrl(value)
3159
- }
3160
- ),
3161
- !disabled && /* @__PURE__ */ jsxs(Row, { wrap: true, gap: "sm", className: "mt-2", children: [
3162
- isVideo(value) && (enableTrim || enableThumbnail) && /* @__PURE__ */ jsx(
3163
- Button,
3164
- {
3165
- type: "button",
3166
- onClick: () => {
3167
- setPendingVideoUrl(value);
3168
- if (enableTrim) setShowTrimModal(true);
3169
- else setShowThumbnailModal(true);
3170
- },
3171
- variant: "secondary",
3172
- size: "sm",
3173
- children: tMediaEditor("editVideo")
3174
- }
3175
- ),
3176
- /* @__PURE__ */ jsx(
3177
- Button,
3178
- {
3179
- type: "button",
3180
- onClick: handleRemove,
3181
- variant: "danger",
3182
- size: "sm",
3183
- children: tUpload("remove")
3184
- }
3185
- )
3186
- ] })
3187
- ] }),
3188
- !disabled && !isLoading && /* @__PURE__ */ jsxs(Fragment, { children: [
3189
- captureSource === "both" && isCameraSupported && /* @__PURE__ */ jsxs(Div, { className: "flex items-center gap-2", children: [
3190
- /* @__PURE__ */ jsx(
3191
- Button,
3192
- {
3193
- type: "button",
3194
- variant: inputMode === "file" ? "primary" : "outline",
3195
- size: "sm",
3196
- onClick: () => setInputMode("file"),
3197
- children: t("switchToUpload")
3198
- }
3199
- ),
3200
- /* @__PURE__ */ jsx(
3201
- Button,
3202
- {
3203
- type: "button",
3204
- variant: inputMode === "camera" ? "primary" : "outline",
3205
- size: "sm",
3206
- onClick: () => setInputMode("camera"),
3207
- children: t("switchToCamera")
3208
- }
3209
- )
3210
- ] }),
3211
- showCamera && isCameraSupported && /* @__PURE__ */ jsx(
3212
- CameraCapture,
3213
- {
3214
- mode: captureMode,
3215
- facingMode: "environment",
3216
- onCapture: handleCameraCapture,
3217
- onError: (msg) => setError(msg)
3218
- }
3219
- ),
3220
- showCamera && !isCameraSupported && /* @__PURE__ */ jsx(
3221
- Button,
3222
- {
3223
- type: "button",
3224
- onClick: () => {
3225
- var _a;
3226
- return (_a = mobileCaptureRef.current) == null ? void 0 : _a.click();
3227
- },
3228
- variant: "ghost",
3229
- className: "w-full py-3 border-2 border-dashed border-zinc-200 dark:border-zinc-700 rounded-xl text-sm text-zinc-500 dark:text-zinc-400",
3230
- children: t("switchToCamera")
3231
- }
3232
- ),
3233
- showFileInput && /* @__PURE__ */ jsx(
3234
- Button,
3235
- {
3236
- type: "button",
3237
- onClick: () => {
3238
- var _a;
3239
- return (_a = fileInputRef.current) == null ? void 0 : _a.click();
3240
- },
3241
- variant: "ghost",
3242
- className: "w-full py-3 border-2 border-dashed border-zinc-200 dark:border-zinc-700 rounded-xl text-sm text-zinc-500 dark:text-zinc-400",
3243
- children: value ? tUpload("replaceFile") : tUpload("chooseFile")
3244
- }
3245
- )
3246
- ] }),
3247
- isLoading && /* @__PURE__ */ jsxs(Div, { className: "flex items-center gap-2", children: [
3248
- /* @__PURE__ */ jsx(Spinner, { size: "sm" }),
3249
- /* @__PURE__ */ jsx(Text, { size: "sm", variant: "secondary", children: tUpload("uploading") })
3250
- ] }),
3251
- /* @__PURE__ */ jsx(
3252
- "input",
3253
- {
3254
- ref: fileInputRef,
3255
- type: "file",
3256
- accept,
3257
- onChange: handleFileChange,
3258
- className: "hidden",
3259
- "aria-hidden": "true"
3260
- }
3261
- ),
3262
- showCamera && !isCameraSupported && /* @__PURE__ */ jsx(
3263
- "input",
3264
- {
3265
- ref: mobileCaptureRef,
3266
- type: "file",
3267
- accept: captureModeAccept,
3268
- capture: "environment",
3269
- onChange: handleFileChange,
3270
- className: "hidden",
3271
- "aria-hidden": "true"
3272
- }
3273
- ),
3274
- helperText && !error && /* @__PURE__ */ jsx(Text, { variant: "secondary", size: "xs", children: helperText }),
3275
- error && /* @__PURE__ */ jsx(Alert, { variant: "error", children: error }),
3276
- pendingVideoUrl && /* @__PURE__ */ jsx(
3277
- VideoTrimModal,
3278
- {
3279
- isOpen: showTrimModal,
3280
- videoUrl: pendingVideoUrl,
3281
- onClose: handleTrimClose,
3282
- onSave: handleTrimSave
3283
- }
3284
- ),
3285
- pendingVideoUrl && /* @__PURE__ */ jsx(
3286
- VideoThumbnailSelector,
3287
- {
3288
- isOpen: showThumbnailModal,
3289
- videoUrl: pendingVideoUrl,
3290
- onClose: handleThumbnailClose,
3291
- onSelect: handleThumbnailSelect,
3292
- onUpload
3293
- }
3294
- )
3295
- ] });
3296
- }
3297
- function fileNameFromUrl(url) {
3298
- try {
3299
- const parts = new URL(url).pathname.split("/");
3300
- return decodeURIComponent(parts[parts.length - 1] || url);
3301
- } catch (e) {
3302
- return url;
3303
- }
3304
- }
3305
- function MediaUploadList({
3306
- label,
3307
- value,
3308
- onChange,
3309
- onUpload,
3310
- accept = "image/*,video/*",
3311
- maxSizeMB = 50,
3312
- maxItems = 12,
3313
- disabled = false,
3314
- helperText,
3315
- onAbort,
3316
- onStagedUrlsChange,
3317
- isPersisted = false
3318
- }) {
3319
- const inputRef = useRef(null);
3320
- const [isLoading, setIsLoading] = useState(false);
3321
- const [error, setError] = useState(null);
3322
- const stagedUrlsRef = useRef([]);
3323
- const onAbortRef = useRef(onAbort);
3324
- const onStagedUrlsChangeRef = useRef(onStagedUrlsChange);
3325
- const isPersistedRef = useRef(isPersisted);
3326
- useEffect(() => {
3327
- onAbortRef.current = onAbort;
3328
- }, [onAbort]);
3329
- useEffect(() => {
3330
- onStagedUrlsChangeRef.current = onStagedUrlsChange;
3331
- }, [onStagedUrlsChange]);
3332
- useEffect(() => {
3333
- isPersistedRef.current = isPersisted;
3334
- }, [isPersisted]);
3335
- useEffect(() => {
3336
- return () => {
3337
- var _a;
3338
- if (!isPersistedRef.current && stagedUrlsRef.current.length > 0) {
3339
- (_a = onAbortRef.current) == null ? void 0 : _a.call(onAbortRef, [...stagedUrlsRef.current]);
3340
- }
3341
- };
3342
- }, []);
3343
- const emitStaged = () => {
3344
- var _a;
3345
- (_a = onStagedUrlsChangeRef.current) == null ? void 0 : _a.call(onStagedUrlsChangeRef, [...stagedUrlsRef.current]);
3346
- };
3347
- const stageUrl = (url) => {
3348
- if (!stagedUrlsRef.current.includes(url)) {
3349
- stagedUrlsRef.current.push(url);
3350
- emitStaged();
3351
- }
3352
- };
3353
- const unstageUrl = (url) => {
3354
- const next = stagedUrlsRef.current.filter((u) => u !== url);
3355
- if (next.length !== stagedUrlsRef.current.length) {
3356
- stagedUrlsRef.current = next;
3357
- emitStaged();
3358
- }
3359
- };
3360
- const handleFileChange = async (e) => {
3361
- var _a;
3362
- const files = Array.from((_a = e.target.files) != null ? _a : []);
3363
- if (files.length === 0) return;
3364
- if (value.length + files.length > maxItems) {
3365
- setError(`You can upload up to ${maxItems} files.`);
3366
- e.currentTarget.value = "";
3367
- return;
3368
- }
3369
- setError(null);
3370
- setIsLoading(true);
3371
- try {
3372
- const uploaded = [];
3373
- for (const file of files) {
3374
- const sizeMb = file.size / 1024 / 1024;
3375
- if (sizeMb > maxSizeMB) {
3376
- throw new Error(`${file.name} exceeds ${maxSizeMB}MB`);
3377
- }
3378
- const url = await onUpload(file);
3379
- stageUrl(url);
3380
- uploaded.push({
3381
- url,
3382
- type: inferMediaTypeFromMime(file.type, url)
3383
- });
3384
- }
3385
- onChange([...value, ...uploaded]);
3386
- } catch (err) {
3387
- setError(err instanceof Error ? err.message : "Upload failed");
3388
- } finally {
3389
- setIsLoading(false);
3390
- e.currentTarget.value = "";
3391
- }
3392
- };
3393
- const removeAt = (index) => {
3394
- var _a;
3395
- const target = value[index];
3396
- if (!target) return;
3397
- const next = value.filter((_, i) => i !== index);
3398
- onChange(next);
3399
- if (stagedUrlsRef.current.includes(target.url)) {
3400
- (_a = onAbortRef.current) == null ? void 0 : _a.call(onAbortRef, [target.url]);
3401
- unstageUrl(target.url);
3402
- }
3403
- };
3404
- return /* @__PURE__ */ jsxs(Div, { className: "space-y-2", children: [
3405
- /* @__PURE__ */ jsx(Label, { className: "block text-sm font-medium text-zinc-600 dark:text-zinc-400", children: label }),
3406
- value.length > 0 && /* @__PURE__ */ jsx(Div, { className: "grid grid-cols-1 sm:grid-cols-2 gap-3", children: value.map((item, index) => /* @__PURE__ */ jsxs(
3407
- Div,
3408
- {
3409
- className: "rounded-lg border border-zinc-200 dark:border-zinc-700 bg-zinc-50 dark:bg-zinc-900 p-3",
3410
- children: [
3411
- item.type === "video" ? /* @__PURE__ */ jsx(Div, { className: "relative aspect-video overflow-hidden rounded-lg", children: /* @__PURE__ */ jsx(
3412
- MediaVideo,
3413
- {
3414
- src: item.url,
3415
- alt: item.alt || `Media ${index + 1}`,
3416
- controls: true
3417
- }
3418
- ) }) : item.type === "image" ? /* @__PURE__ */ jsx(Div, { className: "relative aspect-video overflow-hidden rounded-lg", children: /* @__PURE__ */ jsx(
3419
- MediaImage,
3420
- {
3421
- src: item.url,
3422
- alt: item.alt || `Media ${index + 1}`,
3423
- size: "card",
3424
- objectFit: "contain"
3425
- }
3426
- ) }) : /* @__PURE__ */ jsx(
3427
- "a",
3428
- {
3429
- href: item.url,
3430
- target: "_blank",
3431
- rel: "noopener noreferrer",
3432
- className: "text-sm underline break-all text-blue-600 dark:text-blue-400",
3433
- children: fileNameFromUrl(item.url)
3434
- }
3435
- ),
3436
- !disabled && /* @__PURE__ */ jsx(Div, { className: "mt-2", children: /* @__PURE__ */ jsx(
3437
- Button,
3438
- {
3439
- type: "button",
3440
- size: "sm",
3441
- variant: "danger",
3442
- onClick: () => removeAt(index),
3443
- children: "Remove"
3444
- }
3445
- ) })
3446
- ]
3447
- },
3448
- `${item.url}-${index}`
3449
- )) }),
3450
- !disabled && value.length < maxItems && /* @__PURE__ */ jsx(
3451
- Button,
3452
- {
3453
- type: "button",
3454
- variant: "ghost",
3455
- className: "w-full py-3 border-2 border-dashed border-zinc-200 dark:border-zinc-700 rounded-xl text-sm text-zinc-500 dark:text-zinc-400",
3456
- onClick: () => {
3457
- var _a;
3458
- return (_a = inputRef.current) == null ? void 0 : _a.click();
3459
- },
3460
- disabled: isLoading,
3461
- children: isLoading ? "Uploading..." : "Add media"
3462
- }
3463
- ),
3464
- isLoading && /* @__PURE__ */ jsxs(Div, { className: "flex items-center gap-2", children: [
3465
- /* @__PURE__ */ jsx(Spinner, { size: "sm" }),
3466
- /* @__PURE__ */ jsx(Text, { size: "sm", variant: "secondary", children: "Uploading" })
3467
- ] }),
3468
- /* @__PURE__ */ jsx(
3469
- "input",
3470
- {
3471
- ref: inputRef,
3472
- type: "file",
3473
- multiple: true,
3474
- accept,
3475
- onChange: handleFileChange,
3476
- className: "hidden",
3477
- "aria-hidden": "true"
3478
- }
3479
- ),
3480
- helperText && !error && /* @__PURE__ */ jsx(Text, { variant: "secondary", size: "xs", children: helperText }),
3481
- error && /* @__PURE__ */ jsx(Alert, { variant: "error", children: error })
3482
- ] });
3483
- }
3484
- function BlogPostForm({
3485
- value,
3486
- onChange,
3487
- categoryOptions,
3488
- statusOptions,
3489
- labels,
3490
- onUploadCover,
3491
- onUploadContentImage,
3492
- onUploadAdditionalImage,
3493
- onAbort,
3494
- isReadonly = false,
3495
- renderContentField,
3496
- renderContentReadonly
3497
- }) {
3498
- var _a, _b;
3499
- const coverImageUrl = getMediaUrl(value.coverImage);
3500
- const contentImages = coerceMediaFieldArray(value.contentImages);
3501
- const additionalImages = coerceMediaFieldArray(value.additionalImages);
3502
- const update = (partial) => {
3503
- onChange(__spreadValues(__spreadValues({}, value), partial));
3504
- };
3505
- return /* @__PURE__ */ jsxs(Div, { className: "space-y-5", children: [
3506
- /* @__PURE__ */ jsxs(Div, { className: "grid gap-4 md:grid-cols-2", children: [
3507
- /* @__PURE__ */ jsxs(Div, { className: "space-y-1.5", children: [
3508
- /* @__PURE__ */ jsx(Label, { htmlFor: "blog-post-title", children: labels.title }),
3509
- /* @__PURE__ */ jsx(
3510
- Input,
3511
- {
3512
- id: "blog-post-title",
3513
- value: value.title || "",
3514
- onChange: (event) => update({ title: event.target.value }),
3515
- disabled: isReadonly
3516
- }
3517
- )
3518
- ] }),
3519
- /* @__PURE__ */ jsxs(Div, { className: "space-y-1.5", children: [
3520
- /* @__PURE__ */ jsx(Label, { htmlFor: "blog-post-slug", children: labels.slug }),
3521
- /* @__PURE__ */ jsx(
3522
- Input,
3523
- {
3524
- id: "blog-post-slug",
3525
- value: value.slug || "",
3526
- onChange: (event) => update({ slug: event.target.value }),
3527
- disabled: isReadonly
3528
- }
3529
- )
3530
- ] })
3531
- ] }),
3532
- /* @__PURE__ */ jsxs(Div, { className: "space-y-1.5", children: [
3533
- /* @__PURE__ */ jsx(Label, { htmlFor: "blog-post-excerpt", children: labels.excerpt }),
3534
- /* @__PURE__ */ jsx(
3535
- Textarea,
3536
- {
3537
- id: "blog-post-excerpt",
3538
- value: value.excerpt || "",
3539
- onChange: (event) => update({ excerpt: event.target.value }),
3540
- rows: 3,
3541
- disabled: isReadonly
3542
- }
3543
- )
3544
- ] }),
3545
- /* @__PURE__ */ jsxs(Div, { className: "space-y-1.5", children: [
3546
- /* @__PURE__ */ jsx(Label, { children: labels.content }),
3547
- renderContentField ? renderContentField({
3548
- value: value.content || "",
3549
- onChange: (content) => update({ content }),
3550
- isReadonly
3551
- }) : isReadonly && renderContentReadonly ? renderContentReadonly(value.content || "") : /* @__PURE__ */ jsx(
3552
- Textarea,
3553
- {
3554
- value: value.content || "",
3555
- onChange: (event) => update({ content: event.target.value }),
3556
- rows: 10,
3557
- disabled: isReadonly
3558
- }
3559
- )
3560
- ] }),
3561
- /* @__PURE__ */ jsx(
3562
- MediaUploadField,
3563
- {
3564
- label: labels.coverImage,
3565
- value: coverImageUrl || "",
3566
- onChange: (url) => update({ coverImage: url ? { url, type: "image" } : null }),
3567
- onChangeField: (media) => update({ coverImage: media }),
3568
- onUpload: onUploadCover,
3569
- onAbort,
3570
- accept: "image/*",
3571
- maxSizeMB: 10,
3572
- disabled: isReadonly,
3573
- helperText: labels.coverImageHelper
3574
- }
3575
- ),
3576
- /* @__PURE__ */ jsx(
3577
- MediaUploadList,
3578
- {
3579
- label: labels.contentImages,
3580
- value: contentImages,
3581
- onChange: (media) => update({ contentImages: media }),
3582
- onUpload: onUploadContentImage,
3583
- onAbort,
3584
- accept: "image/*",
3585
- maxItems: 10,
3586
- maxSizeMB: 10,
3587
- disabled: isReadonly,
3588
- helperText: labels.contentImagesHelper
3589
- }
3590
- ),
3591
- /* @__PURE__ */ jsx(
3592
- MediaUploadList,
3593
- {
3594
- label: labels.additionalImages,
3595
- value: additionalImages,
3596
- onChange: (media) => update({ additionalImages: media }),
3597
- onUpload: onUploadAdditionalImage,
3598
- onAbort,
3599
- accept: "image/*",
3600
- maxItems: 5,
3601
- maxSizeMB: 10,
3602
- disabled: isReadonly,
3603
- helperText: labels.additionalImagesHelper
3604
- }
3605
- ),
3606
- /* @__PURE__ */ jsxs(Div, { className: "grid gap-4 md:grid-cols-2", children: [
3607
- /* @__PURE__ */ jsx(
3608
- Select,
3609
- {
3610
- label: labels.category,
3611
- value: value.category,
3612
- onChange: (category) => update({ category }),
3613
- options: categoryOptions,
3614
- disabled: isReadonly
3615
- }
3616
- ),
3617
- /* @__PURE__ */ jsx(
3618
- Select,
3619
- {
3620
- label: labels.status,
3621
- value: value.status,
3622
- onChange: (status) => update({ status }),
3623
- options: statusOptions,
3624
- disabled: isReadonly
3625
- }
3626
- )
3627
- ] }),
3628
- /* @__PURE__ */ jsxs(Div, { className: "grid gap-4 md:grid-cols-2", children: [
3629
- /* @__PURE__ */ jsx(
3630
- TagInput,
3631
- {
3632
- label: labels.tags,
3633
- value: (_a = value.tags) != null ? _a : [],
3634
- onChange: (tags) => update({ tags }),
3635
- disabled: isReadonly
3636
- }
3637
- ),
3638
- /* @__PURE__ */ jsxs(Div, { className: "space-y-1.5", children: [
3639
- /* @__PURE__ */ jsx(Label, { htmlFor: "blog-post-read-time", children: labels.readTime }),
3640
- /* @__PURE__ */ jsx(
3641
- Input,
3642
- {
3643
- id: "blog-post-read-time",
3644
- type: "number",
3645
- value: String((_b = value.readTimeMinutes) != null ? _b : 5),
3646
- onChange: (event) => update({
3647
- readTimeMinutes: parseInt(event.target.value, 10) || 5
3648
- }),
3649
- disabled: isReadonly
3650
- }
3651
- )
3652
- ] })
3653
- ] }),
3654
- /* @__PURE__ */ jsx(
3655
- Checkbox,
3656
- {
3657
- label: labels.featured,
3658
- checked: value.isFeatured || false,
3659
- onChange: (event) => update({ isFeatured: event.target.checked }),
3660
- disabled: isReadonly
3661
- }
3662
- ),
3663
- isReadonly && coverImageUrl && /* @__PURE__ */ jsx(Text, { size: "xs", variant: "secondary", children: coverImageUrl })
3664
- ] });
3665
- }
3666
- var CATEGORY_BADGE2 = {
3667
- news: "bg-blue-100 text-blue-800",
3668
- tips: "bg-emerald-100 text-emerald-800",
3669
- guides: "bg-indigo-100 text-indigo-800",
3670
- updates: "bg-purple-100 text-purple-800",
3671
- community: "bg-orange-100 text-orange-800"
3672
- };
3673
- function BlogPostView({
3674
- slug,
3675
- initialData,
3676
- labels = {},
3677
- renderImage,
3678
- renderContent,
3679
- renderBackButton,
3680
- renderLoading,
3681
- renderError,
3682
- renderRelatedCard,
3683
- className = ""
3684
- }) {
3685
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
3686
- const { post, related, isLoading, error } = useBlogPost(slug, {
3687
- initialData
3688
- });
3689
- if (isLoading) {
3690
- if (renderLoading) return /* @__PURE__ */ jsx(Fragment, { children: renderLoading() });
3691
- return /* @__PURE__ */ jsx(Div, { className: "flex items-center justify-center min-h-screen", children: /* @__PURE__ */ jsx(Div, { className: "animate-pulse text-neutral-400", children: "Loading\u2026" }) });
3692
- }
3693
- if (error || !post) {
3694
- if (renderError) return /* @__PURE__ */ jsx(Fragment, { children: renderError(error != null ? error : null) });
3695
- return /* @__PURE__ */ jsxs(Div, { className: "flex flex-col items-center justify-center min-h-screen gap-4 p-8", children: [
3696
- /* @__PURE__ */ jsx(Heading, { level: 1, className: "text-xl font-semibold", children: (_a = labels.notFound) != null ? _a : "Post not found" }),
3697
- /* @__PURE__ */ jsx(Text, { className: "text-neutral-500", children: (_b = labels.notFoundDescription) != null ? _b : "This post is not available." }),
3698
- renderBackButton == null ? void 0 : renderBackButton()
3699
- ] });
3700
- }
3701
- const date = post.publishedAt ? new Date(post.publishedAt).toLocaleDateString("en-US", {
3702
- year: "numeric",
3703
- month: "long",
3704
- day: "numeric"
3705
- }) : "";
3706
- const coverImageUrl = getMediaUrl(post.coverImage);
3707
- return /* @__PURE__ */ jsxs(Div, { className: `min-h-screen ${className}`, children: [
3708
- coverImageUrl && /* @__PURE__ */ jsxs(Div, { className: "relative h-72 md:h-96 overflow-hidden", children: [
3709
- renderImage ? renderImage(post) : /* @__PURE__ */ jsx(
3710
- Div,
3711
- {
3712
- role: "img",
3713
- "aria-label": post.title,
3714
- className: "h-full w-full bg-cover bg-center",
3715
- style: { backgroundImage: `url(${coverImageUrl})` }
3716
- }
3717
- ),
3718
- /* @__PURE__ */ jsx(Div, { className: "absolute inset-0 bg-gradient-to-t from-black/50 to-transparent" })
3719
- ] }),
3720
- /* @__PURE__ */ jsxs(Div, { className: "max-w-3xl mx-auto px-4 py-12", children: [
3721
- /* @__PURE__ */ jsxs(Div, { className: "mb-8", children: [
3722
- /* @__PURE__ */ jsxs(Div, { className: "flex items-center gap-2 mb-4", children: [
3723
- /* @__PURE__ */ jsx(
3724
- Span,
3725
- {
3726
- className: `inline-block px-2 py-0.5 rounded-full text-xs font-medium capitalize ${(_c = CATEGORY_BADGE2[post.category]) != null ? _c : ""}`,
3727
- children: post.category
3728
- }
3729
- ),
3730
- post.isFeatured && /* @__PURE__ */ jsx(Span, { className: "bg-yellow-100 text-yellow-800 px-2 py-0.5 rounded-full text-xs font-medium", children: (_d = labels.featured) != null ? _d : "Featured" })
3731
- ] }),
3732
- /* @__PURE__ */ jsx(Heading, { level: 1, className: "text-3xl font-bold mb-4", children: post.title }),
3733
- post.excerpt && /* @__PURE__ */ jsx(Text, { className: "text-lg text-neutral-500 mb-6", children: post.excerpt }),
3734
- /* @__PURE__ */ jsxs(Row, { wrap: true, gap: "md", className: "text-sm text-neutral-400", children: [
3735
- post.authorName && /* @__PURE__ */ jsxs(Span, { children: [
3736
- (_e = labels.author) != null ? _e : "By",
3737
- " ",
3738
- /* @__PURE__ */ jsx(Span, { className: "font-medium text-neutral-700", children: post.authorName })
3739
- ] }),
3740
- post.readTimeMinutes != null && /* @__PURE__ */ jsxs(Span, { children: [
3741
- post.readTimeMinutes,
3742
- " ",
3743
- (_f = labels.readTime) != null ? _f : "min read"
3744
- ] }),
3745
- date && /* @__PURE__ */ jsxs(Span, { children: [
3746
- (_g = labels.publishedOn) != null ? _g : "Published",
3747
- " ",
3748
- date
3749
- ] }),
3750
- post.views != null && /* @__PURE__ */ jsxs(Span, { children: [
3751
- post.views,
3752
- " ",
3753
- (_h = labels.viewsLabel) != null ? _h : "views"
3754
- ] })
3755
- ] })
3756
- ] }),
3757
- post.tags && post.tags.length > 0 && /* @__PURE__ */ jsx(Row, { wrap: true, gap: "sm", className: "mb-8", children: post.tags.map((tag) => /* @__PURE__ */ jsxs(
3758
- Span,
3759
- {
3760
- className: "inline-block px-3 py-1 rounded-full bg-neutral-100 text-neutral-600 text-xs font-medium",
3761
- children: [
3762
- "#",
3763
- tag
3764
- ]
3765
- },
3766
- tag
3767
- )) }),
3768
- /* @__PURE__ */ jsx(Div, { className: "bg-white rounded-xl border border-neutral-200 p-8 mb-12", children: renderContent ? renderContent(post) : /* @__PURE__ */ jsx(
3769
- Div,
3770
- {
3771
- className: "prose max-w-none",
3772
- dangerouslySetInnerHTML: { __html: (_i = post.content) != null ? _i : "" }
3773
- }
3774
- ) }),
3775
- related.length > 0 && /* @__PURE__ */ jsxs(Div, { children: [
3776
- /* @__PURE__ */ jsx(Heading, { level: 2, className: "text-xl font-semibold mb-6", children: (_j = labels.relatedTitle) != null ? _j : "Related Posts" }),
3777
- /* @__PURE__ */ jsx(Div, { className: "grid sm:grid-cols-3 gap-6", children: related.map(
3778
- (rel, i) => renderRelatedCard ? /* @__PURE__ */ jsx(React.Fragment, { children: renderRelatedCard(rel, i) }, rel.id) : /* @__PURE__ */ jsx(BlogCard, { post: rel }, rel.id)
3779
- ) })
3780
- ] }),
3781
- renderBackButton && /* @__PURE__ */ jsx(Div, { className: "mt-10 pt-8 border-t border-neutral-200", children: renderBackButton() })
3782
- ] })
3783
- ] });
3784
- }
3785
- var blogCoverImageSchema = z.union([
3786
- mediaFieldSchema,
3787
- z.string().url().transform((url) => ({ url, type: "image" }))
3788
- ]).nullable().optional().transform((value) => value != null ? value : null);
3789
- var blogPostCategorySchema = z.enum([
3790
- "news",
3791
- "tips",
3792
- "guides",
3793
- "updates",
3794
- "community"
3795
- ]);
3796
- var blogPostStatusSchema = z.enum(["draft", "published", "archived"]);
3797
- var blogPostSchema = z.object({
3798
- id: z.string(),
3799
- title: z.string(),
3800
- slug: z.string(),
3801
- excerpt: z.string().optional(),
3802
- content: z.string().optional(),
3803
- coverImage: blogCoverImageSchema,
3804
- contentImages: z.array(mediaFieldSchema).max(10).optional().default([]),
3805
- additionalImages: z.array(mediaFieldSchema).max(5).optional().default([]),
3806
- category: blogPostCategorySchema,
3807
- tags: z.array(z.string()).optional(),
3808
- isFeatured: z.boolean().optional(),
3809
- status: blogPostStatusSchema,
3810
- publishedAt: z.string().optional(),
3811
- authorId: z.string().optional(),
3812
- authorName: z.string().optional(),
3813
- authorAvatar: z.string().optional(),
3814
- readTimeMinutes: z.number().optional(),
3815
- views: z.number().optional(),
3816
- metaTitle: z.string().optional(),
3817
- metaDescription: z.string().optional(),
3818
- createdAt: z.string().optional(),
3819
- updatedAt: z.string().optional()
3820
- });
3821
- var blogListParamsSchema = z.object({
3822
- category: blogPostCategorySchema.optional(),
3823
- tags: z.string().optional(),
3824
- q: z.string().optional(),
3825
- page: z.coerce.number().optional(),
3826
- perPage: z.coerce.number().optional(),
3827
- sort: z.string().optional(),
3828
- featured: z.coerce.boolean().optional()
3829
- });
3830
-
3831
- // src/features/blog/columns/index.ts
3832
- var blogAdminColumns = [
3833
- { key: "title", header: "Title", sortable: true },
3834
- { key: "category", header: "Category", sortable: true },
3835
- {
3836
- key: "status",
3837
- header: "Status",
3838
- sortable: true
3839
- },
3840
- {
3841
- key: "isFeatured",
3842
- header: "Featured",
3843
- render: (p) => p.isFeatured ? "Yes" : "No"
3844
- },
3845
- {
3846
- key: "readTimeMinutes",
3847
- header: "Read Time",
3848
- render: (p) => p.readTimeMinutes !== void 0 ? `${p.readTimeMinutes} min` : "\u2014"
3849
- },
3850
- {
3851
- key: "views",
3852
- header: "Views",
3853
- sortable: true,
3854
- render: (p) => {
3855
- var _a, _b;
3856
- return (_b = (_a = p.views) == null ? void 0 : _a.toLocaleString()) != null ? _b : "\u2014";
3857
- }
3858
- },
3859
- { key: "authorName", header: "Author" },
3860
- { key: "publishedAt", header: "Published", sortable: true }
3861
- ];
3862
- function buildBlogColumns(opts) {
3863
- var _a;
3864
- const base = blogAdminColumns;
3865
- const omit = new Set((_a = opts == null ? void 0 : opts.omit) != null ? _a : []);
3866
- const cols = base.filter((col) => !omit.has(col.key)).map((col) => {
3867
- var _a2;
3868
- const ovr = (_a2 = opts == null ? void 0 : opts.overrides) == null ? void 0 : _a2[col.key];
3869
- return ovr ? __spreadValues(__spreadValues({}, col), ovr) : col;
3870
- });
3871
- return (opts == null ? void 0 : opts.extras) ? [...cols, ...opts.extras] : cols;
3872
- }
3873
-
3874
- // src/features/blog/repository/blog.repository.ts
3875
- var BlogRepository = class {
3876
- constructor(repo) {
3877
- this.repo = repo;
3878
- }
3879
- async findAll(query) {
3880
- const base = __spreadValues({ filters: "status==published" }, query);
3881
- if (query == null ? void 0 : query.filters) {
3882
- base.filters = `status==published,${query.filters}`;
3883
- }
3884
- return this.repo.findAll(base);
3885
- }
3886
- async findBySlug(slug) {
3887
- var _a;
3888
- const result = await this.repo.findAll({
3889
- filters: `slug==${slug},status==published`,
3890
- perPage: 1
3891
- });
3892
- return (_a = result.data[0]) != null ? _a : null;
3893
- }
3894
- async findLatest(n = 5) {
3895
- const result = await this.repo.findAll({
3896
- filters: "status==published",
3897
- sort: "-publishedAt",
3898
- perPage: n
3899
- });
3900
- return result.data;
3901
- }
3902
- async findFeatured(n = 3) {
3903
- const result = await this.repo.findAll({
3904
- filters: "status==published,isFeatured==true",
3905
- sort: "-publishedAt",
3906
- perPage: n
3907
- });
3908
- return result.data;
3909
- }
3910
- async findByCategory(category, page = 1, perPage = 10) {
3911
- return this.repo.findAll({
3912
- filters: `status==published,category==${category}`,
3913
- sort: "-publishedAt",
3914
- page,
3915
- perPage
3916
- });
3917
- }
3918
- async findById(id) {
3919
- return this.repo.findById(id);
3920
- }
3921
- async create(data) {
3922
- return this.repo.create(data);
3923
- }
3924
- async update(id, data) {
3925
- return this.repo.update(id, data);
3926
- }
3927
- async delete(id) {
3928
- return this.repo.delete(id);
3929
- }
3930
- };
3931
-
3932
- // src/features/blog/manifest.ts
3933
- var manifest = {
3934
- name: "blog",
3935
- i18nNamespace: "blog",
3936
- envKeys: [],
3937
- routes: [
3938
- { segment: "[locale]/blog", exports: { default: "BlogListView" } },
3939
- { segment: "[locale]/blog/[slug]", exports: { default: "BlogPostView" } }
3940
- ],
3941
- apiRoutes: [
3942
- { segment: "api/blog", methods: ["GET", "POST"] },
3943
- { segment: "api/blog/[slug]", methods: ["GET", "PATCH", "DELETE"] },
3944
- { segment: "api/blog/[slug]/related", methods: ["GET"] }
3945
- ]
3946
- };
3947
- function param(url, key) {
3948
- return url.searchParams.get(key);
3949
- }
3950
- function numParam(url, key, fallback) {
3951
- const v = url.searchParams.get(key);
3952
- const n = v !== null ? Number(v) : NaN;
3953
- return Number.isFinite(n) ? n : fallback;
3954
- }
3955
- async function GET(request) {
3956
- var _a, _b;
3957
- try {
3958
- const url = new URL(request.url);
3959
- const page = numParam(url, "page", 1);
3960
- const perPage = numParam(url, "perPage", 20);
3961
- const sort = (_a = param(url, "sort")) != null ? _a : "-publishedAt";
3962
- const parts = [];
3963
- const category = param(url, "category");
3964
- if (category) parts.push(`category==${category}`);
3965
- const q = param(url, "q");
3966
- if (q) parts.push(`title@=*${q}`);
3967
- const featured = param(url, "featured");
3968
- if (featured === "true") parts.push("isFeatured==true");
3969
- const status = (_b = param(url, "status")) != null ? _b : "published";
3970
- parts.push(`status==${status}`);
3971
- const filters = parts.join(",");
3972
- const { db } = getProviders();
3973
- if (!db) {
3974
- return NextResponse.json(
3975
- { success: false, error: "Database provider not registered" },
3976
- { status: 503 }
3977
- );
3978
- }
3979
- const repo = db.getRepository("blogPosts");
3980
- const result = await repo.findAll({ filters, sort, page, perPage });
3981
- const meta = {
3982
- total: result.total,
3983
- page: result.page,
3984
- pageSize: result.perPage,
3985
- totalPages: result.totalPages,
3986
- hasMore: result.page < result.totalPages
3987
- };
3988
- const body = {
3989
- posts: result.data,
3990
- meta
3991
- };
3992
- return NextResponse.json({ success: true, data: body });
3993
- } catch (error) {
3994
- console.error("[feat-blog] GET /api/blog failed", error);
3995
- return NextResponse.json(
3996
- { success: false, error: "Failed to fetch blog posts" },
3997
- { status: 500 }
3998
- );
3999
- }
4000
- }
4001
- async function GET2(_request, context) {
4002
- var _a;
4003
- try {
4004
- const { slug } = await context.params;
4005
- const { db } = getProviders();
4006
- if (!db) {
4007
- return NextResponse.json(
4008
- { success: false, error: "Database provider not registered" },
4009
- { status: 503 }
4010
- );
4011
- }
4012
- const blogRepo = new BlogRepository(
4013
- db.getRepository("blogPosts")
4014
- );
4015
- const post = await blogRepo.findBySlug(slug);
4016
- if (!post) {
4017
- return NextResponse.json(
4018
- { success: false, error: "Blog post not found" },
4019
- { status: 404 }
4020
- );
4021
- }
4022
- db.getRepository("blogPosts").update(post.id, { views: ((_a = post.views) != null ? _a : 0) + 1 }).catch(() => {
4023
- });
4024
- const relatedResult = await blogRepo.findByCategory(post.category, 1, 4);
4025
- const related = relatedResult.data.filter((p) => p.id !== post.id).slice(0, 3);
4026
- const body = { post, related };
4027
- return NextResponse.json({ success: true, data: body });
4028
- } catch (error) {
4029
- console.error("[feat-blog] GET /api/blog/[slug] failed", error);
4030
- return NextResponse.json(
4031
- { success: false, error: "Failed to fetch blog post" },
4032
- { status: 500 }
4033
- );
4034
- }
4035
- }
4036
- /*! Bundled license information:
4037
-
4038
- lucide-react/dist/esm/shared/src/utils/mergeClasses.js:
4039
- lucide-react/dist/esm/shared/src/utils/toKebabCase.js:
4040
- lucide-react/dist/esm/shared/src/utils/toCamelCase.js:
4041
- lucide-react/dist/esm/shared/src/utils/toPascalCase.js:
4042
- lucide-react/dist/esm/defaultAttributes.js:
4043
- lucide-react/dist/esm/shared/src/utils/hasA11yProp.js:
4044
- lucide-react/dist/esm/context.js:
4045
- lucide-react/dist/esm/Icon.js:
4046
- lucide-react/dist/esm/createLucideIcon.js:
4047
- lucide-react/dist/esm/icons/check.js:
4048
- lucide-react/dist/esm/icons/chevron-down.js:
4049
- lucide-react/dist/esm/icons/loader-circle.js:
4050
- lucide-react/dist/esm/icons/x.js:
4051
- lucide-react/dist/esm/lucide-react.js:
4052
- (**
4053
- * @license lucide-react v1.7.0 - ISC
4054
- *
4055
- * This source code is licensed under the ISC license.
4056
- * See the LICENSE file in the root directory of this source tree.
4057
- *)
4058
- */
4059
-
4060
- export { BlogCard, BlogCategoryTabs, BlogFeaturedCard, BlogListView, BlogPostForm, BlogPostView, BlogRepository, GET, GET2 as GET_BLOG_SLUG, blogAdminColumns, GET as blogGET, blogListParamsSchema, blogPostCategorySchema, blogPostSchema, blogPostStatusSchema, GET2 as blogSlugGET, buildBlogColumns, manifest, useBlogPost, useBlogPosts };
4061
- //# sourceMappingURL=index.js.map
4062
- //# sourceMappingURL=index.js.map
1
+ export * from "./types";
2
+ export * from "./hooks/useBlog";
3
+ export * from "./components";
4
+ export * from "./schemas";
5
+ export * from "./columns";
6
+ export { manifest } from "./manifest";