@elastic/charts 50.1.0 → 51.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/dist/chart_types/flame_chart/flame_api.d.ts +5 -4
  2. package/dist/chart_types/flame_chart/flame_api.d.ts.map +1 -1
  3. package/dist/chart_types/flame_chart/flame_api.js.map +1 -1
  4. package/dist/chart_types/flame_chart/flame_chart.js +175 -59
  5. package/dist/chart_types/flame_chart/flame_chart.js.map +1 -1
  6. package/dist/chart_types/flame_chart/internal_chart_state.js +1 -1
  7. package/dist/chart_types/flame_chart/internal_chart_state.js.map +1 -1
  8. package/dist/chart_types/flame_chart/render/draw_a_frame.js +4 -4
  9. package/dist/chart_types/flame_chart/render/draw_a_frame.js.map +1 -1
  10. package/dist/chart_types/flame_chart/render/draw_webgl.js +2 -2
  11. package/dist/chart_types/flame_chart/render/draw_webgl.js.map +1 -1
  12. package/dist/chart_types/flame_chart/shaders.js +2 -2
  13. package/dist/chart_types/flame_chart/shaders.js.map +1 -1
  14. package/dist/chart_types/goal_chart/specs/index.d.ts +1 -1
  15. package/dist/chart_types/goal_chart/state/chart_state.js +8 -2
  16. package/dist/chart_types/goal_chart/state/chart_state.js.map +1 -1
  17. package/dist/chart_types/goal_chart/state/selectors/picked_shapes.js +2 -4
  18. package/dist/chart_types/goal_chart/state/selectors/picked_shapes.js.map +1 -1
  19. package/dist/chart_types/heatmap/specs/heatmap.d.ts +2 -2
  20. package/dist/chart_types/heatmap/state/chart_state.js +1 -1
  21. package/dist/chart_types/heatmap/state/chart_state.js.map +1 -1
  22. package/dist/chart_types/heatmap/state/selectors/get_brush_area.js +2 -2
  23. package/dist/chart_types/heatmap/state/selectors/get_brush_area.js.map +1 -1
  24. package/dist/chart_types/heatmap/state/selectors/get_brushed_highlighted_shapes.js +3 -2
  25. package/dist/chart_types/heatmap/state/selectors/get_brushed_highlighted_shapes.js.map +1 -1
  26. package/dist/chart_types/heatmap/state/selectors/get_cursor_band.js +5 -6
  27. package/dist/chart_types/heatmap/state/selectors/get_cursor_band.js.map +1 -1
  28. package/dist/chart_types/heatmap/state/selectors/get_cursor_pointer.js +10 -2
  29. package/dist/chart_types/heatmap/state/selectors/get_cursor_pointer.js.map +1 -1
  30. package/dist/chart_types/heatmap/state/selectors/get_tooltip_anchor.js +2 -4
  31. package/dist/chart_types/heatmap/state/selectors/get_tooltip_anchor.js.map +1 -1
  32. package/dist/chart_types/heatmap/state/selectors/is_tooltip_visible.js +20 -4
  33. package/dist/chart_types/heatmap/state/selectors/is_tooltip_visible.js.map +1 -1
  34. package/dist/chart_types/heatmap/state/selectors/on_pointer_update_caller.js +2 -1
  35. package/dist/chart_types/heatmap/state/selectors/on_pointer_update_caller.js.map +1 -1
  36. package/dist/chart_types/heatmap/state/selectors/picked_shapes.js +4 -7
  37. package/dist/chart_types/heatmap/state/selectors/picked_shapes.js.map +1 -1
  38. package/dist/chart_types/heatmap/state/selectors/tooltip.js +5 -0
  39. package/dist/chart_types/heatmap/state/selectors/tooltip.js.map +1 -1
  40. package/dist/chart_types/metric/state/chart_state.js +6 -1
  41. package/dist/chart_types/metric/state/chart_state.js.map +1 -1
  42. package/dist/chart_types/partition_chart/specs/index.d.ts +2 -2
  43. package/dist/chart_types/partition_chart/state/chart_state.js +4 -1
  44. package/dist/chart_types/partition_chart/state/chart_state.js.map +1 -1
  45. package/dist/chart_types/partition_chart/state/selectors/get_cursor_pointer.js +4 -1
  46. package/dist/chart_types/partition_chart/state/selectors/get_cursor_pointer.js.map +1 -1
  47. package/dist/chart_types/partition_chart/state/selectors/picked_shapes.js +2 -4
  48. package/dist/chart_types/partition_chart/state/selectors/picked_shapes.js.map +1 -1
  49. package/dist/chart_types/timeslip/internal_chart_state.js +6 -1
  50. package/dist/chart_types/timeslip/internal_chart_state.js.map +1 -1
  51. package/dist/chart_types/timeslip/timeslip/data.js.map +1 -1
  52. package/dist/chart_types/wordcloud/state/chart_state.js +6 -1
  53. package/dist/chart_types/wordcloud/state/chart_state.js.map +1 -1
  54. package/dist/chart_types/xy_chart/renderer/canvas/animations/animation.d.ts.map +1 -1
  55. package/dist/chart_types/xy_chart/renderer/canvas/animations/animation.js.map +1 -1
  56. package/dist/chart_types/xy_chart/renderer/dom/annotations/annotation_tooltip.js +1 -1
  57. package/dist/chart_types/xy_chart/renderer/dom/annotations/annotation_tooltip.js.map +1 -1
  58. package/dist/chart_types/xy_chart/renderer/dom/cursor_band.js +13 -4
  59. package/dist/chart_types/xy_chart/renderer/dom/cursor_band.js.map +1 -1
  60. package/dist/chart_types/xy_chart/renderer/dom/cursor_line.js +13 -4
  61. package/dist/chart_types/xy_chart/renderer/dom/cursor_line.js.map +1 -1
  62. package/dist/chart_types/xy_chart/renderer/dom/highlighter.js +5 -1
  63. package/dist/chart_types/xy_chart/renderer/dom/highlighter.js.map +1 -1
  64. package/dist/chart_types/xy_chart/specs/axis.d.ts +1 -1
  65. package/dist/chart_types/xy_chart/state/chart_state.js +2 -2
  66. package/dist/chart_types/xy_chart/state/chart_state.js.map +1 -1
  67. package/dist/chart_types/xy_chart/state/selectors/get_cursor_pointer.js +9 -1
  68. package/dist/chart_types/xy_chart/state/selectors/get_cursor_pointer.js.map +1 -1
  69. package/dist/chart_types/xy_chart/state/selectors/get_legend_item_extra_values.d.ts +2 -0
  70. package/dist/chart_types/xy_chart/state/selectors/get_legend_item_extra_values.d.ts.map +1 -0
  71. package/dist/chart_types/xy_chart/state/selectors/get_legend_item_extra_values.js +11 -0
  72. package/dist/chart_types/xy_chart/state/selectors/get_legend_item_extra_values.js.map +1 -0
  73. package/dist/chart_types/xy_chart/state/selectors/get_projected_pointer_position.js +2 -2
  74. package/dist/chart_types/xy_chart/state/selectors/get_projected_pointer_position.js.map +1 -1
  75. package/dist/chart_types/xy_chart/state/selectors/get_tooltip_values_highlighted_geoms.js +26 -7
  76. package/dist/chart_types/xy_chart/state/selectors/get_tooltip_values_highlighted_geoms.js.map +1 -1
  77. package/dist/chart_types/xy_chart/state/selectors/is_tooltip_visible.js +18 -9
  78. package/dist/chart_types/xy_chart/state/selectors/is_tooltip_visible.js.map +1 -1
  79. package/dist/chart_types/xy_chart/state/selectors/on_element_out_caller.js +1 -1
  80. package/dist/chart_types/xy_chart/state/selectors/on_element_out_caller.js.map +1 -1
  81. package/dist/chart_types/xy_chart/state/selectors/on_element_over_caller.js +1 -1
  82. package/dist/chart_types/xy_chart/state/selectors/on_element_over_caller.js.map +1 -1
  83. package/dist/chart_types/xy_chart/tooltip/tooltip.js +3 -3
  84. package/dist/chart_types/xy_chart/tooltip/tooltip.js.map +1 -1
  85. package/dist/common/constants.js +3 -2
  86. package/dist/common/constants.js.map +1 -1
  87. package/dist/common/hooks/use_render_skip.d.ts +2 -0
  88. package/dist/common/hooks/use_render_skip.d.ts.map +1 -0
  89. package/dist/common/hooks/use_render_skip.js +32 -0
  90. package/dist/common/hooks/use_render_skip.js.map +1 -0
  91. package/dist/components/chart_container.js +53 -16
  92. package/dist/components/chart_container.js.map +1 -1
  93. package/dist/components/legend/label.js.map +1 -1
  94. package/dist/components/legend/legend.js +4 -1
  95. package/dist/components/legend/legend.js.map +1 -1
  96. package/dist/components/portal/tooltip_portal.js +14 -1
  97. package/dist/components/portal/tooltip_portal.js.map +1 -1
  98. package/dist/components/tooltip/components/tooltip_actions.d.ts +2 -0
  99. package/dist/components/tooltip/components/tooltip_actions.d.ts.map +1 -0
  100. package/dist/components/tooltip/components/tooltip_actions.js +155 -0
  101. package/dist/components/tooltip/components/tooltip_actions.js.map +1 -0
  102. package/dist/components/tooltip/components/tooltip_body.js +49 -8
  103. package/dist/components/tooltip/components/tooltip_body.js.map +1 -1
  104. package/dist/components/tooltip/components/tooltip_divider.js +1 -1
  105. package/dist/components/tooltip/components/tooltip_divider.js.map +1 -1
  106. package/dist/components/tooltip/components/tooltip_footer.js +1 -1
  107. package/dist/components/tooltip/components/tooltip_footer.js.map +1 -1
  108. package/dist/components/tooltip/components/tooltip_header.d.ts.map +1 -1
  109. package/dist/components/tooltip/components/tooltip_header.js +7 -2
  110. package/dist/components/tooltip/components/tooltip_header.js.map +1 -1
  111. package/dist/components/tooltip/components/tooltip_prompt.d.ts +2 -0
  112. package/dist/components/tooltip/components/tooltip_prompt.d.ts.map +1 -0
  113. package/dist/components/tooltip/components/tooltip_prompt.js +16 -0
  114. package/dist/components/tooltip/components/tooltip_prompt.js.map +1 -0
  115. package/dist/components/tooltip/components/tooltip_provider.js +22 -2
  116. package/dist/components/tooltip/components/tooltip_provider.js.map +1 -1
  117. package/dist/components/tooltip/components/tooltip_table.d.ts +11 -3
  118. package/dist/components/tooltip/components/tooltip_table.d.ts.map +1 -1
  119. package/dist/components/tooltip/components/tooltip_table.js +47 -9
  120. package/dist/components/tooltip/components/tooltip_table.js.map +1 -1
  121. package/dist/components/tooltip/components/tooltip_table_body.d.ts +4 -1
  122. package/dist/components/tooltip/components/tooltip_table_body.d.ts.map +1 -1
  123. package/dist/components/tooltip/components/tooltip_table_body.js +35 -8
  124. package/dist/components/tooltip/components/tooltip_table_body.js.map +1 -1
  125. package/dist/components/tooltip/components/tooltip_table_cell.d.ts +3 -1
  126. package/dist/components/tooltip/components/tooltip_table_cell.d.ts.map +1 -1
  127. package/dist/components/tooltip/components/tooltip_table_cell.js +7 -6
  128. package/dist/components/tooltip/components/tooltip_table_cell.js.map +1 -1
  129. package/dist/components/tooltip/components/tooltip_table_color_cell.d.ts +3 -2
  130. package/dist/components/tooltip/components/tooltip_table_color_cell.d.ts.map +1 -1
  131. package/dist/components/tooltip/components/tooltip_table_color_cell.js +25 -7
  132. package/dist/components/tooltip/components/tooltip_table_color_cell.js.map +1 -1
  133. package/dist/components/tooltip/components/tooltip_table_footer.d.ts +2 -3
  134. package/dist/components/tooltip/components/tooltip_table_footer.d.ts.map +1 -1
  135. package/dist/components/tooltip/components/tooltip_table_footer.js +4 -4
  136. package/dist/components/tooltip/components/tooltip_table_footer.js.map +1 -1
  137. package/dist/components/tooltip/components/tooltip_table_header.d.ts +2 -3
  138. package/dist/components/tooltip/components/tooltip_table_header.d.ts.map +1 -1
  139. package/dist/components/tooltip/components/tooltip_table_header.js +3 -3
  140. package/dist/components/tooltip/components/tooltip_table_header.js.map +1 -1
  141. package/dist/components/tooltip/components/tooltip_table_row.d.ts +5 -3
  142. package/dist/components/tooltip/components/tooltip_table_row.d.ts.map +1 -1
  143. package/dist/components/tooltip/components/tooltip_table_row.js +7 -3
  144. package/dist/components/tooltip/components/tooltip_table_row.js.map +1 -1
  145. package/dist/components/tooltip/components/tooltip_wrapper.js +64 -4
  146. package/dist/components/tooltip/components/tooltip_wrapper.js.map +1 -1
  147. package/dist/components/tooltip/components/types.d.ts +9 -0
  148. package/dist/components/tooltip/components/types.d.ts.map +1 -1
  149. package/dist/components/tooltip/tooltip.js +48 -16
  150. package/dist/components/tooltip/tooltip.js.map +1 -1
  151. package/dist/components/tooltip/types.d.ts +33 -0
  152. package/dist/components/tooltip/types.d.ts.map +1 -1
  153. package/dist/specs/constants.d.ts +1 -1
  154. package/dist/specs/tooltip.d.ts +64 -4
  155. package/dist/specs/tooltip.d.ts.map +1 -1
  156. package/dist/specs/tooltip.js +8 -0
  157. package/dist/specs/tooltip.js.map +1 -1
  158. package/dist/state/actions/mouse.js +6 -1
  159. package/dist/state/actions/mouse.js.map +1 -1
  160. package/dist/state/actions/tooltip.d.ts +2 -0
  161. package/dist/state/actions/tooltip.d.ts.map +1 -0
  162. package/dist/state/actions/tooltip.js +20 -0
  163. package/dist/state/actions/tooltip.js.map +1 -0
  164. package/dist/state/chart_state.js +5 -2
  165. package/dist/state/chart_state.js.map +1 -1
  166. package/dist/state/reducers/interactions.js +47 -0
  167. package/dist/state/reducers/interactions.js.map +1 -1
  168. package/dist/state/selectors/can_pin_tooltip.d.ts +2 -0
  169. package/dist/state/selectors/can_pin_tooltip.d.ts.map +1 -0
  170. package/dist/state/selectors/can_pin_tooltip.js +28 -0
  171. package/dist/state/selectors/can_pin_tooltip.js.map +1 -0
  172. package/dist/state/selectors/get_active_pointer_position.d.ts +2 -0
  173. package/dist/state/selectors/get_active_pointer_position.d.ts.map +1 -0
  174. package/dist/state/selectors/get_active_pointer_position.js +10 -0
  175. package/dist/state/selectors/get_active_pointer_position.js.map +1 -0
  176. package/dist/state/selectors/get_internal_cursor_pointer.js.map +1 -1
  177. package/dist/state/selectors/get_internal_is_tooltip_visible.js +1 -1
  178. package/dist/state/selectors/get_internal_is_tooltip_visible.js.map +1 -1
  179. package/dist/state/selectors/get_tooltip_interaction_state.d.ts +2 -0
  180. package/dist/state/selectors/get_tooltip_interaction_state.d.ts.map +1 -0
  181. package/dist/state/selectors/get_tooltip_interaction_state.js +9 -0
  182. package/dist/state/selectors/get_tooltip_interaction_state.js.map +1 -0
  183. package/dist/state/selectors/get_tooltip_selected_items.d.ts +2 -0
  184. package/dist/state/selectors/get_tooltip_selected_items.d.ts.map +1 -0
  185. package/dist/state/selectors/get_tooltip_selected_items.js +15 -0
  186. package/dist/state/selectors/get_tooltip_selected_items.js.map +1 -0
  187. package/dist/state/utils.js +7 -1
  188. package/dist/state/utils.js.map +1 -1
  189. package/dist/theme.scss +241 -61
  190. package/dist/theme_dark.css +1 -1
  191. package/dist/theme_dark.css.map +1 -1
  192. package/dist/theme_light.css +1 -1
  193. package/dist/theme_light.css.map +1 -1
  194. package/dist/theme_only_dark.css +1 -1
  195. package/dist/theme_only_dark.css.map +1 -1
  196. package/dist/theme_only_light.css +1 -1
  197. package/dist/theme_only_light.css.map +1 -1
  198. package/dist/utils/themes/dark_theme.d.ts.map +1 -1
  199. package/dist/utils/themes/dark_theme.js +5 -0
  200. package/dist/utils/themes/dark_theme.js.map +1 -1
  201. package/dist/utils/themes/light_theme.d.ts.map +1 -1
  202. package/dist/utils/themes/light_theme.js +5 -0
  203. package/dist/utils/themes/light_theme.js.map +1 -1
  204. package/dist/utils/themes/theme.d.ts +25 -0
  205. package/dist/utils/themes/theme.d.ts.map +1 -1
  206. package/dist/utils/themes/theme.js.map +1 -1
  207. package/package.json +1 -1
  208. package/dist/chart_types/xy_chart/state/selectors/get_highlighted_values.d.ts +0 -2
  209. package/dist/chart_types/xy_chart/state/selectors/get_highlighted_values.d.ts.map +0 -1
  210. package/dist/chart_types/xy_chart/state/selectors/get_highlighted_values.js +0 -11
  211. package/dist/chart_types/xy_chart/state/selectors/get_highlighted_values.js.map +0 -1
@@ -29,10 +29,11 @@ export interface ControlReceiverCallbacks {
29
29
  * - label: array of N strings
30
30
  * - value: Float64Array of N numbers, for tooltip value display
31
31
  * - color: Float32Array of 4 * N numbers, eg. green[i] = color[4 * i + 1]
32
- * - position0: Float32Array of 2 * N numbers with unit coordinates [x0, y0, x1, y1, ..., xN-1, yN-1]
33
- * - position1: for now, the same typed array for position0 to be used
34
- * - size0: Float32Array of N numbers with unit widths [width0, width1, ... , widthN-1]
35
- * - size1: for now, the same typed array for size0 to be used
32
+ * - position0: Tween from: Float32Array of 2 * N numbers with unit coordinates [x0, y0, x1, y1, ..., xN-1, yN-1]
33
+ * - position1: Tween to: Float32Array of 2 * N numbers with unit coordinates [x0, y0, x1, y1, ..., xN-1, yN-1]
34
+ * - size0: Tween from: Float32Array of N numbers with unit widths [width0, width1, ... , widthN-1]
35
+ * - size1: Tween to: Float32Array of N numbers with unit widths [width0, width1, ... , widthN-1]
36
+ * If position0 === position1 and size0 === size1, then the nodes are not animated
36
37
  * @public
37
38
  */
38
39
  export interface ColumnarViewModel {
@@ -1 +1 @@
1
- {"version":3,"file":"flame_api.d.ts","sourceRoot":"","sources":["../../../src/chart_types/flame_chart/flame_api.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAgB,OAAO,EAAkB,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,KAAK,EAAkB,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE1F;;;GAGG;AACH,oBAAY,kBAAkB,GAAG,MAAM,IAAI,CAAC;AAE5C;;;GAGG;AACH,oBAAY,gBAAgB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAClD,WAAW,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAClD;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,EAAE,YAAY,CAAC;IACxB,SAAS,EAAE,YAAY,CAAC;IACxB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,SAAS,GAAG,KAAK,CAAE,SAAQ,IAAI,EAAE,qBAAqB;IACzF,QAAQ,EAAE,OAAO,QAAQ,CAAC,MAAM,CAAC;IACjC,SAAS,EAAE,OAAO,SAAS,CAAC,KAAK,CAAC;IAClC,YAAY,EAAE,iBAAiB,CAAC;IAChC,uBAAuB,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAC3D,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAChC,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;CAC7C;AAED,QAAA,MAAM,UAAU,qNAWf,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,KAAK,yNAYjB,CAAC"}
1
+ {"version":3,"file":"flame_api.d.ts","sourceRoot":"","sources":["../../../src/chart_types/flame_chart/flame_api.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAgB,OAAO,EAAkB,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,KAAK,EAAkB,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE1F;;;GAGG;AACH,oBAAY,kBAAkB,GAAG,MAAM,IAAI,CAAC;AAE5C;;;GAGG;AACH,oBAAY,gBAAgB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAClD,WAAW,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAClD;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,EAAE,YAAY,CAAC;IACxB,SAAS,EAAE,YAAY,CAAC;IACxB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,SAAS,GAAG,KAAK,CAAE,SAAQ,IAAI,EAAE,qBAAqB;IACzF,QAAQ,EAAE,OAAO,QAAQ,CAAC,MAAM,CAAC;IACjC,SAAS,EAAE,OAAO,SAAS,CAAC,KAAK,CAAC;IAClC,YAAY,EAAE,iBAAiB,CAAC;IAChC,uBAAuB,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAC3D,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAChC,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;CAC7C;AAED,QAAA,MAAM,UAAU,qNAWf,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,KAAK,yNAYjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"flame_api.js","sourceRoot":"","sources":["../../../src/chart_types/flame_chart/flame_api.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAQA,wBAA+B;AAG/B,mDAAiD;AACjD,yDAAiF;AACjF,6CAA0F;AA4D1F,IAAM,UAAU,GAAG,IAAA,2BAAY,GAAa,CAC1C;IACE,SAAS,EAAE,aAAS,CAAC,KAAK;IAC1B,QAAQ,EAAE,oBAAQ,CAAC,MAAM;CAC1B,EACD;IACE,aAAa,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAA/B,CAA+B;IACrD,WAAW,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,EAAD,CAAC;IACrB,cAAc,EAAE,UAAC,CAAC,IAAK,OAAA,MAAM,CAAC,CAAC,CAAC,EAAT,CAAS;IAChC,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE;CAC3B,CACF,CAAC;AAMK,IAAM,KAAK,GAAG,UACnB,KAMC;IAEO,IAAA,QAAQ,GAAgB,UAAU,SAA1B,EAAE,SAAS,GAAK,UAAU,UAAf,CAAgB;IAC3C,IAAA,6BAAc,iCAAoB,QAAQ,GAAK,IAAA,uBAAc,EAAC,KAAK,CAAC,GAAK,SAAS,EAAG,CAAC;IACtF,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAZW,QAAA,KAAK,SAYhB"}
1
+ {"version":3,"file":"flame_api.js","sourceRoot":"","sources":["../../../src/chart_types/flame_chart/flame_api.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAQA,wBAA+B;AAG/B,mDAAiD;AACjD,yDAAiF;AACjF,6CAA0F;AA6D1F,IAAM,UAAU,GAAG,IAAA,2BAAY,GAAa,CAC1C;IACE,SAAS,EAAE,aAAS,CAAC,KAAK;IAC1B,QAAQ,EAAE,oBAAQ,CAAC,MAAM;CAC1B,EACD;IACE,aAAa,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAA/B,CAA+B;IACrD,WAAW,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,EAAD,CAAC;IACrB,cAAc,EAAE,UAAC,CAAC,IAAK,OAAA,MAAM,CAAC,CAAC,CAAC,EAAT,CAAS;IAChC,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE;CAC3B,CACF,CAAC;AAMK,IAAM,KAAK,GAAG,UACnB,KAMC;IAEO,IAAA,QAAQ,GAAgB,UAAU,SAA1B,EAAE,SAAS,GAAK,UAAU,UAAf,CAAgB;IAC3C,IAAA,6BAAc,iCAAoB,QAAQ,GAAK,IAAA,uBAAc,EAAC,KAAK,CAAC,GAAK,SAAS,EAAG,CAAC;IACtF,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAZW,QAAA,KAAK,SAYhB"}
@@ -95,6 +95,7 @@ var SHOULD_DISABLE_WOBBLE = (typeof process === 'object' && process.env && proce
95
95
  var WOBBLE_DURATION = SHOULD_DISABLE_WOBBLE ? 0 : 1000;
96
96
  var WOBBLE_REPEAT_COUNT = 2;
97
97
  var WOBBLE_FREQUENCY = SHOULD_DISABLE_WOBBLE ? 0 : 2 * Math.PI * (WOBBLE_REPEAT_COUNT / WOBBLE_DURATION);
98
+ var NODE_TWEEN_DURATION_MS = 500;
98
99
  var unitRowPitch = function (position) { return (position.length >= 4 ? position[1] - position[3] : 1); };
99
100
  var initialPixelRowPitch = function () { return 16; };
100
101
  var specValueFormatter = function (d) { return d; };
@@ -168,9 +169,15 @@ var FlameComponent = (function (_super) {
168
169
  _this.pinchZoomSetInterval = NaN;
169
170
  _this.pointerX = NaN;
170
171
  _this.pointerY = NaN;
172
+ _this.pinnedPointerX = NaN;
173
+ _this.pinnedPointerY = NaN;
174
+ _this.tooltipPinned = false;
175
+ _this.tooltipSelectedSeries = [];
171
176
  _this.hoverIndex = NaN;
177
+ _this.tooltipValues = [];
172
178
  _this.animationRafId = NaN;
173
- _this.prevT = NaN;
179
+ _this.prevFocusTime = NaN;
180
+ _this.prevNodeTweenTime = NaN;
174
181
  _this.startOfDragX = NaN;
175
182
  _this.startOfDragY = NaN;
176
183
  _this.startOfDragFocusLeft = NaN;
@@ -183,6 +190,24 @@ var FlameComponent = (function (_super) {
183
190
  _this.focusedMatchIndex = NaN;
184
191
  _this.wobbleTimeLeft = 0;
185
192
  _this.wobbleIndex = NaN;
193
+ _this.pinTooltip = function (pinned) {
194
+ if (!pinned) {
195
+ _this.unpinTooltip(true);
196
+ return;
197
+ }
198
+ _this.tooltipPinned = true;
199
+ _this.tooltipSelectedSeries = _this.tooltipValues;
200
+ };
201
+ _this.toggleSelectedTooltipItem = function (tooltipValue) {
202
+ if (!_this.tooltipPinned)
203
+ return;
204
+ _this.tooltipSelectedSeries = _this.tooltipSelectedSeries.length === 0 ? [tooltipValue] : [];
205
+ _this.setState({});
206
+ };
207
+ _this.setSelectedTooltipItems = function (tooltipValues) {
208
+ _this.tooltipSelectedSeries = tooltipValues;
209
+ _this.setState({});
210
+ };
186
211
  _this.setupDevicePixelRatioChangeListener = function () {
187
212
  window.matchMedia("(resolution: ".concat(window.devicePixelRatio, "dppx)")).addEventListener('change', function () {
188
213
  _this.setState({});
@@ -212,9 +237,13 @@ var FlameComponent = (function (_super) {
212
237
  _this.ensurePickTexture();
213
238
  _this.drawCanvas();
214
239
  };
215
- _this.componentDidUpdate = function () {
240
+ _this.componentDidUpdate = function (_a) {
241
+ var chartDimensions = _a.chartDimensions;
216
242
  if (!_this.ctx)
217
243
  _this.tryCanvasContext();
244
+ if (_this.tooltipPinned && _this.chartDimensionsChanged(chartDimensions)) {
245
+ _this.unpinTooltip();
246
+ }
218
247
  _this.bindControls();
219
248
  _this.ensureTextureAndDraw();
220
249
  };
@@ -227,9 +256,9 @@ var FlameComponent = (function (_super) {
227
256
  };
228
257
  _this.getHoveredDatumIndex = function () {
229
258
  var pr = window.devicePixelRatio * _this.pinchZoomScale;
230
- return {
231
- datumIndex: _this.datumAtXY(pr * _this.pointerX, pr * (_this.props.chartDimensions.height - _this.pointerY)),
232
- };
259
+ var x = _this.tooltipPinned ? _this.pinnedPointerX : _this.pointerX;
260
+ var y = _this.tooltipPinned ? _this.pinnedPointerY : _this.pointerY;
261
+ return _this.datumAtXY(pr * x, pr * (_this.props.chartDimensions.height - y));
233
262
  };
234
263
  _this.getDragDistanceX = function () { return _this.pointerX - _this.startOfDragX; };
235
264
  _this.getDragDistanceY = function () { return -(_this.pointerY - _this.startOfDragY); };
@@ -241,20 +270,8 @@ var FlameComponent = (function (_super) {
241
270
  if (!_this.isDragging(e)) {
242
271
  e.stopPropagation();
243
272
  _this.updatePointerLocation(e);
244
- var hovered = _this.getHoveredDatumIndex();
245
- var prevHoverIndex = _this.hoverIndex >= 0 ? _this.hoverIndex : NaN;
246
- if (hovered) {
247
- _this.hoverIndex = hovered.datumIndex;
248
- if (!Object.is(_this.hoverIndex, prevHoverIndex)) {
249
- if (Number.isFinite(hovered.datumIndex)) {
250
- _this.props.onElementOver([{ vmIndex: hovered.datumIndex }]);
251
- }
252
- else {
253
- _this.hoverIndex = NaN;
254
- _this.props.onElementOut();
255
- }
256
- }
257
- _this.setState({});
273
+ if (!_this.tooltipPinned) {
274
+ _this.updateHoverIndex();
258
275
  }
259
276
  }
260
277
  };
@@ -311,43 +328,84 @@ var FlameComponent = (function (_super) {
311
328
  };
312
329
  _this.handleMouseDown = function (e) {
313
330
  e.stopPropagation();
331
+ if (e.button === constants_1.SECONDARY_BUTTON || e.ctrlKey)
332
+ return;
314
333
  if (Number.isNaN(_this.pointerX + _this.pointerY))
315
334
  return;
335
+ if (_this.tooltipPinned)
336
+ return;
316
337
  _this.resetDrag();
317
338
  window.addEventListener('mousemove', _this.handleMouseDragMove, { passive: true });
318
339
  window.addEventListener('mouseup', _this.handleMouseUp, { passive: true });
319
340
  };
341
+ _this.handleContextMenu = function (e) {
342
+ e.stopPropagation();
343
+ e.preventDefault();
344
+ if (_this.tooltipPinned) {
345
+ _this.handleUnpinningTooltip();
346
+ return;
347
+ }
348
+ if (!Number.isFinite(_this.getHoveredDatumIndex())) {
349
+ return;
350
+ }
351
+ window.addEventListener('keyup', _this.handleKeyUp);
352
+ window.addEventListener('click', _this.handleUnpinningTooltip);
353
+ window.addEventListener('visibilitychange', _this.handleUnpinningTooltip);
354
+ _this.pinTooltip(true);
355
+ _this.setState({});
356
+ };
320
357
  _this.handleMouseUp = function (e) {
321
358
  e.stopPropagation();
322
359
  window.removeEventListener('mousemove', _this.handleMouseDragMove);
323
360
  window.removeEventListener('mouseup', _this.handleMouseUp);
361
+ if (_this.tooltipPinned) {
362
+ _this.unpinTooltip();
363
+ _this.clearDrag();
364
+ return;
365
+ }
324
366
  _this.updatePointerLocation(e);
325
367
  var dragDistanceX = _this.getDragDistanceX();
326
368
  var dragDistanceY = _this.getDragDistanceY();
327
369
  if (!dragDistanceX && !dragDistanceY) {
328
- var hovered = _this.getHoveredDatumIndex();
370
+ var hoveredDatumIndex = _this.getHoveredDatumIndex();
329
371
  var isDoubleClick = e.detail > 1;
330
- var hasClickedOnRectangle = Number.isFinite(hovered === null || hovered === void 0 ? void 0 : hovered.datumIndex);
372
+ var hasClickedOnRectangle = Number.isFinite(hoveredDatumIndex);
331
373
  var mustFocus = SINGLE_CLICK_EMPTY_FOCUS || isDoubleClick !== hasClickedOnRectangle;
332
- if (mustFocus && !_this.pointerInMinimap(_this.pointerX, _this.pointerY)) {
333
- var datumIndex = hovered.datumIndex;
334
- var rect = focusRect(_this.props.columnarViewModel, _this.props.chartDimensions.height, datumIndex);
335
- _this.navigator.add(__assign(__assign({}, rect), { index: datumIndex }));
336
- _this.focusOnNode(datumIndex);
337
- _this.props.onElementClick([{ vmIndex: datumIndex }]);
374
+ var isContextClick = e.button === constants_1.SECONDARY_BUTTON || e.ctrlKey;
375
+ if (mustFocus && !isContextClick && !_this.pointerInMinimap(_this.pointerX, _this.pointerY)) {
376
+ var rect = focusRect(_this.props.columnarViewModel, _this.props.chartDimensions.height, hoveredDatumIndex);
377
+ _this.navigator.add(__assign(__assign({}, rect), { index: hoveredDatumIndex }));
378
+ _this.focusOnNode(hoveredDatumIndex);
379
+ _this.props.onElementClick([{ vmIndex: hoveredDatumIndex }]);
338
380
  }
339
381
  }
340
382
  _this.clearDrag();
341
383
  _this.setState({});
342
384
  };
385
+ _this.handleUnpinningTooltip = function () {
386
+ window.removeEventListener('keyup', _this.handleKeyUp);
387
+ window.removeEventListener('click', _this.handleUnpinningTooltip);
388
+ window.removeEventListener('visibilitychange', _this.handleUnpinningTooltip);
389
+ _this.pinTooltip(false);
390
+ };
391
+ _this.handleKeyUp = function (_a) {
392
+ var key = _a.key;
393
+ if (!FlameComponent.watchedKeys.includes(key))
394
+ return;
395
+ window.removeEventListener('keyup', _this.handleKeyUp);
396
+ _this.unpinTooltip();
397
+ };
343
398
  _this.handleMouseLeave = function (e) {
344
399
  e.stopPropagation();
345
- _this.smartDraw();
400
+ if (!_this.tooltipPinned) {
401
+ _this.smartDraw();
402
+ }
346
403
  };
347
404
  _this.preventScroll = function (e) { return e.metaKey === IS_META_REQUIRED_FOR_ZOOM && e.preventDefault(); };
348
405
  _this.handleWheel = function (e) {
349
406
  if (e.metaKey !== IS_META_REQUIRED_FOR_ZOOM)
350
407
  return;
408
+ _this.unpinTooltip();
351
409
  _this.updatePointerLocation(e);
352
410
  var _a = _this.currentFocus, x0 = _a.x0, x1 = _a.x1, y0 = _a.y0, y1 = _a.y1;
353
411
  var wheelDelta = -e.deltaY;
@@ -460,7 +518,6 @@ var FlameComponent = (function (_super) {
460
518
  _this.searchForText(false);
461
519
  };
462
520
  _this.handleEscapeKey = function (e) {
463
- e.stopPropagation();
464
521
  if (e.key === 'Escape') {
465
522
  _this.clearSearchText();
466
523
  }
@@ -493,7 +550,7 @@ var FlameComponent = (function (_super) {
493
550
  }
494
551
  if (hitEnumerator >= 0) {
495
552
  _this.targetFocus = focusRect(_this.props.columnarViewModel, _this.props.chartDimensions.height, datumIndex);
496
- _this.prevT = NaN;
553
+ _this.prevFocusTime = NaN;
497
554
  _this.hoverIndex = NaN;
498
555
  _this.wobbleTimeLeft = WOBBLE_DURATION;
499
556
  _this.wobbleIndex = datumIndex;
@@ -537,18 +594,17 @@ var FlameComponent = (function (_super) {
537
594
  margin: 0,
538
595
  border: 0,
539
596
  position: 'absolute',
540
- cursor: _this.startOfDragX ? 'grab' : _this.hoverIndex >= 0 ? 'pointer' : constants_1.DEFAULT_CSS_CURSOR,
597
+ cursor: _this.getActiveCursor(),
541
598
  };
542
599
  var dpr = window.devicePixelRatio * _this.pinchZoomScale;
543
600
  var canvasWidth = width * dpr;
544
601
  var canvasHeight = height * dpr;
545
- var columns = _this.props.columnarViewModel;
546
602
  var hitCount = _this.currentSearchHitCount;
547
603
  var _c = theme.navigation, textColor = _c.textColor, buttonDisabledTextColor = _c.buttonDisabledTextColor, buttonBackgroundColor = _c.buttonBackgroundColor, buttonDisabledBackgroundColor = _c.buttonDisabledBackgroundColor, buttonTextColor = _c.buttonTextColor;
548
604
  return (react_1.default.createElement(react_1.default.Fragment, null,
549
605
  react_1.default.createElement("figure", { "aria-labelledby": a11ySettings.labelId, "aria-describedby": a11ySettings.descriptionId },
550
606
  react_1.default.createElement("canvas", { ref: _this.glCanvasRef, className: "echCanvasRenderer", width: canvasWidth, height: canvasHeight, style: style, role: "presentation" }),
551
- react_1.default.createElement("canvas", { ref: forwardStageRef, tabIndex: 0, className: "echCanvasRenderer", width: canvasWidth, height: canvasHeight, onMouseMove: _this.handleMouseHoverMove, onMouseDown: _this.handleMouseDown, onMouseLeave: _this.handleMouseLeave, onKeyPress: _this.handleEnterKey, onKeyUp: _this.handleEscapeKey, onWheel: _this.handleWheel, style: __assign(__assign({}, style), { outline: 'none' }), role: "presentation" })),
607
+ react_1.default.createElement("canvas", { ref: forwardStageRef, tabIndex: 0, className: "echCanvasRenderer", width: canvasWidth, height: canvasHeight, onMouseMove: _this.handleMouseHoverMove, onMouseDown: _this.handleMouseDown, onContextMenu: _this.props.pinnableTooltip ? _this.handleContextMenu : undefined, onMouseLeave: _this.handleMouseLeave, onKeyPress: _this.handleEnterKey, onKeyUp: _this.handleEscapeKey, onWheel: _this.handleWheel, style: __assign(__assign({}, style), { outline: 'none' }), role: "presentation" })),
552
608
  react_1.default.createElement("div", { style: {
553
609
  position: 'absolute',
554
610
  transform: "translateY(".concat(_this.props.chartDimensions.height - draw_a_frame_1.PADDING_BOTTOM + 4, "px)"),
@@ -681,22 +737,11 @@ var FlameComponent = (function (_super) {
681
737
  transition: 'opacity 250ms ease-in-out',
682
738
  color: textColor,
683
739
  } }, "Match".concat(Number.isNaN(_this.focusedMatchIndex) ? 'es:' : ": ".concat(_this.focusedMatchIndex + 1, " /"), " ").concat(hitCount))),
684
- react_1.default.createElement(tooltip_1.BasicTooltip, { onPointerMove: function () { return ({ type: mouse_1.ON_POINTER_MOVE, position: { x: NaN, y: NaN }, time: NaN }); }, position: { x: _this.pointerX, y: _this.pointerY, width: 0, height: 0 }, visible: _this.props.tooltipRequired && _this.hoverIndex >= 0 && !(_this.wobbleTimeLeft > 0), info: {
740
+ react_1.default.createElement(tooltip_1.BasicTooltip, { canPinTooltip: true, onPointerMove: function () { return ({ type: mouse_1.ON_POINTER_MOVE, position: { x: NaN, y: NaN }, time: NaN }); }, position: _this.tooltipPinned
741
+ ? { x: _this.pinnedPointerX, y: _this.pinnedPointerY, width: 0, height: 0 }
742
+ : { x: _this.pointerX, y: _this.pointerY, width: 0, height: 0 }, pinned: _this.tooltipPinned, selected: _this.tooltipSelectedSeries, pinTooltip: _this.pinTooltip, toggleSelectedTooltipItem: _this.toggleSelectedTooltipItem, setSelectedTooltipItems: _this.setSelectedTooltipItems, visible: _this.tooltipPinned || (_this.props.tooltipRequired && _this.hoverIndex >= 0 && !(_this.wobbleTimeLeft > 0)), info: {
685
743
  header: null,
686
- values: _this.hoverIndex >= 0
687
- ? [
688
- {
689
- label: columns.label[_this.hoverIndex],
690
- color: getColor(columns.color, _this.hoverIndex),
691
- isHighlighted: false,
692
- isVisible: true,
693
- seriesIdentifier: { specId: '', key: '' },
694
- value: columns.value[_this.hoverIndex],
695
- formattedValue: "".concat(specValueFormatter(columns.value[_this.hoverIndex])),
696
- valueAccessor: _this.hoverIndex,
697
- },
698
- ]
699
- : [],
744
+ values: _this.tooltipValues,
700
745
  }, getChartContainerRef: _this.props.containerRef }),
701
746
  debugHistory && (react_1.default.createElement("div", { style: {
702
747
  position: 'absolute',
@@ -714,8 +759,12 @@ var FlameComponent = (function (_super) {
714
759
  return;
715
760
  var renderFrame = (0, draw_a_frame_1.drawFrame)(_this.ctx, _this.glContext, _this.props.chartDimensions.width, _this.props.chartDimensions.height, _this.getMinimapWidth(), _this.getMinimapHeight(), _this.getMinimapLeft(), _this.getMinimapTop(), window.devicePixelRatio * _this.pinchZoomScale, _this.props.columnarViewModel, _this.pickTexture, _this.glResources.pickTextureRenderer, _this.glResources.roundedRectRenderer, _this.hoverIndex, unitRowPitch(_this.props.columnarViewModel.position1), _this.currentColor, _this.props.theme);
716
761
  var anim = function (t) {
717
- var msDeltaT = Number.isNaN(_this.prevT) ? 0 : t - _this.prevT;
718
- _this.prevT = t;
762
+ var focusTimeDeltaMs = Number.isNaN(_this.prevFocusTime) ? 0 : t - _this.prevFocusTime;
763
+ _this.prevFocusTime = t;
764
+ if (_this.prevNodeTweenTime === Infinity)
765
+ _this.prevNodeTweenTime = t;
766
+ var nodeTweenTime = (0, common_1.clamp)((t - _this.prevNodeTweenTime) / NODE_TWEEN_DURATION_MS, 0, 1);
767
+ var nodeTweenInProgress = nodeTweenTime < 1;
719
768
  var dx0 = _this.targetFocus.x0 - _this.currentFocus.x0;
720
769
  var dx1 = _this.targetFocus.x1 - _this.currentFocus.x1;
721
770
  var dy0 = _this.targetFocus.y0 - _this.currentFocus.y0;
@@ -725,22 +774,23 @@ var FlameComponent = (function (_super) {
725
774
  var relativeExpansionX = Math.max(1, (currentExtentX + dx1 - dx0) / currentExtentX);
726
775
  var relativeExpansionY = Math.max(1, (currentExtentX + dy1 - dy0) / currentExtentY);
727
776
  var jointRelativeExpansion = (relativeExpansionX + relativeExpansionY) / 2;
728
- var convergenceRateX = Math.min(1, msDeltaT * RECURRENCE_ALPHA_PER_MS_X) / jointRelativeExpansion;
729
- var convergenceRateY = Math.min(1, msDeltaT * RECURRENCE_ALPHA_PER_MS_Y) / jointRelativeExpansion;
777
+ var convergenceRateX = Math.min(1, focusTimeDeltaMs * RECURRENCE_ALPHA_PER_MS_X) / jointRelativeExpansion;
778
+ var convergenceRateY = Math.min(1, focusTimeDeltaMs * RECURRENCE_ALPHA_PER_MS_Y) / jointRelativeExpansion;
730
779
  _this.currentFocus.x0 += convergenceRateX * dx0;
731
780
  _this.currentFocus.x1 += convergenceRateX * dx1;
732
781
  _this.currentFocus.y0 += convergenceRateY * dy0;
733
782
  _this.currentFocus.y1 += convergenceRateY * dy1;
734
- _this.wobbleTimeLeft -= msDeltaT;
735
- var shouldWobble = _this.wobbleTimeLeft > 0;
783
+ _this.wobbleTimeLeft -= focusTimeDeltaMs;
784
+ var wobbleAnimationInProgress = _this.wobbleTimeLeft > 0;
736
785
  var timeFromWobbleStart = (0, common_1.clamp)(WOBBLE_DURATION - _this.wobbleTimeLeft, 0, WOBBLE_DURATION);
737
- renderFrame([_this.currentFocus.x0, _this.currentFocus.x1, _this.currentFocus.y0, _this.currentFocus.y1], _this.wobbleIndex, shouldWobble ? 0.01 + 0.99 * (0.5 - 0.5 * Math.cos(timeFromWobbleStart * WOBBLE_FREQUENCY)) : 0);
786
+ renderFrame([_this.currentFocus.x0, _this.currentFocus.x1, _this.currentFocus.y0, _this.currentFocus.y1], _this.wobbleIndex, wobbleAnimationInProgress ? 0.01 + 0.99 * (0.5 - 0.5 * Math.cos(timeFromWobbleStart * WOBBLE_FREQUENCY)) : 0, nodeTweenTime);
738
787
  var maxDiff = Math.max(Math.abs(dx0), Math.abs(dx1), Math.abs(dy0), Math.abs(dy1));
739
- if (maxDiff > 1e-12 || shouldWobble) {
788
+ var focusAnimationInProgress = maxDiff > 1e-12;
789
+ if (focusAnimationInProgress || wobbleAnimationInProgress || nodeTweenInProgress) {
740
790
  _this.animationRafId = window.requestAnimationFrame(anim);
741
791
  }
742
792
  else {
743
- _this.prevT = NaN;
793
+ _this.prevFocusTime = NaN;
744
794
  _this.currentFocus.x0 = _this.targetFocus.x0;
745
795
  _this.currentFocus.x1 = _this.targetFocus.x1;
746
796
  _this.currentFocus.y0 = _this.targetFocus.y0;
@@ -840,6 +890,8 @@ var FlameComponent = (function (_super) {
840
890
  _this.pinchZoomScale = (_b = (_a = browserRootWindow().visualViewport) === null || _a === void 0 ? void 0 : _a.scale) !== null && _b !== void 0 ? _b : 1;
841
891
  _this.setupViewportScaleChangeListener();
842
892
  _this.currentColor = columns.color;
893
+ _this.prevNodeTweenTime =
894
+ columns.position0 === columns.position1 && columns.size0 === columns.size1 ? -Infinity : Infinity;
843
895
  return _this;
844
896
  }
845
897
  FlameComponent.prototype.focusOnNavElement = function (element) {
@@ -883,7 +935,7 @@ var FlameComponent = (function (_super) {
883
935
  FlameComponent.prototype.wobble = function (nodeIndex) {
884
936
  this.wobbleTimeLeft = WOBBLE_DURATION;
885
937
  this.wobbleIndex = nodeIndex;
886
- this.prevT = NaN;
938
+ this.prevFocusTime = NaN;
887
939
  this.hoverIndex = NaN;
888
940
  this.setState({});
889
941
  };
@@ -894,12 +946,73 @@ var FlameComponent = (function (_super) {
894
946
  var _a;
895
947
  (_a = this.props.containerRef().current) === null || _a === void 0 ? void 0 : _a.removeEventListener('wheel', this.preventScroll);
896
948
  };
949
+ FlameComponent.prototype.chartDimensionsChanged = function (_a) {
950
+ var height = _a.height, width = _a.width;
951
+ return this.props.chartDimensions.height !== height || this.props.chartDimensions.width !== width;
952
+ };
897
953
  FlameComponent.prototype.updatePointerLocation = function (e) {
898
954
  if (!this.props.forwardStageRef.current || !this.ctx)
899
955
  return;
900
956
  var box = this.props.forwardStageRef.current.getBoundingClientRect();
901
957
  this.pointerX = e.clientX - box.left;
902
958
  this.pointerY = e.clientY - box.top;
959
+ if (!this.tooltipPinned) {
960
+ this.pinnedPointerX = this.pointerX;
961
+ this.pinnedPointerY = this.pointerY;
962
+ }
963
+ };
964
+ FlameComponent.prototype.unpinTooltip = function (redraw) {
965
+ if (redraw === void 0) { redraw = false; }
966
+ this.pinnedPointerX = NaN;
967
+ this.pinnedPointerY = NaN;
968
+ this.tooltipPinned = false;
969
+ this.tooltipSelectedSeries = [];
970
+ this.updateHoverIndex();
971
+ if (redraw) {
972
+ this.smartDraw();
973
+ }
974
+ };
975
+ FlameComponent.prototype.updateHoverIndex = function () {
976
+ var hoveredDatumIndex = this.getHoveredDatumIndex();
977
+ var prevHoverIndex = this.hoverIndex >= 0 ? this.hoverIndex : NaN;
978
+ this.hoverIndex = hoveredDatumIndex;
979
+ if (!Object.is(this.hoverIndex, prevHoverIndex)) {
980
+ if (Number.isFinite(hoveredDatumIndex)) {
981
+ this.props.onElementOver([{ vmIndex: hoveredDatumIndex }]);
982
+ }
983
+ else {
984
+ this.hoverIndex = NaN;
985
+ this.props.onElementOut();
986
+ }
987
+ }
988
+ if (prevHoverIndex !== this.hoverIndex) {
989
+ var columns = this.props.columnarViewModel;
990
+ this.tooltipValues =
991
+ this.hoverIndex >= 0
992
+ ? [
993
+ {
994
+ label: columns.label[this.hoverIndex],
995
+ color: getColor(columns.color, this.hoverIndex),
996
+ isHighlighted: false,
997
+ isVisible: true,
998
+ seriesIdentifier: { specId: '', key: '' },
999
+ value: columns.value[this.hoverIndex],
1000
+ formattedValue: "".concat(specValueFormatter(columns.value[this.hoverIndex])),
1001
+ valueAccessor: this.hoverIndex,
1002
+ },
1003
+ ]
1004
+ : [];
1005
+ }
1006
+ this.setState({});
1007
+ };
1008
+ FlameComponent.prototype.getActiveCursor = function () {
1009
+ if (this.tooltipPinned)
1010
+ return constants_1.DEFAULT_CSS_CURSOR;
1011
+ if (this.startOfDragX)
1012
+ return 'grabbing';
1013
+ if (this.hoverIndex >= 0)
1014
+ return 'pointer';
1015
+ return 'grab';
903
1016
  };
904
1017
  FlameComponent.prototype.smartDraw = function () {
905
1018
  if (Number.isFinite(this.hoverIndex)) {
@@ -911,12 +1024,14 @@ var FlameComponent = (function (_super) {
911
1024
  }
912
1025
  };
913
1026
  FlameComponent.displayName = 'Flame';
1027
+ FlameComponent.watchedKeys = ['Escape'];
914
1028
  return FlameComponent;
915
1029
  }(react_1.default.Component));
916
1030
  var mapStateToProps = function (state) {
917
1031
  var _a, _b, _c, _d, _e, _f, _g;
918
1032
  var flameSpec = (0, utils_1.getSpecsFromStore)(state.specs, __1.ChartType.Flame, specs_1.SpecType.Series)[0];
919
1033
  var settingsSpec = (0, get_settings_spec_1.getSettingsSpecSelector)(state);
1034
+ var tooltipSpec = (0, get_tooltip_spec_1.getTooltipSpecSelector)(state);
920
1035
  return {
921
1036
  theme: (0, get_chart_theme_1.getChartThemeSelector)(state).flamegraph,
922
1037
  debugHistory: settingsSpec.debug,
@@ -925,7 +1040,8 @@ var mapStateToProps = function (state) {
925
1040
  animationDuration: (_c = flameSpec === null || flameSpec === void 0 ? void 0 : flameSpec.animation.duration) !== null && _c !== void 0 ? _c : 0,
926
1041
  chartDimensions: state.parentDimensions,
927
1042
  a11ySettings: (0, get_accessibility_config_1.getA11ySettingsSelector)(state),
928
- tooltipRequired: (0, get_tooltip_spec_1.getTooltipSpecSelector)(state).type !== specs_1.TooltipType.None,
1043
+ tooltipRequired: tooltipSpec.type !== specs_1.TooltipType.None,
1044
+ pinnableTooltip: tooltipSpec.actions.length > 0,
929
1045
  onElementOver: (_d = settingsSpec.onElementOver) !== null && _d !== void 0 ? _d : (function () { }),
930
1046
  onElementClick: (_e = settingsSpec.onElementClick) !== null && _e !== void 0 ? _e : (function () { }),
931
1047
  onElementOut: (_f = settingsSpec.onElementOut) !== null && _f !== void 0 ? _f : (function () { }),