import { type Printable } from 'tree-dump';
import { InputController } from './InputController';
import { CursorController } from './CursorController';
import { RichTextController } from './RichTextController';
import { KeyController } from './KeyController';
import { CompositionController } from './CompositionController';
import { AnnalsController } from './annals/AnnalsController';
import { type ITimestampStruct } from '../../../json-crdt-patch';
import type { Point } from '../../../json-crdt-extensions/peritext/rga/Point';
import type { Log } from '../../../json-crdt/log/Log';
import type { Rect, UiLifeCycles } from '../types';
import type { Peritext } from '../../../json-crdt-extensions';
import type { Range } from '../../../json-crdt-extensions/peritext/rga/Range';
import type { PeritextEventTarget } from '../../../json-crdt-extensions/peritext/events/PeritextEventTarget';
import type { PeritextUiApi } from '../../../json-crdt-extensions/peritext/events/defaults/ui/types';
import type { PeritextEventDefaults } from '../../../json-crdt-extensions/peritext/events/defaults/PeritextEventDefaults';
export declare class DomController implements UiLifeCycles, Printable, PeritextUiApi {
    readonly events: PeritextEventDefaults;
    readonly log: Log;
    readonly txt: Peritext;
    readonly et: PeritextEventTarget;
    readonly keys: KeyController;
    readonly comp: CompositionController;
    readonly input: InputController;
    readonly cursor: CursorController;
    readonly richText: RichTextController;
    readonly annals: AnnalsController;
    /**
     * Index of block HTML <div> elements keyed by the ID (timestamp) of the split
     * boundary that starts that block element.
     */
    readonly blocks: {
        min: import("sonic-forest/lib/types").ITreeNode<ITimestampStruct, HTMLSpanElement> | undefined;
        root: import("sonic-forest/lib/types").ITreeNode<ITimestampStruct, HTMLSpanElement> | undefined;
        max: import("sonic-forest/lib/types").ITreeNode<ITimestampStruct, HTMLSpanElement> | undefined;
        readonly comparator: import("sonic-forest/lib/types").Comparator<ITimestampStruct>;
        set(k: ITimestampStruct, v: HTMLSpanElement): import("sonic-forest/lib/types").SonicNodePublicReference<import("sonic-forest/lib/types").ITreeNode<ITimestampStruct, HTMLSpanElement>>;
        find(k: ITimestampStruct): import("sonic-forest/lib/types").SonicNodePublicReference<import("sonic-forest/lib/types").ITreeNode<ITimestampStruct, HTMLSpanElement>> | undefined;
        get(k: ITimestampStruct): HTMLSpanElement | undefined;
        del(k: ITimestampStruct): boolean;
        clear(): void;
        has(k: ITimestampStruct): boolean;
        _size: number;
        size(): number;
        isEmpty(): boolean;
        getOrNextLower(k: ITimestampStruct): import("sonic-forest/lib/types").ITreeNode<ITimestampStruct, HTMLSpanElement> | undefined;
        forEach(fn: (node: import("sonic-forest/lib/types").ITreeNode<ITimestampStruct, HTMLSpanElement>) => void): void;
        first(): import("sonic-forest/lib/types").ITreeNode<ITimestampStruct, HTMLSpanElement> | undefined;
        last(): import("sonic-forest/lib/types").ITreeNode<ITimestampStruct, HTMLSpanElement> | undefined;
        readonly next: <N extends import("sonic-forest/lib/types").HeadlessNode>(curr: N) => N | undefined;
        iterator0(): () => import("sonic-forest/lib/types").ITreeNode<ITimestampStruct, HTMLSpanElement> | undefined;
        iterator(): Iterator<import("sonic-forest/lib/types").ITreeNode<ITimestampStruct, HTMLSpanElement>, any, undefined>;
        entries(): IterableIterator<import("sonic-forest/lib/types").ITreeNode<ITimestampStruct, HTMLSpanElement>>;
        toString(tab: string): string;
    };
    /**
     * Index of inline HTML <span> elements keyed by the slice start {@link Point}.
     */
    readonly inlines: {
        min: import("sonic-forest/lib/types").ITreeNode<Point<string>, HTMLSpanElement> | undefined;
        root: import("sonic-forest/lib/types").ITreeNode<Point<string>, HTMLSpanElement> | undefined;
        max: import("sonic-forest/lib/types").ITreeNode<Point<string>, HTMLSpanElement> | undefined;
        readonly comparator: import("sonic-forest/lib/types").Comparator<Point<string>>;
        set(k: Point<string>, v: HTMLSpanElement): import("sonic-forest/lib/types").SonicNodePublicReference<import("sonic-forest/lib/types").ITreeNode<Point<string>, HTMLSpanElement>>;
        find(k: Point<string>): import("sonic-forest/lib/types").SonicNodePublicReference<import("sonic-forest/lib/types").ITreeNode<Point<string>, HTMLSpanElement>> | undefined;
        get(k: Point<string>): HTMLSpanElement | undefined;
        del(k: Point<string>): boolean;
        clear(): void;
        has(k: Point<string>): boolean;
        _size: number;
        size(): number;
        isEmpty(): boolean;
        getOrNextLower(k: Point<string>): import("sonic-forest/lib/types").ITreeNode<Point<string>, HTMLSpanElement> | undefined;
        forEach(fn: (node: import("sonic-forest/lib/types").ITreeNode<Point<string>, HTMLSpanElement>) => void): void;
        first(): import("sonic-forest/lib/types").ITreeNode<Point<string>, HTMLSpanElement> | undefined;
        last(): import("sonic-forest/lib/types").ITreeNode<Point<string>, HTMLSpanElement> | undefined;
        readonly next: <N extends import("sonic-forest/lib/types").HeadlessNode>(curr: N) => N | undefined;
        iterator0(): () => import("sonic-forest/lib/types").ITreeNode<Point<string>, HTMLSpanElement> | undefined;
        iterator(): Iterator<import("sonic-forest/lib/types").ITreeNode<Point<string>, HTMLSpanElement>, any, undefined>;
        entries(): IterableIterator<import("sonic-forest/lib/types").ITreeNode<Point<string>, HTMLSpanElement>>;
        toString(tab: string): string;
    };
    constructor(events: PeritextEventDefaults, log: Log);
    isEditable(el: Element): boolean;
    /** -------------------------------------------------- {@link UiLifeCycles} */
    /**
     * Must be set before calling {@link start}.
     */
    el: HTMLElement;
    start(): () => void;
    /** ------------------------------------------------- {@link PeritextUiApi} */
    focus(): void;
    protected getSpans(blockInnerId?: Point): NodeListOf<Element>;
    protected findSpanContaining(char: Range): HTMLSpanElement | undefined;
    getCharRect(char: number | ITimestampStruct): Rect | undefined;
    caretRect(): Rect | undefined;
    /** ----------------------------------------------------- {@link Printable} */
    toString(tab?: string): string;
}
