import { type Dot } from "../../crdt/Dot.ts";
import type VersionVector from "../../crdt/VersionVector.ts";
import ORSetElementState from "../ORSetElementState.ts";
import type CodecPort from "../../../ports/CodecPort.ts";
import DirtyPageSet from "./DirtyPageSet.ts";
import type PageCache from "./PageCache.ts";
import type TrieGeometry from "./TrieGeometry.ts";
import type TrieStorePort from "./TrieStorePort.ts";
/**
 * Initializer for {@link TrieCursor}.
 */
export interface TrieCursorInit {
    readonly rootOid: string | null;
    readonly store: TrieStorePort;
    readonly geometry: TrieGeometry;
    readonly codec: CodecPort;
    readonly pageCache: PageCache;
}
/**
 * Path-descending cursor over the shadow trie.
 *
 * See the cycle 0029 design doc at
 * `docs/design/0029-trie-cursor/trie-cursor.md` for the full
 * contract, split semantics, and error codes.
 */
export default class TrieCursor {
    #private;
    constructor(init: TrieCursorInit);
    contains(element: string): Promise<boolean>;
    getDots(element: string): Promise<ReadonlySet<string>>;
    getElementState(element: string): Promise<ORSetElementState | null>;
    add(element: string, dot: Dot): Promise<void>;
    remove(observedDots: ReadonlySet<string>): Promise<void>;
    compact(includedVV: VersionVector): Promise<void>;
    elements(): Promise<readonly string[]>;
    scan(): AsyncIterable<string>;
    scanElementStates(): AsyncIterable<ORSetElementState>;
    snapshot(): DirtyPageSet;
}
