@burdenoff/microfe-devportal 2026.705.2 → 2026.705.4

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.
@@ -18,7 +18,7 @@ import { useDevportalPermission as oe } from "../hooks/usePermission.js";
18
18
  import { usePackageUpload as k } from "../hooks/usePackageUpload.js";
19
19
  import { useCallback as A, useEffect as se, useMemo as j, useRef as M, useState as N } from "react";
20
20
  import { useI18n as P } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
21
- import { AlertCircle as 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 z, Loader2 as B, Lock as _e, MoreHorizontal as ve, Package as ye, Plus as V, Power as be, RefreshCw as xe, SendHorizontal as Se, Shield as H, Store as Ce, TrendingUp as we, Upload as U, Users as Te, Wallet as Ee, Webhook as De, X as Oe, XCircle as ke } from "lucide-react";
21
+ import { AlertCircle as ce, AppWindow as le, BarChart3 as ue, Check as F, CheckCircle as de, ChevronRight as fe, CircleDollarSign as I, Clock as pe, Edit as me, ExternalLink as L, FlaskConical as he, Gift as ge, Info as _e, Key as R, Loader2 as z, Lock as ve, MoreHorizontal as ye, Package as be, Plus as B, Power as xe, RefreshCw as Se, SendHorizontal as Ce, Shield as V, Store as we, TrendingUp as Te, Upload as H, Users as Ee, Wallet as De, Webhook as Oe, X as U, XCircle as ke } from "lucide-react";
22
22
  import { useParams as Ae } from "react-router-dom";
23
23
  import { Fragment as W, jsx as G, jsxs as K } from "react/jsx-runtime";
24
24
  import { CTAOverflowMenu as je, EmphasisPanel as Me, GlassCard as Ne } from "@burdenoff/fe-libs/ui";
@@ -147,52 +147,52 @@ var Le = [
147
147
  {
148
148
  id: "analytics",
149
149
  label: "Analytics",
150
- icon: F
150
+ icon: ue
151
151
  },
152
152
  {
153
153
  id: "store-listing",
154
154
  label: "Store Listing",
155
- icon: Ce
155
+ icon: we
156
156
  },
157
157
  {
158
158
  id: "versions",
159
159
  label: "Versions",
160
- icon: ye
160
+ icon: be
161
161
  },
162
162
  {
163
163
  id: "pricing",
164
164
  label: "Pricing",
165
- icon: L
165
+ icon: I
166
166
  },
167
167
  {
168
168
  id: "permissions",
169
169
  label: "Permissions",
170
- icon: H
170
+ icon: V
171
171
  },
172
172
  {
173
173
  id: "webhooks",
174
174
  label: "Webhooks",
175
- icon: De
175
+ icon: Oe
176
176
  },
177
177
  {
178
178
  id: "delegations",
179
179
  label: "Delegations",
180
- icon: Te
180
+ icon: Ee
181
181
  },
182
182
  {
183
183
  id: "playground",
184
184
  label: "API Playground",
185
- icon: R
185
+ icon: L
186
186
  },
187
187
  {
188
188
  id: "oauth",
189
189
  label: "OAuth",
190
- icon: _e
190
+ icon: ve
191
191
  },
192
192
  {
193
193
  id: "api-keys",
194
194
  label: "API Keys",
195
- icon: z
195
+ icon: R
196
196
  }
197
197
  ], Re = {
198
198
  ACTIVE: "bg-status-success-bg-subtle text-status-success-text",
@@ -200,7 +200,7 @@ var Le = [
200
200
  EXPIRED: "bg-bg-sunken text-text-secondary"
201
201
  }, ze = ({ message: e = "Loading..." }) => /* @__PURE__ */ K("div", {
202
202
  className: "flex items-center justify-center gap-3 py-12",
203
- children: [/* @__PURE__ */ G(B, {
203
+ children: [/* @__PURE__ */ G(z, {
204
204
  size: 20,
205
205
  className: "animate-spin text-text-secondary"
206
206
  }), /* @__PURE__ */ G("p", {
@@ -220,73 +220,73 @@ var Le = [
220
220
  let { navigate: i, basePath: o, workspaceId: c } = e(), { t: u } = P(), p = (e, t) => {
221
221
  let n = u(e);
222
222
  return n === e ? t : n;
223
- }, { allowed: _ } = oe(ae.APP_UPDATE), { allowed: y } = oe(ae.APP_DELETE), { appId: w } = Ae(), [E, D] = N("overview"), [O, te] = N(!1), [ne, k] = N(!1), [se, j] = N(null), [M, F] = N(!1), { data: L, loading: R, error: he, refetch: ge } = s({
223
+ }, { allowed: _ } = oe(ae.APP_UPDATE), { allowed: y } = oe(ae.APP_DELETE), { appId: w } = Ae(), [E, D] = N("overview"), [O, te] = N(!1), [ne, k] = N(!1), [se, j] = N(null), [M, ue] = N(!1), { data: I, loading: L, error: ge, refetch: _e } = s({
224
224
  variables: { id: w },
225
225
  skip: !w
226
- }), [z, { loading: _e }] = m(), [ve, { loading: ye }] = a(), [V, { loading: H }] = h(), [we, { loading: U }] = f(), [Te, { loading: Ee }] = g(), { data: De, refetch: Oe } = d({
226
+ }), [R, { loading: ve }] = m(), [ye, { loading: be }] = a(), [B, { loading: V }] = h(), [Te, { loading: H }] = f(), [Ee, { loading: De }] = g(), { data: Oe, refetch: U } = d({
227
227
  variables: {
228
228
  applicationId: w,
229
229
  workspaceId: c ?? void 0
230
230
  },
231
231
  skip: !c || !w,
232
232
  fetchPolicy: "cache-and-network"
233
- }), Me = De?.appInstallations?.edges?.[0]?.node ?? null, { data: Ne } = l({
234
- variables: { id: L?.application?.developerOrganizationId ?? "" },
235
- skip: !L?.application?.developerOrganizationId,
233
+ }), Me = Oe?.appInstallations?.edges?.[0]?.node ?? null, { data: Ne } = l({
234
+ variables: { id: I?.application?.developerOrganizationId ?? "" },
235
+ skip: !I?.application?.developerOrganizationId,
236
236
  fetchPolicy: "cache-first"
237
237
  }), q = A((e) => {
238
238
  i?.(`${o}${e}`);
239
239
  }, [i, o]), Fe = A(async () => {
240
- let e = L?.application?.appId;
240
+ let e = I?.application?.appId;
241
241
  if (e) try {
242
- let t = (await z({ variables: { id: e } })).data?.rotateAppSecret.clientSecret;
242
+ let t = (await R({ variables: { id: e } })).data?.rotateAppSecret.clientSecret;
243
243
  t && j(t), te(!1);
244
244
  } catch {}
245
- }, [L?.application?.appId, z]), Ie = A(async () => {
245
+ }, [I?.application?.appId, R]), Ie = A(async () => {
246
246
  if (w) try {
247
- await ve({ variables: { id: w } }), k(!1), q("/apps");
247
+ await ye({ variables: { id: w } }), k(!1), q("/apps");
248
248
  } catch {}
249
249
  }, [
250
250
  w,
251
- ve,
251
+ ye,
252
252
  q
253
253
  ]), Re = A(async () => {
254
254
  if (!(!w || !c)) try {
255
- await we({ variables: { input: {
255
+ await Te({ variables: { input: {
256
256
  applicationId: w,
257
257
  scope: "WORKSPACE",
258
258
  workspaceId: c,
259
259
  autoUpdate: !1
260
- } } }), Oe(), T("success");
260
+ } } }), U(), T("success");
261
261
  } catch (e) {
262
262
  console.error("[DevPortal] Test in Workspace failed:", e), T("error");
263
263
  }
264
264
  }, [
265
265
  w,
266
266
  c,
267
- we,
268
- Oe
267
+ Te,
268
+ U
269
269
  ]), ze = A(async (e) => {
270
270
  try {
271
- await Te({ variables: { id: e } }), Oe(), T("success");
271
+ await Ee({ variables: { id: e } }), U(), T("success");
272
272
  } catch {
273
273
  T("error");
274
274
  }
275
- }, [Te, Oe]), Be = A(async () => {
275
+ }, [Ee, U]), Be = A(async () => {
276
276
  if (w) try {
277
- await V({ variables: { id: w } }), T("success");
277
+ await B({ variables: { id: w } }), T("success");
278
278
  } catch (e) {
279
279
  console.error("[DevPortal] Submit failed:", e), T("error");
280
280
  } finally {
281
- ge();
281
+ _e();
282
282
  }
283
283
  }, [
284
284
  w,
285
- V,
286
- ge
285
+ B,
286
+ _e
287
287
  ]);
288
- if (R && !L) return /* @__PURE__ */ G(n, { message: p("devportal.loadingApplication", "Loading application...") });
289
- if (he) return /* @__PURE__ */ G(v, {
288
+ if (L && !I) return /* @__PURE__ */ G(n, { message: p("devportal.loadingApplication", "Loading application...") });
289
+ if (ge) return /* @__PURE__ */ G(v, {
290
290
  title: p("devportal.error", "Error"),
291
291
  backLink: `${o}/apps`,
292
292
  backLabel: p("devportal.backToApplications", "Back to Applications"),
@@ -303,12 +303,12 @@ var Le = [
303
303
  }),
304
304
  /* @__PURE__ */ G("p", {
305
305
  className: "text-sm text-text-secondary",
306
- children: he.message
306
+ children: ge.message
307
307
  })
308
308
  ]
309
309
  })
310
310
  });
311
- let J = Pe(L?.application);
311
+ let J = Pe(I?.application);
312
312
  if (!J) return /* @__PURE__ */ G(v, {
313
313
  title: p("devportal.notFound", "Not Found"),
314
314
  backLink: `${o}/apps`,
@@ -320,27 +320,27 @@ var Le = [
320
320
  description: p("devportal.applicationNotFoundDescription", "The application you're looking for doesn't exist or you don't have access to it.")
321
321
  })
322
322
  });
323
- let Y = J.appType === "NODE" || J.appType === "WORKFLOW", X = J.appType === "API_INTEGRATION", Ue = L?.application?.versions?.totalCount ?? 0, Xe = J.pricingType === "PAID", Ze = Ne?.developerOrganization, Qe = Ze?.platformFeeRate ?? .3, $e = !!Ze?.billingAccountId, tt = J.pricingDetails ?? {}, Z = J.pricingType === "FREE" || J.pricingType === "PAID" && typeof tt.price == "number" && tt.price > 0, Q = !!J.description?.trim() && !!J.category && !!J.iconUrl && (J.visibility === "PUBLIC" || J.visibility === "UNLISTED") && (!Y && !X || Ue > 0) && (!Xe || $e) && Z, nt = Q && J.status !== "PUBLISHED" && J.status !== "SUBMITTED", rt = [
323
+ let Y = J.appType === "NODE" || J.appType === "WORKFLOW", X = J.appType === "API_INTEGRATION", Ue = I?.application?.versions?.totalCount ?? 0, Xe = J.pricingType === "PAID", Ze = Ne?.developerOrganization, Qe = Ze?.platformFeeRate ?? .3, $e = !!Ze?.billingAccountId, tt = J.pricingDetails ?? {}, Z = J.pricingType === "FREE" || J.pricingType === "PAID" && typeof tt.price == "number" && tt.price > 0, Q = !!J.description?.trim() && !!J.category && !!J.iconUrl && (J.visibility === "PUBLIC" || J.visibility === "UNLISTED") && (!Y && !X || Ue > 0) && (!Xe || $e) && Z, nt = Q && J.status !== "PUBLISHED" && J.status !== "SUBMITTED", rt = [
324
324
  ...Y ? [] : [{
325
325
  label: p("devportal.rotateSecret", "Rotate Secret"),
326
- icon: /* @__PURE__ */ G(xe, { size: 16 }),
326
+ icon: /* @__PURE__ */ G(Se, { size: 16 }),
327
327
  disabled: !J.appId,
328
328
  onSelect: () => te(!0)
329
329
  }],
330
330
  ...Y ? [] : Me ? [{
331
331
  label: p("devportal.uninstallFromWorkspace", "Uninstall from Workspace"),
332
332
  icon: /* @__PURE__ */ G(ke, { size: 16 }),
333
- disabled: Ee || !c,
333
+ disabled: De || !c,
334
334
  onSelect: () => void ze(Me.id)
335
335
  }] : [{
336
336
  label: p("devportal.testInWorkspace", "Test in Workspace"),
337
- icon: /* @__PURE__ */ G(me, { size: 16 }),
338
- disabled: U || !c,
337
+ icon: /* @__PURE__ */ G(he, { size: 16 }),
338
+ disabled: H || !c,
339
339
  onSelect: () => void Re()
340
340
  }],
341
341
  {
342
342
  label: p("devportal.deactivate", "Deactivate"),
343
- icon: /* @__PURE__ */ G(be, { size: 16 }),
343
+ icon: /* @__PURE__ */ G(xe, { size: 16 }),
344
344
  intent: "destructive",
345
345
  disabled: !y,
346
346
  onSelect: () => k(!0)
@@ -356,11 +356,11 @@ var Le = [
356
356
  className: "flex items-center gap-2",
357
357
  children: [J.status === "SUBMITTED" ? /* @__PURE__ */ K("div", {
358
358
  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",
359
- children: [/* @__PURE__ */ G(fe, { size: 13 }), p("devportal.underReview", "Under Review")]
359
+ children: [/* @__PURE__ */ G(pe, { size: 13 }), p("devportal.underReview", "Under Review")]
360
360
  }) : J.status === "PUBLISHED" ? null : /* @__PURE__ */ G("button", {
361
361
  type: "button",
362
362
  onClick: () => void Be(),
363
- disabled: !nt || H,
363
+ disabled: !nt || V,
364
364
  title: Q ? void 0 : [
365
365
  !J.description?.trim() && "Add full description",
366
366
  !J.category && "Select a category",
@@ -370,15 +370,15 @@ var Le = [
370
370
  !Z && "Set pricing (choose Free or Paid in the Pricing tab)",
371
371
  Xe && !$e && "Link a billing account to receive payments"
372
372
  ].filter(Boolean).join(" · "),
373
- className: t("inline-flex items-center gap-2 rounded-md px-5 py-2 text-sm font-medium whitespace-nowrap transition-colors", nt && !H ? "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"),
374
- children: H ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(B, {
373
+ className: t("inline-flex items-center gap-2 rounded-md px-5 py-2 text-sm font-medium whitespace-nowrap transition-colors", nt && !V ? "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"),
374
+ children: V ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(z, {
375
375
  size: 15,
376
376
  className: "animate-spin"
377
- }), p("devportal.submitting", "Submitting…")] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(Se, { size: 15 }), p("devportal.submitForReview", "Submit for Review")] })
377
+ }), p("devportal.submitting", "Submitting…")] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(Ce, { size: 15 }), p("devportal.submitForReview", "Submit for Review")] })
378
378
  }), /* @__PURE__ */ G(je, {
379
379
  primary: {
380
380
  label: p("devportal.editApp", "Edit App"),
381
- icon: /* @__PURE__ */ G(pe, { size: 16 }),
381
+ icon: /* @__PURE__ */ G(me, { size: 16 }),
382
382
  disabled: !_,
383
383
  onSelect: () => q(`/apps/${J.id}/edit`)
384
384
  },
@@ -413,7 +413,7 @@ var Le = [
413
413
  }),
414
414
  J.status === "SUBMITTED" && /* @__PURE__ */ K("div", {
415
415
  className: "flex items-start gap-3 rounded-lg border border-border-subtle bg-status-warning-bg-subtle p-4",
416
- children: [/* @__PURE__ */ G(fe, {
416
+ children: [/* @__PURE__ */ G(pe, {
417
417
  size: 18,
418
418
  className: "text-status-warning-text mt-0.5 flex-shrink-0"
419
419
  }), /* @__PURE__ */ K("div", {
@@ -461,7 +461,7 @@ var Le = [
461
461
  }),
462
462
  J.status === "PUBLISHED" && /* @__PURE__ */ K("div", {
463
463
  className: "flex items-start gap-3 rounded-lg border border-status-success-bg bg-status-success-bg-subtle p-4",
464
- children: [/* @__PURE__ */ G(ue, {
464
+ children: [/* @__PURE__ */ G(de, {
465
465
  size: 18,
466
466
  className: "text-status-success-text mt-0.5 flex-shrink-0"
467
467
  }), /* @__PURE__ */ K("div", {
@@ -532,7 +532,7 @@ var Le = [
532
532
  className: "flex items-center gap-3",
533
533
  children: [/* @__PURE__ */ G("div", {
534
534
  className: "flex h-8 w-8 items-center justify-center rounded-full bg-action-primary-bg/10",
535
- children: /* @__PURE__ */ G(Ce, {
535
+ children: /* @__PURE__ */ G(we, {
536
536
  size: 16,
537
537
  className: "text-primary"
538
538
  })
@@ -561,7 +561,7 @@ var Le = [
561
561
  children: [
562
562
  /* @__PURE__ */ G("div", {
563
563
  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"),
564
- children: e.done ? /* @__PURE__ */ G(I, { size: 13 }) : n + 1
564
+ children: e.done ? /* @__PURE__ */ G(F, { size: 13 }) : n + 1
565
565
  }),
566
566
  /* @__PURE__ */ K("div", {
567
567
  className: "flex-1 min-w-0",
@@ -573,7 +573,7 @@ var Le = [
573
573
  children: e.hint
574
574
  })]
575
575
  }),
576
- e.onClick && !e.done && /* @__PURE__ */ G(de, {
576
+ e.onClick && !e.done && /* @__PURE__ */ G(fe, {
577
577
  size: 16,
578
578
  className: "flex-shrink-0 text-text-secondary"
579
579
  })
@@ -610,9 +610,11 @@ var Le = [
610
610
  tabIndex: 0,
611
611
  children: [
612
612
  E === "overview" && /* @__PURE__ */ G(Ye, { app: J }),
613
- E === "permissions" && /* @__PURE__ */ G(ft, {
613
+ E === "permissions" && /* @__PURE__ */ G(mt, {
614
614
  app: J,
615
- versionScopes: L?.application?.versions?.edges?.[0]?.node?.requiredScopes ?? []
615
+ versionScopes: I?.application?.versions?.edges?.[0]?.node?.requiredScopes ?? [],
616
+ locked: J.status === "PUBLISHED" || J.status === "APPROVED" || J.status === "ACTIVE",
617
+ onNavigateToVersions: () => D("versions")
616
618
  }),
617
619
  E === "webhooks" && /* @__PURE__ */ G(Ke, {
618
620
  appId: J.id,
@@ -621,7 +623,7 @@ var Le = [
621
623
  E === "delegations" && /* @__PURE__ */ G(qe, {
622
624
  authAppId: J.appId || void 0,
623
625
  appName: J.name,
624
- onGrantDelegation: () => F(!0),
626
+ onGrantDelegation: () => ue(!0),
625
627
  onNavigate: q
626
628
  }),
627
629
  E === "analytics" && /* @__PURE__ */ G(Je, { appId: J.id }),
@@ -636,7 +638,7 @@ var Le = [
636
638
  }),
637
639
  E === "store-listing" && /* @__PURE__ */ G(ot, {
638
640
  app: J,
639
- versionCount: L?.application?.versions?.totalCount ?? 0,
641
+ versionCount: I?.application?.versions?.totalCount ?? 0,
640
642
  isPackageApp: Y,
641
643
  pricingDone: Z,
642
644
  onNavigateToVersions: Y || X ? () => D("versions") : void 0,
@@ -667,7 +669,7 @@ var Le = [
667
669
  confirmLabel: p("devportal.rotateSecret", "Rotate Secret"),
668
670
  cancelLabel: p("devportal.cancel", "Cancel"),
669
671
  variant: "warning",
670
- loading: _e
672
+ loading: ve
671
673
  }),
672
674
  /* @__PURE__ */ G(re, {
673
675
  open: ne,
@@ -678,16 +680,16 @@ var Le = [
678
680
  confirmLabel: p("devportal.deactivate", "Deactivate"),
679
681
  cancelLabel: p("devportal.cancel", "Cancel"),
680
682
  variant: "destructive",
681
- loading: ye
683
+ loading: be
682
684
  }),
683
685
  /* @__PURE__ */ G(ie, {
684
686
  open: M,
685
- onOpenChange: F,
687
+ onOpenChange: ue,
686
688
  appId: J.appId || "",
687
689
  appName: J.name,
688
690
  appScopes: J.scopes?.map((e) => e.scope) ?? [],
689
691
  onSuccess: () => {
690
- F(!1);
692
+ ue(!1);
691
693
  }
692
694
  })
693
695
  ]
@@ -700,7 +702,7 @@ var Le = [
700
702
  return /* @__PURE__ */ K("div", {
701
703
  className: "space-y-4 py-4 text-center",
702
704
  children: [
703
- /* @__PURE__ */ G(H, { className: "mx-auto h-10 w-10 text-text-secondary" }),
705
+ /* @__PURE__ */ G(V, { className: "mx-auto h-10 w-10 text-text-secondary" }),
704
706
  /* @__PURE__ */ G("h3", {
705
707
  className: "font-medium",
706
708
  children: n("devportal.oauthApps", "OAuth Apps")
@@ -712,7 +714,7 @@ var Le = [
712
714
  /* @__PURE__ */ K("button", {
713
715
  onClick: () => e("/oauth"),
714
716
  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",
715
- children: [/* @__PURE__ */ G(R, { size: 16 }), n("devportal.manageOAuthApps", "Manage OAuth Apps")]
717
+ children: [/* @__PURE__ */ G(L, { size: 16 }), n("devportal.manageOAuthApps", "Manage OAuth Apps")]
716
718
  })
717
719
  ]
718
720
  });
@@ -724,7 +726,7 @@ var Le = [
724
726
  return /* @__PURE__ */ K("div", {
725
727
  className: "space-y-4 py-4 text-center",
726
728
  children: [
727
- /* @__PURE__ */ G(z, { className: "mx-auto h-10 w-10 text-text-secondary" }),
729
+ /* @__PURE__ */ G(R, { className: "mx-auto h-10 w-10 text-text-secondary" }),
728
730
  /* @__PURE__ */ G("h3", {
729
731
  className: "font-medium",
730
732
  children: n("devportal.apiKeys", "API Keys")
@@ -736,7 +738,7 @@ var Le = [
736
738
  /* @__PURE__ */ K("button", {
737
739
  onClick: () => e("/api-keys"),
738
740
  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",
739
- children: [/* @__PURE__ */ G(R, { size: 16 }), n("devportal.manageApiKeys", "Manage API Keys")]
741
+ children: [/* @__PURE__ */ G(L, { size: 16 }), n("devportal.manageApiKeys", "Manage API Keys")]
740
742
  })
741
743
  ]
742
744
  });
@@ -789,7 +791,7 @@ var Le = [
789
791
  children: [
790
792
  /* @__PURE__ */ K("div", {
791
793
  className: "flex items-start gap-3 rounded-lg border border-border-subtle bg-bg-sunken px-4 py-3",
792
- children: [/* @__PURE__ */ G(L, {
794
+ children: [/* @__PURE__ */ G(I, {
793
795
  size: 16,
794
796
  className: "mt-0.5 shrink-0 text-primary"
795
797
  }), /* @__PURE__ */ K("p", {
@@ -830,7 +832,7 @@ var Le = [
830
832
  className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
831
833
  children: [/* @__PURE__ */ G("div", {
832
834
  className: "flex h-9 w-9 items-center justify-center rounded-lg bg-status-success-bg-subtle",
833
- children: /* @__PURE__ */ G(we, {
835
+ children: /* @__PURE__ */ G(Te, {
834
836
  size: 18,
835
837
  className: "text-status-success-text"
836
838
  })
@@ -862,7 +864,7 @@ var Le = [
862
864
  className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
863
865
  children: [/* @__PURE__ */ G("div", {
864
866
  className: "flex h-9 w-9 items-center justify-center rounded-lg bg-action-primary-bg/10",
865
- children: /* @__PURE__ */ G(Ee, {
867
+ children: /* @__PURE__ */ G(De, {
866
868
  size: 18,
867
869
  className: "text-primary"
868
870
  })
@@ -891,7 +893,7 @@ var Le = [
891
893
  className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
892
894
  children: [/* @__PURE__ */ G("div", {
893
895
  className: "flex h-9 w-9 items-center justify-center rounded-lg bg-status-warning-bg-subtle",
894
- children: /* @__PURE__ */ G(he, {
896
+ children: /* @__PURE__ */ G(ge, {
895
897
  size: 18,
896
898
  className: "text-status-warning-text"
897
899
  })
@@ -1123,7 +1125,7 @@ var Le = [
1123
1125
  children: [
1124
1126
  /* @__PURE__ */ K("li", {
1125
1127
  className: "flex items-start gap-2",
1126
- children: [/* @__PURE__ */ G(I, {
1128
+ children: [/* @__PURE__ */ G(F, {
1127
1129
  size: 14,
1128
1130
  className: "mt-0.5 shrink-0 text-status-success-text"
1129
1131
  }), /* @__PURE__ */ K("span", { children: [
@@ -1141,21 +1143,21 @@ var Le = [
1141
1143
  }),
1142
1144
  /* @__PURE__ */ K("li", {
1143
1145
  className: "flex items-start gap-2",
1144
- children: [/* @__PURE__ */ G(I, {
1146
+ children: [/* @__PURE__ */ G(F, {
1145
1147
  size: 14,
1146
1148
  className: "mt-0.5 shrink-0 text-status-success-text"
1147
1149
  }), /* @__PURE__ */ G("span", { children: "All prices are in platform credits. The USD equivalent is indicative only and may vary with the current credit rate." })]
1148
1150
  }),
1149
1151
  /* @__PURE__ */ K("li", {
1150
1152
  className: "flex items-start gap-2",
1151
- children: [/* @__PURE__ */ G(I, {
1153
+ children: [/* @__PURE__ */ G(F, {
1152
1154
  size: 14,
1153
1155
  className: "mt-0.5 shrink-0 text-status-success-text"
1154
1156
  }), /* @__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." })]
1155
1157
  }),
1156
1158
  /* @__PURE__ */ K("li", {
1157
1159
  className: "flex items-start gap-2",
1158
- children: [/* @__PURE__ */ G(I, {
1160
+ children: [/* @__PURE__ */ G(F, {
1159
1161
  size: 14,
1160
1162
  className: "mt-0.5 shrink-0 text-status-success-text"
1161
1163
  }), /* @__PURE__ */ K("span", { children: [
@@ -1182,13 +1184,13 @@ var Le = [
1182
1184
  onClick: () => void g(),
1183
1185
  disabled: d,
1184
1186
  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",
1185
- children: d ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(B, {
1187
+ children: d ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(z, {
1186
1188
  size: 16,
1187
1189
  className: "animate-spin"
1188
- }), s("devportal.saving", "Saving…")] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(L, { size: 16 }), s("devportal.savePricing", "Save Pricing")] })
1190
+ }), s("devportal.saving", "Saving…")] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(I, { size: 16 }), s("devportal.savePricing", "Save Pricing")] })
1189
1191
  }), a && /* @__PURE__ */ K("div", {
1190
1192
  className: "flex items-start gap-3 rounded-lg border border-status-success-bg bg-status-success-bg-subtle px-4 py-3",
1191
- children: [/* @__PURE__ */ G(I, {
1193
+ children: [/* @__PURE__ */ G(F, {
1192
1194
  size: 16,
1193
1195
  className: "mt-0.5 shrink-0 text-status-success-text"
1194
1196
  }), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
@@ -1228,7 +1230,7 @@ var Le = [
1228
1230
  }), /* @__PURE__ */ K("button", {
1229
1231
  onClick: () => n(`/apps/${e}/versions`),
1230
1232
  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",
1231
- children: [/* @__PURE__ */ G(U, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
1233
+ children: [/* @__PURE__ */ G(H, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
1232
1234
  })]
1233
1235
  }),
1234
1236
  f.length > 0 ? /* @__PURE__ */ G("div", {
@@ -1321,19 +1323,19 @@ var Le = [
1321
1323
  })
1322
1324
  }) : /* @__PURE__ */ G(r, {
1323
1325
  illustration: "empty-generic",
1324
- icon: /* @__PURE__ */ G(ye, { size: 32 }),
1326
+ icon: /* @__PURE__ */ G(be, { size: 32 }),
1325
1327
  title: s("devportal.noVersions", "No versions yet"),
1326
1328
  description: s("devportal.noVersionsDescription", "Upload your first version to make this item available for review and distribution."),
1327
1329
  action: /* @__PURE__ */ K("button", {
1328
1330
  onClick: () => n(`/apps/${e}/versions`),
1329
1331
  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",
1330
- children: [/* @__PURE__ */ G(U, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
1332
+ children: [/* @__PURE__ */ G(H, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
1331
1333
  })
1332
1334
  }),
1333
1335
  f.length > 0 && !i && a && /* @__PURE__ */ K("div", {
1334
1336
  className: "mt-4 flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-sunken px-4 py-3",
1335
1337
  children: [
1336
- /* @__PURE__ */ G(L, {
1338
+ /* @__PURE__ */ G(I, {
1337
1339
  size: 16,
1338
1340
  className: "shrink-0 text-primary"
1339
1341
  }),
@@ -1345,7 +1347,7 @@ var Le = [
1345
1347
  type: "button",
1346
1348
  onClick: a,
1347
1349
  className: "inline-flex items-center gap-1 text-sm font-medium text-primary hover:underline underline-offset-2 whitespace-nowrap",
1348
- children: [s("devportal.nextSetPricing", "Set Pricing"), /* @__PURE__ */ G(de, { size: 15 })]
1350
+ children: [s("devportal.nextSetPricing", "Set Pricing"), /* @__PURE__ */ G(fe, { size: 15 })]
1349
1351
  })
1350
1352
  ]
1351
1353
  })
@@ -1433,13 +1435,13 @@ var Le = [
1433
1435
  })
1434
1436
  ] }) : /* @__PURE__ */ G(r, {
1435
1437
  illustration: "empty-generic",
1436
- icon: /* @__PURE__ */ G(H, { size: 32 }),
1438
+ icon: /* @__PURE__ */ G(V, { size: 32 }),
1437
1439
  title: s("devportal.linkAuthAppFirst", "Link an auth app first"),
1438
1440
  description: s("devportal.linkAuthAppFirstDescription", "Delegations are managed through auth apps. Create or link an auth app before granting app-as-user access."),
1439
1441
  action: /* @__PURE__ */ K("button", {
1440
1442
  onClick: () => a("/oauth"),
1441
1443
  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",
1442
- children: [/* @__PURE__ */ G(R, { size: 16 }), s("devportal.manageOAuthApps", "Manage OAuth Apps")]
1444
+ children: [/* @__PURE__ */ G(L, { size: 16 }), s("devportal.manageOAuthApps", "Manage OAuth Apps")]
1443
1445
  })
1444
1446
  });
1445
1447
  }, Je = ({ appId: e }) => {
@@ -1621,7 +1623,7 @@ var Le = [
1621
1623
  }), /* @__PURE__ */ K("button", {
1622
1624
  onClick: () => n(`/apps/${e}/webhooks/new`),
1623
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 transition-colors",
1624
- children: [/* @__PURE__ */ G(V, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
1626
+ children: [/* @__PURE__ */ G(B, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
1625
1627
  })]
1626
1628
  }), t.length > 0 ? /* @__PURE__ */ G("div", {
1627
1629
  className: "space-y-4",
@@ -1645,7 +1647,7 @@ var Le = [
1645
1647
  })] }), /* @__PURE__ */ G("button", {
1646
1648
  onClick: () => n(`/apps/${e}/webhooks/${t.id}`),
1647
1649
  className: "rounded-md p-1 hover:bg-bg-sunken",
1648
- children: /* @__PURE__ */ G(ve, { size: 20 })
1650
+ children: /* @__PURE__ */ G(ye, { size: 20 })
1649
1651
  })]
1650
1652
  }),
1651
1653
  /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
@@ -1702,13 +1704,13 @@ var Le = [
1702
1704
  }, t.id))
1703
1705
  }) : /* @__PURE__ */ G(r, {
1704
1706
  illustration: "empty-notifications",
1705
- icon: /* @__PURE__ */ G(De, { size: 32 }),
1707
+ icon: /* @__PURE__ */ G(Oe, { size: 32 }),
1706
1708
  title: a("devportal.noWebhooks", "No webhooks"),
1707
1709
  description: a("devportal.noWebhooksDescription", "Add a webhook to receive event notifications"),
1708
1710
  action: /* @__PURE__ */ K("button", {
1709
1711
  onClick: () => n(`/apps/${e}/webhooks/new`),
1710
1712
  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",
1711
- children: [/* @__PURE__ */ G(V, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
1713
+ children: [/* @__PURE__ */ G(B, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
1712
1714
  })
1713
1715
  })]
1714
1716
  });
@@ -1748,7 +1750,7 @@ var Le = [
1748
1750
  })] }), /* @__PURE__ */ K("button", {
1749
1751
  onClick: i,
1750
1752
  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",
1751
- children: [/* @__PURE__ */ G(V, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
1753
+ children: [/* @__PURE__ */ G(B, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
1752
1754
  })]
1753
1755
  }),
1754
1756
  h.length > 0 && /* @__PURE__ */ G("div", {
@@ -1861,7 +1863,7 @@ var Le = [
1861
1863
  e.expiresAt && /* @__PURE__ */ K("span", {
1862
1864
  className: "flex items-center gap-1",
1863
1865
  children: [
1864
- /* @__PURE__ */ G(fe, { size: 12 }),
1866
+ /* @__PURE__ */ G(pe, { size: 12 }),
1865
1867
  m("devportal.expires", "Expires"),
1866
1868
  " ",
1867
1869
  new Date(e.expiresAt).toLocaleDateString()
@@ -1869,7 +1871,7 @@ var Le = [
1869
1871
  }),
1870
1872
  !e.expiresAt && e.status === "ACTIVE" && /* @__PURE__ */ K("span", {
1871
1873
  className: "flex items-center gap-1",
1872
- children: [/* @__PURE__ */ G(ue, {
1874
+ children: [/* @__PURE__ */ G(de, {
1873
1875
  size: 12,
1874
1876
  className: "text-status-success-text"
1875
1877
  }), m("devportal.noExpiration", "No expiration")]
@@ -1892,13 +1894,13 @@ var Le = [
1892
1894
  }, e.id))
1893
1895
  }) : /* @__PURE__ */ G(r, {
1894
1896
  illustration: "empty-people",
1895
- icon: /* @__PURE__ */ G(Te, { size: 32 }),
1897
+ icon: /* @__PURE__ */ G(Ee, { size: 32 }),
1896
1898
  title: m("devportal.noDelegations", "No delegations"),
1897
1899
  description: m("devportal.noDelegationsDescription", "Grant a delegation to allow this app to act on your behalf"),
1898
1900
  action: /* @__PURE__ */ K("button", {
1899
1901
  onClick: i,
1900
1902
  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",
1901
- children: [/* @__PURE__ */ G(V, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
1903
+ children: [/* @__PURE__ */ G(B, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
1902
1904
  })
1903
1905
  })
1904
1906
  ]
@@ -1978,7 +1980,7 @@ var Le = [
1978
1980
  ]
1979
1981
  }) : /* @__PURE__ */ G(r, {
1980
1982
  illustration: "empty-data",
1981
- icon: /* @__PURE__ */ G(F, { size: 32 }),
1983
+ icon: /* @__PURE__ */ G(ue, { size: 32 }),
1982
1984
  title: n("devportal.noAnalyticsData", "No analytics data"),
1983
1985
  description: n("devportal.noAnalyticsDataDescription", "Analytics data will appear here once the application starts receiving traffic.")
1984
1986
  })
@@ -2048,7 +2050,7 @@ var Le = [
2048
2050
  })] }), /* @__PURE__ */ K("button", {
2049
2051
  onClick: S,
2050
2052
  className: "flex items-center gap-2 rounded-md border px-3 py-1.5 text-sm font-medium hover:bg-accent transition-colors",
2051
- children: [/* @__PURE__ */ G(z, { size: 14 }), o("devportal.autoFillCredentials", "Auto-fill Credentials")]
2053
+ children: [/* @__PURE__ */ G(R, { size: 14 }), o("devportal.autoFillCredentials", "Auto-fill Credentials")]
2052
2054
  })]
2053
2055
  }),
2054
2056
  y && /* @__PURE__ */ K("div", {
@@ -2149,10 +2151,10 @@ var Le = [
2149
2151
  onClick: x,
2150
2152
  disabled: p,
2151
2153
  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",
2152
- children: [p ? /* @__PURE__ */ G(B, {
2154
+ children: [p ? /* @__PURE__ */ G(z, {
2153
2155
  size: 16,
2154
2156
  className: "animate-spin"
2155
- }) : /* @__PURE__ */ G(R, { size: 16 }), p ? o("devportal.executing", "Executing...") : o("devportal.executeQuery", "Execute Query")]
2157
+ }) : /* @__PURE__ */ G(L, { size: 16 }), p ? o("devportal.executing", "Executing...") : o("devportal.executeQuery", "Execute Query")]
2156
2158
  }),
2157
2159
  d && /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
2158
2160
  className: "block text-sm font-medium mb-1",
@@ -2187,12 +2189,12 @@ var Le = [
2187
2189
  alt: e,
2188
2190
  className: "w-full h-full object-cover",
2189
2191
  onError: () => p(!0)
2190
- }) : /* @__PURE__ */ G(U, {
2192
+ }) : /* @__PURE__ */ G(H, {
2191
2193
  size: 18,
2192
2194
  className: "text-text-secondary opacity-40"
2193
2195
  }), c && /* @__PURE__ */ K("div", {
2194
2196
  className: "absolute inset-0 bg-bg-overlay flex flex-col items-center justify-center gap-1",
2195
- children: [/* @__PURE__ */ G(B, {
2197
+ children: [/* @__PURE__ */ G(z, {
2196
2198
  size: 14,
2197
2199
  className: "animate-spin text-white"
2198
2200
  }), /* @__PURE__ */ K("span", {
@@ -2225,7 +2227,7 @@ var Le = [
2225
2227
  disabled: c,
2226
2228
  onClick: () => d.current?.click(),
2227
2229
  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",
2228
- children: [/* @__PURE__ */ G(U, { size: 11 }), c ? `Uploading… ${l}%` : "Upload image"]
2230
+ children: [/* @__PURE__ */ G(H, { size: 11 }), c ? `Uploading… ${l}%` : "Upload image"]
2229
2231
  }),
2230
2232
  u && /* @__PURE__ */ G("p", {
2231
2233
  className: "text-xs text-status-error-text",
@@ -2281,20 +2283,20 @@ var Le = [
2281
2283
  type: "button",
2282
2284
  onClick: () => f(t),
2283
2285
  className: "absolute top-1 right-1 rounded-full bg-bg-overlay text-white p-0.5 opacity-0 group-hover:opacity-100 transition-opacity",
2284
- children: /* @__PURE__ */ G(Oe, { size: 12 })
2286
+ children: /* @__PURE__ */ G(U, { size: 12 })
2285
2287
  })]
2286
2288
  }, t)), /* @__PURE__ */ G("button", {
2287
2289
  type: "button",
2288
2290
  disabled: i,
2289
2291
  onClick: () => s.current?.click(),
2290
2292
  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"),
2291
- children: i ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(B, {
2293
+ children: i ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(z, {
2292
2294
  size: 18,
2293
2295
  className: "animate-spin text-primary"
2294
2296
  }), /* @__PURE__ */ K("span", {
2295
2297
  className: "text-xs",
2296
2298
  children: [a, "%"]
2297
- })] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(U, { size: 18 }), /* @__PURE__ */ G("span", {
2299
+ })] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(H, { size: 18 }), /* @__PURE__ */ G("span", {
2298
2300
  className: "text-xs",
2299
2301
  children: "Add screenshot"
2300
2302
  })] })
@@ -2500,13 +2502,13 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2500
2502
  } finally {
2501
2503
  v(!1);
2502
2504
  }
2503
- }, { upload: ie, uploading: ae, progress: oe, error: A } = k(c, l, u, d, "/DevPortal/Assets"), { upload: j, uploading: le, progress: F, error: L } = k(c, l, u, d, "/DevPortal/Assets"), { upload: pe, uploading: me, progress: he, error: ge } = k(c, l, u, d, "/DevPortal/Assets"), z = Q.has(m.manifestItemType), _e = t.status === "SUBMITTED";
2505
+ }, { upload: ie, uploading: ae, progress: oe, error: A } = k(c, l, u, d, "/DevPortal/Assets"), { upload: j, uploading: le, progress: ue, error: I } = k(c, l, u, d, "/DevPortal/Assets"), { upload: me, uploading: he, progress: ge, error: _e } = k(c, l, u, d, "/DevPortal/Assets"), R = Q.has(m.manifestItemType), ve = t.status === "SUBMITTED";
2504
2506
  return /* @__PURE__ */ K("div", {
2505
2507
  className: "space-y-8 max-w-3xl",
2506
2508
  children: [
2507
2509
  t.status === "PUBLISHED" ? /* @__PURE__ */ K("div", {
2508
2510
  className: "flex items-start gap-3 rounded-lg border border-success/30 bg-success/10 px-4 py-3",
2509
- children: [/* @__PURE__ */ G(ue, {
2511
+ children: [/* @__PURE__ */ G(de, {
2510
2512
  size: 16,
2511
2513
  className: "text-success mt-0.5 shrink-0"
2512
2514
  }), /* @__PURE__ */ K("div", {
@@ -2523,11 +2525,11 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2523
2525
  ]
2524
2526
  })]
2525
2527
  })]
2526
- }) : _e ? /* @__PURE__ */ K("div", {
2528
+ }) : ve ? /* @__PURE__ */ K("div", {
2527
2529
  className: "flex items-center justify-between gap-3 rounded-lg border border-primary/30 bg-action-primary-bg/5 px-4 py-3",
2528
2530
  children: [/* @__PURE__ */ K("div", {
2529
2531
  className: "flex items-start gap-3",
2530
- children: [/* @__PURE__ */ G(fe, {
2532
+ children: [/* @__PURE__ */ G(pe, {
2531
2533
  size: 16,
2532
2534
  className: "text-primary mt-0.5 shrink-0"
2533
2535
  }), /* @__PURE__ */ K("div", {
@@ -2551,7 +2553,7 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2551
2553
  type: "button",
2552
2554
  onClick: s,
2553
2555
  className: "shrink-0 text-xs text-primary hover:underline font-medium flex items-center gap-1",
2554
- children: [p("devportal.viewStatus", "View Status"), /* @__PURE__ */ G(R, { size: 12 })]
2556
+ children: [p("devportal.viewStatus", "View Status"), /* @__PURE__ */ G(L, { size: 12 })]
2555
2557
  })]
2556
2558
  }) : /* @__PURE__ */ K("div", {
2557
2559
  className: "flex items-start gap-3 rounded-lg border border-warning/30 bg-warning/5 px-4 py-3",
@@ -2592,7 +2594,7 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2592
2594
  onChange: (e) => E("manifestDisplayName", e.target.value),
2593
2595
  placeholder: "My Awesome Node"
2594
2596
  }),
2595
- z && t.appType !== "WORKFLOW" && /* @__PURE__ */ G(ne, {
2597
+ R && t.appType !== "WORKFLOW" && /* @__PURE__ */ G(ne, {
2596
2598
  label: p("devportal.jsonContent", "Template Definition (JSON)"),
2597
2599
  value: m.manifestJsonContent,
2598
2600
  onChange: (e) => E("manifestJsonContent", e.target.value),
@@ -2600,7 +2602,7 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2600
2602
  placeholder: "{\n \"nodes\": [],\n \"edges\": []\n}",
2601
2603
  hint: p("devportal.jsonContentHint", "Paste the full JSON definition. Stored and applied directly — no zip needed.")
2602
2604
  }),
2603
- z && t.appType === "WORKFLOW" && /* @__PURE__ */ K("p", {
2605
+ R && t.appType === "WORKFLOW" && /* @__PURE__ */ K("p", {
2604
2606
  className: "text-sm text-text-secondary rounded-md bg-bg-sunken px-3 py-2",
2605
2607
  children: [
2606
2608
  "The Workflow Definition (JSON) is set per version. Go to the",
@@ -2638,8 +2640,8 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2638
2640
  aspectClass: "aspect-square",
2639
2641
  upload: j,
2640
2642
  uploading: le,
2641
- progress: F,
2642
- error: L
2643
+ progress: ue,
2644
+ error: I
2643
2645
  })]
2644
2646
  }),
2645
2647
  /* @__PURE__ */ G(O, {
@@ -2667,10 +2669,10 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2667
2669
  /* @__PURE__ */ G(Z, {
2668
2670
  urls: m.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean),
2669
2671
  onChange: (e) => E("screenshotsText", e.join("\n")),
2670
- upload: pe,
2671
- uploading: me,
2672
- progress: he,
2673
- error: ge
2672
+ upload: me,
2673
+ uploading: he,
2674
+ progress: ge,
2675
+ error: _e
2674
2676
  })
2675
2677
  ]
2676
2678
  })
@@ -2727,7 +2729,7 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2727
2729
  children: [
2728
2730
  b === "success" && /* @__PURE__ */ K("div", {
2729
2731
  className: "flex items-center gap-2 rounded-md border border-success/30 bg-success/10 px-3 py-2 text-sm text-success",
2730
- children: [/* @__PURE__ */ G(ue, {
2732
+ children: [/* @__PURE__ */ G(de, {
2731
2733
  size: 15,
2732
2734
  className: "shrink-0"
2733
2735
  }), p("devportal.storeListing.savedSuccess", "Store listing saved successfully.")]
@@ -2748,10 +2750,10 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2748
2750
  disabled: g || !D || !w,
2749
2751
  title: D ? w ? void 0 : p("devportal.storeListing.noChanges", "All changes saved — edit any field to save again") : p("devportal.storeListing.requiredFieldsHint", "Fill in Short Description, Privacy Policy URL, and Terms of Service URL to save"),
2750
2752
  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",
2751
- children: g ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(B, {
2753
+ children: g ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(z, {
2752
2754
  size: 16,
2753
2755
  className: "animate-spin"
2754
- }), p("devportal.saving", "Saving…")] }) : w ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(Ce, { size: 16 }), p("devportal.saveStoreListing", "Save Store Listing")] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(I, { size: 16 }), p("devportal.saved", "Saved")] })
2756
+ }), p("devportal.saving", "Saving…")] }) : w ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(we, { size: 16 }), p("devportal.saveStoreListing", "Save Store Listing")] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(F, { size: 16 }), p("devportal.saved", "Saved")] })
2755
2757
  }),
2756
2758
  !D && /* @__PURE__ */ G("p", {
2757
2759
  className: "text-xs text-text-secondary",
@@ -2761,13 +2763,13 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2761
2763
  type: "button",
2762
2764
  onClick: a,
2763
2765
  className: "inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline underline-offset-2",
2764
- children: [p("devportal.nextUploadVersion", "Next: Upload a Version"), /* @__PURE__ */ G(de, { size: 15 })]
2766
+ children: [p("devportal.nextUploadVersion", "Next: Upload a Version"), /* @__PURE__ */ G(fe, { size: 15 })]
2765
2767
  }),
2766
2768
  (!r || n > 0) && !i && o && /* @__PURE__ */ K("button", {
2767
2769
  type: "button",
2768
2770
  onClick: o,
2769
2771
  className: "inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline underline-offset-2",
2770
- children: [p("devportal.nextSetPricing", "Next: Set Pricing"), /* @__PURE__ */ G(de, { size: 15 })]
2772
+ children: [p("devportal.nextSetPricing", "Next: Set Pricing"), /* @__PURE__ */ G(fe, { size: 15 })]
2771
2773
  })
2772
2774
  ]
2773
2775
  })
@@ -2808,199 +2810,282 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2808
2810
  target: "_blank",
2809
2811
  rel: "noopener noreferrer",
2810
2812
  className: "flex items-center gap-2 text-sm text-primary hover:underline",
2811
- children: [/* @__PURE__ */ G(R, { size: 14 }), e]
2812
- }), ct = [
2813
- {
2814
- id: "auth",
2813
+ children: [/* @__PURE__ */ G(L, { size: 14 }), e]
2814
+ }), ct = {
2815
+ auth: {
2815
2816
  label: "Authentication",
2816
2817
  description: "User identity and session management"
2817
2818
  },
2818
- {
2819
- id: "billing",
2819
+ billing: {
2820
2820
  label: "Billing",
2821
2821
  description: "Billing accounts and subscriptions"
2822
2822
  },
2823
- {
2824
- id: "files",
2823
+ files: {
2825
2824
  label: "Files",
2826
2825
  description: "File storage and management"
2827
2826
  },
2828
- {
2829
- id: "tags",
2827
+ tags: {
2830
2828
  label: "Tags",
2831
2829
  description: "Tags and labels on resources"
2832
2830
  },
2833
- {
2834
- id: "calendar",
2831
+ calendar: {
2835
2832
  label: "Calendar",
2836
2833
  description: "Events and scheduling"
2837
2834
  },
2838
- {
2839
- id: "workflows",
2835
+ workflows: {
2840
2836
  label: "Workflows",
2841
2837
  description: "Automation workflows"
2842
2838
  },
2843
- {
2844
- id: "channels",
2839
+ channels: {
2845
2840
  label: "Channels",
2846
2841
  description: "Messaging channels"
2847
2842
  },
2848
- {
2849
- id: "notifications",
2843
+ notifications: {
2850
2844
  label: "Notifications",
2851
2845
  description: "Platform notifications"
2852
2846
  },
2853
- {
2854
- id: "users",
2847
+ users: {
2855
2848
  label: "Users & Members",
2856
2849
  description: "Workspace members and profiles"
2857
2850
  },
2858
- {
2859
- id: "workspaces",
2851
+ workspaces: {
2860
2852
  label: "Workspaces",
2861
2853
  description: "Workspace settings and metadata"
2862
2854
  },
2863
- {
2864
- id: "content",
2855
+ content: {
2865
2856
  label: "Content",
2866
2857
  description: "Pages, documents, and content"
2867
2858
  },
2868
- {
2869
- id: "analytics",
2859
+ analytics: {
2870
2860
  label: "Analytics",
2871
2861
  description: "Usage analytics and reporting"
2872
2862
  },
2873
- {
2874
- id: "webhooks",
2863
+ webhooks: {
2875
2864
  label: "Webhooks",
2876
2865
  description: "Webhook subscriptions"
2877
2866
  },
2878
- {
2879
- id: "rbac",
2867
+ rbac: {
2880
2868
  label: "Roles & Permissions",
2881
2869
  description: "Access control configuration"
2882
2870
  }
2883
- ];
2884
- function lt(e) {
2885
- let t = Object.fromEntries(ct.map((e) => [e.id, "none"]));
2886
- if (!e || !Array.isArray(e.permissions)) return t;
2887
- for (let n of e.permissions) n && typeof n == "object" && n.resource in t && (t[n.resource] = n.level === "write" ? "write" : "read");
2871
+ }, lt = Object.keys(ct);
2872
+ function ut(e) {
2873
+ if (!e || !Array.isArray(e.permissions)) return [];
2874
+ let t = [];
2875
+ for (let n of e.permissions) n && typeof n == "object" && typeof n.resource == "string" && n.resource && t.push({
2876
+ resource: n.resource,
2877
+ level: n.level === "write" ? "write" : "read"
2878
+ });
2888
2879
  return t;
2889
2880
  }
2890
- function ut(e) {
2891
- let t = Object.fromEntries(ct.map((e) => [e.id, "none"]));
2881
+ function dt(e) {
2882
+ let t = [];
2892
2883
  for (let n of e) {
2893
- let [e, r] = n.split(":");
2894
- r && r in t && (t[r] = e === "write" ? "write" : "read");
2884
+ let e = n.indexOf(":");
2885
+ if (e === -1) continue;
2886
+ let r = n.slice(0, e), i = n.slice(e + 1);
2887
+ i && t.push({
2888
+ resource: i,
2889
+ level: r === "write" ? "write" : "read"
2890
+ });
2895
2891
  }
2896
2892
  return t;
2897
2893
  }
2898
- function dt(e) {
2899
- return !e || !Array.isArray(e.permissions) ? !1 : e.permissions.some((e) => e && typeof e == "object");
2894
+ function ft(e, t) {
2895
+ if (e.length > 0) return e;
2896
+ let n = /* @__PURE__ */ new Set();
2897
+ return t.filter((e) => n.has(e.resource) ? !1 : (n.add(e.resource), !0));
2900
2898
  }
2901
- var ft = ({ app: e, versionScopes: t }) => {
2902
- let n = e.manifest ?? {}, [r, i] = N(() => dt(n) ? lt(n) : t && t.length > 0 ? ut(t) : lt(n)), [a, o] = N(!1), [s, c] = N(!1), [l] = _(), u = (e, t) => {
2903
- c(!1), i((n) => ({
2899
+ var pt = ({ level: e, onChange: t }) => /* @__PURE__ */ G("div", {
2900
+ className: "flex items-center gap-0.5 rounded-md border border-border-subtle bg-bg-sunken/50 p-0.5",
2901
+ children: ["read", "write"].map((n) => /* @__PURE__ */ G("button", {
2902
+ type: "button",
2903
+ onClick: () => t(n),
2904
+ className: `rounded px-2.5 py-1 text-xs font-medium transition-colors whitespace-nowrap ${e === n ? "bg-bg-base text-text-primary shadow-sm" : "text-text-secondary hover:text-text-primary"}`,
2905
+ children: n === "read" ? "Read" : "Read & Write"
2906
+ }, n))
2907
+ }), mt = ({ app: e, versionScopes: t, locked: n = !1, onNavigateToVersions: r }) => {
2908
+ let i = e.manifest ?? {}, [a, o] = N(() => ft(ut(i), dt(t ?? []))), [s, c] = N(!1), [l, u] = N(""), [d, f] = N("read"), [p, m] = N(!1), [h, g] = N(!1), [v] = _(), b = (e, t) => {
2909
+ g(!1), o((n) => n.map((n) => n.resource === e ? {
2904
2910
  ...n,
2905
- [e]: t
2906
- }));
2907
- }, d = async () => {
2908
- o(!0);
2911
+ level: t
2912
+ } : n));
2913
+ }, x = (e) => {
2914
+ g(!1), o((t) => t.filter((t) => t.resource !== e));
2915
+ }, S = () => {
2916
+ let e = l.trim().toLowerCase().replace(/\s+/g, "-");
2917
+ !e || a.some((t) => t.resource === e) || (o((t) => [...t, {
2918
+ resource: e,
2919
+ level: d
2920
+ }]), u(""), f("read"), c(!1), g(!1));
2921
+ }, C = async () => {
2922
+ m(!0);
2909
2923
  try {
2910
- let t = Object.entries(r).filter(([, e]) => e !== "none").map(([e, t]) => ({
2911
- resource: e,
2912
- level: t
2913
- }));
2914
- await l({ variables: {
2924
+ await v({ variables: {
2915
2925
  id: e.id,
2916
2926
  input: { manifest: {
2917
- ...n,
2918
- permissions: t
2927
+ ...i,
2928
+ permissions: a.map(({ resource: e, level: t }) => ({
2929
+ resource: e,
2930
+ level: t
2931
+ }))
2919
2932
  } }
2920
- } }), c(!0);
2933
+ } }), g(!0);
2921
2934
  } finally {
2922
- o(!1);
2935
+ m(!1);
2923
2936
  }
2924
- }, f = {
2925
- none: "No access",
2926
- read: "Read",
2927
- write: "Read & Write"
2928
- }, p = [
2929
- "none",
2930
- "read",
2931
- "write"
2932
- ];
2937
+ }, w = /* @__PURE__ */ G("div", {
2938
+ className: "rounded-lg border border-border-subtle divide-y divide-border-subtle",
2939
+ children: a.map((e) => /* @__PURE__ */ K("div", {
2940
+ className: "flex items-center gap-3 px-4 py-3 hover:bg-bg-sunken/30 transition-colors",
2941
+ children: [/* @__PURE__ */ K("div", {
2942
+ className: "flex-1 min-w-0",
2943
+ children: [
2944
+ /* @__PURE__ */ G("p", {
2945
+ className: "text-sm font-medium text-text-primary",
2946
+ children: ct[e.resource]?.label ?? e.resource
2947
+ }),
2948
+ ct[e.resource]?.description && /* @__PURE__ */ G("p", {
2949
+ className: "text-xs text-text-secondary",
2950
+ children: ct[e.resource].description
2951
+ }),
2952
+ !ct[e.resource] && /* @__PURE__ */ G("p", {
2953
+ className: "text-xs text-text-tertiary font-mono",
2954
+ children: "custom scope"
2955
+ })
2956
+ ]
2957
+ }), n ? /* @__PURE__ */ G("span", {
2958
+ className: `rounded-full px-2.5 py-0.5 text-xs font-medium ${e.level === "write" ? "bg-status-warning-bg text-status-warning-text" : "bg-bg-sunken text-text-secondary"}`,
2959
+ children: e.level === "write" ? "Read & Write" : "Read"
2960
+ }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(pt, {
2961
+ level: e.level,
2962
+ onChange: (t) => b(e.resource, t)
2963
+ }), /* @__PURE__ */ G("button", {
2964
+ type: "button",
2965
+ onClick: () => x(e.resource),
2966
+ title: "Remove permission",
2967
+ className: "p-1.5 rounded text-text-tertiary hover:text-status-error-text hover:bg-status-error-bg-subtle transition-colors",
2968
+ children: /* @__PURE__ */ G(U, { size: 14 })
2969
+ })] })]
2970
+ }, e.resource))
2971
+ });
2933
2972
  return /* @__PURE__ */ G(y, {
2934
2973
  title: "Permissions",
2935
- description: "Define what platform data this app can request access to. Users see these when authorizing the app.",
2936
- children: /* @__PURE__ */ K("div", {
2974
+ description: "These are the permissions your app requests from users. Users see exactly this list when authorizing your app.",
2975
+ children: /* @__PURE__ */ G("div", {
2937
2976
  className: "space-y-4",
2938
- children: [
2939
- /* @__PURE__ */ G("div", {
2940
- className: "overflow-x-auto rounded-lg border border-border-subtle",
2941
- children: /* @__PURE__ */ K("table", {
2942
- className: "w-full text-sm",
2943
- children: [/* @__PURE__ */ G("thead", { children: /* @__PURE__ */ K("tr", {
2944
- className: "border-b border-border-subtle bg-bg-sunken/50",
2945
- children: [/* @__PURE__ */ G("th", {
2946
- className: "px-4 py-3 text-left font-medium text-text-secondary w-1/2",
2947
- children: "Resource"
2948
- }), p.map((e) => /* @__PURE__ */ G("th", {
2949
- className: "px-4 py-3 text-center font-medium text-text-secondary",
2950
- children: f[e]
2951
- }, e))]
2952
- }) }), /* @__PURE__ */ G("tbody", {
2953
- className: "divide-y divide-border",
2954
- children: ct.map((e) => /* @__PURE__ */ K("tr", {
2955
- className: "hover:bg-bg-sunken/30 transition-colors",
2956
- children: [/* @__PURE__ */ K("td", {
2957
- className: "px-4 py-3",
2958
- children: [/* @__PURE__ */ G("p", {
2959
- className: "font-medium text-text-primary",
2960
- children: e.label
2961
- }), /* @__PURE__ */ G("p", {
2962
- className: "text-xs text-text-secondary",
2963
- children: e.description
2964
- })]
2965
- }), p.map((t) => /* @__PURE__ */ G("td", {
2966
- className: "px-4 py-3 text-center",
2967
- children: /* @__PURE__ */ G("input", {
2968
- type: "radio",
2969
- name: `perm-${e.id}`,
2970
- value: t,
2971
- checked: r[e.id] === t,
2972
- onChange: () => u(e.id, t),
2973
- className: "h-4 w-4 accent-primary cursor-pointer"
2974
- })
2975
- }, t))]
2976
- }, e.id))
2977
- })]
2978
- })
2977
+ children: n ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ K("div", {
2978
+ className: "rounded-lg border border-status-warning-bg bg-status-warning-bg-subtle p-3 flex gap-2 text-sm",
2979
+ children: [/* @__PURE__ */ G(_e, {
2980
+ size: 15,
2981
+ className: "flex-shrink-0 mt-0.5 text-status-warning-text"
2982
+ }), /* @__PURE__ */ K("span", {
2983
+ className: "text-status-warning-text",
2984
+ children: [
2985
+ /* @__PURE__ */ G("strong", { children: "Permission changes require a new version." }),
2986
+ " Your app is live and users have already consented to the permissions below. To request new or fewer permissions, publish a new version — existing users will be shown what changed and asked to re-consent before the new version takes effect.",
2987
+ " ",
2988
+ r && /* @__PURE__ */ G("button", {
2989
+ type: "button",
2990
+ onClick: r,
2991
+ className: "underline font-medium hover:opacity-80 transition-opacity",
2992
+ children: "Go to Versions →"
2993
+ })
2994
+ ]
2995
+ })]
2996
+ }), a.length === 0 ? /* @__PURE__ */ G("div", {
2997
+ className: "rounded-lg border border-border-subtle border-dashed p-6 text-center text-sm text-text-secondary",
2998
+ children: "No permissions configured for this version."
2999
+ }) : w] }) : /* @__PURE__ */ K(W, { children: [
3000
+ a.length === 0 ? /* @__PURE__ */ K("div", {
3001
+ className: "rounded-lg border border-border-subtle border-dashed p-8 flex flex-col items-center gap-2 text-center text-text-secondary",
3002
+ children: [
3003
+ /* @__PURE__ */ G(V, {
3004
+ size: 28,
3005
+ className: "opacity-25"
3006
+ }),
3007
+ /* @__PURE__ */ G("p", {
3008
+ className: "text-sm font-medium text-text-primary",
3009
+ children: "No permissions configured"
3010
+ }),
3011
+ /* @__PURE__ */ G("p", {
3012
+ className: "text-xs",
3013
+ children: "Add the permissions your app needs to request from users."
3014
+ })
3015
+ ]
3016
+ }) : w,
3017
+ s ? /* @__PURE__ */ K("div", {
3018
+ className: "rounded-lg border border-border-subtle p-3 flex items-center gap-2 flex-wrap",
3019
+ children: [
3020
+ /* @__PURE__ */ G("input", {
3021
+ type: "text",
3022
+ value: l,
3023
+ onChange: (e) => u(e.target.value),
3024
+ onKeyDown: (e) => {
3025
+ e.key === "Enter" && S(), e.key === "Escape" && c(!1);
3026
+ },
3027
+ placeholder: "Resource (e.g. auth, files, widgets)",
3028
+ list: "perm-resource-suggestions",
3029
+ autoFocus: !0,
3030
+ className: "flex-1 min-w-40 rounded-md border border-border-subtle bg-bg-base px-3 py-1.5 text-sm focus:outline-none focus:ring-1 focus:ring-primary"
3031
+ }),
3032
+ /* @__PURE__ */ G("datalist", {
3033
+ id: "perm-resource-suggestions",
3034
+ children: lt.filter((e) => !a.some((t) => t.resource === e)).map((e) => /* @__PURE__ */ G("option", {
3035
+ value: e,
3036
+ children: ct[e].label
3037
+ }, e))
3038
+ }),
3039
+ /* @__PURE__ */ G(pt, {
3040
+ level: d,
3041
+ onChange: f
3042
+ }),
3043
+ /* @__PURE__ */ G("button", {
3044
+ type: "button",
3045
+ onClick: S,
3046
+ disabled: !l.trim(),
3047
+ className: "px-3 py-1.5 rounded-md bg-action-primary-bg text-action-primary-text text-xs font-medium hover:bg-action-primary-bg/90 disabled:opacity-50 transition-colors",
3048
+ children: "Add"
3049
+ }),
3050
+ /* @__PURE__ */ G("button", {
3051
+ type: "button",
3052
+ onClick: () => {
3053
+ c(!1), u("");
3054
+ },
3055
+ className: "p-1.5 rounded text-text-secondary hover:text-text-primary transition-colors",
3056
+ children: /* @__PURE__ */ G(U, { size: 14 })
3057
+ })
3058
+ ]
3059
+ }) : /* @__PURE__ */ K("button", {
3060
+ type: "button",
3061
+ onClick: () => c(!0),
3062
+ className: "flex items-center gap-1.5 text-sm text-text-secondary hover:text-text-primary transition-colors",
3063
+ children: [/* @__PURE__ */ G(B, { size: 14 }), "Add permission"]
2979
3064
  }),
2980
3065
  /* @__PURE__ */ K("div", {
2981
3066
  className: "rounded-lg border border-border-subtle bg-bg-sunken/30 p-3 flex gap-2 text-xs text-text-secondary",
2982
- children: [/* @__PURE__ */ G(ge, {
3067
+ children: [/* @__PURE__ */ G(_e, {
2983
3068
  size: 14,
2984
3069
  className: "flex-shrink-0 mt-0.5"
2985
3070
  }), /* @__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."] })]
2986
3071
  }),
2987
3072
  /* @__PURE__ */ K("div", {
2988
3073
  className: "flex items-center justify-end gap-3",
2989
- children: [s && /* @__PURE__ */ K("span", {
3074
+ children: [h && /* @__PURE__ */ K("span", {
2990
3075
  className: "flex items-center gap-1.5 text-sm text-status-success-text",
2991
- children: [/* @__PURE__ */ G(ue, { size: 14 }), "Saved"]
3076
+ children: [/* @__PURE__ */ G(de, { size: 14 }), "Saved"]
2992
3077
  }), /* @__PURE__ */ K("button", {
2993
3078
  type: "button",
2994
- onClick: () => void d(),
2995
- disabled: a,
3079
+ onClick: () => void C(),
3080
+ disabled: p,
2996
3081
  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",
2997
- children: [a ? /* @__PURE__ */ G(B, {
3082
+ children: [p ? /* @__PURE__ */ G(z, {
2998
3083
  size: 14,
2999
3084
  className: "animate-spin"
3000
- }) : /* @__PURE__ */ G(H, { size: 14 }), "Save Permissions"]
3085
+ }) : /* @__PURE__ */ G(V, { size: 14 }), "Save Permissions"]
3001
3086
  })]
3002
3087
  })
3003
- ]
3088
+ ] })
3004
3089
  })
3005
3090
  });
3006
3091
  };