import { Directive } from './Directive';
import { NodeSchema, PropsSchema, JSExpression, ComponentDescription, EventSchema, EventsSchema, BlockSchema, DirectiveSchema } from '../types';
import { Prop } from './Prop';
import { Event } from './Event';
import { Document } from './Document';
import { Block } from './Block';
declare type ChildNodeSchema = Array<NodeSchema | BlockSchema> | string | JSExpression;
export declare const NodeNormalPropNames: string[];
export declare class Node {
    readonly id: string;
    name: string;
    key?: string;
    props: Record<string, Prop>;
    events: Record<string, Event>;
    directives: Record<string, Directive>;
    className?: string | JSExpression;
    style?: Record<string, any> | JSExpression;
    ref?: string;
    slotName?: string;
    slotParams?: string[];
    children?: Array<Node | Block> | string | JSExpression;
    parent: Node | Document | Block | null;
    root: Document | Block;
    visible: boolean;
    lock: boolean;
    normal: string[];
    constructor(schema: NodeSchema, parent?: Node | Document | Block);
    dispose(): void;
    load(schema: NodeSchema): void;
    update(schema: NodeSchema, silent?: boolean): void;
    createChildren(children?: ChildNodeSchema): Array<Node | Block> | string | JSExpression;
    createProps(props?: PropsSchema): Record<string, Prop>;
    createEvents(events?: EventsSchema): Record<string, Event>;
    createDirectives(directives: Record<string, DirectiveSchema>): Record<string, Directive>;
    getPropsSchema(props: Record<string, Prop>): PropsSchema;
    getEventsShema(evnets: Record<string, Event>): EventsSchema;
    getDirectivesShema(directives: Record<string, Directive>): Record<string, DirectiveSchema>;
    getChildrenSchema(children?: Array<Node | Block> | string | JSExpression): ChildNodeSchema;
    toSchema(): NodeSchema;
    removeChild(node: Node | Block): void;
    appendChild(node: Node | Block): void;
    insertAfter(node: Node | Block, after: Node | Block): void;
    insertBefore(node: Node | Block, before: Node | Block): void;
    appendSchema(schema: NodeSchema | BlockSchema, index?: number): Node;
    moveNext(): void;
    movePrev(): void;
    copy(): Node | undefined;
    allowDrop(desc: ComponentDescription): boolean;
    setPropValue(name: string, value: any): void;
    bindEvent(name: string, event: EventSchema): void;
    unbindEvent(name: string): void;
    setDirective(name: string, schema: DirectiveSchema): void;
    removeDirective(name: string): void;
}
export {};
