@burdenoff/microfe-devportal 2026.720.4 → 2026.720.6

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 (36) hide show
  1. package/dist/devportal/hooks/usePackageUpload.d.ts.map +1 -1
  2. package/dist/devportal/hooks/usePackageUpload.js.map +1 -1
  3. package/dist/devportal/pages/ApplicationDetailPage.d.ts.map +1 -1
  4. package/dist/devportal/pages/ApplicationDetailPage.js +3 -3
  5. package/dist/devportal/pages/ApplicationDetailPage.js.map +1 -1
  6. package/dist/devportal/pages/CreateApiKeyPage.d.ts.map +1 -1
  7. package/dist/devportal/pages/CreateApiKeyPage.js +103 -104
  8. package/dist/devportal/pages/CreateApiKeyPage.js.map +1 -1
  9. package/dist/devportal/pages/CreateApplicationPage.d.ts.map +1 -1
  10. package/dist/devportal/pages/CreateApplicationPage.js +115 -116
  11. package/dist/devportal/pages/CreateApplicationPage.js.map +1 -1
  12. package/dist/devportal/pages/CreateOAuthClientPage.d.ts.map +1 -1
  13. package/dist/devportal/pages/CreateOAuthClientPage.js +129 -130
  14. package/dist/devportal/pages/CreateOAuthClientPage.js.map +1 -1
  15. package/dist/devportal/pages/CreateWebhookPage.js +1 -1
  16. package/dist/devportal/pages/CreateWebhookPage.js.map +1 -1
  17. package/dist/devportal/pages/DelegationsPage.js +214 -214
  18. package/dist/devportal/pages/DelegationsPage.js.map +1 -1
  19. package/dist/devportal/pages/EditApplicationPage.d.ts.map +1 -1
  20. package/dist/devportal/pages/EditApplicationPage.js +1 -1
  21. package/dist/devportal/pages/EditApplicationPage.js.map +1 -1
  22. package/dist/devportal/pages/PublishPage.d.ts.map +1 -1
  23. package/dist/devportal/pages/PublishPage.js +106 -106
  24. package/dist/devportal/pages/PublishPage.js.map +1 -1
  25. package/dist/devportal/pages/SellerDashboardPage.d.ts.map +1 -1
  26. package/dist/devportal/pages/SellerDashboardPage.js +136 -137
  27. package/dist/devportal/pages/SellerDashboardPage.js.map +1 -1
  28. package/dist/devportal/pages/SellerItemsPage.d.ts.map +1 -1
  29. package/dist/devportal/pages/SellerItemsPage.js +190 -191
  30. package/dist/devportal/pages/SellerItemsPage.js.map +1 -1
  31. package/dist/devportal/pages/SellerOrdersPage.d.ts.map +1 -1
  32. package/dist/devportal/pages/SellerOrdersPage.js +138 -139
  33. package/dist/devportal/pages/SellerOrdersPage.js.map +1 -1
  34. package/dist/devportal/types/index.d.ts.map +1 -1
  35. package/dist/devportal/types/index.js.map +1 -1
  36. package/package.json +1 -1
@@ -6,10 +6,9 @@ import { PageLayout as a, PageSection as o } from "../components/PageLayout.js";
6
6
  import { InputField as s, SelectField as c, TextareaField as l } from "../components/FormField.js";
7
7
  import { PermissionGuard as u } from "../components/PermissionGuard.js";
8
8
  import "../components/index.js";
9
- import { DEVPORTAL_PERMISSIONS as d } from "../constants/permissions.js";
10
- import { useRef as f, useState as p } from "react";
11
- import { useI18n as ee } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
12
- import { ArrowLeft as m, Box as h, Check as g, ChevronRight as _, GitFork as v, Info as y, Loader2 as b, Puzzle as x, Save as te, X as ne } from "lucide-react";
9
+ import { useRef as ee, useState as d } from "react";
10
+ import { useI18n as te } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
11
+ import { ArrowLeft as f, Box as p, Check as m, ChevronRight as h, GitFork as g, Info as _, Loader2 as v, Puzzle as y, Save as b, X as x } from "lucide-react";
13
12
  import { Fragment as S, jsx as C, jsxs as w } from "react/jsx-runtime";
14
13
  //#region src/devportal/pages/CreateApplicationPage.tsx
15
14
  var T = [
@@ -145,7 +144,7 @@ var O = [
145
144
  children: [
146
145
  a && /* @__PURE__ */ C("span", {
147
146
  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",
148
- children: /* @__PURE__ */ C(g, { size: 12 })
147
+ children: /* @__PURE__ */ C(m, { size: 12 })
149
148
  }),
150
149
  /* @__PURE__ */ C("div", {
151
150
  className: "flex h-10 w-10 items-center justify-center rounded-lg bg-bg-sunken",
@@ -165,7 +164,7 @@ var O = [
165
164
  className: "mt-1 space-y-1",
166
165
  children: i.map((e) => /* @__PURE__ */ w("li", {
167
166
  className: "flex items-center gap-2 text-xs text-text-secondary",
168
- children: [/* @__PURE__ */ C(_, {
167
+ children: [/* @__PURE__ */ C(h, {
169
168
  size: 12,
170
169
  className: "flex-shrink-0 text-primary"
171
170
  }), e]
@@ -223,7 +222,7 @@ var O = [
223
222
  })]
224
223
  })
225
224
  });
226
- }, N = [
225
+ }, ne = [
227
226
  {
228
227
  value: "fluidgrids",
229
228
  label: "FluidGrids"
@@ -240,18 +239,18 @@ var O = [
240
239
  value: "botlit",
241
240
  label: "Botlit"
242
241
  }
243
- ], P = () => {
244
- let { navigate: _, basePath: T, activeOrgId: P } = e(), { t: re } = ee(), ie = (e, t) => {
242
+ ], N = () => {
243
+ let { navigate: h, basePath: T, activeOrgId: N } = e(), { t: re } = te(), ie = (e, t) => {
245
244
  let n = re(e);
246
245
  return n === e ? t : n;
247
- }, ae = n(), [F, I] = p(null), [L, R] = p([]), [z, B] = p(E()), V = f(!1), [H, U] = p({
246
+ }, ae = n(), [P, F] = d(null), [I, L] = d([]), [R, z] = d(E()), B = ee(!1), [V, H] = d({
248
247
  name: "",
249
248
  slug: "",
250
249
  shortDescription: "",
251
250
  description: "",
252
251
  category: "",
253
252
  visibility: "PUBLIC",
254
- developerOrganizationId: P ?? "",
253
+ developerOrganizationId: N ?? "",
255
254
  websiteUrl: "",
256
255
  githubUrl: "",
257
256
  documentationUrl: "",
@@ -259,95 +258,95 @@ var O = [
259
258
  oauthAuthUrl: "",
260
259
  oauthTokenUrl: "",
261
260
  oauthRevokeUrl: ""
262
- }), [W, G] = p({}), [K, { loading: q }] = r(), { data: oe } = i({ fetchPolicy: "cache-and-network" }), J = [{
261
+ }), [U, W] = d({}), [G, { loading: K }] = r(), { data: q } = i({ fetchPolicy: "cache-and-network" }), J = [{
263
262
  value: "",
264
263
  label: "No organization (personal)"
265
- }, ...(oe?.myDeveloperOrganizations ?? []).map((e) => ({
264
+ }, ...(q?.myDeveloperOrganizations ?? []).map((e) => ({
266
265
  value: e.id,
267
266
  label: e.name
268
- }))], Y = (e) => _?.(`${T}${e}`), se = (e) => e.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, ""), ce = (e) => {
267
+ }))], Y = (e) => h?.(`${T}${e}`), oe = (e) => e.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, ""), se = (e) => {
269
268
  let t = e.target.value;
270
- U((e) => ({
269
+ H((e) => ({
271
270
  ...e,
272
271
  name: t,
273
- slug: V.current ? e.slug : se(t)
274
- })), W.name && G((e) => ({
272
+ slug: B.current ? e.slug : oe(t)
273
+ })), U.name && W((e) => ({
275
274
  ...e,
276
275
  name: void 0
277
276
  }));
278
- }, le = (e) => {
279
- V.current = !0;
277
+ }, ce = (e) => {
278
+ B.current = !0;
280
279
  let t = e.target.value.toLowerCase().replace(/[^a-z0-9-]/g, "");
281
- U((e) => ({
280
+ H((e) => ({
282
281
  ...e,
283
282
  slug: t
284
- })), W.slug && G((e) => ({
283
+ })), U.slug && W((e) => ({
285
284
  ...e,
286
285
  slug: void 0
287
286
  }));
288
287
  }, X = (e, t) => {
289
- U((n) => ({
288
+ H((n) => ({
290
289
  ...n,
291
290
  [e]: t
292
- })), (W[e] || W._submit) && G((t) => ({
291
+ })), (U[e] || U._submit) && W((t) => ({
293
292
  ...t,
294
293
  [e]: void 0,
295
294
  _submit: void 0
296
295
  }));
297
296
  }, Z = (e, t) => {
298
- B((n) => ({
297
+ z((n) => ({
299
298
  ...n,
300
299
  [e]: t
301
300
  }));
302
- }, ue = () => {
301
+ }, le = () => {
303
302
  let e = {};
304
- return H.name.trim() ? H.name.length < 3 ? e.name = "Name must be at least 3 characters" : H.name.length > 100 && (e.name = "Name must be less than 100 characters") : e.name = "Name is required", H.slug.trim() ? /^[a-z0-9-]+$/.test(H.slug) || (e.slug = "Slug can only contain lowercase letters, numbers, and hyphens") : e.slug = "Slug is required", H.shortDescription.trim() ? H.shortDescription.length > 200 && (e.shortDescription = "Short description must be less than 200 characters") : e.shortDescription = "Short description is required", H.category || (e.category = "Category is required"), F !== "app" && L.length === 0 && (e.compatibleProducts = "Select at least one compatible product so users can find this in the right store"), G(e), Object.keys(e).length === 0;
305
- }, Q = () => F === "node" ? "NODE" : F === "workflow" ? "WORKFLOW" : "API_INTEGRATION", de = async (e) => {
306
- if (e.preventDefault(), !ue() || !F) return;
307
- let t = F === "app" ? { permissions: D(z) } : null;
303
+ 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"), P !== "app" && I.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;
304
+ }, Q = () => P === "node" ? "NODE" : P === "workflow" ? "WORKFLOW" : "API_INTEGRATION", ue = async (e) => {
305
+ if (e.preventDefault(), !le() || !P) return;
306
+ let t = P === "app" ? { permissions: D(R) } : null;
308
307
  try {
309
- let e = await K({ variables: { input: {
310
- name: H.name,
311
- slug: H.slug || void 0,
312
- shortDescription: H.shortDescription || void 0,
313
- description: H.description || void 0,
314
- category: H.category || void 0,
308
+ let e = await G({ variables: { input: {
309
+ name: V.name,
310
+ slug: V.slug || void 0,
311
+ shortDescription: V.shortDescription || void 0,
312
+ description: V.description || void 0,
313
+ category: V.category || void 0,
315
314
  appType: Q(),
316
- visibility: H.visibility,
317
- developerOrganizationId: H.developerOrganizationId || void 0,
318
- websiteUrl: H.websiteUrl || void 0,
319
- githubUrl: H.githubUrl || void 0,
320
- documentationUrl: H.documentationUrl || void 0,
321
- supportUrl: H.supportUrl || void 0,
315
+ visibility: V.visibility,
316
+ developerOrganizationId: V.developerOrganizationId || void 0,
317
+ websiteUrl: V.websiteUrl || void 0,
318
+ githubUrl: V.githubUrl || void 0,
319
+ documentationUrl: V.documentationUrl || void 0,
320
+ supportUrl: V.supportUrl || void 0,
322
321
  manifest: t ?? void 0,
323
- compatibleProducts: L.length > 0 ? L : void 0,
324
- ...F === "app" && {
325
- oauthAuthUrl: H.oauthAuthUrl || void 0,
326
- oauthTokenUrl: H.oauthTokenUrl || void 0,
327
- oauthRevokeUrl: H.oauthRevokeUrl || void 0
322
+ compatibleProducts: I.length > 0 ? I : void 0,
323
+ ...P === "app" && {
324
+ oauthAuthUrl: V.oauthAuthUrl || void 0,
325
+ oauthTokenUrl: V.oauthTokenUrl || void 0,
326
+ oauthRevokeUrl: V.oauthRevokeUrl || void 0
328
327
  }
329
328
  } } });
330
329
  e.data?.createApplication?.id && (ae.emit("devportal.app.created", {
331
330
  appId: e.data.createApplication.id,
332
- name: H.name,
331
+ name: V.name,
333
332
  appType: Q(),
334
- organizationId: H.developerOrganizationId || null
333
+ organizationId: V.developerOrganizationId || null
335
334
  }), Y(`/apps/${e.data.createApplication.id}`));
336
335
  } catch (e) {
337
336
  let t = [];
338
337
  e && typeof e == "object" && "graphQLErrors" in e && Array.isArray(e.graphQLErrors) && e.graphQLErrors.forEach((e) => t.push(e.message)), e instanceof Error && t.push(e.message);
339
338
  let n = t.join(" ").toLowerCase();
340
- n.includes("slug") || n.includes("already exist") || n.includes("unique") || n.includes("conflict") || n.includes("duplicate") ? G((e) => ({
339
+ n.includes("slug") || n.includes("already exist") || n.includes("unique") || n.includes("conflict") || n.includes("duplicate") ? W((e) => ({
341
340
  ...e,
342
341
  slug: "This slug is already taken — choose a different one"
343
- })) : G((e) => ({
342
+ })) : W((e) => ({
344
343
  ...e,
345
344
  _submit: t[0] ?? "Something went wrong. Please try again."
346
345
  }));
347
346
  }
348
347
  };
349
- if (!F) return /* @__PURE__ */ C(u, {
350
- permission: d.APP_CREATE,
348
+ if (!P) return /* @__PURE__ */ C(u, {
349
+ authOnly: !0,
351
350
  children: /* @__PURE__ */ C(a, {
352
351
  title: "What do you want to build?",
353
352
  description: "Choose a builder type to get started",
@@ -360,7 +359,7 @@ var O = [
360
359
  className: "grid gap-4 sm:grid-cols-3",
361
360
  children: [
362
361
  /* @__PURE__ */ C(j, {
363
- icon: h,
362
+ icon: p,
364
363
  title: "App",
365
364
  description: "Build integrations that connect your service to the platform using OAuth tokens.",
366
365
  bullets: [
@@ -369,11 +368,11 @@ var O = [
369
368
  "Webhook events",
370
369
  "Publish to app store"
371
370
  ],
372
- selected: F === "app",
373
- onClick: () => I("app")
371
+ selected: P === "app",
372
+ onClick: () => F("app")
374
373
  }),
375
374
  /* @__PURE__ */ C(j, {
376
- icon: x,
375
+ icon: y,
377
376
  title: "Node",
378
377
  description: "Build custom FluidGrids nodes that users can drag into their visual workflows.",
379
378
  bullets: [
@@ -382,11 +381,11 @@ var O = [
382
381
  "Versioned releases",
383
382
  "Publish to node store"
384
383
  ],
385
- selected: F === "node",
386
- onClick: () => I("node")
384
+ selected: P === "node",
385
+ onClick: () => F("node")
387
386
  }),
388
387
  /* @__PURE__ */ C(j, {
389
- icon: v,
388
+ icon: g,
390
389
  title: "Workflow",
391
390
  description: "Build reusable automation workflows that users can import and customize.",
392
391
  bullets: [
@@ -395,13 +394,13 @@ var O = [
395
394
  "Versioned releases",
396
395
  "Publish to workflow store"
397
396
  ],
398
- selected: F === "workflow",
399
- onClick: () => I("workflow")
397
+ selected: P === "workflow",
398
+ onClick: () => F("workflow")
400
399
  })
401
400
  ]
402
401
  }), /* @__PURE__ */ w("div", {
403
402
  className: "rounded-lg border border-border-subtle bg-bg-sunken/30 p-4 flex gap-3 text-sm text-text-secondary",
404
- children: [/* @__PURE__ */ C(y, {
403
+ children: [/* @__PURE__ */ C(_, {
405
404
  size: 16,
406
405
  className: "flex-shrink-0 mt-0.5"
407
406
  }), /* @__PURE__ */ C("p", { children: "Apps use OAuth to interact with platform data. Nodes and Workflows are packaged files you upload after creation." })]
@@ -409,29 +408,29 @@ var O = [
409
408
  })
410
409
  })
411
410
  });
412
- let $ = F === "app" ? "App" : F === "node" ? "Node" : "Workflow", fe = C(F === "app" ? h : F === "node" ? x : v, { size: 16 });
411
+ let $ = P === "app" ? "App" : P === "node" ? "Node" : "Workflow", de = C(P === "app" ? p : P === "node" ? y : g, { size: 16 });
413
412
  return /* @__PURE__ */ C(u, {
414
- permission: d.APP_CREATE,
413
+ authOnly: !0,
415
414
  children: /* @__PURE__ */ C(a, {
416
415
  title: `Create ${$}`,
417
- description: F === "app" ? "Register a new app integration with OAuth permissions" : F === "node" ? "Register a new FluidGrids node package" : "Register a new reusable automation workflow",
418
- purpose: F === "workflow" ? "Give your workflow a name and description. Once created you can upload your workflow definition in the Versions tab, then publish it to the store or generate a shareable public link." : F === "node" ? "Give your node a name and description. Once created you can upload your ZIP bundle and manifest in the Versions tab, then publish it to the node store when it is ready for users." : "Give your integration a name, description, and the permissions it will request. Once created you will get credentials and can configure webhooks, then publish it to the marketplace when it is ready for users.",
416
+ description: P === "app" ? "Register a new app integration with OAuth permissions" : P === "node" ? "Register a new FluidGrids node package" : "Register a new reusable automation workflow",
417
+ purpose: P === "workflow" ? "Give your workflow a name and description. Once created you can upload your workflow definition in the Versions tab, then publish it to the store or generate a shareable public link." : P === "node" ? "Give your node a name and description. Once created you can upload your ZIP bundle and manifest in the Versions tab, then publish it to the node store when it is ready for users." : "Give your integration a name, description, and the permissions it will request. Once created you will get credentials and can configure webhooks, then publish it to the marketplace when it is ready for users.",
419
418
  backLink: `${T}/apps`,
420
419
  backLabel: "Back to Applications",
421
420
  children: /* @__PURE__ */ w("form", {
422
- onSubmit: de,
421
+ onSubmit: ue,
423
422
  className: "space-y-8 max-w-3xl",
424
423
  children: [
425
424
  /* @__PURE__ */ w("div", {
426
425
  className: "flex items-center gap-3",
427
426
  children: [/* @__PURE__ */ w("button", {
428
427
  type: "button",
429
- onClick: () => I(null),
428
+ onClick: () => F(null),
430
429
  className: "flex items-center gap-1.5 text-sm text-text-secondary hover:text-text-primary transition-colors",
431
- children: [/* @__PURE__ */ C(m, { size: 14 }), "Change type"]
430
+ children: [/* @__PURE__ */ C(f, { size: 14 }), "Change type"]
432
431
  }), /* @__PURE__ */ w("span", {
433
432
  className: "flex items-center gap-1.5 rounded-full border border-border-subtle bg-bg-sunken px-3 py-1 text-xs font-medium",
434
- children: [fe, $]
433
+ children: [de, $]
435
434
  })]
436
435
  }),
437
436
  /* @__PURE__ */ C(o, {
@@ -442,52 +441,52 @@ var O = [
442
441
  children: [
443
442
  /* @__PURE__ */ C(s, {
444
443
  label: "Name",
445
- value: H.name,
446
- onChange: ce,
447
- placeholder: F === "app" ? "My Integration" : F === "node" ? "HTTP Request" : "Onboarding Flow",
444
+ value: V.name,
445
+ onChange: se,
446
+ placeholder: P === "app" ? "My Integration" : P === "node" ? "HTTP Request" : "Onboarding Flow",
448
447
  required: !0,
449
- error: W.name
448
+ error: U.name
450
449
  }),
451
450
  /* @__PURE__ */ C(s, {
452
451
  label: "Slug",
453
- value: H.slug,
454
- onChange: le,
452
+ value: V.slug,
453
+ onChange: ce,
455
454
  placeholder: "my-integration",
456
455
  required: !0,
457
- error: W.slug,
458
- hint: V.current ? "Only lowercase letters, numbers, and hyphens" : "Auto-generated from name — edit to customise"
456
+ error: U.slug,
457
+ hint: B.current ? "Only lowercase letters, numbers, and hyphens" : "Auto-generated from name — edit to customise"
459
458
  }),
460
459
  /* @__PURE__ */ C(l, {
461
460
  label: "Short Description",
462
- value: H.shortDescription,
461
+ value: V.shortDescription,
463
462
  onChange: (e) => X("shortDescription", e.target.value),
464
463
  placeholder: "Briefly describe what this does",
465
464
  required: !0,
466
- error: W.shortDescription,
467
- hint: `${H.shortDescription.length}/200 characters`,
465
+ error: U.shortDescription,
466
+ hint: `${V.shortDescription.length}/200 characters`,
468
467
  rows: 2
469
468
  }),
470
469
  /* @__PURE__ */ w("div", {
471
470
  className: "grid gap-4 sm:grid-cols-2",
472
471
  children: [/* @__PURE__ */ C(c, {
473
472
  label: "Category",
474
- value: H.category,
473
+ value: V.category,
475
474
  onChange: (e) => X("category", e.target.value),
476
475
  options: A,
477
476
  placeholder: "Select a category…",
478
477
  required: !0,
479
- error: W.category,
478
+ error: U.category,
480
479
  hint: "Helps users discover your item in the store"
481
480
  }), /* @__PURE__ */ C(c, {
482
481
  label: "Visibility",
483
- value: H.visibility,
482
+ value: V.visibility,
484
483
  onChange: (e) => X("visibility", e.target.value),
485
- options: F === "workflow" ? k : O,
484
+ options: P === "workflow" ? k : O,
486
485
  required: !0,
487
- hint: H.visibility === "PUBLIC" ? "Listed in the marketplace after review approval — anyone can discover and install it" : H.visibility === "UNLISTED" ? "Not in the store, but share with anyone via a direct link. You can still submit for marketplace review later" : H.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"
486
+ 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"
488
487
  })]
489
488
  }),
490
- F !== "app" && /* @__PURE__ */ w("div", {
489
+ P !== "app" && /* @__PURE__ */ w("div", {
491
490
  className: "space-y-2",
492
491
  children: [
493
492
  /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ w("label", {
@@ -500,32 +499,32 @@ var O = [
500
499
  className: "text-xs text-text-secondary mt-0.5",
501
500
  children: [
502
501
  "Select which products this ",
503
- F,
502
+ P,
504
503
  " works with. Users will see it in those products' node stores."
505
504
  ]
506
505
  })] }),
507
506
  /* @__PURE__ */ C("div", {
508
507
  className: "flex flex-wrap gap-3",
509
- children: N.map((e) => {
510
- let n = L.includes(e.value);
508
+ children: ne.map((e) => {
509
+ let n = I.includes(e.value);
511
510
  return /* @__PURE__ */ w("label", {
512
- 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", W.compatibleProducts && !n && "border-status-error-bg/50"),
511
+ 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", U.compatibleProducts && !n && "border-status-error-bg/50"),
513
512
  children: [
514
513
  /* @__PURE__ */ C("input", {
515
514
  type: "checkbox",
516
515
  className: "sr-only",
517
516
  checked: n,
518
517
  onChange: () => {
519
- R((t) => {
518
+ L((t) => {
520
519
  let r = n ? t.filter((t) => t !== e.value) : [...t, e.value];
521
- return r.length > 0 && G((e) => ({
520
+ return r.length > 0 && W((e) => ({
522
521
  ...e,
523
522
  compatibleProducts: void 0
524
523
  })), r;
525
524
  });
526
525
  }
527
526
  }),
528
- n && /* @__PURE__ */ C(g, {
527
+ n && /* @__PURE__ */ C(m, {
529
528
  size: 14,
530
529
  className: "text-primary flex-shrink-0"
531
530
  }),
@@ -534,15 +533,15 @@ var O = [
534
533
  }, e.value);
535
534
  })
536
535
  }),
537
- W.compatibleProducts && /* @__PURE__ */ C("p", {
536
+ U.compatibleProducts && /* @__PURE__ */ C("p", {
538
537
  className: "text-xs text-status-error-text",
539
- children: W.compatibleProducts
538
+ children: U.compatibleProducts
540
539
  })
541
540
  ]
542
541
  }),
543
542
  /* @__PURE__ */ C(l, {
544
543
  label: "Full Description",
545
- value: H.description,
544
+ value: V.description,
546
545
  onChange: (e) => X("description", e.target.value),
547
546
  placeholder: "Detailed description, features, and use cases...",
548
547
  rows: 5,
@@ -556,26 +555,26 @@ var O = [
556
555
  description: "Which developer organization owns this?",
557
556
  children: /* @__PURE__ */ C(c, {
558
557
  label: "Developer Organization",
559
- value: H.developerOrganizationId,
558
+ value: V.developerOrganizationId,
560
559
  onChange: (e) => X("developerOrganizationId", e.target.value),
561
560
  options: J
562
561
  })
563
562
  }),
564
- F === "app" && /* @__PURE__ */ w(o, {
563
+ P === "app" && /* @__PURE__ */ w(o, {
565
564
  title: "Permissions",
566
565
  description: "Choose what data your app can access. Users will see these permissions when authorizing your app — like GitHub Apps.",
567
566
  children: [/* @__PURE__ */ C(M, {
568
- permissions: z,
567
+ permissions: R,
569
568
  onChange: Z
570
569
  }), /* @__PURE__ */ w("div", {
571
570
  className: "mt-3 flex gap-2 rounded-lg border border-border-subtle bg-bg-sunken/30 p-3 text-xs text-text-secondary",
572
- children: [/* @__PURE__ */ C(y, {
571
+ children: [/* @__PURE__ */ C(_, {
573
572
  size: 14,
574
573
  className: "flex-shrink-0 mt-0.5"
575
574
  }), /* @__PURE__ */ w("span", { children: [/* @__PURE__ */ C("strong", { children: "Read & Write" }), " implies Read. Select only what your app genuinely needs — fewer permissions build more user trust."] })]
576
575
  })]
577
576
  }),
578
- F === "app" && /* @__PURE__ */ C(o, {
577
+ P === "app" && /* @__PURE__ */ C(o, {
579
578
  title: "Integration Setup",
580
579
  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.",
581
580
  children: /* @__PURE__ */ w("div", {
@@ -583,23 +582,23 @@ var O = [
583
582
  children: [/* @__PURE__ */ C(s, {
584
583
  label: "Post-install Callback URL",
585
584
  type: "url",
586
- value: H.oauthAuthUrl,
585
+ value: V.oauthAuthUrl,
587
586
  onChange: (e) => X("oauthAuthUrl", e.target.value),
588
587
  placeholder: "https://yourapp.com/callback",
589
588
  hint: "Users land here after install with ?installation_id=xxx appended"
590
589
  }), /* @__PURE__ */ C(s, {
591
590
  label: "Revoke URL",
592
591
  type: "url",
593
- value: H.oauthRevokeUrl,
592
+ value: V.oauthRevokeUrl,
594
593
  onChange: (e) => X("oauthRevokeUrl", e.target.value),
595
594
  placeholder: "https://yourapp.com/oauth/revoke",
596
595
  hint: "We POST to this URL when a user uninstalls your integration"
597
596
  })]
598
597
  })
599
598
  }),
600
- F !== "app" && /* @__PURE__ */ w("div", {
599
+ P !== "app" && /* @__PURE__ */ w("div", {
601
600
  className: "rounded-lg border border-border-subtle bg-bg-sunken/30 p-4 flex gap-3 text-sm text-text-secondary",
602
- children: [/* @__PURE__ */ C(y, {
601
+ children: [/* @__PURE__ */ C(_, {
603
602
  size: 16,
604
603
  className: "flex-shrink-0 mt-0.5"
605
604
  }), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
@@ -607,33 +606,33 @@ var O = [
607
606
  children: "File uploads"
608
607
  }), /* @__PURE__ */ C("p", {
609
608
  className: "mt-1",
610
- children: F === "node" ? "After creating your Node, go to the Versions tab to upload your ZIP bundle and manifest.json." : "After creating your Workflow, go to the Versions tab to upload your manifest and workflow JSON definition."
609
+ children: P === "node" ? "After creating your Node, go to the Versions tab to upload your ZIP bundle and manifest.json." : "After creating your Workflow, go to the Versions tab to upload your manifest and workflow JSON definition."
611
610
  })] })]
612
611
  }),
613
- W._submit && /* @__PURE__ */ w("div", {
612
+ U._submit && /* @__PURE__ */ w("div", {
614
613
  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",
615
- children: [/* @__PURE__ */ C(y, {
614
+ children: [/* @__PURE__ */ C(_, {
616
615
  size: 16,
617
616
  className: "flex-shrink-0 mt-0.5"
618
- }), /* @__PURE__ */ C("span", { children: W._submit })]
617
+ }), /* @__PURE__ */ C("span", { children: U._submit })]
619
618
  }),
620
619
  /* @__PURE__ */ w("div", {
621
620
  className: "flex items-center justify-end gap-3 border-t pt-6",
622
621
  children: [/* @__PURE__ */ w("button", {
623
622
  type: "button",
624
623
  onClick: () => Y("/apps"),
625
- disabled: q,
624
+ disabled: K,
626
625
  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",
627
- children: [/* @__PURE__ */ C(ne, { size: 16 }), ie("devportal.cancel", "Cancel")]
626
+ children: [/* @__PURE__ */ C(x, { size: 16 }), ie("devportal.cancel", "Cancel")]
628
627
  }), /* @__PURE__ */ C("button", {
629
628
  type: "submit",
630
- disabled: q,
629
+ disabled: K,
631
630
  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",
632
- children: q ? /* @__PURE__ */ w(S, { children: [/* @__PURE__ */ C(b, {
631
+ children: K ? /* @__PURE__ */ w(S, { children: [/* @__PURE__ */ C(v, {
633
632
  size: 16,
634
633
  className: "animate-spin"
635
634
  }), "Creating…"] }) : /* @__PURE__ */ w(S, { children: [
636
- /* @__PURE__ */ C(te, { size: 16 }),
635
+ /* @__PURE__ */ C(b, { size: 16 }),
637
636
  "Create ",
638
637
  $
639
638
  ] })
@@ -645,6 +644,6 @@ var O = [
645
644
  });
646
645
  };
647
646
  //#endregion
648
- export { P as CreateApplicationPage };
647
+ export { N as CreateApplicationPage };
649
648
 
650
649
  //# sourceMappingURL=CreateApplicationPage.js.map