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