@burdenoff/microfe-devportal 2026.702.1 → 2026.703.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/devportal/pages/ApplicationDetailPage.js +711 -660
- package/dist/devportal/pages/ApplicationDetailPage.js.map +1 -1
- package/dist/devportal/pages/ApplicationVersionsPage.js +378 -295
- package/dist/devportal/pages/ApplicationVersionsPage.js.map +1 -1
- package/dist/devportal/pages/CreateApplicationPage.js.map +1 -1
- package/dist/devportal/pages/DashboardPage.js.map +1 -1
- package/dist/generated/global-operations.js +185 -156
- package/dist/generated/global-operations.js.map +1 -1
- package/package.json +1 -1
|
@@ -18,12 +18,12 @@ import { useDevportalPermission as ae } from "../hooks/usePermission.js";
|
|
|
18
18
|
import { usePackageUpload as A } from "../hooks/usePackageUpload.js";
|
|
19
19
|
import { useCallback as j, useEffect as oe, useMemo as M, useRef as se, useState as N } from "react";
|
|
20
20
|
import { useI18n as P } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
21
|
-
import { AlertCircle as ce, AppWindow as le, BarChart3 as F, Check as I, CheckCircle as ue, ChevronRight as de, CircleDollarSign as L, Clock as fe, Edit as pe, ExternalLink as R, FlaskConical as me, Gift as he, Info as ge, Key as
|
|
22
|
-
import { useParams as
|
|
23
|
-
import { Fragment as
|
|
24
|
-
import { CTAOverflowMenu as
|
|
21
|
+
import { AlertCircle as ce, AppWindow as le, BarChart3 as F, Check as I, CheckCircle as ue, ChevronRight as de, CircleDollarSign as L, Clock as fe, Edit as pe, ExternalLink as R, FlaskConical as me, Gift as he, Info as ge, Key as z, Loader2 as B, MoreHorizontal as _e, Package as ve, Plus as V, Power as ye, RefreshCw as be, SendHorizontal as xe, Shield as H, Store as Se, TrendingUp as Ce, Upload as U, Users as we, Wallet as Te, Webhook as Ee, X as De, XCircle as Oe } from "lucide-react";
|
|
22
|
+
import { useParams as ke } from "react-router-dom";
|
|
23
|
+
import { Fragment as W, jsx as G, jsxs as K } from "react/jsx-runtime";
|
|
24
|
+
import { CTAOverflowMenu as Ae, EmphasisPanel as je, GlassCard as Me } from "@burdenoff/fe-libs/ui";
|
|
25
25
|
//#region src/devportal/pages/ApplicationDetailPage.tsx
|
|
26
|
-
function
|
|
26
|
+
function Ne(e) {
|
|
27
27
|
return e ? {
|
|
28
28
|
id: e.id,
|
|
29
29
|
name: e.name,
|
|
@@ -73,7 +73,7 @@ function Fe(e) {
|
|
|
73
73
|
updatedAt: e.updatedAt
|
|
74
74
|
} : null;
|
|
75
75
|
}
|
|
76
|
-
function
|
|
76
|
+
function Pe(e) {
|
|
77
77
|
return {
|
|
78
78
|
id: e.id,
|
|
79
79
|
applicationId: e.applicationId,
|
|
@@ -97,7 +97,7 @@ function Ie(e) {
|
|
|
97
97
|
updatedAt: e.updatedAt
|
|
98
98
|
};
|
|
99
99
|
}
|
|
100
|
-
function
|
|
100
|
+
function q(e) {
|
|
101
101
|
return {
|
|
102
102
|
id: e.id,
|
|
103
103
|
applicationId: e.applicationId,
|
|
@@ -113,7 +113,7 @@ function G(e) {
|
|
|
113
113
|
createdAt: e.createdAt
|
|
114
114
|
};
|
|
115
115
|
}
|
|
116
|
-
function
|
|
116
|
+
function Fe(e) {
|
|
117
117
|
return {
|
|
118
118
|
id: e.id,
|
|
119
119
|
appId: e.appId,
|
|
@@ -135,7 +135,7 @@ function Le(e) {
|
|
|
135
135
|
revokedBy: e.revokedBy || void 0
|
|
136
136
|
};
|
|
137
137
|
}
|
|
138
|
-
var
|
|
138
|
+
var Ie = [
|
|
139
139
|
{
|
|
140
140
|
id: "overview",
|
|
141
141
|
label: "Overview",
|
|
@@ -149,12 +149,12 @@ var Re = [
|
|
|
149
149
|
{
|
|
150
150
|
id: "store-listing",
|
|
151
151
|
label: "Store Listing",
|
|
152
|
-
icon:
|
|
152
|
+
icon: Se
|
|
153
153
|
},
|
|
154
154
|
{
|
|
155
155
|
id: "versions",
|
|
156
156
|
label: "Versions",
|
|
157
|
-
icon:
|
|
157
|
+
icon: ve
|
|
158
158
|
},
|
|
159
159
|
{
|
|
160
160
|
id: "pricing",
|
|
@@ -164,104 +164,104 @@ var Re = [
|
|
|
164
164
|
{
|
|
165
165
|
id: "permissions",
|
|
166
166
|
label: "Permissions",
|
|
167
|
-
icon:
|
|
167
|
+
icon: H
|
|
168
168
|
},
|
|
169
169
|
{
|
|
170
170
|
id: "webhooks",
|
|
171
171
|
label: "Webhooks",
|
|
172
|
-
icon:
|
|
172
|
+
icon: Ee
|
|
173
173
|
},
|
|
174
174
|
{
|
|
175
175
|
id: "delegations",
|
|
176
176
|
label: "Delegations",
|
|
177
|
-
icon:
|
|
177
|
+
icon: we
|
|
178
178
|
},
|
|
179
179
|
{
|
|
180
180
|
id: "playground",
|
|
181
181
|
label: "API Playground",
|
|
182
182
|
icon: R
|
|
183
183
|
}
|
|
184
|
-
],
|
|
184
|
+
], Le = {
|
|
185
185
|
ACTIVE: "bg-status-success-bg-subtle text-status-success-text",
|
|
186
186
|
REVOKED: "bg-status-error-bg-subtle text-status-error-text",
|
|
187
187
|
EXPIRED: "bg-bg-sunken text-text-secondary"
|
|
188
|
-
},
|
|
188
|
+
}, Re = ({ message: e = "Loading..." }) => /* @__PURE__ */ K("div", {
|
|
189
189
|
className: "flex items-center justify-center gap-3 py-12",
|
|
190
|
-
children: [/* @__PURE__ */
|
|
190
|
+
children: [/* @__PURE__ */ G(B, {
|
|
191
191
|
size: 20,
|
|
192
192
|
className: "animate-spin text-text-secondary"
|
|
193
|
-
}), /* @__PURE__ */
|
|
193
|
+
}), /* @__PURE__ */ G("p", {
|
|
194
194
|
className: "text-sm text-text-secondary",
|
|
195
195
|
children: e
|
|
196
196
|
})]
|
|
197
|
-
}),
|
|
197
|
+
}), ze = ({ message: e }) => /* @__PURE__ */ K("div", {
|
|
198
198
|
className: "flex flex-col items-center justify-center gap-2 py-12 text-center",
|
|
199
|
-
children: [/* @__PURE__ */
|
|
199
|
+
children: [/* @__PURE__ */ G(ce, {
|
|
200
200
|
size: 32,
|
|
201
201
|
className: "text-status-error-text"
|
|
202
|
-
}), /* @__PURE__ */
|
|
202
|
+
}), /* @__PURE__ */ G("p", {
|
|
203
203
|
className: "text-sm text-text-secondary",
|
|
204
204
|
children: e
|
|
205
205
|
})]
|
|
206
|
-
}),
|
|
206
|
+
}), Be = () => {
|
|
207
207
|
let { navigate: i, basePath: o, workspaceId: c } = e(), { t: u } = P(), p = (e, t) => {
|
|
208
208
|
let n = u(e);
|
|
209
209
|
return n === e ? t : n;
|
|
210
|
-
}, { allowed: _ } = ae(ie.APP_UPDATE), { allowed: y } = ae(ie.APP_DELETE), { appId: w } =
|
|
210
|
+
}, { allowed: _ } = ae(ie.APP_UPDATE), { allowed: y } = ae(ie.APP_DELETE), { appId: w } = ke(), [E, D] = N("overview"), [O, k] = N(!1), [te, A] = N(!1), [oe, M] = N(null), [se, F] = N(!1), { data: L, loading: R, error: he, refetch: ge } = s({
|
|
211
211
|
variables: { id: w },
|
|
212
212
|
skip: !w
|
|
213
|
-
}), [
|
|
213
|
+
}), [z, { loading: _e }] = m(), [ve, { loading: V }] = a(), [H, { loading: Ce }] = h(), [U, { loading: we }] = f(), [Te, { loading: Ee }] = g(), { data: De, refetch: je } = d({
|
|
214
214
|
variables: {
|
|
215
215
|
applicationId: w,
|
|
216
216
|
workspaceId: c ?? void 0
|
|
217
217
|
},
|
|
218
218
|
skip: !c || !w,
|
|
219
219
|
fetchPolicy: "cache-and-network"
|
|
220
|
-
}),
|
|
220
|
+
}), Me = De?.appInstallations?.edges?.[0]?.node ?? null, { data: Pe } = l({
|
|
221
221
|
variables: { id: L?.application?.developerOrganizationId ?? "" },
|
|
222
222
|
skip: !L?.application?.developerOrganizationId,
|
|
223
223
|
fetchPolicy: "cache-first"
|
|
224
|
-
}),
|
|
224
|
+
}), q = j((e) => {
|
|
225
225
|
i?.(`${o}${e}`);
|
|
226
|
-
}, [i, o]),
|
|
226
|
+
}, [i, o]), Fe = j(async () => {
|
|
227
227
|
let e = L?.application?.appId;
|
|
228
228
|
if (e) try {
|
|
229
|
-
let t = (await
|
|
229
|
+
let t = (await z({ variables: { id: e } })).data?.rotateAppSecret.clientSecret;
|
|
230
230
|
t && M(t), k(!1);
|
|
231
231
|
} catch {}
|
|
232
|
-
}, [L?.application?.appId,
|
|
232
|
+
}, [L?.application?.appId, z]), Le = j(async () => {
|
|
233
233
|
if (w) try {
|
|
234
|
-
await
|
|
234
|
+
await ve({ variables: { id: w } }), A(!1), q("/apps");
|
|
235
235
|
} catch {}
|
|
236
236
|
}, [
|
|
237
237
|
w,
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
]),
|
|
238
|
+
ve,
|
|
239
|
+
q
|
|
240
|
+
]), Re = j(async () => {
|
|
241
241
|
if (!(!w || !c)) try {
|
|
242
|
-
await
|
|
242
|
+
await U({ variables: { input: {
|
|
243
243
|
applicationId: w,
|
|
244
244
|
scope: "WORKSPACE",
|
|
245
245
|
workspaceId: c,
|
|
246
246
|
autoUpdate: !1
|
|
247
|
-
} } }),
|
|
247
|
+
} } }), je(), T("success");
|
|
248
248
|
} catch (e) {
|
|
249
249
|
console.error("[DevPortal] Test in Workspace failed:", e), T("error");
|
|
250
250
|
}
|
|
251
251
|
}, [
|
|
252
252
|
w,
|
|
253
253
|
c,
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
]),
|
|
254
|
+
U,
|
|
255
|
+
je
|
|
256
|
+
]), ze = j(async (e) => {
|
|
257
257
|
try {
|
|
258
|
-
await
|
|
258
|
+
await Te({ variables: { id: e } }), je(), T("success");
|
|
259
259
|
} catch {
|
|
260
260
|
T("error");
|
|
261
261
|
}
|
|
262
|
-
}, [
|
|
262
|
+
}, [Te, je]), Be = j(async () => {
|
|
263
263
|
if (w) try {
|
|
264
|
-
await
|
|
264
|
+
await H({ variables: { id: w } }), T("success");
|
|
265
265
|
} catch (e) {
|
|
266
266
|
console.error("[DevPortal] Submit failed:", e), T("error");
|
|
267
267
|
} finally {
|
|
@@ -269,205 +269,205 @@ var Re = [
|
|
|
269
269
|
}
|
|
270
270
|
}, [
|
|
271
271
|
w,
|
|
272
|
-
|
|
272
|
+
H,
|
|
273
273
|
ge
|
|
274
274
|
]);
|
|
275
|
-
if (R && !L) return /* @__PURE__ */
|
|
276
|
-
if (he) return /* @__PURE__ */
|
|
275
|
+
if (R && !L) return /* @__PURE__ */ G(n, { message: p("devportal.loadingApplication", "Loading application...") });
|
|
276
|
+
if (he) return /* @__PURE__ */ G(v, {
|
|
277
277
|
title: p("devportal.error", "Error"),
|
|
278
278
|
backLink: `${o}/apps`,
|
|
279
279
|
backLabel: p("devportal.backToApplications", "Back to Applications"),
|
|
280
|
-
children: /* @__PURE__ */
|
|
280
|
+
children: /* @__PURE__ */ K("div", {
|
|
281
281
|
className: "flex flex-col items-center justify-center py-12 text-center",
|
|
282
282
|
children: [
|
|
283
|
-
/* @__PURE__ */
|
|
283
|
+
/* @__PURE__ */ G(ce, {
|
|
284
284
|
size: 48,
|
|
285
285
|
className: "text-status-error-text mb-4"
|
|
286
286
|
}),
|
|
287
|
-
/* @__PURE__ */
|
|
287
|
+
/* @__PURE__ */ G("h3", {
|
|
288
288
|
className: "text-lg font-semibold mb-2",
|
|
289
289
|
children: p("devportal.failedToLoadApplication", "Failed to load application")
|
|
290
290
|
}),
|
|
291
|
-
/* @__PURE__ */
|
|
291
|
+
/* @__PURE__ */ G("p", {
|
|
292
292
|
className: "text-sm text-text-secondary",
|
|
293
293
|
children: he.message
|
|
294
294
|
})
|
|
295
295
|
]
|
|
296
296
|
})
|
|
297
297
|
});
|
|
298
|
-
let
|
|
299
|
-
if (!
|
|
298
|
+
let J = Ne(L?.application);
|
|
299
|
+
if (!J) return /* @__PURE__ */ G(v, {
|
|
300
300
|
title: p("devportal.notFound", "Not Found"),
|
|
301
301
|
backLink: `${o}/apps`,
|
|
302
302
|
backLabel: p("devportal.backToApplications", "Back to Applications"),
|
|
303
|
-
children: /* @__PURE__ */
|
|
303
|
+
children: /* @__PURE__ */ G(r, {
|
|
304
304
|
illustration: "empty-generic",
|
|
305
|
-
icon: /* @__PURE__ */
|
|
305
|
+
icon: /* @__PURE__ */ G(le, { size: 48 }),
|
|
306
306
|
title: p("devportal.applicationNotFound", "Application not found"),
|
|
307
307
|
description: p("devportal.applicationNotFoundDescription", "The application you're looking for doesn't exist or you don't have access to it.")
|
|
308
308
|
})
|
|
309
309
|
});
|
|
310
|
-
let
|
|
311
|
-
...
|
|
310
|
+
let Y = J.appType === "NODE" || J.appType === "WORKFLOW", Ve = L?.application?.versions?.totalCount ?? 0, Je = J.pricingType === "PAID", Ye = Pe?.developerOrganization, Xe = Ye?.platformFeeRate ?? .3, Ze = !!Ye?.billingAccountId, $e = J.pricingDetails ?? {}, X = J.pricingType === "FREE" || J.pricingType === "PAID" && typeof $e.price == "number" && $e.price > 0, Z = !!J.description?.trim() && !!J.category && !!J.iconUrl && (J.visibility === "PUBLIC" || J.visibility === "UNLISTED") && (!Y || Ve > 0) && (!Je || Ze) && X, et = Z && J.status !== "PUBLISHED" && J.status !== "SUBMITTED", tt = [
|
|
311
|
+
...Y ? [] : [{
|
|
312
312
|
label: p("devportal.rotateSecret", "Rotate Secret"),
|
|
313
|
-
icon: /* @__PURE__ */
|
|
314
|
-
disabled: !
|
|
313
|
+
icon: /* @__PURE__ */ G(be, { size: 16 }),
|
|
314
|
+
disabled: !J.appId,
|
|
315
315
|
onSelect: () => k(!0)
|
|
316
316
|
}],
|
|
317
|
-
...
|
|
317
|
+
...Y ? [] : Me ? [{
|
|
318
318
|
label: p("devportal.uninstallFromWorkspace", "Uninstall from Workspace"),
|
|
319
|
-
icon: /* @__PURE__ */
|
|
320
|
-
disabled:
|
|
321
|
-
onSelect: () => void
|
|
319
|
+
icon: /* @__PURE__ */ G(Oe, { size: 16 }),
|
|
320
|
+
disabled: Ee || !c,
|
|
321
|
+
onSelect: () => void ze(Me.id)
|
|
322
322
|
}] : [{
|
|
323
323
|
label: p("devportal.testInWorkspace", "Test in Workspace"),
|
|
324
|
-
icon: /* @__PURE__ */
|
|
325
|
-
disabled:
|
|
326
|
-
onSelect: () => void
|
|
324
|
+
icon: /* @__PURE__ */ G(me, { size: 16 }),
|
|
325
|
+
disabled: we || !c,
|
|
326
|
+
onSelect: () => void Re()
|
|
327
327
|
}],
|
|
328
328
|
{
|
|
329
329
|
label: p("devportal.deactivate", "Deactivate"),
|
|
330
|
-
icon: /* @__PURE__ */
|
|
330
|
+
icon: /* @__PURE__ */ G(ye, { size: 16 }),
|
|
331
331
|
intent: "destructive",
|
|
332
332
|
disabled: !y,
|
|
333
333
|
onSelect: () => A(!0)
|
|
334
334
|
}
|
|
335
335
|
];
|
|
336
|
-
return /* @__PURE__ */
|
|
337
|
-
title:
|
|
338
|
-
description:
|
|
336
|
+
return /* @__PURE__ */ K(v, {
|
|
337
|
+
title: J.name,
|
|
338
|
+
description: J.shortDescription,
|
|
339
339
|
purpose: p("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."),
|
|
340
340
|
backLink: `${o}/apps`,
|
|
341
341
|
backLabel: p("devportal.backToApplications", "Back to Applications"),
|
|
342
|
-
actions: /* @__PURE__ */
|
|
342
|
+
actions: /* @__PURE__ */ K("div", {
|
|
343
343
|
className: "flex items-center gap-2",
|
|
344
|
-
children: [
|
|
344
|
+
children: [J.status === "SUBMITTED" ? /* @__PURE__ */ K("div", {
|
|
345
345
|
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",
|
|
346
|
-
children: [/* @__PURE__ */
|
|
347
|
-
}) :
|
|
346
|
+
children: [/* @__PURE__ */ G(fe, { size: 13 }), p("devportal.underReview", "Under Review")]
|
|
347
|
+
}) : J.status === "PUBLISHED" ? null : /* @__PURE__ */ G("button", {
|
|
348
348
|
type: "button",
|
|
349
|
-
onClick: () => void
|
|
350
|
-
disabled: !et ||
|
|
349
|
+
onClick: () => void Be(),
|
|
350
|
+
disabled: !et || Ce,
|
|
351
351
|
title: Z ? void 0 : [
|
|
352
|
-
!
|
|
353
|
-
!
|
|
354
|
-
!
|
|
355
|
-
|
|
356
|
-
|
|
352
|
+
!J.description?.trim() && "Add full description",
|
|
353
|
+
!J.category && "Select a category",
|
|
354
|
+
!J.iconUrl && "Upload an app icon",
|
|
355
|
+
J.visibility === "PRIVATE" && "Set visibility to Public/Unlisted",
|
|
356
|
+
Y && Ve === 0 && "Upload at least one version",
|
|
357
357
|
!X && "Set pricing (choose Free or Paid in the Pricing tab)",
|
|
358
358
|
Je && !Ze && "Link a billing account to receive payments"
|
|
359
359
|
].filter(Boolean).join(" · "),
|
|
360
|
-
className: t("inline-flex items-center gap-2 rounded-md px-4 py-2 text-sm font-medium transition-colors", et && !
|
|
361
|
-
children:
|
|
360
|
+
className: t("inline-flex items-center gap-2 rounded-md px-4 py-2 text-sm font-medium transition-colors", et && !Ce ? "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"),
|
|
361
|
+
children: Ce ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(B, {
|
|
362
362
|
size: 15,
|
|
363
363
|
className: "animate-spin"
|
|
364
|
-
}), p("devportal.submitting", "Submitting…")] }) : /* @__PURE__ */
|
|
365
|
-
}), /* @__PURE__ */
|
|
364
|
+
}), p("devportal.submitting", "Submitting…")] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(xe, { size: 15 }), p("devportal.submitForReview", "Submit for Review")] })
|
|
365
|
+
}), /* @__PURE__ */ G(Ae, {
|
|
366
366
|
primary: {
|
|
367
367
|
label: p("devportal.editApp", "Edit App"),
|
|
368
|
-
icon: /* @__PURE__ */
|
|
368
|
+
icon: /* @__PURE__ */ G(pe, { size: 16 }),
|
|
369
369
|
disabled: !_,
|
|
370
|
-
onSelect: () =>
|
|
370
|
+
onSelect: () => q(`/apps/${J.id}/edit`)
|
|
371
371
|
},
|
|
372
372
|
actions: tt
|
|
373
373
|
})]
|
|
374
374
|
}),
|
|
375
375
|
children: [
|
|
376
|
-
oe && /* @__PURE__ */
|
|
376
|
+
oe && /* @__PURE__ */ G(ee, {
|
|
377
377
|
title: p("devportal.newAppSecretGenerated", "New App Secret Generated"),
|
|
378
378
|
secret: oe,
|
|
379
379
|
description: p("devportal.appSecretRotatedDescription", "Your app secret has been rotated. The old secret is no longer valid."),
|
|
380
380
|
onDismiss: () => M(null)
|
|
381
381
|
}),
|
|
382
|
-
/* @__PURE__ */
|
|
382
|
+
/* @__PURE__ */ K("div", {
|
|
383
383
|
className: "flex flex-wrap items-center gap-2",
|
|
384
384
|
children: [
|
|
385
|
-
/* @__PURE__ */
|
|
386
|
-
status:
|
|
385
|
+
/* @__PURE__ */ G(S, {
|
|
386
|
+
status: J.status,
|
|
387
387
|
type: "app"
|
|
388
388
|
}),
|
|
389
|
-
/* @__PURE__ */
|
|
390
|
-
status:
|
|
389
|
+
/* @__PURE__ */ G(S, {
|
|
390
|
+
status: J.visibility,
|
|
391
391
|
type: "app"
|
|
392
392
|
}),
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
/* @__PURE__ */
|
|
393
|
+
J.isVerified && /* @__PURE__ */ G(C, { verified: !0 }),
|
|
394
|
+
J.isFeatured && /* @__PURE__ */ G(x, {}),
|
|
395
|
+
/* @__PURE__ */ G("span", {
|
|
396
396
|
className: "text-sm text-text-secondary",
|
|
397
|
-
children: b[
|
|
397
|
+
children: b[J.appType] || J.appType
|
|
398
398
|
})
|
|
399
399
|
]
|
|
400
400
|
}),
|
|
401
|
-
|
|
401
|
+
J.status === "SUBMITTED" && /* @__PURE__ */ K("div", {
|
|
402
402
|
className: "flex items-start gap-3 rounded-lg border border-border-subtle bg-status-warning-bg-subtle p-4",
|
|
403
|
-
children: [/* @__PURE__ */
|
|
403
|
+
children: [/* @__PURE__ */ G(fe, {
|
|
404
404
|
size: 18,
|
|
405
405
|
className: "text-status-warning-text mt-0.5 flex-shrink-0"
|
|
406
|
-
}), /* @__PURE__ */
|
|
406
|
+
}), /* @__PURE__ */ K("div", {
|
|
407
407
|
className: "text-sm",
|
|
408
|
-
children: [/* @__PURE__ */
|
|
408
|
+
children: [/* @__PURE__ */ G("p", {
|
|
409
409
|
className: "font-medium text-status-warning-text",
|
|
410
410
|
children: p("devportal.underReview", "Under Review")
|
|
411
|
-
}), /* @__PURE__ */
|
|
411
|
+
}), /* @__PURE__ */ K("p", {
|
|
412
412
|
className: "mt-0.5 text-text-secondary",
|
|
413
|
-
children: [p("devportal.underReviewDesc", "Your submission is being reviewed by our team. You'll be notified of the outcome."),
|
|
413
|
+
children: [p("devportal.underReviewDesc", "Your submission is being reviewed by our team. You'll be notified of the outcome."), J.submittedAt && /* @__PURE__ */ K("span", {
|
|
414
414
|
className: "ml-1",
|
|
415
415
|
children: [
|
|
416
416
|
"Submitted ",
|
|
417
|
-
new Date(
|
|
417
|
+
new Date(J.submittedAt).toLocaleDateString(),
|
|
418
418
|
"."
|
|
419
419
|
]
|
|
420
420
|
})]
|
|
421
421
|
})]
|
|
422
422
|
})]
|
|
423
423
|
}),
|
|
424
|
-
|
|
424
|
+
J.status === "REJECTED" && /* @__PURE__ */ K("div", {
|
|
425
425
|
className: "flex items-start gap-3 rounded-lg border border-status-error-bg bg-status-error-bg-subtle p-4",
|
|
426
|
-
children: [/* @__PURE__ */
|
|
426
|
+
children: [/* @__PURE__ */ G(Oe, {
|
|
427
427
|
size: 18,
|
|
428
428
|
className: "text-status-error-text mt-0.5 flex-shrink-0"
|
|
429
|
-
}), /* @__PURE__ */
|
|
429
|
+
}), /* @__PURE__ */ K("div", {
|
|
430
430
|
className: "text-sm",
|
|
431
431
|
children: [
|
|
432
|
-
/* @__PURE__ */
|
|
432
|
+
/* @__PURE__ */ G("p", {
|
|
433
433
|
className: "font-medium text-status-error-text",
|
|
434
434
|
children: p("devportal.reviewRejected", "Review Rejected")
|
|
435
435
|
}),
|
|
436
|
-
/* @__PURE__ */
|
|
436
|
+
/* @__PURE__ */ G("p", {
|
|
437
437
|
className: "mt-0.5 text-text-secondary",
|
|
438
|
-
children:
|
|
438
|
+
children: J.reviewNotes || p("devportal.reviewRejectedDesc", "Your submission was not approved. Please review the feedback, update your app, and re-submit.")
|
|
439
439
|
}),
|
|
440
|
-
/* @__PURE__ */
|
|
440
|
+
/* @__PURE__ */ G("button", {
|
|
441
441
|
type: "button",
|
|
442
|
-
onClick: () =>
|
|
442
|
+
onClick: () => q(`/apps/${J.id}/edit`),
|
|
443
443
|
className: "mt-2 inline-flex items-center gap-1 text-xs font-medium text-primary underline",
|
|
444
444
|
children: p("devportal.editAndResubmit", "Edit app and re-submit →")
|
|
445
445
|
})
|
|
446
446
|
]
|
|
447
447
|
})]
|
|
448
448
|
}),
|
|
449
|
-
|
|
449
|
+
J.status === "PUBLISHED" && /* @__PURE__ */ K("div", {
|
|
450
450
|
className: "flex items-start gap-3 rounded-lg border border-status-success-bg bg-status-success-bg-subtle p-4",
|
|
451
|
-
children: [/* @__PURE__ */
|
|
451
|
+
children: [/* @__PURE__ */ G(ue, {
|
|
452
452
|
size: 18,
|
|
453
453
|
className: "text-status-success-text mt-0.5 flex-shrink-0"
|
|
454
|
-
}), /* @__PURE__ */
|
|
454
|
+
}), /* @__PURE__ */ K("div", {
|
|
455
455
|
className: "text-sm",
|
|
456
|
-
children: [/* @__PURE__ */
|
|
456
|
+
children: [/* @__PURE__ */ G("p", {
|
|
457
457
|
className: "font-medium text-status-success-text",
|
|
458
458
|
children: p("devportal.liveInStore", "Live in the Store")
|
|
459
|
-
}), /* @__PURE__ */
|
|
459
|
+
}), /* @__PURE__ */ G("p", {
|
|
460
460
|
className: "mt-0.5 text-text-secondary",
|
|
461
461
|
children: p("devportal.liveInStoreDesc", "Your app is published and visible to users in the marketplace.")
|
|
462
462
|
})]
|
|
463
463
|
})]
|
|
464
464
|
}),
|
|
465
|
-
(
|
|
466
|
-
let e = !!
|
|
467
|
-
!
|
|
468
|
-
!
|
|
469
|
-
!
|
|
470
|
-
|
|
465
|
+
(J.status === "DRAFT" || J.status === "REJECTED") && !Z && (() => {
|
|
466
|
+
let e = !!J.description?.trim() && !!J.category && !!J.iconUrl && (J.visibility === "PUBLIC" || J.visibility === "UNLISTED"), n = !Y || Ve > 0, r = [
|
|
467
|
+
!J.description?.trim() && "Add a full description",
|
|
468
|
+
!J.category && "Select a category",
|
|
469
|
+
!J.iconUrl && "Upload an app icon",
|
|
470
|
+
J.visibility === "PRIVATE" && "Set visibility to Public or Unlisted"
|
|
471
471
|
].filter(Boolean), i = [
|
|
472
472
|
{
|
|
473
473
|
id: "store",
|
|
@@ -476,7 +476,7 @@ var Re = [
|
|
|
476
476
|
done: e,
|
|
477
477
|
onClick: () => D("store-listing")
|
|
478
478
|
},
|
|
479
|
-
...
|
|
479
|
+
...Y ? [{
|
|
480
480
|
id: "version",
|
|
481
481
|
label: p("devportal.setupVersionStep", "Upload a Version"),
|
|
482
482
|
hint: n ? p("devportal.done", "Done") : p("devportal.uploadVersionHint", "Upload your ZIP bundle and manifest"),
|
|
@@ -498,22 +498,22 @@ var Re = [
|
|
|
498
498
|
onClick: void 0
|
|
499
499
|
}
|
|
500
500
|
], a = i.filter((e) => e.done).length;
|
|
501
|
-
return /* @__PURE__ */
|
|
501
|
+
return /* @__PURE__ */ K("div", {
|
|
502
502
|
className: "rounded-xl border border-border-subtle bg-bg-surface shadow-sm",
|
|
503
|
-
children: [/* @__PURE__ */
|
|
503
|
+
children: [/* @__PURE__ */ G("div", {
|
|
504
504
|
className: "flex items-center justify-between border-b border-border-subtle px-5 py-4",
|
|
505
|
-
children: /* @__PURE__ */
|
|
505
|
+
children: /* @__PURE__ */ K("div", {
|
|
506
506
|
className: "flex items-center gap-3",
|
|
507
|
-
children: [/* @__PURE__ */
|
|
507
|
+
children: [/* @__PURE__ */ G("div", {
|
|
508
508
|
className: "flex h-8 w-8 items-center justify-center rounded-full bg-action-primary-bg/10",
|
|
509
|
-
children: /* @__PURE__ */
|
|
509
|
+
children: /* @__PURE__ */ G(Se, {
|
|
510
510
|
size: 16,
|
|
511
511
|
className: "text-primary"
|
|
512
512
|
})
|
|
513
|
-
}), /* @__PURE__ */
|
|
513
|
+
}), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
514
514
|
className: "text-sm font-semibold text-text-primary",
|
|
515
515
|
children: p("devportal.completeSetup", "Complete your app setup")
|
|
516
|
-
}), /* @__PURE__ */
|
|
516
|
+
}), /* @__PURE__ */ K("p", {
|
|
517
517
|
className: "text-xs text-text-secondary",
|
|
518
518
|
children: [
|
|
519
519
|
a,
|
|
@@ -525,29 +525,29 @@ var Re = [
|
|
|
525
525
|
]
|
|
526
526
|
})] })]
|
|
527
527
|
})
|
|
528
|
-
}), /* @__PURE__ */
|
|
528
|
+
}), /* @__PURE__ */ G("div", {
|
|
529
529
|
className: "divide-y divide-border-subtle",
|
|
530
|
-
children: i.map((e, n) => /* @__PURE__ */
|
|
530
|
+
children: i.map((e, n) => /* @__PURE__ */ K("button", {
|
|
531
531
|
type: "button",
|
|
532
532
|
onClick: e.onClick,
|
|
533
533
|
disabled: !e.onClick,
|
|
534
534
|
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"),
|
|
535
535
|
children: [
|
|
536
|
-
/* @__PURE__ */
|
|
536
|
+
/* @__PURE__ */ G("div", {
|
|
537
537
|
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"),
|
|
538
|
-
children: e.done ? /* @__PURE__ */
|
|
538
|
+
children: e.done ? /* @__PURE__ */ G(I, { size: 13 }) : n + 1
|
|
539
539
|
}),
|
|
540
|
-
/* @__PURE__ */
|
|
540
|
+
/* @__PURE__ */ K("div", {
|
|
541
541
|
className: "flex-1 min-w-0",
|
|
542
|
-
children: [/* @__PURE__ */
|
|
542
|
+
children: [/* @__PURE__ */ G("p", {
|
|
543
543
|
className: t("text-sm font-medium", e.done ? "text-text-secondary line-through" : "text-text-primary"),
|
|
544
544
|
children: e.label
|
|
545
|
-
}), e.hint && !e.done && /* @__PURE__ */
|
|
545
|
+
}), e.hint && !e.done && /* @__PURE__ */ G("p", {
|
|
546
546
|
className: "mt-0.5 text-xs text-text-secondary truncate",
|
|
547
547
|
children: e.hint
|
|
548
548
|
})]
|
|
549
549
|
}),
|
|
550
|
-
e.onClick && !e.done && /* @__PURE__ */
|
|
550
|
+
e.onClick && !e.done && /* @__PURE__ */ G(de, {
|
|
551
551
|
size: 16,
|
|
552
552
|
className: "flex-shrink-0 text-text-secondary"
|
|
553
553
|
})
|
|
@@ -556,106 +556,106 @@ var Re = [
|
|
|
556
556
|
})]
|
|
557
557
|
});
|
|
558
558
|
})(),
|
|
559
|
-
/* @__PURE__ */
|
|
559
|
+
/* @__PURE__ */ G("div", {
|
|
560
560
|
className: "border-b",
|
|
561
|
-
children: /* @__PURE__ */
|
|
561
|
+
children: /* @__PURE__ */ G("nav", {
|
|
562
562
|
className: "-mb-px flex gap-4 overflow-x-auto",
|
|
563
563
|
role: "tablist",
|
|
564
564
|
"aria-label": p("devportal.applicationSections", "Application sections"),
|
|
565
|
-
children:
|
|
565
|
+
children: Ie.filter((e) => !(Y && (e.id === "permissions" || e.id === "webhooks" || e.id === "delegations" || e.id === "playground") || !Y && e.id === "versions")).map((e) => {
|
|
566
566
|
let n = e.icon;
|
|
567
|
-
return /* @__PURE__ */
|
|
567
|
+
return /* @__PURE__ */ K("button", {
|
|
568
568
|
id: `application-tab-${e.id}`,
|
|
569
569
|
role: "tab",
|
|
570
570
|
"aria-selected": E === e.id,
|
|
571
571
|
"aria-controls": `application-panel-${e.id}`,
|
|
572
572
|
onClick: () => D(e.id),
|
|
573
573
|
className: t("flex items-center gap-2 border-b-2 px-1 py-3 text-sm font-medium transition-colors", E === e.id ? "border-primary text-primary" : "border-transparent text-text-secondary hover:text-text-primary hover:border-muted-foreground"),
|
|
574
|
-
children: [/* @__PURE__ */
|
|
574
|
+
children: [/* @__PURE__ */ G(n, { size: 16 }), e.label]
|
|
575
575
|
}, e.id);
|
|
576
576
|
})
|
|
577
577
|
})
|
|
578
578
|
}),
|
|
579
|
-
/* @__PURE__ */
|
|
579
|
+
/* @__PURE__ */ K("div", {
|
|
580
580
|
className: "mt-6",
|
|
581
581
|
id: `application-panel-${E}`,
|
|
582
582
|
role: "tabpanel",
|
|
583
583
|
"aria-labelledby": `application-tab-${E}`,
|
|
584
584
|
tabIndex: 0,
|
|
585
585
|
children: [
|
|
586
|
-
E === "overview" && /* @__PURE__ */
|
|
587
|
-
E === "permissions" && /* @__PURE__ */
|
|
588
|
-
E === "webhooks" && /* @__PURE__ */
|
|
589
|
-
appId:
|
|
590
|
-
onNavigate:
|
|
586
|
+
E === "overview" && /* @__PURE__ */ G(qe, { app: J }),
|
|
587
|
+
E === "permissions" && /* @__PURE__ */ G(st, { app: J }),
|
|
588
|
+
E === "webhooks" && /* @__PURE__ */ G(We, {
|
|
589
|
+
appId: J.id,
|
|
590
|
+
onNavigate: q
|
|
591
591
|
}),
|
|
592
|
-
E === "delegations" && /* @__PURE__ */
|
|
593
|
-
authAppId:
|
|
594
|
-
appName:
|
|
592
|
+
E === "delegations" && /* @__PURE__ */ G(Ge, {
|
|
593
|
+
authAppId: J.appId || void 0,
|
|
594
|
+
appName: J.name,
|
|
595
595
|
onGrantDelegation: () => F(!0),
|
|
596
|
-
onNavigate:
|
|
596
|
+
onNavigate: q
|
|
597
597
|
}),
|
|
598
|
-
E === "analytics" && /* @__PURE__ */
|
|
599
|
-
E === "playground" && /* @__PURE__ */
|
|
600
|
-
E === "store-listing" && /* @__PURE__ */
|
|
601
|
-
app:
|
|
598
|
+
E === "analytics" && /* @__PURE__ */ G(Ke, { appId: J.id }),
|
|
599
|
+
E === "playground" && /* @__PURE__ */ G(Qe, { app: J }),
|
|
600
|
+
E === "store-listing" && /* @__PURE__ */ G(it, {
|
|
601
|
+
app: J,
|
|
602
602
|
versionCount: L?.application?.versions?.totalCount ?? 0,
|
|
603
|
-
isPackageApp:
|
|
603
|
+
isPackageApp: Y,
|
|
604
604
|
pricingDone: X,
|
|
605
|
-
onNavigateToVersions:
|
|
605
|
+
onNavigateToVersions: Y ? () => D("versions") : void 0,
|
|
606
606
|
onNavigateToPricing: () => D("pricing"),
|
|
607
|
-
onNavigateToSubmission: () =>
|
|
607
|
+
onNavigateToSubmission: () => q(`/apps/${J.id}/store-submission`)
|
|
608
608
|
}),
|
|
609
|
-
E === "pricing" && /* @__PURE__ */
|
|
610
|
-
app:
|
|
609
|
+
E === "pricing" && /* @__PURE__ */ G(He, {
|
|
610
|
+
app: J,
|
|
611
611
|
platformFeeRate: Xe,
|
|
612
612
|
billingAccountLinked: Ze,
|
|
613
|
-
onNavigateToRevenue: () =>
|
|
613
|
+
onNavigateToRevenue: () => q("/revenue"),
|
|
614
614
|
isReadyToSubmit: Z
|
|
615
615
|
}),
|
|
616
|
-
E === "versions" && /* @__PURE__ */
|
|
617
|
-
appId:
|
|
618
|
-
onNavigate:
|
|
616
|
+
E === "versions" && /* @__PURE__ */ G(Ue, {
|
|
617
|
+
appId: J.id,
|
|
618
|
+
onNavigate: q,
|
|
619
619
|
pricingDone: X,
|
|
620
620
|
onNavigateToPricing: () => D("pricing")
|
|
621
621
|
})
|
|
622
622
|
]
|
|
623
623
|
}),
|
|
624
|
-
/* @__PURE__ */
|
|
624
|
+
/* @__PURE__ */ G(ne, {
|
|
625
625
|
open: O,
|
|
626
626
|
onOpenChange: k,
|
|
627
|
-
onConfirm:
|
|
627
|
+
onConfirm: Fe,
|
|
628
628
|
title: p("devportal.rotateAppSecret", "Rotate App Secret"),
|
|
629
629
|
description: p("devportal.rotateAppSecretDescription", "This will generate a new client secret and invalidate the current one. All existing integrations using the old secret will stop working immediately."),
|
|
630
630
|
confirmLabel: p("devportal.rotateSecret", "Rotate Secret"),
|
|
631
631
|
cancelLabel: p("devportal.cancel", "Cancel"),
|
|
632
632
|
variant: "warning",
|
|
633
|
-
loading:
|
|
633
|
+
loading: _e
|
|
634
634
|
}),
|
|
635
|
-
/* @__PURE__ */
|
|
635
|
+
/* @__PURE__ */ G(ne, {
|
|
636
636
|
open: te,
|
|
637
637
|
onOpenChange: A,
|
|
638
|
-
onConfirm:
|
|
638
|
+
onConfirm: Le,
|
|
639
639
|
title: p("devportal.deactivateApplication", "Deactivate Application"),
|
|
640
640
|
description: p("devportal.deactivateApplicationDescription", "This will deactivate the application. All OAuth clients, API keys, and webhooks associated with this app will stop functioning. This action can be reversed by reactivating the app."),
|
|
641
641
|
confirmLabel: p("devportal.deactivate", "Deactivate"),
|
|
642
642
|
cancelLabel: p("devportal.cancel", "Cancel"),
|
|
643
643
|
variant: "destructive",
|
|
644
|
-
loading:
|
|
644
|
+
loading: V
|
|
645
645
|
}),
|
|
646
|
-
/* @__PURE__ */
|
|
646
|
+
/* @__PURE__ */ G(re, {
|
|
647
647
|
open: se,
|
|
648
648
|
onOpenChange: F,
|
|
649
|
-
appId:
|
|
650
|
-
appName:
|
|
651
|
-
appScopes:
|
|
649
|
+
appId: J.appId || "",
|
|
650
|
+
appName: J.name,
|
|
651
|
+
appScopes: J.scopes?.map((e) => e.scope) ?? [],
|
|
652
652
|
onSuccess: () => {
|
|
653
653
|
F(!1);
|
|
654
654
|
}
|
|
655
655
|
})
|
|
656
656
|
]
|
|
657
657
|
});
|
|
658
|
-
},
|
|
658
|
+
}, J = .01, Y = (e) => e * J, Ve = (e) => Math.round(e / J), He = ({ app: e, platformFeeRate: n, billingAccountLinked: r, onNavigateToRevenue: i, isReadyToSubmit: a = !1 }) => {
|
|
659
659
|
let { t: o } = P(), s = (e, t) => {
|
|
660
660
|
let n = o(e);
|
|
661
661
|
return n === e ? t : n;
|
|
@@ -695,33 +695,33 @@ var Re = [
|
|
|
695
695
|
} finally {
|
|
696
696
|
f(!1);
|
|
697
697
|
}
|
|
698
|
-
}, v = l.pricingType !== "FREE", y = parseInt(l.price, 10), b = v && !isNaN(y) && y > 0, x = b ?
|
|
698
|
+
}, v = l.pricingType !== "FREE", y = parseInt(l.price, 10), b = v && !isNaN(y) && y > 0, x = b ? Y(y) : 0, S = b ? Math.round(y * n) : 0, C = Y(S), w = b ? y - S : 0, ee = Y(w), E = (e) => "$" + e.toLocaleString("en-US", {
|
|
699
699
|
minimumFractionDigits: 2,
|
|
700
700
|
maximumFractionDigits: 2
|
|
701
701
|
}), D = (e) => e.toLocaleString("en-US") + " cr";
|
|
702
|
-
return /* @__PURE__ */
|
|
702
|
+
return /* @__PURE__ */ K("div", {
|
|
703
703
|
className: "space-y-8",
|
|
704
704
|
children: [
|
|
705
|
-
/* @__PURE__ */
|
|
705
|
+
/* @__PURE__ */ K("div", {
|
|
706
706
|
className: "flex items-start gap-3 rounded-lg border border-border-subtle bg-bg-sunken px-4 py-3",
|
|
707
|
-
children: [/* @__PURE__ */
|
|
707
|
+
children: [/* @__PURE__ */ G(L, {
|
|
708
708
|
size: 16,
|
|
709
709
|
className: "mt-0.5 shrink-0 text-primary"
|
|
710
|
-
}), /* @__PURE__ */
|
|
710
|
+
}), /* @__PURE__ */ K("p", {
|
|
711
711
|
className: "text-sm text-text-secondary",
|
|
712
712
|
children: [
|
|
713
|
-
/* @__PURE__ */
|
|
713
|
+
/* @__PURE__ */ G("span", {
|
|
714
714
|
className: "font-medium text-text-primary",
|
|
715
715
|
children: "Platform credits"
|
|
716
716
|
}),
|
|
717
717
|
" ",
|
|
718
718
|
"are the currency of the Burdenoff marketplace.",
|
|
719
719
|
" ",
|
|
720
|
-
/* @__PURE__ */
|
|
720
|
+
/* @__PURE__ */ K("span", {
|
|
721
721
|
className: "font-medium",
|
|
722
722
|
children: [
|
|
723
723
|
"1 credit = ",
|
|
724
|
-
E(
|
|
724
|
+
E(J),
|
|
725
725
|
" USD."
|
|
726
726
|
]
|
|
727
727
|
}),
|
|
@@ -730,41 +730,41 @@ var Re = [
|
|
|
730
730
|
]
|
|
731
731
|
})]
|
|
732
732
|
}),
|
|
733
|
-
/* @__PURE__ */
|
|
733
|
+
/* @__PURE__ */ K("div", {
|
|
734
734
|
className: "space-y-3",
|
|
735
|
-
children: [/* @__PURE__ */
|
|
735
|
+
children: [/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("h2", {
|
|
736
736
|
className: "text-lg font-semibold",
|
|
737
737
|
children: s("devportal.howMonetizationWorks", "How App Monetization Works")
|
|
738
|
-
}), /* @__PURE__ */
|
|
738
|
+
}), /* @__PURE__ */ G("p", {
|
|
739
739
|
className: "mt-1 text-sm text-text-secondary",
|
|
740
740
|
children: s("devportal.monetizationDesc", "Earn revenue when users install or purchase your app. Here's exactly how the money flows.")
|
|
741
|
-
})] }), /* @__PURE__ */
|
|
741
|
+
})] }), /* @__PURE__ */ K("div", {
|
|
742
742
|
className: "grid gap-4 sm:grid-cols-3",
|
|
743
743
|
children: [
|
|
744
|
-
/* @__PURE__ */
|
|
744
|
+
/* @__PURE__ */ K("div", {
|
|
745
745
|
className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
|
|
746
|
-
children: [/* @__PURE__ */
|
|
746
|
+
children: [/* @__PURE__ */ G("div", {
|
|
747
747
|
className: "flex h-9 w-9 items-center justify-center rounded-lg bg-status-success-bg-subtle",
|
|
748
|
-
children: /* @__PURE__ */
|
|
748
|
+
children: /* @__PURE__ */ G(Ce, {
|
|
749
749
|
size: 18,
|
|
750
750
|
className: "text-status-success-text"
|
|
751
751
|
})
|
|
752
|
-
}), /* @__PURE__ */
|
|
752
|
+
}), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ K("p", {
|
|
753
753
|
className: "font-semibold",
|
|
754
754
|
children: [(100 - n * 100).toFixed(0), "% revenue share"]
|
|
755
|
-
}), /* @__PURE__ */
|
|
755
|
+
}), /* @__PURE__ */ K("p", {
|
|
756
756
|
className: "mt-1 text-sm text-text-secondary",
|
|
757
757
|
children: [
|
|
758
758
|
"You keep",
|
|
759
759
|
" ",
|
|
760
|
-
/* @__PURE__ */
|
|
760
|
+
/* @__PURE__ */ K("span", {
|
|
761
761
|
className: "font-medium text-status-success-text",
|
|
762
762
|
children: [(100 - n * 100).toFixed(0), "%"]
|
|
763
763
|
}),
|
|
764
764
|
" ",
|
|
765
765
|
"of every sale in credits. The platform retains a",
|
|
766
766
|
" ",
|
|
767
|
-
/* @__PURE__ */
|
|
767
|
+
/* @__PURE__ */ K("span", {
|
|
768
768
|
className: "font-medium",
|
|
769
769
|
children: [(n * 100).toFixed(0), "%"]
|
|
770
770
|
}),
|
|
@@ -773,28 +773,28 @@ var Re = [
|
|
|
773
773
|
]
|
|
774
774
|
})] })]
|
|
775
775
|
}),
|
|
776
|
-
/* @__PURE__ */
|
|
776
|
+
/* @__PURE__ */ K("div", {
|
|
777
777
|
className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
|
|
778
|
-
children: [/* @__PURE__ */
|
|
778
|
+
children: [/* @__PURE__ */ G("div", {
|
|
779
779
|
className: "flex h-9 w-9 items-center justify-center rounded-lg bg-action-primary-bg/10",
|
|
780
|
-
children: /* @__PURE__ */
|
|
780
|
+
children: /* @__PURE__ */ G(Te, {
|
|
781
781
|
size: 18,
|
|
782
782
|
className: "text-primary"
|
|
783
783
|
})
|
|
784
|
-
}), /* @__PURE__ */
|
|
784
|
+
}), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
785
785
|
className: "font-semibold",
|
|
786
786
|
children: "Credits → cash via billing"
|
|
787
|
-
}), /* @__PURE__ */
|
|
787
|
+
}), /* @__PURE__ */ K("p", {
|
|
788
788
|
className: "mt-1 text-sm text-text-secondary",
|
|
789
789
|
children: [
|
|
790
790
|
"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",
|
|
791
791
|
" ",
|
|
792
|
-
i ? /* @__PURE__ */
|
|
792
|
+
i ? /* @__PURE__ */ G("button", {
|
|
793
793
|
type: "button",
|
|
794
794
|
onClick: i,
|
|
795
795
|
className: "font-medium text-primary underline-offset-2 hover:underline",
|
|
796
796
|
children: "Revenue page"
|
|
797
|
-
}) : /* @__PURE__ */
|
|
797
|
+
}) : /* @__PURE__ */ G("span", {
|
|
798
798
|
className: "font-medium text-primary",
|
|
799
799
|
children: "Revenue page"
|
|
800
800
|
}),
|
|
@@ -802,18 +802,18 @@ var Re = [
|
|
|
802
802
|
]
|
|
803
803
|
})] })]
|
|
804
804
|
}),
|
|
805
|
-
/* @__PURE__ */
|
|
805
|
+
/* @__PURE__ */ K("div", {
|
|
806
806
|
className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
|
|
807
|
-
children: [/* @__PURE__ */
|
|
807
|
+
children: [/* @__PURE__ */ G("div", {
|
|
808
808
|
className: "flex h-9 w-9 items-center justify-center rounded-lg bg-status-warning-bg-subtle",
|
|
809
|
-
children: /* @__PURE__ */
|
|
809
|
+
children: /* @__PURE__ */ G(he, {
|
|
810
810
|
size: 18,
|
|
811
811
|
className: "text-status-warning-text"
|
|
812
812
|
})
|
|
813
|
-
}), /* @__PURE__ */
|
|
813
|
+
}), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
814
814
|
className: "font-semibold",
|
|
815
815
|
children: "Reach the full marketplace"
|
|
816
|
-
}), /* @__PURE__ */
|
|
816
|
+
}), /* @__PURE__ */ G("p", {
|
|
817
817
|
className: "mt-1 text-sm text-text-secondary",
|
|
818
818
|
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."
|
|
819
819
|
})] })]
|
|
@@ -821,52 +821,52 @@ var Re = [
|
|
|
821
821
|
]
|
|
822
822
|
})]
|
|
823
823
|
}),
|
|
824
|
-
/* @__PURE__ */
|
|
824
|
+
/* @__PURE__ */ K("div", {
|
|
825
825
|
className: "space-y-4",
|
|
826
826
|
children: [
|
|
827
|
-
/* @__PURE__ */
|
|
827
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("h3", {
|
|
828
828
|
className: "text-base font-semibold",
|
|
829
829
|
children: s("devportal.setPricingTitle", "Set Your Price")
|
|
830
|
-
}), /* @__PURE__ */
|
|
830
|
+
}), /* @__PURE__ */ K("p", {
|
|
831
831
|
className: "mt-0.5 text-sm text-text-secondary",
|
|
832
832
|
children: [
|
|
833
833
|
"Choose ",
|
|
834
|
-
/* @__PURE__ */
|
|
834
|
+
/* @__PURE__ */ G("strong", { children: "Free" }),
|
|
835
835
|
" to maximise installs, or",
|
|
836
836
|
" ",
|
|
837
|
-
/* @__PURE__ */
|
|
837
|
+
/* @__PURE__ */ G("strong", { children: "Paid" }),
|
|
838
838
|
" to earn credits on every install. Paid apps require a linked billing account before publishing."
|
|
839
839
|
]
|
|
840
840
|
})] }),
|
|
841
|
-
/* @__PURE__ */
|
|
841
|
+
/* @__PURE__ */ G("div", {
|
|
842
842
|
className: "flex flex-wrap gap-2",
|
|
843
|
-
children: et.map((e) => /* @__PURE__ */
|
|
843
|
+
children: et.map((e) => /* @__PURE__ */ G("button", {
|
|
844
844
|
type: "button",
|
|
845
845
|
onClick: () => h("pricingType", e.value),
|
|
846
846
|
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"),
|
|
847
847
|
children: e.label
|
|
848
848
|
}, e.value))
|
|
849
849
|
}),
|
|
850
|
-
v && /* @__PURE__ */
|
|
850
|
+
v && /* @__PURE__ */ K("div", {
|
|
851
851
|
className: "space-y-4",
|
|
852
852
|
children: [
|
|
853
|
-
/* @__PURE__ */
|
|
853
|
+
/* @__PURE__ */ K("div", {
|
|
854
854
|
className: "max-w-xs",
|
|
855
855
|
children: [
|
|
856
|
-
/* @__PURE__ */
|
|
856
|
+
/* @__PURE__ */ K("label", {
|
|
857
857
|
className: "mb-1.5 block text-sm font-medium",
|
|
858
858
|
children: [
|
|
859
859
|
"Listing price",
|
|
860
860
|
" ",
|
|
861
|
-
/* @__PURE__ */
|
|
861
|
+
/* @__PURE__ */ G("span", {
|
|
862
862
|
className: "text-text-tertiary font-normal",
|
|
863
863
|
children: "(credits)"
|
|
864
864
|
})
|
|
865
865
|
]
|
|
866
866
|
}),
|
|
867
|
-
/* @__PURE__ */
|
|
867
|
+
/* @__PURE__ */ K("div", {
|
|
868
868
|
className: "relative flex items-center",
|
|
869
|
-
children: [/* @__PURE__ */
|
|
869
|
+
children: [/* @__PURE__ */ G("input", {
|
|
870
870
|
type: "number",
|
|
871
871
|
min: 1,
|
|
872
872
|
step: 1,
|
|
@@ -874,69 +874,69 @@ var Re = [
|
|
|
874
874
|
onChange: (e) => h("price", e.target.value),
|
|
875
875
|
placeholder: "e.g. 1000",
|
|
876
876
|
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"
|
|
877
|
-
}), /* @__PURE__ */
|
|
877
|
+
}), /* @__PURE__ */ G("span", {
|
|
878
878
|
className: "pointer-events-none absolute right-3 text-xs text-text-tertiary",
|
|
879
879
|
children: "credits"
|
|
880
880
|
})]
|
|
881
881
|
}),
|
|
882
|
-
b && /* @__PURE__ */
|
|
882
|
+
b && /* @__PURE__ */ K("p", {
|
|
883
883
|
className: "mt-1.5 text-xs text-text-secondary",
|
|
884
884
|
children: [
|
|
885
885
|
"≈ ",
|
|
886
886
|
E(x),
|
|
887
887
|
" USD at the current credit rate (1 cr =",
|
|
888
888
|
" ",
|
|
889
|
-
E(
|
|
889
|
+
E(J),
|
|
890
890
|
")"
|
|
891
891
|
]
|
|
892
892
|
}),
|
|
893
|
-
/* @__PURE__ */
|
|
893
|
+
/* @__PURE__ */ G("p", {
|
|
894
894
|
className: "mt-1 text-xs text-text-tertiary",
|
|
895
895
|
children: s("devportal.priceHint", "Set the number of credits a buyer spends to install your app")
|
|
896
896
|
})
|
|
897
897
|
]
|
|
898
898
|
}),
|
|
899
|
-
/* @__PURE__ */
|
|
899
|
+
/* @__PURE__ */ K("div", {
|
|
900
900
|
className: "flex items-center gap-2 text-xs text-text-secondary",
|
|
901
|
-
children: [/* @__PURE__ */
|
|
901
|
+
children: [/* @__PURE__ */ G("span", { children: "Quick convert:" }), [
|
|
902
902
|
5,
|
|
903
903
|
10,
|
|
904
904
|
25,
|
|
905
905
|
50
|
|
906
|
-
].map((e) => /* @__PURE__ */
|
|
906
|
+
].map((e) => /* @__PURE__ */ K("button", {
|
|
907
907
|
type: "button",
|
|
908
|
-
onClick: () => h("price", String(
|
|
908
|
+
onClick: () => h("price", String(Ve(e))),
|
|
909
909
|
className: "rounded border border-border-subtle px-2 py-0.5 hover:bg-bg-sunken transition-colors",
|
|
910
910
|
children: [
|
|
911
911
|
"$",
|
|
912
912
|
e,
|
|
913
913
|
" = ",
|
|
914
|
-
|
|
914
|
+
Ve(e).toLocaleString(),
|
|
915
915
|
" cr"
|
|
916
916
|
]
|
|
917
917
|
}, e))]
|
|
918
918
|
}),
|
|
919
|
-
b && /* @__PURE__ */
|
|
919
|
+
b && /* @__PURE__ */ K("div", {
|
|
920
920
|
className: "rounded-lg border border-border-subtle bg-bg-sunken p-4 space-y-3",
|
|
921
921
|
children: [
|
|
922
|
-
/* @__PURE__ */
|
|
922
|
+
/* @__PURE__ */ G("p", {
|
|
923
923
|
className: "text-xs font-semibold uppercase tracking-wide text-text-secondary",
|
|
924
924
|
children: s("devportal.revenueBreakdown", "Revenue Breakdown per Sale")
|
|
925
925
|
}),
|
|
926
|
-
/* @__PURE__ */
|
|
926
|
+
/* @__PURE__ */ K("div", {
|
|
927
927
|
className: "space-y-2 text-sm",
|
|
928
928
|
children: [
|
|
929
|
-
/* @__PURE__ */
|
|
929
|
+
/* @__PURE__ */ K("div", {
|
|
930
930
|
className: "flex items-center justify-between",
|
|
931
|
-
children: [/* @__PURE__ */
|
|
931
|
+
children: [/* @__PURE__ */ G("span", {
|
|
932
932
|
className: "text-text-secondary",
|
|
933
933
|
children: "Buyer pays"
|
|
934
|
-
}), /* @__PURE__ */
|
|
934
|
+
}), /* @__PURE__ */ K("span", {
|
|
935
935
|
className: "font-medium tabular-nums",
|
|
936
936
|
children: [
|
|
937
937
|
D(y),
|
|
938
938
|
" ",
|
|
939
|
-
/* @__PURE__ */
|
|
939
|
+
/* @__PURE__ */ K("span", {
|
|
940
940
|
className: "text-text-tertiary text-xs",
|
|
941
941
|
children: [
|
|
942
942
|
"(",
|
|
@@ -947,12 +947,12 @@ var Re = [
|
|
|
947
947
|
]
|
|
948
948
|
})]
|
|
949
949
|
}),
|
|
950
|
-
/* @__PURE__ */
|
|
950
|
+
/* @__PURE__ */ K("div", {
|
|
951
951
|
className: "flex items-center justify-between text-status-error-text",
|
|
952
|
-
children: [/* @__PURE__ */
|
|
952
|
+
children: [/* @__PURE__ */ K("span", { children: [
|
|
953
953
|
"Platform fee",
|
|
954
954
|
" ",
|
|
955
|
-
/* @__PURE__ */
|
|
955
|
+
/* @__PURE__ */ K("span", {
|
|
956
956
|
className: "opacity-70",
|
|
957
957
|
children: [
|
|
958
958
|
"(",
|
|
@@ -960,13 +960,13 @@ var Re = [
|
|
|
960
960
|
"%)"
|
|
961
961
|
]
|
|
962
962
|
})
|
|
963
|
-
] }), /* @__PURE__ */
|
|
963
|
+
] }), /* @__PURE__ */ K("span", {
|
|
964
964
|
className: "tabular-nums",
|
|
965
965
|
children: [
|
|
966
966
|
"− ",
|
|
967
967
|
D(S),
|
|
968
968
|
" ",
|
|
969
|
-
/* @__PURE__ */
|
|
969
|
+
/* @__PURE__ */ K("span", {
|
|
970
970
|
className: "text-xs opacity-70",
|
|
971
971
|
children: [
|
|
972
972
|
"(",
|
|
@@ -977,14 +977,14 @@ var Re = [
|
|
|
977
977
|
]
|
|
978
978
|
})]
|
|
979
979
|
}),
|
|
980
|
-
/* @__PURE__ */
|
|
980
|
+
/* @__PURE__ */ K("div", {
|
|
981
981
|
className: "flex items-center justify-between border-t border-border-subtle pt-2 font-semibold text-status-success-text",
|
|
982
|
-
children: [/* @__PURE__ */
|
|
982
|
+
children: [/* @__PURE__ */ G("span", { children: "You earn" }), /* @__PURE__ */ K("span", {
|
|
983
983
|
className: "tabular-nums",
|
|
984
984
|
children: [
|
|
985
985
|
D(w),
|
|
986
986
|
" ",
|
|
987
|
-
/* @__PURE__ */
|
|
987
|
+
/* @__PURE__ */ K("span", {
|
|
988
988
|
className: "text-sm font-normal",
|
|
989
989
|
children: ["≈ ", E(ee)]
|
|
990
990
|
})
|
|
@@ -993,29 +993,29 @@ var Re = [
|
|
|
993
993
|
})
|
|
994
994
|
]
|
|
995
995
|
}),
|
|
996
|
-
/* @__PURE__ */
|
|
996
|
+
/* @__PURE__ */ G("p", {
|
|
997
997
|
className: "text-xs text-text-tertiary",
|
|
998
998
|
children: "Credits are deposited to your billing account on each sale. Cash withdrawal is subject to platform terms and minimum payout thresholds."
|
|
999
999
|
})
|
|
1000
1000
|
]
|
|
1001
1001
|
}),
|
|
1002
|
-
!r && /* @__PURE__ */
|
|
1002
|
+
!r && /* @__PURE__ */ K("div", {
|
|
1003
1003
|
className: "flex items-start gap-3 rounded-lg border border-status-warning-bg bg-status-warning-bg-subtle p-4",
|
|
1004
|
-
children: [/* @__PURE__ */
|
|
1004
|
+
children: [/* @__PURE__ */ G(ce, {
|
|
1005
1005
|
size: 16,
|
|
1006
1006
|
className: "mt-0.5 shrink-0 text-status-warning-text"
|
|
1007
|
-
}), /* @__PURE__ */
|
|
1007
|
+
}), /* @__PURE__ */ K("div", {
|
|
1008
1008
|
className: "flex-1 min-w-0",
|
|
1009
1009
|
children: [
|
|
1010
|
-
/* @__PURE__ */
|
|
1010
|
+
/* @__PURE__ */ G("p", {
|
|
1011
1011
|
className: "text-sm font-medium text-status-warning-text",
|
|
1012
1012
|
children: s("devportal.billingAccountRequired", "Billing account required to publish")
|
|
1013
1013
|
}),
|
|
1014
|
-
/* @__PURE__ */
|
|
1014
|
+
/* @__PURE__ */ G("p", {
|
|
1015
1015
|
className: "mt-0.5 text-xs text-text-secondary",
|
|
1016
1016
|
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."
|
|
1017
1017
|
}),
|
|
1018
|
-
i && /* @__PURE__ */
|
|
1018
|
+
i && /* @__PURE__ */ G("button", {
|
|
1019
1019
|
type: "button",
|
|
1020
1020
|
onClick: i,
|
|
1021
1021
|
className: "mt-2 text-xs font-medium text-primary hover:underline underline-offset-2",
|
|
@@ -1028,23 +1028,23 @@ var Re = [
|
|
|
1028
1028
|
})
|
|
1029
1029
|
]
|
|
1030
1030
|
}),
|
|
1031
|
-
/* @__PURE__ */
|
|
1031
|
+
/* @__PURE__ */ K("div", {
|
|
1032
1032
|
className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
|
|
1033
|
-
children: [/* @__PURE__ */
|
|
1033
|
+
children: [/* @__PURE__ */ G("h3", {
|
|
1034
1034
|
className: "text-sm font-semibold",
|
|
1035
1035
|
children: s("devportal.termsTitle", "Developer & Marketplace Terms")
|
|
1036
|
-
}), /* @__PURE__ */
|
|
1036
|
+
}), /* @__PURE__ */ K("ul", {
|
|
1037
1037
|
className: "space-y-2 text-sm text-text-secondary",
|
|
1038
1038
|
children: [
|
|
1039
|
-
/* @__PURE__ */
|
|
1039
|
+
/* @__PURE__ */ K("li", {
|
|
1040
1040
|
className: "flex items-start gap-2",
|
|
1041
|
-
children: [/* @__PURE__ */
|
|
1041
|
+
children: [/* @__PURE__ */ G(I, {
|
|
1042
1042
|
size: 14,
|
|
1043
1043
|
className: "mt-0.5 shrink-0 text-status-success-text"
|
|
1044
|
-
}), /* @__PURE__ */
|
|
1044
|
+
}), /* @__PURE__ */ K("span", { children: [
|
|
1045
1045
|
"By publishing to the marketplace you agree to the",
|
|
1046
1046
|
" ",
|
|
1047
|
-
/* @__PURE__ */
|
|
1047
|
+
/* @__PURE__ */ G("a", {
|
|
1048
1048
|
href: "/legal/developer-terms",
|
|
1049
1049
|
target: "_blank",
|
|
1050
1050
|
rel: "noopener noreferrer",
|
|
@@ -1054,29 +1054,29 @@ var Re = [
|
|
|
1054
1054
|
"."
|
|
1055
1055
|
] })]
|
|
1056
1056
|
}),
|
|
1057
|
-
/* @__PURE__ */
|
|
1057
|
+
/* @__PURE__ */ K("li", {
|
|
1058
1058
|
className: "flex items-start gap-2",
|
|
1059
|
-
children: [/* @__PURE__ */
|
|
1059
|
+
children: [/* @__PURE__ */ G(I, {
|
|
1060
1060
|
size: 14,
|
|
1061
1061
|
className: "mt-0.5 shrink-0 text-status-success-text"
|
|
1062
|
-
}), /* @__PURE__ */
|
|
1062
|
+
}), /* @__PURE__ */ G("span", { children: "All prices are in platform credits. The USD equivalent is indicative only and may vary with the current credit rate." })]
|
|
1063
1063
|
}),
|
|
1064
|
-
/* @__PURE__ */
|
|
1064
|
+
/* @__PURE__ */ K("li", {
|
|
1065
1065
|
className: "flex items-start gap-2",
|
|
1066
|
-
children: [/* @__PURE__ */
|
|
1066
|
+
children: [/* @__PURE__ */ G(I, {
|
|
1067
1067
|
size: 14,
|
|
1068
1068
|
className: "mt-0.5 shrink-0 text-status-success-text"
|
|
1069
|
-
}), /* @__PURE__ */
|
|
1069
|
+
}), /* @__PURE__ */ G("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." })]
|
|
1070
1070
|
}),
|
|
1071
|
-
/* @__PURE__ */
|
|
1071
|
+
/* @__PURE__ */ K("li", {
|
|
1072
1072
|
className: "flex items-start gap-2",
|
|
1073
|
-
children: [/* @__PURE__ */
|
|
1073
|
+
children: [/* @__PURE__ */ G(I, {
|
|
1074
1074
|
size: 14,
|
|
1075
1075
|
className: "mt-0.5 shrink-0 text-status-success-text"
|
|
1076
|
-
}), /* @__PURE__ */
|
|
1076
|
+
}), /* @__PURE__ */ K("span", { children: [
|
|
1077
1077
|
"The platform reserves the right to adjust the credit rate, fee structure, or payout schedule with 30 days notice. See the",
|
|
1078
1078
|
" ",
|
|
1079
|
-
/* @__PURE__ */
|
|
1079
|
+
/* @__PURE__ */ G("a", {
|
|
1080
1080
|
href: "/legal/marketplace-terms",
|
|
1081
1081
|
target: "_blank",
|
|
1082
1082
|
rel: "noopener noreferrer",
|
|
@@ -1090,26 +1090,26 @@ var Re = [
|
|
|
1090
1090
|
]
|
|
1091
1091
|
})]
|
|
1092
1092
|
}),
|
|
1093
|
-
/* @__PURE__ */
|
|
1093
|
+
/* @__PURE__ */ K("div", {
|
|
1094
1094
|
className: "border-t border-border-subtle pt-6 space-y-4",
|
|
1095
|
-
children: [/* @__PURE__ */
|
|
1095
|
+
children: [/* @__PURE__ */ G("button", {
|
|
1096
1096
|
type: "button",
|
|
1097
1097
|
onClick: () => void g(),
|
|
1098
1098
|
disabled: d,
|
|
1099
1099
|
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",
|
|
1100
|
-
children: d ? /* @__PURE__ */
|
|
1100
|
+
children: d ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(B, {
|
|
1101
1101
|
size: 16,
|
|
1102
1102
|
className: "animate-spin"
|
|
1103
|
-
}), s("devportal.saving", "Saving…")] }) : /* @__PURE__ */
|
|
1104
|
-
}), a && /* @__PURE__ */
|
|
1103
|
+
}), s("devportal.saving", "Saving…")] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(L, { size: 16 }), s("devportal.savePricing", "Save Pricing")] })
|
|
1104
|
+
}), a && /* @__PURE__ */ K("div", {
|
|
1105
1105
|
className: "flex items-start gap-3 rounded-lg border border-status-success-bg bg-status-success-bg-subtle px-4 py-3",
|
|
1106
|
-
children: [/* @__PURE__ */
|
|
1106
|
+
children: [/* @__PURE__ */ G(I, {
|
|
1107
1107
|
size: 16,
|
|
1108
1108
|
className: "mt-0.5 shrink-0 text-status-success-text"
|
|
1109
|
-
}), /* @__PURE__ */
|
|
1109
|
+
}), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1110
1110
|
className: "text-sm font-medium text-status-success-text",
|
|
1111
1111
|
children: s("devportal.allSetToSubmit", "You're all set!")
|
|
1112
|
-
}), /* @__PURE__ */
|
|
1112
|
+
}), /* @__PURE__ */ G("p", {
|
|
1113
1113
|
className: "mt-0.5 text-xs text-text-secondary",
|
|
1114
1114
|
children: s("devportal.allSetDesc", "Store listing, versions, and pricing are complete. Head to the top of the page and click Submit for Review.")
|
|
1115
1115
|
})] })]
|
|
@@ -1125,115 +1125,142 @@ var Re = [
|
|
|
1125
1125
|
variables: { applicationId: e },
|
|
1126
1126
|
fetchPolicy: "cache-and-network"
|
|
1127
1127
|
});
|
|
1128
|
-
if (u) return /* @__PURE__ */
|
|
1129
|
-
if (d) return /* @__PURE__ */
|
|
1128
|
+
if (u) return /* @__PURE__ */ G(Re, { message: s("devportal.loadingVersions", "Loading versions…") });
|
|
1129
|
+
if (d) return /* @__PURE__ */ G(ze, { message: d.message });
|
|
1130
1130
|
let f = (l?.application?.versions?.edges ?? []).map((e) => e.node);
|
|
1131
|
-
return /* @__PURE__ */
|
|
1131
|
+
return /* @__PURE__ */ K("div", {
|
|
1132
1132
|
className: "space-y-4",
|
|
1133
1133
|
children: [
|
|
1134
|
-
/* @__PURE__ */
|
|
1134
|
+
/* @__PURE__ */ K("div", {
|
|
1135
1135
|
className: "flex items-center justify-between",
|
|
1136
|
-
children: [/* @__PURE__ */
|
|
1136
|
+
children: [/* @__PURE__ */ K("p", {
|
|
1137
1137
|
className: "text-sm text-text-secondary",
|
|
1138
1138
|
children: [
|
|
1139
1139
|
f.length,
|
|
1140
1140
|
" ",
|
|
1141
1141
|
f.length === 1 ? s("devportal.version", "version") : s("devportal.versions", "versions")
|
|
1142
1142
|
]
|
|
1143
|
-
}), /* @__PURE__ */
|
|
1143
|
+
}), /* @__PURE__ */ K("button", {
|
|
1144
1144
|
onClick: () => n(`/apps/${e}/versions`),
|
|
1145
1145
|
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",
|
|
1146
|
-
children: [/* @__PURE__ */
|
|
1146
|
+
children: [/* @__PURE__ */ G(U, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
|
|
1147
1147
|
})]
|
|
1148
1148
|
}),
|
|
1149
|
-
f.length > 0 ? /* @__PURE__ */
|
|
1149
|
+
f.length > 0 ? /* @__PURE__ */ G("div", {
|
|
1150
1150
|
className: "overflow-hidden rounded-lg border border-border-subtle",
|
|
1151
|
-
children: /* @__PURE__ */
|
|
1151
|
+
children: /* @__PURE__ */ K("table", {
|
|
1152
1152
|
className: "w-full text-sm",
|
|
1153
|
-
children: [/* @__PURE__ */
|
|
1153
|
+
children: [/* @__PURE__ */ G("thead", { children: /* @__PURE__ */ K("tr", {
|
|
1154
1154
|
className: "border-b border-border-subtle bg-bg-sunken/50",
|
|
1155
1155
|
children: [
|
|
1156
|
-
/* @__PURE__ */
|
|
1156
|
+
/* @__PURE__ */ G("th", {
|
|
1157
1157
|
className: "px-4 py-3 text-left font-medium text-text-secondary",
|
|
1158
1158
|
children: s("devportal.version", "Version")
|
|
1159
1159
|
}),
|
|
1160
|
-
/* @__PURE__ */
|
|
1160
|
+
/* @__PURE__ */ G("th", {
|
|
1161
1161
|
className: "px-4 py-3 text-left font-medium text-text-secondary",
|
|
1162
1162
|
children: s("devportal.status", "Status")
|
|
1163
1163
|
}),
|
|
1164
|
-
/* @__PURE__ */
|
|
1164
|
+
/* @__PURE__ */ G("th", {
|
|
1165
1165
|
className: "px-4 py-3 text-left font-medium text-text-secondary",
|
|
1166
1166
|
children: s("devportal.released", "Released")
|
|
1167
1167
|
}),
|
|
1168
|
-
/* @__PURE__ */
|
|
1168
|
+
/* @__PURE__ */ G("th", {
|
|
1169
1169
|
className: "px-4 py-3 text-left font-medium text-text-secondary",
|
|
1170
1170
|
children: s("devportal.flags", "Flags")
|
|
1171
1171
|
})
|
|
1172
1172
|
]
|
|
1173
|
-
}) }), /* @__PURE__ */
|
|
1173
|
+
}) }), /* @__PURE__ */ G("tbody", {
|
|
1174
1174
|
className: "divide-y divide-border-subtle",
|
|
1175
|
-
children: f.map((e) => /* @__PURE__ */
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1175
|
+
children: f.map((e) => /* @__PURE__ */ K(W, { children: [
|
|
1176
|
+
/* @__PURE__ */ K("tr", {
|
|
1177
|
+
className: "hover:bg-bg-sunken/30 transition-colors",
|
|
1178
|
+
children: [
|
|
1179
|
+
/* @__PURE__ */ G("td", {
|
|
1180
|
+
className: "px-4 py-3 font-mono font-medium",
|
|
1181
|
+
children: e.version
|
|
1182
|
+
}),
|
|
1183
|
+
/* @__PURE__ */ G("td", {
|
|
1184
|
+
className: "px-4 py-3",
|
|
1185
|
+
children: /* @__PURE__ */ G("span", {
|
|
1186
|
+
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"),
|
|
1187
|
+
children: e.status === "pending_review" ? "In Review" : e.status
|
|
1188
|
+
})
|
|
1189
|
+
}),
|
|
1190
|
+
/* @__PURE__ */ G("td", {
|
|
1191
|
+
className: "px-4 py-3 text-text-secondary",
|
|
1192
|
+
children: e.publishedAt ? new Date(e.publishedAt).toLocaleDateString() : new Date(e.createdAt).toLocaleDateString()
|
|
1193
|
+
}),
|
|
1194
|
+
/* @__PURE__ */ G("td", {
|
|
1195
|
+
className: "px-4 py-3",
|
|
1196
|
+
children: /* @__PURE__ */ K("div", {
|
|
1197
|
+
className: "flex gap-1.5",
|
|
1198
|
+
children: [e.isLatest && /* @__PURE__ */ G("span", {
|
|
1199
|
+
className: "rounded-full bg-action-primary-bg/10 px-2 py-0.5 text-xs text-primary font-medium",
|
|
1200
|
+
children: "latest"
|
|
1201
|
+
}), e.isStable && /* @__PURE__ */ G("span", {
|
|
1202
|
+
className: "rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-xs text-status-success-text font-medium",
|
|
1203
|
+
children: "stable"
|
|
1204
|
+
})]
|
|
1205
|
+
})
|
|
1187
1206
|
})
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
className: "px-4 py-
|
|
1195
|
-
children: /* @__PURE__ */
|
|
1196
|
-
className: "
|
|
1197
|
-
children: [
|
|
1198
|
-
className: "
|
|
1199
|
-
children: "
|
|
1200
|
-
}), e.
|
|
1201
|
-
className: "rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-xs text-status-success-text font-medium",
|
|
1202
|
-
children: "stable"
|
|
1203
|
-
})]
|
|
1207
|
+
]
|
|
1208
|
+
}, e.id),
|
|
1209
|
+
e.status === "rejected" && e.reviewNotes && /* @__PURE__ */ G("tr", {
|
|
1210
|
+
className: "bg-status-error-bg-subtle/40",
|
|
1211
|
+
children: /* @__PURE__ */ G("td", {
|
|
1212
|
+
colSpan: 4,
|
|
1213
|
+
className: "px-4 py-2",
|
|
1214
|
+
children: /* @__PURE__ */ K("p", {
|
|
1215
|
+
className: "text-xs text-status-error-text",
|
|
1216
|
+
children: [/* @__PURE__ */ K("span", {
|
|
1217
|
+
className: "font-semibold",
|
|
1218
|
+
children: ["Review feedback:", " "]
|
|
1219
|
+
}), e.reviewNotes]
|
|
1204
1220
|
})
|
|
1205
1221
|
})
|
|
1206
|
-
|
|
1207
|
-
|
|
1222
|
+
}, `${e.id}-notes`),
|
|
1223
|
+
e.status === "pending_review" && /* @__PURE__ */ G("tr", {
|
|
1224
|
+
className: "bg-status-info-bg-subtle/30",
|
|
1225
|
+
children: /* @__PURE__ */ G("td", {
|
|
1226
|
+
colSpan: 4,
|
|
1227
|
+
className: "px-4 py-2",
|
|
1228
|
+
children: /* @__PURE__ */ G("p", {
|
|
1229
|
+
className: "text-xs text-status-info-text",
|
|
1230
|
+
children: "Submitted for platform review — you will be notified once approved or if changes are needed."
|
|
1231
|
+
})
|
|
1232
|
+
})
|
|
1233
|
+
}, `${e.id}-review`)
|
|
1234
|
+
] }))
|
|
1208
1235
|
})]
|
|
1209
1236
|
})
|
|
1210
|
-
}) : /* @__PURE__ */
|
|
1237
|
+
}) : /* @__PURE__ */ G(r, {
|
|
1211
1238
|
illustration: "empty-generic",
|
|
1212
|
-
icon: /* @__PURE__ */
|
|
1239
|
+
icon: /* @__PURE__ */ G(ve, { size: 32 }),
|
|
1213
1240
|
title: s("devportal.noVersions", "No versions yet"),
|
|
1214
1241
|
description: s("devportal.noVersionsDescription", "Upload your first version to make this item available for review and distribution."),
|
|
1215
|
-
action: /* @__PURE__ */
|
|
1242
|
+
action: /* @__PURE__ */ K("button", {
|
|
1216
1243
|
onClick: () => n(`/apps/${e}/versions`),
|
|
1217
1244
|
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",
|
|
1218
|
-
children: [/* @__PURE__ */
|
|
1245
|
+
children: [/* @__PURE__ */ G(U, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
|
|
1219
1246
|
})
|
|
1220
1247
|
}),
|
|
1221
|
-
!i && a && /* @__PURE__ */
|
|
1248
|
+
!i && a && /* @__PURE__ */ K("div", {
|
|
1222
1249
|
className: "mt-4 flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-sunken px-4 py-3",
|
|
1223
1250
|
children: [
|
|
1224
|
-
/* @__PURE__ */
|
|
1251
|
+
/* @__PURE__ */ G(L, {
|
|
1225
1252
|
size: 16,
|
|
1226
1253
|
className: "shrink-0 text-primary"
|
|
1227
1254
|
}),
|
|
1228
|
-
/* @__PURE__ */
|
|
1255
|
+
/* @__PURE__ */ G("p", {
|
|
1229
1256
|
className: "flex-1 text-sm text-text-secondary",
|
|
1230
1257
|
children: s("devportal.versionsNextPricing", "You've got versions covered. Now set your pricing before you can submit.")
|
|
1231
1258
|
}),
|
|
1232
|
-
/* @__PURE__ */
|
|
1259
|
+
/* @__PURE__ */ K("button", {
|
|
1233
1260
|
type: "button",
|
|
1234
1261
|
onClick: a,
|
|
1235
1262
|
className: "inline-flex items-center gap-1 text-sm font-medium text-primary hover:underline underline-offset-2 whitespace-nowrap",
|
|
1236
|
-
children: [s("devportal.nextSetPricing", "Set Pricing"), /* @__PURE__ */
|
|
1263
|
+
children: [s("devportal.nextSetPricing", "Set Pricing"), /* @__PURE__ */ G(de, { size: 15 })]
|
|
1237
1264
|
})
|
|
1238
1265
|
]
|
|
1239
1266
|
})
|
|
@@ -1244,16 +1271,16 @@ var Re = [
|
|
|
1244
1271
|
let r = n(e);
|
|
1245
1272
|
return r === e ? t : r;
|
|
1246
1273
|
}, { data: i, loading: a, error: o } = u({ variables: { applicationId: e } });
|
|
1247
|
-
return a ? /* @__PURE__ */
|
|
1274
|
+
return a ? /* @__PURE__ */ G(Re, { message: r("devportal.loadingWebhooks", "Loading webhooks...") }) : o ? /* @__PURE__ */ G(ze, { message: o.message }) : /* @__PURE__ */ G(Je, {
|
|
1248
1275
|
appId: e,
|
|
1249
|
-
webhooks: (i?.webhooks ?? []).map(
|
|
1276
|
+
webhooks: (i?.webhooks ?? []).map(Pe),
|
|
1250
1277
|
onNavigate: t
|
|
1251
1278
|
});
|
|
1252
1279
|
}, Ge = ({ authAppId: e, appName: t, onGrantDelegation: n, onNavigate: a }) => {
|
|
1253
1280
|
let { t: o } = P(), s = (e, t) => {
|
|
1254
1281
|
let n = o(e);
|
|
1255
1282
|
return n === e ? t : n;
|
|
1256
|
-
}, { data: c, loading: l, error: u, refetch: d } = i(), [f] = p(), [m, h] = N([]), [g, _] = N(!1), [v, y] = N(/* @__PURE__ */ new Set()), [b, x] = N(null), S = M(() => c?.currentUserDelegations?.delegations ? c.currentUserDelegations.delegations.filter((t) => t.appId === e).map(
|
|
1283
|
+
}, { data: c, loading: l, error: u, refetch: d } = i(), [f] = p(), [m, h] = N([]), [g, _] = N(!1), [v, y] = N(/* @__PURE__ */ new Set()), [b, x] = N(null), S = M(() => c?.currentUserDelegations?.delegations ? c.currentUserDelegations.delegations.filter((t) => t.appId === e).map(Fe) : [], [e, c]), C = M(() => S.filter((e) => e.status === "ACTIVE"), [S]), w = M(() => C.filter((e) => v.has(e.id)), [C, v]), T = C.length > 0 && C.every((e) => v.has(e.id)), ee = C.some((e) => v.has(e.id)) && !T, E = j((e, t) => {
|
|
1257
1284
|
y((n) => {
|
|
1258
1285
|
let r = new Set(n);
|
|
1259
1286
|
return t ? r.add(e) : r.delete(e), r;
|
|
@@ -1279,19 +1306,19 @@ var Re = [
|
|
|
1279
1306
|
_(!1);
|
|
1280
1307
|
}
|
|
1281
1308
|
}, [f, d]);
|
|
1282
|
-
return e ? l ? /* @__PURE__ */
|
|
1283
|
-
b && /* @__PURE__ */
|
|
1309
|
+
return e ? l ? /* @__PURE__ */ G(Re, { message: s("devportal.loadingDelegations", "Loading delegations...") }) : u ? /* @__PURE__ */ G(ze, { message: u.message }) : /* @__PURE__ */ K(W, { children: [
|
|
1310
|
+
b && /* @__PURE__ */ G("div", {
|
|
1284
1311
|
className: "rounded-lg border border-border-subtle bg-status-success-bg-subtle p-3 text-sm text-status-success-text",
|
|
1285
|
-
children: /* @__PURE__ */
|
|
1312
|
+
children: /* @__PURE__ */ K("div", {
|
|
1286
1313
|
className: "flex items-center justify-between gap-3",
|
|
1287
|
-
children: [/* @__PURE__ */
|
|
1314
|
+
children: [/* @__PURE__ */ G("span", { children: b }), /* @__PURE__ */ G("button", {
|
|
1288
1315
|
onClick: () => x(null),
|
|
1289
1316
|
className: "text-status-success-text hover:text-status-success-text",
|
|
1290
1317
|
children: s("devportal.dismiss", "Dismiss")
|
|
1291
1318
|
})]
|
|
1292
1319
|
})
|
|
1293
1320
|
}),
|
|
1294
|
-
/* @__PURE__ */
|
|
1321
|
+
/* @__PURE__ */ G(Ye, {
|
|
1295
1322
|
appName: t,
|
|
1296
1323
|
delegations: S,
|
|
1297
1324
|
onGrantDelegation: n,
|
|
@@ -1304,7 +1331,7 @@ var Re = [
|
|
|
1304
1331
|
allVisibleSelected: T,
|
|
1305
1332
|
partiallySelected: ee
|
|
1306
1333
|
}),
|
|
1307
|
-
/* @__PURE__ */
|
|
1334
|
+
/* @__PURE__ */ G(ne, {
|
|
1308
1335
|
open: m.length > 0,
|
|
1309
1336
|
onOpenChange: (e) => {
|
|
1310
1337
|
e || h([]);
|
|
@@ -1319,15 +1346,15 @@ var Re = [
|
|
|
1319
1346
|
variant: "destructive",
|
|
1320
1347
|
loading: g
|
|
1321
1348
|
})
|
|
1322
|
-
] }) : /* @__PURE__ */
|
|
1349
|
+
] }) : /* @__PURE__ */ G(r, {
|
|
1323
1350
|
illustration: "empty-generic",
|
|
1324
|
-
icon: /* @__PURE__ */ H
|
|
1351
|
+
icon: /* @__PURE__ */ G(H, { size: 32 }),
|
|
1325
1352
|
title: s("devportal.linkAuthAppFirst", "Link an auth app first"),
|
|
1326
1353
|
description: s("devportal.linkAuthAppFirstDescription", "Delegations are managed through auth apps. Create or link an auth app before granting app-as-user access."),
|
|
1327
|
-
action: /* @__PURE__ */
|
|
1354
|
+
action: /* @__PURE__ */ K("button", {
|
|
1328
1355
|
onClick: () => a("/oauth"),
|
|
1329
1356
|
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",
|
|
1330
|
-
children: [/* @__PURE__ */
|
|
1357
|
+
children: [/* @__PURE__ */ G(R, { size: 16 }), s("devportal.manageOAuthApps", "Manage OAuth Apps")]
|
|
1331
1358
|
})
|
|
1332
1359
|
});
|
|
1333
1360
|
}, Ke = ({ appId: e }) => {
|
|
@@ -1343,67 +1370,67 @@ var Re = [
|
|
|
1343
1370
|
}, [r]).toISOString(),
|
|
1344
1371
|
endDate: r.toISOString()
|
|
1345
1372
|
} });
|
|
1346
|
-
return a ? /* @__PURE__ */
|
|
1373
|
+
return a ? /* @__PURE__ */ G(Re, { message: n("devportal.loadingAnalytics", "Loading analytics...") }) : s ? /* @__PURE__ */ G(ze, { message: s.message }) : /* @__PURE__ */ G(Xe, { analytics: (i?.applicationAnalytics ?? []).map(q) });
|
|
1347
1374
|
}, qe = ({ app: e }) => {
|
|
1348
1375
|
let { t } = P(), n = (e, n) => {
|
|
1349
1376
|
let r = t(e);
|
|
1350
1377
|
return r === e ? n : r;
|
|
1351
1378
|
};
|
|
1352
|
-
return /* @__PURE__ */
|
|
1379
|
+
return /* @__PURE__ */ K("div", {
|
|
1353
1380
|
className: "grid gap-6 lg:grid-cols-3",
|
|
1354
|
-
children: [/* @__PURE__ */
|
|
1381
|
+
children: [/* @__PURE__ */ K("div", {
|
|
1355
1382
|
className: "lg:col-span-2 space-y-6",
|
|
1356
1383
|
children: [
|
|
1357
|
-
/* @__PURE__ */
|
|
1384
|
+
/* @__PURE__ */ G(je, { children: /* @__PURE__ */ K("div", {
|
|
1358
1385
|
className: "grid gap-4 sm:grid-cols-4",
|
|
1359
1386
|
children: [
|
|
1360
|
-
/* @__PURE__ */
|
|
1387
|
+
/* @__PURE__ */ G(Q, {
|
|
1361
1388
|
label: n("devportal.totalInstalls", "Total Installs"),
|
|
1362
1389
|
value: e.installCount.toLocaleString()
|
|
1363
1390
|
}),
|
|
1364
|
-
/* @__PURE__ */
|
|
1391
|
+
/* @__PURE__ */ G(Q, {
|
|
1365
1392
|
label: n("devportal.activeInstalls", "Active Installs"),
|
|
1366
1393
|
value: e.activeInstallCount.toLocaleString()
|
|
1367
1394
|
}),
|
|
1368
|
-
/* @__PURE__ */
|
|
1395
|
+
/* @__PURE__ */ G(Q, {
|
|
1369
1396
|
label: n("devportal.averageRating", "Average Rating"),
|
|
1370
1397
|
value: e.averageRating ? `${e.averageRating.toFixed(1)} ★` : n("devportal.notAvailable", "N/A")
|
|
1371
1398
|
}),
|
|
1372
|
-
/* @__PURE__ */
|
|
1399
|
+
/* @__PURE__ */ G(Q, {
|
|
1373
1400
|
label: n("devportal.reviews", "Reviews"),
|
|
1374
1401
|
value: e.reviewCount.toString()
|
|
1375
1402
|
})
|
|
1376
1403
|
]
|
|
1377
1404
|
}) }),
|
|
1378
|
-
/* @__PURE__ */
|
|
1405
|
+
/* @__PURE__ */ G(y, {
|
|
1379
1406
|
title: n("devportal.description", "Description"),
|
|
1380
|
-
children: /* @__PURE__ */
|
|
1407
|
+
children: /* @__PURE__ */ G("div", {
|
|
1381
1408
|
className: "prose prose-sm max-w-none",
|
|
1382
|
-
children: /* @__PURE__ */
|
|
1409
|
+
children: /* @__PURE__ */ G("pre", {
|
|
1383
1410
|
className: "whitespace-pre-wrap font-sans text-sm text-text-primary bg-transparent p-0 m-0",
|
|
1384
1411
|
children: e.description || n("devportal.noDescriptionProvided", "No description provided.")
|
|
1385
1412
|
})
|
|
1386
1413
|
})
|
|
1387
1414
|
}),
|
|
1388
|
-
/* @__PURE__ */
|
|
1415
|
+
/* @__PURE__ */ G(y, {
|
|
1389
1416
|
title: n("devportal.tagsAndKeywords", "Tags & Keywords"),
|
|
1390
|
-
children: /* @__PURE__ */
|
|
1417
|
+
children: /* @__PURE__ */ K("div", {
|
|
1391
1418
|
className: "space-y-3",
|
|
1392
|
-
children: [e.tags.length > 0 && /* @__PURE__ */
|
|
1419
|
+
children: [e.tags.length > 0 && /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1393
1420
|
className: "text-xs text-text-secondary mb-2",
|
|
1394
1421
|
children: n("devportal.tags", "Tags")
|
|
1395
|
-
}), /* @__PURE__ */
|
|
1422
|
+
}), /* @__PURE__ */ G("div", {
|
|
1396
1423
|
className: "flex flex-wrap gap-2",
|
|
1397
|
-
children: e.tags.map((e) => /* @__PURE__ */
|
|
1424
|
+
children: e.tags.map((e) => /* @__PURE__ */ G("span", {
|
|
1398
1425
|
className: "rounded-full bg-action-primary-bg/10 px-3 py-1 text-xs font-medium text-primary",
|
|
1399
1426
|
children: e
|
|
1400
1427
|
}, e))
|
|
1401
|
-
})] }), e.keywords.length > 0 && /* @__PURE__ */
|
|
1428
|
+
})] }), e.keywords.length > 0 && /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1402
1429
|
className: "text-xs text-text-secondary mb-2",
|
|
1403
1430
|
children: n("devportal.keywords", "Keywords")
|
|
1404
|
-
}), /* @__PURE__ */
|
|
1431
|
+
}), /* @__PURE__ */ G("div", {
|
|
1405
1432
|
className: "flex flex-wrap gap-2",
|
|
1406
|
-
children: e.keywords.map((e) => /* @__PURE__ */
|
|
1433
|
+
children: e.keywords.map((e) => /* @__PURE__ */ G("span", {
|
|
1407
1434
|
className: "rounded-full bg-bg-sunken px-3 py-1 text-xs",
|
|
1408
1435
|
children: e
|
|
1409
1436
|
}, e))
|
|
@@ -1411,14 +1438,14 @@ var Re = [
|
|
|
1411
1438
|
})
|
|
1412
1439
|
})
|
|
1413
1440
|
]
|
|
1414
|
-
}), /* @__PURE__ */
|
|
1441
|
+
}), /* @__PURE__ */ K("div", {
|
|
1415
1442
|
className: "space-y-6",
|
|
1416
|
-
children: [/* @__PURE__ */
|
|
1443
|
+
children: [/* @__PURE__ */ G(y, {
|
|
1417
1444
|
title: n("devportal.details", "Details"),
|
|
1418
|
-
children: /* @__PURE__ */
|
|
1445
|
+
children: /* @__PURE__ */ G(D, { items: [
|
|
1419
1446
|
{
|
|
1420
1447
|
label: n("devportal.appId", "App ID"),
|
|
1421
|
-
value: /* @__PURE__ */
|
|
1448
|
+
value: /* @__PURE__ */ G("code", {
|
|
1422
1449
|
className: "text-xs",
|
|
1423
1450
|
children: e.id
|
|
1424
1451
|
})
|
|
@@ -1454,32 +1481,32 @@ var Re = [
|
|
|
1454
1481
|
value: e.publishedAt ? new Date(e.publishedAt).toLocaleDateString() : n("devportal.notPublished", "Not published")
|
|
1455
1482
|
}
|
|
1456
1483
|
] })
|
|
1457
|
-
}), /* @__PURE__ */
|
|
1484
|
+
}), /* @__PURE__ */ G(y, {
|
|
1458
1485
|
title: n("devportal.links", "Links"),
|
|
1459
|
-
children: /* @__PURE__ */
|
|
1486
|
+
children: /* @__PURE__ */ K("div", {
|
|
1460
1487
|
className: "space-y-2",
|
|
1461
1488
|
children: [
|
|
1462
|
-
e.websiteUrl && /* @__PURE__ */
|
|
1489
|
+
e.websiteUrl && /* @__PURE__ */ G($, {
|
|
1463
1490
|
label: n("devportal.website", "Website"),
|
|
1464
1491
|
url: e.websiteUrl
|
|
1465
1492
|
}),
|
|
1466
|
-
e.documentationUrl && /* @__PURE__ */
|
|
1493
|
+
e.documentationUrl && /* @__PURE__ */ G($, {
|
|
1467
1494
|
label: n("devportal.documentation", "Documentation"),
|
|
1468
1495
|
url: e.documentationUrl
|
|
1469
1496
|
}),
|
|
1470
|
-
e.supportUrl && /* @__PURE__ */
|
|
1497
|
+
e.supportUrl && /* @__PURE__ */ G($, {
|
|
1471
1498
|
label: n("devportal.support", "Support"),
|
|
1472
1499
|
url: e.supportUrl
|
|
1473
1500
|
}),
|
|
1474
|
-
e.githubUrl && /* @__PURE__ */
|
|
1501
|
+
e.githubUrl && /* @__PURE__ */ G($, {
|
|
1475
1502
|
label: n("devportal.github", "GitHub"),
|
|
1476
1503
|
url: e.githubUrl
|
|
1477
1504
|
}),
|
|
1478
|
-
e.privacyPolicyUrl && /* @__PURE__ */
|
|
1505
|
+
e.privacyPolicyUrl && /* @__PURE__ */ G($, {
|
|
1479
1506
|
label: n("devportal.privacyPolicy", "Privacy Policy"),
|
|
1480
1507
|
url: e.privacyPolicyUrl
|
|
1481
1508
|
}),
|
|
1482
|
-
e.termsOfServiceUrl && /* @__PURE__ */
|
|
1509
|
+
e.termsOfServiceUrl && /* @__PURE__ */ G($, {
|
|
1483
1510
|
label: n("devportal.termsOfService", "Terms of Service"),
|
|
1484
1511
|
url: e.termsOfServiceUrl
|
|
1485
1512
|
})
|
|
@@ -1493,11 +1520,11 @@ var Re = [
|
|
|
1493
1520
|
let n = i(e);
|
|
1494
1521
|
return n === e ? t : n;
|
|
1495
1522
|
};
|
|
1496
|
-
return /* @__PURE__ */
|
|
1523
|
+
return /* @__PURE__ */ K("div", {
|
|
1497
1524
|
className: "space-y-6",
|
|
1498
|
-
children: [/* @__PURE__ */
|
|
1525
|
+
children: [/* @__PURE__ */ K("div", {
|
|
1499
1526
|
className: "flex items-center justify-between",
|
|
1500
|
-
children: [/* @__PURE__ */
|
|
1527
|
+
children: [/* @__PURE__ */ K("p", {
|
|
1501
1528
|
className: "text-sm text-text-secondary",
|
|
1502
1529
|
children: [
|
|
1503
1530
|
t.length,
|
|
@@ -1506,81 +1533,81 @@ var Re = [
|
|
|
1506
1533
|
" ",
|
|
1507
1534
|
a("devportal.configured", "configured")
|
|
1508
1535
|
]
|
|
1509
|
-
}), /* @__PURE__ */
|
|
1536
|
+
}), /* @__PURE__ */ K("button", {
|
|
1510
1537
|
onClick: () => n(`/apps/${e}/webhooks/new`),
|
|
1511
1538
|
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",
|
|
1512
|
-
children: [/* @__PURE__ */
|
|
1539
|
+
children: [/* @__PURE__ */ G(V, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
|
|
1513
1540
|
})]
|
|
1514
|
-
}), t.length > 0 ? /* @__PURE__ */
|
|
1541
|
+
}), t.length > 0 ? /* @__PURE__ */ G("div", {
|
|
1515
1542
|
className: "space-y-4",
|
|
1516
|
-
children: t.map((t) => /* @__PURE__ */
|
|
1543
|
+
children: t.map((t) => /* @__PURE__ */ K("div", {
|
|
1517
1544
|
className: "rounded-card border border-border-seam bg-bg-surface p-4 space-y-4 shadow-[var(--shadow-pop)]",
|
|
1518
1545
|
children: [
|
|
1519
|
-
/* @__PURE__ */
|
|
1546
|
+
/* @__PURE__ */ K("div", {
|
|
1520
1547
|
className: "flex items-start justify-between",
|
|
1521
|
-
children: [/* @__PURE__ */
|
|
1548
|
+
children: [/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ K("div", {
|
|
1522
1549
|
className: "flex items-center gap-2",
|
|
1523
|
-
children: [/* @__PURE__ */
|
|
1550
|
+
children: [/* @__PURE__ */ G("h3", {
|
|
1524
1551
|
className: "font-medium",
|
|
1525
1552
|
children: t.name
|
|
1526
|
-
}), /* @__PURE__ */
|
|
1553
|
+
}), /* @__PURE__ */ G(S, {
|
|
1527
1554
|
status: t.status,
|
|
1528
1555
|
type: "webhook"
|
|
1529
1556
|
})]
|
|
1530
|
-
}), t.description && /* @__PURE__ */
|
|
1557
|
+
}), t.description && /* @__PURE__ */ G("p", {
|
|
1531
1558
|
className: "text-sm text-text-secondary mt-1",
|
|
1532
1559
|
children: t.description
|
|
1533
|
-
})] }), /* @__PURE__ */
|
|
1560
|
+
})] }), /* @__PURE__ */ G("button", {
|
|
1534
1561
|
onClick: () => n(`/apps/${e}/webhooks/${t.id}`),
|
|
1535
1562
|
className: "rounded-md p-1 hover:bg-bg-sunken",
|
|
1536
|
-
children: /* @__PURE__ */
|
|
1563
|
+
children: /* @__PURE__ */ G(_e, { size: 20 })
|
|
1537
1564
|
})]
|
|
1538
1565
|
}),
|
|
1539
|
-
/* @__PURE__ */
|
|
1566
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1540
1567
|
className: "text-xs text-text-secondary mb-1",
|
|
1541
1568
|
children: a("devportal.endpointUrl", "Endpoint URL")
|
|
1542
|
-
}), /* @__PURE__ */
|
|
1569
|
+
}), /* @__PURE__ */ G("code", {
|
|
1543
1570
|
className: "text-sm bg-bg-sunken px-2 py-1 rounded block truncate",
|
|
1544
1571
|
children: t.url
|
|
1545
1572
|
})] }),
|
|
1546
|
-
/* @__PURE__ */
|
|
1573
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1547
1574
|
className: "text-xs text-text-secondary mb-2",
|
|
1548
1575
|
children: a("devportal.events", "Events")
|
|
1549
|
-
}), /* @__PURE__ */
|
|
1576
|
+
}), /* @__PURE__ */ G("div", {
|
|
1550
1577
|
className: "flex flex-wrap gap-2",
|
|
1551
|
-
children: t.events.map((e) => /* @__PURE__ */
|
|
1578
|
+
children: t.events.map((e) => /* @__PURE__ */ G("span", {
|
|
1552
1579
|
className: "rounded-full bg-bg-sunken px-2 py-0.5 text-xs",
|
|
1553
1580
|
children: e
|
|
1554
1581
|
}, e))
|
|
1555
1582
|
})] }),
|
|
1556
|
-
/* @__PURE__ */
|
|
1583
|
+
/* @__PURE__ */ K("div", {
|
|
1557
1584
|
className: "grid gap-4 sm:grid-cols-4 text-sm",
|
|
1558
1585
|
children: [
|
|
1559
|
-
/* @__PURE__ */
|
|
1586
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1560
1587
|
className: "text-xs text-text-secondary",
|
|
1561
1588
|
children: a("devportal.success", "Success")
|
|
1562
|
-
}), /* @__PURE__ */
|
|
1589
|
+
}), /* @__PURE__ */ G("p", {
|
|
1563
1590
|
className: "font-medium text-status-success-text",
|
|
1564
1591
|
children: t.successCount.toLocaleString()
|
|
1565
1592
|
})] }),
|
|
1566
|
-
/* @__PURE__ */
|
|
1593
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1567
1594
|
className: "text-xs text-text-secondary",
|
|
1568
1595
|
children: a("devportal.failed", "Failed")
|
|
1569
|
-
}), /* @__PURE__ */
|
|
1596
|
+
}), /* @__PURE__ */ G("p", {
|
|
1570
1597
|
className: "font-medium text-status-error-text",
|
|
1571
1598
|
children: t.failureCount.toLocaleString()
|
|
1572
1599
|
})] }),
|
|
1573
|
-
/* @__PURE__ */
|
|
1600
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1574
1601
|
className: "text-xs text-text-secondary",
|
|
1575
1602
|
children: a("devportal.successRate", "Success Rate")
|
|
1576
|
-
}), /* @__PURE__ */
|
|
1603
|
+
}), /* @__PURE__ */ K("p", {
|
|
1577
1604
|
className: "font-medium",
|
|
1578
1605
|
children: [t.successCount + t.failureCount > 0 ? (t.successCount / (t.successCount + t.failureCount) * 100).toFixed(1) : "0.0", "%"]
|
|
1579
1606
|
})] }),
|
|
1580
|
-
/* @__PURE__ */
|
|
1607
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1581
1608
|
className: "text-xs text-text-secondary",
|
|
1582
1609
|
children: a("devportal.lastTriggered", "Last Triggered")
|
|
1583
|
-
}), /* @__PURE__ */
|
|
1610
|
+
}), /* @__PURE__ */ G("p", {
|
|
1584
1611
|
className: "font-medium",
|
|
1585
1612
|
children: t.lastTriggeredAt ? new Date(t.lastTriggeredAt).toLocaleString() : a("devportal.never", "Never")
|
|
1586
1613
|
})] })
|
|
@@ -1588,15 +1615,15 @@ var Re = [
|
|
|
1588
1615
|
})
|
|
1589
1616
|
]
|
|
1590
1617
|
}, t.id))
|
|
1591
|
-
}) : /* @__PURE__ */
|
|
1618
|
+
}) : /* @__PURE__ */ G(r, {
|
|
1592
1619
|
illustration: "empty-notifications",
|
|
1593
|
-
icon: /* @__PURE__ */
|
|
1620
|
+
icon: /* @__PURE__ */ G(Ee, { size: 32 }),
|
|
1594
1621
|
title: a("devportal.noWebhooks", "No webhooks"),
|
|
1595
1622
|
description: a("devportal.noWebhooksDescription", "Add a webhook to receive event notifications"),
|
|
1596
|
-
action: /* @__PURE__ */
|
|
1623
|
+
action: /* @__PURE__ */ K("button", {
|
|
1597
1624
|
onClick: () => n(`/apps/${e}/webhooks/new`),
|
|
1598
1625
|
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",
|
|
1599
|
-
children: [/* @__PURE__ */
|
|
1626
|
+
children: [/* @__PURE__ */ G(V, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
|
|
1600
1627
|
})
|
|
1601
1628
|
})]
|
|
1602
1629
|
});
|
|
@@ -1605,12 +1632,12 @@ var Re = [
|
|
|
1605
1632
|
let n = p(e);
|
|
1606
1633
|
return n === e ? t : n;
|
|
1607
1634
|
}, h = n.filter((e) => e.status === "ACTIVE"), g = n.filter((e) => e.status !== "ACTIVE");
|
|
1608
|
-
return /* @__PURE__ */
|
|
1635
|
+
return /* @__PURE__ */ K("div", {
|
|
1609
1636
|
className: "space-y-6",
|
|
1610
1637
|
children: [
|
|
1611
|
-
/* @__PURE__ */
|
|
1638
|
+
/* @__PURE__ */ K("div", {
|
|
1612
1639
|
className: "flex items-center justify-between",
|
|
1613
|
-
children: [/* @__PURE__ */
|
|
1640
|
+
children: [/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ K("p", {
|
|
1614
1641
|
className: "text-sm text-text-secondary",
|
|
1615
1642
|
children: [
|
|
1616
1643
|
n.length,
|
|
@@ -1621,7 +1648,7 @@ var Re = [
|
|
|
1621
1648
|
" ",
|
|
1622
1649
|
e
|
|
1623
1650
|
]
|
|
1624
|
-
}), h.length > 0 && /* @__PURE__ */
|
|
1651
|
+
}), h.length > 0 && /* @__PURE__ */ K("p", {
|
|
1625
1652
|
className: "text-xs text-text-secondary mt-0.5",
|
|
1626
1653
|
children: [
|
|
1627
1654
|
h.length,
|
|
@@ -1633,44 +1660,44 @@ var Re = [
|
|
|
1633
1660
|
" ",
|
|
1634
1661
|
m("devportal.revokedExpired", "revoked/expired")
|
|
1635
1662
|
]
|
|
1636
|
-
})] }), /* @__PURE__ */
|
|
1663
|
+
})] }), /* @__PURE__ */ K("button", {
|
|
1637
1664
|
onClick: i,
|
|
1638
1665
|
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",
|
|
1639
|
-
children: [/* @__PURE__ */
|
|
1666
|
+
children: [/* @__PURE__ */ G(V, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
|
|
1640
1667
|
})]
|
|
1641
1668
|
}),
|
|
1642
|
-
h.length > 0 && /* @__PURE__ */
|
|
1669
|
+
h.length > 0 && /* @__PURE__ */ G("div", {
|
|
1643
1670
|
className: "rounded-card border border-border-seam bg-bg-surface p-4",
|
|
1644
|
-
children: /* @__PURE__ */
|
|
1671
|
+
children: /* @__PURE__ */ K("div", {
|
|
1645
1672
|
className: "flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between",
|
|
1646
|
-
children: [/* @__PURE__ */
|
|
1673
|
+
children: [/* @__PURE__ */ K("div", {
|
|
1647
1674
|
className: "flex flex-wrap items-center gap-3",
|
|
1648
|
-
children: [/* @__PURE__ */
|
|
1675
|
+
children: [/* @__PURE__ */ K("div", {
|
|
1649
1676
|
className: "flex items-center gap-2",
|
|
1650
|
-
children: [/* @__PURE__ */
|
|
1677
|
+
children: [/* @__PURE__ */ G(w, {
|
|
1651
1678
|
checked: d,
|
|
1652
1679
|
indeterminate: f,
|
|
1653
1680
|
onChange: c,
|
|
1654
1681
|
ariaLabel: m("devportal.selectAllActiveDelegations", "Select all active app delegations")
|
|
1655
|
-
}), /* @__PURE__ */
|
|
1682
|
+
}), /* @__PURE__ */ G("span", {
|
|
1656
1683
|
className: "text-sm font-medium",
|
|
1657
1684
|
children: m("devportal.selectAllActive", "Select all active")
|
|
1658
1685
|
})]
|
|
1659
|
-
}), o.size > 0 && /* @__PURE__ */
|
|
1686
|
+
}), o.size > 0 && /* @__PURE__ */ G("button", {
|
|
1660
1687
|
onClick: l,
|
|
1661
1688
|
className: "text-sm text-text-secondary hover:text-text-primary",
|
|
1662
1689
|
children: m("devportal.clearSelection", "Clear selection")
|
|
1663
1690
|
})]
|
|
1664
|
-
}), /* @__PURE__ */
|
|
1691
|
+
}), /* @__PURE__ */ K("div", {
|
|
1665
1692
|
className: "flex flex-wrap items-center gap-2",
|
|
1666
|
-
children: [/* @__PURE__ */
|
|
1693
|
+
children: [/* @__PURE__ */ K("span", {
|
|
1667
1694
|
className: "rounded-full bg-bg-sunken px-3 py-1 text-sm font-medium text-text-secondary",
|
|
1668
1695
|
children: [
|
|
1669
1696
|
o.size,
|
|
1670
1697
|
" ",
|
|
1671
1698
|
m("devportal.selected", "selected")
|
|
1672
1699
|
]
|
|
1673
|
-
}), /* @__PURE__ */
|
|
1700
|
+
}), /* @__PURE__ */ K("button", {
|
|
1674
1701
|
onClick: u,
|
|
1675
1702
|
disabled: o.size === 0,
|
|
1676
1703
|
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",
|
|
@@ -1679,33 +1706,33 @@ var Re = [
|
|
|
1679
1706
|
})]
|
|
1680
1707
|
})
|
|
1681
1708
|
}),
|
|
1682
|
-
n.length > 0 ? /* @__PURE__ */
|
|
1709
|
+
n.length > 0 ? /* @__PURE__ */ G("div", {
|
|
1683
1710
|
className: "space-y-4",
|
|
1684
|
-
children: n.map((e) => /* @__PURE__ */
|
|
1711
|
+
children: n.map((e) => /* @__PURE__ */ K("div", {
|
|
1685
1712
|
className: "rounded-card border border-border-seam bg-bg-surface p-4 space-y-4 shadow-[var(--shadow-pop)]",
|
|
1686
1713
|
children: [
|
|
1687
|
-
/* @__PURE__ */
|
|
1714
|
+
/* @__PURE__ */ K("div", {
|
|
1688
1715
|
className: "flex items-start justify-between",
|
|
1689
|
-
children: [/* @__PURE__ */
|
|
1716
|
+
children: [/* @__PURE__ */ K("div", {
|
|
1690
1717
|
className: "flex items-start gap-3",
|
|
1691
|
-
children: [e.status === "ACTIVE" && /* @__PURE__ */
|
|
1718
|
+
children: [e.status === "ACTIVE" && /* @__PURE__ */ G("div", {
|
|
1692
1719
|
onClick: (e) => e.stopPropagation(),
|
|
1693
|
-
children: /* @__PURE__ */
|
|
1720
|
+
children: /* @__PURE__ */ G(w, {
|
|
1694
1721
|
checked: o.has(e.id),
|
|
1695
1722
|
onChange: (t) => s(e.id, t),
|
|
1696
1723
|
ariaLabel: `Select delegation ${e.id}`,
|
|
1697
1724
|
className: "mt-1"
|
|
1698
1725
|
})
|
|
1699
|
-
}), /* @__PURE__ */
|
|
1726
|
+
}), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ K("div", {
|
|
1700
1727
|
className: "flex items-center gap-2",
|
|
1701
|
-
children: [/* @__PURE__ */
|
|
1728
|
+
children: [/* @__PURE__ */ K("h3", {
|
|
1702
1729
|
className: "font-medium",
|
|
1703
1730
|
children: ["Delegation #", e.id.slice(0, 8)]
|
|
1704
|
-
}), /* @__PURE__ */
|
|
1705
|
-
className: t("rounded-full px-2 py-0.5 text-xs font-medium",
|
|
1731
|
+
}), /* @__PURE__ */ G("span", {
|
|
1732
|
+
className: t("rounded-full px-2 py-0.5 text-xs font-medium", Le[e.status]),
|
|
1706
1733
|
children: e.status
|
|
1707
1734
|
})]
|
|
1708
|
-
}), /* @__PURE__ */
|
|
1735
|
+
}), /* @__PURE__ */ K("p", {
|
|
1709
1736
|
className: "text-sm text-text-secondary mt-1",
|
|
1710
1737
|
children: [
|
|
1711
1738
|
m("devportal.granted", "Granted"),
|
|
@@ -1717,55 +1744,55 @@ var Re = [
|
|
|
1717
1744
|
e.grantedBy === e.userId ? m("devportal.you", "you") : e.grantedBy.slice(0, 8)
|
|
1718
1745
|
]
|
|
1719
1746
|
})] })]
|
|
1720
|
-
}), e.status === "ACTIVE" && /* @__PURE__ */
|
|
1747
|
+
}), e.status === "ACTIVE" && /* @__PURE__ */ K("button", {
|
|
1721
1748
|
onClick: () => a(e.id),
|
|
1722
1749
|
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",
|
|
1723
|
-
children: [/* @__PURE__ */
|
|
1750
|
+
children: [/* @__PURE__ */ G(Oe, { size: 14 }), m("devportal.revoke", "Revoke")]
|
|
1724
1751
|
})]
|
|
1725
1752
|
}),
|
|
1726
|
-
/* @__PURE__ */
|
|
1753
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1727
1754
|
className: "text-xs text-text-secondary mb-2",
|
|
1728
1755
|
children: m("devportal.grantedScopes", "Granted Scopes")
|
|
1729
|
-
}), /* @__PURE__ */
|
|
1756
|
+
}), /* @__PURE__ */ G("div", {
|
|
1730
1757
|
className: "flex flex-wrap gap-2",
|
|
1731
|
-
children: e.scopes.map((e) => /* @__PURE__ */
|
|
1758
|
+
children: e.scopes.map((e) => /* @__PURE__ */ G("span", {
|
|
1732
1759
|
className: "rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-xs text-status-success-text",
|
|
1733
1760
|
children: e
|
|
1734
1761
|
}, e))
|
|
1735
1762
|
})] }),
|
|
1736
|
-
e.workspaceIds.length > 0 && /* @__PURE__ */
|
|
1763
|
+
e.workspaceIds.length > 0 && /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1737
1764
|
className: "text-xs text-text-secondary mb-2",
|
|
1738
1765
|
children: m("devportal.workspaceScope", "Workspace Scope")
|
|
1739
|
-
}), /* @__PURE__ */
|
|
1766
|
+
}), /* @__PURE__ */ G("div", {
|
|
1740
1767
|
className: "flex flex-wrap gap-2",
|
|
1741
|
-
children: e.workspaceIds.map((e) => /* @__PURE__ */
|
|
1768
|
+
children: e.workspaceIds.map((e) => /* @__PURE__ */ G("code", {
|
|
1742
1769
|
className: "rounded bg-bg-sunken px-2 py-0.5 text-xs",
|
|
1743
1770
|
children: e
|
|
1744
1771
|
}, e))
|
|
1745
1772
|
})] }),
|
|
1746
|
-
/* @__PURE__ */
|
|
1773
|
+
/* @__PURE__ */ K("div", {
|
|
1747
1774
|
className: "flex items-center gap-4 text-xs text-text-secondary",
|
|
1748
1775
|
children: [
|
|
1749
|
-
e.expiresAt && /* @__PURE__ */
|
|
1776
|
+
e.expiresAt && /* @__PURE__ */ K("span", {
|
|
1750
1777
|
className: "flex items-center gap-1",
|
|
1751
1778
|
children: [
|
|
1752
|
-
/* @__PURE__ */
|
|
1779
|
+
/* @__PURE__ */ G(fe, { size: 12 }),
|
|
1753
1780
|
m("devportal.expires", "Expires"),
|
|
1754
1781
|
" ",
|
|
1755
1782
|
new Date(e.expiresAt).toLocaleDateString()
|
|
1756
1783
|
]
|
|
1757
1784
|
}),
|
|
1758
|
-
!e.expiresAt && e.status === "ACTIVE" && /* @__PURE__ */
|
|
1785
|
+
!e.expiresAt && e.status === "ACTIVE" && /* @__PURE__ */ K("span", {
|
|
1759
1786
|
className: "flex items-center gap-1",
|
|
1760
|
-
children: [/* @__PURE__ */
|
|
1787
|
+
children: [/* @__PURE__ */ G(ue, {
|
|
1761
1788
|
size: 12,
|
|
1762
1789
|
className: "text-status-success-text"
|
|
1763
1790
|
}), m("devportal.noExpiration", "No expiration")]
|
|
1764
1791
|
}),
|
|
1765
|
-
e.revokedAt && /* @__PURE__ */
|
|
1792
|
+
e.revokedAt && /* @__PURE__ */ K("span", {
|
|
1766
1793
|
className: "flex items-center gap-1",
|
|
1767
1794
|
children: [
|
|
1768
|
-
/* @__PURE__ */
|
|
1795
|
+
/* @__PURE__ */ G(Oe, {
|
|
1769
1796
|
size: 12,
|
|
1770
1797
|
className: "text-status-error-text"
|
|
1771
1798
|
}),
|
|
@@ -1778,15 +1805,15 @@ var Re = [
|
|
|
1778
1805
|
})
|
|
1779
1806
|
]
|
|
1780
1807
|
}, e.id))
|
|
1781
|
-
}) : /* @__PURE__ */
|
|
1808
|
+
}) : /* @__PURE__ */ G(r, {
|
|
1782
1809
|
illustration: "empty-people",
|
|
1783
|
-
icon: /* @__PURE__ */
|
|
1810
|
+
icon: /* @__PURE__ */ G(we, { size: 32 }),
|
|
1784
1811
|
title: m("devportal.noDelegations", "No delegations"),
|
|
1785
1812
|
description: m("devportal.noDelegationsDescription", "Grant a delegation to allow this app to act on your behalf"),
|
|
1786
|
-
action: /* @__PURE__ */
|
|
1813
|
+
action: /* @__PURE__ */ K("button", {
|
|
1787
1814
|
onClick: i,
|
|
1788
1815
|
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",
|
|
1789
|
-
children: [/* @__PURE__ */
|
|
1816
|
+
children: [/* @__PURE__ */ G(V, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
|
|
1790
1817
|
})
|
|
1791
1818
|
})
|
|
1792
1819
|
]
|
|
@@ -1796,35 +1823,35 @@ var Re = [
|
|
|
1796
1823
|
let r = t(e);
|
|
1797
1824
|
return r === e ? n : r;
|
|
1798
1825
|
}, i = e[0], a = e[1], o = (e, t) => t ? (e - t) / t * 100 : 0;
|
|
1799
|
-
return /* @__PURE__ */
|
|
1826
|
+
return /* @__PURE__ */ K("div", {
|
|
1800
1827
|
className: "space-y-6",
|
|
1801
|
-
children: [/* @__PURE__ */
|
|
1828
|
+
children: [/* @__PURE__ */ K("div", {
|
|
1802
1829
|
className: "grid gap-4 sm:grid-cols-4",
|
|
1803
1830
|
children: [
|
|
1804
|
-
/* @__PURE__ */
|
|
1831
|
+
/* @__PURE__ */ G(Q, {
|
|
1805
1832
|
label: n("devportal.activeUsers", "Active Users"),
|
|
1806
1833
|
value: i?.activeUsers.toLocaleString() || "0",
|
|
1807
1834
|
trend: a ? o(i.activeUsers, a.activeUsers) : void 0
|
|
1808
1835
|
}),
|
|
1809
|
-
/* @__PURE__ */
|
|
1836
|
+
/* @__PURE__ */ G(Q, {
|
|
1810
1837
|
label: n("devportal.apiCalls", "API Calls"),
|
|
1811
1838
|
value: i ? `${(i.apiCalls / 1e3).toFixed(1)}K` : "0",
|
|
1812
1839
|
trend: a ? o(i.apiCalls, a.apiCalls) : void 0
|
|
1813
1840
|
}),
|
|
1814
|
-
/* @__PURE__ */
|
|
1841
|
+
/* @__PURE__ */ G(Q, {
|
|
1815
1842
|
label: n("devportal.avgResponseTime", "Avg Response Time"),
|
|
1816
1843
|
value: i?.avgResponseTime ? `${i.avgResponseTime}ms` : n("devportal.notAvailable", "N/A"),
|
|
1817
1844
|
trend: a && i?.avgResponseTime ? -o(i.avgResponseTime, a.avgResponseTime || 1) : void 0
|
|
1818
1845
|
}),
|
|
1819
|
-
/* @__PURE__ */
|
|
1846
|
+
/* @__PURE__ */ G(Q, {
|
|
1820
1847
|
label: n("devportal.errorRate", "Error Rate"),
|
|
1821
1848
|
value: i && i.apiCalls > 0 ? `${(i.errors / i.apiCalls * 100).toFixed(2)}%` : "0%",
|
|
1822
1849
|
trend: a && i && i.apiCalls > 0 && a.apiCalls > 0 ? -o(i.errors / i.apiCalls, a.errors / a.apiCalls) : void 0
|
|
1823
1850
|
})
|
|
1824
1851
|
]
|
|
1825
|
-
}), /* @__PURE__ */
|
|
1852
|
+
}), /* @__PURE__ */ G(y, {
|
|
1826
1853
|
title: n("devportal.dailyBreakdown", "Daily Breakdown"),
|
|
1827
|
-
children: e.length > 0 ? /* @__PURE__ */
|
|
1854
|
+
children: e.length > 0 ? /* @__PURE__ */ G(E, {
|
|
1828
1855
|
data: e,
|
|
1829
1856
|
keyField: "id",
|
|
1830
1857
|
columns: [
|
|
@@ -1864,9 +1891,9 @@ var Re = [
|
|
|
1864
1891
|
render: (e) => e.sessions.toLocaleString()
|
|
1865
1892
|
}
|
|
1866
1893
|
]
|
|
1867
|
-
}) : /* @__PURE__ */
|
|
1894
|
+
}) : /* @__PURE__ */ G(r, {
|
|
1868
1895
|
illustration: "empty-data",
|
|
1869
|
-
icon: /* @__PURE__ */
|
|
1896
|
+
icon: /* @__PURE__ */ G(F, { size: 32 }),
|
|
1870
1897
|
title: n("devportal.noAnalyticsData", "No analytics data"),
|
|
1871
1898
|
description: n("devportal.noAnalyticsDataDescription", "Analytics data will appear here once the application starts receiving traffic.")
|
|
1872
1899
|
})
|
|
@@ -1910,21 +1937,21 @@ var Re = [
|
|
|
1910
1937
|
]), S = j(() => {
|
|
1911
1938
|
i && v(i), b(!0);
|
|
1912
1939
|
}, [i]);
|
|
1913
|
-
return /* @__PURE__ */
|
|
1940
|
+
return /* @__PURE__ */ K("div", {
|
|
1914
1941
|
className: "space-y-4",
|
|
1915
1942
|
children: [
|
|
1916
|
-
/* @__PURE__ */
|
|
1943
|
+
/* @__PURE__ */ K("div", {
|
|
1917
1944
|
className: "flex items-center justify-between",
|
|
1918
|
-
children: [/* @__PURE__ */
|
|
1945
|
+
children: [/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("h3", {
|
|
1919
1946
|
className: "text-lg font-semibold",
|
|
1920
1947
|
children: o("devportal.apiPlayground", "API Playground")
|
|
1921
|
-
}), /* @__PURE__ */
|
|
1948
|
+
}), /* @__PURE__ */ K("p", {
|
|
1922
1949
|
className: "text-sm text-text-secondary",
|
|
1923
1950
|
children: [
|
|
1924
1951
|
o("devportal.apiPlaygroundDescription", "Test GraphQL APIs in the context of"),
|
|
1925
1952
|
" ",
|
|
1926
|
-
/* @__PURE__ */
|
|
1927
|
-
t.appId && /* @__PURE__ */
|
|
1953
|
+
/* @__PURE__ */ G("strong", { children: t.name }),
|
|
1954
|
+
t.appId && /* @__PURE__ */ K("span", {
|
|
1928
1955
|
className: "ml-1 text-xs text-text-secondary",
|
|
1929
1956
|
children: [
|
|
1930
1957
|
"(OAuth App: ",
|
|
@@ -1933,39 +1960,39 @@ var Re = [
|
|
|
1933
1960
|
]
|
|
1934
1961
|
})
|
|
1935
1962
|
]
|
|
1936
|
-
})] }), /* @__PURE__ */
|
|
1963
|
+
})] }), /* @__PURE__ */ K("button", {
|
|
1937
1964
|
onClick: S,
|
|
1938
1965
|
className: "flex items-center gap-2 rounded-md border px-3 py-1.5 text-sm font-medium hover:bg-accent transition-colors",
|
|
1939
|
-
children: [/* @__PURE__ */
|
|
1966
|
+
children: [/* @__PURE__ */ G(z, { size: 14 }), o("devportal.autoFillCredentials", "Auto-fill Credentials")]
|
|
1940
1967
|
})]
|
|
1941
1968
|
}),
|
|
1942
|
-
y && /* @__PURE__ */
|
|
1969
|
+
y && /* @__PURE__ */ K("div", {
|
|
1943
1970
|
className: "rounded-lg border bg-status-info-bg-subtle p-4 text-sm space-y-2",
|
|
1944
1971
|
children: [
|
|
1945
|
-
/* @__PURE__ */
|
|
1972
|
+
/* @__PURE__ */ G("p", {
|
|
1946
1973
|
className: "font-medium text-status-info-text",
|
|
1947
1974
|
children: o("devportal.authenticationGuide", "Authentication Guide")
|
|
1948
1975
|
}),
|
|
1949
|
-
/* @__PURE__ */
|
|
1976
|
+
/* @__PURE__ */ K("p", {
|
|
1950
1977
|
className: "text-status-info-text",
|
|
1951
1978
|
children: [
|
|
1952
1979
|
o("devportal.authenticationGuideText", "Your current session token has been filled in. For app-level authentication (Client Credentials flow), use the"),
|
|
1953
1980
|
" ",
|
|
1954
|
-
/* @__PURE__ */
|
|
1981
|
+
/* @__PURE__ */ G("strong", { children: o("devportal.oauthClientsTab", "OAuth Clients") }),
|
|
1955
1982
|
" ",
|
|
1956
1983
|
o("devportal.authenticationGuideText2", "tab to get the app's clientId and clientSecret, then call:")
|
|
1957
1984
|
]
|
|
1958
1985
|
}),
|
|
1959
|
-
/* @__PURE__ */
|
|
1986
|
+
/* @__PURE__ */ G("pre", {
|
|
1960
1987
|
className: "rounded bg-status-info-bg-subtle p-2 text-xs overflow-x-auto text-status-info-text",
|
|
1961
1988
|
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}"
|
|
1962
1989
|
}),
|
|
1963
|
-
/* @__PURE__ */
|
|
1990
|
+
/* @__PURE__ */ K("p", {
|
|
1964
1991
|
className: "text-status-info-text",
|
|
1965
1992
|
children: [
|
|
1966
1993
|
o("devportal.useReturnedAccessToken", "Use the returned"),
|
|
1967
1994
|
" ",
|
|
1968
|
-
/* @__PURE__ */
|
|
1995
|
+
/* @__PURE__ */ G("code", {
|
|
1969
1996
|
className: "bg-status-info-bg-subtle px-1 rounded",
|
|
1970
1997
|
children: "accessToken"
|
|
1971
1998
|
}),
|
|
@@ -1973,79 +2000,79 @@ var Re = [
|
|
|
1973
2000
|
o("devportal.asBearerToken", "as the Bearer token below.")
|
|
1974
2001
|
]
|
|
1975
2002
|
}),
|
|
1976
|
-
/* @__PURE__ */
|
|
2003
|
+
/* @__PURE__ */ G("button", {
|
|
1977
2004
|
onClick: () => b(!1),
|
|
1978
2005
|
className: "text-xs text-accent-blue hover:underline",
|
|
1979
2006
|
children: o("devportal.dismiss", "Dismiss")
|
|
1980
2007
|
})
|
|
1981
2008
|
]
|
|
1982
2009
|
}),
|
|
1983
|
-
/* @__PURE__ */
|
|
2010
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
|
|
1984
2011
|
className: "block text-sm font-medium mb-1",
|
|
1985
2012
|
children: o("devportal.gatewayEndpoint", "Gateway Endpoint")
|
|
1986
|
-
}), /* @__PURE__ */
|
|
2013
|
+
}), /* @__PURE__ */ K("div", {
|
|
1987
2014
|
className: "flex gap-2",
|
|
1988
|
-
children: [/* @__PURE__ */
|
|
2015
|
+
children: [/* @__PURE__ */ G("input", {
|
|
1989
2016
|
type: "text",
|
|
1990
2017
|
value: h,
|
|
1991
2018
|
onChange: (e) => g(e.target.value),
|
|
1992
2019
|
className: "flex-1 rounded-md border px-3 py-2 text-sm font-mono bg-bg-surface"
|
|
1993
|
-
}), /* @__PURE__ */
|
|
2020
|
+
}), /* @__PURE__ */ K("select", {
|
|
1994
2021
|
onChange: (e) => g(e.target.value),
|
|
1995
2022
|
className: "rounded-md border px-3 py-2 text-sm bg-bg-surface",
|
|
1996
2023
|
value: h,
|
|
1997
|
-
children: [/* @__PURE__ */
|
|
2024
|
+
children: [/* @__PURE__ */ G("option", {
|
|
1998
2025
|
value: `${n || "https://gw-global.local.burdenoff.com"}/global/graphql`,
|
|
1999
2026
|
children: o("devportal.globalGateway", "Global Gateway")
|
|
2000
|
-
}), /* @__PURE__ */
|
|
2027
|
+
}), /* @__PURE__ */ G("option", {
|
|
2001
2028
|
value: `${r || "https://gw-wspace.local.burdenoff.com"}/workspaces/graphql`,
|
|
2002
2029
|
children: o("devportal.workspaceGateway", "Workspace Gateway")
|
|
2003
2030
|
})]
|
|
2004
2031
|
})]
|
|
2005
2032
|
})] }),
|
|
2006
|
-
/* @__PURE__ */
|
|
2033
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
|
|
2007
2034
|
className: "block text-sm font-medium mb-1",
|
|
2008
2035
|
children: o("devportal.bearerToken", "Bearer Token")
|
|
2009
|
-
}), /* @__PURE__ */
|
|
2036
|
+
}), /* @__PURE__ */ G("input", {
|
|
2010
2037
|
type: "password",
|
|
2011
2038
|
value: _,
|
|
2012
2039
|
onChange: (e) => v(e.target.value),
|
|
2013
2040
|
placeholder: o("devportal.pasteAccessToken", "Paste access token here..."),
|
|
2014
2041
|
className: "w-full rounded-md border px-3 py-2 text-sm font-mono bg-bg-surface"
|
|
2015
2042
|
})] }),
|
|
2016
|
-
/* @__PURE__ */
|
|
2043
|
+
/* @__PURE__ */ K("div", {
|
|
2017
2044
|
className: "grid grid-cols-1 lg:grid-cols-2 gap-4",
|
|
2018
|
-
children: [/* @__PURE__ */
|
|
2045
|
+
children: [/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
|
|
2019
2046
|
className: "block text-sm font-medium mb-1",
|
|
2020
2047
|
children: o("devportal.query", "Query")
|
|
2021
|
-
}), /* @__PURE__ */
|
|
2048
|
+
}), /* @__PURE__ */ G("textarea", {
|
|
2022
2049
|
value: s,
|
|
2023
2050
|
onChange: (e) => c(e.target.value),
|
|
2024
2051
|
className: "w-full h-64 rounded-md border px-3 py-2 text-sm font-mono bg-bg-surface resize-y",
|
|
2025
2052
|
spellCheck: !1
|
|
2026
|
-
})] }), /* @__PURE__ */
|
|
2053
|
+
})] }), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
|
|
2027
2054
|
className: "block text-sm font-medium mb-1",
|
|
2028
2055
|
children: o("devportal.variablesJson", "Variables (JSON)")
|
|
2029
|
-
}), /* @__PURE__ */
|
|
2056
|
+
}), /* @__PURE__ */ G("textarea", {
|
|
2030
2057
|
value: l,
|
|
2031
2058
|
onChange: (e) => u(e.target.value),
|
|
2032
2059
|
className: "w-full h-64 rounded-md border px-3 py-2 text-sm font-mono bg-bg-surface resize-y",
|
|
2033
2060
|
spellCheck: !1
|
|
2034
2061
|
})] })]
|
|
2035
2062
|
}),
|
|
2036
|
-
/* @__PURE__ */
|
|
2063
|
+
/* @__PURE__ */ K("button", {
|
|
2037
2064
|
onClick: x,
|
|
2038
2065
|
disabled: p,
|
|
2039
2066
|
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",
|
|
2040
|
-
children: [p ? /* @__PURE__ */
|
|
2067
|
+
children: [p ? /* @__PURE__ */ G(B, {
|
|
2041
2068
|
size: 16,
|
|
2042
2069
|
className: "animate-spin"
|
|
2043
|
-
}) : /* @__PURE__ */
|
|
2070
|
+
}) : /* @__PURE__ */ G(R, { size: 16 }), p ? o("devportal.executing", "Executing...") : o("devportal.executeQuery", "Execute Query")]
|
|
2044
2071
|
}),
|
|
2045
|
-
d && /* @__PURE__ */
|
|
2072
|
+
d && /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
|
|
2046
2073
|
className: "block text-sm font-medium mb-1",
|
|
2047
2074
|
children: o("devportal.response", "Response")
|
|
2048
|
-
}), /* @__PURE__ */
|
|
2075
|
+
}), /* @__PURE__ */ G("pre", {
|
|
2049
2076
|
className: "w-full max-h-96 overflow-auto rounded-md border bg-bg-sunken p-4 text-xs font-mono",
|
|
2050
2077
|
children: d
|
|
2051
2078
|
})] })
|
|
@@ -2057,45 +2084,45 @@ var Re = [
|
|
|
2057
2084
|
r((await s(e)).downloadUrl);
|
|
2058
2085
|
} catch {}
|
|
2059
2086
|
}, [s, r]);
|
|
2060
|
-
return /* @__PURE__ */
|
|
2087
|
+
return /* @__PURE__ */ K("div", {
|
|
2061
2088
|
className: "space-y-1.5",
|
|
2062
2089
|
children: [
|
|
2063
|
-
/* @__PURE__ */
|
|
2090
|
+
/* @__PURE__ */ G("label", {
|
|
2064
2091
|
className: "text-sm font-medium",
|
|
2065
2092
|
children: e
|
|
2066
2093
|
}),
|
|
2067
|
-
/* @__PURE__ */
|
|
2094
|
+
/* @__PURE__ */ K("div", {
|
|
2068
2095
|
className: "flex gap-3 items-start",
|
|
2069
|
-
children: [/* @__PURE__ */
|
|
2096
|
+
children: [/* @__PURE__ */ K("div", {
|
|
2070
2097
|
className: t("relative shrink-0 w-20 rounded-lg border border-border-subtle bg-bg-sunken overflow-hidden flex items-center justify-center", o),
|
|
2071
|
-
children: [n ? /* @__PURE__ */
|
|
2098
|
+
children: [n ? /* @__PURE__ */ G("img", {
|
|
2072
2099
|
src: n,
|
|
2073
2100
|
alt: e,
|
|
2074
2101
|
className: "w-full h-full object-cover"
|
|
2075
|
-
}) : /* @__PURE__ */
|
|
2102
|
+
}) : /* @__PURE__ */ G(U, {
|
|
2076
2103
|
size: 18,
|
|
2077
2104
|
className: "text-text-secondary opacity-40"
|
|
2078
|
-
}), c && /* @__PURE__ */
|
|
2105
|
+
}), c && /* @__PURE__ */ K("div", {
|
|
2079
2106
|
className: "absolute inset-0 bg-bg-overlay flex flex-col items-center justify-center gap-1",
|
|
2080
|
-
children: [/* @__PURE__ */
|
|
2107
|
+
children: [/* @__PURE__ */ G(B, {
|
|
2081
2108
|
size: 14,
|
|
2082
2109
|
className: "animate-spin text-white"
|
|
2083
|
-
}), /* @__PURE__ */
|
|
2110
|
+
}), /* @__PURE__ */ K("span", {
|
|
2084
2111
|
className: "text-white text-xs",
|
|
2085
2112
|
children: [l, "%"]
|
|
2086
2113
|
})]
|
|
2087
2114
|
})]
|
|
2088
|
-
}), /* @__PURE__ */
|
|
2115
|
+
}), /* @__PURE__ */ K("div", {
|
|
2089
2116
|
className: "flex-1 space-y-1.5",
|
|
2090
2117
|
children: [
|
|
2091
|
-
/* @__PURE__ */
|
|
2118
|
+
/* @__PURE__ */ G("input", {
|
|
2092
2119
|
type: "url",
|
|
2093
2120
|
value: n,
|
|
2094
2121
|
onChange: (e) => r(e.target.value),
|
|
2095
2122
|
placeholder: "https://...",
|
|
2096
2123
|
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"
|
|
2097
2124
|
}),
|
|
2098
|
-
/* @__PURE__ */
|
|
2125
|
+
/* @__PURE__ */ G("input", {
|
|
2099
2126
|
ref: d,
|
|
2100
2127
|
type: "file",
|
|
2101
2128
|
accept: a,
|
|
@@ -2105,21 +2132,21 @@ var Re = [
|
|
|
2105
2132
|
t && f(t), e.target.value = "";
|
|
2106
2133
|
}
|
|
2107
2134
|
}),
|
|
2108
|
-
/* @__PURE__ */
|
|
2135
|
+
/* @__PURE__ */ K("button", {
|
|
2109
2136
|
type: "button",
|
|
2110
2137
|
disabled: c,
|
|
2111
2138
|
onClick: () => d.current?.click(),
|
|
2112
2139
|
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",
|
|
2113
|
-
children: [/* @__PURE__ */
|
|
2140
|
+
children: [/* @__PURE__ */ G(U, { size: 11 }), c ? `Uploading… ${l}%` : "Upload image"]
|
|
2114
2141
|
}),
|
|
2115
|
-
u && /* @__PURE__ */
|
|
2142
|
+
u && /* @__PURE__ */ G("p", {
|
|
2116
2143
|
className: "text-xs text-status-error-text",
|
|
2117
2144
|
children: u
|
|
2118
2145
|
})
|
|
2119
2146
|
]
|
|
2120
2147
|
})]
|
|
2121
2148
|
}),
|
|
2122
|
-
i && /* @__PURE__ */
|
|
2149
|
+
i && /* @__PURE__ */ G("p", {
|
|
2123
2150
|
className: "text-xs text-text-secondary",
|
|
2124
2151
|
children: i
|
|
2125
2152
|
})
|
|
@@ -2138,51 +2165,51 @@ var Re = [
|
|
|
2138
2165
|
]), l = (t) => {
|
|
2139
2166
|
n(e.filter((e, n) => n !== t));
|
|
2140
2167
|
};
|
|
2141
|
-
return /* @__PURE__ */
|
|
2168
|
+
return /* @__PURE__ */ K("div", {
|
|
2142
2169
|
className: "space-y-2",
|
|
2143
2170
|
children: [
|
|
2144
|
-
/* @__PURE__ */
|
|
2171
|
+
/* @__PURE__ */ K("div", {
|
|
2145
2172
|
className: "flex flex-col gap-0.5",
|
|
2146
|
-
children: [/* @__PURE__ */
|
|
2173
|
+
children: [/* @__PURE__ */ G("label", {
|
|
2147
2174
|
className: "text-sm font-medium",
|
|
2148
2175
|
children: "Screenshots"
|
|
2149
|
-
}), /* @__PURE__ */
|
|
2176
|
+
}), /* @__PURE__ */ G("p", {
|
|
2150
2177
|
className: "text-xs text-text-muted",
|
|
2151
2178
|
children: "Shown in the horizontal preview strip below the hero — wide landscape proportions work best (16:9)"
|
|
2152
2179
|
})]
|
|
2153
2180
|
}),
|
|
2154
|
-
/* @__PURE__ */
|
|
2181
|
+
/* @__PURE__ */ K("div", {
|
|
2155
2182
|
className: "flex flex-wrap gap-3",
|
|
2156
|
-
children: [e.map((e, t) => /* @__PURE__ */
|
|
2183
|
+
children: [e.map((e, t) => /* @__PURE__ */ K("div", {
|
|
2157
2184
|
className: "relative group w-36 aspect-video rounded-lg border border-border-subtle overflow-hidden bg-bg-sunken",
|
|
2158
|
-
children: [/* @__PURE__ */
|
|
2185
|
+
children: [/* @__PURE__ */ G("img", {
|
|
2159
2186
|
src: e,
|
|
2160
2187
|
alt: `Screenshot ${t + 1}`,
|
|
2161
2188
|
className: "w-full h-full object-cover"
|
|
2162
|
-
}), /* @__PURE__ */
|
|
2189
|
+
}), /* @__PURE__ */ G("button", {
|
|
2163
2190
|
type: "button",
|
|
2164
2191
|
onClick: () => l(t),
|
|
2165
2192
|
className: "absolute top-1 right-1 rounded-full bg-bg-overlay text-white p-0.5 opacity-0 group-hover:opacity-100 transition-opacity",
|
|
2166
|
-
children: /* @__PURE__ */
|
|
2193
|
+
children: /* @__PURE__ */ G(De, { size: 12 })
|
|
2167
2194
|
})]
|
|
2168
|
-
}, t)), /* @__PURE__ */
|
|
2195
|
+
}, t)), /* @__PURE__ */ G("button", {
|
|
2169
2196
|
type: "button",
|
|
2170
2197
|
disabled: i,
|
|
2171
2198
|
onClick: () => s.current?.click(),
|
|
2172
2199
|
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"),
|
|
2173
|
-
children: i ? /* @__PURE__ */
|
|
2200
|
+
children: i ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(B, {
|
|
2174
2201
|
size: 18,
|
|
2175
2202
|
className: "animate-spin text-primary"
|
|
2176
|
-
}), /* @__PURE__ */
|
|
2203
|
+
}), /* @__PURE__ */ K("span", {
|
|
2177
2204
|
className: "text-xs",
|
|
2178
2205
|
children: [a, "%"]
|
|
2179
|
-
})] }) : /* @__PURE__ */
|
|
2206
|
+
})] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(U, { size: 18 }), /* @__PURE__ */ G("span", {
|
|
2180
2207
|
className: "text-xs",
|
|
2181
2208
|
children: "Add screenshot"
|
|
2182
2209
|
})] })
|
|
2183
2210
|
})]
|
|
2184
2211
|
}),
|
|
2185
|
-
/* @__PURE__ */
|
|
2212
|
+
/* @__PURE__ */ G("input", {
|
|
2186
2213
|
ref: s,
|
|
2187
2214
|
type: "file",
|
|
2188
2215
|
accept: "image/png,image/jpeg,image/webp,image/gif",
|
|
@@ -2192,7 +2219,7 @@ var Re = [
|
|
|
2192
2219
|
t && c(t), e.target.value = "";
|
|
2193
2220
|
}
|
|
2194
2221
|
}),
|
|
2195
|
-
o && /* @__PURE__ */
|
|
2222
|
+
o && /* @__PURE__ */ G("p", {
|
|
2196
2223
|
className: "text-xs text-status-error-text",
|
|
2197
2224
|
children: o
|
|
2198
2225
|
})
|
|
@@ -2311,19 +2338,19 @@ var it = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2311
2338
|
let { workspacesGatewayUrl: c, authToken: l, workspaceId: u, getWorkspaceToken: d } = e(), { t: f } = P(), p = (e, t) => {
|
|
2312
2339
|
let n = f(e);
|
|
2313
2340
|
return n === e ? t : n;
|
|
2314
|
-
}, [m, h] = N(() => rt(t)), [g, v] = N(!1), b = se(t);
|
|
2315
|
-
|
|
2316
|
-
let [
|
|
2341
|
+
}, [m, h] = N(() => rt(t)), [g, v] = N(!1), [b, x] = N(!1), [S, C] = N(null), w = se(t);
|
|
2342
|
+
w.current = t;
|
|
2343
|
+
let [ee] = _();
|
|
2317
2344
|
oe(() => {
|
|
2318
|
-
h(rt(
|
|
2345
|
+
h(rt(w.current)), C(null), x(!1);
|
|
2319
2346
|
}, [t.id]);
|
|
2320
|
-
let
|
|
2347
|
+
let E = (e, t) => {
|
|
2321
2348
|
h((n) => ({
|
|
2322
2349
|
...n,
|
|
2323
2350
|
[e]: t
|
|
2324
|
-
}));
|
|
2325
|
-
},
|
|
2326
|
-
v(!0);
|
|
2351
|
+
})), C(null), x(!1);
|
|
2352
|
+
}, D = m.shortDescription.trim().length > 0 && m.privacyPolicyUrl.trim().length > 0 && m.termsOfServiceUrl.trim().length > 0, ne = async () => {
|
|
2353
|
+
v(!0), C(null);
|
|
2327
2354
|
try {
|
|
2328
2355
|
let e = m.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean), n = m.manifestPermissionsText.split("\n").map((e) => e.trim()).filter(Boolean), r = Z.has(m.manifestItemType), i = t.manifest ?? {}, a = {
|
|
2329
2356
|
manifestVersion: typeof i.manifestVersion == "string" ? i.manifestVersion : "1.0",
|
|
@@ -2339,7 +2366,7 @@ var it = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2339
2366
|
permissions: n,
|
|
2340
2367
|
compatibility: { minPlatformVersion: m.manifestMinPlatformVersion }
|
|
2341
2368
|
};
|
|
2342
|
-
await
|
|
2369
|
+
await ee({ variables: {
|
|
2343
2370
|
id: t.id,
|
|
2344
2371
|
input: {
|
|
2345
2372
|
iconUrl: m.iconUrl || null,
|
|
@@ -2356,27 +2383,27 @@ var it = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2356
2383
|
termsOfServiceUrl: m.termsOfServiceUrl || null,
|
|
2357
2384
|
manifest: a
|
|
2358
2385
|
}
|
|
2359
|
-
} }), T("success");
|
|
2386
|
+
} }), T("success"), C("success"), x(!0);
|
|
2360
2387
|
} catch {
|
|
2361
|
-
T("error");
|
|
2388
|
+
T("error"), C("error");
|
|
2362
2389
|
} finally {
|
|
2363
2390
|
v(!1);
|
|
2364
2391
|
}
|
|
2365
|
-
}, { upload:
|
|
2366
|
-
return /* @__PURE__ */
|
|
2392
|
+
}, { upload: re, uploading: ie, progress: ae, error: j } = A(c, l, u, d, "/DevPortal/Assets"), { upload: M, uploading: le, progress: F, error: L } = A(c, l, u, d, "/DevPortal/Assets"), { upload: pe, uploading: me, progress: he, error: ge } = A(c, l, u, d, "/DevPortal/Assets"), z = Z.has(m.manifestItemType), _e = t.status === "SUBMITTED";
|
|
2393
|
+
return /* @__PURE__ */ K("div", {
|
|
2367
2394
|
className: "space-y-8 max-w-3xl",
|
|
2368
2395
|
children: [
|
|
2369
|
-
t.status === "PUBLISHED" ? /* @__PURE__ */
|
|
2396
|
+
t.status === "PUBLISHED" ? /* @__PURE__ */ K("div", {
|
|
2370
2397
|
className: "flex items-start gap-3 rounded-lg border border-success/30 bg-success/10 px-4 py-3",
|
|
2371
|
-
children: [/* @__PURE__ */
|
|
2398
|
+
children: [/* @__PURE__ */ G(ue, {
|
|
2372
2399
|
size: 16,
|
|
2373
2400
|
className: "text-success mt-0.5 shrink-0"
|
|
2374
|
-
}), /* @__PURE__ */
|
|
2401
|
+
}), /* @__PURE__ */ K("div", {
|
|
2375
2402
|
className: "text-sm",
|
|
2376
|
-
children: [/* @__PURE__ */
|
|
2403
|
+
children: [/* @__PURE__ */ G("span", {
|
|
2377
2404
|
className: "font-medium text-success",
|
|
2378
2405
|
children: p("devportal.storeListing.published", "Published")
|
|
2379
|
-
}), t.publishedAt && /* @__PURE__ */
|
|
2406
|
+
}), t.publishedAt && /* @__PURE__ */ K("span", {
|
|
2380
2407
|
className: "text-text-secondary ml-2",
|
|
2381
2408
|
children: [
|
|
2382
2409
|
p("devportal.storeListing.since", "since"),
|
|
@@ -2385,229 +2412,253 @@ var it = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2385
2412
|
]
|
|
2386
2413
|
})]
|
|
2387
2414
|
})]
|
|
2388
|
-
}) :
|
|
2415
|
+
}) : _e ? /* @__PURE__ */ K("div", {
|
|
2389
2416
|
className: "flex items-center justify-between gap-3 rounded-lg border border-primary/30 bg-action-primary-bg/5 px-4 py-3",
|
|
2390
|
-
children: [/* @__PURE__ */
|
|
2417
|
+
children: [/* @__PURE__ */ K("div", {
|
|
2391
2418
|
className: "flex items-start gap-3",
|
|
2392
|
-
children: [/* @__PURE__ */
|
|
2419
|
+
children: [/* @__PURE__ */ G(fe, {
|
|
2393
2420
|
size: 16,
|
|
2394
2421
|
className: "text-primary mt-0.5 shrink-0"
|
|
2395
|
-
}), /* @__PURE__ */
|
|
2422
|
+
}), /* @__PURE__ */ K("div", {
|
|
2396
2423
|
className: "text-sm",
|
|
2397
2424
|
children: [
|
|
2398
|
-
/* @__PURE__ */
|
|
2425
|
+
/* @__PURE__ */ G("span", {
|
|
2399
2426
|
className: "font-medium text-primary",
|
|
2400
2427
|
children: p("devportal.storeListing.underReview", "Submitted for review")
|
|
2401
2428
|
}),
|
|
2402
|
-
t.submittedAt && /* @__PURE__ */
|
|
2429
|
+
t.submittedAt && /* @__PURE__ */ G("span", {
|
|
2403
2430
|
className: "text-text-secondary ml-2",
|
|
2404
2431
|
children: new Date(t.submittedAt).toLocaleDateString()
|
|
2405
2432
|
}),
|
|
2406
|
-
t.reviewStatus && /* @__PURE__ */
|
|
2433
|
+
t.reviewStatus && /* @__PURE__ */ K("span", {
|
|
2407
2434
|
className: "text-text-secondary ml-2",
|
|
2408
2435
|
children: ["· ", t.reviewStatus]
|
|
2409
2436
|
})
|
|
2410
2437
|
]
|
|
2411
2438
|
})]
|
|
2412
|
-
}), s && /* @__PURE__ */
|
|
2439
|
+
}), s && /* @__PURE__ */ K("button", {
|
|
2413
2440
|
type: "button",
|
|
2414
2441
|
onClick: s,
|
|
2415
2442
|
className: "shrink-0 text-xs text-primary hover:underline font-medium flex items-center gap-1",
|
|
2416
|
-
children: [p("devportal.viewStatus", "View Status"), /* @__PURE__ */
|
|
2443
|
+
children: [p("devportal.viewStatus", "View Status"), /* @__PURE__ */ G(R, { size: 12 })]
|
|
2417
2444
|
})]
|
|
2418
|
-
}) : /* @__PURE__ */
|
|
2445
|
+
}) : /* @__PURE__ */ K("div", {
|
|
2419
2446
|
className: "flex items-start gap-3 rounded-lg border border-warning/30 bg-warning/5 px-4 py-3",
|
|
2420
|
-
children: [/* @__PURE__ */
|
|
2447
|
+
children: [/* @__PURE__ */ G(ce, {
|
|
2421
2448
|
size: 16,
|
|
2422
2449
|
className: "text-warning mt-0.5 shrink-0"
|
|
2423
|
-
}), /* @__PURE__ */
|
|
2450
|
+
}), /* @__PURE__ */ K("div", {
|
|
2424
2451
|
className: "text-sm",
|
|
2425
|
-
children: [/* @__PURE__ */
|
|
2452
|
+
children: [/* @__PURE__ */ G("span", {
|
|
2426
2453
|
className: "font-medium text-warning",
|
|
2427
2454
|
children: p("devportal.storeListing.draft", "Draft")
|
|
2428
|
-
}), /* @__PURE__ */
|
|
2455
|
+
}), /* @__PURE__ */ G("span", {
|
|
2429
2456
|
className: "text-text-secondary ml-2",
|
|
2430
2457
|
children: p("devportal.storeListing.draftHint", "Complete your store listing and submit for review to publish.")
|
|
2431
2458
|
})]
|
|
2432
2459
|
})]
|
|
2433
2460
|
}),
|
|
2434
|
-
/* @__PURE__ */
|
|
2461
|
+
/* @__PURE__ */ G(y, {
|
|
2435
2462
|
title: p("devportal.package", "Package"),
|
|
2436
2463
|
description: p("devportal.packageDescription", "Technical configuration — how FluidGrid installs and runs this item"),
|
|
2437
|
-
children: /* @__PURE__ */
|
|
2464
|
+
children: /* @__PURE__ */ K("div", {
|
|
2438
2465
|
className: "space-y-6",
|
|
2439
2466
|
children: [
|
|
2440
|
-
/* @__PURE__ */
|
|
2467
|
+
/* @__PURE__ */ G(k, {
|
|
2441
2468
|
label: p("devportal.storeItemType", "Item Type"),
|
|
2442
2469
|
value: m.manifestItemType,
|
|
2443
2470
|
onChange: (e) => {
|
|
2444
2471
|
let t = e.target.value;
|
|
2445
|
-
|
|
2472
|
+
E("manifestItemType", t), Z.has(t) ? E("manifestInstallType", "json") : m.manifestInstallType === "json" && E("manifestInstallType", "zip");
|
|
2446
2473
|
},
|
|
2447
2474
|
options: tt[t.appType] ?? tt.APP,
|
|
2448
2475
|
placeholder: p("devportal.selectItemType", "Select item type…"),
|
|
2449
2476
|
hint: p("devportal.storeItemTypeHint", "Sub-category shown in the marketplace (e.g. Node vs Agent vs Parser)")
|
|
2450
2477
|
}),
|
|
2451
|
-
/* @__PURE__ */
|
|
2478
|
+
/* @__PURE__ */ G(O, {
|
|
2452
2479
|
label: p("devportal.manifestDisplayName", "Display Name"),
|
|
2453
2480
|
value: m.manifestDisplayName,
|
|
2454
|
-
onChange: (e) =>
|
|
2481
|
+
onChange: (e) => E("manifestDisplayName", e.target.value),
|
|
2455
2482
|
placeholder: "My Awesome Node"
|
|
2456
2483
|
}),
|
|
2457
|
-
|
|
2484
|
+
z && t.appType !== "WORKFLOW" && /* @__PURE__ */ G(te, {
|
|
2458
2485
|
label: p("devportal.jsonContent", "Template Definition (JSON)"),
|
|
2459
2486
|
value: m.manifestJsonContent,
|
|
2460
|
-
onChange: (e) =>
|
|
2487
|
+
onChange: (e) => E("manifestJsonContent", e.target.value),
|
|
2461
2488
|
rows: 12,
|
|
2462
2489
|
placeholder: "{\n \"nodes\": [],\n \"edges\": []\n}",
|
|
2463
2490
|
hint: p("devportal.jsonContentHint", "Paste the full JSON definition. Stored and applied directly — no zip needed.")
|
|
2464
2491
|
}),
|
|
2465
|
-
|
|
2492
|
+
z && t.appType === "WORKFLOW" && /* @__PURE__ */ K("p", {
|
|
2466
2493
|
className: "text-sm text-text-secondary rounded-md bg-bg-sunken px-3 py-2",
|
|
2467
2494
|
children: [
|
|
2468
2495
|
"The Workflow Definition (JSON) is set per version. Go to the",
|
|
2469
2496
|
" ",
|
|
2470
|
-
/* @__PURE__ */
|
|
2497
|
+
/* @__PURE__ */ G("strong", { children: "Versions" }),
|
|
2471
2498
|
" tab to add or update it."
|
|
2472
2499
|
]
|
|
2473
2500
|
})
|
|
2474
2501
|
]
|
|
2475
2502
|
})
|
|
2476
2503
|
}),
|
|
2477
|
-
/* @__PURE__ */
|
|
2504
|
+
/* @__PURE__ */ G(y, {
|
|
2478
2505
|
title: p("devportal.storePresentation", "Store Presence"),
|
|
2479
2506
|
description: p("devportal.storePresentationDescription", "Visual assets and copy shown to users browsing the marketplace"),
|
|
2480
|
-
children: /* @__PURE__ */
|
|
2507
|
+
children: /* @__PURE__ */ K("div", {
|
|
2481
2508
|
className: "space-y-5",
|
|
2482
2509
|
children: [
|
|
2483
|
-
/* @__PURE__ */
|
|
2510
|
+
/* @__PURE__ */ K("div", {
|
|
2484
2511
|
className: "grid gap-5 sm:grid-cols-2",
|
|
2485
|
-
children: [/* @__PURE__ */
|
|
2512
|
+
children: [/* @__PURE__ */ G($e, {
|
|
2486
2513
|
label: p("devportal.iconUrl", "Icon"),
|
|
2487
2514
|
value: m.iconUrl,
|
|
2488
|
-
onChange: (e) =>
|
|
2515
|
+
onChange: (e) => E("iconUrl", e),
|
|
2489
2516
|
hint: p("devportal.iconUrlHint", "Shown in marketplace cards and search — square proportions (1:1)"),
|
|
2490
2517
|
aspectClass: "aspect-square",
|
|
2491
|
-
upload:
|
|
2492
|
-
uploading:
|
|
2493
|
-
progress:
|
|
2494
|
-
error:
|
|
2495
|
-
}), /* @__PURE__ */
|
|
2518
|
+
upload: re,
|
|
2519
|
+
uploading: ie,
|
|
2520
|
+
progress: ae,
|
|
2521
|
+
error: j
|
|
2522
|
+
}), /* @__PURE__ */ G($e, {
|
|
2496
2523
|
label: p("devportal.bannerUrl", "Banner"),
|
|
2497
2524
|
value: m.bannerUrl,
|
|
2498
|
-
onChange: (e) =>
|
|
2525
|
+
onChange: (e) => E("bannerUrl", e),
|
|
2499
2526
|
hint: p("devportal.bannerUrlHint", "Fills the right panel on the product page — square or portrait works best on all screen sizes (1:1)"),
|
|
2500
2527
|
aspectClass: "aspect-square",
|
|
2501
|
-
upload:
|
|
2502
|
-
uploading:
|
|
2503
|
-
progress:
|
|
2504
|
-
error:
|
|
2528
|
+
upload: M,
|
|
2529
|
+
uploading: le,
|
|
2530
|
+
progress: F,
|
|
2531
|
+
error: L
|
|
2505
2532
|
})]
|
|
2506
2533
|
}),
|
|
2507
|
-
/* @__PURE__ */
|
|
2534
|
+
/* @__PURE__ */ G(O, {
|
|
2508
2535
|
label: p("devportal.videoUrl", "Demo Video URL"),
|
|
2509
2536
|
value: m.videoUrl,
|
|
2510
|
-
onChange: (e) =>
|
|
2537
|
+
onChange: (e) => E("videoUrl", e.target.value),
|
|
2511
2538
|
placeholder: "https://...",
|
|
2512
2539
|
hint: p("devportal.videoUrlHint", "YouTube or Vimeo embed URL")
|
|
2513
2540
|
}),
|
|
2514
|
-
/* @__PURE__ */
|
|
2541
|
+
/* @__PURE__ */ G(te, {
|
|
2515
2542
|
label: p("devportal.shortDescription", "Short Description"),
|
|
2516
2543
|
value: m.shortDescription,
|
|
2517
|
-
onChange: (e) =>
|
|
2544
|
+
onChange: (e) => E("shortDescription", e.target.value),
|
|
2518
2545
|
maxLength: 200,
|
|
2519
2546
|
rows: 2,
|
|
2520
2547
|
hint: `${m.shortDescription.length}/200 · ${p("devportal.shortDescHint", "Shown in search results and cards")}`
|
|
2521
2548
|
}),
|
|
2522
|
-
/* @__PURE__ */
|
|
2549
|
+
/* @__PURE__ */ G(te, {
|
|
2523
2550
|
label: p("devportal.longDescription", "Full Description"),
|
|
2524
2551
|
value: m.description,
|
|
2525
|
-
onChange: (e) =>
|
|
2552
|
+
onChange: (e) => E("description", e.target.value),
|
|
2526
2553
|
rows: 5,
|
|
2527
2554
|
hint: p("devportal.fullDescHint", "Markdown supported")
|
|
2528
2555
|
}),
|
|
2529
|
-
/* @__PURE__ */
|
|
2556
|
+
/* @__PURE__ */ G(X, {
|
|
2530
2557
|
urls: m.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean),
|
|
2531
|
-
onChange: (e) =>
|
|
2532
|
-
upload:
|
|
2533
|
-
uploading:
|
|
2534
|
-
progress:
|
|
2535
|
-
error:
|
|
2558
|
+
onChange: (e) => E("screenshotsText", e.join("\n")),
|
|
2559
|
+
upload: pe,
|
|
2560
|
+
uploading: me,
|
|
2561
|
+
progress: he,
|
|
2562
|
+
error: ge
|
|
2536
2563
|
})
|
|
2537
2564
|
]
|
|
2538
2565
|
})
|
|
2539
2566
|
}),
|
|
2540
|
-
/* @__PURE__ */
|
|
2567
|
+
/* @__PURE__ */ G(y, {
|
|
2541
2568
|
title: p("devportal.linksPolicies", "Links & Policies"),
|
|
2542
2569
|
description: p("devportal.linksPoliciesDescription", "External resources and legal documents — privacy policy and terms are required for store submission"),
|
|
2543
|
-
children: /* @__PURE__ */
|
|
2570
|
+
children: /* @__PURE__ */ K("div", {
|
|
2544
2571
|
className: "grid gap-4 sm:grid-cols-2",
|
|
2545
2572
|
children: [
|
|
2546
|
-
/* @__PURE__ */
|
|
2573
|
+
/* @__PURE__ */ G(O, {
|
|
2547
2574
|
label: p("devportal.websiteUrl", "Website"),
|
|
2548
2575
|
value: m.websiteUrl,
|
|
2549
|
-
onChange: (e) =>
|
|
2576
|
+
onChange: (e) => E("websiteUrl", e.target.value),
|
|
2550
2577
|
placeholder: "https://..."
|
|
2551
2578
|
}),
|
|
2552
|
-
/* @__PURE__ */
|
|
2579
|
+
/* @__PURE__ */ G(O, {
|
|
2553
2580
|
label: p("devportal.documentationUrl", "Documentation"),
|
|
2554
2581
|
value: m.documentationUrl,
|
|
2555
|
-
onChange: (e) =>
|
|
2582
|
+
onChange: (e) => E("documentationUrl", e.target.value),
|
|
2556
2583
|
placeholder: "https://..."
|
|
2557
2584
|
}),
|
|
2558
|
-
/* @__PURE__ */
|
|
2585
|
+
/* @__PURE__ */ G(O, {
|
|
2559
2586
|
label: p("devportal.githubUrl", "GitHub"),
|
|
2560
2587
|
value: m.githubUrl,
|
|
2561
|
-
onChange: (e) =>
|
|
2588
|
+
onChange: (e) => E("githubUrl", e.target.value),
|
|
2562
2589
|
placeholder: "https://github.com/..."
|
|
2563
2590
|
}),
|
|
2564
|
-
/* @__PURE__ */
|
|
2591
|
+
/* @__PURE__ */ G(O, {
|
|
2565
2592
|
label: p("devportal.supportUrl", "Support"),
|
|
2566
2593
|
value: m.supportUrl,
|
|
2567
|
-
onChange: (e) =>
|
|
2594
|
+
onChange: (e) => E("supportUrl", e.target.value),
|
|
2568
2595
|
placeholder: "https://..."
|
|
2569
2596
|
}),
|
|
2570
|
-
/* @__PURE__ */
|
|
2597
|
+
/* @__PURE__ */ G(O, {
|
|
2571
2598
|
label: `${p("devportal.privacyPolicyUrl", "Privacy Policy")} *`,
|
|
2572
2599
|
value: m.privacyPolicyUrl,
|
|
2573
|
-
onChange: (e) =>
|
|
2600
|
+
onChange: (e) => E("privacyPolicyUrl", e.target.value),
|
|
2574
2601
|
placeholder: "https://...",
|
|
2575
2602
|
hint: p("devportal.requiredForStore", "Required for store submission")
|
|
2576
2603
|
}),
|
|
2577
|
-
/* @__PURE__ */
|
|
2604
|
+
/* @__PURE__ */ G(O, {
|
|
2578
2605
|
label: `${p("devportal.termsOfServiceUrl", "Terms of Service")} *`,
|
|
2579
2606
|
value: m.termsOfServiceUrl,
|
|
2580
|
-
onChange: (e) =>
|
|
2607
|
+
onChange: (e) => E("termsOfServiceUrl", e.target.value),
|
|
2581
2608
|
placeholder: "https://...",
|
|
2582
2609
|
hint: p("devportal.requiredForStore", "Required for store submission")
|
|
2583
2610
|
})
|
|
2584
2611
|
]
|
|
2585
2612
|
})
|
|
2586
2613
|
}),
|
|
2587
|
-
/* @__PURE__ */
|
|
2588
|
-
className: "border-t pt-6
|
|
2614
|
+
/* @__PURE__ */ K("div", {
|
|
2615
|
+
className: "border-t pt-6 space-y-3",
|
|
2589
2616
|
children: [
|
|
2590
|
-
/* @__PURE__ */
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
size: 16,
|
|
2597
|
-
className: "animate-spin"
|
|
2598
|
-
}), p("devportal.saving", "Saving…")] }) : /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(Te, { size: 16 }), p("devportal.saveStoreListing", "Save Store Listing")] })
|
|
2617
|
+
S === "success" && /* @__PURE__ */ K("div", {
|
|
2618
|
+
className: "flex items-center gap-2 rounded-md border border-success/30 bg-success/10 px-3 py-2 text-sm text-success",
|
|
2619
|
+
children: [/* @__PURE__ */ G(ue, {
|
|
2620
|
+
size: 15,
|
|
2621
|
+
className: "shrink-0"
|
|
2622
|
+
}), p("devportal.storeListing.savedSuccess", "Store listing saved successfully.")]
|
|
2599
2623
|
}),
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2624
|
+
S === "error" && /* @__PURE__ */ K("div", {
|
|
2625
|
+
className: "flex items-center gap-2 rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive",
|
|
2626
|
+
children: [/* @__PURE__ */ G(ce, {
|
|
2627
|
+
size: 15,
|
|
2628
|
+
className: "shrink-0"
|
|
2629
|
+
}), p("devportal.storeListing.savedError", "Failed to save. Please try again.")]
|
|
2605
2630
|
}),
|
|
2606
|
-
|
|
2607
|
-
|
|
2608
|
-
|
|
2609
|
-
|
|
2610
|
-
|
|
2631
|
+
/* @__PURE__ */ K("div", {
|
|
2632
|
+
className: "flex flex-wrap items-center gap-3",
|
|
2633
|
+
children: [
|
|
2634
|
+
/* @__PURE__ */ G("button", {
|
|
2635
|
+
type: "button",
|
|
2636
|
+
onClick: ne,
|
|
2637
|
+
disabled: g || !D || b,
|
|
2638
|
+
title: D ? b ? p("devportal.storeListing.alreadySaved", "No unsaved changes") : void 0 : p("devportal.storeListing.requiredFieldsHint", "Fill in Short Description, Privacy Policy URL, and Terms of Service URL to save"),
|
|
2639
|
+
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",
|
|
2640
|
+
children: g ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(B, {
|
|
2641
|
+
size: 16,
|
|
2642
|
+
className: "animate-spin"
|
|
2643
|
+
}), p("devportal.saving", "Saving…")] }) : b ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(I, { size: 16 }), p("devportal.saved", "Saved")] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(Se, { size: 16 }), p("devportal.saveStoreListing", "Save Store Listing")] })
|
|
2644
|
+
}),
|
|
2645
|
+
!D && /* @__PURE__ */ G("p", {
|
|
2646
|
+
className: "text-xs text-text-secondary",
|
|
2647
|
+
children: p("devportal.storeListing.requiredFieldsLabel", "Short Description, Privacy Policy URL, and Terms of Service URL are required")
|
|
2648
|
+
}),
|
|
2649
|
+
r && n === 0 && a && /* @__PURE__ */ K("button", {
|
|
2650
|
+
type: "button",
|
|
2651
|
+
onClick: a,
|
|
2652
|
+
className: "inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline underline-offset-2",
|
|
2653
|
+
children: [p("devportal.nextUploadVersion", "Next: Upload a Version"), /* @__PURE__ */ G(de, { size: 15 })]
|
|
2654
|
+
}),
|
|
2655
|
+
(!r || n > 0) && !i && o && /* @__PURE__ */ K("button", {
|
|
2656
|
+
type: "button",
|
|
2657
|
+
onClick: o,
|
|
2658
|
+
className: "inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline underline-offset-2",
|
|
2659
|
+
children: [p("devportal.nextSetPricing", "Next: Set Pricing"), /* @__PURE__ */ G(de, { size: 15 })]
|
|
2660
|
+
})
|
|
2661
|
+
]
|
|
2611
2662
|
})
|
|
2612
2663
|
]
|
|
2613
2664
|
})
|
|
@@ -2615,19 +2666,19 @@ var it = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2615
2666
|
});
|
|
2616
2667
|
}, Q = ({ label: e, value: n, trend: r }) => {
|
|
2617
2668
|
let { t: i } = P();
|
|
2618
|
-
return /* @__PURE__ */
|
|
2669
|
+
return /* @__PURE__ */ K(Me, {
|
|
2619
2670
|
treatment: "metric",
|
|
2620
2671
|
className: "p-4",
|
|
2621
2672
|
children: [
|
|
2622
|
-
/* @__PURE__ */
|
|
2673
|
+
/* @__PURE__ */ G("p", {
|
|
2623
2674
|
className: "text-sm text-text-secondary",
|
|
2624
2675
|
children: e
|
|
2625
2676
|
}),
|
|
2626
|
-
/* @__PURE__ */
|
|
2677
|
+
/* @__PURE__ */ G("p", {
|
|
2627
2678
|
className: "text-2xl font-bold tabular-nums",
|
|
2628
2679
|
children: n
|
|
2629
2680
|
}),
|
|
2630
|
-
r !== void 0 && /* @__PURE__ */
|
|
2681
|
+
r !== void 0 && /* @__PURE__ */ K("p", {
|
|
2631
2682
|
className: t("text-xs mt-1 tabular-nums", r > 0 ? "text-status-success-text" : r < 0 ? "text-status-error-text" : "text-text-secondary"),
|
|
2632
2683
|
children: [
|
|
2633
2684
|
r > 0 ? "+" : "",
|
|
@@ -2641,12 +2692,12 @@ var it = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2641
2692
|
})
|
|
2642
2693
|
]
|
|
2643
2694
|
});
|
|
2644
|
-
}, $ = ({ label: e, url: t }) => /* @__PURE__ */
|
|
2695
|
+
}, $ = ({ label: e, url: t }) => /* @__PURE__ */ K("a", {
|
|
2645
2696
|
href: t,
|
|
2646
2697
|
target: "_blank",
|
|
2647
2698
|
rel: "noopener noreferrer",
|
|
2648
2699
|
className: "flex items-center gap-2 text-sm text-primary hover:underline",
|
|
2649
|
-
children: [/* @__PURE__ */
|
|
2700
|
+
children: [/* @__PURE__ */ G(R, { size: 14 }), e]
|
|
2650
2701
|
}), at = [
|
|
2651
2702
|
{
|
|
2652
2703
|
id: "auth",
|
|
@@ -2757,41 +2808,41 @@ var st = ({ app: e }) => {
|
|
|
2757
2808
|
"read",
|
|
2758
2809
|
"write"
|
|
2759
2810
|
];
|
|
2760
|
-
return /* @__PURE__ */
|
|
2811
|
+
return /* @__PURE__ */ G(y, {
|
|
2761
2812
|
title: "Permissions",
|
|
2762
2813
|
description: "Define what platform data this app can request access to. Users see these when authorizing the app.",
|
|
2763
|
-
children: /* @__PURE__ */
|
|
2814
|
+
children: /* @__PURE__ */ K("div", {
|
|
2764
2815
|
className: "space-y-4",
|
|
2765
2816
|
children: [
|
|
2766
|
-
/* @__PURE__ */
|
|
2817
|
+
/* @__PURE__ */ G("div", {
|
|
2767
2818
|
className: "overflow-x-auto rounded-lg border border-border-subtle",
|
|
2768
|
-
children: /* @__PURE__ */
|
|
2819
|
+
children: /* @__PURE__ */ K("table", {
|
|
2769
2820
|
className: "w-full text-sm",
|
|
2770
|
-
children: [/* @__PURE__ */
|
|
2821
|
+
children: [/* @__PURE__ */ G("thead", { children: /* @__PURE__ */ K("tr", {
|
|
2771
2822
|
className: "border-b border-border-subtle bg-bg-sunken/50",
|
|
2772
|
-
children: [/* @__PURE__ */
|
|
2823
|
+
children: [/* @__PURE__ */ G("th", {
|
|
2773
2824
|
className: "px-4 py-3 text-left font-medium text-text-secondary w-1/2",
|
|
2774
2825
|
children: "Resource"
|
|
2775
|
-
}), f.map((e) => /* @__PURE__ */
|
|
2826
|
+
}), f.map((e) => /* @__PURE__ */ G("th", {
|
|
2776
2827
|
className: "px-4 py-3 text-center font-medium text-text-secondary",
|
|
2777
2828
|
children: d[e]
|
|
2778
2829
|
}, e))]
|
|
2779
|
-
}) }), /* @__PURE__ */
|
|
2830
|
+
}) }), /* @__PURE__ */ G("tbody", {
|
|
2780
2831
|
className: "divide-y divide-border",
|
|
2781
|
-
children: at.map((e) => /* @__PURE__ */
|
|
2832
|
+
children: at.map((e) => /* @__PURE__ */ K("tr", {
|
|
2782
2833
|
className: "hover:bg-bg-sunken/30 transition-colors",
|
|
2783
|
-
children: [/* @__PURE__ */
|
|
2834
|
+
children: [/* @__PURE__ */ K("td", {
|
|
2784
2835
|
className: "px-4 py-3",
|
|
2785
|
-
children: [/* @__PURE__ */
|
|
2836
|
+
children: [/* @__PURE__ */ G("p", {
|
|
2786
2837
|
className: "font-medium text-text-primary",
|
|
2787
2838
|
children: e.label
|
|
2788
|
-
}), /* @__PURE__ */
|
|
2839
|
+
}), /* @__PURE__ */ G("p", {
|
|
2789
2840
|
className: "text-xs text-text-secondary",
|
|
2790
2841
|
children: e.description
|
|
2791
2842
|
})]
|
|
2792
|
-
}), f.map((t) => /* @__PURE__ */
|
|
2843
|
+
}), f.map((t) => /* @__PURE__ */ G("td", {
|
|
2793
2844
|
className: "px-4 py-3 text-center",
|
|
2794
|
-
children: /* @__PURE__ */
|
|
2845
|
+
children: /* @__PURE__ */ G("input", {
|
|
2795
2846
|
type: "radio",
|
|
2796
2847
|
name: `perm-${e.id}`,
|
|
2797
2848
|
value: t,
|
|
@@ -2804,27 +2855,27 @@ var st = ({ app: e }) => {
|
|
|
2804
2855
|
})]
|
|
2805
2856
|
})
|
|
2806
2857
|
}),
|
|
2807
|
-
/* @__PURE__ */
|
|
2858
|
+
/* @__PURE__ */ K("div", {
|
|
2808
2859
|
className: "rounded-lg border border-border-subtle bg-bg-sunken/30 p-3 flex gap-2 text-xs text-text-secondary",
|
|
2809
|
-
children: [/* @__PURE__ */
|
|
2860
|
+
children: [/* @__PURE__ */ G(ge, {
|
|
2810
2861
|
size: 14,
|
|
2811
2862
|
className: "flex-shrink-0 mt-0.5"
|
|
2812
|
-
}), /* @__PURE__ */
|
|
2863
|
+
}), /* @__PURE__ */ K("span", { children: [/* @__PURE__ */ G("strong", { children: "Read & Write" }), " implies Read. Request only what your app genuinely needs — fewer permissions build more user trust."] })]
|
|
2813
2864
|
}),
|
|
2814
|
-
/* @__PURE__ */
|
|
2865
|
+
/* @__PURE__ */ K("div", {
|
|
2815
2866
|
className: "flex items-center justify-end gap-3",
|
|
2816
|
-
children: [o && /* @__PURE__ */
|
|
2867
|
+
children: [o && /* @__PURE__ */ K("span", {
|
|
2817
2868
|
className: "flex items-center gap-1.5 text-sm text-status-success-text",
|
|
2818
|
-
children: [/* @__PURE__ */
|
|
2819
|
-
}), /* @__PURE__ */
|
|
2869
|
+
children: [/* @__PURE__ */ G(ue, { size: 14 }), "Saved"]
|
|
2870
|
+
}), /* @__PURE__ */ K("button", {
|
|
2820
2871
|
type: "button",
|
|
2821
2872
|
onClick: () => void u(),
|
|
2822
2873
|
disabled: i,
|
|
2823
2874
|
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",
|
|
2824
|
-
children: [i ? /* @__PURE__ */
|
|
2875
|
+
children: [i ? /* @__PURE__ */ G(B, {
|
|
2825
2876
|
size: 14,
|
|
2826
2877
|
className: "animate-spin"
|
|
2827
|
-
}) : /* @__PURE__ */ H
|
|
2878
|
+
}) : /* @__PURE__ */ G(H, { size: 14 }), "Save Permissions"]
|
|
2828
2879
|
})]
|
|
2829
2880
|
})
|
|
2830
2881
|
]
|
|
@@ -2832,6 +2883,6 @@ var st = ({ app: e }) => {
|
|
|
2832
2883
|
});
|
|
2833
2884
|
};
|
|
2834
2885
|
//#endregion
|
|
2835
|
-
export {
|
|
2886
|
+
export { Be as ApplicationDetailPage };
|
|
2836
2887
|
|
|
2837
2888
|
//# sourceMappingURL=ApplicationDetailPage.js.map
|