The Drawer
component is a panel that slides out from the edge of the screen.
It can be useful when you need users to complete a task or view some details
without leaving the current page.
The Drawer can appear from any edge of the screen. Pass the placement
prop and
set it to top
, right
, bottom
, or left
.
When a form is in the drawer, you might need to set focus on a specific element
when the drawer opens. Pass the initialFocusRef
prop.
Without the
initialFocusRef
prop, the drawer will set focus on the first focusable element when it opens.
Pass the size
prop if you need to adjust the size of the drawer. Values can be
xs
, sm
, md
, lg
, xl
, or full
.
If you need to put a form within the Drawer, you might need to use to form
validation library like react-hook-form
or formik
. Here's the recommended
way to do it:
Because the button is located outside the form, you can leverage its native HTML
form
attrbute and refer to theid
of theform
.
initialFocusRef
prop is passed, the drawer sets focus on the element with
the assigned ref
.Drawer
composes the Modal
component with these extra props:
Name | Type | Description | Default |
---|---|---|---|
isOpen | boolean | If `true`, the modal when be opened. | - |
onClose | () => void | Callback invoked to close the modal. | - |
allowPinchZoom | boolean | Handle zoom/pinch gestures on iOS devices when scroll locking is enabled. Defaults to `false`. | - |
autoFocus | boolean | If `true`, the modal will autofocus the first enabled and interactive element within the `ModalContent` | true |
blockScrollOnMount | boolean | If `true`, scrolling will be disabled on the `body` when the modal opens. | true |
closeOnEsc | boolean | If `true`, the modal will close when the `Esc` key is pressed | true |
closeOnOverlayClick | boolean | If `true`, the modal will close when the overlay is clicked | true |
colorScheme | string | - | |
finalFocusRef | RefObject<FocusableElement> | The `ref` of element to receive focus when the modal closes. | - |
getContainer | (() => HTMLElement | null) | Function that will be called to get the parent element that the modal will be attached to. | - |
id | string | The `id` of the modal | - |
initialFocusRef | RefObject<FocusableElement> | The `ref` of element to receive focus when the modal opens. | - |
isCentered | boolean | If `true`, the modal will be centered on screen. | false |
isFullHeight | boolean | If `true` and drawer's placement is `top` or `bottom`, the drawer will occupy the viewport height (100vh) | - |
motionPreset | "scale" | "slideInBottom" | "slideInRight" | The transition that should be used for the modal | - |
onEsc | (() => void) | Callback fired when the escape key is pressed and focus is within modal | - |
onOverlayClick | (() => void) | Callback fired when the overlay is clicked. | - |
orientation | "horizontal" | "vertical" | - | |
placement | "bottom" | "left" | "right" | "top" | The placement of the drawer | - |
preserveScrollBarGap | boolean | If `true`, a `padding-right` will be applied to the body element that's equal to the width of the scrollbar. This can help prevent some unpleasant flickering effect and content adjustment when the modal opens | - |
returnFocusOnClose | boolean | If `true`, the modal will return focus to the element that triggered it when it closes. | true |
scrollBehavior | "inside" | "outside" | Where scroll behavior should originate. - If set to `inside`, scroll only occurs within the `ModalBody`. - If set to `outside`, the entire `ModalContent` will scroll within the viewport. | "outside" |
size | string | - | |
styleConfig | Record<string, any> | - | |
trapFocus | boolean | If `false`, focus lock will be disabled completely. This is useful in situations where you still need to interact with other surrounding elements. 🚨Warning: We don't recommend doing this because it hurts the accessibility of the modal, based on WAI-ARIA specifications. | true |
useInert | boolean | A11y: If `true`, the siblings of the `modal` will have `aria-hidden` set to `true` so that screen readers can only see the `modal`. This is commonly known as making the other elements **inert** | true |
variant | string | - |
DrawerOverlay
, DrawerFooter
, DrawerHeader
and DrawerBody
composes
Box
componentDrawerCloseButton
composes CloseButton