@rovela-ai/sdk 0.18.5 → 0.18.7

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 (174) hide show
  1. package/dist/admin/components/AdminAcceptInviteForm.d.ts.map +1 -1
  2. package/dist/admin/components/AdminAcceptInviteForm.js +17 -6
  3. package/dist/admin/components/AdminAcceptInviteForm.js.map +1 -1
  4. package/dist/admin/components/AdminAccountPage.d.ts.map +1 -1
  5. package/dist/admin/components/AdminAccountPage.js +7 -10
  6. package/dist/admin/components/AdminAccountPage.js.map +1 -1
  7. package/dist/admin/components/AdminAuthShell.d.ts +32 -0
  8. package/dist/admin/components/AdminAuthShell.d.ts.map +1 -0
  9. package/dist/admin/components/AdminAuthShell.js +17 -0
  10. package/dist/admin/components/AdminAuthShell.js.map +1 -0
  11. package/dist/admin/components/AdminBrandTile.d.ts +10 -0
  12. package/dist/admin/components/AdminBrandTile.d.ts.map +1 -0
  13. package/dist/admin/components/AdminBrandTile.js +46 -0
  14. package/dist/admin/components/AdminBrandTile.js.map +1 -0
  15. package/dist/admin/components/AdminEmptyState.d.ts +33 -0
  16. package/dist/admin/components/AdminEmptyState.d.ts.map +1 -0
  17. package/dist/admin/components/AdminEmptyState.js +12 -0
  18. package/dist/admin/components/AdminEmptyState.js.map +1 -0
  19. package/dist/admin/components/AdminForgotPasswordForm.d.ts.map +1 -1
  20. package/dist/admin/components/AdminForgotPasswordForm.js +8 -6
  21. package/dist/admin/components/AdminForgotPasswordForm.js.map +1 -1
  22. package/dist/admin/components/AdminLoginForm.js +1 -1
  23. package/dist/admin/components/AdminLoginForm.js.map +1 -1
  24. package/dist/admin/components/AdminModal.d.ts +51 -0
  25. package/dist/admin/components/AdminModal.d.ts.map +1 -0
  26. package/dist/admin/components/AdminModal.js +118 -0
  27. package/dist/admin/components/AdminModal.js.map +1 -0
  28. package/dist/admin/components/AdminPagination.d.ts +22 -0
  29. package/dist/admin/components/AdminPagination.d.ts.map +1 -0
  30. package/dist/admin/components/AdminPagination.js +15 -0
  31. package/dist/admin/components/AdminPagination.js.map +1 -0
  32. package/dist/admin/components/AdminResetPasswordForm.d.ts.map +1 -1
  33. package/dist/admin/components/AdminResetPasswordForm.js +12 -6
  34. package/dist/admin/components/AdminResetPasswordForm.js.map +1 -1
  35. package/dist/admin/components/AdminSearchInput.d.ts +14 -0
  36. package/dist/admin/components/AdminSearchInput.d.ts.map +1 -0
  37. package/dist/admin/components/AdminSearchInput.js +56 -0
  38. package/dist/admin/components/AdminSearchInput.js.map +1 -0
  39. package/dist/admin/components/AdminSelect.d.ts +3 -1
  40. package/dist/admin/components/AdminSelect.d.ts.map +1 -1
  41. package/dist/admin/components/AdminSelect.js +2 -2
  42. package/dist/admin/components/AdminSelect.js.map +1 -1
  43. package/dist/admin/components/AdminSwitch.d.ts +20 -0
  44. package/dist/admin/components/AdminSwitch.d.ts.map +1 -0
  45. package/dist/admin/components/AdminSwitch.js +9 -0
  46. package/dist/admin/components/AdminSwitch.js.map +1 -0
  47. package/dist/admin/components/AdminTopBar.d.ts +1 -1
  48. package/dist/admin/components/AdminTopBar.d.ts.map +1 -1
  49. package/dist/admin/components/AdminTopBar.js +5 -21
  50. package/dist/admin/components/AdminTopBar.js.map +1 -1
  51. package/dist/admin/components/AdminUserMenu.js +1 -1
  52. package/dist/admin/components/BrandingAssetUpload.d.ts.map +1 -1
  53. package/dist/admin/components/BrandingAssetUpload.js +3 -3
  54. package/dist/admin/components/BrandingAssetUpload.js.map +1 -1
  55. package/dist/admin/components/CategoryForm.d.ts.map +1 -1
  56. package/dist/admin/components/CategoryForm.js +7 -3
  57. package/dist/admin/components/CategoryForm.js.map +1 -1
  58. package/dist/admin/components/CategorySelect.js +2 -2
  59. package/dist/admin/components/CategorySelect.js.map +1 -1
  60. package/dist/admin/components/CustomerAddressPanel.d.ts.map +1 -1
  61. package/dist/admin/components/CustomerAddressPanel.js +15 -7
  62. package/dist/admin/components/CustomerAddressPanel.js.map +1 -1
  63. package/dist/admin/components/CustomerDetails.d.ts.map +1 -1
  64. package/dist/admin/components/CustomerDetails.js +8 -14
  65. package/dist/admin/components/CustomerDetails.js.map +1 -1
  66. package/dist/admin/components/CustomerGroupsManager.d.ts.map +1 -1
  67. package/dist/admin/components/CustomerGroupsManager.js +18 -12
  68. package/dist/admin/components/CustomerGroupsManager.js.map +1 -1
  69. package/dist/admin/components/CustomerTable.d.ts.map +1 -1
  70. package/dist/admin/components/CustomerTable.js +24 -15
  71. package/dist/admin/components/CustomerTable.js.map +1 -1
  72. package/dist/admin/components/DeleteConfirmDialog.d.ts +5 -5
  73. package/dist/admin/components/DeleteConfirmDialog.d.ts.map +1 -1
  74. package/dist/admin/components/DeleteConfirmDialog.js +11 -8
  75. package/dist/admin/components/DeleteConfirmDialog.js.map +1 -1
  76. package/dist/admin/components/DiscountsManager.d.ts.map +1 -1
  77. package/dist/admin/components/DiscountsManager.js +47 -15
  78. package/dist/admin/components/DiscountsManager.js.map +1 -1
  79. package/dist/admin/components/EmailsManager.d.ts.map +1 -1
  80. package/dist/admin/components/EmailsManager.js +18 -20
  81. package/dist/admin/components/EmailsManager.js.map +1 -1
  82. package/dist/admin/components/FilesManager.d.ts.map +1 -1
  83. package/dist/admin/components/FilesManager.js +16 -18
  84. package/dist/admin/components/FilesManager.js.map +1 -1
  85. package/dist/admin/components/InventoryEditor.js +1 -1
  86. package/dist/admin/components/InventoryEditor.js.map +1 -1
  87. package/dist/admin/components/InviteUserDialog.d.ts.map +1 -1
  88. package/dist/admin/components/InviteUserDialog.js +12 -16
  89. package/dist/admin/components/InviteUserDialog.js.map +1 -1
  90. package/dist/admin/components/LocationsManager.d.ts.map +1 -1
  91. package/dist/admin/components/LocationsManager.js +18 -8
  92. package/dist/admin/components/LocationsManager.js.map +1 -1
  93. package/dist/admin/components/MediaLibraryPicker.d.ts.map +1 -1
  94. package/dist/admin/components/MediaLibraryPicker.js +22 -15
  95. package/dist/admin/components/MediaLibraryPicker.js.map +1 -1
  96. package/dist/admin/components/OrderDetails.d.ts.map +1 -1
  97. package/dist/admin/components/OrderDetails.js +19 -34
  98. package/dist/admin/components/OrderDetails.js.map +1 -1
  99. package/dist/admin/components/OrderStatusChart.js +1 -1
  100. package/dist/admin/components/OrderStatusChart.js.map +1 -1
  101. package/dist/admin/components/OrderTable.d.ts.map +1 -1
  102. package/dist/admin/components/OrderTable.js +27 -14
  103. package/dist/admin/components/OrderTable.js.map +1 -1
  104. package/dist/admin/components/PaymentMethodsManager.d.ts.map +1 -1
  105. package/dist/admin/components/PaymentMethodsManager.js +17 -16
  106. package/dist/admin/components/PaymentMethodsManager.js.map +1 -1
  107. package/dist/admin/components/PaymentSettings.d.ts.map +1 -1
  108. package/dist/admin/components/PaymentSettings.js +2 -2
  109. package/dist/admin/components/PaymentSettings.js.map +1 -1
  110. package/dist/admin/components/PermissionsMatrix.js +1 -1
  111. package/dist/admin/components/PermissionsMatrix.js.map +1 -1
  112. package/dist/admin/components/PrimaryMetricsRow.d.ts.map +1 -1
  113. package/dist/admin/components/PrimaryMetricsRow.js +4 -1
  114. package/dist/admin/components/PrimaryMetricsRow.js.map +1 -1
  115. package/dist/admin/components/ProductForm.d.ts.map +1 -1
  116. package/dist/admin/components/ProductForm.js +11 -5
  117. package/dist/admin/components/ProductForm.js.map +1 -1
  118. package/dist/admin/components/ProductTable.d.ts.map +1 -1
  119. package/dist/admin/components/ProductTable.js +22 -9
  120. package/dist/admin/components/ProductTable.js.map +1 -1
  121. package/dist/admin/components/RecentOrders.d.ts.map +1 -1
  122. package/dist/admin/components/RecentOrders.js +3 -16
  123. package/dist/admin/components/RecentOrders.js.map +1 -1
  124. package/dist/admin/components/RefundDialog.d.ts +1 -1
  125. package/dist/admin/components/RefundDialog.d.ts.map +1 -1
  126. package/dist/admin/components/RefundDialog.js +10 -17
  127. package/dist/admin/components/RefundDialog.js.map +1 -1
  128. package/dist/admin/components/RevenueChart.js +1 -1
  129. package/dist/admin/components/RevenueChart.js.map +1 -1
  130. package/dist/admin/components/SEOPreview.js +1 -1
  131. package/dist/admin/components/SEOPreview.js.map +1 -1
  132. package/dist/admin/components/SecondaryMetricsRow.d.ts.map +1 -1
  133. package/dist/admin/components/SecondaryMetricsRow.js +6 -1
  134. package/dist/admin/components/SecondaryMetricsRow.js.map +1 -1
  135. package/dist/admin/components/ShippingSettings.d.ts.map +1 -1
  136. package/dist/admin/components/ShippingSettings.js +22 -31
  137. package/dist/admin/components/ShippingSettings.js.map +1 -1
  138. package/dist/admin/components/StatsCards.d.ts.map +1 -1
  139. package/dist/admin/components/StatsCards.js +4 -1
  140. package/dist/admin/components/StatsCards.js.map +1 -1
  141. package/dist/admin/components/TagInput.d.ts +1 -1
  142. package/dist/admin/components/TagInput.js +1 -1
  143. package/dist/admin/components/TaxSettings.d.ts.map +1 -1
  144. package/dist/admin/components/TaxSettings.js +20 -19
  145. package/dist/admin/components/TaxSettings.js.map +1 -1
  146. package/dist/admin/components/UsersTable.d.ts.map +1 -1
  147. package/dist/admin/components/UsersTable.js +21 -20
  148. package/dist/admin/components/UsersTable.js.map +1 -1
  149. package/dist/admin/components/VariantManager.d.ts.map +1 -1
  150. package/dist/admin/components/VariantManager.js +5 -5
  151. package/dist/admin/components/VariantManager.js.map +1 -1
  152. package/dist/admin/components/emails/ColorField.d.ts.map +1 -1
  153. package/dist/admin/components/emails/ColorField.js +1 -1
  154. package/dist/admin/components/emails/ColorField.js.map +1 -1
  155. package/dist/admin/components/emails/EmailPreviewPane.js +1 -1
  156. package/dist/admin/components/emails/EmailPreviewPane.js.map +1 -1
  157. package/dist/admin/components/emails/EmailThemePanel.js +1 -1
  158. package/dist/admin/components/emails/EmailThemePanel.js.map +1 -1
  159. package/dist/admin/components/emails/FontPicker.js +2 -2
  160. package/dist/admin/components/emails/FontPicker.js.map +1 -1
  161. package/dist/admin/components/index.d.ts +15 -0
  162. package/dist/admin/components/index.d.ts.map +1 -1
  163. package/dist/admin/components/index.js +9 -0
  164. package/dist/admin/components/index.js.map +1 -1
  165. package/dist/admin/components/statusBadges.d.ts +12 -0
  166. package/dist/admin/components/statusBadges.d.ts.map +1 -0
  167. package/dist/admin/components/statusBadges.js +50 -0
  168. package/dist/admin/components/statusBadges.js.map +1 -0
  169. package/dist/admin/index.d.ts +2 -2
  170. package/dist/admin/index.d.ts.map +1 -1
  171. package/dist/admin/index.js +4 -2
  172. package/dist/admin/index.js.map +1 -1
  173. package/dist/admin/styles/admin-theme.css +289 -0
  174. package/package.json +1 -1
@@ -1,15 +1,18 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  /**
4
4
  * @rovela/sdk/admin/components/RefundDialog
5
5
  *
6
- * Refund dialog with reason and confirmation.
7
- * Styled with Rovela admin theme.
6
+ * Refund dialog with reason and confirmation. Built on AdminModal (the one
7
+ * overlay primitive) Escape, guarded click-outside, scroll lock, portal
8
+ * and focus containment come from the primitive, not from local handlers.
8
9
  */
9
10
  import { useState, useCallback, useEffect } from 'react';
10
- import { AlertTriangle, X } from 'lucide-react';
11
+ import { AlertTriangle } from 'lucide-react';
11
12
  import { useAdminOrders } from '../hooks/useAdminOrders';
12
13
  import { useStoreSettingsOptional } from '../../core/StoreSettingsProvider';
14
+ import { adminToast } from './AdminToaster';
15
+ import { AdminModal } from './AdminModal';
13
16
  // =============================================================================
14
17
  // Component
15
18
  // =============================================================================
@@ -43,16 +46,6 @@ export function RefundDialog({ orderId, orderTotal, currency: orderCurrency, isO
43
46
  setError(null);
44
47
  }
45
48
  }, [isOpen]);
46
- // Handle escape key
47
- useEffect(() => {
48
- const handleEscape = (e) => {
49
- if (e.key === 'Escape' && isOpen && !isProcessing) {
50
- onClose();
51
- }
52
- };
53
- window.addEventListener('keydown', handleEscape);
54
- return () => window.removeEventListener('keydown', handleEscape);
55
- }, [isOpen, isProcessing, onClose]);
56
49
  const handleSubmit = useCallback(async (e) => {
57
50
  e.preventDefault();
58
51
  setError(null);
@@ -67,6 +60,8 @@ export function RefundDialog({ orderId, orderTotal, currency: orderCurrency, isO
67
60
  const amountInCents = Math.round(total * 100);
68
61
  const result = await processRefund(orderId, amountInCents, reason.trim());
69
62
  if (result.success) {
63
+ // Money moved — the dialog closes, the toast confirms (convention #7).
64
+ adminToast.success('Refund processed');
70
65
  onSuccess?.();
71
66
  onClose();
72
67
  }
@@ -78,14 +73,12 @@ export function RefundDialog({ orderId, orderTotal, currency: orderCurrency, isO
78
73
  setIsProcessing(false);
79
74
  }
80
75
  }, [orderId, orderTotal, reason, processRefund, onSuccess, onClose]);
81
- if (!isOpen)
82
- return null;
83
76
  const total = typeof orderTotal === 'string' ? parseFloat(orderTotal) : orderTotal;
84
77
  // Per-order snapshot wins (see RefundDialogProps.currency).
85
78
  const formattedTotal = new Intl.NumberFormat(resolvedLocale, {
86
79
  style: 'currency',
87
80
  currency: orderCurrency || resolvedCurrency,
88
81
  }).format(total);
89
- return (_jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center", children: [_jsx("div", { className: "admin-modal-backdrop admin-modal-backdrop-animate absolute inset-0", onClick: () => !isProcessing && onClose() }), _jsxs("div", { className: "admin-modal admin-modal-animate relative w-full max-w-md mx-4", children: [_jsxs("div", { className: "admin-modal-header", children: [_jsx("div", { className: "admin-modal-icon admin-modal-icon-warning", children: _jsx(AlertTriangle, { className: "h-5 w-5" }) }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("h2", { className: "admin-modal-title", children: "Process Refund" }), _jsxs("p", { className: "admin-modal-description", children: ["Order #", orderId.slice(-8).toUpperCase()] })] }), _jsx("button", { onClick: onClose, disabled: isProcessing, className: "admin-btn admin-btn-ghost admin-btn-icon admin-btn-sm admin-text-muted", children: _jsx(X, { className: "h-5 w-5" }) })] }), _jsxs("form", { onSubmit: handleSubmit, children: [_jsxs("div", { className: "admin-modal-body space-y-6", children: [error && (_jsx("div", { className: "admin-alert admin-alert-error", children: _jsx("div", { className: "admin-alert-description", children: error }) })), _jsxs("div", { className: "admin-card admin-card-subtle rounded-lg p-4", children: [_jsx("p", { className: "text-sm admin-text-muted", children: "Refund Amount" }), _jsx("p", { className: "admin-heading-2 mt-1", children: formattedTotal }), _jsx("p", { className: "mt-1 text-xs admin-text-muted", children: "Full refund will be processed via Stripe" })] }), _jsxs("div", { className: "admin-form-group", children: [_jsx("label", { htmlFor: "reason", className: "admin-label admin-label-required", children: "Reason for refund" }), _jsx("textarea", { id: "reason", value: reason, onChange: (e) => setReason(e.target.value), placeholder: "Enter the reason for this refund...", rows: 3, required: true, disabled: isProcessing, className: "admin-input admin-textarea w-full resize-none" })] })] }), _jsxs("div", { className: "admin-modal-footer", children: [_jsx("button", { type: "button", onClick: onClose, disabled: isProcessing, className: "admin-btn admin-btn-secondary flex-1", children: "Cancel" }), _jsx("button", { type: "submit", disabled: isProcessing || !reason.trim(), className: "admin-btn admin-btn-destructive flex-1", children: isProcessing ? 'Processing...' : 'Process Refund' })] })] })] })] }));
82
+ return (_jsx(AdminModal, { open: isOpen, onClose: onClose, busy: isProcessing, title: "Process refund", description: `Order #${orderId.slice(-8).toUpperCase()}`, icon: _jsx(AlertTriangle, { className: "h-5 w-5" }), iconTone: "warning", showClose: true, footer: _jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: onClose, disabled: isProcessing, className: "admin-btn admin-btn-secondary", children: "Cancel" }), _jsx("button", { type: "submit", form: "refund-form", disabled: isProcessing || !reason.trim(), className: "admin-btn admin-btn-destructive", children: isProcessing ? 'Processing…' : 'Process refund' })] }), children: _jsx("form", { id: "refund-form", onSubmit: handleSubmit, children: _jsxs("div", { className: "admin-modal-body space-y-6", children: [error && (_jsx("div", { className: "admin-alert admin-alert-error", children: _jsx("div", { className: "admin-alert-description", children: error }) })), _jsxs("div", { className: "admin-card admin-card-subtle rounded-lg p-4", children: [_jsx("p", { className: "text-sm admin-text-muted", children: "Refund amount" }), _jsx("p", { className: "admin-heading-2 mt-1", children: formattedTotal }), _jsx("p", { className: "mt-1 text-xs admin-text-muted", children: "Full refund will be processed via Stripe" })] }), _jsxs("div", { className: "admin-form-group", children: [_jsx("label", { htmlFor: "reason", className: "admin-label admin-label-required", children: "Reason for refund" }), _jsx("textarea", { id: "reason", value: reason, onChange: (e) => setReason(e.target.value), placeholder: "Enter the reason for this refund\u2026", rows: 3, required: true, disabled: isProcessing, className: "admin-input admin-textarea w-full resize-none" })] })] }) }) }));
90
83
  }
91
84
  //# sourceMappingURL=RefundDialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RefundDialog.js","sourceRoot":"","sources":["../../../src/admin/components/RefundDialog.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RefundDialog.js","sourceRoot":"","sources":["../../../src/admin/components/RefundDialog.tsx"],"names":[],"mappings":"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"}
@@ -62,7 +62,7 @@ export function RevenueChart({ data, isLoading = false, currency = 'USD', classN
62
62
  currency,
63
63
  minimumFractionDigits: 0,
64
64
  maximumFractionDigits: 0,
65
- }).format(totalRevenue) }), _jsx("p", { className: "admin-chart-value-label", children: "Total" })] }))] }), _jsx("div", { className: "admin-chart-body flex min-h-0 flex-1 flex-col", children: isLoading ? (_jsx("div", { className: "admin-chart-loading", children: _jsx("div", { className: "admin-chart-spinner" }) })) : data.length === 0 ? (_jsxs("div", { className: "admin-chart-empty", children: [_jsx(BarChart3, { className: "h-12 w-12 admin-chart-empty-icon", strokeWidth: 1 }), _jsx("p", { className: "admin-chart-empty-text", children: "No revenue data yet" }), _jsx("p", { className: "admin-chart-empty-subtext", children: "Revenue will appear here after your first sale" })] })) : (_jsx("div", {
65
+ }).format(totalRevenue) }), _jsx("p", { className: "admin-chart-value-label", children: "Total" })] }))] }), _jsx("div", { className: "admin-chart-body flex min-h-0 flex-1 flex-col", children: isLoading ? (_jsx("div", { className: "admin-chart-loading", children: _jsx("span", { className: "admin-spinner admin-spinner-lg" }) })) : data.length === 0 ? (_jsxs("div", { className: "admin-chart-empty", children: [_jsx(BarChart3, { className: "h-12 w-12 admin-chart-empty-icon", strokeWidth: 1 }), _jsx("p", { className: "admin-chart-empty-text", children: "No revenue data yet" }), _jsx("p", { className: "admin-chart-empty-subtext", children: "Revenue will appear here after your first sale" })] })) : (_jsx("div", {
66
66
  // Screen-reader summary so the chart isn't an opaque visual.
67
67
  // Tooltip alone doesn't surface to assistive tech.
68
68
  role: "img", className: "h-full min-h-[260px] w-full", "aria-label": `Revenue chart for the last ${data.length} days. Total ${new Intl.NumberFormat('en-US', { style: 'currency', currency, maximumFractionDigits: 0 }).format(totalRevenue)}.`, children: _jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(AreaChart, { data: data, margin: { top: 10, right: 10, left: 0, bottom: 0 }, children: [_jsx("defs", { children: _jsxs("linearGradient", { id: "revenueGradient", x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "0%", stopColor: "hsl(var(--admin-primary))", stopOpacity: 0.3 }), _jsx("stop", { offset: "100%", stopColor: "hsl(var(--admin-primary))", stopOpacity: 0 })] }) }), _jsx(CartesianGrid, { strokeDasharray: "3 3", vertical: false, stroke: "hsl(var(--admin-border))" }), _jsx(XAxis, { dataKey: "date", tickFormatter: tickFormatter, axisLine: false, tickLine: false, tick: { fill: 'hsl(var(--admin-foreground-muted))', fontSize: 12 }, dy: 10 }), _jsx(YAxis, { tickFormatter: formatCurrency, axisLine: false, tickLine: false, tick: { fill: 'hsl(var(--admin-foreground-muted))', fontSize: 12 }, width: 60 }), _jsx(Tooltip, { content: _jsx(CustomTooltip, { currency: currency }) }), _jsx(Area, { type: "monotone", dataKey: "revenue", stroke: "hsl(var(--admin-primary))", strokeWidth: 2, fill: "url(#revenueGradient)" })] }) }) })) })] }));
@@ -1 +1 @@
1
- {"version":3,"file":"RevenueChart.js","sourceRoot":"","sources":["../../../src/admin/components/RevenueChart.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RevenueChart.js","sourceRoot":"","sources":["../../../src/admin/components/RevenueChart.tsx"],"names":[],"mappings":"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"}
@@ -25,6 +25,6 @@ export function SEOPreview({ title, description, slug, baseUrl = 'https://yourst
25
25
  : description;
26
26
  // Build URL
27
27
  const displayUrl = `${baseUrl}/${slug || 'product-name'}`;
28
- return (_jsxs("div", { className: `admin-card p-4 ${className}`, children: [_jsx("p", { className: "mb-3 text-xs font-medium uppercase tracking-wider admin-text-muted", children: "Search Engine Preview" }), _jsxs("div", { className: "space-y-1", children: [_jsxs("div", { className: "flex items-center gap-2 text-sm", children: [_jsx("div", { className: "admin-seo-preview-favicon admin-avatar-sm", children: _jsx("span", { className: "text-xs font-medium admin-text-muted", children: "S" }) }), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-xs admin-text-muted", children: "Your Store" }), _jsx("span", { className: "admin-seo-preview-url text-xs truncate max-w-[300px]", children: displayUrl })] })] }), _jsx("h3", { className: "admin-seo-preview-title text-lg font-normal hover:underline cursor-pointer leading-snug", children: displayTitle || 'Product Title' }), _jsx("p", { className: "admin-seo-preview-description text-sm leading-relaxed", children: displayDescription || 'Add a meta description to help search engines understand what this product is about and to entice users to click.' })] }), _jsxs("div", { className: "admin-summary-divider mt-4 flex gap-6 pt-3", children: [_jsxs("div", { className: "text-xs", children: [_jsx("span", { className: "admin-text-muted", children: "Title: " }), _jsxs("span", { className: title.length > 60 ? 'admin-text-error' : 'admin-text', children: [title.length, "/60"] })] }), _jsxs("div", { className: "text-xs", children: [_jsx("span", { className: "admin-text-muted", children: "Description: " }), _jsxs("span", { className: description.length > 160 ? 'admin-text-error' : 'admin-text', children: [description.length, "/160"] })] })] })] }));
28
+ return (_jsxs("div", { className: `admin-card p-4 ${className}`, children: [_jsx("p", { className: "admin-section-title mb-3", children: "Search Engine Preview" }), _jsxs("div", { className: "space-y-1", children: [_jsxs("div", { className: "flex items-center gap-2 text-sm", children: [_jsx("div", { className: "admin-seo-preview-favicon admin-avatar-sm", children: _jsx("span", { className: "text-xs font-medium admin-text-muted", children: "S" }) }), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-xs admin-text-muted", children: "Your Store" }), _jsx("span", { className: "admin-seo-preview-url text-xs truncate max-w-[300px]", children: displayUrl })] })] }), _jsx("h3", { className: "admin-seo-preview-title text-lg font-normal hover:underline cursor-pointer leading-snug", children: displayTitle || 'Product Title' }), _jsx("p", { className: "admin-seo-preview-description text-sm leading-relaxed", children: displayDescription || 'Add a meta description to help search engines understand what this product is about and to entice users to click.' })] }), _jsxs("div", { className: "admin-summary-divider mt-4 flex gap-6 pt-3", children: [_jsxs("div", { className: "text-xs", children: [_jsx("span", { className: "admin-text-muted", children: "Title: " }), _jsxs("span", { className: title.length > 60 ? 'admin-text-error' : 'admin-text', children: [title.length, "/60"] })] }), _jsxs("div", { className: "text-xs", children: [_jsx("span", { className: "admin-text-muted", children: "Description: " }), _jsxs("span", { className: description.length > 160 ? 'admin-text-error' : 'admin-text', children: [description.length, "/160"] })] })] })] }));
29
29
  }
30
30
  //# sourceMappingURL=SEOPreview.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SEOPreview.js","sourceRoot":"","sources":["../../../src/admin/components/SEOPreview.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AA0BZ,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,IAAI,EACJ,OAAO,GAAG,gCAAgC,EAC1C,SAAS,GAAG,EAAE,GACE;IAChB,4DAA4D;IAC5D,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;IAE3E,qEAAqE;IACrE,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,GAAG,GAAG;QACjD,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK;QACnC,CAAC,CAAC,WAAW,CAAA;IAEf,YAAY;IACZ,MAAM,UAAU,GAAG,GAAG,OAAO,IAAI,IAAI,IAAI,cAAc,EAAE,CAAA;IAEzD,OAAO,CACL,eAAK,SAAS,EAAE,kBAAkB,SAAS,EAAE,aAC3C,YAAG,SAAS,EAAC,oEAAoE,sCAE7E,EAGJ,eAAK,SAAS,EAAC,WAAW,aAExB,eAAK,SAAS,EAAC,iCAAiC,aAC9C,cAAK,SAAS,EAAC,2CAA2C,YACxD,eAAM,SAAS,EAAC,sCAAsC,kBAAS,GAC3D,EACN,eAAK,SAAS,EAAC,eAAe,aAC5B,eAAM,SAAS,EAAC,0BAA0B,2BAAkB,EAC5D,eAAM,SAAS,EAAC,sDAAsD,YACnE,UAAU,GACN,IACH,IACF,EAGN,aAAI,SAAS,EAAC,yFAAyF,YACpG,YAAY,IAAI,eAAe,GAC7B,EAGL,YAAG,SAAS,EAAC,uDAAuD,YACjE,kBAAkB,IAAI,mHAAmH,GACxI,IACA,EAGN,eAAK,SAAS,EAAC,4CAA4C,aACzD,eAAK,SAAS,EAAC,SAAS,aACtB,eAAM,SAAS,EAAC,kBAAkB,wBAAe,EACjD,gBAAM,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,YAAY,aACnE,KAAK,CAAC,MAAM,WACR,IACH,EACN,eAAK,SAAS,EAAC,SAAS,aACtB,eAAM,SAAS,EAAC,kBAAkB,8BAAqB,EACvD,gBAAM,SAAS,EAAE,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,YAAY,aAC1E,WAAW,CAAC,MAAM,YACd,IACH,IACF,IACF,CACP,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"SEOPreview.js","sourceRoot":"","sources":["../../../src/admin/components/SEOPreview.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AA0BZ,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,IAAI,EACJ,OAAO,GAAG,gCAAgC,EAC1C,SAAS,GAAG,EAAE,GACE;IAChB,4DAA4D;IAC5D,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;IAE3E,qEAAqE;IACrE,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,GAAG,GAAG;QACjD,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK;QACnC,CAAC,CAAC,WAAW,CAAA;IAEf,YAAY;IACZ,MAAM,UAAU,GAAG,GAAG,OAAO,IAAI,IAAI,IAAI,cAAc,EAAE,CAAA;IAEzD,OAAO,CACL,eAAK,SAAS,EAAE,kBAAkB,SAAS,EAAE,aAC3C,YAAG,SAAS,EAAC,0BAA0B,sCAEnC,EAGJ,eAAK,SAAS,EAAC,WAAW,aAExB,eAAK,SAAS,EAAC,iCAAiC,aAC9C,cAAK,SAAS,EAAC,2CAA2C,YACxD,eAAM,SAAS,EAAC,sCAAsC,kBAAS,GAC3D,EACN,eAAK,SAAS,EAAC,eAAe,aAC5B,eAAM,SAAS,EAAC,0BAA0B,2BAAkB,EAC5D,eAAM,SAAS,EAAC,sDAAsD,YACnE,UAAU,GACN,IACH,IACF,EAGN,aAAI,SAAS,EAAC,yFAAyF,YACpG,YAAY,IAAI,eAAe,GAC7B,EAGL,YAAG,SAAS,EAAC,uDAAuD,YACjE,kBAAkB,IAAI,mHAAmH,GACxI,IACA,EAGN,eAAK,SAAS,EAAC,4CAA4C,aACzD,eAAK,SAAS,EAAC,SAAS,aACtB,eAAM,SAAS,EAAC,kBAAkB,wBAAe,EACjD,gBAAM,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,YAAY,aACnE,KAAK,CAAC,MAAM,WACR,IACH,EACN,eAAK,SAAS,EAAC,SAAS,aACtB,eAAM,SAAS,EAAC,kBAAkB,8BAAqB,EACvD,gBAAM,SAAS,EAAE,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,YAAY,aAC1E,WAAW,CAAC,MAAM,YACd,IACH,IACF,IACF,CACP,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"SecondaryMetricsRow.d.ts","sourceRoot":"","sources":["../../../src/admin/components/SecondaryMetricsRow.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAMvE,MAAM,WAAW,wBAAwB;IACvC,2DAA2D;IAC3D,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAAA;IACvC,iEAAiE;IACjE,KAAK,EAAE,cAAc,GAAG,IAAI,CAAA;IAC5B,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kFAAkF;IAClF,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAA;CAC/C;AA8HD,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,KAAK,EACL,SAAS,EACT,QAAQ,EACR,MAAgB,EAChB,cAAgD,GACjD,EAAE,wBAAwB,2CA0B1B"}
1
+ {"version":3,"file":"SecondaryMetricsRow.d.ts","sourceRoot":"","sources":["../../../src/admin/components/SecondaryMetricsRow.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAMvE,MAAM,WAAW,wBAAwB;IACvC,2DAA2D;IAC3D,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAAA;IACvC,iEAAiE;IACjE,KAAK,EAAE,cAAc,GAAG,IAAI,CAAA;IAC5B,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kFAAkF;IAClF,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAA;CAC/C;AA8HD,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,KAAK,EACL,SAAS,EACT,QAAQ,EACR,MAAgB,EAChB,cAAgD,GACjD,EAAE,wBAAwB,2CAgC1B"}
@@ -40,6 +40,11 @@ function CountCard({ label, value, href, icon: Icon, isLoading, }) {
40
40
  // Component
41
41
  // =============================================================================
42
42
  export function SecondaryMetricsRow({ summary, stats, isLoading, currency, locale = 'en-US', bestSellerHref = (id) => `/admin/products/${id}`, }) {
43
- return (_jsxs("div", { className: "admin-stats-grid admin-stats-grid-3", children: [_jsx(BestSellerCard, { summary: summary, isLoading: isLoading, currency: currency, locale: locale, bestSellerHref: bestSellerHref }), _jsx(CountCard, { label: "Customers", value: stats?.customers ?? 0, href: "/admin/customers", icon: Users, isLoading: isLoading }), _jsx(CountCard, { label: "Active products", value: stats?.products ?? 0, href: "/admin/products", icon: Package, isLoading: isLoading })] }));
43
+ // Skeletons only when there is nothing to display yet a background
44
+ // refetch (period change / tab refocus) keeps the rendered cards mounted.
45
+ // Each card gates on its own data source.
46
+ const summarySkeleton = isLoading && !summary;
47
+ const statsSkeleton = isLoading && !stats;
48
+ return (_jsxs("div", { className: "admin-stats-grid admin-stats-grid-3", children: [_jsx(BestSellerCard, { summary: summary, isLoading: summarySkeleton, currency: currency, locale: locale, bestSellerHref: bestSellerHref }), _jsx(CountCard, { label: "Customers", value: stats?.customers ?? 0, href: "/admin/customers", icon: Users, isLoading: statsSkeleton }), _jsx(CountCard, { label: "Active products", value: stats?.products ?? 0, href: "/admin/products", icon: Package, isLoading: statsSkeleton })] }));
44
49
  }
45
50
  //# sourceMappingURL=SecondaryMetricsRow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SecondaryMetricsRow.js","sourceRoot":"","sources":["../../../src/admin/components/SecondaryMetricsRow.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SecondaryMetricsRow.js","sourceRoot":"","sources":["../../../src/admin/components/SecondaryMetricsRow.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAmBzD,gFAAgF;AAChF,uDAAuD;AACvD,gFAAgF;AAEhF,SAAS,cAAc,CAAC,EACtB,OAAO,EACP,SAAS,EACT,QAAQ,EACR,MAAM,EACN,cAAc,GAOf;IACC,MAAM,UAAU,GAAG,OAAO,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI,CAAA;IAEtD,MAAM,WAAW,GAAG,CAClB,eAAK,SAAS,EAAC,oBAAoB,aACjC,eAAK,SAAS,EAAC,iBAAiB,aAC9B,YAAG,SAAS,EAAC,kBAAkB,4BAAgB,EAC9C,SAAS,CAAC,CAAC,CAAC,CACX,cACE,SAAS,EAAC,gBAAgB,EAC1B,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAC1C,CACH,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CACf,8BACE,YACE,SAAS,EAAC,uBAAuB,EACjC,KAAK,EAAE,UAAU,CAAC,IAAI,EACtB,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,YAEhE,UAAU,CAAC,IAAI,GACd,EACJ,aAAG,SAAS,EAAC,uCAAuC,aACjD,UAAU,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,kBAAS,GAAG,EACvD,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;wCAC7B,KAAK,EAAE,UAAU;wCACjB,QAAQ;wCACR,qBAAqB,EAAE,CAAC;wCACxB,qBAAqB,EAAE,CAAC;qCACzB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAC5C,IACH,CACJ,CAAC,CAAC,CAAC,CACF,8BACE,YACE,SAAS,EAAC,kBAAkB,EAC5B,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,6BAG9C,EACJ,YAAG,SAAS,EAAC,uCAAuC,+DAEhD,IACH,CACJ,IACG,EACN,cAAK,SAAS,EAAC,iBAAiB,YAC9B,KAAC,UAAU,KAAG,GACV,IACF,CACP,CAAA;IAED,IAAI,UAAU,IAAI,cAAc,EAAE,CAAC;QACjC,OAAO,CACL,YACE,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,EACnC,SAAS,EAAC,2CAA2C,YAEpD,WAAW,GACV,CACL,CAAA;IACH,CAAC;IAED,OAAO,cAAK,SAAS,EAAC,iBAAiB,YAAE,WAAW,GAAO,CAAA;AAC7D,CAAC;AAED,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF,SAAS,SAAS,CAAC,EACjB,KAAK,EACL,KAAK,EACL,IAAI,EACJ,IAAI,EAAE,IAAI,EACV,SAAS,GAOV;IACC,OAAO,CACL,YAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAC,2CAA2C,YAClE,eAAK,SAAS,EAAC,oBAAoB,aACjC,eAAK,SAAS,EAAC,iBAAiB,aAC9B,YAAG,SAAS,EAAC,kBAAkB,YAAE,KAAK,GAAK,EAC1C,SAAS,CAAC,CAAC,CAAC,CACX,cACE,SAAS,EAAC,gBAAgB,EAC1B,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAC3C,CACH,CAAC,CAAC,CAAC,CACF,YAAG,SAAS,EAAC,kBAAkB,YAAE,KAAK,CAAC,cAAc,EAAE,GAAK,CAC7D,IACG,EACN,cAAK,SAAS,EAAC,iBAAiB,YAC9B,KAAC,IAAI,KAAG,GACJ,IACF,GACJ,CACL,CAAA;AACH,CAAC;AAED,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,MAAM,UAAU,mBAAmB,CAAC,EAClC,OAAO,EACP,KAAK,EACL,SAAS,EACT,QAAQ,EACR,MAAM,GAAG,OAAO,EAChB,cAAc,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,mBAAmB,EAAE,EAAE,GACvB;IACzB,qEAAqE;IACrE,0EAA0E;IAC1E,0CAA0C;IAC1C,MAAM,eAAe,GAAG,SAAS,IAAI,CAAC,OAAO,CAAA;IAC7C,MAAM,aAAa,GAAG,SAAS,IAAI,CAAC,KAAK,CAAA;IAEzC,OAAO,CACL,eAAK,SAAS,EAAC,qCAAqC,aAClD,KAAC,cAAc,IACb,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,eAAe,EAC1B,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,GAC9B,EACF,KAAC,SAAS,IACR,KAAK,EAAC,WAAW,EACjB,KAAK,EAAE,KAAK,EAAE,SAAS,IAAI,CAAC,EAC5B,IAAI,EAAC,kBAAkB,EACvB,IAAI,EAAE,KAAK,EACX,SAAS,EAAE,aAAa,GACxB,EACF,KAAC,SAAS,IACR,KAAK,EAAC,iBAAiB,EACvB,KAAK,EAAE,KAAK,EAAE,QAAQ,IAAI,CAAC,EAC3B,IAAI,EAAC,iBAAiB,EACtB,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,aAAa,GACxB,IACE,CACP,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ShippingSettings.d.ts","sourceRoot":"","sources":["../../../src/admin/components/ShippingSettings.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,qBAAqB,EAOtB,MAAM,UAAU,CAAA;AA0WjB,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,EAAE,EAAE,qBAAqB,2CA0iCpE"}
1
+ {"version":3,"file":"ShippingSettings.d.ts","sourceRoot":"","sources":["../../../src/admin/components/ShippingSettings.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,qBAAqB,EAOtB,MAAM,UAAU,CAAA;AAiXjB,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,EAAE,EAAE,qBAAqB,2CAghCpE"}
@@ -2,8 +2,11 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useState, useCallback, useEffect } from 'react';
4
4
  import { fetchAdminApi } from '../hooks/fetchAdminApi';
5
- import { Package, Plus, Edit2, Trash2, Globe, ChevronDown, ChevronUp, Plug, MapPin, Check, Truck, Box, RefreshCw, Key, Loader2, ExternalLink, } from 'lucide-react';
5
+ import { Package, Plus, Edit2, Trash2, Globe, ChevronDown, ChevronUp, Plug, MapPin, Check, Truck, Box, RefreshCw, Key, ExternalLink, } from 'lucide-react';
6
6
  import { DeleteConfirmDialog } from './DeleteConfirmDialog';
7
+ import { AdminModal } from './AdminModal';
8
+ import { AdminSwitch } from './AdminSwitch';
9
+ import { AdminEmptyState } from './AdminEmptyState';
7
10
  import { GroupVisibilityPicker } from './GroupVisibilityPicker';
8
11
  import { AdminSelect } from './AdminSelect';
9
12
  import { AdminSaveBar } from './AdminSaveBar';
@@ -44,14 +47,14 @@ function CountryTag({ code, onRemove, }) {
44
47
  function CarrierCard({ carrier, onEdit, onDelete, onAddZone, onEditZone, onDeleteZone, onAddRate, onEditRate, onDeleteRate, formatCurrency, }) {
45
48
  const [isExpanded, setIsExpanded] = useState(true);
46
49
  const zones = carrier.zones || [];
47
- return (_jsxs("div", { className: "rounded-lg border border-[hsl(var(--admin-border))] overflow-hidden", children: [_jsxs("div", { className: "flex items-center justify-between bg-[hsl(var(--admin-primary))]/10 px-4 py-3", children: [_jsxs("button", { type: "button", onClick: () => setIsExpanded(!isExpanded), className: "flex items-center gap-3 text-left flex-1", children: [_jsx(Truck, { className: "h-5 w-5 text-[hsl(var(--admin-primary))]" }), _jsxs("div", { children: [_jsx("span", { className: "font-semibold text-[hsl(var(--admin-foreground))]", children: carrier.name }), _jsxs("span", { className: "ml-2 text-sm text-[hsl(var(--admin-foreground-muted))]", children: ["(", carrier.code, ")"] }), carrier.description && (_jsx("p", { className: "text-sm text-[hsl(var(--admin-foreground-muted))]", children: carrier.description }))] }), isExpanded ? (_jsx(ChevronUp, { className: "h-4 w-4 text-[hsl(var(--admin-foreground-muted))]" })) : (_jsx(ChevronDown, { className: "h-4 w-4 text-[hsl(var(--admin-foreground-muted))]" }))] }), _jsxs("div", { className: "flex items-center gap-2", children: [!carrier.isActive && (_jsx("span", { className: "admin-badge admin-badge-warning text-xs", children: "Inactive" })), _jsxs("span", { className: "text-xs text-[hsl(var(--admin-foreground-muted))]", children: [zones.length, " zone", zones.length !== 1 ? 's' : ''] }), _jsx("button", { type: "button", onClick: onEdit, className: "admin-btn admin-btn-ghost admin-btn-sm", title: "Edit carrier", children: _jsx(Edit2, { className: "h-4 w-4" }) }), _jsx("button", { type: "button", onClick: onDelete, className: "admin-btn admin-btn-ghost admin-btn-sm text-[hsl(var(--admin-error))]", title: "Delete carrier", children: _jsx(Trash2, { className: "h-4 w-4" }) })] })] }), isExpanded && (_jsxs("div", { className: "bg-[hsl(var(--admin-card))]", children: [zones.length === 0 ? (_jsxs("div", { className: "px-4 py-6 text-center text-[hsl(var(--admin-foreground-muted))]", children: [_jsx(Package, { className: "h-8 w-8 mx-auto mb-2 opacity-50" }), _jsx("p", { className: "text-sm", children: "No zones configured for this carrier" })] })) : (_jsx("div", { className: "divide-y divide-[hsl(var(--admin-border))]", children: zones.map((zone) => (_jsx(ZoneCard, { zone: zone, onEdit: () => onEditZone(zone), onDelete: () => onDeleteZone(zone), onAddRate: () => onAddRate(zone.id), onEditRate: (rate) => onEditRate(zone.id, rate), onDeleteRate: onDeleteRate, formatCurrency: formatCurrency }, zone.id))) })), _jsx("div", { className: "px-4 py-3 border-t border-[hsl(var(--admin-border))]", children: _jsxs("button", { type: "button", onClick: onAddZone, className: "flex items-center gap-2 text-sm text-[hsl(var(--admin-primary))] hover:text-[hsl(var(--admin-primary-hover))]", children: [_jsx(Plus, { className: "h-4 w-4" }), "Add shipping zone"] }) })] }))] }));
50
+ return (_jsxs("div", { className: "rounded-lg border border-[hsl(var(--admin-border))] overflow-hidden", children: [_jsxs("div", { className: "flex items-center justify-between bg-[hsl(var(--admin-primary))]/10 px-4 py-3", children: [_jsxs("button", { type: "button", onClick: () => setIsExpanded(!isExpanded), className: "flex items-center gap-3 text-left flex-1", children: [_jsx(Truck, { className: "h-5 w-5 text-[hsl(var(--admin-primary))]" }), _jsxs("div", { children: [_jsx("span", { className: "font-semibold text-[hsl(var(--admin-foreground))]", children: carrier.name }), _jsxs("span", { className: "ml-2 text-sm text-[hsl(var(--admin-foreground-muted))]", children: ["(", carrier.code, ")"] }), carrier.description && (_jsx("p", { className: "text-sm text-[hsl(var(--admin-foreground-muted))]", children: carrier.description }))] }), isExpanded ? (_jsx(ChevronUp, { className: "h-4 w-4 text-[hsl(var(--admin-foreground-muted))]" })) : (_jsx(ChevronDown, { className: "h-4 w-4 text-[hsl(var(--admin-foreground-muted))]" }))] }), _jsxs("div", { className: "flex items-center gap-2", children: [!carrier.isActive && (_jsx("span", { className: "admin-badge admin-badge-neutral", children: "Inactive" })), _jsxs("span", { className: "text-xs text-[hsl(var(--admin-foreground-muted))]", children: [zones.length, " zone", zones.length !== 1 ? 's' : ''] }), _jsx("button", { type: "button", onClick: onEdit, className: "admin-btn admin-btn-ghost admin-btn-sm", title: "Edit carrier", children: _jsx(Edit2, { className: "h-4 w-4" }) }), _jsx("button", { type: "button", onClick: onDelete, className: "admin-btn admin-btn-ghost admin-btn-sm text-[hsl(var(--admin-error))]", title: "Delete carrier", children: _jsx(Trash2, { className: "h-4 w-4" }) })] })] }), isExpanded && (_jsxs("div", { className: "bg-[hsl(var(--admin-card))]", children: [zones.length === 0 ? (_jsx("div", { className: "px-4 py-6", children: _jsx(AdminEmptyState, { icon: _jsx(Package, {}), title: "No zones yet", description: "Add a shipping zone to start configuring rates for this carrier." }) })) : (_jsx("div", { className: "divide-y divide-[hsl(var(--admin-border))]", children: zones.map((zone) => (_jsx(ZoneCard, { zone: zone, onEdit: () => onEditZone(zone), onDelete: () => onDeleteZone(zone), onAddRate: () => onAddRate(zone.id), onEditRate: (rate) => onEditRate(zone.id, rate), onDeleteRate: onDeleteRate, formatCurrency: formatCurrency }, zone.id))) })), _jsx("div", { className: "px-4 py-3 border-t border-[hsl(var(--admin-border))]", children: _jsxs("button", { type: "button", onClick: onAddZone, className: "flex items-center gap-2 text-sm text-[hsl(var(--admin-primary))] hover:text-[hsl(var(--admin-primary-hover))]", children: [_jsx(Plus, { className: "h-4 w-4" }), "Add shipping zone"] }) })] }))] }));
48
51
  }
49
52
  // =============================================================================
50
53
  // Zone Card Component
51
54
  // =============================================================================
52
55
  function ZoneCard({ zone, onEdit, onDelete, onAddRate, onEditRate, onDeleteRate, formatCurrency, }) {
53
56
  const [isExpanded, setIsExpanded] = useState(true);
54
- return (_jsxs("div", { className: "bg-[hsl(var(--admin-background-subtle))]/30", children: [_jsxs("div", { className: "flex items-center justify-between px-4 py-3 pl-8", children: [_jsxs("button", { type: "button", onClick: () => setIsExpanded(!isExpanded), className: "flex items-center gap-3 text-left flex-1", children: [_jsx(Package, { className: "h-4 w-4 text-[hsl(var(--admin-foreground-muted))]" }), _jsxs("div", { children: [_jsx("span", { className: "font-medium text-[hsl(var(--admin-foreground))]", children: zone.name }), _jsxs("span", { className: "ml-2 text-sm text-[hsl(var(--admin-foreground-muted))]", children: ["(", zone.countries.includes('*') ? 'All countries' : zone.countries.join(', '), ")"] })] }), isExpanded ? (_jsx(ChevronUp, { className: "h-3 w-3 text-[hsl(var(--admin-foreground-muted))]" })) : (_jsx(ChevronDown, { className: "h-3 w-3 text-[hsl(var(--admin-foreground-muted))]" }))] }), _jsxs("div", { className: "flex items-center gap-2", children: [!zone.isActive && (_jsx("span", { className: "admin-badge admin-badge-warning text-xs", children: "Inactive" })), _jsx("button", { type: "button", onClick: onEdit, className: "admin-btn admin-btn-ghost admin-btn-sm", title: "Edit zone", children: _jsx(Edit2, { className: "h-4 w-4" }) }), _jsx("button", { type: "button", onClick: onDelete, className: "admin-btn admin-btn-ghost admin-btn-sm text-[hsl(var(--admin-error))]", title: "Delete zone", children: _jsx(Trash2, { className: "h-4 w-4" }) })] })] }), isExpanded && (_jsxs("div", { className: "bg-[hsl(var(--admin-card))]", children: [zone.rates.length === 0 ? (_jsx("div", { className: "px-4 py-4 pl-12 text-center text-[hsl(var(--admin-foreground-muted))] text-sm", children: "No shipping rates configured" })) : (_jsx("div", { className: "divide-y divide-[hsl(var(--admin-border))]", children: zone.rates.map((rate) => (_jsxs("div", { className: "flex items-center justify-between px-4 py-2 pl-12 hover:bg-[hsl(var(--admin-background-subtle))]/50 transition-colors", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("span", { className: "text-[hsl(var(--admin-foreground-muted))] text-xs", children: "\u2514\u2500" }), _jsxs("div", { children: [_jsx("span", { className: "text-sm font-medium text-[hsl(var(--admin-foreground))]", children: rate.name }), rate.description && (_jsx("span", { className: "ml-2 text-xs text-[hsl(var(--admin-foreground-muted))]", children: rate.description }))] })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("span", { className: "font-medium text-sm text-[hsl(var(--admin-foreground))]", children: formatCurrency(rate.price) }), rate.estimatedDays && (_jsxs("span", { className: "text-xs text-[hsl(var(--admin-foreground-muted))]", children: [rate.estimatedDays, " days"] })), !rate.isActive && (_jsx("span", { className: "admin-badge admin-badge-warning text-xs", children: "Inactive" })), _jsx("button", { type: "button", onClick: () => onEditRate(rate), className: "admin-btn admin-btn-ghost admin-btn-sm", title: "Edit rate", children: _jsx(Edit2, { className: "h-3 w-3" }) }), _jsx("button", { type: "button", onClick: () => onDeleteRate(rate), className: "admin-btn admin-btn-ghost admin-btn-sm text-[hsl(var(--admin-error))]", title: "Delete rate", children: _jsx(Trash2, { className: "h-3 w-3" }) })] })] }, rate.id))) })), _jsx("div", { className: "px-4 py-2 pl-12 border-t border-[hsl(var(--admin-border))]", children: _jsxs("button", { type: "button", onClick: onAddRate, className: "flex items-center gap-2 text-xs text-[hsl(var(--admin-primary))] hover:text-[hsl(var(--admin-primary-hover))]", children: [_jsx(Plus, { className: "h-3 w-3" }), "Add rate"] }) })] }))] }));
57
+ return (_jsxs("div", { className: "bg-[hsl(var(--admin-background-subtle))]/30", children: [_jsxs("div", { className: "flex items-center justify-between px-4 py-3 pl-8", children: [_jsxs("button", { type: "button", onClick: () => setIsExpanded(!isExpanded), className: "flex items-center gap-3 text-left flex-1", children: [_jsx(Package, { className: "h-4 w-4 text-[hsl(var(--admin-foreground-muted))]" }), _jsxs("div", { children: [_jsx("span", { className: "font-medium text-[hsl(var(--admin-foreground))]", children: zone.name }), _jsxs("span", { className: "ml-2 text-sm text-[hsl(var(--admin-foreground-muted))]", children: ["(", zone.countries.includes('*') ? 'All countries' : zone.countries.join(', '), ")"] })] }), isExpanded ? (_jsx(ChevronUp, { className: "h-3 w-3 text-[hsl(var(--admin-foreground-muted))]" })) : (_jsx(ChevronDown, { className: "h-3 w-3 text-[hsl(var(--admin-foreground-muted))]" }))] }), _jsxs("div", { className: "flex items-center gap-2", children: [!zone.isActive && (_jsx("span", { className: "admin-badge admin-badge-neutral", children: "Inactive" })), _jsxs("span", { className: "admin-row-actions", children: [_jsx("button", { type: "button", onClick: onEdit, className: "admin-btn admin-btn-ghost admin-btn-icon admin-btn-sm", "aria-label": "Edit zone", children: _jsx(Edit2, { className: "h-4 w-4" }) }), _jsx("button", { type: "button", onClick: onDelete, className: "admin-btn admin-btn-ghost admin-btn-icon admin-btn-sm", "aria-label": "Delete zone", children: _jsx(Trash2, { className: "h-4 w-4" }) })] })] })] }), isExpanded && (_jsxs("div", { className: "bg-[hsl(var(--admin-card))]", children: [zone.rates.length === 0 ? (_jsx("div", { className: "px-4 py-4 pl-12", children: _jsx(AdminEmptyState, { compact: true, description: "No shipping rates configured yet." }) })) : (_jsx("div", { className: "divide-y divide-[hsl(var(--admin-border))]", children: zone.rates.map((rate) => (_jsxs("div", { className: "flex items-center justify-between px-4 py-2 pl-12 hover:bg-[hsl(var(--admin-background-subtle))]/50 transition-colors", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("span", { className: "text-[hsl(var(--admin-foreground-muted))] text-xs", children: "\u2514\u2500" }), _jsxs("div", { children: [_jsx("span", { className: "text-sm font-medium text-[hsl(var(--admin-foreground))]", children: rate.name }), rate.description && (_jsx("span", { className: "ml-2 text-xs text-[hsl(var(--admin-foreground-muted))]", children: rate.description }))] })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("span", { className: "font-medium text-sm text-[hsl(var(--admin-foreground))]", children: formatCurrency(rate.price) }), rate.estimatedDays && (_jsxs("span", { className: "text-xs text-[hsl(var(--admin-foreground-muted))]", children: [rate.estimatedDays, " days"] })), !rate.isActive && (_jsx("span", { className: "admin-badge admin-badge-neutral", children: "Inactive" })), _jsx("button", { type: "button", onClick: () => onEditRate(rate), className: "admin-btn admin-btn-ghost admin-btn-sm", title: "Edit rate", children: _jsx(Edit2, { className: "h-3 w-3" }) }), _jsx("button", { type: "button", onClick: () => onDeleteRate(rate), className: "admin-btn admin-btn-ghost admin-btn-sm text-[hsl(var(--admin-error))]", title: "Delete rate", children: _jsx(Trash2, { className: "h-3 w-3" }) })] })] }, rate.id))) })), _jsx("div", { className: "px-4 py-2 pl-12 border-t border-[hsl(var(--admin-border))]", children: _jsxs("button", { type: "button", onClick: onAddRate, className: "flex items-center gap-2 text-xs text-[hsl(var(--admin-primary))] hover:text-[hsl(var(--admin-primary-hover))]", children: [_jsx(Plus, { className: "h-3 w-3" }), "Add rate"] }) })] }))] }));
55
58
  }
56
59
  // =============================================================================
57
60
  // Main Component
@@ -341,19 +344,17 @@ export function ShippingSettings({ className }) {
341
344
  // ---------------------------------------------------------------------------
342
345
  // Render
343
346
  // ---------------------------------------------------------------------------
344
- return (_jsxs("div", { className: `space-y-6 ${className || ''}`, children: [_jsx(AdminPageHeader, { title: "Shipping", subtitle: "Carriers, zones and rates, and whether shipping is offered at checkout." }), _jsx("div", { className: "admin-card rounded-lg p-6", children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "h-10 w-10 rounded-full bg-[hsl(var(--admin-primary))]/10 flex items-center justify-center", children: _jsx(Package, { className: "h-5 w-5 text-[hsl(var(--admin-primary))]" }) }), _jsxs("div", { children: [_jsx("h3", { className: "admin-card-title", children: "Enable Shipping" }), _jsx("p", { className: "admin-text-muted text-sm", children: "Turn off to hide shipping options at checkout" })] })] }), _jsx("button", { type: "button", role: "switch", "aria-checked": shippingEnabled, onClick: handleToggleShippingEnabled, className: `relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${shippingEnabled
345
- ? 'bg-[hsl(var(--admin-primary))]'
346
- : 'bg-[hsl(var(--admin-background-subtle))]'}`, children: _jsx("span", { className: `inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${shippingEnabled ? 'translate-x-6' : 'translate-x-1'}` }) })] }) }), shippingEnabled && (_jsxs(_Fragment, { children: [_jsxs("div", { className: "admin-card rounded-lg p-6", children: [_jsxs("div", { className: "flex items-center gap-2 mb-4", children: [_jsx(Truck, { className: "h-5 w-5 text-[hsl(var(--admin-primary))]" }), _jsx("h3", { className: "admin-card-title", children: "Shipping Method" })] }), _jsx("p", { className: "admin-text-muted text-sm mb-4", children: "Choose how shipping rates are calculated at checkout." }), _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: [_jsxs("button", { type: "button", onClick: () => setShippingMode('manual'), className: `p-4 rounded-lg border-2 text-left transition-colors ${shippingMode === 'manual'
347
+ return (_jsxs("div", { className: `space-y-6 ${className || ''}`, children: [_jsx(AdminPageHeader, { title: "Shipping", subtitle: "Carriers, zones and rates, and whether shipping is offered at checkout." }), _jsx("div", { className: "admin-card rounded-lg p-6", children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "h-10 w-10 rounded-full bg-[hsl(var(--admin-primary))]/10 flex items-center justify-center", children: _jsx(Package, { className: "h-5 w-5 text-[hsl(var(--admin-primary))]" }) }), _jsxs("div", { children: [_jsx("h3", { className: "admin-card-title", children: "Enable Shipping" }), _jsx("p", { className: "admin-text-muted text-sm", children: "Turn off to hide shipping options at checkout" })] })] }), _jsx(AdminSwitch, { checked: shippingEnabled, onChange: handleToggleShippingEnabled, "aria-label": "Enable shipping" })] }) }), shippingEnabled && (_jsxs(_Fragment, { children: [_jsxs("div", { className: "admin-card rounded-lg p-6", children: [_jsxs("div", { className: "flex items-center gap-2 mb-4", children: [_jsx(Truck, { className: "h-5 w-5 text-[hsl(var(--admin-primary))]" }), _jsx("h3", { className: "admin-card-title", children: "Shipping Method" })] }), _jsx("p", { className: "admin-text-muted text-sm mb-4", children: "Choose how shipping rates are calculated at checkout." }), _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: [_jsxs("button", { type: "button", onClick: () => setShippingMode('manual'), className: `p-4 rounded-lg border-2 text-left transition-colors ${shippingMode === 'manual'
347
348
  ? 'border-[hsl(var(--admin-primary))] bg-[hsl(var(--admin-primary-light))]'
348
349
  : 'border-[hsl(var(--admin-border))] hover:border-[hsl(var(--admin-primary))]'}`, children: [_jsxs("div", { className: "flex items-center gap-2 mb-2", children: [_jsx(Package, { className: "h-5 w-5" }), _jsx("span", { className: "font-medium", children: "Manual Rates" })] }), _jsx("p", { className: "text-sm text-[hsl(var(--admin-foreground-muted))]", children: "Configure carriers, zones, and rates manually." })] }), _jsxs("button", { type: "button", onClick: () => setShippingMode('shippo'), className: `p-4 rounded-lg border-2 text-left transition-colors ${shippingMode === 'shippo'
349
350
  ? 'border-[hsl(var(--admin-primary))] bg-[hsl(var(--admin-primary-light))]'
350
- : 'border-[hsl(var(--admin-border))] hover:border-[hsl(var(--admin-primary))]'}`, children: [_jsxs("div", { className: "flex items-center gap-2 mb-2", children: [_jsx(Plug, { className: "h-5 w-5" }), _jsx("span", { className: "font-medium", children: "Shippo (Carrier Rates)" })] }), _jsx("p", { className: "text-sm text-[hsl(var(--admin-foreground-muted))]", children: "Real-time rates from USPS, UPS, FedEx, and more." })] })] })] }), _jsxs("div", { className: "admin-card rounded-lg p-6", children: [_jsxs("div", { className: "flex items-center gap-2 mb-6", children: [_jsx(Globe, { className: "h-5 w-5 text-[hsl(var(--admin-primary))]" }), _jsx("h3", { className: "admin-card-title", children: "General Settings" })] }), _jsx("div", { className: "space-y-6", children: _jsxs("div", { children: [_jsxs("label", { className: "admin-label", children: [_jsx(MapPin, { className: "inline h-4 w-4 mr-1" }), "Shipping Countries"] }), _jsx("p", { className: "admin-text-muted text-sm mb-2", children: "Countries where you offer shipping" }), _jsx("div", { className: "flex flex-wrap gap-2 mb-3", children: shippingCountries.map((code) => (_jsx(CountryTag, { code: code, onRemove: () => handleRemoveCountry(code) }, code))) }), _jsxs("div", { className: "flex gap-2", children: [_jsx(AdminSelect, { value: countryInput, onChange: setCountryInput, placeholder: "Select a country...", options: COMMON_COUNTRIES.filter((c) => !shippingCountries.includes(c.code)).map((country) => ({
351
+ : 'border-[hsl(var(--admin-border))] hover:border-[hsl(var(--admin-primary))]'}`, children: [_jsxs("div", { className: "flex items-center gap-2 mb-2", children: [_jsx(Plug, { className: "h-5 w-5" }), _jsx("span", { className: "font-medium", children: "Shippo (Carrier Rates)" })] }), _jsx("p", { className: "text-sm text-[hsl(var(--admin-foreground-muted))]", children: "Real-time rates from USPS, UPS, FedEx, and more." })] })] })] }), _jsxs("div", { className: "admin-card rounded-lg p-6", children: [_jsxs("div", { className: "flex items-center gap-2 mb-6", children: [_jsx(Globe, { className: "h-5 w-5 text-[hsl(var(--admin-primary))]" }), _jsx("h3", { className: "admin-card-title", children: "General Settings" })] }), _jsx("div", { className: "space-y-6", children: _jsxs("div", { children: [_jsxs("label", { className: "admin-label", children: [_jsx(MapPin, { className: "inline h-4 w-4 mr-1" }), "Shipping Countries"] }), _jsx("p", { className: "admin-text-muted text-sm mb-2", children: "Countries where you offer shipping" }), _jsx("div", { className: "flex flex-wrap gap-2 mb-3", children: shippingCountries.map((code) => (_jsx(CountryTag, { code: code, onRemove: () => handleRemoveCountry(code) }, code))) }), _jsxs("div", { className: "flex gap-2", children: [_jsx(AdminSelect, { value: countryInput, onChange: setCountryInput, placeholder: "Select a country\u2026", options: COMMON_COUNTRIES.filter((c) => !shippingCountries.includes(c.code)).map((country) => ({
351
352
  value: country.code,
352
353
  label: `${country.name} (${country.code})`,
353
354
  })), className: "w-full max-w-xs" }), _jsx("button", { type: "button", onClick: handleAddCountry, disabled: !countryInput, className: "admin-btn admin-btn-secondary disabled:opacity-50", children: "Add" })] })] }) })] }), shippingMode === 'manual' && (_jsxs("div", { className: "admin-card rounded-lg p-6", children: [_jsxs("div", { className: "flex items-center justify-between mb-6", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Truck, { className: "h-5 w-5 text-[hsl(var(--admin-primary))]" }), _jsx("h3", { className: "admin-card-title", children: "Shipping Carriers" })] }), _jsxs("button", { type: "button", onClick: () => {
354
355
  setEditingCarrier(null);
355
356
  setShowCarrierForm(true);
356
- }, className: "admin-btn admin-btn-primary admin-btn-sm", children: [_jsx(Plus, { className: "h-4 w-4 mr-1" }), "Add Carrier"] })] }), _jsx("p", { className: "admin-text-muted text-sm mb-4", children: "Configure your shipping carriers, zones, and rates. Each carrier can have multiple zones, and each zone can have multiple rates." }), carriers.length === 0 ? (_jsxs("div", { className: "text-center py-8 text-[hsl(var(--admin-foreground-muted))]", children: [_jsx(Truck, { className: "h-12 w-12 mx-auto mb-3 opacity-50" }), _jsx("p", { className: "mb-2", children: "No shipping carriers configured" }), _jsx("p", { className: "text-sm", children: "Add your first carrier to start configuring shipping options" })] })) : (_jsx("div", { className: "space-y-4", children: carriers.map((carrier) => (_jsx(CarrierCard, { carrier: carrier, onEdit: () => {
357
+ }, className: "admin-btn admin-btn-primary admin-btn-sm", children: [_jsx(Plus, { className: "h-4 w-4 mr-1" }), "Add carrier"] })] }), _jsx("p", { className: "admin-text-muted text-sm mb-4", children: "Configure your shipping carriers, zones, and rates. Each carrier can have multiple zones, and each zone can have multiple rates." }), carriers.length === 0 ? (_jsx(AdminEmptyState, { icon: _jsx(Truck, {}), title: "No carriers yet", description: "Add your first carrier to start offering shipping rates." })) : (_jsx("div", { className: "space-y-4", children: carriers.map((carrier) => (_jsx(CarrierCard, { carrier: carrier, onEdit: () => {
357
358
  setEditingCarrier(carrier);
358
359
  setShowCarrierForm(true);
359
360
  }, onDelete: () => handleDeleteCarrierClick(carrier), onAddZone: () => {
@@ -368,17 +369,15 @@ export function ShippingSettings({ className }) {
368
369
  }, onEditRate: (zoneId, rate) => {
369
370
  setEditingRate({ zoneId, rate });
370
371
  setShowRateForm(true);
371
- }, onDeleteRate: handleDeleteRateClick, formatCurrency: formatCurrency }, carrier.id))) }))] })), shippingMode === 'shippo' && (_jsxs("div", { className: "space-y-6", children: [_jsxs("div", { className: "admin-card rounded-lg p-6", children: [_jsxs("div", { className: "flex items-center gap-2 mb-4", children: [_jsx(Plug, { className: "h-5 w-5 text-[hsl(var(--admin-primary))]" }), _jsx("h3", { className: "admin-card-title", children: "Shippo Connection" })] }), _jsxs("div", { className: "p-4 rounded-lg border border-[hsl(var(--admin-border))] bg-[hsl(var(--admin-card))]", children: [shippoKeyValid === true && (_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "h-10 w-10 rounded-full bg-[hsl(var(--admin-success))]/20 flex items-center justify-center", children: _jsx(Check, { className: "h-5 w-5 text-[hsl(var(--admin-success))]" }) }), _jsxs("div", { children: [_jsx("p", { className: "font-medium text-[hsl(var(--admin-foreground))]", children: "Connected" }), _jsx("p", { className: "text-sm text-[hsl(var(--admin-foreground-muted))]", children: hasStoredKey ? (_jsxs(_Fragment, { children: ["API key: ", _jsx("code", { className: "px-1 py-0.5 rounded bg-[hsl(var(--admin-background))] text-xs", children: maskedKey })] })) : ('Using environment variable') })] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [hasStoredKey && (_jsx("button", { type: "button", onClick: handleRemoveApiKey, disabled: isDeletingApiKey, className: "admin-btn admin-btn-ghost admin-btn-sm text-[hsl(var(--admin-error))] hover:bg-[hsl(var(--admin-error))]/10", children: isDeletingApiKey ? (_jsx(Loader2, { className: "h-4 w-4 animate-spin" })) : ('Remove Key') })), _jsx("button", { type: "button", onClick: handleValidateShippoKey, disabled: isValidatingShippo, className: "admin-btn admin-btn-secondary disabled:opacity-50", children: isValidatingShippo ? (_jsx(RefreshCw, { className: "h-4 w-4 animate-spin" })) : ('Re-verify') })] })] })), shippoKeyValid !== true && (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "h-10 w-10 rounded-full bg-[hsl(var(--admin-warning))]/20 flex items-center justify-center", children: isValidatingShippo ? (_jsx(Loader2, { className: "h-5 w-5 animate-spin text-[hsl(var(--admin-warning))]" })) : (_jsx(Key, { className: "h-5 w-5 text-[hsl(var(--admin-warning))]" })) }), _jsxs("div", { children: [_jsx("p", { className: "font-medium text-[hsl(var(--admin-foreground))]", children: isValidatingShippo
372
- ? 'Verifying...'
372
+ }, onDeleteRate: handleDeleteRateClick, formatCurrency: formatCurrency }, carrier.id))) }))] })), shippingMode === 'shippo' && (_jsxs("div", { className: "space-y-6", children: [_jsxs("div", { className: "admin-card rounded-lg p-6", children: [_jsxs("div", { className: "flex items-center gap-2 mb-4", children: [_jsx(Plug, { className: "h-5 w-5 text-[hsl(var(--admin-primary))]" }), _jsx("h3", { className: "admin-card-title", children: "Shippo Connection" })] }), _jsxs("div", { className: "p-4 rounded-lg border border-[hsl(var(--admin-border))] bg-[hsl(var(--admin-card))]", children: [shippoKeyValid === true && (_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "h-10 w-10 rounded-full bg-[hsl(var(--admin-success))]/20 flex items-center justify-center", children: _jsx(Check, { className: "h-5 w-5 text-[hsl(var(--admin-success))]" }) }), _jsxs("div", { children: [_jsx("p", { className: "font-medium text-[hsl(var(--admin-foreground))]", children: "Connected" }), _jsx("p", { className: "text-sm text-[hsl(var(--admin-foreground-muted))]", children: hasStoredKey ? (_jsxs(_Fragment, { children: ["API key: ", _jsx("code", { className: "px-1 py-0.5 rounded bg-[hsl(var(--admin-background))] text-xs", children: maskedKey })] })) : ('Using environment variable') })] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [hasStoredKey && (_jsx("button", { type: "button", onClick: handleRemoveApiKey, disabled: isDeletingApiKey, className: "admin-btn admin-btn-ghost admin-btn-sm text-[hsl(var(--admin-error))] hover:bg-[hsl(var(--admin-error))]/10", children: isDeletingApiKey ? (_jsx("span", { className: "admin-spinner admin-spinner-sm" })) : ('Remove key') })), _jsx("button", { type: "button", onClick: handleValidateShippoKey, disabled: isValidatingShippo, className: "admin-btn admin-btn-secondary disabled:opacity-50", children: isValidatingShippo ? (_jsx(RefreshCw, { className: "h-4 w-4 animate-spin" })) : ('Re-verify') })] })] })), shippoKeyValid !== true && (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "h-10 w-10 rounded-full bg-[hsl(var(--admin-warning))]/20 flex items-center justify-center", children: isValidatingShippo ? (_jsx("span", { className: "admin-spinner admin-spinner-sm" })) : (_jsx(Key, { className: "h-5 w-5 text-[hsl(var(--admin-warning))]" })) }), _jsxs("div", { children: [_jsx("p", { className: "font-medium text-[hsl(var(--admin-foreground))]", children: isValidatingShippo
373
+ ? 'Verifying'
373
374
  : hasStoredKey && shippoKeyValid === false
374
375
  ? 'API Key Invalid'
375
376
  : 'API Key Required' }), _jsx("p", { className: "text-sm text-[hsl(var(--admin-foreground-muted))]", children: isValidatingShippo
376
- ? 'Checking your Shippo connection...'
377
+ ? 'Checking your Shippo connection'
377
378
  : hasStoredKey && shippoKeyValid === false
378
379
  ? `Current key (${maskedKey}) is invalid. Enter a new key.`
379
- : 'Enter your Shippo API key to enable carrier rate shipping.' })] })] }), !isValidatingShippo && (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex gap-2", children: [_jsx("input", { type: "password", value: shippoApiKeyInput, onChange: (e) => setShippoApiKeyInput(e.target.value), placeholder: "shippo_live_...", className: "admin-input flex-1" }), _jsx("button", { type: "button", onClick: handleSaveShippoApiKey, disabled: isSavingApiKey || !shippoApiKeyInput.trim(), className: "admin-btn admin-btn-primary disabled:opacity-50", children: isSavingApiKey ? (_jsx(Loader2, { className: "h-4 w-4 animate-spin" })) : ('Save & Verify') })] }), _jsxs("p", { className: "text-xs text-[hsl(var(--admin-foreground-muted))]", children: ["Get your API key from", ' ', _jsxs("a", { href: "https://apps.goshippo.com/settings/api", target: "_blank", rel: "noopener noreferrer", className: "text-[hsl(var(--admin-primary))] hover:underline inline-flex items-center gap-1", children: ["Shippo Dashboard", _jsx(ExternalLink, { className: "h-3 w-3" })] })] })] }))] }))] }), _jsxs("div", { className: "flex items-center justify-between mt-4 pt-4 border-t border-[hsl(var(--admin-border))]", children: [_jsxs("div", { children: [_jsx("label", { className: "admin-label", children: "Test Mode" }), _jsx("p", { className: "admin-text-muted text-sm", children: "Use Shippo test API for development (free API calls)" })] }), _jsx("button", { type: "button", role: "switch", "aria-checked": shippoTestMode, onClick: () => setShippoTestMode(!shippoTestMode), className: `relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${shippoTestMode
380
- ? 'bg-[hsl(var(--admin-primary))]'
381
- : 'bg-[hsl(var(--admin-background-subtle))]'}`, children: _jsx("span", { className: `inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${shippoTestMode ? 'translate-x-6' : 'translate-x-1'}` }) })] })] }), _jsxs("div", { className: "admin-card rounded-lg p-6", children: [_jsxs("div", { className: "flex items-center gap-2 mb-4", children: [_jsx(MapPin, { className: "h-5 w-5 text-[hsl(var(--admin-primary))]" }), _jsx("h3", { className: "admin-card-title", children: "Ship-From Address" })] }), _jsx("p", { className: "admin-text-muted text-sm mb-4", children: "Your warehouse or fulfillment center address for shipping calculations." }), _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "shippo-name", className: "admin-label", children: "Name" }), _jsx("input", { type: "text", id: "shippo-name", value: shippoFromAddress.name, onChange: (e) => setShippoFromAddress((prev) => ({ ...prev, name: e.target.value })), className: "admin-input mt-1 w-full", placeholder: "John Smith" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "shippo-company", className: "admin-label", children: "Company (optional)" }), _jsx("input", { type: "text", id: "shippo-company", value: shippoFromAddress.company || '', onChange: (e) => setShippoFromAddress((prev) => ({ ...prev, company: e.target.value })), className: "admin-input mt-1 w-full", placeholder: "Acme Inc." })] }), _jsxs("div", { className: "md:col-span-2", children: [_jsx("label", { htmlFor: "shippo-street1", className: "admin-label", children: "Street Address" }), _jsx("input", { type: "text", id: "shippo-street1", value: shippoFromAddress.street1, onChange: (e) => setShippoFromAddress((prev) => ({ ...prev, street1: e.target.value })), className: "admin-input mt-1 w-full", placeholder: "123 Main St" })] }), _jsxs("div", { className: "md:col-span-2", children: [_jsx("label", { htmlFor: "shippo-street2", className: "admin-label", children: "Apt, Suite, etc. (optional)" }), _jsx("input", { type: "text", id: "shippo-street2", value: shippoFromAddress.street2 || '', onChange: (e) => setShippoFromAddress((prev) => ({ ...prev, street2: e.target.value })), className: "admin-input mt-1 w-full", placeholder: "Suite 100" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "shippo-city", className: "admin-label", children: "City" }), _jsx("input", { type: "text", id: "shippo-city", value: shippoFromAddress.city, onChange: (e) => setShippoFromAddress((prev) => ({ ...prev, city: e.target.value })), className: "admin-input mt-1 w-full", placeholder: "San Francisco" })] }), shippoFromAddress.country === 'US' && (_jsxs("div", { children: [_jsx("label", { htmlFor: "shippo-state", className: "admin-label", children: "State" }), _jsx(AdminSelect, { id: "shippo-state", value: shippoFromAddress.state, onChange: (value) => setShippoFromAddress((prev) => ({ ...prev, state: value })), placeholder: "Select state...", options: US_STATES.map((state) => ({
380
+ : 'Enter your Shippo API key to enable carrier rate shipping.' })] })] }), !isValidatingShippo && (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex gap-2", children: [_jsx("input", { type: "password", value: shippoApiKeyInput, onChange: (e) => setShippoApiKeyInput(e.target.value), placeholder: "shippo_live_\u2026", className: "admin-input flex-1" }), _jsx("button", { type: "button", onClick: handleSaveShippoApiKey, disabled: isSavingApiKey || !shippoApiKeyInput.trim(), className: "admin-btn admin-btn-primary disabled:opacity-50", children: isSavingApiKey ? (_jsx("span", { className: "admin-spinner admin-spinner-sm" })) : ('Save & Verify') })] }), _jsxs("p", { className: "text-xs text-[hsl(var(--admin-foreground-muted))]", children: ["Get your API key from", ' ', _jsxs("a", { href: "https://apps.goshippo.com/settings/api", target: "_blank", rel: "noopener noreferrer", className: "text-[hsl(var(--admin-primary))] hover:underline inline-flex items-center gap-1", children: ["Shippo Dashboard", _jsx(ExternalLink, { className: "h-3 w-3" })] })] })] }))] }))] }), _jsxs("div", { className: "flex items-center justify-between mt-4 pt-4 border-t border-[hsl(var(--admin-border))]", children: [_jsxs("div", { children: [_jsx("label", { className: "admin-label", children: "Test Mode" }), _jsx("p", { className: "admin-text-muted text-sm", children: "Use Shippo test API for development (free API calls)" })] }), _jsx(AdminSwitch, { checked: shippoTestMode, onChange: setShippoTestMode, "aria-label": "Test mode" })] })] }), _jsxs("div", { className: "admin-card rounded-lg p-6", children: [_jsxs("div", { className: "flex items-center gap-2 mb-4", children: [_jsx(MapPin, { className: "h-5 w-5 text-[hsl(var(--admin-primary))]" }), _jsx("h3", { className: "admin-card-title", children: "Ship-From Address" })] }), _jsx("p", { className: "admin-text-muted text-sm mb-4", children: "Your warehouse or fulfillment center address for shipping calculations." }), _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "shippo-name", className: "admin-label", children: "Name" }), _jsx("input", { type: "text", id: "shippo-name", value: shippoFromAddress.name, onChange: (e) => setShippoFromAddress((prev) => ({ ...prev, name: e.target.value })), className: "admin-input mt-1 w-full", placeholder: "John Smith" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "shippo-company", className: "admin-label", children: "Company (optional)" }), _jsx("input", { type: "text", id: "shippo-company", value: shippoFromAddress.company || '', onChange: (e) => setShippoFromAddress((prev) => ({ ...prev, company: e.target.value })), className: "admin-input mt-1 w-full", placeholder: "Acme Inc." })] }), _jsxs("div", { className: "md:col-span-2", children: [_jsx("label", { htmlFor: "shippo-street1", className: "admin-label", children: "Street Address" }), _jsx("input", { type: "text", id: "shippo-street1", value: shippoFromAddress.street1, onChange: (e) => setShippoFromAddress((prev) => ({ ...prev, street1: e.target.value })), className: "admin-input mt-1 w-full", placeholder: "123 Main St" })] }), _jsxs("div", { className: "md:col-span-2", children: [_jsx("label", { htmlFor: "shippo-street2", className: "admin-label", children: "Apt, Suite, etc. (optional)" }), _jsx("input", { type: "text", id: "shippo-street2", value: shippoFromAddress.street2 || '', onChange: (e) => setShippoFromAddress((prev) => ({ ...prev, street2: e.target.value })), className: "admin-input mt-1 w-full", placeholder: "Suite 100" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "shippo-city", className: "admin-label", children: "City" }), _jsx("input", { type: "text", id: "shippo-city", value: shippoFromAddress.city, onChange: (e) => setShippoFromAddress((prev) => ({ ...prev, city: e.target.value })), className: "admin-input mt-1 w-full", placeholder: "San Francisco" })] }), shippoFromAddress.country === 'US' && (_jsxs("div", { children: [_jsx("label", { htmlFor: "shippo-state", className: "admin-label", children: "State" }), _jsx(AdminSelect, { id: "shippo-state", value: shippoFromAddress.state, onChange: (value) => setShippoFromAddress((prev) => ({ ...prev, state: value })), placeholder: "Select state\u2026", options: US_STATES.map((state) => ({
382
381
  value: state.code,
383
382
  label: state.name,
384
383
  })), className: "mt-1 w-full" })] })), _jsxs("div", { children: [_jsx("label", { htmlFor: "shippo-zip", className: "admin-label", children: "ZIP Code" }), _jsx("input", { type: "text", id: "shippo-zip", value: shippoFromAddress.zip, onChange: (e) => setShippoFromAddress((prev) => ({ ...prev, zip: e.target.value })), className: "admin-input mt-1 w-full", placeholder: "94102" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "shippo-country", className: "admin-label", children: "Country" }), _jsx(AdminSelect, { id: "shippo-country", value: shippoFromAddress.country, onChange: (value) => setShippoFromAddress((prev) => ({ ...prev, country: value })), options: COMMON_COUNTRIES.map((country) => ({
@@ -413,7 +412,7 @@ export function ShippingSettings({ className }) {
413
412
  setShowRateForm(false);
414
413
  setEditingRate(null);
415
414
  fetchData();
416
- }, currencySymbol: currencySymbol })), _jsx(DeleteConfirmDialog, { isOpen: !!deleteTarget, title: `Delete ${deleteTarget?.type === 'carrier' ? 'Carrier' : deleteTarget?.type === 'zone' ? 'Zone' : 'Rate'}`, itemName: deleteTarget?.name || '', itemType: deleteTarget?.type === 'carrier'
415
+ }, currencySymbol: currencySymbol })), _jsx(DeleteConfirmDialog, { isOpen: !!deleteTarget, title: `Delete ${deleteTarget?.type === 'carrier' ? 'carrier' : deleteTarget?.type === 'zone' ? 'zone' : 'rate'}`, itemName: deleteTarget?.name || '', itemType: deleteTarget?.type === 'carrier'
417
416
  ? 'carrier'
418
417
  : deleteTarget?.type === 'zone'
419
418
  ? 'zone'
@@ -468,9 +467,7 @@ function CarrierFormModal({ carrier, onClose, onSuccess, }) {
468
467
  }
469
468
  onSuccess();
470
469
  };
471
- return (_jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center", children: [_jsx("div", { className: "absolute inset-0 bg-black/50", onClick: onClose }), _jsx("div", { className: "relative bg-[hsl(var(--admin-card))] rounded-lg shadow-xl w-full max-w-md mx-4 max-h-[90vh] overflow-y-auto", children: _jsxs("form", { onSubmit: handleSubmit, children: [_jsxs("div", { className: "p-6", children: [_jsx("h3", { className: "admin-card-title mb-4", children: isEdit ? 'Edit Shipping Carrier' : 'Add Shipping Carrier' }), error && (_jsx("div", { className: "admin-alert admin-alert-error mb-4", children: _jsx("div", { className: "admin-alert-description", children: error }) })), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "carrierName", className: "admin-label admin-label-required", children: "Carrier Name" }), _jsx("input", { type: "text", id: "carrierName", value: name, onChange: (e) => handleNameChange(e.target.value), className: "admin-input mt-1 w-full", placeholder: "e.g., USPS, UPS, FedEx", required: true })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "carrierCode", className: "admin-label admin-label-required", children: "Carrier Code" }), _jsx("input", { type: "text", id: "carrierCode", value: code, onChange: (e) => setCode(e.target.value.toLowerCase().replace(/[^a-z0-9-]/g, '')), className: "admin-input mt-1 w-full", placeholder: "e.g., usps, ups, fedex", required: true, maxLength: 50 }), _jsx("p", { className: "admin-helper-text mt-1", children: "Unique identifier (lowercase, letters, numbers, hyphens only)" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "carrierDescription", className: "admin-label", children: "Description" }), _jsx("input", { type: "text", id: "carrierDescription", value: description, onChange: (e) => setDescription(e.target.value), className: "admin-input mt-1 w-full", placeholder: "e.g., United States Postal Service", maxLength: 500 })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("label", { className: "admin-label", children: "Active" }), _jsx("button", { type: "button", role: "switch", "aria-checked": isActive, onClick: () => setIsActive(!isActive), className: `relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${isActive
472
- ? 'bg-[hsl(var(--admin-primary))]'
473
- : 'bg-[hsl(var(--admin-background-subtle))]'}`, children: _jsx("span", { className: `inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${isActive ? 'translate-x-6' : 'translate-x-1'}` }) })] })] })] }), _jsxs("div", { className: "flex justify-end gap-3 p-6 border-t border-[hsl(var(--admin-border))]", children: [_jsx("button", { type: "button", onClick: onClose, className: "admin-btn admin-btn-secondary", children: "Cancel" }), _jsx("button", { type: "submit", disabled: isLoading || !name.trim() || !code.trim(), className: "admin-btn admin-btn-primary disabled:opacity-50", children: isLoading ? 'Saving...' : isEdit ? 'Update Carrier' : 'Create Carrier' })] })] }) })] }));
470
+ return (_jsx(AdminModal, { open: true, onClose: onClose, busy: isLoading, width: "md", title: isEdit ? 'Edit shipping carrier' : 'Add shipping carrier', showClose: true, footer: _jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: onClose, disabled: isLoading, className: "admin-btn admin-btn-secondary", children: "Cancel" }), _jsx("button", { type: "submit", form: "carrier-form", disabled: isLoading || !name.trim() || !code.trim(), className: "admin-btn admin-btn-primary", children: isLoading ? 'Saving…' : isEdit ? 'Update carrier' : 'Create carrier' })] }), children: _jsx("form", { id: "carrier-form", onSubmit: handleSubmit, children: _jsxs("div", { className: "admin-modal-body", children: [error && (_jsx("div", { className: "admin-alert admin-alert-error mb-4", children: _jsx("div", { className: "admin-alert-description", children: error }) })), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "carrierName", className: "admin-label admin-label-required", children: "Carrier Name" }), _jsx("input", { type: "text", id: "carrierName", value: name, onChange: (e) => handleNameChange(e.target.value), className: "admin-input mt-1 w-full", placeholder: "e.g., USPS, UPS, FedEx", required: true })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "carrierCode", className: "admin-label admin-label-required", children: "Carrier Code" }), _jsx("input", { type: "text", id: "carrierCode", value: code, onChange: (e) => setCode(e.target.value.toLowerCase().replace(/[^a-z0-9-]/g, '')), className: "admin-input mt-1 w-full", placeholder: "e.g., usps, ups, fedex", required: true, maxLength: 50 }), _jsx("p", { className: "admin-helper-text mt-1", children: "Unique identifier (lowercase, letters, numbers, hyphens only)" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "carrierDescription", className: "admin-label", children: "Description" }), _jsx("input", { type: "text", id: "carrierDescription", value: description, onChange: (e) => setDescription(e.target.value), className: "admin-input mt-1 w-full", placeholder: "e.g., United States Postal Service", maxLength: 500 })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("label", { className: "admin-label", children: "Active" }), _jsx(AdminSwitch, { checked: isActive, onChange: setIsActive, "aria-label": "Active" })] })] })] }) }) }));
474
471
  }
475
472
  // =============================================================================
476
473
  // Zone Form Modal (UPDATED - requires carrierId)
@@ -519,14 +516,10 @@ function ZoneFormModal({ carrierId, zone, onClose, onSuccess, }) {
519
516
  setCountryInput('');
520
517
  }
521
518
  };
522
- return (_jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center", children: [_jsx("div", { className: "absolute inset-0 bg-black/50", onClick: onClose }), _jsx("div", { className: "relative bg-[hsl(var(--admin-card))] rounded-lg shadow-xl w-full max-w-md mx-4 max-h-[90vh] overflow-y-auto", children: _jsxs("form", { onSubmit: handleSubmit, children: [_jsxs("div", { className: "p-6", children: [_jsx("h3", { className: "admin-card-title mb-4", children: isEdit ? 'Edit Shipping Zone' : 'Add Shipping Zone' }), error && (_jsx("div", { className: "admin-alert admin-alert-error mb-4", children: _jsx("div", { className: "admin-alert-description", children: error }) })), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "zoneName", className: "admin-label admin-label-required", children: "Zone Name" }), _jsx("input", { type: "text", id: "zoneName", value: name, onChange: (e) => setName(e.target.value), className: "admin-input mt-1 w-full", placeholder: "e.g., Domestic, International", required: true })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("label", { className: "admin-label", children: "All Countries" }), _jsx("p", { className: "admin-text-muted text-sm", children: "Apply to all countries not covered by other zones" })] }), _jsx("button", { type: "button", role: "switch", "aria-checked": isAllCountries, onClick: () => setIsAllCountries(!isAllCountries), className: `relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${isAllCountries
523
- ? 'bg-[hsl(var(--admin-primary))]'
524
- : 'bg-[hsl(var(--admin-background-subtle))]'}`, children: _jsx("span", { className: `inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${isAllCountries ? 'translate-x-6' : 'translate-x-1'}` }) })] }), !isAllCountries && (_jsxs("div", { children: [_jsx("label", { className: "admin-label", children: "Countries" }), _jsx("div", { className: "flex flex-wrap gap-2 mb-2 mt-1", children: countries.map((code) => (_jsx(CountryTag, { code: code, onRemove: () => setCountries((prev) => prev.filter((c) => c !== code)) }, code))) }), _jsxs("div", { className: "flex gap-2", children: [_jsx(AdminSelect, { value: countryInput, onChange: setCountryInput, placeholder: "Select country...", options: COMMON_COUNTRIES.filter((c) => !countries.includes(c.code)).map((country) => ({
525
- value: country.code,
526
- label: country.name,
527
- })), className: "flex-1" }), _jsx("button", { type: "button", onClick: handleAddCountry, disabled: !countryInput, className: "admin-btn admin-btn-secondary disabled:opacity-50", children: "Add" })] })] })), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("label", { className: "admin-label", children: "Active" }), _jsx("button", { type: "button", role: "switch", "aria-checked": isActive, onClick: () => setIsActive(!isActive), className: `relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${isActive
528
- ? 'bg-[hsl(var(--admin-primary))]'
529
- : 'bg-[hsl(var(--admin-background-subtle))]'}`, children: _jsx("span", { className: `inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${isActive ? 'translate-x-6' : 'translate-x-1'}` }) })] })] })] }), _jsxs("div", { className: "flex justify-end gap-3 p-6 border-t border-[hsl(var(--admin-border))]", children: [_jsx("button", { type: "button", onClick: onClose, className: "admin-btn admin-btn-secondary", children: "Cancel" }), _jsx("button", { type: "submit", disabled: isLoading || !name.trim(), className: "admin-btn admin-btn-primary disabled:opacity-50", children: isLoading ? 'Saving...' : isEdit ? 'Update Zone' : 'Create Zone' })] })] }) })] }));
519
+ return (_jsx(AdminModal, { open: true, onClose: onClose, busy: isLoading, width: "md", title: isEdit ? 'Edit shipping zone' : 'Add shipping zone', showClose: true, footer: _jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: onClose, disabled: isLoading, className: "admin-btn admin-btn-secondary", children: "Cancel" }), _jsx("button", { type: "submit", form: "shipping-zone-form", disabled: isLoading || !name.trim(), className: "admin-btn admin-btn-primary", children: isLoading ? 'Saving…' : isEdit ? 'Update zone' : 'Create zone' })] }), children: _jsx("form", { id: "shipping-zone-form", onSubmit: handleSubmit, children: _jsxs("div", { className: "admin-modal-body", children: [error && (_jsx("div", { className: "admin-alert admin-alert-error mb-4", children: _jsx("div", { className: "admin-alert-description", children: error }) })), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "zoneName", className: "admin-label admin-label-required", children: "Zone Name" }), _jsx("input", { type: "text", id: "zoneName", value: name, onChange: (e) => setName(e.target.value), className: "admin-input mt-1 w-full", placeholder: "e.g., Domestic, International", required: true })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("label", { className: "admin-label", children: "All Countries" }), _jsx("p", { className: "admin-text-muted text-sm", children: "Apply to all countries not covered by other zones" })] }), _jsx(AdminSwitch, { checked: isAllCountries, onChange: setIsAllCountries, "aria-label": "All countries" })] }), !isAllCountries && (_jsxs("div", { children: [_jsx("label", { className: "admin-label", children: "Countries" }), _jsx("div", { className: "flex flex-wrap gap-2 mb-2 mt-1", children: countries.map((code) => (_jsx(CountryTag, { code: code, onRemove: () => setCountries((prev) => prev.filter((c) => c !== code)) }, code))) }), _jsxs("div", { className: "flex gap-2", children: [_jsx(AdminSelect, { value: countryInput, onChange: setCountryInput, placeholder: "Select country\u2026", options: COMMON_COUNTRIES.filter((c) => !countries.includes(c.code)).map((country) => ({
520
+ value: country.code,
521
+ label: country.name,
522
+ })), className: "flex-1" }), _jsx("button", { type: "button", onClick: handleAddCountry, disabled: !countryInput, className: "admin-btn admin-btn-secondary disabled:opacity-50", children: "Add" })] })] })), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("label", { className: "admin-label", children: "Active" }), _jsx(AdminSwitch, { checked: isActive, onChange: setIsActive, "aria-label": "Active" })] })] })] }) }) }));
530
523
  }
531
524
  // =============================================================================
532
525
  // Rate Form Modal
@@ -590,10 +583,8 @@ function RateFormModal({ zoneId, rate, onClose, onSuccess, currencySymbol, }) {
590
583
  }
591
584
  onSuccess();
592
585
  };
593
- return (_jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center", children: [_jsx("div", { className: "absolute inset-0 bg-black/50", onClick: onClose }), _jsx("div", { className: "relative bg-[hsl(var(--admin-card))] rounded-lg shadow-xl w-full max-w-md mx-4 max-h-[90vh] overflow-y-auto", children: _jsxs("form", { onSubmit: handleSubmit, children: [_jsxs("div", { className: "p-6", children: [_jsx("h3", { className: "admin-card-title mb-4", children: isEdit ? 'Edit Shipping Rate' : 'Add Shipping Rate' }), error && (_jsx("div", { className: "admin-alert admin-alert-error mb-4", children: _jsx("div", { className: "admin-alert-description", children: error }) })), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { children: [_jsx("label", { className: "admin-label", children: "Rate type" }), _jsxs("div", { className: "mt-1 grid grid-cols-2 gap-2", children: [_jsx("button", { type: "button", onClick: () => selectRateType(false), className: `admin-btn ${!isFree ? 'admin-btn-primary' : 'admin-btn-secondary'}`, children: "Paid rate" }), _jsx("button", { type: "button", onClick: () => selectRateType(true), className: `admin-btn ${isFree ? 'admin-btn-primary' : 'admin-btn-secondary'}`, children: "Free shipping" })] })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "rateName", className: "admin-label admin-label-required", children: "Rate Name" }), _jsx("input", { type: "text", id: "rateName", value: name, onChange: (e) => setName(e.target.value), className: "admin-input mt-1 w-full", placeholder: "e.g., Standard Shipping", required: true })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "rateDescription", className: "admin-label", children: "Description" }), _jsx("input", { type: "text", id: "rateDescription", value: description, onChange: (e) => setDescription(e.target.value), className: "admin-input mt-1 w-full", placeholder: "e.g., Delivery in 5-7 business days" })] }), isFree ? (_jsxs("div", { children: [_jsx("label", { className: "admin-label", children: "Price" }), _jsx("div", { className: "admin-input mt-1 flex items-center text-[hsl(var(--admin-foreground-muted))]", children: "Free \u2014 no shipping charge to the customer" })] })) : (_jsxs("div", { children: [_jsx("label", { htmlFor: "ratePrice", className: "admin-label admin-label-required", children: "Price" }), _jsxs("div", { className: "admin-input-with-addon mt-1", children: [_jsx("span", { className: "admin-input-addon-left", children: currencySymbol }), _jsx("input", { type: "number", id: "ratePrice", value: price, onChange: (e) => setPrice(e.target.value), min: "0", step: "0.01", className: "admin-input w-full pl-7", placeholder: "0.00", required: true })] })] })), _jsxs("div", { children: [_jsx("label", { htmlFor: "estimatedDays", className: "admin-label", children: "Estimated Delivery (days)" }), _jsx("input", { type: "text", id: "estimatedDays", value: estimatedDays, onChange: (e) => setEstimatedDays(e.target.value), className: "admin-input mt-1 w-full", placeholder: "e.g., 3-5" }), _jsx("p", { className: "admin-helper-text mt-1", children: "Format: single number (5) or range (3-5)" })] }), _jsxs("div", { className: "grid grid-cols-2 gap-4", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "minOrderAmount", className: "admin-label", children: isFree ? 'Free above' : 'Min Order Amount' }), _jsxs("div", { className: "admin-input-with-addon mt-1", children: [_jsx("span", { className: "admin-input-addon-left", children: currencySymbol }), _jsx("input", { type: "number", id: "minOrderAmount", value: minOrderAmount, onChange: (e) => setMinOrderAmount(e.target.value), min: "0", step: "0.01", className: "admin-input w-full pl-7", placeholder: "0.00" })] })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "maxOrderAmount", className: "admin-label", children: "Max Order Amount" }), _jsxs("div", { className: "admin-input-with-addon mt-1", children: [_jsx("span", { className: "admin-input-addon-left", children: currencySymbol }), _jsx("input", { type: "number", id: "maxOrderAmount", value: maxOrderAmount, onChange: (e) => setMaxOrderAmount(e.target.value), min: "0", step: "0.01", className: "admin-input w-full pl-7", placeholder: "No limit" })] })] })] }), _jsx("p", { className: "admin-helper-text", children: isFree
594
- ? 'Set a minimum order for free shipping, or leave both blank to always ship free.'
595
- : 'Leave empty for no restrictions' }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("label", { className: "admin-label", children: "Active" }), _jsx("button", { type: "button", role: "switch", "aria-checked": isActive, onClick: () => setIsActive(!isActive), className: `relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${isActive
596
- ? 'bg-[hsl(var(--admin-primary))]'
597
- : 'bg-[hsl(var(--admin-background-subtle))]'}`, children: _jsx("span", { className: `inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${isActive ? 'translate-x-6' : 'translate-x-1'}` }) })] })] }), _jsx(GroupVisibilityPicker, { value: visibleToGroups, onChange: setVisibleToGroups, noun: "shipping rate" })] }), _jsxs("div", { className: "flex justify-end gap-3 p-6 border-t border-[hsl(var(--admin-border))]", children: [_jsx("button", { type: "button", onClick: onClose, className: "admin-btn admin-btn-secondary", children: "Cancel" }), _jsx("button", { type: "submit", disabled: isLoading || !name.trim() || (!isFree && !price), className: "admin-btn admin-btn-primary disabled:opacity-50", children: isLoading ? 'Saving...' : isEdit ? 'Update Rate' : 'Create Rate' })] })] }) })] }));
586
+ return (_jsx(AdminModal, { open: true, onClose: onClose, busy: isLoading, width: "md", title: isEdit ? 'Edit shipping rate' : 'Add shipping rate', showClose: true, footer: _jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: onClose, disabled: isLoading, className: "admin-btn admin-btn-secondary", children: "Cancel" }), _jsx("button", { type: "submit", form: "shipping-rate-form", disabled: isLoading || !name.trim() || (!isFree && !price), className: "admin-btn admin-btn-primary", children: isLoading ? 'Saving…' : isEdit ? 'Update rate' : 'Create rate' })] }), children: _jsx("form", { id: "shipping-rate-form", onSubmit: handleSubmit, children: _jsxs("div", { className: "admin-modal-body", children: [error && (_jsx("div", { className: "admin-alert admin-alert-error mb-4", children: _jsx("div", { className: "admin-alert-description", children: error }) })), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { children: [_jsx("label", { className: "admin-label", children: "Rate type" }), _jsxs("div", { className: "mt-1 grid grid-cols-2 gap-2", children: [_jsx("button", { type: "button", onClick: () => selectRateType(false), className: `admin-btn ${!isFree ? 'admin-btn-primary' : 'admin-btn-secondary'}`, children: "Paid rate" }), _jsx("button", { type: "button", onClick: () => selectRateType(true), className: `admin-btn ${isFree ? 'admin-btn-primary' : 'admin-btn-secondary'}`, children: "Free shipping" })] })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "rateName", className: "admin-label admin-label-required", children: "Rate Name" }), _jsx("input", { type: "text", id: "rateName", value: name, onChange: (e) => setName(e.target.value), className: "admin-input mt-1 w-full", placeholder: "e.g., Standard Shipping", required: true })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "rateDescription", className: "admin-label", children: "Description" }), _jsx("input", { type: "text", id: "rateDescription", value: description, onChange: (e) => setDescription(e.target.value), className: "admin-input mt-1 w-full", placeholder: "e.g., Delivery in 5-7 business days" })] }), isFree ? (_jsxs("div", { children: [_jsx("label", { className: "admin-label", children: "Price" }), _jsx("div", { className: "admin-input mt-1 flex items-center text-[hsl(var(--admin-foreground-muted))]", children: "Free \u2014 no shipping charge to the customer" })] })) : (_jsxs("div", { children: [_jsx("label", { htmlFor: "ratePrice", className: "admin-label admin-label-required", children: "Price" }), _jsxs("div", { className: "admin-input-with-addon mt-1", children: [_jsx("span", { className: "admin-input-addon-left", children: currencySymbol }), _jsx("input", { type: "number", id: "ratePrice", value: price, onChange: (e) => setPrice(e.target.value), min: "0", step: "0.01", className: "admin-input w-full pl-7", placeholder: "0.00", required: true })] })] })), _jsxs("div", { children: [_jsx("label", { htmlFor: "estimatedDays", className: "admin-label", children: "Estimated Delivery (days)" }), _jsx("input", { type: "text", id: "estimatedDays", value: estimatedDays, onChange: (e) => setEstimatedDays(e.target.value), className: "admin-input mt-1 w-full", placeholder: "e.g., 3-5" }), _jsx("p", { className: "admin-helper-text mt-1", children: "Format: single number (5) or range (3-5)" })] }), _jsxs("div", { className: "grid grid-cols-2 gap-4", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "minOrderAmount", className: "admin-label", children: isFree ? 'Free above' : 'Min Order Amount' }), _jsxs("div", { className: "admin-input-with-addon mt-1", children: [_jsx("span", { className: "admin-input-addon-left", children: currencySymbol }), _jsx("input", { type: "number", id: "minOrderAmount", value: minOrderAmount, onChange: (e) => setMinOrderAmount(e.target.value), min: "0", step: "0.01", className: "admin-input w-full pl-7", placeholder: "0.00" })] })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "maxOrderAmount", className: "admin-label", children: "Max Order Amount" }), _jsxs("div", { className: "admin-input-with-addon mt-1", children: [_jsx("span", { className: "admin-input-addon-left", children: currencySymbol }), _jsx("input", { type: "number", id: "maxOrderAmount", value: maxOrderAmount, onChange: (e) => setMaxOrderAmount(e.target.value), min: "0", step: "0.01", className: "admin-input w-full pl-7", placeholder: "No limit" })] })] })] }), _jsx("p", { className: "admin-helper-text", children: isFree
587
+ ? 'Set a minimum order for free shipping, or leave both blank to always ship free.'
588
+ : 'Leave empty for no restrictions' }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("label", { className: "admin-label", children: "Active" }), _jsx(AdminSwitch, { checked: isActive, onChange: setIsActive, "aria-label": "Active" })] })] }), _jsx(GroupVisibilityPicker, { value: visibleToGroups, onChange: setVisibleToGroups, noun: "shipping rate" })] }) }) }));
598
589
  }
599
590
  //# sourceMappingURL=ShippingSettings.js.map