@burdenoff/microfe-devportal 2026.728.1 → 2026.801.1

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