Replace onMount+onCleanup with createEffect watching ctx.isOpen() and ctx.modal(), so focusTrap/scrollLock/dismiss activate/deactivate reactively on every open/close — including when forceMount keeps the component mounted. Note: role="dialog" was omitted; the project's Biome rules flag it as redundant (noRedundantRoles) since <dialog> carries the implicit role.
Description
51 headless Web Components. 0 deps. ~5KB. Popover API, native Dialog, Navigation API. AI-native.
Languages
TypeScript
85.7%
CSS
5.6%
Rust
3.6%
HTML
2.8%
JavaScript
2.2%