@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/reviews/hooks/useReviews.ts","../../../src/ui/components/Semantic.tsx","../../../src/ui/components/Div.tsx","../../../src/ui/components/Typography.tsx","../../../src/ui/components/Skeleton.tsx","../../../node_modules/shared/src/utils/mergeClasses.ts","../../../node_modules/shared/src/utils/toKebabCase.ts","../../../node_modules/shared/src/utils/toCamelCase.ts","../../../node_modules/shared/src/utils/toPascalCase.ts","../../../node_modules/lucide-react/src/defaultAttributes.ts","../../../node_modules/shared/src/utils/hasA11yProp.ts","../../../node_modules/lucide-react/src/context.ts","../../../node_modules/lucide-react/src/Icon.ts","../../../node_modules/lucide-react/src/createLucideIcon.ts","../../../node_modules/lucide-react/src/icons/loader-circle.ts","../../../node_modules/lucide-react/src/icons/star.ts","../../../node_modules/lucide-react/src/icons/x.ts","../../../src/ui/components/Button.tsx","../../../src/ui/components/IconButton.tsx","../../../src/ui/components/Accordion.tsx","../../../src/contracts/registry.ts","../../../src/contracts/table.ts","../../../src/ui/components/Pagination.tsx","../../../src/ui/components/Modal.tsx","../../../src/ui/components/StarRating.tsx","../../../src/ui/components/Layout.tsx","../../../src/features/reviews/components/ReviewsList.tsx","../../../src/features/reviews/components/ReviewSummary.tsx","../../../src/features/reviews/components/ReviewModal.tsx","../../../src/features/reviews/components/ReviewsListView.tsx","../../../src/features/reviews/schemas/index.ts","../../../src/features/reviews/columns/index.ts","../../../src/features/reviews/repository/reviews.repository.ts","../../../src/features/reviews/manifest.ts","../../../src/next/api/routeHandler.ts","../../../src/next/request-helpers.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/reviews/api/route.ts","../../../src/features/reviews/api/%5Bid%5D/route.ts"],"names":["useQuery","React","jsx","jsxs","Fragment","createContext","useContext","forwardRef","_a","createElement","_b","__iconNode","twMerge","SIZE_CLASSES","useId","useRef","useEffect","useCallback","createPortal","useState","z","NextResponse","response","totalPages","body","GET"],"mappings":"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","file":"index.cjs","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 { ReviewListResponse, ReviewListParams } from \"../types\";\n\ninterface UseReviewsOptions {\n initialData?: ReviewListResponse;\n enabled?: boolean;\n}\n\nexport function useReviews(\n params: ReviewListParams = {},\n opts?: UseReviewsOptions,\n) {\n const sp = new URLSearchParams();\n if (params.productId) sp.set(\"productId\", params.productId);\n if (params.userId) sp.set(\"userId\", params.userId);\n if (params.status) sp.set(\"status\", params.status);\n if (params.rating) sp.set(\"rating\", String(params.rating));\n if (params.featured !== undefined)\n sp.set(\"featured\", String(params.featured));\n if (params.page) sp.set(\"page\", String(params.page));\n if (params.perPage) sp.set(\"perPage\", String(params.perPage));\n if (params.sort) sp.set(\"sort\", params.sort);\n const qs = sp.toString();\n\n const query = useQuery<ReviewListResponse>({\n queryKey: [\"reviews\", qs],\n queryFn: () =>\n apiClient.get<ReviewListResponse>(`/api/reviews${qs ? `?${qs}` : \"\"}`),\n initialData: opts?.initialData,\n enabled: opts?.enabled,\n });\n\n return {\n reviews: query.data?.items ?? [],\n total: query.data?.total ?? 0,\n totalPages: query.data?.totalPages ?? 1,\n hasMore: query.data?.hasMore ?? false,\n averageRating: query.data?.averageRating,\n ratingDistribution: query.data?.ratingDistribution,\n isLoading: query.isLoading,\n error: query.error,\n refetch: query.refetch,\n };\n}\n\ninterface UseProductReviewsOptions {\n page?: number;\n pageSize?: number;\n enabled?: boolean;\n}\n\nexport function useProductReviews(\n productId: string,\n opts?: UseProductReviewsOptions,\n) {\n return useReviews(\n {\n productId,\n status: \"approved\",\n page: opts?.page,\n perPage: opts?.pageSize,\n },\n { enabled: opts?.enabled },\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","\"use client\";\n\nimport React from \"react\";\n\n/**\n * Skeleton — content placeholder with pulse or wave animation.\n *\n * Extracted from src/components/ui/Skeleton.tsx for @mohasinac/ui.\n * Wave animation uses a plain <style> element (no styled-jsx dependency).\n */\n\nexport interface SkeletonProps {\n variant?: \"text\" | \"circular\" | \"rectangular\";\n width?: string | number;\n height?: string | number;\n className?: string;\n animation?: \"pulse\" | \"wave\" | \"none\";\n}\n\n// bgTertiary inlined from THEME_CONSTANTS.themed.bgTertiary\nconst BG_TERTIARY = \"bg-zinc-100 dark:bg-slate-800\";\n\nconst WAVE_CSS = `\n@keyframes appkit-skeleton-wave {\n 0% { transform: translateX(-100%); }\n 50%, 100% { transform: translateX(100%); }\n}\n.appkit-skeleton-wave {\n position: relative;\n overflow: hidden;\n}\n.appkit-skeleton-wave::after {\n content: \"\";\n position: absolute;\n top: 0; left: 0; right: 0; bottom: 0;\n background: linear-gradient(90deg, transparent, rgba(255,255,255,0.5), transparent);\n animation: appkit-skeleton-wave 1.5s infinite;\n}\n`;\n\nexport function Skeleton({\n variant = \"text\",\n width,\n height,\n className = \"\",\n animation = \"pulse\",\n}: SkeletonProps) {\n const variantClass = variant === \"circular\" ? \"rounded-full\" : \"rounded\";\n\n const defaultSize = {\n circular: { width: \"40px\", height: \"40px\" },\n rectangular: { width: \"100%\", height: \"140px\" },\n text: { width: \"100%\", height: \"1em\" },\n }[variant];\n\n const animationClass = {\n pulse: \"animate-pulse\",\n wave: \"appkit-skeleton-wave\",\n none: \"\",\n }[animation];\n\n const style: React.CSSProperties = {\n width: width ?? defaultSize.width,\n height: height ?? defaultSize.height,\n };\n\n return (\n <>\n {animation === \"wave\" && (\n <style dangerouslySetInnerHTML={{ __html: WAVE_CSS }} />\n )}\n <div\n className={`${BG_TERTIARY} ${variantClass} ${animationClass} ${className}`}\n style={style}\n role=\"status\"\n aria-label=\"Loading\"\n >\n <span className=\"sr-only\">Loading...</span>\n </div>\n </>\n );\n}\n","/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n","/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n","/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n","import { CamelToPascal } from '../utility-types';\nimport { toCamelCase } from './toCamelCase';\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n","export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n","/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record<string, any>) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n\n return false;\n};\n","'use client';\n\nimport { createContext, createElement, type ReactNode, useContext, useMemo } from 'react';\nimport { LucideProps } from './types';\n\ntype LucideConfig = {\n size: number;\n color: string;\n strokeWidth: number;\n absoluteStrokeWidth: boolean;\n className: string;\n};\n\nconst LucideContext = createContext<LucideProps>({});\n\ntype LucideProviderProps = {\n children: ReactNode;\n} & Partial<LucideConfig>;\n\nexport function LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className,\n}: LucideProviderProps) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className,\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, className],\n );\n\n return createElement(LucideContext.Provider, { value }, children);\n}\n\nexport const useLucideContext = () => useContext(LucideContext);\n","'use client';\n\nimport { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\nimport { useLucideContext } from './context';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n { color, size, strokeWidth, absoluteStrokeWidth, className = '', children, iconNode, ...rest },\n ref,\n ) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n color: contextColor = 'currentColor',\n className: contextClass = '',\n } = useLucideContext() ?? {};\n\n const calculatedStrokeWidth =\n absoluteStrokeWidth ?? contextAbsoluteStrokeWidth\n ? (Number(strokeWidth ?? contextStrokeWidth) * 24) / Number(size ?? contextSize)\n : strokeWidth ?? contextStrokeWidth;\n\n return createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size ?? contextSize ?? defaultAttributes.width,\n height: size ?? contextSize ?? defaultAttributes.height,\n stroke: color ?? contextColor,\n strokeWidth: calculatedStrokeWidth,\n className: mergeClasses('lucide', contextClass, className),\n ...(!children && !hasA11yProp(rest) && { 'aria-hidden': 'true' }),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n );\n },\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className,\n ),\n ...props,\n }),\n );\n\n Component.displayName = toPascalCase(iconName);\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: '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 [\n 'path',\n {\n d: 'M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z',\n key: 'r04s7s',\n },\n ],\n];\n\n/**\n * @component @name Star\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTEuNTI1IDIuMjk1YS41My41MyAwIDAgMSAuOTUgMGwyLjMxIDQuNjc5YTIuMTIzIDIuMTIzIDAgMCAwIDEuNTk1IDEuMTZsNS4xNjYuNzU2YS41My41MyAwIDAgMSAuMjk0LjkwNGwtMy43MzYgMy42MzhhMi4xMjMgMi4xMjMgMCAwIDAtLjYxMSAxLjg3OGwuODgyIDUuMTRhLjUzLjUzIDAgMCAxLS43NzEuNTZsLTQuNjE4LTIuNDI4YTIuMTIyIDIuMTIyIDAgMCAwLTEuOTczIDBMNi4zOTYgMjEuMDFhLjUzLjUzIDAgMCAxLS43Ny0uNTZsLjg4MS01LjEzOWEyLjEyMiAyLjEyMiAwIDAgMC0uNjExLTEuODc5TDIuMTYgOS43OTVhLjUzLjUzIDAgMCAxIC4yOTQtLjkwNmw1LjE2NS0uNzU1YTIuMTIyIDIuMTIyIDAgMCAwIDEuNTk3LTEuMTZ6IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/star\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Star = createLucideIcon('star', __iconNode);\n\nexport default Star;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n];\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![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","import React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nconst BASE =\r\n \"inline-flex items-center justify-center flex-shrink-0 transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed\";\r\n\r\nconst SIZES = {\r\n sm: \"h-8 w-8 rounded-lg\",\r\n md: \"h-10 w-10 rounded-xl\",\r\n lg: \"h-12 w-12 rounded-xl\",\r\n} as const;\r\n\r\nconst VARIANTS = {\r\n ghost:\r\n \"text-zinc-600 hover:bg-zinc-100 dark:text-zinc-400 dark:hover:bg-zinc-800 focus:ring-zinc-400\",\r\n outline:\r\n \"border border-zinc-200 dark:border-zinc-700 bg-white dark:bg-transparent text-zinc-700 dark:text-zinc-300 hover:bg-zinc-50 dark:hover:bg-zinc-800 focus:ring-zinc-400\",\r\n primary:\r\n \"bg-primary-600 text-white hover:bg-primary-700 focus:ring-primary-500 dark:bg-secondary-500 dark:hover:bg-secondary-400\",\r\n danger:\r\n \"text-red-600 hover:bg-red-50 dark:hover:bg-red-900/20 focus:ring-red-500\",\r\n} as const;\r\n\r\nexport interface IconButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n /** Required — text alternative for screen readers. Also shown as tooltip. */\r\n \"aria-label\": string;\r\n /** Icon element to display (usually a Lucide icon). Falls back to children. */\r\n icon?: React.ReactNode;\r\n size?: keyof typeof SIZES;\r\n variant?: keyof typeof VARIANTS;\r\n}\r\n\r\n/**\r\n * Icon-only button. `aria-label` is required — will throw in development if omitted.\r\n *\r\n * @example\r\n * ```tsx\r\n * <Tooltip label=\"Add to wishlist\">\r\n * <IconButton aria-label=\"Add to wishlist\" icon={<HeartIcon />} onClick={handleWishlist} />\r\n * </Tooltip>\r\n * ```\r\n */\r\nexport function IconButton({\r\n size = \"md\",\r\n variant = \"ghost\",\r\n className = \"\",\r\n icon,\r\n children,\r\n ...props\r\n}: IconButtonProps) {\r\n if (\r\n process.env.NODE_ENV !== \"production\" &&\r\n !props[\"aria-label\"]\r\n ) {\r\n throw new Error(\r\n '[IconButton] Missing required \"aria-label\" prop. ' +\r\n \"Add aria-label=\\\"...\\\" to the button or wrap with <Tooltip label=\\\"...\\\">.\",\r\n );\r\n }\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n className={twMerge(BASE, SIZES[size], VARIANTS[variant], className)}\r\n {...props}\r\n >\r\n {icon ?? children}\r\n </button>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { 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 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, { useState } from \"react\";\nimport { Star } from \"lucide-react\";\nimport { Span } from \"./Typography\";\n\n/**\n * StarRating — 0–5 star display/interactive rating.\n *\n * Standalone @mohasinac/ui primitive. No app-specific imports.\n * Use `readOnly` for display, omit it for interactive mode with hover preview.\n */\n\nexport interface StarRatingProps {\n value?: number;\n onChange?: (value: number) => void;\n max?: number;\n size?: \"sm\" | \"md\" | \"lg\";\n readOnly?: boolean;\n className?: string;\n /** Accessible label describing what is being rated */\n label?: string;\n}\n\nconst SIZE_PX = { sm: \"w-4 h-4\", md: \"w-5 h-5\", lg: \"w-6 h-6\" } as const;\n\nexport function StarRating({\n value = 0,\n onChange,\n max = 5,\n size = \"md\",\n readOnly = false,\n className = \"\",\n label,\n}: StarRatingProps) {\n const [hovered, setHovered] = useState<number | null>(null);\n\n const displayed = hovered ?? value;\n\n return (\n <Span\n className={`inline-flex items-center gap-0.5 ${className}`}\n role={readOnly ? \"img\" : \"group\"}\n aria-label={label ?? `${value} out of ${max} stars`}\n >\n {Array.from({ length: max }, (_, i) => {\n const starValue = i + 1;\n const filled = starValue <= displayed;\n const half = !filled && starValue - 0.5 <= displayed;\n\n return (\n <Span\n key={starValue}\n className={readOnly ? undefined : \"cursor-pointer\"}\n onClick={() => !readOnly && onChange?.(starValue)}\n onMouseEnter={() => !readOnly && setHovered(starValue)}\n onMouseLeave={() => !readOnly && setHovered(null)}\n aria-hidden={!readOnly ? \"true\" : undefined}\n >\n <Star\n className={[\n SIZE_PX[size],\n \"transition-colors duration-100\",\n filled || half\n ? \"fill-amber-400 text-amber-400\"\n : \"fill-transparent text-zinc-300 dark:text-slate-600\",\n !readOnly && !filled\n ? \"hover:fill-amber-300 hover:text-amber-300\"\n : \"\",\n ].join(\" \")}\n aria-hidden=\"true\"\n />\n </Span>\n );\n })}\n\n {/* Screen-reader-only value for interactive mode */}\n {!readOnly && (\n <Span className=\"sr-only\">\n {value} out of {max}\n </Span>\n )}\n </Span>\n );\n}\n","import React from \"react\";\n\n/**\n * Layout Primitives — Container, Stack, Row, Grid\n *\n * Thin component wrappers that turn semantic prop names into the correct\n * Tailwind class strings from the app's THEME_CONSTANTS token map.\n * Eliminates repeated inline class strings like \"grid grid-cols-1 sm:grid-cols-2\n * lg:grid-cols-3 gap-4\" and \"flex flex-row items-center justify-between gap-2\".\n *\n * Token maps are inlined here (like UI_THEME in Typography.tsx) so the package\n * stays independent of the host app's @/constants import path.\n *\n * @example\n * ```tsx\n * // Before\n * <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\n * <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4\">\n * <div className=\"flex flex-row items-center justify-between gap-2\">\n * <div className=\"flex flex-col gap-4\">\n *\n * // After\n * <Container>\n * <Grid cols={3} gap=\"md\">\n * <Row justify=\"between\" gap=\"sm\">\n * <Stack gap=\"md\">\n * ```\n */\n\n// ─── Token maps ──────────────────────────────────────────────────────────────\n\n/**\n * Gap tokens — maps to `gap-*` Tailwind classes.\n * Mirrors THEME_CONSTANTS.spacing.gap in the host app.\n */\nconst GAP_MAP = {\n none: \"\",\n px: \"gap-px\",\n xs: \"gap-1\",\n sm: \"gap-2\",\n \"2.5\": \"gap-2.5\",\n \"3\": \"gap-3\",\n md: \"gap-4\",\n \"5\": \"gap-5\",\n lg: \"gap-6\",\n xl: \"gap-8\",\n \"2xl\": \"gap-12\",\n} as const;\n\nexport type GapKey = keyof typeof GAP_MAP;\n\n/**\n * Page container sizes.\n * Mirrors THEME_CONSTANTS.page.container in the host app.\n */\nconst CONTAINER_MAP = {\n /** `max-w-3xl` — blog posts, legal / policy pages */\n sm: \"max-w-3xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** `max-w-4xl` — narrow content, contact, about */\n md: \"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** `max-w-5xl` — medium content, checkout, help */\n lg: \"max-w-5xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** `max-w-6xl` — product detail, cart */\n xl: \"max-w-6xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** `max-w-7xl` — main content grids (default) */\n \"2xl\": \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** `max-w-screen-2xl` — full-bleed wide content */\n full: \"max-w-screen-2xl mx-auto px-4 sm:px-6 lg:px-8\",\n /** `max-w-screen-2xl` — wide store/seller layouts (compact px) */\n wide: \"max-w-screen-2xl mx-auto px-4 sm:px-6\",\n /** `max-w-[1920px]` — ultra-wide / 4K displays */\n ultra: \"max-w-[1920px] mx-auto px-4 sm:px-6 lg:px-8\",\n} as const;\n\nexport type ContainerSize = keyof typeof CONTAINER_MAP;\n\nexport type ContainerSizeValue = (typeof CONTAINER_MAP)[ContainerSize];\n\n/**\n * Responsive grid column presets.\n * Mirrors THEME_CONSTANTS.grid in the host app.\n */\nexport const GRID_MAP = {\n /** Single column */\n 1: \"grid grid-cols-1\",\n /** 1 → 2 */\n 2: \"grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-2 2xl:grid-cols-2\",\n /** 1 → 2 → 3 → 4 on widescreen */\n 3: \"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-3 2xl:grid-cols-4\",\n /** 1 → 2 → 3 → 4 → 5 on widescreen */\n 4: \"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5\",\n /** 1 → 2 → 3 → 4 → 5 */\n 5: \"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-4 2xl:grid-cols-5\",\n /** 2 → 3 → 4 → 5 → 6 */\n 6: \"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 xl:grid-cols-5 2xl:grid-cols-6\",\n /**\n * Generic card grid — 1 col on portrait mobile → 5 on ultrawide.\n * Starts at 1 so product cards are readable even on 320 px handsets.\n */\n cards:\n \"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-4 2xl:grid-cols-5\",\n /** Auto-fill product cards — min 200 px */\n productCards: \"grid grid-cols-[repeat(auto-fill,minmax(200px,1fr))] gap-6\",\n /** Auto-fill product cards (compact) — min 220 px */\n productCardsCompact:\n \"grid grid-cols-[repeat(auto-fill,minmax(220px,1fr))] gap-4\",\n /** Auto-fill store cards — min 220 px */\n storeCards: \"grid grid-cols-[repeat(auto-fill,minmax(220px,1fr))] gap-6\",\n /** Auto-fill category tiles — min 130 px */\n categoryCards: \"grid grid-cols-[repeat(auto-fill,minmax(130px,1fr))] gap-4\",\n /** Auto-fill coupon/promo cards — min 264 px */\n couponCards: \"grid grid-cols-[repeat(auto-fill,minmax(264px,1fr))] gap-6\",\n /** Auto-fill address / wide cards — min 300 px */\n addressCards: \"grid grid-cols-[repeat(auto-fill,minmax(300px,1fr))] gap-4\",\n /** Auto-fill KPI/stat tiles — min 180 px */\n statTiles: \"grid grid-cols-[repeat(auto-fill,minmax(180px,1fr))] gap-4\",\n /** Auto-fill account nav tiles — min 160 px */\n navTiles: \"grid grid-cols-[repeat(auto-fill,minmax(160px,1fr))] gap-4\",\n /** Equal halves on md+ */\n halves: \"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-2 2xl:grid-cols-2\",\n /** 2fr / 1fr split on md+ */\n twoThird: \"grid grid-cols-1 md:grid-cols-[2fr_1fr]\",\n /** 1fr / 2fr split on md+ */\n oneThird: \"grid grid-cols-1 md:grid-cols-[1fr_2fr]\",\n /** Fixed 280px left sidebar + 1fr on lg+ */\n sidebar: \"grid grid-cols-1 lg:grid-cols-[280px_1fr]\",\n /** 1fr + fixed 280px right sidebar on lg+ */\n sidebarRight: \"grid grid-cols-1 lg:grid-cols-[1fr_280px]\",\n /** Fixed 320px left sidebar + 1fr on lg+ (admin layout) */\n sidebarWide: \"grid grid-cols-1 lg:grid-cols-[320px_1fr]\",\n /** Product detail triplet: gallery | info | actions sidebar */\n productDetailTriplet:\n \"grid grid-cols-1 lg:grid-cols-[1fr_1fr_280px] xl:grid-cols-[1fr_1fr_300px] 2xl:grid-cols-[1fr_1fr_320px] gap-6 lg:gap-8\",\n /** CSS auto-fill, min 200px columns */\n autoSm: \"grid grid-cols-[repeat(auto-fill,minmax(200px,1fr))]\",\n /** CSS auto-fill, min 280px columns */\n autoMd: \"grid grid-cols-[repeat(auto-fill,minmax(280px,1fr))]\",\n /** CSS auto-fill, min 360px columns */\n autoLg: \"grid grid-cols-[repeat(auto-fill,minmax(360px,1fr))]\",\n} as const;\n\nexport type GridCols = keyof typeof GRID_MAP;\n\n// Alignment helpers shared across Stack and Row\nconst ITEMS_MAP = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n baseline: \"items-baseline\",\n} as const;\n\ntype ItemsAlign = keyof typeof ITEMS_MAP;\n\nconst JUSTIFY_MAP = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n around: \"justify-around\",\n evenly: \"justify-evenly\",\n} as const;\n\ntype JustifyContent = keyof typeof JUSTIFY_MAP;\n\n// ─── Container ────────────────────────────────────────────────────────────────\n\n/**\n * Page-level container with max-width + centering + responsive horizontal padding.\n * Replaces repeated `max-w-7xl mx-auto px-4 sm:px-6 lg:px-8` strings.\n *\n * @example\n * ```tsx\n * <Container>...</Container> // max-w-7xl (default)\n * <Container size=\"lg\">...</Container> // max-w-5xl\n * <Container size=\"full\" as=\"main\">...</Container>\n * ```\n */\nexport interface ContainerProps extends React.HTMLAttributes<HTMLElement> {\n /**\n * Max-width breakpoint preset.\n * - `sm` → `max-w-3xl` (blog / policy)\n * - `md` → `max-w-4xl` (contact / about)\n * - `lg` → `max-w-5xl` (checkout / help)\n * - `xl` → `max-w-6xl` (product detail / cart)\n * - `2xl` → `max-w-7xl` (main content grids — **default**)\n * - `full` → `max-w-screen-2xl` (full-bleed)\n * - `wide` → `max-w-screen-2xl` (compact px, no lg step)\n * - `ultra` → `max-w-[1920px]` (ultra-wide / 4K displays)\n */\n size?: ContainerSize;\n /** Render as a different element (e.g. `\"main\"`, `\"section\"`). Defaults to `\"div\"`. */\n as?: React.ElementType;\n children?: React.ReactNode;\n}\n\nexport function Container({\n size = \"2xl\",\n as,\n className = \"\",\n children,\n ...props\n}: ContainerProps) {\n const Tag = (as ?? \"div\") as React.ElementType;\n return (\n <Tag\n className={[CONTAINER_MAP[size], className].filter(Boolean).join(\" \")}\n {...props}\n >\n {children}\n </Tag>\n );\n}\n\n// ─── Stack ────────────────────────────────────────────────────────────────────\n\n/**\n * Vertical flex column. Use instead of `<div className=\"flex flex-col gap-4\">`.\n *\n * @example\n * ```tsx\n * <Stack gap=\"sm\">\n * <Text>Line one</Text>\n * <Text>Line two</Text>\n * </Stack>\n *\n * // As a list\n * <Stack as=\"ul\" gap=\"xs\">\n * <Li>Item</Li>\n * </Stack>\n * ```\n */\nexport interface StackProps extends React.HTMLAttributes<HTMLElement> {\n /** Space between children. Defaults to `\"md\"` (`gap-4`). */\n gap?: GapKey;\n /** Centers children on both axes (`items-center justify-center`). */\n centered?: boolean;\n /** Cross-axis (horizontal) alignment. Defaults to `\"stretch\"`. */\n align?: Extract<ItemsAlign, \"start\" | \"center\" | \"end\" | \"stretch\">;\n /** Render as a different element. Defaults to `\"div\"`. */\n as?: React.ElementType;\n children?: React.ReactNode;\n}\n\nexport function Stack({\n gap = \"md\",\n centered = false,\n align = \"stretch\",\n as,\n className = \"\",\n children,\n ...props\n}: StackProps) {\n const Tag = (as ?? \"div\") as React.ElementType;\n const classes = [\n \"flex flex-col\",\n GAP_MAP[gap],\n centered ? \"items-center justify-center\" : \"\",\n !centered && align !== \"stretch\" ? ITEMS_MAP[align] : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <Tag className={classes} {...props}>\n {children}\n </Tag>\n );\n}\n\n// ─── Row ─────────────────────────────────────────────────────────────────────\n\n/**\n * Horizontal flex row. Use instead of `<div className=\"flex items-center gap-3\">`.\n *\n * @example\n * ```tsx\n * <Row gap=\"sm\" justify=\"between\">\n * <Heading level={3}>Title</Heading>\n * <Button>Action</Button>\n * </Row>\n *\n * <Row gap=\"xs\" wrap>\n * <Badge>tag</Badge>\n * <Badge>other</Badge>\n * </Row>\n * ```\n */\nexport interface RowProps extends React.HTMLAttributes<HTMLElement> {\n /** Space between children. Defaults to `\"md\"` (`gap-4`). */\n gap?: GapKey;\n /** Centers children on both axes (`items-center justify-center`). */\n centered?: boolean;\n /** Cross-axis (vertical) alignment. Defaults to `\"center\"`. */\n align?: ItemsAlign;\n /** Main-axis (horizontal) distribution. Defaults to `\"start\"`. */\n justify?: JustifyContent;\n /** Allow children to wrap onto multiple lines. */\n wrap?: boolean;\n /** Render as a different element. Defaults to `\"div\"`. */\n as?: React.ElementType;\n children?: React.ReactNode;\n}\n\nexport function Row({\n gap = \"md\",\n centered = false,\n align = \"center\",\n justify = \"start\",\n wrap = false,\n as,\n className = \"\",\n children,\n ...props\n}: RowProps) {\n const Tag = (as ?? \"div\") as React.ElementType;\n const classes = [\n \"flex flex-row\",\n centered ? \"items-center justify-center\" : ITEMS_MAP[align],\n !centered && justify !== \"start\" ? JUSTIFY_MAP[justify] : \"\",\n GAP_MAP[gap],\n wrap ? \"flex-wrap\" : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <Tag className={classes} {...props}>\n {children}\n </Tag>\n );\n}\n\n// ─── Grid ─────────────────────────────────────────────────────────────────────\n\n/**\n * Responsive CSS grid. Use instead of `<div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4\">`.\n *\n * @example\n * ```tsx\n * <Grid cols={3} gap=\"md\">\n * <ProductCard />\n * <ProductCard />\n * </Grid>\n *\n * <Grid cols=\"sidebar\" gap=\"lg\">\n * <Aside>Filters</Aside>\n * <Main>Results</Main>\n * </Grid>\n * ```\n */\nexport interface GridProps extends React.HTMLAttributes<HTMLElement> {\n /**\n * Column preset.\n * - Numbers `1`–`6` → mobile-first responsive stacks\n * - `\"halves\"` → equal 2-col on md+\n * - `\"sidebar\"` / `\"sidebarRight\"` / `\"sidebarWide\"` → fixed+flexible splits\n * - `\"twoThird\"` / `\"oneThird\"` → 2fr/1fr splits\n * - `\"autoSm\"` / `\"autoMd\"` / `\"autoLg\"` → CSS auto-fill grids\n * - Omit (or `undefined`) to use a raw `grid` base and supply columns via\n * the `className` prop directly (e.g. `className=\"grid-cols-2\"`). Useful\n * for fixed non-responsive column counts (form field pairs, button rows).\n */\n cols?: GridCols;\n /** Space between grid cells. Defaults to `\"md\"` (`gap-4`). */\n gap?: GapKey;\n /** Render as a different element. Defaults to `\"div\"`. */\n as?: React.ElementType;\n children?: React.ReactNode;\n}\n\nexport function Grid({\n cols,\n gap = \"md\",\n as,\n className = \"\",\n children,\n ...props\n}: GridProps) {\n const Tag = (as ?? \"div\") as React.ElementType;\n // When cols is omitted callers supply grid-cols-* themselves via className.\n const baseClass = cols !== undefined ? GRID_MAP[cols] : \"grid\";\n const classes = [baseClass, GAP_MAP[gap], className]\n .filter(Boolean)\n .join(\" \");\n return (\n <Tag className={classes} {...props}>\n {children}\n </Tag>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport {\n Button,\n Div,\n Heading,\n Pagination,\n Row,\n Skeleton,\n Span,\n Text,\n} from \"@mohasinac/ui\";\nimport { StarRating } from \"@mohasinac/ui\";\nimport type { Review } from \"../types\";\n\n// ─── ReviewCard ───────────────────────────────────────────────────────────────\n\nexport interface ReviewCardProps {\n review: Review;\n className?: string;\n}\n\nexport function ReviewCard({ review, className = \"\" }: ReviewCardProps) {\n const date = review.createdAt\n ? new Date(review.createdAt).toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n })\n : \"\";\n\n const initials = review.userName.charAt(0).toUpperCase();\n\n return (\n <Div\n className={`rounded-xl border border-neutral-200 bg-white p-5 dark:border-zinc-700 dark:bg-zinc-900 ${className}`}\n >\n <Div className=\"flex items-start gap-3\">\n {review.userAvatar ? (\n <Div\n role=\"img\"\n aria-label={review.userName}\n className=\"h-9 w-9 flex-shrink-0 rounded-full bg-center bg-cover\"\n style={{ backgroundImage: `url(${review.userAvatar})` }}\n />\n ) : (\n <Div className=\"flex h-9 w-9 flex-shrink-0 items-center justify-center rounded-full bg-neutral-200 text-sm font-medium text-neutral-600 dark:bg-zinc-700 dark:text-zinc-300\">\n {initials}\n </Div>\n )}\n <Div className=\"flex-1 min-w-0\">\n <Row wrap gap=\"sm\">\n <Span className=\"font-medium text-neutral-900 dark:text-white\">\n {review.userName}\n </Span>\n {review.verified && (\n <Span className=\"rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-700 dark:bg-green-900/30 dark:text-green-400\">\n Verified\n </Span>\n )}\n {date && (\n <Span className=\"text-xs text-neutral-400 dark:text-zinc-500\">\n {date}\n </Span>\n )}\n </Row>\n <Div className=\"mt-1\">\n <StarRating value={review.rating} size=\"sm\" readOnly />\n </Div>\n </Div>\n </Div>\n\n {review.title && (\n <Heading\n level={4}\n className=\"mt-3 font-semibold text-neutral-900 dark:text-white\"\n >\n {review.title}\n </Heading>\n )}\n\n {review.comment && (\n <Text className=\"mt-2 text-sm leading-relaxed text-neutral-600 dark:text-zinc-400\">\n {review.comment}\n </Text>\n )}\n\n {review.images && review.images.length > 0 && (\n <Row wrap gap=\"sm\" className=\"mt-3\">\n {review.images.map((img, i) => (\n <Div\n key={i}\n role=\"img\"\n aria-label={`Review image ${i + 1}`}\n className=\"h-16 w-16 rounded-lg bg-center bg-cover border border-neutral-100 dark:border-zinc-700\"\n style={{ backgroundImage: `url(${img.thumbnailUrl ?? img.url})` }}\n />\n ))}\n </Row>\n )}\n\n {(review.helpfulCount ?? 0) > 0 && (\n <Text className=\"mt-3 text-xs text-neutral-400 dark:text-zinc-500\">\n {review.helpfulCount} found this helpful\n </Text>\n )}\n </Div>\n );\n}\n\n// ─── ReviewsList ──────────────────────────────────────────────────────────────\n\nexport interface ReviewsListProps {\n reviews: Review[];\n isLoading?: boolean;\n totalPages?: number;\n currentPage?: number;\n onPageChange?: (page: number) => void;\n emptyLabel?: string;\n}\n\nexport function ReviewsList({\n reviews,\n isLoading,\n totalPages = 1,\n currentPage = 1,\n onPageChange,\n emptyLabel = \"No reviews yet\",\n}: ReviewsListProps) {\n if (isLoading) {\n return (\n <Div className=\"space-y-4\">\n {Array.from({ length: 4 }).map((_, i) => (\n <Div\n key={i}\n className=\"rounded-xl border border-neutral-200 dark:border-zinc-700 p-5\"\n >\n <Div className=\"flex gap-3\">\n <Skeleton className=\"h-9 w-9 rounded-full\" />\n <Div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-24 rounded\" />\n <Skeleton className=\"h-3 w-16 rounded\" />\n </Div>\n </Div>\n <Div className=\"mt-3 space-y-1\">\n <Skeleton className=\"h-3 w-full rounded\" />\n <Skeleton className=\"h-3 w-3/4 rounded\" />\n </Div>\n </Div>\n ))}\n </Div>\n );\n }\n\n if (reviews.length === 0) {\n return (\n <Text className=\"py-12 text-center text-sm text-neutral-500 dark:text-zinc-500\">\n {emptyLabel}\n </Text>\n );\n }\n\n return (\n <Div className=\"space-y-6\">\n <Div className=\"space-y-4\">\n {reviews.map((review) => (\n <ReviewCard key={review.id} review={review} />\n ))}\n </Div>\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 )}\n </Div>\n );\n}\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Div, Span, Text } from \"@mohasinac/ui\";\r\nimport { StarRating } from \"@mohasinac/ui\";\r\n\r\n// ─── ReviewSummary ────────────────────────────────────────────────────────────\r\n\r\nexport interface ReviewSummaryProps {\r\n averageRating: number;\r\n totalReviews: number;\r\n /** Map of star value (1–5) → count. Example: { 5: 40, 4: 20, 3: 10, 2: 5, 1: 2 } */\r\n distribution: Record<number, number>;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * ReviewSummary — aggregate rating block with breakdown bars.\r\n *\r\n * Shows:\r\n * - Large average score + star display\r\n * - \"N reviews\" count\r\n * - Per-star percentage bars (5★ ... 1★)\r\n */\r\nexport function ReviewSummary({\r\n averageRating,\r\n totalReviews,\r\n distribution,\r\n className = \"\",\r\n}: ReviewSummaryProps) {\r\n const stars = [5, 4, 3, 2, 1];\r\n\r\n return (\r\n <Div\r\n className={`flex flex-col gap-4 sm:flex-row sm:items-center sm:gap-8 ${className}`}\r\n >\r\n {/* Score block */}\r\n <Div className=\"flex flex-col items-center gap-1 sm:items-start\">\r\n <Span className=\"text-5xl font-bold leading-none text-neutral-900 dark:text-white\">\r\n {averageRating.toFixed(1)}\r\n </Span>\r\n <StarRating value={averageRating} size=\"md\" readOnly />\r\n <Text className=\"text-sm text-neutral-500 dark:text-zinc-400\">\r\n {totalReviews.toLocaleString()} review\r\n {totalReviews !== 1 ? \"s\" : \"\"}\r\n </Text>\r\n </Div>\r\n\r\n {/* Breakdown bars */}\r\n <Div className=\"flex flex-1 flex-col gap-2\">\r\n {stars.map((star) => {\r\n const count = distribution[star] ?? 0;\r\n const pct = totalReviews > 0 ? Math.round((count / totalReviews) * 100) : 0;\r\n return (\r\n <Div key={star} className=\"flex items-center gap-2\">\r\n <Span className=\"w-4 text-right text-xs font-medium text-neutral-600 dark:text-zinc-400 tabular-nums\">\r\n {star}\r\n </Span>\r\n <Span className=\"text-yellow-400 text-xs\">★</Span>\r\n <Div\r\n className=\"flex-1 h-2 rounded-full bg-neutral-100 dark:bg-zinc-800 overflow-hidden\"\r\n role=\"progressbar\"\r\n aria-valuenow={pct}\r\n aria-valuemin={0}\r\n aria-valuemax={100}\r\n aria-label={`${star} star: ${pct}%`}\r\n >\r\n <Div\r\n className=\"h-full rounded-full bg-yellow-400 transition-all duration-300\"\r\n style={{ width: `${pct}%` }}\r\n />\r\n </Div>\r\n <Span className=\"w-8 text-right text-xs text-neutral-400 dark:text-zinc-500 tabular-nums\">\r\n {pct}%\r\n </Span>\r\n </Div>\r\n );\r\n })}\r\n </Div>\r\n </Div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useState } from \"react\";\r\nimport {\r\n Button,\r\n Div,\r\n Heading,\r\n IconButton,\r\n Modal,\r\n Row,\r\n Text,\r\n} from \"@mohasinac/ui\";\r\nimport { StarRating } from \"@mohasinac/ui\";\r\nimport type { Review } from \"../types\";\r\n\r\n// ─── ViewReviewModal ──────────────────────────────────────────────────────────\r\n\r\nexport interface ViewReviewModalProps {\r\n review: Review | null;\r\n isOpen: boolean;\r\n onClose: () => void;\r\n}\r\n\r\n/**\r\n * ViewReviewModal — full review details in a Modal overlay.\r\n * Shows all images, the full comment, and seller response if present.\r\n */\r\nexport function ViewReviewModal({\r\n review,\r\n isOpen,\r\n onClose,\r\n}: ViewReviewModalProps) {\r\n const [lightboxIdx, setLightboxIdx] = useState<number | null>(null);\r\n\r\n if (!review) return null;\r\n\r\n const date = review.createdAt\r\n ? new Date(review.createdAt).toLocaleDateString(\"en-US\", {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n })\r\n : \"\";\r\n\r\n return (\r\n <Modal isOpen={isOpen} onClose={onClose} title=\"Review Details\">\r\n <Div className=\"space-y-4\">\r\n {/* Author + rating */}\r\n <Div className=\"flex items-center gap-3\">\r\n {review.userAvatar ? (\r\n <Div\r\n role=\"img\"\r\n aria-label={review.userName}\r\n className=\"h-10 w-10 flex-shrink-0 rounded-full bg-center bg-cover\"\r\n style={{ backgroundImage: `url(${review.userAvatar})` }}\r\n />\r\n ) : (\r\n <Div className=\"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-full bg-neutral-200 text-sm font-medium text-neutral-600 dark:bg-zinc-700 dark:text-zinc-300\">\r\n {review.userName.charAt(0).toUpperCase()}\r\n </Div>\r\n )}\r\n <Div>\r\n <Div className=\"flex items-center gap-2\">\r\n <Text className=\"font-medium text-neutral-900 dark:text-white\">\r\n {review.userName}\r\n </Text>\r\n {review.verified && (\r\n <Text className=\"text-xs text-green-600 dark:text-green-400\">\r\n ✓ Verified purchase\r\n </Text>\r\n )}\r\n </Div>\r\n <Div className=\"flex items-center gap-2 mt-0.5\">\r\n <StarRating value={review.rating} size=\"sm\" readOnly />\r\n {date && (\r\n <Text className=\"text-xs text-neutral-400 dark:text-zinc-500\">\r\n {date}\r\n </Text>\r\n )}\r\n </Div>\r\n </Div>\r\n </Div>\r\n\r\n {/* Title + comment */}\r\n {review.title && (\r\n <Heading\r\n level={4}\r\n className=\"font-semibold text-neutral-900 dark:text-white\"\r\n >\r\n {review.title}\r\n </Heading>\r\n )}\r\n {review.comment && (\r\n <Text className=\"text-sm leading-relaxed text-neutral-600 dark:text-zinc-400\">\r\n {review.comment}\r\n </Text>\r\n )}\r\n\r\n {/* Images */}\r\n {review.images && review.images.length > 0 && (\r\n <Row wrap gap=\"sm\">\r\n {review.images.map((img, i) => (\r\n <IconButton\r\n key={i}\r\n aria-label={`View image ${i + 1}`}\r\n onClick={() => setLightboxIdx(i)}\r\n variant=\"ghost\"\r\n className={`h-20 w-20 rounded-lg border bg-center bg-cover transition hover:opacity-80 p-0 ${lightboxIdx === i ? \"ring-2 ring-primary-500\" : \"border-neutral-100 dark:border-zinc-700\"}`}\r\n style={{\r\n backgroundImage: `url(${img.thumbnailUrl ?? img.url})`,\r\n }}\r\n icon={<Div />}\r\n />\r\n ))}\r\n </Row>\r\n )}\r\n\r\n {/* Helpful */}\r\n {(review.helpfulCount ?? 0) > 0 && (\r\n <Text className=\"text-xs text-neutral-400 dark:text-zinc-500\">\r\n {review.helpfulCount} people found this helpful\r\n </Text>\r\n )}\r\n\r\n <Div className=\"flex justify-end pt-2\">\r\n <Button variant=\"ghost\" onClick={onClose}>\r\n Close\r\n </Button>\r\n </Div>\r\n </Div>\r\n </Modal>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Container, Div, Heading, Row, Text } from \"@mohasinac/ui\";\r\nimport { useReviews } from \"../hooks/useReviews\";\r\nimport type { Review, ReviewListParams, ReviewListResponse } from \"../types\";\r\n\r\nexport interface ReviewsListViewProps {\r\n /** Optional initial SSR data */\r\n initialData?: ReviewListResponse;\r\n /** Query params passed to useReviews */\r\n params?: ReviewListParams;\r\n /** Rendered inside the page header */\r\n renderHeader?: (total: number) => React.ReactNode;\r\n /** Render search input */\r\n renderSearch?: (\r\n value: string,\r\n onChange: (v: string) => void,\r\n ) => React.ReactNode;\r\n /** Render sort dropdown */\r\n renderSort?: (\r\n value: string,\r\n onChange: (v: string) => void,\r\n ) => React.ReactNode;\r\n /** Render filter panel */\r\n renderFilters?: () => React.ReactNode;\r\n /** Render active filter chips */\r\n renderActiveFilters?: () => React.ReactNode;\r\n /** Render the data table / grid */\r\n renderResults: (items: Review[], isLoading: boolean) => React.ReactNode;\r\n /** Render pagination */\r\n renderPagination?: (total: number) => React.ReactNode;\r\n /** Render empty state */\r\n renderEmptyState?: () => React.ReactNode;\r\n labels?: {\r\n title?: string;\r\n subtitle?: string;\r\n subtitleWithCount?: (count: number) => string;\r\n };\r\n className?: string;\r\n}\r\n\r\nexport function ReviewsListView({\r\n initialData,\r\n params = { status: \"approved\", perPage: 200 },\r\n renderHeader,\r\n renderSearch,\r\n renderSort,\r\n renderFilters,\r\n renderActiveFilters,\r\n renderResults,\r\n renderPagination,\r\n renderEmptyState,\r\n labels = {},\r\n className = \"\",\r\n}: ReviewsListViewProps) {\r\n const [search, setSearch] = React.useState(\"\");\r\n const [sort, setSort] = React.useState(\"-rating\");\r\n\r\n const { reviews, total, isLoading } = useReviews(params, { initialData });\r\n\r\n return (\r\n <Div className={`min-h-screen ${className}`}>\r\n <Container size=\"full\" className=\"py-8\">\r\n {/* Header */}\r\n {renderHeader ? (\r\n renderHeader(total)\r\n ) : (\r\n <Div className=\"mb-6\">\r\n <Heading level={1}>{labels.title ?? \"Reviews\"}</Heading>\r\n <Text variant=\"secondary\" className=\"mt-1\">\r\n {total > 0\r\n ? (labels.subtitleWithCount?.(total) ??\r\n `${total} reviews from our customers`)\r\n : (labels.subtitle ?? \"See what our customers say\")}\r\n </Text>\r\n </Div>\r\n )}\r\n\r\n {/* Search + Sort + Filters */}\r\n <Row wrap gap=\"3\" className=\"mb-4\">\r\n {renderSearch?.(search, setSearch)}\r\n {renderSort?.(sort, setSort)}\r\n {renderFilters?.()}\r\n </Row>\r\n\r\n {/* Active filter chips */}\r\n {renderActiveFilters?.()}\r\n\r\n {/* Results */}\r\n {!isLoading && total === 0 && renderEmptyState\r\n ? renderEmptyState()\r\n : renderResults(reviews, isLoading)}\r\n\r\n {/* Pagination */}\r\n {renderPagination?.(total)}\r\n </Container>\r\n </Div>\r\n );\r\n}\r\n","import { z } from \"zod\";\r\n\r\n// ─── Sub-schemas ──────────────────────────────────────────────────────────────\r\n\r\nexport const reviewStatusSchema = z.enum([\"pending\", \"approved\", \"rejected\"]);\r\n\r\nexport const reviewImageSchema = z.object({\r\n url: z.string(),\r\n thumbnailUrl: z.string().optional(),\r\n});\r\n\r\nexport const reviewVideoSchema = z.object({\r\n url: z.string(),\r\n thumbnailUrl: z.string().optional(),\r\n duration: z.number().optional(),\r\n trimStart: z.number().optional(),\r\n trimEnd: z.number().optional(),\r\n});\r\n\r\n// ─── Base item schema ─────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Base Zod schema for a review.\r\n * Apps can extend this to add their own fields:\r\n *\r\n * @example\r\n * import { reviewSchema } from \"@mohasinac/feat-reviews\";\r\n *\r\n * const myReviewSchema = reviewSchema.extend({\r\n * purchaseVerifiedAt: z.string().optional(),\r\n * loyaltyPointsAwarded: z.number().optional(),\r\n * });\r\n * type MyReview = z.infer<typeof myReviewSchema>;\r\n */\r\nexport const reviewSchema = z.object({\r\n id: z.string(),\r\n productId: z.string(),\r\n productTitle: z.string().optional(),\r\n sellerId: z.string().optional(),\r\n userId: z.string(),\r\n userName: z.string(),\r\n userAvatar: z.string().optional(),\r\n rating: z.union([\r\n z.literal(1),\r\n z.literal(2),\r\n z.literal(3),\r\n z.literal(4),\r\n z.literal(5),\r\n ]),\r\n title: z.string().optional(),\r\n comment: z.string().optional(),\r\n images: z.array(reviewImageSchema).optional(),\r\n video: reviewVideoSchema.optional(),\r\n status: reviewStatusSchema,\r\n helpfulCount: z.number().optional(),\r\n reportCount: z.number().optional(),\r\n verified: z.boolean().optional(),\r\n featured: z.boolean().optional(),\r\n createdAt: z.string().optional(),\r\n updatedAt: z.string().optional(),\r\n});\r\n\r\n/** Base schema for list-query parameters. */\r\nexport const reviewListParamsSchema = z.object({\r\n productId: z.string().optional(),\r\n userId: z.string().optional(),\r\n sellerId: z.string().optional(),\r\n status: reviewStatusSchema.optional(),\r\n rating: z.coerce.number().optional(),\r\n featured: z.coerce.boolean().optional(),\r\n page: z.coerce.number().optional(),\r\n perPage: z.coerce.number().optional(),\r\n sort: z.string().optional(),\r\n});\r\n","import type { TableColumn, ColumnExtensionOpts } from \"@mohasinac/contracts\";\r\nimport type { Review } from \"../types\";\r\n\r\n/**\r\n * Default admin column definitions for a review table.\r\n *\r\n * @example\r\n * const columns = buildReviewColumns<MyReview>({\r\n * extras: [{ key: \"loyaltyPointsAwarded\", header: \"Points\", render: (r) => r.loyaltyPointsAwarded ?? \"—\" }],\r\n * });\r\n */\r\nexport const reviewAdminColumns: TableColumn<Review>[] = [\r\n { key: \"userName\", header: \"User\" },\r\n { key: \"productTitle\", header: \"Product\", sortable: true },\r\n {\r\n key: \"rating\",\r\n header: \"Rating\",\r\n sortable: true,\r\n render: (r) => `${\"★\".repeat(r.rating)}${\"☆\".repeat(5 - r.rating)}`,\r\n },\r\n { key: \"title\", header: \"Title\" },\r\n { key: \"status\", header: \"Status\", sortable: true },\r\n {\r\n key: \"verified\",\r\n header: \"Verified\",\r\n render: (r) => (r.verified ? \"Yes\" : \"No\"),\r\n },\r\n {\r\n key: \"featured\",\r\n header: \"Featured\",\r\n render: (r) => (r.featured ? \"Yes\" : \"No\"),\r\n },\r\n {\r\n key: \"helpfulCount\",\r\n header: \"Helpful\",\r\n sortable: true,\r\n render: (r) => r.helpfulCount?.toLocaleString() ?? \"0\",\r\n },\r\n { key: \"createdAt\", header: \"Created\", sortable: true },\r\n];\r\n\r\n/**\r\n * Build a merged column list from the base review columns.\r\n */\r\nexport function buildReviewColumns<T extends Review = Review>(\r\n opts?: ColumnExtensionOpts<T>,\r\n): TableColumn<T>[] {\r\n const base = reviewAdminColumns 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 { Review, ReviewStatus } from \"../types\";\n\nexport class ReviewsRepository {\n constructor(private readonly repo: IRepository<Review>) {}\n\n async findAll(query?: SieveQuery): Promise<PagedResult<Review>> {\n return this.repo.findAll(query ?? {});\n }\n\n async findByProduct(\n productId: string,\n page = 1,\n perPage = 10,\n ): Promise<PagedResult<Review>> {\n return this.repo.findAll({\n filters: `productId==${productId},status==approved`,\n sort: \"-createdAt\",\n page,\n perPage,\n });\n }\n\n async findByUser(\n userId: string,\n page = 1,\n perPage = 10,\n ): Promise<PagedResult<Review>> {\n return this.repo.findAll({\n filters: `userId==${userId}`,\n sort: \"-createdAt\",\n page,\n perPage,\n });\n }\n\n async findPending(page = 1, perPage = 20): Promise<PagedResult<Review>> {\n return this.repo.findAll({\n filters: \"status==pending\",\n sort: \"createdAt\",\n page,\n perPage,\n });\n }\n\n async findById(id: string): Promise<Review | null> {\n return this.repo.findById(id);\n }\n\n async create(data: Omit<Review, \"id\">): Promise<Review> {\n return this.repo.create(data);\n }\n\n async update(id: string, data: Partial<Review>): Promise<Review> {\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 async updateStatus(id: string, status: ReviewStatus): Promise<Review> {\n return this.repo.update(id, { status });\n }\n}\n","import type { FeatureManifest } from \"@mohasinac/contracts\";\n\nexport const manifest: FeatureManifest = {\n name: \"reviews\",\n i18nNamespace: \"reviews\",\n envKeys: [],\n routes: [],\n apiRoutes: [\n { segment: \"api/reviews\", methods: [\"GET\", \"POST\"] },\n { segment: \"api/reviews/[id]\", methods: [\"GET\", \"PATCH\", \"DELETE\"] },\n ],\n};\n","/**\r\n * createRouteHandler — provider-aware API route handler factory for feat-* packages.\r\n *\r\n * Works like letitrip.in's local `createApiHandler` but uses `getProviders().session`\r\n * for auth instead of a hardwired Firebase Admin call. This makes it portable across\r\n * all consumer projects that register an `ISessionProvider`.\r\n *\r\n * @example\r\n * ```ts\r\n * export const POST = createRouteHandler({\r\n * auth: true,\r\n * roles: [\"admin\"],\r\n * schema: mySchema,\r\n * handler: async ({ user, body }) => { ... },\r\n * });\r\n * ```\r\n */\r\n\r\nimport { NextResponse } from \"next/server.js\";\r\nimport { getProviders } from \"@mohasinac/contracts\";\r\n\r\n/** Minimal schema interface compatible with Zod v3 and v4. */\r\ninterface ParseableSchema<TOutput> {\r\n safeParse(\r\n data: unknown,\r\n ):\r\n | { success: true; data: TOutput }\r\n | { success: false; error: { issues?: unknown[] } };\r\n}\r\n\r\nexport interface RouteUser {\r\n uid: string;\r\n email?: string | null;\r\n role?: string;\r\n [key: string]: unknown;\r\n}\r\n\r\ninterface RouteHandlerOptions<\r\n TInput = unknown,\r\n TParams = Record<string, string>,\r\n> {\r\n /** Require a valid session cookie. Implied when `roles` is set. */\r\n auth?: boolean;\r\n /**\r\n * If provided, the verified user's `role` must be in this list.\r\n * Implies `auth: true`.\r\n */\r\n roles?: string[];\r\n /** Zod schema to validate + parse the JSON request body. */\r\n schema?: ParseableSchema<TInput>;\r\n /** Route handler. `user` is present when `auth: true`. */\r\n handler: (ctx: {\r\n request: Request;\r\n user?: RouteUser;\r\n body?: TInput;\r\n params?: TParams;\r\n }) => Promise<Response>;\r\n}\r\n\r\n/** Read the `__session` HTTP-only cookie from request headers. */\r\nfunction readSessionCookie(request: Request): string | null {\r\n const cookieHeader = request.headers.get(\"cookie\") ?? \"\";\r\n const match = cookieHeader.match(/(?:^|;\\s*)__session=([^;]+)/);\r\n return match ? decodeURIComponent(match[1]) : null;\r\n}\r\n\r\n/**\r\n * Verify the session cookie using `getProviders().session`.\r\n * Returns a `RouteUser` on success, or throws for invalid credentials.\r\n */\r\nasync function verifySession(request: Request): Promise<RouteUser> {\r\n const { session } = getProviders();\r\n if (!session) {\r\n throw Object.assign(new Error(\"Session provider not configured\"), {\r\n status: 503,\r\n });\r\n }\r\n const cookie = readSessionCookie(request);\r\n if (!cookie) {\r\n throw Object.assign(new Error(\"Authentication required\"), { status: 401 });\r\n }\r\n try {\r\n const payload = await session.verifySession(cookie);\r\n return {\r\n uid: payload.uid,\r\n email: payload.email,\r\n role: payload.role,\r\n emailVerified: payload.emailVerified,\r\n ...payload.claims,\r\n };\r\n } catch {\r\n throw Object.assign(new Error(\"Invalid or expired session\"), {\r\n status: 401,\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Create a typed Next.js App Router handler with built-in auth + Zod validation.\r\n */\r\nexport function createRouteHandler<\r\n TInput = unknown,\r\n TParams = Record<string, string>,\r\n>(options: RouteHandlerOptions<TInput, TParams>) {\r\n return async (\r\n request: Request,\r\n context: { params: Promise<TParams> },\r\n ): Promise<Response> => {\r\n try {\r\n // ── Auth ──────────────────────────────────────────────────────────────\r\n let user: RouteUser | undefined;\r\n const needsAuth =\r\n options.auth || (options.roles && options.roles.length > 0);\r\n\r\n if (needsAuth) {\r\n user = await verifySession(request);\r\n }\r\n\r\n if (options.roles && options.roles.length > 0) {\r\n if (!user || !options.roles.includes(user.role ?? \"\")) {\r\n return NextResponse.json(\r\n { success: false, error: \"Insufficient permissions\" },\r\n { status: 403 },\r\n );\r\n }\r\n }\r\n\r\n // ── Body validation ───────────────────────────────────────────────────\r\n let body: TInput | undefined;\r\n if (options.schema) {\r\n let raw: unknown;\r\n try {\r\n raw = await request.json();\r\n } catch {\r\n return NextResponse.json(\r\n { success: false, error: \"Invalid JSON body\" },\r\n { status: 400 },\r\n );\r\n }\r\n const result = options.schema.safeParse(raw);\r\n if (!result.success) {\r\n return NextResponse.json(\r\n {\r\n success: false,\r\n error: \"Validation failed\",\r\n issues: result.error.issues ?? [],\r\n },\r\n { status: 400 },\r\n );\r\n }\r\n body = result.data;\r\n }\r\n\r\n // ── Params ────────────────────────────────────────────────────────────\r\n const params = context?.params ? await context.params : undefined;\r\n\r\n return await options.handler({\r\n request,\r\n user,\r\n body,\r\n params: params as TParams | undefined,\r\n });\r\n } catch (err: unknown) {\r\n // Structured errors thrown with .status\r\n const status =\r\n typeof (err as { status?: unknown })?.status === \"number\"\r\n ? (err as { status: number }).status\r\n : 500;\r\n const message =\r\n err instanceof Error ? err.message : \"Internal server error\";\r\n console.error(`[createRouteHandler] ${request.method} failed`, err);\r\n return NextResponse.json({ success: false, error: message }, { status });\r\n }\r\n };\r\n}\r\n","/**\r\n * API Request Helpers\r\n *\r\n * Generic utilities for API route request parsing and session extraction.\r\n * Uses structural request types (not NextRequest) to avoid cross-package\r\n * type identity issues when multiple Next.js installs exist in a monorepo.\r\n */\r\n\r\nimport { AuthenticationError } from \"@mohasinac/errors\";\r\n\r\ninterface CookieStoreLike {\r\n get(name: string): { value?: string } | string | undefined;\r\n}\r\n\r\ntype CookieCapableRequest = Request & { cookies?: CookieStoreLike };\r\n\r\nfunction readCookieFromHeader(request: Request, name: string): string | undefined {\r\n const cookieHeader = request.headers.get(\"cookie\") ?? \"\";\r\n const match = cookieHeader.match(\r\n new RegExp(`(?:^|;\\\\s*)${name}=([^;]+)`),\r\n );\r\n return match ? decodeURIComponent(match[1]) : undefined;\r\n}\r\n\r\nexport function getSearchParams(request: Request): URLSearchParams {\r\n return new URL(request.url).searchParams;\r\n}\r\n\r\nexport function getOptionalSessionCookie(\r\n request: CookieCapableRequest,\r\n): string | undefined {\r\n const cookieValue = request.cookies?.get(\"__session\");\r\n if (typeof cookieValue === \"string\") return cookieValue;\r\n if (cookieValue && typeof cookieValue === \"object\") return cookieValue.value;\r\n return readCookieFromHeader(request, \"__session\");\r\n}\r\n\r\nexport function getRequiredSessionCookie(request: CookieCapableRequest): string {\r\n const cookie = getOptionalSessionCookie(request);\r\n if (!cookie) throw new AuthenticationError(\"Unauthorized\");\r\n return cookie;\r\n}\r\n\r\nexport function getBooleanParam(\r\n searchParams: URLSearchParams,\r\n key: string,\r\n): boolean | undefined {\r\n const value = searchParams.get(key);\r\n if (value === null) return undefined;\r\n return value === \"true\";\r\n}\r\n\r\nexport function getStringParam(\r\n searchParams: URLSearchParams,\r\n key: string,\r\n): string | undefined {\r\n const value = searchParams.get(key);\r\n if (!value) return undefined;\r\n return value;\r\n}\r\n\r\nexport function getNumberParam(\r\n searchParams: URLSearchParams,\r\n key: string,\r\n fallback: number,\r\n options?: { min?: number; max?: number },\r\n): number {\r\n const rawValue = searchParams.get(key);\r\n const parsed = rawValue ? Number.parseInt(rawValue, 10) : fallback;\r\n const safeValue = Number.isNaN(parsed) ? fallback : parsed;\r\n if (typeof options?.min === \"number\" && safeValue < options.min)\r\n return options.min;\r\n if (typeof options?.max === \"number\" && safeValue > options.max)\r\n return options.max;\r\n return safeValue;\r\n}\r\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","/**\n * feat-reviews — Next.js App Router API handler (GET/POST /api/reviews)\n *\n * 2-line stub for GET:\n * ```ts\n * // app/api/reviews/route.ts\n * export { GET, POST } from \"@mohasinac/feat-reviews\";\n * ```\n *\n * Query modes for GET:\n * ?featured=true → returns flat Review[] (for testimonial sections)\n * ?latest=true → paginated approved reviews, no productId required\n * ?productId=<id> → paginated + aggregate stats (averageRating, ratingDistribution)\n *\n * POST creates a new review; requires authentication.\n */\n\nimport { NextResponse } from \"next/server.js\";\nimport { z } from \"zod\";\nimport { getProviders } from \"@mohasinac/contracts\";\nimport { createRouteHandler } from \"@mohasinac/next\";\nimport type { Review, ReviewListResponse } from \"../types/index.js\";\n\nfunction param(url: URL, key: string): string | null {\n return url.searchParams.get(key);\n}\n\nfunction numParam(url: URL, key: string, fallback: number): number {\n const v = url.searchParams.get(key);\n const n = v !== null ? Number(v) : NaN;\n return Number.isFinite(n) ? n : fallback;\n}\n\nfunction computeAggregates(reviews: Review[]): {\n averageRating: number;\n ratingDistribution: Record<number, number>;\n} {\n const dist: Record<number, number> = { 1: 0, 2: 0, 3: 0, 4: 0, 5: 0 };\n let total = 0;\n let count = 0;\n for (const r of reviews) {\n if (r.status === \"approved\") {\n dist[r.rating] = (dist[r.rating] ?? 0) + 1;\n total += r.rating;\n count++;\n }\n }\n return {\n averageRating: count > 0 ? total / count : 0,\n ratingDistribution: dist,\n };\n}\n\nexport async function GET(request: Request): Promise<NextResponse> {\n try {\n const url = new URL(request.url);\n const featured = param(url, \"featured\") === \"true\";\n const latest = param(url, \"latest\") === \"true\";\n const page = numParam(url, \"page\", 1);\n const pageSize = numParam(url, \"pageSize\", 10);\n const sort = param(url, \"sorts\") ?? param(url, \"sort\") ?? \"-createdAt\";\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 repo = db.getRepository<Review>(\"reviews\");\n\n // ── ?featured=true ────────────────────────────────────────────────────────\n // Returns flat Review[] for homepage testimonial sections.\n if (featured) {\n const result = await repo.findAll({\n filters: \"featured==true,status==approved\",\n sort,\n perPage: Math.min(pageSize, 50),\n });\n const response = NextResponse.json({ success: true, data: result.data });\n response.headers.set(\n \"Cache-Control\",\n \"public, max-age=300, s-maxage=600, stale-while-revalidate=120\",\n );\n return response;\n }\n\n // ── ?latest=true ──────────────────────────────────────────────────────────\n // Paginated latest approved reviews, no productId required.\n if (latest) {\n const latestPageSize = numParam(url, \"pageSize\", 24);\n const result = await repo.findAll({\n filters: \"status==approved\",\n sort,\n page,\n perPage: latestPageSize,\n });\n const totalPages = Math.max(1, Math.ceil(result.total / latestPageSize));\n const body: ReviewListResponse = {\n items: result.data,\n total: result.total,\n page: result.page,\n pageSize: latestPageSize,\n totalPages,\n hasMore: result.page < totalPages,\n };\n const response = NextResponse.json({ success: true, data: body });\n response.headers.set(\n \"Cache-Control\",\n \"public, max-age=120, s-maxage=300, stale-while-revalidate=60\",\n );\n return response;\n }\n\n // ── ?productId=<id> ───────────────────────────────────────────────────────\n // Paginated reviews for a product with aggregate rating stats.\n const productId = param(url, \"productId\");\n if (!productId) {\n return NextResponse.json(\n { success: false, error: \"productId query parameter is required\" },\n { status: 400 },\n );\n }\n\n // Fetch all approved reviews for aggregate computation (no pagination)\n const allResult = await repo.findAll({\n filters: `productId==${productId},status==approved`,\n perPage: 1000,\n });\n const { averageRating, ratingDistribution } = computeAggregates(\n allResult.data,\n );\n\n // Fetch the current page for display\n const pagedResult = await repo.findAll({\n filters: `productId==${productId},status==approved`,\n sort,\n page,\n perPage: pageSize,\n });\n\n const totalPages = Math.max(1, Math.ceil(pagedResult.total / pageSize));\n const body: ReviewListResponse = {\n items: pagedResult.data,\n total: pagedResult.total,\n page: pagedResult.page,\n pageSize,\n totalPages,\n hasMore: pagedResult.page < totalPages,\n averageRating,\n ratingDistribution,\n };\n\n const response = NextResponse.json({ success: true, data: body });\n response.headers.set(\n \"Cache-Control\",\n \"public, max-age=120, s-maxage=300, stale-while-revalidate=60\",\n );\n return response;\n } catch (error) {\n console.error(\"[feat-reviews] GET /api/reviews failed\", error);\n return NextResponse.json(\n { success: false, error: \"Failed to fetch reviews\" },\n { status: 500 },\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// POST /api/reviews — create a new review (authenticated)\n// ---------------------------------------------------------------------------\n\nconst reviewCreateSchema = z\n .object({\n productId: z.string().min(1),\n rating: z.union([\n z.literal(1),\n z.literal(2),\n z.literal(3),\n z.literal(4),\n z.literal(5),\n ]),\n title: z.string().min(1).max(100).optional(),\n comment: z.string().min(1).max(2000).optional(),\n images: z.array(z.string().url()).max(10).optional(),\n video: z.string().url().optional(),\n })\n .passthrough();\n\nexport const POST = createRouteHandler({\n auth: true,\n schema: reviewCreateSchema,\n handler: async ({ user, body }) => {\n const { db } = getProviders();\n if (!db) {\n return NextResponse.json(\n { success: false, error: \"DB not configured\" },\n { status: 503 },\n );\n }\n\n const repo = db.getRepository<Review>(\"reviews\");\n const now = new Date().toISOString();\n\n const created = await repo.create({\n ...(body as object),\n userId: user!.uid,\n status: \"pending\",\n createdAt: now,\n updatedAt: now,\n } as unknown as Review);\n\n return NextResponse.json({ success: true, data: created }, { status: 201 });\n },\n});\n","/**\r\n * feat-reviews — GET / PATCH / DELETE /api/reviews/[id]\r\n *\r\n * Pure stub:\r\n * ```ts\r\n * // app/api/reviews/[id]/route.ts\r\n * export { reviewItemGET as GET, reviewItemPATCH as PATCH, reviewItemDELETE as DELETE }\r\n * from \"@mohasinac/feat-reviews\";\r\n * ```\r\n */\r\n\r\nimport { NextResponse } from \"next/server.js\";\r\nimport { z } from \"zod\";\r\nimport { getProviders } from \"@mohasinac/contracts\";\r\nimport { createRouteHandler } from \"@mohasinac/next\";\r\nimport type { Review } from \"../../types/index.js\";\r\n\r\n// ──── GET /api/reviews/[id] ───────────────────────────────────────────────────\r\n\r\nexport async function GET(\r\n _request: Request,\r\n context: { params: Promise<{ id: string }> },\r\n): Promise<NextResponse> {\r\n try {\r\n const { id } = await context.params;\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<Review>(\"reviews\");\r\n const review = await repo.findById(id);\r\n if (!review) {\r\n return NextResponse.json(\r\n { success: false, error: \"Review not found\" },\r\n { status: 404 },\r\n );\r\n }\r\n\r\n return NextResponse.json({ success: true, data: review });\r\n } catch (error) {\r\n console.error(\"[feat-reviews] GET /api/reviews/[id] failed\", error);\r\n return NextResponse.json(\r\n { success: false, error: \"Failed to fetch review\" },\r\n { status: 500 },\r\n );\r\n }\r\n}\r\n\r\nexport { GET as reviewItemGET };\r\n\r\n// ──── PATCH /api/reviews/[id] ─────────────────────────────────────────────────\r\n\r\nconst reviewUpdateSchema = z\r\n .object({\r\n rating: z\r\n .union([\r\n z.literal(1),\r\n z.literal(2),\r\n z.literal(3),\r\n z.literal(4),\r\n z.literal(5),\r\n ])\r\n .optional(),\r\n title: z.string().min(1).max(100).optional(),\r\n comment: z.string().min(1).max(2000).optional(),\r\n images: z.array(z.string().url()).max(10).optional(),\r\n video: z.string().url().optional(),\r\n status: z.enum([\"pending\", \"approved\", \"rejected\"]).optional(),\r\n })\r\n .passthrough();\r\n\r\nexport const reviewItemPATCH = createRouteHandler({\r\n auth: true,\r\n schema: reviewUpdateSchema,\r\n handler: async ({ request, user, body }) => {\r\n const url = new URL(request.url);\r\n const segments = url.pathname.split(\"/\");\r\n const id = segments[segments.length - 1];\r\n\r\n const { db } = getProviders();\r\n if (!db)\r\n return NextResponse.json(\r\n { success: false, error: \"DB not configured\" },\r\n { status: 503 },\r\n );\r\n\r\n const repo = db.getRepository<Review>(\"reviews\");\r\n const review = await repo.findById(id);\r\n if (!review)\r\n return NextResponse.json(\r\n { success: false, error: \"Review not found\" },\r\n { status: 404 },\r\n );\r\n\r\n const isOwner = review.userId === user!.uid;\r\n const isModerator = user!.role === \"moderator\";\r\n const isAdmin = user!.role === \"admin\";\r\n\r\n if (!isOwner && !isModerator && !isAdmin) {\r\n return NextResponse.json(\r\n { success: false, error: \"Forbidden\" },\r\n { status: 403 },\r\n );\r\n }\r\n\r\n // Owners can only edit content fields, not status\r\n const patch =\r\n isOwner && !isModerator && !isAdmin\r\n ? { ...(body as object), status: review.status }\r\n : (body as object);\r\n\r\n const updated = await repo.update(id, {\r\n ...patch,\r\n updatedAt: new Date().toISOString(),\r\n } as Partial<Review>);\r\n return NextResponse.json({ success: true, data: updated });\r\n },\r\n});\r\n\r\n// ──── DELETE /api/reviews/[id] ────────────────────────────────────────────────\r\n\r\nexport const reviewItemDELETE = createRouteHandler({\r\n auth: true,\r\n handler: async ({ request, user }) => {\r\n const url = new URL(request.url);\r\n const segments = url.pathname.split(\"/\");\r\n const id = segments[segments.length - 1];\r\n\r\n const { db } = getProviders();\r\n if (!db)\r\n return NextResponse.json(\r\n { success: false, error: \"DB not configured\" },\r\n { status: 503 },\r\n );\r\n\r\n const repo = db.getRepository<Review>(\"reviews\");\r\n const review = await repo.findById(id);\r\n if (!review)\r\n return NextResponse.json(\r\n { success: false, error: \"Review not found\" },\r\n { status: 404 },\r\n );\r\n\r\n const isOwner = review.userId === user!.uid;\r\n const isModerator = user!.role === \"moderator\";\r\n const isAdmin = user!.role === \"admin\";\r\n\r\n if (!isOwner && !isModerator && !isAdmin) {\r\n return NextResponse.json(\r\n { success: false, error: \"Forbidden\" },\r\n { status: 403 },\r\n );\r\n }\r\n\r\n await repo.delete(id);\r\n return NextResponse.json({ success: true });\r\n },\r\n});\r\n"]}