@popcorn245/cornfield-components 0.52.0 → 0.53.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.
Files changed (44) hide show
  1. package/README.md +1 -1
  2. package/dist/chunks/around-BcnegEdS.js +99 -0
  3. package/dist/chunks/connection-KDiWvV19.js +23 -0
  4. package/dist/chunks/{engine-HIgX35hE.js → engine-xmHJvQY9.js} +1360 -1343
  5. package/dist/chunks/{layers-n1mJVJs8.js → layers-ho10a2y7.js} +68 -68
  6. package/dist/chunks/{map-CeP9M2_w.js → map-DbfPgQRe.js} +736 -705
  7. package/dist/chunks/node-panel-CC8UrSzJ.js +410 -0
  8. package/dist/chunks/panel-review-ih7RlfkH.js +884 -0
  9. package/dist/chunks/review-pieces-DtRxCDMr.js +2523 -0
  10. package/dist/chunks/{review-source-DWisOXyR.js → review-source-CmbwaPCM.js} +1 -1
  11. package/dist/chunks/scope-2m2VmJXn.js +185 -0
  12. package/dist/chunks/scope-proposal-T06ndbin.js +116 -0
  13. package/dist/chunks/sheets-BWANwtZP.js +209 -0
  14. package/dist/chunks/source-address-DXanAREm.js +57 -0
  15. package/dist/chunks/{status-CsFpnQxw.js → status-DM-iIEsg.js} +57 -56
  16. package/dist/corn-changes.js +43 -0
  17. package/dist/corn-decision.js +52 -0
  18. package/dist/corn-layers.js +275 -1
  19. package/dist/corn-map.js +125 -1
  20. package/dist/corn-node-panel.js +42 -1
  21. package/dist/corn-proposal.js +50 -0
  22. package/dist/corn-review.js +425 -1
  23. package/dist/corn-scope.js +33 -9
  24. package/dist/corn-search.js +484 -1
  25. package/dist/index.js +11 -8
  26. package/dist/manifest.json +95 -70
  27. package/dist/tokens.css +6 -0
  28. package/dist/types/components.d.ts +111 -5
  29. package/dist/types/corn-changes.d.ts +2 -0
  30. package/dist/types/corn-decision.d.ts +2 -0
  31. package/dist/types/corn-proposal.d.ts +2 -0
  32. package/dist/types/index.d.ts +3 -0
  33. package/dist/version.json +1 -1
  34. package/package.json +17 -5
  35. package/dist/chunks/around-D7aqHejs.js +0 -78
  36. package/dist/chunks/corn-layers-g9AprK6G.js +0 -275
  37. package/dist/chunks/corn-map-DE-pg-A0.js +0 -125
  38. package/dist/chunks/corn-node-panel-CdtFb9IZ.js +0 -42
  39. package/dist/chunks/corn-review-9krtLSPK.js +0 -2900
  40. package/dist/chunks/corn-search-BY1Po63S.js +0 -484
  41. package/dist/chunks/node-panel-CY5xnuKC.js +0 -1291
  42. package/dist/chunks/scope-CUhp8mkf.js +0 -137
  43. package/dist/chunks/sheets-TFCL_dIn.js +0 -204
  44. package/dist/chunks/source-address-C70zNPIj.js +0 -79
@@ -398,7 +398,8 @@ var r = Object.freeze({
398
398
  nodePanelEmpty: "Select a node on the map to see its details",
399
399
  needsScope: "This needs a corn-scope around it, with a corn-map in it",
400
400
  needsMap: "This needs a corn-map in the same corn-scope",
401
- waitingForMap: "Waiting for the map"
401
+ waitingForMap: "Waiting for the map",
402
+ secondSection: "This scope already has one of these"
402
403
  }), i = (e) => typeof e == "string" && Object.hasOwn(r, e), a = /* @__PURE__ */ RegExp("[\\u0000-\\u001f\\u007f-\\u009f\\u2028\\u2029]");
403
404
  function o(e) {
404
405
  return typeof e == "string" ? e.trim() ? a.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";
@@ -739,16 +740,16 @@ function Se(e) {
739
740
  }, r = t.canvas, i = (e) => !!e && !e.hidden && e.isConnected;
740
741
  if (ye(e)) n.bottom = xe(e) + 8;
741
742
  else if (r && typeof r.getBoundingClientRect == "function") {
742
- let t = r.getBoundingClientRect(), a = e.el("proposal-bar");
743
- i(a) && (n.top = Math.max(0, a.getBoundingClientRect().bottom - t.top) + 8);
743
+ let t = r.getBoundingClientRect(), a = e.ask("proposal:covers");
744
+ a && (n.top = Math.max(0, a.bottom - t.top) + 8);
744
745
  let o = e.ask("panel:covers");
745
746
  o && o.right && (n.right = o.right);
746
747
  let s = e.el("forge-panel");
747
748
  i(s) && s.classList.contains("forge-open") && (n.left = s.offsetWidth);
748
- let c = e.el("review-column");
749
- i(c) && (n.left = Math.max(n.left, Math.max(0, c.getBoundingClientRect().right - t.left) + 8));
750
- let l = e.root ? e.root.querySelector(".hx-player") : null;
751
- i(l) && (n.bottom = Math.max(0, t.bottom - l.getBoundingClientRect().top) + 8);
749
+ let c = e.ask("changes:covers");
750
+ c && (n.left = Math.max(n.left, Math.max(0, c.right - t.left) + 8));
751
+ let l = e.ask("player:covers");
752
+ l && (n.bottom = Math.max(0, t.bottom - l.top) + 8);
752
753
  }
753
754
  return O(t.width || 0, t.height || 0, n);
754
755
  }
@@ -1403,7 +1404,8 @@ var Tt = "corn-scope-request", Et = "corn-scope-changed", Dt = (e) => e.slot("sc
1403
1404
  serverTheme: null,
1404
1405
  host: null,
1405
1406
  source: null,
1406
- mountStatus: null
1407
+ mountStatus: null,
1408
+ signIn: () => ""
1407
1409
  })), Ot = (e) => {
1408
1410
  let t = Dt(e);
1409
1411
  return t.host ? t : null;
@@ -1431,116 +1433,69 @@ function kt(e, t) {
1431
1433
  }
1432
1434
  };
1433
1435
  }
1434
- // ../explorer/cloud-model.js
1435
- var M = {
1436
- run: {
1437
- title: "Breaks now",
1438
- legend: "No tick: breaks as soon as it is down",
1439
- ticks: 0,
1440
- color: "#f87171"
1441
- },
1442
- deploy: {
1443
- title: "Breaks at the next deploy",
1444
- legend: "One tick: breaks at the next deploy, rebuild or first run",
1445
- ticks: 1,
1446
- color: "#fbbf24"
1447
- },
1448
- renew: {
1449
- title: "Breaks at the next certificate renewal",
1450
- legend: "Two ticks: breaks at the next certificate renewal",
1451
- ticks: 2,
1452
- color: "#a78bfa"
1453
- }
1454
- }, At = (e) => e && Object.hasOwn(M, e.when) ? e.when : "run", jt = (e) => e && e.kind === "calls" ? M[At(e)].ticks : 0, Mt = (e) => e && e.kind === "web" ? "web" : "cloud", Nt = {
1455
- outbox: {
1456
- color: "#f59e0b",
1457
- label: "Outbox → API (writes)"
1458
- },
1459
- changes: {
1460
- color: "#22d3ee",
1461
- label: "Change stream (reads back)"
1462
- },
1463
- trigger: {
1464
- color: "#a3e635",
1465
- label: "Trigger → audit_log (seq)"
1466
- },
1467
- sync: {
1468
- color: "#fb7185",
1469
- label: "Background sync (external)"
1470
- },
1471
- model: {
1472
- color: "#c084fc",
1473
- label: "Model classes feed a tier"
1474
- },
1475
- rom: {
1476
- color: "#f0abfc",
1477
- label: "ROM: change → re-bake → serve"
1478
- },
1479
- read: {
1480
- color: "#93c5fd",
1481
- label: "Server reads rows over HTTP"
1482
- },
1483
- api: {
1484
- color: "#38bdf8",
1485
- label: "App calls the API (derived from its code)"
1486
- },
1487
- build: {
1488
- color: "#d6d3d1",
1489
- label: "Build script writes files"
1490
- },
1491
- reads: {
1492
- color: "#fde047",
1493
- label: "Table → page (render reads)"
1494
- },
1495
- writes: {
1496
- color: "#f87171",
1497
- label: "Page → table (form / action)"
1498
- },
1499
- uses: {
1500
- color: "#f472b6",
1501
- label: "Stylesheet uses design tokens"
1502
- },
1503
- extends: {
1504
- color: "#5eead4",
1505
- label: "Component extends a base class"
1506
- },
1507
- calls: {
1508
- color: "#fb7185",
1509
- label: "Calls (service → service, outside system)"
1510
- },
1511
- triggers: {
1512
- color: "#a3e635",
1513
- label: "Triggers (cron, webhook, store change)"
1514
- },
1515
- delivers: {
1516
- color: "#94a3b8",
1517
- label: "Outside system → webhook endpoint"
1518
- },
1519
- "runs-on": {
1520
- color: "#a8a29e",
1521
- label: "App → the stack that serves its domain"
1522
- }
1523
- }, Pt = (e) => Nt[e.kind === "flow" ? e.flow : e.kind] || Nt.sync, N = (e) => e.mark === "edit" ? e.editOp || "none" : e.mark || "none", Ft = (e) => !!e && !!e.mark && e.mark !== "none";
1436
+ // ../explorer/review-model.js
1437
+ var At = 6e4, jt = 60 * At, Mt = 24 * jt, Nt = (e, t) => `${e} ${t}${e === 1 ? "" : "s"}`;
1438
+ function Pt(e, t) {
1439
+ let n = typeof e == "string" ? Date.parse(e) : NaN;
1440
+ if (!Number.isFinite(n) || !Number.isFinite(t)) return "";
1441
+ let r = t - n;
1442
+ return r < At ? "just now" : r < jt ? `${Nt(Math.floor(r / At), "minute")} ago` : r < Mt ? `${Nt(Math.floor(r / jt), "hour")} ago` : `${Nt(Math.floor(r / Mt), "day")} ago`;
1443
+ }
1444
+ var Ft = {
1445
+ approved: "Approved",
1446
+ notes: "Sent back"
1447
+ };
1524
1448
  function It(e, t) {
1525
- return e === "before" ? N(t) !== "added" : e !== "after" || N(t) !== "removed";
1449
+ let { verdict: n, when: r } = Lt(e, t);
1450
+ return r ? `${n} ${r}` : n;
1526
1451
  }
1527
1452
  function Lt(e, t) {
1528
- return It(e, t);
1453
+ return !e || !Ft[e.verdict] ? {
1454
+ verdict: "",
1455
+ when: ""
1456
+ } : {
1457
+ verdict: Ft[e.verdict],
1458
+ when: Pt(e.at, t) || ""
1459
+ };
1460
+ }
1461
+ function Rt(e) {
1462
+ return typeof e == "string" && e.trim() ? null : "Say what should change before you send it back.";
1463
+ }
1464
+ function zt(e, t, n) {
1465
+ return {
1466
+ verdict: e,
1467
+ note: typeof t == "string" ? t.trim() : "",
1468
+ edits: structuredClone(Array.isArray(n) ? n : [])
1469
+ };
1470
+ }
1471
+ var Bt = (e) => typeof e == "string" && /^pull\/[1-9]\d{0,8}$/.test(e);
1472
+ function Vt(e, t) {
1473
+ if (!t) return "";
1474
+ let n = Nt(t, "edit");
1475
+ return e === "approved" ? `Your ${n} ${t === 1 ? "is" : "are"} in the review comment on the PR. The drafting agent will fold ${t === 1 ? "it" : "them"} into the proposal.` : `Sent with your ${n}. The drafting agent will fold ${t === 1 ? "it" : "them"} into the next draft.`;
1476
+ }
1477
+ // ../explorer/proposal-marks.js
1478
+ var M = (e) => e.mark === "edit" ? e.editOp || "none" : e.mark || "none", Ht = (e) => !!e && !!e.mark && e.mark !== "none";
1479
+ function Ut(e, t) {
1480
+ return e === "before" ? M(t) !== "added" : e !== "after" || M(t) !== "removed";
1481
+ }
1482
+ function Wt(e, t) {
1483
+ return Ut(e, t);
1529
1484
  }
1530
- function Rt(e, t) {
1485
+ function Gt(e, t) {
1531
1486
  let n = t.mark || "none";
1532
1487
  return n === "edit" ? "edit" : e === "diff" ? n : "none";
1533
1488
  }
1534
- function zt(e) {
1489
+ function Kt(e) {
1535
1490
  if (e.mark !== "changed" || !e.before) return e;
1536
1491
  let t = { ...e };
1537
1492
  for (let [n, r] of Object.entries(e.before)) r === null ? delete t[n] : t[n] = r;
1538
1493
  return t;
1539
1494
  }
1540
- function Bt(e, t) {
1495
+ function qt(e, t) {
1541
1496
  let n = /* @__PURE__ */ new Set();
1542
- for (let t of e) Ft(t) && n.add(t.id);
1543
- for (let e of t) Ft(e) && (n.add(e.from), n.add(e.to));
1497
+ for (let t of e) Ht(t) && n.add(t.id);
1498
+ for (let e of t) Ht(e) && (n.add(e.from), n.add(e.to));
1544
1499
  let r = new Set(n);
1545
1500
  for (let e of t) {
1546
1501
  let t = !e.kind && !e.dashed;
@@ -1551,12 +1506,12 @@ function Bt(e, t) {
1551
1506
  near: r
1552
1507
  };
1553
1508
  }
1554
- var Vt = (e) => !e.kind && !e.dashed;
1555
- function Ht(e, t, { gap: n = 74 } = {}) {
1556
- let r = new Map(e.map((e) => [e.id, e])), i = e.filter((e) => N(e) !== "added"), a = e.filter((e) => N(e) === "added");
1509
+ var Jt = (e) => !e.kind && !e.dashed;
1510
+ function Yt(e, t, { gap: n = 74 } = {}) {
1511
+ let r = new Map(e.map((e) => [e.id, e])), i = e.filter((e) => M(e) !== "added"), a = e.filter((e) => M(e) === "added");
1557
1512
  if (!a.length) return;
1558
1513
  let o = new Set(i.map((e) => e.id)), s = (e) => {
1559
- let n = t.find((t) => Vt(t) && t.to === e.id && r.has(t.from));
1514
+ let n = t.find((t) => Jt(t) && t.to === e.id && r.has(t.from));
1560
1515
  if (n) return n.from;
1561
1516
  let i = t.find((t) => t.from === e.id && r.has(t.to) || t.to === e.id && r.has(t.from));
1562
1517
  return i ? i.from === e.id ? i.to : i.from : null;
@@ -1588,11 +1543,11 @@ function Ht(e, t, { gap: n = 74 } = {}) {
1588
1543
  }
1589
1544
  for (let e of u) l(e, 0, 0), i.push(e);
1590
1545
  }
1591
- function Ut(e) {
1592
- if (e) for (let t of e.tiers) t.nodes = [...t.nodes.filter((e) => N(e) !== "added"), ...t.nodes.filter((e) => N(e) === "added")];
1546
+ function Xt(e) {
1547
+ if (e) for (let t of e.tiers) t.nodes = [...t.nodes.filter((e) => M(e) !== "added"), ...t.nodes.filter((e) => M(e) === "added")];
1593
1548
  }
1594
- var Wt = 50;
1595
- function Gt(e, t) {
1549
+ var Zt = 50;
1550
+ function Qt(e, t) {
1596
1551
  let n = new Map(t.tiers.map((e) => [e.key, e]));
1597
1552
  if (e.tiers.some((e) => e.nodes.length && !n.get(e.key)?.nodes.length)) return !1;
1598
1553
  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]));
@@ -1606,7 +1561,7 @@ function Gt(e, t) {
1606
1561
  t.x = e.x, t.y = e.y, t.r = e.r;
1607
1562
  }
1608
1563
  if (!n.length) continue;
1609
- let o = r.get(t.key).rows, s = Math.max(...e.map((e) => e.x)), c = (e) => (e - (o - 1) / 2) * Wt, l = new Set(e.filter((e) => e.x === s).map((e) => Math.round(e.y))), u = 0;
1564
+ let o = r.get(t.key).rows, s = Math.max(...e.map((e) => e.x)), c = (e) => (e - (o - 1) / 2) * Zt, l = new Set(e.filter((e) => e.x === s).map((e) => Math.round(e.y))), u = 0;
1610
1565
  for (let e of n) {
1611
1566
  for (; l.has(Math.round(c(u)));) u++;
1612
1567
  e.x = s, e.y = c(u), l.add(Math.round(e.y)), a = Math.min(a, -(e.y + 40));
@@ -1614,440 +1569,636 @@ function Gt(e, t) {
1614
1569
  }
1615
1570
  return e.top = a, !0;
1616
1571
  }
1617
- var P = {
1618
- root: {
1619
- color: "#f59e0b",
1620
- r: 28
1621
- },
1622
- app: {
1623
- color: "#5168ec",
1624
- r: 24
1625
- },
1626
- page: {
1627
- color: "#38bdf8",
1628
- r: 18
1629
- },
1630
- pkg: {
1631
- color: "#0f8293",
1632
- r: 24
1633
- },
1634
- core: {
1635
- color: "#14b8a6",
1636
- r: 20
1637
- },
1638
- token: {
1639
- color: "#ef409b",
1640
- r: 20
1641
- },
1642
- atom: {
1643
- color: "#108d4e",
1644
- r: 19
1645
- },
1646
- molecule: {
1647
- color: "#a855f7",
1648
- r: 21
1649
- },
1650
- tool: {
1651
- color: "#f43f5e",
1652
- r: 19
1653
- },
1654
- store: {
1655
- color: "#fb923c",
1656
- r: 20
1657
- },
1658
- table: {
1659
- color: "#fde047",
1660
- r: 18
1661
- },
1662
- rom: {
1663
- color: "#c398c6",
1664
- r: 19
1665
- },
1666
- service: {
1667
- color: "#84cc16",
1668
- r: 20
1669
- },
1670
- external: {
1671
- color: "#94a3b8",
1672
- r: 21
1673
- },
1674
- stack: {
1675
- color: "#b49fa0",
1676
- r: 22
1677
- },
1678
- machine: {
1679
- color: "#78716c",
1680
- r: 26
1681
- },
1682
- container: {
1683
- color: "#d6d3d1",
1684
- r: 12
1685
- },
1686
- persona: {
1687
- color: "#fb7185",
1688
- r: 22
1689
- },
1690
- device: {
1691
- color: "#2dd4bf",
1692
- r: 14
1693
- },
1694
- floor: {
1695
- color: "#a3e635",
1696
- r: 20
1697
- },
1698
- room: {
1699
- color: "#f7ed81",
1700
- r: 16
1701
- }
1702
- }, Kt = Object.freeze({
1703
- root: "circle",
1704
- app: "circle",
1705
- page: "circle",
1706
- pkg: "circle",
1707
- core: "circle",
1708
- token: "circle",
1709
- atom: "circle",
1710
- molecule: "circle",
1711
- tool: "circle",
1712
- rom: "circle",
1713
- service: "circle",
1714
- store: "rounded-square",
1715
- table: "rounded-square",
1716
- external: "hexagon",
1717
- stack: "square",
1718
- machine: "square",
1719
- container: "square",
1720
- device: "square",
1721
- floor: "square",
1722
- room: "square",
1723
- persona: "diamond"
1724
- }), qt = Object.freeze([
1725
- "circle",
1726
- "rounded-square",
1727
- "hexagon",
1728
- "square",
1729
- "diamond"
1730
- ]), Jt = (e) => typeof e == "string" && Object.hasOwn(Kt, e) ? Kt[e] : "circle", Yt = [
1731
- "outbox",
1732
- "changes",
1733
- "trigger",
1734
- "sync",
1735
- "model",
1736
- "rom",
1737
- "read",
1738
- "build",
1739
- "api"
1740
- ], Xt = ["reads", "writes"], Zt = [
1741
- "calls",
1742
- "triggers",
1743
- "delivers"
1744
- ], Qt = ["runs-on"], $t = [
1745
- "flow",
1746
- ...Xt,
1747
- "uses",
1748
- "extends",
1749
- ...Zt,
1750
- ...Qt
1751
- ], en = [
1752
- "camera",
1753
- "phone",
1754
- "nfc-tag",
1755
- "home-assistant"
1756
- ], tn = ["floor", "room"], nn = "live-", rn = (e) => `persona-${e}`;
1757
- function an(e) {
1758
- if (typeof e != "string" || !e.startsWith("live-")) return null;
1759
- let t = e.slice(5);
1760
- for (let e of tn) if (t.startsWith(`${e}-`) && t.length > e.length + 1) return {
1761
- type: e,
1762
- id: t.slice(e.length + 1)
1763
- };
1764
- if (!t.startsWith("device-")) return null;
1765
- let n = t.slice(7), r = en.find((e) => n.startsWith(`${e}-`) && n.length > e.length + 1);
1766
- return r ? {
1767
- type: "device",
1768
- kind: r,
1769
- id: n.slice(r.length + 1)
1770
- } : null;
1771
- }
1772
- function on(e) {
1773
- return e ? typeof e.id == "string" && e.id.startsWith("live-") ? !0 : tn.includes(e.type) || e.type === "device" && !e.file : !1;
1774
- }
1775
- var sn = ["cloud", "web"], cn = [
1776
- "run",
1777
- "deploy",
1778
- "renew"
1779
- ], ln = ["browser"];
1780
- function un(e, t, n) {
1781
- let r = [], i = n?.type === "external" && (n.kind === void 0 || n.kind === "cloud");
1782
- return e.when !== void 0 && (cn.includes(e.when) || r.push(`has when "${e.when}". Valid values: ${cn.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 && (ln.includes(e.side) || r.push(`has side "${e.side}". Valid values: ${ln.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;
1572
+ // ../core/color.js
1573
+ var $t = Object.freeze({
1574
+ aliceblue: "#f0f8ff",
1575
+ antiquewhite: "#faebd7",
1576
+ aqua: "#00ffff",
1577
+ aquamarine: "#7fffd4",
1578
+ azure: "#f0ffff",
1579
+ beige: "#f5f5dc",
1580
+ bisque: "#ffe4c4",
1581
+ black: "#000000",
1582
+ blanchedalmond: "#ffebcd",
1583
+ blue: "#0000ff",
1584
+ blueviolet: "#8a2be2",
1585
+ brown: "#a52a2a",
1586
+ burlywood: "#deb887",
1587
+ cadetblue: "#5f9ea0",
1588
+ chartreuse: "#7fff00",
1589
+ chocolate: "#d2691e",
1590
+ coral: "#ff7f50",
1591
+ cornflowerblue: "#6495ed",
1592
+ cornsilk: "#fff8dc",
1593
+ crimson: "#dc143c",
1594
+ cyan: "#00ffff",
1595
+ darkblue: "#00008b",
1596
+ darkcyan: "#008b8b",
1597
+ darkgoldenrod: "#b8860b",
1598
+ darkgray: "#a9a9a9",
1599
+ darkgreen: "#006400",
1600
+ darkgrey: "#a9a9a9",
1601
+ darkkhaki: "#bdb76b",
1602
+ darkmagenta: "#8b008b",
1603
+ darkolivegreen: "#556b2f",
1604
+ darkorange: "#ff8c00",
1605
+ darkorchid: "#9932cc",
1606
+ darkred: "#8b0000",
1607
+ darksalmon: "#e9967a",
1608
+ darkseagreen: "#8fbc8f",
1609
+ darkslateblue: "#483d8b",
1610
+ darkslategray: "#2f4f4f",
1611
+ darkslategrey: "#2f4f4f",
1612
+ darkturquoise: "#00ced1",
1613
+ darkviolet: "#9400d3",
1614
+ deeppink: "#ff1493",
1615
+ deepskyblue: "#00bfff",
1616
+ dimgray: "#696969",
1617
+ dimgrey: "#696969",
1618
+ dodgerblue: "#1e90ff",
1619
+ firebrick: "#b22222",
1620
+ floralwhite: "#fffaf0",
1621
+ forestgreen: "#228b22",
1622
+ fuchsia: "#ff00ff",
1623
+ gainsboro: "#dcdcdc",
1624
+ ghostwhite: "#f8f8ff",
1625
+ gold: "#ffd700",
1626
+ goldenrod: "#daa520",
1627
+ gray: "#808080",
1628
+ green: "#008000",
1629
+ greenyellow: "#adff2f",
1630
+ grey: "#808080",
1631
+ honeydew: "#f0fff0",
1632
+ hotpink: "#ff69b4",
1633
+ indianred: "#cd5c5c",
1634
+ indigo: "#4b0082",
1635
+ ivory: "#fffff0",
1636
+ khaki: "#f0e68c",
1637
+ lavender: "#e6e6fa",
1638
+ lavenderblush: "#fff0f5",
1639
+ lawngreen: "#7cfc00",
1640
+ lemonchiffon: "#fffacd",
1641
+ lightblue: "#add8e6",
1642
+ lightcoral: "#f08080",
1643
+ lightcyan: "#e0ffff",
1644
+ lightgoldenrodyellow: "#fafad2",
1645
+ lightgray: "#d3d3d3",
1646
+ lightgreen: "#90ee90",
1647
+ lightgrey: "#d3d3d3",
1648
+ lightpink: "#ffb6c1",
1649
+ lightsalmon: "#ffa07a",
1650
+ lightseagreen: "#20b2aa",
1651
+ lightskyblue: "#87cefa",
1652
+ lightslategray: "#778899",
1653
+ lightslategrey: "#778899",
1654
+ lightsteelblue: "#b0c4de",
1655
+ lightyellow: "#ffffe0",
1656
+ lime: "#00ff00",
1657
+ limegreen: "#32cd32",
1658
+ linen: "#faf0e6",
1659
+ magenta: "#ff00ff",
1660
+ maroon: "#800000",
1661
+ mediumaquamarine: "#66cdaa",
1662
+ mediumblue: "#0000cd",
1663
+ mediumorchid: "#ba55d3",
1664
+ mediumpurple: "#9370db",
1665
+ mediumseagreen: "#3cb371",
1666
+ mediumslateblue: "#7b68ee",
1667
+ mediumspringgreen: "#00fa9a",
1668
+ mediumturquoise: "#48d1cc",
1669
+ mediumvioletred: "#c71585",
1670
+ midnightblue: "#191970",
1671
+ mintcream: "#f5fffa",
1672
+ mistyrose: "#ffe4e1",
1673
+ moccasin: "#ffe4b5",
1674
+ navajowhite: "#ffdead",
1675
+ navy: "#000080",
1676
+ oldlace: "#fdf5e6",
1677
+ olive: "#808000",
1678
+ olivedrab: "#6b8e23",
1679
+ orange: "#ffa500",
1680
+ orangered: "#ff4500",
1681
+ orchid: "#da70d6",
1682
+ palegoldenrod: "#eee8aa",
1683
+ palegreen: "#98fb98",
1684
+ paleturquoise: "#afeeee",
1685
+ palevioletred: "#db7093",
1686
+ papayawhip: "#ffefd5",
1687
+ peachpuff: "#ffdab9",
1688
+ peru: "#cd853f",
1689
+ pink: "#ffc0cb",
1690
+ plum: "#dda0dd",
1691
+ powderblue: "#b0e0e6",
1692
+ purple: "#800080",
1693
+ rebeccapurple: "#663399",
1694
+ red: "#ff0000",
1695
+ rosybrown: "#bc8f8f",
1696
+ royalblue: "#4169e1",
1697
+ saddlebrown: "#8b4513",
1698
+ salmon: "#fa8072",
1699
+ sandybrown: "#f4a460",
1700
+ seagreen: "#2e8b57",
1701
+ seashell: "#fff5ee",
1702
+ sienna: "#a0522d",
1703
+ silver: "#c0c0c0",
1704
+ skyblue: "#87ceeb",
1705
+ slateblue: "#6a5acd",
1706
+ slategray: "#708090",
1707
+ slategrey: "#708090",
1708
+ snow: "#fffafa",
1709
+ springgreen: "#00ff7f",
1710
+ steelblue: "#4682b4",
1711
+ tan: "#d2b48c",
1712
+ teal: "#008080",
1713
+ thistle: "#d8bfd8",
1714
+ tomato: "#ff6347",
1715
+ turquoise: "#40e0d0",
1716
+ violet: "#ee82ee",
1717
+ wheat: "#f5deb3",
1718
+ white: "#ffffff",
1719
+ whitesmoke: "#f5f5f5",
1720
+ yellow: "#ffff00",
1721
+ yellowgreen: "#9acd32"
1722
+ }), en = "[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?", tn = (e, t, n) => Math.min(n, Math.max(t, e));
1723
+ function nn(e, t) {
1724
+ let n = RegExp(`^${t}\\(`, "i").exec(e);
1725
+ if (!n || !e.endsWith(")")) return null;
1726
+ let r = 0;
1727
+ for (let t = n[0].length - 1; t < e.length; t++) if (e[t] === "(") r++;
1728
+ else if (e[t] === ")" && --r === 0 && t !== e.length - 1) return null;
1729
+ return r === 0 ? e.slice(n[0].length, -1) : null;
1783
1730
  }
1784
- // ../explorer/outage-model.js
1785
- var dn = Object.keys(M), fn = Object.fromEntries(dn.map((e, t) => [e, t])), pn = /* @__PURE__ */ new Set([
1786
- "persona",
1787
- "room",
1788
- "floor"
1789
- ]), mn = [
1790
- "external",
1791
- "machine",
1792
- "container",
1793
- "service",
1794
- "page",
1795
- "app"
1796
- ], hn = (e) => {
1797
- let t = mn.indexOf(e);
1798
- return t < 0 ? mn.length : t;
1799
- }, gn = {
1800
- color: "#050608",
1801
- halo: "child"
1802
- }, _n = {
1803
- alpha: .92,
1804
- glow: 10,
1805
- edgeAlpha: .9,
1806
- edgeWidth: 2.2
1807
- }, vn = (e, t) => `${e}->${t}`;
1808
- function yn(e, t, n) {
1809
- 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) => {
1810
- o.has(e) || o.set(e, []), o.get(e).push(t);
1811
- }, c = /* @__PURE__ */ new Map();
1812
- for (let e of n) if (e && e.from && e.to) {
1813
- if (e.kind === "calls") s(e.to, {
1814
- from: e.from,
1815
- rank: fn[At(e)],
1816
- browser: e.side === "browser",
1817
- key: vn(e.from, e.to)
1818
- });
1819
- else if (e.kind === "triggers" && (r.get(e.from) || {}).type === "page" && (r.get(e.to) || {}).type === "service") s(e.to, {
1820
- from: e.from,
1821
- rank: 0,
1822
- browser: !1,
1823
- key: vn(e.from, e.to)
1824
- });
1825
- else if (e.kind === "runs-on" && Array.isArray(e.mappings)) for (let t of e.mappings) {
1826
- if (!t || !t.service) continue;
1827
- let n = `${e.to}|${t.service}`;
1828
- c.has(n) || c.set(n, /* @__PURE__ */ new Set()), c.get(n).add(e.from);
1829
- }
1731
+ function rn(e, t) {
1732
+ let n = [], r = 0, i = 0;
1733
+ 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);
1734
+ return n.push(e.slice(i)), n;
1735
+ }
1736
+ var an = (e, t) => {
1737
+ let n = RegExp(`^(${en})(%?)$`, "i").exec(e);
1738
+ return n ? n[2] ? Number(n[1]) / 100 * t : Number(n[1]) : null;
1739
+ }, on = (e) => e === void 0 ? 1 : (() => {
1740
+ let t = an(e, 1);
1741
+ return t === null ? null : tn(t, 0, 1);
1742
+ })();
1743
+ function sn(e, t, n) {
1744
+ 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)));
1745
+ return [
1746
+ a(0) * 255,
1747
+ a(8) * 255,
1748
+ a(4) * 255
1749
+ ];
1750
+ }
1751
+ function cn(e) {
1752
+ let t = e.trim();
1753
+ if (t.includes(",")) {
1754
+ let e = t.split(/\s*,\s*/);
1755
+ return (e.length === 3 || e.length === 4) && e.every((e) => e && !/[\s/]/.test(e)) ? e : null;
1830
1756
  }
1831
- let l = (e) => {
1832
- let t = o.get(e) || [], n = r.get(e);
1833
- if (!n || n.type !== "container" || !n.stack || !n.service) return t;
1834
- let i = [...c.get(`stack-${n.stack}|${n.service}`) || []].map((e) => ({
1835
- from: e,
1836
- rank: 0,
1837
- browser: !1,
1838
- key: null
1839
- }));
1840
- return i.length ? [...t, ...i] : t;
1841
- }, u = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Map(), f = dn.map(() => []);
1842
- i.forEach((e) => f[0].push({
1843
- id: e,
1844
- rank: 0,
1845
- browser: !1
1846
- }));
1847
- for (let e = 0; e < f.length; e++) for (let t = 0; t < f[e].length; t++) {
1848
- let { id: n, rank: i, browser: o } = f[e][t], s = u.get(n);
1849
- if (!(s && (s.rank < i || s.rank === i && s.browser !== o))) for (let e of l(n)) {
1850
- let t = r.get(e.from);
1851
- if (!t || a.has(e.from) || pn.has(t.type)) continue;
1852
- let n = Math.max(i, e.rank), s = o || e.browser;
1853
- e.key && (!d.has(e.key) || fn[d.get(e.key)] > n) && d.set(e.key, dn[n]);
1854
- let c = u.get(e.from);
1855
- c && (c.rank < n || c.rank === n && (!c.browser || s)) || (u.set(e.from, {
1856
- rank: n,
1857
- when: dn[n],
1858
- browser: s
1859
- }), f[n].push({
1860
- id: e.from,
1861
- rank: n,
1862
- browser: s
1863
- }));
1864
- }
1757
+ let n = /^(\S+)\s+(\S+)\s+([^\s/]+)(?:\s*\/\s*(\S+))?$/.exec(t);
1758
+ return n && !n.slice(1, 4).some((e) => e.includes("/")) ? n.slice(1, n[4] === void 0 ? 4 : 5) : null;
1759
+ }
1760
+ function ln(e, t = 0) {
1761
+ let n = String(e).trim().toLowerCase();
1762
+ if (n === "transparent") return [
1763
+ 0,
1764
+ 0,
1765
+ 0,
1766
+ 0
1767
+ ];
1768
+ if ($t[n]) return ln($t[n], t);
1769
+ let r = /^#([0-9a-f]{3,4})$/.exec(n);
1770
+ if (r) {
1771
+ let e = [...r[1]].map((e) => parseInt(e + e, 16));
1772
+ return [
1773
+ e[0],
1774
+ e[1],
1775
+ e[2],
1776
+ e.length === 4 ? e[3] / 255 : 1
1777
+ ];
1865
1778
  }
1866
- let p = new Map([...u].map(([e, t]) => [e, {
1867
- when: t.when,
1868
- browser: t.browser
1869
- }])), m = (e) => String(r.get(e).label || e);
1870
- return {
1871
- down: i,
1872
- hits: p,
1873
- edges: d,
1874
- groups: dn.map((e) => {
1875
- let t = [...p].filter(([, t]) => t.when === e).map(([e]) => e).sort((e, t) => hn(r.get(e).type) - hn(r.get(t).type) || m(e).localeCompare(m(t))), { title: n, color: i } = M[e];
1876
- return {
1877
- when: e,
1878
- title: n,
1879
- color: i,
1880
- ids: t
1779
+ if (r = /^#([0-9a-f]{6}|[0-9a-f]{8})$/.exec(n), r) {
1780
+ let e = r[1];
1781
+ return [
1782
+ parseInt(e.slice(0, 2), 16),
1783
+ parseInt(e.slice(2, 4), 16),
1784
+ parseInt(e.slice(4, 6), 16),
1785
+ e.length === 8 ? parseInt(e.slice(6, 8), 16) / 255 : 1
1786
+ ];
1787
+ }
1788
+ let i = nn(n, "rgba?");
1789
+ if (i !== null) {
1790
+ let e = cn(i);
1791
+ if (!e) return null;
1792
+ let t = e.slice(0, 3).map((e) => an(e, 255)), n = on(e[3]);
1793
+ return t.some((e) => e === null) || n === null ? null : [...t.map((e) => tn(e, 0, 255)), n];
1794
+ }
1795
+ let a = nn(n, "hsla?");
1796
+ if (a !== null) {
1797
+ let e = cn(a);
1798
+ if (!e) return null;
1799
+ let t = RegExp(`^(${en})(?:deg)?$`).exec(e[0]), n = /%$/.test(e[1]) ? an(e[1], 1) : null, r = /%$/.test(e[2]) ? an(e[2], 1) : null, i = on(e[3]);
1800
+ return !t || n === null || r === null || i === null ? null : [...sn((Number(t[1]) % 360 + 360) % 360, tn(n, 0, 1), tn(r, 0, 1)), i];
1801
+ }
1802
+ let o = t < 8 ? nn(n, "color-mix") : null;
1803
+ if (o !== null) {
1804
+ let e = rn(o, ",").map((e) => e.trim());
1805
+ if (e.length !== 3 || !/^in\s+srgb$/.test(e[0])) return null;
1806
+ let n = (e) => {
1807
+ 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 = ln(i, t + 1);
1808
+ return o && {
1809
+ c: o,
1810
+ p: a === null ? null : Number(a) / 100
1881
1811
  };
1882
- }).filter((e) => e.ids.length)
1883
- };
1884
- }
1885
- var F = null;
1886
- function bn(e, t, n) {
1887
- let r = e && Array.isArray(e.down) ? e.down : [];
1888
- if (!r.length) return null;
1889
- let i = r.join("\0");
1890
- return F && F.key === i && F.nodes === t && F.edges === n || (F = {
1891
- key: i,
1892
- nodes: t,
1893
- edges: n,
1894
- radius: yn(r, t, n)
1895
- }), F.radius;
1896
- }
1897
- function xn(e, t) {
1898
- if (!t) return;
1899
- let n = new Set(t.down);
1900
- for (let r of e.nodes) {
1901
- if (n.has(r.id)) {
1902
- Object.assign(r, {
1903
- color: gn.color,
1904
- alpha: 1,
1905
- labelAlpha: 1,
1906
- labelColor: "#f8fafc",
1907
- labelKeep: !0,
1908
- labelStrike: !0,
1909
- connected: !0,
1910
- glow: 0
1911
- }), r.halo === "none" && (r.halo = gn.halo);
1912
- continue;
1913
- }
1914
- let e = t.hits.get(r.id);
1915
- if (!e) continue;
1916
- let i = Math.max(r.alpha, _n.alpha);
1917
- Object.assign(r, {
1918
- color: M[e.when].color,
1919
- alpha: i,
1920
- labelAlpha: i,
1921
- labelColor: "#f8fafc",
1922
- labelKeep: !0,
1923
- connected: !0,
1924
- glow: Math.max(r.glow || 0, _n.glow)
1925
- });
1812
+ }, r = n(e[1]), i = n(e[2]);
1813
+ if (!r || !i || r.p !== null && (r.p < 0 || r.p > 1) || i.p !== null && (i.p < 0 || i.p > 1)) return null;
1814
+ let a = r.p ?? (i.p === null ? .5 : 1 - i.p), s = i.p ?? 1 - a;
1815
+ return a + s <= 0 ? null : dn(r.c, a, i.c, s);
1926
1816
  }
1927
- for (let n of e.edges) {
1928
- let e = t.edges.get(vn(n.from, n.to));
1929
- if (!e) continue;
1930
- let r = M[e].color;
1931
- n.color = r, n.glow && (n.glowColor = r), n.alpha = Math.max(n.alpha, _n.edgeAlpha), n.width = Math.max(n.width, _n.edgeWidth), n.packet &&= {
1932
- ...n.packet,
1933
- glowColor: r
1934
- };
1817
+ return null;
1818
+ }
1819
+ function un(e) {
1820
+ if (String(e).length > 4096) return null;
1821
+ try {
1822
+ return ln(e);
1823
+ } catch {
1824
+ return null;
1935
1825
  }
1936
1826
  }
1937
- // ../explorer/house-model.js
1938
- var Sn = /* @__PURE__ */ new Set([
1939
- "container",
1940
- "stack",
1941
- "machine"
1942
- ]);
1943
- function Cn(e, t) {
1944
- return !!(e.house && e.house.shown && e.house.shown.has(t.id));
1827
+ function N(e) {
1828
+ return un(e) ?? [
1829
+ 0,
1830
+ 0,
1831
+ 0,
1832
+ 0
1833
+ ];
1834
+ }
1835
+ function dn(e, t, n, r) {
1836
+ 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;
1837
+ return [
1838
+ c(0),
1839
+ c(1),
1840
+ c(2),
1841
+ s * Math.min(1, i)
1842
+ ];
1843
+ }
1844
+ function fn(e, t) {
1845
+ let n = e[3];
1846
+ return [
1847
+ 0,
1848
+ 1,
1849
+ 2
1850
+ ].map((r) => Math.round(e[r] * n + t[r] * (1 - n))).concat(1);
1945
1851
  }
1946
- var wn = null;
1947
- function Tn(e) {
1948
- let t = e.house && e.house.cloudLines;
1949
- return !t || !t.length ? e.edges : (wn && wn.edges === e.edges && wn.lines === t || (wn = {
1950
- edges: e.edges,
1951
- lines: t,
1952
- all: [...e.edges, ...t]
1953
- }), wn.all);
1852
+ var pn = ([e, t, n]) => `#${[
1853
+ e,
1854
+ t,
1855
+ n
1856
+ ].map((e) => Math.round(e).toString(16).padStart(2, "0")).join("")}`, mn = (e) => {
1857
+ let t = e / 255;
1858
+ return t <= .03928 ? t / 12.92 : ((t + .055) / 1.055) ** 2.4;
1859
+ }, P = ([e, t, n]) => .2126 * mn(e) + .7152 * mn(t) + .0722 * mn(n), hn = (e, t) => (Math.max(e, t) + .05) / (Math.min(e, t) + .05), gn = (e, t) => hn(P(N(e)), P(N(t))), F = Object.freeze({
1860
+ dark: Object.freeze({
1861
+ added: "#2dd4bf",
1862
+ changed: "#fbbf24",
1863
+ removed: "#fa9292",
1864
+ edit: "#b49cfb"
1865
+ }),
1866
+ light: Object.freeze({
1867
+ added: "#197c6f",
1868
+ changed: "#8f6703",
1869
+ removed: "#e20b0b",
1870
+ edit: "#6839f6"
1871
+ })
1872
+ }), _n = .85, vn = .9, yn = .6, bn = .45, xn = Object.freeze({
1873
+ light: yn,
1874
+ dark: .5
1875
+ }), Sn = Object.freeze({
1876
+ added: Object.freeze({
1877
+ ringDash: Object.freeze([5, 4]),
1878
+ edgeDash: Object.freeze([7, 5]),
1879
+ strike: !1
1880
+ }),
1881
+ changed: Object.freeze({
1882
+ ringDash: null,
1883
+ edgeDash: null,
1884
+ strike: !1
1885
+ }),
1886
+ removed: Object.freeze({
1887
+ ringDash: null,
1888
+ edgeDash: Object.freeze([3, 4]),
1889
+ strike: !0
1890
+ }),
1891
+ edit: Object.freeze({
1892
+ ringDash: Object.freeze([2, 5]),
1893
+ edgeDash: Object.freeze([12, 4]),
1894
+ strike: !1
1895
+ })
1896
+ }), Cn = "#f4f6fa", wn = "#090d16", Tn = {
1897
+ mark: 3.2,
1898
+ text: 4.8
1899
+ }, En = .16, Dn = 1.35, On = .11;
1900
+ function kn(e, t) {
1901
+ return e === "light" || e === "dark" ? e : t ? "light" : "dark";
1902
+ }
1903
+ function An([e, t, n]) {
1904
+ 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;
1905
+ if (o === s) return [
1906
+ 0,
1907
+ 0,
1908
+ c
1909
+ ];
1910
+ let l = o - s, u = c > .5 ? l / (2 - o - s) : l / (o + s);
1911
+ return [
1912
+ (o === r ? (i - a) / l + (i < a ? 6 : 0) : o === i ? (a - r) / l + 2 : (r - i) / l + 4) * 60,
1913
+ u,
1914
+ c
1915
+ ];
1954
1916
  }
1955
- function En(e, t, n) {
1956
- return e.kind === "runs-on" || e.kind === "delivers" ? "flow" : e.kind === "calls" && n && n.type === "external" ? e.rolled || !(t && Sn.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;
1917
+ function jn([e, t, n]) {
1918
+ 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));
1919
+ return [
1920
+ a(0),
1921
+ a(8),
1922
+ a(4)
1923
+ ].map((e) => Math.round(e * 255));
1957
1924
  }
1958
- var Dn = [
1959
- "persona",
1960
- "machine",
1961
- "stack",
1962
- "floor",
1963
- "external"
1964
- ];
1965
- function On(e, t) {
1966
- let n = t.house;
1967
- e.decor.rings = [], e.decor.lanes = n && n.lanes ? n.lanes : [];
1968
- for (let t of e.nodes) t.type === "room" ? (t.label = "", t.labelKeep = !1) : Dn.includes(t.type) && (t.labelKeep = !0);
1969
- return n && n.cloudIds && n.cloudIds.size && Nn(e, t), e;
1925
+ var Mn = (e) => `#${e.map((e) => e.toString(16).padStart(2, "0")).join("")}`, Nn = (e, t) => t >= 1 ? Mn(e) : `rgba(${e.join(", ")}, ${+t.toFixed(3)})`, Pn = P(N(Cn)), Fn = /* @__PURE__ */ new Map();
1926
+ function I(e, t = "mark") {
1927
+ let n = `${t}|${e}`, r = Fn.get(n);
1928
+ if (r !== void 0) return r;
1929
+ let i = In(e, t);
1930
+ return Fn.set(n, i), i;
1970
1931
  }
1971
- var kn = {
1972
- run: .9,
1973
- deploy: .25,
1974
- renew: .9
1975
- }, An = {
1976
- alpha: .9,
1977
- width: 2.2
1978
- }, jn = Object.keys(M), Mn = (e) => jn.find((t) => M[t].ticks === (e.ticks || 0)) || "run";
1979
- function Nn(e, t) {
1980
- let n = t.house, r = t.scenario ? bn(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;
1981
- e.edges = e.edges.filter((e) => {
1982
- if (e.kind !== "calls" || !n.cloudIds.has(e.to)) return !0;
1983
- let t = Mn(e);
1984
- if (r) {
1985
- 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;
1986
- if (i && s) {
1987
- let n = jn[Math.max(jn.indexOf(s), jn.indexOf(t))];
1988
- return Object.assign(e, {
1989
- color: M[n].color,
1990
- alpha: Math.max(e.alpha, An.alpha),
1991
- width: Math.max(e.width, An.width)
1992
- }), e.glow && (e.glowColor = e.color), !0;
1993
- }
1994
- return !n.phone || r.edges.has(`${e.from}->${e.to}`);
1932
+ function In(e, t) {
1933
+ if (typeof e != "string") return e;
1934
+ let [n, r, i, a] = N(e);
1935
+ if (a === 0) return e;
1936
+ let [o, s, c] = An([
1937
+ n,
1938
+ r,
1939
+ i
1940
+ ]);
1941
+ if ((Math.max(n, r, i) - Math.min(n, r, i)) / 255 < En && c > .5) return Nn(jn([
1942
+ o,
1943
+ s,
1944
+ Math.max(On, 1 - c)
1945
+ ]), a);
1946
+ let l = Tn[t] || Tn.mark;
1947
+ if (hn(P([
1948
+ n,
1949
+ r,
1950
+ i
1951
+ ]), Pn) >= l) return e;
1952
+ let u = 0, d = c;
1953
+ for (let e = 0; e < 20; e++) {
1954
+ let e = (u + d) / 2;
1955
+ hn(P(jn([
1956
+ o,
1957
+ s,
1958
+ e
1959
+ ])), Pn) >= l ? u = e : d = e;
1960
+ }
1961
+ return Nn(jn([
1962
+ o,
1963
+ s,
1964
+ u
1965
+ ]), a);
1966
+ }
1967
+ var Ln = (e, t, n = "mark") => t === "light" ? I(e, n) : e, Rn = (e) => {
1968
+ e && (e.color = I(e.color, "text"));
1969
+ };
1970
+ function zn(e) {
1971
+ e.theme = "light";
1972
+ for (let t of e.nodes) t.color = I(t.color), t.labelColor = I(t.labelColor, "text");
1973
+ for (let t of e.edges) {
1974
+ if (t.mark && t.mark !== "none") t.color = F.dark[t.mark] === t.color ? F.light[t.mark] : I(t.color);
1975
+ else {
1976
+ t.alpha < 1 && (t.alpha = Math.min(1, t.alpha * Dn)), t.color = I(t.color);
1977
+ let [e, n, r, i] = N(t.color);
1978
+ i > 0 && i < 1 && (t.color = Nn([
1979
+ e,
1980
+ n,
1981
+ r
1982
+ ], Math.min(1, i * Dn)));
1995
1983
  }
1996
- return i ? !n.phone || e.alpha >= .5 : !n.phone && (e.alpha = kn[t], !0);
1997
- });
1984
+ t.glowColor &&= I(t.glowColor), t.label &&= {
1985
+ ...t.label,
1986
+ color: I(t.label.color, "text")
1987
+ }, t.packet &&= {
1988
+ ...t.packet,
1989
+ color: I(t.packet.color),
1990
+ glowColor: I(t.packet.glowColor)
1991
+ };
1992
+ }
1993
+ let { decor: t } = e;
1994
+ return t.grid &&= {
1995
+ ...t.grid,
1996
+ color: I(t.grid.color)
1997
+ }, t.rings = t.rings.map((e) => ({
1998
+ ...e,
1999
+ color: I(e.color)
2000
+ })), t.lanes = t.lanes.map((e) => {
2001
+ let t = {
2002
+ ...e,
2003
+ fill: I(e.fill),
2004
+ stroke: I(e.stroke)
2005
+ };
2006
+ for (let e of [
2007
+ "title",
2008
+ "note",
2009
+ "arrow"
2010
+ ]) t[e] && (t[e] = { ...t[e] }, Rn(t[e]));
2011
+ return t;
2012
+ }), e;
2013
+ }
2014
+ var L = {
2015
+ root: {
2016
+ color: "#f59e0b",
2017
+ r: 28
2018
+ },
2019
+ app: {
2020
+ color: "#5168ec",
2021
+ r: 24
2022
+ },
2023
+ page: {
2024
+ color: "#38bdf8",
2025
+ r: 18
2026
+ },
2027
+ pkg: {
2028
+ color: "#0f8293",
2029
+ r: 24
2030
+ },
2031
+ core: {
2032
+ color: "#14b8a6",
2033
+ r: 20
2034
+ },
2035
+ token: {
2036
+ color: "#ef409b",
2037
+ r: 20
2038
+ },
2039
+ atom: {
2040
+ color: "#108d4e",
2041
+ r: 19
2042
+ },
2043
+ molecule: {
2044
+ color: "#a855f7",
2045
+ r: 21
2046
+ },
2047
+ tool: {
2048
+ color: "#f43f5e",
2049
+ r: 19
2050
+ },
2051
+ store: {
2052
+ color: "#fb923c",
2053
+ r: 20
2054
+ },
2055
+ table: {
2056
+ color: "#fde047",
2057
+ r: 18
2058
+ },
2059
+ rom: {
2060
+ color: "#c398c6",
2061
+ r: 19
2062
+ },
2063
+ service: {
2064
+ color: "#84cc16",
2065
+ r: 20
2066
+ },
2067
+ external: {
2068
+ color: "#94a3b8",
2069
+ r: 21
2070
+ },
2071
+ stack: {
2072
+ color: "#b49fa0",
2073
+ r: 22
2074
+ },
2075
+ machine: {
2076
+ color: "#78716c",
2077
+ r: 26
2078
+ },
2079
+ container: {
2080
+ color: "#d6d3d1",
2081
+ r: 12
2082
+ },
2083
+ persona: {
2084
+ color: "#fb7185",
2085
+ r: 22
2086
+ },
2087
+ device: {
2088
+ color: "#2dd4bf",
2089
+ r: 14
2090
+ },
2091
+ floor: {
2092
+ color: "#a3e635",
2093
+ r: 20
2094
+ },
2095
+ room: {
2096
+ color: "#f7ed81",
2097
+ r: 16
2098
+ }
2099
+ }, Bn = Object.freeze({
2100
+ root: "circle",
2101
+ app: "circle",
2102
+ page: "circle",
2103
+ pkg: "circle",
2104
+ core: "circle",
2105
+ token: "circle",
2106
+ atom: "circle",
2107
+ molecule: "circle",
2108
+ tool: "circle",
2109
+ rom: "circle",
2110
+ service: "circle",
2111
+ store: "rounded-square",
2112
+ table: "rounded-square",
2113
+ external: "hexagon",
2114
+ stack: "square",
2115
+ machine: "square",
2116
+ container: "square",
2117
+ device: "square",
2118
+ floor: "square",
2119
+ room: "square",
2120
+ persona: "diamond"
2121
+ }), Vn = Object.freeze([
2122
+ "circle",
2123
+ "rounded-square",
2124
+ "hexagon",
2125
+ "square",
2126
+ "diamond"
2127
+ ]), Hn = (e) => typeof e == "string" && Object.hasOwn(Bn, e) ? Bn[e] : "circle", Un = [
2128
+ "outbox",
2129
+ "changes",
2130
+ "trigger",
2131
+ "sync",
2132
+ "model",
2133
+ "rom",
2134
+ "read",
2135
+ "build",
2136
+ "api"
2137
+ ], Wn = ["reads", "writes"], Gn = [
2138
+ "calls",
2139
+ "triggers",
2140
+ "delivers"
2141
+ ], Kn = ["runs-on"], qn = [
2142
+ "flow",
2143
+ ...Wn,
2144
+ "uses",
2145
+ "extends",
2146
+ ...Gn,
2147
+ ...Kn
2148
+ ], Jn = [
2149
+ "camera",
2150
+ "phone",
2151
+ "nfc-tag",
2152
+ "home-assistant"
2153
+ ], Yn = ["floor", "room"], Xn = "live-", Zn = (e) => `persona-${e}`;
2154
+ function Qn(e) {
2155
+ if (typeof e != "string" || !e.startsWith("live-")) return null;
2156
+ let t = e.slice(5);
2157
+ for (let e of Yn) if (t.startsWith(`${e}-`) && t.length > e.length + 1) return {
2158
+ type: e,
2159
+ id: t.slice(e.length + 1)
2160
+ };
2161
+ if (!t.startsWith("device-")) return null;
2162
+ let n = t.slice(7), r = Jn.find((e) => n.startsWith(`${e}-`) && n.length > e.length + 1);
2163
+ return r ? {
2164
+ type: "device",
2165
+ kind: r,
2166
+ id: n.slice(r.length + 1)
2167
+ } : null;
1998
2168
  }
1999
- // ../explorer/verdict-paint.js
2000
- var Pn = {
2001
- allowed: "#4ade80",
2002
- refused: "#ff2d55",
2003
- mismatch: "#fbbf24"
2004
- }, Fn = 18, In = 4.5;
2005
- function Ln(e, t) {
2006
- 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";
2169
+ function $n(e) {
2170
+ return e ? typeof e.id == "string" && e.id.startsWith("live-") ? !0 : Yn.includes(e.type) || e.type === "device" && !e.file : !1;
2007
2171
  }
2008
- function Rn(e, t) {
2009
- let n = t && t.verdict;
2010
- if (!n || t.done) return;
2011
- let r = n.mismatch ? Pn.mismatch : Pn[n.state];
2012
- if (!r) return;
2013
- let { node: i, edge: a } = t.current;
2014
- if (i !== void 0) {
2015
- let t = e.nodes.find((e) => e.id === i);
2016
- t && (t.color = r, t.glow = Math.max(t.glow || 0, Fn));
2017
- } else a && e.edges.forEach((e) => {
2018
- Ln(e, a) && (e.color = r, e.glowColor = r, e.glow = Math.max(e.glow || 0, Fn), e.width = Math.max(e.width || 0, In), e.packet &&= n.state === "refused" && !n.mismatch ? {
2019
- ...e.packet,
2020
- color: r,
2021
- glowColor: r,
2022
- speed: 0,
2023
- phase: .5
2024
- } : {
2025
- ...e.packet,
2026
- glowColor: r
2027
- });
2028
- });
2172
+ var er = ["cloud", "web"], tr = [
2173
+ "run",
2174
+ "deploy",
2175
+ "renew"
2176
+ ], nr = ["browser"];
2177
+ function rr(e, t, n) {
2178
+ let r = [], i = n?.type === "external" && (n.kind === void 0 || n.kind === "cloud");
2179
+ return e.when !== void 0 && (tr.includes(e.when) || r.push(`has when "${e.when}". Valid values: ${tr.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 && (nr.includes(e.side) || r.push(`has side "${e.side}". Valid values: ${nr.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;
2029
2180
  }
2030
2181
  // ../core/layers.js
2031
- var zn = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/, Bn = Object.freeze([
2182
+ var ir = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/, ar = Object.freeze([
2032
2183
  "key",
2033
2184
  "label",
2034
2185
  "desc",
2035
2186
  "match"
2036
- ]), Vn = Object.freeze([
2187
+ ]), R = Object.freeze([
2037
2188
  "type",
2038
2189
  "kind",
2039
2190
  "parent",
2040
2191
  "field"
2041
- ]), Hn = Object.freeze([
2192
+ ]), or = Object.freeze([
2042
2193
  "add",
2043
2194
  "off",
2044
2195
  "order"
2045
- ]), Un = /^[A-Za-z][A-Za-z0-9_]*$/, Wn = Object.freeze([
2196
+ ]), sr = /^[A-Za-z][A-Za-z0-9_]*$/, cr = Object.freeze([
2046
2197
  "root",
2047
2198
  "external",
2048
2199
  "floor",
2049
2200
  "room"
2050
- ]), Gn = Object.freeze([
2201
+ ]), lr = Object.freeze([
2051
2202
  {
2052
2203
  key: "app",
2053
2204
  label: "Apps",
@@ -2191,91 +2342,91 @@ var zn = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/, Bn = Object.freeze([
2191
2342
  match: { type: "persona" },
2192
2343
  live: !0
2193
2344
  }
2194
- ]), Kn = Object.freeze(Gn.map((e) => e.key)), qn = new Set(Kn), Jn = Object.keys(P), I = (e) => typeof e == "object" && !!e && !Array.isArray(e), Yn = /* @__PURE__ */ RegExp("[\\u0000-\\u001f\\u007f-\\u009f\\u2028\\u2029]"), L = (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, Xn = (e) => typeof e == "string" && e.length > 0 && e.length <= 80 && !Yn.test(e) || typeof e == "number" && Number.isFinite(e) || typeof e == "boolean", Zn = /^[a-z0-9]+(-[a-z0-9]+)*$/, Qn = new Set(Jn), $n = (e, t) => Qn.has(e) && typeof t == "string" && t.length <= 32 && Zn.test(t) ? `--corn-map-kind-${e}-${t}` : null, er = (e) => typeof e == "string" && e.length <= 32 && zn.test(e) ? `--corn-map-group-${e}` : null, tr = ({ type: e, kind: t, layer: n, group: r }) => [
2195
- $n(e, t),
2196
- n ? er(n) : null,
2345
+ ]), ur = Object.freeze(lr.map((e) => e.key)), dr = new Set(ur), fr = Object.keys(L), z = (e) => typeof e == "object" && !!e && !Array.isArray(e), pr = /* @__PURE__ */ RegExp("[\\u0000-\\u001f\\u007f-\\u009f\\u2028\\u2029]"), B = (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, mr = (e) => typeof e == "string" && e.length > 0 && e.length <= 80 && !pr.test(e) || typeof e == "number" && Number.isFinite(e) || typeof e == "boolean", hr = /^[a-z0-9]+(-[a-z0-9]+)*$/, gr = new Set(fr), _r = (e, t) => gr.has(e) && typeof t == "string" && t.length <= 32 && hr.test(t) ? `--corn-map-kind-${e}-${t}` : null, vr = (e) => typeof e == "string" && e.length <= 32 && ir.test(e) ? `--corn-map-group-${e}` : null, yr = ({ type: e, kind: t, layer: n, group: r }) => [
2346
+ _r(e, t),
2347
+ n ? vr(n) : null,
2197
2348
  `--corn-map-node-${e}`,
2198
2349
  `--corn-map-group-${r || e}`
2199
2350
  ].filter(Boolean);
2200
- function nr(e) {
2351
+ function br(e) {
2201
2352
  if (typeof e != "string") return null;
2202
- if (Qn.has(e)) return { type: e };
2353
+ if (gr.has(e)) return { type: e };
2203
2354
  let t = e.indexOf(":");
2204
2355
  if (t < 0) return null;
2205
2356
  let n = e.slice(0, t), r = e.slice(t + 1);
2206
- return n === "layer" ? zn.test(r) && r.length <= 32 ? { layer: r } : null : Qn.has(n) && Zn.test(r) && r.length <= 32 ? {
2357
+ return n === "layer" ? ir.test(r) && r.length <= 32 ? { layer: r } : null : gr.has(n) && hr.test(r) && r.length <= 32 ? {
2207
2358
  type: n,
2208
2359
  kind: r
2209
2360
  } : null;
2210
2361
  }
2211
- function rr(e, t, n) {
2362
+ function xr(e, t, n) {
2212
2363
  let r = [];
2213
- return typeof t == "string" && Zn.test(t) && t.length <= 32 && r.push(`${e}:${t}`), n && r.push(`layer:${n}`), r.push(e), r;
2364
+ return typeof t == "string" && hr.test(t) && t.length <= 32 && r.push(`${e}:${t}`), n && r.push(`layer:${n}`), r.push(e), r;
2214
2365
  }
2215
- var ir = /* @__PURE__ */ new WeakMap();
2216
- function ar(e) {
2217
- let t = ir.get(e);
2366
+ var Sr = /* @__PURE__ */ new WeakMap();
2367
+ function Cr(e) {
2368
+ let t = Sr.get(e);
2218
2369
  if (t && t.length === e.length) return t.map;
2219
2370
  let n = /* @__PURE__ */ new Map();
2220
2371
  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);
2221
- return ir.set(e, {
2372
+ return Sr.set(e, {
2222
2373
  length: e.length,
2223
2374
  map: n
2224
2375
  }), n;
2225
2376
  }
2226
- var R = (e, t) => Array.isArray(e) ? e.includes(t) : e === t;
2227
- function or(e, t, n) {
2228
- if (!I(e)) return !1;
2377
+ var wr = (e, t) => Array.isArray(e) ? e.includes(t) : e === t;
2378
+ function Tr(e, t, n) {
2379
+ if (!z(e)) return !1;
2229
2380
  let r = !1;
2230
- if (e.type !== void 0 && (r = !0, !R(e.type, t.type)) || e.kind !== void 0 && (r = !0, !R(e.kind, t.kind)) || e.parent !== void 0 && (r = !0, !n || !R(e.parent, n(t)))) return !1;
2381
+ if (e.type !== void 0 && (r = !0, !wr(e.type, t.type)) || e.kind !== void 0 && (r = !0, !wr(e.kind, t.kind)) || e.parent !== void 0 && (r = !0, !n || !wr(e.parent, n(t)))) return !1;
2231
2382
  if (e.field !== void 0) {
2232
2383
  r = !0;
2233
2384
  for (let n of Object.keys(e.field)) {
2234
2385
  if (!Object.hasOwn(t, n)) return !1;
2235
2386
  let r = t[n], i = e.field[n];
2236
- if (!(Array.isArray(r) ? r.some((e) => R(i, e)) : R(i, r))) return !1;
2387
+ if (!(Array.isArray(r) ? r.some((e) => wr(i, e)) : wr(i, r))) return !1;
2237
2388
  }
2238
2389
  }
2239
2390
  return r;
2240
2391
  }
2241
- var sr = [...Gn.filter((e) => e.match)].sort((e, t) => Number("kind" in t.match) - Number("kind" in e.match));
2242
- function cr(e) {
2392
+ var Er = [...lr.filter((e) => e.match)].sort((e, t) => Number("kind" in t.match) - Number("kind" in e.match));
2393
+ function Dr(e) {
2243
2394
  if (e.type === "root") return null;
2244
2395
  if (e.type === "external") return e.kind === "web" ? "web" : "cloud";
2245
- for (let t of sr) if (or(t.match, e)) return t.key;
2396
+ for (let t of Er) if (Tr(t.match, e)) return t.key;
2246
2397
  return e.type;
2247
2398
  }
2248
- function lr(e, t, n) {
2399
+ function Or(e, t, n) {
2249
2400
  if (!e || !e.length || t.type === "root") return null;
2250
- for (let r of e) if (or(r.match, t, n)) return r.key;
2401
+ for (let r of e) if (Tr(r.match, t, n)) return r.key;
2251
2402
  return null;
2252
2403
  }
2253
- var ur = (e, t, n) => lr(e, t, n) || cr(t), dr = `${Jn.slice(0, 5).join(", ")}, …`, fr = (e) => {
2254
- let t = (Array.isArray(e) ? e : []).map((e) => I(e) && typeof e.key == "string" ? e.key : null).filter((e) => e && zn.test(e));
2255
- return `${Kn.slice(0, 3).join(", ")}, …${t.length ? `, ${t[t.length - 1]}` : ""}`;
2404
+ var kr = (e, t, n) => Or(e, t, n) || Dr(t), Ar = `${fr.slice(0, 5).join(", ")}, …`, jr = (e) => {
2405
+ let t = (Array.isArray(e) ? e : []).map((e) => z(e) && typeof e.key == "string" ? e.key : null).filter((e) => e && ir.test(e));
2406
+ return `${ur.slice(0, 3).join(", ")}, …${t.length ? `, ${t[t.length - 1]}` : ""}`;
2256
2407
  };
2257
- function pr(e, t, n, r) {
2408
+ function Mr(e, t, n, r) {
2258
2409
  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];
2259
2410
  }
2260
- function mr(e, t, n) {
2261
- if (!I(t)) n.push(`${e}.match is { type, kind, parent, field }: say at least one of them.`);
2411
+ function Nr(e, t, n) {
2412
+ if (!z(t)) n.push(`${e}.match is { type, kind, parent, field }: say at least one of them.`);
2262
2413
  else {
2263
- for (let r of Object.keys(t)) Vn.includes(r) || n.push(`${e}.match has unknown key "${r}": known: ${Vn.join(", ")}. A match is data: no pattern, no function.`);
2264
- if (!Object.keys(t).some((e) => Vn.includes(e))) Object.keys(t).length || n.push(`${e}.match is empty: say at least one of ${Vn.join(", ")}.`);
2414
+ for (let r of Object.keys(t)) R.includes(r) || n.push(`${e}.match has unknown key "${r}": known: ${R.join(", ")}. A match is data: no pattern, no function.`);
2415
+ if (!Object.keys(t).some((e) => R.includes(e))) Object.keys(t).length || n.push(`${e}.match is empty: say at least one of ${R.join(", ")}.`);
2265
2416
  else {
2266
- if ("type" in t) for (let r of pr(`${e}.match`, "type", t.type, n)) typeof r == "string" && Jn.includes(r) || n.push(`${e}.match.type ${L(r)} is not a node type (${dr}).`);
2267
- if ("kind" in t) for (let r of pr(`${e}.match`, "kind", t.kind, n)) (typeof r != "string" || !r || r.length > 80 || Yn.test(r)) && n.push(`${e}.match.kind ${L(r)}: a kind is text, one line, at most 80 characters.`);
2268
- if ("parent" in t) for (let r of pr(`${e}.match`, "parent", t.parent, n)) (typeof r != "string" || !r || r.length > 200 || Yn.test(r)) && n.push(`${e}.match.parent ${L(r)}: a parent is a node id (text), like "pkg-core".`);
2417
+ if ("type" in t) for (let r of Mr(`${e}.match`, "type", t.type, n)) typeof r == "string" && fr.includes(r) || n.push(`${e}.match.type ${B(r)} is not a node type (${Ar}).`);
2418
+ if ("kind" in t) for (let r of Mr(`${e}.match`, "kind", t.kind, n)) (typeof r != "string" || !r || r.length > 80 || pr.test(r)) && n.push(`${e}.match.kind ${B(r)}: a kind is text, one line, at most 80 characters.`);
2419
+ if ("parent" in t) for (let r of Mr(`${e}.match`, "parent", t.parent, n)) (typeof r != "string" || !r || r.length > 200 || pr.test(r)) && n.push(`${e}.match.parent ${B(r)}: a parent is a node id (text), like "pkg-core".`);
2269
2420
  if ("field" in t) {
2270
2421
  let r = t.field;
2271
- if (!I(r)) {
2422
+ if (!z(r)) {
2272
2423
  n.push(`${e}.match.field is { name: value }: a node field and the value (or list of values) it must have.`);
2273
2424
  return;
2274
2425
  }
2275
2426
  let i = Object.keys(r);
2276
2427
  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.`);
2277
2428
  for (let t of i.slice(0, 20)) {
2278
- if (!Un.test(t) || t.length > 40) {
2429
+ if (!sr.test(t) || t.length > 40) {
2279
2430
  n.push(`${e}.match.field "${t.slice(0, 40)}": a field name is letters, digits and "_", starting with a letter.`);
2280
2431
  continue;
2281
2432
  }
@@ -2288,17 +2439,17 @@ function mr(e, t, n) {
2288
2439
  continue;
2289
2440
  }
2290
2441
  let i = Array.isArray(r[t]) ? r[t] : [r[t]];
2291
- 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(Xn) || n.push(`${e}.match.field.${t}: a value is text, a number, true or false, or a list of them.`);
2442
+ 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(mr) || n.push(`${e}.match.field.${t}: a value is text, a number, true or false, or a list of them.`);
2292
2443
  }
2293
2444
  }
2294
2445
  }
2295
2446
  }
2296
2447
  }
2297
- function hr(e) {
2448
+ function Pr(e) {
2298
2449
  if (e === void 0) return [];
2299
- if (!I(e)) return ["\"layers\" is an object: { add: [{ key, label, match }], off: [keys], order: [keys] }."];
2450
+ if (!z(e)) return ["\"layers\" is an object: { add: [{ key, label, match }], off: [keys], order: [keys] }."];
2300
2451
  let t = [];
2301
- for (let n of Object.keys(e)) Hn.includes(n) || t.push(`layers has unknown key "${n}": known: ${Hn.join(", ")}.`);
2452
+ for (let n of Object.keys(e)) or.includes(n) || t.push(`layers has unknown key "${n}": known: ${or.join(", ")}.`);
2302
2453
  let n = e.add;
2303
2454
  n !== void 0 && !Array.isArray(n) && t.push("layers.add is a list of project layers: [{ key, label, desc?, match }].");
2304
2455
  let r = Array.isArray(n) ? n : [];
@@ -2306,24 +2457,24 @@ function hr(e) {
2306
2457
  let i = /* @__PURE__ */ new Map();
2307
2458
  r.slice(0, 100).forEach((e, n) => {
2308
2459
  let r = `layers.add[${n}]`;
2309
- if (!I(e)) {
2460
+ if (!z(e)) {
2310
2461
  t.push(`${r} is { key, label, desc?, match }.`);
2311
2462
  return;
2312
2463
  }
2313
2464
  for (let n of Object.keys(e)) {
2314
- if (Bn.includes(n)) continue;
2465
+ if (ar.includes(n)) continue;
2315
2466
  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." : "";
2316
- t.push(`${r} has unknown key "${n}": known: ${Bn.join(", ")}.${e}`);
2467
+ t.push(`${r} has unknown key "${n}": known: ${ar.join(", ")}.${e}`);
2317
2468
  }
2318
2469
  let a = e.key;
2319
- typeof a == "string" ? qn.has(a) ? t.push(`${r}.key ${L(a)} is a starting layer: pick another key.`) : Wn.includes(a) ? t.push(`${r}.key ${L(a)} is reserved (a node type): pick another key.`) : !zn.test(a) || a.length > 32 ? t.push(`${r}.key ${L(a)}: lower-case words joined by "-", like "edge-stack"${a.length > 32 ? ", at most 32 characters" : ""}.`) : i.has(a) ? t.push(`${r}.key ${L(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".`);
2470
+ typeof a == "string" ? dr.has(a) ? t.push(`${r}.key ${B(a)} is a starting layer: pick another key.`) : cr.includes(a) ? t.push(`${r}.key ${B(a)} is reserved (a node type): pick another key.`) : !ir.test(a) || a.length > 32 ? t.push(`${r}.key ${B(a)}: lower-case words joined by "-", like "edge-stack"${a.length > 32 ? ", at most 32 characters" : ""}.`) : i.has(a) ? t.push(`${r}.key ${B(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".`);
2320
2471
  let o = (n, i, a) => {
2321
2472
  let o = e[n];
2322
- 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} ${L(o)}: plain text, one line, at most ${i} characters.`) : Yn.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}.`);
2473
+ 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} ${B(o)}: plain text, one line, at most ${i} characters.`) : pr.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}.`);
2323
2474
  };
2324
- o("label", 40, !0), o("desc", 120, !1), e.match === void 0 ? t.push(`${r}.match is required: say at least one of ${Vn.join(", ")}.`) : mr(r, e.match, t);
2475
+ o("label", 40, !0), o("desc", 120, !1), e.match === void 0 ? t.push(`${r}.match is required: say at least one of ${R.join(", ")}.`) : Nr(r, e.match, t);
2325
2476
  });
2326
- let a = /* @__PURE__ */ new Set([...Kn, ...r.map((e) => I(e) && typeof e.key == "string" ? e.key : null).filter(Boolean)]);
2477
+ let a = /* @__PURE__ */ new Set([...ur, ...r.map((e) => z(e) && typeof e.key == "string" ? e.key : null).filter(Boolean)]);
2327
2478
  for (let r of ["off", "order"]) {
2328
2479
  let i = e[r];
2329
2480
  if (i === void 0) continue;
@@ -2333,18 +2484,18 @@ function hr(e) {
2333
2484
  }
2334
2485
  let o = /* @__PURE__ */ new Set();
2335
2486
  i.forEach((e) => {
2336
- typeof e != "string" || !a.has(e) ? t.push(`layers.${r} ${L(e)} is not a layer (${fr(n)}).`) : o.has(e) && t.push(`layers.${r} ${L(e)} is listed twice.`), o.add(e);
2487
+ typeof e != "string" || !a.has(e) ? t.push(`layers.${r} ${B(e)} is not a layer (${jr(n)}).`) : o.has(e) && t.push(`layers.${r} ${B(e)} is listed twice.`), o.add(e);
2337
2488
  });
2338
2489
  }
2339
2490
  return t;
2340
2491
  }
2341
- function gr(e) {
2492
+ function Fr(e) {
2342
2493
  let t = {
2343
2494
  add: [],
2344
2495
  off: [],
2345
2496
  order: []
2346
2497
  };
2347
- if (!I(e) || hr(e).length) return t;
2498
+ if (!z(e) || Pr(e).length) return t;
2348
2499
  let n = (e) => Array.isArray(e) ? e.slice(0, 20) : e;
2349
2500
  return {
2350
2501
  add: (e.add || []).map((e) => {
@@ -2361,7 +2512,7 @@ function gr(e) {
2361
2512
  order: [...e.order || []]
2362
2513
  };
2363
2514
  }
2364
- function _r(e, t, n = []) {
2515
+ function Ir(e, t, n = []) {
2365
2516
  let r = [...e, ...t], i = new Map(r.map((e) => [e.key, e])), a = [];
2366
2517
  for (let e of n) {
2367
2518
  let t = i.get(e);
@@ -2369,7 +2520,7 @@ function _r(e, t, n = []) {
2369
2520
  }
2370
2521
  return [...a, ...r.filter((e) => !a.includes(e))];
2371
2522
  }
2372
- function vr(e) {
2523
+ function Lr(e) {
2373
2524
  let t = /* @__PURE__ */ new Map();
2374
2525
  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));
2375
2526
  let n = /* @__PURE__ */ new Map();
@@ -2383,571 +2534,474 @@ function vr(e) {
2383
2534
  return n;
2384
2535
  }
2385
2536
  // ../explorer/layer-model.js
2386
- var yr = (e) => (e.projectLayers || []).some((e) => e.match && e.match.parent !== void 0) ? (t) => ar(e.edges || []).get(t.id) : void 0;
2387
- function br(e, t) {
2537
+ var Rr = (e) => (e.projectLayers || []).some((e) => e.match && e.match.parent !== void 0) ? (t) => Cr(e.edges || []).get(t.id) : void 0;
2538
+ function zr(e, t) {
2388
2539
  let n = e.projectLayers;
2389
- return !n || !n.length ? null : lr(n, t, yr(e));
2540
+ return !n || !n.length ? null : Or(n, t, Rr(e));
2390
2541
  }
2391
- var xr = (e, t) => ur(e.projectLayers || [], t, yr(e)), Sr = /* @__PURE__ */ new WeakMap();
2392
- function Cr(e) {
2393
- let t = e.edges || [], n = Sr.get(e.nodes);
2542
+ var Br = (e, t) => kr(e.projectLayers || [], t, Rr(e)), Vr = /* @__PURE__ */ new WeakMap();
2543
+ function Hr(e) {
2544
+ let t = e.edges || [], n = Vr.get(e.nodes);
2394
2545
  if (n && n.edges === t && n.n === e.nodes.length && n.e === t.length) return n.touched;
2395
- let r = Bt(e.nodes, t).touched;
2396
- return Sr.set(e.nodes, {
2546
+ let r = qt(e.nodes, t).touched;
2547
+ return Vr.set(e.nodes, {
2397
2548
  edges: t,
2398
2549
  n: e.nodes.length,
2399
2550
  e: t.length,
2400
2551
  touched: r
2401
2552
  }), r;
2402
2553
  }
2403
- var wr = (e, t) => !!e.proposal && Cr(e).has(t.id), Tr = /* @__PURE__ */ new WeakMap();
2404
- function Er(e, t) {
2554
+ var Ur = (e, t) => !!e.proposal && Hr(e).has(t.id), Wr = /* @__PURE__ */ new WeakMap();
2555
+ function Gr(e, t) {
2405
2556
  if (typeof t.kind != "string" || !t.kind || t.type === "external") return "";
2406
- let n = Tr.get(e.nodes);
2557
+ let n = Wr.get(e.nodes);
2407
2558
  n && n.n === e.nodes.length || (n = {
2408
2559
  n: e.nodes.length,
2409
- map: vr(e.nodes)
2410
- }, Tr.set(e.nodes, n));
2560
+ map: Lr(e.nodes)
2561
+ }, Wr.set(e.nodes, n));
2411
2562
  let r = n.map.get(t.type);
2412
2563
  return r && r.get(t.kind) || "";
2413
2564
  }
2414
- var Dr = Object.freeze({
2565
+ var Kr = Object.freeze({
2415
2566
  core: ["pkg"],
2416
2567
  store: ["flow"],
2417
2568
  rom: ["flow"]
2418
- }), Or = (e) => !!e && !!e.mark && e.mark !== "none";
2419
- function kr({ nodes: e, edges: t, rowOf: n, flight: r = null }) {
2420
- let { touched: i } = Bt(e, t), a = /* @__PURE__ */ new Set();
2569
+ }), qr = (e) => !!e && !!e.mark && e.mark !== "none";
2570
+ function Jr({ nodes: e, edges: t, rowOf: n, flight: r = null }) {
2571
+ let { touched: i } = qt(e, t), a = /* @__PURE__ */ new Set();
2421
2572
  for (let t of e) {
2422
2573
  if (!i.has(t.id)) continue;
2423
2574
  let e = n(t);
2424
2575
  if (e) {
2425
2576
  a.add(e);
2426
- for (let t of Dr[e] || []) a.add(t);
2577
+ for (let t of Kr[e] || []) a.add(t);
2427
2578
  }
2428
2579
  r && r.has(t.id) && a.add("runs");
2429
2580
  }
2430
- for (let e of t) Or(e) && e.kind === "flow" && a.add("flow");
2581
+ for (let e of t) qr(e) && e.kind === "flow" && a.add("flow");
2431
2582
  return a;
2432
2583
  }
2433
- function Ar({ active: e, touched: t, universe: n, review: r }) {
2584
+ function Yr({ active: e, touched: t, universe: n, review: r }) {
2434
2585
  let i = { ...e };
2435
2586
  if (!r.whole && t.size) for (let e of n) i[e] = t.has(e);
2436
2587
  return Object.assign(i, r.manual || {}, r.step || {}), i;
2437
2588
  }
2438
- var jr = /* @__PURE__ */ new WeakMap();
2439
- function Mr(e) {
2440
- let t = e.nodes, n = e.edges || [], r = e.runsMap ? e.runsMap.flight : null, i = jr.get(t);
2589
+ var Xr = /* @__PURE__ */ new WeakMap();
2590
+ function Zr(e) {
2591
+ let t = e.nodes, n = e.edges || [], r = e.runsMap ? e.runsMap.flight : null, i = Xr.get(t);
2441
2592
  if (i && i.edges === n && i.n === t.length && i.e === n.length && i.flight === r && i.project === e.projectLayers) return i;
2442
- let a = kr({
2593
+ let a = Jr({
2443
2594
  nodes: t,
2444
- edges: n,
2445
- rowOf: (t) => xr(e, t),
2446
- flight: r
2447
- }), o = /* @__PURE__ */ new Set([
2448
- ...Gn.map((e) => e.key),
2449
- ...(e.projectLayers || []).map((e) => e.key),
2450
- ...t.map((t) => xr(e, t)).filter(Boolean)
2451
- ]), s = {
2452
- edges: n,
2453
- n: t.length,
2454
- e: n.length,
2455
- flight: r,
2456
- project: e.projectLayers,
2457
- touched: a,
2458
- universe: o
2459
- };
2460
- return jr.set(t, s), s;
2461
- }
2462
- var Nr = /* @__PURE__ */ new WeakMap();
2463
- function z(e) {
2464
- let t = e.review;
2465
- if (!t || !e.proposal) return e.activeLayers;
2466
- let n = Nr.get(t);
2467
- if (n && n.rev === t.rev && n.version === e.sceneVersion && n.active === e.activeLayers && n.nodes === e.nodes) return n.out;
2468
- let { touched: r, universe: i } = Mr(e), a = Ar({
2469
- active: e.activeLayers,
2470
- touched: r,
2471
- universe: i,
2472
- review: t
2473
- });
2474
- return Nr.set(t, {
2475
- rev: t.rev,
2476
- version: e.sceneVersion,
2477
- active: e.activeLayers,
2478
- nodes: e.nodes,
2479
- out: a
2480
- }), a;
2481
- }
2482
- var Pr = (e, t) => z(e)[t] !== !1;
2483
- function Fr(e, t) {
2484
- let n = e.review;
2485
- return !n || !e.proposal || n.whole || e.activeLayers[t] === !1 || Object.hasOwn(n.manual || {}, t) || Object.hasOwn(n.step || {}, t) ? !1 : z(e)[t] === !1;
2486
- }
2487
- var Ir = (e) => !!e.review && !!e.proposal && !e.review.whole && Cr(e).size > 0, Lr = Object.freeze({
2488
- aliceblue: "#f0f8ff",
2489
- antiquewhite: "#faebd7",
2490
- aqua: "#00ffff",
2491
- aquamarine: "#7fffd4",
2492
- azure: "#f0ffff",
2493
- beige: "#f5f5dc",
2494
- bisque: "#ffe4c4",
2495
- black: "#000000",
2496
- blanchedalmond: "#ffebcd",
2497
- blue: "#0000ff",
2498
- blueviolet: "#8a2be2",
2499
- brown: "#a52a2a",
2500
- burlywood: "#deb887",
2501
- cadetblue: "#5f9ea0",
2502
- chartreuse: "#7fff00",
2503
- chocolate: "#d2691e",
2504
- coral: "#ff7f50",
2505
- cornflowerblue: "#6495ed",
2506
- cornsilk: "#fff8dc",
2507
- crimson: "#dc143c",
2508
- cyan: "#00ffff",
2509
- darkblue: "#00008b",
2510
- darkcyan: "#008b8b",
2511
- darkgoldenrod: "#b8860b",
2512
- darkgray: "#a9a9a9",
2513
- darkgreen: "#006400",
2514
- darkgrey: "#a9a9a9",
2515
- darkkhaki: "#bdb76b",
2516
- darkmagenta: "#8b008b",
2517
- darkolivegreen: "#556b2f",
2518
- darkorange: "#ff8c00",
2519
- darkorchid: "#9932cc",
2520
- darkred: "#8b0000",
2521
- darksalmon: "#e9967a",
2522
- darkseagreen: "#8fbc8f",
2523
- darkslateblue: "#483d8b",
2524
- darkslategray: "#2f4f4f",
2525
- darkslategrey: "#2f4f4f",
2526
- darkturquoise: "#00ced1",
2527
- darkviolet: "#9400d3",
2528
- deeppink: "#ff1493",
2529
- deepskyblue: "#00bfff",
2530
- dimgray: "#696969",
2531
- dimgrey: "#696969",
2532
- dodgerblue: "#1e90ff",
2533
- firebrick: "#b22222",
2534
- floralwhite: "#fffaf0",
2535
- forestgreen: "#228b22",
2536
- fuchsia: "#ff00ff",
2537
- gainsboro: "#dcdcdc",
2538
- ghostwhite: "#f8f8ff",
2539
- gold: "#ffd700",
2540
- goldenrod: "#daa520",
2541
- gray: "#808080",
2542
- green: "#008000",
2543
- greenyellow: "#adff2f",
2544
- grey: "#808080",
2545
- honeydew: "#f0fff0",
2546
- hotpink: "#ff69b4",
2547
- indianred: "#cd5c5c",
2548
- indigo: "#4b0082",
2549
- ivory: "#fffff0",
2550
- khaki: "#f0e68c",
2551
- lavender: "#e6e6fa",
2552
- lavenderblush: "#fff0f5",
2553
- lawngreen: "#7cfc00",
2554
- lemonchiffon: "#fffacd",
2555
- lightblue: "#add8e6",
2556
- lightcoral: "#f08080",
2557
- lightcyan: "#e0ffff",
2558
- lightgoldenrodyellow: "#fafad2",
2559
- lightgray: "#d3d3d3",
2560
- lightgreen: "#90ee90",
2561
- lightgrey: "#d3d3d3",
2562
- lightpink: "#ffb6c1",
2563
- lightsalmon: "#ffa07a",
2564
- lightseagreen: "#20b2aa",
2565
- lightskyblue: "#87cefa",
2566
- lightslategray: "#778899",
2567
- lightslategrey: "#778899",
2568
- lightsteelblue: "#b0c4de",
2569
- lightyellow: "#ffffe0",
2570
- lime: "#00ff00",
2571
- limegreen: "#32cd32",
2572
- linen: "#faf0e6",
2573
- magenta: "#ff00ff",
2574
- maroon: "#800000",
2575
- mediumaquamarine: "#66cdaa",
2576
- mediumblue: "#0000cd",
2577
- mediumorchid: "#ba55d3",
2578
- mediumpurple: "#9370db",
2579
- mediumseagreen: "#3cb371",
2580
- mediumslateblue: "#7b68ee",
2581
- mediumspringgreen: "#00fa9a",
2582
- mediumturquoise: "#48d1cc",
2583
- mediumvioletred: "#c71585",
2584
- midnightblue: "#191970",
2585
- mintcream: "#f5fffa",
2586
- mistyrose: "#ffe4e1",
2587
- moccasin: "#ffe4b5",
2588
- navajowhite: "#ffdead",
2589
- navy: "#000080",
2590
- oldlace: "#fdf5e6",
2591
- olive: "#808000",
2592
- olivedrab: "#6b8e23",
2593
- orange: "#ffa500",
2594
- orangered: "#ff4500",
2595
- orchid: "#da70d6",
2596
- palegoldenrod: "#eee8aa",
2597
- palegreen: "#98fb98",
2598
- paleturquoise: "#afeeee",
2599
- palevioletred: "#db7093",
2600
- papayawhip: "#ffefd5",
2601
- peachpuff: "#ffdab9",
2602
- peru: "#cd853f",
2603
- pink: "#ffc0cb",
2604
- plum: "#dda0dd",
2605
- powderblue: "#b0e0e6",
2606
- purple: "#800080",
2607
- rebeccapurple: "#663399",
2608
- red: "#ff0000",
2609
- rosybrown: "#bc8f8f",
2610
- royalblue: "#4169e1",
2611
- saddlebrown: "#8b4513",
2612
- salmon: "#fa8072",
2613
- sandybrown: "#f4a460",
2614
- seagreen: "#2e8b57",
2615
- seashell: "#fff5ee",
2616
- sienna: "#a0522d",
2617
- silver: "#c0c0c0",
2618
- skyblue: "#87ceeb",
2619
- slateblue: "#6a5acd",
2620
- slategray: "#708090",
2621
- slategrey: "#708090",
2622
- snow: "#fffafa",
2623
- springgreen: "#00ff7f",
2624
- steelblue: "#4682b4",
2625
- tan: "#d2b48c",
2626
- teal: "#008080",
2627
- thistle: "#d8bfd8",
2628
- tomato: "#ff6347",
2629
- turquoise: "#40e0d0",
2630
- violet: "#ee82ee",
2631
- wheat: "#f5deb3",
2632
- white: "#ffffff",
2633
- whitesmoke: "#f5f5f5",
2634
- yellow: "#ffff00",
2635
- yellowgreen: "#9acd32"
2636
- }), Rr = "[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?", zr = (e, t, n) => Math.min(n, Math.max(t, e));
2637
- function Br(e, t) {
2638
- let n = RegExp(`^${t}\\(`, "i").exec(e);
2639
- if (!n || !e.endsWith(")")) return null;
2640
- let r = 0;
2641
- for (let t = n[0].length - 1; t < e.length; t++) if (e[t] === "(") r++;
2642
- else if (e[t] === ")" && --r === 0 && t !== e.length - 1) return null;
2643
- return r === 0 ? e.slice(n[0].length, -1) : null;
2644
- }
2645
- function Vr(e, t) {
2646
- let n = [], r = 0, i = 0;
2647
- 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);
2648
- return n.push(e.slice(i)), n;
2595
+ edges: n,
2596
+ rowOf: (t) => Br(e, t),
2597
+ flight: r
2598
+ }), o = /* @__PURE__ */ new Set([
2599
+ ...lr.map((e) => e.key),
2600
+ ...(e.projectLayers || []).map((e) => e.key),
2601
+ ...t.map((t) => Br(e, t)).filter(Boolean)
2602
+ ]), s = {
2603
+ edges: n,
2604
+ n: t.length,
2605
+ e: n.length,
2606
+ flight: r,
2607
+ project: e.projectLayers,
2608
+ touched: a,
2609
+ universe: o
2610
+ };
2611
+ return Xr.set(t, s), s;
2649
2612
  }
2650
- var Hr = (e, t) => {
2651
- let n = RegExp(`^(${Rr})(%?)$`, "i").exec(e);
2652
- return n ? n[2] ? Number(n[1]) / 100 * t : Number(n[1]) : null;
2653
- }, Ur = (e) => e === void 0 ? 1 : (() => {
2654
- let t = Hr(e, 1);
2655
- return t === null ? null : zr(t, 0, 1);
2656
- })();
2657
- function Wr(e, t, n) {
2658
- 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)));
2659
- return [
2660
- a(0) * 255,
2661
- a(8) * 255,
2662
- a(4) * 255
2663
- ];
2613
+ var Qr = /* @__PURE__ */ new WeakMap();
2614
+ function V(e) {
2615
+ let t = e.review;
2616
+ if (!t || !e.proposal) return e.activeLayers;
2617
+ let n = Qr.get(t);
2618
+ if (n && n.rev === t.rev && n.version === e.sceneVersion && n.active === e.activeLayers && n.nodes === e.nodes) return n.out;
2619
+ let { touched: r, universe: i } = Zr(e), a = Yr({
2620
+ active: e.activeLayers,
2621
+ touched: r,
2622
+ universe: i,
2623
+ review: t
2624
+ });
2625
+ return Qr.set(t, {
2626
+ rev: t.rev,
2627
+ version: e.sceneVersion,
2628
+ active: e.activeLayers,
2629
+ nodes: e.nodes,
2630
+ out: a
2631
+ }), a;
2664
2632
  }
2665
- function Gr(e) {
2666
- let t = e.trim();
2667
- if (t.includes(",")) {
2668
- let e = t.split(/\s*,\s*/);
2669
- return (e.length === 3 || e.length === 4) && e.every((e) => e && !/[\s/]/.test(e)) ? e : null;
2670
- }
2671
- let n = /^(\S+)\s+(\S+)\s+([^\s/]+)(?:\s*\/\s*(\S+))?$/.exec(t);
2672
- return n && !n.slice(1, 4).some((e) => e.includes("/")) ? n.slice(1, n[4] === void 0 ? 4 : 5) : null;
2633
+ var $r = (e, t) => V(e)[t] !== !1;
2634
+ function ei(e, t) {
2635
+ let n = e.review;
2636
+ return !n || !e.proposal || n.whole || e.activeLayers[t] === !1 || Object.hasOwn(n.manual || {}, t) || Object.hasOwn(n.step || {}, t) ? !1 : V(e)[t] === !1;
2673
2637
  }
2674
- function Kr(e, t = 0) {
2675
- let n = String(e).trim().toLowerCase();
2676
- if (n === "transparent") return [
2677
- 0,
2678
- 0,
2679
- 0,
2680
- 0
2681
- ];
2682
- if (Lr[n]) return Kr(Lr[n], t);
2683
- let r = /^#([0-9a-f]{3,4})$/.exec(n);
2684
- if (r) {
2685
- let e = [...r[1]].map((e) => parseInt(e + e, 16));
2686
- return [
2687
- e[0],
2688
- e[1],
2689
- e[2],
2690
- e.length === 4 ? e[3] / 255 : 1
2691
- ];
2638
+ var ti = (e) => !!e.review && !!e.proposal && !e.review.whole && Hr(e).size > 0, ni = {
2639
+ outbox: {
2640
+ color: "#f59e0b",
2641
+ label: "Outbox → API (writes)"
2642
+ },
2643
+ changes: {
2644
+ color: "#22d3ee",
2645
+ label: "Change stream (reads back)"
2646
+ },
2647
+ trigger: {
2648
+ color: "#a3e635",
2649
+ label: "Trigger → audit_log (seq)"
2650
+ },
2651
+ sync: {
2652
+ color: "#fb7185",
2653
+ label: "Background sync (external)"
2654
+ },
2655
+ model: {
2656
+ color: "#c084fc",
2657
+ label: "Model classes feed a tier"
2658
+ },
2659
+ rom: {
2660
+ color: "#f0abfc",
2661
+ label: "ROM: change → re-bake → serve"
2662
+ },
2663
+ read: {
2664
+ color: "#93c5fd",
2665
+ label: "Server reads rows over HTTP"
2666
+ },
2667
+ api: {
2668
+ color: "#38bdf8",
2669
+ label: "App calls the API (derived from its code)"
2670
+ },
2671
+ build: {
2672
+ color: "#d6d3d1",
2673
+ label: "Build script writes files"
2674
+ },
2675
+ reads: {
2676
+ color: "#fde047",
2677
+ label: "Table → page (render reads)"
2678
+ },
2679
+ writes: {
2680
+ color: "#f87171",
2681
+ label: "Page → table (form / action)"
2682
+ },
2683
+ uses: {
2684
+ color: "#f472b6",
2685
+ label: "Stylesheet uses design tokens"
2686
+ },
2687
+ extends: {
2688
+ color: "#5eead4",
2689
+ label: "Component extends a base class"
2690
+ },
2691
+ calls: {
2692
+ color: "#fb7185",
2693
+ label: "Calls (service → service, outside system)"
2694
+ },
2695
+ triggers: {
2696
+ color: "#a3e635",
2697
+ label: "Triggers (cron, webhook, store change)"
2698
+ },
2699
+ delivers: {
2700
+ color: "#94a3b8",
2701
+ label: "Outside system → webhook endpoint"
2702
+ },
2703
+ "runs-on": {
2704
+ color: "#a8a29e",
2705
+ label: "App → the stack that serves its domain"
2692
2706
  }
2693
- if (r = /^#([0-9a-f]{6}|[0-9a-f]{8})$/.exec(n), r) {
2694
- let e = r[1];
2695
- return [
2696
- parseInt(e.slice(0, 2), 16),
2697
- parseInt(e.slice(2, 4), 16),
2698
- parseInt(e.slice(4, 6), 16),
2699
- e.length === 8 ? parseInt(e.slice(6, 8), 16) / 255 : 1
2700
- ];
2707
+ }, ri = (e) => ni[e.kind === "flow" ? e.flow : e.kind] || ni.sync, H = {
2708
+ run: {
2709
+ title: "Breaks now",
2710
+ legend: "No tick: breaks as soon as it is down",
2711
+ ticks: 0,
2712
+ color: "#f87171"
2713
+ },
2714
+ deploy: {
2715
+ title: "Breaks at the next deploy",
2716
+ legend: "One tick: breaks at the next deploy, rebuild or first run",
2717
+ ticks: 1,
2718
+ color: "#fbbf24"
2719
+ },
2720
+ renew: {
2721
+ title: "Breaks at the next certificate renewal",
2722
+ legend: "Two ticks: breaks at the next certificate renewal",
2723
+ ticks: 2,
2724
+ color: "#a78bfa"
2701
2725
  }
2702
- let i = Br(n, "rgba?");
2703
- if (i !== null) {
2704
- let e = Gr(i);
2705
- if (!e) return null;
2706
- let t = e.slice(0, 3).map((e) => Hr(e, 255)), n = Ur(e[3]);
2707
- return t.some((e) => e === null) || n === null ? null : [...t.map((e) => zr(e, 0, 255)), n];
2726
+ }, ii = (e) => e && Object.hasOwn(H, e.when) ? e.when : "run", ai = (e) => e && e.kind === "calls" ? H[ii(e)].ticks : 0, oi = (e) => e && e.kind === "web" ? "web" : "cloud", si = Object.keys(H), ci = Object.fromEntries(si.map((e, t) => [e, t])), li = /* @__PURE__ */ new Set([
2727
+ "persona",
2728
+ "room",
2729
+ "floor"
2730
+ ]), ui = [
2731
+ "external",
2732
+ "machine",
2733
+ "container",
2734
+ "service",
2735
+ "page",
2736
+ "app"
2737
+ ], di = (e) => {
2738
+ let t = ui.indexOf(e);
2739
+ return t < 0 ? ui.length : t;
2740
+ }, fi = {
2741
+ color: "#050608",
2742
+ halo: "child"
2743
+ }, pi = {
2744
+ alpha: .92,
2745
+ glow: 10,
2746
+ edgeAlpha: .9,
2747
+ edgeWidth: 2.2
2748
+ }, mi = (e, t) => `${e}->${t}`;
2749
+ function hi(e, t, n) {
2750
+ 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) => {
2751
+ o.has(e) || o.set(e, []), o.get(e).push(t);
2752
+ }, c = /* @__PURE__ */ new Map();
2753
+ for (let e of n) if (e && e.from && e.to) {
2754
+ if (e.kind === "calls") s(e.to, {
2755
+ from: e.from,
2756
+ rank: ci[ii(e)],
2757
+ browser: e.side === "browser",
2758
+ key: mi(e.from, e.to)
2759
+ });
2760
+ else if (e.kind === "triggers" && (r.get(e.from) || {}).type === "page" && (r.get(e.to) || {}).type === "service") s(e.to, {
2761
+ from: e.from,
2762
+ rank: 0,
2763
+ browser: !1,
2764
+ key: mi(e.from, e.to)
2765
+ });
2766
+ else if (e.kind === "runs-on" && Array.isArray(e.mappings)) for (let t of e.mappings) {
2767
+ if (!t || !t.service) continue;
2768
+ let n = `${e.to}|${t.service}`;
2769
+ c.has(n) || c.set(n, /* @__PURE__ */ new Set()), c.get(n).add(e.from);
2770
+ }
2708
2771
  }
2709
- let a = Br(n, "hsla?");
2710
- if (a !== null) {
2711
- let e = Gr(a);
2712
- if (!e) return null;
2713
- let t = RegExp(`^(${Rr})(?:deg)?$`).exec(e[0]), n = /%$/.test(e[1]) ? Hr(e[1], 1) : null, r = /%$/.test(e[2]) ? Hr(e[2], 1) : null, i = Ur(e[3]);
2714
- return !t || n === null || r === null || i === null ? null : [...Wr((Number(t[1]) % 360 + 360) % 360, zr(n, 0, 1), zr(r, 0, 1)), i];
2772
+ let l = (e) => {
2773
+ let t = o.get(e) || [], n = r.get(e);
2774
+ if (!n || n.type !== "container" || !n.stack || !n.service) return t;
2775
+ let i = [...c.get(`stack-${n.stack}|${n.service}`) || []].map((e) => ({
2776
+ from: e,
2777
+ rank: 0,
2778
+ browser: !1,
2779
+ key: null
2780
+ }));
2781
+ return i.length ? [...t, ...i] : t;
2782
+ }, u = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Map(), f = si.map(() => []);
2783
+ i.forEach((e) => f[0].push({
2784
+ id: e,
2785
+ rank: 0,
2786
+ browser: !1
2787
+ }));
2788
+ for (let e = 0; e < f.length; e++) for (let t = 0; t < f[e].length; t++) {
2789
+ let { id: n, rank: i, browser: o } = f[e][t], s = u.get(n);
2790
+ if (!(s && (s.rank < i || s.rank === i && s.browser !== o))) for (let e of l(n)) {
2791
+ let t = r.get(e.from);
2792
+ if (!t || a.has(e.from) || li.has(t.type)) continue;
2793
+ let n = Math.max(i, e.rank), s = o || e.browser;
2794
+ e.key && (!d.has(e.key) || ci[d.get(e.key)] > n) && d.set(e.key, si[n]);
2795
+ let c = u.get(e.from);
2796
+ c && (c.rank < n || c.rank === n && (!c.browser || s)) || (u.set(e.from, {
2797
+ rank: n,
2798
+ when: si[n],
2799
+ browser: s
2800
+ }), f[n].push({
2801
+ id: e.from,
2802
+ rank: n,
2803
+ browser: s
2804
+ }));
2805
+ }
2715
2806
  }
2716
- let o = t < 8 ? Br(n, "color-mix") : null;
2717
- if (o !== null) {
2718
- let e = Vr(o, ",").map((e) => e.trim());
2719
- if (e.length !== 3 || !/^in\s+srgb$/.test(e[0])) return null;
2720
- let n = (e) => {
2721
- 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 = Kr(i, t + 1);
2722
- return o && {
2723
- c: o,
2724
- p: a === null ? null : Number(a) / 100
2807
+ let p = new Map([...u].map(([e, t]) => [e, {
2808
+ when: t.when,
2809
+ browser: t.browser
2810
+ }])), m = (e) => String(r.get(e).label || e);
2811
+ return {
2812
+ down: i,
2813
+ hits: p,
2814
+ edges: d,
2815
+ groups: si.map((e) => {
2816
+ let t = [...p].filter(([, t]) => t.when === e).map(([e]) => e).sort((e, t) => di(r.get(e).type) - di(r.get(t).type) || m(e).localeCompare(m(t))), { title: n, color: i } = H[e];
2817
+ return {
2818
+ when: e,
2819
+ title: n,
2820
+ color: i,
2821
+ ids: t
2725
2822
  };
2726
- }, r = n(e[1]), i = n(e[2]);
2727
- if (!r || !i || r.p !== null && (r.p < 0 || r.p > 1) || i.p !== null && (i.p < 0 || i.p > 1)) return null;
2728
- let a = r.p ?? (i.p === null ? .5 : 1 - i.p), s = i.p ?? 1 - a;
2729
- return a + s <= 0 ? null : Jr(r.c, a, i.c, s);
2823
+ }).filter((e) => e.ids.length)
2824
+ };
2825
+ }
2826
+ var U = null;
2827
+ function gi(e, t, n) {
2828
+ let r = e && Array.isArray(e.down) ? e.down : [];
2829
+ if (!r.length) return null;
2830
+ let i = r.join("\0");
2831
+ return U && U.key === i && U.nodes === t && U.edges === n || (U = {
2832
+ key: i,
2833
+ nodes: t,
2834
+ edges: n,
2835
+ radius: hi(r, t, n)
2836
+ }), U.radius;
2837
+ }
2838
+ function _i(e, t) {
2839
+ if (!t) return;
2840
+ let n = new Set(t.down);
2841
+ for (let r of e.nodes) {
2842
+ if (n.has(r.id)) {
2843
+ Object.assign(r, {
2844
+ color: fi.color,
2845
+ alpha: 1,
2846
+ labelAlpha: 1,
2847
+ labelColor: "#f8fafc",
2848
+ labelKeep: !0,
2849
+ labelStrike: !0,
2850
+ connected: !0,
2851
+ glow: 0
2852
+ }), r.halo === "none" && (r.halo = fi.halo);
2853
+ continue;
2854
+ }
2855
+ let e = t.hits.get(r.id);
2856
+ if (!e) continue;
2857
+ let i = Math.max(r.alpha, pi.alpha);
2858
+ Object.assign(r, {
2859
+ color: H[e.when].color,
2860
+ alpha: i,
2861
+ labelAlpha: i,
2862
+ labelColor: "#f8fafc",
2863
+ labelKeep: !0,
2864
+ connected: !0,
2865
+ glow: Math.max(r.glow || 0, pi.glow)
2866
+ });
2730
2867
  }
2731
- return null;
2732
- }
2733
- function qr(e) {
2734
- if (String(e).length > 4096) return null;
2735
- try {
2736
- return Kr(e);
2737
- } catch {
2738
- return null;
2868
+ for (let n of e.edges) {
2869
+ let e = t.edges.get(mi(n.from, n.to));
2870
+ if (!e) continue;
2871
+ let r = H[e].color;
2872
+ n.color = r, n.glow && (n.glowColor = r), n.alpha = Math.max(n.alpha, pi.edgeAlpha), n.width = Math.max(n.width, pi.edgeWidth), n.packet &&= {
2873
+ ...n.packet,
2874
+ glowColor: r
2875
+ };
2739
2876
  }
2740
2877
  }
2741
- function B(e) {
2742
- return qr(e) ?? [
2743
- 0,
2744
- 0,
2745
- 0,
2746
- 0
2747
- ];
2748
- }
2749
- function Jr(e, t, n, r) {
2750
- 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;
2751
- return [
2752
- c(0),
2753
- c(1),
2754
- c(2),
2755
- s * Math.min(1, i)
2756
- ];
2757
- }
2758
- function Yr(e, t) {
2759
- let n = e[3];
2760
- return [
2761
- 0,
2762
- 1,
2763
- 2
2764
- ].map((r) => Math.round(e[r] * n + t[r] * (1 - n))).concat(1);
2878
+ // ../explorer/house-model.js
2879
+ var vi = /* @__PURE__ */ new Set([
2880
+ "container",
2881
+ "stack",
2882
+ "machine"
2883
+ ]);
2884
+ function yi(e, t) {
2885
+ return !!(e.house && e.house.shown && e.house.shown.has(t.id));
2765
2886
  }
2766
- var Xr = (e) => {
2767
- let t = e / 255;
2768
- return t <= .03928 ? t / 12.92 : ((t + .055) / 1.055) ** 2.4;
2769
- }, V = ([e, t, n]) => .2126 * Xr(e) + .7152 * Xr(t) + .0722 * Xr(n), Zr = (e, t) => (Math.max(e, t) + .05) / (Math.min(e, t) + .05), Qr = (e, t) => Zr(V(B(e)), V(B(t))), H = Object.freeze({
2770
- dark: Object.freeze({
2771
- added: "#2dd4bf",
2772
- changed: "#fbbf24",
2773
- removed: "#fa9292",
2774
- edit: "#b49cfb"
2775
- }),
2776
- light: Object.freeze({
2777
- added: "#197c6f",
2778
- changed: "#8f6703",
2779
- removed: "#e20b0b",
2780
- edit: "#6839f6"
2781
- })
2782
- }), $r = .85, ei = .9, ti = .6, ni = .45, ri = Object.freeze({
2783
- light: ti,
2784
- dark: .5
2785
- }), ii = Object.freeze({
2786
- added: Object.freeze({
2787
- ringDash: Object.freeze([5, 4]),
2788
- edgeDash: Object.freeze([7, 5]),
2789
- strike: !1
2790
- }),
2791
- changed: Object.freeze({
2792
- ringDash: null,
2793
- edgeDash: null,
2794
- strike: !1
2795
- }),
2796
- removed: Object.freeze({
2797
- ringDash: null,
2798
- edgeDash: Object.freeze([3, 4]),
2799
- strike: !0
2800
- }),
2801
- edit: Object.freeze({
2802
- ringDash: Object.freeze([2, 5]),
2803
- edgeDash: Object.freeze([12, 4]),
2804
- strike: !1
2805
- })
2806
- }), ai = "#f4f6fa", oi = "#090d16", si = {
2807
- mark: 3.2,
2808
- text: 4.8
2809
- }, ci = .16, li = 1.35, ui = .11;
2810
- function di(e, t) {
2811
- return e === "light" || e === "dark" ? e : t ? "light" : "dark";
2887
+ var bi = null;
2888
+ function xi(e) {
2889
+ let t = e.house && e.house.cloudLines;
2890
+ return !t || !t.length ? e.edges : (bi && bi.edges === e.edges && bi.lines === t || (bi = {
2891
+ edges: e.edges,
2892
+ lines: t,
2893
+ all: [...e.edges, ...t]
2894
+ }), bi.all);
2812
2895
  }
2813
- function fi([e, t, n]) {
2814
- 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;
2815
- if (o === s) return [
2816
- 0,
2817
- 0,
2818
- c
2819
- ];
2820
- let l = o - s, u = c > .5 ? l / (2 - o - s) : l / (o + s);
2821
- return [
2822
- (o === r ? (i - a) / l + (i < a ? 6 : 0) : o === i ? (a - r) / l + 2 : (r - i) / l + 4) * 60,
2823
- u,
2824
- c
2825
- ];
2896
+ function Si(e, t, n) {
2897
+ return e.kind === "runs-on" || e.kind === "delivers" ? "flow" : e.kind === "calls" && n && n.type === "external" ? e.rolled || !(t && vi.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;
2826
2898
  }
2827
- function pi([e, t, n]) {
2828
- 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));
2829
- return [
2830
- a(0),
2831
- a(8),
2832
- a(4)
2833
- ].map((e) => Math.round(e * 255));
2899
+ var Ci = [
2900
+ "persona",
2901
+ "machine",
2902
+ "stack",
2903
+ "floor",
2904
+ "external"
2905
+ ];
2906
+ function wi(e, t) {
2907
+ let n = t.house;
2908
+ e.decor.rings = [], e.decor.lanes = n && n.lanes ? n.lanes : [];
2909
+ for (let t of e.nodes) t.type === "room" ? (t.label = "", t.labelKeep = !1) : Ci.includes(t.type) && (t.labelKeep = !0);
2910
+ return n && n.cloudIds && n.cloudIds.size && ki(e, t), e;
2834
2911
  }
2835
- var mi = (e) => `#${e.map((e) => e.toString(16).padStart(2, "0")).join("")}`, hi = (e, t) => t >= 1 ? mi(e) : `rgba(${e.join(", ")}, ${+t.toFixed(3)})`, gi = V(B(ai)), _i = /* @__PURE__ */ new Map();
2836
- function U(e, t = "mark") {
2837
- let n = `${t}|${e}`, r = _i.get(n);
2838
- if (r !== void 0) return r;
2839
- let i = vi(e, t);
2840
- return _i.set(n, i), i;
2912
+ var Ti = {
2913
+ run: .9,
2914
+ deploy: .25,
2915
+ renew: .9
2916
+ }, Ei = {
2917
+ alpha: .9,
2918
+ width: 2.2
2919
+ }, Di = Object.keys(H), Oi = (e) => Di.find((t) => H[t].ticks === (e.ticks || 0)) || "run";
2920
+ function ki(e, t) {
2921
+ let n = t.house, r = t.scenario ? gi(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;
2922
+ e.edges = e.edges.filter((e) => {
2923
+ if (e.kind !== "calls" || !n.cloudIds.has(e.to)) return !0;
2924
+ let t = Oi(e);
2925
+ if (r) {
2926
+ 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;
2927
+ if (i && s) {
2928
+ let n = Di[Math.max(Di.indexOf(s), Di.indexOf(t))];
2929
+ return Object.assign(e, {
2930
+ color: H[n].color,
2931
+ alpha: Math.max(e.alpha, Ei.alpha),
2932
+ width: Math.max(e.width, Ei.width)
2933
+ }), e.glow && (e.glowColor = e.color), !0;
2934
+ }
2935
+ return !n.phone || r.edges.has(`${e.from}->${e.to}`);
2936
+ }
2937
+ return i ? !n.phone || e.alpha >= .5 : !n.phone && (e.alpha = Ti[t], !0);
2938
+ });
2841
2939
  }
2842
- function vi(e, t) {
2843
- if (typeof e != "string") return e;
2844
- let [n, r, i, a] = B(e);
2845
- if (a === 0) return e;
2846
- let [o, s, c] = fi([
2847
- n,
2848
- r,
2849
- i
2850
- ]);
2851
- if ((Math.max(n, r, i) - Math.min(n, r, i)) / 255 < ci && c > .5) return hi(pi([
2852
- o,
2853
- s,
2854
- Math.max(ui, 1 - c)
2855
- ]), a);
2856
- let l = si[t] || si.mark;
2857
- if (Zr(V([
2858
- n,
2859
- r,
2860
- i
2861
- ]), gi) >= l) return e;
2862
- let u = 0, d = c;
2863
- for (let e = 0; e < 20; e++) {
2864
- let e = (u + d) / 2;
2865
- Zr(V(pi([
2866
- o,
2867
- s,
2868
- e
2869
- ])), gi) >= l ? u = e : d = e;
2870
- }
2871
- return hi(pi([
2872
- o,
2873
- s,
2874
- u
2875
- ]), a);
2940
+ // ../explorer/verdict-paint.js
2941
+ var Ai = {
2942
+ allowed: "#4ade80",
2943
+ refused: "#ff2d55",
2944
+ mismatch: "#fbbf24"
2945
+ }, ji = 18, Mi = 4.5;
2946
+ function Ni(e, t) {
2947
+ 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";
2876
2948
  }
2877
- var yi = (e, t, n = "mark") => t === "light" ? U(e, n) : e, bi = (e) => {
2878
- e && (e.color = U(e.color, "text"));
2879
- };
2880
- function xi(e) {
2881
- e.theme = "light";
2882
- for (let t of e.nodes) t.color = U(t.color), t.labelColor = U(t.labelColor, "text");
2883
- for (let t of e.edges) {
2884
- if (t.mark && t.mark !== "none") t.color = H.dark[t.mark] === t.color ? H.light[t.mark] : U(t.color);
2885
- else {
2886
- t.alpha < 1 && (t.alpha = Math.min(1, t.alpha * li)), t.color = U(t.color);
2887
- let [e, n, r, i] = B(t.color);
2888
- i > 0 && i < 1 && (t.color = hi([
2889
- e,
2890
- n,
2891
- r
2892
- ], Math.min(1, i * li)));
2893
- }
2894
- t.glowColor &&= U(t.glowColor), t.label &&= {
2895
- ...t.label,
2896
- color: U(t.label.color, "text")
2897
- }, t.packet &&= {
2898
- ...t.packet,
2899
- color: U(t.packet.color),
2900
- glowColor: U(t.packet.glowColor)
2901
- };
2902
- }
2903
- let { decor: t } = e;
2904
- return t.grid &&= {
2905
- ...t.grid,
2906
- color: U(t.grid.color)
2907
- }, t.rings = t.rings.map((e) => ({
2908
- ...e,
2909
- color: U(e.color)
2910
- })), t.lanes = t.lanes.map((e) => {
2911
- let t = {
2912
- ...e,
2913
- fill: U(e.fill),
2914
- stroke: U(e.stroke)
2915
- };
2916
- for (let e of [
2917
- "title",
2918
- "note",
2919
- "arrow"
2920
- ]) t[e] && (t[e] = { ...t[e] }, bi(t[e]));
2921
- return t;
2922
- }), e;
2949
+ function Pi(e, t) {
2950
+ let n = t && t.verdict;
2951
+ if (!n || t.done) return;
2952
+ let r = n.mismatch ? Ai.mismatch : Ai[n.state];
2953
+ if (!r) return;
2954
+ let { node: i, edge: a } = t.current;
2955
+ if (i !== void 0) {
2956
+ let t = e.nodes.find((e) => e.id === i);
2957
+ t && (t.color = r, t.glow = Math.max(t.glow || 0, ji));
2958
+ } else a && e.edges.forEach((e) => {
2959
+ Ni(e, a) && (e.color = r, e.glowColor = r, e.glow = Math.max(e.glow || 0, ji), e.width = Math.max(e.width || 0, Mi), e.packet &&= n.state === "refused" && !n.mismatch ? {
2960
+ ...e.packet,
2961
+ color: r,
2962
+ glowColor: r,
2963
+ speed: 0,
2964
+ phase: .5
2965
+ } : {
2966
+ ...e.packet,
2967
+ glowColor: r
2968
+ });
2969
+ });
2923
2970
  }
2924
- var Si = 1.2, Ci = 96, wi = 24, Ti = "glyph:", Ei = "#ffffff", Di = "#0b1220";
2925
- Object.freeze(Object.keys(P));
2926
- var Oi = (e) => typeof e == "string" && Object.hasOwn(P, e), ki = (e, t) => `${Ti}${e}|${t}`, Ai = (e) => typeof e == "string" && e.startsWith(Ti);
2927
- function ji(e) {
2971
+ var Fi = 1.2, Ii = 96, Li = 24, Ri = "glyph:", zi = "#ffffff", Bi = "#0b1220";
2972
+ Object.freeze(Object.keys(L));
2973
+ var Vi = (e) => typeof e == "string" && Object.hasOwn(L, e), Hi = (e, t) => `${Ri}${e}|${t}`, Ui = (e) => typeof e == "string" && e.startsWith(Ri);
2974
+ function Wi(e) {
2928
2975
  let t = e.slice(6), n = t.indexOf("|");
2929
2976
  return {
2930
2977
  type: t.slice(0, n),
2931
2978
  ink: t.slice(n + 1)
2932
2979
  };
2933
2980
  }
2934
- var Mi = ([e, t, n]) => {
2981
+ var Gi = ([e, t, n]) => {
2935
2982
  let r = (e) => {
2936
2983
  let t = e / 255;
2937
2984
  return t <= .03928 ? t / 12.92 : ((t + .055) / 1.055) ** 2.4;
2938
2985
  };
2939
2986
  return .2126 * r(e) + .7152 * r(t) + .0722 * r(n);
2940
- }, Ni = (e, t) => {
2987
+ }, Ki = (e, t) => {
2941
2988
  let [n, r] = e > t ? [e, t] : [t, e];
2942
2989
  return (n + .05) / (r + .05);
2943
2990
  };
2944
- function Pi(e) {
2945
- let t = Mi(B(e));
2946
- return Ni(1, t) >= Ni(Mi(B("#0b1220")), t) ? Ei : Di;
2991
+ function qi(e, t = wn) {
2992
+ let n = N(e);
2993
+ n[3] < 1 && (n = fn(n, fn(N(t), [
2994
+ 0,
2995
+ 0,
2996
+ 0,
2997
+ 1
2998
+ ])));
2999
+ let r = Gi(n);
3000
+ return Ki(1, r) >= Ki(Gi(N("#0b1220")), r) ? zi : Bi;
2947
3001
  }
2948
- var Fi = (e, t) => t && t.values && t.values["--corn-map-glyph"] || Pi(e.color), Ii = (e, t) => !!e.glyph && !e.icon && !e.letters && e.r * 2 * t >= 14, Li = {
3002
+ var Ji = (e, t) => e && e.ground || (t === "light" ? "#f4f6fa" : "#090d16"), Yi = (e, t, n = "dark") => t && t.values && t.values["--corn-map-glyph"] || qi(e.color, Ji(t, n)), Xi = (e, t) => !!e.glyph && !e.icon && !e.letters && e.r * 2 * t >= 14, Zi = {
2949
3003
  root: (e) => {
2950
- Ri(e, 12, 12, 8), G(e, 12, 12, 3.2);
3004
+ Qi(e, 12, 12, 8), G(e, 12, 12, 3.2);
2951
3005
  },
2952
3006
  app: (e) => {
2953
3007
  e.beginPath(), e.rect(3.5, 5, 17, 14), e.stroke(), W(e, 3.5, 9.5, 20.5, 9.5);
@@ -2959,7 +3013,7 @@ var Fi = (e, t) => t && t.values && t.values["--corn-map-glyph"] || Pi(e.color),
2959
3013
  e.beginPath(), e.rect(4, 7, 16, 13), e.stroke(), W(e, 4, 12, 20, 12), W(e, 12, 7, 12, 12);
2960
3014
  },
2961
3015
  core: (e) => {
2962
- Ri(e, 12, 12, 8.2), G(e, 12, 12, 4);
3016
+ Qi(e, 12, 12, 8.2), G(e, 12, 12, 4);
2963
3017
  },
2964
3018
  token: (e) => {
2965
3019
  for (let [t, n] of [
@@ -3022,76 +3076,35 @@ var Fi = (e, t) => t && t.values && t.values["--corn-map-glyph"] || Pi(e.color),
3022
3076
  function W(e, t, n, r, i) {
3023
3077
  e.beginPath(), e.moveTo(t, n), e.lineTo(r, i), e.stroke();
3024
3078
  }
3025
- function Ri(e, t, n, r) {
3079
+ function Qi(e, t, n, r) {
3026
3080
  e.beginPath(), e.arc(t, n, r, 0, Math.PI * 2), e.stroke();
3027
3081
  }
3028
3082
  function G(e, t, n, r) {
3029
3083
  e.beginPath(), e.arc(t, n, r, 0, Math.PI * 2), e.fill();
3030
3084
  }
3031
- function zi(e, t, n, r) {
3032
- let i = Li[t];
3085
+ function $i(e, t, n, r) {
3086
+ let i = Zi[t];
3033
3087
  if (!i) return;
3034
- let a = n / wi;
3088
+ let a = n / Li;
3035
3089
  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();
3036
3090
  }
3037
- var Bi = /* @__PURE__ */ new Map();
3038
- function Vi(e, t) {
3039
- if (!Oi(e) || typeof t != "string") return null;
3040
- let n = ki(e, t);
3041
- if (Bi.has(n)) return Bi.get(n);
3042
- if (Bi.size >= 64) return null;
3091
+ var ea = /* @__PURE__ */ new Map();
3092
+ function ta(e, t) {
3093
+ if (!Vi(e) || typeof t != "string") return null;
3094
+ let n = Hi(e, t);
3095
+ if (ea.has(n)) return ea.get(n);
3096
+ if (ea.size >= 64) return null;
3043
3097
  let r = null;
3044
3098
  try {
3045
- let n = typeof OffscreenCanvas < "u" ? new OffscreenCanvas(Ci, Ci) : typeof document < "u" ? Object.assign(document.createElement("canvas"), {
3046
- width: Ci,
3047
- height: Ci
3099
+ let n = typeof OffscreenCanvas < "u" ? new OffscreenCanvas(Ii, Ii) : typeof document < "u" ? Object.assign(document.createElement("canvas"), {
3100
+ width: Ii,
3101
+ height: Ii
3048
3102
  }) : null, i = n && n.getContext && n.getContext("2d");
3049
- i && i.stroke && (zi(i, e, Ci, t), r = n);
3103
+ i && i.stroke && ($i(i, e, Ii, t), r = n);
3050
3104
  } catch {
3051
3105
  r = null;
3052
3106
  }
3053
- return Bi.set(n, r), r;
3054
- }
3055
- // ../explorer/review-model.js
3056
- var Hi = 6e4, Ui = 60 * Hi, Wi = 24 * Ui, Gi = (e, t) => `${e} ${t}${e === 1 ? "" : "s"}`;
3057
- function Ki(e, t) {
3058
- let n = typeof e == "string" ? Date.parse(e) : NaN;
3059
- if (!Number.isFinite(n) || !Number.isFinite(t)) return "";
3060
- let r = t - n;
3061
- return r < Hi ? "just now" : r < Ui ? `${Gi(Math.floor(r / Hi), "minute")} ago` : r < Wi ? `${Gi(Math.floor(r / Ui), "hour")} ago` : `${Gi(Math.floor(r / Wi), "day")} ago`;
3062
- }
3063
- var qi = {
3064
- approved: "Approved",
3065
- notes: "Sent back"
3066
- };
3067
- function Ji(e, t) {
3068
- let { verdict: n, when: r } = Yi(e, t);
3069
- return r ? `${n} ${r}` : n;
3070
- }
3071
- function Yi(e, t) {
3072
- return !e || !qi[e.verdict] ? {
3073
- verdict: "",
3074
- when: ""
3075
- } : {
3076
- verdict: qi[e.verdict],
3077
- when: Ki(e.at, t) || ""
3078
- };
3079
- }
3080
- function Xi(e) {
3081
- return typeof e == "string" && e.trim() ? null : "Say what should change before you send it back.";
3082
- }
3083
- function Zi(e, t, n) {
3084
- return {
3085
- verdict: e,
3086
- note: typeof t == "string" ? t.trim() : "",
3087
- edits: structuredClone(Array.isArray(n) ? n : [])
3088
- };
3089
- }
3090
- var Qi = (e) => typeof e == "string" && /^pull\/[1-9]\d{0,8}$/.test(e);
3091
- function $i(e, t) {
3092
- if (!t) return "";
3093
- let n = Gi(t, "edit");
3094
- return e === "approved" ? `Your ${n} ${t === 1 ? "is" : "are"} in the review comment on the PR. The drafting agent will fold ${t === 1 ? "it" : "them"} into the proposal.` : `Sent with your ${n}. The drafting agent will fold ${t === 1 ? "it" : "them"} into the next draft.`;
3107
+ return ea.set(n, r), r;
3095
3108
  }
3096
3109
  Object.freeze([
3097
3110
  "pulls",
@@ -3124,21 +3137,21 @@ Object.freeze([
3124
3137
  ["other", "Cancelled or skipped"]
3125
3138
  ]
3126
3139
  });
3127
- var ea = .2, ta = "#f87171";
3128
- function na(e, t) {
3140
+ var na = .2, ra = "#f87171";
3141
+ function ia(e, t) {
3129
3142
  if (!t || !t.changed.size && !t.failing.size) return;
3130
3143
  let n = (e) => t.changed.has(e) || t.failing.has(e);
3131
- 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 = ta)) : (r.alpha = Math.min(r.alpha, ea), r.labelAlpha = r.alpha, r.glow = 0);
3132
- for (let t of e.edges) !n(t.from) && !n(t.to) && (t.alpha = Math.min(t.alpha, ea / 2));
3144
+ 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 = ra)) : (r.alpha = Math.min(r.alpha, na), r.labelAlpha = r.alpha, r.glow = 0);
3145
+ for (let t of e.edges) !n(t.from) && !n(t.to) && (t.alpha = Math.min(t.alpha, na / 2));
3133
3146
  }
3134
3147
  // ../explorer/search-match.js
3135
- var ra = Object.freeze({
3148
+ var aa = Object.freeze({
3136
3149
  labelStart: 0,
3137
3150
  wordStart: 1,
3138
3151
  label: 2,
3139
3152
  idOrFile: 3,
3140
3153
  typeOrKind: 4
3141
- }), ia = Object.freeze({
3154
+ }), oa = Object.freeze({
3142
3155
  root: "Root",
3143
3156
  app: "Apps",
3144
3157
  pkg: "Packages",
@@ -3160,22 +3173,22 @@ var ra = Object.freeze({
3160
3173
  floor: "House",
3161
3174
  room: "House",
3162
3175
  persona: "People"
3163
- }), aa = (e) => e && e.charAt(0).toUpperCase() + e.slice(1), oa = (e) => ia[e.type] || aa(String(e.type || "")), K = (e) => typeof e == "string" ? e.toLowerCase() : "", sa = /[^\p{L}\p{N}]+/u;
3164
- function ca(e, t) {
3176
+ }), sa = (e) => e && e.charAt(0).toUpperCase() + e.slice(1), ca = (e) => oa[e.type] || sa(String(e.type || "")), K = (e) => typeof e == "string" ? e.toLowerCase() : "", la = /[^\p{L}\p{N}]+/u;
3177
+ function ua(e, t) {
3165
3178
  let n = String(t || "").toLowerCase();
3166
3179
  if (!n) return -1;
3167
3180
  let r = K(e.label);
3168
- return r.startsWith(n) ? ra.labelStart : r.split(sa).some((e) => e && e.startsWith(n)) ? ra.wordStart : r.includes(n) ? ra.label : K(e.id).includes(n) || K(e.file).includes(n) ? ra.idOrFile : K(e.type).includes(n) || K(oa(e)).includes(n) || K(e.kind).includes(n) ? ra.typeOrKind : -1;
3181
+ return r.startsWith(n) ? aa.labelStart : r.split(la).some((e) => e && e.startsWith(n)) ? aa.wordStart : r.includes(n) ? aa.label : K(e.id).includes(n) || K(e.file).includes(n) ? aa.idOrFile : K(e.type).includes(n) || K(ca(e)).includes(n) || K(e.kind).includes(n) ? aa.typeOrKind : -1;
3169
3182
  }
3170
- function la(e, t) {
3183
+ function da(e, t) {
3171
3184
  let n = String(t || "").trim().toLowerCase(), r = /* @__PURE__ */ new Set();
3172
3185
  if (!n) return r;
3173
- for (let t of e) ca(t, n) >= 0 && r.add(t.id);
3186
+ for (let t of e) ua(t, n) >= 0 && r.add(t.id);
3174
3187
  return r;
3175
3188
  }
3176
3189
  // ../explorer/css-color.js
3177
- var q, ua = /* @__PURE__ */ new Map();
3178
- function da() {
3190
+ var q, fa = /* @__PURE__ */ new Map();
3191
+ function pa() {
3179
3192
  if (q !== void 0) return q;
3180
3193
  q = null;
3181
3194
  try {
@@ -3185,54 +3198,54 @@ function da() {
3185
3198
  }
3186
3199
  return q;
3187
3200
  }
3188
- function fa(e) {
3201
+ function ma(e) {
3189
3202
  let t = typeof e == "string" ? e.trim() : "";
3190
3203
  if (!t || t.toLowerCase() === "auto") return null;
3191
- if (ma(t)) return t;
3204
+ if (ga(t)) return t;
3192
3205
  if (/^transparent$/i.test(t)) return "rgba(0, 0, 0, 0)";
3193
- if (ua.has(t)) return ua.get(t);
3194
- let n = null, r = pa(t) && !/currentcolor/i.test(t) ? da() : null;
3206
+ if (fa.has(t)) return fa.get(t);
3207
+ let n = null, r = ha(t) && !/currentcolor/i.test(t) ? pa() : null;
3195
3208
  if (r) try {
3196
3209
  let e = (e) => (r.fillStyle = e, r.fillStyle = t, String(r.fillStyle)), i = e("#010203"), a = i === "#010203" && e("#040506") === "#040506" ? null : i;
3197
- n = a === null ? null : ga(a) ? a : _a(r, t);
3210
+ n = a === null ? null : va(a) ? a : ya(r, t);
3198
3211
  } catch {
3199
3212
  n = null;
3200
3213
  }
3201
- return ua.set(t, n), n;
3214
+ return fa.set(t, n), n;
3202
3215
  }
3203
- function pa(e) {
3216
+ function ha(e) {
3204
3217
  try {
3205
3218
  return typeof CSS > "u" || typeof CSS.supports != "function" || CSS.supports("color", e);
3206
3219
  } catch {
3207
3220
  return !1;
3208
3221
  }
3209
3222
  }
3210
- function ma(e) {
3211
- if (!ga(e)) return !1;
3223
+ function ga(e) {
3224
+ if (!va(e)) return !1;
3212
3225
  let t = /^rgba?\(/i.test(e.trim()) ? e.slice(e.indexOf("(") + 1, e.lastIndexOf(")")).split(",").map(Number) : null;
3213
3226
  if (t && (t.slice(0, 3).some((e) => !(e >= 0 && e <= 255)) || t.length > 3 && !(t[3] > 0 && t[3] <= 1))) return !1;
3214
- let [n, r, i, a] = B(e);
3227
+ let [n, r, i, a] = N(e);
3215
3228
  return [
3216
3229
  n,
3217
3230
  r,
3218
3231
  i
3219
3232
  ].every((e) => Number.isFinite(e) && e >= 0 && e <= 255) && Number.isFinite(a) && a > 0 && a <= 1;
3220
3233
  }
3221
- var ha = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$|^rgba?\(\s*[\d.]+\s*,\s*[\d.]+\s*,\s*[\d.]+\s*(?:,\s*[\d.]+\s*)?\)$/i, ga = (e) => ha.test(e.trim());
3222
- function _a(e, t) {
3234
+ var _a = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$|^rgba?\(\s*[\d.]+\s*,\s*[\d.]+\s*,\s*[\d.]+\s*(?:,\s*[\d.]+\s*)?\)$/i, va = (e) => _a.test(e.trim());
3235
+ function ya(e, t) {
3223
3236
  if (!e.getImageData || !e.fillRect) return null;
3224
3237
  e.clearRect(0, 0, 1, 1), e.fillStyle = t, e.fillRect(0, 0, 1, 1);
3225
3238
  let [n, r, i, a] = e.getImageData(0, 0, 1, 1).data;
3226
- return va(n, r, i, a / 255);
3239
+ return ba(n, r, i, a / 255);
3227
3240
  }
3228
- var va = (e, t, n, r) => `rgba(${e}, ${t}, ${n}, ${+r.toFixed(3)})`;
3229
- function ya(e) {
3241
+ var ba = (e, t, n, r) => `rgba(${e}, ${t}, ${n}, ${+r.toFixed(3)})`;
3242
+ function xa(e) {
3230
3243
  if (typeof e != "string" || e.length > 200) return null;
3231
3244
  let t = e.trim();
3232
- return !t || /^(?:auto|currentcolor)$/i.test(t) ? null : fa(t) || (da() === null && qr(t) ? t : null);
3245
+ return !t || /^(?:auto|currentcolor)$/i.test(t) ? null : ma(t) || (pa() === null && un(t) ? t : null);
3233
3246
  }
3234
3247
  // ../explorer/scene.js
3235
- var ba = [
3248
+ var Sa = [
3236
3249
  "root",
3237
3250
  "app",
3238
3251
  "pkg",
@@ -3240,7 +3253,7 @@ var ba = [
3240
3253
  "store",
3241
3254
  "rom",
3242
3255
  "floor"
3243
- ], xa = "\"Segoe UI\", -apple-system, BlinkMacSystemFont, Roboto, sans-serif", Sa = "\"Segoe UI\", -apple-system, sans-serif", Ca = .32, wa = "#ffffff", Ta = .07, Ea = {
3256
+ ], Ca = "\"Segoe UI\", -apple-system, BlinkMacSystemFont, Roboto, sans-serif", wa = "\"Segoe UI\", -apple-system, sans-serif", Ta = .32, Ea = "#ffffff", Da = .07, Oa = {
3244
3257
  node: {
3245
3258
  color: "rgba(9, 13, 22, 0.85)",
3246
3259
  width: 3.5
@@ -3249,10 +3262,10 @@ var ba = [
3249
3262
  color: "rgba(9, 13, 22, 0.9)",
3250
3263
  width: 3
3251
3264
  }
3252
- }, Da = {
3265
+ }, ka = {
3253
3266
  length: 9,
3254
3267
  spread: .45
3255
- }, Oa = Object.freeze({
3268
+ }, Aa = Object.freeze({
3256
3269
  flow: "chevron",
3257
3270
  reads: "chevron",
3258
3271
  writes: "chevron",
@@ -3262,7 +3275,7 @@ var ba = [
3262
3275
  "runs-on": "bar",
3263
3276
  uses: "diamond",
3264
3277
  extends: "diamond"
3265
- }), ka = Object.freeze({
3278
+ }), ja = Object.freeze({
3266
3279
  strokeWidth: 1.8,
3267
3280
  barHalf: 5,
3268
3281
  diamondHalf: 6,
@@ -3277,13 +3290,13 @@ var ba = [
3277
3290
  squareHalf: .86,
3278
3291
  squareCorner: .12,
3279
3292
  diamondHalf: 1.15
3280
- }), Aa = Object.freeze({
3293
+ }), Ma = Object.freeze({
3281
3294
  circle: 1,
3282
3295
  "rounded-square": (J.roundedHalf - J.roundedCorner) * Math.SQRT2 + J.roundedCorner,
3283
3296
  hexagon: J.hexInradius / Math.cos(Math.PI / 6),
3284
3297
  square: (J.squareHalf - J.squareCorner) * Math.SQRT2 + J.squareCorner,
3285
3298
  diamond: J.diamondHalf
3286
- }), ja = Object.freeze([7, 5]), Ma = Object.freeze([1.5, 4]), Na = {
3299
+ }), Na = Object.freeze([7, 5]), Pa = Object.freeze([1.5, 4]), Fa = {
3287
3300
  selected: {
3288
3301
  fill: "rgba(99, 102, 241, 0.55)",
3289
3302
  fillR: 8,
@@ -3305,71 +3318,71 @@ var ba = [
3305
3318
  ringR: 5,
3306
3319
  ringWidth: 1.2
3307
3320
  }
3308
- }, Pa = {
3321
+ }, Ia = {
3309
3322
  halfLength: 7,
3310
3323
  width: 2
3311
- }, Fa = {
3324
+ }, La = {
3312
3325
  color: "#ffffff",
3313
3326
  radius: 3.5,
3314
3327
  glow: 10,
3315
3328
  cycleMs: 2600
3316
3329
  }, Y = {
3317
3330
  added: {
3318
- ...ii.added,
3319
- color: H.dark.added,
3331
+ ...Sn.added,
3332
+ color: F.dark.added,
3320
3333
  ringR: 9,
3321
3334
  ringWidth: 2,
3322
3335
  edgeWidth: 2.2,
3323
3336
  alpha: 1
3324
3337
  },
3325
3338
  changed: {
3326
- ...ii.changed,
3327
- color: H.dark.changed,
3339
+ ...Sn.changed,
3340
+ color: F.dark.changed,
3328
3341
  ringR: 9,
3329
3342
  ringWidth: 2.5,
3330
3343
  edgeWidth: 2.4,
3331
3344
  alpha: 1
3332
3345
  },
3333
3346
  removed: {
3334
- ...ii.removed,
3335
- color: H.dark.removed,
3347
+ ...Sn.removed,
3348
+ color: F.dark.removed,
3336
3349
  ringR: 9,
3337
3350
  ringWidth: 2,
3338
3351
  edgeWidth: 2,
3339
- alpha: $r
3352
+ alpha: _n
3340
3353
  },
3341
3354
  edit: {
3342
- ...ii.edit,
3343
- color: H.dark.edit,
3355
+ ...Sn.edit,
3356
+ color: F.dark.edit,
3344
3357
  ringR: 9,
3345
3358
  ringWidth: 3,
3346
3359
  edgeWidth: 2.4,
3347
3360
  alpha: 1
3348
3361
  }
3349
3362
  };
3350
- function Ia(e) {
3351
- return e === "light" ? za : Ra;
3363
+ function Ra(e) {
3364
+ return e === "light" ? Va : Ba;
3352
3365
  }
3353
- var La = (e) => {
3366
+ var za = (e) => {
3354
3367
  let t = { ...e };
3355
3368
  for (let e of [
3356
3369
  "fill",
3357
3370
  "ring",
3358
3371
  "color"
3359
- ]) typeof t[e] == "string" && (t[e] = U(t[e]));
3372
+ ]) typeof t[e] == "string" && (t[e] = I(t[e]));
3360
3373
  return t;
3361
- }, Ra = Object.freeze({
3362
- halo: Na,
3374
+ }, Ba = Object.freeze({
3375
+ halo: Fa,
3363
3376
  mark: Y,
3364
- core: wa,
3365
- labelOutline: Ea
3366
- }), za = Object.freeze({
3367
- halo: Object.fromEntries(Object.entries(Na).map(([e, t]) => [e, La(t)])),
3377
+ core: Ea,
3378
+ labelOutline: Oa
3379
+ }), Va = Object.freeze({
3380
+ halo: Object.fromEntries(Object.entries(Fa).map(([e, t]) => [e, za(t)])),
3368
3381
  mark: Object.fromEntries(Object.entries(Y).map(([e, t]) => [e, {
3369
3382
  ...t,
3370
- color: H.light[e]
3383
+ color: F.light[e]
3371
3384
  }])),
3372
- core: wa,
3385
+ core: Ea,
3373
3386
  labelOutline: {
3374
3387
  node: {
3375
3388
  color: "rgba(244, 246, 250, 0.9)",
@@ -3380,28 +3393,28 @@ var La = (e) => {
3380
3393
  width: 3
3381
3394
  }
3382
3395
  }
3383
- }), Ba = {
3396
+ }), Ha = {
3384
3397
  ring: 1.8,
3385
3398
  edge: 1.6,
3386
3399
  gap: 4
3387
- }, Va = .28;
3400
+ }, Ua = .28;
3388
3401
  function X(e, t, { viewer: n = !1 } = {}) {
3389
- return e.proposal && !It(e.proposalView || "diff", t) ? !1 : e.view === "dataflow" ? !!e.flow && e.flow.ids.has(t.id) : e.view === "house" ? Cn(e, t) : t.type === "root" || Ha(e, t, n ? e.activeLayers : z(e)) || wr(e, t);
3402
+ return e.proposal && !Ut(e.proposalView || "diff", t) ? !1 : e.view === "dataflow" ? !!e.flow && e.flow.ids.has(t.id) : e.view === "house" ? yi(e, t) : t.type === "root" || Wa(e, t, n ? e.activeLayers : V(e)) || Ur(e, t);
3390
3403
  }
3391
- function Ha(e, t, n = z(e)) {
3392
- let r = br(e, t);
3393
- 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[Mt(t)] !== !1 : n[t.type] !== !1;
3404
+ function Wa(e, t, n = V(e)) {
3405
+ let r = zr(e, t);
3406
+ 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[oi(t)] !== !1 : n[t.type] !== !1;
3394
3407
  }
3395
- var Ua = (e) => e.view === "dataflow" && e.flow ? e.flow.edges : e.view === "house" ? Tn(e) : e.edges;
3396
- function Wa(e, t, n) {
3408
+ var Ga = (e) => e.view === "dataflow" && e.flow ? e.flow.edges : e.view === "house" ? xi(e) : e.edges;
3409
+ function Ka(e, t, n) {
3397
3410
  return Ae(e, t, n);
3398
3411
  }
3399
- function Ga(e) {
3412
+ function qa(e) {
3400
3413
  let t = e.scenario, n = new Set(t.visited.nodes), r = new Set(t.visited.edgeList.map(Z));
3401
3414
  t.linkNodes && e.edges.forEach((e) => {
3402
3415
  n.has(e.from) && n.has(e.to) && r.add(Z(e));
3403
3416
  });
3404
- let i = bn(t, e.nodes, e.edges);
3417
+ let i = gi(t, e.nodes, e.edges);
3405
3418
  i && (i.down.forEach((e) => n.add(e)), i.hits.forEach((e, t) => n.add(t)), i.edges.forEach((e, t) => r.add(t)));
3406
3419
  let { node: a, edge: o } = t.current, s = a === void 0 ? o ? o.kind === "writes" ? o.from : o.to : void 0 : a;
3407
3420
  return {
@@ -3411,7 +3424,7 @@ function Ga(e) {
3411
3424
  selectedId: s
3412
3425
  };
3413
3426
  }
3414
- function Ka(e, t, n) {
3427
+ function Ja(e, t, n) {
3415
3428
  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 = {
3416
3429
  x: (t.x + n.x) / 2 + -i / a * a * o,
3417
3430
  y: (t.y + n.y) / 2 + r / a * a * o
@@ -3428,14 +3441,14 @@ function Ka(e, t, n) {
3428
3441
  c: s
3429
3442
  };
3430
3443
  }
3431
- function qa(e, t, n, r) {
3444
+ function Ya(e, t, n, r) {
3432
3445
  let i = 1 - r;
3433
3446
  return {
3434
3447
  x: i * i * e.x + 2 * i * r * t.x + r * r * n.x,
3435
3448
  y: i * i * e.y + 2 * i * r * t.y + r * r * n.y
3436
3449
  };
3437
3450
  }
3438
- function Ja(e, t) {
3451
+ function Xa(e, t) {
3439
3452
  let n = {
3440
3453
  x: e.x1,
3441
3454
  y: e.y1
@@ -3443,7 +3456,7 @@ function Ja(e, t) {
3443
3456
  x: e.x2,
3444
3457
  y: e.y2
3445
3458
  };
3446
- return qa(n, e.curve ? {
3459
+ return Ya(n, e.curve ? {
3447
3460
  x: e.curve.cx,
3448
3461
  y: e.curve.cy
3449
3462
  } : {
@@ -3451,14 +3464,14 @@ function Ja(e, t) {
3451
3464
  y: (n.y + r.y) / 2
3452
3465
  }, r, t);
3453
3466
  }
3454
- function Ya(e, t) {
3455
- return Ja(e, (t / 1e3 * e.packet.speed + e.packet.phase) % 1);
3467
+ function Za(e, t) {
3468
+ return Xa(e, (t / 1e3 * e.packet.speed + e.packet.phase) % 1);
3456
3469
  }
3457
- var Xa = (e) => e.kind || (e.dashed ? "usage" : "ownership"), Za = (e) => `${e.from}->${e.to}${e.kind ? `|${e.kind}` : e.dashed ? "|dashed" : ""}${e.kind === "flow" && e.flow ? `|${e.flow}` : ""}`, Z = (e) => `${e.from}->${e.to}`;
3458
- function Qa(e, t, n, r, i, a) {
3459
- let o = e.kind === "reads" || e.kind === "writes", s = Pt(e), c = !r || r.connectedEdgeKeys.has(Z(e)), l = e.status !== "live", { a: u, b: d, c: f } = Ka(e, t, n), p = !!r && c, m = Xa(e), h = null;
3470
+ var Qa = (e) => e.kind || (e.dashed ? "usage" : "ownership"), $a = (e) => `${e.from}->${e.to}${e.kind ? `|${e.kind}` : e.dashed ? "|dashed" : ""}${e.kind === "flow" && e.flow ? `|${e.flow}` : ""}`, Z = (e) => `${e.from}->${e.to}`;
3471
+ function eo(e, t, n, r, i, a) {
3472
+ let o = e.kind === "reads" || e.kind === "writes", s = ri(e), c = !r || r.connectedEdgeKeys.has(Z(e)), l = e.status !== "live", { a: u, b: d, c: f } = Ja(e, t, n), p = !!r && c, m = Qa(e), h = null;
3460
3473
  if (r && c) {
3461
- let t = qa(u, f, d, .5);
3474
+ let t = Ya(u, f, d, .5);
3462
3475
  h = {
3463
3476
  text: e.count !== void 0 && e.label ? e.label : ke(m),
3464
3477
  x: t.x,
@@ -3471,19 +3484,19 @@ function Qa(e, t, n, r, i, a) {
3471
3484
  if ((r ? c : i) && !a) {
3472
3485
  let t = e.phase === void 0 ? (e.from.length * 7 + e.to.length * 13) % 10 / 10 : e.phase;
3473
3486
  g = {
3474
- color: Fa.color,
3487
+ color: La.color,
3475
3488
  glowColor: s.color,
3476
- radius: Fa.radius,
3477
- glow: Fa.glow,
3478
- speed: 1e3 / Fa.cycleMs,
3489
+ radius: La.radius,
3490
+ glow: La.glow,
3491
+ speed: 1e3 / La.cycleMs,
3479
3492
  phase: t
3480
3493
  };
3481
3494
  }
3482
3495
  return {
3483
- key: Za(e),
3496
+ key: $a(e),
3484
3497
  from: e.from,
3485
3498
  to: e.to,
3486
- kind: Xa(e),
3499
+ kind: Qa(e),
3487
3500
  x1: u.x,
3488
3501
  y1: u.y,
3489
3502
  x2: d.x,
@@ -3493,14 +3506,14 @@ function Qa(e, t, n, r, i, a) {
3493
3506
  color: s.color,
3494
3507
  width: p ? 2.4 : i && !o ? 2 : 1.6,
3495
3508
  alpha: r ? c ? 1 : .04 : i ? o ? .2 : .65 : o ? .12 : .45,
3496
- dash: l ? ja : null,
3497
- ticks: jt(e),
3509
+ dash: l ? Na : null,
3510
+ ticks: ai(e),
3498
3511
  curve: {
3499
3512
  cx: f.x,
3500
3513
  cy: f.y
3501
3514
  },
3502
3515
  arrow: !0,
3503
- end: Object.hasOwn(Oa, m) ? Oa[m] : "triangle",
3516
+ end: Object.hasOwn(Aa, m) ? Aa[m] : "triangle",
3504
3517
  glow: p ? 8 : 0,
3505
3518
  glowColor: p ? s.color : null,
3506
3519
  label: h,
@@ -3509,13 +3522,13 @@ function Qa(e, t, n, r, i, a) {
3509
3522
  live: !!e.live
3510
3523
  };
3511
3524
  }
3512
- function $a(e, t, n, r) {
3525
+ function to(e, t, n, r) {
3513
3526
  let i = !r || r.connectedEdgeKeys.has(Z(e)), a, o, s = null, c = 0, l = null;
3514
- return r ? i ? e.dashed ? (a = "#818cf8", o = 2, c = 8, l = "rgba(129, 140, 248, 0.7)", s = Ma) : (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 ? Ma : null) : e.dashed ? (a = "rgba(129, 140, 248, 0.35)", o = 1.2, s = Ma) : (a = "rgba(255, 255, 255, 0.16)", o = 1.4), {
3515
- key: Za(e),
3527
+ return r ? i ? e.dashed ? (a = "#818cf8", o = 2, c = 8, l = "rgba(129, 140, 248, 0.7)", s = Pa) : (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 ? Pa : null) : e.dashed ? (a = "rgba(129, 140, 248, 0.35)", o = 1.2, s = Pa) : (a = "rgba(255, 255, 255, 0.16)", o = 1.4), {
3528
+ key: $a(e),
3516
3529
  from: e.from,
3517
3530
  to: e.to,
3518
- kind: Xa(e),
3531
+ kind: Qa(e),
3519
3532
  x1: t.x,
3520
3533
  y1: t.y,
3521
3534
  x2: n.x,
@@ -3538,7 +3551,7 @@ function $a(e, t, n, r) {
3538
3551
  live: !!e.live
3539
3552
  };
3540
3553
  }
3541
- var eo = [
3554
+ var no = [
3542
3555
  "flow",
3543
3556
  "reads",
3544
3557
  "writes",
@@ -3548,62 +3561,62 @@ var eo = [
3548
3561
  "delivers",
3549
3562
  "uses",
3550
3563
  "extends"
3551
- ], to = (e) => e.proposal ? e.proposalView || "diff" : null;
3552
- function no(e, t, n, r = !1, i = !1) {
3564
+ ], ro = (e) => e.proposal ? e.proposalView || "diff" : null;
3565
+ function io(e, t, n, r = !1, i = !1) {
3553
3566
  if (e.mark = t, t === "none") {
3554
- (n === "diff" || i) && (e.alpha *= Va, e.glow = 0, e.packet = null), i && (e.greyed = !0);
3567
+ (n === "diff" || i) && (e.alpha *= Ua, e.glow = 0, e.packet = null), i && (e.greyed = !0);
3555
3568
  return;
3556
3569
  }
3557
3570
  let a = Y[t];
3558
- e.color = a.color, e.dash = r ? Y.removed.edgeDash : a.edgeDash, e.width = Math.max(e.width, a.edgeWidth), e.alpha >= .1 && (e.alpha = Math.max(e.alpha, ei) * (r ? Y.removed.alpha : a.alpha)), e.glow && (e.glowColor = a.color);
3571
+ e.color = a.color, e.dash = r ? Y.removed.edgeDash : a.edgeDash, e.width = Math.max(e.width, a.edgeWidth), e.alpha >= .1 && (e.alpha = Math.max(e.alpha, vn) * (r ? Y.removed.alpha : a.alpha)), e.glow && (e.glowColor = a.color);
3559
3572
  }
3560
- function ro(e, t, n) {
3561
- let { nodes: r } = e, i = z(e), a = Ir(e), o = new Map(r.map((e) => [e.id, e])), s = e.view === "dataflow", c = [], l = (e) => !!t && t.connectedEdgeKeys.has(Z(e)), u = (e, r, i) => c.push(Qa(e, r, i, t, s, n)), d = to(e), f = (n) => {
3573
+ function ao(e, t, n) {
3574
+ let { nodes: r } = e, i = V(e), a = ti(e), o = new Map(r.map((e) => [e.id, e])), s = e.view === "dataflow", c = [], l = (e) => !!t && t.connectedEdgeKeys.has(Z(e)), u = (e, r, i) => c.push(eo(e, r, i, t, s, n)), d = ro(e), f = (n) => {
3562
3575
  let r = o.get(n.from), a = o.get(n.to);
3563
3576
  if (r && a && X(e, r) && X(e, a)) {
3564
3577
  if (s) return u(n, r, a);
3565
3578
  if (e.view === "house") {
3566
- let e = En(n, r, a);
3567
- e === "flow" ? u(n, r, a) : e === "link" && c.push($a(n, r, a, t));
3568
- } 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($a(n, r, a, t));
3579
+ let e = Si(n, r, a);
3580
+ e === "flow" ? u(n, r, a) : e === "link" && c.push(to(n, r, a, t));
3581
+ } 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(to(n, r, a, t));
3569
3582
  }
3570
3583
  };
3571
- return Ua(e).forEach((n) => {
3572
- if (d && !Lt(d, n)) return;
3573
- let r = d === "before" ? zt(n) : n, i = d ? Rt(d, n) : "none", l = c.length;
3584
+ return Ga(e).forEach((n) => {
3585
+ if (d && !Wt(d, n)) return;
3586
+ let r = d === "before" ? Kt(n) : n, i = d ? Gt(d, n) : "none", l = c.length;
3574
3587
  if (i === "none") f(r);
3575
3588
  else {
3576
3589
  let n = o.get(r.from), i = o.get(r.to);
3577
3590
  if (!n || !i || !X(e, n) || !X(e, i)) return;
3578
- s || eo.includes(r.kind) ? u(r, n, i) : c.push($a(r, n, i, t));
3591
+ s || no.includes(r.kind) ? u(r, n, i) : c.push(to(r, n, i, t));
3579
3592
  }
3580
- for (let e = l; e < c.length; e++) no(c[e], i, d, i === "edit" && n.editOp === "removed", a);
3593
+ for (let e = l; e < c.length; e++) io(c[e], i, d, i === "edit" && n.editOp === "removed", a);
3581
3594
  }), c;
3582
3595
  }
3583
- var io = (e) => e.type === "floor" || e.type === "room" ? "house" : e.type === "external" ? Mt(e) : e.type, ao = (e) => ya(e.color) ?? (P[e.type] || P.external).color;
3584
- function oo(e, t) {
3585
- let { nodes: n, selectedNode: r, searchQuery: i } = e, a = i ? la(n, i) : null, o = !!a && n.some((t) => a.has(t.id) && X(e, t)), s = [], c = to(e), l = Ir(e), u = c === "diff" || c && l ? Bt(n, Ua(e)) : null;
3596
+ var oo = (e) => e.type === "floor" || e.type === "room" ? "house" : e.type === "external" ? oi(e) : e.type, so = (e) => xa(e.color) ?? (L[e.type] || L.external).color;
3597
+ function co(e, t) {
3598
+ let { nodes: n, selectedNode: r, searchQuery: i } = e, a = i ? da(n, i) : null, o = !!a && n.some((t) => a.has(t.id) && X(e, t)), s = [], c = ro(e), l = ti(e), u = c === "diff" || c && l ? qt(n, Ga(e)) : null;
3586
3599
  return n.forEach((n) => {
3587
3600
  if (!X(e, n)) return;
3588
- let i = c === "before" ? zt(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 ? Rt(c, n) : "none", _ = Y[g], v = g === "edit" && n.editOp === "removed", y = t && !m && !(o && d) ? Ta : 1;
3589
- o && !d && !p && !(t && m) && (y = Ta);
3601
+ let i = c === "before" ? Kt(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 ? Gt(c, n) : "none", _ = Y[g], v = g === "edit" && n.editOp === "removed", y = t && !m && !(o && d) ? Da : 1;
3602
+ o && !d && !p && !(t && m) && (y = Da);
3590
3603
  let b = l && !!u && !u.touched.has(n.id);
3591
- u && !u.touched.has(n.id) && (y = Math.min(y, b ? ni : Va)), _ && (y *= v ? Y.removed.alpha : _.alpha);
3592
- let x = i.type === "root" || i.type === "app", S = Er(e, i), C = br(e, i);
3604
+ u && !u.touched.has(n.id) && (y = Math.min(y, b ? bn : Ua)), _ && (y *= v ? Y.removed.alpha : _.alpha);
3605
+ let x = i.type === "root" || i.type === "app", S = Gr(e, i), C = zr(e, i);
3593
3606
  s.push({
3594
3607
  id: n.id,
3595
3608
  type: i.type,
3596
- group: io(i),
3609
+ group: oo(i),
3597
3610
  ...typeof i.kind == "string" && i.kind ? { kind: i.kind } : {},
3598
3611
  ...S ? { letters: S } : {},
3599
- shape: Jt(i.type),
3600
- hitR: i.r * Aa[Jt(i.type)],
3601
- ...Oi(i.type) ? { glyph: i.type } : {},
3612
+ shape: Hn(i.type),
3613
+ hitR: i.r * Ma[Hn(i.type)],
3614
+ ...Vi(i.type) ? { glyph: i.type } : {},
3602
3615
  ...C ? { layer: C } : {},
3603
3616
  x: n.x,
3604
3617
  y: n.y,
3605
3618
  r: i.r,
3606
- color: ao(i),
3619
+ color: so(i),
3607
3620
  alpha: y,
3608
3621
  glow: m && y >= .5 ? x ? 15 : 9 : 0,
3609
3622
  halo: d ? "match" : p ? "selected" : h ? "child" : "none",
@@ -3617,16 +3630,16 @@ function oo(e, t) {
3617
3630
  label: i.label,
3618
3631
  labelSize: x && !b ? 12 : 11,
3619
3632
  labelBold: x && !b,
3620
- labelAlpha: b && (!t || m) ? ri[e.theme === "light" ? "light" : "dark"] : u && !u.touched.has(n.id) && (!t || m) ? Math.max(y, ti) : y,
3633
+ labelAlpha: b && (!t || m) ? xn[e.theme === "light" ? "light" : "dark"] : u && !u.touched.has(n.id) && (!t || m) ? Math.max(y, yn) : y,
3621
3634
  labelColor: m ? "#f8fafc" : "rgba(255, 255, 255, 0.3)",
3622
- labelKeep: ba.includes(i.type) && !b || p || d || g !== "none" || !!(t && m),
3635
+ labelKeep: Sa.includes(i.type) && !b || p || d || g !== "none" || !!(t && m),
3623
3636
  labelStrike: !!_ && (_.strike || v),
3624
3637
  live: !!n.live,
3625
3638
  box: n.box || null
3626
3639
  });
3627
3640
  }), s;
3628
3641
  }
3629
- function so(e) {
3642
+ function lo(e) {
3630
3643
  let { rings: t, selectedNode: n } = e, r = {
3631
3644
  color: n ? "rgba(66, 153, 225, 0.04)" : "rgba(66, 153, 225, 0.14)",
3632
3645
  width: 1,
@@ -3648,7 +3661,7 @@ function so(e) {
3648
3661
  ...i
3649
3662
  })))];
3650
3663
  }
3651
- function co(e) {
3664
+ function uo(e) {
3652
3665
  let t = -e.top + 40;
3653
3666
  return e.headers.map((n, r) => {
3654
3667
  let i = e.headers[r + 1];
@@ -3688,44 +3701,44 @@ function co(e) {
3688
3701
  };
3689
3702
  });
3690
3703
  }
3691
- var lo = .55, uo = .5, fo = {
3704
+ var fo = .55, po = .5, mo = {
3692
3705
  color: "#ffffff",
3693
3706
  radius: 4.5,
3694
3707
  glow: 12
3695
- }, po = {
3708
+ }, ho = {
3696
3709
  width: 3.6,
3697
3710
  glow: 14
3698
3711
  };
3699
- function mo(e, t) {
3712
+ function go(e, t) {
3700
3713
  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";
3701
3714
  }
3702
- function ho(e, t, n = {}) {
3715
+ function _o(e, t, n = {}) {
3703
3716
  if (t.done) return;
3704
3717
  let { node: r, edge: i, at: a } = t.current, o = new Set(r === void 0 ? i ? [i.from, i.to] : [] : [r]);
3705
3718
  a !== void 0 && o.add(a), e.nodes.forEach((e) => {
3706
- e.connected && (o.has(e.id) ? (r !== void 0 || e.id === a) && e.halo !== "match" && (e.halo = "selected") : (e.alpha = lo, e.labelAlpha = lo));
3719
+ e.connected && (o.has(e.id) ? (r !== void 0 || e.id === a) && e.halo !== "match" && (e.halo = "selected") : (e.alpha = fo, e.labelAlpha = fo));
3707
3720
  });
3708
3721
  let s = new Set(t.visited.edgeList.map(Z)), c = (e) => s.has(Z(e)) || t.linkNodes && t.visited.nodes.has(e.from) && t.visited.nodes.has(e.to);
3709
3722
  e.edges.forEach((e) => {
3710
- if (i && mo(e, i)) {
3711
- e.alpha = 1, e.width = Math.max(e.width, po.width), e.glow = po.glow, e.glowColor = e.glowColor || e.color;
3723
+ if (i && go(e, i)) {
3724
+ e.alpha = 1, e.width = Math.max(e.width, ho.width), e.glow = ho.glow, e.glowColor = e.glowColor || e.color;
3712
3725
  let r = 1e3 / t.stepMs, i = t.stepStartMs == null ? 0 : (-t.stepStartMs / 1e3 * r % 1 + 1) % 1;
3713
3726
  e.packet = n.reduceMotion ? null : {
3714
- ...fo,
3727
+ ...mo,
3715
3728
  glowColor: e.color,
3716
3729
  speed: r,
3717
3730
  phase: i
3718
3731
  };
3719
- } else c(e) && (e.alpha = uo, e.packet = null);
3732
+ } else c(e) && (e.alpha = po, e.packet = null);
3720
3733
  });
3721
3734
  }
3722
- function go(e, t = {}) {
3723
- let n = e.view === "dataflow", r = e.scenario ? Ga(e) : e.selectedNode ? Wa(e.selectedNode, Ua(e), {
3735
+ function vo(e, t = {}) {
3736
+ let n = e.view === "dataflow", r = e.scenario ? qa(e) : e.selectedNode ? Ka(e.selectedNode, Ga(e), {
3724
3737
  throughChildren: !!e.throughChildren,
3725
3738
  kind: e.selectedKind || null
3726
- }) : null, i = n && e.flow ? co(e.flow) : [], a = !(n && e.flow) && !e.isFreeform ? so(e) : [], o = {
3727
- nodes: oo(e, r),
3728
- edges: ro(e, r, !!t.reduceMotion),
3739
+ }) : null, i = n && e.flow ? uo(e.flow) : [], a = !(n && e.flow) && !e.isFreeform ? lo(e) : [], o = {
3740
+ nodes: co(e, r),
3741
+ edges: ao(e, r, !!t.reduceMotion),
3729
3742
  decor: {
3730
3743
  grid: {
3731
3744
  size: 48,
@@ -3744,18 +3757,18 @@ function go(e, t = {}) {
3744
3757
  theme: "dark",
3745
3758
  version: e.sceneVersion || 0
3746
3759
  };
3747
- e.view === "house" && On(o, e), e.scenario && ho(o, e.scenario, t), o.greying = o.nodes.some((e) => e.greyed) || o.edges.some((e) => e.greyed);
3760
+ e.view === "house" && wi(o, e), e.scenario && _o(o, e.scenario, t), o.greying = o.nodes.some((e) => e.greyed) || o.edges.some((e) => e.greyed);
3748
3761
  let s = {
3749
3762
  nodes: o.nodes.map((e) => e.color),
3750
3763
  edges: o.edges.map((e) => e.color)
3751
3764
  };
3752
- return e.scenario && xn(o, bn(e.scenario, e.nodes, e.edges)), e.scenario && Rn(o, e.scenario), e.forgeLit && na(o, e.forgeLit), o.nodes.forEach((e, t) => {
3765
+ return e.scenario && _i(o, gi(e.scenario, e.nodes, e.edges)), e.scenario && Pi(o, e.scenario), e.forgeLit && ia(o, e.forgeLit), o.nodes.forEach((e, t) => {
3753
3766
  s.nodes.length === o.nodes.length && e.color !== s.nodes[t] && o.painted.nodes.add(e.id);
3754
3767
  }), o.edges.forEach((e, t) => {
3755
3768
  s.edges.length === o.edges.length && e.color !== s.edges[t] && o.painted.edges.add(e.key);
3756
- }), e.theme === "light" && xi(o), o;
3769
+ }), e.theme === "light" && zn(o), o;
3757
3770
  }
3758
- function _o(e = go) {
3771
+ function yo(e = vo) {
3759
3772
  let t = null, n, r = {
3760
3773
  builds: 0,
3761
3774
  get(i) {
@@ -3765,7 +3778,7 @@ function _o(e = go) {
3765
3778
  return r;
3766
3779
  }
3767
3780
  // ../explorer/engine/map-style.js
3768
- var vo = Object.freeze(Object.keys(P)), yo = Object.freeze([
3781
+ var bo = Object.freeze(Object.keys(L)), xo = Object.freeze([
3769
3782
  "app",
3770
3783
  "pkg",
3771
3784
  "page",
@@ -3784,7 +3797,7 @@ var vo = Object.freeze(Object.keys(P)), yo = Object.freeze([
3784
3797
  "device",
3785
3798
  "house",
3786
3799
  "persona"
3787
- ]), bo = Object.freeze([
3800
+ ]), So = Object.freeze([
3788
3801
  "ownership",
3789
3802
  "usage",
3790
3803
  "flow",
@@ -3796,33 +3809,33 @@ var vo = Object.freeze(Object.keys(P)), yo = Object.freeze([
3796
3809
  "runs-on",
3797
3810
  "uses",
3798
3811
  "extends"
3799
- ]), xo = Object.freeze([
3812
+ ]), Co = Object.freeze([
3800
3813
  "added",
3801
3814
  "changed",
3802
3815
  "removed",
3803
3816
  "edit"
3804
- ]), So = Object.freeze([
3817
+ ]), wo = Object.freeze([
3805
3818
  "selected",
3806
3819
  "match",
3807
3820
  "lit"
3808
- ]), Co = "--corn-map-stroke", wo = "--corn-map-label", To = "--corn-map-label-halo", Eo = "--corn-map-font", Do = "--corn-map-edge-width", Oo = "--corn-map-glow", ko = "--corn-map-label-min", Ao = "--corn-map-grey", jo = "--corn-map-grey-alpha", Mo = "--corn-map-glyph", No = 1.6, Po = 1.5, Fo = 1.2, Io = (e) => `--corn-map-node-${e}`, Lo = (e) => `--corn-map-group-${e}`, Ro = (e, t) => $n(e, t), zo = (e) => `--corn-map-edge-${e}`, Q = (e) => `--corn-map-${e}`, Bo = Object.freeze([
3809
- ...vo.map(Io),
3810
- ...yo.map(Lo),
3811
- Co,
3812
- wo,
3821
+ ]), To = "--corn-map-stroke", Eo = "--corn-map-label", Do = "--corn-map-label-halo", Oo = "--corn-map-font", ko = "--corn-map-edge-width", Ao = "--corn-map-glow", jo = "--corn-map-label-min", Mo = "--corn-map-grey", No = "--corn-map-grey-alpha", Po = "--corn-map-glyph", Fo = "--corn-ground", Io = 1.6, Lo = 1.5, Ro = 1.2, zo = (e) => `--corn-map-node-${e}`, Bo = (e) => `--corn-map-group-${e}`, Vo = (e, t) => _r(e, t), Ho = (e) => `--corn-map-edge-${e}`, Q = (e) => `--corn-map-${e}`, Uo = Object.freeze([
3822
+ ...bo.map(zo),
3823
+ ...xo.map(Bo),
3813
3824
  To,
3825
+ Eo,
3826
+ Do,
3827
+ Po,
3814
3828
  Mo,
3815
- Ao,
3816
- ...bo.map(zo),
3817
- ...xo.map(Q),
3818
- ...So.map(Q)
3829
+ ...So.map(Ho),
3830
+ ...Co.map(Q),
3831
+ ...wo.map(Q)
3819
3832
  ]);
3820
3833
  function $(e, t) {
3821
- let [n, r, i, a] = B(e), o = B(t)[3];
3822
- return o >= 1 ? e : va(n, r, i, a * o);
3834
+ let [n, r, i, a] = N(e), o = N(t)[3];
3835
+ return o >= 1 ? e : ba(n, r, i, a * o);
3823
3836
  }
3824
- var Vo = /^(?:serif|sans-serif|monospace|cursive|fantasy|system-ui|ui-serif|ui-sans-serif|ui-monospace|ui-rounded|emoji|math|fangsong)$/i, Ho = /^(?:-apple-system|BlinkMacSystemFont)$/;
3825
- function Uo(e) {
3837
+ var Wo = /^(?:serif|sans-serif|monospace|cursive|fantasy|system-ui|ui-serif|ui-sans-serif|ui-monospace|ui-rounded|emoji|math|fangsong)$/i, Go = /^(?:-apple-system|BlinkMacSystemFont)$/;
3838
+ function Ko(e) {
3826
3839
  let t = typeof e == "string" ? e.trim() : "";
3827
3840
  if (!t || t.length > 200 || t.toLowerCase() === "auto" || /[();:{}<>@\\/\u0000-\u001f\u007f]|\burl\b|\bvar\b|\bexpression\b|\bimport\b/i.test(t)) return null;
3828
3841
  let n = t.split(",").map((e) => e.trim());
@@ -3831,46 +3844,47 @@ function Uo(e) {
3831
3844
  for (let e of n) {
3832
3845
  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;
3833
3846
  if (!n) return null;
3834
- r.push(Vo.test(n) ? n.toLowerCase() : Ho.test(n) ? n : `"${n}"`);
3847
+ r.push(Wo.test(n) ? n.toLowerCase() : Go.test(n) ? n : `"${n}"`);
3835
3848
  }
3836
3849
  return r.join(", ");
3837
3850
  }
3838
- function Wo(e, t) {
3851
+ function qo(e, t) {
3839
3852
  let n = /^\s*(\d*\.?\d+)(?:px)?\s*$/i.exec(String(e ?? "")), r = n ? parseFloat(n[1]) : NaN;
3840
3853
  return Number.isFinite(r) && r > 0 && r <= t ? r : null;
3841
3854
  }
3842
- function Go(e) {
3843
- let t = Wo(e, 24);
3855
+ function Jo(e) {
3856
+ let t = qo(e, 24);
3844
3857
  return t !== null && t >= 9 ? t : null;
3845
3858
  }
3846
- function Ko(e) {
3859
+ function Yo(e) {
3847
3860
  let t = /^\s*(\d*\.?\d+)(px)?\s*$/i.exec(String(e ?? ""));
3848
3861
  if (!t) return null;
3849
3862
  let n = parseFloat(t[1]);
3850
3863
  return t[2] && n !== 0 ? null : Number.isFinite(n) && n >= 0 && n <= 4 ? n : null;
3851
3864
  }
3852
- function qo(e) {
3865
+ function Xo(e) {
3853
3866
  let t = /^\s*(\d*\.?\d+)\s*$/.exec(String(e ?? "")), n = t ? parseFloat(t[1]) : NaN;
3854
3867
  return Number.isFinite(n) && n >= .1 && n <= 1 ? n : null;
3855
3868
  }
3856
- function Jo(e, t = []) {
3869
+ function Zo(e, t = []) {
3857
3870
  let n = {};
3858
- for (let r of [...Bo, ...t]) {
3859
- let t = fa(e(r));
3871
+ for (let r of [...Uo, ...t]) {
3872
+ let t = ma(e(r));
3860
3873
  t && (n[r] = t);
3861
3874
  }
3862
3875
  let r = parseFloat(String(e("--corn-map-stroke-width") ?? ""));
3863
3876
  return {
3864
3877
  values: n,
3865
- strokeWidth: Number.isFinite(r) && r >= 0 ? r : Po,
3866
- font: Uo(e(Eo)),
3867
- edgeWidth: Wo(e(Do), 12),
3868
- glow: Ko(e(Oo)),
3869
- labelMin: Go(e(ko)),
3870
- greyAlpha: qo(e(jo))
3878
+ strokeWidth: Number.isFinite(r) && r >= 0 ? r : Lo,
3879
+ font: Ko(e(Oo)),
3880
+ edgeWidth: qo(e(ko), 12),
3881
+ glow: Yo(e(Ao)),
3882
+ labelMin: Jo(e(jo)),
3883
+ greyAlpha: Xo(e(No)),
3884
+ ground: ma(e(Fo))
3871
3885
  };
3872
3886
  }
3873
- function Yo(e, t = "") {
3887
+ function Qo(e, t = "") {
3874
3888
  return new Promise((n, r) => {
3875
3889
  if (typeof Image > "u") {
3876
3890
  r(/* @__PURE__ */ Error("no Image"));
@@ -3880,10 +3894,10 @@ function Yo(e, t = "") {
3880
3894
  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;
3881
3895
  });
3882
3896
  }
3883
- function Xo(e, { load: t = Yo, onChange: n = () => {}, warn: r = (e) => console.warn(e) } = {}) {
3897
+ function $o(e, { load: t = Qo, onChange: n = () => {}, warn: r = (e) => console.warn(e) } = {}) {
3884
3898
  let i = /* @__PURE__ */ new Map(), a = 0;
3885
3899
  for (let [o, s] of Object.entries(e || {})) {
3886
- if (!nr(o) || typeof s != "string" || !s.startsWith("/cornfield/theme/assets/") || s.includes("..")) continue;
3900
+ if (!br(o) || typeof s != "string" || !s.startsWith("/cornfield/theme/assets/") || s.includes("..")) continue;
3887
3901
  let e = {
3888
3902
  status: "loading",
3889
3903
  image: null
@@ -3904,29 +3918,31 @@ function Xo(e, { load: t = Yo, onChange: n = () => {}, warn: r = (e) => console.
3904
3918
  anyReady: () => a > 0
3905
3919
  };
3906
3920
  }
3907
- var Zo = {
3921
+ var es = {
3908
3922
  values: {},
3909
- strokeWidth: Po,
3923
+ strokeWidth: Lo,
3910
3924
  font: null,
3911
3925
  edgeWidth: null,
3912
3926
  glow: null,
3913
3927
  labelMin: null,
3914
- greyAlpha: null
3915
- }, Qo = Object.freeze({
3928
+ greyAlpha: null,
3929
+ ground: null
3930
+ }, ts = Object.freeze({
3916
3931
  version: 0,
3917
3932
  values: Object.freeze({}),
3918
- strokeWidth: Po,
3933
+ strokeWidth: Lo,
3919
3934
  font: null,
3920
3935
  edgeWidth: null,
3921
3936
  glow: null,
3922
3937
  labelMin: null,
3923
3938
  greyAlpha: null,
3939
+ ground: null,
3924
3940
  icons: null,
3925
3941
  pixelated: !1,
3926
3942
  plain: !0
3927
- }), $o = 500;
3928
- function es(e) {
3929
- let t = Zo, n = null, r = !1, i = 0, a = [], o = /* @__PURE__ */ new Set(), s = () => {
3943
+ }), ns = 500;
3944
+ function rs(e) {
3945
+ let t = es, n = null, r = !1, i = 0, a = [], o = /* @__PURE__ */ new Set(), s = () => {
3930
3946
  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;
3931
3947
  return Object.freeze({
3932
3948
  version: i,
@@ -3937,6 +3953,7 @@ function es(e) {
3937
3953
  glow: t.glow,
3938
3954
  labelMin: t.labelMin,
3939
3955
  greyAlpha: t.greyAlpha,
3956
+ ground: t.ground,
3940
3957
  icons: n,
3941
3958
  pixelated: r,
3942
3959
  plain: e
@@ -3953,13 +3970,13 @@ function es(e) {
3953
3970
  return o.add(e), () => o.delete(e);
3954
3971
  },
3955
3972
  setSubjects({ kinds: e = [], layers: t = [] } = {}) {
3956
- let n = [...new Set([...e.map(([e, t]) => $n(e, t)), ...t.map((e) => er(e))].filter(Boolean))].sort().slice(0, $o);
3973
+ let n = [...new Set([...e.map(([e, t]) => _r(e, t)), ...t.map((e) => vr(e))].filter(Boolean))].sort().slice(0, ns);
3957
3974
  return n.length === a.length && n.every((e, t) => e === a[t]) ? !1 : (a = n, d.refresh());
3958
3975
  },
3959
3976
  refresh(n = e.tokenReader()) {
3960
3977
  if (!n) return !1;
3961
- let r = Jo(n, a);
3962
- 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;
3978
+ let r = Zo(n, a);
3979
+ if (r.strokeWidth === t.strokeWidth && r.font === t.font && r.edgeWidth === t.edgeWidth && r.glow === t.glow && r.labelMin === t.labelMin && r.ground === t.ground && Object.keys(r.values).length === Object.keys(t.values).length && Object.entries(r.values).every(([e, n]) => t.values[e] === n)) return !1;
3963
3980
  t = r, u();
3964
3981
  try {
3965
3982
  let t = e.doc && e.doc.fonts;
@@ -3970,8 +3987,8 @@ function es(e) {
3970
3987
  setIcons(t, i = {}) {
3971
3988
  let a = t && t.icons && typeof t.icons == "object" ? t.icons : {};
3972
3989
  r = !!(t && t.pixelated === !0);
3973
- let o = e.base ? "anonymous" : "", s = i.load || ((t) => Yo(e.url(t), o));
3974
- return n = Object.keys(a).length ? Xo(a, {
3990
+ let o = e.base ? "anonymous" : "", s = i.load || ((t) => Qo(e.url(t), o));
3991
+ return n = Object.keys(a).length ? $o(a, {
3975
3992
  ...i,
3976
3993
  load: s,
3977
3994
  onChange: () => {
@@ -3984,7 +4001,7 @@ function es(e) {
3984
4001
  return r && r.setAttribute && (t && t.pixelated === !0 ? r.setAttribute("data-pixelated", "") : r.removeAttribute("data-pixelated")), d.setIcons(t, n);
3985
4002
  },
3986
4003
  reset() {
3987
- t = Zo, n = null, r = !1, a = [], u();
4004
+ t = es, n = null, r = !1, a = [], u();
3988
4005
  },
3989
4006
  watch() {
3990
4007
  let n = () => {
@@ -4022,12 +4039,12 @@ function es(e) {
4022
4039
  };
4023
4040
  return d;
4024
4041
  }
4025
- var ts = (e) => e.slot("map-style", es), ns = (e, t) => {
4042
+ var is = (e) => e.slot("map-style", rs), as = (e, t) => {
4026
4043
  for (let n of t) if (e[n]) return e[n];
4027
4044
  return null;
4028
- }, rs = tr, is = (e, t) => ns(e, rs(t));
4029
- function as(e, t) {
4030
- let n = t.edgeWidth == null ? 1 : t.edgeWidth / No, r = t.glow == null ? 1 : t.glow;
4045
+ }, os = yr, ss = (e, t) => as(e, os(t));
4046
+ function cs(e, t) {
4047
+ let n = t.edgeWidth == null ? 1 : t.edgeWidth / Io, r = t.glow == null ? 1 : t.glow;
4031
4048
  if (n === 1 && r === 1) return e;
4032
4049
  let i = {
4033
4050
  ...e,
@@ -4039,19 +4056,19 @@ function as(e, t) {
4039
4056
  glow: e.packet.glow * r
4040
4057
  }), i;
4041
4058
  }
4042
- function os(e, t, n) {
4059
+ function ls(e, t, n) {
4043
4060
  let { values: r } = t;
4044
4061
  if (e.mark && e.mark !== "none") {
4045
4062
  let n = r[Q(e.mark)];
4046
- return as(n ? {
4063
+ return cs(n ? {
4047
4064
  ...e,
4048
4065
  color: n,
4049
4066
  glowColor: e.glowColor ? n : e.glowColor
4050
4067
  } : e, t);
4051
4068
  }
4052
- if (n.has(e.key)) return as(e, t);
4053
- let i = !e.curve && e.glow > 0 && !e.arrow && r[Q("lit")] || r[zo(e.kind)];
4054
- if (!i) return as(e, t);
4069
+ if (n.has(e.key)) return cs(e, t);
4070
+ let i = !e.curve && e.glow > 0 && !e.arrow && r[Q("lit")] || r[Ho(e.kind)];
4071
+ if (!i) return cs(e, t);
4055
4072
  let a = {
4056
4073
  ...e,
4057
4074
  color: $(i, e.color)
@@ -4059,18 +4076,18 @@ function os(e, t, n) {
4059
4076
  return e.glowColor && (a.glowColor = $(i, e.glowColor)), e.packet && (a.packet = {
4060
4077
  ...e.packet,
4061
4078
  glowColor: $(i, e.packet.glowColor)
4062
- }), as(a, t);
4079
+ }), cs(a, t);
4063
4080
  }
4064
- function ss(e) {
4065
- let [t, n, r, i] = B(e), a = Math.round(.2126 * t + .7152 * n + .0722 * r);
4066
- return i >= 1 ? `rgb(${a}, ${a}, ${a})` : va(a, a, a, i);
4081
+ function us(e) {
4082
+ let [t, n, r, i] = N(e), a = Math.round(.2126 * t + .7152 * n + .0722 * r);
4083
+ return i >= 1 ? `rgb(${a}, ${a}, ${a})` : ba(a, a, a, i);
4067
4084
  }
4068
- function cs(e, t) {
4069
- let { values: n } = t, r = n[Ao], i = t.greyAlpha == null ? 1 : t.greyAlpha / ni, a = (e) => r ? $(r, e) : ss(e), o = n[wo], s = n[Co], c = e.painted || {
4085
+ function ds(e, t) {
4086
+ let { values: n } = t, r = n[Mo], i = t.greyAlpha == null ? 1 : t.greyAlpha / bn, a = (e) => r ? $(r, e) : us(e), o = n[Eo], s = n[To], c = e.painted || {
4070
4087
  nodes: /* @__PURE__ */ new Set(),
4071
4088
  edges: /* @__PURE__ */ new Set()
4072
4089
  }, l = e.nodes.map((e) => {
4073
- let r = !c.nodes.has(e.id) && is(n, e), l = t.icons && rr(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);
4090
+ let r = !c.nodes.has(e.id) && ss(n, e), l = t.icons && xr(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);
4074
4091
  if (!r && !o && !s && !l && !u && !d) return e;
4075
4092
  let f = { ...e };
4076
4093
  return u && (f.glow = e.glow * t.glow), r && (f.color = r), o && (f.labelColor = $(o, e.labelColor)), s && t.strokeWidth > 0 && (f.stroke = {
@@ -4078,7 +4095,7 @@ function cs(e, t) {
4078
4095
  width: t.strokeWidth
4079
4096
  }), l && !d && (f.icon = l), d && (f.color = a(f.color), f.alpha = Math.min(1, e.alpha * i)), f;
4080
4097
  }), u = e.edges.map((e) => {
4081
- let n = os(e, t, c.edges);
4098
+ let n = ls(e, t, c.edges);
4082
4099
  return !e.greyed || c.edges.has(e.key) ? n : {
4083
4100
  ...n,
4084
4101
  color: a(n.color),
@@ -4091,9 +4108,9 @@ function cs(e, t) {
4091
4108
  edges: u
4092
4109
  };
4093
4110
  t.font && (d.labelFont = t.font), t.labelMin != null && (d.labelMin = t.labelMin);
4094
- let f = n[To];
4111
+ let f = n[Do];
4095
4112
  if (f) {
4096
- let { node: t, edge: n } = Ia(e.theme).labelOutline;
4113
+ let { node: t, edge: n } = Ra(e.theme).labelOutline;
4097
4114
  d.labelOutline = {
4098
4115
  node: {
4099
4116
  ...t,
@@ -4107,21 +4124,21 @@ function cs(e, t) {
4107
4124
  }
4108
4125
  return d;
4109
4126
  }
4110
- var ls = /* @__PURE__ */ new WeakMap();
4111
- function us(e, t) {
4127
+ var fs = /* @__PURE__ */ new WeakMap();
4128
+ function ps(e, t) {
4112
4129
  if (!t || t.plain && !e.greying) return e;
4113
- let n = ls.get(e);
4130
+ let n = fs.get(e);
4114
4131
  if (n && n.style === t) return n.out;
4115
- let r = cs(e, t);
4116
- return ls.set(e, {
4132
+ let r = ds(e, t);
4133
+ return fs.set(e, {
4117
4134
  style: t,
4118
4135
  out: r
4119
4136
  }), r;
4120
4137
  }
4121
- var ds = /* @__PURE__ */ new WeakMap();
4122
- function fs(e, t) {
4138
+ var ms = /* @__PURE__ */ new WeakMap();
4139
+ function hs(e, t) {
4123
4140
  if (!t || t.plain) return e;
4124
- let n = ds.get(e);
4141
+ let n = ms.get(e);
4125
4142
  if (n && n.style === t) return n.out;
4126
4143
  let { values: r } = t, i = { ...e.halo };
4127
4144
  for (let e of ["selected", "match"]) {
@@ -4133,7 +4150,7 @@ function fs(e, t) {
4133
4150
  });
4134
4151
  }
4135
4152
  let a = { ...e.mark };
4136
- for (let e of xo) {
4153
+ for (let e of Co) {
4137
4154
  let t = r[Q(e)];
4138
4155
  t && (a[e] = {
4139
4156
  ...a[e],
@@ -4145,11 +4162,11 @@ function fs(e, t) {
4145
4162
  halo: i,
4146
4163
  mark: a
4147
4164
  };
4148
- return ds.set(e, {
4165
+ return ms.set(e, {
4149
4166
  style: t,
4150
4167
  out: o
4151
4168
  }), o;
4152
4169
  }
4153
4170
  // \0corn-default-tokens
4154
- var ps = "/* 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-layers[theme=\"light\"]),\n:where(corn-map[theme=\"light\"]),\n:where(corn-node-panel[theme=\"light\"]),\n:where(corn-review[theme=\"light\"]),\n:where(corn-scope[theme=\"light\"]),\n:where(corn-search[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-layers[theme=\"dark\"]),\n:where(corn-map[theme=\"dark\"]),\n:where(corn-node-panel[theme=\"dark\"]),\n:where(corn-review[theme=\"dark\"]),\n:where(corn-scope[theme=\"dark\"]),\n:where(corn-search[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";
4155
- export { di as $, nt as $t, Ia as A, n as An, Ut as At, Xi as B, Dt as Bt, _o as C, _ as Cn, qt as Ct, io as D, d as Dn, rn as Dt, Wa as E, p as En, an as Et, $i as F, M as Ft, Fi as G, j as Gt, Di as H, Ot as Ht, Qi as I, Mt as It, Pi as J, yt as Jt, ki as K, ht as Kt, Zi as L, At as Lt, fa as M, Ht as Mt, oa as N, Bt as Nt, X as O, c as On, Ft as Ot, ca as P, Nt as Pt, ai as Q, it as Qt, Yi as R, Et as Rt, go as S, E as Sn, P as St, ao as T, v as Tn, on as Tt, Ei as U, wt as Ut, Si as V, kt as Vt, Vi as W, xt as Wt, Ii as X, ze as Xt, Ai as Y, ft as Yt, oi as Z, et as Zt, ba as _, k as _n, en as _t, Co as a, De as an, z as at, J as b, ee as bn, Yt as bt, fs as c, ge as cn, xr as ct, Da as d, _e as dn, gr as dt, Re as en, yi as et, Ca as f, be as fn, vr as ft, xa as g, S as gn, hn as gt, Sa as h, C as hn, yn as ht, Qo as i, Ae as in, Pr as it, Ya as j, Gt as jt, Ha as k, l as kn, N as kt, ts as l, ye as ln, wr as lt, ka as m, me as mn, cr as mt, Mo as n, Fe as nn, Yr as nt, is as o, we as on, br as ot, Pa as p, Se as pn, _r as pt, ji as q, vt as qt, Fo as r, Ee as rn, B as rt, Ro as s, Te as sn, Fr as st, ps as t, Le as tn, Qr as tt, us as u, xe as un, Gn as ut, Ba as v, te as vn, $t as vt, Ja as w, y as wn, un as wt, Ma as x, D as xn, nn as xt, ja as y, A as yn, sn as yt, Ji as z, Tt as zt };
4171
+ var gs = "/* 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-changes[theme=\"light\"]),\n:where(corn-decision[theme=\"light\"]),\n:where(corn-layers[theme=\"light\"]),\n:where(corn-map[theme=\"light\"]),\n:where(corn-node-panel[theme=\"light\"]),\n:where(corn-proposal[theme=\"light\"]),\n:where(corn-review[theme=\"light\"]),\n:where(corn-scope[theme=\"light\"]),\n:where(corn-search[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-changes[theme=\"dark\"]),\n:where(corn-decision[theme=\"dark\"]),\n:where(corn-layers[theme=\"dark\"]),\n:where(corn-map[theme=\"dark\"]),\n:where(corn-node-panel[theme=\"dark\"]),\n:where(corn-proposal[theme=\"dark\"]),\n:where(corn-review[theme=\"dark\"]),\n:where(corn-scope[theme=\"dark\"]),\n:where(corn-search[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";
4172
+ export { V as $, et as $t, Wa as A, c as An, Xt as At, Yi as B, Et as Bt, vo as C, D as Cn, Ln as Ct, Ka as D, v as Dn, pn as Dt, so as E, y as En, N as Et, ua as F, Bt as Ft, Xi as G, wt as Gt, Wi as H, Dt as Ht, Fi as I, zt as It, H as J, ht as Jt, hi as K, xt as Kt, Bi as L, Lt, Za as M, n as Mn, Yt as Mt, ma as N, qt as Nt, oo as O, p as On, Ht as Ot, ca as P, Vt as Pt, $r as Q, ze as Qt, zi as R, It as Rt, Pa as S, ee as Sn, kn as St, Xa as T, _ as Tn, fn as Tt, qi as U, kt as Ut, Hi as V, Tt as Vt, Ui as W, Ot as Wt, ii as X, yt as Xt, oi as Y, vt as Yt, ni as Z, ft as Zt, Sa as _, C as _n, $n as _t, To as a, Ee as an, Fr as at, Ma as b, te as bn, wn as bt, hs as c, we as cn, Dr as ct, ka as d, ye as dn, er as dt, it as en, zr as et, Ta as f, xe as fn, Un as ft, Ca as g, me as gn, rr as gt, wa as h, Se as hn, Vn as ht, ts as i, Fe as in, lr as it, Ra as j, l as jn, Qt as jt, X as k, d as kn, M as kt, is as l, Te as ln, Jn as lt, ja as m, be as mn, L as mt, Po as n, Re as nn, Br as nt, ss as o, Ae as on, Lr as ot, Ia as p, _e as pn, Xn as pt, di as q, j as qt, Ro as r, Le as rn, Ur as rt, Vo as s, De as sn, Ir as st, gs as t, nt as tn, ei as tt, ps as u, ge as un, qn as ut, Ha as v, S as vn, Qn as vt, yo as w, E as wn, gn as wt, J as x, A as xn, Cn as xt, Na as y, k as yn, Zn as yt, ta as z, Rt as zt };