@visactor/vrender-core
Version:
```typescript import { xxx } from '@visactor/vrender-core'; ```
159 lines (158 loc) • 5.95 kB
TypeScript
import type { INode } from './node-tree';
import type { Dict } from '@visactor/vutils';
import type { Cursor, IGraphicAttribute } from './graphic';
import type { IDomRectLike, IEventElement } from './common';
import type { ICanvas } from './canvas';
import type { IGlobal } from './global';
import type { IWindow } from './window';
export type EventPoint = {
x: number;
y: number;
};
export interface IEventManager {
rootTarget: IEventTarget;
dispatch: any;
cursor: Cursor | string;
addEventMapping: (type: string, fn: (e: IFederatedEvent, target: IEventTarget) => void) => void;
dispatchEvent: (e: IFederatedEvent, type?: string) => void;
mapEvent: (e: IFederatedEvent) => void;
propagate: (e: IFederatedEvent, type?: string) => void;
propagationPath: (target: IEventTarget) => IEventTarget[];
copyWheelData: (from: IFederatedWheelEvent, to: IFederatedWheelEvent) => void;
copyPointerData: (from: IFederatedEvent, to: IFederatedEvent) => void;
copyMouseData: (from: IFederatedEvent, to: IFederatedEvent) => void;
copyData: (from: IFederatedEvent, to: IFederatedEvent) => void;
}
export interface IFederatedEvent<N = Event> {
bubbles: boolean;
cancelBubble: boolean;
cancelable: boolean;
composed: boolean;
currentTarget: IEventTarget | null;
defaultPrevented: boolean;
eventPhase: number;
isTrusted: boolean;
returnValue: boolean;
srcElement: IEventTarget;
target: IEventTarget | null;
timeStamp: number;
type: string;
nativeEvent: N;
originalEvent: IFederatedEvent<N> | null;
propagationStopped: boolean;
propagationImmediatelyStopped: boolean;
path: IEventTarget[];
manager?: IEventManager;
detail: any;
view: any;
layer: EventPoint;
get layerX(): number;
get layerY(): number;
page: EventPoint;
get pageX(): number;
get pageY(): number;
canvas: EventPoint;
get x(): number;
get y(): number;
get canvasX(): number;
get canvasY(): number;
viewport: EventPoint;
get viewX(): number;
get viewY(): number;
composedPath: () => IEventTarget[];
preventDefault: () => void;
stopImmediatePropagation: () => void;
stopPropagation: () => void;
initEvent: () => void;
initUIEvent: () => void;
clone: () => void;
which: number;
}
export interface IFederatedMouseEvent extends IFederatedEvent {
altKey: boolean;
button: number;
buttons: number;
ctrlKey: boolean;
metaKey: boolean;
relatedTarget: EventTarget | null;
shiftKey: boolean;
client: EventPoint;
get clientX(): number;
get clientY(): number;
detail: number;
movement: EventPoint;
get movementX(): number;
get movementY(): number;
offset: EventPoint;
get offsetX(): number;
get offsetY(): number;
global: EventPoint;
get globalX(): number;
get globalY(): number;
screen: EventPoint;
get screenX(): number;
get screenY(): number;
getModifierState: (key: string) => boolean;
initMouseEvent: (_typeArg: string, _canBubbleArg: boolean, _cancelableArg: boolean, _viewArg: Window, _detailArg: number, _screenXArg: number, _screenYArg: number, _clientXArg: number, _clientYArg: number, _ctrlKeyArg: boolean, _altKeyArg: boolean, _shiftKeyArg: boolean, _metaKeyArg: boolean, _buttonArg: number, _relatedTargetArg: EventTarget) => void;
}
export interface IFederatedWheelEvent extends IFederatedMouseEvent {
deltaMode: number;
deltaX: number;
deltaY: number;
deltaZ: number;
clone: () => IFederatedWheelEvent;
}
export interface IFederatedPointerEvent extends IFederatedMouseEvent {
pointerId: number;
width: number;
height: number;
isPrimary: boolean;
pointerType: string;
pressure: number;
tangentialPressure: number;
tiltX: number;
tiltY: number;
twist: number;
detail: number;
getCoalescedEvents: () => PointerEvent[];
getPredictedEvents: () => PointerEvent[];
clone: () => IFederatedPointerEvent;
}
export interface IEventTarget extends INode {
parent: IEventTarget | null;
children?: IEventTarget[];
attribute?: Partial<IGraphicAttribute>;
emit: (eventName: any, data: Dict<any>) => boolean;
getCursor: () => string;
setCursor: (c?: string) => void;
}
export interface IRender {
visualCanvas: {
getCanvas: () => HTMLElement;
};
pickEvent: (position: [number, number], children: IEventTarget[], geoPick?: boolean) => IEventTarget | null;
[key: string]: any;
}
export interface IEventExtension {
initEvents: () => void;
removeEvents: () => void;
release: () => void;
}
export type LooseFunction = (...args: any[]) => any;
export type IElementLike = Omit<IEventElement, 'on' | 'off' | 'once' | 'emit' | 'removeAllListeners'> & {
style: CSSStyleDeclaration | Record<string, any>;
getNativeHandler?: () => ICanvas;
getBoundingClientRect: () => IDomRectLike;
};
export type RenderConfig = {
targetElement: IWindow;
resolution: number;
rootNode: IEventTarget;
global: IGlobal;
autoPreventDefault?: boolean;
clickInterval?: number;
supportsTouchEvents?: boolean;
supportsPointerEvents?: boolean;
};
export type NativeEvent = MouseEvent | PointerEvent | TouchEvent;
export type GraphicEventType = 'pointerdown' | 'pointerup' | 'pointerupoutside' | 'pointertap' | 'pointerover' | 'pointerenter' | 'pointerleave' | 'pointerout' | 'mousedown' | 'mouseup' | 'mouseupoutside' | 'rightdown' | 'rightup' | 'rightupoutside' | 'click' | 'dblclick' | 'mousemove' | 'mouseover' | 'mouseout' | 'mouseenter' | 'mouseleave' | 'wheel' | 'tap' | 'touchstart' | 'touchend' | 'touchendoutside' | 'touchmove' | 'touchcancel' | 'dragstart' | 'drag' | 'dragenter' | 'dragleave' | 'dragover' | 'dragend' | 'drop' | 'pan' | 'panstart' | 'panend' | 'press' | 'pressup' | 'pressend' | 'pinch' | 'pinchstart' | 'pinchend' | 'swipe';