@burdenoff/microfe-devportal 2026.702.2 → 2026.703.2

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.
@@ -16,14 +16,14 @@ import { GrantDelegationModal as re } from "../components/GrantDelegationModal.j
16
16
  import { DEVPORTAL_PERMISSIONS as ie } from "../constants/permissions.js";
17
17
  import { useDevportalPermission as ae } from "../hooks/usePermission.js";
18
18
  import { usePackageUpload as A } from "../hooks/usePackageUpload.js";
19
- import { useCallback as j, useEffect as oe, useMemo as M, useRef as se, useState as N } from "react";
20
- import { useI18n as P } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
21
- import { AlertCircle as ce, AppWindow as le, BarChart3 as F, Check as I, CheckCircle as ue, ChevronRight as de, CircleDollarSign as L, Clock as fe, Edit as pe, ExternalLink as R, FlaskConical as me, Gift as he, Info as ge, Key as _e, Loader2 as z, MoreHorizontal as ve, Package as ye, Plus as be, Power as xe, RefreshCw as Se, SendHorizontal as Ce, Shield as we, Store as Te, TrendingUp as Ee, Upload as B, Users as De, Wallet as Oe, Webhook as ke, X as Ae, XCircle as je } from "lucide-react";
22
- import { useParams as Me } from "react-router-dom";
23
- import { Fragment as V, jsx as H, jsxs as U } from "react/jsx-runtime";
24
- import { CTAOverflowMenu as Ne, EmphasisPanel as W, GlassCard as Pe } from "@burdenoff/fe-libs/ui";
19
+ import { useCallback as j, useEffect as oe, useMemo as M, useRef as N, useState as P } from "react";
20
+ import { useI18n as F } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
21
+ import { AlertCircle as se, AppWindow as ce, BarChart3 as I, Check as L, CheckCircle as le, ChevronRight as ue, CircleDollarSign as R, Clock as de, Edit as fe, ExternalLink as z, FlaskConical as pe, Gift as me, Info as he, Key as B, Loader2 as V, MoreHorizontal as ge, Package as _e, Plus as H, Power as ve, RefreshCw as ye, SendHorizontal as be, Shield as xe, Store as Se, TrendingUp as Ce, Upload as U, Users as we, Wallet as Te, Webhook as Ee, X as De, XCircle as Oe } from "lucide-react";
22
+ import { useParams as ke } from "react-router-dom";
23
+ import { Fragment as W, jsx as G, jsxs as K } from "react/jsx-runtime";
24
+ import { CTAOverflowMenu as Ae, EmphasisPanel as je, GlassCard as Me } from "@burdenoff/fe-libs/ui";
25
25
  //#region src/devportal/pages/ApplicationDetailPage.tsx
26
- function Fe(e) {
26
+ function Ne(e) {
27
27
  return e ? {
28
28
  id: e.id,
29
29
  name: e.name,
@@ -73,7 +73,7 @@ function Fe(e) {
73
73
  updatedAt: e.updatedAt
74
74
  } : null;
75
75
  }
76
- function Ie(e) {
76
+ function Pe(e) {
77
77
  return {
78
78
  id: e.id,
79
79
  applicationId: e.applicationId,
@@ -97,7 +97,7 @@ function Ie(e) {
97
97
  updatedAt: e.updatedAt
98
98
  };
99
99
  }
100
- function G(e) {
100
+ function q(e) {
101
101
  return {
102
102
  id: e.id,
103
103
  applicationId: e.applicationId,
@@ -113,7 +113,7 @@ function G(e) {
113
113
  createdAt: e.createdAt
114
114
  };
115
115
  }
116
- function Le(e) {
116
+ function Fe(e) {
117
117
  return {
118
118
  id: e.id,
119
119
  appId: e.appId,
@@ -135,339 +135,339 @@ function Le(e) {
135
135
  revokedBy: e.revokedBy || void 0
136
136
  };
137
137
  }
138
- var Re = [
138
+ var Ie = [
139
139
  {
140
140
  id: "overview",
141
141
  label: "Overview",
142
- icon: le
142
+ icon: ce
143
143
  },
144
144
  {
145
145
  id: "analytics",
146
146
  label: "Analytics",
147
- icon: F
147
+ icon: I
148
148
  },
149
149
  {
150
150
  id: "store-listing",
151
151
  label: "Store Listing",
152
- icon: Te
152
+ icon: Se
153
153
  },
154
154
  {
155
155
  id: "versions",
156
156
  label: "Versions",
157
- icon: ye
157
+ icon: _e
158
158
  },
159
159
  {
160
160
  id: "pricing",
161
161
  label: "Pricing",
162
- icon: L
162
+ icon: R
163
163
  },
164
164
  {
165
165
  id: "permissions",
166
166
  label: "Permissions",
167
- icon: we
167
+ icon: xe
168
168
  },
169
169
  {
170
170
  id: "webhooks",
171
171
  label: "Webhooks",
172
- icon: ke
172
+ icon: Ee
173
173
  },
174
174
  {
175
175
  id: "delegations",
176
176
  label: "Delegations",
177
- icon: De
177
+ icon: we
178
178
  },
179
179
  {
180
180
  id: "playground",
181
181
  label: "API Playground",
182
- icon: R
182
+ icon: z
183
183
  }
184
- ], ze = {
184
+ ], Le = {
185
185
  ACTIVE: "bg-status-success-bg-subtle text-status-success-text",
186
186
  REVOKED: "bg-status-error-bg-subtle text-status-error-text",
187
187
  EXPIRED: "bg-bg-sunken text-text-secondary"
188
- }, K = ({ message: e = "Loading..." }) => /* @__PURE__ */ U("div", {
188
+ }, Re = ({ message: e = "Loading..." }) => /* @__PURE__ */ K("div", {
189
189
  className: "flex items-center justify-center gap-3 py-12",
190
- children: [/* @__PURE__ */ H(z, {
190
+ children: [/* @__PURE__ */ G(V, {
191
191
  size: 20,
192
192
  className: "animate-spin text-text-secondary"
193
- }), /* @__PURE__ */ H("p", {
193
+ }), /* @__PURE__ */ G("p", {
194
194
  className: "text-sm text-text-secondary",
195
195
  children: e
196
196
  })]
197
- }), Be = ({ message: e }) => /* @__PURE__ */ U("div", {
197
+ }), ze = ({ message: e }) => /* @__PURE__ */ K("div", {
198
198
  className: "flex flex-col items-center justify-center gap-2 py-12 text-center",
199
- children: [/* @__PURE__ */ H(ce, {
199
+ children: [/* @__PURE__ */ G(se, {
200
200
  size: 32,
201
201
  className: "text-status-error-text"
202
- }), /* @__PURE__ */ H("p", {
202
+ }), /* @__PURE__ */ G("p", {
203
203
  className: "text-sm text-text-secondary",
204
204
  children: e
205
205
  })]
206
- }), Ve = () => {
207
- let { navigate: i, basePath: o, workspaceId: c } = e(), { t: u } = P(), p = (e, t) => {
206
+ }), Be = () => {
207
+ let { navigate: i, basePath: o, workspaceId: c } = e(), { t: u } = F(), p = (e, t) => {
208
208
  let n = u(e);
209
209
  return n === e ? t : n;
210
- }, { allowed: _ } = ae(ie.APP_UPDATE), { allowed: y } = ae(ie.APP_DELETE), { appId: w } = Me(), [E, D] = N("overview"), [O, k] = N(!1), [te, A] = N(!1), [oe, M] = N(null), [se, F] = N(!1), { data: L, loading: R, error: he, refetch: ge } = s({
210
+ }, { allowed: _ } = ae(ie.APP_UPDATE), { allowed: y } = ae(ie.APP_DELETE), { appId: w } = ke(), [E, D] = P("overview"), [O, k] = P(!1), [te, A] = P(!1), [oe, M] = P(null), [N, I] = P(!1), { data: R, loading: z, error: me, refetch: he } = s({
211
211
  variables: { id: w },
212
212
  skip: !w
213
- }), [_e, { loading: ve }] = m(), [ye, { loading: be }] = a(), [we, { loading: Ee }] = h(), [B, { loading: De }] = f(), [Oe, { loading: ke }] = g(), { data: Ae, refetch: W } = d({
213
+ }), [B, { loading: ge }] = m(), [_e, { loading: H }] = a(), [xe, { loading: Ce }] = h(), [U, { loading: we }] = f(), [Te, { loading: Ee }] = g(), { data: De, refetch: je } = d({
214
214
  variables: {
215
215
  applicationId: w,
216
216
  workspaceId: c ?? void 0
217
217
  },
218
218
  skip: !c || !w,
219
219
  fetchPolicy: "cache-and-network"
220
- }), Pe = Ae?.appInstallations?.edges?.[0]?.node ?? null, { data: Ie } = l({
221
- variables: { id: L?.application?.developerOrganizationId ?? "" },
222
- skip: !L?.application?.developerOrganizationId,
220
+ }), Me = De?.appInstallations?.edges?.[0]?.node ?? null, { data: Pe } = l({
221
+ variables: { id: R?.application?.developerOrganizationId ?? "" },
222
+ skip: !R?.application?.developerOrganizationId,
223
223
  fetchPolicy: "cache-first"
224
- }), G = j((e) => {
224
+ }), q = j((e) => {
225
225
  i?.(`${o}${e}`);
226
- }, [i, o]), Le = j(async () => {
227
- let e = L?.application?.appId;
226
+ }, [i, o]), Fe = j(async () => {
227
+ let e = R?.application?.appId;
228
228
  if (e) try {
229
- let t = (await _e({ variables: { id: e } })).data?.rotateAppSecret.clientSecret;
229
+ let t = (await B({ variables: { id: e } })).data?.rotateAppSecret.clientSecret;
230
230
  t && M(t), k(!1);
231
231
  } catch {}
232
- }, [L?.application?.appId, _e]), ze = j(async () => {
232
+ }, [R?.application?.appId, B]), Le = j(async () => {
233
233
  if (w) try {
234
- await ye({ variables: { id: w } }), A(!1), G("/apps");
234
+ await _e({ variables: { id: w } }), A(!1), q("/apps");
235
235
  } catch {}
236
236
  }, [
237
237
  w,
238
- ye,
239
- G
240
- ]), K = j(async () => {
238
+ _e,
239
+ q
240
+ ]), Re = j(async () => {
241
241
  if (!(!w || !c)) try {
242
- await B({ variables: { input: {
242
+ await U({ variables: { input: {
243
243
  applicationId: w,
244
244
  scope: "WORKSPACE",
245
245
  workspaceId: c,
246
246
  autoUpdate: !1
247
- } } }), W(), T("success");
247
+ } } }), je(), T("success");
248
248
  } catch (e) {
249
249
  console.error("[DevPortal] Test in Workspace failed:", e), T("error");
250
250
  }
251
251
  }, [
252
252
  w,
253
253
  c,
254
- B,
255
- W
256
- ]), Be = j(async (e) => {
254
+ U,
255
+ je
256
+ ]), ze = j(async (e) => {
257
257
  try {
258
- await Oe({ variables: { id: e } }), W(), T("success");
258
+ await Te({ variables: { id: e } }), je(), T("success");
259
259
  } catch {
260
260
  T("error");
261
261
  }
262
- }, [Oe, W]), Ve = j(async () => {
262
+ }, [Te, je]), Be = j(async () => {
263
263
  if (w) try {
264
- await we({ variables: { id: w } }), T("success");
264
+ await xe({ variables: { id: w } }), T("success");
265
265
  } catch (e) {
266
266
  console.error("[DevPortal] Submit failed:", e), T("error");
267
267
  } finally {
268
- ge();
268
+ he();
269
269
  }
270
270
  }, [
271
271
  w,
272
- we,
273
- ge
272
+ xe,
273
+ he
274
274
  ]);
275
- if (R && !L) return /* @__PURE__ */ H(n, { message: p("devportal.loadingApplication", "Loading application...") });
276
- if (he) return /* @__PURE__ */ H(v, {
275
+ if (z && !R) return /* @__PURE__ */ G(n, { message: p("devportal.loadingApplication", "Loading application...") });
276
+ if (me) return /* @__PURE__ */ G(v, {
277
277
  title: p("devportal.error", "Error"),
278
278
  backLink: `${o}/apps`,
279
279
  backLabel: p("devportal.backToApplications", "Back to Applications"),
280
- children: /* @__PURE__ */ U("div", {
280
+ children: /* @__PURE__ */ K("div", {
281
281
  className: "flex flex-col items-center justify-center py-12 text-center",
282
282
  children: [
283
- /* @__PURE__ */ H(ce, {
283
+ /* @__PURE__ */ G(se, {
284
284
  size: 48,
285
285
  className: "text-status-error-text mb-4"
286
286
  }),
287
- /* @__PURE__ */ H("h3", {
287
+ /* @__PURE__ */ G("h3", {
288
288
  className: "text-lg font-semibold mb-2",
289
289
  children: p("devportal.failedToLoadApplication", "Failed to load application")
290
290
  }),
291
- /* @__PURE__ */ H("p", {
291
+ /* @__PURE__ */ G("p", {
292
292
  className: "text-sm text-text-secondary",
293
- children: he.message
293
+ children: me.message
294
294
  })
295
295
  ]
296
296
  })
297
297
  });
298
- let q = Fe(L?.application);
299
- if (!q) return /* @__PURE__ */ H(v, {
298
+ let J = Ne(R?.application);
299
+ if (!J) return /* @__PURE__ */ G(v, {
300
300
  title: p("devportal.notFound", "Not Found"),
301
301
  backLink: `${o}/apps`,
302
302
  backLabel: p("devportal.backToApplications", "Back to Applications"),
303
- children: /* @__PURE__ */ H(r, {
303
+ children: /* @__PURE__ */ G(r, {
304
304
  illustration: "empty-generic",
305
- icon: /* @__PURE__ */ H(le, { size: 48 }),
305
+ icon: /* @__PURE__ */ G(ce, { size: 48 }),
306
306
  title: p("devportal.applicationNotFound", "Application not found"),
307
307
  description: p("devportal.applicationNotFoundDescription", "The application you're looking for doesn't exist or you don't have access to it.")
308
308
  })
309
309
  });
310
- let J = q.appType === "NODE" || q.appType === "WORKFLOW", Y = L?.application?.versions?.totalCount ?? 0, Je = q.pricingType === "PAID", Ye = Ie?.developerOrganization, Xe = Ye?.platformFeeRate ?? .3, Ze = !!Ye?.billingAccountId, $e = q.pricingDetails ?? {}, X = q.pricingType === "FREE" || q.pricingType === "PAID" && typeof $e.price == "number" && $e.price > 0, Z = !!q.description?.trim() && !!q.category && !!q.iconUrl && (q.visibility === "PUBLIC" || q.visibility === "UNLISTED") && (!J || Y > 0) && (!Je || Ze) && X, et = Z && q.status !== "PUBLISHED" && q.status !== "SUBMITTED", tt = [
311
- ...J ? [] : [{
310
+ let Y = J.appType === "NODE" || J.appType === "WORKFLOW", Ve = R?.application?.versions?.totalCount ?? 0, Je = J.pricingType === "PAID", Ye = Pe?.developerOrganization, Xe = Ye?.platformFeeRate ?? .3, Ze = !!Ye?.billingAccountId, $e = J.pricingDetails ?? {}, X = J.pricingType === "FREE" || J.pricingType === "PAID" && typeof $e.price == "number" && $e.price > 0, Z = !!J.description?.trim() && !!J.category && !!J.iconUrl && (J.visibility === "PUBLIC" || J.visibility === "UNLISTED") && (!Y || Ve > 0) && (!Je || Ze) && X, et = Z && J.status !== "PUBLISHED" && J.status !== "SUBMITTED", tt = [
311
+ ...Y ? [] : [{
312
312
  label: p("devportal.rotateSecret", "Rotate Secret"),
313
- icon: /* @__PURE__ */ H(Se, { size: 16 }),
314
- disabled: !q.appId,
313
+ icon: /* @__PURE__ */ G(ye, { size: 16 }),
314
+ disabled: !J.appId,
315
315
  onSelect: () => k(!0)
316
316
  }],
317
- ...J ? [] : Pe ? [{
317
+ ...Y ? [] : Me ? [{
318
318
  label: p("devportal.uninstallFromWorkspace", "Uninstall from Workspace"),
319
- icon: /* @__PURE__ */ H(je, { size: 16 }),
320
- disabled: ke || !c,
321
- onSelect: () => void Be(Pe.id)
319
+ icon: /* @__PURE__ */ G(Oe, { size: 16 }),
320
+ disabled: Ee || !c,
321
+ onSelect: () => void ze(Me.id)
322
322
  }] : [{
323
323
  label: p("devportal.testInWorkspace", "Test in Workspace"),
324
- icon: /* @__PURE__ */ H(me, { size: 16 }),
325
- disabled: De || !c,
326
- onSelect: () => void K()
324
+ icon: /* @__PURE__ */ G(pe, { size: 16 }),
325
+ disabled: we || !c,
326
+ onSelect: () => void Re()
327
327
  }],
328
328
  {
329
329
  label: p("devportal.deactivate", "Deactivate"),
330
- icon: /* @__PURE__ */ H(xe, { size: 16 }),
330
+ icon: /* @__PURE__ */ G(ve, { size: 16 }),
331
331
  intent: "destructive",
332
332
  disabled: !y,
333
333
  onSelect: () => A(!0)
334
334
  }
335
335
  ];
336
- return /* @__PURE__ */ U(v, {
337
- title: q.name,
338
- description: q.shortDescription,
336
+ return /* @__PURE__ */ K(v, {
337
+ title: J.name,
338
+ description: J.shortDescription,
339
339
  purpose: p("devportal.appDetailPurpose", "Everything about this application in one place — its credentials, the permissions and webhooks it uses, its analytics, and its store listing. Use the tabs to configure each area, then edit or publish when it is ready."),
340
340
  backLink: `${o}/apps`,
341
341
  backLabel: p("devportal.backToApplications", "Back to Applications"),
342
- actions: /* @__PURE__ */ U("div", {
342
+ actions: /* @__PURE__ */ K("div", {
343
343
  className: "flex items-center gap-2",
344
- children: [q.status === "SUBMITTED" ? /* @__PURE__ */ U("div", {
344
+ children: [J.status === "SUBMITTED" ? /* @__PURE__ */ K("div", {
345
345
  className: "flex items-center gap-1.5 rounded-full border border-status-warning-bg bg-status-warning-bg-subtle px-3 py-1.5 text-xs font-medium text-status-warning-text",
346
- children: [/* @__PURE__ */ H(fe, { size: 13 }), p("devportal.underReview", "Under Review")]
347
- }) : q.status === "PUBLISHED" ? null : /* @__PURE__ */ H("button", {
346
+ children: [/* @__PURE__ */ G(de, { size: 13 }), p("devportal.underReview", "Under Review")]
347
+ }) : J.status === "PUBLISHED" ? null : /* @__PURE__ */ G("button", {
348
348
  type: "button",
349
- onClick: () => void Ve(),
350
- disabled: !et || Ee,
349
+ onClick: () => void Be(),
350
+ disabled: !et || Ce,
351
351
  title: Z ? void 0 : [
352
- !q.description?.trim() && "Add full description",
353
- !q.category && "Select a category",
354
- !q.iconUrl && "Upload an app icon",
355
- q.visibility === "PRIVATE" && "Set visibility to Public/Unlisted",
356
- J && Y === 0 && "Upload at least one version",
352
+ !J.description?.trim() && "Add full description",
353
+ !J.category && "Select a category",
354
+ !J.iconUrl && "Upload an app icon",
355
+ J.visibility === "PRIVATE" && "Set visibility to Public/Unlisted",
356
+ Y && Ve === 0 && "Upload at least one version",
357
357
  !X && "Set pricing (choose Free or Paid in the Pricing tab)",
358
358
  Je && !Ze && "Link a billing account to receive payments"
359
359
  ].filter(Boolean).join(" · "),
360
- className: t("inline-flex items-center gap-2 rounded-md px-4 py-2 text-sm font-medium transition-colors", et && !Ee ? "bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg/90 cursor-pointer" : "cursor-not-allowed bg-bg-muted text-text-tertiary ring-1 ring-border-subtle"),
361
- children: Ee ? /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(z, {
360
+ className: t("inline-flex items-center gap-2 rounded-md px-4 py-2 text-sm font-medium transition-colors", et && !Ce ? "bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg/90 cursor-pointer" : "cursor-not-allowed bg-bg-muted text-text-tertiary ring-1 ring-border-subtle"),
361
+ children: Ce ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(V, {
362
362
  size: 15,
363
363
  className: "animate-spin"
364
- }), p("devportal.submitting", "Submitting…")] }) : /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(Ce, { size: 15 }), p("devportal.submitForReview", "Submit for Review")] })
365
- }), /* @__PURE__ */ H(Ne, {
364
+ }), p("devportal.submitting", "Submitting…")] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(be, { size: 15 }), p("devportal.submitForReview", "Submit for Review")] })
365
+ }), /* @__PURE__ */ G(Ae, {
366
366
  primary: {
367
367
  label: p("devportal.editApp", "Edit App"),
368
- icon: /* @__PURE__ */ H(pe, { size: 16 }),
368
+ icon: /* @__PURE__ */ G(fe, { size: 16 }),
369
369
  disabled: !_,
370
- onSelect: () => G(`/apps/${q.id}/edit`)
370
+ onSelect: () => q(`/apps/${J.id}/edit`)
371
371
  },
372
372
  actions: tt
373
373
  })]
374
374
  }),
375
375
  children: [
376
- oe && /* @__PURE__ */ H(ee, {
376
+ oe && /* @__PURE__ */ G(ee, {
377
377
  title: p("devportal.newAppSecretGenerated", "New App Secret Generated"),
378
378
  secret: oe,
379
379
  description: p("devportal.appSecretRotatedDescription", "Your app secret has been rotated. The old secret is no longer valid."),
380
380
  onDismiss: () => M(null)
381
381
  }),
382
- /* @__PURE__ */ U("div", {
382
+ /* @__PURE__ */ K("div", {
383
383
  className: "flex flex-wrap items-center gap-2",
384
384
  children: [
385
- /* @__PURE__ */ H(S, {
386
- status: q.status,
385
+ /* @__PURE__ */ G(S, {
386
+ status: J.status,
387
387
  type: "app"
388
388
  }),
389
- /* @__PURE__ */ H(S, {
390
- status: q.visibility,
389
+ /* @__PURE__ */ G(S, {
390
+ status: J.visibility,
391
391
  type: "app"
392
392
  }),
393
- q.isVerified && /* @__PURE__ */ H(C, { verified: !0 }),
394
- q.isFeatured && /* @__PURE__ */ H(x, {}),
395
- /* @__PURE__ */ H("span", {
393
+ J.isVerified && /* @__PURE__ */ G(C, { verified: !0 }),
394
+ J.isFeatured && /* @__PURE__ */ G(x, {}),
395
+ /* @__PURE__ */ G("span", {
396
396
  className: "text-sm text-text-secondary",
397
- children: b[q.appType] || q.appType
397
+ children: b[J.appType] || J.appType
398
398
  })
399
399
  ]
400
400
  }),
401
- q.status === "SUBMITTED" && /* @__PURE__ */ U("div", {
401
+ J.status === "SUBMITTED" && /* @__PURE__ */ K("div", {
402
402
  className: "flex items-start gap-3 rounded-lg border border-border-subtle bg-status-warning-bg-subtle p-4",
403
- children: [/* @__PURE__ */ H(fe, {
403
+ children: [/* @__PURE__ */ G(de, {
404
404
  size: 18,
405
405
  className: "text-status-warning-text mt-0.5 flex-shrink-0"
406
- }), /* @__PURE__ */ U("div", {
406
+ }), /* @__PURE__ */ K("div", {
407
407
  className: "text-sm",
408
- children: [/* @__PURE__ */ H("p", {
408
+ children: [/* @__PURE__ */ G("p", {
409
409
  className: "font-medium text-status-warning-text",
410
410
  children: p("devportal.underReview", "Under Review")
411
- }), /* @__PURE__ */ U("p", {
411
+ }), /* @__PURE__ */ K("p", {
412
412
  className: "mt-0.5 text-text-secondary",
413
- children: [p("devportal.underReviewDesc", "Your submission is being reviewed by our team. You'll be notified of the outcome."), q.submittedAt && /* @__PURE__ */ U("span", {
413
+ children: [p("devportal.underReviewDesc", "Your submission is being reviewed by our team. You'll be notified of the outcome."), J.submittedAt && /* @__PURE__ */ K("span", {
414
414
  className: "ml-1",
415
415
  children: [
416
416
  "Submitted ",
417
- new Date(q.submittedAt).toLocaleDateString(),
417
+ new Date(J.submittedAt).toLocaleDateString(),
418
418
  "."
419
419
  ]
420
420
  })]
421
421
  })]
422
422
  })]
423
423
  }),
424
- q.status === "REJECTED" && /* @__PURE__ */ U("div", {
424
+ J.status === "REJECTED" && /* @__PURE__ */ K("div", {
425
425
  className: "flex items-start gap-3 rounded-lg border border-status-error-bg bg-status-error-bg-subtle p-4",
426
- children: [/* @__PURE__ */ H(je, {
426
+ children: [/* @__PURE__ */ G(Oe, {
427
427
  size: 18,
428
428
  className: "text-status-error-text mt-0.5 flex-shrink-0"
429
- }), /* @__PURE__ */ U("div", {
429
+ }), /* @__PURE__ */ K("div", {
430
430
  className: "text-sm",
431
431
  children: [
432
- /* @__PURE__ */ H("p", {
432
+ /* @__PURE__ */ G("p", {
433
433
  className: "font-medium text-status-error-text",
434
434
  children: p("devportal.reviewRejected", "Review Rejected")
435
435
  }),
436
- /* @__PURE__ */ H("p", {
436
+ /* @__PURE__ */ G("p", {
437
437
  className: "mt-0.5 text-text-secondary",
438
- children: q.reviewNotes || p("devportal.reviewRejectedDesc", "Your submission was not approved. Please review the feedback, update your app, and re-submit.")
438
+ children: J.reviewNotes || p("devportal.reviewRejectedDesc", "Your submission was not approved. Please review the feedback, update your app, and re-submit.")
439
439
  }),
440
- /* @__PURE__ */ H("button", {
440
+ /* @__PURE__ */ G("button", {
441
441
  type: "button",
442
- onClick: () => G(`/apps/${q.id}/edit`),
442
+ onClick: () => q(`/apps/${J.id}/edit`),
443
443
  className: "mt-2 inline-flex items-center gap-1 text-xs font-medium text-primary underline",
444
444
  children: p("devportal.editAndResubmit", "Edit app and re-submit →")
445
445
  })
446
446
  ]
447
447
  })]
448
448
  }),
449
- q.status === "PUBLISHED" && /* @__PURE__ */ U("div", {
449
+ J.status === "PUBLISHED" && /* @__PURE__ */ K("div", {
450
450
  className: "flex items-start gap-3 rounded-lg border border-status-success-bg bg-status-success-bg-subtle p-4",
451
- children: [/* @__PURE__ */ H(ue, {
451
+ children: [/* @__PURE__ */ G(le, {
452
452
  size: 18,
453
453
  className: "text-status-success-text mt-0.5 flex-shrink-0"
454
- }), /* @__PURE__ */ U("div", {
454
+ }), /* @__PURE__ */ K("div", {
455
455
  className: "text-sm",
456
- children: [/* @__PURE__ */ H("p", {
456
+ children: [/* @__PURE__ */ G("p", {
457
457
  className: "font-medium text-status-success-text",
458
458
  children: p("devportal.liveInStore", "Live in the Store")
459
- }), /* @__PURE__ */ H("p", {
459
+ }), /* @__PURE__ */ G("p", {
460
460
  className: "mt-0.5 text-text-secondary",
461
461
  children: p("devportal.liveInStoreDesc", "Your app is published and visible to users in the marketplace.")
462
462
  })]
463
463
  })]
464
464
  }),
465
- (q.status === "DRAFT" || q.status === "REJECTED") && !Z && (() => {
466
- let e = !!q.description?.trim() && !!q.category && !!q.iconUrl && (q.visibility === "PUBLIC" || q.visibility === "UNLISTED"), n = !J || Y > 0, r = [
467
- !q.description?.trim() && "Add a full description",
468
- !q.category && "Select a category",
469
- !q.iconUrl && "Upload an app icon",
470
- q.visibility === "PRIVATE" && "Set visibility to Public or Unlisted"
465
+ (J.status === "DRAFT" || J.status === "REJECTED") && !Z && (() => {
466
+ let e = !!J.description?.trim() && !!J.category && !!J.iconUrl && (J.visibility === "PUBLIC" || J.visibility === "UNLISTED"), n = !Y || Ve > 0, r = [
467
+ !J.description?.trim() && "Add a full description",
468
+ !J.category && "Select a category",
469
+ !J.iconUrl && "Upload an app icon",
470
+ J.visibility === "PRIVATE" && "Set visibility to Public or Unlisted"
471
471
  ].filter(Boolean), i = [
472
472
  {
473
473
  id: "store",
@@ -476,7 +476,7 @@ var Re = [
476
476
  done: e,
477
477
  onClick: () => D("store-listing")
478
478
  },
479
- ...J ? [{
479
+ ...Y ? [{
480
480
  id: "version",
481
481
  label: p("devportal.setupVersionStep", "Upload a Version"),
482
482
  hint: n ? p("devportal.done", "Done") : p("devportal.uploadVersionHint", "Upload your ZIP bundle and manifest"),
@@ -498,22 +498,22 @@ var Re = [
498
498
  onClick: void 0
499
499
  }
500
500
  ], a = i.filter((e) => e.done).length;
501
- return /* @__PURE__ */ U("div", {
501
+ return /* @__PURE__ */ K("div", {
502
502
  className: "rounded-xl border border-border-subtle bg-bg-surface shadow-sm",
503
- children: [/* @__PURE__ */ H("div", {
503
+ children: [/* @__PURE__ */ G("div", {
504
504
  className: "flex items-center justify-between border-b border-border-subtle px-5 py-4",
505
- children: /* @__PURE__ */ U("div", {
505
+ children: /* @__PURE__ */ K("div", {
506
506
  className: "flex items-center gap-3",
507
- children: [/* @__PURE__ */ H("div", {
507
+ children: [/* @__PURE__ */ G("div", {
508
508
  className: "flex h-8 w-8 items-center justify-center rounded-full bg-action-primary-bg/10",
509
- children: /* @__PURE__ */ H(Te, {
509
+ children: /* @__PURE__ */ G(Se, {
510
510
  size: 16,
511
511
  className: "text-primary"
512
512
  })
513
- }), /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
513
+ }), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
514
514
  className: "text-sm font-semibold text-text-primary",
515
515
  children: p("devportal.completeSetup", "Complete your app setup")
516
- }), /* @__PURE__ */ U("p", {
516
+ }), /* @__PURE__ */ K("p", {
517
517
  className: "text-xs text-text-secondary",
518
518
  children: [
519
519
  a,
@@ -525,29 +525,29 @@ var Re = [
525
525
  ]
526
526
  })] })]
527
527
  })
528
- }), /* @__PURE__ */ H("div", {
528
+ }), /* @__PURE__ */ G("div", {
529
529
  className: "divide-y divide-border-subtle",
530
- children: i.map((e, n) => /* @__PURE__ */ U("button", {
530
+ children: i.map((e, n) => /* @__PURE__ */ K("button", {
531
531
  type: "button",
532
532
  onClick: e.onClick,
533
533
  disabled: !e.onClick,
534
534
  className: t("w-full flex items-center gap-4 px-5 py-4 text-left transition-colors", e.onClick ? "hover:bg-bg-sunken/40 cursor-pointer" : "cursor-default opacity-60"),
535
535
  children: [
536
- /* @__PURE__ */ H("div", {
536
+ /* @__PURE__ */ G("div", {
537
537
  className: t("flex h-7 w-7 flex-shrink-0 items-center justify-center rounded-full text-xs font-bold", e.done ? "bg-status-success-bg text-status-success-text" : "border-2 border-border-subtle bg-bg-sunken text-text-secondary"),
538
- children: e.done ? /* @__PURE__ */ H(I, { size: 13 }) : n + 1
538
+ children: e.done ? /* @__PURE__ */ G(L, { size: 13 }) : n + 1
539
539
  }),
540
- /* @__PURE__ */ U("div", {
540
+ /* @__PURE__ */ K("div", {
541
541
  className: "flex-1 min-w-0",
542
- children: [/* @__PURE__ */ H("p", {
542
+ children: [/* @__PURE__ */ G("p", {
543
543
  className: t("text-sm font-medium", e.done ? "text-text-secondary line-through" : "text-text-primary"),
544
544
  children: e.label
545
- }), e.hint && !e.done && /* @__PURE__ */ H("p", {
545
+ }), e.hint && !e.done && /* @__PURE__ */ G("p", {
546
546
  className: "mt-0.5 text-xs text-text-secondary truncate",
547
547
  children: e.hint
548
548
  })]
549
549
  }),
550
- e.onClick && !e.done && /* @__PURE__ */ H(de, {
550
+ e.onClick && !e.done && /* @__PURE__ */ G(ue, {
551
551
  size: 16,
552
552
  className: "flex-shrink-0 text-text-secondary"
553
553
  })
@@ -556,113 +556,113 @@ var Re = [
556
556
  })]
557
557
  });
558
558
  })(),
559
- /* @__PURE__ */ H("div", {
559
+ /* @__PURE__ */ G("div", {
560
560
  className: "border-b",
561
- children: /* @__PURE__ */ H("nav", {
561
+ children: /* @__PURE__ */ G("nav", {
562
562
  className: "-mb-px flex gap-4 overflow-x-auto",
563
563
  role: "tablist",
564
564
  "aria-label": p("devportal.applicationSections", "Application sections"),
565
- children: Re.filter((e) => !(J && (e.id === "permissions" || e.id === "webhooks" || e.id === "delegations" || e.id === "playground") || !J && e.id === "versions")).map((e) => {
565
+ children: Ie.filter((e) => !(Y && (e.id === "permissions" || e.id === "webhooks" || e.id === "delegations" || e.id === "playground") || !Y && e.id === "versions")).map((e) => {
566
566
  let n = e.icon;
567
- return /* @__PURE__ */ U("button", {
567
+ return /* @__PURE__ */ K("button", {
568
568
  id: `application-tab-${e.id}`,
569
569
  role: "tab",
570
570
  "aria-selected": E === e.id,
571
571
  "aria-controls": `application-panel-${e.id}`,
572
572
  onClick: () => D(e.id),
573
573
  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-text-secondary hover:text-text-primary hover:border-muted-foreground"),
574
- children: [/* @__PURE__ */ H(n, { size: 16 }), e.label]
574
+ children: [/* @__PURE__ */ G(n, { size: 16 }), e.label]
575
575
  }, e.id);
576
576
  })
577
577
  })
578
578
  }),
579
- /* @__PURE__ */ U("div", {
579
+ /* @__PURE__ */ K("div", {
580
580
  className: "mt-6",
581
581
  id: `application-panel-${E}`,
582
582
  role: "tabpanel",
583
583
  "aria-labelledby": `application-tab-${E}`,
584
584
  tabIndex: 0,
585
585
  children: [
586
- E === "overview" && /* @__PURE__ */ H(qe, { app: q }),
587
- E === "permissions" && /* @__PURE__ */ H(st, { app: q }),
588
- E === "webhooks" && /* @__PURE__ */ H(We, {
589
- appId: q.id,
590
- onNavigate: G
586
+ E === "overview" && /* @__PURE__ */ G(qe, { app: J }),
587
+ E === "permissions" && /* @__PURE__ */ G(st, { app: J }),
588
+ E === "webhooks" && /* @__PURE__ */ G(We, {
589
+ appId: J.id,
590
+ onNavigate: q
591
591
  }),
592
- E === "delegations" && /* @__PURE__ */ H(Ge, {
593
- authAppId: q.appId || void 0,
594
- appName: q.name,
595
- onGrantDelegation: () => F(!0),
596
- onNavigate: G
592
+ E === "delegations" && /* @__PURE__ */ G(Ge, {
593
+ authAppId: J.appId || void 0,
594
+ appName: J.name,
595
+ onGrantDelegation: () => I(!0),
596
+ onNavigate: q
597
597
  }),
598
- E === "analytics" && /* @__PURE__ */ H(Ke, { appId: q.id }),
599
- E === "playground" && /* @__PURE__ */ H(Qe, { app: q }),
600
- E === "store-listing" && /* @__PURE__ */ H(it, {
601
- app: q,
602
- versionCount: L?.application?.versions?.totalCount ?? 0,
603
- isPackageApp: J,
598
+ E === "analytics" && /* @__PURE__ */ G(Ke, { appId: J.id }),
599
+ E === "playground" && /* @__PURE__ */ G(Qe, { app: J }),
600
+ E === "store-listing" && /* @__PURE__ */ G(it, {
601
+ app: J,
602
+ versionCount: R?.application?.versions?.totalCount ?? 0,
603
+ isPackageApp: Y,
604
604
  pricingDone: X,
605
- onNavigateToVersions: J ? () => D("versions") : void 0,
605
+ onNavigateToVersions: Y ? () => D("versions") : void 0,
606
606
  onNavigateToPricing: () => D("pricing"),
607
- onNavigateToSubmission: () => G(`/apps/${q.id}/store-submission`)
607
+ onNavigateToSubmission: () => q(`/apps/${J.id}/store-submission`)
608
608
  }),
609
- E === "pricing" && /* @__PURE__ */ H(He, {
610
- app: q,
609
+ E === "pricing" && /* @__PURE__ */ G(He, {
610
+ app: J,
611
611
  platformFeeRate: Xe,
612
612
  billingAccountLinked: Ze,
613
- onNavigateToRevenue: () => G("/revenue"),
613
+ onNavigateToRevenue: () => q("/revenue"),
614
614
  isReadyToSubmit: Z
615
615
  }),
616
- E === "versions" && /* @__PURE__ */ H(Ue, {
617
- appId: q.id,
618
- onNavigate: G,
616
+ E === "versions" && /* @__PURE__ */ G(Ue, {
617
+ appId: J.id,
618
+ onNavigate: q,
619
619
  pricingDone: X,
620
620
  onNavigateToPricing: () => D("pricing")
621
621
  })
622
622
  ]
623
623
  }),
624
- /* @__PURE__ */ H(ne, {
624
+ /* @__PURE__ */ G(ne, {
625
625
  open: O,
626
626
  onOpenChange: k,
627
- onConfirm: Le,
627
+ onConfirm: Fe,
628
628
  title: p("devportal.rotateAppSecret", "Rotate App Secret"),
629
629
  description: p("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."),
630
630
  confirmLabel: p("devportal.rotateSecret", "Rotate Secret"),
631
631
  cancelLabel: p("devportal.cancel", "Cancel"),
632
632
  variant: "warning",
633
- loading: ve
633
+ loading: ge
634
634
  }),
635
- /* @__PURE__ */ H(ne, {
635
+ /* @__PURE__ */ G(ne, {
636
636
  open: te,
637
637
  onOpenChange: A,
638
- onConfirm: ze,
638
+ onConfirm: Le,
639
639
  title: p("devportal.deactivateApplication", "Deactivate Application"),
640
640
  description: p("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."),
641
641
  confirmLabel: p("devportal.deactivate", "Deactivate"),
642
642
  cancelLabel: p("devportal.cancel", "Cancel"),
643
643
  variant: "destructive",
644
- loading: be
644
+ loading: H
645
645
  }),
646
- /* @__PURE__ */ H(re, {
647
- open: se,
648
- onOpenChange: F,
649
- appId: q.appId || "",
650
- appName: q.name,
651
- appScopes: q.scopes?.map((e) => e.scope) ?? [],
646
+ /* @__PURE__ */ G(re, {
647
+ open: N,
648
+ onOpenChange: I,
649
+ appId: J.appId || "",
650
+ appName: J.name,
651
+ appScopes: J.scopes?.map((e) => e.scope) ?? [],
652
652
  onSuccess: () => {
653
- F(!1);
653
+ I(!1);
654
654
  }
655
655
  })
656
656
  ]
657
657
  });
658
- }, q = .01, J = (e) => e * q, Y = (e) => Math.round(e / q), He = ({ app: e, platformFeeRate: n, billingAccountLinked: r, onNavigateToRevenue: i, isReadyToSubmit: a = !1 }) => {
659
- let { t: o } = P(), s = (e, t) => {
658
+ }, J = .01, Y = (e) => e * J, Ve = (e) => Math.round(e / J), He = ({ app: e, platformFeeRate: n, billingAccountLinked: r, onNavigateToRevenue: i, isReadyToSubmit: a = !1 }) => {
659
+ let { t: o } = F(), s = (e, t) => {
660
660
  let n = o(e);
661
661
  return n === e ? t : n;
662
- }, c = e.pricingDetails ?? {}, [l, u] = N({
662
+ }, c = e.pricingDetails ?? {}, [l, u] = P({
663
663
  pricingType: e.pricingType ?? "FREE",
664
664
  price: typeof c.price == "number" ? String(c.price) : ""
665
- }), [d, f] = N(!1), [p] = _(), m = se(e);
665
+ }), [d, f] = P(!1), [p] = _(), m = N(e);
666
666
  m.current = e, oe(() => {
667
667
  let e = m.current.pricingDetails ?? {};
668
668
  u({
@@ -695,33 +695,33 @@ var Re = [
695
695
  } finally {
696
696
  f(!1);
697
697
  }
698
- }, v = l.pricingType !== "FREE", y = parseInt(l.price, 10), b = v && !isNaN(y) && y > 0, x = b ? J(y) : 0, S = b ? Math.round(y * n) : 0, C = J(S), w = b ? y - S : 0, ee = J(w), E = (e) => "$" + e.toLocaleString("en-US", {
698
+ }, v = l.pricingType !== "FREE", y = parseInt(l.price, 10), b = v && !isNaN(y) && y > 0, x = b ? Y(y) : 0, S = b ? Math.round(y * n) : 0, C = Y(S), w = b ? y - S : 0, ee = Y(w), E = (e) => "$" + e.toLocaleString("en-US", {
699
699
  minimumFractionDigits: 2,
700
700
  maximumFractionDigits: 2
701
701
  }), D = (e) => e.toLocaleString("en-US") + " cr";
702
- return /* @__PURE__ */ U("div", {
702
+ return /* @__PURE__ */ K("div", {
703
703
  className: "space-y-8",
704
704
  children: [
705
- /* @__PURE__ */ U("div", {
705
+ /* @__PURE__ */ K("div", {
706
706
  className: "flex items-start gap-3 rounded-lg border border-border-subtle bg-bg-sunken px-4 py-3",
707
- children: [/* @__PURE__ */ H(L, {
707
+ children: [/* @__PURE__ */ G(R, {
708
708
  size: 16,
709
709
  className: "mt-0.5 shrink-0 text-primary"
710
- }), /* @__PURE__ */ U("p", {
710
+ }), /* @__PURE__ */ K("p", {
711
711
  className: "text-sm text-text-secondary",
712
712
  children: [
713
- /* @__PURE__ */ H("span", {
713
+ /* @__PURE__ */ G("span", {
714
714
  className: "font-medium text-text-primary",
715
715
  children: "Platform credits"
716
716
  }),
717
717
  " ",
718
718
  "are the currency of the Burdenoff marketplace.",
719
719
  " ",
720
- /* @__PURE__ */ U("span", {
720
+ /* @__PURE__ */ K("span", {
721
721
  className: "font-medium",
722
722
  children: [
723
723
  "1 credit = ",
724
- E(q),
724
+ E(J),
725
725
  " USD."
726
726
  ]
727
727
  }),
@@ -730,41 +730,41 @@ var Re = [
730
730
  ]
731
731
  })]
732
732
  }),
733
- /* @__PURE__ */ U("div", {
733
+ /* @__PURE__ */ K("div", {
734
734
  className: "space-y-3",
735
- children: [/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("h2", {
735
+ children: [/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("h2", {
736
736
  className: "text-lg font-semibold",
737
737
  children: s("devportal.howMonetizationWorks", "How App Monetization Works")
738
- }), /* @__PURE__ */ H("p", {
738
+ }), /* @__PURE__ */ G("p", {
739
739
  className: "mt-1 text-sm text-text-secondary",
740
740
  children: s("devportal.monetizationDesc", "Earn revenue when users install or purchase your app. Here's exactly how the money flows.")
741
- })] }), /* @__PURE__ */ U("div", {
741
+ })] }), /* @__PURE__ */ K("div", {
742
742
  className: "grid gap-4 sm:grid-cols-3",
743
743
  children: [
744
- /* @__PURE__ */ U("div", {
744
+ /* @__PURE__ */ K("div", {
745
745
  className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
746
- children: [/* @__PURE__ */ H("div", {
746
+ children: [/* @__PURE__ */ G("div", {
747
747
  className: "flex h-9 w-9 items-center justify-center rounded-lg bg-status-success-bg-subtle",
748
- children: /* @__PURE__ */ H(Ee, {
748
+ children: /* @__PURE__ */ G(Ce, {
749
749
  size: 18,
750
750
  className: "text-status-success-text"
751
751
  })
752
- }), /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ U("p", {
752
+ }), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ K("p", {
753
753
  className: "font-semibold",
754
754
  children: [(100 - n * 100).toFixed(0), "% revenue share"]
755
- }), /* @__PURE__ */ U("p", {
755
+ }), /* @__PURE__ */ K("p", {
756
756
  className: "mt-1 text-sm text-text-secondary",
757
757
  children: [
758
758
  "You keep",
759
759
  " ",
760
- /* @__PURE__ */ U("span", {
760
+ /* @__PURE__ */ K("span", {
761
761
  className: "font-medium text-status-success-text",
762
762
  children: [(100 - n * 100).toFixed(0), "%"]
763
763
  }),
764
764
  " ",
765
765
  "of every sale in credits. The platform retains a",
766
766
  " ",
767
- /* @__PURE__ */ U("span", {
767
+ /* @__PURE__ */ K("span", {
768
768
  className: "font-medium",
769
769
  children: [(n * 100).toFixed(0), "%"]
770
770
  }),
@@ -773,28 +773,28 @@ var Re = [
773
773
  ]
774
774
  })] })]
775
775
  }),
776
- /* @__PURE__ */ U("div", {
776
+ /* @__PURE__ */ K("div", {
777
777
  className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
778
- children: [/* @__PURE__ */ H("div", {
778
+ children: [/* @__PURE__ */ G("div", {
779
779
  className: "flex h-9 w-9 items-center justify-center rounded-lg bg-action-primary-bg/10",
780
- children: /* @__PURE__ */ H(Oe, {
780
+ children: /* @__PURE__ */ G(Te, {
781
781
  size: 18,
782
782
  className: "text-primary"
783
783
  })
784
- }), /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
784
+ }), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
785
785
  className: "font-semibold",
786
786
  children: "Credits → cash via billing"
787
- }), /* @__PURE__ */ U("p", {
787
+ }), /* @__PURE__ */ K("p", {
788
788
  className: "mt-1 text-sm text-text-secondary",
789
789
  children: [
790
790
  "Every sale instantly deposits your earned credits into your linked billing account. You can spend them on platform services or request a cash withdrawal. Track everything on the",
791
791
  " ",
792
- i ? /* @__PURE__ */ H("button", {
792
+ i ? /* @__PURE__ */ G("button", {
793
793
  type: "button",
794
794
  onClick: i,
795
795
  className: "font-medium text-primary underline-offset-2 hover:underline",
796
796
  children: "Revenue page"
797
- }) : /* @__PURE__ */ H("span", {
797
+ }) : /* @__PURE__ */ G("span", {
798
798
  className: "font-medium text-primary",
799
799
  children: "Revenue page"
800
800
  }),
@@ -802,18 +802,18 @@ var Re = [
802
802
  ]
803
803
  })] })]
804
804
  }),
805
- /* @__PURE__ */ U("div", {
805
+ /* @__PURE__ */ K("div", {
806
806
  className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
807
- children: [/* @__PURE__ */ H("div", {
807
+ children: [/* @__PURE__ */ G("div", {
808
808
  className: "flex h-9 w-9 items-center justify-center rounded-lg bg-status-warning-bg-subtle",
809
- children: /* @__PURE__ */ H(he, {
809
+ children: /* @__PURE__ */ G(me, {
810
810
  size: 18,
811
811
  className: "text-status-warning-text"
812
812
  })
813
- }), /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
813
+ }), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
814
814
  className: "font-semibold",
815
815
  children: "Reach the full marketplace"
816
- }), /* @__PURE__ */ H("p", {
816
+ }), /* @__PURE__ */ G("p", {
817
817
  className: "mt-1 text-sm text-text-secondary",
818
818
  children: "Any user with platform credits can discover and install your app directly from the marketplace. Free apps maximise reach; paid apps let you monetise your work."
819
819
  })] })]
@@ -821,52 +821,52 @@ var Re = [
821
821
  ]
822
822
  })]
823
823
  }),
824
- /* @__PURE__ */ U("div", {
824
+ /* @__PURE__ */ K("div", {
825
825
  className: "space-y-4",
826
826
  children: [
827
- /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("h3", {
827
+ /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("h3", {
828
828
  className: "text-base font-semibold",
829
829
  children: s("devportal.setPricingTitle", "Set Your Price")
830
- }), /* @__PURE__ */ U("p", {
830
+ }), /* @__PURE__ */ K("p", {
831
831
  className: "mt-0.5 text-sm text-text-secondary",
832
832
  children: [
833
833
  "Choose ",
834
- /* @__PURE__ */ H("strong", { children: "Free" }),
834
+ /* @__PURE__ */ G("strong", { children: "Free" }),
835
835
  " to maximise installs, or",
836
836
  " ",
837
- /* @__PURE__ */ H("strong", { children: "Paid" }),
837
+ /* @__PURE__ */ G("strong", { children: "Paid" }),
838
838
  " to earn credits on every install. Paid apps require a linked billing account before publishing."
839
839
  ]
840
840
  })] }),
841
- /* @__PURE__ */ H("div", {
841
+ /* @__PURE__ */ G("div", {
842
842
  className: "flex flex-wrap gap-2",
843
- children: et.map((e) => /* @__PURE__ */ H("button", {
843
+ children: et.map((e) => /* @__PURE__ */ G("button", {
844
844
  type: "button",
845
845
  onClick: () => h("pricingType", e.value),
846
846
  className: t("rounded-md border px-4 py-2 text-sm font-medium transition-colors", l.pricingType === e.value ? "bg-action-primary-bg text-action-primary-text border-primary" : "hover:bg-bg-sunken border-border-subtle"),
847
847
  children: e.label
848
848
  }, e.value))
849
849
  }),
850
- v && /* @__PURE__ */ U("div", {
850
+ v && /* @__PURE__ */ K("div", {
851
851
  className: "space-y-4",
852
852
  children: [
853
- /* @__PURE__ */ U("div", {
853
+ /* @__PURE__ */ K("div", {
854
854
  className: "max-w-xs",
855
855
  children: [
856
- /* @__PURE__ */ U("label", {
856
+ /* @__PURE__ */ K("label", {
857
857
  className: "mb-1.5 block text-sm font-medium",
858
858
  children: [
859
859
  "Listing price",
860
860
  " ",
861
- /* @__PURE__ */ H("span", {
861
+ /* @__PURE__ */ G("span", {
862
862
  className: "text-text-tertiary font-normal",
863
863
  children: "(credits)"
864
864
  })
865
865
  ]
866
866
  }),
867
- /* @__PURE__ */ U("div", {
867
+ /* @__PURE__ */ K("div", {
868
868
  className: "relative flex items-center",
869
- children: [/* @__PURE__ */ H("input", {
869
+ children: [/* @__PURE__ */ G("input", {
870
870
  type: "number",
871
871
  min: 1,
872
872
  step: 1,
@@ -874,69 +874,69 @@ var Re = [
874
874
  onChange: (e) => h("price", e.target.value),
875
875
  placeholder: "e.g. 1000",
876
876
  className: "w-full rounded-md border border-border-subtle bg-bg-input px-3 py-2 pr-20 text-sm focus:outline-none focus:ring-2 focus:ring-primary/50"
877
- }), /* @__PURE__ */ H("span", {
877
+ }), /* @__PURE__ */ G("span", {
878
878
  className: "pointer-events-none absolute right-3 text-xs text-text-tertiary",
879
879
  children: "credits"
880
880
  })]
881
881
  }),
882
- b && /* @__PURE__ */ U("p", {
882
+ b && /* @__PURE__ */ K("p", {
883
883
  className: "mt-1.5 text-xs text-text-secondary",
884
884
  children: [
885
885
  "≈ ",
886
886
  E(x),
887
887
  " USD at the current credit rate (1 cr =",
888
888
  " ",
889
- E(q),
889
+ E(J),
890
890
  ")"
891
891
  ]
892
892
  }),
893
- /* @__PURE__ */ H("p", {
893
+ /* @__PURE__ */ G("p", {
894
894
  className: "mt-1 text-xs text-text-tertiary",
895
895
  children: s("devportal.priceHint", "Set the number of credits a buyer spends to install your app")
896
896
  })
897
897
  ]
898
898
  }),
899
- /* @__PURE__ */ U("div", {
899
+ /* @__PURE__ */ K("div", {
900
900
  className: "flex items-center gap-2 text-xs text-text-secondary",
901
- children: [/* @__PURE__ */ H("span", { children: "Quick convert:" }), [
901
+ children: [/* @__PURE__ */ G("span", { children: "Quick convert:" }), [
902
902
  5,
903
903
  10,
904
904
  25,
905
905
  50
906
- ].map((e) => /* @__PURE__ */ U("button", {
906
+ ].map((e) => /* @__PURE__ */ K("button", {
907
907
  type: "button",
908
- onClick: () => h("price", String(Y(e))),
908
+ onClick: () => h("price", String(Ve(e))),
909
909
  className: "rounded border border-border-subtle px-2 py-0.5 hover:bg-bg-sunken transition-colors",
910
910
  children: [
911
911
  "$",
912
912
  e,
913
913
  " = ",
914
- Y(e).toLocaleString(),
914
+ Ve(e).toLocaleString(),
915
915
  " cr"
916
916
  ]
917
917
  }, e))]
918
918
  }),
919
- b && /* @__PURE__ */ U("div", {
919
+ b && /* @__PURE__ */ K("div", {
920
920
  className: "rounded-lg border border-border-subtle bg-bg-sunken p-4 space-y-3",
921
921
  children: [
922
- /* @__PURE__ */ H("p", {
922
+ /* @__PURE__ */ G("p", {
923
923
  className: "text-xs font-semibold uppercase tracking-wide text-text-secondary",
924
924
  children: s("devportal.revenueBreakdown", "Revenue Breakdown per Sale")
925
925
  }),
926
- /* @__PURE__ */ U("div", {
926
+ /* @__PURE__ */ K("div", {
927
927
  className: "space-y-2 text-sm",
928
928
  children: [
929
- /* @__PURE__ */ U("div", {
929
+ /* @__PURE__ */ K("div", {
930
930
  className: "flex items-center justify-between",
931
- children: [/* @__PURE__ */ H("span", {
931
+ children: [/* @__PURE__ */ G("span", {
932
932
  className: "text-text-secondary",
933
933
  children: "Buyer pays"
934
- }), /* @__PURE__ */ U("span", {
934
+ }), /* @__PURE__ */ K("span", {
935
935
  className: "font-medium tabular-nums",
936
936
  children: [
937
937
  D(y),
938
938
  " ",
939
- /* @__PURE__ */ U("span", {
939
+ /* @__PURE__ */ K("span", {
940
940
  className: "text-text-tertiary text-xs",
941
941
  children: [
942
942
  "(",
@@ -947,12 +947,12 @@ var Re = [
947
947
  ]
948
948
  })]
949
949
  }),
950
- /* @__PURE__ */ U("div", {
950
+ /* @__PURE__ */ K("div", {
951
951
  className: "flex items-center justify-between text-status-error-text",
952
- children: [/* @__PURE__ */ U("span", { children: [
952
+ children: [/* @__PURE__ */ K("span", { children: [
953
953
  "Platform fee",
954
954
  " ",
955
- /* @__PURE__ */ U("span", {
955
+ /* @__PURE__ */ K("span", {
956
956
  className: "opacity-70",
957
957
  children: [
958
958
  "(",
@@ -960,13 +960,13 @@ var Re = [
960
960
  "%)"
961
961
  ]
962
962
  })
963
- ] }), /* @__PURE__ */ U("span", {
963
+ ] }), /* @__PURE__ */ K("span", {
964
964
  className: "tabular-nums",
965
965
  children: [
966
966
  "− ",
967
967
  D(S),
968
968
  " ",
969
- /* @__PURE__ */ U("span", {
969
+ /* @__PURE__ */ K("span", {
970
970
  className: "text-xs opacity-70",
971
971
  children: [
972
972
  "(",
@@ -977,14 +977,14 @@ var Re = [
977
977
  ]
978
978
  })]
979
979
  }),
980
- /* @__PURE__ */ U("div", {
980
+ /* @__PURE__ */ K("div", {
981
981
  className: "flex items-center justify-between border-t border-border-subtle pt-2 font-semibold text-status-success-text",
982
- children: [/* @__PURE__ */ H("span", { children: "You earn" }), /* @__PURE__ */ U("span", {
982
+ children: [/* @__PURE__ */ G("span", { children: "You earn" }), /* @__PURE__ */ K("span", {
983
983
  className: "tabular-nums",
984
984
  children: [
985
985
  D(w),
986
986
  " ",
987
- /* @__PURE__ */ U("span", {
987
+ /* @__PURE__ */ K("span", {
988
988
  className: "text-sm font-normal",
989
989
  children: ["≈ ", E(ee)]
990
990
  })
@@ -993,29 +993,29 @@ var Re = [
993
993
  })
994
994
  ]
995
995
  }),
996
- /* @__PURE__ */ H("p", {
996
+ /* @__PURE__ */ G("p", {
997
997
  className: "text-xs text-text-tertiary",
998
998
  children: "Credits are deposited to your billing account on each sale. Cash withdrawal is subject to platform terms and minimum payout thresholds."
999
999
  })
1000
1000
  ]
1001
1001
  }),
1002
- !r && /* @__PURE__ */ U("div", {
1002
+ !r && /* @__PURE__ */ K("div", {
1003
1003
  className: "flex items-start gap-3 rounded-lg border border-status-warning-bg bg-status-warning-bg-subtle p-4",
1004
- children: [/* @__PURE__ */ H(ce, {
1004
+ children: [/* @__PURE__ */ G(se, {
1005
1005
  size: 16,
1006
1006
  className: "mt-0.5 shrink-0 text-status-warning-text"
1007
- }), /* @__PURE__ */ U("div", {
1007
+ }), /* @__PURE__ */ K("div", {
1008
1008
  className: "flex-1 min-w-0",
1009
1009
  children: [
1010
- /* @__PURE__ */ H("p", {
1010
+ /* @__PURE__ */ G("p", {
1011
1011
  className: "text-sm font-medium text-status-warning-text",
1012
1012
  children: s("devportal.billingAccountRequired", "Billing account required to publish")
1013
1013
  }),
1014
- /* @__PURE__ */ H("p", {
1014
+ /* @__PURE__ */ G("p", {
1015
1015
  className: "mt-0.5 text-xs text-text-secondary",
1016
1016
  children: "Paid apps must have a billing account linked to your developer organization before you can submit for review. This is where your earned credits and cash withdrawals will be managed."
1017
1017
  }),
1018
- i && /* @__PURE__ */ H("button", {
1018
+ i && /* @__PURE__ */ G("button", {
1019
1019
  type: "button",
1020
1020
  onClick: i,
1021
1021
  className: "mt-2 text-xs font-medium text-primary hover:underline underline-offset-2",
@@ -1028,23 +1028,23 @@ var Re = [
1028
1028
  })
1029
1029
  ]
1030
1030
  }),
1031
- /* @__PURE__ */ U("div", {
1031
+ /* @__PURE__ */ K("div", {
1032
1032
  className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
1033
- children: [/* @__PURE__ */ H("h3", {
1033
+ children: [/* @__PURE__ */ G("h3", {
1034
1034
  className: "text-sm font-semibold",
1035
1035
  children: s("devportal.termsTitle", "Developer & Marketplace Terms")
1036
- }), /* @__PURE__ */ U("ul", {
1036
+ }), /* @__PURE__ */ K("ul", {
1037
1037
  className: "space-y-2 text-sm text-text-secondary",
1038
1038
  children: [
1039
- /* @__PURE__ */ U("li", {
1039
+ /* @__PURE__ */ K("li", {
1040
1040
  className: "flex items-start gap-2",
1041
- children: [/* @__PURE__ */ H(I, {
1041
+ children: [/* @__PURE__ */ G(L, {
1042
1042
  size: 14,
1043
1043
  className: "mt-0.5 shrink-0 text-status-success-text"
1044
- }), /* @__PURE__ */ U("span", { children: [
1044
+ }), /* @__PURE__ */ K("span", { children: [
1045
1045
  "By publishing to the marketplace you agree to the",
1046
1046
  " ",
1047
- /* @__PURE__ */ H("a", {
1047
+ /* @__PURE__ */ G("a", {
1048
1048
  href: "/legal/developer-terms",
1049
1049
  target: "_blank",
1050
1050
  rel: "noopener noreferrer",
@@ -1054,29 +1054,29 @@ var Re = [
1054
1054
  "."
1055
1055
  ] })]
1056
1056
  }),
1057
- /* @__PURE__ */ U("li", {
1057
+ /* @__PURE__ */ K("li", {
1058
1058
  className: "flex items-start gap-2",
1059
- children: [/* @__PURE__ */ H(I, {
1059
+ children: [/* @__PURE__ */ G(L, {
1060
1060
  size: 14,
1061
1061
  className: "mt-0.5 shrink-0 text-status-success-text"
1062
- }), /* @__PURE__ */ H("span", { children: "All prices are in platform credits. The USD equivalent is indicative only and may vary with the current credit rate." })]
1062
+ }), /* @__PURE__ */ G("span", { children: "All prices are in platform credits. The USD equivalent is indicative only and may vary with the current credit rate." })]
1063
1063
  }),
1064
- /* @__PURE__ */ U("li", {
1064
+ /* @__PURE__ */ K("li", {
1065
1065
  className: "flex items-start gap-2",
1066
- children: [/* @__PURE__ */ H(I, {
1066
+ children: [/* @__PURE__ */ G(L, {
1067
1067
  size: 14,
1068
1068
  className: "mt-0.5 shrink-0 text-status-success-text"
1069
- }), /* @__PURE__ */ H("span", { children: "Earnings are credited to your billing account per-sale. Cash withdrawals are subject to a minimum threshold and applicable taxes in your jurisdiction." })]
1069
+ }), /* @__PURE__ */ G("span", { children: "Earnings are credited to your billing account per-sale. Cash withdrawals are subject to a minimum threshold and applicable taxes in your jurisdiction." })]
1070
1070
  }),
1071
- /* @__PURE__ */ U("li", {
1071
+ /* @__PURE__ */ K("li", {
1072
1072
  className: "flex items-start gap-2",
1073
- children: [/* @__PURE__ */ H(I, {
1073
+ children: [/* @__PURE__ */ G(L, {
1074
1074
  size: 14,
1075
1075
  className: "mt-0.5 shrink-0 text-status-success-text"
1076
- }), /* @__PURE__ */ U("span", { children: [
1076
+ }), /* @__PURE__ */ K("span", { children: [
1077
1077
  "The platform reserves the right to adjust the credit rate, fee structure, or payout schedule with 30 days notice. See the",
1078
1078
  " ",
1079
- /* @__PURE__ */ H("a", {
1079
+ /* @__PURE__ */ G("a", {
1080
1080
  href: "/legal/marketplace-terms",
1081
1081
  target: "_blank",
1082
1082
  rel: "noopener noreferrer",
@@ -1090,26 +1090,26 @@ var Re = [
1090
1090
  ]
1091
1091
  })]
1092
1092
  }),
1093
- /* @__PURE__ */ U("div", {
1093
+ /* @__PURE__ */ K("div", {
1094
1094
  className: "border-t border-border-subtle pt-6 space-y-4",
1095
- children: [/* @__PURE__ */ H("button", {
1095
+ children: [/* @__PURE__ */ G("button", {
1096
1096
  type: "button",
1097
1097
  onClick: () => void g(),
1098
1098
  disabled: d,
1099
1099
  className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors disabled:opacity-50",
1100
- children: d ? /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(z, {
1100
+ children: d ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(V, {
1101
1101
  size: 16,
1102
1102
  className: "animate-spin"
1103
- }), s("devportal.saving", "Saving…")] }) : /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(L, { size: 16 }), s("devportal.savePricing", "Save Pricing")] })
1104
- }), a && /* @__PURE__ */ U("div", {
1103
+ }), s("devportal.saving", "Saving…")] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(R, { size: 16 }), s("devportal.savePricing", "Save Pricing")] })
1104
+ }), a && /* @__PURE__ */ K("div", {
1105
1105
  className: "flex items-start gap-3 rounded-lg border border-status-success-bg bg-status-success-bg-subtle px-4 py-3",
1106
- children: [/* @__PURE__ */ H(I, {
1106
+ children: [/* @__PURE__ */ G(L, {
1107
1107
  size: 16,
1108
1108
  className: "mt-0.5 shrink-0 text-status-success-text"
1109
- }), /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
1109
+ }), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
1110
1110
  className: "text-sm font-medium text-status-success-text",
1111
1111
  children: s("devportal.allSetToSubmit", "You're all set!")
1112
- }), /* @__PURE__ */ H("p", {
1112
+ }), /* @__PURE__ */ G("p", {
1113
1113
  className: "mt-0.5 text-xs text-text-secondary",
1114
1114
  children: s("devportal.allSetDesc", "Store listing, versions, and pricing are complete. Head to the top of the page and click Submit for Review.")
1115
1115
  })] })]
@@ -1118,87 +1118,87 @@ var Re = [
1118
1118
  ]
1119
1119
  });
1120
1120
  }, Ue = ({ appId: e, onNavigate: n, pricingDone: i = !1, onNavigateToPricing: a }) => {
1121
- let { t: o } = P(), s = (e, t) => {
1121
+ let { t: o } = F(), s = (e, t) => {
1122
1122
  let n = o(e);
1123
1123
  return n === e ? t : n;
1124
1124
  }, { data: l, loading: u, error: d } = c({
1125
1125
  variables: { applicationId: e },
1126
1126
  fetchPolicy: "cache-and-network"
1127
1127
  });
1128
- if (u) return /* @__PURE__ */ H(K, { message: s("devportal.loadingVersions", "Loading versions…") });
1129
- if (d) return /* @__PURE__ */ H(Be, { message: d.message });
1128
+ if (u) return /* @__PURE__ */ G(Re, { message: s("devportal.loadingVersions", "Loading versions…") });
1129
+ if (d) return /* @__PURE__ */ G(ze, { message: d.message });
1130
1130
  let f = (l?.application?.versions?.edges ?? []).map((e) => e.node);
1131
- return /* @__PURE__ */ U("div", {
1131
+ return /* @__PURE__ */ K("div", {
1132
1132
  className: "space-y-4",
1133
1133
  children: [
1134
- /* @__PURE__ */ U("div", {
1134
+ /* @__PURE__ */ K("div", {
1135
1135
  className: "flex items-center justify-between",
1136
- children: [/* @__PURE__ */ U("p", {
1136
+ children: [/* @__PURE__ */ K("p", {
1137
1137
  className: "text-sm text-text-secondary",
1138
1138
  children: [
1139
1139
  f.length,
1140
1140
  " ",
1141
1141
  f.length === 1 ? s("devportal.version", "version") : s("devportal.versions", "versions")
1142
1142
  ]
1143
- }), /* @__PURE__ */ U("button", {
1143
+ }), /* @__PURE__ */ K("button", {
1144
1144
  onClick: () => n(`/apps/${e}/versions`),
1145
1145
  className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors",
1146
- children: [/* @__PURE__ */ H(B, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
1146
+ children: [/* @__PURE__ */ G(U, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
1147
1147
  })]
1148
1148
  }),
1149
- f.length > 0 ? /* @__PURE__ */ H("div", {
1149
+ f.length > 0 ? /* @__PURE__ */ G("div", {
1150
1150
  className: "overflow-hidden rounded-lg border border-border-subtle",
1151
- children: /* @__PURE__ */ U("table", {
1151
+ children: /* @__PURE__ */ K("table", {
1152
1152
  className: "w-full text-sm",
1153
- children: [/* @__PURE__ */ H("thead", { children: /* @__PURE__ */ U("tr", {
1153
+ children: [/* @__PURE__ */ G("thead", { children: /* @__PURE__ */ K("tr", {
1154
1154
  className: "border-b border-border-subtle bg-bg-sunken/50",
1155
1155
  children: [
1156
- /* @__PURE__ */ H("th", {
1156
+ /* @__PURE__ */ G("th", {
1157
1157
  className: "px-4 py-3 text-left font-medium text-text-secondary",
1158
1158
  children: s("devportal.version", "Version")
1159
1159
  }),
1160
- /* @__PURE__ */ H("th", {
1160
+ /* @__PURE__ */ G("th", {
1161
1161
  className: "px-4 py-3 text-left font-medium text-text-secondary",
1162
1162
  children: s("devportal.status", "Status")
1163
1163
  }),
1164
- /* @__PURE__ */ H("th", {
1164
+ /* @__PURE__ */ G("th", {
1165
1165
  className: "px-4 py-3 text-left font-medium text-text-secondary",
1166
1166
  children: s("devportal.released", "Released")
1167
1167
  }),
1168
- /* @__PURE__ */ H("th", {
1168
+ /* @__PURE__ */ G("th", {
1169
1169
  className: "px-4 py-3 text-left font-medium text-text-secondary",
1170
1170
  children: s("devportal.flags", "Flags")
1171
1171
  })
1172
1172
  ]
1173
- }) }), /* @__PURE__ */ H("tbody", {
1173
+ }) }), /* @__PURE__ */ G("tbody", {
1174
1174
  className: "divide-y divide-border-subtle",
1175
- children: f.map((e) => /* @__PURE__ */ U(V, { children: [
1176
- /* @__PURE__ */ U("tr", {
1175
+ children: f.map((e) => /* @__PURE__ */ K(W, { children: [
1176
+ /* @__PURE__ */ K("tr", {
1177
1177
  className: "hover:bg-bg-sunken/30 transition-colors",
1178
1178
  children: [
1179
- /* @__PURE__ */ H("td", {
1179
+ /* @__PURE__ */ G("td", {
1180
1180
  className: "px-4 py-3 font-mono font-medium",
1181
1181
  children: e.version
1182
1182
  }),
1183
- /* @__PURE__ */ H("td", {
1183
+ /* @__PURE__ */ G("td", {
1184
1184
  className: "px-4 py-3",
1185
- children: /* @__PURE__ */ H("span", {
1185
+ children: /* @__PURE__ */ G("span", {
1186
1186
  className: t("inline-flex rounded-full px-2 py-0.5 text-xs font-medium", e.status === "published" ? "bg-status-success-bg-subtle text-status-success-text" : e.status === "pending_review" ? "bg-status-info-bg-subtle text-status-info-text" : e.status === "rejected" ? "bg-status-error-bg-subtle text-status-error-text" : e.status === "deprecated" ? "bg-bg-sunken text-text-secondary" : "bg-status-warning-bg-subtle text-status-warning-text"),
1187
1187
  children: e.status === "pending_review" ? "In Review" : e.status
1188
1188
  })
1189
1189
  }),
1190
- /* @__PURE__ */ H("td", {
1190
+ /* @__PURE__ */ G("td", {
1191
1191
  className: "px-4 py-3 text-text-secondary",
1192
1192
  children: e.publishedAt ? new Date(e.publishedAt).toLocaleDateString() : new Date(e.createdAt).toLocaleDateString()
1193
1193
  }),
1194
- /* @__PURE__ */ H("td", {
1194
+ /* @__PURE__ */ G("td", {
1195
1195
  className: "px-4 py-3",
1196
- children: /* @__PURE__ */ U("div", {
1196
+ children: /* @__PURE__ */ K("div", {
1197
1197
  className: "flex gap-1.5",
1198
- children: [e.isLatest && /* @__PURE__ */ H("span", {
1198
+ children: [e.isLatest && /* @__PURE__ */ G("span", {
1199
1199
  className: "rounded-full bg-action-primary-bg/10 px-2 py-0.5 text-xs text-primary font-medium",
1200
1200
  children: "latest"
1201
- }), e.isStable && /* @__PURE__ */ H("span", {
1201
+ }), e.isStable && /* @__PURE__ */ G("span", {
1202
1202
  className: "rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-xs text-status-success-text font-medium",
1203
1203
  children: "stable"
1204
1204
  })]
@@ -1206,26 +1206,26 @@ var Re = [
1206
1206
  })
1207
1207
  ]
1208
1208
  }, e.id),
1209
- e.status === "rejected" && e.reviewNotes && /* @__PURE__ */ H("tr", {
1209
+ e.status === "rejected" && e.reviewNotes && /* @__PURE__ */ G("tr", {
1210
1210
  className: "bg-status-error-bg-subtle/40",
1211
- children: /* @__PURE__ */ H("td", {
1211
+ children: /* @__PURE__ */ G("td", {
1212
1212
  colSpan: 4,
1213
1213
  className: "px-4 py-2",
1214
- children: /* @__PURE__ */ U("p", {
1214
+ children: /* @__PURE__ */ K("p", {
1215
1215
  className: "text-xs text-status-error-text",
1216
- children: [/* @__PURE__ */ H("span", {
1216
+ children: [/* @__PURE__ */ K("span", {
1217
1217
  className: "font-semibold",
1218
- children: "Review feedback: "
1218
+ children: ["Review feedback:", " "]
1219
1219
  }), e.reviewNotes]
1220
1220
  })
1221
1221
  })
1222
1222
  }, `${e.id}-notes`),
1223
- e.status === "pending_review" && /* @__PURE__ */ H("tr", {
1223
+ e.status === "pending_review" && /* @__PURE__ */ G("tr", {
1224
1224
  className: "bg-status-info-bg-subtle/30",
1225
- children: /* @__PURE__ */ H("td", {
1225
+ children: /* @__PURE__ */ G("td", {
1226
1226
  colSpan: 4,
1227
1227
  className: "px-4 py-2",
1228
- children: /* @__PURE__ */ H("p", {
1228
+ children: /* @__PURE__ */ G("p", {
1229
1229
  className: "text-xs text-status-info-text",
1230
1230
  children: "Submitted for platform review — you will be notified once approved or if changes are needed."
1231
1231
  })
@@ -1234,53 +1234,53 @@ var Re = [
1234
1234
  ] }))
1235
1235
  })]
1236
1236
  })
1237
- }) : /* @__PURE__ */ H(r, {
1237
+ }) : /* @__PURE__ */ G(r, {
1238
1238
  illustration: "empty-generic",
1239
- icon: /* @__PURE__ */ H(ye, { size: 32 }),
1239
+ icon: /* @__PURE__ */ G(_e, { size: 32 }),
1240
1240
  title: s("devportal.noVersions", "No versions yet"),
1241
1241
  description: s("devportal.noVersionsDescription", "Upload your first version to make this item available for review and distribution."),
1242
- action: /* @__PURE__ */ U("button", {
1242
+ action: /* @__PURE__ */ K("button", {
1243
1243
  onClick: () => n(`/apps/${e}/versions`),
1244
1244
  className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90",
1245
- children: [/* @__PURE__ */ H(B, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
1245
+ children: [/* @__PURE__ */ G(U, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
1246
1246
  })
1247
1247
  }),
1248
- !i && a && /* @__PURE__ */ U("div", {
1248
+ !i && a && /* @__PURE__ */ K("div", {
1249
1249
  className: "mt-4 flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-sunken px-4 py-3",
1250
1250
  children: [
1251
- /* @__PURE__ */ H(L, {
1251
+ /* @__PURE__ */ G(R, {
1252
1252
  size: 16,
1253
1253
  className: "shrink-0 text-primary"
1254
1254
  }),
1255
- /* @__PURE__ */ H("p", {
1255
+ /* @__PURE__ */ G("p", {
1256
1256
  className: "flex-1 text-sm text-text-secondary",
1257
1257
  children: s("devportal.versionsNextPricing", "You've got versions covered. Now set your pricing before you can submit.")
1258
1258
  }),
1259
- /* @__PURE__ */ U("button", {
1259
+ /* @__PURE__ */ K("button", {
1260
1260
  type: "button",
1261
1261
  onClick: a,
1262
1262
  className: "inline-flex items-center gap-1 text-sm font-medium text-primary hover:underline underline-offset-2 whitespace-nowrap",
1263
- children: [s("devportal.nextSetPricing", "Set Pricing"), /* @__PURE__ */ H(de, { size: 15 })]
1263
+ children: [s("devportal.nextSetPricing", "Set Pricing"), /* @__PURE__ */ G(ue, { size: 15 })]
1264
1264
  })
1265
1265
  ]
1266
1266
  })
1267
1267
  ]
1268
1268
  });
1269
1269
  }, We = ({ appId: e, onNavigate: t }) => {
1270
- let { t: n } = P(), r = (e, t) => {
1270
+ let { t: n } = F(), r = (e, t) => {
1271
1271
  let r = n(e);
1272
1272
  return r === e ? t : r;
1273
1273
  }, { data: i, loading: a, error: o } = u({ variables: { applicationId: e } });
1274
- return a ? /* @__PURE__ */ H(K, { message: r("devportal.loadingWebhooks", "Loading webhooks...") }) : o ? /* @__PURE__ */ H(Be, { message: o.message }) : /* @__PURE__ */ H(Je, {
1274
+ return a ? /* @__PURE__ */ G(Re, { message: r("devportal.loadingWebhooks", "Loading webhooks...") }) : o ? /* @__PURE__ */ G(ze, { message: o.message }) : /* @__PURE__ */ G(Je, {
1275
1275
  appId: e,
1276
- webhooks: (i?.webhooks ?? []).map(Ie),
1276
+ webhooks: (i?.webhooks ?? []).map(Pe),
1277
1277
  onNavigate: t
1278
1278
  });
1279
1279
  }, Ge = ({ authAppId: e, appName: t, onGrantDelegation: n, onNavigate: a }) => {
1280
- let { t: o } = P(), s = (e, t) => {
1280
+ let { t: o } = F(), s = (e, t) => {
1281
1281
  let n = o(e);
1282
1282
  return n === e ? t : n;
1283
- }, { data: c, loading: l, error: u, refetch: d } = i(), [f] = p(), [m, h] = N([]), [g, _] = N(!1), [v, y] = N(/* @__PURE__ */ new Set()), [b, x] = N(null), S = M(() => c?.currentUserDelegations?.delegations ? c.currentUserDelegations.delegations.filter((t) => t.appId === e).map(Le) : [], [e, c]), C = M(() => S.filter((e) => e.status === "ACTIVE"), [S]), w = M(() => C.filter((e) => v.has(e.id)), [C, v]), T = C.length > 0 && C.every((e) => v.has(e.id)), ee = C.some((e) => v.has(e.id)) && !T, E = j((e, t) => {
1283
+ }, { data: c, loading: l, error: u, refetch: d } = i(), [f] = p(), [m, h] = P([]), [g, _] = P(!1), [v, y] = P(/* @__PURE__ */ new Set()), [b, x] = P(null), S = M(() => c?.currentUserDelegations?.delegations ? c.currentUserDelegations.delegations.filter((t) => t.appId === e).map(Fe) : [], [e, c]), C = M(() => S.filter((e) => e.status === "ACTIVE"), [S]), w = M(() => C.filter((e) => v.has(e.id)), [C, v]), T = C.length > 0 && C.every((e) => v.has(e.id)), ee = C.some((e) => v.has(e.id)) && !T, E = j((e, t) => {
1284
1284
  y((n) => {
1285
1285
  let r = new Set(n);
1286
1286
  return t ? r.add(e) : r.delete(e), r;
@@ -1306,19 +1306,19 @@ var Re = [
1306
1306
  _(!1);
1307
1307
  }
1308
1308
  }, [f, d]);
1309
- return e ? l ? /* @__PURE__ */ H(K, { message: s("devportal.loadingDelegations", "Loading delegations...") }) : u ? /* @__PURE__ */ H(Be, { message: u.message }) : /* @__PURE__ */ U(V, { children: [
1310
- b && /* @__PURE__ */ H("div", {
1309
+ return e ? l ? /* @__PURE__ */ G(Re, { message: s("devportal.loadingDelegations", "Loading delegations...") }) : u ? /* @__PURE__ */ G(ze, { message: u.message }) : /* @__PURE__ */ K(W, { children: [
1310
+ b && /* @__PURE__ */ G("div", {
1311
1311
  className: "rounded-lg border border-border-subtle bg-status-success-bg-subtle p-3 text-sm text-status-success-text",
1312
- children: /* @__PURE__ */ U("div", {
1312
+ children: /* @__PURE__ */ K("div", {
1313
1313
  className: "flex items-center justify-between gap-3",
1314
- children: [/* @__PURE__ */ H("span", { children: b }), /* @__PURE__ */ H("button", {
1314
+ children: [/* @__PURE__ */ G("span", { children: b }), /* @__PURE__ */ G("button", {
1315
1315
  onClick: () => x(null),
1316
1316
  className: "text-status-success-text hover:text-status-success-text",
1317
1317
  children: s("devportal.dismiss", "Dismiss")
1318
1318
  })]
1319
1319
  })
1320
1320
  }),
1321
- /* @__PURE__ */ H(Ye, {
1321
+ /* @__PURE__ */ G(Ye, {
1322
1322
  appName: t,
1323
1323
  delegations: S,
1324
1324
  onGrantDelegation: n,
@@ -1331,7 +1331,7 @@ var Re = [
1331
1331
  allVisibleSelected: T,
1332
1332
  partiallySelected: ee
1333
1333
  }),
1334
- /* @__PURE__ */ H(ne, {
1334
+ /* @__PURE__ */ G(ne, {
1335
1335
  open: m.length > 0,
1336
1336
  onOpenChange: (e) => {
1337
1337
  e || h([]);
@@ -1346,19 +1346,19 @@ var Re = [
1346
1346
  variant: "destructive",
1347
1347
  loading: g
1348
1348
  })
1349
- ] }) : /* @__PURE__ */ H(r, {
1349
+ ] }) : /* @__PURE__ */ G(r, {
1350
1350
  illustration: "empty-generic",
1351
- icon: /* @__PURE__ */ H(we, { size: 32 }),
1351
+ icon: /* @__PURE__ */ G(xe, { size: 32 }),
1352
1352
  title: s("devportal.linkAuthAppFirst", "Link an auth app first"),
1353
1353
  description: s("devportal.linkAuthAppFirstDescription", "Delegations are managed through auth apps. Create or link an auth app before granting app-as-user access."),
1354
- action: /* @__PURE__ */ U("button", {
1354
+ action: /* @__PURE__ */ K("button", {
1355
1355
  onClick: () => a("/oauth"),
1356
1356
  className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90",
1357
- children: [/* @__PURE__ */ H(R, { size: 16 }), s("devportal.manageOAuthApps", "Manage OAuth Apps")]
1357
+ children: [/* @__PURE__ */ G(z, { size: 16 }), s("devportal.manageOAuthApps", "Manage OAuth Apps")]
1358
1358
  })
1359
1359
  });
1360
1360
  }, Ke = ({ appId: e }) => {
1361
- let { t } = P(), n = (e, n) => {
1361
+ let { t } = F(), n = (e, n) => {
1362
1362
  let r = t(e);
1363
1363
  return r === e ? n : r;
1364
1364
  }, r = M(() => /* @__PURE__ */ new Date(), []), { data: i, loading: a, error: s } = o({ variables: {
@@ -1370,67 +1370,67 @@ var Re = [
1370
1370
  }, [r]).toISOString(),
1371
1371
  endDate: r.toISOString()
1372
1372
  } });
1373
- return a ? /* @__PURE__ */ H(K, { message: n("devportal.loadingAnalytics", "Loading analytics...") }) : s ? /* @__PURE__ */ H(Be, { message: s.message }) : /* @__PURE__ */ H(Xe, { analytics: (i?.applicationAnalytics ?? []).map(G) });
1373
+ return a ? /* @__PURE__ */ G(Re, { message: n("devportal.loadingAnalytics", "Loading analytics...") }) : s ? /* @__PURE__ */ G(ze, { message: s.message }) : /* @__PURE__ */ G(Xe, { analytics: (i?.applicationAnalytics ?? []).map(q) });
1374
1374
  }, qe = ({ app: e }) => {
1375
- let { t } = P(), n = (e, n) => {
1375
+ let { t } = F(), n = (e, n) => {
1376
1376
  let r = t(e);
1377
1377
  return r === e ? n : r;
1378
1378
  };
1379
- return /* @__PURE__ */ U("div", {
1379
+ return /* @__PURE__ */ K("div", {
1380
1380
  className: "grid gap-6 lg:grid-cols-3",
1381
- children: [/* @__PURE__ */ U("div", {
1381
+ children: [/* @__PURE__ */ K("div", {
1382
1382
  className: "lg:col-span-2 space-y-6",
1383
1383
  children: [
1384
- /* @__PURE__ */ H(W, { children: /* @__PURE__ */ U("div", {
1384
+ /* @__PURE__ */ G(je, { children: /* @__PURE__ */ K("div", {
1385
1385
  className: "grid gap-4 sm:grid-cols-4",
1386
1386
  children: [
1387
- /* @__PURE__ */ H(Q, {
1387
+ /* @__PURE__ */ G(Q, {
1388
1388
  label: n("devportal.totalInstalls", "Total Installs"),
1389
1389
  value: e.installCount.toLocaleString()
1390
1390
  }),
1391
- /* @__PURE__ */ H(Q, {
1391
+ /* @__PURE__ */ G(Q, {
1392
1392
  label: n("devportal.activeInstalls", "Active Installs"),
1393
1393
  value: e.activeInstallCount.toLocaleString()
1394
1394
  }),
1395
- /* @__PURE__ */ H(Q, {
1395
+ /* @__PURE__ */ G(Q, {
1396
1396
  label: n("devportal.averageRating", "Average Rating"),
1397
1397
  value: e.averageRating ? `${e.averageRating.toFixed(1)} ★` : n("devportal.notAvailable", "N/A")
1398
1398
  }),
1399
- /* @__PURE__ */ H(Q, {
1399
+ /* @__PURE__ */ G(Q, {
1400
1400
  label: n("devportal.reviews", "Reviews"),
1401
1401
  value: e.reviewCount.toString()
1402
1402
  })
1403
1403
  ]
1404
1404
  }) }),
1405
- /* @__PURE__ */ H(y, {
1405
+ /* @__PURE__ */ G(y, {
1406
1406
  title: n("devportal.description", "Description"),
1407
- children: /* @__PURE__ */ H("div", {
1407
+ children: /* @__PURE__ */ G("div", {
1408
1408
  className: "prose prose-sm max-w-none",
1409
- children: /* @__PURE__ */ H("pre", {
1409
+ children: /* @__PURE__ */ G("pre", {
1410
1410
  className: "whitespace-pre-wrap font-sans text-sm text-text-primary bg-transparent p-0 m-0",
1411
1411
  children: e.description || n("devportal.noDescriptionProvided", "No description provided.")
1412
1412
  })
1413
1413
  })
1414
1414
  }),
1415
- /* @__PURE__ */ H(y, {
1415
+ /* @__PURE__ */ G(y, {
1416
1416
  title: n("devportal.tagsAndKeywords", "Tags & Keywords"),
1417
- children: /* @__PURE__ */ U("div", {
1417
+ children: /* @__PURE__ */ K("div", {
1418
1418
  className: "space-y-3",
1419
- children: [e.tags.length > 0 && /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
1419
+ children: [e.tags.length > 0 && /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
1420
1420
  className: "text-xs text-text-secondary mb-2",
1421
1421
  children: n("devportal.tags", "Tags")
1422
- }), /* @__PURE__ */ H("div", {
1422
+ }), /* @__PURE__ */ G("div", {
1423
1423
  className: "flex flex-wrap gap-2",
1424
- children: e.tags.map((e) => /* @__PURE__ */ H("span", {
1424
+ children: e.tags.map((e) => /* @__PURE__ */ G("span", {
1425
1425
  className: "rounded-full bg-action-primary-bg/10 px-3 py-1 text-xs font-medium text-primary",
1426
1426
  children: e
1427
1427
  }, e))
1428
- })] }), e.keywords.length > 0 && /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
1428
+ })] }), e.keywords.length > 0 && /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
1429
1429
  className: "text-xs text-text-secondary mb-2",
1430
1430
  children: n("devportal.keywords", "Keywords")
1431
- }), /* @__PURE__ */ H("div", {
1431
+ }), /* @__PURE__ */ G("div", {
1432
1432
  className: "flex flex-wrap gap-2",
1433
- children: e.keywords.map((e) => /* @__PURE__ */ H("span", {
1433
+ children: e.keywords.map((e) => /* @__PURE__ */ G("span", {
1434
1434
  className: "rounded-full bg-bg-sunken px-3 py-1 text-xs",
1435
1435
  children: e
1436
1436
  }, e))
@@ -1438,14 +1438,14 @@ var Re = [
1438
1438
  })
1439
1439
  })
1440
1440
  ]
1441
- }), /* @__PURE__ */ U("div", {
1441
+ }), /* @__PURE__ */ K("div", {
1442
1442
  className: "space-y-6",
1443
- children: [/* @__PURE__ */ H(y, {
1443
+ children: [/* @__PURE__ */ G(y, {
1444
1444
  title: n("devportal.details", "Details"),
1445
- children: /* @__PURE__ */ H(D, { items: [
1445
+ children: /* @__PURE__ */ G(D, { items: [
1446
1446
  {
1447
1447
  label: n("devportal.appId", "App ID"),
1448
- value: /* @__PURE__ */ H("code", {
1448
+ value: /* @__PURE__ */ G("code", {
1449
1449
  className: "text-xs",
1450
1450
  children: e.id
1451
1451
  })
@@ -1481,32 +1481,32 @@ var Re = [
1481
1481
  value: e.publishedAt ? new Date(e.publishedAt).toLocaleDateString() : n("devportal.notPublished", "Not published")
1482
1482
  }
1483
1483
  ] })
1484
- }), /* @__PURE__ */ H(y, {
1484
+ }), /* @__PURE__ */ G(y, {
1485
1485
  title: n("devportal.links", "Links"),
1486
- children: /* @__PURE__ */ U("div", {
1486
+ children: /* @__PURE__ */ K("div", {
1487
1487
  className: "space-y-2",
1488
1488
  children: [
1489
- e.websiteUrl && /* @__PURE__ */ H($, {
1489
+ e.websiteUrl && /* @__PURE__ */ G($, {
1490
1490
  label: n("devportal.website", "Website"),
1491
1491
  url: e.websiteUrl
1492
1492
  }),
1493
- e.documentationUrl && /* @__PURE__ */ H($, {
1493
+ e.documentationUrl && /* @__PURE__ */ G($, {
1494
1494
  label: n("devportal.documentation", "Documentation"),
1495
1495
  url: e.documentationUrl
1496
1496
  }),
1497
- e.supportUrl && /* @__PURE__ */ H($, {
1497
+ e.supportUrl && /* @__PURE__ */ G($, {
1498
1498
  label: n("devportal.support", "Support"),
1499
1499
  url: e.supportUrl
1500
1500
  }),
1501
- e.githubUrl && /* @__PURE__ */ H($, {
1501
+ e.githubUrl && /* @__PURE__ */ G($, {
1502
1502
  label: n("devportal.github", "GitHub"),
1503
1503
  url: e.githubUrl
1504
1504
  }),
1505
- e.privacyPolicyUrl && /* @__PURE__ */ H($, {
1505
+ e.privacyPolicyUrl && /* @__PURE__ */ G($, {
1506
1506
  label: n("devportal.privacyPolicy", "Privacy Policy"),
1507
1507
  url: e.privacyPolicyUrl
1508
1508
  }),
1509
- e.termsOfServiceUrl && /* @__PURE__ */ H($, {
1509
+ e.termsOfServiceUrl && /* @__PURE__ */ G($, {
1510
1510
  label: n("devportal.termsOfService", "Terms of Service"),
1511
1511
  url: e.termsOfServiceUrl
1512
1512
  })
@@ -1516,15 +1516,15 @@ var Re = [
1516
1516
  })]
1517
1517
  });
1518
1518
  }, Je = ({ appId: e, webhooks: t, onNavigate: n }) => {
1519
- let { t: i } = P(), a = (e, t) => {
1519
+ let { t: i } = F(), a = (e, t) => {
1520
1520
  let n = i(e);
1521
1521
  return n === e ? t : n;
1522
1522
  };
1523
- return /* @__PURE__ */ U("div", {
1523
+ return /* @__PURE__ */ K("div", {
1524
1524
  className: "space-y-6",
1525
- children: [/* @__PURE__ */ U("div", {
1525
+ children: [/* @__PURE__ */ K("div", {
1526
1526
  className: "flex items-center justify-between",
1527
- children: [/* @__PURE__ */ U("p", {
1527
+ children: [/* @__PURE__ */ K("p", {
1528
1528
  className: "text-sm text-text-secondary",
1529
1529
  children: [
1530
1530
  t.length,
@@ -1533,81 +1533,81 @@ var Re = [
1533
1533
  " ",
1534
1534
  a("devportal.configured", "configured")
1535
1535
  ]
1536
- }), /* @__PURE__ */ U("button", {
1536
+ }), /* @__PURE__ */ K("button", {
1537
1537
  onClick: () => n(`/apps/${e}/webhooks/new`),
1538
1538
  className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors",
1539
- children: [/* @__PURE__ */ H(be, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
1539
+ children: [/* @__PURE__ */ G(H, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
1540
1540
  })]
1541
- }), t.length > 0 ? /* @__PURE__ */ H("div", {
1541
+ }), t.length > 0 ? /* @__PURE__ */ G("div", {
1542
1542
  className: "space-y-4",
1543
- children: t.map((t) => /* @__PURE__ */ U("div", {
1543
+ children: t.map((t) => /* @__PURE__ */ K("div", {
1544
1544
  className: "rounded-card border border-border-seam bg-bg-surface p-4 space-y-4 shadow-[var(--shadow-pop)]",
1545
1545
  children: [
1546
- /* @__PURE__ */ U("div", {
1546
+ /* @__PURE__ */ K("div", {
1547
1547
  className: "flex items-start justify-between",
1548
- children: [/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ U("div", {
1548
+ children: [/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ K("div", {
1549
1549
  className: "flex items-center gap-2",
1550
- children: [/* @__PURE__ */ H("h3", {
1550
+ children: [/* @__PURE__ */ G("h3", {
1551
1551
  className: "font-medium",
1552
1552
  children: t.name
1553
- }), /* @__PURE__ */ H(S, {
1553
+ }), /* @__PURE__ */ G(S, {
1554
1554
  status: t.status,
1555
1555
  type: "webhook"
1556
1556
  })]
1557
- }), t.description && /* @__PURE__ */ H("p", {
1557
+ }), t.description && /* @__PURE__ */ G("p", {
1558
1558
  className: "text-sm text-text-secondary mt-1",
1559
1559
  children: t.description
1560
- })] }), /* @__PURE__ */ H("button", {
1560
+ })] }), /* @__PURE__ */ G("button", {
1561
1561
  onClick: () => n(`/apps/${e}/webhooks/${t.id}`),
1562
1562
  className: "rounded-md p-1 hover:bg-bg-sunken",
1563
- children: /* @__PURE__ */ H(ve, { size: 20 })
1563
+ children: /* @__PURE__ */ G(ge, { size: 20 })
1564
1564
  })]
1565
1565
  }),
1566
- /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
1566
+ /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
1567
1567
  className: "text-xs text-text-secondary mb-1",
1568
1568
  children: a("devportal.endpointUrl", "Endpoint URL")
1569
- }), /* @__PURE__ */ H("code", {
1569
+ }), /* @__PURE__ */ G("code", {
1570
1570
  className: "text-sm bg-bg-sunken px-2 py-1 rounded block truncate",
1571
1571
  children: t.url
1572
1572
  })] }),
1573
- /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
1573
+ /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
1574
1574
  className: "text-xs text-text-secondary mb-2",
1575
1575
  children: a("devportal.events", "Events")
1576
- }), /* @__PURE__ */ H("div", {
1576
+ }), /* @__PURE__ */ G("div", {
1577
1577
  className: "flex flex-wrap gap-2",
1578
- children: t.events.map((e) => /* @__PURE__ */ H("span", {
1578
+ children: t.events.map((e) => /* @__PURE__ */ G("span", {
1579
1579
  className: "rounded-full bg-bg-sunken px-2 py-0.5 text-xs",
1580
1580
  children: e
1581
1581
  }, e))
1582
1582
  })] }),
1583
- /* @__PURE__ */ U("div", {
1583
+ /* @__PURE__ */ K("div", {
1584
1584
  className: "grid gap-4 sm:grid-cols-4 text-sm",
1585
1585
  children: [
1586
- /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
1586
+ /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
1587
1587
  className: "text-xs text-text-secondary",
1588
1588
  children: a("devportal.success", "Success")
1589
- }), /* @__PURE__ */ H("p", {
1589
+ }), /* @__PURE__ */ G("p", {
1590
1590
  className: "font-medium text-status-success-text",
1591
1591
  children: t.successCount.toLocaleString()
1592
1592
  })] }),
1593
- /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
1593
+ /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
1594
1594
  className: "text-xs text-text-secondary",
1595
1595
  children: a("devportal.failed", "Failed")
1596
- }), /* @__PURE__ */ H("p", {
1596
+ }), /* @__PURE__ */ G("p", {
1597
1597
  className: "font-medium text-status-error-text",
1598
1598
  children: t.failureCount.toLocaleString()
1599
1599
  })] }),
1600
- /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
1600
+ /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
1601
1601
  className: "text-xs text-text-secondary",
1602
1602
  children: a("devportal.successRate", "Success Rate")
1603
- }), /* @__PURE__ */ U("p", {
1603
+ }), /* @__PURE__ */ K("p", {
1604
1604
  className: "font-medium",
1605
1605
  children: [t.successCount + t.failureCount > 0 ? (t.successCount / (t.successCount + t.failureCount) * 100).toFixed(1) : "0.0", "%"]
1606
1606
  })] }),
1607
- /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
1607
+ /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
1608
1608
  className: "text-xs text-text-secondary",
1609
1609
  children: a("devportal.lastTriggered", "Last Triggered")
1610
- }), /* @__PURE__ */ H("p", {
1610
+ }), /* @__PURE__ */ G("p", {
1611
1611
  className: "font-medium",
1612
1612
  children: t.lastTriggeredAt ? new Date(t.lastTriggeredAt).toLocaleString() : a("devportal.never", "Never")
1613
1613
  })] })
@@ -1615,29 +1615,29 @@ var Re = [
1615
1615
  })
1616
1616
  ]
1617
1617
  }, t.id))
1618
- }) : /* @__PURE__ */ H(r, {
1618
+ }) : /* @__PURE__ */ G(r, {
1619
1619
  illustration: "empty-notifications",
1620
- icon: /* @__PURE__ */ H(ke, { size: 32 }),
1620
+ icon: /* @__PURE__ */ G(Ee, { size: 32 }),
1621
1621
  title: a("devportal.noWebhooks", "No webhooks"),
1622
1622
  description: a("devportal.noWebhooksDescription", "Add a webhook to receive event notifications"),
1623
- action: /* @__PURE__ */ U("button", {
1623
+ action: /* @__PURE__ */ K("button", {
1624
1624
  onClick: () => n(`/apps/${e}/webhooks/new`),
1625
1625
  className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90",
1626
- children: [/* @__PURE__ */ H(be, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
1626
+ children: [/* @__PURE__ */ G(H, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
1627
1627
  })
1628
1628
  })]
1629
1629
  });
1630
1630
  }, Ye = ({ appName: e, delegations: n, onGrantDelegation: i, onRevokeDelegation: a, selectedDelegationIds: o, onToggleSelectDelegation: s, onToggleAllDelegations: c, onClearSelection: l, onRevokeSelected: u, allVisibleSelected: d, partiallySelected: f }) => {
1631
- let { t: p } = P(), m = (e, t) => {
1631
+ let { t: p } = F(), m = (e, t) => {
1632
1632
  let n = p(e);
1633
1633
  return n === e ? t : n;
1634
1634
  }, h = n.filter((e) => e.status === "ACTIVE"), g = n.filter((e) => e.status !== "ACTIVE");
1635
- return /* @__PURE__ */ U("div", {
1635
+ return /* @__PURE__ */ K("div", {
1636
1636
  className: "space-y-6",
1637
1637
  children: [
1638
- /* @__PURE__ */ U("div", {
1638
+ /* @__PURE__ */ K("div", {
1639
1639
  className: "flex items-center justify-between",
1640
- children: [/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ U("p", {
1640
+ children: [/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ K("p", {
1641
1641
  className: "text-sm text-text-secondary",
1642
1642
  children: [
1643
1643
  n.length,
@@ -1648,7 +1648,7 @@ var Re = [
1648
1648
  " ",
1649
1649
  e
1650
1650
  ]
1651
- }), h.length > 0 && /* @__PURE__ */ U("p", {
1651
+ }), h.length > 0 && /* @__PURE__ */ K("p", {
1652
1652
  className: "text-xs text-text-secondary mt-0.5",
1653
1653
  children: [
1654
1654
  h.length,
@@ -1660,44 +1660,44 @@ var Re = [
1660
1660
  " ",
1661
1661
  m("devportal.revokedExpired", "revoked/expired")
1662
1662
  ]
1663
- })] }), /* @__PURE__ */ U("button", {
1663
+ })] }), /* @__PURE__ */ K("button", {
1664
1664
  onClick: i,
1665
1665
  className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors",
1666
- children: [/* @__PURE__ */ H(be, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
1666
+ children: [/* @__PURE__ */ G(H, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
1667
1667
  })]
1668
1668
  }),
1669
- h.length > 0 && /* @__PURE__ */ H("div", {
1669
+ h.length > 0 && /* @__PURE__ */ G("div", {
1670
1670
  className: "rounded-card border border-border-seam bg-bg-surface p-4",
1671
- children: /* @__PURE__ */ U("div", {
1671
+ children: /* @__PURE__ */ K("div", {
1672
1672
  className: "flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between",
1673
- children: [/* @__PURE__ */ U("div", {
1673
+ children: [/* @__PURE__ */ K("div", {
1674
1674
  className: "flex flex-wrap items-center gap-3",
1675
- children: [/* @__PURE__ */ U("div", {
1675
+ children: [/* @__PURE__ */ K("div", {
1676
1676
  className: "flex items-center gap-2",
1677
- children: [/* @__PURE__ */ H(w, {
1677
+ children: [/* @__PURE__ */ G(w, {
1678
1678
  checked: d,
1679
1679
  indeterminate: f,
1680
1680
  onChange: c,
1681
1681
  ariaLabel: m("devportal.selectAllActiveDelegations", "Select all active app delegations")
1682
- }), /* @__PURE__ */ H("span", {
1682
+ }), /* @__PURE__ */ G("span", {
1683
1683
  className: "text-sm font-medium",
1684
1684
  children: m("devportal.selectAllActive", "Select all active")
1685
1685
  })]
1686
- }), o.size > 0 && /* @__PURE__ */ H("button", {
1686
+ }), o.size > 0 && /* @__PURE__ */ G("button", {
1687
1687
  onClick: l,
1688
1688
  className: "text-sm text-text-secondary hover:text-text-primary",
1689
1689
  children: m("devportal.clearSelection", "Clear selection")
1690
1690
  })]
1691
- }), /* @__PURE__ */ U("div", {
1691
+ }), /* @__PURE__ */ K("div", {
1692
1692
  className: "flex flex-wrap items-center gap-2",
1693
- children: [/* @__PURE__ */ U("span", {
1693
+ children: [/* @__PURE__ */ K("span", {
1694
1694
  className: "rounded-full bg-bg-sunken px-3 py-1 text-sm font-medium text-text-secondary",
1695
1695
  children: [
1696
1696
  o.size,
1697
1697
  " ",
1698
1698
  m("devportal.selected", "selected")
1699
1699
  ]
1700
- }), /* @__PURE__ */ U("button", {
1700
+ }), /* @__PURE__ */ K("button", {
1701
1701
  onClick: u,
1702
1702
  disabled: o.size === 0,
1703
1703
  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",
@@ -1706,33 +1706,33 @@ var Re = [
1706
1706
  })]
1707
1707
  })
1708
1708
  }),
1709
- n.length > 0 ? /* @__PURE__ */ H("div", {
1709
+ n.length > 0 ? /* @__PURE__ */ G("div", {
1710
1710
  className: "space-y-4",
1711
- children: n.map((e) => /* @__PURE__ */ U("div", {
1711
+ children: n.map((e) => /* @__PURE__ */ K("div", {
1712
1712
  className: "rounded-card border border-border-seam bg-bg-surface p-4 space-y-4 shadow-[var(--shadow-pop)]",
1713
1713
  children: [
1714
- /* @__PURE__ */ U("div", {
1714
+ /* @__PURE__ */ K("div", {
1715
1715
  className: "flex items-start justify-between",
1716
- children: [/* @__PURE__ */ U("div", {
1716
+ children: [/* @__PURE__ */ K("div", {
1717
1717
  className: "flex items-start gap-3",
1718
- children: [e.status === "ACTIVE" && /* @__PURE__ */ H("div", {
1718
+ children: [e.status === "ACTIVE" && /* @__PURE__ */ G("div", {
1719
1719
  onClick: (e) => e.stopPropagation(),
1720
- children: /* @__PURE__ */ H(w, {
1720
+ children: /* @__PURE__ */ G(w, {
1721
1721
  checked: o.has(e.id),
1722
1722
  onChange: (t) => s(e.id, t),
1723
1723
  ariaLabel: `Select delegation ${e.id}`,
1724
1724
  className: "mt-1"
1725
1725
  })
1726
- }), /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ U("div", {
1726
+ }), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ K("div", {
1727
1727
  className: "flex items-center gap-2",
1728
- children: [/* @__PURE__ */ U("h3", {
1728
+ children: [/* @__PURE__ */ K("h3", {
1729
1729
  className: "font-medium",
1730
1730
  children: ["Delegation #", e.id.slice(0, 8)]
1731
- }), /* @__PURE__ */ H("span", {
1732
- className: t("rounded-full px-2 py-0.5 text-xs font-medium", ze[e.status]),
1731
+ }), /* @__PURE__ */ G("span", {
1732
+ className: t("rounded-full px-2 py-0.5 text-xs font-medium", Le[e.status]),
1733
1733
  children: e.status
1734
1734
  })]
1735
- }), /* @__PURE__ */ U("p", {
1735
+ }), /* @__PURE__ */ K("p", {
1736
1736
  className: "text-sm text-text-secondary mt-1",
1737
1737
  children: [
1738
1738
  m("devportal.granted", "Granted"),
@@ -1744,55 +1744,55 @@ var Re = [
1744
1744
  e.grantedBy === e.userId ? m("devportal.you", "you") : e.grantedBy.slice(0, 8)
1745
1745
  ]
1746
1746
  })] })]
1747
- }), e.status === "ACTIVE" && /* @__PURE__ */ U("button", {
1747
+ }), e.status === "ACTIVE" && /* @__PURE__ */ K("button", {
1748
1748
  onClick: () => a(e.id),
1749
1749
  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",
1750
- children: [/* @__PURE__ */ H(je, { size: 14 }), m("devportal.revoke", "Revoke")]
1750
+ children: [/* @__PURE__ */ G(Oe, { size: 14 }), m("devportal.revoke", "Revoke")]
1751
1751
  })]
1752
1752
  }),
1753
- /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
1753
+ /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
1754
1754
  className: "text-xs text-text-secondary mb-2",
1755
1755
  children: m("devportal.grantedScopes", "Granted Scopes")
1756
- }), /* @__PURE__ */ H("div", {
1756
+ }), /* @__PURE__ */ G("div", {
1757
1757
  className: "flex flex-wrap gap-2",
1758
- children: e.scopes.map((e) => /* @__PURE__ */ H("span", {
1758
+ children: e.scopes.map((e) => /* @__PURE__ */ G("span", {
1759
1759
  className: "rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-xs text-status-success-text",
1760
1760
  children: e
1761
1761
  }, e))
1762
1762
  })] }),
1763
- e.workspaceIds.length > 0 && /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
1763
+ e.workspaceIds.length > 0 && /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
1764
1764
  className: "text-xs text-text-secondary mb-2",
1765
1765
  children: m("devportal.workspaceScope", "Workspace Scope")
1766
- }), /* @__PURE__ */ H("div", {
1766
+ }), /* @__PURE__ */ G("div", {
1767
1767
  className: "flex flex-wrap gap-2",
1768
- children: e.workspaceIds.map((e) => /* @__PURE__ */ H("code", {
1768
+ children: e.workspaceIds.map((e) => /* @__PURE__ */ G("code", {
1769
1769
  className: "rounded bg-bg-sunken px-2 py-0.5 text-xs",
1770
1770
  children: e
1771
1771
  }, e))
1772
1772
  })] }),
1773
- /* @__PURE__ */ U("div", {
1773
+ /* @__PURE__ */ K("div", {
1774
1774
  className: "flex items-center gap-4 text-xs text-text-secondary",
1775
1775
  children: [
1776
- e.expiresAt && /* @__PURE__ */ U("span", {
1776
+ e.expiresAt && /* @__PURE__ */ K("span", {
1777
1777
  className: "flex items-center gap-1",
1778
1778
  children: [
1779
- /* @__PURE__ */ H(fe, { size: 12 }),
1779
+ /* @__PURE__ */ G(de, { size: 12 }),
1780
1780
  m("devportal.expires", "Expires"),
1781
1781
  " ",
1782
1782
  new Date(e.expiresAt).toLocaleDateString()
1783
1783
  ]
1784
1784
  }),
1785
- !e.expiresAt && e.status === "ACTIVE" && /* @__PURE__ */ U("span", {
1785
+ !e.expiresAt && e.status === "ACTIVE" && /* @__PURE__ */ K("span", {
1786
1786
  className: "flex items-center gap-1",
1787
- children: [/* @__PURE__ */ H(ue, {
1787
+ children: [/* @__PURE__ */ G(le, {
1788
1788
  size: 12,
1789
1789
  className: "text-status-success-text"
1790
1790
  }), m("devportal.noExpiration", "No expiration")]
1791
1791
  }),
1792
- e.revokedAt && /* @__PURE__ */ U("span", {
1792
+ e.revokedAt && /* @__PURE__ */ K("span", {
1793
1793
  className: "flex items-center gap-1",
1794
1794
  children: [
1795
- /* @__PURE__ */ H(je, {
1795
+ /* @__PURE__ */ G(Oe, {
1796
1796
  size: 12,
1797
1797
  className: "text-status-error-text"
1798
1798
  }),
@@ -1805,53 +1805,53 @@ var Re = [
1805
1805
  })
1806
1806
  ]
1807
1807
  }, e.id))
1808
- }) : /* @__PURE__ */ H(r, {
1808
+ }) : /* @__PURE__ */ G(r, {
1809
1809
  illustration: "empty-people",
1810
- icon: /* @__PURE__ */ H(De, { size: 32 }),
1810
+ icon: /* @__PURE__ */ G(we, { size: 32 }),
1811
1811
  title: m("devportal.noDelegations", "No delegations"),
1812
1812
  description: m("devportal.noDelegationsDescription", "Grant a delegation to allow this app to act on your behalf"),
1813
- action: /* @__PURE__ */ U("button", {
1813
+ action: /* @__PURE__ */ K("button", {
1814
1814
  onClick: i,
1815
1815
  className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90",
1816
- children: [/* @__PURE__ */ H(be, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
1816
+ children: [/* @__PURE__ */ G(H, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
1817
1817
  })
1818
1818
  })
1819
1819
  ]
1820
1820
  });
1821
1821
  }, Xe = ({ analytics: e }) => {
1822
- let { t } = P(), n = (e, n) => {
1822
+ let { t } = F(), n = (e, n) => {
1823
1823
  let r = t(e);
1824
1824
  return r === e ? n : r;
1825
1825
  }, i = e[0], a = e[1], o = (e, t) => t ? (e - t) / t * 100 : 0;
1826
- return /* @__PURE__ */ U("div", {
1826
+ return /* @__PURE__ */ K("div", {
1827
1827
  className: "space-y-6",
1828
- children: [/* @__PURE__ */ U("div", {
1828
+ children: [/* @__PURE__ */ K("div", {
1829
1829
  className: "grid gap-4 sm:grid-cols-4",
1830
1830
  children: [
1831
- /* @__PURE__ */ H(Q, {
1831
+ /* @__PURE__ */ G(Q, {
1832
1832
  label: n("devportal.activeUsers", "Active Users"),
1833
1833
  value: i?.activeUsers.toLocaleString() || "0",
1834
1834
  trend: a ? o(i.activeUsers, a.activeUsers) : void 0
1835
1835
  }),
1836
- /* @__PURE__ */ H(Q, {
1836
+ /* @__PURE__ */ G(Q, {
1837
1837
  label: n("devportal.apiCalls", "API Calls"),
1838
1838
  value: i ? `${(i.apiCalls / 1e3).toFixed(1)}K` : "0",
1839
1839
  trend: a ? o(i.apiCalls, a.apiCalls) : void 0
1840
1840
  }),
1841
- /* @__PURE__ */ H(Q, {
1841
+ /* @__PURE__ */ G(Q, {
1842
1842
  label: n("devportal.avgResponseTime", "Avg Response Time"),
1843
1843
  value: i?.avgResponseTime ? `${i.avgResponseTime}ms` : n("devportal.notAvailable", "N/A"),
1844
1844
  trend: a && i?.avgResponseTime ? -o(i.avgResponseTime, a.avgResponseTime || 1) : void 0
1845
1845
  }),
1846
- /* @__PURE__ */ H(Q, {
1846
+ /* @__PURE__ */ G(Q, {
1847
1847
  label: n("devportal.errorRate", "Error Rate"),
1848
1848
  value: i && i.apiCalls > 0 ? `${(i.errors / i.apiCalls * 100).toFixed(2)}%` : "0%",
1849
1849
  trend: a && i && i.apiCalls > 0 && a.apiCalls > 0 ? -o(i.errors / i.apiCalls, a.errors / a.apiCalls) : void 0
1850
1850
  })
1851
1851
  ]
1852
- }), /* @__PURE__ */ H(y, {
1852
+ }), /* @__PURE__ */ G(y, {
1853
1853
  title: n("devportal.dailyBreakdown", "Daily Breakdown"),
1854
- children: e.length > 0 ? /* @__PURE__ */ H(E, {
1854
+ children: e.length > 0 ? /* @__PURE__ */ G(E, {
1855
1855
  data: e,
1856
1856
  keyField: "id",
1857
1857
  columns: [
@@ -1891,19 +1891,19 @@ var Re = [
1891
1891
  render: (e) => e.sessions.toLocaleString()
1892
1892
  }
1893
1893
  ]
1894
- }) : /* @__PURE__ */ H(r, {
1894
+ }) : /* @__PURE__ */ G(r, {
1895
1895
  illustration: "empty-data",
1896
- icon: /* @__PURE__ */ H(F, { size: 32 }),
1896
+ icon: /* @__PURE__ */ G(I, { size: 32 }),
1897
1897
  title: n("devportal.noAnalyticsData", "No analytics data"),
1898
1898
  description: n("devportal.noAnalyticsDataDescription", "Analytics data will appear here once the application starts receiving traffic.")
1899
1899
  })
1900
1900
  })]
1901
1901
  });
1902
1902
  }, Ze = "# Sample query - modify as needed\nquery IntrospectSchema {\n __schema {\n queryType { name }\n mutationType { name }\n types {\n name\n kind\n }\n }\n}", Qe = ({ app: t }) => {
1903
- let { apiGatewayUrl: n, workspacesGatewayUrl: r, authToken: i } = e(), { t: a } = P(), o = (e, t) => {
1903
+ let { apiGatewayUrl: n, workspacesGatewayUrl: r, authToken: i } = e(), { t: a } = F(), o = (e, t) => {
1904
1904
  let n = a(e);
1905
1905
  return n === e ? t : n;
1906
- }, [s, c] = N(Ze), [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 = j(async () => {
1906
+ }, [s, c] = P(Ze), [l, u] = P("{}"), [d, f] = P(""), [p, m] = P(!1), [h, g] = P(`${n || "https://gw-global.local.burdenoff.com"}/global/graphql`), [_, v] = P(i || ""), [y, b] = P(!1), x = j(async () => {
1907
1907
  m(!0), f("");
1908
1908
  try {
1909
1909
  let e = {};
@@ -1937,21 +1937,21 @@ var Re = [
1937
1937
  ]), S = j(() => {
1938
1938
  i && v(i), b(!0);
1939
1939
  }, [i]);
1940
- return /* @__PURE__ */ U("div", {
1940
+ return /* @__PURE__ */ K("div", {
1941
1941
  className: "space-y-4",
1942
1942
  children: [
1943
- /* @__PURE__ */ U("div", {
1943
+ /* @__PURE__ */ K("div", {
1944
1944
  className: "flex items-center justify-between",
1945
- children: [/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("h3", {
1945
+ children: [/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("h3", {
1946
1946
  className: "text-lg font-semibold",
1947
1947
  children: o("devportal.apiPlayground", "API Playground")
1948
- }), /* @__PURE__ */ U("p", {
1948
+ }), /* @__PURE__ */ K("p", {
1949
1949
  className: "text-sm text-text-secondary",
1950
1950
  children: [
1951
1951
  o("devportal.apiPlaygroundDescription", "Test GraphQL APIs in the context of"),
1952
1952
  " ",
1953
- /* @__PURE__ */ H("strong", { children: t.name }),
1954
- t.appId && /* @__PURE__ */ U("span", {
1953
+ /* @__PURE__ */ G("strong", { children: t.name }),
1954
+ t.appId && /* @__PURE__ */ K("span", {
1955
1955
  className: "ml-1 text-xs text-text-secondary",
1956
1956
  children: [
1957
1957
  "(OAuth App: ",
@@ -1960,39 +1960,39 @@ var Re = [
1960
1960
  ]
1961
1961
  })
1962
1962
  ]
1963
- })] }), /* @__PURE__ */ U("button", {
1963
+ })] }), /* @__PURE__ */ K("button", {
1964
1964
  onClick: S,
1965
1965
  className: "flex items-center gap-2 rounded-md border px-3 py-1.5 text-sm font-medium hover:bg-accent transition-colors",
1966
- children: [/* @__PURE__ */ H(_e, { size: 14 }), o("devportal.autoFillCredentials", "Auto-fill Credentials")]
1966
+ children: [/* @__PURE__ */ G(B, { size: 14 }), o("devportal.autoFillCredentials", "Auto-fill Credentials")]
1967
1967
  })]
1968
1968
  }),
1969
- y && /* @__PURE__ */ U("div", {
1969
+ y && /* @__PURE__ */ K("div", {
1970
1970
  className: "rounded-lg border bg-status-info-bg-subtle p-4 text-sm space-y-2",
1971
1971
  children: [
1972
- /* @__PURE__ */ H("p", {
1972
+ /* @__PURE__ */ G("p", {
1973
1973
  className: "font-medium text-status-info-text",
1974
1974
  children: o("devportal.authenticationGuide", "Authentication Guide")
1975
1975
  }),
1976
- /* @__PURE__ */ U("p", {
1976
+ /* @__PURE__ */ K("p", {
1977
1977
  className: "text-status-info-text",
1978
1978
  children: [
1979
1979
  o("devportal.authenticationGuideText", "Your current session token has been filled in. For app-level authentication (Client Credentials flow), use the"),
1980
1980
  " ",
1981
- /* @__PURE__ */ H("strong", { children: o("devportal.oauthClientsTab", "OAuth Clients") }),
1981
+ /* @__PURE__ */ G("strong", { children: o("devportal.oauthClientsTab", "OAuth Clients") }),
1982
1982
  " ",
1983
1983
  o("devportal.authenticationGuideText2", "tab to get the app's clientId and clientSecret, then call:")
1984
1984
  ]
1985
1985
  }),
1986
- /* @__PURE__ */ H("pre", {
1986
+ /* @__PURE__ */ G("pre", {
1987
1987
  className: "rounded bg-status-info-bg-subtle p-2 text-xs overflow-x-auto text-status-info-text",
1988
1988
  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}"
1989
1989
  }),
1990
- /* @__PURE__ */ U("p", {
1990
+ /* @__PURE__ */ K("p", {
1991
1991
  className: "text-status-info-text",
1992
1992
  children: [
1993
1993
  o("devportal.useReturnedAccessToken", "Use the returned"),
1994
1994
  " ",
1995
- /* @__PURE__ */ H("code", {
1995
+ /* @__PURE__ */ G("code", {
1996
1996
  className: "bg-status-info-bg-subtle px-1 rounded",
1997
1997
  children: "accessToken"
1998
1998
  }),
@@ -2000,160 +2000,163 @@ var Re = [
2000
2000
  o("devportal.asBearerToken", "as the Bearer token below.")
2001
2001
  ]
2002
2002
  }),
2003
- /* @__PURE__ */ H("button", {
2003
+ /* @__PURE__ */ G("button", {
2004
2004
  onClick: () => b(!1),
2005
2005
  className: "text-xs text-accent-blue hover:underline",
2006
2006
  children: o("devportal.dismiss", "Dismiss")
2007
2007
  })
2008
2008
  ]
2009
2009
  }),
2010
- /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("label", {
2010
+ /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
2011
2011
  className: "block text-sm font-medium mb-1",
2012
2012
  children: o("devportal.gatewayEndpoint", "Gateway Endpoint")
2013
- }), /* @__PURE__ */ U("div", {
2013
+ }), /* @__PURE__ */ K("div", {
2014
2014
  className: "flex gap-2",
2015
- children: [/* @__PURE__ */ H("input", {
2015
+ children: [/* @__PURE__ */ G("input", {
2016
2016
  type: "text",
2017
2017
  value: h,
2018
2018
  onChange: (e) => g(e.target.value),
2019
2019
  className: "flex-1 rounded-md border px-3 py-2 text-sm font-mono bg-bg-surface"
2020
- }), /* @__PURE__ */ U("select", {
2020
+ }), /* @__PURE__ */ K("select", {
2021
2021
  onChange: (e) => g(e.target.value),
2022
2022
  className: "rounded-md border px-3 py-2 text-sm bg-bg-surface",
2023
2023
  value: h,
2024
- children: [/* @__PURE__ */ H("option", {
2024
+ children: [/* @__PURE__ */ G("option", {
2025
2025
  value: `${n || "https://gw-global.local.burdenoff.com"}/global/graphql`,
2026
2026
  children: o("devportal.globalGateway", "Global Gateway")
2027
- }), /* @__PURE__ */ H("option", {
2027
+ }), /* @__PURE__ */ G("option", {
2028
2028
  value: `${r || "https://gw-wspace.local.burdenoff.com"}/workspaces/graphql`,
2029
2029
  children: o("devportal.workspaceGateway", "Workspace Gateway")
2030
2030
  })]
2031
2031
  })]
2032
2032
  })] }),
2033
- /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("label", {
2033
+ /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
2034
2034
  className: "block text-sm font-medium mb-1",
2035
2035
  children: o("devportal.bearerToken", "Bearer Token")
2036
- }), /* @__PURE__ */ H("input", {
2036
+ }), /* @__PURE__ */ G("input", {
2037
2037
  type: "password",
2038
2038
  value: _,
2039
2039
  onChange: (e) => v(e.target.value),
2040
2040
  placeholder: o("devportal.pasteAccessToken", "Paste access token here..."),
2041
2041
  className: "w-full rounded-md border px-3 py-2 text-sm font-mono bg-bg-surface"
2042
2042
  })] }),
2043
- /* @__PURE__ */ U("div", {
2043
+ /* @__PURE__ */ K("div", {
2044
2044
  className: "grid grid-cols-1 lg:grid-cols-2 gap-4",
2045
- children: [/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("label", {
2045
+ children: [/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
2046
2046
  className: "block text-sm font-medium mb-1",
2047
2047
  children: o("devportal.query", "Query")
2048
- }), /* @__PURE__ */ H("textarea", {
2048
+ }), /* @__PURE__ */ G("textarea", {
2049
2049
  value: s,
2050
2050
  onChange: (e) => c(e.target.value),
2051
2051
  className: "w-full h-64 rounded-md border px-3 py-2 text-sm font-mono bg-bg-surface resize-y",
2052
2052
  spellCheck: !1
2053
- })] }), /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("label", {
2053
+ })] }), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
2054
2054
  className: "block text-sm font-medium mb-1",
2055
2055
  children: o("devportal.variablesJson", "Variables (JSON)")
2056
- }), /* @__PURE__ */ H("textarea", {
2056
+ }), /* @__PURE__ */ G("textarea", {
2057
2057
  value: l,
2058
2058
  onChange: (e) => u(e.target.value),
2059
2059
  className: "w-full h-64 rounded-md border px-3 py-2 text-sm font-mono bg-bg-surface resize-y",
2060
2060
  spellCheck: !1
2061
2061
  })] })]
2062
2062
  }),
2063
- /* @__PURE__ */ U("button", {
2063
+ /* @__PURE__ */ K("button", {
2064
2064
  onClick: x,
2065
2065
  disabled: p,
2066
2066
  className: "flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors disabled:opacity-50",
2067
- children: [p ? /* @__PURE__ */ H(z, {
2067
+ children: [p ? /* @__PURE__ */ G(V, {
2068
2068
  size: 16,
2069
2069
  className: "animate-spin"
2070
- }) : /* @__PURE__ */ H(R, { size: 16 }), p ? o("devportal.executing", "Executing...") : o("devportal.executeQuery", "Execute Query")]
2070
+ }) : /* @__PURE__ */ G(z, { size: 16 }), p ? o("devportal.executing", "Executing...") : o("devportal.executeQuery", "Execute Query")]
2071
2071
  }),
2072
- d && /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("label", {
2072
+ d && /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
2073
2073
  className: "block text-sm font-medium mb-1",
2074
2074
  children: o("devportal.response", "Response")
2075
- }), /* @__PURE__ */ H("pre", {
2075
+ }), /* @__PURE__ */ G("pre", {
2076
2076
  className: "w-full max-h-96 overflow-auto rounded-md border bg-bg-sunken p-4 text-xs font-mono",
2077
2077
  children: d
2078
2078
  })] })
2079
2079
  ]
2080
2080
  });
2081
2081
  }, $e = ({ 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 }) => {
2082
- let d = se(null), f = j(async (e) => {
2082
+ let d = N(null), [f, p] = P(!1), m = N(n);
2083
+ m.current !== n && (m.current = n, f && p(!1));
2084
+ let h = j(async (e) => {
2083
2085
  try {
2084
2086
  r((await s(e)).downloadUrl);
2085
2087
  } catch {}
2086
2088
  }, [s, r]);
2087
- return /* @__PURE__ */ U("div", {
2089
+ return /* @__PURE__ */ K("div", {
2088
2090
  className: "space-y-1.5",
2089
2091
  children: [
2090
- /* @__PURE__ */ H("label", {
2092
+ /* @__PURE__ */ G("label", {
2091
2093
  className: "text-sm font-medium",
2092
2094
  children: e
2093
2095
  }),
2094
- /* @__PURE__ */ U("div", {
2096
+ /* @__PURE__ */ K("div", {
2095
2097
  className: "flex gap-3 items-start",
2096
- children: [/* @__PURE__ */ U("div", {
2098
+ children: [/* @__PURE__ */ K("div", {
2097
2099
  className: t("relative shrink-0 w-20 rounded-lg border border-border-subtle bg-bg-sunken overflow-hidden flex items-center justify-center", o),
2098
- children: [n ? /* @__PURE__ */ H("img", {
2100
+ children: [n && !f ? /* @__PURE__ */ G("img", {
2099
2101
  src: n,
2100
2102
  alt: e,
2101
- className: "w-full h-full object-cover"
2102
- }) : /* @__PURE__ */ H(B, {
2103
+ className: "w-full h-full object-cover",
2104
+ onError: () => p(!0)
2105
+ }) : /* @__PURE__ */ G(U, {
2103
2106
  size: 18,
2104
2107
  className: "text-text-secondary opacity-40"
2105
- }), c && /* @__PURE__ */ U("div", {
2108
+ }), c && /* @__PURE__ */ K("div", {
2106
2109
  className: "absolute inset-0 bg-bg-overlay flex flex-col items-center justify-center gap-1",
2107
- children: [/* @__PURE__ */ H(z, {
2110
+ children: [/* @__PURE__ */ G(V, {
2108
2111
  size: 14,
2109
2112
  className: "animate-spin text-white"
2110
- }), /* @__PURE__ */ U("span", {
2113
+ }), /* @__PURE__ */ K("span", {
2111
2114
  className: "text-white text-xs",
2112
2115
  children: [l, "%"]
2113
2116
  })]
2114
2117
  })]
2115
- }), /* @__PURE__ */ U("div", {
2118
+ }), /* @__PURE__ */ K("div", {
2116
2119
  className: "flex-1 space-y-1.5",
2117
2120
  children: [
2118
- /* @__PURE__ */ H("input", {
2121
+ /* @__PURE__ */ G("input", {
2119
2122
  type: "url",
2120
2123
  value: n,
2121
2124
  onChange: (e) => r(e.target.value),
2122
2125
  placeholder: "https://...",
2123
2126
  className: "w-full rounded-md border border-border-subtle bg-bg-input px-3 py-1.5 text-sm placeholder:text-text-placeholder focus:outline-none focus:ring-2 focus:ring-primary/30"
2124
2127
  }),
2125
- /* @__PURE__ */ H("input", {
2128
+ /* @__PURE__ */ G("input", {
2126
2129
  ref: d,
2127
2130
  type: "file",
2128
2131
  accept: a,
2129
2132
  className: "hidden",
2130
2133
  onChange: (e) => {
2131
2134
  let t = e.target.files?.[0];
2132
- t && f(t), e.target.value = "";
2135
+ t && h(t), e.target.value = "";
2133
2136
  }
2134
2137
  }),
2135
- /* @__PURE__ */ U("button", {
2138
+ /* @__PURE__ */ K("button", {
2136
2139
  type: "button",
2137
2140
  disabled: c,
2138
2141
  onClick: () => d.current?.click(),
2139
2142
  className: "inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs font-medium hover:bg-bg-sunken transition-colors disabled:opacity-50",
2140
- children: [/* @__PURE__ */ H(B, { size: 11 }), c ? `Uploading… ${l}%` : "Upload image"]
2143
+ children: [/* @__PURE__ */ G(U, { size: 11 }), c ? `Uploading… ${l}%` : "Upload image"]
2141
2144
  }),
2142
- u && /* @__PURE__ */ H("p", {
2145
+ u && /* @__PURE__ */ G("p", {
2143
2146
  className: "text-xs text-status-error-text",
2144
2147
  children: u
2145
2148
  })
2146
2149
  ]
2147
2150
  })]
2148
2151
  }),
2149
- i && /* @__PURE__ */ H("p", {
2152
+ i && /* @__PURE__ */ G("p", {
2150
2153
  className: "text-xs text-text-secondary",
2151
2154
  children: i
2152
2155
  })
2153
2156
  ]
2154
2157
  });
2155
2158
  }, X = ({ urls: e, onChange: n, upload: r, uploading: i, progress: a, error: o }) => {
2156
- let s = se(null), c = j(async (t) => {
2159
+ let s = N(null), [c, l] = P(""), u = j(async (t) => {
2157
2160
  try {
2158
2161
  let i = await r(t);
2159
2162
  n([...e, i.downloadUrl]);
@@ -2162,64 +2165,86 @@ var Re = [
2162
2165
  r,
2163
2166
  n,
2164
2167
  e
2165
- ]), l = (t) => {
2168
+ ]), d = () => {
2169
+ let t = c.trim();
2170
+ t && !e.includes(t) && (n([...e, t]), l(""));
2171
+ }, f = (t) => {
2166
2172
  n(e.filter((e, n) => n !== t));
2167
2173
  };
2168
- return /* @__PURE__ */ U("div", {
2174
+ return /* @__PURE__ */ K("div", {
2169
2175
  className: "space-y-2",
2170
2176
  children: [
2171
- /* @__PURE__ */ U("div", {
2177
+ /* @__PURE__ */ K("div", {
2172
2178
  className: "flex flex-col gap-0.5",
2173
- children: [/* @__PURE__ */ H("label", {
2179
+ children: [/* @__PURE__ */ G("label", {
2174
2180
  className: "text-sm font-medium",
2175
2181
  children: "Screenshots"
2176
- }), /* @__PURE__ */ H("p", {
2182
+ }), /* @__PURE__ */ G("p", {
2177
2183
  className: "text-xs text-text-muted",
2178
2184
  children: "Shown in the horizontal preview strip below the hero — wide landscape proportions work best (16:9)"
2179
2185
  })]
2180
2186
  }),
2181
- /* @__PURE__ */ U("div", {
2187
+ /* @__PURE__ */ K("div", {
2182
2188
  className: "flex flex-wrap gap-3",
2183
- children: [e.map((e, t) => /* @__PURE__ */ U("div", {
2189
+ children: [e.map((e, t) => /* @__PURE__ */ K("div", {
2184
2190
  className: "relative group w-36 aspect-video rounded-lg border border-border-subtle overflow-hidden bg-bg-sunken",
2185
- children: [/* @__PURE__ */ H("img", {
2191
+ children: [/* @__PURE__ */ G("img", {
2186
2192
  src: e,
2187
2193
  alt: `Screenshot ${t + 1}`,
2188
2194
  className: "w-full h-full object-cover"
2189
- }), /* @__PURE__ */ H("button", {
2195
+ }), /* @__PURE__ */ G("button", {
2190
2196
  type: "button",
2191
- onClick: () => l(t),
2197
+ onClick: () => f(t),
2192
2198
  className: "absolute top-1 right-1 rounded-full bg-bg-overlay text-white p-0.5 opacity-0 group-hover:opacity-100 transition-opacity",
2193
- children: /* @__PURE__ */ H(Ae, { size: 12 })
2199
+ children: /* @__PURE__ */ G(De, { size: 12 })
2194
2200
  })]
2195
- }, t)), /* @__PURE__ */ H("button", {
2201
+ }, t)), /* @__PURE__ */ G("button", {
2196
2202
  type: "button",
2197
2203
  disabled: i,
2198
2204
  onClick: () => s.current?.click(),
2199
2205
  className: t("w-36 aspect-video rounded-lg border-2 border-dashed border-border-subtle flex flex-col items-center justify-center gap-1.5 text-text-secondary hover:border-border-strong hover:bg-bg-sunken transition-colors disabled:opacity-50"),
2200
- children: i ? /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(z, {
2206
+ children: i ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(V, {
2201
2207
  size: 18,
2202
2208
  className: "animate-spin text-primary"
2203
- }), /* @__PURE__ */ U("span", {
2209
+ }), /* @__PURE__ */ K("span", {
2204
2210
  className: "text-xs",
2205
2211
  children: [a, "%"]
2206
- })] }) : /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(B, { size: 18 }), /* @__PURE__ */ H("span", {
2212
+ })] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(U, { size: 18 }), /* @__PURE__ */ G("span", {
2207
2213
  className: "text-xs",
2208
2214
  children: "Add screenshot"
2209
2215
  })] })
2210
2216
  })]
2211
2217
  }),
2212
- /* @__PURE__ */ H("input", {
2218
+ /* @__PURE__ */ K("div", {
2219
+ className: "flex gap-2",
2220
+ children: [/* @__PURE__ */ G("input", {
2221
+ type: "url",
2222
+ value: c,
2223
+ onChange: (e) => l(e.target.value),
2224
+ onKeyDown: (e) => {
2225
+ e.key === "Enter" && (e.preventDefault(), d());
2226
+ },
2227
+ placeholder: "https://... paste a screenshot URL",
2228
+ className: "flex-1 rounded-md border border-border-subtle bg-bg-input px-3 py-1.5 text-sm placeholder:text-text-placeholder focus:outline-none focus:ring-2 focus:ring-primary/30"
2229
+ }), /* @__PURE__ */ G("button", {
2230
+ type: "button",
2231
+ onClick: d,
2232
+ disabled: !c.trim(),
2233
+ className: "inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1.5 text-xs font-medium hover:bg-bg-sunken transition-colors disabled:opacity-50",
2234
+ children: "Add"
2235
+ })]
2236
+ }),
2237
+ /* @__PURE__ */ G("input", {
2213
2238
  ref: s,
2214
2239
  type: "file",
2215
2240
  accept: "image/png,image/jpeg,image/webp,image/gif",
2216
2241
  className: "hidden",
2217
2242
  onChange: (e) => {
2218
2243
  let t = e.target.files?.[0];
2219
- t && c(t), e.target.value = "";
2244
+ t && u(t), e.target.value = "";
2220
2245
  }
2221
2246
  }),
2222
- o && /* @__PURE__ */ H("p", {
2247
+ o && /* @__PURE__ */ G("p", {
2223
2248
  className: "text-xs text-status-error-text",
2224
2249
  children: o
2225
2250
  })
@@ -2335,22 +2360,22 @@ function rt(e) {
2335
2360
  };
2336
2361
  }
2337
2362
  var it = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i = !1, onNavigateToVersions: a, onNavigateToPricing: o, onNavigateToSubmission: s }) => {
2338
- let { workspacesGatewayUrl: c, authToken: l, workspaceId: u, getWorkspaceToken: d } = e(), { t: f } = P(), p = (e, t) => {
2363
+ let { workspacesGatewayUrl: c, authToken: l, workspaceId: u, getWorkspaceToken: d } = e(), { t: f } = F(), p = (e, t) => {
2339
2364
  let n = f(e);
2340
2365
  return n === e ? t : n;
2341
- }, [m, h] = N(() => rt(t)), [g, v] = N(!1), b = se(t);
2342
- b.current = t;
2343
- let [x] = _();
2366
+ }, [m, h] = P(() => rt(t)), [g, v] = P(!1), [b, x] = P(!1), [S, C] = P(null), w = N(t);
2367
+ w.current = t;
2368
+ let [ee] = _();
2344
2369
  oe(() => {
2345
- h(rt(b.current));
2370
+ h(rt(w.current)), C(null), x(!1);
2346
2371
  }, [t.id]);
2347
- let S = (e, t) => {
2372
+ let E = (e, t) => {
2348
2373
  h((n) => ({
2349
2374
  ...n,
2350
2375
  [e]: t
2351
- }));
2352
- }, C = async () => {
2353
- v(!0);
2376
+ })), C(null), x(!1);
2377
+ }, D = m.shortDescription.trim().length > 0 && m.privacyPolicyUrl.trim().length > 0 && m.termsOfServiceUrl.trim().length > 0, ne = async () => {
2378
+ v(!0), C(null);
2354
2379
  try {
2355
2380
  let e = m.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean), n = m.manifestPermissionsText.split("\n").map((e) => e.trim()).filter(Boolean), r = Z.has(m.manifestItemType), i = t.manifest ?? {}, a = {
2356
2381
  manifestVersion: typeof i.manifestVersion == "string" ? i.manifestVersion : "1.0",
@@ -2366,7 +2391,7 @@ var it = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2366
2391
  permissions: n,
2367
2392
  compatibility: { minPlatformVersion: m.manifestMinPlatformVersion }
2368
2393
  };
2369
- await x({ variables: {
2394
+ await ee({ variables: {
2370
2395
  id: t.id,
2371
2396
  input: {
2372
2397
  iconUrl: m.iconUrl || null,
@@ -2383,27 +2408,27 @@ var it = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2383
2408
  termsOfServiceUrl: m.termsOfServiceUrl || null,
2384
2409
  manifest: a
2385
2410
  }
2386
- } }), T("success");
2411
+ } }), T("success"), C("success"), x(!0);
2387
2412
  } catch {
2388
- T("error");
2413
+ T("error"), C("error");
2389
2414
  } finally {
2390
2415
  v(!1);
2391
2416
  }
2392
- }, { upload: w, uploading: ee, progress: E, error: D } = A(c, l, u, d, "/DevPortal/Assets"), { upload: ne, uploading: re, progress: ie, error: ae } = A(c, l, u, d, "/DevPortal/Assets"), { upload: j, uploading: M, progress: le, error: F } = A(c, l, u, d, "/DevPortal/Assets"), I = Z.has(m.manifestItemType), L = t.status === "SUBMITTED";
2393
- return /* @__PURE__ */ U("div", {
2417
+ }, { upload: re, uploading: ie, progress: ae, error: j } = A(c, l, u, d, "/DevPortal/Assets"), { upload: M, uploading: ce, progress: I, error: R } = A(c, l, u, d, "/DevPortal/Assets"), { upload: fe, uploading: pe, progress: me, error: he } = A(c, l, u, d, "/DevPortal/Assets"), B = Z.has(m.manifestItemType), ge = t.status === "SUBMITTED";
2418
+ return /* @__PURE__ */ K("div", {
2394
2419
  className: "space-y-8 max-w-3xl",
2395
2420
  children: [
2396
- t.status === "PUBLISHED" ? /* @__PURE__ */ U("div", {
2421
+ t.status === "PUBLISHED" ? /* @__PURE__ */ K("div", {
2397
2422
  className: "flex items-start gap-3 rounded-lg border border-success/30 bg-success/10 px-4 py-3",
2398
- children: [/* @__PURE__ */ H(ue, {
2423
+ children: [/* @__PURE__ */ G(le, {
2399
2424
  size: 16,
2400
2425
  className: "text-success mt-0.5 shrink-0"
2401
- }), /* @__PURE__ */ U("div", {
2426
+ }), /* @__PURE__ */ K("div", {
2402
2427
  className: "text-sm",
2403
- children: [/* @__PURE__ */ H("span", {
2428
+ children: [/* @__PURE__ */ G("span", {
2404
2429
  className: "font-medium text-success",
2405
2430
  children: p("devportal.storeListing.published", "Published")
2406
- }), t.publishedAt && /* @__PURE__ */ U("span", {
2431
+ }), t.publishedAt && /* @__PURE__ */ K("span", {
2407
2432
  className: "text-text-secondary ml-2",
2408
2433
  children: [
2409
2434
  p("devportal.storeListing.since", "since"),
@@ -2412,249 +2437,273 @@ var it = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2412
2437
  ]
2413
2438
  })]
2414
2439
  })]
2415
- }) : L ? /* @__PURE__ */ U("div", {
2440
+ }) : ge ? /* @__PURE__ */ K("div", {
2416
2441
  className: "flex items-center justify-between gap-3 rounded-lg border border-primary/30 bg-action-primary-bg/5 px-4 py-3",
2417
- children: [/* @__PURE__ */ U("div", {
2442
+ children: [/* @__PURE__ */ K("div", {
2418
2443
  className: "flex items-start gap-3",
2419
- children: [/* @__PURE__ */ H(fe, {
2444
+ children: [/* @__PURE__ */ G(de, {
2420
2445
  size: 16,
2421
2446
  className: "text-primary mt-0.5 shrink-0"
2422
- }), /* @__PURE__ */ U("div", {
2447
+ }), /* @__PURE__ */ K("div", {
2423
2448
  className: "text-sm",
2424
2449
  children: [
2425
- /* @__PURE__ */ H("span", {
2450
+ /* @__PURE__ */ G("span", {
2426
2451
  className: "font-medium text-primary",
2427
2452
  children: p("devportal.storeListing.underReview", "Submitted for review")
2428
2453
  }),
2429
- t.submittedAt && /* @__PURE__ */ H("span", {
2454
+ t.submittedAt && /* @__PURE__ */ G("span", {
2430
2455
  className: "text-text-secondary ml-2",
2431
2456
  children: new Date(t.submittedAt).toLocaleDateString()
2432
2457
  }),
2433
- t.reviewStatus && /* @__PURE__ */ U("span", {
2458
+ t.reviewStatus && /* @__PURE__ */ K("span", {
2434
2459
  className: "text-text-secondary ml-2",
2435
2460
  children: ["· ", t.reviewStatus]
2436
2461
  })
2437
2462
  ]
2438
2463
  })]
2439
- }), s && /* @__PURE__ */ U("button", {
2464
+ }), s && /* @__PURE__ */ K("button", {
2440
2465
  type: "button",
2441
2466
  onClick: s,
2442
2467
  className: "shrink-0 text-xs text-primary hover:underline font-medium flex items-center gap-1",
2443
- children: [p("devportal.viewStatus", "View Status"), /* @__PURE__ */ H(R, { size: 12 })]
2468
+ children: [p("devportal.viewStatus", "View Status"), /* @__PURE__ */ G(z, { size: 12 })]
2444
2469
  })]
2445
- }) : /* @__PURE__ */ U("div", {
2470
+ }) : /* @__PURE__ */ K("div", {
2446
2471
  className: "flex items-start gap-3 rounded-lg border border-warning/30 bg-warning/5 px-4 py-3",
2447
- children: [/* @__PURE__ */ H(ce, {
2472
+ children: [/* @__PURE__ */ G(se, {
2448
2473
  size: 16,
2449
2474
  className: "text-warning mt-0.5 shrink-0"
2450
- }), /* @__PURE__ */ U("div", {
2475
+ }), /* @__PURE__ */ K("div", {
2451
2476
  className: "text-sm",
2452
- children: [/* @__PURE__ */ H("span", {
2477
+ children: [/* @__PURE__ */ G("span", {
2453
2478
  className: "font-medium text-warning",
2454
2479
  children: p("devportal.storeListing.draft", "Draft")
2455
- }), /* @__PURE__ */ H("span", {
2480
+ }), /* @__PURE__ */ G("span", {
2456
2481
  className: "text-text-secondary ml-2",
2457
2482
  children: p("devportal.storeListing.draftHint", "Complete your store listing and submit for review to publish.")
2458
2483
  })]
2459
2484
  })]
2460
2485
  }),
2461
- /* @__PURE__ */ H(y, {
2486
+ /* @__PURE__ */ G(y, {
2462
2487
  title: p("devportal.package", "Package"),
2463
2488
  description: p("devportal.packageDescription", "Technical configuration — how FluidGrid installs and runs this item"),
2464
- children: /* @__PURE__ */ U("div", {
2489
+ children: /* @__PURE__ */ K("div", {
2465
2490
  className: "space-y-6",
2466
2491
  children: [
2467
- /* @__PURE__ */ H(k, {
2492
+ /* @__PURE__ */ G(k, {
2468
2493
  label: p("devportal.storeItemType", "Item Type"),
2469
2494
  value: m.manifestItemType,
2470
2495
  onChange: (e) => {
2471
2496
  let t = e.target.value;
2472
- S("manifestItemType", t), Z.has(t) ? S("manifestInstallType", "json") : m.manifestInstallType === "json" && S("manifestInstallType", "zip");
2497
+ E("manifestItemType", t), Z.has(t) ? E("manifestInstallType", "json") : m.manifestInstallType === "json" && E("manifestInstallType", "zip");
2473
2498
  },
2474
2499
  options: tt[t.appType] ?? tt.APP,
2475
2500
  placeholder: p("devportal.selectItemType", "Select item type…"),
2476
2501
  hint: p("devportal.storeItemTypeHint", "Sub-category shown in the marketplace (e.g. Node vs Agent vs Parser)")
2477
2502
  }),
2478
- /* @__PURE__ */ H(O, {
2503
+ /* @__PURE__ */ G(O, {
2479
2504
  label: p("devportal.manifestDisplayName", "Display Name"),
2480
2505
  value: m.manifestDisplayName,
2481
- onChange: (e) => S("manifestDisplayName", e.target.value),
2506
+ onChange: (e) => E("manifestDisplayName", e.target.value),
2482
2507
  placeholder: "My Awesome Node"
2483
2508
  }),
2484
- I && t.appType !== "WORKFLOW" && /* @__PURE__ */ H(te, {
2509
+ B && t.appType !== "WORKFLOW" && /* @__PURE__ */ G(te, {
2485
2510
  label: p("devportal.jsonContent", "Template Definition (JSON)"),
2486
2511
  value: m.manifestJsonContent,
2487
- onChange: (e) => S("manifestJsonContent", e.target.value),
2512
+ onChange: (e) => E("manifestJsonContent", e.target.value),
2488
2513
  rows: 12,
2489
2514
  placeholder: "{\n \"nodes\": [],\n \"edges\": []\n}",
2490
2515
  hint: p("devportal.jsonContentHint", "Paste the full JSON definition. Stored and applied directly — no zip needed.")
2491
2516
  }),
2492
- I && t.appType === "WORKFLOW" && /* @__PURE__ */ U("p", {
2517
+ B && t.appType === "WORKFLOW" && /* @__PURE__ */ K("p", {
2493
2518
  className: "text-sm text-text-secondary rounded-md bg-bg-sunken px-3 py-2",
2494
2519
  children: [
2495
2520
  "The Workflow Definition (JSON) is set per version. Go to the",
2496
2521
  " ",
2497
- /* @__PURE__ */ H("strong", { children: "Versions" }),
2522
+ /* @__PURE__ */ G("strong", { children: "Versions" }),
2498
2523
  " tab to add or update it."
2499
2524
  ]
2500
2525
  })
2501
2526
  ]
2502
2527
  })
2503
2528
  }),
2504
- /* @__PURE__ */ H(y, {
2529
+ /* @__PURE__ */ G(y, {
2505
2530
  title: p("devportal.storePresentation", "Store Presence"),
2506
2531
  description: p("devportal.storePresentationDescription", "Visual assets and copy shown to users browsing the marketplace"),
2507
- children: /* @__PURE__ */ U("div", {
2532
+ children: /* @__PURE__ */ K("div", {
2508
2533
  className: "space-y-5",
2509
2534
  children: [
2510
- /* @__PURE__ */ U("div", {
2535
+ /* @__PURE__ */ K("div", {
2511
2536
  className: "grid gap-5 sm:grid-cols-2",
2512
- children: [/* @__PURE__ */ H($e, {
2537
+ children: [/* @__PURE__ */ G($e, {
2513
2538
  label: p("devportal.iconUrl", "Icon"),
2514
2539
  value: m.iconUrl,
2515
- onChange: (e) => S("iconUrl", e),
2540
+ onChange: (e) => E("iconUrl", e),
2516
2541
  hint: p("devportal.iconUrlHint", "Shown in marketplace cards and search — square proportions (1:1)"),
2517
2542
  aspectClass: "aspect-square",
2518
- upload: w,
2519
- uploading: ee,
2520
- progress: E,
2521
- error: D
2522
- }), /* @__PURE__ */ H($e, {
2543
+ upload: re,
2544
+ uploading: ie,
2545
+ progress: ae,
2546
+ error: j
2547
+ }), /* @__PURE__ */ G($e, {
2523
2548
  label: p("devportal.bannerUrl", "Banner"),
2524
2549
  value: m.bannerUrl,
2525
- onChange: (e) => S("bannerUrl", e),
2550
+ onChange: (e) => E("bannerUrl", e),
2526
2551
  hint: p("devportal.bannerUrlHint", "Fills the right panel on the product page — square or portrait works best on all screen sizes (1:1)"),
2527
2552
  aspectClass: "aspect-square",
2528
- upload: ne,
2529
- uploading: re,
2530
- progress: ie,
2531
- error: ae
2553
+ upload: M,
2554
+ uploading: ce,
2555
+ progress: I,
2556
+ error: R
2532
2557
  })]
2533
2558
  }),
2534
- /* @__PURE__ */ H(O, {
2559
+ /* @__PURE__ */ G(O, {
2535
2560
  label: p("devportal.videoUrl", "Demo Video URL"),
2536
2561
  value: m.videoUrl,
2537
- onChange: (e) => S("videoUrl", e.target.value),
2562
+ onChange: (e) => E("videoUrl", e.target.value),
2538
2563
  placeholder: "https://...",
2539
2564
  hint: p("devportal.videoUrlHint", "YouTube or Vimeo embed URL")
2540
2565
  }),
2541
- /* @__PURE__ */ H(te, {
2566
+ /* @__PURE__ */ G(te, {
2542
2567
  label: p("devportal.shortDescription", "Short Description"),
2543
2568
  value: m.shortDescription,
2544
- onChange: (e) => S("shortDescription", e.target.value),
2569
+ onChange: (e) => E("shortDescription", e.target.value),
2545
2570
  maxLength: 200,
2546
2571
  rows: 2,
2547
2572
  hint: `${m.shortDescription.length}/200 · ${p("devportal.shortDescHint", "Shown in search results and cards")}`
2548
2573
  }),
2549
- /* @__PURE__ */ H(te, {
2574
+ /* @__PURE__ */ G(te, {
2550
2575
  label: p("devportal.longDescription", "Full Description"),
2551
2576
  value: m.description,
2552
- onChange: (e) => S("description", e.target.value),
2577
+ onChange: (e) => E("description", e.target.value),
2553
2578
  rows: 5,
2554
2579
  hint: p("devportal.fullDescHint", "Markdown supported")
2555
2580
  }),
2556
- /* @__PURE__ */ H(X, {
2581
+ /* @__PURE__ */ G(X, {
2557
2582
  urls: m.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean),
2558
- onChange: (e) => S("screenshotsText", e.join("\n")),
2559
- upload: j,
2560
- uploading: M,
2561
- progress: le,
2562
- error: F
2583
+ onChange: (e) => E("screenshotsText", e.join("\n")),
2584
+ upload: fe,
2585
+ uploading: pe,
2586
+ progress: me,
2587
+ error: he
2563
2588
  })
2564
2589
  ]
2565
2590
  })
2566
2591
  }),
2567
- /* @__PURE__ */ H(y, {
2592
+ /* @__PURE__ */ G(y, {
2568
2593
  title: p("devportal.linksPolicies", "Links & Policies"),
2569
2594
  description: p("devportal.linksPoliciesDescription", "External resources and legal documents — privacy policy and terms are required for store submission"),
2570
- children: /* @__PURE__ */ U("div", {
2595
+ children: /* @__PURE__ */ K("div", {
2571
2596
  className: "grid gap-4 sm:grid-cols-2",
2572
2597
  children: [
2573
- /* @__PURE__ */ H(O, {
2598
+ /* @__PURE__ */ G(O, {
2574
2599
  label: p("devportal.websiteUrl", "Website"),
2575
2600
  value: m.websiteUrl,
2576
- onChange: (e) => S("websiteUrl", e.target.value),
2601
+ onChange: (e) => E("websiteUrl", e.target.value),
2577
2602
  placeholder: "https://..."
2578
2603
  }),
2579
- /* @__PURE__ */ H(O, {
2604
+ /* @__PURE__ */ G(O, {
2580
2605
  label: p("devportal.documentationUrl", "Documentation"),
2581
2606
  value: m.documentationUrl,
2582
- onChange: (e) => S("documentationUrl", e.target.value),
2607
+ onChange: (e) => E("documentationUrl", e.target.value),
2583
2608
  placeholder: "https://..."
2584
2609
  }),
2585
- /* @__PURE__ */ H(O, {
2610
+ /* @__PURE__ */ G(O, {
2586
2611
  label: p("devportal.githubUrl", "GitHub"),
2587
2612
  value: m.githubUrl,
2588
- onChange: (e) => S("githubUrl", e.target.value),
2613
+ onChange: (e) => E("githubUrl", e.target.value),
2589
2614
  placeholder: "https://github.com/..."
2590
2615
  }),
2591
- /* @__PURE__ */ H(O, {
2616
+ /* @__PURE__ */ G(O, {
2592
2617
  label: p("devportal.supportUrl", "Support"),
2593
2618
  value: m.supportUrl,
2594
- onChange: (e) => S("supportUrl", e.target.value),
2619
+ onChange: (e) => E("supportUrl", e.target.value),
2595
2620
  placeholder: "https://..."
2596
2621
  }),
2597
- /* @__PURE__ */ H(O, {
2622
+ /* @__PURE__ */ G(O, {
2598
2623
  label: `${p("devportal.privacyPolicyUrl", "Privacy Policy")} *`,
2599
2624
  value: m.privacyPolicyUrl,
2600
- onChange: (e) => S("privacyPolicyUrl", e.target.value),
2625
+ onChange: (e) => E("privacyPolicyUrl", e.target.value),
2601
2626
  placeholder: "https://...",
2602
2627
  hint: p("devportal.requiredForStore", "Required for store submission")
2603
2628
  }),
2604
- /* @__PURE__ */ H(O, {
2629
+ /* @__PURE__ */ G(O, {
2605
2630
  label: `${p("devportal.termsOfServiceUrl", "Terms of Service")} *`,
2606
2631
  value: m.termsOfServiceUrl,
2607
- onChange: (e) => S("termsOfServiceUrl", e.target.value),
2632
+ onChange: (e) => E("termsOfServiceUrl", e.target.value),
2608
2633
  placeholder: "https://...",
2609
2634
  hint: p("devportal.requiredForStore", "Required for store submission")
2610
2635
  })
2611
2636
  ]
2612
2637
  })
2613
2638
  }),
2614
- /* @__PURE__ */ U("div", {
2615
- className: "border-t pt-6 flex flex-wrap items-center gap-3",
2639
+ /* @__PURE__ */ K("div", {
2640
+ className: "border-t pt-6 space-y-3",
2616
2641
  children: [
2617
- /* @__PURE__ */ H("button", {
2618
- type: "button",
2619
- onClick: C,
2620
- disabled: g,
2621
- className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors disabled:opacity-50",
2622
- children: g ? /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(z, {
2623
- size: 16,
2624
- className: "animate-spin"
2625
- }), p("devportal.saving", "Saving…")] }) : /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(Te, { size: 16 }), p("devportal.saveStoreListing", "Save Store Listing")] })
2642
+ S === "success" && /* @__PURE__ */ K("div", {
2643
+ className: "flex items-center gap-2 rounded-md border border-success/30 bg-success/10 px-3 py-2 text-sm text-success",
2644
+ children: [/* @__PURE__ */ G(le, {
2645
+ size: 15,
2646
+ className: "shrink-0"
2647
+ }), p("devportal.storeListing.savedSuccess", "Store listing saved successfully.")]
2626
2648
  }),
2627
- r && n === 0 && a && /* @__PURE__ */ U("button", {
2628
- type: "button",
2629
- onClick: a,
2630
- className: "inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline underline-offset-2",
2631
- children: [p("devportal.nextUploadVersion", "Next: Upload a Version"), /* @__PURE__ */ H(de, { size: 15 })]
2649
+ S === "error" && /* @__PURE__ */ K("div", {
2650
+ className: "flex items-center gap-2 rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive",
2651
+ children: [/* @__PURE__ */ G(se, {
2652
+ size: 15,
2653
+ className: "shrink-0"
2654
+ }), p("devportal.storeListing.savedError", "Failed to save. Please try again.")]
2632
2655
  }),
2633
- (!r || n > 0) && !i && o && /* @__PURE__ */ U("button", {
2634
- type: "button",
2635
- onClick: o,
2636
- className: "inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline underline-offset-2",
2637
- children: [p("devportal.nextSetPricing", "Next: Set Pricing"), /* @__PURE__ */ H(de, { size: 15 })]
2656
+ /* @__PURE__ */ K("div", {
2657
+ className: "flex flex-wrap items-center gap-3",
2658
+ children: [
2659
+ /* @__PURE__ */ G("button", {
2660
+ type: "button",
2661
+ onClick: ne,
2662
+ disabled: g || !D || b,
2663
+ title: D ? b ? p("devportal.storeListing.alreadySaved", "No unsaved changes") : void 0 : p("devportal.storeListing.requiredFieldsHint", "Fill in Short Description, Privacy Policy URL, and Terms of Service URL to save"),
2664
+ className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
2665
+ children: g ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(V, {
2666
+ size: 16,
2667
+ className: "animate-spin"
2668
+ }), p("devportal.saving", "Saving…")] }) : b ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(L, { size: 16 }), p("devportal.saved", "Saved")] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(Se, { size: 16 }), p("devportal.saveStoreListing", "Save Store Listing")] })
2669
+ }),
2670
+ !D && /* @__PURE__ */ G("p", {
2671
+ className: "text-xs text-text-secondary",
2672
+ children: p("devportal.storeListing.requiredFieldsLabel", "Short Description, Privacy Policy URL, and Terms of Service URL are required")
2673
+ }),
2674
+ r && n === 0 && a && /* @__PURE__ */ K("button", {
2675
+ type: "button",
2676
+ onClick: a,
2677
+ className: "inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline underline-offset-2",
2678
+ children: [p("devportal.nextUploadVersion", "Next: Upload a Version"), /* @__PURE__ */ G(ue, { size: 15 })]
2679
+ }),
2680
+ (!r || n > 0) && !i && o && /* @__PURE__ */ K("button", {
2681
+ type: "button",
2682
+ onClick: o,
2683
+ className: "inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline underline-offset-2",
2684
+ children: [p("devportal.nextSetPricing", "Next: Set Pricing"), /* @__PURE__ */ G(ue, { size: 15 })]
2685
+ })
2686
+ ]
2638
2687
  })
2639
2688
  ]
2640
2689
  })
2641
2690
  ]
2642
2691
  });
2643
2692
  }, Q = ({ label: e, value: n, trend: r }) => {
2644
- let { t: i } = P();
2645
- return /* @__PURE__ */ U(Pe, {
2693
+ let { t: i } = F();
2694
+ return /* @__PURE__ */ K(Me, {
2646
2695
  treatment: "metric",
2647
2696
  className: "p-4",
2648
2697
  children: [
2649
- /* @__PURE__ */ H("p", {
2698
+ /* @__PURE__ */ G("p", {
2650
2699
  className: "text-sm text-text-secondary",
2651
2700
  children: e
2652
2701
  }),
2653
- /* @__PURE__ */ H("p", {
2702
+ /* @__PURE__ */ G("p", {
2654
2703
  className: "text-2xl font-bold tabular-nums",
2655
2704
  children: n
2656
2705
  }),
2657
- r !== void 0 && /* @__PURE__ */ U("p", {
2706
+ r !== void 0 && /* @__PURE__ */ K("p", {
2658
2707
  className: t("text-xs mt-1 tabular-nums", r > 0 ? "text-status-success-text" : r < 0 ? "text-status-error-text" : "text-text-secondary"),
2659
2708
  children: [
2660
2709
  r > 0 ? "+" : "",
@@ -2668,12 +2717,12 @@ var it = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2668
2717
  })
2669
2718
  ]
2670
2719
  });
2671
- }, $ = ({ label: e, url: t }) => /* @__PURE__ */ U("a", {
2720
+ }, $ = ({ label: e, url: t }) => /* @__PURE__ */ K("a", {
2672
2721
  href: t,
2673
2722
  target: "_blank",
2674
2723
  rel: "noopener noreferrer",
2675
2724
  className: "flex items-center gap-2 text-sm text-primary hover:underline",
2676
- children: [/* @__PURE__ */ H(R, { size: 14 }), e]
2725
+ children: [/* @__PURE__ */ G(z, { size: 14 }), e]
2677
2726
  }), at = [
2678
2727
  {
2679
2728
  id: "auth",
@@ -2753,7 +2802,7 @@ function ot(e) {
2753
2802
  return t;
2754
2803
  }
2755
2804
  var st = ({ app: e }) => {
2756
- let t = e.manifest ?? {}, [n, r] = N(() => ot(t)), [i, a] = N(!1), [o, s] = N(!1), [c] = _(), l = (e, t) => {
2805
+ let t = e.manifest ?? {}, [n, r] = P(() => ot(t)), [i, a] = P(!1), [o, s] = P(!1), [c] = _(), l = (e, t) => {
2757
2806
  s(!1), r((n) => ({
2758
2807
  ...n,
2759
2808
  [e]: t
@@ -2784,41 +2833,41 @@ var st = ({ app: e }) => {
2784
2833
  "read",
2785
2834
  "write"
2786
2835
  ];
2787
- return /* @__PURE__ */ H(y, {
2836
+ return /* @__PURE__ */ G(y, {
2788
2837
  title: "Permissions",
2789
2838
  description: "Define what platform data this app can request access to. Users see these when authorizing the app.",
2790
- children: /* @__PURE__ */ U("div", {
2839
+ children: /* @__PURE__ */ K("div", {
2791
2840
  className: "space-y-4",
2792
2841
  children: [
2793
- /* @__PURE__ */ H("div", {
2842
+ /* @__PURE__ */ G("div", {
2794
2843
  className: "overflow-x-auto rounded-lg border border-border-subtle",
2795
- children: /* @__PURE__ */ U("table", {
2844
+ children: /* @__PURE__ */ K("table", {
2796
2845
  className: "w-full text-sm",
2797
- children: [/* @__PURE__ */ H("thead", { children: /* @__PURE__ */ U("tr", {
2846
+ children: [/* @__PURE__ */ G("thead", { children: /* @__PURE__ */ K("tr", {
2798
2847
  className: "border-b border-border-subtle bg-bg-sunken/50",
2799
- children: [/* @__PURE__ */ H("th", {
2848
+ children: [/* @__PURE__ */ G("th", {
2800
2849
  className: "px-4 py-3 text-left font-medium text-text-secondary w-1/2",
2801
2850
  children: "Resource"
2802
- }), f.map((e) => /* @__PURE__ */ H("th", {
2851
+ }), f.map((e) => /* @__PURE__ */ G("th", {
2803
2852
  className: "px-4 py-3 text-center font-medium text-text-secondary",
2804
2853
  children: d[e]
2805
2854
  }, e))]
2806
- }) }), /* @__PURE__ */ H("tbody", {
2855
+ }) }), /* @__PURE__ */ G("tbody", {
2807
2856
  className: "divide-y divide-border",
2808
- children: at.map((e) => /* @__PURE__ */ U("tr", {
2857
+ children: at.map((e) => /* @__PURE__ */ K("tr", {
2809
2858
  className: "hover:bg-bg-sunken/30 transition-colors",
2810
- children: [/* @__PURE__ */ U("td", {
2859
+ children: [/* @__PURE__ */ K("td", {
2811
2860
  className: "px-4 py-3",
2812
- children: [/* @__PURE__ */ H("p", {
2861
+ children: [/* @__PURE__ */ G("p", {
2813
2862
  className: "font-medium text-text-primary",
2814
2863
  children: e.label
2815
- }), /* @__PURE__ */ H("p", {
2864
+ }), /* @__PURE__ */ G("p", {
2816
2865
  className: "text-xs text-text-secondary",
2817
2866
  children: e.description
2818
2867
  })]
2819
- }), f.map((t) => /* @__PURE__ */ H("td", {
2868
+ }), f.map((t) => /* @__PURE__ */ G("td", {
2820
2869
  className: "px-4 py-3 text-center",
2821
- children: /* @__PURE__ */ H("input", {
2870
+ children: /* @__PURE__ */ G("input", {
2822
2871
  type: "radio",
2823
2872
  name: `perm-${e.id}`,
2824
2873
  value: t,
@@ -2831,27 +2880,27 @@ var st = ({ app: e }) => {
2831
2880
  })]
2832
2881
  })
2833
2882
  }),
2834
- /* @__PURE__ */ U("div", {
2883
+ /* @__PURE__ */ K("div", {
2835
2884
  className: "rounded-lg border border-border-subtle bg-bg-sunken/30 p-3 flex gap-2 text-xs text-text-secondary",
2836
- children: [/* @__PURE__ */ H(ge, {
2885
+ children: [/* @__PURE__ */ G(he, {
2837
2886
  size: 14,
2838
2887
  className: "flex-shrink-0 mt-0.5"
2839
- }), /* @__PURE__ */ U("span", { children: [/* @__PURE__ */ H("strong", { children: "Read & Write" }), " implies Read. Request only what your app genuinely needs — fewer permissions build more user trust."] })]
2888
+ }), /* @__PURE__ */ K("span", { children: [/* @__PURE__ */ G("strong", { children: "Read & Write" }), " implies Read. Request only what your app genuinely needs — fewer permissions build more user trust."] })]
2840
2889
  }),
2841
- /* @__PURE__ */ U("div", {
2890
+ /* @__PURE__ */ K("div", {
2842
2891
  className: "flex items-center justify-end gap-3",
2843
- children: [o && /* @__PURE__ */ U("span", {
2892
+ children: [o && /* @__PURE__ */ K("span", {
2844
2893
  className: "flex items-center gap-1.5 text-sm text-status-success-text",
2845
- children: [/* @__PURE__ */ H(ue, { size: 14 }), "Saved"]
2846
- }), /* @__PURE__ */ U("button", {
2894
+ children: [/* @__PURE__ */ G(le, { size: 14 }), "Saved"]
2895
+ }), /* @__PURE__ */ K("button", {
2847
2896
  type: "button",
2848
2897
  onClick: () => void u(),
2849
2898
  disabled: i,
2850
2899
  className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors disabled:opacity-50",
2851
- children: [i ? /* @__PURE__ */ H(z, {
2900
+ children: [i ? /* @__PURE__ */ G(V, {
2852
2901
  size: 14,
2853
2902
  className: "animate-spin"
2854
- }) : /* @__PURE__ */ H(we, { size: 14 }), "Save Permissions"]
2903
+ }) : /* @__PURE__ */ G(xe, { size: 14 }), "Save Permissions"]
2855
2904
  })]
2856
2905
  })
2857
2906
  ]
@@ -2859,6 +2908,6 @@ var st = ({ app: e }) => {
2859
2908
  });
2860
2909
  };
2861
2910
  //#endregion
2862
- export { Ve as ApplicationDetailPage };
2911
+ export { Be as ApplicationDetailPage };
2863
2912
 
2864
2913
  //# sourceMappingURL=ApplicationDetailPage.js.map