import { Component } from "../lib/Component";
import { Emitter } from "../utils/Emitter";
import { IPoint } from "../utils/types/shapes";
export interface IWithHitTest {
    hitBox: IHitBox;
    zIndex: number;
    setHitBox(minX: number, minY: number, maxX: number, maxY: number, force?: boolean): void;
    onHitBox(shape: HitBoxData): boolean;
    removeHitBox(): void;
}
export type HitBoxData = {
    minX: number;
    minY: number;
    maxX: number;
    maxY: number;
    x: number;
    y: number;
};
export interface IHitBox extends HitBoxData {
    update(minX: number, minY: number, maxX: number, maxY: number): void;
    destroy(): void;
    getRect(): [number, number, number, number];
}
export declare class HitTest extends Emitter {
    private tree;
    protected empty: boolean;
    load(items: HitBox[]): void;
    protected scheduledItems: Set<HitBox>;
    clear(): void;
    add(item: HitBox, force?: boolean): void;
    protected scheduleLoad: import("lodash").DebouncedFunc<() => void>;
    remove(item: HitBox, silent?: boolean): void;
    protected emitUpdate: import("lodash").DebouncedFunc<() => void>;
    testPoint(point: IPoint, pixelRatio: number): Component<import("../lib/CoreComponent").CoreComponentProps, import("../lib/Component").TComponentState, import("../lib/CoreComponent").CoreComponentContext>[];
    testBox(item: Omit<HitBoxData, "x" | "y">): Component[];
    testHitBox(item: HitBoxData): Component[];
}
export declare class HitBox implements IHitBox {
    item: {
        zIndex: number;
    } & Component & IWithHitTest;
    protected hitTest: HitTest;
    private destroyed;
    maxX: number;
    maxY: number;
    minX: number;
    minY: number;
    x: number;
    y: number;
    private rect;
    constructor(item: {
        zIndex: number;
    } & Component & IWithHitTest, hitTest: HitTest);
    update: (minX: number, minY: number, maxX: number, maxY: number, force?: boolean) => void;
    getRect(): [number, number, number, number];
    remove(): void;
    destroy(): void;
}
