import * as i0 from '@angular/core';
import { InjectionToken, ModuleWithProviders, EnvironmentProviders } from '@angular/core';
import { QuillOptions } from 'quill';
import { Observable } from 'rxjs';

declare const defaultModules: {
    toolbar: (string[] | {
        header: number;
    }[] | {
        list: string;
    }[] | {
        script: string;
    }[] | {
        indent: string;
    }[] | {
        direction: string;
    }[] | {
        size: (string | boolean)[];
    }[] | {
        header: (number | boolean)[];
    }[] | ({
        color: any[];
        background?: undefined;
    } | {
        background: any[];
        color?: undefined;
    })[] | {
        font: any[];
    }[] | {
        align: any[];
    }[])[];
};

interface CustomOption {
    import: string;
    whitelist: any[];
}
interface CustomModule {
    implementation: any;
    path: string;
}
type QuillToolbarConfig = (string | {
    indent?: string;
    list?: string;
    direction?: string;
    header?: number | (boolean | number)[];
    color?: string[] | string;
    background?: string[] | string;
    align?: string[] | string;
    script?: string;
    font?: string[] | string;
    size?: (boolean | string)[];
} | Record<string, string | number | boolean | (boolean | string | number)[]>)[][];
interface QuillModules {
    [key: string]: any;
    clipboard?: {
        matchers?: any[];
        matchVisual?: boolean;
    } | boolean;
    history?: {
        delay?: number;
        maxStack?: number;
        userOnly?: boolean;
    } | boolean;
    keyboard?: {
        bindings?: any;
    } | boolean;
    syntax?: boolean | {
        hljs: any;
    };
    table?: boolean | Record<string, unknown>;
    toolbar?: QuillToolbarConfig | string | {
        container?: string | string[] | QuillToolbarConfig;
        handlers?: Record<string, any>;
    } | boolean;
}
type QuillFormat = 'object' | 'json' | 'html' | 'text';
type QuillBeforeRender = (() => Promise<any>) | (() => Observable<any>);
interface QuillConfig {
    bounds?: HTMLElement | string;
    customModules?: CustomModule[];
    customOptions?: CustomOption[];
    suppressGlobalRegisterWarning?: boolean;
    debug?: 'error' | 'warn' | 'log' | false;
    format?: QuillFormat;
    formats?: string[];
    modules?: QuillModules;
    placeholder?: string;
    readOnly?: boolean;
    registry?: QuillOptions['registry'];
    theme?: string;
    trackChanges?: 'user' | 'all';
    defaultEmptyValue?: any;
    sanitize?: boolean;
    beforeRender?: QuillBeforeRender;
}
declare const QUILL_CONFIG_TOKEN: InjectionToken<QuillConfig>;

/**
 * This `NgModule` provides a global Quill config on the root level, e.g., in `AppModule`.
 * But this eliminates the need to import the entire `ngx-quill` library into the main bundle.
 * The `quill-editor` itself may be rendered in any lazy-loaded module, but importing `QuillModule`
 * into the `AppModule` will bundle the `ngx-quill` into the vendor.
 */
declare class QuillConfigModule {
    static forRoot(config: QuillConfig): ModuleWithProviders<QuillConfigModule>;
    static ɵfac: i0.ɵɵFactoryDeclaration<QuillConfigModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<QuillConfigModule, never, never, never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<QuillConfigModule>;
}

/**
 * Provides Quill configuration at the root level:
 * ```ts
 * bootstrapApplication(AppComponent, {
 *   providers: [provideQuillConfig(...)]
 * });
 * ```
 */
declare const provideQuillConfig: (config: QuillConfig) => EnvironmentProviders;

export { QUILL_CONFIG_TOKEN, QuillConfigModule, defaultModules, provideQuillConfig };
export type { CustomModule, CustomOption, QuillBeforeRender, QuillConfig, QuillFormat, QuillModules, QuillToolbarConfig };
