import * as i0 from '@angular/core';
import { ApplicationRef, EnvironmentInjector } from '@angular/core';

type ToastType = 'success' | 'info' | 'warning' | 'error';
interface ToastData {
    id: string;
    type: ToastType;
    title?: string;
    message: string | string[];
    duration: number;
    actionLabel?: string;
    onAction?: () => void;
    /**
     * Render `message` dưới dạng HTML thay vì text.
     * - `false` (mặc định): message render dạng TEXT (auto-escape) — an toàn tuyệt đối.
     * - `true`: message render dạng HTML, đã được `DomSanitizer.sanitize(HTML)`
     *   (strip `<script>`, event handler, `javascript:` URL). CHỈ dùng cho markup
     *   TIN CẬY (do dev tự viết); KHÔNG truyền data người dùng vào đây.
     */
    html?: boolean;
}
interface NotifyOption {
    duration?: number;
    title?: string;
    actionLabel?: string;
    /**
     * Callback khi bấm nút action — do APP tự cung cấp (không phải input không tin cậy).
     * Chỉ được gọi khi user bấm `actionLabel`.
     */
    onAction?: () => void;
    /**
     * Render message dạng HTML đã sanitize (mặc định `false` = text an toàn).
     * Chỉ dùng cho markup tin cậy. Xem `ToastData.html`.
     */
    html?: boolean;
}

declare class SdNotifyService {
    #private;
    private appRef;
    private injector;
    private document;
    readonly toasts: i0.WritableSignal<ToastData[]>;
    constructor(appRef: ApplicationRef, injector: EnvironmentInjector, document: Document);
    success(message: string, option?: NotifyOption): void;
    info(message: string, option?: NotifyOption): void;
    warning(message: string | string[], option?: NotifyOption): void;
    error(message: string | string[], option?: NotifyOption): void;
    remove(id: string): void;
    clearAll(): void;
    clearByType(type: ToastType): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<SdNotifyService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<SdNotifyService>;
}

export { SdNotifyService };
export type { NotifyOption as SdNotifyOption };
