@burdenoff/microfe-devportal 2026.917.2 → 2026.917.3

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.
@@ -1,31 +1,31 @@
1
1
  import { useDevportal as e } from "../providers/DevportalProvider.js";
2
- import { cn as t } from "../utils/cn.js";
3
- import { LoadingState as n } from "../components/LoadingState.js";
4
- import { EmptyState as ee } from "../components/EmptyState.js";
5
- import { useDeactivateAppMutation as te, useDeleteApplicationMutation as ne, useGetApplicationQuery as re, useRotateApplicationSigningSecretMutation as ie, useUpdateApplicationMutation as ae } from "../../generated/global-operations.js";
2
+ import { LoadingState as t } from "../components/LoadingState.js";
3
+ import { EmptyState as n } from "../components/EmptyState.js";
4
+ import { useDeactivateAppMutation as ee, useDeleteApplicationMutation as te, useGetApplicationQuery as ne, useRotateApplicationSigningSecretMutation as re, useUpdateApplicationMutation as ie } from "../../generated/global-operations.js";
6
5
  import { PageLayout as r, PageSection as i } from "../components/PageLayout.js";
7
6
  import { APP_TYPE_LABELS as a } from "../utils/constants.js";
8
- import { StatusBadge as oe } from "../components/StatusBadge.js";
9
- import { nativeImpact as se, nativeNotify as o } from "../../utils/nativeBridge.js";
10
- import { CheckboxField as ce, InputField as s, SelectField as c, TagInput as l, TextareaField as le } from "../components/FormField.js";
7
+ import { StatusBadge as ae } from "../components/StatusBadge.js";
8
+ import { nativeImpact as oe, nativeNotify as o } from "../../utils/nativeBridge.js";
9
+ import { CheckboxField as se, InputField as s, SelectField as c, TagInput as l, TextareaField as ce } from "../components/FormField.js";
11
10
  import { ConfirmDialog as u } from "../components/ConfirmDialog.js";
12
- import { PermissionGuard as ue } from "../components/PermissionGuard.js";
13
- import { MarkdownEditor as de } from "../components/MarkdownEditor.js";
11
+ import { PermissionGuard as le } from "../components/PermissionGuard.js";
12
+ import { MarkdownEditor as ue } from "../components/MarkdownEditor.js";
14
13
  import "../components/index.js";
15
14
  import { useDevportalPermission as d } from "../hooks/usePermission.js";
16
- import { useProducts as fe } from "../hooks/useProducts.js";
15
+ import { useProducts as de } from "../hooks/useProducts.js";
17
16
  import "../hooks/index.js";
18
17
  import { DEVPORTAL_PERMISSIONS as f } from "../constants/permissions.js";
18
+ import { MultiSelectCombobox as fe } from "../components/MultiSelectCombobox.js";
19
19
  import { useEffect as p, useState as m } from "react";
20
- import { AlertCircle as pe, AlertTriangle as me, AppWindow as he, Archive as ge, Check as h, Copy as _e, Eye as ve, EyeOff as ye, Power as be, RefreshCw as g, Save as xe, Send as Se, Trash2 as Ce } from "lucide-react";
21
- import { useParams as we } from "react-router";
22
- import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
23
- import { useI18n as Te } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
20
+ import { AlertCircle as pe, AlertTriangle as me, AppWindow as he, Archive as ge, Check as _e, Copy as ve, Eye as ye, EyeOff as be, Power as xe, RefreshCw as h, Save as Se, Send as Ce, Trash2 as we } from "lucide-react";
21
+ import { useParams as Te } from "react-router";
22
+ import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
23
+ import { useI18n as Ee } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
24
24
  //#region src/devportal/pages/EditApplicationPage.tsx
25
- var Ee = Object.entries(a).map(([e, t]) => ({
25
+ var De = Object.entries(a).map(([e, t]) => ({
26
26
  value: e,
27
27
  label: t
28
- })), b = [
28
+ })), y = [
29
29
  {
30
30
  value: "PUBLIC",
31
31
  label: "Public — listed in the marketplace after review"
@@ -38,10 +38,10 @@ var Ee = Object.entries(a).map(([e, t]) => ({
38
38
  value: "INTERNAL",
39
39
  label: "Internal — visible to your entire dev org"
40
40
  }
41
- ], De = [...b, {
41
+ ], Oe = [...y, {
42
42
  value: "UNLISTED",
43
43
  label: "Unlisted — shareable via link, not listed in store"
44
- }], Oe = [
44
+ }], ke = [
45
45
  {
46
46
  value: "ai",
47
47
  label: "AI & Automation"
@@ -71,7 +71,7 @@ var Ee = Object.entries(a).map(([e, t]) => ({
71
71
  label: "Triggers"
72
72
  }
73
73
  ];
74
- function ke(e) {
74
+ function Ae(e) {
75
75
  return e ? {
76
76
  id: e.id,
77
77
  name: e.name,
@@ -114,20 +114,20 @@ function ke(e) {
114
114
  updatedAt: e.updatedAt
115
115
  } : null;
116
116
  }
117
- var x = () => {
118
- let { navigate: a, basePath: x } = e(), { appId: S } = we(), { t: Ae } = Te(), { products: C } = fe(), { allowed: w } = d(f.APP_UPDATE), { allowed: T } = d(f.APP_DELETE), E = (e, t) => {
119
- let n = Ae(e);
117
+ var b = () => {
118
+ let { navigate: a, basePath: b } = e(), { appId: x } = Te(), { t: S } = Ee(), { products: C } = de(), { allowed: w } = d(f.APP_UPDATE), { allowed: T } = d(f.APP_DELETE), E = (e, t) => {
119
+ let n = S(e);
120
120
  return n === e ? t : n;
121
- }, [D, O] = m(!1), [k, A] = m({}), [je, j] = m(!1), [Me, M] = m(!1), [N, P] = m(!1), [F, I] = m(!1), [L, R] = m(!1), [z, B] = m(!1), [V, Ne] = m(null), [Pe, H] = m(!1), { data: U, loading: Fe, error: W, refetch: Ie } = re({
122
- variables: { id: S },
123
- skip: !S
124
- }), [G] = ae(), [Le] = ne(), [Re] = te(), [ze] = ie(), K = ke(U?.application);
121
+ }, [D, O] = m(!1), [k, A] = m({}), [je, j] = m(!1), [Me, M] = m(!1), [N, P] = m(!1), [F, I] = m(!1), [L, R] = m(!1), [z, B] = m(!1), [V, Ne] = m(null), [Pe, H] = m(!1), { data: U, loading: Fe, error: W, refetch: Ie } = ne({
122
+ variables: { id: x },
123
+ skip: !x
124
+ }), [G] = ie(), [Le] = te(), [Re] = ee(), [ze] = re(), K = Ae(U?.application);
125
125
  p(() => {
126
126
  let e = K?.name;
127
- if (!S || !e) return;
127
+ if (!x || !e) return;
128
128
  let t = window.__breadcrumbRegistry;
129
- return t?.register(S, e), () => t?.unregister(S);
130
- }, [S, K?.name]);
129
+ return t?.register(x, e), () => t?.unregister(x);
130
+ }, [x, K?.name]);
131
131
  let [q, J] = m({
132
132
  name: "",
133
133
  slug: "",
@@ -175,7 +175,7 @@ var x = () => {
175
175
  }
176
176
  }, [U?.application]);
177
177
  let Z = (e) => {
178
- a?.(`${x}${e}`);
178
+ a?.(`${b}${e}`);
179
179
  }, Q = (e, t) => {
180
180
  J((n) => ({
181
181
  ...n,
@@ -185,10 +185,10 @@ var x = () => {
185
185
  [e]: void 0
186
186
  }));
187
187
  }, $ = async () => {
188
- if (S) {
188
+ if (x) {
189
189
  B(!0);
190
190
  try {
191
- let e = (await ze({ variables: { id: S } })).data?.rotateApplicationSigningSecret?.signingSecret;
191
+ let e = (await ze({ variables: { id: x } })).data?.rotateApplicationSigningSecret?.signingSecret;
192
192
  e && (Ne(e), R(!0));
193
193
  } catch {
194
194
  o("error");
@@ -235,7 +235,7 @@ var x = () => {
235
235
  }
236
236
  }, Ue = async () => {
237
237
  if (K) {
238
- se("medium");
238
+ oe("medium");
239
239
  try {
240
240
  await Le({ variables: { id: K.id } }), o("success"), Z("/apps");
241
241
  } catch (e) {
@@ -258,84 +258,84 @@ var x = () => {
258
258
  console.error("Failed to deactivate application:", e);
259
259
  }
260
260
  };
261
- if (Fe) return /* @__PURE__ */ v(n, { message: E("devportal.loadingApplication", "Loading application...") });
262
- if (W) return /* @__PURE__ */ v(r, {
261
+ if (Fe) return /* @__PURE__ */ _(t, { message: E("devportal.loadingApplication", "Loading application...") });
262
+ if (W) return /* @__PURE__ */ _(r, {
263
263
  title: E("devportal.error", "Error"),
264
- backLink: `${x}/apps`,
264
+ backLink: `${b}/apps`,
265
265
  backLabel: E("devportal.backToApplications", "Back to Applications"),
266
- children: /* @__PURE__ */ y("div", {
266
+ children: /* @__PURE__ */ v("div", {
267
267
  className: "flex flex-col items-center justify-center py-12 text-center",
268
268
  children: [
269
- /* @__PURE__ */ v(pe, {
269
+ /* @__PURE__ */ _(pe, {
270
270
  size: 48,
271
271
  className: "text-status-error-text mb-4"
272
272
  }),
273
- /* @__PURE__ */ v("h3", {
273
+ /* @__PURE__ */ _("h3", {
274
274
  className: "text-lg font-semibold mb-2",
275
275
  children: E("devportal.failedToLoadApplication", "Failed to load application")
276
276
  }),
277
- /* @__PURE__ */ v("p", {
277
+ /* @__PURE__ */ _("p", {
278
278
  className: "text-sm text-text-secondary",
279
279
  children: W.message
280
280
  })
281
281
  ]
282
282
  })
283
283
  });
284
- if (!K) return /* @__PURE__ */ v(r, {
284
+ if (!K) return /* @__PURE__ */ _(r, {
285
285
  title: E("devportal.notFound", "Not Found"),
286
- backLink: `${x}/apps`,
286
+ backLink: `${b}/apps`,
287
287
  backLabel: E("devportal.backToApplications", "Back to Applications"),
288
- children: /* @__PURE__ */ v(ee, {
288
+ children: /* @__PURE__ */ _(n, {
289
289
  illustration: "empty-generic",
290
- icon: /* @__PURE__ */ v(he, { size: 48 }),
290
+ icon: /* @__PURE__ */ _(he, { size: 48 }),
291
291
  title: E("devportal.applicationNotFound", "Application not found"),
292
292
  description: E("devportal.applicationNotFoundDescription", "The application you're looking for doesn't exist or you don't have access to it.")
293
293
  })
294
294
  });
295
295
  let Ke = K.status === "DRAFT" || K.status === "REJECTED", qe = K.status === "PUBLISHED", Je = K.status === "ACTIVE" || K.status === "PUBLISHED";
296
- return /* @__PURE__ */ v(ue, {
296
+ return /* @__PURE__ */ _(le, {
297
297
  authOnly: !0,
298
- children: /* @__PURE__ */ y(r, {
298
+ children: /* @__PURE__ */ v(r, {
299
299
  title: `${E("devportal.editAppTitlePrefix", "Edit:")} ${K.name}`,
300
300
  description: E("devportal.editAppDescription", "Update your application settings"),
301
301
  purpose: E("devportal.editAppPurpose", "Change how this app appears and behaves — its name, description, classification, links, and lifecycle settings. Use the danger zone at the bottom to deprecate or delete it when it is retired."),
302
- backLink: `${x}/apps/${K.id}`,
302
+ backLink: `${b}/apps/${K.id}`,
303
303
  backLabel: E("devportal.backToApplication", "Back to Application"),
304
- actions: /* @__PURE__ */ v("div", {
304
+ actions: /* @__PURE__ */ _("div", {
305
305
  className: "flex items-center gap-2",
306
- children: /* @__PURE__ */ v(oe, {
306
+ children: /* @__PURE__ */ _(ae, {
307
307
  status: K.status,
308
308
  type: "app"
309
309
  })
310
310
  }),
311
311
  children: [
312
- /* @__PURE__ */ y("form", {
312
+ /* @__PURE__ */ v("form", {
313
313
  onSubmit: He,
314
314
  className: "space-y-8 max-w-3xl",
315
315
  children: [
316
- K.status === "PUBLISHED" && /* @__PURE__ */ y("div", {
316
+ K.status === "PUBLISHED" && /* @__PURE__ */ v("div", {
317
317
  className: "rounded-lg border border-border-subtle bg-status-warning-bg-subtle p-4 flex gap-3",
318
- children: [/* @__PURE__ */ v(me, {
318
+ children: [/* @__PURE__ */ _(me, {
319
319
  size: 20,
320
320
  className: "text-status-warning-text flex-shrink-0 mt-0.5"
321
- }), /* @__PURE__ */ y("div", {
321
+ }), /* @__PURE__ */ v("div", {
322
322
  className: "text-sm text-status-warning-text",
323
- children: [/* @__PURE__ */ v("p", {
323
+ children: [/* @__PURE__ */ _("p", {
324
324
  className: "font-medium",
325
325
  children: E("devportal.appIsPublished", "This application is published")
326
- }), /* @__PURE__ */ v("p", {
326
+ }), /* @__PURE__ */ _("p", {
327
327
  className: "mt-1 text-status-warning-text",
328
328
  children: E("devportal.publishedAppChangesWarning", "Changes to published apps may require re-review. Major changes will put the app back into review status.")
329
329
  })]
330
330
  })]
331
331
  }),
332
- /* @__PURE__ */ v(i, {
332
+ /* @__PURE__ */ _(i, {
333
333
  title: E("devportal.basicInformation", "Basic Information"),
334
334
  description: E("devportal.basicInformationDescription", "Core details about your application"),
335
- children: /* @__PURE__ */ y("div", {
335
+ children: /* @__PURE__ */ v("div", {
336
336
  className: "space-y-4",
337
337
  children: [
338
- /* @__PURE__ */ v(s, {
338
+ /* @__PURE__ */ _(s, {
339
339
  label: E("devportal.applicationName", "Application Name"),
340
340
  value: q.name,
341
341
  onChange: (e) => Q("name", e.target.value),
@@ -343,7 +343,7 @@ var x = () => {
343
343
  required: !0,
344
344
  error: k.name
345
345
  }),
346
- /* @__PURE__ */ v(s, {
346
+ /* @__PURE__ */ _(s, {
347
347
  label: E("devportal.slug", "Slug"),
348
348
  value: q.slug,
349
349
  onChange: (e) => Q("slug", e.target.value.toLowerCase()),
@@ -352,7 +352,7 @@ var x = () => {
352
352
  error: k.slug,
353
353
  hint: E("devportal.slugChangeWarning", "Changing the slug may break existing integrations")
354
354
  }),
355
- /* @__PURE__ */ v(le, {
355
+ /* @__PURE__ */ _(ce, {
356
356
  label: E("devportal.shortDescription", "Short Description"),
357
357
  value: q.shortDescription,
358
358
  onChange: (e) => Q("shortDescription", e.target.value),
@@ -362,7 +362,7 @@ var x = () => {
362
362
  hint: `${q.shortDescription.length}/200 ${E("devportal.characters", "characters")}`,
363
363
  rows: 2
364
364
  }),
365
- /* @__PURE__ */ v(de, {
365
+ /* @__PURE__ */ _(ue, {
366
366
  label: E("devportal.fullDescription", "Full Description"),
367
367
  value: q.description,
368
368
  onChange: (e) => Q("description", e),
@@ -373,58 +373,58 @@ var x = () => {
373
373
  ]
374
374
  })
375
375
  }),
376
- /* @__PURE__ */ y(i, {
376
+ /* @__PURE__ */ v(i, {
377
377
  title: E("devportal.classification", "Classification"),
378
378
  description: E("devportal.classificationDescription", "Categorize your application"),
379
379
  children: [
380
- /* @__PURE__ */ y("div", {
380
+ /* @__PURE__ */ v("div", {
381
381
  className: "grid gap-4 sm:grid-cols-2",
382
382
  children: [
383
- /* @__PURE__ */ v(c, {
383
+ /* @__PURE__ */ _(c, {
384
384
  label: E("devportal.applicationType", "Application Type"),
385
385
  value: q.appType,
386
386
  onChange: (e) => Q("appType", e.target.value),
387
- options: Ee,
387
+ options: De,
388
388
  required: !0,
389
389
  error: k.appType
390
390
  }),
391
- /* @__PURE__ */ v(c, {
391
+ /* @__PURE__ */ _(c, {
392
392
  label: E("devportal.category", "Category"),
393
393
  value: q.category,
394
394
  onChange: (e) => Q("category", e.target.value),
395
- options: Oe,
395
+ options: ke,
396
396
  required: !0,
397
397
  error: k.category
398
398
  }),
399
- /* @__PURE__ */ v(c, {
399
+ /* @__PURE__ */ _(c, {
400
400
  label: E("devportal.visibility", "Visibility"),
401
401
  value: q.visibility,
402
402
  onChange: (e) => Q("visibility", e.target.value),
403
- options: K?.appType === "WORKFLOW" ? De : b,
403
+ options: K?.appType === "WORKFLOW" ? Oe : y,
404
404
  hint: q.visibility === "PUBLIC" ? E("devportal.visibilityHintPublic", "Listed in the marketplace after review approval — anyone can discover and install it") : q.visibility === "UNLISTED" ? E("devportal.visibilityHintUnlisted", "Not in the store, but accessible via a direct link. You can still submit for marketplace review") : q.visibility === "INTERNAL" ? E("devportal.visibilityHintInternal", "Visible to all members of your developer organization — no one outside can access it") : E("devportal.visibilityHintPrivate", "Only you (the creator) can see this — other org members cannot access it")
405
405
  })
406
406
  ]
407
407
  }),
408
- /* @__PURE__ */ v(l, {
408
+ /* @__PURE__ */ _(l, {
409
409
  label: E("devportal.tags", "Tags"),
410
410
  value: q.tags,
411
411
  onChange: (e) => Q("tags", e),
412
412
  placeholder: E("devportal.addTagsPlaceholder", "Add tags (press Enter)")
413
413
  }),
414
- /* @__PURE__ */ v(l, {
414
+ /* @__PURE__ */ _(l, {
415
415
  label: E("devportal.keywords", "Keywords"),
416
416
  value: q.keywords,
417
417
  onChange: (e) => Q("keywords", e),
418
418
  placeholder: E("devportal.addKeywordsPlaceholder", "Add keywords (press Enter)")
419
419
  }),
420
- (q.appType === "NODE" || q.appType === "WORKFLOW") && /* @__PURE__ */ y("div", {
420
+ (q.appType === "NODE" || q.appType === "WORKFLOW") && /* @__PURE__ */ v("div", {
421
421
  className: "space-y-2",
422
422
  children: [
423
- /* @__PURE__ */ v("label", {
423
+ /* @__PURE__ */ _("label", {
424
424
  className: "block text-sm font-medium text-text-primary",
425
425
  children: "Compatible Products"
426
426
  }),
427
- /* @__PURE__ */ y("p", {
427
+ /* @__PURE__ */ v("p", {
428
428
  className: "text-xs text-text-secondary",
429
429
  children: [
430
430
  "Select which products this ",
@@ -433,76 +433,64 @@ var x = () => {
433
433
  "works with. Users will see it in those products' node stores."
434
434
  ]
435
435
  }),
436
- /* @__PURE__ */ v("div", {
437
- className: "flex flex-wrap gap-3",
438
- children: C.map((e) => {
439
- let n = Y.includes(e.slug);
440
- return /* @__PURE__ */ y("label", {
441
- className: t("flex items-center gap-2 cursor-pointer rounded-md border px-3 py-2 text-sm transition-colors", n ? "border-primary bg-primary/10 text-text-primary" : "border-border-subtle hover:border-border text-text-secondary hover:text-text-primary"),
442
- children: [
443
- /* @__PURE__ */ v("input", {
444
- type: "checkbox",
445
- className: "sr-only",
446
- checked: n,
447
- onChange: () => {
448
- X((t) => n ? t.filter((t) => t !== e.slug) : [...t, e.slug]), I(!0);
449
- }
450
- }),
451
- n && /* @__PURE__ */ v(h, {
452
- size: 14,
453
- className: "text-primary flex-shrink-0"
454
- }),
455
- e.name
456
- ]
457
- }, e.id);
458
- })
436
+ /* @__PURE__ */ _(fe, {
437
+ options: C.map((e) => ({
438
+ value: e.slug,
439
+ label: e.name
440
+ })),
441
+ selected: Y,
442
+ onChange: (e) => {
443
+ X(e), I(!0);
444
+ },
445
+ placeholder: "Select products…",
446
+ searchPlaceholder: "Search products…"
459
447
  })
460
448
  ]
461
449
  })
462
450
  ]
463
451
  }),
464
- /* @__PURE__ */ v(i, {
452
+ /* @__PURE__ */ _(i, {
465
453
  title: E("devportal.links", "Links"),
466
454
  description: E("devportal.linksDescription", "External resources for your application"),
467
- children: /* @__PURE__ */ y("div", {
455
+ children: /* @__PURE__ */ v("div", {
468
456
  className: "grid gap-4 sm:grid-cols-2",
469
457
  children: [
470
- /* @__PURE__ */ v(s, {
458
+ /* @__PURE__ */ _(s, {
471
459
  label: E("devportal.websiteUrl", "Website URL"),
472
460
  type: "url",
473
461
  value: q.websiteUrl,
474
462
  onChange: (e) => Q("websiteUrl", e.target.value),
475
463
  placeholder: E("devportal.websiteUrlPlaceholder", "https://example.com")
476
464
  }),
477
- /* @__PURE__ */ v(s, {
465
+ /* @__PURE__ */ _(s, {
478
466
  label: E("devportal.documentationUrl", "Documentation URL"),
479
467
  type: "url",
480
468
  value: q.documentationUrl,
481
469
  onChange: (e) => Q("documentationUrl", e.target.value),
482
470
  placeholder: E("devportal.documentationUrlPlaceholder", "https://docs.example.com")
483
471
  }),
484
- /* @__PURE__ */ v(s, {
472
+ /* @__PURE__ */ _(s, {
485
473
  label: E("devportal.supportUrl", "Support URL"),
486
474
  type: "url",
487
475
  value: q.supportUrl,
488
476
  onChange: (e) => Q("supportUrl", e.target.value),
489
477
  placeholder: E("devportal.supportUrlPlaceholder", "https://support.example.com")
490
478
  }),
491
- /* @__PURE__ */ v(s, {
479
+ /* @__PURE__ */ _(s, {
492
480
  label: E("devportal.githubUrl", "GitHub URL"),
493
481
  type: "url",
494
482
  value: q.githubUrl,
495
483
  onChange: (e) => Q("githubUrl", e.target.value),
496
484
  placeholder: E("devportal.githubUrlPlaceholder", "https://github.com/org/repo")
497
485
  }),
498
- /* @__PURE__ */ v(s, {
486
+ /* @__PURE__ */ _(s, {
499
487
  label: E("devportal.privacyPolicyUrl", "Privacy Policy URL"),
500
488
  type: "url",
501
489
  value: q.privacyPolicyUrl,
502
490
  onChange: (e) => Q("privacyPolicyUrl", e.target.value),
503
491
  placeholder: E("devportal.privacyPolicyUrlPlaceholder", "https://example.com/privacy")
504
492
  }),
505
- /* @__PURE__ */ v(s, {
493
+ /* @__PURE__ */ _(s, {
506
494
  label: E("devportal.termsOfServiceUrl", "Terms of Service URL"),
507
495
  type: "url",
508
496
  value: q.termsOfServiceUrl,
@@ -512,13 +500,13 @@ var x = () => {
512
500
  ]
513
501
  })
514
502
  }),
515
- (q.appType === "INTEGRATION" || q.appType === "API_INTEGRATION") && /* @__PURE__ */ v(i, {
503
+ (q.appType === "INTEGRATION" || q.appType === "API_INTEGRATION") && /* @__PURE__ */ _(i, {
516
504
  title: "Integration Setup",
517
505
  description: "Configure the endpoints for your integration. After a user installs, we redirect them to your callback URL so your server can complete the connection.",
518
- children: /* @__PURE__ */ y("div", {
506
+ children: /* @__PURE__ */ v("div", {
519
507
  className: "space-y-4",
520
508
  children: [
521
- /* @__PURE__ */ v(s, {
509
+ /* @__PURE__ */ _(s, {
522
510
  label: "Post-install Callback URL",
523
511
  type: "url",
524
512
  value: q.oauthAuthUrl,
@@ -526,7 +514,7 @@ var x = () => {
526
514
  placeholder: "https://yourapp.com/callback",
527
515
  hint: "Users land here after install with ?installation_id=xxx appended"
528
516
  }),
529
- /* @__PURE__ */ v(s, {
517
+ /* @__PURE__ */ _(s, {
530
518
  label: "Revoke URL",
531
519
  type: "url",
532
520
  value: q.oauthRevokeUrl,
@@ -536,19 +524,19 @@ var x = () => {
536
524
  }),
537
525
  (() => {
538
526
  let e = V ?? U?.application?.signingSecret, t = "boff_sk_" + "•".repeat(32);
539
- return /* @__PURE__ */ y("div", {
527
+ return /* @__PURE__ */ v("div", {
540
528
  className: "space-y-1.5",
541
529
  children: [
542
- /* @__PURE__ */ v("label", {
530
+ /* @__PURE__ */ _("label", {
543
531
  className: "block text-sm font-medium text-text-primary",
544
532
  children: "Signing Secret"
545
533
  }),
546
- /* @__PURE__ */ y("p", {
534
+ /* @__PURE__ */ v("p", {
547
535
  className: "text-xs text-text-secondary",
548
536
  children: [
549
537
  "Use this secret to authenticate",
550
538
  " ",
551
- /* @__PURE__ */ v("code", {
539
+ /* @__PURE__ */ _("code", {
552
540
  className: "font-mono text-xs bg-bg-sunken px-1 py-0.5 rounded",
553
541
  children: "verifyInstallation"
554
542
  }),
@@ -556,55 +544,55 @@ var x = () => {
556
544
  "calls from your integration server. Store it securely — it is only shown immediately after generation or rotation."
557
545
  ]
558
546
  }),
559
- e ? /* @__PURE__ */ y("div", {
547
+ e ? /* @__PURE__ */ v("div", {
560
548
  className: "flex items-center gap-2",
561
- children: [/* @__PURE__ */ y("div", {
549
+ children: [/* @__PURE__ */ v("div", {
562
550
  className: "flex-1 flex items-center gap-0 rounded-md border border-border-default bg-bg-sunken overflow-hidden",
563
551
  children: [
564
- /* @__PURE__ */ v("code", {
552
+ /* @__PURE__ */ _("code", {
565
553
  className: "flex-1 px-3 py-2 text-xs font-mono text-text-primary truncate",
566
554
  children: L ? e : t
567
555
  }),
568
- /* @__PURE__ */ v("button", {
556
+ /* @__PURE__ */ _("button", {
569
557
  type: "button",
570
558
  onClick: () => R((e) => !e),
571
559
  className: "px-2 py-2 text-text-secondary hover:text-text-primary border-l border-border-default",
572
560
  title: L ? "Hide" : "Reveal",
573
- children: v(L ? ye : ve, { size: 14 })
561
+ children: _(L ? be : ye, { size: 14 })
574
562
  }),
575
- /* @__PURE__ */ v("button", {
563
+ /* @__PURE__ */ _("button", {
576
564
  type: "button",
577
565
  onClick: () => Be(e),
578
566
  className: "px-2 py-2 text-text-secondary hover:text-text-primary border-l border-border-default",
579
567
  title: "Copy to clipboard",
580
- children: Pe ? /* @__PURE__ */ v(h, {
568
+ children: Pe ? /* @__PURE__ */ _(_e, {
581
569
  size: 14,
582
570
  className: "text-green-500"
583
- }) : /* @__PURE__ */ v(_e, { size: 14 })
571
+ }) : /* @__PURE__ */ _(ve, { size: 14 })
584
572
  })
585
573
  ]
586
- }), /* @__PURE__ */ y("button", {
574
+ }), /* @__PURE__ */ v("button", {
587
575
  type: "button",
588
576
  onClick: $,
589
577
  disabled: z,
590
578
  className: "flex items-center gap-1.5 px-3 py-2 text-xs rounded-md border border-border-default bg-bg-default text-text-primary hover:bg-bg-subtle disabled:opacity-50",
591
579
  title: "Rotate signing secret",
592
- children: [/* @__PURE__ */ v(g, {
580
+ children: [/* @__PURE__ */ _(h, {
593
581
  size: 12,
594
582
  className: z ? "animate-spin" : ""
595
583
  }), "Rotate"]
596
584
  })]
597
- }) : /* @__PURE__ */ y("button", {
585
+ }) : /* @__PURE__ */ v("button", {
598
586
  type: "button",
599
587
  onClick: $,
600
588
  disabled: z,
601
589
  className: "flex items-center gap-1.5 px-3 py-2 text-xs rounded-md border border-border-default bg-bg-default text-text-primary hover:bg-bg-subtle disabled:opacity-50",
602
- children: [/* @__PURE__ */ v(g, {
590
+ children: [/* @__PURE__ */ _(h, {
603
591
  size: 12,
604
592
  className: z ? "animate-spin" : ""
605
593
  }), "Generate Signing Secret"]
606
594
  }),
607
- V && /* @__PURE__ */ v("p", {
595
+ V && /* @__PURE__ */ _("p", {
608
596
  className: "text-xs text-amber-600 dark:text-amber-400",
609
597
  children: "New secret generated. Copy it now — the old secret is already invalidated."
610
598
  })
@@ -614,12 +602,12 @@ var x = () => {
614
602
  ]
615
603
  })
616
604
  }),
617
- /* @__PURE__ */ v(i, {
605
+ /* @__PURE__ */ _(i, {
618
606
  title: E("devportal.settings", "Settings"),
619
607
  description: E("devportal.settingsDescription", "Additional configuration options"),
620
- children: /* @__PURE__ */ v("div", {
608
+ children: /* @__PURE__ */ _("div", {
621
609
  className: "space-y-4",
622
- children: /* @__PURE__ */ v(ce, {
610
+ children: /* @__PURE__ */ _(se, {
623
611
  label: E("devportal.requireWorkspaceAdminApproval", "Require workspace admin approval"),
624
612
  description: E("devportal.requireWorkspaceAdminApprovalDescription", "When enabled, workspace admins must approve installations before users can access this app"),
625
613
  checked: q.requiresApproval,
@@ -627,11 +615,11 @@ var x = () => {
627
615
  })
628
616
  })
629
617
  }),
630
- Ke && /* @__PURE__ */ y("div", {
618
+ Ke && /* @__PURE__ */ v("div", {
631
619
  className: "rounded-lg border border-border-subtle bg-bg-sunken p-4 space-y-2",
632
- children: [/* @__PURE__ */ y("p", {
620
+ children: [/* @__PURE__ */ v("p", {
633
621
  className: "text-sm font-medium text-text-primary flex items-center gap-2",
634
- children: [/* @__PURE__ */ v(Se, { size: 14 }), E("devportal.submissionChecklist", "Submission Checklist")]
622
+ children: [/* @__PURE__ */ _(Ce, { size: 14 }), E("devportal.submissionChecklist", "Submission Checklist")]
635
623
  }), [
636
624
  {
637
625
  label: E("devportal.checkName", "Name set"),
@@ -661,64 +649,64 @@ var x = () => {
661
649
  label: E("devportal.checkVersion", "At least one version uploaded"),
662
650
  ok: (U?.application?.versions?.totalCount ?? 0) > 0
663
651
  }] : []
664
- ].map((e) => /* @__PURE__ */ y("div", {
652
+ ].map((e) => /* @__PURE__ */ v("div", {
665
653
  className: "flex items-center gap-2 text-sm",
666
- children: [e.ok ? /* @__PURE__ */ v("span", {
654
+ children: [e.ok ? /* @__PURE__ */ _("span", {
667
655
  className: "text-status-success-text",
668
656
  children: "✓"
669
- }) : /* @__PURE__ */ v("span", {
657
+ }) : /* @__PURE__ */ _("span", {
670
658
  className: "text-status-error-text",
671
659
  children: "✗"
672
- }), /* @__PURE__ */ v("span", {
660
+ }), /* @__PURE__ */ _("span", {
673
661
  className: e.ok ? "text-text-secondary line-through" : "text-text-primary",
674
662
  children: e.label
675
663
  })]
676
664
  }, e.label))]
677
665
  }),
678
- /* @__PURE__ */ y("div", {
666
+ /* @__PURE__ */ v("div", {
679
667
  className: "flex flex-col gap-4 border-t pt-6",
680
- children: [/* @__PURE__ */ v("div", {
668
+ children: [/* @__PURE__ */ _("div", {
681
669
  className: "flex items-center justify-end",
682
- children: /* @__PURE__ */ v("button", {
670
+ children: /* @__PURE__ */ _("button", {
683
671
  type: "submit",
684
672
  disabled: D || !F || !w,
685
673
  "aria-disabled": !w,
686
674
  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",
687
- children: D ? /* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v("span", { className: "h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent" }), E("devportal.saving", "Saving...")] }) : /* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v(xe, { size: 16 }), E("devportal.saveChanges", "Save Changes")] })
675
+ children: D ? /* @__PURE__ */ v(g, { children: [/* @__PURE__ */ _("span", { className: "h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent" }), E("devportal.saving", "Saving...")] }) : /* @__PURE__ */ v(g, { children: [/* @__PURE__ */ _(Se, { size: 16 }), E("devportal.saveChanges", "Save Changes")] })
688
676
  })
689
- }), /* @__PURE__ */ y("div", {
677
+ }), /* @__PURE__ */ v("div", {
690
678
  className: "rounded-lg border border-border-subtle bg-status-error-bg-subtle p-4",
691
679
  children: [
692
- /* @__PURE__ */ v("h3", {
680
+ /* @__PURE__ */ _("h3", {
693
681
  className: "text-sm font-medium text-status-error-text",
694
682
  children: E("devportal.dangerZone", "Danger Zone")
695
683
  }),
696
- /* @__PURE__ */ v("p", {
684
+ /* @__PURE__ */ _("p", {
697
685
  className: "mt-1 text-sm text-status-error-text",
698
686
  children: E("devportal.dangerZoneWarning", "These actions are irreversible. Please proceed with caution.")
699
687
  }),
700
- /* @__PURE__ */ y("div", {
688
+ /* @__PURE__ */ v("div", {
701
689
  className: "mt-4 flex gap-3",
702
690
  children: [
703
- qe && /* @__PURE__ */ y("button", {
691
+ qe && /* @__PURE__ */ v("button", {
704
692
  type: "button",
705
693
  onClick: () => M(!0),
706
694
  className: "inline-flex items-center gap-2 rounded-md border border-accent-orange bg-bg-surface px-3 py-1.5 text-sm font-medium text-accent-orange hover:bg-accent-orange-subtle transition-colors",
707
- children: [/* @__PURE__ */ v(ge, { size: 14 }), E("devportal.deprecateApp", "Deprecate App")]
695
+ children: [/* @__PURE__ */ _(ge, { size: 14 }), E("devportal.deprecateApp", "Deprecate App")]
708
696
  }),
709
- Je && /* @__PURE__ */ y("button", {
697
+ Je && /* @__PURE__ */ v("button", {
710
698
  type: "button",
711
699
  onClick: () => P(!0),
712
700
  className: "inline-flex items-center gap-2 rounded-md border border-accent-orange bg-bg-surface px-3 py-1.5 text-sm font-medium text-accent-orange hover:bg-accent-orange-subtle transition-colors",
713
- children: [/* @__PURE__ */ v(be, { size: 14 }), E("devportal.deactivateApp", "Deactivate App")]
701
+ children: [/* @__PURE__ */ _(xe, { size: 14 }), E("devportal.deactivateApp", "Deactivate App")]
714
702
  }),
715
- /* @__PURE__ */ y("button", {
703
+ /* @__PURE__ */ v("button", {
716
704
  type: "button",
717
705
  onClick: () => j(!0),
718
706
  disabled: !T,
719
707
  "aria-disabled": !T,
720
708
  className: "inline-flex items-center gap-2 rounded-md border border-status-error-bg bg-bg-surface px-3 py-1.5 text-sm font-medium text-status-error-text hover:bg-status-error-bg-subtle transition-colors disabled:opacity-50",
721
- children: [/* @__PURE__ */ v(Ce, { size: 14 }), E("devportal.deleteApp", "Delete App")]
709
+ children: [/* @__PURE__ */ _(we, { size: 14 }), E("devportal.deleteApp", "Delete App")]
722
710
  })
723
711
  ]
724
712
  })
@@ -727,7 +715,7 @@ var x = () => {
727
715
  })
728
716
  ]
729
717
  }),
730
- /* @__PURE__ */ v(u, {
718
+ /* @__PURE__ */ _(u, {
731
719
  open: je,
732
720
  onOpenChange: j,
733
721
  title: E("devportal.deleteApplication", "Delete Application"),
@@ -736,7 +724,7 @@ var x = () => {
736
724
  variant: "destructive",
737
725
  onConfirm: Ue
738
726
  }),
739
- /* @__PURE__ */ v(u, {
727
+ /* @__PURE__ */ _(u, {
740
728
  open: Me,
741
729
  onOpenChange: M,
742
730
  title: E("devportal.deprecateApplication", "Deprecate Application"),
@@ -745,7 +733,7 @@ var x = () => {
745
733
  variant: "warning",
746
734
  onConfirm: We
747
735
  }),
748
- /* @__PURE__ */ v(u, {
736
+ /* @__PURE__ */ _(u, {
749
737
  open: N,
750
738
  onOpenChange: P,
751
739
  title: E("devportal.deactivateApplication", "Deactivate Application"),
@@ -759,6 +747,6 @@ var x = () => {
759
747
  });
760
748
  };
761
749
  //#endregion
762
- export { x as EditApplicationPage };
750
+ export { b as EditApplicationPage };
763
751
 
764
752
  //# sourceMappingURL=EditApplicationPage.js.map