@popcorn245/cornfield-components 0.50.1 → 0.51.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -95,7 +95,7 @@ function n({ root: n = null, base: r = "", fetch: i, strings: a = {}, state: o }
95
95
  }, y = () => s ? s.nodeType === 9 ? s.documentElement : s.nodeType === 11 ? s.host : s : null, b = o || e(), x = b.selectedNode || null, S = b.selectedEdge || null, C = {
96
96
  node: x,
97
97
  edge: S
98
- }, w = [], T = !1, ee = (e, t) => (e.node ? e.node.id : null) !== (t.node ? t.node.id : null) || e.edge !== t.edge, E = (e) => {
98
+ }, w = [], T = !1, E = (e, t) => (e.node ? e.node.id : null) !== (t.node ? t.node.id : null) || e.edge !== t.edge, D = (e) => {
99
99
  if (w.push(e), !T) {
100
100
  T = !0;
101
101
  try {
@@ -104,9 +104,9 @@ function n({ root: n = null, base: r = "", fetch: i, strings: a = {}, state: o }
104
104
  node: x,
105
105
  edge: S
106
106
  };
107
- if (p || !ee(C, t)) continue;
107
+ if (p || !E(C, t)) continue;
108
108
  let n = C;
109
- C = t, O.emit("selection", {
109
+ C = t, k.emit("selection", {
110
110
  ...t,
111
111
  previous: n,
112
112
  source: e
@@ -116,17 +116,17 @@ function n({ root: n = null, base: r = "", fetch: i, strings: a = {}, state: o }
116
116
  T = !1;
117
117
  }
118
118
  }
119
- }, D = (e, t, n, r) => {
119
+ }, O = (e, t, n, r) => {
120
120
  let i = {
121
121
  node: x,
122
122
  edge: S
123
123
  };
124
124
  x = e || null, S = t || null;
125
- let a = ee(i, {
125
+ let a = E(i, {
126
126
  node: x,
127
127
  edge: S
128
128
  }), o = !1, s = () => {
129
- o || (o = !0, a && E(n));
129
+ o || (o = !0, a && D(n));
130
130
  };
131
131
  return r || s(), {
132
132
  changed: a,
@@ -139,17 +139,17 @@ function n({ root: n = null, base: r = "", fetch: i, strings: a = {}, state: o }
139
139
  configurable: !0,
140
140
  get: () => x,
141
141
  set: (e) => {
142
- D(e, S, "state", !1);
142
+ O(e, S, "state", !1);
143
143
  }
144
144
  }), Object.defineProperty(b, "selectedEdge", {
145
145
  enumerable: !0,
146
146
  configurable: !0,
147
147
  get: () => S,
148
148
  set: (e) => {
149
- D(x, e, "state", !1);
149
+ O(x, e, "state", !1);
150
150
  }
151
151
  });
152
- let O = {
152
+ let k = {
153
153
  root: s,
154
154
  doc: c,
155
155
  win: l,
@@ -161,7 +161,7 @@ function n({ root: n = null, base: r = "", fetch: i, strings: a = {}, state: o }
161
161
  return (m || globalThis.fetch)(typeof e == "string" ? v(e) : e, t);
162
162
  },
163
163
  touchScene() {
164
- O.state.sceneVersion++;
164
+ k.state.sceneVersion++;
165
165
  let e = u.get("scene");
166
166
  e && e.forEach((e) => e());
167
167
  },
@@ -178,13 +178,13 @@ function n({ root: n = null, base: r = "", fetch: i, strings: a = {}, state: o }
178
178
  if (n !== void 0) return n;
179
179
  }
180
180
  },
181
- setSelection: (e, t = null, { source: n = "api", quiet: r = !1 } = {}) => D(e, t, n, r),
181
+ setSelection: (e, t = null, { source: n = "api", quiet: r = !1 } = {}) => O(e, t, n, r),
182
182
  el: (e) => s ? s.querySelector(`[id="${String(e).replace(/["\\]/g, "\\$&")}"]`) : null,
183
183
  attach(e) {
184
184
  if (g) throw Error("This instance already has a map");
185
- g = e, s = e, O.root = e;
185
+ g = e, s = e, k.root = e;
186
186
  let t = () => {
187
- g === e && (g = null, s = h, O.root = h, O.release(t), p || O.emit("attach:released"));
187
+ g === e && (g = null, s = h, k.root = h, k.release(t), p || k.emit("attach:released"));
188
188
  };
189
189
  return d.push(t), t;
190
190
  },
@@ -205,24 +205,24 @@ function n({ root: n = null, base: r = "", fetch: i, strings: a = {}, state: o }
205
205
  dpr: () => l && l.devicePixelRatio || 1,
206
206
  hidden: () => !(!c || !c.hidden && c.visibilityState !== "hidden"),
207
207
  onShown(e) {
208
- return c ? O.listen(c, "visibilitychange", () => {
209
- O.hidden() || e();
208
+ return c ? k.listen(c, "visibilitychange", () => {
209
+ k.hidden() || e();
210
210
  }) : () => {};
211
211
  },
212
212
  offline: () => !!(l && l.navigator && l.navigator.onLine === !1),
213
213
  onNetwork(e) {
214
214
  if (!l) return () => {};
215
- let t = [O.listen(l, "offline", () => e(!0)), O.listen(l, "online", () => e(!1))];
215
+ let t = [k.listen(l, "offline", () => e(!0)), k.listen(l, "online", () => e(!1))];
216
216
  return () => t.forEach((e) => e());
217
217
  },
218
- onWindowFocus: (e) => l ? O.listen(l, "focus", () => e()) : () => {},
219
- onPageHide: (e) => l ? O.listen(l, "pagehide", () => e()) : () => {},
220
- onResize: (e) => l ? O.listen(l, "resize", () => e()) : () => {},
221
- onPageShow: (e) => l ? O.listen(l, "pageshow", () => e()) : () => {},
222
- onPageFocus: (e) => c ? O.listen(c, "focusin", (t) => e(t)) : () => {},
218
+ onWindowFocus: (e) => l ? k.listen(l, "focus", () => e()) : () => {},
219
+ onPageHide: (e) => l ? k.listen(l, "pagehide", () => e()) : () => {},
220
+ onResize: (e) => l ? k.listen(l, "resize", () => e()) : () => {},
221
+ onPageShow: (e) => l ? k.listen(l, "pageshow", () => e()) : () => {},
222
+ onPageFocus: (e) => c ? k.listen(c, "focusin", (t) => e(t)) : () => {},
223
223
  onHide(e) {
224
- return c ? O.listen(c, "visibilitychange", () => {
225
- O.hidden() && e();
224
+ return c ? k.listen(c, "visibilitychange", () => {
225
+ k.hidden() && e();
226
226
  }) : () => {};
227
227
  },
228
228
  store: {
@@ -247,7 +247,7 @@ function n({ root: n = null, base: r = "", fetch: i, strings: a = {}, state: o }
247
247
  listen(e, t, n, r) {
248
248
  e.addEventListener(t, n, r);
249
249
  let i = () => {
250
- e.removeEventListener(t, n, r), O.release(i);
250
+ e.removeEventListener(t, n, r), k.release(i);
251
251
  };
252
252
  return d.push(i), i;
253
253
  },
@@ -259,7 +259,7 @@ function n({ root: n = null, base: r = "", fetch: i, strings: a = {}, state: o }
259
259
  t >= 0 && d.splice(t, 1);
260
260
  },
261
261
  slot(e, t) {
262
- return f.has(e) || f.set(e, t(O)), f.get(e);
262
+ return f.has(e) || f.set(e, t(k)), f.get(e);
263
263
  },
264
264
  get ended() {
265
265
  return p;
@@ -274,9 +274,9 @@ function n({ root: n = null, base: r = "", fetch: i, strings: a = {}, state: o }
274
274
  u.clear(), f.clear();
275
275
  }
276
276
  },
277
- viewEdges: () => O.state.view === "dataflow" && O.state.flow ? O.state.flow.edges : O.state.edges
277
+ viewEdges: () => k.state.view === "dataflow" && k.state.flow ? k.state.flow.edges : k.state.edges
278
278
  };
279
- return O;
279
+ return k;
280
280
  }
281
281
  // ../explorer/flow-style.js
282
282
  var r = {
@@ -348,303 +348,27 @@ var r = {
348
348
  color: "#a8a29e",
349
349
  label: "App → the stack that serves its domain"
350
350
  }
351
- }, i = (e) => r[e.kind === "flow" ? e.flow : e.kind] || r.sync, a = {
352
- "&": "&",
353
- "<": "&lt;",
354
- ">": "&gt;",
355
- "\"": "&quot;",
356
- "'": "&#39;"
357
- };
358
- function o(e) {
359
- return String(e ?? "").replace(/[&<>"']/g, (e) => a[e]);
351
+ }, i = (e) => r[e.kind === "flow" ? e.flow : e.kind] || r.sync, a = (e) => e.mark === "edit" ? e.editOp || "none" : e.mark || "none", o = (e) => !!e && !!e.mark && e.mark !== "none";
352
+ function s(e, t) {
353
+ return e === "before" ? a(t) !== "added" : e !== "after" || a(t) !== "removed";
360
354
  }
361
- Object.freeze([
362
- "open",
363
- "merged",
364
- "closed",
365
- "draft",
366
- "queued",
367
- "running",
368
- "requested",
369
- "claimed",
370
- "working",
371
- "waiting",
372
- "done",
373
- "failed",
374
- "stopped",
375
- "success",
376
- "failure",
377
- "added",
378
- "changed",
379
- "removed",
380
- "edit",
381
- "sent-back"
382
- ]), Object.freeze([
383
- "added",
384
- "changed",
385
- "removed",
386
- "edit"
387
- ]), Object.freeze([
388
- "requested",
389
- "claimed",
390
- "working",
391
- "waiting",
392
- "done",
393
- "failed",
394
- "stopped"
395
- ]), Object.freeze({
396
- quiet: "waiting",
397
- "stop-requested": "stopped",
398
- neutral: "done",
399
- skipped: "done",
400
- cancelled: "stopped",
401
- approved: "success",
402
- unreviewed: "waiting",
403
- changed: "waiting",
404
- missing: "failure",
405
- allowed: "success",
406
- refused: "failure",
407
- mismatch: "failure",
408
- pending: "running",
409
- ok: "success",
410
- bad: "failure",
411
- stale: "waiting",
412
- off: "stopped",
413
- error: "failure",
414
- idle: "running"
415
- }), Object.freeze({
416
- requested: "<circle cx=\"6\" cy=\"6\" r=\"4.2\" stroke-dasharray=\"2 1.8\"/>",
417
- queued: "<circle cx=\"6\" cy=\"6\" r=\"4.2\" stroke-dasharray=\"2 1.8\"/>",
418
- claimed: "<circle cx=\"6\" cy=\"6\" r=\"4.2\"/><circle cx=\"6\" cy=\"6\" r=\"1.4\" fill=\"currentColor\" stroke=\"none\"/>",
419
- working: "<path class=\"hx-state-spin\" d=\"M6 1.8a4.2 4.2 0 1 1-4.2 4.2\"/>",
420
- running: "<path class=\"hx-state-spin\" d=\"M6 1.8a4.2 4.2 0 1 1-4.2 4.2\"/>",
421
- waiting: "<path d=\"M6 1.2L11 10.4H1Z\" stroke-linejoin=\"round\"/><path d=\"M6 4.6v2.7M6 8.6v.1\"/>",
422
- done: "<path d=\"M2 6.4l2.6 2.6L10 3.4\"/>",
423
- success: "<path d=\"M2 6.4l2.6 2.6L10 3.4\"/>",
424
- failed: "<path d=\"M2.6 2.6l6.8 6.8M9.4 2.6L2.6 9.4\"/>",
425
- failure: "<path d=\"M2.6 2.6l6.8 6.8M9.4 2.6L2.6 9.4\"/>",
426
- stopped: "<rect x=\"2.4\" y=\"2.4\" width=\"7.2\" height=\"7.2\" rx=\"1\" fill=\"currentColor\"/>",
427
- neutral: "<path d=\"M2.4 6h7.2\"/>",
428
- skipped: "<path d=\"M2.4 6h7.2\"/>",
429
- cancelled: "<circle cx=\"6\" cy=\"6\" r=\"4.2\"/><path d=\"M3 9L9 3\"/>",
430
- "sent-back": "<path d=\"M4.6 2.2L2 4.8l2.6 2.6\"/><path d=\"M2.2 4.8H7a2.8 2.8 0 0 1 0 5.6H4.6\"/>"
431
- }), Object.freeze([
432
- ["code", "Code: a branch and a pull request"],
433
- ["summary", "Summary of the conversation"],
434
- ["brief", "A brief for another run"],
435
- ["proposal", "A proposal drafted from the thread"]
436
- ]), Object.freeze({
437
- merged: "done",
438
- closed: "stopped",
439
- quiet: "waiting",
440
- "stop-requested": "stopped"
441
- }), Object.freeze([
442
- "minutes",
443
- "turns",
444
- "cost",
445
- "tokens"
446
- ]);
447
- // ../core/strings.js
448
- var s = Object.freeze({
449
- layers: "Layers",
450
- layersAll: "All",
451
- layersNone: "None",
452
- overlays: "Overlays",
453
- dataFlow: "Flow",
454
- house: "House",
455
- proposals: "Proposals",
456
- issuesAndPrs: "Work",
457
- searchPlaceholder: "Search...",
458
- searchNoMatch: "No match for",
459
- signOut: "Sign out",
460
- poweredBy: "powered by cornfield",
461
- before: "Before",
462
- diff: "Diff",
463
- after: "After",
464
- closeProposal: "Close",
465
- approve: "Approve",
466
- sendBack: "Send back",
467
- sendBackWithNote: "Send back with this note",
468
- approveAnyway: "Approve anyway",
469
- sendBackAnyway: "Send back anyway",
470
- undo: "Undo",
471
- approved: "Approved",
472
- myEdits: "My edits",
473
- showWholeMap: "Show the whole map",
474
- wholeMap: "Whole map",
475
- hiddenWhileReviewing: "hidden while reviewing",
476
- yourEdits: "Your edits",
477
- cancelLanding: "Cancel landing",
478
- queueIt: "Queue it",
479
- reviewNoteLabel: "Note for the drafting agent",
480
- reviewNotePlaceholder: "What should change?",
481
- openSpecsList: "Open the Specs list",
482
- changes: "Changes",
483
- personasAndScenarios: "Personas and scenarios",
484
- scenarios: "Scenarios",
485
- anyone: "Anyone",
486
- notInAnyScenario: "Not in any scenario",
487
- steps: "Steps",
488
- previousStep: "Previous",
489
- nextStep: "Next",
490
- pause: "Pause",
491
- play: "Play",
492
- playAgain: "Play again",
493
- nextScenario: "Next scenario",
494
- notChecked: "Not checked",
495
- tabSpecs: "Specs",
496
- tabPulls: "PRs",
497
- tabIssues: "Issues",
498
- tabThreads: "Threads",
499
- tabRuns: "Runs",
500
- tabDeploys: "Deploys",
501
- waitingOnYou: "waiting on you",
502
- toDecide: "To decide",
503
- withAgent: "With the agent",
504
- approvedGroup: "Approved",
505
- drafts: "Drafts",
506
- needsYou: "Needs you",
507
- inMotion: "In motion",
508
- finished: "Finished",
509
- answer: "Answer",
510
- newIdea: "New idea",
511
- landIt: "Land it",
512
- startAgent: "Start an agent",
513
- askRunner: "Ask the runner",
514
- startAgain: "Start again",
515
- stop: "Stop",
516
- continueRun: "Continue",
517
- reply: "Reply",
518
- openFile: "Open file",
519
- openRoute: "Open route",
520
- startRun: "Start a run",
521
- copySpec: "Copy Spec",
522
- frame: "Frame them",
523
- throughChildren: "Include its children's lines",
524
- hintInspect: "Click a node to see what it is",
525
- hintInspectTouch: "Tap a node to see what it is",
526
- hintDrag: "Drag nodes to move • Double-click to inspect",
527
- hintDragTouch: "Drag nodes to move • Double-tap to inspect",
528
- hintDataFlow: "Data flow: browser → servers → API → tables → services → outside",
529
- loading: "Loading topology.json …",
530
- errorTitle: "The map could not be loaded",
531
- retry: "Retry",
532
- sourceLoading: "Loading the map …",
533
- sourceSignedOut: "You are not signed in to cornfield",
534
- sourceSignInText: "This map is behind cornfield's sign-in.",
535
- sourceNotMaintainer: "This map is for the project's maintainers",
536
- sourceNotMaintainerText: "You are signed in to cornfield, but not as a maintainer.",
537
- sourceSignIn: "Sign in to cornfield",
538
- sourceNotListed: "This page is not listed by that cornfield",
539
- sourceNotListedHint: "Add this origin to embed.origins on the server:",
540
- sourceOffline: "The map cannot be reached",
541
- sourceOfflineText: "Check the connection, then try again.",
542
- sourceBadAddress: "That is not the address of a cornfield server",
543
- sourceVersion: "This map and its server are different versions",
544
- sourceSecondMap: "This scope already has a map"
545
- }), c = (e) => typeof e == "string" && Object.hasOwn(s, e), l = /* @__PURE__ */ RegExp("[\\u0000-\\u001f\\u007f-\\u009f\\u2028\\u2029]");
546
- function u(e) {
547
- return typeof e == "string" ? e.trim() ? l.test(e) ? "is one line of plain text (no line break or control character)" : [...e].length > 80 ? "is at most 80 characters" : null : "is empty (leave the key out to keep the default)" : "is text";
548
- }
549
- // ../explorer/engine/strings.js
550
- var d = (e, t) => c(t) && Object.hasOwn(e.strings, t) && !u(e.strings[t]);
551
- function f(e, t) {
552
- for (let t of Object.keys(e.strings)) delete e.strings[t];
553
- if (t && typeof t == "object" && !Array.isArray(t)) for (let [n, r] of Object.entries(t)) c(n) && !u(r) && (e.strings[n] = r);
554
- }
555
- function p(e, t) {
556
- return d(e, t) ? e.strings[t] : c(t) ? s[t] : String(t);
557
- }
558
- var m = [
559
- ["data-corn-string", (e, t) => {
560
- e.textContent = t;
561
- }],
562
- ["data-corn-string-aria-label", (e, t) => e.setAttribute("aria-label", t)],
563
- ["data-corn-string-placeholder", (e, t) => e.setAttribute("placeholder", t)]
564
- ];
565
- function h(e, t = e.root) {
566
- if (t && typeof t.querySelectorAll == "function") for (let [n, r] of m) for (let i of t.querySelectorAll(`[${n}]`)) {
567
- let t = i.getAttribute(n);
568
- d(e, t) && r(i, e.strings[t]);
569
- }
570
- }
571
- Object.freeze([
572
- {
573
- key: "decide",
574
- title: "toDecide"
575
- },
576
- {
577
- key: "agent",
578
- title: "withAgent"
579
- },
580
- {
581
- key: "approved",
582
- title: "approvedGroup"
583
- },
584
- {
585
- key: "drafts",
586
- title: "drafts"
587
- }
588
- ]), Object.freeze([
589
- {
590
- key: "needs",
591
- title: "needsYou"
592
- },
593
- {
594
- key: "motion",
595
- title: "inMotion"
596
- },
597
- {
598
- key: "finished",
599
- title: "finished"
600
- }
601
- ]), Object.freeze([
602
- "to-decide",
603
- "changed",
604
- "sent-back",
605
- "approved",
606
- "draft-pr",
607
- "local",
608
- "unknown"
609
- ]), Object.freeze({
610
- "to-decide": "To decide",
611
- changed: "Changed since approved",
612
- "sent-back": "Sent back",
613
- approved: "Approved",
614
- "draft-pr": "Draft PR",
615
- local: "Local",
616
- unknown: "Review state unknown"
617
- }), Object.freeze({
618
- "to-decide": "waiting",
619
- changed: "waiting",
620
- "sent-back": "sent-back",
621
- approved: "success",
622
- "draft-pr": "draft",
623
- local: "draft",
624
- unknown: "failure"
625
- });
626
- // ../explorer/proposal-model.js
627
- var g = (e) => !!e && !!e.mark && e.mark !== "none", _ = (e) => e.mark === "edit" ? e.editOp || "none" : e.mark || "none";
628
- function v(e, t) {
629
- return e === "before" ? _(t) !== "added" : e !== "after" || _(t) !== "removed";
355
+ function c(e, t) {
356
+ return s(e, t);
630
357
  }
631
- function y(e, t) {
632
- return v(e, t);
633
- }
634
- function b(e, t) {
358
+ function l(e, t) {
635
359
  let n = t.mark || "none";
636
360
  return n === "edit" ? "edit" : e === "diff" ? n : "none";
637
361
  }
638
- function x(e) {
362
+ function u(e) {
639
363
  if (e.mark !== "changed" || !e.before) return e;
640
364
  let t = { ...e };
641
365
  for (let [n, r] of Object.entries(e.before)) r === null ? delete t[n] : t[n] = r;
642
366
  return t;
643
367
  }
644
- function S(e, t) {
368
+ function d(e, t) {
645
369
  let n = /* @__PURE__ */ new Set();
646
- for (let t of e) g(t) && n.add(t.id);
647
- for (let e of t) g(e) && (n.add(e.from), n.add(e.to));
370
+ for (let t of e) o(t) && n.add(t.id);
371
+ for (let e of t) o(e) && (n.add(e.from), n.add(e.to));
648
372
  let r = new Set(n);
649
373
  for (let e of t) {
650
374
  let t = !e.kind && !e.dashed;
@@ -655,45 +379,48 @@ function S(e, t) {
655
379
  near: r
656
380
  };
657
381
  }
658
- var C = (e) => !e.kind && !e.dashed;
659
- function w(e, t, { gap: n = 74 } = {}) {
660
- let r = new Map(e.map((e) => [e.id, e])), i = e.filter((e) => _(e) !== "added"), a = e.filter((e) => _(e) === "added");
661
- if (!a.length) return;
662
- let o = new Set(i.map((e) => e.id)), s = (e) => {
663
- let n = t.find((t) => C(t) && t.to === e.id && r.has(t.from));
382
+ var f = (e) => !e.kind && !e.dashed;
383
+ function p(e, t, { gap: n = 74 } = {}) {
384
+ let r = new Map(e.map((e) => [e.id, e])), i = e.filter((e) => a(e) !== "added"), o = e.filter((e) => a(e) === "added");
385
+ if (!o.length) return;
386
+ let s = new Set(i.map((e) => e.id)), c = (e) => {
387
+ let n = t.find((t) => f(t) && t.to === e.id && r.has(t.from));
664
388
  if (n) return n.from;
665
389
  let i = t.find((t) => t.from === e.id && r.has(t.to) || t.to === e.id && r.has(t.from));
666
390
  return i ? i.from === e.id ? i.to : i.from : null;
667
- }, c = (e, t) => i.every((r) => Math.hypot(r.x - e, r.y - t) >= n), l = (e, t, r) => {
391
+ }, l = (e, t) => i.every((r) => Math.hypot(r.x - e, r.y - t) >= n), u = (e, t, r) => {
668
392
  let i = t === 0 && r === 0 ? -Math.PI / 2 : Math.atan2(r, t) || -Math.PI / 2, a = null;
669
393
  for (let o = 96; o <= 576; o += 40) {
670
394
  let s = Math.max(8, Math.round(2 * Math.PI * o / n));
671
395
  for (let n = 0; n < s; n++) {
672
- let l = Math.ceil(n / 2) * (n % 2 ? 1 : -1) * (2 * Math.PI / s), u = t + Math.cos(i + l) * o, d = r + Math.sin(i + l) * o;
396
+ let c = Math.ceil(n / 2) * (n % 2 ? 1 : -1) * (2 * Math.PI / s), u = t + Math.cos(i + c) * o, d = r + Math.sin(i + c) * o;
673
397
  if (a ||= {
674
398
  x: u,
675
399
  y: d
676
- }, c(u, d)) {
400
+ }, l(u, d)) {
677
401
  e.x = u, e.y = d;
678
402
  return;
679
403
  }
680
404
  }
681
405
  }
682
406
  e.x = a.x, e.y = a.y;
683
- }, u = a.slice();
684
- for (let e = 0; e <= a.length && u.length; e++) {
407
+ }, d = o.slice();
408
+ for (let e = 0; e <= o.length && d.length; e++) {
685
409
  let e = [];
686
- for (let t of u) {
687
- let n = r.get(s(t));
688
- n && o.has(n.id) ? (l(t, n.x, n.y), i.push(t), o.add(t.id)) : e.push(t);
410
+ for (let t of d) {
411
+ let n = r.get(c(t));
412
+ n && s.has(n.id) ? (u(t, n.x, n.y), i.push(t), s.add(t.id)) : e.push(t);
689
413
  }
690
- if (e.length === u.length) break;
691
- u = e;
414
+ if (e.length === d.length) break;
415
+ d = e;
692
416
  }
693
- for (let e of u) l(e, 0, 0), i.push(e);
417
+ for (let e of d) u(e, 0, 0), i.push(e);
418
+ }
419
+ function m(e) {
420
+ if (e) for (let t of e.tiers) t.nodes = [...t.nodes.filter((e) => a(e) !== "added"), ...t.nodes.filter((e) => a(e) === "added")];
694
421
  }
695
- var T = 50;
696
- function ee(e, t) {
422
+ var h = 50;
423
+ function g(e, t) {
697
424
  let n = new Map(t.tiers.map((e) => [e.key, e]));
698
425
  if (e.tiers.some((e) => e.nodes.length && !n.get(e.key)?.nodes.length)) return !1;
699
426
  let r = new Map(t.tiers.filter((e) => e.nodes.length).map((e, n) => [e.key, t.headers[n]])), i = new Map(t.tiers.flatMap((e) => e.nodes).map((e) => [e.id, e]));
@@ -707,7 +434,7 @@ function ee(e, t) {
707
434
  t.x = e.x, t.y = e.y, t.r = e.r;
708
435
  }
709
436
  if (!n.length) continue;
710
- let o = r.get(t.key).rows, s = Math.max(...e.map((e) => e.x)), c = (e) => (e - (o - 1) / 2) * T, l = new Set(e.filter((e) => e.x === s).map((e) => Math.round(e.y))), u = 0;
437
+ let o = r.get(t.key).rows, s = Math.max(...e.map((e) => e.x)), c = (e) => (e - (o - 1) / 2) * h, l = new Set(e.filter((e) => e.x === s).map((e) => Math.round(e.y))), u = 0;
711
438
  for (let e of n) {
712
439
  for (; l.has(Math.round(c(u)));) u++;
713
440
  e.x = s, e.y = c(u), l.add(Math.round(e.y)), a = Math.min(a, -(e.y + 40));
@@ -715,8 +442,7 @@ function ee(e, t) {
715
442
  }
716
443
  return e.top = a, !0;
717
444
  }
718
- // ../core/schema.js
719
- var E = {
445
+ var _ = {
720
446
  root: {
721
447
  color: "#f59e0b",
722
448
  r: 28
@@ -801,7 +527,7 @@ var E = {
801
527
  color: "#f7ed81",
802
528
  r: 16
803
529
  }
804
- }, D = Object.freeze({
530
+ }, v = Object.freeze({
805
531
  root: "circle",
806
532
  app: "circle",
807
533
  page: "circle",
@@ -823,24 +549,68 @@ var E = {
823
549
  floor: "square",
824
550
  room: "square",
825
551
  persona: "diamond"
826
- }), O = Object.freeze([
552
+ }), y = Object.freeze([
827
553
  "circle",
828
554
  "rounded-square",
829
555
  "hexagon",
830
556
  "square",
831
557
  "diamond"
832
- ]), te = (e) => typeof e == "string" && Object.hasOwn(D, e) ? D[e] : "circle", ne = ["reads", "writes"], re = [
558
+ ]), b = (e) => typeof e == "string" && Object.hasOwn(v, e) ? v[e] : "circle", x = [
559
+ "outbox",
560
+ "changes",
561
+ "trigger",
562
+ "sync",
563
+ "model",
564
+ "rom",
565
+ "read",
566
+ "build",
567
+ "api"
568
+ ], S = ["reads", "writes"], C = [
833
569
  "calls",
834
570
  "triggers",
835
571
  "delivers"
836
- ], ie = ["runs-on"];
837
- [
838
- ...ne,
839
- ...re,
840
- ...ie
841
- ];
572
+ ], w = ["runs-on"], T = [
573
+ "flow",
574
+ ...S,
575
+ "uses",
576
+ "extends",
577
+ ...C,
578
+ ...w
579
+ ], E = [
580
+ "camera",
581
+ "phone",
582
+ "nfc-tag",
583
+ "home-assistant"
584
+ ], D = ["floor", "room"], O = "live-", k = (e) => `persona-${e}`;
585
+ function ee(e) {
586
+ if (typeof e != "string" || !e.startsWith("live-")) return null;
587
+ let t = e.slice(5);
588
+ for (let e of D) if (t.startsWith(`${e}-`) && t.length > e.length + 1) return {
589
+ type: e,
590
+ id: t.slice(e.length + 1)
591
+ };
592
+ if (!t.startsWith("device-")) return null;
593
+ let n = t.slice(7), r = E.find((e) => n.startsWith(`${e}-`) && n.length > e.length + 1);
594
+ return r ? {
595
+ type: "device",
596
+ kind: r,
597
+ id: n.slice(r.length + 1)
598
+ } : null;
599
+ }
600
+ function te(e) {
601
+ return e ? typeof e.id == "string" && e.id.startsWith("live-") ? !0 : D.includes(e.type) || e.type === "device" && !e.file : !1;
602
+ }
603
+ var ne = ["cloud", "web"], re = [
604
+ "run",
605
+ "deploy",
606
+ "renew"
607
+ ], ie = ["browser"];
608
+ function ae(e, t, n) {
609
+ let r = [], i = n?.type === "external" && (n.kind === void 0 || n.kind === "cloud");
610
+ return e.when !== void 0 && (re.includes(e.when) || r.push(`has when "${e.when}". Valid values: ${re.join(", ")}`), e.kind === "calls" ? i || r.push("has \"when\" but does not go into a cloud node: only an outage of a cloud service is timed.") : r.push("has \"when\", which goes only on a calls edge.")), e.side !== void 0 && (ie.includes(e.side) || r.push(`has side "${e.side}". Valid values: ${ie.join(", ")}`), e.kind === "calls" ? (t?.type !== "app" || n?.type !== "external") && r.push("has \"side\", which goes only on an app -> external calls edge (the visitor's browser makes the call).") : r.push("has \"side\", which goes only on a calls edge.")), r;
611
+ }
842
612
  // ../explorer/cloud-model.js
843
- var k = {
613
+ var A = {
844
614
  run: {
845
615
  title: "Breaks now",
846
616
  legend: "No tick: breaks as soon as it is down",
@@ -859,45 +629,45 @@ var k = {
859
629
  ticks: 2,
860
630
  color: "#a78bfa"
861
631
  }
862
- }, ae = (e) => e && Object.hasOwn(k, e.when) ? e.when : "run", oe = (e) => e && e.kind === "calls" ? k[ae(e)].ticks : 0, se = (e) => e && e.kind === "web" ? "web" : "cloud", A = Object.keys(k), ce = Object.fromEntries(A.map((e, t) => [e, t])), le = /* @__PURE__ */ new Set([
632
+ }, oe = (e) => e && Object.hasOwn(A, e.when) ? e.when : "run", se = (e) => e && e.kind === "calls" ? A[oe(e)].ticks : 0, ce = (e) => e && e.kind === "web" ? "web" : "cloud", j = Object.keys(A), le = Object.fromEntries(j.map((e, t) => [e, t])), ue = /* @__PURE__ */ new Set([
863
633
  "persona",
864
634
  "room",
865
635
  "floor"
866
- ]), ue = [
636
+ ]), de = [
867
637
  "external",
868
638
  "machine",
869
639
  "container",
870
640
  "service",
871
641
  "page",
872
642
  "app"
873
- ], de = (e) => {
874
- let t = ue.indexOf(e);
875
- return t < 0 ? ue.length : t;
876
- }, fe = {
643
+ ], fe = (e) => {
644
+ let t = de.indexOf(e);
645
+ return t < 0 ? de.length : t;
646
+ }, pe = {
877
647
  color: "#050608",
878
648
  halo: "child"
879
- }, pe = {
649
+ }, me = {
880
650
  alpha: .92,
881
651
  glow: 10,
882
652
  edgeAlpha: .9,
883
653
  edgeWidth: 2.2
884
- }, me = (e, t) => `${e}->${t}`;
885
- function he(e, t, n) {
654
+ }, he = (e, t) => `${e}->${t}`;
655
+ function ge(e, t, n) {
886
656
  let r = new Map(t.map((e) => [e.id, e])), i = [...new Set(Array.isArray(e) ? e : [])].filter((e) => r.has(e)), a = new Set(i), o = /* @__PURE__ */ new Map(), s = (e, t) => {
887
657
  o.has(e) || o.set(e, []), o.get(e).push(t);
888
658
  }, c = /* @__PURE__ */ new Map();
889
659
  for (let e of n) if (e && e.from && e.to) {
890
660
  if (e.kind === "calls") s(e.to, {
891
661
  from: e.from,
892
- rank: ce[ae(e)],
662
+ rank: le[oe(e)],
893
663
  browser: e.side === "browser",
894
- key: me(e.from, e.to)
664
+ key: he(e.from, e.to)
895
665
  });
896
666
  else if (e.kind === "triggers" && (r.get(e.from) || {}).type === "page" && (r.get(e.to) || {}).type === "service") s(e.to, {
897
667
  from: e.from,
898
668
  rank: 0,
899
669
  browser: !1,
900
- key: me(e.from, e.to)
670
+ key: he(e.from, e.to)
901
671
  });
902
672
  else if (e.kind === "runs-on" && Array.isArray(e.mappings)) for (let t of e.mappings) {
903
673
  if (!t || !t.service) continue;
@@ -915,7 +685,7 @@ function he(e, t, n) {
915
685
  key: null
916
686
  }));
917
687
  return i.length ? [...t, ...i] : t;
918
- }, u = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Map(), f = A.map(() => []);
688
+ }, u = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Map(), f = j.map(() => []);
919
689
  i.forEach((e) => f[0].push({
920
690
  id: e,
921
691
  rank: 0,
@@ -925,13 +695,13 @@ function he(e, t, n) {
925
695
  let { id: n, rank: i, browser: o } = f[e][t], s = u.get(n);
926
696
  if (!(s && (s.rank < i || s.rank === i && s.browser !== o))) for (let e of l(n)) {
927
697
  let t = r.get(e.from);
928
- if (!t || a.has(e.from) || le.has(t.type)) continue;
698
+ if (!t || a.has(e.from) || ue.has(t.type)) continue;
929
699
  let n = Math.max(i, e.rank), s = o || e.browser;
930
- e.key && (!d.has(e.key) || ce[d.get(e.key)] > n) && d.set(e.key, A[n]);
700
+ e.key && (!d.has(e.key) || le[d.get(e.key)] > n) && d.set(e.key, j[n]);
931
701
  let c = u.get(e.from);
932
702
  c && (c.rank < n || c.rank === n && (!c.browser || s)) || (u.set(e.from, {
933
703
  rank: n,
934
- when: A[n],
704
+ when: j[n],
935
705
  browser: s
936
706
  }), f[n].push({
937
707
  id: e.from,
@@ -948,8 +718,8 @@ function he(e, t, n) {
948
718
  down: i,
949
719
  hits: p,
950
720
  edges: d,
951
- groups: A.map((e) => {
952
- let t = [...p].filter(([, t]) => t.when === e).map(([e]) => e).sort((e, t) => de(r.get(e).type) - de(r.get(t).type) || m(e).localeCompare(m(t))), { title: n, color: i } = k[e];
721
+ groups: j.map((e) => {
722
+ let t = [...p].filter(([, t]) => t.when === e).map(([e]) => e).sort((e, t) => fe(r.get(e).type) - fe(r.get(t).type) || m(e).localeCompare(m(t))), { title: n, color: i } = A[e];
953
723
  return {
954
724
  when: e,
955
725
  title: n,
@@ -959,25 +729,25 @@ function he(e, t, n) {
959
729
  }).filter((e) => e.ids.length)
960
730
  };
961
731
  }
962
- var j = null;
963
- function ge(e, t, n) {
732
+ var M = null;
733
+ function _e(e, t, n) {
964
734
  let r = e && Array.isArray(e.down) ? e.down : [];
965
735
  if (!r.length) return null;
966
736
  let i = r.join("\0");
967
- return j && j.key === i && j.nodes === t && j.edges === n || (j = {
737
+ return M && M.key === i && M.nodes === t && M.edges === n || (M = {
968
738
  key: i,
969
739
  nodes: t,
970
740
  edges: n,
971
- radius: he(r, t, n)
972
- }), j.radius;
741
+ radius: ge(r, t, n)
742
+ }), M.radius;
973
743
  }
974
- function _e(e, t) {
744
+ function ve(e, t) {
975
745
  if (!t) return;
976
746
  let n = new Set(t.down);
977
747
  for (let r of e.nodes) {
978
748
  if (n.has(r.id)) {
979
749
  Object.assign(r, {
980
- color: fe.color,
750
+ color: pe.color,
981
751
  alpha: 1,
982
752
  labelAlpha: 1,
983
753
  labelColor: "#f8fafc",
@@ -985,114 +755,114 @@ function _e(e, t) {
985
755
  labelStrike: !0,
986
756
  connected: !0,
987
757
  glow: 0
988
- }), r.halo === "none" && (r.halo = fe.halo);
758
+ }), r.halo === "none" && (r.halo = pe.halo);
989
759
  continue;
990
760
  }
991
761
  let e = t.hits.get(r.id);
992
762
  if (!e) continue;
993
- let i = Math.max(r.alpha, pe.alpha);
763
+ let i = Math.max(r.alpha, me.alpha);
994
764
  Object.assign(r, {
995
- color: k[e.when].color,
765
+ color: A[e.when].color,
996
766
  alpha: i,
997
767
  labelAlpha: i,
998
768
  labelColor: "#f8fafc",
999
769
  labelKeep: !0,
1000
770
  connected: !0,
1001
- glow: Math.max(r.glow || 0, pe.glow)
771
+ glow: Math.max(r.glow || 0, me.glow)
1002
772
  });
1003
773
  }
1004
774
  for (let n of e.edges) {
1005
- let e = t.edges.get(me(n.from, n.to));
775
+ let e = t.edges.get(he(n.from, n.to));
1006
776
  if (!e) continue;
1007
- let r = k[e].color;
1008
- n.color = r, n.glow && (n.glowColor = r), n.alpha = Math.max(n.alpha, pe.edgeAlpha), n.width = Math.max(n.width, pe.edgeWidth), n.packet &&= {
777
+ let r = A[e].color;
778
+ n.color = r, n.glow && (n.glowColor = r), n.alpha = Math.max(n.alpha, me.edgeAlpha), n.width = Math.max(n.width, me.edgeWidth), n.packet &&= {
1009
779
  ...n.packet,
1010
780
  glowColor: r
1011
781
  };
1012
782
  }
1013
783
  }
1014
784
  // ../explorer/house-model.js
1015
- var ve = /* @__PURE__ */ new Set([
785
+ var ye = /* @__PURE__ */ new Set([
1016
786
  "container",
1017
787
  "stack",
1018
788
  "machine"
1019
789
  ]);
1020
- function ye(e, t) {
790
+ function be(e, t) {
1021
791
  return !!(e.house && e.house.shown && e.house.shown.has(t.id));
1022
792
  }
1023
- var M = null;
1024
- function be(e) {
793
+ var xe = null;
794
+ function Se(e) {
1025
795
  let t = e.house && e.house.cloudLines;
1026
- return !t || !t.length ? e.edges : (M && M.edges === e.edges && M.lines === t || (M = {
796
+ return !t || !t.length ? e.edges : (xe && xe.edges === e.edges && xe.lines === t || (xe = {
1027
797
  edges: e.edges,
1028
798
  lines: t,
1029
799
  all: [...e.edges, ...t]
1030
- }), M.all);
800
+ }), xe.all);
1031
801
  }
1032
- function xe(e, t, n) {
1033
- return e.kind === "runs-on" || e.kind === "delivers" ? "flow" : e.kind === "calls" && n && n.type === "external" ? e.rolled || !(t && ve.has(t.type)) ? "flow" : null : !e.kind && !e.dashed && t && t.type === "persona" && n && n.type === "device" || !e.kind && e.dashed && t && (t.type === "container" || t.type === "external") && n && n.type === "device" ? "link" : null;
802
+ function Ce(e, t, n) {
803
+ return e.kind === "runs-on" || e.kind === "delivers" ? "flow" : e.kind === "calls" && n && n.type === "external" ? e.rolled || !(t && ye.has(t.type)) ? "flow" : null : !e.kind && !e.dashed && t && t.type === "persona" && n && n.type === "device" || !e.kind && e.dashed && t && (t.type === "container" || t.type === "external") && n && n.type === "device" ? "link" : null;
1034
804
  }
1035
- var Se = [
805
+ var we = [
1036
806
  "persona",
1037
807
  "machine",
1038
808
  "stack",
1039
809
  "floor",
1040
810
  "external"
1041
811
  ];
1042
- function Ce(e, t) {
812
+ function Te(e, t) {
1043
813
  let n = t.house;
1044
814
  e.decor.rings = [], e.decor.lanes = n && n.lanes ? n.lanes : [];
1045
- for (let t of e.nodes) t.type === "room" ? (t.label = "", t.labelKeep = !1) : Se.includes(t.type) && (t.labelKeep = !0);
1046
- return n && n.cloudIds && n.cloudIds.size && Oe(e, t), e;
815
+ for (let t of e.nodes) t.type === "room" ? (t.label = "", t.labelKeep = !1) : we.includes(t.type) && (t.labelKeep = !0);
816
+ return n && n.cloudIds && n.cloudIds.size && Ae(e, t), e;
1047
817
  }
1048
- var we = {
818
+ var Ee = {
1049
819
  run: .9,
1050
820
  deploy: .25,
1051
821
  renew: .9
1052
- }, Te = {
822
+ }, De = {
1053
823
  alpha: .9,
1054
824
  width: 2.2
1055
- }, Ee = Object.keys(k), De = (e) => Ee.find((t) => k[t].ticks === (e.ticks || 0)) || "run";
1056
- function Oe(e, t) {
1057
- let n = t.house, r = t.scenario ? ge(t.scenario, t.nodes, t.edges) : null, i = !t.scenario && !!t.selectedNode, a = new Map((n.cloudLines || []).map((e) => [`${e.from}->${e.to}|${e.when}`, e])), o = r ? new Set(r.down) : null;
825
+ }, Oe = Object.keys(A), ke = (e) => Oe.find((t) => A[t].ticks === (e.ticks || 0)) || "run";
826
+ function Ae(e, t) {
827
+ let n = t.house, r = t.scenario ? _e(t.scenario, t.nodes, t.edges) : null, i = !t.scenario && !!t.selectedNode, a = new Map((n.cloudLines || []).map((e) => [`${e.from}->${e.to}|${e.when}`, e])), o = r ? new Set(r.down) : null;
1058
828
  e.edges = e.edges.filter((e) => {
1059
829
  if (e.kind !== "calls" || !n.cloudIds.has(e.to)) return !0;
1060
- let t = De(e);
830
+ let t = ke(e);
1061
831
  if (r) {
1062
832
  let i = a.get(`${e.from}->${e.to}|${t}`), s = o.has(e.to) ? "run" : r.hits.has(e.to) ? r.hits.get(e.to).when : null;
1063
833
  if (i && s) {
1064
- let n = Ee[Math.max(Ee.indexOf(s), Ee.indexOf(t))];
834
+ let n = Oe[Math.max(Oe.indexOf(s), Oe.indexOf(t))];
1065
835
  return Object.assign(e, {
1066
- color: k[n].color,
1067
- alpha: Math.max(e.alpha, Te.alpha),
1068
- width: Math.max(e.width, Te.width)
836
+ color: A[n].color,
837
+ alpha: Math.max(e.alpha, De.alpha),
838
+ width: Math.max(e.width, De.width)
1069
839
  }), e.glow && (e.glowColor = e.color), !0;
1070
840
  }
1071
841
  return !n.phone || r.edges.has(`${e.from}->${e.to}`);
1072
842
  }
1073
- return i ? !n.phone || e.alpha >= .5 : !n.phone && (e.alpha = we[t], !0);
843
+ return i ? !n.phone || e.alpha >= .5 : !n.phone && (e.alpha = Ee[t], !0);
1074
844
  });
1075
845
  }
1076
- // ../explorer/check-model.js
1077
- var ke = {
846
+ // ../explorer/verdict-paint.js
847
+ var je = {
1078
848
  allowed: "#4ade80",
1079
849
  refused: "#ff2d55",
1080
850
  mismatch: "#fbbf24"
1081
- }, Ae = 18, je = 4.5;
1082
- function Me(e, t) {
851
+ }, Me = 18, Ne = 4.5;
852
+ function Pe(e, t) {
1083
853
  return e.from !== t.from || e.to !== t.to ? !1 : t.kind ? e.kind === t.kind && (!t.flow || e.key.split("|")[2] === t.flow) : e.kind === "ownership" || e.kind === "usage";
1084
854
  }
1085
- function Ne(e, t) {
855
+ function Fe(e, t) {
1086
856
  let n = t && t.verdict;
1087
857
  if (!n || t.done) return;
1088
- let r = n.mismatch ? ke.mismatch : ke[n.state];
858
+ let r = n.mismatch ? je.mismatch : je[n.state];
1089
859
  if (!r) return;
1090
860
  let { node: i, edge: a } = t.current;
1091
861
  if (i !== void 0) {
1092
862
  let t = e.nodes.find((e) => e.id === i);
1093
- t && (t.color = r, t.glow = Math.max(t.glow || 0, Ae));
863
+ t && (t.color = r, t.glow = Math.max(t.glow || 0, Me));
1094
864
  } else a && e.edges.forEach((e) => {
1095
- Me(e, a) && (e.color = r, e.glowColor = r, e.glow = Math.max(e.glow || 0, Ae), e.width = Math.max(e.width || 0, je), e.packet &&= n.state === "refused" && !n.mismatch ? {
865
+ Pe(e, a) && (e.color = r, e.glowColor = r, e.glow = Math.max(e.glow || 0, Me), e.width = Math.max(e.width || 0, Ne), e.packet &&= n.state === "refused" && !n.mismatch ? {
1096
866
  ...e.packet,
1097
867
  color: r,
1098
868
  glowColor: r,
@@ -1105,26 +875,26 @@ function Ne(e, t) {
1105
875
  });
1106
876
  }
1107
877
  // ../core/layers.js
1108
- var Pe = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/, Fe = Object.freeze([
878
+ var Ie = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/, Le = Object.freeze([
1109
879
  "key",
1110
880
  "label",
1111
881
  "desc",
1112
882
  "match"
1113
- ]), N = Object.freeze([
883
+ ]), Re = Object.freeze([
1114
884
  "type",
1115
885
  "kind",
1116
886
  "parent",
1117
887
  "field"
1118
- ]), Ie = Object.freeze([
888
+ ]), ze = Object.freeze([
1119
889
  "add",
1120
890
  "off",
1121
891
  "order"
1122
- ]), Le = /^[A-Za-z][A-Za-z0-9_]*$/, Re = Object.freeze([
892
+ ]), Be = /^[A-Za-z][A-Za-z0-9_]*$/, Ve = Object.freeze([
1123
893
  "root",
1124
894
  "external",
1125
895
  "floor",
1126
896
  "room"
1127
- ]), ze = Object.freeze([
897
+ ]), He = Object.freeze([
1128
898
  {
1129
899
  key: "app",
1130
900
  label: "Apps",
@@ -1268,91 +1038,91 @@ var Pe = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/, Fe = Object.freeze([
1268
1038
  match: { type: "persona" },
1269
1039
  live: !0
1270
1040
  }
1271
- ]), Be = Object.freeze(ze.map((e) => e.key)), Ve = new Set(Be), He = Object.keys(E), P = (e) => typeof e == "object" && !!e && !Array.isArray(e), Ue = /* @__PURE__ */ RegExp("[\\u0000-\\u001f\\u007f-\\u009f\\u2028\\u2029]"), F = (e) => typeof e == "string" ? `"${e.length > 40 ? `${e.slice(0, 40)}…` : e}"` : typeof e == "number" || typeof e == "boolean" ? String(e) : Array.isArray(e) ? "a list" : e === null ? "null" : typeof e, We = (e) => typeof e == "string" && e.length > 0 && e.length <= 80 && !Ue.test(e) || typeof e == "number" && Number.isFinite(e) || typeof e == "boolean", Ge = /^[a-z0-9]+(-[a-z0-9]+)*$/, Ke = new Set(He), qe = (e, t) => Ke.has(e) && typeof t == "string" && t.length <= 32 && Ge.test(t) ? `--corn-map-kind-${e}-${t}` : null, Je = (e) => typeof e == "string" && e.length <= 32 && Pe.test(e) ? `--corn-map-group-${e}` : null, Ye = ({ type: e, kind: t, layer: n, group: r }) => [
1272
- qe(e, t),
1273
- n ? Je(n) : null,
1041
+ ]), Ue = Object.freeze(He.map((e) => e.key)), We = new Set(Ue), Ge = Object.keys(_), N = (e) => typeof e == "object" && !!e && !Array.isArray(e), Ke = /* @__PURE__ */ RegExp("[\\u0000-\\u001f\\u007f-\\u009f\\u2028\\u2029]"), P = (e) => typeof e == "string" ? `"${e.length > 40 ? `${e.slice(0, 40)}…` : e}"` : typeof e == "number" || typeof e == "boolean" ? String(e) : Array.isArray(e) ? "a list" : e === null ? "null" : typeof e, qe = (e) => typeof e == "string" && e.length > 0 && e.length <= 80 && !Ke.test(e) || typeof e == "number" && Number.isFinite(e) || typeof e == "boolean", Je = /^[a-z0-9]+(-[a-z0-9]+)*$/, Ye = new Set(Ge), Xe = (e, t) => Ye.has(e) && typeof t == "string" && t.length <= 32 && Je.test(t) ? `--corn-map-kind-${e}-${t}` : null, Ze = (e) => typeof e == "string" && e.length <= 32 && Ie.test(e) ? `--corn-map-group-${e}` : null, Qe = ({ type: e, kind: t, layer: n, group: r }) => [
1042
+ Xe(e, t),
1043
+ n ? Ze(n) : null,
1274
1044
  `--corn-map-node-${e}`,
1275
1045
  `--corn-map-group-${r || e}`
1276
1046
  ].filter(Boolean);
1277
- function Xe(e) {
1047
+ function $e(e) {
1278
1048
  if (typeof e != "string") return null;
1279
- if (Ke.has(e)) return { type: e };
1049
+ if (Ye.has(e)) return { type: e };
1280
1050
  let t = e.indexOf(":");
1281
1051
  if (t < 0) return null;
1282
1052
  let n = e.slice(0, t), r = e.slice(t + 1);
1283
- return n === "layer" ? Pe.test(r) && r.length <= 32 ? { layer: r } : null : Ke.has(n) && Ge.test(r) && r.length <= 32 ? {
1053
+ return n === "layer" ? Ie.test(r) && r.length <= 32 ? { layer: r } : null : Ye.has(n) && Je.test(r) && r.length <= 32 ? {
1284
1054
  type: n,
1285
1055
  kind: r
1286
1056
  } : null;
1287
1057
  }
1288
- function Ze(e, t, n) {
1058
+ function et(e, t, n) {
1289
1059
  let r = [];
1290
- return typeof t == "string" && Ge.test(t) && t.length <= 32 && r.push(`${e}:${t}`), n && r.push(`layer:${n}`), r.push(e), r;
1060
+ return typeof t == "string" && Je.test(t) && t.length <= 32 && r.push(`${e}:${t}`), n && r.push(`layer:${n}`), r.push(e), r;
1291
1061
  }
1292
- var Qe = /* @__PURE__ */ new WeakMap();
1293
- function $e(e) {
1294
- let t = Qe.get(e);
1062
+ var tt = /* @__PURE__ */ new WeakMap();
1063
+ function nt(e) {
1064
+ let t = tt.get(e);
1295
1065
  if (t && t.length === e.length) return t.map;
1296
1066
  let n = /* @__PURE__ */ new Map();
1297
1067
  for (let t of e) t && !t.dashed && !t.kind && t.from && t.to && t.from !== t.to && !n.has(t.to) && n.set(t.to, t.from);
1298
- return Qe.set(e, {
1068
+ return tt.set(e, {
1299
1069
  length: e.length,
1300
1070
  map: n
1301
1071
  }), n;
1302
1072
  }
1303
- var I = (e, t) => Array.isArray(e) ? e.includes(t) : e === t;
1304
- function et(e, t, n) {
1305
- if (!P(e)) return !1;
1073
+ var F = (e, t) => Array.isArray(e) ? e.includes(t) : e === t;
1074
+ function rt(e, t, n) {
1075
+ if (!N(e)) return !1;
1306
1076
  let r = !1;
1307
- if (e.type !== void 0 && (r = !0, !I(e.type, t.type)) || e.kind !== void 0 && (r = !0, !I(e.kind, t.kind)) || e.parent !== void 0 && (r = !0, !n || !I(e.parent, n(t)))) return !1;
1077
+ if (e.type !== void 0 && (r = !0, !F(e.type, t.type)) || e.kind !== void 0 && (r = !0, !F(e.kind, t.kind)) || e.parent !== void 0 && (r = !0, !n || !F(e.parent, n(t)))) return !1;
1308
1078
  if (e.field !== void 0) {
1309
1079
  r = !0;
1310
1080
  for (let n of Object.keys(e.field)) {
1311
1081
  if (!Object.hasOwn(t, n)) return !1;
1312
1082
  let r = t[n], i = e.field[n];
1313
- if (!(Array.isArray(r) ? r.some((e) => I(i, e)) : I(i, r))) return !1;
1083
+ if (!(Array.isArray(r) ? r.some((e) => F(i, e)) : F(i, r))) return !1;
1314
1084
  }
1315
1085
  }
1316
1086
  return r;
1317
1087
  }
1318
- var tt = [...ze.filter((e) => e.match)].sort((e, t) => Number("kind" in t.match) - Number("kind" in e.match));
1319
- function nt(e) {
1088
+ var it = [...He.filter((e) => e.match)].sort((e, t) => Number("kind" in t.match) - Number("kind" in e.match));
1089
+ function at(e) {
1320
1090
  if (e.type === "root") return null;
1321
1091
  if (e.type === "external") return e.kind === "web" ? "web" : "cloud";
1322
- for (let t of tt) if (et(t.match, e)) return t.key;
1092
+ for (let t of it) if (rt(t.match, e)) return t.key;
1323
1093
  return e.type;
1324
1094
  }
1325
- function rt(e, t, n) {
1095
+ function ot(e, t, n) {
1326
1096
  if (!e || !e.length || t.type === "root") return null;
1327
- for (let r of e) if (et(r.match, t, n)) return r.key;
1097
+ for (let r of e) if (rt(r.match, t, n)) return r.key;
1328
1098
  return null;
1329
1099
  }
1330
- var it = (e, t, n) => rt(e, t, n) || nt(t), at = `${He.slice(0, 5).join(", ")}, …`, ot = (e) => {
1331
- let t = (Array.isArray(e) ? e : []).map((e) => P(e) && typeof e.key == "string" ? e.key : null).filter((e) => e && Pe.test(e));
1332
- return `${Be.slice(0, 3).join(", ")}, …${t.length ? `, ${t[t.length - 1]}` : ""}`;
1100
+ var st = (e, t, n) => ot(e, t, n) || at(t), ct = `${Ge.slice(0, 5).join(", ")}, …`, lt = (e) => {
1101
+ let t = (Array.isArray(e) ? e : []).map((e) => N(e) && typeof e.key == "string" ? e.key : null).filter((e) => e && Ie.test(e));
1102
+ return `${Ue.slice(0, 3).join(", ")}, …${t.length ? `, ${t[t.length - 1]}` : ""}`;
1333
1103
  };
1334
- function st(e, t, n, r) {
1104
+ function ut(e, t, n, r) {
1335
1105
  return Array.isArray(n) ? (n.length ? n.length > 20 && r.push(`${e}.${t} has ${n.length} values: at most 20.`) : r.push(`${e}.${t} is an empty list: give at least one value, or leave the key out.`), n.length <= 20 ? n : []) : [n];
1336
1106
  }
1337
- function ct(e, t, n) {
1338
- if (!P(t)) n.push(`${e}.match is { type, kind, parent, field }: say at least one of them.`);
1107
+ function dt(e, t, n) {
1108
+ if (!N(t)) n.push(`${e}.match is { type, kind, parent, field }: say at least one of them.`);
1339
1109
  else {
1340
- for (let r of Object.keys(t)) N.includes(r) || n.push(`${e}.match has unknown key "${r}": known: ${N.join(", ")}. A match is data: no pattern, no function.`);
1341
- if (!Object.keys(t).some((e) => N.includes(e))) Object.keys(t).length || n.push(`${e}.match is empty: say at least one of ${N.join(", ")}.`);
1110
+ for (let r of Object.keys(t)) Re.includes(r) || n.push(`${e}.match has unknown key "${r}": known: ${Re.join(", ")}. A match is data: no pattern, no function.`);
1111
+ if (!Object.keys(t).some((e) => Re.includes(e))) Object.keys(t).length || n.push(`${e}.match is empty: say at least one of ${Re.join(", ")}.`);
1342
1112
  else {
1343
- if ("type" in t) for (let r of st(`${e}.match`, "type", t.type, n)) typeof r == "string" && He.includes(r) || n.push(`${e}.match.type ${F(r)} is not a node type (${at}).`);
1344
- if ("kind" in t) for (let r of st(`${e}.match`, "kind", t.kind, n)) (typeof r != "string" || !r || r.length > 80 || Ue.test(r)) && n.push(`${e}.match.kind ${F(r)}: a kind is text, one line, at most 80 characters.`);
1345
- if ("parent" in t) for (let r of st(`${e}.match`, "parent", t.parent, n)) (typeof r != "string" || !r || r.length > 200 || Ue.test(r)) && n.push(`${e}.match.parent ${F(r)}: a parent is a node id (text), like "pkg-core".`);
1113
+ if ("type" in t) for (let r of ut(`${e}.match`, "type", t.type, n)) typeof r == "string" && Ge.includes(r) || n.push(`${e}.match.type ${P(r)} is not a node type (${ct}).`);
1114
+ if ("kind" in t) for (let r of ut(`${e}.match`, "kind", t.kind, n)) (typeof r != "string" || !r || r.length > 80 || Ke.test(r)) && n.push(`${e}.match.kind ${P(r)}: a kind is text, one line, at most 80 characters.`);
1115
+ if ("parent" in t) for (let r of ut(`${e}.match`, "parent", t.parent, n)) (typeof r != "string" || !r || r.length > 200 || Ke.test(r)) && n.push(`${e}.match.parent ${P(r)}: a parent is a node id (text), like "pkg-core".`);
1346
1116
  if ("field" in t) {
1347
1117
  let r = t.field;
1348
- if (!P(r)) {
1118
+ if (!N(r)) {
1349
1119
  n.push(`${e}.match.field is { name: value }: a node field and the value (or list of values) it must have.`);
1350
1120
  return;
1351
1121
  }
1352
1122
  let i = Object.keys(r);
1353
1123
  i.length || n.push(`${e}.match.field is empty: name a field, like { audience: 'household' }.`), i.length > 4 && n.push(`${e}.match.field names ${i.length} fields: at most 4.`);
1354
1124
  for (let t of i.slice(0, 20)) {
1355
- if (!Le.test(t) || t.length > 40) {
1125
+ if (!Be.test(t) || t.length > 40) {
1356
1126
  n.push(`${e}.match.field "${t.slice(0, 40)}": a field name is letters, digits and "_", starting with a letter.`);
1357
1127
  continue;
1358
1128
  }
@@ -1365,17 +1135,17 @@ function ct(e, t, n) {
1365
1135
  continue;
1366
1136
  }
1367
1137
  let i = Array.isArray(r[t]) ? r[t] : [r[t]];
1368
- Array.isArray(r[t]) && (!i.length || i.length > 20) ? n.push(`${e}.match.field.${t} is a list of ${i.length}: one to 20 values.`) : i.every(We) || n.push(`${e}.match.field.${t}: a value is text, a number, true or false, or a list of them.`);
1138
+ Array.isArray(r[t]) && (!i.length || i.length > 20) ? n.push(`${e}.match.field.${t} is a list of ${i.length}: one to 20 values.`) : i.every(qe) || n.push(`${e}.match.field.${t}: a value is text, a number, true or false, or a list of them.`);
1369
1139
  }
1370
1140
  }
1371
1141
  }
1372
1142
  }
1373
1143
  }
1374
- function lt(e) {
1144
+ function ft(e) {
1375
1145
  if (e === void 0) return [];
1376
- if (!P(e)) return ["\"layers\" is an object: { add: [{ key, label, match }], off: [keys], order: [keys] }."];
1146
+ if (!N(e)) return ["\"layers\" is an object: { add: [{ key, label, match }], off: [keys], order: [keys] }."];
1377
1147
  let t = [];
1378
- for (let n of Object.keys(e)) Ie.includes(n) || t.push(`layers has unknown key "${n}": known: ${Ie.join(", ")}.`);
1148
+ for (let n of Object.keys(e)) ze.includes(n) || t.push(`layers has unknown key "${n}": known: ${ze.join(", ")}.`);
1379
1149
  let n = e.add;
1380
1150
  n !== void 0 && !Array.isArray(n) && t.push("layers.add is a list of project layers: [{ key, label, desc?, match }].");
1381
1151
  let r = Array.isArray(n) ? n : [];
@@ -1383,24 +1153,24 @@ function lt(e) {
1383
1153
  let i = /* @__PURE__ */ new Map();
1384
1154
  r.slice(0, 100).forEach((e, n) => {
1385
1155
  let r = `layers.add[${n}]`;
1386
- if (!P(e)) {
1156
+ if (!N(e)) {
1387
1157
  t.push(`${r} is { key, label, desc?, match }.`);
1388
1158
  return;
1389
1159
  }
1390
1160
  for (let n of Object.keys(e)) {
1391
- if (Fe.includes(n)) continue;
1161
+ if (Le.includes(n)) continue;
1392
1162
  let e = /^colou?r$|^icon$|^fill$/i.test(n) ? " Colours and icons are the theme's." : n === "on" || n === "hide" ? " Whether a layer starts off is layers.off." : "";
1393
- t.push(`${r} has unknown key "${n}": known: ${Fe.join(", ")}.${e}`);
1163
+ t.push(`${r} has unknown key "${n}": known: ${Le.join(", ")}.${e}`);
1394
1164
  }
1395
1165
  let a = e.key;
1396
- typeof a == "string" ? Ve.has(a) ? t.push(`${r}.key ${F(a)} is a starting layer: pick another key.`) : Re.includes(a) ? t.push(`${r}.key ${F(a)} is reserved (a node type): pick another key.`) : !Pe.test(a) || a.length > 32 ? t.push(`${r}.key ${F(a)}: lower-case words joined by "-", like "edge-stack"${a.length > 32 ? ", at most 32 characters" : ""}.`) : i.has(a) ? t.push(`${r}.key ${F(a)} is also layers.add[${i.get(a)}].key: a key is used once.`) : i.set(a, n) : t.push(`${r}.key is required: lower-case words joined by "-", like "edge-stack".`);
1166
+ typeof a == "string" ? We.has(a) ? t.push(`${r}.key ${P(a)} is a starting layer: pick another key.`) : Ve.includes(a) ? t.push(`${r}.key ${P(a)} is reserved (a node type): pick another key.`) : !Ie.test(a) || a.length > 32 ? t.push(`${r}.key ${P(a)}: lower-case words joined by "-", like "edge-stack"${a.length > 32 ? ", at most 32 characters" : ""}.`) : i.has(a) ? t.push(`${r}.key ${P(a)} is also layers.add[${i.get(a)}].key: a key is used once.`) : i.set(a, n) : t.push(`${r}.key is required: lower-case words joined by "-", like "edge-stack".`);
1397
1167
  let o = (n, i, a) => {
1398
1168
  let o = e[n];
1399
- o === void 0 ? a && t.push(`${r}.${n} is required: plain text, one line, at most ${i} characters.`) : typeof o != "string" || !o.trim() ? t.push(`${r}.${n} ${F(o)}: plain text, one line, at most ${i} characters.`) : Ue.test(o) ? t.push(`${r}.${n}: one line of plain text (no line break or control character).`) : [...o].length > i && t.push(`${r}.${n} is ${[...o].length} characters: at most ${i}.`);
1169
+ o === void 0 ? a && t.push(`${r}.${n} is required: plain text, one line, at most ${i} characters.`) : typeof o != "string" || !o.trim() ? t.push(`${r}.${n} ${P(o)}: plain text, one line, at most ${i} characters.`) : Ke.test(o) ? t.push(`${r}.${n}: one line of plain text (no line break or control character).`) : [...o].length > i && t.push(`${r}.${n} is ${[...o].length} characters: at most ${i}.`);
1400
1170
  };
1401
- o("label", 40, !0), o("desc", 120, !1), e.match === void 0 ? t.push(`${r}.match is required: say at least one of ${N.join(", ")}.`) : ct(r, e.match, t);
1171
+ o("label", 40, !0), o("desc", 120, !1), e.match === void 0 ? t.push(`${r}.match is required: say at least one of ${Re.join(", ")}.`) : dt(r, e.match, t);
1402
1172
  });
1403
- let a = /* @__PURE__ */ new Set([...Be, ...r.map((e) => P(e) && typeof e.key == "string" ? e.key : null).filter(Boolean)]);
1173
+ let a = /* @__PURE__ */ new Set([...Ue, ...r.map((e) => N(e) && typeof e.key == "string" ? e.key : null).filter(Boolean)]);
1404
1174
  for (let r of ["off", "order"]) {
1405
1175
  let i = e[r];
1406
1176
  if (i === void 0) continue;
@@ -1410,18 +1180,18 @@ function lt(e) {
1410
1180
  }
1411
1181
  let o = /* @__PURE__ */ new Set();
1412
1182
  i.forEach((e) => {
1413
- typeof e != "string" || !a.has(e) ? t.push(`layers.${r} ${F(e)} is not a layer (${ot(n)}).`) : o.has(e) && t.push(`layers.${r} ${F(e)} is listed twice.`), o.add(e);
1183
+ typeof e != "string" || !a.has(e) ? t.push(`layers.${r} ${P(e)} is not a layer (${lt(n)}).`) : o.has(e) && t.push(`layers.${r} ${P(e)} is listed twice.`), o.add(e);
1414
1184
  });
1415
1185
  }
1416
1186
  return t;
1417
1187
  }
1418
- function ut(e) {
1188
+ function pt(e) {
1419
1189
  let t = {
1420
1190
  add: [],
1421
1191
  off: [],
1422
1192
  order: []
1423
1193
  };
1424
- if (!P(e) || lt(e).length) return t;
1194
+ if (!N(e) || ft(e).length) return t;
1425
1195
  let n = (e) => Array.isArray(e) ? e.slice(0, 20) : e;
1426
1196
  return {
1427
1197
  add: (e.add || []).map((e) => {
@@ -1438,7 +1208,15 @@ function ut(e) {
1438
1208
  order: [...e.order || []]
1439
1209
  };
1440
1210
  }
1441
- function dt(e) {
1211
+ function mt(e, t, n = []) {
1212
+ let r = [...e, ...t], i = new Map(r.map((e) => [e.key, e])), a = [];
1213
+ for (let e of n) {
1214
+ let t = i.get(e);
1215
+ t && !a.includes(t) && a.push(t);
1216
+ }
1217
+ return [...a, ...r.filter((e) => !a.includes(e))];
1218
+ }
1219
+ function ht(e) {
1442
1220
  let t = /* @__PURE__ */ new Map();
1443
1221
  for (let n of e) typeof n.kind == "string" && n.kind && (t.has(n.type) || t.set(n.type, /* @__PURE__ */ new Set()), t.get(n.type).add(n.kind));
1444
1222
  let n = /* @__PURE__ */ new Map();
@@ -1452,71 +1230,71 @@ function dt(e) {
1452
1230
  return n;
1453
1231
  }
1454
1232
  // ../explorer/layer-model.js
1455
- var ft = (e) => (e.projectLayers || []).some((e) => e.match && e.match.parent !== void 0) ? (t) => $e(e.edges || []).get(t.id) : void 0;
1456
- function pt(e, t) {
1233
+ var gt = (e) => (e.projectLayers || []).some((e) => e.match && e.match.parent !== void 0) ? (t) => nt(e.edges || []).get(t.id) : void 0;
1234
+ function _t(e, t) {
1457
1235
  let n = e.projectLayers;
1458
- return !n || !n.length ? null : rt(n, t, ft(e));
1236
+ return !n || !n.length ? null : ot(n, t, gt(e));
1459
1237
  }
1460
- var mt = (e, t) => it(e.projectLayers || [], t, ft(e)), ht = /* @__PURE__ */ new WeakMap();
1461
- function gt(e) {
1462
- let t = e.edges || [], n = ht.get(e.nodes);
1238
+ var vt = (e, t) => st(e.projectLayers || [], t, gt(e)), yt = /* @__PURE__ */ new WeakMap();
1239
+ function bt(e) {
1240
+ let t = e.edges || [], n = yt.get(e.nodes);
1463
1241
  if (n && n.edges === t && n.n === e.nodes.length && n.e === t.length) return n.touched;
1464
- let r = S(e.nodes, t).touched;
1465
- return ht.set(e.nodes, {
1242
+ let r = d(e.nodes, t).touched;
1243
+ return yt.set(e.nodes, {
1466
1244
  edges: t,
1467
1245
  n: e.nodes.length,
1468
1246
  e: t.length,
1469
1247
  touched: r
1470
1248
  }), r;
1471
1249
  }
1472
- var _t = (e, t) => !!e.proposal && gt(e).has(t.id), vt = /* @__PURE__ */ new WeakMap();
1473
- function yt(e, t) {
1250
+ var xt = (e, t) => !!e.proposal && bt(e).has(t.id), St = /* @__PURE__ */ new WeakMap();
1251
+ function Ct(e, t) {
1474
1252
  if (typeof t.kind != "string" || !t.kind || t.type === "external") return "";
1475
- let n = vt.get(e.nodes);
1253
+ let n = St.get(e.nodes);
1476
1254
  n && n.n === e.nodes.length || (n = {
1477
1255
  n: e.nodes.length,
1478
- map: dt(e.nodes)
1479
- }, vt.set(e.nodes, n));
1256
+ map: ht(e.nodes)
1257
+ }, St.set(e.nodes, n));
1480
1258
  let r = n.map.get(t.type);
1481
1259
  return r && r.get(t.kind) || "";
1482
1260
  }
1483
- var bt = Object.freeze({
1261
+ var wt = Object.freeze({
1484
1262
  core: ["pkg"],
1485
1263
  store: ["flow"],
1486
1264
  rom: ["flow"]
1487
- }), xt = (e) => !!e && !!e.mark && e.mark !== "none";
1488
- function St({ nodes: e, edges: t, rowOf: n, flight: r = null }) {
1489
- let { touched: i } = S(e, t), a = /* @__PURE__ */ new Set();
1265
+ }), Tt = (e) => !!e && !!e.mark && e.mark !== "none";
1266
+ function Et({ nodes: e, edges: t, rowOf: n, flight: r = null }) {
1267
+ let { touched: i } = d(e, t), a = /* @__PURE__ */ new Set();
1490
1268
  for (let t of e) {
1491
1269
  if (!i.has(t.id)) continue;
1492
1270
  let e = n(t);
1493
1271
  if (e) {
1494
1272
  a.add(e);
1495
- for (let t of bt[e] || []) a.add(t);
1273
+ for (let t of wt[e] || []) a.add(t);
1496
1274
  }
1497
1275
  r && r.has(t.id) && a.add("runs");
1498
1276
  }
1499
- for (let e of t) xt(e) && e.kind === "flow" && a.add("flow");
1277
+ for (let e of t) Tt(e) && e.kind === "flow" && a.add("flow");
1500
1278
  return a;
1501
1279
  }
1502
- function Ct({ active: e, touched: t, universe: n, review: r }) {
1280
+ function Dt({ active: e, touched: t, universe: n, review: r }) {
1503
1281
  let i = { ...e };
1504
1282
  if (!r.whole && t.size) for (let e of n) i[e] = t.has(e);
1505
1283
  return Object.assign(i, r.manual || {}, r.step || {}), i;
1506
1284
  }
1507
- var wt = /* @__PURE__ */ new WeakMap();
1508
- function Tt(e) {
1509
- let t = e.nodes, n = e.edges || [], r = e.runsMap ? e.runsMap.flight : null, i = wt.get(t);
1285
+ var Ot = /* @__PURE__ */ new WeakMap();
1286
+ function kt(e) {
1287
+ let t = e.nodes, n = e.edges || [], r = e.runsMap ? e.runsMap.flight : null, i = Ot.get(t);
1510
1288
  if (i && i.edges === n && i.n === t.length && i.e === n.length && i.flight === r && i.project === e.projectLayers) return i;
1511
- let a = St({
1289
+ let a = Et({
1512
1290
  nodes: t,
1513
1291
  edges: n,
1514
- rowOf: (t) => mt(e, t),
1292
+ rowOf: (t) => vt(e, t),
1515
1293
  flight: r
1516
1294
  }), o = /* @__PURE__ */ new Set([
1517
- ...ze.map((e) => e.key),
1295
+ ...He.map((e) => e.key),
1518
1296
  ...(e.projectLayers || []).map((e) => e.key),
1519
- ...t.map((t) => mt(e, t)).filter(Boolean)
1297
+ ...t.map((t) => vt(e, t)).filter(Boolean)
1520
1298
  ]), s = {
1521
1299
  edges: n,
1522
1300
  n: t.length,
@@ -1526,21 +1304,21 @@ function Tt(e) {
1526
1304
  touched: a,
1527
1305
  universe: o
1528
1306
  };
1529
- return wt.set(t, s), s;
1307
+ return Ot.set(t, s), s;
1530
1308
  }
1531
- var Et = /* @__PURE__ */ new WeakMap();
1532
- function Dt(e) {
1309
+ var At = /* @__PURE__ */ new WeakMap();
1310
+ function I(e) {
1533
1311
  let t = e.review;
1534
1312
  if (!t || !e.proposal) return e.activeLayers;
1535
- let n = Et.get(t);
1313
+ let n = At.get(t);
1536
1314
  if (n && n.rev === t.rev && n.version === e.sceneVersion && n.active === e.activeLayers && n.nodes === e.nodes) return n.out;
1537
- let { touched: r, universe: i } = Tt(e), a = Ct({
1315
+ let { touched: r, universe: i } = kt(e), a = Dt({
1538
1316
  active: e.activeLayers,
1539
1317
  touched: r,
1540
1318
  universe: i,
1541
1319
  review: t
1542
1320
  });
1543
- return Et.set(t, {
1321
+ return At.set(t, {
1544
1322
  rev: t.rev,
1545
1323
  version: e.sceneVersion,
1546
1324
  active: e.activeLayers,
@@ -1548,7 +1326,12 @@ function Dt(e) {
1548
1326
  out: a
1549
1327
  }), a;
1550
1328
  }
1551
- var Ot = (e) => !!e.review && !!e.proposal && !e.review.whole && gt(e).size > 0, kt = Object.freeze({
1329
+ var jt = (e, t) => I(e)[t] !== !1;
1330
+ function Mt(e, t) {
1331
+ let n = e.review;
1332
+ return !n || !e.proposal || n.whole || e.activeLayers[t] === !1 || Object.hasOwn(n.manual || {}, t) || Object.hasOwn(n.step || {}, t) ? !1 : I(e)[t] === !1;
1333
+ }
1334
+ var Nt = (e) => !!e.review && !!e.proposal && !e.review.whole && bt(e).size > 0, Pt = Object.freeze({
1552
1335
  aliceblue: "#f0f8ff",
1553
1336
  antiquewhite: "#faebd7",
1554
1337
  aqua: "#00ffff",
@@ -1697,8 +1480,8 @@ var Ot = (e) => !!e.review && !!e.proposal && !e.review.whole && gt(e).size > 0,
1697
1480
  whitesmoke: "#f5f5f5",
1698
1481
  yellow: "#ffff00",
1699
1482
  yellowgreen: "#9acd32"
1700
- }), At = "[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?", jt = (e, t, n) => Math.min(n, Math.max(t, e));
1701
- function Mt(e, t) {
1483
+ }), Ft = "[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?", It = (e, t, n) => Math.min(n, Math.max(t, e));
1484
+ function Lt(e, t) {
1702
1485
  let n = RegExp(`^${t}\\(`, "i").exec(e);
1703
1486
  if (!n || !e.endsWith(")")) return null;
1704
1487
  let r = 0;
@@ -1706,19 +1489,19 @@ function Mt(e, t) {
1706
1489
  else if (e[t] === ")" && --r === 0 && t !== e.length - 1) return null;
1707
1490
  return r === 0 ? e.slice(n[0].length, -1) : null;
1708
1491
  }
1709
- function Nt(e, t) {
1492
+ function Rt(e, t) {
1710
1493
  let n = [], r = 0, i = 0;
1711
1494
  for (let a = 0; a < e.length; a++) e[a] === "(" ? r++ : e[a] === ")" ? r-- : e[a] === t && r === 0 && (n.push(e.slice(i, a)), i = a + 1);
1712
1495
  return n.push(e.slice(i)), n;
1713
1496
  }
1714
- var Pt = (e, t) => {
1715
- let n = RegExp(`^(${At})(%?)$`, "i").exec(e);
1497
+ var zt = (e, t) => {
1498
+ let n = RegExp(`^(${Ft})(%?)$`, "i").exec(e);
1716
1499
  return n ? n[2] ? Number(n[1]) / 100 * t : Number(n[1]) : null;
1717
- }, Ft = (e) => e === void 0 ? 1 : (() => {
1718
- let t = Pt(e, 1);
1719
- return t === null ? null : jt(t, 0, 1);
1500
+ }, Bt = (e) => e === void 0 ? 1 : (() => {
1501
+ let t = zt(e, 1);
1502
+ return t === null ? null : It(t, 0, 1);
1720
1503
  })();
1721
- function It(e, t, n) {
1504
+ function Vt(e, t, n) {
1722
1505
  let r = (t) => (t + e / 30) % 12, i = t * Math.min(n, 1 - n), a = (e) => n - i * Math.max(-1, Math.min(r(e) - 3, Math.min(9 - r(e), 1)));
1723
1506
  return [
1724
1507
  a(0) * 255,
@@ -1726,7 +1509,7 @@ function It(e, t, n) {
1726
1509
  a(4) * 255
1727
1510
  ];
1728
1511
  }
1729
- function Lt(e) {
1512
+ function Ht(e) {
1730
1513
  let t = e.trim();
1731
1514
  if (t.includes(",")) {
1732
1515
  let e = t.split(/\s*,\s*/);
@@ -1735,7 +1518,7 @@ function Lt(e) {
1735
1518
  let n = /^(\S+)\s+(\S+)\s+([^\s/]+)(?:\s*\/\s*(\S+))?$/.exec(t);
1736
1519
  return n && !n.slice(1, 4).some((e) => e.includes("/")) ? n.slice(1, n[4] === void 0 ? 4 : 5) : null;
1737
1520
  }
1738
- function Rt(e, t = 0) {
1521
+ function Ut(e, t = 0) {
1739
1522
  let n = String(e).trim().toLowerCase();
1740
1523
  if (n === "transparent") return [
1741
1524
  0,
@@ -1743,7 +1526,7 @@ function Rt(e, t = 0) {
1743
1526
  0,
1744
1527
  0
1745
1528
  ];
1746
- if (kt[n]) return Rt(kt[n], t);
1529
+ if (Pt[n]) return Ut(Pt[n], t);
1747
1530
  let r = /^#([0-9a-f]{3,4})$/.exec(n);
1748
1531
  if (r) {
1749
1532
  let e = [...r[1]].map((e) => parseInt(e + e, 16));
@@ -1763,26 +1546,26 @@ function Rt(e, t = 0) {
1763
1546
  e.length === 8 ? parseInt(e.slice(6, 8), 16) / 255 : 1
1764
1547
  ];
1765
1548
  }
1766
- let i = Mt(n, "rgba?");
1549
+ let i = Lt(n, "rgba?");
1767
1550
  if (i !== null) {
1768
- let e = Lt(i);
1551
+ let e = Ht(i);
1769
1552
  if (!e) return null;
1770
- let t = e.slice(0, 3).map((e) => Pt(e, 255)), n = Ft(e[3]);
1771
- return t.some((e) => e === null) || n === null ? null : [...t.map((e) => jt(e, 0, 255)), n];
1553
+ let t = e.slice(0, 3).map((e) => zt(e, 255)), n = Bt(e[3]);
1554
+ return t.some((e) => e === null) || n === null ? null : [...t.map((e) => It(e, 0, 255)), n];
1772
1555
  }
1773
- let a = Mt(n, "hsla?");
1556
+ let a = Lt(n, "hsla?");
1774
1557
  if (a !== null) {
1775
- let e = Lt(a);
1558
+ let e = Ht(a);
1776
1559
  if (!e) return null;
1777
- let t = RegExp(`^(${At})(?:deg)?$`).exec(e[0]), n = /%$/.test(e[1]) ? Pt(e[1], 1) : null, r = /%$/.test(e[2]) ? Pt(e[2], 1) : null, i = Ft(e[3]);
1778
- return !t || n === null || r === null || i === null ? null : [...It((Number(t[1]) % 360 + 360) % 360, jt(n, 0, 1), jt(r, 0, 1)), i];
1560
+ let t = RegExp(`^(${Ft})(?:deg)?$`).exec(e[0]), n = /%$/.test(e[1]) ? zt(e[1], 1) : null, r = /%$/.test(e[2]) ? zt(e[2], 1) : null, i = Bt(e[3]);
1561
+ return !t || n === null || r === null || i === null ? null : [...Vt((Number(t[1]) % 360 + 360) % 360, It(n, 0, 1), It(r, 0, 1)), i];
1779
1562
  }
1780
- let o = t < 8 ? Mt(n, "color-mix") : null;
1563
+ let o = t < 8 ? Lt(n, "color-mix") : null;
1781
1564
  if (o !== null) {
1782
- let e = Nt(o, ",").map((e) => e.trim());
1565
+ let e = Rt(o, ",").map((e) => e.trim());
1783
1566
  if (e.length !== 3 || !/^in\s+srgb$/.test(e[0])) return null;
1784
1567
  let n = (e) => {
1785
- let n = /^(\d*\.?\d+)%\s+(.+)$/.exec(e), r = /^(.+?)\s+(\d*\.?\d+)%$/.exec(e), [i, a] = n ? [n[2], n[1]] : r ? [r[1], r[2]] : [e, null], o = Rt(i, t + 1);
1568
+ let n = /^(\d*\.?\d+)%\s+(.+)$/.exec(e), r = /^(.+?)\s+(\d*\.?\d+)%$/.exec(e), [i, a] = n ? [n[2], n[1]] : r ? [r[1], r[2]] : [e, null], o = Ut(i, t + 1);
1786
1569
  return o && {
1787
1570
  c: o,
1788
1571
  p: a === null ? null : Number(a) / 100
@@ -1790,27 +1573,27 @@ function Rt(e, t = 0) {
1790
1573
  }, r = n(e[1]), i = n(e[2]);
1791
1574
  if (!r || !i || r.p !== null && (r.p < 0 || r.p > 1) || i.p !== null && (i.p < 0 || i.p > 1)) return null;
1792
1575
  let a = r.p ?? (i.p === null ? .5 : 1 - i.p), s = i.p ?? 1 - a;
1793
- return a + s <= 0 ? null : Bt(r.c, a, i.c, s);
1576
+ return a + s <= 0 ? null : Gt(r.c, a, i.c, s);
1794
1577
  }
1795
1578
  return null;
1796
1579
  }
1797
- function zt(e) {
1580
+ function Wt(e) {
1798
1581
  if (String(e).length > 4096) return null;
1799
1582
  try {
1800
- return Rt(e);
1583
+ return Ut(e);
1801
1584
  } catch {
1802
1585
  return null;
1803
1586
  }
1804
1587
  }
1805
1588
  function L(e) {
1806
- return zt(e) ?? [
1589
+ return Wt(e) ?? [
1807
1590
  0,
1808
1591
  0,
1809
1592
  0,
1810
1593
  0
1811
1594
  ];
1812
1595
  }
1813
- function Bt(e, t, n, r) {
1596
+ function Gt(e, t, n, r) {
1814
1597
  let i = t + r, [a, o] = [t / i, r / i], s = e[3] * a + n[3] * o, c = (t) => s === 0 ? 0 : (e[t] * e[3] * a + n[t] * n[3] * o) / s;
1815
1598
  return [
1816
1599
  c(0),
@@ -1819,10 +1602,10 @@ function Bt(e, t, n, r) {
1819
1602
  s * Math.min(1, i)
1820
1603
  ];
1821
1604
  }
1822
- var Vt = (e) => {
1605
+ var Kt = (e) => {
1823
1606
  let t = e / 255;
1824
1607
  return t <= .03928 ? t / 12.92 : ((t + .055) / 1.055) ** 2.4;
1825
- }, Ht = ([e, t, n]) => .2126 * Vt(e) + .7152 * Vt(t) + .0722 * Vt(n), Ut = (e, t) => (Math.max(e, t) + .05) / (Math.min(e, t) + .05), R = Object.freeze({
1608
+ }, qt = ([e, t, n]) => .2126 * Kt(e) + .7152 * Kt(t) + .0722 * Kt(n), Jt = (e, t) => (Math.max(e, t) + .05) / (Math.min(e, t) + .05), R = Object.freeze({
1826
1609
  dark: Object.freeze({
1827
1610
  added: "#2dd4bf",
1828
1611
  changed: "#fbbf24",
@@ -1835,10 +1618,10 @@ var Vt = (e) => {
1835
1618
  removed: "#e20b0b",
1836
1619
  edit: "#6839f6"
1837
1620
  })
1838
- }), Wt = .85, Gt = .9, Kt = .6, qt = .45, Jt = Object.freeze({
1839
- light: Kt,
1621
+ }), Yt = .85, Xt = .9, Zt = .6, Qt = .45, $t = Object.freeze({
1622
+ light: Zt,
1840
1623
  dark: .5
1841
- }), Yt = Object.freeze({
1624
+ }), en = Object.freeze({
1842
1625
  added: Object.freeze({
1843
1626
  ringDash: Object.freeze([5, 4]),
1844
1627
  edgeDash: Object.freeze([7, 5]),
@@ -1859,14 +1642,14 @@ var Vt = (e) => {
1859
1642
  edgeDash: Object.freeze([12, 4]),
1860
1643
  strike: !1
1861
1644
  })
1862
- }), Xt = "#f4f6fa", Zt = {
1645
+ }), tn = "#f4f6fa", nn = {
1863
1646
  mark: 3.2,
1864
1647
  text: 4.8
1865
- }, Qt = .16, $t = 1.35, en = .11;
1866
- function tn(e, t) {
1648
+ }, rn = .16, an = 1.35, on = .11;
1649
+ function sn(e, t) {
1867
1650
  return e === "light" || e === "dark" ? e : t ? "light" : "dark";
1868
1651
  }
1869
- function nn([e, t, n]) {
1652
+ function cn([e, t, n]) {
1870
1653
  let r = e / 255, i = t / 255, a = n / 255, o = Math.max(r, i, a), s = Math.min(r, i, a), c = (o + s) / 2;
1871
1654
  if (o === s) return [
1872
1655
  0,
@@ -1880,7 +1663,7 @@ function nn([e, t, n]) {
1880
1663
  c
1881
1664
  ];
1882
1665
  }
1883
- function rn([e, t, n]) {
1666
+ function ln([e, t, n]) {
1884
1667
  let r = (t) => (t + e / 30) % 12, i = t * Math.min(n, 1 - n), a = (e) => n - i * Math.max(-1, Math.min(r(e) - 3, 9 - r(e), 1));
1885
1668
  return [
1886
1669
  a(0),
@@ -1888,64 +1671,64 @@ function rn([e, t, n]) {
1888
1671
  a(4)
1889
1672
  ].map((e) => Math.round(e * 255));
1890
1673
  }
1891
- var an = (e) => `#${e.map((e) => e.toString(16).padStart(2, "0")).join("")}`, on = (e, t) => t >= 1 ? an(e) : `rgba(${e.join(", ")}, ${+t.toFixed(3)})`, sn = Ht(L(Xt)), cn = /* @__PURE__ */ new Map();
1674
+ var un = (e) => `#${e.map((e) => e.toString(16).padStart(2, "0")).join("")}`, dn = (e, t) => t >= 1 ? un(e) : `rgba(${e.join(", ")}, ${+t.toFixed(3)})`, fn = qt(L(tn)), pn = /* @__PURE__ */ new Map();
1892
1675
  function z(e, t = "mark") {
1893
- let n = `${t}|${e}`, r = cn.get(n);
1676
+ let n = `${t}|${e}`, r = pn.get(n);
1894
1677
  if (r !== void 0) return r;
1895
- let i = ln(e, t);
1896
- return cn.set(n, i), i;
1678
+ let i = mn(e, t);
1679
+ return pn.set(n, i), i;
1897
1680
  }
1898
- function ln(e, t) {
1681
+ function mn(e, t) {
1899
1682
  if (typeof e != "string") return e;
1900
1683
  let [n, r, i, a] = L(e);
1901
1684
  if (a === 0) return e;
1902
- let [o, s, c] = nn([
1685
+ let [o, s, c] = cn([
1903
1686
  n,
1904
1687
  r,
1905
1688
  i
1906
1689
  ]);
1907
- if ((Math.max(n, r, i) - Math.min(n, r, i)) / 255 < Qt && c > .5) return on(rn([
1690
+ if ((Math.max(n, r, i) - Math.min(n, r, i)) / 255 < rn && c > .5) return dn(ln([
1908
1691
  o,
1909
1692
  s,
1910
- Math.max(en, 1 - c)
1693
+ Math.max(on, 1 - c)
1911
1694
  ]), a);
1912
- let l = Zt[t] || Zt.mark;
1913
- if (Ut(Ht([
1695
+ let l = nn[t] || nn.mark;
1696
+ if (Jt(qt([
1914
1697
  n,
1915
1698
  r,
1916
1699
  i
1917
- ]), sn) >= l) return e;
1700
+ ]), fn) >= l) return e;
1918
1701
  let u = 0, d = c;
1919
1702
  for (let e = 0; e < 20; e++) {
1920
1703
  let e = (u + d) / 2;
1921
- Ut(Ht(rn([
1704
+ Jt(qt(ln([
1922
1705
  o,
1923
1706
  s,
1924
1707
  e
1925
- ])), sn) >= l ? u = e : d = e;
1708
+ ])), fn) >= l ? u = e : d = e;
1926
1709
  }
1927
- return on(rn([
1710
+ return dn(ln([
1928
1711
  o,
1929
1712
  s,
1930
1713
  u
1931
1714
  ]), a);
1932
1715
  }
1933
- var un = (e) => {
1716
+ var hn = (e, t, n = "mark") => t === "light" ? z(e, n) : e, gn = (e) => {
1934
1717
  e && (e.color = z(e.color, "text"));
1935
1718
  };
1936
- function dn(e) {
1719
+ function _n(e) {
1937
1720
  e.theme = "light";
1938
1721
  for (let t of e.nodes) t.color = z(t.color), t.labelColor = z(t.labelColor, "text");
1939
1722
  for (let t of e.edges) {
1940
1723
  if (t.mark && t.mark !== "none") t.color = R.dark[t.mark] === t.color ? R.light[t.mark] : z(t.color);
1941
1724
  else {
1942
- t.alpha < 1 && (t.alpha = Math.min(1, t.alpha * $t)), t.color = z(t.color);
1725
+ t.alpha < 1 && (t.alpha = Math.min(1, t.alpha * an)), t.color = z(t.color);
1943
1726
  let [e, n, r, i] = L(t.color);
1944
- i > 0 && i < 1 && (t.color = on([
1727
+ i > 0 && i < 1 && (t.color = dn([
1945
1728
  e,
1946
1729
  n,
1947
1730
  r
1948
- ], Math.min(1, i * $t)));
1731
+ ], Math.min(1, i * an)));
1949
1732
  }
1950
1733
  t.glowColor &&= z(t.glowColor), t.label &&= {
1951
1734
  ...t.label,
@@ -1973,49 +1756,49 @@ function dn(e) {
1973
1756
  "title",
1974
1757
  "note",
1975
1758
  "arrow"
1976
- ]) t[e] && (t[e] = { ...t[e] }, un(t[e]));
1759
+ ]) t[e] && (t[e] = { ...t[e] }, gn(t[e]));
1977
1760
  return t;
1978
1761
  }), e;
1979
1762
  }
1980
- var fn = 1.2, B = 96, pn = 24, mn = "glyph:", hn = "#ffffff", gn = "#0b1220";
1981
- Object.freeze(Object.keys(E));
1982
- var _n = (e) => typeof e == "string" && Object.hasOwn(E, e), vn = (e, t) => `${mn}${e}|${t}`, yn = (e) => typeof e == "string" && e.startsWith(mn);
1983
- function bn(e) {
1763
+ var vn = 1.2, yn = 96, bn = 24, xn = "glyph:", Sn = "#ffffff", Cn = "#0b1220";
1764
+ Object.freeze(Object.keys(_));
1765
+ var wn = (e) => typeof e == "string" && Object.hasOwn(_, e), Tn = (e, t) => `${xn}${e}|${t}`, En = (e) => typeof e == "string" && e.startsWith(xn);
1766
+ function Dn(e) {
1984
1767
  let t = e.slice(6), n = t.indexOf("|");
1985
1768
  return {
1986
1769
  type: t.slice(0, n),
1987
1770
  ink: t.slice(n + 1)
1988
1771
  };
1989
1772
  }
1990
- var xn = ([e, t, n]) => {
1773
+ var On = ([e, t, n]) => {
1991
1774
  let r = (e) => {
1992
1775
  let t = e / 255;
1993
1776
  return t <= .03928 ? t / 12.92 : ((t + .055) / 1.055) ** 2.4;
1994
1777
  };
1995
1778
  return .2126 * r(e) + .7152 * r(t) + .0722 * r(n);
1996
- }, Sn = (e, t) => {
1779
+ }, kn = (e, t) => {
1997
1780
  let [n, r] = e > t ? [e, t] : [t, e];
1998
1781
  return (n + .05) / (r + .05);
1999
1782
  };
2000
- function Cn(e) {
2001
- let t = xn(L(e));
2002
- return Sn(1, t) >= Sn(xn(L("#0b1220")), t) ? hn : gn;
1783
+ function An(e) {
1784
+ let t = On(L(e));
1785
+ return kn(1, t) >= kn(On(L("#0b1220")), t) ? Sn : Cn;
2003
1786
  }
2004
- var wn = (e, t) => t && t.values && t.values["--corn-map-glyph"] || Cn(e.color), Tn = (e, t) => !!e.glyph && !e.icon && !e.letters && e.r * 2 * t >= 14, En = {
1787
+ var jn = (e, t) => t && t.values && t.values["--corn-map-glyph"] || An(e.color), Mn = (e, t) => !!e.glyph && !e.icon && !e.letters && e.r * 2 * t >= 14, Nn = {
2005
1788
  root: (e) => {
2006
- Dn(e, 12, 12, 8), H(e, 12, 12, 3.2);
1789
+ Pn(e, 12, 12, 8), V(e, 12, 12, 3.2);
2007
1790
  },
2008
1791
  app: (e) => {
2009
- e.beginPath(), e.rect(3.5, 5, 17, 14), e.stroke(), V(e, 3.5, 9.5, 20.5, 9.5);
1792
+ e.beginPath(), e.rect(3.5, 5, 17, 14), e.stroke(), B(e, 3.5, 9.5, 20.5, 9.5);
2010
1793
  },
2011
1794
  page: (e) => {
2012
- e.beginPath(), e.rect(6, 3.5, 12, 17), e.stroke(), V(e, 9, 9, 15, 9), V(e, 9, 12.5, 15, 12.5), V(e, 9, 16, 13, 16);
1795
+ e.beginPath(), e.rect(6, 3.5, 12, 17), e.stroke(), B(e, 9, 9, 15, 9), B(e, 9, 12.5, 15, 12.5), B(e, 9, 16, 13, 16);
2013
1796
  },
2014
1797
  pkg: (e) => {
2015
- e.beginPath(), e.rect(4, 7, 16, 13), e.stroke(), V(e, 4, 12, 20, 12), V(e, 12, 7, 12, 12);
1798
+ e.beginPath(), e.rect(4, 7, 16, 13), e.stroke(), B(e, 4, 12, 20, 12), B(e, 12, 7, 12, 12);
2016
1799
  },
2017
1800
  core: (e) => {
2018
- Dn(e, 12, 12, 8.2), H(e, 12, 12, 4);
1801
+ Pn(e, 12, 12, 8.2), V(e, 12, 12, 4);
2019
1802
  },
2020
1803
  token: (e) => {
2021
1804
  for (let [t, n] of [
@@ -2026,13 +1809,13 @@ var wn = (e, t) => t && t.values && t.values["--corn-map-glyph"] || Cn(e.color),
2026
1809
  ]) e.fillRect(t, n, 6, 6);
2027
1810
  },
2028
1811
  atom: (e) => {
2029
- e.beginPath(), e.ellipse(12, 12, 9.5, 4, -.5, 0, Math.PI * 2), e.stroke(), H(e, 12, 12, 3);
1812
+ e.beginPath(), e.ellipse(12, 12, 9.5, 4, -.5, 0, Math.PI * 2), e.stroke(), V(e, 12, 12, 3);
2030
1813
  },
2031
1814
  molecule: (e) => {
2032
- V(e, 7, 16, 17, 8), H(e, 7, 16, 4), H(e, 17, 8, 4);
1815
+ B(e, 7, 16, 17, 8), V(e, 7, 16, 4), V(e, 17, 8, 4);
2033
1816
  },
2034
1817
  tool: (e) => {
2035
- V(e, 12, 4, 12, 20), V(e, 4, 12, 20, 12);
1818
+ B(e, 12, 4, 12, 20), B(e, 4, 12, 20, 12);
2036
1819
  },
2037
1820
  rom: (e) => {
2038
1821
  e.beginPath(), e.arc(12, 12, 7.5, .4, Math.PI * 1.6), e.stroke(), e.beginPath(), e.moveTo(14.5, 2.5), e.lineTo(20, 5.5), e.lineTo(14, 8.5), e.closePath(), e.fill();
@@ -2041,13 +1824,13 @@ var wn = (e, t) => t && t.values && t.values["--corn-map-glyph"] || Cn(e.color),
2041
1824
  e.beginPath(), e.moveTo(13.5, 2.5), e.lineTo(6, 13.5), e.lineTo(11.5, 13.5), e.lineTo(10, 21.5), e.lineTo(18, 9.5), e.lineTo(12.5, 9.5), e.closePath(), e.fill();
2042
1825
  },
2043
1826
  store: (e) => {
2044
- e.beginPath(), e.ellipse(12, 6.5, 7.5, 3, 0, 0, Math.PI * 2), e.stroke(), V(e, 4.5, 6.5, 4.5, 17.5), V(e, 19.5, 6.5, 19.5, 17.5), e.beginPath(), e.ellipse(12, 17.5, 7.5, 3, 0, 0, Math.PI), e.stroke();
1827
+ e.beginPath(), e.ellipse(12, 6.5, 7.5, 3, 0, 0, Math.PI * 2), e.stroke(), B(e, 4.5, 6.5, 4.5, 17.5), B(e, 19.5, 6.5, 19.5, 17.5), e.beginPath(), e.ellipse(12, 17.5, 7.5, 3, 0, 0, Math.PI), e.stroke();
2045
1828
  },
2046
1829
  table: (e) => {
2047
- e.beginPath(), e.rect(4, 5, 16, 14), e.stroke(), V(e, 4, 10, 20, 10), V(e, 12, 10, 12, 19);
1830
+ e.beginPath(), e.rect(4, 5, 16, 14), e.stroke(), B(e, 4, 10, 20, 10), B(e, 12, 10, 12, 19);
2048
1831
  },
2049
1832
  external: (e) => {
2050
- V(e, 7, 17, 17, 7), e.beginPath(), e.moveTo(9.5, 6.5), e.lineTo(17.5, 6.5), e.lineTo(17.5, 14.5), e.stroke();
1833
+ B(e, 7, 17, 17, 7), e.beginPath(), e.moveTo(9.5, 6.5), e.lineTo(17.5, 6.5), e.lineTo(17.5, 14.5), e.stroke();
2051
1834
  },
2052
1835
  stack: (e) => {
2053
1836
  for (let t of [
@@ -2057,56 +1840,56 @@ var wn = (e, t) => t && t.values && t.values["--corn-map-glyph"] || Cn(e.color),
2057
1840
  ]) e.fillRect(4, t, 16, 3.5);
2058
1841
  },
2059
1842
  machine: (e) => {
2060
- e.beginPath(), e.rect(3.5, 4.5, 17, 11), e.stroke(), V(e, 12, 15.5, 12, 19.5), V(e, 7.5, 19.5, 16.5, 19.5);
1843
+ e.beginPath(), e.rect(3.5, 4.5, 17, 11), e.stroke(), B(e, 12, 15.5, 12, 19.5), B(e, 7.5, 19.5, 16.5, 19.5);
2061
1844
  },
2062
1845
  container: (e) => {
2063
1846
  e.beginPath(), e.rect(4, 4, 16, 16), e.stroke(), e.fillRect(8.5, 8.5, 7, 7);
2064
1847
  },
2065
1848
  device: (e) => {
2066
- e.beginPath(), e.rect(7.5, 3, 9, 18), e.stroke(), H(e, 12, 17.5, 1.3);
1849
+ e.beginPath(), e.rect(7.5, 3, 9, 18), e.stroke(), V(e, 12, 17.5, 1.3);
2067
1850
  },
2068
1851
  floor: (e) => {
2069
1852
  e.beginPath(), e.moveTo(3.5, 20.5), e.lineTo(3.5, 15.5), e.lineTo(9, 15.5), e.lineTo(9, 10.5), e.lineTo(14.5, 10.5), e.lineTo(14.5, 5.5), e.lineTo(20.5, 5.5), e.stroke();
2070
1853
  },
2071
1854
  room: (e) => {
2072
- e.beginPath(), e.rect(6.5, 3.5, 11, 17), e.stroke(), H(e, 14.5, 12.5, 1.4);
1855
+ e.beginPath(), e.rect(6.5, 3.5, 11, 17), e.stroke(), V(e, 14.5, 12.5, 1.4);
2073
1856
  },
2074
1857
  persona: (e) => {
2075
- H(e, 12, 8, 3.8), e.beginPath(), e.arc(12, 21, 8, Math.PI * 1.15, Math.PI * 1.85), e.stroke();
1858
+ V(e, 12, 8, 3.8), e.beginPath(), e.arc(12, 21, 8, Math.PI * 1.15, Math.PI * 1.85), e.stroke();
2076
1859
  }
2077
1860
  };
2078
- function V(e, t, n, r, i) {
1861
+ function B(e, t, n, r, i) {
2079
1862
  e.beginPath(), e.moveTo(t, n), e.lineTo(r, i), e.stroke();
2080
1863
  }
2081
- function Dn(e, t, n, r) {
1864
+ function Pn(e, t, n, r) {
2082
1865
  e.beginPath(), e.arc(t, n, r, 0, Math.PI * 2), e.stroke();
2083
1866
  }
2084
- function H(e, t, n, r) {
1867
+ function V(e, t, n, r) {
2085
1868
  e.beginPath(), e.arc(t, n, r, 0, Math.PI * 2), e.fill();
2086
1869
  }
2087
- function On(e, t, n, r) {
2088
- let i = En[t];
1870
+ function Fn(e, t, n, r) {
1871
+ let i = Nn[t];
2089
1872
  if (!i) return;
2090
- let a = n / pn;
1873
+ let a = n / bn;
2091
1874
  e.save(), e.scale(a, a), e.lineWidth = 2.4, e.lineCap = "round", e.lineJoin = "round", e.strokeStyle = r, e.fillStyle = r, i(e), e.restore();
2092
1875
  }
2093
- var kn = /* @__PURE__ */ new Map();
2094
- function An(e, t) {
2095
- if (!_n(e) || typeof t != "string") return null;
2096
- let n = vn(e, t);
2097
- if (kn.has(n)) return kn.get(n);
2098
- if (kn.size >= 64) return null;
1876
+ var In = /* @__PURE__ */ new Map();
1877
+ function Ln(e, t) {
1878
+ if (!wn(e) || typeof t != "string") return null;
1879
+ let n = Tn(e, t);
1880
+ if (In.has(n)) return In.get(n);
1881
+ if (In.size >= 64) return null;
2099
1882
  let r = null;
2100
1883
  try {
2101
- let n = typeof OffscreenCanvas < "u" ? new OffscreenCanvas(B, B) : typeof document < "u" ? Object.assign(document.createElement("canvas"), {
2102
- width: B,
2103
- height: B
1884
+ let n = typeof OffscreenCanvas < "u" ? new OffscreenCanvas(yn, yn) : typeof document < "u" ? Object.assign(document.createElement("canvas"), {
1885
+ width: yn,
1886
+ height: yn
2104
1887
  }) : null, i = n && n.getContext && n.getContext("2d");
2105
- i && i.stroke && (On(i, e, B, t), r = n);
1888
+ i && i.stroke && (Fn(i, e, yn, t), r = n);
2106
1889
  } catch {
2107
1890
  r = null;
2108
1891
  }
2109
- return kn.set(n, r), r;
1892
+ return In.set(n, r), r;
2110
1893
  }
2111
1894
  Object.freeze([
2112
1895
  "pulls",
@@ -2139,21 +1922,21 @@ Object.freeze([
2139
1922
  ["other", "Cancelled or skipped"]
2140
1923
  ]
2141
1924
  });
2142
- var jn = .2, Mn = "#f87171";
2143
- function Nn(e, t) {
1925
+ var Rn = .2, zn = "#f87171";
1926
+ function Bn(e, t) {
2144
1927
  if (!t || !t.changed.size && !t.failing.size) return;
2145
1928
  let n = (e) => t.changed.has(e) || t.failing.has(e);
2146
- for (let r of e.nodes) n(r.id) ? (r.alpha = 1, r.labelAlpha = 1, r.glow = Math.max(r.glow, 14), r.labelKeep = !0, r.halo !== "selected" && (r.halo = "match"), t.failing.has(r.id) && (r.color = Mn)) : (r.alpha = Math.min(r.alpha, jn), r.labelAlpha = r.alpha, r.glow = 0);
2147
- for (let t of e.edges) !n(t.from) && !n(t.to) && (t.alpha = Math.min(t.alpha, jn / 2));
1929
+ for (let r of e.nodes) n(r.id) ? (r.alpha = 1, r.labelAlpha = 1, r.glow = Math.max(r.glow, 14), r.labelKeep = !0, r.halo !== "selected" && (r.halo = "match"), t.failing.has(r.id) && (r.color = zn)) : (r.alpha = Math.min(r.alpha, Rn), r.labelAlpha = r.alpha, r.glow = 0);
1930
+ for (let t of e.edges) !n(t.from) && !n(t.to) && (t.alpha = Math.min(t.alpha, Rn / 2));
2148
1931
  }
2149
1932
  // ../explorer/search-model.js
2150
- var U = Object.freeze({
1933
+ var Vn = Object.freeze({
2151
1934
  labelStart: 0,
2152
1935
  wordStart: 1,
2153
1936
  label: 2,
2154
1937
  idOrFile: 3,
2155
1938
  typeOrKind: 4
2156
- }), Pn = Object.freeze({
1939
+ }), Hn = Object.freeze({
2157
1940
  root: "Root",
2158
1941
  app: "Apps",
2159
1942
  pkg: "Packages",
@@ -2175,55 +1958,55 @@ var U = Object.freeze({
2175
1958
  floor: "House",
2176
1959
  room: "House",
2177
1960
  persona: "People"
2178
- }), Fn = (e) => e && e.charAt(0).toUpperCase() + e.slice(1), In = (e) => Pn[e.type] || Fn(String(e.type || "")), W = (e) => typeof e == "string" ? e.toLowerCase() : "", Ln = /[^\p{L}\p{N}]+/u;
2179
- function Rn(e, t) {
1961
+ }), Un = (e) => e && e.charAt(0).toUpperCase() + e.slice(1), Wn = (e) => Hn[e.type] || Un(String(e.type || "")), H = (e) => typeof e == "string" ? e.toLowerCase() : "", Gn = /[^\p{L}\p{N}]+/u;
1962
+ function Kn(e, t) {
2180
1963
  let n = String(t || "").toLowerCase();
2181
1964
  if (!n) return -1;
2182
- let r = W(e.label);
2183
- return r.startsWith(n) ? U.labelStart : r.split(Ln).some((e) => e && e.startsWith(n)) ? U.wordStart : r.includes(n) ? U.label : W(e.id).includes(n) || W(e.file).includes(n) ? U.idOrFile : W(e.type).includes(n) || W(In(e)).includes(n) || W(e.kind).includes(n) ? U.typeOrKind : -1;
1965
+ let r = H(e.label);
1966
+ return r.startsWith(n) ? Vn.labelStart : r.split(Gn).some((e) => e && e.startsWith(n)) ? Vn.wordStart : r.includes(n) ? Vn.label : H(e.id).includes(n) || H(e.file).includes(n) ? Vn.idOrFile : H(e.type).includes(n) || H(Wn(e)).includes(n) || H(e.kind).includes(n) ? Vn.typeOrKind : -1;
2184
1967
  }
2185
- function zn(e, t) {
1968
+ function qn(e, t) {
2186
1969
  let n = String(t || "").trim().toLowerCase(), r = /* @__PURE__ */ new Set();
2187
1970
  if (!n) return r;
2188
- for (let t of e) Rn(t, n) >= 0 && r.add(t.id);
1971
+ for (let t of e) Kn(t, n) >= 0 && r.add(t.id);
2189
1972
  return r;
2190
1973
  }
2191
1974
  // ../explorer/css-color.js
2192
- var G, Bn = /* @__PURE__ */ new Map();
2193
- function Vn() {
2194
- if (G !== void 0) return G;
2195
- G = null;
1975
+ var U, Jn = /* @__PURE__ */ new Map();
1976
+ function Yn() {
1977
+ if (U !== void 0) return U;
1978
+ U = null;
2196
1979
  try {
2197
- typeof document < "u" && (G = document.createElement("canvas").getContext("2d", { willReadFrequently: !0 }) || null);
1980
+ typeof document < "u" && (U = document.createElement("canvas").getContext("2d", { willReadFrequently: !0 }) || null);
2198
1981
  } catch {
2199
- G = null;
1982
+ U = null;
2200
1983
  }
2201
- return G;
1984
+ return U;
2202
1985
  }
2203
- function Hn(e) {
1986
+ function Xn(e) {
2204
1987
  let t = typeof e == "string" ? e.trim() : "";
2205
1988
  if (!t || t.toLowerCase() === "auto") return null;
2206
- if (Wn(t)) return t;
1989
+ if (Qn(t)) return t;
2207
1990
  if (/^transparent$/i.test(t)) return "rgba(0, 0, 0, 0)";
2208
- if (Bn.has(t)) return Bn.get(t);
2209
- let n = null, r = Un(t) && !/currentcolor/i.test(t) ? Vn() : null;
1991
+ if (Jn.has(t)) return Jn.get(t);
1992
+ let n = null, r = Zn(t) && !/currentcolor/i.test(t) ? Yn() : null;
2210
1993
  if (r) try {
2211
1994
  let e = (e) => (r.fillStyle = e, r.fillStyle = t, String(r.fillStyle)), i = e("#010203"), a = i === "#010203" && e("#040506") === "#040506" ? null : i;
2212
- n = a === null ? null : Kn(a) ? a : qn(r, t);
1995
+ n = a === null ? null : er(a) ? a : tr(r, t);
2213
1996
  } catch {
2214
1997
  n = null;
2215
1998
  }
2216
- return Bn.set(t, n), n;
1999
+ return Jn.set(t, n), n;
2217
2000
  }
2218
- function Un(e) {
2001
+ function Zn(e) {
2219
2002
  try {
2220
2003
  return typeof CSS > "u" || typeof CSS.supports != "function" || CSS.supports("color", e);
2221
2004
  } catch {
2222
2005
  return !1;
2223
2006
  }
2224
2007
  }
2225
- function Wn(e) {
2226
- if (!Kn(e)) return !1;
2008
+ function Qn(e) {
2009
+ if (!er(e)) return !1;
2227
2010
  let t = /^rgba?\(/i.test(e.trim()) ? e.slice(e.indexOf("(") + 1, e.lastIndexOf(")")).split(",").map(Number) : null;
2228
2011
  if (t && (t.slice(0, 3).some((e) => !(e >= 0 && e <= 255)) || t.length > 3 && !(t[3] > 0 && t[3] <= 1))) return !1;
2229
2012
  let [n, r, i, a] = L(e);
@@ -2233,30 +2016,30 @@ function Wn(e) {
2233
2016
  i
2234
2017
  ].every((e) => Number.isFinite(e) && e >= 0 && e <= 255) && Number.isFinite(a) && a > 0 && a <= 1;
2235
2018
  }
2236
- var Gn = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$|^rgba?\(\s*[\d.]+\s*,\s*[\d.]+\s*,\s*[\d.]+\s*(?:,\s*[\d.]+\s*)?\)$/i, Kn = (e) => Gn.test(e.trim());
2237
- function qn(e, t) {
2019
+ var $n = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$|^rgba?\(\s*[\d.]+\s*,\s*[\d.]+\s*,\s*[\d.]+\s*(?:,\s*[\d.]+\s*)?\)$/i, er = (e) => $n.test(e.trim());
2020
+ function tr(e, t) {
2238
2021
  if (!e.getImageData || !e.fillRect) return null;
2239
2022
  e.clearRect(0, 0, 1, 1), e.fillStyle = t, e.fillRect(0, 0, 1, 1);
2240
2023
  let [n, r, i, a] = e.getImageData(0, 0, 1, 1).data;
2241
- return Jn(n, r, i, a / 255);
2024
+ return nr(n, r, i, a / 255);
2242
2025
  }
2243
- var Jn = (e, t, n, r) => `rgba(${e}, ${t}, ${n}, ${+r.toFixed(3)})`;
2244
- function Yn(e) {
2026
+ var nr = (e, t, n, r) => `rgba(${e}, ${t}, ${n}, ${+r.toFixed(3)})`;
2027
+ function rr(e) {
2245
2028
  if (typeof e != "string" || e.length > 200) return null;
2246
2029
  let t = e.trim();
2247
- return !t || /^(?:auto|currentcolor)$/i.test(t) ? null : Hn(t) || (Vn() === null && zt(t) ? t : null);
2030
+ return !t || /^(?:auto|currentcolor)$/i.test(t) ? null : Xn(t) || (Yn() === null && Wt(t) ? t : null);
2248
2031
  }
2249
2032
  // ../explorer/camera.js
2250
- var K = .25, Xn = .005, Zn = (e, t = K) => Math.max(Math.max(Xn, Math.min(t, K)), Math.min(3, e)), Qn = (e, t, n) => t < e ? Math.min(e, Zn(t, n)) : Zn(t, n);
2251
- function $n(e, t, n, r, i = K) {
2252
- let a = Qn(e.zoom, e.zoom * t, i), o = (n - e.x) / e.zoom, s = (r - e.y) / e.zoom;
2033
+ var W = .25, ir = .005, ar = (e, t = W) => Math.max(Math.max(ir, Math.min(t, W)), Math.min(3, e)), or = (e, t, n) => t < e ? Math.min(e, ar(t, n)) : ar(t, n);
2034
+ function sr(e, t, n, r, i = W) {
2035
+ let a = or(e.zoom, e.zoom * t, i), o = (n - e.x) / e.zoom, s = (r - e.y) / e.zoom;
2253
2036
  return {
2254
2037
  x: n - o * a,
2255
2038
  y: r - s * a,
2256
2039
  zoom: a
2257
2040
  };
2258
2041
  }
2259
- var er = (e, t, n) => ({
2042
+ var cr = (e, t, n) => ({
2260
2043
  x: e.x,
2261
2044
  y: e.y,
2262
2045
  zoom: e.zoom,
@@ -2266,15 +2049,15 @@ var er = (e, t, n) => ({
2266
2049
  y: n.y
2267
2050
  }
2268
2051
  });
2269
- function tr(e, t, n, r = K) {
2270
- let i = Qn(e.zoom, e.zoom * (t / e.dist), r), a = (e.mid.x - e.x) / e.zoom, o = (e.mid.y - e.y) / e.zoom;
2052
+ function lr(e, t, n, r = W) {
2053
+ let i = or(e.zoom, e.zoom * (t / e.dist), r), a = (e.mid.x - e.x) / e.zoom, o = (e.mid.y - e.y) / e.zoom;
2271
2054
  return {
2272
2055
  x: n.x - a * i,
2273
2056
  y: n.y - o * i,
2274
2057
  zoom: i
2275
2058
  };
2276
2059
  }
2277
- function nr(e, t, n = {}, r = 120) {
2060
+ function ur(e, t, n = {}, r = 120) {
2278
2061
  let i = (e, t = 0, n = 0) => {
2279
2062
  let i = Math.max(0, t), a = Math.max(0, n), o = Math.max(0, e - r), s = i + a > o && i + a > 0 ? o / (i + a) : 1;
2280
2063
  return [i * s, a * s];
@@ -2286,7 +2069,7 @@ function nr(e, t, n = {}, r = 120) {
2286
2069
  height: Math.max(0, t - a - o)
2287
2070
  };
2288
2071
  }
2289
- var rr = (e) => {
2072
+ var dr = (e) => {
2290
2073
  let t = e.r || 18;
2291
2074
  return {
2292
2075
  left: e.x - t - 25,
@@ -2294,15 +2077,15 @@ var rr = (e) => {
2294
2077
  top: e.y - t - 25,
2295
2078
  bottom: e.y + t + 35
2296
2079
  };
2297
- }, ir = (e, t) => Math.min(e, t.width / 4, t.height / 4);
2298
- function ar(e, t, { padding: n = 40, maxZoom: r = 1, minZoom: i = K } = {}) {
2080
+ }, fr = (e, t) => Math.min(e, t.width / 4, t.height / 4);
2081
+ function pr(e, t, { padding: n = 40, maxZoom: r = 1, minZoom: i = W } = {}) {
2299
2082
  if (!e.length) return null;
2300
2083
  let a = Infinity, o = -Infinity, s = Infinity, c = -Infinity;
2301
2084
  for (let t of e) {
2302
- let e = rr(t);
2085
+ let e = dr(t);
2303
2086
  a = Math.min(a, e.left), o = Math.max(o, e.right), s = Math.min(s, e.top), c = Math.max(c, e.bottom);
2304
2087
  }
2305
- let l = ir(n, t), u = Math.min((t.width - l * 2) / (o - a), (t.height - l * 2) / (c - s)), d = Math.max(i, Math.min(r, u));
2088
+ let l = fr(n, t), u = Math.min((t.width - l * 2) / (o - a), (t.height - l * 2) / (c - s)), d = Math.max(i, Math.min(r, u));
2306
2089
  return {
2307
2090
  x: t.x + t.width / 2 - (a + o) / 2 * d,
2308
2091
  y: t.y + t.height / 2 - (s + c) / 2 * d,
@@ -2310,7 +2093,7 @@ function ar(e, t, { padding: n = 40, maxZoom: r = 1, minZoom: i = K } = {}) {
2310
2093
  };
2311
2094
  }
2312
2095
  // ../explorer/selection-model.js
2313
- var or = Object.freeze({
2096
+ var mr = Object.freeze({
2314
2097
  ownership: {
2315
2098
  panel: "Owns",
2316
2099
  edge: "owns"
@@ -2355,8 +2138,8 @@ var or = Object.freeze({
2355
2138
  panel: "Extends",
2356
2139
  edge: "extends"
2357
2140
  }
2358
- }), sr = (e) => e.kind || (e.dashed ? "usage" : "ownership"), cr = (e) => `${e.from}->${e.to}`, lr = (e) => Object.hasOwn(or, e) ? or[e].edge : String(e);
2359
- function ur(e, t, { throughChildren: n = !1, kind: r = null } = {}) {
2141
+ }), hr = (e) => e.kind || (e.dashed ? "usage" : "ownership"), gr = (e) => `${e.from}->${e.to}`, _r = (e) => Object.hasOwn(mr, e) ? mr[e].edge : String(e);
2142
+ function vr(e, t, { throughChildren: n = !1, kind: r = null } = {}) {
2360
2143
  if (!e) return null;
2361
2144
  let i = e.id, a = /* @__PURE__ */ new Set();
2362
2145
  for (let e of t) !e.kind && !e.dashed && e.from === i && a.add(e.to);
@@ -2364,11 +2147,11 @@ function ur(e, t, { throughChildren: n = !1, kind: r = null } = {}) {
2364
2147
  for (let e of t) (o ? o.has(e.from) || o.has(e.to) : e.from === i || e.to === i) && s.push(e);
2365
2148
  let c = /* @__PURE__ */ new Map();
2366
2149
  for (let e of s) {
2367
- let t = sr(e);
2150
+ let t = hr(e);
2368
2151
  c.set(t, (c.get(t) || 0) + 1);
2369
2152
  }
2370
- let l = r && c.has(r) ? r : null, u = l ? s.filter((e) => sr(e) === l) : s, d = /* @__PURE__ */ new Set([i]), f = /* @__PURE__ */ new Set();
2371
- for (let e of u) d.add(e.from), d.add(e.to), f.add(cr(e));
2153
+ let l = r && c.has(r) ? r : null, u = l ? s.filter((e) => hr(e) === l) : s, d = /* @__PURE__ */ new Set([i]), f = /* @__PURE__ */ new Set();
2154
+ for (let e of u) d.add(e.from), d.add(e.to), f.add(gr(e));
2372
2155
  return {
2373
2156
  connectedNodeIds: d,
2374
2157
  connectedEdgeKeys: f,
@@ -2380,8 +2163,20 @@ function ur(e, t, { throughChildren: n = !1, kind: r = null } = {}) {
2380
2163
  throughChildren: n
2381
2164
  };
2382
2165
  }
2383
- function dr(e, t, n, { padding: r = 40 } = {}) {
2384
- let i = ar(t.length ? t : [e], n, {
2166
+ var yr = (e, t) => ({
2167
+ x: e.x + t.x * e.zoom,
2168
+ y: e.y + t.y * e.zoom
2169
+ });
2170
+ function br(e, t, n) {
2171
+ let r = 0;
2172
+ for (let i of e) {
2173
+ let e = yr(t, i);
2174
+ (e.x < n.x || e.x > n.x + n.width || e.y < n.y || e.y > n.y + n.height) && r++;
2175
+ }
2176
+ return r;
2177
+ }
2178
+ function xr(e, t, n, { padding: r = 40 } = {}) {
2179
+ let i = pr(t.length ? t : [e], n, {
2385
2180
  padding: r,
2386
2181
  maxZoom: 1,
2387
2182
  minZoom: 1e-4
@@ -2397,7 +2192,7 @@ function dr(e, t, n, { padding: r = 40 } = {}) {
2397
2192
  };
2398
2193
  }
2399
2194
  // ../explorer/scene.js
2400
- var fr = [
2195
+ var Sr = [
2401
2196
  "root",
2402
2197
  "app",
2403
2198
  "pkg",
@@ -2405,7 +2200,7 @@ var fr = [
2405
2200
  "store",
2406
2201
  "rom",
2407
2202
  "floor"
2408
- ], pr = "\"Segoe UI\", -apple-system, BlinkMacSystemFont, Roboto, sans-serif", mr = "\"Segoe UI\", -apple-system, sans-serif", hr = .32, gr = "#ffffff", _r = .07, vr = {
2203
+ ], Cr = "\"Segoe UI\", -apple-system, BlinkMacSystemFont, Roboto, sans-serif", wr = "\"Segoe UI\", -apple-system, sans-serif", Tr = .32, Er = "#ffffff", Dr = .07, Or = {
2409
2204
  node: {
2410
2205
  color: "rgba(9, 13, 22, 0.85)",
2411
2206
  width: 3.5
@@ -2414,10 +2209,10 @@ var fr = [
2414
2209
  color: "rgba(9, 13, 22, 0.9)",
2415
2210
  width: 3
2416
2211
  }
2417
- }, yr = {
2212
+ }, kr = {
2418
2213
  length: 9,
2419
2214
  spread: .45
2420
- }, br = Object.freeze({
2215
+ }, Ar = Object.freeze({
2421
2216
  flow: "chevron",
2422
2217
  reads: "chevron",
2423
2218
  writes: "chevron",
@@ -2427,7 +2222,7 @@ var fr = [
2427
2222
  "runs-on": "bar",
2428
2223
  uses: "diamond",
2429
2224
  extends: "diamond"
2430
- }), xr = Object.freeze({
2225
+ }), jr = Object.freeze({
2431
2226
  strokeWidth: 1.8,
2432
2227
  barHalf: 5,
2433
2228
  diamondHalf: 6,
@@ -2435,20 +2230,20 @@ var fr = [
2435
2230
  tickHalf: 4,
2436
2231
  tickWidth: 1.6,
2437
2232
  tickGap: 6
2438
- }), q = Object.freeze({
2233
+ }), G = Object.freeze({
2439
2234
  roundedHalf: .9,
2440
2235
  roundedCorner: .3,
2441
2236
  hexInradius: .9,
2442
2237
  squareHalf: .86,
2443
2238
  squareCorner: .12,
2444
2239
  diamondHalf: 1.15
2445
- }), Sr = Object.freeze({
2240
+ }), Mr = Object.freeze({
2446
2241
  circle: 1,
2447
- "rounded-square": (q.roundedHalf - q.roundedCorner) * Math.SQRT2 + q.roundedCorner,
2448
- hexagon: q.hexInradius / Math.cos(Math.PI / 6),
2449
- square: (q.squareHalf - q.squareCorner) * Math.SQRT2 + q.squareCorner,
2450
- diamond: q.diamondHalf
2451
- }), Cr = Object.freeze([7, 5]), wr = Object.freeze([1.5, 4]), Tr = {
2242
+ "rounded-square": (G.roundedHalf - G.roundedCorner) * Math.SQRT2 + G.roundedCorner,
2243
+ hexagon: G.hexInradius / Math.cos(Math.PI / 6),
2244
+ square: (G.squareHalf - G.squareCorner) * Math.SQRT2 + G.squareCorner,
2245
+ diamond: G.diamondHalf
2246
+ }), Nr = Object.freeze([7, 5]), Pr = Object.freeze([1.5, 4]), Fr = {
2452
2247
  selected: {
2453
2248
  fill: "rgba(99, 102, 241, 0.55)",
2454
2249
  fillR: 8,
@@ -2470,17 +2265,17 @@ var fr = [
2470
2265
  ringR: 5,
2471
2266
  ringWidth: 1.2
2472
2267
  }
2473
- }, Er = {
2268
+ }, Ir = {
2474
2269
  halfLength: 7,
2475
2270
  width: 2
2476
- }, Dr = {
2271
+ }, Lr = {
2477
2272
  color: "#ffffff",
2478
2273
  radius: 3.5,
2479
2274
  glow: 10,
2480
2275
  cycleMs: 2600
2481
- }, J = {
2276
+ }, K = {
2482
2277
  added: {
2483
- ...Yt.added,
2278
+ ...en.added,
2484
2279
  color: R.dark.added,
2485
2280
  ringR: 9,
2486
2281
  ringWidth: 2,
@@ -2488,7 +2283,7 @@ var fr = [
2488
2283
  alpha: 1
2489
2284
  },
2490
2285
  changed: {
2491
- ...Yt.changed,
2286
+ ...en.changed,
2492
2287
  color: R.dark.changed,
2493
2288
  ringR: 9,
2494
2289
  ringWidth: 2.5,
@@ -2496,15 +2291,15 @@ var fr = [
2496
2291
  alpha: 1
2497
2292
  },
2498
2293
  removed: {
2499
- ...Yt.removed,
2294
+ ...en.removed,
2500
2295
  color: R.dark.removed,
2501
2296
  ringR: 9,
2502
2297
  ringWidth: 2,
2503
2298
  edgeWidth: 2,
2504
- alpha: Wt
2299
+ alpha: Yt
2505
2300
  },
2506
2301
  edit: {
2507
- ...Yt.edit,
2302
+ ...en.edit,
2508
2303
  color: R.dark.edit,
2509
2304
  ringR: 9,
2510
2305
  ringWidth: 3,
@@ -2512,10 +2307,10 @@ var fr = [
2512
2307
  alpha: 1
2513
2308
  }
2514
2309
  };
2515
- function Or(e) {
2516
- return e === "light" ? jr : Ar;
2310
+ function Rr(e) {
2311
+ return e === "light" ? Vr : Br;
2517
2312
  }
2518
- var kr = (e) => {
2313
+ var zr = (e) => {
2519
2314
  let t = { ...e };
2520
2315
  for (let e of [
2521
2316
  "fill",
@@ -2523,18 +2318,18 @@ var kr = (e) => {
2523
2318
  "color"
2524
2319
  ]) typeof t[e] == "string" && (t[e] = z(t[e]));
2525
2320
  return t;
2526
- }, Ar = Object.freeze({
2527
- halo: Tr,
2528
- mark: J,
2529
- core: gr,
2530
- labelOutline: vr
2531
- }), jr = Object.freeze({
2532
- halo: Object.fromEntries(Object.entries(Tr).map(([e, t]) => [e, kr(t)])),
2533
- mark: Object.fromEntries(Object.entries(J).map(([e, t]) => [e, {
2321
+ }, Br = Object.freeze({
2322
+ halo: Fr,
2323
+ mark: K,
2324
+ core: Er,
2325
+ labelOutline: Or
2326
+ }), Vr = Object.freeze({
2327
+ halo: Object.fromEntries(Object.entries(Fr).map(([e, t]) => [e, zr(t)])),
2328
+ mark: Object.fromEntries(Object.entries(K).map(([e, t]) => [e, {
2534
2329
  ...t,
2535
2330
  color: R.light[e]
2536
2331
  }])),
2537
- core: gr,
2332
+ core: Er,
2538
2333
  labelOutline: {
2539
2334
  node: {
2540
2335
  color: "rgba(244, 246, 250, 0.9)",
@@ -2545,28 +2340,28 @@ var kr = (e) => {
2545
2340
  width: 3
2546
2341
  }
2547
2342
  }
2548
- }), Mr = {
2343
+ }), Hr = {
2549
2344
  ring: 1.8,
2550
2345
  edge: 1.6,
2551
2346
  gap: 4
2552
- }, Nr = .28;
2553
- function Y(e, t, { viewer: n = !1 } = {}) {
2554
- return e.proposal && !v(e.proposalView || "diff", t) ? !1 : e.view === "dataflow" ? !!e.flow && e.flow.ids.has(t.id) : e.view === "house" ? ye(e, t) : t.type === "root" || Pr(e, t, n ? e.activeLayers : Dt(e)) || _t(e, t);
2347
+ }, Ur = .28;
2348
+ function q(e, t, { viewer: n = !1 } = {}) {
2349
+ return e.proposal && !s(e.proposalView || "diff", t) ? !1 : e.view === "dataflow" ? !!e.flow && e.flow.ids.has(t.id) : e.view === "house" ? be(e, t) : t.type === "root" || Wr(e, t, n ? e.activeLayers : I(e)) || xt(e, t);
2555
2350
  }
2556
- function Pr(e, t, n = Dt(e)) {
2557
- let r = pt(e, t);
2558
- return r ? n[r] !== !1 : t.type === "core" ? (n.pkg || n.atom) && n.core !== !1 : t.type === "store" ? n.flow !== !1 && n.store !== !1 : t.type === "rom" ? n.rom !== !1 && n.flow !== !1 : t.type === "floor" || t.type === "room" ? n.house !== !1 : t.type === "external" ? n[se(t)] !== !1 : n[t.type] !== !1;
2351
+ function Wr(e, t, n = I(e)) {
2352
+ let r = _t(e, t);
2353
+ return r ? n[r] !== !1 : t.type === "core" ? (n.pkg || n.atom) && n.core !== !1 : t.type === "store" ? n.flow !== !1 && n.store !== !1 : t.type === "rom" ? n.rom !== !1 && n.flow !== !1 : t.type === "floor" || t.type === "room" ? n.house !== !1 : t.type === "external" ? n[ce(t)] !== !1 : n[t.type] !== !1;
2559
2354
  }
2560
- var Fr = (e) => e.view === "dataflow" && e.flow ? e.flow.edges : e.view === "house" ? be(e) : e.edges;
2561
- function Ir(e, t, n) {
2562
- return ur(e, t, n);
2355
+ var Gr = (e) => e.view === "dataflow" && e.flow ? e.flow.edges : e.view === "house" ? Se(e) : e.edges;
2356
+ function Kr(e, t, n) {
2357
+ return vr(e, t, n);
2563
2358
  }
2564
- function Lr(e) {
2565
- let t = e.scenario, n = new Set(t.visited.nodes), r = new Set(t.visited.edgeList.map(X));
2359
+ function qr(e) {
2360
+ let t = e.scenario, n = new Set(t.visited.nodes), r = new Set(t.visited.edgeList.map(J));
2566
2361
  t.linkNodes && e.edges.forEach((e) => {
2567
- n.has(e.from) && n.has(e.to) && r.add(X(e));
2362
+ n.has(e.from) && n.has(e.to) && r.add(J(e));
2568
2363
  });
2569
- let i = ge(t, e.nodes, e.edges);
2364
+ let i = _e(t, e.nodes, e.edges);
2570
2365
  i && (i.down.forEach((e) => n.add(e)), i.hits.forEach((e, t) => n.add(t)), i.edges.forEach((e, t) => r.add(t)));
2571
2366
  let { node: a, edge: o } = t.current, s = a === void 0 ? o ? o.kind === "writes" ? o.from : o.to : void 0 : a;
2572
2367
  return {
@@ -2576,7 +2371,7 @@ function Lr(e) {
2576
2371
  selectedId: s
2577
2372
  };
2578
2373
  }
2579
- function Rr(e, t, n) {
2374
+ function Jr(e, t, n) {
2580
2375
  let r = n.x - t.x, i = n.y - t.y, a = Math.hypot(r, i) || 1, o = e.bend === void 0 ? .18 : e.bend, s = {
2581
2376
  x: (t.x + n.x) / 2 + -i / a * a * o,
2582
2377
  y: (t.y + n.y) / 2 + r / a * a * o
@@ -2593,14 +2388,14 @@ function Rr(e, t, n) {
2593
2388
  c: s
2594
2389
  };
2595
2390
  }
2596
- function zr(e, t, n, r) {
2391
+ function Yr(e, t, n, r) {
2597
2392
  let i = 1 - r;
2598
2393
  return {
2599
2394
  x: i * i * e.x + 2 * i * r * t.x + r * r * n.x,
2600
2395
  y: i * i * e.y + 2 * i * r * t.y + r * r * n.y
2601
2396
  };
2602
2397
  }
2603
- function Br(e, t) {
2398
+ function Xr(e, t) {
2604
2399
  let n = {
2605
2400
  x: e.x1,
2606
2401
  y: e.y1
@@ -2608,7 +2403,7 @@ function Br(e, t) {
2608
2403
  x: e.x2,
2609
2404
  y: e.y2
2610
2405
  };
2611
- return zr(n, e.curve ? {
2406
+ return Yr(n, e.curve ? {
2612
2407
  x: e.curve.cx,
2613
2408
  y: e.curve.cy
2614
2409
  } : {
@@ -2616,16 +2411,16 @@ function Br(e, t) {
2616
2411
  y: (n.y + r.y) / 2
2617
2412
  }, r, t);
2618
2413
  }
2619
- function Vr(e, t) {
2620
- return Br(e, (t / 1e3 * e.packet.speed + e.packet.phase) % 1);
2414
+ function Zr(e, t) {
2415
+ return Xr(e, (t / 1e3 * e.packet.speed + e.packet.phase) % 1);
2621
2416
  }
2622
- var Hr = (e) => e.kind || (e.dashed ? "usage" : "ownership"), Ur = (e) => `${e.from}->${e.to}${e.kind ? `|${e.kind}` : e.dashed ? "|dashed" : ""}${e.kind === "flow" && e.flow ? `|${e.flow}` : ""}`, X = (e) => `${e.from}->${e.to}`;
2623
- function Wr(e, t, n, r, a, o) {
2624
- let s = e.kind === "reads" || e.kind === "writes", c = i(e), l = !r || r.connectedEdgeKeys.has(X(e)), u = e.status !== "live", { a: d, b: f, c: p } = Rr(e, t, n), m = !!r && l, h = Hr(e), g = null;
2417
+ var Qr = (e) => e.kind || (e.dashed ? "usage" : "ownership"), $r = (e) => `${e.from}->${e.to}${e.kind ? `|${e.kind}` : e.dashed ? "|dashed" : ""}${e.kind === "flow" && e.flow ? `|${e.flow}` : ""}`, J = (e) => `${e.from}->${e.to}`;
2418
+ function ei(e, t, n, r, a, o) {
2419
+ let s = e.kind === "reads" || e.kind === "writes", c = i(e), l = !r || r.connectedEdgeKeys.has(J(e)), u = e.status !== "live", { a: d, b: f, c: p } = Jr(e, t, n), m = !!r && l, h = Qr(e), g = null;
2625
2420
  if (r && l) {
2626
- let t = zr(d, p, f, .5);
2421
+ let t = Yr(d, p, f, .5);
2627
2422
  g = {
2628
- text: e.count !== void 0 && e.label ? e.label : lr(h),
2423
+ text: e.count !== void 0 && e.label ? e.label : _r(h),
2629
2424
  x: t.x,
2630
2425
  y: t.y,
2631
2426
  color: c.color,
@@ -2636,19 +2431,19 @@ function Wr(e, t, n, r, a, o) {
2636
2431
  if ((r ? l : a) && !o) {
2637
2432
  let t = e.phase === void 0 ? (e.from.length * 7 + e.to.length * 13) % 10 / 10 : e.phase;
2638
2433
  _ = {
2639
- color: Dr.color,
2434
+ color: Lr.color,
2640
2435
  glowColor: c.color,
2641
- radius: Dr.radius,
2642
- glow: Dr.glow,
2643
- speed: 1e3 / Dr.cycleMs,
2436
+ radius: Lr.radius,
2437
+ glow: Lr.glow,
2438
+ speed: 1e3 / Lr.cycleMs,
2644
2439
  phase: t
2645
2440
  };
2646
2441
  }
2647
2442
  return {
2648
- key: Ur(e),
2443
+ key: $r(e),
2649
2444
  from: e.from,
2650
2445
  to: e.to,
2651
- kind: Hr(e),
2446
+ kind: Qr(e),
2652
2447
  x1: d.x,
2653
2448
  y1: d.y,
2654
2449
  x2: f.x,
@@ -2658,14 +2453,14 @@ function Wr(e, t, n, r, a, o) {
2658
2453
  color: c.color,
2659
2454
  width: m ? 2.4 : a && !s ? 2 : 1.6,
2660
2455
  alpha: r ? l ? 1 : .04 : a ? s ? .2 : .65 : s ? .12 : .45,
2661
- dash: u ? Cr : null,
2662
- ticks: oe(e),
2456
+ dash: u ? Nr : null,
2457
+ ticks: se(e),
2663
2458
  curve: {
2664
2459
  cx: p.x,
2665
2460
  cy: p.y
2666
2461
  },
2667
2462
  arrow: !0,
2668
- end: Object.hasOwn(br, h) ? br[h] : "triangle",
2463
+ end: Object.hasOwn(Ar, h) ? Ar[h] : "triangle",
2669
2464
  glow: m ? 8 : 0,
2670
2465
  glowColor: m ? c.color : null,
2671
2466
  label: g,
@@ -2674,13 +2469,13 @@ function Wr(e, t, n, r, a, o) {
2674
2469
  live: !!e.live
2675
2470
  };
2676
2471
  }
2677
- function Gr(e, t, n, r) {
2678
- let i = !r || r.connectedEdgeKeys.has(X(e)), a, o, s = null, c = 0, l = null;
2679
- return r ? i ? e.dashed ? (a = "#818cf8", o = 2, c = 8, l = "rgba(129, 140, 248, 0.7)", s = wr) : (a = "#ffffff", o = 2.4, c = 10, l = "rgba(255, 255, 255, 0.8)") : (a = "rgba(255, 255, 255, 0.02)", o = .8, s = e.dashed ? wr : null) : e.dashed ? (a = "rgba(129, 140, 248, 0.35)", o = 1.2, s = wr) : (a = "rgba(255, 255, 255, 0.16)", o = 1.4), {
2680
- key: Ur(e),
2472
+ function ti(e, t, n, r) {
2473
+ let i = !r || r.connectedEdgeKeys.has(J(e)), a, o, s = null, c = 0, l = null;
2474
+ return r ? i ? e.dashed ? (a = "#818cf8", o = 2, c = 8, l = "rgba(129, 140, 248, 0.7)", s = Pr) : (a = "#ffffff", o = 2.4, c = 10, l = "rgba(255, 255, 255, 0.8)") : (a = "rgba(255, 255, 255, 0.02)", o = .8, s = e.dashed ? Pr : null) : e.dashed ? (a = "rgba(129, 140, 248, 0.35)", o = 1.2, s = Pr) : (a = "rgba(255, 255, 255, 0.16)", o = 1.4), {
2475
+ key: $r(e),
2681
2476
  from: e.from,
2682
2477
  to: e.to,
2683
- kind: Hr(e),
2478
+ kind: Qr(e),
2684
2479
  x1: t.x,
2685
2480
  y1: t.y,
2686
2481
  x2: n.x,
@@ -2703,7 +2498,7 @@ function Gr(e, t, n, r) {
2703
2498
  live: !!e.live
2704
2499
  };
2705
2500
  }
2706
- var Kr = [
2501
+ var ni = [
2707
2502
  "flow",
2708
2503
  "reads",
2709
2504
  "writes",
@@ -2713,85 +2508,85 @@ var Kr = [
2713
2508
  "delivers",
2714
2509
  "uses",
2715
2510
  "extends"
2716
- ], qr = (e) => e.proposal ? e.proposalView || "diff" : null;
2717
- function Jr(e, t, n, r = !1, i = !1) {
2511
+ ], ri = (e) => e.proposal ? e.proposalView || "diff" : null;
2512
+ function ii(e, t, n, r = !1, i = !1) {
2718
2513
  if (e.mark = t, t === "none") {
2719
- (n === "diff" || i) && (e.alpha *= Nr, e.glow = 0, e.packet = null), i && (e.greyed = !0);
2514
+ (n === "diff" || i) && (e.alpha *= Ur, e.glow = 0, e.packet = null), i && (e.greyed = !0);
2720
2515
  return;
2721
2516
  }
2722
- let a = J[t];
2723
- e.color = a.color, e.dash = r ? J.removed.edgeDash : a.edgeDash, e.width = Math.max(e.width, a.edgeWidth), e.alpha >= .1 && (e.alpha = Math.max(e.alpha, Gt) * (r ? J.removed.alpha : a.alpha)), e.glow && (e.glowColor = a.color);
2517
+ let a = K[t];
2518
+ e.color = a.color, e.dash = r ? K.removed.edgeDash : a.edgeDash, e.width = Math.max(e.width, a.edgeWidth), e.alpha >= .1 && (e.alpha = Math.max(e.alpha, Xt) * (r ? K.removed.alpha : a.alpha)), e.glow && (e.glowColor = a.color);
2724
2519
  }
2725
- function Yr(e, t, n) {
2726
- let { nodes: r } = e, i = Dt(e), a = Ot(e), o = new Map(r.map((e) => [e.id, e])), s = e.view === "dataflow", c = [], l = (e) => !!t && t.connectedEdgeKeys.has(X(e)), u = (e, r, i) => c.push(Wr(e, r, i, t, s, n)), d = qr(e), f = (n) => {
2520
+ function ai(e, t, n) {
2521
+ let { nodes: r } = e, i = I(e), a = Nt(e), o = new Map(r.map((e) => [e.id, e])), s = e.view === "dataflow", d = [], f = (e) => !!t && t.connectedEdgeKeys.has(J(e)), p = (e, r, i) => d.push(ei(e, r, i, t, s, n)), m = ri(e), h = (n) => {
2727
2522
  let r = o.get(n.from), a = o.get(n.to);
2728
- if (r && a && Y(e, r) && Y(e, a)) {
2729
- if (s) return u(n, r, a);
2523
+ if (r && a && q(e, r) && q(e, a)) {
2524
+ if (s) return p(n, r, a);
2730
2525
  if (e.view === "house") {
2731
- let e = xe(n, r, a);
2732
- e === "flow" ? u(n, r, a) : e === "link" && c.push(Gr(n, r, a, t));
2733
- } else n.kind === "flow" ? i.flow !== !1 && u(n, r, a) : n.kind === "reads" || n.kind === "writes" ? i.table !== !1 && u(n, r, a) : n.kind === "runs-on" ? (i.stack !== !1 || a.type === "machine") && u(n, r, a) : n.kind === "calls" || n.kind === "triggers" || n.kind === "delivers" ? (r.type !== "page" || n.kind !== "calls" || l(n)) && u(n, r, a) : n.kind === "uses" || n.kind === "extends" ? l(n) && u(n, r, a) : c.push(Gr(n, r, a, t));
2526
+ let e = Ce(n, r, a);
2527
+ e === "flow" ? p(n, r, a) : e === "link" && d.push(ti(n, r, a, t));
2528
+ } else n.kind === "flow" ? i.flow !== !1 && p(n, r, a) : n.kind === "reads" || n.kind === "writes" ? i.table !== !1 && p(n, r, a) : n.kind === "runs-on" ? (i.stack !== !1 || a.type === "machine") && p(n, r, a) : n.kind === "calls" || n.kind === "triggers" || n.kind === "delivers" ? (r.type !== "page" || n.kind !== "calls" || f(n)) && p(n, r, a) : n.kind === "uses" || n.kind === "extends" ? f(n) && p(n, r, a) : d.push(ti(n, r, a, t));
2734
2529
  }
2735
2530
  };
2736
- return Fr(e).forEach((n) => {
2737
- if (d && !y(d, n)) return;
2738
- let r = d === "before" ? x(n) : n, i = d ? b(d, n) : "none", l = c.length;
2739
- if (i === "none") f(r);
2531
+ return Gr(e).forEach((n) => {
2532
+ if (m && !c(m, n)) return;
2533
+ let r = m === "before" ? u(n) : n, i = m ? l(m, n) : "none", f = d.length;
2534
+ if (i === "none") h(r);
2740
2535
  else {
2741
2536
  let n = o.get(r.from), i = o.get(r.to);
2742
- if (!n || !i || !Y(e, n) || !Y(e, i)) return;
2743
- s || Kr.includes(r.kind) ? u(r, n, i) : c.push(Gr(r, n, i, t));
2537
+ if (!n || !i || !q(e, n) || !q(e, i)) return;
2538
+ s || ni.includes(r.kind) ? p(r, n, i) : d.push(ti(r, n, i, t));
2744
2539
  }
2745
- for (let e = l; e < c.length; e++) Jr(c[e], i, d, i === "edit" && n.editOp === "removed", a);
2746
- }), c;
2540
+ for (let e = f; e < d.length; e++) ii(d[e], i, m, i === "edit" && n.editOp === "removed", a);
2541
+ }), d;
2747
2542
  }
2748
- var Xr = (e) => e.type === "floor" || e.type === "room" ? "house" : e.type === "external" ? se(e) : e.type, Zr = (e) => Yn(e.color) ?? (E[e.type] || E.external).color;
2749
- function Qr(e, t) {
2750
- let { nodes: n, selectedNode: r, searchQuery: i } = e, a = i ? zn(n, i) : null, o = !!a && n.some((t) => a.has(t.id) && Y(e, t)), s = [], c = qr(e), l = Ot(e), u = c === "diff" || c && l ? S(n, Fr(e)) : null;
2543
+ var oi = (e) => e.type === "floor" || e.type === "room" ? "house" : e.type === "external" ? ce(e) : e.type, si = (e) => rr(e.color) ?? (_[e.type] || _.external).color;
2544
+ function ci(e, t) {
2545
+ let { nodes: n, selectedNode: r, searchQuery: i } = e, a = i ? qn(n, i) : null, o = !!a && n.some((t) => a.has(t.id) && q(e, t)), s = [], c = ri(e), f = Nt(e), p = c === "diff" || c && f ? d(n, Gr(e)) : null;
2751
2546
  return n.forEach((n) => {
2752
- if (!Y(e, n)) return;
2753
- let i = c === "before" ? x(n) : n, d = !!a && a.has(n.id), f = d && e.searchCurrent === n.id, p = !!r && r.id === n.id, m = !t || t.connectedNodeIds.has(n.id), h = t && t.childIds ? t.childIds.has(n.id) : !1, g = c ? b(c, n) : "none", _ = J[g], v = g === "edit" && n.editOp === "removed", y = t && !m && !(o && d) ? _r : 1;
2754
- o && !d && !p && !(t && m) && (y = _r);
2755
- let S = l && !!u && !u.touched.has(n.id);
2756
- u && !u.touched.has(n.id) && (y = Math.min(y, S ? qt : Nr)), _ && (y *= v ? J.removed.alpha : _.alpha);
2757
- let C = i.type === "root" || i.type === "app", w = yt(e, i), T = pt(e, i);
2547
+ if (!q(e, n)) return;
2548
+ let i = c === "before" ? u(n) : n, d = !!a && a.has(n.id), m = d && e.searchCurrent === n.id, h = !!r && r.id === n.id, g = !t || t.connectedNodeIds.has(n.id), _ = t && t.childIds ? t.childIds.has(n.id) : !1, v = c ? l(c, n) : "none", y = K[v], x = v === "edit" && n.editOp === "removed", S = t && !g && !(o && d) ? Dr : 1;
2549
+ o && !d && !h && !(t && g) && (S = Dr);
2550
+ let C = f && !!p && !p.touched.has(n.id);
2551
+ p && !p.touched.has(n.id) && (S = Math.min(S, C ? Qt : Ur)), y && (S *= x ? K.removed.alpha : y.alpha);
2552
+ let w = i.type === "root" || i.type === "app", T = Ct(e, i), E = _t(e, i);
2758
2553
  s.push({
2759
2554
  id: n.id,
2760
2555
  type: i.type,
2761
- group: Xr(i),
2556
+ group: oi(i),
2762
2557
  ...typeof i.kind == "string" && i.kind ? { kind: i.kind } : {},
2763
- ...w ? { letters: w } : {},
2764
- shape: te(i.type),
2765
- hitR: i.r * Sr[te(i.type)],
2766
- ..._n(i.type) ? { glyph: i.type } : {},
2767
- ...T ? { layer: T } : {},
2558
+ ...T ? { letters: T } : {},
2559
+ shape: b(i.type),
2560
+ hitR: i.r * Mr[b(i.type)],
2561
+ ...wn(i.type) ? { glyph: i.type } : {},
2562
+ ...E ? { layer: E } : {},
2768
2563
  x: n.x,
2769
2564
  y: n.y,
2770
2565
  r: i.r,
2771
- color: Zr(i),
2772
- alpha: y,
2773
- glow: m && y >= .5 ? C ? 15 : 9 : 0,
2774
- halo: d ? "match" : p ? "selected" : h ? "child" : "none",
2775
- mark: g,
2776
- ...S ? { greyed: !0 } : {},
2777
- selected: p,
2566
+ color: si(i),
2567
+ alpha: S,
2568
+ glow: g && S >= .5 ? w ? 15 : 9 : 0,
2569
+ halo: d ? "match" : h ? "selected" : _ ? "child" : "none",
2570
+ mark: v,
2571
+ ...C ? { greyed: !0 } : {},
2572
+ selected: h,
2778
2573
  match: d,
2779
- current: f,
2780
- connected: m,
2574
+ current: m,
2575
+ connected: g,
2781
2576
  degree: n.degree || 0,
2782
2577
  label: i.label,
2783
- labelSize: C && !S ? 12 : 11,
2784
- labelBold: C && !S,
2785
- labelAlpha: S && (!t || m) ? Jt[e.theme === "light" ? "light" : "dark"] : u && !u.touched.has(n.id) && (!t || m) ? Math.max(y, Kt) : y,
2786
- labelColor: m ? "#f8fafc" : "rgba(255, 255, 255, 0.3)",
2787
- labelKeep: fr.includes(i.type) && !S || p || d || g !== "none" || !!(t && m),
2788
- labelStrike: !!_ && (_.strike || v),
2578
+ labelSize: w && !C ? 12 : 11,
2579
+ labelBold: w && !C,
2580
+ labelAlpha: C && (!t || g) ? $t[e.theme === "light" ? "light" : "dark"] : p && !p.touched.has(n.id) && (!t || g) ? Math.max(S, Zt) : S,
2581
+ labelColor: g ? "#f8fafc" : "rgba(255, 255, 255, 0.3)",
2582
+ labelKeep: Sr.includes(i.type) && !C || h || d || v !== "none" || !!(t && g),
2583
+ labelStrike: !!y && (y.strike || x),
2789
2584
  live: !!n.live,
2790
2585
  box: n.box || null
2791
2586
  });
2792
2587
  }), s;
2793
2588
  }
2794
- function $r(e) {
2589
+ function li(e) {
2795
2590
  let { rings: t, selectedNode: n } = e, r = {
2796
2591
  color: n ? "rgba(66, 153, 225, 0.04)" : "rgba(66, 153, 225, 0.14)",
2797
2592
  width: 1,
@@ -2813,7 +2608,7 @@ function $r(e) {
2813
2608
  ...i
2814
2609
  })))];
2815
2610
  }
2816
- function ei(e) {
2611
+ function ui(e) {
2817
2612
  let t = -e.top + 40;
2818
2613
  return e.headers.map((n, r) => {
2819
2614
  let i = e.headers[r + 1];
@@ -2853,44 +2648,44 @@ function ei(e) {
2853
2648
  };
2854
2649
  });
2855
2650
  }
2856
- var ti = .55, ni = .5, ri = {
2651
+ var di = .55, fi = .5, pi = {
2857
2652
  color: "#ffffff",
2858
2653
  radius: 4.5,
2859
2654
  glow: 12
2860
- }, ii = {
2655
+ }, mi = {
2861
2656
  width: 3.6,
2862
2657
  glow: 14
2863
2658
  };
2864
- function ai(e, t) {
2659
+ function hi(e, t) {
2865
2660
  return e.from !== t.from || e.to !== t.to ? !1 : t.kind ? e.kind === t.kind && (!t.flow || e.key.split("|")[2] === t.flow) : e.kind === "ownership" || e.kind === "usage";
2866
2661
  }
2867
- function oi(e, t, n = {}) {
2662
+ function gi(e, t, n = {}) {
2868
2663
  if (t.done) return;
2869
2664
  let { node: r, edge: i, at: a } = t.current, o = new Set(r === void 0 ? i ? [i.from, i.to] : [] : [r]);
2870
2665
  a !== void 0 && o.add(a), e.nodes.forEach((e) => {
2871
- e.connected && (o.has(e.id) ? (r !== void 0 || e.id === a) && e.halo !== "match" && (e.halo = "selected") : (e.alpha = ti, e.labelAlpha = ti));
2666
+ e.connected && (o.has(e.id) ? (r !== void 0 || e.id === a) && e.halo !== "match" && (e.halo = "selected") : (e.alpha = di, e.labelAlpha = di));
2872
2667
  });
2873
- let s = new Set(t.visited.edgeList.map(X)), c = (e) => s.has(X(e)) || t.linkNodes && t.visited.nodes.has(e.from) && t.visited.nodes.has(e.to);
2668
+ let s = new Set(t.visited.edgeList.map(J)), c = (e) => s.has(J(e)) || t.linkNodes && t.visited.nodes.has(e.from) && t.visited.nodes.has(e.to);
2874
2669
  e.edges.forEach((e) => {
2875
- if (i && ai(e, i)) {
2876
- e.alpha = 1, e.width = Math.max(e.width, ii.width), e.glow = ii.glow, e.glowColor = e.glowColor || e.color;
2670
+ if (i && hi(e, i)) {
2671
+ e.alpha = 1, e.width = Math.max(e.width, mi.width), e.glow = mi.glow, e.glowColor = e.glowColor || e.color;
2877
2672
  let r = 1e3 / t.stepMs, i = t.stepStartMs == null ? 0 : (-t.stepStartMs / 1e3 * r % 1 + 1) % 1;
2878
2673
  e.packet = n.reduceMotion ? null : {
2879
- ...ri,
2674
+ ...pi,
2880
2675
  glowColor: e.color,
2881
2676
  speed: r,
2882
2677
  phase: i
2883
2678
  };
2884
- } else c(e) && (e.alpha = ni, e.packet = null);
2679
+ } else c(e) && (e.alpha = fi, e.packet = null);
2885
2680
  });
2886
2681
  }
2887
- function si(e, t = {}) {
2888
- let n = e.view === "dataflow", r = e.scenario ? Lr(e) : e.selectedNode ? Ir(e.selectedNode, Fr(e), {
2682
+ function _i(e, t = {}) {
2683
+ let n = e.view === "dataflow", r = e.scenario ? qr(e) : e.selectedNode ? Kr(e.selectedNode, Gr(e), {
2889
2684
  throughChildren: !!e.throughChildren,
2890
2685
  kind: e.selectedKind || null
2891
- }) : null, i = n && e.flow ? ei(e.flow) : [], a = !(n && e.flow) && !e.isFreeform ? $r(e) : [], o = {
2892
- nodes: Qr(e, r),
2893
- edges: Yr(e, r, !!t.reduceMotion),
2686
+ }) : null, i = n && e.flow ? ui(e.flow) : [], a = !(n && e.flow) && !e.isFreeform ? li(e) : [], o = {
2687
+ nodes: ci(e, r),
2688
+ edges: ai(e, r, !!t.reduceMotion),
2894
2689
  decor: {
2895
2690
  grid: {
2896
2691
  size: 48,
@@ -2909,18 +2704,18 @@ function si(e, t = {}) {
2909
2704
  theme: "dark",
2910
2705
  version: e.sceneVersion || 0
2911
2706
  };
2912
- e.view === "house" && Ce(o, e), e.scenario && oi(o, e.scenario, t), o.greying = o.nodes.some((e) => e.greyed) || o.edges.some((e) => e.greyed);
2707
+ e.view === "house" && Te(o, e), e.scenario && gi(o, e.scenario, t), o.greying = o.nodes.some((e) => e.greyed) || o.edges.some((e) => e.greyed);
2913
2708
  let s = {
2914
2709
  nodes: o.nodes.map((e) => e.color),
2915
2710
  edges: o.edges.map((e) => e.color)
2916
2711
  };
2917
- return e.scenario && _e(o, ge(e.scenario, e.nodes, e.edges)), e.scenario && Ne(o, e.scenario), e.forgeLit && Nn(o, e.forgeLit), o.nodes.forEach((e, t) => {
2712
+ return e.scenario && ve(o, _e(e.scenario, e.nodes, e.edges)), e.scenario && Fe(o, e.scenario), e.forgeLit && Bn(o, e.forgeLit), o.nodes.forEach((e, t) => {
2918
2713
  s.nodes.length === o.nodes.length && e.color !== s.nodes[t] && o.painted.nodes.add(e.id);
2919
2714
  }), o.edges.forEach((e, t) => {
2920
2715
  s.edges.length === o.edges.length && e.color !== s.edges[t] && o.painted.edges.add(e.key);
2921
- }), e.theme === "light" && dn(o), o;
2716
+ }), e.theme === "light" && _n(o), o;
2922
2717
  }
2923
- function ci(e = si) {
2718
+ function vi(e = _i) {
2924
2719
  let t = null, n, r = {
2925
2720
  builds: 0,
2926
2721
  get(i) {
@@ -2930,7 +2725,7 @@ function ci(e = si) {
2930
2725
  return r;
2931
2726
  }
2932
2727
  // ../explorer/engine/map-style.js
2933
- var li = Object.freeze(Object.keys(E)), ui = Object.freeze([
2728
+ var yi = Object.freeze(Object.keys(_)), bi = Object.freeze([
2934
2729
  "app",
2935
2730
  "pkg",
2936
2731
  "page",
@@ -2949,7 +2744,7 @@ var li = Object.freeze(Object.keys(E)), ui = Object.freeze([
2949
2744
  "device",
2950
2745
  "house",
2951
2746
  "persona"
2952
- ]), di = Object.freeze([
2747
+ ]), xi = Object.freeze([
2953
2748
  "ownership",
2954
2749
  "usage",
2955
2750
  "flow",
@@ -2961,33 +2756,33 @@ var li = Object.freeze(Object.keys(E)), ui = Object.freeze([
2961
2756
  "runs-on",
2962
2757
  "uses",
2963
2758
  "extends"
2964
- ]), fi = Object.freeze([
2759
+ ]), Si = Object.freeze([
2965
2760
  "added",
2966
2761
  "changed",
2967
2762
  "removed",
2968
2763
  "edit"
2969
- ]), pi = Object.freeze([
2764
+ ]), Ci = Object.freeze([
2970
2765
  "selected",
2971
2766
  "match",
2972
2767
  "lit"
2973
- ]), mi = "--corn-map-stroke", hi = "--corn-map-label", gi = "--corn-map-label-halo", _i = "--corn-map-font", vi = "--corn-map-edge-width", yi = "--corn-map-glow", bi = "--corn-map-label-min", xi = "--corn-map-grey", Si = "--corn-map-grey-alpha", Ci = "--corn-map-glyph", wi = 1.6, Ti = 1.5, Ei = 1.2, Di = (e) => `--corn-map-node-${e}`, Oi = (e) => `--corn-map-group-${e}`, ki = (e) => `--corn-map-edge-${e}`, Z = (e) => `--corn-map-${e}`, Ai = Object.freeze([
2974
- ...li.map(Di),
2975
- ...ui.map(Oi),
2976
- mi,
2977
- hi,
2978
- gi,
2979
- Ci,
2980
- xi,
2981
- ...di.map(ki),
2982
- ...fi.map(Z),
2983
- ...pi.map(Z)
2768
+ ]), wi = "--corn-map-stroke", Ti = "--corn-map-label", Ei = "--corn-map-label-halo", Di = "--corn-map-font", Oi = "--corn-map-edge-width", ki = "--corn-map-glow", Ai = "--corn-map-label-min", ji = "--corn-map-grey", Mi = "--corn-map-grey-alpha", Ni = "--corn-map-glyph", Pi = 1.6, Fi = 1.5, Ii = 1.2, Li = (e) => `--corn-map-node-${e}`, Ri = (e) => `--corn-map-group-${e}`, zi = (e) => `--corn-map-edge-${e}`, Y = (e) => `--corn-map-${e}`, Bi = Object.freeze([
2769
+ ...yi.map(Li),
2770
+ ...bi.map(Ri),
2771
+ wi,
2772
+ Ti,
2773
+ Ei,
2774
+ Ni,
2775
+ ji,
2776
+ ...xi.map(zi),
2777
+ ...Si.map(Y),
2778
+ ...Ci.map(Y)
2984
2779
  ]);
2985
- function Q(e, t) {
2780
+ function X(e, t) {
2986
2781
  let [n, r, i, a] = L(e), o = L(t)[3];
2987
- return o >= 1 ? e : Jn(n, r, i, a * o);
2782
+ return o >= 1 ? e : nr(n, r, i, a * o);
2988
2783
  }
2989
- var ji = /^(?:serif|sans-serif|monospace|cursive|fantasy|system-ui|ui-serif|ui-sans-serif|ui-monospace|ui-rounded|emoji|math|fangsong)$/i, Mi = /^(?:-apple-system|BlinkMacSystemFont)$/;
2990
- function Ni(e) {
2784
+ var Vi = /^(?:serif|sans-serif|monospace|cursive|fantasy|system-ui|ui-serif|ui-sans-serif|ui-monospace|ui-rounded|emoji|math|fangsong)$/i, Hi = /^(?:-apple-system|BlinkMacSystemFont)$/;
2785
+ function Ui(e) {
2991
2786
  let t = typeof e == "string" ? e.trim() : "";
2992
2787
  if (!t || t.length > 200 || t.toLowerCase() === "auto" || /[();:{}<>@\\/\u0000-\u001f\u007f]|\burl\b|\bvar\b|\bexpression\b|\bimport\b/i.test(t)) return null;
2993
2788
  let n = t.split(",").map((e) => e.trim());
@@ -2996,46 +2791,46 @@ function Ni(e) {
2996
2791
  for (let e of n) {
2997
2792
  let t = /^"([A-Za-z0-9 ._+-]{1,60})"$|^'([A-Za-z0-9 ._+-]{1,60})'$/.exec(e), n = t ? (t[1] ?? t[2]).trim() : /^-?[A-Za-z][A-Za-z0-9 _-]{0,59}$/.test(e) ? e.replace(/\s+/g, " ") : null;
2998
2793
  if (!n) return null;
2999
- r.push(ji.test(n) ? n.toLowerCase() : Mi.test(n) ? n : `"${n}"`);
2794
+ r.push(Vi.test(n) ? n.toLowerCase() : Hi.test(n) ? n : `"${n}"`);
3000
2795
  }
3001
2796
  return r.join(", ");
3002
2797
  }
3003
- function Pi(e, t) {
2798
+ function Wi(e, t) {
3004
2799
  let n = /^\s*(\d*\.?\d+)(?:px)?\s*$/i.exec(String(e ?? "")), r = n ? parseFloat(n[1]) : NaN;
3005
2800
  return Number.isFinite(r) && r > 0 && r <= t ? r : null;
3006
2801
  }
3007
- function Fi(e) {
3008
- let t = Pi(e, 24);
2802
+ function Gi(e) {
2803
+ let t = Wi(e, 24);
3009
2804
  return t !== null && t >= 9 ? t : null;
3010
2805
  }
3011
- function Ii(e) {
2806
+ function Ki(e) {
3012
2807
  let t = /^\s*(\d*\.?\d+)(px)?\s*$/i.exec(String(e ?? ""));
3013
2808
  if (!t) return null;
3014
2809
  let n = parseFloat(t[1]);
3015
2810
  return t[2] && n !== 0 ? null : Number.isFinite(n) && n >= 0 && n <= 4 ? n : null;
3016
2811
  }
3017
- function Li(e) {
2812
+ function qi(e) {
3018
2813
  let t = /^\s*(\d*\.?\d+)\s*$/.exec(String(e ?? "")), n = t ? parseFloat(t[1]) : NaN;
3019
2814
  return Number.isFinite(n) && n >= .1 && n <= 1 ? n : null;
3020
2815
  }
3021
- function Ri(e, t = []) {
2816
+ function Ji(e, t = []) {
3022
2817
  let n = {};
3023
- for (let r of [...Ai, ...t]) {
3024
- let t = Hn(e(r));
2818
+ for (let r of [...Bi, ...t]) {
2819
+ let t = Xn(e(r));
3025
2820
  t && (n[r] = t);
3026
2821
  }
3027
2822
  let r = parseFloat(String(e("--corn-map-stroke-width") ?? ""));
3028
2823
  return {
3029
2824
  values: n,
3030
- strokeWidth: Number.isFinite(r) && r >= 0 ? r : Ti,
3031
- font: Ni(e(_i)),
3032
- edgeWidth: Pi(e(vi), 12),
3033
- glow: Ii(e(yi)),
3034
- labelMin: Fi(e(bi)),
3035
- greyAlpha: Li(e(Si))
2825
+ strokeWidth: Number.isFinite(r) && r >= 0 ? r : Fi,
2826
+ font: Ui(e(Di)),
2827
+ edgeWidth: Wi(e(Oi), 12),
2828
+ glow: Ki(e(ki)),
2829
+ labelMin: Gi(e(Ai)),
2830
+ greyAlpha: qi(e(Mi))
3036
2831
  };
3037
2832
  }
3038
- function zi(e, t = "") {
2833
+ function Yi(e, t = "") {
3039
2834
  return new Promise((n, r) => {
3040
2835
  if (typeof Image > "u") {
3041
2836
  r(/* @__PURE__ */ Error("no Image"));
@@ -3045,10 +2840,10 @@ function zi(e, t = "") {
3045
2840
  t && (i.crossOrigin = t), i.onload = () => i.naturalWidth > 0 && i.naturalHeight > 0 ? n(i) : r(/* @__PURE__ */ Error(`${e} has no size`)), i.onerror = () => r(/* @__PURE__ */ Error(`${e} did not load`)), i.src = e;
3046
2841
  });
3047
2842
  }
3048
- function Bi(e, { load: t = zi, onChange: n = () => {}, warn: r = (e) => console.warn(e) } = {}) {
2843
+ function Xi(e, { load: t = Yi, onChange: n = () => {}, warn: r = (e) => console.warn(e) } = {}) {
3049
2844
  let i = /* @__PURE__ */ new Map(), a = 0;
3050
2845
  for (let [o, s] of Object.entries(e || {})) {
3051
- if (!Xe(o) || typeof s != "string" || !s.startsWith("/cornfield/theme/assets/") || s.includes("..")) continue;
2846
+ if (!$e(o) || typeof s != "string" || !s.startsWith("/cornfield/theme/assets/") || s.includes("..")) continue;
3052
2847
  let e = {
3053
2848
  status: "loading",
3054
2849
  image: null
@@ -3069,18 +2864,18 @@ function Bi(e, { load: t = zi, onChange: n = () => {}, warn: r = (e) => console.
3069
2864
  anyReady: () => a > 0
3070
2865
  };
3071
2866
  }
3072
- var Vi = {
2867
+ var Zi = {
3073
2868
  values: {},
3074
- strokeWidth: Ti,
2869
+ strokeWidth: Fi,
3075
2870
  font: null,
3076
2871
  edgeWidth: null,
3077
2872
  glow: null,
3078
2873
  labelMin: null,
3079
2874
  greyAlpha: null
3080
- }, Hi = Object.freeze({
2875
+ }, Qi = Object.freeze({
3081
2876
  version: 0,
3082
2877
  values: Object.freeze({}),
3083
- strokeWidth: Ti,
2878
+ strokeWidth: Fi,
3084
2879
  font: null,
3085
2880
  edgeWidth: null,
3086
2881
  glow: null,
@@ -3089,9 +2884,9 @@ var Vi = {
3089
2884
  icons: null,
3090
2885
  pixelated: !1,
3091
2886
  plain: !0
3092
- }), Ui = 500;
3093
- function Wi(e) {
3094
- let t = Vi, n = null, r = !1, i = 0, a = [], o = /* @__PURE__ */ new Set(), s = () => {
2887
+ }), $i = 500;
2888
+ function ea(e) {
2889
+ let t = Zi, n = null, r = !1, i = 0, a = [], o = /* @__PURE__ */ new Set(), s = () => {
3095
2890
  let e = !Object.keys(t.values).length && !(n && n.anyReady()) && t.font === null && t.edgeWidth === null && t.glow === null && t.labelMin === null && t.greyAlpha === null;
3096
2891
  return Object.freeze({
3097
2892
  version: i,
@@ -3118,12 +2913,12 @@ function Wi(e) {
3118
2913
  return o.add(e), () => o.delete(e);
3119
2914
  },
3120
2915
  setSubjects({ kinds: e = [], layers: t = [] } = {}) {
3121
- let n = [...new Set([...e.map(([e, t]) => qe(e, t)), ...t.map((e) => Je(e))].filter(Boolean))].sort().slice(0, Ui);
2916
+ let n = [...new Set([...e.map(([e, t]) => Xe(e, t)), ...t.map((e) => Ze(e))].filter(Boolean))].sort().slice(0, $i);
3122
2917
  return n.length === a.length && n.every((e, t) => e === a[t]) ? !1 : (a = n, d.refresh());
3123
2918
  },
3124
2919
  refresh(n = e.tokenReader()) {
3125
2920
  if (!n) return !1;
3126
- let r = Ri(n, a);
2921
+ let r = Ji(n, a);
3127
2922
  if (r.strokeWidth === t.strokeWidth && r.font === t.font && r.edgeWidth === t.edgeWidth && r.glow === t.glow && r.labelMin === t.labelMin && Object.keys(r.values).length === Object.keys(t.values).length && Object.entries(r.values).every(([e, n]) => t.values[e] === n)) return !1;
3128
2923
  t = r, u();
3129
2924
  try {
@@ -3135,8 +2930,8 @@ function Wi(e) {
3135
2930
  setIcons(t, i = {}) {
3136
2931
  let a = t && t.icons && typeof t.icons == "object" ? t.icons : {};
3137
2932
  r = !!(t && t.pixelated === !0);
3138
- let o = e.base ? "anonymous" : "", s = i.load || ((t) => zi(e.url(t), o));
3139
- return n = Object.keys(a).length ? Bi(a, {
2933
+ let o = e.base ? "anonymous" : "", s = i.load || ((t) => Yi(e.url(t), o));
2934
+ return n = Object.keys(a).length ? Xi(a, {
3140
2935
  ...i,
3141
2936
  load: s,
3142
2937
  onChange: () => {
@@ -3149,7 +2944,7 @@ function Wi(e) {
3149
2944
  return r && r.setAttribute && (t && t.pixelated === !0 ? r.setAttribute("data-pixelated", "") : r.removeAttribute("data-pixelated")), d.setIcons(t, n);
3150
2945
  },
3151
2946
  reset() {
3152
- t = Vi, n = null, r = !1, a = [], u();
2947
+ t = Zi, n = null, r = !1, a = [], u();
3153
2948
  },
3154
2949
  watch() {
3155
2950
  let n = () => {
@@ -3187,12 +2982,12 @@ function Wi(e) {
3187
2982
  };
3188
2983
  return d;
3189
2984
  }
3190
- var Gi = (e) => e.slot("map-style", Wi), Ki = (e, t) => {
2985
+ var ta = (e) => e.slot("map-style", ea), na = (e, t) => {
3191
2986
  for (let n of t) if (e[n]) return e[n];
3192
2987
  return null;
3193
- }, qi = Ye, Ji = (e, t) => Ki(e, qi(t));
3194
- function Yi(e, t) {
3195
- let n = t.edgeWidth == null ? 1 : t.edgeWidth / wi, r = t.glow == null ? 1 : t.glow;
2988
+ }, ra = Qe, ia = (e, t) => na(e, ra(t));
2989
+ function aa(e, t) {
2990
+ let n = t.edgeWidth == null ? 1 : t.edgeWidth / Pi, r = t.glow == null ? 1 : t.glow;
3196
2991
  if (n === 1 && r === 1) return e;
3197
2992
  let i = {
3198
2993
  ...e,
@@ -3204,46 +2999,46 @@ function Yi(e, t) {
3204
2999
  glow: e.packet.glow * r
3205
3000
  }), i;
3206
3001
  }
3207
- function Xi(e, t, n) {
3002
+ function oa(e, t, n) {
3208
3003
  let { values: r } = t;
3209
3004
  if (e.mark && e.mark !== "none") {
3210
- let n = r[Z(e.mark)];
3211
- return Yi(n ? {
3005
+ let n = r[Y(e.mark)];
3006
+ return aa(n ? {
3212
3007
  ...e,
3213
3008
  color: n,
3214
3009
  glowColor: e.glowColor ? n : e.glowColor
3215
3010
  } : e, t);
3216
3011
  }
3217
- if (n.has(e.key)) return Yi(e, t);
3218
- let i = !e.curve && e.glow > 0 && !e.arrow && r[Z("lit")] || r[ki(e.kind)];
3219
- if (!i) return Yi(e, t);
3012
+ if (n.has(e.key)) return aa(e, t);
3013
+ let i = !e.curve && e.glow > 0 && !e.arrow && r[Y("lit")] || r[zi(e.kind)];
3014
+ if (!i) return aa(e, t);
3220
3015
  let a = {
3221
3016
  ...e,
3222
- color: Q(i, e.color)
3017
+ color: X(i, e.color)
3223
3018
  };
3224
- return e.glowColor && (a.glowColor = Q(i, e.glowColor)), e.packet && (a.packet = {
3019
+ return e.glowColor && (a.glowColor = X(i, e.glowColor)), e.packet && (a.packet = {
3225
3020
  ...e.packet,
3226
- glowColor: Q(i, e.packet.glowColor)
3227
- }), Yi(a, t);
3021
+ glowColor: X(i, e.packet.glowColor)
3022
+ }), aa(a, t);
3228
3023
  }
3229
- function Zi(e) {
3024
+ function sa(e) {
3230
3025
  let [t, n, r, i] = L(e), a = Math.round(.2126 * t + .7152 * n + .0722 * r);
3231
- return i >= 1 ? `rgb(${a}, ${a}, ${a})` : Jn(a, a, a, i);
3026
+ return i >= 1 ? `rgb(${a}, ${a}, ${a})` : nr(a, a, a, i);
3232
3027
  }
3233
- function Qi(e, t) {
3234
- let { values: n } = t, r = n[xi], i = t.greyAlpha == null ? 1 : t.greyAlpha / qt, a = (e) => r ? Q(r, e) : Zi(e), o = n[hi], s = n[mi], c = e.painted || {
3028
+ function ca(e, t) {
3029
+ let { values: n } = t, r = n[ji], i = t.greyAlpha == null ? 1 : t.greyAlpha / Qt, a = (e) => r ? X(r, e) : sa(e), o = n[Ti], s = n[wi], c = e.painted || {
3235
3030
  nodes: /* @__PURE__ */ new Set(),
3236
3031
  edges: /* @__PURE__ */ new Set()
3237
3032
  }, l = e.nodes.map((e) => {
3238
- let r = !c.nodes.has(e.id) && Ji(n, e), l = t.icons && Ze(e.type, e.kind, e.layer).find((e) => t.icons.get(e)) || null, u = t.glow != null && t.glow !== 1 && e.glow > 0, d = !!e.greyed && !c.nodes.has(e.id);
3033
+ let r = !c.nodes.has(e.id) && ia(n, e), l = t.icons && et(e.type, e.kind, e.layer).find((e) => t.icons.get(e)) || null, u = t.glow != null && t.glow !== 1 && e.glow > 0, d = !!e.greyed && !c.nodes.has(e.id);
3239
3034
  if (!r && !o && !s && !l && !u && !d) return e;
3240
3035
  let f = { ...e };
3241
- return u && (f.glow = e.glow * t.glow), r && (f.color = r), o && (f.labelColor = Q(o, e.labelColor)), s && t.strokeWidth > 0 && (f.stroke = {
3036
+ return u && (f.glow = e.glow * t.glow), r && (f.color = r), o && (f.labelColor = X(o, e.labelColor)), s && t.strokeWidth > 0 && (f.stroke = {
3242
3037
  color: d ? a(s) : s,
3243
3038
  width: t.strokeWidth
3244
3039
  }), l && !d && (f.icon = l), d && (f.color = a(f.color), f.alpha = Math.min(1, e.alpha * i)), f;
3245
3040
  }), u = e.edges.map((e) => {
3246
- let n = Xi(e, t, c.edges);
3041
+ let n = oa(e, t, c.edges);
3247
3042
  return !e.greyed || c.edges.has(e.key) ? n : {
3248
3043
  ...n,
3249
3044
  color: a(n.color),
@@ -3256,9 +3051,9 @@ function Qi(e, t) {
3256
3051
  edges: u
3257
3052
  };
3258
3053
  t.font && (d.labelFont = t.font), t.labelMin != null && (d.labelMin = t.labelMin);
3259
- let f = n[gi];
3054
+ let f = n[Ei];
3260
3055
  if (f) {
3261
- let { node: t, edge: n } = Or(e.theme).labelOutline;
3056
+ let { node: t, edge: n } = Rr(e.theme).labelOutline;
3262
3057
  d.labelOutline = {
3263
3058
  node: {
3264
3059
  ...t,
@@ -3272,34 +3067,34 @@ function Qi(e, t) {
3272
3067
  }
3273
3068
  return d;
3274
3069
  }
3275
- var $i = /* @__PURE__ */ new WeakMap();
3276
- function ea(e, t) {
3070
+ var la = /* @__PURE__ */ new WeakMap();
3071
+ function ua(e, t) {
3277
3072
  if (!t || t.plain && !e.greying) return e;
3278
- let n = $i.get(e);
3073
+ let n = la.get(e);
3279
3074
  if (n && n.style === t) return n.out;
3280
- let r = Qi(e, t);
3281
- return $i.set(e, {
3075
+ let r = ca(e, t);
3076
+ return la.set(e, {
3282
3077
  style: t,
3283
3078
  out: r
3284
3079
  }), r;
3285
3080
  }
3286
- var ta = /* @__PURE__ */ new WeakMap();
3287
- function na(e, t) {
3081
+ var da = /* @__PURE__ */ new WeakMap();
3082
+ function fa(e, t) {
3288
3083
  if (!t || t.plain) return e;
3289
- let n = ta.get(e);
3084
+ let n = da.get(e);
3290
3085
  if (n && n.style === t) return n.out;
3291
3086
  let { values: r } = t, i = { ...e.halo };
3292
3087
  for (let e of ["selected", "match"]) {
3293
- let t = r[Z(e)];
3088
+ let t = r[Y(e)];
3294
3089
  t && (i[e] = {
3295
3090
  ...i[e],
3296
3091
  ring: t,
3297
- fill: i[e].fill ? Q(t, i[e].fill) : i[e].fill
3092
+ fill: i[e].fill ? X(t, i[e].fill) : i[e].fill
3298
3093
  });
3299
3094
  }
3300
3095
  let a = { ...e.mark };
3301
- for (let e of fi) {
3302
- let t = r[Z(e)];
3096
+ for (let e of Si) {
3097
+ let t = r[Y(e)];
3303
3098
  t && (a[e] = {
3304
3099
  ...a[e],
3305
3100
  color: t
@@ -3310,13 +3105,13 @@ function na(e, t) {
3310
3105
  halo: i,
3311
3106
  mark: a
3312
3107
  };
3313
- return ta.set(e, {
3108
+ return da.set(e, {
3314
3109
  style: t,
3315
3110
  out: o
3316
3111
  }), o;
3317
3112
  }
3318
3113
  // ../explorer/engine/layout.js
3319
- function ra(e) {
3114
+ function pa(e) {
3320
3115
  let { state: t } = e;
3321
3116
  e.touchScene();
3322
3117
  let n = {};
@@ -3331,18 +3126,18 @@ function ra(e) {
3331
3126
  e.r = Math.max(12, Math.round(e.baseR + r)), e.scaleDelta = r;
3332
3127
  });
3333
3128
  }
3334
- var ia = "\"Segoe UI\", -apple-system, sans-serif";
3335
- function aa(e, t) {
3129
+ var ma = "\"Segoe UI\", -apple-system, sans-serif";
3130
+ function ha(e, t) {
3336
3131
  let { ctx: n } = e.state;
3337
- n.save(), n.font = `${t.type === "root" || t.type === "app" ? "bold 12px" : "11px"} ${ia}`;
3132
+ n.save(), n.font = `${t.type === "root" || t.type === "app" ? "bold 12px" : "11px"} ${ma}`;
3338
3133
  let r = n.measureText(t.label || "").width;
3339
3134
  return n.restore(), r;
3340
3135
  }
3341
- var oa = [
3136
+ var ga = [
3342
3137
  "store",
3343
3138
  "table",
3344
3139
  "rom"
3345
- ], sa = [
3140
+ ], _a = [
3346
3141
  "core",
3347
3142
  "atom",
3348
3143
  "molecule",
@@ -3356,8 +3151,8 @@ var oa = [
3356
3151
  "tool",
3357
3152
  "app",
3358
3153
  "pkg"
3359
- ], ca = 64;
3360
- function la(e, { first: t = 110, gap: n = 76, spacing: r = 90 } = {}) {
3154
+ ], va = 64;
3155
+ function ya(e, { first: t = 110, gap: n = 76, spacing: r = 90 } = {}) {
3361
3156
  let i = [], a = [], o = 0, s = 0;
3362
3157
  for (; o < e.length;) {
3363
3158
  let c = t + s * n, l = Math.max(1, Math.floor(2 * Math.PI * c / r)), u = Math.min(l, e.length - o), d = (e) => Array.from({ length: u }, (t, n) => -Math.PI / 2 + e + n / u * Math.PI * 2).some((e) => Math.abs(Math.atan2(Math.sin(e - Math.PI / 2), Math.cos(e - Math.PI / 2))) < .35), f = s % 2 ? Math.PI / u : 0;
@@ -3376,23 +3171,23 @@ function la(e, { first: t = 110, gap: n = 76, spacing: r = 90 } = {}) {
3376
3171
  radii: a
3377
3172
  };
3378
3173
  }
3379
- function ua(e, t, n, r, i = /* @__PURE__ */ new Set(), a = 0) {
3174
+ function ba(e, t, n, r, i = /* @__PURE__ */ new Set(), a = 0) {
3380
3175
  let o = [], s = [];
3381
3176
  e.forEach((e) => {
3382
- let c = i.has(e.id) || a >= ca ? [] : t(e);
3177
+ let c = i.has(e.id) || a >= va ? [] : t(e);
3383
3178
  if (!c.length) {
3384
3179
  s.push(e);
3385
3180
  return;
3386
3181
  }
3387
3182
  i.add(e.id);
3388
- let l = ua(c.sort(r), t, n, r, i, a + 1);
3183
+ let l = ba(c.sort(r), t, n, r, i, a + 1);
3389
3184
  o.push({
3390
3185
  c: e,
3391
3186
  sub: l,
3392
3187
  fp: l.extent
3393
3188
  });
3394
3189
  }), o.sort((e, t) => t.fp - e.fp);
3395
- let c = la(s, { spacing: n(e) }), l = {
3190
+ let c = ya(s, { spacing: n(e) }), l = {
3396
3191
  children: [...s],
3397
3192
  offsets: [...c.offsets],
3398
3193
  radii: c.radii,
@@ -3419,7 +3214,7 @@ function ua(e, t, n, r, i = /* @__PURE__ */ new Set(), a = 0) {
3419
3214
  }
3420
3215
  return l;
3421
3216
  }
3422
- function da(e, t, n, r) {
3217
+ function xa(e, t, n, r) {
3423
3218
  e.children.forEach((i, a) => {
3424
3219
  i.x = t + e.offsets[a].x, i.y = n + e.offsets[a].y;
3425
3220
  let o = e.subs[a];
@@ -3427,13 +3222,13 @@ function da(e, t, n, r) {
3427
3222
  x: i.x,
3428
3223
  y: i.y,
3429
3224
  radii: o.radii
3430
- }), da(o, i.x, i.y, r));
3225
+ }), xa(o, i.x, i.y, r));
3431
3226
  });
3432
3227
  }
3433
- var fa = 2;
3434
- function pa(e, t) {
3228
+ var Sa = 2;
3229
+ function Ca(e, t) {
3435
3230
  let n = null;
3436
- for (let r = 0; r < 360; r += fa) {
3231
+ for (let r = 0; r < 360; r += Sa) {
3437
3232
  let i = -Math.PI / 2 + r * Math.PI / 180, a = Math.cos(i), o = Math.sin(i), s = [];
3438
3233
  for (let n of e) {
3439
3234
  let e = a * n.x + o * n.y, r = n.r + t, i = e * e - (n.x * n.x + n.y * n.y) + r * r;
@@ -3450,7 +3245,7 @@ function pa(e, t) {
3450
3245
  }
3451
3246
  return n;
3452
3247
  }
3453
- function ma(e) {
3248
+ function wa(e) {
3454
3249
  let { state: t } = e;
3455
3250
  e.touchScene();
3456
3251
  let { nodes: n, edges: r } = t;
@@ -3476,16 +3271,16 @@ function ma(e) {
3476
3271
  });
3477
3272
  let s = n.find((e) => e.id === "root");
3478
3273
  s && (s.x = 0, s.y = 0);
3479
- let c = (e) => oa.includes(e.type), l = new Set(Object.values(o)), u = new Set(n.filter((e) => o[e.id] && !c(e)).map((e) => o[e.id])), d = new Set(n.filter((e) => e.id !== "root" && (c(e) ? l.has(e.id) && (!o[e.id] || o[e.id] === "root") && (e.type === "store" || u.has(e.id)) : o[e.id] === "root" || !o[e.id] && (l.has(e.id) || [
3274
+ let c = (e) => ga.includes(e.type), l = new Set(Object.values(o)), u = new Set(n.filter((e) => o[e.id] && !c(e)).map((e) => o[e.id])), d = new Set(n.filter((e) => e.id !== "root" && (c(e) ? l.has(e.id) && (!o[e.id] || o[e.id] === "root") && (e.type === "store" || u.has(e.id)) : o[e.id] === "root" || !o[e.id] && (l.has(e.id) || [
3480
3275
  "app",
3481
3276
  "pkg",
3482
3277
  "tool",
3483
3278
  "external",
3484
3279
  "stack"
3485
3280
  ].includes(e.type)))).map((e) => e.id)), f = n.filter((e) => d.has(e.id) || e.id !== "root" && c(e) && u.has(e.id) && !d.has(o[e.id])), p = new Set(f.map((e) => e.id)), m = (e) => {
3486
- let t = sa.indexOf(e.type);
3281
+ let t = _a.indexOf(e.type);
3487
3282
  return t < 0 ? 99 : t;
3488
- }, h = (e, t) => m(e) - m(t) || String(e.label).localeCompare(String(t.label)), g = n.filter((e) => c(e) && !p.has(e.id) && !p.has(o[e.id])).sort((e, t) => oa.indexOf(e.type) - oa.indexOf(t.type) || String(e.label).localeCompare(String(t.label))), _ = Math.max(110, ...g.map((t) => aa(e, t) + 24)), v = Math.max(150, g.length * _ / (2 * Math.PI));
3283
+ }, h = (e, t) => m(e) - m(t) || String(e.label).localeCompare(String(t.label)), g = n.filter((e) => c(e) && !p.has(e.id) && !p.has(o[e.id])).sort((e, t) => ga.indexOf(e.type) - ga.indexOf(t.type) || String(e.label).localeCompare(String(t.label))), _ = Math.max(110, ...g.map((t) => ha(e, t) + 24)), v = Math.max(150, g.length * _ / (2 * Math.PI));
3489
3284
  g.forEach((e, t) => {
3490
3285
  let n = -Math.PI / 2 + t / Math.max(1, g.length) * Math.PI * 2;
3491
3286
  e.x = Math.cos(n) * v, e.y = Math.sin(n) * v;
@@ -3496,10 +3291,10 @@ function ma(e) {
3496
3291
  y: 0,
3497
3292
  r: v
3498
3293
  });
3499
- let b = (e) => e.id === "root" ? [] : n.filter((t) => o[t.id] === e.id && !p.has(t.id) && !c(t) && t.id !== "root"), x = (t) => Math.min(170, Math.max(84, ...t.map((t) => aa(e, t) * .8 + 26))), S = /* @__PURE__ */ new Map();
3294
+ let b = (e) => e.id === "root" ? [] : n.filter((t) => o[t.id] === e.id && !p.has(t.id) && !c(t) && t.id !== "root"), x = (t) => Math.min(170, Math.max(84, ...t.map((t) => ha(e, t) * .8 + 26))), S = /* @__PURE__ */ new Map();
3500
3295
  f.forEach((e) => {
3501
3296
  let t = n.filter((t) => o[t.id] === e.id && !p.has(t.id)).sort(h);
3502
- t.length && S.set(e.id, ua(t, b, x, h, /* @__PURE__ */ new Set([e.id])));
3297
+ t.length && S.set(e.id, ba(t, b, x, h, /* @__PURE__ */ new Set([e.id])));
3503
3298
  });
3504
3299
  let C = f.filter((e) => S.has(e.id)).sort((e, t) => S.get(t.id).extent - S.get(e.id).extent || String(e.label).localeCompare(String(t.label))), w = [{
3505
3300
  x: 0,
@@ -3507,7 +3302,7 @@ function ma(e) {
3507
3302
  r: y
3508
3303
  }], T = y;
3509
3304
  C.forEach((e) => {
3510
- let t = S.get(e.id), n = pa(w, t.extent + 35);
3305
+ let t = S.get(e.id), n = Ca(w, t.extent + 35);
3511
3306
  e.x = n.x, e.y = n.y, w.push({
3512
3307
  x: e.x,
3513
3308
  y: e.y,
@@ -3516,46 +3311,46 @@ function ma(e) {
3516
3311
  x: e.x,
3517
3312
  y: e.y,
3518
3313
  radii: t.radii
3519
- }), da(t, e.x, e.y, i.clusters);
3314
+ }), xa(t, e.x, e.y, i.clusters);
3520
3315
  });
3521
- let ee = n.filter((e) => e.id !== "root" && !o[e.id] && !c(e) && !p.has(e.id)), E = [...f.filter((e) => !S.has(e.id)), ...ee].sort(h), D = Math.max(120, ...E.map((t) => aa(e, t) + 30)), O = Math.max(T + 90, E.length * D / (2 * Math.PI));
3522
- E.forEach((e, t) => {
3523
- let n = -Math.PI / 2 + t / Math.max(1, E.length) * Math.PI * 2;
3524
- e.x = Math.cos(n) * O, e.y = Math.sin(n) * O;
3525
- }), E.length && i.rings.push({
3316
+ let E = n.filter((e) => e.id !== "root" && !o[e.id] && !c(e) && !p.has(e.id)), D = [...f.filter((e) => !S.has(e.id)), ...E].sort(h), O = Math.max(120, ...D.map((t) => ha(e, t) + 30)), k = Math.max(T + 90, D.length * O / (2 * Math.PI));
3317
+ D.forEach((e, t) => {
3318
+ let n = -Math.PI / 2 + t / Math.max(1, D.length) * Math.PI * 2;
3319
+ e.x = Math.cos(n) * k, e.y = Math.sin(n) * k;
3320
+ }), D.length && i.rings.push({
3526
3321
  x: 0,
3527
3322
  y: 0,
3528
- r: O
3323
+ r: k
3529
3324
  });
3530
- let te = (e) => e.id === "root" || e.x !== 0 || e.y !== 0, ne = /* @__PURE__ */ new Map();
3325
+ let ee = (e) => e.id === "root" || e.x !== 0 || e.y !== 0, te = /* @__PURE__ */ new Map();
3531
3326
  n.forEach((e) => {
3532
3327
  let t = o[e.id];
3533
- !te(e) && t && (ne.get(t) || ne.set(t, []).get(t)).push(e);
3328
+ !ee(e) && t && (te.get(t) || te.set(t, []).get(t)).push(e);
3534
3329
  });
3535
- let re = new Map(n.map((e) => [e.id, e]));
3536
- ne.forEach((e, t) => {
3537
- let n = re.get(t);
3538
- if (!n || !te(n) || e.every(te)) return;
3539
- let r = ua(e.sort(h), b, x, h, /* @__PURE__ */ new Set([t]));
3330
+ let ne = new Map(n.map((e) => [e.id, e]));
3331
+ te.forEach((e, t) => {
3332
+ let n = ne.get(t);
3333
+ if (!n || !ee(n) || e.every(ee)) return;
3334
+ let r = ba(e.sort(h), b, x, h, /* @__PURE__ */ new Set([t]));
3540
3335
  i.clusters.push({
3541
3336
  x: n.x,
3542
3337
  y: n.y,
3543
3338
  radii: r.radii
3544
- }), da(r, n.x, n.y, i.clusters);
3339
+ }), xa(r, n.x, n.y, i.clusters);
3545
3340
  });
3546
3341
  }
3547
- var ha = 50, ga = 110, _a = 15;
3548
- function va(e, t) {
3342
+ var Ta = 50, Ea = 110, Da = 15;
3343
+ function Oa(e, t) {
3549
3344
  e.touchScene();
3550
3345
  let n = 0;
3551
3346
  t.headers = [];
3552
3347
  let r = [];
3553
3348
  t.tiers.forEach((i) => {
3554
3349
  if (!i.nodes.length) return;
3555
- let a = Math.ceil(i.nodes.length / _a), o = Math.ceil(i.nodes.length / a), s = Math.max(70, ...i.nodes.map((t) => aa(e, t) + 30)), c = n;
3350
+ let a = Math.ceil(i.nodes.length / Da), o = Math.ceil(i.nodes.length / a), s = Math.max(70, ...i.nodes.map((t) => ha(e, t) + 30)), c = n;
3556
3351
  i.nodes.forEach((e, t) => {
3557
3352
  let n = Math.floor(t / o), i = t % o;
3558
- e.x = c + n * s + s / 2, e.y = (i - (o - 1) / 2) * ha, r.push(e);
3353
+ e.x = c + n * s + s / 2, e.y = (i - (o - 1) / 2) * Ta, r.push(e);
3559
3354
  });
3560
3355
  let l = a * s;
3561
3356
  t.headers.push({
@@ -3565,20 +3360,20 @@ function va(e, t) {
3565
3360
  left: c,
3566
3361
  right: c + l,
3567
3362
  rows: o
3568
- }), n += l + ga;
3569
- }), t.top = -((Math.max(1, ...t.headers.map((e) => e.rows)) - 1) / 2) * ha - 70;
3570
- let i = (n - ga) / 2;
3363
+ }), n += l + Ea;
3364
+ }), t.top = -((Math.max(1, ...t.headers.map((e) => e.rows)) - 1) / 2) * Ta - 70;
3365
+ let i = (n - Ea) / 2;
3571
3366
  r.forEach((e) => {
3572
3367
  e.x -= i;
3573
3368
  }), t.headers.forEach((e) => {
3574
3369
  e.x -= i, e.left -= i, e.right -= i;
3575
3370
  });
3576
3371
  }
3577
- var ya = "cornfield-freeform-positions";
3578
- function ba(e) {
3579
- e.store.set(ya, JSON.stringify(e.state.freeformPositions));
3372
+ var ka = "cornfield-freeform-positions";
3373
+ function Aa(e) {
3374
+ e.store.set(ka, JSON.stringify(e.state.freeformPositions));
3580
3375
  }
3581
- function xa(e) {
3376
+ function ja(e) {
3582
3377
  let { state: t } = e;
3583
3378
  e.touchScene();
3584
3379
  let n = 0;
@@ -3587,64 +3382,188 @@ function xa(e) {
3587
3382
  r && (e.x = r.x, e.y = r.y, n++);
3588
3383
  }), n > 0;
3589
3384
  }
3590
- function Sa(e) {
3591
- ma(e), e.state.isFreeform && xa(e);
3385
+ function Ma(e) {
3386
+ wa(e), e.state.isFreeform && ja(e);
3387
+ }
3388
+ // ../core/strings.js
3389
+ var Na = Object.freeze({
3390
+ layers: "Layers",
3391
+ layersAll: "All",
3392
+ layersNone: "None",
3393
+ overlays: "Overlays",
3394
+ dataFlow: "Flow",
3395
+ house: "House",
3396
+ proposals: "Proposals",
3397
+ issuesAndPrs: "Work",
3398
+ searchPlaceholder: "Search...",
3399
+ searchNoMatch: "No match for",
3400
+ signOut: "Sign out",
3401
+ poweredBy: "powered by cornfield",
3402
+ before: "Before",
3403
+ diff: "Diff",
3404
+ after: "After",
3405
+ closeProposal: "Close",
3406
+ approve: "Approve",
3407
+ sendBack: "Send back",
3408
+ sendBackWithNote: "Send back with this note",
3409
+ approveAnyway: "Approve anyway",
3410
+ sendBackAnyway: "Send back anyway",
3411
+ undo: "Undo",
3412
+ approved: "Approved",
3413
+ myEdits: "My edits",
3414
+ showWholeMap: "Show the whole map",
3415
+ wholeMap: "Whole map",
3416
+ hiddenWhileReviewing: "hidden while reviewing",
3417
+ yourEdits: "Your edits",
3418
+ cancelLanding: "Cancel landing",
3419
+ queueIt: "Queue it",
3420
+ reviewNoteLabel: "Note for the drafting agent",
3421
+ reviewNotePlaceholder: "What should change?",
3422
+ openSpecsList: "Open the Specs list",
3423
+ changes: "Changes",
3424
+ personasAndScenarios: "Personas and scenarios",
3425
+ scenarios: "Scenarios",
3426
+ anyone: "Anyone",
3427
+ notInAnyScenario: "Not in any scenario",
3428
+ steps: "Steps",
3429
+ previousStep: "Previous",
3430
+ nextStep: "Next",
3431
+ pause: "Pause",
3432
+ play: "Play",
3433
+ playAgain: "Play again",
3434
+ nextScenario: "Next scenario",
3435
+ notChecked: "Not checked",
3436
+ tabSpecs: "Specs",
3437
+ tabPulls: "PRs",
3438
+ tabIssues: "Issues",
3439
+ tabThreads: "Threads",
3440
+ tabRuns: "Runs",
3441
+ tabDeploys: "Deploys",
3442
+ waitingOnYou: "waiting on you",
3443
+ toDecide: "To decide",
3444
+ withAgent: "With the agent",
3445
+ approvedGroup: "Approved",
3446
+ drafts: "Drafts",
3447
+ needsYou: "Needs you",
3448
+ inMotion: "In motion",
3449
+ finished: "Finished",
3450
+ answer: "Answer",
3451
+ newIdea: "New idea",
3452
+ landIt: "Land it",
3453
+ startAgent: "Start an agent",
3454
+ askRunner: "Ask the runner",
3455
+ startAgain: "Start again",
3456
+ stop: "Stop",
3457
+ continueRun: "Continue",
3458
+ reply: "Reply",
3459
+ openFile: "Open file",
3460
+ openRoute: "Open route",
3461
+ startRun: "Start a run",
3462
+ copySpec: "Copy Spec",
3463
+ frame: "Frame them",
3464
+ throughChildren: "Include its children's lines",
3465
+ hintInspect: "Click a node to see what it is",
3466
+ hintInspectTouch: "Tap a node to see what it is",
3467
+ hintDrag: "Drag nodes to move • Double-click to inspect",
3468
+ hintDragTouch: "Drag nodes to move • Double-tap to inspect",
3469
+ hintDataFlow: "Data flow: browser → servers → API → tables → services → outside",
3470
+ loading: "Loading topology.json …",
3471
+ errorTitle: "The map could not be loaded",
3472
+ retry: "Retry",
3473
+ sourceLoading: "Loading the map …",
3474
+ sourceSignedOut: "You are not signed in to cornfield",
3475
+ sourceSignInText: "This map is behind cornfield's sign-in.",
3476
+ sourceNotMaintainer: "This map is for the project's maintainers",
3477
+ sourceNotMaintainerText: "You are signed in to cornfield, but not as a maintainer.",
3478
+ sourceSignIn: "Sign in to cornfield",
3479
+ sourceNotListed: "This page is not listed by that cornfield",
3480
+ sourceNotListedHint: "Add this origin to embed.origins on the server:",
3481
+ sourceOffline: "The map cannot be reached",
3482
+ sourceOfflineText: "Check the connection, then try again.",
3483
+ sourceBadAddress: "That is not the address of a cornfield server",
3484
+ sourceVersion: "This map and its server are different versions",
3485
+ sourceSecondMap: "This scope already has a map"
3486
+ }), Pa = (e) => typeof e == "string" && Object.hasOwn(Na, e), Fa = /* @__PURE__ */ RegExp("[\\u0000-\\u001f\\u007f-\\u009f\\u2028\\u2029]");
3487
+ function Ia(e) {
3488
+ return typeof e == "string" ? e.trim() ? Fa.test(e) ? "is one line of plain text (no line break or control character)" : [...e].length > 80 ? "is at most 80 characters" : null : "is empty (leave the key out to keep the default)" : "is text";
3489
+ }
3490
+ // ../explorer/engine/strings.js
3491
+ var Z = (e, t) => Pa(t) && Object.hasOwn(e.strings, t) && !Ia(e.strings[t]);
3492
+ function La(e, t) {
3493
+ for (let t of Object.keys(e.strings)) delete e.strings[t];
3494
+ if (t && typeof t == "object" && !Array.isArray(t)) for (let [n, r] of Object.entries(t)) Pa(n) && !Ia(r) && (e.strings[n] = r);
3495
+ }
3496
+ function Q(e, t) {
3497
+ return Z(e, t) ? e.strings[t] : Pa(t) ? Na[t] : String(t);
3498
+ }
3499
+ var Ra = [
3500
+ ["data-corn-string", (e, t) => {
3501
+ e.textContent = t;
3502
+ }],
3503
+ ["data-corn-string-aria-label", (e, t) => e.setAttribute("aria-label", t)],
3504
+ ["data-corn-string-placeholder", (e, t) => e.setAttribute("placeholder", t)]
3505
+ ];
3506
+ function za(e, t = e.root) {
3507
+ if (t && typeof t.querySelectorAll == "function") for (let [n, r] of Ra) for (let i of t.querySelectorAll(`[${n}]`)) {
3508
+ let t = i.getAttribute(n);
3509
+ Z(e, t) && r(i, e.strings[t]);
3510
+ }
3592
3511
  }
3593
3512
  // ../explorer/engine/hint.js
3594
- var Ca = "cornfield:hint-done";
3595
- function wa(e) {
3513
+ var Ba = "cornfield:hint-done";
3514
+ function Va(e) {
3596
3515
  try {
3597
3516
  return !!(e && e.matchMedia && e.matchMedia("(pointer: coarse)").matches);
3598
3517
  } catch {
3599
3518
  return !1;
3600
3519
  }
3601
3520
  }
3602
- function Ta(e, t, n) {
3521
+ function Ha(e, t, n) {
3603
3522
  return n && (t.set || !e.set) ? t.text : e.text;
3604
3523
  }
3605
- function Ea(e, t = wa(e.win)) {
3524
+ function Ua(e, t = Va(e.win)) {
3606
3525
  let { state: n } = e;
3607
- return n.view === "dataflow" ? p(e, "hintDataFlow") : n.isFreeform ? Ta({
3608
- text: p(e, "hintDrag"),
3609
- set: d(e, "hintDrag")
3526
+ return n.view === "dataflow" ? Q(e, "hintDataFlow") : n.isFreeform ? Ha({
3527
+ text: Q(e, "hintDrag"),
3528
+ set: Z(e, "hintDrag")
3610
3529
  }, {
3611
- text: p(e, "hintDragTouch"),
3612
- set: d(e, "hintDragTouch")
3613
- }, t) : Ta({
3614
- text: p(e, "hintInspect"),
3615
- set: d(e, "hintInspect")
3530
+ text: Q(e, "hintDragTouch"),
3531
+ set: Z(e, "hintDragTouch")
3532
+ }, t) : Ha({
3533
+ text: Q(e, "hintInspect"),
3534
+ set: Z(e, "hintInspect")
3616
3535
  }, {
3617
- text: p(e, "hintInspectTouch"),
3618
- set: d(e, "hintInspectTouch")
3536
+ text: Q(e, "hintInspectTouch"),
3537
+ set: Z(e, "hintInspectTouch")
3619
3538
  }, t);
3620
3539
  }
3621
- var Da = (e) => {
3540
+ var Wa = (e) => {
3622
3541
  try {
3623
3542
  return e.win ? e.win.sessionStorage : null;
3624
3543
  } catch {
3625
3544
  return null;
3626
3545
  }
3627
- }, Oa = (e) => e.slot("hint", () => {
3546
+ }, Ga = (e) => e.slot("hint", () => {
3628
3547
  let t = { dismissed: !1 };
3629
3548
  try {
3630
- let n = Da(e);
3549
+ let n = Wa(e);
3631
3550
  t.dismissed = !!n && n.getItem("cornfield:hint-done") === "1";
3632
3551
  } catch {
3633
3552
  t.dismissed = !1;
3634
3553
  }
3635
3554
  return t;
3636
3555
  });
3637
- function ka(e) {
3638
- let t = Oa(e);
3556
+ function Ka(e) {
3557
+ let t = Ga(e);
3639
3558
  if (!t.dismissed && (t.dismissed = !0, e.el("instruction-badge-text"))) {
3640
3559
  try {
3641
- let t = Da(e);
3642
- t && t.setItem(Ca, "1");
3560
+ let t = Wa(e);
3561
+ t && t.setItem(Ba, "1");
3643
3562
  } catch {}
3644
- ja(e);
3563
+ Ja(e);
3645
3564
  }
3646
3565
  }
3647
- function Aa(e) {
3566
+ function qa(e) {
3648
3567
  let t = (t) => e.el(t), n = t("proposal-bar");
3649
3568
  if (n && !n.hidden) return !0;
3650
3569
  let r = t("spec-drawer");
@@ -3652,22 +3571,22 @@ function Aa(e) {
3652
3571
  let i = t("forge-panel");
3653
3572
  return i && i.classList.contains("forge-open") ? !0 : !!(e.root && e.root.querySelector("[data-corn=\"scenario-player\"]"));
3654
3573
  }
3655
- function ja(e) {
3656
- let t = e.el("instruction-badge-text"), n = Ea(e);
3574
+ function Ja(e) {
3575
+ let t = e.el("instruction-badge-text"), n = Ua(e);
3657
3576
  t && t.textContent !== n && (t.textContent = n);
3658
3577
  let r = t && t.closest("[data-corn=\"hint\"]");
3659
3578
  if (!r) return;
3660
- let i = Aa(e) || Oa(e).dismissed && e.state.view !== "dataflow";
3579
+ let i = qa(e) || Ga(e).dismissed && e.state.view !== "dataflow";
3661
3580
  r.hidden !== i && (r.hidden = i);
3662
3581
  }
3663
3582
  // ../explorer/sheet-model.js
3664
- var Ma = Object.freeze({
3583
+ var Ya = .35, Xa = Object.freeze({
3665
3584
  proposal: "review",
3666
3585
  player: "review",
3667
3586
  forge: "other",
3668
3587
  drawer: "other"
3669
- }), Na = /* @__PURE__ */ new Set(["other"]);
3670
- function Pa(e = Ma) {
3588
+ }), Za = /* @__PURE__ */ new Set(["other"]), Qa = (e, t = 0) => Math.max(0, Math.floor(e - Math.ceil(e * Ya) - t * 44));
3589
+ function $a(e = Xa) {
3671
3590
  let t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set(), r = null, i = (t) => e[t] || t;
3672
3591
  return {
3673
3592
  add: (e) => {
@@ -3678,7 +3597,7 @@ function Pa(e = Ma) {
3678
3597
  },
3679
3598
  has: (e) => t.has(e),
3680
3599
  show(e) {
3681
- if (!t.has(e) || (n.add(e), !Na.has(i(e)))) return [];
3600
+ if (!t.has(e) || (n.add(e), !Za.has(i(e)))) return [];
3682
3601
  let a = [...n].filter((t) => t !== e && i(t) === i(e));
3683
3602
  for (let e of a) n.delete(e), r === e && (r = null);
3684
3603
  return a;
@@ -3711,9 +3630,11 @@ function Pa(e = Ma) {
3711
3630
  ids: () => [...t]
3712
3631
  };
3713
3632
  }
3714
- function Fa(e) {
3633
+ // ../explorer/engine/map-rect.js
3634
+ var eo = "(max-width: 767px)";
3635
+ function to(e) {
3715
3636
  return e.slot("sheets", () => ({
3716
- model: Pa(),
3637
+ model: $a(),
3717
3638
  elements: /* @__PURE__ */ new Map(),
3718
3639
  options: /* @__PURE__ */ new Map(),
3719
3640
  offs: /* @__PURE__ */ new Map(),
@@ -3727,26 +3648,26 @@ function Fa(e) {
3727
3648
  documentWired: !1
3728
3649
  }));
3729
3650
  }
3730
- var Ia = 768, La = (e) => {
3731
- let { box: t } = Fa(e);
3732
- return t ? t.isConnected && t.clientWidth > 0 && t.clientWidth < Ia : !!(e.win && typeof e.win.matchMedia == "function" && e.win.matchMedia("(max-width: 767px)").matches);
3733
- }, Ra = (e, t) => t.dock && t.dock.parentElement || (e.state.canvas ? e.state.canvas.parentElement : null);
3734
- function za(e) {
3735
- let t = Fa(e), { state: n } = e;
3651
+ var no = 768, ro = (e) => {
3652
+ let { box: t } = to(e);
3653
+ return t ? t.isConnected && t.clientWidth > 0 && t.clientWidth < no : !!(e.win && typeof e.win.matchMedia == "function" && e.win.matchMedia("(max-width: 767px)").matches);
3654
+ }, io = (e, t) => t.dock && t.dock.parentElement || (e.state.canvas ? e.state.canvas.parentElement : null);
3655
+ function ao(e) {
3656
+ let t = to(e), { state: n } = e;
3736
3657
  if (!t.dock || !t.dock.isConnected) return n.coveredBottom || 0;
3737
- let r = La(e) ? Math.round(t.dock.offsetHeight || 0) : 0;
3658
+ let r = ro(e) ? Math.round(t.dock.offsetHeight || 0) : 0;
3738
3659
  n.coveredBottom = r;
3739
- let i = Ra(e, t);
3660
+ let i = io(e, t);
3740
3661
  return i && i.style.setProperty("--hx-covered", `${r}px`), r !== t.lastCovered && (t.lastCovered = r, t.listeners.forEach((e) => e())), r;
3741
3662
  }
3742
- function Ba(e) {
3663
+ function oo(e) {
3743
3664
  let { state: t } = e, n = {
3744
3665
  top: 0,
3745
3666
  bottom: 0,
3746
3667
  left: 0,
3747
3668
  right: 0
3748
3669
  }, r = t.canvas, i = (e) => !!e && !e.hidden && e.isConnected;
3749
- if (La(e)) n.bottom = za(e) + 8;
3670
+ if (ro(e)) n.bottom = ao(e) + 8;
3750
3671
  else if (r && typeof r.getBoundingClientRect == "function") {
3751
3672
  let t = r.getBoundingClientRect(), a = e.el("proposal-bar");
3752
3673
  i(a) && (n.top = Math.max(0, a.getBoundingClientRect().bottom - t.top) + 8);
@@ -3759,9 +3680,9 @@ function Ba(e) {
3759
3680
  let l = e.root ? e.root.querySelector(".hx-player") : null;
3760
3681
  i(l) && (n.bottom = Math.max(0, t.bottom - l.getBoundingClientRect().top) + 8);
3761
3682
  }
3762
- return nr(t.width || 0, t.height || 0, n);
3683
+ return ur(t.width || 0, t.height || 0, n);
3763
3684
  }
3764
- function Va(e) {
3685
+ function so(e) {
3765
3686
  return e.slot("fly", () => {
3766
3687
  let t = { glide: null };
3767
3688
  return t.tick = (n) => {
@@ -3776,36 +3697,48 @@ function Va(e) {
3776
3697
  }) : null, t.off && e.own(t.off), t;
3777
3698
  });
3778
3699
  }
3779
- function Ha(e, t) {
3700
+ function co(e, t) {
3780
3701
  if (!t) return;
3781
- let n = Va(e), { state: r } = e;
3702
+ let n = so(e), { state: r } = e;
3782
3703
  e.reducedMotion || !r.width ? (Object.assign(r.camera, t), n.glide = null, e.map.render()) : (n.glide = {
3783
3704
  to: { ...t },
3784
3705
  last: null
3785
3706
  }, e.map.ensureFlowLoop());
3786
3707
  }
3787
- function Ua(e) {
3788
- Va(e).glide = null;
3708
+ function lo(e) {
3709
+ so(e).glide = null;
3789
3710
  }
3790
3711
  // ../explorer/selection-view.js
3791
- function Wa(e) {
3712
+ function uo(e) {
3792
3713
  return !e.state.selectedNode || e.state.scenario ? [] : e.map.getScene().nodes.filter((e) => e.connected);
3793
3714
  }
3794
- function Ga(e) {
3715
+ function fo(e) {
3716
+ let { state: t } = e;
3717
+ if (!t.selectedNode) return {
3718
+ connected: 0,
3719
+ off: 0
3720
+ };
3721
+ let n = uo(e).filter((e) => e.id !== t.selectedNode.id);
3722
+ return {
3723
+ connected: n.length,
3724
+ off: n.length ? br(n, t.camera, oo(e)) : 0
3725
+ };
3726
+ }
3727
+ function po(e) {
3795
3728
  let t = e.state.selectedNode;
3796
3729
  if (!t) return null;
3797
- let n = dr(t, Wa(e), Ba(e), { padding: e.map.fitPadding() });
3798
- return Ha(e, {
3730
+ let n = xr(t, uo(e), oo(e), { padding: e.map.fitPadding() });
3731
+ return co(e, {
3799
3732
  x: n.x,
3800
3733
  y: n.y,
3801
3734
  zoom: n.zoom
3802
3735
  }), n;
3803
3736
  }
3804
3737
  // ../explorer/engine/selection.js
3805
- function Ka(e, t, { frame: n = !1, source: r = "api" } = {}) {
3738
+ function mo(e, t, { frame: n = !1, source: r = "api" } = {}) {
3806
3739
  if (!t) return;
3807
3740
  let { state: i } = e;
3808
- e.emit("scenario:clear"), ka(e), i.selectedNode && i.selectedNode.id === t.id || (i.selectedKind = null);
3741
+ e.emit("scenario:clear"), Ka(e), i.selectedNode && i.selectedNode.id === t.id || (i.selectedKind = null);
3809
3742
  let a = e.setSelection(t, null, {
3810
3743
  source: r,
3811
3744
  quiet: !0
@@ -3813,9 +3746,9 @@ function Ka(e, t, { frame: n = !1, source: r = "api" } = {}) {
3813
3746
  e.touchScene(), e.map.render(), a.announce(), e.emit("node:show", {
3814
3747
  node: t,
3815
3748
  frame: n
3816
- }), n && Ga(e);
3749
+ }), n && po(e);
3817
3750
  }
3818
- function qa(e, { source: t = "api" } = {}) {
3751
+ function ho(e, { source: t = "api" } = {}) {
3819
3752
  e.emit("scenario:clear");
3820
3753
  let n = e.setSelection(null, null, {
3821
3754
  source: t,
@@ -3823,16 +3756,16 @@ function qa(e, { source: t = "api" } = {}) {
3823
3756
  });
3824
3757
  e.touchScene(), e.map.render(), e.emit("node:close"), n.announce();
3825
3758
  }
3826
- var Ja = 1.25, Ya = {
3759
+ var go = 1.25, _o = {
3827
3760
  ArrowLeft: [-1, 0],
3828
3761
  ArrowRight: [1, 0],
3829
3762
  ArrowUp: [0, -1],
3830
3763
  ArrowDown: [0, 1]
3831
3764
  };
3832
- function Xa(e, t = {}) {
3765
+ function vo(e, t = {}) {
3833
3766
  let { shift: n = !1, alt: r = !1, ctrl: i = !1, meta: a = !1, scenario: o = !1, freeform: s = !1, selected: c = !1 } = t;
3834
3767
  if (i || a) return null;
3835
- let l = Ya[e];
3768
+ let l = _o[e];
3836
3769
  if (l) {
3837
3770
  if (r) return s && c ? {
3838
3771
  type: "move",
@@ -3852,12 +3785,12 @@ function Xa(e, t = {}) {
3852
3785
  case "+":
3853
3786
  case "=": return {
3854
3787
  type: "zoom",
3855
- factor: Ja
3788
+ factor: go
3856
3789
  };
3857
3790
  case "-":
3858
3791
  case "_": return {
3859
3792
  type: "zoom",
3860
- factor: 1 / Ja
3793
+ factor: 1 / go
3861
3794
  };
3862
3795
  case "0": return { type: "fit" };
3863
3796
  case "n":
@@ -3881,21 +3814,21 @@ function Xa(e, t = {}) {
3881
3814
  default: return null;
3882
3815
  }
3883
3816
  }
3884
- function Za(e) {
3817
+ function yo(e) {
3885
3818
  return [...e].sort((e, t) => Math.floor(e.y / 40) - Math.floor(t.y / 40) || e.x - t.x || (e.id < t.id ? -1 : +(e.id > t.id)));
3886
3819
  }
3887
- function Qa(e, t, n) {
3820
+ function bo(e, t, n) {
3888
3821
  if (!e.length) return null;
3889
3822
  let r = t == null ? -1 : e.findIndex((e) => e.id === t);
3890
3823
  if (r < 0) return n >= 0 ? e[0] : e[e.length - 1];
3891
3824
  let i = e.length;
3892
3825
  return e[((r + n) % i + i) % i];
3893
3826
  }
3894
- function $a(e, t, n) {
3827
+ function xo(e, t, n) {
3895
3828
  let r = e.type === "external" ? "outside service" : e.type, i = Number.isFinite(e.degree) ? `, ${e.degree} ${e.degree === 1 ? "connection" : "connections"}` : "", a = Number.isFinite(t) && Number.isFinite(n) ? `, ${n + 1} of ${t}` : "";
3896
3829
  return `${e.label}, ${r}${i}${a}`;
3897
3830
  }
3898
- var eo = (e) => `Zoom ${Math.round(e * 100)} percent`;
3831
+ var So = (e) => `Zoom ${Math.round(e * 100)} percent`;
3899
3832
  // ../explorer/engine/keyboard.js
3900
3833
  function $(e, t) {
3901
3834
  let n = e.slot("announce", () => {
@@ -3908,32 +3841,32 @@ function $(e, t) {
3908
3841
  r.textContent = t;
3909
3842
  }, 30));
3910
3843
  }
3911
- var to = (e) => Za(e.state.nodes.filter((t) => e.map.isNodeVisible(t)));
3912
- function no(e, t, n) {
3913
- t ? (Ka(e, t, {
3844
+ var Co = (e) => yo(e.state.nodes.filter((t) => e.map.isNodeVisible(t)));
3845
+ function wo(e, t, n) {
3846
+ t ? (mo(e, t, {
3914
3847
  frame: !0,
3915
3848
  source: "keyboard"
3916
- }), $(e, $a(t, n.length, n.indexOf(t)))) : $(e, e.el("legend-dropdown") ? "No nodes are shown. Turn a layer on in the Layers menu." : "No nodes are shown.");
3849
+ }), $(e, xo(t, n.length, n.indexOf(t)))) : $(e, e.el("legend-dropdown") ? "No nodes are shown. Turn a layer on in the Layers menu." : "No nodes are shown.");
3917
3850
  }
3918
- function ro(e) {
3851
+ function To(e) {
3919
3852
  let { state: t } = e;
3920
3853
  if (!t.selectedNode) return;
3921
- let n = Ga(e);
3854
+ let n = po(e);
3922
3855
  if (!n) return;
3923
- let r = Math.max(0, Wa(e).length - 1);
3856
+ let r = Math.max(0, uo(e).length - 1);
3924
3857
  $(e, n.framed ? `Framed ${t.selectedNode.label} and ${r} connected` : `${t.selectedNode.label} centred: ${r} connected, too spread out to frame together`);
3925
3858
  }
3926
- function io(e, t, n) {
3859
+ function Eo(e, t, n) {
3927
3860
  let { state: r } = e, i = r.selectedNode;
3928
3861
  i && (i.x += t, i.y += n, r.freeformPositions[i.id] = {
3929
3862
  x: i.x,
3930
3863
  y: i.y
3931
- }, e.touchScene(), ba(e), e.map.render(), $(e, `Moved ${i.label}`));
3864
+ }, e.touchScene(), Aa(e), e.map.render(), $(e, `Moved ${i.label}`));
3932
3865
  }
3933
- function ao(e, t) {
3866
+ function Do(e, t) {
3934
3867
  let { state: n, map: r } = e;
3935
3868
  if (t.target !== n.canvas || t.defaultPrevented) return;
3936
- let i = Xa(t.key, {
3869
+ let i = vo(t.key, {
3937
3870
  shift: t.shiftKey,
3938
3871
  alt: t.altKey,
3939
3872
  ctrl: t.ctrlKey,
@@ -3950,52 +3883,52 @@ function ao(e, t) {
3950
3883
  a.x += i.dx, a.y += i.dy, r.render();
3951
3884
  break;
3952
3885
  case "zoom":
3953
- Object.assign(a, $n(a, i.factor, o / 2, s / 2, r.getMinZoom())), r.render(), $(e, eo(a.zoom));
3886
+ Object.assign(a, sr(a, i.factor, o / 2, s / 2, r.getMinZoom())), r.render(), $(e, So(a.zoom));
3954
3887
  break;
3955
3888
  case "fit":
3956
- r.fitGraphToViewport(r.fitPadding()), $(e, `The whole map. ${eo(a.zoom)}`);
3889
+ r.fitGraphToViewport(r.fitPadding()), $(e, `The whole map. ${So(a.zoom)}`);
3957
3890
  break;
3958
3891
  case "step": {
3959
3892
  if (e.ask("search:active") && e.ask("search:step", i.by)) break;
3960
- let t = to(e);
3961
- no(e, Qa(t, n.selectedNode && n.selectedNode.id, i.by), t);
3893
+ let t = Co(e);
3894
+ wo(e, bo(t, n.selectedNode && n.selectedNode.id, i.by), t);
3962
3895
  break;
3963
3896
  }
3964
3897
  case "first":
3965
3898
  case "last": {
3966
- let t = to(e);
3967
- no(e, i.type === "first" ? t[0] : t[t.length - 1], t);
3899
+ let t = Co(e);
3900
+ wo(e, i.type === "first" ? t[0] : t[t.length - 1], t);
3968
3901
  break;
3969
3902
  }
3970
3903
  case "frame":
3971
- ro(e);
3904
+ To(e);
3972
3905
  break;
3973
3906
  case "open":
3974
3907
  e.emit("node:focus");
3975
3908
  break;
3976
3909
  case "close":
3977
- qa(e, { source: "keyboard" }), $(e, e.el("spec-drawer") ? "Panel closed" : "Selection cleared");
3910
+ ho(e, { source: "keyboard" }), $(e, e.el("spec-drawer") ? "Panel closed" : "Selection cleared");
3978
3911
  break;
3979
- case "move": io(e, i.dx, i.dy);
3912
+ case "move": Eo(e, i.dx, i.dy);
3980
3913
  }
3981
3914
  }
3982
- function oo(e) {
3915
+ function Oo(e) {
3983
3916
  let t = e.slot("keyboard", () => ({ off: null }));
3984
- !t.off && e.state.canvas && (t.off = e.listen(e.state.canvas, "keydown", (t) => ao(e, t)));
3917
+ !t.off && e.state.canvas && (t.off = e.listen(e.state.canvas, "keydown", (t) => Do(e, t)));
3985
3918
  }
3986
- function so(e) {
3919
+ function ko(e) {
3987
3920
  let t = e.slot("keyboard", () => ({ off: null }));
3988
3921
  t.off && t.off(), t.off = null;
3989
3922
  }
3990
3923
  // ../explorer/engine/piece.js
3991
- var co = /* @__PURE__ */ RegExp("\\sdata-corn=\\\"([^\\\"]+)\\\"");
3992
- function lo(e) {
3993
- return String(e).replace(/<[a-zA-Z][^<>]*>/g, (e) => /\spart=/.test(e) ? e : e.replace(co, (e, t) => ` data-corn=\"${t}\" part=\"${t}\"`));
3924
+ var Ao = /* @__PURE__ */ RegExp("\\sdata-corn=\\\"([^\\\"]+)\\\"");
3925
+ function jo(e) {
3926
+ return String(e).replace(/<[a-zA-Z][^<>]*>/g, (e) => /\spart=/.test(e) ? e : e.replace(Ao, (e, t) => ` data-corn=\"${t}\" part=\"${t}\"`));
3994
3927
  }
3995
- function uo(e) {
3928
+ function Mo(e) {
3996
3929
  for (let t of e.querySelectorAll("[data-corn]:not([part])")) t.setAttribute("part", t.getAttribute("data-corn"));
3997
3930
  }
3998
- function fo(e) {
3931
+ function No(e) {
3999
3932
  let t = [], n = !1, r = {
4000
3933
  listen(n, r, i, a) {
4001
3934
  let o = e.listen(n, r, i, a);
@@ -4018,7 +3951,7 @@ function fo(e) {
4018
3951
  let r = e.win && e.win.MutationObserver;
4019
3952
  if (!r) return;
4020
3953
  let i = new r((e) => {
4021
- for (let t of e) for (let e of t.addedNodes) e.nodeType === 1 && (e.hasAttribute("data-corn") && !e.hasAttribute("part") && e.setAttribute("part", e.getAttribute("data-corn")), uo(e));
3954
+ for (let t of e) for (let e of t.addedNodes) e.nodeType === 1 && (e.hasAttribute("data-corn") && !e.hasAttribute("part") && e.setAttribute("part", e.getAttribute("data-corn")), Mo(e));
4022
3955
  });
4023
3956
  for (let e of n) i.observe(e, {
4024
3957
  childList: !0,
@@ -4036,57 +3969,68 @@ function fo(e) {
4036
3969
  };
4037
3970
  return e.own(r.destroy), r;
4038
3971
  }
4039
- function po(e, t, n, r, i) {
3972
+ function Po(e, t, n, r, i) {
4040
3973
  let a = e.doc.createElement("template");
4041
- a.innerHTML = lo(n), h(e, a.content);
3974
+ a.innerHTML = jo(n), za(e, a.content);
4042
3975
  let o = [...a.content.children], s = r && i ? r[i] : null;
4043
3976
  if (s && s.parentNode) {
4044
- let t = mo(s);
4045
- s.parentNode.insertBefore(a.content, s), t && ho(e, t, o);
3977
+ let t = Fo(s);
3978
+ s.parentNode.insertBefore(a.content, s), t && Io(e, t, o);
4046
3979
  } else t.append(a.content);
4047
3980
  return o;
4048
3981
  }
4049
- function mo(e) {
3982
+ function Fo(e) {
4050
3983
  let t = [], n = `corn-placeholder:${String(e.data || "").replace(/^corn-piece:/, "")}`;
4051
3984
  for (let r = e.previousSibling; r; r = r.previousSibling) if (t.push(r), r.nodeType === 8 && r.data === n) return t;
4052
3985
  return null;
4053
3986
  }
4054
- function ho(e, t, n) {
3987
+ function Io(e, t, n) {
4055
3988
  let r = (e) => e.flatMap((e) => e.nodeType === 1 ? [...e.matches("button, input") ? [e] : [], ...e.querySelectorAll("button, input")] : []), i = r(t.slice().reverse()), a = r(n), o = e.active();
4056
3989
  i.forEach((e, t) => {
4057
3990
  let n = a[t];
4058
3991
  n && n.tagName === e.tagName && (e.tagName === "INPUT" && e.value && (n.value = e.value), e === o && n.focus());
4059
3992
  }), t.forEach((e) => e.remove());
4060
3993
  }
3994
+ // ../core/text.js
3995
+ var Lo = {
3996
+ "&": "&amp;",
3997
+ "<": "&lt;",
3998
+ ">": "&gt;",
3999
+ "\"": "&quot;",
4000
+ "'": "&#39;"
4001
+ };
4002
+ function Ro(e) {
4003
+ return String(e ?? "").replace(/[&<>"']/g, (e) => Lo[e]);
4004
+ }
4061
4005
  // ../explorer/pieces/adopt-tokens.js
4062
- var go = Symbol.for("cornfield.default-tokens"), _o = "data-corn-default-tokens";
4063
- function vo(e, t) {
4006
+ var zo = Symbol.for("cornfield.default-tokens"), Bo = "data-corn-default-tokens";
4007
+ function Vo(e, t) {
4064
4008
  if (!e || !t) return !1;
4065
4009
  let n = e.nodeType === 9 ? e : e.ownerDocument, r = e.adoptedStyleSheets;
4066
4010
  if (Array.isArray(r) && n && n.defaultView && typeof n.defaultView.CSSStyleSheet == "function" && "replaceSync" in n.defaultView.CSSStyleSheet.prototype) {
4067
- if (r.some((e) => e && e[go])) return !1;
4011
+ if (r.some((e) => e && e[zo])) return !1;
4068
4012
  let i = new n.defaultView.CSSStyleSheet();
4069
- return i.replaceSync(t), i[go] = !0, e.adoptedStyleSheets = [...r, i], !0;
4013
+ return i.replaceSync(t), i[zo] = !0, e.adoptedStyleSheets = [...r, i], !0;
4070
4014
  }
4071
4015
  let i = e.nodeType === 9 ? e.head : e;
4072
- if (!i || i.querySelector(`style[${_o}]`)) return !1;
4016
+ if (!i || i.querySelector(`style[${Bo}]`)) return !1;
4073
4017
  let a = n.createElement("style");
4074
- return a.setAttribute(_o, ""), a.textContent = t, i.prepend(a), !0;
4018
+ return a.setAttribute(Bo, ""), a.textContent = t, i.prepend(a), !0;
4075
4019
  }
4076
4020
  // ../explorer/pieces/scope-link.js
4077
- var yo = "corn-scope-request", bo = "corn-scope-changed", xo = (e) => e.slot("scope", () => ({
4021
+ var Ho = "corn-scope-request", Uo = "corn-scope-changed", Wo = (e) => e.slot("scope", () => ({
4078
4022
  theme: "auto",
4079
4023
  serverTheme: null,
4080
4024
  host: null,
4081
4025
  source: null,
4082
4026
  mountStatus: null
4083
- })), So = (e) => {
4084
- let t = xo(e);
4027
+ })), Go = (e) => {
4028
+ let t = Wo(e);
4085
4029
  return t.host ? t : null;
4086
4030
  };
4087
- function Co(e, t) {
4031
+ function Ko(e, t) {
4088
4032
  let n = null;
4089
- e.dispatchEvent(new CustomEvent(yo, {
4033
+ e.dispatchEvent(new CustomEvent(Ho, {
4090
4034
  bubbles: !0,
4091
4035
  composed: !0,
4092
4036
  detail: {
@@ -4097,16 +4041,16 @@ function Co(e, t) {
4097
4041
  }
4098
4042
  }));
4099
4043
  let r = () => t();
4100
- e.addEventListener(bo, r);
4044
+ e.addEventListener(Uo, r);
4101
4045
  let i = !1;
4102
4046
  return {
4103
4047
  inst: n ? n.inst : null,
4104
4048
  scope: n ? n.scope : null,
4105
4049
  leave() {
4106
- i || (i = !0, e.removeEventListener(bo, r), n && n.release());
4050
+ i || (i = !0, e.removeEventListener(Uo, r), n && n.release());
4107
4051
  }
4108
4052
  };
4109
4053
  }
4110
4054
  // \0corn-default-tokens
4111
- var wo = "/* cornfield's default design tokens, generated from explorer/tokens.css by components/scripts/tokens.mjs: do not edit.\n Every selector is :where(...), at zero specificity: any ordinary rule of yours (on :root, or on one element) overrides it. */\n\n:where(:root) {\n --corn-ground: #090d16;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.2) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.16) 0%, transparent 45%),\n radial-gradient(circle at 50% 50%, rgba(66, 153, 225, 0.10) 0%, transparent 60%);\n --corn-surface-1: rgba(26, 34, 52, 0.72);\n --corn-surface-2: rgba(30, 41, 59, 0.8);\n --corn-surface-3: rgba(51, 65, 85, 0.8);\n --corn-line: rgba(255, 255, 255, 0.12);\n --corn-line-soft: rgba(255, 255, 255, 0.07);\n --corn-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.45);\n --corn-shadow-sm: 0 2px 6px rgba(0, 0, 0, 0.4);\n --corn-shadow-lg: 0 25px 50px -12px rgba(0, 0, 0, 0.5);\n --corn-shadow-color: rgba(0, 0, 0, 0.5);\n --corn-glow: 8px;\n --corn-scrim: rgba(0, 0, 0, 0.6);\n --corn-shadow-sheet: 0 -8px 24px color-mix(in srgb, var(--corn-shadow-color) 70%, transparent);\n --corn-blur: 16px;\n --corn-text: #f8fafc;\n --corn-text-2: #cbd5e1;\n --corn-text-3: #9aa9bc;\n --corn-text-on-accent: #fff;\n --corn-mockup-ground: #fff;\n --corn-accent: #4f46e5;\n --corn-accent-hover: #6265f1;\n --corn-accent-text: #98a1fa;\n --corn-accent-soft: color-mix(in srgb, var(--corn-accent-hover) 20%, transparent);\n --corn-focus: #818cf8;\n --corn-brand-gradient: linear-gradient(135deg, #4299e1 0%, #818cf8 50%, #e53e3e 100%);\n --corn-ok: #34d399;\n --corn-warn: #fcd34d;\n --corn-bad: #fca5a5;\n --corn-info: #7dd3fc;\n --corn-ok-soft: color-mix(in srgb, var(--corn-ok) 15%, transparent);\n --corn-run-requested: var(--corn-text-3);\n --corn-run-claimed: var(--corn-info);\n --corn-run-working: var(--corn-info);\n --corn-run-waiting: var(--corn-warn);\n --corn-run-waiting-ink: var(--corn-ground);\n --corn-run-done: var(--corn-ok);\n --corn-run-failed: var(--corn-bad);\n --corn-run-stopped: var(--corn-text-2);\n --corn-added: #2dd4bf;\n --corn-changed: #fbbf24;\n --corn-removed: #fa9292;\n --corn-edit: #b49cfb;\n --corn-added-text: color-mix(in srgb, var(--corn-added) 60%, var(--corn-text));\n --corn-edit-text: color-mix(in srgb, var(--corn-edit) 60%, var(--corn-text));\n --corn-hue-orange: #fb923c;\n --corn-hue-fuchsia: #e879f9;\n --corn-hue-pink: #f472b6;\n --corn-hue-lime: #a3e635;\n --corn-hue-orange-text: var(--corn-hue-orange);\n --corn-hue-orange-soft: color-mix(in srgb, var(--corn-hue-orange) 12%, transparent);\n --corn-font: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n --corn-font-display: var(--corn-font);\n --corn-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, \"Liberation Mono\", monospace;\n --corn-font-num: var(--corn-font);\n --corn-text-2xs: 10px;\n --corn-text-xs: 11px;\n --corn-text-sm: 12px;\n --corn-text-md: 13px;\n --corn-text-base: 14px;\n --corn-text-lg: 15px;\n --corn-text-xl: 20px;\n --corn-radius-xs: 3px;\n --corn-radius-sm: 6px;\n --corn-radius: 10px;\n --corn-radius-lg: 14px;\n --corn-radius-pill: 999px;\n --corn-border: 1px;\n --corn-border-strong: 2px;\n --corn-focus-width: 2px;\n --corn-focus-offset: 2px;\n --corn-space: 4px;\n --corn-space-1: var(--corn-space);\n --corn-space-2: 6px;\n --corn-space-3: 8px;\n --corn-space-4: 12px;\n --corn-space-5: 16px;\n --corn-space-6: 24px;\n --corn-control-height: 32px;\n --corn-panel-pad: calc(var(--corn-space-5) + var(--corn-space-1));\n --corn-panel-head-height: calc(var(--corn-control-height) + var(--corn-space-3));\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 18%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 45%, transparent);\n --corn-glyph-mix: 100%;\n color-scheme: dark;\n --corn-map-stroke: auto;\n --corn-map-stroke-width: 1.5px;\n --corn-map-label: auto;\n --corn-map-label-halo: auto;\n --corn-map-collision: var(--corn-warn);\n --corn-map-font: auto;\n --corn-map-edge-width: auto;\n --corn-map-glow: auto;\n --corn-map-label-min: auto;\n --corn-map-glyph: auto;\n --corn-map-grey: auto;\n --corn-map-grey-alpha: auto;\n --corn-map-added: auto;\n --corn-map-changed: auto;\n --corn-map-removed: auto;\n --corn-map-edit: auto;\n --corn-map-selected: auto;\n --corn-map-match: auto;\n --corn-map-lit: auto;\n --corn-map-edge-ownership: auto;\n --corn-map-edge-usage: auto;\n --corn-map-edge-flow: auto;\n --corn-map-edge-reads: auto;\n --corn-map-edge-writes: auto;\n --corn-map-edge-calls: auto;\n --corn-map-edge-triggers: auto;\n --corn-map-edge-delivers: auto;\n --corn-map-edge-runs-on: auto;\n --corn-map-edge-uses: auto;\n --corn-map-edge-extends: auto;\n --corn-map-node-root: auto;\n --corn-map-node-app: auto;\n --corn-map-node-page: auto;\n --corn-map-node-pkg: auto;\n --corn-map-node-core: auto;\n --corn-map-node-token: auto;\n --corn-map-node-atom: auto;\n --corn-map-node-molecule: auto;\n --corn-map-node-tool: auto;\n --corn-map-node-store: auto;\n --corn-map-node-table: auto;\n --corn-map-node-rom: auto;\n --corn-map-node-service: auto;\n --corn-map-node-external: auto;\n --corn-map-node-stack: auto;\n --corn-map-node-machine: auto;\n --corn-map-node-container: auto;\n --corn-map-node-persona: auto;\n --corn-map-node-device: auto;\n --corn-map-node-floor: auto;\n --corn-map-node-room: auto;\n --corn-map-group-app: auto;\n --corn-map-group-pkg: auto;\n --corn-map-group-page: auto;\n --corn-map-group-atom: auto;\n --corn-map-group-molecule: auto;\n --corn-map-group-token: auto;\n --corn-map-group-tool: auto;\n --corn-map-group-table: auto;\n --corn-map-group-rom: auto;\n --corn-map-group-service: auto;\n --corn-map-group-cloud: auto;\n --corn-map-group-web: auto;\n --corn-map-group-stack: auto;\n --corn-map-group-machine: auto;\n --corn-map-group-container: auto;\n --corn-map-group-device: auto;\n --corn-map-group-house: auto;\n --corn-map-group-persona: auto;\n}\n\n@media (prefers-color-scheme: light) {\n :where(:root:not([data-theme=\"dark\"])) {\n --corn-ground: #f4f6fa;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.06) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.04) 0%, transparent 45%);\n --corn-surface-1: rgba(255, 255, 255, 0.8);\n --corn-surface-2: rgba(241, 245, 249, 0.92);\n --corn-surface-3: rgba(226, 232, 240, 0.95);\n --corn-line: rgba(15, 23, 42, 0.12);\n --corn-line-soft: rgba(15, 23, 42, 0.07);\n --corn-shadow: 0 8px 28px 0 rgba(15, 23, 42, 0.12);\n --corn-shadow-sm: 0 1px 3px rgba(15, 23, 42, 0.25);\n --corn-shadow-lg: 0 10px 30px -12px rgba(15, 23, 42, 0.18);\n --corn-shadow-color: rgba(15, 23, 42, 0.25);\n --corn-glow: 0px;\n --corn-scrim: rgba(15, 23, 42, 0.35);\n --corn-text: #0f172a;\n --corn-text-2: #334155;\n --corn-text-3: #475569;\n --corn-accent-text: #4f46e5;\n --corn-focus: #4f46e5;\n --corn-brand-gradient: linear-gradient(135deg, #2563eb 0%, #4f46e5 50%, #dc2626 100%);\n --corn-ok: #046f51;\n --corn-warn: #854d0e;\n --corn-bad: #b91c1c;\n --corn-info: #03679e;\n --corn-added: #197c6f;\n --corn-changed: #8f6703;\n --corn-removed: #e20b0b;\n --corn-edit: #6839f6;\n --corn-hue-orange: #c2410c;\n --corn-hue-fuchsia: #a21caf;\n --corn-hue-pink: #be185d;\n --corn-hue-lime: #4c7b0f;\n --corn-hue-orange-text: #9a3412;\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 30%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 55%, transparent);\n --corn-glyph-mix: 45%;\n color-scheme: light;\n }\n}\n\n:where(:root[data-theme=\"light\"]) {\n --corn-ground: #f4f6fa;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.06) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.04) 0%, transparent 45%);\n --corn-surface-1: rgba(255, 255, 255, 0.8);\n --corn-surface-2: rgba(241, 245, 249, 0.92);\n --corn-surface-3: rgba(226, 232, 240, 0.95);\n --corn-line: rgba(15, 23, 42, 0.12);\n --corn-line-soft: rgba(15, 23, 42, 0.07);\n --corn-shadow: 0 8px 28px 0 rgba(15, 23, 42, 0.12);\n --corn-shadow-sm: 0 1px 3px rgba(15, 23, 42, 0.25);\n --corn-shadow-lg: 0 10px 30px -12px rgba(15, 23, 42, 0.18);\n --corn-shadow-color: rgba(15, 23, 42, 0.25);\n --corn-glow: 0px;\n --corn-scrim: rgba(15, 23, 42, 0.35);\n --corn-text: #0f172a;\n --corn-text-2: #334155;\n --corn-text-3: #475569;\n --corn-accent-text: #4f46e5;\n --corn-focus: #4f46e5;\n --corn-brand-gradient: linear-gradient(135deg, #2563eb 0%, #4f46e5 50%, #dc2626 100%);\n --corn-ok: #046f51;\n --corn-warn: #854d0e;\n --corn-bad: #b91c1c;\n --corn-info: #03679e;\n --corn-added: #197c6f;\n --corn-changed: #8f6703;\n --corn-removed: #e20b0b;\n --corn-edit: #6839f6;\n --corn-hue-orange: #c2410c;\n --corn-hue-fuchsia: #a21caf;\n --corn-hue-pink: #be185d;\n --corn-hue-lime: #4c7b0f;\n --corn-hue-orange-text: #9a3412;\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 30%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 55%, transparent);\n --corn-glyph-mix: 45%;\n color-scheme: light;\n}\n\n@media (max-width: 767px) {\n :where(:root) {\n --corn-control-height: 44px;\n }\n}\n\n@media (max-width: 639px) {\n :where(:root) {\n --corn-panel-pad: var(--corn-space-5);\n }\n}\n\n:where(:root) {\n --hx-bg: var(--corn-ground);\n --hx-text: var(--corn-text);\n --hx-ink: var(--corn-text);\n --hx-text-1: var(--corn-text);\n --hx-text-2: var(--corn-text-2);\n --hx-slate-300: var(--corn-text-2);\n --hx-slate-400: var(--corn-text-3);\n --hx-slate-500: var(--corn-text-3);\n --hx-slate-600: var(--corn-text-3);\n --hx-slate-700: var(--corn-surface-3);\n --hx-slate-800: var(--corn-surface-2);\n --hx-slate-900: var(--corn-ground);\n --hx-slate-950: var(--corn-ground);\n --hx-indigo: var(--corn-accent-text);\n --hx-indigo-strong: var(--corn-accent);\n --hx-emerald: var(--corn-ok);\n --hx-amber: var(--corn-warn);\n --hx-sky: var(--corn-info);\n --hx-pink: var(--corn-hue-pink);\n --hx-fuchsia: var(--corn-hue-fuchsia);\n --hx-fuchsia-strong: var(--corn-hue-fuchsia);\n --hx-red: var(--corn-bad);\n --hx-code: var(--corn-warn);\n --hx-orange-text: var(--corn-hue-orange);\n --hx-orange-strong: var(--corn-hue-orange);\n --hx-teal-text: var(--corn-added-text);\n --hx-teal-strong: var(--corn-added-text);\n --hx-violet-text: var(--corn-edit-text);\n --hx-green-text: var(--corn-ok);\n --hx-lime-text: var(--corn-hue-lime);\n --hx-mark-added: var(--corn-added);\n --hx-mark-changed: var(--corn-changed);\n --hx-mark-removed: var(--corn-removed);\n --hx-mark-edit: var(--corn-edit);\n --hx-control: var(--corn-surface-2);\n --hx-control-hover: var(--corn-surface-3);\n --hx-control-off: color-mix(in srgb, var(--corn-ground) 40%, transparent);\n --hx-well: color-mix(in srgb, var(--corn-ground) 80%, transparent);\n --hx-well-soft: color-mix(in srgb, var(--corn-ground) 55%, transparent);\n --hx-line: var(--corn-line);\n --hx-line-soft: var(--corn-line-soft);\n --hx-scroll: color-mix(in srgb, var(--corn-text) 18%, transparent);\n --hx-scroll-hover: color-mix(in srgb, var(--corn-text) 28%, transparent);\n --hx-swatch-solid: color-mix(in srgb, var(--corn-text) 55%, transparent);\n --hx-backdrop: var(--corn-scrim);\n --hx-glyph-mix: var(--corn-glyph-mix);\n --surface-glass: var(--corn-surface-1);\n --surface-glass-header: color-mix(in srgb, var(--corn-ground) 88%, transparent);\n --border-glass: var(--corn-line);\n --border-subtle: var(--corn-line-soft);\n --glass-blur: blur(var(--corn-blur));\n --glass-shadow: var(--corn-shadow);\n --gradient-primary: var(--corn-brand-gradient);\n --bg-gradient: var(--corn-ground-image), var(--corn-ground);\n --pop-font-body: var(--corn-font);\n --pop-font-mono: var(--corn-mono);\n}\n\n/* theme=\"light\" on an element: this mode's tokens, on the element itself */\n:where(corn-map[theme=\"light\"]),\n:where(corn-scope[theme=\"light\"]) {\n --corn-ground: #f4f6fa;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.06) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.04) 0%, transparent 45%);\n --corn-surface-1: rgba(255, 255, 255, 0.8);\n --corn-surface-2: rgba(241, 245, 249, 0.92);\n --corn-surface-3: rgba(226, 232, 240, 0.95);\n --corn-line: rgba(15, 23, 42, 0.12);\n --corn-line-soft: rgba(15, 23, 42, 0.07);\n --corn-shadow: 0 8px 28px 0 rgba(15, 23, 42, 0.12);\n --corn-shadow-sm: 0 1px 3px rgba(15, 23, 42, 0.25);\n --corn-shadow-lg: 0 10px 30px -12px rgba(15, 23, 42, 0.18);\n --corn-shadow-color: rgba(15, 23, 42, 0.25);\n --corn-glow: 0px;\n --corn-scrim: rgba(15, 23, 42, 0.35);\n --corn-text: #0f172a;\n --corn-text-2: #334155;\n --corn-text-3: #475569;\n --corn-accent-text: #4f46e5;\n --corn-focus: #4f46e5;\n --corn-brand-gradient: linear-gradient(135deg, #2563eb 0%, #4f46e5 50%, #dc2626 100%);\n --corn-ok: #046f51;\n --corn-warn: #854d0e;\n --corn-bad: #b91c1c;\n --corn-info: #03679e;\n --corn-added: #197c6f;\n --corn-changed: #8f6703;\n --corn-removed: #e20b0b;\n --corn-edit: #6839f6;\n --corn-hue-orange: #c2410c;\n --corn-hue-fuchsia: #a21caf;\n --corn-hue-pink: #be185d;\n --corn-hue-lime: #4c7b0f;\n --corn-hue-orange-text: #9a3412;\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 30%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 55%, transparent);\n --corn-glyph-mix: 45%;\n color-scheme: light;\n --corn-shadow-sheet: 0 -8px 24px color-mix(in srgb, var(--corn-shadow-color) 70%, transparent);\n --corn-accent-soft: color-mix(in srgb, var(--corn-accent-hover) 20%, transparent);\n --corn-ok-soft: color-mix(in srgb, var(--corn-ok) 15%, transparent);\n --corn-run-requested: var(--corn-text-3);\n --corn-run-claimed: var(--corn-info);\n --corn-run-working: var(--corn-info);\n --corn-run-waiting: var(--corn-warn);\n --corn-run-waiting-ink: var(--corn-ground);\n --corn-run-done: var(--corn-ok);\n --corn-run-failed: var(--corn-bad);\n --corn-run-stopped: var(--corn-text-2);\n --corn-added-text: color-mix(in srgb, var(--corn-added) 60%, var(--corn-text));\n --corn-edit-text: color-mix(in srgb, var(--corn-edit) 60%, var(--corn-text));\n --corn-hue-orange-soft: color-mix(in srgb, var(--corn-hue-orange) 12%, transparent);\n --corn-font-display: var(--corn-font);\n --corn-font-num: var(--corn-font);\n --corn-space-1: var(--corn-space);\n --corn-panel-pad: calc(var(--corn-space-5) + var(--corn-space-1));\n --corn-panel-head-height: calc(var(--corn-control-height) + var(--corn-space-3));\n --corn-map-collision: var(--corn-warn);\n --hx-bg: var(--corn-ground);\n --hx-text: var(--corn-text);\n --hx-ink: var(--corn-text);\n --hx-text-1: var(--corn-text);\n --hx-text-2: var(--corn-text-2);\n --hx-slate-300: var(--corn-text-2);\n --hx-slate-400: var(--corn-text-3);\n --hx-slate-500: var(--corn-text-3);\n --hx-slate-600: var(--corn-text-3);\n --hx-slate-700: var(--corn-surface-3);\n --hx-slate-800: var(--corn-surface-2);\n --hx-slate-900: var(--corn-ground);\n --hx-slate-950: var(--corn-ground);\n --hx-indigo: var(--corn-accent-text);\n --hx-indigo-strong: var(--corn-accent);\n --hx-emerald: var(--corn-ok);\n --hx-amber: var(--corn-warn);\n --hx-sky: var(--corn-info);\n --hx-pink: var(--corn-hue-pink);\n --hx-fuchsia: var(--corn-hue-fuchsia);\n --hx-fuchsia-strong: var(--corn-hue-fuchsia);\n --hx-red: var(--corn-bad);\n --hx-code: var(--corn-warn);\n --hx-orange-text: var(--corn-hue-orange);\n --hx-orange-strong: var(--corn-hue-orange);\n --hx-teal-text: var(--corn-added-text);\n --hx-teal-strong: var(--corn-added-text);\n --hx-violet-text: var(--corn-edit-text);\n --hx-green-text: var(--corn-ok);\n --hx-lime-text: var(--corn-hue-lime);\n --hx-mark-added: var(--corn-added);\n --hx-mark-changed: var(--corn-changed);\n --hx-mark-removed: var(--corn-removed);\n --hx-mark-edit: var(--corn-edit);\n --hx-control: var(--corn-surface-2);\n --hx-control-hover: var(--corn-surface-3);\n --hx-control-off: color-mix(in srgb, var(--corn-ground) 40%, transparent);\n --hx-well: color-mix(in srgb, var(--corn-ground) 80%, transparent);\n --hx-well-soft: color-mix(in srgb, var(--corn-ground) 55%, transparent);\n --hx-line: var(--corn-line);\n --hx-line-soft: var(--corn-line-soft);\n --hx-scroll: color-mix(in srgb, var(--corn-text) 18%, transparent);\n --hx-scroll-hover: color-mix(in srgb, var(--corn-text) 28%, transparent);\n --hx-swatch-solid: color-mix(in srgb, var(--corn-text) 55%, transparent);\n --hx-backdrop: var(--corn-scrim);\n --hx-glyph-mix: var(--corn-glyph-mix);\n --surface-glass: var(--corn-surface-1);\n --surface-glass-header: color-mix(in srgb, var(--corn-ground) 88%, transparent);\n --border-glass: var(--corn-line);\n --border-subtle: var(--corn-line-soft);\n --glass-blur: blur(var(--corn-blur));\n --glass-shadow: var(--corn-shadow);\n --gradient-primary: var(--corn-brand-gradient);\n --bg-gradient: var(--corn-ground-image), var(--corn-ground);\n --pop-font-body: var(--corn-font);\n --pop-font-mono: var(--corn-mono);\n}\n\n/* theme=\"dark\" on an element: this mode's tokens, on the element itself */\n:where(corn-map[theme=\"dark\"]),\n:where(corn-scope[theme=\"dark\"]) {\n --corn-ground: #090d16;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.2) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.16) 0%, transparent 45%),\n radial-gradient(circle at 50% 50%, rgba(66, 153, 225, 0.10) 0%, transparent 60%);\n --corn-surface-1: rgba(26, 34, 52, 0.72);\n --corn-surface-2: rgba(30, 41, 59, 0.8);\n --corn-surface-3: rgba(51, 65, 85, 0.8);\n --corn-line: rgba(255, 255, 255, 0.12);\n --corn-line-soft: rgba(255, 255, 255, 0.07);\n --corn-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.45);\n --corn-shadow-sm: 0 2px 6px rgba(0, 0, 0, 0.4);\n --corn-shadow-lg: 0 25px 50px -12px rgba(0, 0, 0, 0.5);\n --corn-shadow-color: rgba(0, 0, 0, 0.5);\n --corn-glow: 8px;\n --corn-scrim: rgba(0, 0, 0, 0.6);\n --corn-text: #f8fafc;\n --corn-text-2: #cbd5e1;\n --corn-text-3: #9aa9bc;\n --corn-accent-text: #98a1fa;\n --corn-focus: #818cf8;\n --corn-brand-gradient: linear-gradient(135deg, #4299e1 0%, #818cf8 50%, #e53e3e 100%);\n --corn-ok: #34d399;\n --corn-warn: #fcd34d;\n --corn-bad: #fca5a5;\n --corn-info: #7dd3fc;\n --corn-added: #2dd4bf;\n --corn-changed: #fbbf24;\n --corn-removed: #fa9292;\n --corn-edit: #b49cfb;\n --corn-hue-orange: #fb923c;\n --corn-hue-fuchsia: #e879f9;\n --corn-hue-pink: #f472b6;\n --corn-hue-lime: #a3e635;\n --corn-hue-orange-text: var(--corn-hue-orange);\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 18%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 45%, transparent);\n --corn-glyph-mix: 100%;\n color-scheme: dark;\n --corn-shadow-sheet: 0 -8px 24px color-mix(in srgb, var(--corn-shadow-color) 70%, transparent);\n --corn-accent-soft: color-mix(in srgb, var(--corn-accent-hover) 20%, transparent);\n --corn-ok-soft: color-mix(in srgb, var(--corn-ok) 15%, transparent);\n --corn-run-requested: var(--corn-text-3);\n --corn-run-claimed: var(--corn-info);\n --corn-run-working: var(--corn-info);\n --corn-run-waiting: var(--corn-warn);\n --corn-run-waiting-ink: var(--corn-ground);\n --corn-run-done: var(--corn-ok);\n --corn-run-failed: var(--corn-bad);\n --corn-run-stopped: var(--corn-text-2);\n --corn-added-text: color-mix(in srgb, var(--corn-added) 60%, var(--corn-text));\n --corn-edit-text: color-mix(in srgb, var(--corn-edit) 60%, var(--corn-text));\n --corn-hue-orange-soft: color-mix(in srgb, var(--corn-hue-orange) 12%, transparent);\n --corn-font-display: var(--corn-font);\n --corn-font-num: var(--corn-font);\n --corn-space-1: var(--corn-space);\n --corn-panel-pad: calc(var(--corn-space-5) + var(--corn-space-1));\n --corn-panel-head-height: calc(var(--corn-control-height) + var(--corn-space-3));\n --corn-map-collision: var(--corn-warn);\n --hx-bg: var(--corn-ground);\n --hx-text: var(--corn-text);\n --hx-ink: var(--corn-text);\n --hx-text-1: var(--corn-text);\n --hx-text-2: var(--corn-text-2);\n --hx-slate-300: var(--corn-text-2);\n --hx-slate-400: var(--corn-text-3);\n --hx-slate-500: var(--corn-text-3);\n --hx-slate-600: var(--corn-text-3);\n --hx-slate-700: var(--corn-surface-3);\n --hx-slate-800: var(--corn-surface-2);\n --hx-slate-900: var(--corn-ground);\n --hx-slate-950: var(--corn-ground);\n --hx-indigo: var(--corn-accent-text);\n --hx-indigo-strong: var(--corn-accent);\n --hx-emerald: var(--corn-ok);\n --hx-amber: var(--corn-warn);\n --hx-sky: var(--corn-info);\n --hx-pink: var(--corn-hue-pink);\n --hx-fuchsia: var(--corn-hue-fuchsia);\n --hx-fuchsia-strong: var(--corn-hue-fuchsia);\n --hx-red: var(--corn-bad);\n --hx-code: var(--corn-warn);\n --hx-orange-text: var(--corn-hue-orange);\n --hx-orange-strong: var(--corn-hue-orange);\n --hx-teal-text: var(--corn-added-text);\n --hx-teal-strong: var(--corn-added-text);\n --hx-violet-text: var(--corn-edit-text);\n --hx-green-text: var(--corn-ok);\n --hx-lime-text: var(--corn-hue-lime);\n --hx-mark-added: var(--corn-added);\n --hx-mark-changed: var(--corn-changed);\n --hx-mark-removed: var(--corn-removed);\n --hx-mark-edit: var(--corn-edit);\n --hx-control: var(--corn-surface-2);\n --hx-control-hover: var(--corn-surface-3);\n --hx-control-off: color-mix(in srgb, var(--corn-ground) 40%, transparent);\n --hx-well: color-mix(in srgb, var(--corn-ground) 80%, transparent);\n --hx-well-soft: color-mix(in srgb, var(--corn-ground) 55%, transparent);\n --hx-line: var(--corn-line);\n --hx-line-soft: var(--corn-line-soft);\n --hx-scroll: color-mix(in srgb, var(--corn-text) 18%, transparent);\n --hx-scroll-hover: color-mix(in srgb, var(--corn-text) 28%, transparent);\n --hx-swatch-solid: color-mix(in srgb, var(--corn-text) 55%, transparent);\n --hx-backdrop: var(--corn-scrim);\n --hx-glyph-mix: var(--corn-glyph-mix);\n --surface-glass: var(--corn-surface-1);\n --surface-glass-header: color-mix(in srgb, var(--corn-ground) 88%, transparent);\n --border-glass: var(--corn-line);\n --border-subtle: var(--corn-line-soft);\n --glass-blur: blur(var(--corn-blur));\n --glass-shadow: var(--corn-shadow);\n --gradient-primary: var(--corn-brand-gradient);\n --bg-gradient: var(--corn-ground-image), var(--corn-ground);\n --pop-font-body: var(--corn-font);\n --pop-font-mono: var(--corn-mono);\n}\n";
4112
- export { bn as $, mr as A, Or as B, na as C, hr as D, yr as E, si as F, er as G, Xn as H, ci as I, gn as J, $n as K, Br as L, fr as M, Mr as N, Er as O, q as P, vn as Q, Ir as R, Hi as S, ea as T, K as U, Vr as V, tr as W, An as X, hn as Y, wn as Z, va as _, Co as a, ze as at, Ci as b, po as c, O as ct, oo as d, f as dt, Cn as et, so as f, p as ft, ra as g, Ua as h, xo as i, L as it, pr as j, xr as k, fo as l, ee as lt, Ka as m, n as mt, bo as n, Tn as nt, So as o, ut as ot, qa as p, o as pt, fn as q, yo as r, tn as rt, vo as s, E as st, wo as t, yn as tt, lo as u, w as ut, Sa as v, Gi as w, Ei as x, ba as y, Y as z };
4055
+ var qo = "/* cornfield's default design tokens, generated from explorer/tokens.css by components/scripts/tokens.mjs: do not edit.\n Every selector is :where(...), at zero specificity: any ordinary rule of yours (on :root, or on one element) overrides it. */\n\n:where(:root) {\n --corn-ground: #090d16;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.2) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.16) 0%, transparent 45%),\n radial-gradient(circle at 50% 50%, rgba(66, 153, 225, 0.10) 0%, transparent 60%);\n --corn-surface-1: rgba(26, 34, 52, 0.72);\n --corn-surface-2: rgba(30, 41, 59, 0.8);\n --corn-surface-3: rgba(51, 65, 85, 0.8);\n --corn-line: rgba(255, 255, 255, 0.12);\n --corn-line-soft: rgba(255, 255, 255, 0.07);\n --corn-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.45);\n --corn-shadow-sm: 0 2px 6px rgba(0, 0, 0, 0.4);\n --corn-shadow-lg: 0 25px 50px -12px rgba(0, 0, 0, 0.5);\n --corn-shadow-color: rgba(0, 0, 0, 0.5);\n --corn-glow: 8px;\n --corn-scrim: rgba(0, 0, 0, 0.6);\n --corn-shadow-sheet: 0 -8px 24px color-mix(in srgb, var(--corn-shadow-color) 70%, transparent);\n --corn-blur: 16px;\n --corn-text: #f8fafc;\n --corn-text-2: #cbd5e1;\n --corn-text-3: #9aa9bc;\n --corn-text-on-accent: #fff;\n --corn-mockup-ground: #fff;\n --corn-accent: #4f46e5;\n --corn-accent-hover: #6265f1;\n --corn-accent-text: #98a1fa;\n --corn-accent-soft: color-mix(in srgb, var(--corn-accent-hover) 20%, transparent);\n --corn-focus: #818cf8;\n --corn-brand-gradient: linear-gradient(135deg, #4299e1 0%, #818cf8 50%, #e53e3e 100%);\n --corn-ok: #34d399;\n --corn-warn: #fcd34d;\n --corn-bad: #fca5a5;\n --corn-info: #7dd3fc;\n --corn-ok-soft: color-mix(in srgb, var(--corn-ok) 15%, transparent);\n --corn-run-requested: var(--corn-text-3);\n --corn-run-claimed: var(--corn-info);\n --corn-run-working: var(--corn-info);\n --corn-run-waiting: var(--corn-warn);\n --corn-run-waiting-ink: var(--corn-ground);\n --corn-run-done: var(--corn-ok);\n --corn-run-failed: var(--corn-bad);\n --corn-run-stopped: var(--corn-text-2);\n --corn-added: #2dd4bf;\n --corn-changed: #fbbf24;\n --corn-removed: #fa9292;\n --corn-edit: #b49cfb;\n --corn-added-text: color-mix(in srgb, var(--corn-added) 60%, var(--corn-text));\n --corn-edit-text: color-mix(in srgb, var(--corn-edit) 60%, var(--corn-text));\n --corn-hue-orange: #fb923c;\n --corn-hue-fuchsia: #e879f9;\n --corn-hue-pink: #f472b6;\n --corn-hue-lime: #a3e635;\n --corn-hue-orange-text: var(--corn-hue-orange);\n --corn-hue-orange-soft: color-mix(in srgb, var(--corn-hue-orange) 12%, transparent);\n --corn-font: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n --corn-font-display: var(--corn-font);\n --corn-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, \"Liberation Mono\", monospace;\n --corn-font-num: var(--corn-font);\n --corn-text-2xs: 10px;\n --corn-text-xs: 11px;\n --corn-text-sm: 12px;\n --corn-text-md: 13px;\n --corn-text-base: 14px;\n --corn-text-lg: 15px;\n --corn-text-xl: 20px;\n --corn-radius-xs: 3px;\n --corn-radius-sm: 6px;\n --corn-radius: 10px;\n --corn-radius-lg: 14px;\n --corn-radius-pill: 999px;\n --corn-border: 1px;\n --corn-border-strong: 2px;\n --corn-focus-width: 2px;\n --corn-focus-offset: 2px;\n --corn-space: 4px;\n --corn-space-1: var(--corn-space);\n --corn-space-2: 6px;\n --corn-space-3: 8px;\n --corn-space-4: 12px;\n --corn-space-5: 16px;\n --corn-space-6: 24px;\n --corn-control-height: 32px;\n --corn-panel-pad: calc(var(--corn-space-5) + var(--corn-space-1));\n --corn-panel-head-height: calc(var(--corn-control-height) + var(--corn-space-3));\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 18%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 45%, transparent);\n --corn-glyph-mix: 100%;\n color-scheme: dark;\n --corn-map-stroke: auto;\n --corn-map-stroke-width: 1.5px;\n --corn-map-label: auto;\n --corn-map-label-halo: auto;\n --corn-map-collision: var(--corn-warn);\n --corn-map-font: auto;\n --corn-map-edge-width: auto;\n --corn-map-glow: auto;\n --corn-map-label-min: auto;\n --corn-map-glyph: auto;\n --corn-map-grey: auto;\n --corn-map-grey-alpha: auto;\n --corn-map-added: auto;\n --corn-map-changed: auto;\n --corn-map-removed: auto;\n --corn-map-edit: auto;\n --corn-map-selected: auto;\n --corn-map-match: auto;\n --corn-map-lit: auto;\n --corn-map-edge-ownership: auto;\n --corn-map-edge-usage: auto;\n --corn-map-edge-flow: auto;\n --corn-map-edge-reads: auto;\n --corn-map-edge-writes: auto;\n --corn-map-edge-calls: auto;\n --corn-map-edge-triggers: auto;\n --corn-map-edge-delivers: auto;\n --corn-map-edge-runs-on: auto;\n --corn-map-edge-uses: auto;\n --corn-map-edge-extends: auto;\n --corn-map-node-root: auto;\n --corn-map-node-app: auto;\n --corn-map-node-page: auto;\n --corn-map-node-pkg: auto;\n --corn-map-node-core: auto;\n --corn-map-node-token: auto;\n --corn-map-node-atom: auto;\n --corn-map-node-molecule: auto;\n --corn-map-node-tool: auto;\n --corn-map-node-store: auto;\n --corn-map-node-table: auto;\n --corn-map-node-rom: auto;\n --corn-map-node-service: auto;\n --corn-map-node-external: auto;\n --corn-map-node-stack: auto;\n --corn-map-node-machine: auto;\n --corn-map-node-container: auto;\n --corn-map-node-persona: auto;\n --corn-map-node-device: auto;\n --corn-map-node-floor: auto;\n --corn-map-node-room: auto;\n --corn-map-group-app: auto;\n --corn-map-group-pkg: auto;\n --corn-map-group-page: auto;\n --corn-map-group-atom: auto;\n --corn-map-group-molecule: auto;\n --corn-map-group-token: auto;\n --corn-map-group-tool: auto;\n --corn-map-group-table: auto;\n --corn-map-group-rom: auto;\n --corn-map-group-service: auto;\n --corn-map-group-cloud: auto;\n --corn-map-group-web: auto;\n --corn-map-group-stack: auto;\n --corn-map-group-machine: auto;\n --corn-map-group-container: auto;\n --corn-map-group-device: auto;\n --corn-map-group-house: auto;\n --corn-map-group-persona: auto;\n}\n\n@media (prefers-color-scheme: light) {\n :where(:root:not([data-theme=\"dark\"])) {\n --corn-ground: #f4f6fa;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.06) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.04) 0%, transparent 45%);\n --corn-surface-1: rgba(255, 255, 255, 0.8);\n --corn-surface-2: rgba(241, 245, 249, 0.92);\n --corn-surface-3: rgba(226, 232, 240, 0.95);\n --corn-line: rgba(15, 23, 42, 0.12);\n --corn-line-soft: rgba(15, 23, 42, 0.07);\n --corn-shadow: 0 8px 28px 0 rgba(15, 23, 42, 0.12);\n --corn-shadow-sm: 0 1px 3px rgba(15, 23, 42, 0.25);\n --corn-shadow-lg: 0 10px 30px -12px rgba(15, 23, 42, 0.18);\n --corn-shadow-color: rgba(15, 23, 42, 0.25);\n --corn-glow: 0px;\n --corn-scrim: rgba(15, 23, 42, 0.35);\n --corn-text: #0f172a;\n --corn-text-2: #334155;\n --corn-text-3: #475569;\n --corn-accent-text: #4f46e5;\n --corn-focus: #4f46e5;\n --corn-brand-gradient: linear-gradient(135deg, #2563eb 0%, #4f46e5 50%, #dc2626 100%);\n --corn-ok: #046f51;\n --corn-warn: #854d0e;\n --corn-bad: #b91c1c;\n --corn-info: #03679e;\n --corn-added: #197c6f;\n --corn-changed: #8f6703;\n --corn-removed: #e20b0b;\n --corn-edit: #6839f6;\n --corn-hue-orange: #c2410c;\n --corn-hue-fuchsia: #a21caf;\n --corn-hue-pink: #be185d;\n --corn-hue-lime: #4c7b0f;\n --corn-hue-orange-text: #9a3412;\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 30%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 55%, transparent);\n --corn-glyph-mix: 45%;\n color-scheme: light;\n }\n}\n\n:where(:root[data-theme=\"light\"]) {\n --corn-ground: #f4f6fa;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.06) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.04) 0%, transparent 45%);\n --corn-surface-1: rgba(255, 255, 255, 0.8);\n --corn-surface-2: rgba(241, 245, 249, 0.92);\n --corn-surface-3: rgba(226, 232, 240, 0.95);\n --corn-line: rgba(15, 23, 42, 0.12);\n --corn-line-soft: rgba(15, 23, 42, 0.07);\n --corn-shadow: 0 8px 28px 0 rgba(15, 23, 42, 0.12);\n --corn-shadow-sm: 0 1px 3px rgba(15, 23, 42, 0.25);\n --corn-shadow-lg: 0 10px 30px -12px rgba(15, 23, 42, 0.18);\n --corn-shadow-color: rgba(15, 23, 42, 0.25);\n --corn-glow: 0px;\n --corn-scrim: rgba(15, 23, 42, 0.35);\n --corn-text: #0f172a;\n --corn-text-2: #334155;\n --corn-text-3: #475569;\n --corn-accent-text: #4f46e5;\n --corn-focus: #4f46e5;\n --corn-brand-gradient: linear-gradient(135deg, #2563eb 0%, #4f46e5 50%, #dc2626 100%);\n --corn-ok: #046f51;\n --corn-warn: #854d0e;\n --corn-bad: #b91c1c;\n --corn-info: #03679e;\n --corn-added: #197c6f;\n --corn-changed: #8f6703;\n --corn-removed: #e20b0b;\n --corn-edit: #6839f6;\n --corn-hue-orange: #c2410c;\n --corn-hue-fuchsia: #a21caf;\n --corn-hue-pink: #be185d;\n --corn-hue-lime: #4c7b0f;\n --corn-hue-orange-text: #9a3412;\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 30%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 55%, transparent);\n --corn-glyph-mix: 45%;\n color-scheme: light;\n}\n\n@media (max-width: 767px) {\n :where(:root) {\n --corn-control-height: 44px;\n }\n}\n\n@media (max-width: 639px) {\n :where(:root) {\n --corn-panel-pad: var(--corn-space-5);\n }\n}\n\n:where(:root) {\n --hx-bg: var(--corn-ground);\n --hx-text: var(--corn-text);\n --hx-ink: var(--corn-text);\n --hx-text-1: var(--corn-text);\n --hx-text-2: var(--corn-text-2);\n --hx-slate-300: var(--corn-text-2);\n --hx-slate-400: var(--corn-text-3);\n --hx-slate-500: var(--corn-text-3);\n --hx-slate-600: var(--corn-text-3);\n --hx-slate-700: var(--corn-surface-3);\n --hx-slate-800: var(--corn-surface-2);\n --hx-slate-900: var(--corn-ground);\n --hx-slate-950: var(--corn-ground);\n --hx-indigo: var(--corn-accent-text);\n --hx-indigo-strong: var(--corn-accent);\n --hx-emerald: var(--corn-ok);\n --hx-amber: var(--corn-warn);\n --hx-sky: var(--corn-info);\n --hx-pink: var(--corn-hue-pink);\n --hx-fuchsia: var(--corn-hue-fuchsia);\n --hx-fuchsia-strong: var(--corn-hue-fuchsia);\n --hx-red: var(--corn-bad);\n --hx-code: var(--corn-warn);\n --hx-orange-text: var(--corn-hue-orange);\n --hx-orange-strong: var(--corn-hue-orange);\n --hx-teal-text: var(--corn-added-text);\n --hx-teal-strong: var(--corn-added-text);\n --hx-violet-text: var(--corn-edit-text);\n --hx-green-text: var(--corn-ok);\n --hx-lime-text: var(--corn-hue-lime);\n --hx-mark-added: var(--corn-added);\n --hx-mark-changed: var(--corn-changed);\n --hx-mark-removed: var(--corn-removed);\n --hx-mark-edit: var(--corn-edit);\n --hx-control: var(--corn-surface-2);\n --hx-control-hover: var(--corn-surface-3);\n --hx-control-off: color-mix(in srgb, var(--corn-ground) 40%, transparent);\n --hx-well: color-mix(in srgb, var(--corn-ground) 80%, transparent);\n --hx-well-soft: color-mix(in srgb, var(--corn-ground) 55%, transparent);\n --hx-line: var(--corn-line);\n --hx-line-soft: var(--corn-line-soft);\n --hx-scroll: color-mix(in srgb, var(--corn-text) 18%, transparent);\n --hx-scroll-hover: color-mix(in srgb, var(--corn-text) 28%, transparent);\n --hx-swatch-solid: color-mix(in srgb, var(--corn-text) 55%, transparent);\n --hx-backdrop: var(--corn-scrim);\n --hx-glyph-mix: var(--corn-glyph-mix);\n --surface-glass: var(--corn-surface-1);\n --surface-glass-header: color-mix(in srgb, var(--corn-ground) 88%, transparent);\n --border-glass: var(--corn-line);\n --border-subtle: var(--corn-line-soft);\n --glass-blur: blur(var(--corn-blur));\n --glass-shadow: var(--corn-shadow);\n --gradient-primary: var(--corn-brand-gradient);\n --bg-gradient: var(--corn-ground-image), var(--corn-ground);\n --pop-font-body: var(--corn-font);\n --pop-font-mono: var(--corn-mono);\n}\n\n/* theme=\"light\" on an element: this mode's tokens, on the element itself */\n:where(corn-map[theme=\"light\"]),\n:where(corn-review[theme=\"light\"]),\n:where(corn-scope[theme=\"light\"]) {\n --corn-ground: #f4f6fa;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.06) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.04) 0%, transparent 45%);\n --corn-surface-1: rgba(255, 255, 255, 0.8);\n --corn-surface-2: rgba(241, 245, 249, 0.92);\n --corn-surface-3: rgba(226, 232, 240, 0.95);\n --corn-line: rgba(15, 23, 42, 0.12);\n --corn-line-soft: rgba(15, 23, 42, 0.07);\n --corn-shadow: 0 8px 28px 0 rgba(15, 23, 42, 0.12);\n --corn-shadow-sm: 0 1px 3px rgba(15, 23, 42, 0.25);\n --corn-shadow-lg: 0 10px 30px -12px rgba(15, 23, 42, 0.18);\n --corn-shadow-color: rgba(15, 23, 42, 0.25);\n --corn-glow: 0px;\n --corn-scrim: rgba(15, 23, 42, 0.35);\n --corn-text: #0f172a;\n --corn-text-2: #334155;\n --corn-text-3: #475569;\n --corn-accent-text: #4f46e5;\n --corn-focus: #4f46e5;\n --corn-brand-gradient: linear-gradient(135deg, #2563eb 0%, #4f46e5 50%, #dc2626 100%);\n --corn-ok: #046f51;\n --corn-warn: #854d0e;\n --corn-bad: #b91c1c;\n --corn-info: #03679e;\n --corn-added: #197c6f;\n --corn-changed: #8f6703;\n --corn-removed: #e20b0b;\n --corn-edit: #6839f6;\n --corn-hue-orange: #c2410c;\n --corn-hue-fuchsia: #a21caf;\n --corn-hue-pink: #be185d;\n --corn-hue-lime: #4c7b0f;\n --corn-hue-orange-text: #9a3412;\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 30%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 55%, transparent);\n --corn-glyph-mix: 45%;\n color-scheme: light;\n --corn-shadow-sheet: 0 -8px 24px color-mix(in srgb, var(--corn-shadow-color) 70%, transparent);\n --corn-accent-soft: color-mix(in srgb, var(--corn-accent-hover) 20%, transparent);\n --corn-ok-soft: color-mix(in srgb, var(--corn-ok) 15%, transparent);\n --corn-run-requested: var(--corn-text-3);\n --corn-run-claimed: var(--corn-info);\n --corn-run-working: var(--corn-info);\n --corn-run-waiting: var(--corn-warn);\n --corn-run-waiting-ink: var(--corn-ground);\n --corn-run-done: var(--corn-ok);\n --corn-run-failed: var(--corn-bad);\n --corn-run-stopped: var(--corn-text-2);\n --corn-added-text: color-mix(in srgb, var(--corn-added) 60%, var(--corn-text));\n --corn-edit-text: color-mix(in srgb, var(--corn-edit) 60%, var(--corn-text));\n --corn-hue-orange-soft: color-mix(in srgb, var(--corn-hue-orange) 12%, transparent);\n --corn-font-display: var(--corn-font);\n --corn-font-num: var(--corn-font);\n --corn-space-1: var(--corn-space);\n --corn-panel-pad: calc(var(--corn-space-5) + var(--corn-space-1));\n --corn-panel-head-height: calc(var(--corn-control-height) + var(--corn-space-3));\n --corn-map-collision: var(--corn-warn);\n --hx-bg: var(--corn-ground);\n --hx-text: var(--corn-text);\n --hx-ink: var(--corn-text);\n --hx-text-1: var(--corn-text);\n --hx-text-2: var(--corn-text-2);\n --hx-slate-300: var(--corn-text-2);\n --hx-slate-400: var(--corn-text-3);\n --hx-slate-500: var(--corn-text-3);\n --hx-slate-600: var(--corn-text-3);\n --hx-slate-700: var(--corn-surface-3);\n --hx-slate-800: var(--corn-surface-2);\n --hx-slate-900: var(--corn-ground);\n --hx-slate-950: var(--corn-ground);\n --hx-indigo: var(--corn-accent-text);\n --hx-indigo-strong: var(--corn-accent);\n --hx-emerald: var(--corn-ok);\n --hx-amber: var(--corn-warn);\n --hx-sky: var(--corn-info);\n --hx-pink: var(--corn-hue-pink);\n --hx-fuchsia: var(--corn-hue-fuchsia);\n --hx-fuchsia-strong: var(--corn-hue-fuchsia);\n --hx-red: var(--corn-bad);\n --hx-code: var(--corn-warn);\n --hx-orange-text: var(--corn-hue-orange);\n --hx-orange-strong: var(--corn-hue-orange);\n --hx-teal-text: var(--corn-added-text);\n --hx-teal-strong: var(--corn-added-text);\n --hx-violet-text: var(--corn-edit-text);\n --hx-green-text: var(--corn-ok);\n --hx-lime-text: var(--corn-hue-lime);\n --hx-mark-added: var(--corn-added);\n --hx-mark-changed: var(--corn-changed);\n --hx-mark-removed: var(--corn-removed);\n --hx-mark-edit: var(--corn-edit);\n --hx-control: var(--corn-surface-2);\n --hx-control-hover: var(--corn-surface-3);\n --hx-control-off: color-mix(in srgb, var(--corn-ground) 40%, transparent);\n --hx-well: color-mix(in srgb, var(--corn-ground) 80%, transparent);\n --hx-well-soft: color-mix(in srgb, var(--corn-ground) 55%, transparent);\n --hx-line: var(--corn-line);\n --hx-line-soft: var(--corn-line-soft);\n --hx-scroll: color-mix(in srgb, var(--corn-text) 18%, transparent);\n --hx-scroll-hover: color-mix(in srgb, var(--corn-text) 28%, transparent);\n --hx-swatch-solid: color-mix(in srgb, var(--corn-text) 55%, transparent);\n --hx-backdrop: var(--corn-scrim);\n --hx-glyph-mix: var(--corn-glyph-mix);\n --surface-glass: var(--corn-surface-1);\n --surface-glass-header: color-mix(in srgb, var(--corn-ground) 88%, transparent);\n --border-glass: var(--corn-line);\n --border-subtle: var(--corn-line-soft);\n --glass-blur: blur(var(--corn-blur));\n --glass-shadow: var(--corn-shadow);\n --gradient-primary: var(--corn-brand-gradient);\n --bg-gradient: var(--corn-ground-image), var(--corn-ground);\n --pop-font-body: var(--corn-font);\n --pop-font-mono: var(--corn-mono);\n}\n\n/* theme=\"dark\" on an element: this mode's tokens, on the element itself */\n:where(corn-map[theme=\"dark\"]),\n:where(corn-review[theme=\"dark\"]),\n:where(corn-scope[theme=\"dark\"]) {\n --corn-ground: #090d16;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.2) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.16) 0%, transparent 45%),\n radial-gradient(circle at 50% 50%, rgba(66, 153, 225, 0.10) 0%, transparent 60%);\n --corn-surface-1: rgba(26, 34, 52, 0.72);\n --corn-surface-2: rgba(30, 41, 59, 0.8);\n --corn-surface-3: rgba(51, 65, 85, 0.8);\n --corn-line: rgba(255, 255, 255, 0.12);\n --corn-line-soft: rgba(255, 255, 255, 0.07);\n --corn-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.45);\n --corn-shadow-sm: 0 2px 6px rgba(0, 0, 0, 0.4);\n --corn-shadow-lg: 0 25px 50px -12px rgba(0, 0, 0, 0.5);\n --corn-shadow-color: rgba(0, 0, 0, 0.5);\n --corn-glow: 8px;\n --corn-scrim: rgba(0, 0, 0, 0.6);\n --corn-text: #f8fafc;\n --corn-text-2: #cbd5e1;\n --corn-text-3: #9aa9bc;\n --corn-accent-text: #98a1fa;\n --corn-focus: #818cf8;\n --corn-brand-gradient: linear-gradient(135deg, #4299e1 0%, #818cf8 50%, #e53e3e 100%);\n --corn-ok: #34d399;\n --corn-warn: #fcd34d;\n --corn-bad: #fca5a5;\n --corn-info: #7dd3fc;\n --corn-added: #2dd4bf;\n --corn-changed: #fbbf24;\n --corn-removed: #fa9292;\n --corn-edit: #b49cfb;\n --corn-hue-orange: #fb923c;\n --corn-hue-fuchsia: #e879f9;\n --corn-hue-pink: #f472b6;\n --corn-hue-lime: #a3e635;\n --corn-hue-orange-text: var(--corn-hue-orange);\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 18%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 45%, transparent);\n --corn-glyph-mix: 100%;\n color-scheme: dark;\n --corn-shadow-sheet: 0 -8px 24px color-mix(in srgb, var(--corn-shadow-color) 70%, transparent);\n --corn-accent-soft: color-mix(in srgb, var(--corn-accent-hover) 20%, transparent);\n --corn-ok-soft: color-mix(in srgb, var(--corn-ok) 15%, transparent);\n --corn-run-requested: var(--corn-text-3);\n --corn-run-claimed: var(--corn-info);\n --corn-run-working: var(--corn-info);\n --corn-run-waiting: var(--corn-warn);\n --corn-run-waiting-ink: var(--corn-ground);\n --corn-run-done: var(--corn-ok);\n --corn-run-failed: var(--corn-bad);\n --corn-run-stopped: var(--corn-text-2);\n --corn-added-text: color-mix(in srgb, var(--corn-added) 60%, var(--corn-text));\n --corn-edit-text: color-mix(in srgb, var(--corn-edit) 60%, var(--corn-text));\n --corn-hue-orange-soft: color-mix(in srgb, var(--corn-hue-orange) 12%, transparent);\n --corn-font-display: var(--corn-font);\n --corn-font-num: var(--corn-font);\n --corn-space-1: var(--corn-space);\n --corn-panel-pad: calc(var(--corn-space-5) + var(--corn-space-1));\n --corn-panel-head-height: calc(var(--corn-control-height) + var(--corn-space-3));\n --corn-map-collision: var(--corn-warn);\n --hx-bg: var(--corn-ground);\n --hx-text: var(--corn-text);\n --hx-ink: var(--corn-text);\n --hx-text-1: var(--corn-text);\n --hx-text-2: var(--corn-text-2);\n --hx-slate-300: var(--corn-text-2);\n --hx-slate-400: var(--corn-text-3);\n --hx-slate-500: var(--corn-text-3);\n --hx-slate-600: var(--corn-text-3);\n --hx-slate-700: var(--corn-surface-3);\n --hx-slate-800: var(--corn-surface-2);\n --hx-slate-900: var(--corn-ground);\n --hx-slate-950: var(--corn-ground);\n --hx-indigo: var(--corn-accent-text);\n --hx-indigo-strong: var(--corn-accent);\n --hx-emerald: var(--corn-ok);\n --hx-amber: var(--corn-warn);\n --hx-sky: var(--corn-info);\n --hx-pink: var(--corn-hue-pink);\n --hx-fuchsia: var(--corn-hue-fuchsia);\n --hx-fuchsia-strong: var(--corn-hue-fuchsia);\n --hx-red: var(--corn-bad);\n --hx-code: var(--corn-warn);\n --hx-orange-text: var(--corn-hue-orange);\n --hx-orange-strong: var(--corn-hue-orange);\n --hx-teal-text: var(--corn-added-text);\n --hx-teal-strong: var(--corn-added-text);\n --hx-violet-text: var(--corn-edit-text);\n --hx-green-text: var(--corn-ok);\n --hx-lime-text: var(--corn-hue-lime);\n --hx-mark-added: var(--corn-added);\n --hx-mark-changed: var(--corn-changed);\n --hx-mark-removed: var(--corn-removed);\n --hx-mark-edit: var(--corn-edit);\n --hx-control: var(--corn-surface-2);\n --hx-control-hover: var(--corn-surface-3);\n --hx-control-off: color-mix(in srgb, var(--corn-ground) 40%, transparent);\n --hx-well: color-mix(in srgb, var(--corn-ground) 80%, transparent);\n --hx-well-soft: color-mix(in srgb, var(--corn-ground) 55%, transparent);\n --hx-line: var(--corn-line);\n --hx-line-soft: var(--corn-line-soft);\n --hx-scroll: color-mix(in srgb, var(--corn-text) 18%, transparent);\n --hx-scroll-hover: color-mix(in srgb, var(--corn-text) 28%, transparent);\n --hx-swatch-solid: color-mix(in srgb, var(--corn-text) 55%, transparent);\n --hx-backdrop: var(--corn-scrim);\n --hx-glyph-mix: var(--corn-glyph-mix);\n --surface-glass: var(--corn-surface-1);\n --surface-glass-header: color-mix(in srgb, var(--corn-ground) 88%, transparent);\n --border-glass: var(--corn-line);\n --border-subtle: var(--corn-line-soft);\n --glass-blur: blur(var(--corn-blur));\n --glass-shadow: var(--corn-shadow);\n --gradient-primary: var(--corn-brand-gradient);\n --bg-gradient: var(--corn-ground-image), var(--corn-ground);\n --pop-font-body: var(--corn-font);\n --pop-font-mono: var(--corn-mono);\n}\n";
4056
+ export { Xr as $, ae as $t, Q as A, L as At, ta as B, at as Bt, ao as C, Tn as Ct, Qa as D, Mn as Dt, oo as E, En as Et, Ni as F, vt as Ft, jr as G, oe as Gt, kr as H, fe as Ht, Ii as I, xt as It, Sr as J, ne as Jt, wr as K, E as Kt, Qi as L, He as Lt, Oa as M, I as Mt, Ma as N, _t as Nt, za as O, sn as Ot, Aa as P, Mt as Pt, vi as Q, y as Qt, ia as R, pt as Rt, ro as S, jn as St, io as T, An as Tt, Tr as U, A as Ut, ua as V, ge as Vt, Ir as W, ce as Wt, G as X, O as Xt, Hr as Y, x as Yt, _i as Z, _ as Zt, ho as _, Xn as _t, Ko as a, m as an, Zr as at, lo as b, Sn as bt, Ro as c, d as cn, hr as ct, No as d, dr as dt, te as en, si as et, jo as f, pr as ft, ko as g, sr as gt, Oo as h, cr as ht, Wo as i, a as in, Rr as it, pa as j, jt, La as k, hn as kt, Mo as l, n as ln, ir as lt, To as m, lr as mt, Uo as n, k as nn, oi as nt, Go as o, g as on, mr as ot, $ as p, fr as pt, Cr as q, T as qt, Ho as r, o as rn, q as rt, Vo as s, p as sn, vr as st, qo as t, ee as tn, Kr as tt, Po as u, W as ut, mo as v, vn as vt, to as w, Dn as wt, eo as x, Ln as xt, fo as y, Cn as yt, fa as z, mt as zt };