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