@burdenoff/microfe-devportal 2026.1107.1 → 2026.1107.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"CreateApplicationPage.d.ts","sourceRoot":"","sources":["../../../src/devportal/pages/CreateApplicationPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAkbhC,eAAO,MAAM,qBAAqB,EAAE,EA6hBnC,CAAC"}
1
+ {"version":3,"file":"CreateApplicationPage.d.ts","sourceRoot":"","sources":["../../../src/devportal/pages/CreateApplicationPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAyahC,eAAO,MAAM,qBAAqB,EAAE,EA6hBnC,CAAC"}
@@ -9,13 +9,14 @@ import { MarkdownEditor as u } from "../components/MarkdownEditor.js";
9
9
  import "../components/index.js";
10
10
  import { useProducts as ee } from "../hooks/useProducts.js";
11
11
  import "../hooks/index.js";
12
- import { MultiSelectCombobox as te } from "../components/MultiSelectCombobox.js";
12
+ import { APP_CATEGORY_OPTIONS as te } from "../constants/appCategories.js";
13
+ import { MultiSelectCombobox as ne } from "../components/MultiSelectCombobox.js";
13
14
  import { useRef as d, useState as f } from "react";
14
- import { ArrowLeft as p, Box as m, Check as h, ChevronRight as g, FileCode2 as _, GitFork as v, Info as y, LayoutDashboard as b, LayoutGrid as x, Loader2 as ne, Puzzle as S, Save as re, X as C } from "lucide-react";
15
- import { Fragment as w, jsx as T, jsxs as E } from "react/jsx-runtime";
16
- import { useI18n as D } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
15
+ import { ArrowLeft as p, Box as m, Check as h, ChevronRight as g, FileCode2 as _, GitFork as v, Info as y, LayoutDashboard as b, LayoutGrid as x, Loader2 as re, Puzzle as S, Save as C, X as w } from "lucide-react";
16
+ import { Fragment as T, jsx as E, jsxs as D } from "react/jsx-runtime";
17
+ import { useI18n as O } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
17
18
  //#region src/devportal/pages/CreateApplicationPage.tsx
18
- var O = {
19
+ var k = {
19
20
  app: {
20
21
  appType: "API_INTEGRATION",
21
22
  icon: m,
@@ -106,7 +107,7 @@ var O = {
106
107
  "Publish to store"
107
108
  ]
108
109
  }
109
- }, k = [
110
+ }, A = [
110
111
  {
111
112
  id: "auth",
112
113
  label: "Authentication",
@@ -178,16 +179,16 @@ var O = {
178
179
  description: "Access control configuration"
179
180
  }
180
181
  ];
181
- function A() {
182
- return Object.fromEntries(k.map((e) => [e.id, "none"]));
182
+ function j() {
183
+ return Object.fromEntries(A.map((e) => [e.id, "none"]));
183
184
  }
184
- function j(e) {
185
+ function M(e) {
185
186
  return Object.entries(e).filter(([, e]) => e !== "none").map(([e, t]) => ({
186
187
  resource: e,
187
188
  level: t
188
189
  }));
189
190
  }
190
- var M = [
191
+ var N = [
191
192
  {
192
193
  value: "PUBLIC",
193
194
  label: "Public — listed in the marketplace after review"
@@ -200,66 +201,37 @@ var M = [
200
201
  value: "INTERNAL",
201
202
  label: "Internal — visible to your entire dev org"
202
203
  }
203
- ], N = [...M, {
204
+ ], P = [...N, {
204
205
  value: "UNLISTED",
205
206
  label: "Unlisted — shareable via link, not listed in store"
206
- }], P = [
207
- {
208
- value: "ai",
209
- label: "AI & Automation"
210
- },
211
- {
212
- value: "integration",
213
- label: "Action in an App"
214
- },
215
- {
216
- value: "data",
217
- label: "Data & Transform"
218
- },
219
- {
220
- value: "flow",
221
- label: "Flow & Logic"
222
- },
223
- {
224
- value: "core",
225
- label: "Core"
226
- },
227
- {
228
- value: "communication",
229
- label: "Communication"
230
- },
231
- {
232
- value: "trigger",
233
- label: "Triggers"
234
- }
235
- ], F = ({ icon: e, title: n, description: r, bullets: i, selected: a, onClick: o }) => /* @__PURE__ */ E("button", {
207
+ }], F = ({ icon: e, title: n, description: r, bullets: i, selected: a, onClick: o }) => /* @__PURE__ */ D("button", {
236
208
  type: "button",
237
209
  onClick: o,
238
210
  className: t("relative flex flex-col gap-3 rounded-xl border-2 p-6 text-left transition-all hover:border-primary/50 hover:shadow-sm", a ? "border-primary bg-action-primary-bg/5 shadow-sm" : "border-border-subtle bg-bg-surface"),
239
211
  children: [
240
- a && /* @__PURE__ */ T("span", {
212
+ a && /* @__PURE__ */ E("span", {
241
213
  className: "absolute top-4 right-4 flex h-5 w-5 items-center justify-center rounded-full bg-action-primary-bg text-action-primary-text",
242
- children: /* @__PURE__ */ T(h, { size: 12 })
214
+ children: /* @__PURE__ */ E(h, { size: 12 })
243
215
  }),
244
- /* @__PURE__ */ T("div", {
216
+ /* @__PURE__ */ E("div", {
245
217
  className: "flex h-10 w-10 items-center justify-center rounded-lg bg-bg-sunken",
246
- children: /* @__PURE__ */ T(e, {
218
+ children: /* @__PURE__ */ E(e, {
247
219
  size: 22,
248
220
  className: "text-text-primary"
249
221
  })
250
222
  }),
251
- /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("p", {
223
+ /* @__PURE__ */ D("div", { children: [/* @__PURE__ */ E("p", {
252
224
  className: "font-semibold text-text-primary",
253
225
  children: n
254
- }), /* @__PURE__ */ T("p", {
226
+ }), /* @__PURE__ */ E("p", {
255
227
  className: "mt-1 text-sm text-text-secondary",
256
228
  children: r
257
229
  })] }),
258
- /* @__PURE__ */ T("ul", {
230
+ /* @__PURE__ */ E("ul", {
259
231
  className: "mt-1 space-y-1",
260
- children: i.map((e) => /* @__PURE__ */ E("li", {
232
+ children: i.map((e) => /* @__PURE__ */ D("li", {
261
233
  className: "flex items-center gap-2 text-xs text-text-secondary",
262
- children: [/* @__PURE__ */ T(g, {
234
+ children: [/* @__PURE__ */ E(g, {
263
235
  size: 12,
264
236
  className: "flex-shrink-0 text-primary"
265
237
  }), e]
@@ -276,35 +248,35 @@ var M = [
276
248
  read: "Read",
277
249
  write: "Read & Write"
278
250
  };
279
- return /* @__PURE__ */ T("div", {
251
+ return /* @__PURE__ */ E("div", {
280
252
  className: "overflow-x-auto rounded-lg border border-border-subtle",
281
- children: /* @__PURE__ */ E("table", {
253
+ children: /* @__PURE__ */ D("table", {
282
254
  className: "w-full text-sm",
283
- children: [/* @__PURE__ */ T("thead", { children: /* @__PURE__ */ E("tr", {
255
+ children: [/* @__PURE__ */ E("thead", { children: /* @__PURE__ */ D("tr", {
284
256
  className: "border-b border-border-subtle bg-bg-sunken/50",
285
- children: [/* @__PURE__ */ T("th", {
257
+ children: [/* @__PURE__ */ E("th", {
286
258
  className: "px-4 py-3 text-left font-medium text-text-secondary w-1/2",
287
259
  children: "Resource"
288
- }), n.map((e) => /* @__PURE__ */ T("th", {
260
+ }), n.map((e) => /* @__PURE__ */ E("th", {
289
261
  className: "px-4 py-3 text-center font-medium text-text-secondary",
290
262
  children: r[e]
291
263
  }, e))]
292
- }) }), /* @__PURE__ */ T("tbody", {
264
+ }) }), /* @__PURE__ */ E("tbody", {
293
265
  className: "divide-y divide-border",
294
- children: k.map((r) => /* @__PURE__ */ E("tr", {
266
+ children: A.map((r) => /* @__PURE__ */ D("tr", {
295
267
  className: "hover:bg-bg-sunken/30 transition-colors",
296
- children: [/* @__PURE__ */ E("td", {
268
+ children: [/* @__PURE__ */ D("td", {
297
269
  className: "px-4 py-3",
298
- children: [/* @__PURE__ */ T("p", {
270
+ children: [/* @__PURE__ */ E("p", {
299
271
  className: "font-medium text-text-primary",
300
272
  children: r.label
301
- }), /* @__PURE__ */ T("p", {
273
+ }), /* @__PURE__ */ E("p", {
302
274
  className: "text-xs text-text-secondary",
303
275
  children: r.description
304
276
  })]
305
- }), n.map((n) => /* @__PURE__ */ T("td", {
277
+ }), n.map((n) => /* @__PURE__ */ E("td", {
306
278
  className: "px-4 py-3 text-center",
307
- children: /* @__PURE__ */ T("input", {
279
+ children: /* @__PURE__ */ E("input", {
308
280
  type: "radio",
309
281
  name: `permission-${r.id}`,
310
282
  value: n,
@@ -318,10 +290,10 @@ var M = [
318
290
  })
319
291
  });
320
292
  }, L = () => {
321
- let { navigate: t, basePath: m, activeOrgId: h } = e(), { t: g } = D(), _ = (e, t) => {
293
+ let { navigate: t, basePath: m, activeOrgId: h } = e(), { t: g } = O(), _ = (e, t) => {
322
294
  let n = g(e);
323
295
  return n === e ? t : n;
324
- }, v = n(), { products: b } = ee(), [x, S] = f(null), [k, L] = f([]), [R, z] = f(A()), B = d(!1), [V, H] = f({
296
+ }, v = n(), { products: b } = ee(), [x, S] = f(null), [A, L] = f([]), [R, z] = f(j()), B = d(!1), [V, H] = f({
325
297
  name: "",
326
298
  slug: "",
327
299
  shortDescription: "",
@@ -378,10 +350,10 @@ var M = [
378
350
  }));
379
351
  }, ce = () => {
380
352
  let e = {};
381
- return V.name.trim() ? V.name.length < 3 ? e.name = "Name must be at least 3 characters" : V.name.length > 100 && (e.name = "Name must be less than 100 characters") : e.name = "Name is required", V.slug.trim() ? /^[a-z0-9-]+$/.test(V.slug) || (e.slug = "Slug can only contain lowercase letters, numbers, and hyphens") : e.slug = "Slug is required", V.shortDescription.trim() ? V.shortDescription.length > 200 && (e.shortDescription = "Short description must be less than 200 characters") : e.shortDescription = "Short description is required", V.category || (e.category = "Category is required"), x !== "app" && k.length === 0 && (e.compatibleProducts = "Select at least one compatible product so users can find this in the right store"), W(e), Object.keys(e).length === 0;
382
- }, Z = () => O[x ?? "app"].appType, le = async (e) => {
353
+ return V.name.trim() ? V.name.length < 3 ? e.name = "Name must be at least 3 characters" : V.name.length > 100 && (e.name = "Name must be less than 100 characters") : e.name = "Name is required", V.slug.trim() ? /^[a-z0-9-]+$/.test(V.slug) || (e.slug = "Slug can only contain lowercase letters, numbers, and hyphens") : e.slug = "Slug is required", V.shortDescription.trim() ? V.shortDescription.length > 200 && (e.shortDescription = "Short description must be less than 200 characters") : e.shortDescription = "Short description is required", V.category || (e.category = "Category is required"), x !== "app" && A.length === 0 && (e.compatibleProducts = "Select at least one compatible product so users can find this in the right store"), W(e), Object.keys(e).length === 0;
354
+ }, Z = () => k[x ?? "app"].appType, le = async (e) => {
383
355
  if (e.preventDefault(), !ce() || !x) return;
384
- let t = x === "app" ? { permissions: j(R) } : null;
356
+ let t = x === "app" ? { permissions: M(R) } : null;
385
357
  try {
386
358
  let e = await G({ variables: { input: {
387
359
  name: V.name,
@@ -397,7 +369,7 @@ var M = [
397
369
  documentationUrl: V.documentationUrl || void 0,
398
370
  supportUrl: V.supportUrl || void 0,
399
371
  manifest: t ?? void 0,
400
- compatibleProducts: k.length > 0 ? k : void 0,
372
+ compatibleProducts: A.length > 0 ? A : void 0,
401
373
  ...x === "app" && {
402
374
  oauthAuthUrl: V.oauthAuthUrl || void 0,
403
375
  oauthTokenUrl: V.oauthTokenUrl || void 0,
@@ -423,17 +395,17 @@ var M = [
423
395
  }));
424
396
  }
425
397
  };
426
- if (!x) return /* @__PURE__ */ T(l, {
398
+ if (!x) return /* @__PURE__ */ E(l, {
427
399
  authOnly: !0,
428
- children: /* @__PURE__ */ T(a, {
400
+ children: /* @__PURE__ */ E(a, {
429
401
  title: "What do you want to build?",
430
402
  description: "Choose a builder type to get started",
431
403
  purpose: "Pick the kind of integration you are creating — a standard app, a Node package, or a workflow. Your choice sets up the right defaults (credentials, permissions, and where it can be installed) so you only fill in what that type actually needs.",
432
404
  backLink: `${m}/apps`,
433
405
  backLabel: "Back to Applications",
434
- children: /* @__PURE__ */ E("div", {
406
+ children: /* @__PURE__ */ D("div", {
435
407
  className: "max-w-3xl space-y-6",
436
- children: [/* @__PURE__ */ T("div", {
408
+ children: [/* @__PURE__ */ E("div", {
437
409
  className: "grid gap-4 sm:grid-cols-3",
438
410
  children: [
439
411
  "app",
@@ -443,8 +415,8 @@ var M = [
443
415
  "widget",
444
416
  "dashboard"
445
417
  ].map((e) => {
446
- let t = O[e];
447
- return /* @__PURE__ */ T(F, {
418
+ let t = k[e];
419
+ return /* @__PURE__ */ E(F, {
448
420
  icon: t.icon,
449
421
  title: t.label,
450
422
  description: t.cardDescription,
@@ -453,48 +425,48 @@ var M = [
453
425
  onClick: () => S(e)
454
426
  }, e);
455
427
  })
456
- }), /* @__PURE__ */ E("div", {
428
+ }), /* @__PURE__ */ D("div", {
457
429
  className: "rounded-lg border border-border-subtle bg-bg-sunken/30 p-4 flex gap-3 text-sm text-text-secondary",
458
- children: [/* @__PURE__ */ T(y, {
430
+ children: [/* @__PURE__ */ E(y, {
459
431
  size: 16,
460
432
  className: "flex-shrink-0 mt-0.5"
461
- }), /* @__PURE__ */ T("p", { children: "Apps use OAuth to interact with platform data. Nodes and Workflows are packaged files you upload after creation." })]
433
+ }), /* @__PURE__ */ E("p", { children: "Apps use OAuth to interact with platform data. Nodes and Workflows are packaged files you upload after creation." })]
462
434
  })]
463
435
  })
464
436
  })
465
437
  });
466
- let Q = O[x ?? "app"], $ = Q.label, ue = Q.icon, de = /* @__PURE__ */ T(ue, { size: 16 });
467
- return /* @__PURE__ */ T(l, {
438
+ let Q = k[x ?? "app"], $ = Q.label, ue = Q.icon, de = /* @__PURE__ */ E(ue, { size: 16 });
439
+ return /* @__PURE__ */ E(l, {
468
440
  authOnly: !0,
469
- children: /* @__PURE__ */ T(a, {
441
+ children: /* @__PURE__ */ E(a, {
470
442
  title: `Create ${$}`,
471
443
  description: Q.pageDescription,
472
444
  purpose: Q.purpose,
473
445
  backLink: `${m}/apps`,
474
446
  backLabel: "Back to Applications",
475
- children: /* @__PURE__ */ E("form", {
447
+ children: /* @__PURE__ */ D("form", {
476
448
  onSubmit: le,
477
449
  className: "space-y-8 max-w-3xl",
478
450
  children: [
479
- /* @__PURE__ */ E("div", {
451
+ /* @__PURE__ */ D("div", {
480
452
  className: "flex items-center gap-3",
481
- children: [/* @__PURE__ */ E("button", {
453
+ children: [/* @__PURE__ */ D("button", {
482
454
  type: "button",
483
455
  onClick: () => S(null),
484
456
  className: "flex items-center gap-1.5 text-sm text-text-secondary hover:text-text-primary transition-colors",
485
- children: [/* @__PURE__ */ T(p, { size: 14 }), "Change type"]
486
- }), /* @__PURE__ */ E("span", {
457
+ children: [/* @__PURE__ */ E(p, { size: 14 }), "Change type"]
458
+ }), /* @__PURE__ */ D("span", {
487
459
  className: "flex items-center gap-1.5 rounded-full border border-border-subtle bg-bg-sunken px-3 py-1 text-xs font-medium",
488
460
  children: [de, $]
489
461
  })]
490
462
  }),
491
- /* @__PURE__ */ T(o, {
463
+ /* @__PURE__ */ E(o, {
492
464
  title: "Basic Information",
493
465
  description: "Core details about your application",
494
- children: /* @__PURE__ */ E("div", {
466
+ children: /* @__PURE__ */ D("div", {
495
467
  className: "space-y-4",
496
468
  children: [
497
- /* @__PURE__ */ T(s, {
469
+ /* @__PURE__ */ E(s, {
498
470
  label: "Name",
499
471
  value: V.name,
500
472
  onChange: ae,
@@ -502,7 +474,7 @@ var M = [
502
474
  required: !0,
503
475
  error: U.name
504
476
  }),
505
- /* @__PURE__ */ T(s, {
477
+ /* @__PURE__ */ E(s, {
506
478
  label: "Slug",
507
479
  value: V.slug,
508
480
  onChange: oe,
@@ -511,7 +483,7 @@ var M = [
511
483
  error: U.slug,
512
484
  hint: B.current ? "Only lowercase letters, numbers, and hyphens" : "Auto-generated from name — edit to customise"
513
485
  }),
514
- /* @__PURE__ */ T(u, {
486
+ /* @__PURE__ */ E(u, {
515
487
  label: "Short Description",
516
488
  value: V.shortDescription,
517
489
  onChange: (e) => X("shortDescription", e),
@@ -522,36 +494,36 @@ var M = [
522
494
  rows: 2,
523
495
  maxLength: 200
524
496
  }),
525
- /* @__PURE__ */ E("div", {
497
+ /* @__PURE__ */ D("div", {
526
498
  className: "grid gap-4 sm:grid-cols-2",
527
- children: [/* @__PURE__ */ T(c, {
499
+ children: [/* @__PURE__ */ E(c, {
528
500
  label: "Category",
529
501
  value: V.category,
530
502
  onChange: (e) => X("category", e.target.value),
531
- options: P,
503
+ options: [...te],
532
504
  placeholder: "Select a category…",
533
505
  required: !0,
534
506
  error: U.category,
535
507
  hint: "Helps users discover your item in the store"
536
- }), /* @__PURE__ */ T(c, {
508
+ }), /* @__PURE__ */ E(c, {
537
509
  label: "Visibility",
538
510
  value: V.visibility,
539
511
  onChange: (e) => X("visibility", e.target.value),
540
- options: x === "workflow" ? N : M,
512
+ options: x === "workflow" ? P : N,
541
513
  required: !0,
542
514
  hint: V.visibility === "PUBLIC" ? "Listed in the marketplace after review approval — anyone can discover and install it" : V.visibility === "UNLISTED" ? "Not in the store, but share with anyone via a direct link. You can still submit for marketplace review later" : V.visibility === "INTERNAL" ? "Visible to all members of your developer organization — no one outside can access it" : "Only you (the creator) can see this — other org members cannot access it"
543
515
  })]
544
516
  }),
545
- x !== "app" && /* @__PURE__ */ E("div", {
517
+ x !== "app" && /* @__PURE__ */ D("div", {
546
518
  className: "space-y-2",
547
519
  children: [
548
- /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ E("label", {
520
+ /* @__PURE__ */ D("div", { children: [/* @__PURE__ */ D("label", {
549
521
  className: "block text-sm font-medium text-text-primary",
550
- children: ["Compatible Products", /* @__PURE__ */ T("span", {
522
+ children: ["Compatible Products", /* @__PURE__ */ E("span", {
551
523
  className: "text-status-error-text ml-1",
552
524
  children: "*"
553
525
  })]
554
- }), /* @__PURE__ */ E("p", {
526
+ }), /* @__PURE__ */ D("p", {
555
527
  className: "text-xs text-text-secondary mt-0.5",
556
528
  children: [
557
529
  "Select which products this ",
@@ -559,12 +531,12 @@ var M = [
559
531
  " works with. Users will see it in those products' node stores."
560
532
  ]
561
533
  })] }),
562
- /* @__PURE__ */ T(te, {
534
+ /* @__PURE__ */ E(ne, {
563
535
  options: b.map((e) => ({
564
536
  value: e.slug,
565
537
  label: e.name
566
538
  })),
567
- selected: k,
539
+ selected: A,
568
540
  onChange: (e) => {
569
541
  L(e), e.length > 0 && W((e) => ({
570
542
  ...e,
@@ -575,13 +547,13 @@ var M = [
575
547
  searchPlaceholder: "Search products…",
576
548
  error: !!U.compatibleProducts
577
549
  }),
578
- U.compatibleProducts && /* @__PURE__ */ T("p", {
550
+ U.compatibleProducts && /* @__PURE__ */ E("p", {
579
551
  className: "text-xs text-status-error-text",
580
552
  children: U.compatibleProducts
581
553
  })
582
554
  ]
583
555
  }),
584
- /* @__PURE__ */ T(u, {
556
+ /* @__PURE__ */ E(u, {
585
557
  label: "Full Description",
586
558
  value: V.description,
587
559
  onChange: (e) => X("description", e),
@@ -592,43 +564,43 @@ var M = [
592
564
  ]
593
565
  })
594
566
  }),
595
- J.length > 2 && /* @__PURE__ */ T(o, {
567
+ J.length > 2 && /* @__PURE__ */ E(o, {
596
568
  title: "Organization",
597
569
  description: "Which developer organization owns this?",
598
- children: /* @__PURE__ */ T(c, {
570
+ children: /* @__PURE__ */ E(c, {
599
571
  label: "Developer Organization",
600
572
  value: V.developerOrganizationId,
601
573
  onChange: (e) => X("developerOrganizationId", e.target.value),
602
574
  options: J
603
575
  })
604
576
  }),
605
- x === "app" && /* @__PURE__ */ E(o, {
577
+ x === "app" && /* @__PURE__ */ D(o, {
606
578
  title: "Permissions",
607
579
  description: "Choose what data your app can access. Users will see these permissions when authorizing your app — like GitHub Apps.",
608
- children: [/* @__PURE__ */ T(I, {
580
+ children: [/* @__PURE__ */ E(I, {
609
581
  permissions: R,
610
582
  onChange: se
611
- }), /* @__PURE__ */ E("div", {
583
+ }), /* @__PURE__ */ D("div", {
612
584
  className: "mt-3 flex gap-2 rounded-lg border border-border-subtle bg-bg-sunken/30 p-3 text-xs text-text-secondary",
613
- children: [/* @__PURE__ */ T(y, {
585
+ children: [/* @__PURE__ */ E(y, {
614
586
  size: 14,
615
587
  className: "flex-shrink-0 mt-0.5"
616
- }), /* @__PURE__ */ E("span", { children: [/* @__PURE__ */ T("strong", { children: "Read & Write" }), " implies Read. Select only what your app genuinely needs — fewer permissions build more user trust."] })]
588
+ }), /* @__PURE__ */ D("span", { children: [/* @__PURE__ */ E("strong", { children: "Read & Write" }), " implies Read. Select only what your app genuinely needs — fewer permissions build more user trust."] })]
617
589
  })]
618
590
  }),
619
- x === "app" && /* @__PURE__ */ T(o, {
591
+ x === "app" && /* @__PURE__ */ E(o, {
620
592
  title: "Integration Setup",
621
593
  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.",
622
- children: /* @__PURE__ */ E("div", {
594
+ children: /* @__PURE__ */ D("div", {
623
595
  className: "space-y-4",
624
- children: [/* @__PURE__ */ T(s, {
596
+ children: [/* @__PURE__ */ E(s, {
625
597
  label: "Post-install Callback URL",
626
598
  type: "url",
627
599
  value: V.oauthAuthUrl,
628
600
  onChange: (e) => X("oauthAuthUrl", e.target.value),
629
601
  placeholder: "https://yourapp.com/callback",
630
602
  hint: "Users land here after install with ?installation_id=xxx appended"
631
- }), /* @__PURE__ */ T(s, {
603
+ }), /* @__PURE__ */ E(s, {
632
604
  label: "Revoke URL",
633
605
  type: "url",
634
606
  value: V.oauthRevokeUrl,
@@ -638,43 +610,43 @@ var M = [
638
610
  })]
639
611
  })
640
612
  }),
641
- x !== "app" && /* @__PURE__ */ E("div", {
613
+ x !== "app" && /* @__PURE__ */ D("div", {
642
614
  className: "rounded-lg border border-border-subtle bg-bg-sunken/30 p-4 flex gap-3 text-sm text-text-secondary",
643
- children: [/* @__PURE__ */ T(y, {
615
+ children: [/* @__PURE__ */ E(y, {
644
616
  size: 16,
645
617
  className: "flex-shrink-0 mt-0.5"
646
- }), /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("p", {
618
+ }), /* @__PURE__ */ D("div", { children: [/* @__PURE__ */ E("p", {
647
619
  className: "font-medium text-text-primary",
648
620
  children: "File uploads"
649
- }), /* @__PURE__ */ T("p", {
621
+ }), /* @__PURE__ */ E("p", {
650
622
  className: "mt-1",
651
623
  children: x === "node" ? "After creating your Node, go to the Versions tab to upload your ZIP bundle and manifest.json." : `After creating your ${$}, go to the Versions tab to upload its manifest JSON.`
652
624
  })] })]
653
625
  }),
654
- U._submit && /* @__PURE__ */ E("div", {
626
+ U._submit && /* @__PURE__ */ D("div", {
655
627
  className: "flex items-start gap-3 rounded-lg border border-status-error-bg bg-status-error-bg/10 px-4 py-3 text-sm text-status-error-text",
656
- children: [/* @__PURE__ */ T(y, {
628
+ children: [/* @__PURE__ */ E(y, {
657
629
  size: 16,
658
630
  className: "flex-shrink-0 mt-0.5"
659
- }), /* @__PURE__ */ T("span", { children: U._submit })]
631
+ }), /* @__PURE__ */ E("span", { children: U._submit })]
660
632
  }),
661
- /* @__PURE__ */ E("div", {
633
+ /* @__PURE__ */ D("div", {
662
634
  className: "flex items-center justify-end gap-3 border-t pt-6",
663
- children: [/* @__PURE__ */ E("button", {
635
+ children: [/* @__PURE__ */ D("button", {
664
636
  type: "button",
665
637
  onClick: () => Y("/apps"),
666
638
  disabled: K,
667
639
  className: "inline-flex items-center gap-2 rounded-md border px-4 py-2 text-sm font-medium hover:bg-bg-sunken transition-colors disabled:opacity-50",
668
- children: [/* @__PURE__ */ T(C, { size: 16 }), _("devportal.cancel", "Cancel")]
669
- }), /* @__PURE__ */ T("button", {
640
+ children: [/* @__PURE__ */ E(w, { size: 16 }), _("devportal.cancel", "Cancel")]
641
+ }), /* @__PURE__ */ E("button", {
670
642
  type: "submit",
671
643
  disabled: K,
672
644
  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",
673
- children: K ? /* @__PURE__ */ E(w, { children: [/* @__PURE__ */ T(ne, {
645
+ children: K ? /* @__PURE__ */ D(T, { children: [/* @__PURE__ */ E(re, {
674
646
  size: 16,
675
647
  className: "animate-spin"
676
- }), "Creating…"] }) : /* @__PURE__ */ E(w, { children: [
677
- /* @__PURE__ */ T(re, { size: 16 }),
648
+ }), "Creating…"] }) : /* @__PURE__ */ D(T, { children: [
649
+ /* @__PURE__ */ E(C, { size: 16 }),
678
650
  "Create ",
679
651
  $
680
652
  ] })