{{-- M3 Expressive's navigation rail: destinations down the start edge of a medium or wider window, collapsed (96px, icon over label) or expanded (icon beside label in a full-width pill).
Mail
`mode` says what decides its width: - `collapsed` — always collapsed; `expanded` — always expanded. - `collapsible` (the default) — the visitor's choice: expanded until the menu button collapses it. The choice is `$store.rail`, remembered in localStorage and applied by before the first paint (), so the rail never paints wide and snaps shut. - `modal` — collapsed in the layout; the menu button (or `$store.rail.show()` from anywhere) opens it expanded over a scrim, holding focus until Escape, the scrim, the menu button or leaving the page closes it (Compose's ModalWideNavigationRail). - `adaptive` — what `` uses: below `sm` nothing until `$store.rail.show()` slides it in as a modal; from `sm` collapsed, opening as a modal; from `lg` collapsible. Slots: `brand` beside the menu button, only while expanded; `header` under it — a FAB, drawn as an extended FAB when expanded (`rail-collapsed:` below); the destinations in the default slot, which alone scroll when the window is too short; `footer`, pinned to the foot. Header and footer never scroll, so nothing in them is cut off by the scroller's edge. Anything inside can take both shapes with the `rail-collapsed:` variant, which applies while the rail is drawn collapsed for whatever reason: `` ``. Nothing that shows while collapsed may be wider than 96px. Props: `label` names the landmark ("Main"); `width` is the expanded width (`16rem`, held between M3's 220 and 360dp); `menu` shows the menu button (by default for `collapsible`, `modal` and `adaptive`). The rail does not scroll with the page: in a flex row it sticks to the top of the viewport, as tall as the viewport at most. Values from androidx Compose Material 3 (Apache-2.0), androidx-main 27cf9a7d5788aa0f5f2d8b6699ce279560daf326: NavigationRailCollapsedTokens.kt, NavigationRailExpandedTokens.kt, NavigationRailBaselineItemTokens.kt and WideNavigationRail.kt under https://github.com/androidx/androidx/tree/androidx-main/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3 — surface (surface-container and elevation 2 with a large inner corner when modal), 44px above the header and 40px under it, 4px between collapsed items. The styles are resources/css/components/navigation.css; the behaviour resources/js/navigation.js. --}} @props([ 'mode' => 'collapsible', 'label' => null, 'width' => '16rem', 'menu' => null, ]) @php $mode = in_array($mode, ['collapsed', 'expanded', 'collapsible', 'modal', 'adaptive'], true) ? $mode : 'collapsible'; $interactive = in_array($mode, ['collapsible', 'modal', 'adaptive'], true); $canOpen = in_array($mode, ['modal', 'adaptive'], true); $menu ??= $interactive; $collapsedAtFirst = in_array($mode, ['collapsed', 'modal'], true); @endphp
merge(['style' => "--navigation-rail-width: {$width}"]) }} > @if ($canOpen) @endif