DRYL v0.1 · WIP
1.0.0-rc.1
Layout

App Shell

The application chrome: DrylLayout wires a DrylAppBar, a DrylDrawer sidebar and DrylMainContent into a single CSS-grid shell. The app bar exposes Start / Center / End slots and a Raised elevation; the drawer adds operating modes (Auto / Static / Collapsible / Pinnable / Flyout) and an icon-rail collapse that reflows the body. This very website runs on it.

App bar — slots & elevation

DRYL v0.1
Dashboard
JD

Collapsible sidebar shell

DrylLayout coordinates the app-bar toggle with the drawer's collapsed state — the grid column animates to an icon rail and back.

Acme
AC

Content

Sidebar is expanded. Use the chevron button in the app bar to toggle it.

Sidebar modes

DrylDrawer.Mode selects how the sidebar occupies space. Auto (default) is an in-flow column on desktop and a flyout overlay on mobile. Static is always a column. Collapsible adds the icon-rail toggle shown above. Pinnable persists that collapsed state to localStorage. Flyout always overlays the content, trapping focus and closing on Esc or backdrop click.

html
@* Pinnable: collapsed state survives a page reload. *@
<DrylDrawer Mode="SidebarMode.Pinnable" PersistStateKey="dryl.nav" @bind-Collapsed="navCollapsed">
    <Header><AppBrand /></Header>
    <Content>
        <DrylNavGroup Title="Library">
            <DrylNavLink Href="" Icon="Home" Match="NavLinkMatch.All">Overview</DrylNavLink>
        </DrylNavGroup>
    </Content>
    <Footer><DrylNavLink Href="settings" Icon="Settings">Settings</DrylNavLink></Footer>
</DrylDrawer>

@* Flyout: always an overlay; Esc / backdrop close it, focus is trapped. *@
<DrylDrawer Mode="SidebarMode.Flyout" @bind-Open="navOpen">
    <DrylNavGroup Title="Menu">
        <DrylNavLink Href="profile" Icon="User">Profile</DrylNavLink>
    </DrylNavGroup>
</DrylDrawer>
An unhandled error has occurred. Reload x

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.