Alert Dialog
AlertDialog component is used to interrupt the user with a mandatory
confirmation or action.
Import#
Chakra UI exports 7 alert dialog related components.
AlertDialog: provides context and state for the dialog.AlertDialogHeader: should contain the title announced by screen readers.AlertDialogBody: should contain the description announced by screen readers.AlertDialogFooter: should contain the actions of the dialog.AlertDialogOverlay: The dimmed overlay behind the dialog.AlertDialogContent: The wrapper for the alert dialog's content.AlertDialogCloseButton: The button that closes the dialog.
import {AlertDialog,AlertDialogBody,AlertDialogFooter,AlertDialogHeader,AlertDialogContent,AlertDialogOverlay,} from "@chakra-ui/react"
Usage#
AlertDialog requires that you provide the leastDestructiveRef prop.
Based on WAI-ARIA specifications, focus should be placed on the least destructive element when the dialog opens, to prevent users from accidentally confirming the destructive action.
Changing the transition#
The Modal comes with a scale transition by default but you can change it by
passing a motionPreset prop, and set its value to either slideInBottom,
slideInRight, or scale.
Accessibility#
AlertDialoghas rolealertdialog, andaria-modalset to true.- When the dialog opens, focus is automatically set to the least destructive element.
- When the dialog opens, the content in the
AlertDialogHeaderandAlertDialogBodyare announced by screen readers viaaria-labelledbyandaria-describedbyattributes. - Clicking on the overlay closes the
AlertDialog. - Pressing esc closes the dialog.
Props#
AlertDialog and its components compose the Modal component. The only
exception is that it requires a leastDestructiveRef which is similar to the
initialFocusRef of Modal.
| Name | Type | Description | Default |
|---|---|---|---|
| isOpen | requiredboolean | If `true`, the modal will be open. | - |
| leastDestructiveRef | requiredRefObject<FocusableElement> | undefined | - | |
| onClose | required() => 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 | "blue" | "cyan" | "gray" | "green" | "orange" | "pink" | "purple" | "red" | "teal" | "yellow" | "whiteAlpha" | "blackAlpha" | "linkedin" | "facebook" | "messenger" | "whatsapp" | "twitter" | "telegram" | Color Schemes for AlertDialog are not implemented in the default theme. You can extend the theme to implement them. | - |
| finalFocusRef | RefObject<FocusableElement> | The `ref` of element to receive focus when the modal closes. | - |
| id | string | The `id` of the modal | - |
| isCentered | boolean | If `true`, the modal will be centered on screen. | false |
| lockFocusAcrossFrames | boolean | Enables aggressive focus capturing within iframes. - If `true`: keep focus in the lock, no matter where lock is active - If `false`: allows focus to move outside of iframe | - |
| motionPreset | "scale" | "none" | "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. | - |
| portalProps | Pick<PortalProps, "appendToParentPortal" | "containerRef"> | Props to be forwarded to the portal component | - |
| 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 | "sm" | "md" | "lg" | "xl" | "2xl" | "xs" | "3xl" | "4xl" | "5xl" | "6xl" | "full" | "md" | |
| 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 | Variants for AlertDialog are not implemented in the default theme. You can extend the theme to implement them. | - |