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