@visactor/vchart 1.13.4 → 1.13.5-alpha.1
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.es.js +577 -774
- package/build/index.js +578 -773
- package/build/index.min.js +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/cjs/chart/base/base-chart.js +2 -6
- package/cjs/chart/base/base-chart.js.map +1 -1
- package/cjs/component/crosshair/base.d.ts +23 -34
- package/cjs/component/crosshair/base.js +90 -6
- package/cjs/component/crosshair/base.js.map +1 -1
- package/cjs/component/crosshair/cartesian.d.ts +5 -28
- package/cjs/component/crosshair/cartesian.js +71 -170
- package/cjs/component/crosshair/cartesian.js.map +1 -1
- package/cjs/component/crosshair/interface/common.d.ts +67 -2
- package/cjs/component/crosshair/interface/common.js.map +1 -1
- package/cjs/component/crosshair/interface/index.d.ts +0 -2
- package/cjs/component/crosshair/interface/index.js +0 -1
- package/cjs/component/crosshair/interface/index.js.map +1 -1
- package/cjs/component/crosshair/interface/spec.d.ts +8 -4
- package/cjs/component/crosshair/interface/spec.js.map +1 -1
- package/cjs/component/crosshair/polar.d.ts +6 -22
- package/cjs/component/crosshair/polar.js +78 -143
- package/cjs/component/crosshair/polar.js.map +1 -1
- package/cjs/component/crosshair/utils/cartesian.d.ts +5 -26
- package/cjs/component/crosshair/utils/cartesian.js +86 -174
- package/cjs/component/crosshair/utils/cartesian.js.map +1 -1
- package/cjs/component/crosshair/utils/polar.d.ts +18 -11
- package/cjs/component/crosshair/utils/polar.js +72 -117
- package/cjs/component/crosshair/utils/polar.js.map +1 -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/event/index.d.ts +1 -0
- package/cjs/event/index.js +16 -1
- package/cjs/event/index.js.map +1 -1
- package/cjs/plugin/components/tooltip-handler/utils/position.d.ts +2 -4
- package/cjs/plugin/components/tooltip-handler/utils/position.js +23 -11
- package/cjs/plugin/components/tooltip-handler/utils/position.js.map +1 -1
- package/esm/chart/base/base-chart.js +2 -6
- package/esm/chart/base/base-chart.js.map +1 -1
- package/esm/component/crosshair/base.d.ts +23 -34
- package/esm/component/crosshair/base.js +95 -5
- package/esm/component/crosshair/base.js.map +1 -1
- package/esm/component/crosshair/cartesian.d.ts +5 -28
- package/esm/component/crosshair/cartesian.js +72 -174
- package/esm/component/crosshair/cartesian.js.map +1 -1
- package/esm/component/crosshair/interface/common.d.ts +67 -2
- package/esm/component/crosshair/interface/common.js.map +1 -1
- package/esm/component/crosshair/interface/index.d.ts +0 -2
- package/esm/component/crosshair/interface/index.js +0 -4
- package/esm/component/crosshair/interface/index.js.map +1 -1
- package/esm/component/crosshair/interface/spec.d.ts +8 -4
- package/esm/component/crosshair/interface/spec.js.map +1 -1
- package/esm/component/crosshair/polar.d.ts +6 -22
- package/esm/component/crosshair/polar.js +75 -146
- package/esm/component/crosshair/polar.js.map +1 -1
- package/esm/component/crosshair/utils/cartesian.d.ts +5 -26
- package/esm/component/crosshair/utils/cartesian.js +81 -166
- package/esm/component/crosshair/utils/cartesian.js.map +1 -1
- package/esm/component/crosshair/utils/polar.d.ts +18 -11
- package/esm/component/crosshair/utils/polar.js +67 -112
- package/esm/component/crosshair/utils/polar.js.map +1 -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/event/index.d.ts +1 -0
- package/esm/event/index.js +2 -0
- package/esm/event/index.js.map +1 -1
- package/esm/plugin/components/tooltip-handler/utils/position.d.ts +2 -4
- package/esm/plugin/components/tooltip-handler/utils/position.js +23 -10
- package/esm/plugin/components/tooltip-handler/utils/position.js.map +1 -1
- package/package.json +3 -3
- package/cjs/component/crosshair/interface/cartesian.d.ts +0 -33
- package/cjs/component/crosshair/interface/cartesian.js +0 -6
- package/cjs/component/crosshair/interface/cartesian.js.map +0 -1
- package/cjs/component/crosshair/interface/polar.d.ts +0 -25
- package/cjs/component/crosshair/interface/polar.js +0 -6
- package/cjs/component/crosshair/interface/polar.js.map +0 -1
- package/esm/component/crosshair/interface/cartesian.d.ts +0 -33
- package/esm/component/crosshair/interface/cartesian.js +0 -2
- package/esm/component/crosshair/interface/cartesian.js.map +0 -1
- package/esm/component/crosshair/interface/polar.d.ts +0 -25
- package/esm/component/crosshair/interface/polar.js +0 -2
- package/esm/component/crosshair/interface/polar.js.map +0 -1
|
@@ -1,124 +1,79 @@
|
|
|
1
|
-
var __rest = this && this.__rest || function(s, e) {
|
|
2
|
-
var t = {};
|
|
3
|
-
for (var p in s) Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0 && (t[p] = s[p]);
|
|
4
|
-
if (null != s && "function" == typeof Object.getOwnPropertySymbols) {
|
|
5
|
-
var i = 0;
|
|
6
|
-
for (p = Object.getOwnPropertySymbols(s); i < p.length; i++) e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]) && (t[p[i]] = s[p[i]]);
|
|
7
|
-
}
|
|
8
|
-
return t;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
1
|
import { getAxisLabelOffset } from "../../axis/util";
|
|
12
2
|
|
|
13
3
|
import { PointService, clamp, getAngleByPoint, getIntersectPoint, isValid, polarToCartesian } from "@visactor/vutils";
|
|
14
4
|
|
|
15
|
-
import { mergeSpec } from "@visactor/vutils-extension";
|
|
16
|
-
|
|
17
5
|
import { getFormatFunction } from "../../util";
|
|
18
6
|
|
|
19
|
-
export const layoutByValue = (
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
7
|
+
export const layoutByValue = (stateByField, series, enableRemain = !1) => {
|
|
8
|
+
Object.keys(stateByField).forEach((field => {
|
|
9
|
+
const {attributes: attributes, currentValue: currentValue, cacheInfo: cacheInfo, coordKey: coordKey} = stateByField[field];
|
|
10
|
+
if (attributes) {
|
|
11
|
+
const isVisible = !!currentValue.size, useCache = enableRemain && !isVisible && isValid(cacheInfo), newInfo = useCache ? cacheInfo : {
|
|
12
|
+
coord: 0,
|
|
13
|
+
axis: null,
|
|
14
|
+
visible: isVisible,
|
|
15
|
+
coordRange: [ 0, 0 ],
|
|
16
|
+
sizeRange: [ 0, 0 ],
|
|
17
|
+
labels: {
|
|
18
|
+
all: {
|
|
19
|
+
visible: !1,
|
|
20
|
+
text: "",
|
|
21
|
+
offset: 0
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
if (cacheInfo && (cacheInfo._isCache = useCache), "valueField" === field && (newInfo.sides = series.angleAxisHelper.getScale(0).domain().length),
|
|
26
|
+
currentValue.forEach((({axis: axis, datum: value = ""}) => {
|
|
27
|
+
var _a;
|
|
28
|
+
const niceLabelFormatter = axis.niceLabelFormatter;
|
|
29
|
+
if ((null === (_a = attributes.label) || void 0 === _a ? void 0 : _a.visible) && (newInfo.labels.all.visible = !0,
|
|
30
|
+
newInfo.labels.all.defaultFormatter = niceLabelFormatter, newInfo.labels.all.text = value,
|
|
31
|
+
newInfo.labels.all.offset = getAxisLabelOffset(axis.getSpec())), "categoryField" === field) {
|
|
32
|
+
const angle = series.angleAxisHelper.dataToPosition([ value ]), bandSize = series.angleAxisHelper.getBandwidth(0), radius = axis.getOuterRadius();
|
|
33
|
+
newInfo.coord = angle, newInfo.coordRange = [ angle - bandSize / 2, angle + bandSize / 2 ],
|
|
34
|
+
newInfo.sizeRange = [ radius, radius ];
|
|
35
|
+
} else {
|
|
36
|
+
const angle = axis.startAngle, radius = series.radiusAxisHelper.dataToPosition([ value ]);
|
|
37
|
+
newInfo.coord = radius, newInfo.coordRange = [ radius, radius ], newInfo.sizeRange = [ angle, angle ];
|
|
38
|
+
}
|
|
39
|
+
newInfo.axis = axis;
|
|
40
|
+
})), newInfo && !useCache && newInfo.labels.all.visible && attributes && attributes.label) {
|
|
41
|
+
const label = newInfo.labels.all, {formatMethod: formatMethod, formatter: formatter} = attributes.label, {formatFunc: formatFunc, args: args} = getFormatFunction(formatMethod, formatter, label.text, {
|
|
42
|
+
label: label.text,
|
|
43
|
+
orient: coordKey
|
|
44
|
+
});
|
|
45
|
+
formatFunc ? label.text = formatFunc(...args) : label.defaultFormatter && (label.text = label.defaultFormatter(label.text));
|
|
46
|
+
}
|
|
47
|
+
stateByField[field].cacheInfo = newInfo;
|
|
56
48
|
}
|
|
57
|
-
};
|
|
58
|
-
if (angleHair) {
|
|
59
|
-
angleCrossHairInfo.visible = !!currValueAngle.size;
|
|
60
|
-
const bandWidth = series.angleAxisHelper.getBandwidth(0);
|
|
61
|
-
currValueAngle.forEach((_a => {
|
|
62
|
-
var _b, {axis: axis, value: value, coord: coord} = _a, rest = __rest(_a, [ "axis", "value", "coord" ]);
|
|
63
|
-
value = null != value ? value : "", mergeSpec(angleCrossHairInfo, rest);
|
|
64
|
-
const angle = series.angleAxisHelper.dataToPosition([ value ]);
|
|
65
|
-
angleCrossHairInfo.angle = angle;
|
|
66
|
-
const niceLabelFormatter = axis.niceLabelFormatter;
|
|
67
|
-
(null === (_b = angleHair.label) || void 0 === _b ? void 0 : _b.visible) && (angleCrossHairInfo.label.visible = !0,
|
|
68
|
-
angleCrossHairInfo.label.defaultFormatter = niceLabelFormatter, angleCrossHairInfo.label.text = value,
|
|
69
|
-
angleCrossHairInfo.label.offset = getAxisLabelOffset(axis.getSpec())), angleCrossHairInfo.startAngle = angle - bandWidth / 2,
|
|
70
|
-
angleCrossHairInfo.endAngle = angle + bandWidth / 2;
|
|
71
|
-
}));
|
|
72
|
-
}
|
|
73
|
-
if (radiusHair && (radiusCrossHairInfo.visible = !!currValueRadius.size, currValueRadius.forEach((_a => {
|
|
74
|
-
var _b, {axis: axis, value: value, coord: coord} = _a, rest = __rest(_a, [ "axis", "value", "coord" ]);
|
|
75
|
-
value = null != value ? value : "";
|
|
76
|
-
const niceLabelFormatter = axis.niceLabelFormatter;
|
|
77
|
-
(null === (_b = radiusHair.label) || void 0 === _b ? void 0 : _b.visible) && (radiusCrossHairInfo.label.visible = !0,
|
|
78
|
-
radiusCrossHairInfo.label.defaultFormatter = niceLabelFormatter, radiusCrossHairInfo.label.text = value,
|
|
79
|
-
radiusCrossHairInfo.label.offset = getAxisLabelOffset(axis.getSpec())), radiusCrossHairInfo.angle = coord.angle,
|
|
80
|
-
radiusCrossHairInfo.axis = axis, mergeSpec(radiusCrossHairInfo, rest);
|
|
81
|
-
}))), enableRemain && !angleCrossHairInfo.visible && isValid(cacheAngleCrossHairInfo)) angleCrossHairInfo = cacheAngleCrossHairInfo; else if (angleCrossHairInfo.label.visible && angleHair && angleHair.label) {
|
|
82
|
-
const {label: label} = angleCrossHairInfo, {formatMethod: formatMethod, formatter: formatter} = angleHair.label, {formatFunc: formatFunc, args: args} = getFormatFunction(formatMethod, formatter, label.text, {
|
|
83
|
-
label: label.text,
|
|
84
|
-
orient: "angle"
|
|
85
|
-
});
|
|
86
|
-
formatFunc ? label.text = formatFunc(...args) : label.defaultFormatter && (label.text = label.defaultFormatter(label.text));
|
|
87
|
-
}
|
|
88
|
-
if (enableRemain && !radiusCrossHairInfo.visible && isValid(cacheRadiusCrossHairInfo)) radiusCrossHairInfo = cacheRadiusCrossHairInfo; else if (radiusCrossHairInfo.label.visible && radiusHair && radiusHair.label) {
|
|
89
|
-
const {label: label} = radiusCrossHairInfo, {formatMethod: formatMethod, formatter: formatter} = radiusHair.label, {formatFunc: formatFunc, args: args} = getFormatFunction(formatMethod, formatter, label.text, {
|
|
90
|
-
label: label.text,
|
|
91
|
-
orient: "radius"
|
|
92
|
-
});
|
|
93
|
-
formatFunc ? label.text = formatFunc(...args) : label.defaultFormatter && (label.text = label.defaultFormatter(label.text));
|
|
94
|
-
}
|
|
95
|
-
return {
|
|
96
|
-
angle: angleCrossHairInfo,
|
|
97
|
-
radius: radiusCrossHairInfo
|
|
98
|
-
};
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
export const layoutAngleCrosshair = (angleHair, crosshairInfo) => {
|
|
102
|
-
const {angle: angle, innerRadius: innerRadius, radius: radius, startAngle: startAngle, endAngle: endAngle, center: center} = crosshairInfo;
|
|
103
|
-
let positionAttrs;
|
|
104
|
-
return positionAttrs = "sector" === ("rect" === angleHair.type ? "sector" : "line") ? {
|
|
105
|
-
center: center,
|
|
106
|
-
innerRadius: innerRadius,
|
|
107
|
-
radius: radius,
|
|
108
|
-
startAngle: startAngle,
|
|
109
|
-
endAngle: endAngle
|
|
110
|
-
} : {
|
|
111
|
-
start: polarToCartesian(center, innerRadius, angle),
|
|
112
|
-
end: polarToCartesian(center, radius, angle)
|
|
113
|
-
}, positionAttrs;
|
|
49
|
+
}));
|
|
114
50
|
};
|
|
115
51
|
|
|
116
|
-
export const
|
|
117
|
-
const {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
52
|
+
export const layoutCrosshair = (stateItem, layoutStartPoint, smooth) => {
|
|
53
|
+
const {cacheInfo: cacheInfo, coordKey: coordKey, attributes: attributes} = stateItem, {axis: axis, coord: coord, sizeRange: sizeRange, coordRange: coordRange} = cacheInfo, axisCenter = axis.getCenter(), center = {
|
|
54
|
+
x: axisCenter.x + layoutStartPoint.x,
|
|
55
|
+
y: axisCenter.y + layoutStartPoint.y
|
|
56
|
+
};
|
|
57
|
+
if ("angle" === coordKey) {
|
|
58
|
+
return "sector" === ("rect" === attributes.type ? "sector" : "line") ? {
|
|
59
|
+
center: center,
|
|
60
|
+
innerRadius: axis.getInnerRadius(),
|
|
61
|
+
radius: axis.getOuterRadius(),
|
|
62
|
+
startAngle: coordRange[0],
|
|
63
|
+
endAngle: coordRange[1]
|
|
64
|
+
} : {
|
|
65
|
+
start: polarToCartesian(center, axis.getInnerRadius(), coord),
|
|
66
|
+
end: polarToCartesian(center, axis.getOuterRadius(), coord)
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const startAngle = axis.startAngle, endAngle = axis.endAngle, sides = cacheInfo.sides;
|
|
70
|
+
let polygonRadius = coord;
|
|
71
|
+
if (!smooth) {
|
|
72
|
+
const axisCenter = axis.getCenter(), point = axis.coordToPoint({
|
|
73
|
+
angle: sizeRange[0],
|
|
74
|
+
radius: coord
|
|
75
|
+
}), curAngle = getAngleByPoint(axisCenter, point), stepAngle = (endAngle - startAngle) / sides, index = Math.floor((curAngle - startAngle) / stepAngle), preAngle = index * stepAngle + startAngle, nextAngle = Math.min((index + 1) * stepAngle + startAngle, endAngle), prePoint = polarToCartesian(axisCenter, coord, preAngle), nextPoint = polarToCartesian(axisCenter, coord, nextAngle), insertPoint = getIntersectPoint([ nextPoint.x, nextPoint.y ], [ prePoint.x, prePoint.y ], [ axisCenter.x, axisCenter.y ], [ point.x, point.y ]);
|
|
76
|
+
insertPoint && (polygonRadius = clamp(PointService.distancePN(point, insertPoint[0], insertPoint[1]) + coord, axis.getInnerRadius(), axis.getOuterRadius()));
|
|
122
77
|
}
|
|
123
78
|
return {
|
|
124
79
|
center: center,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/crosshair/utils/polar.ts"],"names":[],"mappings":"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","file":"polar.js","sourcesContent":["import type { BandScale } from '@visactor/vscale';\nimport type { IPolarSeries } from '../../../series';\nimport type { IHair, IHairRadius } from '../base';\nimport type { AxisCurrentValueMap, IPolarCrosshairInfo } from '../interface';\nimport { getAxisLabelOffset } from '../../axis/util';\nimport { PointService, clamp, getAngleByPoint, getIntersectPoint, isValid, polarToCartesian } from '@visactor/vutils';\nimport type { ILinearAxis, IPolarAxis } from '../../axis';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { getFormatFunction } from '../../util';\n\nexport const layoutByValue = (\n series: IPolarSeries,\n currValueAngle: AxisCurrentValueMap,\n currValueRadius: AxisCurrentValueMap,\n angleHair: IHair,\n radiusHair: IHair,\n enableRemain: boolean = false,\n cacheAngleCrossHairInfo?: IPolarCrosshairInfo,\n cacheRadiusCrossHairInfo?: IPolarCrosshairInfo\n) => {\n let angleCrossHairInfo = {\n x: 0,\n y: 0,\n center: { x: 0, y: 0 },\n radius: 0,\n distance: 0,\n startAngle: 0,\n endAngle: 0,\n innerRadius: 0,\n visible: false,\n label: { visible: false, text: '', offset: 0 }\n } as IPolarCrosshairInfo;\n let radiusCrossHairInfo = {\n x: 0,\n y: 0,\n center: { x: 0, y: 0 },\n radius: 0,\n distance: 0,\n startAngle: 0,\n endAngle: 0,\n innerRadius: 0,\n visible: false,\n sides: (series.angleAxisHelper.getScale(0) as BandScale).domain().length,\n label: { visible: false, text: '', offset: 0 }\n } as IPolarCrosshairInfo;\n\n // 计算x轴和y轴的数据,只允许最多一对x和一对y\n if (angleHair) {\n angleCrossHairInfo.visible = !!currValueAngle.size;\n const bandWidth = series.angleAxisHelper.getBandwidth(0);\n currValueAngle.forEach(({ axis, value, coord, ...rest }) => {\n value = value ?? '';\n mergeSpec(angleCrossHairInfo, rest);\n const angle = series.angleAxisHelper.dataToPosition([value]);\n angleCrossHairInfo.angle = angle;\n const niceLabelFormatter = (axis as ILinearAxis).niceLabelFormatter;\n if (angleHair.label?.visible) {\n angleCrossHairInfo.label.visible = true;\n angleCrossHairInfo.label.defaultFormatter = niceLabelFormatter;\n angleCrossHairInfo.label.text = value;\n angleCrossHairInfo.label.offset = getAxisLabelOffset(axis.getSpec());\n }\n\n angleCrossHairInfo.startAngle = angle - bandWidth / 2;\n angleCrossHairInfo.endAngle = angle + bandWidth / 2;\n });\n }\n\n if (radiusHair) {\n radiusCrossHairInfo.visible = !!currValueRadius.size;\n currValueRadius.forEach(({ axis, value, coord, ...rest }) => {\n value = value ?? '';\n const niceLabelFormatter = (axis as ILinearAxis).niceLabelFormatter;\n if (radiusHair.label?.visible) {\n radiusCrossHairInfo.label.visible = true;\n radiusCrossHairInfo.label.defaultFormatter = niceLabelFormatter;\n radiusCrossHairInfo.label.text = value;\n radiusCrossHairInfo.label.offset = getAxisLabelOffset(axis.getSpec());\n }\n radiusCrossHairInfo.angle = coord.angle;\n radiusCrossHairInfo.axis = axis as IPolarAxis;\n mergeSpec(radiusCrossHairInfo, rest);\n });\n }\n\n if (enableRemain && !angleCrossHairInfo.visible && isValid(cacheAngleCrossHairInfo)) {\n angleCrossHairInfo = cacheAngleCrossHairInfo;\n } else {\n if (angleCrossHairInfo.label.visible) {\n if (angleHair && angleHair.label) {\n const { label } = angleCrossHairInfo;\n const { formatMethod, formatter } = angleHair.label;\n const { formatFunc, args } = getFormatFunction(formatMethod, formatter, label.text, {\n label: label.text,\n orient: 'angle'\n });\n if (formatFunc) {\n label.text = formatFunc(...args);\n } else if (label.defaultFormatter) {\n label.text = label.defaultFormatter(label.text);\n }\n }\n }\n }\n\n if (enableRemain && !radiusCrossHairInfo.visible && isValid(cacheRadiusCrossHairInfo)) {\n radiusCrossHairInfo = cacheRadiusCrossHairInfo;\n } else {\n if (radiusCrossHairInfo.label.visible) {\n if (radiusHair && radiusHair.label) {\n const { label } = radiusCrossHairInfo;\n const { formatMethod, formatter } = radiusHair.label;\n const { formatFunc, args } = getFormatFunction(formatMethod, formatter, label.text, {\n label: label.text,\n orient: 'radius'\n });\n if (formatFunc) {\n label.text = formatFunc(...args);\n } else if (label.defaultFormatter) {\n label.text = label.defaultFormatter(label.text);\n }\n }\n }\n }\n\n return {\n angle: angleCrossHairInfo,\n radius: radiusCrossHairInfo\n };\n};\n\nexport const layoutAngleCrosshair = (angleHair: IHair, crosshairInfo: IPolarCrosshairInfo) => {\n const { angle, innerRadius, radius, startAngle, endAngle, center } = crosshairInfo;\n\n const crosshairType = angleHair.type === 'rect' ? 'sector' : 'line';\n let positionAttrs;\n if (crosshairType === 'sector') {\n positionAttrs = {\n center,\n innerRadius,\n radius,\n startAngle: startAngle,\n endAngle: endAngle\n };\n } else {\n positionAttrs = {\n start: polarToCartesian(center, innerRadius, angle),\n end: polarToCartesian(center, radius, angle)\n };\n }\n\n return positionAttrs;\n};\n\nexport const layoutRadiusCrosshair = (radiusHair: IHairRadius, crosshairInfo: IPolarCrosshairInfo) => {\n const { center, startAngle, endAngle, distance, sides, axis, point, radius, innerRadius } = crosshairInfo;\n\n const crosshairType = radiusHair.smooth ? 'circle' : 'polygon';\n\n let polygonRadius = distance;\n if (crosshairType === 'polygon') {\n const axisCenter = axis.getCenter();\n // 需要计算半径\n // 获取当前点的角度\n const curAngle = getAngleByPoint(axisCenter, point);\n const stepAngle = (endAngle - startAngle) / sides;\n const index = Math.floor((curAngle - startAngle) / stepAngle);\n const preAngle = index * stepAngle + startAngle;\n const nextAngle = Math.min((index + 1) * stepAngle + startAngle, endAngle);\n\n const prePoint = polarToCartesian(axisCenter, distance, preAngle);\n const nextPoint = polarToCartesian(axisCenter, distance, nextAngle);\n // 求交点\n const insertPoint = getIntersectPoint(\n [nextPoint.x, nextPoint.y],\n [prePoint.x, prePoint.y],\n [axisCenter.x, axisCenter.y],\n [point.x, point.y]\n );\n if (insertPoint) {\n polygonRadius = clamp(\n PointService.distancePN(point, insertPoint[0], insertPoint[1]) + distance,\n innerRadius,\n radius\n );\n }\n }\n const positionAttrs = {\n center,\n startAngle: startAngle,\n endAngle: endAngle,\n radius: polygonRadius,\n sides\n };\n\n return positionAttrs;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/component/crosshair/utils/polar.ts"],"names":[],"mappings":"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","file":"polar.js","sourcesContent":["import type { BandScale } from '@visactor/vscale';\nimport type { IPolarSeries } from '../../../series';\nimport type { CrossHairStateByField, CrossHairStateItem, ICrosshairInfo } from '../interface';\nimport { getAxisLabelOffset } from '../../axis/util';\nimport { PointService, clamp, getAngleByPoint, getIntersectPoint, isValid, polarToCartesian } from '@visactor/vutils';\nimport type { ILinearAxis, IPolarAxis } from '../../axis';\nimport { getFormatFunction } from '../../util';\nimport type { ILayoutPoint } from '../../../typings/layout';\n\nexport const layoutByValue = (\n stateByField: CrossHairStateByField,\n series: IPolarSeries,\n enableRemain: boolean = false\n) => {\n Object.keys(stateByField).forEach(field => {\n const { attributes, currentValue, cacheInfo, coordKey } = stateByField[field];\n\n if (attributes) {\n const isVisible = !!currentValue.size;\n const useCache = enableRemain && !isVisible && isValid(cacheInfo);\n const newInfo = useCache\n ? cacheInfo\n : ({\n coord: 0,\n axis: null,\n visible: isVisible,\n coordRange: [0, 0],\n sizeRange: [0, 0],\n labels: {\n all: { visible: false, text: '', offset: 0 }\n }\n } as ICrosshairInfo);\n if (cacheInfo) {\n cacheInfo._isCache = useCache;\n }\n\n if (field === 'valueField') {\n (newInfo as any).sides = (series.angleAxisHelper.getScale(0) as BandScale).domain().length;\n }\n\n currentValue.forEach(({ axis, datum: value = '' }) => {\n const niceLabelFormatter = (axis as ILinearAxis).niceLabelFormatter;\n\n if (attributes.label?.visible) {\n newInfo.labels.all.visible = true;\n newInfo.labels.all.defaultFormatter = niceLabelFormatter;\n newInfo.labels.all.text = value;\n newInfo.labels.all.offset = getAxisLabelOffset(axis.getSpec());\n }\n\n if (field === 'categoryField') {\n const angle = series.angleAxisHelper.dataToPosition([value]);\n const bandSize = series.angleAxisHelper.getBandwidth(0);\n const radius = (axis as IPolarAxis).getOuterRadius();\n\n newInfo.coord = angle;\n newInfo.coordRange = [angle - bandSize / 2, angle + bandSize / 2];\n newInfo.sizeRange = [radius, radius];\n } else {\n const angle = (axis as IPolarAxis).startAngle;\n const radius = series.radiusAxisHelper.dataToPosition([value]);\n\n newInfo.coord = radius;\n newInfo.coordRange = [radius, radius];\n newInfo.sizeRange = [angle, angle];\n }\n\n newInfo.axis = axis as IPolarAxis;\n });\n\n if (newInfo && !useCache) {\n if (newInfo.labels.all.visible) {\n if (attributes && attributes.label) {\n const label = newInfo.labels.all;\n const { formatMethod, formatter } = attributes.label;\n const { formatFunc, args } = getFormatFunction(formatMethod, formatter, label.text, {\n label: label.text,\n orient: coordKey\n });\n if (formatFunc) {\n label.text = formatFunc(...args);\n } else if (label.defaultFormatter) {\n label.text = label.defaultFormatter(label.text);\n }\n }\n }\n }\n\n stateByField[field].cacheInfo = newInfo;\n }\n });\n};\n\nexport const layoutCrosshair = (stateItem: CrossHairStateItem, layoutStartPoint: ILayoutPoint, smooth?: boolean) => {\n const { cacheInfo, coordKey, attributes } = stateItem;\n const { axis, coord, sizeRange, coordRange } = cacheInfo;\n const axisCenter = (axis as IPolarAxis).getCenter();\n const center = {\n x: axisCenter.x + layoutStartPoint.x,\n y: axisCenter.y + layoutStartPoint.y\n };\n\n if (coordKey === 'angle') {\n const crosshairType = attributes.type === 'rect' ? 'sector' : 'line';\n\n if (crosshairType === 'sector') {\n // angle 轴对应的crosshair\n return {\n center,\n innerRadius: (axis as IPolarAxis).getInnerRadius(),\n radius: (axis as IPolarAxis).getOuterRadius(),\n startAngle: coordRange[0],\n endAngle: coordRange[1]\n };\n }\n // angle 轴对应的crosshair\n return {\n start: polarToCartesian(center, (axis as IPolarAxis).getInnerRadius(), coord),\n end: polarToCartesian(center, (axis as IPolarAxis).getOuterRadius(), coord)\n };\n }\n\n const startAngle = (axis as IPolarAxis).startAngle;\n const endAngle = (axis as IPolarAxis).endAngle;\n const sides = cacheInfo.sides;\n\n let polygonRadius = coord;\n if (!smooth) {\n const axisCenter = (axis as IPolarAxis).getCenter();\n // 需要计算半径\n // 获取当前点的角度\n const point = (axis as IPolarAxis).coordToPoint({\n angle: sizeRange[0],\n radius: coord\n });\n const curAngle = getAngleByPoint(axisCenter, point);\n const stepAngle = (endAngle - startAngle) / sides;\n const index = Math.floor((curAngle - startAngle) / stepAngle);\n const preAngle = index * stepAngle + startAngle;\n const nextAngle = Math.min((index + 1) * stepAngle + startAngle, endAngle);\n\n const prePoint = polarToCartesian(axisCenter, coord, preAngle);\n const nextPoint = polarToCartesian(axisCenter, coord, nextAngle);\n // 求交点\n const insertPoint = getIntersectPoint(\n [nextPoint.x, nextPoint.y],\n [prePoint.x, prePoint.y],\n [axisCenter.x, axisCenter.y],\n [point.x, point.y]\n );\n if (insertPoint) {\n polygonRadius = clamp(\n PointService.distancePN(point, (insertPoint as [number, number])[0], (insertPoint as [number, number])[1]) +\n coord,\n (axis as IPolarAxis).getInnerRadius(),\n (axis as IPolarAxis).getOuterRadius()\n );\n }\n }\n return {\n center,\n startAngle: startAngle,\n endAngle: endAngle,\n radius: polygonRadius,\n sides\n };\n};\n"]}
|
package/esm/core/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { VChart } from './vchart';
|
|
2
2
|
import { Factory } from './factory';
|
|
3
3
|
export { VChart, Factory };
|
|
4
|
-
export declare const version = "1.13.
|
|
4
|
+
export declare const version = "1.13.5-alpha.1";
|
|
5
5
|
export type { IVChart } from './interface';
|
|
6
6
|
export type { IStateSpec, StateValueType } from '../compile/mark';
|
|
7
7
|
export type { IRegion } from '../region/interface';
|
package/esm/core/index.js
CHANGED
package/esm/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAG3B,MAAM,CAAC,MAAM,OAAO,GAAG,
|
|
1
|
+
{"version":3,"sources":["../src/core/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAG3B,MAAM,CAAC,MAAM,OAAO,GAAG,gBAAgB,CAAC;AAOxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAG5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AAKjC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,gBAAgB,CAAC;AAG/B,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC","file":"index.js","sourcesContent":["/**\n * @description The core module of VChart, containing the necessary interfaces for using VChart.\n */\n\nimport { VChart } from './vchart';\nimport { Factory } from './factory';\n\nexport { VChart, Factory };\n\n// export the version\nexport const version = \"1.13.5-alpha.1\";\n\n// export necessary types\nexport type { IVChart } from './interface';\nexport type { IStateSpec, StateValueType } from '../compile/mark';\nexport type { IRegion } from '../region/interface';\n\nexport * from '../typings/spec/common';\nexport * from '../event/interface';\nexport * from '../theme/interface';\nexport * from './interface';\n\n// some constants\nexport * from '../constant/base';\nexport * from '../constant/data';\n\n/**\n * spec\n */\nexport * from '../typings/spec/index';\n\n// tooltip\nexport * from '../typings/tooltip';\n\n// theme\nexport * from '../theme/index';\n\n// vrender\nexport { vglobal } from '@visactor/vrender-core';\n"]}
|
package/esm/event/index.d.ts
CHANGED
package/esm/event/index.js
CHANGED
package/esm/event/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/event/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC","file":"index.js","sourcesContent":["export * from './event';\nexport * from './events';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/event/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AAEzB,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC","file":"index.js","sourcesContent":["export * from './event';\nexport * from './events';\n\nexport { getCartesianDimensionInfo, getPolarDimensionInfo } from './events/dimension/util';\n"]}
|
|
@@ -8,12 +8,10 @@ export declare const getPositionType: (position: TooltipFixedPosition, dim: 'x'
|
|
|
8
8
|
export declare const getCartesianCrosshairRect: (dimensionData: IDimensionData, layoutStartPoint: ILayoutPoint) => {
|
|
9
9
|
visible: boolean;
|
|
10
10
|
start: {
|
|
11
|
-
x: number;
|
|
12
|
-
y: number;
|
|
11
|
+
[x: string]: number;
|
|
13
12
|
};
|
|
14
13
|
end: {
|
|
15
|
-
x: number;
|
|
16
|
-
y: number;
|
|
14
|
+
[x: string]: number;
|
|
17
15
|
};
|
|
18
16
|
};
|
|
19
17
|
export declare const isGlobalTooltipPositionPattern: (obj: any) => obj is IGlobalTooltipPositionPattern;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { layoutByValue,
|
|
1
|
+
import { layoutByValue, layoutCrosshair } from "../../../../component/crosshair/utils/cartesian";
|
|
2
2
|
|
|
3
3
|
import { isFunction, isNumber, isObject, isValid } from "@visactor/vutils";
|
|
4
4
|
|
|
@@ -42,17 +42,30 @@ export const getCartesianCrosshairRect = (dimensionData, layoutStartPoint) => {
|
|
|
42
42
|
const currValueX = new Map, currValueY = new Map, {series: series, datum: datum} = dimensionData, isHorizontal = "horizontal" === series.direction, axisId = (isHorizontal ? series.getYAxisHelper() : series.getXAxisHelper()).getAxisId(), axis = series.getChart().getComponentsByKey("axes").find((axis => axis.id === axisId));
|
|
43
43
|
if (!axis) return;
|
|
44
44
|
(isHorizontal ? currValueY : currValueX).set(axis.getSpecIndex(), {
|
|
45
|
-
|
|
45
|
+
datum: null === (_a = series.getDatumPositionValues(datum[0], series.getDimensionField())) || void 0 === _a ? void 0 : _a[0],
|
|
46
46
|
axis: axis
|
|
47
47
|
});
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
48
|
+
const state = {
|
|
49
|
+
xField: {
|
|
50
|
+
coordKey: "x",
|
|
51
|
+
anotherAxisKey: "y",
|
|
52
|
+
currentValue: currValueX,
|
|
53
|
+
attributes: {
|
|
54
|
+
visible: !!currValueX.size,
|
|
55
|
+
type: "rect"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
yField: {
|
|
59
|
+
coordKey: "y",
|
|
60
|
+
anotherAxisKey: "x",
|
|
61
|
+
currentValue: currValueY,
|
|
62
|
+
attributes: {
|
|
63
|
+
visible: !!currValueY.size,
|
|
64
|
+
type: "rect"
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
return layoutByValue(state, series, layoutStartPoint), state.xField.cacheInfo ? layoutCrosshair(state.xField) : state.yField.cacheInfo ? layoutCrosshair(state.yField) : void 0;
|
|
56
69
|
};
|
|
57
70
|
|
|
58
71
|
export const isGlobalTooltipPositionPattern = obj => isObject(obj) && (isValid(obj.left) || isValid(obj.right) || isValid(obj.top) || isValid(obj.bottom));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugin/components/tooltip-handler/utils/position.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/plugin/components/tooltip-handler/utils/position.ts"],"names":[],"mappings":"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","file":"position.js","sourcesContent":["import type { IAxis } from '../../../../component/axis';\nimport type { AxisCurrentValueMap, CrossHairStateByField } from '../../../../component/crosshair';\n\nimport { layoutByValue, layoutCrosshair } from '../../../../component/crosshair/utils/cartesian';\nimport type { IDimensionData } from '../../../../event';\nimport type { ICartesianSeries } from '../../../../series';\nimport { Direction, type ILayoutPoint } from '../../../../typings';\nimport type {\n IFixedTooltipPositionPattern,\n IGlobalTooltipPositionPattern,\n TooltipFixedPosition\n} from '../../../../typings/tooltip/position';\nimport { isFunction, isNumber, isObject, isValid } from '@visactor/vutils';\n\nexport const getActualTooltipPositionValue = (\n position: number | ((event: MouseEvent) => number) | null | undefined,\n event: MouseEvent\n): number => {\n let result: number;\n if (isValid(position)) {\n if (isNumber(position)) {\n result = position as number;\n } else if (isFunction(position)) {\n // 这里额外判断下是否合法\n const tooltipPosition = (position as (event: MouseEvent) => number)(event);\n\n if (isNumber(tooltipPosition)) {\n result = tooltipPosition;\n }\n }\n }\n return result;\n};\n\n// 'left' | 'centerLeft' | 'center' | 'centerRight' | 'right'\n// 'top' | 'centerTop' | 'center' | 'centerBottom' | 'bottom'\nexport type TooltipPositionType = -2 | -1 | 0 | 1 | 2;\n\n/** position 对齐方式在 x、y 分量下的分解 */\nexport const positionType: Record<TooltipFixedPosition, [TooltipPositionType, TooltipPositionType]> = {\n left: [-2, 0],\n right: [2, 0],\n top: [0, -2],\n lt: [-2, -2],\n tl: [-2, -2],\n rt: [2, -2],\n tr: [2, -2],\n bottom: [0, 2],\n bl: [-2, 2],\n lb: [-2, 2],\n br: [2, 2],\n rb: [2, 2],\n inside: [0, 0], // 旧版兼容\n center: [0, 0],\n centerBottom: [0, 1],\n centerTop: [0, -1],\n centerLeft: [-1, 0],\n centerRight: [1, 0]\n};\n\nexport const getPositionType = (\n position: TooltipFixedPosition,\n dim: 'x' | 'y',\n defaultCase: TooltipPositionType = 2\n): TooltipPositionType => positionType[position]?.[dim === 'x' ? 0 : 1] ?? defaultCase;\n\nexport const getCartesianCrosshairRect = (dimensionData: IDimensionData, layoutStartPoint: ILayoutPoint) => {\n const currValueX: AxisCurrentValueMap = new Map();\n const currValueY: AxisCurrentValueMap = new Map();\n const { series, datum } = dimensionData;\n const isHorizontal = (series as ICartesianSeries).direction === Direction.horizontal;\n const axisHelper = isHorizontal\n ? (series as ICartesianSeries).getYAxisHelper()\n : (series as ICartesianSeries).getXAxisHelper();\n const axisId = axisHelper.getAxisId();\n const axis = series\n .getChart()\n .getComponentsByKey('axes')\n .find(axis => axis.id === axisId) as IAxis;\n\n if (!axis) {\n return undefined;\n }\n (isHorizontal ? currValueY : currValueX).set(axis.getSpecIndex(), {\n datum: series.getDatumPositionValues(datum[0], series.getDimensionField())?.[0],\n axis\n });\n\n const state: CrossHairStateByField = {\n xField: {\n coordKey: 'x',\n anotherAxisKey: 'y',\n currentValue: currValueX,\n attributes: {\n visible: !!currValueX.size,\n type: 'rect'\n }\n },\n yField: {\n coordKey: 'y',\n anotherAxisKey: 'x',\n currentValue: currValueY,\n attributes: {\n visible: !!currValueY.size,\n type: 'rect'\n }\n }\n };\n\n layoutByValue(state, series as ICartesianSeries, layoutStartPoint);\n\n if (state.xField.cacheInfo) {\n return layoutCrosshair(state.xField);\n }\n if (state.yField.cacheInfo) {\n return layoutCrosshair(state.yField);\n }\n return undefined;\n};\n\nexport const isGlobalTooltipPositionPattern = (obj: any): obj is IGlobalTooltipPositionPattern => {\n return (\n isObject(obj) &&\n (isValid((obj as IGlobalTooltipPositionPattern).left) ||\n isValid((obj as IGlobalTooltipPositionPattern).right) ||\n isValid((obj as IGlobalTooltipPositionPattern).top) ||\n isValid((obj as IGlobalTooltipPositionPattern).bottom))\n );\n};\n\nexport const isFixedTooltipPositionPattern = (obj: any): obj is IFixedTooltipPositionPattern => {\n return (\n isObject(obj) &&\n (isValid((obj as IFixedTooltipPositionPattern).x) || isValid((obj as IFixedTooltipPositionPattern).y))\n );\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@visactor/vchart",
|
|
3
|
-
"version": "1.13.
|
|
3
|
+
"version": "1.13.5-alpha.1",
|
|
4
4
|
"description": "charts lib based @visactor/VGrammar",
|
|
5
5
|
"main": "cjs/index.js",
|
|
6
6
|
"module": "esm/index.js",
|
|
@@ -82,8 +82,8 @@
|
|
|
82
82
|
"rimraf": "3.0.2",
|
|
83
83
|
"cross-env": "^7.0.3",
|
|
84
84
|
"@internal/typescript-json-schema": "0.0.1",
|
|
85
|
-
"@internal/bundler": "0.0.1",
|
|
86
85
|
"@internal/eslint-config": "0.0.1",
|
|
86
|
+
"@internal/bundler": "0.0.1",
|
|
87
87
|
"@internal/ts-config": "0.0.1"
|
|
88
88
|
},
|
|
89
89
|
"dependencies": {
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
"@visactor/vgrammar-sankey": "0.15.5",
|
|
102
102
|
"@visactor/vgrammar-venn": "0.15.5",
|
|
103
103
|
"@visactor/vgrammar-util": "0.15.5",
|
|
104
|
-
"@visactor/vutils-extension": "1.13.
|
|
104
|
+
"@visactor/vutils-extension": "1.13.5-alpha.1"
|
|
105
105
|
},
|
|
106
106
|
"publishConfig": {
|
|
107
107
|
"access": "public",
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import type { StringOrNumber } from '../../../typings';
|
|
2
|
-
import type { IAxis } from '../../axis/interface';
|
|
3
|
-
export interface ICrosshairLabelInfo {
|
|
4
|
-
visible: boolean;
|
|
5
|
-
text: StringOrNumber;
|
|
6
|
-
dx: number;
|
|
7
|
-
dy: number;
|
|
8
|
-
defaultFormatter?: (value: StringOrNumber) => StringOrNumber;
|
|
9
|
-
}
|
|
10
|
-
export interface ICrosshairInfoX {
|
|
11
|
-
height: number;
|
|
12
|
-
leftPos: number;
|
|
13
|
-
rightPos: number;
|
|
14
|
-
topPos: number;
|
|
15
|
-
x: number;
|
|
16
|
-
bottom: ICrosshairLabelInfo;
|
|
17
|
-
top: ICrosshairLabelInfo;
|
|
18
|
-
visible: boolean;
|
|
19
|
-
_isCache?: boolean;
|
|
20
|
-
axis: IAxis;
|
|
21
|
-
}
|
|
22
|
-
export interface ICrosshairInfoY {
|
|
23
|
-
width: number;
|
|
24
|
-
leftPos: number;
|
|
25
|
-
topPos: number;
|
|
26
|
-
bottomPos: number;
|
|
27
|
-
y: number;
|
|
28
|
-
left: ICrosshairLabelInfo;
|
|
29
|
-
right: ICrosshairLabelInfo;
|
|
30
|
-
visible: boolean;
|
|
31
|
-
_isCache?: boolean;
|
|
32
|
-
axis: IAxis;
|
|
33
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/crosshair/interface/cartesian.ts"],"names":[],"mappings":"","file":"cartesian.js","sourcesContent":["import type { StringOrNumber } from '../../../typings';\nimport type { IAxis } from '../../axis/interface';\n\nexport interface ICrosshairLabelInfo {\n visible: boolean;\n text: StringOrNumber;\n dx: number;\n dy: number;\n defaultFormatter?: (value: StringOrNumber) => StringOrNumber;\n}\n\nexport interface ICrosshairInfoX {\n height: number;\n leftPos: number;\n rightPos: number;\n topPos: number;\n x: number;\n bottom: ICrosshairLabelInfo;\n top: ICrosshairLabelInfo;\n visible: boolean;\n _isCache?: boolean;\n axis: IAxis;\n}\nexport interface ICrosshairInfoY {\n width: number;\n leftPos: number;\n topPos: number;\n bottomPos: number;\n y: number;\n left: ICrosshairLabelInfo;\n right: ICrosshairLabelInfo;\n visible: boolean;\n _isCache?: boolean;\n axis: IAxis;\n}\n"]}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type { IPoint, StringOrNumber } from '../../../typings';
|
|
2
|
-
import type { IPolarAxis } from '../../axis/polar/interface';
|
|
3
|
-
export interface IPolarCrosshairInfo {
|
|
4
|
-
x: number;
|
|
5
|
-
y: number;
|
|
6
|
-
center: IPoint;
|
|
7
|
-
radius: number;
|
|
8
|
-
distance: number;
|
|
9
|
-
startAngle: number;
|
|
10
|
-
endAngle: number;
|
|
11
|
-
innerRadius: number;
|
|
12
|
-
visible: boolean;
|
|
13
|
-
sides: number;
|
|
14
|
-
angle: number;
|
|
15
|
-
point: IPoint;
|
|
16
|
-
_isCache?: boolean;
|
|
17
|
-
label?: IPolarCrosshairLabelInfo;
|
|
18
|
-
axis?: IPolarAxis;
|
|
19
|
-
}
|
|
20
|
-
export interface IPolarCrosshairLabelInfo {
|
|
21
|
-
visible: boolean;
|
|
22
|
-
text: StringOrNumber;
|
|
23
|
-
offset: number;
|
|
24
|
-
defaultFormatter?: (value: StringOrNumber) => StringOrNumber;
|
|
25
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/crosshair/interface/polar.ts"],"names":[],"mappings":"","file":"polar.js","sourcesContent":["import type { IPoint, StringOrNumber } from '../../../typings';\nimport type { IPolarAxis } from '../../axis/polar/interface';\n\nexport interface IPolarCrosshairInfo {\n x: number;\n y: number;\n center: IPoint;\n radius: number;\n distance: number;\n startAngle: number;\n endAngle: number;\n innerRadius: number;\n visible: boolean;\n sides: number;\n angle: number;\n point: IPoint;\n _isCache?: boolean;\n label?: IPolarCrosshairLabelInfo;\n axis?: IPolarAxis;\n}\n\nexport interface IPolarCrosshairLabelInfo {\n visible: boolean;\n text: StringOrNumber;\n offset: number;\n defaultFormatter?: (value: StringOrNumber) => StringOrNumber;\n}\n"]}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import type { StringOrNumber } from '../../../typings';
|
|
2
|
-
import type { IAxis } from '../../axis/interface';
|
|
3
|
-
export interface ICrosshairLabelInfo {
|
|
4
|
-
visible: boolean;
|
|
5
|
-
text: StringOrNumber;
|
|
6
|
-
dx: number;
|
|
7
|
-
dy: number;
|
|
8
|
-
defaultFormatter?: (value: StringOrNumber) => StringOrNumber;
|
|
9
|
-
}
|
|
10
|
-
export interface ICrosshairInfoX {
|
|
11
|
-
height: number;
|
|
12
|
-
leftPos: number;
|
|
13
|
-
rightPos: number;
|
|
14
|
-
topPos: number;
|
|
15
|
-
x: number;
|
|
16
|
-
bottom: ICrosshairLabelInfo;
|
|
17
|
-
top: ICrosshairLabelInfo;
|
|
18
|
-
visible: boolean;
|
|
19
|
-
_isCache?: boolean;
|
|
20
|
-
axis: IAxis;
|
|
21
|
-
}
|
|
22
|
-
export interface ICrosshairInfoY {
|
|
23
|
-
width: number;
|
|
24
|
-
leftPos: number;
|
|
25
|
-
topPos: number;
|
|
26
|
-
bottomPos: number;
|
|
27
|
-
y: number;
|
|
28
|
-
left: ICrosshairLabelInfo;
|
|
29
|
-
right: ICrosshairLabelInfo;
|
|
30
|
-
visible: boolean;
|
|
31
|
-
_isCache?: boolean;
|
|
32
|
-
axis: IAxis;
|
|
33
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/crosshair/interface/cartesian.ts"],"names":[],"mappings":"","file":"cartesian.js","sourcesContent":["import type { StringOrNumber } from '../../../typings';\nimport type { IAxis } from '../../axis/interface';\n\nexport interface ICrosshairLabelInfo {\n visible: boolean;\n text: StringOrNumber;\n dx: number;\n dy: number;\n defaultFormatter?: (value: StringOrNumber) => StringOrNumber;\n}\n\nexport interface ICrosshairInfoX {\n height: number;\n leftPos: number;\n rightPos: number;\n topPos: number;\n x: number;\n bottom: ICrosshairLabelInfo;\n top: ICrosshairLabelInfo;\n visible: boolean;\n _isCache?: boolean;\n axis: IAxis;\n}\nexport interface ICrosshairInfoY {\n width: number;\n leftPos: number;\n topPos: number;\n bottomPos: number;\n y: number;\n left: ICrosshairLabelInfo;\n right: ICrosshairLabelInfo;\n visible: boolean;\n _isCache?: boolean;\n axis: IAxis;\n}\n"]}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type { IPoint, StringOrNumber } from '../../../typings';
|
|
2
|
-
import type { IPolarAxis } from '../../axis/polar/interface';
|
|
3
|
-
export interface IPolarCrosshairInfo {
|
|
4
|
-
x: number;
|
|
5
|
-
y: number;
|
|
6
|
-
center: IPoint;
|
|
7
|
-
radius: number;
|
|
8
|
-
distance: number;
|
|
9
|
-
startAngle: number;
|
|
10
|
-
endAngle: number;
|
|
11
|
-
innerRadius: number;
|
|
12
|
-
visible: boolean;
|
|
13
|
-
sides: number;
|
|
14
|
-
angle: number;
|
|
15
|
-
point: IPoint;
|
|
16
|
-
_isCache?: boolean;
|
|
17
|
-
label?: IPolarCrosshairLabelInfo;
|
|
18
|
-
axis?: IPolarAxis;
|
|
19
|
-
}
|
|
20
|
-
export interface IPolarCrosshairLabelInfo {
|
|
21
|
-
visible: boolean;
|
|
22
|
-
text: StringOrNumber;
|
|
23
|
-
offset: number;
|
|
24
|
-
defaultFormatter?: (value: StringOrNumber) => StringOrNumber;
|
|
25
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/crosshair/interface/polar.ts"],"names":[],"mappings":"","file":"polar.js","sourcesContent":["import type { IPoint, StringOrNumber } from '../../../typings';\nimport type { IPolarAxis } from '../../axis/polar/interface';\n\nexport interface IPolarCrosshairInfo {\n x: number;\n y: number;\n center: IPoint;\n radius: number;\n distance: number;\n startAngle: number;\n endAngle: number;\n innerRadius: number;\n visible: boolean;\n sides: number;\n angle: number;\n point: IPoint;\n _isCache?: boolean;\n label?: IPolarCrosshairLabelInfo;\n axis?: IPolarAxis;\n}\n\nexport interface IPolarCrosshairLabelInfo {\n visible: boolean;\n text: StringOrNumber;\n offset: number;\n defaultFormatter?: (value: StringOrNumber) => StringOrNumber;\n}\n"]}
|