@burdenoff/microfe-devportal 2026.624.23 → 2026.624.26

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.
@@ -4,27 +4,27 @@ import { LoadingState as n } from "../components/LoadingState.js";
4
4
  import { EmptyState as r } from "../components/EmptyState.js";
5
5
  import { useCurrentUserDelegationsQuery as i, useDeactivateAppMutation as a, useGetApplicationAnalyticsQuery as o, useGetApplicationQuery as s, useGetMyPublisherQuery as c, useGetPublisherProductsQuery as l, useGetStoreInstallationsQuery as u, useGetWebhooksQuery as d, useGetWorkspaceInstallationQuery as f, useInstallApplicationMutation as p, useRevokeDelegationMutation as m, useRotateAppSecretMutation as h, useSubmitApplicationMutation as g, useUninstallApplicationMutation as _, useUpdateApplicationMutation as v } from "../../generated/global-operations.js";
6
6
  import { PageLayout as y, PageSection as b } from "../components/PageLayout.js";
7
- import { APP_TYPE_LABELS as x } from "../utils/constants.js";
8
- import { FeaturedBadge as S, StatusBadge as C, VerifiedBadge as ee } from "../components/StatusBadge.js";
9
- import { SelectionCheckbox as w } from "../components/SelectionCheckbox.js";
10
- import { nativeNotify as T } from "../../utils/nativeBridge.js";
11
- import { NewSecretAlert as te } from "../components/SecretDisplay.js";
12
- import { DataTable as E, DetailList as ne } from "../components/DataTable.js";
13
- import { InputField as D, SelectField as re, TextareaField as O } from "../components/FormField.js";
14
- import { ConfirmDialog as k } from "../components/ConfirmDialog.js";
15
- import { GrantDelegationModal as ie } from "../components/GrantDelegationModal.js";
16
- import { DEVPORTAL_PERMISSIONS as ae } from "../constants/permissions.js";
17
- import { useDevportalPermission as oe } from "../hooks/usePermission.js";
18
- import { usePackageUpload as se } from "../hooks/usePackageUpload.js";
7
+ import { APP_TYPE_LABELS as ee } from "../utils/constants.js";
8
+ import { FeaturedBadge as x, StatusBadge as S, VerifiedBadge as te } from "../components/StatusBadge.js";
9
+ import { SelectionCheckbox as C } from "../components/SelectionCheckbox.js";
10
+ import { nativeNotify as w } from "../../utils/nativeBridge.js";
11
+ import { NewSecretAlert as ne } from "../components/SecretDisplay.js";
12
+ import { DataTable as T, DetailList as E } from "../components/DataTable.js";
13
+ import { InputField as D, SelectField as re, TextareaField as ie } from "../components/FormField.js";
14
+ import { ConfirmDialog as O } from "../components/ConfirmDialog.js";
15
+ import { GrantDelegationModal as ae } from "../components/GrantDelegationModal.js";
16
+ import { DEVPORTAL_PERMISSIONS as oe } from "../constants/permissions.js";
17
+ import { useDevportalPermission as se } from "../hooks/usePermission.js";
18
+ import { usePackageUpload as k } from "../hooks/usePackageUpload.js";
19
19
  import { useCallback as A, useEffect as ce, useMemo as j, useRef as M, useState as N } from "react";
20
20
  import { useI18n as P } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
21
- import { AlertCircle as le, AppWindow as F, BarChart3 as I, CheckCircle as L, CheckCircle2 as ue, Clock as R, Download as de, Edit as fe, ExternalLink as z, FlaskConical as pe, Info as B, Key as me, Loader2 as V, MoreHorizontal as he, Plus as H, Power as ge, RefreshCw as _e, SendHorizontal as ve, Shield as ye, Store as U, Upload as W, Users as G, Webhook as be, X as xe, XCircle as Se } from "lucide-react";
22
- import { useParams as Ce } from "react-router-dom";
23
- import { Fragment as K, jsx as q, jsxs as J } from "react/jsx-runtime";
24
- import { gql as we } from "@apollo/client";
25
- import { useMutation as Y, useQuery as Te } from "@apollo/client/react";
21
+ import { AlertCircle as le, AppWindow as F, BarChart3 as I, CheckCircle as L, CheckCircle2 as ue, Clock as de, Download as fe, Edit as pe, ExternalLink as R, FlaskConical as me, Info as z, Key as he, Loader2 as B, MoreHorizontal as ge, Plus as V, Power as _e, RefreshCw as ve, SendHorizontal as ye, Shield as H, Store as be, Upload as U, Users as W, Webhook as xe, X as Se, XCircle as Ce } from "lucide-react";
22
+ import { useParams as we, useSearchParams as Te } from "react-router-dom";
23
+ import { Fragment as G, jsx as K, jsxs as q } from "react/jsx-runtime";
24
+ import { gql as J } from "@apollo/client";
25
+ import { useMutation as Ee, useQuery as Y } from "@apollo/client/react";
26
26
  //#region src/devportal/pages/ApplicationDetailPage.tsx
27
- function Ee(e) {
27
+ function De(e) {
28
28
  return e ? {
29
29
  id: e.id,
30
30
  name: e.name,
@@ -79,7 +79,7 @@ function Ee(e) {
79
79
  updatedAt: e.updatedAt
80
80
  } : null;
81
81
  }
82
- function De(e) {
82
+ function Oe(e) {
83
83
  return {
84
84
  id: e.id,
85
85
  applicationId: e.applicationId,
@@ -103,7 +103,7 @@ function De(e) {
103
103
  updatedAt: e.updatedAt
104
104
  };
105
105
  }
106
- function Oe(e) {
106
+ function X(e) {
107
107
  return {
108
108
  id: e.id,
109
109
  applicationId: e.applicationId,
@@ -150,17 +150,17 @@ var Ae = [
150
150
  {
151
151
  id: "permissions",
152
152
  label: "Permissions",
153
- icon: ye
153
+ icon: H
154
154
  },
155
155
  {
156
156
  id: "webhooks",
157
157
  label: "Webhooks",
158
- icon: be
158
+ icon: xe
159
159
  },
160
160
  {
161
161
  id: "delegations",
162
162
  label: "Delegations",
163
- icon: G
163
+ icon: W
164
164
  },
165
165
  {
166
166
  id: "analytics",
@@ -170,327 +170,341 @@ var Ae = [
170
170
  {
171
171
  id: "playground",
172
172
  label: "API Playground",
173
- icon: z
173
+ icon: R
174
174
  },
175
175
  {
176
176
  id: "store-listing",
177
177
  label: "Marketplace Listing",
178
- icon: U
178
+ icon: be
179
179
  }
180
180
  ], je = {
181
181
  ACTIVE: "bg-status-success-bg-subtle text-status-success-text",
182
182
  REVOKED: "bg-status-error-bg-subtle text-status-error-text",
183
183
  EXPIRED: "bg-bg-sunken text-text-secondary"
184
- }, X = ({ message: e = "Loading..." }) => /* @__PURE__ */ J("div", {
184
+ }, Z = ({ message: e = "Loading..." }) => /* @__PURE__ */ q("div", {
185
185
  className: "flex items-center justify-center gap-3 py-12",
186
- children: [/* @__PURE__ */ q(V, {
186
+ children: [/* @__PURE__ */ K(B, {
187
187
  size: 20,
188
188
  className: "animate-spin text-muted-foreground"
189
- }), /* @__PURE__ */ q("p", {
189
+ }), /* @__PURE__ */ K("p", {
190
190
  className: "text-sm text-muted-foreground",
191
191
  children: e
192
192
  })]
193
- }), Z = ({ message: e }) => /* @__PURE__ */ J("div", {
193
+ }), Me = ({ message: e }) => /* @__PURE__ */ q("div", {
194
194
  className: "flex flex-col items-center justify-center gap-2 py-12 text-center",
195
- children: [/* @__PURE__ */ q(le, {
195
+ children: [/* @__PURE__ */ K(le, {
196
196
  size: 32,
197
197
  className: "text-destructive"
198
- }), /* @__PURE__ */ q("p", {
198
+ }), /* @__PURE__ */ K("p", {
199
199
  className: "text-sm text-muted-foreground",
200
200
  children: e
201
201
  })]
202
- }), Me = () => {
202
+ }), Ne = () => {
203
203
  let { navigate: i, basePath: o, workspaceId: c } = e(), { t: l } = P(), u = (e, t) => {
204
204
  let n = l(e);
205
205
  return n === e ? t : n;
206
- }, { allowed: d } = oe(ae.APP_UPDATE), { allowed: m } = oe(ae.APP_DELETE), { appId: g } = Ce(), [v, b] = N("overview"), [w, E] = N(!1), [ne, D] = N(!1), [re, O] = N(null), [se, ce] = N(!1), { data: j, loading: M, error: I } = s({
206
+ }, { allowed: d } = se(oe.APP_UPDATE), { allowed: m } = se(oe.APP_DELETE), { appId: g } = we(), [v, b] = Te(), C = [
207
+ "overview",
208
+ "permissions",
209
+ "webhooks",
210
+ "delegations",
211
+ "analytics",
212
+ "playground",
213
+ "store-listing"
214
+ ], T = v.get("tab"), [E, D] = N(T && C.includes(T) ? T : "overview");
215
+ ce(() => {
216
+ T && C.includes(T) && T !== E && D(T);
217
+ }, [T]);
218
+ let re = (e) => {
219
+ D(e), b((t) => (t.set("tab", e), t), { replace: !0 });
220
+ }, [ie, k] = N(!1), [j, M] = N(!1), [I, L] = N(null), [ue, fe] = N(!1), { data: R, loading: z, error: he } = s({
207
221
  variables: { id: g },
208
222
  skip: !g
209
- }), [L, { loading: ue }] = h(), [de, { loading: z }] = a(), [B, { loading: me }] = p(), [he, { loading: H }] = _(), { data: ye, refetch: U } = f({
223
+ }), [ge, { loading: V }] = h(), [H, { loading: be }] = a(), [U, { loading: W }] = p(), [xe, { loading: Se }] = _(), { data: G, refetch: J } = f({
210
224
  variables: {
211
225
  applicationId: g,
212
226
  workspaceId: c ?? void 0
213
227
  },
214
228
  skip: !c || !g,
215
229
  fetchPolicy: "cache-and-network"
216
- }), W = ye?.appInstallations?.edges?.[0]?.node ?? null, G = A((e) => {
230
+ }), Ee = G?.appInstallations?.edges?.[0]?.node ?? null, Y = A((e) => {
217
231
  i?.(`${o}${e}`);
218
- }, [i, o]), be = A(async () => {
219
- let e = j?.application?.appId;
232
+ }, [i, o]), Oe = A(async () => {
233
+ let e = R?.application?.appId;
220
234
  if (e) try {
221
- let t = (await L({ variables: { id: e } })).data?.rotateAppSecret.clientSecret;
222
- t && O(t), E(!1);
235
+ let t = (await ge({ variables: { id: e } })).data?.rotateAppSecret.clientSecret;
236
+ t && L(t), k(!1);
223
237
  } catch {}
224
- }, [j?.application?.appId, L]), xe = A(async () => {
238
+ }, [R?.application?.appId, ge]), X = A(async () => {
225
239
  if (g) try {
226
- await de({ variables: { id: g } }), D(!1), G("/apps");
240
+ await H({ variables: { id: g } }), M(!1), Y("/apps");
227
241
  } catch {}
228
242
  }, [
229
243
  g,
230
- de,
231
- G
232
- ]), K = A(async () => {
244
+ H,
245
+ Y
246
+ ]), ke = A(async () => {
233
247
  if (!(!g || !c)) try {
234
- await B({ variables: { input: {
248
+ await U({ variables: { input: {
235
249
  applicationId: g,
236
250
  scope: "WORKSPACE",
237
251
  workspaceId: c,
238
252
  autoUpdate: !1
239
- } } }), U(), T("success");
253
+ } } }), J(), w("success");
240
254
  } catch (e) {
241
- console.error("[DevPortal] Test in Workspace failed:", e), T("error");
255
+ console.error("[DevPortal] Test in Workspace failed:", e), w("error");
242
256
  }
243
257
  }, [
244
258
  g,
245
259
  c,
246
- B,
247
- U
248
- ]), we = A(async (e) => {
260
+ U,
261
+ J
262
+ ]), je = A(async (e) => {
249
263
  try {
250
- await he({ variables: { id: e } }), U(), T("success");
264
+ await xe({ variables: { id: e } }), J(), w("success");
251
265
  } catch {
252
- T("error");
266
+ w("error");
253
267
  }
254
- }, [he, U]);
255
- if (M && !j) return /* @__PURE__ */ q(n, { message: u("devportal.loadingApplication", "Loading application...") });
256
- if (I) return /* @__PURE__ */ q(y, {
268
+ }, [xe, J]);
269
+ if (z && !R) return /* @__PURE__ */ K(n, { message: u("devportal.loadingApplication", "Loading application...") });
270
+ if (he) return /* @__PURE__ */ K(y, {
257
271
  title: u("devportal.error", "Error"),
258
272
  backLink: `${o}/apps`,
259
273
  backLabel: u("devportal.backToApplications", "Back to Applications"),
260
- children: /* @__PURE__ */ J("div", {
274
+ children: /* @__PURE__ */ q("div", {
261
275
  className: "flex flex-col items-center justify-center py-12 text-center",
262
276
  children: [
263
- /* @__PURE__ */ q(le, {
277
+ /* @__PURE__ */ K(le, {
264
278
  size: 48,
265
279
  className: "text-destructive mb-4"
266
280
  }),
267
- /* @__PURE__ */ q("h3", {
281
+ /* @__PURE__ */ K("h3", {
268
282
  className: "text-lg font-semibold mb-2",
269
283
  children: u("devportal.failedToLoadApplication", "Failed to load application")
270
284
  }),
271
- /* @__PURE__ */ q("p", {
285
+ /* @__PURE__ */ K("p", {
272
286
  className: "text-sm text-muted-foreground",
273
- children: I.message
287
+ children: he.message
274
288
  })
275
289
  ]
276
290
  })
277
291
  });
278
- let Y = Ee(j?.application);
279
- return Y ? /* @__PURE__ */ J(y, {
280
- title: Y.name,
281
- description: Y.shortDescription,
292
+ let Z = De(R?.application);
293
+ return Z ? /* @__PURE__ */ q(y, {
294
+ title: Z.name,
295
+ description: Z.shortDescription,
282
296
  backLink: `${o}/apps`,
283
297
  backLabel: u("devportal.backToApplications", "Back to Applications"),
284
- actions: /* @__PURE__ */ J("div", {
298
+ actions: /* @__PURE__ */ q("div", {
285
299
  className: "flex items-center gap-2",
286
300
  children: [
287
- Y.appType !== "NODE" && Y.appType !== "WORKFLOW" && /* @__PURE__ */ J("button", {
288
- onClick: () => E(!0),
289
- disabled: !Y.appId,
290
- title: Y.appId ? u("devportal.rotateSecretHint", "Generate a new client secret") : u("devportal.rotateSecretNoClient", "Create an OAuth client first to enable secret rotation"),
301
+ Z.appType !== "NODE" && Z.appType !== "WORKFLOW" && /* @__PURE__ */ q("button", {
302
+ onClick: () => k(!0),
303
+ disabled: !Z.appId,
304
+ title: Z.appId ? u("devportal.rotateSecretHint", "Generate a new client secret") : u("devportal.rotateSecretNoClient", "Create an OAuth client first to enable secret rotation"),
291
305
  className: "inline-flex items-center gap-2 rounded-md border px-4 py-2 text-sm font-medium hover:bg-muted transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
292
- children: [/* @__PURE__ */ q(_e, { size: 16 }), u("devportal.rotateSecret", "Rotate Secret")]
306
+ children: [/* @__PURE__ */ K(ve, { size: 16 }), u("devportal.rotateSecret", "Rotate Secret")]
293
307
  }),
294
- /* @__PURE__ */ J("button", {
295
- onClick: () => G(`/apps/${Y.id}/versions`),
308
+ /* @__PURE__ */ q("button", {
309
+ onClick: () => Y(`/apps/${Z.id}/versions`),
296
310
  className: "inline-flex items-center gap-2 rounded-md border px-4 py-2 text-sm font-medium hover:bg-muted transition-colors",
297
- children: [/* @__PURE__ */ q(R, { size: 16 }), u("devportal.versions", "Versions")]
311
+ children: [/* @__PURE__ */ K(de, { size: 16 }), u("devportal.versions", "Versions")]
298
312
  }),
299
- Y.status !== "PUBLISHED" && /* @__PURE__ */ J("button", {
300
- onClick: () => G(`/apps/${Y.id}/publish`),
313
+ Z.status !== "PUBLISHED" && /* @__PURE__ */ q("button", {
314
+ onClick: () => Y(`/apps/${Z.id}/publish`),
301
315
  className: "inline-flex items-center gap-2 rounded-md border border-primary/40 px-4 py-2 text-sm font-medium text-primary hover:bg-primary/10 transition-colors",
302
- children: [/* @__PURE__ */ q(ve, { size: 16 }), u("devportal.submitForReview", "Submit for Review")]
316
+ children: [/* @__PURE__ */ K(ye, { size: 16 }), u("devportal.submitForReview", "Submit for Review")]
303
317
  }),
304
- Y.appType !== "NODE" && Y.appType !== "WORKFLOW" && (W ? /* @__PURE__ */ J("button", {
305
- onClick: () => void we(W.id),
306
- disabled: H || !c,
318
+ Z.appType !== "NODE" && Z.appType !== "WORKFLOW" && (Ee ? /* @__PURE__ */ q("button", {
319
+ onClick: () => void je(Ee.id),
320
+ disabled: Se || !c,
307
321
  title: u("devportal.uninstallFromWorkspace", "Uninstall this app from your current workspace"),
308
322
  className: "inline-flex items-center gap-2 rounded-md border border-destructive/50 px-4 py-2 text-sm font-medium text-destructive hover:bg-destructive/10 transition-colors disabled:opacity-50",
309
- children: [H ? /* @__PURE__ */ q(V, {
323
+ children: [Se ? /* @__PURE__ */ K(B, {
310
324
  size: 16,
311
325
  className: "animate-spin"
312
- }) : /* @__PURE__ */ q(Se, { size: 16 }), u("devportal.uninstallFromWorkspace", "Uninstall from Workspace")]
313
- }) : /* @__PURE__ */ J("button", {
314
- onClick: () => void K(),
315
- disabled: me || !c,
326
+ }) : /* @__PURE__ */ K(Ce, { size: 16 }), u("devportal.uninstallFromWorkspace", "Uninstall from Workspace")]
327
+ }) : /* @__PURE__ */ q("button", {
328
+ onClick: () => void ke(),
329
+ disabled: W || !c,
316
330
  "aria-disabled": !c,
317
331
  title: c ? u("devportal.testInWorkspaceHint", "Install this app into your current workspace to test it") : u("devportal.noWorkspaceContext", "No workspace context available"),
318
332
  className: "inline-flex items-center gap-2 rounded-md border px-4 py-2 text-sm font-medium hover:bg-muted transition-colors disabled:opacity-50",
319
- children: [me ? /* @__PURE__ */ q(V, {
333
+ children: [W ? /* @__PURE__ */ K(B, {
320
334
  size: 16,
321
335
  className: "animate-spin"
322
- }) : /* @__PURE__ */ q(pe, { size: 16 }), u("devportal.testInWorkspace", "Test in Workspace")]
336
+ }) : /* @__PURE__ */ K(me, { size: 16 }), u("devportal.testInWorkspace", "Test in Workspace")]
323
337
  })),
324
- Y.appType === "NODE" && /* @__PURE__ */ J("button", {
325
- onClick: () => i?.(`/workflows/new?nodeId=${Y.id}`),
338
+ Z.appType === "NODE" && /* @__PURE__ */ q("button", {
339
+ onClick: () => i?.(`/workflows/new?nodeId=${Z.id}`),
326
340
  disabled: !c,
327
341
  "aria-disabled": !c,
328
342
  title: c ? u("devportal.testInWorkflowBuilderHint", "Open a new workflow with this node available in the builder") : u("devportal.noWorkspaceContext", "No workspace context available"),
329
343
  className: "inline-flex items-center gap-2 rounded-md border px-4 py-2 text-sm font-medium hover:bg-muted transition-colors disabled:opacity-50",
330
- children: [/* @__PURE__ */ q(pe, { size: 16 }), u("devportal.testInWorkflowBuilder", "Test in Workflow Builder")]
344
+ children: [/* @__PURE__ */ K(me, { size: 16 }), u("devportal.testInWorkflowBuilder", "Test in Workflow Builder")]
331
345
  }),
332
- /* @__PURE__ */ J("button", {
333
- onClick: () => G(`/apps/${Y.id}/edit`),
346
+ /* @__PURE__ */ q("button", {
347
+ onClick: () => Y(`/apps/${Z.id}/edit`),
334
348
  disabled: !d,
335
349
  "aria-disabled": !d,
336
350
  className: "inline-flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors disabled:opacity-50",
337
- children: [/* @__PURE__ */ q(fe, { size: 16 }), u("devportal.editApp", "Edit App")]
351
+ children: [/* @__PURE__ */ K(pe, { size: 16 }), u("devportal.editApp", "Edit App")]
338
352
  }),
339
- /* @__PURE__ */ J("button", {
340
- onClick: () => D(!0),
353
+ /* @__PURE__ */ q("button", {
354
+ onClick: () => M(!0),
341
355
  disabled: !m,
342
356
  "aria-disabled": !m,
343
357
  className: "inline-flex items-center gap-2 rounded-md border border-border-subtle px-4 py-2 text-sm font-medium text-status-error-text hover:bg-status-error-bg-subtle transition-colors disabled:opacity-50",
344
- children: [/* @__PURE__ */ q(ge, { size: 16 }), u("devportal.deactivate", "Deactivate")]
358
+ children: [/* @__PURE__ */ K(_e, { size: 16 }), u("devportal.deactivate", "Deactivate")]
345
359
  })
346
360
  ]
347
361
  }),
348
362
  children: [
349
- re && /* @__PURE__ */ q(te, {
363
+ I && /* @__PURE__ */ K(ne, {
350
364
  title: u("devportal.newAppSecretGenerated", "New App Secret Generated"),
351
- secret: re,
365
+ secret: I,
352
366
  description: u("devportal.appSecretRotatedDescription", "Your app secret has been rotated. The old secret is no longer valid."),
353
- onDismiss: () => O(null)
367
+ onDismiss: () => L(null)
354
368
  }),
355
- /* @__PURE__ */ J("div", {
369
+ /* @__PURE__ */ q("div", {
356
370
  className: "flex flex-wrap items-center gap-2",
357
371
  children: [
358
- /* @__PURE__ */ q(C, {
359
- status: Y.status,
372
+ /* @__PURE__ */ K(S, {
373
+ status: Z.status,
360
374
  type: "app"
361
375
  }),
362
- /* @__PURE__ */ q(C, {
363
- status: Y.visibility,
376
+ /* @__PURE__ */ K(S, {
377
+ status: Z.visibility,
364
378
  type: "app"
365
379
  }),
366
- Y.isVerified && /* @__PURE__ */ q(ee, { verified: !0 }),
367
- Y.isFeatured && /* @__PURE__ */ q(S, {}),
368
- /* @__PURE__ */ q("span", {
380
+ Z.isVerified && /* @__PURE__ */ K(te, { verified: !0 }),
381
+ Z.isFeatured && /* @__PURE__ */ K(x, {}),
382
+ /* @__PURE__ */ K("span", {
369
383
  className: "text-sm text-muted-foreground",
370
- children: x[Y.appType] || Y.appType
384
+ children: ee[Z.appType] || Z.appType
371
385
  })
372
386
  ]
373
387
  }),
374
- /* @__PURE__ */ q("div", {
388
+ /* @__PURE__ */ K("div", {
375
389
  className: "border-b",
376
- children: /* @__PURE__ */ q("nav", {
390
+ children: /* @__PURE__ */ K("nav", {
377
391
  className: "-mb-px flex gap-4 overflow-x-auto",
378
392
  role: "tablist",
379
393
  "aria-label": u("devportal.applicationSections", "Application sections"),
380
- children: Ae.filter((e) => !((Y.appType === "NODE" || Y.appType === "WORKFLOW") && (e.id === "permissions" || e.id === "webhooks" || e.id === "delegations" || e.id === "playground"))).map((e) => {
394
+ children: Ae.filter((e) => !((Z.appType === "NODE" || Z.appType === "WORKFLOW") && (e.id === "permissions" || e.id === "webhooks" || e.id === "delegations" || e.id === "playground"))).map((e) => {
381
395
  let n = e.icon;
382
- return /* @__PURE__ */ J("button", {
396
+ return /* @__PURE__ */ q("button", {
383
397
  id: `application-tab-${e.id}`,
384
398
  role: "tab",
385
- "aria-selected": v === e.id,
399
+ "aria-selected": E === e.id,
386
400
  "aria-controls": `application-panel-${e.id}`,
387
- onClick: () => b(e.id),
388
- className: t("flex items-center gap-2 border-b-2 px-1 py-3 text-sm font-medium transition-colors", v === e.id ? "border-primary text-primary" : "border-transparent text-muted-foreground hover:text-foreground hover:border-muted-foreground"),
389
- children: [/* @__PURE__ */ q(n, { size: 16 }), e.label]
401
+ onClick: () => re(e.id),
402
+ className: t("flex items-center gap-2 border-b-2 px-1 py-3 text-sm font-medium transition-colors", E === e.id ? "border-primary text-primary" : "border-transparent text-muted-foreground hover:text-foreground hover:border-muted-foreground"),
403
+ children: [/* @__PURE__ */ K(n, { size: 16 }), e.label]
390
404
  }, e.id);
391
405
  })
392
406
  })
393
407
  }),
394
- /* @__PURE__ */ J("div", {
408
+ /* @__PURE__ */ q("div", {
395
409
  className: "mt-6",
396
- id: `application-panel-${v}`,
410
+ id: `application-panel-${E}`,
397
411
  role: "tabpanel",
398
- "aria-labelledby": `application-tab-${v}`,
412
+ "aria-labelledby": `application-tab-${E}`,
399
413
  tabIndex: 0,
400
414
  children: [
401
- v === "overview" && /* @__PURE__ */ q(Ie, { app: Y }),
402
- v === "permissions" && /* @__PURE__ */ q(et, { app: Y }),
403
- v === "webhooks" && /* @__PURE__ */ q(Ne, {
404
- appId: Y.id,
405
- onNavigate: G
415
+ E === "overview" && /* @__PURE__ */ K(Le, { app: Z }),
416
+ E === "permissions" && /* @__PURE__ */ K(tt, { app: Z }),
417
+ E === "webhooks" && /* @__PURE__ */ K(Pe, {
418
+ appId: Z.id,
419
+ onNavigate: Y
406
420
  }),
407
- v === "delegations" && /* @__PURE__ */ q(Pe, {
408
- authAppId: Y.appId || void 0,
409
- appName: Y.name,
410
- onGrantDelegation: () => ce(!0),
411
- onNavigate: G
421
+ E === "delegations" && /* @__PURE__ */ K(Fe, {
422
+ authAppId: Z.appId || void 0,
423
+ appName: Z.name,
424
+ onGrantDelegation: () => fe(!0),
425
+ onNavigate: Y
412
426
  }),
413
- v === "analytics" && /* @__PURE__ */ q(Fe, { app: Y }),
414
- v === "playground" && /* @__PURE__ */ q(Ve, { app: Y }),
415
- v === "store-listing" && /* @__PURE__ */ q(Ze, { app: Y })
427
+ E === "analytics" && /* @__PURE__ */ K(Ie, { app: Z }),
428
+ E === "playground" && /* @__PURE__ */ K(He, { app: Z }),
429
+ E === "store-listing" && /* @__PURE__ */ K(Qe, { app: Z })
416
430
  ]
417
431
  }),
418
- /* @__PURE__ */ q(k, {
419
- open: w,
420
- onOpenChange: E,
421
- onConfirm: be,
432
+ /* @__PURE__ */ K(O, {
433
+ open: ie,
434
+ onOpenChange: k,
435
+ onConfirm: Oe,
422
436
  title: u("devportal.rotateAppSecret", "Rotate App Secret"),
423
437
  description: u("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."),
424
438
  confirmLabel: u("devportal.rotateSecret", "Rotate Secret"),
425
439
  cancelLabel: u("devportal.cancel", "Cancel"),
426
440
  variant: "warning",
427
- loading: ue
441
+ loading: V
428
442
  }),
429
- /* @__PURE__ */ q(k, {
430
- open: ne,
431
- onOpenChange: D,
432
- onConfirm: xe,
443
+ /* @__PURE__ */ K(O, {
444
+ open: j,
445
+ onOpenChange: M,
446
+ onConfirm: X,
433
447
  title: u("devportal.deactivateApplication", "Deactivate Application"),
434
448
  description: u("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."),
435
449
  confirmLabel: u("devportal.deactivate", "Deactivate"),
436
450
  cancelLabel: u("devportal.cancel", "Cancel"),
437
451
  variant: "destructive",
438
- loading: z
452
+ loading: be
439
453
  }),
440
- /* @__PURE__ */ q(ie, {
441
- open: se,
442
- onOpenChange: ce,
443
- appId: Y.appId || "",
444
- appName: Y.name,
445
- appScopes: Y.scopes?.map((e) => e.scope) ?? [],
454
+ /* @__PURE__ */ K(ae, {
455
+ open: ue,
456
+ onOpenChange: fe,
457
+ appId: Z.appId || "",
458
+ appName: Z.name,
459
+ appScopes: Z.scopes?.map((e) => e.scope) ?? [],
446
460
  onSuccess: () => {
447
- ce(!1);
461
+ fe(!1);
448
462
  }
449
463
  })
450
464
  ]
451
- }) : /* @__PURE__ */ q(y, {
465
+ }) : /* @__PURE__ */ K(y, {
452
466
  title: u("devportal.notFound", "Not Found"),
453
467
  backLink: `${o}/apps`,
454
468
  backLabel: u("devportal.backToApplications", "Back to Applications"),
455
- children: /* @__PURE__ */ q(r, {
456
- icon: /* @__PURE__ */ q(F, { size: 48 }),
469
+ children: /* @__PURE__ */ K(r, {
470
+ icon: /* @__PURE__ */ K(F, { size: 48 }),
457
471
  title: u("devportal.applicationNotFound", "Application not found"),
458
472
  description: u("devportal.applicationNotFoundDescription", "The application you're looking for doesn't exist or you don't have access to it.")
459
473
  })
460
474
  });
461
- }, Ne = ({ appId: e, onNavigate: t }) => {
475
+ }, Pe = ({ appId: e, onNavigate: t }) => {
462
476
  let { t: n } = P(), r = (e, t) => {
463
477
  let r = n(e);
464
478
  return r === e ? t : r;
465
479
  }, { data: i, loading: a, error: o } = d({ variables: { applicationId: e } });
466
- return a ? /* @__PURE__ */ q(X, { message: r("devportal.loadingWebhooks", "Loading webhooks...") }) : o ? /* @__PURE__ */ q(Z, { message: o.message }) : /* @__PURE__ */ q(Le, {
480
+ return a ? /* @__PURE__ */ K(Z, { message: r("devportal.loadingWebhooks", "Loading webhooks...") }) : o ? /* @__PURE__ */ K(Me, { message: o.message }) : /* @__PURE__ */ K(Re, {
467
481
  appId: e,
468
- webhooks: (i?.webhooks ?? []).map(De),
482
+ webhooks: (i?.webhooks ?? []).map(Oe),
469
483
  onNavigate: t
470
484
  });
471
- }, Pe = ({ authAppId: e, appName: t, onGrantDelegation: n, onNavigate: a }) => {
485
+ }, Fe = ({ authAppId: e, appName: t, onGrantDelegation: n, onNavigate: a }) => {
472
486
  let { t: o } = P(), s = (e, t) => {
473
487
  let n = o(e);
474
488
  return n === e ? t : n;
475
- }, { 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(ke) : [], [e, c]), C = j(() => S.filter((e) => e.status === "ACTIVE"), [S]), ee = j(() => C.filter((e) => v.has(e.id)), [C, v]), w = C.length > 0 && C.every((e) => v.has(e.id)), T = C.some((e) => v.has(e.id)) && !w, te = A((e, t) => {
489
+ }, { data: c, loading: l, error: u, refetch: d } = i(), [f] = m(), [p, h] = N([]), [g, _] = N(!1), [v, y] = N(/* @__PURE__ */ new Set()), [b, ee] = N(null), x = j(() => c?.currentUserDelegations?.delegations ? c.currentUserDelegations.delegations.filter((t) => t.appId === e).map(ke) : [], [e, c]), S = j(() => x.filter((e) => e.status === "ACTIVE"), [x]), te = j(() => S.filter((e) => v.has(e.id)), [S, v]), C = S.length > 0 && S.every((e) => v.has(e.id)), w = S.some((e) => v.has(e.id)) && !C, ne = A((e, t) => {
476
490
  y((n) => {
477
491
  let r = new Set(n);
478
492
  return t ? r.add(e) : r.delete(e), r;
479
493
  });
480
- }, []), E = A((e) => {
494
+ }, []), T = A((e) => {
481
495
  y((t) => {
482
496
  let n = new Set(t);
483
- return C.forEach((t) => {
497
+ return S.forEach((t) => {
484
498
  e ? n.add(t.id) : n.delete(t.id);
485
499
  }), n;
486
500
  });
487
- }, [C]), ne = A(() => {
501
+ }, [S]), E = A(() => {
488
502
  y(/* @__PURE__ */ new Set());
489
503
  }, []), D = A(async (e) => {
490
504
  _(!0);
491
505
  try {
492
506
  let t = await Promise.allSettled(e.map((e) => f({ variables: { id: e } }))), n = t.filter((e) => e.status === "fulfilled").length, r = t.length - n;
493
- x(`Revoked ${n} delegation${n === 1 ? "" : "s"}${r > 0 ? ` • ${r} failed` : ""}`), y((t) => {
507
+ ee(`Revoked ${n} delegation${n === 1 ? "" : "s"}${r > 0 ? ` • ${r} failed` : ""}`), y((t) => {
494
508
  let n = new Set(t);
495
509
  return e.forEach((e) => n.delete(e)), n;
496
510
  }), h([]), d();
@@ -498,32 +512,32 @@ var Ae = [
498
512
  _(!1);
499
513
  }
500
514
  }, [f, d]);
501
- return e ? l ? /* @__PURE__ */ q(X, { message: s("devportal.loadingDelegations", "Loading delegations...") }) : u ? /* @__PURE__ */ q(Z, { message: u.message }) : /* @__PURE__ */ J(K, { children: [
502
- b && /* @__PURE__ */ q("div", {
515
+ return e ? l ? /* @__PURE__ */ K(Z, { message: s("devportal.loadingDelegations", "Loading delegations...") }) : u ? /* @__PURE__ */ K(Me, { message: u.message }) : /* @__PURE__ */ q(G, { children: [
516
+ b && /* @__PURE__ */ K("div", {
503
517
  className: "rounded-lg border border-border-subtle bg-status-success-bg-subtle p-3 text-sm text-status-success-text",
504
- children: /* @__PURE__ */ J("div", {
518
+ children: /* @__PURE__ */ q("div", {
505
519
  className: "flex items-center justify-between gap-3",
506
- children: [/* @__PURE__ */ q("span", { children: b }), /* @__PURE__ */ q("button", {
507
- onClick: () => x(null),
520
+ children: [/* @__PURE__ */ K("span", { children: b }), /* @__PURE__ */ K("button", {
521
+ onClick: () => ee(null),
508
522
  className: "text-status-success-text hover:text-status-success-text",
509
523
  children: s("devportal.dismiss", "Dismiss")
510
524
  })]
511
525
  })
512
526
  }),
513
- /* @__PURE__ */ q(Re, {
527
+ /* @__PURE__ */ K(ze, {
514
528
  appName: t,
515
- delegations: S,
529
+ delegations: x,
516
530
  onGrantDelegation: n,
517
531
  onRevokeDelegation: (e) => h([e]),
518
532
  selectedDelegationIds: v,
519
- onToggleSelectDelegation: te,
520
- onToggleAllDelegations: E,
521
- onClearSelection: ne,
522
- onRevokeSelected: () => h(ee.map((e) => e.id)),
523
- allVisibleSelected: w,
524
- partiallySelected: T
533
+ onToggleSelectDelegation: ne,
534
+ onToggleAllDelegations: T,
535
+ onClearSelection: E,
536
+ onRevokeSelected: () => h(te.map((e) => e.id)),
537
+ allVisibleSelected: C,
538
+ partiallySelected: w
525
539
  }),
526
- /* @__PURE__ */ q(k, {
540
+ /* @__PURE__ */ K(O, {
527
541
  open: p.length > 0,
528
542
  onOpenChange: (e) => {
529
543
  e || h([]);
@@ -538,17 +552,17 @@ var Ae = [
538
552
  variant: "destructive",
539
553
  loading: g
540
554
  })
541
- ] }) : /* @__PURE__ */ q(r, {
542
- icon: /* @__PURE__ */ q(ye, { size: 32 }),
555
+ ] }) : /* @__PURE__ */ K(r, {
556
+ icon: /* @__PURE__ */ K(H, { size: 32 }),
543
557
  title: s("devportal.linkAuthAppFirst", "Link an auth app first"),
544
558
  description: s("devportal.linkAuthAppFirstDescription", "Delegations are managed through auth apps. Create or link an auth app before granting app-as-user access."),
545
- action: /* @__PURE__ */ J("button", {
559
+ action: /* @__PURE__ */ q("button", {
546
560
  onClick: () => a("/oauth"),
547
561
  className: "inline-flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90",
548
- children: [/* @__PURE__ */ q(z, { size: 16 }), s("devportal.manageOAuthApps", "Manage OAuth Apps")]
562
+ children: [/* @__PURE__ */ K(R, { size: 16 }), s("devportal.manageOAuthApps", "Manage OAuth Apps")]
549
563
  })
550
564
  });
551
- }, Fe = ({ app: e }) => {
565
+ }, Ie = ({ app: e }) => {
552
566
  let { t } = P(), n = (e, n) => {
553
567
  let r = t(e);
554
568
  return r === e ? n : r;
@@ -577,31 +591,31 @@ var Ae = [
577
591
  });
578
592
  if (r) {
579
593
  let t = m?.productInstallations?.items ?? [], r = m?.productInstallations?.total ?? 0, i = t.filter((e) => e.status === "ACTIVE").length;
580
- return h && !m ? /* @__PURE__ */ q(X, { message: n("devportal.loadingAnalytics", "Loading analytics...") }) : /* @__PURE__ */ J("div", {
594
+ return h && !m ? /* @__PURE__ */ K(Z, { message: n("devportal.loadingAnalytics", "Loading analytics...") }) : /* @__PURE__ */ q("div", {
581
595
  className: "space-y-6",
582
- children: [/* @__PURE__ */ J("div", {
596
+ children: [/* @__PURE__ */ q("div", {
583
597
  className: "grid gap-4 sm:grid-cols-4",
584
598
  children: [
585
- /* @__PURE__ */ q(Q, {
599
+ /* @__PURE__ */ K(Q, {
586
600
  label: n("devportal.totalInstalls", "Total Installs"),
587
601
  value: r.toLocaleString()
588
602
  }),
589
- /* @__PURE__ */ q(Q, {
603
+ /* @__PURE__ */ K(Q, {
590
604
  label: n("devportal.activeInstalls", "Active Installs"),
591
605
  value: i.toLocaleString()
592
606
  }),
593
- /* @__PURE__ */ q(Q, {
607
+ /* @__PURE__ */ K(Q, {
594
608
  label: n("devportal.averageRating", "Average Rating"),
595
609
  value: e.averageRating ? `${e.averageRating.toFixed(1)} ★` : n("devportal.notAvailable", "N/A")
596
610
  }),
597
- /* @__PURE__ */ q(Q, {
611
+ /* @__PURE__ */ K(Q, {
598
612
  label: n("devportal.reviews", "Reviews"),
599
613
  value: e.reviewCount.toString()
600
614
  })
601
615
  ]
602
- }), t.length > 0 && /* @__PURE__ */ q(b, {
616
+ }), t.length > 0 && /* @__PURE__ */ K(b, {
603
617
  title: n("devportal.installBreakdown", "Install Breakdown"),
604
- children: /* @__PURE__ */ q(E, {
618
+ children: /* @__PURE__ */ K(T, {
605
619
  data: t,
606
620
  keyField: "id",
607
621
  columns: [
@@ -634,8 +648,8 @@ var Ae = [
634
648
  })]
635
649
  });
636
650
  }
637
- return _ ? /* @__PURE__ */ q(X, { message: n("devportal.loadingAnalytics", "Loading analytics...") }) : v ? /* @__PURE__ */ q(Z, { message: v.message }) : /* @__PURE__ */ q(ze, { analytics: (g?.applicationAnalytics ?? []).map(Oe) });
638
- }, Ie = ({ app: t }) => {
651
+ return _ ? /* @__PURE__ */ K(Z, { message: n("devportal.loadingAnalytics", "Loading analytics...") }) : v ? /* @__PURE__ */ K(Me, { message: v.message }) : /* @__PURE__ */ K(Be, { analytics: (g?.applicationAnalytics ?? []).map(X) });
652
+ }, Le = ({ app: t }) => {
639
653
  let { t: n } = P(), r = (e, t) => {
640
654
  let r = n(e);
641
655
  return r === e ? t : r;
@@ -665,16 +679,16 @@ var Ae = [
665
679
  cta: "Submit for review →"
666
680
  }
667
681
  ] : [], l = c.filter((e) => !e.done)[0];
668
- return /* @__PURE__ */ J("div", {
682
+ return /* @__PURE__ */ q("div", {
669
683
  className: "grid gap-6 lg:grid-cols-3",
670
- children: [/* @__PURE__ */ J("div", {
684
+ children: [/* @__PURE__ */ q("div", {
671
685
  className: "lg:col-span-2 space-y-6",
672
686
  children: [
673
- s && l && /* @__PURE__ */ J("div", {
687
+ s && l && /* @__PURE__ */ q("div", {
674
688
  className: "rounded-lg border border-primary/30 bg-primary/5 p-4 space-y-3",
675
- children: [/* @__PURE__ */ J("div", {
689
+ children: [/* @__PURE__ */ q("div", {
676
690
  className: "flex items-center justify-between",
677
- children: [/* @__PURE__ */ J("p", {
691
+ children: [/* @__PURE__ */ q("p", {
678
692
  className: "font-semibold text-sm text-primary",
679
693
  children: [
680
694
  r("devportal.setupProgress", "Setup Progress"),
@@ -684,25 +698,25 @@ var Ae = [
684
698
  c.length,
685
699
  " complete"
686
700
  ]
687
- }), /* @__PURE__ */ q("button", {
701
+ }), /* @__PURE__ */ K("button", {
688
702
  onClick: () => i?.(`${a}/apps/${t.id}/publish`),
689
703
  className: "text-xs text-primary hover:underline font-medium",
690
704
  children: r("devportal.viewChecklist", "View full checklist →")
691
705
  })]
692
- }), /* @__PURE__ */ q("div", {
706
+ }), /* @__PURE__ */ K("div", {
693
707
  className: "space-y-1.5",
694
- children: c.map((e, t) => /* @__PURE__ */ J("div", {
708
+ children: c.map((e, t) => /* @__PURE__ */ q("div", {
695
709
  className: "flex items-center gap-2 text-sm",
696
710
  children: [
697
- e.done ? /* @__PURE__ */ q(ue, {
711
+ e.done ? /* @__PURE__ */ K(ue, {
698
712
  size: 14,
699
713
  className: "text-status-success-text shrink-0"
700
- }) : /* @__PURE__ */ q("div", { className: "h-3.5 w-3.5 rounded-full border-2 border-muted-foreground/40 shrink-0" }),
701
- /* @__PURE__ */ q("span", {
714
+ }) : /* @__PURE__ */ K("div", { className: "h-3.5 w-3.5 rounded-full border-2 border-muted-foreground/40 shrink-0" }),
715
+ /* @__PURE__ */ K("span", {
702
716
  className: e.done ? "line-through text-muted-foreground" : "text-foreground",
703
717
  children: e.label
704
718
  }),
705
- !e.done && t === c.indexOf(l) && /* @__PURE__ */ q("button", {
719
+ !e.done && t === c.indexOf(l) && /* @__PURE__ */ K("button", {
706
720
  onClick: () => i?.(e.path),
707
721
  className: "ml-auto text-xs text-primary hover:underline font-medium shrink-0",
708
722
  children: e.cta
@@ -711,56 +725,56 @@ var Ae = [
711
725
  }, t))
712
726
  })]
713
727
  }),
714
- /* @__PURE__ */ J("div", {
728
+ /* @__PURE__ */ q("div", {
715
729
  className: "grid gap-4 sm:grid-cols-4",
716
730
  children: [
717
- /* @__PURE__ */ q(Q, {
731
+ /* @__PURE__ */ K(Q, {
718
732
  label: r("devportal.totalInstalls", "Total Installs"),
719
733
  value: t.installCount.toLocaleString()
720
734
  }),
721
- /* @__PURE__ */ q(Q, {
735
+ /* @__PURE__ */ K(Q, {
722
736
  label: r("devportal.activeInstalls", "Active Installs"),
723
737
  value: t.activeInstallCount.toLocaleString()
724
738
  }),
725
- /* @__PURE__ */ q(Q, {
739
+ /* @__PURE__ */ K(Q, {
726
740
  label: r("devportal.averageRating", "Average Rating"),
727
741
  value: t.averageRating ? `${t.averageRating.toFixed(1)} ★` : r("devportal.notAvailable", "N/A")
728
742
  }),
729
- /* @__PURE__ */ q(Q, {
743
+ /* @__PURE__ */ K(Q, {
730
744
  label: r("devportal.reviews", "Reviews"),
731
745
  value: t.reviewCount.toString()
732
746
  })
733
747
  ]
734
748
  }),
735
- /* @__PURE__ */ q(b, {
749
+ /* @__PURE__ */ K(b, {
736
750
  title: r("devportal.description", "Description"),
737
- children: /* @__PURE__ */ q("div", {
751
+ children: /* @__PURE__ */ K("div", {
738
752
  className: "prose prose-sm max-w-none",
739
- children: /* @__PURE__ */ q("pre", {
753
+ children: /* @__PURE__ */ K("pre", {
740
754
  className: "whitespace-pre-wrap font-sans text-sm text-foreground bg-transparent p-0 m-0",
741
755
  children: t.description || r("devportal.noDescriptionProvided", "No description provided.")
742
756
  })
743
757
  })
744
758
  }),
745
- /* @__PURE__ */ q(b, {
759
+ /* @__PURE__ */ K(b, {
746
760
  title: r("devportal.tagsAndKeywords", "Tags & Keywords"),
747
- children: /* @__PURE__ */ J("div", {
761
+ children: /* @__PURE__ */ q("div", {
748
762
  className: "space-y-3",
749
- children: [t.tags.length > 0 && /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("p", {
763
+ children: [t.tags.length > 0 && /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("p", {
750
764
  className: "text-xs text-muted-foreground mb-2",
751
765
  children: r("devportal.tags", "Tags")
752
- }), /* @__PURE__ */ q("div", {
766
+ }), /* @__PURE__ */ K("div", {
753
767
  className: "flex flex-wrap gap-2",
754
- children: t.tags.map((e) => /* @__PURE__ */ q("span", {
768
+ children: t.tags.map((e) => /* @__PURE__ */ K("span", {
755
769
  className: "rounded-full bg-primary/10 px-3 py-1 text-xs font-medium text-primary",
756
770
  children: e
757
771
  }, e))
758
- })] }), t.keywords.length > 0 && /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("p", {
772
+ })] }), t.keywords.length > 0 && /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("p", {
759
773
  className: "text-xs text-muted-foreground mb-2",
760
774
  children: r("devportal.keywords", "Keywords")
761
- }), /* @__PURE__ */ q("div", {
775
+ }), /* @__PURE__ */ K("div", {
762
776
  className: "flex flex-wrap gap-2",
763
- children: t.keywords.map((e) => /* @__PURE__ */ q("span", {
777
+ children: t.keywords.map((e) => /* @__PURE__ */ K("span", {
764
778
  className: "rounded-full bg-muted px-3 py-1 text-xs",
765
779
  children: e
766
780
  }, e))
@@ -768,14 +782,14 @@ var Ae = [
768
782
  })
769
783
  })
770
784
  ]
771
- }), /* @__PURE__ */ J("div", {
785
+ }), /* @__PURE__ */ q("div", {
772
786
  className: "space-y-6",
773
- children: [/* @__PURE__ */ q(b, {
787
+ children: [/* @__PURE__ */ K(b, {
774
788
  title: r("devportal.details", "Details"),
775
- children: /* @__PURE__ */ q(ne, { items: [
789
+ children: /* @__PURE__ */ K(E, { items: [
776
790
  {
777
791
  label: r("devportal.appId", "App ID"),
778
- value: /* @__PURE__ */ q("code", {
792
+ value: /* @__PURE__ */ K("code", {
779
793
  className: "text-xs",
780
794
  children: t.id
781
795
  })
@@ -805,32 +819,32 @@ var Ae = [
805
819
  value: t.publishedAt ? new Date(t.publishedAt).toLocaleDateString() : r("devportal.notPublished", "Not published")
806
820
  }
807
821
  ] })
808
- }), /* @__PURE__ */ q(b, {
822
+ }), /* @__PURE__ */ K(b, {
809
823
  title: r("devportal.links", "Links"),
810
- children: /* @__PURE__ */ J("div", {
824
+ children: /* @__PURE__ */ q("div", {
811
825
  className: "space-y-2",
812
826
  children: [
813
- t.websiteUrl && /* @__PURE__ */ q($, {
827
+ t.websiteUrl && /* @__PURE__ */ K($, {
814
828
  label: r("devportal.website", "Website"),
815
829
  url: t.websiteUrl
816
830
  }),
817
- t.documentationUrl && /* @__PURE__ */ q($, {
831
+ t.documentationUrl && /* @__PURE__ */ K($, {
818
832
  label: r("devportal.documentation", "Documentation"),
819
833
  url: t.documentationUrl
820
834
  }),
821
- t.supportUrl && /* @__PURE__ */ q($, {
835
+ t.supportUrl && /* @__PURE__ */ K($, {
822
836
  label: r("devportal.support", "Support"),
823
837
  url: t.supportUrl
824
838
  }),
825
- t.githubUrl && /* @__PURE__ */ q($, {
839
+ t.githubUrl && /* @__PURE__ */ K($, {
826
840
  label: r("devportal.github", "GitHub"),
827
841
  url: t.githubUrl
828
842
  }),
829
- t.privacyPolicyUrl && /* @__PURE__ */ q($, {
843
+ t.privacyPolicyUrl && /* @__PURE__ */ K($, {
830
844
  label: r("devportal.privacyPolicy", "Privacy Policy"),
831
845
  url: t.privacyPolicyUrl
832
846
  }),
833
- t.termsOfServiceUrl && /* @__PURE__ */ q($, {
847
+ t.termsOfServiceUrl && /* @__PURE__ */ K($, {
834
848
  label: r("devportal.termsOfService", "Terms of Service"),
835
849
  url: t.termsOfServiceUrl
836
850
  })
@@ -839,16 +853,16 @@ var Ae = [
839
853
  })]
840
854
  })]
841
855
  });
842
- }, Le = ({ appId: e, webhooks: t, onNavigate: n }) => {
856
+ }, Re = ({ appId: e, webhooks: t, onNavigate: n }) => {
843
857
  let { t: i } = P(), a = (e, t) => {
844
858
  let n = i(e);
845
859
  return n === e ? t : n;
846
860
  };
847
- return /* @__PURE__ */ J("div", {
861
+ return /* @__PURE__ */ q("div", {
848
862
  className: "space-y-6",
849
- children: [/* @__PURE__ */ J("div", {
863
+ children: [/* @__PURE__ */ q("div", {
850
864
  className: "flex items-center justify-between",
851
- children: [/* @__PURE__ */ J("p", {
865
+ children: [/* @__PURE__ */ q("p", {
852
866
  className: "text-sm text-muted-foreground",
853
867
  children: [
854
868
  t.length,
@@ -857,81 +871,81 @@ var Ae = [
857
871
  " ",
858
872
  a("devportal.configured", "configured")
859
873
  ]
860
- }), /* @__PURE__ */ J("button", {
874
+ }), /* @__PURE__ */ q("button", {
861
875
  onClick: () => n(`/apps/${e}/webhooks/new`),
862
876
  className: "inline-flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors",
863
- children: [/* @__PURE__ */ q(H, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
877
+ children: [/* @__PURE__ */ K(V, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
864
878
  })]
865
- }), t.length > 0 ? /* @__PURE__ */ q("div", {
879
+ }), t.length > 0 ? /* @__PURE__ */ K("div", {
866
880
  className: "space-y-4",
867
- children: t.map((t) => /* @__PURE__ */ J("div", {
881
+ children: t.map((t) => /* @__PURE__ */ q("div", {
868
882
  className: "rounded-lg border bg-card p-4 space-y-4",
869
883
  children: [
870
- /* @__PURE__ */ J("div", {
884
+ /* @__PURE__ */ q("div", {
871
885
  className: "flex items-start justify-between",
872
- children: [/* @__PURE__ */ J("div", { children: [/* @__PURE__ */ J("div", {
886
+ children: [/* @__PURE__ */ q("div", { children: [/* @__PURE__ */ q("div", {
873
887
  className: "flex items-center gap-2",
874
- children: [/* @__PURE__ */ q("h3", {
888
+ children: [/* @__PURE__ */ K("h3", {
875
889
  className: "font-medium",
876
890
  children: t.name
877
- }), /* @__PURE__ */ q(C, {
891
+ }), /* @__PURE__ */ K(S, {
878
892
  status: t.status,
879
893
  type: "webhook"
880
894
  })]
881
- }), t.description && /* @__PURE__ */ q("p", {
895
+ }), t.description && /* @__PURE__ */ K("p", {
882
896
  className: "text-sm text-muted-foreground mt-1",
883
897
  children: t.description
884
- })] }), /* @__PURE__ */ q("button", {
898
+ })] }), /* @__PURE__ */ K("button", {
885
899
  onClick: () => n(`/apps/${e}/webhooks/${t.id}`),
886
900
  className: "rounded-md p-1 hover:bg-muted",
887
- children: /* @__PURE__ */ q(he, { size: 20 })
901
+ children: /* @__PURE__ */ K(ge, { size: 20 })
888
902
  })]
889
903
  }),
890
- /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("p", {
904
+ /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("p", {
891
905
  className: "text-xs text-muted-foreground mb-1",
892
906
  children: a("devportal.endpointUrl", "Endpoint URL")
893
- }), /* @__PURE__ */ q("code", {
907
+ }), /* @__PURE__ */ K("code", {
894
908
  className: "text-sm bg-muted px-2 py-1 rounded block truncate",
895
909
  children: t.url
896
910
  })] }),
897
- /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("p", {
911
+ /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("p", {
898
912
  className: "text-xs text-muted-foreground mb-2",
899
913
  children: a("devportal.events", "Events")
900
- }), /* @__PURE__ */ q("div", {
914
+ }), /* @__PURE__ */ K("div", {
901
915
  className: "flex flex-wrap gap-2",
902
- children: t.events.map((e) => /* @__PURE__ */ q("span", {
916
+ children: t.events.map((e) => /* @__PURE__ */ K("span", {
903
917
  className: "rounded-full bg-muted px-2 py-0.5 text-xs",
904
918
  children: e
905
919
  }, e))
906
920
  })] }),
907
- /* @__PURE__ */ J("div", {
921
+ /* @__PURE__ */ q("div", {
908
922
  className: "grid gap-4 sm:grid-cols-4 text-sm",
909
923
  children: [
910
- /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("p", {
924
+ /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("p", {
911
925
  className: "text-xs text-muted-foreground",
912
926
  children: a("devportal.success", "Success")
913
- }), /* @__PURE__ */ q("p", {
927
+ }), /* @__PURE__ */ K("p", {
914
928
  className: "font-medium text-status-success-text",
915
929
  children: t.successCount.toLocaleString()
916
930
  })] }),
917
- /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("p", {
931
+ /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("p", {
918
932
  className: "text-xs text-muted-foreground",
919
933
  children: a("devportal.failed", "Failed")
920
- }), /* @__PURE__ */ q("p", {
934
+ }), /* @__PURE__ */ K("p", {
921
935
  className: "font-medium text-status-error-text",
922
936
  children: t.failureCount.toLocaleString()
923
937
  })] }),
924
- /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("p", {
938
+ /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("p", {
925
939
  className: "text-xs text-muted-foreground",
926
940
  children: a("devportal.successRate", "Success Rate")
927
- }), /* @__PURE__ */ J("p", {
941
+ }), /* @__PURE__ */ q("p", {
928
942
  className: "font-medium",
929
943
  children: [t.successCount + t.failureCount > 0 ? (t.successCount / (t.successCount + t.failureCount) * 100).toFixed(1) : "0.0", "%"]
930
944
  })] }),
931
- /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("p", {
945
+ /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("p", {
932
946
  className: "text-xs text-muted-foreground",
933
947
  children: a("devportal.lastTriggered", "Last Triggered")
934
- }), /* @__PURE__ */ q("p", {
948
+ }), /* @__PURE__ */ K("p", {
935
949
  className: "font-medium",
936
950
  children: t.lastTriggeredAt ? new Date(t.lastTriggeredAt).toLocaleString() : a("devportal.never", "Never")
937
951
  })] })
@@ -939,28 +953,28 @@ var Ae = [
939
953
  })
940
954
  ]
941
955
  }, t.id))
942
- }) : /* @__PURE__ */ q(r, {
943
- icon: /* @__PURE__ */ q(be, { size: 32 }),
956
+ }) : /* @__PURE__ */ K(r, {
957
+ icon: /* @__PURE__ */ K(xe, { size: 32 }),
944
958
  title: a("devportal.noWebhooks", "No webhooks"),
945
959
  description: a("devportal.noWebhooksDescription", "Add a webhook to receive event notifications"),
946
- action: /* @__PURE__ */ J("button", {
960
+ action: /* @__PURE__ */ q("button", {
947
961
  onClick: () => n(`/apps/${e}/webhooks/new`),
948
962
  className: "inline-flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90",
949
- children: [/* @__PURE__ */ q(H, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
963
+ children: [/* @__PURE__ */ K(V, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
950
964
  })
951
965
  })]
952
966
  });
953
- }, Re = ({ appName: e, delegations: n, onGrantDelegation: i, onRevokeDelegation: a, selectedDelegationIds: o, onToggleSelectDelegation: s, onToggleAllDelegations: c, onClearSelection: l, onRevokeSelected: u, allVisibleSelected: d, partiallySelected: f }) => {
967
+ }, ze = ({ appName: e, delegations: n, onGrantDelegation: i, onRevokeDelegation: a, selectedDelegationIds: o, onToggleSelectDelegation: s, onToggleAllDelegations: c, onClearSelection: l, onRevokeSelected: u, allVisibleSelected: d, partiallySelected: f }) => {
954
968
  let { t: p } = P(), m = (e, t) => {
955
969
  let n = p(e);
956
970
  return n === e ? t : n;
957
971
  }, h = n.filter((e) => e.status === "ACTIVE"), g = n.filter((e) => e.status !== "ACTIVE");
958
- return /* @__PURE__ */ J("div", {
972
+ return /* @__PURE__ */ q("div", {
959
973
  className: "space-y-6",
960
974
  children: [
961
- /* @__PURE__ */ J("div", {
975
+ /* @__PURE__ */ q("div", {
962
976
  className: "flex items-center justify-between",
963
- children: [/* @__PURE__ */ J("div", { children: [/* @__PURE__ */ J("p", {
977
+ children: [/* @__PURE__ */ q("div", { children: [/* @__PURE__ */ q("p", {
964
978
  className: "text-sm text-muted-foreground",
965
979
  children: [
966
980
  n.length,
@@ -971,7 +985,7 @@ var Ae = [
971
985
  " ",
972
986
  e
973
987
  ]
974
- }), h.length > 0 && /* @__PURE__ */ J("p", {
988
+ }), h.length > 0 && /* @__PURE__ */ q("p", {
975
989
  className: "text-xs text-muted-foreground mt-0.5",
976
990
  children: [
977
991
  h.length,
@@ -983,44 +997,44 @@ var Ae = [
983
997
  " ",
984
998
  m("devportal.revokedExpired", "revoked/expired")
985
999
  ]
986
- })] }), /* @__PURE__ */ J("button", {
1000
+ })] }), /* @__PURE__ */ q("button", {
987
1001
  onClick: i,
988
1002
  className: "inline-flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors",
989
- children: [/* @__PURE__ */ q(H, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
1003
+ children: [/* @__PURE__ */ K(V, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
990
1004
  })]
991
1005
  }),
992
- h.length > 0 && /* @__PURE__ */ q("div", {
1006
+ h.length > 0 && /* @__PURE__ */ K("div", {
993
1007
  className: "rounded-lg border bg-card p-4",
994
- children: /* @__PURE__ */ J("div", {
1008
+ children: /* @__PURE__ */ q("div", {
995
1009
  className: "flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between",
996
- children: [/* @__PURE__ */ J("div", {
1010
+ children: [/* @__PURE__ */ q("div", {
997
1011
  className: "flex flex-wrap items-center gap-3",
998
- children: [/* @__PURE__ */ J("div", {
1012
+ children: [/* @__PURE__ */ q("div", {
999
1013
  className: "flex items-center gap-2",
1000
- children: [/* @__PURE__ */ q(w, {
1014
+ children: [/* @__PURE__ */ K(C, {
1001
1015
  checked: d,
1002
1016
  indeterminate: f,
1003
1017
  onChange: c,
1004
1018
  ariaLabel: m("devportal.selectAllActiveDelegations", "Select all active app delegations")
1005
- }), /* @__PURE__ */ q("span", {
1019
+ }), /* @__PURE__ */ K("span", {
1006
1020
  className: "text-sm font-medium",
1007
1021
  children: m("devportal.selectAllActive", "Select all active")
1008
1022
  })]
1009
- }), o.size > 0 && /* @__PURE__ */ q("button", {
1023
+ }), o.size > 0 && /* @__PURE__ */ K("button", {
1010
1024
  onClick: l,
1011
1025
  className: "text-sm text-muted-foreground hover:text-foreground",
1012
1026
  children: m("devportal.clearSelection", "Clear selection")
1013
1027
  })]
1014
- }), /* @__PURE__ */ J("div", {
1028
+ }), /* @__PURE__ */ q("div", {
1015
1029
  className: "flex flex-wrap items-center gap-2",
1016
- children: [/* @__PURE__ */ J("span", {
1030
+ children: [/* @__PURE__ */ q("span", {
1017
1031
  className: "rounded-full bg-muted px-3 py-1 text-sm font-medium text-muted-foreground",
1018
1032
  children: [
1019
1033
  o.size,
1020
1034
  " ",
1021
1035
  m("devportal.selected", "selected")
1022
1036
  ]
1023
- }), /* @__PURE__ */ J("button", {
1037
+ }), /* @__PURE__ */ q("button", {
1024
1038
  onClick: u,
1025
1039
  disabled: o.size === 0,
1026
1040
  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",
@@ -1029,33 +1043,33 @@ var Ae = [
1029
1043
  })]
1030
1044
  })
1031
1045
  }),
1032
- n.length > 0 ? /* @__PURE__ */ q("div", {
1046
+ n.length > 0 ? /* @__PURE__ */ K("div", {
1033
1047
  className: "space-y-4",
1034
- children: n.map((e) => /* @__PURE__ */ J("div", {
1048
+ children: n.map((e) => /* @__PURE__ */ q("div", {
1035
1049
  className: "rounded-lg border bg-card p-4 space-y-4",
1036
1050
  children: [
1037
- /* @__PURE__ */ J("div", {
1051
+ /* @__PURE__ */ q("div", {
1038
1052
  className: "flex items-start justify-between",
1039
- children: [/* @__PURE__ */ J("div", {
1053
+ children: [/* @__PURE__ */ q("div", {
1040
1054
  className: "flex items-start gap-3",
1041
- children: [e.status === "ACTIVE" && /* @__PURE__ */ q("div", {
1055
+ children: [e.status === "ACTIVE" && /* @__PURE__ */ K("div", {
1042
1056
  onClick: (e) => e.stopPropagation(),
1043
- children: /* @__PURE__ */ q(w, {
1057
+ children: /* @__PURE__ */ K(C, {
1044
1058
  checked: o.has(e.id),
1045
1059
  onChange: (t) => s(e.id, t),
1046
1060
  ariaLabel: `Select delegation ${e.id}`,
1047
1061
  className: "mt-1"
1048
1062
  })
1049
- }), /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ J("div", {
1063
+ }), /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ q("div", {
1050
1064
  className: "flex items-center gap-2",
1051
- children: [/* @__PURE__ */ J("h3", {
1065
+ children: [/* @__PURE__ */ q("h3", {
1052
1066
  className: "font-medium",
1053
1067
  children: ["Delegation #", e.id.slice(0, 8)]
1054
- }), /* @__PURE__ */ q("span", {
1068
+ }), /* @__PURE__ */ K("span", {
1055
1069
  className: t("rounded-full px-2 py-0.5 text-xs font-medium", je[e.status]),
1056
1070
  children: e.status
1057
1071
  })]
1058
- }), /* @__PURE__ */ J("p", {
1072
+ }), /* @__PURE__ */ q("p", {
1059
1073
  className: "text-sm text-muted-foreground mt-1",
1060
1074
  children: [
1061
1075
  m("devportal.granted", "Granted"),
@@ -1067,55 +1081,55 @@ var Ae = [
1067
1081
  e.grantedBy === e.userId ? m("devportal.you", "you") : e.grantedBy.slice(0, 8)
1068
1082
  ]
1069
1083
  })] })]
1070
- }), e.status === "ACTIVE" && /* @__PURE__ */ J("button", {
1084
+ }), e.status === "ACTIVE" && /* @__PURE__ */ q("button", {
1071
1085
  onClick: () => a(e.id),
1072
1086
  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",
1073
- children: [/* @__PURE__ */ q(Se, { size: 14 }), m("devportal.revoke", "Revoke")]
1087
+ children: [/* @__PURE__ */ K(Ce, { size: 14 }), m("devportal.revoke", "Revoke")]
1074
1088
  })]
1075
1089
  }),
1076
- /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("p", {
1090
+ /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("p", {
1077
1091
  className: "text-xs text-muted-foreground mb-2",
1078
1092
  children: m("devportal.grantedScopes", "Granted Scopes")
1079
- }), /* @__PURE__ */ q("div", {
1093
+ }), /* @__PURE__ */ K("div", {
1080
1094
  className: "flex flex-wrap gap-2",
1081
- children: e.scopes.map((e) => /* @__PURE__ */ q("span", {
1095
+ children: e.scopes.map((e) => /* @__PURE__ */ K("span", {
1082
1096
  className: "rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-xs text-status-success-text",
1083
1097
  children: e
1084
1098
  }, e))
1085
1099
  })] }),
1086
- e.workspaceIds.length > 0 && /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("p", {
1100
+ e.workspaceIds.length > 0 && /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("p", {
1087
1101
  className: "text-xs text-muted-foreground mb-2",
1088
1102
  children: m("devportal.workspaceScope", "Workspace Scope")
1089
- }), /* @__PURE__ */ q("div", {
1103
+ }), /* @__PURE__ */ K("div", {
1090
1104
  className: "flex flex-wrap gap-2",
1091
- children: e.workspaceIds.map((e) => /* @__PURE__ */ q("code", {
1105
+ children: e.workspaceIds.map((e) => /* @__PURE__ */ K("code", {
1092
1106
  className: "rounded bg-muted px-2 py-0.5 text-xs",
1093
1107
  children: e
1094
1108
  }, e))
1095
1109
  })] }),
1096
- /* @__PURE__ */ J("div", {
1110
+ /* @__PURE__ */ q("div", {
1097
1111
  className: "flex items-center gap-4 text-xs text-muted-foreground",
1098
1112
  children: [
1099
- e.expiresAt && /* @__PURE__ */ J("span", {
1113
+ e.expiresAt && /* @__PURE__ */ q("span", {
1100
1114
  className: "flex items-center gap-1",
1101
1115
  children: [
1102
- /* @__PURE__ */ q(R, { size: 12 }),
1116
+ /* @__PURE__ */ K(de, { size: 12 }),
1103
1117
  m("devportal.expires", "Expires"),
1104
1118
  " ",
1105
1119
  new Date(e.expiresAt).toLocaleDateString()
1106
1120
  ]
1107
1121
  }),
1108
- !e.expiresAt && e.status === "ACTIVE" && /* @__PURE__ */ J("span", {
1122
+ !e.expiresAt && e.status === "ACTIVE" && /* @__PURE__ */ q("span", {
1109
1123
  className: "flex items-center gap-1",
1110
- children: [/* @__PURE__ */ q(L, {
1124
+ children: [/* @__PURE__ */ K(L, {
1111
1125
  size: 12,
1112
1126
  className: "text-status-success-text"
1113
1127
  }), m("devportal.noExpiration", "No expiration")]
1114
1128
  }),
1115
- e.revokedAt && /* @__PURE__ */ J("span", {
1129
+ e.revokedAt && /* @__PURE__ */ q("span", {
1116
1130
  className: "flex items-center gap-1",
1117
1131
  children: [
1118
- /* @__PURE__ */ q(Se, {
1132
+ /* @__PURE__ */ K(Ce, {
1119
1133
  size: 12,
1120
1134
  className: "text-status-error-text"
1121
1135
  }),
@@ -1128,52 +1142,52 @@ var Ae = [
1128
1142
  })
1129
1143
  ]
1130
1144
  }, e.id))
1131
- }) : /* @__PURE__ */ q(r, {
1132
- icon: /* @__PURE__ */ q(G, { size: 32 }),
1145
+ }) : /* @__PURE__ */ K(r, {
1146
+ icon: /* @__PURE__ */ K(W, { size: 32 }),
1133
1147
  title: m("devportal.noDelegations", "No delegations"),
1134
1148
  description: m("devportal.noDelegationsDescription", "Grant a delegation to allow this app to act on your behalf"),
1135
- action: /* @__PURE__ */ J("button", {
1149
+ action: /* @__PURE__ */ q("button", {
1136
1150
  onClick: i,
1137
1151
  className: "inline-flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90",
1138
- children: [/* @__PURE__ */ q(H, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
1152
+ children: [/* @__PURE__ */ K(V, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
1139
1153
  })
1140
1154
  })
1141
1155
  ]
1142
1156
  });
1143
- }, ze = ({ analytics: e }) => {
1157
+ }, Be = ({ analytics: e }) => {
1144
1158
  let { t } = P(), n = (e, n) => {
1145
1159
  let r = t(e);
1146
1160
  return r === e ? n : r;
1147
1161
  }, i = e[0], a = e[1], o = (e, t) => t ? (e - t) / t * 100 : 0;
1148
- return /* @__PURE__ */ J("div", {
1162
+ return /* @__PURE__ */ q("div", {
1149
1163
  className: "space-y-6",
1150
- children: [/* @__PURE__ */ J("div", {
1164
+ children: [/* @__PURE__ */ q("div", {
1151
1165
  className: "grid gap-4 sm:grid-cols-4",
1152
1166
  children: [
1153
- /* @__PURE__ */ q(Q, {
1167
+ /* @__PURE__ */ K(Q, {
1154
1168
  label: n("devportal.activeUsers", "Active Users"),
1155
1169
  value: i?.activeUsers.toLocaleString() || "0",
1156
1170
  trend: a ? o(i.activeUsers, a.activeUsers) : void 0
1157
1171
  }),
1158
- /* @__PURE__ */ q(Q, {
1172
+ /* @__PURE__ */ K(Q, {
1159
1173
  label: n("devportal.apiCalls", "API Calls"),
1160
1174
  value: i ? `${(i.apiCalls / 1e3).toFixed(1)}K` : "0",
1161
1175
  trend: a ? o(i.apiCalls, a.apiCalls) : void 0
1162
1176
  }),
1163
- /* @__PURE__ */ q(Q, {
1177
+ /* @__PURE__ */ K(Q, {
1164
1178
  label: n("devportal.avgResponseTime", "Avg Response Time"),
1165
1179
  value: i?.avgResponseTime ? `${i.avgResponseTime}ms` : n("devportal.notAvailable", "N/A"),
1166
1180
  trend: a && i?.avgResponseTime ? -o(i.avgResponseTime, a.avgResponseTime || 1) : void 0
1167
1181
  }),
1168
- /* @__PURE__ */ q(Q, {
1182
+ /* @__PURE__ */ K(Q, {
1169
1183
  label: n("devportal.errorRate", "Error Rate"),
1170
1184
  value: i && i.apiCalls > 0 ? `${(i.errors / i.apiCalls * 100).toFixed(2)}%` : "0%",
1171
1185
  trend: a && i && i.apiCalls > 0 && a.apiCalls > 0 ? -o(i.errors / i.apiCalls, a.errors / a.apiCalls) : void 0
1172
1186
  })
1173
1187
  ]
1174
- }), /* @__PURE__ */ q(b, {
1188
+ }), /* @__PURE__ */ K(b, {
1175
1189
  title: n("devportal.dailyBreakdown", "Daily Breakdown"),
1176
- children: e.length > 0 ? /* @__PURE__ */ q(E, {
1190
+ children: e.length > 0 ? /* @__PURE__ */ K(T, {
1177
1191
  data: e,
1178
1192
  keyField: "id",
1179
1193
  columns: [
@@ -1213,18 +1227,18 @@ var Ae = [
1213
1227
  render: (e) => e.sessions.toLocaleString()
1214
1228
  }
1215
1229
  ]
1216
- }) : /* @__PURE__ */ q(r, {
1217
- icon: /* @__PURE__ */ q(I, { size: 32 }),
1230
+ }) : /* @__PURE__ */ K(r, {
1231
+ icon: /* @__PURE__ */ K(I, { size: 32 }),
1218
1232
  title: n("devportal.noAnalyticsData", "No analytics data"),
1219
1233
  description: n("devportal.noAnalyticsDataDescription", "Analytics data will appear here once the application starts receiving traffic.")
1220
1234
  })
1221
1235
  })]
1222
1236
  });
1223
- }, Be = "# Sample query - modify as needed\nquery IntrospectSchema {\n __schema {\n queryType { name }\n mutationType { name }\n types {\n name\n kind\n }\n }\n}", Ve = ({ app: t }) => {
1237
+ }, Ve = "# Sample query - modify as needed\nquery IntrospectSchema {\n __schema {\n queryType { name }\n mutationType { name }\n types {\n name\n kind\n }\n }\n}", He = ({ app: t }) => {
1224
1238
  let { apiGatewayUrl: n, workspacesGatewayUrl: r, authToken: i } = e(), { t: a } = P(), o = (e, t) => {
1225
1239
  let n = a(e);
1226
1240
  return n === e ? t : n;
1227
- }, [s, c] = N(Be), [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 () => {
1241
+ }, [s, c] = N(Ve), [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), ee = A(async () => {
1228
1242
  m(!0), f("");
1229
1243
  try {
1230
1244
  let e = {};
@@ -1255,24 +1269,24 @@ var Ae = [
1255
1269
  l,
1256
1270
  h,
1257
1271
  _
1258
- ]), S = A(() => {
1272
+ ]), x = A(() => {
1259
1273
  i && v(i), b(!0);
1260
1274
  }, [i]);
1261
- return /* @__PURE__ */ J("div", {
1275
+ return /* @__PURE__ */ q("div", {
1262
1276
  className: "space-y-4",
1263
1277
  children: [
1264
- /* @__PURE__ */ J("div", {
1278
+ /* @__PURE__ */ q("div", {
1265
1279
  className: "flex items-center justify-between",
1266
- children: [/* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("h3", {
1280
+ children: [/* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("h3", {
1267
1281
  className: "text-lg font-semibold",
1268
1282
  children: o("devportal.apiPlayground", "API Playground")
1269
- }), /* @__PURE__ */ J("p", {
1283
+ }), /* @__PURE__ */ q("p", {
1270
1284
  className: "text-sm text-muted-foreground",
1271
1285
  children: [
1272
1286
  o("devportal.apiPlaygroundDescription", "Test GraphQL APIs in the context of"),
1273
1287
  " ",
1274
- /* @__PURE__ */ q("strong", { children: t.name }),
1275
- t.appId && /* @__PURE__ */ J("span", {
1288
+ /* @__PURE__ */ K("strong", { children: t.name }),
1289
+ t.appId && /* @__PURE__ */ q("span", {
1276
1290
  className: "ml-1 text-xs text-muted-foreground",
1277
1291
  children: [
1278
1292
  "(OAuth App: ",
@@ -1281,39 +1295,39 @@ var Ae = [
1281
1295
  ]
1282
1296
  })
1283
1297
  ]
1284
- })] }), /* @__PURE__ */ J("button", {
1285
- onClick: S,
1298
+ })] }), /* @__PURE__ */ q("button", {
1299
+ onClick: x,
1286
1300
  className: "flex items-center gap-2 rounded-md border px-3 py-1.5 text-sm font-medium hover:bg-accent transition-colors",
1287
- children: [/* @__PURE__ */ q(me, { size: 14 }), o("devportal.autoFillCredentials", "Auto-fill Credentials")]
1301
+ children: [/* @__PURE__ */ K(he, { size: 14 }), o("devportal.autoFillCredentials", "Auto-fill Credentials")]
1288
1302
  })]
1289
1303
  }),
1290
- y && /* @__PURE__ */ J("div", {
1304
+ y && /* @__PURE__ */ q("div", {
1291
1305
  className: "rounded-lg border bg-status-info-bg-subtle p-4 text-sm space-y-2",
1292
1306
  children: [
1293
- /* @__PURE__ */ q("p", {
1307
+ /* @__PURE__ */ K("p", {
1294
1308
  className: "font-medium text-status-info-text",
1295
1309
  children: o("devportal.authenticationGuide", "Authentication Guide")
1296
1310
  }),
1297
- /* @__PURE__ */ J("p", {
1311
+ /* @__PURE__ */ q("p", {
1298
1312
  className: "text-status-info-text",
1299
1313
  children: [
1300
1314
  o("devportal.authenticationGuideText", "Your current session token has been filled in. For app-level authentication (Client Credentials flow), use the"),
1301
1315
  " ",
1302
- /* @__PURE__ */ q("strong", { children: o("devportal.oauthClientsTab", "OAuth Clients") }),
1316
+ /* @__PURE__ */ K("strong", { children: o("devportal.oauthClientsTab", "OAuth Clients") }),
1303
1317
  " ",
1304
1318
  o("devportal.authenticationGuideText2", "tab to get the app's clientId and clientSecret, then call:")
1305
1319
  ]
1306
1320
  }),
1307
- /* @__PURE__ */ q("pre", {
1321
+ /* @__PURE__ */ K("pre", {
1308
1322
  className: "rounded bg-status-info-bg-subtle p-2 text-xs overflow-x-auto text-status-info-text",
1309
1323
  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}"
1310
1324
  }),
1311
- /* @__PURE__ */ J("p", {
1325
+ /* @__PURE__ */ q("p", {
1312
1326
  className: "text-status-info-text",
1313
1327
  children: [
1314
1328
  o("devportal.useReturnedAccessToken", "Use the returned"),
1315
1329
  " ",
1316
- /* @__PURE__ */ q("code", {
1330
+ /* @__PURE__ */ K("code", {
1317
1331
  className: "bg-status-info-bg-subtle px-1 rounded",
1318
1332
  children: "accessToken"
1319
1333
  }),
@@ -1321,129 +1335,129 @@ var Ae = [
1321
1335
  o("devportal.asBearerToken", "as the Bearer token below.")
1322
1336
  ]
1323
1337
  }),
1324
- /* @__PURE__ */ q("button", {
1338
+ /* @__PURE__ */ K("button", {
1325
1339
  onClick: () => b(!1),
1326
1340
  className: "text-xs text-accent-blue hover:underline",
1327
1341
  children: o("devportal.dismiss", "Dismiss")
1328
1342
  })
1329
1343
  ]
1330
1344
  }),
1331
- /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("label", {
1345
+ /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("label", {
1332
1346
  className: "block text-sm font-medium mb-1",
1333
1347
  children: o("devportal.gatewayEndpoint", "Gateway Endpoint")
1334
- }), /* @__PURE__ */ J("div", {
1348
+ }), /* @__PURE__ */ q("div", {
1335
1349
  className: "flex gap-2",
1336
- children: [/* @__PURE__ */ q("input", {
1350
+ children: [/* @__PURE__ */ K("input", {
1337
1351
  type: "text",
1338
1352
  value: h,
1339
1353
  onChange: (e) => g(e.target.value),
1340
1354
  className: "flex-1 rounded-md border px-3 py-2 text-sm font-mono bg-background"
1341
- }), /* @__PURE__ */ J("select", {
1355
+ }), /* @__PURE__ */ q("select", {
1342
1356
  onChange: (e) => g(e.target.value),
1343
1357
  className: "rounded-md border px-3 py-2 text-sm bg-background",
1344
1358
  value: h,
1345
- children: [/* @__PURE__ */ q("option", {
1359
+ children: [/* @__PURE__ */ K("option", {
1346
1360
  value: `${n || "https://gw-global.local.burdenoff.com"}/global/graphql`,
1347
1361
  children: o("devportal.globalGateway", "Global Gateway")
1348
- }), /* @__PURE__ */ q("option", {
1362
+ }), /* @__PURE__ */ K("option", {
1349
1363
  value: `${r || "https://gw-wspace.local.burdenoff.com"}/workspaces/graphql`,
1350
1364
  children: o("devportal.workspaceGateway", "Workspace Gateway")
1351
1365
  })]
1352
1366
  })]
1353
1367
  })] }),
1354
- /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("label", {
1368
+ /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("label", {
1355
1369
  className: "block text-sm font-medium mb-1",
1356
1370
  children: o("devportal.bearerToken", "Bearer Token")
1357
- }), /* @__PURE__ */ q("input", {
1371
+ }), /* @__PURE__ */ K("input", {
1358
1372
  type: "password",
1359
1373
  value: _,
1360
1374
  onChange: (e) => v(e.target.value),
1361
1375
  placeholder: o("devportal.pasteAccessToken", "Paste access token here..."),
1362
1376
  className: "w-full rounded-md border px-3 py-2 text-sm font-mono bg-background"
1363
1377
  })] }),
1364
- /* @__PURE__ */ J("div", {
1378
+ /* @__PURE__ */ q("div", {
1365
1379
  className: "grid grid-cols-1 lg:grid-cols-2 gap-4",
1366
- children: [/* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("label", {
1380
+ children: [/* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("label", {
1367
1381
  className: "block text-sm font-medium mb-1",
1368
1382
  children: o("devportal.query", "Query")
1369
- }), /* @__PURE__ */ q("textarea", {
1383
+ }), /* @__PURE__ */ K("textarea", {
1370
1384
  value: s,
1371
1385
  onChange: (e) => c(e.target.value),
1372
1386
  className: "w-full h-64 rounded-md border px-3 py-2 text-sm font-mono bg-background resize-y",
1373
1387
  spellCheck: !1
1374
- })] }), /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("label", {
1388
+ })] }), /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("label", {
1375
1389
  className: "block text-sm font-medium mb-1",
1376
1390
  children: o("devportal.variablesJson", "Variables (JSON)")
1377
- }), /* @__PURE__ */ q("textarea", {
1391
+ }), /* @__PURE__ */ K("textarea", {
1378
1392
  value: l,
1379
1393
  onChange: (e) => u(e.target.value),
1380
1394
  className: "w-full h-64 rounded-md border px-3 py-2 text-sm font-mono bg-background resize-y",
1381
1395
  spellCheck: !1
1382
1396
  })] })]
1383
1397
  }),
1384
- /* @__PURE__ */ J("button", {
1385
- onClick: x,
1398
+ /* @__PURE__ */ q("button", {
1399
+ onClick: ee,
1386
1400
  disabled: p,
1387
1401
  className: "flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors disabled:opacity-50",
1388
- children: [p ? /* @__PURE__ */ q(V, {
1402
+ children: [p ? /* @__PURE__ */ K(B, {
1389
1403
  size: 16,
1390
1404
  className: "animate-spin"
1391
- }) : /* @__PURE__ */ q(z, { size: 16 }), p ? o("devportal.executing", "Executing...") : o("devportal.executeQuery", "Execute Query")]
1405
+ }) : /* @__PURE__ */ K(R, { size: 16 }), p ? o("devportal.executing", "Executing...") : o("devportal.executeQuery", "Execute Query")]
1392
1406
  }),
1393
- d && /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("label", {
1407
+ d && /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("label", {
1394
1408
  className: "block text-sm font-medium mb-1",
1395
1409
  children: o("devportal.response", "Response")
1396
- }), /* @__PURE__ */ q("pre", {
1410
+ }), /* @__PURE__ */ K("pre", {
1397
1411
  className: "w-full max-h-96 overflow-auto rounded-md border bg-muted p-4 text-xs font-mono",
1398
1412
  children: d
1399
1413
  })] })
1400
1414
  ]
1401
1415
  });
1402
- }, He = ({ 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 }) => {
1416
+ }, Ue = ({ 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 }) => {
1403
1417
  let d = M(null), f = A(async (e) => {
1404
1418
  try {
1405
1419
  r((await s(e)).downloadUrl);
1406
1420
  } catch {}
1407
1421
  }, [s, r]);
1408
- return /* @__PURE__ */ J("div", {
1422
+ return /* @__PURE__ */ q("div", {
1409
1423
  className: "space-y-1.5",
1410
1424
  children: [
1411
- /* @__PURE__ */ q("label", {
1425
+ /* @__PURE__ */ K("label", {
1412
1426
  className: "text-sm font-medium",
1413
1427
  children: e
1414
1428
  }),
1415
- /* @__PURE__ */ J("div", {
1429
+ /* @__PURE__ */ q("div", {
1416
1430
  className: "flex gap-3 items-start",
1417
- children: [/* @__PURE__ */ J("div", {
1431
+ children: [/* @__PURE__ */ q("div", {
1418
1432
  className: t("relative shrink-0 w-20 rounded-lg border border-border bg-bg-sunken overflow-hidden flex items-center justify-center", o),
1419
- children: [n ? /* @__PURE__ */ q("img", {
1433
+ children: [n ? /* @__PURE__ */ K("img", {
1420
1434
  src: n,
1421
1435
  alt: e,
1422
1436
  className: "w-full h-full object-cover"
1423
- }) : /* @__PURE__ */ q(W, {
1437
+ }) : /* @__PURE__ */ K(U, {
1424
1438
  size: 18,
1425
1439
  className: "text-text-secondary opacity-40"
1426
- }), c && /* @__PURE__ */ J("div", {
1440
+ }), c && /* @__PURE__ */ q("div", {
1427
1441
  className: "absolute inset-0 bg-black/40 flex flex-col items-center justify-center gap-1",
1428
- children: [/* @__PURE__ */ q(V, {
1442
+ children: [/* @__PURE__ */ K(B, {
1429
1443
  size: 14,
1430
1444
  className: "animate-spin text-white"
1431
- }), /* @__PURE__ */ J("span", {
1445
+ }), /* @__PURE__ */ q("span", {
1432
1446
  className: "text-white text-xs",
1433
1447
  children: [l, "%"]
1434
1448
  })]
1435
1449
  })]
1436
- }), /* @__PURE__ */ J("div", {
1450
+ }), /* @__PURE__ */ q("div", {
1437
1451
  className: "flex-1 space-y-1.5",
1438
1452
  children: [
1439
- /* @__PURE__ */ q("input", {
1453
+ /* @__PURE__ */ K("input", {
1440
1454
  type: "url",
1441
1455
  value: n,
1442
1456
  onChange: (e) => r(e.target.value),
1443
1457
  placeholder: "https://...",
1444
1458
  className: "w-full rounded-md border border-border bg-bg-input px-3 py-1.5 text-sm placeholder:text-text-placeholder focus:outline-none focus:ring-2 focus:ring-primary/30"
1445
1459
  }),
1446
- /* @__PURE__ */ q("input", {
1460
+ /* @__PURE__ */ K("input", {
1447
1461
  ref: d,
1448
1462
  type: "file",
1449
1463
  accept: a,
@@ -1453,27 +1467,27 @@ var Ae = [
1453
1467
  t && f(t), e.target.value = "";
1454
1468
  }
1455
1469
  }),
1456
- /* @__PURE__ */ J("button", {
1470
+ /* @__PURE__ */ q("button", {
1457
1471
  type: "button",
1458
1472
  disabled: c,
1459
1473
  onClick: () => d.current?.click(),
1460
1474
  className: "inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs font-medium hover:bg-muted transition-colors disabled:opacity-50",
1461
- children: [/* @__PURE__ */ q(W, { size: 11 }), c ? `Uploading… ${l}%` : "Upload image"]
1475
+ children: [/* @__PURE__ */ K(U, { size: 11 }), c ? `Uploading… ${l}%` : "Upload image"]
1462
1476
  }),
1463
- u && /* @__PURE__ */ q("p", {
1477
+ u && /* @__PURE__ */ K("p", {
1464
1478
  className: "text-xs text-status-error-text",
1465
1479
  children: u
1466
1480
  })
1467
1481
  ]
1468
1482
  })]
1469
1483
  }),
1470
- i && /* @__PURE__ */ q("p", {
1484
+ i && /* @__PURE__ */ K("p", {
1471
1485
  className: "text-xs text-text-secondary",
1472
1486
  children: i
1473
1487
  })
1474
1488
  ]
1475
1489
  });
1476
- }, Ue = ({ urls: e, onChange: n, upload: r, uploading: i, progress: a, error: o }) => {
1490
+ }, We = ({ urls: e, onChange: n, upload: r, uploading: i, progress: a, error: o }) => {
1477
1491
  let s = M(null), c = A(async (t) => {
1478
1492
  try {
1479
1493
  let i = await r(t);
@@ -1486,45 +1500,45 @@ var Ae = [
1486
1500
  ]), l = (t) => {
1487
1501
  n(e.filter((e, n) => n !== t));
1488
1502
  };
1489
- return /* @__PURE__ */ J("div", {
1503
+ return /* @__PURE__ */ q("div", {
1490
1504
  className: "space-y-2",
1491
1505
  children: [
1492
- /* @__PURE__ */ q("label", {
1506
+ /* @__PURE__ */ K("label", {
1493
1507
  className: "text-sm font-medium",
1494
1508
  children: "Screenshots"
1495
1509
  }),
1496
- /* @__PURE__ */ J("div", {
1510
+ /* @__PURE__ */ q("div", {
1497
1511
  className: "flex flex-wrap gap-3",
1498
- children: [e.map((e, t) => /* @__PURE__ */ J("div", {
1512
+ children: [e.map((e, t) => /* @__PURE__ */ q("div", {
1499
1513
  className: "relative group w-36 aspect-video rounded-lg border border-border overflow-hidden bg-bg-sunken",
1500
- children: [/* @__PURE__ */ q("img", {
1514
+ children: [/* @__PURE__ */ K("img", {
1501
1515
  src: e,
1502
1516
  alt: `Screenshot ${t + 1}`,
1503
1517
  className: "w-full h-full object-cover"
1504
- }), /* @__PURE__ */ q("button", {
1518
+ }), /* @__PURE__ */ K("button", {
1505
1519
  type: "button",
1506
1520
  onClick: () => l(t),
1507
1521
  className: "absolute top-1 right-1 rounded-full bg-black/60 text-white p-0.5 opacity-0 group-hover:opacity-100 transition-opacity",
1508
- children: /* @__PURE__ */ q(xe, { size: 12 })
1522
+ children: /* @__PURE__ */ K(Se, { size: 12 })
1509
1523
  })]
1510
- }, t)), /* @__PURE__ */ q("button", {
1524
+ }, t)), /* @__PURE__ */ K("button", {
1511
1525
  type: "button",
1512
1526
  disabled: i,
1513
1527
  onClick: () => s.current?.click(),
1514
1528
  className: t("w-36 aspect-video rounded-lg border-2 border-dashed border-border 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"),
1515
- children: i ? /* @__PURE__ */ J(K, { children: [/* @__PURE__ */ q(V, {
1529
+ children: i ? /* @__PURE__ */ q(G, { children: [/* @__PURE__ */ K(B, {
1516
1530
  size: 18,
1517
1531
  className: "animate-spin text-primary"
1518
- }), /* @__PURE__ */ J("span", {
1532
+ }), /* @__PURE__ */ q("span", {
1519
1533
  className: "text-xs",
1520
1534
  children: [a, "%"]
1521
- })] }) : /* @__PURE__ */ J(K, { children: [/* @__PURE__ */ q(W, { size: 18 }), /* @__PURE__ */ q("span", {
1535
+ })] }) : /* @__PURE__ */ q(G, { children: [/* @__PURE__ */ K(U, { size: 18 }), /* @__PURE__ */ K("span", {
1522
1536
  className: "text-xs",
1523
1537
  children: "Add screenshot"
1524
1538
  })] })
1525
1539
  })]
1526
1540
  }),
1527
- /* @__PURE__ */ q("input", {
1541
+ /* @__PURE__ */ K("input", {
1528
1542
  ref: s,
1529
1543
  type: "file",
1530
1544
  accept: "image/png,image/jpeg,image/webp,image/gif",
@@ -1534,19 +1548,19 @@ var Ae = [
1534
1548
  t && c(t), e.target.value = "";
1535
1549
  }
1536
1550
  }),
1537
- o && /* @__PURE__ */ q("p", {
1551
+ o && /* @__PURE__ */ K("p", {
1538
1552
  className: "text-xs text-status-error-text",
1539
1553
  children: o
1540
1554
  })
1541
1555
  ]
1542
1556
  });
1543
- }, We = new Set(["workflow", "template"]), Ge = [{
1557
+ }, Ge = new Set(["workflow", "template"]), Ke = [{
1544
1558
  value: "FREE",
1545
1559
  label: "Free"
1546
1560
  }, {
1547
1561
  value: "PAID",
1548
1562
  label: "Paid"
1549
- }], Ke = [
1563
+ }], qe = [
1550
1564
  {
1551
1565
  value: "agent",
1552
1566
  label: "Agent"
@@ -1616,7 +1630,7 @@ var Ae = [
1616
1630
  label: "Component"
1617
1631
  }
1618
1632
  ];
1619
- function qe(e) {
1633
+ function Je(e) {
1620
1634
  let t = e.manifest ?? {}, n = t.identity ?? {}, r = (t.digital ?? {}).install ?? {}, i = t.compatibility ?? {}, a = Array.isArray(t.permissions) ? t.permissions : [], o = e.pricingDetails ?? {}, s = Array.isArray(e.screenshots) ? e.screenshots.join("\n") : "";
1621
1635
  return {
1622
1636
  iconUrl: e.iconUrl ?? "",
@@ -1645,41 +1659,41 @@ function qe(e) {
1645
1659
  manifestJsonContent: typeof t.jsonContent == "string" ? t.jsonContent : typeof t.content == "string" ? t.content : ""
1646
1660
  };
1647
1661
  }
1648
- var Je = we`
1662
+ var Ye = J`
1649
1663
  query MyPublisherForListing {
1650
1664
  myPublisher { id }
1651
1665
  }
1652
- `, Ye = we`
1666
+ `, Xe = J`
1653
1667
  query PublisherProductsForListing($publisherId: String!) {
1654
1668
  products(filter: { publisherId: $publisherId }) { id productId }
1655
1669
  }
1656
- `, Xe = we`
1670
+ `, Ze = J`
1657
1671
  mutation UpdateStoreProduct($input: UpdateProductInput!) {
1658
1672
  updateProduct(input: $input) { id name description }
1659
1673
  }
1660
- `, Ze = ({ app: n }) => {
1674
+ `, Qe = ({ app: n }) => {
1661
1675
  let { workspacesGatewayUrl: r, authToken: i, workspaceId: a, getWorkspaceToken: o, navigate: s, basePath: c } = e(), { t: l } = P(), u = (e, t) => {
1662
1676
  let n = l(e);
1663
1677
  return n === e ? t : n;
1664
- }, [d, f] = N(() => qe(n)), [p, m] = N(!1), [h, _] = N(!1), y = M(n);
1678
+ }, [d, f] = N(() => Je(n)), [p, m] = N(!1), [h, _] = N(!1), y = M(n);
1665
1679
  y.current = n;
1666
- let { data: x } = Te(Je, { fetchPolicy: "cache-first" }), S = x?.myPublisher?.id ?? null, { data: C } = Te(Ye, {
1667
- variables: { publisherId: S ?? "" },
1680
+ let { data: ee } = Y(Ye, { fetchPolicy: "cache-first" }), x = ee?.myPublisher?.id ?? null, { data: S } = Y(Xe, {
1681
+ variables: { publisherId: x ?? "" },
1668
1682
  fetchPolicy: "cache-first",
1669
- skip: !S
1670
- }), ee = C?.products?.find((e) => e.productId === n.id)?.id ?? null, [w] = Y(Xe), [te] = v(), [E, { loading: ne }] = g();
1683
+ skip: !x
1684
+ }), te = S?.products?.find((e) => e.productId === n.id)?.id ?? null, [C] = Ee(Ze), [ne] = v(), [T, { loading: E }] = g();
1671
1685
  ce(() => {
1672
- f(qe(y.current));
1686
+ f(Je(y.current));
1673
1687
  }, [n.id]);
1674
- let k = (e, t) => {
1688
+ let O = (e, t) => {
1675
1689
  f((n) => ({
1676
1690
  ...n,
1677
1691
  [e]: t
1678
1692
  }));
1679
- }, ie = async () => {
1693
+ }, ae = async () => {
1680
1694
  m(!0);
1681
1695
  try {
1682
- let e = d.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean), t = d.manifestPermissionsText.split("\n").map((e) => e.trim()).filter(Boolean), r = We.has(d.manifestItemType), i = n.manifest ?? {}, a = {
1696
+ let e = d.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean), t = d.manifestPermissionsText.split("\n").map((e) => e.trim()).filter(Boolean), r = Ge.has(d.manifestItemType), i = n.manifest ?? {}, a = {
1683
1697
  manifestVersion: typeof i.manifestVersion == "string" ? i.manifestVersion : "1.0",
1684
1698
  itemType: d.manifestItemType || void 0,
1685
1699
  identity: {
@@ -1697,7 +1711,7 @@ var Je = we`
1697
1711
  let e = parseFloat(d.price);
1698
1712
  isNaN(e) || (o.price = e), d.currency && (o.currency = d.currency);
1699
1713
  }
1700
- await te({ variables: {
1714
+ await ne({ variables: {
1701
1715
  id: n.id,
1702
1716
  input: {
1703
1717
  iconUrl: d.iconUrl || null,
@@ -1716,8 +1730,8 @@ var Je = we`
1716
1730
  pricingDetails: Object.keys(o).length > 0 ? o : null,
1717
1731
  manifest: a
1718
1732
  }
1719
- } }), ee && await w({ variables: { input: {
1720
- id: ee,
1733
+ } }), te && await C({ variables: { input: {
1734
+ id: te,
1721
1735
  name: n.name,
1722
1736
  description: d.shortDescription || void 0,
1723
1737
  longDescription: d.description || void 0,
@@ -1725,19 +1739,19 @@ var Je = we`
1725
1739
  screenshots: e.length > 0 ? e : void 0,
1726
1740
  documentationUrl: d.documentationUrl || void 0,
1727
1741
  category: n.category || void 0
1728
- } } }), T("success");
1742
+ } } }), w("success");
1729
1743
  } catch {
1730
- T("error");
1744
+ w("error");
1731
1745
  } finally {
1732
1746
  m(!1);
1733
1747
  }
1734
- }, ae = async () => {
1748
+ }, oe = async () => {
1735
1749
  try {
1736
- await E({ variables: { id: n.id } }), T("success");
1750
+ await T({ variables: { id: n.id } }), w("success");
1737
1751
  } catch {
1738
- T("error");
1752
+ w("error");
1739
1753
  }
1740
- }, oe = M(null), j = M(null), { upload: F, uploading: I, progress: ue, error: fe } = se(r, i, a, o), { upload: z, uploading: pe, progress: me, error: he } = se(r, i, a, o, "/DevPortal/Assets"), { upload: H, uploading: ge, progress: _e, error: ye } = se(r, i, a, o, "/DevPortal/Assets"), { upload: G, uploading: be, progress: xe, error: Se } = se(r, i, a, o, "/DevPortal/Assets"), Ce = A(async (e) => {
1754
+ }, se = M(null), j = M(null), { upload: F, uploading: I, progress: ue, error: pe } = k(r, i, a, o), { upload: R, uploading: me, progress: he, error: ge } = k(r, i, a, o, "/DevPortal/Assets"), { upload: V, uploading: _e, progress: ve, error: H } = k(r, i, a, o, "/DevPortal/Assets"), { upload: W, uploading: xe, progress: Se, error: Ce } = k(r, i, a, o, "/DevPortal/Assets"), we = A(async (e) => {
1741
1755
  let t = e.target.files?.[0];
1742
1756
  if (t) {
1743
1757
  e.target.value = "";
@@ -1749,7 +1763,7 @@ var Je = we`
1749
1763
  }));
1750
1764
  } catch {}
1751
1765
  }
1752
- }, [F]), we = A(async (e) => {
1766
+ }, [F]), Te = A(async (e) => {
1753
1767
  e.preventDefault(), _(!1);
1754
1768
  let t = e.dataTransfer.files?.[0];
1755
1769
  if (t) try {
@@ -1759,7 +1773,7 @@ var Je = we`
1759
1773
  manifestRegistryUrl: e.downloadUrl
1760
1774
  }));
1761
1775
  } catch {}
1762
- }, [F]), Ee = A((e) => {
1776
+ }, [F]), J = A((e) => {
1763
1777
  let t = e.target.files?.[0];
1764
1778
  if (!t) return;
1765
1779
  let n = new FileReader();
@@ -1779,7 +1793,7 @@ var Je = we`
1779
1793
  } catch {}
1780
1794
  }, n.readAsText(t), e.target.value = "";
1781
1795
  }, []), De = A(() => {
1782
- let e = d.manifestPermissionsText.split("\n").map((e) => e.trim()).filter(Boolean), t = We.has(d.manifestItemType), r = {
1796
+ let e = d.manifestPermissionsText.split("\n").map((e) => e.trim()).filter(Boolean), t = Ge.has(d.manifestItemType), r = {
1783
1797
  manifestVersion: "1.0",
1784
1798
  itemType: d.manifestItemType || void 0,
1785
1799
  identity: {
@@ -1794,9 +1808,9 @@ var Je = we`
1794
1808
  compatibility: { minPlatformVersion: d.manifestMinPlatformVersion }
1795
1809
  }, i = new Blob([JSON.stringify(r, null, 2)], { type: "application/json" }), a = URL.createObjectURL(i), o = document.createElement("a");
1796
1810
  o.href = a, o.download = `${n.slug}-manifest.json`, o.click(), URL.revokeObjectURL(a);
1797
- }, [n.slug, d]), Oe = We.has(d.manifestItemType), ke = d.manifestInstallType === "builtin", Ae = d.pricingType !== "FREE", je = d.manifestRegistryUrl ? d.manifestRegistryUrl.split("/").pop()?.split("?")[0] ?? "" : "";
1811
+ }, [n.slug, d]), Oe = Ge.has(d.manifestItemType), X = d.manifestInstallType === "builtin", ke = d.pricingType !== "FREE", Ae = d.manifestRegistryUrl ? d.manifestRegistryUrl.split("/").pop()?.split("?")[0] ?? "" : "";
1798
1812
  n.status;
1799
- let X = n.status === "SUBMITTED", Z = n.status === "PUBLISHED", Me = n.appType === "NODE" || n.appType === "WORKFLOW", Ne = [
1813
+ let je = n.status === "SUBMITTED", Z = n.status === "PUBLISHED", Me = n.appType === "NODE" || n.appType === "WORKFLOW", Ne = [
1800
1814
  {
1801
1815
  label: "Short description",
1802
1816
  done: !!d.shortDescription.trim()
@@ -1818,37 +1832,37 @@ var Je = we`
1818
1832
  done: !!d.termsOfServiceUrl.trim()
1819
1833
  }
1820
1834
  ], Pe = Ne.filter((e) => e.done).length, Fe = Ne.length;
1821
- return /* @__PURE__ */ J("div", {
1835
+ return /* @__PURE__ */ q("div", {
1822
1836
  className: "space-y-8 max-w-3xl",
1823
1837
  children: [
1824
- /* @__PURE__ */ J("div", {
1838
+ /* @__PURE__ */ q("div", {
1825
1839
  className: "rounded-lg border border-primary/20 bg-primary/5 px-4 py-3 space-y-2",
1826
- children: [/* @__PURE__ */ q("p", {
1840
+ children: [/* @__PURE__ */ K("p", {
1827
1841
  className: "text-sm font-semibold text-primary",
1828
1842
  children: u("devportal.listingTabPurpose", "What is this tab for?")
1829
- }), /* @__PURE__ */ J("ul", {
1843
+ }), /* @__PURE__ */ q("ul", {
1830
1844
  className: "text-sm text-muted-foreground space-y-1 list-none pl-0",
1831
1845
  children: [
1832
- /* @__PURE__ */ J("li", {
1846
+ /* @__PURE__ */ q("li", {
1833
1847
  className: "flex items-start gap-2",
1834
- children: [/* @__PURE__ */ q(U, {
1848
+ children: [/* @__PURE__ */ K(be, {
1835
1849
  size: 14,
1836
1850
  className: "mt-0.5 shrink-0 text-primary"
1837
- }), /* @__PURE__ */ J("span", { children: [
1838
- /* @__PURE__ */ q("strong", { children: u("devportal.thisTab", "This tab") }),
1851
+ }), /* @__PURE__ */ q("span", { children: [
1852
+ /* @__PURE__ */ K("strong", { children: u("devportal.thisTab", "This tab") }),
1839
1853
  " ",
1840
1854
  u("devportal.listingTabDesc", "controls your store card — the name, description, icon and screenshots users see in the marketplace. Save changes here any time without creating a new release.")
1841
1855
  ] })]
1842
1856
  }),
1843
- Me && /* @__PURE__ */ J("li", {
1857
+ Me && /* @__PURE__ */ q("li", {
1844
1858
  className: "flex items-start gap-2",
1845
- children: [/* @__PURE__ */ q(R, {
1859
+ children: [/* @__PURE__ */ K(de, {
1846
1860
  size: 14,
1847
1861
  className: "mt-0.5 shrink-0 text-primary"
1848
- }), /* @__PURE__ */ J("span", { children: [
1862
+ }), /* @__PURE__ */ q("span", { children: [
1849
1863
  u("devportal.versionsTabDesc", "To release a new version (ZIP package + manifest), go to the"),
1850
1864
  " ",
1851
- /* @__PURE__ */ q("button", {
1865
+ /* @__PURE__ */ K("button", {
1852
1866
  type: "button",
1853
1867
  className: "underline text-primary hover:no-underline",
1854
1868
  onClick: () => s?.(`${c}/apps/${n.id}/versions`),
@@ -1857,26 +1871,26 @@ var Je = we`
1857
1871
  "."
1858
1872
  ] })]
1859
1873
  }),
1860
- /* @__PURE__ */ J("li", {
1874
+ /* @__PURE__ */ q("li", {
1861
1875
  className: "flex items-start gap-2",
1862
- children: [/* @__PURE__ */ q(ve, {
1876
+ children: [/* @__PURE__ */ K(ye, {
1863
1877
  size: 14,
1864
1878
  className: "mt-0.5 shrink-0 text-primary"
1865
- }), /* @__PURE__ */ q("span", { children: u("devportal.submitTabDesc", "When your listing is ready, click \"Submit for Review\" to send it to the review team.") })]
1879
+ }), /* @__PURE__ */ K("span", { children: u("devportal.submitTabDesc", "When your listing is ready, click \"Submit for Review\" to send it to the review team.") })]
1866
1880
  })
1867
1881
  ]
1868
1882
  })]
1869
1883
  }),
1870
- !Z && /* @__PURE__ */ J("div", {
1884
+ !Z && /* @__PURE__ */ q("div", {
1871
1885
  className: "rounded-lg border bg-card p-4 space-y-3",
1872
- children: [/* @__PURE__ */ J("div", {
1886
+ children: [/* @__PURE__ */ q("div", {
1873
1887
  className: "flex items-center justify-between",
1874
- children: [/* @__PURE__ */ J("p", {
1888
+ children: [/* @__PURE__ */ q("p", {
1875
1889
  className: "text-sm font-medium",
1876
1890
  children: [
1877
1891
  u("devportal.listingCompleteness", "Listing completeness"),
1878
1892
  " ",
1879
- /* @__PURE__ */ J("span", {
1893
+ /* @__PURE__ */ q("span", {
1880
1894
  className: t("ml-1 text-xs font-semibold", Pe === Fe ? "text-status-success-text" : "text-status-warning-text"),
1881
1895
  children: [
1882
1896
  Pe,
@@ -1885,38 +1899,38 @@ var Je = we`
1885
1899
  ]
1886
1900
  })
1887
1901
  ]
1888
- }), Pe === Fe && /* @__PURE__ */ J("span", {
1902
+ }), Pe === Fe && /* @__PURE__ */ q("span", {
1889
1903
  className: "text-xs text-status-success-text flex items-center gap-1",
1890
- children: [/* @__PURE__ */ q(L, { size: 12 }), u("devportal.readyToSubmit", "Ready to submit")]
1904
+ children: [/* @__PURE__ */ K(L, { size: 12 }), u("devportal.readyToSubmit", "Ready to submit")]
1891
1905
  })]
1892
- }), /* @__PURE__ */ q("div", {
1906
+ }), /* @__PURE__ */ K("div", {
1893
1907
  className: "grid grid-cols-2 sm:grid-cols-3 gap-2",
1894
- children: Ne.map((e) => /* @__PURE__ */ J("div", {
1908
+ children: Ne.map((e) => /* @__PURE__ */ q("div", {
1895
1909
  className: "flex items-center gap-1.5 text-xs",
1896
- children: [e.done ? /* @__PURE__ */ q(L, {
1910
+ children: [e.done ? /* @__PURE__ */ K(L, {
1897
1911
  size: 12,
1898
1912
  className: "text-status-success-text shrink-0"
1899
- }) : /* @__PURE__ */ q(le, {
1913
+ }) : /* @__PURE__ */ K(le, {
1900
1914
  size: 12,
1901
1915
  className: "text-status-warning-text shrink-0"
1902
- }), /* @__PURE__ */ q("span", {
1916
+ }), /* @__PURE__ */ K("span", {
1903
1917
  className: e.done ? "text-foreground" : "text-muted-foreground",
1904
1918
  children: e.label
1905
1919
  })]
1906
1920
  }, e.label))
1907
1921
  })]
1908
1922
  }),
1909
- Z ? /* @__PURE__ */ J("div", {
1923
+ Z ? /* @__PURE__ */ q("div", {
1910
1924
  className: "flex items-start gap-3 rounded-lg border border-success/30 bg-success/10 px-4 py-3",
1911
- children: [/* @__PURE__ */ q(L, {
1925
+ children: [/* @__PURE__ */ K(L, {
1912
1926
  size: 16,
1913
1927
  className: "text-success mt-0.5 shrink-0"
1914
- }), /* @__PURE__ */ J("div", {
1928
+ }), /* @__PURE__ */ q("div", {
1915
1929
  className: "text-sm",
1916
- children: [/* @__PURE__ */ q("span", {
1930
+ children: [/* @__PURE__ */ K("span", {
1917
1931
  className: "font-medium text-success",
1918
1932
  children: u("devportal.storeListing.published", "Published")
1919
- }), n.publishedAt && /* @__PURE__ */ J("span", {
1933
+ }), n.publishedAt && /* @__PURE__ */ q("span", {
1920
1934
  className: "text-muted-foreground ml-2",
1921
1935
  children: [
1922
1936
  u("devportal.storeListing.since", "since"),
@@ -1925,155 +1939,155 @@ var Je = we`
1925
1939
  ]
1926
1940
  })]
1927
1941
  })]
1928
- }) : X ? /* @__PURE__ */ J("div", {
1942
+ }) : je ? /* @__PURE__ */ q("div", {
1929
1943
  className: "flex items-start gap-3 rounded-lg border border-primary/30 bg-primary/5 px-4 py-3",
1930
- children: [/* @__PURE__ */ q(R, {
1944
+ children: [/* @__PURE__ */ K(de, {
1931
1945
  size: 16,
1932
1946
  className: "text-primary mt-0.5 shrink-0"
1933
- }), /* @__PURE__ */ J("div", {
1947
+ }), /* @__PURE__ */ q("div", {
1934
1948
  className: "text-sm",
1935
1949
  children: [
1936
- /* @__PURE__ */ q("span", {
1950
+ /* @__PURE__ */ K("span", {
1937
1951
  className: "font-medium text-primary",
1938
1952
  children: u("devportal.storeListing.underReview", "Submitted for review")
1939
1953
  }),
1940
- n.submittedAt && /* @__PURE__ */ q("span", {
1954
+ n.submittedAt && /* @__PURE__ */ K("span", {
1941
1955
  className: "text-muted-foreground ml-2",
1942
1956
  children: new Date(n.submittedAt).toLocaleDateString()
1943
1957
  }),
1944
- n.reviewStatus && /* @__PURE__ */ J("span", {
1958
+ n.reviewStatus && /* @__PURE__ */ q("span", {
1945
1959
  className: "text-muted-foreground ml-2",
1946
1960
  children: ["· ", n.reviewStatus]
1947
1961
  })
1948
1962
  ]
1949
1963
  })]
1950
- }) : /* @__PURE__ */ J("div", {
1964
+ }) : /* @__PURE__ */ q("div", {
1951
1965
  className: "flex items-start gap-3 rounded-lg border border-warning/30 bg-warning/5 px-4 py-3",
1952
- children: [/* @__PURE__ */ q(le, {
1966
+ children: [/* @__PURE__ */ K(le, {
1953
1967
  size: 16,
1954
1968
  className: "text-warning mt-0.5 shrink-0"
1955
- }), /* @__PURE__ */ J("div", {
1969
+ }), /* @__PURE__ */ q("div", {
1956
1970
  className: "text-sm",
1957
- children: [/* @__PURE__ */ q("span", {
1971
+ children: [/* @__PURE__ */ K("span", {
1958
1972
  className: "font-medium text-warning",
1959
1973
  children: u("devportal.storeListing.draft", "Draft")
1960
- }), /* @__PURE__ */ q("span", {
1974
+ }), /* @__PURE__ */ K("span", {
1961
1975
  className: "text-muted-foreground ml-2",
1962
1976
  children: u("devportal.storeListing.draftHint", "Complete your store listing and submit for review to publish.")
1963
1977
  })]
1964
1978
  })]
1965
1979
  }),
1966
- Me ? /* @__PURE__ */ J("div", {
1980
+ Me ? /* @__PURE__ */ q("div", {
1967
1981
  className: "rounded-lg border border-border-subtle bg-bg-sunken px-4 py-4 flex items-start gap-3",
1968
- children: [/* @__PURE__ */ q(B, {
1982
+ children: [/* @__PURE__ */ K(z, {
1969
1983
  size: 16,
1970
1984
  className: "shrink-0 mt-0.5 text-muted-foreground"
1971
- }), /* @__PURE__ */ J("div", {
1985
+ }), /* @__PURE__ */ q("div", {
1972
1986
  className: "text-sm space-y-1",
1973
- children: [/* @__PURE__ */ q("p", {
1987
+ children: [/* @__PURE__ */ K("p", {
1974
1988
  className: "font-medium",
1975
1989
  children: u("devportal.packageManagedInVersions", "ZIP package & manifest are managed in Versions")
1976
- }), /* @__PURE__ */ q("p", {
1990
+ }), /* @__PURE__ */ K("p", {
1977
1991
  className: "text-muted-foreground",
1978
1992
  children: u("devportal.packageManagedInVersionsDesc", "For NODE and WORKFLOW types, each release is uploaded through the Versions page — including the ZIP archive and manifest.json. This keeps your code releases separate from your store card.")
1979
1993
  })]
1980
1994
  })]
1981
- }) : /* @__PURE__ */ q(b, {
1995
+ }) : /* @__PURE__ */ K(b, {
1982
1996
  title: u("devportal.package", "Package"),
1983
1997
  description: u("devportal.packageDescription", "Technical configuration — how FluidGrid installs and runs this item"),
1984
- children: /* @__PURE__ */ J("div", {
1998
+ children: /* @__PURE__ */ q("div", {
1985
1999
  className: "space-y-6",
1986
2000
  children: [
1987
- /* @__PURE__ */ q(re, {
2001
+ /* @__PURE__ */ K(re, {
1988
2002
  label: u("devportal.storeItemType", "Item Type"),
1989
2003
  value: d.manifestItemType,
1990
2004
  onChange: (e) => {
1991
2005
  let t = e.target.value;
1992
- k("manifestItemType", t), We.has(t) ? k("manifestInstallType", "json") : d.manifestInstallType === "json" && k("manifestInstallType", "zip");
2006
+ O("manifestItemType", t), Ge.has(t) ? O("manifestInstallType", "json") : d.manifestInstallType === "json" && O("manifestInstallType", "zip");
1993
2007
  },
1994
- options: Ke,
2008
+ options: qe,
1995
2009
  placeholder: u("devportal.selectItemType", "Select item type…"),
1996
2010
  hint: u("devportal.storeItemTypeHint", "Determines how this item is categorised and how the platform runs it")
1997
2011
  }),
1998
- /* @__PURE__ */ J("div", {
2012
+ /* @__PURE__ */ q("div", {
1999
2013
  className: "grid gap-4 sm:grid-cols-2",
2000
- children: [/* @__PURE__ */ q(D, {
2014
+ children: [/* @__PURE__ */ K(D, {
2001
2015
  label: u("devportal.manifestDisplayName", "Display Name"),
2002
2016
  value: d.manifestDisplayName,
2003
- onChange: (e) => k("manifestDisplayName", e.target.value),
2017
+ onChange: (e) => O("manifestDisplayName", e.target.value),
2004
2018
  placeholder: "My Awesome Node"
2005
- }), /* @__PURE__ */ q(D, {
2019
+ }), /* @__PURE__ */ K(D, {
2006
2020
  label: u("devportal.manifestVersion", "Version"),
2007
2021
  value: d.manifestVersion,
2008
- onChange: (e) => k("manifestVersion", e.target.value),
2022
+ onChange: (e) => O("manifestVersion", e.target.value),
2009
2023
  placeholder: "1.0.0",
2010
2024
  hint: u("devportal.semverHint", "Semantic version (MAJOR.MINOR.PATCH)")
2011
2025
  })]
2012
2026
  }),
2013
- Oe && /* @__PURE__ */ q(O, {
2027
+ Oe && /* @__PURE__ */ K(ie, {
2014
2028
  label: u("devportal.jsonContent", d.manifestItemType === "workflow" ? "Workflow Definition (JSON)" : "Template Definition (JSON)"),
2015
2029
  value: d.manifestJsonContent,
2016
- onChange: (e) => k("manifestJsonContent", e.target.value),
2030
+ onChange: (e) => O("manifestJsonContent", e.target.value),
2017
2031
  rows: 12,
2018
2032
  placeholder: "{\n \"nodes\": [],\n \"edges\": []\n}",
2019
2033
  hint: u("devportal.jsonContentHint", "Paste the full JSON definition. Stored and applied directly — no zip needed.")
2020
2034
  }),
2021
- !Oe && /* @__PURE__ */ J("div", {
2035
+ !Oe && /* @__PURE__ */ q("div", {
2022
2036
  className: "space-y-3",
2023
2037
  children: [
2024
- /* @__PURE__ */ J("div", {
2038
+ /* @__PURE__ */ q("div", {
2025
2039
  className: "flex items-center justify-between flex-wrap gap-2",
2026
- children: [/* @__PURE__ */ q("label", {
2040
+ children: [/* @__PURE__ */ K("label", {
2027
2041
  className: "text-sm font-medium",
2028
2042
  children: u("devportal.packageFile", "Package File")
2029
- }), /* @__PURE__ */ J("label", {
2043
+ }), /* @__PURE__ */ q("label", {
2030
2044
  className: "flex items-center gap-2 text-sm cursor-pointer select-none",
2031
- children: [/* @__PURE__ */ q("input", {
2045
+ children: [/* @__PURE__ */ K("input", {
2032
2046
  type: "checkbox",
2033
- checked: ke,
2034
- onChange: (e) => k("manifestInstallType", e.target.checked ? "builtin" : "zip"),
2047
+ checked: X,
2048
+ onChange: (e) => O("manifestInstallType", e.target.checked ? "builtin" : "zip"),
2035
2049
  className: "h-4 w-4 rounded border-border accent-primary"
2036
- }), /* @__PURE__ */ q("span", {
2050
+ }), /* @__PURE__ */ K("span", {
2037
2051
  className: "text-text-secondary",
2038
2052
  children: u("devportal.builtinToggle", "Built-in (pre-installed, no upload needed)")
2039
2053
  })]
2040
2054
  })]
2041
2055
  }),
2042
- !ke && /* @__PURE__ */ J(K, { children: [
2043
- /* @__PURE__ */ J("div", {
2056
+ !X && /* @__PURE__ */ q(G, { children: [
2057
+ /* @__PURE__ */ q("div", {
2044
2058
  className: "flex gap-3 rounded-lg border border-border-subtle bg-bg-sunken p-3 text-sm text-text-secondary",
2045
- children: [/* @__PURE__ */ q(B, {
2059
+ children: [/* @__PURE__ */ K(z, {
2046
2060
  size: 15,
2047
2061
  className: "mt-0.5 shrink-0"
2048
- }), /* @__PURE__ */ J("span", { children: [
2062
+ }), /* @__PURE__ */ q("span", { children: [
2049
2063
  u("devportal.zipModelHint", "Package your code and a "),
2050
- /* @__PURE__ */ q("code", {
2064
+ /* @__PURE__ */ K("code", {
2051
2065
  className: "rounded bg-muted px-1 py-0.5 font-mono text-xs",
2052
2066
  children: "manifest.json"
2053
2067
  }),
2054
2068
  u("devportal.zipModelHint2", " into a single zip — like a Chrome extension. Upload it below and FluidGrid handles the rest automatically.")
2055
2069
  ] })]
2056
2070
  }),
2057
- /* @__PURE__ */ J("div", {
2071
+ /* @__PURE__ */ q("div", {
2058
2072
  onDragOver: (e) => {
2059
2073
  e.preventDefault(), _(!0);
2060
2074
  },
2061
2075
  onDragLeave: () => _(!1),
2062
- onDrop: (e) => void we(e),
2076
+ onDrop: (e) => void Te(e),
2063
2077
  onClick: () => !I && j.current?.click(),
2064
2078
  className: t("relative flex flex-col items-center justify-center gap-3 rounded-xl border-2 border-dashed px-6 py-10 text-center transition-colors cursor-pointer", h ? "border-primary bg-primary/5" : "border-border hover:border-border-strong hover:bg-bg-sunken", I && "pointer-events-none opacity-75"),
2065
- children: [/* @__PURE__ */ q("input", {
2079
+ children: [/* @__PURE__ */ K("input", {
2066
2080
  ref: j,
2067
2081
  type: "file",
2068
2082
  accept: ".zip,application/zip,application/x-zip-compressed",
2069
2083
  className: "hidden",
2070
- onChange: (e) => void Ce(e)
2071
- }), I ? /* @__PURE__ */ J(K, { children: [
2072
- /* @__PURE__ */ q(V, {
2084
+ onChange: (e) => void we(e)
2085
+ }), I ? /* @__PURE__ */ q(G, { children: [
2086
+ /* @__PURE__ */ K(B, {
2073
2087
  size: 28,
2074
2088
  className: "animate-spin text-primary"
2075
2089
  }),
2076
- /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ J("p", {
2090
+ /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ q("p", {
2077
2091
  className: "text-sm font-medium",
2078
2092
  children: [
2079
2093
  u("devportal.uploading", "Uploading…"),
@@ -2081,78 +2095,78 @@ var Je = we`
2081
2095
  ue,
2082
2096
  "%"
2083
2097
  ]
2084
- }), /* @__PURE__ */ q("p", {
2098
+ }), /* @__PURE__ */ K("p", {
2085
2099
  className: "text-xs text-text-secondary mt-0.5",
2086
2100
  children: u("devportal.uploadingHint", "Stored securely in your workspace")
2087
2101
  })] }),
2088
- /* @__PURE__ */ q("div", {
2102
+ /* @__PURE__ */ K("div", {
2089
2103
  className: "w-48 h-1.5 rounded-full bg-muted overflow-hidden",
2090
- children: /* @__PURE__ */ q("div", {
2104
+ children: /* @__PURE__ */ K("div", {
2091
2105
  className: "h-full bg-primary transition-all",
2092
2106
  style: { width: `${ue}%` }
2093
2107
  })
2094
2108
  })
2095
- ] }) : je ? /* @__PURE__ */ J(K, { children: [/* @__PURE__ */ q(L, {
2109
+ ] }) : Ae ? /* @__PURE__ */ q(G, { children: [/* @__PURE__ */ K(L, {
2096
2110
  size: 28,
2097
2111
  className: "text-status-success-text"
2098
- }), /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("p", {
2112
+ }), /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("p", {
2099
2113
  className: "text-sm font-medium",
2100
- children: je
2101
- }), /* @__PURE__ */ q("p", {
2114
+ children: Ae
2115
+ }), /* @__PURE__ */ K("p", {
2102
2116
  className: "text-xs text-text-secondary mt-0.5",
2103
2117
  children: u("devportal.clickToReplace", "Click or drag to replace")
2104
- })] })] }) : /* @__PURE__ */ J(K, { children: [/* @__PURE__ */ q(W, {
2118
+ })] })] }) : /* @__PURE__ */ q(G, { children: [/* @__PURE__ */ K(U, {
2105
2119
  size: 28,
2106
2120
  className: "text-text-secondary"
2107
- }), /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("p", {
2121
+ }), /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("p", {
2108
2122
  className: "text-sm font-medium",
2109
2123
  children: u("devportal.dropZipHere", "Drop your .zip here")
2110
- }), /* @__PURE__ */ q("p", {
2124
+ }), /* @__PURE__ */ K("p", {
2111
2125
  className: "text-xs text-text-secondary mt-0.5",
2112
2126
  children: u("devportal.orClickToBrowse", "or click to browse")
2113
2127
  })] })] })]
2114
2128
  }),
2115
- fe && /* @__PURE__ */ q("p", {
2129
+ pe && /* @__PURE__ */ K("p", {
2116
2130
  className: "text-xs text-status-error-text",
2117
- children: fe
2131
+ children: pe
2118
2132
  })
2119
2133
  ] }),
2120
- ke && /* @__PURE__ */ J("div", {
2134
+ X && /* @__PURE__ */ q("div", {
2121
2135
  className: "flex gap-3 rounded-lg border border-border-subtle bg-bg-sunken p-3 text-sm text-text-secondary",
2122
- children: [/* @__PURE__ */ q(B, {
2136
+ children: [/* @__PURE__ */ K(z, {
2123
2137
  size: 15,
2124
2138
  className: "mt-0.5 shrink-0"
2125
- }), /* @__PURE__ */ q("span", { children: u("devportal.builtinHint", "Built-in items are pre-installed by the platform. No package upload is needed.") })]
2139
+ }), /* @__PURE__ */ K("span", { children: u("devportal.builtinHint", "Built-in items are pre-installed by the platform. No package upload is needed.") })]
2126
2140
  })
2127
2141
  ]
2128
2142
  }),
2129
- /* @__PURE__ */ J("div", {
2143
+ /* @__PURE__ */ q("div", {
2130
2144
  className: "flex flex-wrap items-center gap-2 border-t pt-4",
2131
2145
  children: [
2132
- /* @__PURE__ */ q("input", {
2133
- ref: oe,
2146
+ /* @__PURE__ */ K("input", {
2147
+ ref: se,
2134
2148
  type: "file",
2135
2149
  accept: ".json,application/json",
2136
2150
  className: "hidden",
2137
- onChange: Ee
2151
+ onChange: J
2138
2152
  }),
2139
- /* @__PURE__ */ q("span", {
2153
+ /* @__PURE__ */ K("span", {
2140
2154
  className: "text-xs text-text-secondary mr-1",
2141
2155
  children: "manifest.json:"
2142
2156
  }),
2143
- /* @__PURE__ */ J("button", {
2157
+ /* @__PURE__ */ q("button", {
2144
2158
  type: "button",
2145
- onClick: () => oe.current?.click(),
2159
+ onClick: () => se.current?.click(),
2146
2160
  className: "inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs font-medium hover:bg-muted transition-colors",
2147
- children: [/* @__PURE__ */ q(W, { size: 12 }), u("devportal.importManifest", "Import")]
2161
+ children: [/* @__PURE__ */ K(U, { size: 12 }), u("devportal.importManifest", "Import")]
2148
2162
  }),
2149
- /* @__PURE__ */ J("button", {
2163
+ /* @__PURE__ */ q("button", {
2150
2164
  type: "button",
2151
2165
  onClick: De,
2152
2166
  className: "inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs font-medium hover:bg-muted transition-colors",
2153
- children: [/* @__PURE__ */ q(de, { size: 12 }), u("devportal.exportManifest", "Export")]
2167
+ children: [/* @__PURE__ */ K(fe, { size: 12 }), u("devportal.exportManifest", "Export")]
2154
2168
  }),
2155
- /* @__PURE__ */ q("span", {
2169
+ /* @__PURE__ */ K("span", {
2156
2170
  className: "text-xs text-text-secondary",
2157
2171
  children: u("devportal.manifestTip", "— export to get a manifest.json to include inside your zip")
2158
2172
  })
@@ -2161,175 +2175,175 @@ var Je = we`
2161
2175
  ]
2162
2176
  })
2163
2177
  }),
2164
- /* @__PURE__ */ q(b, {
2178
+ /* @__PURE__ */ K(b, {
2165
2179
  title: u("devportal.storePresentation", "Store Presence"),
2166
2180
  description: u("devportal.storePresentationDescription", "Visual assets and copy shown to users browsing the marketplace"),
2167
- children: /* @__PURE__ */ J("div", {
2181
+ children: /* @__PURE__ */ q("div", {
2168
2182
  className: "space-y-5",
2169
2183
  children: [
2170
- /* @__PURE__ */ J("div", {
2184
+ /* @__PURE__ */ q("div", {
2171
2185
  className: "grid gap-5 sm:grid-cols-2",
2172
- children: [/* @__PURE__ */ q(He, {
2186
+ children: [/* @__PURE__ */ K(Ue, {
2173
2187
  label: u("devportal.iconUrl", "Icon"),
2174
2188
  value: d.iconUrl,
2175
- onChange: (e) => k("iconUrl", e),
2189
+ onChange: (e) => O("iconUrl", e),
2176
2190
  hint: u("devportal.iconUrlHint", "Square, 256×256 px recommended"),
2177
2191
  aspectClass: "aspect-square",
2178
- upload: z,
2179
- uploading: pe,
2180
- progress: me,
2181
- error: he
2182
- }), /* @__PURE__ */ q(He, {
2192
+ upload: R,
2193
+ uploading: me,
2194
+ progress: he,
2195
+ error: ge
2196
+ }), /* @__PURE__ */ K(Ue, {
2183
2197
  label: u("devportal.bannerUrl", "Banner"),
2184
2198
  value: d.bannerUrl,
2185
- onChange: (e) => k("bannerUrl", e),
2199
+ onChange: (e) => O("bannerUrl", e),
2186
2200
  hint: u("devportal.bannerUrlHint", "1280×640 px recommended"),
2187
2201
  aspectClass: "aspect-video",
2188
- upload: H,
2189
- uploading: ge,
2190
- progress: _e,
2191
- error: ye
2202
+ upload: V,
2203
+ uploading: _e,
2204
+ progress: ve,
2205
+ error: H
2192
2206
  })]
2193
2207
  }),
2194
- /* @__PURE__ */ q(D, {
2208
+ /* @__PURE__ */ K(D, {
2195
2209
  label: u("devportal.videoUrl", "Demo Video URL"),
2196
2210
  value: d.videoUrl,
2197
- onChange: (e) => k("videoUrl", e.target.value),
2211
+ onChange: (e) => O("videoUrl", e.target.value),
2198
2212
  placeholder: "https://...",
2199
2213
  hint: u("devportal.videoUrlHint", "YouTube or Vimeo embed URL")
2200
2214
  }),
2201
- /* @__PURE__ */ q(O, {
2215
+ /* @__PURE__ */ K(ie, {
2202
2216
  label: u("devportal.shortDescription", "Short Description"),
2203
2217
  value: d.shortDescription,
2204
- onChange: (e) => k("shortDescription", e.target.value),
2218
+ onChange: (e) => O("shortDescription", e.target.value),
2205
2219
  maxLength: 200,
2206
2220
  rows: 2,
2207
2221
  hint: `${d.shortDescription.length}/200 · ${u("devportal.shortDescHint", "Shown in search results and cards")}`
2208
2222
  }),
2209
- /* @__PURE__ */ q(O, {
2223
+ /* @__PURE__ */ K(ie, {
2210
2224
  label: u("devportal.longDescription", "Full Description"),
2211
2225
  value: d.description,
2212
- onChange: (e) => k("description", e.target.value),
2226
+ onChange: (e) => O("description", e.target.value),
2213
2227
  rows: 5,
2214
2228
  hint: u("devportal.fullDescHint", "Markdown supported")
2215
2229
  }),
2216
- /* @__PURE__ */ q(Ue, {
2230
+ /* @__PURE__ */ K(We, {
2217
2231
  urls: d.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean),
2218
- onChange: (e) => k("screenshotsText", e.join("\n")),
2219
- upload: G,
2220
- uploading: be,
2221
- progress: xe,
2222
- error: Se
2232
+ onChange: (e) => O("screenshotsText", e.join("\n")),
2233
+ upload: W,
2234
+ uploading: xe,
2235
+ progress: Se,
2236
+ error: Ce
2223
2237
  })
2224
2238
  ]
2225
2239
  })
2226
2240
  }),
2227
- /* @__PURE__ */ q(b, {
2241
+ /* @__PURE__ */ K(b, {
2228
2242
  title: u("devportal.linksPolicies", "Links & Policies"),
2229
2243
  description: u("devportal.linksPoliciesDescription", "External resources and legal documents — privacy policy and terms are required for store submission"),
2230
- children: /* @__PURE__ */ J("div", {
2244
+ children: /* @__PURE__ */ q("div", {
2231
2245
  className: "grid gap-4 sm:grid-cols-2",
2232
2246
  children: [
2233
- /* @__PURE__ */ q(D, {
2247
+ /* @__PURE__ */ K(D, {
2234
2248
  label: u("devportal.websiteUrl", "Website"),
2235
2249
  value: d.websiteUrl,
2236
- onChange: (e) => k("websiteUrl", e.target.value),
2250
+ onChange: (e) => O("websiteUrl", e.target.value),
2237
2251
  placeholder: "https://..."
2238
2252
  }),
2239
- /* @__PURE__ */ q(D, {
2253
+ /* @__PURE__ */ K(D, {
2240
2254
  label: u("devportal.documentationUrl", "Documentation"),
2241
2255
  value: d.documentationUrl,
2242
- onChange: (e) => k("documentationUrl", e.target.value),
2256
+ onChange: (e) => O("documentationUrl", e.target.value),
2243
2257
  placeholder: "https://..."
2244
2258
  }),
2245
- /* @__PURE__ */ q(D, {
2259
+ /* @__PURE__ */ K(D, {
2246
2260
  label: u("devportal.githubUrl", "GitHub"),
2247
2261
  value: d.githubUrl,
2248
- onChange: (e) => k("githubUrl", e.target.value),
2262
+ onChange: (e) => O("githubUrl", e.target.value),
2249
2263
  placeholder: "https://github.com/..."
2250
2264
  }),
2251
- /* @__PURE__ */ q(D, {
2265
+ /* @__PURE__ */ K(D, {
2252
2266
  label: u("devportal.supportUrl", "Support"),
2253
2267
  value: d.supportUrl,
2254
- onChange: (e) => k("supportUrl", e.target.value),
2268
+ onChange: (e) => O("supportUrl", e.target.value),
2255
2269
  placeholder: "https://..."
2256
2270
  }),
2257
- /* @__PURE__ */ q(D, {
2271
+ /* @__PURE__ */ K(D, {
2258
2272
  label: `${u("devportal.privacyPolicyUrl", "Privacy Policy")} *`,
2259
2273
  value: d.privacyPolicyUrl,
2260
- onChange: (e) => k("privacyPolicyUrl", e.target.value),
2274
+ onChange: (e) => O("privacyPolicyUrl", e.target.value),
2261
2275
  placeholder: "https://...",
2262
2276
  hint: u("devportal.requiredForStore", "Required for store submission")
2263
2277
  }),
2264
- /* @__PURE__ */ q(D, {
2278
+ /* @__PURE__ */ K(D, {
2265
2279
  label: `${u("devportal.termsOfServiceUrl", "Terms of Service")} *`,
2266
2280
  value: d.termsOfServiceUrl,
2267
- onChange: (e) => k("termsOfServiceUrl", e.target.value),
2281
+ onChange: (e) => O("termsOfServiceUrl", e.target.value),
2268
2282
  placeholder: "https://...",
2269
2283
  hint: u("devportal.requiredForStore", "Required for store submission")
2270
2284
  })
2271
2285
  ]
2272
2286
  })
2273
2287
  }),
2274
- /* @__PURE__ */ q(b, {
2288
+ /* @__PURE__ */ K(b, {
2275
2289
  title: u("devportal.pricing", "Pricing"),
2276
2290
  description: u("devportal.pricingDescription", "How this item is priced in the marketplace"),
2277
- children: /* @__PURE__ */ J("div", {
2291
+ children: /* @__PURE__ */ q("div", {
2278
2292
  className: "space-y-4",
2279
- children: [/* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("label", {
2293
+ children: [/* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("label", {
2280
2294
  className: "mb-2 block text-sm font-medium",
2281
2295
  children: u("devportal.pricingType", "Pricing Type")
2282
- }), /* @__PURE__ */ q("div", {
2296
+ }), /* @__PURE__ */ K("div", {
2283
2297
  className: "flex flex-wrap gap-2",
2284
- children: Ge.map((e) => /* @__PURE__ */ q("button", {
2298
+ children: Ke.map((e) => /* @__PURE__ */ K("button", {
2285
2299
  type: "button",
2286
- onClick: () => k("pricingType", e.value),
2300
+ onClick: () => O("pricingType", e.value),
2287
2301
  className: t("rounded-md border px-3 py-1.5 text-sm font-medium transition-colors", d.pricingType === e.value ? "bg-primary text-primary-foreground border-primary" : "hover:bg-muted"),
2288
2302
  children: e.label
2289
2303
  }, e.value))
2290
- })] }), Ae && /* @__PURE__ */ J("div", {
2304
+ })] }), ke && /* @__PURE__ */ q("div", {
2291
2305
  className: "grid gap-4 sm:grid-cols-2",
2292
- children: [/* @__PURE__ */ q(D, {
2306
+ children: [/* @__PURE__ */ K(D, {
2293
2307
  label: u("devportal.price", "Price"),
2294
2308
  type: "number",
2295
2309
  value: d.price,
2296
- onChange: (e) => k("price", e.target.value),
2310
+ onChange: (e) => O("price", e.target.value),
2297
2311
  placeholder: "0.00"
2298
- }), /* @__PURE__ */ q(D, {
2312
+ }), /* @__PURE__ */ K(D, {
2299
2313
  label: u("devportal.currency", "Currency"),
2300
2314
  value: d.currency,
2301
- onChange: (e) => k("currency", e.target.value),
2315
+ onChange: (e) => O("currency", e.target.value),
2302
2316
  placeholder: "USD"
2303
2317
  })]
2304
2318
  })]
2305
2319
  })
2306
2320
  }),
2307
- /* @__PURE__ */ J("div", {
2321
+ /* @__PURE__ */ q("div", {
2308
2322
  className: "border-t pt-6 flex items-center gap-3 flex-wrap",
2309
2323
  children: [
2310
- /* @__PURE__ */ q("button", {
2324
+ /* @__PURE__ */ K("button", {
2311
2325
  type: "button",
2312
- onClick: ie,
2326
+ onClick: ae,
2313
2327
  disabled: p,
2314
2328
  className: "inline-flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors disabled:opacity-50",
2315
- children: p ? /* @__PURE__ */ J(K, { children: [/* @__PURE__ */ q(V, {
2329
+ children: p ? /* @__PURE__ */ q(G, { children: [/* @__PURE__ */ K(B, {
2316
2330
  size: 16,
2317
2331
  className: "animate-spin"
2318
- }), u("devportal.saving", "Saving…")] }) : /* @__PURE__ */ J(K, { children: [/* @__PURE__ */ q(U, { size: 16 }), u("devportal.saveMarketplaceListing", "Save Marketplace Listing")] })
2332
+ }), u("devportal.saving", "Saving…")] }) : /* @__PURE__ */ q(G, { children: [/* @__PURE__ */ K(be, { size: 16 }), u("devportal.saveMarketplaceListing", "Save Marketplace Listing")] })
2319
2333
  }),
2320
- !Z && !X && /* @__PURE__ */ q("button", {
2334
+ !Z && !je && /* @__PURE__ */ K("button", {
2321
2335
  type: "button",
2322
- onClick: () => void ae(),
2323
- disabled: ne || p,
2336
+ onClick: () => void oe(),
2337
+ disabled: E || p,
2324
2338
  className: "inline-flex items-center gap-2 rounded-md border border-primary px-4 py-2 text-sm font-medium text-primary hover:bg-primary/5 transition-colors disabled:opacity-50",
2325
- children: ne ? /* @__PURE__ */ J(K, { children: [/* @__PURE__ */ q(V, {
2339
+ children: E ? /* @__PURE__ */ q(G, { children: [/* @__PURE__ */ K(B, {
2326
2340
  size: 16,
2327
2341
  className: "animate-spin"
2328
- }), u("devportal.submitting", "Submitting…")] }) : /* @__PURE__ */ J(K, { children: [/* @__PURE__ */ q(ve, { size: 16 }), u("devportal.submitForReview", "Submit for Review")] })
2342
+ }), u("devportal.submitting", "Submitting…")] }) : /* @__PURE__ */ q(G, { children: [/* @__PURE__ */ K(ye, { size: 16 }), u("devportal.submitForReview", "Submit for Review")] })
2329
2343
  }),
2330
- !Z && X && /* @__PURE__ */ J("p", {
2344
+ !Z && je && /* @__PURE__ */ q("p", {
2331
2345
  className: "text-xs text-muted-foreground flex items-center gap-1.5",
2332
- children: [/* @__PURE__ */ q(R, { size: 12 }), u("devportal.awaitingReview", "Your listing is under review. You can still update and save — changes take effect after approval.")]
2346
+ children: [/* @__PURE__ */ K(de, { size: 12 }), u("devportal.awaitingReview", "Your listing is under review. You can still update and save — changes take effect after approval.")]
2333
2347
  })
2334
2348
  ]
2335
2349
  })
@@ -2337,18 +2351,18 @@ var Je = we`
2337
2351
  });
2338
2352
  }, Q = ({ label: e, value: n, trend: r }) => {
2339
2353
  let { t: i } = P();
2340
- return /* @__PURE__ */ J("div", {
2354
+ return /* @__PURE__ */ q("div", {
2341
2355
  className: "rounded-lg border bg-card p-4",
2342
2356
  children: [
2343
- /* @__PURE__ */ q("p", {
2357
+ /* @__PURE__ */ K("p", {
2344
2358
  className: "text-sm text-muted-foreground",
2345
2359
  children: e
2346
2360
  }),
2347
- /* @__PURE__ */ q("p", {
2361
+ /* @__PURE__ */ K("p", {
2348
2362
  className: "text-2xl font-bold",
2349
2363
  children: n
2350
2364
  }),
2351
- r !== void 0 && /* @__PURE__ */ J("p", {
2365
+ r !== void 0 && /* @__PURE__ */ q("p", {
2352
2366
  className: t("text-xs mt-1", r > 0 ? "text-status-success-text" : r < 0 ? "text-status-error-text" : "text-muted-foreground"),
2353
2367
  children: [
2354
2368
  r > 0 ? "+" : "",
@@ -2362,13 +2376,13 @@ var Je = we`
2362
2376
  })
2363
2377
  ]
2364
2378
  });
2365
- }, $ = ({ label: e, url: t }) => /* @__PURE__ */ J("a", {
2379
+ }, $ = ({ label: e, url: t }) => /* @__PURE__ */ q("a", {
2366
2380
  href: t,
2367
2381
  target: "_blank",
2368
2382
  rel: "noopener noreferrer",
2369
2383
  className: "flex items-center gap-2 text-sm text-primary hover:underline",
2370
- children: [/* @__PURE__ */ q(z, { size: 14 }), e]
2371
- }), Qe = [
2384
+ children: [/* @__PURE__ */ K(R, { size: 14 }), e]
2385
+ }), $e = [
2372
2386
  {
2373
2387
  id: "auth",
2374
2388
  label: "Authentication",
@@ -2440,14 +2454,14 @@ var Je = we`
2440
2454
  description: "Access control configuration"
2441
2455
  }
2442
2456
  ];
2443
- function $e(e) {
2444
- let t = Object.fromEntries(Qe.map((e) => [e.id, "none"]));
2457
+ function et(e) {
2458
+ let t = Object.fromEntries($e.map((e) => [e.id, "none"]));
2445
2459
  if (!e || !Array.isArray(e.permissions)) return t;
2446
2460
  for (let n of e.permissions) n.resource in t && (t[n.resource] = n.level === "write" ? "write" : "read");
2447
2461
  return t;
2448
2462
  }
2449
- var et = ({ app: e }) => {
2450
- let t = e.manifest ?? {}, [n, r] = N(() => $e(t)), [i, a] = N(!1), [o, s] = N(!1), [c] = v(), l = (e, t) => {
2463
+ var tt = ({ app: e }) => {
2464
+ let t = e.manifest ?? {}, [n, r] = N(() => et(t)), [i, a] = N(!1), [o, s] = N(!1), [c] = v(), l = (e, t) => {
2451
2465
  s(!1), r((n) => ({
2452
2466
  ...n,
2453
2467
  [e]: t
@@ -2478,41 +2492,41 @@ var et = ({ app: e }) => {
2478
2492
  "read",
2479
2493
  "write"
2480
2494
  ];
2481
- return /* @__PURE__ */ q(b, {
2495
+ return /* @__PURE__ */ K(b, {
2482
2496
  title: "Permissions",
2483
2497
  description: "Define what platform data this app can request access to. Users see these when authorizing the app.",
2484
- children: /* @__PURE__ */ J("div", {
2498
+ children: /* @__PURE__ */ q("div", {
2485
2499
  className: "space-y-4",
2486
2500
  children: [
2487
- /* @__PURE__ */ q("div", {
2501
+ /* @__PURE__ */ K("div", {
2488
2502
  className: "overflow-x-auto rounded-lg border border-border",
2489
- children: /* @__PURE__ */ J("table", {
2503
+ children: /* @__PURE__ */ q("table", {
2490
2504
  className: "w-full text-sm",
2491
- children: [/* @__PURE__ */ q("thead", { children: /* @__PURE__ */ J("tr", {
2505
+ children: [/* @__PURE__ */ K("thead", { children: /* @__PURE__ */ q("tr", {
2492
2506
  className: "border-b border-border bg-muted/50",
2493
- children: [/* @__PURE__ */ q("th", {
2507
+ children: [/* @__PURE__ */ K("th", {
2494
2508
  className: "px-4 py-3 text-left font-medium text-muted-foreground w-1/2",
2495
2509
  children: "Resource"
2496
- }), f.map((e) => /* @__PURE__ */ q("th", {
2510
+ }), f.map((e) => /* @__PURE__ */ K("th", {
2497
2511
  className: "px-4 py-3 text-center font-medium text-muted-foreground",
2498
2512
  children: d[e]
2499
2513
  }, e))]
2500
- }) }), /* @__PURE__ */ q("tbody", {
2514
+ }) }), /* @__PURE__ */ K("tbody", {
2501
2515
  className: "divide-y divide-border",
2502
- children: Qe.map((e) => /* @__PURE__ */ J("tr", {
2516
+ children: $e.map((e) => /* @__PURE__ */ q("tr", {
2503
2517
  className: "hover:bg-muted/30 transition-colors",
2504
- children: [/* @__PURE__ */ J("td", {
2518
+ children: [/* @__PURE__ */ q("td", {
2505
2519
  className: "px-4 py-3",
2506
- children: [/* @__PURE__ */ q("p", {
2520
+ children: [/* @__PURE__ */ K("p", {
2507
2521
  className: "font-medium text-foreground",
2508
2522
  children: e.label
2509
- }), /* @__PURE__ */ q("p", {
2523
+ }), /* @__PURE__ */ K("p", {
2510
2524
  className: "text-xs text-muted-foreground",
2511
2525
  children: e.description
2512
2526
  })]
2513
- }), f.map((t) => /* @__PURE__ */ q("td", {
2527
+ }), f.map((t) => /* @__PURE__ */ K("td", {
2514
2528
  className: "px-4 py-3 text-center",
2515
- children: /* @__PURE__ */ q("input", {
2529
+ children: /* @__PURE__ */ K("input", {
2516
2530
  type: "radio",
2517
2531
  name: `perm-${e.id}`,
2518
2532
  value: t,
@@ -2525,27 +2539,27 @@ var et = ({ app: e }) => {
2525
2539
  })]
2526
2540
  })
2527
2541
  }),
2528
- /* @__PURE__ */ J("div", {
2542
+ /* @__PURE__ */ q("div", {
2529
2543
  className: "rounded-lg border border-border-subtle bg-muted/30 p-3 flex gap-2 text-xs text-muted-foreground",
2530
- children: [/* @__PURE__ */ q(B, {
2544
+ children: [/* @__PURE__ */ K(z, {
2531
2545
  size: 14,
2532
2546
  className: "flex-shrink-0 mt-0.5"
2533
- }), /* @__PURE__ */ J("span", { children: [/* @__PURE__ */ q("strong", { children: "Read & Write" }), " implies Read. Request only what your app genuinely needs — fewer permissions build more user trust."] })]
2547
+ }), /* @__PURE__ */ q("span", { children: [/* @__PURE__ */ K("strong", { children: "Read & Write" }), " implies Read. Request only what your app genuinely needs — fewer permissions build more user trust."] })]
2534
2548
  }),
2535
- /* @__PURE__ */ J("div", {
2549
+ /* @__PURE__ */ q("div", {
2536
2550
  className: "flex items-center justify-end gap-3",
2537
- children: [o && /* @__PURE__ */ J("span", {
2551
+ children: [o && /* @__PURE__ */ q("span", {
2538
2552
  className: "flex items-center gap-1.5 text-sm text-status-success-text",
2539
- children: [/* @__PURE__ */ q(L, { size: 14 }), "Saved"]
2540
- }), /* @__PURE__ */ J("button", {
2553
+ children: [/* @__PURE__ */ K(L, { size: 14 }), "Saved"]
2554
+ }), /* @__PURE__ */ q("button", {
2541
2555
  type: "button",
2542
2556
  onClick: () => void u(),
2543
2557
  disabled: i,
2544
2558
  className: "inline-flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors disabled:opacity-50",
2545
- children: [i ? /* @__PURE__ */ q(V, {
2559
+ children: [i ? /* @__PURE__ */ K(B, {
2546
2560
  size: 14,
2547
2561
  className: "animate-spin"
2548
- }) : /* @__PURE__ */ q(ye, { size: 14 }), "Save Permissions"]
2562
+ }) : /* @__PURE__ */ K(H, { size: 14 }), "Save Permissions"]
2549
2563
  })]
2550
2564
  })
2551
2565
  ]
@@ -2553,6 +2567,6 @@ var et = ({ app: e }) => {
2553
2567
  });
2554
2568
  };
2555
2569
  //#endregion
2556
- export { Me as ApplicationDetailPage };
2570
+ export { Ne as ApplicationDetailPage };
2557
2571
 
2558
2572
  //# sourceMappingURL=ApplicationDetailPage.js.map