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