AlertDialog
AlertDialogs are a specific type of Dialog. They display important information that users need to acknowledge.
install | yarn add @react-spectrum/dialog |
---|---|
version | 3.0.0-alpha.1 |
usage | import {AlertDialog} from '@react-spectrum/dialog' |
Example#
<DialogTrigger>
<ActionButton>Save</ActionButton>
<AlertDialog title="Low Disk Space" variant="warning" primaryActionLabel="Confirm">
You are running low on disk space. Delete unnecessary files to free up space.
</AlertDialog>
</DialogTrigger>
Content#
Unlike Dialog, the layout in AlertDialog is very deliberate. The body of an AlertDialog can be provided by passing
children to the component. The AlertDialog also supports having up to three buttons in its footer: a primary button,
a secondary button, and a cancel button. Each button can be rendered by providing a string to the primaryActionLabel
, secondaryActionLabel
,
and cancelLabel
respectively. Be sure to localize any strings provided to the AlertDialog and to the button labels as well.
<DialogTrigger>
<ActionButton>Exit</ActionButton>
<AlertDialog variant="information" title="Register profile" primaryActionLabel="Register" secondaryActionLabel="Remind me later" cancelLabel="Cancel">
You have not saved your profile information for this account. Would you like to register now?
</AlertDialog>
</DialogTrigger>
Accessibility#
If any of the buttons in the ActionDialog's footer should be focused on render, specify which one via the autoFocusButton
prop.
<DialogTrigger>
<ActionButton>Save</ActionButton>
<AlertDialog variant="confirmation" title="Save file" primaryActionLabel="Save" cancelLabel="Cancel" autoFocusButton="primary">
A file with the same name already exists. Overwrite?
</AlertDialog>
</DialogTrigger>
Labeling#
ActionDialogs should always have a visible title, specified by passing a string as the title
prop. This string should be localized
so that the ActionDialog is properly internationalized.
Events#
AlertDialog accepts an onPrimaryAction
, onSecondaryAction
and onCancel
prop, triggered when the AlertDialog's confirm or cancel buttons are clicked respectively.
The example below uses onPrimaryAction
, onSecondaryAction
and onCancel
to tell the user which button was clicked to close the AlertDialog.
function Example() {
let onPrimaryAction = () => alert('Primary button clicked.');
let onSecondaryAction = () => alert('Secondary button clicked.');
let alertCancel = () => alert('Cancel button clicked.');
return (
<DialogTrigger>
<ActionButton>
Publish
</ActionButton>
<AlertDialog
variant="confirmation"
title="Confirm Publish"
primaryActionLabel="Publish"
secondaryActionLabel="Save as draft"
cancelLabel="Cancel"
onCancel= alertCancel
onPrimaryAction= onPrimaryAction
onSecondaryAction= onSecondaryAction>
Are you sure you want to publish this document?
</AlertDialog>
</DialogTrigger>
);
}
Props#
Name | Type | Default | Description |
variant | 'confirmation'
| 'information'
| 'destructive'
| 'error'
| 'warning' | — | The visual style of the AlertDialog. |
title | string | — | The title of the AlertDialog. |
children | ReactNode | — | The contents of the AlertDialog. |
cancelLabel | string | — | The label to display within the cancel button. |
primaryActionLabel | string | — | The label to display within the confirm button. |
secondaryActionLabel | string | — | The label to display within the secondary button. |
isPrimaryActionDisabled | boolean | — | Whether the primary button is disabled. |
isSecondaryActionDisabled | boolean | — | Whether the secondary button is disabled. |
autoFocusButton | 'cancel' | 'primary' | 'secondary' | — | Button to focus by default upon render. |
UNSAFE_className | string | — | |
UNSAFE_style | CSSProperties | — |
Events
Name | Type | Default | Description |
onCancel | () => void | — | Handler that is called when the cancel button is pressed. |
onPrimaryAction | () => void | — | Handler that is called when the primary button is pressed. |
onSecondaryAction | () => void | — | Handler that is called when the secondary button is pressed. |
Layout
Name | Type | Default | Description |
flex | string | number | boolean | — | |
flexGrow | number | — | |
flexShrink | number | — | |
flexBasis | number | string | — | |
alignSelf | 'auto'
| 'normal'
| 'start'
| 'end'
| 'flex-start'
| 'flex-end'
| 'self-start'
| 'self-end'
| 'center'
| 'stretch' | — | |
justifySelf | 'auto'
| 'normal'
| 'start'
| 'end'
| 'flex-start'
| 'flex-end'
| 'self-start'
| 'self-end'
| 'center'
| 'left'
| 'right'
| 'stretch' | — | |
flexOrder | number | — | |
gridArea | string | — | |
gridColumn | string | — | |
gridRow | string | — | |
gridColumnStart | string | — | |
gridColumnEnd | string | — | |
gridRowStart | string | — | |
gridRowEnd | string | — |
Spacing
Name | Type | Default | Description |
margin | DimensionValue | — | |
marginTop | DimensionValue | — | |
marginLeft | DimensionValue | — | |
marginRight | DimensionValue | — | |
marginBottom | DimensionValue | — | |
marginStart | DimensionValue | — | |
marginEnd | DimensionValue | — | |
marginX | DimensionValue | — | |
marginY | DimensionValue | — |
Sizing
Name | Type | Default | Description |
width | DimensionValue | — | |
minWidth | DimensionValue | — | |
maxWidth | DimensionValue | — | |
height | DimensionValue | — | |
minHeight | DimensionValue | — | |
maxHeight | DimensionValue | — |
Positioning
Name | Type | Default | Description |
position | 'static'
| 'relative'
| 'absolute'
| 'fixed'
| 'sticky' | — | |
top | DimensionValue | — | |
bottom | DimensionValue | — | |
left | DimensionValue | — | |
right | DimensionValue | — | |
start | DimensionValue | — | |
end | DimensionValue | — | |
zIndex | number | — | |
isHidden | boolean | — |
Accessibility
Name | Type | Default | Description |
role | string | — | |
id | string | — | |
tabIndex | number | — | |
aria-label | string | — | Defines a string value that labels the current element. |
aria-labelledby | string | — | Identifies the element (or elements) that labels the current element. |
aria-describedby | string | — | Identifies the element (or elements) that describes the object. |
aria-controls | string | — | Identifies the element (or elements) whose contents or presence are controlled by the current element. |
aria-owns | string | — | Identifies an element (or elements) in order to define a visual, functional, or contextual parent/child relationship between DOM elements where the DOM hierarchy cannot be used to represent the relationship. |
aria-hidden | boolean | 'false' | 'true' | — | Indicates that the element is perceivable but disabled, so it is not editable or otherwise operable. |
Visual options#
Variant#
<DialogTrigger marginEnd="20px">
<ActionButton>Exit</ActionButton>
<AlertDialog variant="confirmation" title="Exit instance?" primaryActionLabel="Confirm" cancelLabel="Cancel">
Exit dungeon instance and return to main hub?
</AlertDialog>
</DialogTrigger>
<DialogTrigger marginEnd="20px">
<ActionButton>New file</ActionButton>
<AlertDialog variant="information" title="Connect your account" primaryActionLabel="Continue" cancelLabel="Cancel">
Please connect an existing account to sync any new files.
</AlertDialog>
</DialogTrigger>
<DialogTrigger marginEnd="20px">
<ActionButton>Delete</ActionButton>
<AlertDialog variant="destructive" title="Delete file" primaryActionLabel="Delete" cancelLabel="Cancel">
This will permanently delete the selected file. Continue?
</AlertDialog>
</DialogTrigger>
<DialogTrigger marginEnd="20px">
<ActionButton>Login</ActionButton>
<AlertDialog variant="error" title="Unable to connect" primaryActionLabel="Retry" cancelLabel="Cancel">
Something went wrong while connecting to the server. Please try again in a couple minutes.
</AlertDialog>
</DialogTrigger>
<DialogTrigger>
<ActionButton>Enter</ActionButton>
<AlertDialog variant="warning" title="Raid instance" primaryActionLabel="Confirm" cancelLabel="Cancel">
The following encounter meant for parties of 4 or more. Enter anyways?
</AlertDialog>
</DialogTrigger>
Primary action disabled#
Disables the primary button.
<DialogTrigger>
<ActionButton>Upgrade</ActionButton>
<AlertDialog isPrimaryActionDisabled variant="confirmation" title="Upgrade subscription" primaryActionLabel="Upgrade" cancelLabel="Cancel">
Upgrade subscription for an additional $14.99 a month?
</AlertDialog>
</DialogTrigger>
Secondary action disabled#
Disables the secondary button.
<DialogTrigger>
<ActionButton>Upgrade</ActionButton>
<AlertDialog isSecondaryActionDisabled variant="confirmation" title="Upgrade subscription" primaryActionLabel="Upgrade" secondaryActionLabel="Apply Coupon" cancelLabel="Cancel">
Upgrade subscription for an additional $14.99 a month?
</AlertDialog>
</DialogTrigger>