@visactor/vchart 1.12.5 → 1.12.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/es5/index.js +1 -1
- package/build/index.js +447 -362
- package/build/index.min.js +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/cjs/chart/base/base-chart.js +2 -2
- package/cjs/chart/base/base-chart.js.map +1 -1
- package/cjs/chart/mosaic/mosaic.d.ts +0 -1
- package/cjs/chart/mosaic/mosaic.js +0 -3
- package/cjs/chart/mosaic/mosaic.js.map +1 -1
- package/cjs/chart/pie/interface.d.ts +2 -2
- package/cjs/chart/pie/interface.js.map +1 -1
- package/cjs/chart/polar/interface.d.ts +2 -0
- package/cjs/chart/polar/interface.js.map +1 -1
- package/cjs/compile/mark/compilable-mark.d.ts +1 -1
- package/cjs/compile/mark/compilable-mark.js +4 -4
- package/cjs/compile/mark/compilable-mark.js.map +1 -1
- package/cjs/compile/mark/interface.d.ts +1 -0
- package/cjs/compile/mark/interface.js.map +1 -1
- package/cjs/component/axis/base-axis.d.ts +1 -2
- package/cjs/component/axis/base-axis.js +0 -3
- package/cjs/component/axis/base-axis.js.map +1 -1
- package/cjs/component/axis/cartesian/axis.js +1 -1
- package/cjs/component/axis/cartesian/axis.js.map +1 -1
- package/cjs/component/axis/polar/axis.d.ts +0 -1
- package/cjs/component/axis/polar/axis.js +4 -20
- package/cjs/component/axis/polar/axis.js.map +1 -1
- package/cjs/component/axis/polar/interface/spec.d.ts +3 -1
- package/cjs/component/axis/polar/interface/spec.js.map +1 -1
- package/cjs/component/base/base-component.js +1 -3
- package/cjs/component/base/base-component.js.map +1 -1
- package/cjs/component/custom-mark/custom-mark.d.ts +0 -1
- package/cjs/component/custom-mark/custom-mark.js +1 -12
- package/cjs/component/custom-mark/custom-mark.js.map +1 -1
- package/cjs/component/label/base-label.d.ts +1 -2
- package/cjs/component/label/base-label.js +0 -3
- package/cjs/component/label/base-label.js.map +1 -1
- package/cjs/component/label/label.d.ts +0 -1
- package/cjs/component/label/label.js +2 -12
- package/cjs/component/label/label.js.map +1 -1
- package/cjs/component/label/total-label.d.ts +1 -1
- package/cjs/component/label/total-label.js +5 -12
- package/cjs/component/label/total-label.js.map +1 -1
- package/cjs/component/label/util.d.ts +1 -1
- package/cjs/component/label/util.js +12 -7
- package/cjs/component/label/util.js.map +1 -1
- package/cjs/component/legend/util.d.ts +2 -2
- package/cjs/constant/correlation.js +1 -2
- package/cjs/constant/layout.js +2 -1
- package/cjs/core/index.d.ts +1 -1
- package/cjs/core/index.js +1 -1
- package/cjs/core/index.js.map +1 -1
- package/cjs/core/vchart.d.ts +1 -1
- package/cjs/core/vchart.js +20 -20
- package/cjs/core/vchart.js.map +1 -1
- package/cjs/region/region.js +2 -3
- package/cjs/region/region.js.map +1 -1
- package/cjs/series/base/base-series.d.ts +6 -5
- package/cjs/series/base/base-series.js +22 -11
- package/cjs/series/base/base-series.js.map +1 -1
- package/cjs/series/base/constant.js +1 -0
- package/cjs/series/base/constant.js.map +1 -1
- package/cjs/series/gauge/interface.d.ts +1 -1
- package/cjs/series/gauge/interface.js.map +1 -1
- package/cjs/series/polar/animation.d.ts +8 -11
- package/cjs/series/polar/animation.js +18 -23
- package/cjs/series/polar/animation.js.map +1 -1
- package/cjs/series/radar/animation.d.ts +0 -3
- package/cjs/series/radar/animation.js +4 -4
- package/cjs/series/radar/animation.js.map +1 -1
- package/cjs/series/radar/radar.js +10 -7
- package/cjs/series/radar/radar.js.map +1 -1
- package/cjs/typings/spec/common.d.ts +5 -2
- package/cjs/typings/spec/common.js.map +1 -1
- package/esm/chart/base/base-chart.js +2 -2
- package/esm/chart/base/base-chart.js.map +1 -1
- package/esm/chart/mosaic/mosaic.d.ts +0 -1
- package/esm/chart/mosaic/mosaic.js +0 -3
- package/esm/chart/mosaic/mosaic.js.map +1 -1
- package/esm/chart/pie/interface.d.ts +2 -2
- package/esm/chart/pie/interface.js.map +1 -1
- package/esm/chart/polar/interface.d.ts +2 -0
- package/esm/chart/polar/interface.js.map +1 -1
- package/esm/compile/mark/compilable-mark.d.ts +1 -1
- package/esm/compile/mark/compilable-mark.js +5 -4
- package/esm/compile/mark/compilable-mark.js.map +1 -1
- package/esm/compile/mark/interface.d.ts +1 -0
- package/esm/compile/mark/interface.js.map +1 -1
- package/esm/component/axis/base-axis.d.ts +1 -2
- package/esm/component/axis/base-axis.js +0 -3
- package/esm/component/axis/base-axis.js.map +1 -1
- package/esm/component/axis/cartesian/axis.js +1 -1
- package/esm/component/axis/cartesian/axis.js.map +1 -1
- package/esm/component/axis/polar/axis.d.ts +0 -1
- package/esm/component/axis/polar/axis.js +4 -22
- package/esm/component/axis/polar/axis.js.map +1 -1
- package/esm/component/axis/polar/interface/spec.d.ts +3 -1
- package/esm/component/axis/polar/interface/spec.js.map +1 -1
- package/esm/component/base/base-component.js +1 -3
- package/esm/component/base/base-component.js.map +1 -1
- package/esm/component/custom-mark/custom-mark.d.ts +0 -1
- package/esm/component/custom-mark/custom-mark.js +0 -13
- package/esm/component/custom-mark/custom-mark.js.map +1 -1
- package/esm/component/label/base-label.d.ts +1 -2
- package/esm/component/label/base-label.js +0 -3
- package/esm/component/label/base-label.js.map +1 -1
- package/esm/component/label/label.d.ts +0 -1
- package/esm/component/label/label.js +1 -13
- package/esm/component/label/label.js.map +1 -1
- package/esm/component/label/total-label.d.ts +1 -1
- package/esm/component/label/total-label.js +4 -13
- package/esm/component/label/total-label.js.map +1 -1
- package/esm/component/label/util.d.ts +1 -1
- package/esm/component/label/util.js +12 -7
- package/esm/component/label/util.js.map +1 -1
- package/esm/component/legend/util.d.ts +2 -2
- package/esm/constant/correlation.js +1 -2
- package/esm/constant/layout.js +2 -1
- package/esm/core/index.d.ts +1 -1
- package/esm/core/index.js +1 -1
- package/esm/core/index.js.map +1 -1
- package/esm/core/vchart.d.ts +1 -1
- package/esm/core/vchart.js +22 -22
- package/esm/core/vchart.js.map +1 -1
- package/esm/region/region.js +2 -3
- package/esm/region/region.js.map +1 -1
- package/esm/series/base/base-series.d.ts +6 -5
- package/esm/series/base/base-series.js +20 -10
- package/esm/series/base/base-series.js.map +1 -1
- package/esm/series/base/constant.js +1 -0
- package/esm/series/base/constant.js.map +1 -1
- package/esm/series/gauge/interface.d.ts +1 -1
- package/esm/series/gauge/interface.js.map +1 -1
- package/esm/series/polar/animation.d.ts +8 -11
- package/esm/series/polar/animation.js +17 -24
- package/esm/series/polar/animation.js.map +1 -1
- package/esm/series/radar/animation.d.ts +0 -3
- package/esm/series/radar/animation.js +4 -4
- package/esm/series/radar/animation.js.map +1 -1
- package/esm/series/radar/radar.js +10 -7
- package/esm/series/radar/radar.js.map +1 -1
- package/esm/typings/spec/common.d.ts +5 -2
- package/esm/typings/spec/common.js.map +1 -1
- package/package.json +19 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/series/base/constant.ts"],"names":[],"mappings":";;;AAGA,8CAA6C;AAEhC,QAAA,cAAc,GAAkB;IAC3C,SAA0B,EAAE,EAAE,IAAI,SAA0B,EAAE,IAAI,QAAmB,EAAE;CACxF,CAAC;AAEW,QAAA,MAAM,GAAG,GAAG,aAAM,SAAS,CAAC;AAC5B,QAAA,OAAO,GAAG,GAAG,aAAM,UAAU,CAAC;AAC9B,QAAA,MAAM,GAAG,GAAG,aAAM,SAAS,CAAC;AAC5B,QAAA,OAAO,GAAG,GAAG,aAAM,UAAU,CAAC;AAE9B,QAAA,4BAA4B,GAA4B;IACnE,IAAI,EAAE,IAAI;CACX,CAAC;AAEW,QAAA,6BAA6B,GAA4B;IACpE,SAAS,EAAE,IAAI;IACf,eAAe,EAAE,IAAI;IACrB,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,IAAI;IACrB,aAAa,EAAE,IAAI;IACnB,eAAe,EAAE,IAAI;CACtB,CAAC","file":"constant.js","sourcesContent":["import { MarkTypeEnum } from '../../mark/interface/type';\nimport { SeriesMarkNameEnum } from '../interface/type';\nimport type { SeriesMarkMap } from '../interface/common';\nimport { PREFIX } from '../../constant/base';\n\nexport const baseSeriesMark: SeriesMarkMap = {\n [SeriesMarkNameEnum.label]: { name: SeriesMarkNameEnum.label, type: MarkTypeEnum.text }\n};\n\nexport const RECT_X = `${PREFIX}_rect_x`;\nexport const RECT_X1 = `${PREFIX}_rect_x1`;\nexport const RECT_Y = `${PREFIX}_rect_y`;\nexport const RECT_Y1 = `${PREFIX}_rect_y1`;\n\nexport const defaultSeriesIgnoreCheckKeys: { [key: string]: true } = {\n data: true\n};\n\nexport const defaultSeriesCompileCheckKeys: { [key: string]: true } = {\n animation: true,\n animationAppear: true,\n animationEnter: true,\n animationUpdate: true,\n animationExit: true,\n animationNormal: true\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/series/base/constant.ts"],"names":[],"mappings":";;;AAGA,8CAA6C;AAEhC,QAAA,cAAc,GAAkB;IAC3C,SAA0B,EAAE,EAAE,IAAI,SAA0B,EAAE,IAAI,QAAmB,EAAE;CACxF,CAAC;AAEW,QAAA,MAAM,GAAG,GAAG,aAAM,SAAS,CAAC;AAC5B,QAAA,OAAO,GAAG,GAAG,aAAM,UAAU,CAAC;AAC9B,QAAA,MAAM,GAAG,GAAG,aAAM,SAAS,CAAC;AAC5B,QAAA,OAAO,GAAG,GAAG,aAAM,UAAU,CAAC;AAE9B,QAAA,4BAA4B,GAA4B;IACnE,IAAI,EAAE,IAAI;CACX,CAAC;AAEW,QAAA,6BAA6B,GAA4B;IACpE,WAAW,EAAE,IAAI;IACjB,SAAS,EAAE,IAAI;IACf,eAAe,EAAE,IAAI;IACrB,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,IAAI;IACrB,aAAa,EAAE,IAAI;IACnB,eAAe,EAAE,IAAI;CACtB,CAAC","file":"constant.js","sourcesContent":["import { MarkTypeEnum } from '../../mark/interface/type';\nimport { SeriesMarkNameEnum } from '../interface/type';\nimport type { SeriesMarkMap } from '../interface/common';\nimport { PREFIX } from '../../constant/base';\n\nexport const baseSeriesMark: SeriesMarkMap = {\n [SeriesMarkNameEnum.label]: { name: SeriesMarkNameEnum.label, type: MarkTypeEnum.text }\n};\n\nexport const RECT_X = `${PREFIX}_rect_x`;\nexport const RECT_X1 = `${PREFIX}_rect_x1`;\nexport const RECT_Y = `${PREFIX}_rect_y`;\nexport const RECT_Y1 = `${PREFIX}_rect_y1`;\n\nexport const defaultSeriesIgnoreCheckKeys: { [key: string]: true } = {\n data: true\n};\n\nexport const defaultSeriesCompileCheckKeys: { [key: string]: true } = {\n invalidType: true,\n animation: true,\n animationAppear: true,\n animationEnter: true,\n animationUpdate: true,\n animationExit: true,\n animationNormal: true\n};\n"]}
|
|
@@ -15,7 +15,7 @@ export interface IGaugePointerSeriesSpec extends IProgressLikeSeriesSpec, IAnima
|
|
|
15
15
|
[SeriesMarkNameEnum.pointer]?: IMarkSpec<IPathMarkSpec | IRectMarkSpec> & PointerMarkSpec;
|
|
16
16
|
}
|
|
17
17
|
export type PointerMarkSpec = {
|
|
18
|
-
type
|
|
18
|
+
type?: 'path' | 'rect';
|
|
19
19
|
width?: number;
|
|
20
20
|
height?: number;
|
|
21
21
|
innerPadding?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/series/gauge/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { IMarkSpec, IMarkTheme } from '../../typings/spec';\nimport type { IArcMarkSpec, IPathMarkSpec, IRectMarkSpec } from '../../typings/visual';\nimport type { IProgressLikeSeriesSpec, IProgressLikeSeriesTheme } from '../polar/progress-like/interface';\nimport type { IAnimationSpec } from '../../animation/spec';\nimport type { ProgressLikeAppearPreset } from '../polar/progress-like';\nimport type { SeriesMarkNameEnum } from '../interface/type';\nimport type { ILabelSpec } from '../../component/label/interface';\n\nexport type GaugePointerMarks = 'pointer' | 'pin' | 'pinBackground';\n\nexport interface IGaugePointerSeriesSpec\n extends IProgressLikeSeriesSpec,\n IAnimationSpec<GaugePointerMarks, ProgressLikeAppearPreset> {\n type: 'gaugePointer';\n\n /** 数值字段(可影响指针角度) */\n valueField: string | string[];\n\n /** 半径字段(可影响指针长度,GaugePointerSeries 没有 categoryField) */\n radiusField: string;\n\n /** 图钉前景样式 */\n [SeriesMarkNameEnum.pin]?: IMarkSpec<IPathMarkSpec> & PinMarkSpec;\n /** 图钉背景样式 */\n [SeriesMarkNameEnum.pinBackground]?: IMarkSpec<IPathMarkSpec> & PinMarkSpec;\n /** 指针样式 */\n [SeriesMarkNameEnum.pointer]?: IMarkSpec<IPathMarkSpec | IRectMarkSpec> & PointerMarkSpec;\n}\n\nexport type PointerMarkSpec = {\n type
|
|
1
|
+
{"version":3,"sources":["../src/series/gauge/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { IMarkSpec, IMarkTheme } from '../../typings/spec';\nimport type { IArcMarkSpec, IPathMarkSpec, IRectMarkSpec } from '../../typings/visual';\nimport type { IProgressLikeSeriesSpec, IProgressLikeSeriesTheme } from '../polar/progress-like/interface';\nimport type { IAnimationSpec } from '../../animation/spec';\nimport type { ProgressLikeAppearPreset } from '../polar/progress-like';\nimport type { SeriesMarkNameEnum } from '../interface/type';\nimport type { ILabelSpec } from '../../component/label/interface';\n\nexport type GaugePointerMarks = 'pointer' | 'pin' | 'pinBackground';\n\nexport interface IGaugePointerSeriesSpec\n extends IProgressLikeSeriesSpec,\n IAnimationSpec<GaugePointerMarks, ProgressLikeAppearPreset> {\n type: 'gaugePointer';\n\n /** 数值字段(可影响指针角度) */\n valueField: string | string[];\n\n /** 半径字段(可影响指针长度,GaugePointerSeries 没有 categoryField) */\n radiusField: string;\n\n /** 图钉前景样式 */\n [SeriesMarkNameEnum.pin]?: IMarkSpec<IPathMarkSpec> & PinMarkSpec;\n /** 图钉背景样式 */\n [SeriesMarkNameEnum.pinBackground]?: IMarkSpec<IPathMarkSpec> & PinMarkSpec;\n /** 指针样式 */\n [SeriesMarkNameEnum.pointer]?: IMarkSpec<IPathMarkSpec | IRectMarkSpec> & PointerMarkSpec;\n}\n\nexport type PointerMarkSpec = {\n type?: 'path' | 'rect';\n\n /** 指针宽度比例(0~1) */\n width?: number;\n /** 指针长度比例(0~1)(为空则挂载 radius) */\n height?: number;\n /** 指针靠近圆心的一端离圆心的距离 */\n innerPadding?: number;\n /** 指针靠近边缘的一端离边缘的距离 */\n outerPadding?: number;\n\n /** 中心点坐标(0~1) */\n center?: [number, number];\n\n /** 是否定位于极坐标系的中心,默认为 true。如果为 false,则位置受 innerRadius 影响 */\n isOnCenter?: boolean;\n};\n\nexport type PinMarkSpec = {\n /** 宽度 */\n width?: number;\n /** 高度 */\n height?: number;\n /** 是否定位于极坐标系的中心,默认为 true。如果为 false,则位置受 innerRadius 影响 */\n isOnCenter?: boolean;\n};\n\nexport interface IGaugePointerSeriesTheme extends IProgressLikeSeriesTheme {\n /** 图钉前景样式 */\n [SeriesMarkNameEnum.pin]?: Partial<IMarkTheme<IPathMarkSpec> & PinMarkSpec>;\n /** 图钉背景样式 */\n [SeriesMarkNameEnum.pinBackground]?: Partial<IMarkTheme<IPathMarkSpec> & PinMarkSpec>;\n /** 指针样式 */\n [SeriesMarkNameEnum.pointer]?: Partial<IMarkTheme<IPathMarkSpec | IRectMarkSpec> & PointerMarkSpec>;\n}\n\nexport type GaugeMarks = 'segment' | 'track';\n\nexport interface IGaugeSeriesSpec\n extends IProgressLikeSeriesSpec,\n IAnimationSpec<GaugeMarks, ProgressLikeAppearPreset> {\n type: 'gauge';\n\n /** 扇区间隔角度 */\n padAngle?: number;\n\n /** 扇区样式 */\n [SeriesMarkNameEnum.segment]?: IMarkSpec<IArcMarkSpec>;\n /** 背景样式 */\n [SeriesMarkNameEnum.track]?: IMarkSpec<IArcMarkSpec>;\n /** 标签样式 */\n [SeriesMarkNameEnum.label]?: IGaugeLabelSpec;\n}\n\nexport interface IGaugeSeriesTheme extends IProgressLikeSeriesTheme {\n /** 扇区间隔角度 */\n padAngle?: number;\n\n /** 扇区样式 */\n [SeriesMarkNameEnum.segment]?: Partial<IMarkTheme<IArcMarkSpec>>;\n /** 背景样式 */\n [SeriesMarkNameEnum.track]?: Partial<IMarkTheme<IArcMarkSpec>>;\n /** 标签样式 */\n [SeriesMarkNameEnum.label]?: IGaugeLabelSpec;\n}\n\nexport type IGaugeLabelSpec = ILabelSpec;\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { EasingType } from '@visactor/vrender-core';
|
|
2
|
+
import type { IPointLike } from '@visactor/vutils';
|
|
2
3
|
import { ACustomAnimate, TagPointsUpdate } from '@visactor/vrender-core';
|
|
3
|
-
import type { IPolarAxisHelper } from '../../component/axis';
|
|
4
4
|
export declare class PolarPointUpdate extends ACustomAnimate<{
|
|
5
5
|
x: number;
|
|
6
6
|
y: number;
|
|
@@ -10,18 +10,17 @@ export declare class PolarPointUpdate extends ACustomAnimate<{
|
|
|
10
10
|
private _fromRadius;
|
|
11
11
|
private _toAngle;
|
|
12
12
|
private _toRadius;
|
|
13
|
-
private
|
|
14
|
-
private
|
|
13
|
+
private _center;
|
|
14
|
+
private _prevCenter;
|
|
15
15
|
constructor(from: {
|
|
16
16
|
x: number;
|
|
17
17
|
y: number;
|
|
18
|
+
center: IPointLike;
|
|
18
19
|
}, to: {
|
|
19
20
|
x: number;
|
|
20
21
|
y: number;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
coordToPoint: IPolarAxisHelper['coordToPoint'];
|
|
24
|
-
});
|
|
22
|
+
center: IPointLike;
|
|
23
|
+
}, duration: number, easing: EasingType, params: any);
|
|
25
24
|
getEndProps(): Record<string, any>;
|
|
26
25
|
onBind(): void;
|
|
27
26
|
onUpdate(end: boolean, ratio: number, out: Record<string, any>): void;
|
|
@@ -29,12 +28,10 @@ export declare class PolarPointUpdate extends ACustomAnimate<{
|
|
|
29
28
|
export declare class PolarTagPointsUpdate extends TagPointsUpdate {
|
|
30
29
|
private points;
|
|
31
30
|
private interpolatePoints;
|
|
32
|
-
private
|
|
33
|
-
private
|
|
31
|
+
private _center;
|
|
32
|
+
private _prevCenter;
|
|
34
33
|
constructor(from: any, to: any, duration: number, easing: EasingType, params?: {
|
|
35
34
|
newPointAnimateType?: 'grow' | 'appear';
|
|
36
|
-
pointToCoord: IPolarAxisHelper['pointToCoord'];
|
|
37
|
-
coordToPoint: IPolarAxisHelper['coordToPoint'];
|
|
38
35
|
});
|
|
39
36
|
onUpdate(end: boolean, ratio: number, out: Record<string, any>): void;
|
|
40
37
|
private _interpolationSinglePoint;
|
|
@@ -8,19 +8,15 @@ const vrender_core_1 = require("@visactor/vrender-core"), vutils_1 = require("@v
|
|
|
8
8
|
|
|
9
9
|
class PolarPointUpdate extends vrender_core_1.ACustomAnimate {
|
|
10
10
|
constructor(from, to, duration, easing, params) {
|
|
11
|
-
super(from, to, duration, easing, params)
|
|
12
|
-
|
|
13
|
-
(0, vutils_1.isFunction)(pointToCoord) && (0, vutils_1.isFunction)(coordToPoint) || (this.valid = !1),
|
|
14
|
-
this._pointToCoord = pointToCoord, this._coordToPoint = coordToPoint;
|
|
11
|
+
super(from, to, duration, easing, params), this._center = to.center, this._prevCenter = from.center,
|
|
12
|
+
this._center && this._prevCenter || (this.valid = !1);
|
|
15
13
|
}
|
|
16
14
|
getEndProps() {
|
|
17
|
-
return !1 === this.valid ? {} : this.
|
|
18
|
-
angle: this._toAngle,
|
|
19
|
-
radius: this._toRadius
|
|
20
|
-
});
|
|
15
|
+
return !1 === this.valid ? {} : (0, vutils_1.polarToCartesian)(this._center, this._toRadius, this._toAngle);
|
|
21
16
|
}
|
|
22
17
|
onBind() {
|
|
23
|
-
const {angle: fromAngle, radius: fromRadius} =
|
|
18
|
+
const {angle: fromAngle, radius: fromRadius} = (0, vutils_1.cartesianToPolar)(this.from, this._prevCenter), {angle: toAngle, radius: toRadius} = (0,
|
|
19
|
+
vutils_1.cartesianToPolar)(this.to, this._center);
|
|
24
20
|
(0, vutils_1.isValidNumber)(toAngle * toRadius) || (this.valid = !1), this._fromAngle = (0,
|
|
25
21
|
vutils_1.isValidNumber)(fromAngle) ? fromAngle : toAngle, this._fromRadius = (0,
|
|
26
22
|
vutils_1.isValidNumber)(fromRadius) ? fromRadius : toRadius, this._toAngle = toAngle,
|
|
@@ -31,12 +27,12 @@ class PolarPointUpdate extends vrender_core_1.ACustomAnimate {
|
|
|
31
27
|
if (!1 === this.valid) return out.x = this.to.x, void (out.y = this.to.y);
|
|
32
28
|
if (end) {
|
|
33
29
|
const {x: x, y: y} = this.getEndProps();
|
|
34
|
-
out.x = x, out.y = y;
|
|
30
|
+
out.x = x, out.y = y, out.center = this._center;
|
|
35
31
|
} else {
|
|
36
|
-
const {x: x, y: y} =
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
});
|
|
32
|
+
const {x: x, y: y} = (0, vutils_1.polarToCartesian)({
|
|
33
|
+
x: this._prevCenter.x + (this._center.x - this._prevCenter.x) * ratio,
|
|
34
|
+
y: this._prevCenter.y + (this._center.y - this._prevCenter.y) * ratio
|
|
35
|
+
}, this._fromRadius + (this._toRadius - this._fromRadius) * ratio, this._fromAngle + (this._toAngle - this._fromAngle) * ratio);
|
|
40
36
|
out.x = x, out.y = y;
|
|
41
37
|
}
|
|
42
38
|
}
|
|
@@ -46,27 +42,26 @@ exports.PolarPointUpdate = PolarPointUpdate;
|
|
|
46
42
|
|
|
47
43
|
class PolarTagPointsUpdate extends vrender_core_1.TagPointsUpdate {
|
|
48
44
|
constructor(from, to, duration, easing, params) {
|
|
49
|
-
super(from, to, duration, easing, params);
|
|
50
|
-
const pointToCoord = this.params.pointToCoord, coordToPoint = this.params.coordToPoint;
|
|
51
|
-
this._pointToCoord = pointToCoord, this._coordToPoint = coordToPoint;
|
|
45
|
+
super(from, to, duration, easing, params), this._center = to.center, this._prevCenter = from.center;
|
|
52
46
|
}
|
|
53
47
|
onUpdate(end, ratio, out) {
|
|
54
48
|
this.points = this.points.map(((point, index) => {
|
|
55
49
|
const newPoint = this.polarPointInterpolation(this.interpolatePoints[index][0], this.interpolatePoints[index][1], ratio);
|
|
56
|
-
return newPoint.context = point.context, newPoint;
|
|
50
|
+
return end && (out.center = this._center), newPoint.context = point.context, newPoint;
|
|
57
51
|
})), out.points = this.points;
|
|
58
52
|
}
|
|
59
53
|
_interpolationSinglePoint(pointA, pointB, ratio) {
|
|
60
54
|
if (!(0, util_1.isValidPoint)(pointA) && !(0, util_1.isValidPoint)(pointB)) return pointB;
|
|
61
|
-
const polarPointA =
|
|
55
|
+
const polarPointA = (0, vutils_1.cartesianToPolar)(pointA, this._prevCenter), polarPointB = (0,
|
|
56
|
+
vutils_1.cartesianToPolar)(pointB, this._center);
|
|
62
57
|
let angleA = (0, util_1.normalizeAngle)(polarPointA.angle), angleB = (0, util_1.normalizeAngle)(polarPointB.angle);
|
|
63
58
|
!(0, vutils_1.isValidNumber)(angleA) && (0, vutils_1.isValidNumber)(angleB) && (angleA = angleB),
|
|
64
59
|
(0, vutils_1.isValidNumber)(angleA) && !(0, vutils_1.isValidNumber)(angleB) && (angleB = angleA);
|
|
65
60
|
const angle = angleA + (angleB - angleA) * ratio, radius = polarPointA.radius + (polarPointB.radius - polarPointA.radius) * ratio;
|
|
66
|
-
return
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
});
|
|
61
|
+
return (0, vutils_1.polarToCartesian)({
|
|
62
|
+
x: this._prevCenter.x + (this._center.x - this._prevCenter.x) * ratio,
|
|
63
|
+
y: this._prevCenter.y + (this._center.y - this._prevCenter.y) * ratio
|
|
64
|
+
}, radius, angle);
|
|
70
65
|
}
|
|
71
66
|
polarPointInterpolation(pointA, pointB, ratio) {
|
|
72
67
|
const {x: x, y: y} = this._interpolationSinglePoint(pointA, pointB, ratio), {x: x1, y: y1} = this._interpolationSinglePoint({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/series/polar/animation.ts"],"names":[],"mappings":"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","file":"animation.js","sourcesContent":["/* eslint-disable no-duplicate-imports */\nimport type { EasingType } from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\nimport { ACustomAnimate, TagPointsUpdate } from '@visactor/vrender-core';\nimport { Point, isFunction, isNil, isValidNumber } from '@visactor/vutils';\nimport type { IPolarAxisHelper } from '../../component/axis';\nimport { isClose, isValidPoint, normalizeAngle } from '../../util';\nimport type { IPoint } from '../../typings';\n\nexport class PolarPointUpdate extends ACustomAnimate<{ x: number; y: number }> {\n declare valid: boolean;\n\n private _fromAngle: number;\n private _fromRadius: number;\n\n private _toAngle: number;\n private _toRadius: number;\n\n private _pointToCoord: IPolarAxisHelper['pointToCoord'];\n private _coordToPoint: IPolarAxisHelper['coordToPoint'];\n\n constructor(\n from: { x: number; y: number },\n to: { x: number; y: number },\n duration: number,\n easing: EasingType,\n params: {\n pointToCoord: IPolarAxisHelper['pointToCoord'];\n coordToPoint: IPolarAxisHelper['coordToPoint'];\n }\n ) {\n super(from, to, duration, easing, params);\n\n const pointToCoord = this.params.pointToCoord as IPolarAxisHelper['pointToCoord'];\n const coordToPoint = this.params.coordToPoint as IPolarAxisHelper['coordToPoint'];\n\n if (!isFunction(pointToCoord) || !isFunction(coordToPoint)) {\n this.valid = false;\n }\n this._pointToCoord = pointToCoord;\n this._coordToPoint = coordToPoint;\n }\n\n getEndProps(): Record<string, any> {\n if (this.valid === false) {\n return {};\n }\n\n return this._coordToPoint({ angle: this._toAngle, radius: this._toRadius });\n }\n\n onBind(): void {\n const { angle: fromAngle, radius: fromRadius } = this._pointToCoord(this.from);\n\n const { angle: toAngle, radius: toRadius } = this._pointToCoord(this.to);\n if (!isValidNumber(toAngle * toRadius)) {\n this.valid = false;\n }\n this._fromAngle = isValidNumber(fromAngle) ? fromAngle : toAngle;\n this._fromRadius = isValidNumber(fromRadius) ? fromRadius : toRadius;\n this._toAngle = toAngle;\n this._toRadius = toRadius;\n\n if (isClose(this._fromAngle, this._toAngle) && isClose(this._fromRadius, this._toRadius)) {\n this.valid = false;\n }\n }\n\n onUpdate(end: boolean, ratio: number, out: Record<string, any>): void {\n if (this.valid === false) {\n out.x = this.to.x;\n out.y = this.to.y;\n return;\n }\n if (end) {\n const { x, y } = this.getEndProps();\n out.x = x;\n out.y = y;\n } else {\n const { x, y } = this._coordToPoint({\n angle: this._fromAngle + (this._toAngle - this._fromAngle) * ratio,\n radius: this._fromRadius + (this._toRadius - this._fromRadius) * ratio\n });\n out.x = x;\n out.y = y;\n }\n }\n}\n\n// @ts-ignore\n// FIXME: some private attribute should be changed to protected for better inheritance\nexport class PolarTagPointsUpdate extends TagPointsUpdate {\n private declare points: IPointLike[];\n private declare interpolatePoints: [IPointLike, IPointLike][];\n\n private _pointToCoord: IPolarAxisHelper['pointToCoord'];\n private _coordToPoint: IPolarAxisHelper['coordToPoint'];\n\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params?: {\n newPointAnimateType?: 'grow' | 'appear';\n pointToCoord: IPolarAxisHelper['pointToCoord'];\n coordToPoint: IPolarAxisHelper['coordToPoint'];\n }\n ) {\n super(from, to, duration, easing, params);\n const pointToCoord = this.params.pointToCoord as IPolarAxisHelper['pointToCoord'];\n const coordToPoint = this.params.coordToPoint as IPolarAxisHelper['coordToPoint'];\n this._pointToCoord = pointToCoord;\n this._coordToPoint = coordToPoint;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record<string, any>): void {\n // if not create new points, multi points animation might not work well.\n this.points = this.points.map((point, index) => {\n const newPoint = this.polarPointInterpolation(\n this.interpolatePoints[index][0],\n this.interpolatePoints[index][1],\n ratio\n );\n\n newPoint.context = point.context;\n return newPoint;\n });\n out.points = this.points;\n }\n\n private _interpolationSinglePoint(pointA: IPoint, pointB: IPoint, ratio: number): IPoint {\n if (!isValidPoint(pointA) && !isValidPoint(pointB)) {\n return pointB;\n }\n const polarPointA = this._pointToCoord(pointA);\n const polarPointB = this._pointToCoord(pointB);\n let angleA = normalizeAngle(polarPointA.angle);\n let angleB = normalizeAngle(polarPointB.angle);\n\n // handle center point radius\n if (!isValidNumber(angleA) && isValidNumber(angleB)) {\n angleA = angleB;\n }\n if (isValidNumber(angleA) && !isValidNumber(angleB)) {\n angleB = angleA;\n }\n const angle = angleA + (angleB - angleA) * ratio;\n const radius = polarPointA.radius + (polarPointB.radius - polarPointA.radius) * ratio;\n\n return this._coordToPoint({ angle, radius });\n }\n\n private polarPointInterpolation(pointA: IPointLike, pointB: IPointLike, ratio: number): IPointLike {\n const { x, y } = this._interpolationSinglePoint(pointA, pointB, ratio);\n const { x: x1, y: y1 } = this._interpolationSinglePoint(\n {\n x: pointA.x1,\n y: pointA.y1\n },\n {\n x: pointB.x1,\n y: pointB.y1\n },\n ratio\n );\n\n const point = new Point(x as number, y as number, x1, y1);\n point.defined = pointB.defined;\n return point;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/series/polar/animation.ts"],"names":[],"mappings":";;;AAGA,yDAAyE;AACzE,6CAA4F;AAC5F,qCAAmE;AAGnE,MAAa,gBAAiB,SAAQ,6BAAwC;IAY5E,YACE,IAAkD,EAClD,EAAgD,EAChD,QAAgB,EAChB,MAAkB,EAClB,MAAW;QAEX,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACtC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACpB;IACH,CAAC;IAED,WAAW;QACT,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;YACxB,OAAO,EAAE,CAAC;SACX;QACD,OAAO,IAAA,yBAAgB,EAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvE,CAAC;IAED,MAAM;QACJ,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAA,yBAAgB,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/F,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,yBAAgB,EAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACrF,IAAI,CAAC,IAAA,sBAAa,EAAC,OAAO,GAAG,QAAQ,CAAC,EAAE;YACtC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACpB;QACD,IAAI,CAAC,UAAU,GAAG,IAAA,sBAAa,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;QACjE,IAAI,CAAC,WAAW,GAAG,IAAA,sBAAa,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;QACrE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,IAAA,cAAO,EAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAA,cAAO,EAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE;YACxF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACpB;IACH,CAAC;IAED,QAAQ,CAAC,GAAY,EAAE,KAAa,EAAE,GAAwB;QAC5D,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;YACxB,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAClB,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAClB,OAAO;SACR;QACD,IAAI,GAAG,EAAE;YACP,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACpC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACV,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACV,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;SAC3B;aAAM;YACL,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAA,yBAAgB,EAC/B;gBACE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK;gBACrE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK;aACtE,EACD,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,KAAK,EAC9D,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,KAAK,CAC5D,CAAC;YACF,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACV,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;SACX;IACH,CAAC;CACF;AAzED,4CAyEC;AAID,MAAa,oBAAqB,SAAQ,8BAAe;IAOvD,YACE,IAAS,EACT,EAAO,EACP,QAAgB,EAChB,MAAkB,EAClB,MAEC;QAED,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;IACjC,CAAC;IACD,QAAQ,CAAC,GAAY,EAAE,KAAa,EAAE,GAAwB;QAE5D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAC3C,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAChC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAChC,KAAK,CACN,CAAC;YACF,IAAI,GAAG,EAAE;gBACP,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;aAC3B;YACD,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YACjC,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,CAAC;IAEO,yBAAyB,CAAC,MAAc,EAAE,MAAc,EAAE,KAAa;QAC7E,IAAI,CAAC,IAAA,mBAAY,EAAC,MAAM,CAAC,IAAI,CAAC,IAAA,mBAAY,EAAC,MAAM,CAAC,EAAE;YAClD,OAAO,MAAM,CAAC;SACf;QACD,MAAM,WAAW,GAAG,IAAA,yBAAgB,EAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/D,MAAM,WAAW,GAAG,IAAA,yBAAgB,EAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3D,IAAI,MAAM,GAAG,IAAA,qBAAc,EAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,MAAM,GAAG,IAAA,qBAAc,EAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAG/C,IAAI,CAAC,IAAA,sBAAa,EAAC,MAAM,CAAC,IAAI,IAAA,sBAAa,EAAC,MAAM,CAAC,EAAE;YACnD,MAAM,GAAG,MAAM,CAAC;SACjB;QACD,IAAI,IAAA,sBAAa,EAAC,MAAM,CAAC,IAAI,CAAC,IAAA,sBAAa,EAAC,MAAM,CAAC,EAAE;YACnD,MAAM,GAAG,MAAM,CAAC;SACjB;QACD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC;QACjD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;QAEtF,OAAO,IAAA,yBAAgB,EACrB;YACE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK;YACrE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK;SACtE,EACD,MAAM,EACN,KAAK,CACN,CAAC;IACJ,CAAC;IAEO,uBAAuB,CAAC,MAAkB,EAAE,MAAkB,EAAE,KAAa;QACnF,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACvE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,yBAAyB,CACrD;YACE,CAAC,EAAE,MAAM,CAAC,EAAE;YACZ,CAAC,EAAE,MAAM,CAAC,EAAE;SACb,EACD;YACE,CAAC,EAAE,MAAM,CAAC,EAAE;YACZ,CAAC,EAAE,MAAM,CAAC,EAAE;SACb,EACD,KAAK,CACN,CAAC;QAEF,MAAM,KAAK,GAAG,IAAI,cAAK,CAAC,CAAW,EAAE,CAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1D,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AApFD,oDAoFC","file":"animation.js","sourcesContent":["/* eslint-disable no-duplicate-imports */\nimport type { EasingType } from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\nimport { ACustomAnimate, TagPointsUpdate } from '@visactor/vrender-core';\nimport { Point, isValidNumber, polarToCartesian, cartesianToPolar } from '@visactor/vutils';\nimport { isClose, isValidPoint, normalizeAngle } from '../../util';\nimport type { IPoint } from '../../typings';\n\nexport class PolarPointUpdate extends ACustomAnimate<{ x: number; y: number }> {\n declare valid: boolean;\n\n private _fromAngle: number;\n private _fromRadius: number;\n\n private _toAngle: number;\n private _toRadius: number;\n\n private _center: IPointLike;\n private _prevCenter: IPointLike;\n\n constructor(\n from: { x: number; y: number; center: IPointLike },\n to: { x: number; y: number; center: IPointLike },\n duration: number,\n easing: EasingType,\n params: any\n ) {\n super(from, to, duration, easing, params);\n this._center = to.center;\n this._prevCenter = from.center;\n if (!this._center || !this._prevCenter) {\n this.valid = false;\n }\n }\n\n getEndProps(): Record<string, any> {\n if (this.valid === false) {\n return {};\n }\n return polarToCartesian(this._center, this._toRadius, this._toAngle);\n }\n\n onBind(): void {\n const { angle: fromAngle, radius: fromRadius } = cartesianToPolar(this.from, this._prevCenter);\n const { angle: toAngle, radius: toRadius } = cartesianToPolar(this.to, this._center);\n if (!isValidNumber(toAngle * toRadius)) {\n this.valid = false;\n }\n this._fromAngle = isValidNumber(fromAngle) ? fromAngle : toAngle;\n this._fromRadius = isValidNumber(fromRadius) ? fromRadius : toRadius;\n this._toAngle = toAngle;\n this._toRadius = toRadius;\n if (isClose(this._fromAngle, this._toAngle) && isClose(this._fromRadius, this._toRadius)) {\n this.valid = false;\n }\n }\n\n onUpdate(end: boolean, ratio: number, out: Record<string, any>): void {\n if (this.valid === false) {\n out.x = this.to.x;\n out.y = this.to.y;\n return;\n }\n if (end) {\n const { x, y } = this.getEndProps();\n out.x = x;\n out.y = y;\n out.center = this._center;\n } else {\n const { x, y } = polarToCartesian(\n {\n x: this._prevCenter.x + (this._center.x - this._prevCenter.x) * ratio,\n y: this._prevCenter.y + (this._center.y - this._prevCenter.y) * ratio\n },\n this._fromRadius + (this._toRadius - this._fromRadius) * ratio,\n this._fromAngle + (this._toAngle - this._fromAngle) * ratio\n );\n out.x = x;\n out.y = y;\n }\n }\n}\n\n// @ts-ignore\n// FIXME: some private attribute should be changed to protected for better inheritance\nexport class PolarTagPointsUpdate extends TagPointsUpdate {\n private declare points: IPointLike[];\n private declare interpolatePoints: [IPointLike, IPointLike][];\n\n private _center: IPointLike;\n private _prevCenter: IPointLike;\n\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params?: {\n newPointAnimateType?: 'grow' | 'appear';\n }\n ) {\n super(from, to, duration, easing, params);\n this._center = to.center;\n this._prevCenter = from.center;\n }\n onUpdate(end: boolean, ratio: number, out: Record<string, any>): void {\n // if not create new points, multi points animation might not work well.\n this.points = this.points.map((point, index) => {\n const newPoint = this.polarPointInterpolation(\n this.interpolatePoints[index][0],\n this.interpolatePoints[index][1],\n ratio\n );\n if (end) {\n out.center = this._center;\n }\n newPoint.context = point.context;\n return newPoint;\n });\n out.points = this.points;\n }\n\n private _interpolationSinglePoint(pointA: IPoint, pointB: IPoint, ratio: number): IPoint {\n if (!isValidPoint(pointA) && !isValidPoint(pointB)) {\n return pointB;\n }\n const polarPointA = cartesianToPolar(pointA, this._prevCenter);\n const polarPointB = cartesianToPolar(pointB, this._center);\n let angleA = normalizeAngle(polarPointA.angle);\n let angleB = normalizeAngle(polarPointB.angle);\n\n // handle center point radius\n if (!isValidNumber(angleA) && isValidNumber(angleB)) {\n angleA = angleB;\n }\n if (isValidNumber(angleA) && !isValidNumber(angleB)) {\n angleB = angleA;\n }\n const angle = angleA + (angleB - angleA) * ratio;\n const radius = polarPointA.radius + (polarPointB.radius - polarPointA.radius) * ratio;\n\n return polarToCartesian(\n {\n x: this._prevCenter.x + (this._center.x - this._prevCenter.x) * ratio,\n y: this._prevCenter.y + (this._center.y - this._prevCenter.y) * ratio\n },\n radius,\n angle\n );\n }\n\n private polarPointInterpolation(pointA: IPointLike, pointB: IPointLike, ratio: number): IPointLike {\n const { x, y } = this._interpolationSinglePoint(pointA, pointB, ratio);\n const { x: x1, y: y1 } = this._interpolationSinglePoint(\n {\n x: pointA.x1,\n y: pointA.y1\n },\n {\n x: pointB.x1,\n y: pointB.y1\n },\n ratio\n );\n\n const point = new Point(x as number, y as number, x1, y1);\n point.defined = pointB.defined;\n return point;\n }\n}\n"]}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import type { Datum, IAnimationTypeConfig, IElement } from '@visactor/vgrammar-core';
|
|
2
2
|
import type { IPoint, Maybe } from '../../typings';
|
|
3
|
-
import type { IPolarAxisHelper } from '../../component/axis';
|
|
4
3
|
export interface IRadarAnimationParams {
|
|
5
4
|
center: () => Maybe<IPoint>;
|
|
6
5
|
radius: () => number;
|
|
7
6
|
startAngle: number;
|
|
8
|
-
pointToCoord: IPolarAxisHelper['pointToCoord'];
|
|
9
|
-
coordToPoint: IPolarAxisHelper['coordToPoint'];
|
|
10
7
|
}
|
|
11
8
|
export type RadarAppearPreset = 'grow' | 'fadeIn' | 'clipIn';
|
|
12
9
|
export declare const radarFadeAnimation: (animationType: 'in' | 'out') => {
|
|
@@ -89,10 +89,10 @@ const registerRadarAnimation = () => {
|
|
|
89
89
|
disappear: "clipIn" === preset ? void 0 : radarPresetAnimation(params, preset, "out"),
|
|
90
90
|
update: [ {
|
|
91
91
|
options: {
|
|
92
|
-
excludeChannels: [ "points", "defined" ]
|
|
92
|
+
excludeChannels: [ "points", "defined", "center" ]
|
|
93
93
|
}
|
|
94
94
|
}, {
|
|
95
|
-
channel: [ "points" ],
|
|
95
|
+
channel: [ "points", "center" ],
|
|
96
96
|
custom: animation_1.PolarTagPointsUpdate,
|
|
97
97
|
customParameters: params,
|
|
98
98
|
duration: config_1.DEFAULT_ANIMATION_CONFIG.update.duration,
|
|
@@ -109,10 +109,10 @@ const registerRadarAnimation = () => {
|
|
|
109
109
|
disappear: "clipIn" === preset ? void 0 : radarSymbolPresetAnimation(params, preset, "out"),
|
|
110
110
|
update: [ {
|
|
111
111
|
options: {
|
|
112
|
-
excludeChannels: [ "x", "y" ]
|
|
112
|
+
excludeChannels: [ "x", "y", "center" ]
|
|
113
113
|
}
|
|
114
114
|
}, {
|
|
115
|
-
channel: [ "x", "y" ],
|
|
115
|
+
channel: [ "x", "y", "center" ],
|
|
116
116
|
custom: animation_1.PolarPointUpdate,
|
|
117
117
|
customParameters: params,
|
|
118
118
|
duration: config_1.DEFAULT_ANIMATION_CONFIG.update.duration,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/series/radar/animation.ts"],"names":[],"mappings":";;;AAEA,yDAA0D;AAE1D,gDAA6C;AAC7C,kDAA4E;AAC5E,mDAAkE;AAClE,yDAAqD;
|
|
1
|
+
{"version":3,"sources":["../src/series/radar/animation.ts"],"names":[],"mappings":"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","file":"animation.js","sourcesContent":["import type { Datum, IAnimationTypeConfig, IElement, MarkAnimationSpec } from '@visactor/vgrammar-core';\nimport type { IPoint, Maybe } from '../../typings';\nimport { ClipAngleAnimate } from '@visactor/vrender-core';\nimport type { IPolarAxisHelper } from '../../component/axis';\nimport { Factory } from '../../core/factory';\nimport { PolarPointUpdate, PolarTagPointsUpdate } from '../polar/animation';\nimport { DEFAULT_ANIMATION_CONFIG } from '../../animation/config';\nimport { registerArc } from '@visactor/vrender-kits';\n\nexport interface IRadarAnimationParams {\n center: () => Maybe<IPoint>;\n radius: () => number;\n startAngle: number;\n}\n\nexport type RadarAppearPreset = 'grow' | 'fadeIn' | 'clipIn';\n\nexport const radarFadeAnimation = (animationType: 'in' | 'out') => ({\n type: animationType === 'in' ? 'fadeIn' : 'fadeOut'\n});\n\nexport const radarGrowAnimation = (params: IRadarAnimationParams, animationType: 'in' | 'out') => ({\n type: animationType === 'in' ? 'growPointsIn' : 'growPointsOut',\n options: () => ({\n center: params.center()\n })\n});\n\nexport function radarPresetAnimation(\n params: IRadarAnimationParams,\n preset: RadarAppearPreset,\n animationType: 'in' | 'out'\n) {\n switch (preset) {\n case 'fadeIn':\n return radarFadeAnimation(animationType);\n case 'clipIn':\n case 'grow':\n default:\n return radarGrowAnimation(params, animationType);\n }\n}\n\nexport const radarSymbolMoveAnimation = (params: IRadarAnimationParams, animationType: 'in' | 'out') => {\n const xFrom = () => params.center()?.x;\n const xTo = (datum: Datum, element: IElement) => element.getGraphicAttribute('x');\n const yFrom = () => params.center()?.y;\n const yTo = (datum: Datum, element: IElement) => element.getGraphicAttribute('y');\n if (animationType === 'in') {\n return {\n channel: {\n x: { from: xFrom, to: xTo },\n y: { from: yFrom, to: yTo }\n }\n };\n }\n return {\n channel: {\n x: { from: xTo, to: xFrom },\n y: { from: yTo, to: yFrom }\n }\n };\n};\n\nexport function radarSymbolPresetAnimation(\n params: IRadarAnimationParams,\n preset: RadarAppearPreset,\n animationType: 'in' | 'out'\n) {\n switch (preset) {\n case 'fadeIn':\n return radarFadeAnimation(animationType);\n case 'clipIn':\n case 'grow':\n default:\n return radarSymbolMoveAnimation(params, animationType);\n }\n}\n\nexport const radarGroupClipAnimation = (\n params: IRadarAnimationParams,\n animationType: 'in' | 'out'\n): IAnimationTypeConfig => {\n return {\n custom: ClipAngleAnimate,\n customParameters: (datum: any, element: IElement) => {\n return {\n group: element.getGraphicItem(),\n startAngle: params.startAngle ?? Math.PI / 2,\n orient: 'clockwise',\n center: params.center(),\n radius: params.radius(),\n animationType\n };\n }\n };\n};\n\nexport const registerRadarAnimation = () => {\n Factory.registerAnimation('radar', (params: IRadarAnimationParams, preset: RadarAppearPreset) => {\n return {\n appear: preset === 'clipIn' ? undefined : radarPresetAnimation(params, preset, 'in'),\n enter: radarPresetAnimation(params, preset, 'in'),\n exit: radarPresetAnimation(params, preset, 'out'),\n disappear: preset === 'clipIn' ? undefined : radarPresetAnimation(params, preset, 'out'),\n update: [\n {\n options: { excludeChannels: ['points', 'defined', 'center'] }\n },\n {\n channel: ['points', 'center'],\n custom: PolarTagPointsUpdate,\n customParameters: params,\n duration: DEFAULT_ANIMATION_CONFIG.update.duration,\n easing: DEFAULT_ANIMATION_CONFIG.update.easing\n }\n ]\n } as MarkAnimationSpec;\n });\n Factory.registerAnimation(\n 'radarSymbol',\n (params: IRadarAnimationParams, preset: RadarAppearPreset) =>\n ({\n appear: preset === 'clipIn' ? undefined : radarSymbolPresetAnimation(params, preset, 'in'),\n enter: { type: 'scaleIn' },\n exit: { type: 'scaleOut' },\n disappear: preset === 'clipIn' ? undefined : radarSymbolPresetAnimation(params, preset, 'out'),\n update: [\n {\n options: { excludeChannels: ['x', 'y', 'center'] }\n },\n {\n channel: ['x', 'y', 'center'],\n custom: PolarPointUpdate,\n customParameters: params,\n duration: DEFAULT_ANIMATION_CONFIG.update.duration,\n easing: DEFAULT_ANIMATION_CONFIG.update.easing\n }\n ]\n } as MarkAnimationSpec)\n );\n Factory.registerAnimation('radarGroup', (params: IRadarAnimationParams, preset: RadarAppearPreset) => {\n return {\n appear: radarGroupClipAnimation(params, 'in'),\n disappear: radarGroupClipAnimation(params, 'out')\n };\n });\n registerArc(); // clipAngle animation will use arc graphic\n};\n"]}
|
|
@@ -27,7 +27,15 @@ class RadarSeries extends rose_like_1.RoseLikeSeries {
|
|
|
27
27
|
this.initSymbolMark(progressive, "point" === seriesMark);
|
|
28
28
|
}
|
|
29
29
|
initMarkStyle() {
|
|
30
|
-
this.initAreaMarkStyle(), this.initLineMarkStyle(), this.initSymbolMarkStyle()
|
|
30
|
+
this.initAreaMarkStyle(), this.initLineMarkStyle(), this.initSymbolMarkStyle(),
|
|
31
|
+
[ this._lineMark, this._symbolMark, this._areaMark ].forEach((mark => {
|
|
32
|
+
mark && this.setMarkStyle(mark, {
|
|
33
|
+
center: () => {
|
|
34
|
+
var _a;
|
|
35
|
+
return null === (_a = this.angleAxisHelper) || void 0 === _a ? void 0 : _a.center();
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}));
|
|
31
39
|
}
|
|
32
40
|
initAreaMark(progressive, isSeriesMark) {
|
|
33
41
|
var _a, _b;
|
|
@@ -78,12 +86,7 @@ class RadarSeries extends rose_like_1.RoseLikeSeries {
|
|
|
78
86
|
const rect = this.getLayoutRect();
|
|
79
87
|
return Math.min(rect.width, rect.height);
|
|
80
88
|
},
|
|
81
|
-
startAngle: (0, vutils_1.isValid)(this._spec.startAngle) ? (0, vutils_1.degreeToRadian)(this._spec.startAngle) : polar_1.POLAR_START_RADIAN
|
|
82
|
-
pointToCoord: point => {
|
|
83
|
-
var _a;
|
|
84
|
-
return null === (_a = this.angleAxisHelper) || void 0 === _a ? void 0 : _a.pointToCoord(point);
|
|
85
|
-
},
|
|
86
|
-
coordToPoint: coord => this.angleAxisHelper.coordToPoint(coord)
|
|
89
|
+
startAngle: (0, vutils_1.isValid)(this._spec.startAngle) ? (0, vutils_1.degreeToRadian)(this._spec.startAngle) : polar_1.POLAR_START_RADIAN
|
|
87
90
|
}, appearPreset = null !== (_c = null === (_b = null === (_a = this._spec) || void 0 === _a ? void 0 : _a.animationAppear) || void 0 === _b ? void 0 : _b.preset) && void 0 !== _c ? _c : "clipIn";
|
|
88
91
|
"clipIn" === appearPreset && this._rootMark && this._rootMark.setAnimationConfig((0,
|
|
89
92
|
utils_1.animationConfig)(null === (_d = factory_1.Factory.getAnimationInKey("radarGroup")) || void 0 === _d ? void 0 : _d(animationParams, appearPreset), (0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/series/radar/radar.ts"],"names":[],"mappings":"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","file":"radar.js","sourcesContent":["/* eslint-disable no-duplicate-imports */\nimport { LineLikeSeriesMixin } from '../mixin/line-mixin';\nimport type { ILineMark } from '../../mark/line';\nimport type { IMark, IMarkProgressiveConfig } from '../../mark/interface';\nimport { POLAR_START_RADIAN } from '../../constant/polar';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { ChartEvent } from '../../constant/event';\nimport { DEFAULT_LINEAR_INTERPOLATE } from '../../typings/interpolate';\nimport type { Datum, IPoint, IPolarPoint } from '../../typings';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { degreeToRadian, isArray, mixin, isValid } from '@visactor/vutils';\nimport type { IRadarSeriesSpec } from './interface';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport type { IRadarAnimationParams, RadarAppearPreset } from './animation';\nimport { registerRadarAnimation } from './animation';\nimport { RoseLikeSeries } from '../polar/rose-like';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { IAreaMark } from '../../mark/area';\nimport { registerAreaMark } from '../../mark/area';\nimport { registerLineMark } from '../../mark/line';\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { radarSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { registerMarkOverlapTransform } from '@visactor/vgrammar-core';\nimport { LineLikeSeriesSpecTransformer } from '../mixin/line-mixin-transformer';\nimport { registerPolarBandAxis, registerPolarLinearAxis } from '../../component/axis/polar';\n\nexport interface RadarSeries<T extends IRadarSeriesSpec>\n extends Pick<\n LineLikeSeriesMixin,\n | 'initLineMark'\n | 'initSymbolMark'\n | 'initLabelMarkStyle'\n | 'initLineMarkStyle'\n | 'initSymbolMarkStyle'\n | 'encodeDefined'\n | '_lineMark'\n | '_symbolMark'\n | 'addOverlapCompile'\n >,\n RoseLikeSeries<T> {}\n\nexport class RadarSeries<T extends IRadarSeriesSpec = IRadarSeriesSpec> extends RoseLikeSeries<T> {\n static readonly type: string = SeriesTypeEnum.radar;\n type = SeriesTypeEnum.radar;\n\n static readonly mark: SeriesMarkMap = radarSeriesMark;\n static readonly transformerConstructor = LineLikeSeriesSpecTransformer as any;\n readonly transformerConstructor = LineLikeSeriesSpecTransformer;\n\n private _areaMark: ILineMark;\n protected _sortDataByAxis: boolean = false;\n\n initGroups() {\n // do nothing\n }\n\n compile(): void {\n super.compile();\n this.addOverlapCompile();\n }\n\n initMark(): void {\n const progressive = {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n };\n\n const isAreaVisible = this._spec.area?.visible !== false && this._spec.area?.style?.visible !== false;\n const seriesMark = this._spec.seriesMark ?? 'area';\n this.initAreaMark(progressive, isAreaVisible && seriesMark === 'area');\n this.initLineMark(progressive, seriesMark === 'line' || (seriesMark === 'area' && !isAreaVisible));\n this.initSymbolMark(progressive, seriesMark === 'point');\n }\n\n initMarkStyle(): void {\n this.initAreaMarkStyle();\n this.initLineMarkStyle();\n this.initSymbolMarkStyle();\n }\n\n initAreaMark(progressive: IMarkProgressiveConfig, isSeriesMark: boolean) {\n this._areaMark = this._createMark(RadarSeries.mark.area, {\n groupKey: this._seriesField,\n progressive,\n isSeriesMark,\n customShape: this._spec.area?.customShape,\n stateSort: this._spec.area?.stateSort\n }) as IAreaMark;\n }\n\n initAreaMarkStyle() {\n const areaMark = this._areaMark;\n if (areaMark) {\n this.setMarkStyle(\n areaMark,\n {\n x: this.dataToPositionX.bind(this),\n y: this.dataToPositionY.bind(this),\n x1: (datum: Datum) => {\n if (!datum || !this.angleAxisHelper || !this.radiusAxisHelper) {\n return Number.NaN;\n }\n return this.valueToPosition(\n this.getDatumPositionValues(datum, this._angleField),\n this.getStack()\n ? this.getDatumPositionValues(datum, this._innerRadiusField)\n : this.radiusScale.domain()[0]\n ).x;\n },\n y1: (datum: Datum) => {\n if (!datum || !this.angleAxisHelper || !this.radiusAxisHelper) {\n return Number.NaN;\n }\n\n const value = this.valueToPosition(\n this.getDatumPositionValues(datum, this._angleField),\n this.getStack()\n ? this.getDatumPositionValues(datum, this._innerRadiusField)\n : this.radiusScale.domain()[0]\n ).y;\n return value;\n },\n fill: this.getColorAttribute(),\n curveType: DEFAULT_LINEAR_INTERPOLATE,\n closePath: true\n },\n 'normal',\n AttributeLevel.Series\n );\n\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(\n areaMark,\n {\n defined: this._getInvalidDefined.bind(this),\n connectedType: this._getInvalidConnectType()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n this.event.on(ChartEvent.viewDataStatisticsUpdate, { filter: param => param.model === this }, () => {\n this.encodeDefined(areaMark, 'defined');\n });\n }\n }\n\n protected initTooltip() {\n super.initTooltip();\n const { group, mark } = this._tooltipHelper.activeTriggerSet;\n if (this._lineMark) {\n group.add(this._lineMark);\n }\n if (this._areaMark) {\n group.add(this._areaMark);\n }\n if (this._symbolMark) {\n mark.add(this._symbolMark);\n group.add(this._symbolMark);\n }\n }\n\n initAnimation() {\n const animationParams: IRadarAnimationParams = {\n center: () => this.angleAxisHelper?.center(),\n radius: () => {\n const rect = this.getLayoutRect();\n return Math.min(rect.width, rect.height);\n },\n startAngle: isValid(this._spec.startAngle) ? degreeToRadian(this._spec.startAngle) : POLAR_START_RADIAN,\n pointToCoord: (point: IPoint) => this.angleAxisHelper?.pointToCoord(point),\n coordToPoint: (coord: IPolarPoint) => this.angleAxisHelper.coordToPoint(coord)\n };\n const appearPreset = ((this._spec?.animationAppear as IStateAnimateSpec<RadarAppearPreset>)?.preset ??\n 'clipIn') as RadarAppearPreset;\n\n if (appearPreset === 'clipIn') {\n if (this._rootMark) {\n this._rootMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('radarGroup')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.group, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n\n // TODO: animationType\n const markAnimationMap: [IMark, string][] = [\n [this._areaMark, 'radar'],\n [this._lineMark, 'radar'],\n [this._symbolMark, 'radarSymbol']\n ];\n\n // 为 mark 添加动画\n markAnimationMap.forEach(([mark, animation]) => {\n if (isValid(mark)) {\n const getAnimation = Factory.getAnimationInKey(animation);\n mark.setAnimationConfig(\n animationConfig(\n getAnimation?.(animationParams, appearPreset),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n }\n });\n }\n\n getDefaultShapeType() {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._areaMark, this._symbolMark, this._lineMark];\n }\n\n getSeriesStyle(datum: Datum) {\n return (attribute: string) => {\n let result = this._seriesMark?.getAttribute(attribute as any, datum) ?? undefined;\n if (attribute === 'fill' && !result) {\n attribute = 'stroke';\n result = this._seriesMark?.getAttribute(attribute, datum) ?? undefined;\n }\n if (attribute === 'stroke' && isArray(result)) {\n return result[0];\n }\n return result;\n };\n }\n}\n\nmixin(RadarSeries, LineLikeSeriesMixin);\n\nexport const registerRadarSeries = () => {\n Factory.registerSeries(RadarSeries.type, RadarSeries);\n registerMarkOverlapTransform();\n registerAreaMark();\n registerLineMark();\n registerSymbolMark();\n registerRadarAnimation();\n registerPolarBandAxis();\n registerPolarLinearAxis();\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/series/radar/radar.ts"],"names":[],"mappings":"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","file":"radar.js","sourcesContent":["/* eslint-disable no-duplicate-imports */\nimport { LineLikeSeriesMixin } from '../mixin/line-mixin';\nimport type { ILineMark } from '../../mark/line';\nimport type { IMark, IMarkProgressiveConfig } from '../../mark/interface';\nimport { POLAR_START_RADIAN } from '../../constant/polar';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { ChartEvent } from '../../constant/event';\nimport { DEFAULT_LINEAR_INTERPOLATE } from '../../typings/interpolate';\nimport type { Datum, IPoint, IPolarPoint } from '../../typings';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { degreeToRadian, isArray, mixin, isValid } from '@visactor/vutils';\nimport type { IRadarSeriesSpec } from './interface';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport type { IRadarAnimationParams, RadarAppearPreset } from './animation';\nimport { registerRadarAnimation } from './animation';\nimport { RoseLikeSeries } from '../polar/rose-like';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { IAreaMark } from '../../mark/area';\nimport { registerAreaMark } from '../../mark/area';\nimport { registerLineMark } from '../../mark/line';\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { radarSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { registerMarkOverlapTransform } from '@visactor/vgrammar-core';\nimport { LineLikeSeriesSpecTransformer } from '../mixin/line-mixin-transformer';\nimport { registerPolarBandAxis, registerPolarLinearAxis } from '../../component/axis/polar';\n\nexport interface RadarSeries<T extends IRadarSeriesSpec>\n extends Pick<\n LineLikeSeriesMixin,\n | 'initLineMark'\n | 'initSymbolMark'\n | 'initLabelMarkStyle'\n | 'initLineMarkStyle'\n | 'initSymbolMarkStyle'\n | 'encodeDefined'\n | '_lineMark'\n | '_symbolMark'\n | 'addOverlapCompile'\n >,\n RoseLikeSeries<T> {}\n\nexport class RadarSeries<T extends IRadarSeriesSpec = IRadarSeriesSpec> extends RoseLikeSeries<T> {\n static readonly type: string = SeriesTypeEnum.radar;\n type = SeriesTypeEnum.radar;\n\n static readonly mark: SeriesMarkMap = radarSeriesMark;\n static readonly transformerConstructor = LineLikeSeriesSpecTransformer as any;\n readonly transformerConstructor = LineLikeSeriesSpecTransformer;\n\n private _areaMark: ILineMark;\n protected _sortDataByAxis: boolean = false;\n\n initGroups() {\n // do nothing\n }\n\n compile(): void {\n super.compile();\n this.addOverlapCompile();\n }\n\n initMark(): void {\n const progressive = {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n };\n\n const isAreaVisible = this._spec.area?.visible !== false && this._spec.area?.style?.visible !== false;\n const seriesMark = this._spec.seriesMark ?? 'area';\n this.initAreaMark(progressive, isAreaVisible && seriesMark === 'area');\n this.initLineMark(progressive, seriesMark === 'line' || (seriesMark === 'area' && !isAreaVisible));\n this.initSymbolMark(progressive, seriesMark === 'point');\n }\n\n initMarkStyle(): void {\n this.initAreaMarkStyle();\n this.initLineMarkStyle();\n this.initSymbolMarkStyle();\n [this._lineMark, this._symbolMark, this._areaMark].forEach(mark => {\n if (mark) {\n this.setMarkStyle(mark, {\n center: () => {\n return this.angleAxisHelper?.center();\n }\n });\n }\n });\n }\n\n initAreaMark(progressive: IMarkProgressiveConfig, isSeriesMark: boolean) {\n this._areaMark = this._createMark(RadarSeries.mark.area, {\n groupKey: this._seriesField,\n progressive,\n isSeriesMark,\n customShape: this._spec.area?.customShape,\n stateSort: this._spec.area?.stateSort\n }) as IAreaMark;\n }\n\n initAreaMarkStyle() {\n const areaMark = this._areaMark;\n if (areaMark) {\n this.setMarkStyle(\n areaMark,\n {\n x: this.dataToPositionX.bind(this),\n y: this.dataToPositionY.bind(this),\n x1: (datum: Datum) => {\n if (!datum || !this.angleAxisHelper || !this.radiusAxisHelper) {\n return Number.NaN;\n }\n return this.valueToPosition(\n this.getDatumPositionValues(datum, this._angleField),\n this.getStack()\n ? this.getDatumPositionValues(datum, this._innerRadiusField)\n : this.radiusScale.domain()[0]\n ).x;\n },\n y1: (datum: Datum) => {\n if (!datum || !this.angleAxisHelper || !this.radiusAxisHelper) {\n return Number.NaN;\n }\n\n const value = this.valueToPosition(\n this.getDatumPositionValues(datum, this._angleField),\n this.getStack()\n ? this.getDatumPositionValues(datum, this._innerRadiusField)\n : this.radiusScale.domain()[0]\n ).y;\n return value;\n },\n fill: this.getColorAttribute(),\n curveType: DEFAULT_LINEAR_INTERPOLATE,\n closePath: true\n },\n 'normal',\n AttributeLevel.Series\n );\n\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(\n areaMark,\n {\n defined: this._getInvalidDefined.bind(this),\n connectedType: this._getInvalidConnectType()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n this.event.on(ChartEvent.viewDataStatisticsUpdate, { filter: param => param.model === this }, () => {\n this.encodeDefined(areaMark, 'defined');\n });\n }\n }\n\n protected initTooltip() {\n super.initTooltip();\n const { group, mark } = this._tooltipHelper.activeTriggerSet;\n if (this._lineMark) {\n group.add(this._lineMark);\n }\n if (this._areaMark) {\n group.add(this._areaMark);\n }\n if (this._symbolMark) {\n mark.add(this._symbolMark);\n group.add(this._symbolMark);\n }\n }\n\n initAnimation() {\n const animationParams: IRadarAnimationParams = {\n center: () => this.angleAxisHelper?.center(),\n radius: () => {\n const rect = this.getLayoutRect();\n return Math.min(rect.width, rect.height);\n },\n startAngle: isValid(this._spec.startAngle) ? degreeToRadian(this._spec.startAngle) : POLAR_START_RADIAN\n };\n const appearPreset = ((this._spec?.animationAppear as IStateAnimateSpec<RadarAppearPreset>)?.preset ??\n 'clipIn') as RadarAppearPreset;\n\n if (appearPreset === 'clipIn') {\n if (this._rootMark) {\n this._rootMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('radarGroup')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.group, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n\n // TODO: animationType\n const markAnimationMap: [IMark, string][] = [\n [this._areaMark, 'radar'],\n [this._lineMark, 'radar'],\n [this._symbolMark, 'radarSymbol']\n ];\n\n // 为 mark 添加动画\n markAnimationMap.forEach(([mark, animation]) => {\n if (isValid(mark)) {\n const getAnimation = Factory.getAnimationInKey(animation);\n mark.setAnimationConfig(\n animationConfig(\n getAnimation?.(animationParams, appearPreset),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n }\n });\n }\n\n getDefaultShapeType() {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._areaMark, this._symbolMark, this._lineMark];\n }\n\n getSeriesStyle(datum: Datum) {\n return (attribute: string) => {\n let result = this._seriesMark?.getAttribute(attribute as any, datum) ?? undefined;\n if (attribute === 'fill' && !result) {\n attribute = 'stroke';\n result = this._seriesMark?.getAttribute(attribute, datum) ?? undefined;\n }\n if (attribute === 'stroke' && isArray(result)) {\n return result[0];\n }\n return result;\n };\n }\n}\n\nmixin(RadarSeries, LineLikeSeriesMixin);\n\nexport const registerRadarSeries = () => {\n Factory.registerSeries(RadarSeries.type, RadarSeries);\n registerMarkOverlapTransform();\n registerAreaMark();\n registerLineMark();\n registerSymbolMark();\n registerRadarAnimation();\n registerPolarBandAxis();\n registerPolarLinearAxis();\n};\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { IVChart } from './../../core/interface';
|
|
1
2
|
import type { IFillMarkSpec, IImageMarkSpec } from '../visual';
|
|
2
3
|
import type { LayoutCallBack } from '../../layout/interface';
|
|
3
4
|
import type { IElement, srIOption3DType } from '@visactor/vgrammar-core';
|
|
@@ -41,6 +42,7 @@ export interface IInitOption extends Omit<IRenderOption, 'pluginList'> {
|
|
|
41
42
|
onError?: (...args: any[]) => void;
|
|
42
43
|
theme?: string | ITheme;
|
|
43
44
|
disableTriggerEvent?: boolean;
|
|
45
|
+
resizeDelay?: number;
|
|
44
46
|
}
|
|
45
47
|
export declare enum RenderModeEnum {
|
|
46
48
|
'desktop-browser' = "desktop-browser",
|
|
@@ -208,8 +210,9 @@ export type IMarkTheme<T> = {
|
|
|
208
210
|
interactive?: boolean;
|
|
209
211
|
};
|
|
210
212
|
export interface IPerformanceHook {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
+
afterCreateVChart?: (vchart?: IVChart) => void;
|
|
214
|
+
beforeInitializeChart?: (vchart?: IVChart) => void;
|
|
215
|
+
afterInitializeChart?: (vchart?: IVChart) => void;
|
|
213
216
|
beforeCompileToVGrammar?: () => void;
|
|
214
217
|
afterCompileToVGrammar?: () => void;
|
|
215
218
|
beforeRegionCompile?: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/typings/spec/common.ts"],"names":[],"mappings":";;;AA0HA,IAAY,cAWX;AAXD,WAAY,cAAc;IACxB,qDAAqC,CAAA;IACrC,mDAAmC,CAAA;IACnC,+BAAe,CAAA;IACf,mCAAmB,CAAA;IACnB,qCAAqB,CAAA;IACrB,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,qCAAqB,CAAA;IACrB,qDAAqC,CAAA;IACrC,+BAAe,CAAA;AACjB,CAAC,EAXW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAWzB","file":"common.js","sourcesContent":["import type { IFillMarkSpec, IImageMarkSpec } from '../visual';\nimport type { LayoutCallBack } from '../../layout/interface';\nimport type { IElement, srIOption3DType } from '@visactor/vgrammar-core';\nimport type {\n DataSet,\n DataView,\n ISimplifyOptions,\n IFieldsOptions,\n IFilterOptions,\n IFoldOptions,\n IDsvParserOptions\n} from '@visactor/vdataset';\nimport type { RegionSpec } from '../../region/interface';\nimport type { IHoverSpec, ISelectSpec, IInteractionSpec } from '../../interaction/interface';\nimport type { IRenderOption } from '../../compile/interface';\nimport type { ITooltipSpec } from '../../component/tooltip/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ILayoutSpec } from '../../layout/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type {\n ConvertToMarkStyleSpec,\n IArc3dMarkSpec,\n IArcMarkSpec,\n IAreaMarkSpec,\n IBoxPlotMarkSpec,\n ICommonSpec,\n IGroupMarkSpec,\n ILineMarkSpec,\n ILinkPathMarkSpec,\n IPathMarkSpec,\n IPolygonMarkSpec,\n IPyramid3dMarkSpec,\n IRect3dMarkSpec,\n IRectMarkSpec,\n IRuleMarkSpec,\n ISymbolMarkSpec,\n IRippleMarkSpec,\n ITextMarkSpec,\n IVisualSpecScale\n} from '../visual';\nimport type { StateValue } from '../../compile/mark';\nimport type { ISeriesStyle, SeriesType } from '../../series/interface';\nimport type { Datum, StringOrNumber } from '../common';\nimport type { IInvalidType } from '../data';\nimport type { IAnimationSpec, IMorphSeriesSpec } from '../../animation/spec';\nimport type { IPlayer } from '../../component/player';\nimport type { IMarkProgressiveConfig, MarkTypeEnum } from '../../mark/interface';\nimport type { IDataZoomSpec, IScrollBarSpec } from '../../component/data-zoom';\nimport type { ICrosshairSpec } from '../../component/crosshair/interface';\nimport type { ITheme } from '../../theme';\nimport type { ITitleSpec } from '../../component/title/interface';\nimport type { IBrushSpec } from '../../component/brush';\nimport type { ITotalLabelSpec } from '../../component/label';\nimport type { ILegendSpec } from '../../component/legend';\nimport type { ILayoutOrientPadding, ILayoutPaddingSpec } from '../layout';\nimport type { IColor, ICustomPath2D, IRichTextCharacter } from '@visactor/vrender-core';\nimport type { ICommonAxisSpec } from '../../component/axis';\nimport type { IMediaQuerySpec } from '..';\nimport type { IModelSpec } from '../../model/interface';\n\nexport type IChartPadding = ILayoutOrientPadding | number;\n\n/** chart option */\nexport interface IInitOption extends Omit<IRenderOption, 'pluginList'> {\n /**\n * **仅生效于浏览器环境。**\n * 图表挂载的父容器,可以直接指定容器 id,也可以传入 dom 对象\n */\n dom?: string | HTMLElement;\n /**\n * 除去选择 dom 属性进行挂载父容器,也可以使用 renderCanvas 属性直接传入 canvas 实例/ canvasId\n * 小程序/小组件环境请直接传入 id\n */\n renderCanvas?: string | HTMLCanvasElement;\n /** 数据集 */\n dataSet?: DataSet;\n /** 是否自适应容器大小 */\n autoFit?: boolean;\n /**\n * 性能测试钩子\n */\n performanceHook?: IPerformanceHook;\n /**\n * 是否开启动画\n */\n animation?: boolean;\n /**\n * 3d配置\n */\n options3d?: srIOption3DType;\n\n /**\n * 自定义布局函数\n */\n layout?: LayoutCallBack;\n\n /**\n * 当文本省略时,鼠标 hover 到文本上时是否显示 poptip\n * @default true\n */\n poptip?: boolean;\n\n /**\n * 报错的回调函数\n * @since 1.2.0\n */\n onError?: (...args: any[]) => void;\n\n /**\n * 默认主题(支持完整主题对象或者主题名称,主题名称需要提前在 `ThemeManager` 中注册)\n * @since 1.3.0\n */\n theme?: string | ITheme;\n\n /**\n * 是否关闭交互效果\n * @since 1.9.0\n * @default false\n */\n disableTriggerEvent?: boolean;\n}\n\nexport enum RenderModeEnum {\n 'desktop-browser' = 'desktop-browser',\n 'mobile-browser' = 'mobile-browser',\n 'node' = 'node',\n 'worker' = 'worker',\n 'miniApp' = 'miniApp',\n 'wx' = 'wx',\n 'tt' = 'tt',\n 'harmony' = 'harmony',\n 'desktop-miniApp' = 'desktop-miniApp',\n 'lynx' = 'lynx'\n}\nexport type RenderMode = keyof typeof RenderModeEnum;\n\n/** chart spec */\nexport interface IChartSpec {\n /** 图表类型 */\n type: string;\n /** 数据 */\n data?: IData;\n /** 画布宽度 */\n width?: number;\n /** 画布高度 */\n height?: number;\n /**\n * 图表宽高是否自适应容器,浏览器环境下默认为 true。\n * 该配置的优先级高于构造函数中的 autoFit 配置。\n * 如果用户配置了 width,则以用户配置的 width 为准,height 同理。\n */\n autoFit?: boolean;\n /**\n * 图表整体 padding 设置\n */\n padding?: ILayoutPaddingSpec;\n /**\n * 图表色系配置\n */\n color?: string[] | Omit<IVisualSpecScale<unknown, string>, 'id'>;\n /**\n * 系列\n * @description 仅在组合图中使用, 文档中除组合图外均未透出该配置\n */\n series?: ISeriesSpec[];\n /**\n * 系列样式\n * @description 仅在图表配置了seriesField时生效\n */\n seriesStyle?: ISeriesStyle;\n\n /**\n * 自动关闭动画的阀值,对应的是单系列data的长度\n * @since 1.2.0\n */\n animationThreshold?: number;\n\n /** hover 交互 */\n hover?: boolean | IHoverSpec;\n /** select 交互 */\n select?: boolean | ISelectSpec;\n\n /** region配置 */\n region?: RegionSpec[];\n /** 图表标题配置 */\n title?: ITitleSpec;\n /** 布局配置 */\n layout?: ILayoutSpec;\n /** 图例配置 */\n legends?: ILegendSpec | ILegendSpec[];\n /** 十字辅助线配置 */\n crosshair?: ICrosshairSpec | ICrosshairSpec[];\n /** tooltip配置 */\n tooltip?: ITooltipSpec;\n /** 播放器配置 */\n player?: IPlayer;\n /** 缩略轴配置 */\n dataZoom?: IDataZoomSpec | IDataZoomSpec[];\n /** 滚动条配置 */\n scrollBar?: IScrollBarSpec | IScrollBarSpec[];\n /** 框选配置 */\n brush?: IBrushSpec;\n /** 全局 scale 配置 */\n scales?: IVisualSpecScale<unknown, unknown>[];\n /** 自定义mark */\n customMark?: ICustomMarkSpec<EnableMarkType>[];\n /** 轴 */\n axes?: ICommonAxisSpec[];\n /**\n * 图表上的主题定义。\n * 可以直接配置主题名,前提是该主题名已经注册\n */\n theme?: Omit<ITheme, 'name'> | string;\n /**\n * 图表背景色配置,优先级高于构造函数中的 background 配置\n * 自1.11.6版本支持渐变色对象的配置\n */\n background?: IBackgroundSpec;\n\n // TODO:后续开放,现在仍有问题\n // poptip?: PopTipAttributes;\n // TODO: 补充动画配置\n\n /**\n * 堆积时是否逆序\n * @default false\n * @since 1.4.0\n */\n stackInverse?: boolean;\n /**\n * 堆积时是否排序\n * @default false\n * @since 1.10.4\n */\n stackSort?: boolean;\n /**\n * 媒体查询配置\n * @since 1.8.0\n */\n media?: IMediaQuerySpec;\n}\n\nexport type IBackgroundStyleSpec = ConvertToMarkStyleSpec<Omit<IFillMarkSpec, 'width' | 'height' | 'background'>> & {\n image?: IRectMarkSpec['background'];\n cornerRadius?: IRectMarkSpec['cornerRadius'];\n};\n\nexport type IBackgroundSpec = IColor | IBackgroundStyleSpec;\n\n/** data */\nexport type IDataType = IDataValues | DataView;\nexport type IData = IDataType | IDataType[];\nexport type DataKeyType = string | string[] | ((data: Datum, index: number) => string);\nexport type BuildInTransformOptions =\n | {\n /** 地理数据简化 */\n type: 'simplify';\n options: ISimplifyOptions;\n }\n | {\n /** 数据维度处理,包括排序,逆序,数据筛选能力 */\n type: 'fields';\n options: IFieldsOptions;\n }\n | {\n /** 使用回调的自定义筛选 */\n type: 'filter';\n options: IFilterOptions;\n }\n | {\n /** 数据展开 */\n type: 'fold';\n options: IFoldOptions;\n };\n\nexport interface IFieldsMeta {\n /** TODO: 字段通用format, 暂时先不支持 */\n // format?: (datum: Datum, index: number) => unknown;\n /** 字段别名 */\n alias?: string;\n /** 字段取值范围 */\n domain?: StringOrNumber[];\n /** 是否使用 domain 锁定统计信息。默认为 false */\n lockStatisticsByDomain?: boolean;\n /** 连续型 还是 离散型 */\n type?: 'ordinal' | 'linear';\n /** 排序顺序 不设置的话当前维度不进行排序 */\n sortIndex?: number;\n /** 排序时是否反转 默认为 false */\n sortReverse?: boolean;\n}\n\nexport interface SheetParseOptions extends CommonParseOptions {\n type: 'csv' | 'dsv' | 'tsv';\n options?: IDsvParserOptions;\n}\n\nexport interface CommonParseOptions {\n /**\n * 是否需要对数据进行 clone,默认为 true。\n * 如果考虑性能,你可以将其关闭,但是这会带了一些副作用,即我们会对传入的数据进行修改(不会对原有字段及值修改,只会在原有数据基础上添加一些字段)。\n * @default true\n * @since 1.3.0\n */\n clone?: boolean;\n}\n\nexport interface IDataValues {\n /**\n * 数据唯一标识\n */\n id?: StringOrNumber;\n /**\n * 数据\n */\n values: Datum[] | string;\n /**\n * 引用的数据索引\n */\n fromDataIndex?: number;\n /**\n * 引用的数据 id\n */\n fromDataId?: StringOrNumber;\n /**\n * 数据 transform 配置\n */\n transforms?: BuildInTransformOptions[];\n /**\n * 数据字段相关配置\n */\n fields?: Record<\n /** 字段key */\n string,\n IFieldsMeta\n >;\n\n parser?: SheetParseOptions | CommonParseOptions;\n}\n\nexport type IHierarchyNodeData = {\n value?: number;\n children?: IHierarchyNodeData[];\n} & Datum;\n\nexport interface IHierarchyDataValues extends Omit<IDataValues, 'values'> {\n values: IHierarchyNodeData;\n}\n\nexport type IHierarchyData = DataView | IHierarchyDataValues;\n\n/** series */\nexport interface ISeriesSpec extends IInteractionSpec {\n /** 系列类型 */\n type: SeriesType;\n\n /** 系列名称 */\n name?: string;\n\n /** 用户自定义的 series id */\n id?: StringOrNumber;\n /**\n * 系列数据\n * @description 系列可以配置自身的数据,也可以从chart.data中获取数据\n */\n data?: IDataType;\n /**\n * 系列关联的数据索引\n * @default 0\n */\n dataIndex?: number;\n /**\n * 系列关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * dataKey用于绑定数据与Mark的关系, 该配置在动画中非常重要.\n */\n dataKey?: DataKeyType;\n\n /**\n * 系列关联的region索引\n * @default 0\n */\n regionIndex?: number;\n /** 系列关联的region id */\n regionId?: StringOrNumber;\n /**\n * 分组字段\n */\n seriesField?: string;\n /**\n * 系列样式\n * @description 仅在图表配置了seriesField时生效\n */\n seriesStyle?: ISeriesStyle;\n\n /** 是否对数据进行堆叠处理 */\n stack?: boolean;\n\n /**\n * 堆叠时的分组值\n * stackValue 相等的系列将在一起堆积。没有配置的系列将在一组\n * @since 1.4.0\n */\n stackValue?: StringOrNumber;\n\n /** 堆叠汇总标签\n * @since 1.3.0\n */\n totalLabel?: ITotalLabelSpec;\n\n /** 是否对数据进行百分比处理 */\n percent?: boolean;\n\n /** 是否围绕中心轴偏移轮廓 */\n stackOffsetSilhouette?: boolean;\n\n /**\n * 非合规数据点连接方式\n * @description null,undefined等非法数据点连接方式。\n * @default 'break'\n * 'break'指在该数据点处断开\n * 'link' 指忽略该点保持连续\n * 'zero' 指该点默认数值为0\n * 'ignore' 指不处理\n */\n invalidType?: IInvalidType;\n\n /** 提示信息 */\n tooltip?: ITooltipSpec;\n\n /**\n * 是否开启系列动画\n */\n animation?: boolean;\n /**\n * 自动关闭动画的阀值,对应的是单系列data的长度\n * @since 1.2.0\n */\n animationThreshold?: number;\n\n /**\n * 是否支持3d视角\n */\n support3d?: boolean;\n /**\n * morph 动画配置\n */\n morph?: IMorphSeriesSpec;\n\n /**\n * 扩展mark\n */\n extensionMark?: (IExtensionMarkSpec<Exclude<EnableMarkType, 'group'>> | IExtensionGroupMarkSpec)[];\n\n /**\n * series background\n * 作用是支持系列的图形对系列背景进行 mask,或者切分等效果。不是作为背景图\n * 暂时不开放api,避免出现break change\n */\n // background?: IBackgroundSpec;\n}\n\nexport type IChartExtendsSeriesSpec<T extends ISeriesSpec> = Omit<T, 'data' | 'morph' | 'stackValue'>;\n\nexport type AdaptiveSpec<T, K extends keyof any> = {\n [key in Exclude<keyof T, K>]: T[key];\n} & { [key in K]: any };\n\n/** markSpec */\nexport type IMarkSpec<T extends ICommonSpec = ICommonSpec> = {\n /**\n * 用户id\n */\n id?: StringOrNumber;\n /**\n * 是否响应交互\n */\n interactive?: boolean;\n // /**\n // * 是否会被region区域裁减\n // * @todo 暂未支持\n // */\n // clip?: boolean;\n /**\n * 与其他mark元素的层级\n */\n zIndex?: number;\n /**\n * mark 层 是否显示配置\n */\n visible?: boolean;\n /** 默认样式设置 */\n style?: ConvertToMarkStyleSpec<T>;\n /** 不同状态下的样式配置 */\n state?: Record<StateValue, IMarkStateSpec<T> | IMarkStateStyleSpec<T>>;\n /**\n * 状态排序方法,默认状态都是按照添加的顺序处理的,如果有特殊的需求,需要指定状态顺序,可以通过这个方法实现\n * @since 1.9.0\n */\n stateSort?: (stateA: string, stateB: string) => number;\n\n /* 是否是3d视角的mark */\n support3d?: boolean;\n /* customized shape of mark */\n customShape?: (datum: any[], attrs: any, path: ICustomPath2D) => ICustomPath2D;\n} & IMarkProgressiveConfig;\n\nexport type IMarkStateFilter =\n | {\n /** 维度筛选 */\n fields: { [key in string]: { type: 'ordinal' | 'linear'; domain: StringOrNumber[] } };\n }\n | {\n /** 筛选数据 */\n datums: Datum[];\n /** 筛选数据 */\n datumKeys: string[];\n }\n | {\n /** 筛选 item */\n items: IElement[];\n }\n /** 筛选函数 */\n | ((datum: Datum, options: Record<string, any>) => boolean);\n\nexport interface IMarkStateSpec<T> {\n /** 筛选器 */\n filter?: IMarkStateFilter;\n /** 状态优先级 */\n level?: number | undefined;\n style: ConvertToMarkStyleSpec<T>;\n}\n\nexport type IMarkStateStyleSpec<T> = ConvertToMarkStyleSpec<T>;\n\nexport type IMarkTheme<T> = {\n /**\n * mark 层 是否显示配置\n */\n visible?: boolean;\n /** 默认样式设置 */\n style?: T;\n /** 不同状态下的样式配置 */\n state?: Record<StateValue, T>;\n /**\n * 可交互的开关\n */\n interactive?: boolean;\n};\n\nexport interface IPerformanceHook {\n // InitRender\n // ├── InitializeChart\n // ├── CompileToVGrammar\n // ├── ParseView\n // | └── ParseExpression\n // ├── (new View)\n // | ├── CreateRuntime\n // | └── (view.initialize)\n // | └── CreateVRenderStage\n // └── SrViewEvaluateAsync / SrViewRunAsync\n // ├── MarkTransform\n // ├── FacetTransform\n // ├── CreateVRenderMark\n // └── VRenderDraw\n\n // 初始化图表配置\n beforeInitializeChart?: () => void;\n afterInitializeChart?: () => void;\n\n // 编译\n beforeCompileToVGrammar?: () => void;\n afterCompileToVGrammar?: () => void;\n // 各个图表模块编译\n beforeRegionCompile?: () => void;\n afterRegionCompile?: () => void;\n beforeSeriesCompile?: () => void;\n afterSeriesCompile?: () => void;\n beforeComponentCompile?: () => void;\n afterComponentCompile?: () => void;\n\n // resize的时候的钩子\n beforeResizeWithUpdate?: () => void;\n afterResizeWithUpdate?: () => void;\n\n // LayoutWithSceneGraph 二次布局\n beforeLayoutWithSceneGraph?: () => void;\n afterLayoutWithSceneGraph?: () => void;\n\n // VGrammar 解析spec\n beforeParseView?: () => void;\n afterParseView?: () => void;\n\n // 初始化runtime\n beforeCreateRuntime?: () => void;\n afterCreateRuntime?: () => void;\n\n // VGrammar EvaluateAsync 时间\n beforeSrViewEvaluateAsync?: () => void;\n afterSrViewEvaluateAsync?: () => void;\n\n // VGrammar RunAsync 时间\n beforeSrViewRunAsync?: () => void;\n afterSrViewRunAsync?: () => void;\n\n // transform测量\n beforeTransform?: (name: string) => void;\n afterTransform?: (name: string) => void;\n\n // Create VRender Stage 时间\n beforeCreateVRenderStage?: () => void;\n afterCreateVRenderStage?: () => void;\n\n // Create VRender Mark 时间\n beforeCreateVRenderMark?: () => void;\n afterCreateVRenderMark?: () => void;\n\n // VRender Draw 时间\n beforeVRenderDraw?: () => void;\n afterVRenderDraw?: () => void;\n}\n\nexport type IBuildinMarkSpec = {\n group: IGroupMarkSpec;\n symbol: ISymbolMarkSpec;\n rule: IRuleMarkSpec;\n line: ILineMarkSpec;\n text: ITextMarkSpec;\n rect: IRectMarkSpec;\n rect3d: IRect3dMarkSpec;\n image: IImageMarkSpec;\n path: IPathMarkSpec;\n area: IAreaMarkSpec;\n arc: IArcMarkSpec;\n arc3d: IArc3dMarkSpec;\n polygon: IPolygonMarkSpec;\n pyramid3d: IPyramid3dMarkSpec;\n boxPlot: IBoxPlotMarkSpec;\n linkPath: ILinkPathMarkSpec;\n ripple: IRippleMarkSpec;\n};\n\nexport type EnableMarkType = keyof IBuildinMarkSpec;\nexport interface ICustomMarkSpec<T extends EnableMarkType>\n extends IModelSpec,\n IMarkSpec<IBuildinMarkSpec[T]>,\n IAnimationSpec<string, string> {\n type: T;\n /**\n * mark对应的名称,主要用于事件过滤如: { markName: 'yourName' }\n * @since 1.12.5\n */\n name?: string;\n /**\n * 关联的数据索引\n * @default 与系列使用同一份数据\n */\n dataIndex?: number;\n /**\n * dataKey用于绑定数据与Mark的关系\n * 如果数据和系列数据一致,可以不配置,默认会读取系列中的配置\n *\n * @support since 1.9.5\n */\n dataKey?: string | ((datum: any) => string);\n /**\n * 关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * specify the component type\n * @support since 1.9.0\n */\n componentType?: string;\n /**\n * enable animation of custom-mark or not\n * @since 1.11.0\n */\n animation?: boolean;\n}\nexport interface ICustomMarkGroupSpec extends ICustomMarkSpec<MarkTypeEnum.group> {\n children?: ICustomMarkSpec<EnableMarkType>[];\n}\n\nexport interface IExtensionMarkSpec<T extends Exclude<EnableMarkType, 'group'>> extends ICustomMarkSpec<T> {\n /**\n * 关联的数据索引\n * @default 与系列使用同一份数据\n */\n dataIndex?: number;\n /**\n * dataKey用于绑定数据与Mark的关系\n * 如果数据和系列数据一致,可以不配置,默认会读取系列中的配置\n *\n * @support since 1.9.5\n */\n dataKey?: string | ((datum: any) => string);\n /**\n * 关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * specify the component type\n * @support since 1.9.0\n */\n componentType?: string;\n}\n\nexport interface IExtensionGroupMarkSpec extends ICustomMarkSpec<MarkTypeEnum.group> {\n /**\n * 支持子节点\n */\n children?: ICustomMarkSpec<EnableMarkType>[];\n}\n\n/** 纯文本类型的 formatMethod */\nexport type ITextFormatMethod<T extends any[]> = (\n ...args: T\n) => ITextMarkSpec['text'] | { type: 'text'; text: ITextMarkSpec['text'] };\n\nexport type IRichTextFormatMethod<T extends any[]> = (...args: T) =>\n | {\n type: 'rich';\n text: IRichTextCharacter[];\n }\n | IRichTextCharacter[];\n\n/**\n * 常规 text.formatMethod 支持返回文字字符串,或统一的对象配置\n * (这里特指由 vgrammar 代理的 text 图元)\n */\nexport type IFormatMethod<T extends any[]> = (\n ...args: T\n) => ReturnType<ITextFormatMethod<T>> | ReturnType<IRichTextFormatMethod<T>>;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/typings/spec/common.ts"],"names":[],"mappings":";;;AAiIA,IAAY,cAWX;AAXD,WAAY,cAAc;IACxB,qDAAqC,CAAA;IACrC,mDAAmC,CAAA;IACnC,+BAAe,CAAA;IACf,mCAAmB,CAAA;IACnB,qCAAqB,CAAA;IACrB,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,qCAAqB,CAAA;IACrB,qDAAqC,CAAA;IACrC,+BAAe,CAAA;AACjB,CAAC,EAXW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAWzB","file":"common.js","sourcesContent":["import type { IVChart } from './../../core/interface';\nimport type { IFillMarkSpec, IImageMarkSpec } from '../visual';\nimport type { LayoutCallBack } from '../../layout/interface';\nimport type { IElement, srIOption3DType } from '@visactor/vgrammar-core';\nimport type {\n DataSet,\n DataView,\n ISimplifyOptions,\n IFieldsOptions,\n IFilterOptions,\n IFoldOptions,\n IDsvParserOptions\n} from '@visactor/vdataset';\nimport type { RegionSpec } from '../../region/interface';\nimport type { IHoverSpec, ISelectSpec, IInteractionSpec } from '../../interaction/interface';\nimport type { IRenderOption } from '../../compile/interface';\nimport type { ITooltipSpec } from '../../component/tooltip/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ILayoutSpec } from '../../layout/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type {\n ConvertToMarkStyleSpec,\n IArc3dMarkSpec,\n IArcMarkSpec,\n IAreaMarkSpec,\n IBoxPlotMarkSpec,\n ICommonSpec,\n IGroupMarkSpec,\n ILineMarkSpec,\n ILinkPathMarkSpec,\n IPathMarkSpec,\n IPolygonMarkSpec,\n IPyramid3dMarkSpec,\n IRect3dMarkSpec,\n IRectMarkSpec,\n IRuleMarkSpec,\n ISymbolMarkSpec,\n IRippleMarkSpec,\n ITextMarkSpec,\n IVisualSpecScale\n} from '../visual';\nimport type { StateValue } from '../../compile/mark';\nimport type { ISeriesStyle, SeriesType } from '../../series/interface';\nimport type { Datum, StringOrNumber } from '../common';\nimport type { IInvalidType } from '../data';\nimport type { IAnimationSpec, IMorphSeriesSpec } from '../../animation/spec';\nimport type { IPlayer } from '../../component/player';\nimport type { IMarkProgressiveConfig, MarkTypeEnum } from '../../mark/interface';\nimport type { IDataZoomSpec, IScrollBarSpec } from '../../component/data-zoom';\nimport type { ICrosshairSpec } from '../../component/crosshair/interface';\nimport type { ITheme } from '../../theme';\nimport type { ITitleSpec } from '../../component/title/interface';\nimport type { IBrushSpec } from '../../component/brush';\nimport type { ITotalLabelSpec } from '../../component/label';\nimport type { ILegendSpec } from '../../component/legend';\nimport type { ILayoutOrientPadding, ILayoutPaddingSpec } from '../layout';\nimport type { IColor, ICustomPath2D, IRichTextCharacter } from '@visactor/vrender-core';\nimport type { ICommonAxisSpec } from '../../component/axis';\nimport type { IMediaQuerySpec } from '..';\nimport type { IModelSpec } from '../../model/interface';\n\nexport type IChartPadding = ILayoutOrientPadding | number;\n\n/** chart option */\nexport interface IInitOption extends Omit<IRenderOption, 'pluginList'> {\n /**\n * **仅生效于浏览器环境。**\n * 图表挂载的父容器,可以直接指定容器 id,也可以传入 dom 对象\n */\n dom?: string | HTMLElement;\n /**\n * 除去选择 dom 属性进行挂载父容器,也可以使用 renderCanvas 属性直接传入 canvas 实例/ canvasId\n * 小程序/小组件环境请直接传入 id\n */\n renderCanvas?: string | HTMLCanvasElement;\n /** 数据集 */\n dataSet?: DataSet;\n /** 是否自适应容器大小 */\n autoFit?: boolean;\n /**\n * 性能测试钩子\n */\n performanceHook?: IPerformanceHook;\n /**\n * 是否开启动画\n */\n animation?: boolean;\n /**\n * 3d配置\n */\n options3d?: srIOption3DType;\n\n /**\n * 自定义布局函数\n */\n layout?: LayoutCallBack;\n\n /**\n * 当文本省略时,鼠标 hover 到文本上时是否显示 poptip\n * @default true\n */\n poptip?: boolean;\n\n /**\n * 报错的回调函数\n * @since 1.2.0\n */\n onError?: (...args: any[]) => void;\n\n /**\n * 默认主题(支持完整主题对象或者主题名称,主题名称需要提前在 `ThemeManager` 中注册)\n * @since 1.3.0\n */\n theme?: string | ITheme;\n\n /**\n * 是否关闭交互效果\n * @since 1.9.0\n * @default false\n */\n disableTriggerEvent?: boolean;\n /**\n * 当自动响应容器resize 事件时,触发resize 的间隔时长,单位毫秒\n * @since 1.12.5\n * @default 100\n */\n resizeDelay?: number;\n}\n\nexport enum RenderModeEnum {\n 'desktop-browser' = 'desktop-browser',\n 'mobile-browser' = 'mobile-browser',\n 'node' = 'node',\n 'worker' = 'worker',\n 'miniApp' = 'miniApp',\n 'wx' = 'wx',\n 'tt' = 'tt',\n 'harmony' = 'harmony',\n 'desktop-miniApp' = 'desktop-miniApp',\n 'lynx' = 'lynx'\n}\nexport type RenderMode = keyof typeof RenderModeEnum;\n\n/** chart spec */\nexport interface IChartSpec {\n /** 图表类型 */\n type: string;\n /** 数据 */\n data?: IData;\n /** 画布宽度 */\n width?: number;\n /** 画布高度 */\n height?: number;\n /**\n * 图表宽高是否自适应容器,浏览器环境下默认为 true。\n * 该配置的优先级高于构造函数中的 autoFit 配置。\n * 如果用户配置了 width,则以用户配置的 width 为准,height 同理。\n */\n autoFit?: boolean;\n /**\n * 图表整体 padding 设置\n */\n padding?: ILayoutPaddingSpec;\n /**\n * 图表色系配置\n */\n color?: string[] | Omit<IVisualSpecScale<unknown, string>, 'id'>;\n /**\n * 系列\n * @description 仅在组合图中使用, 文档中除组合图外均未透出该配置\n */\n series?: ISeriesSpec[];\n /**\n * 系列样式\n * @description 仅在图表配置了seriesField时生效\n */\n seriesStyle?: ISeriesStyle;\n\n /**\n * 自动关闭动画的阀值,对应的是单系列data的长度\n * @since 1.2.0\n */\n animationThreshold?: number;\n\n /** hover 交互 */\n hover?: boolean | IHoverSpec;\n /** select 交互 */\n select?: boolean | ISelectSpec;\n\n /** region配置 */\n region?: RegionSpec[];\n /** 图表标题配置 */\n title?: ITitleSpec;\n /** 布局配置 */\n layout?: ILayoutSpec;\n /** 图例配置 */\n legends?: ILegendSpec | ILegendSpec[];\n /** 十字辅助线配置 */\n crosshair?: ICrosshairSpec | ICrosshairSpec[];\n /** tooltip配置 */\n tooltip?: ITooltipSpec;\n /** 播放器配置 */\n player?: IPlayer;\n /** 缩略轴配置 */\n dataZoom?: IDataZoomSpec | IDataZoomSpec[];\n /** 滚动条配置 */\n scrollBar?: IScrollBarSpec | IScrollBarSpec[];\n /** 框选配置 */\n brush?: IBrushSpec;\n /** 全局 scale 配置 */\n scales?: IVisualSpecScale<unknown, unknown>[];\n /** 自定义mark */\n customMark?: ICustomMarkSpec<EnableMarkType>[];\n /** 轴 */\n axes?: ICommonAxisSpec[];\n /**\n * 图表上的主题定义。\n * 可以直接配置主题名,前提是该主题名已经注册\n */\n theme?: Omit<ITheme, 'name'> | string;\n /**\n * 图表背景色配置,优先级高于构造函数中的 background 配置\n * 自1.11.6版本支持渐变色对象的配置\n */\n background?: IBackgroundSpec;\n\n // TODO:后续开放,现在仍有问题\n // poptip?: PopTipAttributes;\n // TODO: 补充动画配置\n\n /**\n * 堆积时是否逆序\n * @default false\n * @since 1.4.0\n */\n stackInverse?: boolean;\n /**\n * 堆积时是否排序\n * @default false\n * @since 1.10.4\n */\n stackSort?: boolean;\n /**\n * 媒体查询配置\n * @since 1.8.0\n */\n media?: IMediaQuerySpec;\n}\n\nexport type IBackgroundStyleSpec = ConvertToMarkStyleSpec<Omit<IFillMarkSpec, 'width' | 'height' | 'background'>> & {\n image?: IRectMarkSpec['background'];\n cornerRadius?: IRectMarkSpec['cornerRadius'];\n};\n\nexport type IBackgroundSpec = IColor | IBackgroundStyleSpec;\n\n/** data */\nexport type IDataType = IDataValues | DataView;\nexport type IData = IDataType | IDataType[];\nexport type DataKeyType = string | string[] | ((data: Datum, index: number) => string);\nexport type BuildInTransformOptions =\n | {\n /** 地理数据简化 */\n type: 'simplify';\n options: ISimplifyOptions;\n }\n | {\n /** 数据维度处理,包括排序,逆序,数据筛选能力 */\n type: 'fields';\n options: IFieldsOptions;\n }\n | {\n /** 使用回调的自定义筛选 */\n type: 'filter';\n options: IFilterOptions;\n }\n | {\n /** 数据展开 */\n type: 'fold';\n options: IFoldOptions;\n };\n\nexport interface IFieldsMeta {\n /** TODO: 字段通用format, 暂时先不支持 */\n // format?: (datum: Datum, index: number) => unknown;\n /** 字段别名 */\n alias?: string;\n /** 字段取值范围 */\n domain?: StringOrNumber[];\n /** 是否使用 domain 锁定统计信息。默认为 false */\n lockStatisticsByDomain?: boolean;\n /** 连续型 还是 离散型 */\n type?: 'ordinal' | 'linear';\n /** 排序顺序 不设置的话当前维度不进行排序 */\n sortIndex?: number;\n /** 排序时是否反转 默认为 false */\n sortReverse?: boolean;\n}\n\nexport interface SheetParseOptions extends CommonParseOptions {\n type: 'csv' | 'dsv' | 'tsv';\n options?: IDsvParserOptions;\n}\n\nexport interface CommonParseOptions {\n /**\n * 是否需要对数据进行 clone,默认为 true。\n * 如果考虑性能,你可以将其关闭,但是这会带了一些副作用,即我们会对传入的数据进行修改(不会对原有字段及值修改,只会在原有数据基础上添加一些字段)。\n * @default true\n * @since 1.3.0\n */\n clone?: boolean;\n}\n\nexport interface IDataValues {\n /**\n * 数据唯一标识\n */\n id?: StringOrNumber;\n /**\n * 数据\n */\n values: Datum[] | string;\n /**\n * 引用的数据索引\n */\n fromDataIndex?: number;\n /**\n * 引用的数据 id\n */\n fromDataId?: StringOrNumber;\n /**\n * 数据 transform 配置\n */\n transforms?: BuildInTransformOptions[];\n /**\n * 数据字段相关配置\n */\n fields?: Record<\n /** 字段key */\n string,\n IFieldsMeta\n >;\n\n parser?: SheetParseOptions | CommonParseOptions;\n}\n\nexport type IHierarchyNodeData = {\n value?: number;\n children?: IHierarchyNodeData[];\n} & Datum;\n\nexport interface IHierarchyDataValues extends Omit<IDataValues, 'values'> {\n values: IHierarchyNodeData;\n}\n\nexport type IHierarchyData = DataView | IHierarchyDataValues;\n\n/** series */\nexport interface ISeriesSpec extends IInteractionSpec {\n /** 系列类型 */\n type: SeriesType;\n\n /** 系列名称 */\n name?: string;\n\n /** 用户自定义的 series id */\n id?: StringOrNumber;\n /**\n * 系列数据\n * @description 系列可以配置自身的数据,也可以从chart.data中获取数据\n */\n data?: IDataType;\n /**\n * 系列关联的数据索引\n * @default 0\n */\n dataIndex?: number;\n /**\n * 系列关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * dataKey用于绑定数据与Mark的关系, 该配置在动画中非常重要.\n */\n dataKey?: DataKeyType;\n\n /**\n * 系列关联的region索引\n * @default 0\n */\n regionIndex?: number;\n /** 系列关联的region id */\n regionId?: StringOrNumber;\n /**\n * 分组字段\n */\n seriesField?: string;\n /**\n * 系列样式\n * @description 仅在图表配置了seriesField时生效\n */\n seriesStyle?: ISeriesStyle;\n\n /** 是否对数据进行堆叠处理 */\n stack?: boolean;\n\n /**\n * 堆叠时的分组值\n * stackValue 相等的系列将在一起堆积。没有配置的系列将在一组\n * @since 1.4.0\n */\n stackValue?: StringOrNumber;\n\n /** 堆叠汇总标签\n * @since 1.3.0\n */\n totalLabel?: ITotalLabelSpec;\n\n /** 是否对数据进行百分比处理 */\n percent?: boolean;\n\n /** 是否围绕中心轴偏移轮廓 */\n stackOffsetSilhouette?: boolean;\n\n /**\n * 非合规数据点连接方式\n * @description null,undefined等非法数据点连接方式。\n * @default 'break'\n * 'break'指在该数据点处断开\n * 'link' 指忽略该点保持连续\n * 'zero' 指该点默认数值为0\n * 'ignore' 指不处理\n */\n invalidType?: IInvalidType;\n\n /** 提示信息 */\n tooltip?: ITooltipSpec;\n\n /**\n * 是否开启系列动画\n */\n animation?: boolean;\n /**\n * 自动关闭动画的阀值,对应的是单系列data的长度\n * @since 1.2.0\n */\n animationThreshold?: number;\n\n /**\n * 是否支持3d视角\n */\n support3d?: boolean;\n /**\n * morph 动画配置\n */\n morph?: IMorphSeriesSpec;\n\n /**\n * 扩展mark\n */\n extensionMark?: (IExtensionMarkSpec<Exclude<EnableMarkType, 'group'>> | IExtensionGroupMarkSpec)[];\n\n /**\n * series background\n * 作用是支持系列的图形对系列背景进行 mask,或者切分等效果。不是作为背景图\n * 暂时不开放api,避免出现break change\n */\n // background?: IBackgroundSpec;\n}\n\nexport type IChartExtendsSeriesSpec<T extends ISeriesSpec> = Omit<T, 'data' | 'morph' | 'stackValue'>;\n\nexport type AdaptiveSpec<T, K extends keyof any> = {\n [key in Exclude<keyof T, K>]: T[key];\n} & { [key in K]: any };\n\n/** markSpec */\nexport type IMarkSpec<T extends ICommonSpec = ICommonSpec> = {\n /**\n * 用户id\n */\n id?: StringOrNumber;\n /**\n * 是否响应交互\n */\n interactive?: boolean;\n // /**\n // * 是否会被region区域裁减\n // * @todo 暂未支持\n // */\n // clip?: boolean;\n /**\n * 与其他mark元素的层级\n */\n zIndex?: number;\n /**\n * mark 层 是否显示配置\n */\n visible?: boolean;\n /** 默认样式设置 */\n style?: ConvertToMarkStyleSpec<T>;\n /** 不同状态下的样式配置 */\n state?: Record<StateValue, IMarkStateSpec<T> | IMarkStateStyleSpec<T>>;\n /**\n * 状态排序方法,默认状态都是按照添加的顺序处理的,如果有特殊的需求,需要指定状态顺序,可以通过这个方法实现\n * @since 1.9.0\n */\n stateSort?: (stateA: string, stateB: string) => number;\n\n /* 是否是3d视角的mark */\n support3d?: boolean;\n /* customized shape of mark */\n customShape?: (datum: any[], attrs: any, path: ICustomPath2D) => ICustomPath2D;\n} & IMarkProgressiveConfig;\n\nexport type IMarkStateFilter =\n | {\n /** 维度筛选 */\n fields: { [key in string]: { type: 'ordinal' | 'linear'; domain: StringOrNumber[] } };\n }\n | {\n /** 筛选数据 */\n datums: Datum[];\n /** 筛选数据 */\n datumKeys: string[];\n }\n | {\n /** 筛选 item */\n items: IElement[];\n }\n /** 筛选函数 */\n | ((datum: Datum, options: Record<string, any>) => boolean);\n\nexport interface IMarkStateSpec<T> {\n /** 筛选器 */\n filter?: IMarkStateFilter;\n /** 状态优先级 */\n level?: number | undefined;\n style: ConvertToMarkStyleSpec<T>;\n}\n\nexport type IMarkStateStyleSpec<T> = ConvertToMarkStyleSpec<T>;\n\nexport type IMarkTheme<T> = {\n /**\n * mark 层 是否显示配置\n */\n visible?: boolean;\n /** 默认样式设置 */\n style?: T;\n /** 不同状态下的样式配置 */\n state?: Record<StateValue, T>;\n /**\n * 可交互的开关\n */\n interactive?: boolean;\n};\n\nexport interface IPerformanceHook {\n // constructor\n // 创建完成。在使用 vstory 的场景下,图表实例不由业务创建,业务想要获取图表时机非常靠后,因此补充一个钩子\n afterCreateVChart?: (vchart?: IVChart) => void;\n\n // InitRender\n // ├── InitializeChart\n // ├── CompileToVGrammar\n // ├── ParseView\n // | └── ParseExpression\n // ├── (new View)\n // | ├── CreateRuntime\n // | └── (view.initialize)\n // | └── CreateVRenderStage\n // └── SrViewEvaluateAsync / SrViewRunAsync\n // ├── MarkTransform\n // ├── FacetTransform\n // ├── CreateVRenderMark\n // └── VRenderDraw\n\n // 初始化图表配置\n beforeInitializeChart?: (vchart?: IVChart) => void;\n afterInitializeChart?: (vchart?: IVChart) => void;\n\n // 编译\n beforeCompileToVGrammar?: () => void;\n afterCompileToVGrammar?: () => void;\n // 各个图表模块编译\n beforeRegionCompile?: () => void;\n afterRegionCompile?: () => void;\n beforeSeriesCompile?: () => void;\n afterSeriesCompile?: () => void;\n beforeComponentCompile?: () => void;\n afterComponentCompile?: () => void;\n\n // resize的时候的钩子\n beforeResizeWithUpdate?: () => void;\n afterResizeWithUpdate?: () => void;\n\n // LayoutWithSceneGraph 二次布局\n beforeLayoutWithSceneGraph?: () => void;\n afterLayoutWithSceneGraph?: () => void;\n\n // VGrammar 解析spec\n beforeParseView?: () => void;\n afterParseView?: () => void;\n\n // 初始化runtime\n beforeCreateRuntime?: () => void;\n afterCreateRuntime?: () => void;\n\n // VGrammar EvaluateAsync 时间\n beforeSrViewEvaluateAsync?: () => void;\n afterSrViewEvaluateAsync?: () => void;\n\n // VGrammar RunAsync 时间\n beforeSrViewRunAsync?: () => void;\n afterSrViewRunAsync?: () => void;\n\n // transform测量\n beforeTransform?: (name: string) => void;\n afterTransform?: (name: string) => void;\n\n // Create VRender Stage 时间\n beforeCreateVRenderStage?: () => void;\n afterCreateVRenderStage?: () => void;\n\n // Create VRender Mark 时间\n beforeCreateVRenderMark?: () => void;\n afterCreateVRenderMark?: () => void;\n\n // VRender Draw 时间\n beforeVRenderDraw?: () => void;\n afterVRenderDraw?: () => void;\n}\n\nexport type IBuildinMarkSpec = {\n group: IGroupMarkSpec;\n symbol: ISymbolMarkSpec;\n rule: IRuleMarkSpec;\n line: ILineMarkSpec;\n text: ITextMarkSpec;\n rect: IRectMarkSpec;\n rect3d: IRect3dMarkSpec;\n image: IImageMarkSpec;\n path: IPathMarkSpec;\n area: IAreaMarkSpec;\n arc: IArcMarkSpec;\n arc3d: IArc3dMarkSpec;\n polygon: IPolygonMarkSpec;\n pyramid3d: IPyramid3dMarkSpec;\n boxPlot: IBoxPlotMarkSpec;\n linkPath: ILinkPathMarkSpec;\n ripple: IRippleMarkSpec;\n};\n\nexport type EnableMarkType = keyof IBuildinMarkSpec;\nexport interface ICustomMarkSpec<T extends EnableMarkType>\n extends IModelSpec,\n IMarkSpec<IBuildinMarkSpec[T]>,\n IAnimationSpec<string, string> {\n type: T;\n /**\n * mark对应的名称,主要用于事件过滤如: { markName: 'yourName' }\n * @since 1.12.5\n */\n name?: string;\n /**\n * 关联的数据索引\n * @default 与系列使用同一份数据\n */\n dataIndex?: number;\n /**\n * dataKey用于绑定数据与Mark的关系\n * 如果数据和系列数据一致,可以不配置,默认会读取系列中的配置\n *\n * @support since 1.9.5\n */\n dataKey?: string | ((datum: any) => string);\n /**\n * 关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * specify the component type\n * @support since 1.9.0\n */\n componentType?: string;\n /**\n * enable animation of custom-mark or not\n * @since 1.11.0\n */\n animation?: boolean;\n}\nexport interface ICustomMarkGroupSpec extends ICustomMarkSpec<MarkTypeEnum.group> {\n children?: ICustomMarkSpec<EnableMarkType>[];\n}\n\nexport interface IExtensionMarkSpec<T extends Exclude<EnableMarkType, 'group'>> extends ICustomMarkSpec<T> {\n /**\n * 关联的数据索引\n * @default 与系列使用同一份数据\n */\n dataIndex?: number;\n /**\n * dataKey用于绑定数据与Mark的关系\n * 如果数据和系列数据一致,可以不配置,默认会读取系列中的配置\n *\n * @support since 1.9.5\n */\n dataKey?: string | ((datum: any) => string);\n /**\n * 关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * specify the component type\n * @support since 1.9.0\n */\n componentType?: string;\n}\n\nexport interface IExtensionGroupMarkSpec extends ICustomMarkSpec<MarkTypeEnum.group> {\n /**\n * 支持子节点\n */\n children?: ICustomMarkSpec<EnableMarkType>[];\n}\n\n/** 纯文本类型的 formatMethod */\nexport type ITextFormatMethod<T extends any[]> = (\n ...args: T\n) => ITextMarkSpec['text'] | { type: 'text'; text: ITextMarkSpec['text'] };\n\nexport type IRichTextFormatMethod<T extends any[]> = (...args: T) =>\n | {\n type: 'rich';\n text: IRichTextCharacter[];\n }\n | IRichTextCharacter[];\n\n/**\n * 常规 text.formatMethod 支持返回文字字符串,或统一的对象配置\n * (这里特指由 vgrammar 代理的 text 图元)\n */\nexport type IFormatMethod<T extends any[]> = (\n ...args: T\n) => ReturnType<ITextFormatMethod<T>> | ReturnType<IRichTextFormatMethod<T>>;\n"]}
|
|
@@ -528,11 +528,11 @@ export class BaseChart extends CompilableBase {
|
|
|
528
528
|
}
|
|
529
529
|
compileBackground() {
|
|
530
530
|
var _a;
|
|
531
|
-
this._backgroundMark && (this._backgroundMark.compile(
|
|
531
|
+
this._backgroundMark && (this._backgroundMark.compile({
|
|
532
532
|
context: {
|
|
533
533
|
model: this
|
|
534
534
|
}
|
|
535
|
-
}).layout((() => {})));
|
|
535
|
+
}), null === (_a = this._backgroundMark.getProduct()) || void 0 === _a || _a.layout((() => {})));
|
|
536
536
|
}
|
|
537
537
|
compileRegions() {
|
|
538
538
|
var _a, _b, _c, _d;
|