@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 +0,0 @@
1
- {"version":3,"sources":["../../../src/errors/base-error.ts","../../../src/errors/error-codes.ts","../../../src/errors/api-error.ts","../../../src/errors/validation-error.ts","../../../src/errors/authentication-error.ts","../../../src/errors/authorization-error.ts","../../../src/errors/not-found-error.ts","../../../src/errors/database-error.ts","../../../src/errors/error-handler.ts","../../../src/errors/index.ts","../../../src/http/ApiClient.ts","../../../src/features/blog/hooks/useBlog.ts","../../../src/ui/components/Semantic.tsx","../../../src/ui/components/Div.tsx","../../../src/ui/components/Typography.tsx","../../../src/ui/components/Spinner.tsx","../../../node_modules/shared/src/utils/mergeClasses.ts","../../../node_modules/shared/src/utils/toKebabCase.ts","../../../node_modules/shared/src/utils/toCamelCase.ts","../../../node_modules/shared/src/utils/toPascalCase.ts","../../../node_modules/lucide-react/src/defaultAttributes.ts","../../../node_modules/shared/src/utils/hasA11yProp.ts","../../../node_modules/lucide-react/src/context.ts","../../../node_modules/lucide-react/src/Icon.ts","../../../node_modules/lucide-react/src/createLucideIcon.ts","../../../node_modules/lucide-react/src/icons/check.ts","../../../node_modules/lucide-react/src/icons/chevron-down.ts","../../../node_modules/lucide-react/src/icons/loader-circle.ts","../../../node_modules/lucide-react/src/icons/x.ts","../../../src/ui/components/Button.tsx","../../../src/ui/components/Accordion.tsx","../../../src/ui/components/Alert.tsx","../../../src/contracts/registry.ts","../../../src/contracts/table.ts","../../../src/ui/components/Pagination.tsx","../../../src/ui/components/Modal.tsx","../../../src/ui/components/Select.tsx","../../../src/ui/components/Input.tsx","../../../src/ui/components/Textarea.tsx","../../../src/ui/components/TagInput.tsx","../../../src/ui/components/Layout.tsx","../../../src/features/media/types/index.ts","../../../src/features/blog/components/BlogListView.tsx","../../../src/features/blog/components/BlogFeaturedCard.tsx","../../../src/features/forms/utils.ts","../../../src/features/forms/Input.tsx","../../../src/features/forms/Textarea.tsx","../../../src/features/forms/Checkbox.tsx","../../../src/features/media/MediaImage.tsx","../../../src/features/media/MediaVideo.tsx","../../../src/features/media/components/MediaSlider.tsx","../../../src/features/media/hooks/useMedia.ts","../../../src/features/media/modals/VideoTrimModal.tsx","../../../src/features/media/modals/VideoThumbnailSelector.tsx","../../../src/react/hooks/useCamera.ts","../../../src/core/Logger.ts","../../../src/core/Queue.ts","../../../src/core/StorageManager.ts","../../../src/core/EventBus.ts","../../../src/security/authorization.ts","../../../src/monitoring/client-logger.ts","../../../src/monitoring/server-logger.ts","../../../src/features/media/upload/CameraCapture.tsx","../../../src/features/media/upload/MediaUploadField.tsx","../../../src/features/media/upload/MediaUploadList.tsx","../../../src/features/blog/components/BlogPostForm.tsx","../../../src/features/blog/components/BlogPostView.tsx","../../../src/features/blog/schemas/index.ts","../../../src/features/blog/columns/index.ts","../../../src/features/blog/repository/blog.repository.ts","../../../src/features/blog/manifest.ts","../../../src/features/blog/api/route.ts","../../../src/features/blog/api/%5Bslug%5D/route.ts"],"names":["React","jsx","jsxs","_a","createElement","_b","Component","forwardRef","__iconNode","createContext","SIZE_CLASSES","useRef","useEffect","useCallback","useId","useState","Fragment","Input","Textarea","useTranslations","CATEGORY_BADGE","z","NextResponse","GET"],"mappings":"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","file":"index.js","sourcesContent":["export class AppError extends Error {\n constructor(\n public statusCode: number,\n public message: string,\n public code: string,\n public data?: unknown,\n ) {\n super(message);\n this.name = this.constructor.name;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n\n toJSON(): {\n success: false;\n error: string;\n code: string;\n statusCode: number;\n data?: unknown;\n } {\n return {\n success: false,\n error: this.message,\n code: this.code,\n statusCode: this.statusCode,\n ...(this.data !== undefined && { data: this.data }),\n };\n }\n}\n","export const ERROR_CODES = {\n // Authentication\n AUTH_INVALID_CREDENTIALS: \"AUTH_001\",\n AUTH_TOKEN_EXPIRED: \"AUTH_002\",\n AUTH_TOKEN_INVALID: \"AUTH_003\",\n AUTH_SESSION_EXPIRED: \"AUTH_004\",\n AUTH_EMAIL_NOT_VERIFIED: \"AUTH_005\",\n\n // Validation\n VALIDATION_REQUIRED_FIELD: \"VAL_001\",\n VALIDATION_INVALID_INPUT: \"VAL_002\",\n VALIDATION_INVALID_EMAIL: \"VAL_003\",\n VALIDATION_INVALID_PASSWORD: \"VAL_004\",\n VALIDATION_INVALID_PHONE: \"VAL_005\",\n\n // User\n USER_NOT_FOUND: \"USER_001\",\n USER_ALREADY_EXISTS: \"USER_002\",\n USER_NOT_AUTHENTICATED: \"USER_003\",\n USER_ACCOUNT_DISABLED: \"USER_004\",\n\n // Database\n DB_OPERATION_FAILED: \"DB_001\",\n DB_NOT_FOUND: \"DB_002\",\n DB_DUPLICATE_ENTRY: \"DB_003\",\n\n // Email\n EMAIL_SEND_FAILED: \"EMAIL_001\",\n EMAIL_INVALID_TEMPLATE: \"EMAIL_002\",\n EMAIL_RATE_LIMITED: \"EMAIL_003\",\n EMAIL_DELIVERY_FAILED: \"EMAIL_004\",\n\n // Password\n PWD_RESET_TOKEN_EXPIRED: \"PWD_001\",\n PWD_RESET_TOKEN_INVALID: \"PWD_002\",\n PWD_TOO_WEAK: \"PWD_003\",\n PWD_HISTORY_REUSE: \"PWD_004\",\n PWD_SAME_AS_CURRENT: \"PWD_005\",\n\n // Authorization\n AUTHZ_FORBIDDEN: \"AUTHZ_001\",\n AUTHZ_INSUFFICIENT_ROLE: \"AUTHZ_002\",\n\n // General\n GEN_BAD_REQUEST: \"GEN_001\",\n GEN_NOT_FOUND: \"GEN_002\",\n GEN_INTERNAL_ERROR: \"GEN_003\",\n GEN_SERVICE_UNAVAILABLE: \"GEN_004\",\n GEN_RATE_LIMITED: \"GEN_005\",\n GEN_UNKNOWN: \"GEN_999\",\n} as const;\n\nexport type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];\n\nexport const ERROR_MESSAGES: Record<ErrorCode, string> = {\n // Authentication\n AUTH_001: \"Invalid email or password\",\n AUTH_002: \"Your session has expired. Please log in again\",\n AUTH_003: \"Invalid authentication token\",\n AUTH_004: \"Your session has expired. Please log in again\",\n AUTH_005: \"Please verify your email address before logging in\",\n\n // Validation\n VAL_001: \"This field is required\",\n VAL_002: \"Invalid input provided\",\n VAL_003: \"Please enter a valid email address\",\n VAL_004:\n \"Password must be at least 12 characters with uppercase, lowercase, number and special character\",\n VAL_005: \"Please enter a valid phone number\",\n\n // User\n USER_001: \"User not found\",\n USER_002: \"An account with this email already exists\",\n USER_003: \"Please log in to continue\",\n USER_004: \"Your account has been disabled. Please contact support\",\n\n // Database\n DB_001: \"A database error occurred. Please try again\",\n DB_002: \"The requested resource was not found\",\n DB_003: \"This record already exists\",\n\n // Email\n EMAIL_001: \"Failed to send email. Please try again\",\n EMAIL_002: \"Invalid email template\",\n EMAIL_003: \"Too many emails sent. Please wait before trying again\",\n EMAIL_004: \"Email delivery failed. Please check the address and try again\",\n\n // Password\n PWD_001: \"Password reset link has expired. Please request a new one\",\n PWD_002: \"Invalid password reset link\",\n PWD_003: \"Password does not meet security requirements\",\n PWD_004: \"Cannot reuse a recent password\",\n PWD_005: \"New password must be different from your current password\",\n\n // Authorization\n AUTHZ_001: \"You do not have permission to perform this action\",\n AUTHZ_002: \"Insufficient role to perform this action\",\n\n // General\n GEN_001: \"Bad request\",\n GEN_002: \"The requested resource was not found\",\n GEN_003: \"An internal server error occurred\",\n GEN_004: \"Service temporarily unavailable\",\n GEN_005: \"Too many requests. Please slow down\",\n GEN_999: \"An unknown error occurred\",\n};\n","import { AppError } from \"./base-error\";\n\nexport class ApiError extends AppError {\n constructor(statusCode: number, message: string, data?: unknown) {\n super(statusCode, message, \"API_ERROR\", data);\n }\n}\n","import { AppError } from \"./base-error\";\n\nexport class ValidationError extends AppError {\n constructor(message: string, fields?: unknown) {\n super(400, message, \"VALIDATION_ERROR\", fields);\n }\n}\n","import { AppError } from \"./base-error\";\n\nexport class AuthenticationError extends AppError {\n constructor(message: string, data?: unknown) {\n super(401, message, \"AUTHENTICATION_ERROR\", data);\n }\n}\n","import { AppError } from \"./base-error\";\n\nexport class AuthorizationError extends AppError {\n constructor(message: string, data?: unknown) {\n super(403, message, \"AUTHORIZATION_ERROR\", data);\n }\n}\n","import { AppError } from \"./base-error\";\n\nexport class NotFoundError extends AppError {\n constructor(message: string, data?: unknown) {\n super(404, message, \"NOT_FOUND\", data);\n }\n}\n","import { AppError } from \"./base-error\";\n\nexport class DatabaseError extends AppError {\n constructor(message: string, data?: unknown) {\n super(500, message, \"DATABASE_ERROR\", data);\n }\n}\n","import { NextResponse } from \"next/server.js\";\nimport { AppError } from \"./base-error\";\nimport { ERROR_CODES, ERROR_MESSAGES } from \"./error-codes\";\n\n/**\n * Handle API errors with consistent response format.\n * Use in Next.js API route catch blocks.\n */\nexport function handleApiError(error: unknown): NextResponse {\n if (error instanceof AppError) {\n if (error.statusCode >= 500) {\n console.error(\"[API Error]\", {\n code: error.code,\n message: error.message,\n statusCode: error.statusCode,\n data: error.data,\n });\n }\n return NextResponse.json(error.toJSON(), { status: error.statusCode });\n }\n\n // Zod / schema validation errors\n if (error && typeof error === \"object\" && \"issues\" in error) {\n return NextResponse.json(\n {\n success: false,\n error: \"Validation failed\",\n code: ERROR_CODES.VALIDATION_INVALID_INPUT,\n data: error,\n },\n { status: 400 },\n );\n }\n\n console.error(\"[Unexpected API Error]\", {\n error:\n error instanceof Error\n ? { name: error.name, message: error.message, stack: error.stack }\n : error,\n });\n\n return NextResponse.json(\n {\n success: false,\n error: ERROR_MESSAGES[ERROR_CODES.GEN_INTERNAL_ERROR],\n code: ERROR_CODES.GEN_INTERNAL_ERROR,\n },\n { status: 500 },\n );\n}\n\n/**\n * Log an error with optional context. Wraps console.error for package portability;\n * replace with your structured logger if needed.\n */\nexport function logError(\n error: unknown,\n context?: Record<string, unknown>,\n): void {\n console.error(\"[Application Error]\", {\n ...(context && { context }),\n error:\n error instanceof Error\n ? { name: error.name, message: error.message, stack: error.stack }\n : error,\n });\n}\n\n/**\n * Type guard — check if a value is an AppError instance.\n */\nexport function isAppError(error: unknown): error is AppError {\n return error instanceof AppError;\n}\n","export { AppError } from \"./base-error\";\nexport { ERROR_CODES, ERROR_MESSAGES } from \"./error-codes\";\nexport type { ErrorCode } from \"./error-codes\";\nexport { ApiError } from \"./api-error\";\nexport { ValidationError } from \"./validation-error\";\nexport { AuthenticationError } from \"./authentication-error\";\nexport { AuthorizationError } from \"./authorization-error\";\nexport { NotFoundError } from \"./not-found-error\";\nexport { DatabaseError } from \"./database-error\";\n// error-handler uses `next/server` — only import in server/API-route contexts\nexport { handleApiError, logError, isAppError } from \"./error-handler\";\n","/**\n * ApiClient — @mohasinac/http\n *\n * Centralized HTTP client with consistent error handling,\n * timeout management, abort controller, and JSON parsing.\n *\n * Stripped of app-specific `API_ENDPOINTS` dependency from the original\n * `src/lib/api-client.ts`. The constructor accepts a `baseURL` option\n * instead of reading `process.env.NEXT_PUBLIC_API_URL` directly.\n *\n * Usage:\n * ```ts\n * import { ApiClient, ApiClientError } from \"@mohasinac/http\";\n *\n * const client = new ApiClient({ baseURL: process.env.NEXT_PUBLIC_APP_URL });\n * const data = await client.get(\"/api/products\");\n * ```\n */\n\nexport class ApiClientError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n public readonly data?: unknown,\n ) {\n super(message);\n this.name = \"ApiClientError\";\n }\n}\n\nexport interface RequestConfig extends RequestInit {\n params?: Record<string, string | number | boolean>;\n timeout?: number;\n}\n\nexport interface ApiResponse<T = unknown> {\n success: boolean;\n data?: T;\n error?: string;\n message?: string;\n}\n\nexport interface ApiClientOptions {\n /**\n * Base URL for relative endpoint resolution.\n * Falls back to `window.location.origin` in browsers or\n * `process.env.NEXT_PUBLIC_APP_URL` / `http://localhost:3000` on the server.\n */\n baseURL?: string;\n /** Default request timeout in milliseconds. Default: 120000 (2 min). */\n defaultTimeout?: number;\n}\n\nexport class ApiClient {\n private readonly baseURL: string;\n private readonly defaultTimeout: number;\n\n constructor(options?: ApiClientOptions) {\n this.baseURL = options?.baseURL ?? process.env.NEXT_PUBLIC_APP_URL ?? \"\";\n this.defaultTimeout = options?.defaultTimeout ?? 120_000;\n }\n\n private buildURL(\n endpoint: string,\n params?: Record<string, string | number | boolean>,\n ): string {\n const origin =\n this.baseURL ||\n (typeof window !== \"undefined\"\n ? window.location.origin\n : (process.env.NEXT_PUBLIC_APP_URL ?? \"http://localhost:3000\"));\n const url = new URL(endpoint, origin);\n if (params) {\n Object.entries(params).forEach(([key, value]) =>\n url.searchParams.append(key, String(value)),\n );\n }\n return url.toString();\n }\n\n private async getHeaders(\n method: string,\n customHeaders?: HeadersInit,\n ): Promise<HeadersInit> {\n const hasBody = ![\"GET\", \"HEAD\", \"DELETE\"].includes(method.toUpperCase());\n return {\n ...(hasBody ? { \"Content-Type\": \"application/json\" } : {}),\n ...customHeaders,\n };\n }\n\n private async request<T>(\n endpoint: string,\n config: RequestConfig = {},\n ): Promise<T> {\n const {\n params,\n timeout = this.defaultTimeout,\n headers: customHeaders,\n signal: externalSignal,\n ...fetchConfig\n } = config;\n const method = (fetchConfig.method ?? \"GET\").toUpperCase();\n\n const url = this.buildURL(endpoint, params);\n const headers = await this.getHeaders(method, customHeaders);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n let onAbort: (() => void) | null = null;\n if (externalSignal) {\n if (externalSignal.aborted) {\n controller.abort();\n } else {\n onAbort = () => controller.abort();\n externalSignal.addEventListener(\"abort\", onAbort);\n }\n }\n\n try {\n const response = await fetch(url, {\n ...fetchConfig,\n headers,\n signal: controller.signal,\n credentials: \"include\",\n });\n\n clearTimeout(timeoutId);\n\n const data: ApiResponse<T> = await response.json().catch(() => ({\n success: false,\n error: \"Invalid JSON response\",\n }));\n\n if (!response.ok) {\n throw new ApiClientError(\n data.error ??\n data.message ??\n `Request failed with status ${response.status}`,\n response.status,\n data,\n );\n }\n\n if (!data.success) {\n throw new ApiClientError(\n data.error ?? data.message ?? \"Request failed\",\n response.status,\n data,\n );\n }\n\n return data.data as T;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof Error && error.name === \"AbortError\") {\n if (externalSignal?.aborted) throw error;\n throw new ApiClientError(\"Request timeout\", 408);\n }\n\n if (error instanceof TypeError) {\n throw new ApiClientError(\n \"Network error. Please check your connection.\",\n 0,\n );\n }\n\n if (error instanceof ApiClientError) throw error;\n\n throw new ApiClientError(\n error instanceof Error ? error.message : \"An unexpected error occurred\",\n 500,\n );\n } finally {\n if (onAbort) externalSignal?.removeEventListener(\"abort\", onAbort);\n }\n }\n\n async get<T = unknown>(endpoint: string, config?: RequestConfig): Promise<T> {\n return this.request<T>(endpoint, { ...config, method: \"GET\" });\n }\n\n async post<T = unknown>(\n endpoint: string,\n data?: unknown,\n config?: RequestConfig,\n ): Promise<T> {\n return this.request<T>(endpoint, {\n ...config,\n method: \"POST\",\n body: data != null ? JSON.stringify(data) : undefined,\n });\n }\n\n async put<T = unknown>(\n endpoint: string,\n data?: unknown,\n config?: RequestConfig,\n ): Promise<T> {\n return this.request<T>(endpoint, {\n ...config,\n method: \"PUT\",\n body: data != null ? JSON.stringify(data) : undefined,\n });\n }\n\n async patch<T = unknown>(\n endpoint: string,\n data?: unknown,\n config?: RequestConfig,\n ): Promise<T> {\n return this.request<T>(endpoint, {\n ...config,\n method: \"PATCH\",\n body: data != null ? JSON.stringify(data) : undefined,\n });\n }\n\n async delete<T = unknown>(\n endpoint: string,\n config?: RequestConfig,\n ): Promise<T> {\n return this.request<T>(endpoint, { ...config, method: \"DELETE\" });\n }\n\n async upload<T = unknown>(\n endpoint: string,\n formData: FormData,\n config?: RequestConfig,\n ): Promise<T> {\n const { headers, ...restConfig } = config ?? {};\n const uploadHeaders = await this.getHeaders(\"POST\", headers);\n // Remove Content-Type so browser can set it with multipart boundary\n delete (uploadHeaders as Record<string, string>)[\"Content-Type\"];\n return this.request<T>(endpoint, {\n ...restConfig,\n method: \"POST\",\n body: formData,\n headers: uploadHeaders,\n });\n }\n}\n\n/** Default singleton instance — reads NEXT_PUBLIC_APP_URL from env */\nexport const apiClient = new ApiClient();\n","\"use client\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { apiClient } from \"@mohasinac/http\";\nimport type { BlogListResponse, BlogListParams } from \"../types\";\nimport type { BlogPostDetailResponse } from \"../api/[slug]/route.js\";\n\nexport type { BlogListResponse };\n\ninterface UseBlogPostsOptions {\n initialData?: BlogListResponse;\n enabled?: boolean;\n}\n\nexport function useBlogPosts(\n params: BlogListParams = {},\n opts?: UseBlogPostsOptions,\n) {\n const searchParams = new URLSearchParams();\n if (params.category) searchParams.set(\"category\", params.category);\n if (params.q) searchParams.set(\"q\", params.q);\n if (params.tags) searchParams.set(\"tags\", params.tags);\n if (params.page) searchParams.set(\"page\", String(params.page));\n if (params.perPage) searchParams.set(\"perPage\", String(params.perPage));\n if (params.sort) searchParams.set(\"sort\", params.sort);\n if (params.featured !== undefined)\n searchParams.set(\"featured\", String(params.featured));\n const qs = searchParams.toString();\n\n const query = useQuery<BlogListResponse>({\n queryKey: [\"blog\", qs],\n queryFn: () =>\n apiClient.get<BlogListResponse>(`/api/blog${qs ? `?${qs}` : \"\"}`),\n initialData: opts?.initialData,\n enabled: opts?.enabled,\n });\n\n return {\n posts: query.data?.posts ?? [],\n meta: query.data?.meta,\n total: query.data?.meta?.total ?? 0,\n totalPages: query.data?.meta?.totalPages ?? 1,\n page: query.data?.meta?.page ?? 1,\n isLoading: query.isLoading,\n error: query.error,\n };\n}\n\ninterface UseBlogPostOptions {\n initialData?: BlogPostDetailResponse;\n enabled?: boolean;\n}\n\nexport function useBlogPost(slug: string, opts?: UseBlogPostOptions) {\n const query = useQuery<BlogPostDetailResponse>({\n queryKey: [\"blog\", \"post\", slug],\n queryFn: () => apiClient.get<BlogPostDetailResponse>(`/api/blog/${slug}`),\n initialData: opts?.initialData,\n enabled: opts?.enabled !== false && !!slug,\n });\n\n return {\n post: query.data?.post ?? null,\n related: query.data?.related ?? [],\n isLoading: query.isLoading,\n error: query.error,\n };\n}\n","import React from \"react\";\n\n/**\n * Semantic HTML Wrapper Components\n *\n * Thin wrappers around HTML5 semantic elements.\n * Using these instead of raw tags enables:\n * - Future one-place theming (add default padding/colour here, it applies everywhere)\n * - Enforced accessibility attributes (Nav requires aria-label)\n * - Consistent documentation / IDE autocomplete\n * - Clean migration path if element defaults change\n *\n * All components pass through every standard HTML attribute via `...props`.\n * Style via `className` using Tailwind CSS classes.\n *\n * @example\n * ```tsx\n * import { Section, Article, Main, Aside, Nav, Ul, Ol, Li } from '@mohasinac/ui';\n *\n * <Main className=\"max-w-7xl mx-auto px-4\">\n * <Section className=\"py-12\">\n * <Article>...</Article>\n * </Section>\n * <Aside className=\"w-64 shrink-0\">...</Aside>\n * </Main>\n *\n * <Nav aria-label=\"Main navigation\">\n * <Ul className=\"flex gap-4\">\n * <Li>Products</Li>\n * </Ul>\n * </Nav>\n * ```\n */\n\n// ─── Section ─────────────────────────────────────────────────────────────────\n/**\n * Semantic `<section>` element.\n * Use for thematically grouped content that would appear in an outline.\n * Prefer this over a plain `<div>` when the block has a heading.\n */\nexport interface SectionProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport const Section = React.forwardRef<HTMLElement, SectionProps>(\n ({ className = \"\", children, ...props }, ref) => (\n <section className={className} ref={ref} {...props}>\n {children}\n </section>\n ),\n);\nSection.displayName = \"Section\";\n\n// ─── Article ─────────────────────────────────────────────────────────────────\n/**\n * Semantic `<article>` element.\n * Use for self-contained compositions: blog posts, product cards, reviews, forum posts.\n */\nexport interface ArticleProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\nexport function Article({ className = \"\", children, ...props }: ArticleProps) {\n return (\n <article className={className} {...props}>\n {children}\n </article>\n );\n}\n\n// ─── Main ─────────────────────────────────────────────────────────────────────\n/**\n * Semantic `<main>` element.\n * Wraps the primary content of the document. Should appear only once per page.\n */\nexport interface MainProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport function Main({ className = \"\", children, ...props }: MainProps) {\n return (\n <main className={className} {...props}>\n {children}\n </main>\n );\n}\n\n// ─── Aside ────────────────────────────────────────────────────────────────────\n/**\n * Semantic `<aside>` element.\n * Use for supplementary content tangentially related to the main content:\n * sidebars, callout boxes, related-link panels.\n */\nexport interface AsideProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport const Aside = React.forwardRef<HTMLElement, AsideProps>(\n ({ className = \"\", children, ...props }, ref) => (\n <aside className={className} ref={ref} {...props}>\n {children}\n </aside>\n ),\n);\nAside.displayName = \"Aside\";\n\n// ─── Nav ─────────────────────────────────────────────────────────────────────\n/**\n * Semantic `<nav>` element with enforced `aria-label`.\n *\n * Every `<nav>` on a page MUST have a unique `aria-label` so assistive\n * technologies can distinguish between multiple navigation landmarks.\n *\n * @example\n * ```tsx\n * <Nav aria-label=\"Breadcrumb\">...</Nav>\n * <Nav aria-label=\"Product categories\">...</Nav>\n * ```\n */\nexport interface NavProps extends React.HTMLAttributes<HTMLElement> {\n /** REQUIRED — describes the purpose of this navigation region for screen readers. */\n \"aria-label\": string;\n children: React.ReactNode;\n}\n\nexport function Nav({ className = \"\", children, ...props }: NavProps) {\n return (\n <nav className={className} {...props}>\n {children}\n </nav>\n );\n}\n\n// ─── Header (block-level) ─────────────────────────────────────────────────────\n/**\n * Semantic `<header>` element for block-level component headers.\n * Use inside `Section`, `Article`, or card bodies — NOT as the page-level header.\n *\n * @example\n * ```tsx\n * <Article>\n * <BlockHeader className=\"mb-4\">\n * <Heading level={2}>Post title</Heading>\n * </BlockHeader>\n * </Article>\n * ```\n */\nexport interface BlockHeaderProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport function BlockHeader({\n className = \"\",\n children,\n ...props\n}: BlockHeaderProps) {\n return (\n <header className={className} {...props}>\n {children}\n </header>\n );\n}\n\n// ─── Footer (block-level) ─────────────────────────────────────────────────────\n/**\n * Semantic `<footer>` element for block-level component footers.\n * Use inside `Section`, `Article`, or card bodies — NOT as the page-level footer.\n */\nexport interface BlockFooterProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport function BlockFooter({\n className = \"\",\n children,\n ...props\n}: BlockFooterProps) {\n return (\n <footer className={className} {...props}>\n {children}\n </footer>\n );\n}\n\n// ─── Ul ──────────────────────────────────────────────────────────────────────\n/**\n * Semantic `<ul>` (unordered list) element.\n *\n * @example\n * ```tsx\n * <Ul className=\"space-y-2\">\n * <Li>Item one</Li>\n * <Li>Item two</Li>\n * </Ul>\n * ```\n */\nexport interface UlProps extends React.HTMLAttributes<HTMLUListElement> {\n children: React.ReactNode;\n}\n\nexport function Ul({ className = \"\", children, ...props }: UlProps) {\n return (\n <ul className={className} {...props}>\n {children}\n </ul>\n );\n}\n\n// ─── Ol ──────────────────────────────────────────────────────────────────────\n/**\n * Semantic `<ol>` (ordered list) element.\n *\n * @example\n * ```tsx\n * <Ol className=\"list-decimal pl-4 space-y-1\">\n * <Li>Step one</Li>\n * <Li>Step two</Li>\n * </Ol>\n * ```\n */\nexport interface OlProps extends React.HTMLAttributes<HTMLOListElement> {\n children: React.ReactNode;\n}\n\nexport function Ol({ className = \"\", children, ...props }: OlProps) {\n return (\n <ol className={className} {...props}>\n {children}\n </ol>\n );\n}\n\n// ─── Li ──────────────────────────────────────────────────────────────────────\n/**\n * Semantic `<li>` (list item) element. Use inside `Ul` or `Ol`.\n */\nexport interface LiProps extends React.LiHTMLAttributes<HTMLLIElement> {\n children: React.ReactNode;\n}\n\nexport function Li({ className = \"\", children, ...props }: LiProps) {\n return (\n <li className={className} {...props}>\n {children}\n </li>\n );\n}\n\n// ─── Header / Footer — convenience aliases ────────────────────────────────────\n/**\n * Aliases for `BlockHeader` and `BlockFooter`.\n * Use when importing from the standard `<Header>` / `<Footer>` names.\n */\nexport type HeaderProps = BlockHeaderProps;\nexport const Header = BlockHeader;\nexport type FooterProps = BlockFooterProps;\nexport const Footer = BlockFooter;\n","import React from \"react\";\r\n\r\nexport interface DivProps extends React.HTMLAttributes<HTMLDivElement> {\r\n children?: React.ReactNode;\r\n}\r\n\r\n/**\r\n * Semantic `<div>` wrapper for general-purpose layout containers.\r\n *\r\n * Use when no more specific semantic element applies\r\n * (`<Section>`, `<Article>`, `<Main>`, `<Aside>` etc). Enables\r\n * future one-place theming and consistent import from `@mohasinac/appkit/ui`.\r\n *\r\n * @example\r\n * ```tsx\r\n * <Div className=\"flex items-center gap-4\">\r\n * <Badge>New</Badge>\r\n * <Text>Product title</Text>\r\n * </Div>\r\n * ```\r\n */\r\nexport const Div = React.forwardRef<HTMLDivElement, DivProps>(\r\n ({ className = \"\", children, ...props }, ref) => (\r\n <div ref={ref} className={className} {...props}>\r\n {children}\r\n </div>\r\n ),\r\n);\r\nDiv.displayName = \"Div\";\r\n","import React from \"react\";\n\n/**\n * UI_THEME — inlined subset of the app-level THEME_CONSTANTS.\n * Consumer apps can override by passing `className` on each component.\n * Full THEME_CONSTANTS lives in the host app (`@/constants`).\n */\nconst UI_THEME = {\n typography: {\n h1: \"text-3xl md:text-4xl lg:text-5xl font-bold tracking-tight font-display\",\n h2: \"text-2xl md:text-3xl lg:text-4xl font-bold tracking-tight font-display\",\n h3: \"text-xl md:text-2xl lg:text-3xl font-bold tracking-tight font-display\",\n h4: \"text-lg md:text-xl lg:text-2xl font-bold font-display\",\n h5: \"text-base md:text-lg lg:text-xl font-medium\",\n h6: \"text-sm md:text-base lg:text-lg font-medium\",\n body: \"text-base lg:text-lg\",\n small: \"text-sm lg:text-base\",\n xs: \"text-xs lg:text-sm\",\n },\n themed: {\n textPrimary: \"text-zinc-900 dark:text-zinc-50\",\n textSecondary: \"text-zinc-500 dark:text-zinc-400\",\n textMuted: \"text-zinc-400 dark:text-zinc-500\",\n textError: \"text-red-600 dark:text-red-400\",\n textSuccess: \"text-emerald-600 dark:text-emerald-400\",\n },\n colors: {\n form: {\n required: \"text-red-500\",\n },\n },\n} as const;\n\n// ─── Heading ─────────────────────────────────────────────────────────────────\n\ninterface HeadingProps extends React.HTMLAttributes<HTMLHeadingElement> {\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n variant?: \"primary\" | \"secondary\" | \"muted\" | \"none\";\n children: React.ReactNode;\n}\n\nexport function Heading({\n level = 1,\n variant = \"primary\",\n className = \"\",\n children,\n ...props\n}: HeadingProps) {\n const Tag = `h${level}` as \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n const { typography, themed } = UI_THEME;\n\n const sizeClasses = {\n 1: typography.h1,\n 2: typography.h2,\n 3: typography.h3,\n 4: typography.h4,\n 5: typography.h5,\n 6: typography.h6,\n };\n\n const variantClasses = {\n primary: themed.textPrimary,\n secondary: themed.textSecondary,\n muted: themed.textMuted,\n none: \"\",\n };\n\n return (\n <Tag\n className={`${sizeClasses[level]} ${variantClasses[variant]} ${className}`}\n {...props}\n >\n {children}\n </Tag>\n );\n}\n\n// ─── Text ─────────────────────────────────────────────────────────────────────\n\ninterface TextProps extends React.HTMLAttributes<HTMLParagraphElement> {\n variant?: \"primary\" | \"secondary\" | \"muted\" | \"error\" | \"success\" | \"none\";\n size?: \"xs\" | \"sm\" | \"base\" | \"lg\" | \"xl\";\n weight?: \"normal\" | \"medium\" | \"semibold\" | \"bold\";\n /** Override the rendered element. Defaults to `p`. */\n as?: React.ElementType;\n children: React.ReactNode;\n}\n\nexport function Text({\n variant = \"primary\",\n size = \"base\",\n weight = \"normal\",\n className = \"\",\n as: Tag = \"p\",\n children,\n ...props\n}: TextProps) {\n const { typography, themed } = UI_THEME;\n\n const sizeClasses = {\n xs: typography.xs,\n sm: typography.small,\n base: typography.body,\n lg: \"text-lg\",\n xl: \"text-xl\",\n };\n\n const weightClasses = {\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n bold: \"font-bold\",\n };\n\n const variantClasses = {\n primary: themed.textPrimary,\n secondary: themed.textSecondary,\n muted: themed.textMuted,\n error: themed.textError,\n success: themed.textSuccess,\n none: \"\",\n };\n\n return (\n <Tag\n className={`${sizeClasses[size]} ${weightClasses[weight]} ${variantClasses[variant]} ${className}`}\n {...props}\n >\n {children}\n </Tag>\n );\n}\n\n// ─── Label ────────────────────────────────────────────────────────────────────\n\ninterface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n required?: boolean;\n children: React.ReactNode;\n}\n\nexport function Label({\n required,\n className = \"\",\n children,\n ...props\n}: LabelProps) {\n const { themed, typography, colors } = UI_THEME;\n return (\n <label\n className={`block ${typography.small} font-medium ${themed.textSecondary} mb-1.5 ${className}`}\n {...props}\n >\n {children}\n {required && <span className={`${colors.form.required} ml-1`}>*</span>}\n </label>\n );\n}\n\n// ─── Caption ─────────────────────────────────────────────────────────────────\n\ninterface CaptionProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** \"default\" — muted grey (default); \"accent\" — indigo, semibold; \"inverse\" — light indigo for use on dark indigo backgrounds */\n variant?: \"default\" | \"accent\" | \"inverse\";\n children: React.ReactNode;\n}\n\nexport function Caption({\n variant = \"default\",\n className = \"\",\n children,\n ...props\n}: CaptionProps) {\n const { themed, typography } = UI_THEME;\n\n const variantClasses = {\n default: themed.textMuted,\n accent: \"text-primary font-semibold\",\n inverse: \"text-primary/40\",\n };\n\n return (\n <span\n className={`${typography.xs} ${variantClasses[variant]} ${className}`}\n {...props}\n >\n {children}\n </span>\n );\n}\n\n// ─── Span ─────────────────────────────────────────────────────────────────────\n/**\n * Inline wrapper for styled text fragments. Use instead of a raw `<span>`.\n * When `variant` is \"inherit\" (default) the element carries no colour classes\n * so it blends with its parent — perfect for purely structural/CSS wrappers.\n *\n * @example\n * ```tsx\n * <Span className=\"bg-gradient-to-r from-indigo-500 to-purple-500 bg-clip-text text-transparent\">\n * Highlighted\n * </Span>\n *\n * <Span variant=\"error\" weight=\"semibold\">Required</Span>\n * ```\n */\ninterface SpanProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Colour variant. \"inherit\" (default) applies no colour class. */\n variant?:\n | \"inherit\"\n | \"primary\"\n | \"secondary\"\n | \"muted\"\n | \"error\"\n | \"success\"\n | \"accent\";\n size?: \"xs\" | \"sm\" | \"base\" | \"lg\" | \"xl\";\n weight?: \"normal\" | \"medium\" | \"semibold\" | \"bold\";\n children?: React.ReactNode;\n}\n\nexport function Span({\n variant = \"inherit\",\n size,\n weight,\n className = \"\",\n children,\n ...props\n}: SpanProps) {\n const { themed, typography } = UI_THEME;\n\n const variantClasses: Record<NonNullable<SpanProps[\"variant\"]>, string> = {\n inherit: \"\",\n primary: themed.textPrimary,\n secondary: themed.textSecondary,\n muted: themed.textMuted,\n error: themed.textError,\n success: themed.textSuccess,\n accent: \"text-primary\",\n };\n\n const sizeClasses: Record<NonNullable<SpanProps[\"size\"]>, string> = {\n xs: typography.xs,\n sm: typography.small,\n base: typography.body,\n lg: \"text-lg\",\n xl: \"text-xl\",\n };\n\n const weightClasses: Record<NonNullable<SpanProps[\"weight\"]>, string> = {\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n bold: \"font-bold\",\n };\n\n const classes = [\n size ? sizeClasses[size] : \"\",\n weight ? weightClasses[weight] : \"\",\n variantClasses[variant],\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <span className={classes} {...props}>\n {children}\n </span>\n );\n}\n","import React from \"react\";\n\n/**\n * Spinner — generic loading indicator.\n *\n * Extracted from src/components/ui/Spinner.tsx for @mohasinac/ui.\n * No app-specific imports; pure Tailwind CSS.\n */\n\nexport interface SpinnerProps {\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n variant?: \"primary\" | \"white\" | \"current\";\n className?: string;\n label?: string;\n}\n\nexport function Spinner({\n size = \"md\",\n variant = \"primary\",\n className = \"\",\n label = \"Loading...\",\n}: SpinnerProps) {\n const sizeClasses: Record<NonNullable<SpinnerProps[\"size\"]>, string> = {\n sm: \"w-4 h-4 border-2\",\n md: \"w-8 h-8 border-2\",\n lg: \"w-12 h-12 border-[3px]\",\n xl: \"w-16 h-16 border-4\",\n };\n\n const variantClasses: Record<NonNullable<SpinnerProps[\"variant\"]>, string> = {\n primary:\n \"border-primary-600 border-t-transparent dark:border-secondary-500 dark:border-t-transparent\",\n white: \"border-white border-t-transparent\",\n current: \"border-current border-t-transparent\",\n };\n\n return (\n <div\n className={`inline-flex items-center gap-3 ${className}`}\n role=\"status\"\n aria-label={label}\n >\n <div\n className={`${sizeClasses[size]} ${variantClasses[variant]} rounded-full animate-spin force-spin`}\n />\n {label && <span className=\"sr-only\">{label}</span>}\n </div>\n );\n}\n","/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n","/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n","/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n","import { CamelToPascal } from '../utility-types';\nimport { toCamelCase } from './toCamelCase';\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n","export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n","/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record<string, any>) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n\n return false;\n};\n","'use client';\n\nimport { createContext, createElement, type ReactNode, useContext, useMemo } from 'react';\nimport { LucideProps } from './types';\n\ntype LucideConfig = {\n size: number;\n color: string;\n strokeWidth: number;\n absoluteStrokeWidth: boolean;\n className: string;\n};\n\nconst LucideContext = createContext<LucideProps>({});\n\ntype LucideProviderProps = {\n children: ReactNode;\n} & Partial<LucideConfig>;\n\nexport function LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className,\n}: LucideProviderProps) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className,\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, className],\n );\n\n return createElement(LucideContext.Provider, { value }, children);\n}\n\nexport const useLucideContext = () => useContext(LucideContext);\n","'use client';\n\nimport { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\nimport { useLucideContext } from './context';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n { color, size, strokeWidth, absoluteStrokeWidth, className = '', children, iconNode, ...rest },\n ref,\n ) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n color: contextColor = 'currentColor',\n className: contextClass = '',\n } = useLucideContext() ?? {};\n\n const calculatedStrokeWidth =\n absoluteStrokeWidth ?? contextAbsoluteStrokeWidth\n ? (Number(strokeWidth ?? contextStrokeWidth) * 24) / Number(size ?? contextSize)\n : strokeWidth ?? contextStrokeWidth;\n\n return createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size ?? contextSize ?? defaultAttributes.width,\n height: size ?? contextSize ?? defaultAttributes.height,\n stroke: color ?? contextColor,\n strokeWidth: calculatedStrokeWidth,\n className: mergeClasses('lucide', contextClass, className),\n ...(!children && !hasA11yProp(rest) && { 'aria-hidden': 'true' }),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n );\n },\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className,\n ),\n ...props,\n }),\n );\n\n Component.displayName = toPascalCase(iconName);\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]];\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgNiA5IDE3bC01LTUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Check = createLucideIcon('check', __iconNode);\n\nexport default Check;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }]];\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiA5IDYgNiA2LTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/chevron-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronDown = createLucideIcon('chevron-down', __iconNode);\n\nexport default ChevronDown;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M21 12a9 9 0 1 1-6.219-8.56', key: '13zald' }]];\n\n/**\n * @component @name LoaderCircle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/loader-circle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst LoaderCircle = createLucideIcon('loader-circle', __iconNode);\n\nexport default LoaderCircle;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n];\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTggNiA2IDE4IiAvPgogIDxwYXRoIGQ9Im02IDYgMTIgMTIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon('x', __iconNode);\n\nexport default X;\n","import React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { Loader2 } from \"lucide-react\";\n\n/**\n * Button — versatile button with multiple variants, sizes, and loading state.\n *\n * Extracted from src/components/ui/Button.tsx for @mohasinac/ui.\n * Theme values inlined from THEME_CONSTANTS.button and THEME_CONSTANTS.colors.button.\n */\n\n// Inlined from THEME_CONSTANTS\nconst UI_BUTTON = {\n base: \"inline-flex items-center justify-center font-medium rounded-xl transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed\",\n active: \"active:scale-95\",\n variants: {\n primary:\n \"bg-primary-600 text-white hover:bg-primary-700 active:bg-primary-800 shadow-sm focus:ring-primary-500/30 dark:bg-secondary-500 dark:text-white dark:hover:bg-secondary-400 dark:active:bg-secondary-600 dark:focus:ring-secondary-400/30\",\n secondary:\n \"bg-primary-700 text-white hover:bg-primary-600 active:bg-primary-800 shadow-md focus:ring-primary-500 dark:bg-secondary-700 dark:text-white dark:hover:bg-secondary-600 dark:active:bg-secondary-800 dark:focus:ring-secondary-500\",\n outline:\n \"border border-zinc-200 dark:border-slate-700 bg-white dark:bg-transparent text-zinc-900 dark:text-zinc-100 hover:bg-zinc-50 dark:hover:bg-slate-800 focus:ring-zinc-400\",\n ghost:\n \"text-zinc-700 dark:text-zinc-300 hover:bg-zinc-100 dark:hover:bg-slate-800 focus:ring-zinc-400\",\n danger:\n \"bg-red-600 text-white hover:bg-red-500 active:bg-red-700 shadow-sm shadow-red-600/10 focus:ring-red-500\",\n warning:\n \"bg-amber-500 text-white hover:bg-amber-400 active:bg-amber-600 shadow-sm shadow-amber-500/10 focus:ring-amber-500\",\n },\n sizes: {\n sm: \"px-2.5 py-1.5 text-xs sm:px-3 sm:text-sm gap-1.5 min-h-[36px]\",\n md: \"px-3 py-2 text-sm sm:px-4 sm:py-2.5 sm:text-base gap-2 min-h-[44px]\",\n lg: \"px-4 py-2.5 text-base sm:px-6 sm:py-3 sm:text-lg gap-2.5 min-h-[44px]\",\n },\n} as const;\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: keyof typeof UI_BUTTON.variants;\n size?: keyof typeof UI_BUTTON.sizes;\n isLoading?: boolean;\n children?: React.ReactNode;\n}\n\nexport function Button({\n variant = \"primary\",\n size = \"md\",\n className = \"\",\n isLoading = false,\n disabled,\n children,\n ...props\n}: ButtonProps) {\n return (\n <button\n className={twMerge(\n UI_BUTTON.base,\n UI_BUTTON.active,\n UI_BUTTON.variants[variant],\n UI_BUTTON.sizes[size],\n className,\n )}\n disabled={disabled || isLoading}\n aria-busy={isLoading || undefined}\n {...props}\n >\n {isLoading && (\n <Loader2\n className=\"w-4 h-4 animate-spin flex-shrink-0\"\n aria-hidden=\"true\"\n />\n )}\n {isLoading ? <span className=\"opacity-70\">{children}</span> : children}\n </button>\n );\n}\n","\"use client\";\r\n\r\nimport React, { createContext, useContext, useMemo, useState } from \"react\";\r\nimport { Button } from \"./Button\";\r\nimport { Div } from \"./Div\";\r\nimport { Span } from \"./Typography\";\r\n\r\ninterface AccordionContextValue {\r\n type: \"single\" | \"multiple\";\r\n openValues: string[];\r\n toggle: (value: string) => void;\r\n}\r\n\r\nconst AccordionContext = createContext<AccordionContextValue | null>(null);\r\n\r\nexport interface AccordionProps {\r\n /** Legacy simple mode: renders a native details/summary accordion */\r\n title?: React.ReactNode;\r\n /** Legacy simple mode open state */\r\n open?: boolean;\r\n /** Legacy simple mode title styling */\r\n titleClassName?: string;\r\n /** Legacy simple mode content styling */\r\n contentClassName?: string;\r\n\r\n /** Controlled/list mode: single or multiple expanded items */\r\n type?: \"single\" | \"multiple\";\r\n defaultValue?: string | string[];\r\n value?: string | string[];\r\n onChange?: (value: string | string[]) => void;\r\n\r\n className?: string;\r\n children?: React.ReactNode;\r\n}\r\n\r\nexport interface AccordionItemProps {\r\n value: string;\r\n title: React.ReactNode;\r\n disabled?: boolean;\r\n className?: string;\r\n children?: React.ReactNode;\r\n}\r\n\r\nfunction toArray(value?: string | string[]): string[] {\r\n if (!value) return [];\r\n return Array.isArray(value) ? value : [value];\r\n}\r\n\r\nfunction renderLegacyAccordion({\r\n title,\r\n children,\r\n open,\r\n className = \"\",\r\n titleClassName = \"\",\r\n contentClassName = \"\",\r\n}: {\r\n title: React.ReactNode;\r\n children?: React.ReactNode;\r\n open: boolean;\r\n className?: string;\r\n titleClassName?: string;\r\n contentClassName?: string;\r\n}) {\r\n return (\r\n <details\r\n open={open}\r\n className={`group border-b border-zinc-200 dark:border-zinc-700 ${className}`}\r\n >\r\n <summary\r\n className={`flex cursor-pointer select-none list-none items-center justify-between py-3 text-sm font-medium text-zinc-900 dark:text-zinc-100 ${titleClassName}`}\r\n >\r\n {title}\r\n <span\r\n className=\"ml-2 flex-shrink-0 text-zinc-400 transition-transform duration-200 group-open:rotate-180\"\r\n aria-hidden=\"true\"\r\n >\r\n ▾\r\n </span>\r\n </summary>\r\n <div\r\n className={`pb-4 text-sm text-zinc-600 dark:text-zinc-400 ${contentClassName}`}\r\n >\r\n {children}\r\n </div>\r\n </details>\r\n );\r\n}\r\n\r\nexport function Accordion({\r\n title,\r\n children,\r\n open = false,\r\n className = \"\",\r\n titleClassName = \"\",\r\n contentClassName = \"\",\r\n type = \"single\",\r\n defaultValue,\r\n value,\r\n onChange,\r\n}: AccordionProps) {\r\n // Backward-compatible simple details mode.\r\n if (title !== undefined) {\r\n return renderLegacyAccordion({\r\n title,\r\n children,\r\n open,\r\n className,\r\n titleClassName,\r\n contentClassName,\r\n });\r\n }\r\n\r\n const initialOpen = useMemo(() => {\r\n if (value !== undefined) return toArray(value);\r\n return toArray(defaultValue);\r\n }, [defaultValue, value]);\r\n\r\n const [internalOpenValues, setInternalOpenValues] =\r\n useState<string[]>(initialOpen);\r\n\r\n const activeOpenValues =\r\n value !== undefined ? toArray(value) : internalOpenValues;\r\n\r\n const toggle = (itemValue: string) => {\r\n const nextOpenValues =\r\n type === \"single\"\r\n ? activeOpenValues.includes(itemValue)\r\n ? []\r\n : [itemValue]\r\n : activeOpenValues.includes(itemValue)\r\n ? activeOpenValues.filter((v) => v !== itemValue)\r\n : [...activeOpenValues, itemValue];\r\n\r\n if (value === undefined) {\r\n setInternalOpenValues(nextOpenValues);\r\n }\r\n\r\n onChange?.(type === \"single\" ? (nextOpenValues[0] ?? \"\") : nextOpenValues);\r\n };\r\n\r\n return (\r\n <AccordionContext.Provider\r\n value={{ type, openValues: activeOpenValues, toggle }}\r\n >\r\n <Div className={className}>{children}</Div>\r\n </AccordionContext.Provider>\r\n );\r\n}\r\n\r\nexport function AccordionItem({\r\n value,\r\n title,\r\n disabled = false,\r\n className = \"\",\r\n children,\r\n}: AccordionItemProps) {\r\n const ctx = useContext(AccordionContext);\r\n if (!ctx) {\r\n throw new Error(\"AccordionItem must be used within Accordion.\");\r\n }\r\n\r\n const isOpen = ctx.openValues.includes(value);\r\n\r\n return (\r\n <Div\r\n className={`border-b border-gray-200 dark:border-gray-700 ${className}`}\r\n >\r\n <Button\r\n type=\"button\"\r\n disabled={disabled}\r\n aria-expanded={isOpen}\r\n onClick={() => ctx.toggle(value)}\r\n className=\"w-full flex items-center justify-between py-3 px-1 text-left text-sm font-medium disabled:opacity-50 disabled:cursor-not-allowed\"\r\n >\r\n <Span>{title}</Span>\r\n <Span\r\n className={`transition-transform duration-200 ${isOpen ? \"rotate-180\" : \"\"}`}\r\n >\r\n ▾\r\n </Span>\r\n </Button>\r\n {isOpen && (\r\n <Div className=\"pb-3 px-1 text-sm text-gray-600 dark:text-gray-400\">\r\n {children}\r\n </Div>\r\n )}\r\n </Div>\r\n );\r\n}\r\n","import React from \"react\";\nimport { Heading } from \"./Typography\";\nimport { Button } from \"./Button\";\n\n/**\n * Alert — flexible alert/notification with variant icons and optional dismiss.\n *\n * Extracted from src/components/feedback/Alert.tsx for @mohasinac/ui.\n * Theme values inlined from THEME_CONSTANTS.colors.alert and THEME_CONSTANTS.colors.button.\n */\n\n// Inlined from THEME_CONSTANTS.colors.alert\nconst ALERT_STYLES = {\n info: {\n container:\n \"bg-sky-50 border-sky-200/80 dark:bg-sky-950/30 dark:border-sky-800/50\",\n icon: \"text-sky-600 dark:text-sky-400\",\n title: \"text-sky-900 dark:text-sky-200\",\n text: \"text-sky-800 dark:text-sky-300\",\n },\n success: {\n container:\n \"bg-emerald-50 border-emerald-200/80 dark:bg-emerald-950/30 dark:border-emerald-800/50\",\n icon: \"text-emerald-600 dark:text-emerald-400\",\n title: \"text-emerald-900 dark:text-emerald-200\",\n text: \"text-emerald-800 dark:text-emerald-300\",\n },\n warning: {\n container:\n \"bg-amber-50 border-amber-200/80 dark:bg-amber-950/30 dark:border-amber-800/50\",\n icon: \"text-amber-600 dark:text-amber-400\",\n title: \"text-amber-900 dark:text-amber-200\",\n text: \"text-amber-800 dark:text-amber-300\",\n },\n error: {\n container:\n \"bg-red-50 border-red-200/80 dark:bg-red-950/30 dark:border-red-800/50\",\n icon: \"text-red-600 dark:text-red-400\",\n title: \"text-red-900 dark:text-red-200\",\n text: \"text-red-800 dark:text-red-300\",\n },\n} as const;\n\nconst ALERT_CLOSE_HOVER = \"hover:bg-black/5 dark:hover:bg-white/5\";\n\nconst ICONS = {\n info: (\n <svg\n className=\"w-5 h-5\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n success: (\n <svg\n className=\"w-5 h-5\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n warning: (\n <svg\n className=\"w-5 h-5\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n error: (\n <svg\n className=\"w-5 h-5\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n} as const;\n\nexport interface AlertProps {\n children: React.ReactNode;\n variant?: keyof typeof ALERT_STYLES;\n title?: string;\n onClose?: () => void;\n className?: string;\n}\n\nexport function Alert({\n children,\n variant = \"info\",\n title,\n onClose,\n className = \"\",\n}: AlertProps) {\n const styles = ALERT_STYLES[variant];\n\n return (\n <div\n className={`relative p-4 rounded-xl border ${styles.container} ${className}`}\n role=\"alert\"\n >\n <div className=\"flex gap-3\">\n <div className={`flex-shrink-0 ${styles.icon}`}>{ICONS[variant]}</div>\n\n <div className=\"flex-1 min-w-0\">\n {title && (\n <Heading\n level={3}\n className={`text-sm font-semibold mb-1 ${styles.title}`}\n >\n {title}\n </Heading>\n )}\n <div className={`text-sm ${styles.text}`}>{children}</div>\n </div>\n\n {onClose && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onClose}\n className={`flex-shrink-0 ml-3 rounded-lg p-1.5 min-h-0 ${styles.icon} ${ALERT_CLOSE_HOVER}`}\n aria-label=\"Close\"\n >\n <svg\n className=\"w-5 h-5\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </Button>\n )}\n </div>\n </div>\n );\n}\n","import type { IAuthProvider, ISessionProvider } from \"./auth.js\";\nimport type { IEmailProvider } from \"./email.js\";\nimport type { IStorageProvider } from \"./storage.js\";\nimport type { IPaymentProvider } from \"./payment.js\";\nimport type { IShippingProvider } from \"./shipping.js\";\nimport type { ISearchProvider } from \"./search.js\";\nimport type { ICacheProvider, IQueueProvider, IEventBus } from \"./infra.js\";\nimport type { IStyleAdapter } from \"./style.js\";\nimport type { IDbProvider } from \"./repository.js\";\n\nexport interface ProviderRegistry {\n auth: IAuthProvider;\n session: ISessionProvider;\n email: IEmailProvider;\n storage: IStorageProvider;\n style: IStyleAdapter;\n db?: IDbProvider;\n payment?: IPaymentProvider;\n shipping?: IShippingProvider;\n search?: ISearchProvider;\n cache?: ICacheProvider;\n queue?: IQueueProvider;\n eventBus?: IEventBus;\n}\n\nlet _registry: ProviderRegistry | null = null;\n\nexport function registerProviders(registry: ProviderRegistry): void {\n _registry = registry;\n}\n\nexport function getProviders(): ProviderRegistry {\n if (!_registry) {\n throw new Error(\n \"[contracts] Call registerProviders() before getProviders(). \" +\n \"Ensure providers.config.ts is imported at app startup.\",\n );\n }\n return _registry;\n}\n\nexport function _resetProviders(): void {\n _registry = null;\n}","/**\r\n * Table, pagination and sticky-header configuration types.\r\n *\r\n * Every table/list view in every feat-* package accepts these config objects.\r\n * Apps can spread-merge over the exported defaults to override only what they need:\r\n *\r\n * @example\r\n * // App-level base config (one file, reused everywhere)\r\n * import { DEFAULT_TABLE_CONFIG, DEFAULT_PAGINATION_CONFIG } from \"@mohasinac/contracts\";\r\n *\r\n * export const myTableConfig: TableConfig = {\r\n * ...DEFAULT_TABLE_CONFIG,\r\n * pageSize: 10,\r\n * showViewToggle: true,\r\n * };\r\n *\r\n * export const myPaginationConfig: PaginationConfig = {\r\n * ...DEFAULT_PAGINATION_CONFIG,\r\n * perPage: 10,\r\n * showPageSizeSelector: true,\r\n * pageSizeOptions: [10, 25, 50],\r\n * };\r\n *\r\n * // In a component\r\n * <DataTable tableConfig={myTableConfig} paginationConfig={myPaginationConfig} ... />\r\n *\r\n * // In a hook\r\n * const { products } = useProducts(params, { paginationConfig: myPaginationConfig });\r\n */\r\n\r\n// ─── Pagination ────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Composable pagination configuration.\r\n * All fields are optional so apps can spread-merge over the defaults.\r\n */\r\nexport interface PaginationConfig {\r\n /** Items per page sent to the API. Default: 20 */\r\n perPage?: number;\r\n /** Hard cap on perPage (for page-size selector). Default: 100 */\r\n maxPerPage?: number;\r\n /** Show a page-size selector UI element. Default: false */\r\n showPageSizeSelector?: boolean;\r\n /** Options for the page-size selector. Default: [10, 20, 50, 100] */\r\n pageSizeOptions?: number[];\r\n /** Show first / last page buttons. Default: true */\r\n showFirstLast?: boolean;\r\n /** Show previous / next buttons. Default: true */\r\n showPrevNext?: boolean;\r\n /** Max visible page number buttons before ellipsis. Default: 7 */\r\n maxVisible?: number;\r\n /** Size variant for pagination button sizing. Default: \"md\" */\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n}\r\n\r\nexport const DEFAULT_PAGINATION_CONFIG: Required<PaginationConfig> = {\r\n perPage: 20,\r\n maxPerPage: 100,\r\n showPageSizeSelector: false,\r\n pageSizeOptions: [10, 20, 50, 100],\r\n showFirstLast: true,\r\n showPrevNext: true,\r\n maxVisible: 7,\r\n size: \"md\",\r\n};\r\n\r\n// ─── Sticky header ─────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Sticky header configuration for data tables.\r\n * When `enabled` is true the thead is pinned while the tbody scrolls.\r\n */\r\nexport interface StickyConfig {\r\n /** Pin the header while the body scrolls. Default: false */\r\n enabled?: boolean;\r\n /** Tailwind `top-*` class applied to the sticky thead. Default: \"top-0\" */\r\n topOffset?: string;\r\n /** Max height of the scrollable container. Default: \"600px\" */\r\n maxHeight?: string;\r\n /** z-index of the sticky header. Default: 10 */\r\n zIndex?: number;\r\n}\r\n\r\nexport const DEFAULT_STICKY_CONFIG: Required<StickyConfig> = {\r\n enabled: false,\r\n topOffset: \"top-0\",\r\n maxHeight: \"600px\",\r\n zIndex: 10,\r\n};\r\n\r\n// ─── Table ─────────────────────────────────────────────────────────────────────\r\n\r\n/** View mode options for DataTable. */\r\nexport type TableViewMode = \"table\" | \"grid\" | \"list\";\r\n\r\n/**\r\n * Composable table configuration.\r\n * Pass a Partial<TableConfig> to any DataTable / admin-list hook; values are\r\n * deep-merged with DEFAULT_TABLE_CONFIG at the use site.\r\n */\r\nexport interface TableConfig {\r\n /** Items shown per page (internal pagination). Default: 20 */\r\n pageSize?: number;\r\n /** Sticky header behaviour. Default: disabled */\r\n sticky?: StickyConfig;\r\n /** Alternate row background colour. Default: false */\r\n striped?: boolean;\r\n /** Enable row checkbox selection. Default: false */\r\n selectable?: boolean;\r\n /** Show view-mode toggle (table / grid / list). Default: false */\r\n showViewToggle?: boolean;\r\n /** Default view mode. Default: \"table\" */\r\n defaultViewMode?: TableViewMode;\r\n /** Pagination widget configuration. */\r\n pagination?: PaginationConfig;\r\n}\r\n\r\nexport const DEFAULT_TABLE_CONFIG: {\r\n pageSize: number;\r\n sticky: Required<StickyConfig>;\r\n striped: boolean;\r\n selectable: boolean;\r\n showViewToggle: boolean;\r\n defaultViewMode: TableViewMode;\r\n pagination: Required<PaginationConfig>;\r\n} = {\r\n pageSize: DEFAULT_PAGINATION_CONFIG.perPage,\r\n sticky: DEFAULT_STICKY_CONFIG,\r\n striped: false,\r\n selectable: false,\r\n showViewToggle: false,\r\n defaultViewMode: \"table\",\r\n pagination: DEFAULT_PAGINATION_CONFIG,\r\n};\r\n\r\n/**\r\n * Utility: merge a Partial<TableConfig> over the defaults.\r\n * Performs a shallow merge at the top level and deep merge for nested objects.\r\n */\r\nexport function mergeTableConfig(override?: Partial<TableConfig>): typeof DEFAULT_TABLE_CONFIG {\r\n if (!override) return DEFAULT_TABLE_CONFIG;\r\n return {\r\n ...DEFAULT_TABLE_CONFIG,\r\n ...override,\r\n sticky: { ...DEFAULT_STICKY_CONFIG, ...override.sticky },\r\n pagination: { ...DEFAULT_PAGINATION_CONFIG, ...override.pagination },\r\n };\r\n}\r\n","\"use client\";\n\nimport React from \"react\";\nimport type { PaginationConfig } from \"@mohasinac/contracts\";\nimport { DEFAULT_PAGINATION_CONFIG } from \"@mohasinac/contracts\";\n\n/**\n * Pagination — smart ellipsis pagination with prev/next chevrons.\n *\n * Accepts either individual props OR a `paginationConfig` object\n * (merged with DEFAULT_PAGINATION_CONFIG). Individual props take precedence.\n */\n\nexport interface PaginationProps {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n /**\n * Composable pagination config. Merged with DEFAULT_PAGINATION_CONFIG.\n * Individual flat props override this.\n */\n paginationConfig?: Partial<PaginationConfig>;\n /** Max visible page buttons before ellipsis kicks in. Default: 7 */\n maxVisible?: number;\n showFirstLast?: boolean;\n showPrevNext?: boolean;\n disabled?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nfunction getPageNumbers(\n currentPage: number,\n totalPages: number,\n maxVisible: number,\n): (number | \"...\")[] {\n if (totalPages <= maxVisible) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const pages: (number | \"...\")[] = [];\n const halfVisible = Math.floor(maxVisible / 2);\n\n let startPage = Math.max(1, currentPage - halfVisible);\n let endPage = Math.min(totalPages, currentPage + halfVisible);\n\n if (currentPage <= halfVisible) endPage = maxVisible;\n if (currentPage >= totalPages - halfVisible)\n startPage = totalPages - maxVisible + 1;\n\n if (startPage > 1) {\n pages.push(1);\n if (startPage > 2) pages.push(\"...\");\n }\n for (let i = startPage; i <= endPage; i++) pages.push(i);\n if (endPage < totalPages) {\n if (endPage < totalPages - 1) pages.push(\"...\");\n pages.push(totalPages);\n }\n return pages;\n}\n\nconst SIZE_CLASSES = {\n sm: \"text-xs px-2 py-1 min-w-[28px]\",\n md: \"text-sm px-3 py-1.5 min-w-[36px]\",\n lg: \"text-base px-4 py-2 min-w-[44px]\",\n} as const;\n\nexport function Pagination({\n currentPage,\n totalPages,\n onPageChange,\n paginationConfig,\n maxVisible: maxVisibleProp,\n showFirstLast: showFirstLastProp,\n showPrevNext: showPrevNextProp,\n disabled = false,\n size: sizeProp,\n className = \"\",\n}: PaginationProps) {\n const resolved = { ...DEFAULT_PAGINATION_CONFIG, ...paginationConfig };\n const maxVisible = maxVisibleProp ?? resolved.maxVisible;\n const showFirstLast = showFirstLastProp ?? resolved.showFirstLast;\n const showPrevNext = showPrevNextProp ?? resolved.showPrevNext;\n const size = sizeProp ?? resolved.size;\n const handle = (page: number) => {\n if (disabled || page < 1 || page > totalPages || page === currentPage)\n return;\n onPageChange(page);\n };\n\n const btnClass = (active: boolean, off: boolean) => {\n const base = `${SIZE_CLASSES[size]} rounded border font-medium transition-colors`;\n if (off)\n return `${base} bg-zinc-100 dark:bg-slate-800 opacity-50 text-zinc-400 dark:text-zinc-500 border-zinc-200 dark:border-slate-700 cursor-not-allowed`;\n if (active)\n return `${base} bg-primary-600 text-white border-primary-600 cursor-default`;\n return `${base} bg-white dark:bg-slate-900 text-zinc-700 dark:text-zinc-300 border-zinc-200 dark:border-slate-700 hover:bg-zinc-50 dark:hover:bg-slate-800 hover:border-zinc-300 dark:hover:border-slate-600 cursor-pointer`;\n };\n\n const pages = getPageNumbers(currentPage, totalPages, maxVisible);\n\n return (\n <nav\n className={`flex items-center gap-1 ${className}`}\n aria-label=\"Pagination\"\n >\n {showFirstLast && (\n <button\n type=\"button\"\n className={btnClass(false, disabled || currentPage === 1)}\n onClick={() => handle(1)}\n disabled={disabled || currentPage === 1}\n aria-label=\"First page\"\n >\n «\n </button>\n )}\n {showPrevNext && (\n <button\n type=\"button\"\n className={btnClass(false, disabled || currentPage === 1)}\n onClick={() => handle(currentPage - 1)}\n disabled={disabled || currentPage === 1}\n aria-label=\"Previous page\"\n >\n ‹\n </button>\n )}\n\n {pages.map((page, i) =>\n page === \"...\" ? (\n <span\n key={`ellipsis-${i}`}\n className={`${SIZE_CLASSES[size]} text-zinc-400 dark:text-zinc-500 text-center`}\n aria-hidden=\"true\"\n >\n …\n </span>\n ) : (\n <button\n key={page}\n type=\"button\"\n className={btnClass(\n page === currentPage,\n disabled && page !== currentPage,\n )}\n onClick={() => handle(page)}\n disabled={disabled}\n aria-label={`Page ${page}`}\n aria-current={page === currentPage ? \"page\" : undefined}\n >\n {page}\n </button>\n ),\n )}\n\n {showPrevNext && (\n <button\n type=\"button\"\n className={btnClass(false, disabled || currentPage === totalPages)}\n onClick={() => handle(currentPage + 1)}\n disabled={disabled || currentPage === totalPages}\n aria-label=\"Next page\"\n >\n ›\n </button>\n )}\n {showFirstLast && (\n <button\n type=\"button\"\n className={btnClass(false, disabled || currentPage === totalPages)}\n onClick={() => handle(totalPages)}\n disabled={disabled || currentPage === totalPages}\n aria-label=\"Last page\"\n >\n »\n </button>\n )}\n </nav>\n );\n}\n","\"use client\";\n\nimport React, { useCallback, useEffect, useId, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { X } from \"lucide-react\";\nimport { Heading } from \"./Typography\";\nimport { Button } from \"./Button\";\n\n/**\n * Modal — centered dialog with backdrop, multiple sizes, ESC-to-close, and scroll lock.\n *\n * Standalone @mohasinac/ui primitive. No app-specific imports.\n * Renders via React Portal for correct z-index layering.\n */\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n children: React.ReactNode;\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n showCloseButton?: boolean;\n /** Additional classNames for the modal panel */\n className?: string;\n}\n\nconst SIZE_CLASSES: Record<NonNullable<ModalProps[\"size\"]>, string> = {\n sm: \"max-w-sm\",\n md: \"max-w-lg\",\n lg: \"max-w-2xl\",\n xl: \"max-w-4xl\",\n full: \"max-w-[95vw] max-h-[95vh]\",\n};\n\nexport function Modal({\n isOpen,\n onClose,\n title,\n children,\n size = \"md\",\n showCloseButton = true,\n className = \"\",\n}: ModalProps) {\n const titleId = useId();\n const panelRef = useRef<HTMLDivElement>(null);\n const prevFocusRef = useRef<HTMLElement | null>(null);\n\n // Lock body scroll while open\n useEffect(() => {\n if (!isOpen) return;\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = prev;\n };\n }, [isOpen]);\n\n // Restore focus on close\n useEffect(() => {\n if (isOpen) {\n prevFocusRef.current = document.activeElement as HTMLElement;\n // Focus the panel itself so ESC works immediately\n requestAnimationFrame(() => panelRef.current?.focus());\n } else {\n prevFocusRef.current?.focus();\n }\n }, [isOpen]);\n\n // Trap focus inside modal\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Escape\") {\n onClose();\n return;\n }\n if (e.key !== \"Tab\") return;\n const panel = panelRef.current;\n if (!panel) return;\n const focusable = Array.from(\n panel.querySelectorAll<HTMLElement>(\n 'a[href],button:not([disabled]),textarea,input,select,[tabindex]:not([tabindex=\"-1\"])',\n ),\n );\n if (!focusable.length) return;\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n if (e.shiftKey && document.activeElement === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n },\n [onClose],\n );\n\n if (!isOpen) return null;\n if (typeof document === \"undefined\") return null;\n\n return createPortal(\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center p-4\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n onKeyDown={handleKeyDown}\n >\n {/* Backdrop */}\n <div\n className=\"absolute inset-0 bg-black/60 backdrop-blur-sm\"\n aria-hidden=\"true\"\n onClick={onClose}\n />\n\n {/* Panel */}\n <div\n ref={panelRef}\n tabIndex={-1}\n className={[\n \"relative w-full rounded-2xl bg-white dark:bg-slate-900\",\n \"shadow-2xl ring-1 ring-zinc-200 dark:ring-slate-700\",\n \"flex flex-col max-h-[90vh] overflow-hidden\",\n \"animate-[fadeInUp_0.15s_ease_forwards]\",\n SIZE_CLASSES[size],\n className,\n ].join(\" \")}\n >\n {/* Header */}\n {(title || showCloseButton) && (\n <div className=\"flex items-center justify-between px-6 py-4 border-b border-zinc-100 dark:border-slate-800 flex-shrink-0\">\n {title && (\n <Heading\n level={2}\n id={titleId}\n className=\"!text-lg !font-semibold !font-sans tracking-tight\"\n >\n {title}\n </Heading>\n )}\n {showCloseButton && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n onClick={onClose}\n className=\"ml-auto p-1.5 !min-h-0 rounded-lg text-zinc-400 hover:text-zinc-600 dark:text-zinc-500 dark:hover:text-zinc-300\"\n aria-label=\"Close\"\n >\n <X className=\"w-5 h-5\" />\n </Button>\n )}\n </div>\n )}\n\n {/* Scrollable body */}\n <div className=\"overflow-y-auto flex-1 px-6 py-4\">{children}</div>\n </div>\n </div>,\n document.body,\n );\n}\n","\"use client\";\n\nimport React, { useCallback, useEffect, useId, useRef, useState } from \"react\";\nimport { Check, ChevronDown } from \"lucide-react\";\nimport { Label, Span, Text } from \"./Typography\";\nimport { Ul, Li } from \"./Semantic\";\nimport { Button } from \"./Button\";\n\n/**\n * Select — accessible combobox with label, error state, and disabled support.\n *\n * Standalone @mohasinac/ui primitive. No app-specific imports.\n */\n\nexport interface SelectOption<V = string> {\n label: string;\n value: V;\n disabled?: boolean;\n}\n\nexport interface SelectProps<V extends string = string> {\n options: SelectOption<V>[];\n value?: V;\n onChange?: (value: V) => void;\n placeholder?: string;\n label?: string;\n error?: string;\n disabled?: boolean;\n required?: boolean;\n className?: string;\n id?: string;\n}\n\nexport function Select<V extends string = string>({\n options,\n value,\n onChange,\n placeholder = \"Select…\",\n label,\n error,\n disabled = false,\n required,\n className = \"\",\n id: externalId,\n}: SelectProps<V>) {\n const generatedId = useId();\n const id = externalId ?? generatedId;\n const [open, setOpen] = useState(false);\n const [openUp, setOpenUp] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n const selected = options.find((o) => o.value === value);\n\n const toggle = useCallback(() => {\n if (!disabled) {\n if (!open && ref.current) {\n const rect = ref.current.getBoundingClientRect();\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n setOpenUp(spaceBelow < 160 && spaceAbove > spaceBelow);\n }\n setOpen((v) => !v);\n }\n }, [disabled, open]);\n\n const handleSelect = useCallback(\n (val: V) => {\n onChange?.(val);\n setOpen(false);\n },\n [onChange],\n );\n\n // Close on outside click\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setOpen(false);\n }\n };\n if (open) document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open]);\n\n // Keyboard navigation\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setOpen(false);\n return;\n }\n if (e.key === \"Enter\" || e.key === \" \") {\n toggle();\n e.preventDefault();\n return;\n }\n if (e.key === \"ArrowDown\" && !open) {\n setOpen(true);\n e.preventDefault();\n return;\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n const idx = options.findIndex((o) => o.value === value);\n const next = options\n .slice(idx < 0 ? 0 : idx + 1)\n .find((o) => !o.disabled);\n if (next) onChange?.(next.value);\n }\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n const idx = options.findIndex((o) => o.value === value);\n if (idx < 0) return;\n const prev = [...options]\n .slice(0, idx)\n .reverse()\n .find((o) => !o.disabled);\n if (prev) onChange?.(prev.value);\n }\n },\n [open, options, value, onChange, toggle],\n );\n\n const triggerClass = [\n \"flex h-10 w-full items-center justify-between rounded-lg border px-3 py-2 text-sm\",\n \"transition-colors bg-white dark:bg-slate-800/60\",\n \"focus:outline-none focus:ring-2 focus:ring-offset-0\",\n error\n ? \"border-red-400 dark:border-red-500 focus:ring-red-500/20\"\n : \"border-zinc-200 dark:border-slate-700 focus:ring-primary-500/20 dark:focus:ring-secondary-400/20 focus:border-primary-500 dark:focus:border-secondary-400\",\n disabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n className,\n ].join(\" \");\n\n return (\n <div ref={ref} className=\"relative w-full\">\n {label && (\n <Label\n htmlFor={id}\n className=\"!text-zinc-700 dark:!text-zinc-300\"\n required={required}\n >\n {label}\n </Label>\n )}\n\n <Button\n id={id}\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-disabled={disabled}\n disabled={disabled}\n variant=\"ghost\"\n className={triggerClass}\n onClick={toggle}\n onKeyDown={handleKeyDown}\n >\n <Span\n className={\n selected\n ? \"text-zinc-900 dark:text-zinc-50\"\n : \"text-zinc-400 dark:text-zinc-500\"\n }\n >\n {selected?.label ?? placeholder}\n </Span>\n <ChevronDown\n className={`h-4 w-4 flex-shrink-0 text-zinc-400 transition-transform duration-200 ${open ? \"rotate-180\" : \"\"}`}\n aria-hidden=\"true\"\n />\n </Button>\n\n {open && (\n <Ul\n role=\"listbox\"\n className={[\n \"absolute z-50 w-full overflow-auto rounded-lg border border-zinc-200 dark:border-slate-700 bg-white dark:bg-slate-800 shadow-lg max-h-60 py-1\",\n openUp ? \"bottom-full mb-1\" : \"top-full mt-1\",\n ].join(\" \")}\n >\n {options.map((option) => {\n const isSelected = option.value === value;\n return (\n <Li\n key={option.value}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n className={[\n \"relative flex cursor-pointer items-center px-3 py-2 text-sm select-none\",\n option.disabled\n ? \"opacity-40 cursor-not-allowed\"\n : isSelected\n ? \"bg-primary-50 dark:bg-primary-900/20 text-primary-700 dark:text-primary-300\"\n : \"text-zinc-700 dark:text-zinc-300 hover:bg-zinc-50 dark:hover:bg-slate-700\",\n ].join(\" \")}\n onClick={() => !option.disabled && handleSelect(option.value)}\n >\n <Span className=\"flex-1\">{option.label}</Span>\n {isSelected && (\n <Check\n className=\"h-4 w-4 ml-2 flex-shrink-0\"\n aria-hidden=\"true\"\n />\n )}\n </Li>\n );\n })}\n </Ul>\n )}\n\n {error && (\n <Text size=\"xs\" variant=\"error\" className=\"mt-1.5\" role=\"alert\">\n {error}\n </Text>\n )}\n </div>\n );\n}\n","import React from \"react\";\r\n\r\nexport type InputProps = React.InputHTMLAttributes<HTMLInputElement>;\r\n\r\nexport function Input({ className = \"\", ...props }: InputProps) {\r\n return (\r\n <input\r\n className={[\r\n \"w-full rounded-md border border-zinc-200 dark:border-slate-700 bg-white dark:bg-slate-800/60 px-2.5 py-1.5 text-sm text-zinc-900 dark:text-zinc-100 focus:outline-none focus:ring-2 focus:ring-primary-500/20 dark:focus:ring-secondary-400/20\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n {...props}\r\n />\r\n );\r\n}\r\n","import React from \"react\";\r\n\r\nexport type TextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement>;\r\n\r\nexport function Textarea({ className = \"\", ...props }: TextareaProps) {\r\n return (\r\n <textarea\r\n className={[\r\n \"w-full rounded-md border border-zinc-200 dark:border-slate-700 bg-white dark:bg-slate-800/60 px-2.5 py-1.5 text-sm text-zinc-900 dark:text-zinc-100 focus:outline-none focus:ring-2 focus:ring-primary-500/20 dark:focus:ring-secondary-400/20\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n {...props}\r\n />\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { useRef, useState } from \"react\";\r\nimport { Label, Span } from \"./Typography\";\r\n\r\nexport interface TagInputProps {\r\n value: string[];\r\n onChange: (tags: string[]) => void;\r\n disabled?: boolean;\r\n label?: string;\r\n placeholder?: string;\r\n className?: string;\r\n helperText?: string;\r\n}\r\n\r\nexport function TagInput({\r\n value,\r\n onChange,\r\n disabled = false,\r\n label,\r\n placeholder = \"Add a tag...\",\r\n className = \"\",\r\n helperText = \"Press Enter or comma to add a tag\",\r\n}: TagInputProps) {\r\n const [draft, setDraft] = useState(\"\");\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n const addTag = (raw: string) => {\r\n const tag = raw.trim().replace(/,+$/, \"\").trim();\r\n if (!tag || value.includes(tag)) {\r\n setDraft(\"\");\r\n return;\r\n }\r\n onChange([...value, tag]);\r\n setDraft(\"\");\r\n };\r\n\r\n const removeTag = (tag: string) => {\r\n onChange(value.filter((t) => t !== tag));\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (e.key === \"Enter\" || e.key === \",\") {\r\n e.preventDefault();\r\n addTag(draft);\r\n return;\r\n }\r\n\r\n if (e.key === \"Backspace\" && draft === \"\" && value.length > 0) {\r\n onChange(value.slice(0, -1));\r\n }\r\n };\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const inputValue = e.target.value;\r\n if (inputValue.includes(\",\")) {\r\n const parts = inputValue.split(\",\");\r\n const last = parts.pop() ?? \"\";\r\n parts.forEach((part) => addTag(part));\r\n setDraft(last);\r\n return;\r\n }\r\n\r\n setDraft(inputValue);\r\n };\r\n\r\n const handleBlur = () => {\r\n if (draft.trim()) {\r\n addTag(draft);\r\n }\r\n };\r\n\r\n return (\r\n <div className={className}>\r\n {label && <Label className=\"mb-1.5 block text-sm font-medium\">{label}</Label>}\r\n\r\n <div\r\n onClick={() => !disabled && inputRef.current?.focus()}\r\n className={[\r\n \"flex min-h-[42px] w-full cursor-text flex-wrap items-center gap-1.5 rounded-lg border px-3 py-2\",\r\n \"border-zinc-300 bg-white dark:border-slate-700 dark:bg-slate-900\",\r\n disabled\r\n ? \"cursor-not-allowed opacity-50\"\r\n : \"transition-colors focus-within:border-primary-500 focus-within:ring-2 focus-within:ring-primary-500/30\",\r\n ].join(\" \")}\r\n >\r\n {value.map((tag) => (\r\n <span\r\n key={tag}\r\n className=\"inline-flex items-center gap-1 rounded-full bg-primary-500/10 px-2 py-0.5 text-xs font-medium text-primary-700 dark:text-primary-300\"\r\n >\r\n <Span size=\"xs\">{tag}</Span>\r\n {!disabled && (\r\n <button\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n removeTag(tag);\r\n }}\r\n className=\"ml-0.5 text-primary-700/70 hover:text-primary-700 dark:text-primary-300/70 dark:hover:text-primary-300\"\r\n aria-label={`Remove tag ${tag}`}\r\n >\r\n x\r\n </button>\r\n )}\r\n </span>\r\n ))}\r\n\r\n <input\r\n ref={inputRef}\r\n value={draft}\r\n onChange={handleChange}\r\n onKeyDown={handleKeyDown}\r\n onBlur={handleBlur}\r\n disabled={disabled}\r\n placeholder={value.length === 0 ? placeholder : \"\"}\r\n className={[\r\n \"min-w-[100px] flex-1 bg-transparent text-sm outline-none\",\r\n \"text-zinc-900 placeholder:text-zinc-400 dark:text-zinc-100 dark:placeholder:text-zinc-500\",\r\n disabled ? \"cursor-not-allowed\" : \"\",\r\n ].join(\" \")}\r\n aria-label={label ?? \"Tag input\"}\r\n />\r\n </div>\r\n\r\n {helperText && (\r\n <Span size=\"xs\" className=\"mt-1 text-zinc-500 dark:text-zinc-400\">\r\n {helperText}\r\n </Span>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\n\n/**\n * Layout Primitives — Container, Stack, Row, Grid\n *\n * Thin component wrappers that turn semantic prop names into the correct\n * Tailwind class strings from the app's THEME_CONSTANTS token map.\n * Eliminates repeated inline class strings like \"grid grid-cols-1 sm:grid-cols-2\n * lg:grid-cols-3 gap-4\" and \"flex flex-row items-center justify-between gap-2\".\n *\n * Token maps are inlined here (like UI_THEME in Typography.tsx) so the package\n * stays independent of the host app's @/constants import path.\n *\n * @example\n * ```tsx\n * // Before\n * <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\n * <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4\">\n * <div className=\"flex flex-row items-center justify-between gap-2\">\n * <div className=\"flex flex-col gap-4\">\n *\n * // After\n * <Container>\n * <Grid cols={3} gap=\"md\">\n * <Row justify=\"between\" gap=\"sm\">\n * <Stack gap=\"md\">\n * ```\n */\n\n// ─── Token maps ──────────────────────────────────────────────────────────────\n\n/**\n * Gap tokens — maps to `gap-*` Tailwind classes.\n * Mirrors THEME_CONSTANTS.spacing.gap in the host app.\n */\nconst GAP_MAP = {\n none: \"\",\n px: \"gap-px\",\n xs: \"gap-1\",\n sm: \"gap-2\",\n \"2.5\": \"gap-2.5\",\n \"3\": \"gap-3\",\n md: \"gap-4\",\n \"5\": \"gap-5\",\n lg: \"gap-6\",\n xl: \"gap-8\",\n \"2xl\": \"gap-12\",\n} as const;\n\nexport type GapKey = keyof typeof GAP_MAP;\n\n/**\n * Page container sizes.\n * Mirrors THEME_CONSTANTS.page.container in the host app.\n */\nconst CONTAINER_MAP = {\n /** `max-w-3xl` — blog posts, legal / policy pages */\n sm: \"max-w-3xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** `max-w-4xl` — narrow content, contact, about */\n md: \"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** `max-w-5xl` — medium content, checkout, help */\n lg: \"max-w-5xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** `max-w-6xl` — product detail, cart */\n xl: \"max-w-6xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** `max-w-7xl` — main content grids (default) */\n \"2xl\": \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** `max-w-screen-2xl` — full-bleed wide content */\n full: \"max-w-screen-2xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** `max-w-screen-2xl` — wide store/seller layouts (compact px) */\n wide: \"max-w-screen-2xl mx-auto px-4 sm:px-6\",\n /** `max-w-[1920px]` — ultra-wide / 4K displays */\n ultra: \"max-w-[1920px] mx-auto px-4 sm:px-6 lg:px-8\",\n} as const;\n\nexport type ContainerSize = keyof typeof CONTAINER_MAP;\n\nexport type ContainerSizeValue = (typeof CONTAINER_MAP)[ContainerSize];\n\n/**\n * Responsive grid column presets.\n * Mirrors THEME_CONSTANTS.grid in the host app.\n */\nexport const GRID_MAP = {\n /** Single column */\n 1: \"grid grid-cols-1\",\n /** 1 → 2 */\n 2: \"grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-2 2xl:grid-cols-2\",\n /** 1 → 2 → 3 → 4 on widescreen */\n 3: \"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-3 2xl:grid-cols-4\",\n /** 1 → 2 → 3 → 4 → 5 on widescreen */\n 4: \"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5\",\n /** 1 → 2 → 3 → 4 → 5 */\n 5: \"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-4 2xl:grid-cols-5\",\n /** 2 → 3 → 4 → 5 → 6 */\n 6: \"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 xl:grid-cols-5 2xl:grid-cols-6\",\n /**\n * Generic card grid — 1 col on portrait mobile → 5 on ultrawide.\n * Starts at 1 so product cards are readable even on 320 px handsets.\n */\n cards:\n \"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-4 2xl:grid-cols-5\",\n /** Auto-fill product cards — min 200 px */\n productCards: \"grid grid-cols-[repeat(auto-fill,minmax(200px,1fr))] gap-6\",\n /** Auto-fill product cards (compact) — min 220 px */\n productCardsCompact:\n \"grid grid-cols-[repeat(auto-fill,minmax(220px,1fr))] gap-4\",\n /** Auto-fill store cards — min 220 px */\n storeCards: \"grid grid-cols-[repeat(auto-fill,minmax(220px,1fr))] gap-6\",\n /** Auto-fill category tiles — min 130 px */\n categoryCards: \"grid grid-cols-[repeat(auto-fill,minmax(130px,1fr))] gap-4\",\n /** Auto-fill coupon/promo cards — min 264 px */\n couponCards: \"grid grid-cols-[repeat(auto-fill,minmax(264px,1fr))] gap-6\",\n /** Auto-fill address / wide cards — min 300 px */\n addressCards: \"grid grid-cols-[repeat(auto-fill,minmax(300px,1fr))] gap-4\",\n /** Auto-fill KPI/stat tiles — min 180 px */\n statTiles: \"grid grid-cols-[repeat(auto-fill,minmax(180px,1fr))] gap-4\",\n /** Auto-fill account nav tiles — min 160 px */\n navTiles: \"grid grid-cols-[repeat(auto-fill,minmax(160px,1fr))] gap-4\",\n /** Equal halves on md+ */\n halves: \"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-2 2xl:grid-cols-2\",\n /** 2fr / 1fr split on md+ */\n twoThird: \"grid grid-cols-1 md:grid-cols-[2fr_1fr]\",\n /** 1fr / 2fr split on md+ */\n oneThird: \"grid grid-cols-1 md:grid-cols-[1fr_2fr]\",\n /** Fixed 280px left sidebar + 1fr on lg+ */\n sidebar: \"grid grid-cols-1 lg:grid-cols-[280px_1fr]\",\n /** 1fr + fixed 280px right sidebar on lg+ */\n sidebarRight: \"grid grid-cols-1 lg:grid-cols-[1fr_280px]\",\n /** Fixed 320px left sidebar + 1fr on lg+ (admin layout) */\n sidebarWide: \"grid grid-cols-1 lg:grid-cols-[320px_1fr]\",\n /** Product detail triplet: gallery | info | actions sidebar */\n productDetailTriplet:\n \"grid grid-cols-1 lg:grid-cols-[1fr_1fr_280px] xl:grid-cols-[1fr_1fr_300px] 2xl:grid-cols-[1fr_1fr_320px] gap-6 lg:gap-8\",\n /** CSS auto-fill, min 200px columns */\n autoSm: \"grid grid-cols-[repeat(auto-fill,minmax(200px,1fr))]\",\n /** CSS auto-fill, min 280px columns */\n autoMd: \"grid grid-cols-[repeat(auto-fill,minmax(280px,1fr))]\",\n /** CSS auto-fill, min 360px columns */\n autoLg: \"grid grid-cols-[repeat(auto-fill,minmax(360px,1fr))]\",\n} as const;\n\nexport type GridCols = keyof typeof GRID_MAP;\n\n// Alignment helpers shared across Stack and Row\nconst ITEMS_MAP = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n baseline: \"items-baseline\",\n} as const;\n\ntype ItemsAlign = keyof typeof ITEMS_MAP;\n\nconst JUSTIFY_MAP = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n around: \"justify-around\",\n evenly: \"justify-evenly\",\n} as const;\n\ntype JustifyContent = keyof typeof JUSTIFY_MAP;\n\n// ─── Container ────────────────────────────────────────────────────────────────\n\n/**\n * Page-level container with max-width + centering + responsive horizontal padding.\n * Replaces repeated `max-w-7xl mx-auto px-4 sm:px-6 lg:px-8` strings.\n *\n * @example\n * ```tsx\n * <Container>...</Container> // max-w-7xl (default)\n * <Container size=\"lg\">...</Container> // max-w-5xl\n * <Container size=\"full\" as=\"main\">...</Container>\n * ```\n */\nexport interface ContainerProps extends React.HTMLAttributes<HTMLElement> {\n /**\n * Max-width breakpoint preset.\n * - `sm` → `max-w-3xl` (blog / policy)\n * - `md` → `max-w-4xl` (contact / about)\n * - `lg` → `max-w-5xl` (checkout / help)\n * - `xl` → `max-w-6xl` (product detail / cart)\n * - `2xl` → `max-w-7xl` (main content grids — **default**)\n * - `full` → `max-w-screen-2xl` (full-bleed)\n * - `wide` → `max-w-screen-2xl` (compact px, no lg step)\n * - `ultra` → `max-w-[1920px]` (ultra-wide / 4K displays)\n */\n size?: ContainerSize;\n /** Render as a different element (e.g. `\"main\"`, `\"section\"`). Defaults to `\"div\"`. */\n as?: React.ElementType;\n children?: React.ReactNode;\n}\n\nexport function Container({\n size = \"2xl\",\n as,\n className = \"\",\n children,\n ...props\n}: ContainerProps) {\n const Tag = (as ?? \"div\") as React.ElementType;\n return (\n <Tag\n className={[CONTAINER_MAP[size], className].filter(Boolean).join(\" \")}\n {...props}\n >\n {children}\n </Tag>\n );\n}\n\n// ─── Stack ────────────────────────────────────────────────────────────────────\n\n/**\n * Vertical flex column. Use instead of `<div className=\"flex flex-col gap-4\">`.\n *\n * @example\n * ```tsx\n * <Stack gap=\"sm\">\n * <Text>Line one</Text>\n * <Text>Line two</Text>\n * </Stack>\n *\n * // As a list\n * <Stack as=\"ul\" gap=\"xs\">\n * <Li>Item</Li>\n * </Stack>\n * ```\n */\nexport interface StackProps extends React.HTMLAttributes<HTMLElement> {\n /** Space between children. Defaults to `\"md\"` (`gap-4`). */\n gap?: GapKey;\n /** Centers children on both axes (`items-center justify-center`). */\n centered?: boolean;\n /** Cross-axis (horizontal) alignment. Defaults to `\"stretch\"`. */\n align?: Extract<ItemsAlign, \"start\" | \"center\" | \"end\" | \"stretch\">;\n /** Render as a different element. Defaults to `\"div\"`. */\n as?: React.ElementType;\n children?: React.ReactNode;\n}\n\nexport function Stack({\n gap = \"md\",\n centered = false,\n align = \"stretch\",\n as,\n className = \"\",\n children,\n ...props\n}: StackProps) {\n const Tag = (as ?? \"div\") as React.ElementType;\n const classes = [\n \"flex flex-col\",\n GAP_MAP[gap],\n centered ? \"items-center justify-center\" : \"\",\n !centered && align !== \"stretch\" ? ITEMS_MAP[align] : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <Tag className={classes} {...props}>\n {children}\n </Tag>\n );\n}\n\n// ─── Row ─────────────────────────────────────────────────────────────────────\n\n/**\n * Horizontal flex row. Use instead of `<div className=\"flex items-center gap-3\">`.\n *\n * @example\n * ```tsx\n * <Row gap=\"sm\" justify=\"between\">\n * <Heading level={3}>Title</Heading>\n * <Button>Action</Button>\n * </Row>\n *\n * <Row gap=\"xs\" wrap>\n * <Badge>tag</Badge>\n * <Badge>other</Badge>\n * </Row>\n * ```\n */\nexport interface RowProps extends React.HTMLAttributes<HTMLElement> {\n /** Space between children. Defaults to `\"md\"` (`gap-4`). */\n gap?: GapKey;\n /** Centers children on both axes (`items-center justify-center`). */\n centered?: boolean;\n /** Cross-axis (vertical) alignment. Defaults to `\"center\"`. */\n align?: ItemsAlign;\n /** Main-axis (horizontal) distribution. Defaults to `\"start\"`. */\n justify?: JustifyContent;\n /** Allow children to wrap onto multiple lines. */\n wrap?: boolean;\n /** Render as a different element. Defaults to `\"div\"`. */\n as?: React.ElementType;\n children?: React.ReactNode;\n}\n\nexport function Row({\n gap = \"md\",\n centered = false,\n align = \"center\",\n justify = \"start\",\n wrap = false,\n as,\n className = \"\",\n children,\n ...props\n}: RowProps) {\n const Tag = (as ?? \"div\") as React.ElementType;\n const classes = [\n \"flex flex-row\",\n centered ? \"items-center justify-center\" : ITEMS_MAP[align],\n !centered && justify !== \"start\" ? JUSTIFY_MAP[justify] : \"\",\n GAP_MAP[gap],\n wrap ? \"flex-wrap\" : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <Tag className={classes} {...props}>\n {children}\n </Tag>\n );\n}\n\n// ─── Grid ─────────────────────────────────────────────────────────────────────\n\n/**\n * Responsive CSS grid. Use instead of `<div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4\">`.\n *\n * @example\n * ```tsx\n * <Grid cols={3} gap=\"md\">\n * <ProductCard />\n * <ProductCard />\n * </Grid>\n *\n * <Grid cols=\"sidebar\" gap=\"lg\">\n * <Aside>Filters</Aside>\n * <Main>Results</Main>\n * </Grid>\n * ```\n */\nexport interface GridProps extends React.HTMLAttributes<HTMLElement> {\n /**\n * Column preset.\n * - Numbers `1`–`6` → mobile-first responsive stacks\n * - `\"halves\"` → equal 2-col on md+\n * - `\"sidebar\"` / `\"sidebarRight\"` / `\"sidebarWide\"` → fixed+flexible splits\n * - `\"twoThird\"` / `\"oneThird\"` → 2fr/1fr splits\n * - `\"autoSm\"` / `\"autoMd\"` / `\"autoLg\"` → CSS auto-fill grids\n * - Omit (or `undefined`) to use a raw `grid` base and supply columns via\n * the `className` prop directly (e.g. `className=\"grid-cols-2\"`). Useful\n * for fixed non-responsive column counts (form field pairs, button rows).\n */\n cols?: GridCols;\n /** Space between grid cells. Defaults to `\"md\"` (`gap-4`). */\n gap?: GapKey;\n /** Render as a different element. Defaults to `\"div\"`. */\n as?: React.ElementType;\n children?: React.ReactNode;\n}\n\nexport function Grid({\n cols,\n gap = \"md\",\n as,\n className = \"\",\n children,\n ...props\n}: GridProps) {\n const Tag = (as ?? \"div\") as React.ElementType;\n // When cols is omitted callers supply grid-cols-* themselves via className.\n const baseClass = cols !== undefined ? GRID_MAP[cols] : \"grid\";\n const classes = [baseClass, GAP_MAP[gap], className]\n .filter(Boolean)\n .join(\" \");\n return (\n <Tag className={classes} {...props}>\n {children}\n </Tag>\n );\n}\n","import { z } from \"zod\";\r\n\r\nexport type MediaFieldType = \"image\" | \"video\" | \"file\";\r\n\r\nexport type MediaFieldInput = MediaField | string | null | undefined;\r\n\r\nexport interface MediaField {\r\n url: string;\r\n type: MediaFieldType;\r\n alt?: string;\r\n thumbnailUrl?: string;\r\n}\r\n\r\nexport const mediaFieldSchema = z.object({\r\n url: z.string().url(),\r\n type: z.enum([\"image\", \"video\", \"file\"]),\r\n alt: z.string().optional(),\r\n thumbnailUrl: z.string().url().optional(),\r\n});\r\n\r\nexport function coerceMediaField(\r\n value: MediaFieldInput,\r\n fallbackType: MediaFieldType = \"image\",\r\n): MediaField | null {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n if (typeof value === \"string\") {\r\n return {\r\n url: value,\r\n type: fallbackType,\r\n };\r\n }\r\n\r\n return value;\r\n}\r\n\r\nexport function coerceMediaFieldArray(\r\n values: Array<MediaField | string> | null | undefined,\r\n fallbackType: MediaFieldType = \"image\",\r\n): MediaField[] {\r\n if (!values || values.length === 0) {\r\n return [];\r\n }\r\n\r\n return values\r\n .map((value) => coerceMediaField(value, fallbackType))\r\n .filter((value): value is MediaField => value !== null);\r\n}\r\n\r\nexport function getMediaUrl(value: MediaFieldInput): string | undefined {\r\n return coerceMediaField(value)?.url;\r\n}\r\n\r\nexport function inferMediaTypeFromMime(\r\n mimeType?: string,\r\n url?: string,\r\n): MediaFieldType {\r\n if (mimeType?.startsWith(\"image/\")) return \"image\";\r\n if (mimeType?.startsWith(\"video/\")) return \"video\";\r\n\r\n if (url) {\r\n if (/\\.(jpe?g|png|gif|webp|svg)(\\?|$)/i.test(url)) return \"image\";\r\n if (/\\.(mp4|webm|ogg|mov|avi)(\\?|$)/i.test(url)) return \"video\";\r\n }\r\n\r\n return \"file\";\r\n}\r\n","import React from \"react\";\nimport type { LayoutSlots } from \"@mohasinac/contracts\";\nimport type { BlogPost, BlogPostCategory } from \"../types\";\nimport { Article, Button, Div, Heading, Pagination, Span, Text } from \"@mohasinac/ui\";\nimport { getMediaUrl } from \"../../media/types/index.js\";\n\ninterface BlogCardProps {\n post: BlogPost;\n onClick?: (post: BlogPost) => void;\n className?: string;\n}\n\nexport function BlogCard({ post, onClick, className = \"\" }: BlogCardProps) {\n const coverImageUrl = getMediaUrl(post.coverImage);\n const date = post.publishedAt\n ? new Date(post.publishedAt).toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n })\n : \"\";\n\n return (\n <Article\n role={onClick ? \"button\" : undefined}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={\n onClick\n ? (e) => (e.key === \"Enter\" || e.key === \" \") && onClick(post)\n : undefined\n }\n onClick={onClick ? () => onClick(post) : undefined}\n 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}`}\n >\n {coverImageUrl && (\n <Div className=\"aspect-video w-full overflow-hidden bg-neutral-100\">\n <Div\n role=\"img\"\n aria-label={post.title}\n className=\"h-full w-full bg-center bg-cover transition-transform duration-300 group-hover:scale-105\"\n style={{ backgroundImage: `url(${coverImageUrl})` }}\n />\n </Div>\n )}\n <Div className=\"flex flex-1 flex-col p-5\">\n <Div className=\"mb-2 flex items-center gap-2\">\n <Span className=\"rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium capitalize text-primary\">\n {post.category}\n </Span>\n {post.readTimeMinutes && (\n <Span className=\"text-xs text-neutral-400\">\n {post.readTimeMinutes} min read\n </Span>\n )}\n </Div>\n <Heading\n level={3}\n className=\"line-clamp-2 text-base font-semibold text-neutral-900 group-hover:text-primary\"\n >\n {post.title}\n </Heading>\n {post.excerpt && (\n <Text className=\"mt-2 line-clamp-3 flex-1 text-sm text-neutral-500\">\n {post.excerpt}\n </Text>\n )}\n <Div className=\"mt-4 flex items-center gap-3\">\n {post.authorAvatar && (\n <Div\n role=\"img\"\n aria-label={post.authorName ?? \"author\"}\n className=\"h-7 w-7 rounded-full bg-center bg-cover\"\n style={{ backgroundImage: `url(${post.authorAvatar})` }}\n />\n )}\n <Text className=\"text-xs text-neutral-500\">\n {post.authorName && (\n <Span className=\"font-medium text-neutral-700\">\n {post.authorName}\n </Span>\n )}\n {date && <Span className=\"ml-1\">· {date}</Span>}\n </Text>\n </Div>\n </Div>\n </Article>\n );\n}\n\ninterface BlogCategoryTabsProps {\n categories: BlogPostCategory[];\n active?: BlogPostCategory | null;\n onSelect: (cat: BlogPostCategory | null) => void;\n labels?: Record<string, string>;\n}\n\nexport function BlogCategoryTabs({\n categories,\n active,\n onSelect,\n labels = {},\n}: BlogCategoryTabsProps) {\n return (\n <Div className=\"scrollbar-none flex gap-2 overflow-x-auto pb-1\">\n <Button\n onClick={() => onSelect(null)}\n variant={!active ? \"primary\" : \"ghost\"}\n size=\"sm\"\n 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\"}`}\n >\n {labels.all ?? \"All\"}\n </Button>\n {categories.map((cat) => (\n <Button\n key={cat}\n onClick={() => onSelect(cat)}\n variant={active === cat ? \"primary\" : \"ghost\"}\n size=\"sm\"\n 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\"}`}\n >\n {labels[cat] ?? cat}\n </Button>\n ))}\n </Div>\n );\n}\n\ninterface BlogListViewProps<T extends BlogPost = BlogPost> {\n posts: T[];\n isLoading?: boolean;\n totalPages?: number;\n currentPage?: number;\n total?: number;\n onPageChange?: (page: number) => void;\n onPostClick?: (post: T) => void;\n emptyLabel?: string;\n /** Render-prop slot overrides — pass via `FeatureExtension.slots`. */\n slots?: LayoutSlots<T>;\n}\n\nexport function BlogListView<T extends BlogPost = BlogPost>({\n posts,\n isLoading,\n totalPages = 1,\n currentPage = 1,\n total = 0,\n onPageChange,\n onPostClick,\n emptyLabel = \"No posts found\",\n slots,\n}: BlogListViewProps<T>) {\n if (isLoading) {\n return (\n <Div className=\"grid gap-6 sm:grid-cols-2 lg:grid-cols-3\">\n {Array.from({ length: 6 }).map((_, i) => (\n <Div\n key={i}\n className=\"animate-pulse overflow-hidden rounded-xl border border-neutral-200 bg-neutral-100\"\n >\n <Div className=\"aspect-video bg-neutral-200\" />\n <Div className=\"space-y-2 p-5\">\n <Div className=\"h-4 w-16 rounded bg-neutral-200\" />\n <Div className=\"h-5 w-full rounded bg-neutral-200\" />\n <Div className=\"h-4 w-3/4 rounded bg-neutral-200\" />\n </Div>\n </Div>\n ))}\n </Div>\n );\n }\n\n if (posts.length === 0) {\n if (slots?.renderEmptyState) {\n return <>{slots.renderEmptyState() as React.ReactNode}</>;\n }\n return (\n <Text className=\"py-12 text-center text-sm text-neutral-500\">\n {emptyLabel}\n </Text>\n );\n }\n\n return (\n <Div className=\"space-y-8\">\n {slots?.renderHeader\n ? (slots.renderHeader({ total }) as React.ReactNode)\n : null}\n <Div className=\"grid gap-6 sm:grid-cols-2 lg:grid-cols-3\">\n {posts.map((post, i) =>\n slots?.renderCard ? (\n <React.Fragment key={post.id}>\n {slots.renderCard(post, i) as React.ReactNode}\n </React.Fragment>\n ) : (\n <BlogCard\n key={post.id}\n post={post}\n onClick={onPostClick as ((post: BlogPost) => void) | undefined}\n />\n ),\n )}\n </Div>\n {slots?.renderFooter ? (\n (slots.renderFooter({\n page: currentPage,\n totalPages,\n }) as React.ReactNode)\n ) : totalPages > 1 && onPageChange ? (\n <Div className=\"flex justify-center\">\n <Pagination\n currentPage={currentPage}\n totalPages={totalPages}\n onPageChange={onPageChange}\n />\n </Div>\n ) : null}\n </Div>\n );\n}\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Article, Div, Heading, Span, Text } from \"@mohasinac/ui\";\r\nimport type { BlogPost, BlogPostCategory } from \"../types\";\r\nimport { getMediaUrl } from \"../../media/types/index.js\";\r\n\r\nconst CATEGORY_BADGE: Record<BlogPostCategory, string> = {\r\n news: \"bg-blue-100 text-blue-800\",\r\n tips: \"bg-emerald-100 text-emerald-800\",\r\n guides: \"bg-indigo-100 text-indigo-800\",\r\n updates: \"bg-purple-100 text-purple-800\",\r\n community: \"bg-orange-100 text-orange-800\",\r\n};\r\n\r\nexport interface BlogFeaturedCardProps {\r\n post: BlogPost;\r\n /** Full URL/path to the post */\r\n href: string;\r\n labels?: {\r\n featuredBadge?: string;\r\n readTime?: string;\r\n };\r\n /** Render-prop for wrapping in a link */\r\n renderLink?: (href: string, children: React.ReactNode) => React.ReactNode;\r\n /** Render-prop for the cover image slot */\r\n renderImage?: (post: BlogPost) => React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function BlogFeaturedCard({\r\n post,\r\n href,\r\n labels = {},\r\n renderLink,\r\n renderImage,\r\n className = \"\",\r\n}: BlogFeaturedCardProps) {\r\n const coverImageUrl = getMediaUrl(post.coverImage);\r\n const date = post.publishedAt\r\n ? new Date(post.publishedAt).toLocaleDateString(\"en-US\", {\r\n year: \"numeric\",\r\n month: \"short\",\r\n day: \"numeric\",\r\n })\r\n : \"\";\r\n\r\n const inner = (\r\n <Article\r\n className={`overflow-hidden rounded-xl border border-neutral-200 bg-white shadow-sm hover:shadow-lg transition-shadow duration-200 md:flex ${className}`}\r\n >\r\n {coverImageUrl && (\r\n <Div className=\"md:w-1/2 relative h-64 md:min-h-[320px] overflow-hidden\">\r\n {renderImage ? (\r\n renderImage(post)\r\n ) : (\r\n <Div\r\n role=\"img\"\r\n aria-label={post.title}\r\n className=\"h-full w-full bg-cover bg-center\"\r\n style={{ backgroundImage: `url(${coverImageUrl})` }}\r\n />\r\n )}\r\n </Div>\r\n )}\r\n <Div className=\"p-8 md:w-1/2 flex flex-col justify-center\">\r\n <Div className=\"flex items-center gap-2 mb-3\">\r\n <Span\r\n className={`inline-block px-2 py-0.5 rounded-full text-xs font-medium capitalize ${CATEGORY_BADGE[post.category] ?? \"\"}`}\r\n >\r\n {post.category}\r\n </Span>\r\n {post.isFeatured && (\r\n <Span className=\"bg-yellow-100 text-yellow-800 px-2 py-0.5 rounded-full text-xs font-medium\">\r\n {labels.featuredBadge ?? \"Featured\"}\r\n </Span>\r\n )}\r\n </Div>\r\n <Heading\r\n level={2}\r\n className=\"text-xl font-semibold text-neutral-900 mb-3 leading-snug\"\r\n >\r\n {post.title}\r\n </Heading>\r\n {post.excerpt && (\r\n <Text className=\"text-neutral-500 mb-4 line-clamp-3 text-sm\">\r\n {post.excerpt}\r\n </Text>\r\n )}\r\n <Div className=\"flex items-center gap-4 text-xs text-neutral-400\">\r\n {post.authorName && <Span>{post.authorName}</Span>}\r\n {post.readTimeMinutes != null && (\r\n <Span>\r\n {post.readTimeMinutes} {labels.readTime ?? \"min read\"}\r\n </Span>\r\n )}\r\n {date && <Span>{date}</Span>}\r\n </Div>\r\n </Div>\r\n </Article>\r\n );\r\n\r\n return (\r\n <Div className=\"mb-10\">\r\n {renderLink ? renderLink(href, inner) : inner}\r\n </Div>\r\n );\r\n}\r\n","/** Simple class-name concatenation utility. */\nexport function cn(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(\" \");\n}\n\n// ─── Shared style constants ───────────────────────────────────────────────────\n\nexport const INPUT_BASE =\n \"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\";\n\nexport const INPUT_ERROR =\n \"border-red-400 dark:border-red-500 focus:ring-red-500/20 focus:border-red-500 bg-red-50/30 dark:bg-red-950/10\";\n\nexport const INPUT_SUCCESS =\n \"border-emerald-400 dark:border-emerald-500 focus:ring-emerald-500/20 focus:border-emerald-500\";\n\nexport const INPUT_DISABLED =\n \"bg-zinc-50 dark:bg-slate-800/30 text-zinc-400 dark:text-zinc-500 cursor-not-allowed opacity-60\";\n\nexport const INPUT_WITH_ICON = \"pl-10\";\n\nexport const LABEL_BASE =\n \"block text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1.5\";\nexport const HELPER_BASE = \"text-xs text-zinc-500 dark:text-zinc-400 mt-1\";\nexport const ERROR_BASE = \"text-xs text-red-600 dark:text-red-400 mt-1\";\n","import React from \"react\";\nimport { Div, Span } from \"@mohasinac/ui\";\nimport {\n cn,\n INPUT_BASE,\n INPUT_ERROR,\n INPUT_SUCCESS,\n INPUT_DISABLED,\n INPUT_WITH_ICON,\n LABEL_BASE,\n HELPER_BASE,\n ERROR_BASE,\n} from \"./utils\";\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n helperText?: string;\n icon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n success?: boolean;\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n function Input(\n {\n label,\n error,\n helperText,\n icon,\n rightIcon,\n success,\n className = \"\",\n required,\n disabled,\n ...props\n },\n ref,\n ) {\n const stateClasses = error\n ? INPUT_ERROR\n : success\n ? INPUT_SUCCESS\n : disabled\n ? INPUT_DISABLED\n : \"\";\n\n return (\n <Div className=\"w-full\">\n {label && (\n <label className={LABEL_BASE}>\n {label}\n {required && (\n <Span className=\"text-red-500 ml-1\" aria-hidden=\"true\">\n *\n </Span>\n )}\n </label>\n )}\n\n <Div className=\"relative group\">\n {icon && (\n <Div\n className={cn(\n \"absolute left-3 top-1/2 -translate-y-1/2 transition-colors duration-150\",\n error\n ? \"text-red-600 dark:text-red-400\"\n : \"text-zinc-400 dark:text-zinc-500\",\n \"group-focus-within:text-primary-500 dark:group-focus-within:text-secondary-400\",\n )}\n >\n {icon}\n </Div>\n )}\n\n <input\n ref={ref}\n className={cn(\n \"w-full\",\n INPUT_BASE,\n icon ? INPUT_WITH_ICON : \"\",\n rightIcon ? \"pr-10\" : \"\",\n stateClasses,\n className,\n )}\n disabled={disabled}\n aria-invalid={error ? \"true\" : undefined}\n aria-describedby={\n error\n ? `${props.id}-error`\n : helperText\n ? `${props.id}-helper`\n : undefined\n }\n {...props}\n />\n\n {rightIcon && (\n <Div\n className={cn(\n \"absolute right-3 top-1/2 -translate-y-1/2 transition-colors duration-150\",\n error\n ? \"text-red-600 dark:text-red-400\"\n : \"text-zinc-400 dark:text-zinc-500\",\n )}\n >\n {rightIcon}\n </Div>\n )}\n </Div>\n\n {error && (\n <p id={`${props.id}-error`} className={ERROR_BASE} role=\"alert\">\n {error}\n </p>\n )}\n {!error && helperText && (\n <p id={`${props.id}-helper`} className={HELPER_BASE}>\n {helperText}\n </p>\n )}\n </Div>\n );\n },\n);\n\nInput.displayName = \"Input\";\n","import React from \"react\";\nimport { Div, Span } from \"@mohasinac/ui\";\nimport {\n cn,\n INPUT_BASE,\n INPUT_ERROR,\n LABEL_BASE,\n HELPER_BASE,\n ERROR_BASE,\n} from \"./utils\";\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n label?: string;\n error?: string;\n helperText?: string;\n showCharCount?: boolean;\n}\n\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n function Textarea(\n {\n label,\n error,\n helperText,\n showCharCount,\n className = \"\",\n required,\n maxLength,\n value,\n defaultValue,\n ...props\n },\n ref,\n ) {\n const charCount =\n typeof value === \"string\"\n ? value.length\n : typeof defaultValue === \"string\"\n ? defaultValue.length\n : 0;\n\n return (\n <Div className=\"w-full\">\n {label && (\n <label className={LABEL_BASE}>\n {label}\n {required && (\n <Span className=\"text-red-500 ml-1\" aria-hidden=\"true\">\n *\n </Span>\n )}\n </label>\n )}\n\n <textarea\n ref={ref}\n className={cn(\n INPUT_BASE,\n \"resize-y min-h-[80px]\",\n error ? INPUT_ERROR : \"\",\n className,\n )}\n aria-invalid={error ? \"true\" : undefined}\n maxLength={maxLength}\n value={value}\n defaultValue={defaultValue}\n {...props}\n />\n\n <Div className=\"flex items-center justify-between mt-1.5\">\n <Div className=\"flex-1\">\n {error && (\n <p className={ERROR_BASE} role=\"alert\">\n {error}\n </p>\n )}\n {!error && helperText && (\n <p className={HELPER_BASE}>{helperText}</p>\n )}\n </Div>\n {showCharCount && maxLength && (\n <p\n className={cn(\n \"text-xs tabular-nums ml-2 flex-shrink-0\",\n charCount >= maxLength\n ? \"text-red-500 dark:text-red-400\"\n : \"text-zinc-400 dark:text-zinc-500\",\n )}\n >\n {charCount} / {maxLength}\n </p>\n )}\n </Div>\n </Div>\n );\n },\n);\n\nTextarea.displayName = \"Textarea\";\n","import React from \"react\";\nimport { Div, Span } from \"@mohasinac/ui\";\nimport { cn, ERROR_BASE } from \"./utils\";\n\nexport interface CheckboxProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"type\"\n> {\n label?: string;\n suffix?: React.ReactNode;\n error?: string;\n indeterminate?: boolean;\n}\n\nexport function Checkbox({\n label,\n suffix,\n error,\n indeterminate,\n className = \"\",\n checked,\n ...props\n}: CheckboxProps) {\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = !!indeterminate;\n }\n }, [indeterminate]);\n\n return (\n <Div className=\"w-full\">\n <label className=\"flex flex-row items-center gap-3 cursor-pointer group\">\n <Div className=\"relative flex items-center justify-center flex-shrink-0\">\n <input\n ref={inputRef}\n type=\"checkbox\"\n checked={checked}\n className={cn(\n \"peer w-5 h-5 rounded-md border-2 cursor-pointer\",\n \"transition-all duration-200 appearance-none\",\n error\n ? \"border-red-400 dark:border-red-500\"\n : \"border-zinc-300 dark:border-slate-600\",\n \"checked:bg-primary-600 checked:border-primary-600\",\n \"dark:checked:bg-secondary-500 dark:checked:border-secondary-500\",\n \"hover:border-primary-400 dark:hover:border-secondary-400\",\n \"focus:outline-none focus:ring-2 focus:ring-primary-500/30 focus:ring-offset-1\",\n \"dark:focus:ring-secondary-400/30 dark:focus:ring-offset-slate-900\",\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\n className,\n )}\n {...props}\n />\n {/* Tick icon */}\n <svg\n className=\"absolute w-3 h-3 text-white pointer-events-none opacity-0 peer-checked:opacity-100 transition-opacity duration-150\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n {indeterminate ? (\n <line\n x1=\"2\"\n y1=\"6\"\n x2=\"10\"\n y2=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n ) : (\n <path\n d=\"M2 6L5 9L10 3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n )}\n </svg>\n </Div>\n\n {(label || suffix) && (\n <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\">\n {label}\n {suffix}\n </Span>\n )}\n </label>\n\n {error && (\n <p className={cn(ERROR_BASE, \"mt-1.5\")} role=\"alert\">\n {error}\n </p>\n )}\n </Div>\n );\n}\n","\"use client\";\n\nimport Image from \"next/image\";\nimport { useState } from \"react\";\nimport { Div, Span } from \"@mohasinac/ui\";\n\n// ─── Size presets ─────────────────────────────────────────────────────────────\n\nexport type MediaImageSize =\n | \"thumbnail\"\n | \"card\"\n | \"hero\"\n | \"banner\"\n | \"gallery\"\n | \"avatar\";\n\nconst SIZE_HINTS: Record<MediaImageSize, string> = {\n thumbnail: \"(max-width: 640px) 80px, (max-width: 1024px) 96px, 112px\",\n card: \"(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw\",\n hero: \"100vw\",\n banner: \"100vw\",\n gallery: \"(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 33vw\",\n avatar: \"(max-width: 640px) 48px, 56px\",\n};\n\nconst FALLBACK_ICONS: Record<MediaImageSize, string> = {\n thumbnail: \"📦\",\n card: \"📦\",\n hero: \"🖼️\",\n banner: \"🖼️\",\n gallery: \"📦\",\n avatar: \"👤\",\n};\n\n// ─── MediaImageProps ──────────────────────────────────────────────────────────\n\nexport interface MediaImageProps {\n /** Image URL. When undefined the fallback icon is rendered instead. */\n src: string | undefined;\n /** Descriptive alt text — required for accessibility and SEO. */\n alt: string;\n /**\n * Sizing preset — controls the `sizes` attribute passed to Next.js Image.\n * Defaults to `'card'`.\n */\n size?: MediaImageSize;\n /** Pass `true` for above-the-fold hero / banner images to skip lazy loading. */\n priority?: boolean;\n /** CSS object-fit applied to the underlying img element. Defaults to `'cover'`. */\n objectFit?: \"cover\" | \"contain\";\n /**\n * Emoji or text to show when `src` is undefined.\n * Falls back to the per-size default icon.\n */\n fallback?: string;\n /**\n * Extra Tailwind classes applied to the absolute-fill wrapper div.\n * Use for hover animations, e.g. `group-hover:scale-110 transition-transform duration-300`.\n */\n className?: string;\n}\n\nexport function MediaImage({\n src,\n alt,\n size = \"card\",\n priority = false,\n objectFit = \"cover\",\n fallback,\n className,\n}: MediaImageProps) {\n const [hasError, setHasError] = useState(false);\n const [isLoaded, setIsLoaded] = useState(false);\n const icon = fallback ?? FALLBACK_ICONS[size];\n const fitClass = objectFit === \"contain\" ? \"object-contain\" : \"object-cover\";\n\n if (!src || hasError) {\n return (\n <Div\n className={`absolute inset-0 flex items-center justify-center bg-zinc-100 dark:bg-slate-800 text-zinc-400 text-4xl${className ? ` ${className}` : \"\"}`}\n role=\"img\"\n aria-label={alt}\n >\n <Span aria-hidden=\"true\">{icon}</Span>\n </Div>\n );\n }\n\n const isSvg =\n src.toLowerCase().endsWith(\".svg\") ||\n src.includes(\"image/svg\") ||\n /[./]svg(\\?|$)/i.test(src);\n\n return (\n <Div\n className={`absolute inset-0 overflow-hidden${className ? ` ${className}` : \"\"}`}\n >\n {!isLoaded && (\n <Div\n className=\"absolute inset-0 bg-zinc-200 dark:bg-slate-700 animate-pulse\"\n aria-hidden=\"true\"\n />\n )}\n <Image\n src={src}\n alt={alt}\n fill\n priority={priority}\n className={fitClass}\n sizes={SIZE_HINTS[size]}\n onLoad={() => setIsLoaded(true)}\n onError={() => setHasError(true)}\n unoptimized={isSvg}\n />\n </Div>\n );\n}\n\nexport default MediaImage;\n","\"use client\";\n\nimport { useRef, useEffect } from \"react\";\nimport { Div, Span } from \"@mohasinac/ui\";\n\nexport interface MediaVideoProps {\n /** Video URL. When undefined the fallback placeholder is rendered. */\n src: string | undefined;\n /** Poster / thumbnail URL shown before the video plays. */\n thumbnailUrl?: string;\n /** Accessible label for the video element. */\n alt?: string;\n /** Show native video controls (play, pause, volume, …). Defaults to `true`. */\n controls?: boolean;\n /** Autoplay with muted audio — allowed by browsers without user gesture. Defaults to `false`. */\n autoPlayMuted?: boolean;\n /** Whether the video should loop. Defaults to `false`. */\n loop?: boolean;\n /** Trim: seek to this time (in seconds) when the video loads. */\n trimStart?: number;\n /** Trim: pause the video when this time (in seconds) is reached. */\n trimEnd?: number;\n /** CSS `object-fit` applied to the <video> element. Defaults to `'cover'`. */\n objectFit?: \"cover\" | \"contain\";\n}\n\nexport function MediaVideo({\n src,\n thumbnailUrl,\n alt = \"Video\",\n controls = true,\n autoPlayMuted = false,\n loop = false,\n trimStart,\n trimEnd,\n objectFit = \"cover\",\n}: MediaVideoProps) {\n const videoRef = useRef<HTMLVideoElement>(null);\n const fitClass = objectFit === \"contain\" ? \"object-contain\" : \"object-cover\";\n\n // Apply trimStart on load\n useEffect(() => {\n const el = videoRef.current;\n if (!el || trimStart === undefined) return;\n const onLoaded = () => {\n el.currentTime = trimStart;\n };\n el.addEventListener(\"loadedmetadata\", onLoaded);\n return () => el.removeEventListener(\"loadedmetadata\", onLoaded);\n }, [trimStart]);\n\n // Enforce trimEnd\n useEffect(() => {\n const el = videoRef.current;\n if (!el || trimEnd === undefined) return;\n const onTimeUpdate = () => {\n if (el.currentTime >= trimEnd) {\n el.pause();\n el.currentTime = trimStart ?? 0;\n }\n };\n el.addEventListener(\"timeupdate\", onTimeUpdate);\n return () => el.removeEventListener(\"timeupdate\", onTimeUpdate);\n }, [trimEnd, trimStart]);\n\n if (!src) {\n return (\n <Div\n className=\"absolute inset-0 flex items-center justify-center bg-zinc-100 dark:bg-slate-800 text-zinc-400 text-4xl\"\n role=\"img\"\n aria-label={alt}\n >\n <Span aria-hidden=\"true\">🎬</Span>\n </Div>\n );\n }\n\n return (\n <video\n ref={videoRef}\n src={src}\n poster={thumbnailUrl}\n controls={controls}\n autoPlay={autoPlayMuted}\n muted={autoPlayMuted}\n loop={loop}\n playsInline\n aria-label={alt}\n className={`absolute inset-0 w-full h-full ${fitClass}`}\n />\n );\n}\n\nexport default MediaVideo;\n","\"use client\";\r\n\r\n/**\r\n * MediaSlider — lightweight range-input wrapper used internally by media editing modals.\r\n * No external dependencies beyond React and Tailwind.\r\n */\r\n\r\nimport React from \"react\";\r\n\r\nexport interface MediaSliderProps {\r\n value?: number;\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n onChange?: (value: number) => void;\r\n onChangeEnd?: (value: number) => void;\r\n className?: string;\r\n}\r\n\r\nexport function MediaSlider({\r\n value,\r\n min = 0,\r\n max = 100,\r\n step = 1,\r\n onChange,\r\n onChangeEnd,\r\n className = \"\",\r\n}: MediaSliderProps) {\r\n return (\r\n <input\r\n type=\"range\"\r\n min={min}\r\n max={max}\r\n step={step}\r\n value={value}\r\n onChange={(e) => onChange?.(parseFloat(e.target.value))}\r\n onMouseUp={(e) =>\r\n onChangeEnd?.(parseFloat((e.target as HTMLInputElement).value))\r\n }\r\n onTouchEnd={(e) =>\r\n onChangeEnd?.(parseFloat((e.target as HTMLInputElement).value))\r\n }\r\n className={[\r\n \"w-full h-2 appearance-none cursor-pointer rounded-full\",\r\n \"bg-zinc-200 dark:bg-slate-700\",\r\n \"accent-primary-600 dark:accent-secondary-400\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n />\r\n );\r\n}\r\n","\"use client\";\r\n\r\n/**\r\n * useMedia — upload/crop/trim hooks for @mohasinac/feat-media.\r\n *\r\n * Wraps @mohasinac/http apiClient via TanStack Query mutations.\r\n * Endpoint paths can be overridden per call for non-standard deployments.\r\n */\r\n\r\nimport { useMutation } from \"@tanstack/react-query\";\r\nimport { apiClient } from \"@mohasinac/http\";\r\n\r\n// ─── Types ────────────────────────────────────────────────────────────────────\r\n\r\nexport interface MediaUploadResult {\r\n url: string;\r\n path?: string;\r\n filename?: string;\r\n size?: number;\r\n type?: string;\r\n}\r\n\r\nexport interface MediaCropInput {\r\n sourceUrl: string;\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n outputFolder?: string;\r\n outputFormat?: \"jpeg\" | \"png\" | \"webp\";\r\n quality?: number;\r\n}\r\n\r\nexport interface MediaTrimInput {\r\n sourceUrl: string;\r\n startTime: number;\r\n endTime: number;\r\n outputFolder?: string;\r\n outputFormat?: \"mp4\" | \"webm\";\r\n quality?: \"low\" | \"medium\" | \"high\";\r\n}\r\n\r\n// ─── Hooks ────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * useMediaUpload — uploads a file via FormData to /api/media/upload.\r\n *\r\n * @example\r\n * const { upload, isPending } = useMediaUpload();\r\n * const url = await upload(file, \"products\", true);\r\n */\r\nexport function useMediaUpload(endpoint = \"/api/media/upload\") {\r\n const mutation = useMutation<MediaUploadResult, Error, FormData>({\r\n mutationFn: (formData) =>\r\n apiClient.upload<MediaUploadResult>(endpoint, formData),\r\n });\r\n\r\n const upload = async (\r\n file: File,\r\n folder = \"uploads\",\r\n isPublic = true,\r\n context?: Record<string, string>,\r\n ): Promise<string> => {\r\n const formData = new FormData();\r\n formData.append(\"file\", file);\r\n formData.append(\"folder\", folder);\r\n formData.append(\"public\", isPublic.toString());\r\n if (context) {\r\n formData.append(\"context\", JSON.stringify(context));\r\n }\r\n const data = await mutation.mutateAsync(formData);\r\n return data.url;\r\n };\r\n\r\n return { ...mutation, upload };\r\n}\r\n\r\n/**\r\n * useMediaCrop — sends pixel-crop params to /api/media/crop.\r\n */\r\nexport function useMediaCrop(endpoint = \"/api/media/crop\") {\r\n return useMutation<{ url: string }, Error, MediaCropInput>({\r\n mutationFn: (data) => apiClient.post<{ url: string }>(endpoint, data),\r\n });\r\n}\r\n\r\n/**\r\n * useMediaTrim — sends trim params to /api/media/trim.\r\n */\r\nexport function useMediaTrim(endpoint = \"/api/media/trim\") {\r\n return useMutation<{ url: string }, Error, MediaTrimInput>({\r\n mutationFn: (data) => apiClient.post<{ url: string }>(endpoint, data),\r\n });\r\n}\r\n\r\n/**\r\n * useMediaCleanup — deletes uploaded objects by URL (for aborted forms).\r\n */\r\nexport function useMediaCleanup(endpoint = \"/api/media\") {\r\n const mutation = useMutation<void, Error, string[]>({\r\n mutationFn: async (urls) => {\r\n await Promise.all(\r\n urls.map(async (url) => {\r\n const encoded = encodeURIComponent(url);\r\n await apiClient.delete(`${endpoint}?url=${encoded}`);\r\n }),\r\n );\r\n },\r\n });\r\n\r\n const cleanup = async (urls: string[]) => {\r\n const unique = Array.from(new Set(urls.filter(Boolean)));\r\n if (unique.length === 0) return;\r\n await mutation.mutateAsync(unique);\r\n };\r\n\r\n return { ...mutation, cleanup };\r\n}\r\n","\"use client\";\r\n\r\n/**\r\n * VideoTrimModal — set-in/out trim for @mohasinac/feat-media.\r\n *\r\n * Calls POST /api/media/trim via useMediaTrim. Returns trimmed URL on save.\r\n */\r\n\r\nimport { useState, useRef, useEffect } from \"react\";\r\nimport { useTranslations } from \"next-intl\";\r\nimport { Alert, Button, Div, Modal, Span, Text } from \"@mohasinac/ui\";\r\nimport { MediaSlider } from \"../components/MediaSlider\";\r\nimport { useMediaTrim } from \"../hooks/useMedia\";\r\n\r\nexport interface VideoTrimModalProps {\r\n isOpen: boolean;\r\n /** Already-uploaded video URL on an approved CDN/Storage domain. */\r\n videoUrl: string;\r\n onClose: () => void;\r\n /** Called with the trimmed video URL after the server operation succeeds. */\r\n onSave: (trimmedUrl: string) => void;\r\n /** Override POST endpoint. Defaults to /api/media/trim. */\r\n endpoint?: string;\r\n}\r\n\r\nfunction formatTime(seconds: number): string {\r\n const m = Math.floor(seconds / 60);\r\n const s = Math.floor(seconds % 60);\r\n return `${m}:${s.toString().padStart(2, \"0\")}`;\r\n}\r\n\r\nexport function VideoTrimModal({\r\n isOpen,\r\n videoUrl,\r\n onClose,\r\n onSave,\r\n endpoint,\r\n}: VideoTrimModalProps) {\r\n const t = useTranslations(\"mediaEditor\");\r\n const [duration, setDuration] = useState(0);\r\n const [startTime, setStartTime] = useState(0);\r\n const [endTime, setEndTime] = useState(0);\r\n const [quality, setQuality] = useState<\"low\" | \"medium\" | \"high\">(\"medium\");\r\n const [error, setError] = useState<string | null>(null);\r\n const videoRef = useRef<HTMLVideoElement>(null);\r\n\r\n const { mutateAsync: trim, isPending } = useMediaTrim(endpoint);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setStartTime(0);\r\n setEndTime(0);\r\n setDuration(0);\r\n setError(null);\r\n }\r\n }, [isOpen, videoUrl]);\r\n\r\n const handleLoadedMetadata = () => {\r\n const video = videoRef.current;\r\n if (!video) return;\r\n setDuration(video.duration);\r\n setEndTime(video.duration);\r\n };\r\n\r\n const seekTo = (time: number) => {\r\n if (videoRef.current) videoRef.current.currentTime = time;\r\n };\r\n\r\n const handleStartChange = (val: number) => {\r\n const clamped = Math.min(val, endTime - 0.1);\r\n setStartTime(clamped);\r\n seekTo(clamped);\r\n };\r\n\r\n const handleEndChange = (val: number) => {\r\n const clamped = Math.max(val, startTime + 0.1);\r\n setEndTime(clamped);\r\n seekTo(clamped);\r\n };\r\n\r\n const handleTrim = async () => {\r\n setError(null);\r\n try {\r\n const result = await trim({ sourceUrl: videoUrl, startTime, endTime, quality });\r\n onSave(result.url);\r\n onClose();\r\n } catch (err) {\r\n setError(err instanceof Error ? err.message : t(\"trimError\"));\r\n }\r\n };\r\n\r\n const qualityLabels: Record<\"low\" | \"medium\" | \"high\", string> = {\r\n low: t(\"trimQualityLow\"),\r\n medium: t(\"trimQualityMedium\"),\r\n high: t(\"trimQualityHigh\"),\r\n };\r\n\r\n return (\r\n <Modal isOpen={isOpen} onClose={onClose} title={t(\"trimTitle\")} size=\"lg\">\r\n <Div className=\"space-y-4\">\r\n <Text variant=\"secondary\" className=\"text-xs\">\r\n {t(\"trimInstruction\")}\r\n </Text>\r\n\r\n {/* Video player — raw <video> required: needs ref for duration/currentTime */}\r\n <Div className=\"relative aspect-video overflow-hidden rounded-lg bg-black\">\r\n <video\r\n ref={videoRef}\r\n src={videoUrl}\r\n className=\"absolute inset-0 w-full h-full object-contain\"\r\n controls\r\n onLoadedMetadata={handleLoadedMetadata}\r\n />\r\n </Div>\r\n\r\n {duration > 0 && (\r\n <>\r\n <Div className=\"space-y-1\">\r\n <Div className=\"flex items-center justify-between\">\r\n <Text size=\"sm\">{t(\"trimStart\")}</Text>\r\n <Span className=\"text-sm font-mono tabular-nums\">\r\n {formatTime(startTime)}\r\n </Span>\r\n </Div>\r\n <MediaSlider\r\n value={startTime}\r\n min={0}\r\n max={duration}\r\n step={0.1}\r\n onChange={handleStartChange}\r\n />\r\n </Div>\r\n\r\n <Div className=\"space-y-1\">\r\n <Div className=\"flex items-center justify-between\">\r\n <Text size=\"sm\">{t(\"trimEnd\")}</Text>\r\n <Span className=\"text-sm font-mono tabular-nums\">\r\n {formatTime(endTime)}\r\n </Span>\r\n </Div>\r\n <MediaSlider\r\n value={endTime}\r\n min={0}\r\n max={duration}\r\n step={0.1}\r\n onChange={handleEndChange}\r\n />\r\n </Div>\r\n\r\n <Text size=\"xs\" variant=\"secondary\">\r\n {t(\"trimDuration\", { duration: (endTime - startTime).toFixed(1) })}\r\n </Text>\r\n\r\n <Div className=\"space-y-1\">\r\n <Text size=\"sm\">{t(\"trimQuality\")}</Text>\r\n <Div className=\"flex gap-2\">\r\n {([\"low\", \"medium\", \"high\"] as const).map((q) => (\r\n <Button\r\n key={q}\r\n type=\"button\"\r\n variant={quality === q ? \"primary\" : \"outline\"}\r\n size=\"sm\"\r\n onClick={() => setQuality(q)}\r\n disabled={isPending}\r\n >\r\n {qualityLabels[q]}\r\n </Button>\r\n ))}\r\n </Div>\r\n </Div>\r\n </>\r\n )}\r\n\r\n {error && <Alert variant=\"error\">{error}</Alert>}\r\n\r\n <Div className=\"flex items-center justify-end gap-2\">\r\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onClose} disabled={isPending}>\r\n {t(\"trimSkip\")}\r\n </Button>\r\n <Button\r\n type=\"button\"\r\n variant=\"primary\"\r\n size=\"sm\"\r\n onClick={handleTrim}\r\n disabled={isPending || duration === 0}\r\n >\r\n {isPending ? t(\"trimming\") : t(\"trimSave\")}\r\n </Button>\r\n </Div>\r\n </Div>\r\n </Modal>\r\n );\r\n}\r\n","\"use client\";\r\n\r\n/**\r\n * VideoThumbnailSelector — frame-capture thumbnail picker for @mohasinac/feat-media.\r\n *\r\n * User scrubs to desired frame, clicks \"Use This Frame\". That frame is drawn to\r\n * a hidden canvas, converted to JPEG, and uploaded via onUpload.\r\n */\r\n\r\nimport { useState, useRef } from \"react\";\r\nimport { useTranslations } from \"next-intl\";\r\nimport { Alert, Button, Div, Modal, Span, Spinner, Text } from \"@mohasinac/ui\";\r\n\r\nexport interface VideoThumbnailSelectorProps {\r\n isOpen: boolean;\r\n videoUrl: string;\r\n onClose: () => void;\r\n /** Called with the uploaded thumbnail URL after capture succeeds. */\r\n onSelect: (thumbnailUrl: string) => void;\r\n /** Upload callback — receive File, return uploaded URL. Pass useMediaUpload().upload. */\r\n onUpload: (file: File) => Promise<string>;\r\n}\r\n\r\nexport function VideoThumbnailSelector({\r\n isOpen,\r\n videoUrl,\r\n onClose,\r\n onSelect,\r\n onUpload,\r\n}: VideoThumbnailSelectorProps) {\r\n const t = useTranslations(\"mediaEditor\");\r\n const [isCapturing, setIsCapturing] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const videoRef = useRef<HTMLVideoElement>(null);\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n\r\n const handleCapture = async () => {\r\n const video = videoRef.current;\r\n const canvas = canvasRef.current;\r\n if (!video || !canvas) return;\r\n\r\n setError(null);\r\n setIsCapturing(true);\r\n\r\n try {\r\n video.pause();\r\n\r\n canvas.width = video.videoWidth || 1280;\r\n canvas.height = video.videoHeight || 720;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) throw new Error(\"Canvas context unavailable\");\r\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n\r\n const blob = await new Promise<Blob | null>((resolve) =>\r\n canvas.toBlob(resolve, \"image/jpeg\", 0.9),\r\n );\r\n if (!blob) throw new Error(t(\"thumbnailError\"));\r\n\r\n const file = new File([blob], `thumbnail-${Date.now()}.jpg`, { type: \"image/jpeg\" });\r\n const url = await onUpload(file);\r\n onSelect(url);\r\n onClose();\r\n } catch (err) {\r\n setError(err instanceof Error ? err.message : t(\"thumbnailError\"));\r\n } finally {\r\n setIsCapturing(false);\r\n }\r\n };\r\n\r\n return (\r\n <Modal isOpen={isOpen} onClose={onClose} title={t(\"thumbnailTitle\")} size=\"lg\">\r\n <Div className=\"space-y-4\">\r\n <Text variant=\"secondary\" className=\"text-xs\">\r\n {t(\"thumbnailInstruction\")}\r\n </Text>\r\n\r\n {/* Video player — raw <video> required: needs ref for videoWidth/videoHeight */}\r\n <Div className=\"relative aspect-video overflow-hidden rounded-lg bg-black\">\r\n <video\r\n ref={videoRef}\r\n src={videoUrl}\r\n className=\"absolute inset-0 w-full h-full object-contain\"\r\n controls\r\n preload=\"metadata\"\r\n />\r\n </Div>\r\n\r\n {/* Hidden canvas for frame capture */}\r\n <canvas ref={canvasRef} className=\"hidden\" aria-hidden=\"true\" />\r\n\r\n {error && <Alert variant=\"error\">{error}</Alert>}\r\n\r\n <Div className=\"flex items-center justify-end gap-2\">\r\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onClose} disabled={isCapturing}>\r\n {t(\"thumbnailSkip\")}\r\n </Button>\r\n <Button\r\n type=\"button\"\r\n variant=\"primary\"\r\n size=\"sm\"\r\n onClick={handleCapture}\r\n disabled={isCapturing}\r\n >\r\n {isCapturing ? (\r\n <Span className=\"flex items-center gap-2\">\r\n <Spinner size=\"sm\" />\r\n {t(\"thumbnailCapturing\")}\r\n </Span>\r\n ) : (\r\n t(\"thumbnailCapture\")\r\n )}\r\n </Button>\r\n </Div>\r\n </Div>\r\n </Modal>\r\n );\r\n}\r\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport interface UseCameraOptions {\n facingMode?: \"user\" | \"environment\";\n video?: boolean | MediaTrackConstraints;\n audio?: boolean;\n}\n\nexport interface UseCameraReturn {\n isSupported: boolean;\n isActive: boolean;\n isCapturing: boolean;\n stream: MediaStream | null;\n error: string | null;\n videoRef: React.RefObject<HTMLVideoElement | null>;\n startCamera: (options?: UseCameraOptions) => Promise<void>;\n stopCamera: () => void;\n takePhoto: () => Blob | null;\n startRecording: () => void;\n stopRecording: () => Promise<Blob>;\n switchCamera: () => Promise<void>;\n}\n\n/**\n * useCamera\n *\n * Provides access to the device camera via the MediaDevices API.\n * Zero domain imports. Safe to use in any Tier 1 / Tier 2 component.\n *\n * Lifecycle:\n * - Call `startCamera()` to open the stream and wire `videoRef` to a <video> element.\n * - `stopCamera()` releases hardware tracks (turns off the camera indicator light).\n * - `takePhoto()` captures the current frame as image/webp.\n * - `startRecording()` / `stopRecording()` use MediaRecorder (video/webm output).\n * - `useEffect` cleanup calls `stopCamera()` automatically on unmount.\n */\nexport function useCamera(): UseCameraReturn {\n const isSupported =\n typeof navigator !== \"undefined\" &&\n typeof navigator.mediaDevices !== \"undefined\" &&\n typeof navigator.mediaDevices.getUserMedia === \"function\";\n\n const videoRef = useRef<HTMLVideoElement>(null);\n const streamRef = useRef<MediaStream | null>(null);\n const mediaRecorderRef = useRef<MediaRecorder | null>(null);\n const chunksRef = useRef<Blob[]>([]);\n const currentFacingModeRef = useRef<\"user\" | \"environment\">(\"environment\");\n const stopRecordingResolveRef = useRef<((blob: Blob) => void) | null>(null);\n\n const [stream, setStream] = useState<MediaStream | null>(null);\n const [isActive, setIsActive] = useState(false);\n const [isCapturing, setIsCapturing] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const stopCamera = useCallback(() => {\n if (streamRef.current) {\n streamRef.current.getTracks().forEach((t) => t.stop());\n streamRef.current = null;\n }\n if (videoRef.current) {\n videoRef.current.srcObject = null;\n }\n setStream(null);\n setIsActive(false);\n setIsCapturing(false);\n }, []);\n\n useEffect(() => {\n return () => {\n stopCamera();\n };\n }, [stopCamera]);\n\n const startCamera = useCallback(\n async (options?: UseCameraOptions) => {\n if (!isSupported) {\n setError(\"Camera is not supported on this device\");\n return;\n }\n setError(null);\n stopCamera();\n\n const facingMode = options?.facingMode ?? \"environment\";\n currentFacingModeRef.current = facingMode;\n\n const videoConstraints: boolean | MediaTrackConstraints =\n options?.video !== undefined ? options.video : { facingMode };\n\n try {\n const mediaStream = await navigator.mediaDevices.getUserMedia({\n video: videoConstraints,\n audio: options?.audio ?? false,\n });\n streamRef.current = mediaStream;\n setStream(mediaStream);\n setIsActive(true);\n if (videoRef.current) {\n videoRef.current.srcObject = mediaStream;\n }\n } catch (err) {\n const message =\n err instanceof DOMException && err.name === \"NotAllowedError\"\n ? \"Camera permission denied. Please allow access in your browser settings.\"\n : \"Camera unavailable\";\n setError(message);\n }\n },\n [isSupported, stopCamera],\n );\n\n const takePhoto = useCallback((): Blob | null => {\n const video = videoRef.current;\n if (!video || !isActive) return null;\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return null;\n ctx.drawImage(video, 0, 0);\n\n let result: Blob | null = null;\n canvas.toBlob(\n (blob) => {\n result = blob;\n },\n \"image/webp\",\n 0.92,\n );\n return result;\n }, [isActive]);\n\n const startRecording = useCallback(() => {\n if (!streamRef.current || !isActive) return;\n chunksRef.current = [];\n const recorder = new MediaRecorder(streamRef.current, {\n mimeType: \"video/webm\",\n });\n recorder.ondataavailable = (e) => {\n if (e.data.size > 0) chunksRef.current.push(e.data);\n };\n recorder.onstop = () => {\n const blob = new Blob(chunksRef.current, { type: \"video/webm\" });\n setIsCapturing(false);\n if (stopRecordingResolveRef.current) {\n stopRecordingResolveRef.current(blob);\n stopRecordingResolveRef.current = null;\n }\n };\n mediaRecorderRef.current = recorder;\n recorder.start();\n setIsCapturing(true);\n }, [isActive]);\n\n const stopRecording = useCallback((): Promise<Blob> => {\n return new Promise((resolve) => {\n stopRecordingResolveRef.current = resolve;\n if (\n mediaRecorderRef.current &&\n mediaRecorderRef.current.state !== \"inactive\"\n ) {\n mediaRecorderRef.current.stop();\n } else {\n resolve(new Blob([], { type: \"video/webm\" }));\n }\n });\n }, []);\n\n const switchCamera = useCallback(async () => {\n const next =\n currentFacingModeRef.current === \"environment\" ? \"user\" : \"environment\";\n await startCamera({ facingMode: next });\n }, [startCamera]);\n\n return {\n isSupported,\n isActive,\n isCapturing,\n stream,\n error,\n videoRef,\n startCamera,\n stopCamera,\n takePhoto,\n startRecording,\n stopRecording,\n switchCamera,\n };\n}\n","/**\n * Logger Class — @mohasinac/core\n *\n * Singleton class for application logging.\n * Pure utility — no framework or app-specific imports.\n *\n * The `logFileUrl` constructor option replaces the previous app-specific\n * `import(\"@/constants\")` call, making this usable in any context.\n */\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nexport interface LogEntry {\n level: LogLevel;\n message: string;\n timestamp: Date;\n data?: unknown;\n}\n\nexport interface LoggerOptions {\n minLevel?: LogLevel;\n enableConsole?: boolean;\n enableStorage?: boolean;\n /**\n * URL to POST error log entries. Set to your `/api/logs/write` route.\n */\n logFileUrl?: string;\n /**\n * @deprecated Prefer `logFileUrl`. When `true` and `logFileUrl` is not set,\n * defaults to `/api/logs/write` for backward compatibility with the\n * previous app-coupled Logger implementation.\n */\n enableFileLogging?: boolean;\n maxEntries?: number;\n /** Optional function to sanitize data before logging (e.g., PII redaction). */\n sanitizer?: (data: unknown) => unknown;\n}\n\nexport class Logger {\n private static instance: Logger;\n private logs: LogEntry[] = [];\n private options: Required<\n Omit<LoggerOptions, \"logFileUrl\" | \"enableFileLogging\" | \"sanitizer\">\n > & {\n logFileUrl?: string;\n sanitizer?: (data: unknown) => unknown;\n };\n private levelPriority: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n };\n\n private constructor(options?: LoggerOptions) {\n // `enableFileLogging: true` is a backward-compat alias for logFileUrl.\n const fileUrl =\n options?.logFileUrl ??\n (options?.enableFileLogging ? \"/api/logs/write\" : undefined);\n this.options = {\n minLevel: options?.minLevel ?? \"debug\",\n enableConsole: options?.enableConsole ?? true,\n enableStorage: options?.enableStorage ?? false,\n logFileUrl: fileUrl,\n maxEntries: options?.maxEntries ?? 1000,\n sanitizer: options?.sanitizer,\n };\n }\n\n /** Get singleton instance */\n public static getInstance(options?: LoggerOptions): Logger {\n if (!Logger.instance) {\n Logger.instance = new Logger(options);\n }\n return Logger.instance;\n }\n\n /** Set or update the data sanitizer (e.g., for PII redaction). */\n public static setSanitizer(fn: (data: unknown) => unknown): void {\n Logger.getInstance().options.sanitizer = fn;\n }\n\n private shouldLog(level: LogLevel): boolean {\n return (\n this.levelPriority[level] >= this.levelPriority[this.options.minLevel]\n );\n }\n\n private addLog(level: LogLevel, message: string, data?: unknown): void {\n if (!this.shouldLog(level)) return;\n\n const sanitized =\n data && this.options.sanitizer ? this.options.sanitizer(data) : data;\n const entry: LogEntry = {\n level,\n message,\n timestamp: new Date(),\n data: sanitized,\n };\n\n this.logs.push(entry);\n if (this.logs.length > this.options.maxEntries) {\n this.logs.shift();\n }\n\n if (this.options.enableConsole) {\n this.logToConsole(entry);\n }\n\n if (this.options.enableStorage && typeof window !== \"undefined\") {\n this.saveToStorage();\n }\n\n if (this.options.logFileUrl && level === \"error\") {\n this.writeToFile(entry).catch(() => {\n // Silently fail to prevent recursive logging\n });\n }\n }\n\n private logToConsole(entry: LogEntry): void {\n const prefix = `[${entry.level.toUpperCase()}] ${entry.timestamp.toISOString()}`;\n const message = `${prefix} ${entry.message}`;\n switch (entry.level) {\n case \"debug\":\n console.debug(message, entry.data);\n break;\n case \"info\":\n console.info(message, entry.data);\n break;\n case \"warn\":\n console.warn(message, entry.data);\n break;\n case \"error\":\n console.error(message, entry.data);\n break;\n }\n }\n\n private saveToStorage(): void {\n try {\n localStorage.setItem(\"app_logs\", JSON.stringify(this.logs));\n } catch {\n // Silently fail\n }\n }\n\n private async writeToFile(entry: LogEntry): Promise<void> {\n if (typeof window === \"undefined\" || !this.options.logFileUrl) return;\n try {\n await fetch(this.options.logFileUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n level: entry.level,\n message: entry.message,\n timestamp: entry.timestamp.toISOString(),\n data: entry.data,\n }),\n });\n } catch {\n // Silently fail\n }\n }\n\n public debug(message: string, data?: unknown): void {\n this.addLog(\"debug\", message, data);\n }\n\n public info(message: string, data?: unknown): void {\n this.addLog(\"info\", message, data);\n }\n\n public warn(message: string, data?: unknown): void {\n this.addLog(\"warn\", message, data);\n }\n\n public error(message: string, data?: unknown): void {\n this.addLog(\"error\", message, data);\n }\n\n public getLogs(level?: LogLevel): LogEntry[] {\n if (level) return this.logs.filter((log) => log.level === level);\n return [...this.logs];\n }\n\n public clear(): void {\n this.logs = [];\n if (this.options.enableStorage && typeof window !== \"undefined\") {\n localStorage.removeItem(\"app_logs\");\n }\n }\n\n public export(): string {\n return JSON.stringify(this.logs, null, 2);\n }\n\n public getStats(): Record<LogLevel, number> {\n return {\n debug: this.logs.filter((l) => l.level === \"debug\").length,\n info: this.logs.filter((l) => l.level === \"info\").length,\n warn: this.logs.filter((l) => l.level === \"warn\").length,\n error: this.logs.filter((l) => l.level === \"error\").length,\n };\n }\n}\n\n/** Shared singleton instance */\nexport const logger = Logger.getInstance();\n","/**\n * Queue Class — @mohasinac/core\n *\n * Generic priority queue for task management.\n * Pure utility — no framework or app-specific imports.\n */\n\nimport { Logger } from \"./Logger\";\n\nconst qLogger = Logger.getInstance();\n\nexport interface QueueOptions {\n concurrency?: number;\n autoStart?: boolean;\n}\n\nexport interface Task<T = unknown> {\n id: string;\n fn: () => Promise<T>;\n priority?: number;\n}\n\nexport class Queue<T = unknown> {\n private tasks: Task<T>[] = [];\n private running: number = 0;\n private readonly concurrency: number;\n private autoStart: boolean;\n private results: Map<string, T> = new Map();\n private errors: Map<string, Error> = new Map();\n\n constructor(options?: QueueOptions) {\n this.concurrency = options?.concurrency ?? 1;\n this.autoStart = options?.autoStart ?? true;\n }\n\n /** Add a task to the queue */\n public add(id: string, fn: () => Promise<T>, priority: number = 0): void {\n this.tasks.push({ id, fn, priority });\n this.tasks.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n if (this.autoStart) {\n this.process();\n }\n }\n\n private process(): void {\n while (this.running < this.concurrency && this.tasks.length > 0) {\n const task = this.tasks.shift();\n if (!task) break;\n this.running++;\n task\n .fn()\n .then((result) => {\n this.results.set(task.id, result);\n })\n .catch((error: unknown) => {\n this.errors.set(task.id, error as Error);\n })\n .finally(() => {\n this.running--;\n this.process();\n })\n .catch((err: unknown) => {\n qLogger.error(\"Queue.process error in finally\", { err });\n });\n }\n }\n\n public start(): void {\n this.process();\n }\n\n public pause(): void {\n this.autoStart = false;\n }\n\n public resume(): void {\n this.autoStart = true;\n this.process();\n }\n\n public clear(): void {\n this.tasks = [];\n this.results.clear();\n this.errors.clear();\n }\n\n public getResult(id: string): T | undefined {\n return this.results.get(id);\n }\n\n public getError(id: string): Error | undefined {\n return this.errors.get(id);\n }\n\n public size(): number {\n return this.tasks.length;\n }\n\n public getRunning(): number {\n return this.running;\n }\n\n public isEmpty(): boolean {\n return this.tasks.length === 0 && this.running === 0;\n }\n\n public async waitForCompletion(): Promise<void> {\n while (!this.isEmpty()) {\n await new Promise<void>((resolve) => setTimeout(resolve, 100));\n }\n }\n\n public getStats(): {\n pending: number;\n running: number;\n completed: number;\n failed: number;\n } {\n return {\n pending: this.tasks.length,\n running: this.running,\n completed: this.results.size,\n failed: this.errors.size,\n };\n }\n}\n","/**\n * StorageManager Class — @mohasinac/core\n *\n * Singleton class for managing localStorage and sessionStorage with\n * namespace prefixing and SSR-safe fallbacks.\n * Pure utility — no framework or app-specific imports.\n */\n\nimport { Logger } from \"./Logger\";\n\nconst sLogger = Logger.getInstance();\n\nexport type StorageType = \"local\" | \"session\";\n\nexport interface StorageOptions {\n type?: StorageType;\n prefix?: string;\n}\n\nexport class StorageManager {\n /** Per-prefix instance map — prevents namespace collisions */\n private static instances = new Map<string, StorageManager>();\n private readonly prefix: string;\n\n private constructor(prefix: string = \"app_\") {\n this.prefix = prefix;\n }\n\n /**\n * Get-or-create a StorageManager for the given prefix.\n * Each prefix returns an independent instance.\n */\n public static getInstance(prefix: string = \"\"): StorageManager {\n if (!StorageManager.instances.has(prefix)) {\n StorageManager.instances.set(prefix, new StorageManager(prefix));\n }\n return StorageManager.instances.get(prefix)!;\n }\n\n private getStorage(type: StorageType): Storage | null {\n try {\n if (typeof window === \"undefined\") return null;\n const storage =\n type === \"local\" ? window.localStorage : window.sessionStorage;\n return storage ?? null;\n } catch {\n return null;\n }\n }\n\n private generateKey(key: string): string {\n return `${this.prefix}${key}`;\n }\n\n public set<T>(key: string, value: T, options?: StorageOptions): boolean {\n const storage = this.getStorage(options?.type ?? \"local\");\n if (!storage) return false;\n try {\n storage.setItem(this.generateKey(key), JSON.stringify(value));\n return true;\n } catch (error) {\n sLogger.error(\"StorageManager.set error\", { error });\n return false;\n }\n }\n\n public get<T>(key: string, options?: StorageOptions): T | null {\n const storage = this.getStorage(options?.type ?? \"local\");\n if (!storage) return null;\n try {\n const item = storage.getItem(this.generateKey(key));\n if (item === null) return null;\n return JSON.parse(item) as T;\n } catch (error) {\n sLogger.error(\"StorageManager.get error\", { error });\n return null;\n }\n }\n\n public remove(key: string, options?: StorageOptions): boolean {\n const storage = this.getStorage(options?.type ?? \"local\");\n if (!storage) return false;\n try {\n storage.removeItem(this.generateKey(key));\n return true;\n } catch (error) {\n sLogger.error(\"StorageManager.remove error\", { error });\n return false;\n }\n }\n\n public clear(options?: StorageOptions): boolean {\n const storage = this.getStorage(options?.type ?? \"local\");\n if (!storage) return false;\n try {\n const keys = Object.keys(storage);\n keys.forEach((k) => {\n if (k.startsWith(this.prefix)) storage.removeItem(k);\n });\n return true;\n } catch (error) {\n sLogger.error(\"StorageManager.clear error\", { error });\n return false;\n }\n }\n\n public has(key: string, options?: StorageOptions): boolean {\n return this.get(key, options) !== null;\n }\n\n public keys(options?: StorageOptions): string[] {\n const storage = this.getStorage(options?.type ?? \"local\");\n if (!storage) return [];\n const result: string[] = [];\n for (let i = 0; i < storage.length; i++) {\n const k = storage.key(i);\n if (k?.startsWith(this.prefix)) {\n result.push(k.slice(this.prefix.length));\n }\n }\n return result;\n }\n\n public size(options?: StorageOptions): number {\n const storage = this.getStorage(options?.type ?? \"local\");\n if (!storage) return 0;\n let bytes = 0;\n for (let i = 0; i < storage.length; i++) {\n const k = storage.key(i);\n if (k?.startsWith(this.prefix)) {\n const v = storage.getItem(k);\n bytes += k.length + (v?.length ?? 0);\n }\n }\n return bytes;\n }\n\n public isAvailable(type: StorageType = \"local\"): boolean {\n const storage = this.getStorage(type);\n if (!storage) return false;\n try {\n const testKey = \"__storage_test__\";\n storage.setItem(testKey, \"1\");\n storage.removeItem(testKey);\n return true;\n } catch {\n return false;\n }\n }\n\n public getAll<T = unknown>(options?: StorageOptions): Record<string, T> {\n const storage = this.getStorage(options?.type ?? \"local\");\n if (!storage) return {};\n const result: Record<string, T> = {};\n for (let i = 0; i < storage.length; i++) {\n const k = storage.key(i);\n if (k?.startsWith(this.prefix)) {\n const v = this.get<T>(k.slice(this.prefix.length), options);\n if (v !== null) result[k.slice(this.prefix.length)] = v;\n }\n }\n return result;\n }\n}\n\n/** Default StorageManager instance (empty prefix) */\nexport const storageManager = StorageManager.getInstance(\"\");\n","/**\n * EventBus Class — @mohasinac/core\n *\n * Singleton pub/sub event bus for decoupled communication.\n * Pure utility — no framework or app-specific imports.\n */\n\nimport { Logger } from \"./Logger\";\n\nconst logger = Logger.getInstance();\n\ntype EventCallback = (...args: unknown[]) => void;\n\nexport interface EventSubscription {\n unsubscribe: () => void;\n}\n\nexport class EventBus {\n private static instance: EventBus;\n private readonly events: Map<string, EventCallback[]> = new Map();\n\n private constructor() {}\n\n public static getInstance(): EventBus {\n if (!EventBus.instance) {\n EventBus.instance = new EventBus();\n }\n return EventBus.instance;\n }\n\n public on(event: string, callback: EventCallback): EventSubscription {\n if (!this.events.has(event)) {\n this.events.set(event, []);\n }\n this.events.get(event)!.push(callback);\n return { unsubscribe: () => this.off(event, callback) };\n }\n\n public once(event: string, callback: EventCallback): EventSubscription {\n const wrapped = (...args: unknown[]) => {\n callback(...args);\n this.off(event, wrapped);\n };\n return this.on(event, wrapped);\n }\n\n public off(event: string, callback: EventCallback): void {\n const callbacks = this.events.get(event);\n if (!callbacks) return;\n const idx = callbacks.indexOf(callback);\n if (idx > -1) callbacks.splice(idx, 1);\n if (callbacks.length === 0) this.events.delete(event);\n }\n\n public emit(event: string, ...args: unknown[]): void {\n const callbacks = this.events.get(event);\n if (!callbacks) return;\n callbacks.forEach((cb) => {\n try {\n cb(...args);\n } catch (error) {\n logger.error(`EventBus: error in handler for \"${event}\"`, { error });\n }\n });\n }\n\n public removeAllListeners(event?: string): void {\n if (event) {\n this.events.delete(event);\n } else {\n this.events.clear();\n }\n }\n\n public listenerCount(event: string): number {\n return this.events.get(event)?.length ?? 0;\n }\n\n public eventNames(): string[] {\n return Array.from(this.events.keys());\n }\n\n public hasListeners(event: string): boolean {\n return this.listenerCount(event) > 0;\n }\n}\n\n/** Shared singleton instance */\nexport const eventBus = EventBus.getInstance();\n","/**\n * Authorization Guards\n *\n * Pure utility functions that throw AuthenticationError / AuthorizationError.\n * Suitable for API routes, Server Actions, and middleware.\n *\n * Note: getUserFromRequest / requireAuthFromRequest are intentionally omitted —\n * they depend on Firebase Admin and the user repository; implement them in your\n * app layer using these primitives.\n */\n\nimport { AuthenticationError, AuthorizationError } from \"@mohasinac/errors\";\n\nexport type UserRole = \"admin\" | \"moderator\" | \"seller\" | \"user\";\n\nconst ROLE_HIERARCHY: Record<UserRole, number> = {\n admin: 4,\n moderator: 3,\n seller: 2,\n user: 1,\n};\n\nconst MSG = {\n NOT_AUTHENTICATED: \"Please log in to continue\",\n FORBIDDEN: \"You do not have permission to perform this action\",\n EMAIL_NOT_VERIFIED: \"Please verify your email address before logging in\",\n ACCOUNT_DISABLED: \"Your account has been disabled. Please contact support\",\n};\n\nexport function requireAuth(user: unknown): void {\n if (!user) {\n throw new AuthenticationError(MSG.NOT_AUTHENTICATED);\n }\n}\n\nexport function requireRole(\n user: Record<string, unknown> | null | undefined,\n roles: UserRole | UserRole[],\n): void {\n if (!user) throw new AuthenticationError(MSG.NOT_AUTHENTICATED);\n const requiredRoles = Array.isArray(roles) ? roles : [roles];\n const userRole = (user.role as UserRole) || \"user\";\n if (!requiredRoles.includes(userRole)) {\n throw new AuthorizationError(MSG.FORBIDDEN);\n }\n}\n\nexport function requireOwnership(\n user: Record<string, unknown> | null | undefined,\n resourceOwnerId: string,\n): void {\n if (!user) throw new AuthenticationError(MSG.NOT_AUTHENTICATED);\n if (user.uid !== resourceOwnerId) {\n throw new AuthorizationError(MSG.FORBIDDEN);\n }\n}\n\nexport function requireEmailVerified(\n user: Record<string, unknown> | null | undefined,\n): void {\n if (!user) throw new AuthenticationError(MSG.NOT_AUTHENTICATED);\n if (!user.emailVerified) throw new AuthorizationError(MSG.EMAIL_NOT_VERIFIED);\n}\n\nexport function requireActiveAccount(\n user: Record<string, unknown> | null | undefined,\n): void {\n if (!user) throw new AuthenticationError(MSG.NOT_AUTHENTICATED);\n if (user.disabled) throw new AuthorizationError(MSG.ACCOUNT_DISABLED);\n}\n\n/**\n * Check if currentUserRole is allowed to change a target user's role.\n * - admin: can change anyone's role\n * - moderator: can only change user → seller\n */\nexport function canChangeRole(\n currentUserRole: UserRole,\n targetCurrentRole: UserRole,\n targetNewRole: UserRole,\n): boolean {\n if (currentUserRole === \"admin\") return true;\n if (currentUserRole === \"moderator\") {\n return targetCurrentRole === \"user\" && targetNewRole === \"seller\";\n }\n return false;\n}\n\n/** Return the numeric hierarchy level for a role. */\nexport function getRoleLevel(role: UserRole): number {\n return ROLE_HIERARCHY[role] ?? 0;\n}\n","/**\r\n * Client-Side Error Logging Utilities\r\n *\r\n * Wraps the Logger singleton for use in React components, client hooks, and\r\n * browser-only code. Automatically attaches timestamp, userAgent, and current URL.\r\n *\r\n * For server-side logging use `server-logger.ts`.\r\n */\r\n\r\nimport { logger } from \"../core\";\r\nimport { AppError } from \"../errors\";\r\n\r\nexport interface ClientErrorContext {\r\n userId?: string;\r\n component?: string;\r\n action?: string;\r\n url?: string;\r\n method?: string;\r\n statusCode?: number;\r\n [key: string]: unknown;\r\n}\r\n\r\nfunction buildClientMeta(\r\n error: unknown,\r\n context?: ClientErrorContext,\r\n): Record<string, unknown> {\r\n const base: Record<string, unknown> = {\r\n ...context,\r\n timestamp: new Date().toISOString(),\r\n userAgent:\r\n typeof navigator !== \"undefined\" ? navigator.userAgent : \"unknown\",\r\n url: typeof window !== \"undefined\" ? window.location.href : \"unknown\",\r\n };\r\n\r\n if (error instanceof AppError) {\r\n base.error = {\r\n name: error.name,\r\n message: error.message,\r\n code: error.code,\r\n statusCode: error.statusCode,\r\n data: error.data,\r\n };\r\n } else if (error instanceof Error) {\r\n base.error = {\r\n name: error.name,\r\n message: error.message,\r\n stack: error.stack,\r\n };\r\n } else {\r\n base.error = error;\r\n }\r\n\r\n return base;\r\n}\r\n\r\nexport const logClientError = (\r\n message: string,\r\n error: unknown,\r\n context?: ClientErrorContext,\r\n): void => {\r\n logger.error(message, buildClientMeta(error, context));\r\n};\r\n\r\nexport const logClientWarning = (\r\n message: string,\r\n data?: ClientErrorContext,\r\n): void => {\r\n logger.warn(message, { ...data, timestamp: new Date().toISOString() });\r\n};\r\n\r\nexport const logClientInfo = (\r\n message: string,\r\n data?: ClientErrorContext,\r\n): void => {\r\n logger.info(message, { ...data, timestamp: new Date().toISOString() });\r\n};\r\n\r\nexport const logClientDebug = (\r\n message: string,\r\n data?: ClientErrorContext,\r\n): void => {\r\n logger.debug(message, { ...data, timestamp: new Date().toISOString() });\r\n};\r\n","/**\r\n * Server-Side Error Logging Utilities\r\n *\r\n * Wraps the Logger singleton for use in API routes, server components, and\r\n * server actions. Attaches request metadata when a NextRequest is available.\r\n *\r\n * IMPORTANT: Only import this file in server-side code. For client-side code\r\n * use `client-logger.ts`.\r\n */\r\n\r\nimport { logger } from \"../core\";\r\nimport { AppError } from \"../errors\";\r\nimport { type NextRequest } from \"next/server\";\r\n\r\nexport interface ServerErrorContext {\r\n userId?: string;\r\n endpoint?: string;\r\n method?: string;\r\n statusCode?: number;\r\n requestId?: string;\r\n [key: string]: unknown;\r\n}\r\n\r\n/** Pull the commonly needed headers from a NextRequest in one call. */\r\nexport const extractRequestMetadata = (request: NextRequest) => ({\r\n method: request.method,\r\n url: request.url,\r\n userAgent: request.headers.get(\"user-agent\") ?? \"unknown\",\r\n ip:\r\n request.headers.get(\"x-forwarded-for\") ??\r\n request.headers.get(\"x-real-ip\") ??\r\n \"unknown\",\r\n referer: request.headers.get(\"referer\") ?? \"none\",\r\n});\r\n\r\nfunction buildServerMeta(\r\n error: unknown,\r\n context?: ServerErrorContext,\r\n): Record<string, unknown> {\r\n const base: Record<string, unknown> = {\r\n ...context,\r\n timestamp: new Date().toISOString(),\r\n };\r\n\r\n if (error instanceof AppError) {\r\n base.error = {\r\n name: error.name,\r\n message: error.message,\r\n code: error.code,\r\n statusCode: error.statusCode,\r\n data: error.data,\r\n };\r\n } else if (error instanceof Error) {\r\n base.error = {\r\n name: error.name,\r\n message: error.message,\r\n stack: error.stack,\r\n };\r\n } else {\r\n base.error = error;\r\n }\r\n\r\n return base;\r\n}\r\n\r\nexport const logServerError = (\r\n message: string,\r\n error: unknown,\r\n context?: ServerErrorContext,\r\n): void => {\r\n logger.error(message, buildServerMeta(error, context));\r\n};\r\n\r\nexport const logServerWarning = (\r\n message: string,\r\n data?: ServerErrorContext,\r\n): void => {\r\n logger.warn(message, { ...data, timestamp: new Date().toISOString() });\r\n};\r\n\r\nexport const logServerInfo = (\r\n message: string,\r\n data?: ServerErrorContext,\r\n): void => {\r\n logger.info(message, { ...data, timestamp: new Date().toISOString() });\r\n};\r\n\r\nexport const logServerDebug = (\r\n message: string,\r\n data?: ServerErrorContext,\r\n): void => {\r\n logger.debug(message, { ...data, timestamp: new Date().toISOString() });\r\n};\r\n","\"use client\";\r\n\r\n/**\r\n * CameraCapture — live camera viewfinder for @mohasinac/feat-media.\r\n *\r\n * Photo-capture, video-recording, or both. Camera-flip when multiple inputs detected.\r\n * Uses `useCamera` from `@mohasinac/react`.\r\n */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { useTranslations } from \"next-intl\";\r\nimport { useCamera } from \"@mohasinac/react\";\r\nimport { Alert, Button, Div, Span, Spinner } from \"@mohasinac/ui\";\r\n\r\nexport interface CameraCaptureProps {\r\n mode: \"photo\" | \"video\" | \"both\";\r\n facingMode?: \"user\" | \"environment\";\r\n onCapture: (blob: Blob, type: \"photo\" | \"video\") => void;\r\n onError?: (error: string) => void;\r\n className?: string;\r\n}\r\n\r\nexport default function CameraCapture({\r\n mode,\r\n facingMode = \"environment\",\r\n onCapture,\r\n onError,\r\n className,\r\n}: CameraCaptureProps) {\r\n const t = useTranslations(\"camera\");\r\n const camera = useCamera();\r\n\r\n const [isStarting, setIsStarting] = useState(false);\r\n const [hasMultipleCameras, setHasMultipleCameras] = useState(false);\r\n\r\n useEffect(() => {\r\n let cancelled = false;\r\n async function init() {\r\n setIsStarting(true);\r\n if (\r\n typeof navigator !== \"undefined\" &&\r\n navigator.mediaDevices?.enumerateDevices\r\n ) {\r\n const devices = await navigator.mediaDevices.enumerateDevices();\r\n if (!cancelled) {\r\n setHasMultipleCameras(\r\n devices.filter((d) => d.kind === \"videoinput\").length > 1,\r\n );\r\n }\r\n }\r\n await camera.startCamera({\r\n facingMode,\r\n audio: mode === \"video\" || mode === \"both\",\r\n });\r\n if (!cancelled) setIsStarting(false);\r\n }\r\n void init();\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (camera.error && onError) onError(camera.error);\r\n }, [camera.error, onError]);\r\n\r\n const handleTakePhoto = () => {\r\n const blob = camera.takePhoto();\r\n if (blob) onCapture(blob, \"photo\");\r\n };\r\n\r\n const handleStopRecording = async () => {\r\n const blob = await camera.stopRecording();\r\n onCapture(blob, \"video\");\r\n };\r\n\r\n const showPhotoButton = mode === \"photo\" || mode === \"both\";\r\n const showVideoButton = mode === \"video\" || mode === \"both\";\r\n\r\n return (\r\n <Div\r\n className={`relative rounded-xl overflow-hidden bg-black ${className ?? \"\"}`}\r\n >\r\n <video\r\n ref={camera.videoRef}\r\n autoPlay\r\n muted\r\n playsInline\r\n className=\"w-full aspect-video object-cover\"\r\n />\r\n\r\n {isStarting && (\r\n <Div className=\"absolute inset-0 flex items-center justify-center bg-black/60\">\r\n <Div className=\"flex flex-col items-center gap-2\">\r\n <Spinner />\r\n <Span className=\"text-white text-sm\">{t(\"starting\")}</Span>\r\n </Div>\r\n </Div>\r\n )}\r\n\r\n {camera.error && (\r\n <Div className=\"absolute top-2 left-2 right-2\">\r\n <Alert variant=\"error\">{camera.error}</Alert>\r\n </Div>\r\n )}\r\n\r\n {!isStarting && !camera.error && camera.isActive && (\r\n <Div className=\"absolute bottom-0 left-0 right-0 p-3 bg-black/40 flex items-center justify-center gap-3\">\r\n {showPhotoButton && (\r\n <Button\r\n variant=\"secondary\"\r\n onClick={handleTakePhoto}\r\n aria-label={t(\"takePhoto\")}\r\n disabled={camera.isCapturing}\r\n >\r\n {t(\"takePhoto\")}\r\n </Button>\r\n )}\r\n\r\n {showVideoButton && (\r\n <Button\r\n variant={camera.isCapturing ? \"danger\" : \"secondary\"}\r\n onClick={\r\n camera.isCapturing\r\n ? handleStopRecording\r\n : () => camera.startRecording()\r\n }\r\n aria-label={\r\n camera.isCapturing ? t(\"stopRecording\") : t(\"startRecording\")\r\n }\r\n >\r\n {camera.isCapturing ? t(\"stopRecording\") : t(\"startRecording\")}\r\n </Button>\r\n )}\r\n\r\n {hasMultipleCameras && (\r\n <Button\r\n variant=\"outline\"\r\n onClick={() => void camera.switchCamera()}\r\n aria-label={t(\"flipCamera\")}\r\n disabled={camera.isCapturing}\r\n >\r\n {t(\"flipCamera\")}\r\n </Button>\r\n )}\r\n </Div>\r\n )}\r\n </Div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\n/**\r\n * MediaUploadField — single-file upload field for @mohasinac/feat-media.\r\n *\r\n * For video: optionally opens VideoTrimModal then VideoThumbnailSelector after upload.\r\n * Stage locally → caller-provided onUpload() → /api/media/upload.\r\n */\r\n\r\nimport { useState, useRef, useEffect, ChangeEvent } from \"react\";\r\nimport { useTranslations } from \"next-intl\";\r\nimport { useCamera } from \"@mohasinac/react\";\r\nimport { Alert, Button, Div, Label, Row, Spinner, Text } from \"@mohasinac/ui\";\r\nimport { MediaImage } from \"../MediaImage\";\r\nimport { MediaVideo } from \"../MediaVideo\";\r\nimport { VideoTrimModal } from \"../modals/VideoTrimModal\";\r\nimport { VideoThumbnailSelector } from \"../modals/VideoThumbnailSelector\";\r\nimport CameraCapture from \"./CameraCapture\";\r\nimport { inferMediaTypeFromMime, type MediaField } from \"../types/index\";\r\n\r\nexport interface MediaUploadFieldProps {\r\n label: string;\r\n value: string;\r\n onChange: (url: string) => void;\r\n onChangeField?: (media: MediaField | null) => void;\r\n onUpload: (file: File) => Promise<string>;\r\n accept?: string;\r\n maxSizeMB?: number;\r\n disabled?: boolean;\r\n helperText?: string;\r\n captureSource?: \"file-only\" | \"camera-only\" | \"both\";\r\n captureMode?: \"photo\" | \"video\" | \"both\";\r\n enableTrim?: boolean;\r\n enableThumbnail?: boolean;\r\n onThumbnailChange?: (url: string) => void;\r\n /**\r\n * Called with every URL that was staged (uploaded) but never persisted.\r\n * The parent form should call `DELETE /api/media?url=…` for each entry.\r\n */\r\n onAbort?: (stagedUrls: string[]) => void;\r\n /**\r\n * Called whenever staged URLs change.\r\n */\r\n onStagedUrlsChange?: (stagedUrls: string[]) => void;\r\n /**\r\n * Set true after successful save to prevent auto-cleanup on unmount.\r\n */\r\n isPersisted?: boolean;\r\n}\r\n\r\nfunction isVideo(url: string): boolean {\r\n return /\\.(mp4|webm|ogg|mov|avi)(\\?|$)/i.test(url);\r\n}\r\n\r\nfunction isImage(url: string): boolean {\r\n return /\\.(jpe?g|png|gif|webp|svg)(\\?|$)/i.test(url);\r\n}\r\n\r\nfunction filenameFromUrl(url: string): string {\r\n try {\r\n const parts = new URL(url).pathname.split(\"/\");\r\n return decodeURIComponent(parts[parts.length - 1] || url);\r\n } catch {\r\n return url;\r\n }\r\n}\r\n\r\nexport function MediaUploadField({\r\n label,\r\n value,\r\n onChange,\r\n onChangeField,\r\n onUpload,\r\n accept = \"*\",\r\n maxSizeMB = 50,\r\n disabled = false,\r\n helperText,\r\n captureSource = \"file-only\",\r\n captureMode = \"photo\",\r\n enableTrim = true,\r\n enableThumbnail = true,\r\n onThumbnailChange,\r\n onAbort,\r\n onStagedUrlsChange,\r\n isPersisted = false,\r\n}: MediaUploadFieldProps) {\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const [pendingVideoUrl, setPendingVideoUrl] = useState<string | null>(null);\r\n const [showTrimModal, setShowTrimModal] = useState(false);\r\n const [showThumbnailModal, setShowThumbnailModal] = useState(false);\r\n const [inputMode, setInputMode] = useState<\"file\" | \"camera\">(\"file\");\r\n\r\n const fileInputRef = useRef<HTMLInputElement>(null);\r\n const mobileCaptureRef = useRef<HTMLInputElement>(null);\r\n const stagedUrlsRef = useRef<string[]>([]);\r\n const onAbortRef = useRef(onAbort);\r\n const onStagedUrlsChangeRef = useRef(onStagedUrlsChange);\r\n const isPersistedRef = useRef(isPersisted);\r\n\r\n useEffect(() => {\r\n onAbortRef.current = onAbort;\r\n }, [onAbort]);\r\n\r\n useEffect(() => {\r\n onStagedUrlsChangeRef.current = onStagedUrlsChange;\r\n }, [onStagedUrlsChange]);\r\n\r\n useEffect(() => {\r\n isPersistedRef.current = isPersisted;\r\n }, [isPersisted]);\r\n\r\n // On unmount, clean up only if the form wasn't persisted.\r\n useEffect(() => {\r\n return () => {\r\n if (!isPersistedRef.current && stagedUrlsRef.current.length > 0) {\r\n onAbortRef.current?.([...stagedUrlsRef.current]);\r\n }\r\n };\r\n }, []);\r\n\r\n const emitStaged = () => {\r\n onStagedUrlsChangeRef.current?.([...stagedUrlsRef.current]);\r\n };\r\n\r\n const stageUrl = (url: string) => {\r\n if (!stagedUrlsRef.current.includes(url)) {\r\n stagedUrlsRef.current.push(url);\r\n emitStaged();\r\n }\r\n };\r\n\r\n const unstageUrl = (url: string) => {\r\n const next = stagedUrlsRef.current.filter((u) => u !== url);\r\n if (next.length !== stagedUrlsRef.current.length) {\r\n stagedUrlsRef.current = next;\r\n emitStaged();\r\n }\r\n };\r\n\r\n const t = useTranslations(\"camera\");\r\n const tUpload = useTranslations(\"upload\");\r\n const tMediaEditor = useTranslations(\"mediaEditor\");\r\n const { isSupported: isCameraSupported } = useCamera();\r\n\r\n const showCamera =\r\n captureSource === \"camera-only\" ||\r\n (captureSource === \"both\" && inputMode === \"camera\");\r\n const showFileInput =\r\n captureSource === \"file-only\" ||\r\n (captureSource === \"both\" && inputMode === \"file\");\r\n\r\n const captureModeAccept =\r\n captureMode === \"video\"\r\n ? \"video/*\"\r\n : captureMode === \"both\"\r\n ? \"image/*,video/*\"\r\n : \"image/*\";\r\n\r\n const afterUpload = (url: string, fileType: string) => {\r\n onChangeField?.({\r\n url,\r\n type: inferMediaTypeFromMime(fileType, url),\r\n });\r\n\r\n const isVideoFile = fileType.startsWith(\"video/\");\r\n if (isVideoFile && enableTrim) {\r\n setPendingVideoUrl(url);\r\n setShowTrimModal(true);\r\n return;\r\n }\r\n if (isVideoFile && enableThumbnail) {\r\n setPendingVideoUrl(url);\r\n setShowThumbnailModal(true);\r\n return;\r\n }\r\n onChange(url);\r\n };\r\n\r\n const handleTrimSave = (trimmedUrl: string) => {\r\n setShowTrimModal(false);\r\n if (enableThumbnail) {\r\n setPendingVideoUrl(trimmedUrl);\r\n setShowThumbnailModal(true);\r\n } else {\r\n onChange(trimmedUrl);\r\n setPendingVideoUrl(null);\r\n }\r\n };\r\n\r\n const handleTrimClose = () => {\r\n setShowTrimModal(false);\r\n if (enableThumbnail && pendingVideoUrl) {\r\n setShowThumbnailModal(true);\r\n } else {\r\n if (pendingVideoUrl) onChange(pendingVideoUrl);\r\n setPendingVideoUrl(null);\r\n }\r\n };\r\n\r\n const handleThumbnailSelect = (thumbUrl: string) => {\r\n setShowThumbnailModal(false);\r\n if (pendingVideoUrl) onChange(pendingVideoUrl);\r\n onThumbnailChange?.(thumbUrl);\r\n setPendingVideoUrl(null);\r\n };\r\n\r\n const handleThumbnailClose = () => {\r\n setShowThumbnailModal(false);\r\n if (pendingVideoUrl) onChange(pendingVideoUrl);\r\n setPendingVideoUrl(null);\r\n };\r\n\r\n const handleFileChange = async (e: ChangeEvent<HTMLInputElement>) => {\r\n const file = e.target.files?.[0];\r\n if (!file) return;\r\n const fileSizeMB = file.size / 1024 / 1024;\r\n if (fileSizeMB > maxSizeMB) {\r\n setError(`File size must be less than ${maxSizeMB}MB`);\r\n return;\r\n }\r\n setError(null);\r\n setIsLoading(true);\r\n try {\r\n const url = await onUpload(file);\r\n stageUrl(url);\r\n afterUpload(url, file.type);\r\n } catch (err) {\r\n setError(err instanceof Error ? err.message : \"Upload failed\");\r\n } finally {\r\n setIsLoading(false);\r\n if (fileInputRef.current) fileInputRef.current.value = \"\";\r\n }\r\n };\r\n\r\n const handleRemove = () => {\r\n if (value && stagedUrlsRef.current.includes(value)) {\r\n onAbortRef.current?.([value]);\r\n unstageUrl(value);\r\n }\r\n onChange(\"\");\r\n onChangeField?.(null);\r\n setError(null);\r\n };\r\n\r\n const handleCameraCapture = async (blob: Blob, type: \"photo\" | \"video\") => {\r\n const ext = type === \"video\" ? \"webm\" : \"webp\";\r\n const file = new File([blob], `camera-capture.${ext}`, { type: blob.type });\r\n setError(null);\r\n setIsLoading(true);\r\n try {\r\n const url = await onUpload(file);\r\n stageUrl(url);\r\n afterUpload(url, blob.type);\r\n } catch (err) {\r\n setError(err instanceof Error ? err.message : \"Upload failed\");\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n return (\r\n <Div className=\"space-y-2\">\r\n <Label className=\"block text-sm font-medium text-zinc-600 dark:text-zinc-400\">\r\n {label}\r\n </Label>\r\n\r\n {value && !isLoading && (\r\n <Div className=\"rounded-lg border border-zinc-200 dark:border-zinc-700 bg-zinc-50 dark:bg-zinc-900 p-3\">\r\n {isVideo(value) ? (\r\n <Div className=\"relative aspect-video overflow-hidden rounded-lg\">\r\n <MediaVideo\r\n src={value}\r\n alt={label}\r\n controls\r\n objectFit=\"contain\"\r\n />\r\n </Div>\r\n ) : isImage(value) ? (\r\n <Div className=\"relative aspect-video overflow-hidden rounded-lg\">\r\n <MediaImage\r\n src={value}\r\n alt={label}\r\n size=\"card\"\r\n objectFit=\"contain\"\r\n />\r\n </Div>\r\n ) : (\r\n <a\r\n href={value}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"text-sm underline break-all text-blue-600 dark:text-blue-400\"\r\n >\r\n {filenameFromUrl(value)}\r\n </a>\r\n )}\r\n\r\n {!disabled && (\r\n <Row wrap gap=\"sm\" className=\"mt-2\">\r\n {isVideo(value) && (enableTrim || enableThumbnail) && (\r\n <Button\r\n type=\"button\"\r\n onClick={() => {\r\n setPendingVideoUrl(value);\r\n if (enableTrim) setShowTrimModal(true);\r\n else setShowThumbnailModal(true);\r\n }}\r\n variant=\"secondary\"\r\n size=\"sm\"\r\n >\r\n {tMediaEditor(\"editVideo\")}\r\n </Button>\r\n )}\r\n <Button\r\n type=\"button\"\r\n onClick={handleRemove}\r\n variant=\"danger\"\r\n size=\"sm\"\r\n >\r\n {tUpload(\"remove\")}\r\n </Button>\r\n </Row>\r\n )}\r\n </Div>\r\n )}\r\n\r\n {!disabled && !isLoading && (\r\n <>\r\n {captureSource === \"both\" && isCameraSupported && (\r\n <Div className=\"flex items-center gap-2\">\r\n <Button\r\n type=\"button\"\r\n variant={inputMode === \"file\" ? \"primary\" : \"outline\"}\r\n size=\"sm\"\r\n onClick={() => setInputMode(\"file\")}\r\n >\r\n {t(\"switchToUpload\")}\r\n </Button>\r\n <Button\r\n type=\"button\"\r\n variant={inputMode === \"camera\" ? \"primary\" : \"outline\"}\r\n size=\"sm\"\r\n onClick={() => setInputMode(\"camera\")}\r\n >\r\n {t(\"switchToCamera\")}\r\n </Button>\r\n </Div>\r\n )}\r\n\r\n {showCamera && isCameraSupported && (\r\n <CameraCapture\r\n mode={captureMode}\r\n facingMode=\"environment\"\r\n onCapture={handleCameraCapture}\r\n onError={(msg) => setError(msg)}\r\n />\r\n )}\r\n\r\n {showCamera && !isCameraSupported && (\r\n <Button\r\n type=\"button\"\r\n onClick={() => mobileCaptureRef.current?.click()}\r\n variant=\"ghost\"\r\n 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\"\r\n >\r\n {t(\"switchToCamera\")}\r\n </Button>\r\n )}\r\n\r\n {showFileInput && (\r\n <Button\r\n type=\"button\"\r\n onClick={() => fileInputRef.current?.click()}\r\n variant=\"ghost\"\r\n 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\"\r\n >\r\n {value ? tUpload(\"replaceFile\") : tUpload(\"chooseFile\")}\r\n </Button>\r\n )}\r\n </>\r\n )}\r\n\r\n {isLoading && (\r\n <Div className=\"flex items-center gap-2\">\r\n <Spinner size=\"sm\" />\r\n <Text size=\"sm\" variant=\"secondary\">\r\n {tUpload(\"uploading\")}\r\n </Text>\r\n </Div>\r\n )}\r\n\r\n <input\r\n ref={fileInputRef}\r\n type=\"file\"\r\n accept={accept}\r\n onChange={handleFileChange}\r\n className=\"hidden\"\r\n aria-hidden=\"true\"\r\n />\r\n\r\n {showCamera && !isCameraSupported && (\r\n <input\r\n ref={mobileCaptureRef}\r\n type=\"file\"\r\n accept={captureModeAccept}\r\n capture=\"environment\"\r\n onChange={handleFileChange}\r\n className=\"hidden\"\r\n aria-hidden=\"true\"\r\n />\r\n )}\r\n\r\n {helperText && !error && (\r\n <Text variant=\"secondary\" size=\"xs\">\r\n {helperText}\r\n </Text>\r\n )}\r\n\r\n {error && <Alert variant=\"error\">{error}</Alert>}\r\n\r\n {pendingVideoUrl && (\r\n <VideoTrimModal\r\n isOpen={showTrimModal}\r\n videoUrl={pendingVideoUrl}\r\n onClose={handleTrimClose}\r\n onSave={handleTrimSave}\r\n />\r\n )}\r\n\r\n {pendingVideoUrl && (\r\n <VideoThumbnailSelector\r\n isOpen={showThumbnailModal}\r\n videoUrl={pendingVideoUrl}\r\n onClose={handleThumbnailClose}\r\n onSelect={handleThumbnailSelect}\r\n onUpload={onUpload}\r\n />\r\n )}\r\n </Div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect, useRef, useState, type ChangeEvent } from \"react\";\r\nimport { Alert, Button, Div, Label, Spinner, Text } from \"@mohasinac/ui\";\r\nimport { MediaImage } from \"../MediaImage\";\r\nimport { MediaVideo } from \"../MediaVideo\";\r\nimport { inferMediaTypeFromMime, type MediaField } from \"../types/index\";\r\n\r\nexport interface MediaUploadListProps {\r\n label: string;\r\n value: MediaField[];\r\n onChange: (media: MediaField[]) => void;\r\n onUpload: (file: File) => Promise<string>;\r\n accept?: string;\r\n maxSizeMB?: number;\r\n maxItems?: number;\r\n disabled?: boolean;\r\n helperText?: string;\r\n /**\r\n * Called with staged URLs that were uploaded but never persisted.\r\n * Parent should call DELETE /api/media?url=... for each URL.\r\n */\r\n onAbort?: (stagedUrls: string[]) => void;\r\n /**\r\n * Live callback for parent forms to track staged URLs.\r\n */\r\n onStagedUrlsChange?: (stagedUrls: string[]) => void;\r\n /**\r\n * Set true after successful save to prevent auto-cleanup on unmount.\r\n */\r\n isPersisted?: boolean;\r\n}\r\n\r\nfunction fileNameFromUrl(url: string): string {\r\n try {\r\n const parts = new URL(url).pathname.split(\"/\");\r\n return decodeURIComponent(parts[parts.length - 1] || url);\r\n } catch {\r\n return url;\r\n }\r\n}\r\n\r\nexport function MediaUploadList({\r\n label,\r\n value,\r\n onChange,\r\n onUpload,\r\n accept = \"image/*,video/*\",\r\n maxSizeMB = 50,\r\n maxItems = 12,\r\n disabled = false,\r\n helperText,\r\n onAbort,\r\n onStagedUrlsChange,\r\n isPersisted = false,\r\n}: MediaUploadListProps) {\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const stagedUrlsRef = useRef<string[]>([]);\r\n const onAbortRef = useRef(onAbort);\r\n const onStagedUrlsChangeRef = useRef(onStagedUrlsChange);\r\n const isPersistedRef = useRef(isPersisted);\r\n\r\n useEffect(() => {\r\n onAbortRef.current = onAbort;\r\n }, [onAbort]);\r\n\r\n useEffect(() => {\r\n onStagedUrlsChangeRef.current = onStagedUrlsChange;\r\n }, [onStagedUrlsChange]);\r\n\r\n useEffect(() => {\r\n isPersistedRef.current = isPersisted;\r\n }, [isPersisted]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (!isPersistedRef.current && stagedUrlsRef.current.length > 0) {\r\n onAbortRef.current?.([...stagedUrlsRef.current]);\r\n }\r\n };\r\n }, []);\r\n\r\n const emitStaged = () => {\r\n onStagedUrlsChangeRef.current?.([...stagedUrlsRef.current]);\r\n };\r\n\r\n const stageUrl = (url: string) => {\r\n if (!stagedUrlsRef.current.includes(url)) {\r\n stagedUrlsRef.current.push(url);\r\n emitStaged();\r\n }\r\n };\r\n\r\n const unstageUrl = (url: string) => {\r\n const next = stagedUrlsRef.current.filter((u) => u !== url);\r\n if (next.length !== stagedUrlsRef.current.length) {\r\n stagedUrlsRef.current = next;\r\n emitStaged();\r\n }\r\n };\r\n\r\n const handleFileChange = async (e: ChangeEvent<HTMLInputElement>) => {\r\n const files = Array.from(e.target.files ?? []);\r\n if (files.length === 0) return;\r\n\r\n if (value.length + files.length > maxItems) {\r\n setError(`You can upload up to ${maxItems} files.`);\r\n e.currentTarget.value = \"\";\r\n return;\r\n }\r\n\r\n setError(null);\r\n setIsLoading(true);\r\n\r\n try {\r\n const uploaded: MediaField[] = [];\r\n\r\n for (const file of files) {\r\n const sizeMb = file.size / 1024 / 1024;\r\n if (sizeMb > maxSizeMB) {\r\n throw new Error(`${file.name} exceeds ${maxSizeMB}MB`);\r\n }\r\n\r\n const url = await onUpload(file);\r\n stageUrl(url);\r\n\r\n uploaded.push({\r\n url,\r\n type: inferMediaTypeFromMime(file.type, url),\r\n });\r\n }\r\n\r\n onChange([...value, ...uploaded]);\r\n } catch (err) {\r\n setError(err instanceof Error ? err.message : \"Upload failed\");\r\n } finally {\r\n setIsLoading(false);\r\n e.currentTarget.value = \"\";\r\n }\r\n };\r\n\r\n const removeAt = (index: number) => {\r\n const target = value[index];\r\n if (!target) return;\r\n\r\n const next = value.filter((_, i) => i !== index);\r\n onChange(next);\r\n\r\n if (stagedUrlsRef.current.includes(target.url)) {\r\n onAbortRef.current?.([target.url]);\r\n unstageUrl(target.url);\r\n }\r\n };\r\n\r\n return (\r\n <Div className=\"space-y-2\">\r\n <Label className=\"block text-sm font-medium text-zinc-600 dark:text-zinc-400\">\r\n {label}\r\n </Label>\r\n\r\n {value.length > 0 && (\r\n <Div className=\"grid grid-cols-1 sm:grid-cols-2 gap-3\">\r\n {value.map((item, index) => (\r\n <Div\r\n key={`${item.url}-${index}`}\r\n className=\"rounded-lg border border-zinc-200 dark:border-zinc-700 bg-zinc-50 dark:bg-zinc-900 p-3\"\r\n >\r\n {item.type === \"video\" ? (\r\n <Div className=\"relative aspect-video overflow-hidden rounded-lg\">\r\n <MediaVideo\r\n src={item.url}\r\n alt={item.alt || `Media ${index + 1}`}\r\n controls\r\n />\r\n </Div>\r\n ) : item.type === \"image\" ? (\r\n <Div className=\"relative aspect-video overflow-hidden rounded-lg\">\r\n <MediaImage\r\n src={item.url}\r\n alt={item.alt || `Media ${index + 1}`}\r\n size=\"card\"\r\n objectFit=\"contain\"\r\n />\r\n </Div>\r\n ) : (\r\n <a\r\n href={item.url}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"text-sm underline break-all text-blue-600 dark:text-blue-400\"\r\n >\r\n {fileNameFromUrl(item.url)}\r\n </a>\r\n )}\r\n\r\n {!disabled && (\r\n <Div className=\"mt-2\">\r\n <Button\r\n type=\"button\"\r\n size=\"sm\"\r\n variant=\"danger\"\r\n onClick={() => removeAt(index)}\r\n >\r\n Remove\r\n </Button>\r\n </Div>\r\n )}\r\n </Div>\r\n ))}\r\n </Div>\r\n )}\r\n\r\n {!disabled && value.length < maxItems && (\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n 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\"\r\n onClick={() => inputRef.current?.click()}\r\n disabled={isLoading}\r\n >\r\n {isLoading ? \"Uploading...\" : \"Add media\"}\r\n </Button>\r\n )}\r\n\r\n {isLoading && (\r\n <Div className=\"flex items-center gap-2\">\r\n <Spinner size=\"sm\" />\r\n <Text size=\"sm\" variant=\"secondary\">\r\n Uploading\r\n </Text>\r\n </Div>\r\n )}\r\n\r\n <input\r\n ref={inputRef}\r\n type=\"file\"\r\n multiple\r\n accept={accept}\r\n onChange={handleFileChange}\r\n className=\"hidden\"\r\n aria-hidden=\"true\"\r\n />\r\n\r\n {helperText && !error && (\r\n <Text variant=\"secondary\" size=\"xs\">\r\n {helperText}\r\n </Text>\r\n )}\r\n\r\n {error && <Alert variant=\"error\">{error}</Alert>}\r\n </Div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport {\r\n Div,\r\n Input,\r\n Label,\r\n Select,\r\n TagInput,\r\n Text,\r\n Textarea,\r\n} from \"@mohasinac/ui\";\r\nimport { Checkbox } from \"../../forms/index.js\";\r\nimport { MediaUploadField, MediaUploadList } from \"../../media/index.js\";\r\nimport {\r\n coerceMediaFieldArray,\r\n getMediaUrl,\r\n type MediaField,\r\n type MediaFieldInput,\r\n} from \"../../media/types/index.js\";\r\n\r\nexport interface BlogPostFormValue {\r\n title?: string;\r\n slug?: string;\r\n excerpt?: string;\r\n content?: string;\r\n coverImage?: MediaFieldInput;\r\n contentImages?: MediaField[];\r\n additionalImages?: MediaField[];\r\n category?: string;\r\n tags?: string[];\r\n isFeatured?: boolean;\r\n status?: string;\r\n readTimeMinutes?: number;\r\n}\r\n\r\nexport interface BlogPostFormOption {\r\n value: string;\r\n label: string;\r\n}\r\n\r\nexport interface BlogPostFormLabels {\r\n title: string;\r\n slug: string;\r\n excerpt: string;\r\n content: string;\r\n coverImage: string;\r\n coverImageHelper?: string;\r\n contentImages: string;\r\n contentImagesHelper?: string;\r\n additionalImages: string;\r\n additionalImagesHelper?: string;\r\n category: string;\r\n status: string;\r\n tags: string;\r\n readTime: string;\r\n featured: string;\r\n}\r\n\r\nexport interface BlogPostFormProps {\r\n value: BlogPostFormValue;\r\n onChange: (next: BlogPostFormValue) => void;\r\n categoryOptions: BlogPostFormOption[];\r\n statusOptions: BlogPostFormOption[];\r\n labels: BlogPostFormLabels;\r\n onUploadCover: (file: File) => Promise<string>;\r\n onUploadContentImage: (file: File) => Promise<string>;\r\n onUploadAdditionalImage: (file: File) => Promise<string>;\r\n onAbort?: (stagedUrls: string[]) => void;\r\n isReadonly?: boolean;\r\n renderContentField?: (args: {\r\n value: string;\r\n onChange: (value: string) => void;\r\n isReadonly: boolean;\r\n }) => React.ReactNode;\r\n renderContentReadonly?: (value: string) => React.ReactNode;\r\n}\r\n\r\nexport function BlogPostForm({\r\n value,\r\n onChange,\r\n categoryOptions,\r\n statusOptions,\r\n labels,\r\n onUploadCover,\r\n onUploadContentImage,\r\n onUploadAdditionalImage,\r\n onAbort,\r\n isReadonly = false,\r\n renderContentField,\r\n renderContentReadonly,\r\n}: BlogPostFormProps) {\r\n const coverImageUrl = getMediaUrl(value.coverImage);\r\n const contentImages = coerceMediaFieldArray(value.contentImages);\r\n const additionalImages = coerceMediaFieldArray(value.additionalImages);\r\n\r\n const update = (partial: Partial<BlogPostFormValue>) => {\r\n onChange({\r\n ...value,\r\n ...partial,\r\n });\r\n };\r\n\r\n return (\r\n <Div className=\"space-y-5\">\r\n <Div className=\"grid gap-4 md:grid-cols-2\">\r\n <Div className=\"space-y-1.5\">\r\n <Label htmlFor=\"blog-post-title\">{labels.title}</Label>\r\n <Input\r\n id=\"blog-post-title\"\r\n value={value.title || \"\"}\r\n onChange={(event) => update({ title: event.target.value })}\r\n disabled={isReadonly}\r\n />\r\n </Div>\r\n\r\n <Div className=\"space-y-1.5\">\r\n <Label htmlFor=\"blog-post-slug\">{labels.slug}</Label>\r\n <Input\r\n id=\"blog-post-slug\"\r\n value={value.slug || \"\"}\r\n onChange={(event) => update({ slug: event.target.value })}\r\n disabled={isReadonly}\r\n />\r\n </Div>\r\n </Div>\r\n\r\n <Div className=\"space-y-1.5\">\r\n <Label htmlFor=\"blog-post-excerpt\">{labels.excerpt}</Label>\r\n <Textarea\r\n id=\"blog-post-excerpt\"\r\n value={value.excerpt || \"\"}\r\n onChange={(event) => update({ excerpt: event.target.value })}\r\n rows={3}\r\n disabled={isReadonly}\r\n />\r\n </Div>\r\n\r\n <Div className=\"space-y-1.5\">\r\n <Label>{labels.content}</Label>\r\n {renderContentField ? (\r\n renderContentField({\r\n value: value.content || \"\",\r\n onChange: (content) => update({ content }),\r\n isReadonly,\r\n })\r\n ) : isReadonly && renderContentReadonly ? (\r\n renderContentReadonly(value.content || \"\")\r\n ) : (\r\n <Textarea\r\n value={value.content || \"\"}\r\n onChange={(event) => update({ content: event.target.value })}\r\n rows={10}\r\n disabled={isReadonly}\r\n />\r\n )}\r\n </Div>\r\n\r\n <MediaUploadField\r\n label={labels.coverImage}\r\n value={coverImageUrl || \"\"}\r\n onChange={(url) =>\r\n update({ coverImage: url ? { url, type: \"image\" } : null })\r\n }\r\n onChangeField={(media) => update({ coverImage: media })}\r\n onUpload={onUploadCover}\r\n onAbort={onAbort}\r\n accept=\"image/*\"\r\n maxSizeMB={10}\r\n disabled={isReadonly}\r\n helperText={labels.coverImageHelper}\r\n />\r\n\r\n <MediaUploadList\r\n label={labels.contentImages}\r\n value={contentImages}\r\n onChange={(media) => update({ contentImages: media })}\r\n onUpload={onUploadContentImage}\r\n onAbort={onAbort}\r\n accept=\"image/*\"\r\n maxItems={10}\r\n maxSizeMB={10}\r\n disabled={isReadonly}\r\n helperText={labels.contentImagesHelper}\r\n />\r\n\r\n <MediaUploadList\r\n label={labels.additionalImages}\r\n value={additionalImages}\r\n onChange={(media) => update({ additionalImages: media })}\r\n onUpload={onUploadAdditionalImage}\r\n onAbort={onAbort}\r\n accept=\"image/*\"\r\n maxItems={5}\r\n maxSizeMB={10}\r\n disabled={isReadonly}\r\n helperText={labels.additionalImagesHelper}\r\n />\r\n\r\n <Div className=\"grid gap-4 md:grid-cols-2\">\r\n <Select\r\n label={labels.category}\r\n value={value.category}\r\n onChange={(category) => update({ category })}\r\n options={categoryOptions}\r\n disabled={isReadonly}\r\n />\r\n <Select\r\n label={labels.status}\r\n value={value.status}\r\n onChange={(status) => update({ status })}\r\n options={statusOptions}\r\n disabled={isReadonly}\r\n />\r\n </Div>\r\n\r\n <Div className=\"grid gap-4 md:grid-cols-2\">\r\n <TagInput\r\n label={labels.tags}\r\n value={value.tags ?? []}\r\n onChange={(tags) => update({ tags })}\r\n disabled={isReadonly}\r\n />\r\n <Div className=\"space-y-1.5\">\r\n <Label htmlFor=\"blog-post-read-time\">{labels.readTime}</Label>\r\n <Input\r\n id=\"blog-post-read-time\"\r\n type=\"number\"\r\n value={String(value.readTimeMinutes ?? 5)}\r\n onChange={(event) =>\r\n update({\r\n readTimeMinutes: parseInt(event.target.value, 10) || 5,\r\n })\r\n }\r\n disabled={isReadonly}\r\n />\r\n </Div>\r\n </Div>\r\n\r\n <Checkbox\r\n label={labels.featured}\r\n checked={value.isFeatured || false}\r\n onChange={(event) => update({ isFeatured: event.target.checked })}\r\n disabled={isReadonly}\r\n />\r\n\r\n {isReadonly && coverImageUrl && (\r\n <Text size=\"xs\" variant=\"secondary\">\r\n {coverImageUrl}\r\n </Text>\r\n )}\r\n </Div>\r\n );\r\n}","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Div, Heading, Row, Span, Text } from \"@mohasinac/ui\";\r\nimport { useBlogPost } from \"../hooks/useBlog\";\r\nimport { BlogCard } from \"./BlogListView\";\r\nimport type { BlogPost, BlogPostCategory } from \"../types\";\r\nimport type { BlogPostDetailResponse } from \"../api/[slug]/route.js\";\r\nimport { getMediaUrl } from \"../../media/types/index.js\";\r\n\r\nconst CATEGORY_BADGE: Record<BlogPostCategory, string> = {\r\n news: \"bg-blue-100 text-blue-800\",\r\n tips: \"bg-emerald-100 text-emerald-800\",\r\n guides: \"bg-indigo-100 text-indigo-800\",\r\n updates: \"bg-purple-100 text-purple-800\",\r\n community: \"bg-orange-100 text-orange-800\",\r\n};\r\n\r\nexport interface BlogPostViewProps {\r\n slug: string;\r\n initialData?: BlogPostDetailResponse;\r\n labels?: {\r\n backToBlog?: string;\r\n notFound?: string;\r\n notFoundDescription?: string;\r\n author?: string;\r\n readTime?: string;\r\n publishedOn?: string;\r\n viewsLabel?: string;\r\n featured?: string;\r\n relatedTitle?: string;\r\n };\r\n /** Render the cover image */\r\n renderImage?: (post: BlogPost) => React.ReactNode;\r\n /** Render the HTML content (for custom sanitization/prosemirror) */\r\n renderContent?: (post: BlogPost) => React.ReactNode;\r\n /** Render a back button */\r\n renderBackButton?: () => React.ReactNode;\r\n /** Render loading state */\r\n renderLoading?: () => React.ReactNode;\r\n /** Render error/not-found state */\r\n renderError?: (error: Error | null) => React.ReactNode;\r\n /** Render a related post card */\r\n renderRelatedCard?: (post: BlogPost, index: number) => React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function BlogPostView({\r\n slug,\r\n initialData,\r\n labels = {},\r\n renderImage,\r\n renderContent,\r\n renderBackButton,\r\n renderLoading,\r\n renderError,\r\n renderRelatedCard,\r\n className = \"\",\r\n}: BlogPostViewProps) {\r\n const { post, related, isLoading, error } = useBlogPost(slug, {\r\n initialData,\r\n });\r\n\r\n if (isLoading) {\r\n if (renderLoading) return <>{renderLoading()}</>;\r\n return (\r\n <Div className=\"flex items-center justify-center min-h-screen\">\r\n <Div className=\"animate-pulse text-neutral-400\">Loading…</Div>\r\n </Div>\r\n );\r\n }\r\n\r\n if (error || !post) {\r\n if (renderError) return <>{renderError(error ?? null)}</>;\r\n return (\r\n <Div className=\"flex flex-col items-center justify-center min-h-screen gap-4 p-8\">\r\n <Heading level={1} className=\"text-xl font-semibold\">\r\n {labels.notFound ?? \"Post not found\"}\r\n </Heading>\r\n <Text className=\"text-neutral-500\">\r\n {labels.notFoundDescription ?? \"This post is not available.\"}\r\n </Text>\r\n {renderBackButton?.()}\r\n </Div>\r\n );\r\n }\r\n\r\n const date = post.publishedAt\r\n ? new Date(post.publishedAt).toLocaleDateString(\"en-US\", {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n })\r\n : \"\";\r\n const coverImageUrl = getMediaUrl(post.coverImage);\r\n\r\n return (\r\n <Div className={`min-h-screen ${className}`}>\r\n {/* Cover image */}\r\n {coverImageUrl && (\r\n <Div className=\"relative h-72 md:h-96 overflow-hidden\">\r\n {renderImage ? (\r\n renderImage(post)\r\n ) : (\r\n <Div\r\n role=\"img\"\r\n aria-label={post.title}\r\n className=\"h-full w-full bg-cover bg-center\"\r\n style={{ backgroundImage: `url(${coverImageUrl})` }}\r\n />\r\n )}\r\n <Div className=\"absolute inset-0 bg-gradient-to-t from-black/50 to-transparent\" />\r\n </Div>\r\n )}\r\n\r\n <Div className=\"max-w-3xl mx-auto px-4 py-12\">\r\n {/* Header */}\r\n <Div className=\"mb-8\">\r\n <Div className=\"flex items-center gap-2 mb-4\">\r\n <Span\r\n className={`inline-block px-2 py-0.5 rounded-full text-xs font-medium capitalize ${CATEGORY_BADGE[post.category] ?? \"\"}`}\r\n >\r\n {post.category}\r\n </Span>\r\n {post.isFeatured && (\r\n <Span className=\"bg-yellow-100 text-yellow-800 px-2 py-0.5 rounded-full text-xs font-medium\">\r\n {labels.featured ?? \"Featured\"}\r\n </Span>\r\n )}\r\n </Div>\r\n <Heading level={1} className=\"text-3xl font-bold mb-4\">\r\n {post.title}\r\n </Heading>\r\n {post.excerpt && (\r\n <Text className=\"text-lg text-neutral-500 mb-6\">\r\n {post.excerpt}\r\n </Text>\r\n )}\r\n <Row wrap gap=\"md\" className=\"text-sm text-neutral-400\">\r\n {post.authorName && (\r\n <Span>\r\n {labels.author ?? \"By\"}{\" \"}\r\n <Span className=\"font-medium text-neutral-700\">\r\n {post.authorName}\r\n </Span>\r\n </Span>\r\n )}\r\n {post.readTimeMinutes != null && (\r\n <Span>\r\n {post.readTimeMinutes} {labels.readTime ?? \"min read\"}\r\n </Span>\r\n )}\r\n {date && (\r\n <Span>\r\n {labels.publishedOn ?? \"Published\"} {date}\r\n </Span>\r\n )}\r\n {post.views != null && (\r\n <Span>\r\n {post.views} {labels.viewsLabel ?? \"views\"}\r\n </Span>\r\n )}\r\n </Row>\r\n </Div>\r\n\r\n {/* Tags */}\r\n {post.tags && post.tags.length > 0 && (\r\n <Row wrap gap=\"sm\" className=\"mb-8\">\r\n {post.tags.map((tag) => (\r\n <Span\r\n key={tag}\r\n className=\"inline-block px-3 py-1 rounded-full bg-neutral-100 text-neutral-600 text-xs font-medium\"\r\n >\r\n #{tag}\r\n </Span>\r\n ))}\r\n </Row>\r\n )}\r\n\r\n {/* Content */}\r\n <Div className=\"bg-white rounded-xl border border-neutral-200 p-8 mb-12\">\r\n {renderContent ? (\r\n renderContent(post)\r\n ) : (\r\n <Div\r\n className=\"prose max-w-none\"\r\n dangerouslySetInnerHTML={{ __html: post.content ?? \"\" }}\r\n />\r\n )}\r\n </Div>\r\n\r\n {/* Related posts */}\r\n {related.length > 0 && (\r\n <Div>\r\n <Heading level={2} className=\"text-xl font-semibold mb-6\">\r\n {labels.relatedTitle ?? \"Related Posts\"}\r\n </Heading>\r\n <Div className=\"grid sm:grid-cols-3 gap-6\">\r\n {related.map((rel, i) =>\r\n renderRelatedCard ? (\r\n <React.Fragment key={rel.id}>\r\n {renderRelatedCard(rel, i)}\r\n </React.Fragment>\r\n ) : (\r\n <BlogCard key={rel.id} post={rel} />\r\n ),\r\n )}\r\n </Div>\r\n </Div>\r\n )}\r\n\r\n {/* Back button */}\r\n {renderBackButton && (\r\n <Div className=\"mt-10 pt-8 border-t border-neutral-200\">\r\n {renderBackButton()}\r\n </Div>\r\n )}\r\n </Div>\r\n </Div>\r\n );\r\n}\r\n","import { z } from \"zod\";\r\nimport { mediaFieldSchema } from \"../../media/types/index.js\";\r\n\r\nconst blogCoverImageSchema = z\r\n .union([\r\n mediaFieldSchema,\r\n z.string().url().transform((url) => ({ url, type: \"image\" as const })),\r\n ])\r\n .nullable()\r\n .optional()\r\n .transform((value) => value ?? null);\r\n\r\n// ─── Sub-schemas ──────────────────────────────────────────────────────────────\r\n\r\nexport const blogPostCategorySchema = z.enum([\r\n \"news\",\r\n \"tips\",\r\n \"guides\",\r\n \"updates\",\r\n \"community\",\r\n]);\r\n\r\nexport const blogPostStatusSchema = z.enum([\"draft\", \"published\", \"archived\"]);\r\n\r\n// ─── Base item schema ─────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Base Zod schema for a blog post.\r\n * Apps can extend this to add their own fields:\r\n *\r\n * @example\r\n * import { blogPostSchema } from \"@mohasinac/feat-blog\";\r\n *\r\n * const myPostSchema = blogPostSchema.extend({\r\n * series: z.string().optional(),\r\n * sponsoredBy: z.string().optional(),\r\n * });\r\n * type MyPost = z.infer<typeof myPostSchema>;\r\n */\r\nexport const blogPostSchema = z.object({\r\n id: z.string(),\r\n title: z.string(),\r\n slug: z.string(),\r\n excerpt: z.string().optional(),\r\n content: z.string().optional(),\r\n coverImage: blogCoverImageSchema,\r\n contentImages: z.array(mediaFieldSchema).max(10).optional().default([]),\r\n additionalImages: z.array(mediaFieldSchema).max(5).optional().default([]),\r\n category: blogPostCategorySchema,\r\n tags: z.array(z.string()).optional(),\r\n isFeatured: z.boolean().optional(),\r\n status: blogPostStatusSchema,\r\n publishedAt: z.string().optional(),\r\n authorId: z.string().optional(),\r\n authorName: z.string().optional(),\r\n authorAvatar: z.string().optional(),\r\n readTimeMinutes: z.number().optional(),\r\n views: z.number().optional(),\r\n metaTitle: z.string().optional(),\r\n metaDescription: z.string().optional(),\r\n createdAt: z.string().optional(),\r\n updatedAt: z.string().optional(),\r\n});\r\n\r\n/** Base Zod schema for list-query parameters. */\r\nexport const blogListParamsSchema = z.object({\r\n category: blogPostCategorySchema.optional(),\r\n tags: z.string().optional(),\r\n q: z.string().optional(),\r\n page: z.coerce.number().optional(),\r\n perPage: z.coerce.number().optional(),\r\n sort: z.string().optional(),\r\n featured: z.coerce.boolean().optional(),\r\n});\r\n","import type { TableColumn, ColumnExtensionOpts } from \"@mohasinac/contracts\";\r\nimport type { BlogPost } from \"../types\";\r\n\r\n/**\r\n * Default admin column definitions for a blog post table.\r\n *\r\n * @example — extend with app-specific columns\r\n * ```ts\r\n * import { buildBlogColumns } from \"@mohasinac/feat-blog\";\r\n *\r\n * const columns = buildBlogColumns<MyPost>({\r\n * overrides: { title: { render: (p) => <Link href={p.slug}>{p.title}</Link> } },\r\n * extras: [{ key: \"series\", header: \"Series\", render: (p) => p.series ?? \"—\" }],\r\n * });\r\n * ```\r\n */\r\nexport const blogAdminColumns: TableColumn<BlogPost>[] = [\r\n { key: \"title\", header: \"Title\", sortable: true },\r\n { key: \"category\", header: \"Category\", sortable: true },\r\n {\r\n key: \"status\",\r\n header: \"Status\",\r\n sortable: true,\r\n },\r\n {\r\n key: \"isFeatured\",\r\n header: \"Featured\",\r\n render: (p) => (p.isFeatured ? \"Yes\" : \"No\"),\r\n },\r\n {\r\n key: \"readTimeMinutes\",\r\n header: \"Read Time\",\r\n render: (p) =>\r\n p.readTimeMinutes !== undefined ? `${p.readTimeMinutes} min` : \"—\",\r\n },\r\n {\r\n key: \"views\",\r\n header: \"Views\",\r\n sortable: true,\r\n render: (p) => p.views?.toLocaleString() ?? \"—\",\r\n },\r\n { key: \"authorName\", header: \"Author\" },\r\n { key: \"publishedAt\", header: \"Published\", sortable: true },\r\n];\r\n\r\n/**\r\n * Build a merged column list from the base blog columns.\r\n *\r\n * @example\r\n * const cols = buildBlogColumns<MyPost>({\r\n * overrides: { title: { sortable: false } },\r\n * extras: [{ key: \"series\", header: \"Series\", render: (p) => p.series }],\r\n * omit: [\"views\"],\r\n * });\r\n */\r\nexport function buildBlogColumns<T extends BlogPost = BlogPost>(\r\n opts?: ColumnExtensionOpts<T>,\r\n): TableColumn<T>[] {\r\n const base = blogAdminColumns as TableColumn<T>[];\r\n const omit = new Set(opts?.omit ?? []);\r\n const cols = base\r\n .filter((col) => !omit.has(col.key))\r\n .map((col) => {\r\n const ovr = opts?.overrides?.[col.key];\r\n return ovr ? { ...col, ...ovr } : col;\r\n });\r\n return opts?.extras ? [...cols, ...opts.extras] : cols;\r\n}\r\n","import type {\n IRepository,\n PagedResult,\n SieveQuery,\n} from \"@mohasinac/contracts\";\nimport type { BlogPost, BlogPostCategory } from \"../types\";\n\nexport class BlogRepository {\n constructor(private readonly repo: IRepository<BlogPost>) {}\n\n async findAll(query?: SieveQuery): Promise<PagedResult<BlogPost>> {\n const base: SieveQuery = { filters: \"status==published\", ...query };\n if (query?.filters) {\n base.filters = `status==published,${query.filters}`;\n }\n return this.repo.findAll(base);\n }\n\n async findBySlug(slug: string): Promise<BlogPost | null> {\n const result = await this.repo.findAll({\n filters: `slug==${slug},status==published`,\n perPage: 1,\n });\n return result.data[0] ?? null;\n }\n\n async findLatest(n = 5): Promise<BlogPost[]> {\n const result = await this.repo.findAll({\n filters: \"status==published\",\n sort: \"-publishedAt\",\n perPage: n,\n });\n return result.data;\n }\n\n async findFeatured(n = 3): Promise<BlogPost[]> {\n const result = await this.repo.findAll({\n filters: \"status==published,isFeatured==true\",\n sort: \"-publishedAt\",\n perPage: n,\n });\n return result.data;\n }\n\n async findByCategory(\n category: BlogPostCategory,\n page = 1,\n perPage = 10,\n ): Promise<PagedResult<BlogPost>> {\n return this.repo.findAll({\n filters: `status==published,category==${category}`,\n sort: \"-publishedAt\",\n page,\n perPage,\n });\n }\n\n async findById(id: string): Promise<BlogPost | null> {\n return this.repo.findById(id);\n }\n\n async create(data: Omit<BlogPost, \"id\">): Promise<BlogPost> {\n return this.repo.create(data);\n }\n\n async update(id: string, data: Partial<BlogPost>): Promise<BlogPost> {\n return this.repo.update(id, data);\n }\n\n async delete(id: string): Promise<void> {\n return this.repo.delete(id);\n }\n}\n","import type { FeatureManifest } from \"@mohasinac/contracts\";\n\nexport const manifest: FeatureManifest = {\n name: \"blog\",\n i18nNamespace: \"blog\",\n envKeys: [],\n routes: [\n { segment: \"[locale]/blog\", exports: { default: \"BlogListView\" } },\n { segment: \"[locale]/blog/[slug]\", exports: { default: \"BlogPostView\" } },\n ],\n apiRoutes: [\n { segment: \"api/blog\", methods: [\"GET\", \"POST\"] },\n { segment: \"api/blog/[slug]\", methods: [\"GET\", \"PATCH\", \"DELETE\"] },\n { segment: \"api/blog/[slug]/related\", methods: [\"GET\"] },\n ],\n};\n","/**\r\n * feat-blog — Next.js App Router API handler (GET /api/blog)\r\n *\r\n * Consuming projects can create a 2-line stub:\r\n *\r\n * ```ts\r\n * // app/api/blog/route.ts\r\n * export { GET } from \"@mohasinac/feat-blog\";\r\n * ```\r\n */\r\n\r\nimport { NextResponse } from \"next/server.js\";\r\nimport { getProviders } from \"@mohasinac/contracts\";\r\nimport type {\r\n BlogPost,\r\n BlogListResponse,\r\n BlogListMeta,\r\n} from \"../types/index.js\";\r\n\r\nfunction param(url: URL, key: string): string | null {\r\n return url.searchParams.get(key);\r\n}\r\n\r\nfunction numParam(url: URL, key: string, fallback: number): number {\r\n const v = url.searchParams.get(key);\r\n const n = v !== null ? Number(v) : NaN;\r\n return Number.isFinite(n) ? n : fallback;\r\n}\r\n\r\n// ─── GET /api/blog ────────────────────────────────────────────────────────────\r\n\r\nexport async function GET(request: Request): Promise<NextResponse> {\r\n try {\r\n const url = new URL(request.url);\r\n const page = numParam(url, \"page\", 1);\r\n const perPage = numParam(url, \"perPage\", 20);\r\n const sort = param(url, \"sort\") ?? \"-publishedAt\";\r\n\r\n const parts: string[] = [];\r\n const category = param(url, \"category\");\r\n if (category) parts.push(`category==${category}`);\r\n const q = param(url, \"q\");\r\n if (q) parts.push(`title@=*${q}`);\r\n const featured = param(url, \"featured\");\r\n if (featured === \"true\") parts.push(\"isFeatured==true\");\r\n const status = param(url, \"status\") ?? \"published\";\r\n parts.push(`status==${status}`);\r\n const filters = parts.join(\",\");\r\n\r\n const { db } = getProviders();\r\n if (!db) {\r\n return NextResponse.json(\r\n { success: false, error: \"Database provider not registered\" },\r\n { status: 503 },\r\n );\r\n }\r\n\r\n const repo = db.getRepository<BlogPost>(\"blogPosts\");\r\n const result = await repo.findAll({ filters, sort, page, perPage });\r\n\r\n const meta: BlogListMeta = {\r\n total: result.total,\r\n page: result.page,\r\n pageSize: result.perPage,\r\n totalPages: result.totalPages,\r\n hasMore: result.page < result.totalPages,\r\n };\r\n const body: BlogListResponse = {\r\n posts: result.data,\r\n meta,\r\n };\r\n\r\n return NextResponse.json({ success: true, data: body });\r\n } catch (error) {\r\n console.error(\"[feat-blog] GET /api/blog failed\", error);\r\n return NextResponse.json(\r\n { success: false, error: \"Failed to fetch blog posts\" },\r\n { status: 500 },\r\n );\r\n }\r\n}\r\n","/**\n * feat-blog — single-post route handler (GET /api/blog/[slug])\n *\n * Consuming projects create a 2-line stub:\n *\n * ```ts\n * // app/api/blog/[slug]/route.ts\n * export { GET } from \"@mohasinac/feat-blog\"; // re-exported as blogSlugGET\n * ```\n */\n\nimport { NextResponse } from \"next/server.js\";\nimport { getProviders } from \"@mohasinac/contracts\";\nimport { BlogRepository } from \"../../repository/blog.repository.js\";\nimport type { BlogPost } from \"../../types/index.js\";\n\ntype RouteContext = { params: Promise<{ slug: string }> };\n\nexport interface BlogPostDetailResponse {\n post: BlogPost;\n related: BlogPost[];\n}\n\n// ─── GET /api/blog/[slug] ─────────────────────────────────────────────────────\n\nexport async function GET(\n _request: Request,\n context: RouteContext,\n): Promise<NextResponse> {\n try {\n const { slug } = await context.params;\n\n const { db } = getProviders();\n if (!db) {\n return NextResponse.json(\n { success: false, error: \"Database provider not registered\" },\n { status: 503 },\n );\n }\n\n const blogRepo = new BlogRepository(\n db.getRepository<BlogPost>(\"blogPosts\"),\n );\n\n const post = await blogRepo.findBySlug(slug);\n if (!post) {\n return NextResponse.json(\n { success: false, error: \"Blog post not found\" },\n { status: 404 },\n );\n }\n\n // Increment view count fire-and-forget — must not block response\n db.getRepository<BlogPost>(\"blogPosts\")\n .update(post.id, { views: (post.views ?? 0) + 1 } as Partial<BlogPost>)\n .catch(() => {});\n\n // Related posts: same category, latest 3, excluding current\n const relatedResult = await blogRepo.findByCategory(post.category, 1, 4);\n const related = relatedResult.data\n .filter((p) => p.id !== post.id)\n .slice(0, 3);\n\n const body: BlogPostDetailResponse = { post, related };\n return NextResponse.json({ success: true, data: body });\n } catch (error) {\n console.error(\"[feat-blog] GET /api/blog/[slug] failed\", error);\n return NextResponse.json(\n { success: false, error: \"Failed to fetch blog post\" },\n { status: 500 },\n );\n }\n}\n"]}