import { DropdownMenuItemType } from '@lobehub/ui';
import Fuse, { type IFuseOptions } from 'fuse.js';
import type { IEditor, IEditorKernel, IServiceID } from "../../../types";
import { getBasicTypeaheadTriggerMatch } from '../utils/utils';
export type ISlashDividerOption = {
    type: 'divider';
};
export interface ISlashMenuOption extends DropdownMenuItemType {
    metadata?: Record<string, any>;
    onSelect?: (editor: IEditor, matchingString: string) => void;
}
export type ISlashOption = ISlashMenuOption | ISlashDividerOption;
export interface SlashOptions {
    allowWhitespace?: boolean;
    /**
     * Complete Fuse.js configuration options
     * @example
     * {
     *   keys: ['key', 'label', 'description'],
     *   threshold: 0.3,
     *   includeScore: true,
     *   includeMatches: true
     * }
     */
    fuseOptions?: IFuseOptions<ISlashMenuOption>;
    items: Array<ISlashOption> | ((search: {
        leadOffset: number;
        matchingString: string;
        replaceableString: string;
    } | null) => Promise<Array<ISlashOption>>);
    maxLength?: number;
    minLength?: number;
    punctuation?: string;
    /**
     * Fuse.js search keys for fuzzy matching
     * Default is ['key']
     * @example ['key', 'label', 'description']
     * @deprecated Use fuseOptions instead
     */
    searchKeys?: string[];
    trigger: string;
}
export interface ISlashService {
    registerSlash(options: SlashOptions): void;
    updateOptions(options: SlashOptions[]): void;
}
export declare const ISlashService: IServiceID<ISlashService>;
export declare class SlashService implements ISlashService {
    private kernel;
    private triggerMap;
    private triggerFnMap;
    private triggerFuseMap;
    private logger;
    constructor(kernel: IEditorKernel);
    registerSlash(options: SlashOptions, update?: boolean): void;
    removeAllOptions(): void;
    updateOptions(options: SlashOptions[]): void;
    getSlashOptions(trigger: string): SlashOptions | undefined;
    getSlashTriggerFn(trigger: string): ReturnType<typeof getBasicTypeaheadTriggerMatch> | undefined;
    getSlashFuse(trigger: string): Fuse<ISlashOption> | undefined;
}
