import { StateField, EditorState } from "@codemirror/state";
import { EditorView } from "@codemirror/view";
import { SyntaxNode } from "@lezer/common";
import { MenuRow } from "../compute-menu-contents";
export declare type UpdateDispatch = {
    from: number;
    to: number;
    value: string;
};
export declare type SelectionRoute = [number, number];
export interface PopoverMenuState {
    menuState: popOverSMState;
    targetNode: SyntaxNode | null;
    highlightNode: SyntaxNode | null;
    targetedTypings: [];
    tooltip: any;
    selectedRouting: [number, number];
    menuContents: MenuRow[];
    hasProjectionContent: boolean;
}
export declare const popoverMenuState: PopoverMenuState;
export declare type popoverSMEvent = "closeTooltip" | "firstUse" | "openTooltip" | "stopUsingTooltip" | "switchToMonocle" | "switchToTooltip" | "switchToDocked" | "useTooltip";
export declare type popOverSMState = "monocleOpen" | "tooltipOpen" | "dockOpen" | "tooltipClosed" | "tooltipInUse" | "preFirstUse";
export declare const visibleStates: Set<popOverSMState>;
export declare function buildProjectionsForMenu(props: {
    fullCode: string;
    node: SyntaxNode | null;
    state: EditorState;
    view: EditorView;
    currentCodeSlice: string;
}): MenuRow[];
export declare function maybeFilterToFullProjection(menuRows: MenuRow[]): MenuRow[];
export declare const popOverState: StateField<PopoverMenuState>;
export declare const popoverEffectDispatch: import("@codemirror/state").StateEffectType<popoverSMEvent>;
export declare const setRouting: import("@codemirror/state").StateEffectType<[number, number]>;
