import { type CompletionContext, type CompletionResult } from "@codemirror/autocomplete";
import { EditorState } from "@codemirror/state";
import { type DecorationSet } from "@codemirror/view";
import { type CSSProperties } from "react";
import { type EmojiRegistry } from "./emoji-data";
export declare const MAX_RENDERED_EMOJI_OPTIONS = 100;
export type InputController = {
    focus: () => void;
    hasFocus: () => boolean;
    insertText: (text: string) => void;
};
export type InputProps = {
    ref?: HTMLDivElement;
    placeholder?: string;
    value: string;
    setValue: (value: string) => void;
    onSubmit?: () => void;
    invertEnterBehavior?: boolean;
    fontSize?: CSSProperties["fontSize"];
    paddingX?: CSSProperties["padding"];
    paddingY?: CSSProperties["padding"];
    className?: string;
    emojiFrequencies?: Readonly<Record<string, number>>;
    onEmojiSelect?: (shortcode: string) => void;
    autoFocus?: boolean;
    onControllerChange?: (controller: InputController | null) => void;
    registry?: EmojiRegistry;
};
type EmojiRange = {
    from: number;
    shortcode: string;
    to: number;
    url: string;
};
export declare function findEmojiRanges(state: EditorState, registry?: EmojiRegistry): EmojiRange[];
export default function Input(props: InputProps): import("react").JSX.Element;
export declare function createEmojiCompletionSource(frequencies?: Readonly<Record<string, number>>, onEmojiSelect?: (shortcode: string) => void, registry?: EmojiRegistry): (context: CompletionContext) => CompletionResult | null;
export declare const emojiCompletionSource: (context: CompletionContext) => CompletionResult | null;
export declare function buildMarkdownDecorations(state: EditorState, revealSelection?: boolean): DecorationSet;
export {};
