Guides
Navigation
Feedback
Overlays
Layout
Data Display
Forms
.md

Layout

sidebar

Composable, collapsible application sidebar with mobile off-canvas, icon mode, and keyboard toggle.

Installation

php artisan ui:add sidebar

Usage

{{-- open sets the starting state; after that a cookie and Ctrl/Cmd-B win --}}
<x-ui.sidebar.provider :open="false">
    <x-ui.sidebar collapsible="offcanvas">
        <x-ui.sidebar.header>
            <x-ui.sidebar.menu>
                <x-ui.sidebar.menu-item>
                    <x-ui.sidebar.menu-button size="lg" href="/">Acme</x-ui.sidebar.menu-button>
                </x-ui.sidebar.menu-item>
            </x-ui.sidebar.menu>
        </x-ui.sidebar.header>

        <x-ui.sidebar.content>
            <x-ui.sidebar.group>
                <x-ui.sidebar.group-label>Platform</x-ui.sidebar.group-label>
                <x-ui.sidebar.menu>
                    @foreach ($links as $link)
                        <x-ui.sidebar.menu-item>
                            <x-ui.sidebar.menu-button :href="$link['href']" :tooltip="$link['label']"
                                :is-active="request()->is(ltrim($link['href'], '/'))">
                                {{ $link['label'] }}
                            </x-ui.sidebar.menu-button>
                        </x-ui.sidebar.menu-item>
                    @endforeach
                </x-ui.sidebar.menu>
            </x-ui.sidebar.group>
        </x-ui.sidebar.content>
    </x-ui.sidebar>

    <x-ui.sidebar.inset>
        <x-ui.sidebar.trigger />
        {{ $slot }}
    </x-ui.sidebar.inset>
</x-ui.sidebar.provider>

Ships its own inline <script>; no JS dependencies (the mobile off-canvas is a native <dialog>). Wrap everything in <x-ui.sidebar.provider>; place <x-ui.sidebar> (with side=left|right, collapsible=icon|offcanvas|none) and your page content in <x-ui.sidebar.inset>. State (expand/collapse) persists to a `sidebar_state` cookie and toggles with Ctrl/Cmd-B. Self-contained: composes no other registry components.

Props

Every prop with its default. Pass any of them as attributes, using : to bind a PHP value.

@props([
    'open' => true,
])