@getorrery/ui 0.3.1 → 0.3.3
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getorrery-ui.mjs","names":[],"sources":["../../src/lib/icon/icons.ts","../../src/lib/icon/icon.component.ts","../../src/lib/status/status.components.ts","../../src/lib/status/kbd.component.ts","../../src/lib/logo/logo-art.ts","../../src/lib/logo/logo.component.ts","../../src/lib/status/tool-badge.component.ts","../../src/lib/containers/dialog-shell.component.ts","../../src/lib/containers/containers.components.ts","../../src/lib/containers/pane-resizer.component.ts","../../src/lib/controls/controls.components.ts","../../src/lib/controls/choice.component.ts","../../src/lib/changes/file-tree.ts","../../src/lib/changes/file-tree.component.ts","../../src/lib/diff/diff-model.ts","../../src/lib/diff/diff.component.ts","../../src/lib/code/code.component.ts","../../src/lib/code/monaco.ts","../../src/lib/code/review-comments.monaco.ts","../../src/lib/code/monaco-diff.component.ts","../../src/lib/changes/changes-review.ts","../../src/lib/changes/changes-expand.component.ts","../../src/lib/changes/changes-panel.component.ts"],"sourcesContent":["// Generated from design/system/components.js (the canonical set) plus the ADE's and Cloud's extra\n// glyphs (Lucide, 24-unit grid, stroke drawn by the icon component). Edit the design set first.\n\n/** Every glyph: the inner markup of a 24×24 stroked SVG. */\nexport const ICONS: Readonly<Record<string, string>> = {\n \"alert\": \"<path d=\\\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\\\"/><path d=\\\"M12 9v4\\\"/><path d=\\\"M12 17h.01\\\"/>\",\n \"archive\": \"<rect width=\\\"20\\\" height=\\\"5\\\" x=\\\"2\\\" y=\\\"3\\\" rx=\\\"1\\\"/><path d=\\\"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8\\\"/><path d=\\\"M10 12h4\\\"/>\",\n \"arrow-down\": \"<path d=\\\"M12 5v14\\\"/><path d=\\\"m19 12-7 7-7-7\\\"/>\",\n \"arrow-down-to-line\": \"<path d=\\\"M12 17V3\\\"/><path d=\\\"m6 11 6 6 6-6\\\"/><path d=\\\"M19 21H5\\\"/>\",\n \"arrow-left\": \"<path d=\\\"m12 19-7-7 7-7\\\"/><path d=\\\"M19 12H5\\\"/>\",\n \"arrow-left-right\": \"<path d=\\\"M8 3 4 7l4 4\\\"/><path d=\\\"M4 7h16\\\"/><path d=\\\"m16 21 4-4-4-4\\\"/><path d=\\\"M20 17H4\\\"/>\",\n \"arrow-right\": \"<path d=\\\"M5 12h14\\\"/><path d=\\\"m12 5 7 7-7 7\\\"/>\",\n \"arrow-up\": \"<path d=\\\"m5 12 7-7 7 7\\\"/><path d=\\\"M12 19V5\\\"/>\",\n \"arrow-up-from-line\": \"<path d=\\\"m18 9-6-6-6 6\\\"/><path d=\\\"M12 3v14\\\"/><path d=\\\"M5 21h14\\\"/>\",\n \"at\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"4\\\"/><path d=\\\"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8\\\"/>\",\n \"bell\": \"<path d=\\\"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9\\\"/><path d=\\\"M10.3 21a1.94 1.94 0 0 0 3.4 0\\\"/>\",\n \"bot\": \"<path d=\\\"M12 8V4H8\\\"/><rect width=\\\"16\\\" height=\\\"12\\\" x=\\\"4\\\" y=\\\"8\\\" rx=\\\"2\\\"/><path d=\\\"M2 14h2\\\"/><path d=\\\"M20 14h2\\\"/><path d=\\\"M15 13v2\\\"/><path d=\\\"M9 13v2\\\"/>\",\n \"box\": \"<path d=\\\"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\\\"/><path d=\\\"m3.3 7 8.7 5 8.7-5\\\"/><path d=\\\"M12 22V12\\\"/>\",\n \"braces\": \"<path d=\\\"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1\\\"/><path d=\\\"M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1\\\"/>\",\n \"chart-gantt\": \"<path d=\\\"M10 6h8\\\"/><path d=\\\"M12 16h6\\\"/><path d=\\\"M3 3v16a2 2 0 0 0 2 2h16\\\"/><path d=\\\"M8 11h7\\\"/>\",\n \"check\": \"<path d=\\\"M20 6 9 17l-5-5\\\"/>\",\n \"check-circle\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"m9 12 2 2 4-4\\\"/>\",\n \"chevron-down\": \"<path d=\\\"m6 9 6 6 6-6\\\"/>\",\n \"chevron-left\": \"<path d=\\\"m15 18-6-6 6-6\\\"/>\",\n \"chevron-right\": \"<path d=\\\"m9 18 6-6-6-6\\\"/>\",\n \"chevron-up\": \"<path d=\\\"m18 15-6-6-6 6\\\"/>\",\n \"chevrons-down\": \"<path d=\\\"m7 6 5 5 5-5\\\"/><path d=\\\"m7 13 5 5 5-5\\\"/>\",\n \"chevrons-up\": \"<path d=\\\"m17 11-5-5-5 5\\\"/><path d=\\\"m17 18-5-5-5 5\\\"/>\",\n \"circle\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/>\",\n \"clock\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"M12 6v6l4 2\\\"/>\",\n \"cloud\": \"<path d=\\\"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z\\\"/>\",\n \"code\": \"<path d=\\\"m16 18 6-6-6-6\\\"/><path d=\\\"m8 6-6 6 6 6\\\"/>\",\n \"columns\": \"<rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"2\\\"/><path d=\\\"M12 3v18\\\"/>\",\n \"columns-3\": \"<rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"2\\\"/><path d=\\\"M9 3v18\\\"/><path d=\\\"M15 3v18\\\"/>\",\n \"copy\": \"<rect width=\\\"14\\\" height=\\\"14\\\" x=\\\"8\\\" y=\\\"8\\\" rx=\\\"2\\\"/><path d=\\\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\\\"/>\",\n \"corner-down-left\": \"<path d=\\\"M20 4v7a4 4 0 0 1-4 4H4\\\"/><path d=\\\"m9 10-5 5 5 5\\\"/>\",\n \"cpu\": \"<rect width=\\\"16\\\" height=\\\"16\\\" x=\\\"4\\\" y=\\\"4\\\" rx=\\\"2\\\"/><rect width=\\\"6\\\" height=\\\"6\\\" x=\\\"9\\\" y=\\\"9\\\" rx=\\\"1\\\"/><path d=\\\"M15 2v2\\\"/><path d=\\\"M15 20v2\\\"/><path d=\\\"M2 15h2\\\"/><path d=\\\"M2 9h2\\\"/><path d=\\\"M20 15h2\\\"/><path d=\\\"M20 9h2\\\"/><path d=\\\"M9 2v2\\\"/><path d=\\\"M9 20v2\\\"/>\",\n \"crosshair\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><line x1=\\\"22\\\" x2=\\\"18\\\" y1=\\\"12\\\" y2=\\\"12\\\"/><line x1=\\\"6\\\" x2=\\\"2\\\" y1=\\\"12\\\" y2=\\\"12\\\"/><line x1=\\\"12\\\" x2=\\\"12\\\" y1=\\\"6\\\" y2=\\\"2\\\"/><line x1=\\\"12\\\" x2=\\\"12\\\" y1=\\\"22\\\" y2=\\\"18\\\"/>\",\n \"database\": \"<ellipse cx=\\\"12\\\" cy=\\\"5\\\" rx=\\\"9\\\" ry=\\\"3\\\"/><path d=\\\"M3 5V19A9 3 0 0 0 21 19V5\\\"/><path d=\\\"M3 12A9 3 0 0 0 21 12\\\"/>\",\n \"download\": \"<path d=\\\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\\\"/><path d=\\\"m7 10 5 5 5-5\\\"/><path d=\\\"M12 15V3\\\"/>\",\n \"edit\": \"<path d=\\\"M21.17 6.81a1 1 0 0 0-3.99-3.99L3.84 16.17a2 2 0 0 0-.5.83l-1.32 4.35a.5.5 0 0 0 .62.62l4.35-1.32a2 2 0 0 0 .83-.5z\\\"/>\",\n \"external\": \"<path d=\\\"M15 3h6v6\\\"/><path d=\\\"M10 14 21 3\\\"/><path d=\\\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\\\"/>\",\n \"eye\": \"<path d=\\\"M2.06 12.35a1 1 0 0 1 0-.7 10.75 10.75 0 0 1 19.88 0 1 1 0 0 1 0 .7 10.75 10.75 0 0 1-19.88 0\\\"/><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"3\\\"/>\",\n \"eye-off\": \"<path d=\\\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\\\"/><path d=\\\"M14.084 14.158a3 3 0 0 1-4.242-4.242\\\"/><path d=\\\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\\\"/><path d=\\\"m2 2 20 20\\\"/>\",\n \"file\": \"<path d=\\\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\\\"/><path d=\\\"M14 2v4a2 2 0 0 0 2 2h4\\\"/>\",\n \"file-diff\": \"<path d=\\\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\\\"/><path d=\\\"M9 10h6\\\"/><path d=\\\"M12 13V7\\\"/><path d=\\\"M9 17h6\\\"/>\",\n \"filter\": \"<path d=\\\"M22 3H2l8 9.46V19l4 2v-8.54z\\\"/>\",\n \"flag\": \"<path d=\\\"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528\\\"/>\",\n \"folder\": \"<path d=\\\"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\\\"/>\",\n \"folder-open\": \"<path d=\\\"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2\\\"/>\",\n \"git-branch\": \"<path d=\\\"M6 3v12\\\"/><circle cx=\\\"18\\\" cy=\\\"6\\\" r=\\\"3\\\"/><circle cx=\\\"6\\\" cy=\\\"18\\\" r=\\\"3\\\"/><path d=\\\"M18 9a9 9 0 0 1-9 9\\\"/>\",\n \"git-commit\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"3\\\"/><path d=\\\"M3 12h6\\\"/><path d=\\\"M15 12h6\\\"/>\",\n \"git-graph\": \"<circle cx=\\\"5\\\" cy=\\\"6\\\" r=\\\"3\\\"/><path d=\\\"M5 9v6\\\"/><circle cx=\\\"5\\\" cy=\\\"18\\\" r=\\\"3\\\"/><path d=\\\"M12 3v18\\\"/><circle cx=\\\"19\\\" cy=\\\"6\\\" r=\\\"3\\\"/><path d=\\\"M16 15.7A9 9 0 0 0 19 9\\\"/>\",\n \"git-merge\": \"<circle cx=\\\"18\\\" cy=\\\"18\\\" r=\\\"3\\\"/><circle cx=\\\"6\\\" cy=\\\"6\\\" r=\\\"3\\\"/><path d=\\\"M6 21V9a9 9 0 0 0 9 9\\\"/>\",\n \"git-pull-request\": \"<circle cx=\\\"18\\\" cy=\\\"18\\\" r=\\\"3\\\"/><circle cx=\\\"6\\\" cy=\\\"6\\\" r=\\\"3\\\"/><path d=\\\"M13 6h3a2 2 0 0 1 2 2v7\\\"/><path d=\\\"M6 9v12\\\"/>\",\n \"github\": \"<path d=\\\"M9 19c-4 1.5-4-2-6-2.5M15 21v-3.5c0-1 .1-1.4-.5-2 2.8-.3 5.5-1.4 5.5-6a4.6 4.6 0 00-1.3-3.2 4.2 4.2 0 00-.1-3.2s-1-.3-3.4 1.3a11.6 11.6 0 00-6 0C6.8 2.8 5.8 3.1 5.8 3.1a4.2 4.2 0 00-.1 3.2A4.6 4.6 0 004.4 9.5c0 4.6 2.7 5.7 5.5 6-.6.6-.6 1.2-.5 2V21\\\"/>\",\n \"globe\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\\\"/><path d=\\\"M2 12h20\\\"/>\",\n \"grip\": \"<circle cx=\\\"9\\\" cy=\\\"12\\\" r=\\\"1\\\"/><circle cx=\\\"9\\\" cy=\\\"5\\\" r=\\\"1\\\"/><circle cx=\\\"9\\\" cy=\\\"19\\\" r=\\\"1\\\"/><circle cx=\\\"15\\\" cy=\\\"12\\\" r=\\\"1\\\"/><circle cx=\\\"15\\\" cy=\\\"5\\\" r=\\\"1\\\"/><circle cx=\\\"15\\\" cy=\\\"19\\\" r=\\\"1\\\"/>\",\n \"help\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\\\"/><path d=\\\"M12 17h.01\\\"/>\",\n \"history\": \"<path d=\\\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\\\"/><path d=\\\"M3 3v5h5\\\"/><path d=\\\"M12 7v5l4 2\\\"/>\",\n \"home\": \"<path d=\\\"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\\\"/><path d=\\\"M3 10a2 2 0 0 1 .71-1.53l7-6a2 2 0 0 1 2.58 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\\\"/>\",\n \"info\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"M12 16v-4\\\"/><path d=\\\"M12 8h.01\\\"/>\",\n \"key\": \"<circle cx=\\\"7.5\\\" cy=\\\"15.5\\\" r=\\\"5.5\\\"/><path d=\\\"m21 2-9.6 9.6\\\"/><path d=\\\"m15.5 7.5 3 3L22 7l-3-3\\\"/>\",\n \"layers\": \"<path d=\\\"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z\\\"/><path d=\\\"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65\\\"/><path d=\\\"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65\\\"/>\",\n \"layout-grid\": \"<rect width=\\\"7\\\" height=\\\"7\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"1\\\"/><rect width=\\\"7\\\" height=\\\"7\\\" x=\\\"14\\\" y=\\\"3\\\" rx=\\\"1\\\"/><rect width=\\\"7\\\" height=\\\"7\\\" x=\\\"14\\\" y=\\\"14\\\" rx=\\\"1\\\"/><rect width=\\\"7\\\" height=\\\"7\\\" x=\\\"3\\\" y=\\\"14\\\" rx=\\\"1\\\"/>\",\n \"link\": \"<path d=\\\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\\\"/><path d=\\\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\\\"/>\",\n \"list\": \"<path d=\\\"M3 5h.01\\\"/><path d=\\\"M3 12h.01\\\"/><path d=\\\"M3 19h.01\\\"/><path d=\\\"M8 5h13\\\"/><path d=\\\"M8 12h13\\\"/><path d=\\\"M8 19h13\\\"/>\",\n \"list-ordered\": \"<path d=\\\"M11 5h10\\\"/><path d=\\\"M11 12h10\\\"/><path d=\\\"M11 19h10\\\"/><path d=\\\"M4 4h1v5\\\"/><path d=\\\"M4 9h2\\\"/><path d=\\\"M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02\\\"/>\",\n \"lock\": \"<rect width=\\\"18\\\" height=\\\"11\\\" x=\\\"3\\\" y=\\\"11\\\" rx=\\\"2\\\"/><path d=\\\"M7 11V7a5 5 0 0 1 10 0v4\\\"/>\",\n \"mail\": \"<path d=\\\"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7\\\"/><rect x=\\\"2\\\" y=\\\"4\\\" width=\\\"20\\\" height=\\\"16\\\" rx=\\\"2\\\"/>\",\n \"maximize\": \"<path d=\\\"M8 3H5a2 2 0 0 0-2 2v3\\\"/><path d=\\\"M21 8V5a2 2 0 0 0-2-2h-3\\\"/><path d=\\\"M3 16v3a2 2 0 0 0 2 2h3\\\"/><path d=\\\"M16 21h3a2 2 0 0 0 2-2v-3\\\"/>\",\n \"menu\": \"<path d=\\\"M4 6h16\\\"/><path d=\\\"M4 12h16\\\"/><path d=\\\"M4 18h16\\\"/>\",\n \"message\": \"<path d=\\\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\\\"/>\",\n \"minimize\": \"<path d=\\\"M8 3v3a2 2 0 0 1-2 2H3\\\"/><path d=\\\"M21 8h-3a2 2 0 0 1-2-2V3\\\"/><path d=\\\"M3 16h3a2 2 0 0 1 2 2v3\\\"/><path d=\\\"M16 21v-3a2 2 0 0 1 2-2h3\\\"/>\",\n \"minus\": \"<path d=\\\"M5 12h14\\\"/>\",\n \"monitor\": \"<rect width=\\\"18\\\" height=\\\"11\\\" x=\\\"3\\\" y=\\\"5\\\" rx=\\\"1.5\\\"/><path d=\\\"M8 20h8\\\"/><path d=\\\"M12 16v4\\\"/>\",\n \"moon\": \"<path d=\\\"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z\\\"/>\",\n \"more\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"1\\\"/><circle cx=\\\"19\\\" cy=\\\"12\\\" r=\\\"1\\\"/><circle cx=\\\"5\\\" cy=\\\"12\\\" r=\\\"1\\\"/>\",\n \"more-vertical\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"1\\\"/><circle cx=\\\"12\\\" cy=\\\"5\\\" r=\\\"1\\\"/><circle cx=\\\"12\\\" cy=\\\"19\\\" r=\\\"1\\\"/>\",\n \"network\": \"<rect x=\\\"16\\\" y=\\\"16\\\" width=\\\"6\\\" height=\\\"6\\\" rx=\\\"1\\\"/><rect x=\\\"2\\\" y=\\\"16\\\" width=\\\"6\\\" height=\\\"6\\\" rx=\\\"1\\\"/><rect x=\\\"9\\\" y=\\\"2\\\" width=\\\"6\\\" height=\\\"6\\\" rx=\\\"1\\\"/><path d=\\\"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3\\\"/><path d=\\\"M12 12V8\\\"/>\",\n \"package\": \"<path d=\\\"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z\\\"/><path d=\\\"M12 22V12\\\"/><polyline points=\\\"3.29 7 12 12 20.71 7\\\"/><path d=\\\"m7.5 4.27 9 5.15\\\"/>\",\n \"panel-left\": \"<rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"2\\\"/><path d=\\\"M9 3v18\\\"/>\",\n \"panel-right\": \"<rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"2\\\"/><path d=\\\"M15 3v18\\\"/>\",\n \"paperclip\": \"<path d=\\\"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48\\\"/>\",\n \"pause\": \"<rect x=\\\"14\\\" y=\\\"4\\\" width=\\\"4\\\" height=\\\"16\\\" rx=\\\"1\\\"/><rect x=\\\"6\\\" y=\\\"4\\\" width=\\\"4\\\" height=\\\"16\\\" rx=\\\"1\\\"/>\",\n \"phone\": \"<rect width=\\\"14\\\" height=\\\"20\\\" x=\\\"5\\\" y=\\\"2\\\" rx=\\\"2\\\"/><path d=\\\"M12 18h.01\\\"/>\",\n \"play\": \"<path d=\\\"M6 3l14 9-14 9z\\\"/>\",\n \"plus\": \"<path d=\\\"M5 12h14\\\"/><path d=\\\"M12 5v14\\\"/>\",\n \"puzzle\": \"<path d=\\\"M15.39 4.39a1 1 0 0 0 1.68-.47 2.5 2.5 0 1 1 3.01 3.01 1 1 0 0 0-.47 1.68l1.68 1.68a2.4 2.4 0 0 1 0 3.42l-1.61 1.61a1 1 0 0 1-1.68-.47 2.5 2.5 0 1 0-3.01 3.01 1 1 0 0 1 .47 1.68l-1.61 1.61a2.4 2.4 0 0 1-3.42 0l-1.68-1.68a1 1 0 0 0-1.68.47 2.5 2.5 0 1 1-3.01-3.01 1 1 0 0 0 .47-1.68l-1.68-1.68a2.4 2.4 0 0 1 0-3.42l1.61-1.61a1 1 0 0 1 1.68.47 2.5 2.5 0 1 0 3.01-3.01 1 1 0 0 1-.47-1.68l1.61-1.61a2.4 2.4 0 0 1 3.42 0z\\\"/>\",\n \"refresh\": \"<path d=\\\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\\\"/><path d=\\\"M21 3v5h-5\\\"/><path d=\\\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\\\"/><path d=\\\"M8 16H3v5\\\"/>\",\n \"relay\": \"<path d=\\\"M4.9 16.1C1 12.2 1 5.8 4.9 1.9\\\"/><path d=\\\"M7.8 4.7a6.14 6.14 0 0 0-.8 7.5\\\"/><circle cx=\\\"12\\\" cy=\\\"9\\\" r=\\\"2\\\"/><path d=\\\"M16.2 4.8c2 2 2.26 5.11.8 7.47\\\"/><path d=\\\"M19.1 1.9a9.96 9.96 0 0 1 0 14.1\\\"/><path d=\\\"M9.5 18h5\\\"/><path d=\\\"m8 22 4-11 4 11\\\"/>\",\n \"repo\": \"<path d=\\\"M6 3h11a1 1 0 0 1 1 1v16l-3-2-3 2-3-2-3 2V4a1 1 0 0 1 1-1z\\\"/><path d=\\\"M9 7h6\\\"/>\",\n \"rocket\": \"<path d=\\\"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\\\"/><path d=\\\"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09\\\"/><path d=\\\"M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z\\\"/><path d=\\\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05\\\"/>\",\n \"rotate-ccw\": \"<path d=\\\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\\\"/><path d=\\\"M3 3v5h5\\\"/>\",\n \"rows-2\": \"<rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"2\\\"/><path d=\\\"M3 12h18\\\"/>\",\n \"search\": \"<circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/><path d=\\\"m21 21-4.3-4.3\\\"/>\",\n \"send\": \"<path d=\\\"m22 2-7 20-4-9-9-4Z\\\"/><path d=\\\"M22 2 11 13\\\"/>\",\n \"server\": \"<rect width=\\\"20\\\" height=\\\"8\\\" x=\\\"2\\\" y=\\\"2\\\" rx=\\\"2\\\"/><rect width=\\\"20\\\" height=\\\"8\\\" x=\\\"2\\\" y=\\\"14\\\" rx=\\\"2\\\"/><path d=\\\"M6 6h.01\\\"/><path d=\\\"M6 18h.01\\\"/>\",\n \"settings\": \"<path d=\\\"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\\\"/><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"3\\\"/>\",\n \"shield\": \"<path d=\\\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\\\"/>\",\n \"sparkle\": \"<path d=\\\"M12 3l1.9 5.8L20 11l-6.1 2.2L12 19l-1.9-5.8L4 11l6.1-2.2Z\\\"/>\",\n \"sparkles\": \"<path d=\\\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\\\"/><path d=\\\"M20 2v4\\\"/><path d=\\\"M22 4h-4\\\"/><circle cx=\\\"4\\\" cy=\\\"20\\\" r=\\\"2\\\"/>\",\n \"square\": \"<rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"2\\\"/>\",\n \"square-function\": \"<rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><path d=\\\"M9 17c2 0 2.8-1 2.8-2.8V10c0-2 1-3.3 3.2-3\\\"/><path d=\\\"M9 11.2h5.7\\\"/>\",\n \"stop\": \"<rect width=\\\"14\\\" height=\\\"14\\\" x=\\\"5\\\" y=\\\"5\\\" rx=\\\"2\\\"/>\",\n \"sun\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"4\\\"/><path d=\\\"M12 2v2\\\"/><path d=\\\"M12 20v2\\\"/><path d=\\\"m4.93 4.93 1.41 1.41\\\"/><path d=\\\"m17.66 17.66 1.41 1.41\\\"/><path d=\\\"M2 12h2\\\"/><path d=\\\"M20 12h2\\\"/><path d=\\\"m6.34 17.66-1.41 1.41\\\"/><path d=\\\"m19.07 4.93-1.41 1.41\\\"/>\",\n \"tag\": \"<path d=\\\"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z\\\"/><circle cx=\\\"7.5\\\" cy=\\\"7.5\\\" r=\\\".5\\\" fill=\\\"currentColor\\\"/>\",\n \"terminal\": \"<path d=\\\"m4 17 6-6-6-6\\\"/><path d=\\\"M12 19h8\\\"/>\",\n \"trash\": \"<path d=\\\"M3 6h18\\\"/><path d=\\\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\\\"/><path d=\\\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\\\"/>\",\n \"upload\": \"<path d=\\\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\\\"/><path d=\\\"m17 8-5-5-5 5\\\"/><path d=\\\"M12 3v12\\\"/>\",\n \"user\": \"<path d=\\\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\\\"/><circle cx=\\\"12\\\" cy=\\\"7\\\" r=\\\"4\\\"/>\",\n \"variable\": \"<path d=\\\"M8 21s-4-3-4-9 4-9 4-9\\\"/><path d=\\\"M16 3s4 3 4 9-4 9-4 9\\\"/><line x1=\\\"15\\\" x2=\\\"9\\\" y1=\\\"9\\\" y2=\\\"15\\\"/><line x1=\\\"9\\\" x2=\\\"15\\\" y1=\\\"9\\\" y2=\\\"15\\\"/>\",\n \"volume-2\": \"<path d=\\\"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\\\"/><path d=\\\"M16 9a5 5 0 0 1 0 6\\\"/><path d=\\\"M19.364 18.364a9 9 0 0 0 0-12.728\\\"/>\",\n \"x\": \"<path d=\\\"M18 6 6 18\\\"/><path d=\\\"m6 6 12 12\\\"/>\",\n \"x-circle\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"m15 9-6 6\\\"/><path d=\\\"m9 9 6 6\\\"/>\",\n \"zap\": \"<path d=\\\"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\\\"/>\",\n};\n","import { ChangeDetectionStrategy, Component, ElementRef, computed, effect, inject, input } from \"@angular/core\";\nimport type { EnvironmentProviders } from \"@angular/core\";\nimport { provideIcons } from \"@kouji-ui/core\";\n\nimport { ICONS } from \"./icons\";\n\n/**\n * The names the ADE (`app-icon`) and Cloud (`kjIcon`) used before the merge, mapped onto the one\n * set. A call site keeps its old name; new code uses the canonical one. ADE `columns` meant three\n * columns: use `columns-3` (canonical `columns` is two, the design's).\n */\nexport const ICON_ALIASES: Readonly<Record<string, string>> = {\n agent: \"bot\", branch: \"git-branch\", diff: \"file-diff\", chat: \"message\", git: \"git-graph\", commit: \"git-commit\",\n chevron: \"chevron-right\", chevronD: \"chevron-down\", chevsUp: \"chevrons-up\", chevsDown: \"chevrons-down\",\n bolt: \"zap\", merge: \"git-merge\", grid: \"layout-grid\", timeline: \"chart-gantt\", graph: \"network\", dots: \"more\",\n spark: \"sparkle\", cube: \"box\", rename: \"edit\", dup: \"copy\", ext: \"external\", push: \"arrow-up-from-line\",\n pr: \"git-pull-request\", stage: \"arrow-down-to-line\", discard: \"rotate-ccw\", dotsV: \"more-vertical\",\n folderOpen: \"folder-open\", enter: \"corner-down-left\", question: \"help\", splitCol: \"columns\", splitRow: \"rows-2\",\n panelLeft: \"panel-left\", swap: \"arrow-left-right\", warn: \"alert\", volume: \"volume-2\", method: \"square-function\",\n field: \"variable\", enum: \"list-ordered\",\n // Cloud\n gear: \"settings\", \"alert-triangle\": \"alert\",\n};\n\n/** The canonical name for `name` (an alias resolves), or null when the set has no such glyph. */\nexport function iconName(name: string): string | null {\n if (ICONS[name] !== undefined) return name;\n const alias = ICON_ALIASES[name];\n return alias !== undefined && ICONS[alias] !== undefined ? alias : null;\n}\n\n/** Every name `<orr-icon>` accepts, aliases included. */\nexport function iconNames(): string[] {\n return [...Object.keys(ICONS), ...Object.keys(ICON_ALIASES)].sort();\n}\n\nexport type IconSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\nconst ICON_PX: Record<IconSize, number> = { xs: 12, sm: 14, md: 16, lg: 20, xl: 24 };\n\n/** The whole SVG for `name` (stroke 1.75, currentColor). Unknown names draw `square`. */\nexport function iconSvg(name: string, px = 16): string {\n const body = ICONS[iconName(name) ?? \"square\"];\n return (\n `<svg width=\"${px}\" height=\"${px}\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.75\" ` +\n `stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">${body}</svg>`\n );\n}\n\nconst warned = new Set<string>();\n\n/**\n * `<orr-icon name=\"terminal\" size=\"sm\" />`: one glyph of the merged set (`.o-icon`), drawn in\n * `currentColor`. `size` is xs 12 · sm 14 · md 16 · lg 20 · xl 24 or a pixel number. An unknown\n * name draws a square and warns once, listing the known names.\n */\n@Component({\n selector: \"orr-icon\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"o-icon\",\n \"[class.o-icon--sm]\": \"size() === 'sm'\",\n \"[class.o-icon--lg]\": \"size() === 'lg'\",\n \"[style.width.px]\": \"px()\",\n \"[style.height.px]\": \"px()\",\n \"[style.color]\": \"color() || null\",\n \"[attr.role]\": \"label() ? 'img' : null\",\n \"[attr.aria-label]\": \"label() || null\",\n \"[attr.aria-hidden]\": \"label() ? null : 'true'\",\n \"[attr.data-icon]\": \"resolved()\",\n },\n template: \"\",\n})\nexport class OrrIconComponent {\n readonly name = input.required<string>();\n readonly size = input<IconSize | number>(\"md\");\n readonly color = input<string | null>(null);\n /** Accessible name; without it the icon is decorative (`aria-hidden`). */\n readonly label = input<string>(\"\");\n\n readonly px = computed(() => {\n const s = this.size();\n return typeof s === \"number\" ? s : ICON_PX[s] ?? 16;\n });\n readonly resolved = computed(() => iconName(this.name()) ?? \"square\");\n\n constructor() {\n const host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n effect(() => {\n const name = this.name();\n if (iconName(name) === null && name && !warned.has(name)) {\n warned.add(name);\n console.warn(`[orr-icon] unknown icon \"${name}\". Known: ${iconNames().join(\", \")}`);\n }\n host.innerHTML = iconSvg(name, this.px());\n });\n }\n}\n\n/**\n * Registers the merged set (aliases included) with kouji-ui's icon registry, so `[kjIcon]` and\n * kouji's own components (select caret, toast, alert) draw the same glyphs as `<orr-icon>`.\n */\nexport function provideOrreryIcons(): EnvironmentProviders {\n const map: Record<string, string> = {};\n for (const name of iconNames()) {\n const svg = iconSvg(name, 24).replace('stroke=\"currentColor\"', 'stroke=\"black\"').replace(' aria-hidden=\"true\"', ' xmlns=\"http://www.w3.org/2000/svg\"');\n map[name] = `url(\"data:image/svg+xml;utf8,${encodeURIComponent(svg)}\")`;\n }\n return provideIcons(map);\n}\n","import { ChangeDetectionStrategy, Component, booleanAttribute, computed, input, numberAttribute, output } from \"@angular/core\";\n\nimport { OrrIconComponent } from \"../icon/icon.component\";\n\n/** Session / agent / machine states. `queued` (ADE) draws as idle. */\nexport type DotState = \"running\" | \"waiting\" | \"blocked\" | \"done\" | \"idle\" | \"online\" | \"offline\" | \"queued\";\n\nconst DOT_CLASS: Record<DotState, string> = {\n running: \"running\", waiting: \"waiting\", blocked: \"blocked\", done: \"done\", idle: \"idle\", online: \"online\", offline: \"offline\", queued: \"idle\",\n};\n\n/** `<orr-dot state=\"running\" pulse />`: the 8 px state dot (`.o-dot`); `size=\"sm\"` is 6 px. */\n@Component({\n selector: \"orr-dot\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { role: \"img\", \"[class]\": \"cls()\", \"[attr.aria-label]\": \"label() || state()\" },\n template: \"\",\n})\nexport class OrrDotComponent {\n readonly state = input<DotState>(\"idle\");\n readonly pulse = input(false, { transform: booleanAttribute });\n readonly size = input<\"sm\" | \"md\">(\"md\");\n readonly label = input(\"\");\n readonly cls = computed(\n () => `o-dot o-dot--${DOT_CLASS[this.state()] ?? \"idle\"}${this.pulse() ? \" o-dot--pulse\" : \"\"}${this.size() === \"sm\" ? \" o-dot--sm\" : \"\"}`,\n );\n}\n\n/** `<orr-pill state=\"waiting\">Needs you</orr-pill>`: dot + word (`.o-pill`). Empty content shows the state. */\n@Component({\n selector: \"orr-pill\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"[class]\": \"cls()\" },\n template: `<ng-content>{{ state() }}</ng-content>`,\n})\nexport class OrrPillComponent {\n readonly state = input<DotState>(\"idle\");\n readonly nodot = input(false, { transform: booleanAttribute });\n readonly cls = computed(() => `o-pill o-pill--${DOT_CLASS[this.state()] ?? \"idle\"}${this.nodot() ? \" o-pill--nodot\" : \"\"}`);\n}\n\nexport type BadgeTone = \"neutral\" | \"add\" | \"del\" | \"attn\" | \"change\" | \"live\" | \"accent\";\n\n/** `<orr-badge tone=\"add\">+128</orr-badge>`: quiet count / tag (`.o-badge`). */\n@Component({\n selector: \"orr-badge\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"[class]\": \"cls()\" },\n template: `<ng-content />`,\n})\nexport class OrrBadgeComponent {\n readonly tone = input<BadgeTone>(\"neutral\");\n readonly solid = input(false, { transform: booleanAttribute });\n readonly square = input(false, { transform: booleanAttribute });\n readonly mono = input(false, { transform: booleanAttribute });\n readonly cls = computed(\n () =>\n `o-badge o-badge--${this.tone()}${this.solid() ? \" o-badge--solid\" : \"\"}${this.square() ? \" o-badge--square\" : \"\"}${this.mono() ? \" o-badge--mono\" : \"\"}`,\n );\n}\n\n/** `<orr-chip removable (remove)=\"…\">plan.md</orr-chip>`: a removable token (`.o-chip`). */\n@Component({\n selector: \"orr-chip\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [OrrIconComponent],\n host: { class: \"o-chip\", \"[attr.aria-selected]\": \"selected() ? 'true' : null\" },\n template: `\n @if (icon(); as i) { <orr-icon [name]=\"i\" size=\"xs\" /> }\n <ng-content />\n @if (removable()) {\n <button type=\"button\" class=\"o-chip__x\" [attr.aria-label]=\"removeLabel()\" (click)=\"$event.stopPropagation(); remove.emit()\">\n <orr-icon name=\"x\" size=\"xs\" />\n </button>\n }\n `,\n})\nexport class OrrChipComponent {\n readonly icon = input<string | null>(null);\n readonly removable = input(false, { transform: booleanAttribute });\n readonly selected = input(false, { transform: booleanAttribute });\n readonly removeLabel = input(\"Remove\");\n readonly remove = output<void>();\n}\n\n/** Initials of a name: first letters of the first two words. */\nexport function initials(name: string): string {\n return (\n name\n .split(/[\\s._-]+/)\n .filter(Boolean)\n .slice(0, 2)\n .map((p) => p[0])\n .join(\"\") || \"?\"\n );\n}\n\n/** A stable identity tone (1–7, `--id-*`) for a name. */\nexport function nameTone(name: string): number {\n let h = 0;\n for (const ch of name) h = (h * 31 + ch.charCodeAt(0)) >>> 0;\n return (h % 7) + 1;\n}\n\n/** `<orr-avatar name=\"Driss Najih\" />`: initials on an identity tone (`.o-avatar`). */\n@Component({\n selector: \"orr-avatar\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { role: \"img\", \"[class]\": \"cls()\", \"[attr.aria-label]\": \"name()\" },\n template: `{{ text() }}`,\n})\nexport class OrrAvatarComponent {\n readonly name = input(\"?\");\n /** 1–7; hashed from the name when absent. */\n readonly tone = input<number | null>(null);\n readonly size = input<\"sm\" | \"md\" | \"lg\">(\"md\");\n readonly square = input(false, { transform: booleanAttribute });\n readonly text = computed(() => initials(this.name()));\n readonly cls = computed(() => {\n const t = this.tone();\n const tone = t !== null && t >= 1 && t <= 7 ? t : nameTone(this.name());\n const s = this.size();\n return `o-avatar o-avatar--${tone}${s !== \"md\" ? \" o-avatar--\" + s : \"\"}${this.square() ? \" o-avatar--sq\" : \"\"}`;\n });\n}\n\nexport type MeterTone = \"ok\" | \"attn\" | \"danger\";\n\n/** The tone a meter takes on its own: attn from 75 %, danger from 90 %. */\nexport function meterTone(pct: number): MeterTone | null {\n return pct >= 90 ? \"danger\" : pct >= 75 ? \"attn\" : null;\n}\n\n/** `<orr-meter [value]=\"82\" />`: a thin bar (`.o-meter`); the tone follows the fill unless set. */\n@Component({\n selector: \"orr-meter\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"meter\",\n \"[class]\": \"cls()\",\n \"[style.--v]\": \"pct() + '%'\",\n \"aria-valuemin\": \"0\",\n \"[attr.aria-valuemax]\": \"max()\",\n \"[attr.aria-valuenow]\": \"value()\",\n \"[attr.aria-label]\": \"label() || null\",\n },\n template: \"\",\n})\nexport class OrrMeterComponent {\n readonly value = input(0, { transform: numberAttribute });\n readonly max = input(100, { transform: numberAttribute });\n readonly tone = input<MeterTone | null>(null);\n readonly size = input<\"md\" | \"lg\">(\"md\");\n readonly label = input(\"\");\n readonly pct = computed(() => Math.max(0, Math.min(100, (this.value() / (this.max() || 100)) * 100)).toFixed(2));\n readonly cls = computed(() => {\n const t = this.tone() ?? meterTone(Number(this.pct()));\n return `o-meter${t ? \" o-meter--\" + t : \"\"}${this.size() === \"lg\" ? \" o-meter--lg\" : \"\"}`;\n });\n}\n\n/** `<orr-ring [value]=\"0.4\" />`: circular progress, 0..1 (from the ADE's `app-ring`). */\n@Component({\n selector: \"orr-ring\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { role: \"progressbar\", \"aria-valuemin\": \"0\", \"aria-valuemax\": \"100\", \"[attr.aria-valuenow]\": \"round()\", style: \"display:inline-flex\" },\n template: `\n <svg [attr.width]=\"size()\" [attr.height]=\"size()\" style=\"transform:rotate(-90deg);display:block\">\n <circle [attr.cx]=\"c()\" [attr.cy]=\"c()\" [attr.r]=\"r()\" fill=\"none\" stroke=\"var(--hair)\" [attr.stroke-width]=\"stroke()\" />\n <circle [attr.cx]=\"c()\" [attr.cy]=\"c()\" [attr.r]=\"r()\" fill=\"none\" [attr.stroke]=\"color() || 'var(--ui-ink)'\" [attr.stroke-width]=\"stroke()\"\n stroke-linecap=\"round\" [attr.stroke-dasharray]=\"circ()\" [attr.stroke-dashoffset]=\"offset()\" style=\"transition:stroke-dashoffset var(--dur-slow) var(--ease)\" />\n </svg>\n `,\n})\nexport class OrrRingComponent {\n readonly value = input(0, { transform: numberAttribute });\n readonly size = input(30, { transform: numberAttribute });\n readonly stroke = input(3, { transform: numberAttribute });\n readonly color = input<string | null>(null);\n readonly r = computed(() => (this.size() - this.stroke()) / 2);\n readonly c = computed(() => this.size() / 2);\n readonly circ = computed(() => 2 * Math.PI * this.r());\n readonly offset = computed(() => this.circ() * (1 - Math.max(0, Math.min(1, this.value()))));\n readonly round = computed(() => Math.round(Math.max(0, Math.min(1, this.value())) * 100));\n}\n\n/** The VCS letters every changes list uses, with their names. */\nexport const VCS_STATE_NAMES: Readonly<Record<string, string>> = {\n A: \"Added\", M: \"Modified\", D: \"Deleted\", R: \"Renamed\", C: \"Conflicted\", U: \"Unmerged\", \"?\": \"Untracked\", \"!\": \"Ignored\",\n};\n\n/** `<orr-state state=\"A\" />`: the file-state letter square (`.o-state`), coloured by `--vcs-*`. */\n@Component({\n selector: \"orr-state\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: \"o-state\", \"[attr.data-state]\": \"state()\", \"[attr.title]\": \"title()\" },\n template: `{{ state() }}`,\n})\nexport class OrrStateComponent {\n readonly state = input.required<string>();\n readonly title = computed(() => VCS_STATE_NAMES[this.state()] ?? this.state());\n}\n\n/** `<orr-addel [add]=\"3\" [del]=\"1\" />`: `+N −N`, only the non-zero counts (`.o-addel`). */\n@Component({\n selector: \"orr-addel\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: \"o-addel\" },\n template: `@if (add() > 0) {<span class=\"o-addel__add\">+{{ add() }}</span>}@if (del() > 0) {<span class=\"o-addel__del\">−{{ del() }}</span>}`,\n})\nexport class OrrAddDelComponent {\n readonly add = input(0, { transform: numberAttribute });\n readonly del = input(0, { transform: numberAttribute });\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, afterNextRender, computed, inject, input, signal } from \"@angular/core\";\n\n/** `\"Ctrl K\"`, `\"Ctrl+K\"` or `[\"Ctrl\", \"K\"]` → one key per cap. A lone `+` stays a key. */\nexport function splitKeys(keys: string | readonly string[]): string[] {\n if (Array.isArray(keys)) return keys.filter(Boolean);\n return String(keys)\n .trim()\n .split(/\\s+|\\+(?=.)/)\n .filter(Boolean);\n}\n\n/**\n * What makes a shortcut a hint inside a control rather than a standalone key: the controls of the\n * system (and kouji's) in which `.o-kbd` turns quiet (no border, no ground, mono 11, `--ink-3`).\n */\nexport const KBD_INLINE_CONTEXT =\n \"button, a, [role=button], [role=menuitem], [role=option], [role=tab], kj-button, .kj-button, .o-btn, .o-search-trigger, \" +\n \".o-menu__item, .o-palette__item, .o-input-wrap, .o-chip, .o-pill, .o-tab, .o-seg__opt, .o-item\";\n\n/**\n * `<orr-kbd keys=\"Ctrl K\" />`: keyboard keys (`.o-kbd`). Standalone it draws boxed caps; inside a\n * control (button, menu item, search pill, chip, tab, input) it is a quiet inline hint on its own\n * (`.o-kbd--inline`). `inline` forces either form; `size=\"md\"` is the 14 px top-bar cap.\n */\n@Component({\n selector: \"orr-kbd\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"[class]\": \"cls()\", \"[attr.aria-label]\": \"label()\" },\n template: `@for (k of caps(); track $index) {<kbd class=\"o-kbd__key\">{{ k }}</kbd>}`,\n})\nexport class OrrKbdComponent {\n readonly keys = input.required<string | readonly string[]>();\n /** `true` / `false` force the form; unset follows the context. */\n readonly inline = input<boolean | undefined>(undefined);\n readonly size = input<\"sm\" | \"md\">(\"sm\");\n\n readonly caps = computed(() => splitKeys(this.keys()));\n readonly label = computed(() => this.caps().join(\"+\"));\n /** Whether the host sits inside a control (read once the host is in the DOM). */\n readonly inControl = signal(false);\n readonly isInline = computed(() => this.inline() ?? this.inControl());\n readonly cls = computed(() => \"o-kbd\" + (this.isInline() ? \" o-kbd--inline\" : this.size() === \"md\" ? \" o-kbd--md\" : \"\"));\n\n constructor() {\n const host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n afterNextRender(() => this.inControl.set(!!host.parentElement?.closest(KBD_INLINE_CONTEXT)));\n }\n}\n","// Generated by scripts/design/sync-logo.mjs from design/system/components.js. Do not edit: rerun the script.\n// @ts-nocheck: the canvas's generator, copied verbatim.\n/* eslint-disable */\nexport const OrrLogo = (() => {\n const LOGOS = ['monogram', 'eccentric', 'rings', 'parallel', 'stencil'];\n const STATES = ['static', 'idle', 'thinking', 'running', 'needs-you', 'waiting', 'done', 'error', 'offline', 'loading', 'loader'];\n const ALIAS = { blocked: 'needs-you', needs: 'needs-you', 'needs-you': 'needs-you', executing: 'running', working: 'running', boot: 'loading', queued: 'idle', 'waiting-for-you': 'waiting', spinner: 'loader' };\n const KEY = { 'needs-you': 'blocked', loading: 'boot' }; // internal names used by the generators\n const TOK = { running: ['--st-running', '#3fb6c4'], blocked: ['--st-blocked', '#e06c7a'], waiting: ['--st-waiting', '#d9a441'],\n done: ['--st-done', '#57c98a'], idle: ['--st-idle', '#8a8b8c'], offline: ['--st-offline', '#68696b'], error: ['--sem-del', '#e06c7a'] };\n const BRAND = ['var(--brand-1, #ff5d9e)', 'var(--brand-2, #a855f7)', '#6d6af8'];\n const tok = (k) => 'var(' + TOK[k][0] + ', ' + TOK[k][1] + ')';\n let TINT = null; // set by draw() while a `color` mark is generated: the brand states take that colour instead\n let SHADE = false; // set by draw() while a `shader` mark is generated: every url(#g) paint becomes the shader field\n // the extensions spectrum: one colour per harness level, in level order (providers … the loop)\n const SPECTRUM = ['#ff5d9e', '#c26cf5', '#8b6cf8', '#6d6af8', '#d9a441', '#57c98a', '#3fb6c4', '#22d3ee', '#ff8a5c'];\n // brand/shader/streaks.jpg at 320 × 160, embedded: no URL resolves inside a shadow root on the canvas\n const TEX = 'data:image/jpeg;base64,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';\n const mixT = (c) => ['color-mix(in oklab, ' + c + ' 65%, white)', c, 'color-mix(in oklab, ' + c + ' 78%, black)'];\n const tones = (k) => (k === 'static' || k === 'thinking' || k === 'boot' || k === 'loader') ? (TINT ? mixT(TINT) : SHADE ? SPECTRUM : BRAND)\n : ['color-mix(in oklab, ' + tok(k) + ' 65%, white)', tok(k), 'color-mix(in oklab, ' + tok(k) + ' 78%, black)'];\n const R = (a) => a * Math.PI / 180;\n const on = (r, a, cx = 100, cy = 100) => [cx + r * Math.cos(R(a)), cy + r * Math.sin(R(a))];\n const f2 = (p) => p[0].toFixed(2) + ' ' + p[1].toFixed(2);\n const arcp = (r, a0, a1, cx = 100, cy = 100) => 'M' + f2(on(r, a0, cx, cy)) + ' A' + r + ' ' + r + ' 0 ' + ((((a1 - a0) % 360) + 360) % 360 > 180 ? 1 : 0) + ' 1 ' + f2(on(r, a1, cx, cy));\n const lin = (id, t) => { const at = t.length === 3 ? [0, .55, 1] : t.map((_, k) => k / (t.length - 1));\n return '<linearGradient id=\"' + id + '\" gradientUnits=\"userSpaceOnUse\" x1=\"30\" y1=\"30\" x2=\"170\" y2=\"170\">' + t.map((c, k) => '<stop offset=\"' + +at[k].toFixed(3) + '\" style=\"stop-color:' + c + '\"/>').join('') + '</linearGradient>'; };\n const still = () => { try { return matchMedia('(prefers-reduced-motion: reduce)').matches; } catch (e) { return false; } };\n // the shader field: the colours, then the streaks on top (overlay), one pattern in the mark's own 200 × 200 space\n const field = (id, t) => lin(id + 'c', t) + '<pattern id=\"' + id + '\" patternUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"200\" height=\"200\">'\n + '<rect width=\"200\" height=\"200\" fill=\"url(#' + id + 'c)\"/><image href=\"' + TEX + '\" x=\"-120\" y=\"-10\" width=\"440\" height=\"220\" preserveAspectRatio=\"none\" style=\"mix-blend-mode:overlay\">'\n + (still() ? '' : '<animate attributeName=\"x\" values=\"-120;-40;-120\" dur=\"16s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\".45 0 .55 1;.45 0 .55 1\"/>') + '</image></pattern>';\n const grad = (id, t) => SHADE ? field(id, t) : lin(id, t);\n const mask = (id, inner) => '<mask id=\"' + id + '\" maskUnits=\"userSpaceOnUse\" x=\"-20\" y=\"-20\" width=\"240\" height=\"240\"><rect x=\"-20\" y=\"-20\" width=\"240\" height=\"240\" fill=\"#fff\"/>' + inner + '</mask>';\n\n const KF = {\n spin: '@keyframes spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}',\n spinr: '@keyframes spinr{from{transform:rotate(0)}to{transform:rotate(-360deg)}}',\n breathe: '@keyframes breathe{0%,100%{opacity:.45}50%{opacity:1}}',\n pulse: '@keyframes pulse{0%,100%{transform:scale(.78)}50%{transform:scale(1.08)}}',\n beat: '@keyframes beat{0%,100%{transform:scale(1)}15%{transform:scale(1.14)}30%{transform:scale(1)}}',\n ripple: '@keyframes ripple{0%{transform:scale(1);opacity:.75}100%{transform:scale(2.6);opacity:0}}',\n ripsm: '@keyframes ripsm{0%{transform:scale(1);opacity:.7}100%{transform:scale(1.35);opacity:0}}',\n shake: '@keyframes shake{0%,34%,100%{transform:translateX(0)}4%{transform:translateX(-7px)}10%{transform:translateX(6px)}16%{transform:translateX(-5px)}22%{transform:translateX(3px)}28%{transform:translateX(-1px)}}',\n settle: '@keyframes settle{0%{transform:rotate(-320deg)}42%,100%{transform:rotate(0)}}',\n pop: '@keyframes pop{0%,40%{transform:scale(1)}50%{transform:scale(1.3)}62%,100%{transform:scale(1)}}',\n ripone: '@keyframes ripone{0%,44%{transform:scale(1);opacity:0}46%{opacity:.8}80%,100%{transform:scale(2.6);opacity:0}}',\n rock: '@keyframes rock{0%,100%{transform:rotate(-22deg)}50%{transform:rotate(22deg)}}',\n draw: '@keyframes draw{0%{stroke-dashoffset:var(--len)}30%,100%{stroke-dashoffset:0}}',\n drawl: '@keyframes drawl{0%,12%{stroke-dashoffset:var(--len)}40%,100%{stroke-dashoffset:0}}',\n popin: '@keyframes popin{0%,28%{transform:scale(0)}38%{transform:scale(1.25)}46%,100%{transform:scale(1)}}',\n bootorb: '@keyframes bootorb{0%,46%{transform:rotate(0)}86%,100%{transform:rotate(360deg)}}',\n centre: '@keyframes centre{0%,20%{transform:translate(0,0)}55%,100%{transform:translate(-12px,12px)}}',\n grow: '@keyframes grow{0%,10%{transform:scale(0)}40%,100%{transform:scale(1)}}',\n disc: '@keyframes disc{0%{transform:scale(.4);opacity:0}14%,100%{transform:scale(1);opacity:1}}',\n pt: '@keyframes pt{0%,100%{transform:translate(9px,-3px)}50%{transform:translate(-9px,-3px)}}',\n pb: '@keyframes pb{0%,100%{transform:translate(-9px,3px)}50%{transform:translate(9px,3px)}}',\n ptl: '@keyframes ptl{0%,100%{transform:translate(9px,-3px)}50%{transform:translate(4px,-3px)}}',\n pbl: '@keyframes pbl{0%,100%{transform:translate(-9px,3px)}50%{transform:translate(-4px,3px)}}',\n lift: '@keyframes lift{0%,100%{transform:translate(9px,-3px)}30%,70%{transform:translate(9px,-12px)}}',\n merge_t: '@keyframes merge_t{0%,15%{transform:translate(9px,-3px)}50%,100%{transform:translate(0,0)}}',\n merge_b: '@keyframes merge_b{0%,15%{transform:translate(-9px,3px)}50%,100%{transform:translate(0,0)}}',\n in_t: '@keyframes in_t{0%{transform:translate(90px,-3px);opacity:0}35%,100%{transform:translate(9px,-3px);opacity:1}}',\n in_b: '@keyframes in_b{0%{transform:translate(-90px,3px);opacity:0}35%,100%{transform:translate(-9px,3px);opacity:1}}',\n jit_t: '@keyframes jit_t{0%,40%,100%{transform:translate(9px,-3px)}8%{transform:translate(15px,-8px)}16%{transform:translate(5px,-1px)}24%{transform:translate(12px,-6px)}}',\n jit_b: '@keyframes jit_b{0%,40%,100%{transform:translate(-9px,3px)}8%{transform:translate(-15px,8px)}16%{transform:translate(-5px,1px)}24%{transform:translate(-12px,6px)}}',\n close: '@keyframes close{0%,15%{stroke-width:9px}50%,100%{stroke-width:0}}',\n widen: '@keyframes widen{0%,40%,100%{stroke-width:9px}10%,25%{stroke-width:22px}}',\n sweep: '@keyframes sweep{0%,30%{transform:rotate(-180deg)}70%,100%{transform:rotate(0)}}',\n };\n const BASE = '.rot{transform-box:view-box;transform-origin:100px 100px}.self{transform-box:fill-box;transform-origin:center}';\n const A = (sel, kf, dur, ease) => sel + '{animation:' + kf + ' ' + dur + 's ' + (ease || 'linear') + ' infinite}';\n const EO = 'cubic-bezier(.2,.7,.2,1)', EIO = 'cubic-bezier(.65,0,.35,1)';\n const out = (rules, kfs, defs, body) => ({ css: BASE + kfs.map((k) => KF[k]).join('') + rules.join(''), defs, body });\n\n /* ── vector generators: (state key, light surface?) → { css, defs, body } in a 200-unit box ── */\n const V = {\n monogram(s, light) {\n const pa = -45, P = on(56, pa), t = tones(s);\n let defs = grad('g', t) + mask('m', '<g class=\"orb rot\"><circle cx=\"' + P[0].toFixed(2) + '\" cy=\"' + P[1].toFixed(2) + '\" r=\"26\" fill=\"#000\"/></g>');\n const pf = s === 'idle' ? '#d4d4d8' : (light ? 'url(#g)' : '#fff');\n let band, planet;\n if (s === 'offline') {\n band = '<g mask=\"url(#m)\"><circle cx=\"100\" cy=\"100\" r=\"56\" stroke=\"' + tok('offline') + '\" stroke-width=\"32\" opacity=\".55\"/></g>';\n planet = '<circle cx=\"' + P[0].toFixed(2) + '\" cy=\"' + P[1].toFixed(2) + '\" r=\"14\" fill=\"none\" stroke=\"#a1a1aa\" stroke-width=\"4\"/>';\n } else {\n band = s === 'loader'\n ? '<g mask=\"url(#m)\"><circle cx=\"100\" cy=\"100\" r=\"56\" stroke=\"url(#g)\" stroke-width=\"32\" opacity=\".22\"/><g class=\"orb rot\"><path d=\"' + arcp(56, pa - 110, pa) + '\" stroke=\"url(#g)\" stroke-width=\"32\"/></g></g>'\n : '<g mask=\"url(#m)\"><circle class=\"band\" cx=\"100\" cy=\"100\" r=\"56\" stroke=\"url(#g)\" stroke-width=\"32\" transform=\"rotate(-45 100 100)\" style=\"--len:351.86px\" stroke-dasharray=\"351.86\"/></g>';\n planet = '<circle class=\"pl self\" cx=\"' + P[0].toFixed(2) + '\" cy=\"' + P[1].toFixed(2) + '\" r=\"16\" fill=\"' + pf + '\"/>';\n }\n const rip = (s === 'blocked' || s === 'waiting' || s === 'done') ? '<circle class=\"rip self\" cx=\"' + P[0].toFixed(2) + '\" cy=\"' + P[1].toFixed(2) + '\" r=\"16\" fill=\"none\" stroke=\"' + tok(s) + '\" stroke-width=\"3\" opacity=\"0\"/>' : '';\n const R_ = { static: [[], []], offline: [[], []], idle: [[A('.mark', 'breathe', 3.2, 'ease-in-out')], ['breathe']],\n thinking: [[A('.pl', 'pulse', 1.4, 'ease-in-out')], ['pulse']], running: [[A('.orb', 'spin', 1.8)], ['spin']],\n blocked: [[A('.rip', 'ripple', 1.4, 'ease-out'), A('.pl', 'beat', 1.4, 'ease-in-out')], ['ripple', 'beat']],\n waiting: [[A('.rip', 'ripple', 2.6, 'ease-out')], ['ripple']],\n done: [[A('.orb', 'settle', 3, EO), A('.pl', 'pop', 3, 'ease-out'), A('.rip', 'ripone', 3, 'ease-out')], ['settle', 'pop', 'ripone']],\n error: [[A('.mark', 'shake', 2.4, 'ease-in-out')], ['shake']],\n boot: [[A('.band', 'draw', 3.2, EIO), A('.pl', 'popin', 3.2, EO), A('.orb', 'bootorb', 3.2, EIO)], ['draw', 'popin', 'bootorb']],\n loader: [[A('.orb', 'spin', 1)], ['spin']] }[s];\n return out(R_[0], R_[1], defs, '<g class=\"mark\">' + band + '<g class=\"orb rot\">' + rip + planet + '</g></g>');\n },\n eccentric(s) {\n const t = tones(s), paint = s === 'offline' ? tok('offline') : 'url(#g)';\n const defs = grad('g', t) + mask('m', '<g class=\"orb rot\"><g class=\"cn\"><circle class=\"ct self\" cx=\"112\" cy=\"88\" r=\"42\" fill=\"#000\"/></g></g>');\n const disc = s === 'offline'\n ? '<path d=\"M100 28 A72 72 0 1 1 99.99 28 Z M154 88 A42 42 0 1 0 154 88.01 Z\" fill=\"none\" stroke=\"' + tok('offline') + '\" stroke-width=\"4\"/>'\n : '<circle class=\"disc self\" cx=\"100\" cy=\"100\" r=\"72\" fill=\"' + paint + '\" mask=\"url(#m)\"/>';\n const rip = (s === 'blocked' || s === 'waiting') ? '<circle class=\"rip self\" cx=\"100\" cy=\"100\" r=\"72\" fill=\"none\" stroke=\"' + tok(s) + '\" stroke-width=\"3\" opacity=\"0\"/>' : '';\n const R_ = { static: [[], []], offline: [[], []], idle: [[A('.disc', 'breathe', 3.2, 'ease-in-out')], ['breathe']],\n thinking: [[A('.orb', 'rock', 2.4, 'ease-in-out')], ['rock']], running: [[A('.orb', 'spin', 2.2)], ['spin']],\n blocked: [[A('.rip', 'ripsm', 1.4, 'ease-out'), A('.disc', 'beat', 1.4, 'ease-in-out')], ['ripsm', 'beat']],\n waiting: [[A('.rip', 'ripsm', 2.6, 'ease-out')], ['ripsm']], done: [[A('.cn', 'centre', 3, EO)], ['centre']],\n error: [[A('.mark', 'shake', 2.4, 'ease-in-out')], ['shake']],\n boot: [[A('.disc', 'disc', 3.2, EO), A('.ct', 'grow', 3.2, EO), A('.orb', 'bootorb', 3.2, EIO)], ['disc', 'grow', 'bootorb']],\n loader: [[A('.orb', 'spin', 1.1)], ['spin']] }[s];\n return out(R_[0], R_[1], defs, '<g class=\"mark\">' + rip + disc + '</g>');\n },\n rings(s, light) {\n const t = tones(s), arcs = s === 'offline' ? tok('offline') : 'url(#g)';\n const sun = s === 'idle' ? '#d4d4d8' : (light ? 'url(#g)' : '#fff');\n const oL = 2 * Math.PI * 68, mL = 2 * Math.PI * 40;\n let outer = '<path class=\"ao\" d=\"' + arcp(68, -20, 290) + '\" stroke=\"' + arcs + '\" stroke-width=\"18\" stroke-linecap=\"round\" style=\"--len:' + (oL * 310 / 360).toFixed(1) + 'px\" stroke-dasharray=\"' + (oL * 310 / 360).toFixed(1) + ' 999\"/>';\n let mid = '<path class=\"am\" d=\"' + arcp(40, 160, 460) + '\" stroke=\"' + arcs + '\" stroke-width=\"16\" stroke-linecap=\"round\" style=\"--len:' + (mL * 300 / 360).toFixed(1) + 'px\" stroke-dasharray=\"' + (mL * 300 / 360).toFixed(1) + ' 999\"/>';\n const pd = on(68, -45), pdot = s === 'done' ? '' : '<circle class=\"pd self\" cx=\"' + pd[0].toFixed(2) + '\" cy=\"' + pd[1].toFixed(2) + '\" r=\"9\" fill=\"' + arcs + '\"/>';\n let extraKF = '';\n if (s === 'done') {\n outer = '<circle class=\"ao\" cx=\"100\" cy=\"100\" r=\"68\" stroke=\"' + arcs + '\" stroke-width=\"18\" stroke-dasharray=\"' + (oL * 310 / 360).toFixed(1) + ' ' + (oL * 50 / 360).toFixed(1) + '\" transform=\"rotate(-20 100 100)\"/>';\n mid = '<circle class=\"am\" cx=\"100\" cy=\"100\" r=\"40\" stroke=\"' + arcs + '\" stroke-width=\"16\" stroke-dasharray=\"' + (mL * 300 / 360).toFixed(1) + ' ' + (mL * 60 / 360).toFixed(1) + '\" transform=\"rotate(160 100 100)\"/>';\n extraKF = '@keyframes close_o{0%,15%{stroke-dasharray:' + (oL * 310 / 360).toFixed(1) + ' ' + (oL * 50 / 360).toFixed(1) + '}50%,100%{stroke-dasharray:' + oL.toFixed(1) + ' 0}}'\n + '@keyframes close_m{0%,15%{stroke-dasharray:' + (mL * 300 / 360).toFixed(1) + ' ' + (mL * 60 / 360).toFixed(1) + '}50%,100%{stroke-dasharray:' + mL.toFixed(1) + ' 0}}';\n }\n const sunel = s === 'offline' ? '<circle cx=\"100\" cy=\"100\" r=\"10\" fill=\"none\" stroke=\"#a1a1aa\" stroke-width=\"4\"/>' : '<circle class=\"sun self\" cx=\"100\" cy=\"100\" r=\"12\" fill=\"' + sun + '\"/>';\n const rip = (s === 'blocked' || s === 'waiting' || s === 'done') ? '<circle class=\"rip self\" cx=\"100\" cy=\"100\" r=\"12\" fill=\"none\" stroke=\"' + tok(s) + '\" stroke-width=\"3\" opacity=\"0\"/>' : '';\n const R_ = { static: [[], []], offline: [[], []], idle: [[A('.mark', 'breathe', 3.2, 'ease-in-out')], ['breathe']],\n thinking: [[A('.sun', 'pulse', 1.4, 'ease-in-out'), A('.gm', 'rock', 3, 'ease-in-out')], ['pulse', 'rock']],\n running: [[A('.go', 'spin', 5), A('.gm', 'spinr', 2.6)], ['spin', 'spinr']],\n blocked: [[A('.rip', 'ripple', 1.4, 'ease-out'), A('.sun', 'beat', 1.4, 'ease-in-out')], ['ripple', 'beat']],\n waiting: [[A('.rip', 'ripple', 2.6, 'ease-out')], ['ripple']],\n done: [[A('.ao', 'close_o', 3, EO), A('.am', 'close_m', 3, EO), A('.rip', 'ripone', 3, 'ease-out')], ['ripone']],\n error: [[A('.mark', 'shake', 2.4, 'ease-in-out')], ['shake']],\n boot: [[A('.ao', 'draw', 3.2, EIO), A('.am', 'drawl', 3.2, EIO), A('.sun,.pd', 'popin', 3.2, EO)], ['draw', 'drawl', 'popin']],\n loader: [[A('.go', 'spin', 1.6), A('.gm', 'spinr', 1)], ['spin', 'spinr']] }[s];\n const o = out(R_[0], R_[1], grad('g', t), '<g class=\"mark\"><g class=\"go rot\">' + outer + pdot + '</g><g class=\"gm rot\">' + mid + '</g>' + rip + sunel + '</g>');\n o.css += extraKF; return o;\n },\n parallel(s) {\n const t = tones(s), off = s === 'offline', paint = off ? tok('offline') : 'url(#g)';\n const top = '<g class=\"t\"><path d=\"' + arcp(56, 180, 360) + '\" stroke=\"' + paint + '\" stroke-width=\"30\"/></g>';\n const bot = '<g class=\"b\"><path d=\"' + arcp(56, 0, 180) + '\" stroke=\"' + paint + '\" stroke-width=\"30\"/></g>';\n const base = off ? '.t{transform:translate(16px,-6px)}.b{transform:translate(-16px,6px)}' : '.t{transform:translate(9px,-3px)}.b{transform:translate(-9px,3px)}';\n const R_ = { static: [[], []], offline: [[], []], idle: [[A('.mark', 'breathe', 3.2, 'ease-in-out')], ['breathe']],\n thinking: [[A('.t', 'ptl', 2.4, 'ease-in-out'), A('.b', 'pbl', 2.4, 'ease-in-out')], ['ptl', 'pbl']],\n running: [[A('.t', 'pt', 1.4, 'ease-in-out'), A('.b', 'pb', 1.4, 'ease-in-out')], ['pt', 'pb']],\n blocked: [[A('.t', 'lift', 1.4, EO)], ['lift']], waiting: [[A('.mark', 'breathe', 2.6, 'ease-in-out')], ['breathe']],\n done: [[A('.t', 'merge_t', 3, EO), A('.b', 'merge_b', 3, EO)], ['merge_t', 'merge_b']],\n error: [[A('.t', 'jit_t', 2.4, 'ease-in-out'), A('.b', 'jit_b', 2.4, 'ease-in-out')], ['jit_t', 'jit_b']],\n boot: [[A('.t', 'in_t', 3.2, EO), A('.b', 'in_b', 3.2, EO)], ['in_t', 'in_b']],\n loader: [[A('.t', 'pt', .9, 'ease-in-out'), A('.b', 'pb', .9, 'ease-in-out')], ['pt', 'pb']] }[s];\n return out([base].concat(R_[0]), R_[1], grad('g', t), '<g class=\"mark\"' + (off ? ' opacity=\".45\"' : '') + '>' + top + bot + '</g>');\n },\n stencil(s) {\n const t = tones(s), off = s === 'offline', paint = off ? tok('offline') : 'url(#g)';\n const defs = grad('g', t) + mask('m', '<g class=\"cut rot\"><path class=\"cl\" d=\"M' + f2(on(100, -45)) + ' L' + f2(on(100, 135)) + '\" stroke=\"#000\" stroke-width=\"' + (off ? 16 : 9) + '\"/></g>');\n const ring = off\n ? '<g mask=\"url(#m)\"><circle cx=\"100\" cy=\"100\" r=\"72\" stroke=\"' + paint + '\" stroke-width=\"4\"/><circle cx=\"100\" cy=\"100\" r=\"36\" stroke=\"' + paint + '\" stroke-width=\"4\"/></g>'\n : '<g mask=\"url(#m)\"><circle class=\"ring\" cx=\"100\" cy=\"100\" r=\"54\" stroke=\"' + paint + '\" stroke-width=\"36\" transform=\"rotate(-45 100 100)\" style=\"--len:339.3px\" stroke-dasharray=\"339.3\"/></g>';\n const rip = (s === 'blocked' || s === 'waiting') ? '<circle class=\"rip self\" cx=\"100\" cy=\"100\" r=\"72\" fill=\"none\" stroke=\"' + tok(s) + '\" stroke-width=\"3\" opacity=\"0\"/>' : '';\n const R_ = { static: [[], []], offline: [[], []], idle: [[A('.mark', 'breathe', 3.2, 'ease-in-out')], ['breathe']],\n thinking: [[A('.cut', 'rock', 2.4, 'ease-in-out')], ['rock']], running: [[A('.cut', 'spin', 2)], ['spin']],\n blocked: [[A('.rip', 'ripsm', 1.4, 'ease-out'), A('.ring', 'breathe', 1.4, 'ease-in-out')], ['ripsm', 'breathe']],\n waiting: [[A('.rip', 'ripsm', 2.6, 'ease-out')], ['ripsm']], done: [[A('.cl', 'close', 3, EO)], ['close']],\n error: [[A('.mark', 'shake', 2.4, 'ease-in-out'), A('.cl', 'widen', 2.4, 'ease-in-out')], ['shake', 'widen']],\n boot: [[A('.ring', 'draw', 3.2, EIO), A('.cut', 'sweep', 3.2, EIO)], ['draw', 'sweep']],\n loader: [[A('.cut', 'spin', .9)], ['spin']] }[s];\n return out(R_[0], R_[1], defs, '<g class=\"mark\">' + rip + ring + '</g>');\n },\n };\n\n /* ── pixel: each state sampled frame by frame on a grid, played with stepped CSS ── */\n const ease = (p) => { p = Math.max(0, Math.min(1, p)); return 1 - Math.pow(1 - p, 3); };\n const easeio = (p) => { p = Math.max(0, Math.min(1, p)); return p < .5 ? 4 * p * p * p : 1 - Math.pow(-2 * p + 2, 3) / 2; };\n const lerpK = (t, k) => { for (let i = 0; i < k.length - 1; i++) { const [t0, v0] = k[i], [t1, v1] = k[i + 1]; if (t >= t0 && t <= t1) return v0 + (v1 - v0) * (t1 > t0 ? (t - t0) / (t1 - t0) : 0); } return k[k.length - 1][1]; };\n const SHAKE = [[0, 0], [.04, -7], [.10, 6], [.16, -5], [.22, 3], [.28, -1], [.34, 0], [1, 0]];\n const ang = (x, y, cx = 100, cy = 100) => ((Math.atan2(y - cy, x - cx) * 180 / Math.PI) % 360 + 360) % 360;\n const inSpan = (a, a0, sp) => ((((a - a0) % 360) + 360) % 360) <= sp;\n const disc = (cx, cy, r) => (x, y) => (x - cx) * (x - cx) + (y - cy) * (y - cy) <= r * r;\n const ring = (cx, cy, r, w) => (x, y) => Math.abs(Math.hypot(x - cx, y - cy) - r) <= w / 2;\n const arcS = (cx, cy, r, w, a0, sp, caps = true) => {\n const e0 = on(r, a0, cx, cy), e1 = on(r, a0 + sp, cx, cy);\n return (x, y) => (Math.abs(Math.hypot(x - cx, y - cy) - r) <= w / 2 && inSpan(ang(x, y, cx, cy), ((a0 % 360) + 360) % 360, sp))\n || (caps && sp > 0 && (Math.hypot(x - e0[0], y - e0[1]) <= w / 2 || Math.hypot(x - e1[0], y - e1[1]) <= w / 2));\n };\n const minus = (a, b) => (x, y) => a(x, y) && !b(x, y);\n const ripL = (cx, cy, r0, grow, p, col, until = .75) => p > until ? null : [ring(cx, cy, r0 * (1 + grow * p), 9), col, 1 - p / until];\n const bandCol = (T) => (x, y) => { const d = ((x + y) / 2 - 30) / 140; return d < .36 ? T[0] : d < .68 ? T[1] : T[2]; };\n const breatheA = (t) => .45 + .55 * (.5 - .5 * Math.cos(2 * Math.PI * t));\n const S = {\n monogram(s, t, light) {\n const T = tones(s), L = []; let dx = 0, a = -45, pr = 14, al = 1;\n if (s === 'running' || s === 'loader') a = -45 + 360 * t;\n if (s === 'done') a = -45 - 320 * (1 - ease(t / .42));\n if (s === 'boot') a = t > .46 ? -45 + 360 * easeio((t - .46) / .4) : -45;\n if (s === 'thinking') pr = 14 * (.78 + .3 * (.5 - .5 * Math.cos(2 * Math.PI * t)));\n if (s === 'blocked' && t < .3) pr = 14 * (1 + .14 * Math.sin(Math.PI * t / .3));\n if (s === 'done' && t > .4 && t < .62) pr = 14 * (1 + .3 * Math.sin(Math.PI * (t - .4) / .22));\n if (s === 'boot') pr = t < .28 ? 0 : 14 * lerpK(t, [[.28, 0], [.38, 1.25], [.46, 1], [1, 1]]);\n if (s === 'idle') al = breatheA(t);\n if (s === 'error') dx = lerpK(t, SHAKE);\n const P = on(56, a), h = disc(P[0], P[1], 30), bc = bandCol(T);\n if (s === 'offline') return [[[minus(ring(100, 100, 56, 32), h), tok('offline'), .55], [ring(P[0], P[1], 12, 9), '#a1a1aa', 1]], 0];\n if (s === 'loader') { L.push([minus(ring(100, 100, 56, 32), h), bc, .22]); L.push([minus(arcS(100, 100, 56, 32, a - 110, 110, false), h), bc, 1]); }\n else if (s === 'boot') L.push([minus(arcS(100, 100, 56, 32, -45, 360 * easeio(t / .3), false), h), bc, 1]);\n else L.push([minus(ring(100, 100, 56, 32), h), bc, al]);\n if (s === 'blocked' || s === 'waiting') L.push(ripL(P[0], P[1], pr, 1.6, t, tok(s)));\n if (s === 'done' && t > .44 && t < .85) L.push(ripL(P[0], P[1], 15, 1.6, (t - .44) / .41, tok('done'), 1));\n if (pr > 0) L.push([disc(P[0], P[1], pr), s === 'idle' ? '#d4d4d8' : (light ? T[1] : '#fff'), s === 'idle' ? al : 1]);\n return [L, dx];\n },\n eccentric(s, t) {\n const T = tones(s), L = []; let dx = 0, th = 0, f = 1, al = 1, cs = 1, ds = 1;\n if (s === 'running' || s === 'loader') th = 360 * t;\n if (s === 'thinking') th = 22 * Math.sin(2 * Math.PI * t);\n if (s === 'done') f = t > .2 ? 1 - ease((t - .2) / .35) : 1;\n if (s === 'boot') { ds = lerpK(t, [[0, .4], [.14, 1], [1, 1]]); cs = t > .1 ? ease((t - .1) / .3) : 0; th = t > .46 ? 360 * easeio((t - .46) / .4) : 0; }\n if (s === 'idle') al = breatheA(t);\n if (s === 'error') dx = lerpK(t, SHAKE);\n const ox = 12 * f, oy = -12 * f, c = Math.cos(R(th)), sn = Math.sin(R(th));\n if (s === 'offline') return [[[ring(100, 100, 67, 10), tok('offline'), 1], [ring(112, 88, 46, 10), tok('offline'), 1]], 0];\n L.push([minus(disc(100, 100, 72 * ds), disc(100 + ox * c - oy * sn, 100 + ox * sn + oy * c, 42 * cs)), bandCol(T), al]);\n if (s === 'blocked' || s === 'waiting') L.push(ripL(100, 100, 72, .32, t, tok(s)));\n return [L, dx];\n },\n rings(s, t, light) {\n const T = tones(s), L = []; let dx = 0, to = 0, tm = 0, so = 310, sm = 300, sr = 12, al = 1, pdot = true;\n if (s === 'running' || s === 'loader') { to = 360 * t; tm = -720 * t; }\n if (s === 'thinking') { sr = 12 * (.78 + .3 * (.5 - .5 * Math.cos(2 * Math.PI * t))); tm = 22 * Math.sin(2 * Math.PI * t); }\n if (s === 'blocked' && t < .3) sr = 12 * (1 + .14 * Math.sin(Math.PI * t / .3));\n if (s === 'done') { const k = t > .15 ? ease((t - .15) / .35) : 0; so = 310 + 50 * k; sm = 300 + 60 * k; pdot = false; }\n if (s === 'boot') { so = 310 * easeio(t / .3); sm = t > .12 ? 300 * easeio((t - .12) / .28) : 0; sr = t < .28 ? 0 : 12 * lerpK(t, [[.28, 0], [.38, 1.25], [.46, 1], [1, 1]]); }\n if (s === 'idle') al = breatheA(t);\n if (s === 'error') dx = lerpK(t, SHAKE);\n const col = s === 'offline' ? tok('offline') : bandCol(T);\n if (so > 0) L.push([arcS(100, 100, 68, 18, -20 + to, Math.min(so, 360), so < 360), col, al]);\n if (sm > 0) L.push([arcS(100, 100, 40, 16, 160 + tm, Math.min(sm, 360), sm < 360), col, al]);\n if (pdot && (s !== 'boot' || t > .28)) { const p = on(68, -45 + to); L.push([disc(p[0], p[1], 10), col, al]); }\n if (s === 'offline') { L.push([ring(100, 100, 10, 9), '#a1a1aa', 1]); return [L, 0]; }\n if (s === 'blocked' || s === 'waiting') L.push(ripL(100, 100, sr, 1.6, t, tok(s)));\n if (s === 'done' && t > .44 && t < .85) L.push(ripL(100, 100, 12, 1.6, (t - .44) / .41, tok('done'), 1));\n if (sr > 0) L.push([disc(100, 100, sr), s === 'idle' ? '#d4d4d8' : (light ? T[1] : '#fff'), s === 'idle' ? al : 1]);\n return [L, dx];\n },\n parallel(s, t) {\n const T = tones(s), L = []; let tp = [9, -3], bt = [-9, 3], al = 1; const c = Math.cos(2 * Math.PI * t);\n if (s === 'running' || s === 'loader') { tp = [9 * c, -3]; bt = [-9 * c, 3]; }\n if (s === 'thinking') { tp = [6.5 + 2.5 * c, -3]; bt = [-6.5 - 2.5 * c, 3]; }\n if (s === 'blocked') tp = [9, -3 - 9 * (t >= .3 && t <= .7 ? 1 : (t < .3 ? t / .3 : (1 - t) / .3))];\n if (s === 'done') { const k = t > .15 ? ease((t - .15) / .35) : 0; tp = [9 * (1 - k), -3 * (1 - k)]; bt = [-9 * (1 - k), 3 * (1 - k)]; }\n if (s === 'error') { const j = lerpK(t, [[0, 0], [.08, 1], [.16, -.6], [.24, .5], [.4, 0], [1, 0]]); tp = [9 + 6 * j, -3 - 5 * j]; bt = [-9 - 6 * j, 3 + 5 * j]; }\n if (s === 'boot') { const k = ease(t / .35); tp = [9 + 81 * (1 - k), -3]; bt = [-9 - 81 * (1 - k), 3]; }\n if (s === 'idle' || s === 'waiting') al = breatheA(t);\n if (s === 'offline') { tp = [16, -6]; bt = [-16, 6]; al = .45; }\n const col = s === 'offline' ? tok('offline') : bandCol(T);\n L.push([(x, y) => Math.abs(Math.hypot(x - 100 - tp[0], y - 100 - tp[1]) - 56) <= 15 && y <= 100 + tp[1], col, al]);\n L.push([(x, y) => Math.abs(Math.hypot(x - 100 - bt[0], y - 100 - bt[1]) - 56) <= 15 && y >= 100 + bt[1], col, al]);\n return [L, 0];\n },\n stencil(s, t) {\n const T = tones(s), L = []; let dx = 0, th = 0, cw = 16, al = 1, rev = 360;\n if (s === 'running' || s === 'loader') th = 360 * t;\n if (s === 'thinking') th = 22 * Math.sin(2 * Math.PI * t);\n if (s === 'done') cw = t > .15 ? 16 * (1 - ease((t - .15) / .35)) : 16;\n if (s === 'error') { dx = lerpK(t, SHAKE); cw = lerpK(t, [[0, 16], [.1, 28], [.25, 28], [.4, 16], [1, 16]]); }\n if (s === 'boot') { rev = 360 * easeio(t / .3); th = t > .3 ? -180 + 180 * easeio((t - .3) / .4) : -180; }\n if (s === 'idle') al = breatheA(t);\n if (s === 'blocked') al = .6 + .4 * (.5 + .5 * Math.cos(2 * Math.PI * t));\n if (s === 'offline') { cw = 24; al = .55; }\n const n = [Math.cos(R(45 + th)), Math.sin(R(45 + th))];\n const cut = (x, y) => Math.abs((x - 100) * n[0] + (y - 100) * n[1]) <= cw / 2;\n const body = rev < 360 ? arcS(100, 100, 54, 36, -45, rev, false) : ring(100, 100, 54, 36);\n L.push([minus(body, cut), s === 'offline' ? tok('offline') : bandCol(T), al]);\n if (s === 'blocked' || s === 'waiting') L.push(ripL(100, 100, 72, .32, t, tok(s)));\n return [L, dx];\n },\n };\n const TIMING = { static: [1, 1], idle: [8, 3.2], thinking: [8, 1.4], running: [16, 1.8], blocked: [10, 1.4], waiting: [12, 2.6], done: [20, 3], error: [16, 2.4], offline: [1, 1], boot: [24, 3.2], loader: [12, 1] };\n const TIMING_O = { 'rings/running': [24, 5.2], 'rings/loader': [16, 1.6], 'eccentric/running': [16, 2.2], 'parallel/running': [14, 1.4], 'parallel/loader': [10, .9], 'stencil/running': [16, 2], 'stencil/loader': [12, .9], 'eccentric/loader': [12, 1.1] };\n const SUB = 4;\n function raster(layers, dx, G) {\n const cell = 200 / G, offs = []; for (let i = 0; i < SUB; i++) offs.push((i + .5) / SUB * cell);\n const grid = new Map();\n for (let gy = 0; gy < G; gy++) for (let gx = 0; gx < G; gx++) {\n const votes = new Map();\n for (const oy of offs) for (const ox of offs) {\n const x = gx * cell + ox - dx, y = gy * cell + oy; let key = null;\n for (const [shape, col, al] of layers) if (shape(x, y)) key = (typeof col === 'function' ? col(gx * cell + cell / 2, gy * cell + cell / 2) : col) + '|' + (Math.round(al * 100) / 100);\n votes.set(key, (votes.get(key) || 0) + 1);\n }\n let best = null, bv = 0; for (const [k, v] of votes) if (k !== null && v > bv) { best = k; bv = v; }\n if (best !== null && bv >= SUB * SUB * .4) grid.set(gx + ',' + gy, best);\n }\n return grid;\n }\n function framePaths(grid, G, ox = 0, oy = 0, unit) {\n const cell = unit || 200 / G, by = new Map();\n for (const [k, v] of grid) { const [gx, gy] = k.split(',').map(Number); if (!by.has(v)) by.set(v, []); by.get(v).push([gy, gx]); }\n let o = '';\n for (const [key, cells] of by) {\n cells.sort((a, b) => a[0] - b[0] || a[1] - b[1]);\n let d = '';\n for (let i = 0; i < cells.length;) {\n const [gy, gx] = cells[i]; let j = i;\n while (j + 1 < cells.length && cells[j + 1][0] === gy && cells[j + 1][1] === cells[j][1] + 1) j++;\n const w = (j - i + 1) * cell; d += 'M' + +((gx + ox) * cell).toFixed(3) + ' ' + +((gy + oy) * cell).toFixed(3) + 'h' + +w.toFixed(3) + 'v' + +cell.toFixed(3) + 'h-' + +w.toFixed(3) + 'z'; i = j + 1;\n }\n const [col, al] = key.split('|');\n o += '<path d=\"' + d + '\" style=\"fill:' + col + '\"' + (+al < 1 ? ' fill-opacity=\"' + al + '\"' : '') + '/>';\n }\n return o;\n }\n function frames(logo, s, light, G) {\n const [N, D] = s === 'static' ? [1, 1] : (TIMING_O[logo + '/' + s] || TIMING[s]);\n const grids = [];\n for (let i = 0; i < N; i++) { const [L, dx] = S[logo](s === 'static' ? 'thinking' : s, s === 'static' ? .5 : i / N, light); grids.push(raster(L.filter(Boolean), dx, G)); }\n return { N, D, grids };\n }\n function pixel(logo, s, light) {\n const { N, D, grids } = frames(logo, s, light, 20);\n if (N === 1) return { css: '', defs: '', body: '<g shape-rendering=\"crispEdges\">' + framePaths(grids[0], 20) + '</g>' };\n const dt = D / N;\n const body = grids.map((g, i) => '<g class=\"f f' + i + '\" style=\"animation-delay:-' + (((N - i) % N) * dt).toFixed(3) + 's\">' + framePaths(g, 20) + '</g>').join('');\n return { css: '.f{visibility:hidden;animation:fr ' + D + 's step-end infinite}@keyframes fr{0%{visibility:visible}' + (100 / N).toFixed(4) + '%{visibility:hidden}100%{visibility:hidden}}@media (prefers-reduced-motion:reduce){.f{animation:none}.f0{visibility:visible}}',\n defs: '', body: '<g shape-rendering=\"crispEdges\">' + body + '</g>' };\n }\n\n /* ── pixel wordmark: the mark on a 14-cell grid as the O, then r r e r y in a matching pixel font ── */\n const GLYPH = {\n r: ['##.####', '#######', '###....', '##.....', '##.....', '##.....', '##.....', '##.....', '##.....', '##.....'],\n e: ['.######.', '########', '##....##', '##....##', '########', '########', '##......', '##......', '########', '.#######'],\n y: ['##....##', '##....##', '##....##', '##....##', '##....##', '##....##', '##....##', '########', '.#######', '......##', '......##', '########', '#######.'],\n };\n function pixelWord(logo, s, light) {\n const G = 14, { N, D, grids } = frames(logo, s, light, G);\n let minX = G, maxX = 0, minY = G, maxY = 0;\n for (const g of grids) for (const k of g.keys()) { const [x, y] = k.split(',').map(Number); minX = Math.min(minX, x); maxX = Math.max(maxX, x); minY = Math.min(minY, y); maxY = Math.max(maxY, y); }\n if (minX > maxX) { minX = 0; maxX = G - 1; minY = 0; maxY = G - 1; }\n const xh = 10, ox = -minX, oy = (xh - 1) - maxY + 3; // O sits on the baseline (row 12); 3 rows of headroom for the planet\n let x = maxX - minX + 1 + 2, letters = '';\n for (const ch of 'rrery') {\n const g = GLYPH[ch]; let d = '';\n g.forEach((row, ry) => { for (let rx = 0; rx < row.length; rx++) if (row[rx] === '#') d += 'M' + (x + rx) + ' ' + (ry + 3) + 'h1v1h-1z'; });\n letters += d; x += g[0].length + 1;\n }\n const W = x - 1, H = 3 + 13, mark = (g) => framePaths(g, G, ox, oy, 1);\n const body = N === 1 ? mark(grids[0]) : grids.map((g, i) => '<g class=\"f f' + i + '\" style=\"animation-delay:-' + (((N - i) % N) * (D / N)).toFixed(3) + 's\">' + mark(g) + '</g>').join('');\n const css = N === 1 ? '' : '.f{visibility:hidden;animation:fr ' + D + 's step-end infinite}@keyframes fr{0%{visibility:visible}' + (100 / N).toFixed(4) + '%{visibility:hidden}100%{visibility:hidden}}@media (prefers-reduced-motion:reduce){.f{animation:none}.f0{visibility:visible}}';\n return { W, H, css, svg: '<g shape-rendering=\"crispEdges\">' + body + '<path d=\"' + letters + '\" fill=\"currentColor\"/></g>' };\n }\n\n const cache = new Map();\n const memo = (k, f) => { if (!cache.has(k)) cache.set(k, f()); return cache.get(k); };\n const api = {\n LOGOS, STATES, fallback: 'monogram',\n /** the logo in effect for an element: nearest data-logo up the tree (across shadow roots), else the fallback */\n resolve(el) {\n for (let n = el; n; n = n.parentNode || n.host) {\n if (n.nodeType === 1 && n.hasAttribute('data-logo')) {\n const v = n.getAttribute('data-logo');\n if (LOGOS.includes(v)) return v;\n warnOnce('logo:' + v, '[orr-logo] data-logo=\"' + v + '\" is not a logo. Use one of: ' + LOGOS.join(', ') + '.');\n }\n }\n return LOGOS.includes(api.fallback) ? api.fallback : 'monogram';\n },\n light(el) { for (let n = el; n; n = n.parentNode || n.host) if (n.nodeType === 1 && n.hasAttribute('data-theme')) return n.getAttribute('data-theme') === 'paper'; return false; },\n state(v) { v = (v || 'static').toLowerCase(); if (v.indexOf('{{') === 0) return 'static'; v = ALIAS[v] || v; if (!STATES.includes(v)) { warnOnce('state:' + v, '[orr-logo] state=\"' + v + '\" is unknown. Use one of: ' + STATES.join(', ') + '.'); v = 'static'; } return v; },\n /** markup for one mark: { css, defs, body } in a 200-unit box (memoised) */\n draw(logo, state, type, light, color, shader) {\n const s = KEY[state] || state;\n const sh = !!shader && type !== 'pixel';\n return memo([logo, s, type, light, color || '', sh ? 'sh' : ''].join('/'), () => { TINT = color || null; SHADE = sh; try { return type === 'pixel' ? pixel(logo, s, light) : V[logo](s, light); } finally { TINT = null; SHADE = false; } });\n },\n word(logo, state, light, color) { const s = KEY[state] || state; return memo(['w', logo, s, light, color || ''].join('/'), () => { TINT = color || null; try { return pixelWord(logo, s, light); } finally { TINT = null; } }); },\n /** switch the mark everywhere in this document */\n use(logo) { document.documentElement.setAttribute('data-logo', logo); },\n };\n const warned = new Set();\n function warnOnce(k, m) { if (!warned.has(k)) { warned.add(k); console.warn(m); } }\n return api;\n })();\n","import { ChangeDetectionStrategy, Component, ElementRef, booleanAttribute, effect, inject, input } from \"@angular/core\";\n\nimport { OrrLogo } from \"./logo-art\";\n\nexport type OrrLogoName = \"monogram\" | \"eccentric\" | \"rings\" | \"parallel\" | \"stencil\";\nexport type OrrLogoType = \"default\" | \"pixel\";\n/** Aliases work too: blocked, needs, executing, working, boot, queued, waiting-for-you, spinner. */\nexport type OrrLogoState =\n | \"static\" | \"idle\" | \"thinking\" | \"running\" | \"needs-you\" | \"waiting\" | \"done\" | \"error\" | \"offline\" | \"loading\" | \"loader\"\n | (string & {});\n\n/**\n * The mark every app draws unless an `<orr-logo>` says otherwise: switch it here, once, and every\n * front end follows (the design's `OrrLogo.fallback` / `<html data-logo>`).\n */\nexport const ORRERY_LOGO: { logo: OrrLogoName; type: OrrLogoType } = { logo: \"monogram\", type: \"default\" };\n\n/** The design system's `<orr-logo>` styles, verbatim. */\nconst CSS =\n \":host{display:inline-flex;align-items:center;vertical-align:middle;line-height:1} :host([wordmark]){display:inline;vertical-align:baseline;line-height:inherit}\" +\n \" .m{display:inline-block;flex:none;position:relative} .m svg{display:block;width:100%;height:100%;overflow:visible}\" +\n \" .plate{border-radius:22%;background:var(--brand-plate,#090a0f);display:inline-flex;align-items:center;justify-content:center}\" +\n \" .w{display:inline;white-space:nowrap;font:inherit} .w .m{display:inline-block;width:.6em;height:.6em;vertical-align:-.035em;margin:0 .035em 0 .03em}\" +\n \" .pw{display:inline-block;vertical-align:-.16em;color:currentColor}\";\n\nconst esc = (s: string) => s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/\"/g, \""\");\nconst warned = new Set<string>();\nconst warnOnce = (k: string, m: string) => { if (!warned.has(k)) { warned.add(k); console.warn(m); } };\n\nexport interface LogoOptions {\n logo?: string;\n type?: string;\n state?: string;\n size?: number | \"fill\";\n wordmark?: boolean;\n plate?: boolean;\n label?: string;\n color?: string | null;\n light?: boolean;\n /** The extensions finish: painted with the level colours (or `color`) under the light-streak texture. Vector only. */\n shader?: boolean;\n}\n\n/** The shadow-root markup of one `<orr-logo>`: the design's render, as a function. */\nexport function logoMarkup(o: LogoOptions): string {\n let logo = o.logo || ORRERY_LOGO.logo;\n if (!OrrLogo.LOGOS.includes(logo)) {\n warnOnce(\"logo:\" + logo, `[orr-logo] logo=\"${logo}\" is not a logo. Use one of: ${OrrLogo.LOGOS.join(\", \")}.`);\n logo = ORRERY_LOGO.logo;\n }\n let type = (o.type || ORRERY_LOGO.type).toLowerCase();\n if (type !== \"default\" && type !== \"pixel\") {\n warnOnce(\"type:\" + type, `[orr-logo] type=\"${type}\" is unknown. Use default or pixel.`);\n type = \"default\";\n }\n const state = OrrLogo.state(o.state), light = !!o.light, color = o.color || null;\n const label = o.label || \"Orrery\" + (state === \"static\" ? \"\" : \" · \" + state);\n const fill = o.size === \"fill\", size = fill ? 0 : (o.size as number) || 24;\n const box = (k: number) => (fill ? `width:${k * 100}%;height:${k * 100}%` : `width:${(size * k).toFixed(1)}px;height:${(size * k).toFixed(1)}px`);\n let html: string;\n if (o.wordmark && type === \"pixel\") {\n const w = OrrLogo.word(logo, state, light, color), u = 0.053; // one font pixel = 0.053em, so the O is one x-height\n html = `<style>${w.css}</style><span class=\"pw\" role=\"img\" aria-label=\"${esc(label)}\" style=\"width:${(w.W * u).toFixed(3)}em;height:${(w.H * u).toFixed(3)}em\"><svg viewBox=\"0 0 ${w.W} ${w.H}\" width=\"100%\" height=\"100%\">${w.svg}</svg></span>`;\n } else {\n const d = OrrLogo.draw(logo, state, type, light, color, !!o.shader);\n if (o.wordmark) {\n html = `<style>${d.css}</style><span class=\"w\" role=\"img\" aria-label=\"${esc(label)}\"><span class=\"m\"><svg viewBox=\"26 26 148 148\" fill=\"none\"><defs>${d.defs}</defs>${d.body}</svg></span><span aria-hidden=\"true\">rrery</span></span>`;\n } else {\n const svg = `<svg viewBox=\"0 0 200 200\" fill=\"none\" role=\"img\" aria-label=\"${esc(label)}\"><defs>${d.defs}</defs>${d.body}</svg>`;\n html = `<style>${d.css}</style>` + (o.plate\n ? `<span class=\"m plate\" style=\"${box(1)}\"><span class=\"m\" style=\"${box(0.78)}\">${svg}</span></span>`\n : `<span class=\"m\" style=\"${box(1)}\">${svg}</span>`);\n }\n }\n return `<style>${CSS}</style>` + html;\n}\n\n/** A mask's content animates on its own clock in Chrome, so a planet and the gap cut around it drift apart: give every animation in the mark one start time, two frames after render. */\nexport function syncMotion(root: { getAnimations?: () => Animation[] }): void {\n if (typeof requestAnimationFrame === \"undefined\" || typeof document === \"undefined\" || !root.getAnimations || !document.timeline) return;\n requestAnimationFrame(() => requestAnimationFrame(() => {\n const t0 = document.timeline.currentTime;\n for (const a of root.getAnimations!()) { try { a.startTime = t0; } catch { /* not timeline-bound */ } }\n }));\n}\n\n/**\n * `<orr-logo>`: the Orrery mark in every agent state, as vector or pixel art, the same generator as\n * the design (`scripts/design/sync-logo.mjs`). `wordmark` writes \"Orrery\" with the mark as its O;\n * `plate` is the app-icon form; `size=\"fill\"` fills the parent; `shader` paints it with the extensions\n * colour field. Which mark: `logo`, else ORRERY_LOGO.\n */\n@Component({\n selector: \"orr-logo\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"[attr.wordmark]\": \"wordmark() ? '' : null\" },\n template: \"\",\n})\nexport class OrrLogoComponent {\n readonly logo = input<OrrLogoName | undefined>(undefined);\n readonly type = input<OrrLogoType | undefined>(undefined);\n readonly state = input<OrrLogoState>(\"static\");\n /** px, or \"fill\"; a wordmark without a size takes the surrounding font size. */\n readonly size = input<number | \"fill\" | undefined, unknown>(undefined, {\n transform: (v: unknown) => (v === \"fill\" ? \"fill\" : v == null || v === \"\" ? undefined : Number(v)),\n });\n readonly wordmark = input(false, { transform: booleanAttribute });\n readonly plate = input(false, { transform: booleanAttribute });\n readonly label = input(\"\");\n /** Tints the brand states instead of the gradient. */\n readonly color = input<string | null>(null);\n /** Paper surfaces; unset, the nearest `data-theme` ancestor decides (\"paper\" = light). */\n readonly light = input<boolean | undefined>(undefined);\n /** The extensions finish: every level's colour (or `color`) under the light-streak texture. Vector only. */\n readonly shader = input(false, { transform: booleanAttribute });\n\n constructor() {\n const host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n const root = host.attachShadow({ mode: \"open\" });\n effect(() => {\n const size = this.size();\n host.style.fontSize = this.wordmark() && typeof size === \"number\" ? `${size}px` : \"\";\n if (size === \"fill\") host.style.display = host.style.display || \"inline-block\";\n const light = this.light() ?? host.closest(\"[data-theme]\")?.getAttribute(\"data-theme\") === \"paper\";\n root.innerHTML = logoMarkup({\n logo: this.logo(), type: this.type(), state: this.state(), size, wordmark: this.wordmark(),\n plate: this.plate(), label: this.label(), color: this.color(), light, shader: this.shader(),\n });\n syncMotion(root);\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, numberAttribute } from \"@angular/core\";\n\nimport { OrrLogoComponent } from \"../logo/logo.component\";\n\n// Official brand logos for the agent tools — single <path>, viewBox \"0 0 24 24\".\n// Sourced from simple-icons; rendered in each tool's accent color by app-tool-badge.\n// codex = OpenAI mark, gemini = Google Gemini mark. `pi` ships no brand mark\n// (simple-icons has none), so its entry is a drawn π glyph in the same grid.\n/** Brand marks per agent tool (single path, 24 grid). */\nexport const TOOL_ICONS: Readonly<Record<string, string>> = {\n claude: \"m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z\",\n gemini: \"M11.04 19.32Q12 21.51 12 24q0-2.49.93-4.68.96-2.19 2.58-3.81t3.81-2.55Q21.51 12 24 12q-2.49 0-4.68-.93a12.3 12.3 0 0 1-3.81-2.58 12.3 12.3 0 0 1-2.58-3.81Q12 2.49 12 0q0 2.49-.96 4.68-.93 2.19-2.55 3.81a12.3 12.3 0 0 1-3.81 2.58Q2.49 12 0 12q2.49 0 4.68.96 2.19.93 3.81 2.55t2.55 3.81\",\n codex: \"M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z\",\n cursor: \"M11.503.131 1.891 5.678a.84.84 0 0 0-.42.726v11.188c0 .3.162.575.42.724l9.609 5.55a1 1 0 0 0 .998 0l9.61-5.55a.84.84 0 0 0 .42-.724V6.404a.84.84 0 0 0-.42-.726L12.497.131a1.01 1.01 0 0 0-.996 0M2.657 6.338h18.55c.263 0 .43.287.297.515L12.23 22.918c-.062.107-.229.064-.229-.06V12.335a.59.59 0 0 0-.295-.51l-9.11-5.257c-.109-.063-.064-.23.061-.23\",\n // pi has no brand mark (simple-icons has none, its repo ships none), so this\n // is a drawn π glyph — top bar + two legs, the right one with the classic\n // foot — on the same 24-grid, painted in the neutral --tool-pi ink.\n pi: \"M3.45 4.85h17.1a1.45 1.45 0 0 1 0 2.9H3.45a1.45 1.45 0 0 1 0-2.9Zm3.3 4.15h2.9v9.6a1.45 1.45 0 0 1-2.9 0V9Zm7.95 0h2.9v8.5c0 .43.27.7.7.7h1.15a1.45 1.45 0 0 1 0 2.9h-1.6A3.15 3.15 0 0 1 14.7 17.7V9Z\",\n};\n\n/** The monogram drawn when a tool has no brand mark. */\nexport const TOOL_GLYPHS: Readonly<Record<string, string>> = { claude: \"✳\", codex: \"◆\", cursor: \"▸\", gemini: \"✦\", pi: \"π\" };\n\nconst KNOWN = new Set([\"claude\", \"codex\", \"cursor\", \"gemini\", \"pi\", \"orrery\"]);\n\n/**\n * `<orr-tool-badge tool=\"claude\" [size]=\"16\" />`: the agent tool's brand mark on a square tinted with\n * its `--tool-*` colour (from the ADE's `app-tool-badge`). Unknown tools show their first letter in `--ink-3`.\n */\n@Component({\n selector: \"orr-tool-badge\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [OrrLogoComponent],\n host: {\n role: \"img\",\n \"[attr.aria-label]\": \"tool()\",\n \"[attr.title]\": \"tool()\",\n style: \"display:inline-grid;place-items:center;flex:none;border-radius:4px;line-height:1\",\n \"[style.width.px]\": \"size()\",\n \"[style.height.px]\": \"size()\",\n \"[style.font-size.px]\": \"size() * 0.62\",\n \"[style.color]\": \"accent()\",\n \"[style.background]\": \"'color-mix(in oklch, ' + accent() + ', transparent 84%)'\",\n \"[style.border]\": \"'1px solid color-mix(in oklch, ' + accent() + ', transparent 64%)'\",\n },\n template: `\n @if (tool() === \"orrery\") {\n <!-- Orrery is its own agent: the brand mark (ORRERY_LOGO), not a drawn glyph -->\n <orr-logo [size]=\"size() * 0.7\" aria-hidden=\"true\" />\n } @else if (path(); as d) {\n <svg [attr.width]=\"size() * 0.7\" [attr.height]=\"size() * 0.7\" viewBox=\"0 0 24 24\" fill=\"currentColor\" style=\"display:block\" aria-hidden=\"true\"><path [attr.d]=\"d\" /></svg>\n } @else {\n {{ glyph() }}\n }\n `,\n})\nexport class OrrToolBadgeComponent {\n readonly tool = input.required<string>();\n readonly size = input(16, { transform: numberAttribute });\n readonly accent = computed(() => (KNOWN.has(this.tool()) ? `var(--tool-${this.tool()})` : \"var(--ink-3)\"));\n readonly path = computed(() => TOOL_ICONS[this.tool()] ?? null);\n readonly glyph = computed(() => TOOL_GLYPHS[this.tool()] ?? (this.tool()[0] ?? \"?\").toUpperCase());\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n afterNextRender,\n booleanAttribute,\n contentChildren,\n inject,\n input,\n signal,\n output,\n} from \"@angular/core\";\nimport { KjButtonComponent, KjDialogComponent, KjSheetComponent, KjSheetRef } from \"@kouji-ui/components\";\nimport { KjDialogRef } from \"@kouji-ui/core\";\n\nimport { OrrIconComponent } from \"../icon/icon.component\";\n\n/** Marks content for the dialog / sheet head, right-aligned before the close button. */\n@Directive({ selector: \"[orrDialogActions]\", standalone: true })\nexport class OrrDialogActionsDirective {}\n\n/** Marks content drawn inline after the dialog title, on its row (e.g. the file and position of a review). */\n@Directive({ selector: \"[orrDialogTitle]\", standalone: true })\nexport class OrrDialogTitleDirective {}\n\n/** Marks content for the dialog / sheet foot (the actions row, right-aligned). */\n@Directive({ selector: \"[orrDialogFoot]\", standalone: true })\nexport class OrrDialogFootDirective {}\n\nlet dialogSeq = 0;\n\n/**\n * The dialog role an outer element already declares around `host` (a component that sets `role=dialog`\n * on its own host), named by `titleId` when it has no name; null when none does, and the shell's own\n * panel is the dialog. kouji's `KjDialogService` gives no element the role, so the panel carries it.\n */\nexport function outerDialog(host: HTMLElement, titleId: string): Element | null {\n const outer = host.parentElement?.closest(\"[role=dialog],[role=alertdialog]\") ?? null;\n if (outer && !outer.hasAttribute(\"aria-label\") && !outer.hasAttribute(\"aria-labelledby\")) outer.setAttribute(\"aria-labelledby\", titleId);\n return outer;\n}\n\n/** Why a shell closed itself: its × button. Esc and the scrim are kouji's overlay. */\nexport type DialogCloseReason = \"button\";\n\n/**\n * The dialog panel (`.o-dialog`) inside kouji's `<kj-dialog-shell>`: head (icon, title + sub, your\n * `[orrDialogActions]` right-aligned, × at the far right), body, and `[orrDialogFoot]`. Open the\n * component that uses it with kouji's `KjDialogService.open(…)`; the overlay gives the scrim, Esc,\n * the focus trap and the return focus. × closes the `KjDialogRef` and emits `closed`.\n *\n * ```html\n * <orr-dialog-shell heading=\"New session\" icon=\"plus\" size=\"md\" (closed)=\"…\">\n * <kj-button orrDialogActions kjVariant=\"ghost\" kjSize=\"sm\">Help</kj-button>\n * …body…\n * <kj-button orrDialogFoot kjVariant=\"outline\">Cancel</kj-button>\n * </orr-dialog-shell>\n * ```\n */\n@Component({\n selector: \"orr-dialog-shell\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [KjDialogComponent, KjButtonComponent, OrrIconComponent],\n host: { style: \"display:contents\" },\n template: `\n <kj-dialog-shell>\n <div class=\"o-dialog o-dialog--{{ size() }}\" [attr.role]=\"ownRole() ? (tone() === 'danger' ? 'alertdialog' : 'dialog') : null\" [attr.aria-modal]=\"ownRole() ? 'true' : null\" [attr.aria-labelledby]=\"titleId\">\n <div class=\"o-dialog__head\">\n @if (icon(); as i) {\n <span class=\"o-dialog__ico\" [class.o-dialog__ico--danger]=\"tone() === 'danger'\"><orr-icon [name]=\"i\" size=\"sm\" /></span>\n }\n <span style=\"flex:1;min-width:0;display:flex;flex-direction:column\">\n @if (inline().length) {\n <span style=\"display:flex;align-items:baseline;gap:var(--sp-4);min-width:0;white-space:nowrap\">\n <span class=\"o-dialog__title\" style=\"flex:none\" [id]=\"titleId\">{{ heading() }}</span>\n <ng-content select=\"[orrDialogTitle]\" />\n </span>\n } @else {\n <span class=\"o-dialog__title\" [id]=\"titleId\">{{ heading() }}</span>\n }\n @if (sub()) { <span class=\"o-dialog__sub\">{{ sub() }}</span> }\n </span>\n <ng-content select=\"[orrDialogActions]\" />\n @if (closable()) {\n <kj-button class=\"o-dialog__close\" kjVariant=\"ghost\" kjSize=\"icon\" [kjAriaLabel]=\"closeLabel()\" (click)=\"close()\">\n <orr-icon name=\"x\" size=\"sm\" />\n </kj-button>\n }\n </div>\n <div class=\"o-dialog__body\"><ng-content /></div>\n <div class=\"o-dialog__foot\" [hidden]=\"!foot().length\"><ng-content select=\"[orrDialogFoot]\" /></div>\n </div>\n </kj-dialog-shell>\n `,\n})\nexport class OrrDialogShellComponent {\n readonly heading = input(\"\");\n readonly sub = input(\"\");\n readonly icon = input<string | null>(null);\n readonly tone = input<\"default\" | \"danger\">(\"default\");\n /** sm 480 · md 600 · lg 880 · xl 1200. */\n readonly size = input<\"sm\" | \"md\" | \"lg\" | \"xl\">(\"md\");\n readonly closable = input(true, { transform: booleanAttribute });\n readonly closeLabel = input(\"Close\");\n readonly closed = output<DialogCloseReason>();\n\n protected readonly foot = contentChildren(OrrDialogFootDirective);\n protected readonly inline = contentChildren(OrrDialogTitleDirective);\n protected readonly titleId = `orr-dialog-title-${(dialogSeq += 1)}`;\n /** The panel is the dialog (role, modal, name) unless an outer element already declares one. */\n protected readonly ownRole = signal(true);\n private readonly ref = inject(KjDialogRef, { optional: true });\n\n constructor() {\n const host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n afterNextRender(() => {\n if (outerDialog(host, this.titleId)) this.ownRole.set(false);\n });\n }\n\n /** Closes the kouji dialog this shell sits in (if any) and emits `closed`. */\n close(): void {\n this.closed.emit(\"button\");\n this.ref?.close();\n }\n}\n\n/**\n * The phone bottom sheet (`.o-sheet`) inside kouji's `<kj-sheet-shell>`: grab handle, title, × at\n * thumb size, body, `[orrDialogFoot]` (buttons share the width). Open with kouji's `KjSheetService`.\n */\n@Component({\n selector: \"orr-sheet-shell\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [KjSheetComponent, KjButtonComponent, OrrIconComponent],\n host: { style: \"display:contents\" },\n template: `\n <kj-sheet-shell>\n <div class=\"o-sheet\" role=\"dialog\" aria-modal=\"true\" [attr.aria-label]=\"heading() || null\">\n <div class=\"o-sheet__head\">\n <span class=\"o-sheet__title\">{{ heading() }}</span>\n <ng-content select=\"[orrDialogActions]\" />\n @if (closable()) {\n <kj-button kjVariant=\"ghost\" kjSize=\"icon\" style=\"width:var(--tap);height:var(--tap)\" [kjAriaLabel]=\"closeLabel()\" (click)=\"close()\">\n <orr-icon name=\"x\" size=\"md\" />\n </kj-button>\n }\n </div>\n <div class=\"o-sheet__body\"><ng-content /></div>\n <div class=\"o-sheet__foot\" [hidden]=\"!foot().length\"><ng-content select=\"[orrDialogFoot]\" /></div>\n </div>\n </kj-sheet-shell>\n `,\n})\nexport class OrrSheetShellComponent {\n readonly heading = input(\"\");\n readonly closable = input(true, { transform: booleanAttribute });\n readonly closeLabel = input(\"Close\");\n readonly closed = output<DialogCloseReason>();\n\n protected readonly foot = contentChildren(OrrDialogFootDirective);\n private readonly ref = inject(KjSheetRef, { optional: true });\n\n close(): void {\n this.closed.emit(\"button\");\n this.ref?.close();\n }\n}\n","import { ChangeDetectionStrategy, Component, Directive, booleanAttribute, computed, contentChildren, input, numberAttribute, output } from \"@angular/core\";\n\nimport { OrrIconComponent } from \"../icon/icon.component\";\nimport { OrrKbdComponent } from \"../status/kbd.component\";\n\n/** Marks content for a card's head, right-aligned (`<orr-pill orrCardActions …>`). */\n@Directive({ selector: \"[orrCardActions]\", standalone: true })\nexport class OrrCardActionsDirective {}\n\n/** Marks content for a card's foot. */\n@Directive({ selector: \"[orrCardFoot]\", standalone: true })\nexport class OrrCardFootDirective {}\n\n/** `<orr-card heading=\"Machine\" icon=\"server\">…</orr-card>`: a `--panel` card (`.o-card`). */\n@Component({\n selector: \"orr-card\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [OrrIconComponent],\n host: { class: \"o-card\", \"[class.o-card--hover]\": \"hover()\", \"[attr.aria-selected]\": \"selected() ? 'true' : null\" },\n template: `\n <header class=\"o-card__head\" [hidden]=\"!heading() && !actions().length\">\n @if (icon(); as i) { <orr-icon [name]=\"i\" size=\"sm\" /> }\n <span class=\"o-card__title\">{{ heading() }}</span>\n <ng-content select=\"[orrCardActions]\" />\n </header>\n <div class=\"o-card__body\"><ng-content /></div>\n <footer class=\"o-card__foot\" [hidden]=\"!foot().length\"><ng-content select=\"[orrCardFoot]\" /></footer>\n `,\n})\nexport class OrrCardComponent {\n readonly heading = input(\"\");\n readonly icon = input<string | null>(null);\n readonly selected = input(false, { transform: booleanAttribute });\n /** Hover ring for a clickable card. */\n readonly hover = input(false, { transform: booleanAttribute });\n protected readonly actions = contentChildren(OrrCardActionsDirective);\n protected readonly foot = contentChildren(OrrCardFootDirective);\n}\n\n/**\n * `<orr-row label=\"Density\" config=\"ui.density\" hint=\"…\"><orr-seg …/></orr-row>`: one setting\n * (`.o-set-row`): label (`--ink`, medium), its config key (mono, `--ink-4`), the hint (`--ink-3`)\n * on the left; the control (projected) on the right, or under it with `wide`.\n */\n@Component({\n selector: \"orr-row\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: \"o-set-row\", \"[class.o-set-row--wide]\": \"wide()\", \"[class.o-set-row--dis]\": \"disabled()\", \"[attr.aria-disabled]\": \"disabled() ? 'true' : null\" },\n template: `\n <div class=\"o-set-row__text\">\n <span class=\"o-set-row__label\">{{ label() }}@if (config()) {<span class=\"o-set-row__key\">{{ config() }}</span>}</span>\n @if (hint()) { <span class=\"o-set-row__hint\">{{ hint() }}</span> }\n <ng-content select=\"[orrRowHint]\" />\n </div>\n <div class=\"o-set-row__ctl\"><ng-content /></div>\n `,\n})\nexport class OrrSettingRowComponent {\n readonly label = input.required<string>();\n readonly hint = input(\"\");\n /** The `config.toml` key this setting writes (decision 0003: both routes, always). */\n readonly config = input(\"\");\n readonly wide = input(false, { transform: booleanAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n}\n\n/** `<orr-set-group heading=\"Appearance\">…rows…</orr-set-group>`: a ruled settings section. */\n@Component({\n selector: \"orr-set-group\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: \"o-set-group\", role: \"group\", \"[attr.aria-label]\": \"heading() || null\" },\n template: `@if (heading()) {<h3 class=\"o-set-group__head\">{{ heading() }}</h3>}<ng-content />`,\n})\nexport class OrrSettingGroupComponent {\n readonly heading = input(\"\");\n}\n\n/** Marks the empty state's action buttons. */\n@Directive({ selector: \"[orrEmptyAction]\", standalone: true })\nexport class OrrEmptyActionDirective {}\n\n/**\n * `<orr-empty icon=\"layers\" heading=\"No sessions\">Start one from …</orr-empty>`: an empty state\n * (`.o-empty`) that says what to do; `line` is the one-row form inside a list.\n */\n@Component({\n selector: \"orr-empty\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [OrrIconComponent],\n host: { class: \"o-empty\", \"[class.o-empty--line]\": \"line()\", role: \"status\" },\n template: `\n @if (!line() && icon(); as i) { <span class=\"o-empty__ico\"><orr-icon [name]=\"i\" size=\"lg\" /></span> }\n @if (!line() && heading()) { <span class=\"o-empty__title\">{{ heading() }}</span> }\n <span class=\"o-empty__body\"><ng-content /></span>\n <span class=\"o-empty__action\" [hidden]=\"!action().length\"><ng-content select=\"[orrEmptyAction]\" /></span>\n `,\n})\nexport class OrrEmptyComponent {\n readonly icon = input<string | null>(null);\n readonly heading = input(\"\");\n readonly line = input(false, { transform: booleanAttribute });\n protected readonly action = contentChildren(OrrEmptyActionDirective);\n}\n\n/** `<orr-skeleton [lines]=\"3\" />`: shimmering placeholder lines (`.o-skel`); the last of several is shorter. */\n@Component({\n selector: \"orr-skeleton\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { role: \"status\", \"[attr.aria-label]\": \"label()\", style: \"display:block\" },\n template: `@for (l of rows(); track $index) {<span class=\"o-skel o-skel--line\" [class.o-skel--circle]=\"circle()\" [style.width]=\"w() || null\" [style.height]=\"h() || null\"></span>}`,\n})\nexport class OrrSkeletonComponent {\n readonly lines = input(1, { transform: numberAttribute });\n readonly w = input(\"\");\n readonly h = input(\"\");\n readonly circle = input(false, { transform: booleanAttribute });\n readonly label = input(\"Loading\");\n readonly rows = computed(() => Array.from({ length: Math.max(1, this.lines() || 1) }));\n}\n\n/** `<orr-spinner size=\"sm\" />`: the ring spinner (`.o-spin`) in `currentColor`. */\n@Component({\n selector: \"orr-spinner\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { role: \"status\", \"[class]\": \"cls()\", \"[attr.aria-label]\": \"label()\" },\n template: \"\",\n})\nexport class OrrSpinnerComponent {\n readonly size = input<\"sm\" | \"md\" | \"lg\">(\"md\");\n readonly label = input(\"Loading\");\n readonly cls = computed(() => \"o-spin\" + (this.size() !== \"md\" ? \" o-spin--\" + this.size() : \"\"));\n}\n\n/**\n * `<orr-search-pill label=\"Search\" keys=\"Ctrl K\" (activate)=\"openPalette()\" />`: the top-bar search\n * trigger (`.o-search-trigger`): icon, label, and the shortcut as an inline hint.\n */\n@Component({\n selector: \"orr-search-pill\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [OrrIconComponent, OrrKbdComponent],\n host: { style: \"display:inline-flex\" },\n template: `\n <button type=\"button\" class=\"o-search-trigger\" [attr.aria-label]=\"(label() || 'Search') + (keys() ? ' (' + keys() + ')' : '')\" (click)=\"activate.emit()\">\n <orr-icon [name]=\"icon()\" size=\"sm\" />\n @if (label()) { <span>{{ label() }}</span> }\n @if (keys()) { <orr-kbd [keys]=\"keys()\" [inline]=\"true\" /> }\n </button>\n `,\n})\nexport class OrrSearchPillComponent {\n readonly label = input(\"Search\");\n readonly keys = input(\"Ctrl K\");\n readonly icon = input(\"search\");\n readonly activate = output<void>();\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, inject, input, output, signal } from \"@angular/core\";\n\n/**\n * `<orr-pane-resizer side=\"right\" [width]=\"w\" (widthChange)=\"w = $event\" (reset)=\"w = 300\" />`: the drag\n * handle on a side column's inner edge (the ADE's `app-pane-resizer`, shared). It owns the gesture only;\n * the host keeps the width. `side` is where the column sits: a right-hand column grows as the pointer\n * moves left. ← → nudge it by 16px, double-click asks for the host's default.\n */\n@Component({\n selector: \"orr-pane-resizer\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<span class=\"grip\"></span>`,\n host: {\n class: \"orr-pane-resizer\",\n \"[class.dragging]\": \"dragging()\",\n role: \"separator\",\n \"aria-orientation\": \"vertical\",\n \"[attr.aria-valuenow]\": \"width()\",\n \"[attr.aria-valuemin]\": \"min()\",\n \"[attr.aria-valuemax]\": \"max()\",\n \"[attr.aria-label]\": \"label()\",\n tabindex: \"0\",\n title: \"Drag to resize · double-click to reset\",\n \"(pointerdown)\": \"startDrag($event)\",\n \"(dblclick)\": \"reset.emit()\",\n \"(keydown.arrowLeft)\": \"nudge(-16, $event)\",\n \"(keydown.arrowRight)\": \"nudge(16, $event)\",\n },\n styles: [\n `\n :host { position: relative; flex: 0 0 5px; margin: 0 -2px; z-index: 2; cursor: col-resize; display: grid; place-items: center; touch-action: none; }\n .grip { width: 1px; height: 100%; background: transparent; transition: background 0.13s ease; }\n :host(:hover) .grip, :host(:focus-visible) .grip, :host(.dragging) .grip { width: 2px; background: var(--accent); }\n :host(:focus-visible) { outline: none; }\n `,\n ],\n})\nexport class OrrPaneResizerComponent {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n /** The column's width in px: a drag starts from it. */\n readonly width = input.required<number>();\n readonly min = input(220);\n readonly max = input(640);\n /** Where the column sits beside the handle. */\n readonly side = input<\"left\" | \"right\">(\"left\");\n readonly label = input(\"Resize the panel\");\n\n /** The clamped width, on every pointer move and nudge. */\n readonly widthChange = output<number>();\n /** Double-click: the host's default. */\n readonly reset = output<void>();\n\n readonly dragging = signal(false);\n\n startDrag(ev: PointerEvent): void {\n if (ev.button !== 0) return;\n ev.preventDefault();\n this.dragging.set(true);\n const body = document.body.style;\n const before = { cursor: body.cursor, select: body.userSelect };\n body.cursor = \"col-resize\";\n body.userSelect = \"none\";\n const startX = ev.clientX;\n const startW = this.width();\n const dir = this.side() === \"right\" ? -1 : 1;\n this.host.setPointerCapture?.(ev.pointerId);\n const move = (e: PointerEvent) => this.emit(startW + dir * (e.clientX - startX));\n const up = (e: PointerEvent) => {\n this.dragging.set(false);\n body.cursor = before.cursor;\n body.userSelect = before.select;\n this.host.releasePointerCapture?.(e.pointerId);\n window.removeEventListener(\"pointermove\", move);\n window.removeEventListener(\"pointerup\", up);\n };\n window.addEventListener(\"pointermove\", move);\n window.addEventListener(\"pointerup\", up);\n }\n\n /** The keyboard route: ← → move the edge, whichever side the column is on. */\n nudge(by: number, ev: Event): void {\n ev.preventDefault();\n this.emit(this.width() + (this.side() === \"right\" ? -by : by));\n }\n\n private emit(next: number): void {\n this.widthChange.emit(Math.min(this.max(), Math.max(this.min(), Math.round(next))));\n }\n}\n","import { ChangeDetectionStrategy, Component, booleanAttribute, computed, input, model } from \"@angular/core\";\nimport { KjOptionComponent, KjOptionGroup, KjSelectComponent, KjTabComponent, KjTabListComponent, KjTabsComponent } from \"@kouji-ui/components\";\n\nimport { OrrIconComponent } from \"../icon/icon.component\";\n\nexport interface SelectOption {\n value: string;\n label: string;\n}\n\n/** A titled cluster of options (the `<optgroup>` role). */\nexport interface SelectGroup {\n label: string;\n options: (string | SelectOption)[];\n /** The heading folds and unfolds the group (Left / Right on the keyboard). */\n collapsible?: boolean;\n /** Starts folded; needs `collapsible`. */\n collapsed?: boolean;\n}\n\nexport interface SelectRun {\n label: string | null;\n options: SelectOption[];\n collapsible?: boolean;\n collapsed?: boolean;\n}\n\n/** From this many options on, `searchable=\"auto\"` shows the search field. */\nexport const SELECT_SEARCH_FROM = 8;\n\nfunction isGroup(o: string | SelectOption | SelectGroup): o is SelectGroup {\n return typeof o !== \"string\" && \"options\" in o;\n}\n\n/** Strings, `{value, label}` pairs and groups, mixed, flattened into runs in their order. */\nexport function selectRuns(options: readonly (string | SelectOption | SelectGroup)[]): SelectRun[] {\n const toOption = (o: string | SelectOption): SelectOption => (typeof o === \"string\" ? { value: o, label: o } : o);\n const out: SelectRun[] = [];\n for (const o of options) {\n if (isGroup(o)) {\n out.push({ label: o.label, options: o.options.map(toOption), collapsible: !!o.collapsible, collapsed: !!o.collapsible && !!o.collapsed });\n continue;\n }\n const tail = out[out.length - 1];\n if (tail && tail.label === null) tail.options.push(toOption(o));\n else out.push({ label: null, options: [toOption(o)] });\n }\n return out;\n}\n\n/**\n * `<orr-select [(value)]=\"model\" [options]=\"opts\" />`: kouji's `<kj-select>` with Orrery's option\n * shapes (from the ADE's `app-select`): strings, `{ value, label }` and `{ label, options }` groups.\n * A long list gets a search field (`searchable`, \"auto\" from SELECT_SEARCH_FROM options on);\n * a group with `collapsible` folds under its heading.\n */\n@Component({\n selector: \"orr-select\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [KjSelectComponent, KjOptionComponent, KjOptionGroup],\n template: `\n <kj-select [kjSize]=\"size()\" [placeholder]=\"placeholder()\" [disabled]=\"disabled()\" [value]=\"value()\" (valueChange)=\"value.set($any($event))\"\n [kjSearchable]=\"search()\" [kjSearchPlaceholder]=\"searchPlaceholder()\" [kjDisplayWith]=\"displayWith()\">\n <span kjSelectEmpty>{{ searchEmpty() }}</span>\n @for (g of runs(); track $index) {\n @if (g.label) {\n <kj-option-group [kjLabel]=\"g.label\" [kjCollapsible]=\"!!g.collapsible\" [kjCollapsed]=\"!!g.collapsed\">\n @for (o of g.options; track o.value) {\n <kj-option [value]=\"o.value\" [kjLabel]=\"o.label\">{{ o.label }}</kj-option>\n }\n </kj-option-group>\n } @else {\n @for (o of g.options; track o.value) {\n <kj-option [value]=\"o.value\" [kjLabel]=\"o.label\">{{ o.label }}</kj-option>\n }\n }\n }\n </kj-select>\n `,\n})\nexport class OrrSelectComponent {\n readonly value = model<string>(\"\");\n readonly options = input<readonly (string | SelectOption | SelectGroup)[]>([]);\n readonly placeholder = input(\"Select…\");\n readonly size = input<\"xs\" | \"sm\" | \"md\" | \"lg\">(\"sm\");\n readonly disabled = input(false);\n /** A search field above the options: always, never, or \"auto\" (from SELECT_SEARCH_FROM options on). */\n readonly searchable = input<boolean | \"auto\">(\"auto\");\n readonly searchPlaceholder = input(\"Search…\");\n /** What the search shows when nothing matches, e.g. \"No matching projects\". */\n readonly searchEmpty = input(\"No matches\");\n /** The closed select's text for a value no option has (an archived agent…); unset: the value itself. */\n readonly displayWith = input<((value: unknown) => string) | null>(null);\n readonly runs = computed(() => selectRuns(this.options()));\n protected readonly search = computed(() => {\n const s = this.searchable();\n return s === \"auto\" ? this.runs().reduce((n, g) => n + g.options.length, 0) >= SELECT_SEARCH_FROM : s;\n });\n}\n\nexport interface SegOption {\n value: string;\n label: string;\n icon?: string;\n title?: string;\n disabled?: boolean;\n}\n\n/**\n * `<orr-seg [(value)]=\"mode\" [options]=\"[{value:'tree',label:'Tree',icon:'git-branch'}, …]\" />`:\n * a segmented switch, drawn by kouji's pill tabs, which @getorrery/styles draws as `.o-seg` (`size=\"xs\"` is the in-pane `.tabs-xs` form).\n * `block` fills the row and shares it between the options (`.o-seg--block`); `size=\"tap\"` is the phone's 36 px\n * option in body text (`.o-seg--tap`): `<orr-seg block size=\"tap\" … />` is PhoneApp-14's Theme switch.\n */\n@Component({\n selector: \"orr-seg\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [KjTabsComponent, KjTabListComponent, KjTabComponent, OrrIconComponent],\n host: { \"[style.display]\": \"block() ? 'flex' : 'inline-flex'\", \"[style.flex-shrink]\": \"0\", \"[style.min-width]\": \"block() ? '0' : null\" },\n template: `\n <kj-tabs variant=\"pills\" [class.tabs-xs]=\"size() === 'xs'\" [class.seg-tap]=\"size() === 'tap'\" [class.seg-block]=\"block()\" [style.width]=\"block() ? '100%' : null\" [value]=\"value()\" (valueChange)=\"value.set($any($event))\">\n <kj-tab-list [attr.aria-label]=\"label()\">\n @for (o of options(); track o.value) {\n <kj-tab [value]=\"o.value\" [disabled]=\"!!o.disabled\" [attr.title]=\"o.title || null\">\n @if (o.icon) { <orr-icon [name]=\"o.icon\" size=\"sm\" [color]=\"o.value === value() ? 'var(--ui-ink)' : null\" /> }{{ o.label }}\n <!-- An icon-only option is named by its title: the tab itself, not only its tooltip wrapper. -->\n @if (!o.label && o.title) { <span class=\"sr-only\">{{ o.title }}</span> }\n </kj-tab>\n }\n </kj-tab-list>\n </kj-tabs>\n `,\n})\nexport class OrrSegComponent {\n readonly value = model<string>(\"\");\n readonly options = input<readonly SegOption[]>([]);\n readonly label = input(\"\");\n readonly size = input<\"xs\" | \"sm\" | \"tap\">(\"sm\");\n /** Fill the row: the options share its width. */\n readonly block = input(false, { transform: booleanAttribute });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n contentChildren,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n} from \"@angular/core\";\n\n/**\n * `<orr-choices [(value)]=\"where\" label=\"Run on\"><orr-choice value=\"desk\">…</orr-choice></orr-choices>`:\n * a radio group drawn as cards (`.o-choices > .o-choice[aria-checked]`, CloudApp-00 \"Run on\"). `card` is the\n * stacked size card (`.o-choice--card`: title row, spec, note on `--panel-2`; selected = accent border + ring).\n * The whole card is the radio: click or Space picks it; ← → ↑ ↓ Home End move and pick, roving focus.\n * `columns` sets the grid (default 2). Content is the card's own: `.o-choice__text`, `__title`, `__sub` help.\n */\n@Component({\n selector: \"orr-choices\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"o-choices\",\n role: \"radiogroup\",\n \"[class.o-choices--card]\": \"card()\",\n \"[attr.aria-label]\": \"label() || null\",\n \"[style.--n]\": \"columns()\",\n \"(keydown)\": \"onKey($event)\",\n },\n template: `<ng-content />`,\n})\nexport class OrrChoicesComponent {\n readonly value = model<string | null>(null);\n readonly label = input(\"\");\n readonly columns = input(2, { transform: numberAttribute });\n /** The stacked card form (the instance sizes). */\n readonly card = input(false, { transform: booleanAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n\n private readonly options = contentChildren(forwardRef(() => OrrChoiceComponent), { descendants: true });\n /** The option that holds the tab stop: the chosen one, else the first enabled. */\n readonly tabStop = computed(() => {\n const opts = this.options().filter((o) => !o.off());\n return (opts.find((o) => o.value() === this.value()) ?? opts[0])?.value() ?? null;\n });\n\n pick(v: string): void {\n if (this.disabled()) return;\n this.value.set(v);\n }\n\n protected onKey(e: KeyboardEvent): void {\n const opts = this.options().filter((o) => !o.off());\n if (!opts.length) return;\n const at = opts.findIndex((o) => o.host.nativeElement === document.activeElement);\n let i: number;\n switch (e.key) {\n case \"ArrowRight\":\n case \"ArrowDown\":\n i = at < 0 ? 0 : (at + 1) % opts.length;\n break;\n case \"ArrowLeft\":\n case \"ArrowUp\":\n i = at < 0 ? 0 : (at - 1 + opts.length) % opts.length;\n break;\n case \"Home\":\n i = 0;\n break;\n case \"End\":\n i = opts.length - 1;\n break;\n default:\n return;\n }\n e.preventDefault();\n const o = opts[i]!;\n this.pick(o.value());\n o.host.nativeElement.focus();\n }\n}\n\n/** One card of `<orr-choices>`: `value`, `disabled`; the content is the card. */\n@Component({\n selector: \"orr-choice\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"o-choice\",\n role: \"radio\",\n \"[class.o-choice--card]\": \"group.card()\",\n \"[attr.aria-checked]\": \"checked()\",\n \"[attr.aria-disabled]\": \"off() || null\",\n \"[attr.tabindex]\": \"off() ? -1 : group.tabStop() === value() ? 0 : -1\",\n \"(click)\": \"choose()\",\n \"(keydown.space)\": \"$event.preventDefault(); choose()\",\n \"(keydown.enter)\": \"$event.preventDefault(); choose()\",\n },\n template: `<ng-content />`,\n})\nexport class OrrChoiceComponent {\n readonly value = input.required<string>();\n readonly disabled = input(false, { transform: booleanAttribute });\n\n protected readonly group = inject(OrrChoicesComponent);\n readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly checked = computed(() => this.group.value() === this.value());\n readonly off = computed(() => this.disabled() || this.group.disabled());\n\n protected choose(): void {\n if (this.off()) return;\n this.group.pick(this.value());\n }\n}\n","/**\n * The one model behind every changed-file list (working tree, a commit, a compare, a session): rows\n * for a tree or a flat list. Folders carry the aggregate of everything below them (±lines, and the\n * state when every descendant shares one), single-child folder chains collapse into one row\n * (`src/webhooks`), folders sort before files, both alphabetically.\n */\n\n/** A changed file. `status` is the VCS letter: A M D R C U ? ! (M when unset; `\"\"` = unchanged, no letter: a file browser). */\nexport interface ChangedFile {\n path: string;\n status?: string;\n add?: number;\n del?: number;\n /** R: the path before the move. */\n from?: string;\n}\n\nexport type FileListMode = \"tree\" | \"flat\";\n\n/** Same file row data (path, letter, counts, rename source). */\nexport function sameChangedFile(a: ChangedFile, b: ChangedFile): boolean {\n return a === b || (a.path === b.path && a.status === b.status && a.add === b.add && a.del === b.del && a.from === b.from);\n}\n\n/**\n * Two file lists with the same rows, in the same order. A host that rebuilds its list on every\n * poll or stream frame hands the list an equal array: with this as a signal's `equal`, nothing\n * downstream recomputes and no row re-renders.\n */\nexport function sameChangedFiles(a: readonly ChangedFile[], b: readonly ChangedFile[]): boolean {\n if (a === b) return true;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (!sameChangedFile(a[i]!, b[i]!)) return false;\n return true;\n}\n\n/** Same visible rows (what `fileRows` gives): the list's `@for` then has nothing to update. */\nexport function sameRows(a: readonly FileRow[], b: readonly FileRow[]): boolean {\n if (a === b) return true;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n const x = a[i]!;\n const y = b[i]!;\n if (x.kind !== y.kind || x.path !== y.path || x.name !== y.name || x.depth !== y.depth || x.dir !== y.dir || x.state !== y.state || x.add !== y.add || x.del !== y.del) return false;\n if ((x.file || y.file) && !(x.file && y.file && sameChangedFile(x.file, y.file))) return false;\n }\n return true;\n}\n\nexport interface FileRow {\n kind: \"dir\" | \"file\";\n /** Folder rows: the deepest folder of a collapsed chain. */\n path: string;\n /** What the row shows: a file name, a folder chain (`src/webhooks`), or in flat mode the file name. */\n name: string;\n depth: number;\n /** Files: the parent folder (flat mode shows it after the name). */\n dir: string;\n file?: ChangedFile;\n /** Files: their letter (M when unset). Folders: the uniform letter of everything below, or \"\". */\n state: string;\n add: number;\n del: number;\n}\n\ninterface Dir {\n name: string;\n path: string;\n dirs: Map<string, Dir>;\n files: { name: string; f: ChangedFile }[];\n}\n\nconst parentOf = (p: string) => {\n const i = p.lastIndexOf(\"/\");\n return i > 0 ? p.slice(0, i) : \"\";\n};\n\n/** The visible rows: folders collapsed in `collapsed` hide what is under them. */\nexport function fileRows(files: readonly ChangedFile[], mode: FileListMode = \"tree\", collapsed: ReadonlySet<string> = new Set()): FileRow[] {\n if (mode === \"flat\") {\n return files.map((f) => ({\n kind: \"file\",\n path: f.path,\n name: f.path.slice(f.path.lastIndexOf(\"/\") + 1),\n depth: 0,\n dir: parentOf(f.path),\n file: f,\n state: f.status ?? \"M\",\n add: f.add ?? 0,\n del: f.del ?? 0,\n }));\n }\n const root: Dir = { name: \"\", path: \"\", dirs: new Map(), files: [] };\n for (const f of files) {\n const parts = f.path.split(\"/\");\n let node = root;\n parts.slice(0, -1).forEach((p, i) => {\n if (!node.dirs.has(p)) node.dirs.set(p, { name: p, path: parts.slice(0, i + 1).join(\"/\"), dirs: new Map(), files: [] });\n node = node.dirs.get(p)!;\n });\n node.files.push({ name: parts[parts.length - 1]!, f });\n }\n const out: FileRow[] = [];\n const all = (n: Dir): ChangedFile[] => [...n.files.map((x) => x.f), ...[...n.dirs.values()].flatMap(all)];\n const walk = (node: Dir, depth: number) => {\n for (const d of [...node.dirs.values()].sort((a, b) => a.name.localeCompare(b.name))) {\n let dd = d;\n let name = d.name;\n while (dd.files.length === 0 && dd.dirs.size === 1) {\n dd = dd.dirs.values().next().value!;\n name += \"/\" + dd.name;\n }\n const below = all(dd);\n const states = new Set(below.filter((x) => x.status !== \"\").map((x) => x.status ?? \"M\"));\n out.push({\n kind: \"dir\",\n path: dd.path,\n name,\n depth,\n dir: parentOf(d.path),\n state: states.size === 1 ? [...states][0]! : \"\",\n add: below.reduce((t, x) => t + (x.add ?? 0), 0),\n del: below.reduce((t, x) => t + (x.del ?? 0), 0),\n });\n if (!collapsed.has(dd.path)) walk(dd, depth + 1);\n }\n for (const x of [...node.files].sort((a, b) => a.name.localeCompare(b.name))) {\n out.push({ kind: \"file\", path: x.f.path, name: x.name, depth, dir: parentOf(x.f.path), file: x.f, state: x.f.status ?? \"M\", add: x.f.add ?? 0, del: x.f.del ?? 0 });\n }\n };\n walk(root, 0);\n return out;\n}\n\n/** The files in the order the tree shows them (all folders open): what next / previous file walk. */\nexport function fileOrder(files: readonly ChangedFile[], mode: FileListMode = \"tree\"): string[] {\n return fileRows(files, mode).filter((r) => r.kind === \"file\").map((r) => r.path);\n}\n\nexport type TreeKey = \"ArrowDown\" | \"ArrowUp\" | \"Home\" | \"End\" | \"ArrowRight\" | \"ArrowLeft\" | \"Enter\" | \" \";\n\n/** What a key does on the focused row: move the focus, toggle a folder, or open a file. */\nexport type TreeMove = { focus: string } | { toggle: string } | { open: string } | null;\n\n/** The tree's keyboard model, pure: ↑ ↓ Home End move, → opens / steps in, ← closes / goes to the parent, Enter / Space opens. */\nexport function treeKey(rows: readonly FileRow[], focus: string | null, key: string, collapsed: ReadonlySet<string>): TreeMove {\n if (!rows.length) return null;\n const i = Math.max(0, rows.findIndex((r) => r.path === focus));\n const r = rows[i]!;\n const at = (j: number) => (j >= 0 && j < rows.length ? { focus: rows[j]!.path } : null);\n switch (key) {\n case \"ArrowDown\":\n return at(focus === null ? 0 : i + 1);\n case \"ArrowUp\":\n return at(i - 1);\n case \"Home\":\n return at(0);\n case \"End\":\n return at(rows.length - 1);\n case \"ArrowRight\":\n return r.kind === \"dir\" && collapsed.has(r.path) ? { toggle: r.path } : at(i + 1);\n case \"ArrowLeft\":\n if (r.kind === \"dir\" && !collapsed.has(r.path)) return { toggle: r.path };\n for (let j = i - 1; j >= 0; j--) if (rows[j]!.kind === \"dir\" && rows[j]!.depth < r.depth) return at(j);\n return null;\n case \"Enter\":\n case \" \":\n return r.kind === \"dir\" ? { toggle: r.path } : { open: r.path };\n default:\n return null;\n }\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, booleanAttribute, computed, inject, input, model, output, signal } from \"@angular/core\";\n\nimport { OrrSegComponent, type SegOption } from \"../controls/controls.components\";\nimport { OrrIconComponent } from \"../icon/icon.component\";\nimport { OrrAddDelComponent, OrrStateComponent, VCS_STATE_NAMES } from \"../status/status.components\";\nimport { type ChangedFile, type FileListMode, type FileRow, fileRows, sameChangedFiles, sameRows, treeKey } from \"./file-tree\";\n\nconst MODES: SegOption[] = [\n { value: \"tree\", label: \"\", icon: \"git-branch\", title: \"Tree view\" },\n { value: \"flat\", label: \"\", icon: \"menu\", title: \"Flat view\" },\n];\n\n/**\n * `<orr-filetree [files]=\"files\" [(selected)]=\"path\" [(mode)]=\"mode\" />`: the changed-file list\n * (`.o-changes`, the ADE's diff-file-list). Head: `heading · N`, the ±total, the Tree / Flat switch.\n * Rows: the VCS letter (`--vcs-*`), the name (flat: + its folder, or `← from` for a rename), ±counts;\n * folders aggregate and collapse. Keys inside the list: ↑ ↓ Home End move, ← → fold, Enter / Space open.\n */\n@Component({\n selector: \"orr-filetree\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [OrrIconComponent, OrrStateComponent, OrrAddDelComponent, OrrSegComponent],\n host: { class: \"o-changes\" },\n template: `\n @if (head()) {\n <div class=\"o-changes__head\">\n <span class=\"o-changes__title\">{{ heading() }} · {{ list().length }}</span>\n <orr-addel [add]=\"totalAdd()\" [del]=\"totalDel()\" />\n @if (toggle()) {\n <orr-seg style=\"margin-left:auto\" size=\"xs\" label=\"File list layout\" [options]=\"modes\" [value]=\"mode()\" (valueChange)=\"setMode($any($event))\" />\n }\n <ng-content select=\"[orrTreeActions]\" />\n </div>\n }\n <div class=\"o-changes__list\" role=\"tree\" tabindex=\"0\" [attr.aria-label]=\"label()\" (keydown)=\"onKey($event)\">\n @for (r of rows(); track r.path) {\n @if (r.kind === 'dir') {\n <div class=\"o-changes__row o-changes__row--dir\" role=\"treeitem\" [class.o-changes__row--gone]=\"r.state === 'D'\"\n [attr.aria-expanded]=\"!collapsed().has(r.path)\" [attr.aria-level]=\"r.depth + 1\" [attr.data-path]=\"r.path\"\n [attr.data-focus]=\"r.path === focusPath() ? '' : null\" [style.padding-left.px]=\"8 + r.depth * 13\" (click)=\"toggleDir(r.path)\">\n <orr-icon class=\"o-changes__ico\" [name]=\"collapsed().has(r.path) ? 'chevron-right' : 'chevron-down'\" size=\"sm\" />\n <orr-icon class=\"o-changes__ico\" [name]=\"collapsed().has(r.path) ? 'folder' : 'folder-open'\" size=\"sm\" />\n <span class=\"o-changes__dname\">{{ r.name }}</span>\n @if (r.state) { <orr-state [state]=\"r.state\" /> }\n <span class=\"o-changes__counts\"><orr-addel [add]=\"r.add\" [del]=\"r.del\" /></span>\n </div>\n } @else {\n <div class=\"o-changes__row\" role=\"treeitem\" [attr.aria-selected]=\"r.path === selected()\" [attr.aria-level]=\"r.depth + 1\"\n [attr.data-path]=\"r.path\" [attr.data-status]=\"r.state\" [attr.data-focus]=\"r.path === focusPath() ? '' : null\"\n [style.padding-left.px]=\"mode() === 'flat' ? null : 12 + r.depth * 13\" (click)=\"open(r.path)\">\n @if (r.state) { <orr-state [state]=\"r.state\" /> }\n <span class=\"o-changes__name\" [attr.title]=\"r.state ? r.path + ' · ' + stateName(r.state) : r.path\">{{ r.name }}</span>\n @if (mode() === 'flat') {\n @if (r.state === 'R' && r.file?.from) {\n <span class=\"o-changes__dir o-changes__dir--from\">← {{ r.file.from }}</span>\n } @else if (r.dir) {\n <span class=\"o-changes__dir\">{{ r.dir }}</span>\n }\n }\n <span class=\"o-changes__counts\"><orr-addel [add]=\"r.add\" [del]=\"r.del\" /></span>\n </div>\n }\n } @empty {\n <div class=\"o-changes__empty\">{{ emptyText() }}</div>\n }\n </div>\n `,\n})\nexport class OrrFileTreeComponent {\n readonly files = input<readonly ChangedFile[]>([]);\n /** The open file. Two-way: a click, Enter or Space sets it. */\n readonly selected = model<string | null>(null);\n readonly mode = model<FileListMode>(\"tree\");\n readonly heading = input(\"Changed\");\n readonly label = input(\"Changed files\");\n readonly emptyText = input(\"No changes\");\n /** Show the head row (title, totals, switch). */\n readonly head = input(true, { transform: booleanAttribute });\n /** Show the Tree / Flat switch in the head. */\n readonly toggle = input(true, { transform: booleanAttribute });\n /** A file was opened (click, Enter, Space), also when it already was the selected one. */\n readonly fileOpen = output<string>();\n\n protected readonly modes = MODES;\n readonly collapsed = signal<ReadonlySet<string>>(new Set());\n private readonly focus = signal<string | null>(null);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n /** `files`, held while a new array carries the same rows: a host's poll or stream frame re-renders nothing. */\n protected readonly list = computed(() => this.files(), { equal: sameChangedFiles });\n readonly rows = computed<FileRow[]>(() => fileRows(this.list(), this.mode(), this.collapsed()), { equal: sameRows });\n readonly totalAdd = computed(() => this.list().reduce((t, f) => t + (f.add ?? 0), 0));\n readonly totalDel = computed(() => this.list().reduce((t, f) => t + (f.del ?? 0), 0));\n /** The keyboard focus row: the last one moved to, else the selection, else the first row. */\n readonly focusPath = computed(() => {\n const rows = this.rows();\n const f = this.focus();\n if (f !== null && rows.some((r) => r.path === f)) return f;\n const s = this.selected();\n if (s !== null && rows.some((r) => r.path === s)) return s;\n return rows[0]?.path ?? null;\n });\n\n protected stateName(s: string): string {\n return VCS_STATE_NAMES[s] ?? s;\n }\n\n setMode(m: FileListMode): void {\n this.mode.set(m);\n }\n\n toggleDir(path: string): void {\n this.focus.set(path);\n const next = new Set(this.collapsed());\n if (next.has(path)) next.delete(path);\n else next.add(path);\n this.collapsed.set(next);\n }\n\n open(path: string): void {\n this.focus.set(path);\n this.selected.set(path);\n this.fileOpen.emit(path);\n }\n\n onKey(e: KeyboardEvent): void {\n if (e.ctrlKey || e.metaKey || e.altKey) return;\n const move = treeKey(this.rows(), this.focusPath(), e.key, this.collapsed());\n if (!move) return;\n e.preventDefault();\n e.stopPropagation();\n if (\"focus\" in move) {\n this.focus.set(move.focus);\n queueMicrotask(() => this.host.querySelector(\"[data-focus]\")?.scrollIntoView?.({ block: \"nearest\" }));\n } else if (\"toggle\" in move) this.toggleDir(move.toggle);\n else this.open(move.open);\n }\n}\n","/**\n * Diff lines for `<orr-diff>`: parsed from unified diff text, or computed from the two sides of a\n * file (line LCS, from the ADE's session-changes). `a` is the old line number, `b` the new one.\n */\n\nexport type DiffLineKind = \"add\" | \"del\" | \"ctx\" | \"hunk\";\n\nexport interface DiffLine {\n t: DiffLineKind;\n /** Old-side line number (del, ctx). */\n a?: number;\n /** New-side line number (add, ctx). */\n b?: number;\n text: string;\n}\n\n/** Same diff lines (kind, numbers, text), whatever the array's identity. */\nexport function sameLines(a: readonly DiffLine[], b: readonly DiffLine[]): boolean {\n if (a === b) return true;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n const x = a[i]!;\n const y = b[i]!;\n if (x !== y && (x.t !== y.t || x.a !== y.a || x.b !== y.b || x.text !== y.text)) return false;\n }\n return true;\n}\n\n/** Unified diff text → lines (`---` / `+++` / `diff` / `index` headers dropped; the `+++` path is the file). */\nexport function parseUnified(text: string): { lines: DiffLine[]; file: string } {\n const out: DiffLine[] = [];\n let a = 0;\n let b = 0;\n let file = \"\";\n for (const l of text.replace(/\\r/g, \"\").split(\"\\n\")) {\n if (l.startsWith(\"+++ \")) {\n file = l.slice(4).replace(/^b\\//, \"\");\n continue;\n }\n if (l.startsWith(\"--- \") || l.startsWith(\"diff \") || l.startsWith(\"index \")) continue;\n const m = /^@@ -(\\d+)(?:,\\d+)? \\+(\\d+)(?:,\\d+)? @@/.exec(l);\n if (m) {\n a = +m[1]!;\n b = +m[2]!;\n out.push({ t: \"hunk\", text: l });\n continue;\n }\n if (l.startsWith(\"+\")) out.push({ t: \"add\", b: b++, text: l.slice(1) });\n else if (l.startsWith(\"-\")) out.push({ t: \"del\", a: a++, text: l.slice(1) });\n else if (l.startsWith(\"\\\\\")) continue;\n else if (out.length || l) out.push({ t: \"ctx\", a: a++, b: b++, text: l.startsWith(\" \") ? l.slice(1) : l });\n }\n while (out.length && out[out.length - 1]!.t === \"ctx\" && !out[out.length - 1]!.text) out.pop();\n return { lines: out, file };\n}\n\nconst splitLines = (t: string) => (t === \"\" ? [] : t.replace(/\\r\\n/g, \"\\n\").replace(/\\n$/, \"\").split(\"\\n\"));\n\n/** Every line of the file, old → new, as ctx / del / add (removals before additions). Past `limit` cells the whole file is one replace. */\nexport function fileLines(before: string, after: string, limit = 4_000_000): DiffLine[] {\n const a = splitLines(before);\n const b = splitLines(after);\n const out: DiffLine[] = [];\n if (a.length * b.length > limit) {\n a.forEach((text, i) => out.push({ t: \"del\", a: i + 1, text }));\n b.forEach((text, j) => out.push({ t: \"add\", b: j + 1, text }));\n return out;\n }\n const w = b.length + 1;\n const L = new Uint32Array((a.length + 1) * w);\n for (let i = a.length - 1; i >= 0; i -= 1)\n for (let j = b.length - 1; j >= 0; j -= 1) L[i * w + j] = a[i] === b[j] ? L[(i + 1) * w + j + 1]! + 1 : Math.max(L[(i + 1) * w + j]!, L[i * w + j + 1]!);\n let i = 0;\n let j = 0;\n while (i < a.length || j < b.length) {\n if (i < a.length && j < b.length && a[i] === b[j]) out.push({ t: \"ctx\", a: ++i, b: ++j, text: a[i - 1]! });\n else if (i < a.length && (j >= b.length || L[(i + 1) * w + j]! >= L[i * w + j + 1]!)) out.push({ t: \"del\", a: ++i, text: a[i - 1]! });\n else out.push({ t: \"add\", b: ++j, text: b[j - 1]! });\n }\n return out;\n}\n\n/** The hunks of `before` → `after`: `context` lines around each change, every hunk opened by its `@@` line. */\nexport function diffLines(before: string, after: string, context = 3): DiffLine[] {\n return hunks(fileLines(before, after), context);\n}\n\n/** Whole-file lines (no hunk rows) cut into hunks with `context` lines around each change. */\nexport function hunks(all: readonly DiffLine[], context = 3): DiffLine[] {\n const ops = all.filter((l) => l.t !== \"hunk\");\n const out: DiffLine[] = [];\n let k = 0;\n while (k < ops.length) {\n if (ops[k]!.t === \"ctx\") {\n k += 1;\n continue;\n }\n const start = Math.max(0, k - context);\n let end = k;\n let quiet = 0;\n for (let m = k; m < ops.length; m += 1) {\n if (ops[m]!.t === \"ctx\") {\n quiet += 1;\n if (quiet > context * 2) break;\n } else {\n quiet = 0;\n end = m;\n }\n }\n const stop = Math.min(ops.length, end + context + 1);\n const slice = ops.slice(start, stop);\n const oldN = slice.filter((x) => x.t !== \"add\").length;\n const newN = slice.filter((x) => x.t !== \"del\").length;\n // the first old / new line the hunk touches: the previous line's number + 1\n const before = ops.slice(0, start);\n const lastA = [...before].reverse().find((x) => x.a !== undefined)?.a ?? 0;\n const lastB = [...before].reverse().find((x) => x.b !== undefined)?.b ?? 0;\n out.push({ t: \"hunk\", text: `@@ -${oldN ? lastA + 1 : lastA},${oldN} +${newN ? lastB + 1 : lastB},${newN} @@` });\n out.push(...slice);\n k = stop;\n }\n return out;\n}\n\n/** Index of the first line of each change (a run of add / del lines). */\nexport function changeStarts(lines: readonly DiffLine[]): number[] {\n const out: number[] = [];\n lines.forEach((l, i) => {\n const ch = l.t === \"add\" || l.t === \"del\";\n const prev = lines[i - 1];\n if (ch && !(prev && (prev.t === \"add\" || prev.t === \"del\"))) out.push(i);\n });\n return out;\n}\n\n/** The [first, last] line indexes of the change that starts at `start`. */\nexport function changeRange(lines: readonly DiffLine[], start: number): [number, number] {\n let end = start;\n while (end + 1 < lines.length && (lines[end + 1]!.t === \"add\" || lines[end + 1]!.t === \"del\")) end++;\n return [start, end];\n}\n\n/** A rendered row: a line (with its index in `lines`) or a fold of `n` unchanged lines starting at `fold`. */\nexport type DiffBlock = { line: DiffLine; i: number } | { fold: number; n: number };\n\n/**\n * Folds long unchanged runs to `context` lines on each side (none at a hunk or file edge), unless\n * the run is open (`open` holds its first index) or `whole` is set.\n */\nexport function foldBlocks(lines: readonly DiffLine[], context = 3, open: ReadonlySet<number> = new Set(), whole = false): DiffBlock[] {\n if (whole) return lines.map((line, i) => ({ line, i }));\n const out: DiffBlock[] = [];\n let i = 0;\n while (i < lines.length) {\n if (lines[i]!.t !== \"ctx\") {\n out.push({ line: lines[i]!, i });\n i++;\n continue;\n }\n let j = i;\n while (j < lines.length && lines[j]!.t === \"ctx\") j++;\n const run = j - i;\n const startEdge = i === 0 || lines[i - 1]!.t === \"hunk\";\n const endEdge = j === lines.length || lines[j]!.t === \"hunk\";\n const head = startEdge ? 0 : context;\n const tail = endEdge ? 0 : context;\n if (run > head + tail + 2 && !open.has(i)) {\n for (let k = i; k < i + head; k++) out.push({ line: lines[k]!, i: k });\n out.push({ fold: i, n: run - head - tail });\n for (let k = j - tail; k < j; k++) out.push({ line: lines[k]!, i: k });\n } else for (let k = i; k < j; k++) out.push({ line: lines[k]!, i: k });\n i = j;\n }\n return out;\n}\n\n/** The +/− counts of a diff. */\nexport function diffStat(lines: readonly DiffLine[]): { add: number; del: number } {\n let add = 0;\n let del = 0;\n for (const l of lines) {\n if (l.t === \"add\") add++;\n else if (l.t === \"del\") del++;\n }\n return { add, del };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked,\n} from \"@angular/core\";\nimport { KjButtonComponent } from \"@kouji-ui/components\";\nimport { type SyntaxToken, lang as synLang, tokenize } from \"@getorrery/styles/syntax\";\n\nimport { OrrIconComponent } from \"../icon/icon.component\";\nimport { OrrAddDelComponent } from \"../status/status.components\";\nimport { type DiffBlock, type DiffLine, changeRange, changeStarts, diffStat, foldBlocks, parseUnified, sameLines } from \"./diff-model\";\n\nlet diffSeq = 0;\n\n/** A comment written on a diff line: `line` is the line number on `side`. */\nexport interface DiffComment {\n path: string;\n line: number;\n side: \"old\" | \"new\";\n text: string;\n /** Index of the line in the diff's lines. */\n index: number;\n /** The line's own text, for quoting. */\n quote: string;\n /** A range's last line (Monaco's drag-select), when it spans more than `line`. */\n to?: number;\n /** Every line of the range, when it spans more than one. */\n lines?: string[];\n}\n\n/** The number a line is known by: its new-side number, or the old one for a removed line. */\nexport function lineNo(l: DiffLine): number | null {\n return l.t === \"del\" ? (l.a ?? null) : (l.b ?? l.a ?? null);\n}\n\n/** Moves `current` (a change's first line index, -1 for none) to the next / previous change, wrapping. */\nexport function stepChange(starts: readonly number[], current: number, dir: 1 | -1): number {\n if (!starts.length) return -1;\n const t = dir > 0 ? starts.find((s) => s > current) : [...starts].reverse().find((s) => s < current);\n return t ?? (dir > 0 ? starts[0]! : starts[starts.length - 1]!);\n}\n\n/**\n * `<orr-diff [lines]=\"lines\" file=\"src/a.ts\" />` or `[text]=\"unifiedDiff\"`: a unified diff (`.o-diff`).\n * Two plain gutters (old, new numbers), the sign, and the text syntax-highlighted (`@getorrery/styles/syntax`,\n * by `lang` or the file name) over the add / del grounds. Long unchanged runs fold (`context`), unless\n * `whole` shows the whole file. Keys inside: n / j next change, p / k previous, Enter opens a fold.\n * With `commentable`, a click on a line number opens a comment box under it; Add emits `comment`.\n */\n@Component({\n selector: \"orr-diff\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [OrrIconComponent, OrrAddDelComponent, KjButtonComponent],\n host: {\n class: \"o-diff\",\n \"[class.o-diff--syn]\": \"!!language()\",\n \"[class.o-diff--nonum]\": \"nonum()\",\n tabindex: \"0\",\n role: \"region\",\n \"[attr.aria-label]\": \"'Diff ' + path()\",\n \"(keydown)\": \"onKey($event)\",\n },\n template: `\n @if (fileHead() && path()) {\n <div class=\"o-diff__file\">\n <orr-icon name=\"file\" size=\"sm\" />\n <span style=\"flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis\">{{ path() }}</span>\n <orr-addel [add]=\"stat().add\" [del]=\"stat().del\" />\n </div>\n }\n @for (b of blocks(); track blockKey(b)) {\n @if ('fold' in b) {\n <button type=\"button\" class=\"o-diff__fold\" [attr.data-fold]=\"b.fold\" (click)=\"openFold(b.fold)\">\n <orr-icon name=\"chevron-down\" size=\"xs\" /> {{ b.n }} unchanged lines\n </button>\n } @else if (b.line.t === 'hunk') {\n <div class=\"o-diff__line o-diff__line--hunk\" [attr.data-i]=\"b.i\">\n @if (!nonum()) {<span class=\"o-diff__num\"></span><span class=\"o-diff__num\"></span>}<span class=\"o-diff__sign\"></span>\n <span class=\"o-diff__text\">{{ b.line.text }}</span>\n </div>\n } @else {\n <div class=\"o-diff__line o-diff__line--{{ b.line.t }}\" [attr.data-i]=\"b.i\" [attr.data-current]=\"inCurrent(b.i) ? '1' : null\" (click)=\"lineSelect.emit({ index: b.i, line: b.line })\">\n @for (side of nonum() ? [] : sides; track side) {\n @if (commentable() && gutterSide(b.line) === side) {\n <button type=\"button\" class=\"o-diff__num\" style=\"background:none;border:0;padding:0 var(--sp-3);font:inherit;color:inherit;cursor:pointer\"\n [attr.aria-label]=\"'Comment on ' + path() + ' line ' + lineNo(b.line)\" [attr.title]=\"'Comment on line ' + lineNo(b.line)\"\n (click)=\"$event.stopPropagation(); openComment(b.i)\">{{ num(b.line, side) }}</button>\n } @else {\n <span class=\"o-diff__num\">{{ num(b.line, side) }}</span>\n }\n }\n <span class=\"o-diff__sign\">{{ sign[b.line.t] }}</span>\n <span class=\"o-diff__text\">@if (toks()[b.i]; as ts) {@for (t of ts; track $index) {@if (t.kind) {<span class=\"tk-{{ t.kind }}\">{{ t.text }}</span>} @else {<ng-container>{{ t.text }}</ng-container>}}} @else {<ng-container>{{ b.line.text }}</ng-container>}@if (noted(b.line)) {<span class=\"o-badge o-badge--attn\" style=\"margin-left:var(--sp-4)\">in review</span>}</span>\n </div>\n @if (commentAt() === b.i) {\n <div class=\"o-diff__comment\" (keydown)=\"$event.stopPropagation()\">\n <label class=\"o-label\" [attr.for]=\"cid\">{{ commentLabel() }} {{ path() }}:L{{ lineNo(b.line) }}</label>\n <textarea class=\"o-textarea\" rows=\"2\" [id]=\"cid\" [value]=\"draft()\" (input)=\"draft.set($any($event.target).value)\"\n (keydown.escape)=\"closeComment()\" [attr.placeholder]=\"placeholder()\"></textarea>\n <div style=\"display:flex;gap:var(--sp-4);justify-content:flex-end\">\n <kj-button kjVariant=\"outline\" kjSize=\"sm\" (click)=\"closeComment()\">Cancel</kj-button>\n <kj-button kjVariant=\"default\" kjSize=\"sm\" [kjDisabled]=\"!draft().trim()\" (click)=\"addComment(b.i)\">{{ addLabel() }}</kj-button>\n </div>\n </div>\n }\n }\n } @empty {\n <div class=\"o-diff__fold\" style=\"cursor:default\">{{ emptyText() }}</div>\n }\n `,\n})\nexport class OrrDiffComponent {\n /** The lines; or give `text` (unified diff). */\n readonly lines = input<readonly DiffLine[] | null>(null);\n readonly text = input(\"\");\n /** The file's path (header, comments, language). Falls back to the `+++` path of `text`. */\n readonly file = input(\"\");\n /** A language id or extension; falls back to the file name. */\n readonly lang = input(\"\");\n /** Show every line: no folding. */\n readonly whole = input(false, { transform: booleanAttribute });\n readonly context = input(3, { transform: numberAttribute });\n /** The file header row (`.o-diff__file`). */\n readonly fileHead = input(true, { transform: booleanAttribute });\n /** No line-number gutters: sign and text only (a config fragment, e.g. Cloud's pending `config.toml` change). */\n readonly nonum = input(false, { transform: booleanAttribute });\n /** The current change: its first line's index, -1 for none. n / p move it. */\n readonly current = model(-1);\n readonly commentable = input(false, { transform: booleanAttribute });\n /** Handle n / j / p / k itself. Off when a parent walks changes across files (the review dialog). */\n readonly keys = input(true, { transform: booleanAttribute });\n /** Line numbers (new side; old for removed lines) that already carry a comment. */\n readonly notes = input<readonly number[]>([]);\n readonly commentLabel = input(\"Comment on\");\n readonly addLabel = input(\"Add to review\");\n readonly placeholder = input(\"What should the agent change here?\");\n readonly emptyText = input(\"No changes\");\n readonly comment = output<DiffComment>();\n readonly lineSelect = output<{ index: number; line: DiffLine }>();\n\n protected readonly sign: Record<string, string> = { add: \"+\", del: \"−\", ctx: \" \", hunk: \"\" };\n protected readonly sides = [\"old\", \"new\"] as const;\n protected readonly lineNo = lineNo;\n protected readonly cid = `orr-diff-c-${(diffSeq += 1)}`;\n private readonly open = signal<ReadonlySet<number>>(new Set());\n readonly commentAt = signal<number | null>(null);\n readonly draft = signal(\"\");\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n private readonly parsed = computed(() => (this.lines() === null ? parseUnified(this.text()) : null));\n /** Held while a new array carries the same lines: no re-fold, no re-highlight. */\n readonly all = computed<readonly DiffLine[]>(() => this.lines() ?? this.parsed()?.lines ?? [], { equal: sameLines });\n readonly path = computed(() => this.file() || this.parsed()?.file || \"\");\n readonly language = computed(() => synLang(this.lang() || this.path()));\n readonly stat = computed(() => diffStat(this.all()));\n readonly starts = computed(() => changeStarts(this.all()));\n readonly blocks = computed<DiffBlock[]>(() => foldBlocks(this.all(), this.context(), this.open(), this.whole()));\n readonly toks = computed<(SyntaxToken[] | null)[]>(() => {\n const l = this.language();\n return this.all().map((x) => (l && x.t !== \"hunk\" ? (tokenize(x.text, l)[0] ?? []) : null));\n });\n private readonly range = computed(() => (this.current() >= 0 && this.current() < this.all().length ? changeRange(this.all(), this.current()) : null));\n\n constructor() {\n // The current change folds open and scrolls into view.\n effect(() => {\n const c = this.current();\n if (c < 0) return;\n queueMicrotask(() => this.host.querySelector('[data-current=\"1\"]')?.scrollIntoView?.({ block: \"center\" }));\n });\n // A file opens on its first change, as an IDE's diff does.\n effect(() => {\n const first = this.starts()[0];\n if (first === undefined || untracked(this.current) >= 0) return;\n queueMicrotask(() => this.host.querySelector(`[data-i=\"${first}\"]`)?.scrollIntoView?.({ block: \"center\" }));\n });\n }\n\n protected blockKey(b: DiffBlock): string {\n return \"fold\" in b ? \"f\" + b.fold : \"l\" + b.i;\n }\n\n protected num(l: DiffLine, side: \"old\" | \"new\"): number | \"\" {\n if (side === \"old\") return l.t !== \"add\" ? (l.a ?? \"\") : \"\";\n return l.t !== \"del\" ? (l.b ?? \"\") : \"\";\n }\n\n protected gutterSide(l: DiffLine): \"old\" | \"new\" {\n return l.t === \"del\" ? \"old\" : \"new\";\n }\n\n protected inCurrent(i: number): boolean {\n const r = this.range();\n return !!r && i >= r[0] && i <= r[1];\n }\n\n protected noted(l: DiffLine): boolean {\n const n = lineNo(l);\n return n !== null && this.notes().includes(n);\n }\n\n openFold(start: number): void {\n this.open.set(new Set([...this.open(), start]));\n }\n\n /** Moves to the next (1) or previous (-1) change, wrapping; returns the new current index. */\n step(dir: 1 | -1): number {\n const t = stepChange(this.starts(), this.current(), dir);\n if (t < 0) return t;\n this.current.set(t);\n return t;\n }\n\n openComment(i: number): void {\n this.commentAt.set(i);\n this.draft.set(\"\");\n queueMicrotask(() => (this.host.querySelector(\".o-diff__comment textarea\") as HTMLTextAreaElement | null)?.focus());\n }\n\n closeComment(): void {\n this.commentAt.set(null);\n this.draft.set(\"\");\n this.host.focus({ preventScroll: true });\n }\n\n addComment(i: number): void {\n const l = this.all()[i];\n const text = this.draft().trim();\n if (!l || !text) return;\n this.comment.emit({ path: this.path(), line: lineNo(l) ?? 0, side: this.gutterSide(l), text, index: i, quote: l.text });\n this.closeComment();\n }\n\n onKey(e: KeyboardEvent): void {\n if (e.ctrlKey || e.metaKey || e.altKey) return;\n const tag = (e.target as HTMLElement | null)?.tagName?.toLowerCase();\n if (tag === \"textarea\" || tag === \"input\") return;\n if (e.key === \"Enter\") {\n const f = (e.target as HTMLElement | null)?.closest?.(\"[data-fold]\") as HTMLElement | null;\n if (f) {\n e.preventDefault();\n this.openFold(Number(f.dataset[\"fold\"]));\n }\n return;\n }\n const dir = e.key === \"n\" || e.key === \"j\" ? 1 : e.key === \"p\" || e.key === \"k\" ? -1 : 0;\n if (!dir || !this.keys()) return;\n e.preventDefault();\n e.stopPropagation();\n this.step(dir);\n }\n}\n","import { ChangeDetectionStrategy, Component, booleanAttribute, computed, input, numberAttribute } from \"@angular/core\";\nimport { type SyntaxToken, lang as synLang, tokenize } from \"@getorrery/styles/syntax\";\n\n/** `\"3,5-7\"` (or numbers) → the set of line numbers. */\nexport function lineSet(spec: string | readonly number[]): Set<number> {\n if (Array.isArray(spec)) return new Set(spec);\n const out = new Set<number>();\n for (const p of String(spec).split(\",\")) {\n const m = /^(\\d+)(?:-(\\d+))?$/.exec(p.trim());\n if (m) for (let i = +m[1]!; i <= +(m[2] ?? m[1]!); i++) out.add(i);\n }\n return out;\n}\n\n/**\n * `<orr-code [text]=\"src\" lang=\"ts\" highlight=\"3,5-7\" />`: a read-only file (`.o-code`) with line\n * numbers and syntax colours (`@getorrery/styles/syntax`); `flat` drops the well's frame.\n */\n@Component({\n selector: \"orr-code\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"o-code\",\n \"[class.o-code--flat]\": \"flat()\",\n role: \"region\",\n tabindex: \"0\",\n \"[attr.aria-label]\": \"(lang() || 'code') + ' file'\",\n \"[attr.data-lang]\": \"language()\",\n },\n template: `\n @for (l of rows(); track $index) {\n <div class=\"o-code__line\" [attr.data-current]=\"marked().has(start() + $index) ? '1' : null\">@if (!nonum()) {<span class=\"o-code__num\">{{ start() + $index }}</span>}<span style=\"padding-left:12px\">@if (l.length) {@for (t of l; track $index) {@if (t.kind) {<span class=\"tk-{{ t.kind }}\">{{ t.text }}</span>} @else {<ng-container>{{ t.text }}</ng-container>}}} @else {<ng-container>{{ ' ' }}</ng-container>}</span></div>\n }\n `,\n})\nexport class OrrCodeComponent {\n readonly text = input(\"\");\n /** A language id, extension or file name. */\n readonly lang = input(\"\");\n /** The first line's number. */\n readonly start = input(1, { transform: numberAttribute });\n /** Lines to mark: `\"3,5-7\"` or numbers. */\n readonly highlight = input<string | readonly number[]>(\"\");\n readonly nonum = input(false, { transform: booleanAttribute });\n readonly flat = input(false, { transform: booleanAttribute });\n\n readonly language = computed(() => synLang(this.lang()));\n readonly marked = computed(() => lineSet(this.highlight()));\n readonly rows = computed<SyntaxToken[][]>(() => {\n const src = this.text().replace(/\\r/g, \"\").replace(/^\\n/, \"\").replace(/\\n\\s*$/, \"\");\n const l = this.language();\n return l ? tokenize(src, l) : src.split(\"\\n\").map((x) => (x ? [{ text: x, kind: null }] : []));\n });\n}\n","/// <reference path=\"./monaco-edcore.d.ts\" />\n/**\n * Monaco for every Orrery front end (the ADE's IDE mode, the changes view in Agent mode and Cloud):\n * one loader, one token-matched theme, one path → language map. Moved from the ADE so a diff reads\n * the same everywhere. The app ships Monaco's stylesheet as a non-injected `monaco` style bundle.\n */\nimport type * as monacoApi from \"monaco-editor\";\n\n/**\n * Lazy loader for Monaco (B1.1 editor migration). Unlike the CodeMirror setup\n * in `code-lang.ts` (esm.sh at runtime), Monaco is BUNDLED: `edcore.main.js`\n * — the editor plus every editor contribution (find widget, folding, bracket\n * matching, multi-cursor, diff editor) but NONE of the language services — is\n * pulled in through a dynamic import, so it lands in its own lazy chunk that\n * loads the first time an editor mounts. Highlighting is Monarch-only via the\n * per-language `basic-languages` contributions, themselves lazy chunks.\n */\nexport type MonacoApi = typeof monacoApi;\n\nlet corePromise: Promise<MonacoApi> | null = null;\nlet cssAttached = false;\n\n/** Attach (once) the complete Monaco stylesheet — built as the non-injected\n * \"monaco\" style bundle in angular.json, so it loads with the first editor\n * rather than with the app shell. */\nfunction attachMonacoCss(): void {\n if (cssAttached) return;\n cssAttached = true;\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = \"monaco.css\";\n document.head.appendChild(link);\n}\n\n/** Load (once) the Monaco editor core; retries are possible after a failure. */\nexport function loadMonaco(): Promise<MonacoApi> {\n if (!corePromise) {\n attachMonacoCss();\n // Must be in place before the first editor module executes.\n (self as unknown as { MonacoEnvironment?: unknown }).MonacoEnvironment = {\n getWorker: () =>\n new Worker(new URL(\"./monaco.worker\", import.meta.url), { type: \"module\" }),\n };\n corePromise = import(\n \"monaco-editor/esm/vs/editor/edcore.main.js\"\n ) as unknown as Promise<MonacoApi>;\n corePromise.catch(() => (corePromise = null));\n }\n return corePromise;\n}\n\n// ---------------------------------------------------------------- themes ----\n\n/** Resolve a CSS design token to a Monaco-safe #rrggbb(aa) hex, or undefined. */\nexport function tokenHex(styles: CSSStyleDeclaration, name: string): string | undefined {\n let raw = styles.getPropertyValue(name).trim();\n if (!raw) return undefined;\n if (raw.startsWith(\"#\")) return raw;\n // color-mix() / oklch(): a canvas normalises any CSS colour to #rrggbb or rgba().\n if (!/^rgba?\\(/.test(raw) && typeof document !== \"undefined\") {\n const ctx = document.createElement(\"canvas\").getContext(\"2d\");\n if (!ctx) return undefined;\n ctx.fillStyle = \"#000\";\n ctx.fillStyle = raw;\n raw = String(ctx.fillStyle);\n if (raw.startsWith(\"#\")) return raw;\n }\n const m = raw.match(/^rgba?\\(\\s*(\\d+)[,\\s]+(\\d+)[,\\s]+(\\d+)(?:[,\\s/]+([\\d.]+))?\\s*\\)$/);\n if (!m) return undefined;\n const hex = (n: number): string => Math.round(n).toString(16).padStart(2, \"0\");\n const alpha = m[4] === undefined ? \"\" : hex(Number(m[4]) * 255);\n return `#${hex(+m[1])}${hex(+m[2])}${hex(+m[3])}${alpha}`;\n}\n\n/**\n * (Re)define + activate the app-matched Monaco theme. Monaco needs concrete\n * hex values, so the app's CSS tokens are resolved from the `[data-theme]`\n * root at call time — call again whenever `ui.tweaks().theme` changes (theme\n * state is global in Monaco: one call restyles every live editor).\n */\nexport function applyMonacoTheme(monaco: MonacoApi, appTheme: \"dark\" | \"light\"): void {\n const root = document.querySelector(\"[data-theme]\") ?? document.documentElement;\n const styles = getComputedStyle(root);\n const colors: Record<string, string> = {};\n const put = (key: string, token: string): void => {\n const v = tokenHex(styles, token);\n if (v) colors[key] = v;\n };\n // T00 / decision 0010: code (editor and diff) sits on the darker --well ground.\n put(\"editor.background\", \"--well\");\n put(\"editor.foreground\", \"--ink\");\n put(\"editorGutter.background\", \"--well\");\n put(\"editorLineNumber.foreground\", \"--ink-4\");\n put(\"editorLineNumber.activeForeground\", \"--ink-2\");\n put(\"diffEditor.insertedTextBackground\", \"--code-add-bg\");\n put(\"diffEditor.removedTextBackground\", \"--code-del-bg\");\n // whole rows too (Monaco's default is a faint tint); a changed word then layers over its row, darker\n put(\"diffEditor.insertedLineBackground\", \"--code-add-bg\");\n put(\"diffEditor.removedLineBackground\", \"--code-del-bg\");\n // Anchor marks in the diff overview ruler (the strip beside the vertical\n // scrollbar). Monaco would otherwise derive them from the *TextBackground\n // pair above, which is a ~90%-transparent row tint and all but invisible as\n // a 15px-wide mark — so they get the solid diff INK tokens instead, the same\n // green/red the rest of the app uses for added/removed.\n put(\"diffEditorOverview.insertedForeground\", \"--code-add-ink\");\n put(\"diffEditorOverview.removedForeground\", \"--code-del-ink\");\n // The scrollbar slider is the one piece of Monaco chrome that sits right\n // beside an app scrollbar (editor pane next to the file tree), so a mismatch\n // reads as two different widgets. Same tokens styles.css gives\n // ::-webkit-scrollbar-thumb; Monaco has no hover/active default that lands\n // anywhere near --hair-2, so all three states are pinned.\n put(\"scrollbarSlider.background\", \"--hair-2\");\n put(\"scrollbarSlider.hoverBackground\", \"--ink-4\");\n put(\"scrollbarSlider.activeBackground\", \"--ink-4\");\n // Belt and braces with monacoScrollbarOptions()' overviewRulerBorder:false —\n // any surface that leaves the rule on gets the app hairline rather than\n // Monaco's default, which is a hard seam against --panel.\n put(\"editorOverviewRuler.border\", \"--hair-2\");\n // Syntax colours come from the shared --syn-* tokens (@getorrery/styles), the same\n // ones orr-code / orr-diff paint with, so every code surface reads alike.\n const rules: { token: string; foreground: string }[] = [];\n const syn = (tokens: string[], token: string): void => {\n const v = tokenHex(styles, token);\n if (v) for (const t of tokens) rules.push({ token: t, foreground: v.slice(1, 7) });\n };\n syn([\"keyword\", \"keyword.control\", \"storage\", \"storage.type\"], \"--syn-kw\");\n syn([\"string\", \"string.escape\", \"attribute.value\"], \"--syn-str\");\n syn([\"number\", \"number.hex\", \"number.float\"], \"--syn-num\");\n syn([\"comment\", \"comment.doc\"], \"--syn-com\");\n syn([\"type\", \"type.identifier\", \"entity.name.type\"], \"--syn-type\");\n const name = `orrery-${appTheme}`;\n monaco.editor.defineTheme(name, {\n base: appTheme === \"dark\" ? \"vs-dark\" : \"vs\",\n inherit: true,\n rules,\n colors,\n });\n monaco.editor.setTheme(name);\n}\n\n/**\n * Diff-surface options that turn on Monaco's OWN diff overview ruler: a strip\n * beside the vertical scrollbar carrying one mark per changed region (removed\n * on the original lane, inserted on the modified lane), so a long file shows\n * where its changes are at a glance and the strip can be clicked/dragged to\n * scroll straight to one. Monaco owns the marks — nothing here hand-rolls a\n * scrollbar overlay. Their colours are the two `diffEditorOverview.*` theme\n * keys applyMonacoTheme() resolves from --code-add-ink / --code-del-ink, which\n * is what keeps them correct in both the light and the dark theme.\n *\n * `overviewRulerBorder: false` drops the inner editors' own 1px ruler rule,\n * which would otherwise draw a second vertical line right next to the strip.\n */\nexport function diffOverviewRulerOptions(): {\n renderOverviewRuler: boolean;\n overviewRulerBorder: boolean;\n} {\n return { renderOverviewRuler: true, overviewRulerBorder: false };\n}\n\n/**\n * Scrollbar geometry that matches the app's own bars (styles.css\n * `::-webkit-scrollbar`, 9px lane / 5px visible thumb). Monaco's defaults are\n * 14px vertical and 12px horizontal with the slider filling the whole lane,\n * which next to a native bar reads as a different widget entirely.\n *\n * The app fakes its 5px thumb with a 2px transparent border + background-clip;\n * Monaco can't do that, but VerticalScrollbar centres the slider in the lane\n * ((scrollbarSize - sliderSize) / 2), so a 9/5 pair lands in the same place.\n * Slider size has to be given explicitly — it defaults to the scrollbar size,\n * not to a padded fraction of it.\n *\n * `useShadows` kills the drop shadow Monaco casts over scrolled-away content,\n * which the app has nowhere else and which dirties --panel. The slider colours\n * come from the `scrollbarSlider.*` theme keys applyMonacoTheme() resolves.\n */\nexport function monacoScrollbarOptions(): {\n scrollbar: {\n verticalScrollbarSize: number;\n horizontalScrollbarSize: number;\n verticalSliderSize: number;\n horizontalSliderSize: number;\n useShadows: boolean;\n };\n overviewRulerBorder: boolean;\n} {\n return {\n scrollbar: {\n verticalScrollbarSize: 9,\n horizontalScrollbarSize: 9,\n verticalSliderSize: 5,\n horizontalSliderSize: 5,\n useShadows: false,\n },\n overviewRulerBorder: false,\n };\n}\n\n// ------------------------------------------------------------- languages ----\n\n/**\n * langId() canonical tag → Monaco language. `load` imports the Monarch\n * contribution (static specifiers so each becomes a bundled lazy chunk); `id`\n * is the Monaco language id the model should be set to. Tags with no Monarch\n * grammar in `basic-languages` (haskell, erlang, nginx, wast, diff) render\n * plain — same graceful degradation as the CM loader.\n */\ninterface MonacoLang {\n id: string;\n load: () => Promise<unknown>;\n}\n\nconst ML = (id: string, load: () => Promise<unknown>): MonacoLang => ({ id, load });\n\nconst LANGS: Record<string, MonacoLang> = {\n // TS tokenizer covers JS; langId collapses js/ts/jsx/tsx into one tag.\n javascript: ML(\"typescript\", () =>\n import(\"monaco-editor/esm/vs/basic-languages/typescript/typescript.contribution.js\")),\n // no Monarch json grammar without the json language service — the TS\n // tokenizer highlights strings/numbers/braces correctly for JSON.\n json: ML(\"typescript\", () =>\n import(\"monaco-editor/esm/vs/basic-languages/typescript/typescript.contribution.js\")),\n css: ML(\"css\", () => import(\"monaco-editor/esm/vs/basic-languages/css/css.contribution.js\")),\n sass: ML(\"scss\", () => import(\"monaco-editor/esm/vs/basic-languages/scss/scss.contribution.js\")),\n less: ML(\"less\", () => import(\"monaco-editor/esm/vs/basic-languages/less/less.contribution.js\")),\n html: ML(\"html\", () => import(\"monaco-editor/esm/vs/basic-languages/html/html.contribution.js\")),\n vue: ML(\"html\", () => import(\"monaco-editor/esm/vs/basic-languages/html/html.contribution.js\")),\n angular: ML(\"html\", () => import(\"monaco-editor/esm/vs/basic-languages/html/html.contribution.js\")),\n xml: ML(\"xml\", () => import(\"monaco-editor/esm/vs/basic-languages/xml/xml.contribution.js\")),\n markdown: ML(\"markdown\", () =>\n import(\"monaco-editor/esm/vs/basic-languages/markdown/markdown.contribution.js\")),\n rust: ML(\"rust\", () => import(\"monaco-editor/esm/vs/basic-languages/rust/rust.contribution.js\")),\n python: ML(\"python\", () =>\n import(\"monaco-editor/esm/vs/basic-languages/python/python.contribution.js\")),\n java: ML(\"java\", () => import(\"monaco-editor/esm/vs/basic-languages/java/java.contribution.js\")),\n groovy: ML(\"java\", () => import(\"monaco-editor/esm/vs/basic-languages/java/java.contribution.js\")),\n yaml: ML(\"yaml\", () => import(\"monaco-editor/esm/vs/basic-languages/yaml/yaml.contribution.js\")),\n sql: ML(\"sql\", () => import(\"monaco-editor/esm/vs/basic-languages/sql/sql.contribution.js\")),\n cpp: ML(\"cpp\", () => import(\"monaco-editor/esm/vs/basic-languages/cpp/cpp.contribution.js\")),\n php: ML(\"php\", () => import(\"monaco-editor/esm/vs/basic-languages/php/php.contribution.js\")),\n go: ML(\"go\", () => import(\"monaco-editor/esm/vs/basic-languages/go/go.contribution.js\")),\n shell: ML(\"shell\", () =>\n import(\"monaco-editor/esm/vs/basic-languages/shell/shell.contribution.js\")),\n toml: ML(\"ini\", () => import(\"monaco-editor/esm/vs/basic-languages/ini/ini.contribution.js\")),\n properties: ML(\"ini\", () => import(\"monaco-editor/esm/vs/basic-languages/ini/ini.contribution.js\")),\n ruby: ML(\"ruby\", () => import(\"monaco-editor/esm/vs/basic-languages/ruby/ruby.contribution.js\")),\n csharp: ML(\"csharp\", () =>\n import(\"monaco-editor/esm/vs/basic-languages/csharp/csharp.contribution.js\")),\n kotlin: ML(\"kotlin\", () =>\n import(\"monaco-editor/esm/vs/basic-languages/kotlin/kotlin.contribution.js\")),\n scala: ML(\"scala\", () =>\n import(\"monaco-editor/esm/vs/basic-languages/scala/scala.contribution.js\")),\n dart: ML(\"dart\", () => import(\"monaco-editor/esm/vs/basic-languages/dart/dart.contribution.js\")),\n objectivec: ML(\"objective-c\", () =>\n import(\"monaco-editor/esm/vs/basic-languages/objective-c/objective-c.contribution.js\")),\n swift: ML(\"swift\", () =>\n import(\"monaco-editor/esm/vs/basic-languages/swift/swift.contribution.js\")),\n lua: ML(\"lua\", () => import(\"monaco-editor/esm/vs/basic-languages/lua/lua.contribution.js\")),\n perl: ML(\"perl\", () => import(\"monaco-editor/esm/vs/basic-languages/perl/perl.contribution.js\")),\n r: ML(\"r\", () => import(\"monaco-editor/esm/vs/basic-languages/r/r.contribution.js\")),\n clojure: ML(\"clojure\", () =>\n import(\"monaco-editor/esm/vs/basic-languages/clojure/clojure.contribution.js\")),\n julia: ML(\"julia\", () =>\n import(\"monaco-editor/esm/vs/basic-languages/julia/julia.contribution.js\")),\n powershell: ML(\"powershell\", () =>\n import(\"monaco-editor/esm/vs/basic-languages/powershell/powershell.contribution.js\")),\n dockerfile: ML(\"dockerfile\", () =>\n import(\"monaco-editor/esm/vs/basic-languages/dockerfile/dockerfile.contribution.js\")),\n};\n\nconst loadedLangs = new Set<string>();\n\n/**\n * Resolve a `langId()` tag to a registered Monaco language id, loading its\n * Monarch contribution on first use. Unknown tags (or a failed grammar chunk)\n * resolve to \"plaintext\" — the file still renders, just untokenized.\n */\nexport async function monacoLanguage(lang: string): Promise<string> {\n const def = LANGS[lang];\n if (!def) return \"plaintext\";\n if (!loadedLangs.has(def.id)) {\n try {\n await def.load();\n loadedLangs.add(def.id);\n } catch (e) {\n console.warn(\"[monaco-loader] grammar load failed for\", lang, e);\n return \"plaintext\";\n }\n }\n return def.id;\n}\n\n// extension → the canonical grammar tag understood by code-lang's `loadLangExt`\n// (a key in its LANGS map). Distinct from LANG_LABELS, which is display-only.\nconst LANG_ID: Record<string, string> = {\n ts: \"javascript\", mts: \"javascript\", cts: \"javascript\", tsx: \"javascript\",\n js: \"javascript\", mjs: \"javascript\", cjs: \"javascript\", jsx: \"javascript\",\n json: \"json\", jsonc: \"json\", json5: \"json\",\n css: \"css\", scss: \"sass\", sass: \"sass\", less: \"less\",\n html: \"html\", htm: \"html\", xhtml: \"html\",\n xml: \"xml\", svg: \"xml\", xsd: \"xml\", xsl: \"xml\", plist: \"xml\", wsdl: \"xml\",\n md: \"markdown\", markdown: \"markdown\", mdx: \"markdown\",\n rs: \"rust\", py: \"python\", pyw: \"python\", pyi: \"python\",\n java: \"java\", yaml: \"yaml\", yml: \"yaml\", toml: \"toml\", sql: \"sql\",\n c: \"cpp\", h: \"cpp\", cpp: \"cpp\", cc: \"cpp\", cxx: \"cpp\", hpp: \"cpp\", hh: \"cpp\", hxx: \"cpp\",\n php: \"php\", go: \"go\", vue: \"vue\", wat: \"wast\", wast: \"wast\",\n rb: \"ruby\", gemspec: \"ruby\", rake: \"ruby\",\n cs: \"csharp\", kt: \"kotlin\", kts: \"kotlin\", scala: \"scala\", sc: \"scala\",\n dart: \"dart\", swift: \"swift\", lua: \"lua\", pl: \"perl\", pm: \"perl\",\n r: \"r\", clj: \"clojure\", cljs: \"clojure\", cljc: \"clojure\", edn: \"clojure\",\n hs: \"haskell\", jl: \"julia\", erl: \"erlang\", hrl: \"erlang\",\n ps1: \"powershell\", psm1: \"powershell\", groovy: \"groovy\", gradle: \"groovy\",\n diff: \"diff\", patch: \"diff\",\n properties: \"properties\", ini: \"properties\", env: \"properties\", cfg: \"properties\", conf: \"properties\",\n sh: \"shell\", bash: \"shell\", zsh: \"shell\",\n};\n\n/** Canonical CodeMirror grammar tag for a path (\"\"=no grammar / plain text). */\nexport function langId(path: string): string {\n const name = path.replace(/\\/$/, \"\").split(\"/\").pop() ?? \"\";\n if (/^dockerfile$/i.test(name) || /\\.dockerfile$/i.test(name)) return \"dockerfile\";\n // Angular CLI template convention → the Angular grammar (html + bindings)\n if (/\\.component\\.html$/i.test(name)) return \"angular\";\n const dot = name.lastIndexOf(\".\");\n if (dot < 0) return \"\";\n return LANG_ID[name.slice(dot + 1).toLowerCase()] ?? \"\";\n}\n\n/** The Monaco language for a path, its grammar loaded: \"plaintext\" when there is none. */\nexport function monacoLanguageFor(path: string): Promise<string> {\n return monacoLanguage(langId(path));\n}\n","import type * as monacoApi from \"monaco-editor\";\n\nimport type { MonacoApi } from \"./monaco\";\n\n/** The slice of a ReviewComment the editor needs to render. */\nexport interface ReviewCommentLite {\n id: string;\n fromLine: number; // 1-based, inclusive\n toLine: number; // 1-based, inclusive\n note: string;\n}\n\nexport interface CommentHost {\n /** Persist a new comment on [fromLine, toLine] (1-based, new-side). */\n save(fromLine: number, toLine: number, note: string): void;\n /** Delete a saved comment. */\n remove(id: string): void;\n}\n\n/** Drop comments that no longer fit the document; clamp partial overhangs. */\nexport function clampComments(comments: ReviewCommentLite[], docLines: number): ReviewCommentLite[] {\n return comments\n .filter((c) => c.fromLine >= 1 && c.fromLine <= docLines)\n .map((c) => (c.toLine <= docLines ? c : { ...c, toLine: docLines }));\n}\n\n/**\n * Monaco port of the inline-review comment UX (review-comments.ext.ts): hover\n * \"+\" in the glyph margin, drag range select, inline composer and saved-comment\n * cards as view zones. Same host contract and the same `rc-*` class names, so\n * the visual language carries over 1:1.\n *\n * Mapping from the CM extension:\n * - line tints (`rc-covered`/`rc-selected`) → whole-line decorations\n * - gutter markers (+ / anchor / dot) → glyph-margin decoration classes\n * (Monaco's glyph margin takes class names, not DOM — the icons are CSS)\n * - card / composer block widgets → view zones (measured after\n * mount, then re-laid-out, since zones need an explicit pixel height)\n */\n\nexport interface MonacoReviewApi {\n /** Push the current comment list (idempotent). */\n setComments(comments: ReviewCommentLite[]): void;\n /** Open the inline composer on a line range (drag-release target). */\n openComposer(fromLine: number, toLine: number): void;\n dispose(): void;\n}\n\n// ----- tiny inline icons (lucide paths — same set as the CM extension) -----\nfunction svgIcon(paths: string[], px: number): SVGElement {\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"viewBox\", \"0 0 24 24\");\n svg.setAttribute(\"width\", String(px));\n svg.setAttribute(\"height\", String(px));\n svg.setAttribute(\"fill\", \"none\");\n svg.setAttribute(\"stroke\", \"currentColor\");\n svg.setAttribute(\"stroke-width\", \"2.4\");\n svg.setAttribute(\"stroke-linecap\", \"round\");\n svg.setAttribute(\"stroke-linejoin\", \"round\");\n for (const d of paths) {\n const p = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n p.setAttribute(\"d\", d);\n svg.appendChild(p);\n }\n return svg;\n}\nconst CHAT = [\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"];\nconst TRASH = [\"M3 6h18\", \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", \"M10 11v6\", \"M14 11v6\"];\n\n// ----- pure DOM factories (exported for the spec) -----\n\n/** Saved-comment card — identical structure/classes to the CM widget. */\nexport function buildCard(c: ReviewCommentLite, onDelete: (id: string) => void): HTMLElement {\n const root = document.createElement(\"div\");\n root.className = \"rc-card\";\n const bar = document.createElement(\"span\");\n bar.className = \"rc-card-bar\";\n root.appendChild(bar);\n const body = document.createElement(\"div\");\n body.className = \"rc-card-body\";\n root.appendChild(body);\n\n const head = document.createElement(\"div\");\n head.className = \"rc-card-head\";\n const avatar = document.createElement(\"span\");\n avatar.className = \"rc-card-avatar\";\n avatar.textContent = \"YOU\";\n const who = document.createElement(\"span\");\n who.className = \"rc-card-who\";\n who.textContent = \"You\";\n const ref = document.createElement(\"span\");\n ref.className = \"rc-card-ref tnum\";\n ref.textContent = \"· \" + (c.toLine > c.fromLine ? `lines ${c.fromLine}-${c.toLine}` : `line ${c.fromLine}`);\n const chip = document.createElement(\"span\");\n chip.className = \"rc-card-chip\";\n chip.textContent = \"pending\";\n const del = document.createElement(\"button\");\n del.className = \"rc-card-del\";\n del.title = \"Delete comment\";\n del.appendChild(svgIcon(TRASH, 12));\n del.addEventListener(\"click\", () => onDelete(c.id));\n head.append(avatar, who, ref, chip, del);\n body.appendChild(head);\n\n const note = document.createElement(\"div\");\n note.className = \"rc-card-note\";\n note.textContent = c.note;\n body.appendChild(note);\n return root;\n}\n\n/** Inline composer — identical structure/classes to the CM widget. */\nexport function buildComposer(\n from: number,\n to: number,\n cb: { save(note: string): void; cancel(): void },\n): HTMLElement {\n const root = document.createElement(\"div\");\n root.className = \"rc-composer\";\n const bar = document.createElement(\"span\");\n bar.className = \"rc-composer-bar\";\n root.appendChild(bar);\n const body = document.createElement(\"div\");\n body.className = \"rc-composer-body\";\n root.appendChild(body);\n\n const head = document.createElement(\"div\");\n head.className = \"rc-composer-head\";\n const icon = svgIcon(CHAT, 12);\n icon.classList.add(\"rc-composer-icon\");\n const label = document.createElement(\"span\");\n label.className = \"rc-composer-label\";\n const range = to > from ? `lines ${from}–${to}` : `line ${from}`;\n label.innerHTML = `Comment on <b>${range}</b>`;\n const tag = document.createElement(\"span\");\n tag.className = \"rc-composer-tag up\";\n tag.textContent = \"review · queued for agent\";\n head.append(icon, label, tag);\n body.appendChild(head);\n\n const ta = document.createElement(\"textarea\");\n ta.rows = 3;\n ta.placeholder = \"Leave a note for the agent — what to change and why…\";\n ta.className = \"rc-composer-ta\";\n body.appendChild(ta);\n\n const foot = document.createElement(\"div\");\n foot.className = \"rc-composer-foot\";\n const hint = document.createElement(\"span\");\n hint.className = \"rc-composer-hint\";\n hint.innerHTML = `<span class=\"kbd\">⌘</span> <span class=\"kbd\">↵</span> to save`;\n const spacer = document.createElement(\"span\");\n spacer.style.marginLeft = \"auto\";\n // This widget lives OUTSIDE Angular (Monaco owns the DOM), so it cannot use\n // <kj-button>. kouji's button skin is pure class + data-attribute CSS, so the\n // native elements opt into it directly — same control ladder as the app,\n // no second button recipe. (The old .btn/.primary/.ghost-hair classes died\n // with the migration and left these two unstyled.)\n const cancel = document.createElement(\"button\");\n cancel.className = \"kj-button rc-composer-btn\";\n cancel.dataset[\"variant\"] = \"outline\";\n cancel.dataset[\"size\"] = \"xs\";\n cancel.textContent = \"Cancel\";\n const save = document.createElement(\"button\");\n save.className = \"kj-button rc-composer-btn\";\n save.dataset[\"variant\"] = \"default\";\n save.dataset[\"size\"] = \"xs\";\n save.textContent = \"Save\";\n save.disabled = true;\n foot.append(hint, spacer, cancel, save);\n body.appendChild(foot);\n\n const doSave = (): void => {\n const note = ta.value.trim();\n if (!note) return;\n cb.save(note);\n };\n ta.addEventListener(\"input\", () => (save.disabled = !ta.value.trim()));\n ta.addEventListener(\"keydown\", (e) => {\n if ((e.metaKey || e.ctrlKey) && e.key === \"Enter\") doSave();\n if (e.key === \"Escape\") cb.cancel();\n });\n cancel.addEventListener(\"click\", () => cb.cancel());\n save.addEventListener(\"click\", doSave);\n setTimeout(() => ta.focus(), 0);\n return root;\n}\n\n// ----- global styles (Monaco decorations take class names — inject once) -----\n\nconst STYLE_ID = \"rc-monaco-styles\";\nfunction ensureStyles(): void {\n if (document.getElementById(STYLE_ID)) return;\n const style = document.createElement(\"style\");\n style.id = STYLE_ID;\n style.textContent = `\n.monaco-editor .rc-covered { box-shadow: inset 2px 0 0 var(--ui-ind); }\n.monaco-editor .rc-selected { background: var(--ui-sel); }\n.monaco-editor .rc-glyph-plus {\n cursor: grab; border-radius: 4px; background: var(--ui-fill);\n -webkit-mask: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"black\" stroke-width=\"2.4\" stroke-linecap=\"round\"><path d=\"M5 12h14\"/><path d=\"M12 5v14\"/></svg>') center / 11px 11px no-repeat, linear-gradient(#000 0 0);\n -webkit-mask-composite: xor; mask-composite: exclude;\n transform: scale(0.78);\n}\n.monaco-editor .rc-glyph-anchor {\n border-radius: 4px; background: var(--ui-fill);\n -webkit-mask: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"black\" stroke-width=\"2.4\" stroke-linejoin=\"round\"><path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"/></svg>') center / 10px 10px no-repeat, linear-gradient(#000 0 0);\n -webkit-mask-composite: xor; mask-composite: exclude;\n transform: scale(0.72);\n}\n.monaco-editor .rc-glyph-dot {\n background: radial-gradient(circle at center, var(--ui-line) 0 2.5px, transparent 3px);\n}\n/* Monaco's view-zone layer is display-only by default — the comment cards and\n composer are interactive, so their zones must accept pointer events and\n stack above the text layers. */\n.monaco-editor .rc-zone {\n font-family: var(--font-sans, inherit);\n pointer-events: auto;\n position: relative;\n z-index: 10;\n}\n.rc-card { display: flex; background: var(--panel); border-top: 1px solid var(--hair); border-bottom: 1px solid var(--hair); }\n.rc-card-bar { width: 24px; flex: none; background: var(--ui-sel); box-shadow: inset 2px 0 0 var(--ui-ind); }\n.rc-card-body { flex: 1; padding: 9px 14px 9px 12px; min-width: 0; }\n.rc-card-head { display: flex; align-items: center; gap: 7px; }\n.rc-card-avatar { width: 17px; height: 17px; flex: none; border-radius: 50%; display: grid; place-items: center; font-size: var(--fs-micro); font-weight: var(--fw-strong); color: var(--ui-ink); background: var(--ui-sel); border: 1px solid var(--ui-sel-2); }\n.rc-card-who { font-size: var(--fs-badge); color: var(--ink-2); }\n.rc-card-ref { font-size: var(--fs-micro); color: var(--ink-4); }\n.rc-card-chip { font-size: var(--fs-micro); padding: 0 5px; color: var(--ui-ink); border: 1px solid var(--ui-sel-2); border-radius: 999px; }\n.rc-card-del { margin-left: auto; background: transparent; border: none; color: var(--ink-4); cursor: pointer; display: flex; padding: 3px; border-radius: 3px; }\n.rc-card-del:hover { color: var(--code-del-ink); }\n.rc-card-note { font-size: var(--fs-badge); color: var(--ink); line-height: 1.5; margin-top: 5px; white-space: pre-wrap; word-break: break-word; }\n.rc-composer { display: flex; background: var(--ui-sel); border-top: 1px solid var(--ui-sel-2); border-bottom: 1px solid var(--hair); }\n.rc-composer-bar { width: 24px; flex: none; background: var(--ui-sel-2); }\n.rc-composer-body { flex: 1; padding: 10px 14px 10px 12px; }\n.rc-composer-head { display: flex; align-items: center; gap: 7px; margin-bottom: 7px; }\n.rc-composer-icon { color: var(--ui-ink); }\n.rc-composer-label { font-size: var(--fs-micro); color: var(--ink-2); }\n.rc-composer-label b { color: var(--ink); }\n.rc-composer-tag { margin-left: auto; font-size: var(--fs-micro); color: var(--ink-4); }\n.rc-composer-ta { width: 100%; resize: vertical; min-height: 56px; background: var(--panel-2); border: 1px solid var(--hair); border-radius: var(--r-sm); padding: 8px 10px; color: var(--ink); font-family: var(--font-mono); font-size: var(--fs-badge); line-height: 1.55; outline: none; }\n.rc-composer-foot { display: flex; align-items: center; gap: 8px; margin-top: 8px; }\n.rc-composer-hint { font-size: var(--fs-micro); color: var(--ink-4); }\n/* geometry comes from .kj-button[data-size=\"xs\"]; nothing to add */\n`;\n document.head.appendChild(style);\n}\n\n// -------------------------------------------------------------- controller ----\n\ninterface DragState {\n anchor: number;\n current: number;\n}\ninterface ComposerState {\n from: number;\n to: number;\n}\n\nexport function attachReviewComments(\n monaco: MonacoApi,\n editor: monacoApi.editor.IStandaloneCodeEditor,\n host: CommentHost,\n): MonacoReviewApi {\n ensureStyles();\n const MouseTargetType = monaco.editor.MouseTargetType;\n\n let comments: ReviewCommentLite[] = [];\n let drag: DragState | null = null;\n let composer: ComposerState | null = null;\n let hover = 0;\n let disposed = false;\n\n const decorations = editor.createDecorationsCollection();\n let zoneIds: string[] = [];\n /** Zones whose height must be measured after Monaco mounts their DOM. */\n let pendingMeasure: { id: string; node: HTMLElement; zone: { heightInPx: number } }[] = [];\n\n const docLines = (): number => editor.getModel()?.getLineCount() ?? 0;\n\n function renderDecorations(): void {\n const model = editor.getModel();\n if (!model) return;\n const lines = model.getLineCount();\n const decos: monacoApi.editor.IModelDeltaDecoration[] = [];\n const push = (n: number, options: monacoApi.editor.IModelDecorationOptions): void => {\n decos.push({ range: new monaco.Range(n, 1, n, 1), options });\n };\n for (const c of clampComments(comments, lines)) {\n for (let n = c.fromLine; n <= c.toLine; n++) {\n push(n, {\n isWholeLine: true,\n className: \"rc-covered\",\n glyphMarginClassName: n === c.fromLine ? \"rc-glyph-anchor\" : \"rc-glyph-dot\",\n });\n }\n }\n if (drag) {\n const a = Math.max(1, Math.min(drag.anchor, drag.current));\n const b = Math.min(lines, Math.max(drag.anchor, drag.current));\n for (let n = a; n <= b; n++) push(n, { isWholeLine: true, className: \"rc-selected\" });\n }\n if (composer && composer.from >= 1 && composer.from <= lines) {\n const to = Math.min(composer.to, lines);\n for (let n = composer.from; n <= to; n++) push(n, { isWholeLine: true, className: \"rc-selected\" });\n }\n // hover + only when the line is not covered and nothing else owns the gutter\n if (hover >= 1 && hover <= lines && !drag && !composer) {\n const covered = clampComments(comments, lines).some((c) => hover >= c.fromLine && hover <= c.toLine);\n if (!covered) push(hover, { isWholeLine: false, glyphMarginClassName: \"rc-glyph-plus\" });\n }\n decorations.set(decos);\n }\n\n function renderZones(): void {\n const lines = docLines();\n pendingMeasure = [];\n editor.changeViewZones((accessor) => {\n for (const id of zoneIds) accessor.removeZone(id);\n zoneIds = [];\n const addZone = (afterLine: number, node: HTMLElement): void => {\n const wrap = document.createElement(\"div\");\n wrap.className = \"rc-zone\";\n wrap.appendChild(node);\n const zone = { afterLineNumber: afterLine, heightInPx: 96, domNode: wrap };\n const id = accessor.addZone(zone);\n zoneIds.push(id);\n pendingMeasure.push({ id, node: wrap, zone });\n };\n for (const c of clampComments(comments, lines)) {\n addZone(c.toLine, buildCard(c, (cid) => host.remove(cid)));\n }\n if (composer && composer.from >= 1 && composer.from <= lines) {\n const to = Math.min(composer.to, lines);\n addZone(\n to,\n buildComposer(composer.from, to, {\n save: (note) => {\n host.save(composer!.from, Math.min(composer!.to, docLines()), note);\n setComposer(null);\n },\n cancel: () => setComposer(null),\n }),\n );\n }\n });\n // zones need explicit pixel heights — measure the real DOM, then re-layout\n requestAnimationFrame(() => {\n if (disposed || !pendingMeasure.length) return;\n const toFix = pendingMeasure.filter((p) => {\n const h = p.node.offsetHeight;\n if (h > 0 && Math.abs(h - p.zone.heightInPx) > 1) {\n p.zone.heightInPx = h;\n return true;\n }\n return false;\n });\n if (toFix.length) {\n editor.changeViewZones((accessor) => {\n for (const p of toFix) accessor.layoutZone(p.id);\n });\n }\n });\n }\n\n function renderAll(): void {\n renderDecorations();\n renderZones();\n }\n\n function setComposer(next: ComposerState | null): void {\n composer = next;\n renderAll();\n }\n\n function startDrag(anchor: number): void {\n drag = { anchor, current: anchor };\n renderDecorations();\n const move = (e: MouseEvent): void => {\n const t = editor.getTargetAtClientPoint(e.clientX, e.clientY);\n const line = t?.position?.lineNumber;\n if (line && drag && drag.current !== line) {\n drag = { ...drag, current: line };\n renderDecorations();\n }\n };\n const up = (): void => {\n window.removeEventListener(\"mousemove\", move);\n window.removeEventListener(\"mouseup\", up);\n const d = drag;\n drag = null;\n if (d) setComposer({ from: Math.min(d.anchor, d.current), to: Math.max(d.anchor, d.current) });\n else renderAll();\n };\n window.addEventListener(\"mousemove\", move);\n window.addEventListener(\"mouseup\", up);\n }\n\n const subs: monacoApi.IDisposable[] = [\n editor.onMouseMove((e) => {\n if (drag) return; // drag owns the pointer\n const n = e.target.position?.lineNumber ?? 0;\n if (n !== hover) {\n hover = n;\n renderDecorations();\n }\n }),\n editor.onMouseLeave(() => {\n if (hover !== 0 && !drag) {\n hover = 0;\n renderDecorations();\n }\n }),\n editor.onMouseDown((e) => {\n if (e.target.type !== MouseTargetType.GUTTER_GLYPH_MARGIN) return;\n const n = e.target.position?.lineNumber;\n if (!n || composer) return;\n const covered = clampComments(comments, docLines()).some((c) => n >= c.fromLine && n <= c.toLine);\n if (covered) return;\n e.event.preventDefault();\n e.event.stopPropagation();\n startDrag(n);\n }),\n // edits move lines under comments — re-clamp and re-anchor zones\n editor.onDidChangeModelContent(() => renderAll()),\n ];\n\n return {\n setComments(next) {\n comments = next;\n renderAll();\n },\n openComposer(fromLine, toLine) {\n setComposer({ from: Math.min(fromLine, toLine), to: Math.max(fromLine, toLine) });\n },\n dispose() {\n disposed = true;\n for (const s of subs) s.dispose();\n decorations.clear();\n editor.changeViewZones((accessor) => {\n for (const id of zoneIds) accessor.removeZone(id);\n });\n zoneIds = [];\n },\n };\n}\n","import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, ViewEncapsulation, booleanAttribute, computed, effect, inject, input, output, signal, untracked, viewChild } from \"@angular/core\";\nimport type * as monacoApi from \"monaco-editor\";\n\nimport { OrrSpinnerComponent } from \"../containers/containers.components\";\nimport type { DiffComment } from \"../diff/diff.component\";\nimport { type MonacoApi, applyMonacoTheme, diffOverviewRulerOptions, loadMonaco, monacoLanguageFor, monacoScrollbarOptions, tokenHex } from \"./monaco\";\nimport { type MonacoReviewApi, attachReviewComments } from \"./review-comments.monaco\";\n\n/** The page's theme: light or dark by its code ground (`--well`), whatever the theme is called (graphite, paper, …). */\nexport function pageTheme(host: HTMLElement): \"dark\" | \"light\" {\n const hex = tokenHex(getComputedStyle(host), \"--well\");\n if (hex && /^#[0-9a-f]{6}/i.test(hex)) {\n const [r, g, b] = [1, 3, 5].map((i) => parseInt(hex.slice(i, i + 2), 16));\n return 0.2126 * r! + 0.7152 * g! + 0.0722 * b! > 128 ? \"light\" : \"dark\";\n }\n return globalThis.matchMedia?.(\"(prefers-color-scheme: light)\").matches ? \"light\" : \"dark\";\n}\n\n/** Handed to `(ready)` each time an editor is built, for what only one app adds (symbol navigation, blame, saved scroll). */\nexport interface MonacoDiffReady {\n monaco: MonacoApi;\n /** The diff editor; `null` for a new file, which shows in a plain editor. */\n diff: monacoApi.editor.IStandaloneDiffEditor | null;\n /** The editor holding the new side (the diff's modified editor, or the plain one). */\n editor: monacoApi.editor.IStandaloneCodeEditor;\n}\n\n/**\n * `<orr-monaco-diff [before]=\"old\" [after]=\"new\" path=\"src/a.ts\" />`: a changed file, the one way every\n * Orrery app shows one (IDE mode, Agent mode, Cloud, the review dialog) — Monaco's diff, read-only,\n * unchanged regions folded away, opened on its first change, coloured from the app's tokens. Inline by\n * default with one column of line numbers; `sideBySide` puts the two sides next to each other. A new\n * file (`before` empty) shows whole, every line marked added. New text for the same `path` refreshes in\n * place (scroll kept); a new `path` opens on its first change. Monaco loads on first use; until then (or\n * if it cannot) the new text shows plain.\n */\n@Component({\n selector: \"orr-monaco-diff\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n // Monaco builds its DOM outside Angular's view: these rules must reach it.\n encapsulation: ViewEncapsulation.None,\n imports: [OrrSpinnerComponent],\n host: { class: \"orr-monaco-diff\", \"[attr.aria-busy]\": \"busy() || null\" },\n template: `\n <div #view class=\"orr-md__view\"></div>\n @if (busy()) { <orr-spinner class=\"orr-md__spin\" size=\"lg\" label=\"Loading the file\" /> }\n `,\n styles: [\n `\n .orr-monaco-diff { display: block; position: relative; min-height: 0; background: var(--well); }\n .orr-md__view { position: absolute; inset: 0; font: 12px/18px var(--font-mono); white-space: pre; overflow: auto; }\n .orr-md__spin { position: absolute; inset: 0; margin: auto; color: var(--ink-3); z-index: 1; }\n .orr-monaco-diff .orr-md__current { box-shadow: inset 2px 0 0 var(--ui-ind); }\n .orr-monaco-diff .orr-md__note::after { content: \"\"; position: absolute; left: 4px; top: 50%; width: 6px; height: 6px; margin-top: -3px; border-radius: 50%; background: var(--ui-ind); }\n `,\n ],\n})\nexport class OrrMonacoDiffComponent {\n readonly before = input(\"\");\n readonly after = input(\"\");\n /** The file: picks the grammar; a new path opens on its first change. */\n readonly path = input(\"\");\n /** `null`: the page's. */\n readonly theme = input<\"dark\" | \"light\" | null>(null);\n /** The two sides next to each other (IDE mode's diff tab) instead of inline. */\n readonly sideBySide = input(false, { transform: booleanAttribute });\n /** Line comments as in IDE mode: hover \"+\" in the margin, drag a range, write. */\n readonly commentable = input(false, { transform: booleanAttribute });\n /** New-side lines that already carry a comment (marked in the margin). */\n readonly notes = input<readonly number[]>([]);\n /** A new-side line to bring to the centre and mark (the review's current change); `null`: none. */\n readonly reveal = input<number | null>(null);\n /** The new side's model URI (an app's symbol navigation keys on it); `null`: Monaco's own. */\n readonly modelUri = input<string | null>(null);\n /** The host is still fetching the file: the spinner shows, centred, until the text comes. */\n readonly loading = input(false, { transform: booleanAttribute });\n /** A comment written on the new side. */\n readonly comment = output<DiffComment>();\n readonly ready = output<MonacoDiffReady>();\n\n private readonly view = viewChild.required<ElementRef<HTMLElement>>(\"view\");\n /** Monaco is loading or building the editor. */\n private readonly building = signal(true);\n protected readonly busy = computed(() => this.loading() || this.building());\n private monaco: MonacoApi | null = null;\n private diff: monacoApi.editor.IStandaloneDiffEditor | null = null;\n /** A new file: no old side to diff against (Monaco draws an empty old side as a removed line 1). */\n private added: monacoApi.editor.IStandaloneCodeEditor | null = null;\n private addedMarks: monacoApi.editor.IEditorDecorationsCollection | null = null;\n private marks: monacoApi.editor.IEditorDecorationsCollection | null = null;\n private comments: MonacoReviewApi | null = null;\n /** What the editor shows now: a refresh of the same file keeps its scroll. */\n private shown: { path: string; sideBySide: boolean; uri: string | null } | null = null;\n private token = 0;\n\n constructor() {\n effect(() => {\n const before = this.before();\n const after = this.after();\n const path = this.path();\n const sideBySide = this.sideBySide();\n const uri = this.modelUri();\n const el = this.view().nativeElement;\n if (this.loading()) return;\n untracked(() => void this.show(el, before, after, path, sideBySide, uri));\n });\n effect(() => {\n const theme = this.theme();\n if (this.monaco) applyMonacoTheme(this.monaco, theme ?? pageTheme(this.view().nativeElement));\n });\n effect(() => {\n const reveal = this.reveal();\n const notes = this.notes();\n untracked(() => this.mark(reveal, notes, true));\n });\n inject(DestroyRef).onDestroy(() => {\n this.token++;\n this.reset();\n });\n }\n\n private editor(): monacoApi.editor.IStandaloneCodeEditor | null {\n return this.added ?? this.diff?.getModifiedEditor() ?? null;\n }\n\n private async show(el: HTMLElement, before: string, after: string, path: string, sideBySide: boolean, uri: string | null): Promise<void> {\n const token = ++this.token;\n let monaco: MonacoApi;\n let lang: string;\n try {\n monaco = await loadMonaco();\n lang = await monacoLanguageFor(path);\n } catch {\n if (token === this.token && !this.editor()) el.textContent = after;\n if (token === this.token) this.building.set(false);\n return;\n }\n if (token !== this.token) return;\n this.monaco = monaco;\n applyMonacoTheme(monaco, this.theme() ?? pageTheme(el));\n const isNew = before === \"\";\n const same = this.shown?.path === path && this.shown.sideBySide === sideBySide && this.shown.uri === uri && (isNew ? !!this.added : !!this.diff);\n if (same) {\n this.refresh(before, after);\n return;\n }\n this.reset();\n el.textContent = \"\";\n this.building.set(true);\n this.shown = { path, sideBySide, uri };\n const common: monacoApi.editor.IEditorOptions = {\n readOnly: true,\n wordWrap: sideBySide ? \"off\" : \"on\",\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n automaticLayout: true,\n fontSize: 12,\n lineHeight: 18,\n renderLineHighlight: \"none\",\n renderWhitespace: \"none\",\n stickyScroll: { enabled: false },\n fixedOverflowWidgets: true,\n ...monacoScrollbarOptions(),\n glyphMargin: this.commentable() || this.notes().length > 0,\n };\n const modified = monaco.editor.createModel(after, lang, uri ? monaco.Uri.parse(uri) : undefined);\n if (isNew) {\n const editor = (this.added = monaco.editor.create(el, { ...common, model: modified }));\n this.markAdded();\n this.attachComments(monaco, editor);\n this.ready.emit({ monaco, diff: null, editor });\n this.mark(this.reveal(), this.notes(), true);\n if (this.reveal() === null) editor.revealLine(1);\n this.building.set(false);\n return;\n }\n const diff = (this.diff = monaco.editor.createDiffEditor(el, {\n ...common,\n renderSideBySide: sideBySide,\n useInlineViewWhenSpaceIsLimited: false,\n hideUnchangedRegions: { enabled: true, contextLineCount: 3, minimumLineCount: 4 },\n ...diffOverviewRulerOptions(),\n }));\n // inline: one column of line numbers (the new file's), not the old side's beside it\n if (!sideBySide) diff.getOriginalEditor().updateOptions({ lineNumbers: \"off\" });\n diff.setModel({ original: monaco.editor.createModel(before, lang), modified });\n this.attachComments(monaco, diff.getModifiedEditor());\n this.ready.emit({ monaco, diff, editor: diff.getModifiedEditor() });\n this.mark(this.reveal(), this.notes(), false);\n // shortcut: a diff the worker never answers still drops the spinner after 3 s (the text shows, uncoloured)\n // keyed on the editor, not the token: a same-file refresh takes a new token and must not strand the spinner\n setTimeout(() => this.diff === diff && this.building.set(false), 3000);\n // The diff computes in the worker: open on the first change once it lands (unless a line is asked for).\n const once = diff.onDidUpdateDiff(() => {\n once.dispose();\n if (this.diff !== diff) return;\n this.building.set(false);\n const want = this.reveal();\n const first = diff.getLineChanges()?.[0];\n const line = want ?? (first ? Math.max(1, first.modifiedStartLineNumber) : null);\n if (line !== null) diff.getModifiedEditor().revealLineInCenter(line);\n });\n }\n\n /** New text for the file on show: written into the live models (value-guarded), scroll kept. */\n private refresh(before: string, after: string): void {\n if (this.added) {\n const m = this.added.getModel();\n if (m && m.getValue() !== after) {\n m.setValue(after);\n this.markAdded();\n }\n return;\n }\n const m = this.diff?.getModel();\n if (!m) return;\n if (m.original.getValue() !== before) m.original.setValue(before);\n if (m.modified.getValue() !== after) m.modified.setValue(after);\n }\n\n private markAdded(): void {\n const editor = this.added;\n const model = editor?.getModel();\n if (!editor || !model) return;\n this.addedMarks?.clear();\n // every line is new: Monaco's own inserted-line colours, as the diff draws them\n this.addedMarks = editor.createDecorationsCollection([\n { range: model.getFullModelRange(), options: { isWholeLine: true, className: \"line-insert\", linesDecorationsClassName: \"gutter-insert\" } },\n ]);\n }\n\n /** The current change (a bar beside it, centred when `scroll`) and the commented lines. */\n private mark(reveal: number | null, notes: readonly number[], scroll: boolean): void {\n const editor = this.editor();\n if (!editor) return;\n const ds: monacoApi.editor.IModelDeltaDecoration[] = notes.map((n) => ({\n range: { startLineNumber: n, startColumn: 1, endLineNumber: n, endColumn: 1 },\n options: { isWholeLine: true, glyphMarginClassName: \"orr-md__note\" },\n }));\n if (reveal !== null) ds.push({ range: { startLineNumber: reveal, startColumn: 1, endLineNumber: reveal, endColumn: 1 }, options: { isWholeLine: true, className: \"orr-md__current\" } });\n this.marks?.clear();\n this.marks = editor.createDecorationsCollection(ds);\n if (scroll && reveal !== null) editor.revealLineInCenter(reveal);\n }\n\n private attachComments(monaco: MonacoApi, editor: monacoApi.editor.IStandaloneCodeEditor): void {\n if (!this.commentable()) return;\n this.comments = attachReviewComments(monaco, editor, {\n save: (from, to, note) => {\n const model = editor.getModel();\n const lines: string[] = [];\n for (let n = from; n <= to; n++) lines.push(model?.getLineContent(n) ?? \"\");\n this.comment.emit({ path: this.path(), line: from, to, side: \"new\", text: note, index: -1, quote: lines[0] ?? \"\", lines });\n // the host queues it (the review); the editor keeps no card of its own\n this.comments?.setComments([]);\n },\n remove: () => undefined,\n });\n }\n\n /** Drops whichever editor is up (diff or added) with its models and comments. */\n private reset(): void {\n this.comments?.dispose();\n this.comments = null;\n this.marks = null;\n this.addedMarks = null;\n this.shown = null;\n const m = this.diff?.getModel();\n this.diff?.dispose();\n m?.original.dispose();\n m?.modified.dispose();\n this.diff = null;\n const a = this.added?.getModel();\n this.added?.dispose();\n a?.dispose();\n this.added = null;\n }\n}\n","import { computed, signal } from \"@angular/core\";\n\nimport { type DiffLine, changeStarts, sameLines } from \"../diff/diff-model\";\nimport { type ChangedFile, type FileListMode, fileOrder, sameChangedFile } from \"./file-tree\";\n\n/** A changed file with its diff: ideally every line of the file (`fileLines`), so a review can show it whole. */\nexport interface ReviewFile extends ChangedFile {\n lines: readonly DiffLine[];\n /** Both sides of the file, when the host read them: the changes view then shows IDE mode's Monaco diff. */\n before?: string;\n after?: string;\n /** Its two sides are being fetched: the view shows the spinner, not the transcript's lines. */\n reading?: boolean;\n}\n\n/**\n * Two review lists with the same files and the same lines. The `equal` of a host's changes signal\n * (and the panel's own): a session's stream or a worktree poll rebuilds the list with nothing\n * changed, and an equal list must not re-render the tree or re-highlight the diff.\n */\nexport function sameReviewFiles(a: readonly ReviewFile[], b: readonly ReviewFile[]): boolean {\n if (a === b) return true;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n const x = a[i]!;\n const y = b[i]!;\n if (x !== y && !(sameChangedFile(x, y) && sameLines(x.lines, y.lines) && x.before === y.before && x.after === y.after && x.reading === y.reading)) return false;\n }\n return true;\n}\n\n/**\n * Where a review stands: which file, which change in it. Next / previous change walks across files\n * (past the last change of a file to the first of the next, wrapping); next / previous file wraps.\n * Files are walked in the order the list shows them.\n */\nexport class ChangesReview {\n readonly files = signal<readonly ReviewFile[]>([]);\n readonly mode = signal<FileListMode>(\"tree\");\n readonly fileIndex = signal(0);\n readonly changeIndex = signal(0);\n\n /** The files in list order. */\n readonly ordered = computed<ReviewFile[]>(() => {\n const byPath = new Map(this.files().map((f) => [f.path, f]));\n return fileOrder(this.files(), this.mode()).map((p) => byPath.get(p)!);\n });\n readonly current = computed<ReviewFile | null>(() => this.ordered()[Math.min(this.fileIndex(), this.ordered().length - 1)] ?? null);\n readonly starts = computed(() => changeStarts(this.current()?.lines ?? []));\n /** The current change's first line index in the current file, -1 when it has none. */\n readonly currentLine = computed(() => this.starts()[Math.min(this.changeIndex(), this.starts().length - 1)] ?? -1);\n /** `file 2 of 5 · change 1 of 3`. */\n readonly position = computed(() => {\n const n = this.ordered().length;\n if (!n) return \"\";\n const m = this.starts().length;\n return `file ${this.fileIndex() + 1} of ${n}` + (m ? ` · change ${Math.min(this.changeIndex(), m - 1) + 1} of ${m}` : \" · no line changes\");\n });\n\n constructor(files: readonly ReviewFile[] = [], mode: FileListMode = \"tree\", path: string | null = null) {\n this.files.set(files);\n this.mode.set(mode);\n if (path) this.select(path);\n }\n\n /** Opens `path` at its first change. */\n select(path: string): void {\n const i = this.ordered().findIndex((f) => f.path === path);\n if (i < 0) return;\n this.fileIndex.set(i);\n this.changeIndex.set(0);\n }\n\n stepFile(dir: 1 | -1): void {\n const n = this.ordered().length;\n if (!n) return;\n this.fileIndex.set((this.fileIndex() + dir + n) % n);\n this.changeIndex.set(0);\n }\n\n stepChange(dir: 1 | -1): void {\n const fs = this.ordered();\n const n = fs.length;\n if (!n) return;\n const count = (i: number) => changeStarts(fs[i]!.lines).length;\n const c = this.changeIndex() + dir;\n if (c >= 0 && c < count(this.fileIndex())) {\n this.changeIndex.set(c);\n return;\n }\n // the next / previous file that has a change (the current one again after a full turn)\n for (let k = 1; k <= n; k++) {\n const i = (this.fileIndex() + dir * k + n * k) % n;\n const m = count(i);\n if (m) {\n this.fileIndex.set(i);\n this.changeIndex.set(dir > 0 ? 0 : m - 1);\n return;\n }\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, type Signal, computed, inject, signal } from \"@angular/core\";\nimport { KjDialogRef } from \"@kouji-ui/core\";\n\nimport { OrrDialogFootDirective, OrrDialogActionsDirective, OrrDialogShellComponent, OrrDialogTitleDirective } from \"../containers/dialog-shell.component\";\nimport { diffStat } from \"../diff/diff-model\";\nimport { type DiffComment, OrrDiffComponent } from \"../diff/diff.component\";\nimport type { DiffLine } from \"../diff/diff-model\";\nimport { OrrMonacoDiffComponent } from \"../code/monaco-diff.component\";\nimport { OrrIconComponent } from \"../icon/icon.component\";\nimport { OrrKbdComponent } from \"../status/kbd.component\";\nimport { ChangesReview } from \"./changes-review\";\nimport { OrrFileTreeComponent } from \"./file-tree.component\";\n\n/** What the review dialog shows and where its comments go. */\nexport interface ChangesExpandContext {\n review: ChangesReview;\n /** `Review · stripe-retry`. */\n title: string;\n commentable: boolean;\n /** The comment box label before `path:Lnn` (default `Comment on`). */\n commentLabel?: string;\n /** Commented line numbers per path: a snapshot, or a signal so a comment added in the dialog shows at once. */\n notes: Readonly<Record<string, readonly number[]>> | Signal<Readonly<Record<string, readonly number[]>>>;\n /** What the diff says for a file with no lines yet. */\n emptyText?: (path: string) => string;\n onComment: (c: DiffComment) => void;\n}\n\n/** The VCS letter as the review head names it. */\nconst STATE_WORD: Record<string, string> = { A: \"Added\", M: \"Modified\", D: \"Deleted\", R: \"Renamed\", C: \"Conflicted\", U: \"Conflicted\", \"?\": \"Untracked\", \"!\": \"Ignored\" };\n\n/** The new-side line of the change starting at `i`: its first line there, else where a removal sat. */\nexport function newSideLine(lines: readonly DiffLine[], i: number): number {\n for (let k = i; k < lines.length; k++) if (lines[k]!.b !== undefined) return lines[k]!.b!;\n for (let k = i - 1; k >= 0; k--) if (lines[k]!.b !== undefined) return lines[k]!.b!;\n return 1;\n}\n\n/** True when a key event comes from a place the person types in. */\nexport function isTyping(e: KeyboardEvent): boolean {\n const t = e.target as HTMLElement | null;\n const tag = t?.tagName?.toLowerCase();\n return tag === \"input\" || tag === \"textarea\" || tag === \"select\" || !!t?.isContentEditable;\n}\n\n/**\n * The Expand dialog of `orr-changes-panel` (App-00): the file tree on the left, the whole file with\n * its changes on the right, the current change marked. Keys (scoped to the dialog): N / J next change\n * and P / K previous, across files; ] / [ next / previous file; Esc (kouji's overlay) closes.\n * Opened by the panel through `KjDialogService`; `bind()` hands it the review.\n */\n@Component({\n selector: \"orr-changes-expand\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n OrrDialogShellComponent,\n OrrDialogActionsDirective,\n OrrDialogFootDirective,\n OrrDialogTitleDirective,\n OrrFileTreeComponent,\n OrrDiffComponent,\n OrrIconComponent,\n OrrMonacoDiffComponent,\n OrrKbdComponent,\n ],\n host: { \"(keydown)\": \"onKey($event)\" },\n styles: [\n `\n .orr-expand { display: grid; grid-template-columns: 290px minmax(0, 1fr); gap: 0; height: min(72vh, 700px); margin: 0 -18px -14px; border-top: 1px solid var(--hair); border-bottom: 1px solid var(--hair); }\n .orr-expand > orr-filetree { border-right: 1px solid var(--hair); min-height: 0; }\n .orr-expand__file { display: flex; flex-direction: column; min-width: 0; min-height: 0; }\n .orr-expand__head { flex: none; padding: var(--sp-4) var(--sp-6); background: var(--panel); border-bottom: 1px solid var(--hair); }\n .orr-expand__facts { display: flex; gap: var(--sp-4); font-size: var(--fs-badge); font-variant-numeric: tabular-nums; }\n .orr-expand__path { display: flex; align-items: center; gap: var(--sp-3); margin-top: var(--sp-1); color: var(--ink-2); font-size: var(--fs-meta); min-width: 0; }\n .orr-expand__path span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .orr-expand__file > orr-diff, .orr-expand__file > orr-monaco-diff { flex: 1; min-height: 0; }\n .orr-expand__where { font-family: var(--font-mono); font-size: var(--fs-meta); color: var(--ink-3); overflow: hidden; text-overflow: ellipsis; min-width: 0; }\n .orr-expand__pos { font-size: var(--fs-meta); color: var(--ink-4); }\n .orr-expand__legend { display: flex; flex-wrap: wrap; gap: 14px; margin-right: auto; color: var(--ink-3); font-size: var(--fs-meta); }\n .orr-expand__legend > span, .orr-expand__esc { display: inline-flex; align-items: center; gap: var(--sp-2); }\n .orr-expand__esc { color: var(--ink-3); font-size: var(--fs-meta); }\n `,\n ],\n template: `\n @if (ctx(); as c) {\n <orr-dialog-shell size=\"xl\" [heading]=\"c.title\">\n <ng-container orrDialogTitle>\n @if (file(); as f) {\n <span class=\"orr-expand__where\" data-testid=\"expand-path\">{{ f.path }}</span>\n <span class=\"orr-expand__pos\" data-testid=\"expand-pos\">{{ c.review.position() }}</span>\n }\n </ng-container>\n <button orrDialogActions type=\"button\" class=\"o-btn o-btn--outline o-btn--sm\" title=\"Previous file · [\" (click)=\"c.review.stepFile(-1)\">\n <orr-icon name=\"chevron-up\" size=\"sm\" />File<orr-kbd keys=\"[\" [inline]=\"true\" />\n </button>\n <button orrDialogActions type=\"button\" class=\"o-btn o-btn--outline o-btn--sm\" title=\"Next file · ]\" (click)=\"c.review.stepFile(1)\">\n <orr-icon name=\"chevron-down\" size=\"sm\" />File<orr-kbd keys=\"]\" [inline]=\"true\" />\n </button>\n <button orrDialogActions type=\"button\" class=\"o-btn o-btn--outline o-btn--sm\" title=\"Previous change · P\" (click)=\"c.review.stepChange(-1)\">\n <orr-icon name=\"arrow-up\" size=\"sm\" />Change<orr-kbd keys=\"P\" [inline]=\"true\" />\n </button>\n <button orrDialogActions type=\"button\" class=\"o-btn o-btn--outline o-btn--sm\" title=\"Next change · N\" (click)=\"c.review.stepChange(1)\">\n <orr-icon name=\"arrow-down\" size=\"sm\" />Change<orr-kbd keys=\"N\" [inline]=\"true\" />\n </button>\n <div class=\"orr-expand\">\n <orr-filetree [files]=\"c.review.files()\" [selected]=\"file()?.path ?? null\" (fileOpen)=\"c.review.select($event)\"\n [mode]=\"c.review.mode()\" (modeChange)=\"c.review.mode.set($event)\" />\n @if (file(); as f) {\n <div class=\"orr-expand__file\">\n <div class=\"orr-expand__head\" data-testid=\"expand-file-head\">\n <div class=\"orr-expand__facts\">\n <span style=\"color:var(--ink-3)\">{{ hunk() }}</span>\n <span [style.color]=\"stateInk(f.status)\">{{ stateWord(f.status) }}</span>\n @if (stat().add) { <span style=\"color:var(--code-add-ink)\">+{{ stat().add }}</span> }\n @if (stat().del) { <span style=\"color:var(--code-del-ink)\">−{{ stat().del }}</span> }\n </div>\n <div class=\"orr-expand__path\"><orr-icon name=\"file\" [size]=\"13\" /><span>{{ f.path }}</span></div>\n </div>\n @if (f.before !== undefined && f.after !== undefined) {\n <!-- the panel's Monaco, the current change brought to the centre -->\n <orr-monaco-diff [before]=\"f.before\" [after]=\"f.after\" [path]=\"f.path\" [reveal]=\"revealLine()\"\n [commentable]=\"c.commentable\" [notes]=\"notesFor(c, f.path)\" (comment)=\"c.onComment($event)\" />\n } @else if (f.reading) {\n <orr-monaco-diff [path]=\"f.path\" loading />\n } @else {\n <orr-diff [lines]=\"f.lines\" [file]=\"f.path\" whole [fileHead]=\"false\" [keys]=\"false\" [current]=\"c.review.currentLine()\"\n [commentable]=\"c.commentable\" [commentLabel]=\"c.commentLabel ?? 'Comment on'\" [notes]=\"notesFor(c, f.path)\"\n [emptyText]=\"c.emptyText?.(f.path) ?? 'No changes'\" (comment)=\"c.onComment($event)\" />\n }\n </div>\n }\n </div>\n <span orrDialogFoot class=\"orr-expand__legend\">\n <span><orr-kbd keys=\"N\" /><orr-kbd keys=\"P\" /> next / previous change, across files</span>\n <span><orr-kbd keys=\"]\" /><orr-kbd keys=\"[\" /> next / previous file</span>\n @if (c.commentable) { <span>click a line number to comment</span> }\n </span>\n <span orrDialogFoot class=\"orr-expand__esc\"><orr-kbd keys=\"Esc\" /> back to where you were</span>\n </orr-dialog-shell>\n }\n `,\n})\nexport class OrrChangesExpandComponent {\n readonly ctx = signal<ChangesExpandContext | null>(null);\n readonly file = computed(() => this.ctx()?.review.current() ?? null);\n readonly stat = computed(() => diffStat(this.file()?.lines ?? []));\n /** The whole file as one hunk: `@@ -1,old +1,new @@`. */\n readonly hunk = computed(() => {\n const ls = this.file()?.lines ?? [];\n const old = ls.filter((l) => l.t === \"ctx\" || l.t === \"del\").length;\n const neu = ls.filter((l) => l.t === \"ctx\" || l.t === \"add\").length;\n return `@@ -1,${old} +1,${neu} @@`;\n });\n /** The current change as a new-side line, for Monaco. */\n readonly revealLine = computed(() => {\n const i = this.ctx()?.review.currentLine() ?? -1;\n return i < 0 ? null : newSideLine(this.file()?.lines ?? [], i);\n });\n readonly ref = inject(KjDialogRef, { optional: true });\n\n protected notesFor(c: ChangesExpandContext, path: string): readonly number[] {\n const n = typeof c.notes === \"function\" ? c.notes() : c.notes;\n return n[path] ?? [];\n }\n\n protected stateWord(s: string | undefined): string {\n return STATE_WORD[s || \"M\"] ?? \"Modified\";\n }\n\n protected stateInk(s: string | undefined): string {\n return s === \"A\" ? \"var(--vcs-added)\" : s === \"D\" ? \"var(--vcs-deleted)\" : s === \"R\" ? \"var(--vcs-renamed)\" : \"var(--vcs-modified)\";\n }\n\n bind(ctx: ChangesExpandContext): void {\n this.ctx.set(ctx);\n }\n\n onKey(e: KeyboardEvent): void {\n const c = this.ctx();\n if (!c || e.ctrlKey || e.metaKey || e.altKey || isTyping(e)) return;\n const k = e.key.toLowerCase();\n if (k === \"n\" || k === \"j\") c.review.stepChange(1);\n else if (k === \"p\" || k === \"k\") c.review.stepChange(-1);\n else if (k === \"]\") c.review.stepFile(1);\n else if (k === \"[\") c.review.stepFile(-1);\n else return;\n e.preventDefault();\n e.stopPropagation();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n viewChild,\n} from \"@angular/core\";\nimport { KjDialogService } from \"@kouji-ui/core\";\n\nimport { diffStat } from \"../diff/diff-model\";\nimport { type DiffComment, OrrDiffComponent } from \"../diff/diff.component\";\nimport { OrrMonacoDiffComponent } from \"../code/monaco-diff.component\";\nimport { OrrIconComponent } from \"../icon/icon.component\";\nimport { OrrChangesExpandComponent, isTyping } from \"./changes-expand.component\";\nimport { ChangesReview, type ReviewFile, sameReviewFiles } from \"./changes-review\";\nimport { type FileListMode, fileOrder } from \"./file-tree\";\nimport { OrrFileTreeComponent } from \"./file-tree.component\";\n\n/**\n * The widths of the changes view beside a chat (plan 08 §6): `collapsed` (hidden; the app shows a\n * counter), `column` (the changed-file tree), `expanded` (the tree and the selected file's diff).\n */\nexport type ChangesState = \"collapsed\" | \"column\" | \"expanded\";\n\n/** collapsed → column → expanded → collapsed (Agent mode's C / ⌥C). */\nexport function nextChangesState(s: ChangesState): ChangesState {\n return s === \"collapsed\" ? \"column\" : s === \"column\" ? \"expanded\" : \"collapsed\";\n}\n\n/**\n * `<orr-changes-panel [files]=\"files\" [(state)]=\"state\" [(selected)]=\"path\" (comment)=\"…\" />`: the\n * changes column both ADE modes and Cloud reuse (App-00). `column` lists the changed files;\n * `expanded` adds the selected file's diff beside them; Expand opens the review dialog (tree left,\n * whole file right). Keys, scoped to the panel: E expand; in `expanded`, N / J and P / K walk the\n * changes of the file and ] / [ the files; in the dialog N / P walk across files.\n */\n@Component({\n selector: \"orr-changes-panel\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [OrrFileTreeComponent, OrrDiffComponent, OrrIconComponent, OrrMonacoDiffComponent],\n host: {\n class: \"orr-changes-panel\",\n tabindex: \"-1\",\n role: \"region\",\n \"[attr.aria-label]\": \"heading()\",\n \"[attr.data-state]\": \"state()\",\n \"[hidden]\": \"state() === 'collapsed'\",\n \"(keydown)\": \"onKey($event)\",\n },\n styles: [\n `\n :host { display: flex; flex-direction: column; min-width: 0; min-height: 0; height: 100%; background: var(--panel); border-left: 1px solid var(--hair); outline: none; }\n :host([hidden]) { display: none; }\n .orr-cp__head { display: flex; align-items: center; gap: var(--sp-3); padding: var(--sp-3) var(--sp-4) var(--sp-3) var(--sp-6); flex: none; min-width: 0; }\n .orr-cp__title { margin-right: var(--sp-1); font-size: var(--fs-micro); text-transform: uppercase; letter-spacing: 0.12em; color: var(--ink-4); white-space: nowrap; }\n .orr-cp__spacer { flex: 1; min-width: 0; }\n .orr-cp__ico { display: grid; place-items: center; flex: none; width: 19px; height: 19px; padding: 3px; border: 0; border-radius: 4px; background: transparent; color: var(--ink-3); cursor: pointer; }\n .orr-cp__ico:hover:not(:disabled) { background: var(--panel-3); color: var(--ink); }\n .orr-cp__ico[aria-pressed=\"true\"] { color: var(--ui-ink); }\n .orr-cp__ico:disabled { opacity: 0.4; cursor: default; }\n .orr-cp__ico:focus-visible { outline: none; box-shadow: var(--ui-ring); }\n .orr-cp__body { flex: 1; min-height: 0; display: grid; grid-template-columns: minmax(0, 1fr); border-top: 1px solid var(--hair); }\n :host([data-state=\"expanded\"]) .orr-cp__body { grid-template-columns: minmax(200px, 290px) minmax(0, 1fr); }\n .orr-cp__body > orr-filetree { min-height: 0; }\n .orr-cp__diff { display: flex; flex-direction: column; min-width: 0; min-height: 0; border-left: 1px solid var(--hair); background: var(--bg); }\n .orr-cp__diff-head { display: flex; align-items: center; gap: var(--sp-4); height: var(--row-h); padding: 0 var(--sp-4) 0 var(--sp-5); border-bottom: 1px solid var(--hair); background: var(--panel); font-size: var(--fs-badge); color: var(--ink-3); flex: none; }\n .orr-cp__path { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--ink-2); }\n .orr-cp__diff > orr-diff, .orr-cp__diff > orr-monaco-diff { flex: 1; min-height: 0; }\n `,\n ],\n template: `\n <div class=\"orr-cp__head\">\n <span class=\"orr-cp__title\">{{ heading() }}</span>\n <ng-content select=\"[orrPanelHead]\" />\n <span class=\"orr-cp__spacer\"></span>\n <button type=\"button\" class=\"orr-cp__ico\" data-testid=\"cp-wide\" [attr.aria-pressed]=\"state() === 'expanded'\" [attr.aria-label]=\"wideLabel()\" [attr.title]=\"wideLabel()\" (click)=\"toggleWide()\">\n <orr-icon name=\"panel-right\" [size]=\"13\" />\n </button>\n <button type=\"button\" class=\"orr-cp__ico\" data-testid=\"cp-expand\" aria-label=\"Expand · E\" title=\"Expand · E\" [disabled]=\"!list().length\" (click)=\"openExpand()\">\n <orr-icon name=\"maximize\" [size]=\"13\" />\n </button>\n <button type=\"button\" class=\"orr-cp__ico\" data-testid=\"cp-collapse\" aria-label=\"Collapse changes\" title=\"Collapse changes\" (click)=\"collapse()\">\n <orr-icon name=\"x\" [size]=\"13\" />\n </button>\n </div>\n <div class=\"orr-cp__body\">\n <orr-filetree [files]=\"list()\" [heading]=\"treeHeading()\" [selected]=\"state() === 'expanded' ? current()?.path ?? null : null\"\n [mode]=\"mode()\" (modeChange)=\"mode.set($event)\" (fileOpen)=\"pick($event)\" />\n @if (state() === 'expanded') {\n @if (current(); as f) {\n <div class=\"orr-cp__diff\">\n <div class=\"orr-cp__diff-head\" data-testid=\"cp-file-bar\">\n <span class=\"orr-cp__path\" [attr.title]=\"f.path\">{{ f.path }}</span>\n <button type=\"button\" class=\"o-btn o-btn--outline o-btn--sm\" (click)=\"openExpand()\" title=\"Expand · E\">Expand</button>\n @if (openable()) {\n <button type=\"button\" class=\"o-btn o-btn--outline o-btn--sm\" (click)=\"openFile.emit(f.path)\" title=\"Open file · O\">Open file</button>\n }\n </div>\n @if (f.before !== undefined && f.after !== undefined) {\n <!-- both sides known: IDE mode's diff (Monaco), unchanged regions folded, opened on the first change -->\n <orr-monaco-diff [before]=\"f.before\" [after]=\"f.after\" [path]=\"f.path\" [commentable]=\"commentable()\" [notes]=\"notesFor(f.path)\" (comment)=\"comment.emit($event)\" />\n } @else if (f.reading) {\n <orr-monaco-diff [path]=\"f.path\" loading />\n } @else {\n <orr-diff [lines]=\"f.lines\" [file]=\"f.path\" [fileHead]=\"false\" [(current)]=\"currentChange\" [commentable]=\"commentable()\"\n [commentLabel]=\"commentLabel()\" [notes]=\"notesFor(f.path)\" [emptyText]=\"emptyFor(f.path)\" (comment)=\"comment.emit($event)\" />\n }\n </div>\n }\n }\n </div>\n `,\n})\nexport class OrrChangesPanelComponent {\n readonly files = input<readonly ReviewFile[]>([]);\n readonly state = model<ChangesState>(\"column\");\n /** The file shown in `expanded` (and where the dialog opens). */\n readonly selected = model<string | null>(null);\n readonly mode = model<FileListMode>(\"tree\");\n readonly heading = input(\"Changes\");\n readonly treeHeading = input(\"Changed\");\n /** The dialog's title, e.g. `Review · stripe-retry`. */\n readonly reviewTitle = input(\"Review changes\");\n readonly commentable = input(false, { transform: booleanAttribute });\n /** The host can open a file (an editor, a browser): the diff bar offers Open file (`openFile`). */\n readonly openable = input(true, { transform: booleanAttribute });\n /** What the diff says for a file with no lines (e.g. changed by a command, so no diff reached the client). */\n readonly emptyText = input(\"No changes\");\n /** Per-file empty text (e.g. \"Reading the diff…\" while a host still loads it); falls back to `emptyText`. */\n readonly emptyTextFor = input<((path: string) => string | null) | null>(null);\n /** The comment box label before `path:Lnn`, e.g. `Comment for stripe-retry on`. */\n readonly commentLabel = input(\"Comment on\");\n /** The key that cycles the panel in the host (e.g. `⌥C`), appended to the wide toggle's title. */\n readonly cycleKey = input(\"\");\n /** Commented line numbers per path (shown as \"in review\"). */\n readonly notes = input<Readonly<Record<string, readonly number[]>>>({});\n readonly comment = output<DiffComment>();\n readonly openFile = output<string>();\n\n /** The Expand dialog is open. */\n readonly expandOpen = signal(false);\n readonly currentChange = signal(-1);\n private readonly diff = viewChild(OrrDiffComponent);\n private readonly dialog = inject(KjDialogService);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly injector = inject(Injector);\n\n /** `files`, held while a new array carries the same files and lines: a host's poll or stream frame re-renders nothing. */\n readonly list = computed(() => this.files(), { equal: sameReviewFiles });\n /** File paths in list order. */\n readonly order = computed(() => fileOrder(this.list(), this.mode()));\n /** The shown file: the selection, else the first in list order. */\n readonly current = computed<ReviewFile | null>(\n () => {\n const fs = this.list();\n const s = this.selected();\n return fs.find((f) => f.path === s) ?? fs.find((f) => f.path === this.order()[0]) ?? null;\n },\n { equal: (a, b) => a === b || (!!a && !!b && sameReviewFiles([a], [b])) },\n );\n readonly stat = computed(() => diffStat(this.current()?.lines ?? []));\n readonly wideLabel = computed(() => (this.state() === \"expanded\" ? \"Narrow to the file list\" : \"Show the diff beside the files\") + (this.cycleKey() ? \" · \" + this.cycleKey() : \"\"));\n /** The review the Expand dialog walks while it is open: it follows `files` (diffs a host reads late land in it). */\n private readonly review = signal<ChangesReview | null>(null);\n /** The files the Expand dialog shows, from the current one on (null while it is closed): a host reading diffs lazily reads these. */\n readonly reviewing = computed<string[] | null>(() => {\n const r = this.review();\n if (!r) return null;\n const o = r.ordered().map((f) => f.path);\n const i = Math.max(0, o.indexOf(r.current()?.path ?? \"\"));\n return [...o.slice(i), ...o.slice(0, i)];\n });\n\n constructor() {\n effect(() => {\n const fs = this.list();\n untracked(() => this.review()?.files.set(fs));\n });\n }\n\n protected emptyFor(path: string): string {\n return this.emptyTextFor()?.(path) ?? this.emptyText();\n }\n\n protected notesFor(path: string): readonly number[] {\n return this.notes()[path] ?? [];\n }\n\n toggleWide(): void {\n this.state.set(this.state() === \"expanded\" ? \"column\" : \"expanded\");\n }\n\n collapse(): void {\n this.state.set(\"collapsed\");\n }\n\n /** collapsed → column → expanded → collapsed. */\n cycle(): void {\n this.state.set(nextChangesState(this.state()));\n }\n\n /** A file picked in the list: show its diff beside the list. */\n pick(path: string): void {\n this.selectFile(path);\n if (this.state() !== \"expanded\") this.state.set(\"expanded\");\n }\n\n selectFile(path: string): void {\n this.selected.set(path);\n this.currentChange.set(-1);\n }\n\n /** Next / previous file in list order, wrapping. */\n stepFile(dir: 1 | -1): void {\n const o = this.order();\n if (!o.length) return;\n const i = o.indexOf(this.current()?.path ?? \"\");\n this.selectFile(o[(i + dir + o.length) % o.length]!);\n }\n\n /** Opens the review dialog on the shown file; closing it keeps the file it ended on. */\n openExpand(): void {\n const fs = this.list();\n if (!fs.length || this.expandOpen()) return;\n const review = new ChangesReview(fs, this.mode(), this.current()?.path ?? null);\n this.review.set(review);\n const ref = this.dialog.open(OrrChangesExpandComponent, { closeOnEsc: true });\n ref.instance.bind({\n review,\n title: this.reviewTitle(),\n commentable: this.commentable(),\n commentLabel: this.commentLabel(),\n notes: this.notes,\n emptyText: (p) => this.emptyFor(p),\n onComment: (c) => this.comment.emit(c),\n });\n this.expandOpen.set(true);\n // `state`, not `afterClosed$`: kouji only fires that on `ref.close()`, so Esc and the scrim left the panel thinking it was still open.\n const watch = effect(\n () => {\n if (ref.state() !== \"closed\") return;\n watch.destroy();\n untracked(() => {\n this.expandOpen.set(false);\n this.review.set(null);\n const at = review.current();\n if (at) this.selectFile(at.path);\n this.mode.set(review.mode());\n this.host.focus?.({ preventScroll: true });\n });\n },\n { injector: this.injector },\n );\n }\n\n onKey(e: KeyboardEvent): void {\n if (e.ctrlKey || e.metaKey || e.altKey || isTyping(e)) return;\n const k = e.key.toLowerCase();\n const expanded = this.state() === \"expanded\";\n if (k === \"e\") this.openExpand();\n else if (expanded && k === \"]\") this.stepFile(1);\n else if (expanded && k === \"[\") this.stepFile(-1);\n else if (expanded && (k === \"n\" || k === \"j\")) this.diff()?.step(1);\n else if (expanded && (k === \"p\" || k === \"k\")) this.diff()?.step(-1);\n else return;\n e.preventDefault();\n e.stopPropagation();\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"getorrery-ui.mjs","names":[],"sources":["../../src/lib/icon/icons.ts","../../src/lib/icon/icon.component.ts","../../src/lib/status/status.components.ts","../../src/lib/status/kbd.component.ts","../../src/lib/logo/logo-art.ts","../../src/lib/logo/logo.component.ts","../../src/lib/status/tool-badge.component.ts","../../src/lib/containers/dialog-shell.component.ts","../../src/lib/containers/containers.components.ts","../../src/lib/containers/pane-resizer.component.ts","../../src/lib/controls/controls.components.ts","../../src/lib/controls/choice.component.ts","../../src/lib/changes/file-tree.ts","../../src/lib/changes/file-tree.component.ts","../../src/lib/diff/diff-model.ts","../../src/lib/diff/diff.component.ts","../../src/lib/code/code.component.ts","../../src/lib/code/monaco.ts","../../src/lib/code/review-comments.monaco.ts","../../src/lib/code/monaco-diff.component.ts","../../src/lib/changes/changes-review.ts","../../src/lib/changes/changes-expand.component.ts","../../src/lib/changes/changes-panel.component.ts"],"sourcesContent":["// Generated from design/system/components.js (the canonical set) plus the ADE's and Cloud's extra\r\n// glyphs (Lucide, 24-unit grid, stroke drawn by the icon component). Edit the design set first.\r\n\r\n/** Every glyph: the inner markup of a 24×24 stroked SVG. */\r\nexport const ICONS: Readonly<Record<string, string>> = {\r\n \"alert\": \"<path d=\\\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\\\"/><path d=\\\"M12 9v4\\\"/><path d=\\\"M12 17h.01\\\"/>\",\r\n \"archive\": \"<rect width=\\\"20\\\" height=\\\"5\\\" x=\\\"2\\\" y=\\\"3\\\" rx=\\\"1\\\"/><path d=\\\"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8\\\"/><path d=\\\"M10 12h4\\\"/>\",\r\n \"arrow-down\": \"<path d=\\\"M12 5v14\\\"/><path d=\\\"m19 12-7 7-7-7\\\"/>\",\r\n \"arrow-down-to-line\": \"<path d=\\\"M12 17V3\\\"/><path d=\\\"m6 11 6 6 6-6\\\"/><path d=\\\"M19 21H5\\\"/>\",\r\n \"arrow-left\": \"<path d=\\\"m12 19-7-7 7-7\\\"/><path d=\\\"M19 12H5\\\"/>\",\r\n \"arrow-left-right\": \"<path d=\\\"M8 3 4 7l4 4\\\"/><path d=\\\"M4 7h16\\\"/><path d=\\\"m16 21 4-4-4-4\\\"/><path d=\\\"M20 17H4\\\"/>\",\r\n \"arrow-right\": \"<path d=\\\"M5 12h14\\\"/><path d=\\\"m12 5 7 7-7 7\\\"/>\",\r\n \"arrow-up\": \"<path d=\\\"m5 12 7-7 7 7\\\"/><path d=\\\"M12 19V5\\\"/>\",\r\n \"arrow-up-from-line\": \"<path d=\\\"m18 9-6-6-6 6\\\"/><path d=\\\"M12 3v14\\\"/><path d=\\\"M5 21h14\\\"/>\",\r\n \"at\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"4\\\"/><path d=\\\"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8\\\"/>\",\r\n \"bell\": \"<path d=\\\"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9\\\"/><path d=\\\"M10.3 21a1.94 1.94 0 0 0 3.4 0\\\"/>\",\r\n \"bot\": \"<path d=\\\"M12 8V4H8\\\"/><rect width=\\\"16\\\" height=\\\"12\\\" x=\\\"4\\\" y=\\\"8\\\" rx=\\\"2\\\"/><path d=\\\"M2 14h2\\\"/><path d=\\\"M20 14h2\\\"/><path d=\\\"M15 13v2\\\"/><path d=\\\"M9 13v2\\\"/>\",\r\n \"box\": \"<path d=\\\"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\\\"/><path d=\\\"m3.3 7 8.7 5 8.7-5\\\"/><path d=\\\"M12 22V12\\\"/>\",\r\n \"braces\": \"<path d=\\\"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1\\\"/><path d=\\\"M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1\\\"/>\",\r\n \"chart-gantt\": \"<path d=\\\"M10 6h8\\\"/><path d=\\\"M12 16h6\\\"/><path d=\\\"M3 3v16a2 2 0 0 0 2 2h16\\\"/><path d=\\\"M8 11h7\\\"/>\",\r\n \"check\": \"<path d=\\\"M20 6 9 17l-5-5\\\"/>\",\r\n \"check-circle\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"m9 12 2 2 4-4\\\"/>\",\r\n \"chevron-down\": \"<path d=\\\"m6 9 6 6 6-6\\\"/>\",\r\n \"chevron-left\": \"<path d=\\\"m15 18-6-6 6-6\\\"/>\",\r\n \"chevron-right\": \"<path d=\\\"m9 18 6-6-6-6\\\"/>\",\r\n \"chevron-up\": \"<path d=\\\"m18 15-6-6-6 6\\\"/>\",\r\n \"chevrons-down\": \"<path d=\\\"m7 6 5 5 5-5\\\"/><path d=\\\"m7 13 5 5 5-5\\\"/>\",\r\n \"chevrons-up\": \"<path d=\\\"m17 11-5-5-5 5\\\"/><path d=\\\"m17 18-5-5-5 5\\\"/>\",\r\n \"circle\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/>\",\r\n \"clock\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"M12 6v6l4 2\\\"/>\",\r\n \"cloud\": \"<path d=\\\"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z\\\"/>\",\r\n \"code\": \"<path d=\\\"m16 18 6-6-6-6\\\"/><path d=\\\"m8 6-6 6 6 6\\\"/>\",\r\n \"columns\": \"<rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"2\\\"/><path d=\\\"M12 3v18\\\"/>\",\r\n \"columns-3\": \"<rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"2\\\"/><path d=\\\"M9 3v18\\\"/><path d=\\\"M15 3v18\\\"/>\",\r\n \"copy\": \"<rect width=\\\"14\\\" height=\\\"14\\\" x=\\\"8\\\" y=\\\"8\\\" rx=\\\"2\\\"/><path d=\\\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\\\"/>\",\r\n \"corner-down-left\": \"<path d=\\\"M20 4v7a4 4 0 0 1-4 4H4\\\"/><path d=\\\"m9 10-5 5 5 5\\\"/>\",\r\n \"cpu\": \"<rect width=\\\"16\\\" height=\\\"16\\\" x=\\\"4\\\" y=\\\"4\\\" rx=\\\"2\\\"/><rect width=\\\"6\\\" height=\\\"6\\\" x=\\\"9\\\" y=\\\"9\\\" rx=\\\"1\\\"/><path d=\\\"M15 2v2\\\"/><path d=\\\"M15 20v2\\\"/><path d=\\\"M2 15h2\\\"/><path d=\\\"M2 9h2\\\"/><path d=\\\"M20 15h2\\\"/><path d=\\\"M20 9h2\\\"/><path d=\\\"M9 2v2\\\"/><path d=\\\"M9 20v2\\\"/>\",\r\n \"crosshair\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><line x1=\\\"22\\\" x2=\\\"18\\\" y1=\\\"12\\\" y2=\\\"12\\\"/><line x1=\\\"6\\\" x2=\\\"2\\\" y1=\\\"12\\\" y2=\\\"12\\\"/><line x1=\\\"12\\\" x2=\\\"12\\\" y1=\\\"6\\\" y2=\\\"2\\\"/><line x1=\\\"12\\\" x2=\\\"12\\\" y1=\\\"22\\\" y2=\\\"18\\\"/>\",\r\n \"database\": \"<ellipse cx=\\\"12\\\" cy=\\\"5\\\" rx=\\\"9\\\" ry=\\\"3\\\"/><path d=\\\"M3 5V19A9 3 0 0 0 21 19V5\\\"/><path d=\\\"M3 12A9 3 0 0 0 21 12\\\"/>\",\r\n \"download\": \"<path d=\\\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\\\"/><path d=\\\"m7 10 5 5 5-5\\\"/><path d=\\\"M12 15V3\\\"/>\",\r\n \"edit\": \"<path d=\\\"M21.17 6.81a1 1 0 0 0-3.99-3.99L3.84 16.17a2 2 0 0 0-.5.83l-1.32 4.35a.5.5 0 0 0 .62.62l4.35-1.32a2 2 0 0 0 .83-.5z\\\"/>\",\r\n \"external\": \"<path d=\\\"M15 3h6v6\\\"/><path d=\\\"M10 14 21 3\\\"/><path d=\\\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\\\"/>\",\r\n \"eye\": \"<path d=\\\"M2.06 12.35a1 1 0 0 1 0-.7 10.75 10.75 0 0 1 19.88 0 1 1 0 0 1 0 .7 10.75 10.75 0 0 1-19.88 0\\\"/><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"3\\\"/>\",\r\n \"eye-off\": \"<path d=\\\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\\\"/><path d=\\\"M14.084 14.158a3 3 0 0 1-4.242-4.242\\\"/><path d=\\\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\\\"/><path d=\\\"m2 2 20 20\\\"/>\",\r\n \"file\": \"<path d=\\\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\\\"/><path d=\\\"M14 2v4a2 2 0 0 0 2 2h4\\\"/>\",\r\n \"file-diff\": \"<path d=\\\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\\\"/><path d=\\\"M9 10h6\\\"/><path d=\\\"M12 13V7\\\"/><path d=\\\"M9 17h6\\\"/>\",\r\n \"filter\": \"<path d=\\\"M22 3H2l8 9.46V19l4 2v-8.54z\\\"/>\",\r\n \"flag\": \"<path d=\\\"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528\\\"/>\",\r\n \"folder\": \"<path d=\\\"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\\\"/>\",\r\n \"folder-open\": \"<path d=\\\"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2\\\"/>\",\r\n \"git-branch\": \"<path d=\\\"M6 3v12\\\"/><circle cx=\\\"18\\\" cy=\\\"6\\\" r=\\\"3\\\"/><circle cx=\\\"6\\\" cy=\\\"18\\\" r=\\\"3\\\"/><path d=\\\"M18 9a9 9 0 0 1-9 9\\\"/>\",\r\n \"git-commit\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"3\\\"/><path d=\\\"M3 12h6\\\"/><path d=\\\"M15 12h6\\\"/>\",\r\n \"git-graph\": \"<circle cx=\\\"5\\\" cy=\\\"6\\\" r=\\\"3\\\"/><path d=\\\"M5 9v6\\\"/><circle cx=\\\"5\\\" cy=\\\"18\\\" r=\\\"3\\\"/><path d=\\\"M12 3v18\\\"/><circle cx=\\\"19\\\" cy=\\\"6\\\" r=\\\"3\\\"/><path d=\\\"M16 15.7A9 9 0 0 0 19 9\\\"/>\",\r\n \"git-merge\": \"<circle cx=\\\"18\\\" cy=\\\"18\\\" r=\\\"3\\\"/><circle cx=\\\"6\\\" cy=\\\"6\\\" r=\\\"3\\\"/><path d=\\\"M6 21V9a9 9 0 0 0 9 9\\\"/>\",\r\n \"git-pull-request\": \"<circle cx=\\\"18\\\" cy=\\\"18\\\" r=\\\"3\\\"/><circle cx=\\\"6\\\" cy=\\\"6\\\" r=\\\"3\\\"/><path d=\\\"M13 6h3a2 2 0 0 1 2 2v7\\\"/><path d=\\\"M6 9v12\\\"/>\",\r\n \"github\": \"<path d=\\\"M9 19c-4 1.5-4-2-6-2.5M15 21v-3.5c0-1 .1-1.4-.5-2 2.8-.3 5.5-1.4 5.5-6a4.6 4.6 0 00-1.3-3.2 4.2 4.2 0 00-.1-3.2s-1-.3-3.4 1.3a11.6 11.6 0 00-6 0C6.8 2.8 5.8 3.1 5.8 3.1a4.2 4.2 0 00-.1 3.2A4.6 4.6 0 004.4 9.5c0 4.6 2.7 5.7 5.5 6-.6.6-.6 1.2-.5 2V21\\\"/>\",\r\n \"globe\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\\\"/><path d=\\\"M2 12h20\\\"/>\",\r\n \"grip\": \"<circle cx=\\\"9\\\" cy=\\\"12\\\" r=\\\"1\\\"/><circle cx=\\\"9\\\" cy=\\\"5\\\" r=\\\"1\\\"/><circle cx=\\\"9\\\" cy=\\\"19\\\" r=\\\"1\\\"/><circle cx=\\\"15\\\" cy=\\\"12\\\" r=\\\"1\\\"/><circle cx=\\\"15\\\" cy=\\\"5\\\" r=\\\"1\\\"/><circle cx=\\\"15\\\" cy=\\\"19\\\" r=\\\"1\\\"/>\",\r\n \"help\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\\\"/><path d=\\\"M12 17h.01\\\"/>\",\r\n \"history\": \"<path d=\\\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\\\"/><path d=\\\"M3 3v5h5\\\"/><path d=\\\"M12 7v5l4 2\\\"/>\",\r\n \"home\": \"<path d=\\\"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\\\"/><path d=\\\"M3 10a2 2 0 0 1 .71-1.53l7-6a2 2 0 0 1 2.58 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\\\"/>\",\r\n \"info\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"M12 16v-4\\\"/><path d=\\\"M12 8h.01\\\"/>\",\r\n \"key\": \"<circle cx=\\\"7.5\\\" cy=\\\"15.5\\\" r=\\\"5.5\\\"/><path d=\\\"m21 2-9.6 9.6\\\"/><path d=\\\"m15.5 7.5 3 3L22 7l-3-3\\\"/>\",\r\n \"layers\": \"<path d=\\\"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z\\\"/><path d=\\\"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65\\\"/><path d=\\\"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65\\\"/>\",\r\n \"layout-grid\": \"<rect width=\\\"7\\\" height=\\\"7\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"1\\\"/><rect width=\\\"7\\\" height=\\\"7\\\" x=\\\"14\\\" y=\\\"3\\\" rx=\\\"1\\\"/><rect width=\\\"7\\\" height=\\\"7\\\" x=\\\"14\\\" y=\\\"14\\\" rx=\\\"1\\\"/><rect width=\\\"7\\\" height=\\\"7\\\" x=\\\"3\\\" y=\\\"14\\\" rx=\\\"1\\\"/>\",\r\n \"link\": \"<path d=\\\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\\\"/><path d=\\\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\\\"/>\",\r\n \"list\": \"<path d=\\\"M3 5h.01\\\"/><path d=\\\"M3 12h.01\\\"/><path d=\\\"M3 19h.01\\\"/><path d=\\\"M8 5h13\\\"/><path d=\\\"M8 12h13\\\"/><path d=\\\"M8 19h13\\\"/>\",\r\n \"list-ordered\": \"<path d=\\\"M11 5h10\\\"/><path d=\\\"M11 12h10\\\"/><path d=\\\"M11 19h10\\\"/><path d=\\\"M4 4h1v5\\\"/><path d=\\\"M4 9h2\\\"/><path d=\\\"M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02\\\"/>\",\r\n \"lock\": \"<rect width=\\\"18\\\" height=\\\"11\\\" x=\\\"3\\\" y=\\\"11\\\" rx=\\\"2\\\"/><path d=\\\"M7 11V7a5 5 0 0 1 10 0v4\\\"/>\",\r\n \"mail\": \"<path d=\\\"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7\\\"/><rect x=\\\"2\\\" y=\\\"4\\\" width=\\\"20\\\" height=\\\"16\\\" rx=\\\"2\\\"/>\",\r\n \"maximize\": \"<path d=\\\"M8 3H5a2 2 0 0 0-2 2v3\\\"/><path d=\\\"M21 8V5a2 2 0 0 0-2-2h-3\\\"/><path d=\\\"M3 16v3a2 2 0 0 0 2 2h3\\\"/><path d=\\\"M16 21h3a2 2 0 0 0 2-2v-3\\\"/>\",\r\n \"menu\": \"<path d=\\\"M4 6h16\\\"/><path d=\\\"M4 12h16\\\"/><path d=\\\"M4 18h16\\\"/>\",\r\n \"message\": \"<path d=\\\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\\\"/>\",\r\n \"minimize\": \"<path d=\\\"M8 3v3a2 2 0 0 1-2 2H3\\\"/><path d=\\\"M21 8h-3a2 2 0 0 1-2-2V3\\\"/><path d=\\\"M3 16h3a2 2 0 0 1 2 2v3\\\"/><path d=\\\"M16 21v-3a2 2 0 0 1 2-2h3\\\"/>\",\r\n \"minus\": \"<path d=\\\"M5 12h14\\\"/>\",\r\n \"monitor\": \"<rect width=\\\"18\\\" height=\\\"11\\\" x=\\\"3\\\" y=\\\"5\\\" rx=\\\"1.5\\\"/><path d=\\\"M8 20h8\\\"/><path d=\\\"M12 16v4\\\"/>\",\r\n \"moon\": \"<path d=\\\"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z\\\"/>\",\r\n \"more\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"1\\\"/><circle cx=\\\"19\\\" cy=\\\"12\\\" r=\\\"1\\\"/><circle cx=\\\"5\\\" cy=\\\"12\\\" r=\\\"1\\\"/>\",\r\n \"more-vertical\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"1\\\"/><circle cx=\\\"12\\\" cy=\\\"5\\\" r=\\\"1\\\"/><circle cx=\\\"12\\\" cy=\\\"19\\\" r=\\\"1\\\"/>\",\r\n \"network\": \"<rect x=\\\"16\\\" y=\\\"16\\\" width=\\\"6\\\" height=\\\"6\\\" rx=\\\"1\\\"/><rect x=\\\"2\\\" y=\\\"16\\\" width=\\\"6\\\" height=\\\"6\\\" rx=\\\"1\\\"/><rect x=\\\"9\\\" y=\\\"2\\\" width=\\\"6\\\" height=\\\"6\\\" rx=\\\"1\\\"/><path d=\\\"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3\\\"/><path d=\\\"M12 12V8\\\"/>\",\r\n \"package\": \"<path d=\\\"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z\\\"/><path d=\\\"M12 22V12\\\"/><polyline points=\\\"3.29 7 12 12 20.71 7\\\"/><path d=\\\"m7.5 4.27 9 5.15\\\"/>\",\r\n \"panel-left\": \"<rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"2\\\"/><path d=\\\"M9 3v18\\\"/>\",\r\n \"panel-right\": \"<rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"2\\\"/><path d=\\\"M15 3v18\\\"/>\",\r\n \"paperclip\": \"<path d=\\\"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48\\\"/>\",\r\n \"pause\": \"<rect x=\\\"14\\\" y=\\\"4\\\" width=\\\"4\\\" height=\\\"16\\\" rx=\\\"1\\\"/><rect x=\\\"6\\\" y=\\\"4\\\" width=\\\"4\\\" height=\\\"16\\\" rx=\\\"1\\\"/>\",\r\n \"phone\": \"<rect width=\\\"14\\\" height=\\\"20\\\" x=\\\"5\\\" y=\\\"2\\\" rx=\\\"2\\\"/><path d=\\\"M12 18h.01\\\"/>\",\r\n \"play\": \"<path d=\\\"M6 3l14 9-14 9z\\\"/>\",\r\n \"plus\": \"<path d=\\\"M5 12h14\\\"/><path d=\\\"M12 5v14\\\"/>\",\r\n \"puzzle\": \"<path d=\\\"M15.39 4.39a1 1 0 0 0 1.68-.47 2.5 2.5 0 1 1 3.01 3.01 1 1 0 0 0-.47 1.68l1.68 1.68a2.4 2.4 0 0 1 0 3.42l-1.61 1.61a1 1 0 0 1-1.68-.47 2.5 2.5 0 1 0-3.01 3.01 1 1 0 0 1 .47 1.68l-1.61 1.61a2.4 2.4 0 0 1-3.42 0l-1.68-1.68a1 1 0 0 0-1.68.47 2.5 2.5 0 1 1-3.01-3.01 1 1 0 0 0 .47-1.68l-1.68-1.68a2.4 2.4 0 0 1 0-3.42l1.61-1.61a1 1 0 0 1 1.68.47 2.5 2.5 0 1 0 3.01-3.01 1 1 0 0 1-.47-1.68l1.61-1.61a2.4 2.4 0 0 1 3.42 0z\\\"/>\",\r\n \"refresh\": \"<path d=\\\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\\\"/><path d=\\\"M21 3v5h-5\\\"/><path d=\\\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\\\"/><path d=\\\"M8 16H3v5\\\"/>\",\r\n \"relay\": \"<path d=\\\"M4.9 16.1C1 12.2 1 5.8 4.9 1.9\\\"/><path d=\\\"M7.8 4.7a6.14 6.14 0 0 0-.8 7.5\\\"/><circle cx=\\\"12\\\" cy=\\\"9\\\" r=\\\"2\\\"/><path d=\\\"M16.2 4.8c2 2 2.26 5.11.8 7.47\\\"/><path d=\\\"M19.1 1.9a9.96 9.96 0 0 1 0 14.1\\\"/><path d=\\\"M9.5 18h5\\\"/><path d=\\\"m8 22 4-11 4 11\\\"/>\",\r\n \"repo\": \"<path d=\\\"M6 3h11a1 1 0 0 1 1 1v16l-3-2-3 2-3-2-3 2V4a1 1 0 0 1 1-1z\\\"/><path d=\\\"M9 7h6\\\"/>\",\r\n \"rocket\": \"<path d=\\\"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\\\"/><path d=\\\"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09\\\"/><path d=\\\"M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z\\\"/><path d=\\\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05\\\"/>\",\r\n \"rotate-ccw\": \"<path d=\\\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\\\"/><path d=\\\"M3 3v5h5\\\"/>\",\r\n \"rows-2\": \"<rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"2\\\"/><path d=\\\"M3 12h18\\\"/>\",\r\n \"search\": \"<circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/><path d=\\\"m21 21-4.3-4.3\\\"/>\",\r\n \"send\": \"<path d=\\\"m22 2-7 20-4-9-9-4Z\\\"/><path d=\\\"M22 2 11 13\\\"/>\",\r\n \"server\": \"<rect width=\\\"20\\\" height=\\\"8\\\" x=\\\"2\\\" y=\\\"2\\\" rx=\\\"2\\\"/><rect width=\\\"20\\\" height=\\\"8\\\" x=\\\"2\\\" y=\\\"14\\\" rx=\\\"2\\\"/><path d=\\\"M6 6h.01\\\"/><path d=\\\"M6 18h.01\\\"/>\",\r\n \"settings\": \"<path d=\\\"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\\\"/><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"3\\\"/>\",\r\n \"shield\": \"<path d=\\\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\\\"/>\",\r\n \"sparkle\": \"<path d=\\\"M12 3l1.9 5.8L20 11l-6.1 2.2L12 19l-1.9-5.8L4 11l6.1-2.2Z\\\"/>\",\r\n \"sparkles\": \"<path d=\\\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\\\"/><path d=\\\"M20 2v4\\\"/><path d=\\\"M22 4h-4\\\"/><circle cx=\\\"4\\\" cy=\\\"20\\\" r=\\\"2\\\"/>\",\r\n \"square\": \"<rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"2\\\"/>\",\r\n \"square-function\": \"<rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"3\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><path d=\\\"M9 17c2 0 2.8-1 2.8-2.8V10c0-2 1-3.3 3.2-3\\\"/><path d=\\\"M9 11.2h5.7\\\"/>\",\r\n \"stop\": \"<rect width=\\\"14\\\" height=\\\"14\\\" x=\\\"5\\\" y=\\\"5\\\" rx=\\\"2\\\"/>\",\r\n \"sun\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"4\\\"/><path d=\\\"M12 2v2\\\"/><path d=\\\"M12 20v2\\\"/><path d=\\\"m4.93 4.93 1.41 1.41\\\"/><path d=\\\"m17.66 17.66 1.41 1.41\\\"/><path d=\\\"M2 12h2\\\"/><path d=\\\"M20 12h2\\\"/><path d=\\\"m6.34 17.66-1.41 1.41\\\"/><path d=\\\"m19.07 4.93-1.41 1.41\\\"/>\",\r\n \"tag\": \"<path d=\\\"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z\\\"/><circle cx=\\\"7.5\\\" cy=\\\"7.5\\\" r=\\\".5\\\" fill=\\\"currentColor\\\"/>\",\r\n \"terminal\": \"<path d=\\\"m4 17 6-6-6-6\\\"/><path d=\\\"M12 19h8\\\"/>\",\r\n \"trash\": \"<path d=\\\"M3 6h18\\\"/><path d=\\\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\\\"/><path d=\\\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\\\"/>\",\r\n \"upload\": \"<path d=\\\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\\\"/><path d=\\\"m17 8-5-5-5 5\\\"/><path d=\\\"M12 3v12\\\"/>\",\r\n \"user\": \"<path d=\\\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\\\"/><circle cx=\\\"12\\\" cy=\\\"7\\\" r=\\\"4\\\"/>\",\r\n \"variable\": \"<path d=\\\"M8 21s-4-3-4-9 4-9 4-9\\\"/><path d=\\\"M16 3s4 3 4 9-4 9-4 9\\\"/><line x1=\\\"15\\\" x2=\\\"9\\\" y1=\\\"9\\\" y2=\\\"15\\\"/><line x1=\\\"9\\\" x2=\\\"15\\\" y1=\\\"9\\\" y2=\\\"15\\\"/>\",\r\n \"volume-2\": \"<path d=\\\"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\\\"/><path d=\\\"M16 9a5 5 0 0 1 0 6\\\"/><path d=\\\"M19.364 18.364a9 9 0 0 0 0-12.728\\\"/>\",\r\n \"x\": \"<path d=\\\"M18 6 6 18\\\"/><path d=\\\"m6 6 12 12\\\"/>\",\r\n \"x-circle\": \"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"m15 9-6 6\\\"/><path d=\\\"m9 9 6 6\\\"/>\",\r\n \"zap\": \"<path d=\\\"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\\\"/>\",\r\n};\r\n","import { ChangeDetectionStrategy, Component, ElementRef, computed, effect, inject, input } from \"@angular/core\";\r\nimport type { EnvironmentProviders } from \"@angular/core\";\r\nimport { provideIcons } from \"@kouji-ui/core\";\r\n\r\nimport { ICONS } from \"./icons\";\r\n\r\n/**\r\n * The names the ADE (`app-icon`) and Cloud (`kjIcon`) used before the merge, mapped onto the one\r\n * set. A call site keeps its old name; new code uses the canonical one. ADE `columns` meant three\r\n * columns: use `columns-3` (canonical `columns` is two, the design's).\r\n */\r\nexport const ICON_ALIASES: Readonly<Record<string, string>> = {\r\n agent: \"bot\", branch: \"git-branch\", diff: \"file-diff\", chat: \"message\", git: \"git-graph\", commit: \"git-commit\",\r\n chevron: \"chevron-right\", chevronD: \"chevron-down\", chevsUp: \"chevrons-up\", chevsDown: \"chevrons-down\",\r\n bolt: \"zap\", merge: \"git-merge\", grid: \"layout-grid\", timeline: \"chart-gantt\", graph: \"network\", dots: \"more\",\r\n spark: \"sparkle\", cube: \"box\", rename: \"edit\", dup: \"copy\", ext: \"external\", push: \"arrow-up-from-line\",\r\n pr: \"git-pull-request\", stage: \"arrow-down-to-line\", discard: \"rotate-ccw\", dotsV: \"more-vertical\",\r\n folderOpen: \"folder-open\", enter: \"corner-down-left\", question: \"help\", splitCol: \"columns\", splitRow: \"rows-2\",\r\n panelLeft: \"panel-left\", swap: \"arrow-left-right\", warn: \"alert\", volume: \"volume-2\", method: \"square-function\",\r\n field: \"variable\", enum: \"list-ordered\",\r\n // Cloud\r\n gear: \"settings\", \"alert-triangle\": \"alert\",\r\n};\r\n\r\n/** The canonical name for `name` (an alias resolves), or null when the set has no such glyph. */\r\nexport function iconName(name: string): string | null {\r\n if (ICONS[name] !== undefined) return name;\r\n const alias = ICON_ALIASES[name];\r\n return alias !== undefined && ICONS[alias] !== undefined ? alias : null;\r\n}\r\n\r\n/** Every name `<orr-icon>` accepts, aliases included. */\r\nexport function iconNames(): string[] {\r\n return [...Object.keys(ICONS), ...Object.keys(ICON_ALIASES)].sort();\r\n}\r\n\r\nexport type IconSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\r\nconst ICON_PX: Record<IconSize, number> = { xs: 12, sm: 14, md: 16, lg: 20, xl: 24 };\r\n\r\n/** The whole SVG for `name` (stroke 1.75, currentColor). Unknown names draw `square`. */\r\nexport function iconSvg(name: string, px = 16): string {\r\n const body = ICONS[iconName(name) ?? \"square\"];\r\n return (\r\n `<svg width=\"${px}\" height=\"${px}\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.75\" ` +\r\n `stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">${body}</svg>`\r\n );\r\n}\r\n\r\nconst warned = new Set<string>();\r\n\r\n/**\r\n * `<orr-icon name=\"terminal\" size=\"sm\" />`: one glyph of the merged set (`.o-icon`), drawn in\r\n * `currentColor`. `size` is xs 12 · sm 14 · md 16 · lg 20 · xl 24 or a pixel number. An unknown\r\n * name draws a square and warns once, listing the known names.\r\n */\r\n@Component({\r\n selector: \"orr-icon\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: \"o-icon\",\r\n \"[class.o-icon--sm]\": \"size() === 'sm'\",\r\n \"[class.o-icon--lg]\": \"size() === 'lg'\",\r\n \"[style.width.px]\": \"px()\",\r\n \"[style.height.px]\": \"px()\",\r\n \"[style.color]\": \"color() || null\",\r\n \"[attr.role]\": \"label() ? 'img' : null\",\r\n \"[attr.aria-label]\": \"label() || null\",\r\n \"[attr.aria-hidden]\": \"label() ? null : 'true'\",\r\n \"[attr.data-icon]\": \"resolved()\",\r\n },\r\n template: \"\",\r\n})\r\nexport class OrrIconComponent {\r\n readonly name = input.required<string>();\r\n readonly size = input<IconSize | number>(\"md\");\r\n readonly color = input<string | null>(null);\r\n /** Accessible name; without it the icon is decorative (`aria-hidden`). */\r\n readonly label = input<string>(\"\");\r\n\r\n readonly px = computed(() => {\r\n const s = this.size();\r\n return typeof s === \"number\" ? s : ICON_PX[s] ?? 16;\r\n });\r\n readonly resolved = computed(() => iconName(this.name()) ?? \"square\");\r\n\r\n constructor() {\r\n const host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n effect(() => {\r\n const name = this.name();\r\n if (iconName(name) === null && name && !warned.has(name)) {\r\n warned.add(name);\r\n console.warn(`[orr-icon] unknown icon \"${name}\". Known: ${iconNames().join(\", \")}`);\r\n }\r\n host.innerHTML = iconSvg(name, this.px());\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Registers the merged set (aliases included) with kouji-ui's icon registry, so `[kjIcon]` and\r\n * kouji's own components (select caret, toast, alert) draw the same glyphs as `<orr-icon>`.\r\n */\r\nexport function provideOrreryIcons(): EnvironmentProviders {\r\n const map: Record<string, string> = {};\r\n for (const name of iconNames()) {\r\n const svg = iconSvg(name, 24).replace('stroke=\"currentColor\"', 'stroke=\"black\"').replace(' aria-hidden=\"true\"', ' xmlns=\"http://www.w3.org/2000/svg\"');\r\n map[name] = `url(\"data:image/svg+xml;utf8,${encodeURIComponent(svg)}\")`;\r\n }\r\n return provideIcons(map);\r\n}\r\n","import { ChangeDetectionStrategy, Component, booleanAttribute, computed, input, numberAttribute, output } from \"@angular/core\";\r\n\r\nimport { OrrIconComponent } from \"../icon/icon.component\";\r\n\r\n/** Session / agent / machine states. `queued` (ADE) draws as idle. */\r\nexport type DotState = \"running\" | \"waiting\" | \"blocked\" | \"done\" | \"idle\" | \"online\" | \"offline\" | \"queued\";\r\n\r\nconst DOT_CLASS: Record<DotState, string> = {\r\n running: \"running\", waiting: \"waiting\", blocked: \"blocked\", done: \"done\", idle: \"idle\", online: \"online\", offline: \"offline\", queued: \"idle\",\r\n};\r\n\r\n/** `<orr-dot state=\"running\" pulse />`: the 8 px state dot (`.o-dot`); `size=\"sm\"` is 6 px. */\r\n@Component({\r\n selector: \"orr-dot\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { role: \"img\", \"[class]\": \"cls()\", \"[attr.aria-label]\": \"label() || state()\" },\r\n template: \"\",\r\n})\r\nexport class OrrDotComponent {\r\n readonly state = input<DotState>(\"idle\");\r\n readonly pulse = input(false, { transform: booleanAttribute });\r\n readonly size = input<\"sm\" | \"md\">(\"md\");\r\n readonly label = input(\"\");\r\n readonly cls = computed(\r\n () => `o-dot o-dot--${DOT_CLASS[this.state()] ?? \"idle\"}${this.pulse() ? \" o-dot--pulse\" : \"\"}${this.size() === \"sm\" ? \" o-dot--sm\" : \"\"}`,\r\n );\r\n}\r\n\r\n/** `<orr-pill state=\"waiting\">Needs you</orr-pill>`: dot + word (`.o-pill`). Empty content shows the state. */\r\n@Component({\r\n selector: \"orr-pill\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { \"[class]\": \"cls()\" },\r\n template: `<ng-content>{{ state() }}</ng-content>`,\r\n})\r\nexport class OrrPillComponent {\r\n readonly state = input<DotState>(\"idle\");\r\n readonly nodot = input(false, { transform: booleanAttribute });\r\n readonly cls = computed(() => `o-pill o-pill--${DOT_CLASS[this.state()] ?? \"idle\"}${this.nodot() ? \" o-pill--nodot\" : \"\"}`);\r\n}\r\n\r\nexport type BadgeTone = \"neutral\" | \"add\" | \"del\" | \"attn\" | \"change\" | \"live\" | \"accent\";\r\n\r\n/** `<orr-badge tone=\"add\">+128</orr-badge>`: quiet count / tag (`.o-badge`). */\r\n@Component({\r\n selector: \"orr-badge\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { \"[class]\": \"cls()\" },\r\n template: `<ng-content />`,\r\n})\r\nexport class OrrBadgeComponent {\r\n readonly tone = input<BadgeTone>(\"neutral\");\r\n readonly solid = input(false, { transform: booleanAttribute });\r\n readonly square = input(false, { transform: booleanAttribute });\r\n readonly mono = input(false, { transform: booleanAttribute });\r\n readonly cls = computed(\r\n () =>\r\n `o-badge o-badge--${this.tone()}${this.solid() ? \" o-badge--solid\" : \"\"}${this.square() ? \" o-badge--square\" : \"\"}${this.mono() ? \" o-badge--mono\" : \"\"}`,\r\n );\r\n}\r\n\r\n/** `<orr-chip removable (remove)=\"…\">plan.md</orr-chip>`: a removable token (`.o-chip`). */\r\n@Component({\r\n selector: \"orr-chip\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [OrrIconComponent],\r\n host: { class: \"o-chip\", \"[attr.aria-selected]\": \"selected() ? 'true' : null\" },\r\n template: `\r\n @if (icon(); as i) { <orr-icon [name]=\"i\" size=\"xs\" /> }\r\n <ng-content />\r\n @if (removable()) {\r\n <button type=\"button\" class=\"o-chip__x\" [attr.aria-label]=\"removeLabel()\" (click)=\"$event.stopPropagation(); remove.emit()\">\r\n <orr-icon name=\"x\" size=\"xs\" />\r\n </button>\r\n }\r\n `,\r\n})\r\nexport class OrrChipComponent {\r\n readonly icon = input<string | null>(null);\r\n readonly removable = input(false, { transform: booleanAttribute });\r\n readonly selected = input(false, { transform: booleanAttribute });\r\n readonly removeLabel = input(\"Remove\");\r\n readonly remove = output<void>();\r\n}\r\n\r\n/** Initials of a name: first letters of the first two words. */\r\nexport function initials(name: string): string {\r\n return (\r\n name\r\n .split(/[\\s._-]+/)\r\n .filter(Boolean)\r\n .slice(0, 2)\r\n .map((p) => p[0])\r\n .join(\"\") || \"?\"\r\n );\r\n}\r\n\r\n/** A stable identity tone (1–7, `--id-*`) for a name. */\r\nexport function nameTone(name: string): number {\r\n let h = 0;\r\n for (const ch of name) h = (h * 31 + ch.charCodeAt(0)) >>> 0;\r\n return (h % 7) + 1;\r\n}\r\n\r\n/** `<orr-avatar name=\"Driss Najih\" />`: initials on an identity tone (`.o-avatar`). */\r\n@Component({\r\n selector: \"orr-avatar\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { role: \"img\", \"[class]\": \"cls()\", \"[attr.aria-label]\": \"name()\" },\r\n template: `{{ text() }}`,\r\n})\r\nexport class OrrAvatarComponent {\r\n readonly name = input(\"?\");\r\n /** 1–7; hashed from the name when absent. */\r\n readonly tone = input<number | null>(null);\r\n readonly size = input<\"sm\" | \"md\" | \"lg\">(\"md\");\r\n readonly square = input(false, { transform: booleanAttribute });\r\n readonly text = computed(() => initials(this.name()));\r\n readonly cls = computed(() => {\r\n const t = this.tone();\r\n const tone = t !== null && t >= 1 && t <= 7 ? t : nameTone(this.name());\r\n const s = this.size();\r\n return `o-avatar o-avatar--${tone}${s !== \"md\" ? \" o-avatar--\" + s : \"\"}${this.square() ? \" o-avatar--sq\" : \"\"}`;\r\n });\r\n}\r\n\r\nexport type MeterTone = \"ok\" | \"attn\" | \"danger\";\r\n\r\n/** The tone a meter takes on its own: attn from 75 %, danger from 90 %. */\r\nexport function meterTone(pct: number): MeterTone | null {\r\n return pct >= 90 ? \"danger\" : pct >= 75 ? \"attn\" : null;\r\n}\r\n\r\n/** `<orr-meter [value]=\"82\" />`: a thin bar (`.o-meter`); the tone follows the fill unless set. */\r\n@Component({\r\n selector: \"orr-meter\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n role: \"meter\",\r\n \"[class]\": \"cls()\",\r\n \"[style.--v]\": \"pct() + '%'\",\r\n \"aria-valuemin\": \"0\",\r\n \"[attr.aria-valuemax]\": \"max()\",\r\n \"[attr.aria-valuenow]\": \"value()\",\r\n \"[attr.aria-label]\": \"label() || null\",\r\n },\r\n template: \"\",\r\n})\r\nexport class OrrMeterComponent {\r\n readonly value = input(0, { transform: numberAttribute });\r\n readonly max = input(100, { transform: numberAttribute });\r\n readonly tone = input<MeterTone | null>(null);\r\n readonly size = input<\"md\" | \"lg\">(\"md\");\r\n readonly label = input(\"\");\r\n readonly pct = computed(() => Math.max(0, Math.min(100, (this.value() / (this.max() || 100)) * 100)).toFixed(2));\r\n readonly cls = computed(() => {\r\n const t = this.tone() ?? meterTone(Number(this.pct()));\r\n return `o-meter${t ? \" o-meter--\" + t : \"\"}${this.size() === \"lg\" ? \" o-meter--lg\" : \"\"}`;\r\n });\r\n}\r\n\r\n/** `<orr-ring [value]=\"0.4\" />`: circular progress, 0..1 (from the ADE's `app-ring`). */\r\n@Component({\r\n selector: \"orr-ring\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { role: \"progressbar\", \"aria-valuemin\": \"0\", \"aria-valuemax\": \"100\", \"[attr.aria-valuenow]\": \"round()\", style: \"display:inline-flex\" },\r\n template: `\r\n <svg [attr.width]=\"size()\" [attr.height]=\"size()\" style=\"transform:rotate(-90deg);display:block\">\r\n <circle [attr.cx]=\"c()\" [attr.cy]=\"c()\" [attr.r]=\"r()\" fill=\"none\" stroke=\"var(--hair)\" [attr.stroke-width]=\"stroke()\" />\r\n <circle [attr.cx]=\"c()\" [attr.cy]=\"c()\" [attr.r]=\"r()\" fill=\"none\" [attr.stroke]=\"color() || 'var(--ui-ink)'\" [attr.stroke-width]=\"stroke()\"\r\n stroke-linecap=\"round\" [attr.stroke-dasharray]=\"circ()\" [attr.stroke-dashoffset]=\"offset()\" style=\"transition:stroke-dashoffset var(--dur-slow) var(--ease)\" />\r\n </svg>\r\n `,\r\n})\r\nexport class OrrRingComponent {\r\n readonly value = input(0, { transform: numberAttribute });\r\n readonly size = input(30, { transform: numberAttribute });\r\n readonly stroke = input(3, { transform: numberAttribute });\r\n readonly color = input<string | null>(null);\r\n readonly r = computed(() => (this.size() - this.stroke()) / 2);\r\n readonly c = computed(() => this.size() / 2);\r\n readonly circ = computed(() => 2 * Math.PI * this.r());\r\n readonly offset = computed(() => this.circ() * (1 - Math.max(0, Math.min(1, this.value()))));\r\n readonly round = computed(() => Math.round(Math.max(0, Math.min(1, this.value())) * 100));\r\n}\r\n\r\n/** The VCS letters every changes list uses, with their names. */\r\nexport const VCS_STATE_NAMES: Readonly<Record<string, string>> = {\r\n A: \"Added\", M: \"Modified\", D: \"Deleted\", R: \"Renamed\", C: \"Conflicted\", U: \"Unmerged\", \"?\": \"Untracked\", \"!\": \"Ignored\",\r\n};\r\n\r\n/** `<orr-state state=\"A\" />`: the file-state letter square (`.o-state`), coloured by `--vcs-*`. */\r\n@Component({\r\n selector: \"orr-state\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { class: \"o-state\", \"[attr.data-state]\": \"state()\", \"[attr.title]\": \"title()\" },\r\n template: `{{ state() }}`,\r\n})\r\nexport class OrrStateComponent {\r\n readonly state = input.required<string>();\r\n readonly title = computed(() => VCS_STATE_NAMES[this.state()] ?? this.state());\r\n}\r\n\r\n/** `<orr-addel [add]=\"3\" [del]=\"1\" />`: `+N −N`, only the non-zero counts (`.o-addel`). */\r\n@Component({\r\n selector: \"orr-addel\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { class: \"o-addel\" },\r\n template: `@if (add() > 0) {<span class=\"o-addel__add\">+{{ add() }}</span>}@if (del() > 0) {<span class=\"o-addel__del\">−{{ del() }}</span>}`,\r\n})\r\nexport class OrrAddDelComponent {\r\n readonly add = input(0, { transform: numberAttribute });\r\n readonly del = input(0, { transform: numberAttribute });\r\n}\r\n","import { ChangeDetectionStrategy, Component, ElementRef, afterNextRender, computed, inject, input, signal } from \"@angular/core\";\r\n\r\n/** `\"Ctrl K\"`, `\"Ctrl+K\"` or `[\"Ctrl\", \"K\"]` → one key per cap. A lone `+` stays a key. */\r\nexport function splitKeys(keys: string | readonly string[]): string[] {\r\n if (Array.isArray(keys)) return keys.filter(Boolean);\r\n return String(keys)\r\n .trim()\r\n .split(/\\s+|\\+(?=.)/)\r\n .filter(Boolean);\r\n}\r\n\r\n/**\r\n * What makes a shortcut a hint inside a control rather than a standalone key: the controls of the\r\n * system (and kouji's) in which `.o-kbd` turns quiet (no border, no ground, mono 11, `--ink-3`).\r\n */\r\nexport const KBD_INLINE_CONTEXT =\r\n \"button, a, [role=button], [role=menuitem], [role=option], [role=tab], kj-button, .kj-button, .o-btn, .o-search-trigger, \" +\r\n \".o-menu__item, .o-palette__item, .o-input-wrap, .o-chip, .o-pill, .o-tab, .o-seg__opt, .o-item\";\r\n\r\n/**\r\n * `<orr-kbd keys=\"Ctrl K\" />`: keyboard keys (`.o-kbd`). Standalone it draws boxed caps; inside a\r\n * control (button, menu item, search pill, chip, tab, input) it is a quiet inline hint on its own\r\n * (`.o-kbd--inline`). `inline` forces either form; `size=\"md\"` is the 14 px top-bar cap.\r\n */\r\n@Component({\r\n selector: \"orr-kbd\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { \"[class]\": \"cls()\", \"[attr.aria-label]\": \"label()\" },\r\n template: `@for (k of caps(); track $index) {<kbd class=\"o-kbd__key\">{{ k }}</kbd>}`,\r\n})\r\nexport class OrrKbdComponent {\r\n readonly keys = input.required<string | readonly string[]>();\r\n /** `true` / `false` force the form; unset follows the context. */\r\n readonly inline = input<boolean | undefined>(undefined);\r\n readonly size = input<\"sm\" | \"md\">(\"sm\");\r\n\r\n readonly caps = computed(() => splitKeys(this.keys()));\r\n readonly label = computed(() => this.caps().join(\"+\"));\r\n /** Whether the host sits inside a control (read once the host is in the DOM). */\r\n readonly inControl = signal(false);\r\n readonly isInline = computed(() => this.inline() ?? this.inControl());\r\n readonly cls = computed(() => \"o-kbd\" + (this.isInline() ? \" o-kbd--inline\" : this.size() === \"md\" ? \" o-kbd--md\" : \"\"));\r\n\r\n constructor() {\r\n const host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n afterNextRender(() => this.inControl.set(!!host.parentElement?.closest(KBD_INLINE_CONTEXT)));\r\n }\r\n}\r\n","// Generated by scripts/design/sync-logo.mjs from design/system/components.js. Do not edit: rerun the script.\r\n// @ts-nocheck: the canvas's generator, copied verbatim.\r\n/* eslint-disable */\r\nexport const OrrLogo = (() => {\r\n const LOGOS = ['monogram', 'eccentric', 'rings', 'parallel', 'stencil'];\r\n const STATES = ['static', 'idle', 'thinking', 'running', 'needs-you', 'waiting', 'done', 'error', 'offline', 'loading', 'loader'];\r\n const ALIAS = { blocked: 'needs-you', needs: 'needs-you', 'needs-you': 'needs-you', executing: 'running', working: 'running', boot: 'loading', queued: 'idle', 'waiting-for-you': 'waiting', spinner: 'loader' };\r\n const KEY = { 'needs-you': 'blocked', loading: 'boot' }; // internal names used by the generators\r\n const TOK = { running: ['--st-running', '#3fb6c4'], blocked: ['--st-blocked', '#e06c7a'], waiting: ['--st-waiting', '#d9a441'],\r\n done: ['--st-done', '#57c98a'], idle: ['--st-idle', '#8a8b8c'], offline: ['--st-offline', '#68696b'], error: ['--sem-del', '#e06c7a'] };\r\n const BRAND = ['var(--brand-1, #ff5d9e)', 'var(--brand-2, #a855f7)', '#6d6af8'];\r\n const tok = (k) => 'var(' + TOK[k][0] + ', ' + TOK[k][1] + ')';\r\n let TINT = null; // set by draw() while a `color` mark is generated: the brand states take that colour instead\r\n let SHADE = false; // set by draw() while a `shader` mark is generated: every url(#g) paint becomes the shader field\r\n // the extensions spectrum: one colour per harness level, in level order (providers … the loop)\r\n const SPECTRUM = ['#ff5d9e', '#c26cf5', '#8b6cf8', '#6d6af8', '#d9a441', '#57c98a', '#3fb6c4', '#22d3ee', '#ff8a5c'];\r\n // brand/shader/streaks.jpg at 320 × 160, embedded: no URL resolves inside a shadow root on the canvas\r\n const TEX = 'data:image/jpeg;base64,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';\r\n const mixT = (c) => ['color-mix(in oklab, ' + c + ' 65%, white)', c, 'color-mix(in oklab, ' + c + ' 78%, black)'];\r\n const tones = (k) => (k === 'static' || k === 'thinking' || k === 'boot' || k === 'loader') ? (TINT ? mixT(TINT) : SHADE ? SPECTRUM : BRAND)\r\n : ['color-mix(in oklab, ' + tok(k) + ' 65%, white)', tok(k), 'color-mix(in oklab, ' + tok(k) + ' 78%, black)'];\r\n const R = (a) => a * Math.PI / 180;\r\n const on = (r, a, cx = 100, cy = 100) => [cx + r * Math.cos(R(a)), cy + r * Math.sin(R(a))];\r\n const f2 = (p) => p[0].toFixed(2) + ' ' + p[1].toFixed(2);\r\n const arcp = (r, a0, a1, cx = 100, cy = 100) => 'M' + f2(on(r, a0, cx, cy)) + ' A' + r + ' ' + r + ' 0 ' + ((((a1 - a0) % 360) + 360) % 360 > 180 ? 1 : 0) + ' 1 ' + f2(on(r, a1, cx, cy));\r\n const lin = (id, t) => { const at = t.length === 3 ? [0, .55, 1] : t.map((_, k) => k / (t.length - 1));\r\n return '<linearGradient id=\"' + id + '\" gradientUnits=\"userSpaceOnUse\" x1=\"30\" y1=\"30\" x2=\"170\" y2=\"170\">' + t.map((c, k) => '<stop offset=\"' + +at[k].toFixed(3) + '\" style=\"stop-color:' + c + '\"/>').join('') + '</linearGradient>'; };\r\n const still = () => { try { return matchMedia('(prefers-reduced-motion: reduce)').matches; } catch (e) { return false; } };\r\n // the shader field: the colours, then the streaks on top (overlay), one pattern in the mark's own 200 × 200 space\r\n const field = (id, t) => lin(id + 'c', t) + '<pattern id=\"' + id + '\" patternUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"200\" height=\"200\">'\r\n + '<rect width=\"200\" height=\"200\" fill=\"url(#' + id + 'c)\"/><image href=\"' + TEX + '\" x=\"-120\" y=\"-10\" width=\"440\" height=\"220\" preserveAspectRatio=\"none\" style=\"mix-blend-mode:overlay\">'\r\n + '' + '</image></pattern>';\r\n const grad = (id, t) => SHADE ? field(id, t) : lin(id, t);\r\n const mask = (id, inner) => '<mask id=\"' + id + '\" maskUnits=\"userSpaceOnUse\" x=\"-20\" y=\"-20\" width=\"240\" height=\"240\"><rect x=\"-20\" y=\"-20\" width=\"240\" height=\"240\" fill=\"#fff\"/>' + inner + '</mask>';\r\n\r\n const KF = {\r\n spin: '@keyframes spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}',\r\n spinr: '@keyframes spinr{from{transform:rotate(0)}to{transform:rotate(-360deg)}}',\r\n breathe: '@keyframes breathe{0%,100%{opacity:.45}50%{opacity:1}}',\r\n pulse: '@keyframes pulse{0%,100%{transform:scale(.78)}50%{transform:scale(1.08)}}',\r\n beat: '@keyframes beat{0%,100%{transform:scale(1)}15%{transform:scale(1.14)}30%{transform:scale(1)}}',\r\n ripple: '@keyframes ripple{0%{transform:scale(1);opacity:.75}100%{transform:scale(2.6);opacity:0}}',\r\n ripsm: '@keyframes ripsm{0%{transform:scale(1);opacity:.7}100%{transform:scale(1.35);opacity:0}}',\r\n shake: '@keyframes shake{0%,34%,100%{transform:translateX(0)}4%{transform:translateX(-7px)}10%{transform:translateX(6px)}16%{transform:translateX(-5px)}22%{transform:translateX(3px)}28%{transform:translateX(-1px)}}',\r\n settle: '@keyframes settle{0%{transform:rotate(-320deg)}42%,100%{transform:rotate(0)}}',\r\n pop: '@keyframes pop{0%,40%{transform:scale(1)}50%{transform:scale(1.3)}62%,100%{transform:scale(1)}}',\r\n ripone: '@keyframes ripone{0%,44%{transform:scale(1);opacity:0}46%{opacity:.8}80%,100%{transform:scale(2.6);opacity:0}}',\r\n rock: '@keyframes rock{0%,100%{transform:rotate(-22deg)}50%{transform:rotate(22deg)}}',\r\n draw: '@keyframes draw{0%{stroke-dashoffset:var(--len)}30%,100%{stroke-dashoffset:0}}',\r\n drawl: '@keyframes drawl{0%,12%{stroke-dashoffset:var(--len)}40%,100%{stroke-dashoffset:0}}',\r\n popin: '@keyframes popin{0%,28%{transform:scale(0)}38%{transform:scale(1.25)}46%,100%{transform:scale(1)}}',\r\n bootorb: '@keyframes bootorb{0%,46%{transform:rotate(0)}86%,100%{transform:rotate(360deg)}}',\r\n centre: '@keyframes centre{0%,20%{transform:translate(0,0)}55%,100%{transform:translate(-12px,12px)}}',\r\n grow: '@keyframes grow{0%,10%{transform:scale(0)}40%,100%{transform:scale(1)}}',\r\n disc: '@keyframes disc{0%{transform:scale(.4);opacity:0}14%,100%{transform:scale(1);opacity:1}}',\r\n pt: '@keyframes pt{0%,100%{transform:translate(9px,-3px)}50%{transform:translate(-9px,-3px)}}',\r\n pb: '@keyframes pb{0%,100%{transform:translate(-9px,3px)}50%{transform:translate(9px,3px)}}',\r\n ptl: '@keyframes ptl{0%,100%{transform:translate(9px,-3px)}50%{transform:translate(4px,-3px)}}',\r\n pbl: '@keyframes pbl{0%,100%{transform:translate(-9px,3px)}50%{transform:translate(-4px,3px)}}',\r\n lift: '@keyframes lift{0%,100%{transform:translate(9px,-3px)}30%,70%{transform:translate(9px,-12px)}}',\r\n merge_t: '@keyframes merge_t{0%,15%{transform:translate(9px,-3px)}50%,100%{transform:translate(0,0)}}',\r\n merge_b: '@keyframes merge_b{0%,15%{transform:translate(-9px,3px)}50%,100%{transform:translate(0,0)}}',\r\n in_t: '@keyframes in_t{0%{transform:translate(90px,-3px);opacity:0}35%,100%{transform:translate(9px,-3px);opacity:1}}',\r\n in_b: '@keyframes in_b{0%{transform:translate(-90px,3px);opacity:0}35%,100%{transform:translate(-9px,3px);opacity:1}}',\r\n jit_t: '@keyframes jit_t{0%,40%,100%{transform:translate(9px,-3px)}8%{transform:translate(15px,-8px)}16%{transform:translate(5px,-1px)}24%{transform:translate(12px,-6px)}}',\r\n jit_b: '@keyframes jit_b{0%,40%,100%{transform:translate(-9px,3px)}8%{transform:translate(-15px,8px)}16%{transform:translate(-5px,1px)}24%{transform:translate(-12px,6px)}}',\r\n close: '@keyframes close{0%,15%{stroke-width:9px}50%,100%{stroke-width:0}}',\r\n widen: '@keyframes widen{0%,40%,100%{stroke-width:9px}10%,25%{stroke-width:22px}}',\r\n sweep: '@keyframes sweep{0%,30%{transform:rotate(-180deg)}70%,100%{transform:rotate(0)}}',\r\n };\r\n const BASE = '.rot{transform-box:view-box;transform-origin:100px 100px}.self{transform-box:fill-box;transform-origin:center}';\r\n const A = (sel, kf, dur, ease) => sel + '{animation:' + kf + ' ' + dur + 's ' + (ease || 'linear') + ' infinite}';\r\n const EO = 'cubic-bezier(.2,.7,.2,1)', EIO = 'cubic-bezier(.65,0,.35,1)';\r\n const out = (rules, kfs, defs, body) => ({ css: BASE + kfs.map((k) => KF[k]).join('') + rules.join(''), defs, body });\r\n\r\n /* ── vector generators: (state key, light surface?) → { css, defs, body } in a 200-unit box ── */\r\n const V = {\r\n monogram(s, light) {\r\n const pa = -45, P = on(56, pa), t = tones(s);\r\n let defs = grad('g', t) + mask('m', '<g class=\"orb rot\"><circle cx=\"' + P[0].toFixed(2) + '\" cy=\"' + P[1].toFixed(2) + '\" r=\"26\" fill=\"#000\"/></g>');\r\n const pf = s === 'idle' ? '#d4d4d8' : (light ? 'url(#g)' : '#fff');\r\n let band, planet;\r\n if (s === 'offline') {\r\n band = '<g mask=\"url(#m)\"><circle cx=\"100\" cy=\"100\" r=\"56\" stroke=\"' + tok('offline') + '\" stroke-width=\"32\" opacity=\".55\"/></g>';\r\n planet = '<circle cx=\"' + P[0].toFixed(2) + '\" cy=\"' + P[1].toFixed(2) + '\" r=\"14\" fill=\"none\" stroke=\"#a1a1aa\" stroke-width=\"4\"/>';\r\n } else {\r\n band = s === 'loader'\r\n ? '<g mask=\"url(#m)\"><circle cx=\"100\" cy=\"100\" r=\"56\" stroke=\"url(#g)\" stroke-width=\"32\" opacity=\".22\"/><g class=\"orb rot\"><path d=\"' + arcp(56, pa - 110, pa) + '\" stroke=\"url(#g)\" stroke-width=\"32\"/></g></g>'\r\n : '<g mask=\"url(#m)\"><circle class=\"band\" cx=\"100\" cy=\"100\" r=\"56\" stroke=\"url(#g)\" stroke-width=\"32\" transform=\"rotate(-45 100 100)\" style=\"--len:351.86px\" stroke-dasharray=\"351.86\"/></g>';\r\n planet = '<circle class=\"pl self\" cx=\"' + P[0].toFixed(2) + '\" cy=\"' + P[1].toFixed(2) + '\" r=\"16\" fill=\"' + pf + '\"/>';\r\n }\r\n const rip = (s === 'blocked' || s === 'waiting' || s === 'done') ? '<circle class=\"rip self\" cx=\"' + P[0].toFixed(2) + '\" cy=\"' + P[1].toFixed(2) + '\" r=\"16\" fill=\"none\" stroke=\"' + tok(s) + '\" stroke-width=\"3\" opacity=\"0\"/>' : '';\r\n const R_ = { static: [[], []], offline: [[], []], idle: [[A('.mark', 'breathe', 3.2, 'ease-in-out')], ['breathe']],\r\n thinking: [[A('.pl', 'pulse', 1.4, 'ease-in-out')], ['pulse']], running: [[A('.orb', 'spin', 1.8)], ['spin']],\r\n blocked: [[A('.rip', 'ripple', 1.4, 'ease-out'), A('.pl', 'beat', 1.4, 'ease-in-out')], ['ripple', 'beat']],\r\n waiting: [[A('.rip', 'ripple', 2.6, 'ease-out')], ['ripple']],\r\n done: [[A('.orb', 'settle', 3, EO), A('.pl', 'pop', 3, 'ease-out'), A('.rip', 'ripone', 3, 'ease-out')], ['settle', 'pop', 'ripone']],\r\n error: [[A('.mark', 'shake', 2.4, 'ease-in-out')], ['shake']],\r\n boot: [[A('.band', 'draw', 3.2, EIO), A('.pl', 'popin', 3.2, EO), A('.orb', 'bootorb', 3.2, EIO)], ['draw', 'popin', 'bootorb']],\r\n loader: [[A('.orb', 'spin', 1)], ['spin']] }[s];\r\n return out(R_[0], R_[1], defs, '<g class=\"mark\">' + band + '<g class=\"orb rot\">' + rip + planet + '</g></g>');\r\n },\r\n eccentric(s) {\r\n const t = tones(s), paint = s === 'offline' ? tok('offline') : 'url(#g)';\r\n const defs = grad('g', t) + mask('m', '<g class=\"orb rot\"><g class=\"cn\"><circle class=\"ct self\" cx=\"112\" cy=\"88\" r=\"42\" fill=\"#000\"/></g></g>');\r\n const disc = s === 'offline'\r\n ? '<path d=\"M100 28 A72 72 0 1 1 99.99 28 Z M154 88 A42 42 0 1 0 154 88.01 Z\" fill=\"none\" stroke=\"' + tok('offline') + '\" stroke-width=\"4\"/>'\r\n : '<circle class=\"disc self\" cx=\"100\" cy=\"100\" r=\"72\" fill=\"' + paint + '\" mask=\"url(#m)\"/>';\r\n const rip = (s === 'blocked' || s === 'waiting') ? '<circle class=\"rip self\" cx=\"100\" cy=\"100\" r=\"72\" fill=\"none\" stroke=\"' + tok(s) + '\" stroke-width=\"3\" opacity=\"0\"/>' : '';\r\n const R_ = { static: [[], []], offline: [[], []], idle: [[A('.disc', 'breathe', 3.2, 'ease-in-out')], ['breathe']],\r\n thinking: [[A('.orb', 'rock', 2.4, 'ease-in-out')], ['rock']], running: [[A('.orb', 'spin', 2.2)], ['spin']],\r\n blocked: [[A('.rip', 'ripsm', 1.4, 'ease-out'), A('.disc', 'beat', 1.4, 'ease-in-out')], ['ripsm', 'beat']],\r\n waiting: [[A('.rip', 'ripsm', 2.6, 'ease-out')], ['ripsm']], done: [[A('.cn', 'centre', 3, EO)], ['centre']],\r\n error: [[A('.mark', 'shake', 2.4, 'ease-in-out')], ['shake']],\r\n boot: [[A('.disc', 'disc', 3.2, EO), A('.ct', 'grow', 3.2, EO), A('.orb', 'bootorb', 3.2, EIO)], ['disc', 'grow', 'bootorb']],\r\n loader: [[A('.orb', 'spin', 1.1)], ['spin']] }[s];\r\n return out(R_[0], R_[1], defs, '<g class=\"mark\">' + rip + disc + '</g>');\r\n },\r\n rings(s, light) {\r\n const t = tones(s), arcs = s === 'offline' ? tok('offline') : 'url(#g)';\r\n const sun = s === 'idle' ? '#d4d4d8' : (light ? 'url(#g)' : '#fff');\r\n const oL = 2 * Math.PI * 68, mL = 2 * Math.PI * 40;\r\n let outer = '<path class=\"ao\" d=\"' + arcp(68, -20, 290) + '\" stroke=\"' + arcs + '\" stroke-width=\"18\" stroke-linecap=\"round\" style=\"--len:' + (oL * 310 / 360).toFixed(1) + 'px\" stroke-dasharray=\"' + (oL * 310 / 360).toFixed(1) + ' 999\"/>';\r\n let mid = '<path class=\"am\" d=\"' + arcp(40, 160, 460) + '\" stroke=\"' + arcs + '\" stroke-width=\"16\" stroke-linecap=\"round\" style=\"--len:' + (mL * 300 / 360).toFixed(1) + 'px\" stroke-dasharray=\"' + (mL * 300 / 360).toFixed(1) + ' 999\"/>';\r\n const pd = on(68, -45), pdot = s === 'done' ? '' : '<circle class=\"pd self\" cx=\"' + pd[0].toFixed(2) + '\" cy=\"' + pd[1].toFixed(2) + '\" r=\"9\" fill=\"' + arcs + '\"/>';\r\n let extraKF = '';\r\n if (s === 'done') {\r\n outer = '<circle class=\"ao\" cx=\"100\" cy=\"100\" r=\"68\" stroke=\"' + arcs + '\" stroke-width=\"18\" stroke-dasharray=\"' + (oL * 310 / 360).toFixed(1) + ' ' + (oL * 50 / 360).toFixed(1) + '\" transform=\"rotate(-20 100 100)\"/>';\r\n mid = '<circle class=\"am\" cx=\"100\" cy=\"100\" r=\"40\" stroke=\"' + arcs + '\" stroke-width=\"16\" stroke-dasharray=\"' + (mL * 300 / 360).toFixed(1) + ' ' + (mL * 60 / 360).toFixed(1) + '\" transform=\"rotate(160 100 100)\"/>';\r\n extraKF = '@keyframes close_o{0%,15%{stroke-dasharray:' + (oL * 310 / 360).toFixed(1) + ' ' + (oL * 50 / 360).toFixed(1) + '}50%,100%{stroke-dasharray:' + oL.toFixed(1) + ' 0}}'\r\n + '@keyframes close_m{0%,15%{stroke-dasharray:' + (mL * 300 / 360).toFixed(1) + ' ' + (mL * 60 / 360).toFixed(1) + '}50%,100%{stroke-dasharray:' + mL.toFixed(1) + ' 0}}';\r\n }\r\n const sunel = s === 'offline' ? '<circle cx=\"100\" cy=\"100\" r=\"10\" fill=\"none\" stroke=\"#a1a1aa\" stroke-width=\"4\"/>' : '<circle class=\"sun self\" cx=\"100\" cy=\"100\" r=\"12\" fill=\"' + sun + '\"/>';\r\n const rip = (s === 'blocked' || s === 'waiting' || s === 'done') ? '<circle class=\"rip self\" cx=\"100\" cy=\"100\" r=\"12\" fill=\"none\" stroke=\"' + tok(s) + '\" stroke-width=\"3\" opacity=\"0\"/>' : '';\r\n const R_ = { static: [[], []], offline: [[], []], idle: [[A('.mark', 'breathe', 3.2, 'ease-in-out')], ['breathe']],\r\n thinking: [[A('.sun', 'pulse', 1.4, 'ease-in-out'), A('.gm', 'rock', 3, 'ease-in-out')], ['pulse', 'rock']],\r\n running: [[A('.go', 'spin', 5), A('.gm', 'spinr', 2.6)], ['spin', 'spinr']],\r\n blocked: [[A('.rip', 'ripple', 1.4, 'ease-out'), A('.sun', 'beat', 1.4, 'ease-in-out')], ['ripple', 'beat']],\r\n waiting: [[A('.rip', 'ripple', 2.6, 'ease-out')], ['ripple']],\r\n done: [[A('.ao', 'close_o', 3, EO), A('.am', 'close_m', 3, EO), A('.rip', 'ripone', 3, 'ease-out')], ['ripone']],\r\n error: [[A('.mark', 'shake', 2.4, 'ease-in-out')], ['shake']],\r\n boot: [[A('.ao', 'draw', 3.2, EIO), A('.am', 'drawl', 3.2, EIO), A('.sun,.pd', 'popin', 3.2, EO)], ['draw', 'drawl', 'popin']],\r\n loader: [[A('.go', 'spin', 1.6), A('.gm', 'spinr', 1)], ['spin', 'spinr']] }[s];\r\n const o = out(R_[0], R_[1], grad('g', t), '<g class=\"mark\"><g class=\"go rot\">' + outer + pdot + '</g><g class=\"gm rot\">' + mid + '</g>' + rip + sunel + '</g>');\r\n o.css += extraKF; return o;\r\n },\r\n parallel(s) {\r\n const t = tones(s), off = s === 'offline', paint = off ? tok('offline') : 'url(#g)';\r\n const top = '<g class=\"t\"><path d=\"' + arcp(56, 180, 360) + '\" stroke=\"' + paint + '\" stroke-width=\"30\"/></g>';\r\n const bot = '<g class=\"b\"><path d=\"' + arcp(56, 0, 180) + '\" stroke=\"' + paint + '\" stroke-width=\"30\"/></g>';\r\n const base = off ? '.t{transform:translate(16px,-6px)}.b{transform:translate(-16px,6px)}' : '.t{transform:translate(9px,-3px)}.b{transform:translate(-9px,3px)}';\r\n const R_ = { static: [[], []], offline: [[], []], idle: [[A('.mark', 'breathe', 3.2, 'ease-in-out')], ['breathe']],\r\n thinking: [[A('.t', 'ptl', 2.4, 'ease-in-out'), A('.b', 'pbl', 2.4, 'ease-in-out')], ['ptl', 'pbl']],\r\n running: [[A('.t', 'pt', 1.4, 'ease-in-out'), A('.b', 'pb', 1.4, 'ease-in-out')], ['pt', 'pb']],\r\n blocked: [[A('.t', 'lift', 1.4, EO)], ['lift']], waiting: [[A('.mark', 'breathe', 2.6, 'ease-in-out')], ['breathe']],\r\n done: [[A('.t', 'merge_t', 3, EO), A('.b', 'merge_b', 3, EO)], ['merge_t', 'merge_b']],\r\n error: [[A('.t', 'jit_t', 2.4, 'ease-in-out'), A('.b', 'jit_b', 2.4, 'ease-in-out')], ['jit_t', 'jit_b']],\r\n boot: [[A('.t', 'in_t', 3.2, EO), A('.b', 'in_b', 3.2, EO)], ['in_t', 'in_b']],\r\n loader: [[A('.t', 'pt', .9, 'ease-in-out'), A('.b', 'pb', .9, 'ease-in-out')], ['pt', 'pb']] }[s];\r\n return out([base].concat(R_[0]), R_[1], grad('g', t), '<g class=\"mark\"' + (off ? ' opacity=\".45\"' : '') + '>' + top + bot + '</g>');\r\n },\r\n stencil(s) {\r\n const t = tones(s), off = s === 'offline', paint = off ? tok('offline') : 'url(#g)';\r\n const defs = grad('g', t) + mask('m', '<g class=\"cut rot\"><path class=\"cl\" d=\"M' + f2(on(100, -45)) + ' L' + f2(on(100, 135)) + '\" stroke=\"#000\" stroke-width=\"' + (off ? 16 : 9) + '\"/></g>');\r\n const ring = off\r\n ? '<g mask=\"url(#m)\"><circle cx=\"100\" cy=\"100\" r=\"72\" stroke=\"' + paint + '\" stroke-width=\"4\"/><circle cx=\"100\" cy=\"100\" r=\"36\" stroke=\"' + paint + '\" stroke-width=\"4\"/></g>'\r\n : '<g mask=\"url(#m)\"><circle class=\"ring\" cx=\"100\" cy=\"100\" r=\"54\" stroke=\"' + paint + '\" stroke-width=\"36\" transform=\"rotate(-45 100 100)\" style=\"--len:339.3px\" stroke-dasharray=\"339.3\"/></g>';\r\n const rip = (s === 'blocked' || s === 'waiting') ? '<circle class=\"rip self\" cx=\"100\" cy=\"100\" r=\"72\" fill=\"none\" stroke=\"' + tok(s) + '\" stroke-width=\"3\" opacity=\"0\"/>' : '';\r\n const R_ = { static: [[], []], offline: [[], []], idle: [[A('.mark', 'breathe', 3.2, 'ease-in-out')], ['breathe']],\r\n thinking: [[A('.cut', 'rock', 2.4, 'ease-in-out')], ['rock']], running: [[A('.cut', 'spin', 2)], ['spin']],\r\n blocked: [[A('.rip', 'ripsm', 1.4, 'ease-out'), A('.ring', 'breathe', 1.4, 'ease-in-out')], ['ripsm', 'breathe']],\r\n waiting: [[A('.rip', 'ripsm', 2.6, 'ease-out')], ['ripsm']], done: [[A('.cl', 'close', 3, EO)], ['close']],\r\n error: [[A('.mark', 'shake', 2.4, 'ease-in-out'), A('.cl', 'widen', 2.4, 'ease-in-out')], ['shake', 'widen']],\r\n boot: [[A('.ring', 'draw', 3.2, EIO), A('.cut', 'sweep', 3.2, EIO)], ['draw', 'sweep']],\r\n loader: [[A('.cut', 'spin', .9)], ['spin']] }[s];\r\n return out(R_[0], R_[1], defs, '<g class=\"mark\">' + rip + ring + '</g>');\r\n },\r\n };\r\n\r\n /* ── pixel: each state sampled frame by frame on a grid, played with stepped CSS ── */\r\n const ease = (p) => { p = Math.max(0, Math.min(1, p)); return 1 - Math.pow(1 - p, 3); };\r\n const easeio = (p) => { p = Math.max(0, Math.min(1, p)); return p < .5 ? 4 * p * p * p : 1 - Math.pow(-2 * p + 2, 3) / 2; };\r\n const lerpK = (t, k) => { for (let i = 0; i < k.length - 1; i++) { const [t0, v0] = k[i], [t1, v1] = k[i + 1]; if (t >= t0 && t <= t1) return v0 + (v1 - v0) * (t1 > t0 ? (t - t0) / (t1 - t0) : 0); } return k[k.length - 1][1]; };\r\n const SHAKE = [[0, 0], [.04, -7], [.10, 6], [.16, -5], [.22, 3], [.28, -1], [.34, 0], [1, 0]];\r\n const ang = (x, y, cx = 100, cy = 100) => ((Math.atan2(y - cy, x - cx) * 180 / Math.PI) % 360 + 360) % 360;\r\n const inSpan = (a, a0, sp) => ((((a - a0) % 360) + 360) % 360) <= sp;\r\n const disc = (cx, cy, r) => (x, y) => (x - cx) * (x - cx) + (y - cy) * (y - cy) <= r * r;\r\n const ring = (cx, cy, r, w) => (x, y) => Math.abs(Math.hypot(x - cx, y - cy) - r) <= w / 2;\r\n const arcS = (cx, cy, r, w, a0, sp, caps = true) => {\r\n const e0 = on(r, a0, cx, cy), e1 = on(r, a0 + sp, cx, cy);\r\n return (x, y) => (Math.abs(Math.hypot(x - cx, y - cy) - r) <= w / 2 && inSpan(ang(x, y, cx, cy), ((a0 % 360) + 360) % 360, sp))\r\n || (caps && sp > 0 && (Math.hypot(x - e0[0], y - e0[1]) <= w / 2 || Math.hypot(x - e1[0], y - e1[1]) <= w / 2));\r\n };\r\n const minus = (a, b) => (x, y) => a(x, y) && !b(x, y);\r\n const ripL = (cx, cy, r0, grow, p, col, until = .75) => p > until ? null : [ring(cx, cy, r0 * (1 + grow * p), 9), col, 1 - p / until];\r\n const bandCol = (T) => (x, y) => { const d = ((x + y) / 2 - 30) / 140; return d < .36 ? T[0] : d < .68 ? T[1] : T[2]; };\r\n const breatheA = (t) => .45 + .55 * (.5 - .5 * Math.cos(2 * Math.PI * t));\r\n const S = {\r\n monogram(s, t, light) {\r\n const T = tones(s), L = []; let dx = 0, a = -45, pr = 14, al = 1;\r\n if (s === 'running' || s === 'loader') a = -45 + 360 * t;\r\n if (s === 'done') a = -45 - 320 * (1 - ease(t / .42));\r\n if (s === 'boot') a = t > .46 ? -45 + 360 * easeio((t - .46) / .4) : -45;\r\n if (s === 'thinking') pr = 14 * (.78 + .3 * (.5 - .5 * Math.cos(2 * Math.PI * t)));\r\n if (s === 'blocked' && t < .3) pr = 14 * (1 + .14 * Math.sin(Math.PI * t / .3));\r\n if (s === 'done' && t > .4 && t < .62) pr = 14 * (1 + .3 * Math.sin(Math.PI * (t - .4) / .22));\r\n if (s === 'boot') pr = t < .28 ? 0 : 14 * lerpK(t, [[.28, 0], [.38, 1.25], [.46, 1], [1, 1]]);\r\n if (s === 'idle') al = breatheA(t);\r\n if (s === 'error') dx = lerpK(t, SHAKE);\r\n const P = on(56, a), h = disc(P[0], P[1], 30), bc = bandCol(T);\r\n if (s === 'offline') return [[[minus(ring(100, 100, 56, 32), h), tok('offline'), .55], [ring(P[0], P[1], 12, 9), '#a1a1aa', 1]], 0];\r\n if (s === 'loader') { L.push([minus(ring(100, 100, 56, 32), h), bc, .22]); L.push([minus(arcS(100, 100, 56, 32, a - 110, 110, false), h), bc, 1]); }\r\n else if (s === 'boot') L.push([minus(arcS(100, 100, 56, 32, -45, 360 * easeio(t / .3), false), h), bc, 1]);\r\n else L.push([minus(ring(100, 100, 56, 32), h), bc, al]);\r\n if (s === 'blocked' || s === 'waiting') L.push(ripL(P[0], P[1], pr, 1.6, t, tok(s)));\r\n if (s === 'done' && t > .44 && t < .85) L.push(ripL(P[0], P[1], 15, 1.6, (t - .44) / .41, tok('done'), 1));\r\n if (pr > 0) L.push([disc(P[0], P[1], pr), s === 'idle' ? '#d4d4d8' : (light ? T[1] : '#fff'), s === 'idle' ? al : 1]);\r\n return [L, dx];\r\n },\r\n eccentric(s, t) {\r\n const T = tones(s), L = []; let dx = 0, th = 0, f = 1, al = 1, cs = 1, ds = 1;\r\n if (s === 'running' || s === 'loader') th = 360 * t;\r\n if (s === 'thinking') th = 22 * Math.sin(2 * Math.PI * t);\r\n if (s === 'done') f = t > .2 ? 1 - ease((t - .2) / .35) : 1;\r\n if (s === 'boot') { ds = lerpK(t, [[0, .4], [.14, 1], [1, 1]]); cs = t > .1 ? ease((t - .1) / .3) : 0; th = t > .46 ? 360 * easeio((t - .46) / .4) : 0; }\r\n if (s === 'idle') al = breatheA(t);\r\n if (s === 'error') dx = lerpK(t, SHAKE);\r\n const ox = 12 * f, oy = -12 * f, c = Math.cos(R(th)), sn = Math.sin(R(th));\r\n if (s === 'offline') return [[[ring(100, 100, 67, 10), tok('offline'), 1], [ring(112, 88, 46, 10), tok('offline'), 1]], 0];\r\n L.push([minus(disc(100, 100, 72 * ds), disc(100 + ox * c - oy * sn, 100 + ox * sn + oy * c, 42 * cs)), bandCol(T), al]);\r\n if (s === 'blocked' || s === 'waiting') L.push(ripL(100, 100, 72, .32, t, tok(s)));\r\n return [L, dx];\r\n },\r\n rings(s, t, light) {\r\n const T = tones(s), L = []; let dx = 0, to = 0, tm = 0, so = 310, sm = 300, sr = 12, al = 1, pdot = true;\r\n if (s === 'running' || s === 'loader') { to = 360 * t; tm = -720 * t; }\r\n if (s === 'thinking') { sr = 12 * (.78 + .3 * (.5 - .5 * Math.cos(2 * Math.PI * t))); tm = 22 * Math.sin(2 * Math.PI * t); }\r\n if (s === 'blocked' && t < .3) sr = 12 * (1 + .14 * Math.sin(Math.PI * t / .3));\r\n if (s === 'done') { const k = t > .15 ? ease((t - .15) / .35) : 0; so = 310 + 50 * k; sm = 300 + 60 * k; pdot = false; }\r\n if (s === 'boot') { so = 310 * easeio(t / .3); sm = t > .12 ? 300 * easeio((t - .12) / .28) : 0; sr = t < .28 ? 0 : 12 * lerpK(t, [[.28, 0], [.38, 1.25], [.46, 1], [1, 1]]); }\r\n if (s === 'idle') al = breatheA(t);\r\n if (s === 'error') dx = lerpK(t, SHAKE);\r\n const col = s === 'offline' ? tok('offline') : bandCol(T);\r\n if (so > 0) L.push([arcS(100, 100, 68, 18, -20 + to, Math.min(so, 360), so < 360), col, al]);\r\n if (sm > 0) L.push([arcS(100, 100, 40, 16, 160 + tm, Math.min(sm, 360), sm < 360), col, al]);\r\n if (pdot && (s !== 'boot' || t > .28)) { const p = on(68, -45 + to); L.push([disc(p[0], p[1], 10), col, al]); }\r\n if (s === 'offline') { L.push([ring(100, 100, 10, 9), '#a1a1aa', 1]); return [L, 0]; }\r\n if (s === 'blocked' || s === 'waiting') L.push(ripL(100, 100, sr, 1.6, t, tok(s)));\r\n if (s === 'done' && t > .44 && t < .85) L.push(ripL(100, 100, 12, 1.6, (t - .44) / .41, tok('done'), 1));\r\n if (sr > 0) L.push([disc(100, 100, sr), s === 'idle' ? '#d4d4d8' : (light ? T[1] : '#fff'), s === 'idle' ? al : 1]);\r\n return [L, dx];\r\n },\r\n parallel(s, t) {\r\n const T = tones(s), L = []; let tp = [9, -3], bt = [-9, 3], al = 1; const c = Math.cos(2 * Math.PI * t);\r\n if (s === 'running' || s === 'loader') { tp = [9 * c, -3]; bt = [-9 * c, 3]; }\r\n if (s === 'thinking') { tp = [6.5 + 2.5 * c, -3]; bt = [-6.5 - 2.5 * c, 3]; }\r\n if (s === 'blocked') tp = [9, -3 - 9 * (t >= .3 && t <= .7 ? 1 : (t < .3 ? t / .3 : (1 - t) / .3))];\r\n if (s === 'done') { const k = t > .15 ? ease((t - .15) / .35) : 0; tp = [9 * (1 - k), -3 * (1 - k)]; bt = [-9 * (1 - k), 3 * (1 - k)]; }\r\n if (s === 'error') { const j = lerpK(t, [[0, 0], [.08, 1], [.16, -.6], [.24, .5], [.4, 0], [1, 0]]); tp = [9 + 6 * j, -3 - 5 * j]; bt = [-9 - 6 * j, 3 + 5 * j]; }\r\n if (s === 'boot') { const k = ease(t / .35); tp = [9 + 81 * (1 - k), -3]; bt = [-9 - 81 * (1 - k), 3]; }\r\n if (s === 'idle' || s === 'waiting') al = breatheA(t);\r\n if (s === 'offline') { tp = [16, -6]; bt = [-16, 6]; al = .45; }\r\n const col = s === 'offline' ? tok('offline') : bandCol(T);\r\n L.push([(x, y) => Math.abs(Math.hypot(x - 100 - tp[0], y - 100 - tp[1]) - 56) <= 15 && y <= 100 + tp[1], col, al]);\r\n L.push([(x, y) => Math.abs(Math.hypot(x - 100 - bt[0], y - 100 - bt[1]) - 56) <= 15 && y >= 100 + bt[1], col, al]);\r\n return [L, 0];\r\n },\r\n stencil(s, t) {\r\n const T = tones(s), L = []; let dx = 0, th = 0, cw = 16, al = 1, rev = 360;\r\n if (s === 'running' || s === 'loader') th = 360 * t;\r\n if (s === 'thinking') th = 22 * Math.sin(2 * Math.PI * t);\r\n if (s === 'done') cw = t > .15 ? 16 * (1 - ease((t - .15) / .35)) : 16;\r\n if (s === 'error') { dx = lerpK(t, SHAKE); cw = lerpK(t, [[0, 16], [.1, 28], [.25, 28], [.4, 16], [1, 16]]); }\r\n if (s === 'boot') { rev = 360 * easeio(t / .3); th = t > .3 ? -180 + 180 * easeio((t - .3) / .4) : -180; }\r\n if (s === 'idle') al = breatheA(t);\r\n if (s === 'blocked') al = .6 + .4 * (.5 + .5 * Math.cos(2 * Math.PI * t));\r\n if (s === 'offline') { cw = 24; al = .55; }\r\n const n = [Math.cos(R(45 + th)), Math.sin(R(45 + th))];\r\n const cut = (x, y) => Math.abs((x - 100) * n[0] + (y - 100) * n[1]) <= cw / 2;\r\n const body = rev < 360 ? arcS(100, 100, 54, 36, -45, rev, false) : ring(100, 100, 54, 36);\r\n L.push([minus(body, cut), s === 'offline' ? tok('offline') : bandCol(T), al]);\r\n if (s === 'blocked' || s === 'waiting') L.push(ripL(100, 100, 72, .32, t, tok(s)));\r\n return [L, dx];\r\n },\r\n };\r\n const TIMING = { static: [1, 1], idle: [8, 3.2], thinking: [8, 1.4], running: [16, 1.8], blocked: [10, 1.4], waiting: [12, 2.6], done: [20, 3], error: [16, 2.4], offline: [1, 1], boot: [24, 3.2], loader: [12, 1] };\r\n const TIMING_O = { 'rings/running': [24, 5.2], 'rings/loader': [16, 1.6], 'eccentric/running': [16, 2.2], 'parallel/running': [14, 1.4], 'parallel/loader': [10, .9], 'stencil/running': [16, 2], 'stencil/loader': [12, .9], 'eccentric/loader': [12, 1.1] };\r\n const SUB = 4;\r\n function raster(layers, dx, G) {\r\n const cell = 200 / G, offs = []; for (let i = 0; i < SUB; i++) offs.push((i + .5) / SUB * cell);\r\n const grid = new Map();\r\n for (let gy = 0; gy < G; gy++) for (let gx = 0; gx < G; gx++) {\r\n const votes = new Map();\r\n for (const oy of offs) for (const ox of offs) {\r\n const x = gx * cell + ox - dx, y = gy * cell + oy; let key = null;\r\n for (const [shape, col, al] of layers) if (shape(x, y)) key = (typeof col === 'function' ? col(gx * cell + cell / 2, gy * cell + cell / 2) : col) + '|' + (Math.round(al * 100) / 100);\r\n votes.set(key, (votes.get(key) || 0) + 1);\r\n }\r\n let best = null, bv = 0; for (const [k, v] of votes) if (k !== null && v > bv) { best = k; bv = v; }\r\n if (best !== null && bv >= SUB * SUB * .4) grid.set(gx + ',' + gy, best);\r\n }\r\n return grid;\r\n }\r\n function framePaths(grid, G, ox = 0, oy = 0, unit) {\r\n const cell = unit || 200 / G, by = new Map();\r\n for (const [k, v] of grid) { const [gx, gy] = k.split(',').map(Number); if (!by.has(v)) by.set(v, []); by.get(v).push([gy, gx]); }\r\n let o = '';\r\n for (const [key, cells] of by) {\r\n cells.sort((a, b) => a[0] - b[0] || a[1] - b[1]);\r\n let d = '';\r\n for (let i = 0; i < cells.length;) {\r\n const [gy, gx] = cells[i]; let j = i;\r\n while (j + 1 < cells.length && cells[j + 1][0] === gy && cells[j + 1][1] === cells[j][1] + 1) j++;\r\n const w = (j - i + 1) * cell; d += 'M' + +((gx + ox) * cell).toFixed(3) + ' ' + +((gy + oy) * cell).toFixed(3) + 'h' + +w.toFixed(3) + 'v' + +cell.toFixed(3) + 'h-' + +w.toFixed(3) + 'z'; i = j + 1;\r\n }\r\n const [col, al] = key.split('|');\r\n o += '<path d=\"' + d + '\" style=\"fill:' + col + '\"' + (+al < 1 ? ' fill-opacity=\"' + al + '\"' : '') + '/>';\r\n }\r\n return o;\r\n }\r\n function frames(logo, s, light, G) {\r\n const [N, D] = s === 'static' ? [1, 1] : (TIMING_O[logo + '/' + s] || TIMING[s]);\r\n const grids = [];\r\n for (let i = 0; i < N; i++) { const [L, dx] = S[logo](s === 'static' ? 'thinking' : s, s === 'static' ? .5 : i / N, light); grids.push(raster(L.filter(Boolean), dx, G)); }\r\n return { N, D, grids };\r\n }\r\n function pixel(logo, s, light, G = 20) {\r\n const { N, D, grids } = frames(logo, s, light, G);\r\n if (N === 1) return { css: '', defs: '', body: '<g shape-rendering=\"crispEdges\">' + framePaths(grids[0], G) + '</g>' };\r\n const dt = D / N;\r\n const body = grids.map((g, i) => '<g class=\"f f' + i + '\" style=\"animation-delay:-' + (((N - i) % N) * dt).toFixed(3) + 's\">' + framePaths(g, G) + '</g>').join('');\r\n return { css: '.f{visibility:hidden;animation:fr ' + D + 's step-end infinite}@keyframes fr{0%{visibility:visible}' + (100 / N).toFixed(4) + '%{visibility:hidden}100%{visibility:hidden}}@media (prefers-reduced-motion:reduce){.f{animation:none}.f0{visibility:visible}}',\r\n defs: '', body: '<g shape-rendering=\"crispEdges\">' + body + '</g>' };\r\n }\r\n\r\n /* ── pixel wordmark: the mark on a 14-cell grid as the O, then r r e r y in a matching pixel font ── */\r\n const GLYPH = {\r\n r: ['##.####', '#######', '###....', '##.....', '##.....', '##.....', '##.....', '##.....', '##.....', '##.....'],\r\n e: ['.######.', '########', '##....##', '##....##', '########', '########', '##......', '##......', '########', '.#######'],\r\n y: ['##....##', '##....##', '##....##', '##....##', '##....##', '##....##', '##....##', '########', '.#######', '......##', '......##', '########', '#######.'],\r\n };\r\n function pixelWord(logo, s, light) {\r\n const G = 14, { N, D, grids } = frames(logo, s, light, G);\r\n let minX = G, maxX = 0, minY = G, maxY = 0;\r\n for (const g of grids) for (const k of g.keys()) { const [x, y] = k.split(',').map(Number); minX = Math.min(minX, x); maxX = Math.max(maxX, x); minY = Math.min(minY, y); maxY = Math.max(maxY, y); }\r\n if (minX > maxX) { minX = 0; maxX = G - 1; minY = 0; maxY = G - 1; }\r\n const xh = 10, ox = -minX, oy = (xh - 1) - maxY + 3; // O sits on the baseline (row 12); 3 rows of headroom for the planet\r\n let x = maxX - minX + 1 + 2, letters = '';\r\n for (const ch of 'rrery') {\r\n const g = GLYPH[ch]; let d = '';\r\n g.forEach((row, ry) => { for (let rx = 0; rx < row.length; rx++) if (row[rx] === '#') d += 'M' + (x + rx) + ' ' + (ry + 3) + 'h1v1h-1z'; });\r\n letters += d; x += g[0].length + 1;\r\n }\r\n const W = x - 1, H = 3 + 13, mark = (g) => framePaths(g, G, ox, oy, 1);\r\n const body = N === 1 ? mark(grids[0]) : grids.map((g, i) => '<g class=\"f f' + i + '\" style=\"animation-delay:-' + (((N - i) % N) * (D / N)).toFixed(3) + 's\">' + mark(g) + '</g>').join('');\r\n const css = N === 1 ? '' : '.f{visibility:hidden;animation:fr ' + D + 's step-end infinite}@keyframes fr{0%{visibility:visible}' + (100 / N).toFixed(4) + '%{visibility:hidden}100%{visibility:hidden}}@media (prefers-reduced-motion:reduce){.f{animation:none}.f0{visibility:visible}}';\r\n return { W, H, css, svg: '<g shape-rendering=\"crispEdges\">' + body + '<path d=\"' + letters + '\" fill=\"currentColor\"/></g>' };\r\n }\r\n\r\n const cache = new Map();\r\n const memo = (k, f) => { if (!cache.has(k)) cache.set(k, f()); return cache.get(k); };\r\n const api = {\r\n LOGOS, STATES, fallback: 'monogram',\r\n /** the logo in effect for an element: nearest data-logo up the tree (across shadow roots), else the fallback */\r\n resolve(el) {\r\n for (let n = el; n; n = n.parentNode || n.host) {\r\n if (n.nodeType === 1 && n.hasAttribute('data-logo')) {\r\n const v = n.getAttribute('data-logo');\r\n if (LOGOS.includes(v)) return v;\r\n warnOnce('logo:' + v, '[orr-logo] data-logo=\"' + v + '\" is not a logo. Use one of: ' + LOGOS.join(', ') + '.');\r\n }\r\n }\r\n return LOGOS.includes(api.fallback) ? api.fallback : 'monogram';\r\n },\r\n light(el) { for (let n = el; n; n = n.parentNode || n.host) if (n.nodeType === 1 && n.hasAttribute('data-theme')) return n.getAttribute('data-theme') === 'paper'; return false; },\r\n state(v) { v = (v || 'static').toLowerCase(); if (v.indexOf('{{') === 0) return 'static'; v = ALIAS[v] || v; if (!STATES.includes(v)) { warnOnce('state:' + v, '[orr-logo] state=\"' + v + '\" is unknown. Use one of: ' + STATES.join(', ') + '.'); v = 'static'; } return v; },\r\n /** markup for one mark: { css, defs, body } in a 200-unit box (memoised); `grid`: squares across it, pixel type only, 20 by default */\r\n draw(logo, state, type, light, color, shader, grid) {\r\n const s = KEY[state] || state;\r\n const sh = !!shader && type !== 'pixel';\r\n return memo([logo, s, type, light, color || '', sh ? 'sh' : '', grid || ''].join('/'), () => { TINT = color || null; SHADE = sh; try { return type === 'pixel' ? pixel(logo, s, light, grid) : V[logo](s, light); } finally { TINT = null; SHADE = false; } });\r\n },\r\n word(logo, state, light, color) { const s = KEY[state] || state; return memo(['w', logo, s, light, color || ''].join('/'), () => { TINT = color || null; try { return pixelWord(logo, s, light); } finally { TINT = null; } }); },\r\n /** switch the mark everywhere in this document */\r\n use(logo) { document.documentElement.setAttribute('data-logo', logo); },\r\n };\r\n const warned = new Set();\r\n function warnOnce(k, m) { if (!warned.has(k)) { warned.add(k); console.warn(m); } }\r\n return api;\r\n })();\r\n","import { ChangeDetectionStrategy, Component, ElementRef, booleanAttribute, effect, inject, input } from \"@angular/core\";\r\n\r\nimport { OrrLogo } from \"./logo-art\";\r\n\r\nexport type OrrLogoName = \"monogram\" | \"eccentric\" | \"rings\" | \"parallel\" | \"stencil\";\r\nexport type OrrLogoType = \"default\" | \"pixel\";\r\n/** Aliases work too: blocked, needs, executing, working, boot, queued, waiting-for-you, spinner. */\r\nexport type OrrLogoState =\r\n | \"static\" | \"idle\" | \"thinking\" | \"running\" | \"needs-you\" | \"waiting\" | \"done\" | \"error\" | \"offline\" | \"loading\" | \"loader\"\r\n | (string & {});\r\n\r\n/**\r\n * The mark every app draws unless an `<orr-logo>` says otherwise: switch it here, once, and every\r\n * front end follows (the design's `OrrLogo.fallback` / `<html data-logo>`).\r\n */\r\nexport const ORRERY_LOGO: { logo: OrrLogoName; type: OrrLogoType } = { logo: \"monogram\", type: \"default\" };\r\n\r\n/** The design system's `<orr-logo>` styles, verbatim. */\r\nconst CSS =\r\n \":host{display:inline-flex;align-items:center;vertical-align:middle;line-height:1} :host([wordmark]){display:inline;vertical-align:baseline;line-height:inherit}\" +\r\n \" .m{display:inline-block;flex:none;position:relative} .m svg{display:block;width:100%;height:100%;overflow:visible}\" +\r\n \" .plate{border-radius:22%;background:var(--brand-plate,#090a0f);display:inline-flex;align-items:center;justify-content:center}\" +\r\n \" .w{display:inline;white-space:nowrap;font:inherit} .w .m{display:inline-block;width:.6em;height:.6em;vertical-align:-.035em;margin:0 .035em 0 .03em}\" +\r\n \" .pw{display:inline-block;vertical-align:-.16em;color:currentColor}\";\r\n\r\nconst esc = (s: string) => s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/\"/g, \""\");\r\nconst warned = new Set<string>();\r\nconst warnOnce = (k: string, m: string) => { if (!warned.has(k)) { warned.add(k); console.warn(m); } };\r\n\r\nexport interface LogoOptions {\r\n logo?: string;\r\n type?: string;\r\n state?: string;\r\n size?: number | \"fill\";\r\n wordmark?: boolean;\r\n plate?: boolean;\r\n label?: string;\r\n color?: string | null;\r\n light?: boolean;\r\n /** The extensions finish: painted with the level colours (or `color`) under the light-streak texture. Vector only. */\r\n shader?: boolean;\r\n}\r\n\r\n/** The shadow-root markup of one `<orr-logo>`: the design's render, as a function. */\r\nexport function logoMarkup(o: LogoOptions): string {\r\n let logo = o.logo || ORRERY_LOGO.logo;\r\n if (!OrrLogo.LOGOS.includes(logo)) {\r\n warnOnce(\"logo:\" + logo, `[orr-logo] logo=\"${logo}\" is not a logo. Use one of: ${OrrLogo.LOGOS.join(\", \")}.`);\r\n logo = ORRERY_LOGO.logo;\r\n }\r\n let type = (o.type || ORRERY_LOGO.type).toLowerCase();\r\n if (type !== \"default\" && type !== \"pixel\") {\r\n warnOnce(\"type:\" + type, `[orr-logo] type=\"${type}\" is unknown. Use default or pixel.`);\r\n type = \"default\";\r\n }\r\n const state = OrrLogo.state(o.state), light = !!o.light, color = o.color || null;\r\n const label = o.label || \"Orrery\" + (state === \"static\" ? \"\" : \" · \" + state);\r\n const fill = o.size === \"fill\", size = fill ? 0 : (o.size as number) || 24;\r\n const box = (k: number) => (fill ? `width:${k * 100}%;height:${k * 100}%` : `width:${(size * k).toFixed(1)}px;height:${(size * k).toFixed(1)}px`);\r\n let html: string;\r\n if (o.wordmark && type === \"pixel\") {\r\n const w = OrrLogo.word(logo, state, light, color), u = 0.053; // one font pixel = 0.053em, so the O is one x-height\r\n html = `<style>${w.css}</style><span class=\"pw\" role=\"img\" aria-label=\"${esc(label)}\" style=\"width:${(w.W * u).toFixed(3)}em;height:${(w.H * u).toFixed(3)}em\"><svg viewBox=\"0 0 ${w.W} ${w.H}\" width=\"100%\" height=\"100%\">${w.svg}</svg></span>`;\r\n } else {\r\n const d = OrrLogo.draw(logo, state, type, light, color, !!o.shader, undefined);\r\n if (o.wordmark) {\r\n html = `<style>${d.css}</style><span class=\"w\" role=\"img\" aria-label=\"${esc(label)}\"><span class=\"m\"><svg viewBox=\"26 26 148 148\" fill=\"none\"><defs>${d.defs}</defs>${d.body}</svg></span><span aria-hidden=\"true\">rrery</span></span>`;\r\n } else {\r\n const svg = `<svg viewBox=\"0 0 200 200\" fill=\"none\" role=\"img\" aria-label=\"${esc(label)}\"><defs>${d.defs}</defs>${d.body}</svg>`;\r\n html = `<style>${d.css}</style>` + (o.plate\r\n ? `<span class=\"m plate\" style=\"${box(1)}\"><span class=\"m\" style=\"${box(0.78)}\">${svg}</span></span>`\r\n : `<span class=\"m\" style=\"${box(1)}\">${svg}</span>`);\r\n }\r\n }\r\n return `<style>${CSS}</style>` + html;\r\n}\r\n\r\n/** A mask's content animates on its own clock in Chrome, so a planet and the gap cut around it drift apart: give every animation in the mark one start time, two frames after render. */\r\nexport function syncMotion(root: { getAnimations?: () => Animation[] }): void {\r\n if (typeof requestAnimationFrame === \"undefined\" || typeof document === \"undefined\" || !root.getAnimations || !document.timeline) return;\r\n requestAnimationFrame(() => requestAnimationFrame(() => {\r\n const t0 = document.timeline.currentTime;\r\n for (const a of root.getAnimations!()) { try { a.startTime = t0; } catch { /* not timeline-bound */ } }\r\n }));\r\n}\r\n\r\n/**\r\n * `<orr-logo>`: the Orrery mark in every agent state, as vector or pixel art, the same generator as\r\n * the design (`scripts/design/sync-logo.mjs`). `wordmark` writes \"Orrery\" with the mark as its O;\r\n * `plate` is the app-icon form; `size=\"fill\"` fills the parent; `shader` paints it with the extensions\r\n * colour field. Which mark: `logo`, else ORRERY_LOGO.\r\n */\r\n@Component({\r\n selector: \"orr-logo\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { \"[attr.wordmark]\": \"wordmark() ? '' : null\" },\r\n template: \"\",\r\n})\r\nexport class OrrLogoComponent {\r\n readonly logo = input<OrrLogoName | undefined>(undefined);\r\n readonly type = input<OrrLogoType | undefined>(undefined);\r\n readonly state = input<OrrLogoState>(\"static\");\r\n /** px, or \"fill\"; a wordmark without a size takes the surrounding font size. */\r\n readonly size = input<number | \"fill\" | undefined, unknown>(undefined, {\r\n transform: (v: unknown) => (v === \"fill\" ? \"fill\" : v == null || v === \"\" ? undefined : Number(v)),\r\n });\r\n readonly wordmark = input(false, { transform: booleanAttribute });\r\n readonly plate = input(false, { transform: booleanAttribute });\r\n readonly label = input(\"\");\r\n /** Tints the brand states instead of the gradient. */\r\n readonly color = input<string | null>(null);\r\n /** Paper surfaces; unset, the nearest `data-theme` ancestor decides (\"paper\" = light). */\r\n readonly light = input<boolean | undefined>(undefined);\r\n /** The extensions finish: every level's colour (or `color`) under the light-streak texture. Vector only. */\r\n readonly shader = input(false, { transform: booleanAttribute });\r\n\r\n constructor() {\r\n const host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n const root = host.attachShadow({ mode: \"open\" });\r\n effect(() => {\r\n const size = this.size();\r\n host.style.fontSize = this.wordmark() && typeof size === \"number\" ? `${size}px` : \"\";\r\n if (size === \"fill\") host.style.display = host.style.display || \"inline-block\";\r\n const light = this.light() ?? host.closest(\"[data-theme]\")?.getAttribute(\"data-theme\") === \"paper\";\r\n root.innerHTML = logoMarkup({\r\n logo: this.logo(), type: this.type(), state: this.state(), size, wordmark: this.wordmark(),\r\n plate: this.plate(), label: this.label(), color: this.color(), light, shader: this.shader(),\r\n });\r\n syncMotion(root);\r\n });\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, computed, input, numberAttribute } from \"@angular/core\";\r\n\r\nimport { OrrLogoComponent } from \"../logo/logo.component\";\r\n\r\n// Official brand logos for the agent tools — single <path>, viewBox \"0 0 24 24\".\r\n// Sourced from simple-icons; rendered in each tool's accent color by app-tool-badge.\r\n// codex = OpenAI mark, gemini = Google Gemini mark, copilot = GitHub Copilot mark. `pi` ships no brand mark\r\n// (simple-icons has none), so its entry is a drawn π glyph in the same grid.\r\n/** Brand marks per agent tool (single path, 24 grid). */\r\nexport const TOOL_ICONS: Readonly<Record<string, string>> = {\r\n claude: \"m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z\",\r\n gemini: \"M11.04 19.32Q12 21.51 12 24q0-2.49.93-4.68.96-2.19 2.58-3.81t3.81-2.55Q21.51 12 24 12q-2.49 0-4.68-.93a12.3 12.3 0 0 1-3.81-2.58 12.3 12.3 0 0 1-2.58-3.81Q12 2.49 12 0q0 2.49-.96 4.68-.93 2.19-2.55 3.81a12.3 12.3 0 0 1-3.81 2.58Q2.49 12 0 12q2.49 0 4.68.96 2.19.93 3.81 2.55t2.55 3.81\",\r\n codex: \"M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z\",\r\n cursor: \"M11.503.131 1.891 5.678a.84.84 0 0 0-.42.726v11.188c0 .3.162.575.42.724l9.609 5.55a1 1 0 0 0 .998 0l9.61-5.55a.84.84 0 0 0 .42-.724V6.404a.84.84 0 0 0-.42-.726L12.497.131a1.01 1.01 0 0 0-.996 0M2.657 6.338h18.55c.263 0 .43.287.297.515L12.23 22.918c-.062.107-.229.064-.229-.06V12.335a.59.59 0 0 0-.295-.51l-9.11-5.257c-.109-.063-.064-.23.061-.23\",\r\n copilot: \"M23.922 16.997C23.061 18.492 18.063 22.02 12 22.02 5.937 22.02.939 18.492.078 16.997A.641.641 0 0 1 0 16.741v-2.869a.883.883 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.098 10.098 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952C7.255 2.937 9.248 1.98 11.978 1.98c2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.841.841 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256Zm-11.75-5.992h-.344a4.359 4.359 0 0 1-.355.508c-.77.947-1.918 1.492-3.508 1.492-1.725 0-2.989-.359-3.782-1.259a2.137 2.137 0 0 1-.085-.104L4 11.746v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.359 4.359 0 0 1-.355-.508Zm2.328 3.25c.549 0 1 .451 1 1v2c0 .549-.451 1-1 1-.549 0-1-.451-1-1v-2c0-.549.451-1 1-1Zm-5 0c.549 0 1 .451 1 1v2c0 .549-.451 1-1 1-.549 0-1-.451-1-1v-2c0-.549.451-1 1-1Zm3.313-6.185c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z\",\r\n // pi has no brand mark (simple-icons has none, its repo ships none), so this\r\n // is a drawn π glyph — top bar + two legs, the right one with the classic\r\n // foot — on the same 24-grid, painted in the neutral --tool-pi ink.\r\n pi: \"M3.45 4.85h17.1a1.45 1.45 0 0 1 0 2.9H3.45a1.45 1.45 0 0 1 0-2.9Zm3.3 4.15h2.9v9.6a1.45 1.45 0 0 1-2.9 0V9Zm7.95 0h2.9v8.5c0 .43.27.7.7.7h1.15a1.45 1.45 0 0 1 0 2.9h-1.6A3.15 3.15 0 0 1 14.7 17.7V9Z\",\r\n};\r\n\r\n/** The monogram drawn when a tool has no brand mark. */\r\nexport const TOOL_GLYPHS: Readonly<Record<string, string>> = { claude: \"✳\", codex: \"◆\", cursor: \"▸\", gemini: \"✦\", copilot: \"⬡\", pi: \"π\" };\r\n\r\nconst KNOWN = new Set([\"claude\", \"codex\", \"cursor\", \"gemini\", \"copilot\", \"pi\", \"orrery\"]);\r\n\r\n/**\r\n * `<orr-tool-badge tool=\"claude\" [size]=\"16\" />`: the agent tool's brand mark on a square tinted with\r\n * its `--tool-*` colour (from the ADE's `app-tool-badge`). Unknown tools show their first letter in `--ink-3`.\r\n */\r\n@Component({\r\n selector: \"orr-tool-badge\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [OrrLogoComponent],\r\n host: {\r\n role: \"img\",\r\n \"[attr.aria-label]\": \"tool()\",\r\n \"[attr.title]\": \"tool()\",\r\n style: \"display:inline-grid;place-items:center;flex:none;border-radius:4px;line-height:1\",\r\n \"[style.width.px]\": \"size()\",\r\n \"[style.height.px]\": \"size()\",\r\n \"[style.font-size.px]\": \"size() * 0.62\",\r\n \"[style.color]\": \"accent()\",\r\n \"[style.background]\": \"'color-mix(in oklch, ' + accent() + ', transparent 84%)'\",\r\n \"[style.border]\": \"'1px solid color-mix(in oklch, ' + accent() + ', transparent 64%)'\",\r\n },\r\n template: `\r\n @if (tool() === \"orrery\") {\r\n <!-- Orrery is its own agent: the brand mark (ORRERY_LOGO), not a drawn glyph -->\r\n <orr-logo [size]=\"size() * 0.7\" aria-hidden=\"true\" />\r\n } @else if (path(); as d) {\r\n <svg [attr.width]=\"size() * 0.7\" [attr.height]=\"size() * 0.7\" viewBox=\"0 0 24 24\" fill=\"currentColor\" style=\"display:block\" aria-hidden=\"true\"><path [attr.d]=\"d\" /></svg>\r\n } @else {\r\n {{ glyph() }}\r\n }\r\n `,\r\n})\r\nexport class OrrToolBadgeComponent {\r\n readonly tool = input.required<string>();\r\n readonly size = input(16, { transform: numberAttribute });\r\n readonly accent = computed(() => (KNOWN.has(this.tool()) ? `var(--tool-${this.tool()})` : \"var(--ink-3)\"));\r\n readonly path = computed(() => TOOL_ICONS[this.tool()] ?? null);\r\n readonly glyph = computed(() => TOOL_GLYPHS[this.tool()] ?? (this.tool()[0] ?? \"?\").toUpperCase());\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Directive,\r\n ElementRef,\r\n afterNextRender,\r\n booleanAttribute,\r\n contentChildren,\r\n inject,\r\n input,\r\n signal,\r\n output,\r\n} from \"@angular/core\";\r\nimport { KjButtonComponent, KjDialogComponent, KjSheetComponent, KjSheetRef } from \"@kouji-ui/components\";\r\nimport { KjDialogRef } from \"@kouji-ui/core\";\r\n\r\nimport { OrrIconComponent } from \"../icon/icon.component\";\r\n\r\n/** Marks content for the dialog / sheet head, right-aligned before the close button. */\r\n@Directive({ selector: \"[orrDialogActions]\", standalone: true })\r\nexport class OrrDialogActionsDirective {}\r\n\r\n/** Marks content drawn inline after the dialog title, on its row (e.g. the file and position of a review). */\r\n@Directive({ selector: \"[orrDialogTitle]\", standalone: true })\r\nexport class OrrDialogTitleDirective {}\r\n\r\n/** Marks content for the dialog / sheet foot (the actions row, right-aligned). */\r\n@Directive({ selector: \"[orrDialogFoot]\", standalone: true })\r\nexport class OrrDialogFootDirective {}\r\n\r\nlet dialogSeq = 0;\r\n\r\n/**\r\n * The dialog role an outer element already declares around `host` (a component that sets `role=dialog`\r\n * on its own host), named by `titleId` when it has no name; null when none does, and the shell's own\r\n * panel is the dialog. kouji's `KjDialogService` gives no element the role, so the panel carries it.\r\n */\r\nexport function outerDialog(host: HTMLElement, titleId: string): Element | null {\r\n const outer = host.parentElement?.closest(\"[role=dialog],[role=alertdialog]\") ?? null;\r\n if (outer && !outer.hasAttribute(\"aria-label\") && !outer.hasAttribute(\"aria-labelledby\")) outer.setAttribute(\"aria-labelledby\", titleId);\r\n return outer;\r\n}\r\n\r\n/** Why a shell closed itself: its × button. Esc and the scrim are kouji's overlay. */\r\nexport type DialogCloseReason = \"button\";\r\n\r\n/**\r\n * The dialog panel (`.o-dialog`) inside kouji's `<kj-dialog-shell>`: head (icon, title + sub, your\r\n * `[orrDialogActions]` right-aligned, × at the far right), body, and `[orrDialogFoot]`. Open the\r\n * component that uses it with kouji's `KjDialogService.open(…)`; the overlay gives the scrim, Esc,\r\n * the focus trap and the return focus. × closes the `KjDialogRef` and emits `closed`.\r\n *\r\n * ```html\r\n * <orr-dialog-shell heading=\"New session\" icon=\"plus\" size=\"md\" (closed)=\"…\">\r\n * <kj-button orrDialogActions kjVariant=\"ghost\" kjSize=\"sm\">Help</kj-button>\r\n * …body…\r\n * <kj-button orrDialogFoot kjVariant=\"outline\">Cancel</kj-button>\r\n * </orr-dialog-shell>\r\n * ```\r\n */\r\n@Component({\r\n selector: \"orr-dialog-shell\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [KjDialogComponent, KjButtonComponent, OrrIconComponent],\r\n host: { style: \"display:contents\" },\r\n template: `\r\n <kj-dialog-shell>\r\n <div class=\"o-dialog o-dialog--{{ size() }}\" [attr.role]=\"ownRole() ? (tone() === 'danger' ? 'alertdialog' : 'dialog') : null\" [attr.aria-modal]=\"ownRole() ? 'true' : null\" [attr.aria-labelledby]=\"titleId\">\r\n <div class=\"o-dialog__head\">\r\n @if (icon(); as i) {\r\n <span class=\"o-dialog__ico\" [class.o-dialog__ico--danger]=\"tone() === 'danger'\"><orr-icon [name]=\"i\" size=\"sm\" /></span>\r\n }\r\n <span style=\"flex:1;min-width:0;display:flex;flex-direction:column\">\r\n @if (inline().length) {\r\n <span style=\"display:flex;align-items:baseline;gap:var(--sp-4);min-width:0;white-space:nowrap\">\r\n <span class=\"o-dialog__title\" style=\"flex:none\" [id]=\"titleId\">{{ heading() }}</span>\r\n <ng-content select=\"[orrDialogTitle]\" />\r\n </span>\r\n } @else {\r\n <span class=\"o-dialog__title\" [id]=\"titleId\">{{ heading() }}</span>\r\n }\r\n @if (sub()) { <span class=\"o-dialog__sub\">{{ sub() }}</span> }\r\n </span>\r\n <ng-content select=\"[orrDialogActions]\" />\r\n @if (closable()) {\r\n <kj-button class=\"o-dialog__close\" kjVariant=\"ghost\" kjSize=\"icon\" [kjAriaLabel]=\"closeLabel()\" (click)=\"close()\">\r\n <orr-icon name=\"x\" size=\"sm\" />\r\n </kj-button>\r\n }\r\n </div>\r\n <div class=\"o-dialog__body\"><ng-content /></div>\r\n <div class=\"o-dialog__foot\" [hidden]=\"!foot().length\"><ng-content select=\"[orrDialogFoot]\" /></div>\r\n </div>\r\n </kj-dialog-shell>\r\n `,\r\n})\r\nexport class OrrDialogShellComponent {\r\n readonly heading = input(\"\");\r\n readonly sub = input(\"\");\r\n readonly icon = input<string | null>(null);\r\n readonly tone = input<\"default\" | \"danger\">(\"default\");\r\n /** sm 480 · md 600 · lg 880 · xl 1200. */\r\n readonly size = input<\"sm\" | \"md\" | \"lg\" | \"xl\">(\"md\");\r\n readonly closable = input(true, { transform: booleanAttribute });\r\n readonly closeLabel = input(\"Close\");\r\n readonly closed = output<DialogCloseReason>();\r\n\r\n protected readonly foot = contentChildren(OrrDialogFootDirective);\r\n protected readonly inline = contentChildren(OrrDialogTitleDirective);\r\n protected readonly titleId = `orr-dialog-title-${(dialogSeq += 1)}`;\r\n /** The panel is the dialog (role, modal, name) unless an outer element already declares one. */\r\n protected readonly ownRole = signal(true);\r\n private readonly ref = inject(KjDialogRef, { optional: true });\r\n\r\n constructor() {\r\n const host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n afterNextRender(() => {\r\n if (outerDialog(host, this.titleId)) this.ownRole.set(false);\r\n });\r\n }\r\n\r\n /** Closes the kouji dialog this shell sits in (if any) and emits `closed`. */\r\n close(): void {\r\n this.closed.emit(\"button\");\r\n this.ref?.close();\r\n }\r\n}\r\n\r\n/**\r\n * The phone bottom sheet (`.o-sheet`) inside kouji's `<kj-sheet-shell>`: grab handle, title, × at\r\n * thumb size, body, `[orrDialogFoot]` (buttons share the width). Open with kouji's `KjSheetService`.\r\n */\r\n@Component({\r\n selector: \"orr-sheet-shell\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [KjSheetComponent, KjButtonComponent, OrrIconComponent],\r\n host: { style: \"display:contents\" },\r\n template: `\r\n <kj-sheet-shell>\r\n <div class=\"o-sheet\" role=\"dialog\" aria-modal=\"true\" [attr.aria-label]=\"heading() || null\">\r\n <div class=\"o-sheet__head\">\r\n <span class=\"o-sheet__title\">{{ heading() }}</span>\r\n <ng-content select=\"[orrDialogActions]\" />\r\n @if (closable()) {\r\n <kj-button kjVariant=\"ghost\" kjSize=\"icon\" style=\"width:var(--tap);height:var(--tap)\" [kjAriaLabel]=\"closeLabel()\" (click)=\"close()\">\r\n <orr-icon name=\"x\" size=\"md\" />\r\n </kj-button>\r\n }\r\n </div>\r\n <div class=\"o-sheet__body\"><ng-content /></div>\r\n <div class=\"o-sheet__foot\" [hidden]=\"!foot().length\"><ng-content select=\"[orrDialogFoot]\" /></div>\r\n </div>\r\n </kj-sheet-shell>\r\n `,\r\n})\r\nexport class OrrSheetShellComponent {\r\n readonly heading = input(\"\");\r\n readonly closable = input(true, { transform: booleanAttribute });\r\n readonly closeLabel = input(\"Close\");\r\n readonly closed = output<DialogCloseReason>();\r\n\r\n protected readonly foot = contentChildren(OrrDialogFootDirective);\r\n private readonly ref = inject(KjSheetRef, { optional: true });\r\n\r\n close(): void {\r\n this.closed.emit(\"button\");\r\n this.ref?.close();\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, Directive, booleanAttribute, computed, contentChildren, input, numberAttribute, output } from \"@angular/core\";\r\n\r\nimport { OrrIconComponent } from \"../icon/icon.component\";\r\nimport { OrrKbdComponent } from \"../status/kbd.component\";\r\n\r\n/** Marks content for a card's head, right-aligned (`<orr-pill orrCardActions …>`). */\r\n@Directive({ selector: \"[orrCardActions]\", standalone: true })\r\nexport class OrrCardActionsDirective {}\r\n\r\n/** Marks content for a card's foot. */\r\n@Directive({ selector: \"[orrCardFoot]\", standalone: true })\r\nexport class OrrCardFootDirective {}\r\n\r\n/** `<orr-card heading=\"Machine\" icon=\"server\">…</orr-card>`: a `--panel` card (`.o-card`). */\r\n@Component({\r\n selector: \"orr-card\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [OrrIconComponent],\r\n host: { class: \"o-card\", \"[class.o-card--hover]\": \"hover()\", \"[attr.aria-selected]\": \"selected() ? 'true' : null\" },\r\n template: `\r\n <header class=\"o-card__head\" [hidden]=\"!heading() && !actions().length\">\r\n @if (icon(); as i) { <orr-icon [name]=\"i\" size=\"sm\" /> }\r\n <span class=\"o-card__title\">{{ heading() }}</span>\r\n <ng-content select=\"[orrCardActions]\" />\r\n </header>\r\n <div class=\"o-card__body\"><ng-content /></div>\r\n <footer class=\"o-card__foot\" [hidden]=\"!foot().length\"><ng-content select=\"[orrCardFoot]\" /></footer>\r\n `,\r\n})\r\nexport class OrrCardComponent {\r\n readonly heading = input(\"\");\r\n readonly icon = input<string | null>(null);\r\n readonly selected = input(false, { transform: booleanAttribute });\r\n /** Hover ring for a clickable card. */\r\n readonly hover = input(false, { transform: booleanAttribute });\r\n protected readonly actions = contentChildren(OrrCardActionsDirective);\r\n protected readonly foot = contentChildren(OrrCardFootDirective);\r\n}\r\n\r\n/**\r\n * `<orr-row label=\"Density\" config=\"ui.density\" hint=\"…\"><orr-seg …/></orr-row>`: one setting\r\n * (`.o-set-row`): label (`--ink`, medium), its config key (mono, `--ink-4`), the hint (`--ink-3`)\r\n * on the left; the control (projected) on the right, or under it with `wide`.\r\n */\r\n@Component({\r\n selector: \"orr-row\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { class: \"o-set-row\", \"[class.o-set-row--wide]\": \"wide()\", \"[class.o-set-row--dis]\": \"disabled()\", \"[attr.aria-disabled]\": \"disabled() ? 'true' : null\" },\r\n template: `\r\n <div class=\"o-set-row__text\">\r\n <span class=\"o-set-row__label\">{{ label() }}@if (config()) {<span class=\"o-set-row__key\">{{ config() }}</span>}</span>\r\n @if (hint()) { <span class=\"o-set-row__hint\">{{ hint() }}</span> }\r\n <ng-content select=\"[orrRowHint]\" />\r\n </div>\r\n <div class=\"o-set-row__ctl\"><ng-content /></div>\r\n `,\r\n})\r\nexport class OrrSettingRowComponent {\r\n readonly label = input.required<string>();\r\n readonly hint = input(\"\");\r\n /** The `config.toml` key this setting writes (decision 0003: both routes, always). */\r\n readonly config = input(\"\");\r\n readonly wide = input(false, { transform: booleanAttribute });\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n}\r\n\r\n/** `<orr-set-group heading=\"Appearance\">…rows…</orr-set-group>`: a ruled settings section. */\r\n@Component({\r\n selector: \"orr-set-group\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { class: \"o-set-group\", role: \"group\", \"[attr.aria-label]\": \"heading() || null\" },\r\n template: `@if (heading()) {<h3 class=\"o-set-group__head\">{{ heading() }}</h3>}<ng-content />`,\r\n})\r\nexport class OrrSettingGroupComponent {\r\n readonly heading = input(\"\");\r\n}\r\n\r\n/** Marks the empty state's action buttons. */\r\n@Directive({ selector: \"[orrEmptyAction]\", standalone: true })\r\nexport class OrrEmptyActionDirective {}\r\n\r\n/**\r\n * `<orr-empty icon=\"layers\" heading=\"No sessions\">Start one from …</orr-empty>`: an empty state\r\n * (`.o-empty`) that says what to do; `line` is the one-row form inside a list.\r\n */\r\n@Component({\r\n selector: \"orr-empty\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [OrrIconComponent],\r\n host: { class: \"o-empty\", \"[class.o-empty--line]\": \"line()\", role: \"status\" },\r\n template: `\r\n @if (!line() && icon(); as i) { <span class=\"o-empty__ico\"><orr-icon [name]=\"i\" size=\"lg\" /></span> }\r\n @if (!line() && heading()) { <span class=\"o-empty__title\">{{ heading() }}</span> }\r\n <span class=\"o-empty__body\"><ng-content /></span>\r\n <span class=\"o-empty__action\" [hidden]=\"!action().length\"><ng-content select=\"[orrEmptyAction]\" /></span>\r\n `,\r\n})\r\nexport class OrrEmptyComponent {\r\n readonly icon = input<string | null>(null);\r\n readonly heading = input(\"\");\r\n readonly line = input(false, { transform: booleanAttribute });\r\n protected readonly action = contentChildren(OrrEmptyActionDirective);\r\n}\r\n\r\n/** `<orr-skeleton [lines]=\"3\" />`: shimmering placeholder lines (`.o-skel`); the last of several is shorter. */\r\n@Component({\r\n selector: \"orr-skeleton\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { role: \"status\", \"[attr.aria-label]\": \"label()\", style: \"display:block\" },\r\n template: `@for (l of rows(); track $index) {<span class=\"o-skel o-skel--line\" [class.o-skel--circle]=\"circle()\" [style.width]=\"w() || null\" [style.height]=\"h() || null\"></span>}`,\r\n})\r\nexport class OrrSkeletonComponent {\r\n readonly lines = input(1, { transform: numberAttribute });\r\n readonly w = input(\"\");\r\n readonly h = input(\"\");\r\n readonly circle = input(false, { transform: booleanAttribute });\r\n readonly label = input(\"Loading\");\r\n readonly rows = computed(() => Array.from({ length: Math.max(1, this.lines() || 1) }));\r\n}\r\n\r\n/** `<orr-spinner size=\"sm\" />`: the ring spinner (`.o-spin`) in `currentColor`. */\r\n@Component({\r\n selector: \"orr-spinner\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { role: \"status\", \"[class]\": \"cls()\", \"[attr.aria-label]\": \"label()\" },\r\n template: \"\",\r\n})\r\nexport class OrrSpinnerComponent {\r\n readonly size = input<\"sm\" | \"md\" | \"lg\">(\"md\");\r\n readonly label = input(\"Loading\");\r\n readonly cls = computed(() => \"o-spin\" + (this.size() !== \"md\" ? \" o-spin--\" + this.size() : \"\"));\r\n}\r\n\r\n/**\r\n * `<orr-search-pill label=\"Search\" keys=\"Ctrl K\" (activate)=\"openPalette()\" />`: the top-bar search\r\n * trigger (`.o-search-trigger`): icon, label, and the shortcut as an inline hint.\r\n */\r\n@Component({\r\n selector: \"orr-search-pill\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [OrrIconComponent, OrrKbdComponent],\r\n host: { style: \"display:inline-flex\" },\r\n template: `\r\n <button type=\"button\" class=\"o-search-trigger\" [attr.aria-label]=\"(label() || 'Search') + (keys() ? ' (' + keys() + ')' : '')\" (click)=\"activate.emit()\">\r\n <orr-icon [name]=\"icon()\" size=\"sm\" />\r\n @if (label()) { <span>{{ label() }}</span> }\r\n @if (keys()) { <orr-kbd [keys]=\"keys()\" [inline]=\"true\" /> }\r\n </button>\r\n `,\r\n})\r\nexport class OrrSearchPillComponent {\r\n readonly label = input(\"Search\");\r\n readonly keys = input(\"Ctrl K\");\r\n readonly icon = input(\"search\");\r\n readonly activate = output<void>();\r\n}\r\n","import { ChangeDetectionStrategy, Component, ElementRef, inject, input, output, signal } from \"@angular/core\";\r\n\r\n/**\r\n * `<orr-pane-resizer side=\"right\" [width]=\"w\" (widthChange)=\"w = $event\" (reset)=\"w = 300\" />`: the drag\r\n * handle on a side column's inner edge (the ADE's `app-pane-resizer`, shared). It owns the gesture only;\r\n * the host keeps the width. `side` is where the column sits: a right-hand column grows as the pointer\r\n * moves left. ← → nudge it by 16px, double-click asks for the host's default.\r\n */\r\n@Component({\r\n selector: \"orr-pane-resizer\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `<span class=\"grip\"></span>`,\r\n host: {\r\n class: \"orr-pane-resizer\",\r\n \"[class.dragging]\": \"dragging()\",\r\n role: \"separator\",\r\n \"aria-orientation\": \"vertical\",\r\n \"[attr.aria-valuenow]\": \"width()\",\r\n \"[attr.aria-valuemin]\": \"min()\",\r\n \"[attr.aria-valuemax]\": \"max()\",\r\n \"[attr.aria-label]\": \"label()\",\r\n tabindex: \"0\",\r\n title: \"Drag to resize · double-click to reset\",\r\n \"(pointerdown)\": \"startDrag($event)\",\r\n \"(dblclick)\": \"reset.emit()\",\r\n \"(keydown.arrowLeft)\": \"nudge(-16, $event)\",\r\n \"(keydown.arrowRight)\": \"nudge(16, $event)\",\r\n },\r\n styles: [\r\n `\r\n :host { position: relative; flex: 0 0 5px; margin: 0 -2px; z-index: 2; cursor: col-resize; display: grid; place-items: center; touch-action: none; }\r\n .grip { width: 1px; height: 100%; background: transparent; transition: background 0.13s ease; }\r\n :host(:hover) .grip, :host(:focus-visible) .grip, :host(.dragging) .grip { width: 2px; background: var(--accent); }\r\n :host(:focus-visible) { outline: none; }\r\n `,\r\n ],\r\n})\r\nexport class OrrPaneResizerComponent {\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n\r\n /** The column's width in px: a drag starts from it. */\r\n readonly width = input.required<number>();\r\n readonly min = input(220);\r\n readonly max = input(640);\r\n /** Where the column sits beside the handle. */\r\n readonly side = input<\"left\" | \"right\">(\"left\");\r\n readonly label = input(\"Resize the panel\");\r\n\r\n /** The clamped width, on every pointer move and nudge. */\r\n readonly widthChange = output<number>();\r\n /** Double-click: the host's default. */\r\n readonly reset = output<void>();\r\n\r\n readonly dragging = signal(false);\r\n\r\n startDrag(ev: PointerEvent): void {\r\n if (ev.button !== 0) return;\r\n ev.preventDefault();\r\n this.dragging.set(true);\r\n const body = document.body.style;\r\n const before = { cursor: body.cursor, select: body.userSelect };\r\n body.cursor = \"col-resize\";\r\n body.userSelect = \"none\";\r\n const startX = ev.clientX;\r\n const startW = this.width();\r\n const dir = this.side() === \"right\" ? -1 : 1;\r\n this.host.setPointerCapture?.(ev.pointerId);\r\n const move = (e: PointerEvent) => this.emit(startW + dir * (e.clientX - startX));\r\n const up = (e: PointerEvent) => {\r\n this.dragging.set(false);\r\n body.cursor = before.cursor;\r\n body.userSelect = before.select;\r\n this.host.releasePointerCapture?.(e.pointerId);\r\n window.removeEventListener(\"pointermove\", move);\r\n window.removeEventListener(\"pointerup\", up);\r\n };\r\n window.addEventListener(\"pointermove\", move);\r\n window.addEventListener(\"pointerup\", up);\r\n }\r\n\r\n /** The keyboard route: ← → move the edge, whichever side the column is on. */\r\n nudge(by: number, ev: Event): void {\r\n ev.preventDefault();\r\n this.emit(this.width() + (this.side() === \"right\" ? -by : by));\r\n }\r\n\r\n private emit(next: number): void {\r\n this.widthChange.emit(Math.min(this.max(), Math.max(this.min(), Math.round(next))));\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, booleanAttribute, computed, input, model } from \"@angular/core\";\r\nimport { KjOptionComponent, KjOptionGroup, KjSelectComponent, KjTabComponent, KjTabListComponent, KjTabsComponent } from \"@kouji-ui/components\";\r\n\r\nimport { OrrIconComponent } from \"../icon/icon.component\";\r\n\r\nexport interface SelectOption {\r\n value: string;\r\n label: string;\r\n}\r\n\r\n/** A titled cluster of options (the `<optgroup>` role). */\r\nexport interface SelectGroup {\r\n label: string;\r\n options: (string | SelectOption)[];\r\n /** The heading folds and unfolds the group (Left / Right on the keyboard). */\r\n collapsible?: boolean;\r\n /** Starts folded; needs `collapsible`. */\r\n collapsed?: boolean;\r\n}\r\n\r\nexport interface SelectRun {\r\n label: string | null;\r\n options: SelectOption[];\r\n collapsible?: boolean;\r\n collapsed?: boolean;\r\n}\r\n\r\n/** From this many options on, `searchable=\"auto\"` shows the search field. */\r\nexport const SELECT_SEARCH_FROM = 8;\r\n\r\nfunction isGroup(o: string | SelectOption | SelectGroup): o is SelectGroup {\r\n return typeof o !== \"string\" && \"options\" in o;\r\n}\r\n\r\n/** Strings, `{value, label}` pairs and groups, mixed, flattened into runs in their order. */\r\nexport function selectRuns(options: readonly (string | SelectOption | SelectGroup)[]): SelectRun[] {\r\n const toOption = (o: string | SelectOption): SelectOption => (typeof o === \"string\" ? { value: o, label: o } : o);\r\n const out: SelectRun[] = [];\r\n for (const o of options) {\r\n if (isGroup(o)) {\r\n out.push({ label: o.label, options: o.options.map(toOption), collapsible: !!o.collapsible, collapsed: !!o.collapsible && !!o.collapsed });\r\n continue;\r\n }\r\n const tail = out[out.length - 1];\r\n if (tail && tail.label === null) tail.options.push(toOption(o));\r\n else out.push({ label: null, options: [toOption(o)] });\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * `<orr-select [(value)]=\"model\" [options]=\"opts\" />`: kouji's `<kj-select>` with Orrery's option\r\n * shapes (from the ADE's `app-select`): strings, `{ value, label }` and `{ label, options }` groups.\r\n * A long list gets a search field (`searchable`, \"auto\" from SELECT_SEARCH_FROM options on);\r\n * a group with `collapsible` folds under its heading.\r\n */\r\n@Component({\r\n selector: \"orr-select\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [KjSelectComponent, KjOptionComponent, KjOptionGroup],\r\n template: `\r\n <kj-select [kjSize]=\"size()\" [placeholder]=\"placeholder()\" [disabled]=\"disabled()\" [value]=\"value()\" (valueChange)=\"value.set($any($event))\"\r\n [kjSearchable]=\"search()\" [kjSearchPlaceholder]=\"searchPlaceholder()\" [kjDisplayWith]=\"displayWith()\">\r\n <span kjSelectEmpty>{{ searchEmpty() }}</span>\r\n @for (g of runs(); track $index) {\r\n @if (g.label) {\r\n <kj-option-group [kjLabel]=\"g.label\" [kjCollapsible]=\"!!g.collapsible\" [kjCollapsed]=\"!!g.collapsed\">\r\n @for (o of g.options; track o.value) {\r\n <kj-option [value]=\"o.value\" [kjLabel]=\"o.label\">{{ o.label }}</kj-option>\r\n }\r\n </kj-option-group>\r\n } @else {\r\n @for (o of g.options; track o.value) {\r\n <kj-option [value]=\"o.value\" [kjLabel]=\"o.label\">{{ o.label }}</kj-option>\r\n }\r\n }\r\n }\r\n </kj-select>\r\n `,\r\n})\r\nexport class OrrSelectComponent {\r\n readonly value = model<string>(\"\");\r\n readonly options = input<readonly (string | SelectOption | SelectGroup)[]>([]);\r\n readonly placeholder = input(\"Select…\");\r\n readonly size = input<\"xs\" | \"sm\" | \"md\" | \"lg\">(\"sm\");\r\n readonly disabled = input(false);\r\n /** A search field above the options: always, never, or \"auto\" (from SELECT_SEARCH_FROM options on). */\r\n readonly searchable = input<boolean | \"auto\">(\"auto\");\r\n readonly searchPlaceholder = input(\"Search…\");\r\n /** What the search shows when nothing matches, e.g. \"No matching projects\". */\r\n readonly searchEmpty = input(\"No matches\");\r\n /** The closed select's text for a value no option has (an archived agent…); unset: the value itself. */\r\n readonly displayWith = input<((value: unknown) => string) | null>(null);\r\n readonly runs = computed(() => selectRuns(this.options()));\r\n protected readonly search = computed(() => {\r\n const s = this.searchable();\r\n return s === \"auto\" ? this.runs().reduce((n, g) => n + g.options.length, 0) >= SELECT_SEARCH_FROM : s;\r\n });\r\n}\r\n\r\nexport interface SegOption {\r\n value: string;\r\n label: string;\r\n icon?: string;\r\n title?: string;\r\n disabled?: boolean;\r\n}\r\n\r\n/**\r\n * `<orr-seg [(value)]=\"mode\" [options]=\"[{value:'tree',label:'Tree',icon:'git-branch'}, …]\" />`:\r\n * a segmented switch, drawn by kouji's pill tabs, which @getorrery/styles draws as `.o-seg` (`size=\"xs\"` is the in-pane `.tabs-xs` form).\r\n * `block` fills the row and shares it between the options (`.o-seg--block`); `size=\"tap\"` is the phone's 36 px\r\n * option in body text (`.o-seg--tap`): `<orr-seg block size=\"tap\" … />` is PhoneApp-14's Theme switch.\r\n */\r\n@Component({\r\n selector: \"orr-seg\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [KjTabsComponent, KjTabListComponent, KjTabComponent, OrrIconComponent],\r\n host: { \"[style.display]\": \"block() ? 'flex' : 'inline-flex'\", \"[style.flex-shrink]\": \"0\", \"[style.min-width]\": \"block() ? '0' : null\" },\r\n template: `\r\n <kj-tabs variant=\"pills\" [class.tabs-xs]=\"size() === 'xs'\" [class.seg-tap]=\"size() === 'tap'\" [class.seg-block]=\"block()\" [style.width]=\"block() ? '100%' : null\" [value]=\"value()\" (valueChange)=\"value.set($any($event))\">\r\n <kj-tab-list [attr.aria-label]=\"label()\">\r\n @for (o of options(); track o.value) {\r\n <kj-tab [value]=\"o.value\" [disabled]=\"!!o.disabled\" [attr.title]=\"o.title || null\">\r\n @if (o.icon) { <orr-icon [name]=\"o.icon\" size=\"sm\" [color]=\"o.value === value() ? 'var(--ui-ink)' : null\" /> }{{ o.label }}\r\n <!-- An icon-only option is named by its title: the tab itself, not only its tooltip wrapper. -->\r\n @if (!o.label && o.title) { <span class=\"sr-only\">{{ o.title }}</span> }\r\n </kj-tab>\r\n }\r\n </kj-tab-list>\r\n </kj-tabs>\r\n `,\r\n})\r\nexport class OrrSegComponent {\r\n readonly value = model<string>(\"\");\r\n readonly options = input<readonly SegOption[]>([]);\r\n readonly label = input(\"\");\r\n readonly size = input<\"xs\" | \"sm\" | \"tap\">(\"sm\");\r\n /** Fill the row: the options share its width. */\r\n readonly block = input(false, { transform: booleanAttribute });\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n booleanAttribute,\r\n computed,\r\n contentChildren,\r\n forwardRef,\r\n inject,\r\n input,\r\n model,\r\n numberAttribute,\r\n} from \"@angular/core\";\r\n\r\n/**\r\n * `<orr-choices [(value)]=\"where\" label=\"Run on\"><orr-choice value=\"desk\">…</orr-choice></orr-choices>`:\r\n * a radio group drawn as cards (`.o-choices > .o-choice[aria-checked]`, CloudApp-00 \"Run on\"). `card` is the\r\n * stacked size card (`.o-choice--card`: title row, spec, note on `--panel-2`; selected = accent border + ring).\r\n * The whole card is the radio: click or Space picks it; ← → ↑ ↓ Home End move and pick, roving focus.\r\n * `columns` sets the grid (default 2). Content is the card's own: `.o-choice__text`, `__title`, `__sub` help.\r\n */\r\n@Component({\r\n selector: \"orr-choices\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: \"o-choices\",\r\n role: \"radiogroup\",\r\n \"[class.o-choices--card]\": \"card()\",\r\n \"[attr.aria-label]\": \"label() || null\",\r\n \"[style.--n]\": \"columns()\",\r\n \"(keydown)\": \"onKey($event)\",\r\n },\r\n template: `<ng-content />`,\r\n})\r\nexport class OrrChoicesComponent {\r\n readonly value = model<string | null>(null);\r\n readonly label = input(\"\");\r\n readonly columns = input(2, { transform: numberAttribute });\r\n /** The stacked card form (the instance sizes). */\r\n readonly card = input(false, { transform: booleanAttribute });\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n\r\n private readonly options = contentChildren(forwardRef(() => OrrChoiceComponent), { descendants: true });\r\n /** The option that holds the tab stop: the chosen one, else the first enabled. */\r\n readonly tabStop = computed(() => {\r\n const opts = this.options().filter((o) => !o.off());\r\n return (opts.find((o) => o.value() === this.value()) ?? opts[0])?.value() ?? null;\r\n });\r\n\r\n pick(v: string): void {\r\n if (this.disabled()) return;\r\n this.value.set(v);\r\n }\r\n\r\n protected onKey(e: KeyboardEvent): void {\r\n const opts = this.options().filter((o) => !o.off());\r\n if (!opts.length) return;\r\n const at = opts.findIndex((o) => o.host.nativeElement === document.activeElement);\r\n let i: number;\r\n switch (e.key) {\r\n case \"ArrowRight\":\r\n case \"ArrowDown\":\r\n i = at < 0 ? 0 : (at + 1) % opts.length;\r\n break;\r\n case \"ArrowLeft\":\r\n case \"ArrowUp\":\r\n i = at < 0 ? 0 : (at - 1 + opts.length) % opts.length;\r\n break;\r\n case \"Home\":\r\n i = 0;\r\n break;\r\n case \"End\":\r\n i = opts.length - 1;\r\n break;\r\n default:\r\n return;\r\n }\r\n e.preventDefault();\r\n const o = opts[i]!;\r\n this.pick(o.value());\r\n o.host.nativeElement.focus();\r\n }\r\n}\r\n\r\n/** One card of `<orr-choices>`: `value`, `disabled`; the content is the card. */\r\n@Component({\r\n selector: \"orr-choice\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: \"o-choice\",\r\n role: \"radio\",\r\n \"[class.o-choice--card]\": \"group.card()\",\r\n \"[attr.aria-checked]\": \"checked()\",\r\n \"[attr.aria-disabled]\": \"off() || null\",\r\n \"[attr.tabindex]\": \"off() ? -1 : group.tabStop() === value() ? 0 : -1\",\r\n \"(click)\": \"choose()\",\r\n \"(keydown.space)\": \"$event.preventDefault(); choose()\",\r\n \"(keydown.enter)\": \"$event.preventDefault(); choose()\",\r\n },\r\n template: `<ng-content />`,\r\n})\r\nexport class OrrChoiceComponent {\r\n readonly value = input.required<string>();\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n\r\n protected readonly group = inject(OrrChoicesComponent);\r\n readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n readonly checked = computed(() => this.group.value() === this.value());\r\n readonly off = computed(() => this.disabled() || this.group.disabled());\r\n\r\n protected choose(): void {\r\n if (this.off()) return;\r\n this.group.pick(this.value());\r\n }\r\n}\r\n","/**\r\n * The one model behind every changed-file list (working tree, a commit, a compare, a session): rows\r\n * for a tree or a flat list. Folders carry the aggregate of everything below them (±lines, and the\r\n * state when every descendant shares one), single-child folder chains collapse into one row\r\n * (`src/webhooks`), folders sort before files, both alphabetically.\r\n */\r\n\r\n/** A changed file. `status` is the VCS letter: A M D R C U ? ! (M when unset; `\"\"` = unchanged, no letter: a file browser). */\r\nexport interface ChangedFile {\r\n path: string;\r\n status?: string;\r\n add?: number;\r\n del?: number;\r\n /** R: the path before the move. */\r\n from?: string;\r\n}\r\n\r\nexport type FileListMode = \"tree\" | \"flat\";\r\n\r\n/** Same file row data (path, letter, counts, rename source). */\r\nexport function sameChangedFile(a: ChangedFile, b: ChangedFile): boolean {\r\n return a === b || (a.path === b.path && a.status === b.status && a.add === b.add && a.del === b.del && a.from === b.from);\r\n}\r\n\r\n/**\r\n * Two file lists with the same rows, in the same order. A host that rebuilds its list on every\r\n * poll or stream frame hands the list an equal array: with this as a signal's `equal`, nothing\r\n * downstream recomputes and no row re-renders.\r\n */\r\nexport function sameChangedFiles(a: readonly ChangedFile[], b: readonly ChangedFile[]): boolean {\r\n if (a === b) return true;\r\n if (a.length !== b.length) return false;\r\n for (let i = 0; i < a.length; i++) if (!sameChangedFile(a[i]!, b[i]!)) return false;\r\n return true;\r\n}\r\n\r\n/** Same visible rows (what `fileRows` gives): the list's `@for` then has nothing to update. */\r\nexport function sameRows(a: readonly FileRow[], b: readonly FileRow[]): boolean {\r\n if (a === b) return true;\r\n if (a.length !== b.length) return false;\r\n for (let i = 0; i < a.length; i++) {\r\n const x = a[i]!;\r\n const y = b[i]!;\r\n if (x.kind !== y.kind || x.path !== y.path || x.name !== y.name || x.depth !== y.depth || x.dir !== y.dir || x.state !== y.state || x.add !== y.add || x.del !== y.del) return false;\r\n if ((x.file || y.file) && !(x.file && y.file && sameChangedFile(x.file, y.file))) return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport interface FileRow {\r\n kind: \"dir\" | \"file\";\r\n /** Folder rows: the deepest folder of a collapsed chain. */\r\n path: string;\r\n /** What the row shows: a file name, a folder chain (`src/webhooks`), or in flat mode the file name. */\r\n name: string;\r\n depth: number;\r\n /** Files: the parent folder (flat mode shows it after the name). */\r\n dir: string;\r\n file?: ChangedFile;\r\n /** Files: their letter (M when unset). Folders: the uniform letter of everything below, or \"\". */\r\n state: string;\r\n add: number;\r\n del: number;\r\n}\r\n\r\ninterface Dir {\r\n name: string;\r\n path: string;\r\n dirs: Map<string, Dir>;\r\n files: { name: string; f: ChangedFile }[];\r\n}\r\n\r\nconst parentOf = (p: string) => {\r\n const i = p.lastIndexOf(\"/\");\r\n return i > 0 ? p.slice(0, i) : \"\";\r\n};\r\n\r\n/** The visible rows: folders collapsed in `collapsed` hide what is under them. */\r\nexport function fileRows(files: readonly ChangedFile[], mode: FileListMode = \"tree\", collapsed: ReadonlySet<string> = new Set()): FileRow[] {\r\n if (mode === \"flat\") {\r\n return files.map((f) => ({\r\n kind: \"file\",\r\n path: f.path,\r\n name: f.path.slice(f.path.lastIndexOf(\"/\") + 1),\r\n depth: 0,\r\n dir: parentOf(f.path),\r\n file: f,\r\n state: f.status ?? \"M\",\r\n add: f.add ?? 0,\r\n del: f.del ?? 0,\r\n }));\r\n }\r\n const root: Dir = { name: \"\", path: \"\", dirs: new Map(), files: [] };\r\n for (const f of files) {\r\n const parts = f.path.split(\"/\");\r\n let node = root;\r\n parts.slice(0, -1).forEach((p, i) => {\r\n if (!node.dirs.has(p)) node.dirs.set(p, { name: p, path: parts.slice(0, i + 1).join(\"/\"), dirs: new Map(), files: [] });\r\n node = node.dirs.get(p)!;\r\n });\r\n node.files.push({ name: parts[parts.length - 1]!, f });\r\n }\r\n const out: FileRow[] = [];\r\n const all = (n: Dir): ChangedFile[] => [...n.files.map((x) => x.f), ...[...n.dirs.values()].flatMap(all)];\r\n const walk = (node: Dir, depth: number) => {\r\n for (const d of [...node.dirs.values()].sort((a, b) => a.name.localeCompare(b.name))) {\r\n let dd = d;\r\n let name = d.name;\r\n while (dd.files.length === 0 && dd.dirs.size === 1) {\r\n dd = dd.dirs.values().next().value!;\r\n name += \"/\" + dd.name;\r\n }\r\n const below = all(dd);\r\n const states = new Set(below.filter((x) => x.status !== \"\").map((x) => x.status ?? \"M\"));\r\n out.push({\r\n kind: \"dir\",\r\n path: dd.path,\r\n name,\r\n depth,\r\n dir: parentOf(d.path),\r\n state: states.size === 1 ? [...states][0]! : \"\",\r\n add: below.reduce((t, x) => t + (x.add ?? 0), 0),\r\n del: below.reduce((t, x) => t + (x.del ?? 0), 0),\r\n });\r\n if (!collapsed.has(dd.path)) walk(dd, depth + 1);\r\n }\r\n for (const x of [...node.files].sort((a, b) => a.name.localeCompare(b.name))) {\r\n out.push({ kind: \"file\", path: x.f.path, name: x.name, depth, dir: parentOf(x.f.path), file: x.f, state: x.f.status ?? \"M\", add: x.f.add ?? 0, del: x.f.del ?? 0 });\r\n }\r\n };\r\n walk(root, 0);\r\n return out;\r\n}\r\n\r\n/** The files in the order the tree shows them (all folders open): what next / previous file walk. */\r\nexport function fileOrder(files: readonly ChangedFile[], mode: FileListMode = \"tree\"): string[] {\r\n return fileRows(files, mode).filter((r) => r.kind === \"file\").map((r) => r.path);\r\n}\r\n\r\nexport type TreeKey = \"ArrowDown\" | \"ArrowUp\" | \"Home\" | \"End\" | \"ArrowRight\" | \"ArrowLeft\" | \"Enter\" | \" \";\r\n\r\n/** What a key does on the focused row: move the focus, toggle a folder, or open a file. */\r\nexport type TreeMove = { focus: string } | { toggle: string } | { open: string } | null;\r\n\r\n/** The tree's keyboard model, pure: ↑ ↓ Home End move, → opens / steps in, ← closes / goes to the parent, Enter / Space opens. */\r\nexport function treeKey(rows: readonly FileRow[], focus: string | null, key: string, collapsed: ReadonlySet<string>): TreeMove {\r\n if (!rows.length) return null;\r\n const i = Math.max(0, rows.findIndex((r) => r.path === focus));\r\n const r = rows[i]!;\r\n const at = (j: number) => (j >= 0 && j < rows.length ? { focus: rows[j]!.path } : null);\r\n switch (key) {\r\n case \"ArrowDown\":\r\n return at(focus === null ? 0 : i + 1);\r\n case \"ArrowUp\":\r\n return at(i - 1);\r\n case \"Home\":\r\n return at(0);\r\n case \"End\":\r\n return at(rows.length - 1);\r\n case \"ArrowRight\":\r\n return r.kind === \"dir\" && collapsed.has(r.path) ? { toggle: r.path } : at(i + 1);\r\n case \"ArrowLeft\":\r\n if (r.kind === \"dir\" && !collapsed.has(r.path)) return { toggle: r.path };\r\n for (let j = i - 1; j >= 0; j--) if (rows[j]!.kind === \"dir\" && rows[j]!.depth < r.depth) return at(j);\r\n return null;\r\n case \"Enter\":\r\n case \" \":\r\n return r.kind === \"dir\" ? { toggle: r.path } : { open: r.path };\r\n default:\r\n return null;\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, ElementRef, booleanAttribute, computed, inject, input, model, output, signal } from \"@angular/core\";\r\n\r\nimport { OrrSegComponent, type SegOption } from \"../controls/controls.components\";\r\nimport { OrrIconComponent } from \"../icon/icon.component\";\r\nimport { OrrAddDelComponent, OrrStateComponent, VCS_STATE_NAMES } from \"../status/status.components\";\r\nimport { type ChangedFile, type FileListMode, type FileRow, fileRows, sameChangedFiles, sameRows, treeKey } from \"./file-tree\";\r\n\r\nconst MODES: SegOption[] = [\r\n { value: \"tree\", label: \"\", icon: \"git-branch\", title: \"Tree view\" },\r\n { value: \"flat\", label: \"\", icon: \"menu\", title: \"Flat view\" },\r\n];\r\n\r\n/**\r\n * `<orr-filetree [files]=\"files\" [(selected)]=\"path\" [(mode)]=\"mode\" />`: the changed-file list\r\n * (`.o-changes`, the ADE's diff-file-list). Head: `heading · N`, the ±total, the Tree / Flat switch.\r\n * Rows: the VCS letter (`--vcs-*`), the name (flat: + its folder, or `← from` for a rename), ±counts;\r\n * folders aggregate and collapse. Keys inside the list: ↑ ↓ Home End move, ← → fold, Enter / Space open.\r\n */\r\n@Component({\r\n selector: \"orr-filetree\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [OrrIconComponent, OrrStateComponent, OrrAddDelComponent, OrrSegComponent],\r\n host: { class: \"o-changes\" },\r\n template: `\r\n @if (head()) {\r\n <div class=\"o-changes__head\">\r\n <span class=\"o-changes__title\">{{ heading() }} · {{ list().length }}</span>\r\n <orr-addel [add]=\"totalAdd()\" [del]=\"totalDel()\" />\r\n @if (toggle()) {\r\n <orr-seg style=\"margin-left:auto\" size=\"xs\" label=\"File list layout\" [options]=\"modes\" [value]=\"mode()\" (valueChange)=\"setMode($any($event))\" />\r\n }\r\n <ng-content select=\"[orrTreeActions]\" />\r\n </div>\r\n }\r\n <div class=\"o-changes__list\" role=\"tree\" tabindex=\"0\" [attr.aria-label]=\"label()\" (keydown)=\"onKey($event)\">\r\n @for (r of rows(); track r.path) {\r\n @if (r.kind === 'dir') {\r\n <div class=\"o-changes__row o-changes__row--dir\" role=\"treeitem\" [class.o-changes__row--gone]=\"r.state === 'D'\"\r\n [attr.aria-expanded]=\"!collapsed().has(r.path)\" [attr.aria-level]=\"r.depth + 1\" [attr.data-path]=\"r.path\"\r\n [attr.data-focus]=\"r.path === focusPath() ? '' : null\" [style.padding-left.px]=\"8 + r.depth * 13\" (click)=\"toggleDir(r.path)\">\r\n <orr-icon class=\"o-changes__ico\" [name]=\"collapsed().has(r.path) ? 'chevron-right' : 'chevron-down'\" size=\"sm\" />\r\n <orr-icon class=\"o-changes__ico\" [name]=\"collapsed().has(r.path) ? 'folder' : 'folder-open'\" size=\"sm\" />\r\n <span class=\"o-changes__dname\">{{ r.name }}</span>\r\n @if (r.state) { <orr-state [state]=\"r.state\" /> }\r\n <span class=\"o-changes__counts\"><orr-addel [add]=\"r.add\" [del]=\"r.del\" /></span>\r\n </div>\r\n } @else {\r\n <div class=\"o-changes__row\" role=\"treeitem\" [attr.aria-selected]=\"r.path === selected()\" [attr.aria-level]=\"r.depth + 1\"\r\n [attr.data-path]=\"r.path\" [attr.data-status]=\"r.state\" [attr.data-focus]=\"r.path === focusPath() ? '' : null\"\r\n [style.padding-left.px]=\"mode() === 'flat' ? null : 12 + r.depth * 13\" (click)=\"open(r.path)\">\r\n @if (r.state) { <orr-state [state]=\"r.state\" /> }\r\n <span class=\"o-changes__name\" [attr.title]=\"r.state ? r.path + ' · ' + stateName(r.state) : r.path\">{{ r.name }}</span>\r\n @if (mode() === 'flat') {\r\n @if (r.state === 'R' && r.file?.from) {\r\n <span class=\"o-changes__dir o-changes__dir--from\">← {{ r.file.from }}</span>\r\n } @else if (r.dir) {\r\n <span class=\"o-changes__dir\">{{ r.dir }}</span>\r\n }\r\n }\r\n <span class=\"o-changes__counts\"><orr-addel [add]=\"r.add\" [del]=\"r.del\" /></span>\r\n </div>\r\n }\r\n } @empty {\r\n <div class=\"o-changes__empty\">{{ emptyText() }}</div>\r\n }\r\n </div>\r\n `,\r\n})\r\nexport class OrrFileTreeComponent {\r\n readonly files = input<readonly ChangedFile[]>([]);\r\n /** The open file. Two-way: a click, Enter or Space sets it. */\r\n readonly selected = model<string | null>(null);\r\n readonly mode = model<FileListMode>(\"tree\");\r\n readonly heading = input(\"Changed\");\r\n readonly label = input(\"Changed files\");\r\n readonly emptyText = input(\"No changes\");\r\n /** Show the head row (title, totals, switch). */\r\n readonly head = input(true, { transform: booleanAttribute });\r\n /** Show the Tree / Flat switch in the head. */\r\n readonly toggle = input(true, { transform: booleanAttribute });\r\n /** A file was opened (click, Enter, Space), also when it already was the selected one. */\r\n readonly fileOpen = output<string>();\r\n\r\n protected readonly modes = MODES;\r\n readonly collapsed = signal<ReadonlySet<string>>(new Set());\r\n private readonly focus = signal<string | null>(null);\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n\r\n /** `files`, held while a new array carries the same rows: a host's poll or stream frame re-renders nothing. */\r\n protected readonly list = computed(() => this.files(), { equal: sameChangedFiles });\r\n readonly rows = computed<FileRow[]>(() => fileRows(this.list(), this.mode(), this.collapsed()), { equal: sameRows });\r\n readonly totalAdd = computed(() => this.list().reduce((t, f) => t + (f.add ?? 0), 0));\r\n readonly totalDel = computed(() => this.list().reduce((t, f) => t + (f.del ?? 0), 0));\r\n /** The keyboard focus row: the last one moved to, else the selection, else the first row. */\r\n readonly focusPath = computed(() => {\r\n const rows = this.rows();\r\n const f = this.focus();\r\n if (f !== null && rows.some((r) => r.path === f)) return f;\r\n const s = this.selected();\r\n if (s !== null && rows.some((r) => r.path === s)) return s;\r\n return rows[0]?.path ?? null;\r\n });\r\n\r\n protected stateName(s: string): string {\r\n return VCS_STATE_NAMES[s] ?? s;\r\n }\r\n\r\n setMode(m: FileListMode): void {\r\n this.mode.set(m);\r\n }\r\n\r\n toggleDir(path: string): void {\r\n this.focus.set(path);\r\n const next = new Set(this.collapsed());\r\n if (next.has(path)) next.delete(path);\r\n else next.add(path);\r\n this.collapsed.set(next);\r\n }\r\n\r\n open(path: string): void {\r\n this.focus.set(path);\r\n this.selected.set(path);\r\n this.fileOpen.emit(path);\r\n }\r\n\r\n onKey(e: KeyboardEvent): void {\r\n if (e.ctrlKey || e.metaKey || e.altKey) return;\r\n const move = treeKey(this.rows(), this.focusPath(), e.key, this.collapsed());\r\n if (!move) return;\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (\"focus\" in move) {\r\n this.focus.set(move.focus);\r\n queueMicrotask(() => this.host.querySelector(\"[data-focus]\")?.scrollIntoView?.({ block: \"nearest\" }));\r\n } else if (\"toggle\" in move) this.toggleDir(move.toggle);\r\n else this.open(move.open);\r\n }\r\n}\r\n","/**\r\n * Diff lines for `<orr-diff>`: parsed from unified diff text, or computed from the two sides of a\r\n * file (line LCS, from the ADE's session-changes). `a` is the old line number, `b` the new one.\r\n */\r\n\r\nexport type DiffLineKind = \"add\" | \"del\" | \"ctx\" | \"hunk\";\r\n\r\nexport interface DiffLine {\r\n t: DiffLineKind;\r\n /** Old-side line number (del, ctx). */\r\n a?: number;\r\n /** New-side line number (add, ctx). */\r\n b?: number;\r\n text: string;\r\n}\r\n\r\n/** Same diff lines (kind, numbers, text), whatever the array's identity. */\r\nexport function sameLines(a: readonly DiffLine[], b: readonly DiffLine[]): boolean {\r\n if (a === b) return true;\r\n if (a.length !== b.length) return false;\r\n for (let i = 0; i < a.length; i++) {\r\n const x = a[i]!;\r\n const y = b[i]!;\r\n if (x !== y && (x.t !== y.t || x.a !== y.a || x.b !== y.b || x.text !== y.text)) return false;\r\n }\r\n return true;\r\n}\r\n\r\n/** Unified diff text → lines (`---` / `+++` / `diff` / `index` headers dropped; the `+++` path is the file). */\r\nexport function parseUnified(text: string): { lines: DiffLine[]; file: string } {\r\n const out: DiffLine[] = [];\r\n let a = 0;\r\n let b = 0;\r\n let file = \"\";\r\n for (const l of text.replace(/\\r/g, \"\").split(\"\\n\")) {\r\n if (l.startsWith(\"+++ \")) {\r\n file = l.slice(4).replace(/^b\\//, \"\");\r\n continue;\r\n }\r\n if (l.startsWith(\"--- \") || l.startsWith(\"diff \") || l.startsWith(\"index \")) continue;\r\n const m = /^@@ -(\\d+)(?:,\\d+)? \\+(\\d+)(?:,\\d+)? @@/.exec(l);\r\n if (m) {\r\n a = +m[1]!;\r\n b = +m[2]!;\r\n out.push({ t: \"hunk\", text: l });\r\n continue;\r\n }\r\n if (l.startsWith(\"+\")) out.push({ t: \"add\", b: b++, text: l.slice(1) });\r\n else if (l.startsWith(\"-\")) out.push({ t: \"del\", a: a++, text: l.slice(1) });\r\n else if (l.startsWith(\"\\\\\")) continue;\r\n else if (out.length || l) out.push({ t: \"ctx\", a: a++, b: b++, text: l.startsWith(\" \") ? l.slice(1) : l });\r\n }\r\n while (out.length && out[out.length - 1]!.t === \"ctx\" && !out[out.length - 1]!.text) out.pop();\r\n return { lines: out, file };\r\n}\r\n\r\nconst splitLines = (t: string) => (t === \"\" ? [] : t.replace(/\\r\\n/g, \"\\n\").replace(/\\n$/, \"\").split(\"\\n\"));\r\n\r\n/** Every line of the file, old → new, as ctx / del / add (removals before additions). Past `limit` cells the whole file is one replace. */\r\nexport function fileLines(before: string, after: string, limit = 4_000_000): DiffLine[] {\r\n const a = splitLines(before);\r\n const b = splitLines(after);\r\n const out: DiffLine[] = [];\r\n if (a.length * b.length > limit) {\r\n a.forEach((text, i) => out.push({ t: \"del\", a: i + 1, text }));\r\n b.forEach((text, j) => out.push({ t: \"add\", b: j + 1, text }));\r\n return out;\r\n }\r\n const w = b.length + 1;\r\n const L = new Uint32Array((a.length + 1) * w);\r\n for (let i = a.length - 1; i >= 0; i -= 1)\r\n for (let j = b.length - 1; j >= 0; j -= 1) L[i * w + j] = a[i] === b[j] ? L[(i + 1) * w + j + 1]! + 1 : Math.max(L[(i + 1) * w + j]!, L[i * w + j + 1]!);\r\n let i = 0;\r\n let j = 0;\r\n while (i < a.length || j < b.length) {\r\n if (i < a.length && j < b.length && a[i] === b[j]) out.push({ t: \"ctx\", a: ++i, b: ++j, text: a[i - 1]! });\r\n else if (i < a.length && (j >= b.length || L[(i + 1) * w + j]! >= L[i * w + j + 1]!)) out.push({ t: \"del\", a: ++i, text: a[i - 1]! });\r\n else out.push({ t: \"add\", b: ++j, text: b[j - 1]! });\r\n }\r\n return out;\r\n}\r\n\r\n/** The hunks of `before` → `after`: `context` lines around each change, every hunk opened by its `@@` line. */\r\nexport function diffLines(before: string, after: string, context = 3): DiffLine[] {\r\n return hunks(fileLines(before, after), context);\r\n}\r\n\r\n/** Whole-file lines (no hunk rows) cut into hunks with `context` lines around each change. */\r\nexport function hunks(all: readonly DiffLine[], context = 3): DiffLine[] {\r\n const ops = all.filter((l) => l.t !== \"hunk\");\r\n const out: DiffLine[] = [];\r\n let k = 0;\r\n while (k < ops.length) {\r\n if (ops[k]!.t === \"ctx\") {\r\n k += 1;\r\n continue;\r\n }\r\n const start = Math.max(0, k - context);\r\n let end = k;\r\n let quiet = 0;\r\n for (let m = k; m < ops.length; m += 1) {\r\n if (ops[m]!.t === \"ctx\") {\r\n quiet += 1;\r\n if (quiet > context * 2) break;\r\n } else {\r\n quiet = 0;\r\n end = m;\r\n }\r\n }\r\n const stop = Math.min(ops.length, end + context + 1);\r\n const slice = ops.slice(start, stop);\r\n const oldN = slice.filter((x) => x.t !== \"add\").length;\r\n const newN = slice.filter((x) => x.t !== \"del\").length;\r\n // the first old / new line the hunk touches: the previous line's number + 1\r\n const before = ops.slice(0, start);\r\n const lastA = [...before].reverse().find((x) => x.a !== undefined)?.a ?? 0;\r\n const lastB = [...before].reverse().find((x) => x.b !== undefined)?.b ?? 0;\r\n out.push({ t: \"hunk\", text: `@@ -${oldN ? lastA + 1 : lastA},${oldN} +${newN ? lastB + 1 : lastB},${newN} @@` });\r\n out.push(...slice);\r\n k = stop;\r\n }\r\n return out;\r\n}\r\n\r\n/** Index of the first line of each change (a run of add / del lines). */\r\nexport function changeStarts(lines: readonly DiffLine[]): number[] {\r\n const out: number[] = [];\r\n lines.forEach((l, i) => {\r\n const ch = l.t === \"add\" || l.t === \"del\";\r\n const prev = lines[i - 1];\r\n if (ch && !(prev && (prev.t === \"add\" || prev.t === \"del\"))) out.push(i);\r\n });\r\n return out;\r\n}\r\n\r\n/** The [first, last] line indexes of the change that starts at `start`. */\r\nexport function changeRange(lines: readonly DiffLine[], start: number): [number, number] {\r\n let end = start;\r\n while (end + 1 < lines.length && (lines[end + 1]!.t === \"add\" || lines[end + 1]!.t === \"del\")) end++;\r\n return [start, end];\r\n}\r\n\r\n/** A rendered row: a line (with its index in `lines`) or a fold of `n` unchanged lines starting at `fold`. */\r\nexport type DiffBlock = { line: DiffLine; i: number } | { fold: number; n: number };\r\n\r\n/**\r\n * Folds long unchanged runs to `context` lines on each side (none at a hunk or file edge), unless\r\n * the run is open (`open` holds its first index) or `whole` is set.\r\n */\r\nexport function foldBlocks(lines: readonly DiffLine[], context = 3, open: ReadonlySet<number> = new Set(), whole = false): DiffBlock[] {\r\n if (whole) return lines.map((line, i) => ({ line, i }));\r\n const out: DiffBlock[] = [];\r\n let i = 0;\r\n while (i < lines.length) {\r\n if (lines[i]!.t !== \"ctx\") {\r\n out.push({ line: lines[i]!, i });\r\n i++;\r\n continue;\r\n }\r\n let j = i;\r\n while (j < lines.length && lines[j]!.t === \"ctx\") j++;\r\n const run = j - i;\r\n const startEdge = i === 0 || lines[i - 1]!.t === \"hunk\";\r\n const endEdge = j === lines.length || lines[j]!.t === \"hunk\";\r\n const head = startEdge ? 0 : context;\r\n const tail = endEdge ? 0 : context;\r\n if (run > head + tail + 2 && !open.has(i)) {\r\n for (let k = i; k < i + head; k++) out.push({ line: lines[k]!, i: k });\r\n out.push({ fold: i, n: run - head - tail });\r\n for (let k = j - tail; k < j; k++) out.push({ line: lines[k]!, i: k });\r\n } else for (let k = i; k < j; k++) out.push({ line: lines[k]!, i: k });\r\n i = j;\r\n }\r\n return out;\r\n}\r\n\r\n/** The +/− counts of a diff. */\r\nexport function diffStat(lines: readonly DiffLine[]): { add: number; del: number } {\r\n let add = 0;\r\n let del = 0;\r\n for (const l of lines) {\r\n if (l.t === \"add\") add++;\r\n else if (l.t === \"del\") del++;\r\n }\r\n return { add, del };\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n booleanAttribute,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n numberAttribute,\r\n output,\r\n signal,\r\n untracked,\r\n} from \"@angular/core\";\r\nimport { KjButtonComponent } from \"@kouji-ui/components\";\r\nimport { type SyntaxToken, lang as synLang, tokenize } from \"@getorrery/styles/syntax\";\r\n\r\nimport { OrrIconComponent } from \"../icon/icon.component\";\r\nimport { OrrAddDelComponent } from \"../status/status.components\";\r\nimport { type DiffBlock, type DiffLine, changeRange, changeStarts, diffStat, foldBlocks, parseUnified, sameLines } from \"./diff-model\";\r\n\r\nlet diffSeq = 0;\r\n\r\n/** A comment written on a diff line: `line` is the line number on `side`. */\r\nexport interface DiffComment {\r\n path: string;\r\n line: number;\r\n side: \"old\" | \"new\";\r\n text: string;\r\n /** Index of the line in the diff's lines. */\r\n index: number;\r\n /** The line's own text, for quoting. */\r\n quote: string;\r\n /** A range's last line (Monaco's drag-select), when it spans more than `line`. */\r\n to?: number;\r\n /** Every line of the range, when it spans more than one. */\r\n lines?: string[];\r\n}\r\n\r\n/** The number a line is known by: its new-side number, or the old one for a removed line. */\r\nexport function lineNo(l: DiffLine): number | null {\r\n return l.t === \"del\" ? (l.a ?? null) : (l.b ?? l.a ?? null);\r\n}\r\n\r\n/** Moves `current` (a change's first line index, -1 for none) to the next / previous change, wrapping. */\r\nexport function stepChange(starts: readonly number[], current: number, dir: 1 | -1): number {\r\n if (!starts.length) return -1;\r\n const t = dir > 0 ? starts.find((s) => s > current) : [...starts].reverse().find((s) => s < current);\r\n return t ?? (dir > 0 ? starts[0]! : starts[starts.length - 1]!);\r\n}\r\n\r\n/**\r\n * `<orr-diff [lines]=\"lines\" file=\"src/a.ts\" />` or `[text]=\"unifiedDiff\"`: a unified diff (`.o-diff`).\r\n * Two plain gutters (old, new numbers), the sign, and the text syntax-highlighted (`@getorrery/styles/syntax`,\r\n * by `lang` or the file name) over the add / del grounds. Long unchanged runs fold (`context`), unless\r\n * `whole` shows the whole file. Keys inside: n / j next change, p / k previous, Enter opens a fold.\r\n * With `commentable`, a click on a line number opens a comment box under it; Add emits `comment`.\r\n */\r\n@Component({\r\n selector: \"orr-diff\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [OrrIconComponent, OrrAddDelComponent, KjButtonComponent],\r\n host: {\r\n class: \"o-diff\",\r\n \"[class.o-diff--syn]\": \"!!language()\",\r\n \"[class.o-diff--nonum]\": \"nonum()\",\r\n tabindex: \"0\",\r\n role: \"region\",\r\n \"[attr.aria-label]\": \"'Diff ' + path()\",\r\n \"(keydown)\": \"onKey($event)\",\r\n },\r\n template: `\r\n @if (fileHead() && path()) {\r\n <div class=\"o-diff__file\">\r\n <orr-icon name=\"file\" size=\"sm\" />\r\n <span style=\"flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis\">{{ path() }}</span>\r\n <orr-addel [add]=\"stat().add\" [del]=\"stat().del\" />\r\n </div>\r\n }\r\n @for (b of blocks(); track blockKey(b)) {\r\n @if ('fold' in b) {\r\n <button type=\"button\" class=\"o-diff__fold\" [attr.data-fold]=\"b.fold\" (click)=\"openFold(b.fold)\">\r\n <orr-icon name=\"chevron-down\" size=\"xs\" /> {{ b.n }} unchanged lines\r\n </button>\r\n } @else if (b.line.t === 'hunk') {\r\n <div class=\"o-diff__line o-diff__line--hunk\" [attr.data-i]=\"b.i\">\r\n @if (!nonum()) {<span class=\"o-diff__num\"></span><span class=\"o-diff__num\"></span>}<span class=\"o-diff__sign\"></span>\r\n <span class=\"o-diff__text\">{{ b.line.text }}</span>\r\n </div>\r\n } @else {\r\n <div class=\"o-diff__line o-diff__line--{{ b.line.t }}\" [attr.data-i]=\"b.i\" [attr.data-current]=\"inCurrent(b.i) ? '1' : null\" (click)=\"lineSelect.emit({ index: b.i, line: b.line })\">\r\n @for (side of nonum() ? [] : sides; track side) {\r\n @if (commentable() && gutterSide(b.line) === side) {\r\n <button type=\"button\" class=\"o-diff__num\" style=\"background:none;border:0;padding:0 var(--sp-3);font:inherit;color:inherit;cursor:pointer\"\r\n [attr.aria-label]=\"'Comment on ' + path() + ' line ' + lineNo(b.line)\" [attr.title]=\"'Comment on line ' + lineNo(b.line)\"\r\n (click)=\"$event.stopPropagation(); openComment(b.i)\">{{ num(b.line, side) }}</button>\r\n } @else {\r\n <span class=\"o-diff__num\">{{ num(b.line, side) }}</span>\r\n }\r\n }\r\n <span class=\"o-diff__sign\">{{ sign[b.line.t] }}</span>\r\n <span class=\"o-diff__text\">@if (toks()[b.i]; as ts) {@for (t of ts; track $index) {@if (t.kind) {<span class=\"tk-{{ t.kind }}\">{{ t.text }}</span>} @else {<ng-container>{{ t.text }}</ng-container>}}} @else {<ng-container>{{ b.line.text }}</ng-container>}@if (noted(b.line)) {<span class=\"o-badge o-badge--attn\" style=\"margin-left:var(--sp-4)\">in review</span>}</span>\r\n </div>\r\n @if (commentAt() === b.i) {\r\n <div class=\"o-diff__comment\" (keydown)=\"$event.stopPropagation()\">\r\n <label class=\"o-label\" [attr.for]=\"cid\">{{ commentLabel() }} {{ path() }}:L{{ lineNo(b.line) }}</label>\r\n <textarea class=\"o-textarea\" rows=\"2\" [id]=\"cid\" [value]=\"draft()\" (input)=\"draft.set($any($event.target).value)\"\r\n (keydown.escape)=\"closeComment()\" [attr.placeholder]=\"placeholder()\"></textarea>\r\n <div style=\"display:flex;gap:var(--sp-4);justify-content:flex-end\">\r\n <kj-button kjVariant=\"outline\" kjSize=\"sm\" (click)=\"closeComment()\">Cancel</kj-button>\r\n <kj-button kjVariant=\"default\" kjSize=\"sm\" [kjDisabled]=\"!draft().trim()\" (click)=\"addComment(b.i)\">{{ addLabel() }}</kj-button>\r\n </div>\r\n </div>\r\n }\r\n }\r\n } @empty {\r\n <div class=\"o-diff__fold\" style=\"cursor:default\">{{ emptyText() }}</div>\r\n }\r\n `,\r\n})\r\nexport class OrrDiffComponent {\r\n /** The lines; or give `text` (unified diff). */\r\n readonly lines = input<readonly DiffLine[] | null>(null);\r\n readonly text = input(\"\");\r\n /** The file's path (header, comments, language). Falls back to the `+++` path of `text`. */\r\n readonly file = input(\"\");\r\n /** A language id or extension; falls back to the file name. */\r\n readonly lang = input(\"\");\r\n /** Show every line: no folding. */\r\n readonly whole = input(false, { transform: booleanAttribute });\r\n readonly context = input(3, { transform: numberAttribute });\r\n /** The file header row (`.o-diff__file`). */\r\n readonly fileHead = input(true, { transform: booleanAttribute });\r\n /** No line-number gutters: sign and text only (a config fragment, e.g. Cloud's pending `config.toml` change). */\r\n readonly nonum = input(false, { transform: booleanAttribute });\r\n /** The current change: its first line's index, -1 for none. n / p move it. */\r\n readonly current = model(-1);\r\n readonly commentable = input(false, { transform: booleanAttribute });\r\n /** Handle n / j / p / k itself. Off when a parent walks changes across files (the review dialog). */\r\n readonly keys = input(true, { transform: booleanAttribute });\r\n /** Line numbers (new side; old for removed lines) that already carry a comment. */\r\n readonly notes = input<readonly number[]>([]);\r\n readonly commentLabel = input(\"Comment on\");\r\n readonly addLabel = input(\"Add to review\");\r\n readonly placeholder = input(\"What should the agent change here?\");\r\n readonly emptyText = input(\"No changes\");\r\n readonly comment = output<DiffComment>();\r\n readonly lineSelect = output<{ index: number; line: DiffLine }>();\r\n\r\n protected readonly sign: Record<string, string> = { add: \"+\", del: \"−\", ctx: \" \", hunk: \"\" };\r\n protected readonly sides = [\"old\", \"new\"] as const;\r\n protected readonly lineNo = lineNo;\r\n protected readonly cid = `orr-diff-c-${(diffSeq += 1)}`;\r\n private readonly open = signal<ReadonlySet<number>>(new Set());\r\n readonly commentAt = signal<number | null>(null);\r\n readonly draft = signal(\"\");\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n\r\n private readonly parsed = computed(() => (this.lines() === null ? parseUnified(this.text()) : null));\r\n /** Held while a new array carries the same lines: no re-fold, no re-highlight. */\r\n readonly all = computed<readonly DiffLine[]>(() => this.lines() ?? this.parsed()?.lines ?? [], { equal: sameLines });\r\n readonly path = computed(() => this.file() || this.parsed()?.file || \"\");\r\n readonly language = computed(() => synLang(this.lang() || this.path()));\r\n readonly stat = computed(() => diffStat(this.all()));\r\n readonly starts = computed(() => changeStarts(this.all()));\r\n readonly blocks = computed<DiffBlock[]>(() => foldBlocks(this.all(), this.context(), this.open(), this.whole()));\r\n readonly toks = computed<(SyntaxToken[] | null)[]>(() => {\r\n const l = this.language();\r\n return this.all().map((x) => (l && x.t !== \"hunk\" ? (tokenize(x.text, l)[0] ?? []) : null));\r\n });\r\n private readonly range = computed(() => (this.current() >= 0 && this.current() < this.all().length ? changeRange(this.all(), this.current()) : null));\r\n\r\n constructor() {\r\n // The current change folds open and scrolls into view.\r\n effect(() => {\r\n const c = this.current();\r\n if (c < 0) return;\r\n queueMicrotask(() => this.host.querySelector('[data-current=\"1\"]')?.scrollIntoView?.({ block: \"center\" }));\r\n });\r\n // A file opens on its first change, as an IDE's diff does.\r\n effect(() => {\r\n const first = this.starts()[0];\r\n if (first === undefined || untracked(this.current) >= 0) return;\r\n queueMicrotask(() => this.host.querySelector(`[data-i=\"${first}\"]`)?.scrollIntoView?.({ block: \"center\" }));\r\n });\r\n }\r\n\r\n protected blockKey(b: DiffBlock): string {\r\n return \"fold\" in b ? \"f\" + b.fold : \"l\" + b.i;\r\n }\r\n\r\n protected num(l: DiffLine, side: \"old\" | \"new\"): number | \"\" {\r\n if (side === \"old\") return l.t !== \"add\" ? (l.a ?? \"\") : \"\";\r\n return l.t !== \"del\" ? (l.b ?? \"\") : \"\";\r\n }\r\n\r\n protected gutterSide(l: DiffLine): \"old\" | \"new\" {\r\n return l.t === \"del\" ? \"old\" : \"new\";\r\n }\r\n\r\n protected inCurrent(i: number): boolean {\r\n const r = this.range();\r\n return !!r && i >= r[0] && i <= r[1];\r\n }\r\n\r\n protected noted(l: DiffLine): boolean {\r\n const n = lineNo(l);\r\n return n !== null && this.notes().includes(n);\r\n }\r\n\r\n openFold(start: number): void {\r\n this.open.set(new Set([...this.open(), start]));\r\n }\r\n\r\n /** Moves to the next (1) or previous (-1) change, wrapping; returns the new current index. */\r\n step(dir: 1 | -1): number {\r\n const t = stepChange(this.starts(), this.current(), dir);\r\n if (t < 0) return t;\r\n this.current.set(t);\r\n return t;\r\n }\r\n\r\n openComment(i: number): void {\r\n this.commentAt.set(i);\r\n this.draft.set(\"\");\r\n queueMicrotask(() => (this.host.querySelector(\".o-diff__comment textarea\") as HTMLTextAreaElement | null)?.focus());\r\n }\r\n\r\n closeComment(): void {\r\n this.commentAt.set(null);\r\n this.draft.set(\"\");\r\n this.host.focus({ preventScroll: true });\r\n }\r\n\r\n addComment(i: number): void {\r\n const l = this.all()[i];\r\n const text = this.draft().trim();\r\n if (!l || !text) return;\r\n this.comment.emit({ path: this.path(), line: lineNo(l) ?? 0, side: this.gutterSide(l), text, index: i, quote: l.text });\r\n this.closeComment();\r\n }\r\n\r\n onKey(e: KeyboardEvent): void {\r\n if (e.ctrlKey || e.metaKey || e.altKey) return;\r\n const tag = (e.target as HTMLElement | null)?.tagName?.toLowerCase();\r\n if (tag === \"textarea\" || tag === \"input\") return;\r\n if (e.key === \"Enter\") {\r\n const f = (e.target as HTMLElement | null)?.closest?.(\"[data-fold]\") as HTMLElement | null;\r\n if (f) {\r\n e.preventDefault();\r\n this.openFold(Number(f.dataset[\"fold\"]));\r\n }\r\n return;\r\n }\r\n const dir = e.key === \"n\" || e.key === \"j\" ? 1 : e.key === \"p\" || e.key === \"k\" ? -1 : 0;\r\n if (!dir || !this.keys()) return;\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.step(dir);\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, booleanAttribute, computed, input, numberAttribute } from \"@angular/core\";\r\nimport { type SyntaxToken, lang as synLang, tokenize } from \"@getorrery/styles/syntax\";\r\n\r\n/** `\"3,5-7\"` (or numbers) → the set of line numbers. */\r\nexport function lineSet(spec: string | readonly number[]): Set<number> {\r\n if (Array.isArray(spec)) return new Set(spec);\r\n const out = new Set<number>();\r\n for (const p of String(spec).split(\",\")) {\r\n const m = /^(\\d+)(?:-(\\d+))?$/.exec(p.trim());\r\n if (m) for (let i = +m[1]!; i <= +(m[2] ?? m[1]!); i++) out.add(i);\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * `<orr-code [text]=\"src\" lang=\"ts\" highlight=\"3,5-7\" />`: a read-only file (`.o-code`) with line\r\n * numbers and syntax colours (`@getorrery/styles/syntax`); `flat` drops the well's frame.\r\n */\r\n@Component({\r\n selector: \"orr-code\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: \"o-code\",\r\n \"[class.o-code--flat]\": \"flat()\",\r\n role: \"region\",\r\n tabindex: \"0\",\r\n \"[attr.aria-label]\": \"(lang() || 'code') + ' file'\",\r\n \"[attr.data-lang]\": \"language()\",\r\n },\r\n template: `\r\n @for (l of rows(); track $index) {\r\n <div class=\"o-code__line\" [attr.data-current]=\"marked().has(start() + $index) ? '1' : null\">@if (!nonum()) {<span class=\"o-code__num\">{{ start() + $index }}</span>}<span style=\"padding-left:12px\">@if (l.length) {@for (t of l; track $index) {@if (t.kind) {<span class=\"tk-{{ t.kind }}\">{{ t.text }}</span>} @else {<ng-container>{{ t.text }}</ng-container>}}} @else {<ng-container>{{ ' ' }}</ng-container>}</span></div>\r\n }\r\n `,\r\n})\r\nexport class OrrCodeComponent {\r\n readonly text = input(\"\");\r\n /** A language id, extension or file name. */\r\n readonly lang = input(\"\");\r\n /** The first line's number. */\r\n readonly start = input(1, { transform: numberAttribute });\r\n /** Lines to mark: `\"3,5-7\"` or numbers. */\r\n readonly highlight = input<string | readonly number[]>(\"\");\r\n readonly nonum = input(false, { transform: booleanAttribute });\r\n readonly flat = input(false, { transform: booleanAttribute });\r\n\r\n readonly language = computed(() => synLang(this.lang()));\r\n readonly marked = computed(() => lineSet(this.highlight()));\r\n readonly rows = computed<SyntaxToken[][]>(() => {\r\n const src = this.text().replace(/\\r/g, \"\").replace(/^\\n/, \"\").replace(/\\n\\s*$/, \"\");\r\n const l = this.language();\r\n return l ? tokenize(src, l) : src.split(\"\\n\").map((x) => (x ? [{ text: x, kind: null }] : []));\r\n });\r\n}\r\n","/// <reference path=\"./monaco-edcore.d.ts\" />\r\n/**\r\n * Monaco for every Orrery front end (the ADE's IDE mode, the changes view in Agent mode and Cloud):\r\n * one loader, one token-matched theme, one path → language map. Moved from the ADE so a diff reads\r\n * the same everywhere. The app ships Monaco's stylesheet as a non-injected `monaco` style bundle.\r\n */\r\nimport type * as monacoApi from \"monaco-editor\";\r\n\r\n/**\r\n * Lazy loader for Monaco (B1.1 editor migration). Unlike the CodeMirror setup\r\n * in `code-lang.ts` (esm.sh at runtime), Monaco is BUNDLED: `edcore.main.js`\r\n * — the editor plus every editor contribution (find widget, folding, bracket\r\n * matching, multi-cursor, diff editor) but NONE of the language services — is\r\n * pulled in through a dynamic import, so it lands in its own lazy chunk that\r\n * loads the first time an editor mounts. Highlighting is Monarch-only via the\r\n * per-language `basic-languages` contributions, themselves lazy chunks.\r\n */\r\nexport type MonacoApi = typeof monacoApi;\r\n\r\nlet corePromise: Promise<MonacoApi> | null = null;\r\nlet cssAttached = false;\r\nlet makeWorker: (() => Worker) | null = null;\r\n\r\n/**\r\n * Hand Monaco the app's worker, once, before the first editor. The app must own it: Angular only\r\n * bundles a `new Worker(new URL(...))` written in the app's own source, never one inside a package,\r\n * so a worker here would 404 and every diff would stay uncoloured.\r\n * `setMonacoWorker(() => new Worker(new URL(\"./monaco.worker\", import.meta.url), { type: \"module\" }))`\r\n */\r\nexport function setMonacoWorker(make: () => Worker): void {\r\n makeWorker = make;\r\n}\r\n\r\n/** Attach (once) the complete Monaco stylesheet — built as the non-injected\r\n * \"monaco\" style bundle in angular.json, so it loads with the first editor\r\n * rather than with the app shell. */\r\nfunction attachMonacoCss(): void {\r\n if (cssAttached) return;\r\n cssAttached = true;\r\n const link = document.createElement(\"link\");\r\n link.rel = \"stylesheet\";\r\n link.href = \"monaco.css\";\r\n document.head.appendChild(link);\r\n}\r\n\r\n/** Load (once) the Monaco editor core; retries are possible after a failure. */\r\nexport function loadMonaco(): Promise<MonacoApi> {\r\n if (!corePromise) {\r\n attachMonacoCss();\r\n // Must be in place before the first editor module executes.\r\n (self as unknown as { MonacoEnvironment?: unknown }).MonacoEnvironment = {\r\n getWorker: () => {\r\n if (!makeWorker) throw new Error(\"Monaco has no worker: call setMonacoWorker() in the app's main.ts.\");\r\n return makeWorker();\r\n },\r\n };\r\n corePromise = import(\r\n \"monaco-editor/esm/vs/editor/edcore.main.js\"\r\n ) as unknown as Promise<MonacoApi>;\r\n corePromise.catch(() => (corePromise = null));\r\n }\r\n return corePromise;\r\n}\r\n\r\n// ---------------------------------------------------------------- themes ----\r\n\r\n/** Resolve a CSS design token to a Monaco-safe #rrggbb(aa) hex, or undefined. */\r\nexport function tokenHex(styles: CSSStyleDeclaration, name: string): string | undefined {\r\n let raw = styles.getPropertyValue(name).trim();\r\n if (!raw) return undefined;\r\n if (raw.startsWith(\"#\")) return raw;\r\n // color-mix() / oklch(): a canvas normalises any CSS colour to #rrggbb or rgba().\r\n if (!/^rgba?\\(/.test(raw) && typeof document !== \"undefined\") {\r\n const ctx = document.createElement(\"canvas\").getContext(\"2d\");\r\n if (!ctx) return undefined;\r\n ctx.fillStyle = \"#000\";\r\n ctx.fillStyle = raw;\r\n raw = String(ctx.fillStyle);\r\n if (raw.startsWith(\"#\")) return raw;\r\n }\r\n const m = raw.match(/^rgba?\\(\\s*(\\d+)[,\\s]+(\\d+)[,\\s]+(\\d+)(?:[,\\s/]+([\\d.]+))?\\s*\\)$/);\r\n if (!m) return undefined;\r\n const hex = (n: number): string => Math.round(n).toString(16).padStart(2, \"0\");\r\n const alpha = m[4] === undefined ? \"\" : hex(Number(m[4]) * 255);\r\n return `#${hex(+m[1])}${hex(+m[2])}${hex(+m[3])}${alpha}`;\r\n}\r\n\r\n/**\r\n * (Re)define + activate the app-matched Monaco theme. Monaco needs concrete\r\n * hex values, so the app's CSS tokens are resolved from the `[data-theme]`\r\n * root at call time — call again whenever `ui.tweaks().theme` changes (theme\r\n * state is global in Monaco: one call restyles every live editor).\r\n */\r\nexport function applyMonacoTheme(monaco: MonacoApi, appTheme: \"dark\" | \"light\"): void {\r\n const root = document.querySelector(\"[data-theme]\") ?? document.documentElement;\r\n const styles = getComputedStyle(root);\r\n const colors: Record<string, string> = {};\r\n const put = (key: string, token: string): void => {\r\n const v = tokenHex(styles, token);\r\n if (v) colors[key] = v;\r\n };\r\n // T00 / decision 0010: code (editor and diff) sits on the darker --well ground.\r\n put(\"editor.background\", \"--well\");\r\n put(\"editor.foreground\", \"--ink\");\r\n put(\"editorGutter.background\", \"--well\");\r\n put(\"editorLineNumber.foreground\", \"--ink-4\");\r\n put(\"editorLineNumber.activeForeground\", \"--ink-2\");\r\n put(\"diffEditor.insertedTextBackground\", \"--code-add-bg\");\r\n put(\"diffEditor.removedTextBackground\", \"--code-del-bg\");\r\n // whole rows too (Monaco's default is a faint tint); a changed word then layers over its row, darker\r\n put(\"diffEditor.insertedLineBackground\", \"--code-add-bg\");\r\n put(\"diffEditor.removedLineBackground\", \"--code-del-bg\");\r\n // Anchor marks in the diff overview ruler (the strip beside the vertical\r\n // scrollbar). Monaco would otherwise derive them from the *TextBackground\r\n // pair above, which is a ~90%-transparent row tint and all but invisible as\r\n // a 15px-wide mark — so they get the solid diff INK tokens instead, the same\r\n // green/red the rest of the app uses for added/removed.\r\n put(\"diffEditorOverview.insertedForeground\", \"--code-add-ink\");\r\n put(\"diffEditorOverview.removedForeground\", \"--code-del-ink\");\r\n // The slider and the diff ruler's viewport box both paint these colours OVER the change marks,\r\n // so they stay translucent: the marks must read without scrolling. Hex alpha on a solid token.\r\n const slider = (key: string, alpha: string): void => {\r\n const v = tokenHex(styles, \"--ink-4\");\r\n if (v) colors[key] = v.slice(0, 7) + alpha;\r\n };\r\n slider(\"scrollbarSlider.background\", \"40\");\r\n slider(\"scrollbarSlider.hoverBackground\", \"66\");\r\n slider(\"scrollbarSlider.activeBackground\", \"80\");\r\n // Belt and braces with monacoScrollbarOptions()' overviewRulerBorder:false —\r\n // any surface that leaves the rule on gets the app hairline rather than\r\n // Monaco's default, which is a hard seam against --panel.\r\n put(\"editorOverviewRuler.border\", \"--hair-2\");\r\n // Syntax colours come from the shared --syn-* tokens (@getorrery/styles), the same\r\n // ones orr-code / orr-diff paint with, so every code surface reads alike.\r\n const rules: { token: string; foreground: string }[] = [];\r\n const syn = (tokens: string[], token: string): void => {\r\n const v = tokenHex(styles, token);\r\n if (v) for (const t of tokens) rules.push({ token: t, foreground: v.slice(1, 7) });\r\n };\r\n syn([\"keyword\", \"keyword.control\", \"storage\", \"storage.type\"], \"--syn-kw\");\r\n syn([\"string\", \"string.escape\", \"attribute.value\"], \"--syn-str\");\r\n syn([\"number\", \"number.hex\", \"number.float\"], \"--syn-num\");\r\n syn([\"comment\", \"comment.doc\"], \"--syn-com\");\r\n syn([\"type\", \"type.identifier\", \"entity.name.type\"], \"--syn-type\");\r\n const name = `orrery-${appTheme}`;\r\n monaco.editor.defineTheme(name, {\r\n base: appTheme === \"dark\" ? \"vs-dark\" : \"vs\",\r\n inherit: true,\r\n rules,\r\n colors,\r\n });\r\n monaco.editor.setTheme(name);\r\n}\r\n\r\n/**\r\n * Diff-surface options that turn on Monaco's OWN diff overview ruler: a strip\r\n * beside the vertical scrollbar carrying one mark per changed region (removed\r\n * on the original lane, inserted on the modified lane), so a long file shows\r\n * where its changes are at a glance and the strip can be clicked/dragged to\r\n * scroll straight to one. Monaco owns the marks — nothing here hand-rolls a\r\n * scrollbar overlay. Their colours are the two `diffEditorOverview.*` theme\r\n * keys applyMonacoTheme() resolves from --code-add-ink / --code-del-ink, which\r\n * is what keeps them correct in both the light and the dark theme.\r\n *\r\n * `overviewRulerBorder: false` drops the inner editors' own 1px ruler rule,\r\n * which would otherwise draw a second vertical line right next to the strip.\r\n */\r\nexport function diffOverviewRulerOptions(): {\r\n renderOverviewRuler: boolean;\r\n overviewRulerBorder: boolean;\r\n} {\r\n return { renderOverviewRuler: true, overviewRulerBorder: false };\r\n}\r\n\r\n/**\r\n * Scrollbar geometry that matches the app's own bars (styles.css\r\n * `::-webkit-scrollbar`, 9px lane / 5px visible thumb). Monaco's defaults are\r\n * 14px vertical and 12px horizontal with the slider filling the whole lane,\r\n * which next to a native bar reads as a different widget entirely.\r\n *\r\n * The app fakes its 5px thumb with a 2px transparent border + background-clip;\r\n * Monaco can't do that, but VerticalScrollbar centres the slider in the lane\r\n * ((scrollbarSize - sliderSize) / 2), so a 9/5 pair lands in the same place.\r\n * Slider size has to be given explicitly — it defaults to the scrollbar size,\r\n * not to a padded fraction of it.\r\n *\r\n * `useShadows` kills the drop shadow Monaco casts over scrolled-away content,\r\n * which the app has nowhere else and which dirties --panel. The slider colours\r\n * come from the `scrollbarSlider.*` theme keys applyMonacoTheme() resolves.\r\n */\r\nexport function monacoScrollbarOptions(): {\r\n scrollbar: {\r\n verticalScrollbarSize: number;\r\n horizontalScrollbarSize: number;\r\n verticalSliderSize: number;\r\n horizontalSliderSize: number;\r\n useShadows: boolean;\r\n };\r\n overviewRulerBorder: boolean;\r\n} {\r\n return {\r\n scrollbar: {\r\n verticalScrollbarSize: 9,\r\n horizontalScrollbarSize: 9,\r\n verticalSliderSize: 5,\r\n horizontalSliderSize: 5,\r\n useShadows: false,\r\n },\r\n overviewRulerBorder: false,\r\n };\r\n}\r\n\r\n// ------------------------------------------------------------- languages ----\r\n\r\n/**\r\n * langId() canonical tag → Monaco language. `load` imports the Monarch\r\n * contribution (static specifiers so each becomes a bundled lazy chunk); `id`\r\n * is the Monaco language id the model should be set to. Tags with no Monarch\r\n * grammar in `basic-languages` (haskell, erlang, nginx, wast, diff) render\r\n * plain — same graceful degradation as the CM loader.\r\n */\r\ninterface MonacoLang {\r\n id: string;\r\n load: () => Promise<unknown>;\r\n}\r\n\r\nconst ML = (id: string, load: () => Promise<unknown>): MonacoLang => ({ id, load });\r\n\r\nconst LANGS: Record<string, MonacoLang> = {\r\n // TS tokenizer covers JS; langId collapses js/ts/jsx/tsx into one tag.\r\n javascript: ML(\"typescript\", () =>\r\n import(\"monaco-editor/esm/vs/basic-languages/typescript/typescript.contribution.js\")),\r\n // no Monarch json grammar without the json language service — the TS\r\n // tokenizer highlights strings/numbers/braces correctly for JSON.\r\n json: ML(\"typescript\", () =>\r\n import(\"monaco-editor/esm/vs/basic-languages/typescript/typescript.contribution.js\")),\r\n css: ML(\"css\", () => import(\"monaco-editor/esm/vs/basic-languages/css/css.contribution.js\")),\r\n sass: ML(\"scss\", () => import(\"monaco-editor/esm/vs/basic-languages/scss/scss.contribution.js\")),\r\n less: ML(\"less\", () => import(\"monaco-editor/esm/vs/basic-languages/less/less.contribution.js\")),\r\n html: ML(\"html\", () => import(\"monaco-editor/esm/vs/basic-languages/html/html.contribution.js\")),\r\n vue: ML(\"html\", () => import(\"monaco-editor/esm/vs/basic-languages/html/html.contribution.js\")),\r\n angular: ML(\"html\", () => import(\"monaco-editor/esm/vs/basic-languages/html/html.contribution.js\")),\r\n xml: ML(\"xml\", () => import(\"monaco-editor/esm/vs/basic-languages/xml/xml.contribution.js\")),\r\n markdown: ML(\"markdown\", () =>\r\n import(\"monaco-editor/esm/vs/basic-languages/markdown/markdown.contribution.js\")),\r\n rust: ML(\"rust\", () => import(\"monaco-editor/esm/vs/basic-languages/rust/rust.contribution.js\")),\r\n python: ML(\"python\", () =>\r\n import(\"monaco-editor/esm/vs/basic-languages/python/python.contribution.js\")),\r\n java: ML(\"java\", () => import(\"monaco-editor/esm/vs/basic-languages/java/java.contribution.js\")),\r\n groovy: ML(\"java\", () => import(\"monaco-editor/esm/vs/basic-languages/java/java.contribution.js\")),\r\n yaml: ML(\"yaml\", () => import(\"monaco-editor/esm/vs/basic-languages/yaml/yaml.contribution.js\")),\r\n sql: ML(\"sql\", () => import(\"monaco-editor/esm/vs/basic-languages/sql/sql.contribution.js\")),\r\n cpp: ML(\"cpp\", () => import(\"monaco-editor/esm/vs/basic-languages/cpp/cpp.contribution.js\")),\r\n php: ML(\"php\", () => import(\"monaco-editor/esm/vs/basic-languages/php/php.contribution.js\")),\r\n go: ML(\"go\", () => import(\"monaco-editor/esm/vs/basic-languages/go/go.contribution.js\")),\r\n shell: ML(\"shell\", () =>\r\n import(\"monaco-editor/esm/vs/basic-languages/shell/shell.contribution.js\")),\r\n toml: ML(\"ini\", () => import(\"monaco-editor/esm/vs/basic-languages/ini/ini.contribution.js\")),\r\n properties: ML(\"ini\", () => import(\"monaco-editor/esm/vs/basic-languages/ini/ini.contribution.js\")),\r\n ruby: ML(\"ruby\", () => import(\"monaco-editor/esm/vs/basic-languages/ruby/ruby.contribution.js\")),\r\n csharp: ML(\"csharp\", () =>\r\n import(\"monaco-editor/esm/vs/basic-languages/csharp/csharp.contribution.js\")),\r\n kotlin: ML(\"kotlin\", () =>\r\n import(\"monaco-editor/esm/vs/basic-languages/kotlin/kotlin.contribution.js\")),\r\n scala: ML(\"scala\", () =>\r\n import(\"monaco-editor/esm/vs/basic-languages/scala/scala.contribution.js\")),\r\n dart: ML(\"dart\", () => import(\"monaco-editor/esm/vs/basic-languages/dart/dart.contribution.js\")),\r\n objectivec: ML(\"objective-c\", () =>\r\n import(\"monaco-editor/esm/vs/basic-languages/objective-c/objective-c.contribution.js\")),\r\n swift: ML(\"swift\", () =>\r\n import(\"monaco-editor/esm/vs/basic-languages/swift/swift.contribution.js\")),\r\n lua: ML(\"lua\", () => import(\"monaco-editor/esm/vs/basic-languages/lua/lua.contribution.js\")),\r\n perl: ML(\"perl\", () => import(\"monaco-editor/esm/vs/basic-languages/perl/perl.contribution.js\")),\r\n r: ML(\"r\", () => import(\"monaco-editor/esm/vs/basic-languages/r/r.contribution.js\")),\r\n clojure: ML(\"clojure\", () =>\r\n import(\"monaco-editor/esm/vs/basic-languages/clojure/clojure.contribution.js\")),\r\n julia: ML(\"julia\", () =>\r\n import(\"monaco-editor/esm/vs/basic-languages/julia/julia.contribution.js\")),\r\n powershell: ML(\"powershell\", () =>\r\n import(\"monaco-editor/esm/vs/basic-languages/powershell/powershell.contribution.js\")),\r\n dockerfile: ML(\"dockerfile\", () =>\r\n import(\"monaco-editor/esm/vs/basic-languages/dockerfile/dockerfile.contribution.js\")),\r\n};\r\n\r\nconst loadedLangs = new Set<string>();\r\n\r\n/**\r\n * Resolve a `langId()` tag to a registered Monaco language id, loading its\r\n * Monarch contribution on first use. Unknown tags (or a failed grammar chunk)\r\n * resolve to \"plaintext\" — the file still renders, just untokenized.\r\n */\r\nexport async function monacoLanguage(lang: string): Promise<string> {\r\n const def = LANGS[lang];\r\n if (!def) return \"plaintext\";\r\n if (!loadedLangs.has(def.id)) {\r\n try {\r\n await def.load();\r\n loadedLangs.add(def.id);\r\n } catch (e) {\r\n console.warn(\"[monaco-loader] grammar load failed for\", lang, e);\r\n return \"plaintext\";\r\n }\r\n }\r\n return def.id;\r\n}\r\n\r\n// extension → the canonical grammar tag understood by code-lang's `loadLangExt`\r\n// (a key in its LANGS map). Distinct from LANG_LABELS, which is display-only.\r\nconst LANG_ID: Record<string, string> = {\r\n ts: \"javascript\", mts: \"javascript\", cts: \"javascript\", tsx: \"javascript\",\r\n js: \"javascript\", mjs: \"javascript\", cjs: \"javascript\", jsx: \"javascript\",\r\n json: \"json\", jsonc: \"json\", json5: \"json\",\r\n css: \"css\", scss: \"sass\", sass: \"sass\", less: \"less\",\r\n html: \"html\", htm: \"html\", xhtml: \"html\",\r\n xml: \"xml\", svg: \"xml\", xsd: \"xml\", xsl: \"xml\", plist: \"xml\", wsdl: \"xml\",\r\n md: \"markdown\", markdown: \"markdown\", mdx: \"markdown\",\r\n rs: \"rust\", py: \"python\", pyw: \"python\", pyi: \"python\",\r\n java: \"java\", yaml: \"yaml\", yml: \"yaml\", toml: \"toml\", sql: \"sql\",\r\n c: \"cpp\", h: \"cpp\", cpp: \"cpp\", cc: \"cpp\", cxx: \"cpp\", hpp: \"cpp\", hh: \"cpp\", hxx: \"cpp\",\r\n php: \"php\", go: \"go\", vue: \"vue\", wat: \"wast\", wast: \"wast\",\r\n rb: \"ruby\", gemspec: \"ruby\", rake: \"ruby\",\r\n cs: \"csharp\", kt: \"kotlin\", kts: \"kotlin\", scala: \"scala\", sc: \"scala\",\r\n dart: \"dart\", swift: \"swift\", lua: \"lua\", pl: \"perl\", pm: \"perl\",\r\n r: \"r\", clj: \"clojure\", cljs: \"clojure\", cljc: \"clojure\", edn: \"clojure\",\r\n hs: \"haskell\", jl: \"julia\", erl: \"erlang\", hrl: \"erlang\",\r\n ps1: \"powershell\", psm1: \"powershell\", groovy: \"groovy\", gradle: \"groovy\",\r\n diff: \"diff\", patch: \"diff\",\r\n properties: \"properties\", ini: \"properties\", env: \"properties\", cfg: \"properties\", conf: \"properties\",\r\n sh: \"shell\", bash: \"shell\", zsh: \"shell\",\r\n};\r\n\r\n/** Canonical CodeMirror grammar tag for a path (\"\"=no grammar / plain text). */\r\nexport function langId(path: string): string {\r\n const name = path.replace(/\\/$/, \"\").split(\"/\").pop() ?? \"\";\r\n if (/^dockerfile$/i.test(name) || /\\.dockerfile$/i.test(name)) return \"dockerfile\";\r\n // Angular CLI template convention → the Angular grammar (html + bindings)\r\n if (/\\.component\\.html$/i.test(name)) return \"angular\";\r\n const dot = name.lastIndexOf(\".\");\r\n if (dot < 0) return \"\";\r\n return LANG_ID[name.slice(dot + 1).toLowerCase()] ?? \"\";\r\n}\r\n\r\n/** The Monaco language for a path, its grammar loaded: \"plaintext\" when there is none. */\r\nexport function monacoLanguageFor(path: string): Promise<string> {\r\n return monacoLanguage(langId(path));\r\n}\r\n","import type * as monacoApi from \"monaco-editor\";\r\n\r\nimport type { MonacoApi } from \"./monaco\";\r\n\r\n/** The slice of a ReviewComment the editor needs to render. */\r\nexport interface ReviewCommentLite {\r\n id: string;\r\n fromLine: number; // 1-based, inclusive\r\n toLine: number; // 1-based, inclusive\r\n note: string;\r\n}\r\n\r\nexport interface CommentHost {\r\n /** Persist a new comment on [fromLine, toLine] (1-based, new-side). */\r\n save(fromLine: number, toLine: number, note: string): void;\r\n /** Delete a saved comment. */\r\n remove(id: string): void;\r\n}\r\n\r\n/** Drop comments that no longer fit the document; clamp partial overhangs. */\r\nexport function clampComments(comments: ReviewCommentLite[], docLines: number): ReviewCommentLite[] {\r\n return comments\r\n .filter((c) => c.fromLine >= 1 && c.fromLine <= docLines)\r\n .map((c) => (c.toLine <= docLines ? c : { ...c, toLine: docLines }));\r\n}\r\n\r\n/**\r\n * Monaco port of the inline-review comment UX (review-comments.ext.ts): hover\r\n * \"+\" in the glyph margin, drag range select, inline composer and saved-comment\r\n * cards as view zones. Same host contract and the same `rc-*` class names, so\r\n * the visual language carries over 1:1.\r\n *\r\n * Mapping from the CM extension:\r\n * - line tints (`rc-covered`/`rc-selected`) → whole-line decorations\r\n * - gutter markers (+ / anchor / dot) → glyph-margin decoration classes\r\n * (Monaco's glyph margin takes class names, not DOM — the icons are CSS)\r\n * - card / composer block widgets → view zones (measured after\r\n * mount, then re-laid-out, since zones need an explicit pixel height)\r\n */\r\n\r\nexport interface MonacoReviewApi {\r\n /** Push the current comment list (idempotent). */\r\n setComments(comments: ReviewCommentLite[]): void;\r\n /** Open the inline composer on a line range (drag-release target). */\r\n openComposer(fromLine: number, toLine: number): void;\r\n dispose(): void;\r\n}\r\n\r\n// ----- tiny inline icons (lucide paths — same set as the CM extension) -----\r\nfunction svgIcon(paths: string[], px: number): SVGElement {\r\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n svg.setAttribute(\"viewBox\", \"0 0 24 24\");\r\n svg.setAttribute(\"width\", String(px));\r\n svg.setAttribute(\"height\", String(px));\r\n svg.setAttribute(\"fill\", \"none\");\r\n svg.setAttribute(\"stroke\", \"currentColor\");\r\n svg.setAttribute(\"stroke-width\", \"2.4\");\r\n svg.setAttribute(\"stroke-linecap\", \"round\");\r\n svg.setAttribute(\"stroke-linejoin\", \"round\");\r\n for (const d of paths) {\r\n const p = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n p.setAttribute(\"d\", d);\r\n svg.appendChild(p);\r\n }\r\n return svg;\r\n}\r\nconst CHAT = [\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"];\r\nconst TRASH = [\"M3 6h18\", \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", \"M10 11v6\", \"M14 11v6\"];\r\n\r\n// ----- pure DOM factories (exported for the spec) -----\r\n\r\n/** Saved-comment card — identical structure/classes to the CM widget. */\r\nexport function buildCard(c: ReviewCommentLite, onDelete: (id: string) => void): HTMLElement {\r\n const root = document.createElement(\"div\");\r\n root.className = \"rc-card\";\r\n const bar = document.createElement(\"span\");\r\n bar.className = \"rc-card-bar\";\r\n root.appendChild(bar);\r\n const body = document.createElement(\"div\");\r\n body.className = \"rc-card-body\";\r\n root.appendChild(body);\r\n\r\n const head = document.createElement(\"div\");\r\n head.className = \"rc-card-head\";\r\n const avatar = document.createElement(\"span\");\r\n avatar.className = \"rc-card-avatar\";\r\n avatar.textContent = \"YOU\";\r\n const who = document.createElement(\"span\");\r\n who.className = \"rc-card-who\";\r\n who.textContent = \"You\";\r\n const ref = document.createElement(\"span\");\r\n ref.className = \"rc-card-ref tnum\";\r\n ref.textContent = \"· \" + (c.toLine > c.fromLine ? `lines ${c.fromLine}-${c.toLine}` : `line ${c.fromLine}`);\r\n const chip = document.createElement(\"span\");\r\n chip.className = \"rc-card-chip\";\r\n chip.textContent = \"pending\";\r\n const del = document.createElement(\"button\");\r\n del.className = \"rc-card-del\";\r\n del.title = \"Delete comment\";\r\n del.appendChild(svgIcon(TRASH, 12));\r\n del.addEventListener(\"click\", () => onDelete(c.id));\r\n head.append(avatar, who, ref, chip, del);\r\n body.appendChild(head);\r\n\r\n const note = document.createElement(\"div\");\r\n note.className = \"rc-card-note\";\r\n note.textContent = c.note;\r\n body.appendChild(note);\r\n return root;\r\n}\r\n\r\n/** Inline composer — identical structure/classes to the CM widget. */\r\nexport function buildComposer(\r\n from: number,\r\n to: number,\r\n cb: { save(note: string): void; cancel(): void },\r\n): HTMLElement {\r\n const root = document.createElement(\"div\");\r\n root.className = \"rc-composer\";\r\n const bar = document.createElement(\"span\");\r\n bar.className = \"rc-composer-bar\";\r\n root.appendChild(bar);\r\n const body = document.createElement(\"div\");\r\n body.className = \"rc-composer-body\";\r\n root.appendChild(body);\r\n\r\n const head = document.createElement(\"div\");\r\n head.className = \"rc-composer-head\";\r\n const icon = svgIcon(CHAT, 12);\r\n icon.classList.add(\"rc-composer-icon\");\r\n const label = document.createElement(\"span\");\r\n label.className = \"rc-composer-label\";\r\n const range = to > from ? `lines ${from}–${to}` : `line ${from}`;\r\n label.innerHTML = `Comment on <b>${range}</b>`;\r\n const tag = document.createElement(\"span\");\r\n tag.className = \"rc-composer-tag up\";\r\n tag.textContent = \"review · queued for agent\";\r\n head.append(icon, label, tag);\r\n body.appendChild(head);\r\n\r\n const ta = document.createElement(\"textarea\");\r\n ta.rows = 3;\r\n ta.placeholder = \"Leave a note for the agent — what to change and why…\";\r\n ta.className = \"rc-composer-ta\";\r\n body.appendChild(ta);\r\n\r\n const foot = document.createElement(\"div\");\r\n foot.className = \"rc-composer-foot\";\r\n const hint = document.createElement(\"span\");\r\n hint.className = \"rc-composer-hint\";\r\n hint.innerHTML = `<span class=\"kbd\">⌘</span> <span class=\"kbd\">↵</span> to save`;\r\n const spacer = document.createElement(\"span\");\r\n spacer.style.marginLeft = \"auto\";\r\n // This widget lives OUTSIDE Angular (Monaco owns the DOM), so it cannot use\r\n // <kj-button>. kouji's button skin is pure class + data-attribute CSS, so the\r\n // native elements opt into it directly — same control ladder as the app,\r\n // no second button recipe. (The old .btn/.primary/.ghost-hair classes died\r\n // with the migration and left these two unstyled.)\r\n const cancel = document.createElement(\"button\");\r\n cancel.className = \"kj-button rc-composer-btn\";\r\n cancel.dataset[\"variant\"] = \"outline\";\r\n cancel.dataset[\"size\"] = \"xs\";\r\n cancel.textContent = \"Cancel\";\r\n const save = document.createElement(\"button\");\r\n save.className = \"kj-button rc-composer-btn\";\r\n save.dataset[\"variant\"] = \"default\";\r\n save.dataset[\"size\"] = \"xs\";\r\n save.textContent = \"Save\";\r\n save.disabled = true;\r\n foot.append(hint, spacer, cancel, save);\r\n body.appendChild(foot);\r\n\r\n const doSave = (): void => {\r\n const note = ta.value.trim();\r\n if (!note) return;\r\n cb.save(note);\r\n };\r\n ta.addEventListener(\"input\", () => (save.disabled = !ta.value.trim()));\r\n ta.addEventListener(\"keydown\", (e) => {\r\n if ((e.metaKey || e.ctrlKey) && e.key === \"Enter\") doSave();\r\n if (e.key === \"Escape\") cb.cancel();\r\n });\r\n cancel.addEventListener(\"click\", () => cb.cancel());\r\n save.addEventListener(\"click\", doSave);\r\n setTimeout(() => ta.focus(), 0);\r\n return root;\r\n}\r\n\r\n// ----- global styles (Monaco decorations take class names — inject once) -----\r\n\r\nconst STYLE_ID = \"rc-monaco-styles\";\r\nfunction ensureStyles(): void {\r\n if (document.getElementById(STYLE_ID)) return;\r\n const style = document.createElement(\"style\");\r\n style.id = STYLE_ID;\r\n style.textContent = `\r\n.monaco-editor .rc-covered { box-shadow: inset 2px 0 0 var(--ui-ind); }\r\n.monaco-editor .rc-selected { background: var(--ui-sel); }\r\n.monaco-editor .rc-glyph-plus {\r\n cursor: grab; border-radius: 4px; background: var(--ui-fill);\r\n -webkit-mask: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"black\" stroke-width=\"2.4\" stroke-linecap=\"round\"><path d=\"M5 12h14\"/><path d=\"M12 5v14\"/></svg>') center / 11px 11px no-repeat, linear-gradient(#000 0 0);\r\n -webkit-mask-composite: xor; mask-composite: exclude;\r\n transform: scale(0.78);\r\n}\r\n.monaco-editor .rc-glyph-anchor {\r\n border-radius: 4px; background: var(--ui-fill);\r\n -webkit-mask: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"black\" stroke-width=\"2.4\" stroke-linejoin=\"round\"><path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"/></svg>') center / 10px 10px no-repeat, linear-gradient(#000 0 0);\r\n -webkit-mask-composite: xor; mask-composite: exclude;\r\n transform: scale(0.72);\r\n}\r\n.monaco-editor .rc-glyph-dot {\r\n background: radial-gradient(circle at center, var(--ui-line) 0 2.5px, transparent 3px);\r\n}\r\n/* Monaco's view-zone layer is display-only by default — the comment cards and\r\n composer are interactive, so their zones must accept pointer events and\r\n stack above the text layers. */\r\n.monaco-editor .rc-zone {\r\n font-family: var(--font-sans, inherit);\r\n pointer-events: auto;\r\n position: relative;\r\n z-index: 10;\r\n}\r\n.rc-card { display: flex; background: var(--panel); border-top: 1px solid var(--hair); border-bottom: 1px solid var(--hair); }\r\n.rc-card-bar { width: 24px; flex: none; background: var(--ui-sel); box-shadow: inset 2px 0 0 var(--ui-ind); }\r\n.rc-card-body { flex: 1; padding: 9px 14px 9px 12px; min-width: 0; }\r\n.rc-card-head { display: flex; align-items: center; gap: 7px; }\r\n.rc-card-avatar { width: 17px; height: 17px; flex: none; border-radius: 50%; display: grid; place-items: center; font-size: var(--fs-micro); font-weight: var(--fw-strong); color: var(--ui-ink); background: var(--ui-sel); border: 1px solid var(--ui-sel-2); }\r\n.rc-card-who { font-size: var(--fs-badge); color: var(--ink-2); }\r\n.rc-card-ref { font-size: var(--fs-micro); color: var(--ink-4); }\r\n.rc-card-chip { font-size: var(--fs-micro); padding: 0 5px; color: var(--ui-ink); border: 1px solid var(--ui-sel-2); border-radius: 999px; }\r\n.rc-card-del { margin-left: auto; background: transparent; border: none; color: var(--ink-4); cursor: pointer; display: flex; padding: 3px; border-radius: 3px; }\r\n.rc-card-del:hover { color: var(--code-del-ink); }\r\n.rc-card-note { font-size: var(--fs-badge); color: var(--ink); line-height: 1.5; margin-top: 5px; white-space: pre-wrap; word-break: break-word; }\r\n.rc-composer { display: flex; background: var(--ui-sel); border-top: 1px solid var(--ui-sel-2); border-bottom: 1px solid var(--hair); }\r\n.rc-composer-bar { width: 24px; flex: none; background: var(--ui-sel-2); }\r\n.rc-composer-body { flex: 1; padding: 10px 14px 10px 12px; }\r\n.rc-composer-head { display: flex; align-items: center; gap: 7px; margin-bottom: 7px; }\r\n.rc-composer-icon { color: var(--ui-ink); }\r\n.rc-composer-label { font-size: var(--fs-micro); color: var(--ink-2); }\r\n.rc-composer-label b { color: var(--ink); }\r\n.rc-composer-tag { margin-left: auto; font-size: var(--fs-micro); color: var(--ink-4); }\r\n.rc-composer-ta { width: 100%; resize: vertical; min-height: 56px; background: var(--panel-2); border: 1px solid var(--hair); border-radius: var(--r-sm); padding: 8px 10px; color: var(--ink); font-family: var(--font-mono); font-size: var(--fs-badge); line-height: 1.55; outline: none; }\r\n.rc-composer-foot { display: flex; align-items: center; gap: 8px; margin-top: 8px; }\r\n.rc-composer-hint { font-size: var(--fs-micro); color: var(--ink-4); }\r\n/* geometry comes from .kj-button[data-size=\"xs\"]; nothing to add */\r\n`;\r\n document.head.appendChild(style);\r\n}\r\n\r\n// -------------------------------------------------------------- controller ----\r\n\r\ninterface DragState {\r\n anchor: number;\r\n current: number;\r\n}\r\ninterface ComposerState {\r\n from: number;\r\n to: number;\r\n}\r\n\r\nexport function attachReviewComments(\r\n monaco: MonacoApi,\r\n editor: monacoApi.editor.IStandaloneCodeEditor,\r\n host: CommentHost,\r\n): MonacoReviewApi {\r\n ensureStyles();\r\n const MouseTargetType = monaco.editor.MouseTargetType;\r\n\r\n let comments: ReviewCommentLite[] = [];\r\n let drag: DragState | null = null;\r\n let composer: ComposerState | null = null;\r\n let hover = 0;\r\n let disposed = false;\r\n\r\n const decorations = editor.createDecorationsCollection();\r\n let zoneIds: string[] = [];\r\n /** Zones whose height must be measured after Monaco mounts their DOM. */\r\n let pendingMeasure: { id: string; node: HTMLElement; zone: { heightInPx: number } }[] = [];\r\n\r\n const docLines = (): number => editor.getModel()?.getLineCount() ?? 0;\r\n\r\n function renderDecorations(): void {\r\n const model = editor.getModel();\r\n if (!model) return;\r\n const lines = model.getLineCount();\r\n const decos: monacoApi.editor.IModelDeltaDecoration[] = [];\r\n const push = (n: number, options: monacoApi.editor.IModelDecorationOptions): void => {\r\n decos.push({ range: new monaco.Range(n, 1, n, 1), options });\r\n };\r\n for (const c of clampComments(comments, lines)) {\r\n for (let n = c.fromLine; n <= c.toLine; n++) {\r\n push(n, {\r\n isWholeLine: true,\r\n className: \"rc-covered\",\r\n glyphMarginClassName: n === c.fromLine ? \"rc-glyph-anchor\" : \"rc-glyph-dot\",\r\n });\r\n }\r\n }\r\n if (drag) {\r\n const a = Math.max(1, Math.min(drag.anchor, drag.current));\r\n const b = Math.min(lines, Math.max(drag.anchor, drag.current));\r\n for (let n = a; n <= b; n++) push(n, { isWholeLine: true, className: \"rc-selected\" });\r\n }\r\n if (composer && composer.from >= 1 && composer.from <= lines) {\r\n const to = Math.min(composer.to, lines);\r\n for (let n = composer.from; n <= to; n++) push(n, { isWholeLine: true, className: \"rc-selected\" });\r\n }\r\n // hover + only when the line is not covered and nothing else owns the gutter\r\n if (hover >= 1 && hover <= lines && !drag && !composer) {\r\n const covered = clampComments(comments, lines).some((c) => hover >= c.fromLine && hover <= c.toLine);\r\n if (!covered) push(hover, { isWholeLine: false, glyphMarginClassName: \"rc-glyph-plus\" });\r\n }\r\n decorations.set(decos);\r\n }\r\n\r\n function renderZones(): void {\r\n const lines = docLines();\r\n pendingMeasure = [];\r\n editor.changeViewZones((accessor) => {\r\n for (const id of zoneIds) accessor.removeZone(id);\r\n zoneIds = [];\r\n const addZone = (afterLine: number, node: HTMLElement): void => {\r\n const wrap = document.createElement(\"div\");\r\n wrap.className = \"rc-zone\";\r\n wrap.appendChild(node);\r\n const zone = { afterLineNumber: afterLine, heightInPx: 96, domNode: wrap };\r\n const id = accessor.addZone(zone);\r\n zoneIds.push(id);\r\n pendingMeasure.push({ id, node: wrap, zone });\r\n };\r\n for (const c of clampComments(comments, lines)) {\r\n addZone(c.toLine, buildCard(c, (cid) => host.remove(cid)));\r\n }\r\n if (composer && composer.from >= 1 && composer.from <= lines) {\r\n const to = Math.min(composer.to, lines);\r\n addZone(\r\n to,\r\n buildComposer(composer.from, to, {\r\n save: (note) => {\r\n host.save(composer!.from, Math.min(composer!.to, docLines()), note);\r\n setComposer(null);\r\n },\r\n cancel: () => setComposer(null),\r\n }),\r\n );\r\n }\r\n });\r\n // zones need explicit pixel heights — measure the real DOM, then re-layout\r\n requestAnimationFrame(() => {\r\n if (disposed || !pendingMeasure.length) return;\r\n const toFix = pendingMeasure.filter((p) => {\r\n const h = p.node.offsetHeight;\r\n if (h > 0 && Math.abs(h - p.zone.heightInPx) > 1) {\r\n p.zone.heightInPx = h;\r\n return true;\r\n }\r\n return false;\r\n });\r\n if (toFix.length) {\r\n editor.changeViewZones((accessor) => {\r\n for (const p of toFix) accessor.layoutZone(p.id);\r\n });\r\n }\r\n });\r\n }\r\n\r\n function renderAll(): void {\r\n renderDecorations();\r\n renderZones();\r\n }\r\n\r\n function setComposer(next: ComposerState | null): void {\r\n composer = next;\r\n renderAll();\r\n }\r\n\r\n function startDrag(anchor: number): void {\r\n drag = { anchor, current: anchor };\r\n renderDecorations();\r\n const move = (e: MouseEvent): void => {\r\n const t = editor.getTargetAtClientPoint(e.clientX, e.clientY);\r\n const line = t?.position?.lineNumber;\r\n if (line && drag && drag.current !== line) {\r\n drag = { ...drag, current: line };\r\n renderDecorations();\r\n }\r\n };\r\n const up = (): void => {\r\n window.removeEventListener(\"mousemove\", move);\r\n window.removeEventListener(\"mouseup\", up);\r\n const d = drag;\r\n drag = null;\r\n if (d) setComposer({ from: Math.min(d.anchor, d.current), to: Math.max(d.anchor, d.current) });\r\n else renderAll();\r\n };\r\n window.addEventListener(\"mousemove\", move);\r\n window.addEventListener(\"mouseup\", up);\r\n }\r\n\r\n const subs: monacoApi.IDisposable[] = [\r\n editor.onMouseMove((e) => {\r\n if (drag) return; // drag owns the pointer\r\n const n = e.target.position?.lineNumber ?? 0;\r\n if (n !== hover) {\r\n hover = n;\r\n renderDecorations();\r\n }\r\n }),\r\n editor.onMouseLeave(() => {\r\n if (hover !== 0 && !drag) {\r\n hover = 0;\r\n renderDecorations();\r\n }\r\n }),\r\n editor.onMouseDown((e) => {\r\n if (e.target.type !== MouseTargetType.GUTTER_GLYPH_MARGIN) return;\r\n const n = e.target.position?.lineNumber;\r\n if (!n || composer) return;\r\n const covered = clampComments(comments, docLines()).some((c) => n >= c.fromLine && n <= c.toLine);\r\n if (covered) return;\r\n e.event.preventDefault();\r\n e.event.stopPropagation();\r\n startDrag(n);\r\n }),\r\n // edits move lines under comments — re-clamp and re-anchor zones\r\n editor.onDidChangeModelContent(() => renderAll()),\r\n ];\r\n\r\n return {\r\n setComments(next) {\r\n comments = next;\r\n renderAll();\r\n },\r\n openComposer(fromLine, toLine) {\r\n setComposer({ from: Math.min(fromLine, toLine), to: Math.max(fromLine, toLine) });\r\n },\r\n dispose() {\r\n disposed = true;\r\n for (const s of subs) s.dispose();\r\n decorations.clear();\r\n editor.changeViewZones((accessor) => {\r\n for (const id of zoneIds) accessor.removeZone(id);\r\n });\r\n zoneIds = [];\r\n },\r\n };\r\n}\r\n","import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, ViewEncapsulation, booleanAttribute, computed, effect, inject, input, output, signal, untracked, viewChild } from \"@angular/core\";\r\nimport type * as monacoApi from \"monaco-editor\";\r\n\r\nimport { OrrSpinnerComponent } from \"../containers/containers.components\";\r\nimport type { DiffComment } from \"../diff/diff.component\";\r\nimport { type MonacoApi, applyMonacoTheme, diffOverviewRulerOptions, loadMonaco, monacoLanguageFor, monacoScrollbarOptions, tokenHex } from \"./monaco\";\r\nimport { type MonacoReviewApi, attachReviewComments } from \"./review-comments.monaco\";\r\n\r\n/** The page's theme: light or dark by its code ground (`--well`), whatever the theme is called (graphite, paper, …). */\r\nexport function pageTheme(host: HTMLElement): \"dark\" | \"light\" {\r\n const hex = tokenHex(getComputedStyle(host), \"--well\");\r\n if (hex && /^#[0-9a-f]{6}/i.test(hex)) {\r\n const [r, g, b] = [1, 3, 5].map((i) => parseInt(hex.slice(i, i + 2), 16));\r\n return 0.2126 * r! + 0.7152 * g! + 0.0722 * b! > 128 ? \"light\" : \"dark\";\r\n }\r\n return globalThis.matchMedia?.(\"(prefers-color-scheme: light)\").matches ? \"light\" : \"dark\";\r\n}\r\n\r\n/** Handed to `(ready)` each time an editor is built, for what only one app adds (symbol navigation, blame, saved scroll). */\r\nexport interface MonacoDiffReady {\r\n monaco: MonacoApi;\r\n /** The diff editor; `null` for a new file, which shows in a plain editor. */\r\n diff: monacoApi.editor.IStandaloneDiffEditor | null;\r\n /** The editor holding the new side (the diff's modified editor, or the plain one). */\r\n editor: monacoApi.editor.IStandaloneCodeEditor;\r\n}\r\n\r\n/**\r\n * `<orr-monaco-diff [before]=\"old\" [after]=\"new\" path=\"src/a.ts\" />`: a changed file, the one way every\r\n * Orrery app shows one (IDE mode, Agent mode, Cloud, the review dialog) — Monaco's diff, read-only,\r\n * unchanged regions folded away, opened on its first change, coloured from the app's tokens. Inline by\r\n * default with one column of line numbers; `sideBySide` puts the two sides next to each other. A new\r\n * file (`before` empty) shows whole, every line marked added. New text for the same `path` refreshes in\r\n * place (scroll kept); a new `path` opens on its first change. Monaco loads on first use; until then (or\r\n * if it cannot) the new text shows plain.\r\n */\r\n@Component({\r\n selector: \"orr-monaco-diff\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n // Monaco builds its DOM outside Angular's view: these rules must reach it.\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [OrrSpinnerComponent],\r\n host: { class: \"orr-monaco-diff\", \"[attr.aria-busy]\": \"busy() || null\" },\r\n template: `\r\n <div #view class=\"orr-md__view\"></div>\r\n @if (busy()) { <orr-spinner class=\"orr-md__spin\" size=\"lg\" label=\"Loading the file\" /> }\r\n `,\r\n styles: [\r\n `\r\n .orr-monaco-diff { display: block; position: relative; min-height: 0; background: var(--well); }\r\n .orr-md__view { position: absolute; inset: 0; font: 12px/18px var(--font-mono); white-space: pre; overflow: auto; }\r\n .orr-md__spin { position: absolute; inset: 0; margin: auto; color: var(--ink-3); z-index: 1; }\r\n .orr-monaco-diff .orr-md__current { box-shadow: inset 2px 0 0 var(--ui-ind); }\r\n .orr-monaco-diff .orr-md__note::after { content: \"\"; position: absolute; left: 4px; top: 50%; width: 6px; height: 6px; margin-top: -3px; border-radius: 50%; background: var(--ui-ind); }\r\n `,\r\n ],\r\n})\r\nexport class OrrMonacoDiffComponent {\r\n readonly before = input(\"\");\r\n readonly after = input(\"\");\r\n /** The file: picks the grammar; a new path opens on its first change. */\r\n readonly path = input(\"\");\r\n /** `null`: the page's. */\r\n readonly theme = input<\"dark\" | \"light\" | null>(null);\r\n /** The two sides next to each other (IDE mode's diff tab) instead of inline. */\r\n readonly sideBySide = input(false, { transform: booleanAttribute });\r\n /** Line comments as in IDE mode: hover \"+\" in the margin, drag a range, write. */\r\n readonly commentable = input(false, { transform: booleanAttribute });\r\n /** New-side lines that already carry a comment (marked in the margin). */\r\n readonly notes = input<readonly number[]>([]);\r\n /** A new-side line to bring to the centre and mark (the review's current change); `null`: none. */\r\n readonly reveal = input<number | null>(null);\r\n /** The new side's model URI (an app's symbol navigation keys on it); `null`: Monaco's own. */\r\n readonly modelUri = input<string | null>(null);\r\n /** The host is still fetching the file: the spinner shows, centred, until the text comes. */\r\n readonly loading = input(false, { transform: booleanAttribute });\r\n /** A comment written on the new side. */\r\n readonly comment = output<DiffComment>();\r\n readonly ready = output<MonacoDiffReady>();\r\n\r\n private readonly view = viewChild.required<ElementRef<HTMLElement>>(\"view\");\r\n /** Monaco is loading or building the editor. */\r\n private readonly building = signal(true);\r\n protected readonly busy = computed(() => this.loading() || this.building());\r\n private monaco: MonacoApi | null = null;\r\n private diff: monacoApi.editor.IStandaloneDiffEditor | null = null;\r\n /** A new file: no old side to diff against (Monaco draws an empty old side as a removed line 1). */\r\n private added: monacoApi.editor.IStandaloneCodeEditor | null = null;\r\n private addedMarks: monacoApi.editor.IEditorDecorationsCollection | null = null;\r\n private marks: monacoApi.editor.IEditorDecorationsCollection | null = null;\r\n private comments: MonacoReviewApi | null = null;\r\n /** What the editor shows now: a refresh of the same file keeps its scroll. */\r\n private shown: { path: string; sideBySide: boolean; uri: string | null } | null = null;\r\n private token = 0;\r\n\r\n constructor() {\r\n effect(() => {\r\n const before = this.before();\r\n const after = this.after();\r\n const path = this.path();\r\n const sideBySide = this.sideBySide();\r\n const uri = this.modelUri();\r\n const el = this.view().nativeElement;\r\n if (this.loading()) return;\r\n untracked(() => void this.show(el, before, after, path, sideBySide, uri));\r\n });\r\n effect(() => {\r\n const theme = this.theme();\r\n if (this.monaco) applyMonacoTheme(this.monaco, theme ?? pageTheme(this.view().nativeElement));\r\n });\r\n effect(() => {\r\n const reveal = this.reveal();\r\n const notes = this.notes();\r\n untracked(() => this.mark(reveal, notes, true));\r\n });\r\n inject(DestroyRef).onDestroy(() => {\r\n this.token++;\r\n this.reset();\r\n });\r\n }\r\n\r\n private editor(): monacoApi.editor.IStandaloneCodeEditor | null {\r\n return this.added ?? this.diff?.getModifiedEditor() ?? null;\r\n }\r\n\r\n private async show(el: HTMLElement, before: string, after: string, path: string, sideBySide: boolean, uri: string | null): Promise<void> {\r\n const token = ++this.token;\r\n let monaco: MonacoApi;\r\n let lang: string;\r\n try {\r\n monaco = await loadMonaco();\r\n lang = await monacoLanguageFor(path);\r\n } catch {\r\n if (token === this.token && !this.editor()) el.textContent = after;\r\n if (token === this.token) this.building.set(false);\r\n return;\r\n }\r\n if (token !== this.token) return;\r\n this.monaco = monaco;\r\n applyMonacoTheme(monaco, this.theme() ?? pageTheme(el));\r\n const isNew = before === \"\";\r\n const same = this.shown?.path === path && this.shown.sideBySide === sideBySide && this.shown.uri === uri && (isNew ? !!this.added : !!this.diff);\r\n if (same) {\r\n this.refresh(before, after);\r\n return;\r\n }\r\n this.reset();\r\n el.textContent = \"\";\r\n this.building.set(true);\r\n this.shown = { path, sideBySide, uri };\r\n const common: monacoApi.editor.IEditorOptions = {\r\n readOnly: true,\r\n wordWrap: sideBySide ? \"off\" : \"on\",\r\n minimap: { enabled: false },\r\n scrollBeyondLastLine: false,\r\n automaticLayout: true,\r\n fontSize: 12,\r\n lineHeight: 18,\r\n renderLineHighlight: \"none\",\r\n renderWhitespace: \"none\",\r\n stickyScroll: { enabled: false },\r\n fixedOverflowWidgets: true,\r\n ...monacoScrollbarOptions(),\r\n glyphMargin: this.commentable() || this.notes().length > 0,\r\n };\r\n const modified = monaco.editor.createModel(after, lang, uri ? monaco.Uri.parse(uri) : undefined);\r\n if (isNew) {\r\n const editor = (this.added = monaco.editor.create(el, { ...common, model: modified }));\r\n this.markAdded();\r\n this.attachComments(monaco, editor);\r\n this.ready.emit({ monaco, diff: null, editor });\r\n this.mark(this.reveal(), this.notes(), true);\r\n if (this.reveal() === null) editor.revealLine(1);\r\n this.building.set(false);\r\n return;\r\n }\r\n const diff = (this.diff = monaco.editor.createDiffEditor(el, {\r\n ...common,\r\n renderSideBySide: sideBySide,\r\n useInlineViewWhenSpaceIsLimited: false,\r\n hideUnchangedRegions: { enabled: true, contextLineCount: 3, minimumLineCount: 4 },\r\n ...diffOverviewRulerOptions(),\r\n }));\r\n // inline: one column of line numbers (the new file's), not the old side's beside it\r\n if (!sideBySide) diff.getOriginalEditor().updateOptions({ lineNumbers: \"off\" });\r\n diff.setModel({ original: monaco.editor.createModel(before, lang), modified });\r\n this.attachComments(monaco, diff.getModifiedEditor());\r\n this.ready.emit({ monaco, diff, editor: diff.getModifiedEditor() });\r\n this.mark(this.reveal(), this.notes(), false);\r\n // shortcut: a diff the worker never answers still drops the spinner after 3 s (the text shows, uncoloured)\r\n // keyed on the editor, not the token: a same-file refresh takes a new token and must not strand the spinner\r\n setTimeout(() => this.diff === diff && this.building.set(false), 3000);\r\n // The diff computes in the worker: open on the first change once it lands (unless a line is asked for).\r\n const once = diff.onDidUpdateDiff(() => {\r\n once.dispose();\r\n if (this.diff !== diff) return;\r\n this.building.set(false);\r\n const want = this.reveal();\r\n const first = diff.getLineChanges()?.[0];\r\n const line = want ?? (first ? Math.max(1, first.modifiedStartLineNumber) : null);\r\n if (line !== null) diff.getModifiedEditor().revealLineInCenter(line);\r\n });\r\n }\r\n\r\n /** New text for the file on show: written into the live models (value-guarded), scroll kept. */\r\n private refresh(before: string, after: string): void {\r\n if (this.added) {\r\n const m = this.added.getModel();\r\n if (m && m.getValue() !== after) {\r\n m.setValue(after);\r\n this.markAdded();\r\n }\r\n return;\r\n }\r\n const m = this.diff?.getModel();\r\n if (!m) return;\r\n if (m.original.getValue() !== before) m.original.setValue(before);\r\n if (m.modified.getValue() !== after) m.modified.setValue(after);\r\n }\r\n\r\n private markAdded(): void {\r\n const editor = this.added;\r\n const model = editor?.getModel();\r\n if (!editor || !model) return;\r\n this.addedMarks?.clear();\r\n // every line is new: Monaco's own inserted-line colours, as the diff draws them\r\n this.addedMarks = editor.createDecorationsCollection([\r\n { range: model.getFullModelRange(), options: { isWholeLine: true, className: \"line-insert\", linesDecorationsClassName: \"gutter-insert\" } },\r\n ]);\r\n }\r\n\r\n /** The current change (a bar beside it, centred when `scroll`) and the commented lines. */\r\n private mark(reveal: number | null, notes: readonly number[], scroll: boolean): void {\r\n const editor = this.editor();\r\n if (!editor) return;\r\n const ds: monacoApi.editor.IModelDeltaDecoration[] = notes.map((n) => ({\r\n range: { startLineNumber: n, startColumn: 1, endLineNumber: n, endColumn: 1 },\r\n options: { isWholeLine: true, glyphMarginClassName: \"orr-md__note\" },\r\n }));\r\n if (reveal !== null) ds.push({ range: { startLineNumber: reveal, startColumn: 1, endLineNumber: reveal, endColumn: 1 }, options: { isWholeLine: true, className: \"orr-md__current\" } });\r\n this.marks?.clear();\r\n this.marks = editor.createDecorationsCollection(ds);\r\n if (scroll && reveal !== null) editor.revealLineInCenter(reveal);\r\n }\r\n\r\n private attachComments(monaco: MonacoApi, editor: monacoApi.editor.IStandaloneCodeEditor): void {\r\n if (!this.commentable()) return;\r\n this.comments = attachReviewComments(monaco, editor, {\r\n save: (from, to, note) => {\r\n const model = editor.getModel();\r\n const lines: string[] = [];\r\n for (let n = from; n <= to; n++) lines.push(model?.getLineContent(n) ?? \"\");\r\n this.comment.emit({ path: this.path(), line: from, to, side: \"new\", text: note, index: -1, quote: lines[0] ?? \"\", lines });\r\n // the host queues it (the review); the editor keeps no card of its own\r\n this.comments?.setComments([]);\r\n },\r\n remove: () => undefined,\r\n });\r\n }\r\n\r\n /** Drops whichever editor is up (diff or added) with its models and comments. */\r\n private reset(): void {\r\n this.comments?.dispose();\r\n this.comments = null;\r\n this.marks = null;\r\n this.addedMarks = null;\r\n this.shown = null;\r\n const m = this.diff?.getModel();\r\n this.diff?.dispose();\r\n m?.original.dispose();\r\n m?.modified.dispose();\r\n this.diff = null;\r\n const a = this.added?.getModel();\r\n this.added?.dispose();\r\n a?.dispose();\r\n this.added = null;\r\n }\r\n}\r\n","import { computed, signal } from \"@angular/core\";\r\n\r\nimport { type DiffLine, changeStarts, sameLines } from \"../diff/diff-model\";\r\nimport { type ChangedFile, type FileListMode, fileOrder, sameChangedFile } from \"./file-tree\";\r\n\r\n/** A changed file with its diff: ideally every line of the file (`fileLines`), so a review can show it whole. */\r\nexport interface ReviewFile extends ChangedFile {\r\n lines: readonly DiffLine[];\r\n /** Both sides of the file, when the host read them: the changes view then shows IDE mode's Monaco diff. */\r\n before?: string;\r\n after?: string;\r\n /** Its two sides are being fetched: the view shows the spinner, not the transcript's lines. */\r\n reading?: boolean;\r\n}\r\n\r\n/**\r\n * Two review lists with the same files and the same lines. The `equal` of a host's changes signal\r\n * (and the panel's own): a session's stream or a worktree poll rebuilds the list with nothing\r\n * changed, and an equal list must not re-render the tree or re-highlight the diff.\r\n */\r\nexport function sameReviewFiles(a: readonly ReviewFile[], b: readonly ReviewFile[]): boolean {\r\n if (a === b) return true;\r\n if (a.length !== b.length) return false;\r\n for (let i = 0; i < a.length; i++) {\r\n const x = a[i]!;\r\n const y = b[i]!;\r\n if (x !== y && !(sameChangedFile(x, y) && sameLines(x.lines, y.lines) && x.before === y.before && x.after === y.after && x.reading === y.reading)) return false;\r\n }\r\n return true;\r\n}\r\n\r\n/**\r\n * Where a review stands: which file, which change in it. Next / previous change walks across files\r\n * (past the last change of a file to the first of the next, wrapping); next / previous file wraps.\r\n * Files are walked in the order the list shows them.\r\n */\r\nexport class ChangesReview {\r\n readonly files = signal<readonly ReviewFile[]>([]);\r\n readonly mode = signal<FileListMode>(\"tree\");\r\n readonly fileIndex = signal(0);\r\n readonly changeIndex = signal(0);\r\n\r\n /** The files in list order. */\r\n readonly ordered = computed<ReviewFile[]>(() => {\r\n const byPath = new Map(this.files().map((f) => [f.path, f]));\r\n return fileOrder(this.files(), this.mode()).map((p) => byPath.get(p)!);\r\n });\r\n readonly current = computed<ReviewFile | null>(() => this.ordered()[Math.min(this.fileIndex(), this.ordered().length - 1)] ?? null);\r\n readonly starts = computed(() => changeStarts(this.current()?.lines ?? []));\r\n /** The current change's first line index in the current file, -1 when it has none. */\r\n readonly currentLine = computed(() => this.starts()[Math.min(this.changeIndex(), this.starts().length - 1)] ?? -1);\r\n /** `file 2 of 5 · change 1 of 3`. */\r\n readonly position = computed(() => {\r\n const n = this.ordered().length;\r\n if (!n) return \"\";\r\n const m = this.starts().length;\r\n return `file ${this.fileIndex() + 1} of ${n}` + (m ? ` · change ${Math.min(this.changeIndex(), m - 1) + 1} of ${m}` : \" · no line changes\");\r\n });\r\n\r\n constructor(files: readonly ReviewFile[] = [], mode: FileListMode = \"tree\", path: string | null = null) {\r\n this.files.set(files);\r\n this.mode.set(mode);\r\n if (path) this.select(path);\r\n }\r\n\r\n /** Opens `path` at its first change. */\r\n select(path: string): void {\r\n const i = this.ordered().findIndex((f) => f.path === path);\r\n if (i < 0) return;\r\n this.fileIndex.set(i);\r\n this.changeIndex.set(0);\r\n }\r\n\r\n stepFile(dir: 1 | -1): void {\r\n const n = this.ordered().length;\r\n if (!n) return;\r\n this.fileIndex.set((this.fileIndex() + dir + n) % n);\r\n this.changeIndex.set(0);\r\n }\r\n\r\n stepChange(dir: 1 | -1): void {\r\n const fs = this.ordered();\r\n const n = fs.length;\r\n if (!n) return;\r\n const count = (i: number) => changeStarts(fs[i]!.lines).length;\r\n const c = this.changeIndex() + dir;\r\n if (c >= 0 && c < count(this.fileIndex())) {\r\n this.changeIndex.set(c);\r\n return;\r\n }\r\n // the next / previous file that has a change (the current one again after a full turn)\r\n for (let k = 1; k <= n; k++) {\r\n const i = (this.fileIndex() + dir * k + n * k) % n;\r\n const m = count(i);\r\n if (m) {\r\n this.fileIndex.set(i);\r\n this.changeIndex.set(dir > 0 ? 0 : m - 1);\r\n return;\r\n }\r\n }\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, type Signal, computed, inject, signal } from \"@angular/core\";\r\nimport { KjDialogRef } from \"@kouji-ui/core\";\r\n\r\nimport { OrrDialogFootDirective, OrrDialogActionsDirective, OrrDialogShellComponent, OrrDialogTitleDirective } from \"../containers/dialog-shell.component\";\r\nimport { diffStat } from \"../diff/diff-model\";\r\nimport { type DiffComment, OrrDiffComponent } from \"../diff/diff.component\";\r\nimport type { DiffLine } from \"../diff/diff-model\";\r\nimport { OrrMonacoDiffComponent } from \"../code/monaco-diff.component\";\r\nimport { OrrIconComponent } from \"../icon/icon.component\";\r\nimport { OrrKbdComponent } from \"../status/kbd.component\";\r\nimport { ChangesReview } from \"./changes-review\";\r\nimport { OrrFileTreeComponent } from \"./file-tree.component\";\r\n\r\n/** What the review dialog shows and where its comments go. */\r\nexport interface ChangesExpandContext {\r\n review: ChangesReview;\r\n /** `Review · stripe-retry`. */\r\n title: string;\r\n commentable: boolean;\r\n /** The comment box label before `path:Lnn` (default `Comment on`). */\r\n commentLabel?: string;\r\n /** Commented line numbers per path: a snapshot, or a signal so a comment added in the dialog shows at once. */\r\n notes: Readonly<Record<string, readonly number[]>> | Signal<Readonly<Record<string, readonly number[]>>>;\r\n /** What the diff says for a file with no lines yet. */\r\n emptyText?: (path: string) => string;\r\n onComment: (c: DiffComment) => void;\r\n}\r\n\r\n/** The VCS letter as the review head names it. */\r\nconst STATE_WORD: Record<string, string> = { A: \"Added\", M: \"Modified\", D: \"Deleted\", R: \"Renamed\", C: \"Conflicted\", U: \"Conflicted\", \"?\": \"Untracked\", \"!\": \"Ignored\" };\r\n\r\n/** The new-side line of the change starting at `i`: its first line there, else where a removal sat. */\r\nexport function newSideLine(lines: readonly DiffLine[], i: number): number {\r\n for (let k = i; k < lines.length; k++) if (lines[k]!.b !== undefined) return lines[k]!.b!;\r\n for (let k = i - 1; k >= 0; k--) if (lines[k]!.b !== undefined) return lines[k]!.b!;\r\n return 1;\r\n}\r\n\r\n/** True when a key event comes from a place the person types in. */\r\nexport function isTyping(e: KeyboardEvent): boolean {\r\n const t = e.target as HTMLElement | null;\r\n const tag = t?.tagName?.toLowerCase();\r\n return tag === \"input\" || tag === \"textarea\" || tag === \"select\" || !!t?.isContentEditable;\r\n}\r\n\r\n/**\r\n * The Expand dialog of `orr-changes-panel` (App-00): the file tree on the left, the whole file with\r\n * its changes on the right, the current change marked. Keys (scoped to the dialog): N / J next change\r\n * and P / K previous, across files; ] / [ next / previous file; Esc (kouji's overlay) closes.\r\n * Opened by the panel through `KjDialogService`; `bind()` hands it the review.\r\n */\r\n@Component({\r\n selector: \"orr-changes-expand\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n OrrDialogShellComponent,\r\n OrrDialogActionsDirective,\r\n OrrDialogFootDirective,\r\n OrrDialogTitleDirective,\r\n OrrFileTreeComponent,\r\n OrrDiffComponent,\r\n OrrIconComponent,\r\n OrrMonacoDiffComponent,\r\n OrrKbdComponent,\r\n ],\r\n host: { \"(keydown)\": \"onKey($event)\" },\r\n styles: [\r\n `\r\n .orr-expand { display: grid; grid-template-columns: 290px minmax(0, 1fr); gap: 0; height: min(72vh, 700px); margin: 0 -18px -14px; border-top: 1px solid var(--hair); border-bottom: 1px solid var(--hair); }\r\n .orr-expand > orr-filetree { border-right: 1px solid var(--hair); min-height: 0; }\r\n .orr-expand__file { display: flex; flex-direction: column; min-width: 0; min-height: 0; }\r\n .orr-expand__head { flex: none; padding: var(--sp-4) var(--sp-6); background: var(--panel); border-bottom: 1px solid var(--hair); }\r\n .orr-expand__facts { display: flex; gap: var(--sp-4); font-size: var(--fs-badge); font-variant-numeric: tabular-nums; }\r\n .orr-expand__path { display: flex; align-items: center; gap: var(--sp-3); margin-top: var(--sp-1); color: var(--ink-2); font-size: var(--fs-meta); min-width: 0; }\r\n .orr-expand__path span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\r\n .orr-expand__file > orr-diff, .orr-expand__file > orr-monaco-diff { flex: 1; min-height: 0; }\r\n .orr-expand__where { font-family: var(--font-mono); font-size: var(--fs-meta); color: var(--ink-3); overflow: hidden; text-overflow: ellipsis; min-width: 0; }\r\n .orr-expand__pos { font-size: var(--fs-meta); color: var(--ink-4); }\r\n .orr-expand__legend { display: flex; flex-wrap: wrap; gap: 14px; margin-right: auto; color: var(--ink-3); font-size: var(--fs-meta); }\r\n .orr-expand__legend > span, .orr-expand__esc { display: inline-flex; align-items: center; gap: var(--sp-2); }\r\n .orr-expand__esc { color: var(--ink-3); font-size: var(--fs-meta); }\r\n `,\r\n ],\r\n template: `\r\n @if (ctx(); as c) {\r\n <orr-dialog-shell size=\"xl\" [heading]=\"c.title\">\r\n <ng-container orrDialogTitle>\r\n @if (file(); as f) {\r\n <span class=\"orr-expand__where\" data-testid=\"expand-path\">{{ f.path }}</span>\r\n <span class=\"orr-expand__pos\" data-testid=\"expand-pos\">{{ c.review.position() }}</span>\r\n }\r\n </ng-container>\r\n <button orrDialogActions type=\"button\" class=\"o-btn o-btn--outline o-btn--sm\" title=\"Previous file · [\" (click)=\"c.review.stepFile(-1)\">\r\n <orr-icon name=\"chevron-up\" size=\"sm\" />File<orr-kbd keys=\"[\" [inline]=\"true\" />\r\n </button>\r\n <button orrDialogActions type=\"button\" class=\"o-btn o-btn--outline o-btn--sm\" title=\"Next file · ]\" (click)=\"c.review.stepFile(1)\">\r\n <orr-icon name=\"chevron-down\" size=\"sm\" />File<orr-kbd keys=\"]\" [inline]=\"true\" />\r\n </button>\r\n <button orrDialogActions type=\"button\" class=\"o-btn o-btn--outline o-btn--sm\" title=\"Previous change · P\" (click)=\"c.review.stepChange(-1)\">\r\n <orr-icon name=\"arrow-up\" size=\"sm\" />Change<orr-kbd keys=\"P\" [inline]=\"true\" />\r\n </button>\r\n <button orrDialogActions type=\"button\" class=\"o-btn o-btn--outline o-btn--sm\" title=\"Next change · N\" (click)=\"c.review.stepChange(1)\">\r\n <orr-icon name=\"arrow-down\" size=\"sm\" />Change<orr-kbd keys=\"N\" [inline]=\"true\" />\r\n </button>\r\n <div class=\"orr-expand\">\r\n <orr-filetree [files]=\"c.review.files()\" [selected]=\"file()?.path ?? null\" (fileOpen)=\"c.review.select($event)\"\r\n [mode]=\"c.review.mode()\" (modeChange)=\"c.review.mode.set($event)\" />\r\n @if (file(); as f) {\r\n <div class=\"orr-expand__file\">\r\n <div class=\"orr-expand__head\" data-testid=\"expand-file-head\">\r\n <div class=\"orr-expand__facts\">\r\n <span style=\"color:var(--ink-3)\">{{ hunk() }}</span>\r\n <span [style.color]=\"stateInk(f.status)\">{{ stateWord(f.status) }}</span>\r\n @if (stat().add) { <span style=\"color:var(--code-add-ink)\">+{{ stat().add }}</span> }\r\n @if (stat().del) { <span style=\"color:var(--code-del-ink)\">−{{ stat().del }}</span> }\r\n </div>\r\n <div class=\"orr-expand__path\"><orr-icon name=\"file\" [size]=\"13\" /><span>{{ f.path }}</span></div>\r\n </div>\r\n @if (f.before !== undefined && f.after !== undefined) {\r\n <!-- the panel's Monaco, the current change brought to the centre -->\r\n <orr-monaco-diff [before]=\"f.before\" [after]=\"f.after\" [path]=\"f.path\" [reveal]=\"revealLine()\"\r\n [commentable]=\"c.commentable\" [notes]=\"notesFor(c, f.path)\" (comment)=\"c.onComment($event)\" />\r\n } @else if (f.reading) {\r\n <orr-monaco-diff [path]=\"f.path\" loading />\r\n } @else {\r\n <orr-diff [lines]=\"f.lines\" [file]=\"f.path\" whole [fileHead]=\"false\" [keys]=\"false\" [current]=\"c.review.currentLine()\"\r\n [commentable]=\"c.commentable\" [commentLabel]=\"c.commentLabel ?? 'Comment on'\" [notes]=\"notesFor(c, f.path)\"\r\n [emptyText]=\"c.emptyText?.(f.path) ?? 'No changes'\" (comment)=\"c.onComment($event)\" />\r\n }\r\n </div>\r\n }\r\n </div>\r\n <span orrDialogFoot class=\"orr-expand__legend\">\r\n <span><orr-kbd keys=\"N\" /><orr-kbd keys=\"P\" /> next / previous change, across files</span>\r\n <span><orr-kbd keys=\"]\" /><orr-kbd keys=\"[\" /> next / previous file</span>\r\n @if (c.commentable) { <span>click a line number to comment</span> }\r\n </span>\r\n <span orrDialogFoot class=\"orr-expand__esc\"><orr-kbd keys=\"Esc\" /> back to where you were</span>\r\n </orr-dialog-shell>\r\n }\r\n `,\r\n})\r\nexport class OrrChangesExpandComponent {\r\n readonly ctx = signal<ChangesExpandContext | null>(null);\r\n readonly file = computed(() => this.ctx()?.review.current() ?? null);\r\n readonly stat = computed(() => diffStat(this.file()?.lines ?? []));\r\n /** The whole file as one hunk: `@@ -1,old +1,new @@`. */\r\n readonly hunk = computed(() => {\r\n const ls = this.file()?.lines ?? [];\r\n const old = ls.filter((l) => l.t === \"ctx\" || l.t === \"del\").length;\r\n const neu = ls.filter((l) => l.t === \"ctx\" || l.t === \"add\").length;\r\n return `@@ -1,${old} +1,${neu} @@`;\r\n });\r\n /** The current change as a new-side line, for Monaco. */\r\n readonly revealLine = computed(() => {\r\n const i = this.ctx()?.review.currentLine() ?? -1;\r\n return i < 0 ? null : newSideLine(this.file()?.lines ?? [], i);\r\n });\r\n readonly ref = inject(KjDialogRef, { optional: true });\r\n\r\n protected notesFor(c: ChangesExpandContext, path: string): readonly number[] {\r\n const n = typeof c.notes === \"function\" ? c.notes() : c.notes;\r\n return n[path] ?? [];\r\n }\r\n\r\n protected stateWord(s: string | undefined): string {\r\n return STATE_WORD[s || \"M\"] ?? \"Modified\";\r\n }\r\n\r\n protected stateInk(s: string | undefined): string {\r\n return s === \"A\" ? \"var(--vcs-added)\" : s === \"D\" ? \"var(--vcs-deleted)\" : s === \"R\" ? \"var(--vcs-renamed)\" : \"var(--vcs-modified)\";\r\n }\r\n\r\n bind(ctx: ChangesExpandContext): void {\r\n this.ctx.set(ctx);\r\n }\r\n\r\n onKey(e: KeyboardEvent): void {\r\n const c = this.ctx();\r\n if (!c || e.ctrlKey || e.metaKey || e.altKey || isTyping(e)) return;\r\n const k = e.key.toLowerCase();\r\n if (k === \"n\" || k === \"j\") c.review.stepChange(1);\r\n else if (k === \"p\" || k === \"k\") c.review.stepChange(-1);\r\n else if (k === \"]\") c.review.stepFile(1);\r\n else if (k === \"[\") c.review.stepFile(-1);\r\n else return;\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n Injector,\r\n booleanAttribute,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n untracked,\r\n viewChild,\r\n} from \"@angular/core\";\r\nimport { KjDialogService } from \"@kouji-ui/core\";\r\n\r\nimport { diffStat } from \"../diff/diff-model\";\r\nimport { type DiffComment, OrrDiffComponent } from \"../diff/diff.component\";\r\nimport { OrrMonacoDiffComponent } from \"../code/monaco-diff.component\";\r\nimport { OrrIconComponent } from \"../icon/icon.component\";\r\nimport { OrrChangesExpandComponent, isTyping } from \"./changes-expand.component\";\r\nimport { ChangesReview, type ReviewFile, sameReviewFiles } from \"./changes-review\";\r\nimport { type FileListMode, fileOrder } from \"./file-tree\";\r\nimport { OrrFileTreeComponent } from \"./file-tree.component\";\r\n\r\n/**\r\n * The widths of the changes view beside a chat (plan 08 §6): `collapsed` (hidden; the app shows a\r\n * counter), `column` (the changed-file tree), `expanded` (the tree and the selected file's diff).\r\n */\r\nexport type ChangesState = \"collapsed\" | \"column\" | \"expanded\";\r\n\r\n/** collapsed → column → expanded → collapsed (Agent mode's C / ⌥C). */\r\nexport function nextChangesState(s: ChangesState): ChangesState {\r\n return s === \"collapsed\" ? \"column\" : s === \"column\" ? \"expanded\" : \"collapsed\";\r\n}\r\n\r\n/**\r\n * `<orr-changes-panel [files]=\"files\" [(state)]=\"state\" [(selected)]=\"path\" (comment)=\"…\" />`: the\r\n * changes column both ADE modes and Cloud reuse (App-00). `column` lists the changed files;\r\n * `expanded` adds the selected file's diff beside them; Expand opens the review dialog (tree left,\r\n * whole file right). Keys, scoped to the panel: E expand; in `expanded`, N / J and P / K walk the\r\n * changes of the file and ] / [ the files; in the dialog N / P walk across files.\r\n */\r\n@Component({\r\n selector: \"orr-changes-panel\",\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [OrrFileTreeComponent, OrrDiffComponent, OrrIconComponent, OrrMonacoDiffComponent],\r\n host: {\r\n class: \"orr-changes-panel\",\r\n tabindex: \"-1\",\r\n role: \"region\",\r\n \"[attr.aria-label]\": \"heading()\",\r\n \"[attr.data-state]\": \"state()\",\r\n \"[hidden]\": \"state() === 'collapsed'\",\r\n \"(keydown)\": \"onKey($event)\",\r\n },\r\n styles: [\r\n `\r\n :host { display: flex; flex-direction: column; min-width: 0; min-height: 0; height: 100%; background: var(--panel); border-left: 1px solid var(--hair); outline: none; }\r\n :host([hidden]) { display: none; }\r\n .orr-cp__head { display: flex; align-items: center; gap: var(--sp-3); padding: var(--sp-3) var(--sp-4) var(--sp-3) var(--sp-6); flex: none; min-width: 0; }\r\n .orr-cp__title { margin-right: var(--sp-1); font-size: var(--fs-micro); text-transform: uppercase; letter-spacing: 0.12em; color: var(--ink-4); white-space: nowrap; }\r\n .orr-cp__spacer { flex: 1; min-width: 0; }\r\n .orr-cp__ico { display: grid; place-items: center; flex: none; width: 19px; height: 19px; padding: 3px; border: 0; border-radius: 4px; background: transparent; color: var(--ink-3); cursor: pointer; }\r\n .orr-cp__ico:hover:not(:disabled) { background: var(--panel-3); color: var(--ink); }\r\n .orr-cp__ico[aria-pressed=\"true\"] { color: var(--ui-ink); }\r\n .orr-cp__ico:disabled { opacity: 0.4; cursor: default; }\r\n .orr-cp__ico:focus-visible { outline: none; box-shadow: var(--ui-ring); }\r\n .orr-cp__body { flex: 1; min-height: 0; display: grid; grid-template-columns: minmax(0, 1fr); border-top: 1px solid var(--hair); }\r\n :host([data-state=\"expanded\"]) .orr-cp__body { grid-template-columns: minmax(200px, 290px) minmax(0, 1fr); }\r\n .orr-cp__body > orr-filetree { min-height: 0; }\r\n .orr-cp__diff { display: flex; flex-direction: column; min-width: 0; min-height: 0; border-left: 1px solid var(--hair); background: var(--bg); }\r\n .orr-cp__diff-head { display: flex; align-items: center; gap: var(--sp-4); height: var(--row-h); padding: 0 var(--sp-4) 0 var(--sp-5); border-bottom: 1px solid var(--hair); background: var(--panel); font-size: var(--fs-badge); color: var(--ink-3); flex: none; }\r\n .orr-cp__path { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--ink-2); }\r\n .orr-cp__diff > orr-diff, .orr-cp__diff > orr-monaco-diff { flex: 1; min-height: 0; }\r\n `,\r\n ],\r\n template: `\r\n <div class=\"orr-cp__head\">\r\n <span class=\"orr-cp__title\">{{ heading() }}</span>\r\n <ng-content select=\"[orrPanelHead]\" />\r\n <span class=\"orr-cp__spacer\"></span>\r\n <button type=\"button\" class=\"orr-cp__ico\" data-testid=\"cp-wide\" [attr.aria-pressed]=\"state() === 'expanded'\" [attr.aria-label]=\"wideLabel()\" [attr.title]=\"wideLabel()\" (click)=\"toggleWide()\">\r\n <orr-icon name=\"panel-right\" [size]=\"13\" />\r\n </button>\r\n <button type=\"button\" class=\"orr-cp__ico\" data-testid=\"cp-expand\" aria-label=\"Expand · E\" title=\"Expand · E\" [disabled]=\"!list().length\" (click)=\"openExpand()\">\r\n <orr-icon name=\"maximize\" [size]=\"13\" />\r\n </button>\r\n <button type=\"button\" class=\"orr-cp__ico\" data-testid=\"cp-collapse\" aria-label=\"Collapse changes\" title=\"Collapse changes\" (click)=\"collapse()\">\r\n <orr-icon name=\"x\" [size]=\"13\" />\r\n </button>\r\n </div>\r\n <div class=\"orr-cp__body\">\r\n <orr-filetree [files]=\"list()\" [heading]=\"treeHeading()\" [selected]=\"state() === 'expanded' ? current()?.path ?? null : null\"\r\n [mode]=\"mode()\" (modeChange)=\"mode.set($event)\" (fileOpen)=\"pick($event)\" />\r\n @if (state() === 'expanded') {\r\n @if (current(); as f) {\r\n <div class=\"orr-cp__diff\">\r\n <div class=\"orr-cp__diff-head\" data-testid=\"cp-file-bar\">\r\n <span class=\"orr-cp__path\" [attr.title]=\"f.path\">{{ f.path }}</span>\r\n <button type=\"button\" class=\"o-btn o-btn--outline o-btn--sm\" (click)=\"openExpand()\" title=\"Expand · E\">Expand</button>\r\n @if (openable()) {\r\n <button type=\"button\" class=\"o-btn o-btn--outline o-btn--sm\" (click)=\"openFile.emit(f.path)\" title=\"Open file · O\">Open file</button>\r\n }\r\n </div>\r\n @if (f.before !== undefined && f.after !== undefined) {\r\n <!-- both sides known: IDE mode's diff (Monaco), unchanged regions folded, opened on the first change -->\r\n <orr-monaco-diff [before]=\"f.before\" [after]=\"f.after\" [path]=\"f.path\" [commentable]=\"commentable()\" [notes]=\"notesFor(f.path)\" (comment)=\"comment.emit($event)\" />\r\n } @else if (f.reading) {\r\n <orr-monaco-diff [path]=\"f.path\" loading />\r\n } @else {\r\n <orr-diff [lines]=\"f.lines\" [file]=\"f.path\" [fileHead]=\"false\" [(current)]=\"currentChange\" [commentable]=\"commentable()\"\r\n [commentLabel]=\"commentLabel()\" [notes]=\"notesFor(f.path)\" [emptyText]=\"emptyFor(f.path)\" (comment)=\"comment.emit($event)\" />\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n `,\r\n})\r\nexport class OrrChangesPanelComponent {\r\n readonly files = input<readonly ReviewFile[]>([]);\r\n readonly state = model<ChangesState>(\"column\");\r\n /** The file shown in `expanded` (and where the dialog opens). */\r\n readonly selected = model<string | null>(null);\r\n readonly mode = model<FileListMode>(\"tree\");\r\n readonly heading = input(\"Changes\");\r\n readonly treeHeading = input(\"Changed\");\r\n /** The dialog's title, e.g. `Review · stripe-retry`. */\r\n readonly reviewTitle = input(\"Review changes\");\r\n readonly commentable = input(false, { transform: booleanAttribute });\r\n /** The host can open a file (an editor, a browser): the diff bar offers Open file (`openFile`). */\r\n readonly openable = input(true, { transform: booleanAttribute });\r\n /** What the diff says for a file with no lines (e.g. changed by a command, so no diff reached the client). */\r\n readonly emptyText = input(\"No changes\");\r\n /** Per-file empty text (e.g. \"Reading the diff…\" while a host still loads it); falls back to `emptyText`. */\r\n readonly emptyTextFor = input<((path: string) => string | null) | null>(null);\r\n /** The comment box label before `path:Lnn`, e.g. `Comment for stripe-retry on`. */\r\n readonly commentLabel = input(\"Comment on\");\r\n /** The key that cycles the panel in the host (e.g. `⌥C`), appended to the wide toggle's title. */\r\n readonly cycleKey = input(\"\");\r\n /** Commented line numbers per path (shown as \"in review\"). */\r\n readonly notes = input<Readonly<Record<string, readonly number[]>>>({});\r\n readonly comment = output<DiffComment>();\r\n readonly openFile = output<string>();\r\n\r\n /** The Expand dialog is open. */\r\n readonly expandOpen = signal(false);\r\n readonly currentChange = signal(-1);\r\n private readonly diff = viewChild(OrrDiffComponent);\r\n private readonly dialog = inject(KjDialogService);\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n private readonly injector = inject(Injector);\r\n\r\n /** `files`, held while a new array carries the same files and lines: a host's poll or stream frame re-renders nothing. */\r\n readonly list = computed(() => this.files(), { equal: sameReviewFiles });\r\n /** File paths in list order. */\r\n readonly order = computed(() => fileOrder(this.list(), this.mode()));\r\n /** The shown file: the selection, else the first in list order. */\r\n readonly current = computed<ReviewFile | null>(\r\n () => {\r\n const fs = this.list();\r\n const s = this.selected();\r\n return fs.find((f) => f.path === s) ?? fs.find((f) => f.path === this.order()[0]) ?? null;\r\n },\r\n { equal: (a, b) => a === b || (!!a && !!b && sameReviewFiles([a], [b])) },\r\n );\r\n readonly stat = computed(() => diffStat(this.current()?.lines ?? []));\r\n readonly wideLabel = computed(() => (this.state() === \"expanded\" ? \"Narrow to the file list\" : \"Show the diff beside the files\") + (this.cycleKey() ? \" · \" + this.cycleKey() : \"\"));\r\n /** The review the Expand dialog walks while it is open: it follows `files` (diffs a host reads late land in it). */\r\n private readonly review = signal<ChangesReview | null>(null);\r\n /** The files the Expand dialog shows, from the current one on (null while it is closed): a host reading diffs lazily reads these. */\r\n readonly reviewing = computed<string[] | null>(() => {\r\n const r = this.review();\r\n if (!r) return null;\r\n const o = r.ordered().map((f) => f.path);\r\n const i = Math.max(0, o.indexOf(r.current()?.path ?? \"\"));\r\n return [...o.slice(i), ...o.slice(0, i)];\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const fs = this.list();\r\n untracked(() => this.review()?.files.set(fs));\r\n });\r\n }\r\n\r\n protected emptyFor(path: string): string {\r\n return this.emptyTextFor()?.(path) ?? this.emptyText();\r\n }\r\n\r\n protected notesFor(path: string): readonly number[] {\r\n return this.notes()[path] ?? [];\r\n }\r\n\r\n toggleWide(): void {\r\n this.state.set(this.state() === \"expanded\" ? \"column\" : \"expanded\");\r\n }\r\n\r\n collapse(): void {\r\n this.state.set(\"collapsed\");\r\n }\r\n\r\n /** collapsed → column → expanded → collapsed. */\r\n cycle(): void {\r\n this.state.set(nextChangesState(this.state()));\r\n }\r\n\r\n /** A file picked in the list: show its diff beside the list. */\r\n pick(path: string): void {\r\n this.selectFile(path);\r\n if (this.state() !== \"expanded\") this.state.set(\"expanded\");\r\n }\r\n\r\n selectFile(path: string): void {\r\n this.selected.set(path);\r\n this.currentChange.set(-1);\r\n }\r\n\r\n /** Next / previous file in list order, wrapping. */\r\n stepFile(dir: 1 | -1): void {\r\n const o = this.order();\r\n if (!o.length) return;\r\n const i = o.indexOf(this.current()?.path ?? \"\");\r\n this.selectFile(o[(i + dir + o.length) % o.length]!);\r\n }\r\n\r\n /** Opens the review dialog on the shown file; closing it keeps the file it ended on. */\r\n openExpand(): void {\r\n const fs = this.list();\r\n if (!fs.length || this.expandOpen()) return;\r\n const review = new ChangesReview(fs, this.mode(), this.current()?.path ?? null);\r\n this.review.set(review);\r\n const ref = this.dialog.open(OrrChangesExpandComponent, { closeOnEsc: true });\r\n ref.instance.bind({\r\n review,\r\n title: this.reviewTitle(),\r\n commentable: this.commentable(),\r\n commentLabel: this.commentLabel(),\r\n notes: this.notes,\r\n emptyText: (p) => this.emptyFor(p),\r\n onComment: (c) => this.comment.emit(c),\r\n });\r\n this.expandOpen.set(true);\r\n // `state`, not `afterClosed$`: kouji only fires that on `ref.close()`, so Esc and the scrim left the panel thinking it was still open.\r\n const watch = effect(\r\n () => {\r\n if (ref.state() !== \"closed\") return;\r\n watch.destroy();\r\n untracked(() => {\r\n this.expandOpen.set(false);\r\n this.review.set(null);\r\n const at = review.current();\r\n if (at) this.selectFile(at.path);\r\n this.mode.set(review.mode());\r\n this.host.focus?.({ preventScroll: true });\r\n });\r\n },\r\n { injector: this.injector },\r\n );\r\n }\r\n\r\n onKey(e: KeyboardEvent): void {\r\n if (e.ctrlKey || e.metaKey || e.altKey || isTyping(e)) return;\r\n const k = e.key.toLowerCase();\r\n const expanded = this.state() === \"expanded\";\r\n if (k === \"e\") this.openExpand();\r\n else if (expanded && k === \"]\") this.stepFile(1);\r\n else if (expanded && k === \"[\") this.stepFile(-1);\r\n else if (expanded && (k === \"n\" || k === \"j\")) this.diff()?.step(1);\r\n else if (expanded && (k === \"p\" || k === \"k\")) this.diff()?.step(-1);\r\n else return;\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n}\r\n"],"mappings":"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"}
|