@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,218 @@
1
+ /**
2
+ * @rovela/sdk/admin/api/setup-guide
3
+ *
4
+ * Setup-guide orchestrator for the admin dashboard.
5
+ *
6
+ * Usage:
7
+ * ```typescript
8
+ * // app/api/admin/setup-guide/route.ts
9
+ * export { GET } from '@rovela-ai/sdk/admin/api/setup-guide'
10
+ *
11
+ * // app/api/admin/setup-guide/manual-mark/route.ts
12
+ * export { POST as markSetupTask } from '@rovela-ai/sdk/admin/api/setup-guide'
13
+ * ```
14
+ *
15
+ * GET returns the 9 task statuses + progress + visibility hint in one
16
+ * round-trip. Auto-detected signals are read live; manual marks live in
17
+ * `store_settings.onboarding` JSONB and are written via POST.
18
+ *
19
+ * Tasks (3 tiers):
20
+ * Tier 1 (Open for business — must do):
21
+ * - stripe (auto) — connected account exists
22
+ * - products (auto) — onboarding.firstProductTouched OR count > 1
23
+ * - shipping (auto) — at least one active shipping zone
24
+ * - tax (auto) — at least one tax zone OR onboarding.taxNoneNeeded
25
+ *
26
+ * Tier 2 (Make it yours):
27
+ * - logo (auto) — onboarding.logoUploaded
28
+ * - domain (auto) — NEXT_PUBLIC_APP_URL is not a `.rovela.app` host
29
+ * - legal (manual) — onboarding.legalPagesReviewed
30
+ *
31
+ * Tier 3 (Operational):
32
+ * - team (auto) — admin count > 1
33
+ * - analytics (auto) — store_settings.analytics has any keys
34
+ */
35
+ import { NextResponse } from 'next/server';
36
+ import { requireAdmin } from '../server/admin-session';
37
+ import { getSetupGuideSignals, setOnboardingFlag, } from '../../core/db/queries';
38
+ import { hasConnectedAccount } from '../../checkout/stripe/client';
39
+ const MANUAL_MARK_KEYS = [
40
+ 'taxNoneNeeded',
41
+ 'legalPagesReviewed',
42
+ 'firstProductTouched',
43
+ 'logoUploaded',
44
+ 'dismiss',
45
+ 'reopen',
46
+ ];
47
+ // =============================================================================
48
+ // GET /api/admin/setup-guide
49
+ // =============================================================================
50
+ export async function GET(_request) {
51
+ const guard = await requireAdmin({ permission: 'settings.read' });
52
+ if (!guard.ok)
53
+ return guard.response;
54
+ try {
55
+ const [signals, stripeConnected] = await Promise.all([
56
+ getSetupGuideSignals(),
57
+ Promise.resolve(hasConnectedAccount()),
58
+ ]);
59
+ const onboarding = signals.storeSettings?.onboarding ?? {};
60
+ const analyticsKeys = Object.keys(signals.storeSettings?.analytics ?? {});
61
+ // --- Custom-domain detection -------------------------------------------
62
+ // Platform's deploy flow flips NEXT_PUBLIC_APP_URL to the custom domain
63
+ // only after DNS verification succeeds (see CLAUDE.md §23). So a non-
64
+ // `.rovela.app` host means the merchant's custom domain is live.
65
+ const appUrl = process.env.NEXT_PUBLIC_APP_URL ?? '';
66
+ let appHost = '';
67
+ try {
68
+ appHost = appUrl ? new URL(appUrl).hostname : '';
69
+ }
70
+ catch {
71
+ appHost = '';
72
+ }
73
+ const customDomainVerified = appHost.length > 0 && !appHost.endsWith('.rovela.app');
74
+ // --- Build tasks --------------------------------------------------------
75
+ const tasks = [
76
+ // Tier 1
77
+ {
78
+ id: 'stripe',
79
+ tier: 1,
80
+ status: stripeConnected ? 'complete' : 'incomplete',
81
+ auto: true,
82
+ },
83
+ {
84
+ id: 'products',
85
+ tier: 1,
86
+ // Two complete-paths: explicit flag (set by API writeback on any
87
+ // product create/update) OR more than 1 product (covers the case
88
+ // where the AI seeded one and the merchant added more without ever
89
+ // editing the seeded one).
90
+ status: onboarding.firstProductTouched || signals.productCount > 1
91
+ ? 'complete'
92
+ : 'incomplete',
93
+ auto: true,
94
+ },
95
+ {
96
+ id: 'shipping',
97
+ tier: 1,
98
+ status: signals.shippingZonesCount > 0 ? 'complete' : 'incomplete',
99
+ auto: true,
100
+ },
101
+ {
102
+ id: 'tax',
103
+ tier: 1,
104
+ status: signals.taxZonesCount > 0 || onboarding.taxNoneNeeded === true
105
+ ? 'complete'
106
+ : 'incomplete',
107
+ auto: true,
108
+ hasManualOverride: true, // "I don't collect tax"
109
+ },
110
+ // Tier 2
111
+ {
112
+ id: 'logo',
113
+ tier: 2,
114
+ status: onboarding.logoUploaded ? 'complete' : 'incomplete',
115
+ auto: true,
116
+ },
117
+ {
118
+ id: 'domain',
119
+ tier: 2,
120
+ status: customDomainVerified ? 'complete' : 'incomplete',
121
+ auto: true,
122
+ },
123
+ {
124
+ id: 'legal',
125
+ tier: 2,
126
+ status: onboarding.legalPagesReviewed ? 'complete' : 'incomplete',
127
+ auto: false,
128
+ },
129
+ // Tier 3
130
+ {
131
+ id: 'team',
132
+ tier: 3,
133
+ status: signals.adminCount > 1 ? 'complete' : 'incomplete',
134
+ auto: true,
135
+ },
136
+ {
137
+ id: 'analytics',
138
+ tier: 3,
139
+ status: analyticsKeys.length > 0 ? 'complete' : 'incomplete',
140
+ auto: true,
141
+ },
142
+ ];
143
+ // --- Build progress -----------------------------------------------------
144
+ const tier1Tasks = tasks.filter((t) => t.tier === 1);
145
+ const tier2Tasks = tasks.filter((t) => t.tier === 2);
146
+ const tier3Tasks = tasks.filter((t) => t.tier === 3);
147
+ const completeOf = (xs) => xs.filter((t) => t.status === 'complete').length;
148
+ const completeTotal = completeOf(tasks);
149
+ const total = tasks.length;
150
+ // --- Visibility ---------------------------------------------------------
151
+ // Hide once the merchant has explicitly dismissed (which they can only do
152
+ // after 100% complete). Otherwise show — even at 100%, we want one render
153
+ // pass with the celebration state, then the client can auto-collapse.
154
+ const dismissedAt = onboarding.dismissedAt ?? null;
155
+ const visibility = dismissedAt ? 'hide' : 'show';
156
+ return NextResponse.json({
157
+ tasks,
158
+ progress: {
159
+ total,
160
+ complete: completeTotal,
161
+ tier1: { complete: completeOf(tier1Tasks), total: tier1Tasks.length },
162
+ tier2: { complete: completeOf(tier2Tasks), total: tier2Tasks.length },
163
+ tier3: { complete: completeOf(tier3Tasks), total: tier3Tasks.length },
164
+ },
165
+ visibility,
166
+ dismissedAt,
167
+ });
168
+ }
169
+ catch (error) {
170
+ console.error('[Setup Guide API] GET error:', error);
171
+ return NextResponse.json({ error: 'Failed to fetch setup guide', code: 'INTERNAL_ERROR' }, { status: 500 });
172
+ }
173
+ }
174
+ function isValidKey(value) {
175
+ return (typeof value === 'string' && MANUAL_MARK_KEYS.includes(value));
176
+ }
177
+ export async function POST(request) {
178
+ const guard = await requireAdmin({ permission: 'settings.write' });
179
+ if (!guard.ok)
180
+ return guard.response;
181
+ let body;
182
+ try {
183
+ body = await request.json();
184
+ }
185
+ catch {
186
+ return NextResponse.json({ error: 'Invalid JSON body', code: 'VALIDATION_ERROR' }, { status: 400 });
187
+ }
188
+ if (!isValidKey(body.key)) {
189
+ return NextResponse.json({
190
+ error: `Unknown manual-mark key. Allowed: ${MANUAL_MARK_KEYS.join(', ')}`,
191
+ code: 'VALIDATION_ERROR',
192
+ }, { status: 400 });
193
+ }
194
+ if (typeof body.value !== 'boolean') {
195
+ return NextResponse.json({ error: '`value` must be a boolean', code: 'VALIDATION_ERROR' }, { status: 400 });
196
+ }
197
+ try {
198
+ if (body.key === 'dismiss') {
199
+ // Special case: write a timestamp instead of a boolean. We store the
200
+ // ISO string so an admin tool / merchant support can see WHEN they
201
+ // dismissed (not just THAT they did).
202
+ await setOnboardingFlag('dismissedAt', body.value ? new Date().toISOString() : undefined);
203
+ }
204
+ else if (body.key === 'reopen') {
205
+ await setOnboardingFlag('dismissedAt', undefined);
206
+ }
207
+ else {
208
+ // Standard boolean flag
209
+ await setOnboardingFlag(body.key, body.value);
210
+ }
211
+ return NextResponse.json({ ok: true });
212
+ }
213
+ catch (error) {
214
+ console.error('[Setup Guide API] manual-mark error:', error);
215
+ return NextResponse.json({ error: 'Failed to update setup guide', code: 'INTERNAL_ERROR' }, { status: 500 });
216
+ }
217
+ }
218
+ //# sourceMappingURL=setup-guide.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-guide.js","sourceRoot":"","sources":["../../../src/admin/api/setup-guide.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@
10
10
  * ```
11
11
  */
12
12
  import { NextRequest, NextResponse } from 'next/server';
13
+ import { type DashboardSummary } from '../../core/db/queries';
13
14
  import type { AdminApiError, DashboardStats, LowStockItem } from '../types';
14
15
  interface StatsResponse {
15
16
  stats: DashboardStats;
@@ -23,6 +24,8 @@ interface StatsResponse {
23
24
  status: string;
24
25
  count: number;
25
26
  }[];
27
+ /** Period-scoped summary with deltas + best seller. Present when ?period= is set. */
28
+ summary?: DashboardSummary;
26
29
  }
27
30
  /**
28
31
  * GET /api/admin/stats
@@ -1 +1 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/admin/api/stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AASvD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAM3E,UAAU,aAAa;IACrB,KAAK,EAAE,cAAc,CAAA;IACrB,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,YAAY,EAAE,OAAO,EAAE,CAAA;IACvB,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAClD,cAAc,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CACrD;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,GAAG,CACvB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,CAAC,aAAa,GAAG,aAAa,CAAC,CAAC,CAyDtD"}
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/admin/api/stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAEvD,OAAO,EAOL,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAM3E,UAAU,aAAa;IACrB,KAAK,EAAE,cAAc,CAAA;IACrB,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,YAAY,EAAE,OAAO,EAAE,CAAA;IACvB,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAClD,cAAc,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACpD,qFAAqF;IACrF,OAAO,CAAC,EAAE,gBAAgB,CAAA;CAC3B;AAcD;;;;;;;;;;GAUG;AACH,wBAAsB,GAAG,CACvB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,CAAC,aAAa,GAAG,aAAa,CAAC,CAAC,CAkEtD"}
@@ -11,7 +11,14 @@
11
11
  */
12
12
  import { NextResponse } from 'next/server';
13
13
  import { requireAdmin } from '../server/admin-session';
14
- import { getStoreStats, getLowStockProducts, getRecentOrders, getRevenueByPeriod, getOrdersByStatus, } from '../../core/db/queries';
14
+ import { getStoreStats, getLowStockProducts, getRecentOrders, getRevenueByPeriod, getOrdersByStatus, getDashboardSummary, } from '../../core/db/queries';
15
+ // Map the public period code to a number of calendar days.
16
+ const PERIOD_DAYS = {
17
+ today: 1,
18
+ '7d': 7,
19
+ '30d': 30,
20
+ '90d': 90,
21
+ };
15
22
  // =============================================================================
16
23
  // Handler
17
24
  // =============================================================================
@@ -39,11 +46,15 @@ export async function GET(request) {
39
46
  const includeOrderStatus = searchParams.get('includeOrderStatus') === 'true';
40
47
  const lowStockThreshold = parseInt(searchParams.get('lowStockThreshold') || '10', 10);
41
48
  const recentOrdersLimit = parseInt(searchParams.get('recentOrdersLimit') || '5', 10);
42
- // Fetch core stats in parallel
43
- const [stats, lowStockData, recentOrders] = await Promise.all([
49
+ const periodCode = searchParams.get('period');
50
+ const periodDays = periodCode ? PERIOD_DAYS[periodCode] : null;
51
+ // Fetch core stats in parallel — include the period-scoped summary when
52
+ // the client asks for one.
53
+ const [stats, lowStockData, recentOrders, summary] = await Promise.all([
44
54
  getStoreStats(),
45
55
  getLowStockProducts(lowStockThreshold),
46
56
  getRecentOrders(recentOrdersLimit),
57
+ periodDays ? getDashboardSummary(periodDays) : Promise.resolve(undefined),
47
58
  ]);
48
59
  // Transform low stock data
49
60
  const lowStock = lowStockData.map((item) => ({
@@ -59,9 +70,13 @@ export async function GET(request) {
59
70
  lowStock,
60
71
  recentOrders,
61
72
  };
62
- // Optionally include revenue data
73
+ if (summary) {
74
+ response.summary = summary;
75
+ }
76
+ // Optionally include revenue data — match the requested period when set,
77
+ // otherwise default to 30 days.
63
78
  if (includeRevenue) {
64
- response.revenueByDay = await getRevenueByPeriod(30);
79
+ response.revenueByDay = await getRevenueByPeriod(periodDays ?? 30);
65
80
  }
66
81
  // Optionally include order status breakdown
67
82
  if (includeOrderStatus) {
@@ -1 +1 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/admin/api/stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAe,YAAY,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,uBAAuB,CAAA;AAe9B,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CACvB,OAAoB;IAEpB,IAAI,CAAC;QACH,sEAAsE;QACtE,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAA;QAC/D,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,KAAK,CAAC,QAAQ,CAAA;QACvB,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAA;QAEjD,gBAAgB;QAChB,MAAM,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,MAAM,CAAA;QACpE,MAAM,kBAAkB,GAAG,YAAY,CAAC,GAAG,CAAC,oBAAoB,CAAC,KAAK,MAAM,CAAA;QAC5E,MAAM,iBAAiB,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAA;QACrF,MAAM,iBAAiB,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;QAEpF,+BAA+B;QAC/B,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC5D,aAAa,EAAE;YACf,mBAAmB,CAAC,iBAAiB,CAAC;YACtC,eAAe,CAAC,iBAAiB,CAAC;SACnC,CAAC,CAAA;QAEF,2BAA2B;QAC3B,MAAM,QAAQ,GAAmB,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC3D,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;YAC1B,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YAC9B,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;YAC1B,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YAC9B,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;SAClC,CAAC,CAAC,CAAA;QAEH,iBAAiB;QACjB,MAAM,QAAQ,GAAkB;YAC9B,KAAK;YACL,QAAQ;YACR,YAAY;SACb,CAAA;QAED,kCAAkC;QAClC,IAAI,cAAc,EAAE,CAAC;YACnB,QAAQ,CAAC,YAAY,GAAG,MAAM,kBAAkB,CAAC,EAAE,CAAC,CAAA;QACtD,CAAC;QAED,4CAA4C;QAC5C,IAAI,kBAAkB,EAAE,CAAC;YACvB,QAAQ,CAAC,cAAc,GAAG,MAAM,iBAAiB,EAAE,CAAA;QACrD,CAAC;QAED,OAAO,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAA;QACpD,OAAO,YAAY,CAAC,IAAI,CACtB,EAAE,KAAK,EAAE,iCAAiC,EAAE,IAAI,EAAE,gBAAgB,EAAE,EACpE,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAA;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/admin/api/stats.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AdminLayout.d.ts","sourceRoot":"","sources":["../../../src/admin/components/AdminLayout.tsx"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,OAAO,2BAA2B,CAAA;AAMlC,UAAU,wBAAyB,SAAQ,gBAAgB;IACzD,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;IACpB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,SAAS,EACT,SAAmB,EACnB,QAAc,EACd,QAAQ,EACR,IAAI,EACJ,SAAc,GACf,EAAE,wBAAwB,2CAyB1B"}
1
+ {"version":3,"file":"AdminLayout.d.ts","sourceRoot":"","sources":["../../../src/admin/components/AdminLayout.tsx"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAQtC,OAAO,2BAA2B,CAAA;AAMlC,UAAU,wBAAyB,SAAQ,gBAAgB;IACzD,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;IACpB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,SAAS,EACT,SAAmB,EACnB,QAAc,EACd,QAAQ,EACR,IAAI,EACJ,SAAc,GACf,EAAE,wBAAwB,2CA0B1B"}
@@ -8,7 +8,10 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
8
  * User menu is rendered in the sidebar footer via AdminNav.
9
9
  */
10
10
  import { AdminNav } from './AdminNav';
11
- import { ExampleContentBanner } from './ExampleContentBanner';
11
+ // `ExampleContentBanner` (R107) was retired in favor of the SetupGuide,
12
+ // which subsumes the "review your example content" nudge into its
13
+ // "Add or edit your first product" task. The banner component is still
14
+ // exported for any custom store that imported it directly.
12
15
  // Import Rovela admin theme CSS
13
16
  import '../styles/admin-theme.css';
14
17
  // =============================================================================
@@ -31,6 +34,6 @@ import '../styles/admin-theme.css';
31
34
  * ```
32
35
  */
33
36
  export function AdminLayout({ children, activeNav, storeName = 'Admin', storeUrl = '/', navItems, logo, className = '', }) {
34
- return (_jsx("div", { className: `rovela-admin-theme ${className}`, children: _jsxs("div", { className: "admin-layout", children: [_jsx(AdminNav, { activeNav: activeNav, items: navItems, storeName: storeName, logo: logo, storeUrl: storeUrl }), _jsx("div", { className: "admin-layout-main", children: _jsxs("main", { className: "admin-layout-content", children: [_jsx(ExampleContentBanner, {}), children] }) })] }) }));
37
+ return (_jsx("div", { className: `rovela-admin-theme ${className}`, children: _jsxs("div", { className: "admin-layout", children: [_jsx(AdminNav, { activeNav: activeNav, items: navItems, storeName: storeName, logo: logo, storeUrl: storeUrl }), _jsx("div", { className: "admin-layout-main", children: _jsx("main", { className: "admin-layout-content", children: children }) })] }) }));
35
38
  }
36
39
  //# sourceMappingURL=AdminLayout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdminLayout.js","sourceRoot":"","sources":["../../../src/admin/components/AdminLayout.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAgB,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAI7D,gCAAgC;AAChC,OAAO,2BAA2B,CAAA;AAiBlC,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,QAAQ,EACR,SAAS,EACT,SAAS,GAAG,OAAO,EACnB,QAAQ,GAAG,GAAG,EACd,QAAQ,EACR,IAAI,EACJ,SAAS,GAAG,EAAE,GACW;IACzB,OAAO,CACL,cAAK,SAAS,EAAE,sBAAsB,SAAS,EAAE,YAC/C,eAAK,SAAS,EAAC,cAAc,aAE3B,KAAC,QAAQ,IACP,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,GAClB,EAGF,cAAK,SAAS,EAAC,mBAAmB,YAChC,gBAAM,SAAS,EAAC,sBAAsB,aAGpC,KAAC,oBAAoB,KAAG,EACvB,QAAQ,IACJ,GACH,IACF,GACF,CACP,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"AdminLayout.js","sourceRoot":"","sources":["../../../src/admin/components/AdminLayout.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAgB,MAAM,YAAY,CAAA;AAInD,wEAAwE;AACxE,kEAAkE;AAClE,uEAAuE;AACvE,2DAA2D;AAE3D,gCAAgC;AAChC,OAAO,2BAA2B,CAAA;AAiBlC,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,QAAQ,EACR,SAAS,EACT,SAAS,GAAG,OAAO,EACnB,QAAQ,GAAG,GAAG,EACd,QAAQ,EACR,IAAI,EACJ,SAAS,GAAG,EAAE,GACW;IACzB,OAAO,CACL,cAAK,SAAS,EAAE,sBAAsB,SAAS,EAAE,YAC/C,eAAK,SAAS,EAAC,cAAc,aAE3B,KAAC,QAAQ,IACP,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,GAClB,EAGF,cAAK,SAAS,EAAC,mBAAmB,YAChC,eAAM,SAAS,EAAC,sBAAsB,YAKnC,QAAQ,GACJ,GACH,IACF,GACF,CACP,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"AdminNav.d.ts","sourceRoot":"","sources":["../../../src/admin/components/AdminNav.tsx"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAW7C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,OAAO,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wDAAwD;IACxD,KAAK,CAAC,EAAE,OAAO,EAAE,CAAA;IACjB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mBAAmB;IACnB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AA+HD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EACvB,SAAS,EACT,KAAK,EACL,SAAS,EAAE,aAAuB,EAClC,IAAI,EACJ,QAAc,EACd,SAAc,GACf,EAAE,aAAa,2CAwJf"}
1
+ {"version":3,"file":"AdminNav.d.ts","sourceRoot":"","sources":["../../../src/admin/components/AdminNav.tsx"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAW7C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,OAAO,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wDAAwD;IACxD,KAAK,CAAC,EAAE,OAAO,EAAE,CAAA;IACjB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mBAAmB;IACnB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AA4ID;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EACvB,SAAS,EACT,KAAK,EACL,SAAS,EAAE,aAAuB,EAClC,IAAI,EACJ,QAAc,EACd,SAAc,GACf,EAAE,aAAa,2CAwJf"}
@@ -51,8 +51,21 @@ const defaultNavGroups = [
51
51
  * Remove nav items the current role cannot access. For Phase 2, this only
52
52
  * hides `users` from managers and regular users — owners and administrators
53
53
  * keep full visibility.
54
+ *
55
+ * Pop-in fix (R-sidebar-1): when `role` is null/undefined the session fetch
56
+ * hasn't resolved yet. In that window we render the Users item OPTIMISTICALLY
57
+ * so owners and administrators (the common case) see a stable layout from
58
+ * first paint — no flash, no CLS.
59
+ *
60
+ * Trade-off: managers and regular users briefly see a Users link they can't
61
+ * use. They're a small minority of admin sessions; if they click it during
62
+ * the ~200–400ms flash, the server-side `requireAdmin({ permission: 'users.read' })`
63
+ * gate (CLAUDE.md §24) returns 403. Defense-in-depth holds.
54
64
  */
55
65
  function filterNavGroupsByRole(groups, role) {
66
+ const roleResolved = typeof role === 'string' && role.length > 0;
67
+ if (!roleResolved)
68
+ return groups;
56
69
  const canManageUsers = role === 'owner' || role === 'administrator' || role === 'admin';
57
70
  if (canManageUsers)
58
71
  return groups;
@@ -1 +1 @@
1
- {"version":3,"file":"AdminNav.js","sourceRoot":"","sources":["../../../src/admin/components/AdminNav.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;GAQG;AAEH,OAAO,KAAyB,MAAM,OAAO,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3J,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAiC/C,gFAAgF;AAChF,4BAA4B;AAC5B,gFAAgF;AAEhF,MAAM,gBAAgB,GAAe;IACnC;QACE,KAAK,EAAE,MAAM;QACb,KAAK,EAAE;YACL,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;YACvD,qEAAqE;YACrE,4DAA4D;YAC5D,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE;SACtD;KACF;IACD;QACE,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE;YACL,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE;YAC9D,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE;SACrE;KACF;IACD;QACE,KAAK,EAAE,OAAO;QACd,KAAK,EAAE;YACL,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE;YACxD,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE;YACjE,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE;YAC9D,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE;YAC9D,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;YAC/C,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE;SAClE;KACF;CACF,CAAA;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAC5B,MAAkB,EAClB,IAA+B;IAE/B,MAAM,cAAc,GAClB,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,eAAe,IAAI,IAAI,KAAK,OAAO,CAAA;IAElE,IAAI,cAAc;QAAE,OAAO,MAAM,CAAA;IAEjC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5B,GAAG,KAAK;QACR,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC;KACzD,CAAC,CAAC,CAAA;AACL,CAAC;AAED,MAAM,YAAY,GAAY,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAA;AAE5F,sEAAsE;AACtE,SAAS,UAAU,CAAC,EAAE,SAAS,GAAG,mBAAmB,EAAE,OAAO,GAAG,OAAO,EAAuD;IAC7H,OAAO;IACL,qDAAqD;IACrD,cACE,GAAG,EAAC,4BAA4B,EAChC,GAAG,EAAC,QAAQ,EACZ,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC,CAAC,CAAC,SAAS,GAC9E,CACH,CAAA;AACH,CAAC;AAED,MAAM,OAAO,GAAqD;IAChE,SAAS,EAAE,eAAe;IAC1B,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,OAAO;IACjB,UAAU,EAAE,UAAU;IACtB,MAAM,EAAE,aAAa;IACrB,SAAS,EAAE,KAAK;IAChB,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE,UAAU;IACpB,GAAG,EAAE,OAAO;IACZ,SAAS,EAAE,GAAG;IACd,QAAQ,EAAE,QAAQ;CACnB,CAAA;AAED,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAEhF,SAAS,aAAa,CAAC,EACrB,IAAI,EACJ,QAAQ,GAIT;IACC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAE1C,OAAO,CACL,aACE,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,SAAS,EAAE,sBAAsB,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,aAG3D,eAAM,SAAS,EAAC,yBAAyB,GAAG,EAG5C,eAAM,SAAS,EAAC,yBAAyB,YACtC,IAAI,IAAI,CACP,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;oBACxB,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,IAAmD,EAAE,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAAC,CACtH,GACI,EAGP,eAAM,SAAS,EAAC,0BAA0B,YACvC,IAAI,CAAC,KAAK,GACN,IACL,CACL,CAAA;AACH,CAAC;AAED,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,EACvB,SAAS,EACT,KAAK,EACL,SAAS,EAAE,aAAa,GAAG,OAAO,EAClC,IAAI,EACJ,QAAQ,GAAG,GAAG,EACd,SAAS,GAAG,EAAE,GACA;IACd,2EAA2E;IAC3E,MAAM,aAAa,GAAG,wBAAwB,EAAE,CAAA;IAEhD,yEAAyE;IACzE,uEAAuE;IACvE,8CAA8C;IAC9C,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,CAAA;IAEhC,oEAAoE;IACpE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,iBAAiB,GAAG,SAAS,IAAI,CAAC,GAAG,EAAE;QAC3C,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAA;QAC/B,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,WAAW,CAAA;QACvE,IAAI,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC;YAAE,OAAO,OAAO,CAAA;QACvD,IAAI,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAAE,OAAO,UAAU,CAAA;QAC7D,IAAI,QAAQ,CAAC,UAAU,CAAC,mBAAmB,CAAC;YAAE,OAAO,YAAY,CAAA;QACjE,IAAI,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC;YAAE,OAAO,QAAQ,CAAA;QACzD,IAAI,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAAC;YAAE,OAAO,WAAW,CAAA;QAC/D,IAAI,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAAE,OAAO,UAAU,CAAA;QAC7D,IAAI,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAAE,OAAO,UAAU,CAAA;QAC7D,IAAI,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,OAAO,KAAK,CAAA;QACnD,IAAI,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAAC;YAAE,OAAO,WAAW,CAAA;QAC/D,IAAI,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAAE,OAAO,UAAU,CAAA;QAC7D,yFAAyF;QACzF,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACpC,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YACpD,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAA;QACpB,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC,CAAC,EAAE,CAAA;IAEJ,+CAA+C;IAC/C,MAAM,SAAS,GAAG,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,SAAS,IAAI,aAAa,CAAC,CAAA;IAEzG,uFAAuF;IACvF,MAAM,OAAO,GAAG,aAAa,EAAE,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,IAAI,CAAA;IAExF,wEAAwE;IACxE,2BAA2B;IAC3B,MAAM,UAAU,GAAG,qBAAqB,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC,CAAA;IAE/E,wFAAwF;IACxF,MAAM,SAAS,GAAG,KAAK;QACrB,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QAC/C,CAAC,CAAC,UAAU,CAAA;IAEd,OAAO,CACL,eAAK,SAAS,EAAE,iBAAiB,SAAS,EAAE,aAE1C,cAAK,SAAS,EAAC,sBAAsB,YAClC,IAAI,IAAI,CACP,OAAO,CAAC,CAAC,CAAC;gBACR,uCAAuC;gBACvC,aAAG,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,2BAA2B,aAEpD,cACE,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,SAAS,EACd,SAAS,EAAC,oBAAoB,GAC9B,EACF,eAAK,SAAS,EAAC,2BAA2B,aACxC,eAAM,SAAS,EAAC,0BAA0B,YACvC,SAAS,GACL,EACP,eAAM,SAAS,EAAC,wBAAwB,4BAEjC,IACH,IACJ,CACL,CAAC,CAAC,CAAC;gBACF,gCAAgC;gBAChC,8BACE,cAAK,SAAS,EAAC,qBAAqB,YACjC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAC9B,EACN,eAAK,SAAS,EAAC,2BAA2B,aACxC,eAAM,SAAS,EAAC,0BAA0B,YACvC,SAAS,GACL,EACP,eAAM,SAAS,EAAC,wBAAwB,4BAEjC,IACH,IACL,CACJ,CACF,GACG,EAGN,cAAK,SAAS,EAAC,mBAAmB,YAChC,cAAK,SAAS,EAAC,sBAAsB,YAClC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACxB,eAAuB,SAAS,EAAC,uBAAuB,aACtD,YAAG,SAAS,EAAC,6BAA6B,YACvC,KAAK,CAAC,KAAK,GACV,EACJ,aAAI,SAAS,EAAC,qBAAqB,YAChC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACzB,uBACE,KAAC,aAAa,IACZ,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC,EAAE,GACvC,IAJK,IAAI,CAAC,EAAE,CAKX,CACN,CAAC,GACC,KAbG,KAAK,CAAC,KAAK,CAcf,CACP,CAAC,GACE,GACF,EAGN,cAAK,SAAS,EAAC,sBAAsB,YACnC,eAAK,SAAS,EAAC,8BAA8B,aAE3C,KAAC,aAAa,IACZ,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,iBAAiB,KAAK,UAAU,GAC1C,EAGF,aACE,IAAI,EAAE,QAAQ,EACd,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,SAAS,EAAC,oBAAoB,aAE9B,KAAC,YAAY,IAAC,SAAS,EAAC,yBAAyB,GAAG,kBAElD,EAGJ,cAAK,SAAS,EAAC,yBAAyB,YACtC,KAAC,aAAa,KAAG,GACb,EAGN,aACE,IAAI,EAAC,mBAAmB,EACxB,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,SAAS,EAAC,0BAA0B,aAEpC,wCAAuB,EACvB,KAAC,UAAU,IAAC,SAAS,EAAC,mBAAmB,GAAG,EAC5C,eAAM,SAAS,EAAC,uBAAuB,uBAAc,IACnD,IACA,GACF,IACF,CACP,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"AdminNav.js","sourceRoot":"","sources":["../../../src/admin/components/AdminNav.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LowStockAlert.d.ts","sourceRoot":"","sources":["../../../src/admin/components/LowStockAlert.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAMlD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,EAC5B,SAAc,EACd,WAA+B,EAC/B,SAAc,GACf,EAAE,kBAAkB,2CA+GpB"}
1
+ {"version":3,"file":"LowStockAlert.d.ts","sourceRoot":"","sources":["../../../src/admin/components/LowStockAlert.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAMlD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,EAC5B,SAAc,EACd,WAA+B,EAC/B,SAAc,GACf,EAAE,kBAAkB,2CAoHpB"}
@@ -26,7 +26,7 @@ export function LowStockAlert({ threshold = 10, viewAllHref = '/admin/products',
26
26
  const isHealthy = !isLoading && lowStock.length === 0;
27
27
  return (_jsxs("div", { className: `admin-card ${className}`, children: [_jsxs("div", { className: "admin-widget-header", children: [_jsxs("div", { className: "flex items-center gap-3", children: [isHealthy ? (_jsx("div", { className: "admin-status-icon admin-status-icon-success", children: _jsx(CheckCircle, { className: "h-5 w-5" }) })) : (_jsx("div", { className: "admin-status-icon admin-status-icon-warning", children: _jsx(AlertTriangle, { className: "h-5 w-5" }) })), _jsxs("div", { children: [_jsx("h3", { className: "admin-widget-title", children: isHealthy ? 'Inventory Healthy' : 'Low Stock Alert' }), _jsx("p", { className: "admin-widget-subtitle", children: isHealthy
28
28
  ? 'All products are well stocked'
29
- : `${lowStock.length} item${lowStock.length !== 1 ? 's' : ''} need attention` })] })] }), lowStock.length > 0 && (_jsxs("a", { href: viewAllHref, className: "admin-view-all-link", children: ["View all", _jsx(ChevronRight, { className: "h-4 w-4" })] }))] }), _jsxs("div", { children: [isLoading ? (_jsx("div", { className: "p-6", children: _jsx("div", { className: "space-y-4", children: [...Array(3)].map((_, i) => (_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "space-y-2", children: [_jsx("div", { className: "admin-skeleton admin-skeleton-md w-32 rounded" }), _jsx("div", { className: "admin-skeleton admin-skeleton-sm w-20 rounded" })] }), _jsx("div", { className: "admin-skeleton admin-skeleton-lg w-16 rounded" })] }, i))) }) })) : lowStock.length === 0 ? (_jsxs("div", { className: "admin-empty-state py-12", children: [_jsx("div", { className: "admin-status-icon admin-status-icon-success p-4", children: _jsx(CheckCircle, { className: "h-8 w-8" }) }), _jsx("p", { className: "admin-empty-text mt-4 text-sm font-medium", children: "All stocked up!" }), _jsxs("p", { className: "admin-empty-subtext text-xs", children: ["No products below ", threshold, " units in stock"] })] })) : (_jsx("div", { children: lowStock.slice(0, 5).map((item) => (_jsxs("div", { className: "admin-inventory-item", children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("a", { href: `/admin/products/${item.productId}`, className: "admin-inventory-item-link", children: item.productName }), _jsx("p", { className: "admin-inventory-item-variant", children: item.variantName })] }), _jsx("div", { className: "ml-4 flex-shrink-0", children: _jsx("span", { className: `admin-badge ${item.inventory === 0
29
+ : `${lowStock.length} item${lowStock.length !== 1 ? 's' : ''} need attention` })] })] }), lowStock.length > 0 && (_jsxs("a", { href: viewAllHref, className: "admin-view-all-link", children: ["View all", _jsx(ChevronRight, { className: "h-4 w-4" })] }))] }), _jsxs("div", { children: [isLoading ? (_jsx("div", { className: "p-6", children: _jsx("div", { className: "space-y-4", children: [...Array(3)].map((_, i) => (_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "space-y-2", children: [_jsx("div", { className: "admin-skeleton admin-skeleton-md w-32 rounded" }), _jsx("div", { className: "admin-skeleton admin-skeleton-sm w-20 rounded" })] }), _jsx("div", { className: "admin-skeleton admin-skeleton-lg w-16 rounded" })] }, i))) }) })) : lowStock.length === 0 ? (_jsxs("div", { className: "admin-empty-state py-12", children: [_jsx("div", { className: "admin-status-icon admin-status-icon-success p-4", children: _jsx(CheckCircle, { className: "h-8 w-8" }) }), _jsx("p", { className: "admin-empty-text mt-4 text-sm font-medium", children: "All stocked up!" }), _jsxs("p", { className: "admin-empty-subtext text-xs", children: ["No products below ", threshold, " units in stock"] })] })) : (_jsx("div", { children: lowStock.slice(0, 5).map((item) => (_jsxs("div", { className: "admin-inventory-item", children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("a", { href: `/admin/products/${item.productId}${item.variantId ? `?variant=${item.variantId}` : ''}`, className: "admin-inventory-item-link", children: item.productName }), _jsx("p", { className: "admin-inventory-item-variant", children: item.variantName })] }), _jsx("div", { className: "ml-4 flex-shrink-0", children: _jsx("span", { className: `admin-badge ${item.inventory === 0
30
30
  ? 'admin-badge-out-of-stock'
31
31
  : 'admin-badge-low-stock'}`, children: item.inventory === 0 ? 'Out of stock' : `${item.inventory} left` }) })] }, item.variantId))) })), !isLoading && lowStock.length > 5 && (_jsx("div", { className: "admin-card-footer text-center", children: _jsxs("a", { href: viewAllHref, className: "admin-link-primary text-sm", children: ["+", lowStock.length - 5, " more items"] }) }))] })] }));
32
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LowStockAlert.js","sourceRoot":"","sources":["../../../src/admin/components/LowStockAlert.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LowStockAlert.js","sourceRoot":"","sources":["../../../src/admin/components/LowStockAlert.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"OrderStatusChart.d.ts","sourceRoot":"","sources":["../../../src/admin/components/OrderStatusChart.tsx"],"names":[],"mappings":"AAeA,MAAM,WAAW,qBAAqB;IACpC,6BAA6B;IAC7B,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACzC,oBAAoB;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAoDD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,SAAiB,EACjB,SAAc,GACf,EAAE,qBAAqB,2CA6FvB"}
1
+ {"version":3,"file":"OrderStatusChart.d.ts","sourceRoot":"","sources":["../../../src/admin/components/OrderStatusChart.tsx"],"names":[],"mappings":"AAeA,MAAM,WAAW,qBAAqB;IACpC,6BAA6B;IAC7B,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACzC,oBAAoB;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAwDD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,SAAiB,EACjB,SAAc,GACf,EAAE,qBAAqB,2CAmGvB"}
@@ -15,6 +15,10 @@ const statusConfig = {
15
15
  paid: { label: 'Paid', color: 'hsl(var(--admin-success))' },
16
16
  shipped: { label: 'Shipped', color: 'hsl(var(--admin-info))' },
17
17
  delivered: { label: 'Delivered', color: 'hsl(var(--admin-primary))' },
18
+ // Transient — order is paid but the customer asked for a return that
19
+ // hasn't been approved/rejected yet. Distinct amber so it doesn't blend
20
+ // into "Pending" or "Refunded".
21
+ return_requested: { label: 'Return requested', color: 'hsl(var(--admin-warning) / 0.7)' },
18
22
  cancelled: { label: 'Cancelled', color: 'hsl(var(--admin-destructive))' },
19
23
  refunded: { label: 'Refunded', color: 'hsl(var(--admin-foreground-muted))' },
20
24
  };
@@ -45,7 +49,9 @@ export function OrderStatusChart({ data, isLoading = false, className = '', }) {
45
49
  }));
46
50
  // Calculate total
47
51
  const totalOrders = data.reduce((sum, item) => sum + item.count, 0);
48
- return (_jsxs("div", { className: `admin-chart ${className}`, children: [_jsx("div", { className: "admin-chart-header", children: _jsxs("div", { children: [_jsx("h3", { className: "admin-chart-title", children: "Order Status" }), _jsx("p", { className: "admin-chart-subtitle", children: "Distribution by status" })] }) }), _jsx("div", { className: "admin-chart-body", children: isLoading ? (_jsx("div", { className: "admin-chart-loading", children: _jsx("div", { className: "admin-chart-spinner" }) })) : totalOrders === 0 ? (_jsxs("div", { className: "admin-chart-empty", children: [_jsx(ShoppingBag, { className: "h-12 w-12 admin-chart-empty-icon", strokeWidth: 1 }), _jsx("p", { className: "admin-chart-empty-text", children: "No orders yet" }), _jsx("p", { className: "admin-chart-empty-subtext", children: "Order breakdown will appear here" })] })) : (_jsxs("div", { className: "flex items-center gap-6", children: [_jsxs("div", { className: "relative flex-shrink-0", children: [_jsx(ResponsiveContainer, { width: 180, height: 180, children: _jsxs(PieChart, { children: [_jsx(Pie, { data: chartData, cx: "50%", cy: "50%", innerRadius: 55, outerRadius: 80, paddingAngle: 2, dataKey: "count", children: chartData.map((entry, index) => (_jsx(Cell, { fill: entry.color }, `cell-${index}`))) }), _jsx(Tooltip, { content: _jsx(CustomTooltip, {}) })] }) }), _jsxs("div", { className: "admin-chart-center", children: [_jsx("p", { className: "admin-chart-center-value", children: totalOrders }), _jsx("p", { className: "admin-chart-center-label", children: "Total" })] })] }), _jsx("div", { className: "admin-chart-legend", children: chartData.map((item) => {
52
+ return (_jsxs("div", { className: `admin-chart ${className}`, children: [_jsx("div", { className: "admin-chart-header", children: _jsxs("div", { children: [_jsx("h3", { className: "admin-chart-title", children: "Order Status" }), _jsx("p", { className: "admin-chart-subtitle", children: "Distribution by status" })] }) }), _jsx("div", { className: "admin-chart-body", children: isLoading ? (_jsx("div", { className: "admin-chart-loading", children: _jsx("div", { className: "admin-chart-spinner" }) })) : totalOrders === 0 ? (_jsxs("div", { className: "admin-chart-empty", children: [_jsx(ShoppingBag, { className: "h-12 w-12 admin-chart-empty-icon", strokeWidth: 1 }), _jsx("p", { className: "admin-chart-empty-text", children: "No orders yet" }), _jsx("p", { className: "admin-chart-empty-subtext", children: "Order breakdown will appear here" })] })) : (_jsxs("div", { className: "flex items-center gap-6", role: "img", "aria-label": `Order status breakdown: ${chartData
53
+ .map((d) => `${d.label} ${d.count}`)
54
+ .join(', ')}`, children: [_jsxs("div", { className: "relative flex-shrink-0", children: [_jsx(ResponsiveContainer, { width: 220, height: 220, children: _jsxs(PieChart, { children: [_jsx(Pie, { data: chartData, cx: "50%", cy: "50%", innerRadius: 70, outerRadius: 100, paddingAngle: 2, dataKey: "count", children: chartData.map((entry, index) => (_jsx(Cell, { fill: entry.color }, `cell-${index}`))) }), _jsx(Tooltip, { content: _jsx(CustomTooltip, {}) })] }) }), _jsxs("div", { className: "admin-chart-center", children: [_jsx("p", { className: "admin-chart-center-value", children: totalOrders }), _jsx("p", { className: "admin-chart-center-label", children: "Total" })] })] }), _jsx("div", { className: "admin-chart-legend", children: chartData.map((item) => {
49
55
  const percentage = totalOrders > 0
50
56
  ? Math.round((item.count / totalOrders) * 100)
51
57
  : 0;
@@ -1 +1 @@
1
- {"version":3,"file":"OrderStatusChart.js","sourceRoot":"","sources":["../../../src/admin/components/OrderStatusChart.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OrderStatusChart.js","sourceRoot":"","sources":["../../../src/admin/components/OrderStatusChart.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAe5E,gFAAgF;AAChF,mDAAmD;AACnD,gFAAgF;AAEhF,MAAM,YAAY,GAAqD;IACrE,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,2BAA2B,EAAE;IACjE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,2BAA2B,EAAE;IAC3D,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,wBAAwB,EAAE;IAC9D,SAAS,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,2BAA2B,EAAE;IACrE,qEAAqE;IACrE,wEAAwE;IACxE,gCAAgC;IAChC,gBAAgB,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,iCAAiC,EAAE;IACzF,SAAS,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,+BAA+B,EAAE;IACzE,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,oCAAoC,EAAE;CAC7E,CAAA;AAWD,SAAS,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,EAAgB;IACtD,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAEvD,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;IAC/B,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAA;IAE/G,OAAO,CACL,eAAK,SAAS,EAAC,qBAAqB,aAClC,eAAK,SAAS,EAAC,yBAAyB,aACtC,eACE,SAAS,EAAC,wBAAwB,EAClC,KAAK,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,KAAK,EAAE,GACxC,EACF,eAAM,SAAS,EAAC,2BAA2B,YACxC,MAAM,CAAC,KAAK,GACR,IACH,EACN,aAAG,SAAS,EAAC,gCAAgC,aAC1C,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,eAC1B,IACA,CACP,CAAA;AACH,CAAC;AAED,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAC/B,IAAI,EACJ,SAAS,GAAG,KAAK,EACjB,SAAS,GAAG,EAAE,GACQ;IACtB,2BAA2B;IAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACpC,GAAG,IAAI;QACP,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,oCAAoC;QAC/E,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,MAAM;KACvD,CAAC,CAAC,CAAA;IAEH,kBAAkB;IAClB,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAEnE,OAAO,CACL,eAAK,SAAS,EAAE,eAAe,SAAS,EAAE,aAExC,cAAK,SAAS,EAAC,oBAAoB,YACjC,0BACE,aAAI,SAAS,EAAC,mBAAmB,6BAAkB,EACnD,YAAG,SAAS,EAAC,sBAAsB,uCAA2B,IAC1D,GACF,EAGN,cAAK,SAAS,EAAC,kBAAkB,YAC9B,SAAS,CAAC,CAAC,CAAC,CACX,cAAK,SAAS,EAAC,qBAAqB,YAClC,cAAK,SAAS,EAAC,qBAAqB,GAAG,GACnC,CACP,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CACtB,eAAK,SAAS,EAAC,mBAAmB,aAChC,KAAC,WAAW,IAAC,SAAS,EAAC,kCAAkC,EAAC,WAAW,EAAE,CAAC,GAAI,EAC5E,YAAG,SAAS,EAAC,wBAAwB,8BAAkB,EACvD,YAAG,SAAS,EAAC,2BAA2B,iDAEpC,IACA,CACP,CAAC,CAAC,CAAC,CACF,eACE,SAAS,EAAC,yBAAyB,EACnC,IAAI,EAAC,KAAK,gBACE,2BAA2B,SAAS;yBAC7C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;yBACnC,IAAI,CAAC,IAAI,CAAC,EAAE,aAGf,eAAK,SAAS,EAAC,wBAAwB,aACrC,KAAC,mBAAmB,IAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,YAC1C,MAAC,QAAQ,eACP,KAAC,GAAG,IACF,IAAI,EAAE,SAAS,EACf,EAAE,EAAC,KAAK,EACR,EAAE,EAAC,KAAK,EACR,WAAW,EAAE,EAAE,EACf,WAAW,EAAE,GAAG,EAChB,YAAY,EAAE,CAAC,EACf,OAAO,EAAC,OAAO,YAEd,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAC/B,KAAC,IAAI,IAAuB,IAAI,EAAE,KAAK,CAAC,KAAK,IAAlC,QAAQ,KAAK,EAAE,CAAuB,CAClD,CAAC,GACE,EACN,KAAC,OAAO,IAAC,OAAO,EAAE,KAAC,aAAa,KAAG,GAAI,IAC9B,GACS,EAEtB,eAAK,SAAS,EAAC,oBAAoB,aACjC,YAAG,SAAS,EAAC,0BAA0B,YAAE,WAAW,GAAK,EACzD,YAAG,SAAS,EAAC,0BAA0B,sBAAU,IAC7C,IACF,EAGN,cAAK,SAAS,EAAC,oBAAoB,YAChC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gCACtB,MAAM,UAAU,GAAG,WAAW,GAAG,CAAC;oCAChC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC;oCAC9C,CAAC,CAAC,CAAC,CAAA;gCAEL,OAAO,CACL,eAAuB,SAAS,EAAC,yBAAyB,aACxD,eAAK,SAAS,EAAC,yBAAyB,aACtC,eACE,SAAS,EAAC,wBAAwB,EAClC,KAAK,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,KAAK,EAAE,GACtC,EACF,eAAM,SAAS,EAAC,0BAA0B,YAAE,IAAI,CAAC,KAAK,GAAQ,IAC1D,EACN,eAAK,SAAS,EAAC,yBAAyB,aACtC,eAAM,SAAS,EAAC,0BAA0B,YAAE,IAAI,CAAC,KAAK,GAAQ,EAC9D,gBAAM,SAAS,EAAC,4BAA4B,kBAAG,UAAU,UAAU,IAC/D,KAXE,IAAI,CAAC,MAAM,CAYf,CACP,CAAA;4BACH,CAAC,CAAC,GACE,IACF,CACP,GACG,IACF,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { DashboardPeriod } from '../types';
2
+ export interface PeriodSelectorProps {
3
+ value: DashboardPeriod;
4
+ onChange: (next: DashboardPeriod) => void;
5
+ className?: string;
6
+ disabled?: boolean;
7
+ }
8
+ export declare function PeriodSelector({ value, onChange, className, disabled, }: PeriodSelectorProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=PeriodSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PeriodSelector.d.ts","sourceRoot":"","sources":["../../../src/admin/components/PeriodSelector.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE/C,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,eAAe,CAAA;IACtB,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAA;IACzC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AASD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,SAAuB,EACvB,QAAQ,GACT,EAAE,mBAAmB,2CAUrB"}
@@ -0,0 +1,19 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ /**
4
+ * @rovela/sdk/admin/components/PeriodSelector
5
+ *
6
+ * Time-window selector for the admin dashboard. Controls which window the
7
+ * metric cards + best seller card cover. Default = 30d.
8
+ */
9
+ import { AdminSelect } from './AdminSelect';
10
+ const OPTIONS = [
11
+ { value: 'today', label: 'Today' },
12
+ { value: '7d', label: 'Last 7 days' },
13
+ { value: '30d', label: 'Last 30 days' },
14
+ { value: '90d', label: 'Last 90 days' },
15
+ ];
16
+ export function PeriodSelector({ value, onChange, className = 'w-[160px]', disabled, }) {
17
+ return (_jsx(AdminSelect, { value: value, onChange: (v) => onChange(v), options: OPTIONS, className: className, disabled: disabled }));
18
+ }
19
+ //# sourceMappingURL=PeriodSelector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PeriodSelector.js","sourceRoot":"","sources":["../../../src/admin/components/PeriodSelector.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAU3C,MAAM,OAAO,GAAqD;IAChE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IAClC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE;IACrC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE;IACvC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE;CACxC,CAAA;AAED,MAAM,UAAU,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,SAAS,GAAG,WAAW,EACvB,QAAQ,GACY;IACpB,OAAO,CACL,KAAC,WAAW,IACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAoB,CAAC,EAC/C,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,GAClB,CACH,CAAA;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { DashboardSummaryPayload } from '../types';
2
+ export interface PrimaryMetricsRowProps {
3
+ summary: DashboardSummaryPayload | null;
4
+ isLoading: boolean;
5
+ /** ISO currency code (e.g. 'USD'). Forwarded to Intl formatters. */
6
+ currency: string;
7
+ /** BCP-47 locale (e.g. 'en-US') for number formatting. */
8
+ locale?: string;
9
+ }
10
+ export declare function PrimaryMetricsRow({ summary, isLoading, currency, locale, }: PrimaryMetricsRowProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=PrimaryMetricsRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrimaryMetricsRow.d.ts","sourceRoot":"","sources":["../../../src/admin/components/PrimaryMetricsRow.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAMvD,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAAA;IACvC,SAAS,EAAE,OAAO,CAAA;IAClB,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAA;IAChB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AA4FD,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,SAAS,EACT,QAAQ,EACR,MAAgB,GACjB,EAAE,sBAAsB,2CAyDxB"}