import { ViewEntity, SceneEvent } from '@turbox3d/event-manager';
import { SceneTool } from '@turbox3d/command-manager';
import { Element, VirtualNode } from './render';
import { SceneContext } from './scene';
export interface PreserveProps {
    key?: string | number;
    children?: Element<any>[];
    onClick?: (viewEntity: Partial<ViewEntity>, event: SceneEvent, tools: SceneTool) => void;
    onDBClick?: (viewEntity: Partial<ViewEntity>, event: SceneEvent, tools: SceneTool) => void;
    onRightClick?: (viewEntity: Partial<ViewEntity>, event: SceneEvent, tools: SceneTool) => void;
    onDragStart?: (viewEntity: Partial<ViewEntity>, event: SceneEvent, tools: SceneTool) => void;
    onDragMove?: (viewEntity: Partial<ViewEntity>, event: SceneEvent, tools: SceneTool) => void;
    onDragEnd?: (viewEntity: Partial<ViewEntity>, event: SceneEvent, tools: SceneTool) => void;
    onPinchStart?: (viewEntity: Partial<ViewEntity>, event: SceneEvent, tools: SceneTool) => void;
    onPinch?: (viewEntity: Partial<ViewEntity>, event: SceneEvent, tools: SceneTool) => void;
    onPinchEnd?: (viewEntity: Partial<ViewEntity>, event: SceneEvent, tools: SceneTool) => void;
    onRotateStart?: (viewEntity: Partial<ViewEntity>, event: SceneEvent, tools: SceneTool) => void;
    onRotate?: (viewEntity: Partial<ViewEntity>, event: SceneEvent, tools: SceneTool) => void;
    onRotateEnd?: (viewEntity: Partial<ViewEntity>, event: SceneEvent, tools: SceneTool) => void;
    onPress?: (viewEntity: Partial<ViewEntity>, event: SceneEvent, tools: SceneTool) => void;
    onPressUp?: (viewEntity: Partial<ViewEntity>, event: SceneEvent, tools: SceneTool) => void;
    onHoverIn?: (viewEntity: Partial<ViewEntity>, event: SceneEvent, tools: SceneTool) => void;
    onHoverOut?: (viewEntity: Partial<ViewEntity>, event: SceneEvent, tools: SceneTool) => void;
    clickable?: boolean;
    hoverable?: boolean;
    draggable?: boolean;
    pinchable?: boolean;
    rotatable?: boolean;
    pressable?: boolean;
}
export type ComponentProps<P> = PreserveProps & Partial<ViewEntity> & P;
/**
 * graphic render component
 */
export declare class Component<P extends object = {}> {
    props: ComponentProps<P>;
    _vNode: VirtualNode;
    get context(): SceneContext;
    constructor(props?: ComponentProps<P>);
    forceUpdate(): void;
    shouldComponentUpdate(nextProps?: Readonly<ComponentProps<P>>): boolean;
    shouldComponentInteractiveUpdate(nextProps?: Readonly<ComponentProps<P>>): boolean;
    shouldComponentCustomPropsUpdate(nextProps?: Readonly<ComponentProps<P>>): boolean;
    componentWillMount(): void | Promise<void>;
    componentWillUpdate(nextProps?: Readonly<ComponentProps<P>>): void | Promise<void>;
    render(): Element<any>[] | null;
    componentDidMount(): void | Promise<void>;
    componentDidUpdate(prevProps: Readonly<ComponentProps<P>>): void | Promise<void>;
    componentWillUnmount(): void | Promise<void>;
}
export declare class PureComponent<P extends object = {}> extends Component<P> {
    shouldComponentUpdate(nextProps: Readonly<ComponentProps<P>>): boolean;
}
