Prototype Library

Confirm Dialog

Confirmation modal driven by attributes. Resolves a boolean through confirm / cancel / resolved events. Esc cancels.

Inherited wc import '@esa/ecology/esa-confirm-dialog';

Preview

<button data-target="cd-default">Save changes</button>

<esa-confirm-dialog
  id="cd-default"
  heading="Save changes?"
  message="Your changes will be applied immediately."
  confirm-label="Save"
></esa-confirm-dialog>

Variants

Use warning for reversible-but-risky actions and danger for destructive ones.

<esa-confirm-dialog variant="warning" heading="Unsaved changes"
  message="You have unsaved changes that will be lost." confirm-label="Discard"></esa-confirm-dialog>
<esa-confirm-dialog variant="danger" heading="Delete project?"
  message="This action cannot be undone." confirm-label="Delete"></esa-confirm-dialog>

API

PropTypeDefaultDescription
open boolean false Reflected attribute that drives visibility. Open imperatively via show().
heading string '' Title of the confirmation.
message string '' Supporting body text.
variant 'default' | 'warning' | 'danger' 'default' Icon and confirm-button color theme.
confirm-label string 'Confirm' Label of the confirm button.
cancel-label string 'Cancel' Label of the cancel button.
show-icon boolean true Renders the variant icon above the heading.

Methods

PropTypeDefaultDescription
show() method Opens the dialog and focuses the confirm button.
confirm() method Resolves true and closes.
cancel() method Resolves false and closes.

Events

EventTypeDefaultDescription
confirm CustomEvent Fired when the user confirms.
cancel CustomEvent Fired when the user cancels (button, backdrop, or Esc).
resolved CustomEvent<{ confirmed: boolean }> Fired on either outcome with the boolean result.

Accessibility

  • The panel is role="alertdialog" with aria-modal="true"; heading is the accessible name.
  • The confirm button receives focus on open; Tab and Shift+Tab cycle between the two buttons.
  • Escape and backdrop click both resolve as cancel; focus is restored on close.