import { type Readable, type Signal } from '@vielzeug/ripple'; import { type DialogCloseReason, type OverlayOpenReason } from '../../core'; export type UseDialogOptions = { /** Called after showModal() but before isOpen = true. Use to clear drag styles etc. */ beforeOpen?: (dialog: HTMLDialogElement) => void; /** Extra properties merged into the `close-request` custom event detail. */ closeRequestDetail?: (reason: Exclude) => Record; /** Initial uncontrolled open state. Ignored when `openProp` is defined. */ defaultOpen: Readable; dialogRef: { value: HTMLDialogElement | null | undefined; }; getPanelEl: () => HTMLElement | null | undefined; host: HTMLElement; initialFocus: Readable; isPersistent: () => boolean; /** Cleanup registrar from the component setup ctx. Automatically called on disconnect. */ onCleanup: (fn: () => void) => void; /** * Scoped event listener registrar from the component setup ctx. * Automatically removed on component disconnect. */ onEvent: (target: EventTarget | null | undefined, event: K, listener: (e: HTMLElementEventMap[K]) => void, options?: AddEventListenerOptions) => void; /** * Called after the native `close` event fires — after background unlock, * isOpen reset, and focus restore. Use to emit component events. */ onNativeClose?: (reason: DialogCloseReason) => void; /** Called by the overlay on open. Use to emit events. */ onOpen?: (reason: OverlayOpenReason) => void; /** Open prop from the component — drives programmatic open/close via watch. */ openProp: Readable; /** * Called by the overlay when closing. Orchestrates the close animation. * Default: `dialog.close()`. Override in dialog.ts to add the CSS exit animation. */ performClose?: (dialog: HTMLDialogElement, reason: DialogCloseReason) => void; returnFocus: Readable; }; export type UseDialogHandle = { closeWithAnimation: () => void; /** * Dispatch a cancelable `close-request` event on the host. Returns true when * the close is allowed (event not prevented), false when it was cancelled. */ dispatchCloseRequest: (reason: Exclude) => boolean; handleBackdropClick: (e: MouseEvent) => void; handleCancel: (e: Event) => void; isOpen: Signal; /** The modal dialog controller — open/close/toggle/dispose. */ overlay: ModalDialogController; /** * Dispatch `close-request`; if allowed, call `overlay.close()`. */ requestClose: (reason: Exclude) => void; /** * Registers the open-prop watcher AND standard click/cancel event listeners on * the dialog element (backdrop click-to-close, Escape via the native `cancel` * event). Use for components that need standard dialog behavior. * Call inside `onMounted()`. */ setupNativeListeners: () => void; /** * Registers only the open-prop watcher (without adding click/cancel listeners). * Use for components like drawer that register their own event handlers. * Call inside `onMounted()`. */ watchOpenProp: () => void; }; type ModalDialogController = { [Symbol.dispose](): void; close(reason?: DialogCloseReason): void; dispose(): void; open(reason?: OverlayOpenReason): void; toggle(openReason?: OverlayOpenReason, closeReason?: DialogCloseReason): void; }; /** * Shared dialog-control composable for `ore-dialog` and `ore-drawer`. * * Owns: `isOpen`, close-reason tracking, focus management, `overlay`, * `requestClose`, background lock/unlock, and the `close` event handler. * Components supply only their unique behavior via callbacks and `onNativeClose`. */ export declare function useDialogControl(options: UseDialogOptions): UseDialogHandle; export {}; //# sourceMappingURL=use-dialog.d.ts.map