@burdenoff/microfe-devportal 2026.624.27 → 2026.624.29
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.
|
@@ -18,11 +18,11 @@ import { useDevportalPermission as se } from "../hooks/usePermission.js";
|
|
|
18
18
|
import { usePackageUpload as k } from "../hooks/usePackageUpload.js";
|
|
19
19
|
import { useCallback as A, useEffect as ce, useMemo as j, useRef as M, useState as N } from "react";
|
|
20
20
|
import { useI18n as P } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
21
|
-
import { AlertCircle as le, AppWindow as F, BarChart3 as I, CheckCircle as L, CheckCircle2 as ue, Clock as de, Download as fe, Edit as pe, ExternalLink as R, FlaskConical as me, Info as
|
|
22
|
-
import { useParams as
|
|
23
|
-
import { Fragment as
|
|
24
|
-
import { gql as
|
|
25
|
-
import { useMutation as
|
|
21
|
+
import { AlertCircle as le, AppWindow as F, BarChart3 as I, CheckCircle as L, CheckCircle2 as ue, Clock as de, Download as fe, Edit as pe, ExternalLink as R, FlaskConical as me, Info as he, Key as ge, Loader2 as z, MoreHorizontal as _e, Plus as B, Power as ve, RefreshCw as ye, SendHorizontal as be, Shield as V, Store as xe, Upload as H, Users as U, Webhook as Se, X as Ce, XCircle as we } from "lucide-react";
|
|
22
|
+
import { useParams as Te, useSearchParams as Ee } from "react-router-dom";
|
|
23
|
+
import { Fragment as W, jsx as G, jsxs as K } from "react/jsx-runtime";
|
|
24
|
+
import { gql as q } from "@apollo/client";
|
|
25
|
+
import { useMutation as J, useQuery as Y } from "@apollo/client/react";
|
|
26
26
|
//#region src/devportal/pages/ApplicationDetailPage.tsx
|
|
27
27
|
function De(e) {
|
|
28
28
|
return e ? {
|
|
@@ -75,6 +75,7 @@ function De(e) {
|
|
|
75
75
|
isRequired: e.isRequired,
|
|
76
76
|
createdAt: e.createdAt
|
|
77
77
|
})),
|
|
78
|
+
versions: (e.versions?.edges)?.map((e) => e.node),
|
|
78
79
|
createdAt: e.createdAt,
|
|
79
80
|
updatedAt: e.updatedAt
|
|
80
81
|
} : null;
|
|
@@ -103,7 +104,7 @@ function Oe(e) {
|
|
|
103
104
|
updatedAt: e.updatedAt
|
|
104
105
|
};
|
|
105
106
|
}
|
|
106
|
-
function
|
|
107
|
+
function ke(e) {
|
|
107
108
|
return {
|
|
108
109
|
id: e.id,
|
|
109
110
|
applicationId: e.applicationId,
|
|
@@ -119,7 +120,7 @@ function X(e) {
|
|
|
119
120
|
createdAt: e.createdAt
|
|
120
121
|
};
|
|
121
122
|
}
|
|
122
|
-
function
|
|
123
|
+
function Ae(e) {
|
|
123
124
|
return {
|
|
124
125
|
id: e.id,
|
|
125
126
|
appId: e.appId,
|
|
@@ -141,7 +142,7 @@ function ke(e) {
|
|
|
141
142
|
revokedBy: e.revokedBy || void 0
|
|
142
143
|
};
|
|
143
144
|
}
|
|
144
|
-
var
|
|
145
|
+
var je = [
|
|
145
146
|
{
|
|
146
147
|
id: "overview",
|
|
147
148
|
label: "Overview",
|
|
@@ -150,17 +151,17 @@ var Ae = [
|
|
|
150
151
|
{
|
|
151
152
|
id: "permissions",
|
|
152
153
|
label: "Permissions",
|
|
153
|
-
icon:
|
|
154
|
+
icon: V
|
|
154
155
|
},
|
|
155
156
|
{
|
|
156
157
|
id: "webhooks",
|
|
157
158
|
label: "Webhooks",
|
|
158
|
-
icon:
|
|
159
|
+
icon: Se
|
|
159
160
|
},
|
|
160
161
|
{
|
|
161
162
|
id: "delegations",
|
|
162
163
|
label: "Delegations",
|
|
163
|
-
icon:
|
|
164
|
+
icon: U
|
|
164
165
|
},
|
|
165
166
|
{
|
|
166
167
|
id: "analytics",
|
|
@@ -175,27 +176,27 @@ var Ae = [
|
|
|
175
176
|
{
|
|
176
177
|
id: "store-listing",
|
|
177
178
|
label: "Marketplace Listing",
|
|
178
|
-
icon:
|
|
179
|
+
icon: xe
|
|
179
180
|
}
|
|
180
|
-
],
|
|
181
|
+
], Me = {
|
|
181
182
|
ACTIVE: "bg-status-success-bg-subtle text-status-success-text",
|
|
182
183
|
REVOKED: "bg-status-error-bg-subtle text-status-error-text",
|
|
183
184
|
EXPIRED: "bg-bg-sunken text-text-secondary"
|
|
184
|
-
},
|
|
185
|
+
}, X = ({ message: e = "Loading..." }) => /* @__PURE__ */ K("div", {
|
|
185
186
|
className: "flex items-center justify-center gap-3 py-12",
|
|
186
|
-
children: [/* @__PURE__ */
|
|
187
|
+
children: [/* @__PURE__ */ G(z, {
|
|
187
188
|
size: 20,
|
|
188
189
|
className: "animate-spin text-muted-foreground"
|
|
189
|
-
}), /* @__PURE__ */
|
|
190
|
+
}), /* @__PURE__ */ G("p", {
|
|
190
191
|
className: "text-sm text-muted-foreground",
|
|
191
192
|
children: e
|
|
192
193
|
})]
|
|
193
|
-
}),
|
|
194
|
+
}), Z = ({ message: e }) => /* @__PURE__ */ K("div", {
|
|
194
195
|
className: "flex flex-col items-center justify-center gap-2 py-12 text-center",
|
|
195
|
-
children: [/* @__PURE__ */
|
|
196
|
+
children: [/* @__PURE__ */ G(le, {
|
|
196
197
|
size: 32,
|
|
197
198
|
className: "text-destructive"
|
|
198
|
-
}), /* @__PURE__ */
|
|
199
|
+
}), /* @__PURE__ */ G("p", {
|
|
199
200
|
className: "text-sm text-muted-foreground",
|
|
200
201
|
children: e
|
|
201
202
|
})]
|
|
@@ -203,7 +204,7 @@ var Ae = [
|
|
|
203
204
|
let { navigate: i, basePath: o, workspaceId: c } = e(), { t: l } = P(), u = (e, t) => {
|
|
204
205
|
let n = l(e);
|
|
205
206
|
return n === e ? t : n;
|
|
206
|
-
}, { allowed: d } = se(oe.APP_UPDATE), { allowed: m } = se(oe.APP_DELETE), { appId: g } =
|
|
207
|
+
}, { allowed: d } = se(oe.APP_UPDATE), { allowed: m } = se(oe.APP_DELETE), { appId: g } = Te(), [v, b] = Ee(), C = [
|
|
207
208
|
"overview",
|
|
208
209
|
"permissions",
|
|
209
210
|
"webhooks",
|
|
@@ -217,219 +218,240 @@ var Ae = [
|
|
|
217
218
|
}, [T]);
|
|
218
219
|
let re = (e) => {
|
|
219
220
|
D(e), b((t) => (t.set("tab", e), t), { replace: !0 });
|
|
220
|
-
}, [ie, k] = N(!1), [j, M] = N(!1), [I, L] = N(null), [ue, fe] = N(!1), { data: R, loading:
|
|
221
|
+
}, [ie, k] = N(!1), [j, M] = N(!1), [I, L] = N(null), [ue, fe] = N(!1), { data: R, loading: he, error: ge } = s({
|
|
221
222
|
variables: { id: g },
|
|
222
223
|
skip: !g
|
|
223
|
-
}), [
|
|
224
|
+
}), [_e, { loading: B }] = h(), [V, { loading: xe }] = a(), [H, { loading: U }] = p(), [Se, { loading: Ce }] = _(), { data: W, refetch: q } = f({
|
|
224
225
|
variables: {
|
|
225
226
|
applicationId: g,
|
|
226
227
|
workspaceId: c ?? void 0
|
|
227
228
|
},
|
|
228
229
|
skip: !c || !g,
|
|
229
230
|
fetchPolicy: "cache-and-network"
|
|
230
|
-
}),
|
|
231
|
+
}), J = W?.appInstallations?.edges?.[0]?.node ?? null, Y = A((e) => {
|
|
231
232
|
i?.(`${o}${e}`);
|
|
232
233
|
}, [i, o]), Oe = A(async () => {
|
|
233
234
|
let e = R?.application?.appId;
|
|
234
235
|
if (e) try {
|
|
235
|
-
let t = (await
|
|
236
|
+
let t = (await _e({ variables: { id: e } })).data?.rotateAppSecret.clientSecret;
|
|
236
237
|
t && L(t), k(!1);
|
|
237
238
|
} catch {}
|
|
238
|
-
}, [R?.application?.appId,
|
|
239
|
+
}, [R?.application?.appId, _e]), ke = A(async () => {
|
|
239
240
|
if (g) try {
|
|
240
|
-
await
|
|
241
|
+
await V({ variables: { id: g } }), M(!1), Y("/apps");
|
|
241
242
|
} catch {}
|
|
242
243
|
}, [
|
|
243
244
|
g,
|
|
244
|
-
|
|
245
|
+
V,
|
|
245
246
|
Y
|
|
246
|
-
]),
|
|
247
|
+
]), Ae = A(async () => {
|
|
247
248
|
if (!(!g || !c)) try {
|
|
248
|
-
await
|
|
249
|
+
await H({ variables: { input: {
|
|
249
250
|
applicationId: g,
|
|
250
251
|
scope: "WORKSPACE",
|
|
251
252
|
workspaceId: c,
|
|
252
253
|
autoUpdate: !1
|
|
253
|
-
} } }),
|
|
254
|
+
} } }), q(), w("success");
|
|
254
255
|
} catch (e) {
|
|
255
256
|
console.error("[DevPortal] Test in Workspace failed:", e), w("error");
|
|
256
257
|
}
|
|
257
258
|
}, [
|
|
258
259
|
g,
|
|
259
260
|
c,
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
]),
|
|
261
|
+
H,
|
|
262
|
+
q
|
|
263
|
+
]), Me = A(async () => {
|
|
264
|
+
if (!(!g || !c)) try {
|
|
265
|
+
J || (await H({ variables: { input: {
|
|
266
|
+
applicationId: g,
|
|
267
|
+
scope: "WORKSPACE",
|
|
268
|
+
workspaceId: c,
|
|
269
|
+
autoUpdate: !1
|
|
270
|
+
} } }), await q()), i?.("/workflows/new");
|
|
271
|
+
} catch (e) {
|
|
272
|
+
console.error("[DevPortal] Test in Workflow Builder failed:", e), w("error");
|
|
273
|
+
}
|
|
274
|
+
}, [
|
|
275
|
+
g,
|
|
276
|
+
c,
|
|
277
|
+
H,
|
|
278
|
+
J,
|
|
279
|
+
q,
|
|
280
|
+
i
|
|
281
|
+
]), X = A(async (e) => {
|
|
263
282
|
try {
|
|
264
|
-
await
|
|
283
|
+
await Se({ variables: { id: e } }), q(), w("success");
|
|
265
284
|
} catch {
|
|
266
285
|
w("error");
|
|
267
286
|
}
|
|
268
|
-
}, [
|
|
269
|
-
if (
|
|
270
|
-
if (
|
|
287
|
+
}, [Se, q]);
|
|
288
|
+
if (he && !R) return /* @__PURE__ */ G(n, { message: u("devportal.loadingApplication", "Loading application...") });
|
|
289
|
+
if (ge) return /* @__PURE__ */ G(y, {
|
|
271
290
|
title: u("devportal.error", "Error"),
|
|
272
291
|
backLink: `${o}/apps`,
|
|
273
292
|
backLabel: u("devportal.backToApplications", "Back to Applications"),
|
|
274
|
-
children: /* @__PURE__ */
|
|
293
|
+
children: /* @__PURE__ */ K("div", {
|
|
275
294
|
className: "flex flex-col items-center justify-center py-12 text-center",
|
|
276
295
|
children: [
|
|
277
|
-
/* @__PURE__ */
|
|
296
|
+
/* @__PURE__ */ G(le, {
|
|
278
297
|
size: 48,
|
|
279
298
|
className: "text-destructive mb-4"
|
|
280
299
|
}),
|
|
281
|
-
/* @__PURE__ */
|
|
300
|
+
/* @__PURE__ */ G("h3", {
|
|
282
301
|
className: "text-lg font-semibold mb-2",
|
|
283
302
|
children: u("devportal.failedToLoadApplication", "Failed to load application")
|
|
284
303
|
}),
|
|
285
|
-
/* @__PURE__ */
|
|
304
|
+
/* @__PURE__ */ G("p", {
|
|
286
305
|
className: "text-sm text-muted-foreground",
|
|
287
|
-
children:
|
|
306
|
+
children: ge.message
|
|
288
307
|
})
|
|
289
308
|
]
|
|
290
309
|
})
|
|
291
310
|
});
|
|
292
311
|
let Z = De(R?.application);
|
|
293
|
-
return Z ? /* @__PURE__ */
|
|
312
|
+
return Z ? /* @__PURE__ */ K(y, {
|
|
294
313
|
title: Z.name,
|
|
295
314
|
description: Z.shortDescription,
|
|
296
315
|
backLink: `${o}/apps`,
|
|
297
316
|
backLabel: u("devportal.backToApplications", "Back to Applications"),
|
|
298
|
-
actions: /* @__PURE__ */
|
|
317
|
+
actions: /* @__PURE__ */ K("div", {
|
|
299
318
|
className: "flex items-center gap-2",
|
|
300
319
|
children: [
|
|
301
|
-
Z.appType !== "NODE" && Z.appType !== "WORKFLOW" && /* @__PURE__ */
|
|
320
|
+
Z.appType !== "NODE" && Z.appType !== "WORKFLOW" && /* @__PURE__ */ K("button", {
|
|
302
321
|
onClick: () => k(!0),
|
|
303
322
|
disabled: !Z.appId,
|
|
304
323
|
title: Z.appId ? u("devportal.rotateSecretHint", "Generate a new client secret") : u("devportal.rotateSecretNoClient", "Create an OAuth client first to enable secret rotation"),
|
|
305
324
|
className: "inline-flex items-center gap-2 rounded-md border px-4 py-2 text-sm font-medium hover:bg-muted transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
|
|
306
|
-
children: [/* @__PURE__ */
|
|
325
|
+
children: [/* @__PURE__ */ G(ye, { size: 16 }), u("devportal.rotateSecret", "Rotate Secret")]
|
|
307
326
|
}),
|
|
308
|
-
/* @__PURE__ */
|
|
327
|
+
/* @__PURE__ */ K("button", {
|
|
309
328
|
onClick: () => Y(`/apps/${Z.id}/versions`),
|
|
310
329
|
className: "inline-flex items-center gap-2 rounded-md border px-4 py-2 text-sm font-medium hover:bg-muted transition-colors",
|
|
311
|
-
children: [/* @__PURE__ */
|
|
330
|
+
children: [/* @__PURE__ */ G(de, { size: 16 }), u("devportal.versions", "Versions")]
|
|
312
331
|
}),
|
|
313
|
-
Z.status !== "PUBLISHED" && /* @__PURE__ */
|
|
332
|
+
Z.status !== "PUBLISHED" && /* @__PURE__ */ K("button", {
|
|
314
333
|
onClick: () => Y(`/apps/${Z.id}/publish`),
|
|
315
334
|
className: "inline-flex items-center gap-2 rounded-md border border-primary/40 px-4 py-2 text-sm font-medium text-primary hover:bg-primary/10 transition-colors",
|
|
316
|
-
children: [/* @__PURE__ */
|
|
335
|
+
children: [/* @__PURE__ */ G(be, { size: 16 }), u("devportal.submitForReview", "Submit for Review")]
|
|
317
336
|
}),
|
|
318
|
-
Z.appType !== "NODE" && Z.appType !== "WORKFLOW" && (
|
|
319
|
-
onClick: () => void
|
|
320
|
-
disabled:
|
|
337
|
+
Z.appType !== "NODE" && Z.appType !== "WORKFLOW" && (J ? /* @__PURE__ */ K("button", {
|
|
338
|
+
onClick: () => void X(J.id),
|
|
339
|
+
disabled: Ce || !c,
|
|
321
340
|
title: u("devportal.uninstallFromWorkspace", "Uninstall this app from your current workspace"),
|
|
322
341
|
className: "inline-flex items-center gap-2 rounded-md border border-destructive/50 px-4 py-2 text-sm font-medium text-destructive hover:bg-destructive/10 transition-colors disabled:opacity-50",
|
|
323
|
-
children: [
|
|
342
|
+
children: [Ce ? /* @__PURE__ */ G(z, {
|
|
324
343
|
size: 16,
|
|
325
344
|
className: "animate-spin"
|
|
326
|
-
}) : /* @__PURE__ */
|
|
327
|
-
}) : /* @__PURE__ */
|
|
328
|
-
onClick: () => void
|
|
329
|
-
disabled:
|
|
345
|
+
}) : /* @__PURE__ */ G(we, { size: 16 }), u("devportal.uninstallFromWorkspace", "Uninstall from Workspace")]
|
|
346
|
+
}) : /* @__PURE__ */ K("button", {
|
|
347
|
+
onClick: () => void Ae(),
|
|
348
|
+
disabled: U || !c,
|
|
330
349
|
"aria-disabled": !c,
|
|
331
350
|
title: c ? u("devportal.testInWorkspaceHint", "Install this app into your current workspace to test it") : u("devportal.noWorkspaceContext", "No workspace context available"),
|
|
332
351
|
className: "inline-flex items-center gap-2 rounded-md border px-4 py-2 text-sm font-medium hover:bg-muted transition-colors disabled:opacity-50",
|
|
333
|
-
children: [
|
|
352
|
+
children: [U ? /* @__PURE__ */ G(z, {
|
|
334
353
|
size: 16,
|
|
335
354
|
className: "animate-spin"
|
|
336
|
-
}) : /* @__PURE__ */
|
|
355
|
+
}) : /* @__PURE__ */ G(me, { size: 16 }), u("devportal.testInWorkspace", "Test in Workspace")]
|
|
337
356
|
})),
|
|
338
|
-
Z.appType === "NODE" && /* @__PURE__ */
|
|
339
|
-
onClick: () =>
|
|
340
|
-
disabled: !c,
|
|
357
|
+
Z.appType === "NODE" && /* @__PURE__ */ K("button", {
|
|
358
|
+
onClick: () => void Me(),
|
|
359
|
+
disabled: U || !c,
|
|
341
360
|
"aria-disabled": !c,
|
|
342
|
-
title: c ? u("devportal.testInWorkflowBuilderHint", "Open
|
|
361
|
+
title: c ? J ? u("devportal.testInWorkflowBuilderHint", "Open the workflow builder (already installed in workspace)") : u("devportal.testInWorkflowBuilderInstallHint", "Install this node in your workspace and open the workflow builder") : u("devportal.noWorkspaceContext", "No workspace context available"),
|
|
343
362
|
className: "inline-flex items-center gap-2 rounded-md border px-4 py-2 text-sm font-medium hover:bg-muted transition-colors disabled:opacity-50",
|
|
344
|
-
children: [/* @__PURE__ */
|
|
363
|
+
children: [U ? /* @__PURE__ */ G(z, {
|
|
364
|
+
size: 16,
|
|
365
|
+
className: "animate-spin"
|
|
366
|
+
}) : /* @__PURE__ */ G(me, { size: 16 }), u("devportal.testInWorkflowBuilder", "Test in Workflow Builder")]
|
|
345
367
|
}),
|
|
346
|
-
/* @__PURE__ */
|
|
368
|
+
/* @__PURE__ */ K("button", {
|
|
347
369
|
onClick: () => Y(`/apps/${Z.id}/edit`),
|
|
348
370
|
disabled: !d,
|
|
349
371
|
"aria-disabled": !d,
|
|
350
372
|
className: "inline-flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors disabled:opacity-50",
|
|
351
|
-
children: [/* @__PURE__ */
|
|
373
|
+
children: [/* @__PURE__ */ G(pe, { size: 16 }), u("devportal.editApp", "Edit App")]
|
|
352
374
|
}),
|
|
353
|
-
/* @__PURE__ */
|
|
375
|
+
/* @__PURE__ */ K("button", {
|
|
354
376
|
onClick: () => M(!0),
|
|
355
377
|
disabled: !m,
|
|
356
378
|
"aria-disabled": !m,
|
|
357
379
|
className: "inline-flex items-center gap-2 rounded-md border border-border-subtle px-4 py-2 text-sm font-medium text-status-error-text hover:bg-status-error-bg-subtle transition-colors disabled:opacity-50",
|
|
358
|
-
children: [/* @__PURE__ */
|
|
380
|
+
children: [/* @__PURE__ */ G(ve, { size: 16 }), u("devportal.deactivate", "Deactivate")]
|
|
359
381
|
})
|
|
360
382
|
]
|
|
361
383
|
}),
|
|
362
384
|
children: [
|
|
363
|
-
I && /* @__PURE__ */
|
|
385
|
+
I && /* @__PURE__ */ G(ne, {
|
|
364
386
|
title: u("devportal.newAppSecretGenerated", "New App Secret Generated"),
|
|
365
387
|
secret: I,
|
|
366
388
|
description: u("devportal.appSecretRotatedDescription", "Your app secret has been rotated. The old secret is no longer valid."),
|
|
367
389
|
onDismiss: () => L(null)
|
|
368
390
|
}),
|
|
369
|
-
/* @__PURE__ */
|
|
391
|
+
/* @__PURE__ */ K("div", {
|
|
370
392
|
className: "flex flex-wrap items-center gap-2",
|
|
371
393
|
children: [
|
|
372
|
-
/* @__PURE__ */
|
|
394
|
+
/* @__PURE__ */ G(S, {
|
|
373
395
|
status: Z.status,
|
|
374
396
|
type: "app"
|
|
375
397
|
}),
|
|
376
|
-
/* @__PURE__ */
|
|
398
|
+
/* @__PURE__ */ G(S, {
|
|
377
399
|
status: Z.visibility,
|
|
378
400
|
type: "app"
|
|
379
401
|
}),
|
|
380
|
-
Z.isVerified && /* @__PURE__ */
|
|
381
|
-
Z.isFeatured && /* @__PURE__ */
|
|
382
|
-
/* @__PURE__ */
|
|
402
|
+
Z.isVerified && /* @__PURE__ */ G(te, { verified: !0 }),
|
|
403
|
+
Z.isFeatured && /* @__PURE__ */ G(x, {}),
|
|
404
|
+
/* @__PURE__ */ G("span", {
|
|
383
405
|
className: "text-sm text-muted-foreground",
|
|
384
406
|
children: ee[Z.appType] || Z.appType
|
|
385
407
|
})
|
|
386
408
|
]
|
|
387
409
|
}),
|
|
388
|
-
/* @__PURE__ */
|
|
410
|
+
/* @__PURE__ */ G("div", {
|
|
389
411
|
className: "border-b",
|
|
390
|
-
children: /* @__PURE__ */
|
|
412
|
+
children: /* @__PURE__ */ G("nav", {
|
|
391
413
|
className: "-mb-px flex gap-4 overflow-x-auto",
|
|
392
414
|
role: "tablist",
|
|
393
415
|
"aria-label": u("devportal.applicationSections", "Application sections"),
|
|
394
|
-
children:
|
|
416
|
+
children: je.filter((e) => !((Z.appType === "NODE" || Z.appType === "WORKFLOW") && (e.id === "permissions" || e.id === "webhooks" || e.id === "delegations" || e.id === "playground"))).map((e) => {
|
|
395
417
|
let n = e.icon;
|
|
396
|
-
return /* @__PURE__ */
|
|
418
|
+
return /* @__PURE__ */ K("button", {
|
|
397
419
|
id: `application-tab-${e.id}`,
|
|
398
420
|
role: "tab",
|
|
399
421
|
"aria-selected": E === e.id,
|
|
400
422
|
"aria-controls": `application-panel-${e.id}`,
|
|
401
423
|
onClick: () => re(e.id),
|
|
402
424
|
className: t("flex items-center gap-2 border-b-2 px-1 py-3 text-sm font-medium transition-colors", E === e.id ? "border-primary text-primary" : "border-transparent text-muted-foreground hover:text-foreground hover:border-muted-foreground"),
|
|
403
|
-
children: [/* @__PURE__ */
|
|
425
|
+
children: [/* @__PURE__ */ G(n, { size: 16 }), e.label]
|
|
404
426
|
}, e.id);
|
|
405
427
|
})
|
|
406
428
|
})
|
|
407
429
|
}),
|
|
408
|
-
/* @__PURE__ */
|
|
430
|
+
/* @__PURE__ */ K("div", {
|
|
409
431
|
className: "mt-6",
|
|
410
432
|
id: `application-panel-${E}`,
|
|
411
433
|
role: "tabpanel",
|
|
412
434
|
"aria-labelledby": `application-tab-${E}`,
|
|
413
435
|
tabIndex: 0,
|
|
414
436
|
children: [
|
|
415
|
-
E === "overview" && /* @__PURE__ */
|
|
416
|
-
E === "permissions" && /* @__PURE__ */
|
|
417
|
-
E === "webhooks" && /* @__PURE__ */
|
|
437
|
+
E === "overview" && /* @__PURE__ */ G(Le, { app: Z }),
|
|
438
|
+
E === "permissions" && /* @__PURE__ */ G(tt, { app: Z }),
|
|
439
|
+
E === "webhooks" && /* @__PURE__ */ G(Pe, {
|
|
418
440
|
appId: Z.id,
|
|
419
441
|
onNavigate: Y
|
|
420
442
|
}),
|
|
421
|
-
E === "delegations" && /* @__PURE__ */
|
|
443
|
+
E === "delegations" && /* @__PURE__ */ G(Fe, {
|
|
422
444
|
authAppId: Z.appId || void 0,
|
|
423
445
|
appName: Z.name,
|
|
424
446
|
onGrantDelegation: () => fe(!0),
|
|
425
447
|
onNavigate: Y
|
|
426
448
|
}),
|
|
427
|
-
E === "analytics" && /* @__PURE__ */
|
|
428
|
-
E === "playground" && /* @__PURE__ */
|
|
429
|
-
E === "store-listing" && /* @__PURE__ */
|
|
449
|
+
E === "analytics" && /* @__PURE__ */ G(Ie, { app: Z }),
|
|
450
|
+
E === "playground" && /* @__PURE__ */ G(He, { app: Z }),
|
|
451
|
+
E === "store-listing" && /* @__PURE__ */ G(Qe, { app: Z })
|
|
430
452
|
]
|
|
431
453
|
}),
|
|
432
|
-
/* @__PURE__ */
|
|
454
|
+
/* @__PURE__ */ G(O, {
|
|
433
455
|
open: ie,
|
|
434
456
|
onOpenChange: k,
|
|
435
457
|
onConfirm: Oe,
|
|
@@ -438,20 +460,20 @@ var Ae = [
|
|
|
438
460
|
confirmLabel: u("devportal.rotateSecret", "Rotate Secret"),
|
|
439
461
|
cancelLabel: u("devportal.cancel", "Cancel"),
|
|
440
462
|
variant: "warning",
|
|
441
|
-
loading:
|
|
463
|
+
loading: B
|
|
442
464
|
}),
|
|
443
|
-
/* @__PURE__ */
|
|
465
|
+
/* @__PURE__ */ G(O, {
|
|
444
466
|
open: j,
|
|
445
467
|
onOpenChange: M,
|
|
446
|
-
onConfirm:
|
|
468
|
+
onConfirm: ke,
|
|
447
469
|
title: u("devportal.deactivateApplication", "Deactivate Application"),
|
|
448
470
|
description: u("devportal.deactivateApplicationDescription", "This will deactivate the application. All OAuth clients, API keys, and webhooks associated with this app will stop functioning. This action can be reversed by reactivating the app."),
|
|
449
471
|
confirmLabel: u("devportal.deactivate", "Deactivate"),
|
|
450
472
|
cancelLabel: u("devportal.cancel", "Cancel"),
|
|
451
473
|
variant: "destructive",
|
|
452
|
-
loading:
|
|
474
|
+
loading: xe
|
|
453
475
|
}),
|
|
454
|
-
/* @__PURE__ */
|
|
476
|
+
/* @__PURE__ */ G(ae, {
|
|
455
477
|
open: ue,
|
|
456
478
|
onOpenChange: fe,
|
|
457
479
|
appId: Z.appId || "",
|
|
@@ -462,12 +484,12 @@ var Ae = [
|
|
|
462
484
|
}
|
|
463
485
|
})
|
|
464
486
|
]
|
|
465
|
-
}) : /* @__PURE__ */
|
|
487
|
+
}) : /* @__PURE__ */ G(y, {
|
|
466
488
|
title: u("devportal.notFound", "Not Found"),
|
|
467
489
|
backLink: `${o}/apps`,
|
|
468
490
|
backLabel: u("devportal.backToApplications", "Back to Applications"),
|
|
469
|
-
children: /* @__PURE__ */
|
|
470
|
-
icon: /* @__PURE__ */
|
|
491
|
+
children: /* @__PURE__ */ G(r, {
|
|
492
|
+
icon: /* @__PURE__ */ G(F, { size: 48 }),
|
|
471
493
|
title: u("devportal.applicationNotFound", "Application not found"),
|
|
472
494
|
description: u("devportal.applicationNotFoundDescription", "The application you're looking for doesn't exist or you don't have access to it.")
|
|
473
495
|
})
|
|
@@ -477,7 +499,7 @@ var Ae = [
|
|
|
477
499
|
let r = n(e);
|
|
478
500
|
return r === e ? t : r;
|
|
479
501
|
}, { data: i, loading: a, error: o } = d({ variables: { applicationId: e } });
|
|
480
|
-
return a ? /* @__PURE__ */
|
|
502
|
+
return a ? /* @__PURE__ */ G(X, { message: r("devportal.loadingWebhooks", "Loading webhooks...") }) : o ? /* @__PURE__ */ G(Z, { message: o.message }) : /* @__PURE__ */ G(Re, {
|
|
481
503
|
appId: e,
|
|
482
504
|
webhooks: (i?.webhooks ?? []).map(Oe),
|
|
483
505
|
onNavigate: t
|
|
@@ -486,7 +508,7 @@ var Ae = [
|
|
|
486
508
|
let { t: o } = P(), s = (e, t) => {
|
|
487
509
|
let n = o(e);
|
|
488
510
|
return n === e ? t : n;
|
|
489
|
-
}, { data: c, loading: l, error: u, refetch: d } = i(), [f] = m(), [p, h] = N([]), [g, _] = N(!1), [v, y] = N(/* @__PURE__ */ new Set()), [b, ee] = N(null), x = j(() => c?.currentUserDelegations?.delegations ? c.currentUserDelegations.delegations.filter((t) => t.appId === e).map(
|
|
511
|
+
}, { data: c, loading: l, error: u, refetch: d } = i(), [f] = m(), [p, h] = N([]), [g, _] = N(!1), [v, y] = N(/* @__PURE__ */ new Set()), [b, ee] = N(null), x = j(() => c?.currentUserDelegations?.delegations ? c.currentUserDelegations.delegations.filter((t) => t.appId === e).map(Ae) : [], [e, c]), S = j(() => x.filter((e) => e.status === "ACTIVE"), [x]), te = j(() => S.filter((e) => v.has(e.id)), [S, v]), C = S.length > 0 && S.every((e) => v.has(e.id)), w = S.some((e) => v.has(e.id)) && !C, ne = A((e, t) => {
|
|
490
512
|
y((n) => {
|
|
491
513
|
let r = new Set(n);
|
|
492
514
|
return t ? r.add(e) : r.delete(e), r;
|
|
@@ -512,19 +534,19 @@ var Ae = [
|
|
|
512
534
|
_(!1);
|
|
513
535
|
}
|
|
514
536
|
}, [f, d]);
|
|
515
|
-
return e ? l ? /* @__PURE__ */
|
|
516
|
-
b && /* @__PURE__ */
|
|
537
|
+
return e ? l ? /* @__PURE__ */ G(X, { message: s("devportal.loadingDelegations", "Loading delegations...") }) : u ? /* @__PURE__ */ G(Z, { message: u.message }) : /* @__PURE__ */ K(W, { children: [
|
|
538
|
+
b && /* @__PURE__ */ G("div", {
|
|
517
539
|
className: "rounded-lg border border-border-subtle bg-status-success-bg-subtle p-3 text-sm text-status-success-text",
|
|
518
|
-
children: /* @__PURE__ */
|
|
540
|
+
children: /* @__PURE__ */ K("div", {
|
|
519
541
|
className: "flex items-center justify-between gap-3",
|
|
520
|
-
children: [/* @__PURE__ */
|
|
542
|
+
children: [/* @__PURE__ */ G("span", { children: b }), /* @__PURE__ */ G("button", {
|
|
521
543
|
onClick: () => ee(null),
|
|
522
544
|
className: "text-status-success-text hover:text-status-success-text",
|
|
523
545
|
children: s("devportal.dismiss", "Dismiss")
|
|
524
546
|
})]
|
|
525
547
|
})
|
|
526
548
|
}),
|
|
527
|
-
/* @__PURE__ */
|
|
549
|
+
/* @__PURE__ */ G(ze, {
|
|
528
550
|
appName: t,
|
|
529
551
|
delegations: x,
|
|
530
552
|
onGrantDelegation: n,
|
|
@@ -537,7 +559,7 @@ var Ae = [
|
|
|
537
559
|
allVisibleSelected: C,
|
|
538
560
|
partiallySelected: w
|
|
539
561
|
}),
|
|
540
|
-
/* @__PURE__ */
|
|
562
|
+
/* @__PURE__ */ G(O, {
|
|
541
563
|
open: p.length > 0,
|
|
542
564
|
onOpenChange: (e) => {
|
|
543
565
|
e || h([]);
|
|
@@ -552,14 +574,14 @@ var Ae = [
|
|
|
552
574
|
variant: "destructive",
|
|
553
575
|
loading: g
|
|
554
576
|
})
|
|
555
|
-
] }) : /* @__PURE__ */
|
|
556
|
-
icon: /* @__PURE__ */
|
|
577
|
+
] }) : /* @__PURE__ */ G(r, {
|
|
578
|
+
icon: /* @__PURE__ */ G(V, { size: 32 }),
|
|
557
579
|
title: s("devportal.linkAuthAppFirst", "Link an auth app first"),
|
|
558
580
|
description: s("devportal.linkAuthAppFirstDescription", "Delegations are managed through auth apps. Create or link an auth app before granting app-as-user access."),
|
|
559
|
-
action: /* @__PURE__ */
|
|
581
|
+
action: /* @__PURE__ */ K("button", {
|
|
560
582
|
onClick: () => a("/oauth"),
|
|
561
583
|
className: "inline-flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90",
|
|
562
|
-
children: [/* @__PURE__ */
|
|
584
|
+
children: [/* @__PURE__ */ G(R, { size: 16 }), s("devportal.manageOAuthApps", "Manage OAuth Apps")]
|
|
563
585
|
})
|
|
564
586
|
});
|
|
565
587
|
}, Ie = ({ app: e }) => {
|
|
@@ -591,31 +613,31 @@ var Ae = [
|
|
|
591
613
|
});
|
|
592
614
|
if (r) {
|
|
593
615
|
let t = m?.productInstallations?.items ?? [], r = m?.productInstallations?.total ?? 0, i = t.filter((e) => e.status === "ACTIVE").length;
|
|
594
|
-
return h && !m ? /* @__PURE__ */
|
|
616
|
+
return h && !m ? /* @__PURE__ */ G(X, { message: n("devportal.loadingAnalytics", "Loading analytics...") }) : /* @__PURE__ */ K("div", {
|
|
595
617
|
className: "space-y-6",
|
|
596
|
-
children: [/* @__PURE__ */
|
|
618
|
+
children: [/* @__PURE__ */ K("div", {
|
|
597
619
|
className: "grid gap-4 sm:grid-cols-4",
|
|
598
620
|
children: [
|
|
599
|
-
/* @__PURE__ */
|
|
621
|
+
/* @__PURE__ */ G(Q, {
|
|
600
622
|
label: n("devportal.totalInstalls", "Total Installs"),
|
|
601
623
|
value: r.toLocaleString()
|
|
602
624
|
}),
|
|
603
|
-
/* @__PURE__ */
|
|
625
|
+
/* @__PURE__ */ G(Q, {
|
|
604
626
|
label: n("devportal.activeInstalls", "Active Installs"),
|
|
605
627
|
value: i.toLocaleString()
|
|
606
628
|
}),
|
|
607
|
-
/* @__PURE__ */
|
|
629
|
+
/* @__PURE__ */ G(Q, {
|
|
608
630
|
label: n("devportal.averageRating", "Average Rating"),
|
|
609
631
|
value: e.averageRating ? `${e.averageRating.toFixed(1)} ★` : n("devportal.notAvailable", "N/A")
|
|
610
632
|
}),
|
|
611
|
-
/* @__PURE__ */
|
|
633
|
+
/* @__PURE__ */ G(Q, {
|
|
612
634
|
label: n("devportal.reviews", "Reviews"),
|
|
613
635
|
value: e.reviewCount.toString()
|
|
614
636
|
})
|
|
615
637
|
]
|
|
616
|
-
}), t.length > 0 && /* @__PURE__ */
|
|
638
|
+
}), t.length > 0 && /* @__PURE__ */ G(b, {
|
|
617
639
|
title: n("devportal.installBreakdown", "Install Breakdown"),
|
|
618
|
-
children: /* @__PURE__ */
|
|
640
|
+
children: /* @__PURE__ */ G(T, {
|
|
619
641
|
data: t,
|
|
620
642
|
keyField: "id",
|
|
621
643
|
columns: [
|
|
@@ -648,7 +670,7 @@ var Ae = [
|
|
|
648
670
|
})]
|
|
649
671
|
});
|
|
650
672
|
}
|
|
651
|
-
return _ ? /* @__PURE__ */
|
|
673
|
+
return _ ? /* @__PURE__ */ G(X, { message: n("devportal.loadingAnalytics", "Loading analytics...") }) : v ? /* @__PURE__ */ G(Z, { message: v.message }) : /* @__PURE__ */ G(Be, { analytics: (g?.applicationAnalytics ?? []).map(ke) });
|
|
652
674
|
}, Le = ({ app: t }) => {
|
|
653
675
|
let { t: n } = P(), r = (e, t) => {
|
|
654
676
|
let r = n(e);
|
|
@@ -679,16 +701,16 @@ var Ae = [
|
|
|
679
701
|
cta: "Submit for review →"
|
|
680
702
|
}
|
|
681
703
|
] : [], l = c.filter((e) => !e.done)[0];
|
|
682
|
-
return /* @__PURE__ */
|
|
704
|
+
return /* @__PURE__ */ K("div", {
|
|
683
705
|
className: "grid gap-6 lg:grid-cols-3",
|
|
684
|
-
children: [/* @__PURE__ */
|
|
706
|
+
children: [/* @__PURE__ */ K("div", {
|
|
685
707
|
className: "lg:col-span-2 space-y-6",
|
|
686
708
|
children: [
|
|
687
|
-
s && l && /* @__PURE__ */
|
|
709
|
+
s && l && /* @__PURE__ */ K("div", {
|
|
688
710
|
className: "rounded-lg border border-primary/30 bg-primary/5 p-4 space-y-3",
|
|
689
|
-
children: [/* @__PURE__ */
|
|
711
|
+
children: [/* @__PURE__ */ K("div", {
|
|
690
712
|
className: "flex items-center justify-between",
|
|
691
|
-
children: [/* @__PURE__ */
|
|
713
|
+
children: [/* @__PURE__ */ K("p", {
|
|
692
714
|
className: "font-semibold text-sm text-primary",
|
|
693
715
|
children: [
|
|
694
716
|
r("devportal.setupProgress", "Setup Progress"),
|
|
@@ -698,25 +720,25 @@ var Ae = [
|
|
|
698
720
|
c.length,
|
|
699
721
|
" complete"
|
|
700
722
|
]
|
|
701
|
-
}), /* @__PURE__ */
|
|
723
|
+
}), /* @__PURE__ */ G("button", {
|
|
702
724
|
onClick: () => i?.(`${a}/apps/${t.id}/publish`),
|
|
703
725
|
className: "text-xs text-primary hover:underline font-medium",
|
|
704
726
|
children: r("devportal.viewChecklist", "View full checklist →")
|
|
705
727
|
})]
|
|
706
|
-
}), /* @__PURE__ */
|
|
728
|
+
}), /* @__PURE__ */ G("div", {
|
|
707
729
|
className: "space-y-1.5",
|
|
708
|
-
children: c.map((e, t) => /* @__PURE__ */
|
|
730
|
+
children: c.map((e, t) => /* @__PURE__ */ K("div", {
|
|
709
731
|
className: "flex items-center gap-2 text-sm",
|
|
710
732
|
children: [
|
|
711
|
-
e.done ? /* @__PURE__ */
|
|
733
|
+
e.done ? /* @__PURE__ */ G(ue, {
|
|
712
734
|
size: 14,
|
|
713
735
|
className: "text-status-success-text shrink-0"
|
|
714
|
-
}) : /* @__PURE__ */
|
|
715
|
-
/* @__PURE__ */
|
|
736
|
+
}) : /* @__PURE__ */ G("div", { className: "h-3.5 w-3.5 rounded-full border-2 border-muted-foreground/40 shrink-0" }),
|
|
737
|
+
/* @__PURE__ */ G("span", {
|
|
716
738
|
className: e.done ? "line-through text-muted-foreground" : "text-foreground",
|
|
717
739
|
children: e.label
|
|
718
740
|
}),
|
|
719
|
-
!e.done && t === c.indexOf(l) && /* @__PURE__ */
|
|
741
|
+
!e.done && t === c.indexOf(l) && /* @__PURE__ */ G("button", {
|
|
720
742
|
onClick: () => i?.(e.path),
|
|
721
743
|
className: "ml-auto text-xs text-primary hover:underline font-medium shrink-0",
|
|
722
744
|
children: e.cta
|
|
@@ -725,56 +747,56 @@ var Ae = [
|
|
|
725
747
|
}, t))
|
|
726
748
|
})]
|
|
727
749
|
}),
|
|
728
|
-
/* @__PURE__ */
|
|
750
|
+
/* @__PURE__ */ K("div", {
|
|
729
751
|
className: "grid gap-4 sm:grid-cols-4",
|
|
730
752
|
children: [
|
|
731
|
-
/* @__PURE__ */
|
|
753
|
+
/* @__PURE__ */ G(Q, {
|
|
732
754
|
label: r("devportal.totalInstalls", "Total Installs"),
|
|
733
755
|
value: t.installCount.toLocaleString()
|
|
734
756
|
}),
|
|
735
|
-
/* @__PURE__ */
|
|
757
|
+
/* @__PURE__ */ G(Q, {
|
|
736
758
|
label: r("devportal.activeInstalls", "Active Installs"),
|
|
737
759
|
value: t.activeInstallCount.toLocaleString()
|
|
738
760
|
}),
|
|
739
|
-
/* @__PURE__ */
|
|
761
|
+
/* @__PURE__ */ G(Q, {
|
|
740
762
|
label: r("devportal.averageRating", "Average Rating"),
|
|
741
763
|
value: t.averageRating ? `${t.averageRating.toFixed(1)} ★` : r("devportal.notAvailable", "N/A")
|
|
742
764
|
}),
|
|
743
|
-
/* @__PURE__ */
|
|
765
|
+
/* @__PURE__ */ G(Q, {
|
|
744
766
|
label: r("devportal.reviews", "Reviews"),
|
|
745
767
|
value: t.reviewCount.toString()
|
|
746
768
|
})
|
|
747
769
|
]
|
|
748
770
|
}),
|
|
749
|
-
/* @__PURE__ */
|
|
771
|
+
/* @__PURE__ */ G(b, {
|
|
750
772
|
title: r("devportal.description", "Description"),
|
|
751
|
-
children: /* @__PURE__ */
|
|
773
|
+
children: /* @__PURE__ */ G("div", {
|
|
752
774
|
className: "prose prose-sm max-w-none",
|
|
753
|
-
children: /* @__PURE__ */
|
|
775
|
+
children: /* @__PURE__ */ G("pre", {
|
|
754
776
|
className: "whitespace-pre-wrap font-sans text-sm text-foreground bg-transparent p-0 m-0",
|
|
755
777
|
children: t.description || r("devportal.noDescriptionProvided", "No description provided.")
|
|
756
778
|
})
|
|
757
779
|
})
|
|
758
780
|
}),
|
|
759
|
-
/* @__PURE__ */
|
|
781
|
+
/* @__PURE__ */ G(b, {
|
|
760
782
|
title: r("devportal.tagsAndKeywords", "Tags & Keywords"),
|
|
761
|
-
children: /* @__PURE__ */
|
|
783
|
+
children: /* @__PURE__ */ K("div", {
|
|
762
784
|
className: "space-y-3",
|
|
763
|
-
children: [t.tags.length > 0 && /* @__PURE__ */
|
|
785
|
+
children: [t.tags.length > 0 && /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
764
786
|
className: "text-xs text-muted-foreground mb-2",
|
|
765
787
|
children: r("devportal.tags", "Tags")
|
|
766
|
-
}), /* @__PURE__ */
|
|
788
|
+
}), /* @__PURE__ */ G("div", {
|
|
767
789
|
className: "flex flex-wrap gap-2",
|
|
768
|
-
children: t.tags.map((e) => /* @__PURE__ */
|
|
790
|
+
children: t.tags.map((e) => /* @__PURE__ */ G("span", {
|
|
769
791
|
className: "rounded-full bg-primary/10 px-3 py-1 text-xs font-medium text-primary",
|
|
770
792
|
children: e
|
|
771
793
|
}, e))
|
|
772
|
-
})] }), t.keywords.length > 0 && /* @__PURE__ */
|
|
794
|
+
})] }), t.keywords.length > 0 && /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
773
795
|
className: "text-xs text-muted-foreground mb-2",
|
|
774
796
|
children: r("devportal.keywords", "Keywords")
|
|
775
|
-
}), /* @__PURE__ */
|
|
797
|
+
}), /* @__PURE__ */ G("div", {
|
|
776
798
|
className: "flex flex-wrap gap-2",
|
|
777
|
-
children: t.keywords.map((e) => /* @__PURE__ */
|
|
799
|
+
children: t.keywords.map((e) => /* @__PURE__ */ G("span", {
|
|
778
800
|
className: "rounded-full bg-muted px-3 py-1 text-xs",
|
|
779
801
|
children: e
|
|
780
802
|
}, e))
|
|
@@ -782,14 +804,14 @@ var Ae = [
|
|
|
782
804
|
})
|
|
783
805
|
})
|
|
784
806
|
]
|
|
785
|
-
}), /* @__PURE__ */
|
|
807
|
+
}), /* @__PURE__ */ K("div", {
|
|
786
808
|
className: "space-y-6",
|
|
787
|
-
children: [/* @__PURE__ */
|
|
809
|
+
children: [/* @__PURE__ */ G(b, {
|
|
788
810
|
title: r("devportal.details", "Details"),
|
|
789
|
-
children: /* @__PURE__ */
|
|
811
|
+
children: /* @__PURE__ */ G(E, { items: [
|
|
790
812
|
{
|
|
791
813
|
label: r("devportal.appId", "App ID"),
|
|
792
|
-
value: /* @__PURE__ */
|
|
814
|
+
value: /* @__PURE__ */ G("code", {
|
|
793
815
|
className: "text-xs",
|
|
794
816
|
children: t.id
|
|
795
817
|
})
|
|
@@ -819,32 +841,32 @@ var Ae = [
|
|
|
819
841
|
value: t.publishedAt ? new Date(t.publishedAt).toLocaleDateString() : r("devportal.notPublished", "Not published")
|
|
820
842
|
}
|
|
821
843
|
] })
|
|
822
|
-
}), /* @__PURE__ */
|
|
844
|
+
}), /* @__PURE__ */ G(b, {
|
|
823
845
|
title: r("devportal.links", "Links"),
|
|
824
|
-
children: /* @__PURE__ */
|
|
846
|
+
children: /* @__PURE__ */ K("div", {
|
|
825
847
|
className: "space-y-2",
|
|
826
848
|
children: [
|
|
827
|
-
t.websiteUrl && /* @__PURE__ */
|
|
849
|
+
t.websiteUrl && /* @__PURE__ */ G($, {
|
|
828
850
|
label: r("devportal.website", "Website"),
|
|
829
851
|
url: t.websiteUrl
|
|
830
852
|
}),
|
|
831
|
-
t.documentationUrl && /* @__PURE__ */
|
|
853
|
+
t.documentationUrl && /* @__PURE__ */ G($, {
|
|
832
854
|
label: r("devportal.documentation", "Documentation"),
|
|
833
855
|
url: t.documentationUrl
|
|
834
856
|
}),
|
|
835
|
-
t.supportUrl && /* @__PURE__ */
|
|
857
|
+
t.supportUrl && /* @__PURE__ */ G($, {
|
|
836
858
|
label: r("devportal.support", "Support"),
|
|
837
859
|
url: t.supportUrl
|
|
838
860
|
}),
|
|
839
|
-
t.githubUrl && /* @__PURE__ */
|
|
861
|
+
t.githubUrl && /* @__PURE__ */ G($, {
|
|
840
862
|
label: r("devportal.github", "GitHub"),
|
|
841
863
|
url: t.githubUrl
|
|
842
864
|
}),
|
|
843
|
-
t.privacyPolicyUrl && /* @__PURE__ */
|
|
865
|
+
t.privacyPolicyUrl && /* @__PURE__ */ G($, {
|
|
844
866
|
label: r("devportal.privacyPolicy", "Privacy Policy"),
|
|
845
867
|
url: t.privacyPolicyUrl
|
|
846
868
|
}),
|
|
847
|
-
t.termsOfServiceUrl && /* @__PURE__ */
|
|
869
|
+
t.termsOfServiceUrl && /* @__PURE__ */ G($, {
|
|
848
870
|
label: r("devportal.termsOfService", "Terms of Service"),
|
|
849
871
|
url: t.termsOfServiceUrl
|
|
850
872
|
})
|
|
@@ -858,11 +880,11 @@ var Ae = [
|
|
|
858
880
|
let n = i(e);
|
|
859
881
|
return n === e ? t : n;
|
|
860
882
|
};
|
|
861
|
-
return /* @__PURE__ */
|
|
883
|
+
return /* @__PURE__ */ K("div", {
|
|
862
884
|
className: "space-y-6",
|
|
863
|
-
children: [/* @__PURE__ */
|
|
885
|
+
children: [/* @__PURE__ */ K("div", {
|
|
864
886
|
className: "flex items-center justify-between",
|
|
865
|
-
children: [/* @__PURE__ */
|
|
887
|
+
children: [/* @__PURE__ */ K("p", {
|
|
866
888
|
className: "text-sm text-muted-foreground",
|
|
867
889
|
children: [
|
|
868
890
|
t.length,
|
|
@@ -871,81 +893,81 @@ var Ae = [
|
|
|
871
893
|
" ",
|
|
872
894
|
a("devportal.configured", "configured")
|
|
873
895
|
]
|
|
874
|
-
}), /* @__PURE__ */
|
|
896
|
+
}), /* @__PURE__ */ K("button", {
|
|
875
897
|
onClick: () => n(`/apps/${e}/webhooks/new`),
|
|
876
898
|
className: "inline-flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors",
|
|
877
|
-
children: [/* @__PURE__ */
|
|
899
|
+
children: [/* @__PURE__ */ G(B, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
|
|
878
900
|
})]
|
|
879
|
-
}), t.length > 0 ? /* @__PURE__ */
|
|
901
|
+
}), t.length > 0 ? /* @__PURE__ */ G("div", {
|
|
880
902
|
className: "space-y-4",
|
|
881
|
-
children: t.map((t) => /* @__PURE__ */
|
|
903
|
+
children: t.map((t) => /* @__PURE__ */ K("div", {
|
|
882
904
|
className: "rounded-lg border bg-card p-4 space-y-4",
|
|
883
905
|
children: [
|
|
884
|
-
/* @__PURE__ */
|
|
906
|
+
/* @__PURE__ */ K("div", {
|
|
885
907
|
className: "flex items-start justify-between",
|
|
886
|
-
children: [/* @__PURE__ */
|
|
908
|
+
children: [/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ K("div", {
|
|
887
909
|
className: "flex items-center gap-2",
|
|
888
|
-
children: [/* @__PURE__ */
|
|
910
|
+
children: [/* @__PURE__ */ G("h3", {
|
|
889
911
|
className: "font-medium",
|
|
890
912
|
children: t.name
|
|
891
|
-
}), /* @__PURE__ */
|
|
913
|
+
}), /* @__PURE__ */ G(S, {
|
|
892
914
|
status: t.status,
|
|
893
915
|
type: "webhook"
|
|
894
916
|
})]
|
|
895
|
-
}), t.description && /* @__PURE__ */
|
|
917
|
+
}), t.description && /* @__PURE__ */ G("p", {
|
|
896
918
|
className: "text-sm text-muted-foreground mt-1",
|
|
897
919
|
children: t.description
|
|
898
|
-
})] }), /* @__PURE__ */
|
|
920
|
+
})] }), /* @__PURE__ */ G("button", {
|
|
899
921
|
onClick: () => n(`/apps/${e}/webhooks/${t.id}`),
|
|
900
922
|
className: "rounded-md p-1 hover:bg-muted",
|
|
901
|
-
children: /* @__PURE__ */
|
|
923
|
+
children: /* @__PURE__ */ G(_e, { size: 20 })
|
|
902
924
|
})]
|
|
903
925
|
}),
|
|
904
|
-
/* @__PURE__ */
|
|
926
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
905
927
|
className: "text-xs text-muted-foreground mb-1",
|
|
906
928
|
children: a("devportal.endpointUrl", "Endpoint URL")
|
|
907
|
-
}), /* @__PURE__ */
|
|
929
|
+
}), /* @__PURE__ */ G("code", {
|
|
908
930
|
className: "text-sm bg-muted px-2 py-1 rounded block truncate",
|
|
909
931
|
children: t.url
|
|
910
932
|
})] }),
|
|
911
|
-
/* @__PURE__ */
|
|
933
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
912
934
|
className: "text-xs text-muted-foreground mb-2",
|
|
913
935
|
children: a("devportal.events", "Events")
|
|
914
|
-
}), /* @__PURE__ */
|
|
936
|
+
}), /* @__PURE__ */ G("div", {
|
|
915
937
|
className: "flex flex-wrap gap-2",
|
|
916
|
-
children: t.events.map((e) => /* @__PURE__ */
|
|
938
|
+
children: t.events.map((e) => /* @__PURE__ */ G("span", {
|
|
917
939
|
className: "rounded-full bg-muted px-2 py-0.5 text-xs",
|
|
918
940
|
children: e
|
|
919
941
|
}, e))
|
|
920
942
|
})] }),
|
|
921
|
-
/* @__PURE__ */
|
|
943
|
+
/* @__PURE__ */ K("div", {
|
|
922
944
|
className: "grid gap-4 sm:grid-cols-4 text-sm",
|
|
923
945
|
children: [
|
|
924
|
-
/* @__PURE__ */
|
|
946
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
925
947
|
className: "text-xs text-muted-foreground",
|
|
926
948
|
children: a("devportal.success", "Success")
|
|
927
|
-
}), /* @__PURE__ */
|
|
949
|
+
}), /* @__PURE__ */ G("p", {
|
|
928
950
|
className: "font-medium text-status-success-text",
|
|
929
951
|
children: t.successCount.toLocaleString()
|
|
930
952
|
})] }),
|
|
931
|
-
/* @__PURE__ */
|
|
953
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
932
954
|
className: "text-xs text-muted-foreground",
|
|
933
955
|
children: a("devportal.failed", "Failed")
|
|
934
|
-
}), /* @__PURE__ */
|
|
956
|
+
}), /* @__PURE__ */ G("p", {
|
|
935
957
|
className: "font-medium text-status-error-text",
|
|
936
958
|
children: t.failureCount.toLocaleString()
|
|
937
959
|
})] }),
|
|
938
|
-
/* @__PURE__ */
|
|
960
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
939
961
|
className: "text-xs text-muted-foreground",
|
|
940
962
|
children: a("devportal.successRate", "Success Rate")
|
|
941
|
-
}), /* @__PURE__ */
|
|
963
|
+
}), /* @__PURE__ */ K("p", {
|
|
942
964
|
className: "font-medium",
|
|
943
965
|
children: [t.successCount + t.failureCount > 0 ? (t.successCount / (t.successCount + t.failureCount) * 100).toFixed(1) : "0.0", "%"]
|
|
944
966
|
})] }),
|
|
945
|
-
/* @__PURE__ */
|
|
967
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
946
968
|
className: "text-xs text-muted-foreground",
|
|
947
969
|
children: a("devportal.lastTriggered", "Last Triggered")
|
|
948
|
-
}), /* @__PURE__ */
|
|
970
|
+
}), /* @__PURE__ */ G("p", {
|
|
949
971
|
className: "font-medium",
|
|
950
972
|
children: t.lastTriggeredAt ? new Date(t.lastTriggeredAt).toLocaleString() : a("devportal.never", "Never")
|
|
951
973
|
})] })
|
|
@@ -953,14 +975,14 @@ var Ae = [
|
|
|
953
975
|
})
|
|
954
976
|
]
|
|
955
977
|
}, t.id))
|
|
956
|
-
}) : /* @__PURE__ */
|
|
957
|
-
icon: /* @__PURE__ */
|
|
978
|
+
}) : /* @__PURE__ */ G(r, {
|
|
979
|
+
icon: /* @__PURE__ */ G(Se, { size: 32 }),
|
|
958
980
|
title: a("devportal.noWebhooks", "No webhooks"),
|
|
959
981
|
description: a("devportal.noWebhooksDescription", "Add a webhook to receive event notifications"),
|
|
960
|
-
action: /* @__PURE__ */
|
|
982
|
+
action: /* @__PURE__ */ K("button", {
|
|
961
983
|
onClick: () => n(`/apps/${e}/webhooks/new`),
|
|
962
984
|
className: "inline-flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90",
|
|
963
|
-
children: [/* @__PURE__ */
|
|
985
|
+
children: [/* @__PURE__ */ G(B, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
|
|
964
986
|
})
|
|
965
987
|
})]
|
|
966
988
|
});
|
|
@@ -969,12 +991,12 @@ var Ae = [
|
|
|
969
991
|
let n = p(e);
|
|
970
992
|
return n === e ? t : n;
|
|
971
993
|
}, h = n.filter((e) => e.status === "ACTIVE"), g = n.filter((e) => e.status !== "ACTIVE");
|
|
972
|
-
return /* @__PURE__ */
|
|
994
|
+
return /* @__PURE__ */ K("div", {
|
|
973
995
|
className: "space-y-6",
|
|
974
996
|
children: [
|
|
975
|
-
/* @__PURE__ */
|
|
997
|
+
/* @__PURE__ */ K("div", {
|
|
976
998
|
className: "flex items-center justify-between",
|
|
977
|
-
children: [/* @__PURE__ */
|
|
999
|
+
children: [/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ K("p", {
|
|
978
1000
|
className: "text-sm text-muted-foreground",
|
|
979
1001
|
children: [
|
|
980
1002
|
n.length,
|
|
@@ -985,7 +1007,7 @@ var Ae = [
|
|
|
985
1007
|
" ",
|
|
986
1008
|
e
|
|
987
1009
|
]
|
|
988
|
-
}), h.length > 0 && /* @__PURE__ */
|
|
1010
|
+
}), h.length > 0 && /* @__PURE__ */ K("p", {
|
|
989
1011
|
className: "text-xs text-muted-foreground mt-0.5",
|
|
990
1012
|
children: [
|
|
991
1013
|
h.length,
|
|
@@ -997,44 +1019,44 @@ var Ae = [
|
|
|
997
1019
|
" ",
|
|
998
1020
|
m("devportal.revokedExpired", "revoked/expired")
|
|
999
1021
|
]
|
|
1000
|
-
})] }), /* @__PURE__ */
|
|
1022
|
+
})] }), /* @__PURE__ */ K("button", {
|
|
1001
1023
|
onClick: i,
|
|
1002
1024
|
className: "inline-flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors",
|
|
1003
|
-
children: [/* @__PURE__ */
|
|
1025
|
+
children: [/* @__PURE__ */ G(B, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
|
|
1004
1026
|
})]
|
|
1005
1027
|
}),
|
|
1006
|
-
h.length > 0 && /* @__PURE__ */
|
|
1028
|
+
h.length > 0 && /* @__PURE__ */ G("div", {
|
|
1007
1029
|
className: "rounded-lg border bg-card p-4",
|
|
1008
|
-
children: /* @__PURE__ */
|
|
1030
|
+
children: /* @__PURE__ */ K("div", {
|
|
1009
1031
|
className: "flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between",
|
|
1010
|
-
children: [/* @__PURE__ */
|
|
1032
|
+
children: [/* @__PURE__ */ K("div", {
|
|
1011
1033
|
className: "flex flex-wrap items-center gap-3",
|
|
1012
|
-
children: [/* @__PURE__ */
|
|
1034
|
+
children: [/* @__PURE__ */ K("div", {
|
|
1013
1035
|
className: "flex items-center gap-2",
|
|
1014
|
-
children: [/* @__PURE__ */
|
|
1036
|
+
children: [/* @__PURE__ */ G(C, {
|
|
1015
1037
|
checked: d,
|
|
1016
1038
|
indeterminate: f,
|
|
1017
1039
|
onChange: c,
|
|
1018
1040
|
ariaLabel: m("devportal.selectAllActiveDelegations", "Select all active app delegations")
|
|
1019
|
-
}), /* @__PURE__ */
|
|
1041
|
+
}), /* @__PURE__ */ G("span", {
|
|
1020
1042
|
className: "text-sm font-medium",
|
|
1021
1043
|
children: m("devportal.selectAllActive", "Select all active")
|
|
1022
1044
|
})]
|
|
1023
|
-
}), o.size > 0 && /* @__PURE__ */
|
|
1045
|
+
}), o.size > 0 && /* @__PURE__ */ G("button", {
|
|
1024
1046
|
onClick: l,
|
|
1025
1047
|
className: "text-sm text-muted-foreground hover:text-foreground",
|
|
1026
1048
|
children: m("devportal.clearSelection", "Clear selection")
|
|
1027
1049
|
})]
|
|
1028
|
-
}), /* @__PURE__ */
|
|
1050
|
+
}), /* @__PURE__ */ K("div", {
|
|
1029
1051
|
className: "flex flex-wrap items-center gap-2",
|
|
1030
|
-
children: [/* @__PURE__ */
|
|
1052
|
+
children: [/* @__PURE__ */ K("span", {
|
|
1031
1053
|
className: "rounded-full bg-muted px-3 py-1 text-sm font-medium text-muted-foreground",
|
|
1032
1054
|
children: [
|
|
1033
1055
|
o.size,
|
|
1034
1056
|
" ",
|
|
1035
1057
|
m("devportal.selected", "selected")
|
|
1036
1058
|
]
|
|
1037
|
-
}), /* @__PURE__ */
|
|
1059
|
+
}), /* @__PURE__ */ K("button", {
|
|
1038
1060
|
onClick: u,
|
|
1039
1061
|
disabled: o.size === 0,
|
|
1040
1062
|
className: "rounded-md border border-status-error-bg px-3 py-2 text-sm font-medium text-status-error-text hover:bg-status-error-bg-subtle disabled:cursor-not-allowed disabled:opacity-50",
|
|
@@ -1043,33 +1065,33 @@ var Ae = [
|
|
|
1043
1065
|
})]
|
|
1044
1066
|
})
|
|
1045
1067
|
}),
|
|
1046
|
-
n.length > 0 ? /* @__PURE__ */
|
|
1068
|
+
n.length > 0 ? /* @__PURE__ */ G("div", {
|
|
1047
1069
|
className: "space-y-4",
|
|
1048
|
-
children: n.map((e) => /* @__PURE__ */
|
|
1070
|
+
children: n.map((e) => /* @__PURE__ */ K("div", {
|
|
1049
1071
|
className: "rounded-lg border bg-card p-4 space-y-4",
|
|
1050
1072
|
children: [
|
|
1051
|
-
/* @__PURE__ */
|
|
1073
|
+
/* @__PURE__ */ K("div", {
|
|
1052
1074
|
className: "flex items-start justify-between",
|
|
1053
|
-
children: [/* @__PURE__ */
|
|
1075
|
+
children: [/* @__PURE__ */ K("div", {
|
|
1054
1076
|
className: "flex items-start gap-3",
|
|
1055
|
-
children: [e.status === "ACTIVE" && /* @__PURE__ */
|
|
1077
|
+
children: [e.status === "ACTIVE" && /* @__PURE__ */ G("div", {
|
|
1056
1078
|
onClick: (e) => e.stopPropagation(),
|
|
1057
|
-
children: /* @__PURE__ */
|
|
1079
|
+
children: /* @__PURE__ */ G(C, {
|
|
1058
1080
|
checked: o.has(e.id),
|
|
1059
1081
|
onChange: (t) => s(e.id, t),
|
|
1060
1082
|
ariaLabel: `Select delegation ${e.id}`,
|
|
1061
1083
|
className: "mt-1"
|
|
1062
1084
|
})
|
|
1063
|
-
}), /* @__PURE__ */
|
|
1085
|
+
}), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ K("div", {
|
|
1064
1086
|
className: "flex items-center gap-2",
|
|
1065
|
-
children: [/* @__PURE__ */
|
|
1087
|
+
children: [/* @__PURE__ */ K("h3", {
|
|
1066
1088
|
className: "font-medium",
|
|
1067
1089
|
children: ["Delegation #", e.id.slice(0, 8)]
|
|
1068
|
-
}), /* @__PURE__ */
|
|
1069
|
-
className: t("rounded-full px-2 py-0.5 text-xs font-medium",
|
|
1090
|
+
}), /* @__PURE__ */ G("span", {
|
|
1091
|
+
className: t("rounded-full px-2 py-0.5 text-xs font-medium", Me[e.status]),
|
|
1070
1092
|
children: e.status
|
|
1071
1093
|
})]
|
|
1072
|
-
}), /* @__PURE__ */
|
|
1094
|
+
}), /* @__PURE__ */ K("p", {
|
|
1073
1095
|
className: "text-sm text-muted-foreground mt-1",
|
|
1074
1096
|
children: [
|
|
1075
1097
|
m("devportal.granted", "Granted"),
|
|
@@ -1081,55 +1103,55 @@ var Ae = [
|
|
|
1081
1103
|
e.grantedBy === e.userId ? m("devportal.you", "you") : e.grantedBy.slice(0, 8)
|
|
1082
1104
|
]
|
|
1083
1105
|
})] })]
|
|
1084
|
-
}), e.status === "ACTIVE" && /* @__PURE__ */
|
|
1106
|
+
}), e.status === "ACTIVE" && /* @__PURE__ */ K("button", {
|
|
1085
1107
|
onClick: () => a(e.id),
|
|
1086
1108
|
className: "inline-flex items-center gap-1.5 rounded-md border border-border-subtle px-3 py-1.5 text-xs font-medium text-status-error-text hover:bg-status-error-bg-subtle transition-colors",
|
|
1087
|
-
children: [/* @__PURE__ */
|
|
1109
|
+
children: [/* @__PURE__ */ G(we, { size: 14 }), m("devportal.revoke", "Revoke")]
|
|
1088
1110
|
})]
|
|
1089
1111
|
}),
|
|
1090
|
-
/* @__PURE__ */
|
|
1112
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1091
1113
|
className: "text-xs text-muted-foreground mb-2",
|
|
1092
1114
|
children: m("devportal.grantedScopes", "Granted Scopes")
|
|
1093
|
-
}), /* @__PURE__ */
|
|
1115
|
+
}), /* @__PURE__ */ G("div", {
|
|
1094
1116
|
className: "flex flex-wrap gap-2",
|
|
1095
|
-
children: e.scopes.map((e) => /* @__PURE__ */
|
|
1117
|
+
children: e.scopes.map((e) => /* @__PURE__ */ G("span", {
|
|
1096
1118
|
className: "rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-xs text-status-success-text",
|
|
1097
1119
|
children: e
|
|
1098
1120
|
}, e))
|
|
1099
1121
|
})] }),
|
|
1100
|
-
e.workspaceIds.length > 0 && /* @__PURE__ */
|
|
1122
|
+
e.workspaceIds.length > 0 && /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1101
1123
|
className: "text-xs text-muted-foreground mb-2",
|
|
1102
1124
|
children: m("devportal.workspaceScope", "Workspace Scope")
|
|
1103
|
-
}), /* @__PURE__ */
|
|
1125
|
+
}), /* @__PURE__ */ G("div", {
|
|
1104
1126
|
className: "flex flex-wrap gap-2",
|
|
1105
|
-
children: e.workspaceIds.map((e) => /* @__PURE__ */
|
|
1127
|
+
children: e.workspaceIds.map((e) => /* @__PURE__ */ G("code", {
|
|
1106
1128
|
className: "rounded bg-muted px-2 py-0.5 text-xs",
|
|
1107
1129
|
children: e
|
|
1108
1130
|
}, e))
|
|
1109
1131
|
})] }),
|
|
1110
|
-
/* @__PURE__ */
|
|
1132
|
+
/* @__PURE__ */ K("div", {
|
|
1111
1133
|
className: "flex items-center gap-4 text-xs text-muted-foreground",
|
|
1112
1134
|
children: [
|
|
1113
|
-
e.expiresAt && /* @__PURE__ */
|
|
1135
|
+
e.expiresAt && /* @__PURE__ */ K("span", {
|
|
1114
1136
|
className: "flex items-center gap-1",
|
|
1115
1137
|
children: [
|
|
1116
|
-
/* @__PURE__ */
|
|
1138
|
+
/* @__PURE__ */ G(de, { size: 12 }),
|
|
1117
1139
|
m("devportal.expires", "Expires"),
|
|
1118
1140
|
" ",
|
|
1119
1141
|
new Date(e.expiresAt).toLocaleDateString()
|
|
1120
1142
|
]
|
|
1121
1143
|
}),
|
|
1122
|
-
!e.expiresAt && e.status === "ACTIVE" && /* @__PURE__ */
|
|
1144
|
+
!e.expiresAt && e.status === "ACTIVE" && /* @__PURE__ */ K("span", {
|
|
1123
1145
|
className: "flex items-center gap-1",
|
|
1124
|
-
children: [/* @__PURE__ */
|
|
1146
|
+
children: [/* @__PURE__ */ G(L, {
|
|
1125
1147
|
size: 12,
|
|
1126
1148
|
className: "text-status-success-text"
|
|
1127
1149
|
}), m("devportal.noExpiration", "No expiration")]
|
|
1128
1150
|
}),
|
|
1129
|
-
e.revokedAt && /* @__PURE__ */
|
|
1151
|
+
e.revokedAt && /* @__PURE__ */ K("span", {
|
|
1130
1152
|
className: "flex items-center gap-1",
|
|
1131
1153
|
children: [
|
|
1132
|
-
/* @__PURE__ */
|
|
1154
|
+
/* @__PURE__ */ G(we, {
|
|
1133
1155
|
size: 12,
|
|
1134
1156
|
className: "text-status-error-text"
|
|
1135
1157
|
}),
|
|
@@ -1142,14 +1164,14 @@ var Ae = [
|
|
|
1142
1164
|
})
|
|
1143
1165
|
]
|
|
1144
1166
|
}, e.id))
|
|
1145
|
-
}) : /* @__PURE__ */
|
|
1146
|
-
icon: /* @__PURE__ */
|
|
1167
|
+
}) : /* @__PURE__ */ G(r, {
|
|
1168
|
+
icon: /* @__PURE__ */ G(U, { size: 32 }),
|
|
1147
1169
|
title: m("devportal.noDelegations", "No delegations"),
|
|
1148
1170
|
description: m("devportal.noDelegationsDescription", "Grant a delegation to allow this app to act on your behalf"),
|
|
1149
|
-
action: /* @__PURE__ */
|
|
1171
|
+
action: /* @__PURE__ */ K("button", {
|
|
1150
1172
|
onClick: i,
|
|
1151
1173
|
className: "inline-flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90",
|
|
1152
|
-
children: [/* @__PURE__ */
|
|
1174
|
+
children: [/* @__PURE__ */ G(B, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
|
|
1153
1175
|
})
|
|
1154
1176
|
})
|
|
1155
1177
|
]
|
|
@@ -1159,35 +1181,35 @@ var Ae = [
|
|
|
1159
1181
|
let r = t(e);
|
|
1160
1182
|
return r === e ? n : r;
|
|
1161
1183
|
}, i = e[0], a = e[1], o = (e, t) => t ? (e - t) / t * 100 : 0;
|
|
1162
|
-
return /* @__PURE__ */
|
|
1184
|
+
return /* @__PURE__ */ K("div", {
|
|
1163
1185
|
className: "space-y-6",
|
|
1164
|
-
children: [/* @__PURE__ */
|
|
1186
|
+
children: [/* @__PURE__ */ K("div", {
|
|
1165
1187
|
className: "grid gap-4 sm:grid-cols-4",
|
|
1166
1188
|
children: [
|
|
1167
|
-
/* @__PURE__ */
|
|
1189
|
+
/* @__PURE__ */ G(Q, {
|
|
1168
1190
|
label: n("devportal.activeUsers", "Active Users"),
|
|
1169
1191
|
value: i?.activeUsers.toLocaleString() || "0",
|
|
1170
1192
|
trend: a ? o(i.activeUsers, a.activeUsers) : void 0
|
|
1171
1193
|
}),
|
|
1172
|
-
/* @__PURE__ */
|
|
1194
|
+
/* @__PURE__ */ G(Q, {
|
|
1173
1195
|
label: n("devportal.apiCalls", "API Calls"),
|
|
1174
1196
|
value: i ? `${(i.apiCalls / 1e3).toFixed(1)}K` : "0",
|
|
1175
1197
|
trend: a ? o(i.apiCalls, a.apiCalls) : void 0
|
|
1176
1198
|
}),
|
|
1177
|
-
/* @__PURE__ */
|
|
1199
|
+
/* @__PURE__ */ G(Q, {
|
|
1178
1200
|
label: n("devportal.avgResponseTime", "Avg Response Time"),
|
|
1179
1201
|
value: i?.avgResponseTime ? `${i.avgResponseTime}ms` : n("devportal.notAvailable", "N/A"),
|
|
1180
1202
|
trend: a && i?.avgResponseTime ? -o(i.avgResponseTime, a.avgResponseTime || 1) : void 0
|
|
1181
1203
|
}),
|
|
1182
|
-
/* @__PURE__ */
|
|
1204
|
+
/* @__PURE__ */ G(Q, {
|
|
1183
1205
|
label: n("devportal.errorRate", "Error Rate"),
|
|
1184
1206
|
value: i && i.apiCalls > 0 ? `${(i.errors / i.apiCalls * 100).toFixed(2)}%` : "0%",
|
|
1185
1207
|
trend: a && i && i.apiCalls > 0 && a.apiCalls > 0 ? -o(i.errors / i.apiCalls, a.errors / a.apiCalls) : void 0
|
|
1186
1208
|
})
|
|
1187
1209
|
]
|
|
1188
|
-
}), /* @__PURE__ */
|
|
1210
|
+
}), /* @__PURE__ */ G(b, {
|
|
1189
1211
|
title: n("devportal.dailyBreakdown", "Daily Breakdown"),
|
|
1190
|
-
children: e.length > 0 ? /* @__PURE__ */
|
|
1212
|
+
children: e.length > 0 ? /* @__PURE__ */ G(T, {
|
|
1191
1213
|
data: e,
|
|
1192
1214
|
keyField: "id",
|
|
1193
1215
|
columns: [
|
|
@@ -1227,8 +1249,8 @@ var Ae = [
|
|
|
1227
1249
|
render: (e) => e.sessions.toLocaleString()
|
|
1228
1250
|
}
|
|
1229
1251
|
]
|
|
1230
|
-
}) : /* @__PURE__ */
|
|
1231
|
-
icon: /* @__PURE__ */
|
|
1252
|
+
}) : /* @__PURE__ */ G(r, {
|
|
1253
|
+
icon: /* @__PURE__ */ G(I, { size: 32 }),
|
|
1232
1254
|
title: n("devportal.noAnalyticsData", "No analytics data"),
|
|
1233
1255
|
description: n("devportal.noAnalyticsDataDescription", "Analytics data will appear here once the application starts receiving traffic.")
|
|
1234
1256
|
})
|
|
@@ -1272,21 +1294,21 @@ var Ae = [
|
|
|
1272
1294
|
]), x = A(() => {
|
|
1273
1295
|
i && v(i), b(!0);
|
|
1274
1296
|
}, [i]);
|
|
1275
|
-
return /* @__PURE__ */
|
|
1297
|
+
return /* @__PURE__ */ K("div", {
|
|
1276
1298
|
className: "space-y-4",
|
|
1277
1299
|
children: [
|
|
1278
|
-
/* @__PURE__ */
|
|
1300
|
+
/* @__PURE__ */ K("div", {
|
|
1279
1301
|
className: "flex items-center justify-between",
|
|
1280
|
-
children: [/* @__PURE__ */
|
|
1302
|
+
children: [/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("h3", {
|
|
1281
1303
|
className: "text-lg font-semibold",
|
|
1282
1304
|
children: o("devportal.apiPlayground", "API Playground")
|
|
1283
|
-
}), /* @__PURE__ */
|
|
1305
|
+
}), /* @__PURE__ */ K("p", {
|
|
1284
1306
|
className: "text-sm text-muted-foreground",
|
|
1285
1307
|
children: [
|
|
1286
1308
|
o("devportal.apiPlaygroundDescription", "Test GraphQL APIs in the context of"),
|
|
1287
1309
|
" ",
|
|
1288
|
-
/* @__PURE__ */
|
|
1289
|
-
t.appId && /* @__PURE__ */
|
|
1310
|
+
/* @__PURE__ */ G("strong", { children: t.name }),
|
|
1311
|
+
t.appId && /* @__PURE__ */ K("span", {
|
|
1290
1312
|
className: "ml-1 text-xs text-muted-foreground",
|
|
1291
1313
|
children: [
|
|
1292
1314
|
"(OAuth App: ",
|
|
@@ -1295,39 +1317,39 @@ var Ae = [
|
|
|
1295
1317
|
]
|
|
1296
1318
|
})
|
|
1297
1319
|
]
|
|
1298
|
-
})] }), /* @__PURE__ */
|
|
1320
|
+
})] }), /* @__PURE__ */ K("button", {
|
|
1299
1321
|
onClick: x,
|
|
1300
1322
|
className: "flex items-center gap-2 rounded-md border px-3 py-1.5 text-sm font-medium hover:bg-accent transition-colors",
|
|
1301
|
-
children: [/* @__PURE__ */
|
|
1323
|
+
children: [/* @__PURE__ */ G(ge, { size: 14 }), o("devportal.autoFillCredentials", "Auto-fill Credentials")]
|
|
1302
1324
|
})]
|
|
1303
1325
|
}),
|
|
1304
|
-
y && /* @__PURE__ */
|
|
1326
|
+
y && /* @__PURE__ */ K("div", {
|
|
1305
1327
|
className: "rounded-lg border bg-status-info-bg-subtle p-4 text-sm space-y-2",
|
|
1306
1328
|
children: [
|
|
1307
|
-
/* @__PURE__ */
|
|
1329
|
+
/* @__PURE__ */ G("p", {
|
|
1308
1330
|
className: "font-medium text-status-info-text",
|
|
1309
1331
|
children: o("devportal.authenticationGuide", "Authentication Guide")
|
|
1310
1332
|
}),
|
|
1311
|
-
/* @__PURE__ */
|
|
1333
|
+
/* @__PURE__ */ K("p", {
|
|
1312
1334
|
className: "text-status-info-text",
|
|
1313
1335
|
children: [
|
|
1314
1336
|
o("devportal.authenticationGuideText", "Your current session token has been filled in. For app-level authentication (Client Credentials flow), use the"),
|
|
1315
1337
|
" ",
|
|
1316
|
-
/* @__PURE__ */
|
|
1338
|
+
/* @__PURE__ */ G("strong", { children: o("devportal.oauthClientsTab", "OAuth Clients") }),
|
|
1317
1339
|
" ",
|
|
1318
1340
|
o("devportal.authenticationGuideText2", "tab to get the app's clientId and clientSecret, then call:")
|
|
1319
1341
|
]
|
|
1320
1342
|
}),
|
|
1321
|
-
/* @__PURE__ */
|
|
1343
|
+
/* @__PURE__ */ G("pre", {
|
|
1322
1344
|
className: "rounded bg-status-info-bg-subtle p-2 text-xs overflow-x-auto text-status-info-text",
|
|
1323
1345
|
children: "mutation {\n authenticateApp(input: {\n clientId: \"<your-client-id>\"\n clientSecret: \"<your-client-secret>\"\n scopes: []\n }) {\n accessToken\n tokenType\n expiresIn\n }\n}"
|
|
1324
1346
|
}),
|
|
1325
|
-
/* @__PURE__ */
|
|
1347
|
+
/* @__PURE__ */ K("p", {
|
|
1326
1348
|
className: "text-status-info-text",
|
|
1327
1349
|
children: [
|
|
1328
1350
|
o("devportal.useReturnedAccessToken", "Use the returned"),
|
|
1329
1351
|
" ",
|
|
1330
|
-
/* @__PURE__ */
|
|
1352
|
+
/* @__PURE__ */ G("code", {
|
|
1331
1353
|
className: "bg-status-info-bg-subtle px-1 rounded",
|
|
1332
1354
|
children: "accessToken"
|
|
1333
1355
|
}),
|
|
@@ -1335,79 +1357,79 @@ var Ae = [
|
|
|
1335
1357
|
o("devportal.asBearerToken", "as the Bearer token below.")
|
|
1336
1358
|
]
|
|
1337
1359
|
}),
|
|
1338
|
-
/* @__PURE__ */
|
|
1360
|
+
/* @__PURE__ */ G("button", {
|
|
1339
1361
|
onClick: () => b(!1),
|
|
1340
1362
|
className: "text-xs text-accent-blue hover:underline",
|
|
1341
1363
|
children: o("devportal.dismiss", "Dismiss")
|
|
1342
1364
|
})
|
|
1343
1365
|
]
|
|
1344
1366
|
}),
|
|
1345
|
-
/* @__PURE__ */
|
|
1367
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
|
|
1346
1368
|
className: "block text-sm font-medium mb-1",
|
|
1347
1369
|
children: o("devportal.gatewayEndpoint", "Gateway Endpoint")
|
|
1348
|
-
}), /* @__PURE__ */
|
|
1370
|
+
}), /* @__PURE__ */ K("div", {
|
|
1349
1371
|
className: "flex gap-2",
|
|
1350
|
-
children: [/* @__PURE__ */
|
|
1372
|
+
children: [/* @__PURE__ */ G("input", {
|
|
1351
1373
|
type: "text",
|
|
1352
1374
|
value: h,
|
|
1353
1375
|
onChange: (e) => g(e.target.value),
|
|
1354
1376
|
className: "flex-1 rounded-md border px-3 py-2 text-sm font-mono bg-background"
|
|
1355
|
-
}), /* @__PURE__ */
|
|
1377
|
+
}), /* @__PURE__ */ K("select", {
|
|
1356
1378
|
onChange: (e) => g(e.target.value),
|
|
1357
1379
|
className: "rounded-md border px-3 py-2 text-sm bg-background",
|
|
1358
1380
|
value: h,
|
|
1359
|
-
children: [/* @__PURE__ */
|
|
1381
|
+
children: [/* @__PURE__ */ G("option", {
|
|
1360
1382
|
value: `${n || "https://gw-global.local.burdenoff.com"}/global/graphql`,
|
|
1361
1383
|
children: o("devportal.globalGateway", "Global Gateway")
|
|
1362
|
-
}), /* @__PURE__ */
|
|
1384
|
+
}), /* @__PURE__ */ G("option", {
|
|
1363
1385
|
value: `${r || "https://gw-wspace.local.burdenoff.com"}/workspaces/graphql`,
|
|
1364
1386
|
children: o("devportal.workspaceGateway", "Workspace Gateway")
|
|
1365
1387
|
})]
|
|
1366
1388
|
})]
|
|
1367
1389
|
})] }),
|
|
1368
|
-
/* @__PURE__ */
|
|
1390
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
|
|
1369
1391
|
className: "block text-sm font-medium mb-1",
|
|
1370
1392
|
children: o("devportal.bearerToken", "Bearer Token")
|
|
1371
|
-
}), /* @__PURE__ */
|
|
1393
|
+
}), /* @__PURE__ */ G("input", {
|
|
1372
1394
|
type: "password",
|
|
1373
1395
|
value: _,
|
|
1374
1396
|
onChange: (e) => v(e.target.value),
|
|
1375
1397
|
placeholder: o("devportal.pasteAccessToken", "Paste access token here..."),
|
|
1376
1398
|
className: "w-full rounded-md border px-3 py-2 text-sm font-mono bg-background"
|
|
1377
1399
|
})] }),
|
|
1378
|
-
/* @__PURE__ */
|
|
1400
|
+
/* @__PURE__ */ K("div", {
|
|
1379
1401
|
className: "grid grid-cols-1 lg:grid-cols-2 gap-4",
|
|
1380
|
-
children: [/* @__PURE__ */
|
|
1402
|
+
children: [/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
|
|
1381
1403
|
className: "block text-sm font-medium mb-1",
|
|
1382
1404
|
children: o("devportal.query", "Query")
|
|
1383
|
-
}), /* @__PURE__ */
|
|
1405
|
+
}), /* @__PURE__ */ G("textarea", {
|
|
1384
1406
|
value: s,
|
|
1385
1407
|
onChange: (e) => c(e.target.value),
|
|
1386
1408
|
className: "w-full h-64 rounded-md border px-3 py-2 text-sm font-mono bg-background resize-y",
|
|
1387
1409
|
spellCheck: !1
|
|
1388
|
-
})] }), /* @__PURE__ */
|
|
1410
|
+
})] }), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
|
|
1389
1411
|
className: "block text-sm font-medium mb-1",
|
|
1390
1412
|
children: o("devportal.variablesJson", "Variables (JSON)")
|
|
1391
|
-
}), /* @__PURE__ */
|
|
1413
|
+
}), /* @__PURE__ */ G("textarea", {
|
|
1392
1414
|
value: l,
|
|
1393
1415
|
onChange: (e) => u(e.target.value),
|
|
1394
1416
|
className: "w-full h-64 rounded-md border px-3 py-2 text-sm font-mono bg-background resize-y",
|
|
1395
1417
|
spellCheck: !1
|
|
1396
1418
|
})] })]
|
|
1397
1419
|
}),
|
|
1398
|
-
/* @__PURE__ */
|
|
1420
|
+
/* @__PURE__ */ K("button", {
|
|
1399
1421
|
onClick: ee,
|
|
1400
1422
|
disabled: p,
|
|
1401
1423
|
className: "flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors disabled:opacity-50",
|
|
1402
|
-
children: [p ? /* @__PURE__ */
|
|
1424
|
+
children: [p ? /* @__PURE__ */ G(z, {
|
|
1403
1425
|
size: 16,
|
|
1404
1426
|
className: "animate-spin"
|
|
1405
|
-
}) : /* @__PURE__ */
|
|
1427
|
+
}) : /* @__PURE__ */ G(R, { size: 16 }), p ? o("devportal.executing", "Executing...") : o("devportal.executeQuery", "Execute Query")]
|
|
1406
1428
|
}),
|
|
1407
|
-
d && /* @__PURE__ */
|
|
1429
|
+
d && /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
|
|
1408
1430
|
className: "block text-sm font-medium mb-1",
|
|
1409
1431
|
children: o("devportal.response", "Response")
|
|
1410
|
-
}), /* @__PURE__ */
|
|
1432
|
+
}), /* @__PURE__ */ G("pre", {
|
|
1411
1433
|
className: "w-full max-h-96 overflow-auto rounded-md border bg-muted p-4 text-xs font-mono",
|
|
1412
1434
|
children: d
|
|
1413
1435
|
})] })
|
|
@@ -1419,45 +1441,45 @@ var Ae = [
|
|
|
1419
1441
|
r((await s(e)).downloadUrl);
|
|
1420
1442
|
} catch {}
|
|
1421
1443
|
}, [s, r]);
|
|
1422
|
-
return /* @__PURE__ */
|
|
1444
|
+
return /* @__PURE__ */ K("div", {
|
|
1423
1445
|
className: "space-y-1.5",
|
|
1424
1446
|
children: [
|
|
1425
|
-
/* @__PURE__ */
|
|
1447
|
+
/* @__PURE__ */ G("label", {
|
|
1426
1448
|
className: "text-sm font-medium",
|
|
1427
1449
|
children: e
|
|
1428
1450
|
}),
|
|
1429
|
-
/* @__PURE__ */
|
|
1451
|
+
/* @__PURE__ */ K("div", {
|
|
1430
1452
|
className: "flex gap-3 items-start",
|
|
1431
|
-
children: [/* @__PURE__ */
|
|
1453
|
+
children: [/* @__PURE__ */ K("div", {
|
|
1432
1454
|
className: t("relative shrink-0 w-20 rounded-lg border border-border bg-bg-sunken overflow-hidden flex items-center justify-center", o),
|
|
1433
|
-
children: [n ? /* @__PURE__ */
|
|
1455
|
+
children: [n ? /* @__PURE__ */ G("img", {
|
|
1434
1456
|
src: n,
|
|
1435
1457
|
alt: e,
|
|
1436
1458
|
className: "w-full h-full object-cover"
|
|
1437
|
-
}) : /* @__PURE__ */
|
|
1459
|
+
}) : /* @__PURE__ */ G(H, {
|
|
1438
1460
|
size: 18,
|
|
1439
1461
|
className: "text-text-secondary opacity-40"
|
|
1440
|
-
}), c && /* @__PURE__ */
|
|
1462
|
+
}), c && /* @__PURE__ */ K("div", {
|
|
1441
1463
|
className: "absolute inset-0 bg-black/40 flex flex-col items-center justify-center gap-1",
|
|
1442
|
-
children: [/* @__PURE__ */
|
|
1464
|
+
children: [/* @__PURE__ */ G(z, {
|
|
1443
1465
|
size: 14,
|
|
1444
1466
|
className: "animate-spin text-white"
|
|
1445
|
-
}), /* @__PURE__ */
|
|
1467
|
+
}), /* @__PURE__ */ K("span", {
|
|
1446
1468
|
className: "text-white text-xs",
|
|
1447
1469
|
children: [l, "%"]
|
|
1448
1470
|
})]
|
|
1449
1471
|
})]
|
|
1450
|
-
}), /* @__PURE__ */
|
|
1472
|
+
}), /* @__PURE__ */ K("div", {
|
|
1451
1473
|
className: "flex-1 space-y-1.5",
|
|
1452
1474
|
children: [
|
|
1453
|
-
/* @__PURE__ */
|
|
1475
|
+
/* @__PURE__ */ G("input", {
|
|
1454
1476
|
type: "url",
|
|
1455
1477
|
value: n,
|
|
1456
1478
|
onChange: (e) => r(e.target.value),
|
|
1457
1479
|
placeholder: "https://...",
|
|
1458
1480
|
className: "w-full rounded-md border border-border bg-bg-input px-3 py-1.5 text-sm placeholder:text-text-placeholder focus:outline-none focus:ring-2 focus:ring-primary/30"
|
|
1459
1481
|
}),
|
|
1460
|
-
/* @__PURE__ */
|
|
1482
|
+
/* @__PURE__ */ G("input", {
|
|
1461
1483
|
ref: d,
|
|
1462
1484
|
type: "file",
|
|
1463
1485
|
accept: a,
|
|
@@ -1467,21 +1489,21 @@ var Ae = [
|
|
|
1467
1489
|
t && f(t), e.target.value = "";
|
|
1468
1490
|
}
|
|
1469
1491
|
}),
|
|
1470
|
-
/* @__PURE__ */
|
|
1492
|
+
/* @__PURE__ */ K("button", {
|
|
1471
1493
|
type: "button",
|
|
1472
1494
|
disabled: c,
|
|
1473
1495
|
onClick: () => d.current?.click(),
|
|
1474
1496
|
className: "inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs font-medium hover:bg-muted transition-colors disabled:opacity-50",
|
|
1475
|
-
children: [/* @__PURE__ */
|
|
1497
|
+
children: [/* @__PURE__ */ G(H, { size: 11 }), c ? `Uploading… ${l}%` : "Upload image"]
|
|
1476
1498
|
}),
|
|
1477
|
-
u && /* @__PURE__ */
|
|
1499
|
+
u && /* @__PURE__ */ G("p", {
|
|
1478
1500
|
className: "text-xs text-status-error-text",
|
|
1479
1501
|
children: u
|
|
1480
1502
|
})
|
|
1481
1503
|
]
|
|
1482
1504
|
})]
|
|
1483
1505
|
}),
|
|
1484
|
-
i && /* @__PURE__ */
|
|
1506
|
+
i && /* @__PURE__ */ G("p", {
|
|
1485
1507
|
className: "text-xs text-text-secondary",
|
|
1486
1508
|
children: i
|
|
1487
1509
|
})
|
|
@@ -1500,45 +1522,45 @@ var Ae = [
|
|
|
1500
1522
|
]), l = (t) => {
|
|
1501
1523
|
n(e.filter((e, n) => n !== t));
|
|
1502
1524
|
};
|
|
1503
|
-
return /* @__PURE__ */
|
|
1525
|
+
return /* @__PURE__ */ K("div", {
|
|
1504
1526
|
className: "space-y-2",
|
|
1505
1527
|
children: [
|
|
1506
|
-
/* @__PURE__ */
|
|
1528
|
+
/* @__PURE__ */ G("label", {
|
|
1507
1529
|
className: "text-sm font-medium",
|
|
1508
1530
|
children: "Screenshots"
|
|
1509
1531
|
}),
|
|
1510
|
-
/* @__PURE__ */
|
|
1532
|
+
/* @__PURE__ */ K("div", {
|
|
1511
1533
|
className: "flex flex-wrap gap-3",
|
|
1512
|
-
children: [e.map((e, t) => /* @__PURE__ */
|
|
1534
|
+
children: [e.map((e, t) => /* @__PURE__ */ K("div", {
|
|
1513
1535
|
className: "relative group w-36 aspect-video rounded-lg border border-border overflow-hidden bg-bg-sunken",
|
|
1514
|
-
children: [/* @__PURE__ */
|
|
1536
|
+
children: [/* @__PURE__ */ G("img", {
|
|
1515
1537
|
src: e,
|
|
1516
1538
|
alt: `Screenshot ${t + 1}`,
|
|
1517
1539
|
className: "w-full h-full object-cover"
|
|
1518
|
-
}), /* @__PURE__ */
|
|
1540
|
+
}), /* @__PURE__ */ G("button", {
|
|
1519
1541
|
type: "button",
|
|
1520
1542
|
onClick: () => l(t),
|
|
1521
1543
|
className: "absolute top-1 right-1 rounded-full bg-black/60 text-white p-0.5 opacity-0 group-hover:opacity-100 transition-opacity",
|
|
1522
|
-
children: /* @__PURE__ */
|
|
1544
|
+
children: /* @__PURE__ */ G(Ce, { size: 12 })
|
|
1523
1545
|
})]
|
|
1524
|
-
}, t)), /* @__PURE__ */
|
|
1546
|
+
}, t)), /* @__PURE__ */ G("button", {
|
|
1525
1547
|
type: "button",
|
|
1526
1548
|
disabled: i,
|
|
1527
1549
|
onClick: () => s.current?.click(),
|
|
1528
1550
|
className: t("w-36 aspect-video rounded-lg border-2 border-dashed border-border flex flex-col items-center justify-center gap-1.5 text-text-secondary hover:border-border-strong hover:bg-bg-sunken transition-colors disabled:opacity-50"),
|
|
1529
|
-
children: i ? /* @__PURE__ */
|
|
1551
|
+
children: i ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(z, {
|
|
1530
1552
|
size: 18,
|
|
1531
1553
|
className: "animate-spin text-primary"
|
|
1532
|
-
}), /* @__PURE__ */
|
|
1554
|
+
}), /* @__PURE__ */ K("span", {
|
|
1533
1555
|
className: "text-xs",
|
|
1534
1556
|
children: [a, "%"]
|
|
1535
|
-
})] }) : /* @__PURE__ */
|
|
1557
|
+
})] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(H, { size: 18 }), /* @__PURE__ */ G("span", {
|
|
1536
1558
|
className: "text-xs",
|
|
1537
1559
|
children: "Add screenshot"
|
|
1538
1560
|
})] })
|
|
1539
1561
|
})]
|
|
1540
1562
|
}),
|
|
1541
|
-
/* @__PURE__ */
|
|
1563
|
+
/* @__PURE__ */ G("input", {
|
|
1542
1564
|
ref: s,
|
|
1543
1565
|
type: "file",
|
|
1544
1566
|
accept: "image/png,image/jpeg,image/webp,image/gif",
|
|
@@ -1548,7 +1570,7 @@ var Ae = [
|
|
|
1548
1570
|
t && c(t), e.target.value = "";
|
|
1549
1571
|
}
|
|
1550
1572
|
}),
|
|
1551
|
-
o && /* @__PURE__ */
|
|
1573
|
+
o && /* @__PURE__ */ G("p", {
|
|
1552
1574
|
className: "text-xs text-status-error-text",
|
|
1553
1575
|
children: o
|
|
1554
1576
|
})
|
|
@@ -1659,15 +1681,15 @@ function Je(e) {
|
|
|
1659
1681
|
manifestJsonContent: typeof t.jsonContent == "string" ? t.jsonContent : typeof t.content == "string" ? t.content : ""
|
|
1660
1682
|
};
|
|
1661
1683
|
}
|
|
1662
|
-
var Ye =
|
|
1684
|
+
var Ye = q`
|
|
1663
1685
|
query MyPublisherForListing {
|
|
1664
1686
|
myPublisher { id }
|
|
1665
1687
|
}
|
|
1666
|
-
`, Xe =
|
|
1688
|
+
`, Xe = q`
|
|
1667
1689
|
query PublisherProductsForListing($publisherId: String!) {
|
|
1668
1690
|
products(filter: { publisherId: $publisherId }) { id productId }
|
|
1669
1691
|
}
|
|
1670
|
-
`, Ze =
|
|
1692
|
+
`, Ze = q`
|
|
1671
1693
|
mutation UpdateStoreProduct($input: UpdateProductInput!) {
|
|
1672
1694
|
updateProduct(input: $input) { id name description }
|
|
1673
1695
|
}
|
|
@@ -1681,7 +1703,7 @@ var Ye = J`
|
|
|
1681
1703
|
variables: { publisherId: x ?? "" },
|
|
1682
1704
|
fetchPolicy: "cache-first",
|
|
1683
1705
|
skip: !x
|
|
1684
|
-
}), te = S?.products?.find((e) => e.productId === n.id)?.id ?? null, [C] =
|
|
1706
|
+
}), te = S?.products?.find((e) => e.productId === n.id)?.id ?? null, [C] = J(Ze), [ne] = v(), [T, { loading: E }] = g();
|
|
1685
1707
|
ce(() => {
|
|
1686
1708
|
f(Je(y.current));
|
|
1687
1709
|
}, [n.id]);
|
|
@@ -1751,7 +1773,7 @@ var Ye = J`
|
|
|
1751
1773
|
} catch {
|
|
1752
1774
|
w("error");
|
|
1753
1775
|
}
|
|
1754
|
-
}, se = M(null), j = M(null), { upload: F, uploading: I, progress: ue, error: pe } = k(r, i, a, o), { upload: R, uploading: me, progress:
|
|
1776
|
+
}, se = M(null), j = M(null), { upload: F, uploading: I, progress: ue, error: pe } = k(r, i, a, o), { upload: R, uploading: me, progress: ge, error: _e } = k(r, i, a, o, "/DevPortal/Assets"), { upload: B, uploading: ve, progress: ye, error: V } = k(r, i, a, o, "/DevPortal/Assets"), { upload: U, uploading: Se, progress: Ce, error: we } = k(r, i, a, o, "/DevPortal/Assets"), Te = A(async (e) => {
|
|
1755
1777
|
let t = e.target.files?.[0];
|
|
1756
1778
|
if (t) {
|
|
1757
1779
|
e.target.value = "";
|
|
@@ -1763,7 +1785,7 @@ var Ye = J`
|
|
|
1763
1785
|
}));
|
|
1764
1786
|
} catch {}
|
|
1765
1787
|
}
|
|
1766
|
-
}, [F]),
|
|
1788
|
+
}, [F]), Ee = A(async (e) => {
|
|
1767
1789
|
e.preventDefault(), _(!1);
|
|
1768
1790
|
let t = e.dataTransfer.files?.[0];
|
|
1769
1791
|
if (t) try {
|
|
@@ -1773,7 +1795,7 @@ var Ye = J`
|
|
|
1773
1795
|
manifestRegistryUrl: e.downloadUrl
|
|
1774
1796
|
}));
|
|
1775
1797
|
} catch {}
|
|
1776
|
-
}, [F]),
|
|
1798
|
+
}, [F]), q = A((e) => {
|
|
1777
1799
|
let t = e.target.files?.[0];
|
|
1778
1800
|
if (!t) return;
|
|
1779
1801
|
let n = new FileReader();
|
|
@@ -1808,9 +1830,9 @@ var Ye = J`
|
|
|
1808
1830
|
compatibility: { minPlatformVersion: d.manifestMinPlatformVersion }
|
|
1809
1831
|
}, i = new Blob([JSON.stringify(r, null, 2)], { type: "application/json" }), a = URL.createObjectURL(i), o = document.createElement("a");
|
|
1810
1832
|
o.href = a, o.download = `${n.slug}-manifest.json`, o.click(), URL.revokeObjectURL(a);
|
|
1811
|
-
}, [n.slug, d]), Oe = Ge.has(d.manifestItemType),
|
|
1833
|
+
}, [n.slug, d]), Oe = Ge.has(d.manifestItemType), ke = d.manifestInstallType === "builtin", Ae = d.pricingType !== "FREE", je = d.manifestRegistryUrl ? d.manifestRegistryUrl.split("/").pop()?.split("?")[0] ?? "" : "";
|
|
1812
1834
|
n.status;
|
|
1813
|
-
let
|
|
1835
|
+
let Me = n.status === "SUBMITTED", X = n.status === "PUBLISHED", Z = n.appType === "NODE" || n.appType === "WORKFLOW", Ne = [
|
|
1814
1836
|
{
|
|
1815
1837
|
label: "Short description",
|
|
1816
1838
|
done: !!d.shortDescription.trim()
|
|
@@ -1832,37 +1854,37 @@ var Ye = J`
|
|
|
1832
1854
|
done: !!d.termsOfServiceUrl.trim()
|
|
1833
1855
|
}
|
|
1834
1856
|
], Pe = Ne.filter((e) => e.done).length, Fe = Ne.length;
|
|
1835
|
-
return /* @__PURE__ */
|
|
1857
|
+
return /* @__PURE__ */ K("div", {
|
|
1836
1858
|
className: "space-y-8 max-w-3xl",
|
|
1837
1859
|
children: [
|
|
1838
|
-
/* @__PURE__ */
|
|
1860
|
+
/* @__PURE__ */ K("div", {
|
|
1839
1861
|
className: "rounded-lg border border-primary/20 bg-primary/5 px-4 py-3 space-y-2",
|
|
1840
|
-
children: [/* @__PURE__ */
|
|
1862
|
+
children: [/* @__PURE__ */ G("p", {
|
|
1841
1863
|
className: "text-sm font-semibold text-primary",
|
|
1842
1864
|
children: u("devportal.listingTabPurpose", "What is this tab for?")
|
|
1843
|
-
}), /* @__PURE__ */
|
|
1865
|
+
}), /* @__PURE__ */ K("ul", {
|
|
1844
1866
|
className: "text-sm text-muted-foreground space-y-1 list-none pl-0",
|
|
1845
1867
|
children: [
|
|
1846
|
-
/* @__PURE__ */
|
|
1868
|
+
/* @__PURE__ */ K("li", {
|
|
1847
1869
|
className: "flex items-start gap-2",
|
|
1848
|
-
children: [/* @__PURE__ */
|
|
1870
|
+
children: [/* @__PURE__ */ G(xe, {
|
|
1849
1871
|
size: 14,
|
|
1850
1872
|
className: "mt-0.5 shrink-0 text-primary"
|
|
1851
|
-
}), /* @__PURE__ */
|
|
1852
|
-
/* @__PURE__ */
|
|
1873
|
+
}), /* @__PURE__ */ K("span", { children: [
|
|
1874
|
+
/* @__PURE__ */ G("strong", { children: u("devportal.thisTab", "This tab") }),
|
|
1853
1875
|
" ",
|
|
1854
1876
|
u("devportal.listingTabDesc", "controls your store card — the name, description, icon and screenshots users see in the marketplace. Save changes here any time without creating a new release.")
|
|
1855
1877
|
] })]
|
|
1856
1878
|
}),
|
|
1857
|
-
|
|
1879
|
+
Z && /* @__PURE__ */ K("li", {
|
|
1858
1880
|
className: "flex items-start gap-2",
|
|
1859
|
-
children: [/* @__PURE__ */
|
|
1881
|
+
children: [/* @__PURE__ */ G(de, {
|
|
1860
1882
|
size: 14,
|
|
1861
1883
|
className: "mt-0.5 shrink-0 text-primary"
|
|
1862
|
-
}), /* @__PURE__ */
|
|
1884
|
+
}), /* @__PURE__ */ K("span", { children: [
|
|
1863
1885
|
u("devportal.versionsTabDesc", "To release a new version (ZIP package + manifest), go to the"),
|
|
1864
1886
|
" ",
|
|
1865
|
-
/* @__PURE__ */
|
|
1887
|
+
/* @__PURE__ */ G("button", {
|
|
1866
1888
|
type: "button",
|
|
1867
1889
|
className: "underline text-primary hover:no-underline",
|
|
1868
1890
|
onClick: () => s?.(`${c}/apps/${n.id}/versions`),
|
|
@@ -1871,26 +1893,26 @@ var Ye = J`
|
|
|
1871
1893
|
"."
|
|
1872
1894
|
] })]
|
|
1873
1895
|
}),
|
|
1874
|
-
/* @__PURE__ */
|
|
1896
|
+
/* @__PURE__ */ K("li", {
|
|
1875
1897
|
className: "flex items-start gap-2",
|
|
1876
|
-
children: [/* @__PURE__ */
|
|
1898
|
+
children: [/* @__PURE__ */ G(be, {
|
|
1877
1899
|
size: 14,
|
|
1878
1900
|
className: "mt-0.5 shrink-0 text-primary"
|
|
1879
|
-
}), /* @__PURE__ */
|
|
1901
|
+
}), /* @__PURE__ */ G("span", { children: u("devportal.submitTabDesc", "When your listing is ready, click \"Submit for Review\" to send it to the review team.") })]
|
|
1880
1902
|
})
|
|
1881
1903
|
]
|
|
1882
1904
|
})]
|
|
1883
1905
|
}),
|
|
1884
|
-
!
|
|
1906
|
+
!X && /* @__PURE__ */ K("div", {
|
|
1885
1907
|
className: "rounded-lg border bg-card p-4 space-y-3",
|
|
1886
|
-
children: [/* @__PURE__ */
|
|
1908
|
+
children: [/* @__PURE__ */ K("div", {
|
|
1887
1909
|
className: "flex items-center justify-between",
|
|
1888
|
-
children: [/* @__PURE__ */
|
|
1910
|
+
children: [/* @__PURE__ */ K("p", {
|
|
1889
1911
|
className: "text-sm font-medium",
|
|
1890
1912
|
children: [
|
|
1891
1913
|
u("devportal.listingCompleteness", "Listing completeness"),
|
|
1892
1914
|
" ",
|
|
1893
|
-
/* @__PURE__ */
|
|
1915
|
+
/* @__PURE__ */ K("span", {
|
|
1894
1916
|
className: t("ml-1 text-xs font-semibold", Pe === Fe ? "text-status-success-text" : "text-status-warning-text"),
|
|
1895
1917
|
children: [
|
|
1896
1918
|
Pe,
|
|
@@ -1899,38 +1921,38 @@ var Ye = J`
|
|
|
1899
1921
|
]
|
|
1900
1922
|
})
|
|
1901
1923
|
]
|
|
1902
|
-
}), Pe === Fe && /* @__PURE__ */
|
|
1924
|
+
}), Pe === Fe && /* @__PURE__ */ K("span", {
|
|
1903
1925
|
className: "text-xs text-status-success-text flex items-center gap-1",
|
|
1904
|
-
children: [/* @__PURE__ */
|
|
1926
|
+
children: [/* @__PURE__ */ G(L, { size: 12 }), u("devportal.readyToSubmit", "Ready to submit")]
|
|
1905
1927
|
})]
|
|
1906
|
-
}), /* @__PURE__ */
|
|
1928
|
+
}), /* @__PURE__ */ G("div", {
|
|
1907
1929
|
className: "grid grid-cols-2 sm:grid-cols-3 gap-2",
|
|
1908
|
-
children: Ne.map((e) => /* @__PURE__ */
|
|
1930
|
+
children: Ne.map((e) => /* @__PURE__ */ K("div", {
|
|
1909
1931
|
className: "flex items-center gap-1.5 text-xs",
|
|
1910
|
-
children: [e.done ? /* @__PURE__ */
|
|
1932
|
+
children: [e.done ? /* @__PURE__ */ G(L, {
|
|
1911
1933
|
size: 12,
|
|
1912
1934
|
className: "text-status-success-text shrink-0"
|
|
1913
|
-
}) : /* @__PURE__ */
|
|
1935
|
+
}) : /* @__PURE__ */ G(le, {
|
|
1914
1936
|
size: 12,
|
|
1915
1937
|
className: "text-status-warning-text shrink-0"
|
|
1916
|
-
}), /* @__PURE__ */
|
|
1938
|
+
}), /* @__PURE__ */ G("span", {
|
|
1917
1939
|
className: e.done ? "text-foreground" : "text-muted-foreground",
|
|
1918
1940
|
children: e.label
|
|
1919
1941
|
})]
|
|
1920
1942
|
}, e.label))
|
|
1921
1943
|
})]
|
|
1922
1944
|
}),
|
|
1923
|
-
|
|
1945
|
+
X ? /* @__PURE__ */ K("div", {
|
|
1924
1946
|
className: "flex items-start gap-3 rounded-lg border border-success/30 bg-success/10 px-4 py-3",
|
|
1925
|
-
children: [/* @__PURE__ */
|
|
1947
|
+
children: [/* @__PURE__ */ G(L, {
|
|
1926
1948
|
size: 16,
|
|
1927
1949
|
className: "text-success mt-0.5 shrink-0"
|
|
1928
|
-
}), /* @__PURE__ */
|
|
1950
|
+
}), /* @__PURE__ */ K("div", {
|
|
1929
1951
|
className: "text-sm",
|
|
1930
|
-
children: [/* @__PURE__ */
|
|
1952
|
+
children: [/* @__PURE__ */ G("span", {
|
|
1931
1953
|
className: "font-medium text-success",
|
|
1932
1954
|
children: u("devportal.storeListing.published", "Published")
|
|
1933
|
-
}), n.publishedAt && /* @__PURE__ */
|
|
1955
|
+
}), n.publishedAt && /* @__PURE__ */ K("span", {
|
|
1934
1956
|
className: "text-muted-foreground ml-2",
|
|
1935
1957
|
children: [
|
|
1936
1958
|
u("devportal.storeListing.since", "since"),
|
|
@@ -1939,66 +1961,66 @@ var Ye = J`
|
|
|
1939
1961
|
]
|
|
1940
1962
|
})]
|
|
1941
1963
|
})]
|
|
1942
|
-
}) :
|
|
1964
|
+
}) : Me ? /* @__PURE__ */ K("div", {
|
|
1943
1965
|
className: "flex items-start gap-3 rounded-lg border border-primary/30 bg-primary/5 px-4 py-3",
|
|
1944
|
-
children: [/* @__PURE__ */
|
|
1966
|
+
children: [/* @__PURE__ */ G(de, {
|
|
1945
1967
|
size: 16,
|
|
1946
1968
|
className: "text-primary mt-0.5 shrink-0"
|
|
1947
|
-
}), /* @__PURE__ */
|
|
1969
|
+
}), /* @__PURE__ */ K("div", {
|
|
1948
1970
|
className: "text-sm",
|
|
1949
1971
|
children: [
|
|
1950
|
-
/* @__PURE__ */
|
|
1972
|
+
/* @__PURE__ */ G("span", {
|
|
1951
1973
|
className: "font-medium text-primary",
|
|
1952
1974
|
children: u("devportal.storeListing.underReview", "Submitted for review")
|
|
1953
1975
|
}),
|
|
1954
|
-
n.submittedAt && /* @__PURE__ */
|
|
1976
|
+
n.submittedAt && /* @__PURE__ */ G("span", {
|
|
1955
1977
|
className: "text-muted-foreground ml-2",
|
|
1956
1978
|
children: new Date(n.submittedAt).toLocaleDateString()
|
|
1957
1979
|
}),
|
|
1958
|
-
n.reviewStatus && /* @__PURE__ */
|
|
1980
|
+
n.reviewStatus && /* @__PURE__ */ K("span", {
|
|
1959
1981
|
className: "text-muted-foreground ml-2",
|
|
1960
1982
|
children: ["· ", n.reviewStatus]
|
|
1961
1983
|
})
|
|
1962
1984
|
]
|
|
1963
1985
|
})]
|
|
1964
|
-
}) : /* @__PURE__ */
|
|
1986
|
+
}) : /* @__PURE__ */ K("div", {
|
|
1965
1987
|
className: "flex items-start gap-3 rounded-lg border border-warning/30 bg-warning/5 px-4 py-3",
|
|
1966
|
-
children: [/* @__PURE__ */
|
|
1988
|
+
children: [/* @__PURE__ */ G(le, {
|
|
1967
1989
|
size: 16,
|
|
1968
1990
|
className: "text-warning mt-0.5 shrink-0"
|
|
1969
|
-
}), /* @__PURE__ */
|
|
1991
|
+
}), /* @__PURE__ */ K("div", {
|
|
1970
1992
|
className: "text-sm",
|
|
1971
|
-
children: [/* @__PURE__ */
|
|
1993
|
+
children: [/* @__PURE__ */ G("span", {
|
|
1972
1994
|
className: "font-medium text-warning",
|
|
1973
1995
|
children: u("devportal.storeListing.draft", "Draft")
|
|
1974
|
-
}), /* @__PURE__ */
|
|
1996
|
+
}), /* @__PURE__ */ G("span", {
|
|
1975
1997
|
className: "text-muted-foreground ml-2",
|
|
1976
1998
|
children: u("devportal.storeListing.draftHint", "Complete your store listing and submit for review to publish.")
|
|
1977
1999
|
})]
|
|
1978
2000
|
})]
|
|
1979
2001
|
}),
|
|
1980
|
-
|
|
2002
|
+
Z ? /* @__PURE__ */ K("div", {
|
|
1981
2003
|
className: "rounded-lg border border-border-subtle bg-bg-sunken px-4 py-4 flex items-start gap-3",
|
|
1982
|
-
children: [/* @__PURE__ */
|
|
2004
|
+
children: [/* @__PURE__ */ G(he, {
|
|
1983
2005
|
size: 16,
|
|
1984
2006
|
className: "shrink-0 mt-0.5 text-muted-foreground"
|
|
1985
|
-
}), /* @__PURE__ */
|
|
2007
|
+
}), /* @__PURE__ */ K("div", {
|
|
1986
2008
|
className: "text-sm space-y-1",
|
|
1987
|
-
children: [/* @__PURE__ */
|
|
2009
|
+
children: [/* @__PURE__ */ G("p", {
|
|
1988
2010
|
className: "font-medium",
|
|
1989
2011
|
children: u("devportal.packageManagedInVersions", "ZIP package & manifest are managed in Versions")
|
|
1990
|
-
}), /* @__PURE__ */
|
|
2012
|
+
}), /* @__PURE__ */ G("p", {
|
|
1991
2013
|
className: "text-muted-foreground",
|
|
1992
2014
|
children: u("devportal.packageManagedInVersionsDesc", "For NODE and WORKFLOW types, each release is uploaded through the Versions page — including the ZIP archive and manifest.json. This keeps your code releases separate from your store card.")
|
|
1993
2015
|
})]
|
|
1994
2016
|
})]
|
|
1995
|
-
}) : /* @__PURE__ */
|
|
2017
|
+
}) : /* @__PURE__ */ G(b, {
|
|
1996
2018
|
title: u("devportal.package", "Package"),
|
|
1997
2019
|
description: u("devportal.packageDescription", "Technical configuration — how FluidGrid installs and runs this item"),
|
|
1998
|
-
children: /* @__PURE__ */
|
|
2020
|
+
children: /* @__PURE__ */ K("div", {
|
|
1999
2021
|
className: "space-y-6",
|
|
2000
2022
|
children: [
|
|
2001
|
-
/* @__PURE__ */
|
|
2023
|
+
/* @__PURE__ */ G(re, {
|
|
2002
2024
|
label: u("devportal.storeItemType", "Item Type"),
|
|
2003
2025
|
value: d.manifestItemType,
|
|
2004
2026
|
onChange: (e) => {
|
|
@@ -2009,14 +2031,14 @@ var Ye = J`
|
|
|
2009
2031
|
placeholder: u("devportal.selectItemType", "Select item type…"),
|
|
2010
2032
|
hint: u("devportal.storeItemTypeHint", "Determines how this item is categorised and how the platform runs it")
|
|
2011
2033
|
}),
|
|
2012
|
-
/* @__PURE__ */
|
|
2034
|
+
/* @__PURE__ */ K("div", {
|
|
2013
2035
|
className: "grid gap-4 sm:grid-cols-2",
|
|
2014
|
-
children: [/* @__PURE__ */
|
|
2036
|
+
children: [/* @__PURE__ */ G(D, {
|
|
2015
2037
|
label: u("devportal.manifestDisplayName", "Display Name"),
|
|
2016
2038
|
value: d.manifestDisplayName,
|
|
2017
2039
|
onChange: (e) => O("manifestDisplayName", e.target.value),
|
|
2018
2040
|
placeholder: "My Awesome Node"
|
|
2019
|
-
}), /* @__PURE__ */
|
|
2041
|
+
}), /* @__PURE__ */ G(D, {
|
|
2020
2042
|
label: u("devportal.manifestVersion", "Version"),
|
|
2021
2043
|
value: d.manifestVersion,
|
|
2022
2044
|
onChange: (e) => O("manifestVersion", e.target.value),
|
|
@@ -2024,7 +2046,7 @@ var Ye = J`
|
|
|
2024
2046
|
hint: u("devportal.semverHint", "Semantic version (MAJOR.MINOR.PATCH)")
|
|
2025
2047
|
})]
|
|
2026
2048
|
}),
|
|
2027
|
-
Oe && /* @__PURE__ */
|
|
2049
|
+
Oe && /* @__PURE__ */ G(ie, {
|
|
2028
2050
|
label: u("devportal.jsonContent", d.manifestItemType === "workflow" ? "Workflow Definition (JSON)" : "Template Definition (JSON)"),
|
|
2029
2051
|
value: d.manifestJsonContent,
|
|
2030
2052
|
onChange: (e) => O("manifestJsonContent", e.target.value),
|
|
@@ -2032,62 +2054,62 @@ var Ye = J`
|
|
|
2032
2054
|
placeholder: "{\n \"nodes\": [],\n \"edges\": []\n}",
|
|
2033
2055
|
hint: u("devportal.jsonContentHint", "Paste the full JSON definition. Stored and applied directly — no zip needed.")
|
|
2034
2056
|
}),
|
|
2035
|
-
!Oe && /* @__PURE__ */
|
|
2057
|
+
!Oe && /* @__PURE__ */ K("div", {
|
|
2036
2058
|
className: "space-y-3",
|
|
2037
2059
|
children: [
|
|
2038
|
-
/* @__PURE__ */
|
|
2060
|
+
/* @__PURE__ */ K("div", {
|
|
2039
2061
|
className: "flex items-center justify-between flex-wrap gap-2",
|
|
2040
|
-
children: [/* @__PURE__ */
|
|
2062
|
+
children: [/* @__PURE__ */ G("label", {
|
|
2041
2063
|
className: "text-sm font-medium",
|
|
2042
2064
|
children: u("devportal.packageFile", "Package File")
|
|
2043
|
-
}), /* @__PURE__ */
|
|
2065
|
+
}), /* @__PURE__ */ K("label", {
|
|
2044
2066
|
className: "flex items-center gap-2 text-sm cursor-pointer select-none",
|
|
2045
|
-
children: [/* @__PURE__ */
|
|
2067
|
+
children: [/* @__PURE__ */ G("input", {
|
|
2046
2068
|
type: "checkbox",
|
|
2047
|
-
checked:
|
|
2069
|
+
checked: ke,
|
|
2048
2070
|
onChange: (e) => O("manifestInstallType", e.target.checked ? "builtin" : "zip"),
|
|
2049
2071
|
className: "h-4 w-4 rounded border-border accent-primary"
|
|
2050
|
-
}), /* @__PURE__ */
|
|
2072
|
+
}), /* @__PURE__ */ G("span", {
|
|
2051
2073
|
className: "text-text-secondary",
|
|
2052
2074
|
children: u("devportal.builtinToggle", "Built-in (pre-installed, no upload needed)")
|
|
2053
2075
|
})]
|
|
2054
2076
|
})]
|
|
2055
2077
|
}),
|
|
2056
|
-
!
|
|
2057
|
-
/* @__PURE__ */
|
|
2078
|
+
!ke && /* @__PURE__ */ K(W, { children: [
|
|
2079
|
+
/* @__PURE__ */ K("div", {
|
|
2058
2080
|
className: "flex gap-3 rounded-lg border border-border-subtle bg-bg-sunken p-3 text-sm text-text-secondary",
|
|
2059
|
-
children: [/* @__PURE__ */
|
|
2081
|
+
children: [/* @__PURE__ */ G(he, {
|
|
2060
2082
|
size: 15,
|
|
2061
2083
|
className: "mt-0.5 shrink-0"
|
|
2062
|
-
}), /* @__PURE__ */
|
|
2084
|
+
}), /* @__PURE__ */ K("span", { children: [
|
|
2063
2085
|
u("devportal.zipModelHint", "Package your code and a "),
|
|
2064
|
-
/* @__PURE__ */
|
|
2086
|
+
/* @__PURE__ */ G("code", {
|
|
2065
2087
|
className: "rounded bg-muted px-1 py-0.5 font-mono text-xs",
|
|
2066
2088
|
children: "manifest.json"
|
|
2067
2089
|
}),
|
|
2068
2090
|
u("devportal.zipModelHint2", " into a single zip — like a Chrome extension. Upload it below and FluidGrid handles the rest automatically.")
|
|
2069
2091
|
] })]
|
|
2070
2092
|
}),
|
|
2071
|
-
/* @__PURE__ */
|
|
2093
|
+
/* @__PURE__ */ K("div", {
|
|
2072
2094
|
onDragOver: (e) => {
|
|
2073
2095
|
e.preventDefault(), _(!0);
|
|
2074
2096
|
},
|
|
2075
2097
|
onDragLeave: () => _(!1),
|
|
2076
|
-
onDrop: (e) => void
|
|
2098
|
+
onDrop: (e) => void Ee(e),
|
|
2077
2099
|
onClick: () => !I && j.current?.click(),
|
|
2078
2100
|
className: t("relative flex flex-col items-center justify-center gap-3 rounded-xl border-2 border-dashed px-6 py-10 text-center transition-colors cursor-pointer", h ? "border-primary bg-primary/5" : "border-border hover:border-border-strong hover:bg-bg-sunken", I && "pointer-events-none opacity-75"),
|
|
2079
|
-
children: [/* @__PURE__ */
|
|
2101
|
+
children: [/* @__PURE__ */ G("input", {
|
|
2080
2102
|
ref: j,
|
|
2081
2103
|
type: "file",
|
|
2082
2104
|
accept: ".zip,application/zip,application/x-zip-compressed",
|
|
2083
2105
|
className: "hidden",
|
|
2084
|
-
onChange: (e) => void
|
|
2085
|
-
}), I ? /* @__PURE__ */
|
|
2086
|
-
/* @__PURE__ */
|
|
2106
|
+
onChange: (e) => void Te(e)
|
|
2107
|
+
}), I ? /* @__PURE__ */ K(W, { children: [
|
|
2108
|
+
/* @__PURE__ */ G(z, {
|
|
2087
2109
|
size: 28,
|
|
2088
2110
|
className: "animate-spin text-primary"
|
|
2089
2111
|
}),
|
|
2090
|
-
/* @__PURE__ */
|
|
2112
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ K("p", {
|
|
2091
2113
|
className: "text-sm font-medium",
|
|
2092
2114
|
children: [
|
|
2093
2115
|
u("devportal.uploading", "Uploading…"),
|
|
@@ -2095,78 +2117,78 @@ var Ye = J`
|
|
|
2095
2117
|
ue,
|
|
2096
2118
|
"%"
|
|
2097
2119
|
]
|
|
2098
|
-
}), /* @__PURE__ */
|
|
2120
|
+
}), /* @__PURE__ */ G("p", {
|
|
2099
2121
|
className: "text-xs text-text-secondary mt-0.5",
|
|
2100
2122
|
children: u("devportal.uploadingHint", "Stored securely in your workspace")
|
|
2101
2123
|
})] }),
|
|
2102
|
-
/* @__PURE__ */
|
|
2124
|
+
/* @__PURE__ */ G("div", {
|
|
2103
2125
|
className: "w-48 h-1.5 rounded-full bg-muted overflow-hidden",
|
|
2104
|
-
children: /* @__PURE__ */
|
|
2126
|
+
children: /* @__PURE__ */ G("div", {
|
|
2105
2127
|
className: "h-full bg-primary transition-all",
|
|
2106
2128
|
style: { width: `${ue}%` }
|
|
2107
2129
|
})
|
|
2108
2130
|
})
|
|
2109
|
-
] }) :
|
|
2131
|
+
] }) : je ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(L, {
|
|
2110
2132
|
size: 28,
|
|
2111
2133
|
className: "text-status-success-text"
|
|
2112
|
-
}), /* @__PURE__ */
|
|
2134
|
+
}), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
2113
2135
|
className: "text-sm font-medium",
|
|
2114
|
-
children:
|
|
2115
|
-
}), /* @__PURE__ */
|
|
2136
|
+
children: je
|
|
2137
|
+
}), /* @__PURE__ */ G("p", {
|
|
2116
2138
|
className: "text-xs text-text-secondary mt-0.5",
|
|
2117
2139
|
children: u("devportal.clickToReplace", "Click or drag to replace")
|
|
2118
|
-
})] })] }) : /* @__PURE__ */
|
|
2140
|
+
})] })] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(H, {
|
|
2119
2141
|
size: 28,
|
|
2120
2142
|
className: "text-text-secondary"
|
|
2121
|
-
}), /* @__PURE__ */
|
|
2143
|
+
}), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
2122
2144
|
className: "text-sm font-medium",
|
|
2123
2145
|
children: u("devportal.dropZipHere", "Drop your .zip here")
|
|
2124
|
-
}), /* @__PURE__ */
|
|
2146
|
+
}), /* @__PURE__ */ G("p", {
|
|
2125
2147
|
className: "text-xs text-text-secondary mt-0.5",
|
|
2126
2148
|
children: u("devportal.orClickToBrowse", "or click to browse")
|
|
2127
2149
|
})] })] })]
|
|
2128
2150
|
}),
|
|
2129
|
-
pe && /* @__PURE__ */
|
|
2151
|
+
pe && /* @__PURE__ */ G("p", {
|
|
2130
2152
|
className: "text-xs text-status-error-text",
|
|
2131
2153
|
children: pe
|
|
2132
2154
|
})
|
|
2133
2155
|
] }),
|
|
2134
|
-
|
|
2156
|
+
ke && /* @__PURE__ */ K("div", {
|
|
2135
2157
|
className: "flex gap-3 rounded-lg border border-border-subtle bg-bg-sunken p-3 text-sm text-text-secondary",
|
|
2136
|
-
children: [/* @__PURE__ */
|
|
2158
|
+
children: [/* @__PURE__ */ G(he, {
|
|
2137
2159
|
size: 15,
|
|
2138
2160
|
className: "mt-0.5 shrink-0"
|
|
2139
|
-
}), /* @__PURE__ */
|
|
2161
|
+
}), /* @__PURE__ */ G("span", { children: u("devportal.builtinHint", "Built-in items are pre-installed by the platform. No package upload is needed.") })]
|
|
2140
2162
|
})
|
|
2141
2163
|
]
|
|
2142
2164
|
}),
|
|
2143
|
-
/* @__PURE__ */
|
|
2165
|
+
/* @__PURE__ */ K("div", {
|
|
2144
2166
|
className: "flex flex-wrap items-center gap-2 border-t pt-4",
|
|
2145
2167
|
children: [
|
|
2146
|
-
/* @__PURE__ */
|
|
2168
|
+
/* @__PURE__ */ G("input", {
|
|
2147
2169
|
ref: se,
|
|
2148
2170
|
type: "file",
|
|
2149
2171
|
accept: ".json,application/json",
|
|
2150
2172
|
className: "hidden",
|
|
2151
|
-
onChange:
|
|
2173
|
+
onChange: q
|
|
2152
2174
|
}),
|
|
2153
|
-
/* @__PURE__ */
|
|
2175
|
+
/* @__PURE__ */ G("span", {
|
|
2154
2176
|
className: "text-xs text-text-secondary mr-1",
|
|
2155
2177
|
children: "manifest.json:"
|
|
2156
2178
|
}),
|
|
2157
|
-
/* @__PURE__ */
|
|
2179
|
+
/* @__PURE__ */ K("button", {
|
|
2158
2180
|
type: "button",
|
|
2159
2181
|
onClick: () => se.current?.click(),
|
|
2160
2182
|
className: "inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs font-medium hover:bg-muted transition-colors",
|
|
2161
|
-
children: [/* @__PURE__ */
|
|
2183
|
+
children: [/* @__PURE__ */ G(H, { size: 12 }), u("devportal.importManifest", "Import")]
|
|
2162
2184
|
}),
|
|
2163
|
-
/* @__PURE__ */
|
|
2185
|
+
/* @__PURE__ */ K("button", {
|
|
2164
2186
|
type: "button",
|
|
2165
2187
|
onClick: De,
|
|
2166
2188
|
className: "inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs font-medium hover:bg-muted transition-colors",
|
|
2167
|
-
children: [/* @__PURE__ */
|
|
2189
|
+
children: [/* @__PURE__ */ G(fe, { size: 12 }), u("devportal.exportManifest", "Export")]
|
|
2168
2190
|
}),
|
|
2169
|
-
/* @__PURE__ */
|
|
2191
|
+
/* @__PURE__ */ G("span", {
|
|
2170
2192
|
className: "text-xs text-text-secondary",
|
|
2171
2193
|
children: u("devportal.manifestTip", "— export to get a manifest.json to include inside your zip")
|
|
2172
2194
|
})
|
|
@@ -2175,15 +2197,15 @@ var Ye = J`
|
|
|
2175
2197
|
]
|
|
2176
2198
|
})
|
|
2177
2199
|
}),
|
|
2178
|
-
/* @__PURE__ */
|
|
2200
|
+
/* @__PURE__ */ G(b, {
|
|
2179
2201
|
title: u("devportal.storePresentation", "Store Presence"),
|
|
2180
2202
|
description: u("devportal.storePresentationDescription", "Visual assets and copy shown to users browsing the marketplace"),
|
|
2181
|
-
children: /* @__PURE__ */
|
|
2203
|
+
children: /* @__PURE__ */ K("div", {
|
|
2182
2204
|
className: "space-y-5",
|
|
2183
2205
|
children: [
|
|
2184
|
-
/* @__PURE__ */
|
|
2206
|
+
/* @__PURE__ */ K("div", {
|
|
2185
2207
|
className: "grid gap-5 sm:grid-cols-2",
|
|
2186
|
-
children: [/* @__PURE__ */
|
|
2208
|
+
children: [/* @__PURE__ */ G(Ue, {
|
|
2187
2209
|
label: u("devportal.iconUrl", "Icon"),
|
|
2188
2210
|
value: d.iconUrl,
|
|
2189
2211
|
onChange: (e) => O("iconUrl", e),
|
|
@@ -2191,28 +2213,28 @@ var Ye = J`
|
|
|
2191
2213
|
aspectClass: "aspect-square",
|
|
2192
2214
|
upload: R,
|
|
2193
2215
|
uploading: me,
|
|
2194
|
-
progress:
|
|
2195
|
-
error:
|
|
2196
|
-
}), /* @__PURE__ */
|
|
2216
|
+
progress: ge,
|
|
2217
|
+
error: _e
|
|
2218
|
+
}), /* @__PURE__ */ G(Ue, {
|
|
2197
2219
|
label: u("devportal.bannerUrl", "Banner"),
|
|
2198
2220
|
value: d.bannerUrl,
|
|
2199
2221
|
onChange: (e) => O("bannerUrl", e),
|
|
2200
2222
|
hint: u("devportal.bannerUrlHint", "1280×640 px recommended"),
|
|
2201
2223
|
aspectClass: "aspect-video",
|
|
2202
|
-
upload:
|
|
2203
|
-
uploading:
|
|
2204
|
-
progress:
|
|
2205
|
-
error:
|
|
2224
|
+
upload: B,
|
|
2225
|
+
uploading: ve,
|
|
2226
|
+
progress: ye,
|
|
2227
|
+
error: V
|
|
2206
2228
|
})]
|
|
2207
2229
|
}),
|
|
2208
|
-
/* @__PURE__ */
|
|
2230
|
+
/* @__PURE__ */ G(D, {
|
|
2209
2231
|
label: u("devportal.videoUrl", "Demo Video URL"),
|
|
2210
2232
|
value: d.videoUrl,
|
|
2211
2233
|
onChange: (e) => O("videoUrl", e.target.value),
|
|
2212
2234
|
placeholder: "https://...",
|
|
2213
2235
|
hint: u("devportal.videoUrlHint", "YouTube or Vimeo embed URL")
|
|
2214
2236
|
}),
|
|
2215
|
-
/* @__PURE__ */
|
|
2237
|
+
/* @__PURE__ */ G(ie, {
|
|
2216
2238
|
label: u("devportal.shortDescription", "Short Description"),
|
|
2217
2239
|
value: d.shortDescription,
|
|
2218
2240
|
onChange: (e) => O("shortDescription", e.target.value),
|
|
@@ -2220,62 +2242,62 @@ var Ye = J`
|
|
|
2220
2242
|
rows: 2,
|
|
2221
2243
|
hint: `${d.shortDescription.length}/200 · ${u("devportal.shortDescHint", "Shown in search results and cards")}`
|
|
2222
2244
|
}),
|
|
2223
|
-
/* @__PURE__ */
|
|
2245
|
+
/* @__PURE__ */ G(ie, {
|
|
2224
2246
|
label: u("devportal.longDescription", "Full Description"),
|
|
2225
2247
|
value: d.description,
|
|
2226
2248
|
onChange: (e) => O("description", e.target.value),
|
|
2227
2249
|
rows: 5,
|
|
2228
2250
|
hint: u("devportal.fullDescHint", "Markdown supported")
|
|
2229
2251
|
}),
|
|
2230
|
-
/* @__PURE__ */
|
|
2252
|
+
/* @__PURE__ */ G(We, {
|
|
2231
2253
|
urls: d.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean),
|
|
2232
2254
|
onChange: (e) => O("screenshotsText", e.join("\n")),
|
|
2233
|
-
upload:
|
|
2234
|
-
uploading:
|
|
2235
|
-
progress:
|
|
2236
|
-
error:
|
|
2255
|
+
upload: U,
|
|
2256
|
+
uploading: Se,
|
|
2257
|
+
progress: Ce,
|
|
2258
|
+
error: we
|
|
2237
2259
|
})
|
|
2238
2260
|
]
|
|
2239
2261
|
})
|
|
2240
2262
|
}),
|
|
2241
|
-
/* @__PURE__ */
|
|
2263
|
+
/* @__PURE__ */ G(b, {
|
|
2242
2264
|
title: u("devportal.linksPolicies", "Links & Policies"),
|
|
2243
2265
|
description: u("devportal.linksPoliciesDescription", "External resources and legal documents — privacy policy and terms are required for store submission"),
|
|
2244
|
-
children: /* @__PURE__ */
|
|
2266
|
+
children: /* @__PURE__ */ K("div", {
|
|
2245
2267
|
className: "grid gap-4 sm:grid-cols-2",
|
|
2246
2268
|
children: [
|
|
2247
|
-
/* @__PURE__ */
|
|
2269
|
+
/* @__PURE__ */ G(D, {
|
|
2248
2270
|
label: u("devportal.websiteUrl", "Website"),
|
|
2249
2271
|
value: d.websiteUrl,
|
|
2250
2272
|
onChange: (e) => O("websiteUrl", e.target.value),
|
|
2251
2273
|
placeholder: "https://..."
|
|
2252
2274
|
}),
|
|
2253
|
-
/* @__PURE__ */
|
|
2275
|
+
/* @__PURE__ */ G(D, {
|
|
2254
2276
|
label: u("devportal.documentationUrl", "Documentation"),
|
|
2255
2277
|
value: d.documentationUrl,
|
|
2256
2278
|
onChange: (e) => O("documentationUrl", e.target.value),
|
|
2257
2279
|
placeholder: "https://..."
|
|
2258
2280
|
}),
|
|
2259
|
-
/* @__PURE__ */
|
|
2281
|
+
/* @__PURE__ */ G(D, {
|
|
2260
2282
|
label: u("devportal.githubUrl", "GitHub"),
|
|
2261
2283
|
value: d.githubUrl,
|
|
2262
2284
|
onChange: (e) => O("githubUrl", e.target.value),
|
|
2263
2285
|
placeholder: "https://github.com/..."
|
|
2264
2286
|
}),
|
|
2265
|
-
/* @__PURE__ */
|
|
2287
|
+
/* @__PURE__ */ G(D, {
|
|
2266
2288
|
label: u("devportal.supportUrl", "Support"),
|
|
2267
2289
|
value: d.supportUrl,
|
|
2268
2290
|
onChange: (e) => O("supportUrl", e.target.value),
|
|
2269
2291
|
placeholder: "https://..."
|
|
2270
2292
|
}),
|
|
2271
|
-
/* @__PURE__ */
|
|
2293
|
+
/* @__PURE__ */ G(D, {
|
|
2272
2294
|
label: `${u("devportal.privacyPolicyUrl", "Privacy Policy")} *`,
|
|
2273
2295
|
value: d.privacyPolicyUrl,
|
|
2274
2296
|
onChange: (e) => O("privacyPolicyUrl", e.target.value),
|
|
2275
2297
|
placeholder: "https://...",
|
|
2276
2298
|
hint: u("devportal.requiredForStore", "Required for store submission")
|
|
2277
2299
|
}),
|
|
2278
|
-
/* @__PURE__ */
|
|
2300
|
+
/* @__PURE__ */ G(D, {
|
|
2279
2301
|
label: `${u("devportal.termsOfServiceUrl", "Terms of Service")} *`,
|
|
2280
2302
|
value: d.termsOfServiceUrl,
|
|
2281
2303
|
onChange: (e) => O("termsOfServiceUrl", e.target.value),
|
|
@@ -2285,31 +2307,31 @@ var Ye = J`
|
|
|
2285
2307
|
]
|
|
2286
2308
|
})
|
|
2287
2309
|
}),
|
|
2288
|
-
/* @__PURE__ */
|
|
2310
|
+
/* @__PURE__ */ G(b, {
|
|
2289
2311
|
title: u("devportal.pricing", "Pricing"),
|
|
2290
2312
|
description: u("devportal.pricingDescription", "How this item is priced in the marketplace"),
|
|
2291
|
-
children: /* @__PURE__ */
|
|
2313
|
+
children: /* @__PURE__ */ K("div", {
|
|
2292
2314
|
className: "space-y-4",
|
|
2293
|
-
children: [/* @__PURE__ */
|
|
2315
|
+
children: [/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
|
|
2294
2316
|
className: "mb-2 block text-sm font-medium",
|
|
2295
2317
|
children: u("devportal.pricingType", "Pricing Type")
|
|
2296
|
-
}), /* @__PURE__ */
|
|
2318
|
+
}), /* @__PURE__ */ G("div", {
|
|
2297
2319
|
className: "flex flex-wrap gap-2",
|
|
2298
|
-
children: Ke.map((e) => /* @__PURE__ */
|
|
2320
|
+
children: Ke.map((e) => /* @__PURE__ */ G("button", {
|
|
2299
2321
|
type: "button",
|
|
2300
2322
|
onClick: () => O("pricingType", e.value),
|
|
2301
2323
|
className: t("rounded-md border px-3 py-1.5 text-sm font-medium transition-colors", d.pricingType === e.value ? "bg-primary text-primary-foreground border-primary" : "hover:bg-muted"),
|
|
2302
2324
|
children: e.label
|
|
2303
2325
|
}, e.value))
|
|
2304
|
-
})] }),
|
|
2326
|
+
})] }), Ae && /* @__PURE__ */ K("div", {
|
|
2305
2327
|
className: "grid gap-4 sm:grid-cols-2",
|
|
2306
|
-
children: [/* @__PURE__ */
|
|
2328
|
+
children: [/* @__PURE__ */ G(D, {
|
|
2307
2329
|
label: u("devportal.price", "Price"),
|
|
2308
2330
|
type: "number",
|
|
2309
2331
|
value: d.price,
|
|
2310
2332
|
onChange: (e) => O("price", e.target.value),
|
|
2311
2333
|
placeholder: "0.00"
|
|
2312
|
-
}), /* @__PURE__ */
|
|
2334
|
+
}), /* @__PURE__ */ G(D, {
|
|
2313
2335
|
label: u("devportal.currency", "Currency"),
|
|
2314
2336
|
value: d.currency,
|
|
2315
2337
|
onChange: (e) => O("currency", e.target.value),
|
|
@@ -2318,32 +2340,32 @@ var Ye = J`
|
|
|
2318
2340
|
})]
|
|
2319
2341
|
})
|
|
2320
2342
|
}),
|
|
2321
|
-
/* @__PURE__ */
|
|
2343
|
+
/* @__PURE__ */ K("div", {
|
|
2322
2344
|
className: "border-t pt-6 flex items-center gap-3 flex-wrap",
|
|
2323
2345
|
children: [
|
|
2324
|
-
/* @__PURE__ */
|
|
2346
|
+
/* @__PURE__ */ G("button", {
|
|
2325
2347
|
type: "button",
|
|
2326
2348
|
onClick: ae,
|
|
2327
2349
|
disabled: p,
|
|
2328
2350
|
className: "inline-flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors disabled:opacity-50",
|
|
2329
|
-
children: p ? /* @__PURE__ */
|
|
2351
|
+
children: p ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(z, {
|
|
2330
2352
|
size: 16,
|
|
2331
2353
|
className: "animate-spin"
|
|
2332
|
-
}), u("devportal.saving", "Saving…")] }) : /* @__PURE__ */
|
|
2354
|
+
}), u("devportal.saving", "Saving…")] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(xe, { size: 16 }), u("devportal.saveMarketplaceListing", "Save Marketplace Listing")] })
|
|
2333
2355
|
}),
|
|
2334
|
-
!
|
|
2356
|
+
!X && !Me && /* @__PURE__ */ G("button", {
|
|
2335
2357
|
type: "button",
|
|
2336
2358
|
onClick: () => void oe(),
|
|
2337
2359
|
disabled: E || p,
|
|
2338
2360
|
className: "inline-flex items-center gap-2 rounded-md border border-primary px-4 py-2 text-sm font-medium text-primary hover:bg-primary/5 transition-colors disabled:opacity-50",
|
|
2339
|
-
children: E ? /* @__PURE__ */
|
|
2361
|
+
children: E ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(z, {
|
|
2340
2362
|
size: 16,
|
|
2341
2363
|
className: "animate-spin"
|
|
2342
|
-
}), u("devportal.submitting", "Submitting…")] }) : /* @__PURE__ */
|
|
2364
|
+
}), u("devportal.submitting", "Submitting…")] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(be, { size: 16 }), u("devportal.submitForReview", "Submit for Review")] })
|
|
2343
2365
|
}),
|
|
2344
|
-
!
|
|
2366
|
+
!X && Me && /* @__PURE__ */ K("p", {
|
|
2345
2367
|
className: "text-xs text-muted-foreground flex items-center gap-1.5",
|
|
2346
|
-
children: [/* @__PURE__ */
|
|
2368
|
+
children: [/* @__PURE__ */ G(de, { size: 12 }), u("devportal.awaitingReview", "Your listing is under review. You can still update and save — changes take effect after approval.")]
|
|
2347
2369
|
})
|
|
2348
2370
|
]
|
|
2349
2371
|
})
|
|
@@ -2351,18 +2373,18 @@ var Ye = J`
|
|
|
2351
2373
|
});
|
|
2352
2374
|
}, Q = ({ label: e, value: n, trend: r }) => {
|
|
2353
2375
|
let { t: i } = P();
|
|
2354
|
-
return /* @__PURE__ */
|
|
2376
|
+
return /* @__PURE__ */ K("div", {
|
|
2355
2377
|
className: "rounded-lg border bg-card p-4",
|
|
2356
2378
|
children: [
|
|
2357
|
-
/* @__PURE__ */
|
|
2379
|
+
/* @__PURE__ */ G("p", {
|
|
2358
2380
|
className: "text-sm text-muted-foreground",
|
|
2359
2381
|
children: e
|
|
2360
2382
|
}),
|
|
2361
|
-
/* @__PURE__ */
|
|
2383
|
+
/* @__PURE__ */ G("p", {
|
|
2362
2384
|
className: "text-2xl font-bold",
|
|
2363
2385
|
children: n
|
|
2364
2386
|
}),
|
|
2365
|
-
r !== void 0 && /* @__PURE__ */
|
|
2387
|
+
r !== void 0 && /* @__PURE__ */ K("p", {
|
|
2366
2388
|
className: t("text-xs mt-1", r > 0 ? "text-status-success-text" : r < 0 ? "text-status-error-text" : "text-muted-foreground"),
|
|
2367
2389
|
children: [
|
|
2368
2390
|
r > 0 ? "+" : "",
|
|
@@ -2376,12 +2398,12 @@ var Ye = J`
|
|
|
2376
2398
|
})
|
|
2377
2399
|
]
|
|
2378
2400
|
});
|
|
2379
|
-
}, $ = ({ label: e, url: t }) => /* @__PURE__ */
|
|
2401
|
+
}, $ = ({ label: e, url: t }) => /* @__PURE__ */ K("a", {
|
|
2380
2402
|
href: t,
|
|
2381
2403
|
target: "_blank",
|
|
2382
2404
|
rel: "noopener noreferrer",
|
|
2383
2405
|
className: "flex items-center gap-2 text-sm text-primary hover:underline",
|
|
2384
|
-
children: [/* @__PURE__ */
|
|
2406
|
+
children: [/* @__PURE__ */ G(R, { size: 14 }), e]
|
|
2385
2407
|
}), $e = [
|
|
2386
2408
|
{
|
|
2387
2409
|
id: "auth",
|
|
@@ -2492,41 +2514,41 @@ var tt = ({ app: e }) => {
|
|
|
2492
2514
|
"read",
|
|
2493
2515
|
"write"
|
|
2494
2516
|
];
|
|
2495
|
-
return /* @__PURE__ */
|
|
2517
|
+
return /* @__PURE__ */ G(b, {
|
|
2496
2518
|
title: "Permissions",
|
|
2497
2519
|
description: "Define what platform data this app can request access to. Users see these when authorizing the app.",
|
|
2498
|
-
children: /* @__PURE__ */
|
|
2520
|
+
children: /* @__PURE__ */ K("div", {
|
|
2499
2521
|
className: "space-y-4",
|
|
2500
2522
|
children: [
|
|
2501
|
-
/* @__PURE__ */
|
|
2523
|
+
/* @__PURE__ */ G("div", {
|
|
2502
2524
|
className: "overflow-x-auto rounded-lg border border-border",
|
|
2503
|
-
children: /* @__PURE__ */
|
|
2525
|
+
children: /* @__PURE__ */ K("table", {
|
|
2504
2526
|
className: "w-full text-sm",
|
|
2505
|
-
children: [/* @__PURE__ */
|
|
2527
|
+
children: [/* @__PURE__ */ G("thead", { children: /* @__PURE__ */ K("tr", {
|
|
2506
2528
|
className: "border-b border-border bg-muted/50",
|
|
2507
|
-
children: [/* @__PURE__ */
|
|
2529
|
+
children: [/* @__PURE__ */ G("th", {
|
|
2508
2530
|
className: "px-4 py-3 text-left font-medium text-muted-foreground w-1/2",
|
|
2509
2531
|
children: "Resource"
|
|
2510
|
-
}), f.map((e) => /* @__PURE__ */
|
|
2532
|
+
}), f.map((e) => /* @__PURE__ */ G("th", {
|
|
2511
2533
|
className: "px-4 py-3 text-center font-medium text-muted-foreground",
|
|
2512
2534
|
children: d[e]
|
|
2513
2535
|
}, e))]
|
|
2514
|
-
}) }), /* @__PURE__ */
|
|
2536
|
+
}) }), /* @__PURE__ */ G("tbody", {
|
|
2515
2537
|
className: "divide-y divide-border",
|
|
2516
|
-
children: $e.map((e) => /* @__PURE__ */
|
|
2538
|
+
children: $e.map((e) => /* @__PURE__ */ K("tr", {
|
|
2517
2539
|
className: "hover:bg-muted/30 transition-colors",
|
|
2518
|
-
children: [/* @__PURE__ */
|
|
2540
|
+
children: [/* @__PURE__ */ K("td", {
|
|
2519
2541
|
className: "px-4 py-3",
|
|
2520
|
-
children: [/* @__PURE__ */
|
|
2542
|
+
children: [/* @__PURE__ */ G("p", {
|
|
2521
2543
|
className: "font-medium text-foreground",
|
|
2522
2544
|
children: e.label
|
|
2523
|
-
}), /* @__PURE__ */
|
|
2545
|
+
}), /* @__PURE__ */ G("p", {
|
|
2524
2546
|
className: "text-xs text-muted-foreground",
|
|
2525
2547
|
children: e.description
|
|
2526
2548
|
})]
|
|
2527
|
-
}), f.map((t) => /* @__PURE__ */
|
|
2549
|
+
}), f.map((t) => /* @__PURE__ */ G("td", {
|
|
2528
2550
|
className: "px-4 py-3 text-center",
|
|
2529
|
-
children: /* @__PURE__ */
|
|
2551
|
+
children: /* @__PURE__ */ G("input", {
|
|
2530
2552
|
type: "radio",
|
|
2531
2553
|
name: `perm-${e.id}`,
|
|
2532
2554
|
value: t,
|
|
@@ -2539,27 +2561,27 @@ var tt = ({ app: e }) => {
|
|
|
2539
2561
|
})]
|
|
2540
2562
|
})
|
|
2541
2563
|
}),
|
|
2542
|
-
/* @__PURE__ */
|
|
2564
|
+
/* @__PURE__ */ K("div", {
|
|
2543
2565
|
className: "rounded-lg border border-border-subtle bg-muted/30 p-3 flex gap-2 text-xs text-muted-foreground",
|
|
2544
|
-
children: [/* @__PURE__ */
|
|
2566
|
+
children: [/* @__PURE__ */ G(he, {
|
|
2545
2567
|
size: 14,
|
|
2546
2568
|
className: "flex-shrink-0 mt-0.5"
|
|
2547
|
-
}), /* @__PURE__ */
|
|
2569
|
+
}), /* @__PURE__ */ K("span", { children: [/* @__PURE__ */ G("strong", { children: "Read & Write" }), " implies Read. Request only what your app genuinely needs — fewer permissions build more user trust."] })]
|
|
2548
2570
|
}),
|
|
2549
|
-
/* @__PURE__ */
|
|
2571
|
+
/* @__PURE__ */ K("div", {
|
|
2550
2572
|
className: "flex items-center justify-end gap-3",
|
|
2551
|
-
children: [o && /* @__PURE__ */
|
|
2573
|
+
children: [o && /* @__PURE__ */ K("span", {
|
|
2552
2574
|
className: "flex items-center gap-1.5 text-sm text-status-success-text",
|
|
2553
|
-
children: [/* @__PURE__ */
|
|
2554
|
-
}), /* @__PURE__ */
|
|
2575
|
+
children: [/* @__PURE__ */ G(L, { size: 14 }), "Saved"]
|
|
2576
|
+
}), /* @__PURE__ */ K("button", {
|
|
2555
2577
|
type: "button",
|
|
2556
2578
|
onClick: () => void u(),
|
|
2557
2579
|
disabled: i,
|
|
2558
2580
|
className: "inline-flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors disabled:opacity-50",
|
|
2559
|
-
children: [i ? /* @__PURE__ */
|
|
2581
|
+
children: [i ? /* @__PURE__ */ G(z, {
|
|
2560
2582
|
size: 14,
|
|
2561
2583
|
className: "animate-spin"
|
|
2562
|
-
}) : /* @__PURE__ */
|
|
2584
|
+
}) : /* @__PURE__ */ G(V, { size: 14 }), "Save Permissions"]
|
|
2563
2585
|
})]
|
|
2564
2586
|
})
|
|
2565
2587
|
]
|