@visactor/vchart 2.0.0-alpha.4 → 2.0.0

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 (84) hide show
  1. package/build/es5/index.js +2 -2
  2. package/build/index.es.js +230 -123
  3. package/build/index.js +230 -123
  4. package/build/index.min.js +2 -2
  5. package/build/tsconfig.tsbuildinfo +1 -1
  6. package/cjs/animation/interface.d.ts +1 -0
  7. package/cjs/animation/interface.js.map +1 -1
  8. package/cjs/chart/histogram/base/histogram-base-transformer.js +1 -1
  9. package/cjs/chart/histogram/base/histogram-base-transformer.js.map +1 -1
  10. package/cjs/component/brush/brush.d.ts +1 -1
  11. package/cjs/component/brush/brush.js +18 -14
  12. package/cjs/component/brush/brush.js.map +1 -1
  13. package/cjs/component/crosshair/base.js +4 -3
  14. package/cjs/component/crosshair/base.js.map +1 -1
  15. package/cjs/component/crosshair/cartesian.js +3 -2
  16. package/cjs/component/crosshair/cartesian.js.map +1 -1
  17. package/cjs/component/crosshair/interface/common.d.ts +3 -1
  18. package/cjs/component/crosshair/interface/common.js.map +1 -1
  19. package/cjs/component/crosshair/interface/spec.d.ts +1 -0
  20. package/cjs/component/crosshair/interface/spec.js.map +1 -1
  21. package/cjs/component/crosshair/interface/theme.d.ts +2 -0
  22. package/cjs/component/crosshair/interface/theme.js.map +1 -1
  23. package/cjs/component/crosshair/utils/cartesian.js +15 -13
  24. package/cjs/component/crosshair/utils/cartesian.js.map +1 -1
  25. package/cjs/component/crosshair/utils/common.js +8 -4
  26. package/cjs/component/crosshair/utils/common.js.map +1 -1
  27. package/cjs/component/marker/utils.js +14 -9
  28. package/cjs/component/marker/utils.js.map +1 -1
  29. package/cjs/component/tooltip/interface/theme.d.ts +3 -0
  30. package/cjs/component/tooltip/interface/theme.js.map +1 -1
  31. package/cjs/component/tooltip/tooltip-transformer.js +3 -1
  32. package/cjs/component/tooltip/tooltip-transformer.js.map +1 -1
  33. package/cjs/core/index.d.ts +1 -1
  34. package/cjs/core/index.js +1 -1
  35. package/cjs/core/index.js.map +1 -1
  36. package/cjs/mark/base/base-mark.js +16 -12
  37. package/cjs/mark/base/base-mark.js.map +1 -1
  38. package/cjs/plugin/components/tooltip-handler/dom-tooltip-handler.js +2 -3
  39. package/cjs/plugin/components/tooltip-handler/dom-tooltip-handler.js.map +1 -1
  40. package/cjs/series/bar/bar.d.ts +3 -0
  41. package/cjs/series/bar/bar.js +28 -7
  42. package/cjs/series/bar/bar.js.map +1 -1
  43. package/cjs/series/bar/interface.d.ts +1 -0
  44. package/cjs/series/bar/interface.js.map +1 -1
  45. package/esm/animation/interface.d.ts +1 -0
  46. package/esm/animation/interface.js.map +1 -1
  47. package/esm/chart/histogram/base/histogram-base-transformer.js +1 -1
  48. package/esm/chart/histogram/base/histogram-base-transformer.js.map +1 -1
  49. package/esm/component/brush/brush.d.ts +1 -1
  50. package/esm/component/brush/brush.js +18 -14
  51. package/esm/component/brush/brush.js.map +1 -1
  52. package/esm/component/crosshair/base.js +4 -3
  53. package/esm/component/crosshair/base.js.map +1 -1
  54. package/esm/component/crosshair/cartesian.js +3 -2
  55. package/esm/component/crosshair/cartesian.js.map +1 -1
  56. package/esm/component/crosshair/interface/common.d.ts +3 -1
  57. package/esm/component/crosshair/interface/common.js.map +1 -1
  58. package/esm/component/crosshair/interface/spec.d.ts +1 -0
  59. package/esm/component/crosshair/interface/spec.js.map +1 -1
  60. package/esm/component/crosshair/interface/theme.d.ts +2 -0
  61. package/esm/component/crosshair/interface/theme.js.map +1 -1
  62. package/esm/component/crosshair/utils/cartesian.js +15 -13
  63. package/esm/component/crosshair/utils/cartesian.js.map +1 -1
  64. package/esm/component/crosshair/utils/common.js +8 -4
  65. package/esm/component/crosshair/utils/common.js.map +1 -1
  66. package/esm/component/marker/utils.js +15 -8
  67. package/esm/component/marker/utils.js.map +1 -1
  68. package/esm/component/tooltip/interface/theme.d.ts +3 -0
  69. package/esm/component/tooltip/interface/theme.js.map +1 -1
  70. package/esm/component/tooltip/tooltip-transformer.js +3 -1
  71. package/esm/component/tooltip/tooltip-transformer.js.map +1 -1
  72. package/esm/core/index.d.ts +1 -1
  73. package/esm/core/index.js +1 -1
  74. package/esm/core/index.js.map +1 -1
  75. package/esm/mark/base/base-mark.js +16 -12
  76. package/esm/mark/base/base-mark.js.map +1 -1
  77. package/esm/plugin/components/tooltip-handler/dom-tooltip-handler.js +2 -3
  78. package/esm/plugin/components/tooltip-handler/dom-tooltip-handler.js.map +1 -1
  79. package/esm/series/bar/bar.d.ts +3 -0
  80. package/esm/series/bar/bar.js +26 -7
  81. package/esm/series/bar/bar.js.map +1 -1
  82. package/esm/series/bar/interface.d.ts +1 -0
  83. package/esm/series/bar/interface.js.map +1 -1
  84. package/package.json +6 -6
@@ -5,7 +5,7 @@ export class BaseHistogramChartSpecTransformer extends CartesianChartSpecTransfo
5
5
  super.transformSpec(spec), spec.axes.forEach((axis => axis.type = "linear"));
6
6
  }
7
7
  _getDefaultSeriesSpec(spec) {
8
- return super._getDefaultSeriesSpec(spec, [ "x2Field", "y2Field", "barMinHeight", "barBackground" ]);
8
+ return super._getDefaultSeriesSpec(spec, [ "x2Field", "y2Field", "barMinHeight", "barBackground", "barGap" ]);
9
9
  }
10
10
  }
11
11
  //# sourceMappingURL=histogram-base-transformer.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/chart/histogram/base/histogram-base-transformer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAGhE,MAAM,OAAO,iCAAiE,SAAQ,6BAAgC;IACpH,aAAa,CAAC,IAAO;QACnB,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAA8B,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC;IAChF,CAAC;IAES,qBAAqB,CAAC,IAAO;QACrC,OAAO,KAAK,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC;IACpG,CAAC;CACF","file":"histogram-base-transformer.js","sourcesContent":["import type { ICartesianAxisCommonSpec } from '../../../component/axis';\nimport { CartesianChartSpecTransformer } from '../../cartesian';\nimport type { IHistogramChartSpec } from '../interface';\n\nexport class BaseHistogramChartSpecTransformer<T extends IHistogramChartSpec> extends CartesianChartSpecTransformer<T> {\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n spec.axes.forEach((axis: ICartesianAxisCommonSpec) => (axis.type = 'linear'));\n }\n\n protected _getDefaultSeriesSpec(spec: T): any {\n return super._getDefaultSeriesSpec(spec, ['x2Field', 'y2Field', 'barMinHeight', 'barBackground']);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/chart/histogram/base/histogram-base-transformer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAGhE,MAAM,OAAO,iCAAiE,SAAQ,6BAAgC;IACpH,aAAa,CAAC,IAAO;QACnB,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAA8B,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC;IAChF,CAAC;IAES,qBAAqB,CAAC,IAAO;QACrC,OAAO,KAAK,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9G,CAAC;CACF","file":"histogram-base-transformer.js","sourcesContent":["import type { ICartesianAxisCommonSpec } from '../../../component/axis';\nimport { CartesianChartSpecTransformer } from '../../cartesian';\nimport type { IHistogramChartSpec } from '../interface';\n\nexport class BaseHistogramChartSpecTransformer<T extends IHistogramChartSpec> extends CartesianChartSpecTransformer<T> {\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n spec.axes.forEach((axis: ICartesianAxisCommonSpec) => (axis.type = 'linear'));\n }\n\n protected _getDefaultSeriesSpec(spec: T): any {\n return super._getDefaultSeriesSpec(spec, ['x2Field', 'y2Field', 'barMinHeight', 'barBackground', 'barGap']);\n }\n}\n"]}
@@ -41,7 +41,6 @@ export declare class Brush<T extends IBrushSpec = IBrushSpec> extends BaseCompon
41
41
  [elementKey: string]: IMarkGraphic;
42
42
  };
43
43
  private _cacheInteractiveRangeAttrs;
44
- private _needDisablePickable;
45
44
  private _releatedAxes;
46
45
  private _regionAxisMap;
47
46
  private _axisDataZoomMap;
@@ -84,6 +83,7 @@ export declare class Brush<T extends IBrushSpec = IBrushSpec> extends BaseCompon
84
83
  private _isBrushContainItem;
85
84
  protected _initItemMap(itemMap: Record<string, IMark[]>, elementMap: Record<string, IMarkGraphic>, stateName: string): void;
86
85
  protected _initMarkBrushState(componentIndex: number, stateName: string): void;
86
+ private _setRegionMarkPickable;
87
87
  private _stateClamp;
88
88
  private _setAxisAndDataZoom;
89
89
  protected _getNeedClearVRenderComponents(): IGraphic[];
@@ -30,8 +30,8 @@ export class Brush extends BaseComponent {
30
30
  this.name = ComponentTypeEnum.brush, this.specKey = "brush", this.layoutZIndex = LayoutZIndex.Brush,
31
31
  this._linkedSeries = [], this._itemMap = {}, this._linkedItemMap = {}, this._inBrushElementsMap = {},
32
32
  this._outOfBrushElementsMap = {}, this._linkedInBrushElementsMap = {}, this._linkedOutOfBrushElementsMap = {},
33
- this._cacheInteractiveRangeAttrs = [], this._needDisablePickable = !1, this._releatedAxes = [],
34
- this._regionAxisMap = {}, this._axisDataZoomMap = {}, this._zoomRecord = [];
33
+ this._cacheInteractiveRangeAttrs = [], this._releatedAxes = [], this._regionAxisMap = {},
34
+ this._axisDataZoomMap = {}, this._zoomRecord = [];
35
35
  }
36
36
  static getSpecInfo(chartSpec) {
37
37
  return getSpecInfo(chartSpec, this.specKey, this.type, (s => !1 !== s.visible));
@@ -118,27 +118,29 @@ export class Brush extends BaseComponent {
118
118
  brush.addEventListener(BrushEvent.brushActive, (e => {
119
119
  this._initMarkBrushState(componentIndex, "outOfBrush"), this._emitEvent(ChartEvent.brushActive, region);
120
120
  })), brush.addEventListener(BrushEvent.drawStart, (e => {
121
- this._emitEvent(ChartEvent.brushStart, region);
121
+ this._setRegionMarkPickable(region, !0), this._emitEvent(ChartEvent.brushStart, region);
122
122
  })), brush.addEventListener(BrushEvent.moveStart, (e => {
123
- this._emitEvent(ChartEvent.brushStart, region);
123
+ this._setRegionMarkPickable(region, !0), this._emitEvent(ChartEvent.brushStart, region);
124
124
  })), brush.addEventListener(BrushEvent.drawing, (e => {
125
- this._needDisablePickable = !0, this._handleBrushChange(region, e), this._emitEvent(ChartEvent.brushChange, region);
125
+ this._setRegionMarkPickable(region, !1), this._handleBrushChange(region, e), this._emitEvent(ChartEvent.brushChange, region);
126
126
  })), brush.addEventListener(BrushEvent.moving, (e => {
127
- this._handleBrushChange(region, e), this._emitEvent(ChartEvent.brushChange, region);
127
+ this._setRegionMarkPickable(region, !1), this._handleBrushChange(region, e), this._emitEvent(ChartEvent.brushChange, region);
128
128
  })), brush.addEventListener(BrushEvent.brushClear, (e => {
129
- this._initMarkBrushState(componentIndex, ""), this._needDisablePickable = !1, this._emitEvent(ChartEvent.brushClear, region);
129
+ this._setRegionMarkPickable(region, !0), this._initMarkBrushState(componentIndex, ""),
130
+ this._emitEvent(ChartEvent.brushClear, region);
130
131
  })), brush.addEventListener(BrushEvent.drawEnd, (e => {
131
132
  var _a;
132
- this._needDisablePickable = !1;
133
+ this._setRegionMarkPickable(region, !0);
133
134
  const {operateMask: operateMask} = e.detail;
134
135
  if (null === (_a = this._spec) || void 0 === _a ? void 0 : _a.onBrushEnd) !0 === this._spec.onBrushEnd(e) ? (this.clearGraphic(),
135
- this._initMarkBrushState(componentIndex, ""), this._needDisablePickable = !1, this._emitEvent(ChartEvent.brushClear, region)) : (this._spec.onBrushEnd(e),
136
+ this._initMarkBrushState(componentIndex, ""), this._emitEvent(ChartEvent.brushClear, region)) : (this._spec.onBrushEnd(e),
136
137
  this._emitEvent(ChartEvent.brushEnd, region)); else {
137
138
  const inBrushData = this._extendDataInBrush(this._inBrushElementsMap);
138
139
  !this._spec.zoomWhenEmpty && inBrushData.length > 0 && this._setAxisAndDataZoom(operateMask, region),
139
140
  this._emitEvent(ChartEvent.brushEnd, region);
140
141
  }
141
142
  })), brush.addEventListener(BrushEvent.moveEnd, (e => {
143
+ this._setRegionMarkPickable(region, !0);
142
144
  const {operateMask: operateMask} = e.detail, inBrushData = this._extendDataInBrush(this._inBrushElementsMap);
143
145
  !this._spec.zoomWhenEmpty && inBrushData.length > 0 && this._setAxisAndDataZoom(operateMask, region),
144
146
  this._emitEvent(ChartEvent.brushEnd, region);
@@ -219,7 +221,7 @@ export class Brush extends BaseComponent {
219
221
  this._inBrushElementsMap[null == operateMask ? void 0 : operateMask.name][elementKey] = graphicItem,
220
222
  delete this._outOfBrushElementsMap[elementKey]) : (null === (_c = null === (_b = this._inBrushElementsMap) || void 0 === _b ? void 0 : _b[null == operateMask ? void 0 : operateMask.name]) || void 0 === _c ? void 0 : _c[elementKey]) && !isBrushContainItem && (graphicItem.removeState("inBrush"),
221
223
  graphicItem.addState("outOfBrush", !0), this._outOfBrushElementsMap[elementKey] = graphicItem,
222
- delete this._inBrushElementsMap[operateMask.name][elementKey]), graphicItem.setAttribute("pickable", !this._needDisablePickable);
224
+ delete this._inBrushElementsMap[operateMask.name][elementKey]);
223
225
  }));
224
226
  }));
225
227
  }
@@ -246,8 +248,7 @@ export class Brush extends BaseComponent {
246
248
  this._linkedInBrushElementsMap[null == operateMask ? void 0 : operateMask.name] || (this._linkedInBrushElementsMap[null == operateMask ? void 0 : operateMask.name] = {}),
247
249
  this._linkedInBrushElementsMap[null == operateMask ? void 0 : operateMask.name][elementKey] = graphicItem,
248
250
  delete this._linkedOutOfBrushElementsMap[elementKey]) : (null === (_c = null === (_b = this._linkedInBrushElementsMap) || void 0 === _b ? void 0 : _b[null == operateMask ? void 0 : operateMask.name]) || void 0 === _c ? void 0 : _c[elementKey]) && !this._isBrushContainItem(operateMask.globalAABBBounds, pointsCoord, graphicItem) && (graphicItem.removeState("inBrush"),
249
- graphicItem.addState("outOfBrush", !0), this._linkedOutOfBrushElementsMap[elementKey] = graphicItem),
250
- graphicItem.setAttribute("pickable", !this._needDisablePickable);
251
+ graphicItem.addState("outOfBrush", !0), this._linkedOutOfBrushElementsMap[elementKey] = graphicItem);
251
252
  }));
252
253
  }));
253
254
  }
@@ -294,6 +295,9 @@ export class Brush extends BaseComponent {
294
295
  this._linkedOutOfBrushElementsMap = {}, this._initItemMap(this._itemMap, this._outOfBrushElementsMap, stateName),
295
296
  this._initItemMap(this._linkedItemMap, this._linkedOutOfBrushElementsMap, stateName);
296
297
  }
298
+ _setRegionMarkPickable(region, pickable) {
299
+ region.getGroupMark().getGraphics().forEach((g => g.setAttribute("childrenPickable", pickable)));
300
+ }
297
301
  _stateClamp(state) {
298
302
  return Math.min(Math.max(0, state), 1);
299
303
  }
@@ -339,8 +343,8 @@ export class Brush extends BaseComponent {
339
343
  if (this._brushComponents) {
340
344
  const container = this.getContainer();
341
345
  this._brushComponents.forEach(((brush, index) => {
342
- this._initMarkBrushState(index, ""), this._needDisablePickable = !1, brush.removeAllChild(),
343
- brush.releaseBrushEvents(), container && container.removeChild(brush);
346
+ this._initMarkBrushState(index, ""), brush.removeAllChild(), brush.releaseBrushEvents(),
347
+ container && container.removeChild(brush);
344
348
  })), this._brushComponents = null;
345
349
  }
346
350
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/component/brush/brush.ts"],"names":[],"mappings":"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","file":"brush.js","sourcesContent":["import { ChartEvent } from '../../constant/event';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { LayoutZIndex } from '../../constant/layout';\nimport { BaseComponent } from '../base/base-component';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport { Brush as BrushComponent, IOperateType as BrushEvent } from '@visactor/vrender-components';\nimport type { IBounds, IPointLike, Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { array, polygonIntersectPolygon, isValid, last, cloneDeep } from '@visactor/vutils';\nimport type { IModelRenderOption, IModelSpecInfo } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { IGraphic, IGroup, INode, IPolygon } from '@visactor/vrender-core';\nimport { transformToGraphic } from '../../util/style';\nimport type { ISeries } from '../../series/interface';\nimport type { IMark, IMarkGraphic } from '../../mark/interface';\nimport type { BrushInteractiveRangeAttr, IBrush, IBrushSpec, selectedItemStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEqual } from '@visactor/vutils';\nimport { Factory } from '../../core/factory';\nimport type { DataZoom } from '../data-zoom';\nimport type { AxisComponent } from '../axis/base-axis';\nimport { getSpecInfo } from '../util';\nimport { brush } from '../../theme/builtin/common/component/brush';\n\nconst IN_BRUSH_STATE = 'inBrush';\nconst OUT_BRUSH_STATE = 'outOfBrush';\n\nexport class Brush<T extends IBrushSpec = IBrushSpec> extends BaseComponent<T> implements IBrush {\n layoutType: 'none' = 'none';\n static type = ComponentTypeEnum.brush;\n type = ComponentTypeEnum.brush;\n name: string = ComponentTypeEnum.brush;\n\n static readonly builtInTheme = {\n brush\n };\n static specKey = 'brush';\n specKey = 'brush';\n\n layoutZIndex: number = LayoutZIndex.Brush;\n\n // brush组件\n protected _brushComponents!: BrushComponent[];\n protected _relativeRegions!: IRegion[];\n protected _linkedSeries: ISeries[] = [];\n\n private _itemMap: { [regionId: string | number]: IMark[] } = {};\n private _linkedItemMap: { [seriesId: string | number]: IMark[] } = {};\n\n // 用brushName做分组管理的原因是: 如果有多个brush, 某个图元A brush内, 但在B brush外, 该图元state会被B误变成out of brush。 但其实该图元只有在A brush外才能被判断out of brush\n // 用dict做存储因为方便查找和删减对应图元\n protected _inBrushElementsMap: { [brushName: string]: { [elementKey: string]: IMarkGraphic } } = {};\n protected _outOfBrushElementsMap: { [elementKey: string]: IMarkGraphic } = {};\n protected _linkedInBrushElementsMap: { [brushName: string]: { [elementKey: string]: IMarkGraphic } } = {};\n protected _linkedOutOfBrushElementsMap: { [elementKey: string]: IMarkGraphic } = {};\n\n private _cacheInteractiveRangeAttrs: BrushInteractiveRangeAttr[] = [];\n\n private _needDisablePickable: boolean = false;\n\n private _releatedAxes: AxisComponent[] = [];\n\n // 根据region找axis\n private _regionAxisMap: { [regionId: string]: AxisComponent[] } = {};\n // 根据axis找dataZoom\n private _axisDataZoomMap: { [axisId: string]: DataZoom } = {};\n // 记录当前操作的axis或dataZoom的状态\n private _zoomRecord: {\n operateComponent: AxisComponent | DataZoom;\n start: number;\n end: number;\n startValue: number | string;\n endValue: number | string;\n }[] = [];\n\n static getSpecInfo(chartSpec: any): Maybe<IModelSpecInfo[]> {\n return getSpecInfo<IBrushSpec>(chartSpec, this.specKey, this.type, (s: IBrushSpec) => {\n return s.visible !== false;\n });\n }\n\n /*** start: abstract pipe ***/\n init() {\n const inBrushMarkAttr = this._transformBrushedMarkAttr(this._spec.inBrush);\n const outOfBrushMarkAttr = this._transformBrushedMarkAttr(this._spec.outOfBrush);\n // 注册mark state, 便于后续state管理\n this._option.getAllSeries().forEach((s: ISeries) => {\n s.getActiveMarks().forEach((m: IMark) => {\n if (m) {\n s.setMarkStyle(\n m,\n {\n ...inBrushMarkAttr\n },\n IN_BRUSH_STATE,\n AttributeLevel.Series\n );\n s.setMarkStyle(\n m,\n {\n ...outOfBrushMarkAttr\n },\n OUT_BRUSH_STATE,\n AttributeLevel.Series\n );\n }\n });\n });\n }\n private _initNeedOperatedItem() {\n const seriesUserId = this._spec.seriesId;\n const seriesIndex = this._spec.seriesIndex;\n this._relativeRegions.forEach(r => {\n const allMarks: IMark[] = [];\n r.getSeries().forEach((s: ISeries) => {\n if (\n (seriesUserId && array(seriesUserId).includes(s.userId.toString())) ||\n (seriesIndex && array(seriesIndex).includes(s.getSpecIndex())) ||\n (!seriesIndex && !seriesUserId)\n ) {\n allMarks.push(...s.getMarksWithoutRoot());\n }\n this._itemMap[r.id] = allMarks;\n });\n });\n\n this._linkedSeries.forEach(s => {\n this._linkedItemMap[s.id] = s.getMarksWithoutRoot();\n });\n }\n\n created() {\n super.created();\n\n this.initEvent();\n this._bindRegions();\n this._bindLinkedSeries();\n this._initRegionAxisMap();\n this._initAxisDataZoomMap();\n this._initNeedOperatedItem();\n }\n\n protected _bindRegions() {\n if (!isValid(this._spec.regionId) && !isValid(this._spec.regionIndex)) {\n this._relativeRegions = this._option.getAllRegions();\n } else {\n this._relativeRegions = this._option.getRegionsInUserIdOrIndex(\n array(this._spec.regionId),\n array(this._spec.regionIndex)\n );\n }\n }\n\n protected _bindLinkedSeries() {\n if (!isValid(this._spec.brushLinkSeriesId) && !isValid(this._spec.brushLinkSeriesIndex)) {\n return;\n }\n this._linkedSeries = this._option.getSeriesInUserIdOrIndex(\n array(this._spec.brushLinkSeriesId),\n array(this._spec.brushLinkSeriesIndex)\n );\n }\n\n private _initRegionAxisMap() {\n // 如果配置了axis,则按配置\n // 如果没有配置axis,则默认所有axis\n if (isValid(this._spec.axisId)) {\n array(this._spec.axisId).forEach((axisId: string) => {\n this._releatedAxes.push(this._option.getComponentByUserId(axisId) as AxisComponent);\n });\n } else if (isValid(this._spec.axisIndex)) {\n array(this._spec.axisIndex).forEach((axisIndex: number) => {\n this._releatedAxes.push(this._option.getComponentByIndex('axes', axisIndex) as AxisComponent);\n });\n } else {\n this._releatedAxes = this._option.getComponentsByKey('axes') as AxisComponent[];\n }\n\n // 按照region进行分组,便于brush找到关联axis (brush -> region -> axis)\n this._releatedAxes.forEach((axis: AxisComponent) => {\n axis?.getRegions().forEach((region: IRegion) => {\n if (this._regionAxisMap['region_' + region.id]) {\n this._regionAxisMap['region_' + region.id].push(axis);\n } else {\n this._regionAxisMap['region_' + region.id] = [axis];\n }\n });\n });\n }\n\n private _initAxisDataZoomMap() {\n (this._option.getComponentsByKey('dataZoom') as DataZoom[]).forEach((dz: DataZoom) => {\n if (dz.relatedAxisComponent) {\n this._axisDataZoomMap[(dz.relatedAxisComponent as AxisComponent).id] = dz;\n }\n });\n }\n\n protected initEvent() {\n // do nothing\n }\n\n _compareSpec(spec: T, prevSpec: T) {\n if (this._brushComponents) {\n // FIXME: 这个逻辑放在这个方法里不太妥当?\n this._relativeRegions.forEach((region: IRegion, index: number) => {\n this._updateBrushComponent(region, index);\n });\n }\n const result = super._compareSpec(spec, prevSpec);\n if (!isEqual(prevSpec, spec)) {\n result.reRender = true;\n result.reMake = true;\n }\n return result;\n }\n\n onLayoutEnd(): void {\n super.onLayoutEnd();\n if (this._option.disableTriggerEvent) {\n return;\n }\n const brushVisible = this._spec.visible ?? true;\n if (brushVisible) {\n if (!this._brushComponents) {\n this._brushComponents = [];\n this._relativeRegions.forEach((region: IRegion, index: number) => {\n this._createBrushComponent(region, index);\n });\n } else {\n this._relativeRegions.forEach((region: IRegion, index: number) => {\n this._updateBrushComponent(region, index);\n });\n }\n }\n }\n /*** end: abstract pipe ***/\n\n /*** start: brush component ***/\n protected _updateBrushComponent(region: IRegion, componentIndex: number) {\n const interactiveAttr = this._getBrushInteractiveAttr(region);\n // 布局变化后, 更新可交互范围\n const brushComponent = this._brushComponents[componentIndex];\n brushComponent.setAttributes(interactiveAttr as any);\n\n // 布局变化后,清空brushMask 和 重置图元高亮状态\n this._initMarkBrushState(componentIndex, '');\n brushComponent.children[0].removeAllChild();\n }\n\n protected _createBrushComponent(region: IRegion, componentIndex: number) {\n const interactiveAttr = this._getBrushInteractiveAttr(region);\n const brush = new BrushComponent({\n zIndex: this.layoutZIndex,\n brushStyle: transformToGraphic(this._spec?.style),\n ...interactiveAttr,\n ...this._spec,\n disableTriggerEvent: this._option.disableTriggerEvent\n });\n brush.id = this._spec.id ?? `brush-${this.id}`;\n this.getContainer().add(brush as unknown as INode);\n this._brushComponents.push(brush);\n this._cacheInteractiveRangeAttrs.push(interactiveAttr);\n\n brush.addEventListener(BrushEvent.brushActive, (e: any) => {\n this._initMarkBrushState(componentIndex, OUT_BRUSH_STATE);\n this._emitEvent(ChartEvent.brushActive, region);\n });\n\n brush.addEventListener(BrushEvent.drawStart, (e: any) => {\n this._emitEvent(ChartEvent.brushStart, region);\n });\n\n brush.addEventListener(BrushEvent.moveStart, (e: any) => {\n this._emitEvent(ChartEvent.brushStart, region);\n });\n\n brush.addEventListener(BrushEvent.drawing, (e: any) => {\n this._needDisablePickable = true;\n this._handleBrushChange(region, e);\n this._emitEvent(ChartEvent.brushChange, region);\n });\n\n brush.addEventListener(BrushEvent.moving, (e: any) => {\n this._handleBrushChange(region, e);\n this._emitEvent(ChartEvent.brushChange, region);\n });\n\n brush.addEventListener(BrushEvent.brushClear, (e: any) => {\n this._initMarkBrushState(componentIndex, '');\n this._needDisablePickable = false;\n this._emitEvent(ChartEvent.brushClear, region);\n });\n\n brush.addEventListener(BrushEvent.drawEnd, (e: any) => {\n this._needDisablePickable = false;\n const { operateMask } = e.detail as any;\n if (this._spec?.onBrushEnd) {\n // 如果onBrushEnd返回true,则清空brush, 并抛出clear事件\n if (this._spec.onBrushEnd(e) === true) {\n this.clearGraphic();\n this._initMarkBrushState(componentIndex, '');\n this._needDisablePickable = false;\n this._emitEvent(ChartEvent.brushClear, region);\n } else {\n this._spec.onBrushEnd(e);\n this._emitEvent(ChartEvent.brushEnd, region);\n }\n } else {\n const inBrushData = this._extendDataInBrush(this._inBrushElementsMap);\n if (!this._spec.zoomWhenEmpty && inBrushData.length > 0) {\n this._setAxisAndDataZoom(operateMask, region);\n }\n this._emitEvent(ChartEvent.brushEnd, region);\n }\n });\n\n brush.addEventListener(BrushEvent.moveEnd, (e: any) => {\n const { operateMask } = e.detail as any;\n const inBrushData = this._extendDataInBrush(this._inBrushElementsMap);\n if (!this._spec.zoomWhenEmpty && inBrushData.length > 0) {\n this._setAxisAndDataZoom(operateMask, region);\n }\n this._emitEvent(ChartEvent.brushEnd, region);\n });\n }\n\n protected _getBrushInteractiveAttr(region: IRegion) {\n const regionLayoutPosition = region.getLayoutStartPoint();\n const regionLayoutRect = region.getLayoutRect();\n const seriesRegionStartX = regionLayoutPosition.x;\n const seriesRegionEndX = seriesRegionStartX + regionLayoutRect.width;\n const seriesRegionStartY = regionLayoutPosition.y;\n const seriesRegionEndY = seriesRegionStartY + regionLayoutRect.height;\n return {\n interactiveRange: {\n minY: seriesRegionStartY,\n maxY: seriesRegionEndY,\n minX: seriesRegionStartX,\n maxX: seriesRegionEndX\n },\n xRange: [seriesRegionStartX, seriesRegionEndX],\n yRange: [seriesRegionStartY, seriesRegionEndY]\n } as BrushInteractiveRangeAttr;\n }\n\n private _transformBrushedMarkAttr(brushedStyle: selectedItemStyle) {\n const styleResult: any = {};\n if (brushedStyle?.symbol) {\n styleResult.symbolType = brushedStyle.symbol;\n }\n if (brushedStyle?.symbolSize) {\n styleResult.size = brushedStyle.symbolSize;\n }\n if (brushedStyle?.color) {\n styleResult.fill = brushedStyle.color;\n }\n if (brushedStyle?.colorAlpha) {\n styleResult.fillOpacity = brushedStyle.colorAlpha;\n }\n return {\n ...transformToGraphic(brushedStyle),\n ...styleResult\n };\n }\n /*** end: brush component ***/\n\n /*** start: event dispatch ***/\n private _handleBrushChange(region: IRegion, e: any) {\n const { operateMask } = e.detail as any;\n this._reconfigItem(operateMask, region);\n this._reconfigLinkedItem(operateMask, region);\n }\n\n protected _extendDataInBrush(elementsMap: { [brushName: string]: { [elementKey: string]: IMarkGraphic } }) {\n const data = [];\n for (const brushName in elementsMap) {\n for (const elementKey in elementsMap[brushName]) {\n data.push({\n ...elementsMap[brushName][elementKey].context?.data?.[0]\n });\n }\n }\n return data;\n }\n\n protected _extendDatumOutOfBrush(elementsMap: { [elementKey: string]: IMarkGraphic }) {\n const data = [];\n for (const elementKey in elementsMap) {\n // 图例筛选后, elementKey未更新, 导致data可能为null\n // FIXME: brush透出的map维护逻辑有待优化\n data.push(elementsMap[elementKey].context?.data?.[0]);\n }\n return data;\n }\n\n private _emitEvent(eventType: string, region: IRegion) {\n this.event.emit(eventType, {\n model: this,\n value: {\n // 操作类型\n operateType: eventType,\n // 正在操作的region\n operateRegion: region,\n // 在选框内的 element data\n inBrushData: this._extendDataInBrush(this._inBrushElementsMap),\n // 在选框外的 element data\n outOfBrushData: this._extendDatumOutOfBrush(this._outOfBrushElementsMap),\n // 被链接的系列中:在选框内的 element data\n linkInBrushData: this._extendDataInBrush(this._linkedInBrushElementsMap),\n // 被链接的系列中:在选框外的 element data\n linkOutOfBrushData: this._extendDatumOutOfBrush(this._linkedOutOfBrushElementsMap),\n // 在选框内的 图形\n inBrushElementsMap: this._inBrushElementsMap,\n // 在选框外的 图形\n outOfBrushElementsMap: this._outOfBrushElementsMap,\n // 被链接的系列中:在选框内的 图形\n linkedInBrushElementsMap: this._linkedInBrushElementsMap,\n // 被链接的系列中:在选框外的 图形\n linkedOutOfBrushElementsMap: this._linkedOutOfBrushElementsMap,\n // 缩放记录\n zoomRecord: this._zoomRecord\n },\n vchart: this._option?.globalInstance\n });\n }\n /*** end: event dispatch ***/\n\n /** start: set mark state ***/\n private _reconfigItem(operateMask: IPolygon, region: IRegion) {\n if (!operateMask?.globalTransMatrix || !operateMask?.attribute?.points) {\n return;\n }\n\n // 根据变换矩阵得到brushMask的实际坐标\n const points = operateMask?.attribute?.points ?? [];\n const { a, b, c, d, e, f } = operateMask.globalTransMatrix;\n const pointsCoord = points.map((p: IPointLike) => {\n return {\n x: a * p.x + c * p.y + e,\n y: b * p.x + d * p.y + f\n };\n });\n const { markTypeFilter = [] } = this._spec;\n\n // 遍历图元, 更新状态\n this._itemMap[region.id].forEach((mark: IMark) => {\n if (markTypeFilter.includes(mark.type)) {\n return;\n }\n const graphics = mark.getGraphics();\n\n if (!graphics || !graphics.length) {\n return;\n }\n graphics.forEach((graphicItem: IMarkGraphic) => {\n const elementKey = mark.id + '_' + graphicItem.context.key;\n // 判断逻辑:\n // 应该被置为inBrush状态的图元:\n // before: 在out brush elment map, 即不在任何brush中\n // now: 在当前brush图元中\n\n // 应该被置为outOfBrush状态的图元:\n // before: 在当前brush 的 in brush element map中, 即在当前brush中\n // now: 不在当前brush中\n const isBrushContainItem = this._isBrushContainItem(operateMask.globalAABBBounds, pointsCoord, graphicItem);\n if (this._outOfBrushElementsMap?.[elementKey] && isBrushContainItem) {\n graphicItem.addState(IN_BRUSH_STATE, true);\n if (!this._inBrushElementsMap[operateMask?.name]) {\n this._inBrushElementsMap[operateMask?.name] = {};\n }\n this._inBrushElementsMap[operateMask?.name][elementKey] = graphicItem;\n delete this._outOfBrushElementsMap[elementKey];\n } else if (this._inBrushElementsMap?.[operateMask?.name]?.[elementKey] && !isBrushContainItem) {\n graphicItem.removeState(IN_BRUSH_STATE);\n graphicItem.addState(OUT_BRUSH_STATE, true);\n this._outOfBrushElementsMap[elementKey] = graphicItem;\n delete this._inBrushElementsMap[operateMask.name][elementKey];\n }\n graphicItem.setAttribute('pickable', !this._needDisablePickable);\n });\n });\n }\n\n private _reconfigLinkedItem(operateMask: IPolygon, region: IRegion) {\n if (!operateMask?.globalTransMatrix || !operateMask?.attribute?.points) {\n return;\n }\n\n const regionLayoutPos = region.getLayoutStartPoint();\n const seriesId = region.getSeries().map(s => s.id);\n this._linkedSeries.forEach((s: ISeries) => {\n if (!seriesId.includes(s.id)) {\n const sRegionLayoutPos = s.getRegion().getLayoutStartPoint();\n\n const regionOffsetX = sRegionLayoutPos.x - regionLayoutPos.x;\n const regionOffsetY = sRegionLayoutPos.y - regionLayoutPos.y;\n\n // 根据变换矩阵得到brushMask的实际坐标\n const points = operateMask?.attribute?.points ?? [];\n const { a, b, c, d, e, f } = operateMask.globalTransMatrix;\n\n const dx = regionOffsetX || 0;\n const dy = regionOffsetY || 0;\n\n const pointsCoord = points.map((p: IPointLike) => {\n return {\n x: a * p.x + c * p.y + e + dx,\n y: b * p.x + d * p.y + f + dy\n };\n });\n\n operateMask.globalAABBBounds\n .clone()\n .set(\n operateMask.globalAABBBounds.x1 + dx,\n operateMask.globalAABBBounds.y1 + dy,\n operateMask.globalAABBBounds.x2 + dx,\n operateMask.globalAABBBounds.y2 + dy\n );\n\n const { markTypeFilter = [] } = this._spec;\n this._linkedItemMap[s.id].forEach((mark: IMark) => {\n if (markTypeFilter.includes(mark.type)) {\n return;\n }\n const graphics = mark.getGraphics();\n if (!graphics || !graphics.length) {\n return;\n }\n graphics.forEach((graphicItem: IMarkGraphic) => {\n const { key } = graphicItem.context;\n\n const elementKey = mark.id + '_' + graphicItem.context.key;\n // 判断逻辑:\n // 应该被置为inBrush状态的图元:\n // before: 在out brush elment map, 即不在任何brush中\n // now: 在当前brush图元中\n\n // 应该被置为outOfBrush状态的图元:\n // before: 在当前brush 的 in brush element map中, 即在当前brush中\n // now: 不在当前brush中\n if (\n this._linkedOutOfBrushElementsMap?.[elementKey] &&\n this._isBrushContainItem(operateMask.globalAABBBounds, pointsCoord, graphicItem)\n ) {\n graphicItem.addState(IN_BRUSH_STATE, true);\n if (!this._linkedInBrushElementsMap[operateMask?.name]) {\n this._linkedInBrushElementsMap[operateMask?.name] = {};\n }\n this._linkedInBrushElementsMap[operateMask?.name][elementKey] = graphicItem;\n delete this._linkedOutOfBrushElementsMap[elementKey];\n } else if (\n this._linkedInBrushElementsMap?.[operateMask?.name]?.[elementKey] &&\n !this._isBrushContainItem(operateMask.globalAABBBounds, pointsCoord, graphicItem)\n ) {\n graphicItem.removeState(IN_BRUSH_STATE);\n graphicItem.addState(OUT_BRUSH_STATE, true);\n this._linkedOutOfBrushElementsMap[elementKey] = graphicItem;\n }\n graphicItem.setAttribute('pickable', !this._needDisablePickable);\n });\n });\n }\n });\n }\n\n private _isBrushContainItem(brushMaskAABBBounds: IBounds, brushMaskPointsCoord: IPointLike[], item: IMarkGraphic) {\n // brush与图表图元进行相交 或 包含判断\n let itemBounds: { x: number; y: number }[] = [];\n if (['symbol', 'rect'].includes(item.type)) {\n const { x1, x2, y1, y2 } = item?.globalAABBBounds;\n itemBounds = [\n {\n x: x1,\n y: y1\n },\n {\n x: x2,\n y: y1\n },\n {\n x: x2,\n y: y2\n },\n {\n x: x1,\n y: y2\n }\n ];\n return polygonIntersectPolygon(brushMaskPointsCoord, itemBounds);\n }\n return brushMaskAABBBounds.intersects(item.globalAABBBounds);\n }\n\n protected _initItemMap(\n itemMap: Record<string, IMark[]>,\n elementMap: Record<string, IMarkGraphic>,\n stateName: string\n ) {\n const { markTypeFilter = [] } = this._spec;\n\n Object.entries(itemMap).forEach(([regionId, marks]) => {\n marks.forEach((mark: IMark) => {\n if (markTypeFilter.includes(mark.type)) {\n return;\n }\n const graphics = mark.getGraphics();\n if (!graphics || !graphics.length) {\n return;\n }\n graphics.forEach((el: IMarkGraphic) => {\n const elementKey = mark.id + '_' + el.context.key;\n el.removeState(IN_BRUSH_STATE);\n el.removeState(OUT_BRUSH_STATE);\n stateName && el.addState(stateName, true);\n elementMap[elementKey] = el;\n });\n });\n });\n }\n\n protected _initMarkBrushState(componentIndex: number, stateName: string) {\n this._brushComponents.forEach((brush, index) => {\n if (index !== componentIndex) {\n brush.children[0].removeAllChild();\n }\n });\n\n this._inBrushElementsMap = {};\n this._outOfBrushElementsMap = {};\n this._linkedInBrushElementsMap = {};\n this._linkedOutOfBrushElementsMap = {};\n\n this._initItemMap(this._itemMap, this._outOfBrushElementsMap, stateName);\n this._initItemMap(this._linkedItemMap, this._linkedOutOfBrushElementsMap, stateName);\n }\n /** end: set mark state ***/\n\n /** start: control data zoom ***/\n private _stateClamp(state: number) {\n return Math.min(Math.max(0, state), 1);\n }\n\n private _setAxisAndDataZoom(operateMask: IPolygon, region: IRegion) {\n this._zoomRecord = [];\n if (this._spec.zoomAfterBrush) {\n // step1: 拿到brush bounds, 计算 continuous axis/dataZoom新范围\n const operateMaskBounds = operateMask.AABBBounds;\n\n // step2:\n // 如果轴关联了dataZoom,则通过dataZoom更新轴\n // 如果轴没有关联dataZoom,则直接更改轴rangeFactor\n this._regionAxisMap['region_' + region.id]?.forEach(axis => {\n const isHorizontal = axis.layoutOrient === 'bottom' || axis.layoutOrient === 'top';\n const axisRangeExpand = this._spec.axisRangeExpand ?? 0;\n const { x1, x2, y1, y2 } = operateMaskBounds;\n const regionStartAttr = isHorizontal ? 'x' : 'y';\n const boundsStart = isHorizontal ? x1 : y1;\n const boundsEnd = isHorizontal ? x2 : y2;\n\n if (this._axisDataZoomMap[axis.id]) {\n const dataZoom = this._axisDataZoomMap[axis.id];\n const releatedAxis = dataZoom.relatedAxisComponent as AxisComponent;\n const startValue = releatedAxis\n .getScale()\n .invert(boundsStart - region.getLayoutStartPoint()[regionStartAttr]);\n const endValue = releatedAxis.getScale().invert(boundsEnd - region.getLayoutStartPoint()[regionStartAttr]);\n const startPercent = dataZoom.dataToStatePoint(startValue);\n const endPercent = dataZoom.dataToStatePoint(endValue);\n const newStartPercent = this._stateClamp(startPercent - axisRangeExpand);\n const newEndPercent = this._stateClamp(endPercent + axisRangeExpand);\n dataZoom.setStartAndEnd(Math.min(newStartPercent, newEndPercent), Math.max(newStartPercent, newEndPercent), [\n 'percent',\n 'percent'\n ]);\n\n this._zoomRecord.push({\n operateComponent: dataZoom,\n start: newStartPercent,\n end: newEndPercent,\n startValue: dataZoom.statePointToData(newStartPercent),\n endValue: dataZoom.statePointToData(newEndPercent)\n });\n } else {\n const range = axis.getScale().range();\n const rangeFactor = axis.scaleRangeFactor() ?? [0, 1];\n\n // 判断轴是否为反向轴(last(range) < range[0]),即从右到左, 或从下到上\n // 如果是反向轴, 计算start和end时, 也要保持 start < end\n const isAxisReverse = last(range) < range[0];\n const startPosTemp = boundsStart - region.getLayoutStartPoint()[regionStartAttr];\n const endPosTemp = boundsEnd - region.getLayoutStartPoint()[regionStartAttr];\n const endPos = isAxisReverse ? Math.min(startPosTemp, endPosTemp) : Math.max(startPosTemp, endPosTemp);\n const startPos = isAxisReverse ? Math.max(startPosTemp, endPosTemp) : Math.min(startPosTemp, endPosTemp);\n\n const start =\n ((startPos - range[0]) / (last(range) - range[0])) * (rangeFactor[1] - rangeFactor[0]) + rangeFactor[0];\n const end =\n ((endPos - range[0]) / (last(range) - range[0])) * (rangeFactor[1] - rangeFactor[0]) + rangeFactor[0];\n const newStart = this._stateClamp(start - axisRangeExpand);\n const newEnd = this._stateClamp(end + axisRangeExpand);\n axis.scaleRangeFactor([newStart, newEnd]);\n axis.effect.scaleUpdate();\n\n this._zoomRecord.push({\n operateComponent: axis,\n start: newStart,\n end: newEnd,\n startValue: axis.getScale().invert(startPos),\n endValue: axis.getScale().invert(endPos)\n });\n }\n });\n }\n }\n\n /** end: control data zoom ***/\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return this._brushComponents as unknown as IGroup[];\n }\n\n clearGraphic(): void {\n if (this._brushComponents) {\n this._brushComponents.forEach(brush => {\n (brush as any)._container.incrementalClearChild();\n });\n }\n }\n\n clear(): void {\n if (this._brushComponents) {\n const container = this.getContainer();\n this._brushComponents.forEach((brush, index) => {\n // 清空元素状态\n this._initMarkBrushState(index, '');\n this._needDisablePickable = false;\n\n brush.removeAllChild();\n brush.releaseBrushEvents();\n\n if (container) {\n container.removeChild(brush as unknown as INode);\n }\n });\n this._brushComponents = null;\n }\n }\n}\n\nexport const registerBrush = () => {\n Factory.registerComponent(Brush.type, Brush);\n};\n"]}
1
+ {"version":3,"sources":["../src/component/brush/brush.ts"],"names":[],"mappings":"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","file":"brush.js","sourcesContent":["import { ChartEvent } from '../../constant/event';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { LayoutZIndex } from '../../constant/layout';\nimport { BaseComponent } from '../base/base-component';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport { Brush as BrushComponent, IOperateType as BrushEvent } from '@visactor/vrender-components';\nimport type { IBounds, IPointLike, Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { array, polygonIntersectPolygon, isValid, last } from '@visactor/vutils';\nimport type { IModelRenderOption, IModelSpecInfo } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { IGraphic, IGroup, INode, IPolygon } from '@visactor/vrender-core';\nimport { transformToGraphic } from '../../util/style';\nimport type { ISeries } from '../../series/interface';\nimport type { IMark, IMarkGraphic } from '../../mark/interface';\nimport type { BrushInteractiveRangeAttr, IBrush, IBrushSpec, selectedItemStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEqual } from '@visactor/vutils';\nimport { Factory } from '../../core/factory';\nimport type { DataZoom } from '../data-zoom';\nimport type { AxisComponent } from '../axis/base-axis';\nimport { getSpecInfo } from '../util';\nimport { brush } from '../../theme/builtin/common/component/brush';\n\nconst IN_BRUSH_STATE = 'inBrush';\nconst OUT_BRUSH_STATE = 'outOfBrush';\n\nexport class Brush<T extends IBrushSpec = IBrushSpec> extends BaseComponent<T> implements IBrush {\n layoutType: 'none' = 'none';\n static type = ComponentTypeEnum.brush;\n type = ComponentTypeEnum.brush;\n name: string = ComponentTypeEnum.brush;\n\n static readonly builtInTheme = {\n brush\n };\n static specKey = 'brush';\n specKey = 'brush';\n\n layoutZIndex: number = LayoutZIndex.Brush;\n\n // brush组件\n protected _brushComponents!: BrushComponent[];\n protected _relativeRegions!: IRegion[];\n protected _linkedSeries: ISeries[] = [];\n\n private _itemMap: { [regionId: string | number]: IMark[] } = {};\n private _linkedItemMap: { [seriesId: string | number]: IMark[] } = {};\n\n // 用brushName做分组管理的原因是: 如果有多个brush, 某个图元A brush内, 但在B brush外, 该图元state会被B误变成out of brush。 但其实该图元只有在A brush外才能被判断out of brush\n // 用dict做存储因为方便查找和删减对应图元\n protected _inBrushElementsMap: { [brushName: string]: { [elementKey: string]: IMarkGraphic } } = {};\n protected _outOfBrushElementsMap: { [elementKey: string]: IMarkGraphic } = {};\n protected _linkedInBrushElementsMap: { [brushName: string]: { [elementKey: string]: IMarkGraphic } } = {};\n protected _linkedOutOfBrushElementsMap: { [elementKey: string]: IMarkGraphic } = {};\n\n private _cacheInteractiveRangeAttrs: BrushInteractiveRangeAttr[] = [];\n\n private _releatedAxes: AxisComponent[] = [];\n\n // 根据region找axis\n private _regionAxisMap: { [regionId: string]: AxisComponent[] } = {};\n // 根据axis找dataZoom\n private _axisDataZoomMap: { [axisId: string]: DataZoom } = {};\n // 记录当前操作的axis或dataZoom的状态\n private _zoomRecord: {\n operateComponent: AxisComponent | DataZoom;\n start: number;\n end: number;\n startValue: number | string;\n endValue: number | string;\n }[] = [];\n\n static getSpecInfo(chartSpec: any): Maybe<IModelSpecInfo[]> {\n return getSpecInfo<IBrushSpec>(chartSpec, this.specKey, this.type, (s: IBrushSpec) => {\n return s.visible !== false;\n });\n }\n\n /*** start: abstract pipe ***/\n init() {\n const inBrushMarkAttr = this._transformBrushedMarkAttr(this._spec.inBrush);\n const outOfBrushMarkAttr = this._transformBrushedMarkAttr(this._spec.outOfBrush);\n // 注册mark state, 便于后续state管理\n this._option.getAllSeries().forEach((s: ISeries) => {\n s.getActiveMarks().forEach((m: IMark) => {\n if (m) {\n s.setMarkStyle(\n m,\n {\n ...inBrushMarkAttr\n },\n IN_BRUSH_STATE,\n AttributeLevel.Series\n );\n s.setMarkStyle(\n m,\n {\n ...outOfBrushMarkAttr\n },\n OUT_BRUSH_STATE,\n AttributeLevel.Series\n );\n }\n });\n });\n }\n private _initNeedOperatedItem() {\n const seriesUserId = this._spec.seriesId;\n const seriesIndex = this._spec.seriesIndex;\n this._relativeRegions.forEach(r => {\n const allMarks: IMark[] = [];\n r.getSeries().forEach((s: ISeries) => {\n if (\n (seriesUserId && array(seriesUserId).includes(s.userId.toString())) ||\n (seriesIndex && array(seriesIndex).includes(s.getSpecIndex())) ||\n (!seriesIndex && !seriesUserId)\n ) {\n allMarks.push(...s.getMarksWithoutRoot());\n }\n this._itemMap[r.id] = allMarks;\n });\n });\n\n this._linkedSeries.forEach(s => {\n this._linkedItemMap[s.id] = s.getMarksWithoutRoot();\n });\n }\n\n created() {\n super.created();\n\n this.initEvent();\n this._bindRegions();\n this._bindLinkedSeries();\n this._initRegionAxisMap();\n this._initAxisDataZoomMap();\n this._initNeedOperatedItem();\n }\n\n protected _bindRegions() {\n if (!isValid(this._spec.regionId) && !isValid(this._spec.regionIndex)) {\n this._relativeRegions = this._option.getAllRegions();\n } else {\n this._relativeRegions = this._option.getRegionsInUserIdOrIndex(\n array(this._spec.regionId),\n array(this._spec.regionIndex)\n );\n }\n }\n\n protected _bindLinkedSeries() {\n if (!isValid(this._spec.brushLinkSeriesId) && !isValid(this._spec.brushLinkSeriesIndex)) {\n return;\n }\n this._linkedSeries = this._option.getSeriesInUserIdOrIndex(\n array(this._spec.brushLinkSeriesId),\n array(this._spec.brushLinkSeriesIndex)\n );\n }\n\n private _initRegionAxisMap() {\n // 如果配置了axis,则按配置\n // 如果没有配置axis,则默认所有axis\n if (isValid(this._spec.axisId)) {\n array(this._spec.axisId).forEach((axisId: string) => {\n this._releatedAxes.push(this._option.getComponentByUserId(axisId) as AxisComponent);\n });\n } else if (isValid(this._spec.axisIndex)) {\n array(this._spec.axisIndex).forEach((axisIndex: number) => {\n this._releatedAxes.push(this._option.getComponentByIndex('axes', axisIndex) as AxisComponent);\n });\n } else {\n this._releatedAxes = this._option.getComponentsByKey('axes') as AxisComponent[];\n }\n\n // 按照region进行分组,便于brush找到关联axis (brush -> region -> axis)\n this._releatedAxes.forEach((axis: AxisComponent) => {\n axis?.getRegions().forEach((region: IRegion) => {\n if (this._regionAxisMap['region_' + region.id]) {\n this._regionAxisMap['region_' + region.id].push(axis);\n } else {\n this._regionAxisMap['region_' + region.id] = [axis];\n }\n });\n });\n }\n\n private _initAxisDataZoomMap() {\n (this._option.getComponentsByKey('dataZoom') as DataZoom[]).forEach((dz: DataZoom) => {\n if (dz.relatedAxisComponent) {\n this._axisDataZoomMap[(dz.relatedAxisComponent as AxisComponent).id] = dz;\n }\n });\n }\n\n protected initEvent() {\n // do nothing\n }\n\n _compareSpec(spec: T, prevSpec: T) {\n if (this._brushComponents) {\n // FIXME: 这个逻辑放在这个方法里不太妥当?\n this._relativeRegions.forEach((region: IRegion, index: number) => {\n this._updateBrushComponent(region, index);\n });\n }\n const result = super._compareSpec(spec, prevSpec);\n if (!isEqual(prevSpec, spec)) {\n result.reRender = true;\n result.reMake = true;\n }\n return result;\n }\n\n onLayoutEnd(): void {\n super.onLayoutEnd();\n if (this._option.disableTriggerEvent) {\n return;\n }\n const brushVisible = this._spec.visible ?? true;\n if (brushVisible) {\n if (!this._brushComponents) {\n this._brushComponents = [];\n this._relativeRegions.forEach((region: IRegion, index: number) => {\n this._createBrushComponent(region, index);\n });\n } else {\n this._relativeRegions.forEach((region: IRegion, index: number) => {\n this._updateBrushComponent(region, index);\n });\n }\n }\n }\n /*** end: abstract pipe ***/\n\n /*** start: brush component ***/\n protected _updateBrushComponent(region: IRegion, componentIndex: number) {\n const interactiveAttr = this._getBrushInteractiveAttr(region);\n // 布局变化后, 更新可交互范围\n const brushComponent = this._brushComponents[componentIndex];\n brushComponent.setAttributes(interactiveAttr as any);\n\n // 布局变化后,清空brushMask 和 重置图元高亮状态\n this._initMarkBrushState(componentIndex, '');\n brushComponent.children[0].removeAllChild();\n }\n\n protected _createBrushComponent(region: IRegion, componentIndex: number) {\n const interactiveAttr = this._getBrushInteractiveAttr(region);\n const brush = new BrushComponent({\n zIndex: this.layoutZIndex,\n brushStyle: transformToGraphic(this._spec?.style),\n ...interactiveAttr,\n ...this._spec,\n disableTriggerEvent: this._option.disableTriggerEvent\n });\n brush.id = this._spec.id ?? `brush-${this.id}`;\n this.getContainer().add(brush as unknown as INode);\n this._brushComponents.push(brush);\n this._cacheInteractiveRangeAttrs.push(interactiveAttr);\n\n brush.addEventListener(BrushEvent.brushActive, (e: any) => {\n this._initMarkBrushState(componentIndex, OUT_BRUSH_STATE);\n this._emitEvent(ChartEvent.brushActive, region);\n });\n\n brush.addEventListener(BrushEvent.drawStart, (e: any) => {\n this._setRegionMarkPickable(region, true);\n this._emitEvent(ChartEvent.brushStart, region);\n });\n\n brush.addEventListener(BrushEvent.moveStart, (e: any) => {\n this._setRegionMarkPickable(region, true);\n this._emitEvent(ChartEvent.brushStart, region);\n });\n\n brush.addEventListener(BrushEvent.drawing, (e: any) => {\n this._setRegionMarkPickable(region, false);\n this._handleBrushChange(region, e);\n this._emitEvent(ChartEvent.brushChange, region);\n });\n\n brush.addEventListener(BrushEvent.moving, (e: any) => {\n this._setRegionMarkPickable(region, false);\n this._handleBrushChange(region, e);\n this._emitEvent(ChartEvent.brushChange, region);\n });\n\n brush.addEventListener(BrushEvent.brushClear, (e: any) => {\n this._setRegionMarkPickable(region, true);\n this._initMarkBrushState(componentIndex, '');\n this._emitEvent(ChartEvent.brushClear, region);\n });\n\n brush.addEventListener(BrushEvent.drawEnd, (e: any) => {\n this._setRegionMarkPickable(region, true);\n const { operateMask } = e.detail as any;\n if (this._spec?.onBrushEnd) {\n // 如果onBrushEnd返回true,则清空brush, 并抛出clear事件\n if (this._spec.onBrushEnd(e) === true) {\n this.clearGraphic();\n this._initMarkBrushState(componentIndex, '');\n this._emitEvent(ChartEvent.brushClear, region);\n } else {\n this._spec.onBrushEnd(e);\n this._emitEvent(ChartEvent.brushEnd, region);\n }\n } else {\n const inBrushData = this._extendDataInBrush(this._inBrushElementsMap);\n if (!this._spec.zoomWhenEmpty && inBrushData.length > 0) {\n this._setAxisAndDataZoom(operateMask, region);\n }\n this._emitEvent(ChartEvent.brushEnd, region);\n }\n });\n\n brush.addEventListener(BrushEvent.moveEnd, (e: any) => {\n this._setRegionMarkPickable(region, true);\n const { operateMask } = e.detail as any;\n const inBrushData = this._extendDataInBrush(this._inBrushElementsMap);\n if (!this._spec.zoomWhenEmpty && inBrushData.length > 0) {\n this._setAxisAndDataZoom(operateMask, region);\n }\n this._emitEvent(ChartEvent.brushEnd, region);\n });\n }\n\n protected _getBrushInteractiveAttr(region: IRegion) {\n const regionLayoutPosition = region.getLayoutStartPoint();\n const regionLayoutRect = region.getLayoutRect();\n const seriesRegionStartX = regionLayoutPosition.x;\n const seriesRegionEndX = seriesRegionStartX + regionLayoutRect.width;\n const seriesRegionStartY = regionLayoutPosition.y;\n const seriesRegionEndY = seriesRegionStartY + regionLayoutRect.height;\n return {\n interactiveRange: {\n minY: seriesRegionStartY,\n maxY: seriesRegionEndY,\n minX: seriesRegionStartX,\n maxX: seriesRegionEndX\n },\n xRange: [seriesRegionStartX, seriesRegionEndX],\n yRange: [seriesRegionStartY, seriesRegionEndY]\n } as BrushInteractiveRangeAttr;\n }\n\n private _transformBrushedMarkAttr(brushedStyle: selectedItemStyle) {\n const styleResult: any = {};\n if (brushedStyle?.symbol) {\n styleResult.symbolType = brushedStyle.symbol;\n }\n if (brushedStyle?.symbolSize) {\n styleResult.size = brushedStyle.symbolSize;\n }\n if (brushedStyle?.color) {\n styleResult.fill = brushedStyle.color;\n }\n if (brushedStyle?.colorAlpha) {\n styleResult.fillOpacity = brushedStyle.colorAlpha;\n }\n return {\n ...transformToGraphic(brushedStyle),\n ...styleResult\n };\n }\n /*** end: brush component ***/\n\n /*** start: event dispatch ***/\n private _handleBrushChange(region: IRegion, e: any) {\n const { operateMask } = e.detail as any;\n this._reconfigItem(operateMask, region);\n this._reconfigLinkedItem(operateMask, region);\n }\n\n protected _extendDataInBrush(elementsMap: { [brushName: string]: { [elementKey: string]: IMarkGraphic } }) {\n const data = [];\n for (const brushName in elementsMap) {\n for (const elementKey in elementsMap[brushName]) {\n data.push({\n ...elementsMap[brushName][elementKey].context?.data?.[0]\n });\n }\n }\n return data;\n }\n\n protected _extendDatumOutOfBrush(elementsMap: { [elementKey: string]: IMarkGraphic }) {\n const data = [];\n for (const elementKey in elementsMap) {\n // 图例筛选后, elementKey未更新, 导致data可能为null\n // FIXME: brush透出的map维护逻辑有待优化\n data.push(elementsMap[elementKey].context?.data?.[0]);\n }\n return data;\n }\n\n private _emitEvent(eventType: string, region: IRegion) {\n this.event.emit(eventType, {\n model: this,\n value: {\n // 操作类型\n operateType: eventType,\n // 正在操作的region\n operateRegion: region,\n // 在选框内的 element data\n inBrushData: this._extendDataInBrush(this._inBrushElementsMap),\n // 在选框外的 element data\n outOfBrushData: this._extendDatumOutOfBrush(this._outOfBrushElementsMap),\n // 被链接的系列中:在选框内的 element data\n linkInBrushData: this._extendDataInBrush(this._linkedInBrushElementsMap),\n // 被链接的系列中:在选框外的 element data\n linkOutOfBrushData: this._extendDatumOutOfBrush(this._linkedOutOfBrushElementsMap),\n // 在选框内的 图形\n inBrushElementsMap: this._inBrushElementsMap,\n // 在选框外的 图形\n outOfBrushElementsMap: this._outOfBrushElementsMap,\n // 被链接的系列中:在选框内的 图形\n linkedInBrushElementsMap: this._linkedInBrushElementsMap,\n // 被链接的系列中:在选框外的 图形\n linkedOutOfBrushElementsMap: this._linkedOutOfBrushElementsMap,\n // 缩放记录\n zoomRecord: this._zoomRecord\n },\n vchart: this._option?.globalInstance\n });\n }\n /*** end: event dispatch ***/\n\n /** start: set mark state ***/\n private _reconfigItem(operateMask: IPolygon, region: IRegion) {\n if (!operateMask?.globalTransMatrix || !operateMask?.attribute?.points) {\n return;\n }\n\n // 根据变换矩阵得到brushMask的实际坐标\n const points = operateMask?.attribute?.points ?? [];\n const { a, b, c, d, e, f } = operateMask.globalTransMatrix;\n const pointsCoord = points.map((p: IPointLike) => {\n return {\n x: a * p.x + c * p.y + e,\n y: b * p.x + d * p.y + f\n };\n });\n const { markTypeFilter = [] } = this._spec;\n\n // 遍历图元, 更新状态\n this._itemMap[region.id].forEach((mark: IMark) => {\n if (markTypeFilter.includes(mark.type)) {\n return;\n }\n const graphics = mark.getGraphics();\n\n if (!graphics || !graphics.length) {\n return;\n }\n graphics.forEach((graphicItem: IMarkGraphic) => {\n const elementKey = mark.id + '_' + graphicItem.context.key;\n // 判断逻辑:\n // 应该被置为inBrush状态的图元:\n // before: 在out brush elment map, 即不在任何brush中\n // now: 在当前brush图元中\n\n // 应该被置为outOfBrush状态的图元:\n // before: 在当前brush 的 in brush element map中, 即在当前brush中\n // now: 不在当前brush中\n const isBrushContainItem = this._isBrushContainItem(operateMask.globalAABBBounds, pointsCoord, graphicItem);\n if (this._outOfBrushElementsMap?.[elementKey] && isBrushContainItem) {\n graphicItem.addState(IN_BRUSH_STATE, true);\n if (!this._inBrushElementsMap[operateMask?.name]) {\n this._inBrushElementsMap[operateMask?.name] = {};\n }\n this._inBrushElementsMap[operateMask?.name][elementKey] = graphicItem;\n delete this._outOfBrushElementsMap[elementKey];\n } else if (this._inBrushElementsMap?.[operateMask?.name]?.[elementKey] && !isBrushContainItem) {\n graphicItem.removeState(IN_BRUSH_STATE);\n graphicItem.addState(OUT_BRUSH_STATE, true);\n this._outOfBrushElementsMap[elementKey] = graphicItem;\n delete this._inBrushElementsMap[operateMask.name][elementKey];\n }\n });\n });\n }\n\n private _reconfigLinkedItem(operateMask: IPolygon, region: IRegion) {\n if (!operateMask?.globalTransMatrix || !operateMask?.attribute?.points) {\n return;\n }\n\n const regionLayoutPos = region.getLayoutStartPoint();\n const seriesId = region.getSeries().map(s => s.id);\n this._linkedSeries.forEach((s: ISeries) => {\n if (!seriesId.includes(s.id)) {\n const sRegionLayoutPos = s.getRegion().getLayoutStartPoint();\n\n const regionOffsetX = sRegionLayoutPos.x - regionLayoutPos.x;\n const regionOffsetY = sRegionLayoutPos.y - regionLayoutPos.y;\n\n // 根据变换矩阵得到brushMask的实际坐标\n const points = operateMask?.attribute?.points ?? [];\n const { a, b, c, d, e, f } = operateMask.globalTransMatrix;\n\n const dx = regionOffsetX || 0;\n const dy = regionOffsetY || 0;\n\n const pointsCoord = points.map((p: IPointLike) => {\n return {\n x: a * p.x + c * p.y + e + dx,\n y: b * p.x + d * p.y + f + dy\n };\n });\n\n operateMask.globalAABBBounds\n .clone()\n .set(\n operateMask.globalAABBBounds.x1 + dx,\n operateMask.globalAABBBounds.y1 + dy,\n operateMask.globalAABBBounds.x2 + dx,\n operateMask.globalAABBBounds.y2 + dy\n );\n\n const { markTypeFilter = [] } = this._spec;\n this._linkedItemMap[s.id].forEach((mark: IMark) => {\n if (markTypeFilter.includes(mark.type)) {\n return;\n }\n const graphics = mark.getGraphics();\n if (!graphics || !graphics.length) {\n return;\n }\n graphics.forEach((graphicItem: IMarkGraphic) => {\n const { key } = graphicItem.context;\n\n const elementKey = mark.id + '_' + graphicItem.context.key;\n // 判断逻辑:\n // 应该被置为inBrush状态的图元:\n // before: 在out brush elment map, 即不在任何brush中\n // now: 在当前brush图元中\n\n // 应该被置为outOfBrush状态的图元:\n // before: 在当前brush 的 in brush element map中, 即在当前brush中\n // now: 不在当前brush中\n if (\n this._linkedOutOfBrushElementsMap?.[elementKey] &&\n this._isBrushContainItem(operateMask.globalAABBBounds, pointsCoord, graphicItem)\n ) {\n graphicItem.addState(IN_BRUSH_STATE, true);\n if (!this._linkedInBrushElementsMap[operateMask?.name]) {\n this._linkedInBrushElementsMap[operateMask?.name] = {};\n }\n this._linkedInBrushElementsMap[operateMask?.name][elementKey] = graphicItem;\n delete this._linkedOutOfBrushElementsMap[elementKey];\n } else if (\n this._linkedInBrushElementsMap?.[operateMask?.name]?.[elementKey] &&\n !this._isBrushContainItem(operateMask.globalAABBBounds, pointsCoord, graphicItem)\n ) {\n graphicItem.removeState(IN_BRUSH_STATE);\n graphicItem.addState(OUT_BRUSH_STATE, true);\n this._linkedOutOfBrushElementsMap[elementKey] = graphicItem;\n }\n });\n });\n }\n });\n }\n\n private _isBrushContainItem(brushMaskAABBBounds: IBounds, brushMaskPointsCoord: IPointLike[], item: IMarkGraphic) {\n // brush与图表图元进行相交 或 包含判断\n let itemBounds: { x: number; y: number }[] = [];\n if (['symbol', 'rect'].includes(item.type)) {\n const { x1, x2, y1, y2 } = item?.globalAABBBounds;\n itemBounds = [\n {\n x: x1,\n y: y1\n },\n {\n x: x2,\n y: y1\n },\n {\n x: x2,\n y: y2\n },\n {\n x: x1,\n y: y2\n }\n ];\n return polygonIntersectPolygon(brushMaskPointsCoord, itemBounds);\n }\n return brushMaskAABBBounds.intersects(item.globalAABBBounds);\n }\n\n protected _initItemMap(\n itemMap: Record<string, IMark[]>,\n elementMap: Record<string, IMarkGraphic>,\n stateName: string\n ) {\n const { markTypeFilter = [] } = this._spec;\n\n Object.entries(itemMap).forEach(([regionId, marks]) => {\n marks.forEach((mark: IMark) => {\n if (markTypeFilter.includes(mark.type)) {\n return;\n }\n const graphics = mark.getGraphics();\n if (!graphics || !graphics.length) {\n return;\n }\n graphics.forEach((el: IMarkGraphic) => {\n const elementKey = mark.id + '_' + el.context.key;\n el.removeState(IN_BRUSH_STATE);\n el.removeState(OUT_BRUSH_STATE);\n stateName && el.addState(stateName, true);\n elementMap[elementKey] = el;\n });\n });\n });\n }\n\n protected _initMarkBrushState(componentIndex: number, stateName: string) {\n this._brushComponents.forEach((brush, index) => {\n if (index !== componentIndex) {\n brush.children[0].removeAllChild();\n }\n });\n\n this._inBrushElementsMap = {};\n this._outOfBrushElementsMap = {};\n this._linkedInBrushElementsMap = {};\n this._linkedOutOfBrushElementsMap = {};\n\n this._initItemMap(this._itemMap, this._outOfBrushElementsMap, stateName);\n this._initItemMap(this._linkedItemMap, this._linkedOutOfBrushElementsMap, stateName);\n }\n\n // 绘制brush的时候, 避免brush与图元交互冲突\n private _setRegionMarkPickable(region: IRegion, pickable: boolean) {\n region\n .getGroupMark()\n .getGraphics()\n .forEach(g => g.setAttribute('childrenPickable', pickable));\n }\n /** end: set mark state ***/\n\n /** start: control data zoom ***/\n private _stateClamp(state: number) {\n return Math.min(Math.max(0, state), 1);\n }\n\n private _setAxisAndDataZoom(operateMask: IPolygon, region: IRegion) {\n this._zoomRecord = [];\n if (this._spec.zoomAfterBrush) {\n // step1: 拿到brush bounds, 计算 continuous axis/dataZoom新范围\n const operateMaskBounds = operateMask.AABBBounds;\n\n // step2:\n // 如果轴关联了dataZoom,则通过dataZoom更新轴\n // 如果轴没有关联dataZoom,则直接更改轴rangeFactor\n this._regionAxisMap['region_' + region.id]?.forEach(axis => {\n const isHorizontal = axis.layoutOrient === 'bottom' || axis.layoutOrient === 'top';\n const axisRangeExpand = this._spec.axisRangeExpand ?? 0;\n const { x1, x2, y1, y2 } = operateMaskBounds;\n const regionStartAttr = isHorizontal ? 'x' : 'y';\n const boundsStart = isHorizontal ? x1 : y1;\n const boundsEnd = isHorizontal ? x2 : y2;\n\n if (this._axisDataZoomMap[axis.id]) {\n const dataZoom = this._axisDataZoomMap[axis.id];\n const releatedAxis = dataZoom.relatedAxisComponent as AxisComponent;\n const startValue = releatedAxis\n .getScale()\n .invert(boundsStart - region.getLayoutStartPoint()[regionStartAttr]);\n const endValue = releatedAxis.getScale().invert(boundsEnd - region.getLayoutStartPoint()[regionStartAttr]);\n const startPercent = dataZoom.dataToStatePoint(startValue);\n const endPercent = dataZoom.dataToStatePoint(endValue);\n const newStartPercent = this._stateClamp(startPercent - axisRangeExpand);\n const newEndPercent = this._stateClamp(endPercent + axisRangeExpand);\n dataZoom.setStartAndEnd(Math.min(newStartPercent, newEndPercent), Math.max(newStartPercent, newEndPercent), [\n 'percent',\n 'percent'\n ]);\n\n this._zoomRecord.push({\n operateComponent: dataZoom,\n start: newStartPercent,\n end: newEndPercent,\n startValue: dataZoom.statePointToData(newStartPercent),\n endValue: dataZoom.statePointToData(newEndPercent)\n });\n } else {\n const range = axis.getScale().range();\n const rangeFactor = axis.scaleRangeFactor() ?? [0, 1];\n\n // 判断轴是否为反向轴(last(range) < range[0]),即从右到左, 或从下到上\n // 如果是反向轴, 计算start和end时, 也要保持 start < end\n const isAxisReverse = last(range) < range[0];\n const startPosTemp = boundsStart - region.getLayoutStartPoint()[regionStartAttr];\n const endPosTemp = boundsEnd - region.getLayoutStartPoint()[regionStartAttr];\n const endPos = isAxisReverse ? Math.min(startPosTemp, endPosTemp) : Math.max(startPosTemp, endPosTemp);\n const startPos = isAxisReverse ? Math.max(startPosTemp, endPosTemp) : Math.min(startPosTemp, endPosTemp);\n\n const start =\n ((startPos - range[0]) / (last(range) - range[0])) * (rangeFactor[1] - rangeFactor[0]) + rangeFactor[0];\n const end =\n ((endPos - range[0]) / (last(range) - range[0])) * (rangeFactor[1] - rangeFactor[0]) + rangeFactor[0];\n const newStart = this._stateClamp(start - axisRangeExpand);\n const newEnd = this._stateClamp(end + axisRangeExpand);\n axis.scaleRangeFactor([newStart, newEnd]);\n axis.effect.scaleUpdate();\n\n this._zoomRecord.push({\n operateComponent: axis,\n start: newStart,\n end: newEnd,\n startValue: axis.getScale().invert(startPos),\n endValue: axis.getScale().invert(endPos)\n });\n }\n });\n }\n }\n\n /** end: control data zoom ***/\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return this._brushComponents as unknown as IGroup[];\n }\n\n clearGraphic(): void {\n if (this._brushComponents) {\n this._brushComponents.forEach(brush => {\n (brush as any)._container.incrementalClearChild();\n });\n }\n }\n\n clear(): void {\n if (this._brushComponents) {\n const container = this.getContainer();\n this._brushComponents.forEach((brush, index) => {\n // 清空元素状态\n this._initMarkBrushState(index, '');\n\n brush.removeAllChild();\n brush.releaseBrushEvents();\n\n if (container) {\n container.removeChild(brush as unknown as INode);\n }\n });\n this._brushComponents = null;\n }\n }\n}\n\nexport const registerBrush = () => {\n Factory.registerComponent(Brush.type, Brush);\n};\n"]}
@@ -274,12 +274,12 @@ export class BaseCrossHair extends BaseComponent {
274
274
  void 0 !== labelZIndex && (this.labelZIndex = labelZIndex), void 0 !== gridZIndex && (this.gridZIndex = gridZIndex);
275
275
  }
276
276
  _parseField(field, fieldName) {
277
- var _a, _b;
277
+ var _a, _b, _c;
278
278
  const hair = {}, {line: line = {}, label: label = {}, visible: visible} = field;
279
279
  if (hair.visible = visible, hair.type = line.type || "line", !1 === line.visible) hair.style = {
280
280
  visible: !1
281
281
  }; else {
282
- const style = line.style || {}, {stroke: stroke, fill: fill, lineWidth: lineWidth} = style, _c = style, {strokeOpacity: strokeOpacity, fillOpacity: fillOpacity, opacity: opacity} = _c, restStyle = __rest(_c, [ "strokeOpacity", "fillOpacity", "opacity" ]), isLineType = "line" === hair.type;
282
+ const style = line.style || {}, {stroke: stroke, fill: fill, lineWidth: lineWidth} = style, _d = style, {strokeOpacity: strokeOpacity, fillOpacity: fillOpacity, opacity: opacity} = _d, restStyle = __rest(_d, [ "strokeOpacity", "fillOpacity", "opacity" ]), isLineType = "line" === hair.type;
283
283
  let finalOpacity = isLineType ? strokeOpacity : fillOpacity;
284
284
  if (isNumber(opacity) && (finalOpacity = (null != finalOpacity ? finalOpacity : 1) * opacity),
285
285
  hair.style = Object.assign({
@@ -296,7 +296,7 @@ export class BaseCrossHair extends BaseComponent {
296
296
  }
297
297
  }
298
298
  if (label.visible) {
299
- const labelBackground = label.labelBackground || {}, labelStyle = label.style || {}, _d = labelBackground.style || {}, {fill: rectFill = "rgba(47, 59, 82, 0.9)", stroke: rectStroke, outerBorder: outerBorder} = _d, rectStyle = __rest(_d, [ "fill", "stroke", "outerBorder" ]);
299
+ const labelBackground = label.labelBackground || {}, syncAxisLabelAngle = null !== (_c = label.syncAxisLabelAngle) && void 0 !== _c && _c, labelStyle = label.style || {}, _e = labelBackground.style || {}, {fill: rectFill = "rgba(47, 59, 82, 0.9)", stroke: rectStroke, outerBorder: outerBorder} = _e, rectStyle = __rest(_e, [ "fill", "stroke", "outerBorder" ]);
300
300
  hair.label = {
301
301
  visible: !0,
302
302
  formatMethod: label.formatMethod,
@@ -304,6 +304,7 @@ export class BaseCrossHair extends BaseComponent {
304
304
  minWidth: labelBackground.minWidth,
305
305
  maxWidth: labelBackground.maxWidth,
306
306
  padding: labelBackground.padding,
307
+ syncAxisLabelAngle: syncAxisLabelAngle,
307
308
  textStyle: Object.assign(Object.assign({
308
309
  fontSize: 14,
309
310
  pickable: !1