import type { Viewport } from '../Viewport.js';
import { type Props as ContainerProps, Container } from '../Container.js';
import { Style } from '../Style.js';
import { Rect, Size } from '../geometry.js';
import { type MouseEvent, type KeyEvent } from '../events/index.js';
import type { System } from '../System.js';
export interface Props extends ContainerProps {
    /**
     * If true, paints the entire screen with dimStyle before rendering children.
     * Default: false
     */
    dim?: boolean;
    /**
     * Style used for dimming. Defaults to purpose.dimTextColor fg +
     * purpose.dimBackgroundColor bg.
     */
    dimStyle?: Style;
    /**
     * If true, clicking outside the modal content dismisses it.
     * Default: true
     */
    dismissOnClick?: boolean;
    /**
     * If true, pressing Escape dismisses the modal.
     * Default: false
     */
    dismissOnEsc?: boolean;
    /**
     * Called when the modal is dismissed (via click-outside or esc).
     */
    onDismiss?: () => void;
}
/**
 * A modal overlay that is rendered above the main view tree.
 *
 * Pass a Modal instance to `viewport.requestModal(modal)` to present it.
 * The ModalManager sets `presentedRect` and `windowSize` before rendering.
 *
 * Usage:
 *   const modal = new Modal({
 *     dim: true,
 *     dismissOnClick: true,
 *     dismissOnEsc: true,
 *     onDismiss: () => { ... },
 *     children: [myContent],
 *   })
 *   viewport.requestModal(modal)
 */
export declare class Modal extends Container {
    #private;
    /**
     * The rect of the view that called `viewport.requestModal()`, in absolute
     * screen coordinates. Set by ModalManager before rendering.
     */
    presentedRect: Rect;
    /**
     * The full screen/window size. Set by ModalManager before rendering.
     */
    windowSize: Size;
    constructor(props?: Props);
    update(props: Props): void;
    get dim(): boolean;
    set dim(value: boolean);
    get dimStyle(): Style | undefined;
    set dimStyle(value: Style | undefined);
    get dismissOnClick(): boolean;
    set dismissOnClick(value: boolean);
    get dismissOnEsc(): boolean;
    set dismissOnEsc(value: boolean);
    get onDismiss(): (() => void) | undefined;
    set onDismiss(value: (() => void) | undefined);
    receiveMouse(event: MouseEvent, _system: System): void;
    receiveKey(event: KeyEvent): void;
    render(viewport: Viewport): void;
}
