@burdenoff/microfe-devportal 2026.803.2 → 2026.805.2
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
|
|
5
|
-
import { StatusBadge as
|
|
6
|
-
import { SelectionCheckbox as
|
|
7
|
-
import { DataTable as
|
|
8
|
-
import { InputField as
|
|
9
|
-
import { ConfirmDialog as
|
|
10
|
-
import { PermissionGuard as
|
|
11
|
-
import { MarkdownEditor as
|
|
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
|
|
13
|
+
import { useDevportalPermission as fe } from "../hooks/usePermission.js";
|
|
14
14
|
import "../hooks/index.js";
|
|
15
|
-
import { DEVPORTAL_PERMISSIONS as
|
|
16
|
-
import
|
|
17
|
-
import { usePackageUpload as
|
|
18
|
-
import { useCallback as
|
|
19
|
-
import { useI18n as
|
|
20
|
-
import { AlertCircle as
|
|
21
|
-
import { useParams as
|
|
22
|
-
import { Fragment as
|
|
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
|
|
25
|
-
let { t:
|
|
26
|
-
let n =
|
|
24
|
+
var Te = () => {
|
|
25
|
+
let { t: Te } = _e(), _ = (e, t) => {
|
|
26
|
+
let n = Te(e);
|
|
27
27
|
return n === e ? t : n;
|
|
28
|
-
}, { allowed:
|
|
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
|
-
}), [
|
|
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" && (
|
|
42
|
+
typeof n == "string" && (j((e) => ({
|
|
43
43
|
...e,
|
|
44
44
|
manifestJson: n
|
|
45
|
-
})),
|
|
45
|
+
})), T(t.name));
|
|
46
46
|
}, n.readAsText(t), e.target.value = "";
|
|
47
|
-
}, []), [
|
|
48
|
-
variables: { id:
|
|
49
|
-
skip: !
|
|
47
|
+
}, []), [Ge, B] = l(null), { data: V } = te({
|
|
48
|
+
variables: { id: x ?? "" },
|
|
49
|
+
skip: !x,
|
|
50
50
|
fetchPolicy: "cache-first"
|
|
51
|
-
}),
|
|
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(
|
|
57
|
-
|
|
58
|
-
let e =
|
|
59
|
-
if (!
|
|
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(
|
|
62
|
-
}, [
|
|
63
|
-
let { data:
|
|
64
|
-
variables: { applicationId:
|
|
65
|
-
skip: !
|
|
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
|
-
}), [
|
|
68
|
-
if (!
|
|
69
|
-
|
|
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 (
|
|
72
|
-
if (!
|
|
73
|
-
|
|
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(
|
|
77
|
+
e = JSON.parse(A.manifestJson);
|
|
78
78
|
} catch {
|
|
79
|
-
|
|
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 (
|
|
83
|
-
if (!
|
|
84
|
-
|
|
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 (!
|
|
88
|
-
|
|
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(
|
|
92
|
+
e = JSON.parse(A.manifestJson);
|
|
93
93
|
} catch {
|
|
94
|
-
|
|
94
|
+
P("Invalid JSON in manifest — please check your input.");
|
|
95
95
|
return;
|
|
96
96
|
}
|
|
97
|
-
} else if (
|
|
98
|
-
e = JSON.parse(
|
|
97
|
+
} else if (A.manifestJson.trim()) try {
|
|
98
|
+
e = JSON.parse(A.manifestJson);
|
|
99
99
|
} catch {
|
|
100
|
-
|
|
100
|
+
P("Invalid JSON in manifest — please check your input.");
|
|
101
101
|
return;
|
|
102
102
|
}
|
|
103
|
-
let t =
|
|
103
|
+
let t = Ke && A.requiredScopes.trim() ? A.requiredScopes.split(",").map((e) => e.trim()).filter(Boolean) : void 0;
|
|
104
104
|
try {
|
|
105
|
-
await
|
|
106
|
-
applicationId:
|
|
105
|
+
await Qe({ variables: {
|
|
106
|
+
applicationId: x,
|
|
107
107
|
input: {
|
|
108
|
-
version:
|
|
109
|
-
releaseNotes:
|
|
110
|
-
changelog:
|
|
111
|
-
packageUrl:
|
|
112
|
-
packageSize:
|
|
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
|
-
} }),
|
|
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
|
-
}),
|
|
124
|
+
}), N(_("devportal.versionCreatedSuccess", "Version created successfully"));
|
|
125
125
|
} catch (e) {
|
|
126
|
-
|
|
126
|
+
M(e instanceof Error ? e.message : _("devportal.versionCreateFailed", "Failed to create version"));
|
|
127
127
|
}
|
|
128
|
-
},
|
|
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
|
|
134
|
-
|
|
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
|
-
}, [
|
|
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
|
|
147
|
-
|
|
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
|
-
}, [
|
|
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" && (
|
|
160
|
+
typeof n == "string" && (k((e) => e && {
|
|
161
161
|
...e,
|
|
162
162
|
manifestJson: n
|
|
163
|
-
}),
|
|
163
|
+
}), E(t.name));
|
|
164
164
|
}, n.readAsText(t), e.target.value = "";
|
|
165
|
-
}, []),
|
|
166
|
-
if (!
|
|
167
|
-
|
|
168
|
-
let e =
|
|
169
|
-
if (e &&
|
|
170
|
-
t = JSON.parse(
|
|
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
|
-
|
|
172
|
+
F("Invalid JSON in manifest — please check your input.");
|
|
173
173
|
return;
|
|
174
174
|
}
|
|
175
175
|
let n = {};
|
|
176
|
-
|
|
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
|
|
179
|
-
id:
|
|
178
|
+
await et({ variables: {
|
|
179
|
+
id: O.versionId,
|
|
180
180
|
input: n
|
|
181
|
-
} }),
|
|
181
|
+
} }), k(null), E(null), N(_("devportal.versionUpdatedSuccess", "Version updated successfully"));
|
|
182
182
|
} catch (e) {
|
|
183
|
-
|
|
183
|
+
M(e instanceof Error ? e.message : _("devportal.versionUpdateFailed", "Failed to update version"));
|
|
184
184
|
}
|
|
185
|
-
},
|
|
186
|
-
|
|
185
|
+
}, pt = async (e) => {
|
|
186
|
+
M(null), N(null);
|
|
187
187
|
try {
|
|
188
|
-
await
|
|
188
|
+
await nt({ variables: { id: e } }), N(_("devportal.versionSubmittedSuccess", "Version submitted for review — you'll be notified when approved"));
|
|
189
189
|
} catch (e) {
|
|
190
|
-
|
|
190
|
+
M(e instanceof Error ? e.message : _("devportal.versionPublishFailed", "Failed to submit version for review"));
|
|
191
191
|
}
|
|
192
|
-
},
|
|
193
|
-
|
|
192
|
+
}, mt = async (e) => {
|
|
193
|
+
M(null), N(null);
|
|
194
194
|
try {
|
|
195
|
-
await
|
|
195
|
+
await rt({ variables: { id: e } }), N(_("devportal.versionDeprecatedSuccess", "Version deprecated successfully"));
|
|
196
196
|
} catch (e) {
|
|
197
|
-
|
|
197
|
+
M(e instanceof Error ? e.message : _("devportal.versionDeprecateFailed", "Failed to deprecate version"));
|
|
198
198
|
}
|
|
199
|
-
},
|
|
200
|
-
if (!(!
|
|
201
|
-
|
|
199
|
+
}, ht = async () => {
|
|
200
|
+
if (!(!L || !R.trim())) {
|
|
201
|
+
M(null), N(null);
|
|
202
202
|
try {
|
|
203
|
-
await
|
|
204
|
-
id:
|
|
205
|
-
reason:
|
|
206
|
-
} }),
|
|
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
|
-
|
|
208
|
+
M(e instanceof Error ? e.message : _("devportal.versionRejectFailed", "Failed to reject version"));
|
|
209
209
|
}
|
|
210
210
|
}
|
|
211
|
-
},
|
|
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__ */
|
|
214
|
+
}) : e.status === "pending_review" ? /* @__PURE__ */ h(f, {
|
|
215
215
|
size: 16,
|
|
216
216
|
className: "text-status-info-text"
|
|
217
|
-
}) : e.status === "rejected" ? /* @__PURE__ */
|
|
217
|
+
}) : e.status === "rejected" ? /* @__PURE__ */ h(Ce, {
|
|
218
218
|
size: 16,
|
|
219
219
|
className: "text-status-error-text"
|
|
220
|
-
}) : e.status === "draft" ? /* @__PURE__ */
|
|
220
|
+
}) : e.status === "draft" ? /* @__PURE__ */ h(be, {
|
|
221
221
|
size: 16,
|
|
222
222
|
className: "text-status-warning-text"
|
|
223
|
-
}) : e.status === "deprecated" ? /* @__PURE__ */
|
|
223
|
+
}) : e.status === "deprecated" ? /* @__PURE__ */ h(ve, {
|
|
224
224
|
size: 16,
|
|
225
225
|
className: "text-text-secondary"
|
|
226
|
-
}) : /* @__PURE__ */
|
|
226
|
+
}) : /* @__PURE__ */ h(xe, {
|
|
227
227
|
size: 16,
|
|
228
228
|
className: "text-accent-blue"
|
|
229
|
-
}),
|
|
230
|
-
|
|
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
|
-
},
|
|
235
|
-
|
|
234
|
+
}, vt = (e) => {
|
|
235
|
+
He((t) => {
|
|
236
236
|
let n = new Set(t);
|
|
237
|
-
return
|
|
237
|
+
return Y.forEach((t) => {
|
|
238
238
|
e ? n.add(t.id) : n.delete(t.id);
|
|
239
239
|
}), n;
|
|
240
240
|
});
|
|
241
|
-
},
|
|
242
|
-
return
|
|
243
|
-
title:
|
|
244
|
-
description:
|
|
245
|
-
backLink: `/apps/${
|
|
246
|
-
backLabel:
|
|
247
|
-
children: /* @__PURE__ */
|
|
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__ */
|
|
249
|
+
children: /* @__PURE__ */ h(d, { className: "h-8 w-8 animate-spin text-text-secondary" })
|
|
250
250
|
})
|
|
251
|
-
}) :
|
|
252
|
-
title:
|
|
253
|
-
description:
|
|
254
|
-
backLink: `/apps/${
|
|
255
|
-
backLabel:
|
|
256
|
-
children: /* @__PURE__ */
|
|
257
|
-
icon: /* @__PURE__ */
|
|
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:
|
|
262
|
-
description:
|
|
261
|
+
title: _("devportal.failedToLoadVersions", "Failed to load versions"),
|
|
262
|
+
description: Ze.message || _("devportal.versionsLoadError", "An error occurred while loading versions")
|
|
263
263
|
})
|
|
264
|
-
}) : /* @__PURE__ */
|
|
264
|
+
}) : /* @__PURE__ */ h(de, {
|
|
265
265
|
authOnly: !0,
|
|
266
|
-
children: /* @__PURE__ */
|
|
267
|
-
title:
|
|
268
|
-
description:
|
|
269
|
-
purpose:
|
|
270
|
-
backLink: `/apps/${
|
|
271
|
-
backLabel:
|
|
272
|
-
actions: /* @__PURE__ */
|
|
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
|
-
|
|
274
|
+
P(null), D(!0);
|
|
275
275
|
},
|
|
276
|
-
disabled: !
|
|
277
|
-
"aria-disabled": !
|
|
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__ */
|
|
279
|
+
children: [/* @__PURE__ */ h(Se, { size: 16 }), _("devportal.newVersion", "New Version")]
|
|
280
280
|
}),
|
|
281
281
|
children: [
|
|
282
|
-
|
|
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__ */
|
|
285
|
+
/* @__PURE__ */ h(u, {
|
|
286
286
|
size: 16,
|
|
287
287
|
className: "flex-shrink-0"
|
|
288
288
|
}),
|
|
289
|
-
|
|
290
|
-
/* @__PURE__ */
|
|
291
|
-
onClick: () =>
|
|
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:
|
|
293
|
+
children: _("devportal.dismiss", "Dismiss")
|
|
294
294
|
})
|
|
295
295
|
]
|
|
296
296
|
}),
|
|
297
|
-
|
|
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__ */
|
|
300
|
+
/* @__PURE__ */ h(ye, {
|
|
301
301
|
size: 16,
|
|
302
302
|
className: "flex-shrink-0"
|
|
303
303
|
}),
|
|
304
|
-
|
|
305
|
-
/* @__PURE__ */
|
|
306
|
-
onClick: () =>
|
|
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:
|
|
308
|
+
children: _("devportal.dismiss", "Dismiss")
|
|
309
309
|
})
|
|
310
310
|
]
|
|
311
311
|
}),
|
|
312
|
-
|
|
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__ */
|
|
314
|
+
children: [/* @__PURE__ */ h(u, {
|
|
315
315
|
size: 16,
|
|
316
316
|
className: "mt-0.5 shrink-0"
|
|
317
|
-
}), /* @__PURE__ */
|
|
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__ */
|
|
320
|
+
}), /* @__PURE__ */ h("ul", {
|
|
321
321
|
className: "mt-1 list-disc pl-4 text-xs opacity-80",
|
|
322
|
-
children:
|
|
322
|
+
children: q.map((e) => /* @__PURE__ */ h("li", { children: e }, e))
|
|
323
323
|
})] })]
|
|
324
324
|
}),
|
|
325
|
-
|
|
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__ */
|
|
327
|
+
children: [/* @__PURE__ */ h(f, {
|
|
328
328
|
size: 16,
|
|
329
329
|
className: "mt-0.5 shrink-0"
|
|
330
|
-
}), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
-
|
|
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__ */
|
|
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__ */
|
|
359
|
+
children: [/* @__PURE__ */ g("div", {
|
|
347
360
|
className: "flex flex-wrap items-center gap-3",
|
|
348
|
-
children: [/* @__PURE__ */
|
|
361
|
+
children: [/* @__PURE__ */ g("div", {
|
|
349
362
|
className: "flex items-center gap-2",
|
|
350
|
-
children: [/* @__PURE__ */
|
|
351
|
-
checked:
|
|
352
|
-
indeterminate:
|
|
353
|
-
onChange:
|
|
363
|
+
children: [/* @__PURE__ */ h(ce, {
|
|
364
|
+
checked: ot,
|
|
365
|
+
indeterminate: st,
|
|
366
|
+
onChange: vt,
|
|
354
367
|
ariaLabel: "Select all visible versions"
|
|
355
|
-
}), /* @__PURE__ */
|
|
368
|
+
}), /* @__PURE__ */ h("span", {
|
|
356
369
|
className: "text-sm font-medium",
|
|
357
|
-
children:
|
|
370
|
+
children: _("devportal.selectAllVisible", "Select all visible")
|
|
358
371
|
})]
|
|
359
|
-
}),
|
|
360
|
-
onClick:
|
|
372
|
+
}), I.size > 0 && /* @__PURE__ */ h("button", {
|
|
373
|
+
onClick: yt,
|
|
361
374
|
className: "text-sm text-text-secondary hover:text-text-primary",
|
|
362
|
-
children:
|
|
375
|
+
children: _("devportal.clearSelection", "Clear selection")
|
|
363
376
|
})]
|
|
364
|
-
}), /* @__PURE__ */
|
|
377
|
+
}), /* @__PURE__ */ g("div", {
|
|
365
378
|
className: "flex flex-wrap items-center gap-2",
|
|
366
379
|
children: [
|
|
367
|
-
/* @__PURE__ */
|
|
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: [
|
|
382
|
+
children: [I.size, " selected"]
|
|
370
383
|
}),
|
|
371
|
-
/* @__PURE__ */
|
|
372
|
-
onClick: () =>
|
|
373
|
-
disabled:
|
|
374
|
-
"aria-disabled": !
|
|
375
|
-
title:
|
|
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: [
|
|
390
|
+
children: [_("devportal.submitForReview", "Submit for Review"), Z.length > 0 ? ` (${Z.length})` : ""]
|
|
378
391
|
}),
|
|
379
|
-
/* @__PURE__ */
|
|
380
|
-
onClick: () =>
|
|
381
|
-
disabled: $.length === 0 || !
|
|
382
|
-
"aria-disabled": !
|
|
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: [
|
|
397
|
+
children: [_("devportal.deprecateSelected", "Deprecate Selected"), $.length > 0 ? ` (${$.length})` : ""]
|
|
385
398
|
})
|
|
386
399
|
]
|
|
387
400
|
})]
|
|
388
401
|
})
|
|
389
402
|
}),
|
|
390
|
-
|
|
391
|
-
data:
|
|
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__ */
|
|
397
|
-
checked:
|
|
398
|
-
indeterminate:
|
|
399
|
-
onChange:
|
|
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__ */
|
|
416
|
+
render: (e) => /* @__PURE__ */ h("div", {
|
|
404
417
|
onClick: (e) => e.stopPropagation(),
|
|
405
|
-
children: /* @__PURE__ */
|
|
406
|
-
checked:
|
|
407
|
-
onChange: (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:
|
|
415
|
-
render: (e) => /* @__PURE__ */
|
|
427
|
+
header: _("devportal.version", "Version"),
|
|
428
|
+
render: (e) => /* @__PURE__ */ g("div", {
|
|
416
429
|
className: "flex items-center gap-2",
|
|
417
430
|
children: [
|
|
418
|
-
|
|
419
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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:
|
|
438
|
+
children: _("devportal.latest", "Latest")
|
|
426
439
|
}),
|
|
427
|
-
!e.isStable && /* @__PURE__ */
|
|
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:
|
|
442
|
+
children: _("devportal.beta", "Beta")
|
|
430
443
|
})
|
|
431
444
|
]
|
|
432
445
|
})
|
|
433
446
|
},
|
|
434
447
|
{
|
|
435
448
|
key: "releaseNotes",
|
|
436
|
-
header:
|
|
437
|
-
render: (e) => /* @__PURE__ */
|
|
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 ||
|
|
452
|
+
children: e.releaseNotes || _("devportal.noReleaseNotes", "No release notes")
|
|
440
453
|
})
|
|
441
454
|
},
|
|
442
455
|
{
|
|
443
456
|
key: "status",
|
|
444
|
-
header:
|
|
445
|
-
render: (e) => /* @__PURE__ */
|
|
457
|
+
header: _("devportal.status", "Status"),
|
|
458
|
+
render: (e) => /* @__PURE__ */ g("div", {
|
|
446
459
|
className: "space-y-1",
|
|
447
460
|
children: [
|
|
448
|
-
/* @__PURE__ */
|
|
449
|
-
e.status === "pending_review" && /* @__PURE__ */
|
|
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__ */
|
|
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:
|
|
463
|
-
render: (e) => e.publishedAt ?
|
|
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__ */
|
|
482
|
+
render: (e) => /* @__PURE__ */ g("div", {
|
|
470
483
|
className: "flex flex-wrap gap-2",
|
|
471
484
|
children: [
|
|
472
|
-
(e.status === "draft" || e.status === "rejected") &&
|
|
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
|
-
|
|
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
|
-
}),
|
|
499
|
+
}), E(null), F(null);
|
|
487
500
|
},
|
|
488
501
|
children: "Edit"
|
|
489
502
|
}),
|
|
490
|
-
(e.status === "draft" || e.status === "rejected") &&
|
|
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: !
|
|
493
|
-
"aria-disabled": !
|
|
494
|
-
title:
|
|
495
|
-
onClick: () =>
|
|
496
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
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: !
|
|
501
|
-
"aria-disabled": !
|
|
502
|
-
onClick: () =>
|
|
503
|
-
children:
|
|
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__ */
|
|
522
|
+
}) : /* @__PURE__ */ h(t, {
|
|
510
523
|
illustration: "empty-data",
|
|
511
|
-
title:
|
|
512
|
-
description:
|
|
513
|
-
action: /* @__PURE__ */
|
|
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
|
-
|
|
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__ */
|
|
531
|
+
children: [/* @__PURE__ */ h(Se, { size: 16 }), _("devportal.createVersion", "Create Version")]
|
|
519
532
|
})
|
|
520
533
|
}),
|
|
521
|
-
|
|
522
|
-
open:
|
|
534
|
+
Le && /* @__PURE__ */ h(i, {
|
|
535
|
+
open: Le,
|
|
523
536
|
onOpenChange: (e) => {
|
|
524
|
-
|
|
537
|
+
D(e), e || P(null);
|
|
525
538
|
},
|
|
526
|
-
onConfirm:
|
|
527
|
-
title:
|
|
528
|
-
confirmLabel:
|
|
529
|
-
children: /* @__PURE__ */
|
|
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
|
-
|
|
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__ */
|
|
547
|
+
children: [/* @__PURE__ */ h(u, {
|
|
535
548
|
size: 14,
|
|
536
549
|
className: "flex-shrink-0"
|
|
537
|
-
}),
|
|
550
|
+
}), Be]
|
|
538
551
|
}),
|
|
539
|
-
/* @__PURE__ */
|
|
540
|
-
label:
|
|
541
|
-
value:
|
|
542
|
-
onChange: (e) =>
|
|
543
|
-
...
|
|
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:
|
|
560
|
+
hint: _("devportal.versionHint", "Use semantic versioning (major.minor.patch)"),
|
|
548
561
|
required: !0
|
|
549
562
|
}),
|
|
550
|
-
|
|
563
|
+
W && /* @__PURE__ */ g("div", {
|
|
551
564
|
className: "space-y-1",
|
|
552
565
|
children: [
|
|
553
|
-
/* @__PURE__ */
|
|
566
|
+
/* @__PURE__ */ g("label", {
|
|
554
567
|
className: "text-sm font-medium",
|
|
555
568
|
children: [
|
|
556
|
-
|
|
569
|
+
H ? "Workflow Definition (JSON)" : "Manifest (JSON)",
|
|
557
570
|
" ",
|
|
558
|
-
/* @__PURE__ */
|
|
571
|
+
/* @__PURE__ */ h("span", {
|
|
559
572
|
className: "text-status-error-text",
|
|
560
573
|
children: "*"
|
|
561
574
|
})
|
|
562
575
|
]
|
|
563
576
|
}),
|
|
564
|
-
/* @__PURE__ */
|
|
577
|
+
/* @__PURE__ */ h("textarea", {
|
|
565
578
|
rows: 10,
|
|
566
579
|
required: !0,
|
|
567
|
-
placeholder:
|
|
568
|
-
value:
|
|
569
|
-
onChange: (e) =>
|
|
570
|
-
...
|
|
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__ */
|
|
588
|
+
/* @__PURE__ */ h("p", {
|
|
576
589
|
className: "text-xs text-text-secondary",
|
|
577
|
-
children:
|
|
590
|
+
children: H ? /* @__PURE__ */ g(m, { children: [
|
|
578
591
|
"Paste the full ",
|
|
579
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
598
|
+
U && /* @__PURE__ */ g("div", {
|
|
586
599
|
className: "space-y-1",
|
|
587
600
|
children: [
|
|
588
|
-
/* @__PURE__ */
|
|
601
|
+
/* @__PURE__ */ g("label", {
|
|
589
602
|
className: "text-sm font-medium",
|
|
590
603
|
children: [
|
|
591
604
|
"Package (.zip)",
|
|
592
605
|
" ",
|
|
593
|
-
/* @__PURE__ */
|
|
606
|
+
/* @__PURE__ */ h("span", {
|
|
594
607
|
className: "text-status-error-text",
|
|
595
608
|
children: "*"
|
|
596
609
|
})
|
|
597
610
|
]
|
|
598
611
|
}),
|
|
599
|
-
/* @__PURE__ */
|
|
612
|
+
/* @__PURE__ */ g("div", {
|
|
600
613
|
className: "flex gap-2 items-center",
|
|
601
614
|
children: [
|
|
602
|
-
/* @__PURE__ */
|
|
603
|
-
ref:
|
|
615
|
+
/* @__PURE__ */ h("input", {
|
|
616
|
+
ref: je,
|
|
604
617
|
type: "file",
|
|
605
618
|
accept: ".zip",
|
|
606
619
|
className: "hidden",
|
|
607
|
-
onChange:
|
|
620
|
+
onChange: lt
|
|
608
621
|
}),
|
|
609
|
-
/* @__PURE__ */
|
|
622
|
+
/* @__PURE__ */ h("button", {
|
|
610
623
|
type: "button",
|
|
611
|
-
disabled:
|
|
612
|
-
onClick: () =>
|
|
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:
|
|
615
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
634
|
+
Ae,
|
|
622
635
|
"%"
|
|
623
|
-
] }) : /* @__PURE__ */
|
|
624
|
-
/* @__PURE__ */
|
|
636
|
+
] }) : /* @__PURE__ */ g(m, { children: [
|
|
637
|
+
/* @__PURE__ */ h(p, { size: 14 }),
|
|
625
638
|
" ",
|
|
626
|
-
|
|
639
|
+
A.packageUrl ? "Replace zip" : "Upload zip"
|
|
627
640
|
] })
|
|
628
641
|
}),
|
|
629
|
-
|
|
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
|
-
|
|
648
|
+
w && /* @__PURE__ */ h("p", {
|
|
636
649
|
className: "text-xs text-status-error-text",
|
|
637
|
-
children:
|
|
650
|
+
children: w
|
|
638
651
|
}),
|
|
639
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
658
|
+
U && /* @__PURE__ */ g("div", {
|
|
646
659
|
className: "space-y-2",
|
|
647
660
|
children: [
|
|
648
|
-
/* @__PURE__ */
|
|
661
|
+
/* @__PURE__ */ g("div", {
|
|
649
662
|
className: "flex items-center justify-between gap-2 flex-wrap",
|
|
650
|
-
children: [/* @__PURE__ */
|
|
663
|
+
children: [/* @__PURE__ */ g("label", {
|
|
651
664
|
className: "text-sm font-medium",
|
|
652
665
|
children: [
|
|
653
666
|
"manifest.json",
|
|
654
667
|
" ",
|
|
655
|
-
/* @__PURE__ */
|
|
668
|
+
/* @__PURE__ */ h("span", {
|
|
656
669
|
className: "text-status-error-text",
|
|
657
670
|
children: "*"
|
|
658
671
|
})
|
|
659
672
|
]
|
|
660
|
-
}), /* @__PURE__ */
|
|
673
|
+
}), /* @__PURE__ */ g("div", {
|
|
661
674
|
className: "flex items-center gap-2",
|
|
662
675
|
children: [
|
|
663
|
-
|
|
676
|
+
Fe && /* @__PURE__ */ g("span", {
|
|
664
677
|
className: "text-xs text-status-success-text",
|
|
665
|
-
children: ["✓ ",
|
|
678
|
+
children: ["✓ ", Fe]
|
|
666
679
|
}),
|
|
667
|
-
/* @__PURE__ */
|
|
668
|
-
ref:
|
|
680
|
+
/* @__PURE__ */ h("input", {
|
|
681
|
+
ref: Me,
|
|
669
682
|
type: "file",
|
|
670
683
|
accept: ".json,application/json",
|
|
671
684
|
className: "hidden",
|
|
672
|
-
onChange:
|
|
685
|
+
onChange: We
|
|
673
686
|
}),
|
|
674
|
-
/* @__PURE__ */
|
|
687
|
+
/* @__PURE__ */ g("button", {
|
|
675
688
|
type: "button",
|
|
676
|
-
onClick: () =>
|
|
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__ */
|
|
691
|
+
children: [/* @__PURE__ */ h(p, { size: 12 }), "Upload manifest.json"]
|
|
679
692
|
})
|
|
680
693
|
]
|
|
681
694
|
})]
|
|
682
695
|
}),
|
|
683
|
-
/* @__PURE__ */
|
|
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:
|
|
699
|
+
value: A.manifestJson,
|
|
687
700
|
onChange: (e) => {
|
|
688
|
-
|
|
689
|
-
...
|
|
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__ */
|
|
708
|
+
/* @__PURE__ */ g("p", {
|
|
696
709
|
className: "text-xs text-text-tertiary",
|
|
697
710
|
children: [
|
|
698
711
|
"Upload or paste your ",
|
|
699
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
718
|
+
Ke && /* @__PURE__ */ g("div", {
|
|
706
719
|
className: "space-y-1",
|
|
707
720
|
children: [
|
|
708
|
-
/* @__PURE__ */
|
|
721
|
+
/* @__PURE__ */ g("label", {
|
|
709
722
|
className: "text-sm font-medium",
|
|
710
723
|
children: [
|
|
711
724
|
"Required scopes",
|
|
712
725
|
" ",
|
|
713
|
-
/* @__PURE__ */
|
|
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__ */
|
|
732
|
+
/* @__PURE__ */ h("input", {
|
|
720
733
|
type: "text",
|
|
721
|
-
value:
|
|
722
|
-
onChange: (e) =>
|
|
723
|
-
...
|
|
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__ */
|
|
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__ */
|
|
736
|
-
label:
|
|
737
|
-
value:
|
|
738
|
-
onChange: (e) =>
|
|
739
|
-
...
|
|
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:
|
|
755
|
+
placeholder: _("devportal.releaseNotesPlaceholder", "What changed in this release?"),
|
|
743
756
|
rows: 3
|
|
744
757
|
}),
|
|
745
|
-
/* @__PURE__ */
|
|
746
|
-
label:
|
|
747
|
-
value:
|
|
748
|
-
onChange: (e) =>
|
|
749
|
-
...
|
|
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:
|
|
765
|
+
placeholder: _("devportal.changelogPlaceholder", "Detailed changelog for this version..."),
|
|
753
766
|
rows: 3
|
|
754
767
|
})
|
|
755
768
|
]
|
|
756
769
|
})
|
|
757
770
|
}),
|
|
758
|
-
|
|
759
|
-
open: !!
|
|
771
|
+
L && /* @__PURE__ */ h(i, {
|
|
772
|
+
open: !!L,
|
|
760
773
|
onOpenChange: (e) => {
|
|
761
|
-
e || (
|
|
774
|
+
e || (Ue(null), z(""));
|
|
762
775
|
},
|
|
763
|
-
onConfirm:
|
|
764
|
-
title: `Reject version ${
|
|
776
|
+
onConfirm: ht,
|
|
777
|
+
title: `Reject version ${L.version}`,
|
|
765
778
|
confirmLabel: "Reject Version",
|
|
766
|
-
cancelLabel:
|
|
779
|
+
cancelLabel: _("devportal.cancel", "Cancel"),
|
|
767
780
|
variant: "danger",
|
|
768
|
-
children: /* @__PURE__ */
|
|
781
|
+
children: /* @__PURE__ */ g("div", {
|
|
769
782
|
className: "space-y-3",
|
|
770
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
786
|
+
}), /* @__PURE__ */ g("div", {
|
|
774
787
|
className: "space-y-1",
|
|
775
|
-
children: [/* @__PURE__ */
|
|
788
|
+
children: [/* @__PURE__ */ g("label", {
|
|
776
789
|
className: "text-sm font-medium",
|
|
777
790
|
children: [
|
|
778
791
|
"Rejection reason",
|
|
779
792
|
" ",
|
|
780
|
-
/* @__PURE__ */
|
|
793
|
+
/* @__PURE__ */ h("span", {
|
|
781
794
|
className: "text-status-error-text",
|
|
782
795
|
children: "*"
|
|
783
796
|
})
|
|
784
797
|
]
|
|
785
|
-
}), /* @__PURE__ */
|
|
798
|
+
}), /* @__PURE__ */ h("textarea", {
|
|
786
799
|
rows: 3,
|
|
787
|
-
value:
|
|
788
|
-
onChange: (e) =>
|
|
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
|
-
|
|
796
|
-
open: !!
|
|
808
|
+
O && /* @__PURE__ */ h(i, {
|
|
809
|
+
open: !!O,
|
|
797
810
|
onOpenChange: (e) => {
|
|
798
|
-
e || (
|
|
811
|
+
e || (k(null), E(null), F(null));
|
|
799
812
|
},
|
|
800
|
-
onConfirm:
|
|
801
|
-
title: `Edit Version ${
|
|
802
|
-
confirmLabel:
|
|
803
|
-
children: /* @__PURE__ */
|
|
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
|
-
|
|
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__ */
|
|
821
|
+
children: [/* @__PURE__ */ h(u, {
|
|
809
822
|
size: 14,
|
|
810
823
|
className: "flex-shrink-0"
|
|
811
|
-
}),
|
|
824
|
+
}), Ve]
|
|
812
825
|
}),
|
|
813
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
830
|
+
U && /* @__PURE__ */ g("div", {
|
|
818
831
|
className: "space-y-1",
|
|
819
832
|
children: [
|
|
820
|
-
/* @__PURE__ */
|
|
833
|
+
/* @__PURE__ */ h("label", {
|
|
821
834
|
className: "text-sm font-medium",
|
|
822
835
|
children: "Package (.zip)"
|
|
823
836
|
}),
|
|
824
|
-
/* @__PURE__ */
|
|
837
|
+
/* @__PURE__ */ g("div", {
|
|
825
838
|
className: "flex gap-2 items-center",
|
|
826
839
|
children: [
|
|
827
|
-
/* @__PURE__ */
|
|
828
|
-
ref:
|
|
840
|
+
/* @__PURE__ */ h("input", {
|
|
841
|
+
ref: Ne,
|
|
829
842
|
type: "file",
|
|
830
843
|
accept: ".zip",
|
|
831
844
|
className: "hidden",
|
|
832
|
-
onChange:
|
|
845
|
+
onChange: ut
|
|
833
846
|
}),
|
|
834
|
-
/* @__PURE__ */
|
|
847
|
+
/* @__PURE__ */ h("button", {
|
|
835
848
|
type: "button",
|
|
836
|
-
disabled:
|
|
837
|
-
onClick: () =>
|
|
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:
|
|
840
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
859
|
+
Ae,
|
|
847
860
|
"%"
|
|
848
|
-
] }) : /* @__PURE__ */
|
|
861
|
+
] }) : /* @__PURE__ */ g(m, { children: [/* @__PURE__ */ h(p, { size: 14 }), O.newPackageUrl ? "Replace zip again" : O.hasExistingZip ? "Replace zip" : "Upload zip"] })
|
|
849
862
|
}),
|
|
850
|
-
|
|
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
|
-
!
|
|
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
|
-
|
|
873
|
+
w && /* @__PURE__ */ h("p", {
|
|
861
874
|
className: "text-xs text-status-error-text",
|
|
862
|
-
children:
|
|
875
|
+
children: w
|
|
863
876
|
})
|
|
864
877
|
]
|
|
865
878
|
}),
|
|
866
|
-
|
|
879
|
+
U && /* @__PURE__ */ g("div", {
|
|
867
880
|
className: "space-y-2",
|
|
868
|
-
children: [/* @__PURE__ */
|
|
881
|
+
children: [/* @__PURE__ */ g("div", {
|
|
869
882
|
className: "flex items-center justify-between gap-2 flex-wrap",
|
|
870
|
-
children: [/* @__PURE__ */
|
|
883
|
+
children: [/* @__PURE__ */ g("label", {
|
|
871
884
|
className: "text-sm font-medium",
|
|
872
885
|
children: [
|
|
873
886
|
"manifest.json",
|
|
874
887
|
" ",
|
|
875
|
-
/* @__PURE__ */
|
|
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__ */
|
|
893
|
+
}), /* @__PURE__ */ g("div", {
|
|
881
894
|
className: "flex items-center gap-2",
|
|
882
895
|
children: [
|
|
883
|
-
|
|
896
|
+
Ie && /* @__PURE__ */ g("span", {
|
|
884
897
|
className: "text-xs text-status-success-text",
|
|
885
|
-
children: ["✓ ",
|
|
898
|
+
children: ["✓ ", Ie]
|
|
886
899
|
}),
|
|
887
|
-
/* @__PURE__ */
|
|
888
|
-
ref:
|
|
900
|
+
/* @__PURE__ */ h("input", {
|
|
901
|
+
ref: Pe,
|
|
889
902
|
type: "file",
|
|
890
903
|
accept: ".json,application/json",
|
|
891
904
|
className: "hidden",
|
|
892
|
-
onChange:
|
|
905
|
+
onChange: dt
|
|
893
906
|
}),
|
|
894
|
-
/* @__PURE__ */
|
|
907
|
+
/* @__PURE__ */ g("button", {
|
|
895
908
|
type: "button",
|
|
896
|
-
onClick: () =>
|
|
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__ */
|
|
911
|
+
children: [/* @__PURE__ */ h(p, { size: 12 }), " Upload manifest.json"]
|
|
899
912
|
})
|
|
900
913
|
]
|
|
901
914
|
})]
|
|
902
|
-
}), /* @__PURE__ */
|
|
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:
|
|
918
|
+
value: O.manifestJson,
|
|
906
919
|
onChange: (e) => {
|
|
907
|
-
|
|
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
|
-
|
|
928
|
+
W && /* @__PURE__ */ g("div", {
|
|
916
929
|
className: "space-y-1",
|
|
917
|
-
children: [/* @__PURE__ */
|
|
930
|
+
children: [/* @__PURE__ */ g("label", {
|
|
918
931
|
className: "text-sm font-medium",
|
|
919
932
|
children: [
|
|
920
|
-
|
|
933
|
+
H ? "Workflow Definition (JSON)" : "Manifest (JSON)",
|
|
921
934
|
" ",
|
|
922
|
-
/* @__PURE__ */
|
|
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__ */
|
|
940
|
+
}), /* @__PURE__ */ h("textarea", {
|
|
928
941
|
rows: 10,
|
|
929
|
-
placeholder:
|
|
930
|
-
value:
|
|
931
|
-
onChange: (e) =>
|
|
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__ */
|
|
939
|
-
label:
|
|
940
|
-
value:
|
|
941
|
-
onChange: (e) =>
|
|
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:
|
|
958
|
+
placeholder: _("devportal.releaseNotesPlaceholder", "What changed in this release?"),
|
|
946
959
|
rows: 3
|
|
947
960
|
}),
|
|
948
|
-
/* @__PURE__ */
|
|
949
|
-
label:
|
|
950
|
-
value:
|
|
951
|
-
onChange: (e) =>
|
|
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:
|
|
968
|
+
placeholder: _("devportal.changelogPlaceholder", "Detailed changelog for this version..."),
|
|
956
969
|
rows: 3
|
|
957
970
|
})
|
|
958
971
|
]
|
|
959
972
|
})
|
|
960
973
|
}),
|
|
961
|
-
/* @__PURE__ */
|
|
962
|
-
open:
|
|
974
|
+
/* @__PURE__ */ h(i, {
|
|
975
|
+
open: Ge === "publish",
|
|
963
976
|
onOpenChange: (e) => {
|
|
964
|
-
e ||
|
|
977
|
+
e || B(null);
|
|
965
978
|
},
|
|
966
979
|
onConfirm: async () => {
|
|
967
|
-
if (
|
|
968
|
-
|
|
969
|
-
let e = await Promise.allSettled(
|
|
970
|
-
|
|
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:
|
|
973
|
-
description: `Submit ${
|
|
974
|
-
confirmLabel:
|
|
975
|
-
cancelLabel:
|
|
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__ */
|
|
979
|
-
open:
|
|
991
|
+
/* @__PURE__ */ h(i, {
|
|
992
|
+
open: Ge === "deprecate",
|
|
980
993
|
onOpenChange: (e) => {
|
|
981
|
-
e ||
|
|
994
|
+
e || B(null);
|
|
982
995
|
},
|
|
983
996
|
onConfirm: async () => {
|
|
984
997
|
if ($.length === 0) return;
|
|
985
|
-
|
|
986
|
-
let e = await Promise.allSettled($.map((e) =>
|
|
987
|
-
|
|
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:
|
|
990
|
-
description: `${
|
|
991
|
-
confirmLabel:
|
|
992
|
-
cancelLabel:
|
|
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 {
|
|
1013
|
+
export { Te as ApplicationVersionsPage };
|
|
1001
1014
|
|
|
1002
1015
|
//# sourceMappingURL=ApplicationVersionsPage.js.map
|