import type { ReferenceKind } from '../nodes/types';
export declare type CounterMeta = Record<string, string | number | boolean | null>;
export declare type Reference<K = ReferenceKind, T = CounterMeta> = {
    id: string | null;
    kind: K;
    label: string | null;
    numbered: boolean;
    number: number | null;
    title: string;
    meta: T;
};
export declare type Counter<R extends Reference> = {
    kind: R['kind'];
    total: number;
    all: R[];
};
export declare type SectionReference = Reference<ReferenceKind.sec, {
    level: number;
    section: string | null;
}>;
export declare type FigureReference = Reference<ReferenceKind.fig, {
    src: string;
    alt: string;
}>;
export declare type EquationReference = Reference<ReferenceKind.eq, {
    math: string;
}>;
export declare type CodeReference = Reference<ReferenceKind.code, {
    code: string;
    language: string | null;
}>;
export declare type TableReference = Reference<ReferenceKind.table>;
export declare type LinkReference = Reference<ReferenceKind.link, {
    url: string;
}>;
export declare type CiteReference = Reference<ReferenceKind.cite, {
    key: string;
}>;
export declare type AnyReference = SectionReference | FigureReference | EquationReference | CodeReference | TableReference | CiteReference | LinkReference;
export declare type StateCounter = {
    [ReferenceKind.sec]: Counter<SectionReference>;
    [ReferenceKind.fig]: Counter<FigureReference>;
    [ReferenceKind.eq]: Counter<EquationReference>;
    [ReferenceKind.code]: Counter<CodeReference>;
    [ReferenceKind.table]: Counter<TableReference>;
    [ReferenceKind.link]: Counter<LinkReference>;
    [ReferenceKind.cite]: Counter<CiteReference>;
};
export declare type WordCounter = {
    words: number;
    characters_excluding_spaces: number;
    characters_including_spaces: number;
};
