@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.
Files changed (42) hide show
  1. package/cjs/axis/tick-data/continuous.js +17 -15
  2. package/cjs/axis/tick-data/continuous.js.map +1 -1
  3. package/cjs/axis/tick-data/discrete/linear.js +21 -14
  4. package/cjs/axis/tick-data/discrete/linear.js.map +1 -1
  5. package/cjs/axis/tick-data/util.js +14 -8
  6. package/cjs/axis/tick-data/util.js.map +1 -1
  7. package/cjs/axis/util.js +1 -2
  8. package/cjs/brush/brush.d.ts +1 -5
  9. package/cjs/brush/brush.js +11 -13
  10. package/cjs/brush/brush.js.map +1 -1
  11. package/cjs/brush/type.js +2 -1
  12. package/cjs/core/base.d.ts +5 -1
  13. package/cjs/core/base.js +11 -0
  14. package/cjs/core/base.js.map +1 -1
  15. package/cjs/data-zoom/data-zoom.d.ts +1 -5
  16. package/cjs/data-zoom/data-zoom.js +7 -8
  17. package/cjs/data-zoom/data-zoom.js.map +1 -1
  18. package/cjs/index.d.ts +1 -1
  19. package/cjs/index.js +1 -1
  20. package/cjs/index.js.map +1 -1
  21. package/dist/index.es.js +119 -103
  22. package/es/axis/tick-data/continuous.js +15 -13
  23. package/es/axis/tick-data/continuous.js.map +1 -1
  24. package/es/axis/tick-data/discrete/linear.js +22 -14
  25. package/es/axis/tick-data/discrete/linear.js.map +1 -1
  26. package/es/axis/tick-data/util.js +15 -9
  27. package/es/axis/tick-data/util.js.map +1 -1
  28. package/es/axis/util.js +1 -2
  29. package/es/brush/brush.d.ts +1 -5
  30. package/es/brush/brush.js +11 -13
  31. package/es/brush/brush.js.map +1 -1
  32. package/es/brush/type.js +2 -1
  33. package/es/core/base.d.ts +5 -1
  34. package/es/core/base.js +11 -0
  35. package/es/core/base.js.map +1 -1
  36. package/es/data-zoom/data-zoom.d.ts +1 -5
  37. package/es/data-zoom/data-zoom.js +7 -8
  38. package/es/data-zoom/data-zoom.js.map +1 -1
  39. package/es/index.d.ts +1 -1
  40. package/es/index.js +1 -1
  41. package/es/index.js.map +1 -1
  42. 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
- const labelBoundsList = domain.map((v, i) => {
19456
- var _a, _b;
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 = (_a = labelStyle.textAlign) !== null && _a !== void 0 ? _a : 'center';
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 = (_b = labelStyle.textBaseline) !== null && _b !== void 0 ? _b : 'middle';
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
- return bounds;
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
- const firstSourceItem = items[0];
19643
- const lastSourceItem = last(items);
19644
- const samplingMethod = breakData && breakData() ? methods.greedy : methods.parity;
19645
- while (items.length >= 3 && hasOverlap(items, labelGap)) {
19646
- items = samplingMethod(items, labelGap);
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
- forceItemVisible(firstSourceItem, items, checkFirst, (item) => textIntersect(item, firstSourceItem, labelGap));
19657
- forceItemVisible(lastSourceItem, items, checkLast, (item) => textIntersect(item, lastSourceItem, labelGap) ||
19658
- (checkFirst && item !== firstSourceItem ? textIntersect(item, firstSourceItem, labelGap) : false), true);
19659
- const ticks = items.map(item => item.value);
19660
- if (ticks.length < 3 && labelFlush) {
19661
- if (ticks.length > 1) {
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
- if (last(ticks) !== last(scaleTicks)) {
19665
- ticks.push(last(scaleTicks));
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.map(bounds => {
19692
- if (isHorizontal) {
19693
- return [bounds.x1, bounds.x2, bounds.width()];
19694
- }
19695
- return [bounds.y1, bounds.y2, bounds.height()];
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
- const minBoundsLength = Math.min(...labelBoundsList.map(bounds => bounds[2]));
19745
- const stepResult = getStep$1(domain, labelBoundsList, labelGap, op.labelLastVisible, Math.floor(minBoundsLength / incrementUnit), false);
19746
- scaleTicks = scale.stepTicks(stepResult.step);
19747
- if (op.labelLastVisible) {
19748
- if (stepResult.delCount) {
19749
- scaleTicks = scaleTicks.slice(0, scaleTicks.length - stepResult.delCount);
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
- let maxBounds = null;
19758
- tempList.forEach(current => {
19759
- if (!maxBounds) {
19760
- maxBounds = current;
19761
- return;
19762
- }
19763
- if (maxBounds[2] < current[2]) {
19764
- maxBounds = current;
19765
- }
19766
- });
19767
- const step = rangeEnd - rangeStart - labelGap > 0
19768
- ? Math.ceil((domain.length * (labelGap + maxBounds[2])) / (rangeEnd - rangeStart - labelGap))
19769
- : domain.length - 1;
19770
- scaleTicks = scale.stepTicks(step);
19771
- if (op.labelLastVisible &&
19772
- (!scaleTicks.length || scaleTicks[scaleTicks.length - 1] !== domain[domain.length - 1])) {
19773
- if (scaleTicks.length &&
19774
- Math.abs(scale.scale(scaleTicks[scaleTicks.length - 1]) - scale.scale(domain[domain.length - 1])) <
19775
- maxBounds[2]) {
19776
- scaleTicks = scaleTicks.slice(0, -1);
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
- else {
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
- this._startText.setAttribute('dy', startTextDy + direction * Math.abs(endTextBounds.y1 - endTextBounds.y2));
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
- this._startText.setAttribute('dx', startTextDx + direction * Math.abs(endTextBounds.x1 - endTextBounds.x2));
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
- if (Object.keys(this._brushMaskAABBBoundsDict).length === 1) {
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._dispatchBrushEvent(IOperateType.drawing, e);
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.incrementalClearChild();
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.11";
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
- const firstSourceItem = items[0], lastSourceItem = last(items), samplingMethod = breakData && breakData() ? methods.greedy : methods.parity;
94
- for (;items.length >= 3 && hasOverlap(items, labelGap); ) items = samplingMethod(items, labelGap);
95
- const checkFirst = op.labelFirstVisible;
96
- let checkLast = op.labelLastVisible;
97
- intersect(firstSourceItem, lastSourceItem, labelGap) && items.includes(lastSourceItem) && items.length > 1 && checkFirst && checkLast && (items.splice(items.indexOf(lastSourceItem), 1),
98
- checkLast = !1), forceItemVisible(firstSourceItem, items, checkFirst, (item => intersect(item, firstSourceItem, labelGap))),
99
- forceItemVisible(lastSourceItem, items, checkLast, (item => intersect(item, lastSourceItem, labelGap) || !(!checkFirst || item === firstSourceItem) && intersect(item, firstSourceItem, labelGap)), !0);
100
- const ticks = items.map((item => item.value));
101
- ticks.length < 3 && labelFlush && (ticks.length > 1 && ticks.pop(), last(ticks) !== last(scaleTicks) && ticks.push(last(scaleTicks))),
102
- scaleTicks = ticks;
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"]}