@burdenoff/microfe-store 2026.917.1 → 2026.918.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/StoreAdminRoutes.js +18 -8
- package/dist/StoreAdminRoutes.js.map +1 -1
- package/dist/pages/AdminDashboardPage.js +203 -194
- package/dist/pages/AdminDashboardPage.js.map +1 -1
- package/dist/pages/AdminNodeSandboxBuildsPage.d.ts +12 -0
- package/dist/pages/AdminNodeSandboxBuildsPage.js +277 -0
- package/dist/pages/AdminNodeSandboxBuildsPage.js.map +1 -0
- package/dist/pages/AdminSubmissionsQueuePage.js +396 -312
- package/dist/pages/AdminSubmissionsQueuePage.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,12 +4,32 @@ import { Markdown as n } from "../node_modules/react-markdown/lib/index.js";
|
|
|
4
4
|
import { InstallAppModal as r } from "../components/InstallAppModal.js";
|
|
5
5
|
import { useCallback as i, useEffect as a, useState as o } from "react";
|
|
6
6
|
import { useNavigate as ee } from "react-router";
|
|
7
|
-
import { ArrowLeft as te, Check as
|
|
8
|
-
import { graphqlFetch as
|
|
9
|
-
import { jsx as
|
|
10
|
-
import { IllustratedEmptyState as
|
|
7
|
+
import { ArrowLeft as te, Check as ne, ChevronDown as re, ChevronUp as ie, Clock as ae, Download as s, ExternalLink as oe, FileJson as c, FlaskConical as se, GitBranch as l, Hash as ce, History as le, PackageCheck as ue, RefreshCw as u, ShieldCheck as de, Tag as fe, User as pe, X as d } from "lucide-react";
|
|
8
|
+
import { graphqlFetch as f } from "@burdenoff/fe-libs/shared/graphql";
|
|
9
|
+
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
10
|
+
import { IllustratedEmptyState as me, PagePurpose as he } from "@burdenoff/fe-libs/ui";
|
|
11
11
|
//#region src/pages/AdminSubmissionsQueuePage.tsx
|
|
12
|
-
|
|
12
|
+
function h(e) {
|
|
13
|
+
let t = e?.sandboxBuildStatus;
|
|
14
|
+
return typeof t == "string" ? t : null;
|
|
15
|
+
}
|
|
16
|
+
function g(e) {
|
|
17
|
+
let t = e?.sandboxBuildError;
|
|
18
|
+
return typeof t == "string" ? t : null;
|
|
19
|
+
}
|
|
20
|
+
var ge = {
|
|
21
|
+
PENDING: "Build pending",
|
|
22
|
+
READY: "Build ready",
|
|
23
|
+
FAILED: "Build failed",
|
|
24
|
+
DISPATCH_FAILED: "Dispatch failed",
|
|
25
|
+
UNSUPPORTED: "Unsupported provider"
|
|
26
|
+
}, _ = {
|
|
27
|
+
PENDING: "bg-[var(--color-status-warning-bg-subtle)] text-[var(--color-status-warning-text)]",
|
|
28
|
+
READY: "bg-[var(--color-status-success-bg-subtle)] text-[var(--color-status-success-text)]",
|
|
29
|
+
FAILED: "bg-[var(--color-status-error-bg-subtle)] text-[var(--color-status-error-text)]",
|
|
30
|
+
DISPATCH_FAILED: "bg-[var(--color-status-error-bg-subtle)] text-[var(--color-status-error-text)]",
|
|
31
|
+
UNSUPPORTED: "bg-[var(--color-surface-muted)] text-[var(--color-text-secondary)]"
|
|
32
|
+
}, _e = "\n query PendingReviewProducts($limit: Int, $offset: Int) {\n pendingReviewProducts(limit: $limit, offset: $offset) {\n totalCount\n products {\n id\n slug\n name\n type\n nature\n status\n pricingModel\n price\n currency\n description\n submittedAt\n submittedBy\n category\n icon\n productId\n zipFileUrl\n manifest\n requiredPermissions\n publisher {\n id\n name\n email\n }\n }\n }\n }\n", ve = "\n query AdminProducts($limit: Int, $offset: Int, $status: ProductStatus) {\n products(filter: { status: $status }, limit: $limit, offset: $offset) {\n id\n slug\n name\n type\n nature\n status\n pricingModel\n price\n currency\n description\n submittedAt\n submittedBy\n category\n icon\n productId\n zipFileUrl\n manifest\n requiredPermissions\n publisher {\n id\n name\n email\n }\n }\n }\n", ye = "\n mutation ApproveProduct($id: ID!, $notes: String) {\n approveProduct(id: $id, notes: $notes) {\n id\n status\n publishedAt\n }\n }\n", be = "\n mutation RejectProduct($id: ID!, $reason: String!) {\n rejectProduct(id: $id, reason: $reason) {\n id\n status\n rejectedReason\n }\n }\n", xe = "\n mutation DelistProduct($id: ID!, $reason: String) {\n delistProduct(id: $id, reason: $reason) {\n id\n status\n }\n }\n", Se = "\n query AdminAppPackageUrl($id: ID!) {\n application(id: $id) {\n id\n versions(first: 1) {\n edges {\n node {\n id\n packageUrl\n metadata\n }\n }\n }\n }\n }\n", Ce = "\n mutation RefreshApplicationVersionPackageUrl($id: ID!) {\n refreshApplicationVersionPackageUrl(id: $id)\n }\n", we = "\n query AdminPendingVersionApps($limit: Int, $offset: Int) {\n applicationsWithPendingVersions(limit: $limit, offset: $offset) {\n totalCount\n edges {\n node {\n id\n name\n slug\n appType\n iconUrl\n shortDescription\n description\n versions(first: 5) {\n edges {\n node {\n id\n version\n status\n releaseNotes\n packageUrl\n packageSize\n isLatest\n reviewNotes\n manifest\n metadata\n createdAt\n }\n }\n }\n }\n }\n }\n }\n", Te = "\n mutation AdminApproveApplicationVersion($id: ID!, $notes: String) {\n approveApplicationVersion(id: $id, notes: $notes) {\n id\n status\n }\n }\n", Ee = "\n mutation AdminRejectApplicationVersion($id: ID!, $reason: String!) {\n rejectApplicationVersion(id: $id, reason: $reason) {\n id\n status\n }\n }\n", De = "\n mutation AdminRetryNodeSandboxBuild($id: ID!) {\n retryNodeSandboxBuild(id: $id)\n }\n", Oe = [
|
|
13
33
|
{
|
|
14
34
|
label: "Pending review",
|
|
15
35
|
value: "PENDING_REVIEW"
|
|
@@ -30,16 +50,16 @@ var le = "\n query PendingReviewProducts($limit: Int, $offset: Int) {\n pend
|
|
|
30
50
|
label: "All",
|
|
31
51
|
value: "ALL"
|
|
32
52
|
}
|
|
33
|
-
],
|
|
53
|
+
], v = {
|
|
34
54
|
NODE: "bg-[var(--color-status-info-bg-subtle)] text-[var(--color-status-info-text)]",
|
|
35
55
|
WORKFLOW: "bg-[var(--color-status-warning-bg-subtle)] text-[var(--color-status-warning-text)]",
|
|
36
56
|
INTEGRATION: "bg-[var(--color-status-success-bg-subtle)] text-[var(--color-status-success-text)]",
|
|
37
57
|
VIBEMODULE: "bg-[var(--color-surface-accent-muted)] text-[var(--color-text-accent)]"
|
|
38
|
-
},
|
|
58
|
+
}, y = {
|
|
39
59
|
PENDING_REVIEW: "bg-[var(--color-status-warning-bg-subtle)] text-[var(--color-status-warning-text)]",
|
|
40
60
|
PUBLISHED: "bg-[var(--color-status-success-bg-subtle)] text-[var(--color-status-success-text)]",
|
|
41
61
|
REJECTED: "bg-[var(--color-status-error-bg-subtle)] text-[var(--color-status-error-text)]"
|
|
42
|
-
},
|
|
62
|
+
}, b = new Set([
|
|
43
63
|
"NODE",
|
|
44
64
|
"WORKFLOW",
|
|
45
65
|
"VIBEMODULE",
|
|
@@ -47,13 +67,13 @@ var le = "\n query PendingReviewProducts($limit: Int, $offset: Int) {\n pend
|
|
|
47
67
|
"DATASINK",
|
|
48
68
|
"CONSOLE"
|
|
49
69
|
]);
|
|
50
|
-
function
|
|
51
|
-
return
|
|
70
|
+
function ke(e) {
|
|
71
|
+
return v[e] ?? "bg-[var(--color-surface-muted)] text-[var(--color-text-secondary)]";
|
|
52
72
|
}
|
|
53
|
-
function
|
|
54
|
-
return
|
|
73
|
+
function Ae(e) {
|
|
74
|
+
return y[e] ?? "bg-[var(--color-surface-muted)] text-[var(--color-text-secondary)]";
|
|
55
75
|
}
|
|
56
|
-
function
|
|
76
|
+
function x(e) {
|
|
57
77
|
return e ? new Date(e).toLocaleString(void 0, {
|
|
58
78
|
month: "short",
|
|
59
79
|
day: "numeric",
|
|
@@ -62,449 +82,494 @@ function Se(e) {
|
|
|
62
82
|
minute: "2-digit"
|
|
63
83
|
}) : "—";
|
|
64
84
|
}
|
|
65
|
-
var
|
|
66
|
-
let
|
|
67
|
-
|
|
85
|
+
var S = () => {
|
|
86
|
+
let v = ee(), { authToken: y, basePath: S } = e(), [C, w] = o([]), [T, je] = o(0), [E, D] = o(!1), [O, k] = o(null), [A, j] = o(null), [M, Me] = o("PENDING_REVIEW"), [Ne, N] = o(null), [P, F] = o(""), [I, L] = o(null), [R, z] = o(null), [B, Pe] = o([]), [V, Fe] = o(0), [H, U] = o(null), [W, Ie] = o(null), [Le, G] = o(null), [K, q] = o(""), [Re, J] = o(null), [Y, ze] = o({}), [X, Be] = o(null), Z = i(async () => {
|
|
87
|
+
D(!0), k(null);
|
|
68
88
|
try {
|
|
69
|
-
let e = await
|
|
89
|
+
let e = await f({
|
|
70
90
|
gateway: "global",
|
|
71
|
-
query:
|
|
91
|
+
query: we,
|
|
72
92
|
variables: {
|
|
73
93
|
limit: 50,
|
|
74
94
|
offset: 0
|
|
75
95
|
},
|
|
76
|
-
authToken:
|
|
96
|
+
authToken: y || void 0
|
|
77
97
|
});
|
|
78
98
|
if (e.errors?.length) throw Error(e.errors[0]?.message ?? "Failed to load version updates");
|
|
79
|
-
|
|
99
|
+
Pe((e.data?.applicationsWithPendingVersions.edges ?? []).map((e) => e.node)), Fe(e.data?.applicationsWithPendingVersions.totalCount ?? 0);
|
|
80
100
|
} catch (e) {
|
|
81
|
-
|
|
101
|
+
k(e instanceof Error ? e.message : "Failed to load version updates");
|
|
82
102
|
} finally {
|
|
83
|
-
|
|
103
|
+
D(!1);
|
|
84
104
|
}
|
|
85
|
-
}, [
|
|
86
|
-
|
|
105
|
+
}, [y]), Ve = async (e, t, n) => {
|
|
106
|
+
U(e), k(null);
|
|
87
107
|
try {
|
|
88
|
-
let t = await
|
|
108
|
+
let t = await f({
|
|
89
109
|
gateway: "global",
|
|
90
|
-
query:
|
|
110
|
+
query: Te,
|
|
91
111
|
variables: {
|
|
92
112
|
id: e,
|
|
93
113
|
notes: n || null
|
|
94
114
|
},
|
|
95
|
-
authToken:
|
|
115
|
+
authToken: y || void 0
|
|
96
116
|
});
|
|
97
117
|
if (t.errors?.length) throw Error(t.errors[0]?.message ?? "Approval failed");
|
|
98
118
|
await Z();
|
|
99
119
|
} catch (e) {
|
|
100
|
-
|
|
120
|
+
k(e instanceof Error ? e.message : "Approval failed");
|
|
101
121
|
} finally {
|
|
102
|
-
|
|
122
|
+
U(null);
|
|
103
123
|
}
|
|
104
|
-
},
|
|
124
|
+
}, He = async (e, t, n) => {
|
|
105
125
|
if (!n.trim()) {
|
|
106
|
-
|
|
126
|
+
k("Rejection reason is required");
|
|
107
127
|
return;
|
|
108
128
|
}
|
|
109
|
-
|
|
129
|
+
U(e), k(null);
|
|
110
130
|
try {
|
|
111
|
-
let t = await
|
|
131
|
+
let t = await f({
|
|
112
132
|
gateway: "global",
|
|
113
|
-
query:
|
|
133
|
+
query: Ee,
|
|
114
134
|
variables: {
|
|
115
135
|
id: e,
|
|
116
136
|
reason: n.trim()
|
|
117
137
|
},
|
|
118
|
-
authToken:
|
|
138
|
+
authToken: y || void 0
|
|
119
139
|
});
|
|
120
140
|
if (t.errors?.length) throw Error(t.errors[0]?.message ?? "Rejection failed");
|
|
121
|
-
|
|
141
|
+
G(null), q(""), J(null), await Z();
|
|
122
142
|
} catch (e) {
|
|
123
|
-
|
|
143
|
+
k(e instanceof Error ? e.message : "Rejection failed");
|
|
124
144
|
} finally {
|
|
125
|
-
|
|
145
|
+
U(null);
|
|
146
|
+
}
|
|
147
|
+
}, Ue = async (e) => {
|
|
148
|
+
Ie(e), k(null);
|
|
149
|
+
try {
|
|
150
|
+
let t = await f({
|
|
151
|
+
gateway: "global",
|
|
152
|
+
query: De,
|
|
153
|
+
variables: { id: e },
|
|
154
|
+
authToken: y || void 0
|
|
155
|
+
});
|
|
156
|
+
if (t.errors?.length) throw Error(t.errors[0]?.message ?? "Retry failed");
|
|
157
|
+
await Promise.all([Z(), Q(M)]);
|
|
158
|
+
} catch (e) {
|
|
159
|
+
k(e instanceof Error ? e.message : "Retry failed");
|
|
160
|
+
} finally {
|
|
161
|
+
Ie(null);
|
|
126
162
|
}
|
|
127
163
|
}, Q = i(async (e) => {
|
|
128
164
|
if (e === "VERSION_UPDATES") {
|
|
129
165
|
await Z();
|
|
130
166
|
return;
|
|
131
167
|
}
|
|
132
|
-
|
|
168
|
+
D(!0), k(null);
|
|
133
169
|
try {
|
|
134
170
|
if (e === "PENDING_REVIEW") {
|
|
135
|
-
let e = await
|
|
171
|
+
let e = await f({
|
|
136
172
|
gateway: "global",
|
|
137
|
-
query:
|
|
173
|
+
query: _e,
|
|
138
174
|
variables: {
|
|
139
175
|
limit: 100,
|
|
140
176
|
offset: 0
|
|
141
177
|
},
|
|
142
|
-
authToken:
|
|
178
|
+
authToken: y || void 0
|
|
143
179
|
});
|
|
144
180
|
if (e.errors?.length) throw Error(e.errors[0]?.message ?? "Failed to load pending products");
|
|
145
|
-
|
|
181
|
+
w(e.data?.pendingReviewProducts.products ?? []), je(e.data?.pendingReviewProducts.totalCount ?? 0);
|
|
146
182
|
} else {
|
|
147
|
-
let t = await
|
|
183
|
+
let t = await f({
|
|
148
184
|
gateway: "global",
|
|
149
|
-
query:
|
|
185
|
+
query: ve,
|
|
150
186
|
variables: {
|
|
151
187
|
limit: 100,
|
|
152
188
|
offset: 0,
|
|
153
189
|
...e !== "ALL" && { status: e }
|
|
154
190
|
},
|
|
155
|
-
authToken:
|
|
191
|
+
authToken: y || void 0
|
|
156
192
|
});
|
|
157
193
|
if (t.errors?.length) throw Error(t.errors[0]?.message ?? "Failed to load products");
|
|
158
194
|
let n = t.data?.products ?? [];
|
|
159
|
-
|
|
195
|
+
w(n), je(n.length);
|
|
160
196
|
}
|
|
161
197
|
} catch (e) {
|
|
162
|
-
|
|
198
|
+
k(e instanceof Error ? e.message : "Failed to load products");
|
|
163
199
|
} finally {
|
|
164
|
-
|
|
200
|
+
D(!1);
|
|
165
201
|
}
|
|
166
|
-
}, [
|
|
202
|
+
}, [y, Z]);
|
|
167
203
|
a(() => {
|
|
168
|
-
Q(
|
|
169
|
-
}, [Q,
|
|
204
|
+
Q(M);
|
|
205
|
+
}, [Q, M]), a(() => {
|
|
170
206
|
Z();
|
|
171
207
|
}, [Z]), a(() => {
|
|
172
|
-
let e =
|
|
208
|
+
let e = C.filter((e) => e.productId && (e.type === "NODE" || b.has(e.type) && !e.zipFileUrl));
|
|
173
209
|
e.length !== 0 && (async () => {
|
|
174
|
-
let t = await Promise.allSettled(e.map((e) =>
|
|
210
|
+
let t = await Promise.allSettled(e.map((e) => f({
|
|
175
211
|
gateway: "global",
|
|
176
|
-
query:
|
|
212
|
+
query: Se,
|
|
177
213
|
variables: { id: e.productId },
|
|
178
|
-
authToken:
|
|
214
|
+
authToken: y || void 0
|
|
179
215
|
})));
|
|
180
|
-
|
|
216
|
+
ze((n) => {
|
|
181
217
|
let r = { ...n };
|
|
182
218
|
return t.forEach((t, n) => {
|
|
183
219
|
if (t.status === "fulfilled") {
|
|
184
220
|
let i = t.value.data?.application?.versions?.edges?.[0]?.node, a = e[n].productId;
|
|
185
221
|
i?.id && i.packageUrl && a && (r[a] = {
|
|
186
222
|
versionId: i.id,
|
|
187
|
-
packageUrl: i.packageUrl
|
|
223
|
+
packageUrl: i.packageUrl,
|
|
224
|
+
metadata: i.metadata ?? null
|
|
188
225
|
});
|
|
189
226
|
}
|
|
190
227
|
}), r;
|
|
191
228
|
});
|
|
192
229
|
})();
|
|
193
|
-
}, [
|
|
194
|
-
let
|
|
195
|
-
|
|
230
|
+
}, [C, y]);
|
|
231
|
+
let We = async (e) => {
|
|
232
|
+
Be(e);
|
|
196
233
|
try {
|
|
197
|
-
let t = (await
|
|
234
|
+
let t = (await f({
|
|
198
235
|
gateway: "global",
|
|
199
|
-
query:
|
|
236
|
+
query: Ce,
|
|
200
237
|
variables: { id: e },
|
|
201
|
-
authToken:
|
|
238
|
+
authToken: y || void 0
|
|
202
239
|
})).data?.refreshApplicationVersionPackageUrl;
|
|
203
|
-
t ? window.open(t, "_blank", "noreferrer") :
|
|
240
|
+
t ? window.open(t, "_blank", "noreferrer") : k("Could not generate a download URL. S3 credentials may not be configured.");
|
|
204
241
|
} catch (e) {
|
|
205
|
-
|
|
242
|
+
k(e instanceof Error ? e.message : "Failed to refresh download URL");
|
|
206
243
|
} finally {
|
|
207
|
-
|
|
244
|
+
Be(null);
|
|
208
245
|
}
|
|
209
|
-
},
|
|
210
|
-
|
|
246
|
+
}, Ge = async (e) => {
|
|
247
|
+
j(e), k(null);
|
|
211
248
|
try {
|
|
212
|
-
let t = await
|
|
249
|
+
let t = await f({
|
|
213
250
|
gateway: "global",
|
|
214
|
-
query:
|
|
251
|
+
query: ye,
|
|
215
252
|
variables: {
|
|
216
253
|
id: e,
|
|
217
254
|
notes: null
|
|
218
255
|
},
|
|
219
|
-
authToken:
|
|
256
|
+
authToken: y || void 0
|
|
220
257
|
});
|
|
221
258
|
if (t.errors?.length) throw Error(t.errors[0]?.message ?? "Approval failed");
|
|
222
|
-
await Q(
|
|
259
|
+
await Q(M);
|
|
223
260
|
} catch (e) {
|
|
224
|
-
|
|
261
|
+
k(e instanceof Error ? e.message : "Approval failed");
|
|
225
262
|
} finally {
|
|
226
|
-
|
|
263
|
+
j(null);
|
|
227
264
|
}
|
|
228
|
-
},
|
|
229
|
-
if (!
|
|
230
|
-
|
|
265
|
+
}, Ke = async (e) => {
|
|
266
|
+
if (!P.trim()) {
|
|
267
|
+
k("Rejection reason is required");
|
|
231
268
|
return;
|
|
232
269
|
}
|
|
233
|
-
|
|
270
|
+
j(e), k(null);
|
|
234
271
|
try {
|
|
235
|
-
let t = await
|
|
272
|
+
let t = await f({
|
|
236
273
|
gateway: "global",
|
|
237
|
-
query:
|
|
274
|
+
query: be,
|
|
238
275
|
variables: {
|
|
239
276
|
id: e,
|
|
240
|
-
reason:
|
|
277
|
+
reason: P.trim()
|
|
241
278
|
},
|
|
242
|
-
authToken:
|
|
279
|
+
authToken: y || void 0
|
|
243
280
|
});
|
|
244
281
|
if (t.errors?.length) throw Error(t.errors[0]?.message ?? "Rejection failed");
|
|
245
|
-
|
|
282
|
+
N(null), F(""), await Q(M);
|
|
246
283
|
} catch (e) {
|
|
247
|
-
|
|
284
|
+
k(e instanceof Error ? e.message : "Rejection failed");
|
|
248
285
|
} finally {
|
|
249
|
-
|
|
286
|
+
j(null);
|
|
250
287
|
}
|
|
251
|
-
},
|
|
252
|
-
|
|
288
|
+
}, qe = async (e) => {
|
|
289
|
+
j(e), k(null);
|
|
253
290
|
try {
|
|
254
|
-
let t = await
|
|
291
|
+
let t = await f({
|
|
255
292
|
gateway: "global",
|
|
256
|
-
query:
|
|
293
|
+
query: xe,
|
|
257
294
|
variables: {
|
|
258
295
|
id: e,
|
|
259
|
-
reason:
|
|
296
|
+
reason: P.trim() || void 0
|
|
260
297
|
},
|
|
261
|
-
authToken:
|
|
298
|
+
authToken: y || void 0
|
|
262
299
|
});
|
|
263
300
|
if (t.errors?.length) throw Error(t.errors[0]?.message ?? "Delist failed");
|
|
264
|
-
|
|
301
|
+
N(null), F(""), await Q(M);
|
|
265
302
|
} catch (e) {
|
|
266
|
-
|
|
303
|
+
k(e instanceof Error ? e.message : "Delist failed");
|
|
267
304
|
} finally {
|
|
268
|
-
|
|
305
|
+
j(null);
|
|
269
306
|
}
|
|
270
|
-
}, $ =
|
|
271
|
-
return /* @__PURE__ */
|
|
307
|
+
}, $ = C.filter((e) => e.status === "PENDING_REVIEW").length;
|
|
308
|
+
return /* @__PURE__ */ m("div", {
|
|
272
309
|
className: "min-h-screen bg-[var(--color-surface-default)]",
|
|
273
310
|
children: [
|
|
274
|
-
/* @__PURE__ */
|
|
311
|
+
/* @__PURE__ */ p("header", {
|
|
275
312
|
className: "sticky top-0 z-10 border-b border-[var(--color-border-seam)] bg-[var(--color-surface-raised)] shadow-[var(--shadow-elevation-1)]",
|
|
276
|
-
children: /* @__PURE__ */
|
|
313
|
+
children: /* @__PURE__ */ m("div", {
|
|
277
314
|
className: "mx-auto max-w-5xl px-6 py-4",
|
|
278
|
-
children: [/* @__PURE__ */
|
|
315
|
+
children: [/* @__PURE__ */ m("div", {
|
|
279
316
|
className: "flex items-center justify-between gap-4",
|
|
280
|
-
children: [/* @__PURE__ */
|
|
317
|
+
children: [/* @__PURE__ */ m("div", {
|
|
281
318
|
className: "flex items-center gap-3 min-w-0",
|
|
282
319
|
children: [
|
|
283
|
-
/* @__PURE__ */
|
|
320
|
+
/* @__PURE__ */ m("button", {
|
|
284
321
|
type: "button",
|
|
285
|
-
onClick: () =>
|
|
322
|
+
onClick: () => v(`${S}/dashboard`),
|
|
286
323
|
className: "inline-flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-sm text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-hover)] hover:text-[var(--color-text-primary)] transition-colors",
|
|
287
|
-
children: [/* @__PURE__ */
|
|
324
|
+
children: [/* @__PURE__ */ p(te, { className: "size-4 shrink-0" }), "Back"]
|
|
288
325
|
}),
|
|
289
|
-
/* @__PURE__ */
|
|
290
|
-
/* @__PURE__ */
|
|
291
|
-
/* @__PURE__ */
|
|
326
|
+
/* @__PURE__ */ p("div", { className: "h-5 w-px bg-[var(--color-border-seam)]" }),
|
|
327
|
+
/* @__PURE__ */ p(ue, { className: "size-5 shrink-0 text-[var(--color-text-primary)]" }),
|
|
328
|
+
/* @__PURE__ */ p("h1", {
|
|
292
329
|
className: "text-lg font-semibold text-[var(--color-text-primary)] truncate",
|
|
293
330
|
children: "Submission Queue"
|
|
294
331
|
}),
|
|
295
|
-
|
|
332
|
+
T > 0 && /* @__PURE__ */ p("span", {
|
|
296
333
|
className: "shrink-0 rounded-full bg-[var(--color-status-warning-bg-subtle)] px-2 py-0.5 text-xs font-semibold text-[var(--color-status-warning-text)]",
|
|
297
|
-
children:
|
|
334
|
+
children: T
|
|
298
335
|
})
|
|
299
336
|
]
|
|
300
|
-
}), /* @__PURE__ */
|
|
337
|
+
}), /* @__PURE__ */ m("button", {
|
|
301
338
|
type: "button",
|
|
302
|
-
onClick: () => void Q(
|
|
339
|
+
onClick: () => void Q(M),
|
|
303
340
|
className: "shrink-0 inline-flex items-center gap-2 rounded-md border border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-1.5 text-sm text-[var(--color-text-primary)] hover:bg-[var(--color-surface-hover)] transition-colors disabled:opacity-50",
|
|
304
|
-
disabled:
|
|
305
|
-
children: [/* @__PURE__ */
|
|
341
|
+
disabled: E,
|
|
342
|
+
children: [/* @__PURE__ */ p(u, { className: `size-4 ${E ? "animate-spin" : ""}` }), "Refresh"]
|
|
306
343
|
})]
|
|
307
|
-
}), /* @__PURE__ */
|
|
344
|
+
}), /* @__PURE__ */ p("div", {
|
|
308
345
|
className: "mt-3 flex gap-1.5 flex-wrap",
|
|
309
|
-
children:
|
|
346
|
+
children: Oe.map((e) => /* @__PURE__ */ m("button", {
|
|
310
347
|
type: "button",
|
|
311
|
-
onClick: () =>
|
|
312
|
-
className: `rounded-full px-3.5 py-1 text-xs font-medium transition-colors ${
|
|
348
|
+
onClick: () => Me(e.value),
|
|
349
|
+
className: `rounded-full px-3.5 py-1 text-xs font-medium transition-colors ${M === e.value ? "bg-[var(--color-action-primary-bg)] text-[var(--color-action-primary-text)]" : "bg-[var(--color-surface-muted)] text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-hover)]"}`,
|
|
313
350
|
children: [
|
|
314
351
|
e.label,
|
|
315
|
-
e.value === "PENDING_REVIEW" && $ > 0 &&
|
|
352
|
+
e.value === "PENDING_REVIEW" && $ > 0 && M !== "PENDING_REVIEW" && /* @__PURE__ */ p("span", {
|
|
316
353
|
className: "ml-1.5 rounded-full bg-[var(--color-status-warning-text)] px-1.5 py-0.5 text-[10px] text-white",
|
|
317
354
|
children: $
|
|
318
355
|
}),
|
|
319
|
-
e.value === "VERSION_UPDATES" &&
|
|
356
|
+
e.value === "VERSION_UPDATES" && V > 0 && M !== "VERSION_UPDATES" && /* @__PURE__ */ p("span", {
|
|
320
357
|
className: "ml-1.5 rounded-full bg-[var(--color-status-info-text)] px-1.5 py-0.5 text-[10px] text-white",
|
|
321
|
-
children:
|
|
358
|
+
children: V
|
|
322
359
|
})
|
|
323
360
|
]
|
|
324
361
|
}, e.value))
|
|
325
362
|
})]
|
|
326
363
|
})
|
|
327
364
|
}),
|
|
328
|
-
/* @__PURE__ */
|
|
365
|
+
/* @__PURE__ */ m("main", {
|
|
329
366
|
className: "mx-auto max-w-5xl space-y-4 p-6",
|
|
330
367
|
children: [
|
|
331
|
-
/* @__PURE__ */
|
|
368
|
+
/* @__PURE__ */ p(he, {
|
|
332
369
|
className: "mb-2",
|
|
333
370
|
children: "Every publisher submission lands here for your review. Inspect the manifest, permissions, and package details — then approve to publish or reject with a clear reason the developer will see."
|
|
334
371
|
}),
|
|
335
|
-
|
|
372
|
+
O && /* @__PURE__ */ p("div", {
|
|
336
373
|
role: "alert",
|
|
337
374
|
className: "rounded-lg border border-[var(--color-border-danger)] bg-[var(--color-surface-danger-muted)] px-4 py-3 text-sm text-[var(--color-text-danger)]",
|
|
338
|
-
children:
|
|
375
|
+
children: O
|
|
339
376
|
}),
|
|
340
|
-
|
|
377
|
+
M === "VERSION_UPDATES" ? E && B.length === 0 ? /* @__PURE__ */ p("div", {
|
|
341
378
|
className: "flex items-center justify-center py-24",
|
|
342
|
-
children: /* @__PURE__ */
|
|
343
|
-
}) :
|
|
379
|
+
children: /* @__PURE__ */ p(u, { className: "size-6 animate-spin text-[var(--color-text-muted)]" })
|
|
380
|
+
}) : B.length === 0 ? /* @__PURE__ */ p(me, {
|
|
344
381
|
illustration: "empty-data",
|
|
345
382
|
title: "No pending version updates",
|
|
346
383
|
description: "All published apps are up to date. When a developer submits a new version, it will appear here for your review."
|
|
347
|
-
}) : /* @__PURE__ */
|
|
384
|
+
}) : /* @__PURE__ */ p("ul", {
|
|
348
385
|
className: "space-y-4",
|
|
349
|
-
children:
|
|
386
|
+
children: B.map((e) => {
|
|
350
387
|
let t = e.versions.edges.map((e) => e.node).filter((e) => e.status === "pending_review");
|
|
351
|
-
return t.length === 0 ? null : /* @__PURE__ */
|
|
388
|
+
return t.length === 0 ? null : /* @__PURE__ */ m("li", {
|
|
352
389
|
className: "overflow-hidden rounded-xl border border-[var(--color-border-seam)] bg-[var(--color-surface-raised)] shadow-[var(--shadow-elevation-1)]",
|
|
353
|
-
children: [/* @__PURE__ */
|
|
390
|
+
children: [/* @__PURE__ */ m("div", {
|
|
354
391
|
className: "flex items-center gap-4 p-5 border-b border-[var(--color-border-seam)]",
|
|
355
392
|
children: [
|
|
356
|
-
e.iconUrl ? /* @__PURE__ */
|
|
393
|
+
e.iconUrl ? /* @__PURE__ */ p("img", {
|
|
357
394
|
src: e.iconUrl,
|
|
358
395
|
alt: "",
|
|
359
396
|
className: "size-12 shrink-0 rounded-xl object-cover shadow-sm"
|
|
360
|
-
}) : /* @__PURE__ */
|
|
397
|
+
}) : /* @__PURE__ */ p("div", {
|
|
361
398
|
className: "flex size-12 shrink-0 items-center justify-center rounded-xl bg-[var(--color-surface-muted)] text-sm font-bold text-[var(--color-text-muted)] uppercase",
|
|
362
399
|
children: e.name.slice(0, 2)
|
|
363
400
|
}),
|
|
364
|
-
/* @__PURE__ */
|
|
401
|
+
/* @__PURE__ */ m("div", {
|
|
365
402
|
className: "flex-1 min-w-0",
|
|
366
|
-
children: [/* @__PURE__ */
|
|
403
|
+
children: [/* @__PURE__ */ m("div", {
|
|
367
404
|
className: "flex items-center gap-2 flex-wrap",
|
|
368
|
-
children: [/* @__PURE__ */
|
|
405
|
+
children: [/* @__PURE__ */ p("h3", {
|
|
369
406
|
className: "text-base font-semibold text-[var(--color-text-primary)]",
|
|
370
407
|
children: e.name
|
|
371
|
-
}), /* @__PURE__ */
|
|
408
|
+
}), /* @__PURE__ */ m("span", {
|
|
372
409
|
className: "inline-flex items-center gap-1 rounded-full bg-[var(--color-status-info-bg-subtle)] px-2 py-0.5 text-[11px] font-semibold text-[var(--color-status-info-text)]",
|
|
373
410
|
children: [
|
|
374
|
-
/* @__PURE__ */
|
|
411
|
+
/* @__PURE__ */ p(l, { className: "size-3" }),
|
|
375
412
|
t.length,
|
|
376
413
|
" version",
|
|
377
414
|
t.length === 1 ? "" : "s",
|
|
378
415
|
" pending"
|
|
379
416
|
]
|
|
380
417
|
})]
|
|
381
|
-
}), (e.shortDescription ?? e.description) && /* @__PURE__ */
|
|
418
|
+
}), (e.shortDescription ?? e.description) && /* @__PURE__ */ p("p", {
|
|
382
419
|
className: "mt-0.5 text-sm text-[var(--color-text-secondary)] line-clamp-1",
|
|
383
420
|
children: e.shortDescription ?? e.description
|
|
384
421
|
})]
|
|
385
422
|
}),
|
|
386
|
-
/* @__PURE__ */
|
|
423
|
+
/* @__PURE__ */ m("a", {
|
|
387
424
|
href: `/devportal/apps/${e.id}`,
|
|
388
425
|
target: "_blank",
|
|
389
426
|
rel: "noreferrer",
|
|
390
427
|
className: "shrink-0 inline-flex items-center gap-1.5 rounded-md border border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-1.5 text-xs font-medium text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-hover)] transition-colors",
|
|
391
|
-
children: [/* @__PURE__ */
|
|
428
|
+
children: [/* @__PURE__ */ p(oe, { className: "size-3.5" }), "Devportal"]
|
|
392
429
|
})
|
|
393
430
|
]
|
|
394
|
-
}), /* @__PURE__ */
|
|
431
|
+
}), /* @__PURE__ */ p("div", {
|
|
395
432
|
className: "divide-y divide-[var(--color-border-seam)]",
|
|
396
|
-
children: t.map((t) => /* @__PURE__ */
|
|
433
|
+
children: t.map((t) => /* @__PURE__ */ m("div", {
|
|
397
434
|
className: "p-5 space-y-3",
|
|
398
435
|
children: [
|
|
399
|
-
/* @__PURE__ */
|
|
436
|
+
/* @__PURE__ */ m("div", {
|
|
400
437
|
className: "flex items-center gap-2 flex-wrap",
|
|
401
438
|
children: [
|
|
402
|
-
/* @__PURE__ */
|
|
403
|
-
/* @__PURE__ */
|
|
439
|
+
/* @__PURE__ */ p(l, { className: "size-4 text-[var(--color-text-secondary)] shrink-0" }),
|
|
440
|
+
/* @__PURE__ */ p("span", {
|
|
404
441
|
className: "font-mono font-semibold text-sm text-[var(--color-text-primary)]",
|
|
405
442
|
children: t.version
|
|
406
443
|
}),
|
|
407
|
-
t.isLatest && /* @__PURE__ */
|
|
444
|
+
t.isLatest && /* @__PURE__ */ p("span", {
|
|
408
445
|
className: "rounded-full bg-[var(--color-surface-muted)] px-2 py-0.5 text-[10px] text-[var(--color-text-secondary)]",
|
|
409
446
|
children: "Latest"
|
|
410
447
|
}),
|
|
411
|
-
/* @__PURE__ */
|
|
448
|
+
/* @__PURE__ */ p("span", {
|
|
412
449
|
className: "rounded-full bg-[var(--color-status-warning-bg-subtle)] px-2 py-0.5 text-[10px] font-medium text-[var(--color-status-warning-text)] uppercase",
|
|
413
450
|
children: "New Version"
|
|
414
451
|
}),
|
|
415
|
-
|
|
452
|
+
e.appType === "NODE" && (() => {
|
|
453
|
+
let e = h(t.metadata);
|
|
454
|
+
return e ? /* @__PURE__ */ p("span", {
|
|
455
|
+
className: `rounded-full px-2 py-0.5 text-[10px] font-medium ${_[e]}`,
|
|
456
|
+
title: g(t.metadata) ?? void 0,
|
|
457
|
+
children: ge[e]
|
|
458
|
+
}) : null;
|
|
459
|
+
})(),
|
|
460
|
+
/* @__PURE__ */ m("span", {
|
|
416
461
|
className: "ml-auto flex items-center gap-1 text-xs text-[var(--color-text-secondary)]",
|
|
417
|
-
children: [/* @__PURE__ */
|
|
462
|
+
children: [/* @__PURE__ */ p(ae, { className: "size-3" }), x(t.createdAt)]
|
|
418
463
|
})
|
|
419
464
|
]
|
|
420
465
|
}),
|
|
421
|
-
t.releaseNotes && /* @__PURE__ */
|
|
466
|
+
t.releaseNotes && /* @__PURE__ */ p("div", {
|
|
422
467
|
className: "text-sm text-[var(--color-text-secondary)]",
|
|
423
|
-
children: /* @__PURE__ */
|
|
468
|
+
children: /* @__PURE__ */ p(n, { children: t.releaseNotes })
|
|
424
469
|
}),
|
|
425
|
-
/* @__PURE__ */
|
|
470
|
+
e.appType === "NODE" && g(t.metadata) && /* @__PURE__ */ p("p", {
|
|
471
|
+
className: "text-xs text-[var(--color-status-error-text)]",
|
|
472
|
+
children: g(t.metadata)
|
|
473
|
+
}),
|
|
474
|
+
/* @__PURE__ */ m("div", {
|
|
426
475
|
className: "flex flex-wrap gap-2",
|
|
427
|
-
children: [
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
476
|
+
children: [
|
|
477
|
+
e.appType === "NODE" && h(t.metadata) !== "READY" && /* @__PURE__ */ m("button", {
|
|
478
|
+
type: "button",
|
|
479
|
+
onClick: () => void Ue(t.id),
|
|
480
|
+
disabled: W === t.id,
|
|
481
|
+
className: "inline-flex items-center gap-1.5 rounded-md border border-[var(--color-border-accent)] bg-[var(--color-surface-default)] px-3 py-1.5 text-xs font-medium text-[var(--color-text-accent)] hover:bg-[var(--color-surface-accent-muted)] transition-colors disabled:opacity-50",
|
|
482
|
+
children: [W === t.id ? /* @__PURE__ */ p(u, { className: "size-3.5 animate-spin" }) : /* @__PURE__ */ p(u, { className: "size-3.5" }), "Retry Deployment"]
|
|
483
|
+
}),
|
|
484
|
+
e.appType === "NODE" && /* @__PURE__ */ m("button", {
|
|
485
|
+
type: "button",
|
|
486
|
+
onClick: () => v(`${S}/sandbox-builds?versionId=${t.id}`),
|
|
487
|
+
className: "inline-flex items-center gap-1.5 rounded-md border border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-1.5 text-xs font-medium text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-hover)] transition-colors",
|
|
488
|
+
children: [/* @__PURE__ */ p(le, { className: "size-3.5" }), "View build history"]
|
|
489
|
+
}),
|
|
490
|
+
t.packageUrl && /* @__PURE__ */ m("button", {
|
|
491
|
+
type: "button",
|
|
492
|
+
onClick: () => void We(t.id),
|
|
493
|
+
disabled: X === t.id,
|
|
494
|
+
className: "inline-flex items-center gap-1.5 rounded-md border border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-1.5 text-xs font-medium text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-hover)] transition-colors disabled:opacity-50",
|
|
495
|
+
children: [
|
|
496
|
+
X === t.id ? /* @__PURE__ */ p(u, { className: "size-3.5 animate-spin" }) : /* @__PURE__ */ p(s, { className: "size-3.5" }),
|
|
497
|
+
"Download Package",
|
|
498
|
+
t.packageSize != null && /* @__PURE__ */ m("span", {
|
|
499
|
+
className: "text-[var(--color-text-muted)]",
|
|
500
|
+
children: [
|
|
501
|
+
"(",
|
|
502
|
+
t.packageSize,
|
|
503
|
+
" bytes)"
|
|
504
|
+
]
|
|
505
|
+
})
|
|
506
|
+
]
|
|
507
|
+
}),
|
|
508
|
+
t.manifest && /* @__PURE__ */ m("button", {
|
|
509
|
+
type: "button",
|
|
510
|
+
onClick: () => L(I === t.id ? null : t.id),
|
|
511
|
+
className: "inline-flex items-center gap-1.5 rounded-md border border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-1.5 text-xs font-medium text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-hover)] transition-colors",
|
|
512
|
+
children: [
|
|
513
|
+
/* @__PURE__ */ p(c, { className: "size-3.5" }),
|
|
514
|
+
I === t.id ? "Hide manifest" : "View manifest",
|
|
515
|
+
I === t.id ? /* @__PURE__ */ p(ie, { className: "size-3" }) : /* @__PURE__ */ p(re, { className: "size-3" })
|
|
516
|
+
]
|
|
517
|
+
})
|
|
518
|
+
]
|
|
454
519
|
}),
|
|
455
|
-
|
|
520
|
+
I === t.id && t.manifest && /* @__PURE__ */ p("pre", {
|
|
456
521
|
className: "overflow-x-auto rounded-lg border border-[var(--color-border-seam)] bg-[var(--color-surface-default)] p-4 text-[11px] leading-relaxed text-[var(--color-text-primary)] max-h-48 overflow-y-auto",
|
|
457
522
|
children: JSON.stringify(t.manifest, null, 2)
|
|
458
523
|
}),
|
|
459
|
-
|
|
524
|
+
Le === t.id && Re === e.id && /* @__PURE__ */ m("div", {
|
|
460
525
|
className: "rounded-lg border border-[var(--color-border-danger)] bg-[var(--color-surface-danger-muted)]/30 p-3 space-y-2",
|
|
461
526
|
children: [
|
|
462
|
-
/* @__PURE__ */
|
|
527
|
+
/* @__PURE__ */ p("p", {
|
|
463
528
|
className: "text-xs font-semibold text-[var(--color-text-danger)]",
|
|
464
529
|
children: "Rejection reason (the developer will see this)"
|
|
465
530
|
}),
|
|
466
|
-
/* @__PURE__ */
|
|
467
|
-
value:
|
|
468
|
-
onChange: (e) =>
|
|
531
|
+
/* @__PURE__ */ p("textarea", {
|
|
532
|
+
value: K,
|
|
533
|
+
onChange: (e) => q(e.target.value),
|
|
469
534
|
rows: 2,
|
|
470
535
|
className: "w-full rounded-md border border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-2 text-sm text-[var(--color-text-primary)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)] resize-none",
|
|
471
536
|
placeholder: "Be specific — what needs to change before this version can be approved…"
|
|
472
537
|
}),
|
|
473
|
-
/* @__PURE__ */
|
|
538
|
+
/* @__PURE__ */ m("div", {
|
|
474
539
|
className: "flex gap-2 justify-end",
|
|
475
|
-
children: [/* @__PURE__ */
|
|
540
|
+
children: [/* @__PURE__ */ p("button", {
|
|
476
541
|
type: "button",
|
|
477
542
|
onClick: () => {
|
|
478
|
-
|
|
543
|
+
G(null), q(""), J(null);
|
|
479
544
|
},
|
|
480
545
|
className: "rounded-md border border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-1.5 text-xs font-medium text-[var(--color-text-primary)] hover:bg-[var(--color-surface-hover)] transition-colors",
|
|
481
546
|
children: "Cancel"
|
|
482
|
-
}), /* @__PURE__ */
|
|
547
|
+
}), /* @__PURE__ */ p("button", {
|
|
483
548
|
type: "button",
|
|
484
|
-
onClick: () => void
|
|
485
|
-
disabled: !
|
|
549
|
+
onClick: () => void He(t.id, e.id, K),
|
|
550
|
+
disabled: !K.trim() || H === t.id,
|
|
486
551
|
className: "rounded-md bg-[var(--color-surface-danger)] px-3 py-1.5 text-xs font-semibold text-[var(--color-text-on-danger)] hover:opacity-90 disabled:opacity-50 transition-opacity",
|
|
487
552
|
children: "Submit rejection"
|
|
488
553
|
})]
|
|
489
554
|
})
|
|
490
555
|
]
|
|
491
556
|
}),
|
|
492
|
-
/* @__PURE__ */
|
|
557
|
+
/* @__PURE__ */ m("div", {
|
|
493
558
|
className: "flex items-center gap-2",
|
|
494
|
-
children: [/* @__PURE__ */
|
|
559
|
+
children: [/* @__PURE__ */ m("button", {
|
|
495
560
|
type: "button",
|
|
496
|
-
onClick: () => void
|
|
497
|
-
disabled:
|
|
561
|
+
onClick: () => void Ve(t.id, e.id, ""),
|
|
562
|
+
disabled: H === t.id,
|
|
498
563
|
className: "inline-flex items-center gap-1.5 rounded-md bg-[var(--color-surface-success)] px-4 py-1.5 text-xs font-semibold text-[var(--color-text-on-success)] hover:opacity-90 disabled:opacity-50 transition-opacity",
|
|
499
|
-
children: [
|
|
500
|
-
}),
|
|
564
|
+
children: [H === t.id ? /* @__PURE__ */ p(u, { className: "size-3.5 animate-spin" }) : /* @__PURE__ */ p(ne, { className: "size-3.5" }), "Approve version"]
|
|
565
|
+
}), Le !== t.id && /* @__PURE__ */ m("button", {
|
|
501
566
|
type: "button",
|
|
502
567
|
onClick: () => {
|
|
503
|
-
|
|
568
|
+
G(t.id), q(""), J(e.id);
|
|
504
569
|
},
|
|
505
|
-
disabled:
|
|
570
|
+
disabled: H === t.id,
|
|
506
571
|
className: "inline-flex items-center gap-1.5 rounded-md border border-[var(--color-border-danger)] bg-[var(--color-surface-danger-muted)] px-4 py-1.5 text-xs font-semibold text-[var(--color-text-danger)] hover:bg-[var(--color-surface-danger)] hover:text-[var(--color-text-on-danger)] disabled:opacity-50 transition-colors",
|
|
507
|
-
children: [/* @__PURE__ */
|
|
572
|
+
children: [/* @__PURE__ */ p(d, { className: "size-3.5" }), "Reject version"]
|
|
508
573
|
})]
|
|
509
574
|
})
|
|
510
575
|
]
|
|
@@ -512,63 +577,71 @@ var w = () => {
|
|
|
512
577
|
})]
|
|
513
578
|
}, e.id);
|
|
514
579
|
})
|
|
515
|
-
}) :
|
|
580
|
+
}) : E && C.length === 0 ? /* @__PURE__ */ p("div", {
|
|
516
581
|
className: "flex items-center justify-center py-24",
|
|
517
|
-
children: /* @__PURE__ */
|
|
518
|
-
}) :
|
|
519
|
-
illustration:
|
|
520
|
-
title:
|
|
521
|
-
description:
|
|
522
|
-
}) : /* @__PURE__ */
|
|
582
|
+
children: /* @__PURE__ */ p(u, { className: "size-6 animate-spin text-[var(--color-text-muted)]" })
|
|
583
|
+
}) : C.length === 0 ? /* @__PURE__ */ p(me, {
|
|
584
|
+
illustration: M === "PENDING_REVIEW" ? "empty-notifications" : "empty-data",
|
|
585
|
+
title: M === "PENDING_REVIEW" ? "Queue is clear" : "No products match this filter",
|
|
586
|
+
description: M === "PENDING_REVIEW" ? "No submissions are awaiting review. New submissions will appear here as publishers send them in." : "Nothing matches the current filter. Try switching to a different status above."
|
|
587
|
+
}) : /* @__PURE__ */ p("ul", {
|
|
523
588
|
className: "space-y-3",
|
|
524
|
-
children:
|
|
589
|
+
children: C.map((e) => /* @__PURE__ */ m("li", {
|
|
525
590
|
className: "overflow-hidden rounded-xl border border-[var(--color-border-seam)] bg-[var(--color-surface-raised)] shadow-[var(--shadow-elevation-1)] transition-[box-shadow,border-color] hover:border-[var(--color-border-strong)] hover:shadow-[var(--shadow-elevation-2)]",
|
|
526
591
|
children: [
|
|
527
|
-
/* @__PURE__ */
|
|
592
|
+
/* @__PURE__ */ m("div", {
|
|
528
593
|
className: "flex items-start gap-4 p-5",
|
|
529
|
-
children: [e.icon ? /* @__PURE__ */
|
|
594
|
+
children: [e.icon ? /* @__PURE__ */ p("img", {
|
|
530
595
|
src: e.icon,
|
|
531
596
|
alt: "",
|
|
532
597
|
className: "size-14 shrink-0 rounded-xl object-cover shadow-sm"
|
|
533
|
-
}) : /* @__PURE__ */
|
|
598
|
+
}) : /* @__PURE__ */ p("div", {
|
|
534
599
|
className: "flex size-14 shrink-0 items-center justify-center rounded-xl bg-[var(--color-surface-muted)] text-sm font-bold text-[var(--color-text-muted)] uppercase",
|
|
535
600
|
children: e.type.slice(0, 2)
|
|
536
|
-
}), /* @__PURE__ */
|
|
601
|
+
}), /* @__PURE__ */ m("div", {
|
|
537
602
|
className: "min-w-0 flex-1",
|
|
538
603
|
children: [
|
|
539
|
-
/* @__PURE__ */
|
|
604
|
+
/* @__PURE__ */ m("div", {
|
|
540
605
|
className: "flex flex-wrap items-center gap-2",
|
|
541
606
|
children: [
|
|
542
|
-
/* @__PURE__ */
|
|
607
|
+
/* @__PURE__ */ p("h3", {
|
|
543
608
|
className: "text-base font-semibold text-[var(--color-text-primary)]",
|
|
544
609
|
children: e.name
|
|
545
610
|
}),
|
|
546
|
-
/* @__PURE__ */
|
|
547
|
-
className: `rounded-full px-2 py-0.5 text-[11px] font-semibold uppercase tracking-wide ${
|
|
611
|
+
/* @__PURE__ */ p("span", {
|
|
612
|
+
className: `rounded-full px-2 py-0.5 text-[11px] font-semibold uppercase tracking-wide ${ke(e.type)}`,
|
|
548
613
|
children: e.type
|
|
549
614
|
}),
|
|
550
|
-
/* @__PURE__ */
|
|
551
|
-
className: `rounded-full px-2 py-0.5 text-[11px] font-medium ${
|
|
615
|
+
/* @__PURE__ */ p("span", {
|
|
616
|
+
className: `rounded-full px-2 py-0.5 text-[11px] font-medium ${Ae(e.status)}`,
|
|
552
617
|
children: e.status.replace("_", " ")
|
|
553
|
-
})
|
|
618
|
+
}),
|
|
619
|
+
e.type === "NODE" && e.productId && (() => {
|
|
620
|
+
let t = h(Y[e.productId]?.metadata);
|
|
621
|
+
return t ? /* @__PURE__ */ p("span", {
|
|
622
|
+
className: `rounded-full px-2 py-0.5 text-[11px] font-medium ${_[t]}`,
|
|
623
|
+
title: g(Y[e.productId]?.metadata) ?? void 0,
|
|
624
|
+
children: ge[t]
|
|
625
|
+
}) : null;
|
|
626
|
+
})()
|
|
554
627
|
]
|
|
555
628
|
}),
|
|
556
|
-
/* @__PURE__ */
|
|
629
|
+
/* @__PURE__ */ m("div", {
|
|
557
630
|
className: "mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-[var(--color-text-secondary)]",
|
|
558
631
|
children: [
|
|
559
|
-
/* @__PURE__ */
|
|
632
|
+
/* @__PURE__ */ m("span", {
|
|
560
633
|
className: "flex items-center gap-1",
|
|
561
|
-
children: [/* @__PURE__ */
|
|
634
|
+
children: [/* @__PURE__ */ p(ce, { className: "size-3" }), /* @__PURE__ */ p("span", {
|
|
562
635
|
className: "font-mono",
|
|
563
636
|
children: e.slug
|
|
564
637
|
})]
|
|
565
638
|
}),
|
|
566
|
-
e.publisher && /* @__PURE__ */
|
|
639
|
+
e.publisher && /* @__PURE__ */ m("span", {
|
|
567
640
|
className: "flex items-center gap-1",
|
|
568
641
|
children: [
|
|
569
|
-
/* @__PURE__ */
|
|
642
|
+
/* @__PURE__ */ p(pe, { className: "size-3" }),
|
|
570
643
|
e.publisher.name,
|
|
571
|
-
e.publisher.email && /* @__PURE__ */
|
|
644
|
+
e.publisher.email && /* @__PURE__ */ m("span", {
|
|
572
645
|
className: "text-[var(--color-text-muted)]",
|
|
573
646
|
children: [
|
|
574
647
|
"(",
|
|
@@ -578,126 +651,137 @@ var w = () => {
|
|
|
578
651
|
})
|
|
579
652
|
]
|
|
580
653
|
}),
|
|
581
|
-
e.submittedAt && /* @__PURE__ */
|
|
654
|
+
e.submittedAt && /* @__PURE__ */ m("span", {
|
|
582
655
|
className: "flex items-center gap-1",
|
|
583
|
-
children: [/* @__PURE__ */
|
|
656
|
+
children: [/* @__PURE__ */ p(ae, { className: "size-3" }), x(e.submittedAt)]
|
|
584
657
|
}),
|
|
585
|
-
/* @__PURE__ */
|
|
658
|
+
/* @__PURE__ */ m("span", {
|
|
586
659
|
className: "flex items-center gap-1",
|
|
587
|
-
children: [/* @__PURE__ */
|
|
660
|
+
children: [/* @__PURE__ */ p(fe, { className: "size-3" }), t(e.price, e.currency, e.pricingModel)]
|
|
588
661
|
})
|
|
589
662
|
]
|
|
590
663
|
}),
|
|
591
|
-
e.description && /* @__PURE__ */
|
|
664
|
+
e.description && /* @__PURE__ */ p("p", {
|
|
592
665
|
className: "mt-2 line-clamp-2 text-sm text-[var(--color-text-secondary)]",
|
|
593
666
|
children: e.description
|
|
667
|
+
}),
|
|
668
|
+
e.type === "NODE" && e.productId && g(Y[e.productId]?.metadata) && /* @__PURE__ */ p("p", {
|
|
669
|
+
className: "mt-2 text-xs text-[var(--color-status-error-text)]",
|
|
670
|
+
children: g(Y[e.productId]?.metadata)
|
|
594
671
|
})
|
|
595
672
|
]
|
|
596
673
|
})]
|
|
597
674
|
}),
|
|
598
|
-
/* @__PURE__ */
|
|
675
|
+
/* @__PURE__ */ m("div", {
|
|
599
676
|
className: "flex flex-wrap items-center justify-between gap-2 border-t border-[var(--color-border-seam)] bg-[var(--color-surface-muted)] px-5 py-3",
|
|
600
|
-
children: [/* @__PURE__ */
|
|
677
|
+
children: [/* @__PURE__ */ m("div", {
|
|
601
678
|
className: "flex flex-wrap items-center gap-2",
|
|
602
679
|
children: [
|
|
603
|
-
e.productId && /* @__PURE__ */
|
|
680
|
+
e.productId && /* @__PURE__ */ m("a", {
|
|
604
681
|
href: `/devportal/apps/${e.productId}`,
|
|
605
682
|
target: "_blank",
|
|
606
683
|
rel: "noreferrer",
|
|
607
684
|
className: "inline-flex items-center gap-1.5 rounded-md border border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-1.5 text-xs font-medium text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-hover)] hover:text-[var(--color-text-primary)] transition-colors",
|
|
608
|
-
children: [/* @__PURE__ */
|
|
685
|
+
children: [/* @__PURE__ */ p(oe, { className: "size-3.5" }), "Devportal"]
|
|
609
686
|
}),
|
|
610
|
-
|
|
611
|
-
let t = e.productId ?
|
|
687
|
+
b.has(e.type) && (() => {
|
|
688
|
+
let t = e.productId ? Y[e.productId]?.versionId ?? B.find((t) => t.id === e.productId)?.versions?.edges?.[0]?.node?.id : void 0;
|
|
612
689
|
if (!t && !e.zipFileUrl) return null;
|
|
613
690
|
let n = X === t;
|
|
614
|
-
return t ? /* @__PURE__ */
|
|
691
|
+
return t ? /* @__PURE__ */ m("button", {
|
|
615
692
|
type: "button",
|
|
616
|
-
onClick: () => void
|
|
693
|
+
onClick: () => void We(t),
|
|
617
694
|
disabled: n,
|
|
618
695
|
className: "inline-flex items-center gap-1.5 rounded-md border border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-1.5 text-xs font-medium text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-hover)] hover:text-[var(--color-text-primary)] transition-colors disabled:opacity-50",
|
|
619
|
-
children: [n ? /* @__PURE__ */
|
|
620
|
-
}) : /* @__PURE__ */
|
|
696
|
+
children: [n ? /* @__PURE__ */ p(u, { className: "size-3.5 animate-spin" }) : /* @__PURE__ */ p(s, { className: "size-3.5" }), "Download Package"]
|
|
697
|
+
}) : /* @__PURE__ */ m("a", {
|
|
621
698
|
href: e.zipFileUrl,
|
|
622
699
|
download: !0,
|
|
623
700
|
target: "_blank",
|
|
624
701
|
rel: "noreferrer",
|
|
625
702
|
className: "inline-flex items-center gap-1.5 rounded-md border border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-1.5 text-xs font-medium text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-hover)] hover:text-[var(--color-text-primary)] transition-colors",
|
|
626
|
-
children: [/* @__PURE__ */
|
|
703
|
+
children: [/* @__PURE__ */ p(s, { className: "size-3.5" }), "Download Package"]
|
|
627
704
|
});
|
|
628
705
|
})(),
|
|
629
|
-
|
|
706
|
+
e.type === "NODE" && e.productId && Y[e.productId]?.versionId && h(Y[e.productId]?.metadata) !== "READY" && /* @__PURE__ */ m("button", {
|
|
707
|
+
type: "button",
|
|
708
|
+
onClick: () => void Ue(Y[e.productId].versionId),
|
|
709
|
+
disabled: W === Y[e.productId]?.versionId,
|
|
710
|
+
className: "inline-flex items-center gap-1.5 rounded-md border border-[var(--color-border-accent)] bg-[var(--color-surface-default)] px-3 py-1.5 text-xs font-medium text-[var(--color-text-accent)] hover:bg-[var(--color-surface-accent-muted)] transition-colors disabled:opacity-50",
|
|
711
|
+
children: [W === Y[e.productId]?.versionId ? /* @__PURE__ */ p(u, { className: "size-3.5 animate-spin" }) : /* @__PURE__ */ p(u, { className: "size-3.5" }), "Retry Deployment"]
|
|
712
|
+
}),
|
|
713
|
+
b.has(e.type) && /* @__PURE__ */ m("button", {
|
|
630
714
|
type: "button",
|
|
631
|
-
onClick: () =>
|
|
715
|
+
onClick: () => z(e),
|
|
632
716
|
className: "inline-flex items-center gap-1.5 rounded-md border border-[var(--color-border-accent)] bg-[var(--color-surface-default)] px-3 py-1.5 text-xs font-medium text-[var(--color-text-accent)] hover:bg-[var(--color-surface-accent-muted)] transition-colors",
|
|
633
|
-
children: [/* @__PURE__ */
|
|
717
|
+
children: [/* @__PURE__ */ p(se, { className: "size-3.5" }), "Test in workspace"]
|
|
634
718
|
}),
|
|
635
|
-
/* @__PURE__ */
|
|
719
|
+
/* @__PURE__ */ m("button", {
|
|
636
720
|
type: "button",
|
|
637
|
-
onClick: () =>
|
|
721
|
+
onClick: () => L(I === e.id ? null : e.id),
|
|
638
722
|
className: "inline-flex items-center gap-1.5 rounded-md border border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-1.5 text-xs font-medium text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-hover)] transition-colors",
|
|
639
723
|
children: [
|
|
640
|
-
/* @__PURE__ */
|
|
641
|
-
|
|
642
|
-
|
|
724
|
+
/* @__PURE__ */ p(c, { className: "size-3.5" }),
|
|
725
|
+
I === e.id ? "Hide details" : "Inspect details",
|
|
726
|
+
I === e.id ? /* @__PURE__ */ p(ie, { className: "size-3" }) : /* @__PURE__ */ p(re, { className: "size-3" })
|
|
643
727
|
]
|
|
644
728
|
})
|
|
645
729
|
]
|
|
646
|
-
}), /* @__PURE__ */
|
|
730
|
+
}), /* @__PURE__ */ m("div", {
|
|
647
731
|
className: "flex items-center gap-2",
|
|
648
732
|
children: [
|
|
649
|
-
e.status !== "PUBLISHED" && /* @__PURE__ */
|
|
733
|
+
e.status !== "PUBLISHED" && /* @__PURE__ */ m("button", {
|
|
650
734
|
type: "button",
|
|
651
|
-
onClick: () => void
|
|
652
|
-
disabled:
|
|
735
|
+
onClick: () => void Ge(e.id),
|
|
736
|
+
disabled: A === e.id,
|
|
653
737
|
className: "inline-flex items-center gap-1.5 rounded-md bg-[var(--color-surface-success)] px-4 py-1.5 text-xs font-semibold text-[var(--color-text-on-success)] hover:opacity-90 disabled:opacity-50 transition-opacity",
|
|
654
|
-
children: [/* @__PURE__ */
|
|
738
|
+
children: [/* @__PURE__ */ p(ne, { className: "size-3.5" }), "Approve"]
|
|
655
739
|
}),
|
|
656
|
-
e.status === "PENDING_REVIEW" && /* @__PURE__ */
|
|
740
|
+
e.status === "PENDING_REVIEW" && /* @__PURE__ */ m("button", {
|
|
657
741
|
type: "button",
|
|
658
742
|
onClick: () => {
|
|
659
|
-
|
|
743
|
+
N(e.id), F("");
|
|
660
744
|
},
|
|
661
|
-
disabled:
|
|
745
|
+
disabled: A === e.id,
|
|
662
746
|
className: "inline-flex items-center gap-1.5 rounded-md border border-[var(--color-border-danger)] bg-[var(--color-surface-danger-muted)] px-4 py-1.5 text-xs font-semibold text-[var(--color-text-danger)] hover:bg-[var(--color-surface-danger)] hover:text-[var(--color-text-on-danger)] disabled:opacity-50 transition-colors",
|
|
663
|
-
children: [/* @__PURE__ */
|
|
747
|
+
children: [/* @__PURE__ */ p(d, { className: "size-3.5" }), "Reject"]
|
|
664
748
|
}),
|
|
665
|
-
e.status === "PUBLISHED" && /* @__PURE__ */
|
|
749
|
+
e.status === "PUBLISHED" && /* @__PURE__ */ m("button", {
|
|
666
750
|
type: "button",
|
|
667
751
|
onClick: () => {
|
|
668
|
-
|
|
752
|
+
N(e.id), F("");
|
|
669
753
|
},
|
|
670
|
-
disabled:
|
|
754
|
+
disabled: A === e.id,
|
|
671
755
|
className: "inline-flex items-center gap-1.5 rounded-md border border-[var(--color-border-warning)] bg-[var(--color-surface-warning-muted)] px-4 py-1.5 text-xs font-semibold text-[var(--color-text-warning)] hover:bg-[var(--color-surface-warning)] hover:text-[var(--color-text-on-warning)] disabled:opacity-50 transition-colors",
|
|
672
|
-
children: [/* @__PURE__ */
|
|
756
|
+
children: [/* @__PURE__ */ p(d, { className: "size-3.5" }), "Delist"]
|
|
673
757
|
})
|
|
674
758
|
]
|
|
675
759
|
})]
|
|
676
760
|
}),
|
|
677
|
-
|
|
761
|
+
I === e.id && /* @__PURE__ */ m("div", {
|
|
678
762
|
className: "border-t border-[var(--color-border-seam)] bg-[var(--color-surface-muted)] p-5 space-y-5",
|
|
679
763
|
children: [
|
|
680
|
-
/* @__PURE__ */
|
|
764
|
+
/* @__PURE__ */ m("div", {
|
|
681
765
|
className: "grid grid-cols-2 gap-x-8 gap-y-3 text-xs sm:grid-cols-3",
|
|
682
766
|
children: [
|
|
683
|
-
/* @__PURE__ */
|
|
767
|
+
/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("dt", {
|
|
684
768
|
className: "font-medium text-[var(--color-text-secondary)]",
|
|
685
769
|
children: "Store product ID"
|
|
686
|
-
}), /* @__PURE__ */
|
|
770
|
+
}), /* @__PURE__ */ p("dd", {
|
|
687
771
|
className: "mt-0.5 font-mono text-[var(--color-text-primary)] break-all",
|
|
688
772
|
children: e.id
|
|
689
773
|
})] }),
|
|
690
|
-
/* @__PURE__ */
|
|
774
|
+
/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("dt", {
|
|
691
775
|
className: "font-medium text-[var(--color-text-secondary)]",
|
|
692
776
|
children: "Slug"
|
|
693
|
-
}), /* @__PURE__ */
|
|
777
|
+
}), /* @__PURE__ */ p("dd", {
|
|
694
778
|
className: "mt-0.5 font-mono text-[var(--color-text-primary)]",
|
|
695
779
|
children: e.slug
|
|
696
780
|
})] }),
|
|
697
|
-
/* @__PURE__ */
|
|
781
|
+
/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("dt", {
|
|
698
782
|
className: "font-medium text-[var(--color-text-secondary)]",
|
|
699
783
|
children: "Type / Nature"
|
|
700
|
-
}), /* @__PURE__ */
|
|
784
|
+
}), /* @__PURE__ */ m("dd", {
|
|
701
785
|
className: "mt-0.5 text-[var(--color-text-primary)]",
|
|
702
786
|
children: [
|
|
703
787
|
e.type,
|
|
@@ -705,22 +789,22 @@ var w = () => {
|
|
|
705
789
|
e.nature
|
|
706
790
|
]
|
|
707
791
|
})] }),
|
|
708
|
-
e.category && /* @__PURE__ */
|
|
792
|
+
e.category && /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("dt", {
|
|
709
793
|
className: "font-medium text-[var(--color-text-secondary)]",
|
|
710
794
|
children: "Category"
|
|
711
|
-
}), /* @__PURE__ */
|
|
795
|
+
}), /* @__PURE__ */ p("dd", {
|
|
712
796
|
className: "mt-0.5 text-[var(--color-text-primary)]",
|
|
713
797
|
children: e.category
|
|
714
798
|
})] }),
|
|
715
|
-
/* @__PURE__ */
|
|
799
|
+
/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("dt", {
|
|
716
800
|
className: "font-medium text-[var(--color-text-secondary)]",
|
|
717
801
|
children: "Pricing"
|
|
718
|
-
}), /* @__PURE__ */
|
|
802
|
+
}), /* @__PURE__ */ m("dd", {
|
|
719
803
|
className: "mt-0.5 text-[var(--color-text-primary)]",
|
|
720
804
|
children: [
|
|
721
805
|
t(e.price, e.currency, e.pricingModel),
|
|
722
806
|
" ",
|
|
723
|
-
/* @__PURE__ */
|
|
807
|
+
/* @__PURE__ */ m("span", {
|
|
724
808
|
className: "text-[var(--color-text-muted)]",
|
|
725
809
|
children: [
|
|
726
810
|
"(",
|
|
@@ -730,81 +814,81 @@ var w = () => {
|
|
|
730
814
|
})
|
|
731
815
|
]
|
|
732
816
|
})] }),
|
|
733
|
-
e.productId && /* @__PURE__ */
|
|
817
|
+
e.productId && /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("dt", {
|
|
734
818
|
className: "font-medium text-[var(--color-text-secondary)]",
|
|
735
819
|
children: "Devportal app ID"
|
|
736
|
-
}), /* @__PURE__ */
|
|
820
|
+
}), /* @__PURE__ */ p("dd", {
|
|
737
821
|
className: "mt-0.5 font-mono text-[var(--color-text-primary)] break-all",
|
|
738
822
|
children: e.productId
|
|
739
823
|
})] }),
|
|
740
|
-
e.submittedBy && /* @__PURE__ */
|
|
824
|
+
e.submittedBy && /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("dt", {
|
|
741
825
|
className: "font-medium text-[var(--color-text-secondary)]",
|
|
742
826
|
children: "Submitted by (actor)"
|
|
743
|
-
}), /* @__PURE__ */
|
|
827
|
+
}), /* @__PURE__ */ p("dd", {
|
|
744
828
|
className: "mt-0.5 font-mono text-[var(--color-text-primary)] break-all",
|
|
745
829
|
children: e.submittedBy
|
|
746
830
|
})] })
|
|
747
831
|
]
|
|
748
832
|
}),
|
|
749
|
-
e.requiredPermissions && e.requiredPermissions.length > 0 && /* @__PURE__ */
|
|
833
|
+
e.requiredPermissions && e.requiredPermissions.length > 0 && /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ m("h4", {
|
|
750
834
|
className: "mb-2 flex items-center gap-1.5 text-xs font-semibold text-[var(--color-text-secondary)] uppercase tracking-wide",
|
|
751
|
-
children: [/* @__PURE__ */
|
|
752
|
-
}), /* @__PURE__ */
|
|
835
|
+
children: [/* @__PURE__ */ p(de, { className: "size-3.5 text-[var(--color-status-success-text)]" }), "Required Permissions"]
|
|
836
|
+
}), /* @__PURE__ */ p("div", {
|
|
753
837
|
className: "flex flex-wrap gap-1.5",
|
|
754
|
-
children: e.requiredPermissions.map((e) => /* @__PURE__ */
|
|
838
|
+
children: e.requiredPermissions.map((e) => /* @__PURE__ */ p("span", {
|
|
755
839
|
className: "inline-flex items-center gap-1 rounded-md bg-[var(--color-surface-default)] border border-[var(--color-border-seam)] px-2 py-1 text-xs font-mono text-[var(--color-text-primary)]",
|
|
756
840
|
children: e
|
|
757
841
|
}, e))
|
|
758
842
|
})] }),
|
|
759
|
-
e.manifest && /* @__PURE__ */
|
|
843
|
+
e.manifest && /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ m("h4", {
|
|
760
844
|
className: "mb-2 flex items-center gap-1.5 text-xs font-semibold text-[var(--color-text-secondary)] uppercase tracking-wide",
|
|
761
|
-
children: [/* @__PURE__ */
|
|
762
|
-
}), /* @__PURE__ */
|
|
845
|
+
children: [/* @__PURE__ */ p(c, { className: "size-3.5" }), "Manifest"]
|
|
846
|
+
}), /* @__PURE__ */ p("pre", {
|
|
763
847
|
className: "overflow-x-auto rounded-lg border border-[var(--color-border-seam)] bg-[var(--color-surface-default)] p-4 text-[11px] leading-relaxed text-[var(--color-text-primary)] max-h-72 overflow-y-auto scrollbar-thin",
|
|
764
848
|
children: JSON.stringify(e.manifest, null, 2)
|
|
765
849
|
})] })
|
|
766
850
|
]
|
|
767
851
|
}),
|
|
768
|
-
|
|
852
|
+
Ne === e.id && /* @__PURE__ */ m("div", {
|
|
769
853
|
className: `border-t border-[var(--color-border-seam)] px-5 py-4 ${e.status === "PUBLISHED" ? "bg-[var(--color-surface-warning-muted)]/30" : "bg-[var(--color-surface-danger-muted)]/30"}`,
|
|
770
854
|
children: [
|
|
771
|
-
e.status === "PUBLISHED" ? /* @__PURE__ */
|
|
855
|
+
e.status === "PUBLISHED" ? /* @__PURE__ */ p("p", {
|
|
772
856
|
className: "mb-2 text-xs font-semibold text-[var(--color-text-warning)]",
|
|
773
857
|
children: "Delist — this removes the product from the store for new users. Existing installs keep working. Reason is optional."
|
|
774
|
-
}) : /* @__PURE__ */
|
|
858
|
+
}) : /* @__PURE__ */ p("p", {
|
|
775
859
|
className: "mb-2 text-xs font-semibold text-[var(--color-text-danger)]",
|
|
776
860
|
children: "Reject — provide a reason (the publisher will see this)"
|
|
777
861
|
}),
|
|
778
|
-
/* @__PURE__ */
|
|
862
|
+
/* @__PURE__ */ p("textarea", {
|
|
779
863
|
id: `reject-reason-${e.id}`,
|
|
780
864
|
"aria-label": e.status === "PUBLISHED" ? "Delist reason" : "Rejection reason",
|
|
781
|
-
value:
|
|
782
|
-
onChange: (e) =>
|
|
865
|
+
value: P,
|
|
866
|
+
onChange: (e) => F(e.target.value),
|
|
783
867
|
rows: 3,
|
|
784
868
|
required: e.status !== "PUBLISHED",
|
|
785
869
|
"aria-required": e.status !== "PUBLISHED",
|
|
786
870
|
className: "w-full rounded-lg border border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-2 text-sm text-[var(--color-text-primary)] focus:border-[var(--color-border-accent)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)] resize-none",
|
|
787
871
|
placeholder: e.status === "PUBLISHED" ? "Optional — reason for delisting…" : "Be specific — e.g. 'Manifest is missing the identity.version field' or 'ZIP file is empty'…"
|
|
788
872
|
}),
|
|
789
|
-
/* @__PURE__ */
|
|
873
|
+
/* @__PURE__ */ m("div", {
|
|
790
874
|
className: "mt-2 flex items-center justify-end gap-2",
|
|
791
|
-
children: [/* @__PURE__ */
|
|
875
|
+
children: [/* @__PURE__ */ p("button", {
|
|
792
876
|
type: "button",
|
|
793
877
|
onClick: () => {
|
|
794
|
-
|
|
878
|
+
N(null), F("");
|
|
795
879
|
},
|
|
796
880
|
className: "rounded-md border border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-1.5 text-xs font-medium text-[var(--color-text-primary)] hover:bg-[var(--color-surface-hover)] transition-colors",
|
|
797
881
|
children: "Cancel"
|
|
798
|
-
}), e.status === "PUBLISHED" ? /* @__PURE__ */
|
|
882
|
+
}), e.status === "PUBLISHED" ? /* @__PURE__ */ p("button", {
|
|
799
883
|
type: "button",
|
|
800
|
-
onClick: () => void
|
|
801
|
-
disabled:
|
|
884
|
+
onClick: () => void qe(e.id),
|
|
885
|
+
disabled: A === e.id,
|
|
802
886
|
className: "rounded-md bg-[var(--color-surface-warning)] px-3 py-1.5 text-xs font-semibold text-[var(--color-text-on-warning)] hover:opacity-90 disabled:opacity-50 transition-opacity",
|
|
803
887
|
children: "Confirm delist"
|
|
804
|
-
}) : /* @__PURE__ */
|
|
888
|
+
}) : /* @__PURE__ */ p("button", {
|
|
805
889
|
type: "button",
|
|
806
|
-
onClick: () => void
|
|
807
|
-
disabled: !
|
|
890
|
+
onClick: () => void Ke(e.id),
|
|
891
|
+
disabled: !P.trim() || A === e.id,
|
|
808
892
|
className: "rounded-md bg-[var(--color-surface-danger)] px-3 py-1.5 text-xs font-semibold text-[var(--color-text-on-danger)] hover:opacity-90 disabled:opacity-50 transition-opacity",
|
|
809
893
|
children: "Submit rejection"
|
|
810
894
|
})]
|
|
@@ -816,20 +900,20 @@ var w = () => {
|
|
|
816
900
|
})
|
|
817
901
|
]
|
|
818
902
|
}),
|
|
819
|
-
|
|
903
|
+
R && /* @__PURE__ */ p(r, {
|
|
820
904
|
isOpen: !0,
|
|
821
|
-
onClose: () =>
|
|
905
|
+
onClose: () => z(null),
|
|
822
906
|
app: {
|
|
823
|
-
id:
|
|
824
|
-
name:
|
|
825
|
-
slug:
|
|
826
|
-
icon:
|
|
827
|
-
type:
|
|
828
|
-
permissions:
|
|
907
|
+
id: R.id,
|
|
908
|
+
name: R.name,
|
|
909
|
+
slug: R.slug,
|
|
910
|
+
icon: R.icon ?? void 0,
|
|
911
|
+
type: R.type,
|
|
912
|
+
permissions: R.requiredPermissions?.length ? R.requiredPermissions : void 0
|
|
829
913
|
},
|
|
830
914
|
purchaseState: "free",
|
|
831
915
|
onInstallSuccess: () => {
|
|
832
|
-
|
|
916
|
+
z(null);
|
|
833
917
|
},
|
|
834
918
|
onInstallError: () => {}
|
|
835
919
|
})
|
|
@@ -837,6 +921,6 @@ var w = () => {
|
|
|
837
921
|
});
|
|
838
922
|
};
|
|
839
923
|
//#endregion
|
|
840
|
-
export {
|
|
924
|
+
export { S as AdminSubmissionsQueuePage };
|
|
841
925
|
|
|
842
926
|
//# sourceMappingURL=AdminSubmissionsQueuePage.js.map
|