import type { ShapeDrawerAfterEffectFunction, ShapeDrawerDestroyFunction, ShapeDrawerDrawFunction, ShapeDrawerInitFunction } from "./Types/ShapeDrawerFunctions";
import type { Container } from "./Core/Container";
import type { CustomEventArgs } from "./Types/CustomEventArgs";
import type { CustomEventListener } from "./Types/CustomEventListener";
import type { IInteractor } from "./Core/Interfaces/IInteractor";
import type { IMovePathGenerator } from "./Core/Interfaces/IMovePathGenerator";
import type { IOptions } from "./Options/Interfaces/IOptions";
import type { IParticleMover } from "./Core/Interfaces/IParticlesMover";
import type { IParticleUpdater } from "./Core/Interfaces/IParticleUpdater";
import type { IPlugin } from "./Core/Interfaces/IPlugin";
import type { IShapeDrawer } from "./Core/Interfaces/IShapeDrawer";
import type { ISourceOptions } from "./Types/ISourceOptions";
import type { Particle } from "./Core/Particle";
import { Plugins } from "./Core/Utils/Plugins";
import type { RecursivePartial } from "./Types/RecursivePartial";
import type { SingleOrMultiple } from "./Types/SingleOrMultiple";
declare global {
    interface Window {
        tsParticles: Engine;
    }
}
export declare class Engine {
    readonly plugins: Plugins;
    private readonly _configs;
    private readonly _domArray;
    private readonly _eventDispatcher;
    private _initialized;
    private readonly _loader;
    constructor();
    get configs(): Record<string, ISourceOptions>;
    get version(): string;
    addConfig(nameOrConfig: string | ISourceOptions, config?: ISourceOptions): void;
    addEventListener(type: string, listener: CustomEventListener): void;
    addInteractor(name: string, interactorInitializer: (container: Container) => IInteractor): Promise<void>;
    addMover(name: string, moverInitializer: (container: Container) => IParticleMover): Promise<void>;
    addParticleUpdater(name: string, updaterInitializer: (container: Container) => IParticleUpdater): Promise<void>;
    addPathGenerator(name: string, generator: IMovePathGenerator): Promise<void>;
    addPlugin(plugin: IPlugin): Promise<void>;
    addPreset(preset: string, options: RecursivePartial<IOptions>, override?: boolean): Promise<void>;
    addShape(shape: SingleOrMultiple<string>, drawer: IShapeDrawer | ShapeDrawerDrawFunction, init?: ShapeDrawerInitFunction, afterEffect?: ShapeDrawerAfterEffectFunction, destroy?: ShapeDrawerDestroyFunction): Promise<void>;
    dispatchEvent(type: string, args: CustomEventArgs): void;
    dom(): Container[];
    domItem(index: number): Container | undefined;
    init(): void;
    load(tagId: string | SingleOrMultiple<RecursivePartial<IOptions>>, options?: SingleOrMultiple<RecursivePartial<IOptions>>): Promise<Container | undefined>;
    loadFromArray(tagId: string, options: RecursivePartial<IOptions>[], index?: number): Promise<Container | undefined>;
    loadJSON(tagId: string | SingleOrMultiple<string>, pathConfigJson?: SingleOrMultiple<string> | number, index?: number): Promise<Container | undefined>;
    refresh(): Promise<void>;
    removeEventListener(type: string, listener: CustomEventListener): void;
    set(id: string | HTMLElement, element: HTMLElement | RecursivePartial<IOptions>, options?: RecursivePartial<IOptions>): Promise<Container | undefined>;
    setJSON(id: string | HTMLElement, element: HTMLElement | SingleOrMultiple<string>, pathConfigJson?: SingleOrMultiple<string> | number, index?: number): Promise<Container | undefined>;
    setOnClickHandler(callback: (e: Event, particles?: Particle[]) => void): void;
}
