import { VNode } from 'vue';
import { BxButtonProps } from '../BxButton.vue';
import { Placement } from '@floating-ui/vue';
export declare const DEFAULT_POPUP_TRANSITION_DURATION = 300;
export declare const DEFAULT_POPOVER_TRANSITION_DURATION = 300;
export type PopupCreationOptions = {
    type?: 'layer' | 'frame' | 'drawer';
    title?: string | (() => VNode[] | VNode);
    headerActions?: () => VNode[] | VNode;
    closeBtn?: () => VNode[] | VNode;
    closeable?: boolean;
    icon?: () => VNode;
    content: string | (() => VNode[] | VNode);
    positiveText?: string;
    negativeText?: string;
    actions?: {
        label: string;
        icon: () => VNode;
        props: Partial<BxButtonProps>;
    }[] | (() => VNode[] | VNode);
    disableBackgroundEffect?: boolean;
    customClasses?: string[];
    wrapperCustomClasses?: string[];
    fullLayer?: boolean;
    draggable?: boolean;
    transculent?: boolean;
    drawerPlacement?: 'left' | 'right' | 'top' | 'bottom';
    drawerWidth?: string;
    drawerHeight?: string;
    transitionDuration?: number;
    /** Trap keyboard focus inside the popup while open (modal). Default true. */
    trapFocus?: boolean;
    /**
     * Fires when the popup is dismissed by any path — close button, click
     * outside, or a programmatic `popup.close()` call. Use this to settle any
     * promises that were waiting on the popup's outcome so the host can clean
     * up even when the user aborts.
     */
    onClose?: () => void;
    capturedContext?: Record<string | symbol, any>;
};
export type DrawerCreationOptions = {
    title?: string | (() => VNode[] | VNode);
    closeable?: boolean;
    content: string | (() => VNode[] | VNode);
    placement?: 'left' | 'right' | 'top' | 'bottom';
    width?: string;
    height?: string;
    disableBackgroundEffect?: boolean;
    customClasses?: string[];
    wrapperCustomClasses?: string[];
    capturedContext?: Record<string | symbol, any>;
};
export type DialogType = 'success' | 'error' | 'warning' | 'info';
export type DialogCreationOptions = {
    type?: DialogType;
    title?: string | (() => VNode[] | VNode);
    content?: string | (() => VNode[] | VNode);
    positiveText?: string;
    negativeText?: string;
    onPositiveClick?: () => void | boolean | Promise<void | boolean>;
    onNegativeClick?: () => void | boolean | Promise<void | boolean>;
    positiveButtonProps?: Partial<BxButtonProps>;
    negativeButtonProps?: Partial<BxButtonProps>;
    closeable?: boolean;
    closeOnAction?: boolean;
    icon?: () => VNode;
    action?: () => VNode[] | VNode;
    draggable?: boolean;
    customClasses?: string[];
    wrapperCustomClasses?: string[];
    disableBackgroundEffect?: boolean;
    capturedContext?: Record<string | symbol, any>;
};
export type PopoverCreationOptions = {
    darkenBackground?: boolean;
    floatingPadding?: number;
    customClasses?: string[];
    customStyles?: {
        [key: string]: string | number;
    };
    allowedPlacements?: Placement[];
    arrow?: boolean;
    leaveLazyness?: number;
    overflowVisible?: boolean;
    floatingElement?: HTMLElement;
    x?: number;
    y?: number;
    width?: number;
    height?: number;
    capturedContext?: Record<string | symbol, any>;
    content: () => VNode[] | VNode;
    noPointerEvents?: boolean;
    closeOnClickOutside?: boolean;
    transitionDuration?: number;
};
export type MessagePlacement = 'top-left' | 'top' | 'top-right' | 'left' | 'right' | 'bottom-left' | 'bottom' | 'bottom-right';
export type MessageCreateOptions = {
    type: 'success' | 'error' | 'warning' | 'info';
    title?: string | (() => VNode[] | VNode);
    message?: string | (() => VNode[] | VNode);
    closeable?: boolean;
    icon?: () => VNode[] | VNode;
    actions?: {
        label: string;
        icon: () => VNode;
        props: Partial<BxButtonProps>;
    }[] | (() => VNode[] | VNode);
    closeAfter?: number;
    keepOnHover?: boolean;
    customClasses?: string[];
    maxWidth?: string;
    placement?: MessagePlacement;
    showIcon?: boolean;
    capturedContext?: Record<string | symbol, any>;
};
export declare function createMessage(opts: MessageCreateOptions): {
    close: () => void;
};
export declare function createPopup(opts: PopupCreationOptions): {
    close: () => void;
};
export declare function createDialog(opts: DialogCreationOptions): {
    close: () => void;
};
export declare function createDrawer(opts: DrawerCreationOptions): {
    close: () => void;
};
export declare function createPopover(opts: PopoverCreationOptions): {
    close: () => void;
};
/**
 * Composable für Popup-Erstellung innerhalb von Vue Components
 * Captured automatisch den aktuellen Context
 */
export declare function usePopup(): {
    createPopup: (opts: Omit<PopupCreationOptions, "capturedContext">, additionalContext?: Record<string | symbol, any>) => {
        close: () => void;
    };
    createDialog: (opts: Omit<DialogCreationOptions, "capturedContext">) => {
        close: () => void;
    };
    createMessage: (opts: Omit<MessageCreateOptions, "capturedContext">) => {
        close: () => void;
    };
    createPopover: (opts: Omit<PopoverCreationOptions, "capturedContext">) => {
        close: () => void;
    };
    createDrawer: (opts: Omit<DrawerCreationOptions, "capturedContext">) => {
        close: () => void;
    };
};
export declare function injectPortal(render: () => VNode | VNode[]): {
    destroy: () => void;
};
