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