Files
HealthLog/src/components/layout/shell-side-panel.tsx
T
Marc-André Bombeck d8fb922228 feat(shell): give each docked panel a fixed strip at the right edge
From 1280 px the day and, on /coach, the conversations each keep a
narrow strip at the right edge, open or not. A click on the strip opens
its panel left of the strips and a second click closes it; the strip
never moves. Strips start below the top bar's band, side by side,
conversations first. Below 1600 px one panel is open at a time.

The day slides like the conversations (width, 200 ms, none under reduced
motion), stays open through a page change instead of folding and
reopening, and does not slide in on arrival. Its content loads when a day
first opens, so the scores, sections and calendar leave the shell's first
load: every watched route falls back under its unchanged ceiling. The
aggregate cap is re-measured for the chunk double count this causes.
2026-10-09 18:22:11 +02:00

21 lines
833 B
TypeScript

"use client";
import { createShellSlot } from "./shell-slot";
/**
* A page-owned column on the right of the shell, beside the top bar and
* `<main>` rather than inside `<main>`. A panel portalled here runs the full
* height of the content row, from the top of the window (below any banner
* strip) to the bottom, and the top bar ends at its left edge instead of
* running underneath it. The docked day and the Coach's docked
* conversations live here; their strips sit right of this column
* (`shell-dock.tsx`). See `shell-slot.tsx`.
*/
const slot = createShellSlot("shell-side-panel");
/** Where the shell paints a page's side panel. Empty unless a page fills it. */
export const ShellSidePanelOutlet = slot.Outlet;
/** Render `children` into the shell's side-panel column. */
export const ShellSidePanel = slot.Portal;