import type { Component, Snippet, SvelteComponent } from 'svelte';
type ButtonLevel = 'primary' | 'secondary' | 'danger' | 'neutral' | 'warning';
export type ModalButton = {
    level?: ButtonLevel;
    label: string;
    description?: string;
    onclick: () => void;
};
export declare const modalButtonTypes: readonly ["cancel", "promptConfirm", "close", "submit"];
export type ModalButtonType = (typeof modalButtonTypes)[number];
export type ModalButtonSettings = ModalButton | ModalButtonType | ({
    type: ModalButtonType;
} & Partial<ModalButton>) | {
    formId: string;
};
export type BaseModalSettings = {
    divider?: boolean;
    title?: string | Snippet;
    buttons?: ModalButtonSettings[];
    response?: (r: unknown) => void;
};
type Props = Record<string, unknown>;
export type ComponentModalSettings<P extends Props = Props> = {
    component: Component<P & {
        modal: ComponentModalSettings;
    }, {
        getResponse?: () => unknown;
    }>;
    props: P;
} & BaseModalSettings;
export type SnippetModalSettings<P extends Props = Props> = {
    snippet: Snippet<[P]>;
    props: P;
} & BaseModalSettings;
export type PromptModalSettings = {
    prompt: string;
    initial?: string;
} & BaseModalSettings;
export type ModalSettings<P extends Props = Props> = PromptModalSettings | ComponentModalSettings<P> | SnippetModalSettings<P>;
export declare function isComponentModalSettings<P extends Props>(modal: ModalSettings<P>): modal is ComponentModalSettings<P>;
export declare function isSnippetModalSettings<P extends Props>(modal: ModalSettings<P>): modal is SnippetModalSettings<P>;
export declare function isPromptModalSettings(modal: ModalSettings): modal is PromptModalSettings;
export declare function modalButtonTypeToButton(type: ModalButtonType): ModalButton;
/**
 * Singleton that manages modals.
 *
 * The singleton can be accessed with `Modal.instance`.
 */
export declare class Modal {
    #private;
    static get instance(): Modal;
    queue: ModalSettings[];
    lastModal: ModalSettings<Props> | undefined;
    promptInput: HTMLInputElement | undefined;
    contentContainer: HTMLElement | undefined;
    childComponent: (SvelteComponent<Record<string, any>, any, any> & {
        getResponse?: () => Promise<unknown> | unknown;
    }) | undefined;
    resolvedButtons: ModalButton[] | undefined;
    private constructor();
    show<P extends Props>(params: ModalSettings<P>): void;
    close(): void;
}
export declare const modals: Modal;
export {};
