import { BehaviorSubject, Observable, Subject } from 'rxjs';
import * as i0 from '@angular/core';
import { OnDestroy, OnInit, OnChanges, ChangeDetectorRef, ElementRef, SimpleChange, PipeTransform, ModuleWithProviders, EnvironmentProviders } from '@angular/core';
import { SafeHtml } from '@angular/platform-browser';

declare const LOADERS: {
    "ball-8bits": number;
    "ball-atom": number;
    "ball-beat": number;
    "ball-circus": number;
    "ball-climbing-dot": number;
    "ball-clip-rotate": number;
    "ball-clip-rotate-multiple": number;
    "ball-clip-rotate-pulse": number;
    "ball-elastic-dots": number;
    "ball-fall": number;
    "ball-fussion": number;
    "ball-grid-beat": number;
    "ball-grid-pulse": number;
    "ball-newton-cradle": number;
    "ball-pulse": number;
    "ball-pulse-rise": number;
    "ball-pulse-sync": number;
    "ball-rotate": number;
    "ball-running-dots": number;
    "ball-scale": number;
    "ball-scale-multiple": number;
    "ball-scale-pulse": number;
    "ball-scale-ripple": number;
    "ball-scale-ripple-multiple": number;
    "ball-spin": number;
    "ball-spin-clockwise": number;
    "ball-spin-clockwise-fade": number;
    "ball-spin-clockwise-fade-rotating": number;
    "ball-spin-fade": number;
    "ball-spin-fade-rotating": number;
    "ball-spin-rotate": number;
    "ball-square-clockwise-spin": number;
    "ball-square-spin": number;
    "ball-triangle-path": number;
    "ball-zig-zag": number;
    "ball-zig-zag-deflect": number;
    cog: number;
    "cube-transition": number;
    fire: number;
    "line-scale": number;
    "line-scale-party": number;
    "line-scale-pulse-out": number;
    "line-scale-pulse-out-rapid": number;
    "line-spin-clockwise-fade": number;
    "line-spin-clockwise-fade-rotating": number;
    "line-spin-fade": number;
    "line-spin-fade-rotating": number;
    pacman: number;
    "square-jelly-box": number;
    "square-loader": number;
    "square-spin": number;
    timer: number;
    "triangle-skew-spin": number;
};
declare const DEFAULTS: {
    BD_COLOR: string;
    SPINNER_COLOR: string;
    Z_INDEX: number;
};
declare const PRIMARY_SPINNER = "primary";
type Size = "default" | "small" | "medium" | "large";
interface Spinner {
    bdColor?: string;
    size?: Size;
    color?: string;
    type?: string;
    fullScreen?: boolean;
    zIndex?: number;
    template?: string;
    showSpinner?: boolean;
}
declare class NgxSpinner {
    name: string;
    bdColor: string;
    size: Size;
    color: string;
    type: string;
    class: string;
    divCount: number;
    divArray: Array<number>;
    fullScreen: boolean;
    show: boolean;
    zIndex: number;
    template: string;
    showSpinner: boolean;
    constructor(init?: Partial<NgxSpinner>);
    static create(init?: Partial<NgxSpinner>): NgxSpinner;
}

declare class NgxSpinnerService {
    /**
     * Spinner observable
     *
     * @memberof NgxSpinnerService
     */
    spinnerObservable: BehaviorSubject<NgxSpinner>;
    /**
     * Creates an instance of NgxSpinnerService.
     * @memberof NgxSpinnerService
     */
    constructor();
    /**
     * Get subscription of desired spinner
     * @memberof NgxSpinnerService
     **/
    getSpinner(name: string): Observable<NgxSpinner>;
    /**
     * To show spinner
     *
     * @memberof NgxSpinnerService
     */
    show(name?: string, spinner?: Spinner): Promise<unknown>;
    /**
     * To hide spinner
     *
     * @memberof NgxSpinnerService
     */
    hide(name?: string, debounce?: number): Promise<unknown>;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxSpinnerService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<NgxSpinnerService>;
}

interface NgxSpinnerConfig {
    type?: string;
}

declare class NgxSpinnerComponent implements OnDestroy, OnInit, OnChanges {
    private spinnerService;
    private changeDetector;
    private elementRef;
    private globalConfig;
    /**
     * To set backdrop color
     * Only supports RGBA color format
     * @memberof NgxSpinnerComponent
     */
    bdColor: string;
    /**
     * To set spinner size
     *
     * @memberof NgxSpinnerComponent
     */
    size: Size;
    /**
     * To set spinner color(DEFAULTS.SPINNER_COLOR)
     *
     * @memberof NgxSpinnerComponent
     */
    color: string;
    /**
     * To set type of spinner
     *
     * @memberof NgxSpinnerComponent
     */
    type: string;
    /**
     * To toggle fullscreen mode
     *
     * @memberof NgxSpinnerComponent
     */
    fullScreen: boolean;
    /**
     * Spinner name
     *
     * @memberof NgxSpinnerComponent
     */
    name: string;
    /**
     * z-index value
     *
     * @memberof NgxSpinnerComponent
     */
    zIndex: number;
    /**
     * Custom template for spinner/loader
     *
     * @memberof NgxSpinnerComponent
     */
    template: string;
    /**
     * Show/Hide the spinner
     *
     * @type {boolean}
     * @memberof NgxSpinnerComponent
     */
    showSpinner: boolean;
    /**
     * To enable/disable animation
     *
     * @type {boolean}
     * @memberof NgxSpinnerComponent
     */
    disableAnimation: boolean;
    /**
     * Spinner Object
     *
     * @memberof NgxSpinnerComponent
     */
    spinner: NgxSpinner;
    /**
     * Array for spinner's div
     *
     * @memberof NgxSpinnerComponent
     */
    divArray: Array<number>;
    /**
     * Counter for div
     *
     * @memberof NgxSpinnerComponent
     *
     */
    divCount: number;
    /**
     * Show spinner
     *
     * @memberof NgxSpinnerComponent
     **/
    show: boolean;
    /**
     * Unsubscribe from spinner's observable
     *
     * @memberof NgxSpinnerComponent
     **/
    ngUnsubscribe: Subject<void>;
    /**
     * Element Reference
     *
     * @memberof NgxSpinnerComponent
     */
    spinnerDOM: {
        nativeElement: any;
    };
    /**
     * Creates an instance of NgxSpinnerComponent.
     *
     * @memberof NgxSpinnerComponent
     */
    constructor(spinnerService: NgxSpinnerService, changeDetector: ChangeDetectorRef, elementRef: ElementRef, globalConfig: NgxSpinnerConfig);
    initObservable(): void;
    /**
     * Initialization method
     *
     * @memberof NgxSpinnerComponent
     */
    ngOnInit(): void;
    /**
     * To check event triggers inside the Spinner Zone
     *
     * @param {*} element
     * @returns {boolean}
     * @memberof NgxSpinnerComponent
     */
    isSpinnerZone(element: any): boolean;
    /**
     * To set default ngx-spinner options
     *
     * @memberof NgxSpinnerComponent
     */
    setDefaultOptions: () => void;
    /**
     * On changes event for input variables
     *
     * @memberof NgxSpinnerComponent
     */
    ngOnChanges(changes: {
        [propKey: string]: SimpleChange;
    }): void;
    /**
     * To get class for spinner
     *
     * @memberof NgxSpinnerComponent
     */
    getClass(type: string, size: Size): string;
    /**
     * Check if input variables have changed
     *
     * @memberof NgxSpinnerComponent
     */
    onInputChange(): void;
    /**
     * Component destroy event
     *
     * @memberof NgxSpinnerComponent
     */
    ngOnDestroy(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxSpinnerComponent, [null, null, null, { optional: true; }]>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NgxSpinnerComponent, "ngx-spinner", never, { "bdColor": { "alias": "bdColor"; "required": false; }; "size": { "alias": "size"; "required": false; }; "color": { "alias": "color"; "required": false; }; "type": { "alias": "type"; "required": false; }; "fullScreen": { "alias": "fullScreen"; "required": false; }; "name": { "alias": "name"; "required": false; }; "zIndex": { "alias": "zIndex"; "required": false; }; "template": { "alias": "template"; "required": false; }; "showSpinner": { "alias": "showSpinner"; "required": false; }; "disableAnimation": { "alias": "disableAnimation"; "required": false; }; }, {}, never, ["*"], true, never>;
}

declare class SafeHtmlPipe implements PipeTransform {
    private sanitizer;
    transform(value: string | null | undefined): SafeHtml;
    static ɵfac: i0.ɵɵFactoryDeclaration<SafeHtmlPipe, never>;
    static ɵpipe: i0.ɵɵPipeDeclaration<SafeHtmlPipe, "safeHtml", true>;
}

declare class NgxSpinnerModule {
    static forRoot(config?: NgxSpinnerConfig): ModuleWithProviders<NgxSpinnerModule>;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxSpinnerModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<NgxSpinnerModule, never, [typeof NgxSpinnerComponent, typeof SafeHtmlPipe], [typeof NgxSpinnerComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<NgxSpinnerModule>;
}

/**
 * Provides the configuration for the NgxSpinner.
 *
 * @param config - The configuration object for NgxSpinner.
 * @returns An array of environment providers configured with the given NgxSpinner configuration.
 * @example
 * ```ts
 * import { provideSpinnerConfig } from 'ngx-spinner';
 *
 * bootstrap(AppComponent, {
 *   providers: [
 *     provideSpinnerConfig({type: 'ball-scale-multiple'}),
 *   ],
 * })
 */
declare const provideSpinnerConfig: (config: NgxSpinnerConfig) => EnvironmentProviders;

export { DEFAULTS, LOADERS, NgxSpinner, NgxSpinnerComponent, NgxSpinnerModule, NgxSpinnerService, PRIMARY_SPINNER, provideSpinnerConfig };
export type { Size, Spinner };
