@burdenoff/microfe-devportal 2026.702.2 → 2026.703.2
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.
|
@@ -16,14 +16,14 @@ import { GrantDelegationModal as re } from "../components/GrantDelegationModal.j
|
|
|
16
16
|
import { DEVPORTAL_PERMISSIONS as ie } from "../constants/permissions.js";
|
|
17
17
|
import { useDevportalPermission as ae } from "../hooks/usePermission.js";
|
|
18
18
|
import { usePackageUpload as A } from "../hooks/usePackageUpload.js";
|
|
19
|
-
import { useCallback as j, useEffect as oe, useMemo as M, useRef as
|
|
20
|
-
import { useI18n as
|
|
21
|
-
import { AlertCircle as
|
|
22
|
-
import { useParams as
|
|
23
|
-
import { Fragment as
|
|
24
|
-
import { CTAOverflowMenu as
|
|
19
|
+
import { useCallback as j, useEffect as oe, useMemo as M, useRef as N, useState as P } from "react";
|
|
20
|
+
import { useI18n as F } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
21
|
+
import { AlertCircle as se, AppWindow as ce, BarChart3 as I, Check as L, CheckCircle as le, ChevronRight as ue, CircleDollarSign as R, Clock as de, Edit as fe, ExternalLink as z, FlaskConical as pe, Gift as me, Info as he, Key as B, Loader2 as V, MoreHorizontal as ge, Package as _e, Plus as H, Power as ve, RefreshCw as ye, SendHorizontal as be, Shield as xe, 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,339 +135,339 @@ 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",
|
|
142
|
-
icon:
|
|
142
|
+
icon: ce
|
|
143
143
|
},
|
|
144
144
|
{
|
|
145
145
|
id: "analytics",
|
|
146
146
|
label: "Analytics",
|
|
147
|
-
icon:
|
|
147
|
+
icon: I
|
|
148
148
|
},
|
|
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: _e
|
|
158
158
|
},
|
|
159
159
|
{
|
|
160
160
|
id: "pricing",
|
|
161
161
|
label: "Pricing",
|
|
162
|
-
icon:
|
|
162
|
+
icon: R
|
|
163
163
|
},
|
|
164
164
|
{
|
|
165
165
|
id: "permissions",
|
|
166
166
|
label: "Permissions",
|
|
167
|
-
icon:
|
|
167
|
+
icon: xe
|
|
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
|
-
icon:
|
|
182
|
+
icon: z
|
|
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(V, {
|
|
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(se, {
|
|
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
|
-
}),
|
|
207
|
-
let { navigate: i, basePath: o, workspaceId: c } = e(), { t: u } =
|
|
206
|
+
}), Be = () => {
|
|
207
|
+
let { navigate: i, basePath: o, workspaceId: c } = e(), { t: u } = F(), 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] = P("overview"), [O, k] = P(!1), [te, A] = P(!1), [oe, M] = P(null), [N, I] = P(!1), { data: R, loading: z, error: me, refetch: he } = s({
|
|
211
211
|
variables: { id: w },
|
|
212
212
|
skip: !w
|
|
213
|
-
}), [
|
|
213
|
+
}), [B, { loading: ge }] = m(), [_e, { loading: H }] = a(), [xe, { 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
|
-
}),
|
|
221
|
-
variables: { id:
|
|
222
|
-
skip: !
|
|
220
|
+
}), Me = De?.appInstallations?.edges?.[0]?.node ?? null, { data: Pe } = l({
|
|
221
|
+
variables: { id: R?.application?.developerOrganizationId ?? "" },
|
|
222
|
+
skip: !R?.application?.developerOrganizationId,
|
|
223
223
|
fetchPolicy: "cache-first"
|
|
224
|
-
}),
|
|
224
|
+
}), q = j((e) => {
|
|
225
225
|
i?.(`${o}${e}`);
|
|
226
|
-
}, [i, o]),
|
|
227
|
-
let e =
|
|
226
|
+
}, [i, o]), Fe = j(async () => {
|
|
227
|
+
let e = R?.application?.appId;
|
|
228
228
|
if (e) try {
|
|
229
|
-
let t = (await
|
|
229
|
+
let t = (await B({ variables: { id: e } })).data?.rotateAppSecret.clientSecret;
|
|
230
230
|
t && M(t), k(!1);
|
|
231
231
|
} catch {}
|
|
232
|
-
}, [
|
|
232
|
+
}, [R?.application?.appId, B]), Le = j(async () => {
|
|
233
233
|
if (w) try {
|
|
234
|
-
await
|
|
234
|
+
await _e({ variables: { id: w } }), A(!1), q("/apps");
|
|
235
235
|
} catch {}
|
|
236
236
|
}, [
|
|
237
237
|
w,
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
]),
|
|
238
|
+
_e,
|
|
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 xe({ variables: { id: w } }), T("success");
|
|
265
265
|
} catch (e) {
|
|
266
266
|
console.error("[DevPortal] Submit failed:", e), T("error");
|
|
267
267
|
} finally {
|
|
268
|
-
|
|
268
|
+
he();
|
|
269
269
|
}
|
|
270
270
|
}, [
|
|
271
271
|
w,
|
|
272
|
-
|
|
273
|
-
|
|
272
|
+
xe,
|
|
273
|
+
he
|
|
274
274
|
]);
|
|
275
|
-
if (
|
|
276
|
-
if (
|
|
275
|
+
if (z && !R) return /* @__PURE__ */ G(n, { message: p("devportal.loadingApplication", "Loading application...") });
|
|
276
|
+
if (me) 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(se, {
|
|
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
|
-
children:
|
|
293
|
+
children: me.message
|
|
294
294
|
})
|
|
295
295
|
]
|
|
296
296
|
})
|
|
297
297
|
});
|
|
298
|
-
let
|
|
299
|
-
if (!
|
|
298
|
+
let J = Ne(R?.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(ce, { 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 = R?.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(ye, { 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(pe, { 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(ve, { 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(de, { 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(V, {
|
|
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(be, { 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(fe, { 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(de, {
|
|
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(le, {
|
|
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(L, { 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(ue, {
|
|
551
551
|
size: 16,
|
|
552
552
|
className: "flex-shrink-0 text-text-secondary"
|
|
553
553
|
})
|
|
@@ -556,113 +556,113 @@ 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:
|
|
595
|
-
onGrantDelegation: () =>
|
|
596
|
-
onNavigate:
|
|
592
|
+
E === "delegations" && /* @__PURE__ */ G(Ge, {
|
|
593
|
+
authAppId: J.appId || void 0,
|
|
594
|
+
appName: J.name,
|
|
595
|
+
onGrantDelegation: () => I(!0),
|
|
596
|
+
onNavigate: q
|
|
597
597
|
}),
|
|
598
|
-
E === "analytics" && /* @__PURE__ */
|
|
599
|
-
E === "playground" && /* @__PURE__ */
|
|
600
|
-
E === "store-listing" && /* @__PURE__ */
|
|
601
|
-
app:
|
|
602
|
-
versionCount:
|
|
603
|
-
isPackageApp:
|
|
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
|
+
versionCount: R?.application?.versions?.totalCount ?? 0,
|
|
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: ge
|
|
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: H
|
|
645
645
|
}),
|
|
646
|
-
/* @__PURE__ */
|
|
647
|
-
open:
|
|
648
|
-
onOpenChange:
|
|
649
|
-
appId:
|
|
650
|
-
appName:
|
|
651
|
-
appScopes:
|
|
646
|
+
/* @__PURE__ */ G(re, {
|
|
647
|
+
open: N,
|
|
648
|
+
onOpenChange: I,
|
|
649
|
+
appId: J.appId || "",
|
|
650
|
+
appName: J.name,
|
|
651
|
+
appScopes: J.scopes?.map((e) => e.scope) ?? [],
|
|
652
652
|
onSuccess: () => {
|
|
653
|
-
|
|
653
|
+
I(!1);
|
|
654
654
|
}
|
|
655
655
|
})
|
|
656
656
|
]
|
|
657
657
|
});
|
|
658
|
-
},
|
|
659
|
-
let { t: o } =
|
|
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
|
+
let { t: o } = F(), s = (e, t) => {
|
|
660
660
|
let n = o(e);
|
|
661
661
|
return n === e ? t : n;
|
|
662
|
-
}, c = e.pricingDetails ?? {}, [l, u] =
|
|
662
|
+
}, c = e.pricingDetails ?? {}, [l, u] = P({
|
|
663
663
|
pricingType: e.pricingType ?? "FREE",
|
|
664
664
|
price: typeof c.price == "number" ? String(c.price) : ""
|
|
665
|
-
}), [d, f] =
|
|
665
|
+
}), [d, f] = P(!1), [p] = _(), m = N(e);
|
|
666
666
|
m.current = e, oe(() => {
|
|
667
667
|
let e = m.current.pricingDetails ?? {};
|
|
668
668
|
u({
|
|
@@ -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(R, {
|
|
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(me, {
|
|
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(se, {
|
|
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(L, {
|
|
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(L, {
|
|
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(L, {
|
|
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(L, {
|
|
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(V, {
|
|
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(R, { 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(L, {
|
|
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
|
})] })]
|
|
@@ -1118,87 +1118,87 @@ var Re = [
|
|
|
1118
1118
|
]
|
|
1119
1119
|
});
|
|
1120
1120
|
}, Ue = ({ appId: e, onNavigate: n, pricingDone: i = !1, onNavigateToPricing: a }) => {
|
|
1121
|
-
let { t: o } =
|
|
1121
|
+
let { t: o } = F(), s = (e, t) => {
|
|
1122
1122
|
let n = o(e);
|
|
1123
1123
|
return n === e ? t : n;
|
|
1124
1124
|
}, { data: l, loading: u, error: d } = c({
|
|
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
|
-
/* @__PURE__ */
|
|
1175
|
+
children: f.map((e) => /* @__PURE__ */ K(W, { children: [
|
|
1176
|
+
/* @__PURE__ */ K("tr", {
|
|
1177
1177
|
className: "hover:bg-bg-sunken/30 transition-colors",
|
|
1178
1178
|
children: [
|
|
1179
|
-
/* @__PURE__ */
|
|
1179
|
+
/* @__PURE__ */ G("td", {
|
|
1180
1180
|
className: "px-4 py-3 font-mono font-medium",
|
|
1181
1181
|
children: e.version
|
|
1182
1182
|
}),
|
|
1183
|
-
/* @__PURE__ */
|
|
1183
|
+
/* @__PURE__ */ G("td", {
|
|
1184
1184
|
className: "px-4 py-3",
|
|
1185
|
-
children: /* @__PURE__ */
|
|
1185
|
+
children: /* @__PURE__ */ G("span", {
|
|
1186
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
1187
|
children: e.status === "pending_review" ? "In Review" : e.status
|
|
1188
1188
|
})
|
|
1189
1189
|
}),
|
|
1190
|
-
/* @__PURE__ */
|
|
1190
|
+
/* @__PURE__ */ G("td", {
|
|
1191
1191
|
className: "px-4 py-3 text-text-secondary",
|
|
1192
1192
|
children: e.publishedAt ? new Date(e.publishedAt).toLocaleDateString() : new Date(e.createdAt).toLocaleDateString()
|
|
1193
1193
|
}),
|
|
1194
|
-
/* @__PURE__ */
|
|
1194
|
+
/* @__PURE__ */ G("td", {
|
|
1195
1195
|
className: "px-4 py-3",
|
|
1196
|
-
children: /* @__PURE__ */
|
|
1196
|
+
children: /* @__PURE__ */ K("div", {
|
|
1197
1197
|
className: "flex gap-1.5",
|
|
1198
|
-
children: [e.isLatest && /* @__PURE__ */
|
|
1198
|
+
children: [e.isLatest && /* @__PURE__ */ G("span", {
|
|
1199
1199
|
className: "rounded-full bg-action-primary-bg/10 px-2 py-0.5 text-xs text-primary font-medium",
|
|
1200
1200
|
children: "latest"
|
|
1201
|
-
}), e.isStable && /* @__PURE__ */
|
|
1201
|
+
}), e.isStable && /* @__PURE__ */ G("span", {
|
|
1202
1202
|
className: "rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-xs text-status-success-text font-medium",
|
|
1203
1203
|
children: "stable"
|
|
1204
1204
|
})]
|
|
@@ -1206,26 +1206,26 @@ var Re = [
|
|
|
1206
1206
|
})
|
|
1207
1207
|
]
|
|
1208
1208
|
}, e.id),
|
|
1209
|
-
e.status === "rejected" && e.reviewNotes && /* @__PURE__ */
|
|
1209
|
+
e.status === "rejected" && e.reviewNotes && /* @__PURE__ */ G("tr", {
|
|
1210
1210
|
className: "bg-status-error-bg-subtle/40",
|
|
1211
|
-
children: /* @__PURE__ */
|
|
1211
|
+
children: /* @__PURE__ */ G("td", {
|
|
1212
1212
|
colSpan: 4,
|
|
1213
1213
|
className: "px-4 py-2",
|
|
1214
|
-
children: /* @__PURE__ */
|
|
1214
|
+
children: /* @__PURE__ */ K("p", {
|
|
1215
1215
|
className: "text-xs text-status-error-text",
|
|
1216
|
-
children: [/* @__PURE__ */
|
|
1216
|
+
children: [/* @__PURE__ */ K("span", {
|
|
1217
1217
|
className: "font-semibold",
|
|
1218
|
-
children: "Review feedback: "
|
|
1218
|
+
children: ["Review feedback:", " "]
|
|
1219
1219
|
}), e.reviewNotes]
|
|
1220
1220
|
})
|
|
1221
1221
|
})
|
|
1222
1222
|
}, `${e.id}-notes`),
|
|
1223
|
-
e.status === "pending_review" && /* @__PURE__ */
|
|
1223
|
+
e.status === "pending_review" && /* @__PURE__ */ G("tr", {
|
|
1224
1224
|
className: "bg-status-info-bg-subtle/30",
|
|
1225
|
-
children: /* @__PURE__ */
|
|
1225
|
+
children: /* @__PURE__ */ G("td", {
|
|
1226
1226
|
colSpan: 4,
|
|
1227
1227
|
className: "px-4 py-2",
|
|
1228
|
-
children: /* @__PURE__ */
|
|
1228
|
+
children: /* @__PURE__ */ G("p", {
|
|
1229
1229
|
className: "text-xs text-status-info-text",
|
|
1230
1230
|
children: "Submitted for platform review — you will be notified once approved or if changes are needed."
|
|
1231
1231
|
})
|
|
@@ -1234,53 +1234,53 @@ var Re = [
|
|
|
1234
1234
|
] }))
|
|
1235
1235
|
})]
|
|
1236
1236
|
})
|
|
1237
|
-
}) : /* @__PURE__ */
|
|
1237
|
+
}) : /* @__PURE__ */ G(r, {
|
|
1238
1238
|
illustration: "empty-generic",
|
|
1239
|
-
icon: /* @__PURE__ */
|
|
1239
|
+
icon: /* @__PURE__ */ G(_e, { size: 32 }),
|
|
1240
1240
|
title: s("devportal.noVersions", "No versions yet"),
|
|
1241
1241
|
description: s("devportal.noVersionsDescription", "Upload your first version to make this item available for review and distribution."),
|
|
1242
|
-
action: /* @__PURE__ */
|
|
1242
|
+
action: /* @__PURE__ */ K("button", {
|
|
1243
1243
|
onClick: () => n(`/apps/${e}/versions`),
|
|
1244
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",
|
|
1245
|
-
children: [/* @__PURE__ */
|
|
1245
|
+
children: [/* @__PURE__ */ G(U, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
|
|
1246
1246
|
})
|
|
1247
1247
|
}),
|
|
1248
|
-
!i && a && /* @__PURE__ */
|
|
1248
|
+
!i && a && /* @__PURE__ */ K("div", {
|
|
1249
1249
|
className: "mt-4 flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-sunken px-4 py-3",
|
|
1250
1250
|
children: [
|
|
1251
|
-
/* @__PURE__ */
|
|
1251
|
+
/* @__PURE__ */ G(R, {
|
|
1252
1252
|
size: 16,
|
|
1253
1253
|
className: "shrink-0 text-primary"
|
|
1254
1254
|
}),
|
|
1255
|
-
/* @__PURE__ */
|
|
1255
|
+
/* @__PURE__ */ G("p", {
|
|
1256
1256
|
className: "flex-1 text-sm text-text-secondary",
|
|
1257
1257
|
children: s("devportal.versionsNextPricing", "You've got versions covered. Now set your pricing before you can submit.")
|
|
1258
1258
|
}),
|
|
1259
|
-
/* @__PURE__ */
|
|
1259
|
+
/* @__PURE__ */ K("button", {
|
|
1260
1260
|
type: "button",
|
|
1261
1261
|
onClick: a,
|
|
1262
1262
|
className: "inline-flex items-center gap-1 text-sm font-medium text-primary hover:underline underline-offset-2 whitespace-nowrap",
|
|
1263
|
-
children: [s("devportal.nextSetPricing", "Set Pricing"), /* @__PURE__ */
|
|
1263
|
+
children: [s("devportal.nextSetPricing", "Set Pricing"), /* @__PURE__ */ G(ue, { size: 15 })]
|
|
1264
1264
|
})
|
|
1265
1265
|
]
|
|
1266
1266
|
})
|
|
1267
1267
|
]
|
|
1268
1268
|
});
|
|
1269
1269
|
}, We = ({ appId: e, onNavigate: t }) => {
|
|
1270
|
-
let { t: n } =
|
|
1270
|
+
let { t: n } = F(), r = (e, t) => {
|
|
1271
1271
|
let r = n(e);
|
|
1272
1272
|
return r === e ? t : r;
|
|
1273
1273
|
}, { data: i, loading: a, error: o } = u({ variables: { applicationId: e } });
|
|
1274
|
-
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, {
|
|
1275
1275
|
appId: e,
|
|
1276
|
-
webhooks: (i?.webhooks ?? []).map(
|
|
1276
|
+
webhooks: (i?.webhooks ?? []).map(Pe),
|
|
1277
1277
|
onNavigate: t
|
|
1278
1278
|
});
|
|
1279
1279
|
}, Ge = ({ authAppId: e, appName: t, onGrantDelegation: n, onNavigate: a }) => {
|
|
1280
|
-
let { t: o } =
|
|
1280
|
+
let { t: o } = F(), s = (e, t) => {
|
|
1281
1281
|
let n = o(e);
|
|
1282
1282
|
return n === e ? t : n;
|
|
1283
|
-
}, { data: c, loading: l, error: u, refetch: d } = i(), [f] = p(), [m, h] =
|
|
1283
|
+
}, { data: c, loading: l, error: u, refetch: d } = i(), [f] = p(), [m, h] = P([]), [g, _] = P(!1), [v, y] = P(/* @__PURE__ */ new Set()), [b, x] = P(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) => {
|
|
1284
1284
|
y((n) => {
|
|
1285
1285
|
let r = new Set(n);
|
|
1286
1286
|
return t ? r.add(e) : r.delete(e), r;
|
|
@@ -1306,19 +1306,19 @@ var Re = [
|
|
|
1306
1306
|
_(!1);
|
|
1307
1307
|
}
|
|
1308
1308
|
}, [f, d]);
|
|
1309
|
-
return e ? l ? /* @__PURE__ */
|
|
1310
|
-
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", {
|
|
1311
1311
|
className: "rounded-lg border border-border-subtle bg-status-success-bg-subtle p-3 text-sm text-status-success-text",
|
|
1312
|
-
children: /* @__PURE__ */
|
|
1312
|
+
children: /* @__PURE__ */ K("div", {
|
|
1313
1313
|
className: "flex items-center justify-between gap-3",
|
|
1314
|
-
children: [/* @__PURE__ */
|
|
1314
|
+
children: [/* @__PURE__ */ G("span", { children: b }), /* @__PURE__ */ G("button", {
|
|
1315
1315
|
onClick: () => x(null),
|
|
1316
1316
|
className: "text-status-success-text hover:text-status-success-text",
|
|
1317
1317
|
children: s("devportal.dismiss", "Dismiss")
|
|
1318
1318
|
})]
|
|
1319
1319
|
})
|
|
1320
1320
|
}),
|
|
1321
|
-
/* @__PURE__ */
|
|
1321
|
+
/* @__PURE__ */ G(Ye, {
|
|
1322
1322
|
appName: t,
|
|
1323
1323
|
delegations: S,
|
|
1324
1324
|
onGrantDelegation: n,
|
|
@@ -1331,7 +1331,7 @@ var Re = [
|
|
|
1331
1331
|
allVisibleSelected: T,
|
|
1332
1332
|
partiallySelected: ee
|
|
1333
1333
|
}),
|
|
1334
|
-
/* @__PURE__ */
|
|
1334
|
+
/* @__PURE__ */ G(ne, {
|
|
1335
1335
|
open: m.length > 0,
|
|
1336
1336
|
onOpenChange: (e) => {
|
|
1337
1337
|
e || h([]);
|
|
@@ -1346,19 +1346,19 @@ var Re = [
|
|
|
1346
1346
|
variant: "destructive",
|
|
1347
1347
|
loading: g
|
|
1348
1348
|
})
|
|
1349
|
-
] }) : /* @__PURE__ */
|
|
1349
|
+
] }) : /* @__PURE__ */ G(r, {
|
|
1350
1350
|
illustration: "empty-generic",
|
|
1351
|
-
icon: /* @__PURE__ */
|
|
1351
|
+
icon: /* @__PURE__ */ G(xe, { size: 32 }),
|
|
1352
1352
|
title: s("devportal.linkAuthAppFirst", "Link an auth app first"),
|
|
1353
1353
|
description: s("devportal.linkAuthAppFirstDescription", "Delegations are managed through auth apps. Create or link an auth app before granting app-as-user access."),
|
|
1354
|
-
action: /* @__PURE__ */
|
|
1354
|
+
action: /* @__PURE__ */ K("button", {
|
|
1355
1355
|
onClick: () => a("/oauth"),
|
|
1356
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",
|
|
1357
|
-
children: [/* @__PURE__ */
|
|
1357
|
+
children: [/* @__PURE__ */ G(z, { size: 16 }), s("devportal.manageOAuthApps", "Manage OAuth Apps")]
|
|
1358
1358
|
})
|
|
1359
1359
|
});
|
|
1360
1360
|
}, Ke = ({ appId: e }) => {
|
|
1361
|
-
let { t } =
|
|
1361
|
+
let { t } = F(), n = (e, n) => {
|
|
1362
1362
|
let r = t(e);
|
|
1363
1363
|
return r === e ? n : r;
|
|
1364
1364
|
}, r = M(() => /* @__PURE__ */ new Date(), []), { data: i, loading: a, error: s } = o({ variables: {
|
|
@@ -1370,67 +1370,67 @@ var Re = [
|
|
|
1370
1370
|
}, [r]).toISOString(),
|
|
1371
1371
|
endDate: r.toISOString()
|
|
1372
1372
|
} });
|
|
1373
|
-
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) });
|
|
1374
1374
|
}, qe = ({ app: e }) => {
|
|
1375
|
-
let { t } =
|
|
1375
|
+
let { t } = F(), n = (e, n) => {
|
|
1376
1376
|
let r = t(e);
|
|
1377
1377
|
return r === e ? n : r;
|
|
1378
1378
|
};
|
|
1379
|
-
return /* @__PURE__ */
|
|
1379
|
+
return /* @__PURE__ */ K("div", {
|
|
1380
1380
|
className: "grid gap-6 lg:grid-cols-3",
|
|
1381
|
-
children: [/* @__PURE__ */
|
|
1381
|
+
children: [/* @__PURE__ */ K("div", {
|
|
1382
1382
|
className: "lg:col-span-2 space-y-6",
|
|
1383
1383
|
children: [
|
|
1384
|
-
/* @__PURE__ */
|
|
1384
|
+
/* @__PURE__ */ G(je, { children: /* @__PURE__ */ K("div", {
|
|
1385
1385
|
className: "grid gap-4 sm:grid-cols-4",
|
|
1386
1386
|
children: [
|
|
1387
|
-
/* @__PURE__ */
|
|
1387
|
+
/* @__PURE__ */ G(Q, {
|
|
1388
1388
|
label: n("devportal.totalInstalls", "Total Installs"),
|
|
1389
1389
|
value: e.installCount.toLocaleString()
|
|
1390
1390
|
}),
|
|
1391
|
-
/* @__PURE__ */
|
|
1391
|
+
/* @__PURE__ */ G(Q, {
|
|
1392
1392
|
label: n("devportal.activeInstalls", "Active Installs"),
|
|
1393
1393
|
value: e.activeInstallCount.toLocaleString()
|
|
1394
1394
|
}),
|
|
1395
|
-
/* @__PURE__ */
|
|
1395
|
+
/* @__PURE__ */ G(Q, {
|
|
1396
1396
|
label: n("devportal.averageRating", "Average Rating"),
|
|
1397
1397
|
value: e.averageRating ? `${e.averageRating.toFixed(1)} ★` : n("devportal.notAvailable", "N/A")
|
|
1398
1398
|
}),
|
|
1399
|
-
/* @__PURE__ */
|
|
1399
|
+
/* @__PURE__ */ G(Q, {
|
|
1400
1400
|
label: n("devportal.reviews", "Reviews"),
|
|
1401
1401
|
value: e.reviewCount.toString()
|
|
1402
1402
|
})
|
|
1403
1403
|
]
|
|
1404
1404
|
}) }),
|
|
1405
|
-
/* @__PURE__ */
|
|
1405
|
+
/* @__PURE__ */ G(y, {
|
|
1406
1406
|
title: n("devportal.description", "Description"),
|
|
1407
|
-
children: /* @__PURE__ */
|
|
1407
|
+
children: /* @__PURE__ */ G("div", {
|
|
1408
1408
|
className: "prose prose-sm max-w-none",
|
|
1409
|
-
children: /* @__PURE__ */
|
|
1409
|
+
children: /* @__PURE__ */ G("pre", {
|
|
1410
1410
|
className: "whitespace-pre-wrap font-sans text-sm text-text-primary bg-transparent p-0 m-0",
|
|
1411
1411
|
children: e.description || n("devportal.noDescriptionProvided", "No description provided.")
|
|
1412
1412
|
})
|
|
1413
1413
|
})
|
|
1414
1414
|
}),
|
|
1415
|
-
/* @__PURE__ */
|
|
1415
|
+
/* @__PURE__ */ G(y, {
|
|
1416
1416
|
title: n("devportal.tagsAndKeywords", "Tags & Keywords"),
|
|
1417
|
-
children: /* @__PURE__ */
|
|
1417
|
+
children: /* @__PURE__ */ K("div", {
|
|
1418
1418
|
className: "space-y-3",
|
|
1419
|
-
children: [e.tags.length > 0 && /* @__PURE__ */
|
|
1419
|
+
children: [e.tags.length > 0 && /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1420
1420
|
className: "text-xs text-text-secondary mb-2",
|
|
1421
1421
|
children: n("devportal.tags", "Tags")
|
|
1422
|
-
}), /* @__PURE__ */
|
|
1422
|
+
}), /* @__PURE__ */ G("div", {
|
|
1423
1423
|
className: "flex flex-wrap gap-2",
|
|
1424
|
-
children: e.tags.map((e) => /* @__PURE__ */
|
|
1424
|
+
children: e.tags.map((e) => /* @__PURE__ */ G("span", {
|
|
1425
1425
|
className: "rounded-full bg-action-primary-bg/10 px-3 py-1 text-xs font-medium text-primary",
|
|
1426
1426
|
children: e
|
|
1427
1427
|
}, e))
|
|
1428
|
-
})] }), e.keywords.length > 0 && /* @__PURE__ */
|
|
1428
|
+
})] }), e.keywords.length > 0 && /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1429
1429
|
className: "text-xs text-text-secondary mb-2",
|
|
1430
1430
|
children: n("devportal.keywords", "Keywords")
|
|
1431
|
-
}), /* @__PURE__ */
|
|
1431
|
+
}), /* @__PURE__ */ G("div", {
|
|
1432
1432
|
className: "flex flex-wrap gap-2",
|
|
1433
|
-
children: e.keywords.map((e) => /* @__PURE__ */
|
|
1433
|
+
children: e.keywords.map((e) => /* @__PURE__ */ G("span", {
|
|
1434
1434
|
className: "rounded-full bg-bg-sunken px-3 py-1 text-xs",
|
|
1435
1435
|
children: e
|
|
1436
1436
|
}, e))
|
|
@@ -1438,14 +1438,14 @@ var Re = [
|
|
|
1438
1438
|
})
|
|
1439
1439
|
})
|
|
1440
1440
|
]
|
|
1441
|
-
}), /* @__PURE__ */
|
|
1441
|
+
}), /* @__PURE__ */ K("div", {
|
|
1442
1442
|
className: "space-y-6",
|
|
1443
|
-
children: [/* @__PURE__ */
|
|
1443
|
+
children: [/* @__PURE__ */ G(y, {
|
|
1444
1444
|
title: n("devportal.details", "Details"),
|
|
1445
|
-
children: /* @__PURE__ */
|
|
1445
|
+
children: /* @__PURE__ */ G(D, { items: [
|
|
1446
1446
|
{
|
|
1447
1447
|
label: n("devportal.appId", "App ID"),
|
|
1448
|
-
value: /* @__PURE__ */
|
|
1448
|
+
value: /* @__PURE__ */ G("code", {
|
|
1449
1449
|
className: "text-xs",
|
|
1450
1450
|
children: e.id
|
|
1451
1451
|
})
|
|
@@ -1481,32 +1481,32 @@ var Re = [
|
|
|
1481
1481
|
value: e.publishedAt ? new Date(e.publishedAt).toLocaleDateString() : n("devportal.notPublished", "Not published")
|
|
1482
1482
|
}
|
|
1483
1483
|
] })
|
|
1484
|
-
}), /* @__PURE__ */
|
|
1484
|
+
}), /* @__PURE__ */ G(y, {
|
|
1485
1485
|
title: n("devportal.links", "Links"),
|
|
1486
|
-
children: /* @__PURE__ */
|
|
1486
|
+
children: /* @__PURE__ */ K("div", {
|
|
1487
1487
|
className: "space-y-2",
|
|
1488
1488
|
children: [
|
|
1489
|
-
e.websiteUrl && /* @__PURE__ */
|
|
1489
|
+
e.websiteUrl && /* @__PURE__ */ G($, {
|
|
1490
1490
|
label: n("devportal.website", "Website"),
|
|
1491
1491
|
url: e.websiteUrl
|
|
1492
1492
|
}),
|
|
1493
|
-
e.documentationUrl && /* @__PURE__ */
|
|
1493
|
+
e.documentationUrl && /* @__PURE__ */ G($, {
|
|
1494
1494
|
label: n("devportal.documentation", "Documentation"),
|
|
1495
1495
|
url: e.documentationUrl
|
|
1496
1496
|
}),
|
|
1497
|
-
e.supportUrl && /* @__PURE__ */
|
|
1497
|
+
e.supportUrl && /* @__PURE__ */ G($, {
|
|
1498
1498
|
label: n("devportal.support", "Support"),
|
|
1499
1499
|
url: e.supportUrl
|
|
1500
1500
|
}),
|
|
1501
|
-
e.githubUrl && /* @__PURE__ */
|
|
1501
|
+
e.githubUrl && /* @__PURE__ */ G($, {
|
|
1502
1502
|
label: n("devportal.github", "GitHub"),
|
|
1503
1503
|
url: e.githubUrl
|
|
1504
1504
|
}),
|
|
1505
|
-
e.privacyPolicyUrl && /* @__PURE__ */
|
|
1505
|
+
e.privacyPolicyUrl && /* @__PURE__ */ G($, {
|
|
1506
1506
|
label: n("devportal.privacyPolicy", "Privacy Policy"),
|
|
1507
1507
|
url: e.privacyPolicyUrl
|
|
1508
1508
|
}),
|
|
1509
|
-
e.termsOfServiceUrl && /* @__PURE__ */
|
|
1509
|
+
e.termsOfServiceUrl && /* @__PURE__ */ G($, {
|
|
1510
1510
|
label: n("devportal.termsOfService", "Terms of Service"),
|
|
1511
1511
|
url: e.termsOfServiceUrl
|
|
1512
1512
|
})
|
|
@@ -1516,15 +1516,15 @@ var Re = [
|
|
|
1516
1516
|
})]
|
|
1517
1517
|
});
|
|
1518
1518
|
}, Je = ({ appId: e, webhooks: t, onNavigate: n }) => {
|
|
1519
|
-
let { t: i } =
|
|
1519
|
+
let { t: i } = F(), a = (e, t) => {
|
|
1520
1520
|
let n = i(e);
|
|
1521
1521
|
return n === e ? t : n;
|
|
1522
1522
|
};
|
|
1523
|
-
return /* @__PURE__ */
|
|
1523
|
+
return /* @__PURE__ */ K("div", {
|
|
1524
1524
|
className: "space-y-6",
|
|
1525
|
-
children: [/* @__PURE__ */
|
|
1525
|
+
children: [/* @__PURE__ */ K("div", {
|
|
1526
1526
|
className: "flex items-center justify-between",
|
|
1527
|
-
children: [/* @__PURE__ */
|
|
1527
|
+
children: [/* @__PURE__ */ K("p", {
|
|
1528
1528
|
className: "text-sm text-text-secondary",
|
|
1529
1529
|
children: [
|
|
1530
1530
|
t.length,
|
|
@@ -1533,81 +1533,81 @@ var Re = [
|
|
|
1533
1533
|
" ",
|
|
1534
1534
|
a("devportal.configured", "configured")
|
|
1535
1535
|
]
|
|
1536
|
-
}), /* @__PURE__ */
|
|
1536
|
+
}), /* @__PURE__ */ K("button", {
|
|
1537
1537
|
onClick: () => n(`/apps/${e}/webhooks/new`),
|
|
1538
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",
|
|
1539
|
-
children: [/* @__PURE__ */ H
|
|
1539
|
+
children: [/* @__PURE__ */ G(H, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
|
|
1540
1540
|
})]
|
|
1541
|
-
}), t.length > 0 ? /* @__PURE__ */
|
|
1541
|
+
}), t.length > 0 ? /* @__PURE__ */ G("div", {
|
|
1542
1542
|
className: "space-y-4",
|
|
1543
|
-
children: t.map((t) => /* @__PURE__ */
|
|
1543
|
+
children: t.map((t) => /* @__PURE__ */ K("div", {
|
|
1544
1544
|
className: "rounded-card border border-border-seam bg-bg-surface p-4 space-y-4 shadow-[var(--shadow-pop)]",
|
|
1545
1545
|
children: [
|
|
1546
|
-
/* @__PURE__ */
|
|
1546
|
+
/* @__PURE__ */ K("div", {
|
|
1547
1547
|
className: "flex items-start justify-between",
|
|
1548
|
-
children: [/* @__PURE__ */
|
|
1548
|
+
children: [/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ K("div", {
|
|
1549
1549
|
className: "flex items-center gap-2",
|
|
1550
|
-
children: [/* @__PURE__ */
|
|
1550
|
+
children: [/* @__PURE__ */ G("h3", {
|
|
1551
1551
|
className: "font-medium",
|
|
1552
1552
|
children: t.name
|
|
1553
|
-
}), /* @__PURE__ */
|
|
1553
|
+
}), /* @__PURE__ */ G(S, {
|
|
1554
1554
|
status: t.status,
|
|
1555
1555
|
type: "webhook"
|
|
1556
1556
|
})]
|
|
1557
|
-
}), t.description && /* @__PURE__ */
|
|
1557
|
+
}), t.description && /* @__PURE__ */ G("p", {
|
|
1558
1558
|
className: "text-sm text-text-secondary mt-1",
|
|
1559
1559
|
children: t.description
|
|
1560
|
-
})] }), /* @__PURE__ */
|
|
1560
|
+
})] }), /* @__PURE__ */ G("button", {
|
|
1561
1561
|
onClick: () => n(`/apps/${e}/webhooks/${t.id}`),
|
|
1562
1562
|
className: "rounded-md p-1 hover:bg-bg-sunken",
|
|
1563
|
-
children: /* @__PURE__ */
|
|
1563
|
+
children: /* @__PURE__ */ G(ge, { size: 20 })
|
|
1564
1564
|
})]
|
|
1565
1565
|
}),
|
|
1566
|
-
/* @__PURE__ */
|
|
1566
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1567
1567
|
className: "text-xs text-text-secondary mb-1",
|
|
1568
1568
|
children: a("devportal.endpointUrl", "Endpoint URL")
|
|
1569
|
-
}), /* @__PURE__ */
|
|
1569
|
+
}), /* @__PURE__ */ G("code", {
|
|
1570
1570
|
className: "text-sm bg-bg-sunken px-2 py-1 rounded block truncate",
|
|
1571
1571
|
children: t.url
|
|
1572
1572
|
})] }),
|
|
1573
|
-
/* @__PURE__ */
|
|
1573
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1574
1574
|
className: "text-xs text-text-secondary mb-2",
|
|
1575
1575
|
children: a("devportal.events", "Events")
|
|
1576
|
-
}), /* @__PURE__ */
|
|
1576
|
+
}), /* @__PURE__ */ G("div", {
|
|
1577
1577
|
className: "flex flex-wrap gap-2",
|
|
1578
|
-
children: t.events.map((e) => /* @__PURE__ */
|
|
1578
|
+
children: t.events.map((e) => /* @__PURE__ */ G("span", {
|
|
1579
1579
|
className: "rounded-full bg-bg-sunken px-2 py-0.5 text-xs",
|
|
1580
1580
|
children: e
|
|
1581
1581
|
}, e))
|
|
1582
1582
|
})] }),
|
|
1583
|
-
/* @__PURE__ */
|
|
1583
|
+
/* @__PURE__ */ K("div", {
|
|
1584
1584
|
className: "grid gap-4 sm:grid-cols-4 text-sm",
|
|
1585
1585
|
children: [
|
|
1586
|
-
/* @__PURE__ */
|
|
1586
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1587
1587
|
className: "text-xs text-text-secondary",
|
|
1588
1588
|
children: a("devportal.success", "Success")
|
|
1589
|
-
}), /* @__PURE__ */
|
|
1589
|
+
}), /* @__PURE__ */ G("p", {
|
|
1590
1590
|
className: "font-medium text-status-success-text",
|
|
1591
1591
|
children: t.successCount.toLocaleString()
|
|
1592
1592
|
})] }),
|
|
1593
|
-
/* @__PURE__ */
|
|
1593
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1594
1594
|
className: "text-xs text-text-secondary",
|
|
1595
1595
|
children: a("devportal.failed", "Failed")
|
|
1596
|
-
}), /* @__PURE__ */
|
|
1596
|
+
}), /* @__PURE__ */ G("p", {
|
|
1597
1597
|
className: "font-medium text-status-error-text",
|
|
1598
1598
|
children: t.failureCount.toLocaleString()
|
|
1599
1599
|
})] }),
|
|
1600
|
-
/* @__PURE__ */
|
|
1600
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1601
1601
|
className: "text-xs text-text-secondary",
|
|
1602
1602
|
children: a("devportal.successRate", "Success Rate")
|
|
1603
|
-
}), /* @__PURE__ */
|
|
1603
|
+
}), /* @__PURE__ */ K("p", {
|
|
1604
1604
|
className: "font-medium",
|
|
1605
1605
|
children: [t.successCount + t.failureCount > 0 ? (t.successCount / (t.successCount + t.failureCount) * 100).toFixed(1) : "0.0", "%"]
|
|
1606
1606
|
})] }),
|
|
1607
|
-
/* @__PURE__ */
|
|
1607
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1608
1608
|
className: "text-xs text-text-secondary",
|
|
1609
1609
|
children: a("devportal.lastTriggered", "Last Triggered")
|
|
1610
|
-
}), /* @__PURE__ */
|
|
1610
|
+
}), /* @__PURE__ */ G("p", {
|
|
1611
1611
|
className: "font-medium",
|
|
1612
1612
|
children: t.lastTriggeredAt ? new Date(t.lastTriggeredAt).toLocaleString() : a("devportal.never", "Never")
|
|
1613
1613
|
})] })
|
|
@@ -1615,29 +1615,29 @@ var Re = [
|
|
|
1615
1615
|
})
|
|
1616
1616
|
]
|
|
1617
1617
|
}, t.id))
|
|
1618
|
-
}) : /* @__PURE__ */
|
|
1618
|
+
}) : /* @__PURE__ */ G(r, {
|
|
1619
1619
|
illustration: "empty-notifications",
|
|
1620
|
-
icon: /* @__PURE__ */
|
|
1620
|
+
icon: /* @__PURE__ */ G(Ee, { size: 32 }),
|
|
1621
1621
|
title: a("devportal.noWebhooks", "No webhooks"),
|
|
1622
1622
|
description: a("devportal.noWebhooksDescription", "Add a webhook to receive event notifications"),
|
|
1623
|
-
action: /* @__PURE__ */
|
|
1623
|
+
action: /* @__PURE__ */ K("button", {
|
|
1624
1624
|
onClick: () => n(`/apps/${e}/webhooks/new`),
|
|
1625
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",
|
|
1626
|
-
children: [/* @__PURE__ */ H
|
|
1626
|
+
children: [/* @__PURE__ */ G(H, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
|
|
1627
1627
|
})
|
|
1628
1628
|
})]
|
|
1629
1629
|
});
|
|
1630
1630
|
}, Ye = ({ appName: e, delegations: n, onGrantDelegation: i, onRevokeDelegation: a, selectedDelegationIds: o, onToggleSelectDelegation: s, onToggleAllDelegations: c, onClearSelection: l, onRevokeSelected: u, allVisibleSelected: d, partiallySelected: f }) => {
|
|
1631
|
-
let { t: p } =
|
|
1631
|
+
let { t: p } = F(), m = (e, t) => {
|
|
1632
1632
|
let n = p(e);
|
|
1633
1633
|
return n === e ? t : n;
|
|
1634
1634
|
}, h = n.filter((e) => e.status === "ACTIVE"), g = n.filter((e) => e.status !== "ACTIVE");
|
|
1635
|
-
return /* @__PURE__ */
|
|
1635
|
+
return /* @__PURE__ */ K("div", {
|
|
1636
1636
|
className: "space-y-6",
|
|
1637
1637
|
children: [
|
|
1638
|
-
/* @__PURE__ */
|
|
1638
|
+
/* @__PURE__ */ K("div", {
|
|
1639
1639
|
className: "flex items-center justify-between",
|
|
1640
|
-
children: [/* @__PURE__ */
|
|
1640
|
+
children: [/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ K("p", {
|
|
1641
1641
|
className: "text-sm text-text-secondary",
|
|
1642
1642
|
children: [
|
|
1643
1643
|
n.length,
|
|
@@ -1648,7 +1648,7 @@ var Re = [
|
|
|
1648
1648
|
" ",
|
|
1649
1649
|
e
|
|
1650
1650
|
]
|
|
1651
|
-
}), h.length > 0 && /* @__PURE__ */
|
|
1651
|
+
}), h.length > 0 && /* @__PURE__ */ K("p", {
|
|
1652
1652
|
className: "text-xs text-text-secondary mt-0.5",
|
|
1653
1653
|
children: [
|
|
1654
1654
|
h.length,
|
|
@@ -1660,44 +1660,44 @@ var Re = [
|
|
|
1660
1660
|
" ",
|
|
1661
1661
|
m("devportal.revokedExpired", "revoked/expired")
|
|
1662
1662
|
]
|
|
1663
|
-
})] }), /* @__PURE__ */
|
|
1663
|
+
})] }), /* @__PURE__ */ K("button", {
|
|
1664
1664
|
onClick: i,
|
|
1665
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",
|
|
1666
|
-
children: [/* @__PURE__ */ H
|
|
1666
|
+
children: [/* @__PURE__ */ G(H, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
|
|
1667
1667
|
})]
|
|
1668
1668
|
}),
|
|
1669
|
-
h.length > 0 && /* @__PURE__ */
|
|
1669
|
+
h.length > 0 && /* @__PURE__ */ G("div", {
|
|
1670
1670
|
className: "rounded-card border border-border-seam bg-bg-surface p-4",
|
|
1671
|
-
children: /* @__PURE__ */
|
|
1671
|
+
children: /* @__PURE__ */ K("div", {
|
|
1672
1672
|
className: "flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between",
|
|
1673
|
-
children: [/* @__PURE__ */
|
|
1673
|
+
children: [/* @__PURE__ */ K("div", {
|
|
1674
1674
|
className: "flex flex-wrap items-center gap-3",
|
|
1675
|
-
children: [/* @__PURE__ */
|
|
1675
|
+
children: [/* @__PURE__ */ K("div", {
|
|
1676
1676
|
className: "flex items-center gap-2",
|
|
1677
|
-
children: [/* @__PURE__ */
|
|
1677
|
+
children: [/* @__PURE__ */ G(w, {
|
|
1678
1678
|
checked: d,
|
|
1679
1679
|
indeterminate: f,
|
|
1680
1680
|
onChange: c,
|
|
1681
1681
|
ariaLabel: m("devportal.selectAllActiveDelegations", "Select all active app delegations")
|
|
1682
|
-
}), /* @__PURE__ */
|
|
1682
|
+
}), /* @__PURE__ */ G("span", {
|
|
1683
1683
|
className: "text-sm font-medium",
|
|
1684
1684
|
children: m("devportal.selectAllActive", "Select all active")
|
|
1685
1685
|
})]
|
|
1686
|
-
}), o.size > 0 && /* @__PURE__ */
|
|
1686
|
+
}), o.size > 0 && /* @__PURE__ */ G("button", {
|
|
1687
1687
|
onClick: l,
|
|
1688
1688
|
className: "text-sm text-text-secondary hover:text-text-primary",
|
|
1689
1689
|
children: m("devportal.clearSelection", "Clear selection")
|
|
1690
1690
|
})]
|
|
1691
|
-
}), /* @__PURE__ */
|
|
1691
|
+
}), /* @__PURE__ */ K("div", {
|
|
1692
1692
|
className: "flex flex-wrap items-center gap-2",
|
|
1693
|
-
children: [/* @__PURE__ */
|
|
1693
|
+
children: [/* @__PURE__ */ K("span", {
|
|
1694
1694
|
className: "rounded-full bg-bg-sunken px-3 py-1 text-sm font-medium text-text-secondary",
|
|
1695
1695
|
children: [
|
|
1696
1696
|
o.size,
|
|
1697
1697
|
" ",
|
|
1698
1698
|
m("devportal.selected", "selected")
|
|
1699
1699
|
]
|
|
1700
|
-
}), /* @__PURE__ */
|
|
1700
|
+
}), /* @__PURE__ */ K("button", {
|
|
1701
1701
|
onClick: u,
|
|
1702
1702
|
disabled: o.size === 0,
|
|
1703
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",
|
|
@@ -1706,33 +1706,33 @@ var Re = [
|
|
|
1706
1706
|
})]
|
|
1707
1707
|
})
|
|
1708
1708
|
}),
|
|
1709
|
-
n.length > 0 ? /* @__PURE__ */
|
|
1709
|
+
n.length > 0 ? /* @__PURE__ */ G("div", {
|
|
1710
1710
|
className: "space-y-4",
|
|
1711
|
-
children: n.map((e) => /* @__PURE__ */
|
|
1711
|
+
children: n.map((e) => /* @__PURE__ */ K("div", {
|
|
1712
1712
|
className: "rounded-card border border-border-seam bg-bg-surface p-4 space-y-4 shadow-[var(--shadow-pop)]",
|
|
1713
1713
|
children: [
|
|
1714
|
-
/* @__PURE__ */
|
|
1714
|
+
/* @__PURE__ */ K("div", {
|
|
1715
1715
|
className: "flex items-start justify-between",
|
|
1716
|
-
children: [/* @__PURE__ */
|
|
1716
|
+
children: [/* @__PURE__ */ K("div", {
|
|
1717
1717
|
className: "flex items-start gap-3",
|
|
1718
|
-
children: [e.status === "ACTIVE" && /* @__PURE__ */
|
|
1718
|
+
children: [e.status === "ACTIVE" && /* @__PURE__ */ G("div", {
|
|
1719
1719
|
onClick: (e) => e.stopPropagation(),
|
|
1720
|
-
children: /* @__PURE__ */
|
|
1720
|
+
children: /* @__PURE__ */ G(w, {
|
|
1721
1721
|
checked: o.has(e.id),
|
|
1722
1722
|
onChange: (t) => s(e.id, t),
|
|
1723
1723
|
ariaLabel: `Select delegation ${e.id}`,
|
|
1724
1724
|
className: "mt-1"
|
|
1725
1725
|
})
|
|
1726
|
-
}), /* @__PURE__ */
|
|
1726
|
+
}), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ K("div", {
|
|
1727
1727
|
className: "flex items-center gap-2",
|
|
1728
|
-
children: [/* @__PURE__ */
|
|
1728
|
+
children: [/* @__PURE__ */ K("h3", {
|
|
1729
1729
|
className: "font-medium",
|
|
1730
1730
|
children: ["Delegation #", e.id.slice(0, 8)]
|
|
1731
|
-
}), /* @__PURE__ */
|
|
1732
|
-
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]),
|
|
1733
1733
|
children: e.status
|
|
1734
1734
|
})]
|
|
1735
|
-
}), /* @__PURE__ */
|
|
1735
|
+
}), /* @__PURE__ */ K("p", {
|
|
1736
1736
|
className: "text-sm text-text-secondary mt-1",
|
|
1737
1737
|
children: [
|
|
1738
1738
|
m("devportal.granted", "Granted"),
|
|
@@ -1744,55 +1744,55 @@ var Re = [
|
|
|
1744
1744
|
e.grantedBy === e.userId ? m("devportal.you", "you") : e.grantedBy.slice(0, 8)
|
|
1745
1745
|
]
|
|
1746
1746
|
})] })]
|
|
1747
|
-
}), e.status === "ACTIVE" && /* @__PURE__ */
|
|
1747
|
+
}), e.status === "ACTIVE" && /* @__PURE__ */ K("button", {
|
|
1748
1748
|
onClick: () => a(e.id),
|
|
1749
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",
|
|
1750
|
-
children: [/* @__PURE__ */
|
|
1750
|
+
children: [/* @__PURE__ */ G(Oe, { size: 14 }), m("devportal.revoke", "Revoke")]
|
|
1751
1751
|
})]
|
|
1752
1752
|
}),
|
|
1753
|
-
/* @__PURE__ */
|
|
1753
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1754
1754
|
className: "text-xs text-text-secondary mb-2",
|
|
1755
1755
|
children: m("devportal.grantedScopes", "Granted Scopes")
|
|
1756
|
-
}), /* @__PURE__ */
|
|
1756
|
+
}), /* @__PURE__ */ G("div", {
|
|
1757
1757
|
className: "flex flex-wrap gap-2",
|
|
1758
|
-
children: e.scopes.map((e) => /* @__PURE__ */
|
|
1758
|
+
children: e.scopes.map((e) => /* @__PURE__ */ G("span", {
|
|
1759
1759
|
className: "rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-xs text-status-success-text",
|
|
1760
1760
|
children: e
|
|
1761
1761
|
}, e))
|
|
1762
1762
|
})] }),
|
|
1763
|
-
e.workspaceIds.length > 0 && /* @__PURE__ */
|
|
1763
|
+
e.workspaceIds.length > 0 && /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
1764
1764
|
className: "text-xs text-text-secondary mb-2",
|
|
1765
1765
|
children: m("devportal.workspaceScope", "Workspace Scope")
|
|
1766
|
-
}), /* @__PURE__ */
|
|
1766
|
+
}), /* @__PURE__ */ G("div", {
|
|
1767
1767
|
className: "flex flex-wrap gap-2",
|
|
1768
|
-
children: e.workspaceIds.map((e) => /* @__PURE__ */
|
|
1768
|
+
children: e.workspaceIds.map((e) => /* @__PURE__ */ G("code", {
|
|
1769
1769
|
className: "rounded bg-bg-sunken px-2 py-0.5 text-xs",
|
|
1770
1770
|
children: e
|
|
1771
1771
|
}, e))
|
|
1772
1772
|
})] }),
|
|
1773
|
-
/* @__PURE__ */
|
|
1773
|
+
/* @__PURE__ */ K("div", {
|
|
1774
1774
|
className: "flex items-center gap-4 text-xs text-text-secondary",
|
|
1775
1775
|
children: [
|
|
1776
|
-
e.expiresAt && /* @__PURE__ */
|
|
1776
|
+
e.expiresAt && /* @__PURE__ */ K("span", {
|
|
1777
1777
|
className: "flex items-center gap-1",
|
|
1778
1778
|
children: [
|
|
1779
|
-
/* @__PURE__ */
|
|
1779
|
+
/* @__PURE__ */ G(de, { size: 12 }),
|
|
1780
1780
|
m("devportal.expires", "Expires"),
|
|
1781
1781
|
" ",
|
|
1782
1782
|
new Date(e.expiresAt).toLocaleDateString()
|
|
1783
1783
|
]
|
|
1784
1784
|
}),
|
|
1785
|
-
!e.expiresAt && e.status === "ACTIVE" && /* @__PURE__ */
|
|
1785
|
+
!e.expiresAt && e.status === "ACTIVE" && /* @__PURE__ */ K("span", {
|
|
1786
1786
|
className: "flex items-center gap-1",
|
|
1787
|
-
children: [/* @__PURE__ */
|
|
1787
|
+
children: [/* @__PURE__ */ G(le, {
|
|
1788
1788
|
size: 12,
|
|
1789
1789
|
className: "text-status-success-text"
|
|
1790
1790
|
}), m("devportal.noExpiration", "No expiration")]
|
|
1791
1791
|
}),
|
|
1792
|
-
e.revokedAt && /* @__PURE__ */
|
|
1792
|
+
e.revokedAt && /* @__PURE__ */ K("span", {
|
|
1793
1793
|
className: "flex items-center gap-1",
|
|
1794
1794
|
children: [
|
|
1795
|
-
/* @__PURE__ */
|
|
1795
|
+
/* @__PURE__ */ G(Oe, {
|
|
1796
1796
|
size: 12,
|
|
1797
1797
|
className: "text-status-error-text"
|
|
1798
1798
|
}),
|
|
@@ -1805,53 +1805,53 @@ var Re = [
|
|
|
1805
1805
|
})
|
|
1806
1806
|
]
|
|
1807
1807
|
}, e.id))
|
|
1808
|
-
}) : /* @__PURE__ */
|
|
1808
|
+
}) : /* @__PURE__ */ G(r, {
|
|
1809
1809
|
illustration: "empty-people",
|
|
1810
|
-
icon: /* @__PURE__ */
|
|
1810
|
+
icon: /* @__PURE__ */ G(we, { size: 32 }),
|
|
1811
1811
|
title: m("devportal.noDelegations", "No delegations"),
|
|
1812
1812
|
description: m("devportal.noDelegationsDescription", "Grant a delegation to allow this app to act on your behalf"),
|
|
1813
|
-
action: /* @__PURE__ */
|
|
1813
|
+
action: /* @__PURE__ */ K("button", {
|
|
1814
1814
|
onClick: i,
|
|
1815
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",
|
|
1816
|
-
children: [/* @__PURE__ */ H
|
|
1816
|
+
children: [/* @__PURE__ */ G(H, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
|
|
1817
1817
|
})
|
|
1818
1818
|
})
|
|
1819
1819
|
]
|
|
1820
1820
|
});
|
|
1821
1821
|
}, Xe = ({ analytics: e }) => {
|
|
1822
|
-
let { t } =
|
|
1822
|
+
let { t } = F(), n = (e, n) => {
|
|
1823
1823
|
let r = t(e);
|
|
1824
1824
|
return r === e ? n : r;
|
|
1825
1825
|
}, i = e[0], a = e[1], o = (e, t) => t ? (e - t) / t * 100 : 0;
|
|
1826
|
-
return /* @__PURE__ */
|
|
1826
|
+
return /* @__PURE__ */ K("div", {
|
|
1827
1827
|
className: "space-y-6",
|
|
1828
|
-
children: [/* @__PURE__ */
|
|
1828
|
+
children: [/* @__PURE__ */ K("div", {
|
|
1829
1829
|
className: "grid gap-4 sm:grid-cols-4",
|
|
1830
1830
|
children: [
|
|
1831
|
-
/* @__PURE__ */
|
|
1831
|
+
/* @__PURE__ */ G(Q, {
|
|
1832
1832
|
label: n("devportal.activeUsers", "Active Users"),
|
|
1833
1833
|
value: i?.activeUsers.toLocaleString() || "0",
|
|
1834
1834
|
trend: a ? o(i.activeUsers, a.activeUsers) : void 0
|
|
1835
1835
|
}),
|
|
1836
|
-
/* @__PURE__ */
|
|
1836
|
+
/* @__PURE__ */ G(Q, {
|
|
1837
1837
|
label: n("devportal.apiCalls", "API Calls"),
|
|
1838
1838
|
value: i ? `${(i.apiCalls / 1e3).toFixed(1)}K` : "0",
|
|
1839
1839
|
trend: a ? o(i.apiCalls, a.apiCalls) : void 0
|
|
1840
1840
|
}),
|
|
1841
|
-
/* @__PURE__ */
|
|
1841
|
+
/* @__PURE__ */ G(Q, {
|
|
1842
1842
|
label: n("devportal.avgResponseTime", "Avg Response Time"),
|
|
1843
1843
|
value: i?.avgResponseTime ? `${i.avgResponseTime}ms` : n("devportal.notAvailable", "N/A"),
|
|
1844
1844
|
trend: a && i?.avgResponseTime ? -o(i.avgResponseTime, a.avgResponseTime || 1) : void 0
|
|
1845
1845
|
}),
|
|
1846
|
-
/* @__PURE__ */
|
|
1846
|
+
/* @__PURE__ */ G(Q, {
|
|
1847
1847
|
label: n("devportal.errorRate", "Error Rate"),
|
|
1848
1848
|
value: i && i.apiCalls > 0 ? `${(i.errors / i.apiCalls * 100).toFixed(2)}%` : "0%",
|
|
1849
1849
|
trend: a && i && i.apiCalls > 0 && a.apiCalls > 0 ? -o(i.errors / i.apiCalls, a.errors / a.apiCalls) : void 0
|
|
1850
1850
|
})
|
|
1851
1851
|
]
|
|
1852
|
-
}), /* @__PURE__ */
|
|
1852
|
+
}), /* @__PURE__ */ G(y, {
|
|
1853
1853
|
title: n("devportal.dailyBreakdown", "Daily Breakdown"),
|
|
1854
|
-
children: e.length > 0 ? /* @__PURE__ */
|
|
1854
|
+
children: e.length > 0 ? /* @__PURE__ */ G(E, {
|
|
1855
1855
|
data: e,
|
|
1856
1856
|
keyField: "id",
|
|
1857
1857
|
columns: [
|
|
@@ -1891,19 +1891,19 @@ var Re = [
|
|
|
1891
1891
|
render: (e) => e.sessions.toLocaleString()
|
|
1892
1892
|
}
|
|
1893
1893
|
]
|
|
1894
|
-
}) : /* @__PURE__ */
|
|
1894
|
+
}) : /* @__PURE__ */ G(r, {
|
|
1895
1895
|
illustration: "empty-data",
|
|
1896
|
-
icon: /* @__PURE__ */
|
|
1896
|
+
icon: /* @__PURE__ */ G(I, { size: 32 }),
|
|
1897
1897
|
title: n("devportal.noAnalyticsData", "No analytics data"),
|
|
1898
1898
|
description: n("devportal.noAnalyticsDataDescription", "Analytics data will appear here once the application starts receiving traffic.")
|
|
1899
1899
|
})
|
|
1900
1900
|
})]
|
|
1901
1901
|
});
|
|
1902
1902
|
}, Ze = "# Sample query - modify as needed\nquery IntrospectSchema {\n __schema {\n queryType { name }\n mutationType { name }\n types {\n name\n kind\n }\n }\n}", Qe = ({ app: t }) => {
|
|
1903
|
-
let { apiGatewayUrl: n, workspacesGatewayUrl: r, authToken: i } = e(), { t: a } =
|
|
1903
|
+
let { apiGatewayUrl: n, workspacesGatewayUrl: r, authToken: i } = e(), { t: a } = F(), o = (e, t) => {
|
|
1904
1904
|
let n = a(e);
|
|
1905
1905
|
return n === e ? t : n;
|
|
1906
|
-
}, [s, c] =
|
|
1906
|
+
}, [s, c] = P(Ze), [l, u] = P("{}"), [d, f] = P(""), [p, m] = P(!1), [h, g] = P(`${n || "https://gw-global.local.burdenoff.com"}/global/graphql`), [_, v] = P(i || ""), [y, b] = P(!1), x = j(async () => {
|
|
1907
1907
|
m(!0), f("");
|
|
1908
1908
|
try {
|
|
1909
1909
|
let e = {};
|
|
@@ -1937,21 +1937,21 @@ var Re = [
|
|
|
1937
1937
|
]), S = j(() => {
|
|
1938
1938
|
i && v(i), b(!0);
|
|
1939
1939
|
}, [i]);
|
|
1940
|
-
return /* @__PURE__ */
|
|
1940
|
+
return /* @__PURE__ */ K("div", {
|
|
1941
1941
|
className: "space-y-4",
|
|
1942
1942
|
children: [
|
|
1943
|
-
/* @__PURE__ */
|
|
1943
|
+
/* @__PURE__ */ K("div", {
|
|
1944
1944
|
className: "flex items-center justify-between",
|
|
1945
|
-
children: [/* @__PURE__ */
|
|
1945
|
+
children: [/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("h3", {
|
|
1946
1946
|
className: "text-lg font-semibold",
|
|
1947
1947
|
children: o("devportal.apiPlayground", "API Playground")
|
|
1948
|
-
}), /* @__PURE__ */
|
|
1948
|
+
}), /* @__PURE__ */ K("p", {
|
|
1949
1949
|
className: "text-sm text-text-secondary",
|
|
1950
1950
|
children: [
|
|
1951
1951
|
o("devportal.apiPlaygroundDescription", "Test GraphQL APIs in the context of"),
|
|
1952
1952
|
" ",
|
|
1953
|
-
/* @__PURE__ */
|
|
1954
|
-
t.appId && /* @__PURE__ */
|
|
1953
|
+
/* @__PURE__ */ G("strong", { children: t.name }),
|
|
1954
|
+
t.appId && /* @__PURE__ */ K("span", {
|
|
1955
1955
|
className: "ml-1 text-xs text-text-secondary",
|
|
1956
1956
|
children: [
|
|
1957
1957
|
"(OAuth App: ",
|
|
@@ -1960,39 +1960,39 @@ var Re = [
|
|
|
1960
1960
|
]
|
|
1961
1961
|
})
|
|
1962
1962
|
]
|
|
1963
|
-
})] }), /* @__PURE__ */
|
|
1963
|
+
})] }), /* @__PURE__ */ K("button", {
|
|
1964
1964
|
onClick: S,
|
|
1965
1965
|
className: "flex items-center gap-2 rounded-md border px-3 py-1.5 text-sm font-medium hover:bg-accent transition-colors",
|
|
1966
|
-
children: [/* @__PURE__ */
|
|
1966
|
+
children: [/* @__PURE__ */ G(B, { size: 14 }), o("devportal.autoFillCredentials", "Auto-fill Credentials")]
|
|
1967
1967
|
})]
|
|
1968
1968
|
}),
|
|
1969
|
-
y && /* @__PURE__ */
|
|
1969
|
+
y && /* @__PURE__ */ K("div", {
|
|
1970
1970
|
className: "rounded-lg border bg-status-info-bg-subtle p-4 text-sm space-y-2",
|
|
1971
1971
|
children: [
|
|
1972
|
-
/* @__PURE__ */
|
|
1972
|
+
/* @__PURE__ */ G("p", {
|
|
1973
1973
|
className: "font-medium text-status-info-text",
|
|
1974
1974
|
children: o("devportal.authenticationGuide", "Authentication Guide")
|
|
1975
1975
|
}),
|
|
1976
|
-
/* @__PURE__ */
|
|
1976
|
+
/* @__PURE__ */ K("p", {
|
|
1977
1977
|
className: "text-status-info-text",
|
|
1978
1978
|
children: [
|
|
1979
1979
|
o("devportal.authenticationGuideText", "Your current session token has been filled in. For app-level authentication (Client Credentials flow), use the"),
|
|
1980
1980
|
" ",
|
|
1981
|
-
/* @__PURE__ */
|
|
1981
|
+
/* @__PURE__ */ G("strong", { children: o("devportal.oauthClientsTab", "OAuth Clients") }),
|
|
1982
1982
|
" ",
|
|
1983
1983
|
o("devportal.authenticationGuideText2", "tab to get the app's clientId and clientSecret, then call:")
|
|
1984
1984
|
]
|
|
1985
1985
|
}),
|
|
1986
|
-
/* @__PURE__ */
|
|
1986
|
+
/* @__PURE__ */ G("pre", {
|
|
1987
1987
|
className: "rounded bg-status-info-bg-subtle p-2 text-xs overflow-x-auto text-status-info-text",
|
|
1988
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}"
|
|
1989
1989
|
}),
|
|
1990
|
-
/* @__PURE__ */
|
|
1990
|
+
/* @__PURE__ */ K("p", {
|
|
1991
1991
|
className: "text-status-info-text",
|
|
1992
1992
|
children: [
|
|
1993
1993
|
o("devportal.useReturnedAccessToken", "Use the returned"),
|
|
1994
1994
|
" ",
|
|
1995
|
-
/* @__PURE__ */
|
|
1995
|
+
/* @__PURE__ */ G("code", {
|
|
1996
1996
|
className: "bg-status-info-bg-subtle px-1 rounded",
|
|
1997
1997
|
children: "accessToken"
|
|
1998
1998
|
}),
|
|
@@ -2000,160 +2000,163 @@ var Re = [
|
|
|
2000
2000
|
o("devportal.asBearerToken", "as the Bearer token below.")
|
|
2001
2001
|
]
|
|
2002
2002
|
}),
|
|
2003
|
-
/* @__PURE__ */
|
|
2003
|
+
/* @__PURE__ */ G("button", {
|
|
2004
2004
|
onClick: () => b(!1),
|
|
2005
2005
|
className: "text-xs text-accent-blue hover:underline",
|
|
2006
2006
|
children: o("devportal.dismiss", "Dismiss")
|
|
2007
2007
|
})
|
|
2008
2008
|
]
|
|
2009
2009
|
}),
|
|
2010
|
-
/* @__PURE__ */
|
|
2010
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
|
|
2011
2011
|
className: "block text-sm font-medium mb-1",
|
|
2012
2012
|
children: o("devportal.gatewayEndpoint", "Gateway Endpoint")
|
|
2013
|
-
}), /* @__PURE__ */
|
|
2013
|
+
}), /* @__PURE__ */ K("div", {
|
|
2014
2014
|
className: "flex gap-2",
|
|
2015
|
-
children: [/* @__PURE__ */
|
|
2015
|
+
children: [/* @__PURE__ */ G("input", {
|
|
2016
2016
|
type: "text",
|
|
2017
2017
|
value: h,
|
|
2018
2018
|
onChange: (e) => g(e.target.value),
|
|
2019
2019
|
className: "flex-1 rounded-md border px-3 py-2 text-sm font-mono bg-bg-surface"
|
|
2020
|
-
}), /* @__PURE__ */
|
|
2020
|
+
}), /* @__PURE__ */ K("select", {
|
|
2021
2021
|
onChange: (e) => g(e.target.value),
|
|
2022
2022
|
className: "rounded-md border px-3 py-2 text-sm bg-bg-surface",
|
|
2023
2023
|
value: h,
|
|
2024
|
-
children: [/* @__PURE__ */
|
|
2024
|
+
children: [/* @__PURE__ */ G("option", {
|
|
2025
2025
|
value: `${n || "https://gw-global.local.burdenoff.com"}/global/graphql`,
|
|
2026
2026
|
children: o("devportal.globalGateway", "Global Gateway")
|
|
2027
|
-
}), /* @__PURE__ */
|
|
2027
|
+
}), /* @__PURE__ */ G("option", {
|
|
2028
2028
|
value: `${r || "https://gw-wspace.local.burdenoff.com"}/workspaces/graphql`,
|
|
2029
2029
|
children: o("devportal.workspaceGateway", "Workspace Gateway")
|
|
2030
2030
|
})]
|
|
2031
2031
|
})]
|
|
2032
2032
|
})] }),
|
|
2033
|
-
/* @__PURE__ */
|
|
2033
|
+
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
|
|
2034
2034
|
className: "block text-sm font-medium mb-1",
|
|
2035
2035
|
children: o("devportal.bearerToken", "Bearer Token")
|
|
2036
|
-
}), /* @__PURE__ */
|
|
2036
|
+
}), /* @__PURE__ */ G("input", {
|
|
2037
2037
|
type: "password",
|
|
2038
2038
|
value: _,
|
|
2039
2039
|
onChange: (e) => v(e.target.value),
|
|
2040
2040
|
placeholder: o("devportal.pasteAccessToken", "Paste access token here..."),
|
|
2041
2041
|
className: "w-full rounded-md border px-3 py-2 text-sm font-mono bg-bg-surface"
|
|
2042
2042
|
})] }),
|
|
2043
|
-
/* @__PURE__ */
|
|
2043
|
+
/* @__PURE__ */ K("div", {
|
|
2044
2044
|
className: "grid grid-cols-1 lg:grid-cols-2 gap-4",
|
|
2045
|
-
children: [/* @__PURE__ */
|
|
2045
|
+
children: [/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
|
|
2046
2046
|
className: "block text-sm font-medium mb-1",
|
|
2047
2047
|
children: o("devportal.query", "Query")
|
|
2048
|
-
}), /* @__PURE__ */
|
|
2048
|
+
}), /* @__PURE__ */ G("textarea", {
|
|
2049
2049
|
value: s,
|
|
2050
2050
|
onChange: (e) => c(e.target.value),
|
|
2051
2051
|
className: "w-full h-64 rounded-md border px-3 py-2 text-sm font-mono bg-bg-surface resize-y",
|
|
2052
2052
|
spellCheck: !1
|
|
2053
|
-
})] }), /* @__PURE__ */
|
|
2053
|
+
})] }), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
|
|
2054
2054
|
className: "block text-sm font-medium mb-1",
|
|
2055
2055
|
children: o("devportal.variablesJson", "Variables (JSON)")
|
|
2056
|
-
}), /* @__PURE__ */
|
|
2056
|
+
}), /* @__PURE__ */ G("textarea", {
|
|
2057
2057
|
value: l,
|
|
2058
2058
|
onChange: (e) => u(e.target.value),
|
|
2059
2059
|
className: "w-full h-64 rounded-md border px-3 py-2 text-sm font-mono bg-bg-surface resize-y",
|
|
2060
2060
|
spellCheck: !1
|
|
2061
2061
|
})] })]
|
|
2062
2062
|
}),
|
|
2063
|
-
/* @__PURE__ */
|
|
2063
|
+
/* @__PURE__ */ K("button", {
|
|
2064
2064
|
onClick: x,
|
|
2065
2065
|
disabled: p,
|
|
2066
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",
|
|
2067
|
-
children: [p ? /* @__PURE__ */
|
|
2067
|
+
children: [p ? /* @__PURE__ */ G(V, {
|
|
2068
2068
|
size: 16,
|
|
2069
2069
|
className: "animate-spin"
|
|
2070
|
-
}) : /* @__PURE__ */
|
|
2070
|
+
}) : /* @__PURE__ */ G(z, { size: 16 }), p ? o("devportal.executing", "Executing...") : o("devportal.executeQuery", "Execute Query")]
|
|
2071
2071
|
}),
|
|
2072
|
-
d && /* @__PURE__ */
|
|
2072
|
+
d && /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
|
|
2073
2073
|
className: "block text-sm font-medium mb-1",
|
|
2074
2074
|
children: o("devportal.response", "Response")
|
|
2075
|
-
}), /* @__PURE__ */
|
|
2075
|
+
}), /* @__PURE__ */ G("pre", {
|
|
2076
2076
|
className: "w-full max-h-96 overflow-auto rounded-md border bg-bg-sunken p-4 text-xs font-mono",
|
|
2077
2077
|
children: d
|
|
2078
2078
|
})] })
|
|
2079
2079
|
]
|
|
2080
2080
|
});
|
|
2081
2081
|
}, $e = ({ label: e, value: n, onChange: r, hint: i, accept: a = "image/png,image/jpeg,image/webp,image/gif,image/svg+xml", aspectClass: o = "aspect-square", upload: s, uploading: c, progress: l, error: u }) => {
|
|
2082
|
-
let d =
|
|
2082
|
+
let d = N(null), [f, p] = P(!1), m = N(n);
|
|
2083
|
+
m.current !== n && (m.current = n, f && p(!1));
|
|
2084
|
+
let h = j(async (e) => {
|
|
2083
2085
|
try {
|
|
2084
2086
|
r((await s(e)).downloadUrl);
|
|
2085
2087
|
} catch {}
|
|
2086
2088
|
}, [s, r]);
|
|
2087
|
-
return /* @__PURE__ */
|
|
2089
|
+
return /* @__PURE__ */ K("div", {
|
|
2088
2090
|
className: "space-y-1.5",
|
|
2089
2091
|
children: [
|
|
2090
|
-
/* @__PURE__ */
|
|
2092
|
+
/* @__PURE__ */ G("label", {
|
|
2091
2093
|
className: "text-sm font-medium",
|
|
2092
2094
|
children: e
|
|
2093
2095
|
}),
|
|
2094
|
-
/* @__PURE__ */
|
|
2096
|
+
/* @__PURE__ */ K("div", {
|
|
2095
2097
|
className: "flex gap-3 items-start",
|
|
2096
|
-
children: [/* @__PURE__ */
|
|
2098
|
+
children: [/* @__PURE__ */ K("div", {
|
|
2097
2099
|
className: t("relative shrink-0 w-20 rounded-lg border border-border-subtle bg-bg-sunken overflow-hidden flex items-center justify-center", o),
|
|
2098
|
-
children: [n ? /* @__PURE__ */
|
|
2100
|
+
children: [n && !f ? /* @__PURE__ */ G("img", {
|
|
2099
2101
|
src: n,
|
|
2100
2102
|
alt: e,
|
|
2101
|
-
className: "w-full h-full object-cover"
|
|
2102
|
-
|
|
2103
|
+
className: "w-full h-full object-cover",
|
|
2104
|
+
onError: () => p(!0)
|
|
2105
|
+
}) : /* @__PURE__ */ G(U, {
|
|
2103
2106
|
size: 18,
|
|
2104
2107
|
className: "text-text-secondary opacity-40"
|
|
2105
|
-
}), c && /* @__PURE__ */
|
|
2108
|
+
}), c && /* @__PURE__ */ K("div", {
|
|
2106
2109
|
className: "absolute inset-0 bg-bg-overlay flex flex-col items-center justify-center gap-1",
|
|
2107
|
-
children: [/* @__PURE__ */
|
|
2110
|
+
children: [/* @__PURE__ */ G(V, {
|
|
2108
2111
|
size: 14,
|
|
2109
2112
|
className: "animate-spin text-white"
|
|
2110
|
-
}), /* @__PURE__ */
|
|
2113
|
+
}), /* @__PURE__ */ K("span", {
|
|
2111
2114
|
className: "text-white text-xs",
|
|
2112
2115
|
children: [l, "%"]
|
|
2113
2116
|
})]
|
|
2114
2117
|
})]
|
|
2115
|
-
}), /* @__PURE__ */
|
|
2118
|
+
}), /* @__PURE__ */ K("div", {
|
|
2116
2119
|
className: "flex-1 space-y-1.5",
|
|
2117
2120
|
children: [
|
|
2118
|
-
/* @__PURE__ */
|
|
2121
|
+
/* @__PURE__ */ G("input", {
|
|
2119
2122
|
type: "url",
|
|
2120
2123
|
value: n,
|
|
2121
2124
|
onChange: (e) => r(e.target.value),
|
|
2122
2125
|
placeholder: "https://...",
|
|
2123
2126
|
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"
|
|
2124
2127
|
}),
|
|
2125
|
-
/* @__PURE__ */
|
|
2128
|
+
/* @__PURE__ */ G("input", {
|
|
2126
2129
|
ref: d,
|
|
2127
2130
|
type: "file",
|
|
2128
2131
|
accept: a,
|
|
2129
2132
|
className: "hidden",
|
|
2130
2133
|
onChange: (e) => {
|
|
2131
2134
|
let t = e.target.files?.[0];
|
|
2132
|
-
t &&
|
|
2135
|
+
t && h(t), e.target.value = "";
|
|
2133
2136
|
}
|
|
2134
2137
|
}),
|
|
2135
|
-
/* @__PURE__ */
|
|
2138
|
+
/* @__PURE__ */ K("button", {
|
|
2136
2139
|
type: "button",
|
|
2137
2140
|
disabled: c,
|
|
2138
2141
|
onClick: () => d.current?.click(),
|
|
2139
2142
|
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",
|
|
2140
|
-
children: [/* @__PURE__ */
|
|
2143
|
+
children: [/* @__PURE__ */ G(U, { size: 11 }), c ? `Uploading… ${l}%` : "Upload image"]
|
|
2141
2144
|
}),
|
|
2142
|
-
u && /* @__PURE__ */
|
|
2145
|
+
u && /* @__PURE__ */ G("p", {
|
|
2143
2146
|
className: "text-xs text-status-error-text",
|
|
2144
2147
|
children: u
|
|
2145
2148
|
})
|
|
2146
2149
|
]
|
|
2147
2150
|
})]
|
|
2148
2151
|
}),
|
|
2149
|
-
i && /* @__PURE__ */
|
|
2152
|
+
i && /* @__PURE__ */ G("p", {
|
|
2150
2153
|
className: "text-xs text-text-secondary",
|
|
2151
2154
|
children: i
|
|
2152
2155
|
})
|
|
2153
2156
|
]
|
|
2154
2157
|
});
|
|
2155
2158
|
}, X = ({ urls: e, onChange: n, upload: r, uploading: i, progress: a, error: o }) => {
|
|
2156
|
-
let s =
|
|
2159
|
+
let s = N(null), [c, l] = P(""), u = j(async (t) => {
|
|
2157
2160
|
try {
|
|
2158
2161
|
let i = await r(t);
|
|
2159
2162
|
n([...e, i.downloadUrl]);
|
|
@@ -2162,64 +2165,86 @@ var Re = [
|
|
|
2162
2165
|
r,
|
|
2163
2166
|
n,
|
|
2164
2167
|
e
|
|
2165
|
-
]),
|
|
2168
|
+
]), d = () => {
|
|
2169
|
+
let t = c.trim();
|
|
2170
|
+
t && !e.includes(t) && (n([...e, t]), l(""));
|
|
2171
|
+
}, f = (t) => {
|
|
2166
2172
|
n(e.filter((e, n) => n !== t));
|
|
2167
2173
|
};
|
|
2168
|
-
return /* @__PURE__ */
|
|
2174
|
+
return /* @__PURE__ */ K("div", {
|
|
2169
2175
|
className: "space-y-2",
|
|
2170
2176
|
children: [
|
|
2171
|
-
/* @__PURE__ */
|
|
2177
|
+
/* @__PURE__ */ K("div", {
|
|
2172
2178
|
className: "flex flex-col gap-0.5",
|
|
2173
|
-
children: [/* @__PURE__ */
|
|
2179
|
+
children: [/* @__PURE__ */ G("label", {
|
|
2174
2180
|
className: "text-sm font-medium",
|
|
2175
2181
|
children: "Screenshots"
|
|
2176
|
-
}), /* @__PURE__ */
|
|
2182
|
+
}), /* @__PURE__ */ G("p", {
|
|
2177
2183
|
className: "text-xs text-text-muted",
|
|
2178
2184
|
children: "Shown in the horizontal preview strip below the hero — wide landscape proportions work best (16:9)"
|
|
2179
2185
|
})]
|
|
2180
2186
|
}),
|
|
2181
|
-
/* @__PURE__ */
|
|
2187
|
+
/* @__PURE__ */ K("div", {
|
|
2182
2188
|
className: "flex flex-wrap gap-3",
|
|
2183
|
-
children: [e.map((e, t) => /* @__PURE__ */
|
|
2189
|
+
children: [e.map((e, t) => /* @__PURE__ */ K("div", {
|
|
2184
2190
|
className: "relative group w-36 aspect-video rounded-lg border border-border-subtle overflow-hidden bg-bg-sunken",
|
|
2185
|
-
children: [/* @__PURE__ */
|
|
2191
|
+
children: [/* @__PURE__ */ G("img", {
|
|
2186
2192
|
src: e,
|
|
2187
2193
|
alt: `Screenshot ${t + 1}`,
|
|
2188
2194
|
className: "w-full h-full object-cover"
|
|
2189
|
-
}), /* @__PURE__ */
|
|
2195
|
+
}), /* @__PURE__ */ G("button", {
|
|
2190
2196
|
type: "button",
|
|
2191
|
-
onClick: () =>
|
|
2197
|
+
onClick: () => f(t),
|
|
2192
2198
|
className: "absolute top-1 right-1 rounded-full bg-bg-overlay text-white p-0.5 opacity-0 group-hover:opacity-100 transition-opacity",
|
|
2193
|
-
children: /* @__PURE__ */
|
|
2199
|
+
children: /* @__PURE__ */ G(De, { size: 12 })
|
|
2194
2200
|
})]
|
|
2195
|
-
}, t)), /* @__PURE__ */
|
|
2201
|
+
}, t)), /* @__PURE__ */ G("button", {
|
|
2196
2202
|
type: "button",
|
|
2197
2203
|
disabled: i,
|
|
2198
2204
|
onClick: () => s.current?.click(),
|
|
2199
2205
|
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"),
|
|
2200
|
-
children: i ? /* @__PURE__ */
|
|
2206
|
+
children: i ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(V, {
|
|
2201
2207
|
size: 18,
|
|
2202
2208
|
className: "animate-spin text-primary"
|
|
2203
|
-
}), /* @__PURE__ */
|
|
2209
|
+
}), /* @__PURE__ */ K("span", {
|
|
2204
2210
|
className: "text-xs",
|
|
2205
2211
|
children: [a, "%"]
|
|
2206
|
-
})] }) : /* @__PURE__ */
|
|
2212
|
+
})] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(U, { size: 18 }), /* @__PURE__ */ G("span", {
|
|
2207
2213
|
className: "text-xs",
|
|
2208
2214
|
children: "Add screenshot"
|
|
2209
2215
|
})] })
|
|
2210
2216
|
})]
|
|
2211
2217
|
}),
|
|
2212
|
-
/* @__PURE__ */
|
|
2218
|
+
/* @__PURE__ */ K("div", {
|
|
2219
|
+
className: "flex gap-2",
|
|
2220
|
+
children: [/* @__PURE__ */ G("input", {
|
|
2221
|
+
type: "url",
|
|
2222
|
+
value: c,
|
|
2223
|
+
onChange: (e) => l(e.target.value),
|
|
2224
|
+
onKeyDown: (e) => {
|
|
2225
|
+
e.key === "Enter" && (e.preventDefault(), d());
|
|
2226
|
+
},
|
|
2227
|
+
placeholder: "https://... paste a screenshot URL",
|
|
2228
|
+
className: "flex-1 rounded-md border border-border-subtle bg-bg-input px-3 py-1.5 text-sm placeholder:text-text-placeholder focus:outline-none focus:ring-2 focus:ring-primary/30"
|
|
2229
|
+
}), /* @__PURE__ */ G("button", {
|
|
2230
|
+
type: "button",
|
|
2231
|
+
onClick: d,
|
|
2232
|
+
disabled: !c.trim(),
|
|
2233
|
+
className: "inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1.5 text-xs font-medium hover:bg-bg-sunken transition-colors disabled:opacity-50",
|
|
2234
|
+
children: "Add"
|
|
2235
|
+
})]
|
|
2236
|
+
}),
|
|
2237
|
+
/* @__PURE__ */ G("input", {
|
|
2213
2238
|
ref: s,
|
|
2214
2239
|
type: "file",
|
|
2215
2240
|
accept: "image/png,image/jpeg,image/webp,image/gif",
|
|
2216
2241
|
className: "hidden",
|
|
2217
2242
|
onChange: (e) => {
|
|
2218
2243
|
let t = e.target.files?.[0];
|
|
2219
|
-
t &&
|
|
2244
|
+
t && u(t), e.target.value = "";
|
|
2220
2245
|
}
|
|
2221
2246
|
}),
|
|
2222
|
-
o && /* @__PURE__ */
|
|
2247
|
+
o && /* @__PURE__ */ G("p", {
|
|
2223
2248
|
className: "text-xs text-status-error-text",
|
|
2224
2249
|
children: o
|
|
2225
2250
|
})
|
|
@@ -2335,22 +2360,22 @@ function rt(e) {
|
|
|
2335
2360
|
};
|
|
2336
2361
|
}
|
|
2337
2362
|
var it = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i = !1, onNavigateToVersions: a, onNavigateToPricing: o, onNavigateToSubmission: s }) => {
|
|
2338
|
-
let { workspacesGatewayUrl: c, authToken: l, workspaceId: u, getWorkspaceToken: d } = e(), { t: f } =
|
|
2363
|
+
let { workspacesGatewayUrl: c, authToken: l, workspaceId: u, getWorkspaceToken: d } = e(), { t: f } = F(), p = (e, t) => {
|
|
2339
2364
|
let n = f(e);
|
|
2340
2365
|
return n === e ? t : n;
|
|
2341
|
-
}, [m, h] =
|
|
2342
|
-
|
|
2343
|
-
let [
|
|
2366
|
+
}, [m, h] = P(() => rt(t)), [g, v] = P(!1), [b, x] = P(!1), [S, C] = P(null), w = N(t);
|
|
2367
|
+
w.current = t;
|
|
2368
|
+
let [ee] = _();
|
|
2344
2369
|
oe(() => {
|
|
2345
|
-
h(rt(
|
|
2370
|
+
h(rt(w.current)), C(null), x(!1);
|
|
2346
2371
|
}, [t.id]);
|
|
2347
|
-
let
|
|
2372
|
+
let E = (e, t) => {
|
|
2348
2373
|
h((n) => ({
|
|
2349
2374
|
...n,
|
|
2350
2375
|
[e]: t
|
|
2351
|
-
}));
|
|
2352
|
-
},
|
|
2353
|
-
v(!0);
|
|
2376
|
+
})), C(null), x(!1);
|
|
2377
|
+
}, D = m.shortDescription.trim().length > 0 && m.privacyPolicyUrl.trim().length > 0 && m.termsOfServiceUrl.trim().length > 0, ne = async () => {
|
|
2378
|
+
v(!0), C(null);
|
|
2354
2379
|
try {
|
|
2355
2380
|
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 = {
|
|
2356
2381
|
manifestVersion: typeof i.manifestVersion == "string" ? i.manifestVersion : "1.0",
|
|
@@ -2366,7 +2391,7 @@ var it = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2366
2391
|
permissions: n,
|
|
2367
2392
|
compatibility: { minPlatformVersion: m.manifestMinPlatformVersion }
|
|
2368
2393
|
};
|
|
2369
|
-
await
|
|
2394
|
+
await ee({ variables: {
|
|
2370
2395
|
id: t.id,
|
|
2371
2396
|
input: {
|
|
2372
2397
|
iconUrl: m.iconUrl || null,
|
|
@@ -2383,27 +2408,27 @@ var it = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2383
2408
|
termsOfServiceUrl: m.termsOfServiceUrl || null,
|
|
2384
2409
|
manifest: a
|
|
2385
2410
|
}
|
|
2386
|
-
} }), T("success");
|
|
2411
|
+
} }), T("success"), C("success"), x(!0);
|
|
2387
2412
|
} catch {
|
|
2388
|
-
T("error");
|
|
2413
|
+
T("error"), C("error");
|
|
2389
2414
|
} finally {
|
|
2390
2415
|
v(!1);
|
|
2391
2416
|
}
|
|
2392
|
-
}, { upload:
|
|
2393
|
-
return /* @__PURE__ */
|
|
2417
|
+
}, { upload: re, uploading: ie, progress: ae, error: j } = A(c, l, u, d, "/DevPortal/Assets"), { upload: M, uploading: ce, progress: I, error: R } = A(c, l, u, d, "/DevPortal/Assets"), { upload: fe, uploading: pe, progress: me, error: he } = A(c, l, u, d, "/DevPortal/Assets"), B = Z.has(m.manifestItemType), ge = t.status === "SUBMITTED";
|
|
2418
|
+
return /* @__PURE__ */ K("div", {
|
|
2394
2419
|
className: "space-y-8 max-w-3xl",
|
|
2395
2420
|
children: [
|
|
2396
|
-
t.status === "PUBLISHED" ? /* @__PURE__ */
|
|
2421
|
+
t.status === "PUBLISHED" ? /* @__PURE__ */ K("div", {
|
|
2397
2422
|
className: "flex items-start gap-3 rounded-lg border border-success/30 bg-success/10 px-4 py-3",
|
|
2398
|
-
children: [/* @__PURE__ */
|
|
2423
|
+
children: [/* @__PURE__ */ G(le, {
|
|
2399
2424
|
size: 16,
|
|
2400
2425
|
className: "text-success mt-0.5 shrink-0"
|
|
2401
|
-
}), /* @__PURE__ */
|
|
2426
|
+
}), /* @__PURE__ */ K("div", {
|
|
2402
2427
|
className: "text-sm",
|
|
2403
|
-
children: [/* @__PURE__ */
|
|
2428
|
+
children: [/* @__PURE__ */ G("span", {
|
|
2404
2429
|
className: "font-medium text-success",
|
|
2405
2430
|
children: p("devportal.storeListing.published", "Published")
|
|
2406
|
-
}), t.publishedAt && /* @__PURE__ */
|
|
2431
|
+
}), t.publishedAt && /* @__PURE__ */ K("span", {
|
|
2407
2432
|
className: "text-text-secondary ml-2",
|
|
2408
2433
|
children: [
|
|
2409
2434
|
p("devportal.storeListing.since", "since"),
|
|
@@ -2412,249 +2437,273 @@ var it = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2412
2437
|
]
|
|
2413
2438
|
})]
|
|
2414
2439
|
})]
|
|
2415
|
-
}) :
|
|
2440
|
+
}) : ge ? /* @__PURE__ */ K("div", {
|
|
2416
2441
|
className: "flex items-center justify-between gap-3 rounded-lg border border-primary/30 bg-action-primary-bg/5 px-4 py-3",
|
|
2417
|
-
children: [/* @__PURE__ */
|
|
2442
|
+
children: [/* @__PURE__ */ K("div", {
|
|
2418
2443
|
className: "flex items-start gap-3",
|
|
2419
|
-
children: [/* @__PURE__ */
|
|
2444
|
+
children: [/* @__PURE__ */ G(de, {
|
|
2420
2445
|
size: 16,
|
|
2421
2446
|
className: "text-primary mt-0.5 shrink-0"
|
|
2422
|
-
}), /* @__PURE__ */
|
|
2447
|
+
}), /* @__PURE__ */ K("div", {
|
|
2423
2448
|
className: "text-sm",
|
|
2424
2449
|
children: [
|
|
2425
|
-
/* @__PURE__ */
|
|
2450
|
+
/* @__PURE__ */ G("span", {
|
|
2426
2451
|
className: "font-medium text-primary",
|
|
2427
2452
|
children: p("devportal.storeListing.underReview", "Submitted for review")
|
|
2428
2453
|
}),
|
|
2429
|
-
t.submittedAt && /* @__PURE__ */
|
|
2454
|
+
t.submittedAt && /* @__PURE__ */ G("span", {
|
|
2430
2455
|
className: "text-text-secondary ml-2",
|
|
2431
2456
|
children: new Date(t.submittedAt).toLocaleDateString()
|
|
2432
2457
|
}),
|
|
2433
|
-
t.reviewStatus && /* @__PURE__ */
|
|
2458
|
+
t.reviewStatus && /* @__PURE__ */ K("span", {
|
|
2434
2459
|
className: "text-text-secondary ml-2",
|
|
2435
2460
|
children: ["· ", t.reviewStatus]
|
|
2436
2461
|
})
|
|
2437
2462
|
]
|
|
2438
2463
|
})]
|
|
2439
|
-
}), s && /* @__PURE__ */
|
|
2464
|
+
}), s && /* @__PURE__ */ K("button", {
|
|
2440
2465
|
type: "button",
|
|
2441
2466
|
onClick: s,
|
|
2442
2467
|
className: "shrink-0 text-xs text-primary hover:underline font-medium flex items-center gap-1",
|
|
2443
|
-
children: [p("devportal.viewStatus", "View Status"), /* @__PURE__ */
|
|
2468
|
+
children: [p("devportal.viewStatus", "View Status"), /* @__PURE__ */ G(z, { size: 12 })]
|
|
2444
2469
|
})]
|
|
2445
|
-
}) : /* @__PURE__ */
|
|
2470
|
+
}) : /* @__PURE__ */ K("div", {
|
|
2446
2471
|
className: "flex items-start gap-3 rounded-lg border border-warning/30 bg-warning/5 px-4 py-3",
|
|
2447
|
-
children: [/* @__PURE__ */
|
|
2472
|
+
children: [/* @__PURE__ */ G(se, {
|
|
2448
2473
|
size: 16,
|
|
2449
2474
|
className: "text-warning mt-0.5 shrink-0"
|
|
2450
|
-
}), /* @__PURE__ */
|
|
2475
|
+
}), /* @__PURE__ */ K("div", {
|
|
2451
2476
|
className: "text-sm",
|
|
2452
|
-
children: [/* @__PURE__ */
|
|
2477
|
+
children: [/* @__PURE__ */ G("span", {
|
|
2453
2478
|
className: "font-medium text-warning",
|
|
2454
2479
|
children: p("devportal.storeListing.draft", "Draft")
|
|
2455
|
-
}), /* @__PURE__ */
|
|
2480
|
+
}), /* @__PURE__ */ G("span", {
|
|
2456
2481
|
className: "text-text-secondary ml-2",
|
|
2457
2482
|
children: p("devportal.storeListing.draftHint", "Complete your store listing and submit for review to publish.")
|
|
2458
2483
|
})]
|
|
2459
2484
|
})]
|
|
2460
2485
|
}),
|
|
2461
|
-
/* @__PURE__ */
|
|
2486
|
+
/* @__PURE__ */ G(y, {
|
|
2462
2487
|
title: p("devportal.package", "Package"),
|
|
2463
2488
|
description: p("devportal.packageDescription", "Technical configuration — how FluidGrid installs and runs this item"),
|
|
2464
|
-
children: /* @__PURE__ */
|
|
2489
|
+
children: /* @__PURE__ */ K("div", {
|
|
2465
2490
|
className: "space-y-6",
|
|
2466
2491
|
children: [
|
|
2467
|
-
/* @__PURE__ */
|
|
2492
|
+
/* @__PURE__ */ G(k, {
|
|
2468
2493
|
label: p("devportal.storeItemType", "Item Type"),
|
|
2469
2494
|
value: m.manifestItemType,
|
|
2470
2495
|
onChange: (e) => {
|
|
2471
2496
|
let t = e.target.value;
|
|
2472
|
-
|
|
2497
|
+
E("manifestItemType", t), Z.has(t) ? E("manifestInstallType", "json") : m.manifestInstallType === "json" && E("manifestInstallType", "zip");
|
|
2473
2498
|
},
|
|
2474
2499
|
options: tt[t.appType] ?? tt.APP,
|
|
2475
2500
|
placeholder: p("devportal.selectItemType", "Select item type…"),
|
|
2476
2501
|
hint: p("devportal.storeItemTypeHint", "Sub-category shown in the marketplace (e.g. Node vs Agent vs Parser)")
|
|
2477
2502
|
}),
|
|
2478
|
-
/* @__PURE__ */
|
|
2503
|
+
/* @__PURE__ */ G(O, {
|
|
2479
2504
|
label: p("devportal.manifestDisplayName", "Display Name"),
|
|
2480
2505
|
value: m.manifestDisplayName,
|
|
2481
|
-
onChange: (e) =>
|
|
2506
|
+
onChange: (e) => E("manifestDisplayName", e.target.value),
|
|
2482
2507
|
placeholder: "My Awesome Node"
|
|
2483
2508
|
}),
|
|
2484
|
-
|
|
2509
|
+
B && t.appType !== "WORKFLOW" && /* @__PURE__ */ G(te, {
|
|
2485
2510
|
label: p("devportal.jsonContent", "Template Definition (JSON)"),
|
|
2486
2511
|
value: m.manifestJsonContent,
|
|
2487
|
-
onChange: (e) =>
|
|
2512
|
+
onChange: (e) => E("manifestJsonContent", e.target.value),
|
|
2488
2513
|
rows: 12,
|
|
2489
2514
|
placeholder: "{\n \"nodes\": [],\n \"edges\": []\n}",
|
|
2490
2515
|
hint: p("devportal.jsonContentHint", "Paste the full JSON definition. Stored and applied directly — no zip needed.")
|
|
2491
2516
|
}),
|
|
2492
|
-
|
|
2517
|
+
B && t.appType === "WORKFLOW" && /* @__PURE__ */ K("p", {
|
|
2493
2518
|
className: "text-sm text-text-secondary rounded-md bg-bg-sunken px-3 py-2",
|
|
2494
2519
|
children: [
|
|
2495
2520
|
"The Workflow Definition (JSON) is set per version. Go to the",
|
|
2496
2521
|
" ",
|
|
2497
|
-
/* @__PURE__ */
|
|
2522
|
+
/* @__PURE__ */ G("strong", { children: "Versions" }),
|
|
2498
2523
|
" tab to add or update it."
|
|
2499
2524
|
]
|
|
2500
2525
|
})
|
|
2501
2526
|
]
|
|
2502
2527
|
})
|
|
2503
2528
|
}),
|
|
2504
|
-
/* @__PURE__ */
|
|
2529
|
+
/* @__PURE__ */ G(y, {
|
|
2505
2530
|
title: p("devportal.storePresentation", "Store Presence"),
|
|
2506
2531
|
description: p("devportal.storePresentationDescription", "Visual assets and copy shown to users browsing the marketplace"),
|
|
2507
|
-
children: /* @__PURE__ */
|
|
2532
|
+
children: /* @__PURE__ */ K("div", {
|
|
2508
2533
|
className: "space-y-5",
|
|
2509
2534
|
children: [
|
|
2510
|
-
/* @__PURE__ */
|
|
2535
|
+
/* @__PURE__ */ K("div", {
|
|
2511
2536
|
className: "grid gap-5 sm:grid-cols-2",
|
|
2512
|
-
children: [/* @__PURE__ */
|
|
2537
|
+
children: [/* @__PURE__ */ G($e, {
|
|
2513
2538
|
label: p("devportal.iconUrl", "Icon"),
|
|
2514
2539
|
value: m.iconUrl,
|
|
2515
|
-
onChange: (e) =>
|
|
2540
|
+
onChange: (e) => E("iconUrl", e),
|
|
2516
2541
|
hint: p("devportal.iconUrlHint", "Shown in marketplace cards and search — square proportions (1:1)"),
|
|
2517
2542
|
aspectClass: "aspect-square",
|
|
2518
|
-
upload:
|
|
2519
|
-
uploading:
|
|
2520
|
-
progress:
|
|
2521
|
-
error:
|
|
2522
|
-
}), /* @__PURE__ */
|
|
2543
|
+
upload: re,
|
|
2544
|
+
uploading: ie,
|
|
2545
|
+
progress: ae,
|
|
2546
|
+
error: j
|
|
2547
|
+
}), /* @__PURE__ */ G($e, {
|
|
2523
2548
|
label: p("devportal.bannerUrl", "Banner"),
|
|
2524
2549
|
value: m.bannerUrl,
|
|
2525
|
-
onChange: (e) =>
|
|
2550
|
+
onChange: (e) => E("bannerUrl", e),
|
|
2526
2551
|
hint: p("devportal.bannerUrlHint", "Fills the right panel on the product page — square or portrait works best on all screen sizes (1:1)"),
|
|
2527
2552
|
aspectClass: "aspect-square",
|
|
2528
|
-
upload:
|
|
2529
|
-
uploading:
|
|
2530
|
-
progress:
|
|
2531
|
-
error:
|
|
2553
|
+
upload: M,
|
|
2554
|
+
uploading: ce,
|
|
2555
|
+
progress: I,
|
|
2556
|
+
error: R
|
|
2532
2557
|
})]
|
|
2533
2558
|
}),
|
|
2534
|
-
/* @__PURE__ */
|
|
2559
|
+
/* @__PURE__ */ G(O, {
|
|
2535
2560
|
label: p("devportal.videoUrl", "Demo Video URL"),
|
|
2536
2561
|
value: m.videoUrl,
|
|
2537
|
-
onChange: (e) =>
|
|
2562
|
+
onChange: (e) => E("videoUrl", e.target.value),
|
|
2538
2563
|
placeholder: "https://...",
|
|
2539
2564
|
hint: p("devportal.videoUrlHint", "YouTube or Vimeo embed URL")
|
|
2540
2565
|
}),
|
|
2541
|
-
/* @__PURE__ */
|
|
2566
|
+
/* @__PURE__ */ G(te, {
|
|
2542
2567
|
label: p("devportal.shortDescription", "Short Description"),
|
|
2543
2568
|
value: m.shortDescription,
|
|
2544
|
-
onChange: (e) =>
|
|
2569
|
+
onChange: (e) => E("shortDescription", e.target.value),
|
|
2545
2570
|
maxLength: 200,
|
|
2546
2571
|
rows: 2,
|
|
2547
2572
|
hint: `${m.shortDescription.length}/200 · ${p("devportal.shortDescHint", "Shown in search results and cards")}`
|
|
2548
2573
|
}),
|
|
2549
|
-
/* @__PURE__ */
|
|
2574
|
+
/* @__PURE__ */ G(te, {
|
|
2550
2575
|
label: p("devportal.longDescription", "Full Description"),
|
|
2551
2576
|
value: m.description,
|
|
2552
|
-
onChange: (e) =>
|
|
2577
|
+
onChange: (e) => E("description", e.target.value),
|
|
2553
2578
|
rows: 5,
|
|
2554
2579
|
hint: p("devportal.fullDescHint", "Markdown supported")
|
|
2555
2580
|
}),
|
|
2556
|
-
/* @__PURE__ */
|
|
2581
|
+
/* @__PURE__ */ G(X, {
|
|
2557
2582
|
urls: m.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean),
|
|
2558
|
-
onChange: (e) =>
|
|
2559
|
-
upload:
|
|
2560
|
-
uploading:
|
|
2561
|
-
progress:
|
|
2562
|
-
error:
|
|
2583
|
+
onChange: (e) => E("screenshotsText", e.join("\n")),
|
|
2584
|
+
upload: fe,
|
|
2585
|
+
uploading: pe,
|
|
2586
|
+
progress: me,
|
|
2587
|
+
error: he
|
|
2563
2588
|
})
|
|
2564
2589
|
]
|
|
2565
2590
|
})
|
|
2566
2591
|
}),
|
|
2567
|
-
/* @__PURE__ */
|
|
2592
|
+
/* @__PURE__ */ G(y, {
|
|
2568
2593
|
title: p("devportal.linksPolicies", "Links & Policies"),
|
|
2569
2594
|
description: p("devportal.linksPoliciesDescription", "External resources and legal documents — privacy policy and terms are required for store submission"),
|
|
2570
|
-
children: /* @__PURE__ */
|
|
2595
|
+
children: /* @__PURE__ */ K("div", {
|
|
2571
2596
|
className: "grid gap-4 sm:grid-cols-2",
|
|
2572
2597
|
children: [
|
|
2573
|
-
/* @__PURE__ */
|
|
2598
|
+
/* @__PURE__ */ G(O, {
|
|
2574
2599
|
label: p("devportal.websiteUrl", "Website"),
|
|
2575
2600
|
value: m.websiteUrl,
|
|
2576
|
-
onChange: (e) =>
|
|
2601
|
+
onChange: (e) => E("websiteUrl", e.target.value),
|
|
2577
2602
|
placeholder: "https://..."
|
|
2578
2603
|
}),
|
|
2579
|
-
/* @__PURE__ */
|
|
2604
|
+
/* @__PURE__ */ G(O, {
|
|
2580
2605
|
label: p("devportal.documentationUrl", "Documentation"),
|
|
2581
2606
|
value: m.documentationUrl,
|
|
2582
|
-
onChange: (e) =>
|
|
2607
|
+
onChange: (e) => E("documentationUrl", e.target.value),
|
|
2583
2608
|
placeholder: "https://..."
|
|
2584
2609
|
}),
|
|
2585
|
-
/* @__PURE__ */
|
|
2610
|
+
/* @__PURE__ */ G(O, {
|
|
2586
2611
|
label: p("devportal.githubUrl", "GitHub"),
|
|
2587
2612
|
value: m.githubUrl,
|
|
2588
|
-
onChange: (e) =>
|
|
2613
|
+
onChange: (e) => E("githubUrl", e.target.value),
|
|
2589
2614
|
placeholder: "https://github.com/..."
|
|
2590
2615
|
}),
|
|
2591
|
-
/* @__PURE__ */
|
|
2616
|
+
/* @__PURE__ */ G(O, {
|
|
2592
2617
|
label: p("devportal.supportUrl", "Support"),
|
|
2593
2618
|
value: m.supportUrl,
|
|
2594
|
-
onChange: (e) =>
|
|
2619
|
+
onChange: (e) => E("supportUrl", e.target.value),
|
|
2595
2620
|
placeholder: "https://..."
|
|
2596
2621
|
}),
|
|
2597
|
-
/* @__PURE__ */
|
|
2622
|
+
/* @__PURE__ */ G(O, {
|
|
2598
2623
|
label: `${p("devportal.privacyPolicyUrl", "Privacy Policy")} *`,
|
|
2599
2624
|
value: m.privacyPolicyUrl,
|
|
2600
|
-
onChange: (e) =>
|
|
2625
|
+
onChange: (e) => E("privacyPolicyUrl", e.target.value),
|
|
2601
2626
|
placeholder: "https://...",
|
|
2602
2627
|
hint: p("devportal.requiredForStore", "Required for store submission")
|
|
2603
2628
|
}),
|
|
2604
|
-
/* @__PURE__ */
|
|
2629
|
+
/* @__PURE__ */ G(O, {
|
|
2605
2630
|
label: `${p("devportal.termsOfServiceUrl", "Terms of Service")} *`,
|
|
2606
2631
|
value: m.termsOfServiceUrl,
|
|
2607
|
-
onChange: (e) =>
|
|
2632
|
+
onChange: (e) => E("termsOfServiceUrl", e.target.value),
|
|
2608
2633
|
placeholder: "https://...",
|
|
2609
2634
|
hint: p("devportal.requiredForStore", "Required for store submission")
|
|
2610
2635
|
})
|
|
2611
2636
|
]
|
|
2612
2637
|
})
|
|
2613
2638
|
}),
|
|
2614
|
-
/* @__PURE__ */
|
|
2615
|
-
className: "border-t pt-6
|
|
2639
|
+
/* @__PURE__ */ K("div", {
|
|
2640
|
+
className: "border-t pt-6 space-y-3",
|
|
2616
2641
|
children: [
|
|
2617
|
-
/* @__PURE__ */
|
|
2618
|
-
|
|
2619
|
-
|
|
2620
|
-
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
size: 16,
|
|
2624
|
-
className: "animate-spin"
|
|
2625
|
-
}), p("devportal.saving", "Saving…")] }) : /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(Te, { size: 16 }), p("devportal.saveStoreListing", "Save Store Listing")] })
|
|
2642
|
+
S === "success" && /* @__PURE__ */ K("div", {
|
|
2643
|
+
className: "flex items-center gap-2 rounded-md border border-success/30 bg-success/10 px-3 py-2 text-sm text-success",
|
|
2644
|
+
children: [/* @__PURE__ */ G(le, {
|
|
2645
|
+
size: 15,
|
|
2646
|
+
className: "shrink-0"
|
|
2647
|
+
}), p("devportal.storeListing.savedSuccess", "Store listing saved successfully.")]
|
|
2626
2648
|
}),
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
|
|
2630
|
-
|
|
2631
|
-
|
|
2649
|
+
S === "error" && /* @__PURE__ */ K("div", {
|
|
2650
|
+
className: "flex items-center gap-2 rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive",
|
|
2651
|
+
children: [/* @__PURE__ */ G(se, {
|
|
2652
|
+
size: 15,
|
|
2653
|
+
className: "shrink-0"
|
|
2654
|
+
}), p("devportal.storeListing.savedError", "Failed to save. Please try again.")]
|
|
2632
2655
|
}),
|
|
2633
|
-
|
|
2634
|
-
|
|
2635
|
-
|
|
2636
|
-
|
|
2637
|
-
|
|
2656
|
+
/* @__PURE__ */ K("div", {
|
|
2657
|
+
className: "flex flex-wrap items-center gap-3",
|
|
2658
|
+
children: [
|
|
2659
|
+
/* @__PURE__ */ G("button", {
|
|
2660
|
+
type: "button",
|
|
2661
|
+
onClick: ne,
|
|
2662
|
+
disabled: g || !D || b,
|
|
2663
|
+
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"),
|
|
2664
|
+
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",
|
|
2665
|
+
children: g ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(V, {
|
|
2666
|
+
size: 16,
|
|
2667
|
+
className: "animate-spin"
|
|
2668
|
+
}), p("devportal.saving", "Saving…")] }) : b ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(L, { size: 16 }), p("devportal.saved", "Saved")] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(Se, { size: 16 }), p("devportal.saveStoreListing", "Save Store Listing")] })
|
|
2669
|
+
}),
|
|
2670
|
+
!D && /* @__PURE__ */ G("p", {
|
|
2671
|
+
className: "text-xs text-text-secondary",
|
|
2672
|
+
children: p("devportal.storeListing.requiredFieldsLabel", "Short Description, Privacy Policy URL, and Terms of Service URL are required")
|
|
2673
|
+
}),
|
|
2674
|
+
r && n === 0 && a && /* @__PURE__ */ K("button", {
|
|
2675
|
+
type: "button",
|
|
2676
|
+
onClick: a,
|
|
2677
|
+
className: "inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline underline-offset-2",
|
|
2678
|
+
children: [p("devportal.nextUploadVersion", "Next: Upload a Version"), /* @__PURE__ */ G(ue, { size: 15 })]
|
|
2679
|
+
}),
|
|
2680
|
+
(!r || n > 0) && !i && o && /* @__PURE__ */ K("button", {
|
|
2681
|
+
type: "button",
|
|
2682
|
+
onClick: o,
|
|
2683
|
+
className: "inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline underline-offset-2",
|
|
2684
|
+
children: [p("devportal.nextSetPricing", "Next: Set Pricing"), /* @__PURE__ */ G(ue, { size: 15 })]
|
|
2685
|
+
})
|
|
2686
|
+
]
|
|
2638
2687
|
})
|
|
2639
2688
|
]
|
|
2640
2689
|
})
|
|
2641
2690
|
]
|
|
2642
2691
|
});
|
|
2643
2692
|
}, Q = ({ label: e, value: n, trend: r }) => {
|
|
2644
|
-
let { t: i } =
|
|
2645
|
-
return /* @__PURE__ */
|
|
2693
|
+
let { t: i } = F();
|
|
2694
|
+
return /* @__PURE__ */ K(Me, {
|
|
2646
2695
|
treatment: "metric",
|
|
2647
2696
|
className: "p-4",
|
|
2648
2697
|
children: [
|
|
2649
|
-
/* @__PURE__ */
|
|
2698
|
+
/* @__PURE__ */ G("p", {
|
|
2650
2699
|
className: "text-sm text-text-secondary",
|
|
2651
2700
|
children: e
|
|
2652
2701
|
}),
|
|
2653
|
-
/* @__PURE__ */
|
|
2702
|
+
/* @__PURE__ */ G("p", {
|
|
2654
2703
|
className: "text-2xl font-bold tabular-nums",
|
|
2655
2704
|
children: n
|
|
2656
2705
|
}),
|
|
2657
|
-
r !== void 0 && /* @__PURE__ */
|
|
2706
|
+
r !== void 0 && /* @__PURE__ */ K("p", {
|
|
2658
2707
|
className: t("text-xs mt-1 tabular-nums", r > 0 ? "text-status-success-text" : r < 0 ? "text-status-error-text" : "text-text-secondary"),
|
|
2659
2708
|
children: [
|
|
2660
2709
|
r > 0 ? "+" : "",
|
|
@@ -2668,12 +2717,12 @@ var it = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2668
2717
|
})
|
|
2669
2718
|
]
|
|
2670
2719
|
});
|
|
2671
|
-
}, $ = ({ label: e, url: t }) => /* @__PURE__ */
|
|
2720
|
+
}, $ = ({ label: e, url: t }) => /* @__PURE__ */ K("a", {
|
|
2672
2721
|
href: t,
|
|
2673
2722
|
target: "_blank",
|
|
2674
2723
|
rel: "noopener noreferrer",
|
|
2675
2724
|
className: "flex items-center gap-2 text-sm text-primary hover:underline",
|
|
2676
|
-
children: [/* @__PURE__ */
|
|
2725
|
+
children: [/* @__PURE__ */ G(z, { size: 14 }), e]
|
|
2677
2726
|
}), at = [
|
|
2678
2727
|
{
|
|
2679
2728
|
id: "auth",
|
|
@@ -2753,7 +2802,7 @@ function ot(e) {
|
|
|
2753
2802
|
return t;
|
|
2754
2803
|
}
|
|
2755
2804
|
var st = ({ app: e }) => {
|
|
2756
|
-
let t = e.manifest ?? {}, [n, r] =
|
|
2805
|
+
let t = e.manifest ?? {}, [n, r] = P(() => ot(t)), [i, a] = P(!1), [o, s] = P(!1), [c] = _(), l = (e, t) => {
|
|
2757
2806
|
s(!1), r((n) => ({
|
|
2758
2807
|
...n,
|
|
2759
2808
|
[e]: t
|
|
@@ -2784,41 +2833,41 @@ var st = ({ app: e }) => {
|
|
|
2784
2833
|
"read",
|
|
2785
2834
|
"write"
|
|
2786
2835
|
];
|
|
2787
|
-
return /* @__PURE__ */
|
|
2836
|
+
return /* @__PURE__ */ G(y, {
|
|
2788
2837
|
title: "Permissions",
|
|
2789
2838
|
description: "Define what platform data this app can request access to. Users see these when authorizing the app.",
|
|
2790
|
-
children: /* @__PURE__ */
|
|
2839
|
+
children: /* @__PURE__ */ K("div", {
|
|
2791
2840
|
className: "space-y-4",
|
|
2792
2841
|
children: [
|
|
2793
|
-
/* @__PURE__ */
|
|
2842
|
+
/* @__PURE__ */ G("div", {
|
|
2794
2843
|
className: "overflow-x-auto rounded-lg border border-border-subtle",
|
|
2795
|
-
children: /* @__PURE__ */
|
|
2844
|
+
children: /* @__PURE__ */ K("table", {
|
|
2796
2845
|
className: "w-full text-sm",
|
|
2797
|
-
children: [/* @__PURE__ */
|
|
2846
|
+
children: [/* @__PURE__ */ G("thead", { children: /* @__PURE__ */ K("tr", {
|
|
2798
2847
|
className: "border-b border-border-subtle bg-bg-sunken/50",
|
|
2799
|
-
children: [/* @__PURE__ */
|
|
2848
|
+
children: [/* @__PURE__ */ G("th", {
|
|
2800
2849
|
className: "px-4 py-3 text-left font-medium text-text-secondary w-1/2",
|
|
2801
2850
|
children: "Resource"
|
|
2802
|
-
}), f.map((e) => /* @__PURE__ */
|
|
2851
|
+
}), f.map((e) => /* @__PURE__ */ G("th", {
|
|
2803
2852
|
className: "px-4 py-3 text-center font-medium text-text-secondary",
|
|
2804
2853
|
children: d[e]
|
|
2805
2854
|
}, e))]
|
|
2806
|
-
}) }), /* @__PURE__ */
|
|
2855
|
+
}) }), /* @__PURE__ */ G("tbody", {
|
|
2807
2856
|
className: "divide-y divide-border",
|
|
2808
|
-
children: at.map((e) => /* @__PURE__ */
|
|
2857
|
+
children: at.map((e) => /* @__PURE__ */ K("tr", {
|
|
2809
2858
|
className: "hover:bg-bg-sunken/30 transition-colors",
|
|
2810
|
-
children: [/* @__PURE__ */
|
|
2859
|
+
children: [/* @__PURE__ */ K("td", {
|
|
2811
2860
|
className: "px-4 py-3",
|
|
2812
|
-
children: [/* @__PURE__ */
|
|
2861
|
+
children: [/* @__PURE__ */ G("p", {
|
|
2813
2862
|
className: "font-medium text-text-primary",
|
|
2814
2863
|
children: e.label
|
|
2815
|
-
}), /* @__PURE__ */
|
|
2864
|
+
}), /* @__PURE__ */ G("p", {
|
|
2816
2865
|
className: "text-xs text-text-secondary",
|
|
2817
2866
|
children: e.description
|
|
2818
2867
|
})]
|
|
2819
|
-
}), f.map((t) => /* @__PURE__ */
|
|
2868
|
+
}), f.map((t) => /* @__PURE__ */ G("td", {
|
|
2820
2869
|
className: "px-4 py-3 text-center",
|
|
2821
|
-
children: /* @__PURE__ */
|
|
2870
|
+
children: /* @__PURE__ */ G("input", {
|
|
2822
2871
|
type: "radio",
|
|
2823
2872
|
name: `perm-${e.id}`,
|
|
2824
2873
|
value: t,
|
|
@@ -2831,27 +2880,27 @@ var st = ({ app: e }) => {
|
|
|
2831
2880
|
})]
|
|
2832
2881
|
})
|
|
2833
2882
|
}),
|
|
2834
|
-
/* @__PURE__ */
|
|
2883
|
+
/* @__PURE__ */ K("div", {
|
|
2835
2884
|
className: "rounded-lg border border-border-subtle bg-bg-sunken/30 p-3 flex gap-2 text-xs text-text-secondary",
|
|
2836
|
-
children: [/* @__PURE__ */
|
|
2885
|
+
children: [/* @__PURE__ */ G(he, {
|
|
2837
2886
|
size: 14,
|
|
2838
2887
|
className: "flex-shrink-0 mt-0.5"
|
|
2839
|
-
}), /* @__PURE__ */
|
|
2888
|
+
}), /* @__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."] })]
|
|
2840
2889
|
}),
|
|
2841
|
-
/* @__PURE__ */
|
|
2890
|
+
/* @__PURE__ */ K("div", {
|
|
2842
2891
|
className: "flex items-center justify-end gap-3",
|
|
2843
|
-
children: [o && /* @__PURE__ */
|
|
2892
|
+
children: [o && /* @__PURE__ */ K("span", {
|
|
2844
2893
|
className: "flex items-center gap-1.5 text-sm text-status-success-text",
|
|
2845
|
-
children: [/* @__PURE__ */
|
|
2846
|
-
}), /* @__PURE__ */
|
|
2894
|
+
children: [/* @__PURE__ */ G(le, { size: 14 }), "Saved"]
|
|
2895
|
+
}), /* @__PURE__ */ K("button", {
|
|
2847
2896
|
type: "button",
|
|
2848
2897
|
onClick: () => void u(),
|
|
2849
2898
|
disabled: i,
|
|
2850
2899
|
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",
|
|
2851
|
-
children: [i ? /* @__PURE__ */
|
|
2900
|
+
children: [i ? /* @__PURE__ */ G(V, {
|
|
2852
2901
|
size: 14,
|
|
2853
2902
|
className: "animate-spin"
|
|
2854
|
-
}) : /* @__PURE__ */
|
|
2903
|
+
}) : /* @__PURE__ */ G(xe, { size: 14 }), "Save Permissions"]
|
|
2855
2904
|
})]
|
|
2856
2905
|
})
|
|
2857
2906
|
]
|
|
@@ -2859,6 +2908,6 @@ var st = ({ app: e }) => {
|
|
|
2859
2908
|
});
|
|
2860
2909
|
};
|
|
2861
2910
|
//#endregion
|
|
2862
|
-
export {
|
|
2911
|
+
export { Be as ApplicationDetailPage };
|
|
2863
2912
|
|
|
2864
2913
|
//# sourceMappingURL=ApplicationDetailPage.js.map
|