@burdenoff/microfe-devportal 2026.916.8 → 2026.917.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.
Files changed (35) hide show
  1. package/dist/devportal/components/ManifestViewer.d.ts +12 -0
  2. package/dist/devportal/components/ManifestViewer.d.ts.map +1 -0
  3. package/dist/devportal/components/ManifestViewer.js +58 -0
  4. package/dist/devportal/components/ManifestViewer.js.map +1 -0
  5. package/dist/devportal/components/index.d.ts +1 -0
  6. package/dist/devportal/components/index.d.ts.map +1 -1
  7. package/dist/devportal/components/index.js +1 -0
  8. package/dist/devportal/hooks/index.d.ts +1 -0
  9. package/dist/devportal/hooks/index.d.ts.map +1 -1
  10. package/dist/devportal/hooks/index.js +1 -0
  11. package/dist/devportal/hooks/useProducts.d.ts +18 -0
  12. package/dist/devportal/hooks/useProducts.d.ts.map +1 -0
  13. package/dist/devportal/hooks/useProducts.js +14 -0
  14. package/dist/devportal/hooks/useProducts.js.map +1 -0
  15. package/dist/devportal/pages/AdminReviewPage.d.ts.map +1 -1
  16. package/dist/devportal/pages/AdminReviewPage.js +54 -64
  17. package/dist/devportal/pages/AdminReviewPage.js.map +1 -1
  18. package/dist/devportal/pages/ApplicationVersionsPage.d.ts.map +1 -1
  19. package/dist/devportal/pages/ApplicationVersionsPage.js +304 -272
  20. package/dist/devportal/pages/ApplicationVersionsPage.js.map +1 -1
  21. package/dist/devportal/pages/CreateApplicationPage.d.ts.map +1 -1
  22. package/dist/devportal/pages/CreateApplicationPage.js +137 -156
  23. package/dist/devportal/pages/CreateApplicationPage.js.map +1 -1
  24. package/dist/devportal/pages/EditApplicationPage.d.ts.map +1 -1
  25. package/dist/devportal/pages/EditApplicationPage.js +271 -290
  26. package/dist/devportal/pages/EditApplicationPage.js.map +1 -1
  27. package/dist/generated/global-operations.d.ts +39 -0
  28. package/dist/generated/global-operations.d.ts.map +1 -1
  29. package/dist/generated/global-operations.js +72 -54
  30. package/dist/generated/global-operations.js.map +1 -1
  31. package/dist/translations/en.d.ts +4 -1
  32. package/dist/translations/en.d.ts.map +1 -1
  33. package/dist/translations/en.js +5 -2
  34. package/dist/translations/en.js.map +1 -1
  35. package/package.json +1 -1
@@ -7,12 +7,14 @@ import { InputField as s, SelectField as c } from "../components/FormField.js";
7
7
  import { PermissionGuard as l } from "../components/PermissionGuard.js";
8
8
  import { MarkdownEditor as u } from "../components/MarkdownEditor.js";
9
9
  import "../components/index.js";
10
- import { useRef as ee, useState as d } from "react";
11
- import { ArrowLeft as f, Box as p, Check as m, ChevronRight as h, FileCode2 as g, GitFork as _, Info as v, LayoutDashboard as y, LayoutGrid as b, Loader2 as x, Puzzle as S, Save as te, X as ne } from "lucide-react";
12
- import { Fragment as C, jsx as w, jsxs as T } from "react/jsx-runtime";
13
- import { useI18n as E } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
10
+ import { useProducts as ee } from "../hooks/useProducts.js";
11
+ import "../hooks/index.js";
12
+ import { useRef as te, useState as d } from "react";
13
+ import { ArrowLeft as f, Box as p, Check as m, ChevronRight as h, FileCode2 as g, GitFork as _, Info as v, LayoutDashboard as y, LayoutGrid as b, Loader2 as x, Puzzle as S, Save as C, X as w } from "lucide-react";
14
+ import { Fragment as T, jsx as E, jsxs as D } from "react/jsx-runtime";
15
+ import { useI18n as O } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
14
16
  //#region src/devportal/pages/CreateApplicationPage.tsx
15
- var D = {
17
+ var k = {
16
18
  app: {
17
19
  appType: "API_INTEGRATION",
18
20
  icon: p,
@@ -103,7 +105,7 @@ var D = {
103
105
  "Publish to store"
104
106
  ]
105
107
  }
106
- }, O = [
108
+ }, A = [
107
109
  {
108
110
  id: "auth",
109
111
  label: "Authentication",
@@ -175,16 +177,16 @@ var D = {
175
177
  description: "Access control configuration"
176
178
  }
177
179
  ];
178
- function k() {
179
- return Object.fromEntries(O.map((e) => [e.id, "none"]));
180
+ function j() {
181
+ return Object.fromEntries(A.map((e) => [e.id, "none"]));
180
182
  }
181
- function re(e) {
183
+ function M(e) {
182
184
  return Object.entries(e).filter(([, e]) => e !== "none").map(([e, t]) => ({
183
185
  resource: e,
184
186
  level: t
185
187
  }));
186
188
  }
187
- var A = [
189
+ var N = [
188
190
  {
189
191
  value: "PUBLIC",
190
192
  label: "Public — listed in the marketplace after review"
@@ -197,10 +199,10 @@ var A = [
197
199
  value: "INTERNAL",
198
200
  label: "Internal — visible to your entire dev org"
199
201
  }
200
- ], j = [...A, {
202
+ ], P = [...N, {
201
203
  value: "UNLISTED",
202
204
  label: "Unlisted — shareable via link, not listed in store"
203
- }], M = [
205
+ }], ne = [
204
206
  {
205
207
  value: "ai",
206
208
  label: "AI & Automation"
@@ -229,41 +231,41 @@ var A = [
229
231
  value: "trigger",
230
232
  label: "Triggers"
231
233
  }
232
- ], N = ({ icon: e, title: n, description: r, bullets: i, selected: a, onClick: o }) => /* @__PURE__ */ T("button", {
234
+ ], re = ({ icon: e, title: n, description: r, bullets: i, selected: a, onClick: o }) => /* @__PURE__ */ D("button", {
233
235
  type: "button",
234
236
  onClick: o,
235
237
  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"),
236
238
  children: [
237
- a && /* @__PURE__ */ w("span", {
239
+ a && /* @__PURE__ */ E("span", {
238
240
  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",
239
- children: /* @__PURE__ */ w(m, { size: 12 })
241
+ children: /* @__PURE__ */ E(m, { size: 12 })
240
242
  }),
241
- /* @__PURE__ */ w("div", {
243
+ /* @__PURE__ */ E("div", {
242
244
  className: "flex h-10 w-10 items-center justify-center rounded-lg bg-bg-sunken",
243
- children: /* @__PURE__ */ w(e, {
245
+ children: /* @__PURE__ */ E(e, {
244
246
  size: 22,
245
247
  className: "text-text-primary"
246
248
  })
247
249
  }),
248
- /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("p", {
250
+ /* @__PURE__ */ D("div", { children: [/* @__PURE__ */ E("p", {
249
251
  className: "font-semibold text-text-primary",
250
252
  children: n
251
- }), /* @__PURE__ */ w("p", {
253
+ }), /* @__PURE__ */ E("p", {
252
254
  className: "mt-1 text-sm text-text-secondary",
253
255
  children: r
254
256
  })] }),
255
- /* @__PURE__ */ w("ul", {
257
+ /* @__PURE__ */ E("ul", {
256
258
  className: "mt-1 space-y-1",
257
- children: i.map((e) => /* @__PURE__ */ T("li", {
259
+ children: i.map((e) => /* @__PURE__ */ D("li", {
258
260
  className: "flex items-center gap-2 text-xs text-text-secondary",
259
- children: [/* @__PURE__ */ w(h, {
261
+ children: [/* @__PURE__ */ E(h, {
260
262
  size: 12,
261
263
  className: "flex-shrink-0 text-primary"
262
264
  }), e]
263
265
  }, e))
264
266
  })
265
267
  ]
266
- }), P = ({ permissions: e, onChange: t }) => {
268
+ }), ie = ({ permissions: e, onChange: t }) => {
267
269
  let n = [
268
270
  "none",
269
271
  "read",
@@ -273,35 +275,35 @@ var A = [
273
275
  read: "Read",
274
276
  write: "Read & Write"
275
277
  };
276
- return /* @__PURE__ */ w("div", {
278
+ return /* @__PURE__ */ E("div", {
277
279
  className: "overflow-x-auto rounded-lg border border-border-subtle",
278
- children: /* @__PURE__ */ T("table", {
280
+ children: /* @__PURE__ */ D("table", {
279
281
  className: "w-full text-sm",
280
- children: [/* @__PURE__ */ w("thead", { children: /* @__PURE__ */ T("tr", {
282
+ children: [/* @__PURE__ */ E("thead", { children: /* @__PURE__ */ D("tr", {
281
283
  className: "border-b border-border-subtle bg-bg-sunken/50",
282
- children: [/* @__PURE__ */ w("th", {
284
+ children: [/* @__PURE__ */ E("th", {
283
285
  className: "px-4 py-3 text-left font-medium text-text-secondary w-1/2",
284
286
  children: "Resource"
285
- }), n.map((e) => /* @__PURE__ */ w("th", {
287
+ }), n.map((e) => /* @__PURE__ */ E("th", {
286
288
  className: "px-4 py-3 text-center font-medium text-text-secondary",
287
289
  children: r[e]
288
290
  }, e))]
289
- }) }), /* @__PURE__ */ w("tbody", {
291
+ }) }), /* @__PURE__ */ E("tbody", {
290
292
  className: "divide-y divide-border",
291
- children: O.map((r) => /* @__PURE__ */ T("tr", {
293
+ children: A.map((r) => /* @__PURE__ */ D("tr", {
292
294
  className: "hover:bg-bg-sunken/30 transition-colors",
293
- children: [/* @__PURE__ */ T("td", {
295
+ children: [/* @__PURE__ */ D("td", {
294
296
  className: "px-4 py-3",
295
- children: [/* @__PURE__ */ w("p", {
297
+ children: [/* @__PURE__ */ E("p", {
296
298
  className: "font-medium text-text-primary",
297
299
  children: r.label
298
- }), /* @__PURE__ */ w("p", {
300
+ }), /* @__PURE__ */ E("p", {
299
301
  className: "text-xs text-text-secondary",
300
302
  children: r.description
301
303
  })]
302
- }), n.map((n) => /* @__PURE__ */ w("td", {
304
+ }), n.map((n) => /* @__PURE__ */ E("td", {
303
305
  className: "px-4 py-3 text-center",
304
- children: /* @__PURE__ */ w("input", {
306
+ children: /* @__PURE__ */ E("input", {
305
307
  type: "radio",
306
308
  name: `permission-${r.id}`,
307
309
  value: n,
@@ -314,32 +316,11 @@ var A = [
314
316
  })]
315
317
  })
316
318
  });
317
- }, F = [
318
- {
319
- value: "fluidgrids",
320
- label: "FluidGrids"
321
- },
322
- {
323
- value: "workspaces",
324
- label: "Workspaces"
325
- },
326
- {
327
- value: "bigconsole",
328
- label: "BigConsole"
329
- },
330
- {
331
- value: "botlit",
332
- label: "Botlit"
333
- },
334
- {
335
- value: "vibecontrols",
336
- label: "VibeControls"
337
- }
338
- ], I = () => {
339
- let { navigate: p, basePath: h, activeOrgId: g } = e(), { t: _ } = E(), y = (e, t) => {
319
+ }, F = () => {
320
+ let { navigate: p, basePath: h, activeOrgId: g } = e(), { t: _ } = O(), y = (e, t) => {
340
321
  let n = _(e);
341
322
  return n === e ? t : n;
342
- }, b = n(), [S, O] = d(null), [I, ie] = d([]), [L, R] = d(k()), z = ee(!1), [B, V] = d({
323
+ }, b = n(), { products: S } = ee(), [A, F] = d(null), [I, ae] = d([]), [L, R] = d(j()), z = te(!1), [B, V] = d({
343
324
  name: "",
344
325
  slug: "",
345
326
  shortDescription: "",
@@ -360,17 +341,17 @@ var A = [
360
341
  }, ...(K?.myDeveloperOrganizations ?? []).filter((e) => e.kind !== "PHYSICAL").map((e) => ({
361
342
  value: e.id,
362
343
  label: e.name
363
- }))], J = (e) => p?.(`${h}${e}`), ae = (e) => e.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, ""), Y = (e) => {
344
+ }))], J = (e) => p?.(`${h}${e}`), oe = (e) => e.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, ""), se = (e) => {
364
345
  let t = e.target.value;
365
346
  V((e) => ({
366
347
  ...e,
367
348
  name: t,
368
- slug: z.current ? e.slug : ae(t)
349
+ slug: z.current ? e.slug : oe(t)
369
350
  })), H.name && U((e) => ({
370
351
  ...e,
371
352
  name: void 0
372
353
  }));
373
- }, oe = (e) => {
354
+ }, ce = (e) => {
374
355
  z.current = !0;
375
356
  let t = e.target.value.toLowerCase().replace(/[^a-z0-9-]/g, "");
376
357
  V((e) => ({
@@ -380,7 +361,7 @@ var A = [
380
361
  ...e,
381
362
  slug: void 0
382
363
  }));
383
- }, X = (e, t) => {
364
+ }, Y = (e, t) => {
384
365
  V((n) => ({
385
366
  ...n,
386
367
  [e]: t
@@ -389,17 +370,17 @@ var A = [
389
370
  [e]: void 0,
390
371
  _submit: void 0
391
372
  }));
392
- }, se = (e, t) => {
373
+ }, le = (e, t) => {
393
374
  R((n) => ({
394
375
  ...n,
395
376
  [e]: t
396
377
  }));
397
- }, ce = () => {
378
+ }, X = () => {
398
379
  let e = {};
399
- return B.name.trim() ? B.name.length < 3 ? e.name = "Name must be at least 3 characters" : B.name.length > 100 && (e.name = "Name must be less than 100 characters") : e.name = "Name is required", B.slug.trim() ? /^[a-z0-9-]+$/.test(B.slug) || (e.slug = "Slug can only contain lowercase letters, numbers, and hyphens") : e.slug = "Slug is required", B.shortDescription.trim() ? B.shortDescription.length > 200 && (e.shortDescription = "Short description must be less than 200 characters") : e.shortDescription = "Short description is required", B.category || (e.category = "Category is required"), S !== "app" && I.length === 0 && (e.compatibleProducts = "Select at least one compatible product so users can find this in the right store"), U(e), Object.keys(e).length === 0;
400
- }, Z = () => D[S ?? "app"].appType, le = async (e) => {
401
- if (e.preventDefault(), !ce() || !S) return;
402
- let t = S === "app" ? { permissions: re(L) } : null;
380
+ return B.name.trim() ? B.name.length < 3 ? e.name = "Name must be at least 3 characters" : B.name.length > 100 && (e.name = "Name must be less than 100 characters") : e.name = "Name is required", B.slug.trim() ? /^[a-z0-9-]+$/.test(B.slug) || (e.slug = "Slug can only contain lowercase letters, numbers, and hyphens") : e.slug = "Slug is required", B.shortDescription.trim() ? B.shortDescription.length > 200 && (e.shortDescription = "Short description must be less than 200 characters") : e.shortDescription = "Short description is required", B.category || (e.category = "Category is required"), A !== "app" && I.length === 0 && (e.compatibleProducts = "Select at least one compatible product so users can find this in the right store"), U(e), Object.keys(e).length === 0;
381
+ }, Z = () => k[A ?? "app"].appType, ue = async (e) => {
382
+ if (e.preventDefault(), !X() || !A) return;
383
+ let t = A === "app" ? { permissions: M(L) } : null;
403
384
  try {
404
385
  let e = await W({ variables: { input: {
405
386
  name: B.name,
@@ -416,7 +397,7 @@ var A = [
416
397
  supportUrl: B.supportUrl || void 0,
417
398
  manifest: t ?? void 0,
418
399
  compatibleProducts: I.length > 0 ? I : void 0,
419
- ...S === "app" && {
400
+ ...A === "app" && {
420
401
  oauthAuthUrl: B.oauthAuthUrl || void 0,
421
402
  oauthTokenUrl: B.oauthTokenUrl || void 0,
422
403
  oauthRevokeUrl: B.oauthRevokeUrl || void 0
@@ -441,17 +422,17 @@ var A = [
441
422
  }));
442
423
  }
443
424
  };
444
- if (!S) return /* @__PURE__ */ w(l, {
425
+ if (!A) return /* @__PURE__ */ E(l, {
445
426
  authOnly: !0,
446
- children: /* @__PURE__ */ w(a, {
427
+ children: /* @__PURE__ */ E(a, {
447
428
  title: "What do you want to build?",
448
429
  description: "Choose a builder type to get started",
449
430
  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.",
450
431
  backLink: `${h}/apps`,
451
432
  backLabel: "Back to Applications",
452
- children: /* @__PURE__ */ T("div", {
433
+ children: /* @__PURE__ */ D("div", {
453
434
  className: "max-w-3xl space-y-6",
454
- children: [/* @__PURE__ */ w("div", {
435
+ children: [/* @__PURE__ */ E("div", {
455
436
  className: "grid gap-4 sm:grid-cols-3",
456
437
  children: [
457
438
  "app",
@@ -461,78 +442,78 @@ var A = [
461
442
  "widget",
462
443
  "dashboard"
463
444
  ].map((e) => {
464
- let t = D[e];
465
- return /* @__PURE__ */ w(N, {
445
+ let t = k[e];
446
+ return /* @__PURE__ */ E(re, {
466
447
  icon: t.icon,
467
448
  title: t.label,
468
449
  description: t.cardDescription,
469
450
  bullets: t.cardBullets,
470
- selected: S === e,
471
- onClick: () => O(e)
451
+ selected: A === e,
452
+ onClick: () => F(e)
472
453
  }, e);
473
454
  })
474
- }), /* @__PURE__ */ T("div", {
455
+ }), /* @__PURE__ */ D("div", {
475
456
  className: "rounded-lg border border-border-subtle bg-bg-sunken/30 p-4 flex gap-3 text-sm text-text-secondary",
476
- children: [/* @__PURE__ */ w(v, {
457
+ children: [/* @__PURE__ */ E(v, {
477
458
  size: 16,
478
459
  className: "flex-shrink-0 mt-0.5"
479
- }), /* @__PURE__ */ w("p", { children: "Apps use OAuth to interact with platform data. Nodes and Workflows are packaged files you upload after creation." })]
460
+ }), /* @__PURE__ */ E("p", { children: "Apps use OAuth to interact with platform data. Nodes and Workflows are packaged files you upload after creation." })]
480
461
  })]
481
462
  })
482
463
  })
483
464
  });
484
- let Q = D[S ?? "app"], $ = Q.label, ue = Q.icon, de = /* @__PURE__ */ w(ue, { size: 16 });
485
- return /* @__PURE__ */ w(l, {
465
+ let Q = k[A ?? "app"], $ = Q.label, de = Q.icon, fe = /* @__PURE__ */ E(de, { size: 16 });
466
+ return /* @__PURE__ */ E(l, {
486
467
  authOnly: !0,
487
- children: /* @__PURE__ */ w(a, {
468
+ children: /* @__PURE__ */ E(a, {
488
469
  title: `Create ${$}`,
489
470
  description: Q.pageDescription,
490
471
  purpose: Q.purpose,
491
472
  backLink: `${h}/apps`,
492
473
  backLabel: "Back to Applications",
493
- children: /* @__PURE__ */ T("form", {
494
- onSubmit: le,
474
+ children: /* @__PURE__ */ D("form", {
475
+ onSubmit: ue,
495
476
  className: "space-y-8 max-w-3xl",
496
477
  children: [
497
- /* @__PURE__ */ T("div", {
478
+ /* @__PURE__ */ D("div", {
498
479
  className: "flex items-center gap-3",
499
- children: [/* @__PURE__ */ T("button", {
480
+ children: [/* @__PURE__ */ D("button", {
500
481
  type: "button",
501
- onClick: () => O(null),
482
+ onClick: () => F(null),
502
483
  className: "flex items-center gap-1.5 text-sm text-text-secondary hover:text-text-primary transition-colors",
503
- children: [/* @__PURE__ */ w(f, { size: 14 }), "Change type"]
504
- }), /* @__PURE__ */ T("span", {
484
+ children: [/* @__PURE__ */ E(f, { size: 14 }), "Change type"]
485
+ }), /* @__PURE__ */ D("span", {
505
486
  className: "flex items-center gap-1.5 rounded-full border border-border-subtle bg-bg-sunken px-3 py-1 text-xs font-medium",
506
- children: [de, $]
487
+ children: [fe, $]
507
488
  })]
508
489
  }),
509
- /* @__PURE__ */ w(o, {
490
+ /* @__PURE__ */ E(o, {
510
491
  title: "Basic Information",
511
492
  description: "Core details about your application",
512
- children: /* @__PURE__ */ T("div", {
493
+ children: /* @__PURE__ */ D("div", {
513
494
  className: "space-y-4",
514
495
  children: [
515
- /* @__PURE__ */ w(s, {
496
+ /* @__PURE__ */ E(s, {
516
497
  label: "Name",
517
498
  value: B.name,
518
- onChange: Y,
499
+ onChange: se,
519
500
  placeholder: Q.namePlaceholder,
520
501
  required: !0,
521
502
  error: H.name
522
503
  }),
523
- /* @__PURE__ */ w(s, {
504
+ /* @__PURE__ */ E(s, {
524
505
  label: "Slug",
525
506
  value: B.slug,
526
- onChange: oe,
507
+ onChange: ce,
527
508
  placeholder: "my-integration",
528
509
  required: !0,
529
510
  error: H.slug,
530
511
  hint: z.current ? "Only lowercase letters, numbers, and hyphens" : "Auto-generated from name — edit to customise"
531
512
  }),
532
- /* @__PURE__ */ w(u, {
513
+ /* @__PURE__ */ E(u, {
533
514
  label: "Short Description",
534
515
  value: B.shortDescription,
535
- onChange: (e) => X("shortDescription", e),
516
+ onChange: (e) => Y("shortDescription", e),
536
517
  placeholder: "Briefly describe what this does",
537
518
  required: !0,
538
519
  error: H.shortDescription,
@@ -540,57 +521,57 @@ var A = [
540
521
  rows: 2,
541
522
  maxLength: 200
542
523
  }),
543
- /* @__PURE__ */ T("div", {
524
+ /* @__PURE__ */ D("div", {
544
525
  className: "grid gap-4 sm:grid-cols-2",
545
- children: [/* @__PURE__ */ w(c, {
526
+ children: [/* @__PURE__ */ E(c, {
546
527
  label: "Category",
547
528
  value: B.category,
548
- onChange: (e) => X("category", e.target.value),
549
- options: M,
529
+ onChange: (e) => Y("category", e.target.value),
530
+ options: ne,
550
531
  placeholder: "Select a category…",
551
532
  required: !0,
552
533
  error: H.category,
553
534
  hint: "Helps users discover your item in the store"
554
- }), /* @__PURE__ */ w(c, {
535
+ }), /* @__PURE__ */ E(c, {
555
536
  label: "Visibility",
556
537
  value: B.visibility,
557
- onChange: (e) => X("visibility", e.target.value),
558
- options: S === "workflow" ? j : A,
538
+ onChange: (e) => Y("visibility", e.target.value),
539
+ options: A === "workflow" ? P : N,
559
540
  required: !0,
560
541
  hint: B.visibility === "PUBLIC" ? "Listed in the marketplace after review approval — anyone can discover and install it" : B.visibility === "UNLISTED" ? "Not in the store, but share with anyone via a direct link. You can still submit for marketplace review later" : B.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"
561
542
  })]
562
543
  }),
563
- S !== "app" && /* @__PURE__ */ T("div", {
544
+ A !== "app" && /* @__PURE__ */ D("div", {
564
545
  className: "space-y-2",
565
546
  children: [
566
- /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ T("label", {
547
+ /* @__PURE__ */ D("div", { children: [/* @__PURE__ */ D("label", {
567
548
  className: "block text-sm font-medium text-text-primary",
568
- children: ["Compatible Products", /* @__PURE__ */ w("span", {
549
+ children: ["Compatible Products", /* @__PURE__ */ E("span", {
569
550
  className: "text-status-error-text ml-1",
570
551
  children: "*"
571
552
  })]
572
- }), /* @__PURE__ */ T("p", {
553
+ }), /* @__PURE__ */ D("p", {
573
554
  className: "text-xs text-text-secondary mt-0.5",
574
555
  children: [
575
556
  "Select which products this ",
576
- S,
557
+ A,
577
558
  " works with. Users will see it in those products' node stores."
578
559
  ]
579
560
  })] }),
580
- /* @__PURE__ */ w("div", {
561
+ /* @__PURE__ */ E("div", {
581
562
  className: "flex flex-wrap gap-3",
582
- children: F.map((e) => {
583
- let n = I.includes(e.value);
584
- return /* @__PURE__ */ T("label", {
563
+ children: S.map((e) => {
564
+ let n = I.includes(e.slug);
565
+ return /* @__PURE__ */ D("label", {
585
566
  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", H.compatibleProducts && !n && "border-status-error-bg/50"),
586
567
  children: [
587
- /* @__PURE__ */ w("input", {
568
+ /* @__PURE__ */ E("input", {
588
569
  type: "checkbox",
589
570
  className: "sr-only",
590
571
  checked: n,
591
572
  onChange: () => {
592
- ie((t) => {
593
- let r = n ? t.filter((t) => t !== e.value) : [...t, e.value];
573
+ ae((t) => {
574
+ let r = n ? t.filter((t) => t !== e.slug) : [...t, e.slug];
594
575
  return r.length > 0 && U((e) => ({
595
576
  ...e,
596
577
  compatibleProducts: void 0
@@ -598,25 +579,25 @@ var A = [
598
579
  });
599
580
  }
600
581
  }),
601
- n && /* @__PURE__ */ w(m, {
582
+ n && /* @__PURE__ */ E(m, {
602
583
  size: 14,
603
584
  className: "text-primary flex-shrink-0"
604
585
  }),
605
- e.label
586
+ e.name
606
587
  ]
607
- }, e.value);
588
+ }, e.id);
608
589
  })
609
590
  }),
610
- H.compatibleProducts && /* @__PURE__ */ w("p", {
591
+ H.compatibleProducts && /* @__PURE__ */ E("p", {
611
592
  className: "text-xs text-status-error-text",
612
593
  children: H.compatibleProducts
613
594
  })
614
595
  ]
615
596
  }),
616
- /* @__PURE__ */ w(u, {
597
+ /* @__PURE__ */ E(u, {
617
598
  label: "Full Description",
618
599
  value: B.description,
619
- onChange: (e) => X("description", e),
600
+ onChange: (e) => Y("description", e),
620
601
  placeholder: "Detailed description, features, and use cases...",
621
602
  rows: 5,
622
603
  hint: "Markdown supported"
@@ -624,89 +605,89 @@ var A = [
624
605
  ]
625
606
  })
626
607
  }),
627
- q.length > 2 && /* @__PURE__ */ w(o, {
608
+ q.length > 2 && /* @__PURE__ */ E(o, {
628
609
  title: "Organization",
629
610
  description: "Which developer organization owns this?",
630
- children: /* @__PURE__ */ w(c, {
611
+ children: /* @__PURE__ */ E(c, {
631
612
  label: "Developer Organization",
632
613
  value: B.developerOrganizationId,
633
- onChange: (e) => X("developerOrganizationId", e.target.value),
614
+ onChange: (e) => Y("developerOrganizationId", e.target.value),
634
615
  options: q
635
616
  })
636
617
  }),
637
- S === "app" && /* @__PURE__ */ T(o, {
618
+ A === "app" && /* @__PURE__ */ D(o, {
638
619
  title: "Permissions",
639
620
  description: "Choose what data your app can access. Users will see these permissions when authorizing your app — like GitHub Apps.",
640
- children: [/* @__PURE__ */ w(P, {
621
+ children: [/* @__PURE__ */ E(ie, {
641
622
  permissions: L,
642
- onChange: se
643
- }), /* @__PURE__ */ T("div", {
623
+ onChange: le
624
+ }), /* @__PURE__ */ D("div", {
644
625
  className: "mt-3 flex gap-2 rounded-lg border border-border-subtle bg-bg-sunken/30 p-3 text-xs text-text-secondary",
645
- children: [/* @__PURE__ */ w(v, {
626
+ children: [/* @__PURE__ */ E(v, {
646
627
  size: 14,
647
628
  className: "flex-shrink-0 mt-0.5"
648
- }), /* @__PURE__ */ T("span", { children: [/* @__PURE__ */ w("strong", { children: "Read & Write" }), " implies Read. Select only what your app genuinely needs — fewer permissions build more user trust."] })]
629
+ }), /* @__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."] })]
649
630
  })]
650
631
  }),
651
- S === "app" && /* @__PURE__ */ w(o, {
632
+ A === "app" && /* @__PURE__ */ E(o, {
652
633
  title: "Integration Setup",
653
634
  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.",
654
- children: /* @__PURE__ */ T("div", {
635
+ children: /* @__PURE__ */ D("div", {
655
636
  className: "space-y-4",
656
- children: [/* @__PURE__ */ w(s, {
637
+ children: [/* @__PURE__ */ E(s, {
657
638
  label: "Post-install Callback URL",
658
639
  type: "url",
659
640
  value: B.oauthAuthUrl,
660
- onChange: (e) => X("oauthAuthUrl", e.target.value),
641
+ onChange: (e) => Y("oauthAuthUrl", e.target.value),
661
642
  placeholder: "https://yourapp.com/callback",
662
643
  hint: "Users land here after install with ?installation_id=xxx appended"
663
- }), /* @__PURE__ */ w(s, {
644
+ }), /* @__PURE__ */ E(s, {
664
645
  label: "Revoke URL",
665
646
  type: "url",
666
647
  value: B.oauthRevokeUrl,
667
- onChange: (e) => X("oauthRevokeUrl", e.target.value),
648
+ onChange: (e) => Y("oauthRevokeUrl", e.target.value),
668
649
  placeholder: "https://yourapp.com/oauth/revoke",
669
650
  hint: "We POST to this URL when a user uninstalls your integration"
670
651
  })]
671
652
  })
672
653
  }),
673
- S !== "app" && /* @__PURE__ */ T("div", {
654
+ A !== "app" && /* @__PURE__ */ D("div", {
674
655
  className: "rounded-lg border border-border-subtle bg-bg-sunken/30 p-4 flex gap-3 text-sm text-text-secondary",
675
- children: [/* @__PURE__ */ w(v, {
656
+ children: [/* @__PURE__ */ E(v, {
676
657
  size: 16,
677
658
  className: "flex-shrink-0 mt-0.5"
678
- }), /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("p", {
659
+ }), /* @__PURE__ */ D("div", { children: [/* @__PURE__ */ E("p", {
679
660
  className: "font-medium text-text-primary",
680
661
  children: "File uploads"
681
- }), /* @__PURE__ */ w("p", {
662
+ }), /* @__PURE__ */ E("p", {
682
663
  className: "mt-1",
683
- children: S === "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.`
664
+ children: A === "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.`
684
665
  })] })]
685
666
  }),
686
- H._submit && /* @__PURE__ */ T("div", {
667
+ H._submit && /* @__PURE__ */ D("div", {
687
668
  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",
688
- children: [/* @__PURE__ */ w(v, {
669
+ children: [/* @__PURE__ */ E(v, {
689
670
  size: 16,
690
671
  className: "flex-shrink-0 mt-0.5"
691
- }), /* @__PURE__ */ w("span", { children: H._submit })]
672
+ }), /* @__PURE__ */ E("span", { children: H._submit })]
692
673
  }),
693
- /* @__PURE__ */ T("div", {
674
+ /* @__PURE__ */ D("div", {
694
675
  className: "flex items-center justify-end gap-3 border-t pt-6",
695
- children: [/* @__PURE__ */ T("button", {
676
+ children: [/* @__PURE__ */ D("button", {
696
677
  type: "button",
697
678
  onClick: () => J("/apps"),
698
679
  disabled: G,
699
680
  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",
700
- children: [/* @__PURE__ */ w(ne, { size: 16 }), y("devportal.cancel", "Cancel")]
701
- }), /* @__PURE__ */ w("button", {
681
+ children: [/* @__PURE__ */ E(w, { size: 16 }), y("devportal.cancel", "Cancel")]
682
+ }), /* @__PURE__ */ E("button", {
702
683
  type: "submit",
703
684
  disabled: G,
704
685
  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",
705
- children: G ? /* @__PURE__ */ T(C, { children: [/* @__PURE__ */ w(x, {
686
+ children: G ? /* @__PURE__ */ D(T, { children: [/* @__PURE__ */ E(x, {
706
687
  size: 16,
707
688
  className: "animate-spin"
708
- }), "Creating…"] }) : /* @__PURE__ */ T(C, { children: [
709
- /* @__PURE__ */ w(te, { size: 16 }),
689
+ }), "Creating…"] }) : /* @__PURE__ */ D(T, { children: [
690
+ /* @__PURE__ */ E(C, { size: 16 }),
710
691
  "Create ",
711
692
  $
712
693
  ] })
@@ -718,6 +699,6 @@ var A = [
718
699
  });
719
700
  };
720
701
  //#endregion
721
- export { I as CreateApplicationPage };
702
+ export { F as CreateApplicationPage };
722
703
 
723
704
  //# sourceMappingURL=CreateApplicationPage.js.map