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