207 lines
8.6 KiB
TypeScript
207 lines
8.6 KiB
TypeScript
|
import Transformable, { TransformProp } from './core/Transformable';
|
||
|
import { AnimationEasing } from './animation/easing';
|
||
|
import Animator from './animation/Animator';
|
||
|
import { ZRenderType } from './zrender';
|
||
|
import { Dictionary, ElementEventName, ZRRawEvent, BuiltinTextPosition, MapToType } from './core/types';
|
||
|
import Path from './graphic/Path';
|
||
|
import BoundingRect, { RectLike } from './core/BoundingRect';
|
||
|
import Eventful from './core/Eventful';
|
||
|
import ZRText from './graphic/Text';
|
||
|
import { TextPositionCalculationResult } from './contain/text';
|
||
|
import Polyline from './graphic/shape/Polyline';
|
||
|
import Group from './graphic/Group';
|
||
|
import Point from './core/Point';
|
||
|
export interface ElementAnimateConfig {
|
||
|
duration?: number;
|
||
|
delay?: number;
|
||
|
easing?: AnimationEasing;
|
||
|
during?: (percent: number) => void;
|
||
|
done?: Function;
|
||
|
aborted?: Function;
|
||
|
scope?: string;
|
||
|
force?: boolean;
|
||
|
additive?: boolean;
|
||
|
setToFinal?: boolean;
|
||
|
}
|
||
|
export interface ElementTextConfig {
|
||
|
position?: BuiltinTextPosition | (number | string)[];
|
||
|
rotation?: number;
|
||
|
layoutRect?: RectLike;
|
||
|
offset?: number[];
|
||
|
origin?: (number | string)[] | 'center';
|
||
|
distance?: number;
|
||
|
local?: boolean;
|
||
|
insideFill?: string;
|
||
|
insideStroke?: string;
|
||
|
outsideFill?: string;
|
||
|
outsideStroke?: string;
|
||
|
inside?: boolean;
|
||
|
}
|
||
|
export interface ElementTextGuideLineConfig {
|
||
|
anchor?: Point;
|
||
|
showAbove?: boolean;
|
||
|
candidates?: ('left' | 'top' | 'right' | 'bottom')[];
|
||
|
}
|
||
|
export interface ElementEvent {
|
||
|
type: ElementEventName;
|
||
|
event: ZRRawEvent;
|
||
|
target: Element;
|
||
|
topTarget: Element;
|
||
|
cancelBubble: boolean;
|
||
|
offsetX: number;
|
||
|
offsetY: number;
|
||
|
gestureEvent: string;
|
||
|
pinchX: number;
|
||
|
pinchY: number;
|
||
|
pinchScale: number;
|
||
|
wheelDelta: number;
|
||
|
zrByTouch: boolean;
|
||
|
which: number;
|
||
|
stop: (this: ElementEvent) => void;
|
||
|
}
|
||
|
export declare type ElementEventCallback<Ctx, Impl> = (this: CbThis<Ctx, Impl>, e: ElementEvent) => boolean | void;
|
||
|
declare type CbThis<Ctx, Impl> = unknown extends Ctx ? Impl : Ctx;
|
||
|
interface ElementEventHandlerProps {
|
||
|
onclick: ElementEventCallback<unknown, unknown>;
|
||
|
ondblclick: ElementEventCallback<unknown, unknown>;
|
||
|
onmouseover: ElementEventCallback<unknown, unknown>;
|
||
|
onmouseout: ElementEventCallback<unknown, unknown>;
|
||
|
onmousemove: ElementEventCallback<unknown, unknown>;
|
||
|
onmousewheel: ElementEventCallback<unknown, unknown>;
|
||
|
onmousedown: ElementEventCallback<unknown, unknown>;
|
||
|
onmouseup: ElementEventCallback<unknown, unknown>;
|
||
|
oncontextmenu: ElementEventCallback<unknown, unknown>;
|
||
|
ondrag: ElementEventCallback<unknown, unknown>;
|
||
|
ondragstart: ElementEventCallback<unknown, unknown>;
|
||
|
ondragend: ElementEventCallback<unknown, unknown>;
|
||
|
ondragenter: ElementEventCallback<unknown, unknown>;
|
||
|
ondragleave: ElementEventCallback<unknown, unknown>;
|
||
|
ondragover: ElementEventCallback<unknown, unknown>;
|
||
|
ondrop: ElementEventCallback<unknown, unknown>;
|
||
|
}
|
||
|
export interface ElementProps extends Partial<ElementEventHandlerProps>, Partial<Pick<Transformable, TransformProp>> {
|
||
|
name?: string;
|
||
|
ignore?: boolean;
|
||
|
isGroup?: boolean;
|
||
|
draggable?: boolean | 'horizontal' | 'vertical';
|
||
|
silent?: boolean;
|
||
|
ignoreClip?: boolean;
|
||
|
globalScaleRatio?: number;
|
||
|
textConfig?: ElementTextConfig;
|
||
|
textContent?: ZRText;
|
||
|
clipPath?: Path;
|
||
|
drift?: Element['drift'];
|
||
|
extra?: Dictionary<unknown>;
|
||
|
anid?: string;
|
||
|
}
|
||
|
export declare const PRESERVED_NORMAL_STATE = "__zr_normal__";
|
||
|
declare const PRIMARY_STATES_KEYS: ["x" | "y" | "originX" | "originY" | "anchorX" | "anchorY" | "rotation" | "scaleX" | "scaleY" | "skewX" | "skewY", "ignore"];
|
||
|
export declare type ElementStatePropNames = (typeof PRIMARY_STATES_KEYS)[number] | 'textConfig';
|
||
|
export declare type ElementState = Pick<ElementProps, ElementStatePropNames> & ElementCommonState;
|
||
|
export declare type ElementCommonState = {
|
||
|
hoverLayer?: boolean;
|
||
|
};
|
||
|
export declare type ElementCalculateTextPosition = (out: TextPositionCalculationResult, style: ElementTextConfig, rect: RectLike) => TextPositionCalculationResult;
|
||
|
interface Element<Props extends ElementProps = ElementProps> extends Transformable, Eventful<{
|
||
|
[key in ElementEventName]: (e: ElementEvent) => void | boolean;
|
||
|
} & {
|
||
|
[key in string]: (...args: any) => void | boolean;
|
||
|
}>, ElementEventHandlerProps {
|
||
|
}
|
||
|
declare class Element<Props extends ElementProps = ElementProps> {
|
||
|
id: number;
|
||
|
type: string;
|
||
|
name: string;
|
||
|
ignore: boolean;
|
||
|
silent: boolean;
|
||
|
isGroup: boolean;
|
||
|
draggable: boolean | 'horizontal' | 'vertical';
|
||
|
dragging: boolean;
|
||
|
parent: Group;
|
||
|
animators: Animator<any>[];
|
||
|
ignoreClip: boolean;
|
||
|
__hostTarget: Element;
|
||
|
__zr: ZRenderType;
|
||
|
__dirty: number;
|
||
|
__isRendered: boolean;
|
||
|
__inHover: boolean;
|
||
|
private _clipPath?;
|
||
|
private _textContent?;
|
||
|
private _textGuide?;
|
||
|
textConfig?: ElementTextConfig;
|
||
|
textGuideLineConfig?: ElementTextGuideLineConfig;
|
||
|
anid: string;
|
||
|
extra: Dictionary<unknown>;
|
||
|
currentStates?: string[];
|
||
|
prevStates?: string[];
|
||
|
states: Dictionary<ElementState>;
|
||
|
stateTransition: ElementAnimateConfig;
|
||
|
stateProxy?: (stateName: string, targetStates?: string[]) => ElementState;
|
||
|
protected _normalState: ElementState;
|
||
|
private _innerTextDefaultStyle;
|
||
|
constructor(props?: Props);
|
||
|
protected _init(props?: Props): void;
|
||
|
drift(dx: number, dy: number, e?: ElementEvent): void;
|
||
|
beforeUpdate(): void;
|
||
|
afterUpdate(): void;
|
||
|
update(): void;
|
||
|
updateInnerText(forceUpdate?: boolean): void;
|
||
|
protected canBeInsideText(): boolean;
|
||
|
protected getInsideTextFill(): string | undefined;
|
||
|
protected getInsideTextStroke(textFill: string): string | undefined;
|
||
|
protected getOutsideFill(): string | undefined;
|
||
|
protected getOutsideStroke(textFill: string): string;
|
||
|
traverse<Context>(cb: (this: Context, el: Element<Props>) => void, context?: Context): void;
|
||
|
protected attrKV(key: string, value: unknown): void;
|
||
|
hide(): void;
|
||
|
show(): void;
|
||
|
attr(keyOrObj: Props): this;
|
||
|
attr<T extends keyof Props>(keyOrObj: T, value: Props[T]): this;
|
||
|
saveCurrentToNormalState(toState: ElementState): void;
|
||
|
protected _innerSaveToNormal(toState: ElementState): void;
|
||
|
protected _savePrimaryToNormal(toState: Dictionary<any>, normalState: Dictionary<any>, primaryKeys: readonly string[]): void;
|
||
|
hasState(): boolean;
|
||
|
getState(name: string): ElementState;
|
||
|
ensureState(name: string): ElementState;
|
||
|
clearStates(noAnimation?: boolean): void;
|
||
|
useState(stateName: string, keepCurrentStates?: boolean, noAnimation?: boolean, forceUseHoverLayer?: boolean): ElementState;
|
||
|
useStates(states: string[], noAnimation?: boolean, forceUseHoverLayer?: boolean): void;
|
||
|
isSilent(): boolean;
|
||
|
private _updateAnimationTargets;
|
||
|
removeState(state: string): void;
|
||
|
replaceState(oldState: string, newState: string, forceAdd: boolean): void;
|
||
|
toggleState(state: string, enable: boolean): void;
|
||
|
protected _mergeStates(states: ElementState[]): ElementState;
|
||
|
protected _applyStateObj(stateName: string, state: ElementState, normalState: ElementState, keepCurrentStates: boolean, transition: boolean, animationCfg: ElementAnimateConfig): void;
|
||
|
private _attachComponent;
|
||
|
private _detachComponent;
|
||
|
getClipPath(): Path<import("./graphic/Path").PathProps>;
|
||
|
setClipPath(clipPath: Path): void;
|
||
|
removeClipPath(): void;
|
||
|
getTextContent(): ZRText;
|
||
|
setTextContent(textEl: ZRText): void;
|
||
|
setTextConfig(cfg: ElementTextConfig): void;
|
||
|
removeTextConfig(): void;
|
||
|
removeTextContent(): void;
|
||
|
getTextGuideLine(): Polyline;
|
||
|
setTextGuideLine(guideLine: Polyline): void;
|
||
|
removeTextGuideLine(): void;
|
||
|
markRedraw(): void;
|
||
|
dirty(): void;
|
||
|
private _toggleHoverLayerFlag;
|
||
|
addSelfToZr(zr: ZRenderType): void;
|
||
|
removeSelfFromZr(zr: ZRenderType): void;
|
||
|
animate(key?: string, loop?: boolean, allowDiscreteAnimation?: boolean): Animator<any>;
|
||
|
addAnimator(animator: Animator<any>, key: string): void;
|
||
|
updateDuringAnimation(key: string): void;
|
||
|
stopAnimation(scope?: string, forwardToLast?: boolean): this;
|
||
|
animateTo(target: Props, cfg?: ElementAnimateConfig, animationProps?: MapToType<Props, boolean>): void;
|
||
|
animateFrom(target: Props, cfg: ElementAnimateConfig, animationProps?: MapToType<Props, boolean>): void;
|
||
|
protected _transitionState(stateName: string, target: Props, cfg?: ElementAnimateConfig, animationProps?: MapToType<Props, boolean>): void;
|
||
|
getBoundingRect(): BoundingRect;
|
||
|
getPaintRect(): BoundingRect;
|
||
|
calculateTextPosition: ElementCalculateTextPosition;
|
||
|
protected static initDefaultProps: void;
|
||
|
}
|
||
|
export default Element;
|