Sidebar / nav rail
dizyx · nockerl-design
Streaming · 2 tools running
nockerl-design · docs site
Designing the sidebar to the token-reactive standard.
Expanded · viewing nockerl-design · docs site. Tab in, arrow-key the rows, expand Tasks, collapse to the rail. The sidebar stays in the layout. The island is live.
Parameters
Section titled “Parameters”The sidebar is the persistent, in-layout nav column, the inline role of the ONE
nav-surface: NockerlNavSurface (= NockerlDrawer) is a single edge-anchored surface with
mode: inline | overlay. inline is this persistent rail; overlay is the
drawer (a scrim panel that opens / closes). App shell
composes ONE nav-surface, not two. The sidebar never floats over content and never dims it. Its
rail chrome (grouped sections, collapse-to-rail, footer) is the reference inline nav content,
and the shell-level convergence lands with App shell.
Platforms are allowed to diverge while the migration runs. What follows is the honest state today, not a defect list.
- Selection reads by outline on every platform. Accent border, accent ink, and the leading icon, with no wash, no left rail, and no stripe (law §6). Both the Swift row and the web row now carry it; the soft cyan wash the web once used is gone.
- Hover on an already-selected row differs on purpose. Swift answers nothing: on macOS a selected sidebar row is inert under the pointer, Voice ships that, and it is approved. The web brightens the row’s existing cyan edge to full strength instead, because a pointer-first surface that answers nothing on hover reads as disabled. It reuses the channel selection already owns rather than adding a wash, so law §6 still holds, and a border colour is interpolatable, so law §7 does too. This is the platform behaviour honoured per law §9, not drift: the learning transfers, the macOS habit does not.
- Android has no side rail. Voice and web use a vertical sidebar; Android’s persistent
nav is top chrome (project + session rows that collapse up under the title bar).
A
NavigationRail/PermanentNavigationDraweris not used today. - Collapse: web collapses to an icon-only rail (with tooltips). The Swift panel is
a fixed
containerXswidth with no rail, and Android collapses the chrome upward, not sideways. Collapse is framework-original and has not shipped on Swift. - Grouped sections, sub-items, counts, and the profile footer are framework-original. None has shipped on Swift, whose sidebar is a flat list of five destinations. They are kept here as the reference web pattern, not reported as harvested from a shipping app.
- Scope differs. The Swift sidebar belongs to one window, not to the app: Voice is menu-bar-first, and a native status-item menu remains after the window closes. That menu is a macOS affordance the framework does not model, and the web has no equivalent.
- Keyboard support does not transfer. The Swift rows leave the focus chain and have no
arrow-key traversal, which is defensible on macOS and prohibited on the web. See the
Swift
focusrow above.