ci / rust (push) Successful in 5m46s
Render the content pane as tabs of nested split trees, each session leaf a live attach mounted through the multi-mount pool: - #30 arbitrarily-nested H/V splits with mouse-resizable dividers; per-pane ⏻/▥/▤/✕ tools; closing a pane collapses its parent split. - #31 tabs, each holding its own tree; add / switch / close. - #32 drag-to-dock: drag a pane title or a sidebar session onto a pane for a 5-zone dock (edges split, centre swaps/replaces); a sidebar drag moves an already-open session. - #33 focused pane at full strength, others dim; sidebar shows focused (loud) vs open-elsewhere (quiet) with a stable per-session colour mapping rows to panes. Opening a session fills the focused pane (single-pane parity by default); multi-pane is opt-in via split / drag / tabs. Panes auto-close when their session ends (guarded against eviction and intentional close). The steady "connected" label is hidden as noise. Closes #30, #31, #32, #33. Part of epic #37. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
24 lines
843 B
TypeScript
24 lines
843 B
TypeScript
// Stable per-session accent colour, used to map a sidebar row to the pane
|
|
// showing that session (issue #33). Hash the session id into a fixed OKLCH
|
|
// palette tuned to the maestro tokens; collisions are tolerated when there are
|
|
// more open sessions than hues — the colour is a hint, not an identity.
|
|
|
|
import type { Uuid } from "./types.js";
|
|
|
|
const PALETTE = [
|
|
"oklch(0.80 0.13 152)", // green (the house accent)
|
|
"oklch(0.80 0.12 90)", // amber
|
|
"oklch(0.76 0.13 30)", // coral
|
|
"oklch(0.78 0.11 210)", // teal
|
|
"oklch(0.74 0.13 265)", // blue
|
|
"oklch(0.76 0.14 320)", // magenta
|
|
"oklch(0.80 0.11 60)", // gold
|
|
"oklch(0.78 0.12 185)", // cyan
|
|
];
|
|
|
|
export function sessionColor(id: Uuid): string {
|
|
let h = 0;
|
|
for (let i = 0; i < id.length; i++) h = (h * 31 + id.charCodeAt(i)) >>> 0;
|
|
return PALETTE[h % PALETTE.length];
|
|
}
|