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