@visactor/vrender-components 0.22.7-alpha.0 → 0.22.7-alpha.10

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 (46) hide show
  1. package/cjs/brush/brush.d.ts +7 -4
  2. package/cjs/brush/brush.js +53 -67
  3. package/cjs/brush/brush.js.map +1 -1
  4. package/cjs/brush/config.d.ts +1 -1
  5. package/cjs/brush/config.js +1 -1
  6. package/cjs/brush/config.js.map +1 -1
  7. package/cjs/brush/type.js.map +1 -1
  8. package/cjs/data-zoom/data-zoom.d.ts +3 -0
  9. package/cjs/data-zoom/data-zoom.js +39 -24
  10. package/cjs/data-zoom/data-zoom.js.map +1 -1
  11. package/cjs/index.d.ts +1 -1
  12. package/cjs/index.js +1 -1
  13. package/cjs/index.js.map +1 -1
  14. package/cjs/scrollbar/scrollbar.d.ts +1 -0
  15. package/cjs/scrollbar/scrollbar.js +21 -12
  16. package/cjs/scrollbar/scrollbar.js.map +1 -1
  17. package/cjs/slider/slider.d.ts +3 -0
  18. package/cjs/slider/slider.js +48 -27
  19. package/cjs/slider/slider.js.map +1 -1
  20. package/cjs/util/event.d.ts +1 -0
  21. package/cjs/util/event.js +14 -0
  22. package/cjs/util/event.js.map +1 -0
  23. package/dist/index.es.js +186 -182
  24. package/es/brush/brush.d.ts +7 -4
  25. package/es/brush/brush.js +55 -70
  26. package/es/brush/brush.js.map +1 -1
  27. package/es/brush/config.d.ts +1 -1
  28. package/es/brush/config.js +1 -1
  29. package/es/brush/config.js.map +1 -1
  30. package/es/brush/type.js.map +1 -1
  31. package/es/data-zoom/data-zoom.d.ts +3 -0
  32. package/es/data-zoom/data-zoom.js +38 -21
  33. package/es/data-zoom/data-zoom.js.map +1 -1
  34. package/es/index.d.ts +1 -1
  35. package/es/index.js +1 -1
  36. package/es/index.js.map +1 -1
  37. package/es/scrollbar/scrollbar.d.ts +1 -0
  38. package/es/scrollbar/scrollbar.js +22 -11
  39. package/es/scrollbar/scrollbar.js.map +1 -1
  40. package/es/slider/slider.d.ts +3 -0
  41. package/es/slider/slider.js +49 -26
  42. package/es/slider/slider.js.map +1 -1
  43. package/es/util/event.d.ts +1 -0
  44. package/es/util/event.js +6 -0
  45. package/es/util/event.js.map +1 -0
  46. package/package.json +5 -5
package/dist/index.es.js CHANGED
@@ -4162,7 +4162,7 @@ class FederatedEvent {
4162
4162
  }
4163
4163
  _composedDetailPath(params) {
4164
4164
  if (params && params.graphic) {
4165
- const g = params.graphic;
4165
+ const g = this.pickParams.graphic;
4166
4166
  if (g.stage) {
4167
4167
  const path = g.stage.eventSystem.manager.propagationPath(g);
4168
4168
  this.detailPath.push(path), this._composedDetailPath(params.params);
@@ -14909,6 +14909,13 @@ const SCROLLBAR_START_EVENT = 'scrollDown';
14909
14909
  const SCROLLBAR_EVENT = 'scrollDrag';
14910
14910
  const SCROLLBAR_END_EVENT = 'scrollUp';
14911
14911
 
14912
+ function getEndTriggersOfDrag() {
14913
+ if (vglobal.env === 'browser') {
14914
+ return ['pointerup', 'pointerleave', 'pointercancel'];
14915
+ }
14916
+ return ['pointerup', 'pointerleave', 'pointerupoutside'];
14917
+ }
14918
+
14912
14919
  const delayMap$2 = {
14913
14920
  debounce: debounce,
14914
14921
  throttle: throttle
@@ -14942,6 +14949,7 @@ class ScrollBar extends AbstractComponent {
14942
14949
  }
14943
14950
  };
14944
14951
  this._onSliderPointerDown = (e) => {
14952
+ this._clearDragEvents();
14945
14953
  const { stopSliderDownPropagation = true } = this.attribute;
14946
14954
  if (stopSliderDownPropagation) {
14947
14955
  e.stopPropagation();
@@ -14953,15 +14961,12 @@ class ScrollBar extends AbstractComponent {
14953
14961
  pos: this._prePos,
14954
14962
  event: e
14955
14963
  });
14956
- if (vglobal.env === 'browser') {
14957
- vglobal.addEventListener('pointermove', this._onSliderPointerMoveWithDelay, { capture: true });
14958
- vglobal.addEventListener('pointerup', this._onSliderPointerUp);
14959
- }
14960
- else {
14961
- this.stage.addEventListener('pointermove', this._onSliderPointerMoveWithDelay, { capture: true });
14962
- this.stage.addEventListener('pointerup', this._onSliderPointerUp);
14963
- this.stage.addEventListener('pointerupoutside', this._onSliderPointerUp);
14964
- }
14964
+ const triggers = getEndTriggersOfDrag();
14965
+ const obj = vglobal.env === 'browser' ? vglobal : this.stage;
14966
+ obj.addEventListener('pointermove', this._onSliderPointerMoveWithDelay, { capture: true, passive: true });
14967
+ triggers.forEach((trigger) => {
14968
+ obj.addEventListener(trigger, this._onSliderPointerUp);
14969
+ });
14965
14970
  };
14966
14971
  this._computeScrollValue = (e) => {
14967
14972
  const { direction } = this.attribute;
@@ -14983,6 +14988,7 @@ class ScrollBar extends AbstractComponent {
14983
14988
  return [currentPos, currentScrollValue];
14984
14989
  };
14985
14990
  this._onSliderPointerMove = (e) => {
14991
+ e.preventDefault();
14986
14992
  const { stopSliderMovePropagation = true } = this.attribute;
14987
14993
  if (stopSliderMovePropagation) {
14988
14994
  e.stopPropagation();
@@ -14996,7 +15002,6 @@ class ScrollBar extends AbstractComponent {
14996
15002
  ? this._onSliderPointerMove
14997
15003
  : delayMap$2[this.attribute.delayType](this._onSliderPointerMove, this.attribute.delayTime);
14998
15004
  this._onSliderPointerUp = (e) => {
14999
- e.preventDefault();
15000
15005
  const { range: preRange, limitRange = [0, 1] } = this.attribute;
15001
15006
  const preScrollRange = this.getScrollRange();
15002
15007
  const [currentPos, currentScrollValue] = this._computeScrollValue(e);
@@ -15005,15 +15010,7 @@ class ScrollBar extends AbstractComponent {
15005
15010
  pre: preRange,
15006
15011
  value: clampRange(range, limitRange[0], limitRange[1])
15007
15012
  });
15008
- if (vglobal.env === 'browser') {
15009
- vglobal.removeEventListener('pointermove', this._onSliderPointerMoveWithDelay, { capture: true });
15010
- vglobal.removeEventListener('pointerup', this._onSliderPointerUp);
15011
- }
15012
- else {
15013
- this.stage.removeEventListener('pointermove', this._onSliderPointerMoveWithDelay, { capture: true });
15014
- this.stage.removeEventListener('pointerup', this._onSliderPointerUp);
15015
- this.stage.removeEventListener('pointerupoutside', this._onSliderPointerUp);
15016
- }
15013
+ this._clearDragEvents();
15017
15014
  };
15018
15015
  }
15019
15016
  setScrollRange(range, render = true) {
@@ -15146,6 +15143,14 @@ class ScrollBar extends AbstractComponent {
15146
15143
  ? clampRange([x1 + min * width, x1 + max * width], x1, width - sliderSize)
15147
15144
  : clampRange([y1 + min * height, y1 + max * height], y1, height - sliderSize);
15148
15145
  }
15146
+ _clearDragEvents() {
15147
+ const triggers = getEndTriggersOfDrag();
15148
+ const obj = vglobal.env === 'browser' ? vglobal : this.stage;
15149
+ obj.removeEventListener('pointermove', this._onSliderPointerMoveWithDelay, { capture: true, passive: false });
15150
+ triggers.forEach((trigger) => {
15151
+ obj.removeEventListener(trigger, this._onSliderPointerUp);
15152
+ });
15153
+ }
15149
15154
  _reset() {
15150
15155
  this._sliderRenderBounds = null;
15151
15156
  this._sliderLimitRange = null;
@@ -23010,8 +23015,13 @@ class DataZoom extends AbstractComponent {
23010
23015
  end: 1
23011
23016
  };
23012
23017
  this._statePointToData = state => state;
23018
+ this._handleTouchMove = (e) => {
23019
+ if (this._activeState) {
23020
+ e.preventDefault();
23021
+ }
23022
+ };
23013
23023
  this._onHandlerPointerDown = (e, tag) => {
23014
- e.stopPropagation();
23024
+ this._clearDragEvents();
23015
23025
  if (tag === 'start') {
23016
23026
  this._activeTag = DataZoomActiveTag.startHandler;
23017
23027
  this._activeItem = this._startHandlerMask;
@@ -23035,14 +23045,15 @@ class DataZoom extends AbstractComponent {
23035
23045
  this._activeState = true;
23036
23046
  this._activeCache.startPos = this.eventPosToStagePos(e);
23037
23047
  this._activeCache.lastPos = this.eventPosToStagePos(e);
23038
- if (vglobal.env === 'browser') {
23039
- vglobal.addEventListener('pointermove', this._onHandlerPointerMove, { capture: true });
23040
- vglobal.addEventListener('pointerup', this._onHandlerPointerUp);
23041
- }
23042
- this.addEventListener('pointermove', this._onHandlerPointerMove, { capture: true });
23048
+ const evtTarget = vglobal.env === 'browser' ? vglobal : this.stage;
23049
+ const triggers = getEndTriggersOfDrag();
23050
+ evtTarget.addEventListener('pointermove', this._onHandlerPointerMove, { capture: true, passive: false });
23051
+ triggers.forEach((trigger) => {
23052
+ evtTarget.addEventListener(trigger, this._onHandlerPointerUp);
23053
+ });
23043
23054
  };
23044
23055
  this._pointerMove = (e) => {
23045
- e.stopPropagation();
23056
+ e.preventDefault();
23046
23057
  const { start: startAttr, end: endAttr, brushSelect, realTime = true } = this.attribute;
23047
23058
  const pos = this.eventPosToStagePos(e);
23048
23059
  const { attPos, max } = this._layoutCache;
@@ -23072,12 +23083,12 @@ class DataZoom extends AbstractComponent {
23072
23083
  end = end + dis;
23073
23084
  }
23074
23085
  }
23075
- this._activeCache.lastPos = pos;
23076
23086
  brushSelect && this.renderDragMask();
23077
23087
  }
23078
23088
  start = Math.min(Math.max(start, 0), 1);
23079
23089
  end = Math.min(Math.max(end, 0), 1);
23080
23090
  if (startAttr !== start || endAttr !== end) {
23091
+ this._activeCache.lastPos = pos;
23081
23092
  this.setStateAttr(start, end, true);
23082
23093
  if (realTime) {
23083
23094
  this._dispatchEvent('change', {
@@ -23092,7 +23103,6 @@ class DataZoom extends AbstractComponent {
23092
23103
  ? this._pointerMove
23093
23104
  : delayMap$1[this.attribute.delayType](this._pointerMove, this.attribute.delayTime);
23094
23105
  this._onHandlerPointerUp = (e) => {
23095
- e.preventDefault();
23096
23106
  const { start, end, brushSelect, realTime = true } = this.attribute;
23097
23107
  if (this._activeState) {
23098
23108
  if (this._activeTag === DataZoomActiveTag.background) {
@@ -23107,12 +23117,7 @@ class DataZoom extends AbstractComponent {
23107
23117
  end: this.state.end,
23108
23118
  tag: this._activeTag
23109
23119
  });
23110
- if (vglobal.env === 'browser') {
23111
- vglobal.removeEventListener('pointermove', this._onHandlerPointerMove, { capture: true });
23112
- vglobal.removeEventListener('pointerup', this._onHandlerPointerUp);
23113
- }
23114
- this.removeEventListener('pointermove', this._onHandlerPointerMove, { capture: true });
23115
- this.removeEventListener('pointerup', this._onHandlerPointerUp);
23120
+ this._clearDragEvents();
23116
23121
  };
23117
23122
  const { position, showDetail } = attributes;
23118
23123
  this._activeCache.startPos = position;
@@ -23160,12 +23165,13 @@ class DataZoom extends AbstractComponent {
23160
23165
  if (this._selectedPreviewGroup) {
23161
23166
  this._selectedPreviewGroup.addEventListener('pointerdown', (e) => this._onHandlerPointerDown(e, selectedTag));
23162
23167
  }
23163
- this.addEventListener('pointerup', this._onHandlerPointerUp);
23164
- this.addEventListener('pointerupoutside', this._onHandlerPointerUp);
23165
23168
  if (showDetail === 'auto') {
23166
23169
  this.addEventListener('pointerenter', this._onHandlerPointerEnter);
23167
23170
  this.addEventListener('pointerleave', this._onHandlerPointerLeave);
23168
23171
  }
23172
+ (vglobal.env === 'browser' ? vglobal : this.stage).addEventListener('touchmove', this._handleTouchMove, {
23173
+ passive: false
23174
+ });
23169
23175
  }
23170
23176
  dragMaskSize() {
23171
23177
  const { position } = this.attribute;
@@ -23193,13 +23199,19 @@ class DataZoom extends AbstractComponent {
23193
23199
  var _a, _b;
23194
23200
  return (_b = (_a = this.stage) === null || _a === void 0 ? void 0 : _a.eventPointTransform(e)) !== null && _b !== void 0 ? _b : { x: 0, y: 0 };
23195
23201
  }
23202
+ _clearDragEvents() {
23203
+ const evtTarget = vglobal.env === 'browser' ? vglobal : this.stage;
23204
+ const triggers = getEndTriggersOfDrag();
23205
+ evtTarget.removeEventListener('pointermove', this._onHandlerPointerMove, { capture: true, passive: false });
23206
+ triggers.forEach((trigger) => {
23207
+ evtTarget.removeEventListener(trigger, this._onHandlerPointerUp);
23208
+ });
23209
+ }
23196
23210
  _onHandlerPointerEnter(e) {
23197
- e.stopPropagation();
23198
23211
  this._showText = true;
23199
23212
  this.renderText();
23200
23213
  }
23201
23214
  _onHandlerPointerLeave(e) {
23202
- e.stopPropagation();
23203
23215
  this._showText = false;
23204
23216
  this.renderText();
23205
23217
  }
@@ -23709,6 +23721,13 @@ class DataZoom extends AbstractComponent {
23709
23721
  setStatePointToData(callback) {
23710
23722
  isFunction(callback) && (this._statePointToData = callback);
23711
23723
  }
23724
+ release(all) {
23725
+ super.release(all);
23726
+ (vglobal.env === 'browser' ? vglobal : this.stage).addEventListener('touchmove', this._handleTouchMove, {
23727
+ passive: false
23728
+ });
23729
+ this._clearDragEvents();
23730
+ }
23712
23731
  }
23713
23732
  DataZoom.defaultAttributes = DEFAULT_DATA_ZOOM_ATTRIBUTES;
23714
23733
 
@@ -27216,28 +27235,21 @@ class Slider extends AbstractComponent {
27216
27235
  this._dispatchTooltipEvent('sliderTooltipHide');
27217
27236
  };
27218
27237
  this._onHandlerPointerdown = (e) => {
27219
- e.stopPropagation();
27238
+ this._clearAllDragEvents();
27220
27239
  this._isChanging = true;
27221
27240
  const { x, y } = this.stage.eventPointTransform(e);
27222
27241
  this._currentHandler = e.target;
27223
27242
  this._prePos = this._isHorizontal ? x : y;
27224
- if (vglobal.env === 'browser') {
27225
- vglobal.addEventListener('pointermove', this._onHandlerPointerMove, {
27226
- capture: true
27227
- });
27228
- vglobal.addEventListener('pointerup', this._onHandlerPointerUp);
27229
- }
27230
- else {
27231
- this.stage.addEventListener('pointermove', this._onHandlerPointerMove, {
27232
- capture: true
27233
- });
27234
- this.stage.addEventListener('pointerup', this._onHandlerPointerUp);
27235
- this.stage.addEventListener('pointerupoutside', this._onHandlerPointerUp);
27236
- }
27243
+ const triggers = getEndTriggersOfDrag();
27244
+ const obj = vglobal.env === 'browser' ? vglobal : this.stage;
27245
+ obj.addEventListener('pointermove', this._onHandlerPointerMove, { capture: true, passive: false });
27246
+ triggers.forEach((trigger) => {
27247
+ obj.addEventListener(trigger, this._onHandlerPointerUp);
27248
+ });
27237
27249
  };
27238
27250
  this._onHandlerPointerMove = (e) => {
27239
27251
  var _a, _b;
27240
- e.stopPropagation();
27252
+ e.preventDefault();
27241
27253
  this._isChanging = true;
27242
27254
  const { railWidth, railHeight, min, max } = this.attribute;
27243
27255
  if (max === min) {
@@ -27273,44 +27285,29 @@ class Slider extends AbstractComponent {
27273
27285
  this._dispatchChangeEvent();
27274
27286
  };
27275
27287
  this._onHandlerPointerUp = (e) => {
27276
- e.preventDefault();
27277
27288
  this._isChanging = false;
27278
27289
  this._currentHandler = null;
27279
- if (vglobal.env === 'browser') {
27280
- vglobal.removeEventListener('pointermove', this._onHandlerPointerMove, {
27281
- capture: true
27282
- });
27283
- vglobal.removeEventListener('pointerup', this._onHandlerPointerUp);
27284
- }
27285
- else {
27286
- this.stage.removeEventListener('pointermove', this._onHandlerPointerMove, {
27287
- capture: true
27288
- });
27289
- this.stage.removeEventListener('pointerup', this._onHandlerPointerUp);
27290
- this.stage.removeEventListener('pointerupoutside', this._onHandlerPointerUp);
27290
+ this._clearAllDragEvents();
27291
+ };
27292
+ this._handleTouchMove = (e) => {
27293
+ if (this._isChanging) {
27294
+ e.preventDefault();
27291
27295
  }
27292
27296
  };
27293
27297
  this._onTrackPointerdown = (e) => {
27294
- e.stopPropagation();
27298
+ this._clearAllDragEvents();
27295
27299
  this._isChanging = true;
27296
27300
  const { x, y } = this.stage.eventPointTransform(e);
27297
27301
  this._prePos = this._isHorizontal ? x : y;
27298
- if (vglobal.env === 'browser') {
27299
- vglobal.addEventListener('pointermove', this._onTrackPointerMove, {
27300
- capture: true
27301
- });
27302
- vglobal.addEventListener('pointerup', this._onTrackPointerUp);
27303
- }
27304
- else {
27305
- this.stage.addEventListener('pointermove', this._onTrackPointerMove, {
27306
- capture: true
27307
- });
27308
- this.stage.addEventListener('pointerup', this._onTrackPointerUp);
27309
- this.stage.addEventListener('pointerupoutside', this._onTrackPointerUp);
27310
- }
27302
+ const triggers = getEndTriggersOfDrag();
27303
+ const obj = vglobal.env === 'browser' ? vglobal : this.stage;
27304
+ obj.addEventListener('pointermove', this._onTrackPointerMove, { capture: true, passive: false });
27305
+ triggers.forEach((trigger) => {
27306
+ obj.addEventListener(trigger, this._onTrackPointerUp);
27307
+ });
27311
27308
  };
27312
27309
  this._onTrackPointerMove = (e) => {
27313
- e.stopPropagation();
27310
+ e.preventDefault();
27314
27311
  this._isChanging = true;
27315
27312
  const { railWidth, railHeight, min, max, inverse } = this.attribute;
27316
27313
  if (max === min) {
@@ -27362,24 +27359,11 @@ class Slider extends AbstractComponent {
27362
27359
  this._dispatchChangeEvent();
27363
27360
  };
27364
27361
  this._onTrackPointerUp = (e) => {
27365
- e.preventDefault();
27366
27362
  this._isChanging = false;
27367
- if (vglobal.env === 'browser') {
27368
- vglobal.removeEventListener('pointermove', this._onTrackPointerMove, {
27369
- capture: true
27370
- });
27371
- vglobal.removeEventListener('pointerup', this._onTrackPointerUp);
27372
- }
27373
- else {
27374
- this.stage.removeEventListener('pointermove', this._onTrackPointerMove, {
27375
- capture: true
27376
- });
27377
- this.stage.removeEventListener('pointerup', this._onTrackPointerUp);
27378
- this.stage.removeEventListener('pointerupoutside', this._onTrackPointerUp);
27379
- }
27363
+ this._clearAllDragEvents();
27380
27364
  };
27381
27365
  this._onRailPointerDown = (e) => {
27382
- e.stopPropagation();
27366
+ this._clearAllDragEvents();
27383
27367
  this._isChanging = true;
27384
27368
  const { railWidth, railHeight, min, max } = this.attribute;
27385
27369
  if (max === min) {
@@ -27757,6 +27741,9 @@ class Slider extends AbstractComponent {
27757
27741
  this._track.addEventListener('pointerdown', this._onTrackPointerdown);
27758
27742
  }
27759
27743
  this._railContainer.addEventListener('pointerdown', this._onRailPointerDown);
27744
+ (vglobal.env === 'browser' ? vglobal : this.stage).addEventListener('touchmove', this._handleTouchMove, {
27745
+ passive: false
27746
+ });
27760
27747
  }
27761
27748
  }
27762
27749
  _bindTooltipEvents() {
@@ -27767,6 +27754,18 @@ class Slider extends AbstractComponent {
27767
27754
  this._mainContainer.addEventListener('pointermove', this._onTooltipUpdate);
27768
27755
  this._mainContainer.addEventListener('pointerleave', this._onTooltipHide);
27769
27756
  }
27757
+ _clearAllDragEvents() {
27758
+ const triggers = getEndTriggersOfDrag();
27759
+ const obj = vglobal.env === 'browser' ? vglobal : this.stage;
27760
+ obj.removeEventListener('pointermove', this._onHandlerPointerMove, { capture: true, passive: false });
27761
+ triggers.forEach((trigger) => {
27762
+ obj.removeEventListener(trigger, this._onHandlerPointerUp);
27763
+ });
27764
+ obj.removeEventListener('pointermove', this._onTrackPointerMove, { capture: true, passive: false });
27765
+ triggers.forEach((trigger) => {
27766
+ obj.removeEventListener(trigger, this._onTrackPointerUp);
27767
+ });
27768
+ }
27770
27769
  _updateTrack() {
27771
27770
  const { inverse, railWidth, railHeight } = this.attribute;
27772
27771
  const startHandler = this._startHandler;
@@ -27907,6 +27906,13 @@ class Slider extends AbstractComponent {
27907
27906
  endHandler
27908
27907
  };
27909
27908
  }
27909
+ release(all) {
27910
+ super.release(all);
27911
+ (vglobal.env === 'browser' ? vglobal : this.stage).addEventListener('touchmove', this._handleTouchMove, {
27912
+ passive: false
27913
+ });
27914
+ this._clearAllDragEvents();
27915
+ }
27910
27916
  }
27911
27917
  Slider.defaultAttributes = {
27912
27918
  slidable: true,
@@ -29606,7 +29612,7 @@ var IOperateType;
29606
29612
  const DEFAULT_BRUSH_ATTRIBUTES = {
29607
29613
  trigger: 'pointerdown',
29608
29614
  updateTrigger: 'pointermove',
29609
- endTrigger: 'pointerup',
29615
+ endTrigger: ['pointerup', 'pointerleave'],
29610
29616
  resetTrigger: 'pointerupoutside',
29611
29617
  hasMask: true,
29612
29618
  brushMode: 'single',
@@ -29660,6 +29666,7 @@ class Brush extends AbstractComponent {
29660
29666
  this._isDownBeforeUpOutside = true;
29661
29667
  return;
29662
29668
  }
29669
+ this._isDownBeforeUpOutside = false;
29663
29670
  e.stopPropagation();
29664
29671
  const brushMoved = (_a = this.attribute.brushMoved) !== null && _a !== void 0 ? _a : true;
29665
29672
  this._activeMoveState = brushMoved && this._isPosInBrushMask(e);
@@ -29682,6 +29689,14 @@ class Brush extends AbstractComponent {
29682
29689
  : delayMap[this.attribute.delayType](this._onBrushing, this.attribute.delayTime);
29683
29690
  this._onBrushEnd = (e) => {
29684
29691
  var _a;
29692
+ if (this._isDownBeforeUpOutside) {
29693
+ if (!this._isEmptyMask()) {
29694
+ this._clearMask();
29695
+ this._dispatchBrushEvent(IOperateType.brushClear, e);
29696
+ }
29697
+ this._isDownBeforeUpOutside = false;
29698
+ return;
29699
+ }
29685
29700
  if (!this._activeDrawState && !this._activeMoveState) {
29686
29701
  return;
29687
29702
  }
@@ -29689,29 +29704,29 @@ class Brush extends AbstractComponent {
29689
29704
  const { removeOnClick = true } = this.attribute;
29690
29705
  if (this._activeDrawState && !this._isDrawedBeforeEnd && removeOnClick) {
29691
29706
  if ((_a = this._operatingMask) === null || _a === void 0 ? void 0 : _a._AABBBounds.empty()) {
29692
- this._dispatchEvent(IOperateType.brushClear, {
29693
- operateMask: this._operatingMask,
29694
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
29695
- event: e
29696
- });
29707
+ if (!this._isEmptyMask()) {
29708
+ this._clearMask();
29709
+ this._dispatchBrushEvent(IOperateType.brushClear, e);
29710
+ }
29711
+ }
29712
+ else {
29713
+ delete this._brushMaskAABBBoundsDict[this._operatingMask.name];
29714
+ this._container.setAttributes({});
29715
+ this._container.removeChild(this._operatingMask);
29716
+ if (!this._isEmptyMask()) {
29717
+ this._dispatchBrushEvent(IOperateType.brushClear, e);
29718
+ }
29719
+ else {
29720
+ this._dispatchBrushEvent(IOperateType.drawEnd, e);
29721
+ }
29697
29722
  }
29698
- this._container.incrementalClearChild();
29699
- this._brushMaskAABBBoundsDict = {};
29700
29723
  }
29701
29724
  else {
29702
29725
  if (this._activeDrawState) {
29703
- this._dispatchEvent(IOperateType.drawEnd, {
29704
- operateMask: this._operatingMask,
29705
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
29706
- event: e
29707
- });
29726
+ this._dispatchBrushEvent(IOperateType.drawEnd, e);
29708
29727
  }
29709
29728
  if (this._activeMoveState) {
29710
- this._dispatchEvent(IOperateType.moveEnd, {
29711
- operateMask: this._operatingMask,
29712
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
29713
- event: e
29714
- });
29729
+ this._dispatchBrushEvent(IOperateType.moveEnd, e);
29715
29730
  }
29716
29731
  }
29717
29732
  this._activeDrawState = false;
@@ -29723,23 +29738,14 @@ class Brush extends AbstractComponent {
29723
29738
  };
29724
29739
  this._onBrushClear = (e) => {
29725
29740
  e.preventDefault();
29726
- const { removeOnClick = true } = this.attribute;
29727
- if (this._isDownBeforeUpOutside && removeOnClick) {
29728
- this._dispatchEvent(IOperateType.brushClear, {
29729
- operateMask: this._operatingMask,
29730
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
29731
- event: e
29732
- });
29733
- this._container.incrementalClearChild();
29734
- this._brushMaskAABBBoundsDict = {};
29741
+ if (!this._isEmptyMask()) {
29742
+ this._clearMask();
29743
+ this._dispatchBrushEvent(IOperateType.brushClear, e);
29735
29744
  }
29736
29745
  this._activeDrawState = false;
29737
29746
  this._activeMoveState = false;
29738
29747
  this._isDrawedBeforeEnd = false;
29739
29748
  this._isDownBeforeUpOutside = false;
29740
- if (this._operatingMask) {
29741
- this._operatingMask.setAttribute('pickable', false);
29742
- }
29743
29749
  };
29744
29750
  }
29745
29751
  _bindBrushEvents() {
@@ -29747,44 +29753,19 @@ class Brush extends AbstractComponent {
29747
29753
  return;
29748
29754
  }
29749
29755
  const { trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger, updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger, endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger, resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger } = this.attribute;
29750
- array(trigger).forEach(t => vglobal.addEventListener(t, this._onBrushStart));
29756
+ array(trigger).forEach(t => this.stage.addEventListener(t, this._onBrushStart));
29751
29757
  array(updateTrigger).forEach(t => this.stage.addEventListener(t, this._onBrushingWithDelay));
29752
29758
  array(endTrigger).forEach(t => this.stage.addEventListener(t, this._onBrushEnd));
29753
29759
  array(resetTrigger).forEach(t => this.stage.addEventListener(t, this._onBrushClear));
29754
29760
  }
29755
- _isPosInBrushMask(e) {
29756
- const pos = this.eventPosToStagePos(e);
29757
- const brushMasks = this._container.getChildren();
29758
- for (let i = 0; i < brushMasks.length; i++) {
29759
- const { points = [], dx = 0, dy = 0 } = brushMasks[i].attribute;
29760
- const pointsConsiderOffset = points.map((point) => {
29761
- return {
29762
- x: point.x + dx,
29763
- y: point.y + dy
29764
- };
29765
- });
29766
- if (polygonContainPoint(pointsConsiderOffset, pos.x, pos.y)) {
29767
- this._operatingMask = brushMasks[i];
29768
- return true;
29769
- }
29770
- }
29771
- return false;
29772
- }
29773
29761
  _initDraw(e) {
29774
29762
  const { brushMode } = this.attribute;
29775
29763
  const pos = this.eventPosToStagePos(e);
29776
29764
  this._cacheDrawPoints = [pos];
29777
29765
  this._isDrawedBeforeEnd = false;
29778
- if (brushMode === 'single') {
29779
- this._brushMaskAABBBoundsDict = {};
29780
- this._container.incrementalClearChild();
29781
- }
29766
+ brushMode === 'single' && this._clearMask();
29782
29767
  this._addBrushMask();
29783
- this._dispatchEvent(IOperateType.drawStart, {
29784
- operateMask: this._operatingMask,
29785
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
29786
- event: e
29787
- });
29768
+ this._dispatchBrushEvent(IOperateType.drawStart, e);
29788
29769
  }
29789
29770
  _initMove(e) {
29790
29771
  var _a, _b;
@@ -29801,11 +29782,7 @@ class Brush extends AbstractComponent {
29801
29782
  this._operatingMaskMoveRangeX = [minMoveStepX, maxMoveStepX];
29802
29783
  this._operatingMaskMoveRangeY = [minMoveStepY, maxMoveStepY];
29803
29784
  this._operatingMask.setAttribute('pickable', true);
29804
- this._dispatchEvent(IOperateType.moveStart, {
29805
- operateMask: this._operatingMask,
29806
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
29807
- event: e
29808
- });
29785
+ this._dispatchBrushEvent(IOperateType.moveStart, e);
29809
29786
  }
29810
29787
  _drawing(e) {
29811
29788
  var _a, _b;
@@ -29832,12 +29809,8 @@ class Brush extends AbstractComponent {
29832
29809
  !!(Math.abs(x2 - x1) > sizeThreshold || Math.abs(y1 - y2) > sizeThreshold);
29833
29810
  if (this._isDrawedBeforeEnd) {
29834
29811
  this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds;
29835
- this._dispatchEvent(IOperateType.drawing, {
29836
- operateMask: this._operatingMask,
29837
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
29838
- event: e
29839
- });
29840
29812
  }
29813
+ this._dispatchBrushEvent(IOperateType.drawing, e);
29841
29814
  }
29842
29815
  _moving(e) {
29843
29816
  const startPos = this._cacheMovePoint;
@@ -29856,11 +29829,20 @@ class Brush extends AbstractComponent {
29856
29829
  dy: moveY
29857
29830
  });
29858
29831
  this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds;
29859
- this._dispatchEvent(IOperateType.moving, {
29860
- operateMask: this._operatingMask,
29861
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
29862
- event: e
29863
- });
29832
+ this._dispatchBrushEvent(IOperateType.moving, e);
29833
+ }
29834
+ render() {
29835
+ this.releaseBrushEvents();
29836
+ this._bindBrushEvents();
29837
+ const group = this.createOrUpdateChild('brush-container', {}, 'group');
29838
+ this._container = group;
29839
+ }
29840
+ releaseBrushEvents() {
29841
+ const { trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger, updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger, endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger, resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger } = this.attribute;
29842
+ array(trigger).forEach(t => this.stage.removeEventListener(t, this._onBrushStart));
29843
+ array(updateTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushingWithDelay));
29844
+ array(endTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushEnd));
29845
+ array(resetTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushClear));
29864
29846
  }
29865
29847
  _computeMaskPoints() {
29866
29848
  const { brushType, xRange = [0, 0], yRange = [0, 0] } = this.attribute;
@@ -29929,12 +29911,30 @@ class Brush extends AbstractComponent {
29929
29911
  _addBrushMask() {
29930
29912
  var _a;
29931
29913
  const { brushStyle, hasMask } = this.attribute;
29932
- const brushMask = graphicCreator.polygon(Object.assign(Object.assign({ points: cloneDeep(this._cacheDrawPoints), cursor: 'move', pickable: false }, brushStyle), { opacity: hasMask ? (_a = brushStyle.opacity) !== null && _a !== void 0 ? _a : 1 : 0 }));
29914
+ const brushMask = graphicCreator.polygon(Object.assign(Object.assign({ points: cloneDeep(this._cacheDrawPoints), cursor: 'move', pickable: false }, brushStyle), { opacity: hasMask ? ((_a = brushStyle.opacity) !== null && _a !== void 0 ? _a : 1) : 0 }));
29933
29915
  brushMask.name = `brush-${Date.now()}`;
29934
29916
  this._operatingMask = brushMask;
29935
29917
  this._container.add(brushMask);
29936
29918
  this._brushMaskAABBBoundsDict[brushMask.name] = brushMask.AABBBounds;
29937
29919
  }
29920
+ _isPosInBrushMask(e) {
29921
+ const pos = this.eventPosToStagePos(e);
29922
+ const brushMasks = this._container.getChildren();
29923
+ for (let i = 0; i < brushMasks.length; i++) {
29924
+ const { points = [], dx = 0, dy = 0 } = brushMasks[i].attribute;
29925
+ const pointsConsiderOffset = points.map((point) => {
29926
+ return {
29927
+ x: point.x + dx,
29928
+ y: point.y + dy
29929
+ };
29930
+ });
29931
+ if (polygonContainPoint(pointsConsiderOffset, pos.x, pos.y)) {
29932
+ this._operatingMask = brushMasks[i];
29933
+ return true;
29934
+ }
29935
+ }
29936
+ return false;
29937
+ }
29938
29938
  _outOfInteractiveRange(e) {
29939
29939
  const { interactiveRange } = this.attribute;
29940
29940
  const { minY = -Infinity, maxY = Infinity, minX = -Infinity, maxX = Infinity } = interactiveRange;
@@ -29947,17 +29947,21 @@ class Brush extends AbstractComponent {
29947
29947
  eventPosToStagePos(e) {
29948
29948
  return this.stage.eventPointTransform(e);
29949
29949
  }
29950
- render() {
29951
- this._bindBrushEvents();
29952
- const group = this.createOrUpdateChild('brush-container', {}, 'group');
29953
- this._container = group;
29950
+ _dispatchBrushEvent(operateType, e) {
29951
+ this._dispatchEvent(operateType, {
29952
+ operateMask: this._operatingMask,
29953
+ operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
29954
+ event: e
29955
+ });
29954
29956
  }
29955
- releaseBrushEvents() {
29956
- const { delayType = 'throttle', delayTime = 0, trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger, updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger, endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger, resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger } = this.attribute;
29957
- array(trigger).forEach(t => vglobal.removeEventListener(t, this._onBrushStart));
29958
- array(updateTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushingWithDelay));
29959
- array(endTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushEnd));
29960
- array(resetTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushClear));
29957
+ _clearMask() {
29958
+ this._brushMaskAABBBoundsDict = {};
29959
+ this._container.incrementalClearChild();
29960
+ this._operatingMask = null;
29961
+ }
29962
+ _isEmptyMask() {
29963
+ return (isEmpty(this._brushMaskAABBBoundsDict) ||
29964
+ Object.keys(this._brushMaskAABBBoundsDict).every(key => this._brushMaskAABBBoundsDict[key].empty()));
29961
29965
  }
29962
29966
  }
29963
29967
  Brush.defaultAttributes = DEFAULT_BRUSH_ATTRIBUTES;
@@ -31500,6 +31504,6 @@ StoryLabelItem.defaultAttributes = {
31500
31504
  theme: 'default'
31501
31505
  };
31502
31506
 
31503
- const version = "0.22.7-alpha.0";
31507
+ const version = "0.22.7-alpha.10";
31504
31508
 
31505
31509
  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 };