@visactor/vrender-components 0.22.9-alpha.2 → 0.22.9

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/dist/index.es.js CHANGED
@@ -577,48 +577,6 @@ const EnvContribution = Symbol.for("EnvContribution");
577
577
  const VGlobal = Symbol.for("VGlobal");
578
578
  const DEFAULT_TEXT_FONT_FAMILY$1 = "PingFang SC,Helvetica Neue,Microsoft Yahei,system-ui,-apple-system,segoe ui,Roboto,Helvetica,Arial,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol";
579
579
 
580
- class EventListenerManager {
581
- constructor() {
582
- this._listenerMap = new Map(), this._eventListenerTransformer = event => event;
583
- }
584
- setEventListenerTransformer(transformer) {
585
- this._eventListenerTransformer = transformer || (event => event);
586
- }
587
- addEventListener(type, listener, options) {
588
- if (!listener) return;
589
- const wrappedListener = event => {
590
- const transformedEvent = this._eventListenerTransformer(event);
591
- "function" == typeof listener ? listener(transformedEvent) : listener.handleEvent && listener.handleEvent(transformedEvent);
592
- };
593
- this._listenerMap.has(type) || this._listenerMap.set(type, new Map()), this._listenerMap.get(type).set(listener, wrappedListener), this._nativeAddEventListener(type, wrappedListener, options);
594
- }
595
- removeEventListener(type, listener, options) {
596
- var _a;
597
- if (!listener) return;
598
- const wrappedListener = null === (_a = this._listenerMap.get(type)) || void 0 === _a ? void 0 : _a.get(listener);
599
- wrappedListener && (this._nativeRemoveEventListener(type, wrappedListener, options), this._listenerMap.get(type).delete(listener), 0 === this._listenerMap.get(type).size && this._listenerMap.delete(type));
600
- }
601
- dispatchEvent(event) {
602
- return this._nativeDispatchEvent(event);
603
- }
604
- clearAllEventListeners() {
605
- this._listenerMap.forEach((listenersMap, type) => {
606
- listenersMap.forEach((wrappedListener, originalListener) => {
607
- this._nativeRemoveEventListener(type, wrappedListener, void 0);
608
- });
609
- }), this._listenerMap.clear();
610
- }
611
- _nativeAddEventListener(type, listener, options) {
612
- throw new Error("_nativeAddEventListener must be implemented by derived classes");
613
- }
614
- _nativeRemoveEventListener(type, listener, options) {
615
- throw new Error("_nativeRemoveEventListener must be implemented by derived classes");
616
- }
617
- _nativeDispatchEvent(event) {
618
- throw new Error("_nativeDispatchEvent must be implemented by derived classes");
619
- }
620
- }
621
-
622
580
  var __decorate$P = undefined && undefined.__decorate || function (decorators, target, key, desc) {
623
581
  var d,
624
582
  c = arguments.length,
@@ -659,7 +617,7 @@ var __decorate$P = undefined && undefined.__decorate || function (decorators, ta
659
617
  step((generator = generator.apply(thisArg, _arguments || [])).next());
660
618
  });
661
619
  };
662
- let DefaultGlobal = class extends EventListenerManager {
620
+ let DefaultGlobal = class {
663
621
  get env() {
664
622
  return this._env;
665
623
  }
@@ -703,19 +661,10 @@ let DefaultGlobal = class extends EventListenerManager {
703
661
  this._env || this.setEnv("browser"), this.envContribution.applyStyles = support;
704
662
  }
705
663
  constructor(contributions) {
706
- super(), this.contributions = contributions, this._isImageAnonymous = !0, this.eventListenerTransformer = event => event, this.id = Generator.GenAutoIncrementId(), this.hooks = {
664
+ this.contributions = contributions, this._isImageAnonymous = !0, this.id = Generator.GenAutoIncrementId(), this.hooks = {
707
665
  onSetEnv: new SyncHook(["lastEnv", "env", "global"])
708
666
  }, this.measureTextMethod = "native", this.optimizeVisible = !1;
709
667
  }
710
- _nativeAddEventListener(type, listener, options) {
711
- return this._env || this.setEnv("browser"), this.envContribution.addEventListener(type, listener, options);
712
- }
713
- _nativeRemoveEventListener(type, listener, options) {
714
- return this._env || this.setEnv("browser"), this.envContribution.removeEventListener(type, listener, options);
715
- }
716
- _nativeDispatchEvent(event) {
717
- return this._env || this.setEnv("browser"), this.envContribution.dispatchEvent(event);
718
- }
719
668
  bindContribution(params) {
720
669
  const promiseArr = [];
721
670
  if (this.contributions.getContributions().forEach(contribution => {
@@ -756,6 +705,15 @@ let DefaultGlobal = class extends EventListenerManager {
756
705
  releaseCanvas(canvas) {
757
706
  return this._env || this.setEnv("browser"), this.envContribution.releaseCanvas(canvas);
758
707
  }
708
+ addEventListener(type, listener, options) {
709
+ return this._env || this.setEnv("browser"), this.envContribution.addEventListener(type, listener, options);
710
+ }
711
+ removeEventListener(type, listener, options) {
712
+ return this._env || this.setEnv("browser"), this.envContribution.removeEventListener(type, listener, options);
713
+ }
714
+ dispatchEvent(event) {
715
+ return this._env || this.setEnv("browser"), this.envContribution.dispatchEvent(event);
716
+ }
759
717
  getRequestAnimationFrame() {
760
718
  return this._env || this.setEnv("browser"), this.envContribution.getRequestAnimationFrame();
761
719
  }
@@ -1653,6 +1611,11 @@ let Step$1 = class Step {
1653
1611
  return this.context.tryUpdateLength();
1654
1612
  }
1655
1613
  };
1614
+ class StepClosed extends Step$1 {
1615
+ lineEnd() {
1616
+ this.context.closePath();
1617
+ }
1618
+ }
1656
1619
  function genStepSegments(points, t) {
1657
1620
  let params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
1658
1621
  const {
@@ -1666,6 +1629,16 @@ function genStepSegments(points, t) {
1666
1629
  function genStepTypeSegments(path, points) {
1667
1630
  return genCurveSegments(path, points);
1668
1631
  }
1632
+ function genStepClosedSegments(points, t) {
1633
+ let params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
1634
+ const {
1635
+ direction: direction,
1636
+ startPoint: startPoint
1637
+ } = params;
1638
+ if (points.length < 2 - Number(!!startPoint)) return null;
1639
+ const segContext = new SegContext("step", null != direction ? direction : abs(points[points.length - 1].x - points[0].x) > abs(points[points.length - 1].y - points[0].y) ? Direction$1.ROW : Direction$1.COLUMN);
1640
+ return genStepTypeSegments(new StepClosed(segContext, t, startPoint), points), segContext;
1641
+ }
1669
1642
 
1670
1643
  class LinearClosed extends Linear {
1671
1644
  lineEnd() {
@@ -1895,6 +1868,8 @@ function calcLineCache(points, curveType, params) {
1895
1868
  return genMonotoneYSegments(points, params);
1896
1869
  case "step":
1897
1870
  return genStepSegments(points, .5, params);
1871
+ case "stepClosed":
1872
+ return genStepClosedSegments(points, .5, params);
1898
1873
  case "stepBefore":
1899
1874
  return genStepSegments(points, 0, params);
1900
1875
  case "stepAfter":
@@ -3417,7 +3392,7 @@ var __decorate$M = undefined && undefined.__decorate || function (decorators, ta
3417
3392
  };
3418
3393
  const VWindow = Symbol.for("VWindow");
3419
3394
  const WindowHandlerContribution = Symbol.for("WindowHandlerContribution");
3420
- let DefaultWindow = class extends EventListenerManager {
3395
+ let DefaultWindow = class {
3421
3396
  get width() {
3422
3397
  if (this._handler) {
3423
3398
  const wh = this._handler.getWH();
@@ -3436,7 +3411,7 @@ let DefaultWindow = class extends EventListenerManager {
3436
3411
  return this._handler.getDpr();
3437
3412
  }
3438
3413
  constructor() {
3439
- super(), this.hooks = {
3414
+ this.hooks = {
3440
3415
  onChange: new SyncHook(["x", "y", "width", "height"])
3441
3416
  }, this.active = () => {
3442
3417
  const global = this.global;
@@ -3444,15 +3419,6 @@ let DefaultWindow = class extends EventListenerManager {
3444
3419
  container.getNamed(WindowHandlerContribution, global.env).configure(this, global), this.actived = !0;
3445
3420
  }, this._uid = Generator.GenAutoIncrementId(), this.global = application.global, this.postInit();
3446
3421
  }
3447
- _nativeAddEventListener(type, listener, options) {
3448
- return this._handler.addEventListener(type, listener, options);
3449
- }
3450
- _nativeRemoveEventListener(type, listener, options) {
3451
- return this._handler.removeEventListener(type, listener, options);
3452
- }
3453
- _nativeDispatchEvent(event) {
3454
- return this._handler.dispatchEvent(event);
3455
- }
3456
3422
  postInit() {
3457
3423
  this.global.hooks.onSetEnv.tap("window", this.active), this.active();
3458
3424
  }
@@ -3492,7 +3458,7 @@ let DefaultWindow = class extends EventListenerManager {
3492
3458
  throw new Error("暂不支持");
3493
3459
  }
3494
3460
  release() {
3495
- return this.global.hooks.onSetEnv.unTap("window", this.active), this.clearAllEventListeners(), this._handler.releaseWindow();
3461
+ return this.global.hooks.onSetEnv.unTap("window", this.active), this._handler.releaseWindow();
3496
3462
  }
3497
3463
  getContext() {
3498
3464
  return this._handler.getContext();
@@ -3503,6 +3469,15 @@ let DefaultWindow = class extends EventListenerManager {
3503
3469
  getImageBuffer(type) {
3504
3470
  return this._handler.getImageBuffer ? this._handler.getImageBuffer(type) : null;
3505
3471
  }
3472
+ addEventListener(type, listener, options) {
3473
+ return this._handler.addEventListener(type, listener, options);
3474
+ }
3475
+ removeEventListener(type, listener, options) {
3476
+ return this._handler.removeEventListener(type, listener, options);
3477
+ }
3478
+ dispatchEvent(event) {
3479
+ return this._handler.dispatchEvent(event);
3480
+ }
3506
3481
  getBoundingClientRect() {
3507
3482
  return this._handler.getBoundingClientRect();
3508
3483
  }
@@ -5667,7 +5642,7 @@ class RectSymbol extends BaseSymbol {
5667
5642
  }
5668
5643
  var rect = new RectSymbol();
5669
5644
 
5670
- const tempBounds$1 = new AABBBounds();
5645
+ const tempBounds = new AABBBounds();
5671
5646
  class CustomSymbolClass {
5672
5647
  constructor(type, path) {
5673
5648
  let isSvg = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : !1;
@@ -5696,7 +5671,7 @@ class CustomSymbolClass {
5696
5671
  let {
5697
5672
  path: path
5698
5673
  } = _ref;
5699
- tempBounds$1.x1 = path.bounds.x1 * size, tempBounds$1.y1 = path.bounds.y1 * size, tempBounds$1.x2 = path.bounds.x2 * size, tempBounds$1.y2 = path.bounds.y2 * size, bounds.union(tempBounds$1);
5674
+ tempBounds.x1 = path.bounds.x1 * size, tempBounds.y1 = path.bounds.y1 * size, tempBounds.x2 = path.bounds.x2 * size, tempBounds.y2 = path.bounds.y2 * size, bounds.union(tempBounds);
5700
5675
  });
5701
5676
  }
5702
5677
  this.path.bounds && (bounds.x1 = this.path.bounds.x1 * size, bounds.y1 = this.path.bounds.y1 * size, bounds.x2 = this.path.bounds.x2 * size, bounds.y2 = this.path.bounds.y2 * size);
@@ -6010,8 +5985,8 @@ const SVG_PARSE_ATTRIBUTE_MAP = {
6010
5985
  const SVG_PARSE_ATTRIBUTE_MAP_KEYS = Object.keys(SVG_PARSE_ATTRIBUTE_MAP);
6011
5986
 
6012
5987
  const _tempBounds = new AABBBounds(),
6013
- tempMatrix = new Matrix(),
6014
- tempBounds = new AABBBounds();
5988
+ tempMatrix = new Matrix();
5989
+ new AABBBounds();
6015
5990
  const GRAPHIC_UPDATE_TAG_KEY = ["lineWidth", "scaleX", "scaleY", "angle", "anchor", "visible"];
6016
5991
  const tempConstantXYKey = ["x", "y"],
6017
5992
  tempConstantScaleXYKey = ["scaleX", "scaleY"],
@@ -6530,25 +6505,12 @@ class Graphic extends Node {
6530
6505
  needUpdateLayout() {
6531
6506
  return !!(this._updateTag & UpdateTag.UPDATE_LAYOUT);
6532
6507
  }
6533
- getAnchor(anchor, params) {
6508
+ getAnchor(anchor, params, resetScale) {
6534
6509
  const _anchor = [0, 0],
6535
6510
  getBounds = () => {
6536
6511
  if (params.b) return params.b;
6537
- const {
6538
- scaleX: scaleX,
6539
- scaleY: scaleY,
6540
- angle: angle,
6541
- scaleCenter: scaleCenter
6542
- } = this.attribute;
6543
- return tempBounds.copy(this._AABBBounds), this.setAttributes({
6544
- angle: 0,
6545
- scaleCenter: null
6546
- }), params.b = this.AABBBounds.clone(), this._AABBBounds.copy(tempBounds), this.setAttributes({
6547
- scaleX: scaleX,
6548
- scaleY: scaleY,
6549
- angle: angle,
6550
- scaleCenter: scaleCenter
6551
- }), params.b;
6512
+ const graphic = this.clone();
6513
+ return graphic.attribute.angle = 0, graphic.attribute.scaleCenter = null, resetScale && (graphic.attribute.scaleX = 1, graphic.attribute.scaleY = 1), params.b = graphic.AABBBounds, params.b;
6552
6514
  };
6553
6515
  if ("string" == typeof anchor[0]) {
6554
6516
  const ratio = parseFloat(anchor[0]) / 100,
@@ -6577,7 +6539,7 @@ class Graphic extends Node {
6577
6539
  const params = {};
6578
6540
  if (anchor && angle && (_anchor = this.getAnchor(anchor, params)), !scaleCenter || 1 === scaleX && 1 === scaleY) normalTransform(this._transMatrix, this._transMatrix.reset(), x, y, scaleX, scaleY, angle, anchor && _anchor);else {
6579
6541
  const m = this._transMatrix;
6580
- m.reset(), m.translate(_anchor[0], _anchor[1]), m.rotate(angle), m.translate(-_anchor[0], -_anchor[1]), m.translate(x, y), _anchor = this.getAnchor(scaleCenter, params), application.transformUtil.fromMatrix(m, m).scale(scaleX, scaleY, {
6542
+ m.reset(), m.translate(_anchor[0], _anchor[1]), m.rotate(angle), m.translate(-_anchor[0], -_anchor[1]), m.translate(x, y), _anchor = this.getAnchor(scaleCenter, params, !0), application.transformUtil.fromMatrix(m, m).scale(scaleX, scaleY, {
6581
6543
  x: _anchor[0],
6582
6544
  y: _anchor[1]
6583
6545
  });
@@ -23186,7 +23148,8 @@ class DataZoom extends AbstractComponent {
23186
23148
  this._activeCache.lastPos = this.eventPosToStagePos(e);
23187
23149
  const evtTarget = vglobal.env === 'browser' ? vglobal : this.stage;
23188
23150
  const triggers = getEndTriggersOfDrag();
23189
- evtTarget.addEventListener('pointermove', this._onHandlerPointerMove, { capture: true, passive: false });
23151
+ evtTarget.addEventListener('pointermove', this._onHandlerPointerMove, { capture: true });
23152
+ this.addEventListener('pointermove', this._onHandlerPointerMove, { capture: true });
23190
23153
  triggers.forEach((trigger) => {
23191
23154
  evtTarget.addEventListener(trigger, this._onHandlerPointerUp);
23192
23155
  });
@@ -23222,12 +23185,12 @@ class DataZoom extends AbstractComponent {
23222
23185
  end = end + dis;
23223
23186
  }
23224
23187
  }
23188
+ this._activeCache.lastPos = pos;
23225
23189
  brushSelect && this.renderDragMask();
23226
23190
  }
23227
23191
  start = Math.min(Math.max(start, 0), 1);
23228
23192
  end = Math.min(Math.max(end, 0), 1);
23229
23193
  if (startAttr !== start || endAttr !== end) {
23230
- this._activeCache.lastPos = pos;
23231
23194
  this.setStateAttr(start, end, true);
23232
23195
  if (realTime) {
23233
23196
  this._dispatchEvent('change', {
@@ -23341,10 +23304,11 @@ class DataZoom extends AbstractComponent {
23341
23304
  _clearDragEvents() {
23342
23305
  const evtTarget = vglobal.env === 'browser' ? vglobal : this.stage;
23343
23306
  const triggers = getEndTriggersOfDrag();
23344
- evtTarget.removeEventListener('pointermove', this._onHandlerPointerMove, { capture: true, passive: false });
23307
+ evtTarget.removeEventListener('pointermove', this._onHandlerPointerMove, { capture: true });
23345
23308
  triggers.forEach((trigger) => {
23346
23309
  evtTarget.removeEventListener(trigger, this._onHandlerPointerUp);
23347
23310
  });
23311
+ this.removeEventListener('pointermove', this._onHandlerPointerMove, { capture: true });
23348
23312
  }
23349
23313
  _onHandlerPointerEnter(e) {
23350
23314
  this._showText = true;
@@ -29832,6 +29796,7 @@ class Brush extends AbstractComponent {
29832
29796
  this._activeMoveState = brushMoved && this._isPosInBrushMask(e);
29833
29797
  this._activeDrawState = !this._activeMoveState;
29834
29798
  this._startPos = this.eventPosToStagePos(e);
29799
+ this._cacheDrawPoints = [this._startPos];
29835
29800
  };
29836
29801
  this._onBrushing = (e) => {
29837
29802
  if (this._outOfInteractiveRange(e)) {
@@ -29882,7 +29847,7 @@ class Brush extends AbstractComponent {
29882
29847
  _initDraw(e) {
29883
29848
  const { brushMode } = this.attribute;
29884
29849
  const pos = this.eventPosToStagePos(e);
29885
- this._cacheDrawPoints = [pos];
29850
+ this._cacheDrawPoints.push(pos);
29886
29851
  brushMode === 'single' && this._clearMask();
29887
29852
  this._addBrushMask();
29888
29853
  this._dispatchBrushEvent(IOperateType.drawStart, e);
@@ -31661,6 +31626,6 @@ StoryLabelItem.defaultAttributes = {
31661
31626
  theme: 'default'
31662
31627
  };
31663
31628
 
31664
- const version = "0.22.9-alpha.2";
31629
+ const version = "0.22.9";
31665
31630
 
31666
31631
  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 };
package/es/brush/brush.js CHANGED
@@ -30,7 +30,8 @@ export class Brush extends AbstractComponent {
30
30
  array(updateTrigger).forEach((t => this.stage.addEventListener(t, this._onBrushingWithDelay))),
31
31
  array(endTrigger).forEach((t => this.stage.addEventListener(t, this._onBrushEnd))),
32
32
  e.stopPropagation(), this._firstUpdate = !0, this._activeMoveState = brushMoved && this._isPosInBrushMask(e),
33
- this._activeDrawState = !this._activeMoveState, this._startPos = this.eventPosToStagePos(e);
33
+ this._activeDrawState = !this._activeMoveState, this._startPos = this.eventPosToStagePos(e),
34
+ this._cacheDrawPoints = [ this._startPos ];
34
35
  }, this._onBrushing = e => {
35
36
  this._outOfInteractiveRange(e) || (e.stopPropagation(), this._firstUpdate ? (this._activeDrawState && this._initDraw(e),
36
37
  this._activeMoveState && this._initMove(e), this._firstUpdate = !1) : (this._activeDrawState && this._drawing(e),
@@ -52,7 +53,7 @@ export class Brush extends AbstractComponent {
52
53
  }
53
54
  _initDraw(e) {
54
55
  const {brushMode: brushMode} = this.attribute, pos = this.eventPosToStagePos(e);
55
- this._cacheDrawPoints = [ pos ], "single" === brushMode && this._clearMask(), this._addBrushMask(),
56
+ this._cacheDrawPoints.push(pos), "single" === brushMode && this._clearMask(), this._addBrushMask(),
56
57
  this._dispatchBrushEvent(IOperateType.drawStart, e), 1 === Object.keys(this._brushMaskAABBBoundsDict).length && this._dispatchBrushEvent(IOperateType.brushActive, e);
57
58
  }
58
59
  _initMove(e) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/brush/brush.ts"],"names":[],"mappings":"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","file":"brush.js","sourcesContent":["/**\n * @description 框选组件\n */\nimport type { FederatedPointerEvent, IGroup, IPolygon } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport type { IBounds, IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { array, cloneDeep, debounce, isEmpty, merge, polygonContainPoint, throttle } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { BrushAttributes } from './type';\n// eslint-disable-next-line no-duplicate-imports\nimport { IOperateType } from './type';\nimport { DEFAULT_BRUSH_ATTRIBUTES, DEFAULT_SIZE_THRESHOLD } from './config';\nimport type { ComponentOptions } from '../interface';\nimport { loadBrushComponent } from './register';\n\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\n\nloadBrushComponent();\nexport class Brush extends AbstractComponent<Required<BrushAttributes>> {\n name = 'brush';\n static defaultAttributes = DEFAULT_BRUSH_ATTRIBUTES;\n\n private _container!: IGroup;\n\n // 绘制mask时的相关属性\n private _activeDrawState = false; // 用于标记绘制状态\n private _cacheDrawPoints: IPointLike[] = []; // 用于维护鼠标走过的路径,主要用于绘制mask的点\n // 移动mask时的相关属性\n private _activeMoveState = false; // 用于标记移动状态\n private _operatingMaskMoveDx = 0; // 用于标记移动的位移量\n private _operatingMaskMoveDy = 0;\n private _operatingMaskMoveRangeX: [number, number] = [-Infinity, Infinity];\n private _operatingMaskMoveRangeY: [number, number] = [-Infinity, Infinity];\n private _cacheMovePoint!: IPointLike; // 用于维护鼠标所在位置,主要用于计算位移量\n\n private _operatingMask!: IPolygon; // 用于标记正在绘制的mask 或 正在移动的mask\n\n // 透出给上层的属性(主要是所有mask的AABBBounds,这里用的是dict存储方便添加和修改)\n private _brushMaskAABBBoundsDict: { [name: string]: IBounds } = {};\n\n private _firstUpdate = true; // 用于标记第一次更新\n private _startPos!: IPointLike; // 用于标记开始绘制的位置\n\n constructor(attributes: BrushAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Brush.defaultAttributes, attributes));\n }\n\n private _bindBrushEvents(): void {\n // 绑定前先解绑, 确保事件不会重复绑定\n this.releaseBrushEvents();\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n const { trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger, resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger } = this\n .attribute as BrushAttributes;\n array(trigger).forEach(t => this.stage.addEventListener(t, this._onBrushStart as EventListener));\n array(resetTrigger).forEach(t => this.stage.addEventListener(t, this._onBrushClear as EventListener));\n }\n\n /**\n * 开始绘制 或 移动\n * @description\n * 1. 判断状态: 如果在brushMask中,则属于移动状态; 否则属于绘制状态\n *(移动状态和绘制状态互斥, 且移动状态考虑brushMoved配置, 如果在brush点内但brushMoved为false, 则走绘制状态, 而非两个状态都不响应, 此效果与echarts保持一致)\n * 2. 判断坐标是否在有效交互范围内\n * 2. 如果是移动状态: 标记移动状态 & 标记正在移动的mask & 初始化mask的dx和dy\n * 3. 如果是绘制状态: 标记绘制状态 & 标记正在绘制的mask & 清除之前的mask & 添加新的mask\n */\n private _onBrushStart = (e: FederatedPointerEvent) => {\n if (this._outOfInteractiveRange(e)) {\n if (!this._isEmptyMask()) {\n this._clearMask();\n this._dispatchBrushEvent(IOperateType.brushClear, e);\n }\n return;\n }\n const {\n updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger,\n endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger,\n brushMoved = true\n } = this.attribute as BrushAttributes;\n array(updateTrigger).forEach(t => this.stage.addEventListener(t, this._onBrushingWithDelay as EventListener));\n array(endTrigger).forEach(t => this.stage.addEventListener(t, this._onBrushEnd as EventListener));\n\n e.stopPropagation();\n this._firstUpdate = true;\n this._activeMoveState = brushMoved && this._isPosInBrushMask(e); // 如果是移动状态,在这里会标记operatingMask为正在移动的mask\n this._activeDrawState = !this._activeMoveState;\n this._startPos = this.eventPosToStagePos(e);\n };\n\n /**\n * 绘制 或 移动 中\n * @description\n * 1. 如果是绘制状态: 更新_cacheDrawPoints 和 mask的points属性\n * 2. 如果是移动状态: 标记移动状态 & 计算位移量 & 给被移动的mask偏移属性\n */\n private _onBrushing = (e: FederatedPointerEvent) => {\n if (this._outOfInteractiveRange(e)) {\n return;\n }\n e.stopPropagation();\n if (this._firstUpdate) {\n this._activeDrawState && this._initDraw(e);\n this._activeMoveState && this._initMove(e);\n this._firstUpdate = false;\n } else {\n this._activeDrawState && this._drawing(e);\n this._activeMoveState && this._moving(e);\n }\n };\n\n private _onBrushingWithDelay =\n this.attribute.delayTime === 0\n ? this._onBrushing\n : delayMap[this.attribute.delayType](this._onBrushing, this.attribute.delayTime);\n\n /**\n * 结束绘制 和 移动\n * @description 取消绘制 和 移动 状态\n */\n private _onBrushEnd = (e: FederatedPointerEvent) => {\n this._releaseBrushUpdateEvents();\n e.preventDefault();\n this._activeDrawState && this._drawEnd(e);\n this._activeMoveState && this._moveEnd(e);\n\n this._activeDrawState = false;\n this._activeMoveState = false;\n };\n\n private _onBrushClear = (e: FederatedPointerEvent) => {\n e.preventDefault();\n if (!this._isEmptyMask()) {\n this._clearMask();\n this._dispatchBrushEvent(IOperateType.brushClear, e);\n }\n this._activeDrawState = false;\n this._activeMoveState = false;\n };\n\n /**\n * 初始化绘制状态\n * @description 清除之前的mask & 添加新的mask\n */\n private _initDraw(e: FederatedPointerEvent) {\n const { brushMode } = this.attribute as BrushAttributes;\n const pos = this.eventPosToStagePos(e);\n this._cacheDrawPoints = [pos];\n brushMode === 'single' && this._clearMask();\n this._addBrushMask();\n this._dispatchBrushEvent(IOperateType.drawStart, e);\n // 无论是多选,还是单选\n // 如果这是第一个brush mask\n // 证明这第一次绘制, 则触发brushActive事件\n if (Object.keys(this._brushMaskAABBBoundsDict).length === 1) {\n this._dispatchBrushEvent(IOperateType.brushActive, e);\n }\n }\n\n /**\n * 初始化移动状态\n * @description 初始化mask的dx和dy\n */\n private _initMove(e: FederatedPointerEvent) {\n this._cacheMovePoint = this.eventPosToStagePos(e);\n\n this._operatingMaskMoveDx = this._operatingMask.attribute.dx ?? 0;\n this._operatingMaskMoveDy = this._operatingMask.attribute.dy ?? 0;\n\n // 计算最大移动范围, 为了将brushMask限制在交互范围内\n const { interactiveRange } = this.attribute as BrushAttributes;\n const { minY = -Infinity, maxY = Infinity, minX = -Infinity, maxX = Infinity } = interactiveRange;\n\n const { x1, x2, y1, y2 } = this._operatingMask.globalAABBBounds;\n const minMoveStepX = minX - x1;\n const maxMoveStepX = maxX - x2;\n const minMoveStepY = minY - y1;\n const maxMoveStepY = maxY - y2;\n\n this._operatingMaskMoveRangeX = [minMoveStepX, maxMoveStepX];\n this._operatingMaskMoveRangeY = [minMoveStepY, maxMoveStepY];\n\n this._operatingMask.setAttribute('pickable', true);\n this._dispatchBrushEvent(IOperateType.moveStart, e);\n }\n\n /**\n * 绘制中\n * @description 更新_cacheDrawPoints 和 mask的points属性\n */\n private _drawing(e: FederatedPointerEvent) {\n const pos = this.eventPosToStagePos(e);\n const { brushType } = this.attribute as BrushAttributes;\n\n const cacheLength = this._cacheDrawPoints.length;\n\n // 如果当前点的位置和上一次点的位置一致,则无需更新\n if (cacheLength > 0) {\n const lastPos = this._cacheDrawPoints[this._cacheDrawPoints.length - 1] ?? ({} as IPointLike);\n if (pos.x === lastPos.x && pos.y === lastPos.y) {\n return;\n }\n }\n // 更新交互位置\n if (brushType === 'polygon' || cacheLength <= 1) {\n this._cacheDrawPoints.push(pos);\n } else {\n this._cacheDrawPoints[cacheLength - 1] = pos;\n }\n // 更新mask形状\n const maskPoints = this._computeMaskPoints();\n this._operatingMask.setAttribute('points', maskPoints);\n this._dispatchBrushEvent(IOperateType.drawing, e);\n }\n\n /**\n * 移动中\n * @description 标记移动状态 & 计算位移量 & 给被移动的mask偏移属性\n */\n private _moving(e: FederatedPointerEvent) {\n const startPos = this._cacheMovePoint;\n const pos = this.eventPosToStagePos(e);\n // 如果当前点的位置和上一次点的位置一致,则无需更新\n if (pos.x === startPos?.x && pos.y === startPos?.y) {\n return;\n }\n\n const moveStepX = pos.x - startPos.x;\n const moveStepY = pos.y - startPos.y;\n const moveX =\n Math.min(this._operatingMaskMoveRangeX[1], Math.max(this._operatingMaskMoveRangeX[0], moveStepX)) +\n this._operatingMaskMoveDx;\n const moveY =\n Math.min(this._operatingMaskMoveRangeY[1], Math.max(this._operatingMaskMoveRangeY[0], moveStepY)) +\n this._operatingMaskMoveDy;\n\n this._operatingMask.setAttributes({\n dx: moveX,\n dy: moveY\n });\n this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds;\n this._dispatchBrushEvent(IOperateType.moving, e);\n }\n\n private _drawEnd(e: FederatedPointerEvent) {\n const { removeOnClick = true, sizeThreshold = DEFAULT_SIZE_THRESHOLD } = this.attribute as BrushAttributes;\n if (this._outOfInteractiveRange(e)) {\n if (!this._isEmptyMask()) {\n this._clearMask();\n this._dispatchBrushEvent(IOperateType.brushClear, e);\n }\n } else {\n const { x: x1, y: y1 } = this._startPos;\n const { x: x2, y: y2 } = this.eventPosToStagePos(e);\n // 1. 无效绘制: 单击\n if (Math.abs(x2 - x1) <= 1 && Math.abs(y2 - y1) <= 1 && removeOnClick) {\n if (!this._isEmptyMask()) {\n this._clearMask();\n this._dispatchBrushEvent(IOperateType.brushClear, e);\n }\n }\n // 2. 无效绘制: 绘制了mask但没有超过阈值, 仅清空当前操作的mask\n else if (Math.abs(x2 - x1) < sizeThreshold && Math.abs(y1 - y2) < sizeThreshold) {\n delete this._brushMaskAABBBoundsDict[this._operatingMask.name];\n this._container.setAttributes({}); // hack逻辑, 待优化: removeChild后, vrender 无法 autoRender, setAttr手动触发render\n this._container.removeChild(this._operatingMask);\n if (this._isEmptyMask()) {\n // 说明是最后一个mask被清空了, 要抛出clear事件, 重置图元状态\n this._dispatchBrushEvent(IOperateType.brushClear, e);\n } else {\n // 说明还有其他mask, 这次无效绘制不会重置状态\n // do nothing\n }\n }\n // 3. 有效绘制\n else {\n this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds;\n this._dispatchBrushEvent(IOperateType.drawEnd, e);\n }\n }\n }\n\n private _moveEnd(e: FederatedPointerEvent) {\n if (this._operatingMask) {\n this._operatingMask.setAttribute('pickable', false);\n }\n this._dispatchBrushEvent(IOperateType.moveEnd, e);\n }\n\n protected render() {\n this._bindBrushEvents();\n const group = this.createOrUpdateChild('brush-container', {}, 'group') as unknown as IGroup;\n this._container = group;\n }\n\n releaseBrushEvents(): void {\n const { trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger, resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger } = this\n .attribute as BrushAttributes;\n array(trigger).forEach(t => this.stage.removeEventListener(t, this._onBrushStart as EventListener));\n array(resetTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushClear as EventListener));\n this._releaseBrushUpdateEvents();\n }\n\n private _releaseBrushUpdateEvents(): void {\n const { updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger, endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger } =\n this.attribute as BrushAttributes;\n array(updateTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushingWithDelay as EventListener));\n array(endTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushEnd as EventListener));\n }\n\n /**\n * 构造brushMask的points属性\n * @description 根据不同的brushType从_cacheDrawPoints中取points\n * 1. 'rect': 只取鼠标轨迹_cacheDrawPoints的第一个点和最后一个点\n * 2. 'x': 只取鼠标轨迹_cacheDrawPoints的第一个点和最后一个点的x坐标\n * 3. 'y': 只取鼠标轨迹_cacheDrawPoints的第一个点和最后一个点的y坐标\n * 4. 'polygon': 取鼠标轨迹_cacheDrawPoints的所有点\n */\n private _computeMaskPoints() {\n const { brushType, xRange = [0, 0], yRange = [0, 0] } = this.attribute as BrushAttributes;\n let maskPoints: IPointLike[] = [];\n const startPoint = this._cacheDrawPoints[0];\n const endPoint = this._cacheDrawPoints[this._cacheDrawPoints.length - 1];\n\n if (brushType === 'rect') {\n maskPoints = [\n startPoint,\n {\n x: endPoint.x,\n y: startPoint.y\n },\n endPoint,\n {\n x: startPoint.x,\n y: endPoint.y\n }\n ];\n } else if (brushType === 'x') {\n maskPoints = [\n {\n x: startPoint.x,\n y: yRange[0]\n },\n {\n x: endPoint.x,\n y: yRange[0]\n },\n {\n x: endPoint.x,\n y: yRange[1]\n },\n {\n x: startPoint.x,\n y: yRange[1]\n }\n ];\n } else if (brushType === 'y') {\n maskPoints = [\n {\n x: xRange[0],\n y: startPoint.y\n },\n {\n x: xRange[0],\n y: endPoint.y\n },\n {\n x: xRange[1],\n y: endPoint.y\n },\n {\n x: xRange[1],\n y: startPoint.y\n }\n ];\n } else {\n maskPoints = cloneDeep(this._cacheDrawPoints); // _cacheDrawPoints在不断更新,所以这里需要cloneDeep\n }\n return maskPoints;\n }\n\n /**\n * 添加brushMask\n */\n private _addBrushMask() {\n const { brushStyle, hasMask } = this.attribute as BrushAttributes;\n const brushMask = graphicCreator.polygon({\n points: cloneDeep(this._cacheDrawPoints), // _cacheDrawPoints在不断更新,所以这里需要cloneDeep\n cursor: 'move',\n pickable: false,\n ...brushStyle,\n opacity: hasMask ? (brushStyle.opacity ?? 1) : 0\n });\n brushMask.name = `brush-${Date.now()}`; // 用Date给mask唯一标记\n this._operatingMask = brushMask;\n this._container.add(brushMask);\n this._brushMaskAABBBoundsDict[brushMask.name] = brushMask.AABBBounds;\n }\n\n /**\n * 遍历_container的所有子元素,判断鼠标是否在子元素的范围内\n */\n private _isPosInBrushMask(e: FederatedPointerEvent) {\n const pos = this.eventPosToStagePos(e);\n const brushMasks = this._container.getChildren();\n for (let i = 0; i < brushMasks.length; i++) {\n const { points = [], dx = 0, dy = 0 } = (brushMasks[i] as IPolygon).attribute;\n const pointsConsiderOffset: IPointLike[] = points.map((point: IPointLike) => {\n return {\n x: point.x + dx,\n y: point.y + dy\n };\n });\n if (polygonContainPoint(pointsConsiderOffset, pos.x, pos.y)) {\n this._operatingMask = brushMasks[i] as IPolygon;\n return true;\n }\n }\n return false;\n }\n\n /**\n * 判断鼠标是否在交互范围内\n */\n private _outOfInteractiveRange(e: FederatedPointerEvent) {\n // 在返回坐标时,将其限制在交互范围内\n const { interactiveRange } = this.attribute as BrushAttributes;\n const { minY = -Infinity, maxY = Infinity, minX = -Infinity, maxX = Infinity } = interactiveRange;\n const pos = this.eventPosToStagePos(e);\n if (pos.x > maxX || pos.x < minX || pos.y > maxY || pos.y < minY) {\n return true;\n }\n return false;\n }\n\n /**\n * 事件系统坐标转换为stage坐标\n */\n protected eventPosToStagePos(e: FederatedPointerEvent) {\n return this.stage.eventPointTransform(e);\n }\n\n /**\n * 根据操作类型触发对应的事件\n */\n private _dispatchBrushEvent(operateType: IOperateType, e: any) {\n this._dispatchEvent(operateType, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n\n /**\n * 重置brush状态\n */\n private _clearMask() {\n this._brushMaskAABBBoundsDict = {};\n this._container.incrementalClearChild();\n this._operatingMask = null;\n }\n\n /**\n * 判断当前画布中,是否存在有效mask\n */\n private _isEmptyMask() {\n return (\n isEmpty(this._brushMaskAABBBoundsDict) ||\n Object.keys(this._brushMaskAABBBoundsDict).every(key => this._brushMaskAABBBoundsDict[key].empty())\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/brush/brush.ts"],"names":[],"mappings":"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","file":"brush.js","sourcesContent":["/**\n * @description 框选组件\n */\nimport type { FederatedPointerEvent, IGroup, IPolygon } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport type { IBounds, IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { array, cloneDeep, debounce, isEmpty, merge, polygonContainPoint, throttle } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { BrushAttributes } from './type';\n// eslint-disable-next-line no-duplicate-imports\nimport { IOperateType } from './type';\nimport { DEFAULT_BRUSH_ATTRIBUTES, DEFAULT_SIZE_THRESHOLD } from './config';\nimport type { ComponentOptions } from '../interface';\nimport { loadBrushComponent } from './register';\n\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\n\nloadBrushComponent();\nexport class Brush extends AbstractComponent<Required<BrushAttributes>> {\n name = 'brush';\n static defaultAttributes = DEFAULT_BRUSH_ATTRIBUTES;\n\n private _container!: IGroup;\n\n // 绘制mask时的相关属性\n private _activeDrawState = false; // 用于标记绘制状态\n private _cacheDrawPoints: IPointLike[] = []; // 用于维护鼠标走过的路径,主要用于绘制mask的点\n // 移动mask时的相关属性\n private _activeMoveState = false; // 用于标记移动状态\n private _operatingMaskMoveDx = 0; // 用于标记移动的位移量\n private _operatingMaskMoveDy = 0;\n private _operatingMaskMoveRangeX: [number, number] = [-Infinity, Infinity];\n private _operatingMaskMoveRangeY: [number, number] = [-Infinity, Infinity];\n private _cacheMovePoint!: IPointLike; // 用于维护鼠标所在位置,主要用于计算位移量\n\n private _operatingMask!: IPolygon; // 用于标记正在绘制的mask 或 正在移动的mask\n\n // 透出给上层的属性(主要是所有mask的AABBBounds,这里用的是dict存储方便添加和修改)\n private _brushMaskAABBBoundsDict: { [name: string]: IBounds } = {};\n\n private _firstUpdate = true; // 用于标记第一次更新\n private _startPos!: IPointLike; // 用于标记开始绘制的位置\n\n constructor(attributes: BrushAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Brush.defaultAttributes, attributes));\n }\n\n private _bindBrushEvents(): void {\n // 绑定前先解绑, 确保事件不会重复绑定\n this.releaseBrushEvents();\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n const { trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger, resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger } = this\n .attribute as BrushAttributes;\n array(trigger).forEach(t => this.stage.addEventListener(t, this._onBrushStart as EventListener));\n array(resetTrigger).forEach(t => this.stage.addEventListener(t, this._onBrushClear as EventListener));\n }\n\n /**\n * 开始绘制 或 移动\n * @description\n * 1. 判断状态: 如果在brushMask中,则属于移动状态; 否则属于绘制状态\n *(移动状态和绘制状态互斥, 且移动状态考虑brushMoved配置, 如果在brush点内但brushMoved为false, 则走绘制状态, 而非两个状态都不响应, 此效果与echarts保持一致)\n * 2. 判断坐标是否在有效交互范围内\n * 2. 如果是移动状态: 标记移动状态 & 标记正在移动的mask & 初始化mask的dx和dy\n * 3. 如果是绘制状态: 标记绘制状态 & 标记正在绘制的mask & 清除之前的mask & 添加新的mask\n */\n private _onBrushStart = (e: FederatedPointerEvent) => {\n if (this._outOfInteractiveRange(e)) {\n if (!this._isEmptyMask()) {\n this._clearMask();\n this._dispatchBrushEvent(IOperateType.brushClear, e);\n }\n return;\n }\n const {\n updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger,\n endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger,\n brushMoved = true\n } = this.attribute as BrushAttributes;\n array(updateTrigger).forEach(t => this.stage.addEventListener(t, this._onBrushingWithDelay as EventListener));\n array(endTrigger).forEach(t => this.stage.addEventListener(t, this._onBrushEnd as EventListener));\n\n e.stopPropagation();\n this._firstUpdate = true;\n this._activeMoveState = brushMoved && this._isPosInBrushMask(e); // 如果是移动状态,在这里会标记operatingMask为正在移动的mask\n this._activeDrawState = !this._activeMoveState;\n this._startPos = this.eventPosToStagePos(e);\n this._cacheDrawPoints = [this._startPos];\n };\n\n /**\n * 绘制 或 移动 中\n * @description\n * 1. 如果是绘制状态: 更新_cacheDrawPoints 和 mask的points属性\n * 2. 如果是移动状态: 标记移动状态 & 计算位移量 & 给被移动的mask偏移属性\n */\n private _onBrushing = (e: FederatedPointerEvent) => {\n if (this._outOfInteractiveRange(e)) {\n return;\n }\n e.stopPropagation();\n if (this._firstUpdate) {\n this._activeDrawState && this._initDraw(e);\n this._activeMoveState && this._initMove(e);\n this._firstUpdate = false;\n } else {\n this._activeDrawState && this._drawing(e);\n this._activeMoveState && this._moving(e);\n }\n };\n\n private _onBrushingWithDelay =\n this.attribute.delayTime === 0\n ? this._onBrushing\n : delayMap[this.attribute.delayType](this._onBrushing, this.attribute.delayTime);\n\n /**\n * 结束绘制 和 移动\n * @description 取消绘制 和 移动 状态\n */\n private _onBrushEnd = (e: FederatedPointerEvent) => {\n this._releaseBrushUpdateEvents();\n e.preventDefault();\n this._activeDrawState && this._drawEnd(e);\n this._activeMoveState && this._moveEnd(e);\n\n this._activeDrawState = false;\n this._activeMoveState = false;\n };\n\n private _onBrushClear = (e: FederatedPointerEvent) => {\n e.preventDefault();\n if (!this._isEmptyMask()) {\n this._clearMask();\n this._dispatchBrushEvent(IOperateType.brushClear, e);\n }\n this._activeDrawState = false;\n this._activeMoveState = false;\n };\n\n /**\n * 初始化绘制状态\n * @description 清除之前的mask & 添加新的mask\n */\n private _initDraw(e: FederatedPointerEvent) {\n const { brushMode } = this.attribute as BrushAttributes;\n const pos = this.eventPosToStagePos(e);\n\n this._cacheDrawPoints.push(pos);\n brushMode === 'single' && this._clearMask();\n this._addBrushMask();\n this._dispatchBrushEvent(IOperateType.drawStart, e);\n // 无论是多选,还是单选\n // 如果这是第一个brush mask\n // 证明这第一次绘制, 则触发brushActive事件\n if (Object.keys(this._brushMaskAABBBoundsDict).length === 1) {\n this._dispatchBrushEvent(IOperateType.brushActive, e);\n }\n }\n\n /**\n * 初始化移动状态\n * @description 初始化mask的dx和dy\n */\n private _initMove(e: FederatedPointerEvent) {\n this._cacheMovePoint = this.eventPosToStagePos(e);\n\n this._operatingMaskMoveDx = this._operatingMask.attribute.dx ?? 0;\n this._operatingMaskMoveDy = this._operatingMask.attribute.dy ?? 0;\n\n // 计算最大移动范围, 为了将brushMask限制在交互范围内\n const { interactiveRange } = this.attribute as BrushAttributes;\n const { minY = -Infinity, maxY = Infinity, minX = -Infinity, maxX = Infinity } = interactiveRange;\n\n const { x1, x2, y1, y2 } = this._operatingMask.globalAABBBounds;\n const minMoveStepX = minX - x1;\n const maxMoveStepX = maxX - x2;\n const minMoveStepY = minY - y1;\n const maxMoveStepY = maxY - y2;\n\n this._operatingMaskMoveRangeX = [minMoveStepX, maxMoveStepX];\n this._operatingMaskMoveRangeY = [minMoveStepY, maxMoveStepY];\n\n this._operatingMask.setAttribute('pickable', true);\n this._dispatchBrushEvent(IOperateType.moveStart, e);\n }\n\n /**\n * 绘制中\n * @description 更新_cacheDrawPoints 和 mask的points属性\n */\n private _drawing(e: FederatedPointerEvent) {\n const pos = this.eventPosToStagePos(e);\n const { brushType } = this.attribute as BrushAttributes;\n\n const cacheLength = this._cacheDrawPoints.length;\n\n // 如果当前点的位置和上一次点的位置一致,则无需更新\n if (cacheLength > 0) {\n const lastPos = this._cacheDrawPoints[this._cacheDrawPoints.length - 1] ?? ({} as IPointLike);\n if (pos.x === lastPos.x && pos.y === lastPos.y) {\n return;\n }\n }\n // 更新交互位置\n if (brushType === 'polygon' || cacheLength <= 1) {\n this._cacheDrawPoints.push(pos);\n } else {\n this._cacheDrawPoints[cacheLength - 1] = pos;\n }\n // 更新mask形状\n const maskPoints = this._computeMaskPoints();\n this._operatingMask.setAttribute('points', maskPoints);\n this._dispatchBrushEvent(IOperateType.drawing, e);\n }\n\n /**\n * 移动中\n * @description 标记移动状态 & 计算位移量 & 给被移动的mask偏移属性\n */\n private _moving(e: FederatedPointerEvent) {\n const startPos = this._cacheMovePoint;\n const pos = this.eventPosToStagePos(e);\n // 如果当前点的位置和上一次点的位置一致,则无需更新\n if (pos.x === startPos?.x && pos.y === startPos?.y) {\n return;\n }\n\n const moveStepX = pos.x - startPos.x;\n const moveStepY = pos.y - startPos.y;\n const moveX =\n Math.min(this._operatingMaskMoveRangeX[1], Math.max(this._operatingMaskMoveRangeX[0], moveStepX)) +\n this._operatingMaskMoveDx;\n const moveY =\n Math.min(this._operatingMaskMoveRangeY[1], Math.max(this._operatingMaskMoveRangeY[0], moveStepY)) +\n this._operatingMaskMoveDy;\n\n this._operatingMask.setAttributes({\n dx: moveX,\n dy: moveY\n });\n this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds;\n this._dispatchBrushEvent(IOperateType.moving, e);\n }\n\n private _drawEnd(e: FederatedPointerEvent) {\n const { removeOnClick = true, sizeThreshold = DEFAULT_SIZE_THRESHOLD } = this.attribute as BrushAttributes;\n if (this._outOfInteractiveRange(e)) {\n if (!this._isEmptyMask()) {\n this._clearMask();\n this._dispatchBrushEvent(IOperateType.brushClear, e);\n }\n } else {\n const { x: x1, y: y1 } = this._startPos;\n const { x: x2, y: y2 } = this.eventPosToStagePos(e);\n // 1. 无效绘制: 单击\n if (Math.abs(x2 - x1) <= 1 && Math.abs(y2 - y1) <= 1 && removeOnClick) {\n if (!this._isEmptyMask()) {\n this._clearMask();\n this._dispatchBrushEvent(IOperateType.brushClear, e);\n }\n }\n // 2. 无效绘制: 绘制了mask但没有超过阈值, 仅清空当前操作的mask\n else if (Math.abs(x2 - x1) < sizeThreshold && Math.abs(y1 - y2) < sizeThreshold) {\n delete this._brushMaskAABBBoundsDict[this._operatingMask.name];\n this._container.setAttributes({}); // hack逻辑, 待优化: removeChild后, vrender 无法 autoRender, setAttr手动触发render\n this._container.removeChild(this._operatingMask);\n if (this._isEmptyMask()) {\n // 说明是最后一个mask被清空了, 要抛出clear事件, 重置图元状态\n this._dispatchBrushEvent(IOperateType.brushClear, e);\n } else {\n // 说明还有其他mask, 这次无效绘制不会重置状态\n // do nothing\n }\n }\n // 3. 有效绘制\n else {\n this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds;\n this._dispatchBrushEvent(IOperateType.drawEnd, e);\n }\n }\n }\n\n private _moveEnd(e: FederatedPointerEvent) {\n if (this._operatingMask) {\n this._operatingMask.setAttribute('pickable', false);\n }\n this._dispatchBrushEvent(IOperateType.moveEnd, e);\n }\n\n protected render() {\n this._bindBrushEvents();\n const group = this.createOrUpdateChild('brush-container', {}, 'group') as unknown as IGroup;\n this._container = group;\n }\n\n releaseBrushEvents(): void {\n const { trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger, resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger } = this\n .attribute as BrushAttributes;\n array(trigger).forEach(t => this.stage.removeEventListener(t, this._onBrushStart as EventListener));\n array(resetTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushClear as EventListener));\n this._releaseBrushUpdateEvents();\n }\n\n private _releaseBrushUpdateEvents(): void {\n const { updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger, endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger } =\n this.attribute as BrushAttributes;\n array(updateTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushingWithDelay as EventListener));\n array(endTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushEnd as EventListener));\n }\n\n /**\n * 构造brushMask的points属性\n * @description 根据不同的brushType从_cacheDrawPoints中取points\n * 1. 'rect': 只取鼠标轨迹_cacheDrawPoints的第一个点和最后一个点\n * 2. 'x': 只取鼠标轨迹_cacheDrawPoints的第一个点和最后一个点的x坐标\n * 3. 'y': 只取鼠标轨迹_cacheDrawPoints的第一个点和最后一个点的y坐标\n * 4. 'polygon': 取鼠标轨迹_cacheDrawPoints的所有点\n */\n private _computeMaskPoints() {\n const { brushType, xRange = [0, 0], yRange = [0, 0] } = this.attribute as BrushAttributes;\n let maskPoints: IPointLike[] = [];\n const startPoint = this._cacheDrawPoints[0];\n const endPoint = this._cacheDrawPoints[this._cacheDrawPoints.length - 1];\n\n if (brushType === 'rect') {\n maskPoints = [\n startPoint,\n {\n x: endPoint.x,\n y: startPoint.y\n },\n endPoint,\n {\n x: startPoint.x,\n y: endPoint.y\n }\n ];\n } else if (brushType === 'x') {\n maskPoints = [\n {\n x: startPoint.x,\n y: yRange[0]\n },\n {\n x: endPoint.x,\n y: yRange[0]\n },\n {\n x: endPoint.x,\n y: yRange[1]\n },\n {\n x: startPoint.x,\n y: yRange[1]\n }\n ];\n } else if (brushType === 'y') {\n maskPoints = [\n {\n x: xRange[0],\n y: startPoint.y\n },\n {\n x: xRange[0],\n y: endPoint.y\n },\n {\n x: xRange[1],\n y: endPoint.y\n },\n {\n x: xRange[1],\n y: startPoint.y\n }\n ];\n } else {\n maskPoints = cloneDeep(this._cacheDrawPoints); // _cacheDrawPoints在不断更新,所以这里需要cloneDeep\n }\n return maskPoints;\n }\n\n /**\n * 添加brushMask\n */\n private _addBrushMask() {\n const { brushStyle, hasMask } = this.attribute as BrushAttributes;\n const brushMask = graphicCreator.polygon({\n points: cloneDeep(this._cacheDrawPoints), // _cacheDrawPoints在不断更新,所以这里需要cloneDeep\n cursor: 'move',\n pickable: false,\n ...brushStyle,\n opacity: hasMask ? (brushStyle.opacity ?? 1) : 0\n });\n brushMask.name = `brush-${Date.now()}`; // 用Date给mask唯一标记\n this._operatingMask = brushMask;\n this._container.add(brushMask);\n this._brushMaskAABBBoundsDict[brushMask.name] = brushMask.AABBBounds;\n }\n\n /**\n * 遍历_container的所有子元素,判断鼠标是否在子元素的范围内\n */\n private _isPosInBrushMask(e: FederatedPointerEvent) {\n const pos = this.eventPosToStagePos(e);\n const brushMasks = this._container.getChildren();\n for (let i = 0; i < brushMasks.length; i++) {\n const { points = [], dx = 0, dy = 0 } = (brushMasks[i] as IPolygon).attribute;\n const pointsConsiderOffset: IPointLike[] = points.map((point: IPointLike) => {\n return {\n x: point.x + dx,\n y: point.y + dy\n };\n });\n if (polygonContainPoint(pointsConsiderOffset, pos.x, pos.y)) {\n this._operatingMask = brushMasks[i] as IPolygon;\n return true;\n }\n }\n return false;\n }\n\n /**\n * 判断鼠标是否在交互范围内\n */\n private _outOfInteractiveRange(e: FederatedPointerEvent) {\n // 在返回坐标时,将其限制在交互范围内\n const { interactiveRange } = this.attribute as BrushAttributes;\n const { minY = -Infinity, maxY = Infinity, minX = -Infinity, maxX = Infinity } = interactiveRange;\n const pos = this.eventPosToStagePos(e);\n if (pos.x > maxX || pos.x < minX || pos.y > maxY || pos.y < minY) {\n return true;\n }\n return false;\n }\n\n /**\n * 事件系统坐标转换为stage坐标\n */\n protected eventPosToStagePos(e: FederatedPointerEvent) {\n return this.stage.eventPointTransform(e);\n }\n\n /**\n * 根据操作类型触发对应的事件\n */\n private _dispatchBrushEvent(operateType: IOperateType, e: any) {\n this._dispatchEvent(operateType, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n\n /**\n * 重置brush状态\n */\n private _clearMask() {\n this._brushMaskAABBBoundsDict = {};\n this._container.incrementalClearChild();\n this._operatingMask = null;\n }\n\n /**\n * 判断当前画布中,是否存在有效mask\n */\n private _isEmptyMask() {\n return (\n isEmpty(this._brushMaskAABBBoundsDict) ||\n Object.keys(this._brushMaskAABBBoundsDict).every(key => this._brushMaskAABBBoundsDict[key].empty())\n );\n }\n}\n"]}
@@ -72,8 +72,9 @@ export class DataZoom extends AbstractComponent {
72
72
  this._activeCache.lastPos = this.eventPosToStagePos(e);
73
73
  const evtTarget = "browser" === vglobal.env ? vglobal : this.stage, triggers = getEndTriggersOfDrag();
74
74
  evtTarget.addEventListener("pointermove", this._onHandlerPointerMove, {
75
- capture: !0,
76
- passive: !1
75
+ capture: !0
76
+ }), this.addEventListener("pointermove", this._onHandlerPointerMove, {
77
+ capture: !0
77
78
  }), triggers.forEach((trigger => {
78
79
  evtTarget.addEventListener(trigger, this._onHandlerPointerUp);
79
80
  }));
@@ -84,9 +85,9 @@ export class DataZoom extends AbstractComponent {
84
85
  this._activeState && (this._activeTag === DataZoomActiveTag.middleHandler ? this.moveZoomWithMiddle((this.state.start + this.state.end) / 2 + dis) : this._activeTag === DataZoomActiveTag.startHandler ? start + dis > end ? (start = end,
85
86
  end = start + dis, this._activeTag = DataZoomActiveTag.endHandler) : start += dis : this._activeTag === DataZoomActiveTag.endHandler && (end + dis < start ? (end = start,
86
87
  start = end + dis, this._activeTag = DataZoomActiveTag.startHandler) : end += dis),
87
- brushSelect && this.renderDragMask()), start = Math.min(Math.max(start, 0), 1),
88
- end = Math.min(Math.max(end, 0), 1), startAttr === start && endAttr === end || (this._activeCache.lastPos = pos,
89
- this.setStateAttr(start, end, !0), realTime && this._dispatchEvent("change", {
88
+ this._activeCache.lastPos = pos, brushSelect && this.renderDragMask()), start = Math.min(Math.max(start, 0), 1),
89
+ end = Math.min(Math.max(end, 0), 1), startAttr === start && endAttr === end || (this.setStateAttr(start, end, !0),
90
+ realTime && this._dispatchEvent("change", {
90
91
  start: start,
91
92
  end: end,
92
93
  tag: this._activeTag
@@ -150,11 +151,12 @@ export class DataZoom extends AbstractComponent {
150
151
  _clearDragEvents() {
151
152
  const evtTarget = "browser" === vglobal.env ? vglobal : this.stage, triggers = getEndTriggersOfDrag();
152
153
  evtTarget.removeEventListener("pointermove", this._onHandlerPointerMove, {
153
- capture: !0,
154
- passive: !1
154
+ capture: !0
155
155
  }), triggers.forEach((trigger => {
156
156
  evtTarget.removeEventListener(trigger, this._onHandlerPointerUp);
157
- }));
157
+ })), this.removeEventListener("pointermove", this._onHandlerPointerMove, {
158
+ capture: !0
159
+ });
158
160
  }
159
161
  _onHandlerPointerEnter(e) {
160
162
  this._showText = !0, this.renderText();