@burdenoff/microfe-store 2026.801.1 → 2026.819.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/dist/StoreAdminRoutes.js +27 -27
  2. package/dist/StoreRoot.js +78 -45
  3. package/dist/StoreRoot.js.map +1 -1
  4. package/dist/StoreRoutes.js +163 -85
  5. package/dist/StoreRoutes.js.map +1 -1
  6. package/dist/components/InstallAppModal.js +211 -137
  7. package/dist/components/InstallAppModal.js.map +1 -1
  8. package/dist/components/sourcing/SourcingConfirmationDialog.d.ts +15 -0
  9. package/dist/components/sourcing/SourcingConfirmationDialog.js +61 -0
  10. package/dist/components/sourcing/SourcingConfirmationDialog.js.map +1 -0
  11. package/dist/components/sourcing/SourcingUi.d.ts +51 -0
  12. package/dist/components/sourcing/SourcingUi.js +176 -0
  13. package/dist/components/sourcing/SourcingUi.js.map +1 -0
  14. package/dist/generated/global-operations.d.ts +713 -0
  15. package/dist/generated/global-operations.js +557 -175
  16. package/dist/generated/global-operations.js.map +1 -1
  17. package/dist/generated/global-types.d.ts +2158 -2159
  18. package/dist/generated/global-types.js +8 -2
  19. package/dist/generated/global-types.js.map +1 -1
  20. package/dist/hooks/useBackendCart.js +17 -17
  21. package/dist/hooks/useInstallations.js +32 -32
  22. package/dist/hooks/useOrders.js +7 -7
  23. package/dist/hooks/useSourcing.d.ts +319 -0
  24. package/dist/hooks/useSourcing.js +87 -0
  25. package/dist/hooks/useSourcing.js.map +1 -0
  26. package/dist/hooks/useStoreGraphQL.js +163 -163
  27. package/dist/index.js +12 -12
  28. package/dist/pages/AdminDashboardPage.js +132 -132
  29. package/dist/pages/AdminReviewModerationPage.js +55 -55
  30. package/dist/pages/AdminStoresPage.js +95 -95
  31. package/dist/pages/AdminSubmissionsQueuePage.js +297 -297
  32. package/dist/pages/AdminSubmissionsQueuePage.js.map +1 -1
  33. package/dist/pages/AppDetailPage.js +65 -65
  34. package/dist/pages/AppSettingsPage.js +32 -32
  35. package/dist/pages/CartPage.js +66 -66
  36. package/dist/pages/CreateSourcingRequestPage.d.ts +3 -0
  37. package/dist/pages/CreateSourcingRequestPage.js +439 -0
  38. package/dist/pages/CreateSourcingRequestPage.js.map +1 -0
  39. package/dist/pages/InstalledAppsPage.js +15 -15
  40. package/dist/pages/InstalledAppsPage.js.map +1 -1
  41. package/dist/pages/MarketplaceHomePage.js +384 -384
  42. package/dist/pages/MarketplaceHomePage.js.map +1 -1
  43. package/dist/pages/MyLicensesPage.js +39 -39
  44. package/dist/pages/OrderConfirmationPage.js +57 -57
  45. package/dist/pages/OrdersPage.js +3 -3
  46. package/dist/pages/OrdersPage.js.map +1 -1
  47. package/dist/pages/ProductDetailPage.js +6 -6
  48. package/dist/pages/SellerSourcingOffersPage.d.ts +3 -0
  49. package/dist/pages/SellerSourcingOffersPage.js +284 -0
  50. package/dist/pages/SellerSourcingOffersPage.js.map +1 -0
  51. package/dist/pages/SellerSourcingOpportunitiesPage.d.ts +3 -0
  52. package/dist/pages/SellerSourcingOpportunitiesPage.js +272 -0
  53. package/dist/pages/SellerSourcingOpportunitiesPage.js.map +1 -0
  54. package/dist/pages/SellerSourcingOpportunityDetailPage.d.ts +3 -0
  55. package/dist/pages/SellerSourcingOpportunityDetailPage.js +465 -0
  56. package/dist/pages/SellerSourcingOpportunityDetailPage.js.map +1 -0
  57. package/dist/pages/SourcingRequestDetailPage.d.ts +3 -0
  58. package/dist/pages/SourcingRequestDetailPage.js +447 -0
  59. package/dist/pages/SourcingRequestDetailPage.js.map +1 -0
  60. package/dist/pages/SourcingRequestsPage.d.ts +3 -0
  61. package/dist/pages/SourcingRequestsPage.js +272 -0
  62. package/dist/pages/SourcingRequestsPage.js.map +1 -0
  63. package/dist/providers/SourcingAccessProvider.d.ts +21 -0
  64. package/dist/providers/SourcingAccessProvider.js +95 -0
  65. package/dist/providers/SourcingAccessProvider.js.map +1 -0
  66. package/dist/translations/en.d.ts +3 -0
  67. package/dist/translations/en.js +3 -0
  68. package/dist/translations/en.js.map +1 -1
  69. package/package.json +2 -2
@@ -1,10 +1,10 @@
1
1
  import { useStore as e } from "../providers/StoreProvider.js";
2
2
  import { formatPriceForModel as t } from "../utils/index.js";
3
3
  import { useCallback as n, useEffect as r, useState as i } from "react";
4
- import { ArrowRight as a, Check as o, CheckCircle as s, ChevronDown as c, ChevronUp as l, Clock as u, ExternalLink as d, LayoutDashboard as f, MessageSquareWarning as p, PackageCheck as m, RefreshCw as h, Store as g, TrendingUp as _, Users as v, X as y, XCircle as b } from "lucide-react";
5
- import { graphqlFetch as x } from "@burdenoff/fe-libs/shared/graphql";
6
- import { Fragment as S, jsx as C, jsxs as w } from "react/jsx-runtime";
7
- import { useNavigate as T } from "react-router";
4
+ import { useNavigate as a } from "react-router";
5
+ import { ArrowRight as o, Check as s, CheckCircle as c, ChevronDown as l, ChevronUp as u, Clock as d, ExternalLink as f, LayoutDashboard as p, MessageSquareWarning as m, PackageCheck as h, RefreshCw as g, Store as _, TrendingUp as v, Users as y, X as b, XCircle as x } from "lucide-react";
6
+ import { graphqlFetch as S } from "@burdenoff/fe-libs/shared/graphql";
7
+ import { Fragment as C, jsx as w, jsxs as T } from "react/jsx-runtime";
8
8
  import { GlassCard as E, IllustratedEmptyState as D } from "@burdenoff/fe-libs/ui";
9
9
  //#region src/pages/AdminDashboardPage.tsx
10
10
  var O = "\n query AdminDashboardData {\n recentPending: pendingReviewProducts(limit: 5) {\n totalCount\n products {\n id\n slug\n name\n type\n nature\n category\n icon\n price\n currency\n pricingModel\n description\n submittedAt\n submittedBy\n productId\n publisher {\n name\n email\n }\n }\n }\n stores {\n id\n }\n recentPublished: products(filter: { status: PUBLISHED }, limit: 5) {\n id\n slug\n name\n icon\n type\n status\n publishedAt\n reviewedBy\n }\n recentRejected: products(filter: { status: REJECTED }, limit: 5) {\n id\n slug\n name\n icon\n type\n status\n reviewedAt\n rejectedReason\n }\n }\n", k = "\n mutation ApproveProduct($id: ID!) {\n approveProduct(id: $id) {\n id\n status\n }\n }\n", A = "\n mutation RejectProduct($id: ID!, $reason: String!) {\n rejectProduct(id: $id, reason: $reason) {\n id\n status\n }\n }\n", j = {
@@ -31,7 +31,7 @@ function P(e) {
31
31
  return r < 24 ? `${r}h ago` : `${Math.floor(r / 24)}d ago`;
32
32
  }
33
33
  var F = () => {
34
- let j = T(), { authToken: F, basePath: I } = e(), [L, R] = i({
34
+ let j = a(), { authToken: F, basePath: I } = e(), [L, R] = i({
35
35
  pendingCount: 0,
36
36
  totalStores: 0,
37
37
  recentPending: [],
@@ -46,7 +46,7 @@ var F = () => {
46
46
  error: null
47
47
  }));
48
48
  try {
49
- let e = await x({
49
+ let e = await S({
50
50
  gateway: "global",
51
51
  query: O,
52
52
  authToken: F || void 0
@@ -75,7 +75,7 @@ var F = () => {
75
75
  let X = async (e) => {
76
76
  B(e), K(null);
77
77
  try {
78
- let t = await x({
78
+ let t = await S({
79
79
  gateway: "global",
80
80
  query: k,
81
81
  variables: { id: e },
@@ -92,7 +92,7 @@ var F = () => {
92
92
  if (U.trim()) {
93
93
  B(e), K(null);
94
94
  try {
95
- let t = await x({
95
+ let t = await S({
96
96
  gateway: "global",
97
97
  query: A,
98
98
  variables: {
@@ -113,7 +113,7 @@ var F = () => {
113
113
  {
114
114
  label: "Pending review",
115
115
  value: L.pendingCount,
116
- icon: m,
116
+ icon: h,
117
117
  href: `${I}/submissions`,
118
118
  accent: L.pendingCount > 0 ? "border-[var(--color-status-warning-text)]/30 bg-[var(--color-status-warning-bg-subtle)]/20" : "",
119
119
  valueClass: L.pendingCount > 0 ? "text-[var(--color-status-warning-text)]" : "text-[var(--color-text-primary)]",
@@ -122,7 +122,7 @@ var F = () => {
122
122
  {
123
123
  label: "Stores in registry",
124
124
  value: L.totalStores,
125
- icon: g,
125
+ icon: _,
126
126
  href: `${I}/stores`,
127
127
  accent: "",
128
128
  valueClass: "text-[var(--color-text-primary)]",
@@ -131,7 +131,7 @@ var F = () => {
131
131
  {
132
132
  label: "Review moderation",
133
133
  value: "—",
134
- icon: p,
134
+ icon: m,
135
135
  href: `${I}/reviews`,
136
136
  accent: "",
137
137
  valueClass: "text-[var(--color-text-primary)]",
@@ -140,196 +140,196 @@ var F = () => {
140
140
  {
141
141
  label: "Publishers",
142
142
  value: "—",
143
- icon: v,
143
+ icon: y,
144
144
  href: `${I}/dashboard`,
145
145
  accent: "",
146
146
  valueClass: "text-[var(--color-text-primary)]",
147
147
  cta: "View publishers"
148
148
  }
149
149
  ];
150
- return /* @__PURE__ */ w("div", {
150
+ return /* @__PURE__ */ T("div", {
151
151
  className: "min-h-screen bg-[var(--color-surface-default)]",
152
- children: [/* @__PURE__ */ C("header", {
152
+ children: [/* @__PURE__ */ w("header", {
153
153
  className: "sticky top-0 z-10 border-b border-[var(--color-border-seam)] bg-[var(--color-surface-raised)] shadow-[var(--shadow-elevation-1)]",
154
- children: /* @__PURE__ */ C("div", {
154
+ children: /* @__PURE__ */ w("div", {
155
155
  className: "mx-auto max-w-6xl px-6 py-4",
156
- children: /* @__PURE__ */ w("div", {
156
+ children: /* @__PURE__ */ T("div", {
157
157
  className: "flex items-center justify-between",
158
- children: [/* @__PURE__ */ w("div", {
158
+ children: [/* @__PURE__ */ T("div", {
159
159
  className: "flex items-center gap-2.5",
160
- children: [/* @__PURE__ */ C(f, { className: "size-5 text-[var(--color-text-primary)]" }), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("h1", {
160
+ children: [/* @__PURE__ */ w(p, { className: "size-5 text-[var(--color-text-primary)]" }), /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("h1", {
161
161
  className: "text-lg font-semibold text-[var(--color-text-primary)]",
162
162
  children: "Store Admin Dashboard"
163
- }), /* @__PURE__ */ C("p", {
163
+ }), /* @__PURE__ */ w("p", {
164
164
  className: "text-xs text-[var(--color-text-secondary)]",
165
165
  children: "Marketplace control room — submissions, registry, moderation"
166
166
  })] })]
167
- }), /* @__PURE__ */ w("button", {
167
+ }), /* @__PURE__ */ T("button", {
168
168
  type: "button",
169
169
  onClick: () => void Y(),
170
170
  disabled: L.loading,
171
171
  className: "inline-flex items-center gap-2 rounded-md border border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-1.5 text-sm text-[var(--color-text-primary)] hover:bg-[var(--color-surface-hover)] transition-colors disabled:opacity-50",
172
- children: [/* @__PURE__ */ C(h, { className: `size-4 ${L.loading ? "animate-spin" : ""}` }), "Refresh"]
172
+ children: [/* @__PURE__ */ w(g, { className: `size-4 ${L.loading ? "animate-spin" : ""}` }), "Refresh"]
173
173
  })]
174
174
  })
175
175
  })
176
- }), /* @__PURE__ */ w("main", {
176
+ }), /* @__PURE__ */ T("main", {
177
177
  className: "mx-auto max-w-6xl space-y-8 p-6",
178
178
  children: [
179
- L.error && /* @__PURE__ */ C("div", {
179
+ L.error && /* @__PURE__ */ w("div", {
180
180
  role: "alert",
181
181
  className: "rounded-lg border border-[var(--color-border-danger)] bg-[var(--color-surface-danger-muted)] px-4 py-3 text-sm text-[var(--color-text-danger)]",
182
182
  children: L.error
183
183
  }),
184
- /* @__PURE__ */ C("section", { children: /* @__PURE__ */ C("div", {
184
+ /* @__PURE__ */ w("section", { children: /* @__PURE__ */ w("div", {
185
185
  className: "grid grid-cols-2 gap-4 lg:grid-cols-4",
186
186
  children: Q.map((e) => {
187
187
  let t = e.icon;
188
- return /* @__PURE__ */ w("button", {
188
+ return /* @__PURE__ */ T("button", {
189
189
  type: "button",
190
190
  onClick: () => j(e.href),
191
191
  className: `group relative overflow-hidden rounded-xl border border-[var(--color-border-seam)] bg-[var(--color-surface-raised)] p-5 text-left shadow-[var(--shadow-elevation-1)] transition-all hover:border-[var(--color-border-strong)] hover:shadow-[var(--shadow-elevation-2)] ${e.accent}`,
192
- children: [/* @__PURE__ */ w("div", {
192
+ children: [/* @__PURE__ */ T("div", {
193
193
  className: "flex items-start justify-between gap-2",
194
- children: [/* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
194
+ children: [/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("p", {
195
195
  className: "text-xs font-medium text-[var(--color-text-secondary)] uppercase tracking-wide",
196
196
  children: e.label
197
- }), /* @__PURE__ */ C("p", {
197
+ }), /* @__PURE__ */ w("p", {
198
198
  className: `mt-2 text-3xl font-bold tabular-nums ${e.valueClass}`,
199
- children: L.loading ? /* @__PURE__ */ C("span", { className: "inline-block w-8 animate-pulse rounded bg-[var(--color-surface-muted)] h-8" }) : e.value
200
- })] }), /* @__PURE__ */ C("div", {
199
+ children: L.loading ? /* @__PURE__ */ w("span", { className: "inline-block w-8 animate-pulse rounded bg-[var(--color-surface-muted)] h-8" }) : e.value
200
+ })] }), /* @__PURE__ */ w("div", {
201
201
  className: "rounded-lg bg-[var(--color-surface-muted)] p-2",
202
- children: /* @__PURE__ */ C(t, { className: "size-5 text-[var(--color-text-secondary)]" })
202
+ children: /* @__PURE__ */ w(t, { className: "size-5 text-[var(--color-text-secondary)]" })
203
203
  })]
204
- }), /* @__PURE__ */ w("div", {
204
+ }), /* @__PURE__ */ T("div", {
205
205
  className: "mt-3 flex items-center gap-1 text-xs font-medium text-[var(--color-text-accent)] group-hover:underline",
206
- children: [e.cta, /* @__PURE__ */ C(a, { className: "size-3" })]
206
+ children: [e.cta, /* @__PURE__ */ w(o, { className: "size-3" })]
207
207
  })]
208
208
  }, e.label);
209
209
  })
210
210
  }) }),
211
- /* @__PURE__ */ w("section", { children: [
212
- /* @__PURE__ */ w("div", {
211
+ /* @__PURE__ */ T("section", { children: [
212
+ /* @__PURE__ */ T("div", {
213
213
  className: "mb-4 flex items-center justify-between",
214
- children: [/* @__PURE__ */ w("div", {
214
+ children: [/* @__PURE__ */ T("div", {
215
215
  className: "flex items-center gap-2",
216
- children: [/* @__PURE__ */ C("h2", {
216
+ children: [/* @__PURE__ */ w("h2", {
217
217
  className: "text-base font-semibold text-[var(--color-text-primary)]",
218
218
  children: "Pending Submissions"
219
- }), L.pendingCount > 0 && /* @__PURE__ */ w("span", {
219
+ }), L.pendingCount > 0 && /* @__PURE__ */ T("span", {
220
220
  className: "rounded-full bg-[var(--color-status-warning-bg-subtle)] px-2 py-0.5 text-xs font-semibold text-[var(--color-status-warning-text)]",
221
221
  children: [L.pendingCount, " waiting"]
222
222
  })]
223
- }), /* @__PURE__ */ w("button", {
223
+ }), /* @__PURE__ */ T("button", {
224
224
  type: "button",
225
225
  onClick: () => j(`${I}/submissions`),
226
226
  className: "inline-flex items-center gap-1.5 rounded-md border border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-1.5 text-xs font-medium text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-hover)] hover:text-[var(--color-text-primary)] transition-colors",
227
- children: ["View all", /* @__PURE__ */ C(d, { className: "size-3.5" })]
227
+ children: ["View all", /* @__PURE__ */ w(f, { className: "size-3.5" })]
228
228
  })]
229
229
  }),
230
- G && /* @__PURE__ */ C("div", {
230
+ G && /* @__PURE__ */ w("div", {
231
231
  role: "alert",
232
232
  className: "mb-3 rounded-lg border border-[var(--color-border-danger)] bg-[var(--color-surface-danger-muted)] px-4 py-2.5 text-sm text-[var(--color-text-danger)]",
233
233
  children: G
234
234
  }),
235
- L.loading ? /* @__PURE__ */ C("div", {
235
+ L.loading ? /* @__PURE__ */ w("div", {
236
236
  className: "space-y-3",
237
237
  children: [
238
238
  1,
239
239
  2,
240
240
  3
241
- ].map((e) => /* @__PURE__ */ C("div", { className: "h-20 animate-pulse rounded-xl bg-[var(--color-surface-muted)]" }, e))
242
- }) : L.recentPending.length === 0 ? /* @__PURE__ */ C(D, {
241
+ ].map((e) => /* @__PURE__ */ w("div", { className: "h-20 animate-pulse rounded-xl bg-[var(--color-surface-muted)]" }, e))
242
+ }) : L.recentPending.length === 0 ? /* @__PURE__ */ w(D, {
243
243
  illustration: "empty-notifications",
244
244
  title: "All caught up",
245
245
  description: "No submissions awaiting review. New products will appear here as publishers send them in."
246
- }) : /* @__PURE__ */ C("div", {
246
+ }) : /* @__PURE__ */ w("div", {
247
247
  className: "overflow-hidden rounded-xl border border-[var(--color-border-seam)] bg-[var(--color-surface-raised)] shadow-[var(--shadow-elevation-1)]",
248
- children: /* @__PURE__ */ C("ul", {
248
+ children: /* @__PURE__ */ w("ul", {
249
249
  className: "divide-y divide-[var(--color-border-seam)]",
250
- children: L.recentPending.map((e) => /* @__PURE__ */ w("li", {
250
+ children: L.recentPending.map((e) => /* @__PURE__ */ T("li", {
251
251
  className: "overflow-hidden",
252
252
  children: [
253
- /* @__PURE__ */ w("div", {
253
+ /* @__PURE__ */ T("div", {
254
254
  className: "flex items-center gap-4 px-5 py-4",
255
255
  children: [
256
- e.icon ? /* @__PURE__ */ C("img", {
256
+ e.icon ? /* @__PURE__ */ w("img", {
257
257
  src: e.icon,
258
258
  alt: "",
259
259
  className: "size-10 shrink-0 rounded-lg object-cover"
260
- }) : /* @__PURE__ */ C("div", {
260
+ }) : /* @__PURE__ */ w("div", {
261
261
  className: "flex size-10 shrink-0 items-center justify-center rounded-lg bg-[var(--color-surface-muted)] text-xs font-bold text-[var(--color-text-muted)] uppercase",
262
262
  children: e.type.slice(0, 2)
263
263
  }),
264
- /* @__PURE__ */ w("div", {
264
+ /* @__PURE__ */ T("div", {
265
265
  className: "min-w-0 flex-1",
266
- children: [/* @__PURE__ */ w("div", {
266
+ children: [/* @__PURE__ */ T("div", {
267
267
  className: "flex items-center gap-2 flex-wrap",
268
- children: [/* @__PURE__ */ C("p", {
268
+ children: [/* @__PURE__ */ w("p", {
269
269
  className: "font-medium text-[var(--color-text-primary)] truncate",
270
270
  children: e.name
271
- }), /* @__PURE__ */ C("span", {
271
+ }), /* @__PURE__ */ w("span", {
272
272
  className: `shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide ${M(e.type)}`,
273
273
  children: e.type
274
274
  })]
275
- }), /* @__PURE__ */ w("div", {
275
+ }), /* @__PURE__ */ T("div", {
276
276
  className: "mt-0.5 flex items-center gap-3 flex-wrap text-xs text-[var(--color-text-secondary)]",
277
277
  children: [
278
- /* @__PURE__ */ C("span", { children: e.publisher?.name ?? "Unknown publisher" }),
279
- /* @__PURE__ */ C("span", { children: "·" }),
280
- /* @__PURE__ */ C("span", { children: t(e.price, e.currency, e.pricingModel) }),
281
- e.submittedAt && /* @__PURE__ */ w(S, { children: [/* @__PURE__ */ C("span", { children: "·" }), /* @__PURE__ */ w("span", {
278
+ /* @__PURE__ */ w("span", { children: e.publisher?.name ?? "Unknown publisher" }),
279
+ /* @__PURE__ */ w("span", { children: "·" }),
280
+ /* @__PURE__ */ w("span", { children: t(e.price, e.currency, e.pricingModel) }),
281
+ e.submittedAt && /* @__PURE__ */ T(C, { children: [/* @__PURE__ */ w("span", { children: "·" }), /* @__PURE__ */ T("span", {
282
282
  className: "flex items-center gap-1",
283
- children: [/* @__PURE__ */ C(u, { className: "size-3" }), P(e.submittedAt)]
283
+ children: [/* @__PURE__ */ w(d, { className: "size-3" }), P(e.submittedAt)]
284
284
  })] })
285
285
  ]
286
286
  })]
287
287
  }),
288
- /* @__PURE__ */ w("div", {
288
+ /* @__PURE__ */ T("div", {
289
289
  className: "shrink-0 flex items-center gap-2",
290
290
  children: [
291
- /* @__PURE__ */ w("button", {
291
+ /* @__PURE__ */ T("button", {
292
292
  type: "button",
293
293
  onClick: () => J(q === e.id ? null : e.id),
294
294
  className: "inline-flex items-center gap-1 rounded-md border border-[var(--color-border-default)] px-2.5 py-1.5 text-xs text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-hover)] transition-colors",
295
- children: [q === e.id ? /* @__PURE__ */ C(l, { className: "size-3.5" }) : /* @__PURE__ */ C(c, { className: "size-3.5" }), "Details"]
295
+ children: [q === e.id ? /* @__PURE__ */ w(u, { className: "size-3.5" }) : /* @__PURE__ */ w(l, { className: "size-3.5" }), "Details"]
296
296
  }),
297
- /* @__PURE__ */ w("button", {
297
+ /* @__PURE__ */ T("button", {
298
298
  type: "button",
299
299
  onClick: () => void X(e.id),
300
300
  disabled: z === e.id,
301
301
  className: "inline-flex items-center gap-1 rounded-md bg-[var(--color-surface-success)] px-3 py-1.5 text-xs font-semibold text-[var(--color-text-on-success)] hover:opacity-90 disabled:opacity-50 transition-opacity",
302
- children: [/* @__PURE__ */ C(o, { className: "size-3.5" }), "Approve"]
302
+ children: [/* @__PURE__ */ w(s, { className: "size-3.5" }), "Approve"]
303
303
  }),
304
- /* @__PURE__ */ w("button", {
304
+ /* @__PURE__ */ T("button", {
305
305
  type: "button",
306
306
  onClick: () => {
307
307
  H(e.id), W(""), K(null);
308
308
  },
309
309
  disabled: z === e.id,
310
310
  className: "inline-flex items-center gap-1 rounded-md border border-[var(--color-border-danger)] bg-[var(--color-surface-danger-muted)] px-3 py-1.5 text-xs font-semibold text-[var(--color-text-danger)] hover:bg-[var(--color-surface-danger)] hover:text-[var(--color-text-on-danger)] disabled:opacity-50 transition-colors",
311
- children: [/* @__PURE__ */ C(y, { className: "size-3.5" }), "Reject"]
311
+ children: [/* @__PURE__ */ w(b, { className: "size-3.5" }), "Reject"]
312
312
  })
313
313
  ]
314
314
  })
315
315
  ]
316
316
  }),
317
- q === e.id && /* @__PURE__ */ C("div", {
317
+ q === e.id && /* @__PURE__ */ w("div", {
318
318
  className: "border-t border-[var(--color-border-seam)] bg-[var(--color-surface-muted)] px-5 py-4",
319
- children: /* @__PURE__ */ w("dl", {
319
+ children: /* @__PURE__ */ T("dl", {
320
320
  className: "grid grid-cols-2 gap-x-8 gap-y-3 text-xs sm:grid-cols-3",
321
321
  children: [
322
- /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("dt", {
322
+ /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
323
323
  className: "font-medium text-[var(--color-text-secondary)]",
324
324
  children: "Slug"
325
- }), /* @__PURE__ */ C("dd", {
325
+ }), /* @__PURE__ */ w("dd", {
326
326
  className: "mt-0.5 font-mono text-[var(--color-text-primary)]",
327
327
  children: e.slug
328
328
  })] }),
329
- /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("dt", {
329
+ /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
330
330
  className: "font-medium text-[var(--color-text-secondary)]",
331
331
  children: "Type"
332
- }), /* @__PURE__ */ w("dd", {
332
+ }), /* @__PURE__ */ T("dd", {
333
333
  className: "mt-0.5 text-[var(--color-text-primary)]",
334
334
  children: [
335
335
  e.type,
@@ -337,22 +337,22 @@ var F = () => {
337
337
  e.nature ?? "—"
338
338
  ]
339
339
  })] }),
340
- e.category && /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("dt", {
340
+ e.category && /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
341
341
  className: "font-medium text-[var(--color-text-secondary)]",
342
342
  children: "Category"
343
- }), /* @__PURE__ */ C("dd", {
343
+ }), /* @__PURE__ */ w("dd", {
344
344
  className: "mt-0.5 text-[var(--color-text-primary)]",
345
345
  children: e.category
346
346
  })] }),
347
- /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("dt", {
347
+ /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
348
348
  className: "font-medium text-[var(--color-text-secondary)]",
349
349
  children: "Pricing"
350
- }), /* @__PURE__ */ w("dd", {
350
+ }), /* @__PURE__ */ T("dd", {
351
351
  className: "mt-0.5 text-[var(--color-text-primary)]",
352
352
  children: [
353
353
  t(e.price, e.currency, e.pricingModel),
354
354
  " ",
355
- /* @__PURE__ */ w("span", {
355
+ /* @__PURE__ */ T("span", {
356
356
  className: "text-[var(--color-text-muted)]",
357
357
  children: [
358
358
  "(",
@@ -362,22 +362,22 @@ var F = () => {
362
362
  })
363
363
  ]
364
364
  })] }),
365
- /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("dt", {
365
+ /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
366
366
  className: "font-medium text-[var(--color-text-secondary)]",
367
367
  children: "Publisher"
368
- }), /* @__PURE__ */ w("dd", {
368
+ }), /* @__PURE__ */ T("dd", {
369
369
  className: "mt-0.5 text-[var(--color-text-primary)]",
370
- children: [e.publisher?.name ?? "—", e.publisher?.email && /* @__PURE__ */ C("span", {
370
+ children: [e.publisher?.name ?? "—", e.publisher?.email && /* @__PURE__ */ w("span", {
371
371
  className: "block text-[var(--color-text-muted)]",
372
372
  children: e.publisher.email
373
373
  })]
374
374
  })] }),
375
- e.productId && /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("dt", {
375
+ e.productId && /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
376
376
  className: "font-medium text-[var(--color-text-secondary)]",
377
377
  children: "Devportal app"
378
- }), /* @__PURE__ */ C("dd", {
378
+ }), /* @__PURE__ */ w("dd", {
379
379
  className: "mt-0.5",
380
- children: /* @__PURE__ */ w("a", {
380
+ children: /* @__PURE__ */ T("a", {
381
381
  href: `/devportal/apps/${e.productId}`,
382
382
  target: "_blank",
383
383
  rel: "noreferrer",
@@ -385,16 +385,16 @@ var F = () => {
385
385
  children: [
386
386
  e.productId.slice(0, 16),
387
387
  "…",
388
- /* @__PURE__ */ C(d, { className: "size-3" })
388
+ /* @__PURE__ */ w(f, { className: "size-3" })
389
389
  ]
390
390
  })
391
391
  })] }),
392
- e.description && /* @__PURE__ */ w("div", {
392
+ e.description && /* @__PURE__ */ T("div", {
393
393
  className: "col-span-2 sm:col-span-3",
394
- children: [/* @__PURE__ */ C("dt", {
394
+ children: [/* @__PURE__ */ w("dt", {
395
395
  className: "font-medium text-[var(--color-text-secondary)]",
396
396
  children: "Description"
397
- }), /* @__PURE__ */ C("dd", {
397
+ }), /* @__PURE__ */ w("dd", {
398
398
  className: "mt-0.5 text-[var(--color-text-primary)]",
399
399
  children: e.description
400
400
  })]
@@ -402,14 +402,14 @@ var F = () => {
402
402
  ]
403
403
  })
404
404
  }),
405
- V === e.id && /* @__PURE__ */ w("div", {
405
+ V === e.id && /* @__PURE__ */ T("div", {
406
406
  className: "border-t border-[var(--color-border-seam)] bg-[var(--color-surface-danger-muted)]/30 px-5 py-4",
407
407
  children: [
408
- /* @__PURE__ */ C("p", {
408
+ /* @__PURE__ */ w("p", {
409
409
  className: "mb-2 text-xs font-semibold text-[var(--color-text-danger)]",
410
410
  children: "Provide a rejection reason (the publisher will see this)"
411
411
  }),
412
- /* @__PURE__ */ C("textarea", {
412
+ /* @__PURE__ */ w("textarea", {
413
413
  id: `reject-reason-${e.id}`,
414
414
  "aria-label": "Rejection reason",
415
415
  value: U,
@@ -418,16 +418,16 @@ var F = () => {
418
418
  className: "w-full rounded-lg border border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-2 text-sm text-[var(--color-text-primary)] focus:border-[var(--color-border-accent)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)] resize-none",
419
419
  placeholder: "Explain why this submission is being rejected…"
420
420
  }),
421
- /* @__PURE__ */ w("div", {
421
+ /* @__PURE__ */ T("div", {
422
422
  className: "mt-2 flex justify-end gap-2",
423
- children: [/* @__PURE__ */ C("button", {
423
+ children: [/* @__PURE__ */ w("button", {
424
424
  type: "button",
425
425
  onClick: () => {
426
426
  H(null), W("");
427
427
  },
428
428
  className: "rounded-md border border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-1 text-xs font-medium text-[var(--color-text-primary)] hover:bg-[var(--color-surface-hover)] transition-colors",
429
429
  children: "Cancel"
430
- }), /* @__PURE__ */ C("button", {
430
+ }), /* @__PURE__ */ w("button", {
431
431
  type: "button",
432
432
  onClick: () => void Z(e.id),
433
433
  disabled: !U.trim() || z === e.id,
@@ -442,121 +442,121 @@ var F = () => {
442
442
  })
443
443
  })
444
444
  ] }),
445
- /* @__PURE__ */ w("section", { children: [/* @__PURE__ */ w("div", {
445
+ /* @__PURE__ */ T("section", { children: [/* @__PURE__ */ T("div", {
446
446
  className: "mb-4 flex items-center gap-2",
447
- children: [/* @__PURE__ */ C(_, { className: "size-4 text-[var(--color-text-secondary)]" }), /* @__PURE__ */ C("h2", {
447
+ children: [/* @__PURE__ */ w(v, { className: "size-4 text-[var(--color-text-secondary)]" }), /* @__PURE__ */ w("h2", {
448
448
  className: "text-base font-semibold text-[var(--color-text-primary)]",
449
449
  children: "Recent Activity"
450
450
  })]
451
- }), /* @__PURE__ */ w("div", {
451
+ }), /* @__PURE__ */ T("div", {
452
452
  className: "grid grid-cols-1 gap-4 lg:grid-cols-2",
453
- children: [/* @__PURE__ */ w(E, {
453
+ children: [/* @__PURE__ */ T(E, {
454
454
  className: "overflow-hidden p-0",
455
- children: [/* @__PURE__ */ w("div", {
455
+ children: [/* @__PURE__ */ T("div", {
456
456
  className: "flex items-center gap-2.5 border-b border-[var(--color-border-seam)] px-4 py-3",
457
457
  children: [
458
- /* @__PURE__ */ C("div", {
458
+ /* @__PURE__ */ w("div", {
459
459
  className: "flex size-7 items-center justify-center rounded-md bg-[var(--color-status-success-bg-subtle)]",
460
- children: /* @__PURE__ */ C(s, { className: "size-4 text-[var(--color-status-success-text)]" })
460
+ children: /* @__PURE__ */ w(c, { className: "size-4 text-[var(--color-status-success-text)]" })
461
461
  }),
462
- /* @__PURE__ */ C("h3", {
462
+ /* @__PURE__ */ w("h3", {
463
463
  className: "text-sm font-semibold text-[var(--color-text-primary)]",
464
464
  children: "Recently Approved"
465
465
  }),
466
- /* @__PURE__ */ C("span", {
466
+ /* @__PURE__ */ w("span", {
467
467
  className: "ml-auto text-xs text-[var(--color-text-muted)]",
468
468
  children: "Last 5"
469
469
  })
470
470
  ]
471
- }), L.loading ? /* @__PURE__ */ C("div", {
471
+ }), L.loading ? /* @__PURE__ */ w("div", {
472
472
  className: "space-y-3 p-4",
473
473
  children: [
474
474
  1,
475
475
  2,
476
476
  3
477
- ].map((e) => /* @__PURE__ */ C("div", { className: "h-10 animate-pulse rounded-lg bg-[var(--color-surface-muted)]" }, e))
478
- }) : L.recentPublished.length === 0 ? /* @__PURE__ */ C("p", {
477
+ ].map((e) => /* @__PURE__ */ w("div", { className: "h-10 animate-pulse rounded-lg bg-[var(--color-surface-muted)]" }, e))
478
+ }) : L.recentPublished.length === 0 ? /* @__PURE__ */ w("p", {
479
479
  className: "px-4 py-8 text-center text-sm text-[var(--color-text-muted)]",
480
480
  children: "No approved products yet."
481
- }) : /* @__PURE__ */ C("ul", {
481
+ }) : /* @__PURE__ */ w("ul", {
482
482
  className: "divide-y divide-[var(--color-border-seam)]",
483
- children: L.recentPublished.map((e) => /* @__PURE__ */ w("li", {
483
+ children: L.recentPublished.map((e) => /* @__PURE__ */ T("li", {
484
484
  className: "flex items-center gap-3 px-4 py-3",
485
485
  children: [
486
- e.icon ? /* @__PURE__ */ C("img", {
486
+ e.icon ? /* @__PURE__ */ w("img", {
487
487
  src: e.icon,
488
488
  alt: "",
489
489
  className: "size-8 shrink-0 rounded-lg object-cover"
490
- }) : /* @__PURE__ */ C("div", {
490
+ }) : /* @__PURE__ */ w("div", {
491
491
  className: "flex size-8 shrink-0 items-center justify-center rounded-lg bg-[var(--color-surface-muted)] text-xs font-bold text-[var(--color-text-muted)] uppercase",
492
492
  children: (e.type ?? "?").slice(0, 2)
493
493
  }),
494
- /* @__PURE__ */ w("div", {
494
+ /* @__PURE__ */ T("div", {
495
495
  className: "min-w-0 flex-1",
496
- children: [/* @__PURE__ */ C("p", {
496
+ children: [/* @__PURE__ */ w("p", {
497
497
  className: "truncate text-sm font-medium text-[var(--color-text-primary)]",
498
498
  children: e.name
499
- }), /* @__PURE__ */ w("p", {
499
+ }), /* @__PURE__ */ T("p", {
500
500
  className: "text-xs text-[var(--color-text-secondary)]",
501
501
  children: [e.reviewedBy ? `by ${e.reviewedBy} · ` : "", N(e.publishedAt)]
502
502
  })]
503
503
  }),
504
- /* @__PURE__ */ C("span", {
504
+ /* @__PURE__ */ w("span", {
505
505
  className: "shrink-0 rounded-full bg-[var(--color-status-success-bg-subtle)] px-2.5 py-1 text-xs font-medium text-[var(--color-status-success-text)]",
506
506
  children: "Published"
507
507
  })
508
508
  ]
509
509
  }, e.id))
510
510
  })]
511
- }), /* @__PURE__ */ w(E, {
511
+ }), /* @__PURE__ */ T(E, {
512
512
  className: "overflow-hidden p-0",
513
- children: [/* @__PURE__ */ w("div", {
513
+ children: [/* @__PURE__ */ T("div", {
514
514
  className: "flex items-center gap-2.5 border-b border-[var(--color-border-seam)] px-4 py-3",
515
515
  children: [
516
- /* @__PURE__ */ C("div", {
516
+ /* @__PURE__ */ w("div", {
517
517
  className: "flex size-7 items-center justify-center rounded-md bg-[var(--color-status-error-bg-subtle)]",
518
- children: /* @__PURE__ */ C(b, { className: "size-4 text-[var(--color-status-error-text)]" })
518
+ children: /* @__PURE__ */ w(x, { className: "size-4 text-[var(--color-status-error-text)]" })
519
519
  }),
520
- /* @__PURE__ */ C("h3", {
520
+ /* @__PURE__ */ w("h3", {
521
521
  className: "text-sm font-semibold text-[var(--color-text-primary)]",
522
522
  children: "Recently Rejected"
523
523
  }),
524
- /* @__PURE__ */ C("span", {
524
+ /* @__PURE__ */ w("span", {
525
525
  className: "ml-auto text-xs text-[var(--color-text-muted)]",
526
526
  children: "Last 5"
527
527
  })
528
528
  ]
529
- }), L.loading ? /* @__PURE__ */ C("div", {
529
+ }), L.loading ? /* @__PURE__ */ w("div", {
530
530
  className: "space-y-3 p-4",
531
531
  children: [
532
532
  1,
533
533
  2,
534
534
  3
535
- ].map((e) => /* @__PURE__ */ C("div", { className: "h-10 animate-pulse rounded-lg bg-[var(--color-surface-muted)]" }, e))
536
- }) : L.recentRejected.length === 0 ? /* @__PURE__ */ C("p", {
535
+ ].map((e) => /* @__PURE__ */ w("div", { className: "h-10 animate-pulse rounded-lg bg-[var(--color-surface-muted)]" }, e))
536
+ }) : L.recentRejected.length === 0 ? /* @__PURE__ */ w("p", {
537
537
  className: "px-4 py-8 text-center text-sm text-[var(--color-text-muted)]",
538
538
  children: "No rejected products yet."
539
- }) : /* @__PURE__ */ C("ul", {
539
+ }) : /* @__PURE__ */ w("ul", {
540
540
  className: "divide-y divide-[var(--color-border-seam)]",
541
- children: L.recentRejected.map((e) => /* @__PURE__ */ w("li", {
541
+ children: L.recentRejected.map((e) => /* @__PURE__ */ T("li", {
542
542
  className: "flex items-center gap-3 px-4 py-3",
543
543
  children: [
544
- e.icon ? /* @__PURE__ */ C("img", {
544
+ e.icon ? /* @__PURE__ */ w("img", {
545
545
  src: e.icon,
546
546
  alt: "",
547
547
  className: "size-8 shrink-0 rounded-lg object-cover"
548
- }) : /* @__PURE__ */ C("div", {
548
+ }) : /* @__PURE__ */ w("div", {
549
549
  className: "flex size-8 shrink-0 items-center justify-center rounded-lg bg-[var(--color-surface-muted)] text-xs font-bold text-[var(--color-text-muted)] uppercase",
550
550
  children: (e.type ?? "?").slice(0, 2)
551
551
  }),
552
- /* @__PURE__ */ w("div", {
552
+ /* @__PURE__ */ T("div", {
553
553
  className: "min-w-0 flex-1",
554
554
  children: [
555
- /* @__PURE__ */ C("p", {
555
+ /* @__PURE__ */ w("p", {
556
556
  className: "truncate text-sm font-medium text-[var(--color-text-primary)]",
557
557
  children: e.name
558
558
  }),
559
- e.rejectedReason && /* @__PURE__ */ w("p", {
559
+ e.rejectedReason && /* @__PURE__ */ T("p", {
560
560
  className: "truncate text-xs text-[var(--color-text-muted)]",
561
561
  title: e.rejectedReason,
562
562
  children: [
@@ -565,13 +565,13 @@ var F = () => {
565
565
  "\""
566
566
  ]
567
567
  }),
568
- /* @__PURE__ */ C("p", {
568
+ /* @__PURE__ */ w("p", {
569
569
  className: "text-xs text-[var(--color-text-secondary)]",
570
570
  children: N(e.reviewedAt)
571
571
  })
572
572
  ]
573
573
  }),
574
- /* @__PURE__ */ C("span", {
574
+ /* @__PURE__ */ w("span", {
575
575
  className: "shrink-0 rounded-full bg-[var(--color-status-error-bg-subtle)] px-2.5 py-1 text-xs font-medium text-[var(--color-status-error-text)]",
576
576
  children: "Rejected"
577
577
  })