overlaystexulinot agent-emittableapp
Dialog
dialog
Modal dialog with title, optional description, body and footer.
Live examples
Basic dialog
Basic dialog
Loading demo…
Props
| Name | Kind | Required | Default | Description |
|---|---|---|---|---|
open | boolean | no | false | — |
title | string | yes | — | Accessible dialog title |
description | string | no | — | — |
size | enum (sm, md, lg, xl) | no | "md" | — |
trigger | slot | no | — | Trigger snippet receiving { props } |
footer | slot | no | — | — |
children | slot | no | — | — |
hideClose | boolean | no | false | — |
closeLabel | string | no | "Close" | — |
onOpenChange | event | no | — | — |
class | string | no | — | — |
Keyboard
| Key | Action |
|---|---|
Escape | Title is required; Escape dismisses unless prevented |
Accessibility
- Focus moves into the dialog and returns on close
- Title is required; Escape dismisses unless prevented
Evidence for dialog
Latest committed gates for dialog (as of 2026-10-23). Static snapshot — not live CI.
Behavior
checkedscenario dialog
Rows in tests/behavior/scenarios/dialog.spec.ts, held to the WAI-ARIA APG pattern, run on Chromium, WebKit and the Pixel 7.
Size (gzip)
@texuli/primitives/dialog · measured 11.3 KiB · budget 12.0 KiB
Measured gzip from docs/quality/perf-primitives.md (2026-10-23).
Axe
documented
tests/e2e/site-component-pages.spec.tsdocs/quality (a11y-*)
Site component pages axe gate; package-level a11y docs under docs/quality when present.
Browsers
chromiumwebkitmobile
Playwright projects: Desktop Chrome, Desktop Safari, Pixel 7. Firefox is a known gap on this host.
When to use
Use when
- Confirm multi-step flows
- Show focused detail without leaving the page
Don’t use when
Prefer another component
- A destructive confirm that must trap attention (use alert-dialog)
- Non-modal hints (use popover or tooltip)