import { AppContext, VNode, VNodeChild } from 'vue';
import { default as Notification } from './notification.vue.js';
export declare const notificationTypes: readonly ["primary", "success", "info", "warning", "error"];
export declare const notificationPositions: readonly ["top-right", "top-left", "bottom-right", "bottom-left"];
export declare const notificationCloseReasons: readonly ["manual", "auto", "escape", "programmatic"];
export declare const notificationServiceCloseReasons: readonly ["manual", "auto", "escape", "programmatic", "close-all", "overflow"];
export declare const notificationOverflowStrategies: readonly ["drop-oldest", "drop-newest"];
export declare const NOTIFICATION_DEFAULT_POSITION = "top-right";
export declare const NOTIFICATION_DEFAULT_DURATION = 4500;
export declare const NOTIFICATION_DEFAULT_OFFSET = 0;
export declare const NOTIFICATION_DEFAULT_Z_INDEX = 2000;
export declare const NOTIFICATION_GAP = 16;
export type NotificationType = (typeof notificationTypes)[number];
export type NotificationPosition = (typeof notificationPositions)[number];
export type NotificationCloseReason = (typeof notificationCloseReasons)[number];
export type NotificationServiceCloseReason = (typeof notificationServiceCloseReasons)[number];
export type NotificationOverflowStrategy = (typeof notificationOverflowStrategies)[number];
export type NotificationContent = string | VNode | (() => VNodeChild);
export type NotificationModelValueChangeHandler = (value: boolean) => void;
export type NotificationCloseHandler = (reason: NotificationCloseReason) => void;
export type NotificationClickHandler = (event: MouseEvent) => void;
export interface NotificationCloseFilter {
    type?: NotificationType;
    position?: NotificationPosition;
    target?: string | HTMLElement;
    targetKey?: string;
    groupKey?: string;
}
export interface NotificationGlobalConfig {
    duration?: number;
    position?: NotificationPosition;
    offset?: number;
    showClose?: boolean;
    zIndex?: number;
    max?: number;
    overflowStrategy?: NotificationOverflowStrategy;
    appendTo?: string | HTMLElement;
    dangerouslyUseHTMLString?: boolean;
}
export interface NotificationProps {
    modelValue?: boolean;
    title?: string;
    message?: NotificationContent;
    type?: NotificationType | "";
    duration?: number;
    showClose?: boolean;
    customClass?: string;
    icon?: string;
    closeIcon?: string;
    dangerouslyUseHTMLString?: boolean;
    zIndex?: number;
    timerKey?: number;
}
export interface NotificationServiceOptions extends Omit<NotificationProps, "modelValue" | "timerKey"> {
    appendTo?: string | HTMLElement;
    offset?: number;
    position?: NotificationPosition;
    onClick?: () => void;
    onClosed?: (reason: NotificationServiceCloseReason) => void;
    groupKey?: string;
    max?: number;
    overflowStrategy?: NotificationOverflowStrategy;
}
export interface NotificationServiceOptionsNormalized extends Omit<NotificationServiceOptions, "appendTo" | "offset" | "position" | "max" | "overflowStrategy"> {
    appendTo: HTMLElement;
    offset: number;
    position: NotificationPosition;
    max: number | null;
    overflowStrategy: NotificationOverflowStrategy;
    targetKey: string;
    title: string;
    message: NotificationContent;
    type: NotificationType | "";
    duration: number;
    showClose: boolean;
    customClass: string;
    icon: string;
    closeIcon: string;
    dangerouslyUseHTMLString: boolean;
    timerKey: number;
}
export type NotificationUpdateOptions = Partial<NotificationServiceOptions>;
export interface NotificationHandler {
    id: string;
    close(reason?: NotificationCloseReason): void;
    update(patch: NotificationUpdateOptions): void;
}
export interface NotificationSnapshotEntry {
    id: string;
    type: NotificationType | "";
    position: NotificationPosition;
    targetKey: string;
    visible: boolean;
    groupKey?: string;
    title?: string;
    messageText?: string;
    hasRichContent: boolean;
}
export interface NotificationSnapshot {
    positions: Partial<Record<NotificationPosition, NotificationSnapshotEntry[]>>;
    total: number;
}
export type NotificationParams = NotificationContent | NotificationServiceOptions;
export type NotificationOptionsTyped = Omit<NotificationServiceOptions, "type">;
export type NotificationParamsTyped = NotificationContent | NotificationOptionsTyped;
export type NotificationTypedFn = (options?: NotificationParamsTyped, appContext?: AppContext | null) => NotificationHandler;
export interface NotificationServiceFn {
    (options?: NotificationParams, appContext?: AppContext | null): NotificationHandler;
    open(options?: NotificationParams, appContext?: AppContext | null): NotificationHandler;
    closeAll(filter?: NotificationType | NotificationCloseFilter): void;
    getState(filter?: NotificationCloseFilter): NotificationSnapshot;
    updateOffsets(position?: NotificationPosition): void;
}
export interface NotificationService extends NotificationServiceFn {
    primary: NotificationTypedFn;
    success: NotificationTypedFn;
    info: NotificationTypedFn;
    warning: NotificationTypedFn;
    error: NotificationTypedFn;
    withContext(appContext?: AppContext | null): NotificationService;
    _context: AppContext | null;
}
export type NotificationInstance = InstanceType<typeof Notification> & {
    close: (reason?: NotificationCloseReason) => void;
    visible: boolean;
};
export declare const NOTIFICATION_TYPE_ICON_MAP: Record<NotificationType, string>;
export declare const NOTIFICATION_CLOSE_ICON = "mdi:close";
export declare const notificationServiceDefaults: {
    title: string;
    message: string;
    type: "";
    duration: number;
    showClose: true;
    customClass: string;
    icon: string;
    closeIcon: string;
    dangerouslyUseHTMLString: false;
    zIndex: undefined;
    appendTo: HTMLElement;
    offset: number;
    position: "top-right";
    onClick: undefined;
    onClosed: undefined;
    groupKey: undefined;
    max: null;
    overflowStrategy: "drop-oldest";
    targetKey: string;
    timerKey: number;
};
