import { ValueSyncStore } from '../../../util/events/sync-store';
import type { Printable } from 'tree-dump';
import type { KeyController } from './KeyController';
import type { PeritextEventTarget } from '../../events/PeritextEventTarget';
import type { UiLifeCycles } from '../types';
import type { Peritext } from '../../../json-crdt-extensions/peritext';
export interface CursorControllerOpts {
    /**
     * Element to attach the controller to, this element will be used to listen to
     * "beforeinput" events and will be put into "contenteditable" mode.
     */
    source: HTMLElement;
    txt: Peritext;
    et: PeritextEventTarget;
    keys: KeyController;
}
/**
 * Controller for handling text selection and cursor movements. Listens to
 * naive browser events and translates them into Peritext events.
 */
export declare class CursorController implements UiLifeCycles, Printable {
    readonly opts: CursorControllerOpts;
    readonly caretId: string;
    private readonly _cursor;
    constructor(opts: CursorControllerOpts);
    /** The position where user started to scrub the text. */
    protected selAnchor: number;
    /**
     * String position at coordinate, or -1, if unknown.
     */
    protected posAtPoint(x: number, y: number): number;
    /** -------------------------------------------------- {@link UiLifeCycles} */
    start(): () => void;
    readonly focus: ValueSyncStore<boolean>;
    private readonly onFocus;
    private readonly onBlur;
    private x;
    private y;
    readonly mouseDown: ValueSyncStore<boolean>;
    private readonly onMouseDown;
    private readonly onMouseMove;
    private readonly onMouseUp;
    private onKeyDown;
    /** ----------------------------------------------------- {@link Printable} */
    toString(tab?: string): string;
}
