Design System

V2 audit — Overlays

Modal surfaces for focused work and decisions, plus the tooltip. Confirmation variants are separate components so the destructive path can never be styled as a neutral one.

Dialog

V2

Focused task in a modal surface: create, edit, review.

DialogDialogContentDialogHeaderDialogTitleDialogFooter

Live component

Legacy mapping

Legacy modals had three widths, two close-button positions and inconsistent footers. V2 fixes one structure.

Dialog — standardized specification
AttributeSpecification
Defaultsize="medium", header + body + footer
Variantssmall · medium · large · scrollable body
Sizessmall (400px) · medium (512px) · large (720px)
Statesopen · closing · loading action · scrolled
Icon behaviourX close IconButton top-right, labelled "Close"; optional tone icon in the header.
SpacingPadding 24px; header/body/footer gap 16px; footer action gap 8px.
TypographyTitle `text-heading-5`, body `text-body-sm`.
Border radius`rounded-lg`.
Colour usage`bg-surface` with `shadow-lg` over a scrim backdrop.
ResponsiveFull-width minus 32px below `sm`; footer actions stack with the primary on top.

When to use

  • A short task that must not lose page context

When not to use

  • Long forms — use a page
  • Simple confirmation — use ConfirmDialog

Accessibility

  • Radix Dialog: focus trap, restore on close, Escape to dismiss, labelled by its title.
  • Primary action last in the footer on desktop.

ConfirmDialog

V2

Neutral confirmation of a reversible but consequential action.

ConfirmDialog

Live component

Legacy mapping

Legacy confirmations used generic "Are you sure? OK / Cancel" modals. V2 requires a verb-first confirm label.

ConfirmDialog — standardized specification
AttributeSpecification
Defaulttone="neutral", confirm + cancel
Variantsneutral confirmation
Sizesmax-w-md
Statesopen · loading confirm
Icon behaviourInfo glyph in a `neutral-subtle` chip; hideable when the copy suffices.
SpacingPadding 24px, gap 16px.
TypographyTitle `text-heading-6`, description `text-body-sm`.
Border radius`rounded-lg`.
Colour usageNeutral surface; the confirm button carries `bg-primary`.
ResponsiveActions stack below `sm`, cancel last.

When to use

  • Publishing, sending, bulk applying

When not to use

  • Irreversible deletion — use DestructiveConfirmDialog

Accessibility

  • Radix AlertDialog: focus starts on the safe action; Escape cancels.

DestructiveConfirmDialog

V2

Confirmation for irreversible loss.

DestructiveConfirmDialog

Live component

Legacy mapping

Legacy delete flows reused the neutral modal with a red button only. V2 changes tone, icon, copy and label together.

DestructiveConfirmDialog — standardized specification
AttributeSpecification
Defaulttone="destructive", confirm label "Delete"
Variantsdestructive confirmation · with named item
Sizesmax-w-md
Statesopen · loading confirm
Icon behaviourAlertOctagon in an `error-subtle` chip.
SpacingShared with ConfirmDialog.
TypographyShared with ConfirmDialog; the item name is emphasised in the description.
Border radius`rounded-lg`.
Colour usage`bg-error` confirm button; the surface stays neutral so the copy stays readable.
ResponsiveShared with ConfirmDialog.

When to use

  • Deleting records, revoking access, discarding permanently

When not to use

  • Reversible actions — the red treatment would cry wolf

Accessibility

  • Focus starts on Cancel; the consequence is stated in text, not implied by the red button.

UnsavedChangesDialog

V2

Three-way exit guard for a form with pending edits: save, discard, keep editing.

UnsavedChangesDialog

Live component

Legacy mapping

Legacy forms used the browser's beforeunload prompt or lost edits silently.

UnsavedChangesDialog — standardized specification
AttributeSpecification
Defaulttone="warning", Keep editing / Discard / Save changes
Variantssave-discard-cancel
Sizesmax-w-md
Statesopen · saving
Icon behaviourAlertTriangle in a `warning-subtle` chip.
SpacingShared with ConfirmDialog.
TypographyShared with ConfirmDialog.
Border radius`rounded-lg`.
Colour usageWarning tone; Save is primary, Discard is tertiary.
ResponsiveThree actions stack below `sm` in save → discard → keep-editing order.

When to use

  • Navigating away from a dirty form

When not to use

  • Auto-saving surfaces

Accessibility

  • Dismissing the dialog keeps the edits — the cancel path is always the safe one.

Tooltip

V2

Supplementary hint on hover and focus.

TooltipTooltipProvider

Live component

Legacy mapping

Legacy screens used `title` attributes, which are keyboard-inaccessible and untokenized.

Tooltip — standardized specification
AttributeSpecification
Defaultside="top", 200ms delay
Variantslabel for an icon-only control · explanatory hint
SizesSingle size, max-width 256px
Stateshidden · visible · dismissed (Escape)
Icon behaviourOften triggered by a HelpCircle at `--size-icon-xs`; the trigger is always focusable.
SpacingPadding 8px/4px, offset 6px.
Typography`text-caption`.
Border radius`rounded-sm`.
Colour usage`bg-background-inverse` + `text-text-inverse`.
ResponsiveSuppressed on touch — the information must exist elsewhere too.

When to use

  • Naming icon-only controls
  • Short clarification of a label

When not to use

  • Required instructions — use helper text
  • Anything interactive — use Popover

Accessibility

  • Opens on focus as well as hover; Escape dismisses; never carries essential or interactive content.