feat(maestro): wire React app as sole web entry point

Deletes the vanilla shell and mounts App.tsx on #root. main.ts and the
23 views it drove are gone; App.tsx composes the ported components —
sidebar, multi-view, command bar, spawn modal, help and restart
overlays, daemon link, drawer — around the catalog and layout stores.

The pure parts of four deleted modules moved next to the components
that still use them: the spawn-form model and spawnSimilar into
components/spawn, the transcript's markdown/format helpers and the diff
into components/structured, the help overlay's grouping into
components/dialogs. Document-level event names now live in uiEvents.ts.

Deduplicated two pairs the migration left side by side: the sidebar
uses dialogs/KillDialog and common/ContextMenu. It also listens for the
command bar's kill/rename events, which nothing had picked up since
catalog.ts went away.

styles.css stays as the token and base layer, with `#app` renamed to
`#root` and the pane-body rules re-keyed off the classes the React
panes actually carry.

Closes #253
This commit is contained in:
Miguel Palhas
2026-09-09 02:27:42 +01:00
parent ad71147bd9
commit 8a05ef2eb7
101 changed files with 855 additions and 18942 deletions
+6 -4
View File
@@ -549,8 +549,8 @@ body {
/* dim the grid via opacity on a fixed overlay would cost a node; bake it low instead */
}
#app {
/* `--app-vh` tracks the *visual* viewport (set by installViewportSizing) so
#root {
/* `--app-vh` tracks the *visual* viewport (set by useViewport) so
the shell stays above the mobile soft keyboard; falls back to the layout
viewport where `visualViewport` is unavailable. `--app-top` follows the
layout viewport's scroll under the keyboard so the shell stays pinned to
@@ -2087,7 +2087,7 @@ input.leaf-rename:focus {
bar scrolls sideways instead. Layout is always defined; only *visibility* is
gated: hidden on precise-pointer devices (a physical keyboard already has
these keys), shown on touch where the soft keyboard omits them. The shell
tracks the visual viewport (see `#app`), so it lands above it. */
tracks the visual viewport (see `#root`), so it lands above it. */
.attach-keybar {
display: none;
grid-template-columns: repeat(8, minmax(2.5rem, 1fr));
@@ -4499,7 +4499,9 @@ input.leaf-rename:focus {
min-height: 0;
display: flex;
}
.mv-pane-host > .attach {
/* Whatever body the pane holds — a terminal, a transcript, the empty state —
fills it. (Was `> .attach`, the class the vanilla attach view carried.) */
.mv-pane-host > * {
flex: 1;
min-width: 0;
min-height: 0;