import type { BeaconPlugin, DeclarativeForm, ImperativeForm, LabelMap, Mode, Severity, BeaconCtx } from '../types';
export interface DialogCallbacks {
    onSubmit(): void;
    onClose(reason: 'user' | 'submitted'): void;
}
export interface PluginPanelSource {
    name: string;
    form: DeclarativeForm | ImperativeForm;
    ctx: BeaconCtx;
}
export declare class DialogView {
    private labels;
    private severities;
    private callbacks;
    readonly root: HTMLDialogElement;
    private inner;
    private pluginSlot;
    private statusEl;
    private submitBtn;
    private descTextarea;
    private severitySelected;
    private severitiesContainer;
    private modeCounts;
    private pluginCleanups;
    private lastActive;
    private submitSucceeded;
    private expectedSuppressedCloses;
    constructor(labels: LabelMap, severities: Severity[], callbacks: DialogCallbacks);
    requestMode(mode: Mode): Promise<() => void>;
    private applyMode;
    open(): void;
    close(reason?: 'user' | 'submitted'): void;
    private userCloseAttempt;
    private hasUnsavedInput;
    setSubmitSucceeded(value: boolean): void;
    getDescription(): string;
    setDescription(v: string): void;
    getSeverity(): Severity;
    setSeverity(sev: Severity): void;
    setStatus(text: string, kind?: 'idle' | 'error' | 'success'): void;
    setSubmitting(submitting: boolean): void;
    resetState(): void;
    installPluginPanels(sources: PluginPanelSource[], formValuesHost: {
        get(plugin: string, name: string): unknown;
        set(plugin: string, name: string, value: unknown): void;
    }): void;
    clearPluginPanels(): void;
    private severityLabel;
    private tryShowModal;
}
export declare function defaultLabels(): LabelMap;
export type { BeaconPlugin };
//# sourceMappingURL=dialog.d.ts.map