import type { WithNormalizedProps } from "../../../global";
interface DialogBaseInput extends Omit<Marko.HTML.Div, `on${string}`> {
    "button-position"?: "right" | "left" | "bottom" | "hidden";
    "use-hidden-property"?: boolean;
    "base-el"?: string;
    header?: Marko.AttrTag<Marko.Input<`h${number}`> & {
        as?: `h${number}`;
        renderBody?: Marko.Body;
    }>;
    "class-prefix"?: string;
    "close-button-text"?: string;
    "close-button-class"?: Marko.HTMLAttributes["class"];
    "a11y-close-text"?: Marko.HTMLAttributes["aria-label"];
    "close-button"?: Marko.Renderable | Marko.AttrTag<{
        renderBody: Marko.Body;
    }>;
    "is-modal"?: boolean;
    "ignore-escape"?: boolean;
    "window-type"?: string;
    "window-class"?: Marko.HTMLAttributes["class"];
    top?: Marko.AttrTag<{
        renderBody: Marko.Body;
    }>;
    "main-id"?: string;
    renderBody?: Marko.Body;
    action?: Marko.AttrTag<{
        renderBody: Marko.Body;
    }>;
    footer?: Marko.AttrTag<{
        renderBody?: Marko.Body;
    }>;
    "close-focus"?: string;
    open?: boolean;
    "transition-list"?: string[];
    focus?: string;
    "prev-button"?: Marko.AttrTag<Omit<Marko.HTML.Button, `on${string}`> & WithNormalizedProps<{
        "a11y-text"?: Marko.HTMLAttributes["aria-label"];
    }>>;
    "on-open"?: (event: Event) => void;
    "on-close"?: (event: Event) => void;
    "on-escape"?: (event: Event) => void;
    "on-scroll"?: (event: Event) => void;
    "on-mouseEnter"?: (event: Event) => void;
    "on-mouseLeave"?: (event: Event) => void;
    "on-prevButtonClick"?: (event: Event) => void;
}
export interface Input extends WithNormalizedProps<DialogBaseInput> {
}
interface State {
    open: boolean;
}
declare class DialogBase extends Marko.Component<Input, State> {
    clickTarget?: HTMLButtonElement | null;
    startEl?: Element | null;
    closeEl?: Element | null;
    windowEl?: Element | null;
    rootEl?: Element | null;
    bodyEl?: Element | null;
    transitionList: string[];
    isTrapped?: boolean;
    restoreTrap?: boolean;
    _prevFocusEl?: Element | null;
    cancelTransition: (() => void) | undefined;
    cancelScrollReset: NodeJS.Timeout | undefined;
    isAnimating?: boolean;
    get useHiddenProperty(): boolean;
    trackLastClick(e: MouseEvent): void;
    getActiveElement(input: Input): Element | null | undefined;
    handleStartClick({ target }: {
        target: HTMLElement;
    }): void;
    handleScroll(): void;
    handleKeydown(event: KeyboardEvent): void;
    handleDialogClick({ target, clientY, }: {
        target: HTMLElement;
        clientY: number;
    }): void;
    handleCloseButtonClick(): void;
    onInput(input: Input): void;
    onRender(): void;
    onMount(): void;
    onUpdate(): void;
    _triggerFocus(focusEl: HTMLElement): void;
    _triggerBodyScroll(prevent: boolean): void;
    onDestroy(): void;
    _getTrapCallback(restoreTrap: boolean, isTrapped: boolean, wasTrapped: boolean): () => void;
    /**
     * Ensures that if a component is supposed to be trapped that this is
     * trapped after rendering.
     */
    _trap(opts: {
        firstRender: boolean;
    }): void;
    /**
     * Releases the trap before each render and on destroy so
     * that Marko can update normally without the inserted dom nodes.
     * Only releases on isModal dialogs
     */
    _release(): void;
    _cancelAsync(): void;
}
export default DialogBase;
