@visactor/vchart 1.13.9-alpha.6 → 1.13.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/build/es5/index.js +1 -1
  2. package/build/index.es.js +1047 -747
  3. package/build/index.js +1047 -746
  4. package/build/index.min.js +1 -1
  5. package/build/tsconfig.tsbuildinfo +1 -1
  6. package/cjs/chart/index.d.ts +1 -1
  7. package/cjs/chart/index.js.map +1 -1
  8. package/cjs/chart/pictogram/interface.d.ts +1 -1
  9. package/cjs/chart/pictogram/interface.js.map +1 -1
  10. package/cjs/chart/progress/linear/linear-progress-transformer.js +1 -1
  11. package/cjs/chart/progress/linear/linear-progress-transformer.js.map +1 -1
  12. package/cjs/compile/mark/compilable-mark.d.ts +1 -0
  13. package/cjs/compile/mark/compilable-mark.js +3 -0
  14. package/cjs/compile/mark/compilable-mark.js.map +1 -1
  15. package/cjs/component/axis/base-axis.js +7 -2
  16. package/cjs/component/axis/base-axis.js.map +1 -1
  17. package/cjs/component/axis/interface/spec.d.ts +7 -2
  18. package/cjs/component/axis/interface/spec.js.map +1 -1
  19. package/cjs/component/brush/brush.d.ts +23 -24
  20. package/cjs/component/brush/brush.js +183 -182
  21. package/cjs/component/brush/brush.js.map +1 -1
  22. package/cjs/component/brush/interface.d.ts +2 -0
  23. package/cjs/component/brush/interface.js.map +1 -1
  24. package/cjs/component/crosshair/base.js +1 -1
  25. package/cjs/component/crosshair/base.js.map +1 -1
  26. package/cjs/component/crosshair/utils/cartesian.js +9 -8
  27. package/cjs/component/crosshair/utils/cartesian.js.map +1 -1
  28. package/cjs/component/data-zoom/data-zoom/interface.d.ts +2 -3
  29. package/cjs/component/data-zoom/data-zoom/interface.js.map +1 -1
  30. package/cjs/component/marker/mark-area/base-mark-area.js +27 -17
  31. package/cjs/component/marker/mark-area/base-mark-area.js.map +1 -1
  32. package/cjs/component/marker/mark-area/interface/theme.d.ts +4 -3
  33. package/cjs/component/marker/mark-area/interface/theme.js.map +1 -1
  34. package/cjs/component/marker/mark-line/base-mark-line.js +31 -20
  35. package/cjs/component/marker/mark-line/base-mark-line.js.map +1 -1
  36. package/cjs/component/marker/mark-line/cartesian-mark-line.js +32 -26
  37. package/cjs/component/marker/mark-line/cartesian-mark-line.js.map +1 -1
  38. package/cjs/component/marker/mark-line/interface/theme.d.ts +4 -3
  39. package/cjs/component/marker/mark-line/interface/theme.js.map +1 -1
  40. package/cjs/component/marker/mark-point/cartesian-mark-point.js +3 -1
  41. package/cjs/component/marker/mark-point/cartesian-mark-point.js.map +1 -1
  42. package/cjs/component/marker/utils.d.ts +12 -0
  43. package/cjs/component/marker/utils.js +22 -7
  44. package/cjs/component/marker/utils.js.map +1 -1
  45. package/cjs/constant/event.d.ts +1 -0
  46. package/cjs/constant/event.js +6 -6
  47. package/cjs/constant/event.js.map +1 -1
  48. package/cjs/constant/layout.js +2 -1
  49. package/cjs/constant/sunburst.js +1 -2
  50. package/cjs/core/index.d.ts +1 -1
  51. package/cjs/core/index.js +1 -1
  52. package/cjs/core/index.js.map +1 -1
  53. package/cjs/core/interface.js +2 -1
  54. package/cjs/core/vchart.js +1 -2
  55. package/cjs/data/transforms/pictogram.d.ts +1 -9
  56. package/cjs/data/transforms/pictogram.js +3 -3
  57. package/cjs/data/transforms/pictogram.js.map +1 -1
  58. package/cjs/data/transforms/pie.js +1 -1
  59. package/cjs/data/transforms/pie.js.map +1 -1
  60. package/cjs/index-harmony-simple.js.map +1 -1
  61. package/cjs/index.d.ts +1 -0
  62. package/cjs/index.js +8 -7
  63. package/cjs/index.js.map +1 -1
  64. package/cjs/model/base-model.d.ts +1 -0
  65. package/cjs/model/base-model.js +6 -0
  66. package/cjs/model/base-model.js.map +1 -1
  67. package/cjs/plugin/components/tooltip-handler/dom-tooltip-handler.js +11 -7
  68. package/cjs/plugin/components/tooltip-handler/dom-tooltip-handler.js.map +1 -1
  69. package/cjs/series/bar/bar.js.map +1 -1
  70. package/cjs/series/gauge/gauge.js +7 -5
  71. package/cjs/series/gauge/gauge.js.map +1 -1
  72. package/cjs/series/pictogram/tooltip-helper.d.ts +2 -2
  73. package/cjs/series/pictogram/tooltip-helper.js.map +1 -1
  74. package/cjs/series/pie/pie.js +3 -3
  75. package/cjs/series/pie/pie.js.map +1 -1
  76. package/cjs/series/polar/progress-like/interface.d.ts +1 -0
  77. package/cjs/series/polar/progress-like/interface.js.map +1 -1
  78. package/cjs/series/polar/progress-like/progress-like.js +4 -3
  79. package/cjs/series/polar/progress-like/progress-like.js.map +1 -1
  80. package/cjs/series/progress/linear/interface.d.ts +1 -0
  81. package/cjs/series/progress/linear/interface.js.map +1 -1
  82. package/cjs/series/progress/linear/linear.js +6 -4
  83. package/cjs/series/progress/linear/linear.js.map +1 -1
  84. package/cjs/typings/visual.d.ts +1 -1
  85. package/cjs/typings/visual.js.map +1 -1
  86. package/esm/chart/index.d.ts +1 -1
  87. package/esm/chart/index.js.map +1 -1
  88. package/esm/chart/pictogram/interface.d.ts +1 -1
  89. package/esm/chart/pictogram/interface.js.map +1 -1
  90. package/esm/chart/progress/linear/linear-progress-transformer.js +1 -1
  91. package/esm/chart/progress/linear/linear-progress-transformer.js.map +1 -1
  92. package/esm/compile/mark/compilable-mark.d.ts +1 -0
  93. package/esm/compile/mark/compilable-mark.js +3 -0
  94. package/esm/compile/mark/compilable-mark.js.map +1 -1
  95. package/esm/component/axis/base-axis.js +7 -2
  96. package/esm/component/axis/base-axis.js.map +1 -1
  97. package/esm/component/axis/interface/spec.d.ts +7 -2
  98. package/esm/component/axis/interface/spec.js.map +1 -1
  99. package/esm/component/brush/brush.d.ts +23 -24
  100. package/esm/component/brush/brush.js +179 -177
  101. package/esm/component/brush/brush.js.map +1 -1
  102. package/esm/component/brush/interface.d.ts +2 -0
  103. package/esm/component/brush/interface.js.map +1 -1
  104. package/esm/component/crosshair/base.js +1 -1
  105. package/esm/component/crosshair/base.js.map +1 -1
  106. package/esm/component/crosshair/utils/cartesian.js +9 -8
  107. package/esm/component/crosshair/utils/cartesian.js.map +1 -1
  108. package/esm/component/data-zoom/data-zoom/interface.d.ts +2 -3
  109. package/esm/component/data-zoom/data-zoom/interface.js.map +1 -1
  110. package/esm/component/marker/mark-area/base-mark-area.js +27 -16
  111. package/esm/component/marker/mark-area/base-mark-area.js.map +1 -1
  112. package/esm/component/marker/mark-area/interface/theme.d.ts +4 -3
  113. package/esm/component/marker/mark-area/interface/theme.js.map +1 -1
  114. package/esm/component/marker/mark-line/base-mark-line.js +30 -19
  115. package/esm/component/marker/mark-line/base-mark-line.js.map +1 -1
  116. package/esm/component/marker/mark-line/cartesian-mark-line.js +31 -26
  117. package/esm/component/marker/mark-line/cartesian-mark-line.js.map +1 -1
  118. package/esm/component/marker/mark-line/interface/theme.d.ts +4 -3
  119. package/esm/component/marker/mark-line/interface/theme.js.map +1 -1
  120. package/esm/component/marker/mark-point/cartesian-mark-point.js +1 -1
  121. package/esm/component/marker/mark-point/cartesian-mark-point.js.map +1 -1
  122. package/esm/component/marker/utils.d.ts +12 -0
  123. package/esm/component/marker/utils.js +19 -4
  124. package/esm/component/marker/utils.js.map +1 -1
  125. package/esm/constant/event.d.ts +1 -0
  126. package/esm/constant/event.js +6 -6
  127. package/esm/constant/event.js.map +1 -1
  128. package/esm/constant/layout.js +2 -1
  129. package/esm/constant/sunburst.js +1 -2
  130. package/esm/core/index.d.ts +1 -1
  131. package/esm/core/index.js +1 -1
  132. package/esm/core/index.js.map +1 -1
  133. package/esm/core/interface.js +2 -1
  134. package/esm/core/vchart.js +1 -2
  135. package/esm/data/transforms/pictogram.d.ts +1 -9
  136. package/esm/data/transforms/pictogram.js +3 -3
  137. package/esm/data/transforms/pictogram.js.map +1 -1
  138. package/esm/data/transforms/pie.js +1 -1
  139. package/esm/data/transforms/pie.js.map +1 -1
  140. package/esm/index-harmony-simple.js.map +1 -1
  141. package/esm/index.d.ts +1 -0
  142. package/esm/index.js +2 -0
  143. package/esm/index.js.map +1 -1
  144. package/esm/model/base-model.d.ts +1 -0
  145. package/esm/model/base-model.js +6 -0
  146. package/esm/model/base-model.js.map +1 -1
  147. package/esm/plugin/components/tooltip-handler/dom-tooltip-handler.js +11 -7
  148. package/esm/plugin/components/tooltip-handler/dom-tooltip-handler.js.map +1 -1
  149. package/esm/series/bar/bar.js.map +1 -1
  150. package/esm/series/gauge/gauge.js +6 -4
  151. package/esm/series/gauge/gauge.js.map +1 -1
  152. package/esm/series/pictogram/tooltip-helper.d.ts +2 -2
  153. package/esm/series/pictogram/tooltip-helper.js.map +1 -1
  154. package/esm/series/pie/pie.js +4 -4
  155. package/esm/series/pie/pie.js.map +1 -1
  156. package/esm/series/polar/progress-like/interface.d.ts +1 -0
  157. package/esm/series/polar/progress-like/interface.js.map +1 -1
  158. package/esm/series/polar/progress-like/progress-like.js +4 -3
  159. package/esm/series/polar/progress-like/progress-like.js.map +1 -1
  160. package/esm/series/progress/linear/interface.d.ts +1 -0
  161. package/esm/series/progress/linear/interface.js.map +1 -1
  162. package/esm/series/progress/linear/linear.js +6 -4
  163. package/esm/series/progress/linear/linear.js.map +1 -1
  164. package/esm/typings/visual.d.ts +1 -1
  165. package/esm/typings/visual.js.map +1 -1
  166. package/package.json +18 -18
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/component/axis/interface/spec.ts"],"names":[],"mappings":"","file":"spec.js","sourcesContent":["import type { AxisBreakProps, AxisItem, AxisItemStateStyle } from '@visactor/vrender-components';\nimport type { IAnimationSpec } from '../../../animation/spec';\nimport type {\n Datum,\n IFormatMethod,\n IPadding,\n IRectMarkSpec,\n IRichTextFormatMethod,\n IRuleMarkSpec,\n ISymbolMarkSpec,\n ITextMarkSpec,\n StringOrNumber\n} from '../../../typings';\nimport type { IComponentSpec } from '../../base/interface';\nimport type { AxisType, IAxisItem, IBandAxisLayer, ITickCalculationCfg, StyleCallback } from './common';\nimport type { IBaseScale } from '@visactor/vscale';\n\nexport interface ICommonAxisSpec extends Omit<IComponentSpec, 'orient' | 'center'>, IAnimationSpec<string, string> {\n /**\n * 轴类型\n */\n type?: AxisType;\n /**\n * 是否显示坐标轴\n * @default true\n */\n visible?: boolean;\n /**\n * 是否开启反向坐标轴。\n * @default false\n */\n inverse?: boolean;\n /**\n * 轴刻度线配置\n */\n tick?: ITick;\n /**\n * 子刻度线配置\n */\n subTick?: ISubTick;\n\n /**\n * 是否开启动画,默认关闭\n * @default false\n */\n animation?: boolean;\n\n // 交互相关的配置\n /**\n * 是否开启 select 选中交互,默认关闭\n * @default false\n */\n select?: boolean;\n /**\n * 是否开启 hover 悬浮交互,默认关闭\n * @default false\n */\n hover?: boolean;\n\n /**\n * 是否开启轴数据采样,默认开启。\n * 轴采样开启之后,会对轴数据进行采样显示,防止轴数据的重叠。\n * 通过配置 `label.minGap` 可以控制轴标签之间的间距。\n * @default true\n * @since 1.1.0\n */\n sampling?: boolean;\n\n /**\n * 是否强制初始化 tick 数据,仅在 visible 为 false 时生效\n * @default false\n */\n forceInitTick?: boolean;\n}\n\nexport type ILinearAxisBreakSpec = Omit<AxisBreakProps, 'rawRange'> & {\n /**\n * 截断标识之间的间距:\n * 1. `number` 为像素值\n * 2. `string` 为百分比相对值,如 '1%'\n * @default 6\n */\n gap?: number | string;\n /**\n * 计算截断对应range的类型,根据长度或者记录数进行分段\n * @since 1.12.12\n */\n scopeType?: 'count' | 'length';\n};\n\nexport interface ILinearAxisSpec {\n // 线性轴数值范围配置\n /** 最小值,**优先级高于 zero,nice** */\n min?: number;\n /** 最大值,**优先级高于 zero,nice** */\n max?: number;\n\n /**\n * 最小值,当且仅当该值小于数据最小值时,才能生效\n * 注意:不建议和配置`min`一起使用\n * @since 1.11.0\n */\n softMin?: number | ((domain: number[]) => number);\n /**\n * 最大值,当且仅当该值大于数据最大值时,才能生效\n * 注意:不建议和配置`max`一起使用\n * @since 1.11.0\n */\n softMax?: number | ((domain: number[]) => number);\n\n /** @deparated 线性轴数值范围配置(已弃用,请使用外层 min/max) */\n range?: {\n /** @deparated 最小值 */\n min?: number;\n /** @deparated 最大值 */\n max?: number;\n };\n\n /**\n * 是否根据数据将轴范围调整到相对规整的数值\n * @default true\n * @description 当配置了 min 和 max,该配置项失效\n * @example 当配置了 max = 999, nice并不会将轴范围优化到1000\n */\n nice?: boolean;\n /**\n * nice效果的类型,是精度优先还是tickCount优先(比如tickCount为2那nice出来的精度就很低)\n * @default undefined('tickCountFirst')\n * @description 不配置就默认是tickCountFirst\n * @example 数据范围是0~6000,如果tickCount为2,那么tickCountFirst出来的range就是[0, 10000], accurateFirst出来的range就是[0, 6000]但10000显示不了\n */\n niceType?: 'tickCountFirst' | 'accurateFirst';\n /**\n * 是否包含0值\n * @default true\n * @description 当配置了 min和 max,该配置项失效\n */\n zero?: boolean;\n /**\n * 轴范围按比例扩展\n * @description 当配置了 min和 max,该配置项失效\n */\n expand?: {\n /**\n * 轴范围扩展的最小比例\n */\n min?: number;\n /**\n * 轴范围扩展的最大比例\n */\n max?: number;\n };\n\n /**\n * 连续轴上的 dimension tooltip 数据筛选范围\n * 如果配置为单个数字 d,则筛选区间为 [x0 - d, x0 + d];如果配置为二元组 [d1, d2],则筛选区间为 [x0 + d1, x0 + d2]\n * 如果配置为函数 f, 函数的返回值将会作为数据筛选范围的值\n * @since 1.4.0\n */\n tooltipFilterRange?: number | [number, number] | ((params: { scale: IBaseScale }) => number | [number, number]);\n /**\n * 轴截断配置,只对笛卡尔坐标系的 linear 轴生效\n * @since 1.12.4\n */\n breaks?: ILinearAxisBreakSpec[];\n}\n\nexport interface IBandAxisSpec {\n /**\n * 是否去除 band 轴两端的留白,如果为 true,则两端的 padding 为 0,\n * **并且 bandPadding、paddingInner 和 paddingOuter 的设置将被忽略**。\n * @default false\n * @since 1.7.0\n */\n trimPadding?: boolean;\n /**\n * 同时设置轴的 paddingInner 和 paddingOuter\n * **因为有可能存在多层 scale( xField 设置成了数组,即分组场景),所以支持了数组类型,用于多层 scale 的 bandPadding 配置**\n */\n bandPadding?: number | number[];\n /**\n * band 轴的内边距\n * ** 因为有可能存在多层 scale( xField 设置成了数组,即分组场景),所以支持了数组类型,用于多层 scale 的 paddingInner 配置**\n * @default 0.1\n */\n paddingInner?: number | number[];\n /**\n * band 轴的外边距\n * ** 因为有可能存在多层 scale( xField 设置成了数组,即分组场景),所以支持了数组类型,用于多层 scale 的 paddingOuter 配置**\n * @default 0.3\n */\n paddingOuter?: number | number[];\n /**\n * 配置离散轴的数值范围\n * @since 1.1.0\n */\n domain?: StringOrNumber[];\n /**\n * `bandPosition` 是一个可选参数,用于指定数据点在 band 轴上的位置。它的含义是确定数据点在 band 轴上的位置偏移量,相对于 band 轴的起始位置。\n * `bandPosition` 的取值范围是从 0 到 1,其中 0 表示数据点位于 band 轴的起始位置,1 表示数据点位于 band 轴的结束位置。\n * @default 0.5\n */\n bandPosition?: number;\n\n /**\n * 当存在多层分组场景时,是否展示所有的分组轴\n * @default false\n * @since 1.9.0\n */\n showAllGroupLayers?: boolean;\n /**\n * 每一层轴的配置\n * layer[0] 为离坐标轴线最近的轴,当且仅当 `showAllGroupLayers` 配置开启生效。\n * @since 1.9.0\n */\n layers?: IBandAxisLayer[];\n}\n// Grid 配置项\nexport interface IGrid extends IAxisItem<IRuleMarkSpec> {\n /**\n * 两个栅格线间的填充色\n */\n alternateColor?: string | string[];\n /**\n * grid 是否与 label 对齐,默认为 true,即对齐,配置为 false 则显示在前后两个刻度中间\n * @default true\n */\n alignWithLabel?: boolean;\n /**\n * 网格线样式,支持回调\n */\n style?: IRuleMarkSpec | StyleCallback<IRuleMarkSpec | undefined>;\n /**\n * 快捷属性,也可以在 `style` 中配置,用于配置网格线的绘制顺序,默认为 50\n * @default 50\n * @since 1.4.0\n */\n zIndex?: number;\n}\n\n// 刻度线配置\nexport interface ITick extends IAxisItem<IRuleMarkSpec>, ITickCalculationCfg {\n /**\n * Length of tick lines\n * 坐标轴刻度线的长度\n * @default 4\n */\n tickSize?: number;\n /**\n * 刻度线朝向,默认朝外(坐标线包围盒外部)\n * @default false\n */\n inside?: boolean;\n /**\n * tick 是否与 label 对齐,默认为 true,即对齐,配置为 false 则显示在前后两个刻度中间\n * @default true\n */\n alignWithLabel?: boolean;\n /**\n * 刻度线样式设置,支持回调\n */\n style?: IRuleMarkSpec | StyleCallback<IRuleMarkSpec | undefined>;\n /**\n * 刻度线不同交互状态下的样式配置,支持:\n * 1. hover\n * 2. hover_reverse\n * 3. selected\n * 4. selected_reverse\n */\n state?: AxisItemStateStyle<IRuleMarkSpec>;\n /**\n * 用于 tick 的数据过滤\n * @since 1.1.0\n */\n dataFilter?: (data: AxisItem[]) => AxisItem[];\n}\n\n// 子刻度线配置\nexport interface ISubTick extends IAxisItem<IRuleMarkSpec> {\n /**\n * TODO: 考虑下 log 轴,自刻度线之间的间距是不均匀的问题\n * 子刻度个数\n */\n tickCount?: number;\n /**\n * 子刻度线朝向,默认朝外(坐标线包围盒外部)\n * @default false\n */\n inside?: boolean;\n /** 子刻度线的长度 */\n tickSize?: number;\n /**\n * 子刻度线不同交互状态下的样式配置,支持:\n * 1. hover\n * 2. hover_reverse\n * 3. selected\n * 4. selected_reverse\n */\n state?: AxisItemStateStyle<IRuleMarkSpec>;\n}\n\n// 轴标签配置\nexport interface ILabel extends IAxisItem<ITextMarkSpec> {\n /**\n * 文本类型\n * @deprecated 1.10.0 版本后,在 formatMethod 中返回 { type: 'rich', text: xxx}\n * */\n type?: 'text' | 'rich';\n /**\n * 轴标签内容格式化函数\n * @param text 原始标签文本值\n * @param datum 图形数据\n * @returns 格式化后的文本\n */\n formatMethod?: IFormatMethod<[text: string | string[], datum?: Datum]>;\n /**\n * 格式化模板\n * @description 可以通过类似 `{value:.2f}%` 的形式对指定数据字段进行格式化\n * @since 1.10.0\n */\n formatter?: string | string[];\n /** 标签同 tick 之间的间距 */\n space?: number;\n /**\n * 标签朝向,默认朝外(坐标线包围盒外部)\n * @default false\n */\n inside?: boolean;\n /**\n * 标签之间的最小间距(单位为像素),仅当轴采样开始时生效(`sampling: true`)。\n * 该配置会影响轴采样的结果。\n */\n minGap?: number;\n /**\n * 文本样式设置\n */\n style?: ITextMarkSpec | StyleCallback<ITextMarkSpec | undefined>;\n /**\n * label 不同交互状态下的样式配置,支持:\n * 1. hover\n * 2. hover_reverse\n * 3. selected\n * 4. selected_reverse\n */\n state?: AxisItemStateStyle<ITextMarkSpec>;\n /**\n * 用于 label 的数据过滤\n * @since 1.1.0\n */\n dataFilter?: (data: AxisItem[], layer: number) => AxisItem[];\n}\n\n// 轴线配置\nexport interface IDomainLine extends IAxisItem<IRuleMarkSpec> {\n /**\n * domainLine 在不同交互状态下的样式配置,支持:\n * 1. hover\n * 2. hover_reverse\n * 3. selected\n * 4. selected_reverse\n */\n state?: AxisItemStateStyle<IRuleMarkSpec>;\n}\n\n// 轴标题配置\nexport interface ITitle extends IAxisItem<ITextMarkSpec> {\n /**\n * 文本类型\n * @deprecated 1.10.0 版本后,在 formatMethod 中返回 { type: 'rich', text: xxx}\n * */\n type?: 'text' | 'rich';\n /**\n * 轴标题内容,支持多种格式\n * - 字符串或者数值\n * - 字符串或者数值数组\n */\n text?: ITextMarkSpec['text'] | ReturnType<IRichTextFormatMethod<[]>>;\n /**\n * 标题的显示位置,直角坐标系默认 'middle';\n * 极坐标系的圆弧轴如果配置了内半径,则默认 'middle',否则 'end'\n */\n position?: 'start' | 'middle' | 'end';\n /**\n * 标题距离坐标轴(轴线、刻度、标签共同构成的包围盒)的距离\n */\n space?: number;\n /**\n * 标题内边距配置\n */\n padding?: IPadding | number | number[];\n /**\n * 标题背景色设置\n */\n background?: IAxisItem<IRectMarkSpec> & {\n /**\n * 背景的交互状态样式配置\n */\n state?: AxisItemStateStyle<Partial<IRectMarkSpec>>;\n };\n /**\n * TODO: 接入富文本\n * 标题 shape 配置\n */\n shape?: IAxisItem<ISymbolMarkSpec> & {\n /**\n * shape 同标题文本之间的间距\n */\n space?: number;\n /**\n * shape 标记的交互状态样式配置\n */\n state?: AxisItemStateStyle<Partial<ISymbolMarkSpec>>;\n };\n /**\n * 标题整体的旋转角度(如果标题配置了 background、shape 等属性的话,需要使用该属性进行整体的配置旋转)。\n */\n angle?: number;\n /**\n * text 文本的交互状态样式配置\n */\n state?: AxisItemStateStyle<Partial<ITextMarkSpec>>;\n}\n"]}
1
+ {"version":3,"sources":["../src/component/axis/interface/spec.ts"],"names":[],"mappings":"","file":"spec.js","sourcesContent":["import type { AxisBreakProps, AxisItem, AxisItemStateStyle } from '@visactor/vrender-components';\nimport type { IAnimationSpec } from '../../../animation/spec';\nimport type {\n Datum,\n IFormatMethod,\n IPadding,\n IRectMarkSpec,\n IRichTextFormatMethod,\n IRuleMarkSpec,\n ISymbolMarkSpec,\n ITextMarkSpec,\n StringOrNumber\n} from '../../../typings';\nimport type { IComponentSpec } from '../../base/interface';\nimport type { AxisType, IAxisItem, IBandAxisLayer, ITickCalculationCfg, StyleCallback } from './common';\nimport type { IBaseScale } from '@visactor/vscale';\nimport type { IVChart } from '../../../core';\n\nexport interface ICommonAxisSpec extends Omit<IComponentSpec, 'orient' | 'center'>, IAnimationSpec<string, string> {\n /**\n * 轴类型\n */\n type?: AxisType;\n /**\n * 是否显示坐标轴\n * @default true\n */\n visible?: boolean;\n /**\n * 是否开启反向坐标轴。\n * @default false\n */\n inverse?: boolean;\n /**\n * 轴刻度线配置\n */\n tick?: ITick;\n /**\n * 子刻度线配置\n */\n subTick?: ISubTick;\n\n /**\n * 是否开启动画,默认关闭\n * @default false\n */\n animation?: boolean;\n\n // 交互相关的配置\n /**\n * 是否开启 select 选中交互,默认关闭\n * @default false\n */\n select?: boolean;\n /**\n * 是否开启 hover 悬浮交互,默认关闭\n * @default false\n */\n hover?: boolean;\n\n /**\n * 是否开启轴数据采样,默认开启。\n * 轴采样开启之后,会对轴数据进行采样显示,防止轴数据的重叠。\n * 通过配置 `label.minGap` 可以控制轴标签之间的间距。\n * @default true\n * @since 1.1.0\n */\n sampling?: boolean;\n\n /**\n * 是否强制初始化 tick 数据,仅在 visible 为 false 时生效\n * @default false\n */\n forceInitTick?: boolean;\n}\n\nexport type ILinearAxisBreakSpec = Omit<AxisBreakProps, 'rawRange'> & {\n /**\n * 截断标识之间的间距:\n * 1. `number` 为像素值\n * 2. `string` 为百分比相对值,如 '1%'\n * @default 6\n */\n gap?: number | string;\n /**\n * 计算截断对应range的类型,根据长度或者记录数进行分段\n * @since 1.12.12\n */\n scopeType?: 'count' | 'length';\n};\n\nexport interface ILinearAxisSpec {\n // 线性轴数值范围配置\n /** 最小值,**优先级高于 zero,nice** */\n min?: number;\n /** 最大值,**优先级高于 zero,nice** */\n max?: number;\n\n /**\n * 最小值,当且仅当该值小于数据最小值时,才能生效\n * 注意:不建议和配置`min`一起使用\n * @since 1.11.0\n */\n softMin?: number | ((domain: number[]) => number);\n /**\n * 最大值,当且仅当该值大于数据最大值时,才能生效\n * 注意:不建议和配置`max`一起使用\n * @since 1.11.0\n */\n softMax?: number | ((domain: number[]) => number);\n\n /** @deparated 线性轴数值范围配置(已弃用,请使用外层 min/max) */\n range?: {\n /** @deparated 最小值 */\n min?: number;\n /** @deparated 最大值 */\n max?: number;\n };\n\n /**\n * 是否根据数据将轴范围调整到相对规整的数值\n * @default true\n * @description 当配置了 min 和 max,该配置项失效\n * @example 当配置了 max = 999, nice并不会将轴范围优化到1000\n */\n nice?: boolean;\n /**\n * nice效果的类型,是精度优先还是tickCount优先(比如tickCount为2那nice出来的精度就很低)\n * @default undefined('tickCountFirst')\n * @description 不配置就默认是tickCountFirst\n * @example 数据范围是0~6000,如果tickCount为2,那么tickCountFirst出来的range就是[0, 10000], accurateFirst出来的range就是[0, 6000]但10000显示不了\n */\n niceType?: 'tickCountFirst' | 'accurateFirst';\n /**\n * 是否包含0值\n * @default true\n * @description 当配置了 min和 max,该配置项失效\n */\n zero?: boolean;\n /**\n * 轴范围按比例扩展\n * @description 当配置了 min和 max,该配置项失效\n */\n expand?: {\n /**\n * 轴范围扩展的最小比例\n */\n min?: number;\n /**\n * 轴范围扩展的最大比例\n */\n max?: number;\n };\n\n /**\n * 连续轴上的 dimension tooltip 数据筛选范围\n * 如果配置为单个数字 d,则筛选区间为 [x0 - d, x0 + d];如果配置为二元组 [d1, d2],则筛选区间为 [x0 + d1, x0 + d2]\n * 如果配置为函数 f, 函数的返回值将会作为数据筛选范围的值\n * @since 1.4.0\n */\n tooltipFilterRange?: number | [number, number] | ((params: { scale: IBaseScale }) => number | [number, number]);\n /**\n * 轴截断配置,只对笛卡尔坐标系的 linear 轴生效\n * @since 1.12.4\n */\n breaks?: ILinearAxisBreakSpec[];\n}\n\nexport interface IBandAxisSpec {\n /**\n * 是否去除 band 轴两端的留白,如果为 true,则两端的 padding 为 0,\n * **并且 bandPadding、paddingInner 和 paddingOuter 的设置将被忽略**。\n * @default false\n * @since 1.7.0\n */\n trimPadding?: boolean;\n /**\n * 同时设置轴的 paddingInner 和 paddingOuter\n * **因为有可能存在多层 scale( xField 设置成了数组,即分组场景),所以支持了数组类型,用于多层 scale 的 bandPadding 配置**\n */\n bandPadding?: number | number[];\n /**\n * band 轴的内边距\n * ** 因为有可能存在多层 scale( xField 设置成了数组,即分组场景),所以支持了数组类型,用于多层 scale 的 paddingInner 配置**\n * @default 0.1\n */\n paddingInner?: number | number[];\n /**\n * band 轴的外边距\n * ** 因为有可能存在多层 scale( xField 设置成了数组,即分组场景),所以支持了数组类型,用于多层 scale 的 paddingOuter 配置**\n * @default 0.3\n */\n paddingOuter?: number | number[];\n /**\n * 配置离散轴的数值范围\n * @since 1.1.0\n */\n domain?: StringOrNumber[];\n /**\n * `bandPosition` 是一个可选参数,用于指定数据点在 band 轴上的位置。它的含义是确定数据点在 band 轴上的位置偏移量,相对于 band 轴的起始位置。\n * `bandPosition` 的取值范围是从 0 到 1,其中 0 表示数据点位于 band 轴的起始位置,1 表示数据点位于 band 轴的结束位置。\n * @default 0.5\n */\n bandPosition?: number;\n\n /**\n * 当存在多层分组场景时,是否展示所有的分组轴\n * @default false\n * @since 1.9.0\n */\n showAllGroupLayers?: boolean;\n /**\n * 每一层轴的配置\n * layer[0] 为离坐标轴线最近的轴,当且仅当 `showAllGroupLayers` 配置开启生效。\n * @since 1.9.0\n */\n layers?: IBandAxisLayer[];\n}\n// Grid 配置项\nexport interface IGrid extends IAxisItem<IRuleMarkSpec> {\n /**\n * 两个栅格线间的填充色\n */\n alternateColor?: string | string[];\n /**\n * grid 是否与 label 对齐,默认为 true,即对齐,配置为 false 则显示在前后两个刻度中间\n * @default true\n */\n alignWithLabel?: boolean;\n /**\n * 网格线样式,支持回调\n */\n style?: IRuleMarkSpec | StyleCallback<IRuleMarkSpec | undefined>;\n /**\n * 快捷属性,也可以在 `style` 中配置,用于配置网格线的绘制顺序,默认为 50\n * @default 50\n * @since 1.4.0\n */\n zIndex?: number;\n}\n\n// 刻度线配置\nexport interface ITick extends IAxisItem<IRuleMarkSpec>, ITickCalculationCfg {\n /**\n * Length of tick lines\n * 坐标轴刻度线的长度\n * @default 4\n */\n tickSize?: number;\n /**\n * 刻度线朝向,默认朝外(坐标线包围盒外部)\n * @default false\n */\n inside?: boolean;\n /**\n * tick 是否与 label 对齐,默认为 true,即对齐,配置为 false 则显示在前后两个刻度中间\n * @default true\n */\n alignWithLabel?: boolean;\n /**\n * 刻度线样式设置,支持回调\n */\n style?: IRuleMarkSpec | StyleCallback<IRuleMarkSpec | undefined>;\n /**\n * 刻度线不同交互状态下的样式配置,支持:\n * 1. hover\n * 2. hover_reverse\n * 3. selected\n * 4. selected_reverse\n */\n state?: AxisItemStateStyle<IRuleMarkSpec>;\n /**\n * 用于 tick 的数据过滤\n * @since 1.1.0\n */\n dataFilter?: (data: AxisItem[], context: { vchart: IVChart }) => AxisItem[];\n}\n\n// 子刻度线配置\nexport interface ISubTick extends IAxisItem<IRuleMarkSpec> {\n /**\n * TODO: 考虑下 log 轴,自刻度线之间的间距是不均匀的问题\n * 子刻度个数\n */\n tickCount?: number;\n /**\n * 子刻度线朝向,默认朝外(坐标线包围盒外部)\n * @default false\n */\n inside?: boolean;\n /** 子刻度线的长度 */\n tickSize?: number;\n /**\n * 子刻度线不同交互状态下的样式配置,支持:\n * 1. hover\n * 2. hover_reverse\n * 3. selected\n * 4. selected_reverse\n */\n state?: AxisItemStateStyle<IRuleMarkSpec>;\n}\n\n// 轴标签配置\nexport interface ILabel extends IAxisItem<ITextMarkSpec> {\n /**\n * 文本类型\n * @deprecated 1.10.0 版本后,在 formatMethod 中返回 { type: 'rich', text: xxx}\n * */\n type?: 'text' | 'rich';\n /**\n * 轴标签内容格式化函数\n * @param text 原始标签文本值\n * @param datum 图形数据\n * @returns 格式化后的文本\n */\n formatMethod?: IFormatMethod<[text: string | string[], datum?: Datum]>;\n /**\n * 格式化模板\n * @description 可以通过类似 `{value:.2f}%` 的形式对指定数据字段进行格式化\n * @since 1.10.0\n */\n formatter?: string | string[];\n /** 标签同 tick 之间的间距 */\n space?: number;\n /**\n * 标签朝向,默认朝外(坐标线包围盒外部)\n * @default false\n */\n inside?: boolean;\n /**\n * 标签之间的最小间距(单位为像素),仅当轴采样开始时生效(`sampling: true`)。\n * 该配置会影响轴采样的结果。\n */\n minGap?: number;\n /**\n * 文本样式设置\n */\n style?: ITextMarkSpec | StyleCallback<ITextMarkSpec | undefined>;\n /**\n * label 不同交互状态下的样式配置,支持:\n * 1. hover\n * 2. hover_reverse\n * 3. selected\n * 4. selected_reverse\n */\n state?: AxisItemStateStyle<ITextMarkSpec>;\n /**\n * 用于 label 的数据过滤\n * @since 1.1.0\n */\n dataFilter?: (data: AxisItem[], layer: number, context: { vchart: IVChart }) => AxisItem[];\n}\n\n// 轴线配置\nexport interface IDomainLine extends IAxisItem<IRuleMarkSpec> {\n /**\n * domainLine 在不同交互状态下的样式配置,支持:\n * 1. hover\n * 2. hover_reverse\n * 3. selected\n * 4. selected_reverse\n */\n state?: AxisItemStateStyle<IRuleMarkSpec>;\n}\n\n// 轴标题配置\nexport interface ITitle extends IAxisItem<ITextMarkSpec> {\n /**\n * 文本类型\n * @deprecated 1.10.0 版本后,在 formatMethod 中返回 { type: 'rich', text: xxx}\n * */\n type?: 'text' | 'rich';\n /**\n * 轴标题内容,支持多种格式\n * - 字符串或者数值\n * - 字符串或者数值数组\n */\n text?: ITextMarkSpec['text'] | ReturnType<IRichTextFormatMethod<[]>>;\n /**\n * 标题的显示位置,直角坐标系默认 'middle';\n * 极坐标系的圆弧轴如果配置了内半径,则默认 'middle',否则 'end'\n */\n position?: 'start' | 'middle' | 'end';\n /**\n * 标题距离坐标轴(轴线、刻度、标签共同构成的包围盒)的距离\n */\n space?: number;\n /**\n * 标题内边距配置\n */\n padding?: IPadding | number | number[];\n /**\n * 标题背景色设置\n */\n background?: IAxisItem<IRectMarkSpec> & {\n /**\n * 背景的交互状态样式配置\n */\n state?: AxisItemStateStyle<Partial<IRectMarkSpec>>;\n };\n /**\n * TODO: 接入富文本\n * 标题 shape 配置\n */\n shape?: IAxisItem<ISymbolMarkSpec> & {\n /**\n * shape 同标题文本之间的间距\n */\n space?: number;\n /**\n * shape 标记的交互状态样式配置\n */\n state?: AxisItemStateStyle<Partial<ISymbolMarkSpec>>;\n };\n /**\n * 标题整体的旋转角度(如果标题配置了 background、shape 等属性的话,需要使用该属性进行整体的配置旋转)。\n */\n angle?: number;\n /**\n * text 文本的交互状态样式配置\n */\n state?: AxisItemStateStyle<Partial<ITextMarkSpec>>;\n}\n"]}
@@ -37,45 +37,23 @@ export declare class Brush<T extends IBrushSpec = IBrushSpec> extends BaseCompon
37
37
  protected _linkedOutOfBrushElementsMap: {
38
38
  [elementKey: string]: IElement;
39
39
  };
40
- private _needInitOutState;
41
40
  private _cacheInteractiveRangeAttrs;
42
41
  private _needDisablePickable;
43
42
  private _releatedAxes;
44
43
  private _regionAxisMap;
45
44
  private _axisDataZoomMap;
46
45
  private _zoomRecord;
47
- init(): void;
48
46
  static getSpecInfo(chartSpec: any): Maybe<IModelSpecInfo[]>;
47
+ init(): void;
48
+ private _initNeedOperatedItem;
49
49
  created(): void;
50
- protected _extendDataInBrush(elementsMap: {
51
- [brushName: string]: {
52
- [elementKey: string]: IElement;
53
- };
54
- }): any[];
55
- protected _extendDatumOutOfBrush(elementsMap: {
56
- [elementKey: string]: IElement;
57
- }): any[];
58
- protected _getBrushInteractiveAttr(region: IRegion): BrushInteractiveRangeAttr;
59
- protected _updateBrushComponent(region: IRegion, componentIndex: number): void;
60
- protected _createBrushComponent(region: IRegion, componentIndex: number): void;
61
- private _handleBrushChange;
62
- private _emitEvent;
63
- private _transformBrushedMarkAttr;
64
- private _reconfigItem;
65
- private _reconfigLinkedItem;
66
- private _isBrushContainItem;
67
- private _stateClamp;
68
- private _setAxisAndDataZoom;
69
50
  protected _bindRegions(): void;
70
51
  protected _bindLinkedSeries(): void;
71
52
  private _initRegionAxisMap;
72
53
  private _initAxisDataZoomMap;
73
- private _initNeedOperatedItem;
74
- protected _initMarkBrushState(componentIndex: number, stateName: string): void;
75
54
  protected initEvent(): void;
76
55
  onRender(ctx: IModelRenderOption): void;
77
56
  changeRegions(regions: IRegion[]): void;
78
- protected _getNeedClearVRenderComponents(): IGraphic[];
79
57
  _compareSpec(spec: T, prevSpec: T): {
80
58
  change: boolean;
81
59
  reMake: boolean;
@@ -84,6 +62,27 @@ export declare class Brush<T extends IBrushSpec = IBrushSpec> extends BaseCompon
84
62
  reCompile: boolean;
85
63
  };
86
64
  onLayoutEnd(ctx: any): void;
65
+ protected _updateBrushComponent(region: IRegion, componentIndex: number): void;
66
+ protected _createBrushComponent(region: IRegion, componentIndex: number): void;
67
+ protected _getBrushInteractiveAttr(region: IRegion): BrushInteractiveRangeAttr;
68
+ private _transformBrushedMarkAttr;
69
+ private _handleBrushChange;
70
+ protected _extendDataInBrush(elementsMap: {
71
+ [brushName: string]: {
72
+ [elementKey: string]: IElement;
73
+ };
74
+ }): any[];
75
+ protected _extendDatumOutOfBrush(elementsMap: {
76
+ [elementKey: string]: IElement;
77
+ }): any[];
78
+ private _emitEvent;
79
+ private _reconfigItem;
80
+ private _reconfigLinkedItem;
81
+ private _isBrushContainItem;
82
+ protected _initMarkBrushState(componentIndex: number, stateName: string): void;
83
+ private _stateClamp;
84
+ private _setAxisAndDataZoom;
85
+ protected _getNeedClearVRenderComponents(): IGraphic[];
87
86
  clearGraphic(): void;
88
87
  clear(): void;
89
88
  }
@@ -12,8 +12,11 @@ class Brush extends base_component_1.BaseComponent {
12
12
  this.name = type_1.ComponentTypeEnum.brush, this.specKey = "brush", this.layoutZIndex = layout_1.LayoutZIndex.Brush,
13
13
  this._linkedSeries = [], this._itemMap = {}, this._linkedItemMap = {}, this._inBrushElementsMap = {},
14
14
  this._outOfBrushElementsMap = {}, this._linkedInBrushElementsMap = {}, this._linkedOutOfBrushElementsMap = {},
15
- this._needInitOutState = !0, this._cacheInteractiveRangeAttrs = [], this._needDisablePickable = !1,
16
- this._releatedAxes = [], this._regionAxisMap = {}, this._axisDataZoomMap = {}, this._zoomRecord = [];
15
+ this._cacheInteractiveRangeAttrs = [], this._needDisablePickable = !1, this._releatedAxes = [],
16
+ this._regionAxisMap = {}, this._axisDataZoomMap = {}, this._zoomRecord = [];
17
+ }
18
+ static getSpecInfo(chartSpec) {
19
+ return (0, util_1.getSpecInfo)(chartSpec, this.specKey, this.type, (s => !1 !== s.visible));
17
20
  }
18
21
  init() {
19
22
  const inBrushMarkAttr = this._transformBrushedMarkAttr(this._spec.inBrush), outOfBrushMarkAttr = this._transformBrushedMarkAttr(this._spec.outOfBrush);
@@ -24,42 +27,71 @@ class Brush extends base_component_1.BaseComponent {
24
27
  }));
25
28
  }));
26
29
  }
27
- static getSpecInfo(chartSpec) {
28
- return (0, util_1.getSpecInfo)(chartSpec, this.specKey, this.type, (s => !1 !== s.visible));
30
+ _initNeedOperatedItem() {
31
+ const seriesUserId = this._spec.seriesId, seriesIndex = this._spec.seriesIndex;
32
+ this._relativeRegions.forEach((r => {
33
+ const allMarks = [];
34
+ r.getSeries().forEach((s => {
35
+ (seriesUserId && (0, vutils_1.array)(seriesUserId).includes(s.userId.toString()) || seriesIndex && (0,
36
+ vutils_1.array)(seriesIndex).includes(s.getSpecIndex()) || !seriesIndex && !seriesUserId) && allMarks.push(...s.getMarksWithoutRoot()),
37
+ this._itemMap[r.id] = allMarks;
38
+ }));
39
+ })), this._linkedSeries.forEach((s => {
40
+ this._linkedItemMap[s.id] = s.getMarksWithoutRoot();
41
+ }));
29
42
  }
30
43
  created() {
31
44
  super.created(), this.initEvent(), this._bindRegions(), this._bindLinkedSeries(),
32
45
  this._initRegionAxisMap(), this._initAxisDataZoomMap(), this._initNeedOperatedItem();
33
46
  }
34
- _extendDataInBrush(elementsMap) {
35
- var _a, _b;
36
- const data = [];
37
- for (const brushName in elementsMap) for (const elementKey in elementsMap[brushName]) data.push(Object.assign({}, null === (_b = null === (_a = elementsMap[brushName][elementKey]) || void 0 === _a ? void 0 : _a.data) || void 0 === _b ? void 0 : _b[0]));
38
- return data;
47
+ _bindRegions() {
48
+ (0, vutils_1.isValid)(this._spec.regionId) || (0, vutils_1.isValid)(this._spec.regionIndex) ? this._relativeRegions = this._option.getRegionsInUserIdOrIndex((0,
49
+ vutils_1.array)(this._spec.regionId), (0, vutils_1.array)(this._spec.regionIndex)) : this._relativeRegions = this._option.getAllRegions();
39
50
  }
40
- _extendDatumOutOfBrush(elementsMap) {
41
- var _a;
42
- const data = [];
43
- for (const elementKey in elementsMap) data.push(null === (_a = elementsMap[elementKey].data) || void 0 === _a ? void 0 : _a[0]);
44
- return data;
51
+ _bindLinkedSeries() {
52
+ ((0, vutils_1.isValid)(this._spec.brushLinkSeriesId) || (0, vutils_1.isValid)(this._spec.brushLinkSeriesIndex)) && (this._linkedSeries = this._option.getSeriesInUserIdOrIndex((0,
53
+ vutils_1.array)(this._spec.brushLinkSeriesId), (0, vutils_1.array)(this._spec.brushLinkSeriesIndex)));
45
54
  }
46
- _getBrushInteractiveAttr(region) {
47
- const regionLayoutPosition = region.getLayoutStartPoint(), regionLayoutRect = region.getLayoutRect(), seriesRegionStartX = regionLayoutPosition.x, seriesRegionEndX = seriesRegionStartX + regionLayoutRect.width, seriesRegionStartY = regionLayoutPosition.y, seriesRegionEndY = seriesRegionStartY + regionLayoutRect.height;
48
- return {
49
- interactiveRange: {
50
- minY: seriesRegionStartY,
51
- maxY: seriesRegionEndY,
52
- minX: seriesRegionStartX,
53
- maxX: seriesRegionEndX
54
- },
55
- xRange: [ seriesRegionStartX, seriesRegionEndX ],
56
- yRange: [ seriesRegionStartY, seriesRegionEndY ]
57
- };
55
+ _initRegionAxisMap() {
56
+ (0, vutils_1.isValid)(this._spec.axisId) ? (0, vutils_1.array)(this._spec.axisId).forEach((axisId => {
57
+ this._releatedAxes.push(this._option.getComponentByUserId(axisId));
58
+ })) : (0, vutils_1.isValid)(this._spec.axisIndex) ? (0, vutils_1.array)(this._spec.axisIndex).forEach((axisIndex => {
59
+ this._releatedAxes.push(this._option.getComponentByIndex("axes", axisIndex));
60
+ })) : this._releatedAxes = this._option.getComponentsByKey("axes"), this._releatedAxes.forEach((axis => {
61
+ null == axis || axis.getRegions().forEach((region => {
62
+ this._regionAxisMap["region_" + region.id] ? this._regionAxisMap["region_" + region.id].push(axis) : this._regionAxisMap["region_" + region.id] = [ axis ];
63
+ }));
64
+ }));
65
+ }
66
+ _initAxisDataZoomMap() {
67
+ this._option.getComponentsByKey("dataZoom").forEach((dz => {
68
+ dz.relatedAxisComponent && (this._axisDataZoomMap[dz.relatedAxisComponent.id] = dz);
69
+ }));
70
+ }
71
+ initEvent() {}
72
+ onRender(ctx) {}
73
+ changeRegions(regions) {}
74
+ _compareSpec(spec, prevSpec) {
75
+ this._brushComponents && this._relativeRegions.forEach(((region, index) => {
76
+ this._updateBrushComponent(region, index);
77
+ }));
78
+ const result = super._compareSpec(spec, prevSpec);
79
+ return (0, vutils_2.isEqual)(prevSpec, spec) || (result.reRender = !0, result.reMake = !0),
80
+ result;
81
+ }
82
+ onLayoutEnd(ctx) {
83
+ var _a;
84
+ if (super.onLayoutEnd(ctx), this._option.disableTriggerEvent) return;
85
+ (null === (_a = this._spec.visible) || void 0 === _a || _a) && (this._brushComponents ? this._relativeRegions.forEach(((region, index) => {
86
+ this._updateBrushComponent(region, index);
87
+ })) : (this._brushComponents = [], this._relativeRegions.forEach(((region, index) => {
88
+ this._createBrushComponent(region, index);
89
+ }))));
58
90
  }
59
91
  _updateBrushComponent(region, componentIndex) {
60
92
  const interactiveAttr = this._getBrushInteractiveAttr(region), brushComponent = this._brushComponents[componentIndex];
61
93
  brushComponent.setAttributes(interactiveAttr), this._initMarkBrushState(componentIndex, ""),
62
- brushComponent.children[0].removeAllChild(), this._needInitOutState = !0;
94
+ brushComponent.children[0].removeAllChild();
63
95
  }
64
96
  _createBrushComponent(region, componentIndex) {
65
97
  var _a, _b;
@@ -70,43 +102,75 @@ class Brush extends base_component_1.BaseComponent {
70
102
  disableTriggerEvent: this._option.disableTriggerEvent
71
103
  }));
72
104
  brush.id = null !== (_b = this._spec.id) && void 0 !== _b ? _b : `brush-${this.id}`,
73
- this.getContainer().add(brush);
74
- const {brushMode: brushMode = "single"} = this._spec;
75
- this._brushComponents.push(brush), this._cacheInteractiveRangeAttrs.push(interactiveAttr),
76
- brush.addEventListener(vrender_components_1.IOperateType.drawStart, (e => {
105
+ this.getContainer().add(brush), this._brushComponents.push(brush), this._cacheInteractiveRangeAttrs.push(interactiveAttr),
106
+ brush.addEventListener(vrender_components_1.IOperateType.brushActive, (e => {
107
+ this._initMarkBrushState(componentIndex, "outOfBrush"), this._emitEvent(event_1.ChartEvent.brushActive, region);
108
+ })), brush.addEventListener(vrender_components_1.IOperateType.drawStart, (e => {
77
109
  this._emitEvent(event_1.ChartEvent.brushStart, region);
78
110
  })), brush.addEventListener(vrender_components_1.IOperateType.moveStart, (e => {
79
111
  this._emitEvent(event_1.ChartEvent.brushStart, region);
80
112
  })), brush.addEventListener(vrender_components_1.IOperateType.drawing, (e => {
81
- this._needInitOutState && "single" === brushMode && this._initMarkBrushState(componentIndex, "outOfBrush"),
82
- this._needInitOutState = !1, this._needDisablePickable = !0, this._handleBrushChange(event_1.ChartEvent.brushChange, region, e),
83
- this._emitEvent(event_1.ChartEvent.brushChange, region);
113
+ this._needDisablePickable = !0, this._handleBrushChange(region, e), this._emitEvent(event_1.ChartEvent.brushChange, region);
84
114
  })), brush.addEventListener(vrender_components_1.IOperateType.moving, (e => {
85
- this._handleBrushChange(event_1.ChartEvent.brushChange, region, e), this._emitEvent(event_1.ChartEvent.brushChange, region);
115
+ this._handleBrushChange(region, e), this._emitEvent(event_1.ChartEvent.brushChange, region);
86
116
  })), brush.addEventListener(vrender_components_1.IOperateType.brushClear, (e => {
87
- this._initMarkBrushState(componentIndex, ""), this._needInitOutState = !0, this._needDisablePickable = !1,
88
- this._handleBrushChange(event_1.ChartEvent.brushChange, region, e), this._handleBrushChange(event_1.ChartEvent.brushClear, region, e),
89
- this._emitEvent(event_1.ChartEvent.brushChange, region), this._emitEvent(event_1.ChartEvent.brushClear, region);
117
+ this._initMarkBrushState(componentIndex, ""), this._needDisablePickable = !1, this._emitEvent(event_1.ChartEvent.brushClear, region);
90
118
  })), brush.addEventListener(vrender_components_1.IOperateType.drawEnd, (e => {
91
- this._needInitOutState = !0, this._needDisablePickable = !1;
119
+ var _a;
120
+ this._needDisablePickable = !1;
92
121
  const {operateMask: operateMask} = e.detail;
93
- this._handleBrushChange(event_1.ChartEvent.brushEnd, region, e);
94
- const inBrushData = this._extendDataInBrush(this._inBrushElementsMap);
95
- !this._spec.zoomWhenEmpty && inBrushData.length > 0 && this._setAxisAndDataZoom(operateMask, region),
96
- this._emitEvent(event_1.ChartEvent.brushEnd, region);
122
+ if (null === (_a = this._spec) || void 0 === _a ? void 0 : _a.onBrushEnd) !0 === this._spec.onBrushEnd(e) ? (this.clearGraphic(),
123
+ this._initMarkBrushState(componentIndex, ""), this._needDisablePickable = !1, this._emitEvent(event_1.ChartEvent.brushClear, region)) : (this._spec.onBrushEnd(e),
124
+ this._emitEvent(event_1.ChartEvent.brushEnd, region)); else {
125
+ const inBrushData = this._extendDataInBrush(this._inBrushElementsMap);
126
+ !this._spec.zoomWhenEmpty && inBrushData.length > 0 && this._setAxisAndDataZoom(operateMask, region),
127
+ this._emitEvent(event_1.ChartEvent.brushEnd, region);
128
+ }
97
129
  })), brush.addEventListener(vrender_components_1.IOperateType.moveEnd, (e => {
98
- const {operateMask: operateMask} = e.detail;
99
- this._handleBrushChange(event_1.ChartEvent.brushEnd, region, e);
100
- const inBrushData = this._extendDataInBrush(this._inBrushElementsMap);
130
+ const {operateMask: operateMask} = e.detail, inBrushData = this._extendDataInBrush(this._inBrushElementsMap);
101
131
  !this._spec.zoomWhenEmpty && inBrushData.length > 0 && this._setAxisAndDataZoom(operateMask, region),
102
132
  this._emitEvent(event_1.ChartEvent.brushEnd, region);
103
133
  }));
104
134
  }
105
- _handleBrushChange(eventType, region, e) {
135
+ _getBrushInteractiveAttr(region) {
136
+ const regionLayoutPosition = region.getLayoutStartPoint(), regionLayoutRect = region.getLayoutRect(), seriesRegionStartX = regionLayoutPosition.x, seriesRegionEndX = seriesRegionStartX + regionLayoutRect.width, seriesRegionStartY = regionLayoutPosition.y, seriesRegionEndY = seriesRegionStartY + regionLayoutRect.height;
137
+ return {
138
+ interactiveRange: {
139
+ minY: seriesRegionStartY,
140
+ maxY: seriesRegionEndY,
141
+ minX: seriesRegionStartX,
142
+ maxX: seriesRegionEndX
143
+ },
144
+ xRange: [ seriesRegionStartX, seriesRegionEndX ],
145
+ yRange: [ seriesRegionStartY, seriesRegionEndY ]
146
+ };
147
+ }
148
+ _transformBrushedMarkAttr(brushedStyle) {
149
+ const styleResult = {};
150
+ return (null == brushedStyle ? void 0 : brushedStyle.symbol) && (styleResult.symbolType = brushedStyle.symbol),
151
+ (null == brushedStyle ? void 0 : brushedStyle.symbolSize) && (styleResult.size = brushedStyle.symbolSize),
152
+ (null == brushedStyle ? void 0 : brushedStyle.color) && (styleResult.fill = brushedStyle.color),
153
+ (null == brushedStyle ? void 0 : brushedStyle.colorAlpha) && (styleResult.fillOpacity = brushedStyle.colorAlpha),
154
+ Object.assign(Object.assign({}, (0, style_1.transformToGraphic)(brushedStyle)), styleResult);
155
+ }
156
+ _handleBrushChange(region, e) {
106
157
  const {operateMask: operateMask} = e.detail;
107
158
  this._reconfigItem(operateMask, region), this._reconfigLinkedItem(operateMask, region);
108
159
  }
160
+ _extendDataInBrush(elementsMap) {
161
+ var _a, _b;
162
+ const data = [];
163
+ for (const brushName in elementsMap) for (const elementKey in elementsMap[brushName]) data.push(Object.assign({}, null === (_b = null === (_a = elementsMap[brushName][elementKey]) || void 0 === _a ? void 0 : _a.data) || void 0 === _b ? void 0 : _b[0]));
164
+ return data;
165
+ }
166
+ _extendDatumOutOfBrush(elementsMap) {
167
+ var _a;
168
+ const data = [];
169
+ for (const elementKey in elementsMap) data.push(null === (_a = elementsMap[elementKey].data) || void 0 === _a ? void 0 : _a[0]);
170
+ return data;
171
+ }
109
172
  _emitEvent(eventType, region) {
173
+ var _a;
110
174
  this.event.emit(eventType, {
111
175
  model: this,
112
176
  value: {
@@ -121,103 +185,113 @@ class Brush extends base_component_1.BaseComponent {
121
185
  linkedInBrushElementsMap: this._linkedInBrushElementsMap,
122
186
  linkedOutOfBrushElementsMap: this._linkedOutOfBrushElementsMap,
123
187
  zoomRecord: this._zoomRecord
124
- }
188
+ },
189
+ vchart: null === (_a = this._option) || void 0 === _a ? void 0 : _a.globalInstance
125
190
  });
126
191
  }
127
- _transformBrushedMarkAttr(brushedStyle) {
128
- const styleResult = {};
129
- return (null == brushedStyle ? void 0 : brushedStyle.symbol) && (styleResult.symbolType = brushedStyle.symbol),
130
- (null == brushedStyle ? void 0 : brushedStyle.symbolSize) && (styleResult.size = brushedStyle.symbolSize),
131
- (null == brushedStyle ? void 0 : brushedStyle.color) && (styleResult.fill = brushedStyle.color),
132
- (null == brushedStyle ? void 0 : brushedStyle.colorAlpha) && (styleResult.fillOpacity = brushedStyle.colorAlpha),
133
- Object.assign(Object.assign({}, (0, style_1.transformToGraphic)(brushedStyle)), styleResult);
134
- }
135
192
  _reconfigItem(operateMask, region) {
193
+ var _a, _b, _c;
194
+ if (!(null == operateMask ? void 0 : operateMask.globalTransMatrix) || !(null === (_a = null == operateMask ? void 0 : operateMask.attribute) || void 0 === _a ? void 0 : _a.points)) return;
195
+ const points = null !== (_c = null === (_b = null == operateMask ? void 0 : operateMask.attribute) || void 0 === _b ? void 0 : _b.points) && void 0 !== _c ? _c : [], {a: a, b: b, c: c, d: d, e: e, f: f} = operateMask.globalTransMatrix, pointsCoord = points.map((p => ({
196
+ x: a * p.x + c * p.y + e,
197
+ y: b * p.x + d * p.y + f
198
+ }))), {markTypeFilter: markTypeFilter = []} = this._spec;
136
199
  this._itemMap[region.id].forEach((mark => {
200
+ if (markTypeFilter.includes(mark.type)) return;
137
201
  const grammarMark = mark.getProduct();
138
202
  if (!grammarMark || !grammarMark.elements || !grammarMark.elements.length) return;
139
203
  grammarMark.elements.forEach((el => {
140
204
  var _a, _b, _c;
141
- const graphicItem = el.getGraphicItem(), elementKey = mark.id + "_" + el.key;
142
- (null === (_a = this._outOfBrushElementsMap) || void 0 === _a ? void 0 : _a[elementKey]) && this._isBrushContainItem(operateMask, graphicItem) ? (el.addState("inBrush"),
205
+ const graphicItem = el.getGraphicItem(), elementKey = mark.id + "_" + el.key, isBrushContainItem = this._isBrushContainItem(operateMask.globalAABBBounds, pointsCoord, graphicItem);
206
+ (null === (_a = this._outOfBrushElementsMap) || void 0 === _a ? void 0 : _a[elementKey]) && isBrushContainItem ? (el.addState("inBrush"),
143
207
  this._inBrushElementsMap[null == operateMask ? void 0 : operateMask.name] || (this._inBrushElementsMap[null == operateMask ? void 0 : operateMask.name] = {}),
144
208
  this._inBrushElementsMap[null == operateMask ? void 0 : operateMask.name][elementKey] = el,
145
- 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]) && !this._isBrushContainItem(operateMask, graphicItem) && (el.removeState("inBrush"),
209
+ 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 && (el.removeState("inBrush"),
146
210
  el.addState("outOfBrush"), this._outOfBrushElementsMap[elementKey] = el, delete this._inBrushElementsMap[operateMask.name][elementKey]),
147
211
  graphicItem.setAttribute("pickable", !this._needDisablePickable);
148
212
  }));
149
213
  }));
150
214
  }
151
215
  _reconfigLinkedItem(operateMask, region) {
216
+ var _a;
217
+ if (!(null == operateMask ? void 0 : operateMask.globalTransMatrix) || !(null === (_a = null == operateMask ? void 0 : operateMask.attribute) || void 0 === _a ? void 0 : _a.points)) return;
152
218
  const regionLayoutPos = region.getLayoutStartPoint(), seriesId = region.getSeries().map((s => s.id));
153
219
  this._linkedSeries.forEach((s => {
220
+ var _a, _b;
154
221
  if (!seriesId.includes(s.id)) {
155
- const sRegionLayoutPos = s.getRegion().getLayoutStartPoint(), regionOffsetX = sRegionLayoutPos.x - regionLayoutPos.x, regionOffsetY = sRegionLayoutPos.y - regionLayoutPos.y;
222
+ const sRegionLayoutPos = s.getRegion().getLayoutStartPoint(), regionOffsetX = sRegionLayoutPos.x - regionLayoutPos.x, regionOffsetY = sRegionLayoutPos.y - regionLayoutPos.y, points = null !== (_b = null === (_a = null == operateMask ? void 0 : operateMask.attribute) || void 0 === _a ? void 0 : _a.points) && void 0 !== _b ? _b : [], {a: a, b: b, c: c, d: d, e: e, f: f} = operateMask.globalTransMatrix, dx = regionOffsetX || 0, dy = regionOffsetY || 0, pointsCoord = points.map((p => ({
223
+ x: a * p.x + c * p.y + e + dx,
224
+ y: b * p.x + d * p.y + f + dy
225
+ })));
226
+ operateMask.globalAABBBounds.clone().set(operateMask.globalAABBBounds.x1 + dx, operateMask.globalAABBBounds.y1 + dy, operateMask.globalAABBBounds.x2 + dx, operateMask.globalAABBBounds.y2 + dy);
227
+ const {markTypeFilter: markTypeFilter = []} = this._spec;
156
228
  this._linkedItemMap[s.id].forEach((mark => {
229
+ if (markTypeFilter.includes(mark.type)) return;
157
230
  const grammarMark = mark.getProduct();
158
231
  if (!grammarMark || !grammarMark.elements || !grammarMark.elements.length) return;
159
232
  grammarMark.elements.forEach((el => {
160
233
  var _a, _b, _c;
161
234
  const graphicItem = el.getGraphicItem(), elementKey = mark.id + "_" + el.key;
162
- (null === (_a = this._linkedOutOfBrushElementsMap) || void 0 === _a ? void 0 : _a[elementKey]) && this._isBrushContainItem(operateMask, graphicItem, {
163
- dx: regionOffsetX,
164
- dy: regionOffsetY
165
- }) ? (el.addState("inBrush"), this._linkedInBrushElementsMap[null == operateMask ? void 0 : operateMask.name] || (this._linkedInBrushElementsMap[null == operateMask ? void 0 : operateMask.name] = {}),
235
+ (null === (_a = this._linkedOutOfBrushElementsMap) || void 0 === _a ? void 0 : _a[elementKey]) && this._isBrushContainItem(operateMask.globalAABBBounds, pointsCoord, graphicItem) ? (el.addState("inBrush"),
236
+ this._linkedInBrushElementsMap[null == operateMask ? void 0 : operateMask.name] || (this._linkedInBrushElementsMap[null == operateMask ? void 0 : operateMask.name] = {}),
166
237
  this._linkedInBrushElementsMap[null == operateMask ? void 0 : operateMask.name][elementKey] = el,
167
- 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, graphicItem, {
168
- dx: regionOffsetX,
169
- dy: regionOffsetY
170
- }) && (el.removeState("inBrush"), el.addState("outOfBrush"), this._linkedOutOfBrushElementsMap[elementKey] = el),
238
+ 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) && (el.removeState("inBrush"),
239
+ el.addState("outOfBrush"), this._linkedOutOfBrushElementsMap[elementKey] = el),
171
240
  graphicItem.setAttribute("pickable", !this._needDisablePickable);
172
241
  }));
173
242
  }));
174
243
  }
175
244
  }));
176
245
  }
177
- _isBrushContainItem(brushMask, item, linkedOffset) {
178
- var _a, _b, _c;
179
- if (!(null == brushMask ? void 0 : brushMask.globalTransMatrix) || !(null === (_a = null == brushMask ? void 0 : brushMask.attribute) || void 0 === _a ? void 0 : _a.points)) return !1;
180
- const points = null !== (_c = null === (_b = null == brushMask ? void 0 : brushMask.attribute) || void 0 === _b ? void 0 : _b.points) && void 0 !== _c ? _c : [], {a: a, b: b, c: c, d: d, e: e, f: f} = brushMask.globalTransMatrix, dx = (null == linkedOffset ? void 0 : linkedOffset.dx) || 0, dy = (null == linkedOffset ? void 0 : linkedOffset.dy) || 0, pointsCoord = points.map((p => ({
181
- x: a * p.x + c * p.y + e + dx,
182
- y: b * p.x + d * p.y + f + dy
183
- })));
184
- brushMask.globalAABBBounds.clone().set(brushMask.globalAABBBounds.x1 + dx, brushMask.globalAABBBounds.y1 + dy, brushMask.globalAABBBounds.x2 + dx, brushMask.globalAABBBounds.y2 + dy);
185
- const x = item.globalTransMatrix.e, y = item.globalTransMatrix.f;
246
+ _isBrushContainItem(brushMaskAABBBounds, brushMaskPointsCoord, item) {
186
247
  let itemBounds = [];
187
- if ("symbol" === item.type) {
188
- const {size: itemSize = 0} = null == item ? void 0 : item.attribute, size = (0,
189
- vutils_1.array)(itemSize)[0] / 2;
190
- return itemBounds = [ {
191
- x: x - size,
192
- y: y - size
193
- }, {
194
- x: x + size,
195
- y: y - size
196
- }, {
197
- x: x + size,
198
- y: y + size
199
- }, {
200
- x: x - size,
201
- y: y + size
202
- } ], (0, vutils_1.polygonIntersectPolygon)(pointsCoord, itemBounds);
203
- }
204
- if ("rect" === item.type) {
205
- const {x1: x1, x2: x2, y1: y1, y2: y2} = null == item ? void 0 : item.AABBBounds, width = Math.abs(x1 - x2), height = Math.abs(y1 - y2);
248
+ if ([ "symbol", "rect" ].includes(item.type)) {
249
+ const {x1: x1, x2: x2, y1: y1, y2: y2} = null == item ? void 0 : item.globalAABBBounds;
206
250
  return itemBounds = [ {
207
- x: x,
208
- y: y
251
+ x: x1,
252
+ y: y1
209
253
  }, {
210
- x: x + width,
211
- y: y
254
+ x: x2,
255
+ y: y1
212
256
  }, {
213
- x: x + width,
214
- y: y + height
257
+ x: x2,
258
+ y: y2
215
259
  }, {
216
- x: x,
217
- y: y + height
218
- } ], (0, vutils_1.polygonIntersectPolygon)(pointsCoord, itemBounds);
260
+ x: x1,
261
+ y: y2
262
+ } ], (0, vutils_1.polygonIntersectPolygon)(brushMaskPointsCoord, itemBounds);
219
263
  }
220
- return brushMask.globalAABBBounds.intersects(item.globalAABBBounds);
264
+ return brushMaskAABBBounds.intersects(item.globalAABBBounds);
265
+ }
266
+ _initMarkBrushState(componentIndex, stateName) {
267
+ this._brushComponents.forEach(((brush, index) => {
268
+ index !== componentIndex && brush.children[0].removeAllChild();
269
+ })), this._inBrushElementsMap = {}, this._outOfBrushElementsMap = {}, this._linkedInBrushElementsMap = {},
270
+ this._linkedOutOfBrushElementsMap = {};
271
+ const {markTypeFilter: markTypeFilter = []} = this._spec;
272
+ Object.entries(this._itemMap).forEach((([regionId, marks]) => {
273
+ marks.forEach((mark => {
274
+ if (markTypeFilter.includes(mark.type)) return;
275
+ const grammarMark = mark.getProduct();
276
+ if (!grammarMark || !grammarMark.elements || !grammarMark.elements.length) return;
277
+ grammarMark.elements.forEach((el => {
278
+ const elementKey = mark.id + "_" + el.key;
279
+ el.removeState("inBrush"), el.removeState("outOfBrush"), el.addState(stateName),
280
+ this._outOfBrushElementsMap[elementKey] = el;
281
+ }));
282
+ }));
283
+ })), Object.entries(this._linkedItemMap).forEach((([seriesId, marks]) => {
284
+ marks.forEach((mark => {
285
+ if (markTypeFilter.includes(mark.type)) return;
286
+ const grammarMark = mark.getProduct();
287
+ if (!grammarMark || !grammarMark.elements || !grammarMark.elements.length) return;
288
+ grammarMark.elements.forEach((el => {
289
+ const elementKey = mark.id + "_" + el.key;
290
+ el.removeState("inBrush"), el.removeState("outOfBrush"), el.addState(stateName),
291
+ this._linkedOutOfBrushElementsMap[elementKey] = el;
292
+ }));
293
+ }));
294
+ }));
221
295
  }
222
296
  _stateClamp(state) {
223
297
  return Math.min(Math.max(0, state), 1);
@@ -255,83 +329,9 @@ class Brush extends base_component_1.BaseComponent {
255
329
  }));
256
330
  }
257
331
  }
258
- _bindRegions() {
259
- (0, vutils_1.isValid)(this._spec.regionId) && (0, vutils_1.isValid)(this._spec.regionIndex) && (this._relativeRegions = this._option.getAllRegions()),
260
- this._relativeRegions = this._option.getRegionsInUserIdOrIndex((0, vutils_1.array)(this._spec.regionId), (0,
261
- vutils_1.array)(this._spec.regionIndex));
262
- }
263
- _bindLinkedSeries() {
264
- (0, vutils_1.isValid)(this._spec.brushLinkSeriesId) && (0, vutils_1.isValid)(this._spec.brushLinkSeriesIndex) || (this._linkedSeries = this._option.getSeriesInUserIdOrIndex((0,
265
- vutils_1.array)(this._spec.brushLinkSeriesId), (0, vutils_1.array)(this._spec.brushLinkSeriesIndex)));
266
- }
267
- _initRegionAxisMap() {
268
- (0, vutils_1.isValid)(this._spec.axisId) ? (0, vutils_1.array)(this._spec.axisId).forEach((axisId => {
269
- this._releatedAxes.push(this._option.getComponentByUserId(axisId));
270
- })) : (0, vutils_1.isValid)(this._spec.axisIndex) ? (0, vutils_1.array)(this._spec.axisIndex).forEach((axisIndex => {
271
- this._releatedAxes.push(this._option.getComponentByIndex("axes", axisIndex));
272
- })) : this._releatedAxes = this._option.getComponentsByKey("axes"), this._releatedAxes.forEach((axis => {
273
- null == axis || axis.getRegions().forEach((region => {
274
- this._regionAxisMap["region_" + region.id] ? this._regionAxisMap["region_" + region.id].push(axis) : this._regionAxisMap["region_" + region.id] = [ axis ];
275
- }));
276
- }));
277
- }
278
- _initAxisDataZoomMap() {
279
- this._option.getComponentsByKey("dataZoom").forEach((dz => {
280
- dz.relatedAxisComponent && (this._axisDataZoomMap[dz.relatedAxisComponent.id] = dz);
281
- }));
282
- }
283
- _initNeedOperatedItem() {
284
- const seriesUserId = this._spec.seriesId, seriesIndex = this._spec.seriesIndex;
285
- this._relativeRegions.forEach((r => {
286
- const allMarks = [];
287
- r.getSeries().forEach((s => {
288
- (seriesUserId && (0, vutils_1.array)(seriesUserId).includes(s.userId.toString()) || seriesIndex && (0,
289
- vutils_1.array)(seriesIndex).includes(s.getSpecIndex()) || !seriesIndex && !seriesUserId) && allMarks.push(...s.getMarksWithoutRoot()),
290
- this._itemMap[r.id] = allMarks;
291
- }));
292
- })), this._linkedSeries.forEach((s => {
293
- this._linkedItemMap[s.id] = s.getMarksWithoutRoot();
294
- }));
295
- }
296
- _initMarkBrushState(componentIndex, stateName) {
297
- this._brushComponents.forEach(((brush, index) => {
298
- index !== componentIndex && brush.children[0].removeAllChild();
299
- })), this._inBrushElementsMap = {}, this._outOfBrushElementsMap = {}, this._linkedInBrushElementsMap = {},
300
- this._linkedOutOfBrushElementsMap = {}, this._option.getAllSeries().forEach((s => {
301
- s.getMarksWithoutRoot().forEach((mark => {
302
- const grammarMark = mark.getProduct();
303
- if (!grammarMark || !grammarMark.elements || !grammarMark.elements.length) return;
304
- grammarMark.elements.forEach((el => {
305
- const elementKey = mark.id + "_" + el.key;
306
- el.removeState("inBrush"), el.removeState("outOfBrush"), el.addState(stateName),
307
- this._outOfBrushElementsMap[elementKey] = el, this._linkedOutOfBrushElementsMap[elementKey] = el;
308
- }));
309
- }));
310
- }));
311
- }
312
- initEvent() {}
313
- onRender(ctx) {}
314
- changeRegions(regions) {}
315
332
  _getNeedClearVRenderComponents() {
316
333
  return this._brushComponents;
317
334
  }
318
- _compareSpec(spec, prevSpec) {
319
- this._brushComponents && this._relativeRegions.forEach(((region, index) => {
320
- this._updateBrushComponent(region, index);
321
- }));
322
- const result = super._compareSpec(spec, prevSpec);
323
- return (0, vutils_2.isEqual)(prevSpec, spec) || (result.reRender = !0, result.reMake = !0),
324
- result;
325
- }
326
- onLayoutEnd(ctx) {
327
- var _a;
328
- if (super.onLayoutEnd(ctx), this._option.disableTriggerEvent) return;
329
- (null === (_a = this._spec.visible) || void 0 === _a || _a) && (this._brushComponents ? this._relativeRegions.forEach(((region, index) => {
330
- this._updateBrushComponent(region, index);
331
- })) : (this._brushComponents = [], this._relativeRegions.forEach(((region, index) => {
332
- this._createBrushComponent(region, index);
333
- }))));
334
- }
335
335
  clearGraphic() {
336
336
  this._brushComponents && this._brushComponents.forEach((brush => {
337
337
  brush._container.incrementalClearChild();
@@ -340,8 +340,9 @@ class Brush extends base_component_1.BaseComponent {
340
340
  clear() {
341
341
  if (this._brushComponents) {
342
342
  const container = this.getContainer();
343
- this._brushComponents.forEach((brush => {
344
- brush.removeAllChild(), brush.releaseBrushEvents(), container && container.removeChild(brush);
343
+ this._brushComponents.forEach(((brush, index) => {
344
+ this._initMarkBrushState(index, ""), this._needDisablePickable = !1, brush.removeAllChild(),
345
+ brush.releaseBrushEvents(), container && container.removeChild(brush);
345
346
  })), this._brushComponents = null;
346
347
  }
347
348
  }