import type { Vector2Like } from '../../core';
import type { CanvasBatchable, CanvasItemEvents, CanvasItemProperties, Node } from '../main';
import { Transform2D, Vector2 } from '../../core';
import { CanvasItem } from '../main';
export interface Node2DProperties extends CanvasItemProperties {
}
export interface Node2DEvents extends CanvasItemEvents {
}
export interface Node2D {
    on: <K extends keyof Node2DEvents & string>(event: K, listener: (...args: Node2DEvents[K]) => void) => this;
    once: <K extends keyof Node2DEvents & string>(event: K, listener: (...args: Node2DEvents[K]) => void) => this;
    off: <K extends keyof Node2DEvents & string>(event: K, listener: (...args: Node2DEvents[K]) => void) => this;
    emit: <K extends keyof Node2DEvents & string>(event: K, ...args: Node2DEvents[K]) => this;
}
export declare class Node2D extends CanvasItem {
    rotation: number;
    readonly position: Vector2;
    readonly scale: Vector2;
    readonly skew: Vector2;
    readonly pivot: Vector2;
    readonly extraTransform: Transform2D;
    readonly transform: Transform2D;
    readonly globalPosition: Vector2;
    globalRotation: number;
    readonly globalScale: Vector2;
    readonly globalSkew: Vector2;
    readonly globalTransform: Transform2D;
    protected _parentTransformDirtyId?: number;
    constructor(properties?: Partial<Node2DProperties>, nodes?: Node[]);
    protected _updateProperty(key: string, value: any, oldValue: any): void;
    updateTransform(): void;
    updateGlobalTransform(): void;
    protected _transformVertices(batchable: CanvasBatchable): Float32Array;
    protected _relayout(batchables: CanvasBatchable[]): CanvasBatchable[];
    protected _process(delta: number): void;
    toLocal<P extends Vector2Like = Vector2>(globalPos: Vector2Like, newPos?: P): P;
    toGlobal<P extends Vector2Like = Vector2>(localPos: Vector2Like, newPos?: P): P;
}
