Imperative and typedmodal.open(Component, props) from anywhere. Props are inferred from the component, prompt() resolves with a typed value or null.
Async close guardsUnsaved changes? Return false from a guard and the modal stays. close() tells you whether it closed instead of throwing.
Stacks and namespacesPush modals on top of each other, keep toasts in their own namespace with auto-close, show one at a time with singleShow.
Accessible by defaultrole=dialog on the surface, labelled by its heading, focus trap with focus return, inert background, Escape and backdrop handling.
Vue, React and plain JSA framework-agnostic core with thin adapters. Works in Nuxt, under React StrictMode and on the server.
Router awareTurn routes into modals with vue-router: open on enter, close on leave, go back on close, block navigation from a guard.