import { Slice } from './Slice';
import { SliceStacking } from './constants';
import { UndEndIterator, type UndEndNext } from '../../../util/iterator';
import type { Range } from '../rga/Range';
import type { SliceType } from './types';
import type { ITimestampStruct } from '../../../json-crdt-patch/clock';
import type { Stateful } from '../types';
import type { Printable } from 'tree-dump/lib/types';
import type { ArrChunk, ArrNode } from '../../../json-crdt/nodes';
import type { AbstractRga } from '../../../json-crdt/nodes/rga';
import type { Peritext } from '../Peritext';
export declare class Slices<T = string> implements Stateful, Printable {
    /** The text RGA. */
    protected readonly txt: Peritext<T>;
    /** The `arr` node, used as a set, where slices are stored. */
    readonly set: ArrNode;
    private list;
    protected readonly rga: AbstractRga<T>;
    constructor(
    /** The text RGA. */
    txt: Peritext<T>, 
    /** The `arr` node, used as a set, where slices are stored. */
    set: ArrNode);
    ins<S extends Slice<T>, K extends new (...args: ConstructorParameters<typeof Slice<T>>) => S>(range: Range<T>, stacking: SliceStacking, type: SliceType, data?: unknown, Klass?: K): S;
    insMarker(range: Range<T>, type: SliceType, data?: unknown | ITimestampStruct): Slice<T>;
    insMarkerAfter(after: ITimestampStruct, type: SliceType, data?: unknown): Slice<T>;
    insStack(range: Range<T>, type: SliceType, data?: unknown | ITimestampStruct): Slice<T>;
    insOne(range: Range<T>, type: SliceType, data?: unknown | ITimestampStruct): Slice<T>;
    insErase(range: Range<T>, type: SliceType, data?: unknown | ITimestampStruct): Slice<T>;
    protected unpack(arr: ArrNode, chunk: ArrChunk): Slice<T>;
    get(id: ITimestampStruct): Slice<T> | undefined;
    del(id: ITimestampStruct): void;
    delSlices(slices: Iterable<Slice<T>>): boolean;
    size(): number;
    /**
     * @todo Rename to `each0`.
     */
    iterator0(): UndEndNext<Slice<T>>;
    each(): UndEndIterator<Slice<T>>;
    forEach(callback: (item: Slice<T>) => void): void;
    private _topologyHash;
    hash: number;
    refresh(): number;
    toStringName(): string;
    toString(tab?: string): string;
}
