Alert Dialog

The AlertDialog component is used to interrupt the user with a mandatory confirmation or action.

See CAlertDialog's accessibility report

Import#

Chakra UI exports seven alert dialog-related components.

  • CAlertDialog: provides context and state for the dialog.
  • CAlertDialogHeader: should contain the title announced by screen readers.
  • CAlertDialogBody: should contain the description announced by screen readers.
  • CAlertDialogFooter: should contain the actions of the dialog.
  • CAlertDialogOverlay: The dimmed overlay behind the dialog.
  • CAlertDialogContent: The wrapper for the alert dialog's content.
  • CAlertDialogCloseButton: The button that closes the dialog.
import {
  CAlertDialog,
  CAlertDialogHeader,
  CAlertDialogBody,
  CAlertDialogFooter,
  CAlertDialogOverlay,
  CAlertDialogContent,
  CAlertDialogCloseButton
} from "@chakra-ui/vue";

Usage#

CAlertDialog requires that you provide the leastDestructiveRef prop. This ref can be an actual Vue ref to a focusable element or component in your alert dialog. The leastDestructiveRef prop also accepts a function that returns a ref.

Based on WAI-ARIA specifications for alert dialogs when the dialog opens, the focus should be placed on the least destructive element to prevent users from accidentally confirming the destructive action.

Editable Example
<template>
  <div>
    <c-alert-dialog
      :is-open="isOpen"
      :least-destructive-ref="$refs.cancelRef"
      :on-close="closeDialog"
    >
      <c-alert-dialog-overlay />
      <c-alert-dialog-content>
        <c-alert-dialog-header font-size="lg" font-weight="bold">
          Delete Customer
        </c-alert-dialog-header>
        <c-alert-dialog-body>
          Are you sure? You can't undo this action afterwards.
        </c-alert-dialog-body>
        <c-alert-dialog-footer>
          <c-button ref="cancelRef" @click="closeDialog">
            Cancel
          </c-button>
          <c-button variantColor="red" @click="closeDialog" ml="3">
            Delete
          </c-button>
        </c-alert-dialog-footer>
      </c-alert-dialog-content>
    </c-alert-dialog>
    <c-button variant-color="red" @click="openDialog">
      Delete Customer
    </c-button>
  </div>
</template>
<script>
export default {
  data () {
    return {
      isOpen: false
    }
  },
  methods: {
    closeDialog() {
      this.isOpen = false
    },
    openDialog() {
      this.isOpen = true
    }
  }
}
</script>

Accessibility#

  • CAlertDialog has role alertdialog, and aria-modal set to true.
  • When the dialog opens, the focus is automatically set to the least destructive element.
  • When the dialog opens, the content in the CAlertDialogHeader and CAlertDialogBody is announced by screen readers via aria-labelledby and aria-describedby attributes.
  • Clicking on the overlay closes the CAlertDialog.
  • Pressing esc closes the dialog.

Props#

AlertDialog and its components composes the CModal component, the only exception is that it requires a leastDestructiveRef which is similar to the initialFocusRef in CModal

NameTypeDefaultDescription
leastDestructiveRef (required)vm.$ref, () => vm.ref or CSS selectorThe least destructive action to get focus when dialog is open

❤️ Contribute to this page

Caught a mistake or want to contribute to the documentation? Edit this page on GitHub!