@rovela-ai/sdk 0.3.22 → 0.3.27

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 (113) hide show
  1. package/dist/admin/api/index.d.ts +4 -0
  2. package/dist/admin/api/index.d.ts.map +1 -1
  3. package/dist/admin/api/index.js +6 -0
  4. package/dist/admin/api/index.js.map +1 -1
  5. package/dist/admin/api/products-bulk.d.ts +38 -0
  6. package/dist/admin/api/products-bulk.d.ts.map +1 -0
  7. package/dist/admin/api/products-bulk.js +135 -0
  8. package/dist/admin/api/products-bulk.js.map +1 -0
  9. package/dist/admin/api/products-stats.d.ts +34 -0
  10. package/dist/admin/api/products-stats.d.ts.map +1 -0
  11. package/dist/admin/api/products-stats.js +43 -0
  12. package/dist/admin/api/products-stats.js.map +1 -0
  13. package/dist/admin/api/products.d.ts.map +1 -1
  14. package/dist/admin/api/products.js +42 -5
  15. package/dist/admin/api/products.js.map +1 -1
  16. package/dist/admin/api/setup-guide.d.ts +78 -0
  17. package/dist/admin/api/setup-guide.d.ts.map +1 -0
  18. package/dist/admin/api/setup-guide.js +218 -0
  19. package/dist/admin/api/setup-guide.js.map +1 -0
  20. package/dist/admin/api/stats.d.ts +3 -0
  21. package/dist/admin/api/stats.d.ts.map +1 -1
  22. package/dist/admin/api/stats.js +20 -5
  23. package/dist/admin/api/stats.js.map +1 -1
  24. package/dist/admin/components/AdminLayout.d.ts.map +1 -1
  25. package/dist/admin/components/AdminLayout.js +5 -2
  26. package/dist/admin/components/AdminLayout.js.map +1 -1
  27. package/dist/admin/components/AdminNav.d.ts.map +1 -1
  28. package/dist/admin/components/AdminNav.js +13 -0
  29. package/dist/admin/components/AdminNav.js.map +1 -1
  30. package/dist/admin/components/LowStockAlert.d.ts.map +1 -1
  31. package/dist/admin/components/LowStockAlert.js +1 -1
  32. package/dist/admin/components/LowStockAlert.js.map +1 -1
  33. package/dist/admin/components/OrderStatusChart.d.ts.map +1 -1
  34. package/dist/admin/components/OrderStatusChart.js +7 -1
  35. package/dist/admin/components/OrderStatusChart.js.map +1 -1
  36. package/dist/admin/components/PeriodSelector.d.ts +9 -0
  37. package/dist/admin/components/PeriodSelector.d.ts.map +1 -0
  38. package/dist/admin/components/PeriodSelector.js +19 -0
  39. package/dist/admin/components/PeriodSelector.js.map +1 -0
  40. package/dist/admin/components/PrimaryMetricsRow.d.ts +11 -0
  41. package/dist/admin/components/PrimaryMetricsRow.d.ts.map +1 -0
  42. package/dist/admin/components/PrimaryMetricsRow.js +73 -0
  43. package/dist/admin/components/PrimaryMetricsRow.js.map +1 -0
  44. package/dist/admin/components/ProductTable.d.ts +2 -1
  45. package/dist/admin/components/ProductTable.d.ts.map +1 -1
  46. package/dist/admin/components/ProductTable.js +284 -33
  47. package/dist/admin/components/ProductTable.js.map +1 -1
  48. package/dist/admin/components/RevenueChart.d.ts.map +1 -1
  49. package/dist/admin/components/RevenueChart.js +4 -1
  50. package/dist/admin/components/RevenueChart.js.map +1 -1
  51. package/dist/admin/components/SecondaryMetricsRow.d.ts +14 -0
  52. package/dist/admin/components/SecondaryMetricsRow.d.ts.map +1 -0
  53. package/dist/admin/components/SecondaryMetricsRow.js +45 -0
  54. package/dist/admin/components/SecondaryMetricsRow.js.map +1 -0
  55. package/dist/admin/components/SetupGuide.d.ts +4 -0
  56. package/dist/admin/components/SetupGuide.d.ts.map +1 -0
  57. package/dist/admin/components/SetupGuide.js +238 -0
  58. package/dist/admin/components/SetupGuide.js.map +1 -0
  59. package/dist/admin/components/index.d.ts +7 -0
  60. package/dist/admin/components/index.d.ts.map +1 -1
  61. package/dist/admin/components/index.js +4 -0
  62. package/dist/admin/components/index.js.map +1 -1
  63. package/dist/admin/hooks/index.d.ts +3 -0
  64. package/dist/admin/hooks/index.d.ts.map +1 -1
  65. package/dist/admin/hooks/index.js +2 -0
  66. package/dist/admin/hooks/index.js.map +1 -1
  67. package/dist/admin/hooks/useAdminProductMetrics.d.ts +3 -0
  68. package/dist/admin/hooks/useAdminProductMetrics.d.ts.map +1 -0
  69. package/dist/admin/hooks/useAdminProductMetrics.js +32 -0
  70. package/dist/admin/hooks/useAdminProductMetrics.js.map +1 -0
  71. package/dist/admin/hooks/useAdminProducts.d.ts.map +1 -1
  72. package/dist/admin/hooks/useAdminProducts.js +19 -0
  73. package/dist/admin/hooks/useAdminProducts.js.map +1 -1
  74. package/dist/admin/hooks/useAdminStats.d.ts +7 -1
  75. package/dist/admin/hooks/useAdminStats.d.ts.map +1 -1
  76. package/dist/admin/hooks/useAdminStats.js +31 -2
  77. package/dist/admin/hooks/useAdminStats.js.map +1 -1
  78. package/dist/admin/hooks/useSetupGuide.d.ts +45 -0
  79. package/dist/admin/hooks/useSetupGuide.d.ts.map +1 -0
  80. package/dist/admin/hooks/useSetupGuide.js +57 -0
  81. package/dist/admin/hooks/useSetupGuide.js.map +1 -0
  82. package/dist/admin/index.d.ts +5 -5
  83. package/dist/admin/index.d.ts.map +1 -1
  84. package/dist/admin/index.js +5 -3
  85. package/dist/admin/index.js.map +1 -1
  86. package/dist/admin/server/admin-session.d.ts +37 -0
  87. package/dist/admin/server/admin-session.d.ts.map +1 -1
  88. package/dist/admin/server/admin-session.js +43 -0
  89. package/dist/admin/server/admin-session.js.map +1 -1
  90. package/dist/admin/server/index.d.ts +1 -1
  91. package/dist/admin/server/index.d.ts.map +1 -1
  92. package/dist/admin/server/index.js +1 -1
  93. package/dist/admin/server/index.js.map +1 -1
  94. package/dist/admin/styles/admin-theme.css +599 -8
  95. package/dist/admin/types.d.ts +108 -0
  96. package/dist/admin/types.d.ts.map +1 -1
  97. package/dist/core/db/index.d.ts +2 -2
  98. package/dist/core/db/index.d.ts.map +1 -1
  99. package/dist/core/db/index.js +3 -1
  100. package/dist/core/db/index.js.map +1 -1
  101. package/dist/core/db/queries.d.ts +190 -26
  102. package/dist/core/db/queries.d.ts.map +1 -1
  103. package/dist/core/db/queries.js +394 -10
  104. package/dist/core/db/queries.js.map +1 -1
  105. package/dist/core/db/schema.d.ts +34 -3
  106. package/dist/core/db/schema.d.ts.map +1 -1
  107. package/dist/core/db/schema.js +19 -1
  108. package/dist/core/db/schema.js.map +1 -1
  109. package/dist/core/server/index.d.ts +2 -1
  110. package/dist/core/server/index.d.ts.map +1 -1
  111. package/dist/core/server/index.js +3 -1
  112. package/dist/core/server/index.js.map +1 -1
  113. package/package.json +9 -1
@@ -0,0 +1,73 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * @rovela/sdk/admin/components/PrimaryMetricsRow
5
+ *
6
+ * Four primary metric cards with period-vs-prior-period deltas. Drives the
7
+ * top-of-dashboard KPI row. The four cards are the merchant's daily-watched
8
+ * numbers:
9
+ *
10
+ * - Revenue
11
+ * - Orders
12
+ * - AOV (average order value)
13
+ * - Refund rate
14
+ *
15
+ * Customers + Products live in the secondary row — they're context numbers,
16
+ * not action drivers. Best seller lives in the secondary row too because
17
+ * its shape (a name) doesn't fit the delta-pill rhythm.
18
+ *
19
+ * Refund rate is the only metric where DOWN is good. The delta badge is
20
+ * inverted for refund rate so a falling refund rate shows green.
21
+ */
22
+ import { ArrowDownRight, ArrowUpRight, DollarSign, ShoppingBag, Wallet, AlertTriangle } from 'lucide-react';
23
+ // =============================================================================
24
+ // Delta Badge
25
+ // =============================================================================
26
+ function formatDelta(decimal) {
27
+ const pct = decimal * 100;
28
+ // 0.0% reads as noise; clamp to one decimal then trim trailing zero.
29
+ const rounded = Math.round(Math.abs(pct) * 10) / 10;
30
+ return `${rounded.toFixed(1).replace(/\.0$/, '')}%`;
31
+ }
32
+ function DeltaBadge({ delta, invertColor = false }) {
33
+ if (delta === null) {
34
+ return _jsx("span", { className: "admin-stat-secondary admin-text-muted", children: "\u2014" });
35
+ }
36
+ if (delta === 0) {
37
+ return _jsx("span", { className: "admin-stat-secondary admin-text-muted", children: "No change" });
38
+ }
39
+ const isPositive = delta > 0;
40
+ // Visual outcome: for normal metrics, positive = good (green); for inverted
41
+ // metrics (refund rate), negative = good (green).
42
+ const isGood = invertColor ? !isPositive : isPositive;
43
+ const Arrow = isPositive ? ArrowUpRight : ArrowDownRight;
44
+ return (_jsxs("span", { className: `admin-stat-secondary inline-flex items-center gap-1 ${isGood ? 'admin-text-success' : 'admin-text-error'}`, children: [_jsx(Arrow, { className: "h-3 w-3" }), formatDelta(delta), _jsx("span", { className: "admin-text-muted ml-1", children: "vs prior period" })] }));
45
+ }
46
+ function Card({ label, value, delta, invertColor, icon: Icon, isLoading }) {
47
+ return (_jsx("div", { className: "admin-stat-card", children: _jsxs("div", { className: "admin-stat-content", children: [_jsxs("div", { className: "admin-stat-text", children: [_jsx("p", { className: "admin-stat-label", children: label }), isLoading ? (_jsx("div", { className: "admin-skeleton", style: { height: '2.25rem', width: '7rem' } })) : (_jsx("p", { className: "admin-stat-value", children: value })), !isLoading && (_jsx(DeltaBadge, { delta: delta, invertColor: invertColor }))] }), _jsx("div", { className: "admin-stat-icon", children: _jsx(Icon, {}) })] }) }));
48
+ }
49
+ // =============================================================================
50
+ // Component
51
+ // =============================================================================
52
+ export function PrimaryMetricsRow({ summary, isLoading, currency, locale = 'en-US', }) {
53
+ const currencyFmt = (value) => new Intl.NumberFormat(locale, {
54
+ style: 'currency',
55
+ currency,
56
+ minimumFractionDigits: 0,
57
+ maximumFractionDigits: 0,
58
+ }).format(value);
59
+ // AOV gets one decimal so a $43.20 → $43.40 swing is visible.
60
+ const aovFmt = (value) => new Intl.NumberFormat(locale, {
61
+ style: 'currency',
62
+ currency,
63
+ minimumFractionDigits: 0,
64
+ maximumFractionDigits: 2,
65
+ }).format(value);
66
+ const pctFmt = (decimal) => {
67
+ const pct = decimal * 100;
68
+ const rounded = Math.round(pct * 10) / 10;
69
+ return `${rounded.toFixed(1).replace(/\.0$/, '')}%`;
70
+ };
71
+ return (_jsxs("div", { className: "admin-stats-grid", children: [_jsx(Card, { label: "Revenue", value: summary ? currencyFmt(summary.current.revenue) : currencyFmt(0), delta: summary?.deltas.revenue ?? null, icon: DollarSign, isLoading: isLoading }), _jsx(Card, { label: "Orders", value: summary ? summary.current.orders.toLocaleString(locale) : '0', delta: summary?.deltas.orders ?? null, icon: ShoppingBag, isLoading: isLoading }), _jsx(Card, { label: "Average order value", value: summary ? aovFmt(summary.current.aov) : aovFmt(0), delta: summary?.deltas.aov ?? null, icon: Wallet, isLoading: isLoading }), _jsx(Card, { label: "Refund rate", value: summary ? pctFmt(summary.current.refundRate) : '0%', delta: summary?.deltas.refundRate ?? null, invertColor: true, icon: AlertTriangle, isLoading: isLoading })] }));
72
+ }
73
+ //# sourceMappingURL=PrimaryMetricsRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrimaryMetricsRow.js","sourceRoot":"","sources":["../../../src/admin/components/PrimaryMetricsRow.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { ProductTableProps } from '../types';
2
2
  /**
3
- * Products data table with filters and pagination.
3
+ * Products data table with metrics row, quick-filter chips, bulk actions,
4
+ * and a real inventory column.
4
5
  *
5
6
  * @example
6
7
  * ```tsx
@@ -1 +1 @@
1
- {"version":3,"file":"ProductTable.d.ts","sourceRoot":"","sources":["../../../src/admin/components/ProductTable.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AA+GjD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,EAC3B,aAAa,EACb,eAAe,EACf,aAAa,EACb,QAAa,EACb,cAAc,EACd,SAAc,GACf,EAAE,iBAAiB,2CAiOnB"}
1
+ {"version":3,"file":"ProductTable.d.ts","sourceRoot":"","sources":["../../../src/admin/components/ProductTable.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EACV,iBAAiB,EAIlB,MAAM,UAAU,CAAA;AAucjB;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,EAC3B,aAAa,EACb,eAAe,EACf,aAAa,EACb,QAAa,EACb,cAAc,EACd,SAAc,GACf,EAAE,iBAAiB,2CAkbnB"}
@@ -1,19 +1,62 @@
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/ProductTable
5
5
  *
6
- * Products data table with filtering, sorting, and pagination.
7
- * Styled with Rovela admin theme - uses pure CSS for hover states.
6
+ * Admin product list with:
7
+ * - Three metric cards above the filter row (Active / Out of stock / Best
8
+ * seller — last 30 days, by units)
9
+ * - Five quick-filter chips (All · Active · Drafts · Archived · Out of stock)
10
+ * replacing the legacy Status dropdown — default = Active
11
+ * - Bulk row selection with three actions (Activate / Archive / Delete);
12
+ * Delete enforces the existing "must be archived first" precondition
13
+ * - Real inventory column with low/out-of-stock badges (replaces the
14
+ * hardcoded `—`); for variant products shows the summed variant
15
+ * inventory computed server-side via `getInventoryByProductIds`
16
+ *
17
+ * Back-compat: every existing `ProductTableProps` field is preserved.
8
18
  */
9
- import { useState, useEffect, useCallback } from 'react';
10
- import { ImageIcon, Pencil, Trash2 } from 'lucide-react';
19
+ import { useState, useEffect, useCallback, useMemo } from 'react';
20
+ import { ImageIcon, Pencil, Trash2, CheckCircle2, Archive, X, TrendingUp, AlertTriangle, Package, } from 'lucide-react';
11
21
  import { useAdminProducts } from '../hooks/useAdminProducts';
22
+ import { useAdminProductMetrics } from '../hooks/useAdminProductMetrics';
12
23
  import { useStoreSettingsOptional } from '../../core/StoreSettingsProvider';
13
24
  import { AdminSelect } from './AdminSelect';
14
25
  import { DeleteConfirmDialog } from './DeleteConfirmDialog';
26
+ const CHIP_LABELS = {
27
+ all: 'All',
28
+ active: 'Active',
29
+ drafts: 'Drafts',
30
+ archived: 'Archived',
31
+ oos: 'Out of stock',
32
+ };
33
+ const CHIP_ORDER = ['all', 'active', 'drafts', 'archived', 'oos'];
34
+ function chipToFilter(chip) {
35
+ switch (chip) {
36
+ case 'all':
37
+ return {};
38
+ case 'active':
39
+ return { status: 'active' };
40
+ case 'drafts':
41
+ return { status: 'draft' };
42
+ case 'archived':
43
+ return { status: 'archived' };
44
+ case 'oos':
45
+ // Scoped to active so the table count matches the OOS metric card.
46
+ return { status: 'active', outOfStock: true };
47
+ }
48
+ }
49
+ function initialStatusToChip(initialStatus) {
50
+ if (initialStatus === 'draft')
51
+ return 'drafts';
52
+ if (initialStatus === 'archived')
53
+ return 'archived';
54
+ if (initialStatus === 'active')
55
+ return 'active';
56
+ return 'active'; // default: Active (most useful daily view)
57
+ }
15
58
  // =============================================================================
16
- // Status Badge - Pure CSS Classes
59
+ // Status Badge
17
60
  // =============================================================================
18
61
  const statusBadgeClass = {
19
62
  draft: 'admin-badge-draft',
@@ -24,19 +67,104 @@ function StatusBadge({ status }) {
24
67
  const badgeClass = statusBadgeClass[status] || 'admin-badge-draft';
25
68
  return (_jsx("span", { className: `admin-badge ${badgeClass}`, children: status.charAt(0).toUpperCase() + status.slice(1) }));
26
69
  }
27
- function ProductRow({ product: p, onProductClick, onDeleteClick, formatCurrency }) {
28
- return (_jsxs("tr", { className: "admin-table-row", children: [_jsx("td", { className: "px-6 py-4", children: _jsxs("div", { className: "flex items-center gap-3", children: [p.images?.[0] ? (_jsx("img", { src: p.images[0], alt: p.name, className: "h-10 w-10 rounded object-cover" })) : (_jsx("div", { className: "admin-image-placeholder h-10 w-10 rounded", children: _jsx(ImageIcon, { className: "h-5 w-5", strokeWidth: 1.5 }) })), _jsx("a", { href: `/admin/products/${p.id}`, onClick: (e) => {
70
+ // =============================================================================
71
+ // Inventory Cell
72
+ // =============================================================================
73
+ /**
74
+ * Renders the inventory column. Replaces the legacy hardcoded `—`.
75
+ *
76
+ * - `trackInventory=false` AND non-variant → '—' (untracked is the only
77
+ * legitimate dash — the merchant explicitly opted out)
78
+ * - effectiveInventory === 0 → red "Out" badge
79
+ * - effectiveInventory <= 5 → amber "Low (N)" badge
80
+ * - otherwise → plain number
81
+ */
82
+ function InventoryCell({ product: p }) {
83
+ const tracks = p.hasVariants || p.trackInventory !== false;
84
+ if (!tracks) {
85
+ return _jsx("span", { className: "admin-text-muted", children: "\u2014" });
86
+ }
87
+ const inv = p.effectiveInventory ?? 0;
88
+ if (inv <= 0) {
89
+ return _jsx("span", { className: "admin-badge admin-badge-out-of-stock", children: "Out" });
90
+ }
91
+ if (inv <= 5) {
92
+ return (_jsxs("span", { className: "admin-badge admin-badge-low-stock", children: ["Low (", inv, ")"] }));
93
+ }
94
+ return _jsx("span", { className: "admin-text", children: inv });
95
+ }
96
+ // =============================================================================
97
+ // Metric Cards
98
+ // =============================================================================
99
+ function MetricCard({ label, primary, secondary, icon: Icon, isLoading, href, onClick, }) {
100
+ const Wrapper = onClick
101
+ ? 'button'
102
+ : href
103
+ ? 'a'
104
+ : 'div';
105
+ const wrapperProps = onClick
106
+ ? { type: 'button', onClick }
107
+ : href
108
+ ? { href }
109
+ : {};
110
+ return (_jsx(Wrapper, { ...wrapperProps, className: "admin-stat-card admin-stat-card-clickable", children: _jsxs("div", { className: "admin-stat-content", children: [_jsxs("div", { className: "admin-stat-text", children: [_jsx("p", { className: "admin-stat-label", children: label }), isLoading ? (_jsx("div", { className: "admin-skeleton", style: { height: '2.25rem', width: '7rem' } })) : (_jsx("p", { className: "admin-stat-value", children: primary })), secondary && !isLoading && (_jsx("p", { className: "admin-stat-secondary", children: secondary }))] }), _jsx("div", { className: "admin-stat-icon", children: _jsx(Icon, {}) })] }) }));
111
+ }
112
+ function ProductMetricsCards({ metrics, isLoading, currency, locale, onActiveClick, onOutOfStockClick, onBestSellerClick, }) {
113
+ const formatRevenue = (value) => {
114
+ const n = parseFloat(value);
115
+ if (!Number.isFinite(n))
116
+ return '';
117
+ return new Intl.NumberFormat(locale, {
118
+ style: 'currency',
119
+ currency,
120
+ minimumFractionDigits: 0,
121
+ maximumFractionDigits: 0,
122
+ }).format(n);
123
+ };
124
+ return (_jsxs("div", { className: "admin-stats-grid admin-stats-grid-3", children: [_jsx(MetricCard, { label: "Active products", primary: metrics?.activeCount.toLocaleString() ?? '0', icon: Package, isLoading: isLoading, onClick: onActiveClick }), _jsx(MetricCard, { label: "Out of stock", primary: metrics?.outOfStockCount.toLocaleString() ?? '0', secondary: metrics && metrics.outOfStockCount > 0
125
+ ? 'Restock to keep selling'
126
+ : undefined, icon: AlertTriangle, isLoading: isLoading, onClick: onOutOfStockClick }), _jsx(MetricCard, { label: "Best seller (30 d)", primary: metrics?.bestSeller ? (_jsx("span", { className: "admin-stat-value-name", title: metrics.bestSeller.name, children: metrics.bestSeller.name })) : (_jsx("span", { className: "admin-text-muted", style: { fontSize: '1.125rem' }, children: "No sales yet" })), secondary: metrics?.bestSeller
127
+ ? `${metrics.bestSeller.unitsSold} units · ${formatRevenue(metrics.bestSeller.revenue)}`
128
+ : 'Your top product appears after the first order', icon: TrendingUp, isLoading: isLoading, onClick: metrics?.bestSeller
129
+ ? () => onBestSellerClick(metrics.bestSeller.id)
130
+ : undefined })] }));
131
+ }
132
+ // =============================================================================
133
+ // Chip Row
134
+ // =============================================================================
135
+ function ChipRow({ active, onChange, disabled, }) {
136
+ return (_jsx("div", { className: "admin-chip-row", role: "tablist", "aria-label": "Quick filters", children: CHIP_ORDER.map((chip) => {
137
+ const isActive = chip === active;
138
+ return (_jsx("button", { type: "button", role: "tab", "aria-selected": isActive, disabled: disabled, onClick: () => onChange(chip), className: `admin-chip ${isActive ? 'admin-chip-active' : ''}`, children: CHIP_LABELS[chip] }, chip));
139
+ }) }));
140
+ }
141
+ // =============================================================================
142
+ // Bulk Action Bar
143
+ // =============================================================================
144
+ function BulkActionBar({ count, selectedAreAllArchived, isProcessing, onActivate, onArchive, onDelete, onClear, }) {
145
+ return (_jsxs("div", { className: "admin-bulk-bar", role: "region", "aria-label": "Bulk actions", children: [_jsxs("div", { className: "admin-bulk-bar-count", children: [_jsx(CheckCircle2, { className: "h-4 w-4" }), _jsxs("span", { children: [_jsx("strong", { children: count }), " selected"] })] }), _jsxs("div", { className: "admin-bulk-bar-actions", children: [_jsxs("button", { type: "button", onClick: onActivate, disabled: isProcessing, className: "admin-btn admin-btn-secondary admin-btn-sm", children: [_jsx(CheckCircle2, { className: "h-4 w-4" }), "Activate"] }), _jsxs("button", { type: "button", onClick: onArchive, disabled: isProcessing, className: "admin-btn admin-btn-secondary admin-btn-sm", children: [_jsx(Archive, { className: "h-4 w-4" }), "Archive"] }), _jsxs("button", { type: "button", onClick: onDelete, disabled: isProcessing || !selectedAreAllArchived, title: selectedAreAllArchived
146
+ ? 'Permanently delete selected'
147
+ : 'Archive these products first, then delete', className: "admin-btn admin-btn-danger admin-btn-sm", children: [_jsx(Trash2, { className: "h-4 w-4" }), "Delete"] }), _jsx("button", { type: "button", onClick: onClear, disabled: isProcessing, "aria-label": "Clear selection", className: "admin-bulk-bar-clear", children: _jsx(X, { className: "h-4 w-4" }) })] })] }));
148
+ }
149
+ function ProductRow({ product: p, isSelected, onToggleSelect, onProductClick, onDeleteClick, formatCurrency, }) {
150
+ return (_jsxs("tr", { className: `admin-table-row ${isSelected ? 'admin-table-row-selected' : ''}`, children: [_jsx("td", { className: "px-4 py-4 w-12", children: _jsx("input", { type: "checkbox", className: "admin-checkbox", checked: isSelected, onChange: () => onToggleSelect(p.id), "aria-label": `Select ${p.name}` }) }), _jsx("td", { className: "px-6 py-4", children: _jsxs("div", { className: "flex items-center gap-3", children: [p.images?.[0] ? (_jsx("img", { src: p.images[0], alt: p.name, className: "h-10 w-10 rounded object-cover" })) : (_jsx("div", { className: "admin-image-placeholder h-10 w-10 rounded", children: _jsx(ImageIcon, { className: "h-5 w-5", strokeWidth: 1.5 }) })), _jsx("a", { href: `/admin/products/${p.id}`, onClick: (e) => {
151
+ if (onProductClick) {
152
+ e.preventDefault();
153
+ onProductClick(p.id);
154
+ }
155
+ }, className: "admin-inventory-item-link", children: p.name })] }) }), _jsx("td", { className: "px-6 py-4", children: _jsx(StatusBadge, { status: p.status }) }), _jsx("td", { className: "px-6 py-4 text-sm font-medium", children: formatCurrency(p.price) }), _jsx("td", { className: "px-6 py-4 text-sm", children: _jsx(InventoryCell, { product: p }) }), _jsx("td", { className: "px-6 py-4", children: _jsxs("div", { className: "flex items-center justify-end gap-2", children: [_jsx("a", { href: `/admin/products/${p.id}`, onClick: (e) => {
29
156
  if (onProductClick) {
30
157
  e.preventDefault();
31
158
  onProductClick(p.id);
32
159
  }
33
- }, className: "admin-inventory-item-link", children: p.name })] }) }), _jsx("td", { className: "px-6 py-4", children: _jsx(StatusBadge, { status: p.status }) }), _jsx("td", { className: "px-6 py-4 text-sm font-medium", children: formatCurrency(p.price) }), _jsx("td", { className: "px-6 py-4 text-sm admin-text-muted", children: "\u2014" }), _jsx("td", { className: "px-6 py-4", children: _jsxs("div", { className: "flex items-center justify-end gap-2", children: [_jsx("a", { href: `/admin/products/${p.id}`, className: "p-2 rounded-md hover:bg-[hsl(var(--admin-background-subtle))] text-[hsl(var(--admin-foreground-muted))] hover:text-[hsl(var(--admin-foreground))] transition-colors", children: _jsx(Pencil, { className: "h-4 w-4" }) }), _jsx("button", { type: "button", onClick: () => onDeleteClick(p.id, p.name), className: "p-2 rounded-md hover:bg-[hsl(var(--admin-error)/0.1)] text-[hsl(var(--admin-foreground-muted))] hover:text-[hsl(var(--admin-error))] transition-colors", children: _jsx(Trash2, { className: "h-4 w-4" }) })] }) })] }));
160
+ }, className: "p-2 rounded-md hover:bg-[hsl(var(--admin-background-subtle))] text-[hsl(var(--admin-foreground-muted))] hover:text-[hsl(var(--admin-foreground))] transition-colors", "aria-label": "Edit product", children: _jsx(Pencil, { className: "h-4 w-4" }) }), _jsx("button", { type: "button", onClick: () => onDeleteClick(p.id, p.name), className: "p-2 rounded-md hover:bg-[hsl(var(--admin-error)/0.1)] text-[hsl(var(--admin-foreground-muted))] hover:text-[hsl(var(--admin-error))] transition-colors", "aria-label": "Delete product", children: _jsx(Trash2, { className: "h-4 w-4" }) })] }) })] }));
34
161
  }
35
162
  // =============================================================================
36
163
  // Component
37
164
  // =============================================================================
38
165
  /**
39
- * Products data table with filters and pagination.
166
+ * Products data table with metrics row, quick-filter chips, bulk actions,
167
+ * and a real inventory column.
40
168
  *
41
169
  * @example
42
170
  * ```tsx
@@ -46,37 +174,118 @@ function ProductRow({ product: p, onProductClick, onDeleteClick, formatCurrency
46
174
  * ```
47
175
  */
48
176
  export function ProductTable({ initialSearch, initialCategory, initialStatus, pageSize = 20, onProductClick, className = '', }) {
49
- const { products, total, page, isLoading, fetchProducts, deleteProduct } = useAdminProducts();
177
+ const { products, total, page, isLoading, fetchProducts, deleteProduct, bulkAction, } = useAdminProducts();
178
+ const { metrics, isLoading: isMetricsLoading, fetchMetrics } = useAdminProductMetrics();
50
179
  // Get currency from context
51
180
  const storeSettings = useStoreSettingsOptional();
52
181
  const resolvedCurrency = storeSettings?.currency ?? 'USD';
53
182
  const resolvedLocale = storeSettings?.locale ?? 'en-US';
183
+ // Filter state
54
184
  const [search, setSearch] = useState(initialSearch || '');
55
- const [status, setStatus] = useState(initialStatus || '');
185
+ const [chip, setChip] = useState(() => initialStatusToChip(initialStatus));
56
186
  const [sort, setSort] = useState('newest');
57
- // Delete confirmation state
187
+ // Selection state — tracked as a Set of product IDs on the current page
188
+ const [selected, setSelected] = useState(new Set());
189
+ const [isProcessing, setIsProcessing] = useState(false);
190
+ // Single-row delete dialog
58
191
  const [deleteTarget, setDeleteTarget] = useState(null);
59
192
  const [isDeleting, setIsDeleting] = useState(false);
60
193
  const [deleteError, setDeleteError] = useState(null);
194
+ // Bulk confirmation dialog
195
+ const [bulkConfirm, setBulkConfirm] = useState(null);
196
+ // Derived: are all selected products already archived? Drives the Delete
197
+ // button enable state in the bulk bar.
198
+ const selectedAreAllArchived = useMemo(() => {
199
+ if (selected.size === 0)
200
+ return false;
201
+ for (const p of products) {
202
+ if (selected.has(p.id) && p.status !== 'archived')
203
+ return false;
204
+ }
205
+ return true;
206
+ }, [selected, products]);
61
207
  // Fetch products on filter change
62
208
  useEffect(() => {
209
+ const filter = chipToFilter(chip);
63
210
  fetchProducts({
64
211
  search: search || undefined,
65
- status: status || undefined,
212
+ category: initialCategory || undefined,
213
+ status: filter.status,
214
+ outOfStock: filter.outOfStock,
66
215
  sort,
67
216
  page: 1,
68
217
  limit: pageSize,
69
218
  });
70
- }, [search, status, sort, pageSize, fetchProducts]);
219
+ // Clear selection on filter change so the user doesn't accidentally
220
+ // bulk-act on rows they can't see.
221
+ setSelected(new Set());
222
+ }, [search, chip, sort, pageSize, initialCategory, fetchProducts]);
223
+ // One-time metric fetch on mount (re-fetched after every successful action)
224
+ useEffect(() => {
225
+ fetchMetrics();
226
+ }, [fetchMetrics]);
227
+ const refetchAll = useCallback(() => {
228
+ const filter = chipToFilter(chip);
229
+ fetchProducts({
230
+ search: search || undefined,
231
+ category: initialCategory || undefined,
232
+ status: filter.status,
233
+ outOfStock: filter.outOfStock,
234
+ sort,
235
+ page,
236
+ limit: pageSize,
237
+ });
238
+ fetchMetrics();
239
+ }, [
240
+ chip,
241
+ search,
242
+ sort,
243
+ page,
244
+ pageSize,
245
+ initialCategory,
246
+ fetchProducts,
247
+ fetchMetrics,
248
+ ]);
71
249
  const handlePageChange = useCallback((newPage) => {
250
+ const filter = chipToFilter(chip);
72
251
  fetchProducts({
73
252
  search: search || undefined,
74
- status: status || undefined,
253
+ category: initialCategory || undefined,
254
+ status: filter.status,
255
+ outOfStock: filter.outOfStock,
75
256
  sort,
76
257
  page: newPage,
77
258
  limit: pageSize,
78
259
  });
79
- }, [search, status, sort, pageSize, fetchProducts]);
260
+ setSelected(new Set());
261
+ }, [search, chip, sort, pageSize, initialCategory, fetchProducts]);
262
+ // ---- Selection handlers ------------------------------------------------
263
+ const handleToggleSelect = useCallback((id) => {
264
+ setSelected((prev) => {
265
+ const next = new Set(prev);
266
+ if (next.has(id))
267
+ next.delete(id);
268
+ else
269
+ next.add(id);
270
+ return next;
271
+ });
272
+ }, []);
273
+ const handleSelectAllOnPage = useCallback(() => {
274
+ setSelected((prev) => {
275
+ // If already all selected on the page, clear; else select all on page.
276
+ const allSelected = products.length > 0 && products.every((p) => prev.has(p.id));
277
+ if (allSelected)
278
+ return new Set();
279
+ const next = new Set(prev);
280
+ for (const p of products)
281
+ next.add(p.id);
282
+ return next;
283
+ });
284
+ }, [products]);
285
+ const handleClearSelection = useCallback(() => {
286
+ setSelected(new Set());
287
+ }, []);
288
+ // ---- Single-row delete (existing flow, unchanged) -----------------------
80
289
  const handleDeleteClick = useCallback((id, name) => {
81
290
  setDeleteTarget({ id, name });
82
291
  setDeleteError(null);
@@ -90,18 +299,60 @@ export function ProductTable({ initialSearch, initialCategory, initialStatus, pa
90
299
  setIsDeleting(false);
91
300
  if (result.success) {
92
301
  setDeleteTarget(null);
93
- fetchProducts({ search, status: status || undefined, sort, page, limit: pageSize });
302
+ refetchAll();
94
303
  }
95
304
  else {
96
305
  setDeleteError(result.error ?? 'Failed to delete product. Please try again.');
97
306
  }
98
- }, [deleteTarget, deleteProduct, fetchProducts, search, status, sort, page, pageSize]);
307
+ }, [deleteTarget, deleteProduct, refetchAll]);
99
308
  const handleDeleteCancel = useCallback(() => {
100
309
  if (!isDeleting) {
101
310
  setDeleteTarget(null);
102
311
  setDeleteError(null);
103
312
  }
104
313
  }, [isDeleting]);
314
+ // ---- Bulk actions ------------------------------------------------------
315
+ const performBulk = useCallback(async (action) => {
316
+ const ids = Array.from(selected);
317
+ if (ids.length === 0)
318
+ return;
319
+ setIsProcessing(true);
320
+ const result = await bulkAction(ids, action);
321
+ setIsProcessing(false);
322
+ setBulkConfirm(null);
323
+ // Refresh the page + metrics regardless of partial-success outcome.
324
+ refetchAll();
325
+ setSelected(new Set());
326
+ // Surface partial failures via console — the parent app can wire a toast
327
+ // by inspecting the hook return if needed. We deliberately don't throw
328
+ // because the SDK shouldn't depend on a toast library.
329
+ if (result.failed.length > 0) {
330
+ console.warn(`[ProductTable] Bulk ${action}: ${result.succeeded.length} succeeded, ${result.failed.length} failed`, result.failed);
331
+ }
332
+ }, [selected, bulkAction, refetchAll]);
333
+ const handleActivate = useCallback(() => performBulk('activate'), [performBulk]);
334
+ const handleArchive = useCallback(() => setBulkConfirm('archive'), []);
335
+ const handleDeleteBulk = useCallback(() => setBulkConfirm('delete'), []);
336
+ const confirmBulk = useCallback(() => {
337
+ if (bulkConfirm === 'archive')
338
+ performBulk('archive');
339
+ else if (bulkConfirm === 'delete')
340
+ performBulk('delete');
341
+ }, [bulkConfirm, performBulk]);
342
+ const cancelBulkConfirm = useCallback(() => {
343
+ if (!isProcessing)
344
+ setBulkConfirm(null);
345
+ }, [isProcessing]);
346
+ // ---- Metric card click-throughs ----------------------------------------
347
+ const handleActiveCardClick = useCallback(() => setChip('active'), []);
348
+ const handleOosCardClick = useCallback(() => setChip('oos'), []);
349
+ const handleBestSellerCardClick = useCallback((id) => {
350
+ if (onProductClick)
351
+ onProductClick(id);
352
+ else
353
+ window.location.href = `/admin/products/${id}`;
354
+ }, [onProductClick]);
355
+ // ---- Helpers -----------------------------------------------------------
105
356
  const formatCurrency = (value) => {
106
357
  return new Intl.NumberFormat(resolvedLocale, {
107
358
  style: 'currency',
@@ -109,19 +360,19 @@ export function ProductTable({ initialSearch, initialCategory, initialStatus, pa
109
360
  }).format(parseFloat(value));
110
361
  };
111
362
  const totalPages = Math.ceil(total / pageSize);
112
- return (_jsxs("div", { className: `space-y-4 ${className}`, children: [_jsxs("div", { className: "admin-filter-bar", children: [_jsx("input", { type: "text", value: search, onChange: (e) => setSearch(e.target.value), placeholder: "Search products...", className: "admin-filter-search" }), _jsx(AdminSelect, { value: status, onChange: (value) => setStatus(value), placeholder: "All Status", options: [
113
- { value: '', label: 'All Status' },
114
- { value: 'active', label: 'Active' },
115
- { value: 'draft', label: 'Draft' },
116
- { value: 'archived', label: 'Archived' },
117
- ], className: "w-[130px]" }), _jsx(AdminSelect, { value: sort, onChange: (value) => setSort(value), options: [
118
- { value: 'newest', label: 'Newest' },
119
- { value: 'name', label: 'Name' },
120
- { value: 'price-asc', label: 'Price: Low to High' },
121
- { value: 'price-desc', label: 'Price: High to Low' },
122
- ], className: "w-[170px]" })] }), _jsxs("div", { className: "admin-card overflow-hidden", children: [_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "admin-table w-full", children: [_jsx("thead", { children: _jsxs("tr", { className: "admin-table-header", children: [_jsx("th", { className: "px-6 py-3 text-left", children: "Product" }), _jsx("th", { className: "px-6 py-3 text-left", children: "Status" }), _jsx("th", { className: "px-6 py-3 text-left", children: "Price" }), _jsx("th", { className: "px-6 py-3 text-left", children: "Inventory" }), _jsx("th", { className: "px-6 py-3 text-right", children: "Actions" })] }) }), _jsx("tbody", { children: isLoading ? ([...Array(5)].map((_, i) => (_jsxs("tr", { className: "admin-table-row", children: [_jsx("td", { className: "px-6 py-4", children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "admin-skeleton admin-skeleton-xl w-10 rounded" }), _jsx("div", { className: "admin-skeleton admin-skeleton-md w-32 rounded" })] }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "admin-skeleton admin-skeleton-lg w-16 rounded" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "admin-skeleton admin-skeleton-md w-16 rounded" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "admin-skeleton admin-skeleton-md w-12 rounded" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "admin-skeleton admin-skeleton-md w-20 rounded" }) })] }, i)))) : products.length === 0 ? (_jsx("tr", { children: _jsx("td", { colSpan: 5, className: "px-6 py-12 text-center admin-empty-text", children: "No products found" }) })) : (products.map((product) => {
123
- const p = product;
124
- return (_jsx(ProductRow, { product: p, onProductClick: onProductClick, onDeleteClick: handleDeleteClick, formatCurrency: formatCurrency }, p.id));
125
- })) })] }) }), totalPages > 1 && (_jsxs("div", { className: "admin-pagination px-6", children: [_jsxs("p", { className: "admin-pagination-info", children: ["Showing ", (page - 1) * pageSize + 1, " to ", Math.min(page * pageSize, total), " of ", total] }), _jsxs("div", { className: "admin-pagination-controls", children: [_jsx("button", { onClick: () => handlePageChange(page - 1), disabled: page === 1, className: "admin-btn admin-btn-secondary admin-btn-sm disabled:opacity-50", children: "Previous" }), _jsx("button", { onClick: () => handlePageChange(page + 1), disabled: page >= totalPages, className: "admin-btn admin-btn-secondary admin-btn-sm disabled:opacity-50", children: "Next" })] })] }))] }), _jsx(DeleteConfirmDialog, { isOpen: !!deleteTarget, title: "Delete Product", itemName: deleteTarget?.name || '', itemType: "product", isDeleting: isDeleting, error: deleteError, onConfirm: handleDeleteConfirm, onCancel: handleDeleteCancel })] }));
363
+ const allOnPageSelected = products.length > 0 && products.every((p) => selected.has(p.id));
364
+ const someOnPageSelected = products.length > 0 && products.some((p) => selected.has(p.id));
365
+ return (_jsxs("div", { className: `space-y-4 ${className}`, children: [_jsx(ProductMetricsCards, { metrics: metrics, isLoading: isMetricsLoading, currency: resolvedCurrency, locale: resolvedLocale, onActiveClick: handleActiveCardClick, onOutOfStockClick: handleOosCardClick, onBestSellerClick: handleBestSellerCardClick }), selected.size > 0 ? (_jsx(BulkActionBar, { count: selected.size, selectedAreAllArchived: selectedAreAllArchived, isProcessing: isProcessing, onActivate: handleActivate, onArchive: handleArchive, onDelete: handleDeleteBulk, onClear: handleClearSelection })) : (_jsxs(_Fragment, { children: [_jsx(ChipRow, { active: chip, onChange: setChip, disabled: isLoading }), _jsxs("div", { className: "admin-filter-bar", children: [_jsx("input", { type: "text", value: search, onChange: (e) => setSearch(e.target.value), placeholder: "Search products...", className: "admin-filter-search" }), _jsx(AdminSelect, { value: sort, onChange: (value) => setSort(value), options: [
366
+ { value: 'newest', label: 'Newest' },
367
+ { value: 'name', label: 'Name' },
368
+ { value: 'price-asc', label: 'Price: Low to High' },
369
+ { value: 'price-desc', label: 'Price: High to Low' },
370
+ ], className: "w-[170px]" })] })] })), _jsxs("div", { className: "admin-card overflow-hidden", children: [_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "admin-table w-full", children: [_jsx("thead", { children: _jsxs("tr", { className: "admin-table-header", children: [_jsx("th", { className: "px-4 py-3 w-12 text-left", children: _jsx("input", { type: "checkbox", className: "admin-checkbox", checked: allOnPageSelected, ref: (el) => {
371
+ if (el)
372
+ el.indeterminate =
373
+ someOnPageSelected && !allOnPageSelected;
374
+ }, onChange: handleSelectAllOnPage, "aria-label": "Select all products on this page" }) }), _jsx("th", { className: "px-6 py-3 text-left", children: "Product" }), _jsx("th", { className: "px-6 py-3 text-left", children: "Status" }), _jsx("th", { className: "px-6 py-3 text-left", children: "Price" }), _jsx("th", { className: "px-6 py-3 text-left", children: "Inventory" }), _jsx("th", { className: "px-6 py-3 text-right", children: "Actions" })] }) }), _jsx("tbody", { children: isLoading ? ([...Array(5)].map((_, i) => (_jsxs("tr", { className: "admin-table-row", children: [_jsx("td", { className: "px-4 py-4 w-12", children: _jsx("div", { className: "admin-skeleton admin-skeleton-md w-4 rounded" }) }), _jsx("td", { className: "px-6 py-4", children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "admin-skeleton admin-skeleton-xl w-10 rounded" }), _jsx("div", { className: "admin-skeleton admin-skeleton-md w-32 rounded" })] }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "admin-skeleton admin-skeleton-lg w-16 rounded" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "admin-skeleton admin-skeleton-md w-16 rounded" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "admin-skeleton admin-skeleton-md w-12 rounded" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "admin-skeleton admin-skeleton-md w-20 rounded" }) })] }, i)))) : products.length === 0 ? (_jsx("tr", { children: _jsx("td", { colSpan: 6, className: "px-6 py-12 text-center admin-empty-text", children: "No products found" }) })) : (products.map((product) => (_jsx(ProductRow, { product: product, isSelected: selected.has(product.id), onToggleSelect: handleToggleSelect, onProductClick: onProductClick, onDeleteClick: handleDeleteClick, formatCurrency: formatCurrency }, product.id)))) })] }) }), totalPages > 1 && (_jsxs("div", { className: "admin-pagination px-6", children: [_jsxs("p", { className: "admin-pagination-info", children: ["Showing ", (page - 1) * pageSize + 1, " to", ' ', Math.min(page * pageSize, total), " of ", total] }), _jsxs("div", { className: "admin-pagination-controls", children: [_jsx("button", { onClick: () => handlePageChange(page - 1), disabled: page === 1, className: "admin-btn admin-btn-secondary admin-btn-sm disabled:opacity-50", children: "Previous" }), _jsx("button", { onClick: () => handlePageChange(page + 1), disabled: page >= totalPages, className: "admin-btn admin-btn-secondary admin-btn-sm disabled:opacity-50", children: "Next" })] })] }))] }), _jsx(DeleteConfirmDialog, { isOpen: !!deleteTarget, title: "Delete Product", itemName: deleteTarget?.name || '', itemType: "product", isDeleting: isDeleting, error: deleteError, onConfirm: handleDeleteConfirm, onCancel: handleDeleteCancel }), _jsx(DeleteConfirmDialog, { isOpen: bulkConfirm !== null, title: bulkConfirm === 'delete'
375
+ ? `Delete ${selected.size} product${selected.size === 1 ? '' : 's'}`
376
+ : `Archive ${selected.size} product${selected.size === 1 ? '' : 's'}`, itemName: `${selected.size} selected product${selected.size === 1 ? '' : 's'}`, itemType: "product", isDeleting: isProcessing, error: null, onConfirm: confirmBulk, onCancel: cancelBulkConfirm })] }));
126
377
  }
127
378
  //# sourceMappingURL=ProductTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProductTable.js","sourceRoot":"","sources":["../../../src/admin/components/ProductTable.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProductTable.js","sourceRoot":"","sources":["../../../src/admin/components/ProductTable.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RevenueChart.d.ts","sourceRoot":"","sources":["../../../src/admin/components/RevenueChart.tsx"],"names":[],"mappings":"AAwBA,MAAM,WAAW,iBAAiB;IAChC,0BAA0B;IAC1B,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACzC,oBAAoB;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAiDD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,SAAiB,EACjB,QAAgB,EAChB,SAAc,GACf,EAAE,iBAAiB,2CA2GnB"}
1
+ {"version":3,"file":"RevenueChart.d.ts","sourceRoot":"","sources":["../../../src/admin/components/RevenueChart.tsx"],"names":[],"mappings":"AAwBA,MAAM,WAAW,iBAAiB;IAChC,0BAA0B;IAC1B,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACzC,oBAAoB;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAiDD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,SAAiB,EACjB,QAAgB,EAChB,SAAc,GACf,EAAE,iBAAiB,2CAqHnB"}
@@ -67,6 +67,9 @@ export function RevenueChart({ data, isLoading = false, currency = 'USD', classN
67
67
  currency,
68
68
  minimumFractionDigits: 0,
69
69
  maximumFractionDigits: 0,
70
- }).format(totalRevenue) }), _jsx("p", { className: "admin-chart-value-label", children: "Total" })] }))] }), _jsx("div", { className: "admin-chart-body", 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(ResponsiveContainer, { width: "100%", height: 256, 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)" })] }) })) })] }));
70
+ }).format(totalRevenue) }), _jsx("p", { className: "admin-chart-value-label", children: "Total" })] }))] }), _jsx("div", { className: "admin-chart-body", 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", {
71
+ // Screen-reader summary so the chart isn't an opaque visual.
72
+ // Tooltip alone doesn't surface to assistive tech.
73
+ role: "img", "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: 260, 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)" })] }) }) })) })] }));
71
74
  }
72
75
  //# sourceMappingURL=RevenueChart.js.map