@burdenoff/microfe-devportal 2026.916.7 → 2026.916.8
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/components/ImageUploadField.d.ts +30 -0
- package/dist/devportal/components/ImageUploadField.d.ts.map +1 -0
- package/dist/devportal/components/ImageUploadField.js +182 -0
- package/dist/devportal/components/ImageUploadField.js.map +1 -0
- package/dist/devportal/pages/ApplicationDetailPage.d.ts.map +1 -1
- package/dist/devportal/pages/ApplicationDetailPage.js +712 -883
- package/dist/devportal/pages/ApplicationDetailPage.js.map +1 -1
- package/dist/devportal/pages/CreatePhysicalItemPage.d.ts.map +1 -1
- package/dist/devportal/pages/CreatePhysicalItemPage.js +238 -331
- package/dist/devportal/pages/CreatePhysicalItemPage.js.map +1 -1
- package/dist/devportal/pages/EditPhysicalItemPage.d.ts.map +1 -1
- package/dist/devportal/pages/EditPhysicalItemPage.js +352 -408
- package/dist/devportal/pages/EditPhysicalItemPage.js.map +1 -1
- package/package.json +1 -1
|
@@ -16,16 +16,17 @@ import { GrantDelegationModal as oe } from "../components/GrantDelegationModal.j
|
|
|
16
16
|
import { MarkdownEditor as se } from "../components/MarkdownEditor.js";
|
|
17
17
|
import { useDevportalPermission as ce } from "../hooks/usePermission.js";
|
|
18
18
|
import { DEVPORTAL_PERMISSIONS as le } from "../constants/permissions.js";
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
19
|
+
import { ImageUploadField as ue, ScreenshotGallery as de } from "../components/ImageUploadField.js";
|
|
20
|
+
import { usePackageUpload as fe } from "../hooks/usePackageUpload.js";
|
|
21
|
+
import { useCallback as A, useEffect as j, useMemo as M, useRef as pe, useState as N } from "react";
|
|
22
|
+
import { Markdown as me } from "@burdenoff/fe-libs/shared/components";
|
|
23
|
+
import { AlertCircle as P, AppWindow as he, BarChart3 as ge, Check as F, CheckCircle as _e, ChevronRight as ve, CircleDollarSign as ye, Clock as be, Copy as xe, Edit as Se, ExternalLink as I, FlaskConical as Ce, Gift as we, Info as Te, Key as Ee, Link as De, Loader2 as L, Lock as Oe, MoreHorizontal as ke, Package as Ae, Plus as R, Power as je, RefreshCw as Me, SendHorizontal as Ne, Shield as z, Store as Pe, TrendingUp as Fe, Upload as Ie, Users as B, Wallet as Le, Webhook as Re, X as ze, XCircle as Be } from "lucide-react";
|
|
24
|
+
import { useParams as Ve } from "react-router";
|
|
25
|
+
import { Fragment as V, jsx as H, jsxs as U } from "react/jsx-runtime";
|
|
26
|
+
import { useI18n as W } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
27
|
+
import { CTAOverflowMenu as He, EmphasisPanel as Ue, GlassCard as We } from "@burdenoff/fe-libs/ui";
|
|
27
28
|
//#region src/devportal/pages/ApplicationDetailPage.tsx
|
|
28
|
-
function
|
|
29
|
+
function Ge(e) {
|
|
29
30
|
return e ? {
|
|
30
31
|
id: e.id,
|
|
31
32
|
name: e.name,
|
|
@@ -79,7 +80,7 @@ function He(e) {
|
|
|
79
80
|
updatedAt: e.updatedAt
|
|
80
81
|
} : null;
|
|
81
82
|
}
|
|
82
|
-
function
|
|
83
|
+
function Ke(e) {
|
|
83
84
|
return {
|
|
84
85
|
id: e.id,
|
|
85
86
|
applicationId: e.applicationId,
|
|
@@ -103,7 +104,7 @@ function Ue(e) {
|
|
|
103
104
|
updatedAt: e.updatedAt
|
|
104
105
|
};
|
|
105
106
|
}
|
|
106
|
-
function
|
|
107
|
+
function qe(e) {
|
|
107
108
|
return {
|
|
108
109
|
id: e.id,
|
|
109
110
|
applicationId: e.applicationId,
|
|
@@ -119,7 +120,7 @@ function We(e) {
|
|
|
119
120
|
createdAt: e.createdAt
|
|
120
121
|
};
|
|
121
122
|
}
|
|
122
|
-
function
|
|
123
|
+
function Je(e) {
|
|
123
124
|
return {
|
|
124
125
|
id: e.id,
|
|
125
126
|
appId: e.appId,
|
|
@@ -141,218 +142,218 @@ function Ge(e) {
|
|
|
141
142
|
revokedBy: e.revokedBy || void 0
|
|
142
143
|
};
|
|
143
144
|
}
|
|
144
|
-
var
|
|
145
|
+
var Ye = [
|
|
145
146
|
{
|
|
146
147
|
id: "overview",
|
|
147
148
|
label: "Overview",
|
|
148
|
-
icon:
|
|
149
|
+
icon: he
|
|
149
150
|
},
|
|
150
151
|
{
|
|
151
152
|
id: "analytics",
|
|
152
153
|
label: "Analytics",
|
|
153
|
-
icon:
|
|
154
|
+
icon: ge
|
|
154
155
|
},
|
|
155
156
|
{
|
|
156
157
|
id: "store-listing",
|
|
157
158
|
label: "Store Listing",
|
|
158
|
-
icon:
|
|
159
|
+
icon: Pe
|
|
159
160
|
},
|
|
160
161
|
{
|
|
161
162
|
id: "versions",
|
|
162
163
|
label: "Versions",
|
|
163
|
-
icon:
|
|
164
|
+
icon: Ae
|
|
164
165
|
},
|
|
165
166
|
{
|
|
166
167
|
id: "pricing",
|
|
167
168
|
label: "Pricing",
|
|
168
|
-
icon:
|
|
169
|
+
icon: ye
|
|
169
170
|
},
|
|
170
171
|
{
|
|
171
172
|
id: "permissions",
|
|
172
173
|
label: "Permissions",
|
|
173
|
-
icon:
|
|
174
|
+
icon: z
|
|
174
175
|
},
|
|
175
176
|
{
|
|
176
177
|
id: "webhooks",
|
|
177
178
|
label: "Webhooks",
|
|
178
|
-
icon:
|
|
179
|
+
icon: Re
|
|
179
180
|
},
|
|
180
181
|
{
|
|
181
182
|
id: "delegations",
|
|
182
183
|
label: "Delegations",
|
|
183
|
-
icon:
|
|
184
|
+
icon: B
|
|
184
185
|
},
|
|
185
186
|
{
|
|
186
187
|
id: "playground",
|
|
187
188
|
label: "API Playground",
|
|
188
|
-
icon:
|
|
189
|
+
icon: I
|
|
189
190
|
},
|
|
190
191
|
{
|
|
191
192
|
id: "oauth",
|
|
192
193
|
label: "OAuth",
|
|
193
|
-
icon:
|
|
194
|
+
icon: Oe
|
|
194
195
|
},
|
|
195
196
|
{
|
|
196
197
|
id: "api-keys",
|
|
197
198
|
label: "API Keys",
|
|
198
|
-
icon:
|
|
199
|
+
icon: Ee
|
|
199
200
|
}
|
|
200
|
-
],
|
|
201
|
+
], Xe = {
|
|
201
202
|
ACTIVE: "bg-status-success-bg-subtle text-status-success-text",
|
|
202
203
|
REVOKED: "bg-status-error-bg-subtle text-status-error-text",
|
|
203
204
|
EXPIRED: "bg-bg-sunken text-text-secondary"
|
|
204
|
-
},
|
|
205
|
+
}, G = ({ message: e = "Loading..." }) => /* @__PURE__ */ U("div", {
|
|
205
206
|
className: "flex items-center justify-center gap-3 py-12",
|
|
206
|
-
children: [/* @__PURE__ */
|
|
207
|
+
children: [/* @__PURE__ */ H(L, {
|
|
207
208
|
size: 20,
|
|
208
209
|
className: "animate-spin text-text-secondary"
|
|
209
|
-
}), /* @__PURE__ */
|
|
210
|
+
}), /* @__PURE__ */ H("p", {
|
|
210
211
|
className: "text-sm text-text-secondary",
|
|
211
212
|
children: e
|
|
212
213
|
})]
|
|
213
|
-
}),
|
|
214
|
+
}), K = ({ message: e }) => /* @__PURE__ */ U("div", {
|
|
214
215
|
className: "flex flex-col items-center justify-center gap-2 py-12 text-center",
|
|
215
|
-
children: [/* @__PURE__ */
|
|
216
|
+
children: [/* @__PURE__ */ H(P, {
|
|
216
217
|
size: 32,
|
|
217
218
|
className: "text-status-error-text"
|
|
218
|
-
}), /* @__PURE__ */
|
|
219
|
+
}), /* @__PURE__ */ H("p", {
|
|
219
220
|
className: "text-sm text-text-secondary",
|
|
220
221
|
children: e
|
|
221
222
|
})]
|
|
222
|
-
}),
|
|
223
|
-
let { navigate: i, basePath: o, workspaceId: c } = e(), { t: u } =
|
|
223
|
+
}), q = () => {
|
|
224
|
+
let { navigate: i, basePath: o, workspaceId: c } = e(), { t: u } = W(), m = (e, t) => {
|
|
224
225
|
let n = u(e);
|
|
225
226
|
return n === e ? t : n;
|
|
226
|
-
}, { allowed: g } = ce(le.APP_UPDATE), { allowed: y } = ce(le.APP_DELETE), { appId: b } =
|
|
227
|
+
}, { allowed: g } = ce(le.APP_UPDATE), { allowed: y } = ce(le.APP_DELETE), { appId: b } = Ve(), [S, D] = N("overview"), [te, ne] = N(!1), [k, ie] = N(!1), [se, ue] = N(null), [de, fe] = N(!1), { data: j, loading: M, error: pe, refetch: me } = s({
|
|
227
228
|
variables: { id: b },
|
|
228
229
|
skip: !b
|
|
229
|
-
}), [
|
|
230
|
+
}), [ge, { loading: ye }] = h(), [xe, { loading: I }] = a(), [we, { loading: Te }] = _(), [Ee] = p(), [De, { loading: Oe }] = f(), [ke, { loading: Ae }] = v(), { data: R, refetch: z } = d({
|
|
230
231
|
variables: {
|
|
231
232
|
applicationId: b,
|
|
232
233
|
workspaceId: c ?? void 0
|
|
233
234
|
},
|
|
234
235
|
skip: !c || !b,
|
|
235
236
|
fetchPolicy: "cache-and-network"
|
|
236
|
-
}),
|
|
237
|
-
variables: { id:
|
|
238
|
-
skip: !
|
|
237
|
+
}), Fe = R?.appInstallations?.edges?.[0]?.node ?? null, { data: Ie } = l({
|
|
238
|
+
variables: { id: j?.application?.developerOrganizationId ?? "" },
|
|
239
|
+
skip: !j?.application?.developerOrganizationId,
|
|
239
240
|
fetchPolicy: "cache-first"
|
|
240
|
-
}),
|
|
241
|
+
}), B = A((e) => {
|
|
241
242
|
i?.(`${o}${e}`);
|
|
242
|
-
}, [i, o]),
|
|
243
|
-
let e =
|
|
243
|
+
}, [i, o]), Le = A(async () => {
|
|
244
|
+
let e = j?.application?.appId;
|
|
244
245
|
if (e) try {
|
|
245
|
-
let t = (await
|
|
246
|
+
let t = (await ge({ variables: { id: e } })).data?.rotateAppSecret.clientSecret;
|
|
246
247
|
t && ue(t), ne(!1);
|
|
247
248
|
} catch {}
|
|
248
|
-
}, [
|
|
249
|
+
}, [j?.application?.appId, ge]), Re = A(async () => {
|
|
249
250
|
if (b) try {
|
|
250
|
-
await xe({ variables: { id: b } }), ie(!1),
|
|
251
|
+
await xe({ variables: { id: b } }), ie(!1), B("/apps");
|
|
251
252
|
} catch {}
|
|
252
253
|
}, [
|
|
253
254
|
b,
|
|
254
255
|
xe,
|
|
255
|
-
|
|
256
|
-
]),
|
|
256
|
+
B
|
|
257
|
+
]), ze = A(async (e) => {
|
|
257
258
|
if (!(!b || !c)) try {
|
|
258
|
-
await
|
|
259
|
+
await De({ variables: { input: {
|
|
259
260
|
applicationId: b,
|
|
260
261
|
scope: "WORKSPACE",
|
|
261
262
|
workspaceId: c,
|
|
262
263
|
autoUpdate: !1,
|
|
263
264
|
...e ? { version: e } : {}
|
|
264
|
-
} } }),
|
|
265
|
+
} } }), z(), O("success");
|
|
265
266
|
} catch (e) {
|
|
266
267
|
console.error("[DevPortal] Test in Workspace failed:", e), O("error");
|
|
267
268
|
}
|
|
268
269
|
}, [
|
|
269
270
|
b,
|
|
270
271
|
c,
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
]), [Ue, We] = N(!1), [
|
|
272
|
+
De,
|
|
273
|
+
z
|
|
274
|
+
]), [Ue, We] = N(!1), [Ke, qe] = N(""), Je = A(async (e) => {
|
|
274
275
|
try {
|
|
275
|
-
await
|
|
276
|
+
await ke({ variables: { id: e } }), z(), O("success");
|
|
276
277
|
} catch {
|
|
277
278
|
O("error");
|
|
278
279
|
}
|
|
279
|
-
}, [
|
|
280
|
+
}, [ke, z]), Xe = A(async () => {
|
|
280
281
|
if (b) try {
|
|
281
|
-
let e = (
|
|
282
|
-
for (let t of e) await
|
|
283
|
-
await
|
|
282
|
+
let e = (j?.application?.versions?.edges ?? []).map((e) => e.node).filter((e) => e.status === "draft");
|
|
283
|
+
for (let t of e) await Ee({ variables: { id: t.id } });
|
|
284
|
+
await we({ variables: { id: b } }), O("success");
|
|
284
285
|
} catch (e) {
|
|
285
286
|
console.error("[DevPortal] Submit failed:", e), O("error");
|
|
286
287
|
} finally {
|
|
287
|
-
|
|
288
|
+
me();
|
|
288
289
|
}
|
|
289
290
|
}, [
|
|
290
291
|
b,
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
292
|
+
j?.application?.versions?.edges,
|
|
293
|
+
Ee,
|
|
294
|
+
we,
|
|
295
|
+
me
|
|
295
296
|
]);
|
|
296
|
-
if (
|
|
297
|
-
if (
|
|
297
|
+
if (M && !j) return /* @__PURE__ */ H(n, { message: m("devportal.loadingApplication", "Loading application...") });
|
|
298
|
+
if (pe) return /* @__PURE__ */ H(x, {
|
|
298
299
|
title: m("devportal.error", "Error"),
|
|
299
300
|
backLink: `${o}/apps`,
|
|
300
301
|
backLabel: m("devportal.backToApplications", "Back to Applications"),
|
|
301
|
-
children: /* @__PURE__ */
|
|
302
|
+
children: /* @__PURE__ */ U("div", {
|
|
302
303
|
className: "flex flex-col items-center justify-center py-12 text-center",
|
|
303
304
|
children: [
|
|
304
|
-
/* @__PURE__ */
|
|
305
|
+
/* @__PURE__ */ H(P, {
|
|
305
306
|
size: 48,
|
|
306
307
|
className: "text-status-error-text mb-4"
|
|
307
308
|
}),
|
|
308
|
-
/* @__PURE__ */
|
|
309
|
+
/* @__PURE__ */ H("h3", {
|
|
309
310
|
className: "text-lg font-semibold mb-2",
|
|
310
311
|
children: m("devportal.failedToLoadApplication", "Failed to load application")
|
|
311
312
|
}),
|
|
312
|
-
/* @__PURE__ */
|
|
313
|
+
/* @__PURE__ */ H("p", {
|
|
313
314
|
className: "text-sm text-text-secondary",
|
|
314
|
-
children:
|
|
315
|
+
children: pe.message
|
|
315
316
|
})
|
|
316
317
|
]
|
|
317
318
|
})
|
|
318
319
|
});
|
|
319
|
-
let
|
|
320
|
-
if (!
|
|
320
|
+
let G = Ge(j?.application);
|
|
321
|
+
if (!G) return /* @__PURE__ */ H(x, {
|
|
321
322
|
title: m("devportal.notFound", "Not Found"),
|
|
322
323
|
backLink: `${o}/apps`,
|
|
323
324
|
backLabel: m("devportal.backToApplications", "Back to Applications"),
|
|
324
|
-
children: /* @__PURE__ */
|
|
325
|
+
children: /* @__PURE__ */ H(r, {
|
|
325
326
|
illustration: "empty-generic",
|
|
326
|
-
icon: /* @__PURE__ */
|
|
327
|
+
icon: /* @__PURE__ */ H(he, { size: 48 }),
|
|
327
328
|
title: m("devportal.applicationNotFound", "Application not found"),
|
|
328
329
|
description: m("devportal.applicationNotFoundDescription", "The application you're looking for doesn't exist or you don't have access to it.")
|
|
329
330
|
})
|
|
330
331
|
});
|
|
331
|
-
let
|
|
332
|
+
let K = [
|
|
332
333
|
"NODE",
|
|
333
334
|
"WORKFLOW",
|
|
334
335
|
"PARSER",
|
|
335
336
|
"WIDGET",
|
|
336
337
|
"DASHBOARD"
|
|
337
|
-
].includes(
|
|
338
|
-
...
|
|
338
|
+
].includes(G.appType), q = G.appType === "API_INTEGRATION", J = j?.application?.versions?.totalCount ?? 0, $e = G.appType === "NODE", et = j?.application?.versions?.edges ?? [], st = et.find((e) => e.node.isLatest)?.node ?? et[0]?.node ?? null, ct = (st?.metadata ?? {}).sandboxBuildStatus, lt = $e && ct !== "READY", ut = lt ? ct === "FAILED" || ct === "DISPATCH_FAILED" ? m("devportal.testInWorkspaceBuildFailed", "Test in Workspace (sandbox build failed)") : m("devportal.testInWorkspaceBuilding", "Test in Workspace (building sandbox image…)") : m("devportal.testInWorkspace", "Test in Workspace"), Y = G.pricingType === "PAID", ft = Ie?.developerOrganization, pt = ft?.platformFeeRate ?? .3, X = !!ft?.billingAccountId, mt = G.pricingDetails ?? {}, Z = G.pricingType === "FREE" || G.pricingType === "PAID" && typeof mt.price == "number" && mt.price > 0, Q = !!G.description?.trim() && !!G.category && !!G.iconUrl && (G.visibility === "PUBLIC" || G.visibility === "UNLISTED") && (!K && !q || J > 0) && (!Y || X) && Z, $ = Q && G.status !== "PUBLISHED" && G.status !== "SUBMITTED" && G.status !== "INACTIVE" && G.status !== "REVOKED", gt = [
|
|
339
|
+
...K ? [] : [{
|
|
339
340
|
label: m("devportal.rotateSecret", "Rotate Secret"),
|
|
340
|
-
icon: /* @__PURE__ */
|
|
341
|
-
disabled: !
|
|
341
|
+
icon: /* @__PURE__ */ H(Me, { size: 16 }),
|
|
342
|
+
disabled: !G.appId,
|
|
342
343
|
onSelect: () => ne(!0)
|
|
343
344
|
}],
|
|
344
|
-
...!
|
|
345
|
+
...!K || $e ? Fe ? [{
|
|
345
346
|
label: m("devportal.uninstallFromWorkspace", "Uninstall from Workspace"),
|
|
346
|
-
icon: /* @__PURE__ */
|
|
347
|
-
disabled:
|
|
348
|
-
onSelect: () => void Je(
|
|
347
|
+
icon: /* @__PURE__ */ H(Be, { size: 16 }),
|
|
348
|
+
disabled: Ae || !c,
|
|
349
|
+
onSelect: () => void Je(Fe.id)
|
|
349
350
|
}] : [{
|
|
350
|
-
label:
|
|
351
|
-
icon: /* @__PURE__ */
|
|
352
|
-
disabled:
|
|
351
|
+
label: ut,
|
|
352
|
+
icon: /* @__PURE__ */ H(Ce, { size: 16 }),
|
|
353
|
+
disabled: Oe || !c || lt,
|
|
353
354
|
onSelect: () => {
|
|
354
|
-
if (
|
|
355
|
-
|
|
355
|
+
if (et.length <= 1) {
|
|
356
|
+
ze(st?.version);
|
|
356
357
|
return;
|
|
357
358
|
}
|
|
358
359
|
qe(st?.version ?? ""), We(!0);
|
|
@@ -360,177 +361,177 @@ var Ke = [
|
|
|
360
361
|
}] : [],
|
|
361
362
|
{
|
|
362
363
|
label: m("devportal.deactivate", "Deactivate"),
|
|
363
|
-
icon: /* @__PURE__ */
|
|
364
|
+
icon: /* @__PURE__ */ H(je, { size: 16 }),
|
|
364
365
|
intent: "destructive",
|
|
365
366
|
disabled: !y,
|
|
366
367
|
onSelect: () => ie(!0)
|
|
367
368
|
}
|
|
368
369
|
];
|
|
369
|
-
return /* @__PURE__ */
|
|
370
|
-
title:
|
|
371
|
-
description:
|
|
370
|
+
return /* @__PURE__ */ U(x, {
|
|
371
|
+
title: G.name,
|
|
372
|
+
description: G.shortDescription,
|
|
372
373
|
purpose: m("devportal.appDetailPurpose", "Everything about this application in one place — its credentials, the permissions and webhooks it uses, its analytics, and its store listing. Use the tabs to configure each area, then edit or publish when it is ready."),
|
|
373
374
|
backLink: `${o}/apps`,
|
|
374
375
|
backLabel: m("devportal.backToApplications", "Back to Applications"),
|
|
375
|
-
actions: /* @__PURE__ */
|
|
376
|
+
actions: /* @__PURE__ */ U("div", {
|
|
376
377
|
className: "flex items-center gap-2",
|
|
377
|
-
children: [
|
|
378
|
+
children: [G.status === "SUBMITTED" ? /* @__PURE__ */ U("div", {
|
|
378
379
|
className: "flex items-center gap-1.5 rounded-full border border-status-warning-bg bg-status-warning-bg-subtle px-3 py-1.5 text-xs font-medium text-status-warning-text",
|
|
379
|
-
children: [/* @__PURE__ */
|
|
380
|
-
}) :
|
|
380
|
+
children: [/* @__PURE__ */ H(be, { size: 13 }), m("devportal.underReview", "Under Review")]
|
|
381
|
+
}) : G.status !== "PUBLISHED" && G.status !== "INACTIVE" && G.status !== "REVOKED" ? /* @__PURE__ */ H("button", {
|
|
381
382
|
type: "button",
|
|
382
|
-
onClick: () => void
|
|
383
|
-
disabled: !$ ||
|
|
383
|
+
onClick: () => void Xe(),
|
|
384
|
+
disabled: !$ || Te,
|
|
384
385
|
title: Q ? void 0 : [
|
|
385
|
-
!
|
|
386
|
-
!
|
|
387
|
-
!
|
|
388
|
-
(
|
|
389
|
-
|
|
386
|
+
!G.description?.trim() && "Add full description",
|
|
387
|
+
!G.category && "Select a category",
|
|
388
|
+
!G.iconUrl && "Upload an app icon",
|
|
389
|
+
(G.visibility === "PRIVATE" || G.visibility === "INTERNAL") && "Set visibility to Public (marketplace) or Unlisted (link sharing) — Private and Internal cannot be submitted for review",
|
|
390
|
+
K && J === 0 && "Upload at least one version",
|
|
390
391
|
!Z && "Set pricing (choose Free or Paid in the Pricing tab)",
|
|
391
392
|
Y && !X && "Link a billing account to receive payments"
|
|
392
393
|
].filter(Boolean).join(" · "),
|
|
393
|
-
className: t("inline-flex items-center gap-2 rounded-md px-5 py-2 text-sm font-medium whitespace-nowrap transition-colors", $ && !
|
|
394
|
-
children:
|
|
394
|
+
className: t("inline-flex items-center gap-2 rounded-md px-5 py-2 text-sm font-medium whitespace-nowrap transition-colors", $ && !Te ? "bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg/90 cursor-pointer" : "cursor-not-allowed bg-bg-muted text-text-tertiary ring-1 ring-border-subtle"),
|
|
395
|
+
children: Te ? /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(L, {
|
|
395
396
|
size: 15,
|
|
396
397
|
className: "animate-spin"
|
|
397
|
-
}), m("devportal.submitting", "Submitting…")] }) : /* @__PURE__ */
|
|
398
|
-
}) : null, /* @__PURE__ */
|
|
398
|
+
}), m("devportal.submitting", "Submitting…")] }) : /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(Ne, { size: 15 }), m("devportal.submitForReview", "Submit for Review")] })
|
|
399
|
+
}) : null, /* @__PURE__ */ H(He, {
|
|
399
400
|
primary: {
|
|
400
401
|
label: m("devportal.editApp", "Edit App"),
|
|
401
|
-
icon: /* @__PURE__ */
|
|
402
|
+
icon: /* @__PURE__ */ H(Se, { size: 16 }),
|
|
402
403
|
disabled: !g,
|
|
403
|
-
onSelect: () =>
|
|
404
|
+
onSelect: () => B(`/apps/${G.id}/edit`)
|
|
404
405
|
},
|
|
405
406
|
actions: gt
|
|
406
407
|
})]
|
|
407
408
|
}),
|
|
408
409
|
children: [
|
|
409
|
-
se && /* @__PURE__ */
|
|
410
|
+
se && /* @__PURE__ */ H(ee, {
|
|
410
411
|
title: m("devportal.newAppSecretGenerated", "New App Secret Generated"),
|
|
411
412
|
secret: se,
|
|
412
413
|
description: m("devportal.appSecretRotatedDescription", "Your app secret has been rotated. The old secret is no longer valid."),
|
|
413
414
|
onDismiss: () => ue(null)
|
|
414
415
|
}),
|
|
415
|
-
/* @__PURE__ */
|
|
416
|
+
/* @__PURE__ */ U("div", {
|
|
416
417
|
className: "flex flex-wrap items-center gap-2",
|
|
417
418
|
children: [
|
|
418
|
-
/* @__PURE__ */
|
|
419
|
-
status:
|
|
419
|
+
/* @__PURE__ */ H(T, {
|
|
420
|
+
status: G.status,
|
|
420
421
|
type: "app"
|
|
421
422
|
}),
|
|
422
|
-
/* @__PURE__ */
|
|
423
|
-
title:
|
|
424
|
-
children: /* @__PURE__ */
|
|
425
|
-
status:
|
|
423
|
+
/* @__PURE__ */ H("span", {
|
|
424
|
+
title: G.visibility === "PUBLIC" ? "Public — discoverable in the marketplace. Requires review approval before going live." : G.visibility === "UNLISTED" ? "Unlisted — not in the store, but accessible via a direct share link. You can still submit for marketplace review." : G.visibility === "INTERNAL" ? "Internal — visible to all members of your developer organization, but not to anyone outside." : "Private — only you (the creator) can see this. Other org members cannot access it.",
|
|
425
|
+
children: /* @__PURE__ */ H(T, {
|
|
426
|
+
status: G.visibility,
|
|
426
427
|
type: "app"
|
|
427
428
|
})
|
|
428
429
|
}),
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
/* @__PURE__ */
|
|
430
|
+
G.isVerified && /* @__PURE__ */ H(E, { verified: !0 }),
|
|
431
|
+
G.isFeatured && /* @__PURE__ */ H(w, {}),
|
|
432
|
+
/* @__PURE__ */ H("span", {
|
|
432
433
|
className: "text-sm text-text-secondary",
|
|
433
|
-
children: C[
|
|
434
|
+
children: C[G.appType] || G.appType
|
|
434
435
|
})
|
|
435
436
|
]
|
|
436
437
|
}),
|
|
437
|
-
|
|
438
|
+
G.status === "SUBMITTED" && /* @__PURE__ */ U("div", {
|
|
438
439
|
className: "flex items-start gap-3 rounded-lg border border-border-subtle bg-status-warning-bg-subtle p-4",
|
|
439
|
-
children: [/* @__PURE__ */
|
|
440
|
+
children: [/* @__PURE__ */ H(be, {
|
|
440
441
|
size: 18,
|
|
441
442
|
className: "text-status-warning-text mt-0.5 flex-shrink-0"
|
|
442
|
-
}), /* @__PURE__ */
|
|
443
|
+
}), /* @__PURE__ */ U("div", {
|
|
443
444
|
className: "text-sm",
|
|
444
|
-
children: [/* @__PURE__ */
|
|
445
|
+
children: [/* @__PURE__ */ H("p", {
|
|
445
446
|
className: "font-medium text-status-warning-text",
|
|
446
447
|
children: m("devportal.underReview", "Under Review")
|
|
447
|
-
}), /* @__PURE__ */
|
|
448
|
+
}), /* @__PURE__ */ U("p", {
|
|
448
449
|
className: "mt-0.5 text-text-secondary",
|
|
449
|
-
children: [m("devportal.underReviewDesc", "Your submission is being reviewed by our team. You'll be notified of the outcome."),
|
|
450
|
+
children: [m("devportal.underReviewDesc", "Your submission is being reviewed by our team. You'll be notified of the outcome."), G.submittedAt && /* @__PURE__ */ U("span", {
|
|
450
451
|
className: "ml-1",
|
|
451
452
|
children: [
|
|
452
453
|
"Submitted ",
|
|
453
|
-
new Date(
|
|
454
|
+
new Date(G.submittedAt).toLocaleDateString(),
|
|
454
455
|
"."
|
|
455
456
|
]
|
|
456
457
|
})]
|
|
457
458
|
})]
|
|
458
459
|
})]
|
|
459
460
|
}),
|
|
460
|
-
|
|
461
|
+
G.status === "REJECTED" && /* @__PURE__ */ U("div", {
|
|
461
462
|
className: "flex items-start gap-3 rounded-lg border border-status-error-bg bg-status-error-bg-subtle p-4",
|
|
462
|
-
children: [/* @__PURE__ */
|
|
463
|
+
children: [/* @__PURE__ */ H(Be, {
|
|
463
464
|
size: 18,
|
|
464
465
|
className: "text-status-error-text mt-0.5 flex-shrink-0"
|
|
465
|
-
}), /* @__PURE__ */
|
|
466
|
+
}), /* @__PURE__ */ U("div", {
|
|
466
467
|
className: "text-sm",
|
|
467
468
|
children: [
|
|
468
|
-
/* @__PURE__ */
|
|
469
|
+
/* @__PURE__ */ H("p", {
|
|
469
470
|
className: "font-medium text-status-error-text",
|
|
470
471
|
children: m("devportal.reviewRejected", "Review Rejected")
|
|
471
472
|
}),
|
|
472
|
-
/* @__PURE__ */
|
|
473
|
+
/* @__PURE__ */ H("p", {
|
|
473
474
|
className: "mt-0.5 text-text-secondary",
|
|
474
|
-
children:
|
|
475
|
+
children: G.reviewNotes || m("devportal.reviewRejectedDesc", "Your submission was not approved. Please review the feedback, update your app, and re-submit.")
|
|
475
476
|
}),
|
|
476
|
-
/* @__PURE__ */
|
|
477
|
+
/* @__PURE__ */ H("button", {
|
|
477
478
|
type: "button",
|
|
478
|
-
onClick: () =>
|
|
479
|
+
onClick: () => B(`/apps/${G.id}/edit`),
|
|
479
480
|
className: "mt-2 inline-flex items-center gap-1 text-xs font-medium text-primary underline",
|
|
480
481
|
children: m("devportal.editAndResubmit", "Edit app and re-submit →")
|
|
481
482
|
})
|
|
482
483
|
]
|
|
483
484
|
})]
|
|
484
485
|
}),
|
|
485
|
-
|
|
486
|
+
G.status === "PUBLISHED" && /* @__PURE__ */ U("div", {
|
|
486
487
|
className: "flex items-start gap-3 rounded-lg border border-status-success-bg bg-status-success-bg-subtle p-4",
|
|
487
|
-
children: [/* @__PURE__ */
|
|
488
|
+
children: [/* @__PURE__ */ H(_e, {
|
|
488
489
|
size: 18,
|
|
489
490
|
className: "text-status-success-text mt-0.5 flex-shrink-0"
|
|
490
|
-
}), /* @__PURE__ */
|
|
491
|
+
}), /* @__PURE__ */ U("div", {
|
|
491
492
|
className: "text-sm",
|
|
492
|
-
children: [/* @__PURE__ */
|
|
493
|
+
children: [/* @__PURE__ */ H("p", {
|
|
493
494
|
className: "font-medium text-status-success-text",
|
|
494
495
|
children: m("devportal.liveInStore", "Live in the Store")
|
|
495
|
-
}), /* @__PURE__ */
|
|
496
|
+
}), /* @__PURE__ */ H("p", {
|
|
496
497
|
className: "mt-0.5 text-text-secondary",
|
|
497
498
|
children: m("devportal.liveInStoreDesc", "Your app is published and visible to users in the marketplace.")
|
|
498
499
|
})]
|
|
499
500
|
})]
|
|
500
501
|
}),
|
|
501
|
-
|
|
502
|
+
G.status === "UNLISTED" && /* @__PURE__ */ U("div", {
|
|
502
503
|
className: "flex items-start gap-3 rounded-lg border border-status-warning-bg bg-status-warning-bg-subtle p-4",
|
|
503
|
-
children: [/* @__PURE__ */
|
|
504
|
+
children: [/* @__PURE__ */ H(P, {
|
|
504
505
|
size: 18,
|
|
505
506
|
className: "text-status-warning-text mt-0.5 flex-shrink-0"
|
|
506
|
-
}), /* @__PURE__ */
|
|
507
|
+
}), /* @__PURE__ */ U("div", {
|
|
507
508
|
className: "text-sm",
|
|
508
509
|
children: [
|
|
509
|
-
/* @__PURE__ */
|
|
510
|
+
/* @__PURE__ */ H("p", {
|
|
510
511
|
className: "font-medium text-status-warning-text",
|
|
511
512
|
children: m("devportal.delistedFromStore", "Delisted from the Store")
|
|
512
513
|
}),
|
|
513
|
-
/* @__PURE__ */
|
|
514
|
+
/* @__PURE__ */ H("p", {
|
|
514
515
|
className: "mt-0.5 text-text-secondary",
|
|
515
516
|
children: m("devportal.delistedFromStoreDesc", "Your app has been removed from the marketplace and is no longer visible to new users. Existing installs continue to work.")
|
|
516
517
|
}),
|
|
517
|
-
|
|
518
|
+
G.reviewNotes && /* @__PURE__ */ U("p", {
|
|
518
519
|
className: "mt-2 rounded-md bg-status-warning-bg px-3 py-2 font-mono text-xs text-status-warning-text",
|
|
519
520
|
children: [
|
|
520
521
|
m("devportal.delistReason", "Reason"),
|
|
521
522
|
": ",
|
|
522
|
-
|
|
523
|
+
G.reviewNotes
|
|
523
524
|
]
|
|
524
525
|
})
|
|
525
526
|
]
|
|
526
527
|
})]
|
|
527
528
|
}),
|
|
528
|
-
(
|
|
529
|
-
let e = !!
|
|
530
|
-
!
|
|
531
|
-
!
|
|
532
|
-
!
|
|
533
|
-
(
|
|
529
|
+
(G.status === "DRAFT" || G.status === "REJECTED") && !Q && (() => {
|
|
530
|
+
let e = !!G.description?.trim() && !!G.category && !!G.iconUrl && (G.visibility === "PUBLIC" || G.visibility === "UNLISTED"), n = !K && !q || J > 0, r = [
|
|
531
|
+
!G.description?.trim() && "Add a full description",
|
|
532
|
+
!G.category && "Select a category",
|
|
533
|
+
!G.iconUrl && "Upload an app icon",
|
|
534
|
+
(G.visibility === "PRIVATE" || G.visibility === "INTERNAL") && "Set to Public (marketplace) or Unlisted (share via link) — Private and Internal block review submission"
|
|
534
535
|
].filter(Boolean), i = [
|
|
535
536
|
{
|
|
536
537
|
id: "store",
|
|
@@ -539,14 +540,14 @@ var Ke = [
|
|
|
539
540
|
done: e,
|
|
540
541
|
onClick: () => D("store-listing")
|
|
541
542
|
},
|
|
542
|
-
...
|
|
543
|
+
...K ? [{
|
|
543
544
|
id: "version",
|
|
544
545
|
label: m("devportal.setupVersionStep", "Upload a Version"),
|
|
545
|
-
hint: n ? m("devportal.done", "Done") :
|
|
546
|
+
hint: n ? m("devportal.done", "Done") : G.appType === "NODE" ? m("devportal.uploadVersionHint", "Upload your ZIP bundle and manifest") : m("devportal.uploadManifestVersionHint", "Upload your manifest JSON"),
|
|
546
547
|
done: n,
|
|
547
548
|
onClick: () => D("versions")
|
|
548
549
|
}] : [],
|
|
549
|
-
...
|
|
550
|
+
...q ? [{
|
|
550
551
|
id: "version",
|
|
551
552
|
label: m("devportal.setupIntegrationVersionStep", "Publish a Version"),
|
|
552
553
|
hint: n ? m("devportal.done", "Done") : m("devportal.integrationVersionHint", "Define required scopes and publish your first API version"),
|
|
@@ -576,27 +577,27 @@ var Ke = [
|
|
|
576
577
|
{
|
|
577
578
|
id: "submit",
|
|
578
579
|
label: m("devportal.submitForReview", "Submit for Review"),
|
|
579
|
-
hint: Q ? m("devportal.readyToSubmit", "Ready — click Submit for Review above") :
|
|
580
|
+
hint: Q ? m("devportal.readyToSubmit", "Ready — click Submit for Review above") : G.description?.trim() ? G.category ? G.iconUrl ? G.visibility === "PRIVATE" || G.visibility === "INTERNAL" ? m("devportal.hintPrivateVisibility", "Set visibility to Public (marketplace) or Unlisted (share via link) — Private and Internal cannot be submitted") : (K || q) && J === 0 ? m("devportal.hintMissingVersion", "Upload at least one version") : Z ? Y && !X ? m("devportal.hintMissingBilling", "Link a billing account in the Pricing tab to receive payouts") : m("devportal.completeStepsFirst", "Complete the steps above first") : m("devportal.hintMissingPricing", "Choose Free or set a credit price in the Pricing tab") : m("devportal.hintMissingIcon", "Upload an app icon on the Store Listing tab") : m("devportal.hintMissingCategory", "Select a category on the Store Listing tab") : m("devportal.hintMissingDescription", "Add a full description on the Store Listing tab"),
|
|
580
581
|
done: !1,
|
|
581
582
|
onClick: void 0
|
|
582
583
|
}
|
|
583
584
|
], a = i.filter((e) => e.done).length;
|
|
584
|
-
return /* @__PURE__ */
|
|
585
|
+
return /* @__PURE__ */ U("div", {
|
|
585
586
|
className: "rounded-xl border border-border-subtle bg-bg-surface shadow-sm",
|
|
586
|
-
children: [/* @__PURE__ */
|
|
587
|
+
children: [/* @__PURE__ */ H("div", {
|
|
587
588
|
className: "flex items-center justify-between border-b border-border-subtle px-5 py-4",
|
|
588
|
-
children: /* @__PURE__ */
|
|
589
|
+
children: /* @__PURE__ */ U("div", {
|
|
589
590
|
className: "flex items-center gap-3",
|
|
590
|
-
children: [/* @__PURE__ */
|
|
591
|
+
children: [/* @__PURE__ */ H("div", {
|
|
591
592
|
className: "flex h-8 w-8 items-center justify-center rounded-full bg-action-primary-bg/10",
|
|
592
|
-
children: /* @__PURE__ */
|
|
593
|
+
children: /* @__PURE__ */ H(Pe, {
|
|
593
594
|
size: 16,
|
|
594
595
|
className: "text-primary"
|
|
595
596
|
})
|
|
596
|
-
}), /* @__PURE__ */
|
|
597
|
+
}), /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
|
|
597
598
|
className: "text-sm font-semibold text-text-primary",
|
|
598
599
|
children: m("devportal.completeSetup", "Complete your app setup")
|
|
599
|
-
}), /* @__PURE__ */
|
|
600
|
+
}), /* @__PURE__ */ U("p", {
|
|
600
601
|
className: "text-xs text-text-secondary",
|
|
601
602
|
children: [
|
|
602
603
|
a,
|
|
@@ -608,29 +609,29 @@ var Ke = [
|
|
|
608
609
|
]
|
|
609
610
|
})] })]
|
|
610
611
|
})
|
|
611
|
-
}), /* @__PURE__ */
|
|
612
|
+
}), /* @__PURE__ */ H("div", {
|
|
612
613
|
className: "divide-y divide-border-subtle",
|
|
613
|
-
children: i.map((e, n) => /* @__PURE__ */
|
|
614
|
+
children: i.map((e, n) => /* @__PURE__ */ U("button", {
|
|
614
615
|
type: "button",
|
|
615
616
|
onClick: e.onClick,
|
|
616
617
|
disabled: !e.onClick,
|
|
617
618
|
className: t("w-full flex items-center gap-4 px-5 py-4 text-left transition-colors", e.onClick ? "hover:bg-bg-sunken/40 cursor-pointer" : "cursor-default opacity-60"),
|
|
618
619
|
children: [
|
|
619
|
-
/* @__PURE__ */
|
|
620
|
+
/* @__PURE__ */ H("div", {
|
|
620
621
|
className: t("flex h-7 w-7 flex-shrink-0 items-center justify-center rounded-full text-xs font-bold", e.done ? "bg-status-success-bg text-status-success-text" : "border-2 border-border-subtle bg-bg-sunken text-text-secondary"),
|
|
621
|
-
children: e.done ? /* @__PURE__ */
|
|
622
|
+
children: e.done ? /* @__PURE__ */ H(F, { size: 13 }) : n + 1
|
|
622
623
|
}),
|
|
623
|
-
/* @__PURE__ */
|
|
624
|
+
/* @__PURE__ */ U("div", {
|
|
624
625
|
className: "flex-1 min-w-0",
|
|
625
|
-
children: [/* @__PURE__ */
|
|
626
|
+
children: [/* @__PURE__ */ H("p", {
|
|
626
627
|
className: t("text-sm font-medium", e.done ? "text-text-secondary line-through" : "text-text-primary"),
|
|
627
628
|
children: e.label
|
|
628
|
-
}), e.hint && !e.done && /* @__PURE__ */
|
|
629
|
+
}), e.hint && !e.done && /* @__PURE__ */ H("p", {
|
|
629
630
|
className: "mt-0.5 text-xs text-text-secondary truncate",
|
|
630
631
|
children: e.hint
|
|
631
632
|
})]
|
|
632
633
|
}),
|
|
633
|
-
e.onClick && !e.done && /* @__PURE__ */
|
|
634
|
+
e.onClick && !e.done && /* @__PURE__ */ H(ve, {
|
|
634
635
|
size: 16,
|
|
635
636
|
className: "flex-shrink-0 text-text-secondary"
|
|
636
637
|
})
|
|
@@ -639,198 +640,198 @@ var Ke = [
|
|
|
639
640
|
})]
|
|
640
641
|
});
|
|
641
642
|
})(),
|
|
642
|
-
/* @__PURE__ */
|
|
643
|
+
/* @__PURE__ */ H("div", {
|
|
643
644
|
className: "border-b",
|
|
644
|
-
children: /* @__PURE__ */
|
|
645
|
+
children: /* @__PURE__ */ H("nav", {
|
|
645
646
|
className: "-mb-px flex gap-4 overflow-x-auto",
|
|
646
647
|
role: "tablist",
|
|
647
648
|
"aria-label": m("devportal.applicationSections", "Application sections"),
|
|
648
|
-
children:
|
|
649
|
+
children: Ye.filter((e) => !(K && (e.id === "permissions" || e.id === "webhooks" || e.id === "delegations" || e.id === "playground" || e.id === "oauth" || e.id === "api-keys") || !K && !q && e.id === "versions" || !q && (e.id === "oauth" || e.id === "api-keys"))).map((e) => {
|
|
649
650
|
let n = e.icon;
|
|
650
|
-
return /* @__PURE__ */
|
|
651
|
+
return /* @__PURE__ */ U("button", {
|
|
651
652
|
id: `application-tab-${e.id}`,
|
|
652
653
|
role: "tab",
|
|
653
654
|
"aria-selected": S === e.id,
|
|
654
655
|
"aria-controls": `application-panel-${e.id}`,
|
|
655
656
|
onClick: () => D(e.id),
|
|
656
657
|
className: t("flex items-center gap-2 border-b-2 px-1 py-3 text-sm font-medium transition-colors", S === e.id ? "border-primary text-primary" : "border-transparent text-text-secondary hover:text-text-primary hover:border-muted-foreground"),
|
|
657
|
-
children: [/* @__PURE__ */
|
|
658
|
+
children: [/* @__PURE__ */ H(n, { size: 16 }), e.label]
|
|
658
659
|
}, e.id);
|
|
659
660
|
})
|
|
660
661
|
})
|
|
661
662
|
}),
|
|
662
|
-
/* @__PURE__ */
|
|
663
|
+
/* @__PURE__ */ U("div", {
|
|
663
664
|
className: "mt-6",
|
|
664
665
|
id: `application-panel-${S}`,
|
|
665
666
|
role: "tabpanel",
|
|
666
667
|
"aria-labelledby": `application-tab-${S}`,
|
|
667
668
|
tabIndex: 0,
|
|
668
669
|
children: [
|
|
669
|
-
S === "overview" && /* @__PURE__ */
|
|
670
|
-
app:
|
|
670
|
+
S === "overview" && /* @__PURE__ */ H(ot, {
|
|
671
|
+
app: G,
|
|
671
672
|
appId: b,
|
|
672
|
-
refetch: () => void
|
|
673
|
+
refetch: () => void me()
|
|
673
674
|
}),
|
|
674
|
-
S === "permissions" && /* @__PURE__ */
|
|
675
|
-
app:
|
|
676
|
-
versionScopes:
|
|
677
|
-
locked:
|
|
675
|
+
S === "permissions" && /* @__PURE__ */ H(xt, {
|
|
676
|
+
app: G,
|
|
677
|
+
versionScopes: j?.application?.versions?.edges?.[0]?.node?.requiredScopes ?? [],
|
|
678
|
+
locked: G.status === "PUBLISHED" || G.status === "APPROVED" || G.status === "ACTIVE",
|
|
678
679
|
onNavigateToVersions: () => D("versions")
|
|
679
680
|
}),
|
|
680
|
-
S === "webhooks" && /* @__PURE__ */
|
|
681
|
-
appId:
|
|
682
|
-
onNavigate:
|
|
681
|
+
S === "webhooks" && /* @__PURE__ */ H(rt, {
|
|
682
|
+
appId: G.id,
|
|
683
|
+
onNavigate: B
|
|
683
684
|
}),
|
|
684
|
-
S === "delegations" && /* @__PURE__ */
|
|
685
|
-
authAppId:
|
|
686
|
-
appName:
|
|
687
|
-
onGrantDelegation: () =>
|
|
688
|
-
onNavigate:
|
|
685
|
+
S === "delegations" && /* @__PURE__ */ H(it, {
|
|
686
|
+
authAppId: G.appId || void 0,
|
|
687
|
+
appName: G.name,
|
|
688
|
+
onGrantDelegation: () => fe(!0),
|
|
689
|
+
onNavigate: B
|
|
689
690
|
}),
|
|
690
|
-
S === "analytics" && /* @__PURE__ */
|
|
691
|
-
S === "playground" && /* @__PURE__ */
|
|
692
|
-
S === "oauth" && /* @__PURE__ */
|
|
693
|
-
appId:
|
|
694
|
-
onNavigate:
|
|
691
|
+
S === "analytics" && /* @__PURE__ */ H(at, { appId: G.id }),
|
|
692
|
+
S === "playground" && /* @__PURE__ */ H(dt, { app: G }),
|
|
693
|
+
S === "oauth" && /* @__PURE__ */ H(Ze, {
|
|
694
|
+
appId: G.id,
|
|
695
|
+
onNavigate: B
|
|
695
696
|
}),
|
|
696
|
-
S === "api-keys" && /* @__PURE__ */
|
|
697
|
-
appId:
|
|
698
|
-
onNavigate:
|
|
697
|
+
S === "api-keys" && /* @__PURE__ */ H(Qe, {
|
|
698
|
+
appId: G.id,
|
|
699
|
+
onNavigate: B
|
|
699
700
|
}),
|
|
700
|
-
S === "store-listing" && /* @__PURE__ */
|
|
701
|
-
app:
|
|
702
|
-
versionCount:
|
|
703
|
-
isPackageApp:
|
|
701
|
+
S === "store-listing" && /* @__PURE__ */ H(ht, {
|
|
702
|
+
app: G,
|
|
703
|
+
versionCount: j?.application?.versions?.totalCount ?? 0,
|
|
704
|
+
isPackageApp: K,
|
|
704
705
|
pricingDone: Z,
|
|
705
|
-
onNavigateToVersions:
|
|
706
|
+
onNavigateToVersions: K || q ? () => D("versions") : void 0,
|
|
706
707
|
onNavigateToPricing: () => D("pricing"),
|
|
707
|
-
onNavigateToSubmission: () =>
|
|
708
|
+
onNavigateToSubmission: () => B(`/apps/${G.id}/store-submission`)
|
|
708
709
|
}),
|
|
709
|
-
S === "pricing" && /* @__PURE__ */
|
|
710
|
-
app:
|
|
710
|
+
S === "pricing" && /* @__PURE__ */ H(tt, {
|
|
711
|
+
app: G,
|
|
711
712
|
platformFeeRate: pt,
|
|
712
713
|
billingAccountLinked: X,
|
|
713
|
-
onNavigateToRevenue: () =>
|
|
714
|
+
onNavigateToRevenue: () => B("/revenue"),
|
|
714
715
|
isReadyToSubmit: Q
|
|
715
716
|
}),
|
|
716
|
-
S === "versions" && /* @__PURE__ */
|
|
717
|
-
appId:
|
|
718
|
-
onNavigate:
|
|
717
|
+
S === "versions" && /* @__PURE__ */ H(nt, {
|
|
718
|
+
appId: G.id,
|
|
719
|
+
onNavigate: B,
|
|
719
720
|
pricingDone: Z,
|
|
720
721
|
onNavigateToPricing: () => D("pricing")
|
|
721
722
|
})
|
|
722
723
|
]
|
|
723
724
|
}),
|
|
724
|
-
/* @__PURE__ */
|
|
725
|
+
/* @__PURE__ */ H(ae, {
|
|
725
726
|
open: te,
|
|
726
727
|
onOpenChange: ne,
|
|
727
|
-
onConfirm:
|
|
728
|
+
onConfirm: Le,
|
|
728
729
|
title: m("devportal.rotateAppSecret", "Rotate App Secret"),
|
|
729
730
|
description: m("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."),
|
|
730
731
|
confirmLabel: m("devportal.rotateSecret", "Rotate Secret"),
|
|
731
732
|
cancelLabel: m("devportal.cancel", "Cancel"),
|
|
732
733
|
variant: "warning",
|
|
733
|
-
loading:
|
|
734
|
+
loading: ye
|
|
734
735
|
}),
|
|
735
|
-
/* @__PURE__ */
|
|
736
|
+
/* @__PURE__ */ H(ae, {
|
|
736
737
|
open: k,
|
|
737
738
|
onOpenChange: ie,
|
|
738
|
-
onConfirm:
|
|
739
|
+
onConfirm: Re,
|
|
739
740
|
title: m("devportal.deactivateApplication", "Deactivate Application"),
|
|
740
741
|
description: m("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."),
|
|
741
742
|
confirmLabel: m("devportal.deactivate", "Deactivate"),
|
|
742
743
|
cancelLabel: m("devportal.cancel", "Cancel"),
|
|
743
744
|
variant: "destructive",
|
|
744
|
-
loading:
|
|
745
|
+
loading: I
|
|
745
746
|
}),
|
|
746
|
-
/* @__PURE__ */
|
|
747
|
+
/* @__PURE__ */ H(ae, {
|
|
747
748
|
open: Ue,
|
|
748
749
|
onOpenChange: We,
|
|
749
|
-
onConfirm: () =>
|
|
750
|
+
onConfirm: () => ze(Ke || void 0),
|
|
750
751
|
title: m("devportal.testInWorkspaceChooseVersion", "Test a Version"),
|
|
751
752
|
description: m("devportal.testInWorkspaceChooseVersionDescription", "Choose which version to install into your test workspace. This does not affect what other users see — it only installs the selected version for you to try here."),
|
|
752
753
|
confirmLabel: m("devportal.testInWorkspace", "Test in Workspace"),
|
|
753
754
|
cancelLabel: m("devportal.cancel", "Cancel"),
|
|
754
|
-
loading:
|
|
755
|
-
children: /* @__PURE__ */
|
|
755
|
+
loading: Oe,
|
|
756
|
+
children: /* @__PURE__ */ H(re, {
|
|
756
757
|
label: m("devportal.version", "Version"),
|
|
757
|
-
value:
|
|
758
|
+
value: Ke,
|
|
758
759
|
onChange: (e) => qe(e.target.value),
|
|
759
|
-
options:
|
|
760
|
+
options: et.map((e) => ({
|
|
760
761
|
value: e.node.version,
|
|
761
762
|
label: e.node.isLatest ? `${e.node.version} — ${m("devportal.latest", "latest")} (${e.node.status})` : `${e.node.version} (${e.node.status})`
|
|
762
763
|
}))
|
|
763
764
|
})
|
|
764
765
|
}),
|
|
765
|
-
/* @__PURE__ */
|
|
766
|
+
/* @__PURE__ */ H(oe, {
|
|
766
767
|
open: de,
|
|
767
|
-
onOpenChange:
|
|
768
|
-
appId:
|
|
769
|
-
appName:
|
|
770
|
-
appScopes:
|
|
768
|
+
onOpenChange: fe,
|
|
769
|
+
appId: G.appId || "",
|
|
770
|
+
appName: G.name,
|
|
771
|
+
appScopes: G.scopes?.map((e) => e.scope) ?? [],
|
|
771
772
|
onSuccess: () => {
|
|
772
|
-
|
|
773
|
+
fe(!1);
|
|
773
774
|
}
|
|
774
775
|
})
|
|
775
776
|
]
|
|
776
777
|
});
|
|
777
|
-
},
|
|
778
|
-
let { t } =
|
|
778
|
+
}, Ze = ({ onNavigate: e }) => {
|
|
779
|
+
let { t } = W(), n = (e, n) => {
|
|
779
780
|
let r = t(e);
|
|
780
781
|
return r === e ? n : r;
|
|
781
782
|
};
|
|
782
|
-
return /* @__PURE__ */
|
|
783
|
+
return /* @__PURE__ */ U("div", {
|
|
783
784
|
className: "space-y-4 py-4 text-center",
|
|
784
785
|
children: [
|
|
785
|
-
/* @__PURE__ */
|
|
786
|
-
/* @__PURE__ */
|
|
786
|
+
/* @__PURE__ */ H(z, { className: "mx-auto h-10 w-10 text-text-secondary" }),
|
|
787
|
+
/* @__PURE__ */ H("h3", {
|
|
787
788
|
className: "font-medium",
|
|
788
789
|
children: n("devportal.oauthApps", "OAuth Apps")
|
|
789
790
|
}),
|
|
790
|
-
/* @__PURE__ */
|
|
791
|
+
/* @__PURE__ */ H("p", {
|
|
791
792
|
className: "text-sm text-text-secondary",
|
|
792
793
|
children: n("devportal.oauthAppsManagedCentrally", "OAuth apps are now managed centrally. Visit the OAuth Apps page to create and manage your apps.")
|
|
793
794
|
}),
|
|
794
|
-
/* @__PURE__ */
|
|
795
|
+
/* @__PURE__ */ U("button", {
|
|
795
796
|
onClick: () => e("/oauth"),
|
|
796
797
|
className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors",
|
|
797
|
-
children: [/* @__PURE__ */
|
|
798
|
+
children: [/* @__PURE__ */ H(I, { size: 16 }), n("devportal.manageOAuthApps", "Manage OAuth Apps")]
|
|
798
799
|
})
|
|
799
800
|
]
|
|
800
801
|
});
|
|
801
|
-
},
|
|
802
|
-
let { t } =
|
|
802
|
+
}, Qe = ({ onNavigate: e }) => {
|
|
803
|
+
let { t } = W(), n = (e, n) => {
|
|
803
804
|
let r = t(e);
|
|
804
805
|
return r === e ? n : r;
|
|
805
806
|
};
|
|
806
|
-
return /* @__PURE__ */
|
|
807
|
+
return /* @__PURE__ */ U("div", {
|
|
807
808
|
className: "space-y-4 py-4 text-center",
|
|
808
809
|
children: [
|
|
809
|
-
/* @__PURE__ */
|
|
810
|
-
/* @__PURE__ */
|
|
810
|
+
/* @__PURE__ */ H(Ee, { className: "mx-auto h-10 w-10 text-text-secondary" }),
|
|
811
|
+
/* @__PURE__ */ H("h3", {
|
|
811
812
|
className: "font-medium",
|
|
812
813
|
children: n("devportal.apiKeys", "API Keys")
|
|
813
814
|
}),
|
|
814
|
-
/* @__PURE__ */
|
|
815
|
+
/* @__PURE__ */ H("p", {
|
|
815
816
|
className: "text-sm text-text-secondary",
|
|
816
817
|
children: n("devportal.apiKeysManagedCentrally", "API keys are now managed centrally. Visit the API Keys page to generate and manage your keys.")
|
|
817
818
|
}),
|
|
818
|
-
/* @__PURE__ */
|
|
819
|
+
/* @__PURE__ */ U("button", {
|
|
819
820
|
onClick: () => e("/api-keys"),
|
|
820
821
|
className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors",
|
|
821
|
-
children: [/* @__PURE__ */
|
|
822
|
+
children: [/* @__PURE__ */ H(I, { size: 16 }), n("devportal.manageApiKeys", "Manage API Keys")]
|
|
822
823
|
})
|
|
823
824
|
]
|
|
824
825
|
});
|
|
825
|
-
},
|
|
826
|
-
let { t: o } =
|
|
826
|
+
}, J = .01, $e = (e) => e * J, et = (e) => Math.round(e / J), tt = ({ app: e, platformFeeRate: n, billingAccountLinked: r, onNavigateToRevenue: i, isReadyToSubmit: a = !1 }) => {
|
|
827
|
+
let { t: o } = W(), s = (e, t) => {
|
|
827
828
|
let n = o(e);
|
|
828
829
|
return n === e ? t : n;
|
|
829
830
|
}, c = e.pricingDetails ?? {}, [l, u] = N({
|
|
830
831
|
pricingType: e.pricingType ?? "FREE",
|
|
831
832
|
price: typeof c.price == "number" ? String(c.price) : ""
|
|
832
|
-
}), [d, f] = N(!1), [p] = b(), m =
|
|
833
|
-
m.current = e,
|
|
833
|
+
}), [d, f] = N(!1), [p] = b(), m = pe(e);
|
|
834
|
+
m.current = e, j(() => {
|
|
834
835
|
let e = m.current.pricingDetails ?? {};
|
|
835
836
|
u({
|
|
836
837
|
pricingType: m.current.pricingType ?? "FREE",
|
|
@@ -862,33 +863,33 @@ var Ke = [
|
|
|
862
863
|
} finally {
|
|
863
864
|
f(!1);
|
|
864
865
|
}
|
|
865
|
-
}, _ = l.pricingType !== "FREE", v = parseInt(l.price, 10), y = _ && !isNaN(v) && v > 0, x = y ?
|
|
866
|
+
}, _ = l.pricingType !== "FREE", v = parseInt(l.price, 10), y = _ && !isNaN(v) && v > 0, x = y ? $e(v) : 0, S = y ? Math.round(v * n) : 0, C = $e(S), w = y ? v - S : 0, T = $e(w), E = (e) => "$" + e.toLocaleString("en-US", {
|
|
866
867
|
minimumFractionDigits: 2,
|
|
867
868
|
maximumFractionDigits: 2
|
|
868
869
|
}), D = (e) => e.toLocaleString("en-US") + " cr";
|
|
869
|
-
return /* @__PURE__ */
|
|
870
|
+
return /* @__PURE__ */ U("div", {
|
|
870
871
|
className: "space-y-8",
|
|
871
872
|
children: [
|
|
872
|
-
/* @__PURE__ */
|
|
873
|
+
/* @__PURE__ */ U("div", {
|
|
873
874
|
className: "flex items-start gap-3 rounded-lg border border-border-subtle bg-bg-sunken px-4 py-3",
|
|
874
|
-
children: [/* @__PURE__ */
|
|
875
|
+
children: [/* @__PURE__ */ H(ye, {
|
|
875
876
|
size: 16,
|
|
876
877
|
className: "mt-0.5 shrink-0 text-primary"
|
|
877
|
-
}), /* @__PURE__ */
|
|
878
|
+
}), /* @__PURE__ */ U("p", {
|
|
878
879
|
className: "text-sm text-text-secondary",
|
|
879
880
|
children: [
|
|
880
|
-
/* @__PURE__ */
|
|
881
|
+
/* @__PURE__ */ H("span", {
|
|
881
882
|
className: "font-medium text-text-primary",
|
|
882
883
|
children: "Platform credits"
|
|
883
884
|
}),
|
|
884
885
|
" ",
|
|
885
886
|
"are the currency of the Burdenoff marketplace.",
|
|
886
887
|
" ",
|
|
887
|
-
/* @__PURE__ */
|
|
888
|
+
/* @__PURE__ */ U("span", {
|
|
888
889
|
className: "font-medium",
|
|
889
890
|
children: [
|
|
890
891
|
"1 credit = ",
|
|
891
|
-
E(
|
|
892
|
+
E(J),
|
|
892
893
|
" USD."
|
|
893
894
|
]
|
|
894
895
|
}),
|
|
@@ -897,41 +898,41 @@ var Ke = [
|
|
|
897
898
|
]
|
|
898
899
|
})]
|
|
899
900
|
}),
|
|
900
|
-
/* @__PURE__ */
|
|
901
|
+
/* @__PURE__ */ U("div", {
|
|
901
902
|
className: "space-y-3",
|
|
902
|
-
children: [/* @__PURE__ */
|
|
903
|
+
children: [/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("h2", {
|
|
903
904
|
className: "text-lg font-semibold",
|
|
904
905
|
children: s("devportal.howMonetizationWorks", "How App Monetization Works")
|
|
905
|
-
}), /* @__PURE__ */
|
|
906
|
+
}), /* @__PURE__ */ H("p", {
|
|
906
907
|
className: "mt-1 text-sm text-text-secondary",
|
|
907
908
|
children: s("devportal.monetizationDesc", "Earn revenue when users install or purchase your app. Here's exactly how the money flows.")
|
|
908
|
-
})] }), /* @__PURE__ */
|
|
909
|
+
})] }), /* @__PURE__ */ U("div", {
|
|
909
910
|
className: "grid gap-4 sm:grid-cols-3",
|
|
910
911
|
children: [
|
|
911
|
-
/* @__PURE__ */
|
|
912
|
+
/* @__PURE__ */ U("div", {
|
|
912
913
|
className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
|
|
913
|
-
children: [/* @__PURE__ */
|
|
914
|
+
children: [/* @__PURE__ */ H("div", {
|
|
914
915
|
className: "flex h-9 w-9 items-center justify-center rounded-lg bg-status-success-bg-subtle",
|
|
915
|
-
children: /* @__PURE__ */
|
|
916
|
+
children: /* @__PURE__ */ H(Fe, {
|
|
916
917
|
size: 18,
|
|
917
918
|
className: "text-status-success-text"
|
|
918
919
|
})
|
|
919
|
-
}), /* @__PURE__ */
|
|
920
|
+
}), /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ U("p", {
|
|
920
921
|
className: "font-semibold",
|
|
921
922
|
children: [(100 - n * 100).toFixed(0), "% revenue share"]
|
|
922
|
-
}), /* @__PURE__ */
|
|
923
|
+
}), /* @__PURE__ */ U("p", {
|
|
923
924
|
className: "mt-1 text-sm text-text-secondary",
|
|
924
925
|
children: [
|
|
925
926
|
"You keep",
|
|
926
927
|
" ",
|
|
927
|
-
/* @__PURE__ */
|
|
928
|
+
/* @__PURE__ */ U("span", {
|
|
928
929
|
className: "font-medium text-status-success-text",
|
|
929
930
|
children: [(100 - n * 100).toFixed(0), "%"]
|
|
930
931
|
}),
|
|
931
932
|
" ",
|
|
932
933
|
"of every sale in credits. The platform retains a",
|
|
933
934
|
" ",
|
|
934
|
-
/* @__PURE__ */
|
|
935
|
+
/* @__PURE__ */ U("span", {
|
|
935
936
|
className: "font-medium",
|
|
936
937
|
children: [(n * 100).toFixed(0), "%"]
|
|
937
938
|
}),
|
|
@@ -940,28 +941,28 @@ var Ke = [
|
|
|
940
941
|
]
|
|
941
942
|
})] })]
|
|
942
943
|
}),
|
|
943
|
-
/* @__PURE__ */
|
|
944
|
+
/* @__PURE__ */ U("div", {
|
|
944
945
|
className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
|
|
945
|
-
children: [/* @__PURE__ */
|
|
946
|
+
children: [/* @__PURE__ */ H("div", {
|
|
946
947
|
className: "flex h-9 w-9 items-center justify-center rounded-lg bg-action-primary-bg/10",
|
|
947
|
-
children: /* @__PURE__ */
|
|
948
|
+
children: /* @__PURE__ */ H(Le, {
|
|
948
949
|
size: 18,
|
|
949
950
|
className: "text-primary"
|
|
950
951
|
})
|
|
951
|
-
}), /* @__PURE__ */
|
|
952
|
+
}), /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
|
|
952
953
|
className: "font-semibold",
|
|
953
954
|
children: "Credits → cash via billing"
|
|
954
|
-
}), /* @__PURE__ */
|
|
955
|
+
}), /* @__PURE__ */ U("p", {
|
|
955
956
|
className: "mt-1 text-sm text-text-secondary",
|
|
956
957
|
children: [
|
|
957
958
|
"Every sale instantly deposits your earned credits into your linked billing account. You can spend them on platform services or request a cash withdrawal. Track everything on the",
|
|
958
959
|
" ",
|
|
959
|
-
i ? /* @__PURE__ */
|
|
960
|
+
i ? /* @__PURE__ */ H("button", {
|
|
960
961
|
type: "button",
|
|
961
962
|
onClick: i,
|
|
962
963
|
className: "font-medium text-primary underline-offset-2 hover:underline",
|
|
963
964
|
children: "Revenue page"
|
|
964
|
-
}) : /* @__PURE__ */
|
|
965
|
+
}) : /* @__PURE__ */ H("span", {
|
|
965
966
|
className: "font-medium text-primary",
|
|
966
967
|
children: "Revenue page"
|
|
967
968
|
}),
|
|
@@ -969,18 +970,18 @@ var Ke = [
|
|
|
969
970
|
]
|
|
970
971
|
})] })]
|
|
971
972
|
}),
|
|
972
|
-
/* @__PURE__ */
|
|
973
|
+
/* @__PURE__ */ U("div", {
|
|
973
974
|
className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
|
|
974
|
-
children: [/* @__PURE__ */
|
|
975
|
+
children: [/* @__PURE__ */ H("div", {
|
|
975
976
|
className: "flex h-9 w-9 items-center justify-center rounded-lg bg-status-warning-bg-subtle",
|
|
976
|
-
children: /* @__PURE__ */
|
|
977
|
+
children: /* @__PURE__ */ H(we, {
|
|
977
978
|
size: 18,
|
|
978
979
|
className: "text-status-warning-text"
|
|
979
980
|
})
|
|
980
|
-
}), /* @__PURE__ */
|
|
981
|
+
}), /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
|
|
981
982
|
className: "font-semibold",
|
|
982
983
|
children: "Reach the full marketplace"
|
|
983
|
-
}), /* @__PURE__ */
|
|
984
|
+
}), /* @__PURE__ */ H("p", {
|
|
984
985
|
className: "mt-1 text-sm text-text-secondary",
|
|
985
986
|
children: "Any user with platform credits can discover and install your app directly from the marketplace. Free apps maximise reach; paid apps let you monetise your work."
|
|
986
987
|
})] })]
|
|
@@ -988,52 +989,52 @@ var Ke = [
|
|
|
988
989
|
]
|
|
989
990
|
})]
|
|
990
991
|
}),
|
|
991
|
-
/* @__PURE__ */
|
|
992
|
+
/* @__PURE__ */ U("div", {
|
|
992
993
|
className: "space-y-4",
|
|
993
994
|
children: [
|
|
994
|
-
/* @__PURE__ */
|
|
995
|
+
/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("h3", {
|
|
995
996
|
className: "text-base font-semibold",
|
|
996
997
|
children: s("devportal.setPricingTitle", "Set Your Price")
|
|
997
|
-
}), /* @__PURE__ */
|
|
998
|
+
}), /* @__PURE__ */ U("p", {
|
|
998
999
|
className: "mt-0.5 text-sm text-text-secondary",
|
|
999
1000
|
children: [
|
|
1000
1001
|
"Choose ",
|
|
1001
|
-
/* @__PURE__ */
|
|
1002
|
+
/* @__PURE__ */ H("strong", { children: "Free" }),
|
|
1002
1003
|
" to maximise installs, or",
|
|
1003
1004
|
" ",
|
|
1004
|
-
/* @__PURE__ */
|
|
1005
|
+
/* @__PURE__ */ H("strong", { children: "Paid" }),
|
|
1005
1006
|
" to earn credits on every install. Paid apps require a linked billing account before publishing."
|
|
1006
1007
|
]
|
|
1007
1008
|
})] }),
|
|
1008
|
-
/* @__PURE__ */
|
|
1009
|
+
/* @__PURE__ */ H("div", {
|
|
1009
1010
|
className: "flex flex-wrap gap-2",
|
|
1010
|
-
children: ft.map((e) => /* @__PURE__ */
|
|
1011
|
+
children: ft.map((e) => /* @__PURE__ */ H("button", {
|
|
1011
1012
|
type: "button",
|
|
1012
1013
|
onClick: () => h("pricingType", e.value),
|
|
1013
1014
|
className: t("rounded-md border px-4 py-2 text-sm font-medium transition-colors", l.pricingType === e.value ? "bg-action-primary-bg text-action-primary-text border-primary" : "hover:bg-bg-sunken border-border-subtle"),
|
|
1014
1015
|
children: e.label
|
|
1015
1016
|
}, e.value))
|
|
1016
1017
|
}),
|
|
1017
|
-
_ && /* @__PURE__ */
|
|
1018
|
+
_ && /* @__PURE__ */ U("div", {
|
|
1018
1019
|
className: "space-y-4",
|
|
1019
1020
|
children: [
|
|
1020
|
-
/* @__PURE__ */
|
|
1021
|
+
/* @__PURE__ */ U("div", {
|
|
1021
1022
|
className: "max-w-xs",
|
|
1022
1023
|
children: [
|
|
1023
|
-
/* @__PURE__ */
|
|
1024
|
+
/* @__PURE__ */ U("label", {
|
|
1024
1025
|
className: "mb-1.5 block text-sm font-medium",
|
|
1025
1026
|
children: [
|
|
1026
1027
|
"Listing price",
|
|
1027
1028
|
" ",
|
|
1028
|
-
/* @__PURE__ */
|
|
1029
|
+
/* @__PURE__ */ H("span", {
|
|
1029
1030
|
className: "text-text-tertiary font-normal",
|
|
1030
1031
|
children: "(credits)"
|
|
1031
1032
|
})
|
|
1032
1033
|
]
|
|
1033
1034
|
}),
|
|
1034
|
-
/* @__PURE__ */
|
|
1035
|
+
/* @__PURE__ */ U("div", {
|
|
1035
1036
|
className: "relative flex items-center",
|
|
1036
|
-
children: [/* @__PURE__ */
|
|
1037
|
+
children: [/* @__PURE__ */ H("input", {
|
|
1037
1038
|
type: "number",
|
|
1038
1039
|
min: 1,
|
|
1039
1040
|
step: 1,
|
|
@@ -1041,69 +1042,69 @@ var Ke = [
|
|
|
1041
1042
|
onChange: (e) => h("price", e.target.value),
|
|
1042
1043
|
placeholder: "e.g. 1000",
|
|
1043
1044
|
className: "w-full rounded-md border border-border-subtle bg-bg-input px-3 py-2 pr-20 text-sm focus:outline-none focus:ring-2 focus:ring-primary/50"
|
|
1044
|
-
}), /* @__PURE__ */
|
|
1045
|
+
}), /* @__PURE__ */ H("span", {
|
|
1045
1046
|
className: "pointer-events-none absolute right-3 text-xs text-text-tertiary",
|
|
1046
1047
|
children: "credits"
|
|
1047
1048
|
})]
|
|
1048
1049
|
}),
|
|
1049
|
-
y && /* @__PURE__ */
|
|
1050
|
+
y && /* @__PURE__ */ U("p", {
|
|
1050
1051
|
className: "mt-1.5 text-xs text-text-secondary",
|
|
1051
1052
|
children: [
|
|
1052
1053
|
"≈ ",
|
|
1053
1054
|
E(x),
|
|
1054
1055
|
" USD at the current credit rate (1 cr =",
|
|
1055
1056
|
" ",
|
|
1056
|
-
E(
|
|
1057
|
+
E(J),
|
|
1057
1058
|
")"
|
|
1058
1059
|
]
|
|
1059
1060
|
}),
|
|
1060
|
-
/* @__PURE__ */
|
|
1061
|
+
/* @__PURE__ */ H("p", {
|
|
1061
1062
|
className: "mt-1 text-xs text-text-tertiary",
|
|
1062
1063
|
children: s("devportal.priceHint", "Set the number of credits a buyer spends to install your app")
|
|
1063
1064
|
})
|
|
1064
1065
|
]
|
|
1065
1066
|
}),
|
|
1066
|
-
/* @__PURE__ */
|
|
1067
|
+
/* @__PURE__ */ U("div", {
|
|
1067
1068
|
className: "flex items-center gap-2 text-xs text-text-secondary",
|
|
1068
|
-
children: [/* @__PURE__ */
|
|
1069
|
+
children: [/* @__PURE__ */ H("span", { children: "Quick convert:" }), [
|
|
1069
1070
|
5,
|
|
1070
1071
|
10,
|
|
1071
1072
|
25,
|
|
1072
1073
|
50
|
|
1073
|
-
].map((e) => /* @__PURE__ */
|
|
1074
|
+
].map((e) => /* @__PURE__ */ U("button", {
|
|
1074
1075
|
type: "button",
|
|
1075
|
-
onClick: () => h("price", String(
|
|
1076
|
+
onClick: () => h("price", String(et(e))),
|
|
1076
1077
|
className: "rounded border border-border-subtle px-2 py-0.5 hover:bg-bg-sunken transition-colors",
|
|
1077
1078
|
children: [
|
|
1078
1079
|
"$",
|
|
1079
1080
|
e,
|
|
1080
1081
|
" = ",
|
|
1081
|
-
|
|
1082
|
+
et(e).toLocaleString(),
|
|
1082
1083
|
" cr"
|
|
1083
1084
|
]
|
|
1084
1085
|
}, e))]
|
|
1085
1086
|
}),
|
|
1086
|
-
y && /* @__PURE__ */
|
|
1087
|
+
y && /* @__PURE__ */ U("div", {
|
|
1087
1088
|
className: "rounded-lg border border-border-subtle bg-bg-sunken p-4 space-y-3",
|
|
1088
1089
|
children: [
|
|
1089
|
-
/* @__PURE__ */
|
|
1090
|
+
/* @__PURE__ */ H("p", {
|
|
1090
1091
|
className: "text-xs font-semibold uppercase tracking-wide text-text-secondary",
|
|
1091
1092
|
children: s("devportal.revenueBreakdown", "Revenue Breakdown per Sale")
|
|
1092
1093
|
}),
|
|
1093
|
-
/* @__PURE__ */
|
|
1094
|
+
/* @__PURE__ */ U("div", {
|
|
1094
1095
|
className: "space-y-2 text-sm",
|
|
1095
1096
|
children: [
|
|
1096
|
-
/* @__PURE__ */
|
|
1097
|
+
/* @__PURE__ */ U("div", {
|
|
1097
1098
|
className: "flex items-center justify-between",
|
|
1098
|
-
children: [/* @__PURE__ */
|
|
1099
|
+
children: [/* @__PURE__ */ H("span", {
|
|
1099
1100
|
className: "text-text-secondary",
|
|
1100
1101
|
children: "Buyer pays"
|
|
1101
|
-
}), /* @__PURE__ */
|
|
1102
|
+
}), /* @__PURE__ */ U("span", {
|
|
1102
1103
|
className: "font-medium tabular-nums",
|
|
1103
1104
|
children: [
|
|
1104
1105
|
D(v),
|
|
1105
1106
|
" ",
|
|
1106
|
-
/* @__PURE__ */
|
|
1107
|
+
/* @__PURE__ */ U("span", {
|
|
1107
1108
|
className: "text-text-tertiary text-xs",
|
|
1108
1109
|
children: [
|
|
1109
1110
|
"(",
|
|
@@ -1114,12 +1115,12 @@ var Ke = [
|
|
|
1114
1115
|
]
|
|
1115
1116
|
})]
|
|
1116
1117
|
}),
|
|
1117
|
-
/* @__PURE__ */
|
|
1118
|
+
/* @__PURE__ */ U("div", {
|
|
1118
1119
|
className: "flex items-center justify-between text-status-error-text",
|
|
1119
|
-
children: [/* @__PURE__ */
|
|
1120
|
+
children: [/* @__PURE__ */ U("span", { children: [
|
|
1120
1121
|
"Platform fee",
|
|
1121
1122
|
" ",
|
|
1122
|
-
/* @__PURE__ */
|
|
1123
|
+
/* @__PURE__ */ U("span", {
|
|
1123
1124
|
className: "opacity-70",
|
|
1124
1125
|
children: [
|
|
1125
1126
|
"(",
|
|
@@ -1127,13 +1128,13 @@ var Ke = [
|
|
|
1127
1128
|
"%)"
|
|
1128
1129
|
]
|
|
1129
1130
|
})
|
|
1130
|
-
] }), /* @__PURE__ */
|
|
1131
|
+
] }), /* @__PURE__ */ U("span", {
|
|
1131
1132
|
className: "tabular-nums",
|
|
1132
1133
|
children: [
|
|
1133
1134
|
"− ",
|
|
1134
1135
|
D(S),
|
|
1135
1136
|
" ",
|
|
1136
|
-
/* @__PURE__ */
|
|
1137
|
+
/* @__PURE__ */ U("span", {
|
|
1137
1138
|
className: "text-xs opacity-70",
|
|
1138
1139
|
children: [
|
|
1139
1140
|
"(",
|
|
@@ -1144,14 +1145,14 @@ var Ke = [
|
|
|
1144
1145
|
]
|
|
1145
1146
|
})]
|
|
1146
1147
|
}),
|
|
1147
|
-
/* @__PURE__ */
|
|
1148
|
+
/* @__PURE__ */ U("div", {
|
|
1148
1149
|
className: "flex items-center justify-between border-t border-border-subtle pt-2 font-semibold text-status-success-text",
|
|
1149
|
-
children: [/* @__PURE__ */
|
|
1150
|
+
children: [/* @__PURE__ */ H("span", { children: "You earn" }), /* @__PURE__ */ U("span", {
|
|
1150
1151
|
className: "tabular-nums",
|
|
1151
1152
|
children: [
|
|
1152
1153
|
D(w),
|
|
1153
1154
|
" ",
|
|
1154
|
-
/* @__PURE__ */
|
|
1155
|
+
/* @__PURE__ */ U("span", {
|
|
1155
1156
|
className: "text-sm font-normal",
|
|
1156
1157
|
children: ["≈ ", E(T)]
|
|
1157
1158
|
})
|
|
@@ -1160,29 +1161,29 @@ var Ke = [
|
|
|
1160
1161
|
})
|
|
1161
1162
|
]
|
|
1162
1163
|
}),
|
|
1163
|
-
/* @__PURE__ */
|
|
1164
|
+
/* @__PURE__ */ H("p", {
|
|
1164
1165
|
className: "text-xs text-text-tertiary",
|
|
1165
1166
|
children: "Credits are deposited to your billing account on each sale. Cash withdrawal is subject to platform terms and minimum payout thresholds."
|
|
1166
1167
|
})
|
|
1167
1168
|
]
|
|
1168
1169
|
}),
|
|
1169
|
-
!r && /* @__PURE__ */
|
|
1170
|
+
!r && /* @__PURE__ */ U("div", {
|
|
1170
1171
|
className: "flex items-start gap-3 rounded-lg border border-status-warning-bg bg-status-warning-bg-subtle p-4",
|
|
1171
|
-
children: [/* @__PURE__ */
|
|
1172
|
+
children: [/* @__PURE__ */ H(P, {
|
|
1172
1173
|
size: 16,
|
|
1173
1174
|
className: "mt-0.5 shrink-0 text-status-warning-text"
|
|
1174
|
-
}), /* @__PURE__ */
|
|
1175
|
+
}), /* @__PURE__ */ U("div", {
|
|
1175
1176
|
className: "flex-1 min-w-0",
|
|
1176
1177
|
children: [
|
|
1177
|
-
/* @__PURE__ */
|
|
1178
|
+
/* @__PURE__ */ H("p", {
|
|
1178
1179
|
className: "text-sm font-medium text-status-warning-text",
|
|
1179
1180
|
children: s("devportal.billingAccountRequired", "Billing account required to publish")
|
|
1180
1181
|
}),
|
|
1181
|
-
/* @__PURE__ */
|
|
1182
|
+
/* @__PURE__ */ H("p", {
|
|
1182
1183
|
className: "mt-0.5 text-xs text-text-secondary",
|
|
1183
1184
|
children: "Paid apps must have a billing account linked to your developer organization before you can submit for review. This is where your earned credits and cash withdrawals will be managed."
|
|
1184
1185
|
}),
|
|
1185
|
-
i && /* @__PURE__ */
|
|
1186
|
+
i && /* @__PURE__ */ H("button", {
|
|
1186
1187
|
type: "button",
|
|
1187
1188
|
onClick: i,
|
|
1188
1189
|
className: "mt-2 text-xs font-medium text-primary hover:underline underline-offset-2",
|
|
@@ -1195,23 +1196,23 @@ var Ke = [
|
|
|
1195
1196
|
})
|
|
1196
1197
|
]
|
|
1197
1198
|
}),
|
|
1198
|
-
/* @__PURE__ */
|
|
1199
|
+
/* @__PURE__ */ U("div", {
|
|
1199
1200
|
className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
|
|
1200
|
-
children: [/* @__PURE__ */
|
|
1201
|
+
children: [/* @__PURE__ */ H("h3", {
|
|
1201
1202
|
className: "text-sm font-semibold",
|
|
1202
1203
|
children: s("devportal.termsTitle", "Developer & Marketplace Terms")
|
|
1203
|
-
}), /* @__PURE__ */
|
|
1204
|
+
}), /* @__PURE__ */ U("ul", {
|
|
1204
1205
|
className: "space-y-2 text-sm text-text-secondary",
|
|
1205
1206
|
children: [
|
|
1206
|
-
/* @__PURE__ */
|
|
1207
|
+
/* @__PURE__ */ U("li", {
|
|
1207
1208
|
className: "flex items-start gap-2",
|
|
1208
|
-
children: [/* @__PURE__ */
|
|
1209
|
+
children: [/* @__PURE__ */ H(F, {
|
|
1209
1210
|
size: 14,
|
|
1210
1211
|
className: "mt-0.5 shrink-0 text-status-success-text"
|
|
1211
|
-
}), /* @__PURE__ */
|
|
1212
|
+
}), /* @__PURE__ */ U("span", { children: [
|
|
1212
1213
|
"By publishing to the marketplace you agree to the",
|
|
1213
1214
|
" ",
|
|
1214
|
-
/* @__PURE__ */
|
|
1215
|
+
/* @__PURE__ */ H("a", {
|
|
1215
1216
|
href: "/legal/developer-terms",
|
|
1216
1217
|
target: "_blank",
|
|
1217
1218
|
rel: "noopener noreferrer",
|
|
@@ -1221,29 +1222,29 @@ var Ke = [
|
|
|
1221
1222
|
"."
|
|
1222
1223
|
] })]
|
|
1223
1224
|
}),
|
|
1224
|
-
/* @__PURE__ */
|
|
1225
|
+
/* @__PURE__ */ U("li", {
|
|
1225
1226
|
className: "flex items-start gap-2",
|
|
1226
|
-
children: [/* @__PURE__ */
|
|
1227
|
+
children: [/* @__PURE__ */ H(F, {
|
|
1227
1228
|
size: 14,
|
|
1228
1229
|
className: "mt-0.5 shrink-0 text-status-success-text"
|
|
1229
|
-
}), /* @__PURE__ */
|
|
1230
|
+
}), /* @__PURE__ */ H("span", { children: "All prices are in platform credits. The USD equivalent is indicative only and may vary with the current credit rate." })]
|
|
1230
1231
|
}),
|
|
1231
|
-
/* @__PURE__ */
|
|
1232
|
+
/* @__PURE__ */ U("li", {
|
|
1232
1233
|
className: "flex items-start gap-2",
|
|
1233
|
-
children: [/* @__PURE__ */
|
|
1234
|
+
children: [/* @__PURE__ */ H(F, {
|
|
1234
1235
|
size: 14,
|
|
1235
1236
|
className: "mt-0.5 shrink-0 text-status-success-text"
|
|
1236
|
-
}), /* @__PURE__ */
|
|
1237
|
+
}), /* @__PURE__ */ H("span", { children: "Earnings are credited to your billing account per-sale. Cash withdrawals are subject to a minimum threshold and applicable taxes in your jurisdiction." })]
|
|
1237
1238
|
}),
|
|
1238
|
-
/* @__PURE__ */
|
|
1239
|
+
/* @__PURE__ */ U("li", {
|
|
1239
1240
|
className: "flex items-start gap-2",
|
|
1240
|
-
children: [/* @__PURE__ */
|
|
1241
|
+
children: [/* @__PURE__ */ H(F, {
|
|
1241
1242
|
size: 14,
|
|
1242
1243
|
className: "mt-0.5 shrink-0 text-status-success-text"
|
|
1243
|
-
}), /* @__PURE__ */
|
|
1244
|
+
}), /* @__PURE__ */ U("span", { children: [
|
|
1244
1245
|
"The platform reserves the right to adjust the credit rate, fee structure, or payout schedule with 30 days notice. See the",
|
|
1245
1246
|
" ",
|
|
1246
|
-
/* @__PURE__ */
|
|
1247
|
+
/* @__PURE__ */ H("a", {
|
|
1247
1248
|
href: "/legal/marketplace-terms",
|
|
1248
1249
|
target: "_blank",
|
|
1249
1250
|
rel: "noopener noreferrer",
|
|
@@ -1257,26 +1258,26 @@ var Ke = [
|
|
|
1257
1258
|
]
|
|
1258
1259
|
})]
|
|
1259
1260
|
}),
|
|
1260
|
-
/* @__PURE__ */
|
|
1261
|
+
/* @__PURE__ */ U("div", {
|
|
1261
1262
|
className: "border-t border-border-subtle pt-6 space-y-4",
|
|
1262
|
-
children: [/* @__PURE__ */
|
|
1263
|
+
children: [/* @__PURE__ */ H("button", {
|
|
1263
1264
|
type: "button",
|
|
1264
1265
|
onClick: () => void g(),
|
|
1265
1266
|
disabled: d,
|
|
1266
1267
|
className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors disabled:opacity-50",
|
|
1267
|
-
children: d ? /* @__PURE__ */
|
|
1268
|
+
children: d ? /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(L, {
|
|
1268
1269
|
size: 16,
|
|
1269
1270
|
className: "animate-spin"
|
|
1270
|
-
}), s("devportal.saving", "Saving…")] }) : /* @__PURE__ */
|
|
1271
|
-
}), a && /* @__PURE__ */
|
|
1271
|
+
}), s("devportal.saving", "Saving…")] }) : /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(ye, { size: 16 }), s("devportal.savePricing", "Save Pricing")] })
|
|
1272
|
+
}), a && /* @__PURE__ */ U("div", {
|
|
1272
1273
|
className: "flex items-start gap-3 rounded-lg border border-status-success-bg bg-status-success-bg-subtle px-4 py-3",
|
|
1273
|
-
children: [/* @__PURE__ */
|
|
1274
|
+
children: [/* @__PURE__ */ H(F, {
|
|
1274
1275
|
size: 16,
|
|
1275
1276
|
className: "mt-0.5 shrink-0 text-status-success-text"
|
|
1276
|
-
}), /* @__PURE__ */
|
|
1277
|
+
}), /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
|
|
1277
1278
|
className: "text-sm font-medium text-status-success-text",
|
|
1278
1279
|
children: s("devportal.allSetToSubmit", "You're all set!")
|
|
1279
|
-
}), /* @__PURE__ */
|
|
1280
|
+
}), /* @__PURE__ */ H("p", {
|
|
1280
1281
|
className: "mt-0.5 text-xs text-text-secondary",
|
|
1281
1282
|
children: s("devportal.allSetDesc", "Store listing, versions, and pricing are complete. Head to the top of the page and click Submit for Review.")
|
|
1282
1283
|
})] })]
|
|
@@ -1284,88 +1285,88 @@ var Ke = [
|
|
|
1284
1285
|
})
|
|
1285
1286
|
]
|
|
1286
1287
|
});
|
|
1287
|
-
},
|
|
1288
|
-
let { t: o } =
|
|
1288
|
+
}, nt = ({ appId: e, onNavigate: n, pricingDone: i = !1, onNavigateToPricing: a }) => {
|
|
1289
|
+
let { t: o } = W(), s = (e, t) => {
|
|
1289
1290
|
let n = o(e);
|
|
1290
1291
|
return n === e ? t : n;
|
|
1291
1292
|
}, { data: l, loading: u, error: d } = c({
|
|
1292
1293
|
variables: { applicationId: e },
|
|
1293
1294
|
fetchPolicy: "cache-and-network"
|
|
1294
1295
|
});
|
|
1295
|
-
if (u) return /* @__PURE__ */
|
|
1296
|
-
if (d) return /* @__PURE__ */
|
|
1296
|
+
if (u) return /* @__PURE__ */ H(G, { message: s("devportal.loadingVersions", "Loading versions…") });
|
|
1297
|
+
if (d) return /* @__PURE__ */ H(K, { message: d.message });
|
|
1297
1298
|
let f = (l?.application?.versions?.edges ?? []).map((e) => e.node);
|
|
1298
|
-
return /* @__PURE__ */
|
|
1299
|
+
return /* @__PURE__ */ U("div", {
|
|
1299
1300
|
className: "space-y-4",
|
|
1300
1301
|
children: [
|
|
1301
|
-
/* @__PURE__ */
|
|
1302
|
+
/* @__PURE__ */ U("div", {
|
|
1302
1303
|
className: "flex items-center justify-between",
|
|
1303
|
-
children: [/* @__PURE__ */
|
|
1304
|
+
children: [/* @__PURE__ */ U("p", {
|
|
1304
1305
|
className: "text-sm text-text-secondary",
|
|
1305
1306
|
children: [
|
|
1306
1307
|
f.length,
|
|
1307
1308
|
" ",
|
|
1308
1309
|
f.length === 1 ? s("devportal.version", "version") : s("devportal.versions", "versions")
|
|
1309
1310
|
]
|
|
1310
|
-
}), /* @__PURE__ */
|
|
1311
|
+
}), /* @__PURE__ */ U("button", {
|
|
1311
1312
|
onClick: () => n(`/apps/${e}/versions`),
|
|
1312
1313
|
className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors",
|
|
1313
|
-
children: [/* @__PURE__ */
|
|
1314
|
+
children: [/* @__PURE__ */ H(Ie, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
|
|
1314
1315
|
})]
|
|
1315
1316
|
}),
|
|
1316
|
-
f.length > 0 ? /* @__PURE__ */
|
|
1317
|
+
f.length > 0 ? /* @__PURE__ */ H("div", {
|
|
1317
1318
|
className: "overflow-hidden rounded-lg border border-border-subtle",
|
|
1318
|
-
children: /* @__PURE__ */
|
|
1319
|
+
children: /* @__PURE__ */ U("table", {
|
|
1319
1320
|
className: "w-full text-sm",
|
|
1320
|
-
children: [/* @__PURE__ */
|
|
1321
|
+
children: [/* @__PURE__ */ H("thead", { children: /* @__PURE__ */ U("tr", {
|
|
1321
1322
|
className: "border-b border-border-subtle bg-bg-sunken/50",
|
|
1322
1323
|
children: [
|
|
1323
|
-
/* @__PURE__ */
|
|
1324
|
+
/* @__PURE__ */ H("th", {
|
|
1324
1325
|
className: "px-4 py-3 text-left font-medium text-text-secondary",
|
|
1325
1326
|
children: s("devportal.version", "Version")
|
|
1326
1327
|
}),
|
|
1327
|
-
/* @__PURE__ */
|
|
1328
|
+
/* @__PURE__ */ H("th", {
|
|
1328
1329
|
className: "px-4 py-3 text-left font-medium text-text-secondary",
|
|
1329
1330
|
children: s("devportal.status", "Status")
|
|
1330
1331
|
}),
|
|
1331
|
-
/* @__PURE__ */
|
|
1332
|
+
/* @__PURE__ */ H("th", {
|
|
1332
1333
|
className: "px-4 py-3 text-left font-medium text-text-secondary",
|
|
1333
1334
|
children: s("devportal.released", "Released")
|
|
1334
1335
|
}),
|
|
1335
|
-
/* @__PURE__ */
|
|
1336
|
+
/* @__PURE__ */ H("th", {
|
|
1336
1337
|
className: "px-4 py-3 text-left font-medium text-text-secondary",
|
|
1337
1338
|
children: s("devportal.flags", "Flags")
|
|
1338
1339
|
})
|
|
1339
1340
|
]
|
|
1340
|
-
}) }), /* @__PURE__ */
|
|
1341
|
+
}) }), /* @__PURE__ */ H("tbody", {
|
|
1341
1342
|
className: "divide-y divide-border-subtle",
|
|
1342
|
-
children: f.map((e) => /* @__PURE__ */
|
|
1343
|
-
/* @__PURE__ */
|
|
1343
|
+
children: f.map((e) => /* @__PURE__ */ U(V, { children: [
|
|
1344
|
+
/* @__PURE__ */ U("tr", {
|
|
1344
1345
|
className: "hover:bg-bg-sunken/30 transition-colors",
|
|
1345
1346
|
children: [
|
|
1346
|
-
/* @__PURE__ */
|
|
1347
|
+
/* @__PURE__ */ H("td", {
|
|
1347
1348
|
className: "px-4 py-3 font-mono font-medium",
|
|
1348
1349
|
children: e.version
|
|
1349
1350
|
}),
|
|
1350
|
-
/* @__PURE__ */
|
|
1351
|
+
/* @__PURE__ */ H("td", {
|
|
1351
1352
|
className: "px-4 py-3",
|
|
1352
|
-
children: /* @__PURE__ */
|
|
1353
|
+
children: /* @__PURE__ */ H("span", {
|
|
1353
1354
|
className: t("inline-flex rounded-full px-2 py-0.5 text-xs font-medium", e.status === "published" ? "bg-status-success-bg-subtle text-status-success-text" : e.status === "pending_review" ? "bg-status-info-bg-subtle text-status-info-text" : e.status === "rejected" ? "bg-status-error-bg-subtle text-status-error-text" : e.status === "deprecated" ? "bg-bg-sunken text-text-secondary" : "bg-status-warning-bg-subtle text-status-warning-text"),
|
|
1354
1355
|
children: e.status === "pending_review" ? "In Review" : e.status
|
|
1355
1356
|
})
|
|
1356
1357
|
}),
|
|
1357
|
-
/* @__PURE__ */
|
|
1358
|
+
/* @__PURE__ */ H("td", {
|
|
1358
1359
|
className: "px-4 py-3 text-text-secondary",
|
|
1359
1360
|
children: e.publishedAt ? new Date(e.publishedAt).toLocaleDateString() : new Date(e.createdAt).toLocaleDateString()
|
|
1360
1361
|
}),
|
|
1361
|
-
/* @__PURE__ */
|
|
1362
|
+
/* @__PURE__ */ H("td", {
|
|
1362
1363
|
className: "px-4 py-3",
|
|
1363
|
-
children: /* @__PURE__ */
|
|
1364
|
+
children: /* @__PURE__ */ U("div", {
|
|
1364
1365
|
className: "flex gap-1.5",
|
|
1365
|
-
children: [e.isLatest && /* @__PURE__ */
|
|
1366
|
+
children: [e.isLatest && /* @__PURE__ */ H("span", {
|
|
1366
1367
|
className: "rounded-full bg-action-primary-bg/10 px-2 py-0.5 text-xs text-primary font-medium",
|
|
1367
1368
|
children: "latest"
|
|
1368
|
-
}), e.isStable && /* @__PURE__ */
|
|
1369
|
+
}), e.isStable && /* @__PURE__ */ H("span", {
|
|
1369
1370
|
className: "rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-xs text-status-success-text font-medium",
|
|
1370
1371
|
children: "stable"
|
|
1371
1372
|
})]
|
|
@@ -1373,26 +1374,26 @@ var Ke = [
|
|
|
1373
1374
|
})
|
|
1374
1375
|
]
|
|
1375
1376
|
}, e.id),
|
|
1376
|
-
e.status === "rejected" && e.reviewNotes && /* @__PURE__ */
|
|
1377
|
+
e.status === "rejected" && e.reviewNotes && /* @__PURE__ */ H("tr", {
|
|
1377
1378
|
className: "bg-status-error-bg-subtle/40",
|
|
1378
|
-
children: /* @__PURE__ */
|
|
1379
|
+
children: /* @__PURE__ */ H("td", {
|
|
1379
1380
|
colSpan: 4,
|
|
1380
1381
|
className: "px-4 py-2",
|
|
1381
|
-
children: /* @__PURE__ */
|
|
1382
|
+
children: /* @__PURE__ */ U("p", {
|
|
1382
1383
|
className: "text-xs text-status-error-text",
|
|
1383
|
-
children: [/* @__PURE__ */
|
|
1384
|
+
children: [/* @__PURE__ */ U("span", {
|
|
1384
1385
|
className: "font-semibold",
|
|
1385
1386
|
children: ["Review feedback:", " "]
|
|
1386
1387
|
}), e.reviewNotes]
|
|
1387
1388
|
})
|
|
1388
1389
|
})
|
|
1389
1390
|
}, `${e.id}-notes`),
|
|
1390
|
-
e.status === "pending_review" && /* @__PURE__ */
|
|
1391
|
+
e.status === "pending_review" && /* @__PURE__ */ H("tr", {
|
|
1391
1392
|
className: "bg-status-info-bg-subtle/30",
|
|
1392
|
-
children: /* @__PURE__ */
|
|
1393
|
+
children: /* @__PURE__ */ H("td", {
|
|
1393
1394
|
colSpan: 4,
|
|
1394
1395
|
className: "px-4 py-2",
|
|
1395
|
-
children: /* @__PURE__ */
|
|
1396
|
+
children: /* @__PURE__ */ H("p", {
|
|
1396
1397
|
className: "text-xs text-status-info-text",
|
|
1397
1398
|
children: "Submitted for platform review — you will be notified once approved or if changes are needed."
|
|
1398
1399
|
})
|
|
@@ -1401,53 +1402,53 @@ var Ke = [
|
|
|
1401
1402
|
] }))
|
|
1402
1403
|
})]
|
|
1403
1404
|
})
|
|
1404
|
-
}) : /* @__PURE__ */
|
|
1405
|
+
}) : /* @__PURE__ */ H(r, {
|
|
1405
1406
|
illustration: "empty-generic",
|
|
1406
|
-
icon: /* @__PURE__ */
|
|
1407
|
+
icon: /* @__PURE__ */ H(Ae, { size: 32 }),
|
|
1407
1408
|
title: s("devportal.noVersions", "No versions yet"),
|
|
1408
1409
|
description: s("devportal.noVersionsDescription", "Upload your first version to make this item available for review and distribution."),
|
|
1409
|
-
action: /* @__PURE__ */
|
|
1410
|
+
action: /* @__PURE__ */ U("button", {
|
|
1410
1411
|
onClick: () => n(`/apps/${e}/versions`),
|
|
1411
1412
|
className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90",
|
|
1412
|
-
children: [/* @__PURE__ */
|
|
1413
|
+
children: [/* @__PURE__ */ H(Ie, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
|
|
1413
1414
|
})
|
|
1414
1415
|
}),
|
|
1415
|
-
f.length > 0 && !i && a && /* @__PURE__ */
|
|
1416
|
+
f.length > 0 && !i && a && /* @__PURE__ */ U("div", {
|
|
1416
1417
|
className: "mt-4 flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-sunken px-4 py-3",
|
|
1417
1418
|
children: [
|
|
1418
|
-
/* @__PURE__ */
|
|
1419
|
+
/* @__PURE__ */ H(ye, {
|
|
1419
1420
|
size: 16,
|
|
1420
1421
|
className: "shrink-0 text-primary"
|
|
1421
1422
|
}),
|
|
1422
|
-
/* @__PURE__ */
|
|
1423
|
+
/* @__PURE__ */ H("p", {
|
|
1423
1424
|
className: "flex-1 text-sm text-text-secondary",
|
|
1424
1425
|
children: s("devportal.versionsNextPricing", "You've got versions covered. Now set your pricing before you can submit.")
|
|
1425
1426
|
}),
|
|
1426
|
-
/* @__PURE__ */
|
|
1427
|
+
/* @__PURE__ */ U("button", {
|
|
1427
1428
|
type: "button",
|
|
1428
1429
|
onClick: a,
|
|
1429
1430
|
className: "inline-flex items-center gap-1 text-sm font-medium text-primary hover:underline underline-offset-2 whitespace-nowrap",
|
|
1430
|
-
children: [s("devportal.nextSetPricing", "Set Pricing"), /* @__PURE__ */
|
|
1431
|
+
children: [s("devportal.nextSetPricing", "Set Pricing"), /* @__PURE__ */ H(ve, { size: 15 })]
|
|
1431
1432
|
})
|
|
1432
1433
|
]
|
|
1433
1434
|
})
|
|
1434
1435
|
]
|
|
1435
1436
|
});
|
|
1436
|
-
},
|
|
1437
|
-
let { t: n } =
|
|
1437
|
+
}, rt = ({ appId: e, onNavigate: t }) => {
|
|
1438
|
+
let { t: n } = W(), r = (e, t) => {
|
|
1438
1439
|
let r = n(e);
|
|
1439
1440
|
return r === e ? t : r;
|
|
1440
1441
|
}, { data: i, loading: a, error: o } = u({ variables: { applicationId: e } });
|
|
1441
|
-
return a ? /* @__PURE__ */
|
|
1442
|
+
return a ? /* @__PURE__ */ H(G, { message: r("devportal.loadingWebhooks", "Loading webhooks...") }) : o ? /* @__PURE__ */ H(K, { message: o.message }) : /* @__PURE__ */ H(st, {
|
|
1442
1443
|
appId: e,
|
|
1443
|
-
webhooks: (i?.webhooks ?? []).map(
|
|
1444
|
+
webhooks: (i?.webhooks ?? []).map(Ke),
|
|
1444
1445
|
onNavigate: t
|
|
1445
1446
|
});
|
|
1446
|
-
},
|
|
1447
|
-
let { t: o } =
|
|
1447
|
+
}, it = ({ authAppId: e, appName: t, onGrantDelegation: n, onNavigate: a }) => {
|
|
1448
|
+
let { t: o } = W(), s = (e, t) => {
|
|
1448
1449
|
let n = o(e);
|
|
1449
1450
|
return n === e ? t : n;
|
|
1450
|
-
}, { data: c, loading: l, error: u, refetch: d } = i(), [f] = m(), [p, h] = N([]), [g, _] = N(!1), [v, y] = N(/* @__PURE__ */ new Set()), [b, x] = N(null), S =
|
|
1451
|
+
}, { data: c, loading: l, error: u, refetch: d } = i(), [f] = m(), [p, h] = N([]), [g, _] = N(!1), [v, y] = N(/* @__PURE__ */ new Set()), [b, x] = N(null), S = M(() => c?.currentUserDelegations?.delegations ? c.currentUserDelegations.delegations.filter((t) => t.appId === e).map(Je) : [], [e, c]), C = M(() => S.filter((e) => e.status === "ACTIVE"), [S]), w = M(() => C.filter((e) => v.has(e.id)), [C, v]), T = C.length > 0 && C.every((e) => v.has(e.id)), E = C.some((e) => v.has(e.id)) && !T, D = A((e, t) => {
|
|
1451
1452
|
y((n) => {
|
|
1452
1453
|
let r = new Set(n);
|
|
1453
1454
|
return t ? r.add(e) : r.delete(e), r;
|
|
@@ -1473,19 +1474,19 @@ var Ke = [
|
|
|
1473
1474
|
_(!1);
|
|
1474
1475
|
}
|
|
1475
1476
|
}, [f, d]);
|
|
1476
|
-
return e ? l ? /* @__PURE__ */
|
|
1477
|
-
b && /* @__PURE__ */
|
|
1477
|
+
return e ? l ? /* @__PURE__ */ H(G, { message: s("devportal.loadingDelegations", "Loading delegations...") }) : u ? /* @__PURE__ */ H(K, { message: u.message }) : /* @__PURE__ */ U(V, { children: [
|
|
1478
|
+
b && /* @__PURE__ */ H("div", {
|
|
1478
1479
|
className: "rounded-lg border border-border-subtle bg-status-success-bg-subtle p-3 text-sm text-status-success-text",
|
|
1479
|
-
children: /* @__PURE__ */
|
|
1480
|
+
children: /* @__PURE__ */ U("div", {
|
|
1480
1481
|
className: "flex items-center justify-between gap-3",
|
|
1481
|
-
children: [/* @__PURE__ */
|
|
1482
|
+
children: [/* @__PURE__ */ H("span", { children: b }), /* @__PURE__ */ H("button", {
|
|
1482
1483
|
onClick: () => x(null),
|
|
1483
1484
|
className: "text-status-success-text hover:text-status-success-text",
|
|
1484
1485
|
children: s("devportal.dismiss", "Dismiss")
|
|
1485
1486
|
})]
|
|
1486
1487
|
})
|
|
1487
1488
|
}),
|
|
1488
|
-
/* @__PURE__ */
|
|
1489
|
+
/* @__PURE__ */ H(ct, {
|
|
1489
1490
|
appName: t,
|
|
1490
1491
|
delegations: S,
|
|
1491
1492
|
onGrantDelegation: n,
|
|
@@ -1498,7 +1499,7 @@ var Ke = [
|
|
|
1498
1499
|
allVisibleSelected: T,
|
|
1499
1500
|
partiallySelected: E
|
|
1500
1501
|
}),
|
|
1501
|
-
/* @__PURE__ */
|
|
1502
|
+
/* @__PURE__ */ H(ae, {
|
|
1502
1503
|
open: p.length > 0,
|
|
1503
1504
|
onOpenChange: (e) => {
|
|
1504
1505
|
e || h([]);
|
|
@@ -1513,69 +1514,69 @@ var Ke = [
|
|
|
1513
1514
|
variant: "destructive",
|
|
1514
1515
|
loading: g
|
|
1515
1516
|
})
|
|
1516
|
-
] }) : /* @__PURE__ */
|
|
1517
|
+
] }) : /* @__PURE__ */ H(r, {
|
|
1517
1518
|
illustration: "empty-generic",
|
|
1518
|
-
icon: /* @__PURE__ */
|
|
1519
|
+
icon: /* @__PURE__ */ H(z, { size: 32 }),
|
|
1519
1520
|
title: s("devportal.linkAuthAppFirst", "Link an auth app first"),
|
|
1520
1521
|
description: s("devportal.linkAuthAppFirstDescription", "Delegations are managed through auth apps. Create or link an auth app before granting app-as-user access."),
|
|
1521
|
-
action: /* @__PURE__ */
|
|
1522
|
+
action: /* @__PURE__ */ U("button", {
|
|
1522
1523
|
onClick: () => a("/oauth"),
|
|
1523
1524
|
className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90",
|
|
1524
|
-
children: [/* @__PURE__ */
|
|
1525
|
+
children: [/* @__PURE__ */ H(I, { size: 16 }), s("devportal.manageOAuthApps", "Manage OAuth Apps")]
|
|
1525
1526
|
})
|
|
1526
1527
|
});
|
|
1527
|
-
},
|
|
1528
|
-
let { t } =
|
|
1528
|
+
}, at = ({ appId: e }) => {
|
|
1529
|
+
let { t } = W(), n = (e, n) => {
|
|
1529
1530
|
let r = t(e);
|
|
1530
1531
|
return r === e ? n : r;
|
|
1531
|
-
}, r =
|
|
1532
|
+
}, r = M(() => /* @__PURE__ */ new Date(), []), { data: i, loading: a, error: s } = o({ variables: {
|
|
1532
1533
|
applicationId: e,
|
|
1533
1534
|
period: "daily",
|
|
1534
|
-
startDate:
|
|
1535
|
+
startDate: M(() => {
|
|
1535
1536
|
let e = new Date(r);
|
|
1536
1537
|
return e.setDate(e.getDate() - 30), e;
|
|
1537
1538
|
}, [r]).toISOString(),
|
|
1538
1539
|
endDate: r.toISOString()
|
|
1539
1540
|
} });
|
|
1540
|
-
return a ? /* @__PURE__ */
|
|
1541
|
-
},
|
|
1542
|
-
let { t: r } =
|
|
1541
|
+
return a ? /* @__PURE__ */ H(G, { message: n("devportal.loadingAnalytics", "Loading analytics...") }) : s ? /* @__PURE__ */ H(K, { message: s.message }) : /* @__PURE__ */ H(lt, { analytics: (i?.applicationAnalytics ?? []).map(qe) });
|
|
1542
|
+
}, ot = ({ app: e, appId: t, refetch: n }) => {
|
|
1543
|
+
let { t: r } = W(), i = (e, t) => {
|
|
1543
1544
|
let n = r(e);
|
|
1544
1545
|
return n === e ? t : n;
|
|
1545
1546
|
}, [a, { loading: o }] = g(), [s, { loading: c }] = y(), [l, u] = N(!1);
|
|
1546
|
-
return /* @__PURE__ */
|
|
1547
|
+
return /* @__PURE__ */ U("div", {
|
|
1547
1548
|
className: "space-y-6",
|
|
1548
|
-
children: [e.appType === "WORKFLOW" && /* @__PURE__ */
|
|
1549
|
+
children: [e.appType === "WORKFLOW" && /* @__PURE__ */ H("div", {
|
|
1549
1550
|
className: "rounded-lg border border-border-subtle bg-bg-elevated p-4",
|
|
1550
|
-
children: /* @__PURE__ */
|
|
1551
|
+
children: /* @__PURE__ */ U("div", {
|
|
1551
1552
|
className: "flex items-start justify-between gap-4",
|
|
1552
|
-
children: [/* @__PURE__ */
|
|
1553
|
+
children: [/* @__PURE__ */ U("div", {
|
|
1553
1554
|
className: "flex items-start gap-3",
|
|
1554
|
-
children: [/* @__PURE__ */
|
|
1555
|
+
children: [/* @__PURE__ */ H("div", {
|
|
1555
1556
|
className: "mt-0.5 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-full bg-action-primary-bg-subtle",
|
|
1556
|
-
children: /* @__PURE__ */
|
|
1557
|
+
children: /* @__PURE__ */ H(De, {
|
|
1557
1558
|
size: 15,
|
|
1558
1559
|
className: "text-action-primary-text"
|
|
1559
1560
|
})
|
|
1560
|
-
}), /* @__PURE__ */
|
|
1561
|
-
/* @__PURE__ */
|
|
1561
|
+
}), /* @__PURE__ */ U("div", { children: [
|
|
1562
|
+
/* @__PURE__ */ H("p", {
|
|
1562
1563
|
className: "text-sm font-medium text-text-primary",
|
|
1563
1564
|
children: i("devportal.shareWorkflow.title", "Share as Public Link")
|
|
1564
1565
|
}),
|
|
1565
|
-
/* @__PURE__ */
|
|
1566
|
+
/* @__PURE__ */ H("p", {
|
|
1566
1567
|
className: "mt-0.5 text-xs text-text-secondary",
|
|
1567
1568
|
children: e.visibility === "UNLISTED" ? i("devportal.shareWorkflow.activeDesc", "Anyone with the link can preview and copy this workflow into their FluidGrids workspace.") : i("devportal.shareWorkflow.inactiveDesc", "Generate a public link anyone can use to copy this workflow into their own FluidGrids workspace — no store review needed.")
|
|
1568
1569
|
}),
|
|
1569
|
-
e.visibility === "UNLISTED" && (e.status === "PUBLISHED" || e.status === "SUBMITTED") && /* @__PURE__ */
|
|
1570
|
+
e.visibility === "UNLISTED" && (e.status === "PUBLISHED" || e.status === "SUBMITTED") && /* @__PURE__ */ H("p", {
|
|
1570
1571
|
className: "mt-1.5 text-xs text-status-warning-text",
|
|
1571
1572
|
children: i("devportal.shareWorkflow.stopSharingPublishedNote", "This app is in the marketplace. Stopping the share link will keep it there — visibility will switch to Public so the store listing is preserved.")
|
|
1572
1573
|
}),
|
|
1573
|
-
e.visibility === "UNLISTED" && /* @__PURE__ */
|
|
1574
|
+
e.visibility === "UNLISTED" && /* @__PURE__ */ U("div", {
|
|
1574
1575
|
className: "mt-2 flex items-center gap-2",
|
|
1575
|
-
children: [/* @__PURE__ */
|
|
1576
|
+
children: [/* @__PURE__ */ H("code", {
|
|
1576
1577
|
className: "rounded bg-bg-canvas px-2 py-1 text-xs text-text-secondary",
|
|
1577
1578
|
children: `${window.location.protocol}//${window.location.host}/shared/${t}`
|
|
1578
|
-
}), /* @__PURE__ */
|
|
1579
|
+
}), /* @__PURE__ */ U("button", {
|
|
1579
1580
|
type: "button",
|
|
1580
1581
|
className: "flex items-center gap-1 rounded px-2 py-1 text-xs text-action-primary-text hover:bg-action-primary-bg-subtle transition-colors",
|
|
1581
1582
|
onClick: () => {
|
|
@@ -1584,11 +1585,11 @@ var Ke = [
|
|
|
1584
1585
|
u(!0), setTimeout(() => u(!1), 2e3);
|
|
1585
1586
|
});
|
|
1586
1587
|
},
|
|
1587
|
-
children: [
|
|
1588
|
+
children: [H(l ? F : xe, { size: 12 }), l ? i("devportal.copied", "Copied!") : i("devportal.copyLink", "Copy Link")]
|
|
1588
1589
|
})]
|
|
1589
1590
|
})
|
|
1590
1591
|
] })]
|
|
1591
|
-
}), /* @__PURE__ */
|
|
1592
|
+
}), /* @__PURE__ */ H("button", {
|
|
1592
1593
|
type: "button",
|
|
1593
1594
|
disabled: o || c || !e.manifest,
|
|
1594
1595
|
title: e.manifest ? void 0 : i("devportal.shareWorkflow.noManifestHint", "Add a workflow manifest before sharing"),
|
|
@@ -1596,67 +1597,67 @@ var Ke = [
|
|
|
1596
1597
|
e.visibility === "UNLISTED" ? s({ variables: { id: t } }).then(() => n()) : a({ variables: { id: t } }).then(() => n());
|
|
1597
1598
|
},
|
|
1598
1599
|
className: `flex-shrink-0 rounded-full px-3 py-1.5 text-xs font-medium transition-colors ${e.visibility === "UNLISTED" ? "border border-status-error-bg text-status-error-text hover:bg-status-error-bg-subtle" : "bg-action-primary-bg text-text-on-action hover:opacity-90 disabled:opacity-50"}`,
|
|
1599
|
-
children: o || c ? /* @__PURE__ */
|
|
1600
|
+
children: o || c ? /* @__PURE__ */ H(L, {
|
|
1600
1601
|
size: 12,
|
|
1601
1602
|
className: "animate-spin"
|
|
1602
1603
|
}) : e.visibility === "UNLISTED" ? i("devportal.shareWorkflow.stopSharing", "Stop Sharing") : i("devportal.shareWorkflow.share", "Share Link")
|
|
1603
1604
|
})]
|
|
1604
1605
|
})
|
|
1605
|
-
}), /* @__PURE__ */
|
|
1606
|
+
}), /* @__PURE__ */ U("div", {
|
|
1606
1607
|
className: "grid gap-6 lg:grid-cols-3",
|
|
1607
|
-
children: [/* @__PURE__ */
|
|
1608
|
+
children: [/* @__PURE__ */ U("div", {
|
|
1608
1609
|
className: "lg:col-span-2 space-y-6",
|
|
1609
1610
|
children: [
|
|
1610
|
-
/* @__PURE__ */
|
|
1611
|
+
/* @__PURE__ */ H(Ue, { children: /* @__PURE__ */ U("div", {
|
|
1611
1612
|
className: "grid gap-4 sm:grid-cols-4",
|
|
1612
1613
|
children: [
|
|
1613
|
-
/* @__PURE__ */
|
|
1614
|
+
/* @__PURE__ */ H(Z, {
|
|
1614
1615
|
label: i("devportal.totalInstalls", "Total Installs"),
|
|
1615
1616
|
value: e.installCount.toLocaleString()
|
|
1616
1617
|
}),
|
|
1617
|
-
/* @__PURE__ */
|
|
1618
|
+
/* @__PURE__ */ H(Z, {
|
|
1618
1619
|
label: i("devportal.activeInstalls", "Active Installs"),
|
|
1619
1620
|
value: e.activeInstallCount.toLocaleString()
|
|
1620
1621
|
}),
|
|
1621
|
-
/* @__PURE__ */
|
|
1622
|
+
/* @__PURE__ */ H(Z, {
|
|
1622
1623
|
label: i("devportal.averageRating", "Average Rating"),
|
|
1623
1624
|
value: e.averageRating ? `${e.averageRating.toFixed(1)} ★` : i("devportal.notAvailable", "N/A")
|
|
1624
1625
|
}),
|
|
1625
|
-
/* @__PURE__ */
|
|
1626
|
+
/* @__PURE__ */ H(Z, {
|
|
1626
1627
|
label: i("devportal.reviews", "Reviews"),
|
|
1627
1628
|
value: e.reviewCount.toString()
|
|
1628
1629
|
})
|
|
1629
1630
|
]
|
|
1630
1631
|
}) }),
|
|
1631
|
-
/* @__PURE__ */
|
|
1632
|
+
/* @__PURE__ */ H(S, {
|
|
1632
1633
|
title: i("devportal.description", "Description"),
|
|
1633
|
-
children: e.description ? /* @__PURE__ */
|
|
1634
|
+
children: e.description ? /* @__PURE__ */ H(me, {
|
|
1634
1635
|
className: "prose prose-sm max-w-none",
|
|
1635
1636
|
children: e.description
|
|
1636
|
-
}) : /* @__PURE__ */
|
|
1637
|
+
}) : /* @__PURE__ */ H("p", {
|
|
1637
1638
|
className: "text-sm text-text-secondary",
|
|
1638
1639
|
children: i("devportal.noDescriptionProvided", "No description provided.")
|
|
1639
1640
|
})
|
|
1640
1641
|
}),
|
|
1641
|
-
/* @__PURE__ */
|
|
1642
|
+
/* @__PURE__ */ H(S, {
|
|
1642
1643
|
title: i("devportal.tagsAndKeywords", "Tags & Keywords"),
|
|
1643
|
-
children: /* @__PURE__ */
|
|
1644
|
+
children: /* @__PURE__ */ U("div", {
|
|
1644
1645
|
className: "space-y-3",
|
|
1645
|
-
children: [e.tags.length > 0 && /* @__PURE__ */
|
|
1646
|
+
children: [e.tags.length > 0 && /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
|
|
1646
1647
|
className: "text-xs text-text-secondary mb-2",
|
|
1647
1648
|
children: i("devportal.tags", "Tags")
|
|
1648
|
-
}), /* @__PURE__ */
|
|
1649
|
+
}), /* @__PURE__ */ H("div", {
|
|
1649
1650
|
className: "flex flex-wrap gap-2",
|
|
1650
|
-
children: e.tags.map((e) => /* @__PURE__ */
|
|
1651
|
+
children: e.tags.map((e) => /* @__PURE__ */ H("span", {
|
|
1651
1652
|
className: "rounded-full bg-action-primary-bg/10 px-3 py-1 text-xs font-medium text-primary",
|
|
1652
1653
|
children: e
|
|
1653
1654
|
}, e))
|
|
1654
|
-
})] }), e.keywords.length > 0 && /* @__PURE__ */
|
|
1655
|
+
})] }), e.keywords.length > 0 && /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
|
|
1655
1656
|
className: "text-xs text-text-secondary mb-2",
|
|
1656
1657
|
children: i("devportal.keywords", "Keywords")
|
|
1657
|
-
}), /* @__PURE__ */
|
|
1658
|
+
}), /* @__PURE__ */ H("div", {
|
|
1658
1659
|
className: "flex flex-wrap gap-2",
|
|
1659
|
-
children: e.keywords.map((e) => /* @__PURE__ */
|
|
1660
|
+
children: e.keywords.map((e) => /* @__PURE__ */ H("span", {
|
|
1660
1661
|
className: "rounded-full bg-bg-sunken px-3 py-1 text-xs",
|
|
1661
1662
|
children: e
|
|
1662
1663
|
}, e))
|
|
@@ -1664,14 +1665,14 @@ var Ke = [
|
|
|
1664
1665
|
})
|
|
1665
1666
|
})
|
|
1666
1667
|
]
|
|
1667
|
-
}), /* @__PURE__ */
|
|
1668
|
+
}), /* @__PURE__ */ U("div", {
|
|
1668
1669
|
className: "space-y-6",
|
|
1669
|
-
children: [/* @__PURE__ */
|
|
1670
|
+
children: [/* @__PURE__ */ H(S, {
|
|
1670
1671
|
title: i("devportal.details", "Details"),
|
|
1671
|
-
children: /* @__PURE__ */
|
|
1672
|
+
children: /* @__PURE__ */ H(ne, { items: [
|
|
1672
1673
|
{
|
|
1673
1674
|
label: i("devportal.appId", "App ID"),
|
|
1674
|
-
value: /* @__PURE__ */
|
|
1675
|
+
value: /* @__PURE__ */ H("code", {
|
|
1675
1676
|
className: "text-xs",
|
|
1676
1677
|
children: e.id
|
|
1677
1678
|
})
|
|
@@ -1707,32 +1708,32 @@ var Ke = [
|
|
|
1707
1708
|
value: e.publishedAt ? new Date(e.publishedAt).toLocaleDateString() : i("devportal.notPublished", "Not published")
|
|
1708
1709
|
}
|
|
1709
1710
|
] })
|
|
1710
|
-
}), /* @__PURE__ */
|
|
1711
|
+
}), /* @__PURE__ */ H(S, {
|
|
1711
1712
|
title: i("devportal.links", "Links"),
|
|
1712
|
-
children: /* @__PURE__ */
|
|
1713
|
+
children: /* @__PURE__ */ U("div", {
|
|
1713
1714
|
className: "space-y-2",
|
|
1714
1715
|
children: [
|
|
1715
|
-
e.websiteUrl && /* @__PURE__ */
|
|
1716
|
+
e.websiteUrl && /* @__PURE__ */ H(Q, {
|
|
1716
1717
|
label: i("devportal.website", "Website"),
|
|
1717
1718
|
url: e.websiteUrl
|
|
1718
1719
|
}),
|
|
1719
|
-
e.documentationUrl && /* @__PURE__ */
|
|
1720
|
+
e.documentationUrl && /* @__PURE__ */ H(Q, {
|
|
1720
1721
|
label: i("devportal.documentation", "Documentation"),
|
|
1721
1722
|
url: e.documentationUrl
|
|
1722
1723
|
}),
|
|
1723
|
-
e.supportUrl && /* @__PURE__ */
|
|
1724
|
+
e.supportUrl && /* @__PURE__ */ H(Q, {
|
|
1724
1725
|
label: i("devportal.support", "Support"),
|
|
1725
1726
|
url: e.supportUrl
|
|
1726
1727
|
}),
|
|
1727
|
-
e.githubUrl && /* @__PURE__ */
|
|
1728
|
+
e.githubUrl && /* @__PURE__ */ H(Q, {
|
|
1728
1729
|
label: i("devportal.github", "GitHub"),
|
|
1729
1730
|
url: e.githubUrl
|
|
1730
1731
|
}),
|
|
1731
|
-
e.privacyPolicyUrl && /* @__PURE__ */
|
|
1732
|
+
e.privacyPolicyUrl && /* @__PURE__ */ H(Q, {
|
|
1732
1733
|
label: i("devportal.privacyPolicy", "Privacy Policy"),
|
|
1733
1734
|
url: e.privacyPolicyUrl
|
|
1734
1735
|
}),
|
|
1735
|
-
e.termsOfServiceUrl && /* @__PURE__ */
|
|
1736
|
+
e.termsOfServiceUrl && /* @__PURE__ */ H(Q, {
|
|
1736
1737
|
label: i("devportal.termsOfService", "Terms of Service"),
|
|
1737
1738
|
url: e.termsOfServiceUrl
|
|
1738
1739
|
})
|
|
@@ -1742,16 +1743,16 @@ var Ke = [
|
|
|
1742
1743
|
})]
|
|
1743
1744
|
})]
|
|
1744
1745
|
});
|
|
1745
|
-
},
|
|
1746
|
-
let { t: i } =
|
|
1746
|
+
}, st = ({ appId: e, webhooks: t, onNavigate: n }) => {
|
|
1747
|
+
let { t: i } = W(), a = (e, t) => {
|
|
1747
1748
|
let n = i(e);
|
|
1748
1749
|
return n === e ? t : n;
|
|
1749
1750
|
};
|
|
1750
|
-
return /* @__PURE__ */
|
|
1751
|
+
return /* @__PURE__ */ U("div", {
|
|
1751
1752
|
className: "space-y-6",
|
|
1752
|
-
children: [/* @__PURE__ */
|
|
1753
|
+
children: [/* @__PURE__ */ U("div", {
|
|
1753
1754
|
className: "flex items-center justify-between",
|
|
1754
|
-
children: [/* @__PURE__ */
|
|
1755
|
+
children: [/* @__PURE__ */ U("p", {
|
|
1755
1756
|
className: "text-sm text-text-secondary",
|
|
1756
1757
|
children: [
|
|
1757
1758
|
t.length,
|
|
@@ -1760,81 +1761,81 @@ var Ke = [
|
|
|
1760
1761
|
" ",
|
|
1761
1762
|
a("devportal.configured", "configured")
|
|
1762
1763
|
]
|
|
1763
|
-
}), /* @__PURE__ */
|
|
1764
|
+
}), /* @__PURE__ */ U("button", {
|
|
1764
1765
|
onClick: () => n(`/apps/${e}/webhooks/new`),
|
|
1765
1766
|
className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors",
|
|
1766
|
-
children: [/* @__PURE__ */
|
|
1767
|
+
children: [/* @__PURE__ */ H(R, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
|
|
1767
1768
|
})]
|
|
1768
|
-
}), t.length > 0 ? /* @__PURE__ */
|
|
1769
|
+
}), t.length > 0 ? /* @__PURE__ */ H("div", {
|
|
1769
1770
|
className: "space-y-4",
|
|
1770
|
-
children: t.map((t) => /* @__PURE__ */
|
|
1771
|
+
children: t.map((t) => /* @__PURE__ */ U("div", {
|
|
1771
1772
|
className: "rounded-card border border-border-seam bg-bg-surface p-4 space-y-4 shadow-[var(--shadow-pop)]",
|
|
1772
1773
|
children: [
|
|
1773
|
-
/* @__PURE__ */
|
|
1774
|
+
/* @__PURE__ */ U("div", {
|
|
1774
1775
|
className: "flex items-start justify-between",
|
|
1775
|
-
children: [/* @__PURE__ */
|
|
1776
|
+
children: [/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ U("div", {
|
|
1776
1777
|
className: "flex items-center gap-2",
|
|
1777
|
-
children: [/* @__PURE__ */
|
|
1778
|
+
children: [/* @__PURE__ */ H("h3", {
|
|
1778
1779
|
className: "font-medium",
|
|
1779
1780
|
children: t.name
|
|
1780
|
-
}), /* @__PURE__ */
|
|
1781
|
+
}), /* @__PURE__ */ H(T, {
|
|
1781
1782
|
status: t.status,
|
|
1782
1783
|
type: "webhook"
|
|
1783
1784
|
})]
|
|
1784
|
-
}), t.description && /* @__PURE__ */
|
|
1785
|
+
}), t.description && /* @__PURE__ */ H("p", {
|
|
1785
1786
|
className: "text-sm text-text-secondary mt-1",
|
|
1786
1787
|
children: t.description
|
|
1787
|
-
})] }), /* @__PURE__ */
|
|
1788
|
+
})] }), /* @__PURE__ */ H("button", {
|
|
1788
1789
|
onClick: () => n(`/apps/${e}/webhooks/${t.id}`),
|
|
1789
1790
|
className: "rounded-md p-1 hover:bg-bg-sunken",
|
|
1790
|
-
children: /* @__PURE__ */
|
|
1791
|
+
children: /* @__PURE__ */ H(ke, { size: 20 })
|
|
1791
1792
|
})]
|
|
1792
1793
|
}),
|
|
1793
|
-
/* @__PURE__ */
|
|
1794
|
+
/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
|
|
1794
1795
|
className: "text-xs text-text-secondary mb-1",
|
|
1795
1796
|
children: a("devportal.endpointUrl", "Endpoint URL")
|
|
1796
|
-
}), /* @__PURE__ */
|
|
1797
|
+
}), /* @__PURE__ */ H("code", {
|
|
1797
1798
|
className: "text-sm bg-bg-sunken px-2 py-1 rounded block truncate",
|
|
1798
1799
|
children: t.url
|
|
1799
1800
|
})] }),
|
|
1800
|
-
/* @__PURE__ */
|
|
1801
|
+
/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
|
|
1801
1802
|
className: "text-xs text-text-secondary mb-2",
|
|
1802
1803
|
children: a("devportal.events", "Events")
|
|
1803
|
-
}), /* @__PURE__ */
|
|
1804
|
+
}), /* @__PURE__ */ H("div", {
|
|
1804
1805
|
className: "flex flex-wrap gap-2",
|
|
1805
|
-
children: t.events.map((e) => /* @__PURE__ */
|
|
1806
|
+
children: t.events.map((e) => /* @__PURE__ */ H("span", {
|
|
1806
1807
|
className: "rounded-full bg-bg-sunken px-2 py-0.5 text-xs",
|
|
1807
1808
|
children: e
|
|
1808
1809
|
}, e))
|
|
1809
1810
|
})] }),
|
|
1810
|
-
/* @__PURE__ */
|
|
1811
|
+
/* @__PURE__ */ U("div", {
|
|
1811
1812
|
className: "grid gap-4 sm:grid-cols-4 text-sm",
|
|
1812
1813
|
children: [
|
|
1813
|
-
/* @__PURE__ */
|
|
1814
|
+
/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
|
|
1814
1815
|
className: "text-xs text-text-secondary",
|
|
1815
1816
|
children: a("devportal.success", "Success")
|
|
1816
|
-
}), /* @__PURE__ */
|
|
1817
|
+
}), /* @__PURE__ */ H("p", {
|
|
1817
1818
|
className: "font-medium text-status-success-text",
|
|
1818
1819
|
children: t.successCount.toLocaleString()
|
|
1819
1820
|
})] }),
|
|
1820
|
-
/* @__PURE__ */
|
|
1821
|
+
/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
|
|
1821
1822
|
className: "text-xs text-text-secondary",
|
|
1822
1823
|
children: a("devportal.failed", "Failed")
|
|
1823
|
-
}), /* @__PURE__ */
|
|
1824
|
+
}), /* @__PURE__ */ H("p", {
|
|
1824
1825
|
className: "font-medium text-status-error-text",
|
|
1825
1826
|
children: t.failureCount.toLocaleString()
|
|
1826
1827
|
})] }),
|
|
1827
|
-
/* @__PURE__ */
|
|
1828
|
+
/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
|
|
1828
1829
|
className: "text-xs text-text-secondary",
|
|
1829
1830
|
children: a("devportal.successRate", "Success Rate")
|
|
1830
|
-
}), /* @__PURE__ */
|
|
1831
|
+
}), /* @__PURE__ */ U("p", {
|
|
1831
1832
|
className: "font-medium",
|
|
1832
1833
|
children: [t.successCount + t.failureCount > 0 ? (t.successCount / (t.successCount + t.failureCount) * 100).toFixed(1) : "0.0", "%"]
|
|
1833
1834
|
})] }),
|
|
1834
|
-
/* @__PURE__ */
|
|
1835
|
+
/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
|
|
1835
1836
|
className: "text-xs text-text-secondary",
|
|
1836
1837
|
children: a("devportal.lastTriggered", "Last Triggered")
|
|
1837
|
-
}), /* @__PURE__ */
|
|
1838
|
+
}), /* @__PURE__ */ H("p", {
|
|
1838
1839
|
className: "font-medium",
|
|
1839
1840
|
children: t.lastTriggeredAt ? new Date(t.lastTriggeredAt).toLocaleString() : a("devportal.never", "Never")
|
|
1840
1841
|
})] })
|
|
@@ -1842,29 +1843,29 @@ var Ke = [
|
|
|
1842
1843
|
})
|
|
1843
1844
|
]
|
|
1844
1845
|
}, t.id))
|
|
1845
|
-
}) : /* @__PURE__ */
|
|
1846
|
+
}) : /* @__PURE__ */ H(r, {
|
|
1846
1847
|
illustration: "empty-notifications",
|
|
1847
|
-
icon: /* @__PURE__ */
|
|
1848
|
+
icon: /* @__PURE__ */ H(Re, { size: 32 }),
|
|
1848
1849
|
title: a("devportal.noWebhooks", "No webhooks"),
|
|
1849
1850
|
description: a("devportal.noWebhooksDescription", "Add a webhook to receive event notifications"),
|
|
1850
|
-
action: /* @__PURE__ */
|
|
1851
|
+
action: /* @__PURE__ */ U("button", {
|
|
1851
1852
|
onClick: () => n(`/apps/${e}/webhooks/new`),
|
|
1852
1853
|
className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90",
|
|
1853
|
-
children: [/* @__PURE__ */
|
|
1854
|
+
children: [/* @__PURE__ */ H(R, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
|
|
1854
1855
|
})
|
|
1855
1856
|
})]
|
|
1856
1857
|
});
|
|
1857
|
-
},
|
|
1858
|
-
let { t: p } =
|
|
1858
|
+
}, ct = ({ appName: e, delegations: n, onGrantDelegation: i, onRevokeDelegation: a, selectedDelegationIds: o, onToggleSelectDelegation: s, onToggleAllDelegations: c, onClearSelection: l, onRevokeSelected: u, allVisibleSelected: d, partiallySelected: f }) => {
|
|
1859
|
+
let { t: p } = W(), m = (e, t) => {
|
|
1859
1860
|
let n = p(e);
|
|
1860
1861
|
return n === e ? t : n;
|
|
1861
1862
|
}, h = n.filter((e) => e.status === "ACTIVE"), g = n.filter((e) => e.status !== "ACTIVE");
|
|
1862
|
-
return /* @__PURE__ */
|
|
1863
|
+
return /* @__PURE__ */ U("div", {
|
|
1863
1864
|
className: "space-y-6",
|
|
1864
1865
|
children: [
|
|
1865
|
-
/* @__PURE__ */
|
|
1866
|
+
/* @__PURE__ */ U("div", {
|
|
1866
1867
|
className: "flex items-center justify-between",
|
|
1867
|
-
children: [/* @__PURE__ */
|
|
1868
|
+
children: [/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ U("p", {
|
|
1868
1869
|
className: "text-sm text-text-secondary",
|
|
1869
1870
|
children: [
|
|
1870
1871
|
n.length,
|
|
@@ -1875,7 +1876,7 @@ var Ke = [
|
|
|
1875
1876
|
" ",
|
|
1876
1877
|
e
|
|
1877
1878
|
]
|
|
1878
|
-
}), h.length > 0 && /* @__PURE__ */
|
|
1879
|
+
}), h.length > 0 && /* @__PURE__ */ U("p", {
|
|
1879
1880
|
className: "text-xs text-text-secondary mt-0.5",
|
|
1880
1881
|
children: [
|
|
1881
1882
|
h.length,
|
|
@@ -1887,44 +1888,44 @@ var Ke = [
|
|
|
1887
1888
|
" ",
|
|
1888
1889
|
m("devportal.revokedExpired", "revoked/expired")
|
|
1889
1890
|
]
|
|
1890
|
-
})] }), /* @__PURE__ */
|
|
1891
|
+
})] }), /* @__PURE__ */ U("button", {
|
|
1891
1892
|
onClick: i,
|
|
1892
1893
|
className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors",
|
|
1893
|
-
children: [/* @__PURE__ */
|
|
1894
|
+
children: [/* @__PURE__ */ H(R, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
|
|
1894
1895
|
})]
|
|
1895
1896
|
}),
|
|
1896
|
-
h.length > 0 && /* @__PURE__ */
|
|
1897
|
+
h.length > 0 && /* @__PURE__ */ H("div", {
|
|
1897
1898
|
className: "rounded-card border border-border-seam bg-bg-surface p-4",
|
|
1898
|
-
children: /* @__PURE__ */
|
|
1899
|
+
children: /* @__PURE__ */ U("div", {
|
|
1899
1900
|
className: "flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between",
|
|
1900
|
-
children: [/* @__PURE__ */
|
|
1901
|
+
children: [/* @__PURE__ */ U("div", {
|
|
1901
1902
|
className: "flex flex-wrap items-center gap-3",
|
|
1902
|
-
children: [/* @__PURE__ */
|
|
1903
|
+
children: [/* @__PURE__ */ U("div", {
|
|
1903
1904
|
className: "flex items-center gap-2",
|
|
1904
|
-
children: [/* @__PURE__ */
|
|
1905
|
+
children: [/* @__PURE__ */ H(D, {
|
|
1905
1906
|
checked: d,
|
|
1906
1907
|
indeterminate: f,
|
|
1907
1908
|
onChange: c,
|
|
1908
1909
|
ariaLabel: m("devportal.selectAllActiveDelegations", "Select all active app delegations")
|
|
1909
|
-
}), /* @__PURE__ */
|
|
1910
|
+
}), /* @__PURE__ */ H("span", {
|
|
1910
1911
|
className: "text-sm font-medium",
|
|
1911
1912
|
children: m("devportal.selectAllActive", "Select all active")
|
|
1912
1913
|
})]
|
|
1913
|
-
}), o.size > 0 && /* @__PURE__ */
|
|
1914
|
+
}), o.size > 0 && /* @__PURE__ */ H("button", {
|
|
1914
1915
|
onClick: l,
|
|
1915
1916
|
className: "text-sm text-text-secondary hover:text-text-primary",
|
|
1916
1917
|
children: m("devportal.clearSelection", "Clear selection")
|
|
1917
1918
|
})]
|
|
1918
|
-
}), /* @__PURE__ */
|
|
1919
|
+
}), /* @__PURE__ */ U("div", {
|
|
1919
1920
|
className: "flex flex-wrap items-center gap-2",
|
|
1920
|
-
children: [/* @__PURE__ */
|
|
1921
|
+
children: [/* @__PURE__ */ U("span", {
|
|
1921
1922
|
className: "rounded-full bg-bg-sunken px-3 py-1 text-sm font-medium text-text-secondary",
|
|
1922
1923
|
children: [
|
|
1923
1924
|
o.size,
|
|
1924
1925
|
" ",
|
|
1925
1926
|
m("devportal.selected", "selected")
|
|
1926
1927
|
]
|
|
1927
|
-
}), /* @__PURE__ */
|
|
1928
|
+
}), /* @__PURE__ */ U("button", {
|
|
1928
1929
|
onClick: u,
|
|
1929
1930
|
disabled: o.size === 0,
|
|
1930
1931
|
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",
|
|
@@ -1933,33 +1934,33 @@ var Ke = [
|
|
|
1933
1934
|
})]
|
|
1934
1935
|
})
|
|
1935
1936
|
}),
|
|
1936
|
-
n.length > 0 ? /* @__PURE__ */
|
|
1937
|
+
n.length > 0 ? /* @__PURE__ */ H("div", {
|
|
1937
1938
|
className: "space-y-4",
|
|
1938
|
-
children: n.map((e) => /* @__PURE__ */
|
|
1939
|
+
children: n.map((e) => /* @__PURE__ */ U("div", {
|
|
1939
1940
|
className: "rounded-card border border-border-seam bg-bg-surface p-4 space-y-4 shadow-[var(--shadow-pop)]",
|
|
1940
1941
|
children: [
|
|
1941
|
-
/* @__PURE__ */
|
|
1942
|
+
/* @__PURE__ */ U("div", {
|
|
1942
1943
|
className: "flex items-start justify-between",
|
|
1943
|
-
children: [/* @__PURE__ */
|
|
1944
|
+
children: [/* @__PURE__ */ U("div", {
|
|
1944
1945
|
className: "flex items-start gap-3",
|
|
1945
|
-
children: [e.status === "ACTIVE" && /* @__PURE__ */
|
|
1946
|
+
children: [e.status === "ACTIVE" && /* @__PURE__ */ H("div", {
|
|
1946
1947
|
onClick: (e) => e.stopPropagation(),
|
|
1947
|
-
children: /* @__PURE__ */
|
|
1948
|
+
children: /* @__PURE__ */ H(D, {
|
|
1948
1949
|
checked: o.has(e.id),
|
|
1949
1950
|
onChange: (t) => s(e.id, t),
|
|
1950
1951
|
ariaLabel: `Select delegation ${e.id}`,
|
|
1951
1952
|
className: "mt-1"
|
|
1952
1953
|
})
|
|
1953
|
-
}), /* @__PURE__ */
|
|
1954
|
+
}), /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ U("div", {
|
|
1954
1955
|
className: "flex items-center gap-2",
|
|
1955
|
-
children: [/* @__PURE__ */
|
|
1956
|
+
children: [/* @__PURE__ */ U("h3", {
|
|
1956
1957
|
className: "font-medium",
|
|
1957
1958
|
children: ["Delegation #", e.id.slice(0, 8)]
|
|
1958
|
-
}), /* @__PURE__ */
|
|
1959
|
-
className: t("rounded-full px-2 py-0.5 text-xs font-medium",
|
|
1959
|
+
}), /* @__PURE__ */ H("span", {
|
|
1960
|
+
className: t("rounded-full px-2 py-0.5 text-xs font-medium", Xe[e.status]),
|
|
1960
1961
|
children: e.status
|
|
1961
1962
|
})]
|
|
1962
|
-
}), /* @__PURE__ */
|
|
1963
|
+
}), /* @__PURE__ */ U("p", {
|
|
1963
1964
|
className: "text-sm text-text-secondary mt-1",
|
|
1964
1965
|
children: [
|
|
1965
1966
|
m("devportal.granted", "Granted"),
|
|
@@ -1971,55 +1972,55 @@ var Ke = [
|
|
|
1971
1972
|
e.grantedBy === e.userId ? m("devportal.you", "you") : e.grantedBy.slice(0, 8)
|
|
1972
1973
|
]
|
|
1973
1974
|
})] })]
|
|
1974
|
-
}), e.status === "ACTIVE" && /* @__PURE__ */
|
|
1975
|
+
}), e.status === "ACTIVE" && /* @__PURE__ */ U("button", {
|
|
1975
1976
|
onClick: () => a(e.id),
|
|
1976
1977
|
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",
|
|
1977
|
-
children: [/* @__PURE__ */
|
|
1978
|
+
children: [/* @__PURE__ */ H(Be, { size: 14 }), m("devportal.revoke", "Revoke")]
|
|
1978
1979
|
})]
|
|
1979
1980
|
}),
|
|
1980
|
-
/* @__PURE__ */
|
|
1981
|
+
/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
|
|
1981
1982
|
className: "text-xs text-text-secondary mb-2",
|
|
1982
1983
|
children: m("devportal.grantedScopes", "Granted Scopes")
|
|
1983
|
-
}), /* @__PURE__ */
|
|
1984
|
+
}), /* @__PURE__ */ H("div", {
|
|
1984
1985
|
className: "flex flex-wrap gap-2",
|
|
1985
|
-
children: e.scopes.map((e) => /* @__PURE__ */
|
|
1986
|
+
children: e.scopes.map((e) => /* @__PURE__ */ H("span", {
|
|
1986
1987
|
className: "rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-xs text-status-success-text",
|
|
1987
1988
|
children: e
|
|
1988
1989
|
}, e))
|
|
1989
1990
|
})] }),
|
|
1990
|
-
e.workspaceIds.length > 0 && /* @__PURE__ */
|
|
1991
|
+
e.workspaceIds.length > 0 && /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
|
|
1991
1992
|
className: "text-xs text-text-secondary mb-2",
|
|
1992
1993
|
children: m("devportal.workspaceScope", "Workspace Scope")
|
|
1993
|
-
}), /* @__PURE__ */
|
|
1994
|
+
}), /* @__PURE__ */ H("div", {
|
|
1994
1995
|
className: "flex flex-wrap gap-2",
|
|
1995
|
-
children: e.workspaceIds.map((e) => /* @__PURE__ */
|
|
1996
|
+
children: e.workspaceIds.map((e) => /* @__PURE__ */ H("code", {
|
|
1996
1997
|
className: "rounded bg-bg-sunken px-2 py-0.5 text-xs",
|
|
1997
1998
|
children: e
|
|
1998
1999
|
}, e))
|
|
1999
2000
|
})] }),
|
|
2000
|
-
/* @__PURE__ */
|
|
2001
|
+
/* @__PURE__ */ U("div", {
|
|
2001
2002
|
className: "flex items-center gap-4 text-xs text-text-secondary",
|
|
2002
2003
|
children: [
|
|
2003
|
-
e.expiresAt && /* @__PURE__ */
|
|
2004
|
+
e.expiresAt && /* @__PURE__ */ U("span", {
|
|
2004
2005
|
className: "flex items-center gap-1",
|
|
2005
2006
|
children: [
|
|
2006
|
-
/* @__PURE__ */
|
|
2007
|
+
/* @__PURE__ */ H(be, { size: 12 }),
|
|
2007
2008
|
m("devportal.expires", "Expires"),
|
|
2008
2009
|
" ",
|
|
2009
2010
|
new Date(e.expiresAt).toLocaleDateString()
|
|
2010
2011
|
]
|
|
2011
2012
|
}),
|
|
2012
|
-
!e.expiresAt && e.status === "ACTIVE" && /* @__PURE__ */
|
|
2013
|
+
!e.expiresAt && e.status === "ACTIVE" && /* @__PURE__ */ U("span", {
|
|
2013
2014
|
className: "flex items-center gap-1",
|
|
2014
|
-
children: [/* @__PURE__ */
|
|
2015
|
+
children: [/* @__PURE__ */ H(_e, {
|
|
2015
2016
|
size: 12,
|
|
2016
2017
|
className: "text-status-success-text"
|
|
2017
2018
|
}), m("devportal.noExpiration", "No expiration")]
|
|
2018
2019
|
}),
|
|
2019
|
-
e.revokedAt && /* @__PURE__ */
|
|
2020
|
+
e.revokedAt && /* @__PURE__ */ U("span", {
|
|
2020
2021
|
className: "flex items-center gap-1",
|
|
2021
2022
|
children: [
|
|
2022
|
-
/* @__PURE__ */
|
|
2023
|
+
/* @__PURE__ */ H(Be, {
|
|
2023
2024
|
size: 12,
|
|
2024
2025
|
className: "text-status-error-text"
|
|
2025
2026
|
}),
|
|
@@ -2032,53 +2033,53 @@ var Ke = [
|
|
|
2032
2033
|
})
|
|
2033
2034
|
]
|
|
2034
2035
|
}, e.id))
|
|
2035
|
-
}) : /* @__PURE__ */
|
|
2036
|
+
}) : /* @__PURE__ */ H(r, {
|
|
2036
2037
|
illustration: "empty-people",
|
|
2037
|
-
icon: /* @__PURE__ */
|
|
2038
|
+
icon: /* @__PURE__ */ H(B, { size: 32 }),
|
|
2038
2039
|
title: m("devportal.noDelegations", "No delegations"),
|
|
2039
2040
|
description: m("devportal.noDelegationsDescription", "Grant a delegation to allow this app to act on your behalf"),
|
|
2040
|
-
action: /* @__PURE__ */
|
|
2041
|
+
action: /* @__PURE__ */ U("button", {
|
|
2041
2042
|
onClick: i,
|
|
2042
2043
|
className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90",
|
|
2043
|
-
children: [/* @__PURE__ */
|
|
2044
|
+
children: [/* @__PURE__ */ H(R, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
|
|
2044
2045
|
})
|
|
2045
2046
|
})
|
|
2046
2047
|
]
|
|
2047
2048
|
});
|
|
2048
|
-
},
|
|
2049
|
-
let { t } =
|
|
2049
|
+
}, lt = ({ analytics: e }) => {
|
|
2050
|
+
let { t } = W(), n = (e, n) => {
|
|
2050
2051
|
let r = t(e);
|
|
2051
2052
|
return r === e ? n : r;
|
|
2052
2053
|
}, i = e[0], a = e[1], o = (e, t) => t ? (e - t) / t * 100 : 0;
|
|
2053
|
-
return /* @__PURE__ */
|
|
2054
|
+
return /* @__PURE__ */ U("div", {
|
|
2054
2055
|
className: "space-y-6",
|
|
2055
|
-
children: [/* @__PURE__ */
|
|
2056
|
+
children: [/* @__PURE__ */ U("div", {
|
|
2056
2057
|
className: "grid gap-4 sm:grid-cols-4",
|
|
2057
2058
|
children: [
|
|
2058
|
-
/* @__PURE__ */
|
|
2059
|
+
/* @__PURE__ */ H(Z, {
|
|
2059
2060
|
label: n("devportal.activeUsers", "Active Users"),
|
|
2060
2061
|
value: i?.activeUsers.toLocaleString() || "0",
|
|
2061
2062
|
trend: a ? o(i.activeUsers, a.activeUsers) : void 0
|
|
2062
2063
|
}),
|
|
2063
|
-
/* @__PURE__ */
|
|
2064
|
+
/* @__PURE__ */ H(Z, {
|
|
2064
2065
|
label: n("devportal.apiCalls", "API Calls"),
|
|
2065
2066
|
value: i ? `${(i.apiCalls / 1e3).toFixed(1)}K` : "0",
|
|
2066
2067
|
trend: a ? o(i.apiCalls, a.apiCalls) : void 0
|
|
2067
2068
|
}),
|
|
2068
|
-
/* @__PURE__ */
|
|
2069
|
+
/* @__PURE__ */ H(Z, {
|
|
2069
2070
|
label: n("devportal.avgResponseTime", "Avg Response Time"),
|
|
2070
2071
|
value: i?.avgResponseTime ? `${i.avgResponseTime}ms` : n("devportal.notAvailable", "N/A"),
|
|
2071
2072
|
trend: a && i?.avgResponseTime ? -o(i.avgResponseTime, a.avgResponseTime || 1) : void 0
|
|
2072
2073
|
}),
|
|
2073
|
-
/* @__PURE__ */
|
|
2074
|
+
/* @__PURE__ */ H(Z, {
|
|
2074
2075
|
label: n("devportal.errorRate", "Error Rate"),
|
|
2075
2076
|
value: i && i.apiCalls > 0 ? `${(i.errors / i.apiCalls * 100).toFixed(2)}%` : "0%",
|
|
2076
2077
|
trend: a && i && i.apiCalls > 0 && a.apiCalls > 0 ? -o(i.errors / i.apiCalls, a.errors / a.apiCalls) : void 0
|
|
2077
2078
|
})
|
|
2078
2079
|
]
|
|
2079
|
-
}), /* @__PURE__ */
|
|
2080
|
+
}), /* @__PURE__ */ H(S, {
|
|
2080
2081
|
title: n("devportal.dailyBreakdown", "Daily Breakdown"),
|
|
2081
|
-
children: e.length > 0 ? /* @__PURE__ */
|
|
2082
|
+
children: e.length > 0 ? /* @__PURE__ */ H(te, {
|
|
2082
2083
|
data: e,
|
|
2083
2084
|
keyField: "id",
|
|
2084
2085
|
columns: [
|
|
@@ -2118,19 +2119,19 @@ var Ke = [
|
|
|
2118
2119
|
render: (e) => e.sessions.toLocaleString()
|
|
2119
2120
|
}
|
|
2120
2121
|
]
|
|
2121
|
-
}) : /* @__PURE__ */
|
|
2122
|
+
}) : /* @__PURE__ */ H(r, {
|
|
2122
2123
|
illustration: "empty-data",
|
|
2123
|
-
icon: /* @__PURE__ */
|
|
2124
|
+
icon: /* @__PURE__ */ H(ge, { size: 32 }),
|
|
2124
2125
|
title: n("devportal.noAnalyticsData", "No analytics data"),
|
|
2125
2126
|
description: n("devportal.noAnalyticsDataDescription", "Analytics data will appear here once the application starts receiving traffic.")
|
|
2126
2127
|
})
|
|
2127
2128
|
})]
|
|
2128
2129
|
});
|
|
2129
|
-
},
|
|
2130
|
-
let { apiGatewayUrl: n, workspacesGatewayUrl: r, authToken: i } = e(), { t: a } =
|
|
2130
|
+
}, ut = "# Sample query — replace with your own\n# Note: introspection is disabled on this gateway for security.\n# Use a real query from your app's API schema instead.\nquery GetCurrentUser {\n currentUser {\n id\n email\n }\n}", dt = ({ app: t }) => {
|
|
2131
|
+
let { apiGatewayUrl: n, workspacesGatewayUrl: r, authToken: i } = e(), { t: a } = W(), o = (e, t) => {
|
|
2131
2132
|
let n = a(e);
|
|
2132
2133
|
return n === e ? t : n;
|
|
2133
|
-
}, [s, c] = N(
|
|
2134
|
+
}, [s, c] = N(ut), [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), x = A(async () => {
|
|
2134
2135
|
m(!0), f("");
|
|
2135
2136
|
try {
|
|
2136
2137
|
let e = {};
|
|
@@ -2164,21 +2165,21 @@ var Ke = [
|
|
|
2164
2165
|
]), S = A(() => {
|
|
2165
2166
|
i && v(i), b(!0);
|
|
2166
2167
|
}, [i]);
|
|
2167
|
-
return /* @__PURE__ */
|
|
2168
|
+
return /* @__PURE__ */ U("div", {
|
|
2168
2169
|
className: "space-y-4",
|
|
2169
2170
|
children: [
|
|
2170
|
-
/* @__PURE__ */
|
|
2171
|
+
/* @__PURE__ */ U("div", {
|
|
2171
2172
|
className: "flex items-center justify-between",
|
|
2172
|
-
children: [/* @__PURE__ */
|
|
2173
|
+
children: [/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("h3", {
|
|
2173
2174
|
className: "text-lg font-semibold",
|
|
2174
2175
|
children: o("devportal.apiPlayground", "API Playground")
|
|
2175
|
-
}), /* @__PURE__ */
|
|
2176
|
+
}), /* @__PURE__ */ U("p", {
|
|
2176
2177
|
className: "text-sm text-text-secondary",
|
|
2177
2178
|
children: [
|
|
2178
2179
|
o("devportal.apiPlaygroundDescription", "Test GraphQL APIs in the context of"),
|
|
2179
2180
|
" ",
|
|
2180
|
-
/* @__PURE__ */
|
|
2181
|
-
t.appId && /* @__PURE__ */
|
|
2181
|
+
/* @__PURE__ */ H("strong", { children: t.name }),
|
|
2182
|
+
t.appId && /* @__PURE__ */ U("span", {
|
|
2182
2183
|
className: "ml-1 text-xs text-text-secondary",
|
|
2183
2184
|
children: [
|
|
2184
2185
|
"(OAuth App: ",
|
|
@@ -2187,39 +2188,39 @@ var Ke = [
|
|
|
2187
2188
|
]
|
|
2188
2189
|
})
|
|
2189
2190
|
]
|
|
2190
|
-
})] }), /* @__PURE__ */
|
|
2191
|
+
})] }), /* @__PURE__ */ U("button", {
|
|
2191
2192
|
onClick: S,
|
|
2192
2193
|
className: "flex items-center gap-2 rounded-md border px-3 py-1.5 text-sm font-medium hover:bg-accent transition-colors",
|
|
2193
|
-
children: [/* @__PURE__ */
|
|
2194
|
+
children: [/* @__PURE__ */ H(Ee, { size: 14 }), o("devportal.autoFillCredentials", "Auto-fill Credentials")]
|
|
2194
2195
|
})]
|
|
2195
2196
|
}),
|
|
2196
|
-
y && /* @__PURE__ */
|
|
2197
|
+
y && /* @__PURE__ */ U("div", {
|
|
2197
2198
|
className: "rounded-lg border bg-status-info-bg-subtle p-4 text-sm space-y-2",
|
|
2198
2199
|
children: [
|
|
2199
|
-
/* @__PURE__ */
|
|
2200
|
+
/* @__PURE__ */ H("p", {
|
|
2200
2201
|
className: "font-medium text-status-info-text",
|
|
2201
2202
|
children: o("devportal.authenticationGuide", "Authentication Guide")
|
|
2202
2203
|
}),
|
|
2203
|
-
/* @__PURE__ */
|
|
2204
|
+
/* @__PURE__ */ U("p", {
|
|
2204
2205
|
className: "text-status-info-text",
|
|
2205
2206
|
children: [
|
|
2206
2207
|
o("devportal.authenticationGuideText", "Your current session token has been filled in. For app-level authentication (Client Credentials flow), use the"),
|
|
2207
2208
|
" ",
|
|
2208
|
-
/* @__PURE__ */
|
|
2209
|
+
/* @__PURE__ */ H("strong", { children: o("devportal.oauthClientsTab", "OAuth Clients") }),
|
|
2209
2210
|
" ",
|
|
2210
2211
|
o("devportal.authenticationGuideText2", "tab to get the app's clientId and clientSecret, then call:")
|
|
2211
2212
|
]
|
|
2212
2213
|
}),
|
|
2213
|
-
/* @__PURE__ */
|
|
2214
|
+
/* @__PURE__ */ H("pre", {
|
|
2214
2215
|
className: "rounded bg-status-info-bg-subtle p-2 text-xs overflow-x-auto text-status-info-text",
|
|
2215
2216
|
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}"
|
|
2216
2217
|
}),
|
|
2217
|
-
/* @__PURE__ */
|
|
2218
|
+
/* @__PURE__ */ U("p", {
|
|
2218
2219
|
className: "text-status-info-text",
|
|
2219
2220
|
children: [
|
|
2220
2221
|
o("devportal.useReturnedAccessToken", "Use the returned"),
|
|
2221
2222
|
" ",
|
|
2222
|
-
/* @__PURE__ */
|
|
2223
|
+
/* @__PURE__ */ H("code", {
|
|
2223
2224
|
className: "bg-status-info-bg-subtle px-1 rounded",
|
|
2224
2225
|
children: "accessToken"
|
|
2225
2226
|
}),
|
|
@@ -2227,256 +2228,84 @@ var Ke = [
|
|
|
2227
2228
|
o("devportal.asBearerToken", "as the Bearer token below.")
|
|
2228
2229
|
]
|
|
2229
2230
|
}),
|
|
2230
|
-
/* @__PURE__ */
|
|
2231
|
+
/* @__PURE__ */ H("button", {
|
|
2231
2232
|
onClick: () => b(!1),
|
|
2232
2233
|
className: "text-xs text-accent-blue hover:underline",
|
|
2233
2234
|
children: o("devportal.dismiss", "Dismiss")
|
|
2234
2235
|
})
|
|
2235
2236
|
]
|
|
2236
2237
|
}),
|
|
2237
|
-
/* @__PURE__ */
|
|
2238
|
+
/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("label", {
|
|
2238
2239
|
className: "block text-sm font-medium mb-1",
|
|
2239
2240
|
children: o("devportal.gatewayEndpoint", "Gateway Endpoint")
|
|
2240
|
-
}), /* @__PURE__ */
|
|
2241
|
+
}), /* @__PURE__ */ U("div", {
|
|
2241
2242
|
className: "flex gap-2",
|
|
2242
|
-
children: [/* @__PURE__ */
|
|
2243
|
+
children: [/* @__PURE__ */ H("input", {
|
|
2243
2244
|
type: "text",
|
|
2244
2245
|
value: h,
|
|
2245
2246
|
onChange: (e) => g(e.target.value),
|
|
2246
2247
|
className: "flex-1 rounded-md border px-3 py-2 text-sm font-mono bg-bg-surface"
|
|
2247
|
-
}), /* @__PURE__ */
|
|
2248
|
+
}), /* @__PURE__ */ U("select", {
|
|
2248
2249
|
onChange: (e) => g(e.target.value),
|
|
2249
2250
|
className: "rounded-md border px-3 py-2 text-sm bg-bg-surface",
|
|
2250
2251
|
value: h,
|
|
2251
|
-
children: [/* @__PURE__ */
|
|
2252
|
+
children: [/* @__PURE__ */ H("option", {
|
|
2252
2253
|
value: `${n || "https://gw-global.local.burdenoff.com"}/global/graphql`,
|
|
2253
2254
|
children: o("devportal.globalGateway", "Global Gateway")
|
|
2254
|
-
}), /* @__PURE__ */
|
|
2255
|
+
}), /* @__PURE__ */ H("option", {
|
|
2255
2256
|
value: `${r || "https://gw-wspace.local.burdenoff.com"}/workspaces/graphql`,
|
|
2256
2257
|
children: o("devportal.workspaceGateway", "Workspace Gateway")
|
|
2257
2258
|
})]
|
|
2258
2259
|
})]
|
|
2259
2260
|
})] }),
|
|
2260
|
-
/* @__PURE__ */
|
|
2261
|
+
/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("label", {
|
|
2261
2262
|
className: "block text-sm font-medium mb-1",
|
|
2262
2263
|
children: o("devportal.bearerToken", "Bearer Token")
|
|
2263
|
-
}), /* @__PURE__ */
|
|
2264
|
+
}), /* @__PURE__ */ H("input", {
|
|
2264
2265
|
type: "password",
|
|
2265
2266
|
value: _,
|
|
2266
2267
|
onChange: (e) => v(e.target.value),
|
|
2267
2268
|
placeholder: o("devportal.pasteAccessToken", "Paste access token here..."),
|
|
2268
2269
|
className: "w-full rounded-md border px-3 py-2 text-sm font-mono bg-bg-surface"
|
|
2269
2270
|
})] }),
|
|
2270
|
-
/* @__PURE__ */
|
|
2271
|
+
/* @__PURE__ */ U("div", {
|
|
2271
2272
|
className: "grid grid-cols-1 lg:grid-cols-2 gap-4",
|
|
2272
|
-
children: [/* @__PURE__ */
|
|
2273
|
+
children: [/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("label", {
|
|
2273
2274
|
className: "block text-sm font-medium mb-1",
|
|
2274
2275
|
children: o("devportal.query", "Query")
|
|
2275
|
-
}), /* @__PURE__ */
|
|
2276
|
+
}), /* @__PURE__ */ H("textarea", {
|
|
2276
2277
|
value: s,
|
|
2277
2278
|
onChange: (e) => c(e.target.value),
|
|
2278
2279
|
className: "w-full h-64 rounded-md border px-3 py-2 text-sm font-mono bg-bg-surface resize-y",
|
|
2279
2280
|
spellCheck: !1
|
|
2280
|
-
})] }), /* @__PURE__ */
|
|
2281
|
+
})] }), /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("label", {
|
|
2281
2282
|
className: "block text-sm font-medium mb-1",
|
|
2282
2283
|
children: o("devportal.variablesJson", "Variables (JSON)")
|
|
2283
|
-
}), /* @__PURE__ */
|
|
2284
|
+
}), /* @__PURE__ */ H("textarea", {
|
|
2284
2285
|
value: l,
|
|
2285
2286
|
onChange: (e) => u(e.target.value),
|
|
2286
2287
|
className: "w-full h-64 rounded-md border px-3 py-2 text-sm font-mono bg-bg-surface resize-y",
|
|
2287
2288
|
spellCheck: !1
|
|
2288
2289
|
})] })]
|
|
2289
2290
|
}),
|
|
2290
|
-
/* @__PURE__ */
|
|
2291
|
+
/* @__PURE__ */ U("button", {
|
|
2291
2292
|
onClick: x,
|
|
2292
2293
|
disabled: p,
|
|
2293
2294
|
className: "flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors disabled:opacity-50",
|
|
2294
|
-
children: [p ? /* @__PURE__ */
|
|
2295
|
+
children: [p ? /* @__PURE__ */ H(L, {
|
|
2295
2296
|
size: 16,
|
|
2296
2297
|
className: "animate-spin"
|
|
2297
|
-
}) : /* @__PURE__ */
|
|
2298
|
+
}) : /* @__PURE__ */ H(I, { size: 16 }), p ? o("devportal.executing", "Executing...") : o("devportal.executeQuery", "Execute Query")]
|
|
2298
2299
|
}),
|
|
2299
|
-
d && /* @__PURE__ */
|
|
2300
|
+
d && /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("label", {
|
|
2300
2301
|
className: "block text-sm font-medium mb-1",
|
|
2301
2302
|
children: o("devportal.response", "Response")
|
|
2302
|
-
}), /* @__PURE__ */
|
|
2303
|
+
}), /* @__PURE__ */ H("pre", {
|
|
2303
2304
|
className: "w-full max-h-96 overflow-auto rounded-md border bg-bg-sunken p-4 text-xs font-mono",
|
|
2304
2305
|
children: d
|
|
2305
2306
|
})] })
|
|
2306
2307
|
]
|
|
2307
2308
|
});
|
|
2308
|
-
}, ut = ({ 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 }) => {
|
|
2309
|
-
let d = M(null), [f, p] = N(!1), m = M(n);
|
|
2310
|
-
m.current !== n && (m.current = n, f && p(!1));
|
|
2311
|
-
let h = A(async (e) => {
|
|
2312
|
-
try {
|
|
2313
|
-
r((await s(e)).downloadUrl);
|
|
2314
|
-
} catch {}
|
|
2315
|
-
}, [s, r]);
|
|
2316
|
-
return /* @__PURE__ */ W("div", {
|
|
2317
|
-
className: "space-y-1.5",
|
|
2318
|
-
children: [
|
|
2319
|
-
/* @__PURE__ */ U("label", {
|
|
2320
|
-
className: "text-sm font-medium",
|
|
2321
|
-
children: e
|
|
2322
|
-
}),
|
|
2323
|
-
/* @__PURE__ */ W("div", {
|
|
2324
|
-
className: "flex gap-3 items-start",
|
|
2325
|
-
children: [/* @__PURE__ */ W("div", {
|
|
2326
|
-
className: t("relative shrink-0 w-20 rounded-lg border border-border-subtle bg-bg-sunken overflow-hidden flex items-center justify-center", o),
|
|
2327
|
-
children: [n && !f ? /* @__PURE__ */ U("img", {
|
|
2328
|
-
src: n,
|
|
2329
|
-
alt: e,
|
|
2330
|
-
className: "w-full h-full object-cover",
|
|
2331
|
-
onError: () => p(!0)
|
|
2332
|
-
}) : /* @__PURE__ */ U(B, {
|
|
2333
|
-
size: 18,
|
|
2334
|
-
className: "text-text-secondary opacity-40"
|
|
2335
|
-
}), c && /* @__PURE__ */ W("div", {
|
|
2336
|
-
className: "absolute inset-0 bg-bg-overlay flex flex-col items-center justify-center gap-1",
|
|
2337
|
-
children: [/* @__PURE__ */ U(R, {
|
|
2338
|
-
size: 14,
|
|
2339
|
-
className: "animate-spin text-white"
|
|
2340
|
-
}), /* @__PURE__ */ W("span", {
|
|
2341
|
-
className: "text-white text-xs",
|
|
2342
|
-
children: [l, "%"]
|
|
2343
|
-
})]
|
|
2344
|
-
})]
|
|
2345
|
-
}), /* @__PURE__ */ W("div", {
|
|
2346
|
-
className: "flex-1 space-y-1.5",
|
|
2347
|
-
children: [
|
|
2348
|
-
/* @__PURE__ */ U("input", {
|
|
2349
|
-
type: "url",
|
|
2350
|
-
value: n,
|
|
2351
|
-
onChange: (e) => r(e.target.value),
|
|
2352
|
-
placeholder: "https://...",
|
|
2353
|
-
className: "w-full rounded-md border border-border-subtle bg-bg-input px-3 py-1.5 text-sm placeholder:text-text-placeholder focus:outline-none focus:ring-2 focus:ring-primary/30"
|
|
2354
|
-
}),
|
|
2355
|
-
/* @__PURE__ */ U("input", {
|
|
2356
|
-
ref: d,
|
|
2357
|
-
type: "file",
|
|
2358
|
-
accept: a,
|
|
2359
|
-
className: "hidden",
|
|
2360
|
-
onChange: (e) => {
|
|
2361
|
-
let t = e.target.files?.[0];
|
|
2362
|
-
t && h(t), e.target.value = "";
|
|
2363
|
-
}
|
|
2364
|
-
}),
|
|
2365
|
-
/* @__PURE__ */ W("button", {
|
|
2366
|
-
type: "button",
|
|
2367
|
-
disabled: c,
|
|
2368
|
-
onClick: () => d.current?.click(),
|
|
2369
|
-
className: "inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs font-medium hover:bg-bg-sunken transition-colors disabled:opacity-50",
|
|
2370
|
-
children: [/* @__PURE__ */ U(B, { size: 11 }), c ? `Uploading… ${l}%` : "Upload image"]
|
|
2371
|
-
}),
|
|
2372
|
-
u && /* @__PURE__ */ U("p", {
|
|
2373
|
-
className: "text-xs text-status-error-text",
|
|
2374
|
-
children: u
|
|
2375
|
-
})
|
|
2376
|
-
]
|
|
2377
|
-
})]
|
|
2378
|
-
}),
|
|
2379
|
-
i && /* @__PURE__ */ U("p", {
|
|
2380
|
-
className: "text-xs text-text-secondary",
|
|
2381
|
-
children: i
|
|
2382
|
-
})
|
|
2383
|
-
]
|
|
2384
|
-
});
|
|
2385
|
-
}, dt = ({ urls: e, onChange: n, upload: r, uploading: i, progress: a, error: o }) => {
|
|
2386
|
-
let s = M(null), [c, l] = N(""), u = A(async (t) => {
|
|
2387
|
-
try {
|
|
2388
|
-
let i = await r(t);
|
|
2389
|
-
n([...e, i.downloadUrl]);
|
|
2390
|
-
} catch {}
|
|
2391
|
-
}, [
|
|
2392
|
-
r,
|
|
2393
|
-
n,
|
|
2394
|
-
e
|
|
2395
|
-
]), d = () => {
|
|
2396
|
-
let t = c.trim();
|
|
2397
|
-
t && !e.includes(t) && (n([...e, t]), l(""));
|
|
2398
|
-
}, f = (t) => {
|
|
2399
|
-
n(e.filter((e, n) => n !== t));
|
|
2400
|
-
};
|
|
2401
|
-
return /* @__PURE__ */ W("div", {
|
|
2402
|
-
className: "space-y-2",
|
|
2403
|
-
children: [
|
|
2404
|
-
/* @__PURE__ */ W("div", {
|
|
2405
|
-
className: "flex flex-col gap-0.5",
|
|
2406
|
-
children: [/* @__PURE__ */ U("label", {
|
|
2407
|
-
className: "text-sm font-medium",
|
|
2408
|
-
children: "Screenshots"
|
|
2409
|
-
}), /* @__PURE__ */ U("p", {
|
|
2410
|
-
className: "text-xs text-text-muted",
|
|
2411
|
-
children: "Shown in the horizontal preview strip below the hero — wide landscape proportions work best (16:9)"
|
|
2412
|
-
})]
|
|
2413
|
-
}),
|
|
2414
|
-
/* @__PURE__ */ W("div", {
|
|
2415
|
-
className: "flex flex-wrap gap-3",
|
|
2416
|
-
children: [e.map((e, t) => /* @__PURE__ */ W("div", {
|
|
2417
|
-
className: "relative group w-36 aspect-video rounded-lg border border-border-subtle overflow-hidden bg-bg-sunken",
|
|
2418
|
-
children: [/* @__PURE__ */ U("img", {
|
|
2419
|
-
src: e,
|
|
2420
|
-
alt: `Screenshot ${t + 1}`,
|
|
2421
|
-
className: "w-full h-full object-cover"
|
|
2422
|
-
}), /* @__PURE__ */ U("button", {
|
|
2423
|
-
type: "button",
|
|
2424
|
-
onClick: () => f(t),
|
|
2425
|
-
className: "absolute top-1 right-1 rounded-full bg-bg-overlay text-white p-0.5 opacity-0 group-hover:opacity-100 transition-opacity",
|
|
2426
|
-
children: /* @__PURE__ */ U(Ie, { size: 12 })
|
|
2427
|
-
})]
|
|
2428
|
-
}, t)), /* @__PURE__ */ U("button", {
|
|
2429
|
-
type: "button",
|
|
2430
|
-
disabled: i,
|
|
2431
|
-
onClick: () => s.current?.click(),
|
|
2432
|
-
className: t("w-36 aspect-video rounded-lg border-2 border-dashed border-border-subtle 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"),
|
|
2433
|
-
children: i ? /* @__PURE__ */ W(H, { children: [/* @__PURE__ */ U(R, {
|
|
2434
|
-
size: 18,
|
|
2435
|
-
className: "animate-spin text-primary"
|
|
2436
|
-
}), /* @__PURE__ */ W("span", {
|
|
2437
|
-
className: "text-xs",
|
|
2438
|
-
children: [a, "%"]
|
|
2439
|
-
})] }) : /* @__PURE__ */ W(H, { children: [/* @__PURE__ */ U(B, { size: 18 }), /* @__PURE__ */ U("span", {
|
|
2440
|
-
className: "text-xs",
|
|
2441
|
-
children: "Add screenshot"
|
|
2442
|
-
})] })
|
|
2443
|
-
})]
|
|
2444
|
-
}),
|
|
2445
|
-
/* @__PURE__ */ W("div", {
|
|
2446
|
-
className: "flex gap-2",
|
|
2447
|
-
children: [/* @__PURE__ */ U("input", {
|
|
2448
|
-
type: "url",
|
|
2449
|
-
value: c,
|
|
2450
|
-
onChange: (e) => l(e.target.value),
|
|
2451
|
-
onKeyDown: (e) => {
|
|
2452
|
-
e.key === "Enter" && (e.preventDefault(), d());
|
|
2453
|
-
},
|
|
2454
|
-
placeholder: "https://... paste a screenshot URL",
|
|
2455
|
-
className: "flex-1 rounded-md border border-border-subtle bg-bg-input px-3 py-1.5 text-sm placeholder:text-text-placeholder focus:outline-none focus:ring-2 focus:ring-primary/30"
|
|
2456
|
-
}), /* @__PURE__ */ U("button", {
|
|
2457
|
-
type: "button",
|
|
2458
|
-
onClick: d,
|
|
2459
|
-
disabled: !c.trim(),
|
|
2460
|
-
className: "inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1.5 text-xs font-medium hover:bg-bg-sunken transition-colors disabled:opacity-50",
|
|
2461
|
-
children: "Add"
|
|
2462
|
-
})]
|
|
2463
|
-
}),
|
|
2464
|
-
/* @__PURE__ */ U("input", {
|
|
2465
|
-
ref: s,
|
|
2466
|
-
type: "file",
|
|
2467
|
-
accept: "image/png,image/jpeg,image/webp,image/gif",
|
|
2468
|
-
className: "hidden",
|
|
2469
|
-
onChange: (e) => {
|
|
2470
|
-
let t = e.target.files?.[0];
|
|
2471
|
-
t && u(t), e.target.value = "";
|
|
2472
|
-
}
|
|
2473
|
-
}),
|
|
2474
|
-
o && /* @__PURE__ */ U("p", {
|
|
2475
|
-
className: "text-xs text-status-error-text",
|
|
2476
|
-
children: o
|
|
2477
|
-
})
|
|
2478
|
-
]
|
|
2479
|
-
});
|
|
2480
2309
|
}, Y = new Set(["workflow", "template"]), ft = [{
|
|
2481
2310
|
value: "FREE",
|
|
2482
2311
|
label: "Free"
|
|
@@ -2587,13 +2416,13 @@ function mt(e) {
|
|
|
2587
2416
|
};
|
|
2588
2417
|
}
|
|
2589
2418
|
var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i = !1, onNavigateToVersions: a, onNavigateToPricing: o, onNavigateToSubmission: s }) => {
|
|
2590
|
-
let { workspacesGatewayUrl: c, authToken: l, workspaceId: u, getWorkspaceToken: d } = e(), { t: f } =
|
|
2419
|
+
let { workspacesGatewayUrl: c, authToken: l, workspaceId: u, getWorkspaceToken: d } = e(), { t: f } = W(), p = (e, t) => {
|
|
2591
2420
|
let n = f(e);
|
|
2592
2421
|
return n === e ? t : n;
|
|
2593
|
-
}, [m, h] = N(() => mt(t)), [g, _] = N(!1), [v, y] = N(null), x =
|
|
2422
|
+
}, [m, h] = N(() => mt(t)), [g, _] = N(!1), [v, y] = N(null), x = pe(mt(t)), C = pe(t);
|
|
2594
2423
|
C.current = t;
|
|
2595
2424
|
let w = JSON.stringify(m) !== JSON.stringify(x.current), [T] = b();
|
|
2596
|
-
|
|
2425
|
+
j(() => {
|
|
2597
2426
|
let e = mt(C.current);
|
|
2598
2427
|
h(e), x.current = e, y(null);
|
|
2599
2428
|
}, [t.id]);
|
|
@@ -2642,21 +2471,21 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2642
2471
|
} finally {
|
|
2643
2472
|
_(!1);
|
|
2644
2473
|
}
|
|
2645
|
-
}, { upload: te, uploading: ne, progress: ae, error: oe } =
|
|
2646
|
-
return /* @__PURE__ */
|
|
2474
|
+
}, { upload: te, uploading: ne, progress: ae, error: oe } = fe(c, l, u, d, "/DevPortal/Assets"), { upload: ce, uploading: le, progress: A, error: M } = fe(c, l, u, d, "/DevPortal/Assets"), { upload: me, uploading: he, progress: ge, error: ye } = fe(c, l, u, d, "/DevPortal/Assets"), xe = Y.has(m.manifestItemType), Se = t.status === "SUBMITTED";
|
|
2475
|
+
return /* @__PURE__ */ U("div", {
|
|
2647
2476
|
className: "space-y-8 max-w-3xl",
|
|
2648
2477
|
children: [
|
|
2649
|
-
t.status === "PUBLISHED" ? /* @__PURE__ */
|
|
2478
|
+
t.status === "PUBLISHED" ? /* @__PURE__ */ U("div", {
|
|
2650
2479
|
className: "flex items-start gap-3 rounded-lg border border-success/30 bg-success/10 px-4 py-3",
|
|
2651
|
-
children: [/* @__PURE__ */
|
|
2480
|
+
children: [/* @__PURE__ */ H(_e, {
|
|
2652
2481
|
size: 16,
|
|
2653
2482
|
className: "text-success mt-0.5 shrink-0"
|
|
2654
|
-
}), /* @__PURE__ */
|
|
2483
|
+
}), /* @__PURE__ */ U("div", {
|
|
2655
2484
|
className: "text-sm",
|
|
2656
|
-
children: [/* @__PURE__ */
|
|
2485
|
+
children: [/* @__PURE__ */ H("span", {
|
|
2657
2486
|
className: "font-medium text-success",
|
|
2658
2487
|
children: p("devportal.storeListing.published", "Published")
|
|
2659
|
-
}), t.publishedAt && /* @__PURE__ */
|
|
2488
|
+
}), t.publishedAt && /* @__PURE__ */ U("span", {
|
|
2660
2489
|
className: "text-text-secondary ml-2",
|
|
2661
2490
|
children: [
|
|
2662
2491
|
p("devportal.storeListing.since", "since"),
|
|
@@ -2665,59 +2494,59 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2665
2494
|
]
|
|
2666
2495
|
})]
|
|
2667
2496
|
})]
|
|
2668
|
-
}) :
|
|
2497
|
+
}) : Se ? /* @__PURE__ */ U("div", {
|
|
2669
2498
|
className: "flex items-center justify-between gap-3 rounded-lg border border-primary/30 bg-action-primary-bg/5 px-4 py-3",
|
|
2670
|
-
children: [/* @__PURE__ */
|
|
2499
|
+
children: [/* @__PURE__ */ U("div", {
|
|
2671
2500
|
className: "flex items-start gap-3",
|
|
2672
|
-
children: [/* @__PURE__ */
|
|
2501
|
+
children: [/* @__PURE__ */ H(be, {
|
|
2673
2502
|
size: 16,
|
|
2674
2503
|
className: "text-primary mt-0.5 shrink-0"
|
|
2675
|
-
}), /* @__PURE__ */
|
|
2504
|
+
}), /* @__PURE__ */ U("div", {
|
|
2676
2505
|
className: "text-sm",
|
|
2677
2506
|
children: [
|
|
2678
|
-
/* @__PURE__ */
|
|
2507
|
+
/* @__PURE__ */ H("span", {
|
|
2679
2508
|
className: "font-medium text-primary",
|
|
2680
2509
|
children: p("devportal.storeListing.underReview", "Submitted for review")
|
|
2681
2510
|
}),
|
|
2682
|
-
t.submittedAt && /* @__PURE__ */
|
|
2511
|
+
t.submittedAt && /* @__PURE__ */ H("span", {
|
|
2683
2512
|
className: "text-text-secondary ml-2",
|
|
2684
2513
|
children: new Date(t.submittedAt).toLocaleDateString()
|
|
2685
2514
|
}),
|
|
2686
|
-
t.reviewStatus && /* @__PURE__ */
|
|
2515
|
+
t.reviewStatus && /* @__PURE__ */ U("span", {
|
|
2687
2516
|
className: "text-text-secondary ml-2",
|
|
2688
2517
|
children: ["· ", t.reviewStatus]
|
|
2689
2518
|
})
|
|
2690
2519
|
]
|
|
2691
2520
|
})]
|
|
2692
|
-
}), s && /* @__PURE__ */
|
|
2521
|
+
}), s && /* @__PURE__ */ U("button", {
|
|
2693
2522
|
type: "button",
|
|
2694
2523
|
onClick: s,
|
|
2695
2524
|
className: "shrink-0 text-xs text-primary hover:underline font-medium flex items-center gap-1",
|
|
2696
|
-
children: [p("devportal.viewStatus", "View Status"), /* @__PURE__ */
|
|
2525
|
+
children: [p("devportal.viewStatus", "View Status"), /* @__PURE__ */ H(I, { size: 12 })]
|
|
2697
2526
|
})]
|
|
2698
|
-
}) : /* @__PURE__ */
|
|
2527
|
+
}) : /* @__PURE__ */ U("div", {
|
|
2699
2528
|
className: "flex items-start gap-3 rounded-lg border border-warning/30 bg-warning/5 px-4 py-3",
|
|
2700
|
-
children: [/* @__PURE__ */
|
|
2529
|
+
children: [/* @__PURE__ */ H(P, {
|
|
2701
2530
|
size: 16,
|
|
2702
2531
|
className: "text-warning mt-0.5 shrink-0"
|
|
2703
|
-
}), /* @__PURE__ */
|
|
2532
|
+
}), /* @__PURE__ */ U("div", {
|
|
2704
2533
|
className: "text-sm",
|
|
2705
|
-
children: [/* @__PURE__ */
|
|
2534
|
+
children: [/* @__PURE__ */ H("span", {
|
|
2706
2535
|
className: "font-medium text-warning",
|
|
2707
2536
|
children: p("devportal.storeListing.draft", "Draft")
|
|
2708
|
-
}), /* @__PURE__ */
|
|
2537
|
+
}), /* @__PURE__ */ H("span", {
|
|
2709
2538
|
className: "text-text-secondary ml-2",
|
|
2710
2539
|
children: p("devportal.storeListing.draftHint", "Complete your store listing and submit for review to publish.")
|
|
2711
2540
|
})]
|
|
2712
2541
|
})]
|
|
2713
2542
|
}),
|
|
2714
|
-
/* @__PURE__ */
|
|
2543
|
+
/* @__PURE__ */ H(S, {
|
|
2715
2544
|
title: p("devportal.package", "Package"),
|
|
2716
2545
|
description: p("devportal.packageDescription", "Technical configuration — how FluidGrid installs and runs this item"),
|
|
2717
|
-
children: /* @__PURE__ */
|
|
2546
|
+
children: /* @__PURE__ */ U("div", {
|
|
2718
2547
|
className: "space-y-6",
|
|
2719
2548
|
children: [
|
|
2720
|
-
/* @__PURE__ */
|
|
2549
|
+
/* @__PURE__ */ H(re, {
|
|
2721
2550
|
label: p("devportal.storeItemType", "Item Type"),
|
|
2722
2551
|
value: m.manifestItemType,
|
|
2723
2552
|
onChange: (e) => {
|
|
@@ -2728,13 +2557,13 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2728
2557
|
placeholder: p("devportal.selectItemType", "Select item type…"),
|
|
2729
2558
|
hint: p("devportal.storeItemTypeHint", "Sub-category shown in the marketplace (e.g. Node vs Agent vs Parser)")
|
|
2730
2559
|
}),
|
|
2731
|
-
/* @__PURE__ */
|
|
2560
|
+
/* @__PURE__ */ H(k, {
|
|
2732
2561
|
label: p("devportal.manifestDisplayName", "Display Name"),
|
|
2733
2562
|
value: m.manifestDisplayName,
|
|
2734
2563
|
onChange: (e) => E("manifestDisplayName", e.target.value),
|
|
2735
2564
|
placeholder: "My Awesome Node"
|
|
2736
2565
|
}),
|
|
2737
|
-
|
|
2566
|
+
xe && /* @__PURE__ */ H(ie, {
|
|
2738
2567
|
label: t.appType === "WORKFLOW" ? p("devportal.workflowJsonContent", "Workflow Canvas Definition (JSON)") : p("devportal.jsonContent", "Template Definition (JSON)"),
|
|
2739
2568
|
value: m.manifestJsonContent,
|
|
2740
2569
|
onChange: (e) => E("manifestJsonContent", e.target.value),
|
|
@@ -2745,15 +2574,15 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2745
2574
|
]
|
|
2746
2575
|
})
|
|
2747
2576
|
}),
|
|
2748
|
-
/* @__PURE__ */
|
|
2577
|
+
/* @__PURE__ */ H(S, {
|
|
2749
2578
|
title: p("devportal.storePresentation", "Store Presence"),
|
|
2750
2579
|
description: p("devportal.storePresentationDescription", "Visual assets and copy shown to users browsing the marketplace"),
|
|
2751
|
-
children: /* @__PURE__ */
|
|
2580
|
+
children: /* @__PURE__ */ U("div", {
|
|
2752
2581
|
className: "space-y-5",
|
|
2753
2582
|
children: [
|
|
2754
|
-
/* @__PURE__ */
|
|
2583
|
+
/* @__PURE__ */ U("div", {
|
|
2755
2584
|
className: "grid gap-5 sm:grid-cols-2",
|
|
2756
|
-
children: [/* @__PURE__ */
|
|
2585
|
+
children: [/* @__PURE__ */ H(ue, {
|
|
2757
2586
|
label: p("devportal.iconUrl", "Icon"),
|
|
2758
2587
|
value: m.iconUrl,
|
|
2759
2588
|
onChange: (e) => E("iconUrl", e),
|
|
@@ -2763,7 +2592,7 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2763
2592
|
uploading: ne,
|
|
2764
2593
|
progress: ae,
|
|
2765
2594
|
error: oe
|
|
2766
|
-
}), /* @__PURE__ */
|
|
2595
|
+
}), /* @__PURE__ */ H(ue, {
|
|
2767
2596
|
label: p("devportal.bannerUrl", "Banner"),
|
|
2768
2597
|
value: m.bannerUrl,
|
|
2769
2598
|
onChange: (e) => E("bannerUrl", e),
|
|
@@ -2772,17 +2601,17 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2772
2601
|
upload: ce,
|
|
2773
2602
|
uploading: le,
|
|
2774
2603
|
progress: A,
|
|
2775
|
-
error:
|
|
2604
|
+
error: M
|
|
2776
2605
|
})]
|
|
2777
2606
|
}),
|
|
2778
|
-
/* @__PURE__ */
|
|
2607
|
+
/* @__PURE__ */ H(k, {
|
|
2779
2608
|
label: p("devportal.videoUrl", "Demo Video URL"),
|
|
2780
2609
|
value: m.videoUrl,
|
|
2781
2610
|
onChange: (e) => E("videoUrl", e.target.value),
|
|
2782
2611
|
placeholder: "https://...",
|
|
2783
2612
|
hint: p("devportal.videoUrlHint", "YouTube or Vimeo embed URL")
|
|
2784
2613
|
}),
|
|
2785
|
-
/* @__PURE__ */
|
|
2614
|
+
/* @__PURE__ */ H(se, {
|
|
2786
2615
|
label: p("devportal.shortDescription", "Short Description"),
|
|
2787
2616
|
value: m.shortDescription,
|
|
2788
2617
|
onChange: (e) => E("shortDescription", e),
|
|
@@ -2790,62 +2619,62 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2790
2619
|
rows: 2,
|
|
2791
2620
|
hint: `${m.shortDescription.length}/200 · ${p("devportal.shortDescHint", "Shown in search results and cards")}`
|
|
2792
2621
|
}),
|
|
2793
|
-
/* @__PURE__ */
|
|
2622
|
+
/* @__PURE__ */ H(se, {
|
|
2794
2623
|
label: p("devportal.longDescription", "Full Description"),
|
|
2795
2624
|
value: m.description,
|
|
2796
2625
|
onChange: (e) => E("description", e),
|
|
2797
2626
|
rows: 5,
|
|
2798
2627
|
hint: p("devportal.fullDescHint", "Markdown supported")
|
|
2799
2628
|
}),
|
|
2800
|
-
/* @__PURE__ */
|
|
2629
|
+
/* @__PURE__ */ H(de, {
|
|
2801
2630
|
urls: m.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean),
|
|
2802
2631
|
onChange: (e) => E("screenshotsText", e.join("\n")),
|
|
2803
|
-
upload:
|
|
2804
|
-
uploading:
|
|
2805
|
-
progress:
|
|
2806
|
-
error:
|
|
2632
|
+
upload: me,
|
|
2633
|
+
uploading: he,
|
|
2634
|
+
progress: ge,
|
|
2635
|
+
error: ye
|
|
2807
2636
|
})
|
|
2808
2637
|
]
|
|
2809
2638
|
})
|
|
2810
2639
|
}),
|
|
2811
|
-
/* @__PURE__ */
|
|
2640
|
+
/* @__PURE__ */ H(S, {
|
|
2812
2641
|
title: p("devportal.linksPolicies", "Links & Policies"),
|
|
2813
2642
|
description: p("devportal.linksPoliciesDescription", "External resources and legal documents — privacy policy and terms are required for store submission"),
|
|
2814
|
-
children: /* @__PURE__ */
|
|
2643
|
+
children: /* @__PURE__ */ U("div", {
|
|
2815
2644
|
className: "grid gap-4 sm:grid-cols-2",
|
|
2816
2645
|
children: [
|
|
2817
|
-
/* @__PURE__ */
|
|
2646
|
+
/* @__PURE__ */ H(k, {
|
|
2818
2647
|
label: p("devportal.websiteUrl", "Website"),
|
|
2819
2648
|
value: m.websiteUrl,
|
|
2820
2649
|
onChange: (e) => E("websiteUrl", e.target.value),
|
|
2821
2650
|
placeholder: "https://..."
|
|
2822
2651
|
}),
|
|
2823
|
-
/* @__PURE__ */
|
|
2652
|
+
/* @__PURE__ */ H(k, {
|
|
2824
2653
|
label: p("devportal.documentationUrl", "Documentation"),
|
|
2825
2654
|
value: m.documentationUrl,
|
|
2826
2655
|
onChange: (e) => E("documentationUrl", e.target.value),
|
|
2827
2656
|
placeholder: "https://..."
|
|
2828
2657
|
}),
|
|
2829
|
-
/* @__PURE__ */
|
|
2658
|
+
/* @__PURE__ */ H(k, {
|
|
2830
2659
|
label: p("devportal.githubUrl", "GitHub"),
|
|
2831
2660
|
value: m.githubUrl,
|
|
2832
2661
|
onChange: (e) => E("githubUrl", e.target.value),
|
|
2833
2662
|
placeholder: "https://github.com/..."
|
|
2834
2663
|
}),
|
|
2835
|
-
/* @__PURE__ */
|
|
2664
|
+
/* @__PURE__ */ H(k, {
|
|
2836
2665
|
label: p("devportal.supportUrl", "Support"),
|
|
2837
2666
|
value: m.supportUrl,
|
|
2838
2667
|
onChange: (e) => E("supportUrl", e.target.value),
|
|
2839
2668
|
placeholder: "https://..."
|
|
2840
2669
|
}),
|
|
2841
|
-
/* @__PURE__ */
|
|
2670
|
+
/* @__PURE__ */ H(k, {
|
|
2842
2671
|
label: `${p("devportal.privacyPolicyUrl", "Privacy Policy")} *`,
|
|
2843
2672
|
value: m.privacyPolicyUrl,
|
|
2844
2673
|
onChange: (e) => E("privacyPolicyUrl", e.target.value),
|
|
2845
2674
|
placeholder: "https://...",
|
|
2846
2675
|
hint: p("devportal.requiredForStore", "Required for store submission")
|
|
2847
2676
|
}),
|
|
2848
|
-
/* @__PURE__ */
|
|
2677
|
+
/* @__PURE__ */ H(k, {
|
|
2849
2678
|
label: `${p("devportal.termsOfServiceUrl", "Terms of Service")} *`,
|
|
2850
2679
|
value: m.termsOfServiceUrl,
|
|
2851
2680
|
onChange: (e) => E("termsOfServiceUrl", e.target.value),
|
|
@@ -2855,52 +2684,52 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2855
2684
|
]
|
|
2856
2685
|
})
|
|
2857
2686
|
}),
|
|
2858
|
-
/* @__PURE__ */
|
|
2687
|
+
/* @__PURE__ */ U("div", {
|
|
2859
2688
|
className: "border-t pt-6 space-y-3",
|
|
2860
2689
|
children: [
|
|
2861
|
-
v === "success" && /* @__PURE__ */
|
|
2690
|
+
v === "success" && /* @__PURE__ */ U("div", {
|
|
2862
2691
|
className: "flex items-center gap-2 rounded-md border border-success/30 bg-success/10 px-3 py-2 text-sm text-success",
|
|
2863
|
-
children: [/* @__PURE__ */
|
|
2692
|
+
children: [/* @__PURE__ */ H(_e, {
|
|
2864
2693
|
size: 15,
|
|
2865
2694
|
className: "shrink-0"
|
|
2866
2695
|
}), p("devportal.storeListing.savedSuccess", "Store listing saved successfully.")]
|
|
2867
2696
|
}),
|
|
2868
|
-
v === "error" && /* @__PURE__ */
|
|
2697
|
+
v === "error" && /* @__PURE__ */ U("div", {
|
|
2869
2698
|
className: "flex items-center gap-2 rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive",
|
|
2870
|
-
children: [/* @__PURE__ */
|
|
2699
|
+
children: [/* @__PURE__ */ H(P, {
|
|
2871
2700
|
size: 15,
|
|
2872
2701
|
className: "shrink-0"
|
|
2873
2702
|
}), p("devportal.storeListing.savedError", "Failed to save. Please try again.")]
|
|
2874
2703
|
}),
|
|
2875
|
-
/* @__PURE__ */
|
|
2704
|
+
/* @__PURE__ */ U("div", {
|
|
2876
2705
|
className: "flex flex-wrap items-center gap-3",
|
|
2877
2706
|
children: [
|
|
2878
|
-
/* @__PURE__ */
|
|
2707
|
+
/* @__PURE__ */ H("button", {
|
|
2879
2708
|
type: "button",
|
|
2880
2709
|
onClick: ee,
|
|
2881
2710
|
disabled: g || !D || !w,
|
|
2882
2711
|
title: D ? w ? void 0 : p("devportal.storeListing.noChanges", "All changes saved — edit any field to save again") : p("devportal.storeListing.requiredFieldsHint", "Fill in Short Description, Privacy Policy URL, and Terms of Service URL to save"),
|
|
2883
2712
|
className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
|
|
2884
|
-
children: g ? /* @__PURE__ */
|
|
2713
|
+
children: g ? /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(L, {
|
|
2885
2714
|
size: 16,
|
|
2886
2715
|
className: "animate-spin"
|
|
2887
|
-
}), p("devportal.saving", "Saving…")] }) : w ? /* @__PURE__ */
|
|
2716
|
+
}), p("devportal.saving", "Saving…")] }) : w ? /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(Pe, { size: 16 }), p("devportal.saveStoreListing", "Save Store Listing")] }) : /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(F, { size: 16 }), p("devportal.saved", "Saved")] })
|
|
2888
2717
|
}),
|
|
2889
|
-
!D && /* @__PURE__ */
|
|
2718
|
+
!D && /* @__PURE__ */ H("p", {
|
|
2890
2719
|
className: "text-xs text-text-secondary",
|
|
2891
2720
|
children: p("devportal.storeListing.requiredFieldsLabel", "Short Description, Privacy Policy URL, and Terms of Service URL are required")
|
|
2892
2721
|
}),
|
|
2893
|
-
r && n === 0 && a && /* @__PURE__ */
|
|
2722
|
+
r && n === 0 && a && /* @__PURE__ */ U("button", {
|
|
2894
2723
|
type: "button",
|
|
2895
2724
|
onClick: a,
|
|
2896
2725
|
className: "inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline underline-offset-2",
|
|
2897
|
-
children: [p("devportal.nextUploadVersion", "Next: Upload a Version"), /* @__PURE__ */
|
|
2726
|
+
children: [p("devportal.nextUploadVersion", "Next: Upload a Version"), /* @__PURE__ */ H(ve, { size: 15 })]
|
|
2898
2727
|
}),
|
|
2899
|
-
(!r || n > 0) && !i && o && /* @__PURE__ */
|
|
2728
|
+
(!r || n > 0) && !i && o && /* @__PURE__ */ U("button", {
|
|
2900
2729
|
type: "button",
|
|
2901
2730
|
onClick: o,
|
|
2902
2731
|
className: "inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline underline-offset-2",
|
|
2903
|
-
children: [p("devportal.nextSetPricing", "Next: Set Pricing"), /* @__PURE__ */
|
|
2732
|
+
children: [p("devportal.nextSetPricing", "Next: Set Pricing"), /* @__PURE__ */ H(ve, { size: 15 })]
|
|
2904
2733
|
})
|
|
2905
2734
|
]
|
|
2906
2735
|
})
|
|
@@ -2909,20 +2738,20 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2909
2738
|
]
|
|
2910
2739
|
});
|
|
2911
2740
|
}, Z = ({ label: e, value: n, trend: r }) => {
|
|
2912
|
-
let { t: i } =
|
|
2913
|
-
return /* @__PURE__ */
|
|
2741
|
+
let { t: i } = W();
|
|
2742
|
+
return /* @__PURE__ */ U(We, {
|
|
2914
2743
|
treatment: "metric",
|
|
2915
2744
|
className: "p-4",
|
|
2916
2745
|
children: [
|
|
2917
|
-
/* @__PURE__ */
|
|
2746
|
+
/* @__PURE__ */ H("p", {
|
|
2918
2747
|
className: "text-sm text-text-secondary",
|
|
2919
2748
|
children: e
|
|
2920
2749
|
}),
|
|
2921
|
-
/* @__PURE__ */
|
|
2750
|
+
/* @__PURE__ */ H("p", {
|
|
2922
2751
|
className: "text-2xl font-bold tabular-nums",
|
|
2923
2752
|
children: n
|
|
2924
2753
|
}),
|
|
2925
|
-
r !== void 0 && /* @__PURE__ */
|
|
2754
|
+
r !== void 0 && /* @__PURE__ */ U("p", {
|
|
2926
2755
|
className: t("text-xs mt-1 tabular-nums", r > 0 ? "text-status-success-text" : r < 0 ? "text-status-error-text" : "text-text-secondary"),
|
|
2927
2756
|
children: [
|
|
2928
2757
|
r > 0 ? "+" : "",
|
|
@@ -2936,12 +2765,12 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2936
2765
|
})
|
|
2937
2766
|
]
|
|
2938
2767
|
});
|
|
2939
|
-
}, Q = ({ label: e, url: t }) => /* @__PURE__ */
|
|
2768
|
+
}, Q = ({ label: e, url: t }) => /* @__PURE__ */ U("a", {
|
|
2940
2769
|
href: t,
|
|
2941
2770
|
target: "_blank",
|
|
2942
2771
|
rel: "noopener noreferrer",
|
|
2943
2772
|
className: "flex items-center gap-2 text-sm text-primary hover:underline",
|
|
2944
|
-
children: [/* @__PURE__ */
|
|
2773
|
+
children: [/* @__PURE__ */ H(I, { size: 14 }), e]
|
|
2945
2774
|
}), $ = {
|
|
2946
2775
|
auth: {
|
|
2947
2776
|
label: "Authentication",
|
|
@@ -3027,9 +2856,9 @@ function yt(e, t) {
|
|
|
3027
2856
|
let n = /* @__PURE__ */ new Set();
|
|
3028
2857
|
return t.filter((e) => n.has(e.resource) ? !1 : (n.add(e.resource), !0));
|
|
3029
2858
|
}
|
|
3030
|
-
var bt = ({ level: e, onChange: t }) => /* @__PURE__ */
|
|
2859
|
+
var bt = ({ level: e, onChange: t }) => /* @__PURE__ */ H("div", {
|
|
3031
2860
|
className: "flex items-center gap-0.5 rounded-md border border-border-subtle bg-bg-sunken/50 p-0.5",
|
|
3032
|
-
children: ["read", "write"].map((n) => /* @__PURE__ */
|
|
2861
|
+
children: ["read", "write"].map((n) => /* @__PURE__ */ H("button", {
|
|
3033
2862
|
type: "button",
|
|
3034
2863
|
onClick: () => t(n),
|
|
3035
2864
|
className: `rounded px-2.5 py-1 text-xs font-medium transition-colors whitespace-nowrap ${e === n ? "bg-bg-base text-text-primary shadow-sm" : "text-text-secondary hover:text-text-primary"}`,
|
|
@@ -3065,58 +2894,58 @@ var bt = ({ level: e, onChange: t }) => /* @__PURE__ */ U("div", {
|
|
|
3065
2894
|
} finally {
|
|
3066
2895
|
m(!1);
|
|
3067
2896
|
}
|
|
3068
|
-
}, w = /* @__PURE__ */
|
|
2897
|
+
}, w = /* @__PURE__ */ H("div", {
|
|
3069
2898
|
className: "rounded-lg border border-border-subtle divide-y divide-border-subtle",
|
|
3070
|
-
children: a.map((e) => /* @__PURE__ */
|
|
2899
|
+
children: a.map((e) => /* @__PURE__ */ U("div", {
|
|
3071
2900
|
className: "flex items-center gap-3 px-4 py-3 hover:bg-bg-sunken/30 transition-colors",
|
|
3072
|
-
children: [/* @__PURE__ */
|
|
2901
|
+
children: [/* @__PURE__ */ U("div", {
|
|
3073
2902
|
className: "flex-1 min-w-0",
|
|
3074
2903
|
children: [
|
|
3075
|
-
/* @__PURE__ */
|
|
2904
|
+
/* @__PURE__ */ H("p", {
|
|
3076
2905
|
className: "text-sm font-medium text-text-primary",
|
|
3077
2906
|
children: $[e.resource]?.label ?? e.resource
|
|
3078
2907
|
}),
|
|
3079
|
-
$[e.resource]?.description && /* @__PURE__ */
|
|
2908
|
+
$[e.resource]?.description && /* @__PURE__ */ H("p", {
|
|
3080
2909
|
className: "text-xs text-text-secondary",
|
|
3081
2910
|
children: $[e.resource].description
|
|
3082
2911
|
}),
|
|
3083
|
-
!$[e.resource] && /* @__PURE__ */
|
|
2912
|
+
!$[e.resource] && /* @__PURE__ */ H("p", {
|
|
3084
2913
|
className: "text-xs text-text-tertiary font-mono",
|
|
3085
2914
|
children: "custom scope"
|
|
3086
2915
|
})
|
|
3087
2916
|
]
|
|
3088
|
-
}), n ? /* @__PURE__ */
|
|
2917
|
+
}), n ? /* @__PURE__ */ H("span", {
|
|
3089
2918
|
className: `rounded-full px-2.5 py-0.5 text-xs font-medium ${e.level === "write" ? "bg-status-warning-bg text-status-warning-text" : "bg-bg-sunken text-text-secondary"}`,
|
|
3090
2919
|
children: e.level === "write" ? "Read & Write" : "Read"
|
|
3091
|
-
}) : /* @__PURE__ */
|
|
2920
|
+
}) : /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(bt, {
|
|
3092
2921
|
level: e.level,
|
|
3093
2922
|
onChange: (t) => v(e.resource, t)
|
|
3094
|
-
}), /* @__PURE__ */
|
|
2923
|
+
}), /* @__PURE__ */ H("button", {
|
|
3095
2924
|
type: "button",
|
|
3096
2925
|
onClick: () => y(e.resource),
|
|
3097
2926
|
title: "Remove permission",
|
|
3098
2927
|
className: "p-1.5 rounded text-text-tertiary hover:text-status-error-text hover:bg-status-error-bg-subtle transition-colors",
|
|
3099
|
-
children: /* @__PURE__ */
|
|
2928
|
+
children: /* @__PURE__ */ H(ze, { size: 14 })
|
|
3100
2929
|
})] })]
|
|
3101
2930
|
}, e.resource))
|
|
3102
2931
|
});
|
|
3103
|
-
return /* @__PURE__ */
|
|
2932
|
+
return /* @__PURE__ */ H(S, {
|
|
3104
2933
|
title: "Permissions",
|
|
3105
2934
|
description: "These are the permissions your app requests from users. Users see exactly this list when authorizing your app.",
|
|
3106
|
-
children: /* @__PURE__ */
|
|
2935
|
+
children: /* @__PURE__ */ H("div", {
|
|
3107
2936
|
className: "space-y-4",
|
|
3108
|
-
children: n ? /* @__PURE__ */
|
|
2937
|
+
children: n ? /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ U("div", {
|
|
3109
2938
|
className: "rounded-lg border border-status-warning-bg bg-status-warning-bg-subtle p-3 flex gap-2 text-sm",
|
|
3110
|
-
children: [/* @__PURE__ */
|
|
2939
|
+
children: [/* @__PURE__ */ H(Te, {
|
|
3111
2940
|
size: 15,
|
|
3112
2941
|
className: "flex-shrink-0 mt-0.5 text-status-warning-text"
|
|
3113
|
-
}), /* @__PURE__ */
|
|
2942
|
+
}), /* @__PURE__ */ U("span", {
|
|
3114
2943
|
className: "text-status-warning-text",
|
|
3115
2944
|
children: [
|
|
3116
|
-
/* @__PURE__ */
|
|
2945
|
+
/* @__PURE__ */ H("strong", { children: "Permission changes require a new version." }),
|
|
3117
2946
|
" Your app is live and users have already consented to the permissions below. To request new or fewer permissions, publish a new version — existing users will be shown what changed and asked to re-consent before the new version takes effect.",
|
|
3118
2947
|
" ",
|
|
3119
|
-
r && /* @__PURE__ */
|
|
2948
|
+
r && /* @__PURE__ */ H("button", {
|
|
3120
2949
|
type: "button",
|
|
3121
2950
|
onClick: r,
|
|
3122
2951
|
className: "underline font-medium hover:opacity-80 transition-opacity",
|
|
@@ -3124,31 +2953,31 @@ var bt = ({ level: e, onChange: t }) => /* @__PURE__ */ U("div", {
|
|
|
3124
2953
|
})
|
|
3125
2954
|
]
|
|
3126
2955
|
})]
|
|
3127
|
-
}), a.length === 0 ? /* @__PURE__ */
|
|
2956
|
+
}), a.length === 0 ? /* @__PURE__ */ H("div", {
|
|
3128
2957
|
className: "rounded-lg border border-border-subtle border-dashed p-6 text-center text-sm text-text-secondary",
|
|
3129
2958
|
children: "No permissions configured for this version."
|
|
3130
|
-
}) : w] }) : /* @__PURE__ */
|
|
3131
|
-
a.length === 0 ? /* @__PURE__ */
|
|
2959
|
+
}) : w] }) : /* @__PURE__ */ U(V, { children: [
|
|
2960
|
+
a.length === 0 ? /* @__PURE__ */ U("div", {
|
|
3132
2961
|
className: "rounded-lg border border-border-subtle border-dashed p-8 flex flex-col items-center gap-2 text-center text-text-secondary",
|
|
3133
2962
|
children: [
|
|
3134
|
-
/* @__PURE__ */
|
|
2963
|
+
/* @__PURE__ */ H(z, {
|
|
3135
2964
|
size: 28,
|
|
3136
2965
|
className: "opacity-25"
|
|
3137
2966
|
}),
|
|
3138
|
-
/* @__PURE__ */
|
|
2967
|
+
/* @__PURE__ */ H("p", {
|
|
3139
2968
|
className: "text-sm font-medium text-text-primary",
|
|
3140
2969
|
children: "No permissions configured"
|
|
3141
2970
|
}),
|
|
3142
|
-
/* @__PURE__ */
|
|
2971
|
+
/* @__PURE__ */ H("p", {
|
|
3143
2972
|
className: "text-xs",
|
|
3144
2973
|
children: "Add the permissions your app needs to request from users."
|
|
3145
2974
|
})
|
|
3146
2975
|
]
|
|
3147
2976
|
}) : w,
|
|
3148
|
-
s ? /* @__PURE__ */
|
|
2977
|
+
s ? /* @__PURE__ */ U("div", {
|
|
3149
2978
|
className: "rounded-lg border border-border-subtle p-3 flex items-center gap-2 flex-wrap",
|
|
3150
2979
|
children: [
|
|
3151
|
-
/* @__PURE__ */
|
|
2980
|
+
/* @__PURE__ */ H("input", {
|
|
3152
2981
|
type: "text",
|
|
3153
2982
|
value: l,
|
|
3154
2983
|
onChange: (e) => u(e.target.value),
|
|
@@ -3160,60 +2989,60 @@ var bt = ({ level: e, onChange: t }) => /* @__PURE__ */ U("div", {
|
|
|
3160
2989
|
autoFocus: !0,
|
|
3161
2990
|
className: "flex-1 min-w-40 rounded-md border border-border-subtle bg-bg-base px-3 py-1.5 text-sm focus:outline-none focus:ring-1 focus:ring-primary"
|
|
3162
2991
|
}),
|
|
3163
|
-
/* @__PURE__ */
|
|
2992
|
+
/* @__PURE__ */ H("datalist", {
|
|
3164
2993
|
id: "perm-resource-suggestions",
|
|
3165
|
-
children: gt.filter((e) => !a.some((t) => t.resource === e)).map((e) => /* @__PURE__ */
|
|
2994
|
+
children: gt.filter((e) => !a.some((t) => t.resource === e)).map((e) => /* @__PURE__ */ H("option", {
|
|
3166
2995
|
value: e,
|
|
3167
2996
|
children: $[e].label
|
|
3168
2997
|
}, e))
|
|
3169
2998
|
}),
|
|
3170
|
-
/* @__PURE__ */
|
|
2999
|
+
/* @__PURE__ */ H(bt, {
|
|
3171
3000
|
level: d,
|
|
3172
3001
|
onChange: f
|
|
3173
3002
|
}),
|
|
3174
|
-
/* @__PURE__ */
|
|
3003
|
+
/* @__PURE__ */ H("button", {
|
|
3175
3004
|
type: "button",
|
|
3176
3005
|
onClick: x,
|
|
3177
3006
|
disabled: !l.trim(),
|
|
3178
3007
|
className: "px-3 py-1.5 rounded-md bg-action-primary-bg text-action-primary-text text-xs font-medium hover:bg-action-primary-bg/90 disabled:opacity-50 transition-colors",
|
|
3179
3008
|
children: "Add"
|
|
3180
3009
|
}),
|
|
3181
|
-
/* @__PURE__ */
|
|
3010
|
+
/* @__PURE__ */ H("button", {
|
|
3182
3011
|
type: "button",
|
|
3183
3012
|
onClick: () => {
|
|
3184
3013
|
c(!1), u("");
|
|
3185
3014
|
},
|
|
3186
3015
|
className: "p-1.5 rounded text-text-secondary hover:text-text-primary transition-colors",
|
|
3187
|
-
children: /* @__PURE__ */
|
|
3016
|
+
children: /* @__PURE__ */ H(ze, { size: 14 })
|
|
3188
3017
|
})
|
|
3189
3018
|
]
|
|
3190
|
-
}) : /* @__PURE__ */
|
|
3019
|
+
}) : /* @__PURE__ */ U("button", {
|
|
3191
3020
|
type: "button",
|
|
3192
3021
|
onClick: () => c(!0),
|
|
3193
3022
|
className: "flex items-center gap-1.5 text-sm text-text-secondary hover:text-text-primary transition-colors",
|
|
3194
|
-
children: [/* @__PURE__ */
|
|
3023
|
+
children: [/* @__PURE__ */ H(R, { size: 14 }), "Add permission"]
|
|
3195
3024
|
}),
|
|
3196
|
-
/* @__PURE__ */
|
|
3025
|
+
/* @__PURE__ */ U("div", {
|
|
3197
3026
|
className: "rounded-lg border border-border-subtle bg-bg-sunken/30 p-3 flex gap-2 text-xs text-text-secondary",
|
|
3198
|
-
children: [/* @__PURE__ */
|
|
3027
|
+
children: [/* @__PURE__ */ H(Te, {
|
|
3199
3028
|
size: 14,
|
|
3200
3029
|
className: "flex-shrink-0 mt-0.5"
|
|
3201
|
-
}), /* @__PURE__ */
|
|
3030
|
+
}), /* @__PURE__ */ U("span", { children: [/* @__PURE__ */ H("strong", { children: "Read & Write" }), " implies Read. Request only what your app genuinely needs — fewer permissions build more user trust."] })]
|
|
3202
3031
|
}),
|
|
3203
|
-
/* @__PURE__ */
|
|
3032
|
+
/* @__PURE__ */ U("div", {
|
|
3204
3033
|
className: "flex items-center justify-end gap-3",
|
|
3205
|
-
children: [h && /* @__PURE__ */
|
|
3034
|
+
children: [h && /* @__PURE__ */ U("span", {
|
|
3206
3035
|
className: "flex items-center gap-1.5 text-sm text-status-success-text",
|
|
3207
|
-
children: [/* @__PURE__ */
|
|
3208
|
-
}), /* @__PURE__ */
|
|
3036
|
+
children: [/* @__PURE__ */ H(_e, { size: 14 }), "Saved"]
|
|
3037
|
+
}), /* @__PURE__ */ U("button", {
|
|
3209
3038
|
type: "button",
|
|
3210
3039
|
onClick: () => void C(),
|
|
3211
3040
|
disabled: p,
|
|
3212
3041
|
className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors disabled:opacity-50",
|
|
3213
|
-
children: [p ? /* @__PURE__ */
|
|
3042
|
+
children: [p ? /* @__PURE__ */ H(L, {
|
|
3214
3043
|
size: 14,
|
|
3215
3044
|
className: "animate-spin"
|
|
3216
|
-
}) : /* @__PURE__ */
|
|
3045
|
+
}) : /* @__PURE__ */ H(z, { size: 14 }), "Save Permissions"]
|
|
3217
3046
|
})]
|
|
3218
3047
|
})
|
|
3219
3048
|
] })
|
|
@@ -3221,6 +3050,6 @@ var bt = ({ level: e, onChange: t }) => /* @__PURE__ */ U("div", {
|
|
|
3221
3050
|
});
|
|
3222
3051
|
};
|
|
3223
3052
|
//#endregion
|
|
3224
|
-
export {
|
|
3053
|
+
export { q as ApplicationDetailPage };
|
|
3225
3054
|
|
|
3226
3055
|
//# sourceMappingURL=ApplicationDetailPage.js.map
|