@gravity-ui/graph
Version:
Modern graph editor component
81 lines (80 loc) • 2.74 kB
TypeScript
import { Component } from "../lib/Component";
import { Emitter } from "../utils/Emitter";
import { noop } from "../utils/functions";
import { IPoint, TRect } 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;
readonly $usableRect: import("@preact/signals-core").Signal<TRect>;
protected queue: Map<HitBox, HitBoxData>;
get isUnstable(): boolean;
load(items: HitBox[]): void;
protected processQueue: (() => void) & {
cancel: () => void;
flush: () => void;
isScheduled: () => boolean;
};
update(item: HitBox, bbox: HitBoxData, _force?: boolean): void;
clear(): void;
add(item: HitBox): void;
waitUsableRectUpdate(callback: (rect: TRect) => void): typeof noop;
protected updateUsableRect(): void;
remove(item: HitBox): 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[];
/**
* Subscribe to usableRect updates
* @param callback Function to call when usableRect changes
* @returns Unsubscribe function
*/
onUsableRectUpdate(callback: (rect: TRect) => void): () => void;
/**
* Get current usableRect value
* @returns Current usableRect
*/
getUsableRect(): TRect;
destroy(): void;
testHitBox(item: HitBoxData): Component[];
}
export declare class HitBox implements IHitBox {
item: {
zIndex: number;
} & Component & IWithHitTest;
protected hitTest: HitTest;
destroyed: boolean;
maxX: number;
maxY: number;
minX: number;
minY: number;
x: number;
y: number;
private rect;
protected unstable: boolean;
constructor(item: {
zIndex: number;
} & Component & IWithHitTest, hitTest: HitTest);
updateRect(rect: HitBoxData): void;
update: (minX: number, minY: number, maxX: number, maxY: number, force?: boolean) => void;
getRect(): [number, number, number, number];
remove(): void;
destroy(): void;
}