import { AXStyleColorType, AXStyleLookType, AXLocation, MXBaseComponent, AXComponentCloseEvent } from '@acorex/cdk/common';
import { ComponentType, Portal } from '@angular/cdk/portal';
import * as i0 from '@angular/core';
import { TemplateRef, OnInit, InjectionToken } from '@angular/core';
import { DialogRef } from '@angular/cdk/dialog';

type AXNotificationContentType = string | TemplateRef<unknown> | ComponentType<unknown>;
interface AXNotificationButtonItem {
    color?: AXStyleColorType;
    look?: AXStyleLookType;
    text: string;
    disabled?: boolean;
    loading?: boolean;
    onClick?: (e?: {
        source: AXNotificationButtonItem;
        handled?: boolean;
    }) => void;
}
interface AXNotificationOptions {
    buttons?: AXNotificationButtonItem[];
    icon?: string;
    title?: string;
    content?: AXNotificationContentType;
    location: AXLocation;
    closeButton?: boolean;
    color: AXStyleColorType;
    timeOut?: number;
    timeOutProgress?: boolean;
    pauseOnHover?: boolean;
}
interface AXNotificationData {
    buttons?: AXNotificationButtonItem[];
    icon?: string;
    title?: string;
    content?: AXNotificationContentType;
    location: AXLocation;
    closeButton: boolean;
    color: AXStyleColorType;
    timeOut?: number;
    timeOutProgress: boolean;
    pauseOnHover?: boolean;
}
interface AXNotificationRef {
    close(): void;
}

/**
 * The Button is a component which detects user interaction and triggers a corresponding event
 *
 * @category Components
 */
declare class AXNotificationComponent extends MXBaseComponent implements OnInit {
    config: AXNotificationData;
    dialogRef: DialogRef<AXComponentCloseEvent, unknown>;
    /** @ignore */
    _selectedPortal: Portal<unknown>;
    /** @ignore */
    _icon: string;
    private intervalId;
    private isPaused;
    protected remainingTime: i0.WritableSignal<number>;
    protected transitionDuration: i0.WritableSignal<number>;
    ngOnInit(): void;
    private pauseAnimation;
    private _handleTimeOut;
    /** @ignore */
    private _initContent;
    /** @ignore */
    private _initIcon;
    /** @ignore */
    protected _handleButtonClick(button: AXNotificationButtonItem): void;
    /** @ignore */
    private get __hostClass();
    /**
     * Closes the dialog and provides the component and HTML element for reference.
     */
    close(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXNotificationComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<AXNotificationComponent, "ax-notification", never, {}, {}, never, never, true, never>;
}

interface AXNotificationConfig {
    gap: number;
    timeOut: number;
    timeOutProgress: boolean;
    location: AXLocation;
    closeButton: boolean;
    limit: number;
    pauseOnHover: boolean;
}
declare const AX_NOTIFICATION_CONFIG: InjectionToken<AXNotificationConfig>;
declare const AXNotificationDefaultConfig: AXNotificationConfig;
type PartialNotificationConfig = Partial<AXNotificationConfig>;
declare function notificationConfig(config?: PartialNotificationConfig): AXNotificationConfig;

declare class AXNotificationModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXNotificationModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXNotificationModule, never, [typeof AXNotificationComponent], [typeof AXNotificationComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXNotificationModule>;
}

declare class AXNotificationService {
    private dialog;
    private translationService;
    private defaultConfig;
    private activeNotifications;
    private reservedNotifications;
    private notificationCounterElement;
    private moreNotificationsColor;
    private moreNotificationsLocation;
    private reserveCounter;
    show(config: AXNotificationOptions): AXNotificationRef;
    private displayNotification;
    hideAll(): void;
    private handleShowReservedNotification;
    private handleReservedNotificationCounter;
    private createReservedCounternotification;
    private reposition;
    private getRepositionPosition;
    private getPosition;
    private getPositionStrategy;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXNotificationService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXNotificationService>;
}

export { AXNotificationComponent, AXNotificationDefaultConfig, AXNotificationModule, AXNotificationService, AX_NOTIFICATION_CONFIG, notificationConfig };
export type { AXNotificationButtonItem, AXNotificationConfig, AXNotificationContentType, AXNotificationData, AXNotificationOptions, AXNotificationRef, PartialNotificationConfig };
