import ArenaMiddleware from './ArenaMiddleware';
import ArenaAncestorCore from './arena/ArenaAncestorCore';
import ArenaCore from './arena/ArenaCore';
import ArenaAttributes from './ArenaAttributes';
import { ArenaNodeText } from './ArenaNode';
export interface ArenaRootInterface extends ArenaAncestorCore {
    readonly root: true;
    readonly hasParent: false;
}
export interface ArenaMediatorInterface extends ArenaAncestorCore {
    readonly root: boolean;
    readonly hasParent: boolean;
}
export interface ArenaTextInterface extends ArenaCore {
    readonly hasParent: true;
    readonly hasChildren: false;
    readonly hasText: true;
    readonly inline: false;
    readonly single: false;
    readonly nextArena: ArenaTextInterface | ArenaMediatorInterface | undefined;
    middlewares: ArenaMiddleware[];
    registerMiddleware: (middleware: ArenaMiddleware) => void;
    getPlain: (text: string, node: ArenaNodeText) => string;
}
export interface ArenaSingleInterface extends ArenaCore {
    readonly hasParent: true;
    readonly hasChildren: false;
    readonly hasText: false;
    readonly inline: false;
    readonly single: true;
}
export interface ArenaInlineInterface extends ArenaCore {
    readonly hasParent: false;
    readonly hasChildren: false;
    readonly hasText: false;
    readonly inline: true;
    readonly single: false;
}
export declare type ParentArena = ArenaMediatorInterface | ArenaRootInterface;
export declare type ChildArena = ArenaMediatorInterface | ArenaSingleInterface | ArenaTextInterface;
export declare type ProtectedArenas = (ChildArena | [ChildArena, ArenaAttributes, string?])[];
export declare type TreeArena = ArenaRootInterface | ChildArena;
export declare type AnyArena = ArenaRootInterface | ChildArena | ArenaInlineInterface;
//# sourceMappingURL=Arena.d.ts.map