@burdenoff/microfe-devportal 2026.715.10 → 2026.716.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,24 +2,24 @@ import { useDevportal as e } from "../providers/DevportalProvider.js";
2
2
  import { cn as t } from "../utils/cn.js";
3
3
  import { LoadingState as n } from "../components/LoadingState.js";
4
4
  import { EmptyState as ee } from "../components/EmptyState.js";
5
- import { useDeactivateAppMutation as te, useDeleteApplicationMutation as ne, useGetApplicationQuery as r, useRotateApplicationSigningSecretMutation as re, useUpdateApplicationMutation as ie } from "../../generated/global-operations.js";
6
- import { PageLayout as i, PageSection as a } from "../components/PageLayout.js";
7
- import { APP_TYPE_LABELS as o } from "../utils/constants.js";
8
- import { StatusBadge as ae } from "../components/StatusBadge.js";
9
- import { nativeImpact as oe, nativeNotify as s } from "../../utils/nativeBridge.js";
10
- import { CheckboxField as se, InputField as c, SelectField as l, TagInput as u, TextareaField as d } from "../components/FormField.js";
11
- import { ConfirmDialog as f } from "../components/ConfirmDialog.js";
12
- import { PermissionGuard as p } from "../components/PermissionGuard.js";
5
+ import { useDeactivateAppMutation as te, useDeleteApplicationMutation as ne, useGetApplicationQuery as re, useRotateApplicationSigningSecretMutation as ie, useUpdateApplicationMutation as ae } from "../../generated/global-operations.js";
6
+ import { PageLayout as r, PageSection as i } from "../components/PageLayout.js";
7
+ 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 u } from "../components/FormField.js";
11
+ import { ConfirmDialog as d } from "../components/ConfirmDialog.js";
12
+ import { PermissionGuard as le } from "../components/PermissionGuard.js";
13
13
  import "../components/index.js";
14
- import { DEVPORTAL_PERMISSIONS as m } from "../constants/permissions.js";
15
- import { useDevportalPermission as h } from "../hooks/usePermission.js";
16
- import { useEffect as g, useState as _ } from "react";
17
- import { useI18n as ce } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
18
- import { AlertCircle as le, AlertTriangle as ue, AppWindow as de, Archive as fe, Check as v, Copy as pe, Eye as me, EyeOff as he, Power as ge, RefreshCw as y, Save as _e, Send as ve, Trash2 as ye } from "lucide-react";
19
- import { useParams as be } from "react-router-dom";
20
- import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
14
+ import { DEVPORTAL_PERMISSIONS as f } from "../constants/permissions.js";
15
+ import { useDevportalPermission as p } from "../hooks/usePermission.js";
16
+ import { useEffect as m, useState as h } from "react";
17
+ import { useI18n as ue } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
18
+ import { AlertCircle as de, AlertTriangle as fe, AppWindow as pe, Archive as me, Check as g, Copy as he, Eye as ge, EyeOff as _e, Power as ve, RefreshCw as _, Save as ye, Send as be, Trash2 as xe } from "lucide-react";
19
+ import { useParams as Se } from "react-router-dom";
20
+ import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
21
21
  //#region src/devportal/pages/EditApplicationPage.tsx
22
- var xe = [
22
+ var Ce = [
23
23
  {
24
24
  value: "fluidgrids",
25
25
  label: "FluidGrids"
@@ -36,27 +36,26 @@ var xe = [
36
36
  value: "botlit",
37
37
  label: "Botlit"
38
38
  }
39
- ], Se = Object.entries(o).map(([e, t]) => ({
39
+ ], we = Object.entries(a).map(([e, t]) => ({
40
40
  value: e,
41
41
  label: t
42
- })), Ce = [
42
+ })), x = [
43
43
  {
44
44
  value: "PUBLIC",
45
- label: "Public - Visible to everyone"
45
+ label: "Public — listed in the marketplace after review"
46
46
  },
47
47
  {
48
48
  value: "PRIVATE",
49
- label: "Private — only you (creator) can see it"
50
- },
51
- {
52
- value: "UNLISTED",
53
- label: "Unlisted — accessible via direct link"
49
+ label: "Private — only you (the creator) can see it"
54
50
  },
55
51
  {
56
52
  value: "INTERNAL",
57
53
  label: "Internal — visible to your entire dev org"
58
54
  }
59
- ], we = [
55
+ ], Te = [...x, {
56
+ value: "UNLISTED",
57
+ label: "Unlisted — shareable via link, not listed in store"
58
+ }], Ee = [
60
59
  {
61
60
  value: "ai",
62
61
  label: "AI & Automation"
@@ -86,7 +85,7 @@ var xe = [
86
85
  label: "Triggers"
87
86
  }
88
87
  ];
89
- function Te(e) {
88
+ function De(e) {
90
89
  return e ? {
91
90
  id: e.id,
92
91
  name: e.name,
@@ -129,21 +128,21 @@ function Te(e) {
129
128
  updatedAt: e.updatedAt
130
129
  } : null;
131
130
  }
132
- var C = () => {
133
- let { navigate: o, basePath: C } = e(), { appId: w } = be(), { t: Ee } = ce(), { allowed: T } = h(m.APP_UPDATE), { allowed: E } = h(m.APP_DELETE), D = (e, t) => {
134
- let n = Ee(e);
131
+ var S = () => {
132
+ let { navigate: a, basePath: S } = e(), { appId: C } = Se(), { t: w } = ue(), { allowed: T } = p(f.APP_UPDATE), { allowed: E } = p(f.APP_DELETE), D = (e, t) => {
133
+ let n = w(e);
135
134
  return n === e ? t : n;
136
- }, [O, k] = _(!1), [A, j] = _({}), [De, M] = _(!1), [Oe, N] = _(!1), [ke, P] = _(!1), [F, I] = _(!1), [L, R] = _(!1), [z, B] = _(!1), [V, Ae] = _(null), [je, H] = _(!1), { data: U, loading: Me, error: W, refetch: Ne } = r({
137
- variables: { id: w },
138
- skip: !w
139
- }), [G] = ie(), [Pe] = ne(), [Fe] = te(), [Ie] = re(), K = Te(U?.application);
140
- g(() => {
135
+ }, [O, k] = h(!1), [A, j] = h({}), [Oe, M] = h(!1), [ke, N] = h(!1), [Ae, P] = h(!1), [F, I] = h(!1), [L, R] = h(!1), [z, B] = h(!1), [V, je] = h(null), [Me, H] = h(!1), { data: U, loading: Ne, error: W, refetch: Pe } = re({
136
+ variables: { id: C },
137
+ skip: !C
138
+ }), [G] = ae(), [Fe] = ne(), [Ie] = te(), [Le] = ie(), K = De(U?.application);
139
+ m(() => {
141
140
  let e = K?.name;
142
- if (!w || !e) return;
141
+ if (!C || !e) return;
143
142
  let t = window.__breadcrumbRegistry;
144
- return t?.register(w, e), () => t?.unregister(w);
145
- }, [w, K?.name]);
146
- let [q, J] = _({
143
+ return t?.register(C, e), () => t?.unregister(C);
144
+ }, [C, K?.name]);
145
+ let [q, J] = h({
147
146
  name: "",
148
147
  slug: "",
149
148
  shortDescription: "",
@@ -162,8 +161,8 @@ var C = () => {
162
161
  oauthAuthUrl: "",
163
162
  oauthRevokeUrl: "",
164
163
  requiresApproval: !1
165
- }), [Y, X] = _([]);
166
- g(() => {
164
+ }), [Y, X] = h([]);
165
+ m(() => {
167
166
  if (K) {
168
167
  J({
169
168
  name: K.name,
@@ -190,7 +189,7 @@ var C = () => {
190
189
  }
191
190
  }, [U?.application]);
192
191
  let Z = (e) => {
193
- o?.(`${C}${e}`);
192
+ a?.(`${S}${e}`);
194
193
  }, Q = (e, t) => {
195
194
  J((n) => ({
196
195
  ...n,
@@ -200,24 +199,24 @@ var C = () => {
200
199
  [e]: void 0
201
200
  }));
202
201
  }, $ = async () => {
203
- if (w) {
202
+ if (C) {
204
203
  B(!0);
205
204
  try {
206
- let e = (await Ie({ variables: { id: w } })).data?.rotateApplicationSigningSecret?.signingSecret;
207
- e && (Ae(e), R(!0));
205
+ let e = (await Le({ variables: { id: C } })).data?.rotateApplicationSigningSecret?.signingSecret;
206
+ e && (je(e), R(!0));
208
207
  } catch {
209
- s("error");
208
+ o("error");
210
209
  } finally {
211
210
  B(!1);
212
211
  }
213
212
  }
214
- }, Le = async (e) => {
213
+ }, Re = async (e) => {
215
214
  await navigator.clipboard.writeText(e), H(!0), setTimeout(() => H(!1), 2e3);
216
- }, Re = () => {
215
+ }, ze = () => {
217
216
  let e = {};
218
217
  return q.name.trim() ? q.name.length < 3 ? e.name = D("devportal.appNameMinLength", "Name must be at least 3 characters") : q.name.length > 100 && (e.name = D("devportal.appNameMaxLength", "Name must be less than 100 characters")) : e.name = D("devportal.appNameRequired", "Application name is required"), q.slug.trim() ? /^[a-z0-9-]+$/.test(q.slug) || (e.slug = D("devportal.slugInvalidChars", "Slug can only contain lowercase letters, numbers, and hyphens")) : e.slug = D("devportal.slugRequired", "Slug is required"), q.shortDescription.trim() ? q.shortDescription.length > 200 && (e.shortDescription = D("devportal.shortDescriptionMaxLength", "Short description must be less than 200 characters")) : e.shortDescription = D("devportal.shortDescriptionRequired", "Short description is required"), q.appType || (e.appType = D("devportal.appTypeRequired", "Application type is required")), q.category || (e.category = D("devportal.categoryRequired", "Category is required")), j(e), Object.keys(e).length === 0;
219
- }, ze = async (e) => {
220
- if (e.preventDefault(), !(!Re() || !K)) {
218
+ }, Be = async (e) => {
219
+ if (e.preventDefault(), !(!ze() || !K)) {
221
220
  k(!0);
222
221
  try {
223
222
  await G({ variables: {
@@ -248,16 +247,16 @@ var C = () => {
248
247
  k(!1);
249
248
  }
250
249
  }
251
- }, Be = async () => {
250
+ }, Ve = async () => {
252
251
  if (K) {
253
- oe("medium");
252
+ se("medium");
254
253
  try {
255
- await Pe({ variables: { id: K.id } }), s("success"), Z("/apps");
254
+ await Fe({ variables: { id: K.id } }), o("success"), Z("/apps");
256
255
  } catch (e) {
257
- s("error"), console.error("Failed to delete application:", e);
256
+ o("error"), console.error("Failed to delete application:", e);
258
257
  }
259
258
  }
260
- }, Ve = async () => {
259
+ }, He = async () => {
261
260
  if (K) try {
262
261
  await G({ variables: {
263
262
  id: K.id,
@@ -266,91 +265,91 @@ var C = () => {
266
265
  } catch (e) {
267
266
  console.error("Failed to deprecate application:", e);
268
267
  }
269
- }, He = async () => {
268
+ }, Ue = async () => {
270
269
  if (K) try {
271
- await Fe({ variables: { id: K.id } }), P(!1), Z("/apps");
270
+ await Ie({ variables: { id: K.id } }), P(!1), Z("/apps");
272
271
  } catch (e) {
273
272
  console.error("Failed to deactivate application:", e);
274
273
  }
275
274
  };
276
- if (Me) return /* @__PURE__ */ x(n, { message: D("devportal.loadingApplication", "Loading application...") });
277
- if (W) return /* @__PURE__ */ x(i, {
275
+ if (Ne) return /* @__PURE__ */ y(n, { message: D("devportal.loadingApplication", "Loading application...") });
276
+ if (W) return /* @__PURE__ */ y(r, {
278
277
  title: D("devportal.error", "Error"),
279
- backLink: `${C}/apps`,
278
+ backLink: `${S}/apps`,
280
279
  backLabel: D("devportal.backToApplications", "Back to Applications"),
281
- children: /* @__PURE__ */ S("div", {
280
+ children: /* @__PURE__ */ b("div", {
282
281
  className: "flex flex-col items-center justify-center py-12 text-center",
283
282
  children: [
284
- /* @__PURE__ */ x(le, {
283
+ /* @__PURE__ */ y(de, {
285
284
  size: 48,
286
285
  className: "text-status-error-text mb-4"
287
286
  }),
288
- /* @__PURE__ */ x("h3", {
287
+ /* @__PURE__ */ y("h3", {
289
288
  className: "text-lg font-semibold mb-2",
290
289
  children: D("devportal.failedToLoadApplication", "Failed to load application")
291
290
  }),
292
- /* @__PURE__ */ x("p", {
291
+ /* @__PURE__ */ y("p", {
293
292
  className: "text-sm text-text-secondary",
294
293
  children: W.message
295
294
  })
296
295
  ]
297
296
  })
298
297
  });
299
- if (!K) return /* @__PURE__ */ x(i, {
298
+ if (!K) return /* @__PURE__ */ y(r, {
300
299
  title: D("devportal.notFound", "Not Found"),
301
- backLink: `${C}/apps`,
300
+ backLink: `${S}/apps`,
302
301
  backLabel: D("devportal.backToApplications", "Back to Applications"),
303
- children: /* @__PURE__ */ x(ee, {
302
+ children: /* @__PURE__ */ y(ee, {
304
303
  illustration: "empty-generic",
305
- icon: /* @__PURE__ */ x(de, { size: 48 }),
304
+ icon: /* @__PURE__ */ y(pe, { size: 48 }),
306
305
  title: D("devportal.applicationNotFound", "Application not found"),
307
306
  description: D("devportal.applicationNotFoundDescription", "The application you're looking for doesn't exist or you don't have access to it.")
308
307
  })
309
308
  });
310
- let Ue = K.status === "DRAFT" || K.status === "REJECTED", We = K.status === "PUBLISHED", Ge = K.status === "ACTIVE" || K.status === "PUBLISHED";
311
- return /* @__PURE__ */ x(p, {
312
- permission: m.APP_UPDATE,
313
- children: /* @__PURE__ */ S(i, {
309
+ let We = K.status === "DRAFT" || K.status === "REJECTED", Ge = K.status === "PUBLISHED", Ke = K.status === "ACTIVE" || K.status === "PUBLISHED";
310
+ return /* @__PURE__ */ y(le, {
311
+ permission: f.APP_UPDATE,
312
+ children: /* @__PURE__ */ b(r, {
314
313
  title: `${D("devportal.editAppTitlePrefix", "Edit:")} ${K.name}`,
315
314
  description: D("devportal.editAppDescription", "Update your application settings"),
316
315
  purpose: D("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."),
317
- backLink: `${C}/apps/${K.id}`,
316
+ backLink: `${S}/apps/${K.id}`,
318
317
  backLabel: D("devportal.backToApplication", "Back to Application"),
319
- actions: /* @__PURE__ */ x("div", {
318
+ actions: /* @__PURE__ */ y("div", {
320
319
  className: "flex items-center gap-2",
321
- children: /* @__PURE__ */ x(ae, {
320
+ children: /* @__PURE__ */ y(oe, {
322
321
  status: K.status,
323
322
  type: "app"
324
323
  })
325
324
  }),
326
325
  children: [
327
- /* @__PURE__ */ S("form", {
328
- onSubmit: ze,
326
+ /* @__PURE__ */ b("form", {
327
+ onSubmit: Be,
329
328
  className: "space-y-8 max-w-3xl",
330
329
  children: [
331
- K.status === "PUBLISHED" && /* @__PURE__ */ S("div", {
330
+ K.status === "PUBLISHED" && /* @__PURE__ */ b("div", {
332
331
  className: "rounded-lg border border-border-subtle bg-status-warning-bg-subtle p-4 flex gap-3",
333
- children: [/* @__PURE__ */ x(ue, {
332
+ children: [/* @__PURE__ */ y(fe, {
334
333
  size: 20,
335
334
  className: "text-status-warning-text flex-shrink-0 mt-0.5"
336
- }), /* @__PURE__ */ S("div", {
335
+ }), /* @__PURE__ */ b("div", {
337
336
  className: "text-sm text-status-warning-text",
338
- children: [/* @__PURE__ */ x("p", {
337
+ children: [/* @__PURE__ */ y("p", {
339
338
  className: "font-medium",
340
339
  children: D("devportal.appIsPublished", "This application is published")
341
- }), /* @__PURE__ */ x("p", {
340
+ }), /* @__PURE__ */ y("p", {
342
341
  className: "mt-1 text-status-warning-text",
343
342
  children: D("devportal.publishedAppChangesWarning", "Changes to published apps may require re-review. Major changes will put the app back into review status.")
344
343
  })]
345
344
  })]
346
345
  }),
347
- /* @__PURE__ */ x(a, {
346
+ /* @__PURE__ */ y(i, {
348
347
  title: D("devportal.basicInformation", "Basic Information"),
349
348
  description: D("devportal.basicInformationDescription", "Core details about your application"),
350
- children: /* @__PURE__ */ S("div", {
349
+ children: /* @__PURE__ */ b("div", {
351
350
  className: "space-y-4",
352
351
  children: [
353
- /* @__PURE__ */ x(c, {
352
+ /* @__PURE__ */ y(s, {
354
353
  label: D("devportal.applicationName", "Application Name"),
355
354
  value: q.name,
356
355
  onChange: (e) => Q("name", e.target.value),
@@ -358,7 +357,7 @@ var C = () => {
358
357
  required: !0,
359
358
  error: A.name
360
359
  }),
361
- /* @__PURE__ */ x(c, {
360
+ /* @__PURE__ */ y(s, {
362
361
  label: D("devportal.slug", "Slug"),
363
362
  value: q.slug,
364
363
  onChange: (e) => Q("slug", e.target.value.toLowerCase()),
@@ -367,7 +366,7 @@ var C = () => {
367
366
  error: A.slug,
368
367
  hint: D("devportal.slugChangeWarning", "Changing the slug may break existing integrations")
369
368
  }),
370
- /* @__PURE__ */ x(d, {
369
+ /* @__PURE__ */ y(u, {
371
370
  label: D("devportal.shortDescription", "Short Description"),
372
371
  value: q.shortDescription,
373
372
  onChange: (e) => Q("shortDescription", e.target.value),
@@ -377,7 +376,7 @@ var C = () => {
377
376
  hint: `${q.shortDescription.length}/200 ${D("devportal.characters", "characters")}`,
378
377
  rows: 2
379
378
  }),
380
- /* @__PURE__ */ x(d, {
379
+ /* @__PURE__ */ y(u, {
381
380
  label: D("devportal.fullDescription", "Full Description"),
382
381
  value: q.description,
383
382
  onChange: (e) => Q("description", e.target.value),
@@ -388,58 +387,58 @@ var C = () => {
388
387
  ]
389
388
  })
390
389
  }),
391
- /* @__PURE__ */ S(a, {
390
+ /* @__PURE__ */ b(i, {
392
391
  title: D("devportal.classification", "Classification"),
393
392
  description: D("devportal.classificationDescription", "Categorize your application"),
394
393
  children: [
395
- /* @__PURE__ */ S("div", {
394
+ /* @__PURE__ */ b("div", {
396
395
  className: "grid gap-4 sm:grid-cols-2",
397
396
  children: [
398
- /* @__PURE__ */ x(l, {
397
+ /* @__PURE__ */ y(c, {
399
398
  label: D("devportal.applicationType", "Application Type"),
400
399
  value: q.appType,
401
400
  onChange: (e) => Q("appType", e.target.value),
402
- options: Se,
401
+ options: we,
403
402
  required: !0,
404
403
  error: A.appType
405
404
  }),
406
- /* @__PURE__ */ x(l, {
405
+ /* @__PURE__ */ y(c, {
407
406
  label: D("devportal.category", "Category"),
408
407
  value: q.category,
409
408
  onChange: (e) => Q("category", e.target.value),
410
- options: we,
409
+ options: Ee,
411
410
  required: !0,
412
411
  error: A.category
413
412
  }),
414
- /* @__PURE__ */ x(l, {
413
+ /* @__PURE__ */ y(c, {
415
414
  label: D("devportal.visibility", "Visibility"),
416
415
  value: q.visibility,
417
416
  onChange: (e) => Q("visibility", e.target.value),
418
- options: Ce,
417
+ options: K?.appType === "WORKFLOW" ? Te : x,
419
418
  hint: q.visibility === "PUBLIC" ? D("devportal.visibilityHintPublic", "Listed in the marketplace after review approval — anyone can discover and install it") : q.visibility === "UNLISTED" ? D("devportal.visibilityHintUnlisted", "Not in the store, but accessible via a direct link. You can still submit for marketplace review") : q.visibility === "INTERNAL" ? D("devportal.visibilityHintInternal", "Visible to all members of your developer organization — no one outside can access it") : D("devportal.visibilityHintPrivate", "Only you (the creator) can see this — other org members cannot access it")
420
419
  })
421
420
  ]
422
421
  }),
423
- /* @__PURE__ */ x(u, {
422
+ /* @__PURE__ */ y(l, {
424
423
  label: D("devportal.tags", "Tags"),
425
424
  value: q.tags,
426
425
  onChange: (e) => Q("tags", e),
427
426
  placeholder: D("devportal.addTagsPlaceholder", "Add tags (press Enter)")
428
427
  }),
429
- /* @__PURE__ */ x(u, {
428
+ /* @__PURE__ */ y(l, {
430
429
  label: D("devportal.keywords", "Keywords"),
431
430
  value: q.keywords,
432
431
  onChange: (e) => Q("keywords", e),
433
432
  placeholder: D("devportal.addKeywordsPlaceholder", "Add keywords (press Enter)")
434
433
  }),
435
- (q.appType === "NODE" || q.appType === "WORKFLOW") && /* @__PURE__ */ S("div", {
434
+ (q.appType === "NODE" || q.appType === "WORKFLOW") && /* @__PURE__ */ b("div", {
436
435
  className: "space-y-2",
437
436
  children: [
438
- /* @__PURE__ */ x("label", {
437
+ /* @__PURE__ */ y("label", {
439
438
  className: "block text-sm font-medium text-text-primary",
440
439
  children: "Compatible Products"
441
440
  }),
442
- /* @__PURE__ */ S("p", {
441
+ /* @__PURE__ */ b("p", {
443
442
  className: "text-xs text-text-secondary",
444
443
  children: [
445
444
  "Select which products this ",
@@ -448,14 +447,14 @@ var C = () => {
448
447
  "works with. Users will see it in those products' node stores."
449
448
  ]
450
449
  }),
451
- /* @__PURE__ */ x("div", {
450
+ /* @__PURE__ */ y("div", {
452
451
  className: "flex flex-wrap gap-3",
453
- children: xe.map((e) => {
452
+ children: Ce.map((e) => {
454
453
  let n = Y.includes(e.value);
455
- return /* @__PURE__ */ S("label", {
454
+ return /* @__PURE__ */ b("label", {
456
455
  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"),
457
456
  children: [
458
- /* @__PURE__ */ x("input", {
457
+ /* @__PURE__ */ y("input", {
459
458
  type: "checkbox",
460
459
  className: "sr-only",
461
460
  checked: n,
@@ -463,7 +462,7 @@ var C = () => {
463
462
  X((t) => n ? t.filter((t) => t !== e.value) : [...t, e.value]), I(!0);
464
463
  }
465
464
  }),
466
- n && /* @__PURE__ */ x(v, {
465
+ n && /* @__PURE__ */ y(g, {
467
466
  size: 14,
468
467
  className: "text-primary flex-shrink-0"
469
468
  }),
@@ -476,48 +475,48 @@ var C = () => {
476
475
  })
477
476
  ]
478
477
  }),
479
- /* @__PURE__ */ x(a, {
478
+ /* @__PURE__ */ y(i, {
480
479
  title: D("devportal.links", "Links"),
481
480
  description: D("devportal.linksDescription", "External resources for your application"),
482
- children: /* @__PURE__ */ S("div", {
481
+ children: /* @__PURE__ */ b("div", {
483
482
  className: "grid gap-4 sm:grid-cols-2",
484
483
  children: [
485
- /* @__PURE__ */ x(c, {
484
+ /* @__PURE__ */ y(s, {
486
485
  label: D("devportal.websiteUrl", "Website URL"),
487
486
  type: "url",
488
487
  value: q.websiteUrl,
489
488
  onChange: (e) => Q("websiteUrl", e.target.value),
490
489
  placeholder: D("devportal.websiteUrlPlaceholder", "https://example.com")
491
490
  }),
492
- /* @__PURE__ */ x(c, {
491
+ /* @__PURE__ */ y(s, {
493
492
  label: D("devportal.documentationUrl", "Documentation URL"),
494
493
  type: "url",
495
494
  value: q.documentationUrl,
496
495
  onChange: (e) => Q("documentationUrl", e.target.value),
497
496
  placeholder: D("devportal.documentationUrlPlaceholder", "https://docs.example.com")
498
497
  }),
499
- /* @__PURE__ */ x(c, {
498
+ /* @__PURE__ */ y(s, {
500
499
  label: D("devportal.supportUrl", "Support URL"),
501
500
  type: "url",
502
501
  value: q.supportUrl,
503
502
  onChange: (e) => Q("supportUrl", e.target.value),
504
503
  placeholder: D("devportal.supportUrlPlaceholder", "https://support.example.com")
505
504
  }),
506
- /* @__PURE__ */ x(c, {
505
+ /* @__PURE__ */ y(s, {
507
506
  label: D("devportal.githubUrl", "GitHub URL"),
508
507
  type: "url",
509
508
  value: q.githubUrl,
510
509
  onChange: (e) => Q("githubUrl", e.target.value),
511
510
  placeholder: D("devportal.githubUrlPlaceholder", "https://github.com/org/repo")
512
511
  }),
513
- /* @__PURE__ */ x(c, {
512
+ /* @__PURE__ */ y(s, {
514
513
  label: D("devportal.privacyPolicyUrl", "Privacy Policy URL"),
515
514
  type: "url",
516
515
  value: q.privacyPolicyUrl,
517
516
  onChange: (e) => Q("privacyPolicyUrl", e.target.value),
518
517
  placeholder: D("devportal.privacyPolicyUrlPlaceholder", "https://example.com/privacy")
519
518
  }),
520
- /* @__PURE__ */ x(c, {
519
+ /* @__PURE__ */ y(s, {
521
520
  label: D("devportal.termsOfServiceUrl", "Terms of Service URL"),
522
521
  type: "url",
523
522
  value: q.termsOfServiceUrl,
@@ -527,13 +526,13 @@ var C = () => {
527
526
  ]
528
527
  })
529
528
  }),
530
- (q.appType === "INTEGRATION" || q.appType === "API_INTEGRATION") && /* @__PURE__ */ x(a, {
529
+ (q.appType === "INTEGRATION" || q.appType === "API_INTEGRATION") && /* @__PURE__ */ y(i, {
531
530
  title: "Integration Setup",
532
531
  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.",
533
- children: /* @__PURE__ */ S("div", {
532
+ children: /* @__PURE__ */ b("div", {
534
533
  className: "space-y-4",
535
534
  children: [
536
- /* @__PURE__ */ x(c, {
535
+ /* @__PURE__ */ y(s, {
537
536
  label: "Post-install Callback URL",
538
537
  type: "url",
539
538
  value: q.oauthAuthUrl,
@@ -541,7 +540,7 @@ var C = () => {
541
540
  placeholder: "https://yourapp.com/callback",
542
541
  hint: "Users land here after install with ?installation_id=xxx appended"
543
542
  }),
544
- /* @__PURE__ */ x(c, {
543
+ /* @__PURE__ */ y(s, {
545
544
  label: "Revoke URL",
546
545
  type: "url",
547
546
  value: q.oauthRevokeUrl,
@@ -551,19 +550,19 @@ var C = () => {
551
550
  }),
552
551
  (() => {
553
552
  let e = V ?? U?.application?.signingSecret, t = "boff_sk_" + "•".repeat(32);
554
- return /* @__PURE__ */ S("div", {
553
+ return /* @__PURE__ */ b("div", {
555
554
  className: "space-y-1.5",
556
555
  children: [
557
- /* @__PURE__ */ x("label", {
556
+ /* @__PURE__ */ y("label", {
558
557
  className: "block text-sm font-medium text-text-primary",
559
558
  children: "Signing Secret"
560
559
  }),
561
- /* @__PURE__ */ S("p", {
560
+ /* @__PURE__ */ b("p", {
562
561
  className: "text-xs text-text-secondary",
563
562
  children: [
564
563
  "Use this secret to authenticate",
565
564
  " ",
566
- /* @__PURE__ */ x("code", {
565
+ /* @__PURE__ */ y("code", {
567
566
  className: "font-mono text-xs bg-bg-sunken px-1 py-0.5 rounded",
568
567
  children: "verifyInstallation"
569
568
  }),
@@ -571,55 +570,55 @@ var C = () => {
571
570
  "calls from your integration server. Store it securely — it is only shown immediately after generation or rotation."
572
571
  ]
573
572
  }),
574
- e ? /* @__PURE__ */ S("div", {
573
+ e ? /* @__PURE__ */ b("div", {
575
574
  className: "flex items-center gap-2",
576
- children: [/* @__PURE__ */ S("div", {
575
+ children: [/* @__PURE__ */ b("div", {
577
576
  className: "flex-1 flex items-center gap-0 rounded-md border border-border-default bg-bg-sunken overflow-hidden",
578
577
  children: [
579
- /* @__PURE__ */ x("code", {
578
+ /* @__PURE__ */ y("code", {
580
579
  className: "flex-1 px-3 py-2 text-xs font-mono text-text-primary truncate",
581
580
  children: L ? e : t
582
581
  }),
583
- /* @__PURE__ */ x("button", {
582
+ /* @__PURE__ */ y("button", {
584
583
  type: "button",
585
584
  onClick: () => R((e) => !e),
586
585
  className: "px-2 py-2 text-text-secondary hover:text-text-primary border-l border-border-default",
587
586
  title: L ? "Hide" : "Reveal",
588
- children: x(L ? he : me, { size: 14 })
587
+ children: y(L ? _e : ge, { size: 14 })
589
588
  }),
590
- /* @__PURE__ */ x("button", {
589
+ /* @__PURE__ */ y("button", {
591
590
  type: "button",
592
- onClick: () => Le(e),
591
+ onClick: () => Re(e),
593
592
  className: "px-2 py-2 text-text-secondary hover:text-text-primary border-l border-border-default",
594
593
  title: "Copy to clipboard",
595
- children: je ? /* @__PURE__ */ x(v, {
594
+ children: Me ? /* @__PURE__ */ y(g, {
596
595
  size: 14,
597
596
  className: "text-green-500"
598
- }) : /* @__PURE__ */ x(pe, { size: 14 })
597
+ }) : /* @__PURE__ */ y(he, { size: 14 })
599
598
  })
600
599
  ]
601
- }), /* @__PURE__ */ S("button", {
600
+ }), /* @__PURE__ */ b("button", {
602
601
  type: "button",
603
602
  onClick: $,
604
603
  disabled: z,
605
604
  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",
606
605
  title: "Rotate signing secret",
607
- children: [/* @__PURE__ */ x(y, {
606
+ children: [/* @__PURE__ */ y(_, {
608
607
  size: 12,
609
608
  className: z ? "animate-spin" : ""
610
609
  }), "Rotate"]
611
610
  })]
612
- }) : /* @__PURE__ */ S("button", {
611
+ }) : /* @__PURE__ */ b("button", {
613
612
  type: "button",
614
613
  onClick: $,
615
614
  disabled: z,
616
615
  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",
617
- children: [/* @__PURE__ */ x(y, {
616
+ children: [/* @__PURE__ */ y(_, {
618
617
  size: 12,
619
618
  className: z ? "animate-spin" : ""
620
619
  }), "Generate Signing Secret"]
621
620
  }),
622
- V && /* @__PURE__ */ x("p", {
621
+ V && /* @__PURE__ */ y("p", {
623
622
  className: "text-xs text-amber-600 dark:text-amber-400",
624
623
  children: "New secret generated. Copy it now — the old secret is already invalidated."
625
624
  })
@@ -629,12 +628,12 @@ var C = () => {
629
628
  ]
630
629
  })
631
630
  }),
632
- /* @__PURE__ */ x(a, {
631
+ /* @__PURE__ */ y(i, {
633
632
  title: D("devportal.settings", "Settings"),
634
633
  description: D("devportal.settingsDescription", "Additional configuration options"),
635
- children: /* @__PURE__ */ x("div", {
634
+ children: /* @__PURE__ */ y("div", {
636
635
  className: "space-y-4",
637
- children: /* @__PURE__ */ x(se, {
636
+ children: /* @__PURE__ */ y(ce, {
638
637
  label: D("devportal.requireWorkspaceAdminApproval", "Require workspace admin approval"),
639
638
  description: D("devportal.requireWorkspaceAdminApprovalDescription", "When enabled, workspace admins must approve installations before users can access this app"),
640
639
  checked: q.requiresApproval,
@@ -642,11 +641,11 @@ var C = () => {
642
641
  })
643
642
  })
644
643
  }),
645
- Ue && /* @__PURE__ */ S("div", {
644
+ We && /* @__PURE__ */ b("div", {
646
645
  className: "rounded-lg border border-border-subtle bg-bg-sunken p-4 space-y-2",
647
- children: [/* @__PURE__ */ S("p", {
646
+ children: [/* @__PURE__ */ b("p", {
648
647
  className: "text-sm font-medium text-text-primary flex items-center gap-2",
649
- children: [/* @__PURE__ */ x(ve, { size: 14 }), D("devportal.submissionChecklist", "Submission Checklist")]
648
+ children: [/* @__PURE__ */ y(be, { size: 14 }), D("devportal.submissionChecklist", "Submission Checklist")]
650
649
  }), [
651
650
  {
652
651
  label: D("devportal.checkName", "Name set"),
@@ -676,64 +675,64 @@ var C = () => {
676
675
  label: D("devportal.checkVersion", "At least one version uploaded"),
677
676
  ok: (U?.application?.versions?.totalCount ?? 0) > 0
678
677
  }] : []
679
- ].map((e) => /* @__PURE__ */ S("div", {
678
+ ].map((e) => /* @__PURE__ */ b("div", {
680
679
  className: "flex items-center gap-2 text-sm",
681
- children: [e.ok ? /* @__PURE__ */ x("span", {
680
+ children: [e.ok ? /* @__PURE__ */ y("span", {
682
681
  className: "text-status-success-text",
683
682
  children: "✓"
684
- }) : /* @__PURE__ */ x("span", {
683
+ }) : /* @__PURE__ */ y("span", {
685
684
  className: "text-status-error-text",
686
685
  children: "✗"
687
- }), /* @__PURE__ */ x("span", {
686
+ }), /* @__PURE__ */ y("span", {
688
687
  className: e.ok ? "text-text-secondary line-through" : "text-text-primary",
689
688
  children: e.label
690
689
  })]
691
690
  }, e.label))]
692
691
  }),
693
- /* @__PURE__ */ S("div", {
692
+ /* @__PURE__ */ b("div", {
694
693
  className: "flex flex-col gap-4 border-t pt-6",
695
- children: [/* @__PURE__ */ x("div", {
694
+ children: [/* @__PURE__ */ y("div", {
696
695
  className: "flex items-center justify-end",
697
- children: /* @__PURE__ */ x("button", {
696
+ children: /* @__PURE__ */ y("button", {
698
697
  type: "submit",
699
698
  disabled: O || !F || !T,
700
699
  "aria-disabled": !T,
701
700
  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",
702
- children: O ? /* @__PURE__ */ S(b, { children: [/* @__PURE__ */ x("span", { className: "h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent" }), D("devportal.saving", "Saving...")] }) : /* @__PURE__ */ S(b, { children: [/* @__PURE__ */ x(_e, { size: 16 }), D("devportal.saveChanges", "Save Changes")] })
701
+ children: O ? /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y("span", { className: "h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent" }), D("devportal.saving", "Saving...")] }) : /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(ye, { size: 16 }), D("devportal.saveChanges", "Save Changes")] })
703
702
  })
704
- }), /* @__PURE__ */ S("div", {
703
+ }), /* @__PURE__ */ b("div", {
705
704
  className: "rounded-lg border border-border-subtle bg-status-error-bg-subtle p-4",
706
705
  children: [
707
- /* @__PURE__ */ x("h3", {
706
+ /* @__PURE__ */ y("h3", {
708
707
  className: "text-sm font-medium text-status-error-text",
709
708
  children: D("devportal.dangerZone", "Danger Zone")
710
709
  }),
711
- /* @__PURE__ */ x("p", {
710
+ /* @__PURE__ */ y("p", {
712
711
  className: "mt-1 text-sm text-status-error-text",
713
712
  children: D("devportal.dangerZoneWarning", "These actions are irreversible. Please proceed with caution.")
714
713
  }),
715
- /* @__PURE__ */ S("div", {
714
+ /* @__PURE__ */ b("div", {
716
715
  className: "mt-4 flex gap-3",
717
716
  children: [
718
- We && /* @__PURE__ */ S("button", {
717
+ Ge && /* @__PURE__ */ b("button", {
719
718
  type: "button",
720
719
  onClick: () => N(!0),
721
720
  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",
722
- children: [/* @__PURE__ */ x(fe, { size: 14 }), D("devportal.deprecateApp", "Deprecate App")]
721
+ children: [/* @__PURE__ */ y(me, { size: 14 }), D("devportal.deprecateApp", "Deprecate App")]
723
722
  }),
724
- Ge && /* @__PURE__ */ S("button", {
723
+ Ke && /* @__PURE__ */ b("button", {
725
724
  type: "button",
726
725
  onClick: () => P(!0),
727
726
  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",
728
- children: [/* @__PURE__ */ x(ge, { size: 14 }), D("devportal.deactivateApp", "Deactivate App")]
727
+ children: [/* @__PURE__ */ y(ve, { size: 14 }), D("devportal.deactivateApp", "Deactivate App")]
729
728
  }),
730
- /* @__PURE__ */ S("button", {
729
+ /* @__PURE__ */ b("button", {
731
730
  type: "button",
732
731
  onClick: () => M(!0),
733
732
  disabled: !E,
734
733
  "aria-disabled": !E,
735
734
  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",
736
- children: [/* @__PURE__ */ x(ye, { size: 14 }), D("devportal.deleteApp", "Delete App")]
735
+ children: [/* @__PURE__ */ y(xe, { size: 14 }), D("devportal.deleteApp", "Delete App")]
737
736
  })
738
737
  ]
739
738
  })
@@ -742,38 +741,38 @@ var C = () => {
742
741
  })
743
742
  ]
744
743
  }),
745
- /* @__PURE__ */ x(f, {
746
- open: De,
744
+ /* @__PURE__ */ y(d, {
745
+ open: Oe,
747
746
  onOpenChange: M,
748
747
  title: D("devportal.deleteApplication", "Delete Application"),
749
748
  description: D("devportal.deleteApplicationConfirm", `Are you sure you want to delete "${K.name}"? This action cannot be undone. All OAuth clients, API keys, webhooks, and analytics data will be permanently deleted.`),
750
749
  confirmLabel: D("devportal.deleteApplication", "Delete Application"),
751
750
  variant: "destructive",
752
- onConfirm: Be
751
+ onConfirm: Ve
753
752
  }),
754
- /* @__PURE__ */ x(f, {
755
- open: Oe,
753
+ /* @__PURE__ */ y(d, {
754
+ open: ke,
756
755
  onOpenChange: N,
757
756
  title: D("devportal.deprecateApplication", "Deprecate Application"),
758
757
  description: D("devportal.deprecateApplicationConfirm", `Are you sure you want to deprecate "${K.name}"? Existing users will still be able to use the app, but it will no longer be visible in the marketplace and new installations will be disabled.`),
759
758
  confirmLabel: D("devportal.deprecateApplication", "Deprecate Application"),
760
759
  variant: "warning",
761
- onConfirm: Ve
760
+ onConfirm: He
762
761
  }),
763
- /* @__PURE__ */ x(f, {
764
- open: ke,
762
+ /* @__PURE__ */ y(d, {
763
+ open: Ae,
765
764
  onOpenChange: P,
766
765
  title: D("devportal.deactivateApplication", "Deactivate Application"),
767
766
  description: D("devportal.deactivateApplicationConfirm", `Are you sure you want to deactivate "${K.name}"? This will revoke all active tokens and disable the app from the auth-svc layer. The app will no longer be able to authenticate or act on behalf of users.`),
768
767
  confirmLabel: D("devportal.deactivateApplication", "Deactivate Application"),
769
768
  variant: "destructive",
770
- onConfirm: He
769
+ onConfirm: Ue
771
770
  })
772
771
  ]
773
772
  })
774
773
  });
775
774
  };
776
775
  //#endregion
777
- export { C as EditApplicationPage };
776
+ export { S as EditApplicationPage };
778
777
 
779
778
  //# sourceMappingURL=EditApplicationPage.js.map