@burdenoff/microfe-devportal 2026.1112.1 → 2026.1113.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 (42) hide show
  1. package/dist/devportal/components/AppCard.js +73 -70
  2. package/dist/devportal/components/AppCard.js.map +1 -1
  3. package/dist/devportal/components/ImageUploadField.js +82 -80
  4. package/dist/devportal/components/ImageUploadField.js.map +1 -1
  5. package/dist/devportal/components/StoreImage.d.ts +15 -0
  6. package/dist/devportal/components/StoreImage.js +30 -0
  7. package/dist/devportal/components/StoreImage.js.map +1 -0
  8. package/dist/devportal/components/index.d.ts +1 -0
  9. package/dist/devportal/components/index.js +17 -16
  10. package/dist/devportal/hooks/usePackageUpload.d.ts +46 -4
  11. package/dist/devportal/hooks/usePackageUpload.js +90 -36
  12. package/dist/devportal/hooks/usePackageUpload.js.map +1 -1
  13. package/dist/devportal/pages/AdminReviewPage.js +205 -202
  14. package/dist/devportal/pages/AdminReviewPage.js.map +1 -1
  15. package/dist/devportal/pages/ApplicationDetailPage.js +2 -2
  16. package/dist/devportal/pages/ApplicationDetailPage.js.map +1 -1
  17. package/dist/devportal/pages/ApplicationsPage.js +201 -199
  18. package/dist/devportal/pages/ApplicationsPage.js.map +1 -1
  19. package/dist/devportal/pages/CreateOrganizationPage.js +120 -114
  20. package/dist/devportal/pages/CreateOrganizationPage.js.map +1 -1
  21. package/dist/devportal/pages/CreatePhysicalItemPage.js +2 -2
  22. package/dist/devportal/pages/CreatePhysicalItemPage.js.map +1 -1
  23. package/dist/devportal/pages/EditApplicationPage.js +84 -73
  24. package/dist/devportal/pages/EditApplicationPage.js.map +1 -1
  25. package/dist/devportal/pages/EditPhysicalItemPage.js +312 -307
  26. package/dist/devportal/pages/EditPhysicalItemPage.js.map +1 -1
  27. package/dist/devportal/pages/ListingPreviewPage.js +175 -171
  28. package/dist/devportal/pages/ListingPreviewPage.js.map +1 -1
  29. package/dist/devportal/pages/OAuthClientDetailPage.js +134 -115
  30. package/dist/devportal/pages/OAuthClientDetailPage.js.map +1 -1
  31. package/dist/devportal/pages/SellerDashboardPage.js +118 -116
  32. package/dist/devportal/pages/SellerDashboardPage.js.map +1 -1
  33. package/dist/devportal/pages/SellerItemsPage.js +202 -199
  34. package/dist/devportal/pages/SellerItemsPage.js.map +1 -1
  35. package/dist/devportal/pages/SetupPage.js +141 -143
  36. package/dist/devportal/pages/SetupPage.js.map +1 -1
  37. package/dist/devportal/pages/StoreSubmissionPage.js +133 -131
  38. package/dist/devportal/pages/StoreSubmissionPage.js.map +1 -1
  39. package/dist/devportal/utils/errorMessage.d.ts +2 -0
  40. package/dist/devportal/utils/errorMessage.js +7 -0
  41. package/dist/devportal/utils/errorMessage.js.map +1 -0
  42. package/package.json +1 -1
@@ -1,17 +1,18 @@
1
1
  import { useDevportalEventBus as e } from "../events/index.js";
2
2
  import { useTr as t } from "../utils/i18n.js";
3
- import { useDevportalPermission as n } from "../hooks/usePermission.js";
4
3
  import "../hooks/index.js";
4
+ import { useDevportalPermission as n } from "../hooks/usePermission.js";
5
5
  import { DEVPORTAL_PERMISSIONS as r } from "../constants/permissions.js";
6
- import { useEffect as i, useState as a } from "react";
7
- import { AlertTriangle as o, ArrowLeft as ee, CheckCircle2 as s, Clock as c, EyeOff as l, GitBranch as u, Package as te, RefreshCw as d, Store as ne, XCircle as f } from "lucide-react";
8
- import { useNavigate as p, useParams as m } from "react-router";
9
- import { jsx as h, jsxs as g } from "react/jsx-runtime";
10
- import { IllustratedEmptyState as re, PagePurpose as ie } from "@burdenoff/fe-libs/ui";
11
- import { graphqlFetch as _ } from "@burdenoff/fe-libs/shared/graphql";
6
+ import { StoreImage as i } from "../components/StoreImage.js";
7
+ import { useEffect as a, useState as o } from "react";
8
+ import { AlertTriangle as s, ArrowLeft as ee, CheckCircle2 as c, Clock as l, EyeOff as u, GitBranch as d, Package as f, RefreshCw as p, Store as m, XCircle as h } from "lucide-react";
9
+ import { useNavigate as g, useParams as _ } from "react-router";
10
+ import { jsx as v, jsxs as y } from "react/jsx-runtime";
11
+ import { IllustratedEmptyState as te, PagePurpose as ne } from "@burdenoff/fe-libs/ui";
12
+ import { graphqlFetch as b } from "@burdenoff/fe-libs/shared/graphql";
12
13
  // src/devportal/pages/StoreSubmissionPage.tsx
13
- var v = "\n query DevportalAppForSubmission($id: ID!) {\n application(id: $id) {\n id\n name\n slug\n status\n appType\n reviewStatus\n reviewNotes\n iconUrl\n submittedAt\n metadata\n versions {\n edges {\n node {\n id\n version\n status\n releaseNotes\n packageUrl\n }\n }\n }\n }\n }\n", y = "\n mutation DevportalSubmitForReview($id: ID!, $notes: String) {\n submitApplicationForReview(id: $id, notes: $notes) {\n id\n status\n submittedAt\n metadata\n }\n }\n", b = "\n mutation DevportalUnlistProduct($id: ID!) {\n unlistProduct(id: $id) {\n id\n status\n }\n }\n", x = "\n mutation DevportalPublishVersion($id: ID!) {\n publishApplicationVersion(id: $id) {\n id\n status\n }\n }\n";
14
- function S(e) {
14
+ var x = "\n query DevportalAppForSubmission($id: ID!) {\n application(id: $id) {\n id\n name\n slug\n status\n appType\n reviewStatus\n reviewNotes\n iconUrl\n submittedAt\n metadata\n versions {\n edges {\n node {\n id\n version\n status\n releaseNotes\n packageUrl\n }\n }\n }\n }\n }\n", re = "\n mutation DevportalSubmitForReview($id: ID!, $notes: String) {\n submitApplicationForReview(id: $id, notes: $notes) {\n id\n status\n submittedAt\n metadata\n }\n }\n", ie = "\n mutation DevportalUnlistProduct($id: ID!) {\n unlistProduct(id: $id) {\n id\n status\n }\n }\n", S = "\n mutation DevportalPublishVersion($id: ID!) {\n publishApplicationVersion(id: $id) {\n id\n status\n }\n }\n";
15
+ function C(e) {
15
16
  if (!e) return null;
16
17
  let t = e.metadata ?? {}, n = typeof t.storeProductId == "string" ? t.storeProductId : "", r = typeof t.storeSubmissionStatus == "string" ? t.storeSubmissionStatus : null, i;
17
18
  i = r === "PENDING_REVIEW" || r === "PUBLISHED" || r === "REJECTED" || r === "DRAFT" ? r : e.status === "SUBMITTED" ? "PENDING_REVIEW" : e.status === "PUBLISHED" ? "PUBLISHED" : e.status === "REJECTED" ? "REJECTED" : "UNKNOWN";
@@ -26,55 +27,55 @@ function S(e) {
26
27
  rejectedReason: null
27
28
  };
28
29
  }
29
- var C = {
30
+ var ae = {
30
31
  DRAFT: {
31
32
  i18nKey: "devportal.storeSubmission.status.draft",
32
33
  fallback: "Draft",
33
- icon: c,
34
+ icon: l,
34
35
  tone: "text-text-secondary"
35
36
  },
36
37
  PENDING_REVIEW: {
37
38
  i18nKey: "devportal.storeSubmission.status.pending",
38
39
  fallback: "Pending review",
39
- icon: c,
40
+ icon: l,
40
41
  tone: "text-status-warning-text"
41
42
  },
42
43
  PUBLISHED: {
43
44
  i18nKey: "devportal.storeSubmission.status.published",
44
45
  fallback: "Published",
45
- icon: s,
46
+ icon: c,
46
47
  tone: "text-status-success-text"
47
48
  },
48
49
  UNLISTED: {
49
50
  i18nKey: "devportal.storeSubmission.status.unlisted",
50
51
  fallback: "Unlisted",
51
- icon: l,
52
+ icon: u,
52
53
  tone: "text-text-secondary"
53
54
  },
54
55
  REJECTED: {
55
56
  i18nKey: "devportal.storeSubmission.status.rejected",
56
57
  fallback: "Rejected",
57
- icon: f,
58
+ icon: h,
58
59
  tone: "text-status-danger-text"
59
60
  },
60
61
  UNKNOWN: {
61
62
  i18nKey: "devportal.storeSubmission.status.unknown",
62
63
  fallback: "Not yet submitted",
63
- icon: o,
64
+ icon: s,
64
65
  tone: "text-text-tertiary"
65
66
  }
66
67
  }, w = () => {
67
- let { appId: w } = m(), T = p(), E = e(), D = t(), O = n(r.APP_SUBMIT), [k, ae] = a(null), [A, j] = a(!0), [M, N] = a(null), [P, F] = a(!1), [I, L] = a(!1), [R, z] = a(!1), [B, V] = a(null), [H, U] = a(""), W = async () => {
68
+ let { appId: w } = _(), T = g(), E = e(), D = t(), O = n(r.APP_SUBMIT), [k, oe] = o(null), [A, j] = o(!0), [M, N] = o(null), [P, F] = o(!1), [I, L] = o(!1), [R, z] = o(!1), [B, V] = o(null), [H, U] = o(""), W = async () => {
68
69
  if (w) {
69
70
  j(!0), N(null);
70
71
  try {
71
- let e = await _({
72
+ let e = await b({
72
73
  gateway: "global",
73
- query: v,
74
+ query: x,
74
75
  variables: { id: w }
75
76
  });
76
77
  if (e.errors?.length) throw Error(e.errors[0]?.message ?? D("devportal.storeSubmission.errors.loadFailed", "Failed to load application"));
77
- ae(e.data?.application ?? null);
78
+ oe(e.data?.application ?? null);
78
79
  } catch (e) {
79
80
  N(e instanceof Error ? e.message : D("devportal.storeSubmission.errors.loadFailed", "Failed to load application"));
80
81
  } finally {
@@ -82,9 +83,9 @@ var C = {
82
83
  }
83
84
  }
84
85
  };
85
- i(() => {
86
+ a(() => {
86
87
  W();
87
- }, [w]), i(() => {
88
+ }, [w]), a(() => {
88
89
  let e = k?.name;
89
90
  if (!w || !e) return;
90
91
  let t = window.__breadcrumbRegistry;
@@ -96,16 +97,16 @@ var C = {
96
97
  try {
97
98
  let e = (k?.versions.edges ?? []).map((e) => e.node).filter((e) => e.status === "draft");
98
99
  for (let t of e) {
99
- let e = await _({
100
+ let e = await b({
100
101
  gateway: "global",
101
- query: x,
102
+ query: S,
102
103
  variables: { id: t.id }
103
104
  });
104
105
  if (e.errors?.length) throw Error(e.errors[0]?.message ?? `Failed to submit version ${t.version}`);
105
106
  }
106
- let t = await _({
107
+ let t = await b({
107
108
  gateway: "global",
108
- query: y,
109
+ query: re,
109
110
  variables: {
110
111
  id: w,
111
112
  notes: H || null
@@ -120,13 +121,13 @@ var C = {
120
121
  }
121
122
  }
122
123
  }, K = async () => {
123
- let e = S(k)?.productId;
124
+ let e = C(k)?.productId;
124
125
  if (e) {
125
126
  L(!0), N(null);
126
127
  try {
127
- let t = await _({
128
+ let t = await b({
128
129
  gateway: "global",
129
- query: b,
130
+ query: ie,
130
131
  variables: { id: e }
131
132
  });
132
133
  if (t.errors?.length) throw Error(t.errors[0]?.message ?? D("devportal.storeSubmission.errors.unlistFailed", "Failed to unlist"));
@@ -137,31 +138,31 @@ var C = {
137
138
  L(!1), z(!1);
138
139
  }
139
140
  }
140
- }, q = S(k), J = B ?? q?.status ?? "UNKNOWN", Y = C[J], oe = Y.icon, X = (k?.versions.edges ?? []).map((e) => e.node), Z = X.filter((e) => e.status === "draft"), Q = k?.appType === "NODE" || k?.appType === "WORKFLOW", $ = Q && X.length === 0;
141
- return /* @__PURE__ */ g("main", {
141
+ }, q = C(k), J = B ?? q?.status ?? "UNKNOWN", Y = ae[J], se = Y.icon, X = (k?.versions.edges ?? []).map((e) => e.node), Z = X.filter((e) => e.status === "draft"), Q = k?.appType === "NODE" || k?.appType === "WORKFLOW", $ = Q && X.length === 0;
142
+ return /* @__PURE__ */ y("main", {
142
143
  className: "min-h-screen bg-surface-default",
143
144
  "aria-labelledby": "store-submission-heading",
144
145
  children: [
145
- /* @__PURE__ */ h("div", {
146
+ /* @__PURE__ */ v("div", {
146
147
  className: "border-b border-border-default bg-surface-raised",
147
- children: /* @__PURE__ */ h("div", {
148
+ children: /* @__PURE__ */ v("div", {
148
149
  className: "mx-auto max-w-3xl px-6 py-4",
149
- children: /* @__PURE__ */ g("div", {
150
+ children: /* @__PURE__ */ y("div", {
150
151
  className: "flex items-center gap-3",
151
- children: [/* @__PURE__ */ g("button", {
152
+ children: [/* @__PURE__ */ y("button", {
152
153
  type: "button",
153
154
  onClick: () => T(-1),
154
155
  className: "inline-flex items-center gap-2 rounded-md px-3 py-1.5 text-sm text-text-secondary hover:bg-surface-hover hover:text-text-primary focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
155
- children: [/* @__PURE__ */ h(ee, {
156
+ children: [/* @__PURE__ */ v(ee, {
156
157
  className: "h-4 w-4",
157
158
  "aria-hidden": "true"
158
159
  }), D("devportal.common.back", "Back")]
159
- }), /* @__PURE__ */ g("div", {
160
+ }), /* @__PURE__ */ y("div", {
160
161
  className: "flex items-center gap-2",
161
- children: [/* @__PURE__ */ h(ne, {
162
+ children: [/* @__PURE__ */ v(m, {
162
163
  className: "h-5 w-5 text-text-primary",
163
164
  "aria-hidden": "true"
164
- }), /* @__PURE__ */ h("h1", {
165
+ }), /* @__PURE__ */ v("h1", {
165
166
  id: "store-submission-heading",
166
167
  className: "text-xl font-semibold text-text-primary",
167
168
  children: D("devportal.storeSubmission.title", "Store submission")
@@ -170,39 +171,39 @@ var C = {
170
171
  })
171
172
  })
172
173
  }),
173
- R && /* @__PURE__ */ h("div", {
174
+ R && /* @__PURE__ */ v("div", {
174
175
  role: "dialog",
175
176
  "aria-modal": "true",
176
177
  "aria-labelledby": "unlist-dialog-title",
177
178
  className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4",
178
- children: /* @__PURE__ */ g("div", {
179
+ children: /* @__PURE__ */ y("div", {
179
180
  className: "w-full max-w-md rounded-lg border border-border-default bg-surface-raised p-6 shadow-xl",
180
- children: [/* @__PURE__ */ g("div", {
181
+ children: [/* @__PURE__ */ y("div", {
181
182
  className: "mb-4 flex items-start gap-3",
182
- children: [/* @__PURE__ */ h(l, {
183
+ children: [/* @__PURE__ */ v(u, {
183
184
  className: "mt-0.5 h-5 w-5 shrink-0 text-text-secondary",
184
185
  "aria-hidden": "true"
185
- }), /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("h2", {
186
+ }), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("h2", {
186
187
  id: "unlist-dialog-title",
187
188
  className: "text-base font-semibold text-text-primary",
188
189
  children: D("devportal.storeSubmission.unlistTitle", "Unlist from marketplace?")
189
- }), /* @__PURE__ */ h("p", {
190
+ }), /* @__PURE__ */ v("p", {
190
191
  className: "mt-1 text-sm text-text-secondary",
191
192
  children: D("devportal.storeSubmission.unlistDescription", "Your app will no longer appear in the marketplace for new users. Existing installations are not affected — users who already have it installed can continue using it.")
192
193
  })] })]
193
- }), /* @__PURE__ */ g("div", {
194
+ }), /* @__PURE__ */ y("div", {
194
195
  className: "flex justify-end gap-3",
195
- children: [/* @__PURE__ */ h("button", {
196
+ children: [/* @__PURE__ */ v("button", {
196
197
  type: "button",
197
198
  onClick: () => z(!1),
198
199
  className: "rounded-md border border-border-default px-4 py-2 text-sm font-medium text-text-secondary hover:bg-surface-hover",
199
200
  children: D("devportal.common.cancel", "Cancel")
200
- }), /* @__PURE__ */ g("button", {
201
+ }), /* @__PURE__ */ y("button", {
201
202
  type: "button",
202
203
  onClick: () => void K(),
203
204
  disabled: I,
204
205
  className: "inline-flex items-center gap-2 rounded-md bg-surface-danger px-4 py-2 text-sm font-semibold text-text-on-danger hover:opacity-90 disabled:opacity-60",
205
- children: [I && /* @__PURE__ */ h(d, {
206
+ children: [I && /* @__PURE__ */ v(p, {
206
207
  className: "h-4 w-4 animate-spin",
207
208
  "aria-hidden": "true"
208
209
  }), D("devportal.storeSubmission.confirmUnlist", "Unlist app")]
@@ -210,56 +211,57 @@ var C = {
210
211
  })]
211
212
  })
212
213
  }),
213
- /* @__PURE__ */ g("div", {
214
+ /* @__PURE__ */ y("div", {
214
215
  className: "mx-auto max-w-3xl px-6 py-6",
215
216
  children: [
216
- (A || !q || J === "UNKNOWN" || J === "DRAFT" || J === "REJECTED") && /* @__PURE__ */ h(ie, {
217
+ (A || !q || J === "UNKNOWN" || J === "DRAFT" || J === "REJECTED") && /* @__PURE__ */ v(ne, {
217
218
  className: "mb-5",
218
219
  children: D("devportal.storeSubmission.purpose", "Finalize the details the marketplace needs before your app can be reviewed — pricing, categories, and required assets. Completing this is what makes the app eligible to submit for publication.")
219
220
  }),
220
- M && /* @__PURE__ */ h("div", {
221
+ M && /* @__PURE__ */ v("div", {
221
222
  role: "alert",
222
223
  className: "mb-4 rounded-md border border-border-danger bg-surface-danger-muted px-4 py-3 text-sm text-text-danger",
223
224
  children: M
224
225
  }),
225
- A && !k ? /* @__PURE__ */ h("div", {
226
+ A && !k ? /* @__PURE__ */ v("div", {
226
227
  className: "py-16 text-center text-text-secondary",
227
228
  role: "status",
228
229
  "aria-live": "polite",
229
230
  children: D("devportal.storeSubmission.loading", "Loading application…")
230
- }) : k ? /* @__PURE__ */ g("div", {
231
+ }) : k ? /* @__PURE__ */ y("div", {
231
232
  className: "space-y-4",
232
233
  children: [
233
- /* @__PURE__ */ h("div", {
234
+ /* @__PURE__ */ v("div", {
234
235
  className: "rounded-lg border border-border-default bg-surface-raised p-4",
235
- children: /* @__PURE__ */ g("div", {
236
+ children: /* @__PURE__ */ y("div", {
236
237
  className: "flex items-center gap-3",
237
238
  children: [
238
- k.iconUrl ? /* @__PURE__ */ h("img", {
239
+ /* @__PURE__ */ v(i, {
239
240
  src: k.iconUrl,
240
241
  alt: "",
241
- className: "h-14 w-14 flex-shrink-0 rounded-md object-cover"
242
- }) : /* @__PURE__ */ h("div", {
243
- className: "flex h-14 w-14 flex-shrink-0 items-center justify-center rounded-md bg-surface-muted text-text-secondary text-sm font-medium",
244
- children: k.name.slice(0, 2).toUpperCase()
242
+ className: "h-14 w-14 flex-shrink-0 rounded-md object-cover",
243
+ fallback: /* @__PURE__ */ v("div", {
244
+ className: "flex h-14 w-14 flex-shrink-0 items-center justify-center rounded-md bg-surface-muted text-text-secondary text-sm font-medium",
245
+ children: k.name.slice(0, 2).toUpperCase()
246
+ })
245
247
  }),
246
- /* @__PURE__ */ g("div", {
248
+ /* @__PURE__ */ y("div", {
247
249
  className: "min-w-0 flex-1",
248
- children: [/* @__PURE__ */ h("h2", {
250
+ children: [/* @__PURE__ */ v("h2", {
249
251
  className: "text-lg font-semibold text-text-primary",
250
252
  children: k.name
251
- }), /* @__PURE__ */ h("p", {
253
+ }), /* @__PURE__ */ v("p", {
252
254
  className: "font-mono text-xs text-text-tertiary",
253
255
  children: k.slug
254
256
  })]
255
257
  }),
256
- /* @__PURE__ */ g("div", {
258
+ /* @__PURE__ */ y("div", {
257
259
  className: `flex items-center gap-1.5 ${Y.tone}`,
258
260
  role: "status",
259
- children: [/* @__PURE__ */ h(oe, {
261
+ children: [/* @__PURE__ */ v(se, {
260
262
  className: "h-5 w-5",
261
263
  "aria-hidden": "true"
262
- }), /* @__PURE__ */ h("span", {
264
+ }), /* @__PURE__ */ v("span", {
263
265
  className: "text-sm font-medium",
264
266
  children: D(Y.i18nKey, Y.fallback)
265
267
  })]
@@ -267,18 +269,18 @@ var C = {
267
269
  ]
268
270
  })
269
271
  }),
270
- J === "PENDING_REVIEW" && /* @__PURE__ */ g("div", {
272
+ J === "PENDING_REVIEW" && /* @__PURE__ */ y("div", {
271
273
  className: "rounded-lg border border-primary/20 bg-action-primary-bg/5 p-5 space-y-4",
272
274
  children: [
273
- /* @__PURE__ */ g("div", {
275
+ /* @__PURE__ */ y("div", {
274
276
  className: "flex items-start gap-3",
275
- children: [/* @__PURE__ */ h(c, {
277
+ children: [/* @__PURE__ */ v(l, {
276
278
  className: "h-5 w-5 mt-0.5 shrink-0 text-primary",
277
279
  "aria-hidden": "true"
278
- }), /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("p", {
280
+ }), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
279
281
  className: "text-sm font-semibold text-text-primary",
280
282
  children: D("devportal.storeSubmission.underReview", "Your app is under review")
281
- }), k.submittedAt && /* @__PURE__ */ g("p", {
283
+ }), k.submittedAt && /* @__PURE__ */ y("p", {
282
284
  className: "mt-0.5 text-xs text-text-secondary",
283
285
  children: [
284
286
  D("devportal.storeSubmission.submittedOn", "Submitted on"),
@@ -287,31 +289,31 @@ var C = {
287
289
  ]
288
290
  })] })]
289
291
  }),
290
- /* @__PURE__ */ g("div", {
292
+ /* @__PURE__ */ y("div", {
291
293
  className: "border-t border-border-default pt-4",
292
- children: [/* @__PURE__ */ h("p", {
294
+ children: [/* @__PURE__ */ v("p", {
293
295
  className: "text-xs font-medium text-text-secondary mb-3",
294
296
  children: D("devportal.storeSubmission.whatNext", "What happens next")
295
- }), /* @__PURE__ */ g("ol", {
297
+ }), /* @__PURE__ */ y("ol", {
296
298
  className: "space-y-2.5 text-sm text-text-secondary",
297
299
  children: [
298
- /* @__PURE__ */ g("li", {
300
+ /* @__PURE__ */ y("li", {
299
301
  className: "flex items-start gap-2",
300
- children: [/* @__PURE__ */ h("span", {
302
+ children: [/* @__PURE__ */ v("span", {
301
303
  className: "flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-surface-muted text-xs font-medium text-text-tertiary",
302
304
  children: "1"
303
305
  }), "Our team reviews your app's listing, assets, and compliance."]
304
306
  }),
305
- /* @__PURE__ */ g("li", {
307
+ /* @__PURE__ */ y("li", {
306
308
  className: "flex items-start gap-2",
307
- children: [/* @__PURE__ */ h("span", {
309
+ children: [/* @__PURE__ */ v("span", {
308
310
  className: "flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-surface-muted text-xs font-medium text-text-tertiary",
309
311
  children: "2"
310
312
  }), "You'll receive a notification when a decision is made."]
311
313
  }),
312
- /* @__PURE__ */ g("li", {
314
+ /* @__PURE__ */ y("li", {
313
315
  className: "flex items-start gap-2",
314
- children: [/* @__PURE__ */ h("span", {
316
+ children: [/* @__PURE__ */ v("span", {
315
317
  className: "flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-surface-muted text-xs font-medium text-text-tertiary",
316
318
  children: "3"
317
319
  }), "If approved, your app goes live in the marketplace automatically."]
@@ -319,31 +321,31 @@ var C = {
319
321
  ]
320
322
  })]
321
323
  }),
322
- k.reviewNotes && /* @__PURE__ */ g("div", {
324
+ k.reviewNotes && /* @__PURE__ */ y("div", {
323
325
  className: "border-t border-border-default pt-4",
324
- children: [/* @__PURE__ */ h("p", {
326
+ children: [/* @__PURE__ */ v("p", {
325
327
  className: "text-xs font-medium text-text-secondary mb-1",
326
328
  children: D("devportal.storeSubmission.reviewerNotes", "Reviewer notes")
327
- }), /* @__PURE__ */ h("p", {
329
+ }), /* @__PURE__ */ v("p", {
328
330
  className: "text-sm text-text-primary",
329
331
  children: k.reviewNotes
330
332
  })]
331
333
  })
332
334
  ]
333
335
  }),
334
- J === "PUBLISHED" && /* @__PURE__ */ g("div", {
336
+ J === "PUBLISHED" && /* @__PURE__ */ y("div", {
335
337
  className: "rounded-lg border border-status-success-bg bg-status-success-bg-subtle p-5 space-y-4",
336
- children: [/* @__PURE__ */ g("div", {
338
+ children: [/* @__PURE__ */ y("div", {
337
339
  className: "flex items-start gap-3",
338
- children: [/* @__PURE__ */ h(s, {
340
+ children: [/* @__PURE__ */ v(c, {
339
341
  className: "h-5 w-5 mt-0.5 shrink-0 text-status-success-text",
340
342
  "aria-hidden": "true"
341
- }), /* @__PURE__ */ g("div", {
343
+ }), /* @__PURE__ */ y("div", {
342
344
  className: "flex-1 min-w-0",
343
- children: [/* @__PURE__ */ h("p", {
345
+ children: [/* @__PURE__ */ v("p", {
344
346
  className: "text-sm font-semibold text-status-success-text",
345
347
  children: D("devportal.storeSubmission.publishedTitle", "Your app is live in the marketplace")
346
- }), q?.publishedAt && /* @__PURE__ */ g("p", {
348
+ }), q?.publishedAt && /* @__PURE__ */ y("p", {
347
349
  className: "mt-0.5 text-xs text-text-secondary",
348
350
  children: [
349
351
  D("devportal.storeSubmission.publishedOn", "Published on"),
@@ -352,101 +354,101 @@ var C = {
352
354
  ]
353
355
  })]
354
356
  })]
355
- }), q?.productId && /* @__PURE__ */ g("div", {
357
+ }), q?.productId && /* @__PURE__ */ y("div", {
356
358
  className: "border-t border-status-success-bg pt-4",
357
- children: [/* @__PURE__ */ h("p", {
359
+ children: [/* @__PURE__ */ v("p", {
358
360
  className: "mb-2 text-xs text-text-secondary",
359
361
  children: D("devportal.storeSubmission.unlistHint", "Need to remove this app from the marketplace? Unlisting hides it from new users while keeping existing installations active.")
360
- }), /* @__PURE__ */ g("button", {
362
+ }), /* @__PURE__ */ y("button", {
361
363
  type: "button",
362
364
  onClick: () => z(!0),
363
365
  className: "inline-flex items-center gap-2 rounded-md border border-border-default bg-surface-raised px-3 py-1.5 text-sm font-medium text-text-secondary hover:bg-surface-hover hover:text-text-primary",
364
- children: [/* @__PURE__ */ h(l, {
366
+ children: [/* @__PURE__ */ v(u, {
365
367
  className: "h-4 w-4",
366
368
  "aria-hidden": "true"
367
369
  }), D("devportal.storeSubmission.unlistButton", "Unlist from marketplace")]
368
370
  })]
369
371
  })]
370
372
  }),
371
- J === "UNLISTED" && /* @__PURE__ */ g("div", {
373
+ J === "UNLISTED" && /* @__PURE__ */ y("div", {
372
374
  className: "rounded-lg border border-border-default bg-surface-muted p-5 flex items-start gap-3",
373
- children: [/* @__PURE__ */ h(l, {
375
+ children: [/* @__PURE__ */ v(u, {
374
376
  className: "h-5 w-5 mt-0.5 shrink-0 text-text-secondary",
375
377
  "aria-hidden": "true"
376
- }), /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("p", {
378
+ }), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
377
379
  className: "text-sm font-semibold text-text-primary",
378
380
  children: D("devportal.storeSubmission.unlistedTitle", "Your app has been unlisted")
379
- }), /* @__PURE__ */ h("p", {
381
+ }), /* @__PURE__ */ v("p", {
380
382
  className: "mt-0.5 text-xs text-text-secondary",
381
383
  children: D("devportal.storeSubmission.unlistedDescription", "It no longer appears in the marketplace for new users. Existing installations remain active and unaffected.")
382
384
  })] })]
383
385
  }),
384
- J === "REJECTED" && /* @__PURE__ */ g("div", {
386
+ J === "REJECTED" && /* @__PURE__ */ y("div", {
385
387
  className: "rounded-lg border border-status-error-bg bg-status-error-bg-subtle p-5 space-y-3",
386
- children: [/* @__PURE__ */ g("div", {
388
+ children: [/* @__PURE__ */ y("div", {
387
389
  className: "flex items-start gap-3",
388
- children: [/* @__PURE__ */ h(f, {
390
+ children: [/* @__PURE__ */ v(h, {
389
391
  className: "h-5 w-5 mt-0.5 shrink-0 text-status-error-text",
390
392
  "aria-hidden": "true"
391
- }), /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("p", {
393
+ }), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
392
394
  className: "text-sm font-semibold text-status-error-text",
393
395
  children: D("devportal.storeSubmission.rejectedTitle", "Submission was not approved")
394
- }), /* @__PURE__ */ h("p", {
396
+ }), /* @__PURE__ */ v("p", {
395
397
  className: "mt-0.5 text-xs text-text-secondary",
396
398
  children: D("devportal.storeSubmission.rejectedHint", "Address the feedback below and resubmit.")
397
399
  })] })]
398
- }), k.reviewNotes && /* @__PURE__ */ g("div", {
400
+ }), k.reviewNotes && /* @__PURE__ */ y("div", {
399
401
  className: "rounded-md bg-surface-muted p-3",
400
- children: [/* @__PURE__ */ h("p", {
402
+ children: [/* @__PURE__ */ v("p", {
401
403
  className: "text-xs font-medium text-text-secondary mb-1",
402
404
  children: D("devportal.storeSubmission.reviewerFeedback", "Reviewer feedback")
403
- }), /* @__PURE__ */ h("p", {
405
+ }), /* @__PURE__ */ v("p", {
404
406
  className: "text-sm text-text-primary",
405
407
  children: k.reviewNotes
406
408
  })]
407
409
  })]
408
410
  }),
409
- (J === "UNKNOWN" || J === "DRAFT" || J === "REJECTED") && /* @__PURE__ */ g("div", {
411
+ (J === "UNKNOWN" || J === "DRAFT" || J === "REJECTED") && /* @__PURE__ */ y("div", {
410
412
  className: "rounded-lg border border-border-default bg-surface-raised p-4 space-y-4",
411
413
  children: [
412
- /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("h3", {
414
+ /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("h3", {
413
415
  className: "mb-1 text-sm font-semibold text-text-primary",
414
416
  children: J === "REJECTED" ? D("devportal.storeSubmission.resubmitForReview", "Resubmit for review") : D("devportal.storeSubmission.submitForReview", "Submit for review")
415
- }), /* @__PURE__ */ h("p", {
417
+ }), /* @__PURE__ */ v("p", {
416
418
  className: "text-sm text-text-secondary",
417
419
  children: D("devportal.storeSubmission.help", "Your application will be sent to the store's review queue. Whether it's auto-published or requires admin approval depends on the target store's configuration.")
418
420
  })] }),
419
- Q && /* @__PURE__ */ g("div", {
421
+ Q && /* @__PURE__ */ y("div", {
420
422
  className: "rounded-md border border-border-default bg-surface-muted p-3 space-y-2",
421
- children: [/* @__PURE__ */ g("div", {
423
+ children: [/* @__PURE__ */ y("div", {
422
424
  className: "flex items-center gap-2 text-xs font-medium text-text-secondary",
423
- children: [/* @__PURE__ */ h(u, {
425
+ children: [/* @__PURE__ */ v(d, {
424
426
  className: "h-3.5 w-3.5",
425
427
  "aria-hidden": "true"
426
428
  }), D("devportal.storeSubmission.versionsIncluded", "Versions included in this submission")]
427
- }), $ ? /* @__PURE__ */ g("div", {
429
+ }), $ ? /* @__PURE__ */ y("div", {
428
430
  className: "flex items-start gap-2 text-sm text-status-danger-text",
429
- children: [/* @__PURE__ */ h(o, {
431
+ children: [/* @__PURE__ */ v(s, {
430
432
  className: "h-4 w-4 mt-0.5 shrink-0",
431
433
  "aria-hidden": "true"
432
- }), /* @__PURE__ */ h("span", { children: D("devportal.storeSubmission.noVersionsError", "You must create at least one version before submitting. Go to the Versions tab to create one.") })]
433
- }) : Z.length === 0 ? /* @__PURE__ */ h("p", {
434
+ }), /* @__PURE__ */ v("span", { children: D("devportal.storeSubmission.noVersionsError", "You must create at least one version before submitting. Go to the Versions tab to create one.") })]
435
+ }) : Z.length === 0 ? /* @__PURE__ */ v("p", {
434
436
  className: "text-xs text-text-secondary",
435
437
  children: D("devportal.storeSubmission.noDraftVersions", "No draft versions — all versions are already submitted or published.")
436
- }) : /* @__PURE__ */ h("ul", {
438
+ }) : /* @__PURE__ */ v("ul", {
437
439
  className: "space-y-1",
438
- children: Z.map((e) => /* @__PURE__ */ g("li", {
440
+ children: Z.map((e) => /* @__PURE__ */ y("li", {
439
441
  className: "flex items-center gap-2 text-sm",
440
442
  children: [
441
- /* @__PURE__ */ h(te, {
443
+ /* @__PURE__ */ v(f, {
442
444
  className: "h-3.5 w-3.5 text-text-secondary shrink-0",
443
445
  "aria-hidden": "true"
444
446
  }),
445
- /* @__PURE__ */ h("span", {
447
+ /* @__PURE__ */ v("span", {
446
448
  className: "font-mono font-medium",
447
449
  children: e.version
448
450
  }),
449
- e.releaseNotes && /* @__PURE__ */ g("span", {
451
+ e.releaseNotes && /* @__PURE__ */ y("span", {
450
452
  className: "text-xs text-text-secondary truncate",
451
453
  children: ["— ", e.releaseNotes]
452
454
  })
@@ -454,16 +456,16 @@ var C = {
454
456
  }, e.id))
455
457
  })]
456
458
  }),
457
- /* @__PURE__ */ g("div", { children: [
458
- /* @__PURE__ */ h("label", {
459
+ /* @__PURE__ */ y("div", { children: [
460
+ /* @__PURE__ */ v("label", {
459
461
  className: "block",
460
462
  htmlFor: "store-submission-notes",
461
- children: /* @__PURE__ */ h("span", {
463
+ children: /* @__PURE__ */ v("span", {
462
464
  className: "sr-only",
463
465
  children: D("devportal.storeSubmission.notesLabel", "Notes for the reviewer (optional)")
464
466
  })
465
467
  }),
466
- /* @__PURE__ */ h("textarea", {
468
+ /* @__PURE__ */ v("textarea", {
467
469
  id: "store-submission-notes",
468
470
  value: H,
469
471
  onChange: (e) => U(e.target.value),
@@ -471,14 +473,14 @@ var C = {
471
473
  placeholder: D("devportal.storeSubmission.notesLabel", "Notes for the reviewer (optional)"),
472
474
  className: "mb-3 w-full rounded-md border border-border-default bg-surface-default px-3 py-2 text-sm text-text-primary focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary"
473
475
  }),
474
- /* @__PURE__ */ g("button", {
476
+ /* @__PURE__ */ y("button", {
475
477
  type: "button",
476
478
  onClick: () => void G(),
477
479
  disabled: P || !O.allowed || $,
478
480
  "aria-disabled": P || !O.allowed || $,
479
481
  title: $ ? D("devportal.storeSubmission.noVersionsError", "Create a version first") : O.allowed ? void 0 : D("devportal.common.noPermission", "You do not have permission to perform this action"),
480
482
  className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-semibold text-action-primary-text hover:opacity-90 disabled:opacity-60 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
481
- children: [P && /* @__PURE__ */ h(d, {
483
+ children: [P && /* @__PURE__ */ v(p, {
482
484
  className: "h-4 w-4 animate-spin",
483
485
  "aria-hidden": "true"
484
486
  }), J === "REJECTED" ? D("devportal.storeSubmission.resubmit", "Resubmit") : D("devportal.storeSubmission.submitForReview", "Submit for review")]
@@ -486,18 +488,18 @@ var C = {
486
488
  ] })
487
489
  ]
488
490
  }),
489
- q?.productId && /* @__PURE__ */ g("div", {
491
+ q?.productId && /* @__PURE__ */ y("div", {
490
492
  className: "rounded-lg border border-border-default bg-surface-raised p-4",
491
- children: [/* @__PURE__ */ h("p", {
493
+ children: [/* @__PURE__ */ v("p", {
492
494
  className: "text-xs font-medium text-text-secondary",
493
495
  children: D("devportal.storeSubmission.storeProductId", "Store product ID")
494
- }), /* @__PURE__ */ h("code", {
496
+ }), /* @__PURE__ */ v("code", {
495
497
  className: "mt-1 block break-all font-mono text-xs text-text-primary",
496
498
  children: q.productId
497
499
  })]
498
500
  })
499
501
  ]
500
- }) : /* @__PURE__ */ h(re, {
502
+ }) : /* @__PURE__ */ v(te, {
501
503
  illustration: "empty-generic",
502
504
  title: D("devportal.storeSubmission.notFoundTitle", "Application not found"),
503
505
  description: D("devportal.storeSubmission.notFound", "Application not found.")