ShellUI Logo
ShellUI

Drawer

Bottom/side drawer panel with new DrawerTrigger and DrawerContent subcomponents.

v0.3.0-alpha.2 adds DrawerTrigger and DrawerContent subcomponents. Side is set on <Drawer> itself. You can also bind @bind-Open to control open state externally — useful when you need a close button inside the content.

What changed from v0.2.x

v0.2.1v0.3.0-alpha.2
External IsOpen + button required<DrawerTrigger> lives inside <Drawer>
Manual open state fieldState fully encapsulated (or opt-in via @bind-Open)

Installation

shellui add drawer

Usage

Basic

<Drawer Side="DrawerSide.Bottom">
    <DrawerTrigger>
        <Button Variant="ButtonVariant.Outline">Open Drawer</Button>
    </DrawerTrigger>
    <DrawerContent>
        <div class="p-4 space-y-4">
            <h3 class="text-lg font-semibold">Cart</h3>
            <p class="text-sm text-muted-foreground">Your cart is empty.</p>
            <Button Class="w-full">Continue Shopping</Button>
        </div>
    </DrawerContent>
</Drawer>

With external open control (@bind-Open)

Use @bind-Open when you need a close button inside the content, or to control the drawer from outside:

<Drawer @bind-Open="_drawerOpen" Side="DrawerSide.Bottom">
    <DrawerTrigger>
        <Button Variant="ButtonVariant.Outline">Open Drawer</Button>
    </DrawerTrigger>
    <DrawerContent>
        <h4 class="font-semibold">Drawer Title</h4>
        <p class="text-sm text-muted-foreground">Drawer content here.</p>
        <Button @onclick="() => _drawerOpen = false">Close</Button>
    </DrawerContent>
</Drawer>

@code {
    private bool _drawerOpen = false;
}

Side variants

<Drawer Side="DrawerSide.Right">
    <DrawerTrigger><Button>Open Right</Button></DrawerTrigger>
    <DrawerContent><p>Slides from the right.</p></DrawerContent>
</Drawer>

API Reference

<Drawer>

ParameterTypeDefaultDescription
SideDrawerSideBottomWhich edge the drawer slides from
OpenboolfalseBind with @bind-Open to control open state externally
OpenChangedEventCallback<bool>Fires when open state changes
ChildContentRenderFragmentDrawerTrigger + DrawerContent

<DrawerTrigger>

ParameterTypeDefaultDescription
ChildContentRenderFragmentTrigger button content

<DrawerContent>

ParameterTypeDefaultDescription
ChildContentRenderFragmentDrawer body content

DrawerSide enum

Top · Bottom · Left · Right

On this page