import { Component, TComponentContext, TComponentProps, TComponentState } from "../../../lib/Component";
import { HitBoxData } from "../../../services/HitTest";
import { TRect } from "../../../utils/types/shapes";
type TEventedComponentListener = Component | ((e: Event) => void);
export type TEventedAreaState = {
    hovered: boolean;
};
export type TEventedAreaParams = {
    key: string;
    onHitBox?: (data: HitBoxData) => boolean;
    [eventName: string]: ((event: Event) => void) | ((data: HitBoxData) => boolean) | string | undefined;
};
type TEventedArea = {
    rect: TRect;
    params: TEventedAreaParams;
};
export type TEventedComponentProps = TComponentProps & {
    interactive?: boolean;
};
export declare class EventedComponent<Props extends TEventedComponentProps = TEventedComponentProps, State extends TComponentState = TComponentState, Context extends TComponentContext = TComponentContext> extends Component<Props, State, Context> {
    readonly evented: boolean;
    cursor?: string;
    protected _eventedAreas: Map<string, TEventedArea>;
    protected _lastHitBoxData: HitBoxData | undefined;
    protected _hoveredEventedAreaKey: string | undefined;
    private _prevHoveredAreaLeaveHandler;
    constructor(props: Props, parent: Component);
    isInteractive(): boolean;
    setInteractive(interactive: boolean): void;
    private get events();
    protected unmount(): void;
    protected willRender(): void;
    protected didRender(): void;
    private _areaHitTest;
    _trackAreaHover(): void;
    _clearAreaHover(scheduleRender?: boolean): void;
    protected eventedArea(fn: (state: TEventedAreaState) => TRect, params: TEventedAreaParams): TRect;
    protected handleEvent(_: Event): void;
    listenEvents(events: string[], cbOrObject?: TEventedComponentListener): (() => void)[];
    addEventListener(type: string, cbOrObject: TEventedComponentListener): () => void;
    removeEventListener(type: string, cbOrObject: TEventedComponentListener): void;
    protected _fireEvent(cmp: Component, event: Event): void;
    dispatchEvent(event: Event): boolean;
    protected _dipping(startParent: Component, event: Event): boolean;
    protected _hasListener(comp: EventedComponent, type: string): boolean;
}
export {};
