@rovela-ai/sdk 0.1.0 → 0.1.1

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 (577) hide show
  1. package/dist/admin/api/auth.d.ts +32 -0
  2. package/dist/admin/api/auth.d.ts.map +1 -0
  3. package/dist/admin/api/auth.js +43 -0
  4. package/dist/admin/api/auth.js.map +1 -0
  5. package/dist/admin/api/categories.d.ts +68 -0
  6. package/dist/admin/api/categories.d.ts.map +1 -0
  7. package/dist/admin/api/categories.js +247 -0
  8. package/dist/admin/api/categories.js.map +1 -0
  9. package/dist/admin/api/customers.d.ts +41 -0
  10. package/dist/admin/api/customers.d.ts.map +1 -0
  11. package/dist/admin/api/customers.js +113 -0
  12. package/dist/admin/api/customers.js.map +1 -0
  13. package/dist/admin/api/index.d.ts +56 -0
  14. package/dist/admin/api/index.d.ts.map +1 -0
  15. package/dist/admin/api/index.js +87 -0
  16. package/dist/admin/api/index.js.map +1 -0
  17. package/dist/admin/api/orders.d.ts +59 -0
  18. package/dist/admin/api/orders.d.ts.map +1 -0
  19. package/dist/admin/api/orders.js +209 -0
  20. package/dist/admin/api/orders.js.map +1 -0
  21. package/dist/admin/api/products.d.ts +103 -0
  22. package/dist/admin/api/products.d.ts.map +1 -0
  23. package/dist/admin/api/products.js +329 -0
  24. package/dist/admin/api/products.js.map +1 -0
  25. package/dist/admin/api/refund.d.ts +29 -0
  26. package/dist/admin/api/refund.d.ts.map +1 -0
  27. package/dist/admin/api/refund.js +136 -0
  28. package/dist/admin/api/refund.js.map +1 -0
  29. package/dist/admin/api/stats.d.ts +40 -0
  30. package/dist/admin/api/stats.d.ts.map +1 -0
  31. package/dist/admin/api/stats.js +74 -0
  32. package/dist/admin/api/stats.js.map +1 -0
  33. package/dist/admin/components/AdminGuard.d.ts +40 -0
  34. package/dist/admin/components/AdminGuard.d.ts.map +1 -0
  35. package/dist/admin/components/AdminGuard.js +97 -0
  36. package/dist/admin/components/AdminGuard.js.map +1 -0
  37. package/dist/admin/components/AdminHeader.d.ts +18 -0
  38. package/dist/admin/components/AdminHeader.d.ts.map +1 -0
  39. package/dist/admin/components/AdminHeader.js +33 -0
  40. package/dist/admin/components/AdminHeader.js.map +1 -0
  41. package/dist/admin/components/AdminLayout.d.ts +50 -0
  42. package/dist/admin/components/AdminLayout.d.ts.map +1 -0
  43. package/dist/admin/components/AdminLayout.js +46 -0
  44. package/dist/admin/components/AdminLayout.js.map +1 -0
  45. package/dist/admin/components/AdminLoginForm.d.ts +18 -0
  46. package/dist/admin/components/AdminLoginForm.d.ts.map +1 -0
  47. package/dist/admin/components/AdminLoginForm.js +58 -0
  48. package/dist/admin/components/AdminLoginForm.js.map +1 -0
  49. package/dist/admin/components/AdminNav.d.ts +34 -0
  50. package/dist/admin/components/AdminNav.d.ts.map +1 -0
  51. package/dist/admin/components/AdminNav.js +61 -0
  52. package/dist/admin/components/AdminNav.js.map +1 -0
  53. package/dist/admin/components/InventoryEditor.d.ts +15 -0
  54. package/dist/admin/components/InventoryEditor.d.ts.map +1 -0
  55. package/dist/admin/components/InventoryEditor.js +83 -0
  56. package/dist/admin/components/InventoryEditor.js.map +1 -0
  57. package/dist/admin/components/LowStockAlert.d.ts +11 -0
  58. package/dist/admin/components/LowStockAlert.d.ts.map +1 -0
  59. package/dist/admin/components/LowStockAlert.js +35 -0
  60. package/dist/admin/components/LowStockAlert.js.map +1 -0
  61. package/dist/admin/components/OrderDetails.d.ts +14 -0
  62. package/dist/admin/components/OrderDetails.d.ts.map +1 -0
  63. package/dist/admin/components/OrderDetails.js +94 -0
  64. package/dist/admin/components/OrderDetails.js.map +1 -0
  65. package/dist/admin/components/OrderTable.d.ts +13 -0
  66. package/dist/admin/components/OrderTable.d.ts.map +1 -0
  67. package/dist/admin/components/OrderTable.js +89 -0
  68. package/dist/admin/components/OrderTable.js.map +1 -0
  69. package/dist/admin/components/ProductForm.d.ts +18 -0
  70. package/dist/admin/components/ProductForm.d.ts.map +1 -0
  71. package/dist/admin/components/ProductForm.js +127 -0
  72. package/dist/admin/components/ProductForm.js.map +1 -0
  73. package/dist/admin/components/ProductTable.d.ts +13 -0
  74. package/dist/admin/components/ProductTable.d.ts.map +1 -0
  75. package/dist/admin/components/ProductTable.js +81 -0
  76. package/dist/admin/components/ProductTable.js.map +1 -0
  77. package/dist/admin/components/RecentOrders.d.ts +11 -0
  78. package/dist/admin/components/RecentOrders.d.ts.map +1 -0
  79. package/dist/admin/components/RecentOrders.js +58 -0
  80. package/dist/admin/components/RecentOrders.js.map +1 -0
  81. package/dist/admin/components/RefundDialog.d.ts +17 -0
  82. package/dist/admin/components/RefundDialog.d.ts.map +1 -0
  83. package/dist/admin/components/RefundDialog.js +86 -0
  84. package/dist/admin/components/RefundDialog.js.map +1 -0
  85. package/dist/admin/components/StatsCards.d.ts +23 -0
  86. package/dist/admin/components/StatsCards.d.ts.map +1 -0
  87. package/dist/admin/components/StatsCards.js +82 -0
  88. package/dist/admin/components/StatsCards.js.map +1 -0
  89. package/dist/admin/components/StoreSettings.d.ts +14 -0
  90. package/dist/admin/components/StoreSettings.d.ts.map +1 -0
  91. package/dist/admin/components/StoreSettings.js +88 -0
  92. package/dist/admin/components/StoreSettings.js.map +1 -0
  93. package/dist/admin/components/index.d.ts +21 -0
  94. package/dist/admin/components/index.d.ts.map +1 -0
  95. package/dist/admin/components/index.js +57 -0
  96. package/dist/admin/components/index.js.map +1 -0
  97. package/dist/admin/config.d.ts +74 -0
  98. package/dist/admin/config.d.ts.map +1 -0
  99. package/dist/admin/config.js +229 -0
  100. package/dist/admin/config.js.map +1 -0
  101. package/dist/admin/hooks/index.d.ts +10 -0
  102. package/dist/admin/hooks/index.d.ts.map +1 -0
  103. package/dist/admin/hooks/index.js +17 -0
  104. package/dist/admin/hooks/index.js.map +1 -0
  105. package/dist/admin/hooks/useAdminAuth.d.ts +36 -0
  106. package/dist/admin/hooks/useAdminAuth.d.ts.map +1 -0
  107. package/dist/admin/hooks/useAdminAuth.js +115 -0
  108. package/dist/admin/hooks/useAdminAuth.js.map +1 -0
  109. package/dist/admin/hooks/useAdminOrders.d.ts +41 -0
  110. package/dist/admin/hooks/useAdminOrders.d.ts.map +1 -0
  111. package/dist/admin/hooks/useAdminOrders.js +191 -0
  112. package/dist/admin/hooks/useAdminOrders.js.map +1 -0
  113. package/dist/admin/hooks/useAdminProducts.d.ts +39 -0
  114. package/dist/admin/hooks/useAdminProducts.d.ts.map +1 -0
  115. package/dist/admin/hooks/useAdminProducts.js +235 -0
  116. package/dist/admin/hooks/useAdminProducts.js.map +1 -0
  117. package/dist/admin/hooks/useAdminStats.d.ts +50 -0
  118. package/dist/admin/hooks/useAdminStats.d.ts.map +1 -0
  119. package/dist/admin/hooks/useAdminStats.js +111 -0
  120. package/dist/admin/hooks/useAdminStats.js.map +1 -0
  121. package/dist/admin/index.d.ts +63 -0
  122. package/dist/admin/index.d.ts.map +1 -0
  123. package/dist/admin/index.js +148 -0
  124. package/dist/admin/index.js.map +1 -0
  125. package/dist/admin/server/admin-service.d.ts +130 -0
  126. package/dist/admin/server/admin-service.d.ts.map +1 -0
  127. package/dist/admin/server/admin-service.js +298 -0
  128. package/dist/admin/server/admin-service.js.map +1 -0
  129. package/dist/admin/server/index.d.ts +8 -0
  130. package/dist/admin/server/index.d.ts.map +1 -0
  131. package/dist/admin/server/index.js +25 -0
  132. package/dist/admin/server/index.js.map +1 -0
  133. package/dist/admin/types.d.ts +549 -0
  134. package/dist/admin/types.d.ts.map +1 -0
  135. package/dist/admin/types.js +11 -0
  136. package/dist/admin/types.js.map +1 -0
  137. package/dist/auth/api/auth.d.ts +54 -0
  138. package/dist/auth/api/auth.d.ts.map +1 -0
  139. package/dist/auth/api/auth.js +67 -0
  140. package/dist/auth/api/auth.js.map +1 -0
  141. package/dist/auth/api/forgot-password.d.ts +41 -0
  142. package/dist/auth/api/forgot-password.d.ts.map +1 -0
  143. package/dist/auth/api/forgot-password.js +68 -0
  144. package/dist/auth/api/forgot-password.js.map +1 -0
  145. package/dist/auth/api/index.d.ts +34 -0
  146. package/dist/auth/api/index.d.ts.map +1 -0
  147. package/dist/auth/api/index.js +52 -0
  148. package/dist/auth/api/index.js.map +1 -0
  149. package/dist/auth/api/register.d.ts +41 -0
  150. package/dist/auth/api/register.d.ts.map +1 -0
  151. package/dist/auth/api/register.js +93 -0
  152. package/dist/auth/api/register.js.map +1 -0
  153. package/dist/auth/api/resend-verification.d.ts +41 -0
  154. package/dist/auth/api/resend-verification.d.ts.map +1 -0
  155. package/dist/auth/api/resend-verification.js +71 -0
  156. package/dist/auth/api/resend-verification.js.map +1 -0
  157. package/dist/auth/api/reset-password.d.ts +67 -0
  158. package/dist/auth/api/reset-password.d.ts.map +1 -0
  159. package/dist/auth/api/reset-password.js +110 -0
  160. package/dist/auth/api/reset-password.js.map +1 -0
  161. package/dist/auth/api/verify-email.d.ts +47 -0
  162. package/dist/auth/api/verify-email.d.ts.map +1 -0
  163. package/dist/auth/api/verify-email.js +94 -0
  164. package/dist/auth/api/verify-email.js.map +1 -0
  165. package/dist/auth/components/AuthGuard.d.ts +52 -0
  166. package/dist/auth/components/AuthGuard.d.ts.map +1 -0
  167. package/dist/auth/components/AuthGuard.js +113 -0
  168. package/dist/auth/components/AuthGuard.js.map +1 -0
  169. package/dist/auth/components/ForgotPasswordForm.d.ts +15 -0
  170. package/dist/auth/components/ForgotPasswordForm.d.ts.map +1 -0
  171. package/dist/auth/components/ForgotPasswordForm.js +44 -0
  172. package/dist/auth/components/ForgotPasswordForm.js.map +1 -0
  173. package/dist/auth/components/ResetPasswordForm.d.ts +18 -0
  174. package/dist/auth/components/ResetPasswordForm.d.ts.map +1 -0
  175. package/dist/auth/components/ResetPasswordForm.js +88 -0
  176. package/dist/auth/components/ResetPasswordForm.js.map +1 -0
  177. package/dist/auth/components/SignInForm.d.ts +21 -0
  178. package/dist/auth/components/SignInForm.d.ts.map +1 -0
  179. package/dist/auth/components/SignInForm.js +63 -0
  180. package/dist/auth/components/SignInForm.js.map +1 -0
  181. package/dist/auth/components/SignUpForm.d.ts +18 -0
  182. package/dist/auth/components/SignUpForm.d.ts.map +1 -0
  183. package/dist/auth/components/SignUpForm.js +79 -0
  184. package/dist/auth/components/SignUpForm.js.map +1 -0
  185. package/dist/auth/components/UserMenu.d.ts +18 -0
  186. package/dist/auth/components/UserMenu.d.ts.map +1 -0
  187. package/dist/auth/components/UserMenu.js +75 -0
  188. package/dist/auth/components/UserMenu.js.map +1 -0
  189. package/dist/auth/components/VerifyEmailNotice.d.ts +20 -0
  190. package/dist/auth/components/VerifyEmailNotice.d.ts.map +1 -0
  191. package/dist/auth/components/VerifyEmailNotice.js +59 -0
  192. package/dist/auth/components/VerifyEmailNotice.js.map +1 -0
  193. package/dist/auth/components/index.d.ts +13 -0
  194. package/dist/auth/components/index.d.ts.map +1 -0
  195. package/dist/auth/components/index.js +24 -0
  196. package/dist/auth/components/index.js.map +1 -0
  197. package/dist/auth/config.d.ts +42 -0
  198. package/dist/auth/config.d.ts.map +1 -0
  199. package/dist/auth/config.js +174 -0
  200. package/dist/auth/config.js.map +1 -0
  201. package/dist/auth/hooks/index.d.ts +7 -0
  202. package/dist/auth/hooks/index.d.ts.map +1 -0
  203. package/dist/auth/hooks/index.js +11 -0
  204. package/dist/auth/hooks/index.js.map +1 -0
  205. package/dist/auth/hooks/useAuth.d.ts +30 -0
  206. package/dist/auth/hooks/useAuth.d.ts.map +1 -0
  207. package/dist/auth/hooks/useAuth.js +248 -0
  208. package/dist/auth/hooks/useAuth.js.map +1 -0
  209. package/dist/auth/index.d.ts +54 -0
  210. package/dist/auth/index.d.ts.map +1 -0
  211. package/dist/auth/index.js +88 -0
  212. package/dist/auth/index.js.map +1 -0
  213. package/dist/auth/server/customer-service.d.ts +138 -0
  214. package/dist/auth/server/customer-service.d.ts.map +1 -0
  215. package/dist/auth/server/customer-service.js +309 -0
  216. package/dist/auth/server/customer-service.js.map +1 -0
  217. package/dist/auth/server/email-sender.d.ts +64 -0
  218. package/dist/auth/server/email-sender.d.ts.map +1 -0
  219. package/dist/auth/server/email-sender.js +112 -0
  220. package/dist/auth/server/email-sender.js.map +1 -0
  221. package/dist/auth/server/index.d.ts +13 -0
  222. package/dist/auth/server/index.d.ts.map +1 -0
  223. package/dist/auth/server/index.js +48 -0
  224. package/dist/auth/server/index.js.map +1 -0
  225. package/dist/auth/server/password-reset-service.d.ts +86 -0
  226. package/dist/auth/server/password-reset-service.d.ts.map +1 -0
  227. package/dist/auth/server/password-reset-service.js +236 -0
  228. package/dist/auth/server/password-reset-service.js.map +1 -0
  229. package/dist/auth/server/password.d.ts +58 -0
  230. package/dist/auth/server/password.d.ts.map +1 -0
  231. package/dist/auth/server/password.js +94 -0
  232. package/dist/auth/server/password.js.map +1 -0
  233. package/dist/auth/server/verification-service.d.ts +87 -0
  234. package/dist/auth/server/verification-service.d.ts.map +1 -0
  235. package/dist/auth/server/verification-service.js +268 -0
  236. package/dist/auth/server/verification-service.js.map +1 -0
  237. package/dist/auth/types.d.ts +305 -0
  238. package/dist/auth/types.d.ts.map +1 -0
  239. package/dist/auth/types.js +8 -0
  240. package/dist/auth/types.js.map +1 -0
  241. package/dist/cart/CartProvider.d.ts +65 -0
  242. package/dist/cart/CartProvider.d.ts.map +1 -0
  243. package/dist/cart/CartProvider.js +101 -0
  244. package/dist/cart/CartProvider.js.map +1 -0
  245. package/dist/cart/components/AddToCartButton.d.ts +77 -0
  246. package/dist/cart/components/AddToCartButton.d.ts.map +1 -0
  247. package/dist/cart/components/AddToCartButton.js +124 -0
  248. package/dist/cart/components/AddToCartButton.js.map +1 -0
  249. package/dist/cart/components/CartDrawer.d.ts +71 -0
  250. package/dist/cart/components/CartDrawer.d.ts.map +1 -0
  251. package/dist/cart/components/CartDrawer.js +108 -0
  252. package/dist/cart/components/CartDrawer.js.map +1 -0
  253. package/dist/cart/components/CartIcon.d.ts +36 -0
  254. package/dist/cart/components/CartIcon.d.ts.map +1 -0
  255. package/dist/cart/components/CartIcon.js +70 -0
  256. package/dist/cart/components/CartIcon.js.map +1 -0
  257. package/dist/cart/components/CartItem.d.ts +52 -0
  258. package/dist/cart/components/CartItem.d.ts.map +1 -0
  259. package/dist/cart/components/CartItem.js +55 -0
  260. package/dist/cart/components/CartItem.js.map +1 -0
  261. package/dist/cart/components/CartSummary.d.ts +43 -0
  262. package/dist/cart/components/CartSummary.d.ts.map +1 -0
  263. package/dist/cart/components/CartSummary.js +58 -0
  264. package/dist/cart/components/CartSummary.js.map +1 -0
  265. package/dist/cart/components/QuantitySelector.d.ts +39 -0
  266. package/dist/cart/components/QuantitySelector.d.ts.map +1 -0
  267. package/dist/cart/components/QuantitySelector.js +87 -0
  268. package/dist/cart/components/QuantitySelector.js.map +1 -0
  269. package/dist/cart/components/index.d.ts +18 -0
  270. package/dist/cart/components/index.d.ts.map +1 -0
  271. package/dist/cart/components/index.js +21 -0
  272. package/dist/cart/components/index.js.map +1 -0
  273. package/dist/cart/index.d.ts +109 -0
  274. package/dist/cart/index.d.ts.map +1 -0
  275. package/dist/cart/index.js +129 -0
  276. package/dist/cart/index.js.map +1 -0
  277. package/dist/cart/store.d.ts +101 -0
  278. package/dist/cart/store.d.ts.map +1 -0
  279. package/dist/cart/store.js +207 -0
  280. package/dist/cart/store.js.map +1 -0
  281. package/dist/checkout/api/checkout.d.ts +31 -0
  282. package/dist/checkout/api/checkout.d.ts.map +1 -0
  283. package/dist/checkout/api/checkout.js +103 -0
  284. package/dist/checkout/api/checkout.js.map +1 -0
  285. package/dist/checkout/api/index.d.ts +8 -0
  286. package/dist/checkout/api/index.d.ts.map +1 -0
  287. package/dist/checkout/api/index.js +13 -0
  288. package/dist/checkout/api/index.js.map +1 -0
  289. package/dist/checkout/api/webhook.d.ts +30 -0
  290. package/dist/checkout/api/webhook.d.ts.map +1 -0
  291. package/dist/checkout/api/webhook.js +58 -0
  292. package/dist/checkout/api/webhook.js.map +1 -0
  293. package/dist/checkout/components/CheckoutButton.d.ts +44 -0
  294. package/dist/checkout/components/CheckoutButton.d.ts.map +1 -0
  295. package/dist/checkout/components/CheckoutButton.js +97 -0
  296. package/dist/checkout/components/CheckoutButton.js.map +1 -0
  297. package/dist/checkout/components/CheckoutSuccess.d.ts +29 -0
  298. package/dist/checkout/components/CheckoutSuccess.d.ts.map +1 -0
  299. package/dist/checkout/components/CheckoutSuccess.js +60 -0
  300. package/dist/checkout/components/CheckoutSuccess.js.map +1 -0
  301. package/dist/checkout/components/OrderSummary.d.ts +37 -0
  302. package/dist/checkout/components/OrderSummary.d.ts.map +1 -0
  303. package/dist/checkout/components/OrderSummary.js +70 -0
  304. package/dist/checkout/components/OrderSummary.js.map +1 -0
  305. package/dist/checkout/components/ShippingForm.d.ts +30 -0
  306. package/dist/checkout/components/ShippingForm.d.ts.map +1 -0
  307. package/dist/checkout/components/ShippingForm.js +125 -0
  308. package/dist/checkout/components/ShippingForm.js.map +1 -0
  309. package/dist/checkout/components/index.d.ts +10 -0
  310. package/dist/checkout/components/index.d.ts.map +1 -0
  311. package/dist/checkout/components/index.js +17 -0
  312. package/dist/checkout/components/index.js.map +1 -0
  313. package/dist/checkout/hooks/index.d.ts +7 -0
  314. package/dist/checkout/hooks/index.d.ts.map +1 -0
  315. package/dist/checkout/hooks/index.js +12 -0
  316. package/dist/checkout/hooks/index.js.map +1 -0
  317. package/dist/checkout/hooks/useCheckout.d.ts +61 -0
  318. package/dist/checkout/hooks/useCheckout.d.ts.map +1 -0
  319. package/dist/checkout/hooks/useCheckout.js +174 -0
  320. package/dist/checkout/hooks/useCheckout.js.map +1 -0
  321. package/dist/checkout/index.d.ts +111 -0
  322. package/dist/checkout/index.d.ts.map +1 -0
  323. package/dist/checkout/index.js +148 -0
  324. package/dist/checkout/index.js.map +1 -0
  325. package/dist/checkout/server/create-checkout-session.d.ts +69 -0
  326. package/dist/checkout/server/create-checkout-session.d.ts.map +1 -0
  327. package/dist/checkout/server/create-checkout-session.js +190 -0
  328. package/dist/checkout/server/create-checkout-session.js.map +1 -0
  329. package/dist/checkout/server/handle-webhook.d.ts +35 -0
  330. package/dist/checkout/server/handle-webhook.d.ts.map +1 -0
  331. package/dist/checkout/server/handle-webhook.js +279 -0
  332. package/dist/checkout/server/handle-webhook.js.map +1 -0
  333. package/dist/checkout/server/index.d.ts +10 -0
  334. package/dist/checkout/server/index.d.ts.map +1 -0
  335. package/dist/checkout/server/index.js +19 -0
  336. package/dist/checkout/server/index.js.map +1 -0
  337. package/dist/checkout/server/order-service.d.ts +43 -0
  338. package/dist/checkout/server/order-service.d.ts.map +1 -0
  339. package/dist/checkout/server/order-service.js +196 -0
  340. package/dist/checkout/server/order-service.js.map +1 -0
  341. package/dist/checkout/stripe/client.d.ts +72 -0
  342. package/dist/checkout/stripe/client.d.ts.map +1 -0
  343. package/dist/checkout/stripe/client.js +189 -0
  344. package/dist/checkout/stripe/client.js.map +1 -0
  345. package/dist/checkout/stripe/index.d.ts +7 -0
  346. package/dist/checkout/stripe/index.d.ts.map +1 -0
  347. package/dist/checkout/stripe/index.js +21 -0
  348. package/dist/checkout/stripe/index.js.map +1 -0
  349. package/dist/checkout/types.d.ts +263 -0
  350. package/dist/checkout/types.d.ts.map +1 -0
  351. package/dist/checkout/types.js +9 -0
  352. package/dist/checkout/types.js.map +1 -0
  353. package/dist/core/config.d.ts +296 -0
  354. package/dist/core/config.d.ts.map +1 -0
  355. package/dist/core/config.js +162 -0
  356. package/dist/core/config.js.map +1 -0
  357. package/dist/core/db/client.d.ts +69 -0
  358. package/dist/core/db/client.d.ts.map +1 -0
  359. package/dist/core/db/client.js +202 -0
  360. package/dist/core/db/client.js.map +1 -0
  361. package/dist/core/db/index.d.ts +11 -0
  362. package/dist/core/db/index.d.ts.map +1 -0
  363. package/dist/core/db/index.js +87 -0
  364. package/dist/core/db/index.js.map +1 -0
  365. package/dist/core/db/queries.d.ts +658 -0
  366. package/dist/core/db/queries.d.ts.map +1 -0
  367. package/dist/core/db/queries.js +735 -0
  368. package/dist/core/db/queries.js.map +1 -0
  369. package/dist/core/db/schema.d.ts +1628 -0
  370. package/dist/core/db/schema.d.ts.map +1 -0
  371. package/dist/core/db/schema.js +262 -0
  372. package/dist/core/db/schema.js.map +1 -0
  373. package/dist/core/index.d.ts +20 -0
  374. package/dist/core/index.d.ts.map +1 -0
  375. package/dist/core/index.js +71 -0
  376. package/dist/core/index.js.map +1 -0
  377. package/dist/core/server/index.d.ts +17 -0
  378. package/dist/core/server/index.d.ts.map +1 -0
  379. package/dist/core/server/index.js +68 -0
  380. package/dist/core/server/index.js.map +1 -0
  381. package/dist/core/types.d.ts +230 -0
  382. package/dist/core/types.d.ts.map +1 -0
  383. package/dist/core/types.js +9 -0
  384. package/dist/core/types.js.map +1 -0
  385. package/dist/core/utils.d.ts +153 -0
  386. package/dist/core/utils.d.ts.map +1 -0
  387. package/dist/core/utils.js +356 -0
  388. package/dist/core/utils.js.map +1 -0
  389. package/dist/emails/config.d.ts +42 -0
  390. package/dist/emails/config.d.ts.map +1 -0
  391. package/dist/emails/config.js +89 -0
  392. package/dist/emails/config.js.map +1 -0
  393. package/dist/emails/index.d.ts +85 -0
  394. package/dist/emails/index.d.ts.map +1 -0
  395. package/dist/emails/index.js +170 -0
  396. package/dist/emails/index.js.map +1 -0
  397. package/dist/emails/send/auth.d.ts +91 -0
  398. package/dist/emails/send/auth.d.ts.map +1 -0
  399. package/dist/emails/send/auth.js +132 -0
  400. package/dist/emails/send/auth.js.map +1 -0
  401. package/dist/emails/send/index.d.ts +10 -0
  402. package/dist/emails/send/index.d.ts.map +1 -0
  403. package/dist/emails/send/index.js +33 -0
  404. package/dist/emails/send/index.js.map +1 -0
  405. package/dist/emails/send/orders.d.ts +180 -0
  406. package/dist/emails/send/orders.d.ts.map +1 -0
  407. package/dist/emails/send/orders.js +259 -0
  408. package/dist/emails/send/orders.js.map +1 -0
  409. package/dist/emails/sender.d.ts +72 -0
  410. package/dist/emails/sender.d.ts.map +1 -0
  411. package/dist/emails/sender.js +118 -0
  412. package/dist/emails/sender.js.map +1 -0
  413. package/dist/emails/templates/base.d.ts +105 -0
  414. package/dist/emails/templates/base.d.ts.map +1 -0
  415. package/dist/emails/templates/base.js +291 -0
  416. package/dist/emails/templates/base.js.map +1 -0
  417. package/dist/emails/templates/email-verification.d.ts +28 -0
  418. package/dist/emails/templates/email-verification.d.ts.map +1 -0
  419. package/dist/emails/templates/email-verification.js +56 -0
  420. package/dist/emails/templates/email-verification.js.map +1 -0
  421. package/dist/emails/templates/index.d.ts +15 -0
  422. package/dist/emails/templates/index.d.ts.map +1 -0
  423. package/dist/emails/templates/index.js +58 -0
  424. package/dist/emails/templates/index.js.map +1 -0
  425. package/dist/emails/templates/order-cancelled.d.ts +30 -0
  426. package/dist/emails/templates/order-cancelled.d.ts.map +1 -0
  427. package/dist/emails/templates/order-cancelled.js +87 -0
  428. package/dist/emails/templates/order-cancelled.js.map +1 -0
  429. package/dist/emails/templates/order-confirmation.d.ts +36 -0
  430. package/dist/emails/templates/order-confirmation.d.ts.map +1 -0
  431. package/dist/emails/templates/order-confirmation.js +161 -0
  432. package/dist/emails/templates/order-confirmation.js.map +1 -0
  433. package/dist/emails/templates/order-delivered.d.ts +31 -0
  434. package/dist/emails/templates/order-delivered.d.ts.map +1 -0
  435. package/dist/emails/templates/order-delivered.js +95 -0
  436. package/dist/emails/templates/order-delivered.js.map +1 -0
  437. package/dist/emails/templates/order-shipped.d.ts +32 -0
  438. package/dist/emails/templates/order-shipped.d.ts.map +1 -0
  439. package/dist/emails/templates/order-shipped.js +87 -0
  440. package/dist/emails/templates/order-shipped.js.map +1 -0
  441. package/dist/emails/templates/password-reset.d.ts +27 -0
  442. package/dist/emails/templates/password-reset.d.ts.map +1 -0
  443. package/dist/emails/templates/password-reset.js +55 -0
  444. package/dist/emails/templates/password-reset.js.map +1 -0
  445. package/dist/emails/templates/refund-processed.d.ts +32 -0
  446. package/dist/emails/templates/refund-processed.d.ts.map +1 -0
  447. package/dist/emails/templates/refund-processed.js +96 -0
  448. package/dist/emails/templates/refund-processed.js.map +1 -0
  449. package/dist/emails/templates/welcome.d.ts +27 -0
  450. package/dist/emails/templates/welcome.d.ts.map +1 -0
  451. package/dist/emails/templates/welcome.js +56 -0
  452. package/dist/emails/templates/welcome.js.map +1 -0
  453. package/dist/emails/types.d.ts +202 -0
  454. package/dist/emails/types.d.ts.map +1 -0
  455. package/dist/emails/types.js +8 -0
  456. package/dist/emails/types.js.map +1 -0
  457. package/dist/emails/utils.d.ts +94 -0
  458. package/dist/emails/utils.d.ts.map +1 -0
  459. package/dist/emails/utils.js +229 -0
  460. package/dist/emails/utils.js.map +1 -0
  461. package/dist/index.d.ts +40 -0
  462. package/dist/index.d.ts.map +1 -0
  463. package/dist/index.js +225 -0
  464. package/dist/index.js.map +1 -0
  465. package/dist/products/api/categories.d.ts +29 -0
  466. package/dist/products/api/categories.d.ts.map +1 -0
  467. package/dist/products/api/categories.js +49 -0
  468. package/dist/products/api/categories.js.map +1 -0
  469. package/dist/products/api/index.d.ts +24 -0
  470. package/dist/products/api/index.d.ts.map +1 -0
  471. package/dist/products/api/index.js +30 -0
  472. package/dist/products/api/index.js.map +1 -0
  473. package/dist/products/api/product.d.ts +36 -0
  474. package/dist/products/api/product.d.ts.map +1 -0
  475. package/dist/products/api/product.js +70 -0
  476. package/dist/products/api/product.js.map +1 -0
  477. package/dist/products/api/products.d.ts +41 -0
  478. package/dist/products/api/products.d.ts.map +1 -0
  479. package/dist/products/api/products.js +102 -0
  480. package/dist/products/api/products.js.map +1 -0
  481. package/dist/products/components/CategoryNav.d.ts +51 -0
  482. package/dist/products/components/CategoryNav.d.ts.map +1 -0
  483. package/dist/products/components/CategoryNav.js +115 -0
  484. package/dist/products/components/CategoryNav.js.map +1 -0
  485. package/dist/products/components/ProductBreadcrumb.d.ts +52 -0
  486. package/dist/products/components/ProductBreadcrumb.d.ts.map +1 -0
  487. package/dist/products/components/ProductBreadcrumb.js +78 -0
  488. package/dist/products/components/ProductBreadcrumb.js.map +1 -0
  489. package/dist/products/components/ProductCard.d.ts +54 -0
  490. package/dist/products/components/ProductCard.d.ts.map +1 -0
  491. package/dist/products/components/ProductCard.js +65 -0
  492. package/dist/products/components/ProductCard.js.map +1 -0
  493. package/dist/products/components/ProductDetails.d.ts +63 -0
  494. package/dist/products/components/ProductDetails.d.ts.map +1 -0
  495. package/dist/products/components/ProductDetails.js +105 -0
  496. package/dist/products/components/ProductDetails.js.map +1 -0
  497. package/dist/products/components/ProductFilters.d.ts +70 -0
  498. package/dist/products/components/ProductFilters.d.ts.map +1 -0
  499. package/dist/products/components/ProductFilters.js +127 -0
  500. package/dist/products/components/ProductFilters.js.map +1 -0
  501. package/dist/products/components/ProductGallery.d.ts +37 -0
  502. package/dist/products/components/ProductGallery.d.ts.map +1 -0
  503. package/dist/products/components/ProductGallery.js +80 -0
  504. package/dist/products/components/ProductGallery.js.map +1 -0
  505. package/dist/products/components/ProductGrid.d.ts +50 -0
  506. package/dist/products/components/ProductGrid.d.ts.map +1 -0
  507. package/dist/products/components/ProductGrid.js +83 -0
  508. package/dist/products/components/ProductGrid.js.map +1 -0
  509. package/dist/products/components/ProductSearch.d.ts +43 -0
  510. package/dist/products/components/ProductSearch.d.ts.map +1 -0
  511. package/dist/products/components/ProductSearch.js +99 -0
  512. package/dist/products/components/ProductSearch.js.map +1 -0
  513. package/dist/products/components/ProductSort.d.ts +43 -0
  514. package/dist/products/components/ProductSort.d.ts.map +1 -0
  515. package/dist/products/components/ProductSort.js +61 -0
  516. package/dist/products/components/ProductSort.js.map +1 -0
  517. package/dist/products/components/VariantSelector.d.ts +43 -0
  518. package/dist/products/components/VariantSelector.d.ts.map +1 -0
  519. package/dist/products/components/VariantSelector.js +147 -0
  520. package/dist/products/components/VariantSelector.js.map +1 -0
  521. package/dist/products/components/index.d.ts +26 -0
  522. package/dist/products/components/index.d.ts.map +1 -0
  523. package/dist/products/components/index.js +32 -0
  524. package/dist/products/components/index.js.map +1 -0
  525. package/dist/products/hooks/index.d.ts +14 -0
  526. package/dist/products/hooks/index.d.ts.map +1 -0
  527. package/dist/products/hooks/index.js +17 -0
  528. package/dist/products/hooks/index.js.map +1 -0
  529. package/dist/products/hooks/useCategories.d.ts +56 -0
  530. package/dist/products/hooks/useCategories.d.ts.map +1 -0
  531. package/dist/products/hooks/useCategories.js +126 -0
  532. package/dist/products/hooks/useCategories.js.map +1 -0
  533. package/dist/products/hooks/useProduct.d.ts +44 -0
  534. package/dist/products/hooks/useProduct.d.ts.map +1 -0
  535. package/dist/products/hooks/useProduct.js +86 -0
  536. package/dist/products/hooks/useProduct.js.map +1 -0
  537. package/dist/products/hooks/useProductAttributes.d.ts +59 -0
  538. package/dist/products/hooks/useProductAttributes.d.ts.map +1 -0
  539. package/dist/products/hooks/useProductAttributes.js +148 -0
  540. package/dist/products/hooks/useProductAttributes.js.map +1 -0
  541. package/dist/products/hooks/useProducts.d.ts +67 -0
  542. package/dist/products/hooks/useProducts.d.ts.map +1 -0
  543. package/dist/products/hooks/useProducts.js +132 -0
  544. package/dist/products/hooks/useProducts.js.map +1 -0
  545. package/dist/products/index.d.ts +94 -0
  546. package/dist/products/index.d.ts.map +1 -0
  547. package/dist/products/index.js +123 -0
  548. package/dist/products/index.js.map +1 -0
  549. package/dist/theme/ThemeProvider.d.ts +70 -0
  550. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  551. package/dist/theme/ThemeProvider.js +77 -0
  552. package/dist/theme/ThemeProvider.js.map +1 -0
  553. package/dist/theme/colors.d.ts +148 -0
  554. package/dist/theme/colors.d.ts.map +1 -0
  555. package/dist/theme/colors.js +219 -0
  556. package/dist/theme/colors.js.map +1 -0
  557. package/dist/theme/defaults.d.ts +212 -0
  558. package/dist/theme/defaults.d.ts.map +1 -0
  559. package/dist/theme/defaults.js +278 -0
  560. package/dist/theme/defaults.js.map +1 -0
  561. package/dist/theme/fonts.d.ts +59 -0
  562. package/dist/theme/fonts.d.ts.map +1 -0
  563. package/dist/theme/fonts.js +202 -0
  564. package/dist/theme/fonts.js.map +1 -0
  565. package/dist/theme/generator.d.ts +50 -0
  566. package/dist/theme/generator.d.ts.map +1 -0
  567. package/dist/theme/generator.js +322 -0
  568. package/dist/theme/generator.js.map +1 -0
  569. package/dist/theme/hooks.d.ts +110 -0
  570. package/dist/theme/hooks.d.ts.map +1 -0
  571. package/dist/theme/hooks.js +106 -0
  572. package/dist/theme/hooks.js.map +1 -0
  573. package/dist/theme/index.d.ts +37 -0
  574. package/dist/theme/index.d.ts.map +1 -0
  575. package/dist/theme/index.js +85 -0
  576. package/dist/theme/index.js.map +1 -0
  577. package/package.json +1 -1
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.InventoryEditor = InventoryEditor;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * @rovela/sdk/admin/components/InventoryEditor
8
+ *
9
+ * Inline inventory editing for product variants.
10
+ */
11
+ const react_1 = require("react");
12
+ const useAdminProducts_1 = require("../hooks/useAdminProducts");
13
+ // =============================================================================
14
+ // Component
15
+ // =============================================================================
16
+ /**
17
+ * Inline inventory editor for product variants.
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * <InventoryEditor
22
+ * productId="123"
23
+ * variants={product.variants}
24
+ * onUpdate={() => refetch()}
25
+ * />
26
+ * ```
27
+ */
28
+ function InventoryEditor({ productId, variants, onUpdate, className = '', }) {
29
+ const { updateVariant } = (0, useAdminProducts_1.useAdminProducts)();
30
+ const [editingId, setEditingId] = (0, react_1.useState)(null);
31
+ const [editValue, setEditValue] = (0, react_1.useState)(0);
32
+ const [isUpdating, setIsUpdating] = (0, react_1.useState)(false);
33
+ const handleStartEdit = (0, react_1.useCallback)((variantId, currentValue) => {
34
+ setEditingId(variantId);
35
+ setEditValue(currentValue);
36
+ }, []);
37
+ const handleCancelEdit = (0, react_1.useCallback)(() => {
38
+ setEditingId(null);
39
+ setEditValue(0);
40
+ }, []);
41
+ const handleSave = (0, react_1.useCallback)(async (variantId) => {
42
+ setIsUpdating(true);
43
+ try {
44
+ const result = await updateVariant(productId, variantId, {
45
+ inventory: editValue,
46
+ });
47
+ if (result.success) {
48
+ setEditingId(null);
49
+ onUpdate?.();
50
+ }
51
+ }
52
+ finally {
53
+ setIsUpdating(false);
54
+ }
55
+ }, [productId, editValue, updateVariant, onUpdate]);
56
+ const handleKeyDown = (0, react_1.useCallback)((e, variantId) => {
57
+ if (e.key === 'Enter') {
58
+ handleSave(variantId);
59
+ }
60
+ else if (e.key === 'Escape') {
61
+ handleCancelEdit();
62
+ }
63
+ }, [handleSave, handleCancelEdit]);
64
+ if (!variants || variants.length === 0) {
65
+ return ((0, jsx_runtime_1.jsx)("div", { className: `rounded-lg border border-border bg-card p-6 ${className}`, children: (0, jsx_runtime_1.jsx)("p", { className: "text-center text-muted-foreground", children: "No variants to manage inventory for." }) }));
66
+ }
67
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `rounded-lg border border-border bg-card overflow-hidden ${className}`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "border-b border-border px-6 py-4", children: [(0, jsx_runtime_1.jsx)("h3", { className: "text-lg font-medium text-foreground", children: "Inventory Management" }), (0, jsx_runtime_1.jsx)("p", { className: "mt-1 text-sm text-muted-foreground", children: "Click on inventory count to edit" })] }), (0, jsx_runtime_1.jsx)("div", { className: "overflow-x-auto", children: (0, jsx_runtime_1.jsxs)("table", { className: "w-full", children: [(0, jsx_runtime_1.jsx)("thead", { children: (0, jsx_runtime_1.jsxs)("tr", { className: "border-b border-border bg-muted/50 text-left text-xs font-medium uppercase text-muted-foreground", children: [(0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "Variant" }), (0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "SKU" }), (0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "Price" }), (0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "Inventory" }), (0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "Status" })] }) }), (0, jsx_runtime_1.jsx)("tbody", { className: "divide-y divide-border", children: variants.map((variant) => {
68
+ const isEditing = editingId === variant.id;
69
+ const isLowStock = variant.inventory !== undefined && variant.inventory <= 10;
70
+ const isOutOfStock = variant.inventory === 0;
71
+ return ((0, jsx_runtime_1.jsxs)("tr", { className: "hover:bg-muted/50", children: [(0, jsx_runtime_1.jsxs)("td", { className: "px-6 py-4", children: [(0, jsx_runtime_1.jsx)("div", { className: "font-medium text-foreground", children: variant.name }), variant.attributes && Object.keys(variant.attributes).length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: "mt-1 flex flex-wrap gap-1", children: Object.entries(variant.attributes).map(([key, value]) => ((0, jsx_runtime_1.jsxs)("span", { className: "rounded bg-muted px-1.5 py-0.5 text-xs text-muted-foreground", children: [key, ": ", value] }, key))) }))] }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4 text-sm text-muted-foreground", children: variant.sku || '—' }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4 text-sm text-foreground", children: variant.price
72
+ ? new Intl.NumberFormat('en-US', {
73
+ style: 'currency',
74
+ currency: 'USD',
75
+ }).format(parseFloat(variant.price))
76
+ : '—' }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: isEditing ? ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)("input", { type: "number", min: "0", value: editValue, onChange: (e) => setEditValue(parseInt(e.target.value) || 0), onKeyDown: (e) => handleKeyDown(e, variant.id), autoFocus: true, disabled: isUpdating, className: "w-20 rounded-md border border-input bg-background px-2 py-1 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary disabled:opacity-50" }), (0, jsx_runtime_1.jsx)("button", { onClick: () => handleSave(variant.id), disabled: isUpdating, className: "rounded-md bg-primary px-2 py-1 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50", children: isUpdating ? '...' : 'Save' }), (0, jsx_runtime_1.jsx)("button", { onClick: handleCancelEdit, disabled: isUpdating, className: "rounded-md border border-border px-2 py-1 text-xs text-foreground hover:bg-accent disabled:opacity-50", children: "Cancel" })] })) : ((0, jsx_runtime_1.jsx)("button", { onClick: () => handleStartEdit(variant.id, variant.inventory ?? 0), className: "rounded-md border border-transparent px-2 py-1 text-sm font-medium text-foreground hover:border-border hover:bg-muted", children: variant.inventory ?? 0 })) }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: (0, jsx_runtime_1.jsx)("span", { className: `inline-flex rounded-full px-2 py-1 text-xs font-medium ${isOutOfStock
77
+ ? 'bg-red-100 text-red-800'
78
+ : isLowStock
79
+ ? 'bg-amber-100 text-amber-800'
80
+ : 'bg-green-100 text-green-800'}`, children: isOutOfStock ? 'Out of stock' : isLowStock ? 'Low stock' : 'In stock' }) })] }, variant.id));
81
+ }) })] }) })] }));
82
+ }
83
+ //# sourceMappingURL=InventoryEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InventoryEditor.js","sourceRoot":"","sources":["../../../src/admin/components/InventoryEditor.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { LowStockAlertProps } from '../types';
2
+ /**
3
+ * Low stock alert widget for dashboard.
4
+ *
5
+ * @example
6
+ * ```tsx
7
+ * <LowStockAlert threshold={10} viewAllHref="/admin/products?filter=low-stock" />
8
+ * ```
9
+ */
10
+ export declare function LowStockAlert({ threshold, viewAllHref, className, }: LowStockAlertProps): import("react/jsx-runtime").JSX.Element | null;
11
+ //# sourceMappingURL=LowStockAlert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LowStockAlert.d.ts","sourceRoot":"","sources":["../../../src/admin/components/LowStockAlert.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAMlD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,EAC5B,SAAc,EACd,WAA+B,EAC/B,SAAc,GACf,EAAE,kBAAkB,kDAiGpB"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.LowStockAlert = LowStockAlert;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * @rovela/sdk/admin/components/LowStockAlert
8
+ *
9
+ * Low stock inventory warning widget.
10
+ */
11
+ const useAdminStats_1 = require("../hooks/useAdminStats");
12
+ // =============================================================================
13
+ // Component
14
+ // =============================================================================
15
+ /**
16
+ * Low stock alert widget for dashboard.
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * <LowStockAlert threshold={10} viewAllHref="/admin/products?filter=low-stock" />
21
+ * ```
22
+ */
23
+ function LowStockAlert({ threshold = 10, viewAllHref = '/admin/products', className = '', }) {
24
+ const { lowStock, isLoading } = (0, useAdminStats_1.useAdminStats)({
25
+ lowStockThreshold: threshold,
26
+ });
27
+ // Don't show if no low stock items
28
+ if (!isLoading && lowStock.length === 0) {
29
+ return null;
30
+ }
31
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `rounded-lg border border-border bg-card ${className}`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between border-b border-border px-6 py-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)("svg", { className: "h-5 w-5 text-amber-500", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" }) }), (0, jsx_runtime_1.jsx)("h3", { className: "text-lg font-medium text-foreground", children: "Low Stock Alert" }), !isLoading && ((0, jsx_runtime_1.jsxs)("span", { className: "rounded-full bg-amber-100 px-2 py-0.5 text-xs font-medium text-amber-800", children: [lowStock.length, " item", lowStock.length !== 1 ? 's' : ''] }))] }), (0, jsx_runtime_1.jsx)("a", { href: viewAllHref, className: "text-sm text-primary hover:underline", children: "View all" })] }), (0, jsx_runtime_1.jsx)("div", { className: "divide-y divide-border", children: isLoading ? ((0, jsx_runtime_1.jsx)("div", { className: "p-6", children: (0, jsx_runtime_1.jsx)("div", { className: "space-y-4", children: [...Array(3)].map((_, i) => ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "space-y-2", children: [(0, jsx_runtime_1.jsx)("div", { className: "h-4 w-32 animate-pulse rounded bg-muted" }), (0, jsx_runtime_1.jsx)("div", { className: "h-3 w-20 animate-pulse rounded bg-muted" })] }), (0, jsx_runtime_1.jsx)("div", { className: "h-6 w-16 animate-pulse rounded bg-muted" })] }, i))) }) })) : (lowStock.slice(0, 5).map((item) => ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between px-6 py-4 hover:bg-muted/50", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("a", { href: `/admin/products/${item.productId}`, className: "font-medium text-foreground hover:text-primary", children: item.productName }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-muted-foreground", children: item.variantName })] }), (0, jsx_runtime_1.jsx)("div", { className: "flex items-center gap-2", children: (0, jsx_runtime_1.jsx)("span", { className: `rounded-full px-2 py-1 text-xs font-medium ${item.inventory === 0
32
+ ? 'bg-red-100 text-red-800'
33
+ : 'bg-amber-100 text-amber-800'}`, children: item.inventory === 0 ? 'Out of stock' : `${item.inventory} left` }) })] }, item.variantId)))) }), !isLoading && lowStock.length > 5 && ((0, jsx_runtime_1.jsx)("div", { className: "border-t border-border px-6 py-3 text-center", children: (0, jsx_runtime_1.jsxs)("a", { href: viewAllHref, className: "text-sm text-primary hover:underline", children: ["+", lowStock.length - 5, " more items"] }) }))] }));
34
+ }
35
+ //# sourceMappingURL=LowStockAlert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LowStockAlert.js","sourceRoot":"","sources":["../../../src/admin/components/LowStockAlert.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { OrderDetailsProps } from '../types';
2
+ /**
3
+ * Order details view with items and actions.
4
+ *
5
+ * @example
6
+ * ```tsx
7
+ * <OrderDetails
8
+ * orderId="123"
9
+ * onRefund={() => setShowRefundDialog(true)}
10
+ * />
11
+ * ```
12
+ */
13
+ export declare function OrderDetails({ orderId, onRefund, onBack, className, }: OrderDetailsProps): import("react/jsx-runtime").JSX.Element;
14
+ //# sourceMappingURL=OrderDetails.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrderDetails.d.ts","sourceRoot":"","sources":["../../../src/admin/components/OrderDetails.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,UAAU,CAAA;AAiCnE;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAc,GACf,EAAE,iBAAiB,2CA0PnB"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.OrderDetails = OrderDetails;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * @rovela/sdk/admin/components/OrderDetails
8
+ *
9
+ * Full order details view with items, addresses, and actions.
10
+ */
11
+ const react_1 = require("react");
12
+ const useAdminOrders_1 = require("../hooks/useAdminOrders");
13
+ // =============================================================================
14
+ // Status Badge
15
+ // =============================================================================
16
+ function StatusBadge({ status }) {
17
+ const statusStyles = {
18
+ pending: 'bg-yellow-100 text-yellow-800',
19
+ paid: 'bg-green-100 text-green-800',
20
+ shipped: 'bg-blue-100 text-blue-800',
21
+ delivered: 'bg-green-100 text-green-800',
22
+ cancelled: 'bg-red-100 text-red-800',
23
+ refunded: 'bg-gray-100 text-gray-800',
24
+ };
25
+ return ((0, jsx_runtime_1.jsx)("span", { className: `inline-flex rounded-full px-2 py-1 text-xs font-medium ${statusStyles[status] || 'bg-gray-100 text-gray-800'}`, children: status.charAt(0).toUpperCase() + status.slice(1) }));
26
+ }
27
+ // =============================================================================
28
+ // Component
29
+ // =============================================================================
30
+ /**
31
+ * Order details view with items and actions.
32
+ *
33
+ * @example
34
+ * ```tsx
35
+ * <OrderDetails
36
+ * orderId="123"
37
+ * onRefund={() => setShowRefundDialog(true)}
38
+ * />
39
+ * ```
40
+ */
41
+ function OrderDetails({ orderId, onRefund, onBack, className = '', }) {
42
+ const { getOrder, updateStatus } = (0, useAdminOrders_1.useAdminOrders)();
43
+ const [order, setOrder] = (0, react_1.useState)(null);
44
+ const [isLoading, setIsLoading] = (0, react_1.useState)(true);
45
+ const [isUpdating, setIsUpdating] = (0, react_1.useState)(false);
46
+ (0, react_1.useEffect)(() => {
47
+ if (orderId) {
48
+ setIsLoading(true);
49
+ getOrder(orderId).then((data) => {
50
+ setOrder(data);
51
+ setIsLoading(false);
52
+ });
53
+ }
54
+ }, [orderId, getOrder]);
55
+ const handleStatusChange = (0, react_1.useCallback)(async (newStatus) => {
56
+ if (!order)
57
+ return;
58
+ setIsUpdating(true);
59
+ const success = await updateStatus(order.id, newStatus);
60
+ if (success) {
61
+ setOrder((prev) => prev ? { ...prev, status: newStatus } : null);
62
+ }
63
+ setIsUpdating(false);
64
+ }, [order, updateStatus]);
65
+ const formatDate = (dateString) => {
66
+ return new Date(dateString).toLocaleDateString('en-US', {
67
+ weekday: 'long',
68
+ year: 'numeric',
69
+ month: 'long',
70
+ day: 'numeric',
71
+ hour: '2-digit',
72
+ minute: '2-digit',
73
+ });
74
+ };
75
+ const formatCurrency = (value) => {
76
+ const numValue = typeof value === 'string' ? parseFloat(value) : value;
77
+ return new Intl.NumberFormat('en-US', {
78
+ style: 'currency',
79
+ currency: 'USD',
80
+ }).format(numValue);
81
+ };
82
+ if (isLoading) {
83
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `space-y-6 ${className}`, children: [(0, jsx_runtime_1.jsx)("div", { className: "h-8 w-48 animate-pulse rounded bg-muted" }), (0, jsx_runtime_1.jsx)("div", { className: "rounded-lg border border-border bg-card p-6", children: (0, jsx_runtime_1.jsx)("div", { className: "space-y-4", children: [...Array(4)].map((_, i) => ((0, jsx_runtime_1.jsx)("div", { className: "h-6 w-full animate-pulse rounded bg-muted" }, i))) }) })] }));
84
+ }
85
+ if (!order) {
86
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `rounded-lg border border-border bg-card p-12 text-center ${className}`, children: [(0, jsx_runtime_1.jsx)("p", { className: "text-muted-foreground", children: "Order not found" }), onBack && ((0, jsx_runtime_1.jsx)("button", { onClick: onBack, className: "mt-4 text-sm text-primary hover:underline", children: "Go back" }))] }));
87
+ }
88
+ const canRefund = order.status === 'paid' || order.status === 'shipped' || order.status === 'delivered';
89
+ const canUpdateStatus = order.status !== 'refunded' && order.status !== 'cancelled';
90
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `space-y-6 ${className}`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-4", children: [onBack && ((0, jsx_runtime_1.jsx)("button", { onClick: onBack, className: "rounded-md border border-border p-2 hover:bg-accent", children: (0, jsx_runtime_1.jsx)("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) }) })), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("h1", { className: "text-2xl font-semibold text-foreground", children: ["Order #", order.id.slice(-8).toUpperCase()] }), (0, jsx_runtime_1.jsxs)("p", { className: "text-sm text-muted-foreground", children: ["Placed on ", formatDate(order.createdAt)] })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)(StatusBadge, { status: order.status }), canRefund && onRefund && ((0, jsx_runtime_1.jsx)("button", { onClick: () => onRefund(order.id), className: "rounded-md border border-destructive px-3 py-1.5 text-sm text-destructive hover:bg-destructive/10", children: "Refund" }))] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "grid gap-6 lg:grid-cols-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "lg:col-span-2 space-y-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card", children: [(0, jsx_runtime_1.jsx)("div", { className: "border-b border-border px-6 py-4", children: (0, jsx_runtime_1.jsx)("h2", { className: "font-medium text-foreground", children: "Order Items" }) }), (0, jsx_runtime_1.jsx)("div", { className: "divide-y divide-border", children: order.items?.map((item, index) => ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-4 px-6 py-4", children: [(0, jsx_runtime_1.jsx)("div", { className: "flex h-16 w-16 items-center justify-center rounded bg-muted text-muted-foreground", children: (0, jsx_runtime_1.jsx)("svg", { className: "h-6 w-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4" }) }) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex-1", children: [(0, jsx_runtime_1.jsx)("p", { className: "font-medium text-foreground", children: item.name }), item.attributes && Object.keys(item.attributes).length > 0 && ((0, jsx_runtime_1.jsx)("p", { className: "text-sm text-muted-foreground", children: Object.entries(item.attributes).map(([k, v]) => `${k}: ${v}`).join(', ') }))] }), (0, jsx_runtime_1.jsxs)("div", { className: "text-right", children: [(0, jsx_runtime_1.jsx)("p", { className: "font-medium text-foreground", children: formatCurrency(item.price) }), (0, jsx_runtime_1.jsxs)("p", { className: "text-sm text-muted-foreground", children: ["Qty: ", item.quantity] })] })] }, index))) })] }), canUpdateStatus && ((0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card p-6", children: [(0, jsx_runtime_1.jsx)("h2", { className: "mb-4 font-medium text-foreground", children: "Update Status" }), (0, jsx_runtime_1.jsx)("div", { className: "flex flex-wrap gap-2", children: ['pending', 'paid', 'shipped', 'delivered', 'cancelled'].map((s) => ((0, jsx_runtime_1.jsx)("button", { onClick: () => handleStatusChange(s), disabled: isUpdating || order.status === s, className: `rounded-md px-3 py-1.5 text-sm font-medium transition-colors ${order.status === s
91
+ ? 'bg-primary text-primary-foreground'
92
+ : 'border border-border hover:bg-accent'} disabled:opacity-50`, children: s.charAt(0).toUpperCase() + s.slice(1) }, s))) })] }))] }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card p-6", children: [(0, jsx_runtime_1.jsx)("h2", { className: "mb-4 font-medium text-foreground", children: "Order Summary" }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-2 text-sm", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-muted-foreground", children: "Subtotal" }), (0, jsx_runtime_1.jsx)("span", { className: "text-foreground", children: formatCurrency(order.subtotal) })] }), order.tax && parseFloat(order.tax) > 0 && ((0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-muted-foreground", children: "Tax" }), (0, jsx_runtime_1.jsx)("span", { className: "text-foreground", children: formatCurrency(order.tax) })] })), order.shipping && parseFloat(order.shipping) > 0 && ((0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-muted-foreground", children: "Shipping" }), (0, jsx_runtime_1.jsx)("span", { className: "text-foreground", children: formatCurrency(order.shipping) })] })), (0, jsx_runtime_1.jsx)("div", { className: "border-t border-border pt-2", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between font-medium", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-foreground", children: "Total" }), (0, jsx_runtime_1.jsx)("span", { className: "text-foreground", children: formatCurrency(order.total) })] }) })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card p-6", children: [(0, jsx_runtime_1.jsx)("h2", { className: "mb-4 font-medium text-foreground", children: "Customer" }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-2 text-sm", children: [(0, jsx_runtime_1.jsx)("p", { className: "text-foreground", children: order.email }), order.customerId && ((0, jsx_runtime_1.jsx)("a", { href: `/admin/customers/${order.customerId}`, className: "text-primary hover:underline", children: "View customer profile" }))] })] }), order.shippingAddress && ((0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card p-6", children: [(0, jsx_runtime_1.jsx)("h2", { className: "mb-4 font-medium text-foreground", children: "Shipping Address" }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-1 text-sm text-muted-foreground", children: [(0, jsx_runtime_1.jsx)("p", { children: order.shippingAddress.name }), (0, jsx_runtime_1.jsx)("p", { children: order.shippingAddress.line1 }), order.shippingAddress.line2 && (0, jsx_runtime_1.jsx)("p", { children: order.shippingAddress.line2 }), (0, jsx_runtime_1.jsxs)("p", { children: [order.shippingAddress.city, ", ", order.shippingAddress.state, " ", order.shippingAddress.postalCode] }), (0, jsx_runtime_1.jsx)("p", { children: order.shippingAddress.country })] })] })), order.stripePaymentIntentId && ((0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card p-6", children: [(0, jsx_runtime_1.jsx)("h2", { className: "mb-4 font-medium text-foreground", children: "Payment" }), (0, jsx_runtime_1.jsx)("div", { className: "space-y-2 text-sm", children: (0, jsx_runtime_1.jsxs)("p", { className: "text-muted-foreground", children: ["Payment Intent: ", order.stripePaymentIntentId.slice(-8)] }) })] }))] })] })] }));
93
+ }
94
+ //# sourceMappingURL=OrderDetails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrderDetails.js","sourceRoot":"","sources":["../../../src/admin/components/OrderDetails.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAA;;AAsDZ,oCA+PC;;AAnTD;;;;GAIG;AAEH,iCAAwD;AACxD,4DAAwD;AAKxD,gFAAgF;AAChF,eAAe;AACf,gFAAgF;AAEhF,SAAS,WAAW,CAAC,EAAE,MAAM,EAAsB;IACjD,MAAM,YAAY,GAA2B;QAC3C,OAAO,EAAE,+BAA+B;QACxC,IAAI,EAAE,6BAA6B;QACnC,OAAO,EAAE,2BAA2B;QACpC,SAAS,EAAE,6BAA6B;QACxC,SAAS,EAAE,yBAAyB;QACpC,QAAQ,EAAE,2BAA2B;KACtC,CAAA;IAED,OAAO,CACL,iCACE,SAAS,EAAE,0DACT,YAAY,CAAC,MAAM,CAAC,IAAI,2BAC1B,EAAE,YAED,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAC5C,CACR,CAAA;AACH,CAAC;AAED,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF;;;;;;;;;;GAUG;AACH,SAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,GAAG,EAAE,GACI;IAClB,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAA,+BAAc,GAAE,CAAA;IACnD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAA0B,IAAI,CAAC,CAAA;IACjE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAA;IAChD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAA;IAEnD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,OAAO,EAAE,CAAC;YACZ,YAAY,CAAC,IAAI,CAAC,CAAA;YAClB,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC9B,QAAQ,CAAC,IAAI,CAAC,CAAA;gBACd,YAAY,CAAC,KAAK,CAAC,CAAA;YACrB,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;IAEvB,MAAM,kBAAkB,GAAG,IAAA,mBAAW,EAAC,KAAK,EAAE,SAAsB,EAAE,EAAE;QACtE,IAAI,CAAC,KAAK;YAAE,OAAM;QAClB,aAAa,CAAC,IAAI,CAAC,CAAA;QACnB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;QACvD,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAClE,CAAC;QACD,aAAa,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAA;IAEzB,MAAM,UAAU,GAAG,CAAC,UAAkB,EAAE,EAAE;QACxC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;YACtD,OAAO,EAAE,MAAM;YACf,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,SAAS;YACd,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,SAAS;SAClB,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,MAAM,cAAc,GAAG,CAAC,KAAsB,EAAE,EAAE;QAChD,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QACtE,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;YACpC,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACrB,CAAC,CAAA;IAED,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CACL,iCAAK,SAAS,EAAE,aAAa,SAAS,EAAE,aACtC,gCAAK,SAAS,EAAC,yCAAyC,GAAG,EAC3D,gCAAK,SAAS,EAAC,6CAA6C,YAC1D,gCAAK,SAAS,EAAC,WAAW,YACvB,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAC3B,gCAAa,SAAS,EAAC,2CAA2C,IAAxD,CAAC,CAA0D,CACtE,CAAC,GACE,GACF,IACF,CACP,CAAA;IACH,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CACL,iCAAK,SAAS,EAAE,4DAA4D,SAAS,EAAE,aACrF,8BAAG,SAAS,EAAC,uBAAuB,gCAAoB,EACvD,MAAM,IAAI,CACT,mCACE,OAAO,EAAE,MAAM,EACf,SAAS,EAAC,2CAA2C,wBAG9C,CACV,IACG,CACP,CAAA;IACH,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,CAAA;IACvG,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,KAAK,UAAU,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,CAAA;IAEnF,OAAO,CACL,iCAAK,SAAS,EAAE,aAAa,SAAS,EAAE,aAEtC,iCAAK,SAAS,EAAC,mCAAmC,aAChD,iCAAK,SAAS,EAAC,yBAAyB,aACrC,MAAM,IAAI,CACT,mCACE,OAAO,EAAE,MAAM,EACf,SAAS,EAAC,qDAAqD,YAE/D,gCAAK,SAAS,EAAC,SAAS,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,cAAc,YAC5E,iCAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAC,iBAAiB,GAAG,GACrF,GACC,CACV,EACD,4CACE,gCAAI,SAAS,EAAC,wCAAwC,wBAC5C,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,IACrC,EACL,+BAAG,SAAS,EAAC,+BAA+B,2BAC/B,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,IACpC,IACA,IACF,EACN,iCAAK,SAAS,EAAC,yBAAyB,aACtC,uBAAC,WAAW,IAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAI,EACpC,SAAS,IAAI,QAAQ,IAAI,CACxB,mCACE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EACjC,SAAS,EAAC,mGAAmG,uBAGtG,CACV,IACG,IACF,EAEN,iCAAK,SAAS,EAAC,2BAA2B,aAExC,iCAAK,SAAS,EAAC,yBAAyB,aACtC,iCAAK,SAAS,EAAC,yCAAyC,aACtD,gCAAK,SAAS,EAAC,kCAAkC,YAC/C,+BAAI,SAAS,EAAC,6BAA6B,4BAAiB,GACxD,EACN,gCAAK,SAAS,EAAC,wBAAwB,YACpC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CACjC,iCAAiB,SAAS,EAAC,mCAAmC,aAC5D,gCAAK,SAAS,EAAC,mFAAmF,YAChG,gCAAK,SAAS,EAAC,SAAS,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,cAAc,YAC5E,iCAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,WAAW,EAAE,GAAG,EAAE,CAAC,EAAC,iEAAiE,GAAG,GACvI,GACF,EACN,iCAAK,SAAS,EAAC,QAAQ,aACrB,8BAAG,SAAS,EAAC,6BAA6B,YAAE,IAAI,CAAC,IAAI,GAAK,EACzD,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAC7D,8BAAG,SAAS,EAAC,+BAA+B,YACzC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GACvE,CACL,IACG,EACN,iCAAK,SAAS,EAAC,YAAY,aACzB,8BAAG,SAAS,EAAC,6BAA6B,YAAE,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAK,EAC3E,+BAAG,SAAS,EAAC,+BAA+B,sBAAO,IAAI,CAAC,QAAQ,IAAK,IACjE,KAjBE,KAAK,CAkBT,CACP,CAAC,GACE,IACF,EAGL,eAAe,IAAI,CAClB,iCAAK,SAAS,EAAC,6CAA6C,aAC1D,+BAAI,SAAS,EAAC,kCAAkC,8BAAmB,EACnE,gCAAK,SAAS,EAAC,sBAAsB,YACjC,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,CAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACtF,mCAEE,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,EACpC,QAAQ,EAAE,UAAU,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAC1C,SAAS,EAAE,gEACT,KAAK,CAAC,MAAM,KAAK,CAAC;gDAChB,CAAC,CAAC,oCAAoC;gDACtC,CAAC,CAAC,sCACN,sBAAsB,YAErB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IATlC,CAAC,CAUC,CACV,CAAC,GACE,IACF,CACP,IACG,EAGN,iCAAK,SAAS,EAAC,WAAW,aAExB,iCAAK,SAAS,EAAC,6CAA6C,aAC1D,+BAAI,SAAS,EAAC,kCAAkC,8BAAmB,EACnE,iCAAK,SAAS,EAAC,mBAAmB,aAChC,iCAAK,SAAS,EAAC,sBAAsB,aACnC,iCAAM,SAAS,EAAC,uBAAuB,yBAAgB,EACvD,iCAAM,SAAS,EAAC,iBAAiB,YAAE,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAQ,IACrE,EACL,KAAK,CAAC,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CACzC,iCAAK,SAAS,EAAC,sBAAsB,aACnC,iCAAM,SAAS,EAAC,uBAAuB,oBAAW,EAClD,iCAAM,SAAS,EAAC,iBAAiB,YAAE,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,GAAQ,IAChE,CACP,EACA,KAAK,CAAC,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CACnD,iCAAK,SAAS,EAAC,sBAAsB,aACnC,iCAAM,SAAS,EAAC,uBAAuB,yBAAgB,EACvD,iCAAM,SAAS,EAAC,iBAAiB,YAAE,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAQ,IACrE,CACP,EACD,gCAAK,SAAS,EAAC,6BAA6B,YAC1C,iCAAK,SAAS,EAAC,kCAAkC,aAC/C,iCAAM,SAAS,EAAC,iBAAiB,sBAAa,EAC9C,iCAAM,SAAS,EAAC,iBAAiB,YAAE,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,GAAQ,IAClE,GACF,IACF,IACF,EAGN,iCAAK,SAAS,EAAC,6CAA6C,aAC1D,+BAAI,SAAS,EAAC,kCAAkC,yBAAc,EAC9D,iCAAK,SAAS,EAAC,mBAAmB,aAChC,8BAAG,SAAS,EAAC,iBAAiB,YAAE,KAAK,CAAC,KAAK,GAAK,EAC/C,KAAK,CAAC,UAAU,IAAI,CACnB,8BACE,IAAI,EAAE,oBAAoB,KAAK,CAAC,UAAU,EAAE,EAC5C,SAAS,EAAC,8BAA8B,sCAGtC,CACL,IACG,IACF,EAGL,KAAK,CAAC,eAAe,IAAI,CACxB,iCAAK,SAAS,EAAC,6CAA6C,aAC1D,+BAAI,SAAS,EAAC,kCAAkC,iCAAsB,EACtE,iCAAK,SAAS,EAAC,yCAAyC,aACtD,wCAAI,KAAK,CAAC,eAAe,CAAC,IAAI,GAAK,EACnC,wCAAI,KAAK,CAAC,eAAe,CAAC,KAAK,GAAK,EACnC,KAAK,CAAC,eAAe,CAAC,KAAK,IAAI,wCAAI,KAAK,CAAC,eAAe,CAAC,KAAK,GAAK,EACpE,0CACG,KAAK,CAAC,eAAe,CAAC,IAAI,QAAI,KAAK,CAAC,eAAe,CAAC,KAAK,OAAG,KAAK,CAAC,eAAe,CAAC,UAAU,IAC3F,EACJ,wCAAI,KAAK,CAAC,eAAe,CAAC,OAAO,GAAK,IAClC,IACF,CACP,EAGA,KAAK,CAAC,qBAAqB,IAAI,CAC9B,iCAAK,SAAS,EAAC,6CAA6C,aAC1D,+BAAI,SAAS,EAAC,kCAAkC,wBAAa,EAC7D,gCAAK,SAAS,EAAC,mBAAmB,YAChC,+BAAG,SAAS,EAAC,uBAAuB,iCACjB,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IACpD,GACA,IACF,CACP,IACG,IACF,IACF,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { OrderTableProps } from '../types';
2
+ /**
3
+ * Orders data table with filters and pagination.
4
+ *
5
+ * @example
6
+ * ```tsx
7
+ * <OrderTable
8
+ * onOrderClick={(id) => router.push(`/admin/orders/${id}`)}
9
+ * />
10
+ * ```
11
+ */
12
+ export declare function OrderTable({ initialSearch, initialStatus, pageSize, onOrderClick, className, }: OrderTableProps): import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=OrderTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrderTable.d.ts","sourceRoot":"","sources":["../../../src/admin/components/OrderTable.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAsB,MAAM,UAAU,CAAA;AAsCnE;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,EACzB,aAAa,EACb,aAAa,EACb,QAAa,EACb,YAAY,EACZ,SAAc,GACf,EAAE,eAAe,2CAsNjB"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.OrderTable = OrderTable;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * @rovela/sdk/admin/components/OrderTable
8
+ *
9
+ * Orders data table with filtering, sorting, and pagination.
10
+ */
11
+ const react_1 = require("react");
12
+ const useAdminOrders_1 = require("../hooks/useAdminOrders");
13
+ // =============================================================================
14
+ // Status Badge
15
+ // =============================================================================
16
+ function StatusBadge({ status }) {
17
+ const statusStyles = {
18
+ pending: 'bg-yellow-100 text-yellow-800',
19
+ paid: 'bg-green-100 text-green-800',
20
+ shipped: 'bg-blue-100 text-blue-800',
21
+ delivered: 'bg-green-100 text-green-800',
22
+ cancelled: 'bg-red-100 text-red-800',
23
+ refunded: 'bg-gray-100 text-gray-800',
24
+ };
25
+ return ((0, jsx_runtime_1.jsx)("span", { className: `inline-flex rounded-full px-2 py-1 text-xs font-medium ${statusStyles[status] || 'bg-gray-100 text-gray-800'}`, children: status.charAt(0).toUpperCase() + status.slice(1) }));
26
+ }
27
+ // =============================================================================
28
+ // Component
29
+ // =============================================================================
30
+ /**
31
+ * Orders data table with filters and pagination.
32
+ *
33
+ * @example
34
+ * ```tsx
35
+ * <OrderTable
36
+ * onOrderClick={(id) => router.push(`/admin/orders/${id}`)}
37
+ * />
38
+ * ```
39
+ */
40
+ function OrderTable({ initialSearch, initialStatus, pageSize = 20, onOrderClick, className = '', }) {
41
+ const { orders, total, page, isLoading, fetchOrders, updateStatus } = (0, useAdminOrders_1.useAdminOrders)();
42
+ const [search, setSearch] = (0, react_1.useState)(initialSearch || '');
43
+ const [status, setStatus] = (0, react_1.useState)(initialStatus || '');
44
+ const [sort, setSort] = (0, react_1.useState)('newest');
45
+ // Fetch orders on filter change
46
+ (0, react_1.useEffect)(() => {
47
+ fetchOrders({
48
+ search: search || undefined,
49
+ status: status || undefined,
50
+ sort,
51
+ page: 1,
52
+ limit: pageSize,
53
+ });
54
+ }, [search, status, sort, pageSize, fetchOrders]);
55
+ const handlePageChange = (0, react_1.useCallback)((newPage) => {
56
+ fetchOrders({
57
+ search: search || undefined,
58
+ status: status || undefined,
59
+ sort,
60
+ page: newPage,
61
+ limit: pageSize,
62
+ });
63
+ }, [search, status, sort, pageSize, fetchOrders]);
64
+ const handleStatusChange = (0, react_1.useCallback)(async (orderId, newStatus) => {
65
+ const success = await updateStatus(orderId, newStatus);
66
+ if (success) {
67
+ fetchOrders({ search, status: status || undefined, sort, page, limit: pageSize });
68
+ }
69
+ }, [updateStatus, fetchOrders, search, status, sort, page, pageSize]);
70
+ const formatDate = (dateString) => {
71
+ const date = new Date(dateString);
72
+ return date.toLocaleDateString('en-US', {
73
+ month: 'short',
74
+ day: 'numeric',
75
+ year: 'numeric',
76
+ hour: '2-digit',
77
+ minute: '2-digit',
78
+ });
79
+ };
80
+ const formatCurrency = (value) => {
81
+ return new Intl.NumberFormat('en-US', {
82
+ style: 'currency',
83
+ currency: 'USD',
84
+ }).format(parseFloat(value));
85
+ };
86
+ const totalPages = Math.ceil(total / pageSize);
87
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `space-y-4 ${className}`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex flex-wrap gap-4", children: [(0, jsx_runtime_1.jsx)("div", { className: "flex-1", children: (0, jsx_runtime_1.jsx)("input", { type: "text", value: search, onChange: (e) => setSearch(e.target.value), placeholder: "Search by order ID or email...", className: "w-full max-w-xs rounded-md border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" }) }), (0, jsx_runtime_1.jsxs)("select", { value: status, onChange: (e) => setStatus(e.target.value), className: "rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary", children: [(0, jsx_runtime_1.jsx)("option", { value: "", children: "All Status" }), (0, jsx_runtime_1.jsx)("option", { value: "pending", children: "Pending" }), (0, jsx_runtime_1.jsx)("option", { value: "paid", children: "Paid" }), (0, jsx_runtime_1.jsx)("option", { value: "shipped", children: "Shipped" }), (0, jsx_runtime_1.jsx)("option", { value: "delivered", children: "Delivered" }), (0, jsx_runtime_1.jsx)("option", { value: "cancelled", children: "Cancelled" }), (0, jsx_runtime_1.jsx)("option", { value: "refunded", children: "Refunded" })] }), (0, jsx_runtime_1.jsxs)("select", { value: sort, onChange: (e) => setSort(e.target.value), className: "rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary", children: [(0, jsx_runtime_1.jsx)("option", { value: "newest", children: "Newest First" }), (0, jsx_runtime_1.jsx)("option", { value: "oldest", children: "Oldest First" }), (0, jsx_runtime_1.jsx)("option", { value: "total-desc", children: "Highest Total" }), (0, jsx_runtime_1.jsx)("option", { value: "total-asc", children: "Lowest Total" })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card overflow-hidden", children: [(0, jsx_runtime_1.jsx)("div", { className: "overflow-x-auto", children: (0, jsx_runtime_1.jsxs)("table", { className: "w-full", children: [(0, jsx_runtime_1.jsx)("thead", { children: (0, jsx_runtime_1.jsxs)("tr", { className: "border-b border-border bg-muted/50 text-left text-xs font-medium uppercase text-muted-foreground", children: [(0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "Order" }), (0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "Customer" }), (0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "Status" }), (0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "Total" }), (0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "Date" }), (0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "Actions" })] }) }), (0, jsx_runtime_1.jsx)("tbody", { className: "divide-y divide-border", children: isLoading ? ([...Array(5)].map((_, i) => ((0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: (0, jsx_runtime_1.jsx)("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }) }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: (0, jsx_runtime_1.jsx)("div", { className: "h-4 w-32 animate-pulse rounded bg-muted" }) }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: (0, jsx_runtime_1.jsx)("div", { className: "h-6 w-16 animate-pulse rounded bg-muted" }) }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: (0, jsx_runtime_1.jsx)("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" }) }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: (0, jsx_runtime_1.jsx)("div", { className: "h-4 w-28 animate-pulse rounded bg-muted" }) }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: (0, jsx_runtime_1.jsx)("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" }) })] }, i)))) : orders.length === 0 ? ((0, jsx_runtime_1.jsx)("tr", { children: (0, jsx_runtime_1.jsx)("td", { colSpan: 6, className: "px-6 py-12 text-center text-muted-foreground", children: "No orders found" }) })) : (orders.map((order) => ((0, jsx_runtime_1.jsxs)("tr", { className: "hover:bg-muted/50", children: [(0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: (0, jsx_runtime_1.jsxs)("button", { onClick: () => onOrderClick?.(order.id), className: "font-medium text-primary hover:underline", children: ["#", order.id.slice(-8).toUpperCase()] }) }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4 text-sm text-foreground", children: order.email }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: (0, jsx_runtime_1.jsx)(StatusBadge, { status: order.status }) }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4 text-sm font-medium text-foreground", children: formatCurrency(order.total) }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4 text-sm text-muted-foreground", children: formatDate(order.createdAt) }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: (0, jsx_runtime_1.jsxs)("select", { value: order.status, onChange: (e) => handleStatusChange(order.id, e.target.value), disabled: order.status === 'refunded' || order.status === 'cancelled', className: "rounded-md border border-input bg-background px-2 py-1 text-xs focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary disabled:opacity-50", children: [(0, jsx_runtime_1.jsx)("option", { value: "pending", children: "Pending" }), (0, jsx_runtime_1.jsx)("option", { value: "paid", children: "Paid" }), (0, jsx_runtime_1.jsx)("option", { value: "shipped", children: "Shipped" }), (0, jsx_runtime_1.jsx)("option", { value: "delivered", children: "Delivered" }), (0, jsx_runtime_1.jsx)("option", { value: "cancelled", children: "Cancelled" }), (0, jsx_runtime_1.jsx)("option", { value: "refunded", disabled: true, children: "Refunded" })] }) })] }, order.id)))) })] }) }), totalPages > 1 && ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between border-t border-border px-6 py-3", children: [(0, jsx_runtime_1.jsxs)("p", { className: "text-sm text-muted-foreground", children: ["Showing ", (page - 1) * pageSize + 1, " to ", Math.min(page * pageSize, total), " of ", total] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex gap-2", children: [(0, jsx_runtime_1.jsx)("button", { onClick: () => handlePageChange(page - 1), disabled: page === 1, className: "rounded-md border border-border px-3 py-1 text-sm disabled:opacity-50", children: "Previous" }), (0, jsx_runtime_1.jsx)("button", { onClick: () => handlePageChange(page + 1), disabled: page >= totalPages, className: "rounded-md border border-border px-3 py-1 text-sm disabled:opacity-50", children: "Next" })] })] }))] })] }));
88
+ }
89
+ //# sourceMappingURL=OrderTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrderTable.js","sourceRoot":"","sources":["../../../src/admin/components/OrderTable.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ProductFormProps } from '../types';
2
+ /**
3
+ * Product form for create and edit.
4
+ *
5
+ * @example
6
+ * ```tsx
7
+ * // Create mode
8
+ * <ProductForm onSuccess={(id) => router.push(`/admin/products/${id}`)} />
9
+ *
10
+ * // Edit mode
11
+ * <ProductForm
12
+ * productId="123"
13
+ * onSuccess={() => router.push('/admin/products')}
14
+ * />
15
+ * ```
16
+ */
17
+ export declare function ProductForm({ productId, initialData, onSuccess, onCancel, className, }: ProductFormProps): import("react/jsx-runtime").JSX.Element;
18
+ //# sourceMappingURL=ProductForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProductForm.d.ts","sourceRoot":"","sources":["../../../src/admin/components/ProductForm.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAmB,MAAM,UAAU,CAAA;AAMjE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAc,GACf,EAAE,gBAAgB,2CA+SlB"}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ProductForm = ProductForm;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * @rovela/sdk/admin/components/ProductForm
8
+ *
9
+ * Product create/edit form.
10
+ */
11
+ const react_1 = require("react");
12
+ const useAdminProducts_1 = require("../hooks/useAdminProducts");
13
+ // =============================================================================
14
+ // Component
15
+ // =============================================================================
16
+ /**
17
+ * Product form for create and edit.
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * // Create mode
22
+ * <ProductForm onSuccess={(id) => router.push(`/admin/products/${id}`)} />
23
+ *
24
+ * // Edit mode
25
+ * <ProductForm
26
+ * productId="123"
27
+ * onSuccess={() => router.push('/admin/products')}
28
+ * />
29
+ * ```
30
+ */
31
+ function ProductForm({ productId, initialData, onSuccess, onCancel, className = '', }) {
32
+ const { getProduct, createProduct, updateProduct } = (0, useAdminProducts_1.useAdminProducts)();
33
+ const isEditMode = !!productId;
34
+ const [formData, setFormData] = (0, react_1.useState)({
35
+ name: initialData?.name || '',
36
+ slug: initialData?.slug || '',
37
+ description: initialData?.description || '',
38
+ price: initialData?.price || 0,
39
+ comparePrice: initialData?.comparePrice,
40
+ images: initialData?.images || [],
41
+ status: initialData?.status || 'draft',
42
+ categoryId: initialData?.categoryId,
43
+ hasVariants: initialData?.hasVariants || false,
44
+ metaTitle: initialData?.metaTitle,
45
+ metaDescription: initialData?.metaDescription,
46
+ metaKeywords: initialData?.metaKeywords || [],
47
+ });
48
+ const [imageUrl, setImageUrl] = (0, react_1.useState)('');
49
+ const [isLoading, setIsLoading] = (0, react_1.useState)(false);
50
+ const [isFetching, setIsFetching] = (0, react_1.useState)(false);
51
+ const [error, setError] = (0, react_1.useState)(null);
52
+ // Load product data in edit mode
53
+ (0, react_1.useEffect)(() => {
54
+ if (productId && !initialData) {
55
+ setIsFetching(true);
56
+ getProduct(productId).then((product) => {
57
+ if (product) {
58
+ const p = product;
59
+ setFormData({
60
+ name: p.name,
61
+ slug: p.slug,
62
+ description: p.description,
63
+ price: parseFloat(p.price),
64
+ comparePrice: p.comparePrice ? parseFloat(p.comparePrice) : undefined,
65
+ images: p.images || [],
66
+ status: p.status,
67
+ categoryId: p.categoryId || undefined,
68
+ hasVariants: p.hasVariants,
69
+ metaTitle: p.metaTitle || undefined,
70
+ metaDescription: p.metaDescription || undefined,
71
+ metaKeywords: p.metaKeywords || [],
72
+ });
73
+ }
74
+ setIsFetching(false);
75
+ });
76
+ }
77
+ }, [productId, initialData, getProduct]);
78
+ const handleChange = (0, react_1.useCallback)((e) => {
79
+ const { name, value, type } = e.target;
80
+ setFormData((prev) => ({
81
+ ...prev,
82
+ [name]: type === 'number' ? (value ? parseFloat(value) : 0) : value,
83
+ }));
84
+ }, []);
85
+ const handleAddImage = (0, react_1.useCallback)(() => {
86
+ if (imageUrl.trim()) {
87
+ setFormData((prev) => ({
88
+ ...prev,
89
+ images: [...prev.images, imageUrl.trim()],
90
+ }));
91
+ setImageUrl('');
92
+ }
93
+ }, [imageUrl]);
94
+ const handleRemoveImage = (0, react_1.useCallback)((index) => {
95
+ setFormData((prev) => ({
96
+ ...prev,
97
+ images: prev.images.filter((_, i) => i !== index),
98
+ }));
99
+ }, []);
100
+ const handleSubmit = (0, react_1.useCallback)(async (e) => {
101
+ e.preventDefault();
102
+ setError(null);
103
+ setIsLoading(true);
104
+ try {
105
+ const result = isEditMode
106
+ ? await updateProduct(productId, formData)
107
+ : await createProduct(formData);
108
+ if (!result.success) {
109
+ setError(result.error || 'Failed to save product');
110
+ return;
111
+ }
112
+ const savedProduct = result.data;
113
+ onSuccess?.(savedProduct.id);
114
+ }
115
+ catch {
116
+ setError('An unexpected error occurred');
117
+ }
118
+ finally {
119
+ setIsLoading(false);
120
+ }
121
+ }, [isEditMode, productId, formData, createProduct, updateProduct, onSuccess]);
122
+ if (isFetching) {
123
+ return ((0, jsx_runtime_1.jsx)("div", { className: "flex items-center justify-center py-12", children: (0, jsx_runtime_1.jsx)("div", { className: "h-8 w-8 animate-spin rounded-full border-2 border-primary border-t-transparent" }) }));
124
+ }
125
+ return ((0, jsx_runtime_1.jsxs)("form", { onSubmit: handleSubmit, className: `space-y-6 ${className}`, children: [error && ((0, jsx_runtime_1.jsx)("div", { className: "rounded-md bg-destructive/10 px-4 py-3 text-sm text-destructive", children: error })), (0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card p-6", children: [(0, jsx_runtime_1.jsx)("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Basic Information" }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-4", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "name", className: "block text-sm font-medium text-foreground", children: "Product Name *" }), (0, jsx_runtime_1.jsx)("input", { id: "name", name: "name", type: "text", value: formData.name, onChange: handleChange, required: true, className: "mt-1 block w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" })] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "slug", className: "block text-sm font-medium text-foreground", children: "Slug" }), (0, jsx_runtime_1.jsx)("input", { id: "slug", name: "slug", type: "text", value: formData.slug, onChange: handleChange, placeholder: "auto-generated-from-name", className: "mt-1 block w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" })] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "description", className: "block text-sm font-medium text-foreground", children: "Description" }), (0, jsx_runtime_1.jsx)("textarea", { id: "description", name: "description", value: formData.description, onChange: handleChange, rows: 4, className: "mt-1 block w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" })] })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card p-6", children: [(0, jsx_runtime_1.jsx)("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Pricing" }), (0, jsx_runtime_1.jsxs)("div", { className: "grid gap-4 sm:grid-cols-2", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "price", className: "block text-sm font-medium text-foreground", children: "Price *" }), (0, jsx_runtime_1.jsx)("input", { id: "price", name: "price", type: "number", step: "0.01", min: "0", value: formData.price, onChange: handleChange, required: true, className: "mt-1 block w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" })] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "comparePrice", className: "block text-sm font-medium text-foreground", children: "Compare at Price" }), (0, jsx_runtime_1.jsx)("input", { id: "comparePrice", name: "comparePrice", type: "number", step: "0.01", min: "0", value: formData.comparePrice || '', onChange: handleChange, placeholder: "Original price for sales", className: "mt-1 block w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" })] })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card p-6", children: [(0, jsx_runtime_1.jsx)("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Images" }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex gap-2", children: [(0, jsx_runtime_1.jsx)("input", { type: "url", value: imageUrl, onChange: (e) => setImageUrl(e.target.value), placeholder: "Enter image URL", className: "flex-1 rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: handleAddImage, className: "rounded-md bg-secondary px-4 py-2 text-sm font-medium text-secondary-foreground hover:bg-secondary/80", children: "Add" })] }), formData.images.length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: "grid grid-cols-4 gap-4", children: formData.images.map((url, index) => ((0, jsx_runtime_1.jsxs)("div", { className: "relative", children: [(0, jsx_runtime_1.jsx)("img", { src: url, alt: `Product ${index + 1}`, className: "h-24 w-full rounded object-cover" }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => handleRemoveImage(index), className: "absolute -right-2 -top-2 rounded-full bg-destructive p-1 text-destructive-foreground hover:bg-destructive/80", children: (0, jsx_runtime_1.jsx)("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) })] }, index))) }))] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card p-6", children: [(0, jsx_runtime_1.jsx)("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Status" }), (0, jsx_runtime_1.jsxs)("select", { name: "status", value: formData.status, onChange: handleChange, className: "w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary", children: [(0, jsx_runtime_1.jsx)("option", { value: "draft", children: "Draft" }), (0, jsx_runtime_1.jsx)("option", { value: "active", children: "Active" }), (0, jsx_runtime_1.jsx)("option", { value: "archived", children: "Archived" })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex justify-end gap-4", children: [onCancel && ((0, jsx_runtime_1.jsx)("button", { type: "button", onClick: onCancel, className: "rounded-md border border-border px-4 py-2 text-sm font-medium text-foreground hover:bg-accent", children: "Cancel" })), (0, jsx_runtime_1.jsx)("button", { type: "submit", disabled: isLoading, className: "rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50", children: isLoading ? 'Saving...' : isEditMode ? 'Update Product' : 'Create Product' })] })] }));
126
+ }
127
+ //# sourceMappingURL=ProductForm.js.map