import { Provider, Signal, TNode } from '@tempots/dom';
import { NotificationOptions } from './notification';
import { RadiusName, ThemeColorName } from '@/tokens';
import { AnimationConfig } from '@/utils';
type NotificationEntry = {
    animation: AnimationConfig;
    children: TNode[];
    loading: Signal<boolean>;
    withCloseButton: Signal<boolean>;
    withBorder: Signal<boolean>;
    color: Signal<ThemeColorName>;
    radius: Signal<RadiusName>;
    title: TNode;
    icon: Signal<string | undefined>;
    class: Signal<string | undefined>;
    listenRequestClose: (fn: () => void) => void;
    delayedClose?: Promise<void>;
};
export type ShowNotificationOptions = NotificationOptions & {
    animation?: AnimationConfig;
    dismissAfter?: number | Promise<void>;
};
export type NotificationShowFn = (options: ShowNotificationOptions, ...children: TNode[]) => void;
export type NotificationViewportPosition = 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end';
export type NotificationProviderOptions = {
    position?: NotificationViewportPosition;
};
export type NotificationProviderValue = {
    show: NotificationShowFn;
    clear: () => void;
    position: NotificationViewportPosition;
    listenOnShow: (fn: (entry: NotificationEntry) => void) => () => void;
    activeNotifications: Signal<number>;
};
type NotificationServiceHandle = Pick<NotificationProviderValue, 'show' | 'clear'>;
declare class NotificationServiceImpl {
    private handles;
    attach(handle: NotificationServiceHandle): () => void;
    private detach;
    private get current();
    show(options: ShowNotificationOptions, ...children: TNode[]): void;
    clear(): void;
}
export declare const NotificationService: NotificationServiceImpl;
export declare const NotificationProvider: Provider<NotificationProviderValue, NotificationProviderOptions>;
export declare function NotificationViewport(): import("@tempots/dom").Renderable;
export {};
