@visactor/vrender-components 0.22.11 → 0.22.13
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/tick-data/continuous.js +17 -15
- package/cjs/axis/tick-data/continuous.js.map +1 -1
- package/cjs/axis/tick-data/discrete/linear.js +21 -14
- package/cjs/axis/tick-data/discrete/linear.js.map +1 -1
- package/cjs/axis/tick-data/util.js +14 -8
- package/cjs/axis/tick-data/util.js.map +1 -1
- package/cjs/axis/util.js +1 -2
- package/cjs/brush/brush.d.ts +1 -5
- package/cjs/brush/brush.js +11 -13
- package/cjs/brush/brush.js.map +1 -1
- package/cjs/brush/type.js +2 -1
- package/cjs/core/base.d.ts +5 -1
- package/cjs/core/base.js +11 -0
- package/cjs/core/base.js.map +1 -1
- package/cjs/data-zoom/data-zoom.d.ts +1 -5
- package/cjs/data-zoom/data-zoom.js +7 -8
- package/cjs/data-zoom/data-zoom.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/dist/index.es.js +119 -103
- package/es/axis/tick-data/continuous.js +15 -13
- package/es/axis/tick-data/continuous.js.map +1 -1
- package/es/axis/tick-data/discrete/linear.js +22 -14
- package/es/axis/tick-data/discrete/linear.js.map +1 -1
- package/es/axis/tick-data/util.js +15 -9
- package/es/axis/tick-data/util.js.map +1 -1
- package/es/axis/util.js +1 -2
- package/es/brush/brush.d.ts +1 -5
- package/es/brush/brush.js +11 -13
- package/es/brush/brush.js.map +1 -1
- package/es/brush/type.js +2 -1
- package/es/core/base.d.ts +5 -1
- package/es/core/base.js +11 -0
- package/es/core/base.js.map +1 -1
- package/es/data-zoom/data-zoom.d.ts +1 -5
- package/es/data-zoom/data-zoom.js +7 -8
- package/es/data-zoom/data-zoom.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/package.json +3 -3
package/dist/index.es.js
CHANGED
|
@@ -14089,6 +14089,13 @@ class AbstractComponent extends Group {
|
|
|
14089
14089
|
changeEvent.manager = (_a = this.stage) === null || _a === void 0 ? void 0 : _a.eventSystem.manager;
|
|
14090
14090
|
this.dispatchEvent(changeEvent);
|
|
14091
14091
|
}
|
|
14092
|
+
eventPosToStagePos(e) {
|
|
14093
|
+
var _a, _b;
|
|
14094
|
+
const result = { x: 0, y: 0 };
|
|
14095
|
+
const stagePoints = (_b = (_a = this.stage) === null || _a === void 0 ? void 0 : _a.eventPointTransform(e)) !== null && _b !== void 0 ? _b : { x: 0, y: 0 };
|
|
14096
|
+
this.globalTransMatrix.transformPoint(stagePoints, result);
|
|
14097
|
+
return result;
|
|
14098
|
+
}
|
|
14092
14099
|
}
|
|
14093
14100
|
|
|
14094
14101
|
const MathPickerContribution = Symbol.for("MathPickerContribution");
|
|
@@ -19431,7 +19438,7 @@ const calculateFlushPos = (basePosition, size, rangePosition, otherEnd) => {
|
|
|
19431
19438
|
: rangePosition - size;
|
|
19432
19439
|
};
|
|
19433
19440
|
const getCartesianLabelBounds = (scale, domain, op) => {
|
|
19434
|
-
var _a;
|
|
19441
|
+
var _a, _b, _c;
|
|
19435
19442
|
const { labelStyle, axisOrientType, labelFlush, labelFormatter, startAngle = 0 } = op;
|
|
19436
19443
|
let labelAngle = (_a = labelStyle.angle) !== null && _a !== void 0 ? _a : 0;
|
|
19437
19444
|
if (labelStyle.direction === 'vertical') {
|
|
@@ -19452,9 +19459,14 @@ const getCartesianLabelBounds = (scale, domain, op) => {
|
|
|
19452
19459
|
}
|
|
19453
19460
|
const textMeasure = initTextMeasure(labelStyle);
|
|
19454
19461
|
const range = scale.range();
|
|
19455
|
-
|
|
19456
|
-
|
|
19462
|
+
let labelBoundsList = [];
|
|
19463
|
+
for (let i = 0; i < domain.length; i++) {
|
|
19464
|
+
const v = domain[i];
|
|
19457
19465
|
const str = labelFormatter ? labelFormatter(v) : `${v}`;
|
|
19466
|
+
if (isPlainObject(str)) {
|
|
19467
|
+
labelBoundsList = undefined;
|
|
19468
|
+
break;
|
|
19469
|
+
}
|
|
19458
19470
|
const { width, height } = textMeasure.quickMeasure(str);
|
|
19459
19471
|
const textWidth = Math.max(width, MIN_TICK_GAP);
|
|
19460
19472
|
const textHeight = Math.max(height, MIN_TICK_GAP);
|
|
@@ -19471,7 +19483,7 @@ const getCartesianLabelBounds = (scale, domain, op) => {
|
|
|
19471
19483
|
textX = calculateFlushPos(baseTextX, textWidth, range[range.length - 1], range[0]);
|
|
19472
19484
|
}
|
|
19473
19485
|
else {
|
|
19474
|
-
align = (
|
|
19486
|
+
align = (_b = labelStyle.textAlign) !== null && _b !== void 0 ? _b : 'center';
|
|
19475
19487
|
}
|
|
19476
19488
|
if (align === 'right') {
|
|
19477
19489
|
textX -= textWidth;
|
|
@@ -19487,7 +19499,7 @@ const getCartesianLabelBounds = (scale, domain, op) => {
|
|
|
19487
19499
|
textY = calculateFlushPos(baseTextY, textHeight, range[range.length - 1], range[0]);
|
|
19488
19500
|
}
|
|
19489
19501
|
else {
|
|
19490
|
-
baseline = (
|
|
19502
|
+
baseline = (_c = labelStyle.textBaseline) !== null && _c !== void 0 ? _c : 'middle';
|
|
19491
19503
|
}
|
|
19492
19504
|
if (baseline === 'bottom') {
|
|
19493
19505
|
textY -= textHeight;
|
|
@@ -19499,8 +19511,8 @@ const getCartesianLabelBounds = (scale, domain, op) => {
|
|
|
19499
19511
|
if (labelAngle) {
|
|
19500
19512
|
bounds.rotate(labelAngle, baseTextX, baseTextY);
|
|
19501
19513
|
}
|
|
19502
|
-
|
|
19503
|
-
}
|
|
19514
|
+
labelBoundsList.push(bounds);
|
|
19515
|
+
}
|
|
19504
19516
|
return labelBoundsList;
|
|
19505
19517
|
};
|
|
19506
19518
|
const isAxisHorizontal = (axisOrientType) => {
|
|
@@ -19565,7 +19577,7 @@ function forceItemVisible(sourceItem, items, check, comparator, inverse = false)
|
|
|
19565
19577
|
}
|
|
19566
19578
|
const DEFAULT_CONTINUOUS_TICK_COUNT = 5;
|
|
19567
19579
|
const continuousTicks = (scale, op) => {
|
|
19568
|
-
var _a, _b;
|
|
19580
|
+
var _a, _b, _c, _d;
|
|
19569
19581
|
if (!isContinuous(scale.type)) {
|
|
19570
19582
|
return convertDomainToTickData(scale.domain());
|
|
19571
19583
|
}
|
|
@@ -19628,44 +19640,46 @@ const continuousTicks = (scale, op) => {
|
|
|
19628
19640
|
samplingScaleTicks.push(tick);
|
|
19629
19641
|
}
|
|
19630
19642
|
});
|
|
19631
|
-
items = getCartesianLabelBounds(scale, samplingScaleTicks, op).map((bounds, i) => ({
|
|
19643
|
+
items = (_c = getCartesianLabelBounds(scale, samplingScaleTicks, op)) === null || _c === void 0 ? void 0 : _c.map((bounds, i) => ({
|
|
19632
19644
|
AABBBounds: bounds,
|
|
19633
19645
|
value: samplingScaleTicks[i]
|
|
19634
19646
|
}));
|
|
19635
19647
|
}
|
|
19636
19648
|
else {
|
|
19637
|
-
items = getCartesianLabelBounds(scale, scaleTicks, op).map((bounds, i) => ({
|
|
19649
|
+
items = (_d = getCartesianLabelBounds(scale, scaleTicks, op)) === null || _d === void 0 ? void 0 : _d.map((bounds, i) => ({
|
|
19638
19650
|
AABBBounds: bounds,
|
|
19639
19651
|
value: scaleTicks[i]
|
|
19640
19652
|
}));
|
|
19641
19653
|
}
|
|
19642
|
-
|
|
19643
|
-
|
|
19644
|
-
|
|
19645
|
-
|
|
19646
|
-
items
|
|
19647
|
-
|
|
19648
|
-
const checkFirst = op.labelFirstVisible;
|
|
19649
|
-
let checkLast = op.labelLastVisible;
|
|
19650
|
-
if (textIntersect(firstSourceItem, lastSourceItem, labelGap)) {
|
|
19651
|
-
if (items.includes(lastSourceItem) && items.length > 1 && checkFirst && checkLast) {
|
|
19652
|
-
items.splice(items.indexOf(lastSourceItem), 1);
|
|
19653
|
-
checkLast = false;
|
|
19654
|
+
if (items) {
|
|
19655
|
+
const firstSourceItem = items[0];
|
|
19656
|
+
const lastSourceItem = last(items);
|
|
19657
|
+
const samplingMethod = breakData && breakData() ? methods.greedy : methods.parity;
|
|
19658
|
+
while (items.length >= 3 && hasOverlap(items, labelGap)) {
|
|
19659
|
+
items = samplingMethod(items, labelGap);
|
|
19654
19660
|
}
|
|
19655
|
-
|
|
19656
|
-
|
|
19657
|
-
|
|
19658
|
-
|
|
19659
|
-
|
|
19660
|
-
|
|
19661
|
-
|
|
19662
|
-
ticks.pop();
|
|
19661
|
+
const checkFirst = op.labelFirstVisible;
|
|
19662
|
+
let checkLast = op.labelLastVisible;
|
|
19663
|
+
if (textIntersect(firstSourceItem, lastSourceItem, labelGap)) {
|
|
19664
|
+
if (items.includes(lastSourceItem) && items.length > 1 && checkFirst && checkLast) {
|
|
19665
|
+
items.splice(items.indexOf(lastSourceItem), 1);
|
|
19666
|
+
checkLast = false;
|
|
19667
|
+
}
|
|
19663
19668
|
}
|
|
19664
|
-
|
|
19665
|
-
|
|
19669
|
+
forceItemVisible(firstSourceItem, items, checkFirst, (item) => textIntersect(item, firstSourceItem, labelGap));
|
|
19670
|
+
forceItemVisible(lastSourceItem, items, checkLast, (item) => textIntersect(item, lastSourceItem, labelGap) ||
|
|
19671
|
+
(checkFirst && item !== firstSourceItem ? textIntersect(item, firstSourceItem, labelGap) : false), true);
|
|
19672
|
+
const ticks = items.map(item => item.value);
|
|
19673
|
+
if (ticks.length < 3 && labelFlush) {
|
|
19674
|
+
if (ticks.length > 1) {
|
|
19675
|
+
ticks.pop();
|
|
19676
|
+
}
|
|
19677
|
+
if (last(ticks) !== last(scaleTicks)) {
|
|
19678
|
+
ticks.push(last(scaleTicks));
|
|
19679
|
+
}
|
|
19666
19680
|
}
|
|
19681
|
+
scaleTicks = ticks;
|
|
19667
19682
|
}
|
|
19668
|
-
scaleTicks = ticks;
|
|
19669
19683
|
}
|
|
19670
19684
|
}
|
|
19671
19685
|
return convertDomainToTickData(scaleTicks);
|
|
@@ -19688,12 +19702,13 @@ const methods = {
|
|
|
19688
19702
|
|
|
19689
19703
|
const getOneDimensionalLabelBounds = (scale, domain, op, isHorizontal) => {
|
|
19690
19704
|
const labelBoundsList = getCartesianLabelBounds(scale, domain, op);
|
|
19691
|
-
return labelBoundsList
|
|
19692
|
-
|
|
19693
|
-
|
|
19694
|
-
|
|
19695
|
-
|
|
19696
|
-
|
|
19705
|
+
return (labelBoundsList &&
|
|
19706
|
+
labelBoundsList.map(bounds => {
|
|
19707
|
+
if (isHorizontal) {
|
|
19708
|
+
return [bounds.x1, bounds.x2, bounds.width()];
|
|
19709
|
+
}
|
|
19710
|
+
return [bounds.y1, bounds.y2, bounds.height()];
|
|
19711
|
+
}));
|
|
19697
19712
|
};
|
|
19698
19713
|
const boundsOverlap = (prevBounds, nextBounds, gap = 0) => {
|
|
19699
19714
|
return Math.max(prevBounds[0], nextBounds[0]) - gap / 2 <= Math.min(prevBounds[1], nextBounds[1]) + gap / 2;
|
|
@@ -19739,47 +19754,51 @@ const linearDiscreteTicks = (scale, op) => {
|
|
|
19739
19754
|
const rangeStart = minInArray(range);
|
|
19740
19755
|
const rangeEnd = maxInArray(range);
|
|
19741
19756
|
if (domain.length <= rangeSize / fontSize) {
|
|
19742
|
-
const incrementUnit = (rangeEnd - rangeStart) / domain.length;
|
|
19743
19757
|
const labelBoundsList = getOneDimensionalLabelBounds(scale, domain, op, isHorizontal);
|
|
19744
|
-
|
|
19745
|
-
|
|
19746
|
-
|
|
19747
|
-
|
|
19748
|
-
|
|
19749
|
-
|
|
19758
|
+
if (labelBoundsList) {
|
|
19759
|
+
const minBoundsLength = Math.min(...labelBoundsList.map(bounds => bounds[2]));
|
|
19760
|
+
const incrementUnit = (rangeEnd - rangeStart) / domain.length;
|
|
19761
|
+
const stepResult = getStep$1(domain, labelBoundsList, labelGap, op.labelLastVisible, Math.floor(minBoundsLength / incrementUnit), false);
|
|
19762
|
+
scaleTicks = scale.stepTicks(stepResult.step);
|
|
19763
|
+
if (op.labelLastVisible) {
|
|
19764
|
+
if (stepResult.delCount) {
|
|
19765
|
+
scaleTicks = scaleTicks.slice(0, scaleTicks.length - stepResult.delCount);
|
|
19766
|
+
}
|
|
19767
|
+
scaleTicks.push(domain[domain.length - 1]);
|
|
19750
19768
|
}
|
|
19751
|
-
scaleTicks.push(domain[domain.length - 1]);
|
|
19752
19769
|
}
|
|
19753
19770
|
}
|
|
19754
19771
|
else {
|
|
19755
19772
|
const tempDomain = [domain[0], domain[Math.floor(domain.length / 2)], domain[domain.length - 1]];
|
|
19756
19773
|
const tempList = getOneDimensionalLabelBounds(scale, tempDomain, op, isHorizontal);
|
|
19757
|
-
|
|
19758
|
-
|
|
19759
|
-
|
|
19760
|
-
maxBounds
|
|
19761
|
-
|
|
19762
|
-
|
|
19763
|
-
|
|
19764
|
-
maxBounds
|
|
19765
|
-
|
|
19766
|
-
|
|
19767
|
-
|
|
19768
|
-
|
|
19769
|
-
|
|
19770
|
-
|
|
19771
|
-
|
|
19772
|
-
(
|
|
19773
|
-
|
|
19774
|
-
|
|
19775
|
-
|
|
19776
|
-
|
|
19774
|
+
if (tempList) {
|
|
19775
|
+
let maxBounds = null;
|
|
19776
|
+
tempList.forEach(current => {
|
|
19777
|
+
if (!maxBounds) {
|
|
19778
|
+
maxBounds = current;
|
|
19779
|
+
return;
|
|
19780
|
+
}
|
|
19781
|
+
if (maxBounds[2] < current[2]) {
|
|
19782
|
+
maxBounds = current;
|
|
19783
|
+
}
|
|
19784
|
+
});
|
|
19785
|
+
const step = rangeEnd - rangeStart - labelGap > 0
|
|
19786
|
+
? Math.ceil((domain.length * (labelGap + maxBounds[2])) / (rangeEnd - rangeStart - labelGap))
|
|
19787
|
+
: domain.length - 1;
|
|
19788
|
+
scaleTicks = scale.stepTicks(step);
|
|
19789
|
+
if (op.labelLastVisible &&
|
|
19790
|
+
(!scaleTicks.length || scaleTicks[scaleTicks.length - 1] !== domain[domain.length - 1])) {
|
|
19791
|
+
if (scaleTicks.length &&
|
|
19792
|
+
Math.abs(scale.scale(scaleTicks[scaleTicks.length - 1]) - scale.scale(domain[domain.length - 1])) <
|
|
19793
|
+
maxBounds[2]) {
|
|
19794
|
+
scaleTicks = scaleTicks.slice(0, -1);
|
|
19795
|
+
}
|
|
19796
|
+
scaleTicks.push(domain[domain.length - 1]);
|
|
19777
19797
|
}
|
|
19778
|
-
scaleTicks.push(domain[domain.length - 1]);
|
|
19779
19798
|
}
|
|
19780
19799
|
}
|
|
19781
19800
|
}
|
|
19782
|
-
|
|
19801
|
+
if (isNil(scaleTicks)) {
|
|
19783
19802
|
scaleTicks = scale.domain();
|
|
19784
19803
|
}
|
|
19785
19804
|
return convertDomainToTickData(scaleTicks);
|
|
@@ -23386,10 +23405,6 @@ class DataZoom extends AbstractComponent {
|
|
|
23386
23405
|
this.state.end = end;
|
|
23387
23406
|
shouldRender && this.setAttributes({ start, end });
|
|
23388
23407
|
}
|
|
23389
|
-
eventPosToStagePos(e) {
|
|
23390
|
-
var _a, _b;
|
|
23391
|
-
return (_b = (_a = this.stage) === null || _a === void 0 ? void 0 : _a.eventPointTransform(e)) !== null && _b !== void 0 ? _b : { x: 0, y: 0 };
|
|
23392
|
-
}
|
|
23393
23408
|
_clearDragEvents() {
|
|
23394
23409
|
const evtTarget = vglobal.env === 'browser' ? vglobal : this.stage;
|
|
23395
23410
|
const triggers = getEndTriggersOfDrag();
|
|
@@ -23573,10 +23588,12 @@ class DataZoom extends AbstractComponent {
|
|
|
23573
23588
|
if (new Bounds().set(x1, y1, x2, y2).intersects(endTextBounds)) {
|
|
23574
23589
|
const direction = this.attribute.orient === 'bottom' || this.attribute.orient === 'right' ? -1 : 1;
|
|
23575
23590
|
if (this._isHorizontal) {
|
|
23576
|
-
|
|
23591
|
+
const boundsYDiff = Math.abs(endTextBounds.y1 - endTextBounds.y2);
|
|
23592
|
+
this._startText.setAttribute('dy', startTextDy + direction * (Number.isFinite(boundsYDiff) ? boundsYDiff : 0));
|
|
23577
23593
|
}
|
|
23578
23594
|
else {
|
|
23579
|
-
|
|
23595
|
+
const boundsXDiff = Math.abs(endTextBounds.x1 - endTextBounds.x2);
|
|
23596
|
+
this._startText.setAttribute('dx', startTextDx + direction * (Number.isFinite(boundsXDiff) ? boundsXDiff : 0));
|
|
23580
23597
|
}
|
|
23581
23598
|
}
|
|
23582
23599
|
else {
|
|
@@ -23660,26 +23677,26 @@ class DataZoom extends AbstractComponent {
|
|
|
23660
23677
|
const group = this.createOrUpdateChild('dataZoom-container', {}, 'group');
|
|
23661
23678
|
this._container = group;
|
|
23662
23679
|
this._background = group.createOrUpdateChild('background', Object.assign(Object.assign({ x: position.x, y: position.y, width,
|
|
23663
|
-
height, cursor: brushSelect ? 'crosshair' : 'auto' }, backgroundStyle), { pickable: zoomLock ? false : (_c = backgroundStyle.pickable) !== null && _c !== void 0 ? _c : true }), 'rect');
|
|
23680
|
+
height, cursor: brushSelect ? 'crosshair' : 'auto' }, backgroundStyle), { pickable: zoomLock ? false : ((_c = backgroundStyle.pickable) !== null && _c !== void 0 ? _c : true) }), 'rect');
|
|
23664
23681
|
((_d = backgroundChartStyle.line) === null || _d === void 0 ? void 0 : _d.visible) && this.setPreviewAttributes('line', group);
|
|
23665
23682
|
((_e = backgroundChartStyle.area) === null || _e === void 0 ? void 0 : _e.visible) && this.setPreviewAttributes('area', group);
|
|
23666
23683
|
brushSelect && this.renderDragMask();
|
|
23667
23684
|
if (this._isHorizontal) {
|
|
23668
|
-
this._selectedBackground = group.createOrUpdateChild('selectedBackground', Object.assign(Object.assign({ x: position.x + start * width, y: position.y, width: (end - start) * width, height: height, cursor: brushSelect ? 'crosshair' : 'move' }, selectedBackgroundStyle), { pickable: zoomLock ? false : (_f = selectedBackgroundChartStyle.pickable) !== null && _f !== void 0 ? _f : true }), 'rect');
|
|
23685
|
+
this._selectedBackground = group.createOrUpdateChild('selectedBackground', Object.assign(Object.assign({ x: position.x + start * width, y: position.y, width: (end - start) * width, height: height, cursor: brushSelect ? 'crosshair' : 'move' }, selectedBackgroundStyle), { pickable: zoomLock ? false : ((_f = selectedBackgroundChartStyle.pickable) !== null && _f !== void 0 ? _f : true) }), 'rect');
|
|
23669
23686
|
}
|
|
23670
23687
|
else {
|
|
23671
|
-
this._selectedBackground = group.createOrUpdateChild('selectedBackground', Object.assign(Object.assign({ x: position.x, y: position.y + start * height, width, height: (end - start) * height, cursor: brushSelect ? 'crosshair' : 'move' }, selectedBackgroundStyle), { pickable: zoomLock ? false : (_g = selectedBackgroundStyle.pickable) !== null && _g !== void 0 ? _g : true }), 'rect');
|
|
23688
|
+
this._selectedBackground = group.createOrUpdateChild('selectedBackground', Object.assign(Object.assign({ x: position.x, y: position.y + start * height, width, height: (end - start) * height, cursor: brushSelect ? 'crosshair' : 'move' }, selectedBackgroundStyle), { pickable: zoomLock ? false : ((_g = selectedBackgroundStyle.pickable) !== null && _g !== void 0 ? _g : true) }), 'rect');
|
|
23672
23689
|
}
|
|
23673
23690
|
((_h = selectedBackgroundChartStyle.line) === null || _h === void 0 ? void 0 : _h.visible) && this.setSelectedPreviewAttributes('line', group);
|
|
23674
23691
|
((_j = selectedBackgroundChartStyle.area) === null || _j === void 0 ? void 0 : _j.visible) && this.setSelectedPreviewAttributes('area', group);
|
|
23675
23692
|
if (this._isHorizontal) {
|
|
23676
23693
|
if (middleHandlerStyle.visible) {
|
|
23677
23694
|
const middleHandlerBackgroundSize = ((_k = middleHandlerStyle.background) === null || _k === void 0 ? void 0 : _k.size) || 10;
|
|
23678
|
-
this._middleHandlerRect = group.createOrUpdateChild('middleHandlerRect', Object.assign(Object.assign({ x: position.x + start * width, y: position.y - middleHandlerBackgroundSize, width: (end - start) * width, height: middleHandlerBackgroundSize }, (_l = middleHandlerStyle.background) === null || _l === void 0 ? void 0 : _l.style), { pickable: zoomLock ? false : (_p = (_o = (_m = middleHandlerStyle.background) === null || _m === void 0 ? void 0 : _m.style) === null || _o === void 0 ? void 0 : _o.pickable) !== null && _p !== void 0 ? _p : true }), 'rect');
|
|
23679
|
-
this._middleHandlerSymbol = group.createOrUpdateChild('middleHandlerSymbol', Object.assign(Object.assign({ x: position.x + ((start + end) / 2) * width, y: position.y - middleHandlerBackgroundSize / 2, strokeBoundsBuffer: 0, angle: 0, symbolType: (_r = (_q = middleHandlerStyle.icon) === null || _q === void 0 ? void 0 : _q.symbolType) !== null && _r !== void 0 ? _r : 'square' }, middleHandlerStyle.icon), { pickable: zoomLock ? false : (_s = middleHandlerStyle.icon.pickable) !== null && _s !== void 0 ? _s : true }), 'symbol');
|
|
23695
|
+
this._middleHandlerRect = group.createOrUpdateChild('middleHandlerRect', Object.assign(Object.assign({ x: position.x + start * width, y: position.y - middleHandlerBackgroundSize, width: (end - start) * width, height: middleHandlerBackgroundSize }, (_l = middleHandlerStyle.background) === null || _l === void 0 ? void 0 : _l.style), { pickable: zoomLock ? false : ((_p = (_o = (_m = middleHandlerStyle.background) === null || _m === void 0 ? void 0 : _m.style) === null || _o === void 0 ? void 0 : _o.pickable) !== null && _p !== void 0 ? _p : true) }), 'rect');
|
|
23696
|
+
this._middleHandlerSymbol = group.createOrUpdateChild('middleHandlerSymbol', Object.assign(Object.assign({ x: position.x + ((start + end) / 2) * width, y: position.y - middleHandlerBackgroundSize / 2, strokeBoundsBuffer: 0, angle: 0, symbolType: (_r = (_q = middleHandlerStyle.icon) === null || _q === void 0 ? void 0 : _q.symbolType) !== null && _r !== void 0 ? _r : 'square' }, middleHandlerStyle.icon), { pickable: zoomLock ? false : ((_s = middleHandlerStyle.icon.pickable) !== null && _s !== void 0 ? _s : true) }), 'symbol');
|
|
23680
23697
|
}
|
|
23681
|
-
this._startHandler = group.createOrUpdateChild('startHandler', Object.assign(Object.assign(Object.assign({ x: position.x + start * width, y: position.y + height / 2, size: height, symbolType: (_t = startHandlerStyle.symbolType) !== null && _t !== void 0 ? _t : 'square' }, DEFAULT_HANDLER_ATTR_MAP.horizontal), startHandlerStyle), { pickable: zoomLock ? false : (_u = startHandlerStyle.pickable) !== null && _u !== void 0 ? _u : true }), 'symbol');
|
|
23682
|
-
this._endHandler = group.createOrUpdateChild('endHandler', Object.assign(Object.assign(Object.assign({ x: position.x + end * width, y: position.y + height / 2, size: height, symbolType: (_v = endHandlerStyle.symbolType) !== null && _v !== void 0 ? _v : 'square' }, DEFAULT_HANDLER_ATTR_MAP.horizontal), endHandlerStyle), { pickable: zoomLock ? false : (_w = endHandlerStyle.pickable) !== null && _w !== void 0 ? _w : true }), 'symbol');
|
|
23698
|
+
this._startHandler = group.createOrUpdateChild('startHandler', Object.assign(Object.assign(Object.assign({ x: position.x + start * width, y: position.y + height / 2, size: height, symbolType: (_t = startHandlerStyle.symbolType) !== null && _t !== void 0 ? _t : 'square' }, DEFAULT_HANDLER_ATTR_MAP.horizontal), startHandlerStyle), { pickable: zoomLock ? false : ((_u = startHandlerStyle.pickable) !== null && _u !== void 0 ? _u : true) }), 'symbol');
|
|
23699
|
+
this._endHandler = group.createOrUpdateChild('endHandler', Object.assign(Object.assign(Object.assign({ x: position.x + end * width, y: position.y + height / 2, size: height, symbolType: (_v = endHandlerStyle.symbolType) !== null && _v !== void 0 ? _v : 'square' }, DEFAULT_HANDLER_ATTR_MAP.horizontal), endHandlerStyle), { pickable: zoomLock ? false : ((_w = endHandlerStyle.pickable) !== null && _w !== void 0 ? _w : true) }), 'symbol');
|
|
23683
23700
|
const startHandlerWidth = Math.max(this._startHandler.AABBBounds.width(), startHandlerMinSize);
|
|
23684
23701
|
const startHandlerHeight = Math.max(this._startHandler.AABBBounds.height(), startHandlerMinSize);
|
|
23685
23702
|
const endHandlerWidth = Math.max(this._endHandler.AABBBounds.width(), endHandlerMinSize);
|
|
@@ -23690,13 +23707,13 @@ class DataZoom extends AbstractComponent {
|
|
|
23690
23707
|
else {
|
|
23691
23708
|
if (middleHandlerStyle.visible) {
|
|
23692
23709
|
const middleHandlerBackgroundSize = ((_x = middleHandlerStyle.background) === null || _x === void 0 ? void 0 : _x.size) || 10;
|
|
23693
|
-
this._middleHandlerRect = group.createOrUpdateChild('middleHandlerRect', Object.assign(Object.assign({ x: orient === 'left' ? position.x - middleHandlerBackgroundSize : position.x + width, y: position.y + start * height, width: middleHandlerBackgroundSize, height: (end - start) * height }, (_y = middleHandlerStyle.background) === null || _y === void 0 ? void 0 : _y.style), { pickable: zoomLock ? false : (_1 = (_0 = (_z = middleHandlerStyle.background) === null || _z === void 0 ? void 0 : _z.style) === null || _0 === void 0 ? void 0 : _0.pickable) !== null && _1 !== void 0 ? _1 : true }), 'rect');
|
|
23710
|
+
this._middleHandlerRect = group.createOrUpdateChild('middleHandlerRect', Object.assign(Object.assign({ x: orient === 'left' ? position.x - middleHandlerBackgroundSize : position.x + width, y: position.y + start * height, width: middleHandlerBackgroundSize, height: (end - start) * height }, (_y = middleHandlerStyle.background) === null || _y === void 0 ? void 0 : _y.style), { pickable: zoomLock ? false : ((_1 = (_0 = (_z = middleHandlerStyle.background) === null || _z === void 0 ? void 0 : _z.style) === null || _0 === void 0 ? void 0 : _0.pickable) !== null && _1 !== void 0 ? _1 : true) }), 'rect');
|
|
23694
23711
|
this._middleHandlerSymbol = group.createOrUpdateChild('middleHandlerSymbol', Object.assign(Object.assign({ x: orient === 'left'
|
|
23695
23712
|
? position.x - middleHandlerBackgroundSize / 2
|
|
23696
|
-
: position.x + width + middleHandlerBackgroundSize / 2, y: position.y + ((start + end) / 2) * height, angle: 90 * (Math.PI / 180), symbolType: (_3 = (_2 = middleHandlerStyle.icon) === null || _2 === void 0 ? void 0 : _2.symbolType) !== null && _3 !== void 0 ? _3 : 'square', strokeBoundsBuffer: 0 }, middleHandlerStyle.icon), { pickable: zoomLock ? false : (_5 = (_4 = middleHandlerStyle.icon) === null || _4 === void 0 ? void 0 : _4.pickable) !== null && _5 !== void 0 ? _5 : true }), 'symbol');
|
|
23713
|
+
: position.x + width + middleHandlerBackgroundSize / 2, y: position.y + ((start + end) / 2) * height, angle: 90 * (Math.PI / 180), symbolType: (_3 = (_2 = middleHandlerStyle.icon) === null || _2 === void 0 ? void 0 : _2.symbolType) !== null && _3 !== void 0 ? _3 : 'square', strokeBoundsBuffer: 0 }, middleHandlerStyle.icon), { pickable: zoomLock ? false : ((_5 = (_4 = middleHandlerStyle.icon) === null || _4 === void 0 ? void 0 : _4.pickable) !== null && _5 !== void 0 ? _5 : true) }), 'symbol');
|
|
23697
23714
|
}
|
|
23698
|
-
this._startHandler = group.createOrUpdateChild('startHandler', Object.assign(Object.assign(Object.assign({ x: position.x + width / 2, y: position.y + start * height, size: width, symbolType: (_6 = startHandlerStyle.symbolType) !== null && _6 !== void 0 ? _6 : 'square' }, DEFAULT_HANDLER_ATTR_MAP.vertical), startHandlerStyle), { pickable: zoomLock ? false : (_7 = startHandlerStyle.pickable) !== null && _7 !== void 0 ? _7 : true }), 'symbol');
|
|
23699
|
-
this._endHandler = group.createOrUpdateChild('endHandler', Object.assign(Object.assign(Object.assign({ x: position.x + width / 2, y: position.y + end * height, size: width, symbolType: (_8 = endHandlerStyle.symbolType) !== null && _8 !== void 0 ? _8 : 'square' }, DEFAULT_HANDLER_ATTR_MAP.vertical), endHandlerStyle), { pickable: zoomLock ? false : (_9 = endHandlerStyle.pickable) !== null && _9 !== void 0 ? _9 : true }), 'symbol');
|
|
23715
|
+
this._startHandler = group.createOrUpdateChild('startHandler', Object.assign(Object.assign(Object.assign({ x: position.x + width / 2, y: position.y + start * height, size: width, symbolType: (_6 = startHandlerStyle.symbolType) !== null && _6 !== void 0 ? _6 : 'square' }, DEFAULT_HANDLER_ATTR_MAP.vertical), startHandlerStyle), { pickable: zoomLock ? false : ((_7 = startHandlerStyle.pickable) !== null && _7 !== void 0 ? _7 : true) }), 'symbol');
|
|
23716
|
+
this._endHandler = group.createOrUpdateChild('endHandler', Object.assign(Object.assign(Object.assign({ x: position.x + width / 2, y: position.y + end * height, size: width, symbolType: (_8 = endHandlerStyle.symbolType) !== null && _8 !== void 0 ? _8 : 'square' }, DEFAULT_HANDLER_ATTR_MAP.vertical), endHandlerStyle), { pickable: zoomLock ? false : ((_9 = endHandlerStyle.pickable) !== null && _9 !== void 0 ? _9 : true) }), 'symbol');
|
|
23700
23717
|
const startHandlerWidth = Math.max(this._startHandler.AABBBounds.width(), startHandlerMinSize);
|
|
23701
23718
|
const startHandlerHeight = Math.max(this._startHandler.AABBBounds.height(), startHandlerMinSize);
|
|
23702
23719
|
const endHandlerWidth = Math.max(this._endHandler.AABBBounds.width(), endHandlerMinSize);
|
|
@@ -29860,6 +29877,7 @@ class Brush extends AbstractComponent {
|
|
|
29860
29877
|
constructor(attributes, options) {
|
|
29861
29878
|
super((options === null || options === void 0 ? void 0 : options.skipDefault) ? attributes : merge({}, Brush.defaultAttributes, attributes));
|
|
29862
29879
|
this.name = 'brush';
|
|
29880
|
+
this._activeBrushState = false;
|
|
29863
29881
|
this._activeDrawState = false;
|
|
29864
29882
|
this._cacheDrawPoints = [];
|
|
29865
29883
|
this._activeMoveState = false;
|
|
@@ -29870,13 +29888,6 @@ class Brush extends AbstractComponent {
|
|
|
29870
29888
|
this._brushMaskAABBBoundsDict = {};
|
|
29871
29889
|
this._firstUpdate = true;
|
|
29872
29890
|
this._onBrushStart = (e) => {
|
|
29873
|
-
if (this._outOfInteractiveRange(e)) {
|
|
29874
|
-
if (!this._isEmptyMask()) {
|
|
29875
|
-
this._clearMask();
|
|
29876
|
-
this._dispatchBrushEvent(IOperateType.brushClear, e);
|
|
29877
|
-
}
|
|
29878
|
-
return;
|
|
29879
|
-
}
|
|
29880
29891
|
const { updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger, endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger, brushMoved = true } = this.attribute;
|
|
29881
29892
|
array(updateTrigger).forEach(t => this.stage.addEventListener(t, this._onBrushingWithDelay));
|
|
29882
29893
|
array(endTrigger).forEach(t => this.stage.addEventListener(t, this._onBrushEnd));
|
|
@@ -29940,9 +29951,7 @@ class Brush extends AbstractComponent {
|
|
|
29940
29951
|
brushMode === 'single' && this._clearMask();
|
|
29941
29952
|
this._addBrushMask();
|
|
29942
29953
|
this._dispatchBrushEvent(IOperateType.drawStart, e);
|
|
29943
|
-
|
|
29944
|
-
this._dispatchBrushEvent(IOperateType.brushActive, e);
|
|
29945
|
-
}
|
|
29954
|
+
this._activeBrushState = false;
|
|
29946
29955
|
}
|
|
29947
29956
|
_initMove(e) {
|
|
29948
29957
|
var _a, _b;
|
|
@@ -29964,7 +29973,7 @@ class Brush extends AbstractComponent {
|
|
|
29964
29973
|
_drawing(e) {
|
|
29965
29974
|
var _a;
|
|
29966
29975
|
const pos = this.eventPosToStagePos(e);
|
|
29967
|
-
const { brushType } = this.attribute;
|
|
29976
|
+
const { brushType, sizeThreshold = DEFAULT_SIZE_THRESHOLD } = this.attribute;
|
|
29968
29977
|
const cacheLength = this._cacheDrawPoints.length;
|
|
29969
29978
|
if (cacheLength > 0) {
|
|
29970
29979
|
const lastPos = (_a = this._cacheDrawPoints[this._cacheDrawPoints.length - 1]) !== null && _a !== void 0 ? _a : {};
|
|
@@ -29980,7 +29989,17 @@ class Brush extends AbstractComponent {
|
|
|
29980
29989
|
}
|
|
29981
29990
|
const maskPoints = this._computeMaskPoints();
|
|
29982
29991
|
this._operatingMask.setAttribute('points', maskPoints);
|
|
29983
|
-
this.
|
|
29992
|
+
const { x: x1, y: y1 } = this._startPos;
|
|
29993
|
+
const { x: x2, y: y2 } = this.eventPosToStagePos(e);
|
|
29994
|
+
if (Math.abs(x2 - x1) > sizeThreshold || Math.abs(y1 - y2) > sizeThreshold) {
|
|
29995
|
+
if (Object.keys(this._brushMaskAABBBoundsDict).length === 1 && !this._activeBrushState) {
|
|
29996
|
+
this._activeBrushState = true;
|
|
29997
|
+
this._dispatchBrushEvent(IOperateType.brushActive, e);
|
|
29998
|
+
}
|
|
29999
|
+
else {
|
|
30000
|
+
this._dispatchBrushEvent(IOperateType.drawing, e);
|
|
30001
|
+
}
|
|
30002
|
+
}
|
|
29984
30003
|
}
|
|
29985
30004
|
_moving(e) {
|
|
29986
30005
|
const startPos = this._cacheMovePoint;
|
|
@@ -30155,9 +30174,6 @@ class Brush extends AbstractComponent {
|
|
|
30155
30174
|
}
|
|
30156
30175
|
return false;
|
|
30157
30176
|
}
|
|
30158
|
-
eventPosToStagePos(e) {
|
|
30159
|
-
return this.stage.eventPointTransform(e);
|
|
30160
|
-
}
|
|
30161
30177
|
_dispatchBrushEvent(operateType, e) {
|
|
30162
30178
|
this._dispatchEvent(operateType, {
|
|
30163
30179
|
operateMask: this._operatingMask,
|
|
@@ -30167,7 +30183,7 @@ class Brush extends AbstractComponent {
|
|
|
30167
30183
|
}
|
|
30168
30184
|
_clearMask() {
|
|
30169
30185
|
this._brushMaskAABBBoundsDict = {};
|
|
30170
|
-
this._container.
|
|
30186
|
+
this._container.removeAllChild();
|
|
30171
30187
|
this._operatingMask = null;
|
|
30172
30188
|
}
|
|
30173
30189
|
_isEmptyMask() {
|
|
@@ -31715,6 +31731,6 @@ StoryLabelItem.defaultAttributes = {
|
|
|
31715
31731
|
theme: 'default'
|
|
31716
31732
|
};
|
|
31717
31733
|
|
|
31718
|
-
const version = "0.22.
|
|
31734
|
+
const version = "0.22.13";
|
|
31719
31735
|
|
|
31720
31736
|
export { AXIS_ELEMENT_NAME, AbstractComponent, ArcInfo, ArcLabel, ArcSegment, AxisStateValue, BasePlayer, Brush, CheckBox, CircleAxis, CircleAxisGrid, CircleCrosshair, ColorContinuousLegend, ContinuousPlayer, DEFAULT_ITEM_SPACE_COL, DEFAULT_ITEM_SPACE_ROW, DEFAULT_LABEL_SPACE, DEFAULT_PAGER_SPACE, DEFAULT_SHAPE_SIZE, DEFAULT_SHAPE_SPACE, DEFAULT_STATES$1 as DEFAULT_STATES, DEFAULT_TITLE_SPACE, DEFAULT_VALUE_SPACE, DataLabel, DataZoom, DataZoomActiveTag, DirectionEnum, DiscreteLegend, DiscretePlayer, EmptyTip, GroupTransition, IMarkAreaLabelPosition, IMarkCommonArcLabelPosition, IMarkLineLabelPosition, IMarkPointItemPosition, IOperateType, Indicator, LEGEND_ELEMENT_NAME, LabelBase, LegendEvent, LegendStateValue, LineAxis, LineAxisGrid, LineCrosshair, LineLabel, LinkPath, MarkArcArea, MarkArcLine, MarkArea, MarkLine, MarkPoint, Pager, PlayerEventEnum, PolygonCrosshair, PolygonSectorCrosshair, PopTip, Radio, RectCrosshair, RectLabel, SLIDER_ELEMENT_NAME, ScrollBar, SectorCrosshair, Segment, SizeContinuousLegend, Slider, StoryLabelItem, Switch, SymbolLabel, Tag, Timeline, Title, Tooltip, TopZIndex, VTag, WeatherBox, alignTextInLine, angle, angleLabelOrientAttribute, angleTo, cartesianTicks, clampRadian, computeOffsetForlimit, continuousTicks, contrastAccessibilityChecker, convertDomainToTickData, createTextGraphicByType, deltaXYToAngle, fuzzyEqualNumber, getAxisBreakSymbolAttrs, getCircleLabelPosition, getCirclePoints, getCircleVerticalVector, getElMap, getHorizontalPath, getMarksByName, getNoneGroupMarksByName, getPolarAngleLabelPosition, getPolygonPath, getSizeHandlerPath, getTextAlignAttrOfVerticalDir, getTextType, getVerticalCoord, getVerticalPath, hasOverlap, htmlAttributeTransform, initTextMeasure, isInRange, isPostiveXAxis, isRichText, isVisible, labelSmartInvert, length, limitShapeInBounds, linearDiscreteTicks, loadPoptip, loadScrollbar, measureTextSize, normalize, polarAngleAxisDiscreteTicks, polarTicks, reactAttributeTransform, registerArcDataLabel, registerLineDataLabel, registerMarkArcAreaAnimate, registerMarkArcLineAnimate, registerMarkAreaAnimate, registerMarkLineAnimate, registerMarkPointAnimate, registerRectDataLabel, registerSymbolDataLabel, removeRepeatPoint, richTextAttributeTransform, scale, scrollbarModule, setPoptipTheme, smartInvertStrategy, tan2AngleToAngle, textIntersect, ticks, traverseGroup, version };
|
|
@@ -41,7 +41,7 @@ function forceItemVisible(sourceItem, items, check, comparator, inverse = !1) {
|
|
|
41
41
|
export const DEFAULT_CONTINUOUS_TICK_COUNT = 5;
|
|
42
42
|
|
|
43
43
|
export const continuousTicks = (scale, op) => {
|
|
44
|
-
var _a, _b;
|
|
44
|
+
var _a, _b, _c, _d;
|
|
45
45
|
if (!isContinuous(scale.type)) return convertDomainToTickData(scale.domain());
|
|
46
46
|
const range = scale.range(), rangeSize = Math.abs(range[range.length - 1] - range[0]);
|
|
47
47
|
if (rangeSize < 2) return convertDomainToTickData([ scale.domain()[0] ]);
|
|
@@ -82,24 +82,26 @@ export const continuousTicks = (scale, op) => {
|
|
|
82
82
|
const samplingScaleTicks = [], step = Math.floor(scaleTicks.length * MIN_FONT_SIZE / rangeSize);
|
|
83
83
|
scaleTicks.forEach(((tick, index) => {
|
|
84
84
|
index % step != 0 && index !== scaleTicks.length - 1 || samplingScaleTicks.push(tick);
|
|
85
|
-
})), items = getCartesianLabelBounds(scale, samplingScaleTicks, op).map(((bounds, i) => ({
|
|
85
|
+
})), items = null === (_c = getCartesianLabelBounds(scale, samplingScaleTicks, op)) || void 0 === _c ? void 0 : _c.map(((bounds, i) => ({
|
|
86
86
|
AABBBounds: bounds,
|
|
87
87
|
value: samplingScaleTicks[i]
|
|
88
88
|
})));
|
|
89
|
-
} else items = getCartesianLabelBounds(scale, scaleTicks, op).map(((bounds, i) => ({
|
|
89
|
+
} else items = null === (_d = getCartesianLabelBounds(scale, scaleTicks, op)) || void 0 === _d ? void 0 : _d.map(((bounds, i) => ({
|
|
90
90
|
AABBBounds: bounds,
|
|
91
91
|
value: scaleTicks[i]
|
|
92
92
|
})));
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
93
|
+
if (items) {
|
|
94
|
+
const firstSourceItem = items[0], lastSourceItem = last(items), samplingMethod = breakData && breakData() ? methods.greedy : methods.parity;
|
|
95
|
+
for (;items.length >= 3 && hasOverlap(items, labelGap); ) items = samplingMethod(items, labelGap);
|
|
96
|
+
const checkFirst = op.labelFirstVisible;
|
|
97
|
+
let checkLast = op.labelLastVisible;
|
|
98
|
+
intersect(firstSourceItem, lastSourceItem, labelGap) && items.includes(lastSourceItem) && items.length > 1 && checkFirst && checkLast && (items.splice(items.indexOf(lastSourceItem), 1),
|
|
99
|
+
checkLast = !1), forceItemVisible(firstSourceItem, items, checkFirst, (item => intersect(item, firstSourceItem, labelGap))),
|
|
100
|
+
forceItemVisible(lastSourceItem, items, checkLast, (item => intersect(item, lastSourceItem, labelGap) || !(!checkFirst || item === firstSourceItem) && intersect(item, firstSourceItem, labelGap)), !0);
|
|
101
|
+
const ticks = items.map((item => item.value));
|
|
102
|
+
ticks.length < 3 && labelFlush && (ticks.length > 1 && ticks.pop(), last(ticks) !== last(scaleTicks) && ticks.push(last(scaleTicks))),
|
|
103
|
+
scaleTicks = ticks;
|
|
104
|
+
}
|
|
103
105
|
}
|
|
104
106
|
return convertDomainToTickData(scaleTicks);
|
|
105
107
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/axis/tick-data/continuous.ts"],"names":[],"mappings":"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","file":"continuous.js","sourcesContent":["import type { LinearScale, ContinuousScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous } from '@visactor/vscale';\nimport { isFunction, isValid, last } from '@visactor/vutils';\nimport type { ICartesianTickDataOpt, ILabelItem, ITickData, ITickDataOpt } from '../type';\n// eslint-disable-next-line no-duplicate-imports\nimport { convertDomainToTickData, getCartesianLabelBounds } from './util';\nimport { textIntersect as intersect, hasOverlap } from '../util';\n\nconst filterTicksByBreak = (ticks: number[], breakDomains: [number, number][]) => {\n return breakDomains && breakDomains.length\n ? ticks.filter(tick => {\n return breakDomains.every(breakDomain => {\n return tick < breakDomain[0] || tick > breakDomain[1];\n });\n })\n : ticks;\n};\nfunction getScaleTicks(\n op: ITickDataOpt,\n scale: ContinuousScale,\n count: number,\n getTicks: (count: number, domain?: [number, number]) => number[]\n) {\n let scaleTicks: number[];\n const { breakData } = op;\n\n // Todo: @zwx 将截断的逻辑挪到 scale 中\n if (breakData && breakData()) {\n const { breakDomains } = breakData();\n const domain = scale.domain();\n scaleTicks = [];\n for (let i = 0; i < domain.length - 1; i++) {\n const subDomain: [number, number] = [domain[i], domain[i + 1]];\n const ticks = getTicks(count, subDomain); // 暂时不对个数进行分段\n ticks.forEach(tick => {\n if (!breakDomains.some(breakDomain => tick >= breakDomain[0] && tick <= breakDomain[1])) {\n scaleTicks.push(tick);\n }\n });\n }\n // reset\n (scale as LinearScale).domain(domain);\n } else {\n scaleTicks = getTicks(count);\n }\n\n return scaleTicks;\n}\n\nfunction forceItemVisible(\n sourceItem: ILabelItem<number>,\n items: ILabelItem<number>[],\n check: boolean,\n comparator: any,\n inverse = false\n) {\n if (check && !items.includes(sourceItem)) {\n let remainLength = items.length;\n if (remainLength > 1) {\n if (inverse) {\n items.push(sourceItem);\n } else {\n items.unshift(sourceItem);\n }\n for (let i = 0; i < remainLength; i++) {\n const index = inverse ? remainLength - 1 - i : i;\n if (comparator(items[index])) {\n items.splice(index, 1);\n i--;\n remainLength--;\n } else {\n break;\n }\n }\n }\n }\n}\n/** 连续轴默认 tick 数量 */\nexport const DEFAULT_CONTINUOUS_TICK_COUNT = 5;\n/**\n * 对于连续轴:\n * - 如果spec配了tickCount、forceTickCount、tickStep,则直接输出LinearScale的ticks()、forceTicks()、stepTicks()结果;\n * - 默认输出tickCount为10的ticks()结果。\n *\n * @param scale\n * @param op\n * @returns\n */\nexport const continuousTicks = (scale: ContinuousScale, op: ITickDataOpt): ITickData[] => {\n if (!isContinuous(scale.type)) {\n return convertDomainToTickData(scale.domain());\n }\n // if range is so small\n const range = scale.range();\n const rangeSize = Math.abs(range[range.length - 1] - range[0]);\n if (rangeSize < 2) {\n return convertDomainToTickData([scale.domain()[0]]);\n }\n\n const { tickCount, forceTickCount, tickStep, noDecimals = false, labelStyle, breakData } = op;\n\n let scaleTicks: number[];\n if (isValid(tickStep)) {\n scaleTicks = filterTicksByBreak(\n (scale as LinearScale).stepTicks(tickStep),\n breakData && breakData() ? breakData().breakDomains : null\n );\n } else if (isValid(forceTickCount)) {\n scaleTicks = getScaleTicks(op, scale, forceTickCount, (count: number, subDomain?: [number, number]) => {\n if (subDomain && subDomain.length) {\n return (scale as LinearScale).domain(subDomain, true).forceTicks(count);\n }\n return (scale as LinearScale).forceTicks(count);\n });\n } else if (op.tickMode === 'd3') {\n const count =\n (isFunction(tickCount) ? tickCount({ axisLength: rangeSize, labelStyle }) : tickCount) ??\n DEFAULT_CONTINUOUS_TICK_COUNT;\n\n scaleTicks = getScaleTicks(op, scale, count, (count: number, subDomain?: [number, number]) => {\n if (subDomain && subDomain.length) {\n return (scale as LinearScale).domain(subDomain, true).d3Ticks(count, { noDecimals });\n }\n return (scale as LinearScale).d3Ticks(count, { noDecimals });\n });\n } else {\n const count =\n (isFunction(tickCount) ? tickCount({ axisLength: rangeSize, labelStyle }) : tickCount) ??\n DEFAULT_CONTINUOUS_TICK_COUNT;\n const customTicks = isFunction(op.tickMode) ? op.tickMode : undefined;\n\n scaleTicks = getScaleTicks(op, scale, count, (count: number, subDomain?: [number, number]) => {\n if (subDomain && subDomain.length) {\n return (scale as LinearScale).domain(subDomain, true).ticks(count, { noDecimals, customTicks });\n }\n return (scale as LinearScale).ticks(count, { noDecimals, customTicks });\n });\n }\n\n const domain = scale.domain();\n\n if (op.labelFirstVisible && domain[0] !== scaleTicks[0] && !scaleTicks.includes(domain[0])) {\n scaleTicks.unshift(domain[0]);\n }\n\n if (\n op.labelLastVisible &&\n domain[domain.length - 1] !== scaleTicks[scaleTicks.length - 1] &&\n !scaleTicks.includes(domain[domain.length - 1])\n ) {\n scaleTicks.push(domain[domain.length - 1]);\n }\n if (op.sampling && scaleTicks.length > 1) {\n // 判断重叠\n if (op.coordinateType === 'cartesian' || (op.coordinateType === 'polar' && op.axisOrientType === 'radius')) {\n const { labelGap = 4, labelFlush } = op as ICartesianTickDataOpt;\n const MIN_FONT_SIZE = 6;\n let items: ILabelItem<number>[];\n // 刻度个数 > 像素个数的情况,先做一层预估,减少计算,避免卡死的情况\n if (scaleTicks.length * MIN_FONT_SIZE > rangeSize) {\n const samplingScaleTicks: number[] = [];\n const step = Math.floor((scaleTicks.length * MIN_FONT_SIZE) / rangeSize);\n scaleTicks.forEach((tick, index) => {\n if (index % step === 0 || index === scaleTicks.length - 1) {\n samplingScaleTicks.push(tick);\n }\n });\n items = getCartesianLabelBounds(scale, samplingScaleTicks, op as ICartesianTickDataOpt).map(\n (bounds, i) =>\n ({\n AABBBounds: bounds,\n value: samplingScaleTicks[i]\n } as ILabelItem<number>)\n );\n } else {\n items = getCartesianLabelBounds(scale, scaleTicks, op as ICartesianTickDataOpt).map(\n (bounds, i) =>\n ({\n AABBBounds: bounds,\n value: scaleTicks[i]\n } as ILabelItem<number>)\n );\n }\n const firstSourceItem = items[0];\n const lastSourceItem = last(items);\n\n const samplingMethod = breakData && breakData() ? methods.greedy : methods.parity; // 由于轴截断后刻度会存在不均匀的情况,所以不能使用 parity 算法\n while (items.length >= 3 && hasOverlap(items as any, labelGap)) {\n items = samplingMethod(items, labelGap);\n }\n\n const checkFirst = op.labelFirstVisible;\n let checkLast = op.labelLastVisible; // 这里和 auto-hide 里的逻辑有差异,不根据 length 自动强制显示最后一个(会引起 vtable 较多 badcase)。\n\n if (intersect(firstSourceItem as any, lastSourceItem as any, labelGap)) {\n if (items.includes(lastSourceItem) && items.length > 1 && checkFirst && checkLast) {\n items.splice(items.indexOf(lastSourceItem), 1);\n checkLast = false;\n }\n }\n\n forceItemVisible(firstSourceItem, items, checkFirst, (item: ILabelItem<number>) =>\n intersect(item as any, firstSourceItem as any, labelGap)\n );\n forceItemVisible(\n lastSourceItem,\n items,\n checkLast,\n (item: ILabelItem<number>) =>\n intersect(item as any, lastSourceItem as any, labelGap) ||\n (checkFirst && item !== firstSourceItem ? intersect(item as any, firstSourceItem as any, labelGap) : false),\n true\n );\n\n const ticks = items.map(item => item.value);\n\n if (ticks.length < 3 && labelFlush) {\n if (ticks.length > 1) {\n ticks.pop();\n }\n if (last(ticks) !== last(scaleTicks)) {\n ticks.push(last(scaleTicks));\n }\n }\n\n scaleTicks = ticks;\n }\n }\n return convertDomainToTickData(scaleTicks);\n};\n\nconst methods = {\n parity: function <T>(items: ILabelItem<T>[]) {\n return items.filter((item, i) => i % 2 === 0);\n },\n greedy: function <T>(items: ILabelItem<T>[], sep: number) {\n let a: ILabelItem<T>;\n return items.filter((b, i) => {\n if (!i || !intersect(a as any, b as any, sep)) {\n a = b;\n return true;\n }\n return false;\n });\n }\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/axis/tick-data/continuous.ts"],"names":[],"mappings":"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","file":"continuous.js","sourcesContent":["import type { LinearScale, ContinuousScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous } from '@visactor/vscale';\nimport { isFunction, isValid, last } from '@visactor/vutils';\nimport type { ICartesianTickDataOpt, ILabelItem, ITickData, ITickDataOpt } from '../type';\n// eslint-disable-next-line no-duplicate-imports\nimport { convertDomainToTickData, getCartesianLabelBounds } from './util';\nimport { textIntersect as intersect, hasOverlap } from '../util';\n\nconst filterTicksByBreak = (ticks: number[], breakDomains: [number, number][]) => {\n return breakDomains && breakDomains.length\n ? ticks.filter(tick => {\n return breakDomains.every(breakDomain => {\n return tick < breakDomain[0] || tick > breakDomain[1];\n });\n })\n : ticks;\n};\nfunction getScaleTicks(\n op: ITickDataOpt,\n scale: ContinuousScale,\n count: number,\n getTicks: (count: number, domain?: [number, number]) => number[]\n) {\n let scaleTicks: number[];\n const { breakData } = op;\n\n // Todo: @zwx 将截断的逻辑挪到 scale 中\n if (breakData && breakData()) {\n const { breakDomains } = breakData();\n const domain = scale.domain();\n scaleTicks = [];\n for (let i = 0; i < domain.length - 1; i++) {\n const subDomain: [number, number] = [domain[i], domain[i + 1]];\n const ticks = getTicks(count, subDomain); // 暂时不对个数进行分段\n ticks.forEach(tick => {\n if (!breakDomains.some(breakDomain => tick >= breakDomain[0] && tick <= breakDomain[1])) {\n scaleTicks.push(tick);\n }\n });\n }\n // reset\n (scale as LinearScale).domain(domain);\n } else {\n scaleTicks = getTicks(count);\n }\n\n return scaleTicks;\n}\n\nfunction forceItemVisible(\n sourceItem: ILabelItem<number>,\n items: ILabelItem<number>[],\n check: boolean,\n comparator: any,\n inverse = false\n) {\n if (check && !items.includes(sourceItem)) {\n let remainLength = items.length;\n if (remainLength > 1) {\n if (inverse) {\n items.push(sourceItem);\n } else {\n items.unshift(sourceItem);\n }\n for (let i = 0; i < remainLength; i++) {\n const index = inverse ? remainLength - 1 - i : i;\n if (comparator(items[index])) {\n items.splice(index, 1);\n i--;\n remainLength--;\n } else {\n break;\n }\n }\n }\n }\n}\n/** 连续轴默认 tick 数量 */\nexport const DEFAULT_CONTINUOUS_TICK_COUNT = 5;\n/**\n * 对于连续轴:\n * - 如果spec配了tickCount、forceTickCount、tickStep,则直接输出LinearScale的ticks()、forceTicks()、stepTicks()结果;\n * - 默认输出tickCount为10的ticks()结果。\n *\n * @param scale\n * @param op\n * @returns\n */\nexport const continuousTicks = (scale: ContinuousScale, op: ITickDataOpt): ITickData[] => {\n if (!isContinuous(scale.type)) {\n return convertDomainToTickData(scale.domain());\n }\n // if range is so small\n const range = scale.range();\n const rangeSize = Math.abs(range[range.length - 1] - range[0]);\n if (rangeSize < 2) {\n return convertDomainToTickData([scale.domain()[0]]);\n }\n\n const { tickCount, forceTickCount, tickStep, noDecimals = false, labelStyle, breakData } = op;\n\n let scaleTicks: number[];\n if (isValid(tickStep)) {\n scaleTicks = filterTicksByBreak(\n (scale as LinearScale).stepTicks(tickStep),\n breakData && breakData() ? breakData().breakDomains : null\n );\n } else if (isValid(forceTickCount)) {\n scaleTicks = getScaleTicks(op, scale, forceTickCount, (count: number, subDomain?: [number, number]) => {\n if (subDomain && subDomain.length) {\n return (scale as LinearScale).domain(subDomain, true).forceTicks(count);\n }\n return (scale as LinearScale).forceTicks(count);\n });\n } else if (op.tickMode === 'd3') {\n const count =\n (isFunction(tickCount) ? tickCount({ axisLength: rangeSize, labelStyle }) : tickCount) ??\n DEFAULT_CONTINUOUS_TICK_COUNT;\n\n scaleTicks = getScaleTicks(op, scale, count, (count: number, subDomain?: [number, number]) => {\n if (subDomain && subDomain.length) {\n return (scale as LinearScale).domain(subDomain, true).d3Ticks(count, { noDecimals });\n }\n return (scale as LinearScale).d3Ticks(count, { noDecimals });\n });\n } else {\n const count =\n (isFunction(tickCount) ? tickCount({ axisLength: rangeSize, labelStyle }) : tickCount) ??\n DEFAULT_CONTINUOUS_TICK_COUNT;\n const customTicks = isFunction(op.tickMode) ? op.tickMode : undefined;\n\n scaleTicks = getScaleTicks(op, scale, count, (count: number, subDomain?: [number, number]) => {\n if (subDomain && subDomain.length) {\n return (scale as LinearScale).domain(subDomain, true).ticks(count, { noDecimals, customTicks });\n }\n return (scale as LinearScale).ticks(count, { noDecimals, customTicks });\n });\n }\n\n const domain = scale.domain();\n\n if (op.labelFirstVisible && domain[0] !== scaleTicks[0] && !scaleTicks.includes(domain[0])) {\n scaleTicks.unshift(domain[0]);\n }\n\n if (\n op.labelLastVisible &&\n domain[domain.length - 1] !== scaleTicks[scaleTicks.length - 1] &&\n !scaleTicks.includes(domain[domain.length - 1])\n ) {\n scaleTicks.push(domain[domain.length - 1]);\n }\n if (op.sampling && scaleTicks.length > 1) {\n // 判断重叠\n if (op.coordinateType === 'cartesian' || (op.coordinateType === 'polar' && op.axisOrientType === 'radius')) {\n const { labelGap = 4, labelFlush } = op as ICartesianTickDataOpt;\n const MIN_FONT_SIZE = 6;\n let items: ILabelItem<number>[];\n // 刻度个数 > 像素个数的情况,先做一层预估,减少计算,避免卡死的情况\n if (scaleTicks.length * MIN_FONT_SIZE > rangeSize) {\n const samplingScaleTicks: number[] = [];\n const step = Math.floor((scaleTicks.length * MIN_FONT_SIZE) / rangeSize);\n scaleTicks.forEach((tick, index) => {\n if (index % step === 0 || index === scaleTicks.length - 1) {\n samplingScaleTicks.push(tick);\n }\n });\n items = getCartesianLabelBounds(scale, samplingScaleTicks, op as ICartesianTickDataOpt)?.map(\n (bounds, i) =>\n ({\n AABBBounds: bounds,\n value: samplingScaleTicks[i]\n } as ILabelItem<number>)\n );\n } else {\n items = getCartesianLabelBounds(scale, scaleTicks, op as ICartesianTickDataOpt)?.map(\n (bounds, i) =>\n ({\n AABBBounds: bounds,\n value: scaleTicks[i]\n } as ILabelItem<number>)\n );\n }\n\n if (items) {\n const firstSourceItem = items[0];\n const lastSourceItem = last(items);\n\n const samplingMethod = breakData && breakData() ? methods.greedy : methods.parity; // 由于轴截断后刻度会存在不均匀的情况,所以不能使用 parity 算法\n while (items.length >= 3 && hasOverlap(items as any, labelGap)) {\n items = samplingMethod(items, labelGap);\n }\n\n const checkFirst = op.labelFirstVisible;\n let checkLast = op.labelLastVisible; // 这里和 auto-hide 里的逻辑有差异,不根据 length 自动强制显示最后一个(会引起 vtable 较多 badcase)。\n\n if (intersect(firstSourceItem as any, lastSourceItem as any, labelGap)) {\n if (items.includes(lastSourceItem) && items.length > 1 && checkFirst && checkLast) {\n items.splice(items.indexOf(lastSourceItem), 1);\n checkLast = false;\n }\n }\n\n forceItemVisible(firstSourceItem, items, checkFirst, (item: ILabelItem<number>) =>\n intersect(item as any, firstSourceItem as any, labelGap)\n );\n forceItemVisible(\n lastSourceItem,\n items,\n checkLast,\n (item: ILabelItem<number>) =>\n intersect(item as any, lastSourceItem as any, labelGap) ||\n (checkFirst && item !== firstSourceItem ? intersect(item as any, firstSourceItem as any, labelGap) : false),\n true\n );\n\n const ticks = items.map(item => item.value);\n\n if (ticks.length < 3 && labelFlush) {\n if (ticks.length > 1) {\n ticks.pop();\n }\n if (last(ticks) !== last(scaleTicks)) {\n ticks.push(last(scaleTicks));\n }\n }\n\n scaleTicks = ticks;\n }\n }\n }\n return convertDomainToTickData(scaleTicks);\n};\n\nconst methods = {\n parity: function <T>(items: ILabelItem<T>[]) {\n return items.filter((item, i) => i % 2 === 0);\n },\n greedy: function <T>(items: ILabelItem<T>[], sep: number) {\n let a: ILabelItem<T>;\n return items.filter((b, i) => {\n if (!i || !intersect(a as any, b as any, sep)) {\n a = b;\n return true;\n }\n return false;\n });\n }\n};\n"]}
|