@visactor/vchart 1.11.0-alpha.0 → 1.11.0-alpha.2

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 (270) hide show
  1. package/build/es5/index.js +1 -1
  2. package/build/index.js +2014 -1457
  3. package/build/index.min.js +1 -1
  4. package/build/tsconfig.tsbuildinfo +1 -1
  5. package/cjs/animation/utils.d.ts +3 -3
  6. package/cjs/animation/utils.js.map +1 -1
  7. package/cjs/chart/map/map-transformer.js +2 -1
  8. package/cjs/chart/map/map-transformer.js.map +1 -1
  9. package/cjs/chart/stack.js +1 -2
  10. package/cjs/compile/compiler.js +1 -1
  11. package/cjs/compile/compiler.js.map +1 -1
  12. package/cjs/compile/grammar-item.js +2 -1
  13. package/cjs/compile/mark/compilable-mark.js +3 -3
  14. package/cjs/compile/mark/compilable-mark.js.map +1 -1
  15. package/cjs/component/custom-mark/custom-mark.d.ts +4 -0
  16. package/cjs/component/custom-mark/custom-mark.js +32 -13
  17. package/cjs/component/custom-mark/custom-mark.js.map +1 -1
  18. package/cjs/component/label/total-label.js +8 -5
  19. package/cjs/component/label/total-label.js.map +1 -1
  20. package/cjs/component/tooltip/constant.d.ts +3 -0
  21. package/cjs/component/tooltip/constant.js +6 -2
  22. package/cjs/component/tooltip/constant.js.map +1 -1
  23. package/cjs/component/tooltip/interface/common.d.ts +10 -5
  24. package/cjs/component/tooltip/interface/common.js.map +1 -1
  25. package/cjs/component/tooltip/interface/spec.d.ts +2 -2
  26. package/cjs/component/tooltip/interface/spec.js.map +1 -1
  27. package/cjs/component/tooltip/processor/base.d.ts +10 -5
  28. package/cjs/component/tooltip/processor/base.js +37 -5
  29. package/cjs/component/tooltip/processor/base.js.map +1 -1
  30. package/cjs/component/tooltip/processor/group-tooltip.d.ts +11 -0
  31. package/cjs/component/tooltip/processor/group-tooltip.js +63 -0
  32. package/cjs/component/tooltip/processor/group-tooltip.js.map +1 -0
  33. package/cjs/component/tooltip/processor/index.d.ts +1 -0
  34. package/cjs/component/tooltip/processor/index.js +2 -2
  35. package/cjs/component/tooltip/processor/index.js.map +1 -1
  36. package/cjs/component/tooltip/processor/interface.d.ts +4 -3
  37. package/cjs/component/tooltip/processor/interface.js.map +1 -1
  38. package/cjs/component/tooltip/processor/mark-tooltip.d.ts +2 -2
  39. package/cjs/component/tooltip/processor/mark-tooltip.js +2 -2
  40. package/cjs/component/tooltip/processor/mark-tooltip.js.map +1 -1
  41. package/cjs/component/tooltip/processor/util.d.ts +1 -1
  42. package/cjs/component/tooltip/tooltip.d.ts +3 -3
  43. package/cjs/component/tooltip/tooltip.js +37 -22
  44. package/cjs/component/tooltip/tooltip.js.map +1 -1
  45. package/cjs/component/tooltip/utils/common.js +3 -2
  46. package/cjs/component/tooltip/utils/common.js.map +1 -1
  47. package/cjs/{plugin/components/tooltip-handler → component/tooltip}/utils/compose.d.ts +2 -2
  48. package/cjs/component/tooltip/utils/compose.js +120 -0
  49. package/cjs/component/tooltip/utils/compose.js.map +1 -0
  50. package/cjs/component/tooltip/utils/get-spec.d.ts +5 -0
  51. package/cjs/component/tooltip/utils/get-spec.js +130 -0
  52. package/cjs/component/tooltip/utils/get-spec.js.map +1 -0
  53. package/cjs/component/tooltip/utils/get-value.d.ts +6 -0
  54. package/cjs/component/tooltip/utils/get-value.js +41 -0
  55. package/cjs/component/tooltip/utils/get-value.js.map +1 -0
  56. package/cjs/component/tooltip/utils/index.d.ts +3 -0
  57. package/cjs/component/tooltip/utils/index.js +3 -1
  58. package/cjs/component/tooltip/utils/index.js.map +1 -1
  59. package/cjs/core/index.d.ts +1 -1
  60. package/cjs/core/index.js +1 -1
  61. package/cjs/core/index.js.map +1 -1
  62. package/cjs/core/vchart.js +1 -1
  63. package/cjs/core/vchart.js.map +1 -1
  64. package/cjs/data/transforms/map.js +4 -2
  65. package/cjs/data/transforms/map.js.map +1 -1
  66. package/cjs/event/event-dispatcher.d.ts +2 -0
  67. package/cjs/event/event-dispatcher.js +21 -2
  68. package/cjs/event/event-dispatcher.js.map +1 -1
  69. package/cjs/event/interface.d.ts +8 -0
  70. package/cjs/event/interface.js.map +1 -1
  71. package/cjs/interaction/interaction.js +1 -1
  72. package/cjs/interaction/interaction.js.map +1 -1
  73. package/cjs/interaction/interface.d.ts +8 -8
  74. package/cjs/interaction/interface.js.map +1 -1
  75. package/cjs/mark/group.js +1 -3
  76. package/cjs/mark/group.js.map +1 -1
  77. package/cjs/model/tooltip-helper.d.ts +4 -2
  78. package/cjs/model/tooltip-helper.js +4 -2
  79. package/cjs/model/tooltip-helper.js.map +1 -1
  80. package/cjs/plugin/components/tooltip-handler/base.d.ts +4 -9
  81. package/cjs/plugin/components/tooltip-handler/base.js +19 -58
  82. package/cjs/plugin/components/tooltip-handler/base.js.map +1 -1
  83. package/cjs/plugin/components/tooltip-handler/canvas/canvas-tooltip-handler.d.ts +1 -2
  84. package/cjs/plugin/components/tooltip-handler/canvas/canvas-tooltip-handler.js +2 -2
  85. package/cjs/plugin/components/tooltip-handler/canvas/canvas-tooltip-handler.js.map +1 -1
  86. package/cjs/plugin/components/tooltip-handler/constants.d.ts +0 -3
  87. package/cjs/plugin/components/tooltip-handler/constants.js +3 -6
  88. package/cjs/plugin/components/tooltip-handler/constants.js.map +1 -1
  89. package/cjs/plugin/components/tooltip-handler/dom/dom-tooltip-handler.d.ts +1 -1
  90. package/cjs/plugin/components/tooltip-handler/dom/dom-tooltip-handler.js +10 -9
  91. package/cjs/plugin/components/tooltip-handler/dom/dom-tooltip-handler.js.map +1 -1
  92. package/cjs/plugin/components/tooltip-handler/utils/common.d.ts +1 -7
  93. package/cjs/plugin/components/tooltip-handler/utils/common.js +4 -39
  94. package/cjs/plugin/components/tooltip-handler/utils/common.js.map +1 -1
  95. package/cjs/plugin/components/tooltip-handler/utils/index.d.ts +0 -2
  96. package/cjs/plugin/components/tooltip-handler/utils/index.js +1 -2
  97. package/cjs/plugin/components/tooltip-handler/utils/index.js.map +1 -1
  98. package/cjs/series/area/area.js +4 -3
  99. package/cjs/series/area/area.js.map +1 -1
  100. package/cjs/series/bar/bar.js +3 -1
  101. package/cjs/series/bar/bar.js.map +1 -1
  102. package/cjs/series/base/base-series.d.ts +3 -2
  103. package/cjs/series/base/base-series.js +44 -30
  104. package/cjs/series/base/base-series.js.map +1 -1
  105. package/cjs/series/base/tooltip-helper.d.ts +1 -0
  106. package/cjs/series/base/tooltip-helper.js +67 -38
  107. package/cjs/series/base/tooltip-helper.js.map +1 -1
  108. package/cjs/series/index.d.ts +3 -5
  109. package/cjs/series/index.js +2 -16
  110. package/cjs/series/index.js.map +1 -1
  111. package/cjs/series/interface/series.d.ts +1 -0
  112. package/cjs/series/interface/series.js.map +1 -1
  113. package/cjs/series/line/line.js +4 -2
  114. package/cjs/series/line/line.js.map +1 -1
  115. package/cjs/series/map/interface.d.ts +1 -0
  116. package/cjs/series/map/interface.js.map +1 -1
  117. package/cjs/series/map/map.js +8 -2
  118. package/cjs/series/map/map.js.map +1 -1
  119. package/cjs/series/progress/linear/tooltip-helper.js +9 -2
  120. package/cjs/series/progress/linear/tooltip-helper.js.map +1 -1
  121. package/cjs/series/radar/radar.js +4 -3
  122. package/cjs/series/radar/radar.js.map +1 -1
  123. package/cjs/series/range-area/tooltip-helper.js +40 -34
  124. package/cjs/series/range-area/tooltip-helper.js.map +1 -1
  125. package/cjs/series/sankey/tooltip-helper.js +46 -41
  126. package/cjs/series/sankey/tooltip-helper.js.map +1 -1
  127. package/cjs/typings/spec/chart.d.ts +0 -2
  128. package/cjs/typings/spec/chart.js.map +1 -1
  129. package/cjs/typings/tooltip/handler.d.ts +1 -1
  130. package/cjs/typings/tooltip/handler.js.map +1 -1
  131. package/cjs/typings/tooltip/tooltip.d.ts +4 -0
  132. package/cjs/typings/tooltip/tooltip.js.map +1 -1
  133. package/esm/animation/utils.d.ts +3 -3
  134. package/esm/animation/utils.js.map +1 -1
  135. package/esm/chart/map/map-transformer.js +2 -1
  136. package/esm/chart/map/map-transformer.js.map +1 -1
  137. package/esm/chart/stack.js +1 -2
  138. package/esm/compile/compiler.js +1 -1
  139. package/esm/compile/compiler.js.map +1 -1
  140. package/esm/compile/grammar-item.js +2 -1
  141. package/esm/compile/mark/compilable-mark.js +3 -3
  142. package/esm/compile/mark/compilable-mark.js.map +1 -1
  143. package/esm/component/custom-mark/custom-mark.d.ts +4 -0
  144. package/esm/component/custom-mark/custom-mark.js +33 -12
  145. package/esm/component/custom-mark/custom-mark.js.map +1 -1
  146. package/esm/component/label/total-label.js +8 -5
  147. package/esm/component/label/total-label.js.map +1 -1
  148. package/esm/component/tooltip/constant.d.ts +3 -0
  149. package/esm/component/tooltip/constant.js +7 -0
  150. package/esm/component/tooltip/constant.js.map +1 -1
  151. package/esm/component/tooltip/interface/common.d.ts +10 -5
  152. package/esm/component/tooltip/interface/common.js.map +1 -1
  153. package/esm/component/tooltip/interface/spec.d.ts +2 -2
  154. package/esm/component/tooltip/interface/spec.js.map +1 -1
  155. package/esm/component/tooltip/processor/base.d.ts +10 -5
  156. package/esm/component/tooltip/processor/base.js +42 -4
  157. package/esm/component/tooltip/processor/base.js.map +1 -1
  158. package/esm/component/tooltip/processor/group-tooltip.d.ts +11 -0
  159. package/esm/component/tooltip/processor/group-tooltip.js +57 -0
  160. package/esm/component/tooltip/processor/group-tooltip.js.map +1 -0
  161. package/esm/component/tooltip/processor/index.d.ts +1 -0
  162. package/esm/component/tooltip/processor/index.js +2 -0
  163. package/esm/component/tooltip/processor/index.js.map +1 -1
  164. package/esm/component/tooltip/processor/interface.d.ts +4 -3
  165. package/esm/component/tooltip/processor/interface.js.map +1 -1
  166. package/esm/component/tooltip/processor/mark-tooltip.d.ts +2 -2
  167. package/esm/component/tooltip/processor/mark-tooltip.js +2 -2
  168. package/esm/component/tooltip/processor/mark-tooltip.js.map +1 -1
  169. package/esm/component/tooltip/processor/util.d.ts +1 -1
  170. package/esm/component/tooltip/tooltip.d.ts +3 -3
  171. package/esm/component/tooltip/tooltip.js +33 -20
  172. package/esm/component/tooltip/tooltip.js.map +1 -1
  173. package/esm/component/tooltip/utils/common.js +3 -2
  174. package/esm/component/tooltip/utils/common.js.map +1 -1
  175. package/esm/{plugin/components/tooltip-handler → component/tooltip}/utils/compose.d.ts +2 -2
  176. package/esm/{plugin/components/tooltip-handler → component/tooltip}/utils/compose.js +39 -26
  177. package/esm/component/tooltip/utils/compose.js.map +1 -0
  178. package/esm/component/tooltip/utils/get-spec.d.ts +5 -0
  179. package/esm/component/tooltip/utils/get-spec.js +125 -0
  180. package/esm/component/tooltip/utils/get-spec.js.map +1 -0
  181. package/esm/component/tooltip/utils/get-value.d.ts +6 -0
  182. package/esm/component/tooltip/utils/get-value.js +32 -0
  183. package/esm/component/tooltip/utils/get-value.js.map +1 -0
  184. package/esm/component/tooltip/utils/index.d.ts +3 -0
  185. package/esm/component/tooltip/utils/index.js +6 -0
  186. package/esm/component/tooltip/utils/index.js.map +1 -1
  187. package/esm/core/index.d.ts +1 -1
  188. package/esm/core/index.js +1 -1
  189. package/esm/core/index.js.map +1 -1
  190. package/esm/core/vchart.js +1 -1
  191. package/esm/core/vchart.js.map +1 -1
  192. package/esm/data/transforms/map.js +4 -2
  193. package/esm/data/transforms/map.js.map +1 -1
  194. package/esm/event/event-dispatcher.d.ts +2 -0
  195. package/esm/event/event-dispatcher.js +22 -1
  196. package/esm/event/event-dispatcher.js.map +1 -1
  197. package/esm/event/interface.d.ts +8 -0
  198. package/esm/event/interface.js.map +1 -1
  199. package/esm/interaction/interaction.js +1 -1
  200. package/esm/interaction/interaction.js.map +1 -1
  201. package/esm/interaction/interface.d.ts +8 -8
  202. package/esm/interaction/interface.js.map +1 -1
  203. package/esm/mark/group.js +1 -3
  204. package/esm/mark/group.js.map +1 -1
  205. package/esm/model/tooltip-helper.d.ts +4 -2
  206. package/esm/model/tooltip-helper.js +4 -2
  207. package/esm/model/tooltip-helper.js.map +1 -1
  208. package/esm/plugin/components/tooltip-handler/base.d.ts +4 -9
  209. package/esm/plugin/components/tooltip-handler/base.js +19 -58
  210. package/esm/plugin/components/tooltip-handler/base.js.map +1 -1
  211. package/esm/plugin/components/tooltip-handler/canvas/canvas-tooltip-handler.d.ts +1 -2
  212. package/esm/plugin/components/tooltip-handler/canvas/canvas-tooltip-handler.js +2 -2
  213. package/esm/plugin/components/tooltip-handler/canvas/canvas-tooltip-handler.js.map +1 -1
  214. package/esm/plugin/components/tooltip-handler/constants.d.ts +0 -3
  215. package/esm/plugin/components/tooltip-handler/constants.js +0 -7
  216. package/esm/plugin/components/tooltip-handler/constants.js.map +1 -1
  217. package/esm/plugin/components/tooltip-handler/dom/dom-tooltip-handler.d.ts +1 -1
  218. package/esm/plugin/components/tooltip-handler/dom/dom-tooltip-handler.js +10 -9
  219. package/esm/plugin/components/tooltip-handler/dom/dom-tooltip-handler.js.map +1 -1
  220. package/esm/plugin/components/tooltip-handler/utils/common.d.ts +1 -7
  221. package/esm/plugin/components/tooltip-handler/utils/common.js +1 -31
  222. package/esm/plugin/components/tooltip-handler/utils/common.js.map +1 -1
  223. package/esm/plugin/components/tooltip-handler/utils/index.d.ts +0 -2
  224. package/esm/plugin/components/tooltip-handler/utils/index.js +0 -4
  225. package/esm/plugin/components/tooltip-handler/utils/index.js.map +1 -1
  226. package/esm/series/area/area.js +4 -3
  227. package/esm/series/area/area.js.map +1 -1
  228. package/esm/series/bar/bar.js +3 -1
  229. package/esm/series/bar/bar.js.map +1 -1
  230. package/esm/series/base/base-series.d.ts +3 -2
  231. package/esm/series/base/base-series.js +44 -30
  232. package/esm/series/base/base-series.js.map +1 -1
  233. package/esm/series/base/tooltip-helper.d.ts +1 -0
  234. package/esm/series/base/tooltip-helper.js +67 -38
  235. package/esm/series/base/tooltip-helper.js.map +1 -1
  236. package/esm/series/index.d.ts +3 -5
  237. package/esm/series/index.js +2 -4
  238. package/esm/series/index.js.map +1 -1
  239. package/esm/series/interface/series.d.ts +1 -0
  240. package/esm/series/interface/series.js.map +1 -1
  241. package/esm/series/line/line.js +4 -2
  242. package/esm/series/line/line.js.map +1 -1
  243. package/esm/series/map/interface.d.ts +1 -0
  244. package/esm/series/map/interface.js.map +1 -1
  245. package/esm/series/map/map.js +8 -2
  246. package/esm/series/map/map.js.map +1 -1
  247. package/esm/series/progress/linear/tooltip-helper.js +9 -2
  248. package/esm/series/progress/linear/tooltip-helper.js.map +1 -1
  249. package/esm/series/radar/radar.js +4 -3
  250. package/esm/series/radar/radar.js.map +1 -1
  251. package/esm/series/range-area/tooltip-helper.js +40 -34
  252. package/esm/series/range-area/tooltip-helper.js.map +1 -1
  253. package/esm/series/sankey/tooltip-helper.js +46 -41
  254. package/esm/series/sankey/tooltip-helper.js.map +1 -1
  255. package/esm/typings/spec/chart.d.ts +0 -2
  256. package/esm/typings/spec/chart.js.map +1 -1
  257. package/esm/typings/tooltip/handler.d.ts +1 -1
  258. package/esm/typings/tooltip/handler.js.map +1 -1
  259. package/esm/typings/tooltip/tooltip.d.ts +4 -0
  260. package/esm/typings/tooltip/tooltip.js.map +1 -1
  261. package/package.json +15 -15
  262. package/cjs/plugin/components/tooltip-handler/utils/compose.js +0 -107
  263. package/cjs/plugin/components/tooltip-handler/utils/compose.js.map +0 -1
  264. package/cjs/plugin/components/tooltip-handler/utils/get-spec.d.ts +0 -5
  265. package/cjs/plugin/components/tooltip-handler/utils/get-spec.js +0 -106
  266. package/cjs/plugin/components/tooltip-handler/utils/get-spec.js.map +0 -1
  267. package/esm/plugin/components/tooltip-handler/utils/compose.js.map +0 -1
  268. package/esm/plugin/components/tooltip-handler/utils/get-spec.d.ts +0 -5
  269. package/esm/plugin/components/tooltip-handler/utils/get-spec.js +0 -101
  270. package/esm/plugin/components/tooltip-handler/utils/get-spec.js.map +0 -1
@@ -1,18 +1,23 @@
1
1
  import type { DimensionEventParams } from '../../../event/events/dimension/interface';
2
- import type { DimensionTooltipInfo, MarkTooltipInfo } from '../processor/interface';
3
- import type { Datum, IShowTooltipOption } from '../../../typings';
2
+ import type { DimensionTooltipInfo, GroupTooltipInfo, MarkTooltipInfo } from '../processor/interface';
3
+ import type { Datum, IShowTooltipOption, ITooltipActual } from '../../../typings';
4
4
  import type { IComponent } from '../../interface';
5
+ import type { ITooltipSpec } from './spec';
5
6
  export type TooltipHandlerParams = DimensionEventParams & {
6
7
  changePositionOnly?: boolean;
7
8
  tooltip: ITooltip;
9
+ tooltipSpec?: ITooltipSpec;
10
+ tooltipActual?: ITooltipActual;
11
+ groupDatum?: Datum[];
8
12
  };
9
- export interface ITooltipActiveTypeAsKeys<T, K> {
13
+ export interface ITooltipActiveTypeAsKeys<T, K, U> {
10
14
  mark: T;
11
15
  dimension: K;
16
+ group: U;
12
17
  }
13
18
  export type TotalMouseEventData = {
14
- tooltipInfo: Partial<ITooltipActiveTypeAsKeys<MarkTooltipInfo, DimensionTooltipInfo>>;
15
- ignore: Partial<ITooltipActiveTypeAsKeys<boolean, boolean>>;
19
+ tooltipInfo: Partial<ITooltipActiveTypeAsKeys<MarkTooltipInfo, DimensionTooltipInfo, GroupTooltipInfo>>;
20
+ ignore: Partial<ITooltipActiveTypeAsKeys<boolean, boolean, boolean>>;
16
21
  };
17
22
  export declare const enum TooltipResult {
18
23
  success = 0,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/component/tooltip/interface/common.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAN,IAAkB,aAKjB;AALD,WAAkB,aAAa;IAE7B,uDAAW,CAAA;IAEX,qDAAU,CAAA;AACZ,CAAC,EALiB,aAAa,KAAb,aAAa,QAK9B","file":"common.js","sourcesContent":["import type { DimensionEventParams } from '../../../event/events/dimension/interface';\nimport type { DimensionTooltipInfo, MarkTooltipInfo } from '../processor/interface';\nimport type { Datum, IShowTooltipOption } from '../../../typings';\nimport type { IComponent } from '../../interface';\n\nexport type TooltipHandlerParams = DimensionEventParams & {\n /** 本次触发的 tooltip 是否只改变了位置 */\n changePositionOnly?: boolean;\n /** tooltip 组件实例 */\n tooltip: ITooltip;\n};\n\nexport interface ITooltipActiveTypeAsKeys<T, K> {\n mark: T;\n dimension: K;\n}\n\nexport type TotalMouseEventData = {\n tooltipInfo: Partial<ITooltipActiveTypeAsKeys<MarkTooltipInfo, DimensionTooltipInfo>>;\n ignore: Partial<ITooltipActiveTypeAsKeys<boolean, boolean>>;\n};\n\nexport const enum TooltipResult {\n /** tooltip 显示成功 */\n success = 0,\n /** tooltip 未成功显示 */\n failed = 1\n}\n\nexport interface ITooltip extends IComponent {\n getVisible: () => boolean;\n showTooltip: (datum: Datum, options: IShowTooltipOption) => void;\n}\n"]}
1
+ {"version":3,"sources":["../src/component/tooltip/interface/common.ts"],"names":[],"mappings":"AA8BA,MAAM,CAAN,IAAkB,aAKjB;AALD,WAAkB,aAAa;IAE7B,uDAAW,CAAA;IAEX,qDAAU,CAAA;AACZ,CAAC,EALiB,aAAa,KAAb,aAAa,QAK9B","file":"common.js","sourcesContent":["import type { DimensionEventParams } from '../../../event/events/dimension/interface';\nimport type { DimensionTooltipInfo, GroupTooltipInfo, MarkTooltipInfo } from '../processor/interface';\nimport type { Datum, IShowTooltipOption, ITooltipActual } from '../../../typings';\nimport type { IComponent } from '../../interface';\nimport type { ITooltipSpec } from './spec';\n\nexport type TooltipHandlerParams = DimensionEventParams & {\n /** 本次触发的 tooltip 是否只改变了位置 */\n changePositionOnly?: boolean;\n /** tooltip 组件实例 */\n tooltip: ITooltip;\n /** 本次触发的 tooltip 对应的最终 spec(可能经过了一些补全) */\n tooltipSpec?: ITooltipSpec;\n /** 本次触发的 tooltip 的显示数据 */\n tooltipActual?: ITooltipActual;\n /** 和 datum 同组的数据项 */\n groupDatum?: Datum[];\n};\n\nexport interface ITooltipActiveTypeAsKeys<T, K, U> {\n mark: T;\n dimension: K;\n group: U;\n}\n\nexport type TotalMouseEventData = {\n tooltipInfo: Partial<ITooltipActiveTypeAsKeys<MarkTooltipInfo, DimensionTooltipInfo, GroupTooltipInfo>>;\n ignore: Partial<ITooltipActiveTypeAsKeys<boolean, boolean, boolean>>;\n};\n\nexport const enum TooltipResult {\n /** tooltip 显示成功 */\n success = 0,\n /** tooltip 未成功显示 */\n failed = 1\n}\n\nexport interface ITooltip extends IComponent {\n getVisible: () => boolean;\n showTooltip: (datum: Datum, options: IShowTooltipOption) => void;\n}\n"]}
@@ -1,7 +1,7 @@
1
- import type { ITooltipActual, ITooltipPattern, Maybe, MaybeArray, TooltipActiveType, TooltipData } from '../../../typings';
1
+ import type { IGroupTooltipPattern, ITooltipActual, ITooltipPattern, Maybe, MaybeArray, TooltipActiveType, TooltipData } from '../../../typings';
2
2
  import type { ITooltipActiveTypeAsKeys, TooltipHandlerParams, TooltipResult } from './common';
3
3
  import type { ITooltipTheme } from './theme';
4
- export interface ITooltipSpec extends Partial<ITooltipActiveTypeAsKeys<ITooltipPattern, ITooltipPattern>> {
4
+ export interface ITooltipSpec extends Partial<ITooltipActiveTypeAsKeys<ITooltipPattern, ITooltipPattern, IGroupTooltipPattern>> {
5
5
  visible?: boolean;
6
6
  activeType?: TooltipActiveType | TooltipActiveType[];
7
7
  trigger?: MaybeArray<'hover' | 'click'> | 'none';
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/component/tooltip/interface/spec.ts"],"names":[],"mappings":"","file":"spec.js","sourcesContent":["import type {\n ITooltipActual,\n ITooltipPattern,\n Maybe,\n MaybeArray,\n TooltipActiveType,\n TooltipData\n} from '../../../typings';\nimport type { ITooltipActiveTypeAsKeys, TooltipHandlerParams, TooltipResult } from './common';\nimport type { ITooltipTheme } from './theme';\n\nexport interface ITooltipSpec\n extends Partial<\n /**\n * mark tooltip pattern\n * & dimension tooltip pattern\n * (*支持在series上设置)\n */\n ITooltipActiveTypeAsKeys<ITooltipPattern, ITooltipPattern>\n > {\n /**\n * 是否显示\n * (*支持在series上设置)\n * (*会影响自定义handler)\n */\n visible?: boolean;\n /**\n * 受支持的激活类型\n * (*支持在series上设置)\n * (*会影响自定义handler)\n */\n activeType?: TooltipActiveType | TooltipActiveType[];\n /**\n * tooltip触发方式\n * (*会影响自定义handler)\n */\n trigger?: MaybeArray<'hover' | 'click'> | 'none';\n /**\n * 隐藏tooltip的触发方式(目前仅支持和trigger一致的设置以及none)\n * (*会影响自定义handler)\n */\n triggerOff?: MaybeArray<'hover' | 'click'> | 'none';\n /**\n * 点击后锁定,只有点击才可以更新位置或者解锁,通常用于 trigger 为 `['hover', 'click']` 的场景\n * (*会影响自定义handler)\n * @since 1.10.0\n */\n lockAfterClick?: boolean;\n /**\n * tooltip样式\n */\n style?: Omit<ITooltipTheme<string>, 'offset'>;\n\n /**\n * 自定义handler方法\n */\n handler?: Partial<ITooltipHandlerSpec>;\n\n /**\n * tooltip 渲染方式,默认为 html\n */\n renderMode?: 'html' | 'canvas';\n /**\n * 是否将 tooltip 框限制在画布区域内,renderMode 为 canvas 时,默认开启。\n */\n confine?: boolean;\n\n /**\n * tooltip dom元素的 className,仅当 renderMode: 'html' 时生效\n */\n className?: string;\n /**\n * tooltip dom 元素的挂载点,可传 id 或 dom 对象\n */\n parentElement?: Maybe<string | HTMLElement | HTMLCanvasElement>;\n /**\n * 鼠标是否可进入提示框浮层中,默认为false,如需详情内交互,如添加链接,按钮,可设置为 true。\n * 该属性目前只对 renderMode 为 html 时生效\n * TODO: 支持 renderMode: canvas\n */\n enterable?: boolean;\n\n /**\n * 浮层移动动画过渡时间,单位是 ms,设置为 0 的时候会紧跟着鼠标移动(目前仅影响 dom tooltip)\n */\n transitionDuration?: number;\n\n /**\n * 更新 tooltip 的防抖动时间间隔,单位是 ms\n */\n throttleInterval?: number;\n\n /**\n * 更新 tooltip dom 元素,仅当 renderMode: 'html' 时生效\n * @since 1.6.0\n */\n updateElement?: (tooltipElement: HTMLElement, actualTooltip: ITooltipActual, params: TooltipHandlerParams) => void;\n\n offset?: {\n x?: number;\n y?: number;\n };\n}\n\nexport interface ITooltipHandlerSpec {\n /** 显示 tooltip,可以选择返回是否遇到异常 */\n showTooltip: (\n activeType: TooltipActiveType,\n tooltipData: TooltipData,\n params: TooltipHandlerParams\n ) => Maybe<TooltipResult>;\n /** 隐藏 tooltip,可以选择返回是否遇到异常 */\n hideTooltip: (params: TooltipHandlerParams) => Maybe<TooltipResult>;\n /** 释放 tooltip */\n release: () => void;\n /** 可选,判断 tooltip 是否正在显示 */\n isTooltipShown?: () => boolean;\n}\n"]}
1
+ {"version":3,"sources":["../src/component/tooltip/interface/spec.ts"],"names":[],"mappings":"","file":"spec.js","sourcesContent":["import type {\n IGroupTooltipPattern,\n ITooltipActual,\n ITooltipPattern,\n Maybe,\n MaybeArray,\n TooltipActiveType,\n TooltipData\n} from '../../../typings';\nimport type { ITooltipActiveTypeAsKeys, TooltipHandlerParams, TooltipResult } from './common';\nimport type { ITooltipTheme } from './theme';\n\nexport interface ITooltipSpec\n extends Partial<\n /**\n * mark tooltip pattern\n * & dimension tooltip pattern\n * (*支持在series上设置)\n */\n ITooltipActiveTypeAsKeys<ITooltipPattern, ITooltipPattern, IGroupTooltipPattern>\n > {\n /**\n * 是否显示\n * (*支持在series上设置)\n * (*会影响自定义handler)\n */\n visible?: boolean;\n /**\n * 受支持的激活类型\n * (*支持在series上设置)\n * (*会影响自定义handler)\n */\n activeType?: TooltipActiveType | TooltipActiveType[];\n /**\n * tooltip触发方式\n * (*会影响自定义handler)\n */\n trigger?: MaybeArray<'hover' | 'click'> | 'none';\n /**\n * 隐藏tooltip的触发方式(目前仅支持和trigger一致的设置以及none)\n * (*会影响自定义handler)\n */\n triggerOff?: MaybeArray<'hover' | 'click'> | 'none';\n /**\n * 点击后锁定,只有点击才可以更新位置或者解锁,通常用于 trigger 为 `['hover', 'click']` 的场景\n * (*会影响自定义handler)\n * @since 1.10.0\n */\n lockAfterClick?: boolean;\n /**\n * tooltip样式\n */\n style?: Omit<ITooltipTheme<string>, 'offset'>;\n\n /**\n * 自定义handler方法\n */\n handler?: Partial<ITooltipHandlerSpec>;\n\n /**\n * tooltip 渲染方式,默认为 html\n */\n renderMode?: 'html' | 'canvas';\n /**\n * 是否将 tooltip 框限制在画布区域内,renderMode 为 canvas 时,默认开启。\n */\n confine?: boolean;\n\n /**\n * tooltip dom元素的 className,仅当 renderMode: 'html' 时生效\n */\n className?: string;\n /**\n * tooltip dom 元素的挂载点,可传 id 或 dom 对象\n */\n parentElement?: Maybe<string | HTMLElement | HTMLCanvasElement>;\n /**\n * 鼠标是否可进入提示框浮层中,默认为false,如需详情内交互,如添加链接,按钮,可设置为 true。\n * 该属性目前只对 renderMode 为 html 时生效\n * TODO: 支持 renderMode: canvas\n */\n enterable?: boolean;\n\n /**\n * 浮层移动动画过渡时间,单位是 ms,设置为 0 的时候会紧跟着鼠标移动(目前仅影响 dom tooltip)\n */\n transitionDuration?: number;\n\n /**\n * 更新 tooltip 的防抖动时间间隔,单位是 ms\n */\n throttleInterval?: number;\n\n /**\n * 更新 tooltip dom 元素,仅当 renderMode: 'html' 时生效\n * @since 1.6.0\n */\n updateElement?: (tooltipElement: HTMLElement, actualTooltip: ITooltipActual, params: TooltipHandlerParams) => void;\n\n offset?: {\n x?: number;\n y?: number;\n };\n}\n\nexport interface ITooltipHandlerSpec {\n /** 显示 tooltip,可以选择返回是否遇到异常 */\n showTooltip: (\n activeType: TooltipActiveType,\n tooltipData: TooltipData,\n params: TooltipHandlerParams\n ) => Maybe<TooltipResult>;\n /** 隐藏 tooltip,可以选择返回是否遇到异常 */\n hideTooltip: (params: TooltipHandlerParams) => Maybe<TooltipResult>;\n /** 释放 tooltip */\n release: () => void;\n /** 可选,判断 tooltip 是否正在显示 */\n isTooltipShown?: () => boolean;\n}\n"]}
@@ -1,18 +1,23 @@
1
1
  import type { BaseEventParams } from '../../../event/interface';
2
- import type { TooltipActiveType, TooltipData } from '../../../typings';
3
- import type { TooltipHandlerParams } from '../interface';
2
+ import type { ITooltipActual, TooltipActiveType, TooltipData } from '../../../typings';
3
+ import type { ITooltipSpec, TooltipHandlerParams } from '../interface';
4
4
  import { TooltipResult } from '../interface/common';
5
5
  import type { Tooltip } from '../tooltip';
6
- import type { MouseEventData, TooltipInfo } from './interface';
6
+ import type { DimensionTooltipInfo, MouseEventData, TooltipInfo } from './interface';
7
7
  import type { IDimensionInfo } from '../../../event/events/dimension';
8
8
  export declare abstract class BaseTooltipProcessor {
9
9
  readonly component: Tooltip;
10
- activeType: TooltipActiveType;
10
+ abstract activeType: TooltipActiveType;
11
+ protected _cacheViewSpec: ITooltipSpec | undefined;
12
+ protected _cacheActualTooltip: ITooltipActual | undefined;
11
13
  constructor(component: Tooltip);
12
14
  abstract showTooltip(info: TooltipInfo, params: BaseEventParams, changePositionOnly: boolean): TooltipResult;
13
15
  abstract shouldHandleTooltip(params: BaseEventParams, mouseEventData: Partial<MouseEventData>): boolean;
14
- abstract getMouseEventData(params: BaseEventParams): MouseEventData;
16
+ abstract getMouseEventData(params: BaseEventParams, dimensionInfo?: DimensionTooltipInfo): MouseEventData;
15
17
  protected _showTooltipByHandler: (data: TooltipData | undefined, params: TooltipHandlerParams) => TooltipResult;
16
18
  protected _preprocessDimensionInfo(dimensionInfo?: IDimensionInfo[]): IDimensionInfo[] | undefined;
17
19
  protected _getDimensionInfo(params: BaseEventParams): IDimensionInfo[];
20
+ protected _updateViewSpec(params: TooltipHandlerParams): void;
21
+ protected _updateActualTooltip(data: TooltipData, params: TooltipHandlerParams): void;
22
+ clearCache(): void;
18
23
  }
@@ -1,4 +1,4 @@
1
- import { isValid } from "@visactor/vutils";
1
+ import { isNil, isValid } from "@visactor/vutils";
2
2
 
3
3
  import { ChartEvent } from "../../../constant";
4
4
 
@@ -8,15 +8,31 @@ import { getCartesianDimensionInfo } from "../../../event/events/dimension/util/
8
8
 
9
9
  import { isDiscrete } from "@visactor/vscale";
10
10
 
11
+ import { getTooltipSpecForShow } from "../utils/get-spec";
12
+
13
+ import { getShowContent } from "../utils/compose";
14
+
15
+ import { getTooltipPatternValue } from "../utils/get-value";
16
+
11
17
  export class BaseTooltipProcessor {
12
18
  constructor(component) {
13
19
  this._showTooltipByHandler = (data, params) => {
14
- var _a, _b;
15
- return this.component.event.emit(ChartEvent.tooltipShow, Object.assign(Object.assign({}, params), {
20
+ var _a, _b, _c;
21
+ if (isNil(data)) return 1;
22
+ params.changePositionOnly || this.clearCache(), this._updateViewSpec(params);
23
+ const spec = this._cacheViewSpec;
24
+ if (isNil(null == spec ? void 0 : spec[this.activeType]) || !1 === spec.visible) return 1;
25
+ params.tooltipSpec = spec, this._updateActualTooltip(data, params), params.tooltipActual = this._cacheActualTooltip,
26
+ this.component.event.emit(ChartEvent.tooltipShow, Object.assign(Object.assign({}, params), {
16
27
  tooltipData: data,
17
28
  activeType: this.activeType,
18
29
  tooltip: this.component
19
- })), (null === (_a = this.component.tooltipHandler) || void 0 === _a ? void 0 : _a.showTooltip) && isValid(data) ? null !== (_b = this.component.tooltipHandler.showTooltip(this.activeType, data, params)) && void 0 !== _b ? _b : 0 : 1;
30
+ }));
31
+ const {title: title, content: content} = this._cacheActualTooltip;
32
+ if (isNil(null == title ? void 0 : title.key) && isNil(null == title ? void 0 : title.value) && !(null == content ? void 0 : content.length)) return 1;
33
+ let showTooltip;
34
+ return (null === (_a = spec.handler) || void 0 === _a ? void 0 : _a.showTooltip) ? showTooltip = spec.handler.showTooltip.bind(spec.handler) : (null === (_b = this.component.tooltipHandler) || void 0 === _b ? void 0 : _b.showTooltip) && (showTooltip = this.component.tooltipHandler.showTooltip.bind(this.component.tooltipHandler)),
35
+ showTooltip ? null !== (_c = showTooltip(this.activeType, data, params)) && void 0 !== _c ? _c : 0 : 1;
20
36
  }, this.component = component;
21
37
  }
22
38
  _preprocessDimensionInfo(dimensionInfo) {
@@ -69,5 +85,27 @@ export class BaseTooltipProcessor {
69
85
  }
70
86
  return targetDimensionInfo;
71
87
  }
88
+ _updateViewSpec(params) {
89
+ const {changePositionOnly: changePositionOnly, model: model, dimensionInfo: dimensionInfo} = params;
90
+ changePositionOnly && this._cacheViewSpec || (this._cacheViewSpec = getTooltipSpecForShow(this.activeType, this.component.getSpec(), model, dimensionInfo));
91
+ }
92
+ _updateActualTooltip(data, params) {
93
+ var _a, _b, _c, _d;
94
+ const pattern = this._cacheViewSpec[this.activeType], {changePositionOnly: changePositionOnly} = params;
95
+ if (!changePositionOnly || !this._cacheActualTooltip) {
96
+ const tooltipContent = getShowContent(pattern, data, params), visible = !!isValid(tooltipContent) && !1 !== getTooltipPatternValue(pattern.visible, data, params);
97
+ this._cacheActualTooltip = Object.assign(Object.assign({}, tooltipContent), {
98
+ visible: visible,
99
+ activeType: pattern.activeType,
100
+ data: data
101
+ });
102
+ const {title: title, content: content} = this._cacheActualTooltip;
103
+ this._cacheActualTooltip.title = null !== (_b = null === (_a = pattern.updateTitle) || void 0 === _a ? void 0 : _a.call(pattern, title, data, params)) && void 0 !== _b ? _b : title,
104
+ this._cacheActualTooltip.content = null !== (_d = null === (_c = pattern.updateContent) || void 0 === _c ? void 0 : _c.call(pattern, content, data, params)) && void 0 !== _d ? _d : content;
105
+ }
106
+ }
107
+ clearCache() {
108
+ this._cacheViewSpec = void 0, this._cacheActualTooltip = void 0;
109
+ }
72
110
  }
73
111
  //# sourceMappingURL=base.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/component/tooltip/processor/base.ts"],"names":[],"mappings":"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","file":"base.js","sourcesContent":["import { isValid } from '@visactor/vutils';\nimport type { BaseEventParams } from '../../../event/interface';\nimport type { TooltipActiveType, TooltipData } from '../../../typings';\nimport type { TooltipHandlerParams } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { TooltipResult } from '../interface/common';\nimport type { Tooltip } from '../tooltip';\nimport type { MouseEventData, TooltipInfo } from './interface';\nimport { ChartEvent } from '../../../constant';\nimport type { TooltipEventParams } from '../interface/event';\nimport type { IDimensionData, IDimensionInfo } from '../../../event/events/dimension';\nimport { getPolarDimensionInfo } from '../../../event/events/dimension/util/polar';\nimport { getCartesianDimensionInfo } from '../../../event/events/dimension/util/cartesian';\nimport { isDiscrete } from '@visactor/vscale';\nimport type { ICartesianSeries } from '../../../series/interface';\n\nexport abstract class BaseTooltipProcessor {\n readonly component: Tooltip;\n activeType: TooltipActiveType;\n\n constructor(component: Tooltip) {\n this.component = component;\n }\n\n /** 触发对应类型的 tooltip */\n abstract showTooltip(info: TooltipInfo, params: BaseEventParams, changePositionOnly: boolean): TooltipResult;\n\n /** 判断是否应该触发 tooltip */\n abstract shouldHandleTooltip(params: BaseEventParams, mouseEventData: Partial<MouseEventData>): boolean;\n\n /** 获取触发 tooltip 需要的信息 */\n abstract getMouseEventData(params: BaseEventParams): MouseEventData;\n\n protected _showTooltipByHandler = (data: TooltipData | undefined, params: TooltipHandlerParams): TooltipResult => {\n this.component.event.emit(ChartEvent.tooltipShow, {\n ...params,\n tooltipData: data,\n activeType: this.activeType,\n tooltip: this.component\n } as TooltipEventParams);\n if (this.component.tooltipHandler?.showTooltip && isValid(data)) {\n return this.component.tooltipHandler.showTooltip(this.activeType, data, params) ?? TooltipResult.success;\n }\n return TooltipResult.failed;\n };\n\n protected _preprocessDimensionInfo(dimensionInfo?: IDimensionInfo[]): IDimensionInfo[] | undefined {\n const newDimensionInfo: IDimensionInfo[] = [];\n dimensionInfo?.forEach(info => {\n const di: IDimensionInfo = {\n ...info,\n data: info.data.filter(\n ({ series }: any) => series.getSpec()?.tooltip?.visible !== false // 过滤掉不需要显示的维度数据\n )\n };\n if (di.data.length > 0) {\n newDimensionInfo.push(di);\n }\n });\n if (newDimensionInfo.length > 0) {\n return newDimensionInfo;\n }\n return undefined;\n }\n\n protected _getDimensionInfo(params: BaseEventParams): IDimensionInfo[] {\n let targetDimensionInfo: IDimensionInfo[] | undefined;\n // 处理dimension info\n const chart = this.component.getChart();\n\n // compute layer offset\n const layer = chart.getCompiler().getStage().getLayer(undefined);\n const point = { x: params.event.viewX, y: params.event.viewY };\n layer.globalTransMatrix.transformPoint({ x: params.event.viewX, y: params.event.viewY }, point);\n\n targetDimensionInfo = [\n ...(getCartesianDimensionInfo(chart, point, true) ?? []),\n ...(getPolarDimensionInfo(chart, point) ?? [])\n ];\n if (targetDimensionInfo.length === 0) {\n targetDimensionInfo = undefined;\n } else if (targetDimensionInfo.length > 1) {\n // 只保留一个轴的dimension info\n const dimensionAxisInfo = targetDimensionInfo.filter(info => {\n const axis = info.axis;\n if (axis.getSpec().hasDimensionTooltip) {\n return true;\n }\n\n // 优先显示离散轴 tooltip\n if (!isDiscrete(axis.getScale().type)) {\n return false;\n }\n // 下面的逻辑用来判断当前的离散轴是不是维度轴\n let firstSeries: ICartesianSeries | undefined;\n for (const region of axis?.getRegions() ?? []) {\n for (const series of region.getSeries()) {\n if (series.coordinate === 'cartesian') {\n firstSeries = series as ICartesianSeries;\n break;\n }\n }\n if (isValid(firstSeries)) {\n break;\n }\n }\n if (isValid(firstSeries) && firstSeries.getDimensionField()[0] === firstSeries.fieldY[0]) {\n // 维度轴为Y轴时,选择只显示Y轴tooltip\n return axis.getOrient() === 'left' || axis.getOrient() === 'right';\n }\n // 维度轴为X轴时,选择只显示X轴tooltip\n return axis.getOrient() === 'bottom' || axis.getOrient() === 'top';\n });\n targetDimensionInfo = dimensionAxisInfo.length ? dimensionAxisInfo : targetDimensionInfo.slice(0, 1);\n\n // datum 去重,保证每个系列的每个数据项只对应于一行 tooltip 内容项\n if (targetDimensionInfo.length > 1) {\n const dimensionDataKeySet = new Set<string>();\n targetDimensionInfo.forEach(info => {\n info.data = info.data.filter(({ key }: IDimensionData) => {\n if (dimensionDataKeySet.has(key)) {\n return false;\n }\n dimensionDataKeySet.add(key);\n return true;\n });\n });\n }\n }\n\n return targetDimensionInfo;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/component/tooltip/processor/base.ts"],"names":[],"mappings":"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","file":"base.js","sourcesContent":["import { isNil, isValid } from '@visactor/vutils';\nimport type { BaseEventParams } from '../../../event/interface';\nimport type { ITooltipActual, ITooltipPattern, TooltipActiveType, TooltipData } from '../../../typings';\nimport type { ITooltipSpec, TooltipHandlerParams } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { TooltipResult } from '../interface/common';\nimport type { Tooltip } from '../tooltip';\nimport type { DimensionTooltipInfo, MouseEventData, TooltipInfo } from './interface';\nimport { ChartEvent } from '../../../constant';\nimport type { TooltipEventParams } from '../interface/event';\nimport type { IDimensionData, IDimensionInfo } from '../../../event/events/dimension';\nimport { getPolarDimensionInfo } from '../../../event/events/dimension/util/polar';\nimport { getCartesianDimensionInfo } from '../../../event/events/dimension/util/cartesian';\nimport { isDiscrete } from '@visactor/vscale';\nimport type { ICartesianSeries, ISeries } from '../../../series/interface';\nimport { getTooltipSpecForShow } from '../utils/get-spec';\nimport { getShowContent } from '../utils/compose';\nimport { getTooltipPatternValue } from '../utils/get-value';\n\nexport abstract class BaseTooltipProcessor {\n readonly component: Tooltip;\n abstract activeType: TooltipActiveType;\n\n protected _cacheViewSpec: ITooltipSpec | undefined;\n protected _cacheActualTooltip: ITooltipActual | undefined;\n\n constructor(component: Tooltip) {\n this.component = component;\n }\n\n /** 触发对应类型的 tooltip */\n abstract showTooltip(info: TooltipInfo, params: BaseEventParams, changePositionOnly: boolean): TooltipResult;\n\n /** 判断是否应该触发 tooltip */\n abstract shouldHandleTooltip(params: BaseEventParams, mouseEventData: Partial<MouseEventData>): boolean;\n\n /** 获取触发 tooltip 需要的信息 */\n abstract getMouseEventData(params: BaseEventParams, dimensionInfo?: DimensionTooltipInfo): MouseEventData;\n\n protected _showTooltipByHandler = (data: TooltipData | undefined, params: TooltipHandlerParams): TooltipResult => {\n if (isNil(data)) {\n return TooltipResult.failed;\n }\n\n if (!params.changePositionOnly) {\n this.clearCache();\n }\n\n // 更新 this._cacheViewSpec\n this._updateViewSpec(params);\n const spec = this._cacheViewSpec;\n if (isNil(spec?.[this.activeType]) || spec.visible === false) {\n return TooltipResult.failed;\n }\n params.tooltipSpec = spec;\n\n // 更新 this._cacheActualTooltip\n this._updateActualTooltip(data, params);\n params.tooltipActual = this._cacheActualTooltip;\n\n // 触发事件\n this.component.event.emit(ChartEvent.tooltipShow, {\n ...params,\n tooltipData: data,\n activeType: this.activeType,\n tooltip: this.component\n } as TooltipEventParams);\n\n // 判断 tooltip 是否为空\n const { title, content } = this._cacheActualTooltip;\n if (isNil(title?.key) && isNil(title?.value) && !content?.length) {\n return TooltipResult.failed;\n }\n\n // 显示 tooltip\n let showTooltip;\n if (spec.handler?.showTooltip) {\n showTooltip = spec.handler.showTooltip.bind(spec.handler);\n } else if (this.component.tooltipHandler?.showTooltip) {\n showTooltip = this.component.tooltipHandler.showTooltip.bind(this.component.tooltipHandler);\n }\n if (showTooltip) {\n return showTooltip(this.activeType, data, params) ?? TooltipResult.success;\n }\n return TooltipResult.failed;\n };\n\n protected _preprocessDimensionInfo(dimensionInfo?: IDimensionInfo[]): IDimensionInfo[] | undefined {\n const newDimensionInfo: IDimensionInfo[] = [];\n dimensionInfo?.forEach(info => {\n const di: IDimensionInfo = {\n ...info,\n data: info.data.filter(\n ({ series }: any) => series.getSpec()?.tooltip?.visible !== false // 过滤掉不需要显示的维度数据\n )\n };\n if (di.data.length > 0) {\n newDimensionInfo.push(di);\n }\n });\n if (newDimensionInfo.length > 0) {\n return newDimensionInfo;\n }\n return undefined;\n }\n\n protected _getDimensionInfo(params: BaseEventParams): IDimensionInfo[] {\n let targetDimensionInfo: IDimensionInfo[] | undefined;\n // 处理dimension info\n const chart = this.component.getChart();\n\n // compute layer offset\n const layer = chart.getCompiler().getStage().getLayer(undefined);\n const point = { x: params.event.viewX, y: params.event.viewY };\n layer.globalTransMatrix.transformPoint({ x: params.event.viewX, y: params.event.viewY }, point);\n\n targetDimensionInfo = [\n ...(getCartesianDimensionInfo(chart, point, true) ?? []),\n ...(getPolarDimensionInfo(chart, point) ?? [])\n ];\n if (targetDimensionInfo.length === 0) {\n targetDimensionInfo = undefined;\n } else if (targetDimensionInfo.length > 1) {\n // 只保留一个轴的dimension info\n const dimensionAxisInfo = targetDimensionInfo.filter(info => {\n const axis = info.axis;\n if (axis.getSpec().hasDimensionTooltip) {\n return true;\n }\n\n // 优先显示离散轴 tooltip\n if (!isDiscrete(axis.getScale().type)) {\n return false;\n }\n // 下面的逻辑用来判断当前的离散轴是不是维度轴\n let firstSeries: ICartesianSeries | undefined;\n for (const region of axis?.getRegions() ?? []) {\n for (const series of region.getSeries()) {\n if (series.coordinate === 'cartesian') {\n firstSeries = series as ICartesianSeries;\n break;\n }\n }\n if (isValid(firstSeries)) {\n break;\n }\n }\n if (isValid(firstSeries) && firstSeries.getDimensionField()[0] === firstSeries.fieldY[0]) {\n // 维度轴为Y轴时,选择只显示Y轴tooltip\n return axis.getOrient() === 'left' || axis.getOrient() === 'right';\n }\n // 维度轴为X轴时,选择只显示X轴tooltip\n return axis.getOrient() === 'bottom' || axis.getOrient() === 'top';\n });\n targetDimensionInfo = dimensionAxisInfo.length ? dimensionAxisInfo : targetDimensionInfo.slice(0, 1);\n\n // datum 去重,保证每个系列的每个数据项只对应于一行 tooltip 内容项\n if (targetDimensionInfo.length > 1) {\n const dimensionDataKeySet = new Set<string>();\n targetDimensionInfo.forEach(info => {\n info.data = info.data.filter(({ key }: IDimensionData) => {\n if (dimensionDataKeySet.has(key)) {\n return false;\n }\n dimensionDataKeySet.add(key);\n return true;\n });\n });\n }\n }\n\n return targetDimensionInfo;\n }\n\n /**\n * 合成实际显示的 tooltip spec\n * @param params\n */\n protected _updateViewSpec(params: TooltipHandlerParams) {\n const { changePositionOnly, model, dimensionInfo } = params;\n if (!changePositionOnly || !this._cacheViewSpec) {\n /** spec 预处理 */\n this._cacheViewSpec = getTooltipSpecForShow(\n this.activeType,\n this.component.getSpec(),\n model as ISeries,\n dimensionInfo\n );\n }\n }\n\n /**\n * 合成 tooltip 内容\n * @param data\n * @param params\n * @param changePositionOnly\n */\n protected _updateActualTooltip(data: TooltipData, params: TooltipHandlerParams) {\n const pattern = this._cacheViewSpec[this.activeType] as ITooltipPattern;\n const { changePositionOnly } = params;\n\n if (!changePositionOnly || !this._cacheActualTooltip) {\n // 合成 tooltip 内容\n const tooltipContent = getShowContent(pattern, data, params);\n\n // 判断可见性\n const visible = isValid(tooltipContent) ? getTooltipPatternValue(pattern.visible, data, params) !== false : false; // 最终展示数据为 null 则不展示\n\n this._cacheActualTooltip = {\n ...tooltipContent,\n visible,\n activeType: pattern.activeType,\n data\n };\n\n const { title, content } = this._cacheActualTooltip;\n this._cacheActualTooltip.title = pattern.updateTitle?.(title, data, params) ?? title;\n this._cacheActualTooltip.content = pattern.updateContent?.(content, data, params) ?? content;\n }\n }\n\n clearCache() {\n this._cacheViewSpec = undefined;\n this._cacheActualTooltip = undefined;\n }\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import type { BaseEventParams } from '../../../event/interface';
2
+ import type { TooltipActiveType } from '../../../typings';
3
+ import type { DimensionTooltipInfo, GroupTooltipInfo, MouseEventData } from './interface';
4
+ import { BaseTooltipProcessor } from './base';
5
+ export declare class GroupTooltipProcessor extends BaseTooltipProcessor {
6
+ activeType: TooltipActiveType;
7
+ showTooltip(info: GroupTooltipInfo, params: BaseEventParams, changePositionOnly: boolean): import("../interface").TooltipResult;
8
+ shouldHandleTooltip(params: BaseEventParams, mouseEventData: Partial<MouseEventData>): boolean;
9
+ getMouseEventData(params: BaseEventParams, dimensionInfo?: DimensionTooltipInfo): MouseEventData;
10
+ protected _getGroupDatum(params: BaseEventParams): any;
11
+ }
@@ -0,0 +1,57 @@
1
+ import { BaseTooltipProcessor } from "./base";
2
+
3
+ import { array, isNil } from "@visactor/vutils";
4
+
5
+ export class GroupTooltipProcessor extends BaseTooltipProcessor {
6
+ constructor() {
7
+ super(...arguments), this.activeType = "group";
8
+ }
9
+ showTooltip(info, params, changePositionOnly) {
10
+ const {datum: datum, series: series, dimensionInfo: dimensionInfo} = info, tooltipData = [ {
11
+ datum: array(datum),
12
+ series: series
13
+ } ], newParams = Object.assign(Object.assign({}, params), {
14
+ groupDatum: this._getGroupDatum(params),
15
+ dimensionInfo: this._preprocessDimensionInfo(dimensionInfo),
16
+ changePositionOnly: changePositionOnly,
17
+ tooltip: this.component
18
+ });
19
+ return this._showTooltipByHandler(tooltipData, newParams);
20
+ }
21
+ shouldHandleTooltip(params, mouseEventData) {
22
+ var _a;
23
+ const {tooltipInfo: info} = mouseEventData;
24
+ if (isNil(info)) return !1;
25
+ const helper = null === (_a = params.model) || void 0 === _a ? void 0 : _a.tooltipHelper;
26
+ return !!(null == helper ? void 0 : helper.activeType.includes("group"));
27
+ }
28
+ getMouseEventData(params, dimensionInfo) {
29
+ var _a, _b;
30
+ let info, ignore;
31
+ if ("series" === (null === (_a = params.model) || void 0 === _a ? void 0 : _a.modelType)) {
32
+ const series = params.model, helper = series.tooltipHelper, activeTriggers = null == helper ? void 0 : helper.activeTriggerSet.group, ignoreTriggers = null == helper ? void 0 : helper.ignoreTriggerSet.group;
33
+ if ((null == activeTriggers ? void 0 : activeTriggers.has(params.model)) || (null == activeTriggers ? void 0 : activeTriggers.has(params.mark))) {
34
+ const patternSpec = this.component.getSpec()[this.activeType];
35
+ ((null == patternSpec ? void 0 : patternSpec.triggerMark) ? array(patternSpec.triggerMark) : []).includes(null === (_b = params.mark) || void 0 === _b ? void 0 : _b.name) && (info = {
36
+ mark: params.mark,
37
+ datum: params.datum,
38
+ series: series,
39
+ dimensionInfo: dimensionInfo
40
+ });
41
+ } else ((null == ignoreTriggers ? void 0 : ignoreTriggers.has(params.model)) || (null == ignoreTriggers ? void 0 : ignoreTriggers.has(params.mark))) && (ignore = !0);
42
+ }
43
+ return {
44
+ tooltipInfo: info,
45
+ ignore: ignore
46
+ };
47
+ }
48
+ _getGroupDatum(params) {
49
+ const {model: model, mark: mark, datum: datum} = params, series = model;
50
+ if ([ "line", "area" ].includes(mark.type)) return array(datum);
51
+ const datumList = series.getViewData().latestData, seriesField = series.getSeriesField();
52
+ if (!seriesField) return datumList;
53
+ const seriesFieldValue = array(datum)[0][seriesField];
54
+ return datumList.filter((d => d[seriesField] === seriesFieldValue));
55
+ }
56
+ }
57
+ //# sourceMappingURL=group-tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/component/tooltip/processor/group-tooltip.ts"],"names":[],"mappings":"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","file":"group-tooltip.js","sourcesContent":["import type { BaseEventParams } from '../../../event/interface';\nimport type { Datum, IGroupTooltipPattern, TooltipActiveType } from '../../../typings';\nimport type { ITooltipSpec, TooltipHandlerParams } from '../interface';\nimport type { DimensionTooltipInfo, GroupTooltipInfo, MouseEventData } from './interface';\nimport { BaseTooltipProcessor } from './base';\nimport { array, isNil } from '@visactor/vutils';\nimport type { ISeries } from '../../../series/interface';\n\nexport class GroupTooltipProcessor extends BaseTooltipProcessor {\n activeType: TooltipActiveType = 'group';\n\n /** 触发对应类型的 tooltip */\n showTooltip(info: GroupTooltipInfo, params: BaseEventParams, changePositionOnly: boolean) {\n const { datum, series, dimensionInfo } = info;\n const tooltipData = [{ datum: array(datum), series }];\n const newParams: TooltipHandlerParams = {\n ...(params as any),\n groupDatum: this._getGroupDatum(params),\n dimensionInfo: this._preprocessDimensionInfo(dimensionInfo),\n changePositionOnly,\n tooltip: this.component\n };\n return this._showTooltipByHandler(tooltipData, newParams);\n }\n\n /** 判断是否应该触发 tooltip */\n shouldHandleTooltip(params: BaseEventParams, mouseEventData: Partial<MouseEventData>): boolean {\n const { tooltipInfo: info } = mouseEventData;\n if (isNil(info)) {\n return false;\n }\n\n const helper = (params.model as ISeries)?.tooltipHelper;\n if (!helper?.activeType.includes('group')) {\n return false;\n }\n return true;\n }\n\n /** 获取触发 tooltip 需要的信息 */\n getMouseEventData(params: BaseEventParams, dimensionInfo?: DimensionTooltipInfo): MouseEventData {\n let info: GroupTooltipInfo | undefined;\n let ignore: boolean | undefined;\n\n // 处理mark info\n if (params.model?.modelType === 'series') {\n const series = params.model as ISeries;\n const helper = series.tooltipHelper;\n const activeTriggers = helper?.activeTriggerSet.group;\n const ignoreTriggers = helper?.ignoreTriggerSet.group;\n\n if (activeTriggers?.has(params.model) || activeTriggers?.has(params.mark)) {\n const patternSpec: IGroupTooltipPattern = (this.component.getSpec() as ITooltipSpec)[this.activeType];\n const triggerMark = patternSpec?.triggerMark ? array(patternSpec.triggerMark) : [];\n if (triggerMark.includes(params.mark?.name as any)) {\n info = {\n mark: params.mark,\n datum: params.datum,\n series,\n dimensionInfo\n };\n }\n } else if (ignoreTriggers?.has(params.model) || ignoreTriggers?.has(params.mark)) {\n ignore = true;\n }\n }\n\n return {\n tooltipInfo: info,\n ignore\n };\n }\n\n protected _getGroupDatum(params: BaseEventParams) {\n const { model, mark, datum } = params;\n const series = model as ISeries;\n if (['line', 'area'].includes(mark.type)) {\n return array(datum);\n }\n\n const datumList = series.getViewData().latestData;\n const seriesField = series.getSeriesField();\n if (!seriesField) {\n return datumList;\n }\n\n const seriesFieldValue = array(datum)[0][seriesField];\n return datumList.filter((d: Datum) => d[seriesField] === seriesFieldValue);\n }\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  export * from './base';
2
2
  export * from './dimension-tooltip';
3
3
  export * from './mark-tooltip';
4
+ export * from './group-tooltip';
4
5
  export * from './interface';
5
6
  export * from './util';
@@ -4,6 +4,8 @@ export * from "./dimension-tooltip";
4
4
 
5
5
  export * from "./mark-tooltip";
6
6
 
7
+ export * from "./group-tooltip";
8
+
7
9
  export * from "./interface";
8
10
 
9
11
  export * from "./util";
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/component/tooltip/processor/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC","file":"index.js","sourcesContent":["export * from './base';\nexport * from './dimension-tooltip';\nexport * from './mark-tooltip';\nexport * from './interface';\nexport * from './util';\n"]}
1
+ {"version":3,"sources":["../src/component/tooltip/processor/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC","file":"index.js","sourcesContent":["export * from './base';\nexport * from './dimension-tooltip';\nexport * from './mark-tooltip';\nexport * from './group-tooltip';\nexport * from './interface';\nexport * from './util';\n"]}
@@ -3,13 +3,14 @@ import type { IMark } from '../../../mark/interface';
3
3
  import type { ISeries } from '../../../series/interface';
4
4
  import type { IDimensionInfo } from '../../../event/events/dimension/interface';
5
5
  export type DimensionTooltipInfo = IDimensionInfo[];
6
- export type MarkTooltipInfo = {
7
- datum: Datum;
6
+ export type MarkTooltipInfo<T = Datum> = {
7
+ datum: T;
8
8
  mark: IMark;
9
9
  series: ISeries;
10
10
  dimensionInfo: DimensionTooltipInfo;
11
11
  };
12
- export type TooltipInfo = DimensionTooltipInfo | MarkTooltipInfo;
12
+ export type GroupTooltipInfo = MarkTooltipInfo<Datum | Datum[]>;
13
+ export type TooltipInfo = DimensionTooltipInfo | MarkTooltipInfo | GroupTooltipInfo;
13
14
  export type MouseEventData = {
14
15
  tooltipInfo: TooltipInfo;
15
16
  ignore: boolean;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/component/tooltip/processor/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { Datum } from '@visactor/vgrammar-core';\nimport type { IMark } from '../../../mark/interface';\nimport type { ISeries } from '../../../series/interface';\nimport type { IDimensionInfo } from '../../../event/events/dimension/interface';\n\nexport type DimensionTooltipInfo = IDimensionInfo[];\n\nexport type MarkTooltipInfo = {\n datum: Datum;\n mark: IMark;\n series: ISeries;\n dimensionInfo: DimensionTooltipInfo;\n};\n\nexport type TooltipInfo = DimensionTooltipInfo | MarkTooltipInfo;\n\nexport type MouseEventData = {\n /** 展示 tooltip 需要的信息 */\n tooltipInfo: TooltipInfo;\n /** 是否忽略该 tooltip */\n ignore: boolean;\n};\n"]}
1
+ {"version":3,"sources":["../src/component/tooltip/processor/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { Datum } from '@visactor/vgrammar-core';\nimport type { IMark } from '../../../mark/interface';\nimport type { ISeries } from '../../../series/interface';\nimport type { IDimensionInfo } from '../../../event/events/dimension/interface';\n\nexport type DimensionTooltipInfo = IDimensionInfo[];\n\nexport type MarkTooltipInfo<T = Datum> = {\n datum: T;\n mark: IMark;\n series: ISeries;\n dimensionInfo: DimensionTooltipInfo;\n};\n\nexport type GroupTooltipInfo = MarkTooltipInfo<Datum | Datum[]>;\n\nexport type TooltipInfo = DimensionTooltipInfo | MarkTooltipInfo | GroupTooltipInfo;\n\nexport type MouseEventData = {\n /** 展示 tooltip 需要的信息 */\n tooltipInfo: TooltipInfo;\n /** 是否忽略该 tooltip */\n ignore: boolean;\n};\n"]}
@@ -1,10 +1,10 @@
1
1
  import type { BaseEventParams } from '../../../event/interface';
2
2
  import type { TooltipActiveType } from '../../../typings';
3
- import type { MarkTooltipInfo, MouseEventData } from './interface';
3
+ import type { DimensionTooltipInfo, MarkTooltipInfo, MouseEventData } from './interface';
4
4
  import { BaseTooltipProcessor } from './base';
5
5
  export declare class MarkTooltipProcessor extends BaseTooltipProcessor {
6
6
  activeType: TooltipActiveType;
7
7
  showTooltip(info: MarkTooltipInfo, params: BaseEventParams, changePositionOnly: boolean): import("../interface").TooltipResult;
8
8
  shouldHandleTooltip(params: BaseEventParams, mouseEventData: Partial<MouseEventData>): boolean;
9
- getMouseEventData(params: BaseEventParams): MouseEventData;
9
+ getMouseEventData(params: BaseEventParams, dimensionInfo?: DimensionTooltipInfo): MouseEventData;
10
10
  }
@@ -24,7 +24,7 @@ export class MarkTooltipProcessor extends BaseTooltipProcessor {
24
24
  const helper = null === (_a = params.model) || void 0 === _a ? void 0 : _a.tooltipHelper;
25
25
  return !!(null == helper ? void 0 : helper.activeType.includes("mark"));
26
26
  }
27
- getMouseEventData(params) {
27
+ getMouseEventData(params, dimensionInfo) {
28
28
  var _a;
29
29
  let info, ignore;
30
30
  if ("series" === (null === (_a = params.model) || void 0 === _a ? void 0 : _a.modelType)) {
@@ -33,7 +33,7 @@ export class MarkTooltipProcessor extends BaseTooltipProcessor {
33
33
  mark: params.mark,
34
34
  datum: params.datum,
35
35
  series: series,
36
- dimensionInfo: this._getDimensionInfo(params)
36
+ dimensionInfo: dimensionInfo
37
37
  } : ((null == ignoreTriggers ? void 0 : ignoreTriggers.has(params.model)) || (null == ignoreTriggers ? void 0 : ignoreTriggers.has(params.mark))) && (ignore = !0);
38
38
  }
39
39
  return {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/component/tooltip/processor/mark-tooltip.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGzC,MAAM,OAAO,oBAAqB,SAAQ,oBAAoB;IAA9D;;QACE,eAAU,GAAsB,MAAM,CAAC;IAyDzC,CAAC;IAtDC,WAAW,CAAC,IAAqB,EAAE,MAAuB,EAAE,kBAA2B;QACrF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;QAC9C,MAAM,WAAW,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,MAAM,SAAS,mCACT,MAAc,KAClB,aAAa,EAAE,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,EAC3D,kBAAkB,EAClB,OAAO,EAAE,IAAI,CAAC,SAAS,GACxB,CAAC;QACF,OAAO,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC5D,CAAC;IAGD,mBAAmB,CAAC,MAAuB,EAAE,cAAuC;;QAClF,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC;QAC7C,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;YACf,OAAO,KAAK,CAAC;SACd;QAED,MAAM,MAAM,GAAG,MAAC,MAAM,CAAC,KAAiB,0CAAE,aAAa,CAAC;QACxD,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA,EAAE;YACxC,OAAO,KAAK,CAAC;SACd;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,iBAAiB,CAAC,MAAuB;;QACvC,IAAI,IAAiC,CAAC;QACtC,IAAI,MAA2B,CAAC;QAGhC,IAAI,CAAA,MAAA,MAAM,CAAC,KAAK,0CAAE,SAAS,MAAK,QAAQ,EAAE;YACxC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAgB,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;YACpC,MAAM,cAAc,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,gBAAgB,CAAC,IAAI,CAAC;YACrD,MAAM,cAAc,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,gBAAgB,CAAC,IAAI,CAAC;YACrD,IAAI,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAI,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,EAAE;gBACzE,IAAI,GAAG;oBACL,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,MAAM;oBACN,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;iBAC9C,CAAC;aACH;iBAAM,IAAI,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAI,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,EAAE;gBAChF,MAAM,GAAG,IAAI,CAAC;aACf;SACF;QAED,OAAO;YACL,WAAW,EAAE,IAAI;YACjB,MAAM;SACP,CAAC;IACJ,CAAC;CACF","file":"mark-tooltip.js","sourcesContent":["import type { BaseEventParams } from '../../../event/interface';\nimport type { TooltipActiveType } from '../../../typings';\nimport type { TooltipHandlerParams } from '../interface';\nimport type { MarkTooltipInfo, MouseEventData } from './interface';\nimport { BaseTooltipProcessor } from './base';\nimport { isNil } from '@visactor/vutils';\nimport type { ISeries } from '../../../series/interface';\n\nexport class MarkTooltipProcessor extends BaseTooltipProcessor {\n activeType: TooltipActiveType = 'mark';\n\n /** 触发对应类型的 tooltip */\n showTooltip(info: MarkTooltipInfo, params: BaseEventParams, changePositionOnly: boolean) {\n const { datum, series, dimensionInfo } = info;\n const tooltipData = [{ datum: [datum], series }];\n const newParams: TooltipHandlerParams = {\n ...(params as any),\n dimensionInfo: this._preprocessDimensionInfo(dimensionInfo),\n changePositionOnly,\n tooltip: this.component\n };\n return this._showTooltipByHandler(tooltipData, newParams);\n }\n\n /** 判断是否应该触发 tooltip */\n shouldHandleTooltip(params: BaseEventParams, mouseEventData: Partial<MouseEventData>): boolean {\n const { tooltipInfo: info } = mouseEventData;\n if (isNil(info)) {\n return false;\n }\n\n const helper = (params.model as ISeries)?.tooltipHelper;\n if (!helper?.activeType.includes('mark')) {\n return false;\n }\n return true;\n }\n\n /** 获取触发 tooltip 需要的信息 */\n getMouseEventData(params: BaseEventParams): MouseEventData {\n let info: MarkTooltipInfo | undefined;\n let ignore: boolean | undefined;\n\n // 处理mark info\n if (params.model?.modelType === 'series') {\n const series = params.model as ISeries;\n const helper = series.tooltipHelper;\n const activeTriggers = helper?.activeTriggerSet.mark;\n const ignoreTriggers = helper?.ignoreTriggerSet.mark;\n if (activeTriggers?.has(params.model) || activeTriggers?.has(params.mark)) {\n info = {\n mark: params.mark,\n datum: params.datum,\n series,\n dimensionInfo: this._getDimensionInfo(params)\n };\n } else if (ignoreTriggers?.has(params.model) || ignoreTriggers?.has(params.mark)) {\n ignore = true;\n }\n }\n\n return {\n tooltipInfo: info,\n ignore\n };\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/component/tooltip/processor/mark-tooltip.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGzC,MAAM,OAAO,oBAAqB,SAAQ,oBAAoB;IAA9D;;QACE,eAAU,GAAsB,MAAM,CAAC;IAyDzC,CAAC;IAtDC,WAAW,CAAC,IAAqB,EAAE,MAAuB,EAAE,kBAA2B;QACrF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;QAC9C,MAAM,WAAW,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,MAAM,SAAS,mCACT,MAAc,KAClB,aAAa,EAAE,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,EAC3D,kBAAkB,EAClB,OAAO,EAAE,IAAI,CAAC,SAAS,GACxB,CAAC;QACF,OAAO,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC5D,CAAC;IAGD,mBAAmB,CAAC,MAAuB,EAAE,cAAuC;;QAClF,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC;QAC7C,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;YACf,OAAO,KAAK,CAAC;SACd;QAED,MAAM,MAAM,GAAG,MAAC,MAAM,CAAC,KAAiB,0CAAE,aAAa,CAAC;QACxD,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA,EAAE;YACxC,OAAO,KAAK,CAAC;SACd;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,iBAAiB,CAAC,MAAuB,EAAE,aAAoC;;QAC7E,IAAI,IAAiC,CAAC;QACtC,IAAI,MAA2B,CAAC;QAGhC,IAAI,CAAA,MAAA,MAAM,CAAC,KAAK,0CAAE,SAAS,MAAK,QAAQ,EAAE;YACxC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAgB,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;YACpC,MAAM,cAAc,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,gBAAgB,CAAC,IAAI,CAAC;YACrD,MAAM,cAAc,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,gBAAgB,CAAC,IAAI,CAAC;YACrD,IAAI,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAI,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,EAAE;gBACzE,IAAI,GAAG;oBACL,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,MAAM;oBACN,aAAa;iBACd,CAAC;aACH;iBAAM,IAAI,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAI,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,EAAE;gBAChF,MAAM,GAAG,IAAI,CAAC;aACf;SACF;QAED,OAAO;YACL,WAAW,EAAE,IAAI;YACjB,MAAM;SACP,CAAC;IACJ,CAAC;CACF","file":"mark-tooltip.js","sourcesContent":["import type { BaseEventParams } from '../../../event/interface';\nimport type { TooltipActiveType } from '../../../typings';\nimport type { TooltipHandlerParams } from '../interface';\nimport type { DimensionTooltipInfo, MarkTooltipInfo, MouseEventData } from './interface';\nimport { BaseTooltipProcessor } from './base';\nimport { isNil } from '@visactor/vutils';\nimport type { ISeries } from '../../../series/interface';\n\nexport class MarkTooltipProcessor extends BaseTooltipProcessor {\n activeType: TooltipActiveType = 'mark';\n\n /** 触发对应类型的 tooltip */\n showTooltip(info: MarkTooltipInfo, params: BaseEventParams, changePositionOnly: boolean) {\n const { datum, series, dimensionInfo } = info;\n const tooltipData = [{ datum: [datum], series }];\n const newParams: TooltipHandlerParams = {\n ...(params as any),\n dimensionInfo: this._preprocessDimensionInfo(dimensionInfo),\n changePositionOnly,\n tooltip: this.component\n };\n return this._showTooltipByHandler(tooltipData, newParams);\n }\n\n /** 判断是否应该触发 tooltip */\n shouldHandleTooltip(params: BaseEventParams, mouseEventData: Partial<MouseEventData>): boolean {\n const { tooltipInfo: info } = mouseEventData;\n if (isNil(info)) {\n return false;\n }\n\n const helper = (params.model as ISeries)?.tooltipHelper;\n if (!helper?.activeType.includes('mark')) {\n return false;\n }\n return true;\n }\n\n /** 获取触发 tooltip 需要的信息 */\n getMouseEventData(params: BaseEventParams, dimensionInfo?: DimensionTooltipInfo): MouseEventData {\n let info: MarkTooltipInfo | undefined;\n let ignore: boolean | undefined;\n\n // 处理mark info\n if (params.model?.modelType === 'series') {\n const series = params.model as ISeries;\n const helper = series.tooltipHelper;\n const activeTriggers = helper?.activeTriggerSet.mark;\n const ignoreTriggers = helper?.ignoreTriggerSet.mark;\n if (activeTriggers?.has(params.model) || activeTriggers?.has(params.mark)) {\n info = {\n mark: params.mark,\n datum: params.datum,\n series,\n dimensionInfo\n };\n } else if (ignoreTriggers?.has(params.model) || ignoreTriggers?.has(params.mark)) {\n ignore = true;\n }\n }\n\n return {\n tooltipInfo: info,\n ignore\n };\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
1
  import type { Maybe } from '@visactor/vutils';
2
2
  import type { DimensionTooltipInfo, MarkTooltipInfo, TooltipInfo } from './interface';
3
- export declare const isMarkInfo: (info: Maybe<TooltipInfo>) => info is MarkTooltipInfo;
3
+ export declare const isMarkInfo: (info: Maybe<TooltipInfo>) => info is MarkTooltipInfo<any>;
4
4
  export declare const isDimensionInfo: (info: Maybe<TooltipInfo>) => info is DimensionTooltipInfo;
@@ -7,8 +7,7 @@ import type { ITooltipHandler, ITooltipLineActual, TooltipActiveType } from '../
7
7
  import type { Datum, IShowTooltipOption } from '../../typings';
8
8
  import type { ITooltip, ITooltipActiveTypeAsKeys, ITooltipSpec, TooltipHandlerParams, TotalMouseEventData } from './interface';
9
9
  import { TooltipResult } from './interface/common';
10
- import { DimensionTooltipProcessor } from './processor/dimension-tooltip';
11
- import { MarkTooltipProcessor } from './processor/mark-tooltip';
10
+ import { GroupTooltipProcessor, DimensionTooltipProcessor, MarkTooltipProcessor } from './processor';
12
11
  import type { Maybe } from '@visactor/vutils';
13
12
  import type { IGraphic } from '@visactor/vrender-core';
14
13
  import { TooltipSpecTransformer } from './tooltip-transformer';
@@ -32,8 +31,9 @@ export declare class Tooltip extends BaseComponent<any> implements ITooltip {
32
31
  private _alwaysShow;
33
32
  private _cacheInfo;
34
33
  private _cacheParams;
34
+ private _cacheActiveType;
35
35
  private _eventList;
36
- protected _processor: ITooltipActiveTypeAsKeys<MarkTooltipProcessor, DimensionTooltipProcessor>;
36
+ protected _processor: ITooltipActiveTypeAsKeys<MarkTooltipProcessor, DimensionTooltipProcessor, GroupTooltipProcessor>;
37
37
  protected _isTooltipShown: boolean;
38
38
  protected _clickLock: boolean;
39
39
  isTooltipShown(): boolean;
@@ -12,12 +12,10 @@ import { isSameDimensionInfo } from "../../event/events/dimension/util/common";
12
12
 
13
13
  import { ChartEvent, Event_Source_Type } from "../../constant";
14
14
 
15
- import { DimensionTooltipProcessor } from "./processor/dimension-tooltip";
15
+ import { GroupTooltipProcessor, DimensionTooltipProcessor, MarkTooltipProcessor } from "./processor";
16
16
 
17
17
  import { isDimensionInfo, isMarkInfo } from "./processor/util";
18
18
 
19
- import { MarkTooltipProcessor } from "./processor/mark-tooltip";
20
-
21
19
  import { hasParentElement, isArray, isValid, isNil, array } from "@visactor/vutils";
22
20
 
23
21
  import { VChart } from "../../core/vchart";
@@ -52,18 +50,22 @@ export class Tooltip extends BaseComponent {
52
50
  }, this._handleChartMouseOut = params => {
53
51
  this._alwaysShow || "none" !== this._spec.triggerOff && (this._hideTooltipByHandler(Object.assign(Object.assign({}, params), {
54
52
  tooltip: this
55
- })), this._cacheInfo = void 0, this._cacheParams = void 0);
53
+ })), this._cacheInfo = void 0, this._cacheParams = void 0, this._cacheActiveType = void 0);
56
54
  }, this._getMouseMoveHandler = isClick => params => {
57
55
  if (this.tooltipHandler || this._initHandler(), this._processor || this._initProcessor(),
58
56
  this._alwaysShow) return;
59
57
  if (this._isPointerOnTooltip(params)) return;
60
58
  if (!isClick && this._clickLock) return;
61
- const mouseEventData = this._getMouseEventData(params), {tooltipInfo: {dimension: dimensionInfo}, ignore: {mark: ignoreMark, dimension: ignoreDimension}} = mouseEventData;
62
- let markTooltipSuccess = !1, dimensionTooltipSuccess = !1;
63
- markTooltipSuccess = this._showTooltipByMouseEvent("mark", mouseEventData, params, isClick),
64
- markTooltipSuccess || (dimensionTooltipSuccess = this._showTooltipByMouseEvent("dimension", mouseEventData, params, isClick)),
65
- markTooltipSuccess || dimensionTooltipSuccess || isEmptyPos(params) || (ignoreMark && isMarkInfo(this._cacheInfo) ? markTooltipSuccess = this._showTooltipByMouseEvent("mark", mouseEventData, params, isClick, !0) : ignoreDimension && isDimensionInfo(this._cacheInfo) ? dimensionTooltipSuccess = this._showTooltipByMouseEvent("dimension", mouseEventData, params, isClick, !0) : isValid(dimensionInfo) && (dimensionTooltipSuccess = this._showTooltipByMouseEvent("dimension", mouseEventData, params, isClick))),
66
- markTooltipSuccess || dimensionTooltipSuccess && !isNil(dimensionInfo) || (this._handleChartMouseOut(params),
59
+ const mouseEventData = this._getMouseEventData(params), {tooltipInfo: {dimension: dimensionInfo}, ignore: {mark: ignoreMark, dimension: ignoreDimension}} = mouseEventData, success = {
60
+ mark: !1,
61
+ dimension: !1,
62
+ group: !1
63
+ };
64
+ success.group = this._showTooltipByMouseEvent("group", mouseEventData, params, isClick),
65
+ success.group || (success.mark = this._showTooltipByMouseEvent("mark", mouseEventData, params, isClick)),
66
+ success.mark || success.group || (success.dimension = this._showTooltipByMouseEvent("dimension", mouseEventData, params, isClick)),
67
+ Object.values(success).every((val => !val)) && !isEmptyPos(params) && (ignoreMark && isMarkInfo(this._cacheInfo) ? success.mark = this._showTooltipByMouseEvent("mark", mouseEventData, params, isClick, !0) : ignoreDimension && isDimensionInfo(this._cacheInfo) ? success.dimension = this._showTooltipByMouseEvent("dimension", mouseEventData, params, isClick, !0) : isValid(dimensionInfo) && (success.dimension = this._showTooltipByMouseEvent("dimension", mouseEventData, params, isClick))),
68
+ success.mark || success.group || success.dimension && !isNil(dimensionInfo) || (this._handleChartMouseOut(params),
67
69
  isClick && this._clickLock && (this._clickLock = !1));
68
70
  }, this._showTooltipByMouseEvent = (activeType, mouseEventData, params, isClick, useCache) => {
69
71
  var _a;
@@ -74,9 +76,9 @@ export class Tooltip extends BaseComponent {
74
76
  })) return !1;
75
77
  let success;
76
78
  if (useCache) success = !processor.showTooltip(this._cacheInfo, params, !0); else {
77
- const tooltipInfo = mouseEventData.tooltipInfo[activeType], isSameAsCache = this._isSameAsCache(tooltipInfo, params);
79
+ const tooltipInfo = mouseEventData.tooltipInfo[activeType], isSameAsCache = this._isSameAsCache(tooltipInfo, params, activeType);
78
80
  success = !processor.showTooltip(tooltipInfo, params, isSameAsCache), success && (this._cacheInfo = tooltipInfo,
79
- this._cacheParams = params);
81
+ this._cacheParams = params, this._cacheActiveType = activeType);
80
82
  }
81
83
  success && (this._isTooltipShown = !0, isClick && this._spec.lockAfterClick && !this._clickLock && (this._clickLock = !0));
82
84
  const vchart = null === (_a = this._option) || void 0 === _a ? void 0 : _a.globalInstance;
@@ -87,18 +89,27 @@ export class Tooltip extends BaseComponent {
87
89
  tooltipInfo: {},
88
90
  ignore: {}
89
91
  };
90
- return Object.keys(this._processor).forEach((activeType => {
91
- const {tooltipInfo: tooltipInfo, ignore: ignore} = this._processor[activeType].getMouseEventData(params);
92
+ let activeType = "dimension";
93
+ const {tooltipInfo: tooltipInfo, ignore: ignore} = this._processor[activeType].getMouseEventData(params);
94
+ result.tooltipInfo[activeType] = tooltipInfo, result.ignore[activeType] = ignore;
95
+ const dimensionInfo = tooltipInfo;
96
+ for (activeType of Object.keys(this._processor)) if ("dimension" !== activeType) {
97
+ const {tooltipInfo: tooltipInfo, ignore: ignore} = this._processor[activeType].getMouseEventData(params, dimensionInfo);
92
98
  result.tooltipInfo[activeType] = tooltipInfo, result.ignore[activeType] = ignore;
93
- })), result;
99
+ }
100
+ return result;
94
101
  }, this._hideTooltipByHandler = params => {
95
- var _a, _b, _c;
102
+ var _a, _b, _c, _d;
96
103
  if (!this._isTooltipShown && !(null === (_b = null === (_a = this.tooltipHandler) || void 0 === _a ? void 0 : _a.isTooltipShown) || void 0 === _b ? void 0 : _b.call(_a))) return 0;
104
+ let hideTooltip;
97
105
  if (this.event.emit(ChartEvent.tooltipHide, Object.assign(Object.assign({}, params), {
98
106
  source: Event_Source_Type.chart,
99
107
  tooltip: this
100
- })), null === (_c = this.tooltipHandler) || void 0 === _c ? void 0 : _c.hideTooltip) {
101
- const result = this.tooltipHandler.hideTooltip(params);
108
+ })), Object.values(this._processor).forEach((processor => {
109
+ processor.clearCache();
110
+ })), (null === (_c = this._spec.handler) || void 0 === _c ? void 0 : _c.hideTooltip) ? hideTooltip = this._spec.handler.hideTooltip.bind(this._spec.handler) : (null === (_d = this.tooltipHandler) || void 0 === _d ? void 0 : _d.hideTooltip) && (hideTooltip = this.tooltipHandler.hideTooltip.bind(this.tooltipHandler)),
111
+ hideTooltip) {
112
+ const result = hideTooltip(params);
102
113
  return result || (this._isTooltipShown = !1), result;
103
114
  }
104
115
  return 1;
@@ -166,7 +177,8 @@ export class Tooltip extends BaseComponent {
166
177
  _initProcessor() {
167
178
  this._processor = {
168
179
  mark: new MarkTooltipProcessor(this),
169
- dimension: new DimensionTooltipProcessor(this)
180
+ dimension: new DimensionTooltipProcessor(this),
181
+ group: new GroupTooltipProcessor(this)
170
182
  };
171
183
  }
172
184
  _initEvent() {
@@ -209,7 +221,8 @@ export class Tooltip extends BaseComponent {
209
221
  };
210
222
  return this._alwaysShow = !1, !this._hideTooltipByHandler(params);
211
223
  }
212
- _isSameAsCache(nextInfo, nextParams) {
224
+ _isSameAsCache(nextInfo, nextParams, nextActiveType) {
225
+ if (nextActiveType !== this._cacheActiveType) return !1;
213
226
  if (nextInfo === this._cacheInfo) return !0;
214
227
  if (isNil(this._cacheInfo) || isNil(nextInfo)) return !1;
215
228
  if (isDimensionInfo(nextInfo)) {