Imperative modal API for opening custom components in an overlay shell.
Introduction
useModalAction opens modals imperatively with any Vue or React component as content—typically a Card. The Modal shell (overlay, portal, backdrop, transitions) is rendered by BridgeModalHost.
Use this when you need to open overlays from business logic, nested components, or callbacks without threading show state through props.
Use the framework selector in the site header to switch between React and Vue.
Import
import { BridgeUIHosts } from "@bridge-ui/vue/Actions";
import { useModalAction } from "@bridge-ui/vue/Actions";import { BridgeUIHosts } from "@bridge-ui/react/Actions";
import { useModalAction } from "@bridge-ui/react/Actions";Setup
Mount BridgeUIHosts with BridgeModalHost inside BridgeUIProvider. Without the host, open() will not show a modal. See useDialogAction for a full layout example.
Basic usage
Pass a component and props to open(). The returned id is passed to close(id) from your content or page logic.
Modal options
Configure the shell with modal: size, blur, transition, align, persistent, and autoFocus.
Component props
The props object is forwarded to your content component—use it for titles, form state, or onClose callbacks.
autoFocus
Set modal.autoFocus: true to focus the first focusable element when the modal opens.
close / closeTop / stack
Imperative modals stack like dialogs. Use close(id), closeTop(), and inspect stackSize / isOpen(id).
Callbacks
onClose and onClosed on open() fire for every dismiss path, including overlay clicks and close(id).
update
Call update(id, { props, modal }) to patch content or shell options on an open modal.
persistent
With modal.persistent: true, only explicit actions in your content dismiss the modal.
Nested stack
Modal content can call useModalAction() again to open another layer on top.
API
| Method / property | Description |
|---|---|
| close(id) | Closes the entry with the given id. |
| closeTop() | Closes the topmost entry in the stack. |
| isOpen(id) | Whether the entry is currently open. |
| open(options) | Opens a modal with component and props. Returns an entry id. |
| stackSize | Number of open modal entries. |
| update(id, patch) | Patches component props and/or modal shell options. |
open options
| Option | Type | Description |
|---|---|---|
| component | Component | Content component rendered inside the modal panel. |
| modal | ModalOptions | Shell: size, blur, transition, persistent, autoFocus, etc. |
| onClose | () => void | Called when a dismiss starts. |
| onClosed | () => void | Called after the leave animation. |
| props | object | Props passed to the content component. |