@visactor/vrender-components 0.14.0-alpha.0 → 0.14.0-alpha.4
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/cjs/axis/base.d.ts +4 -2
- package/cjs/axis/base.js +6 -15
- package/cjs/axis/base.js.map +1 -1
- package/cjs/axis/circle.d.ts +3 -1
- package/cjs/axis/circle.js +3 -1
- package/cjs/axis/circle.js.map +1 -1
- package/cjs/axis/constant.d.ts +2 -1
- package/cjs/axis/constant.js +1 -1
- package/cjs/axis/constant.js.map +1 -1
- package/cjs/axis/line.d.ts +6 -2
- package/cjs/axis/line.js +65 -9
- package/cjs/axis/line.js.map +1 -1
- package/cjs/axis/overlap/auto-limit.js +1 -1
- package/cjs/axis/overlap/auto-limit.js.map +1 -1
- package/cjs/axis/overlap/auto-rotate.d.ts +2 -0
- package/cjs/axis/overlap/auto-rotate.js +2 -2
- package/cjs/axis/overlap/auto-rotate.js.map +1 -1
- package/cjs/axis/type.d.ts +11 -7
- package/cjs/axis/type.js.map +1 -1
- package/cjs/brush/brush.d.ts +3 -3
- package/cjs/brush/brush.js.map +1 -1
- package/cjs/data-zoom/config.d.ts +2 -0
- package/cjs/data-zoom/config.js +3 -1
- package/cjs/data-zoom/config.js.map +1 -1
- package/cjs/data-zoom/data-zoom.d.ts +2 -0
- package/cjs/data-zoom/data-zoom.js +21 -11
- package/cjs/data-zoom/data-zoom.js.map +1 -1
- package/cjs/data-zoom/type.d.ts +4 -3
- package/cjs/data-zoom/type.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/label/base.d.ts +12 -11
- package/cjs/label/base.js +83 -62
- package/cjs/label/base.js.map +1 -1
- package/cjs/label/overlap/place.d.ts +8 -4
- package/cjs/label/overlap/place.js +14 -2
- package/cjs/label/overlap/place.js.map +1 -1
- package/cjs/label/rect.d.ts +5 -3
- package/cjs/label/rect.js.map +1 -1
- package/cjs/label/symbol.d.ts +5 -3
- package/cjs/label/symbol.js.map +1 -1
- package/cjs/label/type.d.ts +12 -7
- package/cjs/label/type.js.map +1 -1
- package/cjs/legend/discrete/discrete.js +2 -1
- package/cjs/legend/discrete/discrete.js.map +1 -1
- package/cjs/marker/type.d.ts +4 -5
- package/cjs/marker/type.js.map +1 -1
- package/cjs/player/continuous-player.d.ts +1 -2
- package/cjs/player/continuous-player.js +5 -5
- package/cjs/player/continuous-player.js.map +1 -1
- package/cjs/player/discrete-player.d.ts +1 -2
- package/cjs/player/discrete-player.js +4 -4
- package/cjs/player/discrete-player.js.map +1 -1
- package/cjs/poptip/contribution.js +1 -1
- package/cjs/poptip/contribution.js.map +1 -1
- package/cjs/poptip/poptip.js +10 -3
- package/cjs/poptip/poptip.js.map +1 -1
- package/cjs/scrollbar/scrollbar.js +4 -4
- package/cjs/scrollbar/scrollbar.js.map +1 -1
- package/cjs/segment/segment.js +4 -1
- package/cjs/segment/segment.js.map +1 -1
- package/cjs/segment/type.d.ts +1 -0
- package/cjs/segment/type.js.map +1 -1
- package/cjs/slider/slider.d.ts +1 -1
- package/cjs/slider/slider.js +8 -8
- package/cjs/slider/slider.js.map +1 -1
- package/cjs/tag/type.d.ts +3 -3
- package/cjs/tag/type.js.map +1 -1
- package/cjs/util/align.d.ts +2 -0
- package/cjs/util/align.js +60 -0
- package/cjs/util/align.js.map +1 -0
- package/cjs/util/common.d.ts +3 -1
- package/cjs/util/common.js +14 -2
- package/cjs/util/common.js.map +1 -1
- package/dist/index.js +425 -160
- package/dist/index.min.js +1 -1
- package/es/axis/base.d.ts +4 -2
- package/es/axis/base.js +7 -16
- package/es/axis/base.js.map +1 -1
- package/es/axis/circle.d.ts +3 -1
- package/es/axis/circle.js +3 -1
- package/es/axis/circle.js.map +1 -1
- package/es/axis/constant.d.ts +2 -1
- package/es/axis/constant.js +1 -1
- package/es/axis/constant.js.map +1 -1
- package/es/axis/line.d.ts +6 -2
- package/es/axis/line.js +68 -10
- package/es/axis/line.js.map +1 -1
- package/es/axis/overlap/auto-limit.js +1 -1
- package/es/axis/overlap/auto-limit.js.map +1 -1
- package/es/axis/overlap/auto-rotate.d.ts +2 -0
- package/es/axis/overlap/auto-rotate.js +2 -2
- package/es/axis/overlap/auto-rotate.js.map +1 -1
- package/es/axis/type.d.ts +11 -7
- package/es/axis/type.js.map +1 -1
- package/es/brush/brush.d.ts +3 -3
- package/es/brush/brush.js.map +1 -1
- package/es/data-zoom/config.d.ts +2 -0
- package/es/data-zoom/config.js +3 -1
- package/es/data-zoom/config.js.map +1 -1
- package/es/data-zoom/data-zoom.d.ts +2 -0
- package/es/data-zoom/data-zoom.js +22 -12
- package/es/data-zoom/data-zoom.js.map +1 -1
- package/es/data-zoom/type.d.ts +4 -3
- package/es/data-zoom/type.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/label/base.d.ts +12 -11
- package/es/label/base.js +85 -65
- package/es/label/base.js.map +1 -1
- package/es/label/overlap/place.d.ts +8 -4
- package/es/label/overlap/place.js +11 -0
- package/es/label/overlap/place.js.map +1 -1
- package/es/label/rect.d.ts +5 -3
- package/es/label/rect.js.map +1 -1
- package/es/label/symbol.d.ts +5 -3
- package/es/label/symbol.js.map +1 -1
- package/es/label/type.d.ts +12 -7
- package/es/label/type.js.map +1 -1
- package/es/legend/discrete/discrete.js +1 -1
- package/es/legend/discrete/discrete.js.map +1 -1
- package/es/marker/type.d.ts +4 -5
- package/es/marker/type.js.map +1 -1
- package/es/player/continuous-player.d.ts +1 -2
- package/es/player/continuous-player.js +5 -5
- package/es/player/continuous-player.js.map +1 -1
- package/es/player/discrete-player.d.ts +1 -2
- package/es/player/discrete-player.js +5 -5
- package/es/player/discrete-player.js.map +1 -1
- package/es/poptip/contribution.js +1 -1
- package/es/poptip/contribution.js.map +1 -1
- package/es/poptip/poptip.js +11 -4
- package/es/poptip/poptip.js.map +1 -1
- package/es/scrollbar/scrollbar.js +5 -5
- package/es/scrollbar/scrollbar.js.map +1 -1
- package/es/segment/segment.js +4 -1
- package/es/segment/segment.js.map +1 -1
- package/es/segment/type.d.ts +1 -0
- package/es/segment/type.js.map +1 -1
- package/es/slider/slider.d.ts +1 -1
- package/es/slider/slider.js +9 -9
- package/es/slider/slider.js.map +1 -1
- package/es/tag/type.d.ts +3 -3
- package/es/tag/type.js.map +1 -1
- package/es/util/align.d.ts +2 -0
- package/es/util/align.js +54 -0
- package/es/util/align.js.map +1 -0
- package/es/util/common.d.ts +3 -1
- package/es/util/common.js +12 -0
- package/es/util/common.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -273,9 +273,9 @@
|
|
|
273
273
|
e.stopPropagation();
|
|
274
274
|
const { direction } = this.attribute;
|
|
275
275
|
this._prePos = direction === 'horizontal' ? e.clientX : e.clientY;
|
|
276
|
-
if (vrender.
|
|
277
|
-
vrender.
|
|
278
|
-
vrender.
|
|
276
|
+
if (vrender.global.env === 'browser') {
|
|
277
|
+
vrender.global.addEventListener('pointermove', this._onSliderPointerMove);
|
|
278
|
+
vrender.global.addEventListener('pointerup', this._onSliderPointerUp);
|
|
279
279
|
}
|
|
280
280
|
else {
|
|
281
281
|
this._slider.addEventListener('pointermove', this._onSliderPointerMove);
|
|
@@ -306,9 +306,9 @@
|
|
|
306
306
|
};
|
|
307
307
|
_onSliderPointerUp = (e) => {
|
|
308
308
|
e.preventDefault();
|
|
309
|
-
if (vrender.
|
|
310
|
-
vrender.
|
|
311
|
-
vrender.
|
|
309
|
+
if (vrender.global.env === 'browser') {
|
|
310
|
+
vrender.global.removeEventListener('pointermove', this._onSliderPointerMove);
|
|
311
|
+
vrender.global.removeEventListener('pointerup', this._onSliderPointerUp);
|
|
312
312
|
}
|
|
313
313
|
else {
|
|
314
314
|
this._slider.removeEventListener('pointermove', this._onSliderPointerMove);
|
|
@@ -341,6 +341,26 @@
|
|
|
341
341
|
}
|
|
342
342
|
return obj.visible !== false;
|
|
343
343
|
};
|
|
344
|
+
function getMarksByName(root, name) {
|
|
345
|
+
if (!name) {
|
|
346
|
+
return [];
|
|
347
|
+
}
|
|
348
|
+
const group = root.find(node => node.name === name, true);
|
|
349
|
+
if (!group) {
|
|
350
|
+
return [];
|
|
351
|
+
}
|
|
352
|
+
return group.getChildren();
|
|
353
|
+
}
|
|
354
|
+
function getNoneGroupMarksByName(root, name) {
|
|
355
|
+
if (!name) {
|
|
356
|
+
return [];
|
|
357
|
+
}
|
|
358
|
+
const group = root.find(node => node.name === name, true);
|
|
359
|
+
if (!group) {
|
|
360
|
+
return [];
|
|
361
|
+
}
|
|
362
|
+
return group.findAll(node => node.type !== 'group', true);
|
|
363
|
+
}
|
|
344
364
|
|
|
345
365
|
const defaultAlternativeColors = ['#ffffff', '#000000'];
|
|
346
366
|
function labelSmartInvert(foregroundColorOrigin, backgroundColorOrogin, textType, contrastRatiosThreshold, alternativeColors) {
|
|
@@ -751,8 +771,10 @@
|
|
|
751
771
|
? [this.stage.width, this.stage.height]
|
|
752
772
|
: undefined;
|
|
753
773
|
const layout = position === 'auto';
|
|
754
|
-
|
|
755
|
-
|
|
774
|
+
let minifyBBoxI;
|
|
775
|
+
let minifyBBoxSize = Infinity;
|
|
776
|
+
for (let i = 0; i < this.positionList.length + 1; i++) {
|
|
777
|
+
const p = layout ? this.positionList[i === this.positionList.length ? minifyBBoxI : i] : position;
|
|
756
778
|
const { angle, offset, rectOffset } = this.getAngleAndOffset(p, popTipWidth, poptipHeight, vutils.isArray(spaceSize) ? spaceSize : [spaceSize, spaceSize - lineWidth]);
|
|
757
779
|
if (vutils.isBoolean(bgVisible)) {
|
|
758
780
|
const offsetX = (vutils.isArray(symbolSize) ? symbolSize[0] : symbolSize) / 4;
|
|
@@ -761,6 +783,8 @@
|
|
|
761
783
|
visible: bgVisible && (contentVisible || titleVisible),
|
|
762
784
|
x: offsetX,
|
|
763
785
|
y: 0,
|
|
786
|
+
strokeBoundsBuffer: -1,
|
|
787
|
+
boundsPadding: -2,
|
|
764
788
|
anchor: [0, 0],
|
|
765
789
|
symbolType: 'arrow2Left',
|
|
766
790
|
angle: angle,
|
|
@@ -779,7 +803,7 @@
|
|
|
779
803
|
y: 0,
|
|
780
804
|
width: popTipWidth,
|
|
781
805
|
height: poptipHeight,
|
|
782
|
-
zIndex: -
|
|
806
|
+
zIndex: -8
|
|
783
807
|
}, 'rect');
|
|
784
808
|
if (!vutils.isEmpty(state?.panel)) {
|
|
785
809
|
bgRect.states = state.panel;
|
|
@@ -795,6 +819,14 @@
|
|
|
795
819
|
if (vutils.rectInsideAnotherRect(b, stageBounds, false)) {
|
|
796
820
|
break;
|
|
797
821
|
}
|
|
822
|
+
else {
|
|
823
|
+
const bbox = vutils.getRectIntersect(b, stageBounds, false);
|
|
824
|
+
const size = (bbox.x2 - bbox.x1) * (bbox.y2 - bbox.y1);
|
|
825
|
+
if (size < minifyBBoxSize) {
|
|
826
|
+
minifyBBoxSize = size;
|
|
827
|
+
minifyBBoxI = i;
|
|
828
|
+
}
|
|
829
|
+
}
|
|
798
830
|
}
|
|
799
831
|
else {
|
|
800
832
|
break;
|
|
@@ -951,6 +983,7 @@
|
|
|
951
983
|
x: matrix.e,
|
|
952
984
|
y: matrix.f
|
|
953
985
|
});
|
|
986
|
+
drawContext.stage.tryInitInteractiveLayer();
|
|
954
987
|
const interactiveLayer = drawContext.stage.getLayer('_builtin_interactive');
|
|
955
988
|
if (interactiveLayer) {
|
|
956
989
|
interactiveLayer.add(this.poptipComponent);
|
|
@@ -1501,6 +1534,28 @@
|
|
|
1501
1534
|
return DefaultPositions;
|
|
1502
1535
|
}
|
|
1503
1536
|
}
|
|
1537
|
+
function clampText(text, width, height) {
|
|
1538
|
+
const { x1, x2, y1, y2 } = text.AABBBounds;
|
|
1539
|
+
const minX = Math.min(x1, x2);
|
|
1540
|
+
const maxX = Math.max(x1, x2);
|
|
1541
|
+
const minY = Math.min(y1, y2);
|
|
1542
|
+
const maxY = Math.max(y1, y2);
|
|
1543
|
+
let dx = 0;
|
|
1544
|
+
let dy = 0;
|
|
1545
|
+
if (minX < 0 && maxX - minX <= width) {
|
|
1546
|
+
dx = -minX;
|
|
1547
|
+
}
|
|
1548
|
+
else if (maxX > width && minX - (maxX - width) >= 0) {
|
|
1549
|
+
dx = width - maxX;
|
|
1550
|
+
}
|
|
1551
|
+
if (minY < 0 && maxY - minY <= height) {
|
|
1552
|
+
dy = -minY;
|
|
1553
|
+
}
|
|
1554
|
+
else if (maxY > height && minY - (maxY - height) >= 0) {
|
|
1555
|
+
dy = height - maxY;
|
|
1556
|
+
}
|
|
1557
|
+
return { dx, dy };
|
|
1558
|
+
}
|
|
1504
1559
|
|
|
1505
1560
|
const fadeIn = (textAttribute = {}) => {
|
|
1506
1561
|
return {
|
|
@@ -1551,17 +1606,37 @@
|
|
|
1551
1606
|
setBitmapTool(bmpTool) {
|
|
1552
1607
|
this._bmpTool = bmpTool;
|
|
1553
1608
|
}
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
_textMap;
|
|
1609
|
+
_graphicToText;
|
|
1610
|
+
_idToGraphic;
|
|
1557
1611
|
onAfterLabelOverlap;
|
|
1558
1612
|
_lastHover;
|
|
1559
1613
|
_lastSelect;
|
|
1560
1614
|
_enableAnimation;
|
|
1561
1615
|
render() {
|
|
1562
|
-
|
|
1563
|
-
const
|
|
1564
|
-
this.
|
|
1616
|
+
this._prepare();
|
|
1617
|
+
const { overlap, smartInvert, dataFilter, customLayoutFunc, customOverlapFunc } = this.attribute;
|
|
1618
|
+
let data = this.attribute.data;
|
|
1619
|
+
if (vutils.isFunction(dataFilter)) {
|
|
1620
|
+
data = dataFilter(data);
|
|
1621
|
+
}
|
|
1622
|
+
let labels;
|
|
1623
|
+
if (vutils.isFunction(customLayoutFunc)) {
|
|
1624
|
+
labels = customLayoutFunc(data, (d) => this._idToGraphic.get(d.id));
|
|
1625
|
+
}
|
|
1626
|
+
else {
|
|
1627
|
+
labels = this.layout(data);
|
|
1628
|
+
if (vutils.isFunction(customOverlapFunc)) {
|
|
1629
|
+
labels = customOverlapFunc(labels, (d) => this._idToGraphic.get(d.id));
|
|
1630
|
+
}
|
|
1631
|
+
else {
|
|
1632
|
+
if (overlap !== false) {
|
|
1633
|
+
labels = this._overlapping(labels);
|
|
1634
|
+
}
|
|
1635
|
+
}
|
|
1636
|
+
}
|
|
1637
|
+
if (smartInvert !== false) {
|
|
1638
|
+
this._smartInvert(labels);
|
|
1639
|
+
}
|
|
1565
1640
|
this._renderLabels(labels);
|
|
1566
1641
|
}
|
|
1567
1642
|
_bindEvent(target) {
|
|
@@ -1638,67 +1713,66 @@
|
|
|
1638
1713
|
this._setStates(text);
|
|
1639
1714
|
return text;
|
|
1640
1715
|
}
|
|
1641
|
-
|
|
1642
|
-
const baseMarks = this.
|
|
1716
|
+
_prepare() {
|
|
1717
|
+
const baseMarks = getMarksByName(this.getRootNode(), this.attribute.baseMarkGroupName);
|
|
1643
1718
|
const currentBaseMarks = [];
|
|
1644
1719
|
baseMarks.forEach(mark => {
|
|
1645
1720
|
if (mark.releaseStatus !== 'willRelease') {
|
|
1646
1721
|
currentBaseMarks.push(mark);
|
|
1647
1722
|
}
|
|
1648
1723
|
});
|
|
1649
|
-
this.
|
|
1650
|
-
this.
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
layout(currentMarks) {
|
|
1654
|
-
const { textStyle, position, offset } = this.attribute;
|
|
1655
|
-
let { data } = this.attribute;
|
|
1656
|
-
if (vutils.isFunction(data)) {
|
|
1657
|
-
data = data({});
|
|
1724
|
+
this._idToGraphic?.clear();
|
|
1725
|
+
this._baseMarks = currentBaseMarks;
|
|
1726
|
+
if (!currentBaseMarks || currentBaseMarks.length === 0) {
|
|
1727
|
+
return;
|
|
1658
1728
|
}
|
|
1729
|
+
const { data } = this.attribute;
|
|
1659
1730
|
if (!data || data.length === 0) {
|
|
1660
|
-
return
|
|
1731
|
+
return;
|
|
1661
1732
|
}
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
currentMarks = currentMarks.sort(this.attribute.sort);
|
|
1733
|
+
if (!this._idToGraphic) {
|
|
1734
|
+
this._idToGraphic = new Map();
|
|
1665
1735
|
}
|
|
1666
|
-
|
|
1667
|
-
|
|
1736
|
+
for (let i = 0; i < currentBaseMarks.length; i++) {
|
|
1737
|
+
const textData = data[i];
|
|
1738
|
+
const baseMark = currentBaseMarks[i];
|
|
1739
|
+
if (textData && baseMark) {
|
|
1740
|
+
if (!vutils.isValid(textData.id)) {
|
|
1741
|
+
textData.id = `vrender-component-${this.name}-${i}`;
|
|
1742
|
+
}
|
|
1743
|
+
this._idToGraphic.set(textData.id, baseMark);
|
|
1744
|
+
}
|
|
1668
1745
|
}
|
|
1746
|
+
}
|
|
1747
|
+
layout(data = []) {
|
|
1748
|
+
const { textStyle = {}, position, offset } = this.attribute;
|
|
1749
|
+
const labels = [];
|
|
1669
1750
|
for (let i = 0; i < data.length; i++) {
|
|
1670
1751
|
const textData = data[i];
|
|
1671
|
-
const baseMark =
|
|
1752
|
+
const baseMark = this._idToGraphic.get(textData.id);
|
|
1672
1753
|
const labelAttribute = {
|
|
1673
1754
|
...textStyle,
|
|
1674
|
-
...textData
|
|
1675
|
-
_relatedIndex: i
|
|
1755
|
+
...textData
|
|
1676
1756
|
};
|
|
1677
|
-
this.
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
const textAttributes = this.labeling(textBounds, graphicBounds, vutils.isFunction(position) ? position(textData) : position, offset);
|
|
1684
|
-
if (!textAttributes) {
|
|
1685
|
-
continue;
|
|
1686
|
-
}
|
|
1687
|
-
labelAttribute.x = textAttributes.x;
|
|
1688
|
-
labelAttribute.y = textAttributes.y;
|
|
1689
|
-
labels.push(labelAttribute);
|
|
1757
|
+
const text = this._createLabelText(labelAttribute);
|
|
1758
|
+
const textBounds = this.getGraphicBounds(text);
|
|
1759
|
+
const graphicBounds = this.getGraphicBounds(baseMark, { x: textData.x, y: textData.y });
|
|
1760
|
+
const textLocation = this.labeling(textBounds, graphicBounds, vutils.isFunction(position) ? position(textData) : position, offset);
|
|
1761
|
+
if (!textLocation) {
|
|
1762
|
+
continue;
|
|
1690
1763
|
}
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
labels
|
|
1764
|
+
labelAttribute.x = textLocation.x;
|
|
1765
|
+
labelAttribute.y = textLocation.y;
|
|
1766
|
+
text.setAttributes(textLocation);
|
|
1767
|
+
labels.push(text);
|
|
1695
1768
|
}
|
|
1696
1769
|
return labels;
|
|
1697
1770
|
}
|
|
1698
|
-
|
|
1771
|
+
_overlapping(labels) {
|
|
1699
1772
|
if (labels.length === 0) {
|
|
1700
1773
|
return [];
|
|
1701
1774
|
}
|
|
1775
|
+
const option = this.attribute.overlap;
|
|
1702
1776
|
const result = [];
|
|
1703
1777
|
const baseMarkGroup = this.getBaseMarkGroup();
|
|
1704
1778
|
const size = option.size ?? {
|
|
@@ -1708,7 +1782,7 @@
|
|
|
1708
1782
|
if (size.width === 0 || size.height === 0) {
|
|
1709
1783
|
return labels;
|
|
1710
1784
|
}
|
|
1711
|
-
const { avoidBaseMark, strategy = [], hideOnHit = true, clampForce = true } = option;
|
|
1785
|
+
const { avoidBaseMark, strategy = [], hideOnHit = true, clampForce = true, avoidMarks = [] } = option;
|
|
1712
1786
|
const bmpTool = this._bmpTool || bitmapTool(size.width, size.height);
|
|
1713
1787
|
const bitmap = this._bitmap || bmpTool.bitmap();
|
|
1714
1788
|
const checkBounds = strategy.some(s => s.type === 'bound');
|
|
@@ -1717,22 +1791,34 @@
|
|
|
1717
1791
|
mark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, mark.AABBBounds, true));
|
|
1718
1792
|
});
|
|
1719
1793
|
}
|
|
1794
|
+
if (avoidMarks.length > 0) {
|
|
1795
|
+
avoidMarks.forEach(avoid => {
|
|
1796
|
+
if (vutils.isString(avoid)) {
|
|
1797
|
+
getNoneGroupMarksByName(this.getRootNode(), avoid).forEach(avoidMark => {
|
|
1798
|
+
avoidMark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, avoidMark.AABBBounds, true));
|
|
1799
|
+
});
|
|
1800
|
+
}
|
|
1801
|
+
else if (avoid.AABBBounds) {
|
|
1802
|
+
bitmap.setRange(boundToRange(bmpTool, avoid.AABBBounds, true));
|
|
1803
|
+
}
|
|
1804
|
+
});
|
|
1805
|
+
}
|
|
1720
1806
|
for (let i = 0; i < labels.length; i++) {
|
|
1721
1807
|
if (labels[i].visible === false) {
|
|
1722
1808
|
continue;
|
|
1723
1809
|
}
|
|
1724
|
-
const text =
|
|
1725
|
-
const baseMark = this.
|
|
1810
|
+
const text = labels[i];
|
|
1811
|
+
const baseMark = this._idToGraphic.get(text.attribute.id);
|
|
1726
1812
|
text.update();
|
|
1727
1813
|
if (canPlace(bmpTool, bitmap, text.AABBBounds, clampForce)) {
|
|
1728
1814
|
if (!checkBounds) {
|
|
1729
1815
|
bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));
|
|
1730
|
-
result.push(
|
|
1816
|
+
result.push(text);
|
|
1731
1817
|
continue;
|
|
1732
1818
|
}
|
|
1733
1819
|
if (checkBounds && baseMark?.AABBBounds && canPlaceInside(text.AABBBounds, baseMark?.AABBBounds)) {
|
|
1734
1820
|
bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));
|
|
1735
|
-
result.push(
|
|
1821
|
+
result.push(text);
|
|
1736
1822
|
continue;
|
|
1737
1823
|
}
|
|
1738
1824
|
}
|
|
@@ -1740,28 +1826,33 @@
|
|
|
1740
1826
|
for (let j = 0; j < strategy.length; j++) {
|
|
1741
1827
|
hasPlace = place(bmpTool, bitmap, strategy[j], this.attribute, text, this.getGraphicBounds(baseMark, labels[i]), this.labeling);
|
|
1742
1828
|
if (hasPlace !== false) {
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
x: hasPlace.x,
|
|
1746
|
-
y: hasPlace.y
|
|
1747
|
-
});
|
|
1829
|
+
text.setAttributes({ x: hasPlace.x, y: hasPlace.y });
|
|
1830
|
+
result.push(text);
|
|
1748
1831
|
break;
|
|
1749
1832
|
}
|
|
1750
1833
|
}
|
|
1751
|
-
!hasPlace &&
|
|
1834
|
+
if (!hasPlace && clampForce) {
|
|
1835
|
+
const { dx = 0, dy = 0 } = clampText(text, bmpTool.width, bmpTool.height);
|
|
1836
|
+
if (!(dx === 0 && dy === 0) &&
|
|
1837
|
+
canPlace(bmpTool, bitmap, {
|
|
1838
|
+
x1: text.AABBBounds.x1 + dx,
|
|
1839
|
+
x2: text.AABBBounds.x2 + dx,
|
|
1840
|
+
y1: text.AABBBounds.y1 + dy,
|
|
1841
|
+
y2: text.AABBBounds.y2 + dy
|
|
1842
|
+
})) {
|
|
1843
|
+
text.setAttributes({ x: text.attribute.x + dx, y: text.attribute.y + dy });
|
|
1844
|
+
bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));
|
|
1845
|
+
result.push(text);
|
|
1846
|
+
continue;
|
|
1847
|
+
}
|
|
1848
|
+
}
|
|
1849
|
+
!hasPlace && !hideOnHit && result.push(text);
|
|
1752
1850
|
}
|
|
1753
1851
|
if (vutils.isFunction(this.onAfterLabelOverlap)) {
|
|
1754
1852
|
this.onAfterLabelOverlap(bitmap);
|
|
1755
1853
|
}
|
|
1756
1854
|
return result;
|
|
1757
1855
|
}
|
|
1758
|
-
getBaseMarks() {
|
|
1759
|
-
const baseMarkGroup = this.getBaseMarkGroup();
|
|
1760
|
-
if (!baseMarkGroup) {
|
|
1761
|
-
return;
|
|
1762
|
-
}
|
|
1763
|
-
return baseMarkGroup.getChildren();
|
|
1764
|
-
}
|
|
1765
1856
|
getBaseMarkGroup() {
|
|
1766
1857
|
const { baseMarkGroupName } = this.attribute;
|
|
1767
1858
|
if (!baseMarkGroupName) {
|
|
@@ -1786,17 +1877,16 @@
|
|
|
1786
1877
|
const easing = animationConfig.easing ?? DefaultLabelAnimation.easing;
|
|
1787
1878
|
const delay = animationConfig.delay ?? 0;
|
|
1788
1879
|
const currentTextMap = new Map();
|
|
1789
|
-
const prevTextMap = this.
|
|
1880
|
+
const prevTextMap = this._graphicToText || new Map();
|
|
1790
1881
|
const texts = [];
|
|
1791
|
-
labels.forEach((
|
|
1792
|
-
const
|
|
1793
|
-
const relatedGraphic = this._relationMap.get(label._relatedIndex);
|
|
1882
|
+
labels.forEach((text, index) => {
|
|
1883
|
+
const relatedGraphic = this._idToGraphic.get(text.attribute.id);
|
|
1794
1884
|
const state = prevTextMap?.get(relatedGraphic) ? 'update' : 'enter';
|
|
1795
1885
|
if (state === 'enter') {
|
|
1796
1886
|
texts.push(text);
|
|
1797
1887
|
currentTextMap.set(relatedGraphic, text);
|
|
1798
1888
|
if (!disableAnimation && relatedGraphic) {
|
|
1799
|
-
const { from, to } = getAnimationAttributes(
|
|
1889
|
+
const { from, to } = getAnimationAttributes(text.attribute, 'fadeIn');
|
|
1800
1890
|
this.add(text);
|
|
1801
1891
|
relatedGraphic.onAnimateBind = () => {
|
|
1802
1892
|
text.setAttributes(from);
|
|
@@ -1846,7 +1936,7 @@
|
|
|
1846
1936
|
});
|
|
1847
1937
|
}
|
|
1848
1938
|
});
|
|
1849
|
-
this.
|
|
1939
|
+
this._graphicToText = currentTextMap;
|
|
1850
1940
|
}
|
|
1851
1941
|
_afterRelatedGraphicAttributeUpdate(text, texts, index, relatedGraphic, { mode, duration, easing, to, delay }) {
|
|
1852
1942
|
const listener = (event) => {
|
|
@@ -1897,30 +1987,34 @@
|
|
|
1897
1987
|
return listener;
|
|
1898
1988
|
}
|
|
1899
1989
|
_smartInvert(labels) {
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
}
|
|
1990
|
+
const option = (this.attribute.smartInvert || {});
|
|
1991
|
+
const { textType, contrastRatiosThreshold, alternativeColors } = option;
|
|
1903
1992
|
for (let i = 0; i < labels.length; i++) {
|
|
1904
|
-
const label = labels
|
|
1993
|
+
const label = labels[i];
|
|
1905
1994
|
if (!label) {
|
|
1906
1995
|
continue;
|
|
1907
1996
|
}
|
|
1908
|
-
const
|
|
1909
|
-
|
|
1910
|
-
|
|
1997
|
+
const baseMark = this._idToGraphic.get(label.attribute.id);
|
|
1998
|
+
const isInside = canPlaceInside(label.AABBBounds, baseMark?.AABBBounds);
|
|
1999
|
+
if (label.attribute.stroke && label.attribute.lineWidth > 0) {
|
|
2000
|
+
label.setAttributes({
|
|
2001
|
+
fill: labelSmartInvert(label.attribute.fill, label.attribute.stroke, textType, contrastRatiosThreshold, alternativeColors)
|
|
2002
|
+
});
|
|
1911
2003
|
}
|
|
1912
2004
|
else if (isInside) {
|
|
1913
|
-
const baseMark = this._relationMap.get(label._relatedIndex);
|
|
1914
2005
|
const backgroundColor = baseMark.attribute.fill;
|
|
1915
|
-
const foregroundColor = label.fill;
|
|
1916
|
-
label.
|
|
2006
|
+
const foregroundColor = label.attribute.fill;
|
|
2007
|
+
label.setAttributes({
|
|
2008
|
+
fill: labelSmartInvert(foregroundColor, backgroundColor, textType, contrastRatiosThreshold, alternativeColors)
|
|
2009
|
+
});
|
|
1917
2010
|
}
|
|
1918
|
-
else if (label.lineWidth > 0) {
|
|
1919
|
-
const
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
2011
|
+
else if (label.attribute.lineWidth > 0) {
|
|
2012
|
+
const backgroundColor = label.attribute.stroke;
|
|
2013
|
+
const foregroundColor = label.attribute.fill;
|
|
2014
|
+
label.setAttributes({
|
|
2015
|
+
stroke: baseMark.attribute.fill,
|
|
2016
|
+
fill: labelSmartInvert(foregroundColor, backgroundColor, textType, contrastRatiosThreshold, alternativeColors)
|
|
2017
|
+
});
|
|
1924
2018
|
}
|
|
1925
2019
|
}
|
|
1926
2020
|
}
|
|
@@ -2375,6 +2469,7 @@
|
|
|
2375
2469
|
},
|
|
2376
2470
|
startSymbol: {
|
|
2377
2471
|
visible: false,
|
|
2472
|
+
autoRotate: true,
|
|
2378
2473
|
symbolType: 'triangle',
|
|
2379
2474
|
size: 12,
|
|
2380
2475
|
refX: 0,
|
|
@@ -2387,6 +2482,7 @@
|
|
|
2387
2482
|
},
|
|
2388
2483
|
endSymbol: {
|
|
2389
2484
|
visible: false,
|
|
2485
|
+
autoRotate: true,
|
|
2390
2486
|
symbolType: 'triangle',
|
|
2391
2487
|
size: 12,
|
|
2392
2488
|
refX: 0,
|
|
@@ -2458,6 +2554,7 @@
|
|
|
2458
2554
|
this.add(line);
|
|
2459
2555
|
}
|
|
2460
2556
|
renderSymbol(attribute, dim) {
|
|
2557
|
+
const { autoRotate = true } = attribute;
|
|
2461
2558
|
let symbol;
|
|
2462
2559
|
if (attribute?.visible) {
|
|
2463
2560
|
const startAngle = this._startAngle;
|
|
@@ -2486,7 +2583,7 @@
|
|
|
2486
2583
|
...position,
|
|
2487
2584
|
symbolType: symbolType,
|
|
2488
2585
|
size,
|
|
2489
|
-
angle: rotate + refAngle,
|
|
2586
|
+
angle: autoRotate ? rotate + refAngle : 0,
|
|
2490
2587
|
strokeBoundsBuffer: 0,
|
|
2491
2588
|
...style
|
|
2492
2589
|
});
|
|
@@ -2522,6 +2619,7 @@
|
|
|
2522
2619
|
AXIS_ELEMENT_NAME["gridRegion"] = "axis-grid-region";
|
|
2523
2620
|
AXIS_ELEMENT_NAME["line"] = "axis-line";
|
|
2524
2621
|
AXIS_ELEMENT_NAME["background"] = "axis-background";
|
|
2622
|
+
AXIS_ELEMENT_NAME["axisLabelBackground"] = "axis-label-background";
|
|
2525
2623
|
})(exports.AXIS_ELEMENT_NAME || (exports.AXIS_ELEMENT_NAME = {}));
|
|
2526
2624
|
exports.AxisStateValue = void 0;
|
|
2527
2625
|
(function (AxisStateValue) {
|
|
@@ -2704,7 +2802,7 @@
|
|
|
2704
2802
|
}
|
|
2705
2803
|
};
|
|
2706
2804
|
_renderInner(container) {
|
|
2707
|
-
const { title, label, tick, line, grid, items
|
|
2805
|
+
const { title, label, tick, line, grid, items } = this.attribute;
|
|
2708
2806
|
const axisContainer = vrender.createGroup({ x: 0, y: 0, zIndex: 1 });
|
|
2709
2807
|
axisContainer.name = exports.AXIS_ELEMENT_NAME.axisContainer;
|
|
2710
2808
|
axisContainer.id = this._getNodeId('container');
|
|
@@ -2728,7 +2826,9 @@
|
|
|
2728
2826
|
items.forEach((axisItems, layer) => {
|
|
2729
2827
|
const layerLabelGroup = this.renderLabels(labelGroup, axisItems, layer);
|
|
2730
2828
|
const labels = layerLabelGroup.getChildren();
|
|
2731
|
-
this.
|
|
2829
|
+
this.beforeLabelsOverlap(labels, axisItems, layerLabelGroup, layer, items.length);
|
|
2830
|
+
this.handleLabelsOverlap(labels, axisItems, layerLabelGroup, layer, items.length);
|
|
2831
|
+
this.afterLabelsOverlap(labels, axisItems, layerLabelGroup, layer, items.length);
|
|
2732
2832
|
});
|
|
2733
2833
|
}
|
|
2734
2834
|
if (grid?.visible) {
|
|
@@ -2738,22 +2838,6 @@
|
|
|
2738
2838
|
if (title?.visible) {
|
|
2739
2839
|
this.renderTitle(axisContainer);
|
|
2740
2840
|
}
|
|
2741
|
-
if (panel && panel.visible) {
|
|
2742
|
-
const axisContainerBounds = axisContainer.AABBBounds;
|
|
2743
|
-
const bgRect = vrender.createRect({
|
|
2744
|
-
x: axisContainerBounds.x1,
|
|
2745
|
-
y: axisContainerBounds.y1,
|
|
2746
|
-
width: axisContainerBounds.width(),
|
|
2747
|
-
height: axisContainerBounds.height(),
|
|
2748
|
-
...panel.style
|
|
2749
|
-
});
|
|
2750
|
-
bgRect.name = exports.AXIS_ELEMENT_NAME.background;
|
|
2751
|
-
bgRect.id = this._getNodeId('background');
|
|
2752
|
-
if (!vutils.isEmpty(panel.state)) {
|
|
2753
|
-
bgRect.states = vutils.merge({}, DEFAULT_STATES$2, panel.state);
|
|
2754
|
-
}
|
|
2755
|
-
axisContainer.insertBefore(bgRect, axisContainer.firstChild);
|
|
2756
|
-
}
|
|
2757
2841
|
}
|
|
2758
2842
|
renderTicks(container) {
|
|
2759
2843
|
const tickLineItems = this.getTickLineItems();
|
|
@@ -3280,7 +3364,7 @@
|
|
|
3280
3364
|
? orient === 'top' || orient === 'bottom'
|
|
3281
3365
|
? null
|
|
3282
3366
|
: limitLength
|
|
3283
|
-
: limitLength / Math.sin(label.attribute.angle);
|
|
3367
|
+
: Math.abs(limitLength / Math.sin(label.attribute.angle));
|
|
3284
3368
|
label.setAttributes({
|
|
3285
3369
|
maxLineWidth: limitLabelLength,
|
|
3286
3370
|
ellipsis
|
|
@@ -3288,6 +3372,67 @@
|
|
|
3288
3372
|
});
|
|
3289
3373
|
}
|
|
3290
3374
|
|
|
3375
|
+
function alignAxisLabels(labels, start, containerSize, orient, align) {
|
|
3376
|
+
if (orient === 'right' || orient === 'left') {
|
|
3377
|
+
if (align === 'left') {
|
|
3378
|
+
const flag = orient === 'right' ? 0 : -1;
|
|
3379
|
+
labels.forEach(label => {
|
|
3380
|
+
label.setAttributes({
|
|
3381
|
+
x: start + containerSize * flag,
|
|
3382
|
+
textAlign: 'left'
|
|
3383
|
+
});
|
|
3384
|
+
});
|
|
3385
|
+
}
|
|
3386
|
+
else if (align === 'right') {
|
|
3387
|
+
const flag = orient === 'right' ? 1 : 0;
|
|
3388
|
+
labels.forEach(label => {
|
|
3389
|
+
label.setAttributes({
|
|
3390
|
+
x: start + containerSize * flag,
|
|
3391
|
+
textAlign: 'right'
|
|
3392
|
+
});
|
|
3393
|
+
});
|
|
3394
|
+
}
|
|
3395
|
+
else if (align === 'center') {
|
|
3396
|
+
const flag = orient === 'right' ? 1 : -1;
|
|
3397
|
+
labels.forEach(label => {
|
|
3398
|
+
label.setAttributes({
|
|
3399
|
+
x: start + containerSize * 0.5 * flag,
|
|
3400
|
+
textAlign: 'center'
|
|
3401
|
+
});
|
|
3402
|
+
});
|
|
3403
|
+
}
|
|
3404
|
+
}
|
|
3405
|
+
else if (orient === 'bottom' || orient === 'top') {
|
|
3406
|
+
if (align === 'top') {
|
|
3407
|
+
const flag = orient === 'bottom' ? 0 : -1;
|
|
3408
|
+
labels.forEach(label => {
|
|
3409
|
+
label.setAttributes({
|
|
3410
|
+
y: start + containerSize * flag,
|
|
3411
|
+
textBaseline: 'top'
|
|
3412
|
+
});
|
|
3413
|
+
});
|
|
3414
|
+
}
|
|
3415
|
+
else if (align === 'bottom') {
|
|
3416
|
+
const flag = orient === 'bottom' ? 1 : 0;
|
|
3417
|
+
labels.forEach(label => {
|
|
3418
|
+
label.setAttributes({
|
|
3419
|
+
y: start + containerSize * flag,
|
|
3420
|
+
textBaseline: 'bottom'
|
|
3421
|
+
});
|
|
3422
|
+
});
|
|
3423
|
+
}
|
|
3424
|
+
else if (align === 'middle') {
|
|
3425
|
+
const flag = orient === 'bottom' ? 1 : -1;
|
|
3426
|
+
labels.forEach(label => {
|
|
3427
|
+
label.setAttributes({
|
|
3428
|
+
y: start + containerSize * 0.5 * flag,
|
|
3429
|
+
textBaseline: 'middle'
|
|
3430
|
+
});
|
|
3431
|
+
});
|
|
3432
|
+
}
|
|
3433
|
+
}
|
|
3434
|
+
}
|
|
3435
|
+
|
|
3291
3436
|
function getCirclePoints(center, count, radius, startAngle, endAngle) {
|
|
3292
3437
|
const points = [];
|
|
3293
3438
|
const range = endAngle - startAngle;
|
|
@@ -3305,6 +3450,27 @@
|
|
|
3305
3450
|
this.setMode(mode);
|
|
3306
3451
|
}
|
|
3307
3452
|
}
|
|
3453
|
+
_renderInner(container) {
|
|
3454
|
+
super._renderInner(container);
|
|
3455
|
+
const { panel } = this.attribute;
|
|
3456
|
+
if (panel && panel.visible) {
|
|
3457
|
+
const axisContainer = this.axisContainer;
|
|
3458
|
+
const axisContainerBounds = axisContainer.AABBBounds;
|
|
3459
|
+
const bgRect = vrender.createRect({
|
|
3460
|
+
x: axisContainerBounds.x1,
|
|
3461
|
+
y: axisContainerBounds.y1,
|
|
3462
|
+
width: axisContainerBounds.width(),
|
|
3463
|
+
height: axisContainerBounds.height(),
|
|
3464
|
+
...panel.style
|
|
3465
|
+
});
|
|
3466
|
+
bgRect.name = exports.AXIS_ELEMENT_NAME.background;
|
|
3467
|
+
bgRect.id = this._getNodeId('background');
|
|
3468
|
+
if (!vutils.isEmpty(panel.state)) {
|
|
3469
|
+
bgRect.states = vutils.merge({}, DEFAULT_STATES$1, panel.state);
|
|
3470
|
+
}
|
|
3471
|
+
axisContainer.insertBefore(bgRect, axisContainer.firstChild);
|
|
3472
|
+
}
|
|
3473
|
+
}
|
|
3308
3474
|
renderLine(container) {
|
|
3309
3475
|
const { start, end, line } = this.attribute;
|
|
3310
3476
|
const { startSymbol, endSymbol, style, breakRange, breakShape, breakShapeStyle, state, ...restLineAttrs } = line;
|
|
@@ -3612,24 +3778,21 @@
|
|
|
3612
3778
|
}
|
|
3613
3779
|
return base;
|
|
3614
3780
|
}
|
|
3615
|
-
|
|
3616
|
-
|
|
3617
|
-
|
|
3781
|
+
beforeLabelsOverlap(labelShapes, labelData, labelContainer, layer, layerCount) {
|
|
3782
|
+
const orient = this.attribute.orient;
|
|
3783
|
+
if (orient === 'left' || orient === 'right') {
|
|
3784
|
+
rotateYAxis(orient, labelShapes);
|
|
3618
3785
|
}
|
|
3619
|
-
|
|
3620
|
-
|
|
3621
|
-
let limitLength = verticalLimitSize;
|
|
3622
|
-
let titleHeight = 0;
|
|
3623
|
-
let titleSpacing = 0;
|
|
3624
|
-
const axisLineWidth = line?.visible ? line.style.lineWidth ?? 1 : 0;
|
|
3625
|
-
const tickLength = tick?.visible ? tick.length ?? 4 : 0;
|
|
3626
|
-
if (title?.visible) {
|
|
3627
|
-
titleHeight = measureTextSize(title.text, title.textStyle).height;
|
|
3628
|
-
titleSpacing = title.space;
|
|
3786
|
+
else if (orient === 'bottom' || orient === 'top') {
|
|
3787
|
+
rotateXAxis(orient, labelShapes);
|
|
3629
3788
|
}
|
|
3630
|
-
|
|
3631
|
-
|
|
3789
|
+
}
|
|
3790
|
+
handleLabelsOverlap(labelShapes, labelData, labelContainer, layer, layerCount) {
|
|
3791
|
+
if (vutils.isEmpty(labelShapes)) {
|
|
3792
|
+
return;
|
|
3632
3793
|
}
|
|
3794
|
+
const { verticalLimitSize, label, orient } = this.attribute;
|
|
3795
|
+
const limitLength = this._getAxisLabelLimitLength(verticalLimitSize, layerCount);
|
|
3633
3796
|
const { layoutFunc, autoRotate: autoRotate$1, autoRotateAngle, autoLimit: autoLimit$1, limitEllipsis, autoHide: autoHide$1, autoHideMethod, autoHideSeparation } = label;
|
|
3634
3797
|
if (vutils.isFunction(layoutFunc)) {
|
|
3635
3798
|
layoutFunc(labelShapes, labelData, layer, this);
|
|
@@ -3657,6 +3820,79 @@
|
|
|
3657
3820
|
}
|
|
3658
3821
|
}
|
|
3659
3822
|
}
|
|
3823
|
+
afterLabelsOverlap(labelShapes, labelData, labelContainer, layer, layerCount) {
|
|
3824
|
+
const { verticalLimitSize, orient } = this.attribute;
|
|
3825
|
+
const isHorizontal = orient === 'bottom' || orient === 'top';
|
|
3826
|
+
const axisLabelContainerBounds = labelContainer.AABBBounds;
|
|
3827
|
+
let axisLabelContainerSize = isHorizontal ? axisLabelContainerBounds.height() : axisLabelContainerBounds.width();
|
|
3828
|
+
const { verticalMinSize } = this.attribute;
|
|
3829
|
+
if (vutils.isValidNumber(verticalMinSize) && (!vutils.isValidNumber(verticalLimitSize) || verticalMinSize <= verticalLimitSize)) {
|
|
3830
|
+
const minSize = this._getAxisLabelLimitLength(verticalMinSize, layerCount);
|
|
3831
|
+
axisLabelContainerSize = Math.max(axisLabelContainerSize, minSize);
|
|
3832
|
+
let x;
|
|
3833
|
+
let y;
|
|
3834
|
+
if (orient === 'left') {
|
|
3835
|
+
x = axisLabelContainerBounds.x2 - axisLabelContainerSize;
|
|
3836
|
+
y = axisLabelContainerBounds.y1;
|
|
3837
|
+
}
|
|
3838
|
+
else if (orient === 'right') {
|
|
3839
|
+
x = axisLabelContainerBounds.x1;
|
|
3840
|
+
y = axisLabelContainerBounds.y1;
|
|
3841
|
+
}
|
|
3842
|
+
else if (orient === 'top') {
|
|
3843
|
+
x = axisLabelContainerBounds.x1;
|
|
3844
|
+
y = axisLabelContainerBounds.y2 - axisLabelContainerSize;
|
|
3845
|
+
}
|
|
3846
|
+
else if (orient === 'bottom') {
|
|
3847
|
+
x = axisLabelContainerBounds.x1;
|
|
3848
|
+
y = axisLabelContainerBounds.y1;
|
|
3849
|
+
}
|
|
3850
|
+
const bgRect = vrender.createRect({
|
|
3851
|
+
x,
|
|
3852
|
+
y,
|
|
3853
|
+
width: isHorizontal ? axisLabelContainerBounds.width() : axisLabelContainerSize,
|
|
3854
|
+
height: isHorizontal ? axisLabelContainerSize : axisLabelContainerBounds.height(),
|
|
3855
|
+
pickable: false
|
|
3856
|
+
});
|
|
3857
|
+
bgRect.name = exports.AXIS_ELEMENT_NAME.axisLabelBackground;
|
|
3858
|
+
bgRect.id = this._getNodeId('axis-label-background');
|
|
3859
|
+
labelContainer.insertBefore(bgRect, labelContainer.firstChild);
|
|
3860
|
+
}
|
|
3861
|
+
if (vutils.isValid(this.attribute.label.containerAlign)) {
|
|
3862
|
+
let start;
|
|
3863
|
+
if (orient === 'left') {
|
|
3864
|
+
start = axisLabelContainerBounds.x2;
|
|
3865
|
+
}
|
|
3866
|
+
else if (orient === 'right') {
|
|
3867
|
+
start = axisLabelContainerBounds.x1;
|
|
3868
|
+
}
|
|
3869
|
+
else if (orient === 'top') {
|
|
3870
|
+
start = axisLabelContainerBounds.y2;
|
|
3871
|
+
}
|
|
3872
|
+
else if (orient === 'bottom') {
|
|
3873
|
+
start = axisLabelContainerBounds.y1;
|
|
3874
|
+
}
|
|
3875
|
+
alignAxisLabels(labelShapes, start, axisLabelContainerSize, orient, this.attribute.label.containerAlign);
|
|
3876
|
+
}
|
|
3877
|
+
}
|
|
3878
|
+
_getAxisLabelLimitLength(limitSize, layerCount) {
|
|
3879
|
+
const { label, title, line, tick } = this.attribute;
|
|
3880
|
+
const labelSpace = label.space ?? 4;
|
|
3881
|
+
let limitLength = limitSize;
|
|
3882
|
+
let titleHeight = 0;
|
|
3883
|
+
let titleSpacing = 0;
|
|
3884
|
+
const axisLineWidth = line?.visible ? line.style.lineWidth ?? 1 : 0;
|
|
3885
|
+
const tickLength = tick?.visible ? tick.length ?? 4 : 0;
|
|
3886
|
+
if (title?.visible) {
|
|
3887
|
+
titleHeight = measureTextSize(title.text, title.textStyle).height;
|
|
3888
|
+
const padding = vutils.normalizePadding(title.padding);
|
|
3889
|
+
titleSpacing = title.space + padding[0] + padding[2];
|
|
3890
|
+
}
|
|
3891
|
+
if (limitLength) {
|
|
3892
|
+
limitLength = (limitLength - labelSpace - titleSpacing - titleHeight - axisLineWidth - tickLength) / layerCount;
|
|
3893
|
+
}
|
|
3894
|
+
return limitLength;
|
|
3895
|
+
}
|
|
3660
3896
|
}
|
|
3661
3897
|
|
|
3662
3898
|
class CircleAxis extends AxisBase {
|
|
@@ -3911,7 +4147,13 @@
|
|
|
3911
4147
|
}
|
|
3912
4148
|
return base;
|
|
3913
4149
|
}
|
|
3914
|
-
|
|
4150
|
+
beforeLabelsOverlap(labelShapes, labelData, labelContainer, layer, layerCount) {
|
|
4151
|
+
return;
|
|
4152
|
+
}
|
|
4153
|
+
handleLabelsOverlap(labelShapes, labelData, labelContainer, layer, layerCount) {
|
|
4154
|
+
return;
|
|
4155
|
+
}
|
|
4156
|
+
afterLabelsOverlap(labelShapes, labelData, labelContainer, layer, layerCount) {
|
|
3915
4157
|
return;
|
|
3916
4158
|
}
|
|
3917
4159
|
}
|
|
@@ -4124,7 +4366,7 @@
|
|
|
4124
4366
|
}
|
|
4125
4367
|
},
|
|
4126
4368
|
middleHandlerStyle: {
|
|
4127
|
-
visible:
|
|
4369
|
+
visible: true,
|
|
4128
4370
|
background: {
|
|
4129
4371
|
size: 8,
|
|
4130
4372
|
style: {
|
|
@@ -4142,12 +4384,14 @@
|
|
|
4142
4384
|
}
|
|
4143
4385
|
},
|
|
4144
4386
|
startHandlerStyle: {
|
|
4387
|
+
visible: true,
|
|
4145
4388
|
symbolType: 'M -0.0544 0.25 C -0.0742 0.25 -0.0901 0.234 -0.0901 0.2143 L -0.0901 -0.1786 C -0.0901 -0.1983 -0.0742 -0.2143 -0.0544 -0.2143 L -0.0187 -0.2143 L -0.0187 -0.5 L 0.017 -0.5 L 0.017 -0.2143 L 0.0527 -0.2143 C 0.0724 -0.2143 0.0884 -0.1983 0.0884 -0.1786 L 0.0884 0.2143 C 0.0884 0.234 0.0724 0.25 0.0527 0.25 L 0.017 0.25 L 0.017 0.5 L -0.0187 0.5 L -0.0187 0.25 L -0.0544 0.25 Z M -0.0187 -0.1429 L -0.0544 -0.1429 L -0.0544 0.1786 L -0.0187 0.1786 L -0.0187 -0.1429 Z M 0.0527 -0.1429 L 0.017 -0.1429 L 0.017 0.1786 L 0.0527 0.1786 L 0.0527 -0.1429 Z',
|
|
4146
4389
|
fill: 'white',
|
|
4147
4390
|
stroke: '#B0C8F9',
|
|
4148
4391
|
lineWidth: 0.5
|
|
4149
4392
|
},
|
|
4150
4393
|
endHandlerStyle: {
|
|
4394
|
+
visible: true,
|
|
4151
4395
|
symbolType: 'M -0.0544 0.25 C -0.0742 0.25 -0.0901 0.234 -0.0901 0.2143 L -0.0901 -0.1786 C -0.0901 -0.1983 -0.0742 -0.2143 -0.0544 -0.2143 L -0.0187 -0.2143 L -0.0187 -0.5 L 0.017 -0.5 L 0.017 -0.2143 L 0.0527 -0.2143 C 0.0724 -0.2143 0.0884 -0.1983 0.0884 -0.1786 L 0.0884 0.2143 C 0.0884 0.234 0.0724 0.25 0.0527 0.25 L 0.017 0.25 L 0.017 0.5 L -0.0187 0.5 L -0.0187 0.25 L -0.0544 0.25 Z M -0.0187 -0.1429 L -0.0544 -0.1429 L -0.0544 0.1786 L -0.0187 0.1786 L -0.0187 -0.1429 Z M 0.0527 -0.1429 L 0.017 -0.1429 L 0.017 0.1786 L 0.0527 0.1786 L 0.0527 -0.1429 Z',
|
|
4152
4396
|
fill: 'white',
|
|
4153
4397
|
stroke: '#B0C8F9',
|
|
@@ -4219,7 +4463,7 @@
|
|
|
4219
4463
|
_layoutAttrFromConfig;
|
|
4220
4464
|
constructor(attributes) {
|
|
4221
4465
|
super(vutils.merge({}, DataZoom.defaultAttributes, attributes));
|
|
4222
|
-
const { start, end, size, orient, showDetail, position, previewData, previewCallbackX, previewCallbackY, previewCallbackX1, previewCallbackY1 } = this.attribute;
|
|
4466
|
+
const { start, end, size, orient, showDetail, position, previewData, previewCallbackX, previewCallbackY, previewCallbackX1, previewCallbackY1, updateStateCallback } = this.attribute;
|
|
4223
4467
|
const { width, height } = size;
|
|
4224
4468
|
start && (this.state.start = start);
|
|
4225
4469
|
end && (this.state.end = end);
|
|
@@ -4240,6 +4484,7 @@
|
|
|
4240
4484
|
vutils.isFunction(previewCallbackY) && (this._previewCallbackY = previewCallbackY);
|
|
4241
4485
|
vutils.isFunction(previewCallbackX1) && (this._previewCallbackX1 = previewCallbackX1);
|
|
4242
4486
|
vutils.isFunction(previewCallbackY1) && (this._previewCallbackY1 = previewCallbackY1);
|
|
4487
|
+
vutils.isFunction(updateStateCallback) && (this._updateStateCallback = updateStateCallback);
|
|
4243
4488
|
}
|
|
4244
4489
|
bindEvents() {
|
|
4245
4490
|
const { showDetail, brushSelect } = this.attribute;
|
|
@@ -4268,9 +4513,9 @@
|
|
|
4268
4513
|
if (this._selectedPreviewGroup) {
|
|
4269
4514
|
this._selectedPreviewGroup.addEventListener('pointerdown', (e) => this._onHandlerPointerDown(e, selectedTag));
|
|
4270
4515
|
}
|
|
4271
|
-
if (vrender.
|
|
4272
|
-
vrender.
|
|
4273
|
-
vrender.
|
|
4516
|
+
if (vrender.global.env === 'browser') {
|
|
4517
|
+
vrender.global.addEventListener('pointermove', this._onHandlerPointerMove.bind(this));
|
|
4518
|
+
vrender.global.addEventListener('pointerup', this._onHandlerPointerUp.bind(this));
|
|
4274
4519
|
}
|
|
4275
4520
|
this.addEventListener('pointermove', this._onHandlerPointerMove);
|
|
4276
4521
|
this.addEventListener('pointerup', this._onHandlerPointerUp);
|
|
@@ -4514,7 +4759,7 @@
|
|
|
4514
4759
|
if (this._layoutAttrFromConfig) {
|
|
4515
4760
|
return this._layoutAttrFromConfig;
|
|
4516
4761
|
}
|
|
4517
|
-
const { position: positionConfig, size, orient, middleHandlerStyle } = this.attribute;
|
|
4762
|
+
const { position: positionConfig, size, orient, middleHandlerStyle, startHandlerStyle, endHandlerStyle } = this.attribute;
|
|
4518
4763
|
const { width: widthConfig, height: heightConfig } = size;
|
|
4519
4764
|
const middleHandlerSize = middleHandlerStyle?.background?.size ?? 10;
|
|
4520
4765
|
let width;
|
|
@@ -4543,6 +4788,24 @@
|
|
|
4543
4788
|
height = heightConfig;
|
|
4544
4789
|
position = positionConfig;
|
|
4545
4790
|
}
|
|
4791
|
+
const startHandlerSize = startHandlerStyle?.size ?? (this._isHorizontal ? height : width);
|
|
4792
|
+
const endHandlerSize = endHandlerStyle?.size ?? (this._isHorizontal ? height : width);
|
|
4793
|
+
if (startHandlerStyle?.visible) {
|
|
4794
|
+
if (this._isHorizontal) {
|
|
4795
|
+
width -= (startHandlerSize + endHandlerSize) / 2;
|
|
4796
|
+
position = {
|
|
4797
|
+
x: position.x + startHandlerSize / 2,
|
|
4798
|
+
y: position.y
|
|
4799
|
+
};
|
|
4800
|
+
}
|
|
4801
|
+
else {
|
|
4802
|
+
height -= (startHandlerSize + endHandlerSize) / 2;
|
|
4803
|
+
position = {
|
|
4804
|
+
x: position.x,
|
|
4805
|
+
y: position.y + startHandlerSize
|
|
4806
|
+
};
|
|
4807
|
+
}
|
|
4808
|
+
}
|
|
4546
4809
|
this._layoutAttrFromConfig = {
|
|
4547
4810
|
position,
|
|
4548
4811
|
width,
|
|
@@ -4797,10 +5060,9 @@
|
|
|
4797
5060
|
else {
|
|
4798
5061
|
this._selectedPreviewArea = this._selectedPreviewGroup.createOrUpdateChild('selectedPreviewArea', { curveType: 'basis' }, 'area');
|
|
4799
5062
|
}
|
|
4800
|
-
const {
|
|
4801
|
-
const { width, height } = size;
|
|
5063
|
+
const { selectedBackgroundChartStyle } = this.attribute;
|
|
4802
5064
|
const { start, end } = this.state;
|
|
4803
|
-
this.
|
|
5065
|
+
const { position, width, height } = this.getLayoutAttrFromConfig();
|
|
4804
5066
|
this._selectedPreviewGroupClip.setAttributes({
|
|
4805
5067
|
x: this._isHorizontal ? position.x + start * width : position.x,
|
|
4806
5068
|
y: this._isHorizontal ? position.y : position.y + start * height,
|
|
@@ -4850,6 +5112,7 @@
|
|
|
4850
5112
|
this.state.end = end;
|
|
4851
5113
|
if (startAttr !== this.state.start || endAttr !== this.state.end) {
|
|
4852
5114
|
this.setAttributes({ start, end });
|
|
5115
|
+
this._updateStateCallback && this._updateStateCallback(start, end);
|
|
4853
5116
|
}
|
|
4854
5117
|
}
|
|
4855
5118
|
}
|
|
@@ -6233,7 +6496,9 @@
|
|
|
6233
6496
|
const innerGroupBounds = innerGroup.AABBBounds;
|
|
6234
6497
|
const innerGroupWidth = innerGroupBounds.width();
|
|
6235
6498
|
const innerGroupHeight = innerGroupBounds.height();
|
|
6236
|
-
const itemGroupWidth = this.
|
|
6499
|
+
const itemGroupWidth = vutils.isValid(this.attribute.item.width)
|
|
6500
|
+
? this.attribute.item.width
|
|
6501
|
+
: innerGroupWidth + parsedPadding[1] + parsedPadding[3];
|
|
6237
6502
|
const itemGroupHeight = this._itemHeightByUser || innerGroupHeight + parsedPadding[0] + parsedPadding[2];
|
|
6238
6503
|
itemGroup.attribute.width = itemGroupWidth;
|
|
6239
6504
|
itemGroup.attribute.height = itemGroupHeight;
|
|
@@ -6925,9 +7190,9 @@
|
|
|
6925
7190
|
e.stopPropagation();
|
|
6926
7191
|
this._currentHandler = e.target;
|
|
6927
7192
|
this._prePos = this._isHorizontal ? e.clientX : e.clientY;
|
|
6928
|
-
if (vrender.
|
|
6929
|
-
vrender.
|
|
6930
|
-
vrender.
|
|
7193
|
+
if (vrender.global.env === 'browser') {
|
|
7194
|
+
vrender.global.addEventListener('pointermove', this._onHandlerPointerMove);
|
|
7195
|
+
vrender.global.addEventListener('pointerup', this._onHandlerPointerUp);
|
|
6931
7196
|
}
|
|
6932
7197
|
else {
|
|
6933
7198
|
this._currentHandler.addEventListener('pointermove', this._onHandlerPointerMove);
|
|
@@ -6969,9 +7234,9 @@
|
|
|
6969
7234
|
_onHandlerPointerUp = (e) => {
|
|
6970
7235
|
e.preventDefault();
|
|
6971
7236
|
this._currentHandler = null;
|
|
6972
|
-
if (vrender.
|
|
6973
|
-
vrender.
|
|
6974
|
-
vrender.
|
|
7237
|
+
if (vrender.global.env === 'browser') {
|
|
7238
|
+
vrender.global.removeEventListener('pointermove', this._onHandlerPointerMove);
|
|
7239
|
+
vrender.global.removeEventListener('pointerup', this._onHandlerPointerUp);
|
|
6975
7240
|
}
|
|
6976
7241
|
else {
|
|
6977
7242
|
const currentTarget = e.target;
|
|
@@ -6983,9 +7248,9 @@
|
|
|
6983
7248
|
_onTrackPointerdown = (e) => {
|
|
6984
7249
|
e.stopPropagation();
|
|
6985
7250
|
this._prePos = this._isHorizontal ? e.clientX : e.clientY;
|
|
6986
|
-
if (vrender.
|
|
6987
|
-
vrender.
|
|
6988
|
-
vrender.
|
|
7251
|
+
if (vrender.global.env === 'browser') {
|
|
7252
|
+
vrender.global.addEventListener('pointermove', this._onTrackPointerMove);
|
|
7253
|
+
vrender.global.addEventListener('pointerup', this._onTrackPointerUp);
|
|
6989
7254
|
}
|
|
6990
7255
|
else {
|
|
6991
7256
|
this._track.addEventListener('pointermove', this._onTrackPointerMove);
|
|
@@ -7037,9 +7302,9 @@
|
|
|
7037
7302
|
};
|
|
7038
7303
|
_onTrackPointerUp = (e) => {
|
|
7039
7304
|
e.preventDefault();
|
|
7040
|
-
if (vrender.
|
|
7041
|
-
vrender.
|
|
7042
|
-
vrender.
|
|
7305
|
+
if (vrender.global.env === 'browser') {
|
|
7306
|
+
vrender.global.removeEventListener('pointermove', this._onTrackPointerMove);
|
|
7307
|
+
vrender.global.removeEventListener('pointerup', this._onTrackPointerUp);
|
|
7043
7308
|
}
|
|
7044
7309
|
else {
|
|
7045
7310
|
this._track.removeEventListener('pointermove', this._onTrackPointerMove);
|
|
@@ -8580,7 +8845,7 @@
|
|
|
8580
8845
|
this.dispatchCustomEvent(exports.PlayerEventEnum.OnPlay);
|
|
8581
8846
|
this._isReachEnd = false;
|
|
8582
8847
|
this._tickTime = Date.now();
|
|
8583
|
-
this._rafId = vrender.
|
|
8848
|
+
this._rafId = vrender.global.getRequestAnimationFrame()(this._play.bind(this, true));
|
|
8584
8849
|
};
|
|
8585
8850
|
_play = (isFirstPlay) => {
|
|
8586
8851
|
const now = Date.now();
|
|
@@ -8603,7 +8868,7 @@
|
|
|
8603
8868
|
(this._direction === 'reverse' && this._dataIndex <= this._minIndex)) {
|
|
8604
8869
|
this._isReachEnd = true;
|
|
8605
8870
|
}
|
|
8606
|
-
this._rafId = vrender.
|
|
8871
|
+
this._rafId = vrender.global.getRequestAnimationFrame()(this._play.bind(this, false));
|
|
8607
8872
|
};
|
|
8608
8873
|
_updateDataIndex = (dataIndex) => {
|
|
8609
8874
|
this._dataIndex = dataIndex;
|
|
@@ -8612,7 +8877,7 @@
|
|
|
8612
8877
|
_playEnd = () => {
|
|
8613
8878
|
this._isPlaying = false;
|
|
8614
8879
|
this._controller.togglePlay();
|
|
8615
|
-
vrender.
|
|
8880
|
+
vrender.global.getCancelAnimationFrame()(this._rafId);
|
|
8616
8881
|
this._activeIndex = -1;
|
|
8617
8882
|
this.dispatchCustomEvent(exports.PlayerEventEnum.OnEnd);
|
|
8618
8883
|
};
|
|
@@ -8621,7 +8886,7 @@
|
|
|
8621
8886
|
return;
|
|
8622
8887
|
}
|
|
8623
8888
|
this._isPlaying = false;
|
|
8624
|
-
vrender.
|
|
8889
|
+
vrender.global.getCancelAnimationFrame()(this._rafId);
|
|
8625
8890
|
this._controller.togglePlay();
|
|
8626
8891
|
this.dispatchCustomEvent(exports.PlayerEventEnum.OnPause);
|
|
8627
8892
|
};
|
|
@@ -8732,7 +8997,7 @@
|
|
|
8732
8997
|
}
|
|
8733
8998
|
this._startTime = Date.now() - this._elapsed;
|
|
8734
8999
|
this.dispatchCustomEvent(exports.PlayerEventEnum.OnPlay);
|
|
8735
|
-
this._rafId = vrender.
|
|
9000
|
+
this._rafId = vrender.global.getRequestAnimationFrame()(this._play.bind(this));
|
|
8736
9001
|
};
|
|
8737
9002
|
_play = () => {
|
|
8738
9003
|
this._elapsed = Date.now() - this._startTime;
|
|
@@ -8742,11 +9007,11 @@
|
|
|
8742
9007
|
this._playEnd();
|
|
8743
9008
|
return;
|
|
8744
9009
|
}
|
|
8745
|
-
this._rafId = vrender.
|
|
9010
|
+
this._rafId = vrender.global.getRequestAnimationFrame()(this._play.bind(this));
|
|
8746
9011
|
};
|
|
8747
9012
|
_playEnd = () => {
|
|
8748
9013
|
this._isPlaying = false;
|
|
8749
|
-
vrender.
|
|
9014
|
+
vrender.global.getCancelAnimationFrame()(this._rafId);
|
|
8750
9015
|
this._controller.togglePlay();
|
|
8751
9016
|
this.dispatchCustomEvent(exports.PlayerEventEnum.OnEnd);
|
|
8752
9017
|
};
|
|
@@ -8756,7 +9021,7 @@
|
|
|
8756
9021
|
}
|
|
8757
9022
|
this._isPlaying = false;
|
|
8758
9023
|
this._elapsed = Date.now() - this._startTime;
|
|
8759
|
-
vrender.
|
|
9024
|
+
vrender.global.getCancelAnimationFrame()(this._rafId);
|
|
8760
9025
|
this._controller.togglePlay();
|
|
8761
9026
|
this.dispatchCustomEvent(exports.PlayerEventEnum.OnPause);
|
|
8762
9027
|
};
|
|
@@ -9501,7 +9766,7 @@
|
|
|
9501
9766
|
}
|
|
9502
9767
|
}
|
|
9503
9768
|
|
|
9504
|
-
const version = "0.14.0-alpha.
|
|
9769
|
+
const version = "0.14.0-alpha.4";
|
|
9505
9770
|
|
|
9506
9771
|
exports.AbstractComponent = AbstractComponent;
|
|
9507
9772
|
exports.BasePlayer = BasePlayer;
|