import { TemplateResult } from 'lit'; import { BahtElement } from '../base.js'; /** Where the dialog panel sits. */ export type ModalPlacement = 'center' | 'sheet' | 'side'; /** * Modal dialog (20baht: 0.4 ink scrim, no blur; float shadow; 20px radius). * Controlled: the host flips `open`. Children become the body. * * *

Steps and run history will be removed.

*
* modal.open = true; * modal.addEventListener('baht-close', (e) => (modal.open = false)); * * `placement` moves the panel: `'center'` (default) is the dialog above; * `'sheet'` docks it to the bottom as a bottom sheet below 600px viewport * width (full width, rounded top corners, a grab handle, max 90dvh with the * body scrolling, slides up) and is a centered dialog from 600px up; `'side'` * is a full-height drawer at the inline end, `min(420px, 100vw)` wide, sliding * in from that edge. Scrim, focus trap/restore and `baht-close` are the same in * every placement. Modifier classes: `.baht-modal--sheet` / `.baht-modal--side` * on the panel, `.baht-modal-scrim--sheet` / `.baht-modal-scrim--side` on the scrim. */ export declare class BahtModal extends BahtElement { open: boolean; heading: string; /** One muted line under the heading; also becomes the dialog's aria-describedby. */ description: string; showClose: boolean; /** `'center'` (default) dialog, `'sheet'` bottom sheet below 600px (centered * from 600px up), or `'side'` full-height drawer at the inline end. */ placement: ModalPlacement; /** * Scrim click requests close. Off by default: a stray click outside the panel * must not throw away what the user typed — close via ×, Escape or your buttons. */ closeOnScrim: boolean; private bodyEl; private get titleId(); private get descriptionId(); private closing; private closeToken; private previousFocus; private onKeydown; private focusables; /** Keep Tab cycling inside the dialog (no keyboard escape to the page behind). */ private trapFocus; connectedCallback(): void; disconnectedCallback(): void; protected firstUpdated(): void; protected willUpdate(changed: Map): void; protected updated(changed: Map): void; /** Ask the host to close (the host owns `open`). */ requestClose(reason?: 'escape' | 'scrim' | 'button'): void; protected render(): TemplateResult; }