wizards 0.2.2 → 0.2.4

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 (78) hide show
  1. package/apps/runtime/dist/app.js +44 -0
  2. package/apps/runtime/dist/auth/account.js +16 -2
  3. package/apps/runtime/dist/auth/index.js +14 -1
  4. package/apps/runtime/dist/connectors/external.js +5 -0
  5. package/apps/runtime/dist/db/client.js +24 -3
  6. package/apps/runtime/dist/db/control-schema.js +12 -3
  7. package/apps/runtime/dist/db/migrations/control/0005_chilly_oracle.sql +1 -0
  8. package/apps/runtime/dist/db/migrations/control/0006_sleepy_mojo.sql +1 -0
  9. package/apps/runtime/dist/db/migrations/control/meta/0005_snapshot.json +358 -0
  10. package/apps/runtime/dist/db/migrations/control/meta/0006_snapshot.json +365 -0
  11. package/apps/runtime/dist/db/migrations/control/meta/_journal.json +14 -0
  12. package/apps/runtime/dist/db/migrations/tenant/0005_reflective_forgotten_one.sql +2 -0
  13. package/apps/runtime/dist/db/migrations/tenant/meta/0005_snapshot.json +1659 -0
  14. package/apps/runtime/dist/db/migrations/tenant/meta/_journal.json +7 -0
  15. package/apps/runtime/dist/db/schema.js +6 -0
  16. package/apps/runtime/dist/engine/asks.js +2 -0
  17. package/apps/runtime/dist/engine/push.js +58 -0
  18. package/apps/runtime/dist/engine/runner.js +6 -0
  19. package/apps/runtime/dist/env.js +13 -0
  20. package/apps/runtime/dist/index.js +6 -0
  21. package/apps/runtime/dist/limits.js +21 -0
  22. package/apps/runtime/dist/manage.js +16 -3
  23. package/apps/runtime/dist/mcp/tools.js +4 -2
  24. package/apps/runtime/dist/routes/api.js +96 -6
  25. package/apps/runtime/dist/routes/runs.js +68 -2
  26. package/apps/runtime/dist/routes/studio.js +79 -11
  27. package/apps/runtime/dist/services/access.js +62 -0
  28. package/apps/runtime/dist/services/architect.js +3 -2
  29. package/apps/runtime/dist/services/cloud.js +298 -39
  30. package/apps/runtime/dist/services/errors.js +1 -0
  31. package/apps/runtime/dist/services/files.js +53 -4
  32. package/apps/runtime/dist/services/project-files.js +6 -0
  33. package/apps/runtime/dist/services/projects.js +38 -14
  34. package/apps/runtime/dist/services/spaces.js +400 -0
  35. package/apps/runtime/dist/services/wizards.js +19 -8
  36. package/apps/runtime/dist/tenants/control.js +47 -0
  37. package/apps/runtime/dist/update.js +3 -3
  38. package/apps/web/dist/assets/{ChangelogDialog-4HCt88rf.js → ChangelogDialog-lGa0JKY1.js} +1 -1
  39. package/apps/web/dist/assets/ChatPanel-Dk_45uca.js +1 -0
  40. package/apps/web/dist/assets/{CreditsDialog-D3fZRqXH.js → CreditsDialog-BPMWo6tp.js} +1 -1
  41. package/apps/web/dist/assets/EditorPage-Dt4MCcrU.js +2 -0
  42. package/apps/web/dist/assets/{FlowPreview-CjUK5046.js → FlowPreview-gwtUv8-X.js} +1 -1
  43. package/apps/web/dist/assets/HomePage-Bi9FK3_1.js +1 -0
  44. package/apps/web/dist/assets/ImportWizard-D6y4bKlF.js +1 -0
  45. package/apps/web/dist/assets/{LocalRuntime-DupxjXff.js → LocalRuntime-BjzPSsHr.js} +10 -10
  46. package/apps/web/dist/assets/NewWizardPage-2HbCaPSt.js +2 -0
  47. package/apps/web/dist/assets/PublicRunner-Dac_e6wg.js +1 -0
  48. package/apps/web/dist/assets/RunnerView-BC6crf1p.js +2 -0
  49. package/apps/web/dist/assets/SettingsPage-BfXxa4SU.js +2 -0
  50. package/apps/web/dist/assets/{SetupPage-xiqJMR0J.js → SetupPage-CYKVspBJ.js} +1 -1
  51. package/apps/web/dist/assets/{SharePage-C8B9BUSU.js → SharePage-DFIHsNS-.js} +1 -1
  52. package/apps/web/dist/assets/{api-KMi35npD.js → api-BTfKh3La.js} +1 -1
  53. package/apps/web/dist/assets/changelog-CLmll9By.js +1 -0
  54. package/apps/web/dist/assets/index-CIwJmOjo.css +1 -0
  55. package/apps/web/dist/assets/{index-2Ktgo6f1.js → index-DOpyzQiU.js} +3 -3
  56. package/apps/web/dist/assets/{meta-4R1Lnr25.js → meta-BbVhbYf6.js} +1 -1
  57. package/apps/web/dist/assets/oss-credits-Hu4LieLA.js +1 -0
  58. package/apps/web/dist/assets/outputs-n_yhxmMk.js +69 -0
  59. package/apps/web/dist/assets/{session-B6-6VomQ.js → session-D_Zggq_t.js} +1 -1
  60. package/apps/web/dist/assets/type-BMJpS6_D.js +1 -0
  61. package/apps/web/dist/assets/ui-C3bTWmdM.js +1 -0
  62. package/apps/web/dist/index.html +5 -5
  63. package/apps/web/dist/mcp/flow.html +54 -54
  64. package/package.json +1 -1
  65. package/apps/web/dist/assets/ChatPanel-B91fTrzg.js +0 -1
  66. package/apps/web/dist/assets/EditorPage-ZZjb9mGV.js +0 -2
  67. package/apps/web/dist/assets/HomePage-Cn5TCZk7.js +0 -1
  68. package/apps/web/dist/assets/ImportWizard-DiV62Uno.js +0 -1
  69. package/apps/web/dist/assets/NewWizardPage-Bz3PIQGp.js +0 -2
  70. package/apps/web/dist/assets/PublicRunner-Axs1zwqe.js +0 -1
  71. package/apps/web/dist/assets/RunnerView-Bhv6RNME.js +0 -2
  72. package/apps/web/dist/assets/SettingsPage-in_RmI8i.js +0 -2
  73. package/apps/web/dist/assets/changelog-C2LDEzLQ.js +0 -1
  74. package/apps/web/dist/assets/index-B9YVjvVY.css +0 -1
  75. package/apps/web/dist/assets/oss-credits-roB62QJu.js +0 -1
  76. package/apps/web/dist/assets/outputs-Dhqtf-SA.js +0 -69
  77. package/apps/web/dist/assets/type-Bj9H3eOK.js +0 -1
  78. package/apps/web/dist/assets/ui-Cs6lpsmj.js +0 -1
@@ -8,6 +8,7 @@ import { env } from "../env.js";
8
8
  import { pluginToolsOf } from "../plugins/registry.js";
9
9
  import { dropLinks, putLink } from "../tenants/control.js";
10
10
  import { currentTenant } from "../tenants/tenant.js";
11
+ import { requireBuild, requireWritable, requireWritableProject } from "./access.js";
11
12
  import { changedSteps, emitDraftChanged } from "./draft-events.js";
12
13
  import { notFound, ServiceError } from "./errors.js";
13
14
  import { copyFiles, draftFiles, sameFiles, seedFiles } from "./files.js";
@@ -41,6 +42,12 @@ export async function ownedWizard(_userId, wizardId) {
41
42
  }
42
43
  return w;
43
44
  }
45
+ /** The wizard, for a change: refused where its project is a local install's or nothing is built here. */
46
+ export async function writableWizard(userId, wizardId) {
47
+ const w = await ownedWizard(userId, wizardId);
48
+ await requireWritableProject(w.projectId);
49
+ return w;
50
+ }
44
51
  export function wizardSummary(w) {
45
52
  return {
46
53
  id: w.id,
@@ -193,9 +200,12 @@ export function shapeIssues(error, raw) {
193
200
  });
194
201
  }
195
202
  export async function createWizard(userId, input, writer = { source: "studio" }) {
203
+ // Asked first: a tenant that builds nothing here has no project of its own to name.
204
+ await requireBuild();
196
205
  const project = input.projectId
197
206
  ? await ownedProject(userId, input.projectId)
198
207
  : await defaultProject(userId);
208
+ await requireWritable(project);
199
209
  const starter = input.starterId
200
210
  ? await marketplaceWizard(input.starterId, asLang(input.lang))
201
211
  : undefined;
@@ -243,7 +253,7 @@ export async function createWizard(userId, input, writer = { source: "studio" })
243
253
  * architect, MCP — goes through here, so the revision counts all of them.
244
254
  */
245
255
  export async function writeDraft(userId, wizardId, input, writer = { source: "studio" }) {
246
- const w = await ownedWizard(userId, wizardId);
256
+ const w = await writableWizard(userId, wizardId);
247
257
  const files = await draftFiles(w.id);
248
258
  const paths = files.map((f) => f.path);
249
259
  const { draft } = parseDraft(input.definition, paths);
@@ -279,7 +289,7 @@ export async function writeDraft(userId, wizardId, input, writer = { source: "st
279
289
  return { revision: row.revision, issues, draft };
280
290
  }
281
291
  export async function editWizard(userId, wizardId, input, writer) {
282
- const w = await ownedWizard(userId, wizardId);
292
+ const w = await writableWizard(userId, wizardId);
283
293
  if (w.revision !== input.baseRevision) {
284
294
  throw new ServiceError("revision_conflict", "Der Wizard wurde inzwischen geändert.", {
285
295
  revision: w.revision,
@@ -298,9 +308,9 @@ export async function editWizard(userId, wizardId, input, writer) {
298
308
  return writeDraft(userId, wizardId, { definition, baseRevision: input.baseRevision, note: input.note }, writer);
299
309
  }
300
310
  export async function updateWizardSettings(userId, wizardId, patch) {
301
- const w = await ownedWizard(userId, wizardId);
311
+ const w = await writableWizard(userId, wizardId);
302
312
  if (patch.projectId) {
303
- await ownedProject(userId, patch.projectId);
313
+ await requireWritable(await ownedProject(userId, patch.projectId));
304
314
  }
305
315
  await db
306
316
  .update(schema.wizard)
@@ -309,7 +319,7 @@ export async function updateWizardSettings(userId, wizardId, patch) {
309
319
  return wizardSummary(await ownedWizard(userId, wizardId));
310
320
  }
311
321
  export async function rotateShareLink(userId, wizardId) {
312
- const w = await ownedWizard(userId, wizardId);
322
+ const w = await writableWizard(userId, wizardId);
313
323
  const token = newShareToken();
314
324
  await db
315
325
  .update(schema.wizard)
@@ -320,7 +330,7 @@ export async function rotateShareLink(userId, wizardId) {
320
330
  return { shareToken: token, shareUrl: shareUrl(token) };
321
331
  }
322
332
  export async function duplicateWizard(userId, wizardId) {
323
- const w = await ownedWizard(userId, wizardId);
333
+ const w = await writableWizard(userId, wizardId);
324
334
  const id = nanoid(12);
325
335
  const draft = { ...w.draft, title: `${w.draft.title} (Kopie)` };
326
336
  const shareToken = newShareToken();
@@ -338,7 +348,8 @@ export async function duplicateWizard(userId, wizardId) {
338
348
  await copyFiles(w.id, id);
339
349
  return { id };
340
350
  }
341
- export async function deleteWizard(_userId, wizardId) {
351
+ export async function deleteWizard(userId, wizardId) {
352
+ await writableWizard(userId, wizardId);
342
353
  await forgetWizardLinks(wizardId);
343
354
  await db
344
355
  .delete(schema.wizard)
@@ -354,7 +365,7 @@ export async function requireClean(w) {
354
365
  return { definition: w.draft, files };
355
366
  }
356
367
  export async function publishWizard(userId, wizardId) {
357
- const w = await ownedWizard(userId, wizardId);
368
+ const w = await writableWizard(userId, wizardId);
358
369
  const { definition, files } = await requireClean(w);
359
370
  const version = (w.publishedVersion ?? 0) + 1;
360
371
  await db
@@ -12,10 +12,57 @@ export async function putLink(token, kind, ref) {
12
12
  set: { tenantId: currentTenant(), kind, ref },
13
13
  });
14
14
  }
15
+ /** A token's link goes, and with a wizard's share token its ID. */
15
16
  export async function dropLinks(tokens) {
16
17
  if (tokens.length) {
17
18
  await controlDb.delete(control.link).where(inArray(control.link.token, tokens));
19
+ await controlDb
20
+ .delete(control.link)
21
+ .where(and(eq(control.link.kind, "code"), inArray(control.link.ref, tokens)));
22
+ }
23
+ }
24
+ // --- wizard IDs ----------------------------------------------------------------------
25
+ // The share token is 14 characters of both cases, `_` and `-`: nobody types that on a phone.
26
+ // The ID is 8 capitals and digits without look-alikes (no 0 O 1 I), made the first time someone
27
+ // asks for it and gone when the share token rotates.
28
+ const CODE_ALPHABET = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ";
29
+ const CODE_LENGTH = 8;
30
+ function newCode() {
31
+ const bytes = crypto.getRandomValues(new Uint8Array(CODE_LENGTH));
32
+ return Array.from(bytes, (b) => CODE_ALPHABET[b % CODE_ALPHABET.length]).join("");
33
+ }
34
+ /** What a person typed, as stored: capitals, no spaces or dashes. */
35
+ export const normalizeCode = (input) => input.toUpperCase().replace(/[\s-]/g, "");
36
+ /** The ID of a wizard's share token; made on the first ask. */
37
+ export async function codeOf(shareToken) {
38
+ const row = await controlDb.query.link.findFirst({
39
+ where: and(eq(control.link.kind, "code"), eq(control.link.ref, shareToken)),
40
+ });
41
+ if (row) {
42
+ return row.token;
18
43
  }
44
+ for (;;) {
45
+ const code = newCode();
46
+ const made = await controlDb
47
+ .insert(control.link)
48
+ .values({ token: code, tenantId: currentTenant(), kind: "code", ref: shareToken })
49
+ .onConflictDoNothing()
50
+ .returning({ token: control.link.token });
51
+ if (made.length) {
52
+ return code;
53
+ }
54
+ }
55
+ }
56
+ /** The share token behind an ID, and its tenant. */
57
+ export async function tokenOfCode(input) {
58
+ const code = normalizeCode(input);
59
+ if (code.length !== CODE_LENGTH) {
60
+ return null;
61
+ }
62
+ const row = await controlDb.query.link.findFirst({
63
+ where: and(eq(control.link.kind, "code"), eq(control.link.token, code)),
64
+ });
65
+ return row ? { token: row.ref, tenantId: row.tenantId } : null;
19
66
  }
20
67
  export async function tenantOfLink(token, kind) {
21
68
  const row = await controlDb.query.link.findFirst({
@@ -4,8 +4,8 @@ import { join } from "node:path";
4
4
  import { installedByScript, isCheckout, layout, packageRoot, packageVersion } from "./cli/home.js";
5
5
  const RELEASES_URL = process.env.ENGENTY_WIZARDS_RELEASES_URL?.trim() ||
6
6
  "https://api.github.com/repos/engenty/engenty-wizards/releases/latest";
7
- const FOUND_FOR_MS = 6 * 60 * 60_000;
8
- const MISSED_FOR_MS = 60 * 60_000;
7
+ /** How long an answer from GitHub holds, found or not, before the runtime asks again. */
8
+ const CHECK_EVERY_MS = 60 * 60_000;
9
9
  /**
10
10
  * The exit code with which the runtime asks the command that started it for a restart: after an
11
11
  * update, that command starts the new version (cli/start.ts).
@@ -47,7 +47,7 @@ async function newestRelease() {
47
47
  return { latest: null, url: null };
48
48
  }
49
49
  const age = cached ? Date.now() - cached.at : Number.POSITIVE_INFINITY;
50
- if (cached && age < (cached.latest ? FOUND_FOR_MS : MISSED_FOR_MS)) {
50
+ if (cached && age < CHECK_EVERY_MS) {
51
51
  return cached;
52
52
  }
53
53
  let found = { latest: null, url: null };
@@ -1 +1 @@
1
- import{a as e,n as t,t as n}from"./jsx-runtime-D3jfb0Ew.js";import{t as r}from"./preload-helper-CNEI7N0N.js";import{a as i,d as a,h as o,i as s,s as c,y as l}from"./ui-Cs6lpsmj.js";var u=e(t(),1),d=e(n(),1);function f(e){switch(e.group){case`Added`:return{label:`NEW`,dot:`bg-moss`};case`Fixed`:return{label:`FIXED`,dot:`bg-amber`};case`Changed`:return{label:`CHANGED`,dot:`bg-cobalt`};case`Performance`:return{label:`PERFORMANCE`,dot:`bg-ember`};case`Deploy`:return{label:`DEPLOY`,dot:`bg-ink-4`};case`Docs`:return{label:`DOCS`,dot:`bg-ink-4`};default:return{label:`OTHER`,dot:`bg-ink-4`}}}var p=e=>e.version?e.version.replace(/^v/,``):l(`about.unreleased`),m=e=>e.timestamp?new Date(e.timestamp*1e3).toISOString().slice(0,10):``,h=e=>e.charAt(0).toUpperCase()+e.slice(1);function g(e,t){let n=t.trim().toLowerCase();if(!n)return e;let r=[];for(let t of e){if(`${p(t)} ${m(t)}`.toLowerCase().includes(n)){r.push(t);continue}let e=t.commits.filter(e=>`${f(e).label} ${e.scope??``} ${e.message}`.toLowerCase().includes(n));e.length>0&&r.push({...t,commits:e})}return r}function _({open:e,onClose:t}){let[n,_]=(0,u.useState)(null),[v,y]=(0,u.useState)(``);(0,u.useEffect)(()=>{if(!e||n)return;let t=!1;return r(()=>import(`./changelog-C2LDEzLQ.js`).then(e=>{t||_(e.default)}),[]),()=>{t=!0}},[e,n]),(0,u.useEffect)(()=>{e||y(``)},[e]);let b=n?g(n,v):[];return(0,d.jsxs)(s,{open:e,onClose:t,title:l(`about.changelog`),wide:!0,children:[(0,d.jsx)(`p`,{className:`-mt-3 mb-4 text-[14px] text-ink-3`,children:l(`about.changelogHint`)}),n===null?(0,d.jsx)(`div`,{className:`flex justify-center py-10 text-ink-3`,children:(0,d.jsx)(a,{})}):n.length===0?(0,d.jsx)(i,{children:l(`about.changelogEmpty`)}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(c,{type:`search`,value:v,placeholder:l(`about.search`),onChange:e=>y(e.target.value)}),b.length===0?(0,d.jsx)(i,{children:l(`about.noMatches`)}):null,b.map(e=>(0,d.jsxs)(`section`,{className:`mt-6`,children:[(0,d.jsxs)(`h3`,{className:`flex items-baseline gap-3 border-border-soft border-b pb-2 font-display font-semibold text-[16px]`,children:[p(e),(0,d.jsx)(`span`,{className:`font-normal font-sans text-[13px] text-ink-3 tabular-nums`,children:m(e)})]}),(0,d.jsx)(`ul`,{className:`mt-3 flex flex-col gap-2`,children:e.commits.map(e=>{let t=f(e);return(0,d.jsxs)(`li`,{className:`flex items-start gap-2.5 text-[14px]`,children:[(0,d.jsx)(`span`,{className:o(`mt-[7px] size-1.5 shrink-0 rounded-full`,t.dot)}),(0,d.jsxs)(`span`,{className:`min-w-0 text-ink-2`,children:[(0,d.jsxs)(`span`,{className:`font-semibold text-[12px] text-ink tracking-wide`,children:[t.label,e.scope?` [${e.scope}]`:``]}),` `,h(e.message),e.breaking?(0,d.jsx)(`span`,{className:`ml-1.5 rounded-full bg-rose-tint px-1.5 py-0.5 font-medium text-[12px] text-rose`,children:l(`about.breaking`)}):null]})]},e.id)})})]},e.version??`unreleased`))]})]})}export{_ as ChangelogDialog};
1
+ import{a as e,n as t,t as n}from"./jsx-runtime-D3jfb0Ew.js";import{t as r}from"./preload-helper-CNEI7N0N.js";import{a as i,d as a,h as o,i as s,s as c,y as l}from"./ui-C3bTWmdM.js";var u=e(t(),1),d=e(n(),1);function f(e){switch(e.group){case`Added`:return{label:`NEW`,dot:`bg-moss`};case`Fixed`:return{label:`FIXED`,dot:`bg-amber`};case`Changed`:return{label:`CHANGED`,dot:`bg-cobalt`};case`Performance`:return{label:`PERFORMANCE`,dot:`bg-ember`};case`Deploy`:return{label:`DEPLOY`,dot:`bg-ink-4`};case`Docs`:return{label:`DOCS`,dot:`bg-ink-4`};default:return{label:`OTHER`,dot:`bg-ink-4`}}}var p=e=>e.version?e.version.replace(/^v/,``):l(`about.unreleased`),m=e=>e.timestamp?new Date(e.timestamp*1e3).toISOString().slice(0,10):``,h=e=>e.charAt(0).toUpperCase()+e.slice(1);function g(e,t){let n=t.trim().toLowerCase();if(!n)return e;let r=[];for(let t of e){if(`${p(t)} ${m(t)}`.toLowerCase().includes(n)){r.push(t);continue}let e=t.commits.filter(e=>`${f(e).label} ${e.scope??``} ${e.message}`.toLowerCase().includes(n));e.length>0&&r.push({...t,commits:e})}return r}function _({open:e,onClose:t}){let[n,_]=(0,u.useState)(null),[v,y]=(0,u.useState)(``);(0,u.useEffect)(()=>{if(!e||n)return;let t=!1;return r(()=>import(`./changelog-CLmll9By.js`).then(e=>{t||_(e.default)}),[]),()=>{t=!0}},[e,n]),(0,u.useEffect)(()=>{e||y(``)},[e]);let b=n?g(n,v):[];return(0,d.jsxs)(s,{open:e,onClose:t,title:l(`about.changelog`),wide:!0,children:[(0,d.jsx)(`p`,{className:`-mt-3 mb-4 text-[14px] text-ink-3`,children:l(`about.changelogHint`)}),n===null?(0,d.jsx)(`div`,{className:`flex justify-center py-10 text-ink-3`,children:(0,d.jsx)(a,{})}):n.length===0?(0,d.jsx)(i,{children:l(`about.changelogEmpty`)}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(c,{type:`search`,value:v,placeholder:l(`about.search`),onChange:e=>y(e.target.value)}),b.length===0?(0,d.jsx)(i,{children:l(`about.noMatches`)}):null,b.map(e=>(0,d.jsxs)(`section`,{className:`mt-6`,children:[(0,d.jsxs)(`h3`,{className:`flex items-baseline gap-3 border-border-soft border-b pb-2 font-display font-semibold text-[16px]`,children:[p(e),(0,d.jsx)(`span`,{className:`font-normal font-sans text-[13px] text-ink-3 tabular-nums`,children:m(e)})]}),(0,d.jsx)(`ul`,{className:`mt-3 flex flex-col gap-2`,children:e.commits.map(e=>{let t=f(e);return(0,d.jsxs)(`li`,{className:`flex items-start gap-2.5 text-[14px]`,children:[(0,d.jsx)(`span`,{className:o(`mt-[7px] size-1.5 shrink-0 rounded-full`,t.dot)}),(0,d.jsxs)(`span`,{className:`min-w-0 text-ink-2`,children:[(0,d.jsxs)(`span`,{className:`font-semibold text-[12px] text-ink tracking-wide`,children:[t.label,e.scope?` [${e.scope}]`:``]}),` `,h(e.message),e.breaking?(0,d.jsx)(`span`,{className:`ml-1.5 rounded-full bg-rose-tint px-1.5 py-0.5 font-medium text-[12px] text-rose`,children:l(`about.breaking`)}):null]})]},e.id)})})]},e.version??`unreleased`))]})]})}export{_ as ChangelogDialog};
@@ -0,0 +1 @@
1
+ import{a as e,n as t,t as n}from"./jsx-runtime-D3jfb0Ew.js";import{c as r,d as i,i as a,n as o,nt as s}from"./api-BTfKh3La.js";import{t as c}from"./createLucideIcon-q3MZMmnf.js";import{t as l}from"./plug-CLjyCoHB.js";import{C as u,D as d,b as f,r as p,x as m}from"./outputs-n_yhxmMk.js";import{r as h}from"./wand-sparkles-CKxArWPY.js";import{t as g}from"./plus-Du-Jx8aI.js";import{t as _}from"./mic-Bvz4mA2j.js";import{_ as v,d as y,h as b,o as x,y as S}from"./ui-C3bTWmdM.js";import{l as C}from"./index-DOpyzQiU.js";var w={name:`chevron-up`,size:24,node:[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]};w.node;var T=c(w),E={name:`lock`,size:24,node:[[`rect`,{width:`18`,height:`11`,x:`3`,y:`11`,rx:`2`,ry:`2`,key:`1w4ew1`}],[`path`,{d:`M7 11V7a5 5 0 0 1 10 0v4`,key:`fwvmzm`}]]};E.node;var D=c(E),O=e(t(),1),k=!1;function A(){if(!(typeof window>`u`||k))return window.SpeechRecognition??window.webkitSpeechRecognition}var j=typeof navigator<`u`&&!!navigator.mediaDevices?.getUserMedia&&typeof MediaRecorder<`u`;function M(e,t){let n=e.trimEnd(),r=t.trim();return n&&r?`${n} ${r}`:n||r}function N(e,t){let[n,r]=(0,O.useState)(!1),[i,a]=(0,O.useState)(!1),[s,c]=(0,O.useState)(null),l=(0,O.useRef)(e);l.current=e;let u=(0,O.useRef)(t);u.current=t;let d=(0,O.useRef)(null);(0,O.useEffect)(()=>()=>d.current?.stop(),[]);let f=async()=>{let e=l.current,t;try{t=await navigator.mediaDevices.getUserMedia({audio:!0})}catch{c(`denied`);return}let n=[],i=new MediaRecorder(t);i.ondataavailable=e=>e.data.size&&n.push(e.data),i.onstop=async()=>{for(let e of t.getTracks())e.stop();d.current=null,r(!1);let s=(i.mimeType||`audio/webm`).split(`;`)[0],l=new File(n,`dictation`,{type:s});if(l.size){a(!0);try{let{text:t}=await o.upload(`/api/studio/transcribe`,l);t.trim()&&u.current(M(e,t))}catch(e){c(e.message)}finally{a(!1)}}},d.current={stop:()=>i.state!==`inactive`&&i.stop()},i.start(),r(!0)},p=e=>{let t=l.current,n=``,i=new e;i.continuous=!0,i.interimResults=!0,i.lang=v===`de`?`de-DE`:`en-US`,i.onresult=e=>{let r=``;for(let t=Math.max(0,e.resultIndex);t<e.results.length;t++){let i=e.results[t],a=i[0]?.transcript??``;i.isFinal?n=M(n,a):r+=a}u.current(M(t,M(n,r)))},i.onerror=e=>{if(e.error!==`aborted`&&e.error!==`no-speech`){if(e.error===`not-allowed`){c(`denied`);return}k=!0,j&&!n?(i.onend=null,d.current=null,f()):c(e.error)}},i.onend=()=>{d.current=null,r(!1)},d.current={stop:()=>i.stop()},i.start(),r(!0)};return{supported:!!A()||j,listening:n,processing:i,error:s,toggle:()=>{if(i)return;if(d.current){d.current.stop();return}c(null);let e=A();e?p(e):f()}}}var P=e(n(),1),F=/\.(png|jpe?g|gif|webp|avif|svg)$/i;function I(e){let t=e.filter(e=>e.type.startsWith(`image/`));return t.length?Object.fromEntries(t.map(e=>[e.name,URL.createObjectURL(e)])):void 0}function L(e){let t=e.match(/(?:^|\n\n)(?:Angehängt|Attached): ([^\n]+)$/);return t?{text:e.slice(0,t.index).trim(),names:t[1].split(`, `).filter(Boolean)}:{text:e,names:[]}}function R(e,t){if(e.name&&e.name!==`image.png`)return e;let n=e.type.split(`/`)[1]?.replace(`jpeg`,`jpg`)||`png`,r=new Date().toISOString().slice(0,19).replace(/[-:]/g,``).replace(`T`,`-`);return new File([e],`paste-${r}${t?`-${t+1}`:``}.${n}`,{type:e.type})}function z({url:e,label:t,children:n}){return(0,P.jsxs)(`div`,{className:`group relative`,title:t,children:[(0,P.jsx)(`img`,{src:e,alt:t,width:64,height:64,className:`size-16 rounded-lg bg-paper-2 object-cover ring-1 ring-border`}),n]})}function B({names:e,previews:t,fileUrl:n}){let r=e.filter(e=>t?.[e]||n&&F.test(e)),i=e.filter(e=>!r.includes(e));return(0,P.jsxs)(`div`,{className:`flex flex-col items-end gap-1.5`,children:[r.map(e=>{let r=t?.[e]??n?.(e)??``;return(0,P.jsx)(`a`,{href:r,target:`_blank`,rel:`noreferrer`,title:e,children:(0,P.jsx)(`img`,{src:r,alt:e,className:`max-h-60 w-auto max-w-full rounded-xl bg-paper-2 object-contain ring-1 ring-border`})},e)}),i.length?(0,P.jsx)(`div`,{className:`flex flex-wrap justify-end gap-1.5`,children:i.map(e=>(0,P.jsxs)(`span`,{className:`inline-flex max-w-full items-center gap-1.5 rounded-full bg-paper-2 px-2.5 py-1 text-[12px] text-ink-2`,children:[(0,P.jsx)(u,{className:`size-3 shrink-0 text-ink-4`}),(0,P.jsx)(`span`,{className:`truncate`,children:e})]},e))}):null]})}function V(e,t){let n=s(),[i,o]=(0,O.useState)([]),[c,l]=(0,O.useState)(`idle`),[u,d]=(0,O.useState)(null),[f,p]=(0,O.useState)(null),[m,h]=(0,O.useState)(null),[g,_]=(0,O.useState)(null),v=(0,O.useRef)(null);return(0,O.useEffect)(()=>{if(e){if(v.current!==e.id){v.current=e.id,o(e.messages);return}c===`idle`&&o(t=>e.messages.length>=t.length?e.messages:t)}},[e,c]),{messages:i,phase:c,activity:f,thought:m,startedAt:g,error:u,send:async(i,s=[])=>{if(!e||!(i.trim()||s.length)||c!==`idle`)return!1;if(d(null),_(Date.now()),h(null),s.length){l(`thinking`);try{for(let t of s){let n=await fetch(r(`/api/studio/wizards/${e.id}/files/${encodeURIComponent(t.name)}`),{method:`PUT`,credentials:`include`,headers:{"content-type":t.type||`application/octet-stream`},body:t});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??n.statusText)}}}catch(t){return d(t.message),l(`idle`),_(null),await n.invalidateQueries({queryKey:[`wizard`,e.id]}),!1}let t=`${S(`editor.attached`)}: ${s.map(e=>e.name).join(`, `)}`;i=i.trim()?`${i}\n\n${t}`:t}let u=`p-${Date.now()}`;o(e=>[...e,{id:`u-${Date.now()}`,role:`user`,content:i,previews:I(s)},{id:u,role:`assistant`,content:``,pending:!0}]),l(`thinking`),p(null);let f=!1;try{await a(`/api/studio/wizards/${e.id}/chat`,{message:i},(e,n)=>{if(e===`text`){let e=JSON.parse(n);o(t=>t.map(t=>t.id===u?{...t,content:t.content+e}:t))}else if(e===`activity`)p(JSON.parse(n));else if(e===`thought`)h(JSON.parse(n));else if(e===`building`)l(`building`);else if(e===`done`){f=!0;let e=JSON.parse(n);o(t=>t.map(t=>t.id===u?{...t,content:e.reply,changed:e.changed,pending:!1}:t)),e.changed&&t(e.draft,e.revision)}else e===`error`&&(f=!0,d(JSON.parse(n).message))}),f||d(S(`editor.chatBroken`))}catch(e){d(e.message)}finally{p(null),h(null),_(null),o(e=>e.filter(e=>!(e.id===u&&!e.content)).map(e=>({...e,pending:!1}))),l(`idle`),await n.invalidateQueries({queryKey:[`wizard`,e.id]}),await n.invalidateQueries({queryKey:[`me`]})}return!0},fileUrl:t=>r(`/api/studio/wizards/${e?.id}/files/${encodeURIComponent(t)}`)}}function H(e){let[t,n]=(0,O.useState)(()=>Date.now());return(0,O.useEffect)(()=>{if(e===null)return;n(Date.now());let t=setInterval(()=>n(Date.now()),1e3);return()=>clearInterval(t)},[e]),e===null?null:Math.max(0,Math.floor((t-e)/1e3))}function U(e){return e<60?`${e} s`:`${Math.floor(e/60)}:${String(e%60).padStart(2,`0`)} min`}function W({chat:e,thought:t,className:n,spinner:r=`size-3.5`}){let i=H(e.startedAt);return(0,P.jsxs)(`div`,{className:b(`min-w-0`,n),children:[(0,P.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,P.jsx)(y,{className:b(`shrink-0`,r)}),(0,P.jsx)(`span`,{className:`min-w-0 truncate`,children:e.activity??(e.phase===`building`?S(`editor.building`):S(`editor.thinking`))}),i===null?null:(0,P.jsx)(`span`,{className:`shrink-0 text-ink-4 tabular-nums`,children:U(i)})]}),t&&e.thought?(0,P.jsx)(`p`,{className:`mt-0.5 truncate pl-5.5 text-[12px] text-ink-4`,children:e.thought}):null]})}function G({message:e,fileUrl:t}){let{text:n,names:r}=L(e.content);return(0,P.jsxs)(`div`,{className:`ml-8 flex flex-col items-end gap-1.5 self-end`,children:[r.length?(0,P.jsx)(B,{names:r,previews:e.previews,fileUrl:t}):null,n?(0,P.jsx)(`div`,{className:`rounded-xl rounded-br-md bg-paper-2 px-4 py-2.5 text-[14px] leading-relaxed`,children:(0,P.jsx)(`span`,{className:`whitespace-pre-wrap`,children:n})}):null]})}function K({chat:e,avatar:t,hello:n=S(`editor.chatHello`),placeholder:r=S(`editor.composer`),changedLabel:a=`Ablauf aktualisiert`,compact:o,intro:s,closed:c}){let[v,w]=(0,O.useState)(!1),[E,D]=(0,O.useState)(``),[k,A]=(0,O.useState)([]),j=(0,O.useRef)(null),M=(0,O.useRef)(null),F=(0,O.useRef)(null),I=N(E,D);(0,O.useEffect)(()=>{j.current?.scrollTo({top:j.current.scrollHeight,behavior:`smooth`})},[e.messages,e.phase]),(0,O.useEffect)(()=>{let e=M.current;e&&(e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,200)}px`)},[E]);let L=(E.trim()||k.length>0)&&e.phase===`idle`,B=e=>A(t=>[...t.filter(t=>!e.some(e=>e.name===t.name)),...e]),[V,H]=(0,O.useState)(new Map);(0,O.useEffect)(()=>{let e=new Map(k.filter(e=>e.type.startsWith(`image/`)).map(e=>[e,URL.createObjectURL(e)]));return H(e),()=>{for(let t of e.values())URL.revokeObjectURL(t)}},[k]);let U=async()=>{if(!L)return;I.listening&&I.toggle();let t={text:E,files:k};D(``),A([]),await e.send(t.text.trim(),t.files)||(D(t.text),A(t.files))},K=!o||v,q=e.messages.at(-1);return(0,P.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[o&&(q||e.error)?(0,P.jsxs)(`button`,{type:`button`,"aria-expanded":v,"aria-label":S(`editor.thread`),onClick:()=>w(e=>!e),className:`flex items-center gap-2 px-4 pt-2.5 pb-0.5 text-left text-[13px] text-ink-3 transition hover:text-ink`,children:[!(e.error||v)&&q?.pending?(0,P.jsx)(W,{chat:e,className:`flex-1`}):(0,P.jsx)(`span`,{className:b(`min-w-0 flex-1 truncate`,e.error&&`text-rose`),children:e.error??(v?S(`editor.thread`):q?.content)}),v?(0,P.jsx)(h,{className:`size-4 shrink-0`}):(0,P.jsx)(T,{className:`size-4 shrink-0`})]}):null,(0,P.jsxs)(`div`,{ref:j,className:b(`min-h-0 flex-1 overflow-y-auto px-5 py-5`,!K&&`hidden`),children:[e.messages.length===0&&!c?s??(0,P.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,P.jsx)(i,{kind:t,size:32,interactive:!1}),(0,P.jsx)(`p`,{className:`pt-1 text-[14px] text-ink-2 leading-relaxed`,children:n})]}):null,(0,P.jsx)(`div`,{className:`flex flex-col gap-4`,children:e.messages.map(n=>n.role===`user`?(0,P.jsx)(G,{message:n,fileUrl:e.fileUrl},n.id):(0,P.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,P.jsx)(`div`,{className:`shrink-0`,children:(0,P.jsx)(i,{kind:t,size:28,interactive:!1})}),(0,P.jsxs)(`div`,{className:`min-w-0 pt-0.5 text-[14px]`,children:[n.source===`mcp`?(0,P.jsxs)(`div`,{className:`mb-1 inline-flex items-center gap-1.5 text-[12px] text-ink-3`,children:[(0,P.jsx)(l,{className:`size-3`}),` `,S(`editor.viaClient`,{client:n.client??`MCP`})]}):null,n.content?(0,P.jsx)(p,{text:n.content,className:`text-[14px]`}):null,n.pending?(0,P.jsx)(W,{chat:e,thought:!0,className:`mt-1 text-[13px] text-ink-3`}):null,n.changed?(0,P.jsxs)(`div`,{className:`mt-2 inline-flex items-center gap-1.5 rounded-full bg-ember-tint px-2.5 py-0.5 text-[12px] text-ember-strong`,children:[(0,P.jsx)(m,{className:`size-3`}),` `,a]}):null]})]},n.id))}),e.error?(0,P.jsx)(`div`,{className:`mt-4 rounded-lg bg-rose-tint px-3 py-2 text-[13px] text-rose`,children:e.error}):null]}),c?(0,P.jsx)(`p`,{className:`m-3 rounded-xl bg-paper-2 px-4 py-3 text-[13px] text-ink-2 leading-relaxed`,children:c}):(0,P.jsxs)(`div`,{className:o?`p-2`:`p-3`,children:[(0,P.jsxs)(`div`,{className:`rounded-xl bg-card p-1.5 shadow-soft ring-1 ring-border focus-within:ring-focus`,children:[V.size?(0,P.jsx)(`div`,{className:`flex flex-wrap gap-2 px-1 pt-1 pb-1.5`,children:k.map((e,t)=>{let n=V.get(e);return n?(0,P.jsx)(z,{url:n,label:e.name,children:(0,P.jsx)(`button`,{type:`button`,"aria-label":S(`editor.detach`),onClick:()=>A(e=>e.filter((e,n)=>n!==t)),className:`-top-1.5 -right-1.5 absolute flex size-5 items-center justify-center rounded-full bg-ink text-paper opacity-0 shadow-soft transition focus-visible:opacity-100 group-hover:opacity-100`,children:(0,P.jsx)(C,{className:`size-3`})})},`${e.name}-${t}`):null})}):null,k.some(e=>!V.has(e))?(0,P.jsx)(`ul`,{className:`flex flex-wrap gap-1.5 px-1 pt-1 pb-1.5`,children:k.map((e,t)=>V.has(e)?null:(0,P.jsxs)(`li`,{className:`inline-flex max-w-full items-center gap-1.5 rounded-full bg-paper-2 py-1 pr-1 pl-2.5 text-[12px] text-ink-2`,children:[(0,P.jsx)(u,{className:`size-3 shrink-0 text-ink-4`}),(0,P.jsx)(`span`,{className:`truncate`,children:e.name}),(0,P.jsx)(`button`,{type:`button`,"aria-label":S(`editor.detach`),onClick:()=>A(e=>e.filter((e,n)=>n!==t)),className:`inline-flex size-5 shrink-0 items-center justify-center rounded-full text-ink-3 hover:bg-paper-3 hover:text-ink`,children:(0,P.jsx)(C,{className:`size-3`})})]},`${e.name}-${t}`))}):null,(0,P.jsxs)(`div`,{className:`flex items-end gap-1`,children:[(0,P.jsx)(x,{label:S(`editor.attach`),onClick:()=>F.current?.click(),children:(0,P.jsx)(g,{className:`size-4`})}),(0,P.jsx)(`input`,{ref:F,type:`file`,multiple:!0,hidden:!0,onChange:e=>{let t=Array.from(e.target.files??[]);e.target.value=``,B(t)}}),(0,P.jsx)(`textarea`,{ref:M,rows:1,value:E,onChange:e=>D(e.target.value),onPaste:e=>{let t=Array.from(e.clipboardData.files);t.length&&(e.preventDefault(),B(t.map(R)))},onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),U())},placeholder:I.listening?S(`editor.listening`):r,className:`max-h-[200px] min-h-[40px] flex-1 resize-none bg-transparent px-1.5 py-2 text-[14px] outline-none placeholder:text-ink-4`}),I.supported?(0,P.jsx)(x,{label:I.processing?S(`editor.transcribing`):I.listening?S(`editor.voiceStop`):S(`editor.voice`),"aria-pressed":I.listening,disabled:I.processing,onClick:I.toggle,className:b(I.listening&&`bg-rose-tint text-rose hover:bg-rose-tint hover:text-rose`),children:I.processing?(0,P.jsx)(y,{className:`size-4`}):I.listening?(0,P.jsx)(f,{className:`size-3.5 animate-pulse-dot fill-current`}):(0,P.jsx)(_,{className:`size-4`})}):null,(0,P.jsx)(`button`,{type:`button`,onClick:()=>void U(),disabled:!L,className:b(`inline-flex size-9 shrink-0 items-center justify-center rounded-full transition`,L?`bg-primary text-primary-foreground`:`bg-paper-2 text-ink-4`),"aria-label":`Send`,children:(0,P.jsx)(d,{className:`size-4`})})]})]}),I.error?(0,P.jsx)(`p`,{className:`mt-2 px-1 text-[12px] text-rose`,children:I.error===`denied`?S(`editor.micDenied`):I.error}):null]})]})}export{D as a,V as i,W as n,I as r,K as t};
@@ -1 +1 @@
1
- import{a as e,n as t,t as n}from"./jsx-runtime-D3jfb0Ew.js";import{t as r}from"./preload-helper-CNEI7N0N.js";import{t as i}from"./external-link-MAL7vJYj.js";import{_ as a,a as o,d as s,i as c,s as l,y as u}from"./ui-Cs6lpsmj.js";var d=e(t(),1),f=[{name:`engenty wizards`,description:{de:`KI-Wizards aus einer Beschreibung, mit einem Link geteilt.`,en:`AI wizards built from a description, shared with a link.`},homepage:`https://github.com/engenty/engenty-wizards`,license:`FSL-1.1-MIT`},{name:`engenty`,description:{de:`Konnektoren, Datentabellen, Suche und die Engenties stammen aus dem engenty-Framework.`,en:`Connectors, data tables, search and the engenties come from the engenty framework.`},homepage:`https://github.com/engenty/engenty`,license:`FSL-1.1-MIT`}],p=[{name:`Mastra`,description:{de:`Agent-Framework hinter den KI-Schritten.`,en:`Agent framework behind the AI steps.`},homepage:`https://github.com/mastra-ai/mastra`,license:`Apache-2.0`},{name:`AI SDK`,description:{de:`Modell-Aufrufe für Text, Bild, Video und Sprache.`,en:`Model calls for text, image, video and speech.`},homepage:`https://github.com/vercel/ai`,license:`Apache-2.0`},{name:`Model Context Protocol`,description:{de:`MCP-Server zum Bauen von Wizards, MCP-Client für Werkzeuge der Schritte.`,en:`MCP server for building wizards, MCP client for the steps' tools.`},homepage:`https://github.com/modelcontextprotocol/typescript-sdk`,license:`MIT`},{name:`Hono`,description:{de:`HTTP-API der Runtime.`,en:`The runtime's HTTP API.`},homepage:`https://github.com/honojs/hono`,license:`MIT`},{name:`Drizzle ORM`,description:{de:`Schema und Migrationen der Datenbanken.`,en:`Schema and migrations of the databases.`},homepage:`https://github.com/drizzle-team/drizzle-orm`,license:`Apache-2.0`},{name:`libSQL`,description:{de:`Eine Datenbank je Mandant, lokal als Datei oder bei Turso.`,en:`One database per tenant, a local file or at Turso.`},homepage:`https://github.com/tursodatabase/libsql`,license:`MIT`},{name:`Playwright`,description:{de:`Browser-Schritte sowie PDF- und PNG-Export.`,en:`Browser steps and the PDF and PNG export.`},homepage:`https://github.com/microsoft/playwright`,license:`Apache-2.0`},{name:`agentOS`,description:{de:`Sandbox für Code-Schritte ohne Docker.`,en:`Sandbox for code steps without Docker.`},homepage:`https://github.com/rivet-dev/agentos`,license:`Apache-2.0`},{name:`React`,description:{de:`UI-Bibliothek der Web-App.`,en:`UI library of the web app.`},homepage:`https://github.com/facebook/react`,license:`MIT`},{name:`Vite`,description:{de:`Build-Werkzeug der Web-App.`,en:`Build tool of the web app.`},homepage:`https://github.com/vitejs/vite`,license:`MIT`},{name:`Tailwind CSS`,description:{de:`Styling der Oberfläche.`,en:`Styling of the interface.`},homepage:`https://github.com/tailwindlabs/tailwindcss`,license:`MIT`},{name:`React Flow`,description:{de:`Das Diagramm der Schritte im Editor.`,en:`The diagram of steps in the editor.`},homepage:`https://github.com/xyflow/xyflow`,license:`MIT`},{name:`TanStack Query`,description:{de:`Server-Daten in der Web-App.`,en:`Server data in the web app.`},homepage:`https://github.com/TanStack/query`,license:`MIT`},{name:`xterm.js`,description:{de:`Das Terminal auf der Seite, in dem sich KI-Clients anmelden.`,en:`The terminal on the page where AI clients sign in.`},homepage:`https://github.com/xtermjs/xterm.js`,license:`MIT`},{name:`Lucide`,description:{de:`Icons.`,en:`Icons.`},homepage:`https://github.com/lucide-icons/lucide`,license:`ISC`},{name:`Geist & Geist Mono`,description:{de:`Schrift der Oberfläche.`,en:`Typeface of the interface.`},homepage:`https://github.com/vercel/geist-font`,license:`OFL-1.1`},{name:`Space Grotesk`,description:{de:`Schrift der Überschriften.`,en:`Typeface of the headings.`},homepage:`https://github.com/floriankarsten/space-grotesk`,license:`OFL-1.1`},{name:`git-cliff`,description:{de:`Erzeugt den Changelog aus den Commits.`,en:`Generates the changelog from the commits.`},homepage:`https://github.com/orhun/git-cliff`,license:`MIT OR Apache-2.0`}],m=e(n(),1),h=(e,...t)=>t.some(t=>t?.toLowerCase().includes(e));function g({name:e,homepage:t,version:n,license:r,description:a}){return(0,m.jsxs)(`li`,{className:`py-2.5`,children:[(0,m.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2.5 gap-y-0.5`,children:[t?(0,m.jsxs)(`a`,{href:t,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1 font-medium text-[14px] text-ink underline-offset-4 hover:underline`,children:[e,(0,m.jsx)(i,{"aria-hidden":!0,className:`size-3 text-ink-4`})]}):(0,m.jsx)(`span`,{className:`font-medium text-[14px] text-ink`,children:e}),n?(0,m.jsx)(`span`,{className:`text-[12px] text-ink-3 tabular-nums`,children:n}):null,(0,m.jsx)(`span`,{className:`text-[12px] text-ink-3`,children:r})]}),a?(0,m.jsx)(`p`,{className:`mt-0.5 text-[13px] text-ink-3`,children:a}):null]})}function _({title:e,hint:t,children:n}){return(0,m.jsxs)(`section`,{className:`mt-6`,children:[(0,m.jsx)(`h3`,{className:`border-border-soft border-b pb-2 font-display font-semibold text-[16px]`,children:e}),t?(0,m.jsx)(`p`,{className:`mt-2 text-[13px] text-ink-3`,children:t}):null,n]})}function v({credits:e}){return(0,m.jsx)(`ul`,{className:`divide-y divide-border-soft`,children:e.map(e=>(0,m.jsx)(g,{name:e.name,homepage:e.homepage,license:e.license,description:e.description[a]},e.name))})}function y({label:e,packages:t}){return(0,m.jsxs)(`div`,{className:`mt-4`,children:[(0,m.jsx)(`h4`,{className:`font-medium text-[12px] text-ink-3 tracking-wide`,children:e}),(0,m.jsx)(`ul`,{className:`divide-y divide-border-soft`,children:t.map(e=>(0,m.jsx)(g,{...e},e.name))})]})}function b({open:e,onClose:t}){let[n,i]=(0,d.useState)(null),[a,g]=(0,d.useState)(``);(0,d.useEffect)(()=>{if(!e||n)return;let t=!1;return r(()=>import(`./oss-credits-roB62QJu.js`).then(e=>{t||i(e.default)}),[]),()=>{t=!0}},[e,n]),(0,d.useEffect)(()=>{e||g(``)},[e]);let b=a.trim().toLowerCase(),x=e=>b?e.filter(e=>h(b,e.name,e.license,e.description.de,e.description.en)):e,S=e=>b?e.filter(e=>h(b,e.name,e.license,e.version)):e,C=x(f),w=x(p),T=n?[{id:`shared`,label:u(`about.creditsShared`),packages:S(n.shared)},...n.groups.map(e=>({id:e.id,label:e.label,packages:S(e.packages)}))].filter(e=>e.packages.length>0):[],E=C.length===0&&w.length===0&&T.length===0;return(0,m.jsxs)(c,{open:e,onClose:t,title:u(`about.credits`),wide:!0,children:[(0,m.jsx)(`p`,{className:`-mt-3 mb-4 text-[14px] text-ink-3`,children:u(`about.creditsHint`)}),(0,m.jsx)(l,{type:`search`,value:a,placeholder:u(`about.search`),onChange:e=>g(e.target.value)}),C.length>0?(0,m.jsx)(_,{title:u(`about.creditsProduct`),children:(0,m.jsx)(v,{credits:C})}):null,w.length>0?(0,m.jsx)(_,{title:u(`about.creditsBuiltWith`),children:(0,m.jsx)(v,{credits:w})}):null,n===null?(0,m.jsx)(`div`,{className:`flex justify-center py-10 text-ink-3`,children:(0,m.jsx)(s,{})}):T.length>0?(0,m.jsx)(_,{title:u(`about.creditsDeps`),hint:b?void 0:u(`about.creditsDepsHint`),children:T.map(e=>(0,m.jsx)(y,{label:e.label,packages:e.packages},e.id))}):null,n!==null&&E?(0,m.jsx)(o,{children:u(`about.noMatches`)}):null]})}export{b as CreditsDialog};
1
+ import{a as e,n as t,t as n}from"./jsx-runtime-D3jfb0Ew.js";import{t as r}from"./preload-helper-CNEI7N0N.js";import{t as i}from"./external-link-MAL7vJYj.js";import{_ as a,a as o,d as s,i as c,s as l,y as u}from"./ui-C3bTWmdM.js";var d=e(t(),1),f=[{name:`engenty wizards`,description:{de:`KI-Wizards aus einer Beschreibung, mit einem Link geteilt.`,en:`AI wizards built from a description, shared with a link.`},homepage:`https://github.com/engenty/engenty-wizards`,license:`FSL-1.1-MIT`},{name:`engenty`,description:{de:`Konnektoren, Datentabellen, Suche und die Engenties stammen aus dem engenty-Framework.`,en:`Connectors, data tables, search and the engenties come from the engenty framework.`},homepage:`https://github.com/engenty/engenty`,license:`FSL-1.1-MIT`}],p=[{name:`Mastra`,description:{de:`Agent-Framework hinter den KI-Schritten.`,en:`Agent framework behind the AI steps.`},homepage:`https://github.com/mastra-ai/mastra`,license:`Apache-2.0`},{name:`AI SDK`,description:{de:`Modell-Aufrufe für Text, Bild, Video und Sprache.`,en:`Model calls for text, image, video and speech.`},homepage:`https://github.com/vercel/ai`,license:`Apache-2.0`},{name:`Model Context Protocol`,description:{de:`MCP-Server zum Bauen von Wizards, MCP-Client für Werkzeuge der Schritte.`,en:`MCP server for building wizards, MCP client for the steps' tools.`},homepage:`https://github.com/modelcontextprotocol/typescript-sdk`,license:`MIT`},{name:`Hono`,description:{de:`HTTP-API der Runtime.`,en:`The runtime's HTTP API.`},homepage:`https://github.com/honojs/hono`,license:`MIT`},{name:`Drizzle ORM`,description:{de:`Schema und Migrationen der Datenbanken.`,en:`Schema and migrations of the databases.`},homepage:`https://github.com/drizzle-team/drizzle-orm`,license:`Apache-2.0`},{name:`libSQL`,description:{de:`Eine Datenbank je Mandant, lokal als Datei oder bei Turso.`,en:`One database per tenant, a local file or at Turso.`},homepage:`https://github.com/tursodatabase/libsql`,license:`MIT`},{name:`Playwright`,description:{de:`Browser-Schritte sowie PDF- und PNG-Export.`,en:`Browser steps and the PDF and PNG export.`},homepage:`https://github.com/microsoft/playwright`,license:`Apache-2.0`},{name:`agentOS`,description:{de:`Sandbox für Code-Schritte ohne Docker.`,en:`Sandbox for code steps without Docker.`},homepage:`https://github.com/rivet-dev/agentos`,license:`Apache-2.0`},{name:`React`,description:{de:`UI-Bibliothek der Web-App.`,en:`UI library of the web app.`},homepage:`https://github.com/facebook/react`,license:`MIT`},{name:`Vite`,description:{de:`Build-Werkzeug der Web-App.`,en:`Build tool of the web app.`},homepage:`https://github.com/vitejs/vite`,license:`MIT`},{name:`Tailwind CSS`,description:{de:`Styling der Oberfläche.`,en:`Styling of the interface.`},homepage:`https://github.com/tailwindlabs/tailwindcss`,license:`MIT`},{name:`React Flow`,description:{de:`Das Diagramm der Schritte im Editor.`,en:`The diagram of steps in the editor.`},homepage:`https://github.com/xyflow/xyflow`,license:`MIT`},{name:`TanStack Query`,description:{de:`Server-Daten in der Web-App.`,en:`Server data in the web app.`},homepage:`https://github.com/TanStack/query`,license:`MIT`},{name:`xterm.js`,description:{de:`Das Terminal auf der Seite, in dem sich KI-Clients anmelden.`,en:`The terminal on the page where AI clients sign in.`},homepage:`https://github.com/xtermjs/xterm.js`,license:`MIT`},{name:`Lucide`,description:{de:`Icons.`,en:`Icons.`},homepage:`https://github.com/lucide-icons/lucide`,license:`ISC`},{name:`Geist & Geist Mono`,description:{de:`Schrift der Oberfläche.`,en:`Typeface of the interface.`},homepage:`https://github.com/vercel/geist-font`,license:`OFL-1.1`},{name:`Space Grotesk`,description:{de:`Schrift der Überschriften.`,en:`Typeface of the headings.`},homepage:`https://github.com/floriankarsten/space-grotesk`,license:`OFL-1.1`},{name:`git-cliff`,description:{de:`Erzeugt den Changelog aus den Commits.`,en:`Generates the changelog from the commits.`},homepage:`https://github.com/orhun/git-cliff`,license:`MIT OR Apache-2.0`}],m=e(n(),1),h=(e,...t)=>t.some(t=>t?.toLowerCase().includes(e));function g({name:e,homepage:t,version:n,license:r,description:a}){return(0,m.jsxs)(`li`,{className:`py-2.5`,children:[(0,m.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2.5 gap-y-0.5`,children:[t?(0,m.jsxs)(`a`,{href:t,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1 font-medium text-[14px] text-ink underline-offset-4 hover:underline`,children:[e,(0,m.jsx)(i,{"aria-hidden":!0,className:`size-3 text-ink-4`})]}):(0,m.jsx)(`span`,{className:`font-medium text-[14px] text-ink`,children:e}),n?(0,m.jsx)(`span`,{className:`text-[12px] text-ink-3 tabular-nums`,children:n}):null,(0,m.jsx)(`span`,{className:`text-[12px] text-ink-3`,children:r})]}),a?(0,m.jsx)(`p`,{className:`mt-0.5 text-[13px] text-ink-3`,children:a}):null]})}function _({title:e,hint:t,children:n}){return(0,m.jsxs)(`section`,{className:`mt-6`,children:[(0,m.jsx)(`h3`,{className:`border-border-soft border-b pb-2 font-display font-semibold text-[16px]`,children:e}),t?(0,m.jsx)(`p`,{className:`mt-2 text-[13px] text-ink-3`,children:t}):null,n]})}function v({credits:e}){return(0,m.jsx)(`ul`,{className:`divide-y divide-border-soft`,children:e.map(e=>(0,m.jsx)(g,{name:e.name,homepage:e.homepage,license:e.license,description:e.description[a]},e.name))})}function y({label:e,packages:t}){return(0,m.jsxs)(`div`,{className:`mt-4`,children:[(0,m.jsx)(`h4`,{className:`font-medium text-[12px] text-ink-3 tracking-wide`,children:e}),(0,m.jsx)(`ul`,{className:`divide-y divide-border-soft`,children:t.map(e=>(0,m.jsx)(g,{...e},e.name))})]})}function b({open:e,onClose:t}){let[n,i]=(0,d.useState)(null),[a,g]=(0,d.useState)(``);(0,d.useEffect)(()=>{if(!e||n)return;let t=!1;return r(()=>import(`./oss-credits-Hu4LieLA.js`).then(e=>{t||i(e.default)}),[]),()=>{t=!0}},[e,n]),(0,d.useEffect)(()=>{e||g(``)},[e]);let b=a.trim().toLowerCase(),x=e=>b?e.filter(e=>h(b,e.name,e.license,e.description.de,e.description.en)):e,S=e=>b?e.filter(e=>h(b,e.name,e.license,e.version)):e,C=x(f),w=x(p),T=n?[{id:`shared`,label:u(`about.creditsShared`),packages:S(n.shared)},...n.groups.map(e=>({id:e.id,label:e.label,packages:S(e.packages)}))].filter(e=>e.packages.length>0):[],E=C.length===0&&w.length===0&&T.length===0;return(0,m.jsxs)(c,{open:e,onClose:t,title:u(`about.credits`),wide:!0,children:[(0,m.jsx)(`p`,{className:`-mt-3 mb-4 text-[14px] text-ink-3`,children:u(`about.creditsHint`)}),(0,m.jsx)(l,{type:`search`,value:a,placeholder:u(`about.search`),onChange:e=>g(e.target.value)}),C.length>0?(0,m.jsx)(_,{title:u(`about.creditsProduct`),children:(0,m.jsx)(v,{credits:C})}):null,w.length>0?(0,m.jsx)(_,{title:u(`about.creditsBuiltWith`),children:(0,m.jsx)(v,{credits:w})}):null,n===null?(0,m.jsx)(`div`,{className:`flex justify-center py-10 text-ink-3`,children:(0,m.jsx)(s,{})}):T.length>0?(0,m.jsx)(_,{title:u(`about.creditsDeps`),hint:b?void 0:u(`about.creditsDepsHint`),children:T.map(e=>(0,m.jsx)(y,{label:e.label,packages:e.packages},e.id))}):null,n!==null&&E?(0,m.jsx)(o,{children:u(`about.noMatches`)}):null]})}export{b as CreditsDialog};
@@ -0,0 +1,2 @@
1
+ import{a as e,n as t,t as n}from"./jsx-runtime-D3jfb0Ew.js";import{A as r,O as i,S as a,a as o,c as s,d as c,j as l,k as u,n as d,nt as f,t as p}from"./api-BTfKh3La.js";import{d as m,l as h,n as g,u as _}from"./session-D_Zggq_t.js";import{t as v}from"./createLucideIcon-q3MZMmnf.js";import{t as y}from"./plug-CLjyCoHB.js";import{n as ee,r as b,t as x}from"./RunnerView-BC6crf1p.js";import{t as S}from"./arrow-left-hTN1VoH1.js";import{D as C,n as w,y as T}from"./outputs-n_yhxmMk.js";import{a as E,i as te,n as ne,r as re,s as ie,t as ae}from"./meta-BbVhbYf6.js";import{t as oe}from"./check-CUpby_J9.js";import{r as se,t as ce}from"./wand-sparkles-CKxArWPY.js";import{a as le,i as ue,n as de,t as fe}from"./ChatPanel-Dk_45uca.js";import{n as pe,t as D}from"./plus-Du-Jx8aI.js";import{t as O}from"./external-link-MAL7vJYj.js";import{n as me}from"./mic-Bvz4mA2j.js";import{c as he,i as ge,l as k,n as A,o as _e,p as j,r as ve,s as M,t as N}from"./definition-DndaH5Ow.js";import{t as ye}from"./upload--J5bZhEM.js";import{_ as be,a as xe,c as P,d as Se,h as F,i as Ce,l as I,m as L,o as R,p as z,r as B,s as V,t as H,u as U,y as W}from"./ui-C3bTWmdM.js";import{c as we,d as Te,l as Ee,n as De,t as Oe}from"./index-DOpyzQiU.js";import{a as ke,c as Ae,i as je,l as Me,o as Ne,r as Pe,s as Fe,t as Ie}from"./esm-rJY59Ixx.js";import{r as Le}from"./LocalRuntime-BjzPSsHr.js";var Re={name:`chevron-left`,size:24,node:[[`path`,{d:`m15 18-6-6 6-6`,key:`1wnfg3`}]]};Re.node;var ze=v(Re),Be={name:`chevron-right`,size:24,node:[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]};Be.node;var Ve=v(Be),He={name:`circle-alert`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]],aliases:[`alert-circle`]};He.node;var Ue=v(He),We={name:`cloud-upload`,size:24,node:[[`path`,{d:`M12 13v8`,key:`1l5pq0`}],[`path`,{d:`M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242`,key:`1pljnt`}],[`path`,{d:`m8 17 4-4 4 4`,key:`1quai1`}]],aliases:[`upload-cloud`]};We.node;var Ge=v(We),Ke={name:`file-braces`,size:24,node:[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1`,key:`1oajmo`}],[`path`,{d:`M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1`,key:`mpwhp6`}]],aliases:[`file-json`]};Ke.node;var qe=v(Ke),Je={name:`file-code-corner`,size:24,node:[[`path`,{d:`M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35`,key:`1wthlu`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`m5 16-3 3 3 3`,key:`331omg`}],[`path`,{d:`m9 22 3-3-3-3`,key:`lsp7cz`}]],aliases:[`file-code-2`]};Je.node;var Ye=v(Je),Xe={name:`git-merge`,size:24,node:[[`circle`,{cx:`18`,cy:`18`,r:`3`,key:`1xkwt0`}],[`circle`,{cx:`6`,cy:`6`,r:`3`,key:`1lh9wr`}],[`path`,{d:`M6 21V9a9 9 0 0 0 9 9`,key:`7kw0sc`}]]};Xe.node;var Ze=v(Xe),Qe={name:`minus`,size:24,node:[[`path`,{d:`M5 12h14`,key:`1ays0h`}]]};Qe.node;var $e=v(Qe),et={name:`play`,size:24,node:[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]};et.node;var tt=v(et),nt={name:`scan`,size:24,node:[[`path`,{d:`M3 7V5a2 2 0 0 1 2-2h2`,key:`aa7l1z`}],[`path`,{d:`M17 3h2a2 2 0 0 1 2 2v2`,key:`4qcy5o`}],[`path`,{d:`M21 17v2a2 2 0 0 1-2 2h-2`,key:`6vwrx8`}],[`path`,{d:`M7 21H5a2 2 0 0 1-2-2v-2`,key:`ioqczr`}]]};nt.node;var rt=v(nt),G=e(t(),1),K=e(n(),1);function it(e){return e.mime.startsWith(`image/`)?ie:e.mime.includes(`json`)?qe:e.mime===`text/html`||e.mime.includes(`javascript`)||e.mime===`text/css`?Ye:me}function at(e){return e<1024?`${e} B`:e<1048576?`${Math.round(e/1024)} KB`:`${(e/1048576).toFixed(1)} MB`}function ot({wizardId:e,files:t,readOnly:n}){let r=f(),i=(0,G.useRef)(null),[a,o]=(0,G.useState)(!1),[s,c]=(0,G.useState)(!1),[l,u]=(0,G.useState)(null),p=`/api/studio/wizards/${e}/files`,m=()=>r.invalidateQueries({queryKey:[`wizard`,e]}),h=async e=>{if(e?.length){o(!0),u(null);try{for(let t of Array.from(e)){let e=await fetch(`${p}/${encodeURIComponent(t.name).replace(/%2F/g,`/`)}`,{method:`PUT`,credentials:`include`,headers:{"content-type":t.type||`application/octet-stream`},body:t});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.error??e.statusText)}}}catch(e){u(e.message)}finally{o(!1),await m()}}},g=async e=>{if(window.confirm(W(`files.confirmDelete`,{path:e}))){u(null);try{await d.del(`${p}/${e}`)}catch(e){u(e.message)}await m()}},_=t.reduce((e,t)=>e+t.size,0);return(0,K.jsxs)(`div`,{className:F(`flex min-h-full flex-col px-5 py-5`,s&&`bg-ember-veil`),onDragOver:e=>{e.preventDefault(),c(!n)},onDragLeave:()=>c(!1),onDrop:e=>{e.preventDefault(),c(!1),n||h(e.dataTransfer.files)},children:[n?null:(0,K.jsx)(`p`,{className:`mb-4 text-[13px] text-ink-3 leading-relaxed`,children:W(`files.explain`)}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[n?null:(0,K.jsxs)(`button`,{type:`button`,onClick:()=>i.current?.click(),className:`inline-flex h-9 items-center gap-1.5 rounded-full bg-paper-2 px-3.5 font-medium text-[13px] text-ink-2 hover:bg-paper-3 hover:text-ink`,children:[a?(0,K.jsx)(Se,{className:`size-3.5`}):(0,K.jsx)(ye,{className:`size-3.5`}),W(`files.upload`)]}),(0,K.jsx)(`span`,{className:`ml-auto text-[12px] text-ink-4`,children:W(`files.count`,{n:t.length,size:at(_)})}),(0,K.jsx)(`input`,{ref:i,type:`file`,multiple:!0,hidden:!0,onChange:e=>void h(e.target.files)})]}),l?(0,K.jsx)(`div`,{className:`mt-3 rounded-lg bg-rose-tint px-3 py-2 text-[13px] text-rose`,children:l}):null,(0,K.jsx)(`ul`,{className:`mt-4 flex flex-col`,children:t.map(e=>{let t=it(e);return(0,K.jsxs)(`li`,{className:`group flex items-center gap-3 rounded-lg px-2 py-1.5 hover:bg-paper-2`,children:[(0,K.jsx)(t,{className:`size-4 shrink-0 text-ink-3`}),(0,K.jsx)(`span`,{className:`min-w-0 flex-1 truncate font-mono text-[12px]`,children:e.path}),(0,K.jsx)(`span`,{className:`text-[12px] text-ink-4 tabular-nums`,children:at(e.size)}),(0,K.jsx)(`a`,{href:`${p}/${e.path}`,className:`inline-flex size-8 items-center justify-center rounded-full text-ink-3 opacity-0 hover:text-ink group-hover:opacity-100`,"aria-label":W(`files.download`),children:(0,K.jsx)(Te,{className:`size-4`})}),n?null:(0,K.jsx)(R,{label:W(`files.delete`),className:`opacity-0 hover:text-rose group-hover:opacity-100`,onClick:()=>void g(e.path),children:(0,K.jsx)(T,{className:`size-4`})})]},e.path)})}),t.length===0?(0,K.jsx)(`div`,{className:`mt-6 rounded-xl border border-border border-dashed px-4 py-8 text-center text-[13px] text-ink-4`,children:W(n?`files.none`:`files.empty`)}):null]})}var st=Object.defineProperty,ct=(e,t,n)=>t in e?st(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,lt=(e,t)=>{for(var n in t)st(e,n,{get:t[n],enumerable:!0})},ut=(e,t,n)=>ct(e,typeof t==`symbol`?t:t+``,n),dt={};lt(dt,{Graph:()=>q,alg:()=>wt});var ft=Object.defineProperty,pt=(e,t)=>{for(var n in t)ft(e,n,{get:t[n],enumerable:!0})},mt=class{constructor(e){this._isDirected=!0,this._isMultigraph=!1,this._isCompound=!1,this._nodes={},this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={},this._nodeCount=0,this._edgeCount=0,this._defaultNodeLabelFn=()=>{},this._defaultEdgeLabelFn=()=>{},e&&(this._isDirected=`directed`in e?e.directed:!0,this._isMultigraph=`multigraph`in e&&e.multigraph,this._isCompound=`compound`in e&&e.compound),this._isCompound&&(this._parent={},this._children={},this._children[`\0`]={})}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return this._defaultNodeLabelFn=typeof e==`function`?e:()=>e,this}nodeCount(){return this._nodeCount}nodes(){return Object.keys(this._nodes)}sources(){return this.nodes().filter(e=>Object.keys(this._in[e]).length===0)}sinks(){return this.nodes().filter(e=>Object.keys(this._out[e]).length===0)}setNodes(e,t){return e.forEach(e=>{t===void 0?this.setNode(e):this.setNode(e,t)}),this}setNode(e,t){return e in this._nodes?(arguments.length>1&&(this._nodes[e]=t),this):(this._nodes[e]=arguments.length>1?t:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=`\0`,this._children[e]={},this._children[`\0`][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return e in this._nodes}removeNode(e){if(e in this._nodes){let t=e=>this.removeEdge(this._edgeObjs[e]);delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],this.children(e).forEach(e=>{this.setParent(e)}),delete this._children[e]),Object.keys(this._in[e]).forEach(t),delete this._in[e],delete this._preds[e],Object.keys(this._out[e]).forEach(t),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,t){if(!this._isCompound)throw Error(`Cannot set parent in a non-compound graph`);if(t===void 0)t=`\0`;else{t+=``;for(let n=t;n!==void 0;n=this.parent(n))if(n===e)throw Error(`Setting `+t+` as parent of `+e+` would create a cycle`);this.setNode(t)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=t,this._children[t][e]=!0,this}parent(e){if(this._isCompound){let t=this._parent[e];if(t!==`\0`)return t}}children(e=`\0`){if(this._isCompound){let t=this._children[e];if(t)return Object.keys(t)}else{if(e===`\0`)return this.nodes();if(this.hasNode(e))return[]}return[]}predecessors(e){let t=this._preds[e];if(t)return Object.keys(t)}successors(e){let t=this._sucs[e];if(t)return Object.keys(t)}neighbors(e){let t=this.predecessors(e);if(t){let n=new Set(t),r=this.successors(e);if(r)for(let e of r)n.add(e);return Array.from(n.values())}}isLeaf(e){let t;return t=this.isDirected()?this.successors(e):this.neighbors(e),(t?.length??0)===0}filterNodes(e){let t=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});t.setGraph(this.graph()),Object.entries(this._nodes).forEach(([n,r])=>{e(n)&&t.setNode(n,r)}),Object.values(this._edgeObjs).forEach(e=>{t.hasNode(e.v)&&t.hasNode(e.w)&&t.setEdge(e,this.edge(e))});let n={},r=e=>{let i=this.parent(e);return!i||t.hasNode(i)?(n[e]=i,i):i in n?n[i]:r(i)};return this._isCompound&&t.nodes().forEach(e=>t.setParent(e,r(e))),t}setDefaultEdgeLabel(e){return this._defaultEdgeLabelFn=typeof e==`function`?e:()=>e,this}edgeCount(){return this._edgeCount}edges(){return Object.values(this._edgeObjs)}setPath(e,t){return e.reduce((e,n)=>(t===void 0?this.setEdge(e,n):this.setEdge(e,n,t),n)),this}setEdge(e,t,n,r){let i,a,o,s,c=!1;typeof e==`object`&&e&&`v`in e?(i=e.v,a=e.w,o=e.name,arguments.length===2&&(s=t,c=!0)):(i=e,a=t,o=r,arguments.length>2&&(s=n,c=!0)),i=``+i,a=``+a,o!==void 0&&(o=``+o);let l=_t(this._isDirected,i,a,o);if(l in this._edgeLabels)return c&&(this._edgeLabels[l]=s),this;if(o!==void 0&&!this._isMultigraph)throw Error(`Cannot set a named edge when isMultigraph = false`);this.setNode(i),this.setNode(a),this._edgeLabels[l]=c?s:this._defaultEdgeLabelFn(i,a,o);let u=vt(this._isDirected,i,a,o);return i=u.v,a=u.w,Object.freeze(u),this._edgeObjs[l]=u,ht(this._preds[a],i),ht(this._sucs[i],a),this._in[a][l]=u,this._out[i][l]=u,this._edgeCount++,this}edge(e,t,n){let r=arguments.length===1?yt(this._isDirected,e):_t(this._isDirected,e,t,n);return this._edgeLabels[r]}edgeAsObj(e,t,n){let r=arguments.length===1?this.edge(e):this.edge(e,t,n);return typeof r!=`object`||!r?{label:r}:r}hasEdge(e,t,n){return(arguments.length===1?yt(this._isDirected,e):_t(this._isDirected,e,t,n))in this._edgeLabels}removeEdge(e,t,n){let r=arguments.length===1?yt(this._isDirected,e):_t(this._isDirected,e,t,n),i=this._edgeObjs[r];if(i){let e=i.v,t=i.w;delete this._edgeLabels[r],delete this._edgeObjs[r],gt(this._preds[t],e),gt(this._sucs[e],t),delete this._in[t][r],delete this._out[e][r],this._edgeCount--}return this}inEdges(e,t){return this.isDirected()?this.filterEdges(this._in[e],e,t):this.nodeEdges(e,t)}outEdges(e,t){return this.isDirected()?this.filterEdges(this._out[e],e,t):this.nodeEdges(e,t)}nodeEdges(e,t){if(e in this._nodes)return this.filterEdges({...this._in[e],...this._out[e]},e,t)}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}filterEdges(e,t,n){if(!e)return;let r=Object.values(e);return n?r.filter(e=>e.v===t&&e.w===n||e.v===n&&e.w===t):r}};function ht(e,t){e[t]?e[t]++:e[t]=1}function gt(e,t){e[t]!==void 0&&!--e[t]&&delete e[t]}function _t(e,t,n,r){let i=``+t,a=``+n;if(!e&&i>a){let e=i;i=a,a=e}return i+``+a+``+(r===void 0?`\0`:r)}function vt(e,t,n,r){let i=``+t,a=``+n;if(!e&&i>a){let e=i;i=a,a=e}let o={v:i,w:a};return r&&(o.name=r),o}function yt(e,t){return _t(e,t.v,t.w,t.name)}pt({},{read:()=>Ct,write:()=>bt});function bt(e){let t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:xt(e),edges:St(e)},n=e.graph();return n!==void 0&&(t.value=structuredClone(n)),t}function xt(e){return e.nodes().map(t=>{let n=e.node(t),r=e.parent(t),i={v:t};return n!==void 0&&(i.value=n),r!==void 0&&(i.parent=r),i})}function St(e){return e.edges().map(t=>{let n=e.edge(t),r={v:t.v,w:t.w};return t.name!==void 0&&(r.name=t.name),n!==void 0&&(r.value=n),r})}function Ct(e){let t=new mt(e.options);return e.value!==void 0&&t.setGraph(e.value),e.nodes.forEach(e=>{t.setNode(e.v,e.value),e.parent&&t.setParent(e.v,e.parent)}),e.edges.forEach(e=>{t.setEdge({v:e.v,w:e.w,name:e.name},e.value)}),t}var wt={};pt(wt,{CycleException:()=>zt,bellmanFord:()=>Et,components:()=>Ot,dijkstra:()=>jt,dijkstraAll:()=>Nt,findCycles:()=>Ft,floydWarshall:()=>Lt,isAcyclic:()=>Vt,postorder:()=>Gt,preorder:()=>Kt,prim:()=>qt,shortestPaths:()=>Jt,tarjan:()=>Pt,topsort:()=>Bt});var Tt=()=>1;function Et(e,t,n,r){return Dt(e,String(t),n||Tt,r||function(t){return e.outEdges(t)??[]})}function Dt(e,t,n,r){let i={},a,o=0,s=e.nodes(),c=function(e){let t=i[e.v],r=i[e.w];if(!t||!r)return;let o=n(e);t.distance+o<r.distance&&(i[e.w]={distance:t.distance+o,predecessor:e.v},a=!0)},l=function(){s.forEach(function(e){r(e).forEach(function(t){let n=t.v===e?t.v:t.w,r=n===t.v?t.w:t.v;c({v:n,w:r})})})};s.forEach(function(e){i[e]={distance:e===t?0:1/0,predecessor:``}});let u=s.length;for(let e=1;e<u&&(a=!1,o++,l(),a);e++);if(o===u-1&&(a=!1,l(),a))throw Error(`The graph contains a negative weight cycle`);return i}function Ot(e){let t={},n=[],r;function i(n){var a,o;n in t||(t[n]=!0,r.push(n),(a=e.successors(n))==null||a.forEach(i),(o=e.predecessors(n))==null||o.forEach(i))}return e.nodes().forEach(function(e){r=[],i(e),r.length&&n.push(r)}),n}var kt=class{constructor(){this._arr=[],this._keyIndices={}}size(){return this._arr.length}keys(){return this._arr.map(e=>e.key)}has(e){return e in this._keyIndices}priority(e){let t=this._keyIndices[e];if(t!==void 0)return this._arr[t].priority}min(){if(this.size()===0)throw Error(`Queue underflow`);return this._arr[0].key}add(e,t){let n=this._keyIndices,r=String(e);if(!(r in n)){let e=this._arr,i=e.length;return n[r]=i,e.push({key:r,priority:t}),this._decrease(i),!0}return!1}removeMin(){if(this.size()===0)throw Error(`Queue underflow`);this._swap(0,this._arr.length-1);let e=this._arr.pop();return delete this._keyIndices[e.key],this._heapify(0),e.key}decrease(e,t){let n=this._keyIndices[e];if(n===void 0)throw Error(`Key not found: ${e}`);let r=this._arr[n].priority;if(t>r)throw Error(`New priority is greater than current priority. Key: ${e} Old: ${r} New: ${t}`);this._arr[n].priority=t,this._decrease(n)}_heapify(e){let t=this._arr,n=2*e,r=n+1,i=e;n<t.length&&(i=t[n].priority<t[i].priority?n:i,r<t.length&&(i=t[r].priority<t[i].priority?r:i),i!==e&&(this._swap(e,i),this._heapify(i)))}_decrease(e){let t=this._arr,n=t[e].priority,r;for(;e!==0&&(r=e>>1,!(t[r].priority<n));)this._swap(e,r),e=r}_swap(e,t){let n=this._arr,r=this._keyIndices,i=n[e],a=n[t];n[e]=a,n[t]=i,r[a.key]=e,r[i.key]=t}},At=()=>1;function jt(e,t,n,r){return Mt(e,String(t),n||At,r||function(t){return e.outEdges(t)??[]})}function Mt(e,t,n,r){let i={},a=new kt,o,s,c=function(e){let t=e.v===o?e.w:e.v,r=i[t];if(!r)return;let c=n(e),l=s.distance+c;if(c<0)throw Error(`dijkstra does not allow negative edge weights. Bad edge: `+e+` Weight: `+c);l<r.distance&&(r.distance=l,r.predecessor=o,a.decrease(t,l))};for(e.nodes().forEach(function(e){let n=e===t?0:1/0;i[e]={distance:n,predecessor:``},a.add(e,n)});a.size()>0;){o=a.removeMin();let e=i[o];if(!e||e.distance===1/0)break;s=e,r(o).forEach(c)}return i}function Nt(e,t,n){return e.nodes().reduce(function(r,i){return r[i]=jt(e,i,t,n),r},{})}function Pt(e){let t=0,n=[],r={},i=[];function a(o){var s;let c=r[o]={onStack:!0,lowlink:t,index:t++};if(n.push(o),(s=e.successors(o))==null||s.forEach(function(e){if(e in r){let t=r[e];t!=null&&t.onStack&&(c.lowlink=Math.min(c.lowlink,t.index))}else{a(e);let t=r[e];t&&(c.lowlink=Math.min(c.lowlink,t.lowlink))}}),c.lowlink===c.index){let e=[],t;do{t=n.pop();let i=r[t];i&&(i.onStack=!1),e.push(t)}while(o!==t);i.push(e)}}return e.nodes().forEach(function(e){e in r||a(e)}),i}function Ft(e){return Pt(e).filter(function(t){let n=t[0];return n?t.length>1||t.length===1&&(e.outEdges(n,n)??[]).length>0:!1})}var It=()=>1;function Lt(e,t,n){return Rt(e,t||It,n||function(t){return e.outEdges(t)??[]})}function Rt(e,t,n){let r={},i=e.nodes();return i.forEach(function(e){let a={};r[e]=a,a[e]={distance:0,predecessor:``},i.forEach(function(t){e!==t&&(a[t]={distance:1/0,predecessor:``})}),n(e).forEach(function(n){let r=n.v===e?n.w:n.v,i=t(n);a[r]={distance:i,predecessor:e}})}),i.forEach(function(e){let t=r[e];t&&i.forEach(function(n){let a=r[n];a&&i.forEach(function(n){let r=a[e],i=t[n],o=a[n];if(r&&i&&o){let e=r.distance+i.distance;e<o.distance&&(o.distance=e,o.predecessor=i.predecessor)}})})}),r}var zt=class extends Error{constructor(e){super(e),this.name=`CycleException`}};function Bt(e){let t={},n={},r=[];function i(a){var o;if(a in n)throw new zt;a in t||(n[a]=!0,t[a]=!0,(o=e.predecessors(a))==null||o.forEach(i),delete n[a],r.push(a))}if(e.sinks().forEach(i),Object.keys(t).length!==e.nodeCount())throw new zt;return r}function Vt(e){try{Bt(e)}catch(e){if(e instanceof zt)return!1;throw e}return!0}function Ht(e,t,n,r,i){Array.isArray(t)||(t=[t]);let a=(t=>(e.isDirected()?e.successors(t):e.neighbors(t))??[]),o={};return t.forEach(function(t){if(!e.hasNode(t))throw Error(`Graph does not have node: `+t);i=Ut(e,t,n===`post`,o,a,r,i)}),i}function Ut(e,t,n,r,i,a,o){return t in r||(r[t]=!0,n||(o=a(o,t)),i(t).forEach(function(t){o=Ut(e,t,n,r,i,a,o)}),n&&(o=a(o,t))),o}function Wt(e,t,n){return Ht(e,t,n,function(e,t){return e.push(t),e},[])}function Gt(e,t){return Wt(e,t,`post`)}function Kt(e,t){return Wt(e,t,`pre`)}function qt(e,t){var n;let r=new mt,i={},a=new kt,o;function s(e){let n=e.v===o?e.w:e.v,r=a.priority(n);if(r!==void 0){let s=t(e);s<r&&(i[n]=o,a.decrease(n,s))}}if(e.nodeCount()===0)return r;e.nodes().forEach(function(e){a.add(e,1/0),r.setNode(e)});let c=e.nodes()[0];c!==void 0&&a.decrease(c,0);let l=!1;for(;a.size()>0;){if(o=a.removeMin(),o in i)r.setEdge(o,i[o]);else{if(l)throw Error(`Input graph is not connected: `+e);l=!0}(n=e.nodeEdges(o))==null||n.forEach(s)}return r}function Jt(e,t,n,r){return Yt(e,t,n,r??(t=>e.outEdges(t)??[]))}function Yt(e,t,n,r){if(n===void 0)return jt(e,t,n,r);let i=!1,a=e.nodes();for(let o=0;o<a.length;o++){let s=a[o];if(s===void 0)continue;let c=r(s);for(let e=0;e<c.length;e++){let t=c[e];if(!t)continue;let r=t.v===s?t.v:t.w;n({v:r,w:r===t.v?t.w:t.v})<0&&(i=!0)}if(i)return Et(e,t,n,r)}return jt(e,t,n,r)}var q=mt;function Xt(e,t,n,r){let i=r;for(;e.hasNode(i);)i=fn(r);return n.dummy=t,e.setNode(i,n),i}function Zt(e){let t=new q().setGraph(e.graph());return e.nodes().forEach(n=>t.setNode(n,e.node(n))),e.edges().forEach(n=>{let r=t.edge(n.v,n.w)||{weight:0,minlen:1},i=e.edge(n);t.setEdge(n.v,n.w,{weight:r.weight+i.weight,minlen:Math.max(r.minlen,i.minlen)})}),t}function Qt(e){let t=new q({multigraph:e.isMultigraph()}).setGraph(e.graph());return e.nodes().forEach(n=>{e.children(n).length||t.setNode(n,e.node(n))}),e.edges().forEach(n=>{t.setEdge(n,e.edge(n))}),t}function $t(e,t){let n=e.x,r=e.y,i=t.x-n,a=t.y-r,o=e.width/2,s=e.height/2;if(!i&&!a)throw Error(`Not possible to find intersection inside of the rectangle`);let c,l;return Math.abs(a)*o>Math.abs(i)*s?(a<0&&(s=-s),c=s*i/a,l=s):(i<0&&(o=-o),c=o,l=o*a/i),{x:n+c,y:r+l}}function en(e){let t=pn(sn(e)+1).map(()=>[]);return e.nodes().forEach(n=>{let r=e.node(n),i=r.rank;i!==void 0&&(t[i]||(t[i]=[]),t[i][r.order]=n)}),t}function tn(e){let t=e.nodes().map(t=>{let n=e.node(t).rank;return n===void 0?Number.MAX_VALUE:n}),n=J(Math.min,t);e.nodes().forEach(t=>{let r=e.node(t);Object.hasOwn(r,`rank`)&&(r.rank-=n)})}function nn(e){let t=e.nodes().map(t=>e.node(t).rank).filter(e=>e!==void 0),n=J(Math.min,t),r=[];e.nodes().forEach(t=>{let i=e.node(t).rank-n;r[i]||(r[i]=[]),r[i].push(t)});let i=0,a=e.graph().nodeRankFactor;Array.from(r).forEach((t,n)=>{t===void 0&&n%a!==0?--i:t!==void 0&&i&&t.forEach(t=>e.node(t).rank+=i)})}function rn(e,t,n,r){let i={width:0,height:0};return arguments.length>=4&&(i.rank=n,i.order=r),Xt(e,`border`,i,t)}function an(e,t=on){let n=[];for(let r=0;r<e.length;r+=t){let i=e.slice(r,r+t);n.push(i)}return n}var on=65535;function J(e,t){return t.length>on?e(...an(t).map(t=>e(...t))):e(...t)}function sn(e){let t=e.nodes().map(t=>{let n=e.node(t).rank;return n===void 0?Number.MIN_VALUE:n});return J(Math.max,t)}function cn(e,t){let n={lhs:[],rhs:[]};return e.forEach(e=>{t(e)?n.lhs.push(e):n.rhs.push(e)}),n}function ln(e,t){let n=Date.now();try{return t()}finally{console.log(e+` time: `+(Date.now()-n)+`ms`)}}function un(e,t){return t()}var dn=0;function fn(e){return e+(``+ ++dn)}function pn(e,t,n=1){t??(t=e,e=0);let r=e=>e<t;n<0&&(r=e=>t<e);let i=[];for(let t=e;r(t);t+=n)i.push(t);return i}function mn(e,t){let n={};for(let r of t)e[r]!==void 0&&(n[r]=e[r]);return n}function hn(e,t){let n;return n=typeof t==`string`?e=>e[t]:t,Object.entries(e).reduce((e,[t,r])=>(e[t]=n(r,t),e),{})}function gn(e,t){return e.reduce((e,n,r)=>(e[n]=t[r],e),{})}var _n=`\0`;function vn(e,t,n){if(!(e&&t&&n&&t.dummy===`edge`&&n.dummy===`edge`&&t.edgeObj&&n.edgeObj&&e[t.edgeObj.v]&&e[n.edgeObj.v]&&e[t.edgeObj.w]&&e[n.edgeObj.w]))return 0;let r=!0;t.edgeObj.w===n.edgeObj.w&&(r=!1);let i=r?e[t.edgeObj.v]?.rank??NaN:e[t.edgeObj.w]?.rank??NaN,a=Object.entries(e).find(e=>e[1].edgeObj?.v===t.edgeObj.v&&e[1].edgeObj?.w===t.edgeObj.w&&e[1].rank===i),o=Object.entries(e).find(e=>e[1].edgeObj?.v===n.edgeObj.v&&e[1].edgeObj?.w===n.edgeObj.w&&e[1].rank===i);if(!a||!o)return 0;let s=a[1].order??NaN,c=o[1].order??NaN;return isNaN(s-c)?0:s-c}var yn=`3.1.1`,bn=class{constructor(){ut(this,`_sentinel`);let e={};e._next=e._prev=e,this._sentinel=e}dequeue(){let e=this._sentinel,t=e._prev;if(t!==e)return xn(t),t}enqueue(e){let t=this._sentinel;e._prev&&e._next&&xn(e),e._next=t._next,t._next._prev=e,t._next=e,e._prev=t}toString(){let e=[],t=this._sentinel,n=t._prev;for(;n!==t;)e.push(JSON.stringify(n,Sn)),n=n._prev;return`[`+e.join(`, `)+`]`}};function xn(e){e._prev._next=e._next,e._next._prev=e._prev,delete e._next,delete e._prev}function Sn(e,t){if(e!==`_next`&&e!==`_prev`)return t}var Cn=bn,wn=()=>1;function Tn(e,t){if(e.nodeCount()<=1)return[];let n=On(e,t||wn);return En(n.graph,n.buckets,n.zeroIdx).flatMap(t=>e.outEdges(t.v,t.w)||[])}function En(e,t,n){let r=[],i=t[t.length-1],a=t[0],o;for(;e.nodeCount();){for(;o=a.dequeue();)Dn(e,t,n,o);for(;o=i.dequeue();)Dn(e,t,n,o);if(e.nodeCount()){for(let i=t.length-2;i>0;--i)if(o=t[i]?.dequeue(),o){r=r.concat(Dn(e,t,n,o,!0)||[]);break}}}return r}function Dn(e,t,n,r,i){let a=[],o=i?a:void 0;return(e.inEdges(r.v)||[]).forEach(r=>{let o=e.edge(r),s=e.node(r.v);i&&a.push({v:r.v,w:r.w}),s.out-=o,kn(t,n,s)}),(e.outEdges(r.v)||[]).forEach(r=>{let i=e.edge(r),a=r.w,o=e.node(a);o.in-=i,kn(t,n,o)}),e.removeNode(r.v),o}function On(e,t){let n=new q,r=0,i=0;e.nodes().forEach(e=>{n.setNode(e,{v:e,in:0,out:0})}),e.edges().forEach(e=>{let a=n.edge(e.v,e.w)||0,o=t(e),s=a+o;n.setEdge(e.v,e.w,s);let c=n.node(e.v),l=n.node(e.w);i=Math.max(i,c.out+=o),r=Math.max(r,l.in+=o)});let a=An(i+r+3).map(()=>new Cn),o=r+1;return n.nodes().forEach(e=>{kn(a,o,n.node(e))}),{graph:n,buckets:a,zeroIdx:o}}function kn(e,t,n){var r,i,a;n.out?n.in?(a=e[n.out-n.in+t])==null||a.enqueue(n):(i=e[e.length-1])==null||i.enqueue(n):(r=e[0])==null||r.enqueue(n)}function An(e){let t=[];for(let n=0;n<e;n++)t.push(n);return t}function jn(e,t){(e.graph().acyclicer===`greedy`?Tn(e,n(e)):Mn(e,t??null)).forEach(t=>{let n=e.edge(t);e.removeEdge(t),n.forwardName=t.name,n.reversed=!0,e.setEdge(t.w,t.v,n,fn(`rev`))});function n(e){return t=>e.edge(t).weight}}function Mn(e,t){let n=[],r={},i={};function a(t){Object.hasOwn(i,t)||(i[t]=!0,r[t]=!0,e.outEdges(t).forEach(e=>{Object.hasOwn(r,e.w)?n.push(e):a(e.w)}),delete r[t])}function o(a){var s;Object.hasOwn(i,a)||(i[a]=!0,r[a]=!0,(s=e.outEdges(a))==null||s.forEach(i=>{Object.hasOwn(r,i.w)||t.node(a)?.rank>t.node(i.w)?.rank&&Pn(e,i.w,i)?n.push(i):o(i.w)}),delete r[a])}let s=a;return t&&typeof t.node==`function`&&(s=o),e.sources().forEach(s),e.nodes().forEach(s),n}function Nn(e){e.edges().forEach(t=>{let n=e.edge(t);if(n.reversed){e.removeEdge(t);let r=n.forwardName;delete n.reversed,delete n.forwardName,e.setEdge(t.w,t.v,n,r)}})}function Pn(e,t,n){let r=new Set;function i(t){if(e.sources().includes(t))return!0;r.add(t);for(let a of e.inEdges(t)??[])if((a.v!==n.v||a.w!==n.w)&&!r.has(a.v)&&i(a.v))return!0;return!1}return i(t)}function Fn(e){e.graph().dummyChains=[],e.edges().forEach(t=>In(e,t))}function In(e,t){let n=t.v,r=e.node(n).rank,i=t.w,a=e.node(i).rank,o=t.name,s=e.edge(t),c=s.labelRank;if(a===r+1)return;e.removeEdge(t);let l,u,d=0;for(++r;r<a;++d,++r)s.points=[],u={width:0,height:0,edgeLabel:s,edgeObj:t,rank:r},l=Xt(e,`edge`,u,`_d`),r===c&&(u.width=s.width,u.height=s.height,u.dummy=`edge-label`,u.labelpos=s.labelpos),e.setEdge(n,l,{weight:s.weight},o),d===0&&e.graph().dummyChains.push(l),n=l;e.setEdge(n,i,{weight:s.weight},o)}function Ln(e){e.graph().dummyChains.forEach(t=>{let n=e.node(t),r=n.edgeLabel,i;for(e.setEdge(n.edgeObj,r);n.dummy;)i=e.successors(t)[0],e.removeNode(t),r.points.push({x:n.x,y:n.y}),n.dummy===`edge-label`&&(r.x=n.x,r.y=n.y,r.width=n.width,r.height=n.height),t=i,n=e.node(t)})}function Rn(e){let t={};function n(r){let i=e.node(r);if(Object.hasOwn(t,r))return i.rank;t[r]=!0;let a=e.outEdges(r),o=a?a.map(t=>t==null?1/0:n(t.w)-e.edge(t).minlen):[],s=J(Math.min,o);return s===1/0&&(s=0),i.rank=s}e.sources().forEach(n)}function zn(e,t){return e.node(t.w).rank-e.node(t.v).rank-e.edge(t).minlen}var Bn=Vn;function Vn(e){let t=new q({directed:!1}),n=e.nodes();if(n.length===0)throw Error(`Graph must have at least one node`);let r=n[0],i=e.nodeCount();t.setNode(r,{});let a,o;for(;Hn(t,e)<i&&(a=Un(t,e),a);)o=t.hasNode(a.v)?zn(e,a):-zn(e,a),Wn(t,e,o);return t}function Hn(e,t){function n(r){let i=t.nodeEdges(r);i&&i.forEach(i=>{let a=i.v,o=r===a?i.w:a;!e.hasNode(o)&&!zn(t,i)&&(e.setNode(o,{}),e.setEdge(r,o,{}),n(o))})}return e.nodes().forEach(n),e.nodeCount()}function Un(e,t){return t.edges().reduce((n,r)=>{let i=1/0;return e.hasNode(r.v)!==e.hasNode(r.w)&&(i=zn(t,r)),i<n[0]?[i,r]:n},[1/0,null])[1]}function Wn(e,t,n){e.nodes().forEach(e=>t.node(e).rank+=n)}var{preorder:Gn,postorder:Kn}=wt,qn=Y;Y.initLowLimValues=Zn,Y.initCutValues=Jn,Y.calcCutValue=Xn,Y.leaveEdge=$n,Y.enterEdge=er,Y.exchangeEdges=tr;function Y(e){e=Zt(e),Rn(e);let t=Bn(e);Zn(t),Jn(t,e);let n,r;for(;n=$n(t);)r=er(t,e,n),tr(t,e,n,r)}function Jn(e,t){let n=Kn(e,e.nodes());n=n.slice(0,n.length-1),n.forEach(n=>Yn(e,t,n))}function Yn(e,t,n){let r=e.node(n).parent,i=e.edge(n,r);i.cutvalue=Xn(e,t,n)}function Xn(e,t,n){let r=e.node(n).parent,i=!0,a=t.edge(n,r),o=0;a||=(i=!1,t.edge(r,n)),o=a.weight;let s=t.nodeEdges(n);return s&&s.forEach(a=>{let s=a.v===n,c=s?a.w:a.v;if(c!==r){let r=s===i,l=t.edge(a).weight;if(o+=r?l:-l,rr(e,n,c)){let t=e.edge(n,c).cutvalue;o+=r?-t:t}}}),o}function Zn(e,t){arguments.length<2&&(t=e.nodes()[0]),Qn(e,{},1,t)}function Qn(e,t,n,r,i){let a=n,o=e.node(r);t[r]=!0;let s=e.neighbors(r);return s&&s.forEach(i=>{Object.hasOwn(t,i)||(n=Qn(e,t,n,i,r))}),o.low=a,o.lim=n++,i?o.parent=i:delete o.parent,n}function $n(e){return e.edges().find(t=>e.edge(t).cutvalue<0)}function er(e,t,n){let r=n.v,i=n.w;t.hasEdge(r,i)||(r=n.w,i=n.v);let a=e.node(r),o=e.node(i),s=a,c=!1;return a.lim>o.lim&&(s=o,c=!0),t.edges().filter(t=>c===ir(e,e.node(t.v),s)&&c!==ir(e,e.node(t.w),s)).reduce((e,n)=>zn(t,n)<zn(t,e)?n:e)}function tr(e,t,n,r){let i=n.v,a=n.w;e.removeEdge(i,a),e.setEdge(r.v,r.w,{}),Zn(e),Jn(e,t),nr(e,t)}function nr(e,t){let n=e.nodes().find(t=>!e.node(t).parent);if(!n)return;let r=Gn(e,[n]);r=r.slice(1),r.forEach(n=>{let r=e.node(n).parent,i=t.edge(n,r),a=!1;i||(i=t.edge(r,n),a=!0),t.node(n).rank=t.node(r).rank+(a?i.minlen:-i.minlen)})}function rr(e,t,n){return e.hasEdge(t,n)}function ir(e,t,n){return n.low<=t.lim&&t.lim<=n.lim}var ar=or;function or(e){let t=e.graph().ranker;if(typeof t==`function`)return t(e);switch(t){case`network-simplex`:lr(e);break;case`tight-tree`:cr(e);break;case`longest-path`:sr(e);break;case`none`:break;default:lr(e)}}var sr=Rn;function cr(e){Rn(e),Bn(e)}function lr(e){qn(e)}var ur=dr;function dr(e){let t=pr(e),n=e.graph();Array.isArray(n.dummyChains)&&n.dummyChains.forEach(n=>{let r=e.node(n),i=r.edgeObj,a=fr(e,t,i.v,i.w),o=a.path,s=a.lca,c=0,l=o[c],u=!0;for(;n!==i.w;){if(r=e.node(n),u){for(;(l=o[c])!==s&&e.node(l).maxRank<r.rank;)c++;l===s&&(u=!1)}if(!u){for(;c<o.length-1&&e.node(o[c+1]).minRank<=r.rank;)c++;l=o[c]}l!==void 0&&e.setParent(n,l),n=e.successors(n)[0]}})}function fr(e,t,n,r){let i=[],a=[],o=Math.min(t[n].low,t[r].low),s=Math.max(t[n].lim,t[r].lim),c;c=n;do c=e.parent(c),i.push(c);while(c&&(t[c].low>o||s>t[c].lim));let l=c,u=r;for(;(u=e.parent(u))!==l;)a.push(u);return{path:i.concat(a.reverse()),lca:l}}function pr(e){let t={},n=0;function r(i){let a=n;e.children(i).forEach(r),t[i]={low:a,lim:n++}}return e.children(_n).forEach(r),t}function mr(e){let t=Xt(e,`root`,{},`_root`),n=gr(e),r=Object.values(n),i=J(Math.max,r)-1,a=2*i+1;e.graph().nestingRoot=t,e.edges().forEach(t=>e.edge(t).minlen*=a);let o=_r(e)+1;e.children(_n).forEach(r=>{hr(e,t,a,o,i,n,r)}),e.graph().nodeRankFactor=a}function hr(e,t,n,r,i,a,o){let s=e.children(o);if(!s.length){o!==t&&e.setEdge(t,o,{weight:0,minlen:n});return}let c=rn(e,`_bt`),l=rn(e,`_bb`),u=e.node(o);e.setParent(c,o),u.borderTop=c,e.setParent(l,o),u.borderBottom=l,s.forEach(s=>{hr(e,t,n,r,i,a,s);let u=e.node(s),d=u.borderTop?u.borderTop:s,f=u.borderBottom?u.borderBottom:s,p=u.borderTop?r:2*r,m=d===f?i-(a[o]??0)+1:1;e.setEdge(c,d,{weight:p,minlen:m,nestingEdge:!0}),e.setEdge(f,l,{weight:p,minlen:m,nestingEdge:!0})}),e.parent(o)||e.setEdge(t,c,{weight:0,minlen:i+(a[o]??0)})}function gr(e){let t={};function n(r,i){let a=e.children(r);a&&a.length&&a.forEach(e=>n(e,i+1)),t[r]=i}return e.children(_n).forEach(e=>n(e,1)),t}function _r(e){return e.edges().reduce((t,n)=>t+e.edge(n).weight,0)}function vr(e){let t=e.graph();e.removeNode(t.nestingRoot),delete t.nestingRoot,e.edges().forEach(t=>{e.edge(t).nestingEdge&&e.removeEdge(t)})}var yr=br;function br(e){function t(n){let r=e.children(n),i=e.node(n);if(r.length&&r.forEach(t),i&&Object.hasOwn(i,`minRank`)){i.borderLeft=[],i.borderRight=[];for(let t=i.minRank,r=i.maxRank+1;t<r;++t)xr(e,`borderLeft`,`_bl`,n,i,t),xr(e,`borderRight`,`_br`,n,i,t)}}e.children(_n).forEach(t)}function xr(e,t,n,r,i,a){let o={width:0,height:0,rank:a,borderType:t},s=i[t][a-1],c=Xt(e,`border`,o,n);i[t][a]=c,e.setParent(c,r),s&&e.setEdge(s,c,{weight:1})}function Sr(e){let t=e.graph().rankdir?.toLowerCase();(t===`lr`||t===`rl`)&&wr(e)}function Cr(e){let t=e.graph().rankdir?.toLowerCase();(t===`bt`||t===`rl`)&&Er(e),(t===`lr`||t===`rl`)&&(Or(e),wr(e))}function wr(e){e.nodes().forEach(t=>Tr(e.node(t))),e.edges().forEach(t=>Tr(e.edge(t)))}function Tr(e){let t=e.width;e.width=e.height,e.height=t}function Er(e){e.nodes().forEach(t=>Dr(e.node(t))),e.edges().forEach(t=>{var n;let r=e.edge(t);(n=r.points)==null||n.forEach(Dr),Object.hasOwn(r,`y`)&&Dr(r)})}function Dr(e){e.y=-e.y}function Or(e){e.nodes().forEach(t=>kr(e.node(t))),e.edges().forEach(t=>{var n;let r=e.edge(t);(n=r.points)==null||n.forEach(kr),Object.hasOwn(r,`x`)&&kr(r)})}function kr(e){let t=e.x;e.x=e.y,e.y=t}function Ar(e,t=null){let n={},r=e.nodes().filter(t=>!e.children(t).length),i=r.map(t=>e.node(t).rank),a=pn(J(Math.max,i)+1).map(()=>[]);function o(t){if(n[t])return;n[t]=!0;let r=e.node(t);a[r.rank].push(t);let i=e.successors(t);i&&[...i].sort((e,t)=>s(e,t)).forEach(o)}r.sort((t,n)=>e.node(t).rank-e.node(n).rank).forEach(o);function s(n,r){return vn(t,e.node(n),e.node(r))}return a}function jr(e,t){let n=0;for(let r=1;r<t.length;++r)n+=Mr(e,t[r-1],t[r]);return n}function Mr(e,t,n){let r=gn(n,n.map((e,t)=>t)),i=t.flatMap(t=>{let n=e.outEdges(t);return n?n.map(t=>({pos:r[t.w],weight:e.edge(t).weight})).sort((e,t)=>e.pos-t.pos):[]}),a=1;for(;a<n.length;)a<<=1;let o=2*a-1;--a;let s=Array(o).fill(0),c=0;return i.forEach(e=>{let t=e.pos+a;s[t]+=e.weight;let n=0;for(;t>0;)t%2&&(n+=s[t+1]),t=t-1>>1,s[t]+=e.weight;c+=e.weight*n}),c}function Nr(e,t=[]){return t.map(t=>{let n=e.inEdges(t);if(!n||!n.length)return{v:t};{let r=n.reduce((t,n)=>{let r=e.edge(n),i=e.node(n.v);return{sum:t.sum+r.weight*i.order,weight:t.weight+r.weight}},{sum:0,weight:0});return{v:t,barycenter:r.sum/r.weight,weight:r.weight}}})}function Pr(e,t){let n={};return e.forEach((e,t)=>{let r={indegree:0,in:[],out:[],vs:[e.v],i:t};e.barycenter!==void 0&&(r.barycenter=e.barycenter,r.weight=e.weight),n[e.v]=r}),t.edges().forEach(e=>{let t=n[e.v],r=n[e.w];t!==void 0&&r!==void 0&&(r.indegree++,t.out.push(r))}),Fr(Object.values(n).filter(e=>!e.indegree))}function Fr(e){let t=[];function n(e){return t=>{t.merged||(t.barycenter===void 0||e.barycenter===void 0||t.barycenter>=e.barycenter)&&Ir(e,t)}}function r(t){return n=>{n.in.push(t),--n.indegree===0&&e.push(n)}}for(;e.length;){let i=e.pop();t.push(i),i.in.reverse().forEach(n(i)),i.out.forEach(r(i))}return t.filter(e=>!e.merged).map(e=>mn(e,[`vs`,`i`,`barycenter`,`weight`]))}function Ir(e,t){let n=0,r=0;e.weight&&(n+=e.barycenter*e.weight,r+=e.weight),t.weight&&(n+=t.barycenter*t.weight,r+=t.weight),e.vs=t.vs.concat(e.vs),e.barycenter=n/r,e.weight=r,e.i=Math.min(t.i,e.i),t.merged=!0}function Lr(e,t,n,r,i){let a={},o=null,s=null,c=i;typeof t==`boolean`?(c=t,a={}):t&&(a=t,o=n??null,s=r??null);let l=cn(e,e=>Object.hasOwn(e,`barycenter`)),u=l.lhs,d=l.rhs.sort((e,t)=>t.i-e.i),f=[],p=0,m=0,h=0;u.sort(zr(s,o,!!c));for(let[e,t]of Object.entries(a)){let n=u.findIndex(t=>t.vs[0]===e);u.splice(n+1,0,t)}h=Rr(f,d,h),u.forEach(e=>{h+=e.vs.length,f.push(e.vs),p+=e.barycenter*e.weight,m+=e.weight,h=Rr(f,d,h)});let g={vs:f.flat(1)};return m&&(g.barycenter=p/m,g.weight=m),g}function Rr(e,t,n){let r;for(;t.length&&(r=t[t.length-1]).i<=n;)t.pop(),e.push(r.vs),n++;return n}function zr(e,t,n){return(r,i)=>{if(r.barycenter<i.barycenter)return-1;if(r.barycenter>i.barycenter)return 1;if(e&&(typeof r.vs[0]==`string`||typeof i.vs[0]==`string`)){let n=vn(t,e.node(r.vs[0]),e.node(i.vs[0]));if(n!==0)return n}return n?i.i-r.i:r.i-i.i}}function Br(e,t,n,r,i){var a,o;let s=null,c=i;typeof r==`boolean`?(c=r,s=null):r!==void 0&&(s=r);let l=e.children(t),u=e.node(t),d=u?u.borderLeft:void 0,f=u?u.borderRight:void 0,p={};d&&(l=l.filter(e=>e!==d&&e!==f));let m=Nr(e,l);m.forEach(t=>{if(e.children(t.v).length){let{result:r}=Br(e,t.v,n,s,c);p[t.v]=r,Object.hasOwn(r,`barycenter`)&&Hr(t,r)}});let h=Pr(m,n);Vr(h,p);let g={},_=!1;for(let t=0;t<h.length;t++)for(let n=t+1;n<h.length;n++)if(h[t]&&h[n]&&(a=h[t])!=null&&a.barycenter&&(o=h[n])!=null&&o.barycenter&&h[t]?.barycenter===h[n].barycenter){let r=h[t]?.vs[0]??``,i=h[n]?.vs[0]??``,a=e.node(r),o=e.node(i);if(a.dummy===`edge`&&o.dummy===`edge`&&a.edgeObj?.v===o.edgeObj?.v&&a.edgeObj?.w===o.edgeObj?.w){if(a.edgeLabel.reversed){g[i]=h[t],h.splice(t,1),t--;break}g[r]=h[n],h.splice(n,1),n--}else _=!0}let v=Lr(h,g,s,e,c);if(d&&f){v.vs=[d,v.vs,f].flat(1);let t=e.predecessors(d);if(t&&t.length){let n=e.node(t[0]),r=e.predecessors(f),i=e.node(r[0]);Object.hasOwn(v,`barycenter`)||(v.barycenter=0,v.weight=0),v.barycenter=(v.barycenter*v.weight+n.order+i.order)/(v.weight+2),v.weight+=2}}return Object.defineProperty(v,"result",{value:v,enumerable:!1,configurable:!0,writable:!0}),Object.defineProperty(v,"usedBias",{value:_,enumerable:!1,configurable:!0,writable:!0}),v}function Vr(e,t){e.forEach(e=>{e.vs=e.vs.flatMap(e=>t[e]?t[e].vs:e)})}function Hr(e,t){e.barycenter===void 0?(e.barycenter=t.barycenter,e.weight=t.weight):(e.barycenter=(e.barycenter*e.weight+t.barycenter*t.weight)/(e.weight+t.weight),e.weight+=t.weight)}function Ur(e,t,n,r){r||=e.nodes();let i=Wr(e),a=new q({compound:!0}).setGraph({root:i}).setDefaultNodeLabel(t=>e.node(t));return r.forEach(r=>{let o=e.node(r),s=e.parent(r);if(o.rank===t||o.minRank<=t&&t<=o.maxRank){a.setNode(r),a.setParent(r,s||i);let c=e[n](r);c&&c.forEach(t=>{let n=t.v===r?t.w:t.v,i=a.edge(n,r),o=i===void 0?0:i.weight;a.setEdge(n,r,{weight:e.edge(t).weight+o})}),Object.hasOwn(o,`minRank`)&&a.setNode(r,{borderLeft:o.borderLeft[t],borderRight:o.borderRight[t]})}}),a}function Wr(e){let t;for(;e.hasNode(t=fn(`_root`)););return t}function Gr(e,t,n){let r={},i;n.forEach(n=>{let a=e.parent(n),o,s;for(;a;){if(o=e.parent(a),o?(s=r[o],r[o]=a):(s=i,i=a),s&&s!==a){t.setEdge(s,a);return}a=o}})}function Kr(e,t={},n=null){if(typeof t.customOrder==`function`){t.customOrder(e,Kr);return}let r=sn(e),i=qr(e,pn(1,r+1),`inEdges`),a=qr(e,pn(r-1,-1,-1),`outEdges`),o=Ar(e,n);if(Yr(e,o),t.disableOptimalOrderHeuristic)return;let s=1/0,c,l=t.constraints||[];for(let t=0,r=0;r<4;++t,++r){Jr(t%2?i:a,t%4>=2,l,n),o=en(e);let u=jr(e,o);u<s?(r=0,c=Object.assign({},o),s=u):u===s&&(c=structuredClone(o))}Yr(e,c)}function qr(e,t,n){let r=new Map,i=(e,t)=>{r.has(e)||r.set(e,[]),r.get(e).push(t)};for(let t of e.nodes()){let n=e.node(t);if(typeof n.rank==`number`&&i(n.rank,t),typeof n.minRank==`number`&&typeof n.maxRank==`number`)for(let e=n.minRank;e<=n.maxRank;e++)e!==n.rank&&i(e,t)}return t.map(function(t){return Ur(e,t,n,r.get(t)||[])})}function Jr(e,t,n,r){let i=!0,a=new q;e.forEach(function(e){n.forEach(e=>a.setEdge(e.left,e.right));let o=e.graph().root,{result:s,usedBias:c}=Br(e,o,a,r,i);t&&c&&(i=!i),s.vs.forEach((t,n)=>e.node(t).order=n),Gr(e,a,s.vs)})}function Yr(e,t){Object.values(t).forEach(t=>t.forEach((t,n)=>e.node(t).order=n))}function Xr(e,t){let n={};function r(t,r){let i=0,a=0,o=t.length,s=r[r.length-1];return r.forEach((t,c)=>{let l=Qr(e,t),u=l?e.node(l).order:o;(l||t===s)&&(r.slice(a,c+1).forEach(t=>{let r=e.predecessors(t);r&&r.forEach(r=>{let a=e.node(r),o=a.order;(o<i||u<o)&&!(a.dummy&&e.node(t).dummy)&&$r(n,r,t)})}),a=c+1,i=u)}),r}return t.length&&t.reduce(r),n}function Zr(e,t){let n={};function r(t,r,i,a,o){pn(r,i).forEach(r=>{let i=t[r];if(i!==void 0&&e.node(i).dummy){let t=e.predecessors(i);t&&t.forEach(t=>{if(t===void 0)return;let r=e.node(t);r.dummy&&(r.order<a||r.order>o)&&$r(n,t,i)})}})}function i(t,n){let i=-1,a=-1,o=0;return n.forEach((s,c)=>{if(e.node(s).dummy===`border`){let t=e.predecessors(s);if(t&&t.length){let s=t[0];if(s===void 0)return;a=e.node(s).order,r(n,o,c,i,a),o=c,i=a}}r(n,o,n.length,a,t.length)}),n}return t.length&&t.reduce(i),n}function Qr(e,t){if(e.node(t).dummy){let n=e.predecessors(t);if(n)return n.find(t=>e.node(t).dummy)}}function $r(e,t,n){if(t>n){let e=t;t=n,n=e}let r=e[t];r||(e[t]=r={}),r[n]=!0}function ei(e,t,n){if(t>n){let e=t;t=n,n=e}let r=e[t];return r!==void 0&&Object.hasOwn(r,n)}function ti(e,t,n,r,i){let a={},o={},s={};return t.forEach(e=>{e.forEach((e,t)=>{a[e]=e,o[e]=e,s[e]=t})}),t.forEach(t=>{let c=-1,l=-1,u=!1,d=t,f=t.findIndex(t=>i?.includes(t)||ui(t,e,i));f>0&&(d=[t[f],...t.slice(0,f),...t.slice(f+1)],u=!0),d.forEach(t=>{let d=r(t);if(d&&d.length){i!=null&&i.includes(t)&&(d=d.filter(t=>ui(t,e,i)));let r=d.sort((e,t)=>{let n=s[e],r=s[t];return(n===void 0?0:n)-(r===void 0?0:r)}),f=(r.length-1)/2;for(let e=Math.floor(f),i=Math.ceil(f);e<=i;++e){let i=r[e];if(i===void 0)continue;let d=s[i];if(d!==void 0&&o[t]===t&&c<d&&s[i]!==l&&!ei(n,t,i)){let e=a[i];e!==void 0&&(o[i]=t,o[t]=a[t]=e,c=d,u&&=(c=-1,l=s[i]??-1,!1))}}}})}),{root:a,align:o}}function ni(e,t,n,r,i=!1){let a={},o=ri(e,t,n,i),s=i?`borderLeft`:`borderRight`;function c(e,t){let n=o.nodes().slice(),r={},i=n.pop();for(;i;){if(r[i])e(i);else{r[i]=!0,n.push(i);for(let e of t(i))n.push(e)}i=n.pop()}}function l(e){let t=o.inEdges(e);t?a[e]=t.reduce((e,t)=>{let n=a[t.v]??0,r=o.edge(t);return Math.max(e,n+(r===void 0?0:r))},0):a[e]=0}function u(t){let n=o.outEdges(t),r=1/0;n&&(r=n.reduce((e,t)=>{let n=a[t.w],r=o.edge(t);return Math.min(e,(n===void 0?0:n)-(r===void 0?0:r))},1/0));let i=e.node(t);r!==1/0&&i.borderType!==s&&(a[t]=Math.max(a[t]===void 0?0:a[t],r))}function d(e){return o.predecessors(e)||[]}function f(e){return o.successors(e)||[]}return c(l,d),c(u,f),Object.keys(r).forEach(e=>{let t=n[e];t!==void 0&&(a[e]=a[t]??0)}),a}function ri(e,t,n,r){let i=new q,a=e.graph(),o=ci(a.nodesep,a.edgesep,r);return t.forEach(t=>{let r;t.forEach(t=>{let a=n[t];if(a!==void 0){if(i.setNode(a),r!==void 0){let s=n[r];if(s!==void 0){let n=i.edge(s,a);i.setEdge(s,a,Math.max(o(e,t,r),n||0))}}r=t}})}),i}function ii(e,t){return Object.values(t).reduce((t,n)=>{let r=-1/0,i=1/0;Object.entries(n).forEach(([t,n])=>{let a=li(e,t)/2;r=Math.max(n+a,r),i=Math.min(n-a,i)});let a=r-i;return a<t[0]&&(t=[a,n]),t},[1/0,null])[1]}function ai(e,t){let n=Object.values(t),r=J(Math.min,n),i=J(Math.max,n);[`u`,`d`].forEach(n=>{[`l`,`r`].forEach(a=>{let o=n+a,s=e[o];if(!s||s===t)return;let c=Object.values(s),l=r-J(Math.min,c);a!==`l`&&(l=i-J(Math.max,c)),l&&(e[o]=hn(s,e=>e+l))})})}function oi(e,t=void 0){let n=e.ul;return n?hn(n,(n,r)=>{if(t){let n=e[t.toLowerCase()];if(n&&n[r]!==void 0)return n[r]}let i=Object.values(e).map(e=>{let t=e[r];return t===void 0?0:t}).sort((e,t)=>e-t);return((i[1]??0)+(i[2]??0))/2}):{}}function si(e,t){let n=en(e),r=Object.assign(Xr(e,n),Zr(e,n)),i={},a;return[`u`,`d`].forEach(o=>{a=o===`u`?n:Object.values(n).reverse(),[`l`,`r`].forEach(n=>{n===`r`&&(a=a.map(e=>Object.values(e).reverse()));let s=ti(e,a,r,t=>(o===`u`?e.predecessors(t):e.successors(t))||[],t),c=ni(e,a,s.root,s.align,n===`r`);n===`r`&&(c=hn(c,e=>-e)),i[o+n]=c})}),ai(i,ii(e,i)),oi(i,e.graph().align)}function ci(e,t,n){return(r,i,a)=>{let o=r.node(i),s=r.node(a),c=0,l;if(c+=o.width/2,Object.hasOwn(o,`labelpos`))switch(o.labelpos.toLowerCase()){case`l`:l=-o.width/2;break;case`r`:l=o.width/2}if(l&&(c+=n?l:-l),l=void 0,c+=(o.dummy?t:e)/2,c+=(s.dummy?t:e)/2,c+=s.width/2,Object.hasOwn(s,`labelpos`))switch(s.labelpos.toLowerCase()){case`l`:l=s.width/2;break;case`r`:l=-s.width/2}return l&&(c+=n?l:-l),c}}function li(e,t){return e.node(t).width}function ui(e,t,n){if(!n)return!1;let r=t.node(e)?.edgeObj;if(!r||t.node(e).edgeLabel.reversed)return!1;let i=n.indexOf(r?.v),a=n.indexOf(r?.w);return i!==-1&&a!==-1&&i===(a+1)%n.length||i===(a-1)%n.length}function di(e,t){e=Qt(e),fi(e),Object.entries(si(e,t)).forEach(([t,n])=>e.node(t).x=n)}function fi(e){let t=en(e),n=e.graph(),r=n.ranksep,i=n.rankalign,a=0;t.forEach(t=>{let n=t.reduce((t,n)=>{let r=e.node(n).height??0;return t>r?t:r},0);t.forEach(t=>{let r=e.node(t);r.y=i===`top`?a+r.height/2:i===`bottom`?a+n-r.height/2:a+n/2}),a+=n+r})}var pi=new WeakMap;function mi(e,t={}){return gi(e,un,t),e}function hi(e,t,n){let r=t;for(;r!==void 0;){let t=e.parent(r);if(t===n)return r;r=t}}function gi(e,t,n){let r=e.nodes().filter(t=>e.children(t).length),i={};r.forEach(r=>{let a=e.node(r);if(a&&a.rankdir){let o=new q({multigraph:!0,compound:!0});o.setGraph({rankdir:a.rankdir});let s=e.children(r);s.forEach(t=>{let n={...e.node(t)};o.setNode(t,n);let i=e.parent(t);i&&i!==r&&s.includes(i)&&o.setParent(t,i)});let c=new Set;e.edges().forEach(t=>{let n=hi(e,t.v,r),i=hi(e,t.w,r);if(n&&i&&n!==i){let r=`${n}\0${i}`;c.has(r)||(c.add(r),o.setEdge(n,i,{...e.edge(t)}))}}),gi(o,t,n);let l=Di(o);_i(l,t,n,null),vi(o,l);let u=1/0,d=1/0,f=-1/0,p=-1/0;o.nodes().forEach(e=>{if(e===r)return;let t=o.node(e);t&&typeof t.x==`number`&&typeof t.y==`number`&&typeof t.width==`number`&&typeof t.height==`number`&&(u=Math.min(u,t.x-t.width/2),f=Math.max(f,t.x+t.width/2),d=Math.min(d,t.y-t.height/2),p=Math.max(p,t.y+t.height/2))}),(!isFinite(u)||!isFinite(d)||!isFinite(f)||!isFinite(p))&&(u=d=0,f=p=0);let m=f-u,h=p-d;i[r]={minX:u,minY:d,maxX:f,maxY:p,width:m,height:h,offsetX:u,offsetY:d},a._dagreClusterSubgraph=o}});let a=[],o=t=>{let n=[],r=(e.children(t)||[]).filter(e=>e!==t);for(;r.length>0;){let t=r.shift();n.push(t),(e.children(t)||[]).filter(e=>e!==t).forEach(e=>r.push(e))}return n},s=new Map;r.forEach(t=>{let n=e.node(t);n&&n.rankdir&&i[t]&&s.set(t,(e.children(t)||[]).filter(e=>e!==t))});let c=new Set([...s.values()].flat()),l=new Map;s.forEach((e,t)=>{c.has(t)||l.set(t,o(t))});let u=new Set([...l.values()].flat()),d=e=>{for(let[t,n]of l)if(n.includes(e))return t;return e},f=[];e.edges().forEach(t=>{(u.has(t.v)||u.has(t.w))&&f.push({edge:t,label:e.edge(t)})});let p=new Map;u.forEach(t=>{let n=e.parent(t);p.set(t,typeof n==`string`?n:void 0)}),l.forEach((t,n)=>{let r=e.node(n),o=[];t.forEach(t=>{let n=e.node(t);n&&(o.push({id:t,node:n,parent:p.get(t)}),e.removeNode(t))});let s=f.filter(({edge:e})=>t.includes(e.v)||t.includes(e.w)),c=i[n];r&&(a.push({clusterId:n,subgraph:r._dagreClusterSubgraph,bounds:c,children:t,removedNodes:o,removedEdges:s}),r.width=c.width,r.height=c.height)});let m=new Set;f.forEach(({edge:t,label:n})=>{let r=d(t.v),i=d(t.w);if(r!==i&&e.hasNode(r)&&e.hasNode(i)){let t=`${r}\0${i}`;m.has(t)||(m.add(t),e.setEdge(r,i,{...n,width:0,height:0}))}});let h=Di(e),g=_i(h,t,n,pi.get(e)??null);pi.set(e,g),vi(e,h),m.forEach(t=>{let n=t.indexOf(`\0`),r=t.slice(0,n),i=t.slice(n+1);e.hasEdge(r,i)&&e.removeEdge(r,i)}),a.forEach(({clusterId:t,subgraph:n,bounds:r,removedNodes:i,removedEdges:a})=>{let o=e.node(t),s=o?.x??0,c=o?.y??0,l=(r.minX+r.maxX)/2,u=(r.minY+r.maxY)/2;i.forEach(({id:t,node:n,parent:r})=>{e.setNode(t,n),r!==void 0&&e.setParent(t,r)}),a.forEach(({edge:t,label:n})=>{e.setEdge(t,n)}),n.nodes().forEach(r=>{if(r===t)return;let i=n.node(r),a=e.node(r);a&&i&&typeof i.x==`number`&&typeof i.y==`number`&&(a.x=s+(i.x-l),a.y=c+(i.y-u))}),delete o._dagreClusterSubgraph}),r.forEach(t=>{let n=e.node(t),r=i[t];if(n&&n.rankdir&&n._dagreClusterSubgraph&&r){let i=n._dagreClusterSubgraph,a=n.x??0,o=n.y??0,s=(r.minX+r.maxX)/2,c=(r.minY+r.maxY)/2;i.nodes().forEach(n=>{if(n===t)return;let r=i.node(n),l=e.node(n);if(l&&r&&typeof r.x==`number`&&typeof r.y==`number`){let e=r.x-s,t=r.y-c;l.x=a+e,l.y=o+t}}),delete n._dagreClusterSubgraph}})}function _i(e,t,n,r=null){var i,a;let o=n?.useDynamic!==!1,s=o&&(i=r?.graph)!=null?i:null,c=o&&(a=r?.rawNodes)!=null?a:null;t(` makeSpaceForEdgeLabels`,()=>Oi(e)),t(` removeSelfEdges`,()=>Li(e)),t(` acyclic`,()=>jn(e,s)),t(` nestingGraph.run`,()=>mr(e)),t(` rank`,()=>ar(Qt(e))),t(` injectEdgeLabelProxies`,()=>ki(e)),t(` removeEmptyRanks`,()=>nn(e)),t(` nestingGraph.cleanup`,()=>vr(e)),t(` normalizeRanks`,()=>tn(e)),t(` assignRankMinMax`,()=>Ai(e)),t(` removeEdgeLabelProxies`,()=>ji(e)),t(` normalize.run`,()=>Fn(e)),t(` parentDummyChains`,()=>ur(e)),t(` addBorderSegments`,()=>yr(e)),t(` order`,()=>Kr(e,n,c)),t(` insertSelfEdges`,()=>Ri(e)),t(` adjustCoordinateSystem`,()=>Sr(e)),t(` position`,()=>di(e,n.corePath)),t(` positionSelfEdges`,()=>zi(e));let l=JSON.parse(JSON.stringify(e._nodes));return t(` removeBorderNodes`,()=>Ii(e)),t(` normalize.undo`,()=>Ln(e)),t(` fixupEdgeLabelCoords`,()=>Pi(e)),t(` undoCoordinateSystem`,()=>Cr(e)),t(` translateGraph`,()=>Mi(e)),t(` assignNodeIntersects`,()=>Ni(e)),t(` reversePoints`,()=>Fi(e)),t(` acyclic.undo`,()=>Nn(e)),{graph:e,rawNodes:l}}function vi(e,t){e.nodes().forEach(n=>{let r=e.node(n),i=t.node(n);r&&(r.x=i.x,r.y=i.y,r.order=i.order,r.rank=i.rank,t.children(n).length&&(r.width=i.width,r.height=i.height))}),e.edges().forEach(n=>{let r=e.edge(n),i=t.edge(n);r.points=i.points,Object.hasOwn(i,`x`)&&(r.x=i.x,r.y=i.y)}),e.graph().width=t.graph().width,e.graph().height=t.graph().height}var yi=[`nodesep`,`edgesep`,`ranksep`,`marginx`,`marginy`],bi={ranksep:50,edgesep:20,nodesep:50,rankdir:`TB`,rankalign:`center`},xi=[`acyclicer`,`ranker`,`rankdir`,`align`,`rankalign`],Si=[`width`,`height`,`rank`],Ci={width:0,height:0},wi=[`minlen`,`weight`,`width`,`height`,`labeloffset`],Ti={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:`r`},Ei=[`labelpos`];function Di(e){let t=new q({multigraph:!0,compound:!0}),n=Vi(e.graph());return t.setGraph(Object.assign({},bi,Bi(n,yi),mn(n,xi))),e.nodes().forEach(n=>{let r=Bi(Vi(e.node(n)),Si);Object.keys(Ci).forEach(e=>{r[e]===void 0&&(r[e]=Ci[e])}),t.setNode(n,r);let i=e.parent(n);i!==void 0&&t.setParent(n,i)}),e.edges().forEach(n=>{let r=Vi(e.edge(n));t.setEdge(n,Object.assign({},Ti,Bi(r,wi),mn(r,Ei)))}),t}function Oi(e){let t=e.graph();t.ranksep/=2,e.edges().forEach(n=>{let r=e.edge(n);r.minlen*=2,(r.labelpos??`r`).toLowerCase()!==`c`&&(t.rankdir===`TB`||t.rankdir===`BT`?r.width+=r.labeloffset:r.height+=r.labeloffset)})}function ki(e){e.edges().forEach(t=>{let n=e.edge(t);if(n.width&&n.height){let n=e.node(t.v);Xt(e,`edge-proxy`,{rank:(e.node(t.w).rank-n.rank)/2+n.rank,e:t},`_ep`)}})}function Ai(e){let t=0;e.nodes().forEach(n=>{let r=e.node(n);r.borderTop&&(r.minRank=e.node(r.borderTop).rank,r.maxRank=e.node(r.borderBottom).rank,t=Math.max(t,r.maxRank))}),e.graph().maxRank=t}function ji(e){e.nodes().forEach(t=>{let n=e.node(t);if(n.dummy===`edge-proxy`){let r=n;e.edge(r.e).labelRank=n.rank,e.removeNode(t)}})}function Mi(e){let t=1/0,n=0,r=1/0,i=0,a=e.graph(),o=a.marginx||0,s=a.marginy||0;function c(e){let a=e.x,o=e.y,s=e.width,c=e.height;t=Math.min(t,a-s/2),n=Math.max(n,a+s/2),r=Math.min(r,o-c/2),i=Math.max(i,o+c/2)}e.nodes().forEach(t=>c(e.node(t))),e.edges().forEach(t=>{let n=e.edge(t);Object.hasOwn(n,`x`)&&c(n)}),t-=o,r-=s,e.nodes().forEach(n=>{let i=e.node(n);i.x-=t,i.y-=r}),e.edges().forEach(n=>{let i=e.edge(n);i.points.forEach(e=>{e.x-=t,e.y-=r}),Object.hasOwn(i,`x`)&&(i.x-=t),Object.hasOwn(i,`y`)&&(i.y-=r)}),a.width=n-t+o,a.height=i-r+s}function Ni(e){e.edges().forEach(t=>{if(t.v===t.w)return;let n=e.edge(t),r=e.node(t.v),i=e.node(t.w),a,o;n.points?(a=n.points[0],o=n.points[n.points.length-1]):(n.points=[],a=i,o=r),n.points.unshift($t(r,a)),n.points.push($t(i,o))})}function Pi(e){e.edges().forEach(t=>{let n=e.edge(t);if(Object.hasOwn(n,`x`))switch((n.labelpos===`l`||n.labelpos===`r`)&&(n.width-=n.labeloffset),n.labelpos){case`l`:n.x-=n.width/2+n.labeloffset;break;case`r`:n.x+=n.width/2+n.labeloffset}})}function Fi(e){e.edges().forEach(t=>{let n=e.edge(t);n.reversed&&n.points.reverse()})}function Ii(e){e.nodes().forEach(t=>{if(e.children(t).length){let n=e.node(t),r=e.node(n.borderTop),i=e.node(n.borderBottom),a=e.node(n.borderLeft[n.borderLeft.length-1]),o=e.node(n.borderRight[n.borderRight.length-1]);n.width=Math.abs(o.x-a.x),n.height=Math.abs(i.y-r.y),n.x=a.x+n.width/2,n.y=r.y+n.height/2}}),e.nodes().forEach(t=>{e.node(t).dummy===`border`&&e.removeNode(t)})}function Li(e){e.edges().forEach(t=>{if(t.v===t.w){let n=e.node(t.v);n.selfEdges||=[],n.selfEdges.push({e:t,label:e.edge(t)}),e.removeEdge(t)}})}function Ri(e){en(e).forEach(t=>{let n=0;t.forEach((t,r)=>{let i=e.node(t);typeof i.rank!=`number`&&(i.rank=0),i.order=r+n,(i.selfEdges||[]).forEach(t=>{Xt(e,`selfedge`,{width:t.label.width,height:t.label.height,rank:i.rank,order:r+ ++n,e:t.e,edgeLabel:t.label},`_se`),(!Array.isArray(t.label.points)||t.label.points.length!==7)&&(t.label.points=[{x:0,y:-10},{x:0,y:-10},{x:0,y:0},{x:0,y:10},{x:0,y:10},{x:0,y:0},{x:0,y:0}])}),delete i.selfEdges})})}function zi(e){e.nodes().forEach(t=>{let n=e.node(t),r=e=>typeof e==`number`&&isFinite(e);if(n.dummy===`selfedge`){let i=n,a=e.node(i.e.v),o=r(a?.x)?a.x:0,s=r(a?.y)?a.y:0,c=r(a?.width)?a.width:0,l=r(a?.height)?a.height:0,u=r(n.x)?n.x:o,d=r(n.y)?n.y:s,f=c/2,p=l/2;i.edgeLabel.points=[{x:u+f,y:d-p},{x:u+f,y:d-p},{x:u,y:d},{x:u-f,y:d+p},{x:u-f,y:d+p},{x:u,y:d},{x:u,y:d}],i.edgeLabel.x=u,i.edgeLabel.y=d,e.setEdge(i.e,i.edgeLabel),e.removeNode(t)}else n&&Array.isArray(n.selfEdges)&&n.selfEdges.forEach(e=>{if(!Array.isArray(e.label.points)||e.label.points.length!==7){let t=r(n.x)?n.x:0,i=r(n.y)?n.y:0,a=r(n.width)?n.width:0,o=r(n.height)?n.height:0,s=a/2,c=o/2;e.label.points=[{x:t+s,y:i-c},{x:t+s,y:i-c},{x:t,y:i},{x:t-s,y:i+c},{x:t-s,y:i+c},{x:t,y:i},{x:t,y:i}]}})})}function Bi(e,t){return hn(mn(e,t),Number)}function Vi(e){let t={};return e&&Object.entries(e).forEach(([e,n])=>{typeof e==`string`&&(e=e.toLowerCase()),t[e]=n}),t}function Hi(e){let t=en(e),n=new q({compound:!0,multigraph:!0}).setGraph({});return e.nodes().forEach(t=>{n.setNode(t,{label:t}),n.setParent(t,`layer`+e.node(t).rank)}),e.edges().forEach(e=>n.setEdge(e.v,e.w,{},e.name)),t.forEach((e,t)=>{let r=`layer`+t;n.setNode(r,{rank:`same`}),e.reduce((e,t)=>(n.setEdge(e,t,{style:`invis`}),t))}),n}var Ui={graphlib:dt,version:yn,layout:mi,debug:Hi,util:{time:ln,notime:un}};function Wi(e,t){let n=t.steps.map(e=>e.type===`agent`?`${e.id}:${e.model??``}:${e.tools.join(`+`)}:${e.output.format}`:e.type===`generate`?`${e.id}:${e.asset}:${e.model??``}:${e.options?.duration??``}`:e.id).join(`|`);return l({queryKey:[`estimate`,e,n],queryFn:()=>d.get(`/api/studio/wizards/${e}/estimate`),staleTime:3e4,refetchOnMount:`always`})}var Gi=e=>e<10?e.toLocaleString(void 0,{maximumFractionDigits:1}):Math.round(e).toLocaleString();function Ki({estimate:e,stepId:t}){let n=e?.available?e.steps[t]:void 0;return n?(0,K.jsxs)(`p`,{className:`text-[12px] text-ink-3 tabular-nums`,children:[W(`estimate.step`,{n:Gi(n.credits),high:Gi(n.high)}),` · `,n.measured?W(`estimate.measured`):W(`estimate.formula`)]}):null}function qi({model:e,effort:t,onChange:n}){let r=W(`class.effortAuto`);return(0,K.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,K.jsx)(P,{children:W(`class.label`)}),(0,K.jsx)(U,{value:e??`high`,onChange:e=>n({model:e,effort:t}),options:_e.map(e=>({value:e,label:W(`class.${e}`)}))}),(0,K.jsx)(`p`,{className:`text-[12px] text-ink-3`,children:W(`class.${e??`high`}.hint`)}),(0,K.jsx)(P,{children:W(`class.effort`)}),(0,K.jsx)(I,{value:t?W(`class.effort.${t}`):r,options:[r,...A.map(e=>W(`class.effort.${e}`))],onChange:t=>n({model:e,effort:A.find(e=>W(`class.effort.${e}`)===t)})})]})}var Ji=280,Yi=92;function Xi({data:e}){let{step:t,selected:n,issue:r,active:i,pulse:a,cost:o,passed:s}=e,c=ne(t);return(0,K.jsxs)(`div`,{className:F(`relative w-[280px] cursor-pointer rounded-xl bg-card px-4 py-3 text-left shadow-soft ring-1 transition`,n?`shadow-elevated ring-2 ring-ember`:i?`ring-2 ring-moss`:a?`ring-2 ring-ember/60`:`ring-border-soft hover:shadow-elevated`),children:[i?(0,K.jsx)(`span`,{className:`-top-1 -right-1 absolute size-3 animate-breathe rounded-full bg-moss`}):a?(0,K.jsx)(`span`,{className:`-top-1 -right-1 absolute size-3 animate-breathe rounded-full bg-ember`}):null,(0,K.jsx)(Pe,{type:`target`,position:Ae.Top}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(`span`,{className:F(`inline-flex size-6 items-center justify-center rounded-md`,ae[t.type]),children:(0,K.jsx)(c,{className:`size-3.5`})}),(0,K.jsx)(`span`,{className:`font-medium text-[11px] text-ink-3 uppercase tracking-[0.07em]`,children:E(t)}),r?(0,K.jsx)(Ue,{className:`ml-auto size-4 text-rose`}):s&&!i?(0,K.jsx)(oe,{className:`ml-auto size-4 text-moss`}):o===null?null:(0,K.jsxs)(`span`,{className:`ml-auto text-[11px] text-ink-3 tabular-nums`,children:[`≈`,` `,o<10?o.toLocaleString(void 0,{maximumFractionDigits:1}):Math.round(o),` `,`cr`]})]}),(0,K.jsx)(`div`,{className:`mt-1.5 truncate font-display font-semibold text-[15px] text-ink`,children:t.title}),(0,K.jsx)(`div`,{className:`truncate text-[12px] text-ink-3`,children:re(t)||`\xA0`}),(0,K.jsx)(Pe,{type:`source`,position:Ae.Bottom})]})}function Zi({data:e}){return(0,K.jsxs)(`div`,{className:F(`flex w-[280px] cursor-pointer items-center gap-3 rounded-full bg-paper-2 py-1.5 pr-5 pl-2 transition`,e.selected?`ring-2 ring-ember`:`hover:bg-paper-3`),children:[(0,K.jsx)(c,{kind:e.avatar,size:40,interactive:!1}),(0,K.jsx)(`span`,{className:`truncate font-display font-semibold text-[15px]`,children:e.title}),(0,K.jsx)(Pe,{type:`source`,position:Ae.Bottom})]})}function Qi(e){let{data:t,sourceX:n,sourceY:r,targetX:i,targetY:a,sourcePosition:o,targetPosition:s}=e,c={label:e.label,labelStyle:e.labelStyle,labelBgStyle:e.labelBgStyle,labelBgPadding:e.labelBgPadding,labelBgBorderRadius:e.labelBgBorderRadius,style:e.style,markerEnd:e.markerEnd};if(!t?.points.length){let[e,t,l]=Me({sourceX:n,sourceY:r,targetX:i,targetY:a,sourcePosition:o,targetPosition:s});return(0,K.jsx)(Ie,{path:e,labelX:t,labelY:l,...c})}let l=[{x:n,y:r},...t.points,{x:i,y:a}],u=l.map((e,t)=>{let n=l[t-1];if(!n)return`M ${e.x} ${e.y}`;let r=(n.y+e.y)/2;return`C ${n.x} ${r} ${e.x} ${r} ${e.x} ${e.y}`}).join(` `);return(0,K.jsx)(Ie,{path:u,labelX:t.labelX,labelY:t.labelY,...c})}var $i={step:Xi,start:Zi},ea={branch:Qi},ta=34,na={};function ra(e){let t=Array.isArray(e.when.value)?e.when.value.join(` / `):String(e.when.value??``);switch(e.when.op){case`equals`:return`${e.when.field} = ${t}`;case`notEquals`:return`${e.when.field} ≠ ${t}`;case`in`:return`${e.when.field} ∈ ${t}`;case`notEmpty`:return W(`editor.whenFilled`,{field:e.when.field});case`empty`:return W(`editor.whenEmpty`,{field:e.when.field})}}function ia(e,t,n,r,i,a,o){let s=new Ui.graphlib.Graph;s.setGraph({rankdir:`TB`,nodesep:48,ranksep:46,marginx:20,marginy:20}),s.setDefaultEdgeLabel(()=>({})),s.setNode(`__start`,{width:Ji,height:52});for(let t of e.steps)s.setNode(t.id,{width:Ji,height:Yi});let c=[],l={markerEnd:{type:Fe.ArrowClosed,width:14,height:14,color:`var(--ink-4)`}};e.steps[0]&&(s.setEdge(`__start`,e.steps[0].id),c.push({id:`e-start`,source:`__start`,target:e.steps[0].id,...l})),e.steps.forEach((t,n)=>{let r=e.steps[n+1],i=new Map;for(let n of t.next??[])n.goto!==`end`&&e.steps.some(e=>e.id===n.goto)&&i.set(n.goto,[...i.get(n.goto)??[],ra(n)]);for(let[e,n]of i){let r=n.join(` · `),i=r.length>ta?`${r.slice(0,33)}…`:r;s.setEdge(t.id,e,{width:i.length*6.2+16,height:22,labelpos:`c`}),c.push({id:`b-${t.id}-${e}`,type:`branch`,source:t.id,target:e,label:i,labelStyle:{fontSize:11,fill:`var(--ink-2)`},labelBgStyle:{fill:`var(--paper-2)`},labelBgPadding:[6,3],labelBgBorderRadius:8,style:{strokeDasharray:`5 4`},...l})}r&&t.type!==`result`&&(s.hasEdge(t.id,r.id)||s.setEdge(t.id,r.id),c.push({id:`n-${t.id}`,source:t.id,target:r.id,...t.next?.length?{label:W(`editor.otherwise`),labelStyle:{fontSize:11,fill:`var(--ink-3)`},labelBgStyle:{fill:`var(--background)`}}:{},...l}))}),Ui.layout(s);for(let e of c){if(e.type!==`branch`)continue;let t=s.edge(e.source,e.target),n=(t.points??[]).slice(1,-1);n.length&&t.x!==void 0&&t.y!==void 0&&(e.data={points:n,labelX:t.x,labelY:t.y})}return{nodes:[{id:`__start`,type:`start`,position:{x:s.node(`__start`).x-Ji/2,y:s.node(`__start`).y-26},data:{title:e.title,avatar:e.avatar,selected:t===`__wizard`},draggable:!1},...e.steps.map((e,c)=>{let l=s.node(e.id);return{id:e.id,type:`step`,position:{x:l.x-Ji/2,y:l.y-Yi/2},data:{step:e,selected:t===e.id,issue:n.has(e.id),index:c,active:r===e.id,pulse:i.includes(e.id),cost:a[e.id]?.credits??null,passed:o.has(e.id)},draggable:!1}})],edges:c}}function aa(){let e=Ne(),t=`inline-flex size-8 items-center justify-center rounded-full text-ink-3 hover:bg-accent hover:text-ink`;return(0,K.jsxs)(`div`,{className:`absolute bottom-4 left-4 z-10 flex items-center gap-0.5 rounded-full bg-card p-1 shadow-soft ring-1 ring-border-soft`,children:[(0,K.jsx)(`button`,{type:`button`,className:t,onClick:()=>e.zoomOut(),"aria-label":`Zoom out`,children:(0,K.jsx)($e,{className:`size-4`})}),(0,K.jsx)(`button`,{type:`button`,className:t,onClick:()=>e.fitView({padding:.2,duration:300}),"aria-label":`Fit`,children:(0,K.jsx)(rt,{className:`size-4`})}),(0,K.jsx)(`button`,{type:`button`,className:t,onClick:()=>e.zoomIn(),"aria-label":`Zoom in`,children:(0,K.jsx)(D,{className:`size-4`})})]})}var oa=.8,sa=new Set;function ca({def:e,selected:t,onSelect:n,issueSteps:r,activeStep:i,pulse:a,costs:o=na,passed:s=sa,minFitZoom:c=oa,fitKey:l}){let{nodes:u,edges:d}=(0,G.useMemo)(()=>ia(e,t,r,i,a??[],o,s),[e,t,r,i,a,o,s]),f=Ne(),p=(0,G.useRef)(null),m=e.steps.map(e=>e.id).join(`|`);return(0,G.useEffect)(()=>{let e=requestAnimationFrame(()=>{let e=p.current;if(!e||!u.length)return;let t=u.map(e=>e.position.x),n=u.map(e=>e.position.y),r={x:Math.min(...t),y:Math.min(...n),width:Math.max(...t)+Ji-Math.min(...t),height:Math.max(...n)+Yi-Math.min(...n)},i=Math.min(e.clientWidth/(r.width*1.2),e.clientHeight/(r.height*1.15),1),a=Math.max(i,c),o=(e.clientWidth-r.width*a)/2-r.x*a,s=i>=c?(e.clientHeight-r.height*a)/2-r.y*a:24-r.y*a;f.setViewport({x:o,y:s,zoom:a},{duration:400})});return()=>cancelAnimationFrame(e)},[m,l,f]),(0,K.jsx)(`div`,{ref:p,className:`h-full w-full`,children:(0,K.jsx)(ke,{nodes:u,edges:d,nodeTypes:$i,edgeTypes:ea,onNodeClick:(e,t)=>n(t.id===`__start`?`__wizard`:t.id),onPaneClick:()=>n(null),nodesConnectable:!1,nodesDraggable:!1,elementsSelectable:!1,panOnScroll:!0,zoomOnScroll:!1,zoomOnPinch:!0,minZoom:.3,maxZoom:1.4,proOptions:{hideAttribution:!0},children:(0,K.jsx)(aa,{})})})}function la(e){return(0,K.jsx)(je,{children:(0,K.jsx)(ca,{...e})})}function ua({wizardId:e,...t}){let n=Wi(e,t.def);return(0,K.jsx)(la,{...t,costs:n.data?.available?n.data.steps:na})}var da={text:`Kurzer Text`,textarea:`Langer Text`,number:`Zahl`,select:`Auswahl`,multiselect:`Mehrfachauswahl`,date:`Datum`,email:`E-Mail`,url:`Link`,toggle:`Ja/Nein`,color:`Farbe`,image:`Bild-Upload`,file:`Datei-Upload`,items:`Positionen (Tabelle)`,connection:`Konto verbinden`,list:`Gespeicherte Liste`,location:`Standort`,audio:`Sprachnotiz`,signature:`Unterschrift`};function fa(e,t){let n=t===`image`||t===`file`;return{...e,kind:t,multiple:n?e.multiple:void 0,camera:t===`file`?e.camera:void 0,video:t===`file`?e.video:void 0,scan:t===`text`?e.scan:void 0}}var pa=(0,G.createContext)(!1);function ma({className:e,children:t}){return(0,G.useContext)(pa)?(0,K.jsx)(`fieldset`,{disabled:!0,className:F(`min-w-0`,e),children:t}):(0,K.jsx)(`div`,{className:e,children:t})}function X({title:e,children:t,loose:n}){let r=`flex flex-col gap-4`;return(0,K.jsxs)(`div`,{className:`border-border-soft border-t px-5 py-5 first:border-t-0`,children:[e?(0,K.jsx)(`h4`,{className:`mb-3 font-medium text-[12px] text-ink-3 uppercase tracking-[0.07em]`,children:e}):null,n?(0,K.jsx)(`div`,{className:r,children:t}):(0,K.jsx)(ma,{className:r,children:t})]})}function ha(e,t){let n=new Set([...e.steps.map(e=>e.id),...e.steps.flatMap(e=>e.type===`page`?e.fields.map(e=>e.id):[])]),r=1,i=t;for(;n.has(i);)r+=1,i=`${t}${r}`;return i}function ga({def:e,field:t,onChange:n,onRemove:r,onMove:i}){let[a,o]=(0,G.useState)(!1);return(0,K.jsxs)(`div`,{className:`rounded-lg bg-paper ring-1 ring-border-soft`,children:[(0,K.jsxs)(`button`,{type:`button`,onClick:()=>o(e=>!e),className:`flex w-full items-center gap-2 px-3 py-2.5 text-left`,children:[(0,K.jsxs)(`span`,{className:`min-w-0 flex-1 truncate text-[14px]`,children:[t.label,t.required?(0,K.jsx)(`span`,{className:`ml-1 text-ember`,children:`*`}):null]}),(0,K.jsx)(`span`,{className:`text-[12px] text-ink-4`,children:da[t.kind]}),(0,K.jsx)(se,{className:F(`size-4 text-ink-4 transition`,a&&`rotate-180`)})]}),a?(0,K.jsxs)(ma,{className:`flex flex-col gap-3 border-border-soft border-t px-3 py-3`,children:[(0,K.jsx)(V,{value:t.label,onChange:e=>n({...t,label:e.target.value})}),(0,K.jsx)(U,{value:t.kind,onChange:e=>n(fa(t,e)),options:ge.filter(e=>e!==`items`||t.kind===`items`).map(e=>({value:e,label:da[e]}))}),t.kind===`select`||t.kind===`multiselect`?(0,K.jsx)(V,{placeholder:`Option A, Option B, Option C`,value:(t.options??[]).join(`, `),onChange:e=>n({...t,options:e.target.value.split(`,`).map(e=>e.trim()).filter(Boolean)})}):null,t.kind===`connection`?(0,K.jsx)(U,{value:t.connection??``,placeholder:`Welches Konto?`,onChange:e=>n({...t,connection:e}),options:(e.connections??[]).map(e=>({value:e.id,label:e.title??e.id}))}):null,t.kind===`list`?(0,K.jsx)(U,{value:t.list??``,placeholder:`Welche Liste?`,onChange:e=>n({...t,list:e}),options:(e.lists??[]).map(e=>({value:e.id,label:e.title}))}):null,t.kind===`image`||t.kind===`file`?(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsx)(`span`,{className:`text-[13px] text-ink-2`,children:`Mehrere Dateien`}),(0,K.jsx)(z,{checked:!!t.multiple,onChange:e=>n({...t,multiple:e||void 0,...e?{}:{min:void 0,max:void 0}})})]}):null,(t.kind===`image`||t.kind===`file`)&&t.multiple?(0,K.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,K.jsx)(`span`,{className:`text-[13px] text-ink-2`,children:`Wie viele?`}),(0,K.jsx)(`div`,{className:`flex items-center gap-1.5`,children:[`min`,`max`].map(e=>(0,K.jsx)(V,{type:`number`,min:1,max:30,"aria-label":e===`min`?`Mindestens`:`Höchstens`,placeholder:e===`min`?`min.`:`max.`,value:t[e]??``,onChange:r=>{let i=Math.round(Number(r.target.value));n({...t,[e]:r.target.value&&i>=1?Math.min(i,30):void 0})},className:`h-8 w-16 text-right`},e))})]}):null,t.kind===`file`?(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsx)(`span`,{className:`text-[13px] text-ink-2`,children:`Auch mit der Kamera aufnehmen`}),(0,K.jsx)(z,{checked:!!t.camera,onChange:e=>n({...t,camera:e||void 0})})]}):null,t.kind===`file`?(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsx)(`span`,{className:`text-[13px] text-ink-2`,children:`Kamera nimmt auch kurze Videos auf`}),(0,K.jsx)(z,{checked:!!t.video,onChange:e=>n({...t,video:e||void 0})})]}):null,t.kind===`text`?(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsx)(`span`,{className:`text-[13px] text-ink-2`,children:`QR- oder Barcode scannen`}),(0,K.jsx)(z,{checked:!!t.scan,onChange:e=>n({...t,scan:e||void 0})})]}):null,[`text`,`textarea`,`number`,`email`,`url`,`location`].includes(t.kind)?(0,K.jsx)(V,{placeholder:`Platzhalter`,value:t.placeholder??``,onChange:e=>n({...t,placeholder:e.target.value||void 0})}):null,(0,K.jsx)(V,{placeholder:`Hilfetext`,value:t.help??``,onChange:e=>n({...t,help:e.target.value||void 0})}),(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsx)(`span`,{className:`text-[13px] text-ink-2`,children:W(`run.required`)}),(0,K.jsx)(z,{checked:!!t.required,onChange:e=>n({...t,required:e})})]}),(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsx)(`span`,{className:`font-mono text-[11px] text-ink-4`,children:`{{${t.id}}}`}),(0,K.jsxs)(`div`,{className:`flex`,children:[(0,K.jsx)(R,{label:W(`editor.moveUp`),onClick:()=>i(-1),className:`size-8`,children:(0,K.jsx)(C,{className:`size-3.5`})}),(0,K.jsx)(R,{label:W(`editor.moveDown`),onClick:()=>i(1),className:`size-8`,children:(0,K.jsx)(b,{className:`size-3.5`})}),(0,K.jsx)(R,{label:`Entfernen`,onClick:r,className:`size-8 hover:text-rose`,children:(0,K.jsx)(T,{className:`size-3.5`})})]})]})]}):null]})}var _a=[{label:`16:9`,width:1280,height:720},{label:`1:1`,width:1080,height:1080},{label:`4:5`,width:1080,height:1350},{label:`9:16`,width:1080,height:1920}];function va(e,t){let n=[];for(let r of e.steps.slice(0,t))r.type===`page`?n.push(...r.fields.map(e=>e.id)):r.type===`agent`?n.push(`steps.${r.id}`,...(r.output.fields??[]).map(e=>`steps.${r.id}.${e.id}`)):(r.type===`generate`||r.type===`widget`)&&n.push(`steps.${r.id}`);return[...n,`brand.name`,`today`]}function ya({def:e,step:t,set:n,files:r,wizardId:i}){let a=r.filter(e=>e.mime===`text/html`),o=r.filter(e=>e.mime===`application/json`),c=t.size??_a[0],l=va(e,e.steps.indexOf(t)),u=Object.entries(t.data),d=e=>n({...t,data:Object.fromEntries(e)}),f=[r.find(e=>e.path===t.entry)?.hash.slice(0,8),r.find(e=>e.path===t.sample)?.hash.slice(0,8),c.width,c.height].join(`-`),p=r.some(e=>e.path===t.entry);return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(X,{title:`Vorschau mit Beispieldaten`,children:p?(0,K.jsx)(w,{src:s(`/api/studio/wizards/${i}/widgets/${t.id}/preview?v=${f}`),page:c.width,height:c.height,fit:!0}):(0,K.jsx)(`p`,{className:`text-[13px] text-ink-3`,children:`Das Widget ist noch nicht gebaut. Bitte im Gespräch darum – oder lade eine HTML-Datei unter „Dateien“ hoch.`})}),(0,K.jsxs)(X,{title:`Widget`,children:[(0,K.jsx)(P,{children:`HTML-Datei`}),(0,K.jsx)(U,{value:t.entry,onChange:e=>n({...t,entry:e}),options:(a.some(e=>e.path===t.entry)?a:[{path:t.entry},...a]).map(e=>({value:e.path,label:e.path}))}),(0,K.jsx)(P,{children:`Beispieldaten`}),(0,K.jsx)(U,{value:t.sample??``,onChange:e=>n({...t,sample:e||void 0}),options:[{value:``,label:`keine`},...o.map(e=>({value:e.path,label:e.path}))]}),(0,K.jsx)(P,{children:`Größe`}),(0,K.jsx)(I,{value:_a.find(e=>e.width===c.width&&e.height===c.height)?.label??``,options:_a.map(e=>e.label),onChange:e=>{let r=_a.find(t=>t.label===e);r&&n({...t,size:{width:r.width,height:r.height}})}})]}),(0,K.jsxs)(X,{title:`Daten für das Widget`,children:[(0,K.jsx)(`datalist`,{id:`sources-${t.id}`,children:l.map(e=>(0,K.jsx)(`option`,{value:e},e))}),u.map(([e,n],r)=>(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(V,{value:e,className:`w-28 font-mono text-[12px]`,onChange:e=>d(u.map((t,n)=>n===r?[e.target.value,t[1]]:t))}),(0,K.jsx)(`span`,{className:`text-ink-4`,children:`←`}),(0,K.jsx)(V,{value:n,list:`sources-${t.id}`,className:`flex-1 font-mono text-[12px]`,onChange:e=>d(u.map((t,n)=>n===r?[t[0],e.target.value]:t))}),(0,K.jsx)(R,{label:W(`editor.deleteStep`),onClick:()=>d(u.filter((e,t)=>t!==r)),children:(0,K.jsx)(T,{className:`size-4`})})]},r)),(0,K.jsxs)(`button`,{type:`button`,onClick:()=>d([...u,[`wert${u.length+1}`,l[0]??`today`]]),className:`inline-flex h-8 items-center gap-1 self-start rounded-full px-2.5 text-[12px] text-ink-2 hover:bg-accent`,children:[(0,K.jsx)(D,{className:`size-3.5`}),` Wert`]})]})]})}function ba({def:e,step:t,set:n,mcpServers:r,files:i,wizardId:a}){let o=e.steps.indexOf(t),s=(0,G.useContext)(pa),c=we().plugins.flatMap(e=>e.tools),l=e.steps.slice(0,o).filter(e=>e.type===`agent`||e.type===`generate`||e.type===`widget`);switch(t.type){case`widget`:return(0,K.jsx)(ya,{def:e,step:t,set:n,files:i,wizardId:a});case`page`:return(0,K.jsxs)(X,{title:`Fragen`,loose:!0,children:[(0,K.jsx)(`div`,{className:`flex flex-col gap-2`,children:t.fields.map((r,i)=>(0,K.jsx)(ga,{def:e,field:r,onChange:e=>n({...t,fields:t.fields.map((t,n)=>n===i?e:t)}),onRemove:()=>t.fields.length>1&&n({...t,fields:t.fields.filter((e,t)=>t!==i)}),onMove:e=>{let r=i+e;if(r<0||r>=t.fields.length)return;let a=[...t.fields];[a[i],a[r]]=[a[r],a[i]],n({...t,fields:a})}},r.id))}),s?null:(0,K.jsxs)(`button`,{type:`button`,onClick:()=>n({...t,fields:[...t.fields,{id:ha(e,`frage`),label:`Neue Frage`,kind:`text`}]}),className:`inline-flex h-9 items-center gap-1.5 self-start rounded-full px-3 text-[13px] text-ink-2 hover:bg-accent`,children:[(0,K.jsx)(D,{className:`size-4`}),` Frage hinzufügen`]})]});case`agent`:return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(X,{title:`Auftrag`,children:[(0,K.jsx)(L,{value:t.instructions,minRows:6,maxRows:20,onChange:e=>n({...t,instructions:e.target.value}),className:`text-[14px]`}),(0,K.jsxs)(`p`,{className:`text-[12px] text-ink-4`,children:[`Antworten einsetzen mit `,(0,K.jsx)(`code`,{className:`font-mono`,children:`{{feld}}`}),`, frühere Ergebnisse mit `,(0,K.jsx)(`code`,{className:`font-mono`,children:`{{steps.id}}`}),`.`]})]}),(0,K.jsxs)(X,{title:`Werkzeuge`,children:[(0,K.jsx)(I,{multi:!0,value:t.tools,options:[...new Set([...M,...c.map(e=>e.id),...t.tools])],onChange:e=>n({...t,tools:e})}),(0,K.jsxs)(`div`,{className:`-mt-2 flex flex-wrap gap-x-3 text-[12px] text-ink-4`,children:[M.map(e=>(0,K.jsxs)(`span`,{children:[e,` = `,te(e)]},e)),c.map(e=>(0,K.jsxs)(`span`,{children:[e.id,` = `,e.title]},e.id))]}),e.connections?.length?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(P,{hint:`Konten, die die Person im Durchlauf verbindet. Der Schritt liest darin, er schreibt nie.`,children:`Konten der Person`}),(0,K.jsx)(I,{multi:!0,value:t.connections??[],options:e.connections.map(e=>e.id),onChange:e=>n({...t,connections:e.length?e:void 0})})]}):null,r.length?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(P,{hint:`Nur freigegebene Systeme sind in diesem Schritt erreichbar.`,children:`Verbundene Systeme`}),(0,K.jsx)(I,{multi:!0,value:t.mcp??[],options:r.map(e=>e.id),onChange:e=>n({...t,mcp:e.length?e:void 0})})]}):null]}),(0,K.jsxs)(X,{title:`Ergebnis`,children:[(0,K.jsx)(I,{value:t.output.format,options:[`text`,`markdown`,`json`],onChange:e=>n({...t,output:{...t.output,format:e}})}),(0,K.jsx)(qi,{model:t.model,effort:t.effort,onChange:e=>n({...t,...e})}),(0,K.jsx)(V,{placeholder:`Text während der Arbeit, z. B. „Recherchiert …“`,value:t.working??``,onChange:e=>n({...t,working:e.target.value||void 0})})]})]});case`generate`:return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(X,{title:`Was wird erzeugt?`,children:[(0,K.jsx)(I,{value:t.asset,options:[`image`,`video`,`voice`,`document`,`dashboard`],onChange:e=>n({...t,asset:e})}),(0,K.jsx)(L,{value:t.prompt,minRows:5,maxRows:18,onChange:e=>n({...t,prompt:e.target.value}),className:`text-[14px]`})]}),(0,K.jsxs)(X,{title:`Optionen`,children:[t.asset===`document`||t.asset===`dashboard`?(0,K.jsx)(qi,{model:t.model,effort:t.effort,onChange:e=>n({...t,...e})}):null,t.asset===`image`||t.asset===`video`?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(P,{children:`Format`}),(0,K.jsx)(I,{value:t.options?.aspectRatio??``,options:[...N],onChange:e=>n({...t,options:{...t.options,aspectRatio:e}})}),(0,K.jsx)(V,{placeholder:`Stil, z. B. „helle Fotografie, minimalistisch“`,value:t.options?.style??``,onChange:e=>n({...t,options:{...t.options,style:e.target.value||void 0}})})]}):null,t.asset===`video`?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(P,{children:`Länge (Sekunden)`}),(0,K.jsx)(I,{value:String(t.options?.duration??8),options:[`4`,`6`,`8`,`10`],onChange:e=>n({...t,options:{...t.options,duration:Number(e)}})}),(0,K.jsx)(P,{children:`Auflösung`}),(0,K.jsx)(I,{value:t.options?.resolution??`720p`,options:[...he],onChange:e=>n({...t,options:{...t.options,resolution:e}})})]}):null,t.asset===`document`?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(P,{children:`Vorlage`}),(0,K.jsx)(U,{value:t.options?.template??`free`,onChange:e=>n({...t,options:{...t.options,template:e}}),options:[`free`,`invoice`,`offer`,`briefing`,`letter`,`report`].map(e=>({value:e,label:e}))})]}):null]})]});case`review`:return(0,K.jsxs)(X,{title:`Was wird gezeigt?`,children:[(0,K.jsx)(I,{multi:!0,value:t.show,options:l.map(e=>e.id),onChange:e=>e.length&&n({...t,show:e})}),(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsx)(`span`,{className:`text-[13px] text-ink-2`,children:`Text direkt bearbeitbar`}),(0,K.jsx)(z,{checked:!!t.edit,onChange:e=>n({...t,edit:e})})]}),(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsx)(`span`,{className:`text-[13px] text-ink-2`,children:`Neue Variante anfordern`}),(0,K.jsx)(z,{checked:!!t.regenerate,onChange:e=>n({...t,regenerate:e})})]})]});case`result`:return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(X,{title:`Abschluss`,children:(0,K.jsx)(L,{minRows:2,placeholder:`Nachricht am Ende`,value:t.message??``,onChange:e=>n({...t,message:e.target.value||void 0})})}),(0,K.jsx)(X,{title:`Downloads`,children:l.map(e=>{let r=t.deliverables.find(t=>t.from===e.id),i=k(e);return(0,K.jsxs)(`div`,{className:`rounded-lg bg-paper p-3 ring-1 ring-border-soft`,children:[(0,K.jsxs)(`div`,{className:`mb-2 flex items-center justify-between`,children:[(0,K.jsx)(`span`,{className:`truncate text-[14px]`,children:e.title}),(0,K.jsx)(z,{checked:!!r,onChange:r=>n({...t,deliverables:r?[...t.deliverables,{from:e.id,label:e.title,formats:[i[0]]}]:t.deliverables.filter(t=>t.from!==e.id)})})]}),r?(0,K.jsx)(I,{multi:!0,value:r.formats,options:i,onChange:r=>r.length&&n({...t,deliverables:t.deliverables.map(t=>t.from===e.id?{...t,formats:r}:t)})}):null]},e.id)})})]})}}function xa({def:e,update:t}){return(0,K.jsxs)(`div`,{children:[(0,K.jsxs)(X,{children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(P,{children:`Titel`}),(0,K.jsx)(V,{value:e.title,onChange:n=>t({...e,title:n.target.value})})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(P,{children:`Beschreibung`}),(0,K.jsx)(L,{minRows:2,value:e.description,onChange:n=>t({...e,description:n.target.value})})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(P,{hint:`Steht über der ersten Seite.`,children:`Begrüßung`}),(0,K.jsx)(L,{minRows:2,value:e.intro??``,onChange:n=>t({...e,intro:n.target.value||void 0})})]})]}),(0,K.jsx)(X,{title:`Avatar`,children:(0,K.jsx)(`div`,{className:`grid grid-cols-5 gap-2`,children:ve.map(n=>(0,K.jsx)(`button`,{type:`button`,onClick:()=>t({...e,avatar:n}),className:F(`flex aspect-square items-center justify-center rounded-xl transition`,e.avatar===n?`bg-ember-tint ring-2 ring-ember`:`bg-paper hover:bg-paper-2`),"aria-label":n,children:(0,K.jsx)(c,{kind:n,size:44,interactive:!1})},n))})}),e.lists?.length||e.connections?.length?(0,K.jsxs)(X,{title:`Merkt sich für jede Person`,children:[(0,K.jsx)(`p`,{className:`text-[13px] text-ink-3`,children:`Bleibt zwischen den Durchläufen erhalten – getrennt für jede Person, die den Wizard nutzt. Ändern kannst du das im Gespräch.`}),(e.connections??[]).map(e=>(0,K.jsxs)(`div`,{className:`rounded-lg bg-paper px-3 py-2.5 ring-1 ring-border-soft`,children:[(0,K.jsx)(`div`,{className:`text-[14px]`,children:e.title??e.id}),(0,K.jsxs)(`div`,{className:`text-[12px] text-ink-4`,children:[`Konto · `,e.kind]})]},e.id)),(e.lists??[]).map(e=>(0,K.jsxs)(`div`,{className:`rounded-lg bg-paper px-3 py-2.5 ring-1 ring-border-soft`,children:[(0,K.jsx)(`div`,{className:`text-[14px]`,children:e.title}),(0,K.jsxs)(`div`,{className:`text-[12px] text-ink-4`,children:[`Liste · `,e.columns.map(e=>e.name).join(`, `)]}),(0,K.jsx)(`div`,{className:`mt-1 font-mono text-[11px] text-ink-4`,children:`{{lists.${e.id}}}`})]},e.id))]}):null]})}var Sa={page:e=>({id:e,type:`page`,title:`Neue Seite`,fields:[{id:`${e}Text`,label:`Neue Frage`,kind:`text`}]}),agent:e=>({id:e,type:`agent`,title:`KI-Schritt`,instructions:`Beschreibe die Aufgabe …`,tools:[],output:{format:`markdown`}}),generate:e=>({id:e,type:`generate`,title:`Bild erzeugen`,asset:`image`,prompt:`Beschreibe das Bild …`}),widget:e=>({id:e,type:`widget`,title:`Widget`,entry:`${e}/index.html`,data:{},sample:`${e}/sample.json`})},Ca=`__wizard`;function wa({def:e,selected:t,onSelect:n,issues:r}){let i=[Ca,...e.steps.map(e=>e.id)],a=t?i.indexOf(t):-1,o=(0,G.useRef)(null);(0,G.useEffect)(()=>{o.current?.scrollIntoView({block:`nearest`,inline:`center`,behavior:`smooth`})},[t]);let s=e=>{let t=a===-1?e===1?1:i.length-1:a+e;t>=0&&t<i.length&&n(i[t])},c=(0,G.useRef)(s);c.current=s,(0,G.useEffect)(()=>{let e=e=>{(e.key===`ArrowLeft`||e.key===`ArrowRight`)&&(e.defaultPrevented||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey||e.target?.closest(`input, textarea, select, [contenteditable=""], [contenteditable="true"], [role="separator"], [role="slider"], [role="dialog"], .react-flow`)||(e.preventDefault(),c.current(e.key===`ArrowLeft`?-1:1)))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]);let l=`inline-flex size-8 shrink-0 items-center justify-center rounded-full transition`;return(0,K.jsxs)(`div`,{className:`sticky top-0 z-10 flex items-center gap-1 border-border-soft border-b bg-card/95 px-2 py-2 backdrop-blur`,children:[(0,K.jsx)(R,{label:W(`editor.prevStep`),className:`size-8 shrink-0`,disabled:a===0,onClick:()=>s(-1),children:(0,K.jsx)(ze,{className:`size-4`})}),(0,K.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center overflow-x-auto p-1 [scrollbar-width:none]`,children:[(0,K.jsx)(`button`,{ref:t===Ca?o:void 0,type:`button`,title:e.title,"aria-label":e.title,"aria-current":t===Ca?`step`:void 0,onClick:()=>n(Ca),className:F(l,`bg-paper-2 text-ink-2`,t===Ca?`ring-2 ring-ember`:`hover:ring-2 hover:ring-border-soft`),children:(0,K.jsx)(ce,{className:`size-4`})}),e.steps.map((e,i)=>{let a=ne(e),s=e.id===t,c=r.some(t=>t.stepId===e.id);return(0,K.jsxs)(`div`,{className:`flex shrink-0 items-center`,children:[(0,K.jsx)(`span`,{className:`h-px w-3 bg-border-soft`}),(0,K.jsxs)(`button`,{ref:s?o:void 0,type:`button`,title:`${i+1}. ${e.title}`,"aria-label":`${i+1}. ${e.title}`,"aria-current":s?`step`:void 0,onClick:()=>n(e.id),className:F(l,`relative`,ae[e.type],s?`ring-2 ring-ember`:`opacity-70 hover:opacity-100`),children:[(0,K.jsx)(a,{className:`size-4`}),c?(0,K.jsx)(`span`,{className:`-top-0.5 -right-0.5 absolute size-2.5 rounded-full bg-rose ring-2 ring-card`}):null]})]},e.id)})]}),(0,K.jsx)(`span`,{className:`shrink-0 px-1 text-[12px] text-ink-4 tabular-nums`,children:a>0?`${a} / ${e.steps.length}`:``}),(0,K.jsx)(R,{label:W(`editor.nextStep`),className:`size-8 shrink-0`,disabled:a===i.length-1,onClick:()=>s(1),children:(0,K.jsx)(Ve,{className:`size-4`})})]})}function Ta({def:e,onSelect:t,issues:n}){return(0,K.jsx)(`div`,{className:`flex flex-col gap-1 p-3`,children:e.steps.map((e,r)=>{let i=ne(e),a=n.some(t=>t.stepId===e.id);return(0,K.jsxs)(`button`,{type:`button`,onClick:()=>t(e.id),className:`flex items-center gap-3 rounded-lg px-3 py-2.5 text-left transition hover:bg-paper-2`,children:[(0,K.jsx)(`span`,{className:`w-4 text-right text-[12px] text-ink-4 tabular-nums`,children:r+1}),(0,K.jsx)(`span`,{className:F(`inline-flex size-7 shrink-0 items-center justify-center rounded-md`,ae[e.type]),children:(0,K.jsx)(i,{className:`size-4`})}),(0,K.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,K.jsx)(`span`,{className:`block truncate text-[14px]`,children:e.title}),(0,K.jsx)(`span`,{className:`block text-[12px] text-ink-4`,children:E(e)})]}),a?(0,K.jsx)(`span`,{className:`size-2 shrink-0 rounded-full bg-rose`}):null]},e.id)})})}function Ea(e){let{def:t,selected:n,onSelect:r,issues:i,readOnly:a=!1}=e,o=a?()=>{}:e.update,s=t.steps.find(e=>e.id===n);return(0,K.jsx)(pa,{value:a,children:(0,K.jsxs)(`div`,{children:[(0,K.jsx)(wa,{def:t,selected:n,onSelect:r,issues:i}),n===Ca?(0,K.jsx)(xa,{def:t,update:o}):s?(0,K.jsx)(Da,{...e,update:o,step:s}):(0,K.jsx)(Ta,{def:t,onSelect:r,issues:i})]})})}function Da({def:e,step:t,update:n,onSelect:r,issues:i,mcpServers:a,files:o,wizardId:s}){let c=e.steps.indexOf(t),l=ne(t),u=r=>n({...e,steps:e.steps.map(e=>e.id===t.id?r:e)}),d=r=>{let i=c+r;if(i<0||i>=e.steps.length-(t.type===`result`?0:1)||e.steps[i].type===`result`)return;let a=[...e.steps];[a[c],a[i]]=[a[i],a[c]],n({...e,steps:a})},f=i=>{let a=ha(e,i===`page`?`seite`:i===`agent`?`ki`:i===`widget`?`widget`:`erzeugen`),o=[...e.steps];o.splice(t.type===`result`?c:c+1,0,Sa[i](a)),n({...e,steps:o}),r(a)},p=i.filter(e=>e.stepId===t.id),m=Wi(s,e),h=(0,G.useContext)(pa);return(0,K.jsxs)(`div`,{children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2 px-5 py-4`,children:[(0,K.jsx)(`span`,{className:F(`inline-flex size-7 items-center justify-center rounded-md`,ae[t.type]),children:(0,K.jsx)(l,{className:`size-4`})}),(0,K.jsx)(`span`,{className:`font-medium text-[12px] text-ink-3 uppercase tracking-[0.07em]`,children:E(t)}),(0,K.jsx)(`span`,{className:`ml-auto font-mono text-[11px] text-ink-4`,children:t.id})]}),p.length?(0,K.jsx)(`div`,{className:`mx-5 mb-4 rounded-lg bg-rose-tint px-3 py-2 text-[13px] text-rose`,children:p.map((e,t)=>(0,K.jsx)(`div`,{children:e.message},t))}):null,(0,K.jsxs)(X,{children:[(0,K.jsx)(V,{value:t.title,onChange:e=>u({...t,title:e.target.value}),className:`font-display font-semibold text-[16px]`}),t.type===`page`||t.type===`review`?(0,K.jsx)(L,{minRows:1,placeholder:`Erklärung unter dem Titel (optional)`,value:t.description??``,onChange:e=>u({...t,description:e.target.value||void 0})}):null,(0,K.jsx)(Ki,{estimate:m.data,stepId:t.id})]}),(0,K.jsx)(ba,{def:e,step:t,set:u,mcpServers:a,files:o,wizardId:s}),h?null:(0,K.jsx)(X,{children:(0,K.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1`,children:[t.type===`result`?null:(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(R,{label:W(`editor.moveUp`),onClick:()=>d(-1),children:(0,K.jsx)(C,{className:`size-4`})}),(0,K.jsx)(R,{label:W(`editor.moveDown`),onClick:()=>d(1),children:(0,K.jsx)(b,{className:`size-4`})}),(0,K.jsx)(R,{label:W(`editor.deleteStep`),className:`hover:text-rose`,onClick:()=>{n({...e,steps:e.steps.filter(e=>e.id!==t.id)}),r(null)},children:(0,K.jsx)(T,{className:`size-4`})})]}),(0,K.jsx)(`span`,{className:`ml-auto text-[12px] text-ink-4`,children:`Danach einfügen:`}),[`page`,`agent`,`generate`,`widget`].map(e=>(0,K.jsxs)(`button`,{type:`button`,onClick:()=>f(e),className:`inline-flex h-8 items-center gap-1 rounded-full px-2.5 text-[12px] text-ink-2 hover:bg-accent`,children:[(0,K.jsx)(D,{className:`size-3.5`}),` `,W(`type.${e}`)]},e))]})})]})}var Oa={waiting_input:`wartet`,running:`läuft`,done:`fertig`,failed:`Fehler`,cancelled:`abgebrochen`};function ka({wizardId:e,onOpen:t}){let n=l({queryKey:[`runs`,e],queryFn:()=>d.get(`/api/studio/wizards/${e}/runs`),refetchInterval:1e4});if(n.data&&!n.data.length)return(0,K.jsx)(xe,{children:W(`editor.noRuns`)});let r=new Intl.DateTimeFormat(be,{dateStyle:`short`,timeStyle:`short`});return(0,K.jsx)(`div`,{className:`flex flex-col p-2`,children:n.data?.map(e=>(0,K.jsxs)(`button`,{type:`button`,onClick:()=>t(e.id),className:`flex items-center gap-3 rounded-lg px-3 py-3 text-left hover:bg-accent`,children:[(0,K.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2 text-[14px]`,children:[r.format(new Date(e.createdAt)),e.mode===`test`?(0,K.jsx)(B,{children:`Test`}):(0,K.jsxs)(B,{tone:`live`,children:[`Live v`,e.version]})]}),(0,K.jsxs)(`div`,{className:`truncate text-[12px] text-ink-3`,children:[Oa[e.status]??e.status,e.stepTitle&&e.status!==`done`?` · ${e.stepTitle}`:``]})]}),(0,K.jsxs)(`span`,{className:`text-[12px] text-ink-4 tabular-nums`,children:[e.credits,` cr`]})]},e.id))})}var Z=(e=>(e[e.Border=-1]=`Border`,e[e.Data=0]=`Data`,e[e.Function=1]=`Function`,e[e.Position=2]=`Position`,e[e.Timing=3]=`Timing`,e[e.Alignment=4]=`Alignment`,e))(Z||{}),Aa=[0,1],ja=[1,0],Ma=[2,3],Na=[3,2],Pa={L:Aa,M:ja,Q:Ma,H:Na},Fa=/^\d*$/,Ia=/^[A-Z0-9 $%*+./:-]*$/,La=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:`,Ra=1,za=40,Ba=3,Va=3,Ha=40,Ua=10,Wa=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],Ga=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]],Ka=class{constructor(e,t,n,r){if(this.version=e,this.ecc=t,e<Ra||e>za)throw RangeError(`Version value out of range`);if(r<-1||r>7)throw RangeError(`Mask value out of range`);this.size=e*4+17;let i=Array.from({length:this.size}).fill(!1);for(let e=0;e<this.size;e++)this.modules.push(i.slice()),this.types.push(i.map(()=>0));this.drawFunctionPatterns();let a=this.addEccAndInterleave(n);if(this.drawCodewords(a),r===-1){let e=1e9;for(let t=0;t<8;t++){this.applyMask(t),this.drawFormatBits(t);let n=this.getPenaltyScore();n<e&&(r=t,e=n),this.applyMask(t)}}this.mask=r,this.applyMask(r),this.drawFormatBits(r)}size;mask;modules=[];types=[];getModule(e,t){return e>=0&&e<this.size&&t>=0&&t<this.size&&this.modules[t][e]}drawFunctionPatterns(){for(let e=0;e<this.size;e++)this.setFunctionModule(6,e,e%2==0,Z.Timing),this.setFunctionModule(e,6,e%2==0,Z.Timing);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);let e=this.getAlignmentPatternPositions(),t=e.length;for(let n=0;n<t;n++)for(let r=0;r<t;r++)n===0&&r===0||n===0&&r===t-1||n===t-1&&r===0||this.drawAlignmentPattern(e[n],e[r]);this.drawFormatBits(0),this.drawVersion()}drawFormatBits(e){let t=this.ecc[1]<<3|e,n=t;for(let e=0;e<10;e++)n=n<<1^(n>>>9)*1335;let r=(t<<10|n)^21522;for(let e=0;e<=5;e++)this.setFunctionModule(8,e,$(r,e));this.setFunctionModule(8,7,$(r,6)),this.setFunctionModule(8,8,$(r,7)),this.setFunctionModule(7,8,$(r,8));for(let e=9;e<15;e++)this.setFunctionModule(14-e,8,$(r,e));for(let e=0;e<8;e++)this.setFunctionModule(this.size-1-e,8,$(r,e));for(let e=8;e<15;e++)this.setFunctionModule(8,this.size-15+e,$(r,e));this.setFunctionModule(8,this.size-8,!0)}drawVersion(){if(this.version<7)return;let e=this.version;for(let t=0;t<12;t++)e=e<<1^(e>>>11)*7973;let t=this.version<<12|e;for(let e=0;e<18;e++){let n=$(t,e),r=this.size-11+e%3,i=Math.floor(e/3);this.setFunctionModule(r,i,n),this.setFunctionModule(i,r,n)}}drawFinderPattern(e,t){for(let n=-4;n<=4;n++)for(let r=-4;r<=4;r++){let i=Math.max(Math.abs(r),Math.abs(n)),a=e+r,o=t+n;a>=0&&a<this.size&&o>=0&&o<this.size&&this.setFunctionModule(a,o,i!==2&&i!==4,Z.Position)}}drawAlignmentPattern(e,t){for(let n=-2;n<=2;n++)for(let r=-2;r<=2;r++)this.setFunctionModule(e+r,t+n,Math.max(Math.abs(r),Math.abs(n))!==1,Z.Alignment)}setFunctionModule(e,t,n,r=Z.Function){this.modules[t][e]=n,this.types[t][e]=r}addEccAndInterleave(e){let t=this.version,n=this.ecc;if(e.length!==so(t,n))throw RangeError(`Invalid argument`);let r=Ga[n[0]][t],i=Wa[n[0]][t],a=Math.floor(oo(t)/8),o=r-a%r,s=Math.floor(a/r),c=[],l=co(i);for(let t=0,n=0;t<r;t++){let r=e.slice(n,n+s-i+(t<o?0:1));n+=r.length;let a=lo(r,l);t<o&&r.push(0),c.push(r.concat(a))}let u=[];for(let e=0;e<c[0].length;e++)c.forEach((t,n)=>{(e!==s-i||n>=o)&&u.push(t[e])});return u}drawCodewords(e){if(e.length!==Math.floor(oo(this.version)/8))throw RangeError(`Invalid argument`);let t=0;for(let n=this.size-1;n>=1;n-=2){n===6&&(n=5);for(let r=0;r<this.size;r++)for(let i=0;i<2;i++){let a=n-i,o=n+1&2?r:this.size-1-r;!this.types[o][a]&&t<e.length*8&&(this.modules[o][a]=$(e[t>>>3],7-(t&7)),t++)}}}applyMask(e){if(e<0||e>7)throw RangeError(`Mask value out of range`);for(let t=0;t<this.size;t++)for(let n=0;n<this.size;n++){let r;switch(e){case 0:r=(n+t)%2==0;break;case 1:r=t%2==0;break;case 2:r=n%3==0;break;case 3:r=(n+t)%3==0;break;case 4:r=(Math.floor(n/3)+Math.floor(t/2))%2==0;break;case 5:r=n*t%2+n*t%3==0;break;case 6:r=(n*t%2+n*t%3)%2==0;break;case 7:r=((n+t)%2+n*t%3)%2==0;break;default:throw Error(`Unreachable`)}!this.types[t][n]&&r&&(this.modules[t][n]=!this.modules[t][n])}}getPenaltyScore(){let e=0;for(let t=0;t<this.size;t++){let n=!1,r=0,i=[0,0,0,0,0,0,0];for(let a=0;a<this.size;a++)this.modules[t][a]===n?(r++,r===5?e+=Ba:r>5&&e++):(this.finderPenaltyAddHistory(r,i),n||(e+=this.finderPenaltyCountPatterns(i)*Ha),n=this.modules[t][a],r=1);e+=this.finderPenaltyTerminateAndCount(n,r,i)*Ha}for(let t=0;t<this.size;t++){let n=!1,r=0,i=[0,0,0,0,0,0,0];for(let a=0;a<this.size;a++)this.modules[a][t]===n?(r++,r===5?e+=Ba:r>5&&e++):(this.finderPenaltyAddHistory(r,i),n||(e+=this.finderPenaltyCountPatterns(i)*Ha),n=this.modules[a][t],r=1);e+=this.finderPenaltyTerminateAndCount(n,r,i)*Ha}for(let t=0;t<this.size-1;t++)for(let n=0;n<this.size-1;n++){let r=this.modules[t][n];r===this.modules[t][n+1]&&r===this.modules[t+1][n]&&r===this.modules[t+1][n+1]&&(e+=Va)}let t=0;for(let e of this.modules)t=e.reduce((e,t)=>e+ +!!t,t);let n=this.size*this.size,r=Math.ceil(Math.abs(t*20-n*10)/n)-1;return e+=r*Ua,e}getAlignmentPatternPositions(){if(this.version===1)return[];{let e=Math.floor(this.version/7)+2,t=this.version===32?26:Math.ceil((this.version*4+4)/(e*2-2))*2,n=[6];for(let r=this.size-7;n.length<e;r-=t)n.splice(1,0,r);return n}}finderPenaltyCountPatterns(e){let t=e[1],n=t>0&&e[2]===t&&e[3]===t*3&&e[4]===t&&e[5]===t;return(n&&e[0]>=t*4&&e[6]>=t?1:0)+(n&&e[6]>=t*4&&e[0]>=t?1:0)}finderPenaltyTerminateAndCount(e,t,n){return e&&(this.finderPenaltyAddHistory(t,n),t=0),t+=this.size,this.finderPenaltyAddHistory(t,n),this.finderPenaltyCountPatterns(n)}finderPenaltyAddHistory(e,t){t[0]===0&&(e+=this.size),t.pop(),t.unshift(e)}};function Q(e,t,n){if(t<0||t>31||e>>>t)throw RangeError(`Value out of range`);for(let r=t-1;r>=0;r--)n.push(e>>>r&1)}function $(e,t){return!!(e>>>t&1)}var qa=class{constructor(e,t,n){if(this.mode=e,this.numChars=t,this.bitData=n,t<0)throw RangeError(`Invalid argument`);this.bitData=n.slice()}getData(){return this.bitData.slice()}},Ja=[1,10,12,14],Ya=[2,9,11,13],Xa=[4,8,16,16];function Za(e,t){return e[Math.floor((t+7)/17)+1]}function Qa(e){let t=[];for(let n of e)Q(n,8,t);return new qa(Xa,e.length,t)}function $a(e){if(!no(e))throw RangeError(`String contains non-numeric characters`);let t=[];for(let n=0;n<e.length;){let r=Math.min(e.length-n,3);Q(Number.parseInt(e.substring(n,n+r),10),r*3+1,t),n+=r}return new qa(Ja,e.length,t)}function eo(e){if(!ro(e))throw RangeError(`String contains unencodable characters in alphanumeric mode`);let t=[],n=0;for(;n+2<=e.length;n+=2){let r=La.indexOf(e.charAt(n))*45;r+=La.indexOf(e.charAt(n+1)),Q(r,11,t)}return n<e.length&&Q(La.indexOf(e.charAt(n)),6,t),new qa(Ya,e.length,t)}function to(e){return e===``?[]:no(e)?[$a(e)]:ro(e)?[eo(e)]:[Qa(ao(e))]}function no(e){return Fa.test(e)}function ro(e){return Ia.test(e)}function io(e,t){let n=0;for(let r of e){let e=Za(r.mode,t);if(r.numChars>=1<<e)return 1/0;n+=4+e+r.bitData.length}return n}function ao(e){e=encodeURI(e);let t=[];for(let n=0;n<e.length;n++)e.charAt(n)===`%`?(t.push(Number.parseInt(e.substring(n+1,n+3),16)),n+=2):t.push(e.charCodeAt(n));return t}function oo(e){if(e<Ra||e>za)throw RangeError(`Version number out of range`);let t=(16*e+128)*e+64;if(e>=2){let n=Math.floor(e/7)+2;t-=(25*n-10)*n-55,e>=7&&(t-=36)}return t}function so(e,t){return Math.floor(oo(e)/8)-Wa[t[0]][e]*Ga[t[0]][e]}function co(e){if(e<1||e>255)throw RangeError(`Degree out of range`);let t=[];for(let n=0;n<e-1;n++)t.push(0);t.push(1);let n=1;for(let r=0;r<e;r++){for(let e=0;e<t.length;e++)t[e]=uo(t[e],n),e+1<t.length&&(t[e]^=t[e+1]);n=uo(n,2)}return t}function lo(e,t){let n=t.map(e=>0);for(let r of e){let e=r^n.shift();n.push(0),t.forEach((t,r)=>n[r]^=uo(t,e))}return n}function uo(e,t){if(e>>>8||t>>>8)throw RangeError(`Byte out of range`);let n=0;for(let r=7;r>=0;r--)n=n<<1^(n>>>7)*285,n^=(t>>>r&1)*e;return n}function fo(e,t,n=1,r=40,i=-1,a=!0){if(!(Ra<=n&&n<=r&&r<=za)||i<-1||i>7)throw RangeError(`Invalid value`);let o,s;for(o=n;;o++){let n=so(o,t)*8,i=io(e,o);if(i<=n){s=i;break}if(o>=r)throw RangeError(`Data too long`)}for(let e of[ja,Ma,Na])a&&s<=so(o,e)*8&&(t=e);let c=[];for(let t of e){Q(t.mode[0],4,c),Q(t.numChars,Za(t.mode,o),c);for(let e of t.getData())c.push(e)}let l=so(o,t)*8;Q(0,Math.min(4,l-c.length),c),Q(0,(8-c.length%8)%8,c);for(let e=236;c.length<l;e^=253)Q(e,8,c);let u=Array.from({length:Math.ceil(c.length/8)},()=>0);return c.forEach((e,t)=>u[t>>>3]|=e<<7-(t&7)),new Ka(o,t,u,i)}function po(e,t){let{ecc:n=`L`,boostEcc:r=!1,minVersion:i=1,maxVersion:a=40,maskPattern:o=-1,border:s=1}=t||{},c=typeof e==`string`?to(e):Array.isArray(e)?[Qa(e)]:void 0;if(!c)throw Error(`uqr only supports encoding string and binary data, but got: ${typeof e}`);let l=fo(c,Pa[n],i,a,o,r),u=mo({version:l.version,maskPattern:l.mask,size:l.size,data:l.modules,types:l.types},s);return t?.invert&&(u.data=u.data.map(e=>e.map(e=>!e))),t?.onEncoded?.(u),u}function mo(e,t=1){if(!t)return e;let{size:n}=e,r=n+t*2;e.size=r,e.data.forEach(e=>{for(let n=0;n<t;n++)e.unshift(!1),e.push(!1)});for(let n=0;n<t;n++)e.data.unshift(Array.from({length:r},e=>!1)),e.data.push(Array.from({length:r},e=>!1));let i=Z.Border;e.types.forEach(e=>{for(let n=0;n<t;n++)e.unshift(i),e.push(i)});for(let n=0;n<t;n++)e.types.unshift(Array.from({length:r},e=>i)),e.types.push(Array.from({length:r},e=>i));return e}function ho(e){return e.replace(/&/g,`&amp;`).replace(/"/g,`&quot;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`)}function go(e,t={}){let n=po(e,t),{pixelSize:r=10,whiteColor:i=`white`,blackColor:a=`black`}=t,o=n.size*r,s=n.size*r,c=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${s} ${o}">`,l=[];for(let e=0;e<n.size;e++)for(let t=0;t<n.size;t++){let i=t*r,a=e*r;n.data[e][t]&&l.push(`M${i},${a}h${r}v${r}h-${r}z`)}return c+=`<rect fill="${ho(i)}" width="${s}" height="${o}"/>`,c+=`<path fill="${ho(a)}" d="${l.join(``)}"/>`,c+=`</svg>`,c}var _o=e=>`${e.slice(0,4)} ${e.slice(4)}`;function vo(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.click(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}async function yo(e,t){let n=new Image,r=URL.createObjectURL(new Blob([e],{type:`image/svg+xml`}));try{n.src=r,await n.decode();let e=document.createElement(`canvas`);e.width=1024,e.height=1024;let i=e.getContext(`2d`);if(!i)return;i.imageSmoothingEnabled=!1,i.drawImage(n,0,0,1024,1024);let a=await new Promise(t=>e.toBlob(t,`image/png`));a&&vo(a,t)}finally{URL.revokeObjectURL(r)}}function bo({url:e,code:t,title:n}){let r=(0,G.useMemo)(()=>go(e,{ecc:`M`,border:2,pixelSize:8}),[e]),i=(n.trim()||`wizard`).replace(/[^\p{L}\p{N}]+/gu,`-`).toLowerCase();return(0,K.jsxs)(`div`,{className:`mt-6 flex gap-4 border-border-soft border-t pt-5`,children:[(0,K.jsx)(`div`,{role:`img`,"aria-label":W(`share.qr`),className:`size-28 shrink-0 overflow-hidden rounded-lg bg-white [&>svg]:size-full`,dangerouslySetInnerHTML:{__html:r}}),(0,K.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-2`,children:[(0,K.jsx)(`span`,{className:`text-[14px]`,children:W(`share.qr`)}),(0,K.jsx)(`p`,{className:`text-[13px] text-ink-3`,children:W(`share.qrHint`)}),t?(0,K.jsxs)(`p`,{className:`text-[13px] text-ink-3`,children:[W(`share.code`),` `,(0,K.jsx)(`span`,{className:`select-all font-mono text-[15px] text-ink tracking-wider`,children:_o(t)})]}):null,(0,K.jsxs)(`div`,{className:`mt-auto flex gap-2`,children:[(0,K.jsxs)(H,{variant:`secondary`,size:`sm`,onClick:()=>void yo(r,`${i}-qr.png`),children:[(0,K.jsx)(Te,{className:`size-3.5`}),` PNG`]}),(0,K.jsxs)(H,{variant:`secondary`,size:`sm`,onClick:()=>vo(new Blob([r],{type:`image/svg+xml`}),`${i}-qr.svg`),children:[(0,K.jsx)(Te,{className:`size-3.5`}),` SVG`]})]})]})]})}var xo=e=>e.replace(/&/g,`&amp;`).replace(/"/g,`&quot;`).replace(/</g,`&lt;`);function So({url:e,title:t}){let[n,r]=(0,G.useState)(!1),[i,a]=(0,G.useState)(!1),[,o,s]=e.match(/^(.*)\/w\/([^/]+)$/)??[];if(!s)return null;let c=`<script async src="${o}/embed.js" data-wizard="${s}"${n?` data-mode="modal" data-label="${xo(t)}"`:``}><\/script>`,l=[W(`embed.inline`),W(`embed.modal`)];return(0,K.jsxs)(`div`,{className:`mt-6 flex flex-col gap-3 border-border-soft border-t pt-5`,children:[(0,K.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,K.jsx)(`span`,{className:`text-[14px]`,children:W(`embed.title`)}),(0,K.jsxs)(H,{variant:`secondary`,size:`sm`,onClick:()=>{navigator.clipboard.writeText(c),a(!0),setTimeout(()=>a(!1),1500)},children:[i?(0,K.jsx)(oe,{className:`size-3.5`}):(0,K.jsx)(pe,{className:`size-3.5`}),W(i?`share.copied`:`share.copy`)]})]}),(0,K.jsx)(`p`,{className:`text-[13px] text-ink-3`,children:W(n?`embed.modalHint`:`embed.inlineHint`)}),(0,K.jsx)(I,{value:l[+!!n],onChange:e=>r(e===l[1]),options:l}),(0,K.jsx)(`pre`,{className:`select-all whitespace-pre-wrap break-all rounded-lg bg-paper-2 px-3 py-2.5 font-mono text-[12px] text-ink-2 leading-relaxed`,children:c})]})}function Co(e,t){return l({queryKey:[`cloud`,e],queryFn:()=>d.get(`/api/studio/wizards/${e}/cloud`),enabled:t})}var wo={sandbox:`cloud.problem.sandbox`,mcp:`cloud.problem.mcp`,model:`cloud.problem.model`,connector:`cloud.problem.connector`,invalid:`cloud.problem.invalid`};function To({problems:e,quiet:t}){return(0,K.jsx)(`ul`,{className:F(`flex flex-col gap-2 text-[13px]`,t?`text-ink-3`:`text-ink-2`),children:e.map((e,n)=>(0,K.jsxs)(`li`,{children:[e.steps.length?(0,K.jsxs)(`span`,{className:F(`font-medium`,t?`text-ink-2`:`text-ink`),children:[e.steps.map(e=>W(`cloud.stepName`,{title:e.title})).join(`, `),`:`,` `]}):null,W(wo[e.code]??`cloud.problem.invalid`,{detail:e.detail}),e.detail&&e.code!==`mcp`&&e.code!==`sandbox`?(0,K.jsx)(`span`,{className:`mt-0.5 block break-words font-mono text-[11px] text-ink-4`,children:e.detail}):null]},n))})}function Eo({error:e}){let t=f(),n=e.reason===`space_limit`,r=l({queryKey:[`cloud-spaces`],queryFn:()=>d.get(`/api/studio/cloud/spaces`),enabled:n,retry:!1}),i=m({mutationFn:()=>d.post(`/api/studio/cloud/replace`),onSettled:()=>Promise.all([t.invalidateQueries({queryKey:[`cloud`]}),t.invalidateQueries({queryKey:[`cloud-spaces`]})])});if(!n)return(0,K.jsxs)(`p`,{className:`text-[13px] text-rose`,children:[e.message,` `,e.reason===`signed_out`?(0,K.jsx)(a,{to:`/settings/account`,className:`font-medium underline underline-offset-2`,children:W(`local.toAccount`)}):null,e.again?(0,K.jsx)(`span`,{className:`text-ink-3`,children:W(`cloud.again`,{when:new Intl.DateTimeFormat(be,{timeStyle:`short`}).format(new Date(e.again))})}):null]});let o=(r.data?.spaces??[]).map(e=>e.name);return(0,K.jsxs)(`div`,{className:`flex flex-col gap-2 rounded-lg bg-rose-tint px-3 py-2.5 text-[13px] text-ink-2`,children:[(0,K.jsx)(`p`,{className:`text-rose`,children:e.message}),(0,K.jsx)(`p`,{children:W(`cloud.spaceLimit`)}),o.length?(0,K.jsx)(`ul`,{className:`list-disc pl-5 text-ink`,children:o.map((e,t)=>(0,K.jsx)(`li`,{children:e},t))}):null,(0,K.jsx)(`div`,{children:(0,K.jsx)(H,{variant:`secondary`,size:`sm`,busy:i.isPending,onClick:()=>window.confirm(W(`cloud.replaceConfirm`))&&i.mutate(),children:W(`cloud.replace`)})}),i.error?(0,K.jsx)(`p`,{className:`text-rose`,children:i.error.message}):null]})}function Do({wizard:e}){let t=f(),n=Co(e.id,!0),r=m({mutationFn:()=>d.post(`/api/studio/wizards/${e.id}/cloud`),onSuccess:n=>t.setQueryData([`cloud`,e.id],n)}),i=n.data?.copy??null,a=n.data?.error??null,o=e.publishedVersion,s=i!==null&&o!==null&&i.version<o,c=!i||e.dirty||s,u=l({queryKey:[`cloud-check`,e.id,e.revision],queryFn:()=>d.get(`/api/studio/wizards/${e.id}/cloud/check`),enabled:n.data?.linked===!0&&c,retry:!1,staleTime:3e4});if(n.data&&!n.data.linked)return null;let p=i?.problems.filter(e=>e.blocking)??[],h=i?.problems.filter(e=>!e.blocking)??[],g=c?u.data?.problems??[]:[],_=new Intl.DateTimeFormat(be,{dateStyle:`short`,timeStyle:`short`});return(0,K.jsxs)(`div`,{className:`mt-6 flex flex-col gap-3 border-border-soft border-t pt-5`,children:[(0,K.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,K.jsx)(`span`,{className:`text-[14px]`,children:W(`cloud.title`)}),e.published&&n.data&&(!i||s||a)?(0,K.jsxs)(H,{variant:`secondary`,size:`sm`,busy:r.isPending,onClick:()=>r.mutate(),children:[(0,K.jsx)(Ge,{className:`size-3.5`}),W(i||a?`cloud.resend`:`cloud.send`)]}):null]}),n.isLoading?(0,K.jsx)(Se,{className:`size-4 text-ink-4`}):null,n.isError?(0,K.jsx)(`p`,{className:`text-[13px] text-rose`,children:n.error.message}):null,n.data&&!i&&!a?(0,K.jsx)(`p`,{className:`text-[13px] text-ink-3`,children:W(e.published?`cloud.notSent`:`cloud.onPublish`)}):null,i?(0,K.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,K.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1.5 self-start break-all text-left font-mono text-[13px] text-ink-2 hover:text-ink`,onClick:()=>Le(i.shareUrl),children:[(0,K.jsx)(O,{className:`size-3.5 shrink-0`}),` `,i.shareUrl]}),(0,K.jsx)(`p`,{className:`text-[12px] text-ink-4`,children:W(s?`cloud.sentBehind`:`cloud.sent`,{v:i.version,when:_.format(new Date(i.syncedAt)),now:o??i.version})})]}):null,i&&!i.runnable?(0,K.jsxs)(`div`,{className:`flex flex-col gap-2 rounded-lg bg-amber-tint px-3 py-2.5`,children:[(0,K.jsxs)(`p`,{className:`text-[14px]`,children:[W(`cloud.notRunnable`,{v:i.version}),` `,i.publishedVersion===null?W(`cloud.nothingRuns`):W(`cloud.keepsRunning`,{v:i.publishedVersion})]}),p.length?(0,K.jsx)(To,{problems:p}):null]}):null,a?(0,K.jsx)(Eo,{error:a}):null,r.error?(0,K.jsx)(`p`,{className:`text-[13px] text-rose`,children:r.error.message}):null,!c&&h.length?(0,K.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,K.jsx)(`p`,{className:`text-[13px] text-ink-3`,children:W(`cloud.notes`)}),(0,K.jsx)(To,{problems:h,quiet:!0})]}):null,g.length?(0,K.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,K.jsx)(`p`,{className:`text-[13px] text-ink-2`,children:W(g.some(e=>e.blocking)?`cloud.checkBlocking`:`cloud.check`)}),(0,K.jsx)(To,{problems:g,quiet:!0})]}):null,c&&u.data?.documents?(0,K.jsx)(`p`,{className:`text-[13px] text-ink-3`,children:W(`cloud.documents`)}):null,c&&u.error&&!a?(0,K.jsx)(`p`,{className:`text-[13px] text-ink-3`,children:u.error.message}):null,i?(0,K.jsx)(bo,{url:i.shareUrl,code:i.code,title:e.draft.title}):null,i?(0,K.jsx)(So,{url:i.shareUrl,title:e.draft.title}):null]})}function Oo({wizard:e,open:t,onClose:n}){let r=f(),[i,a]=(0,G.useState)(!1),[s,c]=(0,G.useState)(String(e.dailyRunLimit)),u=()=>r.invalidateQueries({queryKey:[`wizard`,e.id]}),p=m({mutationFn:t=>d.patch(`/api/studio/wizards/${e.id}`,t),onSuccess:u}),g=m({mutationFn:()=>d.post(`/api/studio/wizards/${e.id}/rotate-link`),onSuccess:u}),_=`${window.location.origin}${o}/w/${e.shareToken}`,v=h(),y=v.data?.mode===`managed`&&e.published,ee=l({queryKey:[`wizard-code`,e.id,e.shareToken],queryFn:()=>d.get(`/api/studio/wizards/${e.id}/code`),enabled:t&&y}),b=v.data?.mode===`local`&&!!v.data.account,x=Co(e.id,t&&b),S=e.readOnly,C=p.error??g.error,w=Wi(e.id,e.draft),T=w.data?.available&&w.data.reserve>0?Math.round(w.data.reserve*e.dailyRunLimit):null;return(0,K.jsxs)(Ce,{open:t,onClose:n,title:W(`share.title`),children:[e.published?null:(0,K.jsx)(`p`,{className:`mb-4 rounded-lg bg-amber-tint px-3 py-2 text-[14px]`,children:W(`share.publishFirst`)}),x.data?.error||x.data?.copy?.runnable===!1?(0,K.jsx)(`p`,{className:`mb-4 rounded-lg bg-amber-tint px-3 py-2 text-[14px]`,children:W(x.data.error?`cloud.noticeError`:`cloud.noticeNotRunnable`)}):null,(0,K.jsxs)(`div`,{className:`flex gap-2`,children:[(0,K.jsx)(V,{readOnly:!0,value:_,onFocus:e=>e.target.select(),className:`font-mono text-[13px]`}),(0,K.jsxs)(H,{variant:`secondary`,onClick:()=>{navigator.clipboard.writeText(_),a(!0),setTimeout(()=>a(!1),1500)},children:[i?(0,K.jsx)(oe,{className:`size-4`}):(0,K.jsx)(pe,{className:`size-4`}),W(i?`share.copied`:`share.copy`)]})]}),(0,K.jsxs)(`a`,{href:_,target:`_blank`,rel:`noreferrer`,className:`mt-2 inline-flex items-center gap-1.5 text-[13px] text-ink-3 hover:text-ink`,children:[(0,K.jsx)(O,{className:`size-3.5`}),` `,W(`share.open`)]}),y?(0,K.jsx)(bo,{url:_,code:ee.data?.code,title:e.draft.title}):null,(0,K.jsx)(So,{url:_,title:e.draft.title}),(0,K.jsxs)(`div`,{className:`mt-6 flex flex-col gap-5 border-border-soft border-t pt-5`,children:[(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsx)(`span`,{className:`text-[14px]`,children:W(`share.enabled`)}),(0,K.jsx)(z,{checked:e.shareEnabled,disabled:S,onChange:e=>p.mutate({shareEnabled:e})})]}),(0,K.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,K.jsx)(`span`,{className:`whitespace-nowrap text-[14px]`,children:W(`share.limit`)}),(0,K.jsx)(`div`,{className:`w-24`,children:(0,K.jsx)(V,{inputMode:`numeric`,className:`text-right`,disabled:S,value:s,onChange:e=>c(e.target.value.replace(/\D/g,``)),onBlur:()=>{let t=Number(s);t>=1&&t!==e.dailyRunLimit&&p.mutate({dailyRunLimit:t})}})})]}),T!==null&&w.data?(0,K.jsx)(`p`,{className:`text-[13px] text-ink-3 tabular-nums`,children:W(`estimate.share`,{run:Math.round(w.data.credits).toLocaleString(),day:T.toLocaleString()})}):null,(0,K.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,K.jsx)(`span`,{className:`text-[13px] text-ink-3`,children:W(`share.rotateHint`)}),(0,K.jsxs)(H,{variant:`ghost`,size:`sm`,busy:g.isPending,disabled:S,onClick:()=>g.mutate(),children:[(0,K.jsx)(j,{className:`size-3.5`}),` `,W(`share.rotate`)]})]}),S?(0,K.jsx)(`p`,{className:`text-[13px] text-ink-3`,children:W(`share.readOnly`)}):null,C?(0,K.jsx)(`p`,{className:`text-[13px] text-rose`,children:C.message}):null]}),b?(0,K.jsx)(Do,{wizard:e}):null]})}var ko=[`title`,`description`,`avatar`,`intro`,`lists`,`connections`],Ao=(e,t)=>JSON.stringify(e)===JSON.stringify(t);function jo(e,t,n){let r={...n};for(let n of ko)Ao(t[n],e[n])||Object.assign(r,{[n]:t[n]});let i=new Map(e.steps.map(e=>[e.id,e])),a=new Set(t.steps.map(e=>e.id)),o=n.steps.filter(e=>{let t=i.get(e.id);return a.has(e.id)||!t||!Ao(t,e)});return t.steps.forEach((e,n)=>{let r=i.get(e.id);if(r&&Ao(r,e))return;let a=o.findIndex(t=>t.id===e.id);if(a!==-1){o[a]=e;return}let s=t.steps.slice(0,n).reverse().find(e=>o.some(t=>t.id===e.id));o.splice(s?o.findIndex(e=>e.id===s.id)+1:0,0,e)}),{...r,steps:o}}function Mo(e){let t=f(),n=(0,G.useMemo)(()=>[`wizard`,e],[e]),r=`/api/studio/wizards/${e}`,i=(0,G.useRef)(null),a=(0,G.useRef)(Promise.resolve()),o=(0,G.useRef)(null),c=(0,G.useRef)(null),l=(0,G.useRef)(!1),[u,m]=(0,G.useState)(!1),[h,_]=(0,G.useState)(0),[v,y]=(0,G.useState)(null),[ee,b]=(0,G.useState)(null),x=(0,G.useCallback)(()=>!!(i.current||l.current||o.current),[]),S=(0,G.useCallback)(async()=>{let e=await d.get(r);t.setQueryData(n,t=>t&&x()?{...e,draft:t.draft,title:t.title,revision:t.revision,dirty:!0}:e)},[t,n,r,x]),C=(0,G.useCallback)(()=>{a.current=a.current.then(async()=>{let e=o.current,i=t.getQueryData(n);if(e&&i){o.current=null,l.current=!0,m(!0);try{let a=await d.put(`${r}/draft`,{definition:e,baseRevision:i.revision});c.current=o.current?e:null,t.setQueryData(n,e=>e&&{...e,revision:a.revision,issues:a.issues})}catch(i){let a=g(i);if(a){o.current=null,c.current=null,b(a);let e=await d.get(r).catch(()=>null);e&&t.setQueryData(n,e);return}if(!(i instanceof p&&i.status===409)){o.current??=e,console.error(`[draft] save failed`,i);return}let s=await d.get(r),l=jo(c.current??s.draft,o.current??e,s.draft);c.current=s.draft,o.current=l,t.setQueryData(n,{...s,draft:l,title:l.title,dirty:!0}),_(Date.now()),C()}finally{l.current=!1,m(!1)}}})},[t,n,r]),w=(0,G.useCallback)(r=>{e&&(x()||(c.current=t.getQueryData(n)?.draft??null),o.current=r,t.setQueryData(n,e=>e&&{...e,draft:r,title:r.title,dirty:!0}),i.current&&clearTimeout(i.current),i.current=setTimeout(()=>{i.current=null,C()},600))},[t,n,e,x,C]);return(0,G.useEffect)(()=>{if(!e)return;let r=new EventSource(s(`/api/studio/wizards/${e}/stream`));return r.addEventListener(`change`,e=>{let r=JSON.parse(e.data),i=t.getQueryData(n);r.kind===`draft`&&i&&r.revision<=i.revision||(S(),r.kind===`draft`&&r.source===`mcp`&&y({client:r.client??`MCP`,steps:r.touched,at:Date.now()}))}),r.addEventListener(`hello`,e=>{let{revision:r}=JSON.parse(e.data),i=t.getQueryData(n);i&&r!==i.revision&&S()}),()=>r.close()},[t,n,e,S]),(0,G.useEffect)(()=>{if(!v)return;let e=setTimeout(()=>y(null),6e3);return()=>clearTimeout(e)},[v]),(0,G.useEffect)(()=>{if(!h)return;let e=setTimeout(()=>_(0),4e3);return()=>clearTimeout(e)},[h]),{save:w,saving:u,remote:v,merged:h>0,refused:ee}}function No({remote:e,merged:t}){return e?(0,K.jsxs)(B,{tone:`ember`,children:[(0,K.jsx)(y,{className:`size-3`}),` `,W(`editor.changedVia`,{client:e.client})]}):t?(0,K.jsxs)(B,{children:[(0,K.jsx)(Ze,{className:`size-3`}),` `,W(`editor.merged`)]}):null}var Po={chat:`editor.chat`,step:`editor.step`,files:`editor.files`,runs:`editor.runs`},Fo=`wizards.editor.pane`,Io=420,Lo=340,Ro=()=>Math.max(Lo,window.innerWidth-480);function zo(){try{let e=Number(localStorage.getItem(Fo));return e?Math.min(Math.max(e,Lo),Ro()):Io}catch{return Io}}function Bo(){let[e,t]=(0,G.useState)(zo),n=(0,G.useCallback)(e=>{let n=Math.round(Math.min(Math.max(e,Lo),Ro()));t(n);try{localStorage.setItem(Fo,String(n))}catch{}},[]);return{width:e,onPointerDown:t=>{t.preventDefault();let r=t.clientX,i=e,a=e=>n(i+r-e.clientX),o=()=>{window.removeEventListener(`pointermove`,a),window.removeEventListener(`pointerup`,o),document.body.style.removeProperty(`cursor`),document.body.style.removeProperty(`user-select`)};document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`,window.addEventListener(`pointermove`,a),window.addEventListener(`pointerup`,o)},onKeyDown:t=>{let r=t.shiftKey?64:16;t.key===`ArrowLeft`?(t.preventDefault(),n(e+r)):t.key===`ArrowRight`&&(t.preventDefault(),n(e-r))},reset:()=>n(Io)}}function Vo(){let{id:e}=u(),t=i(),n=f(),a=h(),[o,c]=r(),p=l({queryKey:[`wizard`,e],queryFn:()=>d.get(`/api/studio/wizards/${e}`),refetchOnWindowFocus:!1}),[g,v]=(0,G.useState)(null),[y,b]=(0,G.useState)(`chat`),C=Bo(),[w,T]=(0,G.useState)(!1),[E,te]=(0,G.useState)(null),[ne,re]=(0,G.useState)(null),ie=(0,G.useCallback)(e=>re(e&&e.status!==`done`?e.step?.id??null:null),[]),{save:ae,saving:oe,remote:se,merged:ce,refused:pe}=Mo(e),D=_(),O=ue(p.data,(t,r)=>{n.setQueryData([`wizard`,e],e=>e&&{...e,draft:t,revision:r,title:t.title,blank:!1})}),me=(0,G.useRef)(!1);(0,G.useEffect)(()=>{let e=o.get(`prompt`);e&&p.data&&!me.current&&(me.current=!0,c({},{replace:!0}),O.send(e))},[o,p.data,O,c]);let he=l({queryKey:[`wizard-models`,e,p.data?.revision],queryFn:()=>d.get(`/api/studio/wizards/${e}/models`),enabled:!!p.data}).data?.missing??[],ge=he.some(e=>e.blocking),k=m({mutationFn:()=>d.post(`/api/studio/wizards/${e}/test-runs`),onSuccess:({runId:e})=>te(e)}),A=m({mutationFn:()=>d.post(`/api/studio/wizards/${e}/publish`),onSuccess:async({cloud:t})=>{t&&n.setQueryData([`cloud`,e],{linked:!0,...t}),await Promise.all([n.invalidateQueries({queryKey:[`wizard`,e]}),n.invalidateQueries({queryKey:[`cloud`,e]})]),T(!0)}}),_e=(0,G.useMemo)(()=>new Set((p.data?.issues??[]).map(e=>e.stepId).filter(Boolean)),[p.data?.issues]);if(p.isLoading||!a.data)return(0,K.jsx)(`div`,{className:`flex min-h-dvh items-center justify-center text-ink-4`,children:(0,K.jsx)(Se,{})});if(!p.data)return(0,K.jsx)(`div`,{className:`p-10 text-center text-ink-3`,children:W(`run.notFound`)});let j=p.data,ve=j.draft,M=O.phase!==`idle`&&j.blank,N=j.issues.length>0,ye=D.data?.find(e=>e.id===j.projectId),be=ye?ye.origin===`local`:a.data.limits.build||D.isLoading,xe=j.readOnly?W(be?`readonly.wizard`:`readonly.server`):null,P=a.data.mode===`local`&&!!a.data.account,Ce=pe??(A.error?A.error.message:null),I=e=>{v(e),e&&b(`step`)};return(0,K.jsxs)(`div`,{className:`flex h-dvh flex-col`,children:[xe?(0,K.jsxs)(`div`,{className:`flex shrink-0 items-center gap-3 border-border-soft border-b bg-paper-2 px-4 py-2 text-[13px] text-ink-2 sm:px-6`,children:[(0,K.jsx)(le,{className:`size-4 shrink-0 text-ink-3`}),(0,K.jsx)(`p`,{className:`min-w-0 flex-1`,children:xe})]}):null,Ce?(0,K.jsx)(`div`,{className:`shrink-0 bg-rose-tint px-4 py-2 text-[13px] text-rose sm:px-6`,children:Ce}):null,(0,K.jsxs)(`header`,{className:`flex h-16 shrink-0 items-center gap-2 px-3 sm:px-4`,children:[(0,K.jsx)(R,{label:`Zurück`,onClick:()=>t(`/`),children:(0,K.jsx)(S,{className:`size-5`})}),(0,K.jsx)(`button`,{type:`button`,onClick:()=>I(`__wizard`),className:`min-w-0 truncate rounded-md px-2 py-1 text-left hover:bg-accent`,children:(0,K.jsx)(`span`,{className:`font-display font-semibold text-[17px] tracking-tight`,children:ve.title})}),(0,K.jsx)(`span`,{className:`hidden sm:inline-flex`,children:j.published?j.dirty?(0,K.jsx)(B,{tone:`warn`,children:W(`editor.unpublishedChanges`)}):(0,K.jsx)(B,{tone:`live`,children:W(`editor.published`,{v:j.publishedVersion??0})}):(0,K.jsx)(B,{children:W(`editor.notPublished`)})}),oe?(0,K.jsx)(Se,{className:`size-4 text-ink-4`}):null,(0,K.jsx)(`span`,{className:`hidden md:inline-flex`,children:(0,K.jsx)(No,{remote:se,merged:ce})}),(0,K.jsxs)(`div`,{className:`ml-auto flex items-center gap-2`,children:[(0,K.jsx)(`a`,{href:s(`/api/studio/wizards/${j.id}/export`),download:!0,"aria-label":W(`editor.export`),title:W(`editor.export`),className:`hidden size-9 shrink-0 items-center justify-center rounded-full text-ink-3 transition hover:bg-accent hover:text-ink sm:inline-flex`,children:(0,K.jsx)(Te,{className:`size-4`})}),(0,K.jsxs)(H,{variant:`secondary`,size:`sm`,disabled:N||M||ge,busy:k.isPending,onClick:()=>k.mutate(),children:[(0,K.jsx)(tt,{className:`size-3.5`}),` `,W(`editor.test`)]}),j.published&&(!j.dirty||j.readOnly)?(0,K.jsxs)(H,{size:`sm`,onClick:()=>T(!0),children:[(0,K.jsx)(ee,{className:`size-3.5`}),` `,W(`editor.share`)]}):j.readOnly?null:(0,K.jsxs)(K.Fragment,{children:[P?(0,K.jsx)(R,{label:W(`editor.share`),className:`max-sm:hidden`,onClick:()=>T(!0),children:(0,K.jsx)(ee,{className:`size-4`})}):null,(0,K.jsx)(H,{size:`sm`,disabled:N||M,busy:A.isPending,onClick:()=>A.mutate(),children:W(`editor.publish`)})]}),(0,K.jsx)(`span`,{className:`ml-2 hidden md:inline-flex`,children:(0,K.jsx)(Oe,{me:a.data})}),(0,K.jsx)(`span`,{className:`hidden sm:inline-flex`,children:(0,K.jsx)(De,{me:a.data})})]})]}),(0,K.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col lg:flex-row`,children:[(0,K.jsxs)(`section`,{className:`relative min-h-[45vh] flex-1 overflow-hidden lg:min-h-0`,children:[N&&!M?(0,K.jsxs)(`div`,{className:`absolute top-3 right-3 left-3 z-10 mx-auto max-w-xl animate-rise rounded-xl bg-card p-4 shadow-elevated ring-1 ring-rose/30`,children:[(0,K.jsx)(`p`,{className:`text-[14px]`,children:W(`editor.issues`)}),(0,K.jsx)(`ul`,{className:`mt-2 list-disc pl-5 text-[13px] text-ink-2`,children:j.issues.slice(0,4).map((e,t)=>(0,K.jsx)(`li`,{children:e.message},t))}),j.readOnly?null:(0,K.jsx)(H,{size:`sm`,variant:`quiet`,className:`mt-3`,disabled:O.phase!==`idle`,onClick:()=>{b(`chat`),O.send(`Bitte behebe diese Probleme im Wizard:\n${j.issues.map(e=>`- ${e.message}`).join(`
2
+ `)}`)},children:W(`editor.fixWithChat`)})]}):null,!N&&!M&&he.length?(0,K.jsxs)(`div`,{className:F(`absolute top-3 right-3 left-3 z-10 mx-auto max-w-xl animate-rise rounded-xl bg-card p-4 shadow-elevated ring-1`,ge?`ring-rose/30`:`ring-amber/30`),children:[(0,K.jsx)(`p`,{className:`text-[14px]`,children:W(ge?`editor.models.blocking`:`editor.models.optional`)}),(0,K.jsx)(`ul`,{className:`mt-2 list-disc pl-5 text-[13px] text-ink-2`,children:he.map(e=>(0,K.jsxs)(`li`,{children:[(0,K.jsx)(`span`,{className:`text-ink`,children:W(`class.${e.cls}`)}),` (`,e.steps.map(e=>`„${e.title}“`).join(`, `),`): `,e.problem]},e.cls))}),(0,K.jsx)(H,{size:`sm`,variant:`quiet`,className:`mt-3`,onClick:()=>t(`/settings/models`),children:W(`editor.models.settings`)})]}):null,M?(0,K.jsx)(`div`,{className:`flex h-full items-center justify-center px-6 text-[14px] text-ink-3`,children:(0,K.jsx)(de,{chat:O,spinner:`size-4 text-ember`})}):(0,K.jsx)(ua,{def:ve,selected:g,onSelect:I,issueSteps:_e,activeStep:E?ne:null,pulse:se?.steps,wizardId:j.id})]}),(0,K.jsxs)(`aside`,{className:`relative flex h-[55vh] min-h-0 w-full shrink-0 flex-col bg-card shadow-[0_0_0_1px_var(--border-soft)] lg:h-auto lg:w-(--pane) lg:rounded-tl-3xl`,style:{"--pane":`${C.width}px`},children:[(0,K.jsx)(`div`,{role:`separator`,"aria-orientation":`vertical`,"aria-label":W(`editor.resize`),"aria-valuenow":C.width,tabIndex:0,title:W(`editor.resize`),onPointerDown:C.onPointerDown,onKeyDown:C.onKeyDown,onDoubleClick:C.reset,className:`group -left-1.5 absolute inset-y-0 z-10 hidden w-5 cursor-col-resize outline-none lg:block`,children:(0,K.jsx)(`span`,{className:`-translate-y-1/2 absolute top-1/2 left-[9px] h-12 w-1.5 rounded-full bg-ink-4/40 transition group-hover:bg-ember/70 group-focus-visible:bg-ember group-active:h-16 group-active:bg-ember`})}),(0,K.jsx)(`nav`,{className:`flex shrink-0 gap-1 px-3 pt-3`,children:[`chat`,`step`,`files`,`runs`].map(e=>(0,K.jsx)(`button`,{type:`button`,onClick:()=>b(e),className:F(`h-9 rounded-full px-4 font-medium text-[13px] transition`,y===e?`bg-paper-2 text-ink`:`text-ink-3 hover:text-ink`),children:W(Po[e])},e))}),(0,K.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:y===`chat`?(0,K.jsx)(fe,{chat:O,avatar:ve.avatar,closed:xe??void 0}):y===`step`?(0,K.jsx)(Ea,{def:ve,selected:g,update:ae,onSelect:I,issues:j.issues,mcpServers:j.mcpServers,files:j.files,wizardId:j.id,readOnly:j.readOnly}):y===`files`?(0,K.jsx)(ot,{wizardId:j.id,files:j.files,readOnly:j.readOnly}):(0,K.jsx)(ka,{wizardId:j.id,onOpen:te})})]})]}),E?(0,K.jsx)(`div`,{className:`fixed inset-0 z-50 flex justify-end bg-[oklch(20%_0.01_60/0.22)] backdrop-blur-[1px]`,onClick:()=>te(null),children:(0,K.jsxs)(`div`,{className:`flex h-full w-full max-w-[680px] animate-rise flex-col bg-background shadow-overlay`,onClick:e=>e.stopPropagation(),children:[(0,K.jsxs)(`div`,{className:`flex h-14 shrink-0 items-center justify-between px-4`,children:[(0,K.jsx)(B,{children:`Test`}),(0,K.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,K.jsx)(H,{variant:`ghost`,size:`sm`,busy:k.isPending,disabled:N,onClick:()=>k.mutate(),children:W(`editor.restart`)}),(0,K.jsx)(R,{label:W(`editor.close`),onClick:()=>te(null),children:(0,K.jsx)(Ee,{className:`size-5`})})]})]}),(0,K.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:(0,K.jsx)(x,{runId:E,compact:!0,onRestart:()=>k.mutate(),onView:ie},E)})]})}):null,(0,K.jsx)(Oo,{wizard:j,open:w,onClose:()=>T(!1)})]})}export{Vo as EditorPage};
@@ -1 +1 @@
1
- import{a as e,n as t,t as n}from"./jsx-runtime-D3jfb0Ew.js";import{h as r}from"./ui-Cs6lpsmj.js";import{a as i,c as a,i as o,n as s,r as c,s as l,t as u}from"./esm-rJY59Ixx.js";var d=e(t(),1),f=e(n(),1),p=208,m=42,h=26,g=22,_=132;function v({data:e}){let t=e.icon;return(0,f.jsxs)(`div`,{style:{width:p,height:m},className:r(`flex cursor-default items-center gap-2.5 rounded-xl px-2.5`,e.optional?`border border-ink-4 border-dashed`:`bg-paper-2 ring-1 ring-border-soft`),children:[(0,f.jsx)(c,{type:`target`,position:a.Top}),(0,f.jsx)(c,{type:`target`,id:`in`,position:a.Right}),(0,f.jsx)(`span`,{className:r(`inline-flex size-6 shrink-0 items-center justify-center rounded-md`,e.tone),children:(0,f.jsx)(t,{className:`size-3.5`})}),(0,f.jsx)(`span`,{className:`truncate font-medium text-[13px] text-ink`,children:e.title}),(0,f.jsx)(c,{type:`source`,position:a.Bottom}),(0,f.jsx)(c,{type:`source`,id:`out`,position:a.Right})]})}function y({sourceX:e,sourceY:t,targetX:n,targetY:r,label:i,markerEnd:a}){let o=Math.max(e,n)+g,c=[`M ${e} ${t}`,`H ${o-8}`,`Q ${o} ${t} ${o} ${t+8}`,`V ${r-8}`,`Q ${o} ${r} ${o-8} ${r}`,`H ${n}`].join(` `);return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(u,{path:c,markerEnd:a,style:{strokeDasharray:`5 4`}}),(0,f.jsx)(s,{children:(0,f.jsx)(`div`,{style:{width:_,transform:`translate(${o+8}px, ${(t+r)/2}px) translateY(-50%)`},className:`absolute text-[11px] text-ink-2 leading-snug`,children:i})})]})}var b={step:v},x={branch:y};function S(e){let t={markerEnd:{type:l.ArrowClosed,width:14,height:14,color:`var(--ink-4)`}},n=e.map((e,t)=>({id:e.id,type:`step`,position:{x:0,y:t*68},data:{title:e.title,icon:e.icon,tone:e.tone,optional:e.optional},draggable:!1})),r=[],i=!1;return e.forEach((n,a)=>{let o=e[a+1];for(let[a,o]of(n.branches??[]).entries())e.some(e=>e.id===o.to)&&(i=!0,r.push({id:`b-${n.id}-${a}`,type:`branch`,source:n.id,sourceHandle:`out`,target:o.to,targetHandle:`in`,label:o.when,...t}));o&&r.push({id:`n-${n.id}`,type:`straight`,source:n.id,target:o.id,...t})}),{nodes:n,edges:r,width:p+(i?162:0),height:e.length*68-h}}function C({steps:e}){let{nodes:t,edges:n,width:r,height:a}=(0,d.useMemo)(()=>S(e),[e]);return e.length?(0,f.jsx)(`div`,{className:`max-w-full`,style:{width:r,height:a+4},children:(0,f.jsx)(o,{children:(0,f.jsx)(i,{nodes:t,edges:n,nodeTypes:b,edgeTypes:x,defaultViewport:{x:1,y:2,zoom:1},minZoom:1,maxZoom:1,nodesConnectable:!1,nodesDraggable:!1,nodesFocusable:!1,edgesFocusable:!1,elementsSelectable:!1,panOnDrag:!1,panOnScroll:!1,zoomOnScroll:!1,zoomOnPinch:!1,zoomOnDoubleClick:!1,preventScrolling:!1,proOptions:{hideAttribution:!0}})})}):null}export{C as default};
1
+ import{a as e,n as t,t as n}from"./jsx-runtime-D3jfb0Ew.js";import{h as r}from"./ui-C3bTWmdM.js";import{a as i,c as a,i as o,n as s,r as c,s as l,t as u}from"./esm-rJY59Ixx.js";var d=e(t(),1),f=e(n(),1),p=208,m=42,h=26,g=22,_=132;function v({data:e}){let t=e.icon;return(0,f.jsxs)(`div`,{style:{width:p,height:m},className:r(`flex cursor-default items-center gap-2.5 rounded-xl px-2.5`,e.optional?`border border-ink-4 border-dashed`:`bg-paper-2 ring-1 ring-border-soft`),children:[(0,f.jsx)(c,{type:`target`,position:a.Top}),(0,f.jsx)(c,{type:`target`,id:`in`,position:a.Right}),(0,f.jsx)(`span`,{className:r(`inline-flex size-6 shrink-0 items-center justify-center rounded-md`,e.tone),children:(0,f.jsx)(t,{className:`size-3.5`})}),(0,f.jsx)(`span`,{className:`truncate font-medium text-[13px] text-ink`,children:e.title}),(0,f.jsx)(c,{type:`source`,position:a.Bottom}),(0,f.jsx)(c,{type:`source`,id:`out`,position:a.Right})]})}function y({sourceX:e,sourceY:t,targetX:n,targetY:r,label:i,markerEnd:a}){let o=Math.max(e,n)+g,c=[`M ${e} ${t}`,`H ${o-8}`,`Q ${o} ${t} ${o} ${t+8}`,`V ${r-8}`,`Q ${o} ${r} ${o-8} ${r}`,`H ${n}`].join(` `);return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(u,{path:c,markerEnd:a,style:{strokeDasharray:`5 4`}}),(0,f.jsx)(s,{children:(0,f.jsx)(`div`,{style:{width:_,transform:`translate(${o+8}px, ${(t+r)/2}px) translateY(-50%)`},className:`absolute text-[11px] text-ink-2 leading-snug`,children:i})})]})}var b={step:v},x={branch:y};function S(e){let t={markerEnd:{type:l.ArrowClosed,width:14,height:14,color:`var(--ink-4)`}},n=e.map((e,t)=>({id:e.id,type:`step`,position:{x:0,y:t*68},data:{title:e.title,icon:e.icon,tone:e.tone,optional:e.optional},draggable:!1})),r=[],i=!1;return e.forEach((n,a)=>{let o=e[a+1];for(let[a,o]of(n.branches??[]).entries())e.some(e=>e.id===o.to)&&(i=!0,r.push({id:`b-${n.id}-${a}`,type:`branch`,source:n.id,sourceHandle:`out`,target:o.to,targetHandle:`in`,label:o.when,...t}));o&&r.push({id:`n-${n.id}`,type:`straight`,source:n.id,target:o.id,...t})}),{nodes:n,edges:r,width:p+(i?162:0),height:e.length*68-h}}function C({steps:e}){let{nodes:t,edges:n,width:r,height:a}=(0,d.useMemo)(()=>S(e),[e]);return e.length?(0,f.jsx)(`div`,{className:`max-w-full`,style:{width:r,height:a+4},children:(0,f.jsx)(o,{children:(0,f.jsx)(i,{nodes:t,edges:n,nodeTypes:b,edgeTypes:x,defaultViewport:{x:1,y:2,zoom:1},minZoom:1,maxZoom:1,nodesConnectable:!1,nodesDraggable:!1,nodesFocusable:!1,edgesFocusable:!1,elementsSelectable:!1,panOnDrag:!1,panOnScroll:!1,zoomOnScroll:!1,zoomOnPinch:!1,zoomOnDoubleClick:!1,preventScrolling:!1,proOptions:{hideAttribution:!0}})})}):null}export{C as default};
@@ -0,0 +1 @@
1
+ import{a as e,n as t,t as n}from"./jsx-runtime-D3jfb0Ew.js";import{O as r,a as i,d as a,j as o,n as s,nt as c,w as l}from"./api-BTfKh3La.js";import{c as u,d,l as f,o as p}from"./session-D_Zggq_t.js";import{t as m}from"./createLucideIcon-q3MZMmnf.js";import{t as h}from"./check-CUpby_J9.js";import{n as g,t as _}from"./plus-Du-Jx8aI.js";import{_ as v,a as y,i as b,n as x,o as S,r as C,s as w,t as T,u as E,y as D}from"./ui-C3bTWmdM.js";import{r as O}from"./LocalRuntime-BjzPSsHr.js";import{t as k}from"./ImportWizard-D6y4bKlF.js";var A={name:`arrow-up-right`,size:24,node:[[`path`,{d:`M7 7h10v10`,key:`1tivn9`}],[`path`,{d:`M7 17 17 7`,key:`1vkiza`}]]};A.node;var j=m(A),M=e(t(),1),N=e(n(),1);function P(){let{project:e,projects:t,select:n}=p(),r=f().data?.limits.projects??1,i=u(),a=c(),[o,l]=(0,M.useState)(!1),[m,h]=(0,M.useState)(``),g=d({mutationFn:()=>s.post(`/api/studio/projects`,{name:m}),onSuccess:async({id:e})=>{await a.invalidateQueries({queryKey:[`projects`]}),n(e),l(!1),h(``)}});return!e||r<=1?null:(0,N.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,N.jsx)(E,{className:`w-56`,value:e.id,onChange:e=>e===`__new`?l(!0):n(e),options:[...t.map(e=>({value:e.id,label:e.name})),...i?[t.length<r?{value:`__new`,label:`+ ${D(`home.newProject`)}`}:{value:`__new`,label:D(`home.projectLimit`,{n:r}),disabled:!0}]:[]]}),(0,N.jsx)(b,{open:o,onClose:()=>l(!1),title:D(`home.newProject`),children:(0,N.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),m.trim()&&g.mutate()},children:[(0,N.jsx)(w,{autoFocus:!0,placeholder:D(`home.projectName`),value:m,onChange:e=>h(e.target.value)}),(0,N.jsxs)(`div`,{className:`mt-5 flex justify-end gap-2`,children:[(0,N.jsx)(T,{variant:`ghost`,onClick:()=>l(!1),children:D(`common.cancel`)}),(0,N.jsx)(T,{type:`submit`,busy:g.isPending,disabled:!m.trim(),children:D(`home.newProject`)})]})]})})]})}function F({token:e}){let[t,n]=(0,M.useState)(!1);return(0,N.jsxs)(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),navigator.clipboard.writeText(`${window.location.origin}${i}/w/${e}`),n(!0),setTimeout(()=>n(!1),1500)},className:`inline-flex h-8 items-center gap-1.5 rounded-full px-3 text-[13px] text-ink-3 hover:bg-accent hover:text-ink`,children:[t?(0,N.jsx)(h,{className:`size-3.5`}):(0,N.jsx)(g,{className:`size-3.5`}),D(t?`share.copied`:`share.link`)]})}function I({w:e}){let t=r();return(0,N.jsxs)(x,{className:`flex cursor-pointer flex-col p-5 transition hover:shadow-elevated`,onClick:()=>t(`/edit/${e.id}`),children:[(0,N.jsxs)(`div`,{className:`flex items-start justify-between`,children:[(0,N.jsx)(`div`,{className:`-ml-1 -mt-1`,children:(0,N.jsx)(a,{kind:e.avatar,size:52,interactive:!1})}),e.published?(0,N.jsx)(C,{tone:`live`,children:D(`home.live`)}):(0,N.jsx)(C,{children:D(`home.draft`)})]}),(0,N.jsx)(`h3`,{className:`mt-3 font-display font-semibold text-[17px] leading-snug`,children:e.title}),(0,N.jsx)(`p`,{className:`mt-1 line-clamp-2 min-h-[2.6em] text-[14px] text-ink-3`,children:e.description}),(0,N.jsxs)(`div`,{className:`mt-4 flex items-center justify-between`,children:[(0,N.jsx)(`span`,{className:`text-[12px] text-ink-4`,children:D(`home.steps`,{n:e.stepCount})}),(0,N.jsx)(`div`,{className:`flex items-center`,children:e.published?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(F,{token:e.shareToken}),(0,N.jsx)(S,{label:D(`share.open`),className:`ml-1 size-8`,onClick:t=>{t.stopPropagation(),O(`${window.location.origin}${i}/w/${e.shareToken}`)},children:(0,N.jsx)(j,{className:`size-4`})})]}):null})]})]})}var L=`curl -fsSL https://engenty.ai/install.sh | bash`;function R(){let[e,t]=(0,M.useState)(!1),n=[D(`home.local.install`),D(`home.local.signIn`),D(`home.local.publish`)];return(0,N.jsxs)(`div`,{className:`mx-auto flex max-w-xl animate-rise flex-col items-center pt-4 text-center`,children:[(0,N.jsx)(a,{kind:`round`,size:120}),(0,N.jsx)(`h1`,{className:`mt-2 font-display font-semibold text-[28px] leading-tight tracking-tight`,children:D(`home.local.title`)}),(0,N.jsx)(`p`,{className:`mt-3 text-[15px] text-ink-2 leading-relaxed`,children:D(`home.local.text`)}),(0,N.jsx)(`ol`,{className:`mt-8 flex w-full flex-col gap-4 text-left`,children:n.map((n,r)=>(0,N.jsxs)(`li`,{className:`flex gap-3`,children:[(0,N.jsx)(`span`,{className:`flex size-7 shrink-0 items-center justify-center rounded-full bg-paper-2 font-medium text-[13px] text-ink-2`,children:r+1}),(0,N.jsxs)(`div`,{className:`min-w-0 flex-1 pt-0.5`,children:[(0,N.jsx)(`p`,{className:`text-[15px] leading-snug`,children:n}),r===0?(0,N.jsxs)(`div`,{className:`mt-2 flex items-center gap-2 rounded-lg bg-paper-2 py-1.5 pr-1.5 pl-3`,children:[(0,N.jsx)(`code`,{className:`min-w-0 flex-1 select-all overflow-x-auto whitespace-nowrap font-mono text-[13px] text-ink-2`,children:L}),(0,N.jsxs)(T,{variant:`secondary`,size:`sm`,onClick:()=>{navigator.clipboard.writeText(L),t(!0),setTimeout(()=>t(!1),1500)},children:[e?(0,N.jsx)(h,{className:`size-3.5`}):(0,N.jsx)(g,{className:`size-3.5`}),D(e?`share.copied`:`share.copy`)]})]}):null]})]},n))})]})}function z(){let e=r(),{project:t,projects:n,loading:i}=p(),a=u(),c=o({queryKey:[`wizards`,t?.id],queryFn:()=>s.get(`/api/studio/projects/${t.id}/wizards`),enabled:!!t}),d=n.reduce((e,t)=>e+t.wizardCount,0),f=a&&!t?.readOnly;return!i&&f&&n.length&&d===0?(0,N.jsx)(l,{to:`/new`,replace:!0}):!i&&!a&&n.length===0?(0,N.jsx)(R,{}):(0,N.jsxs)(`div`,{className:`animate-rise`,children:[(0,N.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-4`,children:[(0,N.jsx)(`div`,{children:(0,N.jsx)(P,{})}),f?(0,N.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,N.jsx)(k,{}),(0,N.jsxs)(T,{onClick:()=>e(`/new`),children:[(0,N.jsx)(_,{className:`size-4`}),` `,D(`home.new`)]})]}):null]}),(0,N.jsx)(`h1`,{className:`mt-10 font-display font-semibold text-[28px] tracking-tight`,children:D(`home.title`)}),t?.origin===`local`?(0,N.jsxs)(`p`,{className:`mt-2 text-[14px] text-ink-3`,children:[D(`home.fromLocal`),` `,t.syncedAt?D(`home.syncedAt`,{when:new Intl.DateTimeFormat(v,{dateStyle:`medium`,timeStyle:`short`}).format(new Date(t.syncedAt))}):null]}):null,c.data&&c.data.length===0?(0,N.jsx)(y,{children:D(`home.empty`)}):null,(0,N.jsx)(`div`,{className:`mt-6 grid gap-4 sm:grid-cols-2 lg:grid-cols-3`,children:c.data?.map(e=>(0,N.jsx)(I,{w:e},e.id))})]})}export{z as HomePage,P as ProjectSwitcher};
@@ -0,0 +1 @@
1
+ import{a as e,n as t,t as n}from"./jsx-runtime-D3jfb0Ew.js";import{O as r,n as i,nt as a,t as o}from"./api-BTfKh3La.js";import{c as s,d as c,o as l}from"./session-D_Zggq_t.js";import{t as u}from"./upload--J5bZhEM.js";import{i as d,t as f,y as p}from"./ui-C3bTWmdM.js";var m=e(t(),1),h=e(n(),1);function g({variant:e=`secondary`,label:t=p(`home.import`)}){let n=r(),g=a(),{project:_}=l(),v=s(),y=(0,m.useRef)(null),b=c({mutationFn:e=>i.upload(`/api/studio/projects/${_.id}/wizards/import`,e),onSuccess:async({id:e})=>{await g.invalidateQueries({queryKey:[`projects`]}),await g.invalidateQueries({queryKey:[`wizards`]}),n(`/edit/${e}`)}}),x=b.error instanceof o?b.error.body?.issues??[]:[];return!v||_?.readOnly?null:(0,h.jsxs)(h.Fragment,{children:[(0,h.jsxs)(f,{variant:e,busy:b.isPending,disabled:!_,onClick:()=>y.current?.click(),children:[(0,h.jsx)(u,{className:`size-4`}),` `,t]}),(0,h.jsx)(`input`,{ref:y,hidden:!0,type:`file`,onChange:e=>{let t=e.target.files?.[0];e.target.value=``,t&&b.mutate(t)}}),(0,h.jsxs)(d,{open:b.isError,onClose:b.reset,title:p(`import.failed`),children:[(0,h.jsx)(`p`,{className:`text-[14px] text-ink-2`,children:b.error?.message}),x.length?(0,h.jsx)(`ul`,{className:`mt-3 flex list-disc flex-col gap-1 pl-5 text-[13px] text-ink-2`,children:x.slice(0,8).map(e=>(0,h.jsx)(`li`,{children:e.message},e.message))}):null,(0,h.jsx)(`div`,{className:`mt-5 flex justify-end`,children:(0,h.jsx)(f,{variant:`secondary`,onClick:b.reset,children:p(`common.close`)})})]})]})}export{g as t};