@burdenoff/microfe-devportal 2026.622.2 → 2026.623.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/devportal/pages/AdminReviewPage.js +198 -140
- package/dist/devportal/pages/AdminReviewPage.js.map +1 -1
- package/dist/devportal/pages/ApplicationDetailPage.js +368 -345
- package/dist/devportal/pages/ApplicationDetailPage.js.map +1 -1
- package/dist/generated/global-operations.js +244 -186
- package/dist/generated/global-operations.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,27 +2,27 @@ import { useDevportal as e } from "../providers/DevportalProvider.js";
|
|
|
2
2
|
import { cn as t } from "../utils/cn.js";
|
|
3
3
|
import { LoadingState as n } from "../components/LoadingState.js";
|
|
4
4
|
import { EmptyState as r } from "../components/EmptyState.js";
|
|
5
|
-
import { useCurrentUserDelegationsQuery as i, useDeactivateAppMutation as a, useGetApplicationAnalyticsQuery as o, useGetApplicationQuery as s, useGetWebhooksQuery as c,
|
|
6
|
-
import { PageLayout as
|
|
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
|
|
5
|
+
import { useCurrentUserDelegationsQuery as i, useDeactivateAppMutation as a, useGetApplicationAnalyticsQuery as o, useGetApplicationQuery as s, useGetWebhooksQuery as c, useGetWorkspaceInstallationQuery as l, useInstallApplicationMutation as u, useRevokeDelegationMutation as d, useRotateAppSecretMutation as f, useSubmitApplicationMutation as p, useUninstallApplicationMutation as m, useUpdateApplicationMutation as h } from "../../generated/global-operations.js";
|
|
6
|
+
import { PageLayout as g, PageSection as _ } from "../components/PageLayout.js";
|
|
7
|
+
import { APP_TYPE_LABELS as v } from "../utils/constants.js";
|
|
8
|
+
import { FeaturedBadge as y, StatusBadge as b, VerifiedBadge as x } from "../components/StatusBadge.js";
|
|
9
|
+
import { SelectionCheckbox as S } from "../components/SelectionCheckbox.js";
|
|
10
|
+
import { nativeNotify as C } from "../../utils/nativeBridge.js";
|
|
11
|
+
import { NewSecretAlert as ee } from "../components/SecretDisplay.js";
|
|
12
|
+
import { DataTable as w, DetailList as T } from "../components/DataTable.js";
|
|
13
|
+
import { InputField as E, SelectField as D, TextareaField as O } from "../components/FormField.js";
|
|
14
14
|
import { ConfirmDialog as te } from "../components/ConfirmDialog.js";
|
|
15
|
-
import { GrantDelegationModal as
|
|
16
|
-
import { DEVPORTAL_PERMISSIONS as
|
|
17
|
-
import { useDevportalPermission as
|
|
18
|
-
import { usePackageUpload as
|
|
19
|
-
import { useCallback as
|
|
20
|
-
import { useI18n as
|
|
21
|
-
import { AlertCircle as
|
|
22
|
-
import { useParams as
|
|
15
|
+
import { GrantDelegationModal as k } from "../components/GrantDelegationModal.js";
|
|
16
|
+
import { DEVPORTAL_PERMISSIONS as A } from "../constants/permissions.js";
|
|
17
|
+
import { useDevportalPermission as ne } from "../hooks/usePermission.js";
|
|
18
|
+
import { usePackageUpload as j } from "../hooks/usePackageUpload.js";
|
|
19
|
+
import { useCallback as M, useEffect as re, useMemo as N, useRef as P, useState as F } from "react";
|
|
20
|
+
import { useI18n as I } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
21
|
+
import { AlertCircle as ie, AppWindow as ae, BarChart3 as L, CheckCircle as R, Clock as oe, Download as se, Edit as ce, ExternalLink as z, FlaskConical as le, Info as ue, Key as B, Loader2 as V, MoreHorizontal as de, Plus as H, Power as fe, RefreshCw as pe, Shield as U, Store as me, Upload as W, Users as G, Webhook as he, X as K, XCircle as ge } from "lucide-react";
|
|
22
|
+
import { useParams as _e } from "react-router-dom";
|
|
23
23
|
import { Fragment as q, jsx as J, jsxs as Y } from "react/jsx-runtime";
|
|
24
24
|
//#region src/devportal/pages/ApplicationDetailPage.tsx
|
|
25
|
-
function
|
|
25
|
+
function ve(e) {
|
|
26
26
|
return e ? {
|
|
27
27
|
id: e.id,
|
|
28
28
|
name: e.name,
|
|
@@ -62,7 +62,7 @@ function ge(e) {
|
|
|
62
62
|
updatedAt: e.updatedAt
|
|
63
63
|
} : null;
|
|
64
64
|
}
|
|
65
|
-
function
|
|
65
|
+
function X(e) {
|
|
66
66
|
return {
|
|
67
67
|
id: e.id,
|
|
68
68
|
applicationId: e.applicationId,
|
|
@@ -86,7 +86,7 @@ function _e(e) {
|
|
|
86
86
|
updatedAt: e.updatedAt
|
|
87
87
|
};
|
|
88
88
|
}
|
|
89
|
-
function
|
|
89
|
+
function ye(e) {
|
|
90
90
|
return {
|
|
91
91
|
id: e.id,
|
|
92
92
|
applicationId: e.applicationId,
|
|
@@ -102,7 +102,7 @@ function ve(e) {
|
|
|
102
102
|
createdAt: e.createdAt
|
|
103
103
|
};
|
|
104
104
|
}
|
|
105
|
-
function
|
|
105
|
+
function be(e) {
|
|
106
106
|
return {
|
|
107
107
|
id: e.id,
|
|
108
108
|
appId: e.appId,
|
|
@@ -124,16 +124,16 @@ function ye(e) {
|
|
|
124
124
|
revokedBy: e.revokedBy || void 0
|
|
125
125
|
};
|
|
126
126
|
}
|
|
127
|
-
var
|
|
127
|
+
var xe = [
|
|
128
128
|
{
|
|
129
129
|
id: "overview",
|
|
130
130
|
label: "Overview",
|
|
131
|
-
icon:
|
|
131
|
+
icon: ae
|
|
132
132
|
},
|
|
133
133
|
{
|
|
134
134
|
id: "oauth",
|
|
135
135
|
label: "OAuth Clients",
|
|
136
|
-
icon:
|
|
136
|
+
icon: U
|
|
137
137
|
},
|
|
138
138
|
{
|
|
139
139
|
id: "api-keys",
|
|
@@ -143,33 +143,33 @@ var be = [
|
|
|
143
143
|
{
|
|
144
144
|
id: "webhooks",
|
|
145
145
|
label: "Webhooks",
|
|
146
|
-
icon:
|
|
146
|
+
icon: he
|
|
147
147
|
},
|
|
148
148
|
{
|
|
149
149
|
id: "delegations",
|
|
150
150
|
label: "Delegations",
|
|
151
|
-
icon:
|
|
151
|
+
icon: G
|
|
152
152
|
},
|
|
153
153
|
{
|
|
154
154
|
id: "analytics",
|
|
155
155
|
label: "Analytics",
|
|
156
|
-
icon:
|
|
156
|
+
icon: L
|
|
157
157
|
},
|
|
158
158
|
{
|
|
159
159
|
id: "playground",
|
|
160
160
|
label: "API Playground",
|
|
161
|
-
icon:
|
|
161
|
+
icon: z
|
|
162
162
|
},
|
|
163
163
|
{
|
|
164
164
|
id: "store-listing",
|
|
165
165
|
label: "Store Listing",
|
|
166
|
-
icon:
|
|
166
|
+
icon: me
|
|
167
167
|
}
|
|
168
|
-
],
|
|
168
|
+
], Se = {
|
|
169
169
|
ACTIVE: "bg-status-success-bg-subtle text-status-success-text",
|
|
170
170
|
REVOKED: "bg-status-error-bg-subtle text-status-error-text",
|
|
171
171
|
EXPIRED: "bg-bg-sunken text-text-secondary"
|
|
172
|
-
},
|
|
172
|
+
}, Ce = ({ message: e = "Loading..." }) => /* @__PURE__ */ Y("div", {
|
|
173
173
|
className: "flex items-center justify-center gap-3 py-12",
|
|
174
174
|
children: [/* @__PURE__ */ J(V, {
|
|
175
175
|
size: 20,
|
|
@@ -180,146 +180,169 @@ var be = [
|
|
|
180
180
|
})]
|
|
181
181
|
}), Z = ({ message: e }) => /* @__PURE__ */ Y("div", {
|
|
182
182
|
className: "flex flex-col items-center justify-center gap-2 py-12 text-center",
|
|
183
|
-
children: [/* @__PURE__ */ J(
|
|
183
|
+
children: [/* @__PURE__ */ J(ie, {
|
|
184
184
|
size: 32,
|
|
185
185
|
className: "text-destructive"
|
|
186
186
|
}), /* @__PURE__ */ J("p", {
|
|
187
187
|
className: "text-sm text-muted-foreground",
|
|
188
188
|
children: e
|
|
189
189
|
})]
|
|
190
|
-
}),
|
|
191
|
-
let { navigate: i, basePath: o, workspaceId: c } = e(), { t:
|
|
192
|
-
let n =
|
|
190
|
+
}), we = () => {
|
|
191
|
+
let { navigate: i, basePath: o, workspaceId: c } = e(), { t: d } = I(), p = (e, t) => {
|
|
192
|
+
let n = d(e);
|
|
193
193
|
return n === e ? t : n;
|
|
194
|
-
}, { allowed:
|
|
195
|
-
variables: { id:
|
|
196
|
-
skip: !
|
|
197
|
-
}), [
|
|
194
|
+
}, { allowed: h } = ne(A.APP_UPDATE), { allowed: _ } = ne(A.APP_DELETE), { appId: S } = _e(), [w, T] = F("overview"), [E, D] = F(!1), [O, j] = F(!1), [re, N] = F(null), [P, L] = F(!1), { data: R, loading: se, error: z } = s({
|
|
195
|
+
variables: { id: S },
|
|
196
|
+
skip: !S
|
|
197
|
+
}), [ue, { loading: B }] = f(), [de, { loading: H }] = a(), [U, { loading: me }] = u(), [W, { loading: G }] = m(), { data: he, refetch: K } = l({
|
|
198
|
+
variables: {
|
|
199
|
+
applicationId: S,
|
|
200
|
+
workspaceId: c ?? void 0
|
|
201
|
+
},
|
|
202
|
+
skip: !c || !S,
|
|
203
|
+
fetchPolicy: "cache-and-network"
|
|
204
|
+
}), q = he?.appInstallations?.edges?.[0]?.node ?? null, X = M((e) => {
|
|
198
205
|
i?.(`${o}${e}`);
|
|
199
|
-
}, [i, o]),
|
|
200
|
-
let e =
|
|
206
|
+
}, [i, o]), ye = M(async () => {
|
|
207
|
+
let e = R?.application?.appId;
|
|
201
208
|
if (e) try {
|
|
202
|
-
let t = (await
|
|
203
|
-
t &&
|
|
209
|
+
let t = (await ue({ variables: { id: e } })).data?.rotateAppSecret.clientSecret;
|
|
210
|
+
t && N(t), D(!1);
|
|
204
211
|
} catch {}
|
|
205
|
-
}, [
|
|
206
|
-
if (
|
|
207
|
-
await
|
|
212
|
+
}, [R?.application?.appId, ue]), be = M(async () => {
|
|
213
|
+
if (S) try {
|
|
214
|
+
await de({ variables: { id: S } }), j(!1), X("/apps");
|
|
208
215
|
} catch {}
|
|
209
216
|
}, [
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
]),
|
|
214
|
-
if (!(!
|
|
215
|
-
await
|
|
216
|
-
applicationId:
|
|
217
|
+
S,
|
|
218
|
+
de,
|
|
219
|
+
X
|
|
220
|
+
]), Se = M(async () => {
|
|
221
|
+
if (!(!S || !c)) try {
|
|
222
|
+
await U({ variables: { input: {
|
|
223
|
+
applicationId: S,
|
|
217
224
|
scope: "WORKSPACE",
|
|
218
225
|
workspaceId: c,
|
|
219
226
|
autoUpdate: !1
|
|
220
|
-
} } }),
|
|
227
|
+
} } }), K(), C("success");
|
|
221
228
|
} catch {
|
|
222
|
-
|
|
229
|
+
C("error");
|
|
223
230
|
}
|
|
224
231
|
}, [
|
|
225
|
-
|
|
232
|
+
S,
|
|
226
233
|
c,
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
234
|
+
U,
|
|
235
|
+
K
|
|
236
|
+
]), Ce = M(async (e) => {
|
|
237
|
+
try {
|
|
238
|
+
await W({ variables: { id: e } }), K(), C("success");
|
|
239
|
+
} catch {
|
|
240
|
+
C("error");
|
|
241
|
+
}
|
|
242
|
+
}, [W, K]);
|
|
243
|
+
if (se && !R) return /* @__PURE__ */ J(n, { message: p("devportal.loadingApplication", "Loading application...") });
|
|
244
|
+
if (z) return /* @__PURE__ */ J(g, {
|
|
245
|
+
title: p("devportal.error", "Error"),
|
|
232
246
|
backLink: `${o}/apps`,
|
|
233
|
-
backLabel:
|
|
247
|
+
backLabel: p("devportal.backToApplications", "Back to Applications"),
|
|
234
248
|
children: /* @__PURE__ */ Y("div", {
|
|
235
249
|
className: "flex flex-col items-center justify-center py-12 text-center",
|
|
236
250
|
children: [
|
|
237
|
-
/* @__PURE__ */ J(
|
|
251
|
+
/* @__PURE__ */ J(ie, {
|
|
238
252
|
size: 48,
|
|
239
253
|
className: "text-destructive mb-4"
|
|
240
254
|
}),
|
|
241
255
|
/* @__PURE__ */ J("h3", {
|
|
242
256
|
className: "text-lg font-semibold mb-2",
|
|
243
|
-
children:
|
|
257
|
+
children: p("devportal.failedToLoadApplication", "Failed to load application")
|
|
244
258
|
}),
|
|
245
259
|
/* @__PURE__ */ J("p", {
|
|
246
260
|
className: "text-sm text-muted-foreground",
|
|
247
|
-
children:
|
|
261
|
+
children: z.message
|
|
248
262
|
})
|
|
249
263
|
]
|
|
250
264
|
})
|
|
251
265
|
});
|
|
252
|
-
let
|
|
253
|
-
return
|
|
254
|
-
title:
|
|
255
|
-
description:
|
|
266
|
+
let Z = ve(R?.application);
|
|
267
|
+
return Z ? /* @__PURE__ */ Y(g, {
|
|
268
|
+
title: Z.name,
|
|
269
|
+
description: Z.shortDescription,
|
|
256
270
|
backLink: `${o}/apps`,
|
|
257
|
-
backLabel:
|
|
271
|
+
backLabel: p("devportal.backToApplications", "Back to Applications"),
|
|
258
272
|
actions: /* @__PURE__ */ Y("div", {
|
|
259
273
|
className: "flex items-center gap-2",
|
|
260
274
|
children: [
|
|
261
275
|
/* @__PURE__ */ Y("button", {
|
|
262
|
-
onClick: () =>
|
|
263
|
-
disabled: !
|
|
264
|
-
title:
|
|
276
|
+
onClick: () => D(!0),
|
|
277
|
+
disabled: !Z.appId,
|
|
278
|
+
title: Z.appId ? p("devportal.rotateSecretHint", "Generate a new client secret") : p("devportal.rotateSecretNoClient", "Create an OAuth client first to enable secret rotation"),
|
|
265
279
|
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",
|
|
266
|
-
children: [/* @__PURE__ */ J(
|
|
280
|
+
children: [/* @__PURE__ */ J(pe, { size: 16 }), p("devportal.rotateSecret", "Rotate Secret")]
|
|
267
281
|
}),
|
|
268
282
|
/* @__PURE__ */ Y("button", {
|
|
269
|
-
onClick: () =>
|
|
283
|
+
onClick: () => X(`/apps/${Z.id}/versions`),
|
|
270
284
|
className: "inline-flex items-center gap-2 rounded-md border px-4 py-2 text-sm font-medium hover:bg-muted transition-colors",
|
|
271
|
-
children: [/* @__PURE__ */ J(
|
|
285
|
+
children: [/* @__PURE__ */ J(oe, { size: 16 }), p("devportal.versions", "Versions")]
|
|
272
286
|
}),
|
|
273
|
-
/* @__PURE__ */ Y("button", {
|
|
274
|
-
onClick: () => void
|
|
275
|
-
disabled:
|
|
287
|
+
q ? /* @__PURE__ */ Y("button", {
|
|
288
|
+
onClick: () => void Ce(q.id),
|
|
289
|
+
disabled: G || !c,
|
|
290
|
+
title: p("devportal.uninstallFromWorkspace", "Uninstall this app from your current workspace"),
|
|
291
|
+
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",
|
|
292
|
+
children: [G ? /* @__PURE__ */ J(V, {
|
|
293
|
+
size: 16,
|
|
294
|
+
className: "animate-spin"
|
|
295
|
+
}) : /* @__PURE__ */ J(ge, { size: 16 }), p("devportal.uninstallFromWorkspace", "Uninstall from Workspace")]
|
|
296
|
+
}) : /* @__PURE__ */ Y("button", {
|
|
297
|
+
onClick: () => void Se(),
|
|
298
|
+
disabled: me || !c,
|
|
276
299
|
"aria-disabled": !c,
|
|
277
|
-
title: c ?
|
|
300
|
+
title: c ? p("devportal.testInWorkspaceHint", "Install this app into your current workspace to test it") : p("devportal.noWorkspaceContext", "No workspace context available"),
|
|
278
301
|
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",
|
|
279
|
-
children: [
|
|
302
|
+
children: [me ? /* @__PURE__ */ J(V, {
|
|
280
303
|
size: 16,
|
|
281
304
|
className: "animate-spin"
|
|
282
|
-
}) : /* @__PURE__ */ J(
|
|
305
|
+
}) : /* @__PURE__ */ J(le, { size: 16 }), p("devportal.testInWorkspace", "Test in Workspace")]
|
|
283
306
|
}),
|
|
284
307
|
/* @__PURE__ */ Y("button", {
|
|
285
|
-
onClick: () =>
|
|
286
|
-
disabled: !
|
|
287
|
-
"aria-disabled": !
|
|
308
|
+
onClick: () => X(`/apps/${Z.id}/edit`),
|
|
309
|
+
disabled: !h,
|
|
310
|
+
"aria-disabled": !h,
|
|
288
311
|
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",
|
|
289
|
-
children: [/* @__PURE__ */ J(
|
|
312
|
+
children: [/* @__PURE__ */ J(ce, { size: 16 }), p("devportal.editApp", "Edit App")]
|
|
290
313
|
}),
|
|
291
314
|
/* @__PURE__ */ Y("button", {
|
|
292
|
-
onClick: () =>
|
|
293
|
-
disabled: !
|
|
294
|
-
"aria-disabled": !
|
|
315
|
+
onClick: () => j(!0),
|
|
316
|
+
disabled: !_,
|
|
317
|
+
"aria-disabled": !_,
|
|
295
318
|
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",
|
|
296
|
-
children: [/* @__PURE__ */ J(
|
|
319
|
+
children: [/* @__PURE__ */ J(fe, { size: 16 }), p("devportal.deactivate", "Deactivate")]
|
|
297
320
|
})
|
|
298
321
|
]
|
|
299
322
|
}),
|
|
300
323
|
children: [
|
|
301
|
-
|
|
302
|
-
title:
|
|
303
|
-
secret:
|
|
304
|
-
description:
|
|
305
|
-
onDismiss: () =>
|
|
324
|
+
re && /* @__PURE__ */ J(ee, {
|
|
325
|
+
title: p("devportal.newAppSecretGenerated", "New App Secret Generated"),
|
|
326
|
+
secret: re,
|
|
327
|
+
description: p("devportal.appSecretRotatedDescription", "Your app secret has been rotated. The old secret is no longer valid."),
|
|
328
|
+
onDismiss: () => N(null)
|
|
306
329
|
}),
|
|
307
330
|
/* @__PURE__ */ Y("div", {
|
|
308
331
|
className: "flex flex-wrap items-center gap-2",
|
|
309
332
|
children: [
|
|
310
|
-
/* @__PURE__ */ J(
|
|
311
|
-
status:
|
|
333
|
+
/* @__PURE__ */ J(b, {
|
|
334
|
+
status: Z.status,
|
|
312
335
|
type: "app"
|
|
313
336
|
}),
|
|
314
|
-
/* @__PURE__ */ J(
|
|
315
|
-
status:
|
|
337
|
+
/* @__PURE__ */ J(b, {
|
|
338
|
+
status: Z.visibility,
|
|
316
339
|
type: "app"
|
|
317
340
|
}),
|
|
318
|
-
|
|
319
|
-
|
|
341
|
+
Z.isVerified && /* @__PURE__ */ J(x, { verified: !0 }),
|
|
342
|
+
Z.isFeatured && /* @__PURE__ */ J(y, {}),
|
|
320
343
|
/* @__PURE__ */ J("span", {
|
|
321
344
|
className: "text-sm text-muted-foreground",
|
|
322
|
-
children:
|
|
345
|
+
children: v[Z.appType] || Z.appType
|
|
323
346
|
})
|
|
324
347
|
]
|
|
325
348
|
}),
|
|
@@ -328,16 +351,16 @@ var be = [
|
|
|
328
351
|
children: /* @__PURE__ */ J("nav", {
|
|
329
352
|
className: "-mb-px flex gap-4 overflow-x-auto",
|
|
330
353
|
role: "tablist",
|
|
331
|
-
"aria-label":
|
|
332
|
-
children:
|
|
354
|
+
"aria-label": p("devportal.applicationSections", "Application sections"),
|
|
355
|
+
children: xe.map((e) => {
|
|
333
356
|
let n = e.icon;
|
|
334
357
|
return /* @__PURE__ */ Y("button", {
|
|
335
358
|
id: `application-tab-${e.id}`,
|
|
336
359
|
role: "tab",
|
|
337
|
-
"aria-selected":
|
|
360
|
+
"aria-selected": w === e.id,
|
|
338
361
|
"aria-controls": `application-panel-${e.id}`,
|
|
339
|
-
onClick: () =>
|
|
340
|
-
className: t("flex items-center gap-2 border-b-2 px-1 py-3 text-sm font-medium transition-colors",
|
|
362
|
+
onClick: () => T(e.id),
|
|
363
|
+
className: t("flex items-center gap-2 border-b-2 px-1 py-3 text-sm font-medium transition-colors", w === e.id ? "border-primary text-primary" : "border-transparent text-muted-foreground hover:text-foreground hover:border-muted-foreground"),
|
|
341
364
|
children: [/* @__PURE__ */ J(n, { size: 16 }), e.label]
|
|
342
365
|
}, e.id);
|
|
343
366
|
})
|
|
@@ -345,87 +368,87 @@ var be = [
|
|
|
345
368
|
}),
|
|
346
369
|
/* @__PURE__ */ Y("div", {
|
|
347
370
|
className: "mt-6",
|
|
348
|
-
id: `application-panel-${
|
|
371
|
+
id: `application-panel-${w}`,
|
|
349
372
|
role: "tabpanel",
|
|
350
|
-
"aria-labelledby": `application-tab-${
|
|
373
|
+
"aria-labelledby": `application-tab-${w}`,
|
|
351
374
|
tabIndex: 0,
|
|
352
375
|
children: [
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
appId:
|
|
356
|
-
onNavigate:
|
|
376
|
+
w === "overview" && /* @__PURE__ */ J(Ae, { app: Z }),
|
|
377
|
+
w === "oauth" && /* @__PURE__ */ J(Te, {
|
|
378
|
+
appId: Z.appId || Z.id,
|
|
379
|
+
onNavigate: X
|
|
357
380
|
}),
|
|
358
|
-
|
|
359
|
-
appId:
|
|
360
|
-
onNavigate:
|
|
381
|
+
w === "api-keys" && /* @__PURE__ */ J(Ee, {
|
|
382
|
+
appId: Z.appId || Z.id,
|
|
383
|
+
onNavigate: X
|
|
361
384
|
}),
|
|
362
|
-
|
|
363
|
-
appId:
|
|
364
|
-
onNavigate:
|
|
385
|
+
w === "webhooks" && /* @__PURE__ */ J(De, {
|
|
386
|
+
appId: Z.id,
|
|
387
|
+
onNavigate: X
|
|
365
388
|
}),
|
|
366
|
-
|
|
367
|
-
authAppId:
|
|
368
|
-
appName:
|
|
369
|
-
onGrantDelegation: () =>
|
|
370
|
-
onNavigate:
|
|
389
|
+
w === "delegations" && /* @__PURE__ */ J(Oe, {
|
|
390
|
+
authAppId: Z.appId || void 0,
|
|
391
|
+
appName: Z.name,
|
|
392
|
+
onGrantDelegation: () => L(!0),
|
|
393
|
+
onNavigate: X
|
|
371
394
|
}),
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
395
|
+
w === "analytics" && /* @__PURE__ */ J(ke, { appId: Z.id }),
|
|
396
|
+
w === "playground" && /* @__PURE__ */ J(Fe, { app: Z }),
|
|
397
|
+
w === "store-listing" && /* @__PURE__ */ J(He, { app: Z })
|
|
375
398
|
]
|
|
376
399
|
}),
|
|
377
400
|
/* @__PURE__ */ J(te, {
|
|
378
|
-
open:
|
|
379
|
-
onOpenChange:
|
|
380
|
-
onConfirm:
|
|
381
|
-
title:
|
|
382
|
-
description:
|
|
383
|
-
confirmLabel:
|
|
384
|
-
cancelLabel:
|
|
401
|
+
open: E,
|
|
402
|
+
onOpenChange: D,
|
|
403
|
+
onConfirm: ye,
|
|
404
|
+
title: p("devportal.rotateAppSecret", "Rotate App Secret"),
|
|
405
|
+
description: p("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."),
|
|
406
|
+
confirmLabel: p("devportal.rotateSecret", "Rotate Secret"),
|
|
407
|
+
cancelLabel: p("devportal.cancel", "Cancel"),
|
|
385
408
|
variant: "warning",
|
|
386
409
|
loading: B
|
|
387
410
|
}),
|
|
388
411
|
/* @__PURE__ */ J(te, {
|
|
389
|
-
open:
|
|
390
|
-
onOpenChange:
|
|
391
|
-
onConfirm:
|
|
392
|
-
title:
|
|
393
|
-
description:
|
|
394
|
-
confirmLabel:
|
|
395
|
-
cancelLabel:
|
|
412
|
+
open: O,
|
|
413
|
+
onOpenChange: j,
|
|
414
|
+
onConfirm: be,
|
|
415
|
+
title: p("devportal.deactivateApplication", "Deactivate Application"),
|
|
416
|
+
description: p("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."),
|
|
417
|
+
confirmLabel: p("devportal.deactivate", "Deactivate"),
|
|
418
|
+
cancelLabel: p("devportal.cancel", "Cancel"),
|
|
396
419
|
variant: "destructive",
|
|
397
|
-
loading:
|
|
420
|
+
loading: H
|
|
398
421
|
}),
|
|
399
|
-
/* @__PURE__ */ J(
|
|
400
|
-
open:
|
|
401
|
-
onOpenChange:
|
|
402
|
-
appId:
|
|
403
|
-
appName:
|
|
404
|
-
appScopes:
|
|
422
|
+
/* @__PURE__ */ J(k, {
|
|
423
|
+
open: P,
|
|
424
|
+
onOpenChange: L,
|
|
425
|
+
appId: Z.appId || "",
|
|
426
|
+
appName: Z.name,
|
|
427
|
+
appScopes: Z.scopes?.map((e) => e.scope) ?? [],
|
|
405
428
|
onSuccess: () => {
|
|
406
|
-
|
|
429
|
+
L(!1);
|
|
407
430
|
}
|
|
408
431
|
})
|
|
409
432
|
]
|
|
410
|
-
}) : /* @__PURE__ */ J(
|
|
411
|
-
title:
|
|
433
|
+
}) : /* @__PURE__ */ J(g, {
|
|
434
|
+
title: p("devportal.notFound", "Not Found"),
|
|
412
435
|
backLink: `${o}/apps`,
|
|
413
|
-
backLabel:
|
|
436
|
+
backLabel: p("devportal.backToApplications", "Back to Applications"),
|
|
414
437
|
children: /* @__PURE__ */ J(r, {
|
|
415
|
-
icon: /* @__PURE__ */ J(
|
|
416
|
-
title:
|
|
417
|
-
description:
|
|
438
|
+
icon: /* @__PURE__ */ J(ae, { size: 48 }),
|
|
439
|
+
title: p("devportal.applicationNotFound", "Application not found"),
|
|
440
|
+
description: p("devportal.applicationNotFoundDescription", "The application you're looking for doesn't exist or you don't have access to it.")
|
|
418
441
|
})
|
|
419
442
|
});
|
|
420
|
-
},
|
|
421
|
-
let { t } =
|
|
443
|
+
}, Te = ({ onNavigate: e }) => {
|
|
444
|
+
let { t } = I(), n = (e, n) => {
|
|
422
445
|
let r = t(e);
|
|
423
446
|
return r === e ? n : r;
|
|
424
447
|
};
|
|
425
448
|
return /* @__PURE__ */ Y("div", {
|
|
426
449
|
className: "space-y-4 py-4 text-center",
|
|
427
450
|
children: [
|
|
428
|
-
/* @__PURE__ */ J(
|
|
451
|
+
/* @__PURE__ */ J(U, { className: "mx-auto h-10 w-10 text-muted-foreground" }),
|
|
429
452
|
/* @__PURE__ */ J("h3", {
|
|
430
453
|
className: "font-medium",
|
|
431
454
|
children: n("devportal.oauthApps", "OAuth Apps")
|
|
@@ -437,12 +460,12 @@ var be = [
|
|
|
437
460
|
/* @__PURE__ */ Y("button", {
|
|
438
461
|
onClick: () => e("/oauth"),
|
|
439
462
|
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",
|
|
440
|
-
children: [/* @__PURE__ */ J(
|
|
463
|
+
children: [/* @__PURE__ */ J(z, { size: 16 }), n("devportal.manageOAuthApps", "Manage OAuth Apps")]
|
|
441
464
|
})
|
|
442
465
|
]
|
|
443
466
|
});
|
|
444
|
-
},
|
|
445
|
-
let { t } =
|
|
467
|
+
}, Ee = ({ onNavigate: e }) => {
|
|
468
|
+
let { t } = I(), n = (e, n) => {
|
|
446
469
|
let r = t(e);
|
|
447
470
|
return r === e ? n : r;
|
|
448
471
|
};
|
|
@@ -461,39 +484,39 @@ var be = [
|
|
|
461
484
|
/* @__PURE__ */ Y("button", {
|
|
462
485
|
onClick: () => e("/api-keys"),
|
|
463
486
|
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",
|
|
464
|
-
children: [/* @__PURE__ */ J(
|
|
487
|
+
children: [/* @__PURE__ */ J(z, { size: 16 }), n("devportal.manageApiKeys", "Manage API Keys")]
|
|
465
488
|
})
|
|
466
489
|
]
|
|
467
490
|
});
|
|
468
|
-
},
|
|
469
|
-
let { t: n } =
|
|
491
|
+
}, De = ({ appId: e, onNavigate: t }) => {
|
|
492
|
+
let { t: n } = I(), r = (e, t) => {
|
|
470
493
|
let r = n(e);
|
|
471
494
|
return r === e ? t : r;
|
|
472
495
|
}, { data: i, loading: a, error: o } = c({ variables: { applicationId: e } });
|
|
473
|
-
return a ? /* @__PURE__ */ J(
|
|
496
|
+
return a ? /* @__PURE__ */ J(Ce, { message: r("devportal.loadingWebhooks", "Loading webhooks...") }) : o ? /* @__PURE__ */ J(Z, { message: o.message }) : /* @__PURE__ */ J(je, {
|
|
474
497
|
appId: e,
|
|
475
|
-
webhooks: (i?.webhooks ?? []).map(
|
|
498
|
+
webhooks: (i?.webhooks ?? []).map(X),
|
|
476
499
|
onNavigate: t
|
|
477
500
|
});
|
|
478
|
-
},
|
|
479
|
-
let { t: o } =
|
|
501
|
+
}, Oe = ({ authAppId: e, appName: t, onGrantDelegation: n, onNavigate: a }) => {
|
|
502
|
+
let { t: o } = I(), s = (e, t) => {
|
|
480
503
|
let n = o(e);
|
|
481
504
|
return n === e ? t : n;
|
|
482
|
-
}, { data: c, loading: l, error:
|
|
505
|
+
}, { data: c, loading: l, error: u, refetch: f } = i(), [p] = d(), [m, h] = F([]), [g, _] = F(!1), [v, y] = F(/* @__PURE__ */ new Set()), [b, x] = F(null), S = N(() => c?.currentUserDelegations?.delegations ? c.currentUserDelegations.delegations.filter((t) => t.appId === e).map(be) : [], [e, c]), C = N(() => S.filter((e) => e.status === "ACTIVE"), [S]), ee = N(() => C.filter((e) => v.has(e.id)), [C, v]), w = C.length > 0 && C.every((e) => v.has(e.id)), T = C.some((e) => v.has(e.id)) && !w, E = M((e, t) => {
|
|
483
506
|
y((n) => {
|
|
484
507
|
let r = new Set(n);
|
|
485
508
|
return t ? r.add(e) : r.delete(e), r;
|
|
486
509
|
});
|
|
487
|
-
}, []), D =
|
|
510
|
+
}, []), D = M((e) => {
|
|
488
511
|
y((t) => {
|
|
489
512
|
let n = new Set(t);
|
|
490
513
|
return C.forEach((t) => {
|
|
491
514
|
e ? n.add(t.id) : n.delete(t.id);
|
|
492
515
|
}), n;
|
|
493
516
|
});
|
|
494
|
-
}, [C]), O =
|
|
517
|
+
}, [C]), O = M(() => {
|
|
495
518
|
y(/* @__PURE__ */ new Set());
|
|
496
|
-
}, []), k =
|
|
519
|
+
}, []), k = M(async (e) => {
|
|
497
520
|
_(!0);
|
|
498
521
|
try {
|
|
499
522
|
let t = await Promise.allSettled(e.map((e) => p({ variables: { id: e } }))), n = t.filter((e) => e.status === "fulfilled").length, r = t.length - n;
|
|
@@ -505,7 +528,7 @@ var be = [
|
|
|
505
528
|
_(!1);
|
|
506
529
|
}
|
|
507
530
|
}, [p, f]);
|
|
508
|
-
return e ? l ? /* @__PURE__ */ J(
|
|
531
|
+
return e ? l ? /* @__PURE__ */ J(Ce, { message: s("devportal.loadingDelegations", "Loading delegations...") }) : u ? /* @__PURE__ */ J(Z, { message: u.message }) : /* @__PURE__ */ Y(q, { children: [
|
|
509
532
|
b && /* @__PURE__ */ J("div", {
|
|
510
533
|
className: "rounded-lg border border-border-subtle bg-status-success-bg-subtle p-3 text-sm text-status-success-text",
|
|
511
534
|
children: /* @__PURE__ */ Y("div", {
|
|
@@ -517,7 +540,7 @@ var be = [
|
|
|
517
540
|
})]
|
|
518
541
|
})
|
|
519
542
|
}),
|
|
520
|
-
/* @__PURE__ */ J(
|
|
543
|
+
/* @__PURE__ */ J(Me, {
|
|
521
544
|
appName: t,
|
|
522
545
|
delegations: S,
|
|
523
546
|
onGrantDelegation: n,
|
|
@@ -546,31 +569,31 @@ var be = [
|
|
|
546
569
|
loading: g
|
|
547
570
|
})
|
|
548
571
|
] }) : /* @__PURE__ */ J(r, {
|
|
549
|
-
icon: /* @__PURE__ */ J(
|
|
572
|
+
icon: /* @__PURE__ */ J(U, { size: 32 }),
|
|
550
573
|
title: s("devportal.linkAuthAppFirst", "Link an auth app first"),
|
|
551
574
|
description: s("devportal.linkAuthAppFirstDescription", "Delegations are managed through auth apps. Create or link an auth app before granting app-as-user access."),
|
|
552
575
|
action: /* @__PURE__ */ Y("button", {
|
|
553
576
|
onClick: () => a("/oauth"),
|
|
554
577
|
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",
|
|
555
|
-
children: [/* @__PURE__ */ J(
|
|
578
|
+
children: [/* @__PURE__ */ J(z, { size: 16 }), s("devportal.manageOAuthApps", "Manage OAuth Apps")]
|
|
556
579
|
})
|
|
557
580
|
});
|
|
558
|
-
},
|
|
559
|
-
let { t } =
|
|
581
|
+
}, ke = ({ appId: e }) => {
|
|
582
|
+
let { t } = I(), n = (e, n) => {
|
|
560
583
|
let r = t(e);
|
|
561
584
|
return r === e ? n : r;
|
|
562
|
-
}, r =
|
|
585
|
+
}, r = N(() => /* @__PURE__ */ new Date(), []), { data: i, loading: a, error: s } = o({ variables: {
|
|
563
586
|
applicationId: e,
|
|
564
587
|
period: "daily",
|
|
565
|
-
startDate:
|
|
588
|
+
startDate: N(() => {
|
|
566
589
|
let e = new Date(r);
|
|
567
590
|
return e.setDate(e.getDate() - 30), e;
|
|
568
591
|
}, [r]).toISOString(),
|
|
569
592
|
endDate: r.toISOString()
|
|
570
593
|
} });
|
|
571
|
-
return a ? /* @__PURE__ */ J(
|
|
572
|
-
},
|
|
573
|
-
let { t } =
|
|
594
|
+
return a ? /* @__PURE__ */ J(Ce, { message: n("devportal.loadingAnalytics", "Loading analytics...") }) : s ? /* @__PURE__ */ J(Z, { message: s.message }) : /* @__PURE__ */ J(Ne, { analytics: (i?.applicationAnalytics ?? []).map(ye) });
|
|
595
|
+
}, Ae = ({ app: e }) => {
|
|
596
|
+
let { t } = I(), n = (e, n) => {
|
|
574
597
|
let r = t(e);
|
|
575
598
|
return r === e ? n : r;
|
|
576
599
|
};
|
|
@@ -600,7 +623,7 @@ var be = [
|
|
|
600
623
|
})
|
|
601
624
|
]
|
|
602
625
|
}),
|
|
603
|
-
/* @__PURE__ */ J(
|
|
626
|
+
/* @__PURE__ */ J(_, {
|
|
604
627
|
title: n("devportal.description", "Description"),
|
|
605
628
|
children: /* @__PURE__ */ J("div", {
|
|
606
629
|
className: "prose prose-sm max-w-none",
|
|
@@ -610,7 +633,7 @@ var be = [
|
|
|
610
633
|
})
|
|
611
634
|
})
|
|
612
635
|
}),
|
|
613
|
-
/* @__PURE__ */ J(
|
|
636
|
+
/* @__PURE__ */ J(_, {
|
|
614
637
|
title: n("devportal.tagsAndKeywords", "Tags & Keywords"),
|
|
615
638
|
children: /* @__PURE__ */ Y("div", {
|
|
616
639
|
className: "space-y-3",
|
|
@@ -638,9 +661,9 @@ var be = [
|
|
|
638
661
|
]
|
|
639
662
|
}), /* @__PURE__ */ Y("div", {
|
|
640
663
|
className: "space-y-6",
|
|
641
|
-
children: [/* @__PURE__ */ J(
|
|
664
|
+
children: [/* @__PURE__ */ J(_, {
|
|
642
665
|
title: n("devportal.details", "Details"),
|
|
643
|
-
children: /* @__PURE__ */ J(
|
|
666
|
+
children: /* @__PURE__ */ J(T, { items: [
|
|
644
667
|
{
|
|
645
668
|
label: n("devportal.appId", "App ID"),
|
|
646
669
|
value: /* @__PURE__ */ J("code", {
|
|
@@ -673,7 +696,7 @@ var be = [
|
|
|
673
696
|
value: e.publishedAt ? new Date(e.publishedAt).toLocaleDateString() : n("devportal.notPublished", "Not published")
|
|
674
697
|
}
|
|
675
698
|
] })
|
|
676
|
-
}), /* @__PURE__ */ J(
|
|
699
|
+
}), /* @__PURE__ */ J(_, {
|
|
677
700
|
title: n("devportal.links", "Links"),
|
|
678
701
|
children: /* @__PURE__ */ Y("div", {
|
|
679
702
|
className: "space-y-2",
|
|
@@ -707,8 +730,8 @@ var be = [
|
|
|
707
730
|
})]
|
|
708
731
|
})]
|
|
709
732
|
});
|
|
710
|
-
},
|
|
711
|
-
let { t: i } =
|
|
733
|
+
}, je = ({ appId: e, webhooks: t, onNavigate: n }) => {
|
|
734
|
+
let { t: i } = I(), a = (e, t) => {
|
|
712
735
|
let n = i(e);
|
|
713
736
|
return n === e ? t : n;
|
|
714
737
|
};
|
|
@@ -728,7 +751,7 @@ var be = [
|
|
|
728
751
|
}), /* @__PURE__ */ Y("button", {
|
|
729
752
|
onClick: () => n(`/apps/${e}/webhooks/new`),
|
|
730
753
|
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",
|
|
731
|
-
children: [/* @__PURE__ */ J(
|
|
754
|
+
children: [/* @__PURE__ */ J(H, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
|
|
732
755
|
})]
|
|
733
756
|
}), t.length > 0 ? /* @__PURE__ */ J("div", {
|
|
734
757
|
className: "space-y-4",
|
|
@@ -742,7 +765,7 @@ var be = [
|
|
|
742
765
|
children: [/* @__PURE__ */ J("h3", {
|
|
743
766
|
className: "font-medium",
|
|
744
767
|
children: t.name
|
|
745
|
-
}), /* @__PURE__ */ J(
|
|
768
|
+
}), /* @__PURE__ */ J(b, {
|
|
746
769
|
status: t.status,
|
|
747
770
|
type: "webhook"
|
|
748
771
|
})]
|
|
@@ -752,7 +775,7 @@ var be = [
|
|
|
752
775
|
})] }), /* @__PURE__ */ J("button", {
|
|
753
776
|
onClick: () => n(`/apps/${e}/webhooks/${t.id}`),
|
|
754
777
|
className: "rounded-md p-1 hover:bg-muted",
|
|
755
|
-
children: /* @__PURE__ */ J(
|
|
778
|
+
children: /* @__PURE__ */ J(de, { size: 20 })
|
|
756
779
|
})]
|
|
757
780
|
}),
|
|
758
781
|
/* @__PURE__ */ Y("div", { children: [/* @__PURE__ */ J("p", {
|
|
@@ -808,18 +831,18 @@ var be = [
|
|
|
808
831
|
]
|
|
809
832
|
}, t.id))
|
|
810
833
|
}) : /* @__PURE__ */ J(r, {
|
|
811
|
-
icon: /* @__PURE__ */ J(
|
|
834
|
+
icon: /* @__PURE__ */ J(he, { size: 32 }),
|
|
812
835
|
title: a("devportal.noWebhooks", "No webhooks"),
|
|
813
836
|
description: a("devportal.noWebhooksDescription", "Add a webhook to receive event notifications"),
|
|
814
837
|
action: /* @__PURE__ */ Y("button", {
|
|
815
838
|
onClick: () => n(`/apps/${e}/webhooks/new`),
|
|
816
839
|
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",
|
|
817
|
-
children: [/* @__PURE__ */ J(
|
|
840
|
+
children: [/* @__PURE__ */ J(H, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
|
|
818
841
|
})
|
|
819
842
|
})]
|
|
820
843
|
});
|
|
821
|
-
},
|
|
822
|
-
let { t: p } =
|
|
844
|
+
}, Me = ({ appName: e, delegations: n, onGrantDelegation: i, onRevokeDelegation: a, selectedDelegationIds: o, onToggleSelectDelegation: s, onToggleAllDelegations: c, onClearSelection: l, onRevokeSelected: u, allVisibleSelected: d, partiallySelected: f }) => {
|
|
845
|
+
let { t: p } = I(), m = (e, t) => {
|
|
823
846
|
let n = p(e);
|
|
824
847
|
return n === e ? t : n;
|
|
825
848
|
}, h = n.filter((e) => e.status === "ACTIVE"), g = n.filter((e) => e.status !== "ACTIVE");
|
|
@@ -854,7 +877,7 @@ var be = [
|
|
|
854
877
|
})] }), /* @__PURE__ */ Y("button", {
|
|
855
878
|
onClick: i,
|
|
856
879
|
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",
|
|
857
|
-
children: [/* @__PURE__ */ J(
|
|
880
|
+
children: [/* @__PURE__ */ J(H, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
|
|
858
881
|
})]
|
|
859
882
|
}),
|
|
860
883
|
h.length > 0 && /* @__PURE__ */ J("div", {
|
|
@@ -865,7 +888,7 @@ var be = [
|
|
|
865
888
|
className: "flex flex-wrap items-center gap-3",
|
|
866
889
|
children: [/* @__PURE__ */ Y("div", {
|
|
867
890
|
className: "flex items-center gap-2",
|
|
868
|
-
children: [/* @__PURE__ */ J(
|
|
891
|
+
children: [/* @__PURE__ */ J(S, {
|
|
869
892
|
checked: d,
|
|
870
893
|
indeterminate: f,
|
|
871
894
|
onChange: c,
|
|
@@ -908,7 +931,7 @@ var be = [
|
|
|
908
931
|
className: "flex items-start gap-3",
|
|
909
932
|
children: [e.status === "ACTIVE" && /* @__PURE__ */ J("div", {
|
|
910
933
|
onClick: (e) => e.stopPropagation(),
|
|
911
|
-
children: /* @__PURE__ */ J(
|
|
934
|
+
children: /* @__PURE__ */ J(S, {
|
|
912
935
|
checked: o.has(e.id),
|
|
913
936
|
onChange: (t) => s(e.id, t),
|
|
914
937
|
ariaLabel: `Select delegation ${e.id}`,
|
|
@@ -920,7 +943,7 @@ var be = [
|
|
|
920
943
|
className: "font-medium",
|
|
921
944
|
children: ["Delegation #", e.id.slice(0, 8)]
|
|
922
945
|
}), /* @__PURE__ */ J("span", {
|
|
923
|
-
className: t("rounded-full px-2 py-0.5 text-xs font-medium",
|
|
946
|
+
className: t("rounded-full px-2 py-0.5 text-xs font-medium", Se[e.status]),
|
|
924
947
|
children: e.status
|
|
925
948
|
})]
|
|
926
949
|
}), /* @__PURE__ */ Y("p", {
|
|
@@ -938,7 +961,7 @@ var be = [
|
|
|
938
961
|
}), e.status === "ACTIVE" && /* @__PURE__ */ Y("button", {
|
|
939
962
|
onClick: () => a(e.id),
|
|
940
963
|
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",
|
|
941
|
-
children: [/* @__PURE__ */ J(
|
|
964
|
+
children: [/* @__PURE__ */ J(ge, { size: 14 }), m("devportal.revoke", "Revoke")]
|
|
942
965
|
})]
|
|
943
966
|
}),
|
|
944
967
|
/* @__PURE__ */ Y("div", { children: [/* @__PURE__ */ J("p", {
|
|
@@ -967,7 +990,7 @@ var be = [
|
|
|
967
990
|
e.expiresAt && /* @__PURE__ */ Y("span", {
|
|
968
991
|
className: "flex items-center gap-1",
|
|
969
992
|
children: [
|
|
970
|
-
/* @__PURE__ */ J(
|
|
993
|
+
/* @__PURE__ */ J(oe, { size: 12 }),
|
|
971
994
|
m("devportal.expires", "Expires"),
|
|
972
995
|
" ",
|
|
973
996
|
new Date(e.expiresAt).toLocaleDateString()
|
|
@@ -975,7 +998,7 @@ var be = [
|
|
|
975
998
|
}),
|
|
976
999
|
!e.expiresAt && e.status === "ACTIVE" && /* @__PURE__ */ Y("span", {
|
|
977
1000
|
className: "flex items-center gap-1",
|
|
978
|
-
children: [/* @__PURE__ */ J(
|
|
1001
|
+
children: [/* @__PURE__ */ J(R, {
|
|
979
1002
|
size: 12,
|
|
980
1003
|
className: "text-status-success-text"
|
|
981
1004
|
}), m("devportal.noExpiration", "No expiration")]
|
|
@@ -983,7 +1006,7 @@ var be = [
|
|
|
983
1006
|
e.revokedAt && /* @__PURE__ */ Y("span", {
|
|
984
1007
|
className: "flex items-center gap-1",
|
|
985
1008
|
children: [
|
|
986
|
-
/* @__PURE__ */ J(
|
|
1009
|
+
/* @__PURE__ */ J(ge, {
|
|
987
1010
|
size: 12,
|
|
988
1011
|
className: "text-status-error-text"
|
|
989
1012
|
}),
|
|
@@ -997,19 +1020,19 @@ var be = [
|
|
|
997
1020
|
]
|
|
998
1021
|
}, e.id))
|
|
999
1022
|
}) : /* @__PURE__ */ J(r, {
|
|
1000
|
-
icon: /* @__PURE__ */ J(
|
|
1023
|
+
icon: /* @__PURE__ */ J(G, { size: 32 }),
|
|
1001
1024
|
title: m("devportal.noDelegations", "No delegations"),
|
|
1002
1025
|
description: m("devportal.noDelegationsDescription", "Grant a delegation to allow this app to act on your behalf"),
|
|
1003
1026
|
action: /* @__PURE__ */ Y("button", {
|
|
1004
1027
|
onClick: i,
|
|
1005
1028
|
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",
|
|
1006
|
-
children: [/* @__PURE__ */ J(
|
|
1029
|
+
children: [/* @__PURE__ */ J(H, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
|
|
1007
1030
|
})
|
|
1008
1031
|
})
|
|
1009
1032
|
]
|
|
1010
1033
|
});
|
|
1011
|
-
},
|
|
1012
|
-
let { t } =
|
|
1034
|
+
}, Ne = ({ analytics: e }) => {
|
|
1035
|
+
let { t } = I(), n = (e, n) => {
|
|
1013
1036
|
let r = t(e);
|
|
1014
1037
|
return r === e ? n : r;
|
|
1015
1038
|
}, i = e[0], a = e[1], o = (e, t) => t ? (e - t) / t * 100 : 0;
|
|
@@ -1039,9 +1062,9 @@ var be = [
|
|
|
1039
1062
|
trend: a && i && i.apiCalls > 0 && a.apiCalls > 0 ? -o(i.errors / i.apiCalls, a.errors / a.apiCalls) : void 0
|
|
1040
1063
|
})
|
|
1041
1064
|
]
|
|
1042
|
-
}), /* @__PURE__ */ J(
|
|
1065
|
+
}), /* @__PURE__ */ J(_, {
|
|
1043
1066
|
title: n("devportal.dailyBreakdown", "Daily Breakdown"),
|
|
1044
|
-
children: e.length > 0 ? /* @__PURE__ */ J(
|
|
1067
|
+
children: e.length > 0 ? /* @__PURE__ */ J(w, {
|
|
1045
1068
|
data: e,
|
|
1046
1069
|
keyField: "id",
|
|
1047
1070
|
columns: [
|
|
@@ -1082,17 +1105,17 @@ var be = [
|
|
|
1082
1105
|
}
|
|
1083
1106
|
]
|
|
1084
1107
|
}) : /* @__PURE__ */ J(r, {
|
|
1085
|
-
icon: /* @__PURE__ */ J(
|
|
1108
|
+
icon: /* @__PURE__ */ J(L, { size: 32 }),
|
|
1086
1109
|
title: n("devportal.noAnalyticsData", "No analytics data"),
|
|
1087
1110
|
description: n("devportal.noAnalyticsDataDescription", "Analytics data will appear here once the application starts receiving traffic.")
|
|
1088
1111
|
})
|
|
1089
1112
|
})]
|
|
1090
1113
|
});
|
|
1091
|
-
},
|
|
1092
|
-
let { apiGatewayUrl: n, workspacesGatewayUrl: r, authToken: i } = e(), { t: a } =
|
|
1114
|
+
}, Pe = "# Sample query - modify as needed\nquery IntrospectSchema {\n __schema {\n queryType { name }\n mutationType { name }\n types {\n name\n kind\n }\n }\n}", Fe = ({ app: t }) => {
|
|
1115
|
+
let { apiGatewayUrl: n, workspacesGatewayUrl: r, authToken: i } = e(), { t: a } = I(), o = (e, t) => {
|
|
1093
1116
|
let n = a(e);
|
|
1094
1117
|
return n === e ? t : n;
|
|
1095
|
-
}, [s, c] =
|
|
1118
|
+
}, [s, c] = F(Pe), [l, u] = F("{}"), [d, f] = F(""), [p, m] = F(!1), [h, g] = F(`${n || "http://localhost:4000"}/global/graphql`), [_, v] = F(i || ""), [y, b] = F(!1), x = M(async () => {
|
|
1096
1119
|
m(!0), f("");
|
|
1097
1120
|
try {
|
|
1098
1121
|
let e = {};
|
|
@@ -1123,7 +1146,7 @@ var be = [
|
|
|
1123
1146
|
l,
|
|
1124
1147
|
h,
|
|
1125
1148
|
_
|
|
1126
|
-
]), S =
|
|
1149
|
+
]), S = M(() => {
|
|
1127
1150
|
i && v(i), b(!0);
|
|
1128
1151
|
}, [i]);
|
|
1129
1152
|
return /* @__PURE__ */ Y("div", {
|
|
@@ -1256,7 +1279,7 @@ var be = [
|
|
|
1256
1279
|
children: [p ? /* @__PURE__ */ J(V, {
|
|
1257
1280
|
size: 16,
|
|
1258
1281
|
className: "animate-spin"
|
|
1259
|
-
}) : /* @__PURE__ */ J(
|
|
1282
|
+
}) : /* @__PURE__ */ J(z, { size: 16 }), p ? o("devportal.executing", "Executing...") : o("devportal.executeQuery", "Execute Query")]
|
|
1260
1283
|
}),
|
|
1261
1284
|
d && /* @__PURE__ */ Y("div", { children: [/* @__PURE__ */ J("label", {
|
|
1262
1285
|
className: "block text-sm font-medium mb-1",
|
|
@@ -1267,8 +1290,8 @@ var be = [
|
|
|
1267
1290
|
})] })
|
|
1268
1291
|
]
|
|
1269
1292
|
});
|
|
1270
|
-
},
|
|
1271
|
-
let d =
|
|
1293
|
+
}, Ie = ({ 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 }) => {
|
|
1294
|
+
let d = P(null), f = M(async (e) => {
|
|
1272
1295
|
try {
|
|
1273
1296
|
r((await s(e)).downloadUrl);
|
|
1274
1297
|
} catch {}
|
|
@@ -1288,7 +1311,7 @@ var be = [
|
|
|
1288
1311
|
src: n,
|
|
1289
1312
|
alt: e,
|
|
1290
1313
|
className: "w-full h-full object-cover"
|
|
1291
|
-
}) : /* @__PURE__ */ J(
|
|
1314
|
+
}) : /* @__PURE__ */ J(W, {
|
|
1292
1315
|
size: 18,
|
|
1293
1316
|
className: "text-text-secondary opacity-40"
|
|
1294
1317
|
}), c && /* @__PURE__ */ Y("div", {
|
|
@@ -1326,7 +1349,7 @@ var be = [
|
|
|
1326
1349
|
disabled: c,
|
|
1327
1350
|
onClick: () => d.current?.click(),
|
|
1328
1351
|
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",
|
|
1329
|
-
children: [/* @__PURE__ */ J(
|
|
1352
|
+
children: [/* @__PURE__ */ J(W, { size: 11 }), c ? `Uploading… ${l}%` : "Upload image"]
|
|
1330
1353
|
}),
|
|
1331
1354
|
u && /* @__PURE__ */ J("p", {
|
|
1332
1355
|
className: "text-xs text-status-error-text",
|
|
@@ -1341,8 +1364,8 @@ var be = [
|
|
|
1341
1364
|
})
|
|
1342
1365
|
]
|
|
1343
1366
|
});
|
|
1344
|
-
},
|
|
1345
|
-
let s =
|
|
1367
|
+
}, Le = ({ urls: e, onChange: n, upload: r, uploading: i, progress: a, error: o }) => {
|
|
1368
|
+
let s = P(null), c = M(async (t) => {
|
|
1346
1369
|
try {
|
|
1347
1370
|
let i = await r(t);
|
|
1348
1371
|
n([...e, i.downloadUrl]);
|
|
@@ -1373,7 +1396,7 @@ var be = [
|
|
|
1373
1396
|
type: "button",
|
|
1374
1397
|
onClick: () => l(t),
|
|
1375
1398
|
className: "absolute top-1 right-1 rounded-full bg-black/60 text-white p-0.5 opacity-0 group-hover:opacity-100 transition-opacity",
|
|
1376
|
-
children: /* @__PURE__ */ J(
|
|
1399
|
+
children: /* @__PURE__ */ J(K, { size: 12 })
|
|
1377
1400
|
})]
|
|
1378
1401
|
}, t)), /* @__PURE__ */ J("button", {
|
|
1379
1402
|
type: "button",
|
|
@@ -1386,7 +1409,7 @@ var be = [
|
|
|
1386
1409
|
}), /* @__PURE__ */ Y("span", {
|
|
1387
1410
|
className: "text-xs",
|
|
1388
1411
|
children: [a, "%"]
|
|
1389
|
-
})] }) : /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(
|
|
1412
|
+
})] }) : /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(W, { size: 18 }), /* @__PURE__ */ J("span", {
|
|
1390
1413
|
className: "text-xs",
|
|
1391
1414
|
children: "Add screenshot"
|
|
1392
1415
|
})] })
|
|
@@ -1408,13 +1431,13 @@ var be = [
|
|
|
1408
1431
|
})
|
|
1409
1432
|
]
|
|
1410
1433
|
});
|
|
1411
|
-
},
|
|
1434
|
+
}, Re = new Set(["workflow", "template"]), ze = [{
|
|
1412
1435
|
value: "FREE",
|
|
1413
1436
|
label: "Free"
|
|
1414
1437
|
}, {
|
|
1415
1438
|
value: "PAID",
|
|
1416
1439
|
label: "Paid"
|
|
1417
|
-
}],
|
|
1440
|
+
}], Be = [
|
|
1418
1441
|
{
|
|
1419
1442
|
value: "agent",
|
|
1420
1443
|
label: "Agent"
|
|
@@ -1484,7 +1507,7 @@ var be = [
|
|
|
1484
1507
|
label: "Component"
|
|
1485
1508
|
}
|
|
1486
1509
|
];
|
|
1487
|
-
function
|
|
1510
|
+
function Ve(e) {
|
|
1488
1511
|
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") : "";
|
|
1489
1512
|
return {
|
|
1490
1513
|
iconUrl: e.iconUrl ?? "",
|
|
@@ -1513,25 +1536,25 @@ function ze(e) {
|
|
|
1513
1536
|
manifestJsonContent: typeof t.jsonContent == "string" ? t.jsonContent : typeof t.content == "string" ? t.content : ""
|
|
1514
1537
|
};
|
|
1515
1538
|
}
|
|
1516
|
-
var
|
|
1517
|
-
let { workspacesGatewayUrl: r, authToken: i, workspaceId: a, getWorkspaceToken: o } = e(), { t: s } =
|
|
1539
|
+
var He = ({ app: n }) => {
|
|
1540
|
+
let { workspacesGatewayUrl: r, authToken: i, workspaceId: a, getWorkspaceToken: o } = e(), { t: s } = I(), c = (e, t) => {
|
|
1518
1541
|
let n = s(e);
|
|
1519
1542
|
return n === e ? t : n;
|
|
1520
|
-
}, [l, u] =
|
|
1543
|
+
}, [l, u] = F(() => Ve(n)), [d, f] = F(!1), [m, g] = F(!1), v = P(n);
|
|
1521
1544
|
v.current = n;
|
|
1522
|
-
let [y] =
|
|
1523
|
-
|
|
1524
|
-
u(
|
|
1545
|
+
let [y] = h(), [b, { loading: x }] = p();
|
|
1546
|
+
re(() => {
|
|
1547
|
+
u(Ve(v.current));
|
|
1525
1548
|
}, [n.id]);
|
|
1526
|
-
let
|
|
1549
|
+
let S = (e, t) => {
|
|
1527
1550
|
u((n) => ({
|
|
1528
1551
|
...n,
|
|
1529
1552
|
[e]: t
|
|
1530
1553
|
}));
|
|
1531
1554
|
}, ee = async () => {
|
|
1532
|
-
|
|
1555
|
+
f(!0);
|
|
1533
1556
|
try {
|
|
1534
|
-
let e = l.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean), t = l.manifestPermissionsText.split("\n").map((e) => e.trim()).filter(Boolean), r =
|
|
1557
|
+
let e = l.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean), t = l.manifestPermissionsText.split("\n").map((e) => e.trim()).filter(Boolean), r = Re.has(l.manifestItemType), i = n.manifest ?? {}, a = {
|
|
1535
1558
|
manifestVersion: typeof i.manifestVersion == "string" ? i.manifestVersion : "1.0",
|
|
1536
1559
|
itemType: l.manifestItemType || void 0,
|
|
1537
1560
|
identity: {
|
|
@@ -1568,19 +1591,19 @@ var Be = ({ app: n }) => {
|
|
|
1568
1591
|
pricingDetails: Object.keys(o).length > 0 ? o : null,
|
|
1569
1592
|
manifest: a
|
|
1570
1593
|
}
|
|
1571
|
-
} }),
|
|
1594
|
+
} }), C("success");
|
|
1572
1595
|
} catch {
|
|
1573
|
-
|
|
1596
|
+
C("error");
|
|
1574
1597
|
} finally {
|
|
1575
|
-
|
|
1598
|
+
f(!1);
|
|
1576
1599
|
}
|
|
1577
|
-
},
|
|
1600
|
+
}, w = async () => {
|
|
1578
1601
|
try {
|
|
1579
|
-
await b({ variables: { id: n.id } }),
|
|
1602
|
+
await b({ variables: { id: n.id } }), C("success");
|
|
1580
1603
|
} catch {
|
|
1581
|
-
|
|
1604
|
+
C("error");
|
|
1582
1605
|
}
|
|
1583
|
-
},
|
|
1606
|
+
}, T = P(null), te = P(null), { upload: k, uploading: A, progress: ne, error: N } = j(r, i, a, o), { upload: ae, uploading: L, progress: ce, error: z } = j(r, i, a, o, "/DevPortal/Assets"), { upload: le, uploading: B, progress: de, error: H } = j(r, i, a, o, "/DevPortal/Assets"), { upload: fe, uploading: pe, progress: U, error: G } = j(r, i, a, o, "/DevPortal/Assets"), he = M(async (e) => {
|
|
1584
1607
|
let t = e.target.files?.[0];
|
|
1585
1608
|
if (t) {
|
|
1586
1609
|
e.target.value = "";
|
|
@@ -1592,8 +1615,8 @@ var Be = ({ app: n }) => {
|
|
|
1592
1615
|
}));
|
|
1593
1616
|
} catch {}
|
|
1594
1617
|
}
|
|
1595
|
-
}, [k]),
|
|
1596
|
-
e.preventDefault(),
|
|
1618
|
+
}, [k]), K = M(async (e) => {
|
|
1619
|
+
e.preventDefault(), g(!1);
|
|
1597
1620
|
let t = e.dataTransfer.files?.[0];
|
|
1598
1621
|
if (t) try {
|
|
1599
1622
|
let e = await k(t);
|
|
@@ -1602,7 +1625,7 @@ var Be = ({ app: n }) => {
|
|
|
1602
1625
|
manifestRegistryUrl: e.downloadUrl
|
|
1603
1626
|
}));
|
|
1604
1627
|
} catch {}
|
|
1605
|
-
}, [k]), ge =
|
|
1628
|
+
}, [k]), ge = M((e) => {
|
|
1606
1629
|
let t = e.target.files?.[0];
|
|
1607
1630
|
if (!t) return;
|
|
1608
1631
|
let n = new FileReader();
|
|
@@ -1621,8 +1644,8 @@ var Be = ({ app: n }) => {
|
|
|
1621
1644
|
}));
|
|
1622
1645
|
} catch {}
|
|
1623
1646
|
}, n.readAsText(t), e.target.value = "";
|
|
1624
|
-
}, []), _e =
|
|
1625
|
-
let e = l.manifestPermissionsText.split("\n").map((e) => e.trim()).filter(Boolean), t =
|
|
1647
|
+
}, []), _e = M(() => {
|
|
1648
|
+
let e = l.manifestPermissionsText.split("\n").map((e) => e.trim()).filter(Boolean), t = Re.has(l.manifestItemType), r = {
|
|
1626
1649
|
manifestVersion: "1.0",
|
|
1627
1650
|
itemType: l.manifestItemType || void 0,
|
|
1628
1651
|
identity: {
|
|
@@ -1637,15 +1660,15 @@ var Be = ({ app: n }) => {
|
|
|
1637
1660
|
compatibility: { minPlatformVersion: l.manifestMinPlatformVersion }
|
|
1638
1661
|
}, i = new Blob([JSON.stringify(r, null, 2)], { type: "application/json" }), a = URL.createObjectURL(i), o = document.createElement("a");
|
|
1639
1662
|
o.href = a, o.download = `${n.slug}-manifest.json`, o.click(), URL.revokeObjectURL(a);
|
|
1640
|
-
}, [n.slug, l]), ve =
|
|
1663
|
+
}, [n.slug, l]), ve = Re.has(l.manifestItemType), X = l.manifestInstallType === "builtin", ye = l.pricingType !== "FREE", be = l.manifestRegistryUrl ? l.manifestRegistryUrl.split("/").pop()?.split("?")[0] ?? "" : "";
|
|
1641
1664
|
n.status;
|
|
1642
|
-
let
|
|
1665
|
+
let xe = n.status === "SUBMITTED", Se = n.status === "PUBLISHED";
|
|
1643
1666
|
return /* @__PURE__ */ Y("div", {
|
|
1644
1667
|
className: "space-y-8 max-w-3xl",
|
|
1645
1668
|
children: [
|
|
1646
|
-
|
|
1669
|
+
Se ? /* @__PURE__ */ Y("div", {
|
|
1647
1670
|
className: "flex items-start gap-3 rounded-lg border border-success/30 bg-success/10 px-4 py-3",
|
|
1648
|
-
children: [/* @__PURE__ */ J(
|
|
1671
|
+
children: [/* @__PURE__ */ J(R, {
|
|
1649
1672
|
size: 16,
|
|
1650
1673
|
className: "text-success mt-0.5 shrink-0"
|
|
1651
1674
|
}), /* @__PURE__ */ Y("div", {
|
|
@@ -1662,9 +1685,9 @@ var Be = ({ app: n }) => {
|
|
|
1662
1685
|
]
|
|
1663
1686
|
})]
|
|
1664
1687
|
})]
|
|
1665
|
-
}) :
|
|
1688
|
+
}) : xe ? /* @__PURE__ */ Y("div", {
|
|
1666
1689
|
className: "flex items-start gap-3 rounded-lg border border-primary/30 bg-primary/5 px-4 py-3",
|
|
1667
|
-
children: [/* @__PURE__ */ J(
|
|
1690
|
+
children: [/* @__PURE__ */ J(oe, {
|
|
1668
1691
|
size: 16,
|
|
1669
1692
|
className: "text-primary mt-0.5 shrink-0"
|
|
1670
1693
|
}), /* @__PURE__ */ Y("div", {
|
|
@@ -1686,7 +1709,7 @@ var Be = ({ app: n }) => {
|
|
|
1686
1709
|
})]
|
|
1687
1710
|
}) : /* @__PURE__ */ Y("div", {
|
|
1688
1711
|
className: "flex items-start gap-3 rounded-lg border border-warning/30 bg-warning/5 px-4 py-3",
|
|
1689
|
-
children: [/* @__PURE__ */ J(
|
|
1712
|
+
children: [/* @__PURE__ */ J(ie, {
|
|
1690
1713
|
size: 16,
|
|
1691
1714
|
className: "text-warning mt-0.5 shrink-0"
|
|
1692
1715
|
}), /* @__PURE__ */ Y("div", {
|
|
@@ -1700,42 +1723,42 @@ var Be = ({ app: n }) => {
|
|
|
1700
1723
|
})]
|
|
1701
1724
|
})]
|
|
1702
1725
|
}),
|
|
1703
|
-
/* @__PURE__ */ J(
|
|
1726
|
+
/* @__PURE__ */ J(_, {
|
|
1704
1727
|
title: c("devportal.package", "Package"),
|
|
1705
1728
|
description: c("devportal.packageDescription", "Technical configuration — how FluidGrid installs and runs this item"),
|
|
1706
1729
|
children: /* @__PURE__ */ Y("div", {
|
|
1707
1730
|
className: "space-y-6",
|
|
1708
1731
|
children: [
|
|
1709
|
-
/* @__PURE__ */ J(
|
|
1732
|
+
/* @__PURE__ */ J(D, {
|
|
1710
1733
|
label: c("devportal.storeItemType", "Item Type"),
|
|
1711
1734
|
value: l.manifestItemType,
|
|
1712
1735
|
onChange: (e) => {
|
|
1713
1736
|
let t = e.target.value;
|
|
1714
|
-
|
|
1737
|
+
S("manifestItemType", t), Re.has(t) ? S("manifestInstallType", "json") : l.manifestInstallType === "json" && S("manifestInstallType", "zip");
|
|
1715
1738
|
},
|
|
1716
|
-
options:
|
|
1739
|
+
options: Be,
|
|
1717
1740
|
placeholder: c("devportal.selectItemType", "Select item type…"),
|
|
1718
1741
|
hint: c("devportal.storeItemTypeHint", "Determines how this item is categorised and how the platform runs it")
|
|
1719
1742
|
}),
|
|
1720
1743
|
/* @__PURE__ */ Y("div", {
|
|
1721
1744
|
className: "grid gap-4 sm:grid-cols-2",
|
|
1722
|
-
children: [/* @__PURE__ */ J(
|
|
1745
|
+
children: [/* @__PURE__ */ J(E, {
|
|
1723
1746
|
label: c("devportal.manifestDisplayName", "Display Name"),
|
|
1724
1747
|
value: l.manifestDisplayName,
|
|
1725
|
-
onChange: (e) =>
|
|
1748
|
+
onChange: (e) => S("manifestDisplayName", e.target.value),
|
|
1726
1749
|
placeholder: "My Awesome Node"
|
|
1727
|
-
}), /* @__PURE__ */ J(
|
|
1750
|
+
}), /* @__PURE__ */ J(E, {
|
|
1728
1751
|
label: c("devportal.manifestVersion", "Version"),
|
|
1729
1752
|
value: l.manifestVersion,
|
|
1730
|
-
onChange: (e) =>
|
|
1753
|
+
onChange: (e) => S("manifestVersion", e.target.value),
|
|
1731
1754
|
placeholder: "1.0.0",
|
|
1732
1755
|
hint: c("devportal.semverHint", "Semantic version (MAJOR.MINOR.PATCH)")
|
|
1733
1756
|
})]
|
|
1734
1757
|
}),
|
|
1735
|
-
ve && /* @__PURE__ */ J(
|
|
1758
|
+
ve && /* @__PURE__ */ J(O, {
|
|
1736
1759
|
label: c("devportal.jsonContent", l.manifestItemType === "workflow" ? "Workflow Definition (JSON)" : "Template Definition (JSON)"),
|
|
1737
1760
|
value: l.manifestJsonContent,
|
|
1738
|
-
onChange: (e) =>
|
|
1761
|
+
onChange: (e) => S("manifestJsonContent", e.target.value),
|
|
1739
1762
|
rows: 12,
|
|
1740
1763
|
placeholder: "{\n \"nodes\": [],\n \"edges\": []\n}",
|
|
1741
1764
|
hint: c("devportal.jsonContentHint", "Paste the full JSON definition. Stored and applied directly — no zip needed.")
|
|
@@ -1752,8 +1775,8 @@ var Be = ({ app: n }) => {
|
|
|
1752
1775
|
className: "flex items-center gap-2 text-sm cursor-pointer select-none",
|
|
1753
1776
|
children: [/* @__PURE__ */ J("input", {
|
|
1754
1777
|
type: "checkbox",
|
|
1755
|
-
checked:
|
|
1756
|
-
onChange: (e) =>
|
|
1778
|
+
checked: X,
|
|
1779
|
+
onChange: (e) => S("manifestInstallType", e.target.checked ? "builtin" : "zip"),
|
|
1757
1780
|
className: "h-4 w-4 rounded border-border accent-primary"
|
|
1758
1781
|
}), /* @__PURE__ */ J("span", {
|
|
1759
1782
|
className: "text-text-secondary",
|
|
@@ -1761,10 +1784,10 @@ var Be = ({ app: n }) => {
|
|
|
1761
1784
|
})]
|
|
1762
1785
|
})]
|
|
1763
1786
|
}),
|
|
1764
|
-
!
|
|
1787
|
+
!X && /* @__PURE__ */ Y(q, { children: [
|
|
1765
1788
|
/* @__PURE__ */ Y("div", {
|
|
1766
1789
|
className: "flex gap-3 rounded-lg border border-border-subtle bg-bg-sunken p-3 text-sm text-text-secondary",
|
|
1767
|
-
children: [/* @__PURE__ */ J(
|
|
1790
|
+
children: [/* @__PURE__ */ J(ue, {
|
|
1768
1791
|
size: 15,
|
|
1769
1792
|
className: "mt-0.5 shrink-0"
|
|
1770
1793
|
}), /* @__PURE__ */ Y("span", { children: [
|
|
@@ -1778,19 +1801,19 @@ var Be = ({ app: n }) => {
|
|
|
1778
1801
|
}),
|
|
1779
1802
|
/* @__PURE__ */ Y("div", {
|
|
1780
1803
|
onDragOver: (e) => {
|
|
1781
|
-
e.preventDefault(),
|
|
1804
|
+
e.preventDefault(), g(!0);
|
|
1782
1805
|
},
|
|
1783
|
-
onDragLeave: () =>
|
|
1784
|
-
onDrop: (e) => void
|
|
1785
|
-
onClick: () => !
|
|
1786
|
-
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",
|
|
1806
|
+
onDragLeave: () => g(!1),
|
|
1807
|
+
onDrop: (e) => void K(e),
|
|
1808
|
+
onClick: () => !A && te.current?.click(),
|
|
1809
|
+
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", m ? "border-primary bg-primary/5" : "border-border hover:border-border-strong hover:bg-bg-sunken", A && "pointer-events-none opacity-75"),
|
|
1787
1810
|
children: [/* @__PURE__ */ J("input", {
|
|
1788
|
-
ref:
|
|
1811
|
+
ref: te,
|
|
1789
1812
|
type: "file",
|
|
1790
1813
|
accept: ".zip,application/zip,application/x-zip-compressed",
|
|
1791
1814
|
className: "hidden",
|
|
1792
|
-
onChange: (e) => void
|
|
1793
|
-
}),
|
|
1815
|
+
onChange: (e) => void he(e)
|
|
1816
|
+
}), A ? /* @__PURE__ */ Y(q, { children: [
|
|
1794
1817
|
/* @__PURE__ */ J(V, {
|
|
1795
1818
|
size: 28,
|
|
1796
1819
|
className: "animate-spin text-primary"
|
|
@@ -1800,7 +1823,7 @@ var Be = ({ app: n }) => {
|
|
|
1800
1823
|
children: [
|
|
1801
1824
|
c("devportal.uploading", "Uploading…"),
|
|
1802
1825
|
" ",
|
|
1803
|
-
|
|
1826
|
+
ne,
|
|
1804
1827
|
"%"
|
|
1805
1828
|
]
|
|
1806
1829
|
}), /* @__PURE__ */ J("p", {
|
|
@@ -1811,19 +1834,19 @@ var Be = ({ app: n }) => {
|
|
|
1811
1834
|
className: "w-48 h-1.5 rounded-full bg-muted overflow-hidden",
|
|
1812
1835
|
children: /* @__PURE__ */ J("div", {
|
|
1813
1836
|
className: "h-full bg-primary transition-all",
|
|
1814
|
-
style: { width: `${
|
|
1837
|
+
style: { width: `${ne}%` }
|
|
1815
1838
|
})
|
|
1816
1839
|
})
|
|
1817
|
-
] }) :
|
|
1840
|
+
] }) : be ? /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(R, {
|
|
1818
1841
|
size: 28,
|
|
1819
1842
|
className: "text-status-success-text"
|
|
1820
1843
|
}), /* @__PURE__ */ Y("div", { children: [/* @__PURE__ */ J("p", {
|
|
1821
1844
|
className: "text-sm font-medium",
|
|
1822
|
-
children:
|
|
1845
|
+
children: be
|
|
1823
1846
|
}), /* @__PURE__ */ J("p", {
|
|
1824
1847
|
className: "text-xs text-text-secondary mt-0.5",
|
|
1825
1848
|
children: c("devportal.clickToReplace", "Click or drag to replace")
|
|
1826
|
-
})] })] }) : /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(
|
|
1849
|
+
})] })] }) : /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(W, {
|
|
1827
1850
|
size: 28,
|
|
1828
1851
|
className: "text-text-secondary"
|
|
1829
1852
|
}), /* @__PURE__ */ Y("div", { children: [/* @__PURE__ */ J("p", {
|
|
@@ -1834,14 +1857,14 @@ var Be = ({ app: n }) => {
|
|
|
1834
1857
|
children: c("devportal.orClickToBrowse", "or click to browse")
|
|
1835
1858
|
})] })] })]
|
|
1836
1859
|
}),
|
|
1837
|
-
|
|
1860
|
+
N && /* @__PURE__ */ J("p", {
|
|
1838
1861
|
className: "text-xs text-status-error-text",
|
|
1839
|
-
children:
|
|
1862
|
+
children: N
|
|
1840
1863
|
})
|
|
1841
1864
|
] }),
|
|
1842
|
-
|
|
1865
|
+
X && /* @__PURE__ */ Y("div", {
|
|
1843
1866
|
className: "flex gap-3 rounded-lg border border-border-subtle bg-bg-sunken p-3 text-sm text-text-secondary",
|
|
1844
|
-
children: [/* @__PURE__ */ J(
|
|
1867
|
+
children: [/* @__PURE__ */ J(ue, {
|
|
1845
1868
|
size: 15,
|
|
1846
1869
|
className: "mt-0.5 shrink-0"
|
|
1847
1870
|
}), /* @__PURE__ */ J("span", { children: c("devportal.builtinHint", "Built-in items are pre-installed by the platform. No package upload is needed.") })]
|
|
@@ -1852,7 +1875,7 @@ var Be = ({ app: n }) => {
|
|
|
1852
1875
|
className: "flex flex-wrap items-center gap-2 border-t pt-4",
|
|
1853
1876
|
children: [
|
|
1854
1877
|
/* @__PURE__ */ J("input", {
|
|
1855
|
-
ref:
|
|
1878
|
+
ref: T,
|
|
1856
1879
|
type: "file",
|
|
1857
1880
|
accept: ".json,application/json",
|
|
1858
1881
|
className: "hidden",
|
|
@@ -1864,15 +1887,15 @@ var Be = ({ app: n }) => {
|
|
|
1864
1887
|
}),
|
|
1865
1888
|
/* @__PURE__ */ Y("button", {
|
|
1866
1889
|
type: "button",
|
|
1867
|
-
onClick: () =>
|
|
1890
|
+
onClick: () => T.current?.click(),
|
|
1868
1891
|
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",
|
|
1869
|
-
children: [/* @__PURE__ */ J(
|
|
1892
|
+
children: [/* @__PURE__ */ J(W, { size: 12 }), c("devportal.importManifest", "Import")]
|
|
1870
1893
|
}),
|
|
1871
1894
|
/* @__PURE__ */ Y("button", {
|
|
1872
1895
|
type: "button",
|
|
1873
1896
|
onClick: _e,
|
|
1874
1897
|
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",
|
|
1875
|
-
children: [/* @__PURE__ */ J(
|
|
1898
|
+
children: [/* @__PURE__ */ J(se, { size: 12 }), c("devportal.exportManifest", "Export")]
|
|
1876
1899
|
}),
|
|
1877
1900
|
/* @__PURE__ */ J("span", {
|
|
1878
1901
|
className: "text-xs text-text-secondary",
|
|
@@ -1883,7 +1906,7 @@ var Be = ({ app: n }) => {
|
|
|
1883
1906
|
]
|
|
1884
1907
|
})
|
|
1885
1908
|
}),
|
|
1886
|
-
/* @__PURE__ */ J(
|
|
1909
|
+
/* @__PURE__ */ J(_, {
|
|
1887
1910
|
title: c("devportal.storePresentation", "Store Presence"),
|
|
1888
1911
|
description: c("devportal.storePresentationDescription", "Visual assets and copy shown to users browsing the marketplace"),
|
|
1889
1912
|
children: /* @__PURE__ */ Y("div", {
|
|
@@ -1891,109 +1914,109 @@ var Be = ({ app: n }) => {
|
|
|
1891
1914
|
children: [
|
|
1892
1915
|
/* @__PURE__ */ Y("div", {
|
|
1893
1916
|
className: "grid gap-5 sm:grid-cols-2",
|
|
1894
|
-
children: [/* @__PURE__ */ J(
|
|
1917
|
+
children: [/* @__PURE__ */ J(Ie, {
|
|
1895
1918
|
label: c("devportal.iconUrl", "Icon"),
|
|
1896
1919
|
value: l.iconUrl,
|
|
1897
|
-
onChange: (e) =>
|
|
1920
|
+
onChange: (e) => S("iconUrl", e),
|
|
1898
1921
|
hint: c("devportal.iconUrlHint", "Square, 256×256 px recommended"),
|
|
1899
1922
|
aspectClass: "aspect-square",
|
|
1900
|
-
upload:
|
|
1901
|
-
uploading:
|
|
1923
|
+
upload: ae,
|
|
1924
|
+
uploading: L,
|
|
1902
1925
|
progress: ce,
|
|
1903
|
-
error:
|
|
1904
|
-
}), /* @__PURE__ */ J(
|
|
1926
|
+
error: z
|
|
1927
|
+
}), /* @__PURE__ */ J(Ie, {
|
|
1905
1928
|
label: c("devportal.bannerUrl", "Banner"),
|
|
1906
1929
|
value: l.bannerUrl,
|
|
1907
|
-
onChange: (e) =>
|
|
1930
|
+
onChange: (e) => S("bannerUrl", e),
|
|
1908
1931
|
hint: c("devportal.bannerUrlHint", "1280×640 px recommended"),
|
|
1909
1932
|
aspectClass: "aspect-video",
|
|
1910
|
-
upload:
|
|
1911
|
-
uploading:
|
|
1912
|
-
progress:
|
|
1913
|
-
error:
|
|
1933
|
+
upload: le,
|
|
1934
|
+
uploading: B,
|
|
1935
|
+
progress: de,
|
|
1936
|
+
error: H
|
|
1914
1937
|
})]
|
|
1915
1938
|
}),
|
|
1916
|
-
/* @__PURE__ */ J(
|
|
1939
|
+
/* @__PURE__ */ J(E, {
|
|
1917
1940
|
label: c("devportal.videoUrl", "Demo Video URL"),
|
|
1918
1941
|
value: l.videoUrl,
|
|
1919
|
-
onChange: (e) =>
|
|
1942
|
+
onChange: (e) => S("videoUrl", e.target.value),
|
|
1920
1943
|
placeholder: "https://...",
|
|
1921
1944
|
hint: c("devportal.videoUrlHint", "YouTube or Vimeo embed URL")
|
|
1922
1945
|
}),
|
|
1923
|
-
/* @__PURE__ */ J(
|
|
1946
|
+
/* @__PURE__ */ J(O, {
|
|
1924
1947
|
label: c("devportal.shortDescription", "Short Description"),
|
|
1925
1948
|
value: l.shortDescription,
|
|
1926
|
-
onChange: (e) =>
|
|
1949
|
+
onChange: (e) => S("shortDescription", e.target.value),
|
|
1927
1950
|
maxLength: 200,
|
|
1928
1951
|
rows: 2,
|
|
1929
1952
|
hint: `${l.shortDescription.length}/200 · ${c("devportal.shortDescHint", "Shown in search results and cards")}`
|
|
1930
1953
|
}),
|
|
1931
|
-
/* @__PURE__ */ J(
|
|
1954
|
+
/* @__PURE__ */ J(O, {
|
|
1932
1955
|
label: c("devportal.longDescription", "Full Description"),
|
|
1933
1956
|
value: l.description,
|
|
1934
|
-
onChange: (e) =>
|
|
1957
|
+
onChange: (e) => S("description", e.target.value),
|
|
1935
1958
|
rows: 5,
|
|
1936
1959
|
hint: c("devportal.fullDescHint", "Markdown supported")
|
|
1937
1960
|
}),
|
|
1938
|
-
/* @__PURE__ */ J(
|
|
1961
|
+
/* @__PURE__ */ J(Le, {
|
|
1939
1962
|
urls: l.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean),
|
|
1940
|
-
onChange: (e) =>
|
|
1941
|
-
upload:
|
|
1942
|
-
uploading:
|
|
1943
|
-
progress:
|
|
1944
|
-
error:
|
|
1963
|
+
onChange: (e) => S("screenshotsText", e.join("\n")),
|
|
1964
|
+
upload: fe,
|
|
1965
|
+
uploading: pe,
|
|
1966
|
+
progress: U,
|
|
1967
|
+
error: G
|
|
1945
1968
|
})
|
|
1946
1969
|
]
|
|
1947
1970
|
})
|
|
1948
1971
|
}),
|
|
1949
|
-
/* @__PURE__ */ J(
|
|
1972
|
+
/* @__PURE__ */ J(_, {
|
|
1950
1973
|
title: c("devportal.linksPolicies", "Links & Policies"),
|
|
1951
1974
|
description: c("devportal.linksPoliciesDescription", "External resources and legal documents — privacy policy and terms are required for store submission"),
|
|
1952
1975
|
children: /* @__PURE__ */ Y("div", {
|
|
1953
1976
|
className: "grid gap-4 sm:grid-cols-2",
|
|
1954
1977
|
children: [
|
|
1955
|
-
/* @__PURE__ */ J(
|
|
1978
|
+
/* @__PURE__ */ J(E, {
|
|
1956
1979
|
label: c("devportal.websiteUrl", "Website"),
|
|
1957
1980
|
value: l.websiteUrl,
|
|
1958
|
-
onChange: (e) =>
|
|
1981
|
+
onChange: (e) => S("websiteUrl", e.target.value),
|
|
1959
1982
|
placeholder: "https://..."
|
|
1960
1983
|
}),
|
|
1961
|
-
/* @__PURE__ */ J(
|
|
1984
|
+
/* @__PURE__ */ J(E, {
|
|
1962
1985
|
label: c("devportal.documentationUrl", "Documentation"),
|
|
1963
1986
|
value: l.documentationUrl,
|
|
1964
|
-
onChange: (e) =>
|
|
1987
|
+
onChange: (e) => S("documentationUrl", e.target.value),
|
|
1965
1988
|
placeholder: "https://..."
|
|
1966
1989
|
}),
|
|
1967
|
-
/* @__PURE__ */ J(
|
|
1990
|
+
/* @__PURE__ */ J(E, {
|
|
1968
1991
|
label: c("devportal.githubUrl", "GitHub"),
|
|
1969
1992
|
value: l.githubUrl,
|
|
1970
|
-
onChange: (e) =>
|
|
1993
|
+
onChange: (e) => S("githubUrl", e.target.value),
|
|
1971
1994
|
placeholder: "https://github.com/..."
|
|
1972
1995
|
}),
|
|
1973
|
-
/* @__PURE__ */ J(
|
|
1996
|
+
/* @__PURE__ */ J(E, {
|
|
1974
1997
|
label: c("devportal.supportUrl", "Support"),
|
|
1975
1998
|
value: l.supportUrl,
|
|
1976
|
-
onChange: (e) =>
|
|
1999
|
+
onChange: (e) => S("supportUrl", e.target.value),
|
|
1977
2000
|
placeholder: "https://..."
|
|
1978
2001
|
}),
|
|
1979
|
-
/* @__PURE__ */ J(
|
|
2002
|
+
/* @__PURE__ */ J(E, {
|
|
1980
2003
|
label: `${c("devportal.privacyPolicyUrl", "Privacy Policy")} *`,
|
|
1981
2004
|
value: l.privacyPolicyUrl,
|
|
1982
|
-
onChange: (e) =>
|
|
2005
|
+
onChange: (e) => S("privacyPolicyUrl", e.target.value),
|
|
1983
2006
|
placeholder: "https://...",
|
|
1984
2007
|
hint: c("devportal.requiredForStore", "Required for store submission")
|
|
1985
2008
|
}),
|
|
1986
|
-
/* @__PURE__ */ J(
|
|
2009
|
+
/* @__PURE__ */ J(E, {
|
|
1987
2010
|
label: `${c("devportal.termsOfServiceUrl", "Terms of Service")} *`,
|
|
1988
2011
|
value: l.termsOfServiceUrl,
|
|
1989
|
-
onChange: (e) =>
|
|
2012
|
+
onChange: (e) => S("termsOfServiceUrl", e.target.value),
|
|
1990
2013
|
placeholder: "https://...",
|
|
1991
2014
|
hint: c("devportal.requiredForStore", "Required for store submission")
|
|
1992
2015
|
})
|
|
1993
2016
|
]
|
|
1994
2017
|
})
|
|
1995
2018
|
}),
|
|
1996
|
-
/* @__PURE__ */ J(
|
|
2019
|
+
/* @__PURE__ */ J(_, {
|
|
1997
2020
|
title: c("devportal.pricing", "Pricing"),
|
|
1998
2021
|
description: c("devportal.pricingDescription", "How this item is priced in the marketplace"),
|
|
1999
2022
|
children: /* @__PURE__ */ Y("div", {
|
|
@@ -2003,24 +2026,24 @@ var Be = ({ app: n }) => {
|
|
|
2003
2026
|
children: c("devportal.pricingType", "Pricing Type")
|
|
2004
2027
|
}), /* @__PURE__ */ J("div", {
|
|
2005
2028
|
className: "flex flex-wrap gap-2",
|
|
2006
|
-
children:
|
|
2029
|
+
children: ze.map((e) => /* @__PURE__ */ J("button", {
|
|
2007
2030
|
type: "button",
|
|
2008
|
-
onClick: () =>
|
|
2031
|
+
onClick: () => S("pricingType", e.value),
|
|
2009
2032
|
className: t("rounded-md border px-3 py-1.5 text-sm font-medium transition-colors", l.pricingType === e.value ? "bg-primary text-primary-foreground border-primary" : "hover:bg-muted"),
|
|
2010
2033
|
children: e.label
|
|
2011
2034
|
}, e.value))
|
|
2012
|
-
})] }),
|
|
2035
|
+
})] }), ye && /* @__PURE__ */ Y("div", {
|
|
2013
2036
|
className: "grid gap-4 sm:grid-cols-2",
|
|
2014
|
-
children: [/* @__PURE__ */ J(
|
|
2037
|
+
children: [/* @__PURE__ */ J(E, {
|
|
2015
2038
|
label: c("devportal.price", "Price"),
|
|
2016
2039
|
type: "number",
|
|
2017
2040
|
value: l.price,
|
|
2018
|
-
onChange: (e) =>
|
|
2041
|
+
onChange: (e) => S("price", e.target.value),
|
|
2019
2042
|
placeholder: "0.00"
|
|
2020
|
-
}), /* @__PURE__ */ J(
|
|
2043
|
+
}), /* @__PURE__ */ J(E, {
|
|
2021
2044
|
label: c("devportal.currency", "Currency"),
|
|
2022
2045
|
value: l.currency,
|
|
2023
|
-
onChange: (e) =>
|
|
2046
|
+
onChange: (e) => S("currency", e.target.value),
|
|
2024
2047
|
placeholder: "USD"
|
|
2025
2048
|
})]
|
|
2026
2049
|
})]
|
|
@@ -2036,22 +2059,22 @@ var Be = ({ app: n }) => {
|
|
|
2036
2059
|
children: d ? /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(V, {
|
|
2037
2060
|
size: 16,
|
|
2038
2061
|
className: "animate-spin"
|
|
2039
|
-
}), c("devportal.saving", "Saving…")] }) : /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(
|
|
2040
|
-
}), !
|
|
2062
|
+
}), c("devportal.saving", "Saving…")] }) : /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(me, { size: 16 }), c("devportal.saveStoreListing", "Save Store Listing")] })
|
|
2063
|
+
}), !Se && /* @__PURE__ */ J("button", {
|
|
2041
2064
|
type: "button",
|
|
2042
|
-
onClick: () => void
|
|
2043
|
-
disabled:
|
|
2065
|
+
onClick: () => void w(),
|
|
2066
|
+
disabled: x || d,
|
|
2044
2067
|
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",
|
|
2045
|
-
children:
|
|
2068
|
+
children: x ? /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(V, {
|
|
2046
2069
|
size: 16,
|
|
2047
2070
|
className: "animate-spin"
|
|
2048
|
-
}), c("devportal.submitting", "Submitting…")] }) : /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(
|
|
2071
|
+
}), c("devportal.submitting", "Submitting…")] }) : /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(R, { size: 16 }), xe ? c("devportal.resubmitForReview", "Resubmit for Review") : c("devportal.submitForReview", "Submit for Review")] })
|
|
2049
2072
|
})]
|
|
2050
2073
|
})
|
|
2051
2074
|
]
|
|
2052
2075
|
});
|
|
2053
2076
|
}, Q = ({ label: e, value: n, trend: r }) => {
|
|
2054
|
-
let { t: i } =
|
|
2077
|
+
let { t: i } = I();
|
|
2055
2078
|
return /* @__PURE__ */ Y("div", {
|
|
2056
2079
|
className: "rounded-lg border bg-card p-4",
|
|
2057
2080
|
children: [
|
|
@@ -2082,9 +2105,9 @@ var Be = ({ app: n }) => {
|
|
|
2082
2105
|
target: "_blank",
|
|
2083
2106
|
rel: "noopener noreferrer",
|
|
2084
2107
|
className: "flex items-center gap-2 text-sm text-primary hover:underline",
|
|
2085
|
-
children: [/* @__PURE__ */ J(
|
|
2108
|
+
children: [/* @__PURE__ */ J(z, { size: 14 }), e]
|
|
2086
2109
|
});
|
|
2087
2110
|
//#endregion
|
|
2088
|
-
export {
|
|
2111
|
+
export { we as ApplicationDetailPage };
|
|
2089
2112
|
|
|
2090
2113
|
//# sourceMappingURL=ApplicationDetailPage.js.map
|