import { BookMeta } from './meta';
import { BookBuilder, BookSchema, BookStore, TokenGetter, BookElement } from './model';
import { BookElements, BookElementsWithoutLevel, ElementNamespace, LevelBookElements } from './elements';
import { ExternalBuilder, ExternalProps } from './external';
import { ResourceOptions } from './resources';
export type BookData<T> = {
    tokens: T[];
    meta: BookMeta<T>;
    store: BookStore<T>;
};
export type CreateBookParams<Token> = {
    schema: BookSchema;
    builder: BookBuilderParams<Token>;
    externalBuilder?: ExternalBuilder<Token>;
    resourceOptions?: ResourceOptions;
};
export declare function createBook<Token>({ schema: originalSchema, builder: builderParams, externalBuilder, resourceOptions, }: CreateBookParams<Token>): BookData<Token>;
type SynteticElements = {
    text: BookElement<'text', {
        raw: string;
    }>;
    page: BookElement<'page', {
        count: number;
    }>;
    error: BookElement<'error', {
        props: Record<string, any>;
        name: string;
        error: string;
    }>;
    empty: BookElement<'empty'>;
};
type TokenGetterList<T extends Record<keyof T, BookElement<string>>, Token> = {
    [Name in keyof T]: TokenGetter<T[Name]['props'], Token>;
};
export type BookBuilderParams<Token> = {
    elements: TokenGetterList<Omit<BookElements, `${ElementNamespace}.${string}`>, Token> & {
        format: TokenGetterList<BookElementsWithoutLevel<LevelBookElements<'format'>, 'format'>, Token>;
        web: TokenGetterList<BookElementsWithoutLevel<LevelBookElements<'web'>, 'web'>, Token>;
    };
    synteticElements: TokenGetterList<SynteticElements, Token>;
};
export declare function createBookBuilder<Token>({ elements, synteticElements, }: BookBuilderParams<Token>): BookBuilder<Token, ExternalProps>;
type BookExternalBuilderParams<Token> = {
    element: ExternalBuilder<Token>;
};
export declare function createBookExternalBuilder<Token>({ element }: BookExternalBuilderParams<Token>): {
    externalBuilder: ExternalBuilder<Token>;
};
export {};
