@burdenoff/microfe-devportal 2026.805.1 → 2026.805.3

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.
@@ -1,31 +1,31 @@
1
1
  import { useDevportal as e } from "../providers/DevportalProvider.js";
2
2
  import { EmptyState as t } from "../components/EmptyState.js";
3
3
  import { useApproveApplicationVersionMutation as n, useCreateApplicationVersionMutation as r, useDeprecateApplicationVersionMutation as ee, useGetApplicationQuery as te, useGetApplicationVersionsQuery as ne, usePublishApplicationVersionMutation as re, useRejectApplicationVersionMutation as ie, useUpdateApplicationVersionMutation as ae } from "../../generated/global-operations.js";
4
- import { PageLayout as i } from "../components/PageLayout.js";
5
- import { StatusBadge as oe } from "../components/StatusBadge.js";
6
- import { SelectionCheckbox as se } from "../components/SelectionCheckbox.js";
7
- import { DataTable as ce } from "../components/DataTable.js";
8
- import { InputField as le } from "../components/FormField.js";
9
- import { ConfirmDialog as a } from "../components/ConfirmDialog.js";
10
- import { PermissionGuard as ue } from "../components/PermissionGuard.js";
11
- import { MarkdownEditor as o } from "../components/MarkdownEditor.js";
4
+ import { PageLayout as oe } from "../components/PageLayout.js";
5
+ import { StatusBadge as se } from "../components/StatusBadge.js";
6
+ import { SelectionCheckbox as ce } from "../components/SelectionCheckbox.js";
7
+ import { DataTable as le } from "../components/DataTable.js";
8
+ import { InputField as ue } from "../components/FormField.js";
9
+ import { ConfirmDialog as i } from "../components/ConfirmDialog.js";
10
+ import { PermissionGuard as de } from "../components/PermissionGuard.js";
11
+ import { MarkdownEditor as a } from "../components/MarkdownEditor.js";
12
12
  import "../components/index.js";
13
- import { useDevportalPermission as de } from "../hooks/usePermission.js";
13
+ import { useDevportalPermission as fe } from "../hooks/usePermission.js";
14
14
  import "../hooks/index.js";
15
- import { DEVPORTAL_PERMISSIONS as s } from "../constants/permissions.js";
16
- import fe from "../../node_modules/date-fns/format.js";
17
- import { usePackageUpload as pe } from "../hooks/usePackageUpload.js";
18
- import { useCallback as c, useEffect as me, useMemo as l, useRef as u, useState as d } from "react";
19
- import { useI18n as he } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
20
- import { AlertCircle as f, Archive as ge, CheckCircle as _e, Clock as ve, Loader2 as p, Package as ye, Plus as be, Send as m, Upload as h, XCircle as xe } from "lucide-react";
21
- import { useParams as Se } from "react-router";
22
- import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
15
+ import { DEVPORTAL_PERMISSIONS as pe } from "../constants/permissions.js";
16
+ import me from "../../node_modules/date-fns/format.js";
17
+ import { usePackageUpload as he } from "../hooks/usePackageUpload.js";
18
+ import { useCallback as o, useEffect as ge, useMemo as s, useRef as c, useState as l } from "react";
19
+ import { useI18n as _e } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
20
+ import { AlertCircle as u, Archive as ve, CheckCircle as ye, Clock as be, Loader2 as d, Package as xe, Plus as Se, Send as f, Upload as p, XCircle as Ce } from "lucide-react";
21
+ import { useParams as we } from "react-router";
22
+ import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
23
23
  //#region src/devportal/pages/ApplicationVersionsPage.tsx
24
- var Ce = () => {
25
- let { t: Ce } = he(), y = (e, t) => {
26
- let n = Ce(e);
24
+ var Te = () => {
25
+ let { t: Te } = _e(), _ = (e, t) => {
26
+ let n = Te(e);
27
27
  return n === e ? t : n;
28
- }, { allowed: we } = de(s.APP_VERSION_CREATE), { allowed: b } = de(s.APP_VERSION_PUBLISH), { allowed: x } = de(s.APP_VERSION_DEPRECATE), { appId: S } = Se(), { workspacesGatewayUrl: Te, authToken: Ee, workspaceId: De, getWorkspaceToken: Oe } = e(), { upload: C, uploading: w, progress: ke, error: T } = pe(Te, Ee, De, Oe), Ae = u(null), je = u(null), Me = u(null), Ne = u(null), [Pe, E] = d(null), [Fe, D] = d(null), [Ie, O] = d(!1), [k, A] = d(null), [j, M] = d({
28
+ }, { allowed: v } = fe(pe.APP_VERSION_CREATE), { allowed: y } = fe(pe.APP_VERSION_PUBLISH), { allowed: b } = fe(pe.APP_VERSION_DEPRECATE), { appId: x } = we(), { workspacesGatewayUrl: Ee, authToken: De, workspaceId: Oe, getWorkspaceToken: ke } = e(), { upload: S, uploading: C, progress: Ae, error: w } = he(Ee, De, Oe, ke), je = c(null), Me = c(null), Ne = c(null), Pe = c(null), [Fe, T] = l(null), [Ie, E] = l(null), [Le, D] = l(!1), [O, k] = l(null), [A, j] = l({
29
29
  version: "",
30
30
  releaseNotes: "",
31
31
  changelog: "",
@@ -33,87 +33,87 @@ var Ce = () => {
33
33
  packageSize: "",
34
34
  manifestJson: "",
35
35
  requiredScopes: ""
36
- }), [Le, N] = d(null), [Re, P] = d(null), [ze, F] = d(null), [Be, I] = d(null), [L, R] = d(/* @__PURE__ */ new Set()), [z, Ve] = d(null), [B, V] = d(""), He = c((e) => {
36
+ }), [Re, M] = l(null), [ze, N] = l(null), [Be, P] = l(null), [Ve, F] = l(null), [I, He] = l(/* @__PURE__ */ new Set()), [L, Ue] = l(null), [R, z] = l(""), We = o((e) => {
37
37
  let t = e.target.files?.[0];
38
38
  if (!t) return;
39
39
  let n = new FileReader();
40
40
  n.onload = (e) => {
41
41
  let n = e.target?.result;
42
- typeof n == "string" && (M((e) => ({
42
+ typeof n == "string" && (j((e) => ({
43
43
  ...e,
44
44
  manifestJson: n
45
- })), E(t.name));
45
+ })), T(t.name));
46
46
  }, n.readAsText(t), e.target.value = "";
47
- }, []), [Ue, H] = d(null), { data: U } = te({
48
- variables: { id: S ?? "" },
49
- skip: !S,
47
+ }, []), [Ge, B] = l(null), { data: V } = te({
48
+ variables: { id: x ?? "" },
49
+ skip: !x,
50
50
  fetchPolicy: "cache-first"
51
- }), W = U?.application?.appType === "WORKFLOW", G = U?.application?.appType === "NODE", K = [
51
+ }), H = V?.application?.appType === "WORKFLOW", U = V?.application?.appType === "NODE", W = [
52
52
  "WORKFLOW",
53
53
  "PARSER",
54
54
  "WIDGET",
55
55
  "DASHBOARD"
56
- ].includes(U?.application?.appType ?? ""), We = !K && !G, q = U?.application, Ge = q?.pricingDetails ?? {}, Ke = q?.pricingType === "FREE" || q?.pricingType === "PAID" && typeof Ge.price == "number" && Ge.price > 0, qe = !!q?.shortDescription?.trim() && !!q?.privacyPolicyUrl?.trim() && !!q?.termsOfServiceUrl?.trim(), J = Ke && qe, Je = [...qe ? [] : ["Complete your store listing (short description, privacy policy, terms of service)"], ...Ke ? [] : ["Set pricing in the Pricing tab"]];
57
- me(() => {
58
- let e = U?.application?.name;
59
- if (!S || !e) return;
56
+ ].includes(V?.application?.appType ?? ""), Ke = !W && !U, G = V?.application, qe = G?.pricingDetails ?? {}, Je = G?.pricingType === "FREE" || G?.pricingType === "PAID" && typeof qe.price == "number" && qe.price > 0, Ye = !!G?.shortDescription?.trim() && !!G?.privacyPolicyUrl?.trim() && !!G?.termsOfServiceUrl?.trim(), K = Je && Ye, q = [...Ye ? [] : ["Complete your store listing (short description, privacy policy, terms of service)"], ...Je ? [] : ["Set pricing in the Pricing tab"]];
57
+ ge(() => {
58
+ let e = V?.application?.name;
59
+ if (!x || !e) return;
60
60
  let t = window.__breadcrumbRegistry;
61
- return t?.register(S, e), () => t?.unregister(S);
62
- }, [S, U?.application?.name]);
63
- let { data: Y, loading: Ye, error: Xe } = ne({
64
- variables: { applicationId: S },
65
- skip: !S,
61
+ return t?.register(x, e), () => t?.unregister(x);
62
+ }, [x, V?.application?.name]);
63
+ let { data: J, loading: Xe, error: Ze } = ne({
64
+ variables: { applicationId: x },
65
+ skip: !x,
66
66
  fetchPolicy: "cache-and-network"
67
- }), [Ze, { loading: Qe }] = r({ refetchQueries: ["GetApplicationVersions"] }), [$e, { loading: et }] = ae({ refetchQueries: ["GetApplicationVersions"] }), [tt] = re({ refetchQueries: ["GetApplicationVersions"] }), [nt] = ee({ refetchQueries: ["GetApplicationVersions"] }), [rt] = n({ refetchQueries: ["GetApplicationVersions"] }), [it] = ie({ refetchQueries: ["GetApplicationVersions"] }), X = l(() => Y?.application?.versions?.edges?.map((e) => e.node) ?? [], [Y?.application?.versions]), Z = l(() => X.filter((e) => L.has(e.id)), [X, L]), Q = l(() => Z.filter((e) => e.status === "draft" || e.status === "rejected"), [Z]), $ = l(() => Z.filter((e) => e.status?.toUpperCase() === "PUBLISHED" && !e.isLatest), [Z]), at = X.length > 0 && X.every((e) => L.has(e.id)), ot = X.some((e) => L.has(e.id)) && !at, st = async () => {
68
- if (!S || !j.version.trim()) return;
69
- F(null);
67
+ }), [Qe, { loading: $e }] = r({ refetchQueries: ["GetApplicationVersions"] }), [et, { loading: tt }] = ae({ refetchQueries: ["GetApplicationVersions"] }), [nt] = re({ refetchQueries: ["GetApplicationVersions"] }), [rt] = ee({ refetchQueries: ["GetApplicationVersions"] }), [it] = n({ refetchQueries: ["GetApplicationVersions"] }), [at] = ie({ refetchQueries: ["GetApplicationVersions"] }), Y = s(() => J?.application?.versions?.edges?.map((e) => e.node) ?? [], [J?.application?.versions]), X = s(() => Y.filter((e) => I.has(e.id)), [Y, I]), Z = s(() => X.filter((e) => e.status === "draft" || e.status === "rejected"), [X]), Q = s(() => Y.some((e) => e.status === "pending_review"), [Y]), $ = s(() => X.filter((e) => e.status?.toUpperCase() === "PUBLISHED" && !e.isLatest), [X]), ot = Y.length > 0 && Y.every((e) => I.has(e.id)), st = Y.some((e) => I.has(e.id)) && !ot, ct = async () => {
68
+ if (!x || !A.version.trim()) return;
69
+ P(null);
70
70
  let e;
71
- if (K) {
72
- if (!j.manifestJson.trim()) {
73
- F(W ? "Workflow Definition (JSON) is required — paste the {nodes, edges} object." : "Manifest (JSON) is required.");
71
+ if (W) {
72
+ if (!A.manifestJson.trim()) {
73
+ P(H ? "Workflow Definition (JSON) is required — paste the {nodes, edges} object." : "Manifest (JSON) is required.");
74
74
  return;
75
75
  }
76
76
  try {
77
- e = JSON.parse(j.manifestJson);
77
+ e = JSON.parse(A.manifestJson);
78
78
  } catch {
79
- F(W ? "Invalid JSON in Workflow Definition — please check your input." : "Invalid JSON in Manifest — please check your input.");
79
+ P(H ? "Invalid JSON in Workflow Definition — please check your input." : "Invalid JSON in Manifest — please check your input.");
80
80
  return;
81
81
  }
82
- } else if (G) {
83
- if (!j.packageUrl) {
84
- F("Package zip is required for Node versions — upload a .zip file before creating.");
82
+ } else if (U) {
83
+ if (!A.packageUrl) {
84
+ P("Package zip is required for Node versions — upload a .zip file before creating.");
85
85
  return;
86
86
  }
87
- if (!j.manifestJson.trim()) {
88
- F("manifest.json is required for Node versions — upload or paste your manifest before creating.");
87
+ if (!A.manifestJson.trim()) {
88
+ P("manifest.json is required for Node versions — upload or paste your manifest before creating.");
89
89
  return;
90
90
  }
91
91
  try {
92
- e = JSON.parse(j.manifestJson);
92
+ e = JSON.parse(A.manifestJson);
93
93
  } catch {
94
- F("Invalid JSON in manifest — please check your input.");
94
+ P("Invalid JSON in manifest — please check your input.");
95
95
  return;
96
96
  }
97
- } else if (j.manifestJson.trim()) try {
98
- e = JSON.parse(j.manifestJson);
97
+ } else if (A.manifestJson.trim()) try {
98
+ e = JSON.parse(A.manifestJson);
99
99
  } catch {
100
- F("Invalid JSON in manifest — please check your input.");
100
+ P("Invalid JSON in manifest — please check your input.");
101
101
  return;
102
102
  }
103
- let t = We && j.requiredScopes.trim() ? j.requiredScopes.split(",").map((e) => e.trim()).filter(Boolean) : void 0;
103
+ let t = Ke && A.requiredScopes.trim() ? A.requiredScopes.split(",").map((e) => e.trim()).filter(Boolean) : void 0;
104
104
  try {
105
- await Ze({ variables: {
106
- applicationId: S,
105
+ await Qe({ variables: {
106
+ applicationId: x,
107
107
  input: {
108
- version: j.version,
109
- releaseNotes: j.releaseNotes || void 0,
110
- changelog: j.changelog || void 0,
111
- packageUrl: j.packageUrl || void 0,
112
- packageSize: j.packageSize || void 0,
108
+ version: A.version,
109
+ releaseNotes: A.releaseNotes || void 0,
110
+ changelog: A.changelog || void 0,
111
+ packageUrl: A.packageUrl || void 0,
112
+ packageSize: A.packageSize || void 0,
113
113
  manifest: e,
114
114
  requiredScopes: t
115
115
  }
116
- } }), O(!1), E(null), M({
116
+ } }), D(!1), T(null), j({
117
117
  version: "",
118
118
  releaseNotes: "",
119
119
  changelog: "",
@@ -121,336 +121,349 @@ var Ce = () => {
121
121
  packageSize: "",
122
122
  manifestJson: "",
123
123
  requiredScopes: ""
124
- }), P(y("devportal.versionCreatedSuccess", "Version created successfully"));
124
+ }), N(_("devportal.versionCreatedSuccess", "Version created successfully"));
125
125
  } catch (e) {
126
- N(e instanceof Error ? e.message : y("devportal.versionCreateFailed", "Failed to create version"));
126
+ M(e instanceof Error ? e.message : _("devportal.versionCreateFailed", "Failed to create version"));
127
127
  }
128
- }, ct = c(async (e) => {
128
+ }, lt = o(async (e) => {
129
129
  let t = e.target.files?.[0];
130
130
  if (t) {
131
131
  e.target.value = "";
132
132
  try {
133
- let e = await C(t);
134
- M((n) => ({
133
+ let e = await S(t);
134
+ j((n) => ({
135
135
  ...n,
136
136
  packageUrl: e.downloadUrl,
137
137
  packageSize: String(t.size)
138
138
  }));
139
139
  } catch {}
140
140
  }
141
- }, [C]), lt = c(async (e) => {
141
+ }, [S]), ut = o(async (e) => {
142
142
  let t = e.target.files?.[0];
143
143
  if (t) {
144
144
  e.target.value = "";
145
145
  try {
146
- let e = await C(t);
147
- A((n) => n && {
146
+ let e = await S(t);
147
+ k((n) => n && {
148
148
  ...n,
149
149
  newPackageUrl: e.downloadUrl,
150
150
  newPackageSize: String(t.size)
151
151
  });
152
152
  } catch {}
153
153
  }
154
- }, [C]), ut = c((e) => {
154
+ }, [S]), dt = o((e) => {
155
155
  let t = e.target.files?.[0];
156
156
  if (!t) return;
157
157
  let n = new FileReader();
158
158
  n.onload = (e) => {
159
159
  let n = e.target?.result;
160
- typeof n == "string" && (A((e) => e && {
160
+ typeof n == "string" && (k((e) => e && {
161
161
  ...e,
162
162
  manifestJson: n
163
- }), D(t.name));
163
+ }), E(t.name));
164
164
  }, n.readAsText(t), e.target.value = "";
165
- }, []), dt = async () => {
166
- if (!k) return;
167
- I(null);
168
- let e = k.manifestJson.trim() !== k.originalManifestJson.trim(), t;
169
- if (e && k.manifestJson.trim()) try {
170
- t = JSON.parse(k.manifestJson);
165
+ }, []), ft = async () => {
166
+ if (!O) return;
167
+ F(null);
168
+ let e = O.manifestJson.trim() !== O.originalManifestJson.trim(), t;
169
+ if (e && O.manifestJson.trim()) try {
170
+ t = JSON.parse(O.manifestJson);
171
171
  } catch {
172
- I("Invalid JSON in manifest — please check your input.");
172
+ F("Invalid JSON in manifest — please check your input.");
173
173
  return;
174
174
  }
175
175
  let n = {};
176
- k.releaseNotes.trim() && (n.releaseNotes = k.releaseNotes), k.changelog.trim() && (n.changelog = k.changelog), k.newPackageUrl && (n.packageUrl = k.newPackageUrl, n.packageSize = k.newPackageSize), t && (n.manifest = t);
176
+ O.releaseNotes.trim() && (n.releaseNotes = O.releaseNotes), O.changelog.trim() && (n.changelog = O.changelog), O.newPackageUrl && (n.packageUrl = O.newPackageUrl, n.packageSize = O.newPackageSize), t && (n.manifest = t);
177
177
  try {
178
- await $e({ variables: {
179
- id: k.versionId,
178
+ await et({ variables: {
179
+ id: O.versionId,
180
180
  input: n
181
- } }), A(null), D(null), P(y("devportal.versionUpdatedSuccess", "Version updated successfully"));
181
+ } }), k(null), E(null), N(_("devportal.versionUpdatedSuccess", "Version updated successfully"));
182
182
  } catch (e) {
183
- N(e instanceof Error ? e.message : y("devportal.versionUpdateFailed", "Failed to update version"));
183
+ M(e instanceof Error ? e.message : _("devportal.versionUpdateFailed", "Failed to update version"));
184
184
  }
185
- }, ft = async (e) => {
186
- N(null), P(null);
185
+ }, pt = async (e) => {
186
+ M(null), N(null);
187
187
  try {
188
- await tt({ variables: { id: e } }), P(y("devportal.versionSubmittedSuccess", "Version submitted for review — you'll be notified when approved"));
188
+ await nt({ variables: { id: e } }), N(_("devportal.versionSubmittedSuccess", "Version submitted for review — you'll be notified when approved"));
189
189
  } catch (e) {
190
- N(e instanceof Error ? e.message : y("devportal.versionPublishFailed", "Failed to submit version for review"));
190
+ M(e instanceof Error ? e.message : _("devportal.versionPublishFailed", "Failed to submit version for review"));
191
191
  }
192
- }, pt = async (e) => {
193
- N(null), P(null);
192
+ }, mt = async (e) => {
193
+ M(null), N(null);
194
194
  try {
195
- await nt({ variables: { id: e } }), P(y("devportal.versionDeprecatedSuccess", "Version deprecated successfully"));
195
+ await rt({ variables: { id: e } }), N(_("devportal.versionDeprecatedSuccess", "Version deprecated successfully"));
196
196
  } catch (e) {
197
- N(e instanceof Error ? e.message : y("devportal.versionDeprecateFailed", "Failed to deprecate version"));
197
+ M(e instanceof Error ? e.message : _("devportal.versionDeprecateFailed", "Failed to deprecate version"));
198
198
  }
199
- }, mt = async () => {
200
- if (!(!z || !B.trim())) {
201
- N(null), P(null);
199
+ }, ht = async () => {
200
+ if (!(!L || !R.trim())) {
201
+ M(null), N(null);
202
202
  try {
203
- await it({ variables: {
204
- id: z.versionId,
205
- reason: B
206
- } }), P(y("devportal.versionRejectedSuccess", "Version rejected — developer has been notified")), Ve(null), V("");
203
+ await at({ variables: {
204
+ id: L.versionId,
205
+ reason: R
206
+ } }), N(_("devportal.versionRejectedSuccess", "Version rejected — developer has been notified")), Ue(null), z("");
207
207
  } catch (e) {
208
- N(e instanceof Error ? e.message : y("devportal.versionRejectFailed", "Failed to reject version"));
208
+ M(e instanceof Error ? e.message : _("devportal.versionRejectFailed", "Failed to reject version"));
209
209
  }
210
210
  }
211
- }, ht = (e) => e.status === "published" && e.isLatest ? /* @__PURE__ */ _(_e, {
211
+ }, gt = (e) => e.status === "published" && e.isLatest ? /* @__PURE__ */ h(ye, {
212
212
  size: 16,
213
213
  className: "text-status-success-text"
214
- }) : e.status === "pending_review" ? /* @__PURE__ */ _(m, {
214
+ }) : e.status === "pending_review" ? /* @__PURE__ */ h(f, {
215
215
  size: 16,
216
216
  className: "text-status-info-text"
217
- }) : e.status === "rejected" ? /* @__PURE__ */ _(xe, {
217
+ }) : e.status === "rejected" ? /* @__PURE__ */ h(Ce, {
218
218
  size: 16,
219
219
  className: "text-status-error-text"
220
- }) : e.status === "draft" ? /* @__PURE__ */ _(ve, {
220
+ }) : e.status === "draft" ? /* @__PURE__ */ h(be, {
221
221
  size: 16,
222
222
  className: "text-status-warning-text"
223
- }) : e.status === "deprecated" ? /* @__PURE__ */ _(ge, {
223
+ }) : e.status === "deprecated" ? /* @__PURE__ */ h(ve, {
224
224
  size: 16,
225
225
  className: "text-text-secondary"
226
- }) : /* @__PURE__ */ _(ye, {
226
+ }) : /* @__PURE__ */ h(xe, {
227
227
  size: 16,
228
228
  className: "text-accent-blue"
229
- }), gt = (e, t) => {
230
- R((n) => {
229
+ }), _t = (e, t) => {
230
+ He((n) => {
231
231
  let r = new Set(n);
232
232
  return t ? r.add(e) : r.delete(e), r;
233
233
  });
234
- }, _t = (e) => {
235
- R((t) => {
234
+ }, vt = (e) => {
235
+ He((t) => {
236
236
  let n = new Set(t);
237
- return X.forEach((t) => {
237
+ return Y.forEach((t) => {
238
238
  e ? n.add(t.id) : n.delete(t.id);
239
239
  }), n;
240
240
  });
241
- }, vt = () => R(/* @__PURE__ */ new Set());
242
- return Ye && !Y ? /* @__PURE__ */ _(i, {
243
- title: y("devportal.versionManagement", "Version Management"),
244
- description: y("devportal.versionManagementDescription", "Manage your application versions"),
245
- backLink: `/apps/${S}`,
246
- backLabel: y("devportal.backToApplication", "Back to Application"),
247
- children: /* @__PURE__ */ _("div", {
241
+ }, yt = () => He(/* @__PURE__ */ new Set());
242
+ return Xe && !J ? /* @__PURE__ */ h(oe, {
243
+ title: _("devportal.versionManagement", "Version Management"),
244
+ description: _("devportal.versionManagementDescription", "Manage your application versions"),
245
+ backLink: `/apps/${x}`,
246
+ backLabel: _("devportal.backToApplication", "Back to Application"),
247
+ children: /* @__PURE__ */ h("div", {
248
248
  className: "flex items-center justify-center py-16",
249
- children: /* @__PURE__ */ _(p, { className: "h-8 w-8 animate-spin text-text-secondary" })
249
+ children: /* @__PURE__ */ h(d, { className: "h-8 w-8 animate-spin text-text-secondary" })
250
250
  })
251
- }) : Xe && !Y ? /* @__PURE__ */ _(i, {
252
- title: y("devportal.versionManagement", "Version Management"),
253
- description: y("devportal.versionManagementDescription", "Manage your application versions"),
254
- backLink: `/apps/${S}`,
255
- backLabel: y("devportal.backToApplication", "Back to Application"),
256
- children: /* @__PURE__ */ _(t, {
257
- icon: /* @__PURE__ */ _(f, {
251
+ }) : Ze && !J ? /* @__PURE__ */ h(oe, {
252
+ title: _("devportal.versionManagement", "Version Management"),
253
+ description: _("devportal.versionManagementDescription", "Manage your application versions"),
254
+ backLink: `/apps/${x}`,
255
+ backLabel: _("devportal.backToApplication", "Back to Application"),
256
+ children: /* @__PURE__ */ h(t, {
257
+ icon: /* @__PURE__ */ h(u, {
258
258
  size: 32,
259
259
  className: "text-status-error-text"
260
260
  }),
261
- title: y("devportal.failedToLoadVersions", "Failed to load versions"),
262
- description: Xe.message || y("devportal.versionsLoadError", "An error occurred while loading versions")
261
+ title: _("devportal.failedToLoadVersions", "Failed to load versions"),
262
+ description: Ze.message || _("devportal.versionsLoadError", "An error occurred while loading versions")
263
263
  })
264
- }) : /* @__PURE__ */ _(ue, {
264
+ }) : /* @__PURE__ */ h(de, {
265
265
  authOnly: !0,
266
- children: /* @__PURE__ */ v(i, {
267
- title: y("devportal.versionManagement", "Version Management"),
268
- description: y("devportal.versionManagementDescription", "Manage your application versions"),
269
- purpose: W ? y("devportal.versionManagementPurposeWorkflow", "Versions track releases of your workflow. Create a version for each significant change and paste the workflow definition JSON. No zip is needed — the manifest is the workflow.") : G ? y("devportal.versionManagementPurposeNode", "Versions are the releases of your node that users install. Upload a new zip whenever the node implementation changes, and update the manifest if the node's inputs, outputs, or operations change. Bump the version for any change users will see.") : K ? y("devportal.versionManagementPurposeManifestOnly", "Versions track releases of this item. Create a version for each significant change and paste the manifest JSON. No zip is needed.") : y("devportal.versionManagementPurposeIntegration", "Versions track permission and webhook changes for your integration. No zip or manifest is needed — create a new version whenever you add or change required scopes so users can review and accept the updated permissions."),
270
- backLink: `/apps/${S}`,
271
- backLabel: y("devportal.backToApplication", "Back to Application"),
272
- actions: /* @__PURE__ */ v("button", {
266
+ children: /* @__PURE__ */ g(oe, {
267
+ title: _("devportal.versionManagement", "Version Management"),
268
+ description: _("devportal.versionManagementDescription", "Manage your application versions"),
269
+ purpose: H ? _("devportal.versionManagementPurposeWorkflow", "Versions track releases of your workflow. Create a version for each significant change and paste the workflow definition JSON. No zip is needed — the manifest is the workflow.") : U ? _("devportal.versionManagementPurposeNode", "Versions are the releases of your node that users install. Upload a new zip whenever the node implementation changes, and update the manifest if the node's inputs, outputs, or operations change. Bump the version for any change users will see.") : W ? _("devportal.versionManagementPurposeManifestOnly", "Versions track releases of this item. Create a version for each significant change and paste the manifest JSON. No zip is needed.") : _("devportal.versionManagementPurposeIntegration", "Versions track permission and webhook changes for your integration. No zip or manifest is needed — create a new version whenever you add or change required scopes so users can review and accept the updated permissions."),
270
+ backLink: `/apps/${x}`,
271
+ backLabel: _("devportal.backToApplication", "Back to Application"),
272
+ actions: /* @__PURE__ */ g("button", {
273
273
  onClick: () => {
274
- F(null), O(!0);
274
+ P(null), D(!0);
275
275
  },
276
- disabled: !we,
277
- "aria-disabled": !we,
276
+ disabled: !v,
277
+ "aria-disabled": !v,
278
278
  className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 disabled:opacity-50",
279
- children: [/* @__PURE__ */ _(be, { size: 16 }), y("devportal.newVersion", "New Version")]
279
+ children: [/* @__PURE__ */ h(Se, { size: 16 }), _("devportal.newVersion", "New Version")]
280
280
  }),
281
281
  children: [
282
- Le && /* @__PURE__ */ v("div", {
282
+ Re && /* @__PURE__ */ g("div", {
283
283
  className: "rounded-lg border border-border-subtle bg-status-error-bg-subtle p-3 flex items-center gap-2 text-sm text-status-error-text",
284
284
  children: [
285
- /* @__PURE__ */ _(f, {
285
+ /* @__PURE__ */ h(u, {
286
286
  size: 16,
287
287
  className: "flex-shrink-0"
288
288
  }),
289
- Le,
290
- /* @__PURE__ */ _("button", {
291
- onClick: () => N(null),
289
+ Re,
290
+ /* @__PURE__ */ h("button", {
291
+ onClick: () => M(null),
292
292
  className: "ml-auto text-status-error-text hover:text-status-error-text",
293
- children: y("devportal.dismiss", "Dismiss")
293
+ children: _("devportal.dismiss", "Dismiss")
294
294
  })
295
295
  ]
296
296
  }),
297
- Re && /* @__PURE__ */ v("div", {
297
+ ze && /* @__PURE__ */ g("div", {
298
298
  className: "rounded-lg border border-border-subtle bg-status-success-bg-subtle p-3 flex items-center gap-2 text-sm text-status-success-text",
299
299
  children: [
300
- /* @__PURE__ */ _(_e, {
300
+ /* @__PURE__ */ h(ye, {
301
301
  size: 16,
302
302
  className: "flex-shrink-0"
303
303
  }),
304
- Re,
305
- /* @__PURE__ */ _("button", {
306
- onClick: () => P(null),
304
+ ze,
305
+ /* @__PURE__ */ h("button", {
306
+ onClick: () => N(null),
307
307
  className: "ml-auto text-status-success-text hover:text-status-success-text",
308
- children: y("devportal.dismiss", "Dismiss")
308
+ children: _("devportal.dismiss", "Dismiss")
309
309
  })
310
310
  ]
311
311
  }),
312
- q && !J && /* @__PURE__ */ v("div", {
312
+ G && !K && /* @__PURE__ */ g("div", {
313
313
  className: "flex items-start gap-3 rounded-lg border border-status-warning-bg bg-status-warning-bg-subtle px-4 py-3 text-sm text-status-warning-text",
314
- children: [/* @__PURE__ */ _(f, {
314
+ children: [/* @__PURE__ */ h(u, {
315
315
  size: 16,
316
316
  className: "mt-0.5 shrink-0"
317
- }), /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
317
+ }), /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("p", {
318
318
  className: "font-medium",
319
319
  children: "Complete your app setup before submitting for review"
320
- }), /* @__PURE__ */ _("ul", {
320
+ }), /* @__PURE__ */ h("ul", {
321
321
  className: "mt-1 list-disc pl-4 text-xs opacity-80",
322
- children: Je.map((e) => /* @__PURE__ */ _("li", { children: e }, e))
322
+ children: q.map((e) => /* @__PURE__ */ h("li", { children: e }, e))
323
323
  })] })]
324
324
  }),
325
- q && q.status !== "PUBLISHED" && X.some((e) => e.status === "draft") && /* @__PURE__ */ v("div", {
325
+ G && G.status !== "PUBLISHED" && Y.some((e) => e.status === "draft") && /* @__PURE__ */ g("div", {
326
326
  className: "flex items-start gap-3 rounded-lg border border-status-info-bg bg-status-info-bg-subtle px-4 py-3 text-sm text-status-info-text",
327
- children: [/* @__PURE__ */ _(m, {
327
+ children: [/* @__PURE__ */ h(f, {
328
328
  size: 16,
329
329
  className: "mt-0.5 shrink-0"
330
- }), /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
330
+ }), /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("p", {
331
331
  className: "font-medium",
332
332
  children: "Ready to submit? Go to the Submit tab"
333
- }), /* @__PURE__ */ v("p", {
333
+ }), /* @__PURE__ */ g("p", {
334
334
  className: "mt-1 text-xs opacity-80",
335
335
  children: [
336
336
  "For your first submission the app and its version are reviewed together. Head to the ",
337
- /* @__PURE__ */ _("strong", { children: "Submit" }),
337
+ /* @__PURE__ */ h("strong", { children: "Submit" }),
338
338
  " tab — your draft version will be included automatically. The per-version \"Submit for Review\" button is only for new versions after the app is already live in the marketplace."
339
339
  ]
340
340
  })] })]
341
341
  }),
342
- X.length > 0 && /* @__PURE__ */ _("div", {
342
+ G && Q && /* @__PURE__ */ g("div", {
343
+ className: "flex items-start gap-3 rounded-lg border border-status-warning-bg bg-status-warning-bg-subtle px-4 py-3 text-sm text-status-warning-text",
344
+ children: [/* @__PURE__ */ h(f, {
345
+ size: 16,
346
+ className: "mt-0.5 shrink-0"
347
+ }), /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("p", {
348
+ className: "font-medium",
349
+ children: _("devportal.versionAlreadyPending", "A version is already pending review")
350
+ }), /* @__PURE__ */ h("p", {
351
+ className: "mt-1 text-xs opacity-80",
352
+ children: _("devportal.versionAlreadyPendingDetail", "Submitting another version is disabled until it's approved or rejected.")
353
+ })] })]
354
+ }),
355
+ Y.length > 0 && /* @__PURE__ */ h("div", {
343
356
  className: "rounded-card border border-border-seam bg-bg-surface p-4",
344
- children: /* @__PURE__ */ v("div", {
357
+ children: /* @__PURE__ */ g("div", {
345
358
  className: "flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between",
346
- children: [/* @__PURE__ */ v("div", {
359
+ children: [/* @__PURE__ */ g("div", {
347
360
  className: "flex flex-wrap items-center gap-3",
348
- children: [/* @__PURE__ */ v("div", {
361
+ children: [/* @__PURE__ */ g("div", {
349
362
  className: "flex items-center gap-2",
350
- children: [/* @__PURE__ */ _(se, {
351
- checked: at,
352
- indeterminate: ot,
353
- onChange: _t,
363
+ children: [/* @__PURE__ */ h(ce, {
364
+ checked: ot,
365
+ indeterminate: st,
366
+ onChange: vt,
354
367
  ariaLabel: "Select all visible versions"
355
- }), /* @__PURE__ */ _("span", {
368
+ }), /* @__PURE__ */ h("span", {
356
369
  className: "text-sm font-medium",
357
- children: y("devportal.selectAllVisible", "Select all visible")
370
+ children: _("devportal.selectAllVisible", "Select all visible")
358
371
  })]
359
- }), L.size > 0 && /* @__PURE__ */ _("button", {
360
- onClick: vt,
372
+ }), I.size > 0 && /* @__PURE__ */ h("button", {
373
+ onClick: yt,
361
374
  className: "text-sm text-text-secondary hover:text-text-primary",
362
- children: y("devportal.clearSelection", "Clear selection")
375
+ children: _("devportal.clearSelection", "Clear selection")
363
376
  })]
364
- }), /* @__PURE__ */ v("div", {
377
+ }), /* @__PURE__ */ g("div", {
365
378
  className: "flex flex-wrap items-center gap-2",
366
379
  children: [
367
- /* @__PURE__ */ v("span", {
380
+ /* @__PURE__ */ g("span", {
368
381
  className: "rounded-full bg-bg-sunken px-3 py-1 text-sm font-medium text-text-secondary",
369
- children: [L.size, " selected"]
382
+ children: [I.size, " selected"]
370
383
  }),
371
- /* @__PURE__ */ v("button", {
372
- onClick: () => H("publish"),
373
- disabled: Q.length === 0 || !b || !J,
374
- "aria-disabled": !b || !J,
375
- title: J ? void 0 : Je.join(" · "),
384
+ /* @__PURE__ */ g("button", {
385
+ onClick: () => B("publish"),
386
+ disabled: Z.length === 0 || !y || !K || Q,
387
+ "aria-disabled": !y || !K || Q,
388
+ title: Q ? _("devportal.versionAlreadyPending", "A version is already pending review") : K ? void 0 : q.join(" · "),
376
389
  className: "rounded-md border border-status-success-bg px-3 py-2 text-sm font-medium text-status-success-text hover:bg-status-success-bg-subtle disabled:cursor-not-allowed disabled:opacity-50",
377
- children: [y("devportal.submitForReview", "Submit for Review"), Q.length > 0 ? ` (${Q.length})` : ""]
390
+ children: [_("devportal.submitForReview", "Submit for Review"), Z.length > 0 ? ` (${Z.length})` : ""]
378
391
  }),
379
- /* @__PURE__ */ v("button", {
380
- onClick: () => H("deprecate"),
381
- disabled: $.length === 0 || !x,
382
- "aria-disabled": !x,
392
+ /* @__PURE__ */ g("button", {
393
+ onClick: () => B("deprecate"),
394
+ disabled: $.length === 0 || !b,
395
+ "aria-disabled": !b,
383
396
  className: "rounded-md border border-status-warning-bg px-3 py-2 text-sm font-medium text-status-warning-text hover:bg-status-warning-bg-subtle disabled:cursor-not-allowed disabled:opacity-50",
384
- children: [y("devportal.deprecateSelected", "Deprecate Selected"), $.length > 0 ? ` (${$.length})` : ""]
397
+ children: [_("devportal.deprecateSelected", "Deprecate Selected"), $.length > 0 ? ` (${$.length})` : ""]
385
398
  })
386
399
  ]
387
400
  })]
388
401
  })
389
402
  }),
390
- X.length > 0 ? /* @__PURE__ */ _(ce, {
391
- data: X,
403
+ Y.length > 0 ? /* @__PURE__ */ h(le, {
404
+ data: Y,
392
405
  keyField: "id",
393
406
  columns: [
394
407
  {
395
408
  key: "select",
396
- header: /* @__PURE__ */ _(se, {
397
- checked: at,
398
- indeterminate: ot,
399
- onChange: _t,
409
+ header: /* @__PURE__ */ h(ce, {
410
+ checked: ot,
411
+ indeterminate: st,
412
+ onChange: vt,
400
413
  ariaLabel: "Select all visible versions"
401
414
  }),
402
415
  className: "w-12",
403
- render: (e) => /* @__PURE__ */ _("div", {
416
+ render: (e) => /* @__PURE__ */ h("div", {
404
417
  onClick: (e) => e.stopPropagation(),
405
- children: /* @__PURE__ */ _(se, {
406
- checked: L.has(e.id),
407
- onChange: (t) => gt(e.id, t),
418
+ children: /* @__PURE__ */ h(ce, {
419
+ checked: I.has(e.id),
420
+ onChange: (t) => _t(e.id, t),
408
421
  ariaLabel: `Select version ${e.version}`
409
422
  })
410
423
  })
411
424
  },
412
425
  {
413
426
  key: "version",
414
- header: y("devportal.version", "Version"),
415
- render: (e) => /* @__PURE__ */ v("div", {
427
+ header: _("devportal.version", "Version"),
428
+ render: (e) => /* @__PURE__ */ g("div", {
416
429
  className: "flex items-center gap-2",
417
430
  children: [
418
- ht(e),
419
- /* @__PURE__ */ _("span", {
431
+ gt(e),
432
+ /* @__PURE__ */ h("span", {
420
433
  className: "font-mono font-medium",
421
434
  children: e.version
422
435
  }),
423
- e.isLatest && /* @__PURE__ */ _("span", {
436
+ e.isLatest && /* @__PURE__ */ h("span", {
424
437
  className: "rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-xs text-status-success-text",
425
- children: y("devportal.latest", "Latest")
438
+ children: _("devportal.latest", "Latest")
426
439
  }),
427
- !e.isStable && /* @__PURE__ */ _("span", {
440
+ !e.isStable && /* @__PURE__ */ h("span", {
428
441
  className: "rounded-full bg-status-warning-bg-subtle px-2 py-0.5 text-xs text-status-warning-text",
429
- children: y("devportal.beta", "Beta")
442
+ children: _("devportal.beta", "Beta")
430
443
  })
431
444
  ]
432
445
  })
433
446
  },
434
447
  {
435
448
  key: "releaseNotes",
436
- header: y("devportal.releaseNotes", "Release Notes"),
437
- render: (e) => /* @__PURE__ */ _("p", {
449
+ header: _("devportal.releaseNotes", "Release Notes"),
450
+ render: (e) => /* @__PURE__ */ h("p", {
438
451
  className: "max-w-md truncate text-sm text-text-secondary",
439
- children: e.releaseNotes || y("devportal.noReleaseNotes", "No release notes")
452
+ children: e.releaseNotes || _("devportal.noReleaseNotes", "No release notes")
440
453
  })
441
454
  },
442
455
  {
443
456
  key: "status",
444
- header: y("devportal.status", "Status"),
445
- render: (e) => /* @__PURE__ */ v("div", {
457
+ header: _("devportal.status", "Status"),
458
+ render: (e) => /* @__PURE__ */ g("div", {
446
459
  className: "space-y-1",
447
460
  children: [
448
- /* @__PURE__ */ _(oe, { status: e.status === "pending_review" ? "In Review" : e.status }),
449
- e.status === "pending_review" && /* @__PURE__ */ _("p", {
461
+ /* @__PURE__ */ h(se, { status: e.status === "pending_review" ? "In Review" : e.status }),
462
+ e.status === "pending_review" && /* @__PURE__ */ h("p", {
450
463
  className: "text-xs text-status-info-text",
451
464
  children: "Awaiting platform review"
452
465
  }),
453
- e.status === "rejected" && e.reviewNotes && /* @__PURE__ */ _("p", {
466
+ e.status === "rejected" && e.reviewNotes && /* @__PURE__ */ h("p", {
454
467
  className: "text-xs text-status-error-text max-w-xs",
455
468
  children: e.reviewNotes
456
469
  })
@@ -459,21 +472,21 @@ var Ce = () => {
459
472
  },
460
473
  {
461
474
  key: "publishedAt",
462
- header: y("devportal.published", "Published"),
463
- render: (e) => e.publishedAt ? fe(new Date(e.publishedAt), "MMM d, yyyy") : "-"
475
+ header: _("devportal.published", "Published"),
476
+ render: (e) => e.publishedAt ? me(new Date(e.publishedAt), "MMM d, yyyy") : "-"
464
477
  },
465
478
  {
466
479
  key: "actions",
467
480
  header: "",
468
481
  className: "w-48",
469
- render: (e) => /* @__PURE__ */ v("div", {
482
+ render: (e) => /* @__PURE__ */ g("div", {
470
483
  className: "flex flex-wrap gap-2",
471
484
  children: [
472
- (e.status === "draft" || e.status === "rejected") && we && /* @__PURE__ */ _("button", {
485
+ (e.status === "draft" || e.status === "rejected") && v && /* @__PURE__ */ h("button", {
473
486
  className: "inline-flex items-center gap-1 text-xs text-text-secondary hover:text-text-primary hover:underline",
474
487
  onClick: () => {
475
488
  let t = e.manifest ? JSON.stringify(e.manifest, null, 2) : "";
476
- A({
489
+ k({
477
490
  versionId: e.id,
478
491
  version: e.version,
479
492
  hasExistingZip: !!e.packageUrl,
@@ -483,428 +496,428 @@ var Ce = () => {
483
496
  originalManifestJson: t,
484
497
  releaseNotes: e.releaseNotes ?? "",
485
498
  changelog: e.changelog ?? ""
486
- }), D(null), I(null);
499
+ }), E(null), F(null);
487
500
  },
488
501
  children: "Edit"
489
502
  }),
490
- (e.status === "draft" || e.status === "rejected") && q?.status === "PUBLISHED" && /* @__PURE__ */ v("button", {
503
+ (e.status === "draft" || e.status === "rejected") && G?.status === "PUBLISHED" && /* @__PURE__ */ g("button", {
491
504
  className: "inline-flex items-center gap-1 text-xs text-primary hover:underline disabled:opacity-50 disabled:cursor-not-allowed",
492
- disabled: !b || !J,
493
- "aria-disabled": !b || !J,
494
- title: J ? void 0 : Je.join(" · "),
495
- onClick: () => ft(e.id),
496
- children: [/* @__PURE__ */ _(m, { size: 11 }), y("devportal.submitForReview", "Submit for Review")]
505
+ disabled: !y || !K || Q,
506
+ "aria-disabled": !y || !K || Q,
507
+ title: Q ? _("devportal.versionAlreadyPending", "A version is already pending review") : K ? void 0 : q.join(" · "),
508
+ onClick: () => pt(e.id),
509
+ children: [/* @__PURE__ */ h(f, { size: 11 }), _("devportal.submitForReview", "Submit for Review")]
497
510
  }),
498
- e.status === "published" && !e.isLatest && /* @__PURE__ */ _("button", {
511
+ e.status === "published" && !e.isLatest && /* @__PURE__ */ h("button", {
499
512
  className: "text-xs text-status-warning-text hover:underline disabled:opacity-50",
500
- disabled: !x,
501
- "aria-disabled": !x,
502
- onClick: () => pt(e.id),
503
- children: y("devportal.deprecate", "Deprecate")
513
+ disabled: !b,
514
+ "aria-disabled": !b,
515
+ onClick: () => mt(e.id),
516
+ children: _("devportal.deprecate", "Deprecate")
504
517
  })
505
518
  ]
506
519
  })
507
520
  }
508
521
  ]
509
- }) : /* @__PURE__ */ _(t, {
522
+ }) : /* @__PURE__ */ h(t, {
510
523
  illustration: "empty-data",
511
- title: y("devportal.noVersionsYet", "No versions yet"),
512
- description: y("devportal.noVersionsYetDescription", "Create your first version to start distributing your app"),
513
- action: /* @__PURE__ */ v("button", {
524
+ title: _("devportal.noVersionsYet", "No versions yet"),
525
+ description: _("devportal.noVersionsYetDescription", "Create your first version to start distributing your app"),
526
+ action: /* @__PURE__ */ g("button", {
514
527
  onClick: () => {
515
- F(null), O(!0);
528
+ P(null), D(!0);
516
529
  },
517
530
  className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90",
518
- children: [/* @__PURE__ */ _(be, { size: 16 }), y("devportal.createVersion", "Create Version")]
531
+ children: [/* @__PURE__ */ h(Se, { size: 16 }), _("devportal.createVersion", "Create Version")]
519
532
  })
520
533
  }),
521
- Ie && /* @__PURE__ */ _(a, {
522
- open: Ie,
534
+ Le && /* @__PURE__ */ h(i, {
535
+ open: Le,
523
536
  onOpenChange: (e) => {
524
- O(e), e || F(null);
537
+ D(e), e || P(null);
525
538
  },
526
- onConfirm: st,
527
- title: y("devportal.createNewVersion", "Create New Version"),
528
- confirmLabel: Qe ? y("devportal.creating", "Creating...") : y("devportal.createVersion", "Create Version"),
529
- children: /* @__PURE__ */ v("div", {
539
+ onConfirm: ct,
540
+ title: _("devportal.createNewVersion", "Create New Version"),
541
+ confirmLabel: $e ? _("devportal.creating", "Creating...") : _("devportal.createVersion", "Create Version"),
542
+ children: /* @__PURE__ */ g("div", {
530
543
  className: "space-y-4",
531
544
  children: [
532
- ze && /* @__PURE__ */ v("div", {
545
+ Be && /* @__PURE__ */ g("div", {
533
546
  className: "rounded-lg border border-status-error-bg bg-status-error-bg-subtle p-3 flex items-center gap-2 text-sm text-status-error-text",
534
- children: [/* @__PURE__ */ _(f, {
547
+ children: [/* @__PURE__ */ h(u, {
535
548
  size: 14,
536
549
  className: "flex-shrink-0"
537
- }), ze]
550
+ }), Be]
538
551
  }),
539
- /* @__PURE__ */ _(le, {
540
- label: y("devportal.versionNumber", "Version Number"),
541
- value: j.version,
542
- onChange: (e) => M({
543
- ...j,
552
+ /* @__PURE__ */ h(ue, {
553
+ label: _("devportal.versionNumber", "Version Number"),
554
+ value: A.version,
555
+ onChange: (e) => j({
556
+ ...A,
544
557
  version: e.target.value
545
558
  }),
546
559
  placeholder: "e.g., 2.2.0",
547
- hint: y("devportal.versionHint", "Use semantic versioning (major.minor.patch)"),
560
+ hint: _("devportal.versionHint", "Use semantic versioning (major.minor.patch)"),
548
561
  required: !0
549
562
  }),
550
- K && /* @__PURE__ */ v("div", {
563
+ W && /* @__PURE__ */ g("div", {
551
564
  className: "space-y-1",
552
565
  children: [
553
- /* @__PURE__ */ v("label", {
566
+ /* @__PURE__ */ g("label", {
554
567
  className: "text-sm font-medium",
555
568
  children: [
556
- W ? "Workflow Definition (JSON)" : "Manifest (JSON)",
569
+ H ? "Workflow Definition (JSON)" : "Manifest (JSON)",
557
570
  " ",
558
- /* @__PURE__ */ _("span", {
571
+ /* @__PURE__ */ h("span", {
559
572
  className: "text-status-error-text",
560
573
  children: "*"
561
574
  })
562
575
  ]
563
576
  }),
564
- /* @__PURE__ */ _("textarea", {
577
+ /* @__PURE__ */ h("textarea", {
565
578
  rows: 10,
566
579
  required: !0,
567
- placeholder: W ? "{\n \"nodes\": [],\n \"edges\": []\n}" : "{\n \"manifestVersion\": \"1.0\",\n \"identity\": { \"name\": \"My Item\", \"version\": \"1.0.0\" }\n}",
568
- value: j.manifestJson,
569
- onChange: (e) => M({
570
- ...j,
580
+ placeholder: H ? "{\n \"nodes\": [],\n \"edges\": []\n}" : "{\n \"manifestVersion\": \"1.0\",\n \"identity\": { \"name\": \"My Item\", \"version\": \"1.0.0\" }\n}",
581
+ value: A.manifestJson,
582
+ onChange: (e) => j({
583
+ ...A,
571
584
  manifestJson: e.target.value
572
585
  }),
573
586
  className: "w-full rounded-md border bg-transparent px-3 py-2 text-xs font-mono resize-y placeholder:text-text-secondary focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)]"
574
587
  }),
575
- /* @__PURE__ */ _("p", {
588
+ /* @__PURE__ */ h("p", {
576
589
  className: "text-xs text-text-secondary",
577
- children: W ? /* @__PURE__ */ v(g, { children: [
590
+ children: H ? /* @__PURE__ */ g(m, { children: [
578
591
  "Paste the full ",
579
- /* @__PURE__ */ _("code", { children: "{nodes, edges}" }),
592
+ /* @__PURE__ */ h("code", { children: "{nodes, edges}" }),
580
593
  " JSON. Saved as this version's manifest — no zip needed."
581
594
  ] }) : "Paste the manifest JSON for this version. No zip needed."
582
595
  })
583
596
  ]
584
597
  }),
585
- G && /* @__PURE__ */ v("div", {
598
+ U && /* @__PURE__ */ g("div", {
586
599
  className: "space-y-1",
587
600
  children: [
588
- /* @__PURE__ */ v("label", {
601
+ /* @__PURE__ */ g("label", {
589
602
  className: "text-sm font-medium",
590
603
  children: [
591
604
  "Package (.zip)",
592
605
  " ",
593
- /* @__PURE__ */ _("span", {
606
+ /* @__PURE__ */ h("span", {
594
607
  className: "text-status-error-text",
595
608
  children: "*"
596
609
  })
597
610
  ]
598
611
  }),
599
- /* @__PURE__ */ v("div", {
612
+ /* @__PURE__ */ g("div", {
600
613
  className: "flex gap-2 items-center",
601
614
  children: [
602
- /* @__PURE__ */ _("input", {
603
- ref: Ae,
615
+ /* @__PURE__ */ h("input", {
616
+ ref: je,
604
617
  type: "file",
605
618
  accept: ".zip",
606
619
  className: "hidden",
607
- onChange: ct
620
+ onChange: lt
608
621
  }),
609
- /* @__PURE__ */ _("button", {
622
+ /* @__PURE__ */ h("button", {
610
623
  type: "button",
611
- disabled: w,
612
- onClick: () => Ae.current?.click(),
624
+ disabled: C,
625
+ onClick: () => je.current?.click(),
613
626
  className: "inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5 text-sm font-medium hover:bg-bg-sunken transition-colors disabled:opacity-50",
614
- children: w ? /* @__PURE__ */ v(g, { children: [
615
- /* @__PURE__ */ _(p, {
627
+ children: C ? /* @__PURE__ */ g(m, { children: [
628
+ /* @__PURE__ */ h(d, {
616
629
  size: 14,
617
630
  className: "animate-spin"
618
631
  }),
619
632
  " ",
620
633
  "Uploading… ",
621
- ke,
634
+ Ae,
622
635
  "%"
623
- ] }) : /* @__PURE__ */ v(g, { children: [
624
- /* @__PURE__ */ _(h, { size: 14 }),
636
+ ] }) : /* @__PURE__ */ g(m, { children: [
637
+ /* @__PURE__ */ h(p, { size: 14 }),
625
638
  " ",
626
- j.packageUrl ? "Replace zip" : "Upload zip"
639
+ A.packageUrl ? "Replace zip" : "Upload zip"
627
640
  ] })
628
641
  }),
629
- j.packageUrl && !w && /* @__PURE__ */ _("span", {
642
+ A.packageUrl && !C && /* @__PURE__ */ h("span", {
630
643
  className: "text-xs text-status-success-text",
631
644
  children: "✓ Uploaded"
632
645
  })
633
646
  ]
634
647
  }),
635
- T && /* @__PURE__ */ _("p", {
648
+ w && /* @__PURE__ */ h("p", {
636
649
  className: "text-xs text-status-error-text",
637
- children: T
650
+ children: w
638
651
  }),
639
- /* @__PURE__ */ _("p", {
652
+ /* @__PURE__ */ h("p", {
640
653
  className: "text-xs text-text-tertiary",
641
654
  children: "The zip is the node executable. Upload it before publishing — users install exactly this artifact."
642
655
  })
643
656
  ]
644
657
  }),
645
- G && /* @__PURE__ */ v("div", {
658
+ U && /* @__PURE__ */ g("div", {
646
659
  className: "space-y-2",
647
660
  children: [
648
- /* @__PURE__ */ v("div", {
661
+ /* @__PURE__ */ g("div", {
649
662
  className: "flex items-center justify-between gap-2 flex-wrap",
650
- children: [/* @__PURE__ */ v("label", {
663
+ children: [/* @__PURE__ */ g("label", {
651
664
  className: "text-sm font-medium",
652
665
  children: [
653
666
  "manifest.json",
654
667
  " ",
655
- /* @__PURE__ */ _("span", {
668
+ /* @__PURE__ */ h("span", {
656
669
  className: "text-status-error-text",
657
670
  children: "*"
658
671
  })
659
672
  ]
660
- }), /* @__PURE__ */ v("div", {
673
+ }), /* @__PURE__ */ g("div", {
661
674
  className: "flex items-center gap-2",
662
675
  children: [
663
- Pe && /* @__PURE__ */ v("span", {
676
+ Fe && /* @__PURE__ */ g("span", {
664
677
  className: "text-xs text-status-success-text",
665
- children: ["✓ ", Pe]
678
+ children: ["✓ ", Fe]
666
679
  }),
667
- /* @__PURE__ */ _("input", {
668
- ref: je,
680
+ /* @__PURE__ */ h("input", {
681
+ ref: Me,
669
682
  type: "file",
670
683
  accept: ".json,application/json",
671
684
  className: "hidden",
672
- onChange: He
685
+ onChange: We
673
686
  }),
674
- /* @__PURE__ */ v("button", {
687
+ /* @__PURE__ */ g("button", {
675
688
  type: "button",
676
- onClick: () => je.current?.click(),
689
+ onClick: () => Me.current?.click(),
677
690
  className: "inline-flex items-center gap-1.5 rounded-md border border-border-subtle px-2.5 py-1 text-xs font-medium hover:bg-bg-sunken transition-colors",
678
- children: [/* @__PURE__ */ _(h, { size: 12 }), "Upload manifest.json"]
691
+ children: [/* @__PURE__ */ h(p, { size: 12 }), "Upload manifest.json"]
679
692
  })
680
693
  ]
681
694
  })]
682
695
  }),
683
- /* @__PURE__ */ _("textarea", {
696
+ /* @__PURE__ */ h("textarea", {
684
697
  rows: 5,
685
698
  placeholder: "{\n \"manifestVersion\": \"1.0\",\n \"itemType\": \"node\",\n \"identity\": { \"version\": \"1.0.0\", \"displayName\": \"My Node\" }\n}",
686
- value: j.manifestJson,
699
+ value: A.manifestJson,
687
700
  onChange: (e) => {
688
- E(null), M({
689
- ...j,
701
+ T(null), j({
702
+ ...A,
690
703
  manifestJson: e.target.value
691
704
  });
692
705
  },
693
706
  className: "w-full rounded-md border bg-transparent px-3 py-2 text-xs font-mono resize-y placeholder:text-text-secondary focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)]"
694
707
  }),
695
- /* @__PURE__ */ v("p", {
708
+ /* @__PURE__ */ g("p", {
696
709
  className: "text-xs text-text-tertiary",
697
710
  children: [
698
711
  "Upload or paste your ",
699
- /* @__PURE__ */ _("code", { children: "manifest.json" }),
712
+ /* @__PURE__ */ h("code", { children: "manifest.json" }),
700
713
  " — required so the platform knows your node's inputs, outputs, and operations. Not extracted from the zip automatically."
701
714
  ]
702
715
  })
703
716
  ]
704
717
  }),
705
- We && /* @__PURE__ */ v("div", {
718
+ Ke && /* @__PURE__ */ g("div", {
706
719
  className: "space-y-1",
707
720
  children: [
708
- /* @__PURE__ */ v("label", {
721
+ /* @__PURE__ */ g("label", {
709
722
  className: "text-sm font-medium",
710
723
  children: [
711
724
  "Required scopes",
712
725
  " ",
713
- /* @__PURE__ */ _("span", {
726
+ /* @__PURE__ */ h("span", {
714
727
  className: "text-xs font-normal text-text-secondary",
715
728
  children: "(optional)"
716
729
  })
717
730
  ]
718
731
  }),
719
- /* @__PURE__ */ _("input", {
732
+ /* @__PURE__ */ h("input", {
720
733
  type: "text",
721
- value: j.requiredScopes,
722
- onChange: (e) => M({
723
- ...j,
734
+ value: A.requiredScopes,
735
+ onChange: (e) => j({
736
+ ...A,
724
737
  requiredScopes: e.target.value
725
738
  }),
726
739
  placeholder: "e.g. read:contacts, write:messages",
727
740
  className: "w-full rounded-md border bg-transparent px-3 py-2 text-sm placeholder:text-text-secondary focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)]"
728
741
  }),
729
- /* @__PURE__ */ _("p", {
742
+ /* @__PURE__ */ h("p", {
730
743
  className: "text-xs text-text-tertiary",
731
744
  children: "Comma-separated. List every permission this version needs — users will be prompted to accept any new or changed scopes on update."
732
745
  })
733
746
  ]
734
747
  }),
735
- /* @__PURE__ */ _(o, {
736
- label: y("devportal.releaseNotes", "Release Notes"),
737
- value: j.releaseNotes,
738
- onChange: (e) => M({
739
- ...j,
748
+ /* @__PURE__ */ h(a, {
749
+ label: _("devportal.releaseNotes", "Release Notes"),
750
+ value: A.releaseNotes,
751
+ onChange: (e) => j({
752
+ ...A,
740
753
  releaseNotes: e
741
754
  }),
742
- placeholder: y("devportal.releaseNotesPlaceholder", "What changed in this release?"),
755
+ placeholder: _("devportal.releaseNotesPlaceholder", "What changed in this release?"),
743
756
  rows: 3
744
757
  }),
745
- /* @__PURE__ */ _(o, {
746
- label: y("devportal.changelog", "Changelog"),
747
- value: j.changelog,
748
- onChange: (e) => M({
749
- ...j,
758
+ /* @__PURE__ */ h(a, {
759
+ label: _("devportal.changelog", "Changelog"),
760
+ value: A.changelog,
761
+ onChange: (e) => j({
762
+ ...A,
750
763
  changelog: e
751
764
  }),
752
- placeholder: y("devportal.changelogPlaceholder", "Detailed changelog for this version..."),
765
+ placeholder: _("devportal.changelogPlaceholder", "Detailed changelog for this version..."),
753
766
  rows: 3
754
767
  })
755
768
  ]
756
769
  })
757
770
  }),
758
- z && /* @__PURE__ */ _(a, {
759
- open: !!z,
771
+ L && /* @__PURE__ */ h(i, {
772
+ open: !!L,
760
773
  onOpenChange: (e) => {
761
- e || (Ve(null), V(""));
774
+ e || (Ue(null), z(""));
762
775
  },
763
- onConfirm: mt,
764
- title: `Reject version ${z.version}`,
776
+ onConfirm: ht,
777
+ title: `Reject version ${L.version}`,
765
778
  confirmLabel: "Reject Version",
766
- cancelLabel: y("devportal.cancel", "Cancel"),
779
+ cancelLabel: _("devportal.cancel", "Cancel"),
767
780
  variant: "danger",
768
- children: /* @__PURE__ */ v("div", {
781
+ children: /* @__PURE__ */ g("div", {
769
782
  className: "space-y-3",
770
- children: [/* @__PURE__ */ _("p", {
783
+ children: [/* @__PURE__ */ h("p", {
771
784
  className: "text-sm text-text-secondary",
772
785
  children: "The developer will be notified and can fix and resubmit. Please provide a clear reason."
773
- }), /* @__PURE__ */ v("div", {
786
+ }), /* @__PURE__ */ g("div", {
774
787
  className: "space-y-1",
775
- children: [/* @__PURE__ */ v("label", {
788
+ children: [/* @__PURE__ */ g("label", {
776
789
  className: "text-sm font-medium",
777
790
  children: [
778
791
  "Rejection reason",
779
792
  " ",
780
- /* @__PURE__ */ _("span", {
793
+ /* @__PURE__ */ h("span", {
781
794
  className: "text-status-error-text",
782
795
  children: "*"
783
796
  })
784
797
  ]
785
- }), /* @__PURE__ */ _("textarea", {
798
+ }), /* @__PURE__ */ h("textarea", {
786
799
  rows: 3,
787
- value: B,
788
- onChange: (e) => V(e.target.value),
800
+ value: R,
801
+ onChange: (e) => z(e.target.value),
789
802
  placeholder: "e.g. Manifest contains disallowed network calls to external domains...",
790
803
  className: "w-full rounded-md border bg-transparent px-3 py-2 text-sm placeholder:text-text-secondary focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)]"
791
804
  })]
792
805
  })]
793
806
  })
794
807
  }),
795
- k && /* @__PURE__ */ _(a, {
796
- open: !!k,
808
+ O && /* @__PURE__ */ h(i, {
809
+ open: !!O,
797
810
  onOpenChange: (e) => {
798
- e || (A(null), D(null), I(null));
811
+ e || (k(null), E(null), F(null));
799
812
  },
800
- onConfirm: dt,
801
- title: `Edit Version ${k.version}`,
802
- confirmLabel: et ? "Saving…" : "Save Changes",
803
- children: /* @__PURE__ */ v("div", {
813
+ onConfirm: ft,
814
+ title: `Edit Version ${O.version}`,
815
+ confirmLabel: tt ? "Saving…" : "Save Changes",
816
+ children: /* @__PURE__ */ g("div", {
804
817
  className: "space-y-4",
805
818
  children: [
806
- Be && /* @__PURE__ */ v("div", {
819
+ Ve && /* @__PURE__ */ g("div", {
807
820
  className: "rounded-lg border border-status-error-bg bg-status-error-bg-subtle p-3 flex items-center gap-2 text-sm text-status-error-text",
808
- children: [/* @__PURE__ */ _(f, {
821
+ children: [/* @__PURE__ */ h(u, {
809
822
  size: 14,
810
823
  className: "flex-shrink-0"
811
- }), Be]
824
+ }), Ve]
812
825
  }),
813
- /* @__PURE__ */ _("div", {
826
+ /* @__PURE__ */ h("div", {
814
827
  className: "rounded-lg border border-status-info-bg bg-status-info-bg-subtle px-3 py-2 text-xs text-status-info-text",
815
828
  children: "You can fix the zip, manifest, or release notes before submitting for review. Once submitted for review these fields are locked."
816
829
  }),
817
- G && /* @__PURE__ */ v("div", {
830
+ U && /* @__PURE__ */ g("div", {
818
831
  className: "space-y-1",
819
832
  children: [
820
- /* @__PURE__ */ _("label", {
833
+ /* @__PURE__ */ h("label", {
821
834
  className: "text-sm font-medium",
822
835
  children: "Package (.zip)"
823
836
  }),
824
- /* @__PURE__ */ v("div", {
837
+ /* @__PURE__ */ g("div", {
825
838
  className: "flex gap-2 items-center",
826
839
  children: [
827
- /* @__PURE__ */ _("input", {
828
- ref: Me,
840
+ /* @__PURE__ */ h("input", {
841
+ ref: Ne,
829
842
  type: "file",
830
843
  accept: ".zip",
831
844
  className: "hidden",
832
- onChange: lt
845
+ onChange: ut
833
846
  }),
834
- /* @__PURE__ */ _("button", {
847
+ /* @__PURE__ */ h("button", {
835
848
  type: "button",
836
- disabled: w,
837
- onClick: () => Me.current?.click(),
849
+ disabled: C,
850
+ onClick: () => Ne.current?.click(),
838
851
  className: "inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5 text-sm font-medium hover:bg-bg-sunken transition-colors disabled:opacity-50",
839
- children: w ? /* @__PURE__ */ v(g, { children: [
840
- /* @__PURE__ */ _(p, {
852
+ children: C ? /* @__PURE__ */ g(m, { children: [
853
+ /* @__PURE__ */ h(d, {
841
854
  size: 14,
842
855
  className: "animate-spin"
843
856
  }),
844
857
  " ",
845
858
  "Uploading… ",
846
- ke,
859
+ Ae,
847
860
  "%"
848
- ] }) : /* @__PURE__ */ v(g, { children: [/* @__PURE__ */ _(h, { size: 14 }), k.newPackageUrl ? "Replace zip again" : k.hasExistingZip ? "Replace zip" : "Upload zip"] })
861
+ ] }) : /* @__PURE__ */ g(m, { children: [/* @__PURE__ */ h(p, { size: 14 }), O.newPackageUrl ? "Replace zip again" : O.hasExistingZip ? "Replace zip" : "Upload zip"] })
849
862
  }),
850
- k.newPackageUrl && !w && /* @__PURE__ */ _("span", {
863
+ O.newPackageUrl && !C && /* @__PURE__ */ h("span", {
851
864
  className: "text-xs text-status-success-text",
852
865
  children: "✓ New zip ready"
853
866
  }),
854
- !k.newPackageUrl && k.hasExistingZip && /* @__PURE__ */ _("span", {
867
+ !O.newPackageUrl && O.hasExistingZip && /* @__PURE__ */ h("span", {
855
868
  className: "text-xs text-text-secondary",
856
869
  children: "Current zip kept"
857
870
  })
858
871
  ]
859
872
  }),
860
- T && /* @__PURE__ */ _("p", {
873
+ w && /* @__PURE__ */ h("p", {
861
874
  className: "text-xs text-status-error-text",
862
- children: T
875
+ children: w
863
876
  })
864
877
  ]
865
878
  }),
866
- G && /* @__PURE__ */ v("div", {
879
+ U && /* @__PURE__ */ g("div", {
867
880
  className: "space-y-2",
868
- children: [/* @__PURE__ */ v("div", {
881
+ children: [/* @__PURE__ */ g("div", {
869
882
  className: "flex items-center justify-between gap-2 flex-wrap",
870
- children: [/* @__PURE__ */ v("label", {
883
+ children: [/* @__PURE__ */ g("label", {
871
884
  className: "text-sm font-medium",
872
885
  children: [
873
886
  "manifest.json",
874
887
  " ",
875
- /* @__PURE__ */ _("span", {
888
+ /* @__PURE__ */ h("span", {
876
889
  className: "text-xs font-normal text-text-secondary",
877
890
  children: "(edit below or upload a new file)"
878
891
  })
879
892
  ]
880
- }), /* @__PURE__ */ v("div", {
893
+ }), /* @__PURE__ */ g("div", {
881
894
  className: "flex items-center gap-2",
882
895
  children: [
883
- Fe && /* @__PURE__ */ v("span", {
896
+ Ie && /* @__PURE__ */ g("span", {
884
897
  className: "text-xs text-status-success-text",
885
- children: ["✓ ", Fe]
898
+ children: ["✓ ", Ie]
886
899
  }),
887
- /* @__PURE__ */ _("input", {
888
- ref: Ne,
900
+ /* @__PURE__ */ h("input", {
901
+ ref: Pe,
889
902
  type: "file",
890
903
  accept: ".json,application/json",
891
904
  className: "hidden",
892
- onChange: ut
905
+ onChange: dt
893
906
  }),
894
- /* @__PURE__ */ v("button", {
907
+ /* @__PURE__ */ g("button", {
895
908
  type: "button",
896
- onClick: () => Ne.current?.click(),
909
+ onClick: () => Pe.current?.click(),
897
910
  className: "inline-flex items-center gap-1.5 rounded-md border border-border-subtle px-2.5 py-1 text-xs font-medium hover:bg-bg-sunken transition-colors",
898
- children: [/* @__PURE__ */ _(h, { size: 12 }), " Upload manifest.json"]
911
+ children: [/* @__PURE__ */ h(p, { size: 12 }), " Upload manifest.json"]
899
912
  })
900
913
  ]
901
914
  })]
902
- }), /* @__PURE__ */ _("textarea", {
915
+ }), /* @__PURE__ */ h("textarea", {
903
916
  rows: 5,
904
917
  placeholder: "{\n \"manifestVersion\": \"1.0\",\n \"itemType\": \"node\",\n \"identity\": { \"version\": \"1.0.0\", \"displayName\": \"My Node\" }\n}",
905
- value: k.manifestJson,
918
+ value: O.manifestJson,
906
919
  onChange: (e) => {
907
- D(null), A((t) => t && {
920
+ E(null), k((t) => t && {
908
921
  ...t,
909
922
  manifestJson: e.target.value
910
923
  });
@@ -912,84 +925,84 @@ var Ce = () => {
912
925
  className: "w-full rounded-md border bg-transparent px-3 py-2 text-xs font-mono resize-y placeholder:text-text-secondary focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)]"
913
926
  })]
914
927
  }),
915
- K && /* @__PURE__ */ v("div", {
928
+ W && /* @__PURE__ */ g("div", {
916
929
  className: "space-y-1",
917
- children: [/* @__PURE__ */ v("label", {
930
+ children: [/* @__PURE__ */ g("label", {
918
931
  className: "text-sm font-medium",
919
932
  children: [
920
- W ? "Workflow Definition (JSON)" : "Manifest (JSON)",
933
+ H ? "Workflow Definition (JSON)" : "Manifest (JSON)",
921
934
  " ",
922
- /* @__PURE__ */ _("span", {
935
+ /* @__PURE__ */ h("span", {
923
936
  className: "text-xs font-normal text-text-secondary",
924
937
  children: "(leave empty to keep existing)"
925
938
  })
926
939
  ]
927
- }), /* @__PURE__ */ _("textarea", {
940
+ }), /* @__PURE__ */ h("textarea", {
928
941
  rows: 10,
929
- placeholder: W ? "{\n \"nodes\": [],\n \"edges\": []\n}" : "{\n \"manifestVersion\": \"1.0\",\n \"identity\": { \"name\": \"My Item\", \"version\": \"1.0.0\" }\n}",
930
- value: k.manifestJson,
931
- onChange: (e) => A((t) => t && {
942
+ placeholder: H ? "{\n \"nodes\": [],\n \"edges\": []\n}" : "{\n \"manifestVersion\": \"1.0\",\n \"identity\": { \"name\": \"My Item\", \"version\": \"1.0.0\" }\n}",
943
+ value: O.manifestJson,
944
+ onChange: (e) => k((t) => t && {
932
945
  ...t,
933
946
  manifestJson: e.target.value
934
947
  }),
935
948
  className: "w-full rounded-md border bg-transparent px-3 py-2 text-xs font-mono resize-y placeholder:text-text-secondary focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)]"
936
949
  })]
937
950
  }),
938
- /* @__PURE__ */ _(o, {
939
- label: y("devportal.releaseNotes", "Release Notes"),
940
- value: k.releaseNotes,
941
- onChange: (e) => A((t) => t && {
951
+ /* @__PURE__ */ h(a, {
952
+ label: _("devportal.releaseNotes", "Release Notes"),
953
+ value: O.releaseNotes,
954
+ onChange: (e) => k((t) => t && {
942
955
  ...t,
943
956
  releaseNotes: e
944
957
  }),
945
- placeholder: y("devportal.releaseNotesPlaceholder", "What changed in this release?"),
958
+ placeholder: _("devportal.releaseNotesPlaceholder", "What changed in this release?"),
946
959
  rows: 3
947
960
  }),
948
- /* @__PURE__ */ _(o, {
949
- label: y("devportal.changelog", "Changelog"),
950
- value: k.changelog,
951
- onChange: (e) => A((t) => t && {
961
+ /* @__PURE__ */ h(a, {
962
+ label: _("devportal.changelog", "Changelog"),
963
+ value: O.changelog,
964
+ onChange: (e) => k((t) => t && {
952
965
  ...t,
953
966
  changelog: e
954
967
  }),
955
- placeholder: y("devportal.changelogPlaceholder", "Detailed changelog for this version..."),
968
+ placeholder: _("devportal.changelogPlaceholder", "Detailed changelog for this version..."),
956
969
  rows: 3
957
970
  })
958
971
  ]
959
972
  })
960
973
  }),
961
- /* @__PURE__ */ _(a, {
962
- open: Ue === "publish",
974
+ /* @__PURE__ */ h(i, {
975
+ open: Ge === "publish",
963
976
  onOpenChange: (e) => {
964
- e || H(null);
977
+ e || B(null);
965
978
  },
966
979
  onConfirm: async () => {
967
- if (Q.length === 0) return;
968
- N(null);
969
- let e = await Promise.allSettled(Q.map((e) => tt({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
970
- P(`Published ${t} version${t === 1 ? "" : "s"}${n > 0 ? ` • ${n} failed` : ""}`), vt(), H(null);
980
+ if (Z.length === 0) return;
981
+ M(null);
982
+ let e = await Promise.allSettled(Z.map((e) => nt({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
983
+ N(`Published ${t} version${t === 1 ? "" : "s"}${n > 0 ? ` • ${n} failed` : ""}`), yt(), B(null);
971
984
  },
972
- title: y("devportal.submitSelectedVersions", "Submit selected versions for review"),
973
- description: `Submit ${Q.length} selected version${Q.length === 1 ? "" : "s"} for platform review?`,
974
- confirmLabel: y("devportal.submitForReview", "Submit for Review"),
975
- cancelLabel: y("devportal.cancel", "Cancel"),
985
+ title: _("devportal.submitSelectedVersions", "Submit selected versions for review"),
986
+ description: `Submit ${Z.length} selected version${Z.length === 1 ? "" : "s"} for platform review?`,
987
+ confirmLabel: _("devportal.submitForReview", "Submit for Review"),
988
+ cancelLabel: _("devportal.cancel", "Cancel"),
976
989
  variant: "success"
977
990
  }),
978
- /* @__PURE__ */ _(a, {
979
- open: Ue === "deprecate",
991
+ /* @__PURE__ */ h(i, {
992
+ open: Ge === "deprecate",
980
993
  onOpenChange: (e) => {
981
- e || H(null);
994
+ e || B(null);
982
995
  },
983
996
  onConfirm: async () => {
984
997
  if ($.length === 0) return;
985
- N(null);
986
- let e = await Promise.allSettled($.map((e) => nt({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
987
- P(`Deprecated ${t} version${t === 1 ? "" : "s"}${n > 0 ? ` • ${n} failed` : ""}`), vt(), H(null);
998
+ M(null);
999
+ let e = await Promise.allSettled($.map((e) => rt({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
1000
+ N(`Deprecated ${t} version${t === 1 ? "" : "s"}${n > 0 ? ` • ${n} failed` : ""}`), yt(), B(null);
988
1001
  },
989
- title: y("devportal.deprecateSelectedVersions", "Deprecate selected versions"),
990
- description: `${y("devportal.deprecate", "Deprecate")} ${$.length} selected version${$.length === 1 ? "" : "s"}? ${y("devportal.deprecateVersionsWarning", "Deprecated versions remain visible but should no longer be promoted.")}`,
991
- confirmLabel: y("devportal.deprecate", "Deprecate"),
992
- cancelLabel: y("devportal.cancel", "Cancel"),
1002
+ title: _("devportal.deprecateSelectedVersions", "Deprecate selected versions"),
1003
+ description: `${_("devportal.deprecate", "Deprecate")} ${$.length} selected version${$.length === 1 ? "" : "s"}? ${_("devportal.deprecateVersionsWarning", "Deprecated versions remain visible but should no longer be promoted.")}`,
1004
+ confirmLabel: _("devportal.deprecate", "Deprecate"),
1005
+ cancelLabel: _("devportal.cancel", "Cancel"),
993
1006
  variant: "warning"
994
1007
  })
995
1008
  ]
@@ -997,6 +1010,6 @@ var Ce = () => {
997
1010
  });
998
1011
  };
999
1012
  //#endregion
1000
- export { Ce as ApplicationVersionsPage };
1013
+ export { Te as ApplicationVersionsPage };
1001
1014
 
1002
1015
  //# sourceMappingURL=ApplicationVersionsPage.js.map