import type { AllEditorPresetPluginTypes, ExtractPluginNameFromAllBuilderPlugins, MaybePlugin, MaybePluginName, PresetPlugin, SafePresetCheck } from '../types';
import type { EditorPlugin } from '../types/editor-plugin';
import type { EditorPluginInjectionAPI } from './plugin-injection-api';
interface ProcessProps {
    pluginInjectionAPI?: EditorPluginInjectionAPI;
    excludePlugins?: Set<string>;
}
interface BuildProps extends ProcessProps {
    excludePlugins?: Set<string>;
    pluginInjectionAPI?: EditorPluginInjectionAPI;
}
type OldAndDeprecatedAddFunction<T> = (pluginToAdd: T, builder: EditorPresetBuilder<any, any>) => EditorPresetBuilder<any, any>;
type AllPluginNames = string | MaybePluginName<string>;
export declare class EditorPresetBuilder<PluginNames extends AllPluginNames[] = [], StackPlugins extends AllEditorPresetPluginTypes[] = []> {
    private readonly data;
    constructor(...more: [...StackPlugins]);
    add<NewPlugin extends PresetPlugin>(nextOrTuple: SafePresetCheck<NewPlugin, StackPlugins>): EditorPresetBuilder<[
        ExtractPluginNameFromAllBuilderPlugins<NewPlugin>,
        ...PluginNames
    ], [
        ...[NewPlugin],
        ...StackPlugins
    ]>;
    maybeAdd<ToAddPlugin extends PresetPlugin>(pluginToAdd: SafePresetCheck<ToAddPlugin, StackPlugins>, shouldAdd: boolean | (() => boolean) | OldAndDeprecatedAddFunction<ToAddPlugin>): EditorPresetBuilder<[
        MaybePluginName<ExtractPluginNameFromAllBuilderPlugins<ToAddPlugin>>,
        ...PluginNames
    ], [
        MaybePlugin<ToAddPlugin>,
        ...StackPlugins
    ]>;
    has(plugin: AllEditorPresetPluginTypes): boolean;
    build({ pluginInjectionAPI, excludePlugins: maybeExcludePlugins, }?: BuildProps): EditorPlugin[];
    private verifyDuplicatedPlugins;
    private processEditorPlugins;
    private removeExcludedPlugins;
    private safeEntry;
}
export {};
