import { type Ref } from "vue";
import type { Component, VNodeProps } from "@vue/runtime-core";
import { ToolInterface } from "./models";
import { ToolFinder } from "./ToolFinder";
type Bind = VNodeProps | Record<string, unknown>;
type RawSlots = {
    [name: string]: unknown;
    $stable?: boolean;
};
export type DynamicComponent = {
    is: Component | string;
    bind?: Bind | any;
    slots?: RawSlots;
};
export type RegisteredModal = {
    id: string;
    component: DynamicComponent;
    options?: ModalOptions;
    modalControl?: ModalControl;
};
export type ModalControl = {
    id: string;
    getDialog: () => HTMLDialogElement | undefined;
    close: () => void;
};
export type ModalOptions = {
    hideClose?: boolean;
    onClose?: (returnValue: any) => void;
};
export declare const useDialogRegistry: (modals?: Ref<RegisteredModal[]>) => {
    modals: Ref<RegisteredModal[]>;
    showModal: (component: Component | string, bind: Bind, slots?: RawSlots, options?: ModalOptions) => ModalControl;
    removeDialog: (id: string) => void;
};
export declare const confirmAndRemoveChild: (parentTool: ToolInterface, toolToDelete: ToolInterface, fb: any) => Promise<{
    removed: {
        element: ToolInterface;
        unscope?: boolean;
    };
}>;
export declare const showNewPropertyDialogAndGetTool: (toolFinder: ToolFinder | ((name: string) => ToolInterface), fb: any) => Promise<ToolInterface[]>;
export declare const showToolOptions: (tool: ToolInterface, fb: any) => void;
export {};
