@burdenoff/microfe-devportal 2026.801.1 → 2026.802.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.
Files changed (70) hide show
  1. package/dist/devportal/AdminDevportalRoutes.js +14 -14
  2. package/dist/devportal/DevportalRoutes.js +115 -115
  3. package/dist/devportal/DevportalRoutes.js.map +1 -1
  4. package/dist/devportal/components/SectionNav.js +1 -0
  5. package/dist/devportal/components/SectionNav.js.map +1 -1
  6. package/dist/devportal/components/TelemetryErrorBoundary.js +7 -7
  7. package/dist/devportal/pages/AnalyticsDashboardPage.js +41 -41
  8. package/dist/devportal/pages/AnalyticsDashboardPage.js.map +1 -1
  9. package/dist/devportal/pages/AppLogsPage.js +27 -27
  10. package/dist/devportal/pages/ApplicationDetailPage.js +929 -929
  11. package/dist/devportal/pages/ApplicationDetailPage.js.map +1 -1
  12. package/dist/devportal/pages/ApplicationVersionsPage.js +39 -39
  13. package/dist/devportal/pages/ApplicationVersionsPage.js.map +1 -1
  14. package/dist/devportal/pages/CreateWebhookPage.js +55 -55
  15. package/dist/devportal/pages/EditApplicationPage.js +36 -36
  16. package/dist/devportal/pages/EditApplicationPage.js.map +1 -1
  17. package/dist/devportal/pages/EditPhysicalItemPage.js +40 -40
  18. package/dist/devportal/pages/InvitationDecisionPage.js +25 -25
  19. package/dist/devportal/pages/ListingPreviewPage.js +36 -36
  20. package/dist/devportal/pages/OAuthCallbackPage.js +10 -10
  21. package/dist/devportal/pages/OAuthClientDetailPage.js +27 -27
  22. package/dist/devportal/pages/OAuthClientDetailPage.js.map +1 -1
  23. package/dist/devportal/pages/OrganizationDetailPage.js +329 -329
  24. package/dist/devportal/pages/OrganizationDetailPage.js.map +1 -1
  25. package/dist/devportal/pages/OrganizationMembersPage.js +181 -181
  26. package/dist/devportal/pages/OrganizationMembersPage.js.map +1 -1
  27. package/dist/devportal/pages/PublishPage.js +43 -43
  28. package/dist/devportal/pages/PublishPage.js.map +1 -1
  29. package/dist/devportal/pages/RevenueDashboardPage.js +65 -65
  30. package/dist/devportal/pages/RevenueDashboardPage.js.map +1 -1
  31. package/dist/devportal/pages/StoreSubmissionPage.js +126 -126
  32. package/dist/devportal/pages/StoreSubmissionPage.js.map +1 -1
  33. package/dist/devportal/pages/WebhookDetailPage.js +28 -28
  34. package/dist/devportal/pages/WebhookDetailPage.js.map +1 -1
  35. package/dist/devportal/pages/WebhooksPage.js +47 -47
  36. package/dist/devportal/pages/WebhooksPage.js.map +1 -1
  37. package/dist/devportal/providers/DevportalProvider.js +12 -12
  38. package/package.json +1 -1
  39. package/dist/node_modules/react-router/dist/production/lib/components.js +0 -124
  40. package/dist/node_modules/react-router/dist/production/lib/components.js.map +0 -1
  41. package/dist/node_modules/react-router/dist/production/lib/context.js +0 -32
  42. package/dist/node_modules/react-router/dist/production/lib/context.js.map +0 -1
  43. package/dist/node_modules/react-router/dist/production/lib/dom/dom.js +0 -83
  44. package/dist/node_modules/react-router/dist/production/lib/dom/dom.js.map +0 -1
  45. package/dist/node_modules/react-router/dist/production/lib/dom/lib.js +0 -358
  46. package/dist/node_modules/react-router/dist/production/lib/dom/lib.js.map +0 -1
  47. package/dist/node_modules/react-router/dist/production/lib/dom/ssr/components.js +0 -188
  48. package/dist/node_modules/react-router/dist/production/lib/dom/ssr/components.js.map +0 -1
  49. package/dist/node_modules/react-router/dist/production/lib/dom/ssr/invariant.js +0 -8
  50. package/dist/node_modules/react-router/dist/production/lib/dom/ssr/invariant.js.map +0 -1
  51. package/dist/node_modules/react-router/dist/production/lib/dom/ssr/links.js +0 -75
  52. package/dist/node_modules/react-router/dist/production/lib/dom/ssr/links.js.map +0 -1
  53. package/dist/node_modules/react-router/dist/production/lib/dom/ssr/markup.js +0 -15
  54. package/dist/node_modules/react-router/dist/production/lib/dom/ssr/markup.js.map +0 -1
  55. package/dist/node_modules/react-router/dist/production/lib/dom/ssr/routeModules.js +0 -18
  56. package/dist/node_modules/react-router/dist/production/lib/dom/ssr/routeModules.js.map +0 -1
  57. package/dist/node_modules/react-router/dist/production/lib/dom/ssr/single-fetch.js +0 -10
  58. package/dist/node_modules/react-router/dist/production/lib/dom/ssr/single-fetch.js.map +0 -1
  59. package/dist/node_modules/react-router/dist/production/lib/errors.js +0 -19
  60. package/dist/node_modules/react-router/dist/production/lib/errors.js.map +0 -1
  61. package/dist/node_modules/react-router/dist/production/lib/hooks.js +0 -296
  62. package/dist/node_modules/react-router/dist/production/lib/hooks.js.map +0 -1
  63. package/dist/node_modules/react-router/dist/production/lib/router/history.js +0 -166
  64. package/dist/node_modules/react-router/dist/production/lib/router/history.js.map +0 -1
  65. package/dist/node_modules/react-router/dist/production/lib/router/router.js +0 -33
  66. package/dist/node_modules/react-router/dist/production/lib/router/router.js.map +0 -1
  67. package/dist/node_modules/react-router/dist/production/lib/router/url.js +0 -9
  68. package/dist/node_modules/react-router/dist/production/lib/router/url.js.map +0 -1
  69. package/dist/node_modules/react-router/dist/production/lib/router/utils.js +0 -236
  70. package/dist/node_modules/react-router/dist/production/lib/router/utils.js.map +0 -1
@@ -1,31 +1,31 @@
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";
1
+ import { useDevportal as e } from "../providers/DevportalProvider.js";
2
+ import { cn as t } from "../utils/cn.js";
3
+ import { LoadingState as n } from "../components/LoadingState.js";
4
+ import { EmptyState as r } from "../components/EmptyState.js";
5
+ import { useCurrentUserDelegationsQuery as i, useDeactivateApplicationMutation as a, useGetApplicationAnalyticsQuery as o, useGetApplicationQuery as s, useGetApplicationVersionsQuery as c, useGetOrganizationQuery as l, useGetWebhooksQuery as u, useGetWorkspaceInstallationQuery as d, useInstallApplicationMutation as f, usePublishApplicationVersionMutation as p, useRevokeDelegationMutation as m, useRotateAppSecretMutation as h, useShareWorkflowMutation as g, useSubmitApplicationMutation as _, useUninstallApplicationMutation as v, useUnshareWorkflowMutation as y, useUpdateApplicationMutation as b } from "../../generated/global-operations.js";
6
+ import { PageLayout as x, PageSection as S } from "../components/PageLayout.js";
7
+ import { APP_TYPE_LABELS as C } from "../utils/constants.js";
8
+ import { FeaturedBadge as w, StatusBadge as T, VerifiedBadge as E } from "../components/StatusBadge.js";
10
9
  import { SelectionCheckbox as D } from "../components/SelectionCheckbox.js";
11
10
  import { nativeNotify as O } from "../../utils/nativeBridge.js";
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";
11
+ import { NewSecretAlert as ee } from "../components/SecretDisplay.js";
12
+ import { DataTable as te, DetailList as ne } from "../components/DataTable.js";
13
+ import { InputField as k, SelectField as re, TextareaField as ie } from "../components/FormField.js";
14
+ import { ConfirmDialog as ae } from "../components/ConfirmDialog.js";
15
+ import { GrantDelegationModal as oe } from "../components/GrantDelegationModal.js";
16
+ import { MarkdownEditor as se } from "../components/MarkdownEditor.js";
17
+ import { useDevportalPermission as ce } from "../hooks/usePermission.js";
18
+ import { DEVPORTAL_PERMISSIONS as le } from "../constants/permissions.js";
19
+ import { usePackageUpload as ue } from "../hooks/usePackageUpload.js";
20
+ import { useCallback as A, useEffect as de, useMemo as j, useRef as M, useState as N } from "react";
21
+ import { Markdown as fe } from "@burdenoff/fe-libs/shared/components";
23
22
  import { useI18n as P } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
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";
23
+ import { AlertCircle as pe, AppWindow as me, BarChart3 as he, Check as F, CheckCircle as ge, ChevronRight as _e, CircleDollarSign as I, Clock as ve, Copy as ye, Edit as be, ExternalLink as L, FlaskConical as xe, Gift as Se, Info as Ce, Key as we, Link as Te, Loader2 as R, Lock as Ee, MoreHorizontal as De, Package as Oe, Plus as ke, Power as Ae, RefreshCw as je, SendHorizontal as Me, Shield as z, Store as Ne, TrendingUp as Pe, Upload as B, Users as Fe, Wallet as V, Webhook as Ie, X as Le, XCircle as Re } from "lucide-react";
24
+ import { useParams as ze } from "react-router";
25
+ import { Fragment as H, jsx as U, jsxs as W } from "react/jsx-runtime";
26
+ import { CTAOverflowMenu as Be, EmphasisPanel as Ve, GlassCard as He } from "@burdenoff/fe-libs/ui";
27
27
  //#region src/devportal/pages/ApplicationDetailPage.tsx
28
- function He(e) {
28
+ function Ue(e) {
29
29
  return e ? {
30
30
  id: e.id,
31
31
  name: e.name,
@@ -79,7 +79,7 @@ function He(e) {
79
79
  updatedAt: e.updatedAt
80
80
  } : null;
81
81
  }
82
- function Ue(e) {
82
+ function We(e) {
83
83
  return {
84
84
  id: e.id,
85
85
  applicationId: e.applicationId,
@@ -103,7 +103,7 @@ function Ue(e) {
103
103
  updatedAt: e.updatedAt
104
104
  };
105
105
  }
106
- function K(e) {
106
+ function G(e) {
107
107
  return {
108
108
  id: e.id,
109
109
  applicationId: e.applicationId,
@@ -119,7 +119,7 @@ function K(e) {
119
119
  createdAt: e.createdAt
120
120
  };
121
121
  }
122
- function q(e) {
122
+ function K(e) {
123
123
  return {
124
124
  id: e.id,
125
125
  appId: e.appId,
@@ -141,7 +141,7 @@ function q(e) {
141
141
  revokedBy: e.revokedBy || void 0
142
142
  };
143
143
  }
144
- var We = [
144
+ var Ge = [
145
145
  {
146
146
  id: "overview",
147
147
  label: "Overview",
@@ -165,12 +165,12 @@ var We = [
165
165
  {
166
166
  id: "pricing",
167
167
  label: "Pricing",
168
- icon: L
168
+ icon: I
169
169
  },
170
170
  {
171
171
  id: "permissions",
172
172
  label: "Permissions",
173
- icon: Me
173
+ icon: z
174
174
  },
175
175
  {
176
176
  id: "webhooks",
@@ -185,7 +185,7 @@ var We = [
185
185
  {
186
186
  id: "playground",
187
187
  label: "API Playground",
188
- icon: R
188
+ icon: L
189
189
  },
190
190
  {
191
191
  id: "oauth",
@@ -197,399 +197,399 @@ var We = [
197
197
  label: "API Keys",
198
198
  icon: we
199
199
  }
200
- ], J = {
200
+ ], q = {
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
- }, Y = ({ message: e = "Loading..." }) => /* @__PURE__ */ G("div", {
204
+ }, J = ({ message: e = "Loading..." }) => /* @__PURE__ */ W("div", {
205
205
  className: "flex items-center justify-center gap-3 py-12",
206
- children: [/* @__PURE__ */ W(z, {
206
+ children: [/* @__PURE__ */ U(R, {
207
207
  size: 20,
208
208
  className: "animate-spin text-text-secondary"
209
- }), /* @__PURE__ */ W("p", {
209
+ }), /* @__PURE__ */ U("p", {
210
210
  className: "text-sm text-text-secondary",
211
211
  children: e
212
212
  })]
213
- }), X = ({ message: e }) => /* @__PURE__ */ G("div", {
213
+ }), Y = ({ message: e }) => /* @__PURE__ */ W("div", {
214
214
  className: "flex flex-col items-center justify-center gap-2 py-12 text-center",
215
- children: [/* @__PURE__ */ W(F, {
215
+ children: [/* @__PURE__ */ U(pe, {
216
216
  size: 32,
217
217
  className: "text-status-error-text"
218
- }), /* @__PURE__ */ W("p", {
218
+ }), /* @__PURE__ */ U("p", {
219
219
  className: "text-sm text-text-secondary",
220
220
  children: e
221
221
  })]
222
- }), Ge = () => {
223
- let { navigate: a, basePath: s, workspaceId: l } = t(), { t: d } = P(), h = (e, t) => {
224
- let n = d(e);
222
+ }), Ke = () => {
223
+ let { navigate: i, basePath: o, workspaceId: c } = e(), { t: u } = P(), m = (e, t) => {
224
+ let n = u(e);
225
225
  return n === e ? t : n;
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({
226
+ }, { allowed: g } = ce(le.APP_UPDATE), { allowed: y } = ce(le.APP_DELETE), { appId: b } = ze(), [S, D] = N("overview"), [te, ne] = N(!1), [k, re] = N(!1), [ie, se] = N(null), [ue, de] = N(!1), { data: j, loading: M, error: fe, refetch: he } = s({
227
+ variables: { id: b },
228
+ skip: !b
229
+ }), [I, { loading: ye }] = h(), [L, { loading: Se }] = a(), [Ce, { loading: we }] = _(), [Te] = p(), [Ee, { loading: De }] = f(), [Oe, { loading: ke }] = v(), { data: z, refetch: Pe } = d({
230
230
  variables: {
231
- applicationId: x,
232
- workspaceId: l ?? void 0
231
+ applicationId: b,
232
+ workspaceId: c ?? void 0
233
233
  },
234
- skip: !l || !x,
234
+ skip: !c || !b,
235
235
  fetchPolicy: "cache-and-network"
236
- }), V = Me?.appInstallations?.edges?.[0]?.node ?? null, { data: Fe } = u({
236
+ }), B = z?.appInstallations?.edges?.[0]?.node ?? null, { data: Fe } = l({
237
237
  variables: { id: j?.application?.developerOrganizationId ?? "" },
238
238
  skip: !j?.application?.developerOrganizationId,
239
239
  fetchPolicy: "cache-first"
240
- }), H = A((e) => {
241
- a?.(`${s}${e}`);
242
- }, [a, s]), Ie = A(async () => {
240
+ }), V = A((e) => {
241
+ i?.(`${o}${e}`);
242
+ }, [i, o]), Ie = A(async () => {
243
243
  let e = j?.application?.appId;
244
244
  if (e) try {
245
- let t = (await L({ variables: { id: e } })).data?.rotateAppSecret.clientSecret;
246
- t && ce(t), re(!1);
245
+ let t = (await I({ variables: { id: e } })).data?.rotateAppSecret.clientSecret;
246
+ t && se(t), ne(!1);
247
247
  } catch {}
248
- }, [j?.application?.appId, L]), Le = A(async () => {
249
- if (x) try {
250
- await R({ variables: { id: x } }), ie(!1), H("/apps");
248
+ }, [j?.application?.appId, I]), Le = A(async () => {
249
+ if (b) try {
250
+ await L({ variables: { id: b } }), re(!1), V("/apps");
251
251
  } catch {}
252
252
  }, [
253
- x,
254
- R,
255
- H
256
- ]), Be = A(async () => {
257
- if (!(!x || !l)) try {
253
+ b,
254
+ L,
255
+ V
256
+ ]), Ve = A(async () => {
257
+ if (!(!b || !c)) try {
258
258
  await Ee({ variables: { input: {
259
- applicationId: x,
259
+ applicationId: b,
260
260
  scope: "WORKSPACE",
261
- workspaceId: l,
261
+ workspaceId: c,
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
- x,
269
- l,
268
+ b,
269
+ c,
270
270
  Ee,
271
271
  Pe
272
- ]), Ve = A(async (e) => {
272
+ ]), He = 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]), Ue = A(async () => {
279
- if (x) try {
278
+ }, [Oe, Pe]), We = A(async () => {
279
+ if (b) 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: x } }), O("success");
282
+ await Ce({ variables: { id: b } }), 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
- x,
289
+ b,
290
290
  j?.application?.versions?.edges,
291
291
  Te,
292
292
  Ce,
293
293
  he
294
294
  ]);
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", {
295
+ if (M && !j) return /* @__PURE__ */ U(n, { message: m("devportal.loadingApplication", "Loading application...") });
296
+ if (fe) return /* @__PURE__ */ U(x, {
297
+ title: m("devportal.error", "Error"),
298
+ backLink: `${o}/apps`,
299
+ backLabel: m("devportal.backToApplications", "Back to Applications"),
300
+ children: /* @__PURE__ */ W("div", {
301
301
  className: "flex flex-col items-center justify-center py-12 text-center",
302
302
  children: [
303
- /* @__PURE__ */ W(F, {
303
+ /* @__PURE__ */ U(pe, {
304
304
  size: 48,
305
305
  className: "text-status-error-text mb-4"
306
306
  }),
307
- /* @__PURE__ */ W("h3", {
307
+ /* @__PURE__ */ U("h3", {
308
308
  className: "text-lg font-semibold mb-2",
309
- children: h("devportal.failedToLoadApplication", "Failed to load application")
309
+ children: m("devportal.failedToLoadApplication", "Failed to load application")
310
310
  }),
311
- /* @__PURE__ */ W("p", {
311
+ /* @__PURE__ */ U("p", {
312
312
  className: "text-sm text-text-secondary",
313
- children: pe.message
313
+ children: fe.message
314
314
  })
315
315
  ]
316
316
  })
317
317
  });
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, {
318
+ let G = Ue(j?.application);
319
+ if (!G) return /* @__PURE__ */ U(x, {
320
+ title: m("devportal.notFound", "Not Found"),
321
+ backLink: `${o}/apps`,
322
+ backLabel: m("devportal.backToApplications", "Back to Applications"),
323
+ children: /* @__PURE__ */ U(r, {
324
324
  illustration: "empty-generic",
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.")
325
+ icon: /* @__PURE__ */ U(me, { size: 48 }),
326
+ title: m("devportal.applicationNotFound", "Application not found"),
327
+ description: m("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 q = [
330
+ let K = [
331
331
  "NODE",
332
332
  "WORKFLOW",
333
333
  "PARSER",
334
334
  "WIDGET",
335
335
  "DASHBOARD"
336
- ].includes(K.appType), J = K.appType === "API_INTEGRATION", Y = j?.application?.versions?.totalCount ?? 0, X = K.pricingType === "PAID", Ge = Fe?.developerOrganization, Je = Ge?.platformFeeRate ?? .3, Z = !!Ge?.billingAccountId, Ye = K.pricingDetails ?? {}, Q = K.pricingType === "FREE" || K.pricingType === "PAID" && typeof Ye.price == "number" && Ye.price > 0, nt = !!K.description?.trim() && !!K.category && !!K.iconUrl && (K.visibility === "PUBLIC" || K.visibility === "UNLISTED") && (!q && !J || Y > 0) && (!X || Z) && Q, rt = nt && K.status !== "PUBLISHED" && K.status !== "SUBMITTED" && K.status !== "INACTIVE" && K.status !== "REVOKED", it = [
337
- ...q ? [] : [{
338
- label: h("devportal.rotateSecret", "Rotate Secret"),
339
- icon: /* @__PURE__ */ W(Ae, { size: 16 }),
340
- disabled: !K.appId,
341
- onSelect: () => re(!0)
336
+ ].includes(G.appType), q = G.appType === "API_INTEGRATION", J = j?.application?.versions?.totalCount ?? 0, Y = G.pricingType === "PAID", Ke = Fe?.developerOrganization, Ye = Ke?.platformFeeRate ?? .3, X = !!Ke?.billingAccountId, Xe = G.pricingDetails ?? {}, Z = G.pricingType === "FREE" || G.pricingType === "PAID" && typeof Xe.price == "number" && Xe.price > 0, rt = !!G.description?.trim() && !!G.category && !!G.iconUrl && (G.visibility === "PUBLIC" || G.visibility === "UNLISTED") && (!K && !q || J > 0) && (!Y || X) && Z, it = rt && G.status !== "PUBLISHED" && G.status !== "SUBMITTED" && G.status !== "INACTIVE" && G.status !== "REVOKED", at = [
337
+ ...K ? [] : [{
338
+ label: m("devportal.rotateSecret", "Rotate Secret"),
339
+ icon: /* @__PURE__ */ U(je, { size: 16 }),
340
+ disabled: !G.appId,
341
+ onSelect: () => ne(!0)
342
342
  }],
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)
343
+ ...K ? [] : B ? [{
344
+ label: m("devportal.uninstallFromWorkspace", "Uninstall from Workspace"),
345
+ icon: /* @__PURE__ */ U(Re, { size: 16 }),
346
+ disabled: ke || !c,
347
+ onSelect: () => void He(B.id)
348
348
  }] : [{
349
- label: h("devportal.testInWorkspace", "Test in Workspace"),
350
- icon: /* @__PURE__ */ W(xe, { size: 16 }),
351
- disabled: De || !l,
352
- onSelect: () => void Be()
349
+ label: m("devportal.testInWorkspace", "Test in Workspace"),
350
+ icon: /* @__PURE__ */ U(xe, { size: 16 }),
351
+ disabled: De || !c,
352
+ onSelect: () => void Ve()
353
353
  }],
354
354
  {
355
- label: h("devportal.deactivate", "Deactivate"),
356
- icon: /* @__PURE__ */ W(ke, { size: 16 }),
355
+ label: m("devportal.deactivate", "Deactivate"),
356
+ icon: /* @__PURE__ */ U(Ae, { size: 16 }),
357
357
  intent: "destructive",
358
- disabled: !b,
359
- onSelect: () => ie(!0)
358
+ disabled: !y,
359
+ onSelect: () => re(!0)
360
360
  }
361
361
  ];
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", {
362
+ return /* @__PURE__ */ W(x, {
363
+ title: G.name,
364
+ description: G.shortDescription,
365
+ purpose: m("devportal.appDetailPurpose", "Everything about this application in one place — its credentials, the permissions and webhooks it uses, its analytics, and its store listing. Use the tabs to configure each area, then edit or publish when it is ready."),
366
+ backLink: `${o}/apps`,
367
+ backLabel: m("devportal.backToApplications", "Back to Applications"),
368
+ actions: /* @__PURE__ */ W("div", {
369
369
  className: "flex items-center gap-2",
370
- children: [K.status === "SUBMITTED" ? /* @__PURE__ */ G("div", {
370
+ children: [G.status === "SUBMITTED" ? /* @__PURE__ */ W("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__ */ W(ve, { size: 13 }), h("devportal.underReview", "Under Review")]
373
- }) : K.status !== "PUBLISHED" && K.status !== "INACTIVE" && K.status !== "REVOKED" ? /* @__PURE__ */ W("button", {
372
+ children: [/* @__PURE__ */ U(ve, { size: 13 }), m("devportal.underReview", "Under Review")]
373
+ }) : G.status !== "PUBLISHED" && G.status !== "INACTIVE" && G.status !== "REVOKED" ? /* @__PURE__ */ U("button", {
374
374
  type: "button",
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"
375
+ onClick: () => void We(),
376
+ disabled: !it || we,
377
+ title: rt ? void 0 : [
378
+ !G.description?.trim() && "Add full description",
379
+ !G.category && "Select a category",
380
+ !G.iconUrl && "Upload an app icon",
381
+ (G.visibility === "PRIVATE" || G.visibility === "INTERNAL") && "Set visibility to Public (marketplace) or Unlisted (link sharing) — Private and Internal cannot be submitted for review",
382
+ K && J === 0 && "Upload at least one version",
383
+ !Z && "Set pricing (choose Free or Paid in the Pricing tab)",
384
+ Y && !X && "Link a billing account to receive payments"
385
385
  ].filter(Boolean).join(" · "),
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, {
386
+ className: t("inline-flex items-center gap-2 rounded-md px-5 py-2 text-sm font-medium whitespace-nowrap transition-colors", it && !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__ */ W(H, { children: [/* @__PURE__ */ U(R, {
388
388
  size: 15,
389
389
  className: "animate-spin"
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, {
390
+ }), m("devportal.submitting", "Submitting…")] }) : /* @__PURE__ */ W(H, { children: [/* @__PURE__ */ U(Me, { size: 15 }), m("devportal.submitForReview", "Submit for Review")] })
391
+ }) : null, /* @__PURE__ */ U(Be, {
392
392
  primary: {
393
- label: h("devportal.editApp", "Edit App"),
394
- icon: /* @__PURE__ */ W(be, { size: 16 }),
395
- disabled: !_,
396
- onSelect: () => H(`/apps/${K.id}/edit`)
393
+ label: m("devportal.editApp", "Edit App"),
394
+ icon: /* @__PURE__ */ U(be, { size: 16 }),
395
+ disabled: !g,
396
+ onSelect: () => V(`/apps/${G.id}/edit`)
397
397
  },
398
- actions: it
398
+ actions: at
399
399
  })]
400
400
  }),
401
401
  children: [
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)
402
+ ie && /* @__PURE__ */ U(ee, {
403
+ title: m("devportal.newAppSecretGenerated", "New App Secret Generated"),
404
+ secret: ie,
405
+ description: m("devportal.appSecretRotatedDescription", "Your app secret has been rotated. The old secret is no longer valid."),
406
+ onDismiss: () => se(null)
407
407
  }),
408
- /* @__PURE__ */ G("div", {
408
+ /* @__PURE__ */ W("div", {
409
409
  className: "flex flex-wrap items-center gap-2",
410
410
  children: [
411
- /* @__PURE__ */ W(T, {
412
- status: K.status,
411
+ /* @__PURE__ */ U(T, {
412
+ status: G.status,
413
413
  type: "app"
414
414
  }),
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,
415
+ /* @__PURE__ */ U("span", {
416
+ title: G.visibility === "PUBLIC" ? "Public — discoverable in the marketplace. Requires review approval before going live." : G.visibility === "UNLISTED" ? "Unlisted — not in the store, but accessible via a direct share link. You can still submit for marketplace review." : G.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__ */ U(T, {
418
+ status: G.visibility,
419
419
  type: "app"
420
420
  })
421
421
  }),
422
- K.isVerified && /* @__PURE__ */ W(E, { verified: !0 }),
423
- K.isFeatured && /* @__PURE__ */ W(ee, {}),
424
- /* @__PURE__ */ W("span", {
422
+ G.isVerified && /* @__PURE__ */ U(E, { verified: !0 }),
423
+ G.isFeatured && /* @__PURE__ */ U(w, {}),
424
+ /* @__PURE__ */ U("span", {
425
425
  className: "text-sm text-text-secondary",
426
- children: w[K.appType] || K.appType
426
+ children: C[G.appType] || G.appType
427
427
  })
428
428
  ]
429
429
  }),
430
- K.status === "SUBMITTED" && /* @__PURE__ */ G("div", {
430
+ G.status === "SUBMITTED" && /* @__PURE__ */ W("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__ */ W(ve, {
432
+ children: [/* @__PURE__ */ U(ve, {
433
433
  size: 18,
434
434
  className: "text-status-warning-text mt-0.5 flex-shrink-0"
435
- }), /* @__PURE__ */ G("div", {
435
+ }), /* @__PURE__ */ W("div", {
436
436
  className: "text-sm",
437
- children: [/* @__PURE__ */ W("p", {
437
+ children: [/* @__PURE__ */ U("p", {
438
438
  className: "font-medium text-status-warning-text",
439
- children: h("devportal.underReview", "Under Review")
440
- }), /* @__PURE__ */ G("p", {
439
+ children: m("devportal.underReview", "Under Review")
440
+ }), /* @__PURE__ */ W("p", {
441
441
  className: "mt-0.5 text-text-secondary",
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", {
442
+ children: [m("devportal.underReviewDesc", "Your submission is being reviewed by our team. You'll be notified of the outcome."), G.submittedAt && /* @__PURE__ */ W("span", {
443
443
  className: "ml-1",
444
444
  children: [
445
445
  "Submitted ",
446
- new Date(K.submittedAt).toLocaleDateString(),
446
+ new Date(G.submittedAt).toLocaleDateString(),
447
447
  "."
448
448
  ]
449
449
  })]
450
450
  })]
451
451
  })]
452
452
  }),
453
- K.status === "REJECTED" && /* @__PURE__ */ G("div", {
453
+ G.status === "REJECTED" && /* @__PURE__ */ W("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__ */ W(Re, {
455
+ children: [/* @__PURE__ */ U(Re, {
456
456
  size: 18,
457
457
  className: "text-status-error-text mt-0.5 flex-shrink-0"
458
- }), /* @__PURE__ */ G("div", {
458
+ }), /* @__PURE__ */ W("div", {
459
459
  className: "text-sm",
460
460
  children: [
461
- /* @__PURE__ */ W("p", {
461
+ /* @__PURE__ */ U("p", {
462
462
  className: "font-medium text-status-error-text",
463
- children: h("devportal.reviewRejected", "Review Rejected")
463
+ children: m("devportal.reviewRejected", "Review Rejected")
464
464
  }),
465
- /* @__PURE__ */ W("p", {
465
+ /* @__PURE__ */ U("p", {
466
466
  className: "mt-0.5 text-text-secondary",
467
- children: K.reviewNotes || h("devportal.reviewRejectedDesc", "Your submission was not approved. Please review the feedback, update your app, and re-submit.")
467
+ children: G.reviewNotes || m("devportal.reviewRejectedDesc", "Your submission was not approved. Please review the feedback, update your app, and re-submit.")
468
468
  }),
469
- /* @__PURE__ */ W("button", {
469
+ /* @__PURE__ */ U("button", {
470
470
  type: "button",
471
- onClick: () => H(`/apps/${K.id}/edit`),
471
+ onClick: () => V(`/apps/${G.id}/edit`),
472
472
  className: "mt-2 inline-flex items-center gap-1 text-xs font-medium text-primary underline",
473
- children: h("devportal.editAndResubmit", "Edit app and re-submit →")
473
+ children: m("devportal.editAndResubmit", "Edit app and re-submit →")
474
474
  })
475
475
  ]
476
476
  })]
477
477
  }),
478
- K.status === "PUBLISHED" && /* @__PURE__ */ G("div", {
478
+ G.status === "PUBLISHED" && /* @__PURE__ */ W("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__ */ W(ge, {
480
+ children: [/* @__PURE__ */ U(ge, {
481
481
  size: 18,
482
482
  className: "text-status-success-text mt-0.5 flex-shrink-0"
483
- }), /* @__PURE__ */ G("div", {
483
+ }), /* @__PURE__ */ W("div", {
484
484
  className: "text-sm",
485
- children: [/* @__PURE__ */ W("p", {
485
+ children: [/* @__PURE__ */ U("p", {
486
486
  className: "font-medium text-status-success-text",
487
- children: h("devportal.liveInStore", "Live in the Store")
488
- }), /* @__PURE__ */ W("p", {
487
+ children: m("devportal.liveInStore", "Live in the Store")
488
+ }), /* @__PURE__ */ U("p", {
489
489
  className: "mt-0.5 text-text-secondary",
490
- children: h("devportal.liveInStoreDesc", "Your app is published and visible to users in the marketplace.")
490
+ children: m("devportal.liveInStoreDesc", "Your app is published and visible to users in the marketplace.")
491
491
  })]
492
492
  })]
493
493
  }),
494
- K.status === "UNLISTED" && /* @__PURE__ */ G("div", {
494
+ G.status === "UNLISTED" && /* @__PURE__ */ W("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__ */ W(F, {
496
+ children: [/* @__PURE__ */ U(pe, {
497
497
  size: 18,
498
498
  className: "text-status-warning-text mt-0.5 flex-shrink-0"
499
- }), /* @__PURE__ */ G("div", {
499
+ }), /* @__PURE__ */ W("div", {
500
500
  className: "text-sm",
501
501
  children: [
502
- /* @__PURE__ */ W("p", {
502
+ /* @__PURE__ */ U("p", {
503
503
  className: "font-medium text-status-warning-text",
504
- children: h("devportal.delistedFromStore", "Delisted from the Store")
504
+ children: m("devportal.delistedFromStore", "Delisted from the Store")
505
505
  }),
506
- /* @__PURE__ */ W("p", {
506
+ /* @__PURE__ */ U("p", {
507
507
  className: "mt-0.5 text-text-secondary",
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.")
508
+ children: m("devportal.delistedFromStoreDesc", "Your app has been removed from the marketplace and is no longer visible to new users. Existing installs continue to work.")
509
509
  }),
510
- K.reviewNotes && /* @__PURE__ */ G("p", {
510
+ G.reviewNotes && /* @__PURE__ */ W("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
- h("devportal.delistReason", "Reason"),
513
+ m("devportal.delistReason", "Reason"),
514
514
  ": ",
515
- K.reviewNotes
515
+ G.reviewNotes
516
516
  ]
517
517
  })
518
518
  ]
519
519
  })]
520
520
  }),
521
- (K.status === "DRAFT" || K.status === "REJECTED") && !nt && (() => {
522
- let e = !!K.description?.trim() && !!K.category && !!K.iconUrl && (K.visibility === "PUBLIC" || K.visibility === "UNLISTED"), t = !q && !J || Y > 0, r = [
523
- !K.description?.trim() && "Add a full description",
524
- !K.category && "Select a category",
525
- !K.iconUrl && "Upload an app icon",
526
- (K.visibility === "PRIVATE" || K.visibility === "INTERNAL") && "Set to Public (marketplace) or Unlisted (share via link) — Private and Internal block review submission"
521
+ (G.status === "DRAFT" || G.status === "REJECTED") && !rt && (() => {
522
+ let e = !!G.description?.trim() && !!G.category && !!G.iconUrl && (G.visibility === "PUBLIC" || G.visibility === "UNLISTED"), n = !K && !q || J > 0, r = [
523
+ !G.description?.trim() && "Add a full description",
524
+ !G.category && "Select a category",
525
+ !G.iconUrl && "Upload an app icon",
526
+ (G.visibility === "PRIVATE" || G.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: h("devportal.setupStoreListingStep", "Complete Store Listing"),
531
- hint: e ? h("devportal.done", "Done") : r.join(" · "),
530
+ label: m("devportal.setupStoreListingStep", "Complete Store Listing"),
531
+ hint: e ? m("devportal.done", "Done") : r.join(" · "),
532
532
  done: e,
533
533
  onClick: () => D("store-listing")
534
534
  },
535
- ...q ? [{
535
+ ...K ? [{
536
536
  id: "version",
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,
537
+ label: m("devportal.setupVersionStep", "Upload a Version"),
538
+ hint: n ? m("devportal.done", "Done") : G.appType === "NODE" ? m("devportal.uploadVersionHint", "Upload your ZIP bundle and manifest") : m("devportal.uploadManifestVersionHint", "Upload your manifest JSON"),
539
+ done: n,
540
540
  onClick: () => D("versions")
541
541
  }] : [],
542
- ...J ? [{
542
+ ...q ? [{
543
543
  id: "version",
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,
544
+ label: m("devportal.setupIntegrationVersionStep", "Publish a Version"),
545
+ hint: n ? m("devportal.done", "Done") : m("devportal.integrationVersionHint", "Define required scopes and publish your first API version"),
546
+ done: n,
547
547
  onClick: () => D("versions")
548
548
  }, {
549
549
  id: "webhooks",
550
- label: h("devportal.setupWebhooksStep", "Configure Webhooks"),
551
- hint: h("devportal.webhooksOptionalHint", "Set up endpoints to receive platform events (optional)"),
550
+ label: m("devportal.setupWebhooksStep", "Configure Webhooks"),
551
+ hint: m("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: 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,
557
+ label: m("devportal.setupPricingStep", "Set Pricing"),
558
+ hint: Z ? m("devportal.done", "Done") : m("devportal.pricingHint", "Choose Free or set a credit price in the Pricing tab"),
559
+ done: Z,
560
560
  onClick: () => D("pricing")
561
561
  },
562
- ...X ? [{
562
+ ...Y ? [{
563
563
  id: "billing",
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,
564
+ label: m("devportal.setupBillingStep", "Link Billing Account"),
565
+ hint: X ? m("devportal.done", "Done") : m("devportal.billingAccountHint", "Link a billing account to receive payouts — required for paid apps"),
566
+ done: X,
567
567
  onClick: () => D("pricing")
568
568
  }] : [],
569
569
  {
570
570
  id: "submit",
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"),
571
+ label: m("devportal.submitForReview", "Submit for Review"),
572
+ hint: rt ? m("devportal.readyToSubmit", "Ready — click Submit for Review above") : G.description?.trim() ? G.category ? G.iconUrl ? G.visibility === "PRIVATE" || G.visibility === "INTERNAL" ? m("devportal.hintPrivateVisibility", "Set visibility to Public (marketplace) or Unlisted (share via link) — Private and Internal cannot be submitted") : (K || q) && J === 0 ? m("devportal.hintMissingVersion", "Upload at least one version") : Z ? Y && !X ? m("devportal.hintMissingBilling", "Link a billing account in the Pricing tab to receive payouts") : m("devportal.completeStepsFirst", "Complete the steps above first") : m("devportal.hintMissingPricing", "Choose Free or set a credit price in the Pricing tab") : m("devportal.hintMissingIcon", "Upload an app icon on the Store Listing tab") : m("devportal.hintMissingCategory", "Select a category on the Store Listing tab") : m("devportal.hintMissingDescription", "Add a full description on the Store Listing tab"),
573
573
  done: !1,
574
574
  onClick: void 0
575
575
  }
576
576
  ], a = i.filter((e) => e.done).length;
577
- return /* @__PURE__ */ G("div", {
577
+ return /* @__PURE__ */ W("div", {
578
578
  className: "rounded-xl border border-border-subtle bg-bg-surface shadow-sm",
579
- children: [/* @__PURE__ */ W("div", {
579
+ children: [/* @__PURE__ */ U("div", {
580
580
  className: "flex items-center justify-between border-b border-border-subtle px-5 py-4",
581
- children: /* @__PURE__ */ G("div", {
581
+ children: /* @__PURE__ */ W("div", {
582
582
  className: "flex items-center gap-3",
583
- children: [/* @__PURE__ */ W("div", {
583
+ children: [/* @__PURE__ */ U("div", {
584
584
  className: "flex h-8 w-8 items-center justify-center rounded-full bg-action-primary-bg/10",
585
- children: /* @__PURE__ */ W(Ne, {
585
+ children: /* @__PURE__ */ U(Ne, {
586
586
  size: 16,
587
587
  className: "text-primary"
588
588
  })
589
- }), /* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("p", {
589
+ }), /* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("p", {
590
590
  className: "text-sm font-semibold text-text-primary",
591
- children: h("devportal.completeSetup", "Complete your app setup")
592
- }), /* @__PURE__ */ G("p", {
591
+ children: m("devportal.completeSetup", "Complete your app setup")
592
+ }), /* @__PURE__ */ W("p", {
593
593
  className: "text-xs text-text-secondary",
594
594
  children: [
595
595
  a,
@@ -597,33 +597,33 @@ var We = [
597
597
  " ",
598
598
  i.filter((e) => e.id !== "submit").length,
599
599
  " ",
600
- h("devportal.stepsDone", "steps complete")
600
+ m("devportal.stepsDone", "steps complete")
601
601
  ]
602
602
  })] })]
603
603
  })
604
- }), /* @__PURE__ */ W("div", {
604
+ }), /* @__PURE__ */ U("div", {
605
605
  className: "divide-y divide-border-subtle",
606
- children: i.map((e, t) => /* @__PURE__ */ G("button", {
606
+ children: i.map((e, n) => /* @__PURE__ */ W("button", {
607
607
  type: "button",
608
608
  onClick: e.onClick,
609
609
  disabled: !e.onClick,
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"),
610
+ className: t("w-full flex items-center gap-4 px-5 py-4 text-left transition-colors", e.onClick ? "hover:bg-bg-sunken/40 cursor-pointer" : "cursor-default opacity-60"),
611
611
  children: [
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
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
615
  }),
616
- /* @__PURE__ */ G("div", {
616
+ /* @__PURE__ */ W("div", {
617
617
  className: "flex-1 min-w-0",
618
- children: [/* @__PURE__ */ W("p", {
619
- className: n("text-sm font-medium", e.done ? "text-text-secondary line-through" : "text-text-primary"),
618
+ children: [/* @__PURE__ */ U("p", {
619
+ className: t("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__ */ W("p", {
621
+ }), e.hint && !e.done && /* @__PURE__ */ U("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__ */ W(_e, {
626
+ e.onClick && !e.done && /* @__PURE__ */ U(_e, {
627
627
  size: 16,
628
628
  className: "flex-shrink-0 text-text-secondary"
629
629
  })
@@ -632,179 +632,179 @@ var We = [
632
632
  })]
633
633
  });
634
634
  })(),
635
- /* @__PURE__ */ W("div", {
635
+ /* @__PURE__ */ U("div", {
636
636
  className: "border-b",
637
- children: /* @__PURE__ */ W("nav", {
637
+ children: /* @__PURE__ */ U("nav", {
638
638
  className: "-mb-px flex gap-4 overflow-x-auto",
639
639
  role: "tablist",
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", {
640
+ "aria-label": m("devportal.applicationSections", "Application sections"),
641
+ children: Ge.filter((e) => !(K && (e.id === "permissions" || e.id === "webhooks" || e.id === "delegations" || e.id === "playground" || e.id === "oauth" || e.id === "api-keys") || !K && !q && e.id === "versions" || !q && (e.id === "oauth" || e.id === "api-keys"))).map((e) => {
642
+ let n = e.icon;
643
+ return /* @__PURE__ */ W("button", {
644
644
  id: `application-tab-${e.id}`,
645
645
  role: "tab",
646
- "aria-selected": C === e.id,
646
+ "aria-selected": S === e.id,
647
647
  "aria-controls": `application-panel-${e.id}`,
648
648
  onClick: () => D(e.id),
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]
649
+ className: t("flex items-center gap-2 border-b-2 px-1 py-3 text-sm font-medium transition-colors", S === e.id ? "border-primary text-primary" : "border-transparent text-text-secondary hover:text-text-primary hover:border-muted-foreground"),
650
+ children: [/* @__PURE__ */ U(n, { size: 16 }), e.label]
651
651
  }, e.id);
652
652
  })
653
653
  })
654
654
  }),
655
- /* @__PURE__ */ G("div", {
655
+ /* @__PURE__ */ W("div", {
656
656
  className: "mt-6",
657
- id: `application-panel-${C}`,
657
+ id: `application-panel-${S}`,
658
658
  role: "tabpanel",
659
- "aria-labelledby": `application-tab-${C}`,
659
+ "aria-labelledby": `application-tab-${S}`,
660
660
  tabIndex: 0,
661
661
  children: [
662
- C === "overview" && /* @__PURE__ */ W(tt, {
663
- app: K,
664
- appId: x,
662
+ S === "overview" && /* @__PURE__ */ U(nt, {
663
+ app: G,
664
+ appId: b,
665
665
  refetch: () => void he()
666
666
  }),
667
- C === "permissions" && /* @__PURE__ */ W(xt, {
668
- app: K,
667
+ S === "permissions" && /* @__PURE__ */ U(xt, {
668
+ app: G,
669
669
  versionScopes: j?.application?.versions?.edges?.[0]?.node?.requiredScopes ?? [],
670
- locked: K.status === "PUBLISHED" || K.status === "APPROVED" || K.status === "ACTIVE",
670
+ locked: G.status === "PUBLISHED" || G.status === "APPROVED" || G.status === "ACTIVE",
671
671
  onNavigateToVersions: () => D("versions")
672
672
  }),
673
- C === "webhooks" && /* @__PURE__ */ W(Qe, {
674
- appId: K.id,
675
- onNavigate: H
673
+ S === "webhooks" && /* @__PURE__ */ U($e, {
674
+ appId: G.id,
675
+ onNavigate: V
676
676
  }),
677
- C === "delegations" && /* @__PURE__ */ W($e, {
678
- authAppId: K.appId || void 0,
679
- appName: K.name,
680
- onGrantDelegation: () => fe(!0),
681
- onNavigate: H
677
+ S === "delegations" && /* @__PURE__ */ U(et, {
678
+ authAppId: G.appId || void 0,
679
+ appName: G.name,
680
+ onGrantDelegation: () => de(!0),
681
+ onNavigate: V
682
682
  }),
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
683
+ S === "analytics" && /* @__PURE__ */ U(tt, { appId: G.id }),
684
+ S === "playground" && /* @__PURE__ */ U(ot, { app: G }),
685
+ S === "oauth" && /* @__PURE__ */ U(qe, {
686
+ appId: G.id,
687
+ onNavigate: V
688
688
  }),
689
- C === "api-keys" && /* @__PURE__ */ W(qe, {
690
- appId: K.id,
691
- onNavigate: H
689
+ S === "api-keys" && /* @__PURE__ */ U(Je, {
690
+ appId: G.id,
691
+ onNavigate: V
692
692
  }),
693
- C === "store-listing" && /* @__PURE__ */ W(pt, {
694
- app: K,
693
+ S === "store-listing" && /* @__PURE__ */ U(mt, {
694
+ app: G,
695
695
  versionCount: j?.application?.versions?.totalCount ?? 0,
696
- isPackageApp: q,
697
- pricingDone: Q,
698
- onNavigateToVersions: q || J ? () => D("versions") : void 0,
696
+ isPackageApp: K,
697
+ pricingDone: Z,
698
+ onNavigateToVersions: K || q ? () => D("versions") : void 0,
699
699
  onNavigateToPricing: () => D("pricing"),
700
- onNavigateToSubmission: () => H(`/apps/${K.id}/store-submission`)
700
+ onNavigateToSubmission: () => V(`/apps/${G.id}/store-submission`)
701
701
  }),
702
- C === "pricing" && /* @__PURE__ */ W(Xe, {
703
- app: K,
704
- platformFeeRate: Je,
705
- billingAccountLinked: Z,
706
- onNavigateToRevenue: () => H("/revenue"),
707
- isReadyToSubmit: nt
702
+ S === "pricing" && /* @__PURE__ */ U(Ze, {
703
+ app: G,
704
+ platformFeeRate: Ye,
705
+ billingAccountLinked: X,
706
+ onNavigateToRevenue: () => V("/revenue"),
707
+ isReadyToSubmit: rt
708
708
  }),
709
- C === "versions" && /* @__PURE__ */ W(Ze, {
710
- appId: K.id,
711
- onNavigate: H,
712
- pricingDone: Q,
709
+ S === "versions" && /* @__PURE__ */ U(Qe, {
710
+ appId: G.id,
711
+ onNavigate: V,
712
+ pricingDone: Z,
713
713
  onNavigateToPricing: () => D("pricing")
714
714
  })
715
715
  ]
716
716
  }),
717
- /* @__PURE__ */ W(oe, {
718
- open: ne,
719
- onOpenChange: re,
717
+ /* @__PURE__ */ U(ae, {
718
+ open: te,
719
+ onOpenChange: ne,
720
720
  onConfirm: Ie,
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"),
721
+ title: m("devportal.rotateAppSecret", "Rotate App Secret"),
722
+ description: m("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: m("devportal.rotateSecret", "Rotate Secret"),
724
+ cancelLabel: m("devportal.cancel", "Cancel"),
725
725
  variant: "warning",
726
726
  loading: ye
727
727
  }),
728
- /* @__PURE__ */ W(oe, {
728
+ /* @__PURE__ */ U(ae, {
729
729
  open: k,
730
- onOpenChange: ie,
730
+ onOpenChange: re,
731
731
  onConfirm: Le,
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"),
732
+ title: m("devportal.deactivateApplication", "Deactivate Application"),
733
+ description: m("devportal.deactivateApplicationDescription", "This will deactivate the application. All OAuth clients, API keys, and webhooks associated with this app will stop functioning. This action can be reversed by reactivating the app."),
734
+ confirmLabel: m("devportal.deactivate", "Deactivate"),
735
+ cancelLabel: m("devportal.cancel", "Cancel"),
736
736
  variant: "destructive",
737
737
  loading: Se
738
738
  }),
739
- /* @__PURE__ */ W(se, {
740
- open: de,
741
- onOpenChange: fe,
742
- appId: K.appId || "",
743
- appName: K.name,
744
- appScopes: K.scopes?.map((e) => e.scope) ?? [],
739
+ /* @__PURE__ */ U(oe, {
740
+ open: ue,
741
+ onOpenChange: de,
742
+ appId: G.appId || "",
743
+ appName: G.name,
744
+ appScopes: G.scopes?.map((e) => e.scope) ?? [],
745
745
  onSuccess: () => {
746
- fe(!1);
746
+ de(!1);
747
747
  }
748
748
  })
749
749
  ]
750
750
  });
751
- }, Ke = ({ onNavigate: e }) => {
751
+ }, qe = ({ 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__ */ G("div", {
756
+ return /* @__PURE__ */ W("div", {
757
757
  className: "space-y-4 py-4 text-center",
758
758
  children: [
759
- /* @__PURE__ */ W(Me, { className: "mx-auto h-10 w-10 text-text-secondary" }),
760
- /* @__PURE__ */ W("h3", {
759
+ /* @__PURE__ */ U(z, { className: "mx-auto h-10 w-10 text-text-secondary" }),
760
+ /* @__PURE__ */ U("h3", {
761
761
  className: "font-medium",
762
762
  children: n("devportal.oauthApps", "OAuth Apps")
763
763
  }),
764
- /* @__PURE__ */ W("p", {
764
+ /* @__PURE__ */ U("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__ */ G("button", {
768
+ /* @__PURE__ */ W("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__ */ W(R, { size: 16 }), n("devportal.manageOAuthApps", "Manage OAuth Apps")]
771
+ children: [/* @__PURE__ */ U(L, { size: 16 }), n("devportal.manageOAuthApps", "Manage OAuth Apps")]
772
772
  })
773
773
  ]
774
774
  });
775
- }, qe = ({ onNavigate: e }) => {
775
+ }, Je = ({ 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__ */ G("div", {
780
+ return /* @__PURE__ */ W("div", {
781
781
  className: "space-y-4 py-4 text-center",
782
782
  children: [
783
- /* @__PURE__ */ W(we, { className: "mx-auto h-10 w-10 text-text-secondary" }),
784
- /* @__PURE__ */ W("h3", {
783
+ /* @__PURE__ */ U(we, { className: "mx-auto h-10 w-10 text-text-secondary" }),
784
+ /* @__PURE__ */ U("h3", {
785
785
  className: "font-medium",
786
786
  children: n("devportal.apiKeys", "API Keys")
787
787
  }),
788
- /* @__PURE__ */ W("p", {
788
+ /* @__PURE__ */ U("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__ */ G("button", {
792
+ /* @__PURE__ */ W("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__ */ W(R, { size: 16 }), n("devportal.manageApiKeys", "Manage API Keys")]
795
+ children: [/* @__PURE__ */ U(L, { size: 16 }), n("devportal.manageApiKeys", "Manage API Keys")]
796
796
  })
797
797
  ]
798
798
  });
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 }) => {
799
+ }, Ye = .01, X = (e) => e * Ye, Xe = (e) => Math.round(e / Ye), Ze = ({ app: e, platformFeeRate: n, 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] = x(), m = M(e);
807
- m.current = e, fe(() => {
806
+ }), [d, f] = N(!1), [p] = b(), m = M(e);
807
+ m.current = e, de(() => {
808
808
  let e = m.current.pricingDetails ?? {};
809
809
  u({
810
810
  pricingType: m.current.pricingType ?? "FREE",
@@ -836,33 +836,33 @@ var We = [
836
836
  } finally {
837
837
  f(!1);
838
838
  }
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", {
839
+ }, _ = l.pricingType !== "FREE", v = parseInt(l.price, 10), y = _ && !isNaN(v) && v > 0, x = y ? X(v) : 0, S = y ? Math.round(v * n) : 0, C = X(S), w = y ? v - S : 0, T = X(w), E = (e) => "$" + e.toLocaleString("en-US", {
840
840
  minimumFractionDigits: 2,
841
841
  maximumFractionDigits: 2
842
- }), E = (e) => e.toLocaleString("en-US") + " cr";
843
- return /* @__PURE__ */ G("div", {
842
+ }), D = (e) => e.toLocaleString("en-US") + " cr";
843
+ return /* @__PURE__ */ W("div", {
844
844
  className: "space-y-8",
845
845
  children: [
846
- /* @__PURE__ */ G("div", {
846
+ /* @__PURE__ */ W("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__ */ W(L, {
848
+ children: [/* @__PURE__ */ U(I, {
849
849
  size: 16,
850
850
  className: "mt-0.5 shrink-0 text-primary"
851
- }), /* @__PURE__ */ G("p", {
851
+ }), /* @__PURE__ */ W("p", {
852
852
  className: "text-sm text-text-secondary",
853
853
  children: [
854
- /* @__PURE__ */ W("span", {
854
+ /* @__PURE__ */ U("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__ */ G("span", {
861
+ /* @__PURE__ */ W("span", {
862
862
  className: "font-medium",
863
863
  children: [
864
864
  "1 credit = ",
865
- T(Je),
865
+ E(Ye),
866
866
  " USD."
867
867
  ]
868
868
  }),
@@ -871,71 +871,71 @@ var We = [
871
871
  ]
872
872
  })]
873
873
  }),
874
- /* @__PURE__ */ G("div", {
874
+ /* @__PURE__ */ W("div", {
875
875
  className: "space-y-3",
876
- children: [/* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("h2", {
876
+ children: [/* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("h2", {
877
877
  className: "text-lg font-semibold",
878
878
  children: s("devportal.howMonetizationWorks", "How App Monetization Works")
879
- }), /* @__PURE__ */ W("p", {
879
+ }), /* @__PURE__ */ U("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__ */ G("div", {
882
+ })] }), /* @__PURE__ */ W("div", {
883
883
  className: "grid gap-4 sm:grid-cols-3",
884
884
  children: [
885
- /* @__PURE__ */ G("div", {
885
+ /* @__PURE__ */ W("div", {
886
886
  className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
887
- children: [/* @__PURE__ */ W("div", {
887
+ children: [/* @__PURE__ */ U("div", {
888
888
  className: "flex h-9 w-9 items-center justify-center rounded-lg bg-status-success-bg-subtle",
889
- children: /* @__PURE__ */ W(Pe, {
889
+ children: /* @__PURE__ */ U(Pe, {
890
890
  size: 18,
891
891
  className: "text-status-success-text"
892
892
  })
893
- }), /* @__PURE__ */ G("div", { children: [/* @__PURE__ */ G("p", {
893
+ }), /* @__PURE__ */ W("div", { children: [/* @__PURE__ */ W("p", {
894
894
  className: "font-semibold",
895
- children: [(100 - t * 100).toFixed(0), "% revenue share"]
896
- }), /* @__PURE__ */ G("p", {
895
+ children: [(100 - n * 100).toFixed(0), "% revenue share"]
896
+ }), /* @__PURE__ */ W("p", {
897
897
  className: "mt-1 text-sm text-text-secondary",
898
898
  children: [
899
899
  "You keep",
900
900
  " ",
901
- /* @__PURE__ */ G("span", {
901
+ /* @__PURE__ */ W("span", {
902
902
  className: "font-medium text-status-success-text",
903
- children: [(100 - t * 100).toFixed(0), "%"]
903
+ children: [(100 - n * 100).toFixed(0), "%"]
904
904
  }),
905
905
  " ",
906
906
  "of every sale in credits. The platform retains a",
907
907
  " ",
908
- /* @__PURE__ */ G("span", {
908
+ /* @__PURE__ */ W("span", {
909
909
  className: "font-medium",
910
- children: [(t * 100).toFixed(0), "%"]
910
+ children: [(n * 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__ */ G("div", {
917
+ /* @__PURE__ */ W("div", {
918
918
  className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
919
- children: [/* @__PURE__ */ W("div", {
919
+ children: [/* @__PURE__ */ U("div", {
920
920
  className: "flex h-9 w-9 items-center justify-center rounded-lg bg-action-primary-bg/10",
921
- children: /* @__PURE__ */ W(H, {
921
+ children: /* @__PURE__ */ U(V, {
922
922
  size: 18,
923
923
  className: "text-primary"
924
924
  })
925
- }), /* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("p", {
925
+ }), /* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("p", {
926
926
  className: "font-semibold",
927
927
  children: "Credits → cash via billing"
928
- }), /* @__PURE__ */ G("p", {
928
+ }), /* @__PURE__ */ W("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__ */ W("button", {
933
+ i ? /* @__PURE__ */ U("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__ */ W("span", {
938
+ }) : /* @__PURE__ */ U("span", {
939
939
  className: "font-medium text-primary",
940
940
  children: "Revenue page"
941
941
  }),
@@ -943,18 +943,18 @@ var We = [
943
943
  ]
944
944
  })] })]
945
945
  }),
946
- /* @__PURE__ */ G("div", {
946
+ /* @__PURE__ */ W("div", {
947
947
  className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
948
- children: [/* @__PURE__ */ W("div", {
948
+ children: [/* @__PURE__ */ U("div", {
949
949
  className: "flex h-9 w-9 items-center justify-center rounded-lg bg-status-warning-bg-subtle",
950
- children: /* @__PURE__ */ W(Se, {
950
+ children: /* @__PURE__ */ U(Se, {
951
951
  size: 18,
952
952
  className: "text-status-warning-text"
953
953
  })
954
- }), /* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("p", {
954
+ }), /* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("p", {
955
955
  className: "font-semibold",
956
956
  children: "Reach the full marketplace"
957
- }), /* @__PURE__ */ W("p", {
957
+ }), /* @__PURE__ */ U("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 We = [
962
962
  ]
963
963
  })]
964
964
  }),
965
- /* @__PURE__ */ G("div", {
965
+ /* @__PURE__ */ W("div", {
966
966
  className: "space-y-4",
967
967
  children: [
968
- /* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("h3", {
968
+ /* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("h3", {
969
969
  className: "text-base font-semibold",
970
970
  children: s("devportal.setPricingTitle", "Set Your Price")
971
- }), /* @__PURE__ */ G("p", {
971
+ }), /* @__PURE__ */ W("p", {
972
972
  className: "mt-0.5 text-sm text-text-secondary",
973
973
  children: [
974
974
  "Choose ",
975
- /* @__PURE__ */ W("strong", { children: "Free" }),
975
+ /* @__PURE__ */ U("strong", { children: "Free" }),
976
976
  " to maximise installs, or",
977
977
  " ",
978
- /* @__PURE__ */ W("strong", { children: "Paid" }),
978
+ /* @__PURE__ */ U("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__ */ W("div", {
982
+ /* @__PURE__ */ U("div", {
983
983
  className: "flex flex-wrap gap-2",
984
- children: lt.map((e) => /* @__PURE__ */ W("button", {
984
+ children: ut.map((e) => /* @__PURE__ */ U("button", {
985
985
  type: "button",
986
986
  onClick: () => h("pricingType", e.value),
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"),
987
+ className: t("rounded-md border px-4 py-2 text-sm font-medium transition-colors", l.pricingType === e.value ? "bg-action-primary-bg text-action-primary-text border-primary" : "hover:bg-bg-sunken border-border-subtle"),
988
988
  children: e.label
989
989
  }, e.value))
990
990
  }),
991
- _ && /* @__PURE__ */ G("div", {
991
+ _ && /* @__PURE__ */ W("div", {
992
992
  className: "space-y-4",
993
993
  children: [
994
- /* @__PURE__ */ G("div", {
994
+ /* @__PURE__ */ W("div", {
995
995
  className: "max-w-xs",
996
996
  children: [
997
- /* @__PURE__ */ G("label", {
997
+ /* @__PURE__ */ W("label", {
998
998
  className: "mb-1.5 block text-sm font-medium",
999
999
  children: [
1000
1000
  "Listing price",
1001
1001
  " ",
1002
- /* @__PURE__ */ W("span", {
1002
+ /* @__PURE__ */ U("span", {
1003
1003
  className: "text-text-tertiary font-normal",
1004
1004
  children: "(credits)"
1005
1005
  })
1006
1006
  ]
1007
1007
  }),
1008
- /* @__PURE__ */ G("div", {
1008
+ /* @__PURE__ */ W("div", {
1009
1009
  className: "relative flex items-center",
1010
- children: [/* @__PURE__ */ W("input", {
1010
+ children: [/* @__PURE__ */ U("input", {
1011
1011
  type: "number",
1012
1012
  min: 1,
1013
1013
  step: 1,
@@ -1015,148 +1015,148 @@ var We = [
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__ */ W("span", {
1018
+ }), /* @__PURE__ */ U("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__ */ G("p", {
1023
+ y && /* @__PURE__ */ W("p", {
1024
1024
  className: "mt-1.5 text-xs text-text-secondary",
1025
1025
  children: [
1026
1026
  "≈ ",
1027
- T(b),
1027
+ E(x),
1028
1028
  " USD at the current credit rate (1 cr =",
1029
1029
  " ",
1030
- T(Je),
1030
+ E(Ye),
1031
1031
  ")"
1032
1032
  ]
1033
1033
  }),
1034
- /* @__PURE__ */ W("p", {
1034
+ /* @__PURE__ */ U("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__ */ G("div", {
1040
+ /* @__PURE__ */ W("div", {
1041
1041
  className: "flex items-center gap-2 text-xs text-text-secondary",
1042
- children: [/* @__PURE__ */ W("span", { children: "Quick convert:" }), [
1042
+ children: [/* @__PURE__ */ U("span", { children: "Quick convert:" }), [
1043
1043
  5,
1044
1044
  10,
1045
1045
  25,
1046
1046
  50
1047
- ].map((e) => /* @__PURE__ */ G("button", {
1047
+ ].map((e) => /* @__PURE__ */ W("button", {
1048
1048
  type: "button",
1049
- onClick: () => h("price", String(Ye(e))),
1049
+ onClick: () => h("price", String(Xe(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
- Ye(e).toLocaleString(),
1055
+ Xe(e).toLocaleString(),
1056
1056
  " cr"
1057
1057
  ]
1058
1058
  }, e))]
1059
1059
  }),
1060
- y && /* @__PURE__ */ G("div", {
1060
+ y && /* @__PURE__ */ W("div", {
1061
1061
  className: "rounded-lg border border-border-subtle bg-bg-sunken p-4 space-y-3",
1062
1062
  children: [
1063
- /* @__PURE__ */ W("p", {
1063
+ /* @__PURE__ */ U("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__ */ G("div", {
1067
+ /* @__PURE__ */ W("div", {
1068
1068
  className: "space-y-2 text-sm",
1069
1069
  children: [
1070
- /* @__PURE__ */ G("div", {
1070
+ /* @__PURE__ */ W("div", {
1071
1071
  className: "flex items-center justify-between",
1072
- children: [/* @__PURE__ */ W("span", {
1072
+ children: [/* @__PURE__ */ U("span", {
1073
1073
  className: "text-text-secondary",
1074
1074
  children: "Buyer pays"
1075
- }), /* @__PURE__ */ G("span", {
1075
+ }), /* @__PURE__ */ W("span", {
1076
1076
  className: "font-medium tabular-nums",
1077
1077
  children: [
1078
- E(v),
1078
+ D(v),
1079
1079
  " ",
1080
- /* @__PURE__ */ G("span", {
1080
+ /* @__PURE__ */ W("span", {
1081
1081
  className: "text-text-tertiary text-xs",
1082
1082
  children: [
1083
1083
  "(",
1084
- T(b),
1084
+ E(x),
1085
1085
  ")"
1086
1086
  ]
1087
1087
  })
1088
1088
  ]
1089
1089
  })]
1090
1090
  }),
1091
- /* @__PURE__ */ G("div", {
1091
+ /* @__PURE__ */ W("div", {
1092
1092
  className: "flex items-center justify-between text-status-error-text",
1093
- children: [/* @__PURE__ */ G("span", { children: [
1093
+ children: [/* @__PURE__ */ W("span", { children: [
1094
1094
  "Platform fee",
1095
1095
  " ",
1096
- /* @__PURE__ */ G("span", {
1096
+ /* @__PURE__ */ W("span", {
1097
1097
  className: "opacity-70",
1098
1098
  children: [
1099
1099
  "(",
1100
- (t * 100).toFixed(0),
1100
+ (n * 100).toFixed(0),
1101
1101
  "%)"
1102
1102
  ]
1103
1103
  })
1104
- ] }), /* @__PURE__ */ G("span", {
1104
+ ] }), /* @__PURE__ */ W("span", {
1105
1105
  className: "tabular-nums",
1106
1106
  children: [
1107
1107
  "− ",
1108
- E(S),
1108
+ D(S),
1109
1109
  " ",
1110
- /* @__PURE__ */ G("span", {
1110
+ /* @__PURE__ */ W("span", {
1111
1111
  className: "text-xs opacity-70",
1112
1112
  children: [
1113
1113
  "(",
1114
- T(C),
1114
+ E(C),
1115
1115
  ")"
1116
1116
  ]
1117
1117
  })
1118
1118
  ]
1119
1119
  })]
1120
1120
  }),
1121
- /* @__PURE__ */ G("div", {
1121
+ /* @__PURE__ */ W("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__ */ W("span", { children: "You earn" }), /* @__PURE__ */ G("span", {
1123
+ children: [/* @__PURE__ */ U("span", { children: "You earn" }), /* @__PURE__ */ W("span", {
1124
1124
  className: "tabular-nums",
1125
1125
  children: [
1126
- E(w),
1126
+ D(w),
1127
1127
  " ",
1128
- /* @__PURE__ */ G("span", {
1128
+ /* @__PURE__ */ W("span", {
1129
1129
  className: "text-sm font-normal",
1130
- children: ["≈ ", T(ee)]
1130
+ children: ["≈ ", E(T)]
1131
1131
  })
1132
1132
  ]
1133
1133
  })]
1134
1134
  })
1135
1135
  ]
1136
1136
  }),
1137
- /* @__PURE__ */ W("p", {
1137
+ /* @__PURE__ */ U("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__ */ G("div", {
1143
+ !r && /* @__PURE__ */ W("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__ */ W(F, {
1145
+ children: [/* @__PURE__ */ U(pe, {
1146
1146
  size: 16,
1147
1147
  className: "mt-0.5 shrink-0 text-status-warning-text"
1148
- }), /* @__PURE__ */ G("div", {
1148
+ }), /* @__PURE__ */ W("div", {
1149
1149
  className: "flex-1 min-w-0",
1150
1150
  children: [
1151
- /* @__PURE__ */ W("p", {
1151
+ /* @__PURE__ */ U("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__ */ W("p", {
1155
+ /* @__PURE__ */ U("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__ */ W("button", {
1159
+ i && /* @__PURE__ */ U("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 We = [
1169
1169
  })
1170
1170
  ]
1171
1171
  }),
1172
- /* @__PURE__ */ G("div", {
1172
+ /* @__PURE__ */ W("div", {
1173
1173
  className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
1174
- children: [/* @__PURE__ */ W("h3", {
1174
+ children: [/* @__PURE__ */ U("h3", {
1175
1175
  className: "text-sm font-semibold",
1176
1176
  children: s("devportal.termsTitle", "Developer & Marketplace Terms")
1177
- }), /* @__PURE__ */ G("ul", {
1177
+ }), /* @__PURE__ */ W("ul", {
1178
1178
  className: "space-y-2 text-sm text-text-secondary",
1179
1179
  children: [
1180
- /* @__PURE__ */ G("li", {
1180
+ /* @__PURE__ */ W("li", {
1181
1181
  className: "flex items-start gap-2",
1182
- children: [/* @__PURE__ */ W(I, {
1182
+ children: [/* @__PURE__ */ U(F, {
1183
1183
  size: 14,
1184
1184
  className: "mt-0.5 shrink-0 text-status-success-text"
1185
- }), /* @__PURE__ */ G("span", { children: [
1185
+ }), /* @__PURE__ */ W("span", { children: [
1186
1186
  "By publishing to the marketplace you agree to the",
1187
1187
  " ",
1188
- /* @__PURE__ */ W("a", {
1188
+ /* @__PURE__ */ U("a", {
1189
1189
  href: "/legal/developer-terms",
1190
1190
  target: "_blank",
1191
1191
  rel: "noopener noreferrer",
@@ -1195,29 +1195,29 @@ var We = [
1195
1195
  "."
1196
1196
  ] })]
1197
1197
  }),
1198
- /* @__PURE__ */ G("li", {
1198
+ /* @__PURE__ */ W("li", {
1199
1199
  className: "flex items-start gap-2",
1200
- children: [/* @__PURE__ */ W(I, {
1200
+ children: [/* @__PURE__ */ U(F, {
1201
1201
  size: 14,
1202
1202
  className: "mt-0.5 shrink-0 text-status-success-text"
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." })]
1203
+ }), /* @__PURE__ */ U("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__ */ G("li", {
1205
+ /* @__PURE__ */ W("li", {
1206
1206
  className: "flex items-start gap-2",
1207
- children: [/* @__PURE__ */ W(I, {
1207
+ children: [/* @__PURE__ */ U(F, {
1208
1208
  size: 14,
1209
1209
  className: "mt-0.5 shrink-0 text-status-success-text"
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." })]
1210
+ }), /* @__PURE__ */ U("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__ */ G("li", {
1212
+ /* @__PURE__ */ W("li", {
1213
1213
  className: "flex items-start gap-2",
1214
- children: [/* @__PURE__ */ W(I, {
1214
+ children: [/* @__PURE__ */ U(F, {
1215
1215
  size: 14,
1216
1216
  className: "mt-0.5 shrink-0 text-status-success-text"
1217
- }), /* @__PURE__ */ G("span", { children: [
1217
+ }), /* @__PURE__ */ W("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__ */ W("a", {
1220
+ /* @__PURE__ */ U("a", {
1221
1221
  href: "/legal/marketplace-terms",
1222
1222
  target: "_blank",
1223
1223
  rel: "noopener noreferrer",
@@ -1231,26 +1231,26 @@ var We = [
1231
1231
  ]
1232
1232
  })]
1233
1233
  }),
1234
- /* @__PURE__ */ G("div", {
1234
+ /* @__PURE__ */ W("div", {
1235
1235
  className: "border-t border-border-subtle pt-6 space-y-4",
1236
- children: [/* @__PURE__ */ W("button", {
1236
+ children: [/* @__PURE__ */ U("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__ */ G(U, { children: [/* @__PURE__ */ W(z, {
1241
+ children: d ? /* @__PURE__ */ W(H, { children: [/* @__PURE__ */ U(R, {
1242
1242
  size: 16,
1243
1243
  className: "animate-spin"
1244
- }), s("devportal.saving", "Saving…")] }) : /* @__PURE__ */ G(U, { children: [/* @__PURE__ */ W(L, { size: 16 }), s("devportal.savePricing", "Save Pricing")] })
1245
- }), a && /* @__PURE__ */ G("div", {
1244
+ }), s("devportal.saving", "Saving…")] }) : /* @__PURE__ */ W(H, { children: [/* @__PURE__ */ U(I, { size: 16 }), s("devportal.savePricing", "Save Pricing")] })
1245
+ }), a && /* @__PURE__ */ W("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__ */ W(I, {
1247
+ children: [/* @__PURE__ */ U(F, {
1248
1248
  size: 16,
1249
1249
  className: "mt-0.5 shrink-0 text-status-success-text"
1250
- }), /* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("p", {
1250
+ }), /* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("p", {
1251
1251
  className: "text-sm font-medium text-status-success-text",
1252
1252
  children: s("devportal.allSetToSubmit", "You're all set!")
1253
- }), /* @__PURE__ */ W("p", {
1253
+ }), /* @__PURE__ */ U("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 We = [
1258
1258
  })
1259
1259
  ]
1260
1260
  });
1261
- }, Ze = ({ appId: e, onNavigate: t, pricingDone: r = !1, onNavigateToPricing: a }) => {
1261
+ }, Qe = ({ appId: e, onNavigate: n, pricingDone: i = !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: c, loading: u, error: d } = l({
1265
+ }, { data: l, loading: u, error: d } = c({
1266
1266
  variables: { applicationId: e },
1267
1267
  fetchPolicy: "cache-and-network"
1268
1268
  });
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", {
1269
+ if (u) return /* @__PURE__ */ U(J, { message: s("devportal.loadingVersions", "Loading versions…") });
1270
+ if (d) return /* @__PURE__ */ U(Y, { message: d.message });
1271
+ let f = (l?.application?.versions?.edges ?? []).map((e) => e.node);
1272
+ return /* @__PURE__ */ W("div", {
1273
1273
  className: "space-y-4",
1274
1274
  children: [
1275
- /* @__PURE__ */ G("div", {
1275
+ /* @__PURE__ */ W("div", {
1276
1276
  className: "flex items-center justify-between",
1277
- children: [/* @__PURE__ */ G("p", {
1277
+ children: [/* @__PURE__ */ W("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__ */ G("button", {
1285
- onClick: () => t(`/apps/${e}/versions`),
1284
+ }), /* @__PURE__ */ W("button", {
1285
+ onClick: () => n(`/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__ */ W(V, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
1287
+ children: [/* @__PURE__ */ U(B, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
1288
1288
  })]
1289
1289
  }),
1290
- f.length > 0 ? /* @__PURE__ */ W("div", {
1290
+ f.length > 0 ? /* @__PURE__ */ U("div", {
1291
1291
  className: "overflow-hidden rounded-lg border border-border-subtle",
1292
- children: /* @__PURE__ */ G("table", {
1292
+ children: /* @__PURE__ */ W("table", {
1293
1293
  className: "w-full text-sm",
1294
- children: [/* @__PURE__ */ W("thead", { children: /* @__PURE__ */ G("tr", {
1294
+ children: [/* @__PURE__ */ U("thead", { children: /* @__PURE__ */ W("tr", {
1295
1295
  className: "border-b border-border-subtle bg-bg-sunken/50",
1296
1296
  children: [
1297
- /* @__PURE__ */ W("th", {
1297
+ /* @__PURE__ */ U("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__ */ W("th", {
1301
+ /* @__PURE__ */ U("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__ */ W("th", {
1305
+ /* @__PURE__ */ U("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__ */ W("th", {
1309
+ /* @__PURE__ */ U("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__ */ W("tbody", {
1314
+ }) }), /* @__PURE__ */ U("tbody", {
1315
1315
  className: "divide-y divide-border-subtle",
1316
- children: f.map((e) => /* @__PURE__ */ G(U, { children: [
1317
- /* @__PURE__ */ G("tr", {
1316
+ children: f.map((e) => /* @__PURE__ */ W(H, { children: [
1317
+ /* @__PURE__ */ W("tr", {
1318
1318
  className: "hover:bg-bg-sunken/30 transition-colors",
1319
1319
  children: [
1320
- /* @__PURE__ */ W("td", {
1320
+ /* @__PURE__ */ U("td", {
1321
1321
  className: "px-4 py-3 font-mono font-medium",
1322
1322
  children: e.version
1323
1323
  }),
1324
- /* @__PURE__ */ W("td", {
1324
+ /* @__PURE__ */ U("td", {
1325
1325
  className: "px-4 py-3",
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"),
1326
+ children: /* @__PURE__ */ U("span", {
1327
+ className: t("inline-flex rounded-full px-2 py-0.5 text-xs font-medium", e.status === "published" ? "bg-status-success-bg-subtle text-status-success-text" : e.status === "pending_review" ? "bg-status-info-bg-subtle text-status-info-text" : e.status === "rejected" ? "bg-status-error-bg-subtle text-status-error-text" : e.status === "deprecated" ? "bg-bg-sunken text-text-secondary" : "bg-status-warning-bg-subtle text-status-warning-text"),
1328
1328
  children: e.status === "pending_review" ? "In Review" : e.status
1329
1329
  })
1330
1330
  }),
1331
- /* @__PURE__ */ W("td", {
1331
+ /* @__PURE__ */ U("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__ */ W("td", {
1335
+ /* @__PURE__ */ U("td", {
1336
1336
  className: "px-4 py-3",
1337
- children: /* @__PURE__ */ G("div", {
1337
+ children: /* @__PURE__ */ W("div", {
1338
1338
  className: "flex gap-1.5",
1339
- children: [e.isLatest && /* @__PURE__ */ W("span", {
1339
+ children: [e.isLatest && /* @__PURE__ */ U("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__ */ W("span", {
1342
+ }), e.isStable && /* @__PURE__ */ U("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 We = [
1347
1347
  })
1348
1348
  ]
1349
1349
  }, e.id),
1350
- e.status === "rejected" && e.reviewNotes && /* @__PURE__ */ W("tr", {
1350
+ e.status === "rejected" && e.reviewNotes && /* @__PURE__ */ U("tr", {
1351
1351
  className: "bg-status-error-bg-subtle/40",
1352
- children: /* @__PURE__ */ W("td", {
1352
+ children: /* @__PURE__ */ U("td", {
1353
1353
  colSpan: 4,
1354
1354
  className: "px-4 py-2",
1355
- children: /* @__PURE__ */ G("p", {
1355
+ children: /* @__PURE__ */ W("p", {
1356
1356
  className: "text-xs text-status-error-text",
1357
- children: [/* @__PURE__ */ G("span", {
1357
+ children: [/* @__PURE__ */ W("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__ */ W("tr", {
1364
+ e.status === "pending_review" && /* @__PURE__ */ U("tr", {
1365
1365
  className: "bg-status-info-bg-subtle/30",
1366
- children: /* @__PURE__ */ W("td", {
1366
+ children: /* @__PURE__ */ U("td", {
1367
1367
  colSpan: 4,
1368
1368
  className: "px-4 py-2",
1369
- children: /* @__PURE__ */ W("p", {
1369
+ children: /* @__PURE__ */ U("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 We = [
1375
1375
  ] }))
1376
1376
  })]
1377
1377
  })
1378
- }) : /* @__PURE__ */ W(i, {
1378
+ }) : /* @__PURE__ */ U(r, {
1379
1379
  illustration: "empty-generic",
1380
- icon: /* @__PURE__ */ W(Oe, { size: 32 }),
1380
+ icon: /* @__PURE__ */ U(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__ */ G("button", {
1384
- onClick: () => t(`/apps/${e}/versions`),
1383
+ action: /* @__PURE__ */ W("button", {
1384
+ onClick: () => n(`/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__ */ W(V, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
1386
+ children: [/* @__PURE__ */ U(B, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
1387
1387
  })
1388
1388
  }),
1389
- f.length > 0 && !r && a && /* @__PURE__ */ G("div", {
1389
+ f.length > 0 && !i && a && /* @__PURE__ */ W("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__ */ W(L, {
1392
+ /* @__PURE__ */ U(I, {
1393
1393
  size: 16,
1394
1394
  className: "shrink-0 text-primary"
1395
1395
  }),
1396
- /* @__PURE__ */ W("p", {
1396
+ /* @__PURE__ */ U("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__ */ G("button", {
1400
+ /* @__PURE__ */ W("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__ */ W(_e, { size: 15 })]
1404
+ children: [s("devportal.nextSetPricing", "Set Pricing"), /* @__PURE__ */ U(_e, { size: 15 })]
1405
1405
  })
1406
1406
  ]
1407
1407
  })
1408
1408
  ]
1409
1409
  });
1410
- }, Qe = ({ appId: e, onNavigate: t }) => {
1410
+ }, $e = ({ 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 } = 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, {
1414
+ }, { data: i, loading: a, error: o } = u({ variables: { applicationId: e } });
1415
+ return a ? /* @__PURE__ */ U(J, { message: r("devportal.loadingWebhooks", "Loading webhooks...") }) : o ? /* @__PURE__ */ U(Y, { message: o.message }) : /* @__PURE__ */ U(Z, {
1416
1416
  appId: e,
1417
- webhooks: (i?.webhooks ?? []).map(Ue),
1417
+ webhooks: (i?.webhooks ?? []).map(We),
1418
1418
  onNavigate: t
1419
1419
  });
1420
- }, $e = ({ authAppId: e, appName: t, onGrantDelegation: n, onNavigate: r }) => {
1420
+ }, et = ({ authAppId: e, appName: t, onGrantDelegation: n, onNavigate: a }) => {
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 } = 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) => {
1424
+ }, { data: c, loading: l, error: u, refetch: d } = i(), [f] = m(), [p, h] = N([]), [g, _] = N(!1), [v, y] = N(/* @__PURE__ */ new Set()), [b, x] = N(null), S = j(() => c?.currentUserDelegations?.delegations ? c.currentUserDelegations.delegations.filter((t) => t.appId === e).map(K) : [], [e, c]), C = j(() => S.filter((e) => e.status === "ACTIVE"), [S]), w = j(() => C.filter((e) => v.has(e.id)), [C, v]), T = C.length > 0 && C.every((e) => v.has(e.id)), E = C.some((e) => v.has(e.id)) && !T, D = A((e, t) => {
1425
1425
  y((n) => {
1426
1426
  let r = new Set(n);
1427
1427
  return t ? r.add(e) : r.delete(e), r;
1428
1428
  });
1429
- }, []), D = A((e) => {
1429
+ }, []), O = 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]), O = A(() => {
1436
+ }, [C]), ee = A(() => {
1437
1437
  y(/* @__PURE__ */ new Set());
1438
1438
  }, []), te = A(async (e) => {
1439
1439
  _(!0);
@@ -1442,40 +1442,40 @@ var We = [
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
- }), m([]), d();
1445
+ }), h([]), d();
1446
1446
  } catch {} finally {
1447
1447
  _(!1);
1448
1448
  }
1449
1449
  }, [f, d]);
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", {
1450
+ return e ? l ? /* @__PURE__ */ U(J, { message: s("devportal.loadingDelegations", "Loading delegations...") }) : u ? /* @__PURE__ */ U(Y, { message: u.message }) : /* @__PURE__ */ W(H, { children: [
1451
+ b && /* @__PURE__ */ U("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__ */ G("div", {
1453
+ children: /* @__PURE__ */ W("div", {
1454
1454
  className: "flex items-center justify-between gap-3",
1455
- children: [/* @__PURE__ */ W("span", { children: b }), /* @__PURE__ */ W("button", {
1455
+ children: [/* @__PURE__ */ U("span", { children: b }), /* @__PURE__ */ U("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__ */ W(nt, {
1462
+ /* @__PURE__ */ U(rt, {
1463
1463
  appName: t,
1464
1464
  delegations: S,
1465
1465
  onGrantDelegation: n,
1466
- onRevokeDelegation: (e) => m([e]),
1466
+ onRevokeDelegation: (e) => h([e]),
1467
1467
  selectedDelegationIds: v,
1468
- onToggleSelectDelegation: E,
1469
- onToggleAllDelegations: D,
1470
- onClearSelection: O,
1471
- onRevokeSelected: () => m(w.map((e) => e.id)),
1472
- allVisibleSelected: ee,
1473
- partiallySelected: T
1468
+ onToggleSelectDelegation: D,
1469
+ onToggleAllDelegations: O,
1470
+ onClearSelection: ee,
1471
+ onRevokeSelected: () => h(w.map((e) => e.id)),
1472
+ allVisibleSelected: T,
1473
+ partiallySelected: E
1474
1474
  }),
1475
- /* @__PURE__ */ W(oe, {
1475
+ /* @__PURE__ */ U(ae, {
1476
1476
  open: p.length > 0,
1477
1477
  onOpenChange: (e) => {
1478
- e || m([]);
1478
+ e || h([]);
1479
1479
  },
1480
1480
  onConfirm: () => {
1481
1481
  p.length > 0 && te(p);
@@ -1487,22 +1487,22 @@ var We = [
1487
1487
  variant: "destructive",
1488
1488
  loading: g
1489
1489
  })
1490
- ] }) : /* @__PURE__ */ W(i, {
1490
+ ] }) : /* @__PURE__ */ U(r, {
1491
1491
  illustration: "empty-generic",
1492
- icon: /* @__PURE__ */ W(Me, { size: 32 }),
1492
+ icon: /* @__PURE__ */ U(z, { 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__ */ G("button", {
1496
- onClick: () => r("/oauth"),
1495
+ action: /* @__PURE__ */ W("button", {
1496
+ onClick: () => a("/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__ */ W(R, { size: 16 }), s("devportal.manageOAuthApps", "Manage OAuth Apps")]
1498
+ children: [/* @__PURE__ */ U(L, { size: 16 }), s("devportal.manageOAuthApps", "Manage OAuth Apps")]
1499
1499
  })
1500
1500
  });
1501
- }, et = ({ appId: e }) => {
1501
+ }, tt = ({ 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: o } = s({ variables: {
1505
+ }, r = j(() => /* @__PURE__ */ new Date(), []), { data: i, loading: a, error: s } = o({ variables: {
1506
1506
  applicationId: e,
1507
1507
  period: "daily",
1508
1508
  startDate: j(() => {
@@ -1511,45 +1511,45 @@ var We = [
1511
1511
  }, [r]).toISOString(),
1512
1512
  endDate: r.toISOString()
1513
1513
  } });
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 }) => {
1514
+ return a ? /* @__PURE__ */ U(J, { message: n("devportal.loadingAnalytics", "Loading analytics...") }) : s ? /* @__PURE__ */ U(Y, { message: s.message }) : /* @__PURE__ */ U(it, { analytics: (i?.applicationAnalytics ?? []).map(G) });
1515
+ }, nt = ({ 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 }] = _(), [s, { loading: c }] = b(), [l, u] = N(!1);
1520
- return /* @__PURE__ */ G("div", {
1519
+ }, [a, { loading: o }] = g(), [s, { loading: c }] = y(), [l, u] = N(!1);
1520
+ return /* @__PURE__ */ W("div", {
1521
1521
  className: "space-y-6",
1522
- children: [e.appType === "WORKFLOW" && /* @__PURE__ */ W("div", {
1522
+ children: [e.appType === "WORKFLOW" && /* @__PURE__ */ U("div", {
1523
1523
  className: "rounded-lg border border-border-subtle bg-bg-elevated p-4",
1524
- children: /* @__PURE__ */ G("div", {
1524
+ children: /* @__PURE__ */ W("div", {
1525
1525
  className: "flex items-start justify-between gap-4",
1526
- children: [/* @__PURE__ */ G("div", {
1526
+ children: [/* @__PURE__ */ W("div", {
1527
1527
  className: "flex items-start gap-3",
1528
- children: [/* @__PURE__ */ W("div", {
1528
+ children: [/* @__PURE__ */ U("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__ */ W(Te, {
1530
+ children: /* @__PURE__ */ U(Te, {
1531
1531
  size: 15,
1532
1532
  className: "text-action-primary-text"
1533
1533
  })
1534
- }), /* @__PURE__ */ G("div", { children: [
1535
- /* @__PURE__ */ W("p", {
1534
+ }), /* @__PURE__ */ W("div", { children: [
1535
+ /* @__PURE__ */ U("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__ */ W("p", {
1539
+ /* @__PURE__ */ U("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__ */ W("p", {
1543
+ e.visibility === "UNLISTED" && (e.status === "PUBLISHED" || e.status === "SUBMITTED") && /* @__PURE__ */ U("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__ */ G("div", {
1547
+ e.visibility === "UNLISTED" && /* @__PURE__ */ W("div", {
1548
1548
  className: "mt-2 flex items-center gap-2",
1549
- children: [/* @__PURE__ */ W("code", {
1549
+ children: [/* @__PURE__ */ U("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__ */ G("button", {
1552
+ }), /* @__PURE__ */ W("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 We = [
1558
1558
  u(!0), setTimeout(() => u(!1), 2e3);
1559
1559
  });
1560
1560
  },
1561
- children: [W(l ? I : ye, { size: 12 }), l ? i("devportal.copied", "Copied!") : i("devportal.copyLink", "Copy Link")]
1561
+ children: [U(l ? F : ye, { size: 12 }), l ? i("devportal.copied", "Copied!") : i("devportal.copyLink", "Copy Link")]
1562
1562
  })]
1563
1563
  })
1564
1564
  ] })]
1565
- }), /* @__PURE__ */ W("button", {
1565
+ }), /* @__PURE__ */ U("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 We = [
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__ */ W(z, {
1573
+ children: o || c ? /* @__PURE__ */ U(R, {
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__ */ G("div", {
1579
+ }), /* @__PURE__ */ W("div", {
1580
1580
  className: "grid gap-6 lg:grid-cols-3",
1581
- children: [/* @__PURE__ */ G("div", {
1581
+ children: [/* @__PURE__ */ W("div", {
1582
1582
  className: "lg:col-span-2 space-y-6",
1583
1583
  children: [
1584
- /* @__PURE__ */ W(Be, { children: /* @__PURE__ */ G("div", {
1584
+ /* @__PURE__ */ U(Ve, { children: /* @__PURE__ */ W("div", {
1585
1585
  className: "grid gap-4 sm:grid-cols-4",
1586
1586
  children: [
1587
- /* @__PURE__ */ W($, {
1587
+ /* @__PURE__ */ U(Q, {
1588
1588
  label: i("devportal.totalInstalls", "Total Installs"),
1589
1589
  value: e.installCount.toLocaleString()
1590
1590
  }),
1591
- /* @__PURE__ */ W($, {
1591
+ /* @__PURE__ */ U(Q, {
1592
1592
  label: i("devportal.activeInstalls", "Active Installs"),
1593
1593
  value: e.activeInstallCount.toLocaleString()
1594
1594
  }),
1595
- /* @__PURE__ */ W($, {
1595
+ /* @__PURE__ */ U(Q, {
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__ */ W($, {
1599
+ /* @__PURE__ */ U(Q, {
1600
1600
  label: i("devportal.reviews", "Reviews"),
1601
1601
  value: e.reviewCount.toString()
1602
1602
  })
1603
1603
  ]
1604
1604
  }) }),
1605
- /* @__PURE__ */ W(C, {
1605
+ /* @__PURE__ */ U(S, {
1606
1606
  title: i("devportal.description", "Description"),
1607
- children: e.description ? /* @__PURE__ */ W(pe, {
1607
+ children: e.description ? /* @__PURE__ */ U(fe, {
1608
1608
  className: "prose prose-sm max-w-none",
1609
1609
  children: e.description
1610
- }) : /* @__PURE__ */ W("p", {
1610
+ }) : /* @__PURE__ */ U("p", {
1611
1611
  className: "text-sm text-text-secondary",
1612
1612
  children: i("devportal.noDescriptionProvided", "No description provided.")
1613
1613
  })
1614
1614
  }),
1615
- /* @__PURE__ */ W(C, {
1615
+ /* @__PURE__ */ U(S, {
1616
1616
  title: i("devportal.tagsAndKeywords", "Tags & Keywords"),
1617
- children: /* @__PURE__ */ G("div", {
1617
+ children: /* @__PURE__ */ W("div", {
1618
1618
  className: "space-y-3",
1619
- children: [e.tags.length > 0 && /* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("p", {
1619
+ children: [e.tags.length > 0 && /* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("p", {
1620
1620
  className: "text-xs text-text-secondary mb-2",
1621
1621
  children: i("devportal.tags", "Tags")
1622
- }), /* @__PURE__ */ W("div", {
1622
+ }), /* @__PURE__ */ U("div", {
1623
1623
  className: "flex flex-wrap gap-2",
1624
- children: e.tags.map((e) => /* @__PURE__ */ W("span", {
1624
+ children: e.tags.map((e) => /* @__PURE__ */ U("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__ */ G("div", { children: [/* @__PURE__ */ W("p", {
1628
+ })] }), e.keywords.length > 0 && /* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("p", {
1629
1629
  className: "text-xs text-text-secondary mb-2",
1630
1630
  children: i("devportal.keywords", "Keywords")
1631
- }), /* @__PURE__ */ W("div", {
1631
+ }), /* @__PURE__ */ U("div", {
1632
1632
  className: "flex flex-wrap gap-2",
1633
- children: e.keywords.map((e) => /* @__PURE__ */ W("span", {
1633
+ children: e.keywords.map((e) => /* @__PURE__ */ U("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 We = [
1638
1638
  })
1639
1639
  })
1640
1640
  ]
1641
- }), /* @__PURE__ */ G("div", {
1641
+ }), /* @__PURE__ */ W("div", {
1642
1642
  className: "space-y-6",
1643
- children: [/* @__PURE__ */ W(C, {
1643
+ children: [/* @__PURE__ */ U(S, {
1644
1644
  title: i("devportal.details", "Details"),
1645
- children: /* @__PURE__ */ W(re, { items: [
1645
+ children: /* @__PURE__ */ U(ne, { items: [
1646
1646
  {
1647
1647
  label: i("devportal.appId", "App ID"),
1648
- value: /* @__PURE__ */ W("code", {
1648
+ value: /* @__PURE__ */ U("code", {
1649
1649
  className: "text-xs",
1650
1650
  children: e.id
1651
1651
  })
@@ -1681,32 +1681,32 @@ var We = [
1681
1681
  value: e.publishedAt ? new Date(e.publishedAt).toLocaleDateString() : i("devportal.notPublished", "Not published")
1682
1682
  }
1683
1683
  ] })
1684
- }), /* @__PURE__ */ W(C, {
1684
+ }), /* @__PURE__ */ U(S, {
1685
1685
  title: i("devportal.links", "Links"),
1686
- children: /* @__PURE__ */ G("div", {
1686
+ children: /* @__PURE__ */ W("div", {
1687
1687
  className: "space-y-2",
1688
1688
  children: [
1689
- e.websiteUrl && /* @__PURE__ */ W(mt, {
1689
+ e.websiteUrl && /* @__PURE__ */ U($, {
1690
1690
  label: i("devportal.website", "Website"),
1691
1691
  url: e.websiteUrl
1692
1692
  }),
1693
- e.documentationUrl && /* @__PURE__ */ W(mt, {
1693
+ e.documentationUrl && /* @__PURE__ */ U($, {
1694
1694
  label: i("devportal.documentation", "Documentation"),
1695
1695
  url: e.documentationUrl
1696
1696
  }),
1697
- e.supportUrl && /* @__PURE__ */ W(mt, {
1697
+ e.supportUrl && /* @__PURE__ */ U($, {
1698
1698
  label: i("devportal.support", "Support"),
1699
1699
  url: e.supportUrl
1700
1700
  }),
1701
- e.githubUrl && /* @__PURE__ */ W(mt, {
1701
+ e.githubUrl && /* @__PURE__ */ U($, {
1702
1702
  label: i("devportal.github", "GitHub"),
1703
1703
  url: e.githubUrl
1704
1704
  }),
1705
- e.privacyPolicyUrl && /* @__PURE__ */ W(mt, {
1705
+ e.privacyPolicyUrl && /* @__PURE__ */ U($, {
1706
1706
  label: i("devportal.privacyPolicy", "Privacy Policy"),
1707
1707
  url: e.privacyPolicyUrl
1708
1708
  }),
1709
- e.termsOfServiceUrl && /* @__PURE__ */ W(mt, {
1709
+ e.termsOfServiceUrl && /* @__PURE__ */ U($, {
1710
1710
  label: i("devportal.termsOfService", "Terms of Service"),
1711
1711
  url: e.termsOfServiceUrl
1712
1712
  })
@@ -1716,16 +1716,16 @@ var We = [
1716
1716
  })]
1717
1717
  })]
1718
1718
  });
1719
- }, Q = ({ appId: e, webhooks: t, onNavigate: n }) => {
1720
- let { t: r } = P(), a = (e, t) => {
1721
- let n = r(e);
1719
+ }, Z = ({ appId: e, webhooks: t, onNavigate: n }) => {
1720
+ let { t: i } = P(), a = (e, t) => {
1721
+ let n = i(e);
1722
1722
  return n === e ? t : n;
1723
1723
  };
1724
- return /* @__PURE__ */ G("div", {
1724
+ return /* @__PURE__ */ W("div", {
1725
1725
  className: "space-y-6",
1726
- children: [/* @__PURE__ */ G("div", {
1726
+ children: [/* @__PURE__ */ W("div", {
1727
1727
  className: "flex items-center justify-between",
1728
- children: [/* @__PURE__ */ G("p", {
1728
+ children: [/* @__PURE__ */ W("p", {
1729
1729
  className: "text-sm text-text-secondary",
1730
1730
  children: [
1731
1731
  t.length,
@@ -1734,81 +1734,81 @@ var We = [
1734
1734
  " ",
1735
1735
  a("devportal.configured", "configured")
1736
1736
  ]
1737
- }), /* @__PURE__ */ G("button", {
1737
+ }), /* @__PURE__ */ W("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__ */ W(B, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
1740
+ children: [/* @__PURE__ */ U(ke, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
1741
1741
  })]
1742
- }), t.length > 0 ? /* @__PURE__ */ W("div", {
1742
+ }), t.length > 0 ? /* @__PURE__ */ U("div", {
1743
1743
  className: "space-y-4",
1744
- children: t.map((t) => /* @__PURE__ */ G("div", {
1744
+ children: t.map((t) => /* @__PURE__ */ W("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__ */ G("div", {
1747
+ /* @__PURE__ */ W("div", {
1748
1748
  className: "flex items-start justify-between",
1749
- children: [/* @__PURE__ */ G("div", { children: [/* @__PURE__ */ G("div", {
1749
+ children: [/* @__PURE__ */ W("div", { children: [/* @__PURE__ */ W("div", {
1750
1750
  className: "flex items-center gap-2",
1751
- children: [/* @__PURE__ */ W("h3", {
1751
+ children: [/* @__PURE__ */ U("h3", {
1752
1752
  className: "font-medium",
1753
1753
  children: t.name
1754
- }), /* @__PURE__ */ W(T, {
1754
+ }), /* @__PURE__ */ U(T, {
1755
1755
  status: t.status,
1756
1756
  type: "webhook"
1757
1757
  })]
1758
- }), t.description && /* @__PURE__ */ W("p", {
1758
+ }), t.description && /* @__PURE__ */ U("p", {
1759
1759
  className: "text-sm text-text-secondary mt-1",
1760
1760
  children: t.description
1761
- })] }), /* @__PURE__ */ W("button", {
1761
+ })] }), /* @__PURE__ */ U("button", {
1762
1762
  onClick: () => n(`/apps/${e}/webhooks/${t.id}`),
1763
1763
  className: "rounded-md p-1 hover:bg-bg-sunken",
1764
- children: /* @__PURE__ */ W(De, { size: 20 })
1764
+ children: /* @__PURE__ */ U(De, { size: 20 })
1765
1765
  })]
1766
1766
  }),
1767
- /* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("p", {
1767
+ /* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("p", {
1768
1768
  className: "text-xs text-text-secondary mb-1",
1769
1769
  children: a("devportal.endpointUrl", "Endpoint URL")
1770
- }), /* @__PURE__ */ W("code", {
1770
+ }), /* @__PURE__ */ U("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__ */ G("div", { children: [/* @__PURE__ */ W("p", {
1774
+ /* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("p", {
1775
1775
  className: "text-xs text-text-secondary mb-2",
1776
1776
  children: a("devportal.events", "Events")
1777
- }), /* @__PURE__ */ W("div", {
1777
+ }), /* @__PURE__ */ U("div", {
1778
1778
  className: "flex flex-wrap gap-2",
1779
- children: t.events.map((e) => /* @__PURE__ */ W("span", {
1779
+ children: t.events.map((e) => /* @__PURE__ */ U("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__ */ G("div", {
1784
+ /* @__PURE__ */ W("div", {
1785
1785
  className: "grid gap-4 sm:grid-cols-4 text-sm",
1786
1786
  children: [
1787
- /* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("p", {
1787
+ /* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("p", {
1788
1788
  className: "text-xs text-text-secondary",
1789
1789
  children: a("devportal.success", "Success")
1790
- }), /* @__PURE__ */ W("p", {
1790
+ }), /* @__PURE__ */ U("p", {
1791
1791
  className: "font-medium text-status-success-text",
1792
1792
  children: t.successCount.toLocaleString()
1793
1793
  })] }),
1794
- /* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("p", {
1794
+ /* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("p", {
1795
1795
  className: "text-xs text-text-secondary",
1796
1796
  children: a("devportal.failed", "Failed")
1797
- }), /* @__PURE__ */ W("p", {
1797
+ }), /* @__PURE__ */ U("p", {
1798
1798
  className: "font-medium text-status-error-text",
1799
1799
  children: t.failureCount.toLocaleString()
1800
1800
  })] }),
1801
- /* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("p", {
1801
+ /* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("p", {
1802
1802
  className: "text-xs text-text-secondary",
1803
1803
  children: a("devportal.successRate", "Success Rate")
1804
- }), /* @__PURE__ */ G("p", {
1804
+ }), /* @__PURE__ */ W("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__ */ G("div", { children: [/* @__PURE__ */ W("p", {
1808
+ /* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("p", {
1809
1809
  className: "text-xs text-text-secondary",
1810
1810
  children: a("devportal.lastTriggered", "Last Triggered")
1811
- }), /* @__PURE__ */ W("p", {
1811
+ }), /* @__PURE__ */ U("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 We = [
1816
1816
  })
1817
1817
  ]
1818
1818
  }, t.id))
1819
- }) : /* @__PURE__ */ W(i, {
1819
+ }) : /* @__PURE__ */ U(r, {
1820
1820
  illustration: "empty-notifications",
1821
- icon: /* @__PURE__ */ W(Ie, { size: 32 }),
1821
+ icon: /* @__PURE__ */ U(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__ */ G("button", {
1824
+ action: /* @__PURE__ */ W("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__ */ W(B, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
1827
+ children: [/* @__PURE__ */ U(ke, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
1828
1828
  })
1829
1829
  })]
1830
1830
  });
1831
- }, nt = ({ appName: e, delegations: t, onGrantDelegation: r, onRevokeDelegation: a, selectedDelegationIds: o, onToggleSelectDelegation: s, onToggleAllDelegations: c, onClearSelection: l, onRevokeSelected: u, allVisibleSelected: d, partiallySelected: f }) => {
1831
+ }, rt = ({ appName: e, delegations: n, onGrantDelegation: i, 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 = t.filter((e) => e.status === "ACTIVE"), g = t.filter((e) => e.status !== "ACTIVE");
1836
- return /* @__PURE__ */ G("div", {
1835
+ }, h = n.filter((e) => e.status === "ACTIVE"), g = n.filter((e) => e.status !== "ACTIVE");
1836
+ return /* @__PURE__ */ W("div", {
1837
1837
  className: "space-y-6",
1838
1838
  children: [
1839
- /* @__PURE__ */ G("div", {
1839
+ /* @__PURE__ */ W("div", {
1840
1840
  className: "flex items-center justify-between",
1841
- children: [/* @__PURE__ */ G("div", { children: [/* @__PURE__ */ G("p", {
1841
+ children: [/* @__PURE__ */ W("div", { children: [/* @__PURE__ */ W("p", {
1842
1842
  className: "text-sm text-text-secondary",
1843
1843
  children: [
1844
- t.length,
1844
+ n.length,
1845
1845
  " ",
1846
- t.length === 1 ? m("devportal.delegation", "delegation") : m("devportal.delegations", "delegations"),
1846
+ n.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__ */ G("p", {
1852
+ }), h.length > 0 && /* @__PURE__ */ W("p", {
1853
1853
  className: "text-xs text-text-secondary mt-0.5",
1854
1854
  children: [
1855
1855
  h.length,
@@ -1861,44 +1861,44 @@ var We = [
1861
1861
  " ",
1862
1862
  m("devportal.revokedExpired", "revoked/expired")
1863
1863
  ]
1864
- })] }), /* @__PURE__ */ G("button", {
1865
- onClick: r,
1864
+ })] }), /* @__PURE__ */ W("button", {
1865
+ onClick: i,
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__ */ W(B, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
1867
+ children: [/* @__PURE__ */ U(ke, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
1868
1868
  })]
1869
1869
  }),
1870
- h.length > 0 && /* @__PURE__ */ W("div", {
1870
+ h.length > 0 && /* @__PURE__ */ U("div", {
1871
1871
  className: "rounded-card border border-border-seam bg-bg-surface p-4",
1872
- children: /* @__PURE__ */ G("div", {
1872
+ children: /* @__PURE__ */ W("div", {
1873
1873
  className: "flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between",
1874
- children: [/* @__PURE__ */ G("div", {
1874
+ children: [/* @__PURE__ */ W("div", {
1875
1875
  className: "flex flex-wrap items-center gap-3",
1876
- children: [/* @__PURE__ */ G("div", {
1876
+ children: [/* @__PURE__ */ W("div", {
1877
1877
  className: "flex items-center gap-2",
1878
- children: [/* @__PURE__ */ W(D, {
1878
+ children: [/* @__PURE__ */ U(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__ */ W("span", {
1883
+ }), /* @__PURE__ */ U("span", {
1884
1884
  className: "text-sm font-medium",
1885
1885
  children: m("devportal.selectAllActive", "Select all active")
1886
1886
  })]
1887
- }), o.size > 0 && /* @__PURE__ */ W("button", {
1887
+ }), o.size > 0 && /* @__PURE__ */ U("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__ */ G("div", {
1892
+ }), /* @__PURE__ */ W("div", {
1893
1893
  className: "flex flex-wrap items-center gap-2",
1894
- children: [/* @__PURE__ */ G("span", {
1894
+ children: [/* @__PURE__ */ W("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__ */ G("button", {
1901
+ }), /* @__PURE__ */ W("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 We = [
1907
1907
  })]
1908
1908
  })
1909
1909
  }),
1910
- t.length > 0 ? /* @__PURE__ */ W("div", {
1910
+ n.length > 0 ? /* @__PURE__ */ U("div", {
1911
1911
  className: "space-y-4",
1912
- children: t.map((e) => /* @__PURE__ */ G("div", {
1912
+ children: n.map((e) => /* @__PURE__ */ W("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__ */ G("div", {
1915
+ /* @__PURE__ */ W("div", {
1916
1916
  className: "flex items-start justify-between",
1917
- children: [/* @__PURE__ */ G("div", {
1917
+ children: [/* @__PURE__ */ W("div", {
1918
1918
  className: "flex items-start gap-3",
1919
- children: [e.status === "ACTIVE" && /* @__PURE__ */ W("div", {
1919
+ children: [e.status === "ACTIVE" && /* @__PURE__ */ U("div", {
1920
1920
  onClick: (e) => e.stopPropagation(),
1921
- children: /* @__PURE__ */ W(D, {
1921
+ children: /* @__PURE__ */ U(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__ */ G("div", { children: [/* @__PURE__ */ G("div", {
1927
+ }), /* @__PURE__ */ W("div", { children: [/* @__PURE__ */ W("div", {
1928
1928
  className: "flex items-center gap-2",
1929
- children: [/* @__PURE__ */ G("h3", {
1929
+ children: [/* @__PURE__ */ W("h3", {
1930
1930
  className: "font-medium",
1931
1931
  children: ["Delegation #", e.id.slice(0, 8)]
1932
- }), /* @__PURE__ */ W("span", {
1933
- className: n("rounded-full px-2 py-0.5 text-xs font-medium", J[e.status]),
1932
+ }), /* @__PURE__ */ U("span", {
1933
+ className: t("rounded-full px-2 py-0.5 text-xs font-medium", q[e.status]),
1934
1934
  children: e.status
1935
1935
  })]
1936
- }), /* @__PURE__ */ G("p", {
1936
+ }), /* @__PURE__ */ W("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 We = [
1945
1945
  e.grantedBy === e.userId ? m("devportal.you", "you") : e.grantedBy.slice(0, 8)
1946
1946
  ]
1947
1947
  })] })]
1948
- }), e.status === "ACTIVE" && /* @__PURE__ */ G("button", {
1948
+ }), e.status === "ACTIVE" && /* @__PURE__ */ W("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__ */ W(Re, { size: 14 }), m("devportal.revoke", "Revoke")]
1951
+ children: [/* @__PURE__ */ U(Re, { size: 14 }), m("devportal.revoke", "Revoke")]
1952
1952
  })]
1953
1953
  }),
1954
- /* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("p", {
1954
+ /* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("p", {
1955
1955
  className: "text-xs text-text-secondary mb-2",
1956
1956
  children: m("devportal.grantedScopes", "Granted Scopes")
1957
- }), /* @__PURE__ */ W("div", {
1957
+ }), /* @__PURE__ */ U("div", {
1958
1958
  className: "flex flex-wrap gap-2",
1959
- children: e.scopes.map((e) => /* @__PURE__ */ W("span", {
1959
+ children: e.scopes.map((e) => /* @__PURE__ */ U("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__ */ G("div", { children: [/* @__PURE__ */ W("p", {
1964
+ e.workspaceIds.length > 0 && /* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("p", {
1965
1965
  className: "text-xs text-text-secondary mb-2",
1966
1966
  children: m("devportal.workspaceScope", "Workspace Scope")
1967
- }), /* @__PURE__ */ W("div", {
1967
+ }), /* @__PURE__ */ U("div", {
1968
1968
  className: "flex flex-wrap gap-2",
1969
- children: e.workspaceIds.map((e) => /* @__PURE__ */ W("code", {
1969
+ children: e.workspaceIds.map((e) => /* @__PURE__ */ U("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__ */ G("div", {
1974
+ /* @__PURE__ */ W("div", {
1975
1975
  className: "flex items-center gap-4 text-xs text-text-secondary",
1976
1976
  children: [
1977
- e.expiresAt && /* @__PURE__ */ G("span", {
1977
+ e.expiresAt && /* @__PURE__ */ W("span", {
1978
1978
  className: "flex items-center gap-1",
1979
1979
  children: [
1980
- /* @__PURE__ */ W(ve, { size: 12 }),
1980
+ /* @__PURE__ */ U(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__ */ G("span", {
1986
+ !e.expiresAt && e.status === "ACTIVE" && /* @__PURE__ */ W("span", {
1987
1987
  className: "flex items-center gap-1",
1988
- children: [/* @__PURE__ */ W(ge, {
1988
+ children: [/* @__PURE__ */ U(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__ */ G("span", {
1993
+ e.revokedAt && /* @__PURE__ */ W("span", {
1994
1994
  className: "flex items-center gap-1",
1995
1995
  children: [
1996
- /* @__PURE__ */ W(Re, {
1996
+ /* @__PURE__ */ U(Re, {
1997
1997
  size: 12,
1998
1998
  className: "text-status-error-text"
1999
1999
  }),
@@ -2006,53 +2006,53 @@ var We = [
2006
2006
  })
2007
2007
  ]
2008
2008
  }, e.id))
2009
- }) : /* @__PURE__ */ W(i, {
2009
+ }) : /* @__PURE__ */ U(r, {
2010
2010
  illustration: "empty-people",
2011
- icon: /* @__PURE__ */ W(Fe, { size: 32 }),
2011
+ icon: /* @__PURE__ */ U(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__ */ G("button", {
2015
- onClick: r,
2014
+ action: /* @__PURE__ */ W("button", {
2015
+ onClick: i,
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__ */ W(B, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
2017
+ children: [/* @__PURE__ */ U(ke, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
2018
2018
  })
2019
2019
  })
2020
2020
  ]
2021
2021
  });
2022
- }, rt = ({ analytics: e }) => {
2022
+ }, it = ({ analytics: e }) => {
2023
2023
  let { t } = P(), n = (e, n) => {
2024
2024
  let r = t(e);
2025
2025
  return r === e ? n : r;
2026
- }, r = e[0], a = e[1], o = (e, t) => t ? (e - t) / t * 100 : 0;
2027
- return /* @__PURE__ */ G("div", {
2026
+ }, i = e[0], a = e[1], o = (e, t) => t ? (e - t) / t * 100 : 0;
2027
+ return /* @__PURE__ */ W("div", {
2028
2028
  className: "space-y-6",
2029
- children: [/* @__PURE__ */ G("div", {
2029
+ children: [/* @__PURE__ */ W("div", {
2030
2030
  className: "grid gap-4 sm:grid-cols-4",
2031
2031
  children: [
2032
- /* @__PURE__ */ W($, {
2032
+ /* @__PURE__ */ U(Q, {
2033
2033
  label: n("devportal.activeUsers", "Active Users"),
2034
- value: r?.activeUsers.toLocaleString() || "0",
2035
- trend: a ? o(r.activeUsers, a.activeUsers) : void 0
2034
+ value: i?.activeUsers.toLocaleString() || "0",
2035
+ trend: a ? o(i.activeUsers, a.activeUsers) : void 0
2036
2036
  }),
2037
- /* @__PURE__ */ W($, {
2037
+ /* @__PURE__ */ U(Q, {
2038
2038
  label: n("devportal.apiCalls", "API Calls"),
2039
- value: r ? `${(r.apiCalls / 1e3).toFixed(1)}K` : "0",
2040
- trend: a ? o(r.apiCalls, a.apiCalls) : void 0
2039
+ value: i ? `${(i.apiCalls / 1e3).toFixed(1)}K` : "0",
2040
+ trend: a ? o(i.apiCalls, a.apiCalls) : void 0
2041
2041
  }),
2042
- /* @__PURE__ */ W($, {
2042
+ /* @__PURE__ */ U(Q, {
2043
2043
  label: n("devportal.avgResponseTime", "Avg Response Time"),
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
2044
+ value: i?.avgResponseTime ? `${i.avgResponseTime}ms` : n("devportal.notAvailable", "N/A"),
2045
+ trend: a && i?.avgResponseTime ? -o(i.avgResponseTime, a.avgResponseTime || 1) : void 0
2046
2046
  }),
2047
- /* @__PURE__ */ W($, {
2047
+ /* @__PURE__ */ U(Q, {
2048
2048
  label: n("devportal.errorRate", "Error Rate"),
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
2049
+ value: i && i.apiCalls > 0 ? `${(i.errors / i.apiCalls * 100).toFixed(2)}%` : "0%",
2050
+ trend: a && i && i.apiCalls > 0 && a.apiCalls > 0 ? -o(i.errors / i.apiCalls, a.errors / a.apiCalls) : void 0
2051
2051
  })
2052
2052
  ]
2053
- }), /* @__PURE__ */ W(C, {
2053
+ }), /* @__PURE__ */ U(S, {
2054
2054
  title: n("devportal.dailyBreakdown", "Daily Breakdown"),
2055
- children: e.length > 0 ? /* @__PURE__ */ W(ne, {
2055
+ children: e.length > 0 ? /* @__PURE__ */ U(te, {
2056
2056
  data: e,
2057
2057
  keyField: "id",
2058
2058
  columns: [
@@ -2092,19 +2092,19 @@ var We = [
2092
2092
  render: (e) => e.sessions.toLocaleString()
2093
2093
  }
2094
2094
  ]
2095
- }) : /* @__PURE__ */ W(i, {
2095
+ }) : /* @__PURE__ */ U(r, {
2096
2096
  illustration: "empty-data",
2097
- icon: /* @__PURE__ */ W(he, { size: 32 }),
2097
+ icon: /* @__PURE__ */ U(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
- }, 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) => {
2103
+ }, at = "# 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}", ot = ({ app: t }) => {
2104
+ let { apiGatewayUrl: n, workspacesGatewayUrl: r, authToken: i } = e(), { t: a } = P(), o = (e, t) => {
2105
2105
  let n = a(e);
2106
2106
  return n === e ? t : 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 () => {
2107
+ }, [s, c] = N(at), [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 We = [
2138
2138
  ]), S = A(() => {
2139
2139
  i && v(i), b(!0);
2140
2140
  }, [i]);
2141
- return /* @__PURE__ */ G("div", {
2141
+ return /* @__PURE__ */ W("div", {
2142
2142
  className: "space-y-4",
2143
2143
  children: [
2144
- /* @__PURE__ */ G("div", {
2144
+ /* @__PURE__ */ W("div", {
2145
2145
  className: "flex items-center justify-between",
2146
- children: [/* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("h3", {
2146
+ children: [/* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("h3", {
2147
2147
  className: "text-lg font-semibold",
2148
2148
  children: o("devportal.apiPlayground", "API Playground")
2149
- }), /* @__PURE__ */ G("p", {
2149
+ }), /* @__PURE__ */ W("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__ */ W("strong", { children: e.name }),
2155
- e.appId && /* @__PURE__ */ G("span", {
2154
+ /* @__PURE__ */ U("strong", { children: t.name }),
2155
+ t.appId && /* @__PURE__ */ W("span", {
2156
2156
  className: "ml-1 text-xs text-text-secondary",
2157
2157
  children: [
2158
2158
  "(OAuth App: ",
2159
- e.appId.slice(0, 8),
2159
+ t.appId.slice(0, 8),
2160
2160
  "...)"
2161
2161
  ]
2162
2162
  })
2163
2163
  ]
2164
- })] }), /* @__PURE__ */ G("button", {
2164
+ })] }), /* @__PURE__ */ W("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__ */ W(we, { size: 14 }), o("devportal.autoFillCredentials", "Auto-fill Credentials")]
2167
+ children: [/* @__PURE__ */ U(we, { size: 14 }), o("devportal.autoFillCredentials", "Auto-fill Credentials")]
2168
2168
  })]
2169
2169
  }),
2170
- y && /* @__PURE__ */ G("div", {
2170
+ y && /* @__PURE__ */ W("div", {
2171
2171
  className: "rounded-lg border bg-status-info-bg-subtle p-4 text-sm space-y-2",
2172
2172
  children: [
2173
- /* @__PURE__ */ W("p", {
2173
+ /* @__PURE__ */ U("p", {
2174
2174
  className: "font-medium text-status-info-text",
2175
2175
  children: o("devportal.authenticationGuide", "Authentication Guide")
2176
2176
  }),
2177
- /* @__PURE__ */ G("p", {
2177
+ /* @__PURE__ */ W("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__ */ W("strong", { children: o("devportal.oauthClientsTab", "OAuth Clients") }),
2182
+ /* @__PURE__ */ U("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__ */ W("pre", {
2187
+ /* @__PURE__ */ U("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__ */ G("p", {
2191
+ /* @__PURE__ */ W("p", {
2192
2192
  className: "text-status-info-text",
2193
2193
  children: [
2194
2194
  o("devportal.useReturnedAccessToken", "Use the returned"),
2195
2195
  " ",
2196
- /* @__PURE__ */ W("code", {
2196
+ /* @__PURE__ */ U("code", {
2197
2197
  className: "bg-status-info-bg-subtle px-1 rounded",
2198
2198
  children: "accessToken"
2199
2199
  }),
@@ -2201,132 +2201,132 @@ var We = [
2201
2201
  o("devportal.asBearerToken", "as the Bearer token below.")
2202
2202
  ]
2203
2203
  }),
2204
- /* @__PURE__ */ W("button", {
2204
+ /* @__PURE__ */ U("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__ */ G("div", { children: [/* @__PURE__ */ W("label", {
2211
+ /* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("label", {
2212
2212
  className: "block text-sm font-medium mb-1",
2213
2213
  children: o("devportal.gatewayEndpoint", "Gateway Endpoint")
2214
- }), /* @__PURE__ */ G("div", {
2214
+ }), /* @__PURE__ */ W("div", {
2215
2215
  className: "flex gap-2",
2216
- children: [/* @__PURE__ */ W("input", {
2216
+ children: [/* @__PURE__ */ U("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__ */ G("select", {
2221
+ }), /* @__PURE__ */ W("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__ */ W("option", {
2225
+ children: [/* @__PURE__ */ U("option", {
2226
2226
  value: `${n || "https://gw-global.local.burdenoff.com"}/global/graphql`,
2227
2227
  children: o("devportal.globalGateway", "Global Gateway")
2228
- }), /* @__PURE__ */ W("option", {
2228
+ }), /* @__PURE__ */ U("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__ */ G("div", { children: [/* @__PURE__ */ W("label", {
2234
+ /* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("label", {
2235
2235
  className: "block text-sm font-medium mb-1",
2236
2236
  children: o("devportal.bearerToken", "Bearer Token")
2237
- }), /* @__PURE__ */ W("input", {
2237
+ }), /* @__PURE__ */ U("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__ */ G("div", {
2244
+ /* @__PURE__ */ W("div", {
2245
2245
  className: "grid grid-cols-1 lg:grid-cols-2 gap-4",
2246
- children: [/* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("label", {
2246
+ children: [/* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("label", {
2247
2247
  className: "block text-sm font-medium mb-1",
2248
2248
  children: o("devportal.query", "Query")
2249
- }), /* @__PURE__ */ W("textarea", {
2249
+ }), /* @__PURE__ */ U("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__ */ G("div", { children: [/* @__PURE__ */ W("label", {
2254
+ })] }), /* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("label", {
2255
2255
  className: "block text-sm font-medium mb-1",
2256
2256
  children: o("devportal.variablesJson", "Variables (JSON)")
2257
- }), /* @__PURE__ */ W("textarea", {
2257
+ }), /* @__PURE__ */ U("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__ */ G("button", {
2264
+ /* @__PURE__ */ W("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__ */ W(z, {
2268
+ children: [p ? /* @__PURE__ */ U(R, {
2269
2269
  size: 16,
2270
2270
  className: "animate-spin"
2271
- }) : /* @__PURE__ */ W(R, { size: 16 }), p ? o("devportal.executing", "Executing...") : o("devportal.executeQuery", "Execute Query")]
2271
+ }) : /* @__PURE__ */ U(L, { size: 16 }), p ? o("devportal.executing", "Executing...") : o("devportal.executeQuery", "Execute Query")]
2272
2272
  }),
2273
- d && /* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("label", {
2273
+ d && /* @__PURE__ */ W("div", { children: [/* @__PURE__ */ U("label", {
2274
2274
  className: "block text-sm font-medium mb-1",
2275
2275
  children: o("devportal.response", "Response")
2276
- }), /* @__PURE__ */ W("pre", {
2276
+ }), /* @__PURE__ */ U("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
- }, 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));
2282
+ }, st = ({ label: e, value: n, onChange: r, hint: i, accept: a = "image/png,image/jpeg,image/webp,image/gif,image/svg+xml", aspectClass: o = "aspect-square", upload: s, uploading: c, progress: l, error: u }) => {
2283
+ let d = M(null), [f, p] = N(!1), m = M(n);
2284
+ m.current !== n && (m.current = n, 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__ */ G("div", {
2290
+ return /* @__PURE__ */ W("div", {
2291
2291
  className: "space-y-1.5",
2292
2292
  children: [
2293
- /* @__PURE__ */ W("label", {
2293
+ /* @__PURE__ */ U("label", {
2294
2294
  className: "text-sm font-medium",
2295
2295
  children: e
2296
2296
  }),
2297
- /* @__PURE__ */ G("div", {
2297
+ /* @__PURE__ */ W("div", {
2298
2298
  className: "flex gap-3 items-start",
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,
2299
+ children: [/* @__PURE__ */ W("div", {
2300
+ className: t("relative shrink-0 w-20 rounded-lg border border-border-subtle bg-bg-sunken overflow-hidden flex items-center justify-center", o),
2301
+ children: [n && !f ? /* @__PURE__ */ U("img", {
2302
+ src: n,
2303
2303
  alt: e,
2304
2304
  className: "w-full h-full object-cover",
2305
2305
  onError: () => p(!0)
2306
- }) : /* @__PURE__ */ W(V, {
2306
+ }) : /* @__PURE__ */ U(B, {
2307
2307
  size: 18,
2308
2308
  className: "text-text-secondary opacity-40"
2309
- }), c && /* @__PURE__ */ G("div", {
2309
+ }), c && /* @__PURE__ */ W("div", {
2310
2310
  className: "absolute inset-0 bg-bg-overlay flex flex-col items-center justify-center gap-1",
2311
- children: [/* @__PURE__ */ W(z, {
2311
+ children: [/* @__PURE__ */ U(R, {
2312
2312
  size: 14,
2313
2313
  className: "animate-spin text-white"
2314
- }), /* @__PURE__ */ G("span", {
2314
+ }), /* @__PURE__ */ W("span", {
2315
2315
  className: "text-white text-xs",
2316
2316
  children: [l, "%"]
2317
2317
  })]
2318
2318
  })]
2319
- }), /* @__PURE__ */ G("div", {
2319
+ }), /* @__PURE__ */ W("div", {
2320
2320
  className: "flex-1 space-y-1.5",
2321
2321
  children: [
2322
- /* @__PURE__ */ W("input", {
2322
+ /* @__PURE__ */ U("input", {
2323
2323
  type: "url",
2324
- value: t,
2324
+ value: n,
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__ */ W("input", {
2329
+ /* @__PURE__ */ U("input", {
2330
2330
  ref: d,
2331
2331
  type: "file",
2332
2332
  accept: a,
@@ -2336,89 +2336,89 @@ var We = [
2336
2336
  t && h(t), e.target.value = "";
2337
2337
  }
2338
2338
  }),
2339
- /* @__PURE__ */ G("button", {
2339
+ /* @__PURE__ */ W("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__ */ W(V, { size: 11 }), c ? `Uploading… ${l}%` : "Upload image"]
2344
+ children: [/* @__PURE__ */ U(B, { size: 11 }), c ? `Uploading… ${l}%` : "Upload image"]
2345
2345
  }),
2346
- u && /* @__PURE__ */ W("p", {
2346
+ u && /* @__PURE__ */ U("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__ */ W("p", {
2353
+ i && /* @__PURE__ */ U("p", {
2354
2354
  className: "text-xs text-text-secondary",
2355
2355
  children: i
2356
2356
  })
2357
2357
  ]
2358
2358
  });
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) => {
2359
+ }, ct = ({ urls: e, onChange: n, upload: r, uploading: i, progress: a, error: o }) => {
2360
+ let s = M(null), [c, l] = N(""), u = A(async (t) => {
2361
2361
  try {
2362
- let i = await r(n);
2363
- t([...e, i.downloadUrl]);
2362
+ let i = await r(t);
2363
+ n([...e, i.downloadUrl]);
2364
2364
  } catch {}
2365
2365
  }, [
2366
2366
  r,
2367
- t,
2367
+ n,
2368
2368
  e
2369
2369
  ]), d = () => {
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));
2370
+ let t = c.trim();
2371
+ t && !e.includes(t) && (n([...e, t]), l(""));
2372
+ }, f = (t) => {
2373
+ n(e.filter((e, n) => n !== t));
2374
2374
  };
2375
- return /* @__PURE__ */ G("div", {
2375
+ return /* @__PURE__ */ W("div", {
2376
2376
  className: "space-y-2",
2377
2377
  children: [
2378
- /* @__PURE__ */ G("div", {
2378
+ /* @__PURE__ */ W("div", {
2379
2379
  className: "flex flex-col gap-0.5",
2380
- children: [/* @__PURE__ */ W("label", {
2380
+ children: [/* @__PURE__ */ U("label", {
2381
2381
  className: "text-sm font-medium",
2382
2382
  children: "Screenshots"
2383
- }), /* @__PURE__ */ W("p", {
2383
+ }), /* @__PURE__ */ U("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__ */ G("div", {
2388
+ /* @__PURE__ */ W("div", {
2389
2389
  className: "flex flex-wrap gap-3",
2390
- children: [e.map((e, t) => /* @__PURE__ */ G("div", {
2390
+ children: [e.map((e, t) => /* @__PURE__ */ W("div", {
2391
2391
  className: "relative group w-36 aspect-video rounded-lg border border-border-subtle overflow-hidden bg-bg-sunken",
2392
- children: [/* @__PURE__ */ W("img", {
2392
+ children: [/* @__PURE__ */ U("img", {
2393
2393
  src: e,
2394
2394
  alt: `Screenshot ${t + 1}`,
2395
2395
  className: "w-full h-full object-cover"
2396
- }), /* @__PURE__ */ W("button", {
2396
+ }), /* @__PURE__ */ U("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__ */ W(Le, { size: 12 })
2400
+ children: /* @__PURE__ */ U(Le, { size: 12 })
2401
2401
  })]
2402
- }, t)), /* @__PURE__ */ W("button", {
2402
+ }, t)), /* @__PURE__ */ U("button", {
2403
2403
  type: "button",
2404
2404
  disabled: i,
2405
2405
  onClick: () => s.current?.click(),
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, {
2406
+ className: t("w-36 aspect-video rounded-lg border-2 border-dashed border-border-subtle flex flex-col items-center justify-center gap-1.5 text-text-secondary hover:border-border-strong hover:bg-bg-sunken transition-colors disabled:opacity-50"),
2407
+ children: i ? /* @__PURE__ */ W(H, { children: [/* @__PURE__ */ U(R, {
2408
2408
  size: 18,
2409
2409
  className: "animate-spin text-primary"
2410
- }), /* @__PURE__ */ G("span", {
2410
+ }), /* @__PURE__ */ W("span", {
2411
2411
  className: "text-xs",
2412
2412
  children: [a, "%"]
2413
- })] }) : /* @__PURE__ */ G(U, { children: [/* @__PURE__ */ W(V, { size: 18 }), /* @__PURE__ */ W("span", {
2413
+ })] }) : /* @__PURE__ */ W(H, { children: [/* @__PURE__ */ U(B, { size: 18 }), /* @__PURE__ */ U("span", {
2414
2414
  className: "text-xs",
2415
2415
  children: "Add screenshot"
2416
2416
  })] })
2417
2417
  })]
2418
2418
  }),
2419
- /* @__PURE__ */ G("div", {
2419
+ /* @__PURE__ */ W("div", {
2420
2420
  className: "flex gap-2",
2421
- children: [/* @__PURE__ */ W("input", {
2421
+ children: [/* @__PURE__ */ U("input", {
2422
2422
  type: "url",
2423
2423
  value: c,
2424
2424
  onChange: (e) => l(e.target.value),
@@ -2427,7 +2427,7 @@ var We = [
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__ */ W("button", {
2430
+ }), /* @__PURE__ */ U("button", {
2431
2431
  type: "button",
2432
2432
  onClick: d,
2433
2433
  disabled: !c.trim(),
@@ -2435,7 +2435,7 @@ var We = [
2435
2435
  children: "Add"
2436
2436
  })]
2437
2437
  }),
2438
- /* @__PURE__ */ W("input", {
2438
+ /* @__PURE__ */ U("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 We = [
2445
2445
  t && u(t), e.target.value = "";
2446
2446
  }
2447
2447
  }),
2448
- o && /* @__PURE__ */ W("p", {
2448
+ o && /* @__PURE__ */ U("p", {
2449
2449
  className: "text-xs text-status-error-text",
2450
2450
  children: o
2451
2451
  })
2452
2452
  ]
2453
2453
  });
2454
- }, ct = new Set(["workflow", "template"]), lt = [{
2454
+ }, lt = new Set(["workflow", "template"]), ut = [{
2455
2455
  value: "FREE",
2456
2456
  label: "Free"
2457
2457
  }, {
2458
2458
  value: "PAID",
2459
2459
  label: "Paid"
2460
- }], ut = {
2460
+ }], dt = {
2461
2461
  NODE: [
2462
2462
  {
2463
2463
  value: "node",
@@ -2529,12 +2529,12 @@ var We = [
2529
2529
  label: "Plugin"
2530
2530
  }
2531
2531
  ]
2532
- }, dt = {
2532
+ }, ft = {
2533
2533
  NODE: "node",
2534
2534
  WORKFLOW: "workflow",
2535
2535
  APP: "app"
2536
2536
  };
2537
- function ft(e) {
2537
+ function pt(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 ft(e) {
2549
2549
  supportUrl: e.supportUrl ?? "",
2550
2550
  privacyPolicyUrl: e.privacyPolicyUrl ?? "",
2551
2551
  termsOfServiceUrl: e.termsOfServiceUrl ?? "",
2552
- manifestItemType: typeof t.itemType == "string" ? t.itemType : dt[e.appType] ?? "",
2552
+ manifestItemType: typeof t.itemType == "string" ? t.itemType : ft[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 ft(e) {
2560
2560
  manifestJsonContent: typeof t.jsonContent == "string" ? t.jsonContent : typeof t.content == "string" ? t.content : ""
2561
2561
  };
2562
2562
  }
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) => {
2563
+ var mt = ({ app: t, 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 } = e(), { t: f } = P(), p = (e, t) => {
2565
2565
  let n = f(e);
2566
2566
  return n === e ? t : n;
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) => {
2567
+ }, [m, h] = N(() => pt(t)), [g, _] = N(!1), [v, y] = N(null), x = M(pt(t)), C = M(t);
2568
+ C.current = t;
2569
+ let w = JSON.stringify(m) !== JSON.stringify(x.current), [T] = b();
2570
+ de(() => {
2571
+ let e = pt(C.current);
2572
+ h(e), x.current = e, y(null);
2573
+ }, [t.id]);
2574
+ let E = (e, t) => {
2575
2575
  h((n) => ({
2576
2576
  ...n,
2577
2577
  [e]: t
2578
2578
  })), y(null);
2579
- }, E = m.shortDescription.trim().length > 0 && m.privacyPolicyUrl.trim().length > 0 && m.termsOfServiceUrl.trim().length > 0, D = async () => {
2579
+ }, D = m.shortDescription.trim().length > 0 && m.privacyPolicyUrl.trim().length > 0 && m.termsOfServiceUrl.trim().length > 0, ee = async () => {
2580
2580
  _(!0), y(null);
2581
2581
  try {
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 = {
2582
+ let e = m.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean), n = m.manifestPermissionsText.split("\n").map((e) => e.trim()).filter(Boolean), r = lt.has(m.manifestItemType), i = t.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 pt = ({ app: e, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2593
2593
  permissions: n,
2594
2594
  compatibility: { minPlatformVersion: m.manifestMinPlatformVersion }
2595
2595
  };
2596
- await ee({ variables: {
2597
- id: e.id,
2596
+ await T({ variables: {
2597
+ id: t.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: t.length > 0 ? t : null,
2604
+ screenshots: e.length > 0 ? e : null,
2605
2605
  websiteUrl: m.websiteUrl || null,
2606
2606
  documentationUrl: m.documentationUrl || null,
2607
2607
  githubUrl: m.githubUrl || null,
@@ -2610,271 +2610,271 @@ var pt = ({ app: e, 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"), b.current = m;
2613
+ } }), O("success"), y("success"), x.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: 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", {
2619
+ }, { upload: te, uploading: ne, progress: ae, error: oe } = ue(c, l, u, d, "/DevPortal/Assets"), { upload: ce, uploading: le, progress: A, error: j } = ue(c, l, u, d, "/DevPortal/Assets"), { upload: fe, uploading: me, progress: he, error: I } = ue(c, l, u, d, "/DevPortal/Assets"), ye = lt.has(m.manifestItemType), be = t.status === "SUBMITTED";
2620
+ return /* @__PURE__ */ W("div", {
2621
2621
  className: "space-y-8 max-w-3xl",
2622
2622
  children: [
2623
- e.status === "PUBLISHED" ? /* @__PURE__ */ G("div", {
2623
+ t.status === "PUBLISHED" ? /* @__PURE__ */ W("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__ */ W(ge, {
2625
+ children: [/* @__PURE__ */ U(ge, {
2626
2626
  size: 16,
2627
2627
  className: "text-success mt-0.5 shrink-0"
2628
- }), /* @__PURE__ */ G("div", {
2628
+ }), /* @__PURE__ */ W("div", {
2629
2629
  className: "text-sm",
2630
- children: [/* @__PURE__ */ W("span", {
2630
+ children: [/* @__PURE__ */ U("span", {
2631
2631
  className: "font-medium text-success",
2632
2632
  children: p("devportal.storeListing.published", "Published")
2633
- }), e.publishedAt && /* @__PURE__ */ G("span", {
2633
+ }), t.publishedAt && /* @__PURE__ */ W("span", {
2634
2634
  className: "text-text-secondary ml-2",
2635
2635
  children: [
2636
2636
  p("devportal.storeListing.since", "since"),
2637
2637
  " ",
2638
- new Date(e.publishedAt).toLocaleDateString()
2638
+ new Date(t.publishedAt).toLocaleDateString()
2639
2639
  ]
2640
2640
  })]
2641
2641
  })]
2642
- }) : ye ? /* @__PURE__ */ G("div", {
2642
+ }) : be ? /* @__PURE__ */ W("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__ */ G("div", {
2644
+ children: [/* @__PURE__ */ W("div", {
2645
2645
  className: "flex items-start gap-3",
2646
- children: [/* @__PURE__ */ W(ve, {
2646
+ children: [/* @__PURE__ */ U(ve, {
2647
2647
  size: 16,
2648
2648
  className: "text-primary mt-0.5 shrink-0"
2649
- }), /* @__PURE__ */ G("div", {
2649
+ }), /* @__PURE__ */ W("div", {
2650
2650
  className: "text-sm",
2651
2651
  children: [
2652
- /* @__PURE__ */ W("span", {
2652
+ /* @__PURE__ */ U("span", {
2653
2653
  className: "font-medium text-primary",
2654
2654
  children: p("devportal.storeListing.underReview", "Submitted for review")
2655
2655
  }),
2656
- e.submittedAt && /* @__PURE__ */ W("span", {
2656
+ t.submittedAt && /* @__PURE__ */ U("span", {
2657
2657
  className: "text-text-secondary ml-2",
2658
- children: new Date(e.submittedAt).toLocaleDateString()
2658
+ children: new Date(t.submittedAt).toLocaleDateString()
2659
2659
  }),
2660
- e.reviewStatus && /* @__PURE__ */ G("span", {
2660
+ t.reviewStatus && /* @__PURE__ */ W("span", {
2661
2661
  className: "text-text-secondary ml-2",
2662
- children: ["· ", e.reviewStatus]
2662
+ children: ["· ", t.reviewStatus]
2663
2663
  })
2664
2664
  ]
2665
2665
  })]
2666
- }), s && /* @__PURE__ */ G("button", {
2666
+ }), s && /* @__PURE__ */ W("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__ */ W(R, { size: 12 })]
2670
+ children: [p("devportal.viewStatus", "View Status"), /* @__PURE__ */ U(L, { size: 12 })]
2671
2671
  })]
2672
- }) : /* @__PURE__ */ G("div", {
2672
+ }) : /* @__PURE__ */ W("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__ */ W(F, {
2674
+ children: [/* @__PURE__ */ U(pe, {
2675
2675
  size: 16,
2676
2676
  className: "text-warning mt-0.5 shrink-0"
2677
- }), /* @__PURE__ */ G("div", {
2677
+ }), /* @__PURE__ */ W("div", {
2678
2678
  className: "text-sm",
2679
- children: [/* @__PURE__ */ W("span", {
2679
+ children: [/* @__PURE__ */ U("span", {
2680
2680
  className: "font-medium text-warning",
2681
2681
  children: p("devportal.storeListing.draft", "Draft")
2682
- }), /* @__PURE__ */ W("span", {
2682
+ }), /* @__PURE__ */ U("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__ */ W(C, {
2688
+ /* @__PURE__ */ U(S, {
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__ */ G("div", {
2691
+ children: /* @__PURE__ */ W("div", {
2692
2692
  className: "space-y-6",
2693
2693
  children: [
2694
- /* @__PURE__ */ W(ie, {
2694
+ /* @__PURE__ */ U(re, {
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
- T("manifestItemType", t), ct.has(t) ? T("manifestInstallType", "json") : m.manifestInstallType === "json" && T("manifestInstallType", "zip");
2699
+ E("manifestItemType", t), lt.has(t) ? E("manifestInstallType", "json") : m.manifestInstallType === "json" && E("manifestInstallType", "zip");
2700
2700
  },
2701
- options: ut[e.appType] ?? ut.APP,
2701
+ options: dt[t.appType] ?? dt.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__ */ W(k, {
2705
+ /* @__PURE__ */ U(k, {
2706
2706
  label: p("devportal.manifestDisplayName", "Display Name"),
2707
2707
  value: m.manifestDisplayName,
2708
- onChange: (e) => T("manifestDisplayName", e.target.value),
2708
+ onChange: (e) => E("manifestDisplayName", e.target.value),
2709
2709
  placeholder: "My Awesome Node"
2710
2710
  }),
2711
- L && /* @__PURE__ */ W(ae, {
2712
- label: e.appType === "WORKFLOW" ? p("devportal.workflowJsonContent", "Workflow Canvas Definition (JSON)") : p("devportal.jsonContent", "Template Definition (JSON)"),
2711
+ ye && /* @__PURE__ */ U(ie, {
2712
+ label: t.appType === "WORKFLOW" ? p("devportal.workflowJsonContent", "Workflow Canvas Definition (JSON)") : p("devportal.jsonContent", "Template Definition (JSON)"),
2713
2713
  value: m.manifestJsonContent,
2714
- onChange: (e) => T("manifestJsonContent", e.target.value),
2714
+ onChange: (e) => E("manifestJsonContent", e.target.value),
2715
2715
  rows: 12,
2716
2716
  placeholder: "{\n \"nodes\": [],\n \"edges\": []\n}",
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.")
2717
+ hint: t.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__ */ W(C, {
2722
+ /* @__PURE__ */ U(S, {
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__ */ G("div", {
2725
+ children: /* @__PURE__ */ W("div", {
2726
2726
  className: "space-y-5",
2727
2727
  children: [
2728
- /* @__PURE__ */ G("div", {
2728
+ /* @__PURE__ */ W("div", {
2729
2729
  className: "grid gap-5 sm:grid-cols-2",
2730
- children: [/* @__PURE__ */ W(ot, {
2730
+ children: [/* @__PURE__ */ U(st, {
2731
2731
  label: p("devportal.iconUrl", "Icon"),
2732
2732
  value: m.iconUrl,
2733
- onChange: (e) => T("iconUrl", e),
2733
+ onChange: (e) => E("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: re,
2738
+ progress: ae,
2739
2739
  error: oe
2740
- }), /* @__PURE__ */ W(ot, {
2740
+ }), /* @__PURE__ */ U(st, {
2741
2741
  label: p("devportal.bannerUrl", "Banner"),
2742
2742
  value: m.bannerUrl,
2743
- onChange: (e) => T("bannerUrl", e),
2743
+ onChange: (e) => E("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: se,
2746
+ upload: ce,
2747
2747
  uploading: le,
2748
- progress: ue,
2749
- error: A
2748
+ progress: A,
2749
+ error: j
2750
2750
  })]
2751
2751
  }),
2752
- /* @__PURE__ */ W(k, {
2752
+ /* @__PURE__ */ U(k, {
2753
2753
  label: p("devportal.videoUrl", "Demo Video URL"),
2754
2754
  value: m.videoUrl,
2755
- onChange: (e) => T("videoUrl", e.target.value),
2755
+ onChange: (e) => E("videoUrl", e.target.value),
2756
2756
  placeholder: "https://...",
2757
2757
  hint: p("devportal.videoUrlHint", "YouTube or Vimeo embed URL")
2758
2758
  }),
2759
- /* @__PURE__ */ W(ce, {
2759
+ /* @__PURE__ */ U(se, {
2760
2760
  label: p("devportal.shortDescription", "Short Description"),
2761
2761
  value: m.shortDescription,
2762
- onChange: (e) => T("shortDescription", e),
2762
+ onChange: (e) => E("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__ */ W(ce, {
2767
+ /* @__PURE__ */ U(se, {
2768
2768
  label: p("devportal.longDescription", "Full Description"),
2769
2769
  value: m.description,
2770
- onChange: (e) => T("description", e),
2770
+ onChange: (e) => E("description", e),
2771
2771
  rows: 5,
2772
2772
  hint: p("devportal.fullDescHint", "Markdown supported")
2773
2773
  }),
2774
- /* @__PURE__ */ W(st, {
2774
+ /* @__PURE__ */ U(ct, {
2775
2775
  urls: m.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean),
2776
- onChange: (e) => T("screenshotsText", e.join("\n")),
2777
- upload: j,
2778
- uploading: pe,
2779
- progress: me,
2780
- error: he
2776
+ onChange: (e) => E("screenshotsText", e.join("\n")),
2777
+ upload: fe,
2778
+ uploading: me,
2779
+ progress: he,
2780
+ error: I
2781
2781
  })
2782
2782
  ]
2783
2783
  })
2784
2784
  }),
2785
- /* @__PURE__ */ W(C, {
2785
+ /* @__PURE__ */ U(S, {
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__ */ G("div", {
2788
+ children: /* @__PURE__ */ W("div", {
2789
2789
  className: "grid gap-4 sm:grid-cols-2",
2790
2790
  children: [
2791
- /* @__PURE__ */ W(k, {
2791
+ /* @__PURE__ */ U(k, {
2792
2792
  label: p("devportal.websiteUrl", "Website"),
2793
2793
  value: m.websiteUrl,
2794
- onChange: (e) => T("websiteUrl", e.target.value),
2794
+ onChange: (e) => E("websiteUrl", e.target.value),
2795
2795
  placeholder: "https://..."
2796
2796
  }),
2797
- /* @__PURE__ */ W(k, {
2797
+ /* @__PURE__ */ U(k, {
2798
2798
  label: p("devportal.documentationUrl", "Documentation"),
2799
2799
  value: m.documentationUrl,
2800
- onChange: (e) => T("documentationUrl", e.target.value),
2800
+ onChange: (e) => E("documentationUrl", e.target.value),
2801
2801
  placeholder: "https://..."
2802
2802
  }),
2803
- /* @__PURE__ */ W(k, {
2803
+ /* @__PURE__ */ U(k, {
2804
2804
  label: p("devportal.githubUrl", "GitHub"),
2805
2805
  value: m.githubUrl,
2806
- onChange: (e) => T("githubUrl", e.target.value),
2806
+ onChange: (e) => E("githubUrl", e.target.value),
2807
2807
  placeholder: "https://github.com/..."
2808
2808
  }),
2809
- /* @__PURE__ */ W(k, {
2809
+ /* @__PURE__ */ U(k, {
2810
2810
  label: p("devportal.supportUrl", "Support"),
2811
2811
  value: m.supportUrl,
2812
- onChange: (e) => T("supportUrl", e.target.value),
2812
+ onChange: (e) => E("supportUrl", e.target.value),
2813
2813
  placeholder: "https://..."
2814
2814
  }),
2815
- /* @__PURE__ */ W(k, {
2815
+ /* @__PURE__ */ U(k, {
2816
2816
  label: `${p("devportal.privacyPolicyUrl", "Privacy Policy")} *`,
2817
2817
  value: m.privacyPolicyUrl,
2818
- onChange: (e) => T("privacyPolicyUrl", e.target.value),
2818
+ onChange: (e) => E("privacyPolicyUrl", e.target.value),
2819
2819
  placeholder: "https://...",
2820
2820
  hint: p("devportal.requiredForStore", "Required for store submission")
2821
2821
  }),
2822
- /* @__PURE__ */ W(k, {
2822
+ /* @__PURE__ */ U(k, {
2823
2823
  label: `${p("devportal.termsOfServiceUrl", "Terms of Service")} *`,
2824
2824
  value: m.termsOfServiceUrl,
2825
- onChange: (e) => T("termsOfServiceUrl", e.target.value),
2825
+ onChange: (e) => E("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__ */ G("div", {
2832
+ /* @__PURE__ */ W("div", {
2833
2833
  className: "border-t pt-6 space-y-3",
2834
2834
  children: [
2835
- v === "success" && /* @__PURE__ */ G("div", {
2835
+ v === "success" && /* @__PURE__ */ W("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__ */ W(ge, {
2837
+ children: [/* @__PURE__ */ U(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__ */ G("div", {
2842
+ v === "error" && /* @__PURE__ */ W("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__ */ W(F, {
2844
+ children: [/* @__PURE__ */ U(pe, {
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__ */ G("div", {
2849
+ /* @__PURE__ */ W("div", {
2850
2850
  className: "flex flex-wrap items-center gap-3",
2851
2851
  children: [
2852
- /* @__PURE__ */ W("button", {
2852
+ /* @__PURE__ */ U("button", {
2853
2853
  type: "button",
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"),
2854
+ onClick: ee,
2855
+ disabled: g || !D || !w,
2856
+ title: D ? w ? void 0 : p("devportal.storeListing.noChanges", "All changes saved — edit any field to save again") : p("devportal.storeListing.requiredFieldsHint", "Fill in Short Description, Privacy Policy URL, and Terms of Service URL to save"),
2857
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__ */ G(U, { children: [/* @__PURE__ */ W(z, {
2858
+ children: g ? /* @__PURE__ */ W(H, { children: [/* @__PURE__ */ U(R, {
2859
2859
  size: 16,
2860
2860
  className: "animate-spin"
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")] })
2861
+ }), p("devportal.saving", "Saving…")] }) : w ? /* @__PURE__ */ W(H, { children: [/* @__PURE__ */ U(Ne, { size: 16 }), p("devportal.saveStoreListing", "Save Store Listing")] }) : /* @__PURE__ */ W(H, { children: [/* @__PURE__ */ U(F, { size: 16 }), p("devportal.saved", "Saved")] })
2862
2862
  }),
2863
- !E && /* @__PURE__ */ W("p", {
2863
+ !D && /* @__PURE__ */ U("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__ */ G("button", {
2867
+ r && n === 0 && a && /* @__PURE__ */ W("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__ */ W(_e, { size: 15 })]
2871
+ children: [p("devportal.nextUploadVersion", "Next: Upload a Version"), /* @__PURE__ */ U(_e, { size: 15 })]
2872
2872
  }),
2873
- (!r || n > 0) && !i && o && /* @__PURE__ */ G("button", {
2873
+ (!r || n > 0) && !i && o && /* @__PURE__ */ W("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__ */ W(_e, { size: 15 })]
2877
+ children: [p("devportal.nextSetPricing", "Next: Set Pricing"), /* @__PURE__ */ U(_e, { size: 15 })]
2878
2878
  })
2879
2879
  ]
2880
2880
  })
@@ -2882,22 +2882,22 @@ var pt = ({ app: e, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2882
2882
  })
2883
2883
  ]
2884
2884
  });
2885
- }, $ = ({ label: e, value: t, trend: r }) => {
2885
+ }, Q = ({ label: e, value: n, trend: r }) => {
2886
2886
  let { t: i } = P();
2887
- return /* @__PURE__ */ G(Ve, {
2887
+ return /* @__PURE__ */ W(He, {
2888
2888
  treatment: "metric",
2889
2889
  className: "p-4",
2890
2890
  children: [
2891
- /* @__PURE__ */ W("p", {
2891
+ /* @__PURE__ */ U("p", {
2892
2892
  className: "text-sm text-text-secondary",
2893
2893
  children: e
2894
2894
  }),
2895
- /* @__PURE__ */ W("p", {
2895
+ /* @__PURE__ */ U("p", {
2896
2896
  className: "text-2xl font-bold tabular-nums",
2897
- children: t
2897
+ children: n
2898
2898
  }),
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"),
2899
+ r !== void 0 && /* @__PURE__ */ W("p", {
2900
+ className: t("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 pt = ({ app: e, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2910
2910
  })
2911
2911
  ]
2912
2912
  });
2913
- }, mt = ({ label: e, url: t }) => /* @__PURE__ */ G("a", {
2913
+ }, $ = ({ label: e, url: t }) => /* @__PURE__ */ W("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__ */ W(R, { size: 14 }), e]
2918
+ children: [/* @__PURE__ */ U(L, { 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__ */ W("div", {
3004
+ var bt = ({ level: e, onChange: t }) => /* @__PURE__ */ U("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__ */ W("button", {
3006
+ children: ["read", "write"].map((n) => /* @__PURE__ */ U("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), [_] = x(), v = (e, t) => {
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), [_] = b(), 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
- }, b = () => {
3020
+ }, x = () => {
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
- }, S = async () => {
3026
+ }, C = async () => {
3027
3027
  m(!0);
3028
3028
  try {
3029
3029
  await _({ variables: {
@@ -3039,58 +3039,58 @@ var bt = ({ level: e, onChange: t }) => /* @__PURE__ */ W("div", {
3039
3039
  } finally {
3040
3040
  m(!1);
3041
3041
  }
3042
- }, w = /* @__PURE__ */ W("div", {
3042
+ }, w = /* @__PURE__ */ U("div", {
3043
3043
  className: "rounded-lg border border-border-subtle divide-y divide-border-subtle",
3044
- children: a.map((e) => /* @__PURE__ */ G("div", {
3044
+ children: a.map((e) => /* @__PURE__ */ W("div", {
3045
3045
  className: "flex items-center gap-3 px-4 py-3 hover:bg-bg-sunken/30 transition-colors",
3046
- children: [/* @__PURE__ */ G("div", {
3046
+ children: [/* @__PURE__ */ W("div", {
3047
3047
  className: "flex-1 min-w-0",
3048
3048
  children: [
3049
- /* @__PURE__ */ W("p", {
3049
+ /* @__PURE__ */ U("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__ */ W("p", {
3053
+ ht[e.resource]?.description && /* @__PURE__ */ U("p", {
3054
3054
  className: "text-xs text-text-secondary",
3055
3055
  children: ht[e.resource].description
3056
3056
  }),
3057
- !ht[e.resource] && /* @__PURE__ */ W("p", {
3057
+ !ht[e.resource] && /* @__PURE__ */ U("p", {
3058
3058
  className: "text-xs text-text-tertiary font-mono",
3059
3059
  children: "custom scope"
3060
3060
  })
3061
3061
  ]
3062
- }), n ? /* @__PURE__ */ W("span", {
3062
+ }), n ? /* @__PURE__ */ U("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__ */ G(U, { children: [/* @__PURE__ */ W(bt, {
3065
+ }) : /* @__PURE__ */ W(H, { children: [/* @__PURE__ */ U(bt, {
3066
3066
  level: e.level,
3067
3067
  onChange: (t) => v(e.resource, t)
3068
- }), /* @__PURE__ */ W("button", {
3068
+ }), /* @__PURE__ */ U("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__ */ W(Le, { size: 14 })
3073
+ children: /* @__PURE__ */ U(Le, { size: 14 })
3074
3074
  })] })]
3075
3075
  }, e.resource))
3076
3076
  });
3077
- return /* @__PURE__ */ W(C, {
3077
+ return /* @__PURE__ */ U(S, {
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__ */ W("div", {
3080
+ children: /* @__PURE__ */ U("div", {
3081
3081
  className: "space-y-4",
3082
- children: n ? /* @__PURE__ */ G(U, { children: [/* @__PURE__ */ G("div", {
3082
+ children: n ? /* @__PURE__ */ W(H, { children: [/* @__PURE__ */ W("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__ */ W(Ce, {
3084
+ children: [/* @__PURE__ */ U(Ce, {
3085
3085
  size: 15,
3086
3086
  className: "flex-shrink-0 mt-0.5 text-status-warning-text"
3087
- }), /* @__PURE__ */ G("span", {
3087
+ }), /* @__PURE__ */ W("span", {
3088
3088
  className: "text-status-warning-text",
3089
3089
  children: [
3090
- /* @__PURE__ */ W("strong", { children: "Permission changes require a new version." }),
3090
+ /* @__PURE__ */ U("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__ */ W("button", {
3093
+ r && /* @__PURE__ */ U("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__ */ W("div", {
3098
3098
  })
3099
3099
  ]
3100
3100
  })]
3101
- }), a.length === 0 ? /* @__PURE__ */ W("div", {
3101
+ }), a.length === 0 ? /* @__PURE__ */ U("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__ */ G(U, { children: [
3105
- a.length === 0 ? /* @__PURE__ */ G("div", {
3104
+ }) : w] }) : /* @__PURE__ */ W(H, { children: [
3105
+ a.length === 0 ? /* @__PURE__ */ W("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__ */ W(Me, {
3108
+ /* @__PURE__ */ U(z, {
3109
3109
  size: 28,
3110
3110
  className: "opacity-25"
3111
3111
  }),
3112
- /* @__PURE__ */ W("p", {
3112
+ /* @__PURE__ */ U("p", {
3113
3113
  className: "text-sm font-medium text-text-primary",
3114
3114
  children: "No permissions configured"
3115
3115
  }),
3116
- /* @__PURE__ */ W("p", {
3116
+ /* @__PURE__ */ U("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__ */ G("div", {
3122
+ s ? /* @__PURE__ */ W("div", {
3123
3123
  className: "rounded-lg border border-border-subtle p-3 flex items-center gap-2 flex-wrap",
3124
3124
  children: [
3125
- /* @__PURE__ */ W("input", {
3125
+ /* @__PURE__ */ U("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" && b(), e.key === "Escape" && c(!1);
3130
+ e.key === "Enter" && x(), 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__ */ W("datalist", {
3137
+ /* @__PURE__ */ U("datalist", {
3138
3138
  id: "perm-resource-suggestions",
3139
- children: gt.filter((e) => !a.some((t) => t.resource === e)).map((e) => /* @__PURE__ */ W("option", {
3139
+ children: gt.filter((e) => !a.some((t) => t.resource === e)).map((e) => /* @__PURE__ */ U("option", {
3140
3140
  value: e,
3141
3141
  children: ht[e].label
3142
3142
  }, e))
3143
3143
  }),
3144
- /* @__PURE__ */ W(bt, {
3144
+ /* @__PURE__ */ U(bt, {
3145
3145
  level: d,
3146
3146
  onChange: f
3147
3147
  }),
3148
- /* @__PURE__ */ W("button", {
3148
+ /* @__PURE__ */ U("button", {
3149
3149
  type: "button",
3150
- onClick: b,
3150
+ onClick: x,
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__ */ W("button", {
3155
+ /* @__PURE__ */ U("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__ */ W(Le, { size: 14 })
3161
+ children: /* @__PURE__ */ U(Le, { size: 14 })
3162
3162
  })
3163
3163
  ]
3164
- }) : /* @__PURE__ */ G("button", {
3164
+ }) : /* @__PURE__ */ W("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__ */ W(B, { size: 14 }), "Add permission"]
3168
+ children: [/* @__PURE__ */ U(ke, { size: 14 }), "Add permission"]
3169
3169
  }),
3170
- /* @__PURE__ */ G("div", {
3170
+ /* @__PURE__ */ W("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__ */ W(Ce, {
3172
+ children: [/* @__PURE__ */ U(Ce, {
3173
3173
  size: 14,
3174
3174
  className: "flex-shrink-0 mt-0.5"
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."] })]
3175
+ }), /* @__PURE__ */ W("span", { children: [/* @__PURE__ */ U("strong", { children: "Read & Write" }), " implies Read. Request only what your app genuinely needs — fewer permissions build more user trust."] })]
3176
3176
  }),
3177
- /* @__PURE__ */ G("div", {
3177
+ /* @__PURE__ */ W("div", {
3178
3178
  className: "flex items-center justify-end gap-3",
3179
- children: [h && /* @__PURE__ */ G("span", {
3179
+ children: [h && /* @__PURE__ */ W("span", {
3180
3180
  className: "flex items-center gap-1.5 text-sm text-status-success-text",
3181
- children: [/* @__PURE__ */ W(ge, { size: 14 }), "Saved"]
3182
- }), /* @__PURE__ */ G("button", {
3181
+ children: [/* @__PURE__ */ U(ge, { size: 14 }), "Saved"]
3182
+ }), /* @__PURE__ */ W("button", {
3183
3183
  type: "button",
3184
- onClick: () => void S(),
3184
+ onClick: () => void C(),
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__ */ W(z, {
3187
+ children: [p ? /* @__PURE__ */ U(R, {
3188
3188
  size: 14,
3189
3189
  className: "animate-spin"
3190
- }) : /* @__PURE__ */ W(Me, { size: 14 }), "Save Permissions"]
3190
+ }) : /* @__PURE__ */ U(z, { size: 14 }), "Save Permissions"]
3191
3191
  })]
3192
3192
  })
3193
3193
  ] })
@@ -3195,6 +3195,6 @@ var bt = ({ level: e, onChange: t }) => /* @__PURE__ */ W("div", {
3195
3195
  });
3196
3196
  };
3197
3197
  //#endregion
3198
- export { Ge as ApplicationDetailPage };
3198
+ export { Ke as ApplicationDetailPage };
3199
3199
 
3200
3200
  //# sourceMappingURL=ApplicationDetailPage.js.map