/**
 * Extensions Registry Factory
 */
import type { AnyExtension, BackgroundColorOptions, BlockMathOptions, CollaborationOptions, CollaborationCaretOptions, ColorOptions, FocusOptions, FontFamilyOptions, HighlightOptions, HorizontalRuleOptions, ImageOptions, InlineMathOptions, LinkOptions, MarkdownExtensionOptions, MentionOptions, SubscriptExtensionOptions, SuperscriptExtensionOptions, TaskItemOptions, TaskListOptions, TextAlignOptions, TextStyleOptions, TypographyOptions, UnderlineOptions, UniqueIDOptions, AiBlockOptions, AudioOptions, CalloutOptions, OBlockquoteOptions, OCodeBlockOptions, ODetailsOptions, ColumnDropCursorOptions, MultiColumnOptions, ShortcutOptions } from './extensions';
/**
 * Define the factory type to hide internal Tiptap/Yiitap option types.
 * This prevents "name from external module" errors.
 */
type ExtensionFactory<K extends keyof ExtensionOptions = any> = (opts?: ExtensionOptions[K]) => AnyExtension | AnyExtension[];
/**
 * Detailed options for each extension to provide full IntelliSense
 */
export interface ExtensionOptions {
    BackgroundColor: BackgroundColorOptions;
    BlockMath: BlockMathOptions;
    Collaboration: CollaborationOptions;
    CollaborationCaret: CollaborationCaretOptions;
    Color: ColorOptions;
    Focus: FocusOptions;
    FontFamily: FontFamilyOptions;
    Highlight: HighlightOptions;
    Image: ImageOptions;
    InlineMath: InlineMathOptions;
    Link: LinkOptions;
    Markdown: MarkdownExtensionOptions;
    Mention: MentionOptions;
    Subscript: SubscriptExtensionOptions;
    Superscript: SuperscriptExtensionOptions;
    TaskItem: TaskItemOptions;
    TaskList: TaskListOptions;
    TextAlign: TextAlignOptions;
    TextStyle: TextStyleOptions;
    Typography: TypographyOptions;
    Underline: UnderlineOptions;
    UniqueID: UniqueIDOptions;
    OAiBlock: AiBlockOptions;
    OAudio: AudioOptions;
    OBlockMath: BlockMathOptions;
    OColon: {
        suggestion?: any;
        HTMLAttributes?: Record<string, any>;
    };
    OSlash: {
        suggestion?: any;
        HTMLAttributes?: Record<string, any>;
    };
    OSlashZh: {
        suggestion?: any;
        HTMLAttributes?: Record<string, any>;
    };
    OBlockquote: OBlockquoteOptions;
    OCallout: CalloutOptions;
    OCodeBlock: OCodeBlockOptions;
    OColorHighlighter: any;
    OHorizontalRule: HorizontalRuleOptions;
    OImage: ImageOptions;
    OInlinePlaceholder: {
        char?: string;
        HTMLAttributes?: Record<string, any>;
    };
    OLink: LinkOptions;
    OModelViewer: {
        HTMLAttributes?: Record<string, any>;
    };
    OMultiColumn: MultiColumnOptions;
    OColumnDropCursor: ColumnDropCursorOptions;
    OShortcut: ShortcutOptions;
    OSelectionDecoration: any;
    OVideo: {
        allowFullscreen?: boolean;
        HTMLAttributes?: Record<string, any>;
    };
    ODetails: ODetailsOptions;
    OTable: {
        resizable?: boolean;
        handleWidth?: number;
        cellMinWidth?: number;
        HTMLAttributes?: Record<string, any>;
    };
    [key: string]: any;
}
/**
 * Extension Factory Registry
 * Stores functions that return a configured extension instance
 */
export declare const extensionRegistry: {
    [K in keyof ExtensionOptions]?: ExtensionFactory<K>;
};
/**
 * Derived Types for IntelliSense
 */
export type ExtensionName = keyof typeof extensionRegistry;
/**
 * A unified structure combining Name and its specific Config
 */
export type ExtensionItem<T extends ExtensionName = ExtensionName> = {
    name: T;
    configure?: T extends keyof ExtensionOptions ? Partial<ExtensionOptions[T]> : any;
};
/**
 * Custom Type Guard to check if an item is a Tiptap Extension instance
 */
export declare const isExtensionInstance: (item: any) => item is AnyExtension;
/**
 * Create a single extension from a unified item object
 * @param item - An object containing both name and optional config
 */
export declare const createExtension: <T extends ExtensionName>(item: ExtensionItem<T>) => AnyExtension | AnyExtension[];
/**
 * Create a flattened list from a mix of names and configured items
 * Allows passing either a simple string or a full { name, configure } object
 */
export declare const createExtensionList: (items: (ExtensionName | ExtensionItem)[]) => AnyExtension[];
export {};
