import { type ReactNode, type FC } from "react";
/**
 * A plugin that intercepts keyboard events and cursor changes in the composer
 * input. Used by trigger popover declarations to handle popover navigation
 * without ComposerInput knowing about specific triggers.
 */
export type ComposerInputPlugin = {
    /** Handle a key event. Return true if consumed (stops propagation to other plugins and default behavior). */
    handleKeyDown(e: {
        readonly key: string;
        readonly shiftKey: boolean;
        readonly ctrlKey?: boolean;
        readonly metaKey?: boolean;
        readonly nativeEvent?: {
            isComposing?: boolean;
        };
        preventDefault(): void;
    }): boolean;
    /** Called on every cursor position change (selection change / text change). */
    setCursorPosition(pos: number): void;
};
/** Options for registering a plugin. */
export type ComposerInputPluginRegisterOptions = {
    /**
     * Relative priority. Plugins with higher priority receive events first.
     * @default 0
     */
    priority?: number;
};
export type ComposerInputPluginRegistry = {
    register(plugin: ComposerInputPlugin, opts?: ComposerInputPluginRegisterOptions): () => void;
    getPlugins(): readonly ComposerInputPlugin[];
};
export declare const useComposerInputPluginRegistry: () => ComposerInputPluginRegistry;
export declare const useComposerInputPluginRegistryOptional: () => ComposerInputPluginRegistry | null;
export declare const ComposerInputPluginProvider: FC<{
    children: ReactNode;
}>;
//# sourceMappingURL=ComposerInputPluginContext.d.ts.map