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