@popcorn245/cornfield-components 0.50.0 → 0.51.0

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