@visactor/vchart 1.13.5-vstory.3 → 1.13.6-alpha.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 (192) hide show
  1. package/build/es5/index.js +1 -1
  2. package/build/index.es.js +5715 -6456
  3. package/build/index.js +5724 -6455
  4. package/build/index.min.js +1 -1
  5. package/build/tsconfig.tsbuildinfo +1 -1
  6. package/cjs/chart/base/base-chart.js +6 -8
  7. package/cjs/chart/base/base-chart.js.map +1 -1
  8. package/cjs/chart/index.js +2 -1
  9. package/cjs/compile/compilable-base.js +1 -2
  10. package/cjs/component/brush/brush.js +7 -3
  11. package/cjs/component/brush/brush.js.map +1 -1
  12. package/cjs/component/crosshair/base.d.ts +23 -34
  13. package/cjs/component/crosshair/base.js +90 -6
  14. package/cjs/component/crosshair/base.js.map +1 -1
  15. package/cjs/component/crosshair/cartesian.d.ts +5 -28
  16. package/cjs/component/crosshair/cartesian.js +72 -170
  17. package/cjs/component/crosshair/cartesian.js.map +1 -1
  18. package/cjs/component/crosshair/interface/common.d.ts +67 -2
  19. package/cjs/component/crosshair/interface/common.js.map +1 -1
  20. package/cjs/component/crosshair/interface/index.d.ts +0 -2
  21. package/cjs/component/crosshair/interface/index.js +0 -1
  22. package/cjs/component/crosshair/interface/index.js.map +1 -1
  23. package/cjs/component/crosshair/interface/spec.d.ts +8 -4
  24. package/cjs/component/crosshair/interface/spec.js.map +1 -1
  25. package/cjs/component/crosshair/polar.d.ts +6 -22
  26. package/cjs/component/crosshair/polar.js +78 -143
  27. package/cjs/component/crosshair/polar.js.map +1 -1
  28. package/cjs/component/crosshair/utils/cartesian.d.ts +5 -26
  29. package/cjs/component/crosshair/utils/cartesian.js +86 -174
  30. package/cjs/component/crosshair/utils/cartesian.js.map +1 -1
  31. package/cjs/component/crosshair/utils/polar.d.ts +18 -11
  32. package/cjs/component/crosshair/utils/polar.js +72 -117
  33. package/cjs/component/crosshair/utils/polar.js.map +1 -1
  34. package/cjs/component/data-zoom/data-filter-base-component.d.ts +2 -2
  35. package/cjs/component/data-zoom/data-filter-base-component.js +8 -7
  36. package/cjs/component/data-zoom/data-filter-base-component.js.map +1 -1
  37. package/cjs/component/data-zoom/data-zoom/data-zoom.js +2 -2
  38. package/cjs/component/data-zoom/data-zoom/data-zoom.js.map +1 -1
  39. package/cjs/component/data-zoom/interface.d.ts +11 -0
  40. package/cjs/component/data-zoom/interface.js.map +1 -1
  41. package/cjs/component/data-zoom/scroll-bar/scroll-bar.d.ts +0 -1
  42. package/cjs/component/data-zoom/scroll-bar/scroll-bar.js +7 -10
  43. package/cjs/component/data-zoom/scroll-bar/scroll-bar.js.map +1 -1
  44. package/cjs/component/label/interface.d.ts +2 -0
  45. package/cjs/component/label/interface.js.map +1 -1
  46. package/cjs/component/label/label.d.ts +2 -0
  47. package/cjs/component/label/label.js +15 -1
  48. package/cjs/component/label/label.js.map +1 -1
  49. package/cjs/component/tooltip/processor/mark-tooltip.js +13 -1
  50. package/cjs/component/tooltip/processor/mark-tooltip.js.map +1 -1
  51. package/cjs/component/tooltip/tooltip.d.ts +1 -0
  52. package/cjs/component/tooltip/tooltip.js +5 -4
  53. package/cjs/component/tooltip/tooltip.js.map +1 -1
  54. package/cjs/core/index.d.ts +2 -2
  55. package/cjs/core/index.js +42 -2
  56. package/cjs/core/index.js.map +1 -1
  57. package/cjs/data/transforms/waterfall.d.ts +1 -0
  58. package/cjs/data/transforms/waterfall.js +1 -1
  59. package/cjs/data/transforms/waterfall.js.map +1 -1
  60. package/cjs/event/index.d.ts +1 -0
  61. package/cjs/event/index.js +16 -1
  62. package/cjs/event/index.js.map +1 -1
  63. package/cjs/interaction/zoom/zoomable.d.ts +1 -0
  64. package/cjs/interaction/zoom/zoomable.js +4 -3
  65. package/cjs/interaction/zoom/zoomable.js.map +1 -1
  66. package/cjs/plugin/components/axis-sync/tick-align-transform.js +10 -5
  67. package/cjs/plugin/components/axis-sync/tick-align-transform.js.map +1 -1
  68. package/cjs/plugin/components/tooltip-handler/utils/attribute.js +1 -1
  69. package/cjs/plugin/components/tooltip-handler/utils/attribute.js.map +1 -1
  70. package/cjs/plugin/components/tooltip-handler/utils/position.d.ts +2 -4
  71. package/cjs/plugin/components/tooltip-handler/utils/position.js +23 -11
  72. package/cjs/plugin/components/tooltip-handler/utils/position.js.map +1 -1
  73. package/cjs/plugin/components/tooltip-handler/utils/style.js +2 -1
  74. package/cjs/plugin/components/tooltip-handler/utils/style.js.map +1 -1
  75. package/cjs/scale/global-scale.js +2 -1
  76. package/cjs/scale/global-scale.js.map +1 -1
  77. package/cjs/series/area/area.js +3 -1
  78. package/cjs/series/area/area.js.map +1 -1
  79. package/cjs/series/funnel/funnel.js +1 -1
  80. package/cjs/series/funnel/funnel.js.map +1 -1
  81. package/cjs/series/pictogram/pictogram.d.ts +2 -0
  82. package/cjs/series/pictogram/pictogram.js +7 -4
  83. package/cjs/series/pictogram/pictogram.js.map +1 -1
  84. package/cjs/series/progress/circular/circular.js +5 -0
  85. package/cjs/series/progress/circular/circular.js.map +1 -1
  86. package/cjs/series/sunburst/sunburst.js.map +1 -1
  87. package/cjs/series/waterfall/waterfall.js +4 -2
  88. package/cjs/series/waterfall/waterfall.js.map +1 -1
  89. package/cjs/typings/visual.d.ts +7 -0
  90. package/cjs/typings/visual.js.map +1 -1
  91. package/cjs/util/scale.js +1 -1
  92. package/cjs/util/scale.js.map +1 -1
  93. package/esm/chart/base/base-chart.js +6 -8
  94. package/esm/chart/base/base-chart.js.map +1 -1
  95. package/esm/chart/index.js +2 -1
  96. package/esm/compile/compilable-base.js +1 -2
  97. package/esm/component/brush/brush.js +7 -3
  98. package/esm/component/brush/brush.js.map +1 -1
  99. package/esm/component/crosshair/base.d.ts +23 -34
  100. package/esm/component/crosshair/base.js +95 -5
  101. package/esm/component/crosshair/base.js.map +1 -1
  102. package/esm/component/crosshair/cartesian.d.ts +5 -28
  103. package/esm/component/crosshair/cartesian.js +73 -174
  104. package/esm/component/crosshair/cartesian.js.map +1 -1
  105. package/esm/component/crosshair/interface/common.d.ts +67 -2
  106. package/esm/component/crosshair/interface/common.js.map +1 -1
  107. package/esm/component/crosshair/interface/index.d.ts +0 -2
  108. package/esm/component/crosshair/interface/index.js +0 -4
  109. package/esm/component/crosshair/interface/index.js.map +1 -1
  110. package/esm/component/crosshair/interface/spec.d.ts +8 -4
  111. package/esm/component/crosshair/interface/spec.js.map +1 -1
  112. package/esm/component/crosshair/polar.d.ts +6 -22
  113. package/esm/component/crosshair/polar.js +75 -146
  114. package/esm/component/crosshair/polar.js.map +1 -1
  115. package/esm/component/crosshair/utils/cartesian.d.ts +5 -26
  116. package/esm/component/crosshair/utils/cartesian.js +81 -166
  117. package/esm/component/crosshair/utils/cartesian.js.map +1 -1
  118. package/esm/component/crosshair/utils/polar.d.ts +18 -11
  119. package/esm/component/crosshair/utils/polar.js +67 -112
  120. package/esm/component/crosshair/utils/polar.js.map +1 -1
  121. package/esm/component/data-zoom/data-filter-base-component.d.ts +2 -2
  122. package/esm/component/data-zoom/data-filter-base-component.js +8 -7
  123. package/esm/component/data-zoom/data-filter-base-component.js.map +1 -1
  124. package/esm/component/data-zoom/data-zoom/data-zoom.js +2 -2
  125. package/esm/component/data-zoom/data-zoom/data-zoom.js.map +1 -1
  126. package/esm/component/data-zoom/interface.d.ts +11 -0
  127. package/esm/component/data-zoom/interface.js.map +1 -1
  128. package/esm/component/data-zoom/scroll-bar/scroll-bar.d.ts +0 -1
  129. package/esm/component/data-zoom/scroll-bar/scroll-bar.js +8 -9
  130. package/esm/component/data-zoom/scroll-bar/scroll-bar.js.map +1 -1
  131. package/esm/component/label/interface.d.ts +2 -0
  132. package/esm/component/label/interface.js.map +1 -1
  133. package/esm/component/label/label.d.ts +2 -0
  134. package/esm/component/label/label.js +14 -1
  135. package/esm/component/label/label.js.map +1 -1
  136. package/esm/component/tooltip/processor/mark-tooltip.js +13 -1
  137. package/esm/component/tooltip/processor/mark-tooltip.js.map +1 -1
  138. package/esm/component/tooltip/tooltip.d.ts +1 -0
  139. package/esm/component/tooltip/tooltip.js +5 -4
  140. package/esm/component/tooltip/tooltip.js.map +1 -1
  141. package/esm/core/index.d.ts +2 -2
  142. package/esm/core/index.js +2 -2
  143. package/esm/core/index.js.map +1 -1
  144. package/esm/data/transforms/waterfall.d.ts +1 -0
  145. package/esm/data/transforms/waterfall.js +1 -1
  146. package/esm/data/transforms/waterfall.js.map +1 -1
  147. package/esm/event/index.d.ts +1 -0
  148. package/esm/event/index.js +2 -0
  149. package/esm/event/index.js.map +1 -1
  150. package/esm/interaction/zoom/zoomable.d.ts +1 -0
  151. package/esm/interaction/zoom/zoomable.js +4 -3
  152. package/esm/interaction/zoom/zoomable.js.map +1 -1
  153. package/esm/plugin/components/axis-sync/tick-align-transform.js +7 -5
  154. package/esm/plugin/components/axis-sync/tick-align-transform.js.map +1 -1
  155. package/esm/plugin/components/tooltip-handler/utils/attribute.js +1 -1
  156. package/esm/plugin/components/tooltip-handler/utils/attribute.js.map +1 -1
  157. package/esm/plugin/components/tooltip-handler/utils/position.d.ts +2 -4
  158. package/esm/plugin/components/tooltip-handler/utils/position.js +23 -10
  159. package/esm/plugin/components/tooltip-handler/utils/position.js.map +1 -1
  160. package/esm/plugin/components/tooltip-handler/utils/style.js +2 -1
  161. package/esm/plugin/components/tooltip-handler/utils/style.js.map +1 -1
  162. package/esm/scale/global-scale.js +2 -1
  163. package/esm/scale/global-scale.js.map +1 -1
  164. package/esm/series/area/area.js +4 -0
  165. package/esm/series/area/area.js.map +1 -1
  166. package/esm/series/funnel/funnel.js +1 -1
  167. package/esm/series/funnel/funnel.js.map +1 -1
  168. package/esm/series/pictogram/pictogram.d.ts +2 -0
  169. package/esm/series/pictogram/pictogram.js +7 -4
  170. package/esm/series/pictogram/pictogram.js.map +1 -1
  171. package/esm/series/progress/circular/circular.js +6 -1
  172. package/esm/series/progress/circular/circular.js.map +1 -1
  173. package/esm/series/sunburst/sunburst.js.map +1 -1
  174. package/esm/series/waterfall/waterfall.js +4 -2
  175. package/esm/series/waterfall/waterfall.js.map +1 -1
  176. package/esm/typings/visual.d.ts +7 -0
  177. package/esm/typings/visual.js.map +1 -1
  178. package/esm/util/scale.js +1 -1
  179. package/esm/util/scale.js.map +1 -1
  180. package/package.json +18 -18
  181. package/cjs/component/crosshair/interface/cartesian.d.ts +0 -33
  182. package/cjs/component/crosshair/interface/cartesian.js +0 -6
  183. package/cjs/component/crosshair/interface/cartesian.js.map +0 -1
  184. package/cjs/component/crosshair/interface/polar.d.ts +0 -25
  185. package/cjs/component/crosshair/interface/polar.js +0 -6
  186. package/cjs/component/crosshair/interface/polar.js.map +0 -1
  187. package/esm/component/crosshair/interface/cartesian.d.ts +0 -33
  188. package/esm/component/crosshair/interface/cartesian.js +0 -2
  189. package/esm/component/crosshair/interface/cartesian.js.map +0 -1
  190. package/esm/component/crosshair/interface/polar.d.ts +0 -25
  191. package/esm/component/crosshair/interface/polar.js +0 -2
  192. package/esm/component/crosshair/interface/polar.js.map +0 -1
@@ -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 { 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, ISymbolGraphicAttribute } from '@visactor/vrender-core';\nimport { transformToGraphic } from '../../util/style';\nimport type { ISeries } from '../../series/interface';\nimport type { IMark } from '../../mark/interface';\nimport type { IElement } from '@visactor/vgrammar-core';\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 { IBandLikeScale, IContinuousScale, ILinearScale } from '@visactor/vscale';\nimport type { AxisComponent } from '../axis/base-axis';\nimport { getSpecInfo } from '../util';\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 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]: IElement } } = {};\n protected _outOfBrushElementsMap: { [elementKey: string]: IElement } = {};\n protected _linkedInBrushElementsMap: { [brushName: string]: { [elementKey: string]: IElement } } = {};\n protected _linkedOutOfBrushElementsMap: { [elementKey: string]: IElement } = {};\n\n private _needInitOutState: boolean = true;\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: { operateComponent: AxisComponent | DataZoom; start: number; end: number }[] = [];\n\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\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 created() {\n super.created();\n\n // event\n this.initEvent();\n this._bindRegions();\n this._bindLinkedSeries();\n this._initRegionAxisMap();\n this._initAxisDataZoomMap();\n this._initNeedOperatedItem();\n }\n\n protected _extendDataInBrush(elementsMap: { [brushName: string]: { [elementKey: string]: IElement } }) {\n const data = [];\n for (const brushName in elementsMap) {\n for (const elementKey in elementsMap[brushName]) {\n data.push({\n ...elementsMap[brushName][elementKey]?.data?.[0]\n });\n }\n }\n return data;\n }\n\n protected _extendDatumOutOfBrush(elementsMap: { [elementKey: string]: IElement }) {\n const data = [];\n for (const elementKey in elementsMap) {\n // 图例筛选后, elementKey未更新, 导致data可能为null\n // FIXME: brush透出的map维护逻辑有待优化\n data.push(elementsMap[elementKey].data?.[0]);\n }\n return data;\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 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 // 布局变化后, 更新brush 和 图元状态\n // 方案一:\n // TODO: 更新mask位置(保持选框在画布中的相对位置)\n // TODO: 是否更新mask大小有待商榷(保持选框位置和图元高亮区域一致)\n\n // 方案二: 清空brushMask 和 图元高亮状态\n this._initMarkBrushState(componentIndex, '');\n brushComponent.children[0].removeAllChild();\n this._needInitOutState = true;\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 const { brushMode = 'single' } = this._spec;\n this._brushComponents.push(brush);\n this._cacheInteractiveRangeAttrs.push(interactiveAttr);\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 // 需要重置out状态的情况:\n // _needInitOutState:框选模式为'single' 且 开始后的第一次drawing时(这里不选择drawStart而选择第一次触发drawing的时机是因为点击空白处也会触发drawStart), 需要重置图元状态\n if (this._needInitOutState && brushMode === 'single') {\n this._initMarkBrushState(componentIndex, OUT_BRUSH_STATE);\n }\n this._needInitOutState = false;\n this._needDisablePickable = true;\n\n this._handleBrushChange(ChartEvent.brushChange, region, e);\n this._emitEvent(ChartEvent.brushChange, region);\n });\n\n brush.addEventListener(BrushEvent.moving, (e: any) => {\n this._handleBrushChange(ChartEvent.brushChange, region, e);\n this._emitEvent(ChartEvent.brushChange, region);\n });\n\n brush.addEventListener(BrushEvent.brushClear, (e: any) => {\n this._initMarkBrushState(componentIndex, '');\n this._needInitOutState = true;\n this._needDisablePickable = false;\n this._handleBrushChange(ChartEvent.brushChange, region, e);\n this._handleBrushChange(ChartEvent.brushClear, region, e);\n this._emitEvent(ChartEvent.brushChange, region);\n this._emitEvent(ChartEvent.brushClear, region);\n });\n\n brush.addEventListener(BrushEvent.drawEnd, (e: any) => {\n this._needInitOutState = true;\n this._needDisablePickable = false;\n const { operateMask } = e.detail as any;\n this._handleBrushChange(ChartEvent.brushEnd, region, e);\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 brush.addEventListener(BrushEvent.moveEnd, (e: any) => {\n const { operateMask } = e.detail as any;\n this._handleBrushChange(ChartEvent.brushEnd, region, e);\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 private _handleBrushChange(eventType: string, region: IRegion, e: any) {\n const { operateMask } = e.detail as any;\n this._reconfigItem(operateMask, region);\n this._reconfigLinkedItem(operateMask, region);\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 // 在选框内的 vgrammar elements\n inBrushElementsMap: this._inBrushElementsMap,\n // 在选框外的 vgrammar elements\n outOfBrushElementsMap: this._outOfBrushElementsMap,\n // 被链接的系列中:在选框内的 vgrammar elements\n linkedInBrushElementsMap: this._linkedInBrushElementsMap,\n // 被链接的系列中:在选框外的 vgrammar elements\n linkedOutOfBrushElementsMap: this._linkedOutOfBrushElementsMap,\n // 缩放记录\n zoomRecord: this._zoomRecord\n }\n });\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\n private _reconfigItem(operateMask: IPolygon, region: IRegion) {\n // 遍历图元, 更新状态\n this._itemMap[region.id].forEach((mark: IMark) => {\n const grammarMark = mark.getProduct();\n if (!grammarMark || !grammarMark.elements || !grammarMark.elements.length) {\n return;\n }\n const elements = grammarMark.elements;\n elements.forEach((el: IElement) => {\n const graphicItem = el.getGraphicItem();\n const elementKey = mark.id + '_' + el.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 (this._outOfBrushElementsMap?.[elementKey] && this._isBrushContainItem(operateMask, graphicItem)) {\n el.addState(IN_BRUSH_STATE);\n if (!this._inBrushElementsMap[operateMask?.name]) {\n this._inBrushElementsMap[operateMask?.name] = {};\n }\n this._inBrushElementsMap[operateMask?.name][elementKey] = el;\n delete this._outOfBrushElementsMap[elementKey];\n } else if (\n this._inBrushElementsMap?.[operateMask?.name]?.[elementKey] &&\n !this._isBrushContainItem(operateMask, graphicItem)\n ) {\n el.removeState(IN_BRUSH_STATE);\n el.addState(OUT_BRUSH_STATE);\n this._outOfBrushElementsMap[elementKey] = el;\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 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 this._linkedItemMap[s.id].forEach((mark: IMark) => {\n const grammarMark = mark.getProduct();\n if (!grammarMark || !grammarMark.elements || !grammarMark.elements.length) {\n return;\n }\n const elements = grammarMark.elements;\n elements.forEach((el: IElement) => {\n const graphicItem = el.getGraphicItem();\n const elementKey = mark.id + '_' + el.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, graphicItem, { dx: regionOffsetX, dy: regionOffsetY })\n ) {\n el.addState(IN_BRUSH_STATE);\n if (!this._linkedInBrushElementsMap[operateMask?.name]) {\n this._linkedInBrushElementsMap[operateMask?.name] = {};\n }\n this._linkedInBrushElementsMap[operateMask?.name][elementKey] = el;\n delete this._linkedOutOfBrushElementsMap[elementKey];\n } else if (\n this._linkedInBrushElementsMap?.[operateMask?.name]?.[elementKey] &&\n !this._isBrushContainItem(operateMask, graphicItem, { dx: regionOffsetX, dy: regionOffsetY })\n ) {\n el.removeState(IN_BRUSH_STATE);\n el.addState(OUT_BRUSH_STATE);\n this._linkedOutOfBrushElementsMap[elementKey] = el;\n }\n graphicItem.setAttribute('pickable', !this._needDisablePickable);\n });\n });\n }\n });\n }\n\n private _isBrushContainItem(brushMask: IPolygon, item: IGraphic, linkedOffset?: { dx: number; dy: number }) {\n if (!brushMask?.globalTransMatrix || !brushMask?.attribute?.points) {\n return false;\n }\n\n // 根据变换矩阵得到brushMask的实际坐标\n const points = brushMask?.attribute?.points ?? [];\n const { a, b, c, d, e, f } = brushMask.globalTransMatrix;\n\n const dx = linkedOffset?.dx || 0;\n const dy = linkedOffset?.dy || 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 brushMask.globalAABBBounds\n .clone()\n .set(\n brushMask.globalAABBBounds.x1 + dx,\n brushMask.globalAABBBounds.y1 + dy,\n brushMask.globalAABBBounds.x2 + dx,\n brushMask.globalAABBBounds.y2 + dy\n );\n\n // 根据变换矩阵得到item的实际坐标\n const x = item.globalTransMatrix.e;\n const y = item.globalTransMatrix.f;\n\n // brush与图表图元进行相交 或 包含判断\n let itemBounds: { x: number; y: number }[] = [];\n if (item.type === 'symbol') {\n const { size: itemSize = 0 } = item?.attribute as ISymbolGraphicAttribute;\n const size = array(itemSize)[0] / 2;\n itemBounds = [\n {\n x: x - size,\n y: y - size\n },\n {\n x: x + size,\n y: y - size\n },\n {\n x: x + size,\n y: y + size\n },\n {\n x: x - size,\n y: y + size\n }\n ];\n return polygonIntersectPolygon(pointsCoord, itemBounds);\n } else if (item.type === 'rect') {\n const { x1, x2, y1, y2 } = item?.AABBBounds;\n const width = Math.abs(x1 - x2);\n const height = Math.abs(y1 - y2);\n itemBounds = [\n {\n x: x,\n y: y\n },\n {\n x: x + width,\n y: y\n },\n {\n x: x + width,\n y: y + height\n },\n {\n x: x,\n y: y + height\n }\n ];\n return polygonIntersectPolygon(pointsCoord, itemBounds);\n }\n return brushMask.globalAABBBounds.intersects(item.globalAABBBounds);\n }\n\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 });\n } else {\n const range = axis.getScale().range();\n const rangeFactor = (axis.getScale() as IContinuousScale | IBandLikeScale).rangeFactor() ?? [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.getScale() as ILinearScale).rangeFactor([newStart, newEnd]);\n axis.effect.scaleUpdate();\n\n this._zoomRecord.push({\n operateComponent: axis,\n start: newStart,\n end: newEnd\n });\n }\n });\n }\n }\n\n protected _bindRegions() {\n if (isValid(this._spec.regionId) && isValid(this._spec.regionIndex)) {\n this._relativeRegions = this._option.getAllRegions();\n }\n this._relativeRegions = this._option.getRegionsInUserIdOrIndex(\n array(this._spec.regionId),\n array(this._spec.regionIndex)\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 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 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._option.getAllSeries().forEach((s: ISeries) => {\n s.getMarksWithoutRoot().forEach((mark: IMark) => {\n const grammarMark = mark.getProduct();\n if (!grammarMark || !grammarMark.elements || !grammarMark.elements.length) {\n return;\n }\n const elements = grammarMark.elements;\n elements.forEach((el: IElement) => {\n const elementKey = mark.id + '_' + el.key;\n el.removeState(IN_BRUSH_STATE);\n el.removeState(OUT_BRUSH_STATE);\n el.addState(stateName);\n this._outOfBrushElementsMap[elementKey] = el;\n this._linkedOutOfBrushElementsMap[elementKey] = el;\n });\n });\n });\n }\n\n protected initEvent() {\n // do nothing\n }\n onRender(ctx: IModelRenderOption): void {\n // do nothing\n }\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return this._brushComponents as unknown as IGroup[];\n }\n\n /**\n * updateSpec\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(ctx: any): void {\n super.onLayoutEnd(ctx);\n if (this._option.disableTriggerEvent) {\n return;\n }\n const brushVisible = this._spec.visible ?? true;\n if (brushVisible) {\n // 创建或更新marker组件\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\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 => {\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 { 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, ISymbolGraphicAttribute } from '@visactor/vrender-core';\nimport { transformToGraphic } from '../../util/style';\nimport type { ISeries } from '../../series/interface';\nimport type { IMark } from '../../mark/interface';\nimport type { IElement } from '@visactor/vgrammar-core';\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 { IBandLikeScale, IContinuousScale, ILinearScale } from '@visactor/vscale';\nimport type { AxisComponent } from '../axis/base-axis';\nimport { getSpecInfo } from '../util';\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 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]: IElement } } = {};\n protected _outOfBrushElementsMap: { [elementKey: string]: IElement } = {};\n protected _linkedInBrushElementsMap: { [brushName: string]: { [elementKey: string]: IElement } } = {};\n protected _linkedOutOfBrushElementsMap: { [elementKey: string]: IElement } = {};\n\n private _needInitOutState: boolean = true;\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 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\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 created() {\n super.created();\n\n // event\n this.initEvent();\n this._bindRegions();\n this._bindLinkedSeries();\n this._initRegionAxisMap();\n this._initAxisDataZoomMap();\n this._initNeedOperatedItem();\n }\n\n protected _extendDataInBrush(elementsMap: { [brushName: string]: { [elementKey: string]: IElement } }) {\n const data = [];\n for (const brushName in elementsMap) {\n for (const elementKey in elementsMap[brushName]) {\n data.push({\n ...elementsMap[brushName][elementKey]?.data?.[0]\n });\n }\n }\n return data;\n }\n\n protected _extendDatumOutOfBrush(elementsMap: { [elementKey: string]: IElement }) {\n const data = [];\n for (const elementKey in elementsMap) {\n // 图例筛选后, elementKey未更新, 导致data可能为null\n // FIXME: brush透出的map维护逻辑有待优化\n data.push(elementsMap[elementKey].data?.[0]);\n }\n return data;\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 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 // 布局变化后, 更新brush 和 图元状态\n // 方案一:\n // TODO: 更新mask位置(保持选框在画布中的相对位置)\n // TODO: 是否更新mask大小有待商榷(保持选框位置和图元高亮区域一致)\n\n // 方案二: 清空brushMask 和 图元高亮状态\n this._initMarkBrushState(componentIndex, '');\n brushComponent.children[0].removeAllChild();\n this._needInitOutState = true;\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 const { brushMode = 'single' } = this._spec;\n this._brushComponents.push(brush);\n this._cacheInteractiveRangeAttrs.push(interactiveAttr);\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 // 需要重置out状态的情况:\n // _needInitOutState:框选模式为'single' 且 开始后的第一次drawing时(这里不选择drawStart而选择第一次触发drawing的时机是因为点击空白处也会触发drawStart), 需要重置图元状态\n if (this._needInitOutState && brushMode === 'single') {\n this._initMarkBrushState(componentIndex, OUT_BRUSH_STATE);\n }\n this._needInitOutState = false;\n this._needDisablePickable = true;\n\n this._handleBrushChange(ChartEvent.brushChange, region, e);\n this._emitEvent(ChartEvent.brushChange, region);\n });\n\n brush.addEventListener(BrushEvent.moving, (e: any) => {\n this._handleBrushChange(ChartEvent.brushChange, region, e);\n this._emitEvent(ChartEvent.brushChange, region);\n });\n\n brush.addEventListener(BrushEvent.brushClear, (e: any) => {\n this._initMarkBrushState(componentIndex, '');\n this._needInitOutState = true;\n this._needDisablePickable = false;\n this._handleBrushChange(ChartEvent.brushChange, region, e);\n this._handleBrushChange(ChartEvent.brushClear, region, e);\n this._emitEvent(ChartEvent.brushChange, region);\n this._emitEvent(ChartEvent.brushClear, region);\n });\n\n brush.addEventListener(BrushEvent.drawEnd, (e: any) => {\n this._needInitOutState = true;\n this._needDisablePickable = false;\n const { operateMask } = e.detail as any;\n this._handleBrushChange(ChartEvent.brushEnd, region, e);\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 brush.addEventListener(BrushEvent.moveEnd, (e: any) => {\n const { operateMask } = e.detail as any;\n this._handleBrushChange(ChartEvent.brushEnd, region, e);\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 private _handleBrushChange(eventType: string, region: IRegion, e: any) {\n const { operateMask } = e.detail as any;\n this._reconfigItem(operateMask, region);\n this._reconfigLinkedItem(operateMask, region);\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 // 在选框内的 vgrammar elements\n inBrushElementsMap: this._inBrushElementsMap,\n // 在选框外的 vgrammar elements\n outOfBrushElementsMap: this._outOfBrushElementsMap,\n // 被链接的系列中:在选框内的 vgrammar elements\n linkedInBrushElementsMap: this._linkedInBrushElementsMap,\n // 被链接的系列中:在选框外的 vgrammar elements\n linkedOutOfBrushElementsMap: this._linkedOutOfBrushElementsMap,\n // 缩放记录\n zoomRecord: this._zoomRecord\n }\n });\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\n private _reconfigItem(operateMask: IPolygon, region: IRegion) {\n // 遍历图元, 更新状态\n this._itemMap[region.id].forEach((mark: IMark) => {\n const grammarMark = mark.getProduct();\n if (!grammarMark || !grammarMark.elements || !grammarMark.elements.length) {\n return;\n }\n const elements = grammarMark.elements;\n elements.forEach((el: IElement) => {\n const graphicItem = el.getGraphicItem();\n const elementKey = mark.id + '_' + el.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 (this._outOfBrushElementsMap?.[elementKey] && this._isBrushContainItem(operateMask, graphicItem)) {\n el.addState(IN_BRUSH_STATE);\n if (!this._inBrushElementsMap[operateMask?.name]) {\n this._inBrushElementsMap[operateMask?.name] = {};\n }\n this._inBrushElementsMap[operateMask?.name][elementKey] = el;\n delete this._outOfBrushElementsMap[elementKey];\n } else if (\n this._inBrushElementsMap?.[operateMask?.name]?.[elementKey] &&\n !this._isBrushContainItem(operateMask, graphicItem)\n ) {\n el.removeState(IN_BRUSH_STATE);\n el.addState(OUT_BRUSH_STATE);\n this._outOfBrushElementsMap[elementKey] = el;\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 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 this._linkedItemMap[s.id].forEach((mark: IMark) => {\n const grammarMark = mark.getProduct();\n if (!grammarMark || !grammarMark.elements || !grammarMark.elements.length) {\n return;\n }\n const elements = grammarMark.elements;\n elements.forEach((el: IElement) => {\n const graphicItem = el.getGraphicItem();\n const elementKey = mark.id + '_' + el.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, graphicItem, { dx: regionOffsetX, dy: regionOffsetY })\n ) {\n el.addState(IN_BRUSH_STATE);\n if (!this._linkedInBrushElementsMap[operateMask?.name]) {\n this._linkedInBrushElementsMap[operateMask?.name] = {};\n }\n this._linkedInBrushElementsMap[operateMask?.name][elementKey] = el;\n delete this._linkedOutOfBrushElementsMap[elementKey];\n } else if (\n this._linkedInBrushElementsMap?.[operateMask?.name]?.[elementKey] &&\n !this._isBrushContainItem(operateMask, graphicItem, { dx: regionOffsetX, dy: regionOffsetY })\n ) {\n el.removeState(IN_BRUSH_STATE);\n el.addState(OUT_BRUSH_STATE);\n this._linkedOutOfBrushElementsMap[elementKey] = el;\n }\n graphicItem.setAttribute('pickable', !this._needDisablePickable);\n });\n });\n }\n });\n }\n\n private _isBrushContainItem(brushMask: IPolygon, item: IGraphic, linkedOffset?: { dx: number; dy: number }) {\n if (!brushMask?.globalTransMatrix || !brushMask?.attribute?.points) {\n return false;\n }\n\n // 根据变换矩阵得到brushMask的实际坐标\n const points = brushMask?.attribute?.points ?? [];\n const { a, b, c, d, e, f } = brushMask.globalTransMatrix;\n\n const dx = linkedOffset?.dx || 0;\n const dy = linkedOffset?.dy || 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 brushMask.globalAABBBounds\n .clone()\n .set(\n brushMask.globalAABBBounds.x1 + dx,\n brushMask.globalAABBBounds.y1 + dy,\n brushMask.globalAABBBounds.x2 + dx,\n brushMask.globalAABBBounds.y2 + dy\n );\n\n // 根据变换矩阵得到item的实际坐标\n const x = item.globalTransMatrix.e;\n const y = item.globalTransMatrix.f;\n\n // brush与图表图元进行相交 或 包含判断\n let itemBounds: { x: number; y: number }[] = [];\n if (item.type === 'symbol') {\n const { size: itemSize = 0 } = item?.attribute as ISymbolGraphicAttribute;\n const size = array(itemSize)[0] / 2;\n itemBounds = [\n {\n x: x - size,\n y: y - size\n },\n {\n x: x + size,\n y: y - size\n },\n {\n x: x + size,\n y: y + size\n },\n {\n x: x - size,\n y: y + size\n }\n ];\n return polygonIntersectPolygon(pointsCoord, itemBounds);\n } else if (item.type === 'rect') {\n const { x1, x2, y1, y2 } = item?.AABBBounds;\n const width = Math.abs(x1 - x2);\n const height = Math.abs(y1 - y2);\n itemBounds = [\n {\n x: x,\n y: y\n },\n {\n x: x + width,\n y: y\n },\n {\n x: x + width,\n y: y + height\n },\n {\n x: x,\n y: y + height\n }\n ];\n return polygonIntersectPolygon(pointsCoord, itemBounds);\n }\n return brushMask.globalAABBBounds.intersects(item.globalAABBBounds);\n }\n\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.getScale() as IContinuousScale | IBandLikeScale).rangeFactor() ?? [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.getScale() as ILinearScale).rangeFactor([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 protected _bindRegions() {\n if (isValid(this._spec.regionId) && isValid(this._spec.regionIndex)) {\n this._relativeRegions = this._option.getAllRegions();\n }\n this._relativeRegions = this._option.getRegionsInUserIdOrIndex(\n array(this._spec.regionId),\n array(this._spec.regionIndex)\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 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 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._option.getAllSeries().forEach((s: ISeries) => {\n s.getMarksWithoutRoot().forEach((mark: IMark) => {\n const grammarMark = mark.getProduct();\n if (!grammarMark || !grammarMark.elements || !grammarMark.elements.length) {\n return;\n }\n const elements = grammarMark.elements;\n elements.forEach((el: IElement) => {\n const elementKey = mark.id + '_' + el.key;\n el.removeState(IN_BRUSH_STATE);\n el.removeState(OUT_BRUSH_STATE);\n el.addState(stateName);\n this._outOfBrushElementsMap[elementKey] = el;\n this._linkedOutOfBrushElementsMap[elementKey] = el;\n });\n });\n });\n }\n\n protected initEvent() {\n // do nothing\n }\n onRender(ctx: IModelRenderOption): void {\n // do nothing\n }\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return this._brushComponents as unknown as IGroup[];\n }\n\n /**\n * updateSpec\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(ctx: any): void {\n super.onLayoutEnd(ctx);\n if (this._option.disableTriggerEvent) {\n return;\n }\n const brushVisible = this._spec.visible ?? true;\n if (brushVisible) {\n // 创建或更新marker组件\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\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 => {\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,39 +1,13 @@
1
- import type { Dict, IBoundsLike } from '@visactor/vutils';
1
+ import type { IBoundsLike } from '@visactor/vutils';
2
+ import { Tag } from '@visactor/vrender-components';
3
+ import type { IGraphic } from '@visactor/vrender-core';
2
4
  import type { IModelLayoutOption, IModelRenderOption } from '../../model/interface';
3
5
  import type { IRegion } from '../../region/interface';
4
6
  import { BaseComponent } from '../base/base-component';
5
- import type { IPadding, StringOrNumber, TooltipActiveType, TooltipData } from '../../typings';
7
+ import type { IPoint, StringOrNumber, TooltipActiveType, TooltipData } from '../../typings';
6
8
  import type { IComponentOption } from '../interface';
7
- import type { ICrossHair, CrossHairTrigger, ICartesianCrosshairSpec, IPolarCrosshairSpec, ICrosshairCategoryFieldSpec } from './interface';
9
+ import type { ICrossHair, CrossHairTrigger, ICartesianCrosshairSpec, IPolarCrosshairSpec, ICrosshairCategoryFieldSpec, IAxisInfo, CrossHairStateByField } from './interface';
8
10
  import type { IAxis } from '../axis/interface';
9
- export type IBound = {
10
- x1: number;
11
- y1: number;
12
- x2: number;
13
- y2: number;
14
- };
15
- export type IAxisInfo<T> = Map<number, IBound & {
16
- axis: T;
17
- }>;
18
- export interface IHair {
19
- visible: boolean;
20
- type: 'rect' | 'line';
21
- style?: Dict<any>;
22
- label?: {
23
- visible: boolean;
24
- formatMethod?: (text: StringOrNumber | string[], position: string) => string | string[];
25
- formatter?: string | string[];
26
- textStyle?: Dict<any>;
27
- minWidth?: number;
28
- maxWidth?: number;
29
- padding?: IPadding | number | number[];
30
- panel?: Dict<any>;
31
- zIndex?: number;
32
- };
33
- }
34
- export interface IHairRadius extends IHair {
35
- smooth?: boolean;
36
- }
37
11
  export declare abstract class BaseCrossHair<T extends ICartesianCrosshairSpec | IPolarCrosshairSpec> extends BaseComponent<T> implements ICrossHair {
38
12
  static specKey: string;
39
13
  specKey: string;
@@ -44,6 +18,7 @@ export declare abstract class BaseCrossHair<T extends ICartesianCrosshairSpec |
44
18
  enable: boolean;
45
19
  showDefault: boolean;
46
20
  triggerOff: 'none' | number;
21
+ protected _stateByField: CrossHairStateByField;
47
22
  private _timer?;
48
23
  private _clickLock?;
49
24
  private _hasActive?;
@@ -51,11 +26,20 @@ export declare abstract class BaseCrossHair<T extends ICartesianCrosshairSpec |
51
26
  get enableRemain(): boolean;
52
27
  private _limitBounds;
53
28
  constructor(spec: T, options: IComponentOption);
54
- protected abstract _showDefaultCrosshairBySpec(): void;
55
29
  protected abstract _layoutCrosshair(x: number, y: number, tooltipData?: TooltipData, activeType?: TooltipActiveType): void;
56
- protected abstract _parseFieldInfo(): void;
57
- abstract hide(): void;
30
+ abstract setAxisValue(v: StringOrNumber, axis: IAxis): void;
31
+ abstract layoutByValue(v?: number): void;
32
+ protected abstract _getDatumAtPoint(axis: IAxis, point: IPoint): number | string;
33
+ protected _setAllAxisValues(axisMap: IAxisInfo<IAxis>, point: IPoint, field: string): boolean;
34
+ clearAxisValue(): void;
35
+ hideCrosshair(): void;
36
+ showCrosshair(dimInfo: {
37
+ axis: IAxis;
38
+ value: string | number;
39
+ }[]): void;
58
40
  protected _getLimitBounds(): IBoundsLike;
41
+ protected _showDefaultCrosshairBySpec(): void;
42
+ protected _updateVisibleCrosshair(): void;
59
43
  protected _showDefaultCrosshair(): void;
60
44
  setAttrFromSpec(): void;
61
45
  created(): void;
@@ -87,8 +71,13 @@ export declare abstract class BaseCrossHair<T extends ICartesianCrosshairSpec |
87
71
  onLayoutEnd(ctx: IModelLayoutOption): void;
88
72
  onRender(ctx: IModelRenderOption): void;
89
73
  protected _releaseEvent(): void;
74
+ protected _parseFieldInfo(): void;
90
75
  protected _parseCrosshairSpec(): void;
91
76
  protected _parseField(field: ICrosshairCategoryFieldSpec, fieldName: string): any;
92
77
  protected _filterAxisByPoint<T>(axisMap: IAxisInfo<T>, relativeX: number, relativeY: number): IAxisInfo<T>;
78
+ protected _updateCrosshairLabel(label: Tag, labelAttrs: any, callback: (label: Tag) => void): void;
93
79
  protected clearOutEvent(): void;
80
+ protected _hideByField(field: string): void;
81
+ hide(): void;
82
+ protected _getNeedClearVRenderComponents(): IGraphic[];
94
83
  }
@@ -14,7 +14,7 @@ Object.defineProperty(exports, "__esModule", {
14
14
  value: !0
15
15
  }), exports.BaseCrossHair = void 0;
16
16
 
17
- const vutils_1 = require("@visactor/vutils"), common_1 = require("../../typings/spec/common"), base_component_1 = require("../base/base-component"), math_1 = require("../../util/math"), event_1 = require("../../constant/event"), layout_1 = require("../../constant/layout"), config_1 = require("./config"), ORIENT_MAP = {
17
+ const vrender_components_1 = require("@visactor/vrender-components"), vutils_1 = require("@visactor/vutils"), common_1 = require("../../typings/spec/common"), base_component_1 = require("../base/base-component"), math_1 = require("../../util/math"), event_1 = require("../../constant/event"), layout_1 = require("../../constant/layout"), config_1 = require("./config"), common_2 = require("./utils/common"), vscale_1 = require("@visactor/vscale"), ORIENT_MAP = {
18
18
  x: [ "top", "bottom" ],
19
19
  y: [ "left", "right" ],
20
20
  category: [ "angle" ],
@@ -58,6 +58,34 @@ class BaseCrossHair extends base_component_1.BaseComponent {
58
58
  this.clearOutEvent(), this.hide();
59
59
  }, this.enable = !0, this.showDefault = !0;
60
60
  }
61
+ _setAllAxisValues(axisMap, point, field) {
62
+ let discrete = !1;
63
+ if (axisMap.forEach((item => {
64
+ (0, vscale_1.isDiscrete)(item.axis.getScale().type) && (discrete ? this.enable = !1 : discrete = !0);
65
+ })), !this.enable) return !1;
66
+ const {currentValue: currentValue} = this._stateByField[field];
67
+ return axisMap.forEach(((item, id) => {
68
+ const axis = item.axis;
69
+ currentValue.set(id, {
70
+ datum: this._getDatumAtPoint(axis, point),
71
+ axis: axis
72
+ });
73
+ })), !0;
74
+ }
75
+ clearAxisValue() {
76
+ Object.keys(this._stateByField).forEach((field => {
77
+ this._stateByField[field].currentValue.clear();
78
+ }));
79
+ }
80
+ hideCrosshair() {
81
+ this.clearAxisValue(), this.hide();
82
+ }
83
+ showCrosshair(dimInfo) {
84
+ dimInfo && dimInfo.length && (this.showDefault = !1, this.clearAxisValue(), dimInfo.forEach((d => {
85
+ const {axis: axis, value: value} = d;
86
+ this.setAxisValue(value, axis);
87
+ })), this.layoutByValue());
88
+ }
61
89
  _getLimitBounds() {
62
90
  var _a, _b;
63
91
  if (!this._limitBounds) {
@@ -74,8 +102,27 @@ class BaseCrossHair extends base_component_1.BaseComponent {
74
102
  }
75
103
  return this._limitBounds;
76
104
  }
105
+ _showDefaultCrosshairBySpec() {
106
+ Object.keys(this._stateByField).forEach((field => {
107
+ const fieldSpec = this._spec[field];
108
+ if (fieldSpec && fieldSpec.visible && fieldSpec.defaultSelect) {
109
+ const {axisIndex: axisIndex, datum: datum} = fieldSpec.defaultSelect, axis = this._option.getComponentsByKey("axes").find((c => c.getSpecIndex() === axisIndex));
110
+ axis && (this._stateByField[field].currentValue.clear(), this._stateByField[field].currentValue.set(axisIndex, {
111
+ axis: axis,
112
+ datum: datum
113
+ }));
114
+ }
115
+ }));
116
+ }
117
+ _updateVisibleCrosshair() {
118
+ let hasVisible = !1;
119
+ Object.keys(this._stateByField).forEach((field => {
120
+ const fieldSpec = this._spec[field];
121
+ fieldSpec && fieldSpec.visible && this._stateByField[field].currentValue.size ? hasVisible = !0 : this._hideByField(field);
122
+ })), hasVisible && this.layoutByValue();
123
+ }
77
124
  _showDefaultCrosshair() {
78
- this.showDefault && this._showDefaultCrosshairBySpec();
125
+ this.showDefault ? (this._showDefaultCrosshairBySpec(), this.layoutByValue()) : this._updateVisibleCrosshair();
79
126
  }
80
127
  setAttrFromSpec() {
81
128
  super.setAttrFromSpec(), this._parseCrosshairSpec();
@@ -197,6 +244,19 @@ class BaseCrossHair extends base_component_1.BaseComponent {
197
244
  this._eventOff(cfg.in, !1, cfg.click), cfg.out && this._eventOff(cfg.out, !0);
198
245
  }));
199
246
  }
247
+ _parseFieldInfo() {
248
+ Object.keys(this._stateByField).forEach((field => {
249
+ const fieldSpec = this._spec[field], {crosshairComp: crosshairComp} = this._stateByField[field];
250
+ if (fieldSpec && fieldSpec.visible) {
251
+ if (this._stateByField[field].attributes = this._parseField(fieldSpec, field), crosshairComp) {
252
+ const {style: style, type: type} = this._stateByField[field].attributes, styleKey = "rect" === type ? "rectStyle" : "lineStyle";
253
+ crosshairComp.setAttributes({
254
+ [styleKey]: style
255
+ });
256
+ }
257
+ } else crosshairComp && crosshairComp.parent && crosshairComp.parent.removeChild(crosshairComp);
258
+ }));
259
+ }
200
260
  _parseCrosshairSpec() {
201
261
  this._parseFieldInfo();
202
262
  const {trigger: trigger, triggerOff: triggerOff, labelZIndex: labelZIndex, gridZIndex: gridZIndex} = this._spec;
@@ -204,12 +264,12 @@ class BaseCrossHair extends base_component_1.BaseComponent {
204
264
  void 0 !== labelZIndex && (this.labelZIndex = labelZIndex), void 0 !== gridZIndex && (this.gridZIndex = gridZIndex);
205
265
  }
206
266
  _parseField(field, fieldName) {
207
- var _a, _b, _c;
267
+ var _a, _b;
208
268
  const hair = {}, {line: line = {}, label: label = {}, visible: visible} = field;
209
269
  if (hair.visible = visible, hair.type = line.type || "line", !1 === line.visible) hair.style = {
210
270
  visible: !1
211
271
  }; else {
212
- 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;
272
+ 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;
213
273
  let finalOpacity = isLineType ? strokeOpacity : fillOpacity;
214
274
  if ((0, vutils_1.isNumber)(opacity) && (finalOpacity = (null != finalOpacity ? finalOpacity : 1) * opacity),
215
275
  hair.style = Object.assign({
@@ -218,7 +278,7 @@ class BaseCrossHair extends base_component_1.BaseComponent {
218
278
  visible: !0
219
279
  }, restStyle), isLineType) hair.style.stroke = stroke || fill, hair.style.lineWidth = (0,
220
280
  vutils_1.get)(line, "width", lineWidth || 2); else {
221
- hair.style.fill = fill || stroke, (null === (_c = null === (_b = null === (_a = this._spec[fieldName]) || void 0 === _a ? void 0 : _a.line) || void 0 === _b ? void 0 : _b.style) || void 0 === _c ? void 0 : _c.stroke) && (hair.style.stroke = this._spec[fieldName].line.style.stroke);
281
+ hair.style.fill = fill || stroke, (null === (_b = null === (_a = null == field ? void 0 : field.line) || void 0 === _a ? void 0 : _a.style) || void 0 === _b ? void 0 : _b.stroke) && (hair.style.stroke = field.line.style.stroke);
222
282
  const rectSize = (0, vutils_1.get)(line, "width");
223
283
  if ("string" == typeof rectSize) {
224
284
  const percent = parseInt(rectSize.substring(0, rectSize.length - 1), 10) / 100;
@@ -227,7 +287,7 @@ class BaseCrossHair extends base_component_1.BaseComponent {
227
287
  }
228
288
  }
229
289
  if (label.visible) {
230
- const labelBackground = label.labelBackground || {}, 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" ]);
290
+ 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" ]);
231
291
  hair.label = {
232
292
  visible: !0,
233
293
  formatMethod: label.formatMethod,
@@ -277,10 +337,34 @@ class BaseCrossHair extends base_component_1.BaseComponent {
277
337
  }
278
338
  })), axisMap;
279
339
  }
340
+ _updateCrosshairLabel(label, labelAttrs, callback) {
341
+ const container = this.getContainer();
342
+ label ? label.setAttributes(labelAttrs) : (label = new vrender_components_1.Tag(labelAttrs),
343
+ null == container || container.add(label), callback(label)), (0, common_2.limitTagInBounds)(label, this._getLimitBounds());
344
+ }
280
345
  clearOutEvent() {
281
346
  this._timer && (clearTimeout(this._timer), this._timer = null), this._clickLock && (this._clickLock = null),
282
347
  this._hasActive && (this._hasActive = null);
283
348
  }
349
+ _hideByField(field) {
350
+ const {crosshairComp: crosshairComp, labelsComp: labelsComp} = this._stateByField[field];
351
+ crosshairComp && crosshairComp.hideAll(), labelsComp && Object.keys(labelsComp).forEach((key => {
352
+ labelsComp[key] && labelsComp[key].hideAll();
353
+ }));
354
+ }
355
+ hide() {
356
+ Object.keys(this._stateByField).forEach((field => {
357
+ this._hideByField(field);
358
+ }));
359
+ }
360
+ _getNeedClearVRenderComponents() {
361
+ return Object.keys(this._stateByField).reduce(((res, field) => {
362
+ const {crosshairComp: crosshairComp, labelsComp: labelsComp} = this._stateByField[field];
363
+ return crosshairComp && res.push(crosshairComp), labelsComp && Object.keys(labelsComp).forEach((key => {
364
+ labelsComp[key] && res.push(labelsComp[key]);
365
+ })), res;
366
+ }), []);
367
+ }
284
368
  }
285
369
 
286
370
  exports.BaseCrossHair = BaseCrossHair, BaseCrossHair.specKey = "crosshair";