@perses-dev/components 0.39.0 → 0.40.1

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 (328) hide show
  1. package/dist/BarChart/BarChart.d.ts +2 -2
  2. package/dist/BarChart/BarChart.d.ts.map +1 -1
  3. package/dist/BarChart/BarChart.js +8 -8
  4. package/dist/BarChart/BarChart.js.map +1 -1
  5. package/dist/BarChart/index.js.map +1 -1
  6. package/dist/ColorPicker/ColorPicker.js.map +1 -1
  7. package/dist/ColorPicker/index.js.map +1 -1
  8. package/dist/ContentWithLegend/ContentWithLegend.js.map +1 -1
  9. package/dist/ContentWithLegend/index.js.map +1 -1
  10. package/dist/ContentWithLegend/model/content-with-legend-model.d.ts +1 -1
  11. package/dist/ContentWithLegend/model/content-with-legend-model.js +19 -19
  12. package/dist/ContentWithLegend/model/content-with-legend-model.js.map +1 -1
  13. package/dist/DateTimeRangePicker/AbsoluteTimePicker.d.ts.map +1 -1
  14. package/dist/DateTimeRangePicker/AbsoluteTimePicker.js +6 -22
  15. package/dist/DateTimeRangePicker/AbsoluteTimePicker.js.map +1 -1
  16. package/dist/DateTimeRangePicker/DateTimeRangePicker.js.map +1 -1
  17. package/dist/DateTimeRangePicker/TimeRangeSelector.js.map +1 -1
  18. package/dist/DateTimeRangePicker/index.js.map +1 -1
  19. package/dist/DateTimeRangePicker/utils.js.map +1 -1
  20. package/dist/Dialog/Dialog.js.map +1 -1
  21. package/dist/Dialog/DiscardChangesConfirmationDialog.js.map +1 -1
  22. package/dist/Dialog/index.js.map +1 -1
  23. package/dist/Drawer/Drawer.js.map +1 -1
  24. package/dist/Drawer/index.js.map +1 -1
  25. package/dist/EChart/EChart.js +2 -2
  26. package/dist/EChart/EChart.js.map +1 -1
  27. package/dist/EChart/index.js.map +1 -1
  28. package/dist/ErrorAlert.js.map +1 -1
  29. package/dist/ErrorBoundary.js.map +1 -1
  30. package/dist/FontSizeSelector/FontSizeSelector.js.map +1 -1
  31. package/dist/FontSizeSelector/index.js.map +1 -1
  32. package/dist/FormatControls/FormatControls.d.ts +9 -0
  33. package/dist/FormatControls/FormatControls.d.ts.map +1 -0
  34. package/dist/{UnitSelector/UnitSelector.js → FormatControls/FormatControls.js} +26 -26
  35. package/dist/FormatControls/FormatControls.js.map +1 -0
  36. package/dist/FormatControls/index.d.ts +2 -0
  37. package/dist/FormatControls/index.d.ts.map +1 -0
  38. package/dist/{UnitSelector → FormatControls}/index.js +1 -1
  39. package/dist/FormatControls/index.js.map +1 -0
  40. package/dist/GaugeChart/GaugeChart.d.ts +3 -3
  41. package/dist/GaugeChart/GaugeChart.d.ts.map +1 -1
  42. package/dist/GaugeChart/GaugeChart.js +11 -11
  43. package/dist/GaugeChart/GaugeChart.js.map +1 -1
  44. package/dist/GaugeChart/index.js.map +1 -1
  45. package/dist/InfoTooltip/InfoTooltip.js.map +1 -1
  46. package/dist/InfoTooltip/index.js.map +1 -1
  47. package/dist/JSONEditor.js.map +1 -1
  48. package/dist/Legend/CompactLegend.js.map +1 -1
  49. package/dist/Legend/Legend.js +3 -3
  50. package/dist/Legend/Legend.js.map +1 -1
  51. package/dist/Legend/LegendColorBadge.js.map +1 -1
  52. package/dist/Legend/ListLegend.js.map +1 -1
  53. package/dist/Legend/ListLegendItem.js +2 -2
  54. package/dist/Legend/ListLegendItem.js.map +1 -1
  55. package/dist/Legend/TableLegend.js.map +1 -1
  56. package/dist/Legend/index.js.map +1 -1
  57. package/dist/Legend/legend-model.js.map +1 -1
  58. package/dist/LineChart/LineChart.d.ts +2 -2
  59. package/dist/LineChart/LineChart.d.ts.map +1 -1
  60. package/dist/LineChart/LineChart.js +12 -12
  61. package/dist/LineChart/LineChart.js.map +1 -1
  62. package/dist/LineChart/index.js.map +1 -1
  63. package/dist/ModeSelector/ModeSelector.js.map +1 -1
  64. package/dist/ModeSelector/index.js.map +1 -1
  65. package/dist/OptionsEditorLayout/OptionsEditorColumn.js.map +1 -1
  66. package/dist/OptionsEditorLayout/OptionsEditorControl.js.map +1 -1
  67. package/dist/OptionsEditorLayout/OptionsEditorGrid.js.map +1 -1
  68. package/dist/OptionsEditorLayout/OptionsEditorGroup.js.map +1 -1
  69. package/dist/OptionsEditorLayout/index.js.map +1 -1
  70. package/dist/RefreshIntervalPicker/RefreshIntervalPicker.js.map +1 -1
  71. package/dist/RefreshIntervalPicker/index.js.map +1 -1
  72. package/dist/SettingsAutocomplete/SettingsAutocomplete.js +2 -2
  73. package/dist/SettingsAutocomplete/SettingsAutocomplete.js.map +1 -1
  74. package/dist/SettingsAutocomplete/index.js.map +1 -1
  75. package/dist/SortSelector/SortSelector.js.map +1 -1
  76. package/dist/SortSelector/index.js.map +1 -1
  77. package/dist/StatChart/StatChart.d.ts +2 -2
  78. package/dist/StatChart/StatChart.d.ts.map +1 -1
  79. package/dist/StatChart/StatChart.js +7 -7
  80. package/dist/StatChart/StatChart.js.map +1 -1
  81. package/dist/StatChart/calculateFontSize.js +4 -4
  82. package/dist/StatChart/calculateFontSize.js.map +1 -1
  83. package/dist/StatChart/index.js.map +1 -1
  84. package/dist/Table/InnerTable.js.map +1 -1
  85. package/dist/Table/Table.js.map +1 -1
  86. package/dist/Table/TableBody.js.map +1 -1
  87. package/dist/Table/TableCell.js +2 -2
  88. package/dist/Table/TableCell.js.map +1 -1
  89. package/dist/Table/TableCheckbox.js.map +1 -1
  90. package/dist/Table/TableHead.js.map +1 -1
  91. package/dist/Table/TableHeaderCell.js.map +1 -1
  92. package/dist/Table/TableRow.js.map +1 -1
  93. package/dist/Table/VirtualizedTable.js +6 -6
  94. package/dist/Table/VirtualizedTable.js.map +1 -1
  95. package/dist/Table/VirtualizedTableContainer.js.map +1 -1
  96. package/dist/Table/hooks/useTableKeyboardNav.js.map +1 -1
  97. package/dist/Table/hooks/useVirtualizedTableKeyboardNav.js +20 -20
  98. package/dist/Table/hooks/useVirtualizedTableKeyboardNav.js.map +1 -1
  99. package/dist/Table/index.js.map +1 -1
  100. package/dist/Table/model/table-model.js +9 -9
  101. package/dist/Table/model/table-model.js.map +1 -1
  102. package/dist/ThresholdsEditor/ThresholdColorPicker.js +1 -1
  103. package/dist/ThresholdsEditor/ThresholdColorPicker.js.map +1 -1
  104. package/dist/ThresholdsEditor/ThresholdInput.js +1 -1
  105. package/dist/ThresholdsEditor/ThresholdInput.js.map +1 -1
  106. package/dist/ThresholdsEditor/ThresholdsEditor.js +17 -17
  107. package/dist/ThresholdsEditor/ThresholdsEditor.js.map +1 -1
  108. package/dist/ThresholdsEditor/index.js.map +1 -1
  109. package/dist/TimeChart/TimeChart.d.ts +2 -2
  110. package/dist/TimeChart/TimeChart.d.ts.map +1 -1
  111. package/dist/TimeChart/TimeChart.js +12 -12
  112. package/dist/TimeChart/TimeChart.js.map +1 -1
  113. package/dist/TimeChart/index.js.map +1 -1
  114. package/dist/TimeSeriesTooltip/LineChartTooltip.d.ts +2 -2
  115. package/dist/TimeSeriesTooltip/LineChartTooltip.d.ts.map +1 -1
  116. package/dist/TimeSeriesTooltip/LineChartTooltip.js +7 -7
  117. package/dist/TimeSeriesTooltip/LineChartTooltip.js.map +1 -1
  118. package/dist/TimeSeriesTooltip/SeriesInfo.js +2 -2
  119. package/dist/TimeSeriesTooltip/SeriesInfo.js.map +1 -1
  120. package/dist/TimeSeriesTooltip/SeriesLabelsStack.js.map +1 -1
  121. package/dist/TimeSeriesTooltip/SeriesMarker.js.map +1 -1
  122. package/dist/TimeSeriesTooltip/TimeChartTooltip.d.ts +2 -2
  123. package/dist/TimeSeriesTooltip/TimeChartTooltip.d.ts.map +1 -1
  124. package/dist/TimeSeriesTooltip/TimeChartTooltip.js +4 -4
  125. package/dist/TimeSeriesTooltip/TimeChartTooltip.js.map +1 -1
  126. package/dist/TimeSeriesTooltip/TooltipContent.js.map +1 -1
  127. package/dist/TimeSeriesTooltip/TooltipHeader.js +6 -6
  128. package/dist/TimeSeriesTooltip/TooltipHeader.js.map +1 -1
  129. package/dist/TimeSeriesTooltip/index.js.map +1 -1
  130. package/dist/TimeSeriesTooltip/nearby-series.d.ts +7 -7
  131. package/dist/TimeSeriesTooltip/nearby-series.d.ts.map +1 -1
  132. package/dist/TimeSeriesTooltip/nearby-series.js +29 -29
  133. package/dist/TimeSeriesTooltip/nearby-series.js.map +1 -1
  134. package/dist/TimeSeriesTooltip/tooltip-model.js.map +1 -1
  135. package/dist/TimeSeriesTooltip/utils.js +3 -3
  136. package/dist/TimeSeriesTooltip/utils.js.map +1 -1
  137. package/dist/YAxisLabel.js.map +1 -1
  138. package/dist/cjs/BarChart/BarChart.js +17 -15
  139. package/dist/cjs/BarChart/index.js +10 -8
  140. package/dist/cjs/ColorPicker/ColorPicker.js +15 -13
  141. package/dist/cjs/ColorPicker/index.js +10 -8
  142. package/dist/cjs/ContentWithLegend/ContentWithLegend.js +12 -10
  143. package/dist/cjs/ContentWithLegend/index.js +10 -8
  144. package/dist/cjs/ContentWithLegend/model/content-with-legend-model.js +27 -23
  145. package/dist/cjs/DateTimeRangePicker/AbsoluteTimePicker.js +29 -43
  146. package/dist/cjs/DateTimeRangePicker/DateTimeRangePicker.js +12 -10
  147. package/dist/cjs/DateTimeRangePicker/TimeRangeSelector.js +13 -11
  148. package/dist/cjs/DateTimeRangePicker/index.js +12 -10
  149. package/dist/cjs/DateTimeRangePicker/utils.js +9 -5
  150. package/dist/cjs/Dialog/Dialog.js +15 -13
  151. package/dist/cjs/Dialog/DiscardChangesConfirmationDialog.js +11 -9
  152. package/dist/cjs/Dialog/index.js +11 -9
  153. package/dist/cjs/Drawer/Drawer.js +5 -3
  154. package/dist/cjs/Drawer/index.js +10 -8
  155. package/dist/cjs/EChart/EChart.js +12 -10
  156. package/dist/cjs/EChart/index.js +10 -8
  157. package/dist/cjs/ErrorAlert.js +5 -3
  158. package/dist/cjs/ErrorBoundary.js +4 -2
  159. package/dist/cjs/FontSizeSelector/FontSizeSelector.js +8 -6
  160. package/dist/cjs/FontSizeSelector/index.js +10 -8
  161. package/dist/cjs/{UnitSelector/UnitSelector.js → FormatControls/FormatControls.js} +38 -36
  162. package/dist/cjs/{UnitSelector → FormatControls}/index.js +10 -8
  163. package/dist/cjs/GaugeChart/GaugeChart.js +22 -18
  164. package/dist/cjs/GaugeChart/index.js +10 -8
  165. package/dist/cjs/InfoTooltip/InfoTooltip.js +13 -11
  166. package/dist/cjs/InfoTooltip/index.js +10 -8
  167. package/dist/cjs/JSONEditor.js +10 -8
  168. package/dist/cjs/Legend/CompactLegend.js +9 -7
  169. package/dist/cjs/Legend/Legend.js +15 -13
  170. package/dist/cjs/Legend/LegendColorBadge.js +7 -5
  171. package/dist/cjs/Legend/ListLegend.js +10 -8
  172. package/dist/cjs/Legend/ListLegendItem.js +12 -10
  173. package/dist/cjs/Legend/TableLegend.js +7 -5
  174. package/dist/cjs/Legend/index.js +11 -9
  175. package/dist/cjs/Legend/legend-model.js +3 -1
  176. package/dist/cjs/LineChart/LineChart.js +24 -22
  177. package/dist/cjs/LineChart/index.js +10 -8
  178. package/dist/cjs/ModeSelector/ModeSelector.js +8 -6
  179. package/dist/cjs/ModeSelector/index.js +10 -8
  180. package/dist/cjs/OptionsEditorLayout/OptionsEditorColumn.js +6 -4
  181. package/dist/cjs/OptionsEditorLayout/OptionsEditorControl.js +16 -14
  182. package/dist/cjs/OptionsEditorLayout/OptionsEditorGrid.js +5 -3
  183. package/dist/cjs/OptionsEditorLayout/OptionsEditorGroup.js +11 -9
  184. package/dist/cjs/OptionsEditorLayout/index.js +13 -11
  185. package/dist/cjs/RefreshIntervalPicker/RefreshIntervalPicker.js +8 -6
  186. package/dist/cjs/RefreshIntervalPicker/index.js +10 -8
  187. package/dist/cjs/SettingsAutocomplete/SettingsAutocomplete.js +12 -10
  188. package/dist/cjs/SettingsAutocomplete/index.js +10 -8
  189. package/dist/cjs/SortSelector/SortSelector.js +8 -6
  190. package/dist/cjs/SortSelector/index.js +10 -8
  191. package/dist/cjs/StatChart/StatChart.js +20 -18
  192. package/dist/cjs/StatChart/calculateFontSize.js +9 -7
  193. package/dist/cjs/StatChart/index.js +10 -8
  194. package/dist/cjs/Table/InnerTable.js +5 -3
  195. package/dist/cjs/Table/Table.js +15 -13
  196. package/dist/cjs/Table/TableBody.js +5 -3
  197. package/dist/cjs/Table/TableCell.js +10 -8
  198. package/dist/cjs/Table/TableCheckbox.js +5 -3
  199. package/dist/cjs/Table/TableHead.js +5 -3
  200. package/dist/cjs/Table/TableHeaderCell.js +8 -6
  201. package/dist/cjs/Table/TableRow.js +5 -3
  202. package/dist/cjs/Table/VirtualizedTable.js +32 -30
  203. package/dist/cjs/Table/VirtualizedTableContainer.js +5 -3
  204. package/dist/cjs/Table/hooks/useTableKeyboardNav.js +3 -1
  205. package/dist/cjs/Table/hooks/useVirtualizedTableKeyboardNav.js +23 -21
  206. package/dist/cjs/Table/index.js +14 -10
  207. package/dist/cjs/Table/model/table-model.js +15 -11
  208. package/dist/cjs/ThresholdsEditor/ThresholdColorPicker.js +15 -13
  209. package/dist/cjs/ThresholdsEditor/ThresholdInput.js +14 -12
  210. package/dist/cjs/ThresholdsEditor/ThresholdsEditor.js +44 -42
  211. package/dist/cjs/ThresholdsEditor/index.js +10 -8
  212. package/dist/cjs/TimeChart/TimeChart.js +31 -29
  213. package/dist/cjs/TimeChart/index.js +10 -8
  214. package/dist/cjs/TimeSeriesTooltip/LineChartTooltip.js +28 -26
  215. package/dist/cjs/TimeSeriesTooltip/SeriesInfo.js +17 -15
  216. package/dist/cjs/TimeSeriesTooltip/SeriesLabelsStack.js +15 -13
  217. package/dist/cjs/TimeSeriesTooltip/SeriesMarker.js +5 -3
  218. package/dist/cjs/TimeSeriesTooltip/TimeChartTooltip.js +22 -20
  219. package/dist/cjs/TimeSeriesTooltip/TooltipContent.js +7 -5
  220. package/dist/cjs/TimeSeriesTooltip/TooltipHeader.js +34 -32
  221. package/dist/cjs/TimeSeriesTooltip/index.js +19 -17
  222. package/dist/cjs/TimeSeriesTooltip/nearby-series.js +56 -38
  223. package/dist/cjs/TimeSeriesTooltip/tooltip-model.js +51 -17
  224. package/dist/cjs/TimeSeriesTooltip/utils.js +17 -13
  225. package/dist/cjs/YAxisLabel.js +6 -4
  226. package/dist/cjs/context/ChartsProvider.js +16 -8
  227. package/dist/cjs/context/SnackbarProvider.js +6 -2
  228. package/dist/cjs/context/TimeZoneProvider.js +13 -7
  229. package/dist/cjs/context/index.js +12 -10
  230. package/dist/cjs/index.js +41 -39
  231. package/dist/cjs/model/graph.js +9 -3
  232. package/dist/cjs/model/index.js +12 -10
  233. package/dist/cjs/test/index.js +10 -8
  234. package/dist/cjs/test/render.js +7 -5
  235. package/dist/cjs/test-utils/index.js +10 -8
  236. package/dist/cjs/test-utils/theme.js +6 -2
  237. package/dist/cjs/theme/component-overrides/alert.js +3 -1
  238. package/dist/cjs/theme/component-overrides/paper.js +3 -1
  239. package/dist/cjs/theme/index.js +10 -8
  240. package/dist/cjs/theme/palette/background.js +6 -2
  241. package/dist/cjs/theme/palette/colors/blue.js +3 -1
  242. package/dist/cjs/theme/palette/colors/common.js +6 -2
  243. package/dist/cjs/theme/palette/colors/green.js +3 -1
  244. package/dist/cjs/theme/palette/colors/grey.js +3 -1
  245. package/dist/cjs/theme/palette/colors/index.js +17 -15
  246. package/dist/cjs/theme/palette/colors/orange.js +3 -1
  247. package/dist/cjs/theme/palette/colors/purple.js +3 -1
  248. package/dist/cjs/theme/palette/colors/red.js +3 -1
  249. package/dist/cjs/theme/palette/error.js +3 -1
  250. package/dist/cjs/theme/palette/grey.js +3 -1
  251. package/dist/cjs/theme/palette/index.js +10 -8
  252. package/dist/cjs/theme/palette/palette-options.js +3 -1
  253. package/dist/cjs/theme/palette/primary.js +3 -1
  254. package/dist/cjs/theme/palette/secondary.js +3 -1
  255. package/dist/cjs/theme/palette/success.js +3 -1
  256. package/dist/cjs/theme/palette/text.js +3 -1
  257. package/dist/cjs/theme/palette/warning.js +3 -1
  258. package/dist/cjs/theme/theme.js +5 -3
  259. package/dist/cjs/theme/typography.js +3 -1
  260. package/dist/cjs/utils/axis.js +8 -4
  261. package/dist/cjs/utils/chart-actions.js +26 -10
  262. package/dist/cjs/utils/combine-sx.js +3 -1
  263. package/dist/cjs/utils/component-ids.js +3 -1
  264. package/dist/cjs/utils/format.js +16 -8
  265. package/dist/cjs/utils/index.js +15 -13
  266. package/dist/cjs/utils/mathjs.js +3 -1
  267. package/dist/cjs/utils/theme-gen.js +12 -10
  268. package/dist/context/ChartsProvider.js.map +1 -1
  269. package/dist/context/SnackbarProvider.js.map +1 -1
  270. package/dist/context/TimeZoneProvider.js.map +1 -1
  271. package/dist/context/index.js.map +1 -1
  272. package/dist/index.d.ts +1 -1
  273. package/dist/index.d.ts.map +1 -1
  274. package/dist/index.js +1 -1
  275. package/dist/index.js.map +1 -1
  276. package/dist/model/graph.js.map +1 -1
  277. package/dist/model/index.js.map +1 -1
  278. package/dist/test/index.js.map +1 -1
  279. package/dist/test/render.js.map +1 -1
  280. package/dist/test/setup-tests.js.map +1 -1
  281. package/dist/test-utils/index.js.map +1 -1
  282. package/dist/test-utils/theme.js.map +1 -1
  283. package/dist/theme/component-overrides/alert.js.map +1 -1
  284. package/dist/theme/component-overrides/paper.js.map +1 -1
  285. package/dist/theme/index.d.ts +1 -0
  286. package/dist/theme/index.d.ts.map +1 -1
  287. package/dist/theme/index.js.map +1 -1
  288. package/dist/theme/palette/background.d.ts.map +1 -1
  289. package/dist/theme/palette/background.js +3 -1
  290. package/dist/theme/palette/background.js.map +1 -1
  291. package/dist/theme/palette/colors/blue.js.map +1 -1
  292. package/dist/theme/palette/colors/common.js.map +1 -1
  293. package/dist/theme/palette/colors/green.js.map +1 -1
  294. package/dist/theme/palette/colors/grey.js.map +1 -1
  295. package/dist/theme/palette/colors/index.js.map +1 -1
  296. package/dist/theme/palette/colors/orange.js.map +1 -1
  297. package/dist/theme/palette/colors/purple.js.map +1 -1
  298. package/dist/theme/palette/colors/red.js.map +1 -1
  299. package/dist/theme/palette/error.js.map +1 -1
  300. package/dist/theme/palette/grey.js.map +1 -1
  301. package/dist/theme/palette/index.js.map +1 -1
  302. package/dist/theme/palette/palette-options.js.map +1 -1
  303. package/dist/theme/palette/primary.js.map +1 -1
  304. package/dist/theme/palette/secondary.js.map +1 -1
  305. package/dist/theme/palette/success.js.map +1 -1
  306. package/dist/theme/palette/text.js.map +1 -1
  307. package/dist/theme/palette/warning.js.map +1 -1
  308. package/dist/theme/theme.js.map +1 -1
  309. package/dist/theme/typography.js.map +1 -1
  310. package/dist/utils/axis.d.ts +2 -2
  311. package/dist/utils/axis.d.ts.map +1 -1
  312. package/dist/utils/axis.js.map +1 -1
  313. package/dist/utils/chart-actions.js +2 -2
  314. package/dist/utils/chart-actions.js.map +1 -1
  315. package/dist/utils/combine-sx.js.map +1 -1
  316. package/dist/utils/component-ids.js.map +1 -1
  317. package/dist/utils/format.js.map +1 -1
  318. package/dist/utils/index.js.map +1 -1
  319. package/dist/utils/mathjs.js.map +1 -1
  320. package/dist/utils/theme-gen.js +7 -7
  321. package/dist/utils/theme-gen.js.map +1 -1
  322. package/package.json +7 -6
  323. package/dist/UnitSelector/UnitSelector.d.ts +0 -9
  324. package/dist/UnitSelector/UnitSelector.d.ts.map +0 -1
  325. package/dist/UnitSelector/UnitSelector.js.map +0 -1
  326. package/dist/UnitSelector/index.d.ts +0 -2
  327. package/dist/UnitSelector/index.d.ts.map +0 -1
  328. package/dist/UnitSelector/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/TimeSeriesTooltip/TooltipHeader.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { Box, Divider, Typography, Stack, Switch } from '@mui/material';\nimport Pin from 'mdi-material-ui/Pin';\nimport PinOutline from 'mdi-material-ui/PinOutline';\nimport { memo } from 'react';\nimport { format } from 'date-fns';\nimport { NearbySeriesArray } from './nearby-series';\nimport {\n TOOLTIP_BG_COLOR_FALLBACK,\n TOOLTIP_MAX_WIDTH,\n PIN_TOOLTIP_HELP_TEXT,\n UNPIN_TOOLTIP_HELP_TEXT,\n} from './tooltip-model';\n\nexport interface TooltipHeaderProps {\n nearbySeries: NearbySeriesArray;\n totalSeries: number;\n isTooltipPinned: boolean;\n showAllSeries: boolean;\n enablePinning?: boolean;\n onShowAllClick?: (checked: boolean) => void;\n onUnpinClick?: () => void;\n}\n\nexport const TooltipHeader = memo(function TooltipHeader({\n nearbySeries,\n totalSeries,\n isTooltipPinned,\n showAllSeries,\n enablePinning = true,\n onShowAllClick,\n onUnpinClick,\n}: TooltipHeaderProps) {\n const seriesTimeMs = nearbySeries[0]?.date ?? null;\n if (seriesTimeMs === null) {\n return null;\n }\n\n const formatTimeSeriesHeader = (timeMs: number) => {\n const date = new Date(timeMs);\n const formattedDate = format(date, 'MMM dd, yyyy - ');\n const formattedTime = format(date, 'HH:mm:ss');\n return (\n <Box>\n <Typography\n variant=\"caption\"\n sx={(theme) => ({\n color: theme.palette.common.white,\n })}\n >\n {formattedDate}\n </Typography>\n <Typography variant=\"caption\">\n <strong>{formattedTime}</strong>\n </Typography>\n </Box>\n );\n };\n\n // TODO: accurately calc whether more series are outside scrollable region using yBuffer, avg series name length, TOOLTIP_MAX_HEIGHT\n const showAllSeriesToggle = enablePinning && totalSeries > 5;\n\n const pinTooltipHelpText = isTooltipPinned ? UNPIN_TOOLTIP_HELP_TEXT : PIN_TOOLTIP_HELP_TEXT;\n\n return (\n <Box\n sx={(theme) => ({\n width: '100%',\n maxWidth: TOOLTIP_MAX_WIDTH,\n padding: theme.spacing(1.5, 2, 0.5, 2),\n backgroundColor: theme.palette.designSystem?.grey[800] ?? TOOLTIP_BG_COLOR_FALLBACK,\n position: 'sticky',\n top: 0,\n left: 0,\n })}\n >\n <Box\n sx={{\n width: '100%',\n display: 'flex',\n justifyContent: 'start',\n alignItems: 'center',\n paddingBottom: 0.5,\n }}\n >\n {formatTimeSeriesHeader(seriesTimeMs)}\n <Stack direction=\"row\" gap={1} sx={{ marginLeft: 'auto' }}>\n {showAllSeriesToggle && (\n <Stack direction=\"row\" gap={0.5} alignItems=\"center\" sx={{ textAlign: 'right' }}>\n <Typography sx={{ fontSize: 11 }}>Show All</Typography>\n <Switch\n checked={showAllSeries}\n size=\"small\"\n onChange={(_, checked) => {\n if (onShowAllClick !== undefined) {\n return onShowAllClick(checked);\n }\n }}\n sx={(theme) => ({\n '& .MuiSwitch-switchBase': {\n color: theme.palette.common.white,\n },\n '& .MuiSwitch-track': {\n backgroundColor: theme.palette.common.white,\n },\n })}\n />\n </Stack>\n )}\n {enablePinning && (\n <Stack direction=\"row\" alignItems=\"center\">\n <Typography\n sx={{\n marginRight: 0.5,\n fontSize: 11,\n verticalAlign: 'middle',\n }}\n >\n {pinTooltipHelpText}\n </Typography>\n {isTooltipPinned ? (\n <Pin\n onClick={() => {\n if (onUnpinClick !== undefined) {\n onUnpinClick();\n }\n }}\n sx={{\n fontSize: 16,\n cursor: 'pointer',\n }}\n />\n ) : (\n <PinOutline sx={{ fontSize: 16 }} />\n )}\n </Stack>\n )}\n </Stack>\n </Box>\n <Divider\n sx={(theme) => ({\n width: '100%',\n borderColor: theme.palette.grey['500'],\n })}\n />\n </Box>\n );\n});\n"],"names":["Box","Divider","Typography","Stack","Switch","Pin","PinOutline","memo","format","TOOLTIP_BG_COLOR_FALLBACK","TOOLTIP_MAX_WIDTH","PIN_TOOLTIP_HELP_TEXT","UNPIN_TOOLTIP_HELP_TEXT","TooltipHeader","nearbySeries","totalSeries","isTooltipPinned","showAllSeries","enablePinning","onShowAllClick","onUnpinClick","seriesTimeMs","date","formatTimeSeriesHeader","timeMs","Date","formattedDate","formattedTime","variant","sx","theme","color","palette","common","white","strong","showAllSeriesToggle","pinTooltipHelpText","width","maxWidth","padding","spacing","backgroundColor","designSystem","grey","position","top","left","display","justifyContent","alignItems","paddingBottom","direction","gap","marginLeft","textAlign","fontSize","checked","size","onChange","_","undefined","marginRight","verticalAlign","onClick","cursor","borderColor"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/TimeSeriesTooltip/TooltipHeader.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { Box, Divider, Typography, Stack, Switch } from '@mui/material';\nimport Pin from 'mdi-material-ui/Pin';\nimport PinOutline from 'mdi-material-ui/PinOutline';\nimport { memo } from 'react';\nimport { format } from 'date-fns';\nimport { NearbySeriesArray } from './nearby-series';\nimport {\n TOOLTIP_BG_COLOR_FALLBACK,\n TOOLTIP_MAX_WIDTH,\n PIN_TOOLTIP_HELP_TEXT,\n UNPIN_TOOLTIP_HELP_TEXT,\n} from './tooltip-model';\n\nexport interface TooltipHeaderProps {\n nearbySeries: NearbySeriesArray;\n totalSeries: number;\n isTooltipPinned: boolean;\n showAllSeries: boolean;\n enablePinning?: boolean;\n onShowAllClick?: (checked: boolean) => void;\n onUnpinClick?: () => void;\n}\n\nexport const TooltipHeader = memo(function TooltipHeader({\n nearbySeries,\n totalSeries,\n isTooltipPinned,\n showAllSeries,\n enablePinning = true,\n onShowAllClick,\n onUnpinClick,\n}: TooltipHeaderProps) {\n const seriesTimeMs = nearbySeries[0]?.date ?? null;\n if (seriesTimeMs === null) {\n return null;\n }\n\n const formatTimeSeriesHeader = (timeMs: number) => {\n const date = new Date(timeMs);\n const formattedDate = format(date, 'MMM dd, yyyy - ');\n const formattedTime = format(date, 'HH:mm:ss');\n return (\n <Box>\n <Typography\n variant=\"caption\"\n sx={(theme) => ({\n color: theme.palette.common.white,\n })}\n >\n {formattedDate}\n </Typography>\n <Typography variant=\"caption\">\n <strong>{formattedTime}</strong>\n </Typography>\n </Box>\n );\n };\n\n // TODO: accurately calc whether more series are outside scrollable region using yBuffer, avg series name length, TOOLTIP_MAX_HEIGHT\n const showAllSeriesToggle = enablePinning && totalSeries > 5;\n\n const pinTooltipHelpText = isTooltipPinned ? UNPIN_TOOLTIP_HELP_TEXT : PIN_TOOLTIP_HELP_TEXT;\n\n return (\n <Box\n sx={(theme) => ({\n width: '100%',\n maxWidth: TOOLTIP_MAX_WIDTH,\n padding: theme.spacing(1.5, 2, 0.5, 2),\n backgroundColor: theme.palette.designSystem?.grey[800] ?? TOOLTIP_BG_COLOR_FALLBACK,\n position: 'sticky',\n top: 0,\n left: 0,\n })}\n >\n <Box\n sx={{\n width: '100%',\n display: 'flex',\n justifyContent: 'start',\n alignItems: 'center',\n paddingBottom: 0.5,\n }}\n >\n {formatTimeSeriesHeader(seriesTimeMs)}\n <Stack direction=\"row\" gap={1} sx={{ marginLeft: 'auto' }}>\n {showAllSeriesToggle && (\n <Stack direction=\"row\" gap={0.5} alignItems=\"center\" sx={{ textAlign: 'right' }}>\n <Typography sx={{ fontSize: 11 }}>Show All</Typography>\n <Switch\n checked={showAllSeries}\n size=\"small\"\n onChange={(_, checked) => {\n if (onShowAllClick !== undefined) {\n return onShowAllClick(checked);\n }\n }}\n sx={(theme) => ({\n '& .MuiSwitch-switchBase': {\n color: theme.palette.common.white,\n },\n '& .MuiSwitch-track': {\n backgroundColor: theme.palette.common.white,\n },\n })}\n />\n </Stack>\n )}\n {enablePinning && (\n <Stack direction=\"row\" alignItems=\"center\">\n <Typography\n sx={{\n marginRight: 0.5,\n fontSize: 11,\n verticalAlign: 'middle',\n }}\n >\n {pinTooltipHelpText}\n </Typography>\n {isTooltipPinned ? (\n <Pin\n onClick={() => {\n if (onUnpinClick !== undefined) {\n onUnpinClick();\n }\n }}\n sx={{\n fontSize: 16,\n cursor: 'pointer',\n }}\n />\n ) : (\n <PinOutline sx={{ fontSize: 16 }} />\n )}\n </Stack>\n )}\n </Stack>\n </Box>\n <Divider\n sx={(theme) => ({\n width: '100%',\n borderColor: theme.palette.grey['500'],\n })}\n />\n </Box>\n );\n});\n"],"names":["Box","Divider","Typography","Stack","Switch","Pin","PinOutline","memo","format","TOOLTIP_BG_COLOR_FALLBACK","TOOLTIP_MAX_WIDTH","PIN_TOOLTIP_HELP_TEXT","UNPIN_TOOLTIP_HELP_TEXT","TooltipHeader","nearbySeries","totalSeries","isTooltipPinned","showAllSeries","enablePinning","onShowAllClick","onUnpinClick","seriesTimeMs","date","formatTimeSeriesHeader","timeMs","Date","formattedDate","formattedTime","variant","sx","theme","color","palette","common","white","strong","showAllSeriesToggle","pinTooltipHelpText","width","maxWidth","padding","spacing","backgroundColor","designSystem","grey","position","top","left","display","justifyContent","alignItems","paddingBottom","direction","gap","marginLeft","textAlign","fontSize","checked","size","onChange","_","undefined","marginRight","verticalAlign","onClick","cursor","borderColor"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/TimeSeriesTooltip/index.ts"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nexport * from './LineChartTooltip';\nexport * from './SeriesInfo';\nexport * from './SeriesLabelsStack';\nexport * from './SeriesMarker';\nexport * from './TimeChartTooltip';\nexport * from './TooltipContent';\nexport * from './TooltipHeader';\nexport * from './nearby-series';\nexport * from './tooltip-model';\nexport * from './utils';\n"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC"}
1
+ {"version":3,"sources":["../../src/TimeSeriesTooltip/index.ts"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nexport * from './LineChartTooltip';\nexport * from './SeriesInfo';\nexport * from './SeriesLabelsStack';\nexport * from './SeriesMarker';\nexport * from './TimeChartTooltip';\nexport * from './TooltipContent';\nexport * from './TooltipHeader';\nexport * from './nearby-series';\nexport * from './tooltip-model';\nexport * from './utils';\n"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,cAAc,qBAAqB;AACnC,cAAc,eAAe;AAC7B,cAAc,sBAAsB;AACpC,cAAc,iBAAiB;AAC/B,cAAc,qBAAqB;AACnC,cAAc,mBAAmB;AACjC,cAAc,kBAAkB;AAChC,cAAc,kBAAkB;AAChC,cAAc,kBAAkB;AAChC,cAAc,UAAU"}
@@ -1,5 +1,5 @@
1
1
  import { ECharts as EChartsInstance } from 'echarts/core';
2
- import { UnitOptions, TimeSeries } from '@perses-dev/core';
2
+ import { FormatOptions, TimeSeries } from '@perses-dev/core';
3
3
  import { EChartsDataFormat, TimeChartSeriesMapping } from '../model';
4
4
  import { CursorCoordinates, CursorData } from './tooltip-model';
5
5
  export declare const INCREASE_NEARBY_SERIES_MULTIPLIER = 5.5;
@@ -21,35 +21,35 @@ export declare type NearbySeriesArray = NearbySeriesInfo[];
21
21
  * Returns formatted series data for the points that are close to the user's cursor.
22
22
  * Adjust xBuffer and yBuffer to increase or decrease number of series shown.
23
23
  */
24
- export declare function checkforNearbyTimeSeries(data: TimeSeries[], seriesMapping: TimeChartSeriesMapping, pointInGrid: number[], yBuffer: number, chart: EChartsInstance, unit?: UnitOptions): NearbySeriesArray;
24
+ export declare function checkforNearbyTimeSeries(data: TimeSeries[], seriesMapping: TimeChartSeriesMapping, pointInGrid: number[], yBuffer: number, chart: EChartsInstance, format?: FormatOptions): NearbySeriesArray;
25
25
  /**
26
26
  * [DEPRECATED] Returns formatted series data for the points that are close to the user's cursor
27
27
  * Adjust yBuffer to increase or decrease number of series shown
28
28
  */
29
- export declare function legacyCheckforNearbySeries(data: EChartsDataFormat, pointInGrid: number[], yBuffer: number, chart?: EChartsInstance, unit?: UnitOptions): NearbySeriesArray;
29
+ export declare function legacyCheckforNearbySeries(data: EChartsDataFormat, pointInGrid: number[], yBuffer: number, chart?: EChartsInstance, format?: FormatOptions): NearbySeriesArray;
30
30
  /**
31
31
  * Uses mouse position to determine whether user is hovering over a chart canvas
32
32
  * If yes, convert from pixel values to logical cartesian coordinates and return all nearby series
33
33
  */
34
- export declare function getNearbySeriesData({ mousePos, pinnedPos, data, seriesMapping, chart, unit, showAllSeries, }: {
34
+ export declare function getNearbySeriesData({ mousePos, pinnedPos, data, seriesMapping, chart, format, showAllSeries, }: {
35
35
  mousePos: CursorData['coords'];
36
36
  pinnedPos: CursorCoordinates | null;
37
37
  data: TimeSeries[];
38
38
  seriesMapping: TimeChartSeriesMapping;
39
39
  chart?: EChartsInstance;
40
- unit?: UnitOptions;
40
+ format?: FormatOptions;
41
41
  showAllSeries?: boolean;
42
42
  }): NearbySeriesArray;
43
43
  /**
44
44
  * [DEPRECATED] Uses mouse position to determine whether user is hovering over a chart canvas
45
45
  * If yes, convert from pixel values to logical cartesian coordinates and return all nearby series
46
46
  */
47
- export declare function legacyGetNearbySeriesData({ mousePos, pinnedPos, chartData, chart, unit, showAllSeries, }: {
47
+ export declare function legacyGetNearbySeriesData({ mousePos, pinnedPos, chartData, chart, format, showAllSeries, }: {
48
48
  mousePos: CursorData['coords'];
49
49
  pinnedPos: CursorCoordinates | null;
50
50
  chartData: EChartsDataFormat;
51
51
  chart?: EChartsInstance;
52
- unit?: UnitOptions;
52
+ format?: FormatOptions;
53
53
  showAllSeries?: boolean;
54
54
  }): NearbySeriesArray;
55
55
  export declare function isWithinPercentageRange({ valueToCheck, baseValue, percentage, }: {
@@ -1 +1 @@
1
- {"version":3,"file":"nearby-series.d.ts","sourceRoot":"","sources":["../../src/TimeSeriesTooltip/nearby-series.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nearby-series.d.ts","sourceRoot":"","sources":["../../src/TimeSeriesTooltip/nearby-series.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAqC,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAChG,OAAO,EAAE,iBAAiB,EAA+B,sBAAsB,EAAiB,MAAM,UAAU,CAAC;AAEjH,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGhE,eAAO,MAAM,iCAAiC,MAAM,CAAC;AACrD,eAAO,MAAM,gCAAgC,KAAK,CAAC;AACnD,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,oBAAY,iBAAiB,GAAG,gBAAgB,EAAE,CAAC;AAEnD;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,UAAU,EAAE,EAClB,aAAa,EAAE,sBAAsB,EACrC,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,eAAe,EACtB,MAAM,CAAC,EAAE,aAAa,GACrB,iBAAiB,CA2HnB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,iBAAiB,EACvB,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,eAAe,EACvB,MAAM,CAAC,EAAE,aAAa,GACrB,iBAAiB,CAmGnB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,aAAa,EACb,KAAK,EACL,MAAM,EACN,aAAqB,GACtB,EAAE;IACD,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC/B,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,aAAa,EAAE,sBAAsB,CAAC;IACtC,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,qBAsCA;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,QAAQ,EACR,SAAS,EACT,SAAS,EACT,KAAK,EACL,MAAM,EACN,aAAqB,GACtB,EAAE;IACD,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC/B,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,qBAwCA;AAKD,wBAAgB,uBAAuB,CAAC,EACtC,YAAY,EACZ,SAAS,EACT,UAAU,GACX,EAAE;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAKV;AAKD,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,WAAW,EACX,aAAqB,GACtB,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,UAgBA"}
@@ -20,13 +20,13 @@ export const SHOW_FEWER_SERIES_LIMIT = 5;
20
20
  /**
21
21
  * Returns formatted series data for the points that are close to the user's cursor.
22
22
  * Adjust xBuffer and yBuffer to increase or decrease number of series shown.
23
- */ export function checkforNearbyTimeSeries(data, seriesMapping, pointInGrid, yBuffer, chart, unit) {
24
- var ref;
23
+ */ export function checkforNearbyTimeSeries(data, seriesMapping, pointInGrid, yBuffer, chart, format) {
24
+ var _data_;
25
25
  const currentNearbySeriesData = [];
26
- var ref1;
27
- const cursorX = (ref1 = pointInGrid[0]) !== null && ref1 !== void 0 ? ref1 : null;
28
- var ref2;
29
- const cursorY = (ref2 = pointInGrid[1]) !== null && ref2 !== void 0 ? ref2 : null;
26
+ var _pointInGrid_;
27
+ const cursorX = (_pointInGrid_ = pointInGrid[0]) !== null && _pointInGrid_ !== void 0 ? _pointInGrid_ : null;
28
+ var _pointInGrid_1;
29
+ const cursorY = (_pointInGrid_1 = pointInGrid[1]) !== null && _pointInGrid_1 !== void 0 ? _pointInGrid_1 : null;
30
30
  if (cursorX === null || cursorY === null) return currentNearbySeriesData;
31
31
  if (chart.dispatchAction === undefined) return currentNearbySeriesData;
32
32
  if (!Array.isArray(data)) return currentNearbySeriesData;
@@ -38,7 +38,7 @@ export const SHOW_FEWER_SERIES_LIMIT = 5;
38
38
  const totalSeries = data.length;
39
39
  const yValueCounts = new Map();
40
40
  // Only need to loop through first dataset source since getCommonTimeScale ensures xAxis timestamps are consistent
41
- const firstTimeSeriesValues = (ref = data[0]) === null || ref === void 0 ? void 0 : ref.values;
41
+ const firstTimeSeriesValues = (_data_ = data[0]) === null || _data_ === void 0 ? void 0 : _data_.values;
42
42
  const closestTimestamp = getClosestTimestamp(firstTimeSeriesValues, cursorX);
43
43
  if (closestTimestamp === null) {
44
44
  return [];
@@ -53,8 +53,8 @@ export const SHOW_FEWER_SERIES_LIMIT = 5;
53
53
  if (currentDatasetValues === undefined || !Array.isArray(currentDatasetValues)) break;
54
54
  const lineSeries = currentSeries;
55
55
  const currentSeriesName = lineSeries.name ? lineSeries.name.toString() : '';
56
- var _color;
57
- const markerColor = (_color = lineSeries.color) !== null && _color !== void 0 ? _color : '#000';
56
+ var _lineSeries_color;
57
+ const markerColor = (_lineSeries_color = lineSeries.color) !== null && _lineSeries_color !== void 0 ? _lineSeries_color : '#000';
58
58
  if (Array.isArray(data)) {
59
59
  for(let datumIdx = 0; datumIdx < currentDatasetValues.length; datumIdx++){
60
60
  const nearbyTimeSeries = currentDatasetValues[datumIdx];
@@ -76,10 +76,10 @@ export const SHOW_FEWER_SERIES_LIMIT = 5;
76
76
  if (isClosestToCursor) {
77
77
  // shows as bold in tooltip, customize 'emphasis' options in getTimeSeries util
78
78
  emphasizedSeriesIndexes.push(seriesIdx);
79
- var ref3;
79
+ var _yValueCounts_get;
80
80
  // Used to determine which datapoint to apply select styles to.
81
81
  // Accounts for cases where lines may be rendered directly on top of eachother.
82
- const duplicateValuesCount = (ref3 = yValueCounts.get(yValue)) !== null && ref3 !== void 0 ? ref3 : 0;
82
+ const duplicateValuesCount = (_yValueCounts_get = yValueCounts.get(yValue)) !== null && _yValueCounts_get !== void 0 ? _yValueCounts_get : 0;
83
83
  yValueCounts.set(yValue, duplicateValuesCount + 1);
84
84
  if (duplicateValuesCount > 0) {
85
85
  duplicateDatapoints.push({
@@ -104,7 +104,7 @@ export const SHOW_FEWER_SERIES_LIMIT = 5;
104
104
  seriesIndex: seriesIdx
105
105
  });
106
106
  }
107
- const formattedY = formatValue(yValue, unit);
107
+ const formattedY = formatValue(yValue, format);
108
108
  currentNearbySeriesData.push({
109
109
  seriesIdx: seriesIdx,
110
110
  datumIdx: datumIdx,
@@ -129,12 +129,12 @@ export const SHOW_FEWER_SERIES_LIMIT = 5;
129
129
  /**
130
130
  * [DEPRECATED] Returns formatted series data for the points that are close to the user's cursor
131
131
  * Adjust yBuffer to increase or decrease number of series shown
132
- */ export function legacyCheckforNearbySeries(data, pointInGrid, yBuffer, chart, unit) {
132
+ */ export function legacyCheckforNearbySeries(data, pointInGrid, yBuffer, chart, format) {
133
133
  const currentNearbySeriesData = [];
134
- var ref;
135
- const cursorX = (ref = pointInGrid[0]) !== null && ref !== void 0 ? ref : null;
136
- var ref1;
137
- const cursorY = (ref1 = pointInGrid[1]) !== null && ref1 !== void 0 ? ref1 : null;
134
+ var _pointInGrid_;
135
+ const cursorX = (_pointInGrid_ = pointInGrid[0]) !== null && _pointInGrid_ !== void 0 ? _pointInGrid_ : null;
136
+ var _pointInGrid_1;
137
+ const cursorY = (_pointInGrid_1 = pointInGrid[1]) !== null && _pointInGrid_1 !== void 0 ? _pointInGrid_1 : null;
138
138
  if (cursorX === null || cursorY === null) {
139
139
  return currentNearbySeriesData;
140
140
  }
@@ -148,12 +148,12 @@ export const SHOW_FEWER_SERIES_LIMIT = 5;
148
148
  if (currentSeries === undefined) break;
149
149
  if (currentNearbySeriesData.length >= OPTIMIZED_MODE_SERIES_LIMIT) break;
150
150
  const currentSeriesName = currentSeries.name ? currentSeries.name.toString() : '';
151
- var _color;
152
- const markerColor = (_color = currentSeries.color) !== null && _color !== void 0 ? _color : '#000';
151
+ var _currentSeries_color;
152
+ const markerColor = (_currentSeries_color = currentSeries.color) !== null && _currentSeries_color !== void 0 ? _currentSeries_color : '#000';
153
153
  if (Array.isArray(currentSeries.data)) {
154
154
  for(let datumIdx = 0; datumIdx < currentSeries.data.length; datumIdx++){
155
- var _datumIdx;
156
- const xValue = (_datumIdx = data.xAxis[datumIdx]) !== null && _datumIdx !== void 0 ? _datumIdx : 0;
155
+ var _data_xAxis_datumIdx;
156
+ const xValue = (_data_xAxis_datumIdx = data.xAxis[datumIdx]) !== null && _data_xAxis_datumIdx !== void 0 ? _data_xAxis_datumIdx : 0;
157
157
  const yValue = currentSeries.data[datumIdx];
158
158
  // ensure null values not displayed in tooltip
159
159
  if (yValue !== undefined && yValue !== null && cursorX === datumIdx) {
@@ -180,7 +180,7 @@ export const SHOW_FEWER_SERIES_LIMIT = 5;
180
180
  }
181
181
  // determine whether to convert timestamp to ms, see: https://stackoverflow.com/a/23982005/17575201
182
182
  const xValueMilliSeconds = xValue > 99999999999 ? xValue : xValue * 1000;
183
- const formattedY = formatValue(yValue, unit);
183
+ const formattedY = formatValue(yValue, format);
184
184
  currentNearbySeriesData.push({
185
185
  seriesIdx: seriesIdx,
186
186
  datumIdx: datumIdx,
@@ -230,7 +230,7 @@ export const SHOW_FEWER_SERIES_LIMIT = 5;
230
230
  /**
231
231
  * Uses mouse position to determine whether user is hovering over a chart canvas
232
232
  * If yes, convert from pixel values to logical cartesian coordinates and return all nearby series
233
- */ export function getNearbySeriesData({ mousePos , pinnedPos , data , seriesMapping , chart , unit , showAllSeries =false }) {
233
+ */ export function getNearbySeriesData({ mousePos , pinnedPos , data , seriesMapping , chart , format , showAllSeries =false }) {
234
234
  if (chart === undefined || mousePos === null) return [];
235
235
  // prevents multiple tooltips showing from adjacent charts unless tooltip is pinned
236
236
  let cursorTargetMatchesChart = false;
@@ -263,14 +263,14 @@ export const SHOW_FEWER_SERIES_LIMIT = 5;
263
263
  totalSeries,
264
264
  showAllSeries
265
265
  });
266
- return checkforNearbyTimeSeries(data, seriesMapping, pointInGrid, yBuffer, chart, unit);
266
+ return checkforNearbyTimeSeries(data, seriesMapping, pointInGrid, yBuffer, chart, format);
267
267
  }
268
268
  return [];
269
269
  }
270
270
  /**
271
271
  * [DEPRECATED] Uses mouse position to determine whether user is hovering over a chart canvas
272
272
  * If yes, convert from pixel values to logical cartesian coordinates and return all nearby series
273
- */ export function legacyGetNearbySeriesData({ mousePos , pinnedPos , chartData , chart , unit , showAllSeries =false }) {
273
+ */ export function legacyGetNearbySeriesData({ mousePos , pinnedPos , chartData , chart , format , showAllSeries =false }) {
274
274
  if (chart === undefined || mousePos === null) return [];
275
275
  // prevents multiple tooltips showing from adjacent charts unless tooltip is pinned
276
276
  let cursorTargetMatchesChart = false;
@@ -301,15 +301,15 @@ export const SHOW_FEWER_SERIES_LIMIT = 5;
301
301
  totalSeries,
302
302
  showAllSeries
303
303
  });
304
- var _x, _y;
304
+ var _mousePos_plotCanvas_x, _mousePos_plotCanvas_y;
305
305
  const pointInPixel = [
306
- (_x = mousePos.plotCanvas.x) !== null && _x !== void 0 ? _x : 0,
307
- (_y = mousePos.plotCanvas.y) !== null && _y !== void 0 ? _y : 0
306
+ (_mousePos_plotCanvas_x = mousePos.plotCanvas.x) !== null && _mousePos_plotCanvas_x !== void 0 ? _mousePos_plotCanvas_x : 0,
307
+ (_mousePos_plotCanvas_y = mousePos.plotCanvas.y) !== null && _mousePos_plotCanvas_y !== void 0 ? _mousePos_plotCanvas_y : 0
308
308
  ];
309
309
  if (chart.containPixel('grid', pointInPixel)) {
310
310
  const pointInGrid = chart.convertFromPixel('grid', pointInPixel);
311
311
  if (pointInGrid[0] !== undefined && pointInGrid[1] !== undefined) {
312
- return legacyCheckforNearbySeries(chartData, pointInGrid, yBuffer, chart, unit);
312
+ return legacyCheckforNearbySeries(chartData, pointInGrid, yBuffer, chart, format);
313
313
  }
314
314
  }
315
315
  return [];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/TimeSeriesTooltip/nearby-series.ts"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { ECharts as EChartsInstance } from 'echarts/core';\nimport { LineSeriesOption } from 'echarts/charts';\nimport { formatValue, TimeSeriesValueTuple, UnitOptions, TimeSeries } from '@perses-dev/core';\nimport { EChartsDataFormat, OPTIMIZED_MODE_SERIES_LIMIT, TimeChartSeriesMapping, DatapointInfo } from '../model';\nimport { batchDispatchNearbySeriesActions, getPointInGrid, getClosestTimestamp } from '../utils';\nimport { CursorCoordinates, CursorData } from './tooltip-model';\n\n// increase multipliers to show more series in tooltip\nexport const INCREASE_NEARBY_SERIES_MULTIPLIER = 5.5; // adjusts how many series show in tooltip (higher == more series shown)\nexport const DYNAMIC_NEARBY_SERIES_MULTIPLIER = 30; // used for adjustment after series number divisor\nexport const SHOW_FEWER_SERIES_LIMIT = 5;\n\nexport interface NearbySeriesInfo {\n seriesIdx: number | null;\n datumIdx: number | null;\n seriesName: string;\n date: number;\n markerColor: string;\n x: number;\n y: number;\n formattedY: string;\n isClosestToCursor: boolean;\n}\n\nexport type NearbySeriesArray = NearbySeriesInfo[];\n\n/**\n * Returns formatted series data for the points that are close to the user's cursor.\n * Adjust xBuffer and yBuffer to increase or decrease number of series shown.\n */\nexport function checkforNearbyTimeSeries(\n data: TimeSeries[],\n seriesMapping: TimeChartSeriesMapping,\n pointInGrid: number[],\n yBuffer: number,\n chart: EChartsInstance,\n unit?: UnitOptions\n): NearbySeriesArray {\n const currentNearbySeriesData: NearbySeriesArray = [];\n const cursorX: number | null = pointInGrid[0] ?? null;\n const cursorY: number | null = pointInGrid[1] ?? null;\n\n if (cursorX === null || cursorY === null) return currentNearbySeriesData;\n\n if (chart.dispatchAction === undefined) return currentNearbySeriesData;\n\n if (!Array.isArray(data)) return currentNearbySeriesData;\n const nearbySeriesIndexes: number[] = [];\n const emphasizedSeriesIndexes: number[] = [];\n const nonEmphasizedSeriesIndexes: number[] = [];\n const emphasizedDatapoints: DatapointInfo[] = [];\n const duplicateDatapoints: DatapointInfo[] = [];\n\n const totalSeries = data.length;\n\n const yValueCounts: Map<number, number> = new Map();\n\n // Only need to loop through first dataset source since getCommonTimeScale ensures xAxis timestamps are consistent\n const firstTimeSeriesValues = data[0]?.values;\n const closestTimestamp = getClosestTimestamp(firstTimeSeriesValues, cursorX);\n\n if (closestTimestamp === null) {\n return [];\n }\n\n // find the timestamp with data that is closest to cursorX\n for (let seriesIdx = 0; seriesIdx < totalSeries; seriesIdx++) {\n const currentSeries = seriesMapping[seriesIdx];\n if (currentSeries === undefined) break;\n\n const currentDataset = totalSeries > 0 ? data[seriesIdx] : null;\n if (currentDataset == null) break;\n\n const currentDatasetValues: TimeSeriesValueTuple[] = currentDataset.values;\n if (currentDatasetValues === undefined || !Array.isArray(currentDatasetValues)) break;\n const lineSeries = currentSeries as LineSeriesOption;\n const currentSeriesName = lineSeries.name ? lineSeries.name.toString() : '';\n const markerColor = lineSeries.color ?? '#000';\n if (Array.isArray(data)) {\n for (let datumIdx = 0; datumIdx < currentDatasetValues.length; datumIdx++) {\n const nearbyTimeSeries = currentDatasetValues[datumIdx];\n if (nearbyTimeSeries === undefined || !Array.isArray(nearbyTimeSeries)) break;\n\n const xValue = nearbyTimeSeries[0];\n const yValue = nearbyTimeSeries[1];\n\n // TODO: ensure null values not displayed in tooltip\n if (yValue !== undefined && yValue !== null) {\n if (closestTimestamp === xValue) {\n if (cursorY <= yValue + yBuffer && cursorY >= yValue - yBuffer) {\n // show fewer bold series in tooltip when many total series\n const minPercentRange = totalSeries > SHOW_FEWER_SERIES_LIMIT ? 2 : 5;\n const percentRangeToCheck = Math.max(minPercentRange, 100 / totalSeries);\n const isClosestToCursor = isWithinPercentageRange({\n valueToCheck: cursorY,\n baseValue: yValue,\n percentage: percentRangeToCheck,\n });\n if (isClosestToCursor) {\n // shows as bold in tooltip, customize 'emphasis' options in getTimeSeries util\n emphasizedSeriesIndexes.push(seriesIdx);\n\n // Used to determine which datapoint to apply select styles to.\n // Accounts for cases where lines may be rendered directly on top of eachother.\n const duplicateValuesCount = yValueCounts.get(yValue) ?? 0;\n yValueCounts.set(yValue, duplicateValuesCount + 1);\n if (duplicateValuesCount > 0) {\n duplicateDatapoints.push({\n seriesIndex: seriesIdx,\n dataIndex: datumIdx,\n seriesName: currentSeriesName,\n yValue: yValue,\n });\n }\n\n // keep track of all bold datapoints in tooltip so that 'select' state only applied to topmost\n emphasizedDatapoints.push({\n seriesIndex: seriesIdx,\n dataIndex: datumIdx,\n seriesName: currentSeriesName,\n yValue: yValue,\n });\n } else {\n nonEmphasizedSeriesIndexes.push(seriesIdx);\n // ensure series far away from cursor are not highlighted\n chart.dispatchAction({\n type: 'downplay',\n seriesIndex: seriesIdx,\n });\n }\n const formattedY = formatValue(yValue, unit);\n currentNearbySeriesData.push({\n seriesIdx: seriesIdx,\n datumIdx: datumIdx,\n seriesName: currentSeriesName,\n date: closestTimestamp,\n x: xValue,\n y: yValue,\n formattedY: formattedY,\n markerColor: markerColor.toString(),\n isClosestToCursor,\n });\n nearbySeriesIndexes.push(seriesIdx);\n }\n }\n }\n }\n }\n }\n\n batchDispatchNearbySeriesActions(\n chart,\n nearbySeriesIndexes,\n emphasizedSeriesIndexes,\n nonEmphasizedSeriesIndexes,\n emphasizedDatapoints,\n duplicateDatapoints\n );\n\n return currentNearbySeriesData;\n}\n\n/**\n * [DEPRECATED] Returns formatted series data for the points that are close to the user's cursor\n * Adjust yBuffer to increase or decrease number of series shown\n */\nexport function legacyCheckforNearbySeries(\n data: EChartsDataFormat,\n pointInGrid: number[],\n yBuffer: number,\n chart?: EChartsInstance,\n unit?: UnitOptions\n): NearbySeriesArray {\n const currentNearbySeriesData: NearbySeriesArray = [];\n const cursorX: number | null = pointInGrid[0] ?? null;\n const cursorY: number | null = pointInGrid[1] ?? null;\n\n if (cursorX === null || cursorY === null) {\n return currentNearbySeriesData;\n }\n\n const nearbySeriesIndexes: number[] = [];\n const emphasizedSeriesIndexes: number[] = [];\n const nonEmphasizedSeriesIndexes: number[] = [];\n const totalSeries = data.timeSeries.length;\n if (Array.isArray(data.xAxis) && Array.isArray(data.timeSeries)) {\n for (let seriesIdx = 0; seriesIdx < totalSeries; seriesIdx++) {\n const currentSeries = data.timeSeries[seriesIdx];\n if (currentSeries === undefined) break;\n if (currentNearbySeriesData.length >= OPTIMIZED_MODE_SERIES_LIMIT) break;\n\n const currentSeriesName = currentSeries.name ? currentSeries.name.toString() : '';\n const markerColor = currentSeries.color ?? '#000';\n if (Array.isArray(currentSeries.data)) {\n for (let datumIdx = 0; datumIdx < currentSeries.data.length; datumIdx++) {\n const xValue = data.xAxis[datumIdx] ?? 0;\n const yValue = currentSeries.data[datumIdx];\n // ensure null values not displayed in tooltip\n if (yValue !== undefined && yValue !== null && cursorX === datumIdx) {\n if (yValue !== '-' && cursorY <= yValue + yBuffer && cursorY >= yValue - yBuffer) {\n // show fewer bold series in tooltip when many total series\n const minPercentRange = totalSeries > SHOW_FEWER_SERIES_LIMIT ? 2 : 5;\n const percentRangeToCheck = Math.max(minPercentRange, 100 / totalSeries);\n const isClosestToCursor = isWithinPercentageRange({\n valueToCheck: cursorY,\n baseValue: yValue,\n percentage: percentRangeToCheck,\n });\n if (isClosestToCursor) {\n emphasizedSeriesIndexes.push(seriesIdx);\n } else {\n nonEmphasizedSeriesIndexes.push(seriesIdx);\n // ensure series not close to cursor are not highlighted\n if (chart?.dispatchAction !== undefined) {\n chart.dispatchAction({\n type: 'downplay',\n seriesIndex: seriesIdx,\n });\n }\n }\n\n // determine whether to convert timestamp to ms, see: https://stackoverflow.com/a/23982005/17575201\n const xValueMilliSeconds = xValue > 99999999999 ? xValue : xValue * 1000;\n const formattedY = formatValue(yValue, unit);\n currentNearbySeriesData.push({\n seriesIdx: seriesIdx,\n datumIdx: datumIdx,\n seriesName: currentSeriesName,\n date: xValueMilliSeconds,\n x: xValue,\n y: yValue,\n formattedY: formattedY,\n markerColor: markerColor.toString(),\n isClosestToCursor,\n });\n nearbySeriesIndexes.push(seriesIdx);\n }\n }\n }\n }\n }\n }\n if (chart?.dispatchAction !== undefined) {\n // Clears emphasis state of all lines that are not emphasized.\n // Emphasized is a subset of just the nearby series that are closest to cursor.\n chart.dispatchAction({\n type: 'downplay',\n seriesIndex: nonEmphasizedSeriesIndexes,\n });\n\n // https://echarts.apache.org/en/api.html#action.highlight\n if (emphasizedSeriesIndexes.length > 0) {\n // Fadeout opacity of all series not closest to cursor.\n chart.dispatchAction({\n type: 'highlight',\n seriesIndex: emphasizedSeriesIndexes,\n notBlur: false, // ensure blur IS triggered, this is default but setting so it is explicit\n escapeConnect: true, // shared crosshair should not emphasize series on adjacent charts\n });\n } else {\n // When no emphasized series with bold text, notBlur allows opacity fadeout to not trigger.\n chart.dispatchAction({\n type: 'highlight',\n seriesIndex: nearbySeriesIndexes,\n notBlur: true, // do not trigger blur state when cursor is not immediately close to any series\n escapeConnect: true, // shared crosshair should not emphasize series on adjacent charts\n });\n }\n }\n\n return currentNearbySeriesData;\n}\n\n/**\n * Uses mouse position to determine whether user is hovering over a chart canvas\n * If yes, convert from pixel values to logical cartesian coordinates and return all nearby series\n */\nexport function getNearbySeriesData({\n mousePos,\n pinnedPos,\n data,\n seriesMapping,\n chart,\n unit,\n showAllSeries = false,\n}: {\n mousePos: CursorData['coords'];\n pinnedPos: CursorCoordinates | null;\n data: TimeSeries[];\n seriesMapping: TimeChartSeriesMapping;\n chart?: EChartsInstance;\n unit?: UnitOptions;\n showAllSeries?: boolean;\n}) {\n if (chart === undefined || mousePos === null) return [];\n\n // prevents multiple tooltips showing from adjacent charts unless tooltip is pinned\n let cursorTargetMatchesChart = false;\n if (mousePos.target !== null) {\n const currentParent = (<HTMLElement>mousePos.target).parentElement;\n if (currentParent !== null) {\n const currentGrandparent = currentParent.parentElement;\n if (currentGrandparent !== null) {\n const chartDom = chart.getDom();\n if (chartDom === currentGrandparent) {\n cursorTargetMatchesChart = true;\n }\n }\n }\n }\n\n // allows moving cursor inside tooltip without it fading away\n if (pinnedPos !== null) {\n mousePos = pinnedPos;\n cursorTargetMatchesChart = true;\n }\n\n if (cursorTargetMatchesChart === false) return [];\n\n if (chart['_model'] === undefined || data === null) return [];\n\n const pointInGrid = getPointInGrid(mousePos.plotCanvas.x, mousePos.plotCanvas.y, chart);\n if (pointInGrid !== null) {\n const chartModel = chart['_model'];\n const yInterval = chartModel.getComponent('yAxis').axis.scale._interval;\n const totalSeries = data.length;\n const yBuffer = getYBuffer({ yInterval, totalSeries, showAllSeries });\n return checkforNearbyTimeSeries(data, seriesMapping, pointInGrid, yBuffer, chart, unit);\n }\n\n return [];\n}\n\n/**\n * [DEPRECATED] Uses mouse position to determine whether user is hovering over a chart canvas\n * If yes, convert from pixel values to logical cartesian coordinates and return all nearby series\n */\nexport function legacyGetNearbySeriesData({\n mousePos,\n pinnedPos,\n chartData,\n chart,\n unit,\n showAllSeries = false,\n}: {\n mousePos: CursorData['coords'];\n pinnedPos: CursorCoordinates | null;\n chartData: EChartsDataFormat;\n chart?: EChartsInstance;\n unit?: UnitOptions;\n showAllSeries?: boolean;\n}) {\n if (chart === undefined || mousePos === null) return [];\n\n // prevents multiple tooltips showing from adjacent charts unless tooltip is pinned\n let cursorTargetMatchesChart = false;\n if (mousePos.target !== null) {\n const currentParent = (<HTMLElement>mousePos.target).parentElement;\n if (currentParent !== null) {\n const currentGrandparent = currentParent.parentElement;\n if (currentGrandparent !== null) {\n const chartDom = chart.getDom();\n if (chartDom === currentGrandparent) {\n cursorTargetMatchesChart = true;\n }\n }\n }\n }\n\n // allows moving cursor inside tooltip without it fading away\n if (pinnedPos !== null) {\n mousePos = pinnedPos;\n cursorTargetMatchesChart = true;\n }\n\n if (cursorTargetMatchesChart === false) return [];\n\n if (chart['_model'] === undefined) return [];\n const chartModel = chart['_model'];\n const yInterval = chartModel.getComponent('yAxis').axis.scale._interval;\n const totalSeries = chartData.timeSeries.length;\n const yBuffer = getYBuffer({ yInterval, totalSeries, showAllSeries });\n const pointInPixel = [mousePos.plotCanvas.x ?? 0, mousePos.plotCanvas.y ?? 0];\n if (chart.containPixel('grid', pointInPixel)) {\n const pointInGrid = chart.convertFromPixel('grid', pointInPixel);\n if (pointInGrid[0] !== undefined && pointInGrid[1] !== undefined) {\n return legacyCheckforNearbySeries(chartData, pointInGrid, yBuffer, chart, unit);\n }\n }\n\n return [];\n}\n\n/*\n * Check if two numbers are within a specified percentage range\n */\nexport function isWithinPercentageRange({\n valueToCheck,\n baseValue,\n percentage,\n}: {\n valueToCheck: number;\n baseValue: number;\n percentage: number;\n}): boolean {\n const range = (percentage / 100) * baseValue;\n const lowerBound = baseValue - range;\n const upperBound = baseValue + range;\n return valueToCheck >= lowerBound && valueToCheck <= upperBound;\n}\n\n/*\n * Get range to check within for nearby series to show in tooltip.\n */\nexport function getYBuffer({\n yInterval,\n totalSeries,\n showAllSeries = false,\n}: {\n yInterval: number;\n totalSeries: number;\n showAllSeries?: boolean;\n}) {\n if (showAllSeries) {\n return yInterval * 10; // roughly correlates with grid so entire canvas is searched\n }\n\n // never let nearby series range be less than roughly the size of a single tick\n const yBufferMin = yInterval * 0.3;\n\n // tooltip trigger area gets smaller with more series\n if (totalSeries > SHOW_FEWER_SERIES_LIMIT) {\n const adjustedBuffer = (yInterval * DYNAMIC_NEARBY_SERIES_MULTIPLIER) / totalSeries;\n return Math.max(yBufferMin, adjustedBuffer);\n }\n\n // increase multiplier to expand nearby series range\n return Math.max(yBufferMin, yInterval * INCREASE_NEARBY_SERIES_MULTIPLIER);\n}\n"],"names":["formatValue","OPTIMIZED_MODE_SERIES_LIMIT","batchDispatchNearbySeriesActions","getPointInGrid","getClosestTimestamp","INCREASE_NEARBY_SERIES_MULTIPLIER","DYNAMIC_NEARBY_SERIES_MULTIPLIER","SHOW_FEWER_SERIES_LIMIT","checkforNearbyTimeSeries","data","seriesMapping","pointInGrid","yBuffer","chart","unit","currentNearbySeriesData","cursorX","cursorY","dispatchAction","undefined","Array","isArray","nearbySeriesIndexes","emphasizedSeriesIndexes","nonEmphasizedSeriesIndexes","emphasizedDatapoints","duplicateDatapoints","totalSeries","length","yValueCounts","Map","firstTimeSeriesValues","values","closestTimestamp","seriesIdx","currentSeries","currentDataset","currentDatasetValues","lineSeries","currentSeriesName","name","toString","markerColor","color","datumIdx","nearbyTimeSeries","xValue","yValue","minPercentRange","percentRangeToCheck","Math","max","isClosestToCursor","isWithinPercentageRange","valueToCheck","baseValue","percentage","push","duplicateValuesCount","get","set","seriesIndex","dataIndex","seriesName","type","formattedY","date","x","y","legacyCheckforNearbySeries","timeSeries","xAxis","xValueMilliSeconds","notBlur","escapeConnect","getNearbySeriesData","mousePos","pinnedPos","showAllSeries","cursorTargetMatchesChart","target","currentParent","parentElement","currentGrandparent","chartDom","getDom","plotCanvas","chartModel","yInterval","getComponent","axis","scale","_interval","getYBuffer","legacyGetNearbySeriesData","chartData","pointInPixel","containPixel","convertFromPixel","range","lowerBound","upperBound","yBufferMin","adjustedBuffer"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/TimeSeriesTooltip/nearby-series.ts"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { ECharts as EChartsInstance } from 'echarts/core';\nimport { LineSeriesOption } from 'echarts/charts';\nimport { formatValue, TimeSeriesValueTuple, FormatOptions, TimeSeries } from '@perses-dev/core';\nimport { EChartsDataFormat, OPTIMIZED_MODE_SERIES_LIMIT, TimeChartSeriesMapping, DatapointInfo } from '../model';\nimport { batchDispatchNearbySeriesActions, getPointInGrid, getClosestTimestamp } from '../utils';\nimport { CursorCoordinates, CursorData } from './tooltip-model';\n\n// increase multipliers to show more series in tooltip\nexport const INCREASE_NEARBY_SERIES_MULTIPLIER = 5.5; // adjusts how many series show in tooltip (higher == more series shown)\nexport const DYNAMIC_NEARBY_SERIES_MULTIPLIER = 30; // used for adjustment after series number divisor\nexport const SHOW_FEWER_SERIES_LIMIT = 5;\n\nexport interface NearbySeriesInfo {\n seriesIdx: number | null;\n datumIdx: number | null;\n seriesName: string;\n date: number;\n markerColor: string;\n x: number;\n y: number;\n formattedY: string;\n isClosestToCursor: boolean;\n}\n\nexport type NearbySeriesArray = NearbySeriesInfo[];\n\n/**\n * Returns formatted series data for the points that are close to the user's cursor.\n * Adjust xBuffer and yBuffer to increase or decrease number of series shown.\n */\nexport function checkforNearbyTimeSeries(\n data: TimeSeries[],\n seriesMapping: TimeChartSeriesMapping,\n pointInGrid: number[],\n yBuffer: number,\n chart: EChartsInstance,\n format?: FormatOptions\n): NearbySeriesArray {\n const currentNearbySeriesData: NearbySeriesArray = [];\n const cursorX: number | null = pointInGrid[0] ?? null;\n const cursorY: number | null = pointInGrid[1] ?? null;\n\n if (cursorX === null || cursorY === null) return currentNearbySeriesData;\n\n if (chart.dispatchAction === undefined) return currentNearbySeriesData;\n\n if (!Array.isArray(data)) return currentNearbySeriesData;\n const nearbySeriesIndexes: number[] = [];\n const emphasizedSeriesIndexes: number[] = [];\n const nonEmphasizedSeriesIndexes: number[] = [];\n const emphasizedDatapoints: DatapointInfo[] = [];\n const duplicateDatapoints: DatapointInfo[] = [];\n\n const totalSeries = data.length;\n\n const yValueCounts: Map<number, number> = new Map();\n\n // Only need to loop through first dataset source since getCommonTimeScale ensures xAxis timestamps are consistent\n const firstTimeSeriesValues = data[0]?.values;\n const closestTimestamp = getClosestTimestamp(firstTimeSeriesValues, cursorX);\n\n if (closestTimestamp === null) {\n return [];\n }\n\n // find the timestamp with data that is closest to cursorX\n for (let seriesIdx = 0; seriesIdx < totalSeries; seriesIdx++) {\n const currentSeries = seriesMapping[seriesIdx];\n if (currentSeries === undefined) break;\n\n const currentDataset = totalSeries > 0 ? data[seriesIdx] : null;\n if (currentDataset == null) break;\n\n const currentDatasetValues: TimeSeriesValueTuple[] = currentDataset.values;\n if (currentDatasetValues === undefined || !Array.isArray(currentDatasetValues)) break;\n const lineSeries = currentSeries as LineSeriesOption;\n const currentSeriesName = lineSeries.name ? lineSeries.name.toString() : '';\n const markerColor = lineSeries.color ?? '#000';\n if (Array.isArray(data)) {\n for (let datumIdx = 0; datumIdx < currentDatasetValues.length; datumIdx++) {\n const nearbyTimeSeries = currentDatasetValues[datumIdx];\n if (nearbyTimeSeries === undefined || !Array.isArray(nearbyTimeSeries)) break;\n\n const xValue = nearbyTimeSeries[0];\n const yValue = nearbyTimeSeries[1];\n\n // TODO: ensure null values not displayed in tooltip\n if (yValue !== undefined && yValue !== null) {\n if (closestTimestamp === xValue) {\n if (cursorY <= yValue + yBuffer && cursorY >= yValue - yBuffer) {\n // show fewer bold series in tooltip when many total series\n const minPercentRange = totalSeries > SHOW_FEWER_SERIES_LIMIT ? 2 : 5;\n const percentRangeToCheck = Math.max(minPercentRange, 100 / totalSeries);\n const isClosestToCursor = isWithinPercentageRange({\n valueToCheck: cursorY,\n baseValue: yValue,\n percentage: percentRangeToCheck,\n });\n if (isClosestToCursor) {\n // shows as bold in tooltip, customize 'emphasis' options in getTimeSeries util\n emphasizedSeriesIndexes.push(seriesIdx);\n\n // Used to determine which datapoint to apply select styles to.\n // Accounts for cases where lines may be rendered directly on top of eachother.\n const duplicateValuesCount = yValueCounts.get(yValue) ?? 0;\n yValueCounts.set(yValue, duplicateValuesCount + 1);\n if (duplicateValuesCount > 0) {\n duplicateDatapoints.push({\n seriesIndex: seriesIdx,\n dataIndex: datumIdx,\n seriesName: currentSeriesName,\n yValue: yValue,\n });\n }\n\n // keep track of all bold datapoints in tooltip so that 'select' state only applied to topmost\n emphasizedDatapoints.push({\n seriesIndex: seriesIdx,\n dataIndex: datumIdx,\n seriesName: currentSeriesName,\n yValue: yValue,\n });\n } else {\n nonEmphasizedSeriesIndexes.push(seriesIdx);\n // ensure series far away from cursor are not highlighted\n chart.dispatchAction({\n type: 'downplay',\n seriesIndex: seriesIdx,\n });\n }\n const formattedY = formatValue(yValue, format);\n currentNearbySeriesData.push({\n seriesIdx: seriesIdx,\n datumIdx: datumIdx,\n seriesName: currentSeriesName,\n date: closestTimestamp,\n x: xValue,\n y: yValue,\n formattedY: formattedY,\n markerColor: markerColor.toString(),\n isClosestToCursor,\n });\n nearbySeriesIndexes.push(seriesIdx);\n }\n }\n }\n }\n }\n }\n\n batchDispatchNearbySeriesActions(\n chart,\n nearbySeriesIndexes,\n emphasizedSeriesIndexes,\n nonEmphasizedSeriesIndexes,\n emphasizedDatapoints,\n duplicateDatapoints\n );\n\n return currentNearbySeriesData;\n}\n\n/**\n * [DEPRECATED] Returns formatted series data for the points that are close to the user's cursor\n * Adjust yBuffer to increase or decrease number of series shown\n */\nexport function legacyCheckforNearbySeries(\n data: EChartsDataFormat,\n pointInGrid: number[],\n yBuffer: number,\n chart?: EChartsInstance,\n format?: FormatOptions\n): NearbySeriesArray {\n const currentNearbySeriesData: NearbySeriesArray = [];\n const cursorX: number | null = pointInGrid[0] ?? null;\n const cursorY: number | null = pointInGrid[1] ?? null;\n\n if (cursorX === null || cursorY === null) {\n return currentNearbySeriesData;\n }\n\n const nearbySeriesIndexes: number[] = [];\n const emphasizedSeriesIndexes: number[] = [];\n const nonEmphasizedSeriesIndexes: number[] = [];\n const totalSeries = data.timeSeries.length;\n if (Array.isArray(data.xAxis) && Array.isArray(data.timeSeries)) {\n for (let seriesIdx = 0; seriesIdx < totalSeries; seriesIdx++) {\n const currentSeries = data.timeSeries[seriesIdx];\n if (currentSeries === undefined) break;\n if (currentNearbySeriesData.length >= OPTIMIZED_MODE_SERIES_LIMIT) break;\n\n const currentSeriesName = currentSeries.name ? currentSeries.name.toString() : '';\n const markerColor = currentSeries.color ?? '#000';\n if (Array.isArray(currentSeries.data)) {\n for (let datumIdx = 0; datumIdx < currentSeries.data.length; datumIdx++) {\n const xValue = data.xAxis[datumIdx] ?? 0;\n const yValue = currentSeries.data[datumIdx];\n // ensure null values not displayed in tooltip\n if (yValue !== undefined && yValue !== null && cursorX === datumIdx) {\n if (yValue !== '-' && cursorY <= yValue + yBuffer && cursorY >= yValue - yBuffer) {\n // show fewer bold series in tooltip when many total series\n const minPercentRange = totalSeries > SHOW_FEWER_SERIES_LIMIT ? 2 : 5;\n const percentRangeToCheck = Math.max(minPercentRange, 100 / totalSeries);\n const isClosestToCursor = isWithinPercentageRange({\n valueToCheck: cursorY,\n baseValue: yValue,\n percentage: percentRangeToCheck,\n });\n if (isClosestToCursor) {\n emphasizedSeriesIndexes.push(seriesIdx);\n } else {\n nonEmphasizedSeriesIndexes.push(seriesIdx);\n // ensure series not close to cursor are not highlighted\n if (chart?.dispatchAction !== undefined) {\n chart.dispatchAction({\n type: 'downplay',\n seriesIndex: seriesIdx,\n });\n }\n }\n\n // determine whether to convert timestamp to ms, see: https://stackoverflow.com/a/23982005/17575201\n const xValueMilliSeconds = xValue > 99999999999 ? xValue : xValue * 1000;\n const formattedY = formatValue(yValue, format);\n currentNearbySeriesData.push({\n seriesIdx: seriesIdx,\n datumIdx: datumIdx,\n seriesName: currentSeriesName,\n date: xValueMilliSeconds,\n x: xValue,\n y: yValue,\n formattedY: formattedY,\n markerColor: markerColor.toString(),\n isClosestToCursor,\n });\n nearbySeriesIndexes.push(seriesIdx);\n }\n }\n }\n }\n }\n }\n if (chart?.dispatchAction !== undefined) {\n // Clears emphasis state of all lines that are not emphasized.\n // Emphasized is a subset of just the nearby series that are closest to cursor.\n chart.dispatchAction({\n type: 'downplay',\n seriesIndex: nonEmphasizedSeriesIndexes,\n });\n\n // https://echarts.apache.org/en/api.html#action.highlight\n if (emphasizedSeriesIndexes.length > 0) {\n // Fadeout opacity of all series not closest to cursor.\n chart.dispatchAction({\n type: 'highlight',\n seriesIndex: emphasizedSeriesIndexes,\n notBlur: false, // ensure blur IS triggered, this is default but setting so it is explicit\n escapeConnect: true, // shared crosshair should not emphasize series on adjacent charts\n });\n } else {\n // When no emphasized series with bold text, notBlur allows opacity fadeout to not trigger.\n chart.dispatchAction({\n type: 'highlight',\n seriesIndex: nearbySeriesIndexes,\n notBlur: true, // do not trigger blur state when cursor is not immediately close to any series\n escapeConnect: true, // shared crosshair should not emphasize series on adjacent charts\n });\n }\n }\n\n return currentNearbySeriesData;\n}\n\n/**\n * Uses mouse position to determine whether user is hovering over a chart canvas\n * If yes, convert from pixel values to logical cartesian coordinates and return all nearby series\n */\nexport function getNearbySeriesData({\n mousePos,\n pinnedPos,\n data,\n seriesMapping,\n chart,\n format,\n showAllSeries = false,\n}: {\n mousePos: CursorData['coords'];\n pinnedPos: CursorCoordinates | null;\n data: TimeSeries[];\n seriesMapping: TimeChartSeriesMapping;\n chart?: EChartsInstance;\n format?: FormatOptions;\n showAllSeries?: boolean;\n}) {\n if (chart === undefined || mousePos === null) return [];\n\n // prevents multiple tooltips showing from adjacent charts unless tooltip is pinned\n let cursorTargetMatchesChart = false;\n if (mousePos.target !== null) {\n const currentParent = (<HTMLElement>mousePos.target).parentElement;\n if (currentParent !== null) {\n const currentGrandparent = currentParent.parentElement;\n if (currentGrandparent !== null) {\n const chartDom = chart.getDom();\n if (chartDom === currentGrandparent) {\n cursorTargetMatchesChart = true;\n }\n }\n }\n }\n\n // allows moving cursor inside tooltip without it fading away\n if (pinnedPos !== null) {\n mousePos = pinnedPos;\n cursorTargetMatchesChart = true;\n }\n\n if (cursorTargetMatchesChart === false) return [];\n\n if (chart['_model'] === undefined || data === null) return [];\n\n const pointInGrid = getPointInGrid(mousePos.plotCanvas.x, mousePos.plotCanvas.y, chart);\n if (pointInGrid !== null) {\n const chartModel = chart['_model'];\n const yInterval = chartModel.getComponent('yAxis').axis.scale._interval;\n const totalSeries = data.length;\n const yBuffer = getYBuffer({ yInterval, totalSeries, showAllSeries });\n return checkforNearbyTimeSeries(data, seriesMapping, pointInGrid, yBuffer, chart, format);\n }\n\n return [];\n}\n\n/**\n * [DEPRECATED] Uses mouse position to determine whether user is hovering over a chart canvas\n * If yes, convert from pixel values to logical cartesian coordinates and return all nearby series\n */\nexport function legacyGetNearbySeriesData({\n mousePos,\n pinnedPos,\n chartData,\n chart,\n format,\n showAllSeries = false,\n}: {\n mousePos: CursorData['coords'];\n pinnedPos: CursorCoordinates | null;\n chartData: EChartsDataFormat;\n chart?: EChartsInstance;\n format?: FormatOptions;\n showAllSeries?: boolean;\n}) {\n if (chart === undefined || mousePos === null) return [];\n\n // prevents multiple tooltips showing from adjacent charts unless tooltip is pinned\n let cursorTargetMatchesChart = false;\n if (mousePos.target !== null) {\n const currentParent = (<HTMLElement>mousePos.target).parentElement;\n if (currentParent !== null) {\n const currentGrandparent = currentParent.parentElement;\n if (currentGrandparent !== null) {\n const chartDom = chart.getDom();\n if (chartDom === currentGrandparent) {\n cursorTargetMatchesChart = true;\n }\n }\n }\n }\n\n // allows moving cursor inside tooltip without it fading away\n if (pinnedPos !== null) {\n mousePos = pinnedPos;\n cursorTargetMatchesChart = true;\n }\n\n if (cursorTargetMatchesChart === false) return [];\n\n if (chart['_model'] === undefined) return [];\n const chartModel = chart['_model'];\n const yInterval = chartModel.getComponent('yAxis').axis.scale._interval;\n const totalSeries = chartData.timeSeries.length;\n const yBuffer = getYBuffer({ yInterval, totalSeries, showAllSeries });\n const pointInPixel = [mousePos.plotCanvas.x ?? 0, mousePos.plotCanvas.y ?? 0];\n if (chart.containPixel('grid', pointInPixel)) {\n const pointInGrid = chart.convertFromPixel('grid', pointInPixel);\n if (pointInGrid[0] !== undefined && pointInGrid[1] !== undefined) {\n return legacyCheckforNearbySeries(chartData, pointInGrid, yBuffer, chart, format);\n }\n }\n\n return [];\n}\n\n/*\n * Check if two numbers are within a specified percentage range\n */\nexport function isWithinPercentageRange({\n valueToCheck,\n baseValue,\n percentage,\n}: {\n valueToCheck: number;\n baseValue: number;\n percentage: number;\n}): boolean {\n const range = (percentage / 100) * baseValue;\n const lowerBound = baseValue - range;\n const upperBound = baseValue + range;\n return valueToCheck >= lowerBound && valueToCheck <= upperBound;\n}\n\n/*\n * Get range to check within for nearby series to show in tooltip.\n */\nexport function getYBuffer({\n yInterval,\n totalSeries,\n showAllSeries = false,\n}: {\n yInterval: number;\n totalSeries: number;\n showAllSeries?: boolean;\n}) {\n if (showAllSeries) {\n return yInterval * 10; // roughly correlates with grid so entire canvas is searched\n }\n\n // never let nearby series range be less than roughly the size of a single tick\n const yBufferMin = yInterval * 0.3;\n\n // tooltip trigger area gets smaller with more series\n if (totalSeries > SHOW_FEWER_SERIES_LIMIT) {\n const adjustedBuffer = (yInterval * DYNAMIC_NEARBY_SERIES_MULTIPLIER) / totalSeries;\n return Math.max(yBufferMin, adjustedBuffer);\n }\n\n // increase multiplier to expand nearby series range\n return Math.max(yBufferMin, yInterval * INCREASE_NEARBY_SERIES_MULTIPLIER);\n}\n"],"names":["formatValue","OPTIMIZED_MODE_SERIES_LIMIT","batchDispatchNearbySeriesActions","getPointInGrid","getClosestTimestamp","INCREASE_NEARBY_SERIES_MULTIPLIER","DYNAMIC_NEARBY_SERIES_MULTIPLIER","SHOW_FEWER_SERIES_LIMIT","checkforNearbyTimeSeries","data","seriesMapping","pointInGrid","yBuffer","chart","format","currentNearbySeriesData","cursorX","cursorY","dispatchAction","undefined","Array","isArray","nearbySeriesIndexes","emphasizedSeriesIndexes","nonEmphasizedSeriesIndexes","emphasizedDatapoints","duplicateDatapoints","totalSeries","length","yValueCounts","Map","firstTimeSeriesValues","values","closestTimestamp","seriesIdx","currentSeries","currentDataset","currentDatasetValues","lineSeries","currentSeriesName","name","toString","markerColor","color","datumIdx","nearbyTimeSeries","xValue","yValue","minPercentRange","percentRangeToCheck","Math","max","isClosestToCursor","isWithinPercentageRange","valueToCheck","baseValue","percentage","push","duplicateValuesCount","get","set","seriesIndex","dataIndex","seriesName","type","formattedY","date","x","y","legacyCheckforNearbySeries","timeSeries","xAxis","xValueMilliSeconds","notBlur","escapeConnect","getNearbySeriesData","mousePos","pinnedPos","showAllSeries","cursorTargetMatchesChart","target","currentParent","parentElement","currentGrandparent","chartDom","getDom","plotCanvas","chartModel","yInterval","getComponent","axis","scale","_interval","getYBuffer","legacyGetNearbySeriesData","chartData","pointInPixel","containPixel","convertFromPixel","range","lowerBound","upperBound","yBufferMin","adjustedBuffer"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/TimeSeriesTooltip/tooltip-model.ts"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { useEffect, useState } from 'react';\nimport { NearbySeriesArray } from './nearby-series';\n\nexport const TOOLTIP_MIN_WIDTH = 375;\nexport const TOOLTIP_MAX_WIDTH = 650;\nexport const TOOLTIP_MAX_HEIGHT = 650;\nexport const TOOLTIP_LABELS_MAX_WIDTH = TOOLTIP_MAX_WIDTH - 150;\nexport const TOOLTIP_ADJUST_Y_POS_MULTIPLIER = 0.75;\nexport const TOOLTIP_PADDING = 8;\n\nexport const FALLBACK_CHART_WIDTH = 750;\n\nexport const NEARBY_SERIES_DESCRIPTION = 'nearby series showing in tooltip';\nexport const EMPHASIZED_SERIES_DESCRIPTION = 'emphasized series showing as bold in tooltip';\n\nexport const TOOLTIP_BG_COLOR_FALLBACK = '#2E313E';\n\nexport const TOOLTIP_DATE_FORMAT = new Intl.DateTimeFormat(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n hour12: true,\n});\n\nexport const defaultCursorData = {\n coords: {\n plotCanvas: {\n x: 0,\n y: 0,\n },\n zrender: {\n x: 0,\n y: 0,\n },\n target: null,\n },\n chartWidth: 0,\n};\n\nexport const emptyTooltipData = {\n cursor: defaultCursorData,\n focusedSeries: null,\n};\n\nexport interface Coordinate {\n x: number;\n y: number;\n}\n\nexport interface CursorCoordinates {\n page: Coordinate;\n client: Coordinate;\n plotCanvas: Coordinate;\n zrender?: {\n x?: number;\n y?: number;\n };\n target: EventTarget | null;\n}\n\nexport interface CursorData {\n coords: CursorCoordinates | null;\n chartWidth?: number;\n}\n\nexport interface TooltipData {\n focusedSeries: NearbySeriesArray | null;\n cursor: CursorData;\n}\n\ntype ZREventProperties = {\n zrX?: number;\n zrY?: number;\n zrDelta?: number;\n zrEventControl?: 'no_globalout' | 'only_globalout';\n zrByTouch?: boolean;\n};\n\nexport type ZRRawMouseEvent = MouseEvent & ZREventProperties;\n\nexport const useMousePosition = (): CursorData['coords'] => {\n const [coords, setCoords] = useState<CursorData['coords']>(null);\n\n useEffect(() => {\n const setFromEvent = (e: ZRRawMouseEvent) => {\n return setCoords({\n page: {\n x: e.pageX,\n y: e.pageY,\n },\n client: {\n x: e.clientX,\n y: e.clientY,\n },\n plotCanvas: {\n x: e.offsetX,\n y: e.offsetY,\n },\n zrender: {\n // echarts canvas coordinates added automatically by zrender\n // zrX and zrY are similar to offsetX and offsetY but they return undefined when not hovering over a chart canvas\n x: e.zrX,\n y: e.zrY,\n },\n // necessary to check whether cursor target matches correct chart canvas (since each chart has its own mousemove listener)\n target: e.target,\n });\n };\n window.addEventListener('mousemove', setFromEvent);\n\n return () => {\n window.removeEventListener('mousemove', setFromEvent);\n };\n }, []);\n\n return coords;\n};\n\nexport type TooltipConfig = {\n wrapLabels: boolean;\n hidden?: boolean;\n enablePinning?: boolean;\n};\n\nexport const DEFAULT_TOOLTIP_CONFIG: TooltipConfig = {\n wrapLabels: true,\n enablePinning: true,\n};\n\nexport const PIN_TOOLTIP_HELP_TEXT = 'Click chart to pin';\n\nexport const UNPIN_TOOLTIP_HELP_TEXT = 'Click chart to unpin';\n"],"names":["useEffect","useState","TOOLTIP_MIN_WIDTH","TOOLTIP_MAX_WIDTH","TOOLTIP_MAX_HEIGHT","TOOLTIP_LABELS_MAX_WIDTH","TOOLTIP_ADJUST_Y_POS_MULTIPLIER","TOOLTIP_PADDING","FALLBACK_CHART_WIDTH","NEARBY_SERIES_DESCRIPTION","EMPHASIZED_SERIES_DESCRIPTION","TOOLTIP_BG_COLOR_FALLBACK","TOOLTIP_DATE_FORMAT","Intl","DateTimeFormat","undefined","year","month","day","hour","minute","second","hour12","defaultCursorData","coords","plotCanvas","x","y","zrender","target","chartWidth","emptyTooltipData","cursor","focusedSeries","useMousePosition","setCoords","setFromEvent","e","page","pageX","pageY","client","clientX","clientY","offsetX","offsetY","zrX","zrY","window","addEventListener","removeEventListener","DEFAULT_TOOLTIP_CONFIG","wrapLabels","enablePinning","PIN_TOOLTIP_HELP_TEXT","UNPIN_TOOLTIP_HELP_TEXT"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/TimeSeriesTooltip/tooltip-model.ts"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { useEffect, useState } from 'react';\nimport { NearbySeriesArray } from './nearby-series';\n\nexport const TOOLTIP_MIN_WIDTH = 375;\nexport const TOOLTIP_MAX_WIDTH = 650;\nexport const TOOLTIP_MAX_HEIGHT = 650;\nexport const TOOLTIP_LABELS_MAX_WIDTH = TOOLTIP_MAX_WIDTH - 150;\nexport const TOOLTIP_ADJUST_Y_POS_MULTIPLIER = 0.75;\nexport const TOOLTIP_PADDING = 8;\n\nexport const FALLBACK_CHART_WIDTH = 750;\n\nexport const NEARBY_SERIES_DESCRIPTION = 'nearby series showing in tooltip';\nexport const EMPHASIZED_SERIES_DESCRIPTION = 'emphasized series showing as bold in tooltip';\n\nexport const TOOLTIP_BG_COLOR_FALLBACK = '#2E313E';\n\nexport const TOOLTIP_DATE_FORMAT = new Intl.DateTimeFormat(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n hour12: true,\n});\n\nexport const defaultCursorData = {\n coords: {\n plotCanvas: {\n x: 0,\n y: 0,\n },\n zrender: {\n x: 0,\n y: 0,\n },\n target: null,\n },\n chartWidth: 0,\n};\n\nexport const emptyTooltipData = {\n cursor: defaultCursorData,\n focusedSeries: null,\n};\n\nexport interface Coordinate {\n x: number;\n y: number;\n}\n\nexport interface CursorCoordinates {\n page: Coordinate;\n client: Coordinate;\n plotCanvas: Coordinate;\n zrender?: {\n x?: number;\n y?: number;\n };\n target: EventTarget | null;\n}\n\nexport interface CursorData {\n coords: CursorCoordinates | null;\n chartWidth?: number;\n}\n\nexport interface TooltipData {\n focusedSeries: NearbySeriesArray | null;\n cursor: CursorData;\n}\n\ntype ZREventProperties = {\n zrX?: number;\n zrY?: number;\n zrDelta?: number;\n zrEventControl?: 'no_globalout' | 'only_globalout';\n zrByTouch?: boolean;\n};\n\nexport type ZRRawMouseEvent = MouseEvent & ZREventProperties;\n\nexport const useMousePosition = (): CursorData['coords'] => {\n const [coords, setCoords] = useState<CursorData['coords']>(null);\n\n useEffect(() => {\n const setFromEvent = (e: ZRRawMouseEvent) => {\n return setCoords({\n page: {\n x: e.pageX,\n y: e.pageY,\n },\n client: {\n x: e.clientX,\n y: e.clientY,\n },\n plotCanvas: {\n x: e.offsetX,\n y: e.offsetY,\n },\n zrender: {\n // echarts canvas coordinates added automatically by zrender\n // zrX and zrY are similar to offsetX and offsetY but they return undefined when not hovering over a chart canvas\n x: e.zrX,\n y: e.zrY,\n },\n // necessary to check whether cursor target matches correct chart canvas (since each chart has its own mousemove listener)\n target: e.target,\n });\n };\n window.addEventListener('mousemove', setFromEvent);\n\n return () => {\n window.removeEventListener('mousemove', setFromEvent);\n };\n }, []);\n\n return coords;\n};\n\nexport type TooltipConfig = {\n wrapLabels: boolean;\n hidden?: boolean;\n enablePinning?: boolean;\n};\n\nexport const DEFAULT_TOOLTIP_CONFIG: TooltipConfig = {\n wrapLabels: true,\n enablePinning: true,\n};\n\nexport const PIN_TOOLTIP_HELP_TEXT = 'Click chart to pin';\n\nexport const UNPIN_TOOLTIP_HELP_TEXT = 'Click chart to unpin';\n"],"names":["useEffect","useState","TOOLTIP_MIN_WIDTH","TOOLTIP_MAX_WIDTH","TOOLTIP_MAX_HEIGHT","TOOLTIP_LABELS_MAX_WIDTH","TOOLTIP_ADJUST_Y_POS_MULTIPLIER","TOOLTIP_PADDING","FALLBACK_CHART_WIDTH","NEARBY_SERIES_DESCRIPTION","EMPHASIZED_SERIES_DESCRIPTION","TOOLTIP_BG_COLOR_FALLBACK","TOOLTIP_DATE_FORMAT","Intl","DateTimeFormat","undefined","year","month","day","hour","minute","second","hour12","defaultCursorData","coords","plotCanvas","x","y","zrender","target","chartWidth","emptyTooltipData","cursor","focusedSeries","useMousePosition","setCoords","setFromEvent","e","page","pageX","pageY","client","clientX","clientY","offsetX","offsetY","zrX","zrY","window","addEventListener","removeEventListener","DEFAULT_TOOLTIP_CONFIG","wrapLabels","enablePinning","PIN_TOOLTIP_HELP_TEXT","UNPIN_TOOLTIP_HELP_TEXT"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,SAASA,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AAG5C,OAAO,MAAMC,oBAAoB,IAAI;AACrC,OAAO,MAAMC,oBAAoB,IAAI;AACrC,OAAO,MAAMC,qBAAqB,IAAI;AACtC,OAAO,MAAMC,2BAA2BF,oBAAoB,IAAI;AAChE,OAAO,MAAMG,kCAAkC,KAAK;AACpD,OAAO,MAAMC,kBAAkB,EAAE;AAEjC,OAAO,MAAMC,uBAAuB,IAAI;AAExC,OAAO,MAAMC,4BAA4B,mCAAmC;AAC5E,OAAO,MAAMC,gCAAgC,+CAA+C;AAE5F,OAAO,MAAMC,4BAA4B,UAAU;AAEnD,OAAO,MAAMC,sBAAsB,IAAIC,KAAKC,eAAeC,WAAW;IACpEC,MAAM;IACNC,OAAO;IACPC,KAAK;IACLC,MAAM;IACNC,QAAQ;IACRC,QAAQ;IACRC,QAAQ;AACV,GAAG;AAEH,OAAO,MAAMC,oBAAoB;IAC/BC,QAAQ;QACNC,YAAY;YACVC,GAAG;YACHC,GAAG;QACL;QACAC,SAAS;YACPF,GAAG;YACHC,GAAG;QACL;QACAE,QAAQ;IACV;IACAC,YAAY;AACd,EAAE;AAEF,OAAO,MAAMC,mBAAmB;IAC9BC,QAAQT;IACRU,eAAe;AACjB,EAAE;AAsCF,OAAO,MAAMC,mBAAmB;IAC9B,MAAM,CAACV,QAAQW,UAAU,GAAGlC,SAA+B;IAE3DD,UAAU;QACR,MAAMoC,eAAe,CAACC;YACpB,OAAOF,UAAU;gBACfG,MAAM;oBACJZ,GAAGW,EAAEE;oBACLZ,GAAGU,EAAEG;gBACP;gBACAC,QAAQ;oBACNf,GAAGW,EAAEK;oBACLf,GAAGU,EAAEM;gBACP;gBACAlB,YAAY;oBACVC,GAAGW,EAAEO;oBACLjB,GAAGU,EAAEQ;gBACP;gBACAjB,SAAS;oBACP,4DAA4D;oBAC5D,iHAAiH;oBACjHF,GAAGW,EAAES;oBACLnB,GAAGU,EAAEU;gBACP;gBACA,0HAA0H;gBAC1HlB,QAAQQ,EAAER;YACZ;QACF;QACAmB,OAAOC,iBAAiB,aAAab;QAErC,OAAO;YACLY,OAAOE,oBAAoB,aAAad;QAC1C;IACF,GAAG,EAAE;IAEL,OAAOZ;AACT,EAAE;AAQF,OAAO,MAAM2B,yBAAwC;IACnDC,YAAY;IACZC,eAAe;AACjB,EAAE;AAEF,OAAO,MAAMC,wBAAwB,qBAAqB;AAE1D,OAAO,MAAMC,0BAA0B,uBAAuB"}
@@ -53,9 +53,9 @@ import { TOOLTIP_MAX_WIDTH, TOOLTIP_MAX_HEIGHT, TOOLTIP_MIN_WIDTH, TOOLTIP_ADJUS
53
53
  /**
54
54
  * Helper for tooltip positioning styles
55
55
  */ export function getTooltipStyles(theme, pinnedPos, maxHeight) {
56
- var ref;
56
+ var _theme_palette_designSystem;
57
57
  const adjustedMaxHeight = maxHeight ? maxHeight - TOOLTIP_PADDING : undefined;
58
- var ref1;
58
+ var _theme_palette_designSystem_grey_;
59
59
  return {
60
60
  minWidth: TOOLTIP_MIN_WIDTH,
61
61
  maxWidth: TOOLTIP_MAX_WIDTH,
@@ -64,7 +64,7 @@ import { TOOLTIP_MAX_WIDTH, TOOLTIP_MAX_HEIGHT, TOOLTIP_MIN_WIDTH, TOOLTIP_ADJUS
64
64
  position: 'absolute',
65
65
  top: 0,
66
66
  left: 0,
67
- backgroundColor: (ref1 = (ref = theme.palette.designSystem) === null || ref === void 0 ? void 0 : ref.grey[800]) !== null && ref1 !== void 0 ? ref1 : TOOLTIP_BG_COLOR_FALLBACK,
67
+ backgroundColor: (_theme_palette_designSystem_grey_ = (_theme_palette_designSystem = theme.palette.designSystem) === null || _theme_palette_designSystem === void 0 ? void 0 : _theme_palette_designSystem.grey[800]) !== null && _theme_palette_designSystem_grey_ !== void 0 ? _theme_palette_designSystem_grey_ : TOOLTIP_BG_COLOR_FALLBACK,
68
68
  borderRadius: '6px',
69
69
  color: '#fff',
70
70
  fontSize: '11px',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/TimeSeriesTooltip/utils.ts"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { Theme } from '@mui/material';\nimport {\n CursorCoordinates,\n CursorData,\n TOOLTIP_MAX_WIDTH,\n TOOLTIP_MAX_HEIGHT,\n TOOLTIP_MIN_WIDTH,\n TOOLTIP_ADJUST_Y_POS_MULTIPLIER,\n TOOLTIP_BG_COLOR_FALLBACK,\n TOOLTIP_PADDING,\n} from './tooltip-model';\n\n/**\n * Determine position of tooltip depending on chart dimensions and the number of focused series\n */\nexport function assembleTransform(\n mousePos: CursorData['coords'],\n chartWidth: number,\n pinnedPos: CursorCoordinates | null,\n tooltipHeight: number,\n tooltipWidth: number,\n containerElement?: Element | null\n) {\n if (mousePos === null) {\n return 'translate3d(0, 0)';\n }\n\n const cursorPaddingX = 32;\n const cursorPaddingY = 16;\n\n if (pinnedPos !== null) {\n mousePos = pinnedPos;\n }\n\n // By default, tooltip is located in a Portal attached to the body.\n // Using page coordinates instead of viewport ensures the tooltip is\n // absolutely positioned correctly as the user scrolls\n let x = mousePos.page.x;\n let y = mousePos.page.y + cursorPaddingY;\n\n // If containerElement is defined, tooltip is attached to the containerElement instead.\n let containerRect;\n if (containerElement) {\n // get the container's position relative to viewport\n containerRect = containerElement.getBoundingClientRect();\n // calculate the mouse position relative to container\n x = x - containerRect.left + containerElement.scrollLeft;\n y = y - containerRect.top + containerElement.scrollTop;\n }\n\n if (mousePos.client.y + tooltipHeight + cursorPaddingY > window.innerHeight) {\n // adjust so tooltip does not get cut off at bottom of chart\n // multiplier ensures tooltip isn't overly adjusted and gets cut off at the top of the viewport\n y = y - tooltipHeight * TOOLTIP_ADJUST_Y_POS_MULTIPLIER;\n\n // If y is now above of the top of containerElement, set y close to 0 so tooltip does not get cut off\n if (containerRect && y < containerRect.top) {\n y = TOOLTIP_PADDING / 2; // leaves room for some padding around tooltip\n }\n }\n\n // use tooltip width to determine when to repos from right to left\n const xPosAdjustThreshold = chartWidth - tooltipWidth * 0.9;\n\n // reposition so tooltip is never too close to right side of chart or left side of browser window\n return mousePos.plotCanvas.x > xPosAdjustThreshold && x > TOOLTIP_MAX_WIDTH\n ? `translate3d(${x - cursorPaddingX}px, ${y}px, 0) translateX(-100%)`\n : `translate3d(${x + cursorPaddingX}px, ${y}px, 0)`;\n}\n\n/**\n * Helper for tooltip positioning styles\n */\nexport function getTooltipStyles(theme: Theme, pinnedPos: CursorCoordinates | null, maxHeight?: number) {\n const adjustedMaxHeight = maxHeight ? maxHeight - TOOLTIP_PADDING : undefined;\n return {\n minWidth: TOOLTIP_MIN_WIDTH,\n maxWidth: TOOLTIP_MAX_WIDTH,\n maxHeight: adjustedMaxHeight ?? TOOLTIP_MAX_HEIGHT,\n padding: 0,\n position: 'absolute',\n top: 0,\n left: 0,\n backgroundColor: theme.palette.designSystem?.grey[800] ?? TOOLTIP_BG_COLOR_FALLBACK,\n borderRadius: '6px',\n color: '#fff',\n fontSize: '11px',\n visibility: 'visible',\n opacity: 1,\n transition: 'all 0.1s ease-out',\n // Ensure pinned tooltip shows behind edit panel drawer and sticky header\n zIndex: pinnedPos !== null ? 'auto' : theme.zIndex.tooltip,\n overflow: 'hidden',\n '&:hover': {\n overflowY: 'auto',\n },\n };\n}\n"],"names":["TOOLTIP_MAX_WIDTH","TOOLTIP_MAX_HEIGHT","TOOLTIP_MIN_WIDTH","TOOLTIP_ADJUST_Y_POS_MULTIPLIER","TOOLTIP_BG_COLOR_FALLBACK","TOOLTIP_PADDING","assembleTransform","mousePos","chartWidth","pinnedPos","tooltipHeight","tooltipWidth","containerElement","cursorPaddingX","cursorPaddingY","x","page","y","containerRect","getBoundingClientRect","left","scrollLeft","top","scrollTop","client","window","innerHeight","xPosAdjustThreshold","plotCanvas","getTooltipStyles","theme","maxHeight","adjustedMaxHeight","undefined","minWidth","maxWidth","padding","position","backgroundColor","palette","designSystem","grey","borderRadius","color","fontSize","visibility","opacity","transition","zIndex","tooltip","overflow","overflowY"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAGjC,SAGEA,iBAAiB,EACjBC,kBAAkB,EAClBC,iBAAiB,EACjBC,+BAA+B,EAC/BC,yBAAyB,EACzBC,eAAe,QACV,iBAAiB,CAAC;AAEzB;;CAEC,GACD,OAAO,SAASC,iBAAiB,CAC/BC,QAA8B,EAC9BC,UAAkB,EAClBC,SAAmC,EACnCC,aAAqB,EACrBC,YAAoB,EACpBC,gBAAiC,EACjC;IACA,IAAIL,QAAQ,KAAK,IAAI,EAAE;QACrB,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,MAAMM,cAAc,GAAG,EAAE,AAAC;IAC1B,MAAMC,cAAc,GAAG,EAAE,AAAC;IAE1B,IAAIL,SAAS,KAAK,IAAI,EAAE;QACtBF,QAAQ,GAAGE,SAAS,CAAC;IACvB,CAAC;IAED,mEAAmE;IACnE,oEAAoE;IACpE,sDAAsD;IACtD,IAAIM,CAAC,GAAGR,QAAQ,CAACS,IAAI,CAACD,CAAC,AAAC;IACxB,IAAIE,CAAC,GAAGV,QAAQ,CAACS,IAAI,CAACC,CAAC,GAAGH,cAAc,AAAC;IAEzC,uFAAuF;IACvF,IAAII,aAAa,AAAC;IAClB,IAAIN,gBAAgB,EAAE;QACpB,oDAAoD;QACpDM,aAAa,GAAGN,gBAAgB,CAACO,qBAAqB,EAAE,CAAC;QACzD,qDAAqD;QACrDJ,CAAC,GAAGA,CAAC,GAAGG,aAAa,CAACE,IAAI,GAAGR,gBAAgB,CAACS,UAAU,CAAC;QACzDJ,CAAC,GAAGA,CAAC,GAAGC,aAAa,CAACI,GAAG,GAAGV,gBAAgB,CAACW,SAAS,CAAC;IACzD,CAAC;IAED,IAAIhB,QAAQ,CAACiB,MAAM,CAACP,CAAC,GAAGP,aAAa,GAAGI,cAAc,GAAGW,MAAM,CAACC,WAAW,EAAE;QAC3E,4DAA4D;QAC5D,+FAA+F;QAC/FT,CAAC,GAAGA,CAAC,GAAGP,aAAa,GAAGP,+BAA+B,CAAC;QAExD,qGAAqG;QACrG,IAAIe,aAAa,IAAID,CAAC,GAAGC,aAAa,CAACI,GAAG,EAAE;YAC1CL,CAAC,GAAGZ,eAAe,GAAG,CAAC,CAAC,CAAC,8CAA8C;QACzE,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,MAAMsB,mBAAmB,GAAGnB,UAAU,GAAGG,YAAY,GAAG,GAAG,AAAC;IAE5D,iGAAiG;IACjG,OAAOJ,QAAQ,CAACqB,UAAU,CAACb,CAAC,GAAGY,mBAAmB,IAAIZ,CAAC,GAAGf,iBAAiB,GACvE,CAAC,YAAY,EAAEe,CAAC,GAAGF,cAAc,CAAC,IAAI,EAAEI,CAAC,CAAC,wBAAwB,CAAC,GACnE,CAAC,YAAY,EAAEF,CAAC,GAAGF,cAAc,CAAC,IAAI,EAAEI,CAAC,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC;AAED;;CAEC,GACD,OAAO,SAASY,gBAAgB,CAACC,KAAY,EAAErB,SAAmC,EAAEsB,SAAkB,EAAE;QAUnFD,GAA0B;IAT7C,MAAME,iBAAiB,GAAGD,SAAS,GAAGA,SAAS,GAAG1B,eAAe,GAAG4B,SAAS,AAAC;QAS3DH,IAAqC;IARxD,OAAO;QACLI,QAAQ,EAAEhC,iBAAiB;QAC3BiC,QAAQ,EAAEnC,iBAAiB;QAC3B+B,SAAS,EAAEC,iBAAiB,aAAjBA,iBAAiB,cAAjBA,iBAAiB,GAAI/B,kBAAkB;QAClDmC,OAAO,EAAE,CAAC;QACVC,QAAQ,EAAE,UAAU;QACpBf,GAAG,EAAE,CAAC;QACNF,IAAI,EAAE,CAAC;QACPkB,eAAe,EAAER,CAAAA,IAAqC,GAArCA,CAAAA,GAA0B,GAA1BA,KAAK,CAACS,OAAO,CAACC,YAAY,cAA1BV,GAA0B,WAAM,GAAhCA,KAAAA,CAAgC,GAAhCA,GAA0B,CAAEW,IAAI,CAAC,GAAG,CAAC,cAArCX,IAAqC,cAArCA,IAAqC,GAAI1B,yBAAyB;QACnFsC,YAAY,EAAE,KAAK;QACnBC,KAAK,EAAE,MAAM;QACbC,QAAQ,EAAE,MAAM;QAChBC,UAAU,EAAE,SAAS;QACrBC,OAAO,EAAE,CAAC;QACVC,UAAU,EAAE,mBAAmB;QAC/B,yEAAyE;QACzEC,MAAM,EAAEvC,SAAS,KAAK,IAAI,GAAG,MAAM,GAAGqB,KAAK,CAACkB,MAAM,CAACC,OAAO;QAC1DC,QAAQ,EAAE,QAAQ;QAClB,SAAS,EAAE;YACTC,SAAS,EAAE,MAAM;SAClB;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"sources":["../../src/TimeSeriesTooltip/utils.ts"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { Theme } from '@mui/material';\nimport {\n CursorCoordinates,\n CursorData,\n TOOLTIP_MAX_WIDTH,\n TOOLTIP_MAX_HEIGHT,\n TOOLTIP_MIN_WIDTH,\n TOOLTIP_ADJUST_Y_POS_MULTIPLIER,\n TOOLTIP_BG_COLOR_FALLBACK,\n TOOLTIP_PADDING,\n} from './tooltip-model';\n\n/**\n * Determine position of tooltip depending on chart dimensions and the number of focused series\n */\nexport function assembleTransform(\n mousePos: CursorData['coords'],\n chartWidth: number,\n pinnedPos: CursorCoordinates | null,\n tooltipHeight: number,\n tooltipWidth: number,\n containerElement?: Element | null\n) {\n if (mousePos === null) {\n return 'translate3d(0, 0)';\n }\n\n const cursorPaddingX = 32;\n const cursorPaddingY = 16;\n\n if (pinnedPos !== null) {\n mousePos = pinnedPos;\n }\n\n // By default, tooltip is located in a Portal attached to the body.\n // Using page coordinates instead of viewport ensures the tooltip is\n // absolutely positioned correctly as the user scrolls\n let x = mousePos.page.x;\n let y = mousePos.page.y + cursorPaddingY;\n\n // If containerElement is defined, tooltip is attached to the containerElement instead.\n let containerRect;\n if (containerElement) {\n // get the container's position relative to viewport\n containerRect = containerElement.getBoundingClientRect();\n // calculate the mouse position relative to container\n x = x - containerRect.left + containerElement.scrollLeft;\n y = y - containerRect.top + containerElement.scrollTop;\n }\n\n if (mousePos.client.y + tooltipHeight + cursorPaddingY > window.innerHeight) {\n // adjust so tooltip does not get cut off at bottom of chart\n // multiplier ensures tooltip isn't overly adjusted and gets cut off at the top of the viewport\n y = y - tooltipHeight * TOOLTIP_ADJUST_Y_POS_MULTIPLIER;\n\n // If y is now above of the top of containerElement, set y close to 0 so tooltip does not get cut off\n if (containerRect && y < containerRect.top) {\n y = TOOLTIP_PADDING / 2; // leaves room for some padding around tooltip\n }\n }\n\n // use tooltip width to determine when to repos from right to left\n const xPosAdjustThreshold = chartWidth - tooltipWidth * 0.9;\n\n // reposition so tooltip is never too close to right side of chart or left side of browser window\n return mousePos.plotCanvas.x > xPosAdjustThreshold && x > TOOLTIP_MAX_WIDTH\n ? `translate3d(${x - cursorPaddingX}px, ${y}px, 0) translateX(-100%)`\n : `translate3d(${x + cursorPaddingX}px, ${y}px, 0)`;\n}\n\n/**\n * Helper for tooltip positioning styles\n */\nexport function getTooltipStyles(theme: Theme, pinnedPos: CursorCoordinates | null, maxHeight?: number) {\n const adjustedMaxHeight = maxHeight ? maxHeight - TOOLTIP_PADDING : undefined;\n return {\n minWidth: TOOLTIP_MIN_WIDTH,\n maxWidth: TOOLTIP_MAX_WIDTH,\n maxHeight: adjustedMaxHeight ?? TOOLTIP_MAX_HEIGHT,\n padding: 0,\n position: 'absolute',\n top: 0,\n left: 0,\n backgroundColor: theme.palette.designSystem?.grey[800] ?? TOOLTIP_BG_COLOR_FALLBACK,\n borderRadius: '6px',\n color: '#fff',\n fontSize: '11px',\n visibility: 'visible',\n opacity: 1,\n transition: 'all 0.1s ease-out',\n // Ensure pinned tooltip shows behind edit panel drawer and sticky header\n zIndex: pinnedPos !== null ? 'auto' : theme.zIndex.tooltip,\n overflow: 'hidden',\n '&:hover': {\n overflowY: 'auto',\n },\n };\n}\n"],"names":["TOOLTIP_MAX_WIDTH","TOOLTIP_MAX_HEIGHT","TOOLTIP_MIN_WIDTH","TOOLTIP_ADJUST_Y_POS_MULTIPLIER","TOOLTIP_BG_COLOR_FALLBACK","TOOLTIP_PADDING","assembleTransform","mousePos","chartWidth","pinnedPos","tooltipHeight","tooltipWidth","containerElement","cursorPaddingX","cursorPaddingY","x","page","y","containerRect","getBoundingClientRect","left","scrollLeft","top","scrollTop","client","window","innerHeight","xPosAdjustThreshold","plotCanvas","getTooltipStyles","theme","maxHeight","adjustedMaxHeight","undefined","minWidth","maxWidth","padding","position","backgroundColor","palette","designSystem","grey","borderRadius","color","fontSize","visibility","opacity","transition","zIndex","tooltip","overflow","overflowY"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAGjC,SAGEA,iBAAiB,EACjBC,kBAAkB,EAClBC,iBAAiB,EACjBC,+BAA+B,EAC/BC,yBAAyB,EACzBC,eAAe,QACV,kBAAkB;AAEzB;;CAEC,GACD,OAAO,SAASC,kBACdC,QAA8B,EAC9BC,UAAkB,EAClBC,SAAmC,EACnCC,aAAqB,EACrBC,YAAoB,EACpBC,gBAAiC;IAEjC,IAAIL,aAAa,MAAM;QACrB,OAAO;IACT;IAEA,MAAMM,iBAAiB;IACvB,MAAMC,iBAAiB;IAEvB,IAAIL,cAAc,MAAM;QACtBF,WAAWE;IACb;IAEA,mEAAmE;IACnE,oEAAoE;IACpE,sDAAsD;IACtD,IAAIM,IAAIR,SAASS,KAAKD;IACtB,IAAIE,IAAIV,SAASS,KAAKC,IAAIH;IAE1B,uFAAuF;IACvF,IAAII;IACJ,IAAIN,kBAAkB;QACpB,oDAAoD;QACpDM,gBAAgBN,iBAAiBO;QACjC,qDAAqD;QACrDJ,IAAIA,IAAIG,cAAcE,OAAOR,iBAAiBS;QAC9CJ,IAAIA,IAAIC,cAAcI,MAAMV,iBAAiBW;IAC/C;IAEA,IAAIhB,SAASiB,OAAOP,IAAIP,gBAAgBI,iBAAiBW,OAAOC,aAAa;QAC3E,4DAA4D;QAC5D,+FAA+F;QAC/FT,IAAIA,IAAIP,gBAAgBP;QAExB,qGAAqG;QACrG,IAAIe,iBAAiBD,IAAIC,cAAcI,KAAK;YAC1CL,IAAIZ,kBAAkB,GAAG,8CAA8C;QACzE;IACF;IAEA,kEAAkE;IAClE,MAAMsB,sBAAsBnB,aAAaG,eAAe;IAExD,iGAAiG;IACjG,OAAOJ,SAASqB,WAAWb,IAAIY,uBAAuBZ,IAAIf,oBACtD,CAAC,YAAY,EAAEe,IAAIF,eAAe,IAAI,EAAEI,EAAE,wBAAwB,CAAC,GACnE,CAAC,YAAY,EAAEF,IAAIF,eAAe,IAAI,EAAEI,EAAE,MAAM,CAAC;AACvD;AAEA;;CAEC,GACD,OAAO,SAASY,iBAAiBC,KAAY,EAAErB,SAAmC,EAAEsB,SAAkB;QAUjFD;IATnB,MAAME,oBAAoBD,YAAYA,YAAY1B,kBAAkB4B;QASjDH;IARnB,OAAO;QACLI,UAAUhC;QACViC,UAAUnC;QACV+B,WAAWC,8BAAAA,+BAAAA,oBAAqB/B;QAChCmC,SAAS;QACTC,UAAU;QACVf,KAAK;QACLF,MAAM;QACNkB,iBAAiBR,CAAAA,oCAAAA,CAAAA,8BAAAA,MAAMS,QAAQC,0BAAdV,yCAAAA,KAAAA,IAAAA,4BAA4BW,IAAI,CAAC,IAAI,cAArCX,+CAAAA,oCAAyC1B;QAC1DsC,cAAc;QACdC,OAAO;QACPC,UAAU;QACVC,YAAY;QACZC,SAAS;QACTC,YAAY;QACZ,yEAAyE;QACzEC,QAAQvC,cAAc,OAAO,SAASqB,MAAMkB,OAAOC;QACnDC,UAAU;QACV,WAAW;YACTC,WAAW;QACb;IACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/YAxisLabel.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { Box, Typography } from '@mui/material';\n\ninterface YAxisLabelProps {\n name: string;\n height: number;\n}\n\nexport function YAxisLabel({ name, height }: YAxisLabelProps) {\n return (\n <Box\n sx={{\n display: 'inline-block',\n maxWidth: height, // allows rotated text to truncate instead of causing overlap\n position: 'absolute',\n top: `calc(${height}px / 2)`,\n transform: 'translateX(-50%) rotate(-90deg)',\n transformOrigin: 'top',\n textAlign: 'center',\n zIndex: 1,\n }}\n >\n <Typography\n variant=\"body1\"\n aria-label=\"y axis label\"\n sx={{\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {name}\n </Typography>\n </Box>\n );\n}\n"],"names":["Box","Typography","YAxisLabel","name","height","sx","display","maxWidth","position","top","transform","transformOrigin","textAlign","zIndex","variant","aria-label","whiteSpace","overflow","textOverflow"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC;AAAA,SAASA,GAAG,EAAEC,UAAU,QAAQ,eAAe,CAAC;AAOhD,OAAO,SAASC,UAAU,CAAC,EAAEC,IAAI,CAAA,EAAEC,MAAM,CAAA,EAAmB,EAAE;IAC5D,qBACE,KAACJ,GAAG;QACFK,EAAE,EAAE;YACFC,OAAO,EAAE,cAAc;YACvBC,QAAQ,EAAEH,MAAM;YAChBI,QAAQ,EAAE,UAAU;YACpBC,GAAG,EAAE,CAAC,KAAK,EAAEL,MAAM,CAAC,OAAO,CAAC;YAC5BM,SAAS,EAAE,iCAAiC;YAC5CC,eAAe,EAAE,KAAK;YACtBC,SAAS,EAAE,QAAQ;YACnBC,MAAM,EAAE,CAAC;SACV;kBAED,cAAA,KAACZ,UAAU;YACTa,OAAO,EAAC,OAAO;YACfC,YAAU,EAAC,cAAc;YACzBV,EAAE,EAAE;gBACFW,UAAU,EAAE,QAAQ;gBACpBC,QAAQ,EAAE,QAAQ;gBAClBC,YAAY,EAAE,UAAU;aACzB;sBAEAf,IAAI;UACM;MACT,CACN;AACJ,CAAC"}
1
+ {"version":3,"sources":["../src/YAxisLabel.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { Box, Typography } from '@mui/material';\n\ninterface YAxisLabelProps {\n name: string;\n height: number;\n}\n\nexport function YAxisLabel({ name, height }: YAxisLabelProps) {\n return (\n <Box\n sx={{\n display: 'inline-block',\n maxWidth: height, // allows rotated text to truncate instead of causing overlap\n position: 'absolute',\n top: `calc(${height}px / 2)`,\n transform: 'translateX(-50%) rotate(-90deg)',\n transformOrigin: 'top',\n textAlign: 'center',\n zIndex: 1,\n }}\n >\n <Typography\n variant=\"body1\"\n aria-label=\"y axis label\"\n sx={{\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {name}\n </Typography>\n </Box>\n );\n}\n"],"names":["Box","Typography","YAxisLabel","name","height","sx","display","maxWidth","position","top","transform","transformOrigin","textAlign","zIndex","variant","aria-label","whiteSpace","overflow","textOverflow"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;;AAEjC,SAASA,GAAG,EAAEC,UAAU,QAAQ,gBAAgB;AAOhD,OAAO,SAASC,WAAW,EAAEC,KAAI,EAAEC,OAAM,EAAmB;IAC1D,qBACE,KAACJ;QACCK,IAAI;YACFC,SAAS;YACTC,UAAUH;YACVI,UAAU;YACVC,KAAK,CAAC,KAAK,EAAEL,OAAO,OAAO,CAAC;YAC5BM,WAAW;YACXC,iBAAiB;YACjBC,WAAW;YACXC,QAAQ;QACV;kBAEA,cAAA,KAACZ;YACCa,SAAQ;YACRC,cAAW;YACXV,IAAI;gBACFW,YAAY;gBACZC,UAAU;gBACVC,cAAc;YAChB;sBAECf;;;AAIT"}