@rovela-ai/sdk 0.1.18 → 0.1.20

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 (345) hide show
  1. package/dist/admin/api/auth.js +5 -11
  2. package/dist/admin/api/auth.js.map +1 -1
  3. package/dist/admin/api/categories.js +43 -50
  4. package/dist/admin/api/categories.js.map +1 -1
  5. package/dist/admin/api/check.js +6 -9
  6. package/dist/admin/api/check.js.map +1 -1
  7. package/dist/admin/api/customers.js +17 -21
  8. package/dist/admin/api/customers.js.map +1 -1
  9. package/dist/admin/api/index.js +10 -38
  10. package/dist/admin/api/index.js.map +1 -1
  11. package/dist/admin/api/orders.js +30 -35
  12. package/dist/admin/api/orders.js.map +1 -1
  13. package/dist/admin/api/products.js +56 -66
  14. package/dist/admin/api/products.js.map +1 -1
  15. package/dist/admin/api/refund.js +26 -29
  16. package/dist/admin/api/refund.js.map +1 -1
  17. package/dist/admin/api/settings.js +17 -21
  18. package/dist/admin/api/settings.js.map +1 -1
  19. package/dist/admin/api/setup.js +17 -20
  20. package/dist/admin/api/setup.js.map +1 -1
  21. package/dist/admin/api/stats.js +14 -17
  22. package/dist/admin/api/stats.js.map +1 -1
  23. package/dist/admin/components/AdminGuard.js +13 -17
  24. package/dist/admin/components/AdminGuard.js.map +1 -1
  25. package/dist/admin/components/AdminHeader.js +8 -11
  26. package/dist/admin/components/AdminHeader.js.map +1 -1
  27. package/dist/admin/components/AdminLayout.js +5 -8
  28. package/dist/admin/components/AdminLayout.js.map +1 -1
  29. package/dist/admin/components/AdminLoginForm.js +11 -14
  30. package/dist/admin/components/AdminLoginForm.js.map +1 -1
  31. package/dist/admin/components/AdminNav.d.ts.map +1 -1
  32. package/dist/admin/components/AdminNav.js +16 -14
  33. package/dist/admin/components/AdminNav.js.map +1 -1
  34. package/dist/admin/components/AdminSetupForm.js +11 -14
  35. package/dist/admin/components/AdminSetupForm.js.map +1 -1
  36. package/dist/admin/components/CategoryForm.d.ts +30 -0
  37. package/dist/admin/components/CategoryForm.d.ts.map +1 -0
  38. package/dist/admin/components/CategoryForm.js +153 -0
  39. package/dist/admin/components/CategoryForm.js.map +1 -0
  40. package/dist/admin/components/CategorySelect.d.ts +32 -0
  41. package/dist/admin/components/CategorySelect.d.ts.map +1 -0
  42. package/dist/admin/components/CategorySelect.js +148 -0
  43. package/dist/admin/components/CategorySelect.js.map +1 -0
  44. package/dist/admin/components/InventoryEditor.js +16 -19
  45. package/dist/admin/components/InventoryEditor.js.map +1 -1
  46. package/dist/admin/components/LowStockAlert.js +6 -9
  47. package/dist/admin/components/LowStockAlert.js.map +1 -1
  48. package/dist/admin/components/OrderDetails.js +15 -18
  49. package/dist/admin/components/OrderDetails.js.map +1 -1
  50. package/dist/admin/components/OrderTable.js +13 -16
  51. package/dist/admin/components/OrderTable.js.map +1 -1
  52. package/dist/admin/components/ProductForm.d.ts +2 -2
  53. package/dist/admin/components/ProductForm.d.ts.map +1 -1
  54. package/dist/admin/components/ProductForm.js +140 -27
  55. package/dist/admin/components/ProductForm.js.map +1 -1
  56. package/dist/admin/components/ProductTable.js +15 -18
  57. package/dist/admin/components/ProductTable.js.map +1 -1
  58. package/dist/admin/components/RecentOrders.js +6 -9
  59. package/dist/admin/components/RecentOrders.js.map +1 -1
  60. package/dist/admin/components/RefundDialog.js +12 -15
  61. package/dist/admin/components/RefundDialog.js.map +1 -1
  62. package/dist/admin/components/SEOPreview.d.ts +32 -0
  63. package/dist/admin/components/SEOPreview.d.ts.map +1 -0
  64. package/dist/admin/components/SEOPreview.js +30 -0
  65. package/dist/admin/components/SEOPreview.js.map +1 -0
  66. package/dist/admin/components/StatsCards.js +7 -10
  67. package/dist/admin/components/StatsCards.js.map +1 -1
  68. package/dist/admin/components/StoreSettings.js +10 -13
  69. package/dist/admin/components/StoreSettings.js.map +1 -1
  70. package/dist/admin/components/TagInput.d.ts +29 -0
  71. package/dist/admin/components/TagInput.d.ts.map +1 -0
  72. package/dist/admin/components/TagInput.js +73 -0
  73. package/dist/admin/components/TagInput.js.map +1 -0
  74. package/dist/admin/components/VariantManager.d.ts +42 -0
  75. package/dist/admin/components/VariantManager.d.ts.map +1 -0
  76. package/dist/admin/components/VariantManager.js +175 -0
  77. package/dist/admin/components/VariantManager.js.map +1 -0
  78. package/dist/admin/components/index.d.ts +5 -0
  79. package/dist/admin/components/index.d.ts.map +1 -1
  80. package/dist/admin/components/index.js +27 -35
  81. package/dist/admin/components/index.js.map +1 -1
  82. package/dist/admin/config.js +12 -54
  83. package/dist/admin/config.js.map +1 -1
  84. package/dist/admin/hooks/index.d.ts +2 -0
  85. package/dist/admin/hooks/index.d.ts.map +1 -1
  86. package/dist/admin/hooks/index.js +5 -11
  87. package/dist/admin/hooks/index.js.map +1 -1
  88. package/dist/admin/hooks/useAdminAuth.js +9 -12
  89. package/dist/admin/hooks/useAdminAuth.js.map +1 -1
  90. package/dist/admin/hooks/useAdminCategories.d.ts +36 -0
  91. package/dist/admin/hooks/useAdminCategories.d.ts.map +1 -0
  92. package/dist/admin/hooks/useAdminCategories.js +217 -0
  93. package/dist/admin/hooks/useAdminCategories.js.map +1 -0
  94. package/dist/admin/hooks/useAdminOrders.js +11 -14
  95. package/dist/admin/hooks/useAdminOrders.js.map +1 -1
  96. package/dist/admin/hooks/useAdminProducts.js +13 -16
  97. package/dist/admin/hooks/useAdminProducts.js.map +1 -1
  98. package/dist/admin/hooks/useAdminStats.js +11 -14
  99. package/dist/admin/hooks/useAdminStats.js.map +1 -1
  100. package/dist/admin/index.d.ts +3 -2
  101. package/dist/admin/index.d.ts.map +1 -1
  102. package/dist/admin/index.js +17 -66
  103. package/dist/admin/index.js.map +1 -1
  104. package/dist/admin/server/admin-service.js +39 -83
  105. package/dist/admin/server/admin-service.js.map +1 -1
  106. package/dist/admin/server/index.js +3 -13
  107. package/dist/admin/server/index.js.map +1 -1
  108. package/dist/admin/types.js +1 -2
  109. package/dist/admin/types.js.map +1 -1
  110. package/dist/auth/api/auth.js +6 -14
  111. package/dist/auth/api/auth.js.map +1 -1
  112. package/dist/auth/api/forgot-password.js +8 -11
  113. package/dist/auth/api/forgot-password.js.map +1 -1
  114. package/dist/auth/api/index.js +6 -18
  115. package/dist/auth/api/index.js.map +1 -1
  116. package/dist/auth/api/register.js +17 -20
  117. package/dist/auth/api/register.js.map +1 -1
  118. package/dist/auth/api/resend-verification.js +9 -12
  119. package/dist/auth/api/resend-verification.js.map +1 -1
  120. package/dist/auth/api/reset-password.js +18 -22
  121. package/dist/auth/api/reset-password.js.map +1 -1
  122. package/dist/auth/api/verify-email.js +14 -18
  123. package/dist/auth/api/verify-email.js.map +1 -1
  124. package/dist/auth/components/AuthGuard.js +13 -17
  125. package/dist/auth/components/AuthGuard.js.map +1 -1
  126. package/dist/auth/components/ForgotPasswordForm.js +11 -14
  127. package/dist/auth/components/ForgotPasswordForm.js.map +1 -1
  128. package/dist/auth/components/ResetPasswordForm.js +18 -21
  129. package/dist/auth/components/ResetPasswordForm.js.map +1 -1
  130. package/dist/auth/components/SignInForm.js +13 -16
  131. package/dist/auth/components/SignInForm.js.map +1 -1
  132. package/dist/auth/components/SignUpForm.js +15 -18
  133. package/dist/auth/components/SignUpForm.js.map +1 -1
  134. package/dist/auth/components/UserMenu.js +13 -16
  135. package/dist/auth/components/UserMenu.js.map +1 -1
  136. package/dist/auth/components/VerifyEmailNotice.js +10 -13
  137. package/dist/auth/components/VerifyEmailNotice.js.map +1 -1
  138. package/dist/auth/components/index.js +7 -18
  139. package/dist/auth/components/index.js.map +1 -1
  140. package/dist/auth/config.js +9 -49
  141. package/dist/auth/config.js.map +1 -1
  142. package/dist/auth/hooks/index.js +1 -5
  143. package/dist/auth/hooks/index.js.map +1 -1
  144. package/dist/auth/hooks/useAuth.js +14 -17
  145. package/dist/auth/hooks/useAuth.js.map +1 -1
  146. package/dist/auth/index.js +15 -37
  147. package/dist/auth/index.js.map +1 -1
  148. package/dist/auth/server/customer-service.js +39 -83
  149. package/dist/auth/server/customer-service.js.map +1 -1
  150. package/dist/auth/server/email-sender.js +11 -17
  151. package/dist/auth/server/email-sender.js.map +1 -1
  152. package/dist/auth/server/index.js +5 -36
  153. package/dist/auth/server/index.js.map +1 -1
  154. package/dist/auth/server/password-reset-service.js +30 -70
  155. package/dist/auth/server/password-reset-service.js.map +1 -1
  156. package/dist/auth/server/password.js +9 -18
  157. package/dist/auth/server/password.js.map +1 -1
  158. package/dist/auth/server/verification-service.js +35 -76
  159. package/dist/auth/server/verification-service.js.map +1 -1
  160. package/dist/auth/types.js +1 -2
  161. package/dist/auth/types.js.map +1 -1
  162. package/dist/cart/CartProvider.js +13 -17
  163. package/dist/cart/CartProvider.js.map +1 -1
  164. package/dist/cart/components/AddToCartButton.js +16 -19
  165. package/dist/cart/components/AddToCartButton.js.map +1 -1
  166. package/dist/cart/components/CartDrawer.js +17 -23
  167. package/dist/cart/components/CartDrawer.js.map +1 -1
  168. package/dist/cart/components/CartIcon.js +9 -12
  169. package/dist/cart/components/CartIcon.js.map +1 -1
  170. package/dist/cart/components/CartItem.js +7 -13
  171. package/dist/cart/components/CartItem.js.map +1 -1
  172. package/dist/cart/components/CartSummary.js +12 -15
  173. package/dist/cart/components/CartSummary.js.map +1 -1
  174. package/dist/cart/components/QuantitySelector.js +9 -12
  175. package/dist/cart/components/QuantitySelector.js.map +1 -1
  176. package/dist/cart/components/index.js +6 -15
  177. package/dist/cart/components/index.js.map +1 -1
  178. package/dist/cart/index.js +3 -17
  179. package/dist/cart/index.js.map +1 -1
  180. package/dist/cart/store.js +8 -13
  181. package/dist/cart/store.js.map +1 -1
  182. package/dist/checkout/api/checkout.js +12 -15
  183. package/dist/checkout/api/checkout.js.map +1 -1
  184. package/dist/checkout/api/index.js +2 -7
  185. package/dist/checkout/api/index.js.map +1 -1
  186. package/dist/checkout/api/webhook.js +8 -11
  187. package/dist/checkout/api/webhook.js.map +1 -1
  188. package/dist/checkout/components/CheckoutButton.js +8 -11
  189. package/dist/checkout/components/CheckoutButton.js.map +1 -1
  190. package/dist/checkout/components/CheckoutSuccess.js +11 -14
  191. package/dist/checkout/components/CheckoutSuccess.js.map +1 -1
  192. package/dist/checkout/components/OrderSummary.js +8 -11
  193. package/dist/checkout/components/OrderSummary.js.map +1 -1
  194. package/dist/checkout/components/ShippingForm.js +14 -17
  195. package/dist/checkout/components/ShippingForm.js.map +1 -1
  196. package/dist/checkout/components/index.js +4 -11
  197. package/dist/checkout/components/index.js.map +1 -1
  198. package/dist/checkout/hooks/index.js +1 -6
  199. package/dist/checkout/hooks/index.js.map +1 -1
  200. package/dist/checkout/hooks/useCheckout.js +10 -19
  201. package/dist/checkout/hooks/useCheckout.js.map +1 -1
  202. package/dist/checkout/index.js +7 -28
  203. package/dist/checkout/index.js.map +1 -1
  204. package/dist/checkout/server/create-checkout-session.js +11 -16
  205. package/dist/checkout/server/create-checkout-session.js.map +1 -1
  206. package/dist/checkout/server/handle-webhook.js +21 -24
  207. package/dist/checkout/server/handle-webhook.js.map +1 -1
  208. package/dist/checkout/server/index.js +3 -13
  209. package/dist/checkout/server/index.js.map +1 -1
  210. package/dist/checkout/server/order-service.js +11 -16
  211. package/dist/checkout/server/order-service.js.map +1 -1
  212. package/dist/checkout/stripe/client.js +13 -29
  213. package/dist/checkout/stripe/client.js.map +1 -1
  214. package/dist/checkout/stripe/index.js +1 -15
  215. package/dist/checkout/stripe/index.js.map +1 -1
  216. package/dist/checkout/types.js +1 -2
  217. package/dist/checkout/types.js.map +1 -1
  218. package/dist/core/StoreSettingsProvider.d.ts +104 -0
  219. package/dist/core/StoreSettingsProvider.d.ts.map +1 -0
  220. package/dist/core/StoreSettingsProvider.js +195 -0
  221. package/dist/core/StoreSettingsProvider.js.map +1 -0
  222. package/dist/core/api/index.d.ts +7 -0
  223. package/dist/core/api/index.d.ts.map +1 -0
  224. package/dist/core/api/index.js +7 -0
  225. package/dist/core/api/index.js.map +1 -0
  226. package/dist/core/api/settings.d.ts +42 -0
  227. package/dist/core/api/settings.d.ts.map +1 -0
  228. package/dist/core/api/settings.js +74 -0
  229. package/dist/core/api/settings.js.map +1 -0
  230. package/dist/core/config.js +12 -57
  231. package/dist/core/config.js.map +1 -1
  232. package/dist/core/db/client.js +16 -62
  233. package/dist/core/db/client.js.map +1 -1
  234. package/dist/core/db/index.js +14 -93
  235. package/dist/core/db/index.js.map +1 -1
  236. package/dist/core/db/queries.d.ts +6 -6
  237. package/dist/core/db/queries.js +207 -284
  238. package/dist/core/db/queries.js.map +1 -1
  239. package/dist/core/db/schema.js +179 -182
  240. package/dist/core/db/schema.js.map +1 -1
  241. package/dist/core/index.d.ts +2 -0
  242. package/dist/core/index.d.ts.map +1 -1
  243. package/dist/core/index.js +14 -42
  244. package/dist/core/index.js.map +1 -1
  245. package/dist/core/server/index.js +16 -68
  246. package/dist/core/server/index.js.map +1 -1
  247. package/dist/core/types.js +1 -2
  248. package/dist/core/types.js.map +1 -1
  249. package/dist/core/utils.js +26 -51
  250. package/dist/core/utils.js.map +1 -1
  251. package/dist/emails/config.js +13 -21
  252. package/dist/emails/config.js.map +1 -1
  253. package/dist/emails/index.js +10 -72
  254. package/dist/emails/index.js.map +1 -1
  255. package/dist/emails/send/auth.js +26 -34
  256. package/dist/emails/send/auth.js.map +1 -1
  257. package/dist/emails/send/index.js +2 -21
  258. package/dist/emails/send/index.js.map +1 -1
  259. package/dist/emails/send/orders.js +38 -50
  260. package/dist/emails/send/orders.js.map +1 -1
  261. package/dist/emails/sender.js +7 -12
  262. package/dist/emails/sender.js.map +1 -1
  263. package/dist/emails/templates/base.js +37 -53
  264. package/dist/emails/templates/base.js.map +1 -1
  265. package/dist/emails/templates/email-verification.js +12 -16
  266. package/dist/emails/templates/email-verification.js.map +1 -1
  267. package/dist/emails/templates/index.js +9 -43
  268. package/dist/emails/templates/index.js.map +1 -1
  269. package/dist/emails/templates/order-cancelled.js +18 -22
  270. package/dist/emails/templates/order-cancelled.js.map +1 -1
  271. package/dist/emails/templates/order-confirmation.js +30 -34
  272. package/dist/emails/templates/order-confirmation.js.map +1 -1
  273. package/dist/emails/templates/order-delivered.js +20 -24
  274. package/dist/emails/templates/order-delivered.js.map +1 -1
  275. package/dist/emails/templates/order-shipped.js +19 -23
  276. package/dist/emails/templates/order-shipped.js.map +1 -1
  277. package/dist/emails/templates/password-reset.js +12 -16
  278. package/dist/emails/templates/password-reset.js.map +1 -1
  279. package/dist/emails/templates/refund-processed.js +17 -21
  280. package/dist/emails/templates/refund-processed.js.map +1 -1
  281. package/dist/emails/templates/welcome.js +11 -15
  282. package/dist/emails/templates/welcome.js.map +1 -1
  283. package/dist/emails/types.js +1 -2
  284. package/dist/emails/types.js.map +1 -1
  285. package/dist/emails/utils.js +9 -20
  286. package/dist/emails/utils.js.map +1 -1
  287. package/dist/index.js +24 -176
  288. package/dist/index.js.map +1 -1
  289. package/dist/products/api/categories.js +7 -10
  290. package/dist/products/api/categories.js.map +1 -1
  291. package/dist/products/api/index.js +3 -9
  292. package/dist/products/api/index.js.map +1 -1
  293. package/dist/products/api/product.js +10 -13
  294. package/dist/products/api/product.js.map +1 -1
  295. package/dist/products/api/products.js +8 -11
  296. package/dist/products/api/products.js.map +1 -1
  297. package/dist/products/components/CategoryNav.js +20 -26
  298. package/dist/products/components/CategoryNav.js.map +1 -1
  299. package/dist/products/components/ProductBreadcrumb.js +7 -13
  300. package/dist/products/components/ProductBreadcrumb.js.map +1 -1
  301. package/dist/products/components/ProductCard.js +6 -12
  302. package/dist/products/components/ProductCard.js.map +1 -1
  303. package/dist/products/components/ProductDetails.js +14 -17
  304. package/dist/products/components/ProductDetails.js.map +1 -1
  305. package/dist/products/components/ProductFilters.js +15 -18
  306. package/dist/products/components/ProductFilters.js.map +1 -1
  307. package/dist/products/components/ProductGallery.js +17 -23
  308. package/dist/products/components/ProductGallery.js.map +1 -1
  309. package/dist/products/components/ProductGrid.js +10 -13
  310. package/dist/products/components/ProductGrid.js.map +1 -1
  311. package/dist/products/components/ProductSearch.js +14 -17
  312. package/dist/products/components/ProductSearch.js.map +1 -1
  313. package/dist/products/components/ProductSort.js +8 -11
  314. package/dist/products/components/ProductSort.js.map +1 -1
  315. package/dist/products/components/VariantSelector.js +16 -19
  316. package/dist/products/components/VariantSelector.js.map +1 -1
  317. package/dist/products/components/index.js +10 -23
  318. package/dist/products/components/index.js.map +1 -1
  319. package/dist/products/hooks/index.js +4 -11
  320. package/dist/products/hooks/index.js.map +1 -1
  321. package/dist/products/hooks/useCategories.js +12 -15
  322. package/dist/products/hooks/useCategories.js.map +1 -1
  323. package/dist/products/hooks/useProduct.js +9 -12
  324. package/dist/products/hooks/useProduct.js.map +1 -1
  325. package/dist/products/hooks/useProductAttributes.js +10 -13
  326. package/dist/products/hooks/useProductAttributes.js.map +1 -1
  327. package/dist/products/hooks/useProducts.js +15 -18
  328. package/dist/products/hooks/useProducts.js.map +1 -1
  329. package/dist/products/index.js +6 -23
  330. package/dist/products/index.js.map +1 -1
  331. package/dist/theme/ThemeProvider.js +12 -14
  332. package/dist/theme/ThemeProvider.js.map +1 -1
  333. package/dist/theme/colors.js +3 -8
  334. package/dist/theme/colors.js.map +1 -1
  335. package/dist/theme/defaults.js +27 -30
  336. package/dist/theme/defaults.js.map +1 -1
  337. package/dist/theme/fonts.js +12 -18
  338. package/dist/theme/fonts.js.map +1 -1
  339. package/dist/theme/generator.js +63 -69
  340. package/dist/theme/generator.js.map +1 -1
  341. package/dist/theme/hooks.js +11 -16
  342. package/dist/theme/hooks.js.map +1 -1
  343. package/dist/theme/index.js +6 -42
  344. package/dist/theme/index.js.map +1 -1
  345. package/package.json +35 -30
@@ -1,15 +1,12 @@
1
- "use strict";
2
1
  'use client';
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.OrderTable = OrderTable;
5
- const jsx_runtime_1 = require("react/jsx-runtime");
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
3
  /**
7
4
  * @rovela/sdk/admin/components/OrderTable
8
5
  *
9
6
  * Orders data table with filtering, sorting, and pagination.
10
7
  */
11
- const react_1 = require("react");
12
- const useAdminOrders_1 = require("../hooks/useAdminOrders");
8
+ import { useState, useEffect, useCallback } from 'react';
9
+ import { useAdminOrders } from '../hooks/useAdminOrders';
13
10
  // =============================================================================
14
11
  // Status Badge
15
12
  // =============================================================================
@@ -22,7 +19,7 @@ function StatusBadge({ status }) {
22
19
  cancelled: 'bg-red-100 text-red-800',
23
20
  refunded: 'bg-gray-100 text-gray-800',
24
21
  };
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) }));
22
+ return (_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
23
  }
27
24
  // =============================================================================
28
25
  // Component
@@ -37,13 +34,13 @@ function StatusBadge({ status }) {
37
34
  * />
38
35
  * ```
39
36
  */
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');
37
+ export function OrderTable({ initialSearch, initialStatus, pageSize = 20, onOrderClick, className = '', }) {
38
+ const { orders, total, page, isLoading, fetchOrders, updateStatus } = useAdminOrders();
39
+ const [search, setSearch] = useState(initialSearch || '');
40
+ const [status, setStatus] = useState(initialStatus || '');
41
+ const [sort, setSort] = useState('newest');
45
42
  // Fetch orders on filter change
46
- (0, react_1.useEffect)(() => {
43
+ useEffect(() => {
47
44
  fetchOrders({
48
45
  search: search || undefined,
49
46
  status: status || undefined,
@@ -52,7 +49,7 @@ function OrderTable({ initialSearch, initialStatus, pageSize = 20, onOrderClick,
52
49
  limit: pageSize,
53
50
  });
54
51
  }, [search, status, sort, pageSize, fetchOrders]);
55
- const handlePageChange = (0, react_1.useCallback)((newPage) => {
52
+ const handlePageChange = useCallback((newPage) => {
56
53
  fetchOrders({
57
54
  search: search || undefined,
58
55
  status: status || undefined,
@@ -61,7 +58,7 @@ function OrderTable({ initialSearch, initialStatus, pageSize = 20, onOrderClick,
61
58
  limit: pageSize,
62
59
  });
63
60
  }, [search, status, sort, pageSize, fetchOrders]);
64
- const handleStatusChange = (0, react_1.useCallback)(async (orderId, newStatus) => {
61
+ const handleStatusChange = useCallback(async (orderId, newStatus) => {
65
62
  const success = await updateStatus(orderId, newStatus);
66
63
  if (success) {
67
64
  fetchOrders({ search, status: status || undefined, sort, page, limit: pageSize });
@@ -84,6 +81,6 @@ function OrderTable({ initialSearch, initialStatus, pageSize = 20, onOrderClick,
84
81
  }).format(parseFloat(value));
85
82
  };
86
83
  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" })] })] }))] })] }));
84
+ return (_jsxs("div", { className: `space-y-4 ${className}`, children: [_jsxs("div", { className: "flex flex-wrap gap-4", children: [_jsx("div", { className: "flex-1", children: _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" }) }), _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: [_jsx("option", { value: "", children: "All Status" }), _jsx("option", { value: "pending", children: "Pending" }), _jsx("option", { value: "paid", children: "Paid" }), _jsx("option", { value: "shipped", children: "Shipped" }), _jsx("option", { value: "delivered", children: "Delivered" }), _jsx("option", { value: "cancelled", children: "Cancelled" }), _jsx("option", { value: "refunded", children: "Refunded" })] }), _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: [_jsx("option", { value: "newest", children: "Newest First" }), _jsx("option", { value: "oldest", children: "Oldest First" }), _jsx("option", { value: "total-desc", children: "Highest Total" }), _jsx("option", { value: "total-asc", children: "Lowest Total" })] })] }), _jsxs("div", { className: "rounded-lg border border-border bg-card overflow-hidden", children: [_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full", children: [_jsx("thead", { children: _jsxs("tr", { className: "border-b border-border bg-muted/50 text-left text-xs font-medium uppercase text-muted-foreground", children: [_jsx("th", { className: "px-6 py-3", children: "Order" }), _jsx("th", { className: "px-6 py-3", children: "Customer" }), _jsx("th", { className: "px-6 py-3", children: "Status" }), _jsx("th", { className: "px-6 py-3", children: "Total" }), _jsx("th", { className: "px-6 py-3", children: "Date" }), _jsx("th", { className: "px-6 py-3", children: "Actions" })] }) }), _jsx("tbody", { className: "divide-y divide-border", children: isLoading ? ([...Array(5)].map((_, i) => (_jsxs("tr", { children: [_jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "h-4 w-32 animate-pulse rounded bg-muted" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "h-6 w-16 animate-pulse rounded bg-muted" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "h-4 w-28 animate-pulse rounded bg-muted" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" }) })] }, i)))) : orders.length === 0 ? (_jsx("tr", { children: _jsx("td", { colSpan: 6, className: "px-6 py-12 text-center text-muted-foreground", children: "No orders found" }) })) : (orders.map((order) => (_jsxs("tr", { className: "hover:bg-muted/50", children: [_jsx("td", { className: "px-6 py-4", children: _jsxs("button", { onClick: () => onOrderClick?.(order.id), className: "font-medium text-primary hover:underline", children: ["#", order.id.slice(-8).toUpperCase()] }) }), _jsx("td", { className: "px-6 py-4 text-sm text-foreground", children: order.email }), _jsx("td", { className: "px-6 py-4", children: _jsx(StatusBadge, { status: order.status }) }), _jsx("td", { className: "px-6 py-4 text-sm font-medium text-foreground", children: formatCurrency(order.total) }), _jsx("td", { className: "px-6 py-4 text-sm text-muted-foreground", children: formatDate(order.createdAt) }), _jsx("td", { className: "px-6 py-4", children: _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: [_jsx("option", { value: "pending", children: "Pending" }), _jsx("option", { value: "paid", children: "Paid" }), _jsx("option", { value: "shipped", children: "Shipped" }), _jsx("option", { value: "delivered", children: "Delivered" }), _jsx("option", { value: "cancelled", children: "Cancelled" }), _jsx("option", { value: "refunded", disabled: true, children: "Refunded" })] }) })] }, order.id)))) })] }) }), totalPages > 1 && (_jsxs("div", { className: "flex items-center justify-between border-t border-border px-6 py-3", children: [_jsxs("p", { className: "text-sm text-muted-foreground", children: ["Showing ", (page - 1) * pageSize + 1, " to ", Math.min(page * pageSize, total), " of ", total] }), _jsxs("div", { className: "flex gap-2", children: [_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" }), _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
85
  }
89
86
  //# sourceMappingURL=OrderTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OrderTable.js","sourceRoot":"","sources":["../../../src/admin/components/OrderTable.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OrderTable.js","sourceRoot":"","sources":["../../../src/admin/components/OrderTable.tsx"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import type { ProductFormProps } from '../types';
2
2
  /**
3
- * Product form for create and edit.
3
+ * Enhanced product form for create and edit.
4
4
  *
5
5
  * @example
6
6
  * ```tsx
7
7
  * // Create mode
8
- * <ProductForm onSuccess={(id) => router.push(`/admin/products/${id}`)} />
8
+ * <ProductForm onSuccess={() => router.push('/admin/products')} />
9
9
  *
10
10
  * // Edit mode
11
11
  * <ProductForm
@@ -1 +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"}
1
+ {"version":3,"file":"ProductForm.d.ts","sourceRoot":"","sources":["../../../src/admin/components/ProductForm.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAoC,MAAM,UAAU,CAAA;AAkBlF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAc,GACf,EAAE,gBAAgB,2CAmvBlB"}
@@ -1,25 +1,28 @@
1
- "use strict";
2
1
  'use client';
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.ProductForm = ProductForm;
5
- const jsx_runtime_1 = require("react/jsx-runtime");
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
3
  /**
7
4
  * @rovela/sdk/admin/components/ProductForm
8
5
  *
9
- * Product create/edit form.
6
+ * Enhanced product create/edit form with 2-column layout.
7
+ * Includes: Basic info, Media, Pricing, Inventory, Variants, SEO, Organization.
10
8
  */
11
- const react_1 = require("react");
12
- const useAdminProducts_1 = require("../hooks/useAdminProducts");
9
+ import { useState, useCallback, useEffect, useMemo } from 'react';
10
+ import { useAdminProducts } from '../hooks/useAdminProducts';
11
+ import { CategorySelect } from './CategorySelect';
12
+ import { SEOPreview } from './SEOPreview';
13
+ import { TagInput } from './TagInput';
14
+ import { VariantManager } from './VariantManager';
15
+ import { ImagePlus, Trash2, GripVertical, Info, ChevronDown, ChevronUp, Package } from 'lucide-react';
13
16
  // =============================================================================
14
17
  // Component
15
18
  // =============================================================================
16
19
  /**
17
- * Product form for create and edit.
20
+ * Enhanced product form for create and edit.
18
21
  *
19
22
  * @example
20
23
  * ```tsx
21
24
  * // Create mode
22
- * <ProductForm onSuccess={(id) => router.push(`/admin/products/${id}`)} />
25
+ * <ProductForm onSuccess={() => router.push('/admin/products')} />
23
26
  *
24
27
  * // Edit mode
25
28
  * <ProductForm
@@ -28,10 +31,11 @@ const useAdminProducts_1 = require("../hooks/useAdminProducts");
28
31
  * />
29
32
  * ```
30
33
  */
31
- function ProductForm({ productId, initialData, onSuccess, onCancel, className = '', }) {
32
- const { getProduct, createProduct, updateProduct } = (0, useAdminProducts_1.useAdminProducts)();
34
+ export function ProductForm({ productId, initialData, onSuccess, onCancel, className = '', }) {
35
+ const { getProduct, createProduct, updateProduct } = useAdminProducts();
33
36
  const isEditMode = !!productId;
34
- const [formData, setFormData] = (0, react_1.useState)({
37
+ // Form state
38
+ const [formData, setFormData] = useState({
35
39
  name: initialData?.name || '',
36
40
  slug: initialData?.slug || '',
37
41
  description: initialData?.description || '',
@@ -44,13 +48,30 @@ function ProductForm({ productId, initialData, onSuccess, onCancel, className =
44
48
  metaTitle: initialData?.metaTitle,
45
49
  metaDescription: initialData?.metaDescription,
46
50
  metaKeywords: initialData?.metaKeywords || [],
51
+ sku: '',
52
+ inventory: 0,
53
+ trackInventory: true,
47
54
  });
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);
55
+ // Variant state
56
+ const [variantOptions, setVariantOptions] = useState([]);
57
+ const [variants, setVariants] = useState([]);
58
+ const [existingVariants, setExistingVariants] = useState([]);
59
+ // Image URL input
60
+ const [imageUrl, setImageUrl] = useState('');
61
+ // UI state
62
+ const [isLoading, setIsLoading] = useState(false);
63
+ const [isFetching, setIsFetching] = useState(false);
64
+ const [error, setError] = useState(null);
65
+ const [seoExpanded, setSeoExpanded] = useState(false);
66
+ // Auto-generate slug from name
67
+ const autoSlug = useMemo(() => {
68
+ return formData.name
69
+ .toLowerCase()
70
+ .replace(/[^a-z0-9]+/g, '-')
71
+ .replace(/^-|-$/g, '');
72
+ }, [formData.name]);
52
73
  // Load product data in edit mode
53
- (0, react_1.useEffect)(() => {
74
+ useEffect(() => {
54
75
  if (productId && !initialData) {
55
76
  setIsFetching(true);
56
77
  getProduct(productId).then((product) => {
@@ -70,19 +91,66 @@ function ProductForm({ productId, initialData, onSuccess, onCancel, className =
70
91
  metaDescription: p.metaDescription || undefined,
71
92
  metaKeywords: p.metaKeywords || [],
72
93
  });
94
+ // Load existing variants
95
+ if (p.variants && p.variants.length > 0) {
96
+ setExistingVariants(p.variants.map((v) => ({
97
+ sku: v.sku,
98
+ name: v.name,
99
+ price: v.price ? parseFloat(v.price) : undefined,
100
+ inventory: v.inventory,
101
+ attributes: v.attributes,
102
+ })));
103
+ // Reconstruct variant options from existing variants
104
+ const optionNames = new Set();
105
+ const optionValuesMap = new Map();
106
+ for (const variant of p.variants) {
107
+ for (const [key, value] of Object.entries(variant.attributes)) {
108
+ optionNames.add(key);
109
+ if (!optionValuesMap.has(key)) {
110
+ optionValuesMap.set(key, new Set());
111
+ }
112
+ optionValuesMap.get(key).add(value);
113
+ }
114
+ }
115
+ const reconstructedOptions = Array.from(optionNames).map((name) => ({
116
+ name,
117
+ values: Array.from(optionValuesMap.get(name) || []),
118
+ }));
119
+ setVariantOptions(reconstructedOptions);
120
+ // Set variants
121
+ setVariants(p.variants.map((v) => ({
122
+ id: v.id,
123
+ sku: v.sku,
124
+ name: v.name,
125
+ price: v.price ? parseFloat(v.price) : null,
126
+ inventory: v.inventory,
127
+ attributes: v.attributes,
128
+ })));
129
+ }
130
+ // Auto-expand SEO if has values
131
+ if (p.metaTitle || p.metaDescription || (p.metaKeywords && p.metaKeywords.length > 0)) {
132
+ setSeoExpanded(true);
133
+ }
73
134
  }
74
135
  setIsFetching(false);
75
136
  });
76
137
  }
77
138
  }, [productId, initialData, getProduct]);
78
- const handleChange = (0, react_1.useCallback)((e) => {
139
+ // Handle field changes
140
+ const handleChange = useCallback((e) => {
79
141
  const { name, value, type } = e.target;
142
+ const checked = e.target.checked;
80
143
  setFormData((prev) => ({
81
144
  ...prev,
82
- [name]: type === 'number' ? (value ? parseFloat(value) : 0) : value,
145
+ [name]: type === 'checkbox'
146
+ ? checked
147
+ : type === 'number'
148
+ ? (value ? parseFloat(value) : 0)
149
+ : value,
83
150
  }));
84
151
  }, []);
85
- const handleAddImage = (0, react_1.useCallback)(() => {
152
+ // Handle image add
153
+ const handleAddImage = useCallback(() => {
86
154
  if (imageUrl.trim()) {
87
155
  setFormData((prev) => ({
88
156
  ...prev,
@@ -91,20 +159,56 @@ function ProductForm({ productId, initialData, onSuccess, onCancel, className =
91
159
  setImageUrl('');
92
160
  }
93
161
  }, [imageUrl]);
94
- const handleRemoveImage = (0, react_1.useCallback)((index) => {
162
+ // Handle image remove
163
+ const handleRemoveImage = useCallback((index) => {
95
164
  setFormData((prev) => ({
96
165
  ...prev,
97
166
  images: prev.images.filter((_, i) => i !== index),
98
167
  }));
99
168
  }, []);
100
- const handleSubmit = (0, react_1.useCallback)(async (e) => {
169
+ // Handle image reorder
170
+ const handleMoveImage = useCallback((fromIndex, toIndex) => {
171
+ setFormData((prev) => {
172
+ const newImages = [...prev.images];
173
+ const [removed] = newImages.splice(fromIndex, 1);
174
+ newImages.splice(toIndex, 0, removed);
175
+ return { ...prev, images: newImages };
176
+ });
177
+ }, []);
178
+ // Handle submit
179
+ const handleSubmit = useCallback(async (e) => {
101
180
  e.preventDefault();
102
181
  setError(null);
103
182
  setIsLoading(true);
104
183
  try {
184
+ // Build data
185
+ const data = {
186
+ name: formData.name,
187
+ slug: formData.slug || autoSlug,
188
+ description: formData.description,
189
+ price: formData.price,
190
+ comparePrice: formData.comparePrice,
191
+ images: formData.images,
192
+ status: isEditMode ? formData.status : 'draft', // Always create as draft
193
+ categoryId: formData.categoryId,
194
+ hasVariants: formData.hasVariants,
195
+ metaTitle: formData.metaTitle,
196
+ metaDescription: formData.metaDescription,
197
+ metaKeywords: formData.metaKeywords,
198
+ };
199
+ // Add variants if product has variants
200
+ if (formData.hasVariants && variants.length > 0) {
201
+ data.variants = variants.map((v) => ({
202
+ sku: v.sku,
203
+ name: v.name,
204
+ price: v.price ?? undefined,
205
+ inventory: v.inventory,
206
+ attributes: v.attributes,
207
+ }));
208
+ }
105
209
  const result = isEditMode
106
- ? await updateProduct(productId, formData)
107
- : await createProduct(formData);
210
+ ? await updateProduct(productId, data)
211
+ : await createProduct(data);
108
212
  if (!result.success) {
109
213
  setError(result.error || 'Failed to save product');
110
214
  return;
@@ -118,10 +222,19 @@ function ProductForm({ productId, initialData, onSuccess, onCancel, className =
118
222
  finally {
119
223
  setIsLoading(false);
120
224
  }
121
- }, [isEditMode, productId, formData, createProduct, updateProduct, onSuccess]);
225
+ }, [isEditMode, productId, formData, autoSlug, variants, createProduct, updateProduct, onSuccess]);
226
+ // Loading state
122
227
  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" }) }));
228
+ return (_jsx("div", { className: "flex items-center justify-center py-12", children: _jsx("div", { className: "h-8 w-8 animate-spin rounded-full border-2 border-primary border-t-transparent" }) }));
124
229
  }
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' })] })] }));
230
+ return (_jsxs("form", { onSubmit: handleSubmit, className: `${className}`, children: [error && (_jsx("div", { className: "mb-6 rounded-md bg-destructive/10 px-4 py-3 text-sm text-destructive", children: error })), _jsxs("div", { className: "grid gap-6 lg:grid-cols-3", children: [_jsxs("div", { className: "space-y-6 lg:col-span-2", children: [_jsxs("div", { className: "rounded-lg border border-border bg-card p-6", children: [_jsx("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Basic Information" }), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { children: [_jsxs("label", { htmlFor: "name", className: "block text-sm font-medium text-foreground", children: ["Product Name ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsx("input", { id: "name", name: "name", type: "text", value: formData.name, onChange: handleChange, required: true, placeholder: "e.g., Premium Cotton T-Shirt", 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" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "slug", className: "block text-sm font-medium text-foreground", children: "URL Handle" }), _jsxs("div", { className: "mt-1 flex rounded-md border border-input focus-within:border-primary focus-within:ring-1 focus-within:ring-primary", children: [_jsx("span", { className: "inline-flex items-center rounded-l-md border-r border-input bg-muted px-3 text-sm text-muted-foreground", children: "/products/" }), _jsx("input", { id: "slug", name: "slug", type: "text", value: formData.slug, onChange: handleChange, placeholder: autoSlug || 'auto-generated', className: "flex-1 rounded-r-md border-0 bg-background px-3 py-2 text-sm focus:outline-none" })] }), _jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: "Leave blank to auto-generate from product name" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "description", className: "block text-sm font-medium text-foreground", children: "Description" }), _jsx("textarea", { id: "description", name: "description", value: formData.description, onChange: handleChange, rows: 5, placeholder: "Describe your product in detail...", 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" }), _jsxs("p", { className: "mt-1 text-xs text-muted-foreground", children: [formData.description.length, " characters"] })] })] })] }), _jsxs("div", { className: "rounded-lg border border-border bg-card p-6", children: [_jsx("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Media" }), _jsxs("div", { className: "space-y-4", children: [formData.images.length > 0 && (_jsx("div", { className: "grid grid-cols-2 gap-4 sm:grid-cols-3 md:grid-cols-4", children: formData.images.map((url, index) => (_jsxs("div", { className: "group relative aspect-square overflow-hidden rounded-lg border border-border bg-muted", children: [_jsx("img", { src: url, alt: `Product ${index + 1}`, className: "h-full w-full object-cover" }), index === 0 && (_jsx("span", { className: "absolute left-2 top-2 rounded bg-primary px-2 py-0.5 text-xs font-medium text-primary-foreground", children: "Primary" })), _jsxs("div", { className: "absolute inset-0 flex items-center justify-center gap-2 bg-black/50 opacity-0 transition-opacity group-hover:opacity-100", children: [index > 0 && (_jsx("button", { type: "button", onClick: () => handleMoveImage(index, 0), className: "rounded-full bg-white p-2 text-foreground hover:bg-gray-100", title: "Make primary", children: _jsx(GripVertical, { className: "h-4 w-4" }) })), _jsx("button", { type: "button", onClick: () => handleRemoveImage(index), className: "rounded-full bg-destructive p-2 text-destructive-foreground hover:bg-destructive/90", title: "Remove", children: _jsx(Trash2, { className: "h-4 w-4" }) })] })] }, index))) })), _jsxs("div", { className: "flex gap-2", children: [_jsx("input", { type: "url", value: imageUrl, onChange: (e) => setImageUrl(e.target.value), onKeyDown: (e) => {
231
+ if (e.key === 'Enter') {
232
+ e.preventDefault();
233
+ handleAddImage();
234
+ }
235
+ }, placeholder: "Paste 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" }), _jsxs("button", { type: "button", onClick: handleAddImage, disabled: !imageUrl.trim(), className: "inline-flex items-center gap-2 rounded-md bg-secondary px-4 py-2 text-sm font-medium text-secondary-foreground hover:bg-secondary/80 disabled:opacity-50", children: [_jsx(ImagePlus, { className: "h-4 w-4" }), "Add"] })] }), formData.images.length === 0 && (_jsxs("div", { className: "rounded-lg border-2 border-dashed border-border p-8 text-center", children: [_jsx(ImagePlus, { className: "mx-auto h-10 w-10 text-muted-foreground" }), _jsx("p", { className: "mt-2 text-sm text-muted-foreground", children: "Add images by pasting URLs above" })] }))] })] }), _jsxs("div", { className: "rounded-lg border border-border bg-card p-6", children: [_jsx("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Pricing" }), _jsxs("div", { className: "grid gap-4 sm:grid-cols-2", children: [_jsxs("div", { children: [_jsxs("label", { htmlFor: "price", className: "block text-sm font-medium text-foreground", children: ["Price ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsxs("div", { className: "mt-1 relative", children: [_jsx("span", { className: "absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground", children: "$" }), _jsx("input", { id: "price", name: "price", type: "number", step: "0.01", min: "0", value: formData.price, onChange: handleChange, required: true, className: "block w-full rounded-md border border-input bg-background pl-7 pr-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" })] })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "comparePrice", className: "block text-sm font-medium text-foreground", children: "Compare at Price" }), _jsxs("div", { className: "mt-1 relative", children: [_jsx("span", { className: "absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground", children: "$" }), _jsx("input", { id: "comparePrice", name: "comparePrice", type: "number", step: "0.01", min: "0", value: formData.comparePrice || '', onChange: handleChange, placeholder: "Original price", className: "block w-full rounded-md border border-input bg-background pl-7 pr-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" })] }), _jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: "Shows as strikethrough price for sales" })] })] }), formData.comparePrice && formData.comparePrice > formData.price && (_jsxs("div", { className: "mt-4 flex items-center gap-2 rounded-md bg-green-50 dark:bg-green-950/20 px-3 py-2 text-sm text-green-700 dark:text-green-400", children: [_jsx(Info, { className: "h-4 w-4" }), Math.round(((formData.comparePrice - formData.price) / formData.comparePrice) * 100), "% discount from compare price"] }))] }), !formData.hasVariants && (_jsxs("div", { className: "rounded-lg border border-border bg-card p-6", children: [_jsx("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Inventory" }), _jsxs("div", { className: "grid gap-4 sm:grid-cols-2", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "sku", className: "block text-sm font-medium text-foreground", children: "SKU (Stock Keeping Unit)" }), _jsx("input", { id: "sku", name: "sku", type: "text", value: formData.sku || '', onChange: handleChange, placeholder: "e.g., SHIRT-001", 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" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "inventory", className: "block text-sm font-medium text-foreground", children: "Quantity" }), _jsx("input", { id: "inventory", name: "inventory", type: "number", min: "0", value: formData.inventory || 0, onChange: handleChange, 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" })] })] })] })), _jsxs("div", { className: "rounded-lg border border-border bg-card p-6", children: [_jsxs("div", { className: "flex items-center justify-between mb-4", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-lg font-medium text-foreground", children: "Variants" }), _jsx("p", { className: "text-sm text-muted-foreground", children: "Add options like size or color to create product variants" })] }), _jsxs("label", { className: "relative inline-flex cursor-pointer items-center", children: [_jsx("input", { type: "checkbox", name: "hasVariants", checked: formData.hasVariants, onChange: handleChange, className: "peer sr-only" }), _jsx("div", { className: "peer h-6 w-11 rounded-full bg-muted after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:bg-white after:transition-all after:content-[''] peer-checked:bg-primary peer-checked:after:translate-x-full peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-primary/20" })] })] }), formData.hasVariants && (_jsx(VariantManager, { options: variantOptions, variants: variants, onOptionsChange: setVariantOptions, onVariantsChange: setVariants, basePrice: formData.price }))] }), _jsxs("div", { className: "rounded-lg border border-border bg-card", children: [_jsxs("button", { type: "button", onClick: () => setSeoExpanded(!seoExpanded), className: "flex w-full items-center justify-between p-6 text-left", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-lg font-medium text-foreground", children: "Search Engine Listing" }), _jsx("p", { className: "text-sm text-muted-foreground", children: "Customize how this product appears in search results" })] }), seoExpanded ? (_jsx(ChevronUp, { className: "h-5 w-5 text-muted-foreground" })) : (_jsx(ChevronDown, { className: "h-5 w-5 text-muted-foreground" }))] }), seoExpanded && (_jsxs("div", { className: "border-t border-border p-6 space-y-4", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "metaTitle", className: "block text-sm font-medium text-foreground", children: "Meta Title" }), _jsx("input", { id: "metaTitle", name: "metaTitle", type: "text", value: formData.metaTitle || '', onChange: handleChange, maxLength: 70, placeholder: formData.name || 'Product title', 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" }), _jsxs("p", { className: "mt-1 text-xs text-muted-foreground", children: [(formData.metaTitle || '').length, "/70 characters"] })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "metaDescription", className: "block text-sm font-medium text-foreground", children: "Meta Description" }), _jsx("textarea", { id: "metaDescription", name: "metaDescription", value: formData.metaDescription || '', onChange: handleChange, maxLength: 160, rows: 3, placeholder: "Brief description for search engines...", 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" }), _jsxs("p", { className: "mt-1 text-xs text-muted-foreground", children: [(formData.metaDescription || '').length, "/160 characters"] })] }), _jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-foreground mb-1", children: "Meta Keywords" }), _jsx(TagInput, { value: formData.metaKeywords || [], onChange: (tags) => setFormData((prev) => ({ ...prev, metaKeywords: tags })), placeholder: "Add keywords...", maxTags: 10 })] }), _jsx(SEOPreview, { title: formData.metaTitle || formData.name, description: formData.metaDescription || formData.description.slice(0, 160), slug: formData.slug || autoSlug, className: "mt-4" })] }))] })] }), _jsxs("div", { className: "space-y-6", children: [isEditMode && (_jsxs("div", { className: "rounded-lg border border-border bg-card p-6", children: [_jsx("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Status" }), _jsxs("div", { className: "space-y-3", children: [_jsxs("label", { className: "flex items-center gap-3 cursor-pointer", children: [_jsx("input", { type: "radio", name: "status", value: "draft", checked: formData.status === 'draft', onChange: handleChange, className: "h-4 w-4 text-primary focus:ring-primary" }), _jsxs("div", { children: [_jsx("span", { className: "text-sm font-medium text-foreground", children: "Draft" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Not visible to customers" })] })] }), _jsxs("label", { className: "flex items-center gap-3 cursor-pointer", children: [_jsx("input", { type: "radio", name: "status", value: "active", checked: formData.status === 'active', onChange: handleChange, className: "h-4 w-4 text-primary focus:ring-primary" }), _jsxs("div", { children: [_jsx("span", { className: "text-sm font-medium text-foreground", children: "Active" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Visible to customers" })] })] }), _jsxs("label", { className: "flex items-center gap-3 cursor-pointer", children: [_jsx("input", { type: "radio", name: "status", value: "archived", checked: formData.status === 'archived', onChange: handleChange, className: "h-4 w-4 text-primary focus:ring-primary" }), _jsxs("div", { children: [_jsx("span", { className: "text-sm font-medium text-foreground", children: "Archived" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Hidden and not for sale" })] })] })] })] })), _jsxs("div", { className: "rounded-lg border border-border bg-card p-6", children: [_jsx("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Organization" }), _jsx("div", { className: "space-y-4", children: _jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-foreground mb-1", children: "Category" }), _jsx(CategorySelect, { value: formData.categoryId || null, onChange: (id) => setFormData((prev) => ({ ...prev, categoryId: id || undefined })), placeholder: "Select category", showAddNew: true, onAddNew: () => {
236
+ // Open category management in new tab
237
+ window.open('/admin/categories', '_blank');
238
+ } })] }) })] }), _jsxs("div", { className: "rounded-lg border border-border bg-card p-6", children: [_jsxs("h3", { className: "mb-4 text-lg font-medium text-foreground flex items-center gap-2", children: [_jsx(Package, { className: "h-5 w-5" }), "Summary"] }), _jsxs("dl", { className: "space-y-2 text-sm", children: [_jsxs("div", { className: "flex justify-between", children: [_jsx("dt", { className: "text-muted-foreground", children: "Price" }), _jsxs("dd", { className: "font-medium", children: ["$", formData.price.toFixed(2)] })] }), formData.hasVariants && variants.length > 0 && (_jsxs("div", { className: "flex justify-between", children: [_jsx("dt", { className: "text-muted-foreground", children: "Variants" }), _jsx("dd", { className: "font-medium", children: variants.length })] })), _jsxs("div", { className: "flex justify-between", children: [_jsx("dt", { className: "text-muted-foreground", children: "Images" }), _jsx("dd", { className: "font-medium", children: formData.images.length })] }), formData.hasVariants && variants.length > 0 && (_jsxs("div", { className: "flex justify-between", children: [_jsx("dt", { className: "text-muted-foreground", children: "Total Inventory" }), _jsx("dd", { className: "font-medium", children: variants.reduce((sum, v) => sum + v.inventory, 0) })] }))] })] }), _jsxs("div", { className: "rounded-lg border border-border bg-card p-6 lg:sticky lg:top-6", children: [_jsxs("div", { className: "space-y-3", children: [_jsx("button", { type: "submit", disabled: isLoading, className: "w-full rounded-md bg-primary px-4 py-2.5 text-sm font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50", children: isLoading ? 'Saving...' : isEditMode ? 'Save Changes' : 'Create Product' }), onCancel && (_jsx("button", { type: "button", onClick: onCancel, className: "w-full rounded-md border border-border px-4 py-2.5 text-sm font-medium text-foreground hover:bg-accent", children: "Cancel" }))] }), !isEditMode && (_jsx("p", { className: "mt-3 text-xs text-center text-muted-foreground", children: "Product will be saved as draft" }))] })] })] })] }));
126
239
  }
127
240
  //# sourceMappingURL=ProductForm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProductForm.js","sourceRoot":"","sources":["../../../src/admin/components/ProductForm.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProductForm.js","sourceRoot":"","sources":["../../../src/admin/components/ProductForm.tsx"],"names":[],"mappings":"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"}