Add M2 splits-tree layout

- src/lib/layout/tree.ts: pure helpers + types (newLeaf, splitLeaf,
  closeLeaf, replaceById, serialize/deserialize with shape-checking).
- SplitNode.svelte: flex container with pointer-captured gutter drag.
- LeafPane.svelte: per-pane toolbar (split-right ⇥, split-down ⇣,
  close ×) over the existing XtermPane.
- Pane.svelte: recursive dispatcher between SplitNode and LeafPane,
  keyed on leaf.id so swaps unmount XtermPane cleanly (kills PTY).
- App.svelte: tree-as-state with split/close handlers, auto-save to
  localStorage on every \$effect tick. Titlebar shows clickable distro
  buttons setting the default for new panes; existing panes keep theirs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
megaproxy 2026-05-22 12:44:35 +01:00
parent 9beab64e00
commit efcdf6a9ce
7 changed files with 531 additions and 59 deletions

36
src-tauri/Cargo.lock generated
View file

@ -3436,6 +3436,24 @@ dependencies = [
"cfg-if",
]
[[package]]
name = "tiletopia"
version = "0.0.1"
dependencies = [
"anyhow",
"base64 0.22.1",
"once_cell",
"parking_lot",
"portable-pty",
"serde",
"serde_json",
"tauri",
"tauri-build",
"tokio",
"tracing",
"tracing-subscriber",
]
[[package]]
name = "time"
version = "0.3.47"
@ -4730,24 +4748,6 @@ dependencies = [
"x11-dl",
]
[[package]]
name = "wsl-mux-spike"
version = "0.0.1"
dependencies = [
"anyhow",
"base64 0.22.1",
"once_cell",
"parking_lot",
"portable-pty",
"serde",
"serde_json",
"tauri",
"tauri-build",
"tokio",
"tracing",
"tracing-subscriber",
]
[[package]]
name = "x11"
version = "2.21.0"