@burdenoff/microfe-devportal 2026.713.2 → 2026.713.4

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