---
description: A drawer that smoothly slides in & out of the screen.
links:
- label: Drawer
icon: i-custom-reka-ui
to: https://github.com/unovue/vaul-vue
- label: GitHub
icon: i-simple-icons-github
to: https://github.com/nuxt/ui/tree/v3/src/runtime/components/Drawer.vue
---
## Usage
Use a [Button](/components/button) or any other component in the default slot of the Drawer.
Then, use the `#content` slot to add the content displayed when the Drawer is open.
::component-code
---
prettier: true
slots:
default: |
content: |
---
:u-button{label="Open" color="neutral" variant="subtle" trailing-icon="i-lucide-chevron-up"}
#content
:placeholder{class="h-48 m-4"}
::
You can also use the `#header`{lang="ts-type"}, `#body`{lang="ts-type"} and `#footer`{lang="ts-type"} slots to customize the Drawer's content.
### Title
Use the `title` prop to set the title of the Drawer's header.
::component-code
---
prettier: true
props:
title: 'Drawer with title'
slots:
default: |
body: |
---
:u-button{label="Open" color="neutral" variant="subtle" trailing-icon="i-lucide-chevron-up"}
#body
:placeholder{class="h-48"}
::
### Description
Use the `description` prop to set the description of the Drawer's header.
::component-code
---
prettier: true
ignore:
- title
props:
title: 'Drawer with description'
description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
slots:
default: |
body: |
---
:u-button{label="Open" color="neutral" variant="subtle" trailing-icon="i-lucide-chevron-up"}
#body
:placeholder{class="h-48"}
::
### Direction
Use the `direction` prop to control the direction of the Drawer. Defaults to `bottom`.
::component-code
---
prettier: true
items:
direction:
- top
- bottom
props:
direction: 'top'
slots:
default: |
content: |
---
:u-button{label="Open" color="neutral" variant="subtle" trailing-icon="i-lucide-chevron-up"}
#content
:placeholder{class="h-96 m-4"}
::
::component-code
---
prettier: true
items:
direction:
- right
- left
props:
direction: 'right'
slots:
default: |
content: |
---
:u-button{label="Open" color="neutral" variant="subtle" trailing-icon="i-lucide-chevron-up"}
#content
:placeholder{class="w-96 m-4"}
::
### Handle
Use the `handle` prop to control whether the Drawer has a handle or not. Defaults to `true`.
::component-code
---
prettier: true
props:
handle: false
slots:
default: |
content: |
---
:u-button{label="Open" color="neutral" variant="subtle" trailing-icon="i-lucide-chevron-up"}
#content
:placeholder{class="h-48 m-4"}
::
### Overlay
Use the `overlay` prop to control whether the Drawer has an overlay or not. Defaults to `true`.
::component-code
---
prettier: true
props:
overlay: false
slots:
default: |
content: |
---
:u-button{label="Open" color="neutral" variant="subtle" trailing-icon="i-lucide-chevron-up"}
#content
:placeholder{class="h-48 m-4"}
::
### Scale background
Use the `should-scale-background` prop to scale the background when the Drawer is open, creating a visual depth effect.
::component-code
---
prettier: true
props:
shouldScaleBackground: true
slots:
default: |
content: |
---
:u-button{label="Open" color="neutral" variant="subtle" trailing-icon="i-lucide-chevron-up"}
#content
:placeholder{class="h-screen m-4"}
::
::warning
Make sure to add the `vaul-drawer-wrapper` directive to a parent element of your app to make this work.
```vue [app.vue]
```
```ts [nuxt.config.ts]
export default defineNuxtConfig({
app: {
rootAttrs: {
'vaul-drawer-wrapper': '',
'class': 'bg-[var(--ui-bg)]'
}
}
})
```
::
## Examples
### Control open state
You can control the open state by using the `default-open` prop or the `v-model:open` directive.
::component-example
---
prettier: true
name: 'drawer-open-example'
---
::
::note
In this example, leveraging [`defineShortcuts`](/composables/define-shortcuts), you can toggle the Drawer by pressing :kbd{value="O"}.
::
::tip
This allows you to move the trigger outside of the Drawer or remove it entirely.
::
### With footer slot
Use the `#footer` slot to add content after the Drawer's body.
::component-example
---
prettier: true
collapse: true
name: 'drawer-footer-slot-example'
---
::
### With command palette
You can use a [CommandPalette](/components/command-palette) component inside the Drawer's content.
::component-example
---
collapse: true
name: 'drawer-command-palette-example'
---
::
## API
### Props
:component-props
### Slots
:component-slots
### Emits
:component-emits
## Theme
:component-theme