@perses-dev/components 0.0.0-snapshot-time-chart-rewrite-4667058 → 0.0.0-snapshot-panel-extra-content-2-2767e21

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 (130) hide show
  1. package/README.md +1 -0
  2. package/dist/BarChart/BarChart.d.ts +16 -0
  3. package/dist/BarChart/BarChart.d.ts.map +1 -0
  4. package/dist/BarChart/BarChart.js +123 -0
  5. package/dist/BarChart/BarChart.js.map +1 -0
  6. package/dist/BarChart/index.d.ts +2 -0
  7. package/dist/BarChart/index.d.ts.map +1 -0
  8. package/dist/BarChart/index.js +15 -0
  9. package/dist/BarChart/index.js.map +1 -0
  10. package/dist/Dialog/DiscardChangesConfirmationDialog.d.ts +10 -0
  11. package/dist/Dialog/DiscardChangesConfirmationDialog.d.ts.map +1 -0
  12. package/dist/Dialog/DiscardChangesConfirmationDialog.js +47 -0
  13. package/dist/Dialog/DiscardChangesConfirmationDialog.js.map +1 -0
  14. package/dist/Dialog/index.d.ts +1 -0
  15. package/dist/Dialog/index.d.ts.map +1 -1
  16. package/dist/Dialog/index.js +1 -0
  17. package/dist/Dialog/index.js.map +1 -1
  18. package/dist/FontSizeSelector/FontSizeSelector.d.ts +8 -0
  19. package/dist/FontSizeSelector/FontSizeSelector.d.ts.map +1 -0
  20. package/dist/FontSizeSelector/FontSizeSelector.js +124 -0
  21. package/dist/FontSizeSelector/FontSizeSelector.js.map +1 -0
  22. package/dist/FontSizeSelector/index.d.ts +2 -0
  23. package/dist/FontSizeSelector/index.d.ts.map +1 -0
  24. package/dist/FontSizeSelector/index.js +15 -0
  25. package/dist/FontSizeSelector/index.js.map +1 -0
  26. package/dist/Legend/ListLegendItem.d.ts +1 -1
  27. package/dist/LineChart/LineChart.d.ts +2 -2
  28. package/dist/LineChart/LineChart.d.ts.map +1 -1
  29. package/dist/LineChart/LineChart.js +4 -3
  30. package/dist/LineChart/LineChart.js.map +1 -1
  31. package/dist/ModeSelector/ModeSelector.d.ts +9 -0
  32. package/dist/ModeSelector/ModeSelector.d.ts.map +1 -0
  33. package/dist/ModeSelector/ModeSelector.js +43 -0
  34. package/dist/ModeSelector/ModeSelector.js.map +1 -0
  35. package/dist/ModeSelector/index.d.ts +2 -0
  36. package/dist/ModeSelector/index.d.ts.map +1 -0
  37. package/dist/ModeSelector/index.js +15 -0
  38. package/dist/ModeSelector/index.js.map +1 -0
  39. package/dist/SortSelector/SortSelector.d.ts +8 -0
  40. package/dist/SortSelector/SortSelector.d.ts.map +1 -0
  41. package/dist/SortSelector/SortSelector.js +42 -0
  42. package/dist/SortSelector/SortSelector.js.map +1 -0
  43. package/dist/SortSelector/index.d.ts +2 -0
  44. package/dist/SortSelector/index.d.ts.map +1 -0
  45. package/dist/SortSelector/index.js +15 -0
  46. package/dist/SortSelector/index.js.map +1 -0
  47. package/dist/StatChart/StatChart.d.ts +2 -0
  48. package/dist/StatChart/StatChart.d.ts.map +1 -1
  49. package/dist/StatChart/StatChart.js +7 -5
  50. package/dist/StatChart/StatChart.js.map +1 -1
  51. package/dist/StatChart/calculateFontSize.d.ts +3 -1
  52. package/dist/StatChart/calculateFontSize.d.ts.map +1 -1
  53. package/dist/StatChart/calculateFontSize.js +5 -1
  54. package/dist/StatChart/calculateFontSize.js.map +1 -1
  55. package/dist/TimeChart/TimeChart.d.ts +3 -2
  56. package/dist/TimeChart/TimeChart.d.ts.map +1 -1
  57. package/dist/TimeChart/TimeChart.js +57 -17
  58. package/dist/TimeChart/TimeChart.js.map +1 -1
  59. package/dist/TimeSeriesTooltip/LineChartTooltip.d.ts +5 -0
  60. package/dist/TimeSeriesTooltip/LineChartTooltip.d.ts.map +1 -1
  61. package/dist/TimeSeriesTooltip/LineChartTooltip.js +12 -5
  62. package/dist/TimeSeriesTooltip/LineChartTooltip.js.map +1 -1
  63. package/dist/TimeSeriesTooltip/TimeChartTooltip.d.ts +8 -3
  64. package/dist/TimeSeriesTooltip/TimeChartTooltip.d.ts.map +1 -1
  65. package/dist/TimeSeriesTooltip/TimeChartTooltip.js +12 -5
  66. package/dist/TimeSeriesTooltip/TimeChartTooltip.js.map +1 -1
  67. package/dist/TimeSeriesTooltip/TooltipHeader.d.ts.map +1 -1
  68. package/dist/TimeSeriesTooltip/TooltipHeader.js +3 -5
  69. package/dist/TimeSeriesTooltip/TooltipHeader.js.map +1 -1
  70. package/dist/TimeSeriesTooltip/nearby-series.d.ts +1 -1
  71. package/dist/TimeSeriesTooltip/nearby-series.d.ts.map +1 -1
  72. package/dist/TimeSeriesTooltip/nearby-series.js +90 -102
  73. package/dist/TimeSeriesTooltip/nearby-series.js.map +1 -1
  74. package/dist/TimeSeriesTooltip/tooltip-model.d.ts +1 -0
  75. package/dist/TimeSeriesTooltip/tooltip-model.d.ts.map +1 -1
  76. package/dist/TimeSeriesTooltip/tooltip-model.js +1 -0
  77. package/dist/TimeSeriesTooltip/tooltip-model.js.map +1 -1
  78. package/dist/TimeSeriesTooltip/utils.d.ts +2 -2
  79. package/dist/TimeSeriesTooltip/utils.d.ts.map +1 -1
  80. package/dist/TimeSeriesTooltip/utils.js +22 -8
  81. package/dist/TimeSeriesTooltip/utils.js.map +1 -1
  82. package/dist/UnitSelector/UnitSelector.d.ts +2 -1
  83. package/dist/UnitSelector/UnitSelector.d.ts.map +1 -1
  84. package/dist/UnitSelector/UnitSelector.js +3 -2
  85. package/dist/UnitSelector/UnitSelector.js.map +1 -1
  86. package/dist/cjs/BarChart/BarChart.js +129 -0
  87. package/dist/cjs/BarChart/index.js +28 -0
  88. package/dist/cjs/Dialog/DiscardChangesConfirmationDialog.js +53 -0
  89. package/dist/cjs/Dialog/index.js +1 -0
  90. package/dist/cjs/FontSizeSelector/FontSizeSelector.js +130 -0
  91. package/dist/cjs/FontSizeSelector/index.js +28 -0
  92. package/dist/cjs/LineChart/LineChart.js +4 -3
  93. package/dist/cjs/ModeSelector/ModeSelector.js +49 -0
  94. package/dist/cjs/ModeSelector/index.js +28 -0
  95. package/dist/cjs/SortSelector/SortSelector.js +48 -0
  96. package/dist/cjs/SortSelector/index.js +28 -0
  97. package/dist/cjs/StatChart/StatChart.js +7 -5
  98. package/dist/cjs/StatChart/calculateFontSize.js +5 -1
  99. package/dist/cjs/TimeChart/TimeChart.js +59 -14
  100. package/dist/cjs/TimeSeriesTooltip/LineChartTooltip.js +11 -4
  101. package/dist/cjs/TimeSeriesTooltip/TimeChartTooltip.js +11 -4
  102. package/dist/cjs/TimeSeriesTooltip/TooltipHeader.js +3 -5
  103. package/dist/cjs/TimeSeriesTooltip/nearby-series.js +90 -102
  104. package/dist/cjs/TimeSeriesTooltip/tooltip-model.js +2 -0
  105. package/dist/cjs/TimeSeriesTooltip/utils.js +21 -7
  106. package/dist/cjs/UnitSelector/UnitSelector.js +3 -2
  107. package/dist/cjs/index.js +4 -0
  108. package/dist/cjs/model/graph.js +35 -3
  109. package/dist/cjs/utils/chart-actions.js +61 -1
  110. package/dist/cjs/utils/theme-gen.js +39 -7
  111. package/dist/index.d.ts +4 -0
  112. package/dist/index.d.ts.map +1 -1
  113. package/dist/index.js +4 -0
  114. package/dist/index.js.map +1 -1
  115. package/dist/model/graph.d.ts +14 -5
  116. package/dist/model/graph.d.ts.map +1 -1
  117. package/dist/model/graph.js +25 -0
  118. package/dist/model/graph.js.map +1 -1
  119. package/dist/model/theme.d.ts +5 -0
  120. package/dist/model/theme.d.ts.map +1 -1
  121. package/dist/model/theme.js.map +1 -1
  122. package/dist/utils/chart-actions.d.ts +3 -0
  123. package/dist/utils/chart-actions.d.ts.map +1 -1
  124. package/dist/utils/chart-actions.js +66 -0
  125. package/dist/utils/chart-actions.js.map +1 -1
  126. package/dist/utils/theme-gen.d.ts +6 -1
  127. package/dist/utils/theme-gen.d.ts.map +1 -1
  128. package/dist/utils/theme-gen.js +39 -7
  129. package/dist/utils/theme-gen.js.map +1 -1
  130. package/package.json +3 -3
@@ -13,19 +13,22 @@
13
13
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
14
  import { forwardRef, useImperativeHandle, useMemo, useRef, useState } from 'react';
15
15
  import { Box } from '@mui/material';
16
+ import merge from 'lodash/merge';
16
17
  import { utcToZonedTime } from 'date-fns-tz';
17
18
  import { getCommonTimeScale } from '@perses-dev/core';
18
19
  import { use } from 'echarts/core';
19
- import { LineChart as EChartsLineChart } from 'echarts/charts';
20
- import { GridComponent, DatasetComponent, DataZoomComponent, MarkAreaComponent, MarkLineComponent, MarkPointComponent, TitleComponent, ToolboxComponent, TooltipComponent, LegendComponent } from 'echarts/components';
20
+ import { LineChart as EChartsLineChart, BarChart as EChartsBarChart } from 'echarts/charts';
21
+ import { GridComponent, DatasetComponent, DataZoomComponent, MarkAreaComponent, MarkLineComponent, MarkPointComponent, TitleComponent, ToolboxComponent, TooltipComponent } from 'echarts/components';
21
22
  import { CanvasRenderer } from 'echarts/renderers';
22
23
  import { EChart } from '../EChart';
24
+ import { DEFAULT_PINNED_CROSSHAIR, PINNED_CROSSHAIR_SERIES_NAME } from '../model/graph';
23
25
  import { useChartsTheme } from '../context/ChartsThemeProvider';
24
- import { clearHighlightedSeries, enableDataZoom, getFormattedAxisLabel, getYAxes, restoreChart } from '../utils';
26
+ import { clearHighlightedSeries, enableDataZoom, getFormattedAxisLabel, getPointInGrid, getYAxes, restoreChart } from '../utils';
25
27
  import { TimeChartTooltip } from '../TimeSeriesTooltip';
26
28
  import { useTimeZone } from '../context/TimeZoneProvider';
27
29
  use([
28
30
  EChartsLineChart,
31
+ EChartsBarChart,
29
32
  GridComponent,
30
33
  DatasetComponent,
31
34
  DataZoomComponent,
@@ -35,10 +38,9 @@ use([
35
38
  TitleComponent,
36
39
  ToolboxComponent,
37
40
  TooltipComponent,
38
- LegendComponent,
39
41
  CanvasRenderer
40
42
  ]);
41
- export const TimeChart = /*#__PURE__*/ forwardRef(function TimeChart({ height , data , seriesMapping , timeScale: timeScaleProp , yAxis , unit , grid , tooltipConfig ={
43
+ export const TimeChart = /*#__PURE__*/ forwardRef(function TimeChart({ height , data , seriesMapping , timeScale: timeScaleProp , yAxis , unit , grid , isStackedBar =false , tooltipConfig ={
42
44
  wrapLabels: true
43
45
  } , noDataVariant ='message' , syncGroup , onDataZoom , onDoubleClick , __experimentalEChartsOptionsOverride , }, ref) {
44
46
  var ref1;
@@ -77,7 +79,7 @@ export const TimeChart = /*#__PURE__*/ forwardRef(function TimeChart({ height ,
77
79
  return {
78
80
  highlightSeries ({ name }) {
79
81
  if (!chartRef.current) {
80
- // No chart. Do nothing.
82
+ // when chart undef, do not highlight series when hovering over legend
81
83
  return;
82
84
  }
83
85
  chartRef.current.dispatchAction({
@@ -87,7 +89,7 @@ export const TimeChart = /*#__PURE__*/ forwardRef(function TimeChart({ height ,
87
89
  },
88
90
  clearHighlightedSeries: ()=>{
89
91
  if (!chartRef.current) {
90
- // No chart. Do nothing.
92
+ // when chart undef, do not clear highlight series
91
93
  return;
92
94
  }
93
95
  clearHighlightedSeries(chartRef.current, totalSeries);
@@ -115,19 +117,19 @@ export const TimeChart = /*#__PURE__*/ forwardRef(function TimeChart({ height ,
115
117
  };
116
118
  onDataZoom(zoomEvent);
117
119
  }
120
+ },
121
+ finished: ()=>{
122
+ if (chartRef.current !== undefined) {
123
+ enableDataZoom(chartRef.current);
124
+ }
118
125
  }
119
126
  };
120
127
  }, [
121
128
  onDataZoom,
122
129
  setTooltipPinnedCoords
123
130
  ]);
124
- if (chartRef.current !== undefined) {
125
- enableDataZoom(chartRef.current);
126
- }
127
131
  const { noDataOption } = chartsTheme;
128
132
  const option = useMemo(()=>{
129
- // TODO: fix loading state and noData variants
130
- // if (data === undefined) return {};
131
133
  // The "chart" `noDataVariant` is only used when the `timeSeries` is an
132
134
  // empty array because a `null` value will throw an error.
133
135
  if (data === null || data.length === 0 && noDataVariant === 'message') return noDataOption;
@@ -165,14 +167,19 @@ export const TimeChart = /*#__PURE__*/ forwardRef(function TimeChart({ height ,
165
167
  axisLabel: {
166
168
  hideOverlap: true,
167
169
  formatter: getFormattedAxisLabel((_rangeMs = timeScale.rangeMs) !== null && _rangeMs !== void 0 ? _rangeMs : 0)
170
+ },
171
+ axisPointer: {
172
+ snap: false
168
173
  }
169
174
  },
170
175
  yAxis: getYAxes(yAxis, unit),
171
176
  animation: false,
172
177
  tooltip: {
173
178
  show: true,
174
- trigger: 'axis',
175
- showContent: false
179
+ trigger: isStackedBar ? 'item' : 'axis',
180
+ // ECharts tooltip content hidden since we use custom tooltip instead
181
+ showContent: isStackedBar,
182
+ appendToBody: true
176
183
  },
177
184
  // https://echarts.apache.org/en/option.html#axisPointer
178
185
  axisPointer: {
@@ -180,7 +187,7 @@ export const TimeChart = /*#__PURE__*/ forwardRef(function TimeChart({ height ,
180
187
  z: 0,
181
188
  triggerEmphasis: false,
182
189
  triggerTooltip: false,
183
- snap: true
190
+ snap: false
184
191
  },
185
192
  toolbox: {
186
193
  feature: {
@@ -196,6 +203,8 @@ export const TimeChart = /*#__PURE__*/ forwardRef(function TimeChart({ height ,
196
203
  return __experimentalEChartsOptionsOverride(option);
197
204
  }
198
205
  return option;
206
+ // tooltipPinnedCoords is needed in dep array so crosshair stays beside pinned tooltip onClick
207
+ // eslint-disable-next-line react-hooks/exhaustive-deps
199
208
  }, [
200
209
  data,
201
210
  seriesMapping,
@@ -206,13 +215,38 @@ export const TimeChart = /*#__PURE__*/ forwardRef(function TimeChart({ height ,
206
215
  noDataOption,
207
216
  __experimentalEChartsOptionsOverride,
208
217
  noDataVariant,
209
- timeZone
218
+ timeZone,
219
+ tooltipPinnedCoords,
220
+ isStackedBar
210
221
  ]);
211
222
  return /*#__PURE__*/ _jsxs(Box, {
212
223
  sx: {
213
224
  height
214
225
  },
215
226
  onClick: (e)=>{
227
+ var ref;
228
+ // Determine where on chart canvas to plot pinned crosshair as markLine.
229
+ const pointInGrid = getPointInGrid(e.nativeEvent.offsetX, e.nativeEvent.offsetY, chartRef.current);
230
+ if (pointInGrid === null) {
231
+ return;
232
+ }
233
+ // Clear previously set pinned crosshair
234
+ const isCrosshairPinned = ((ref = seriesMapping[seriesMapping.length - 1]) === null || ref === void 0 ? void 0 : ref.name) === PINNED_CROSSHAIR_SERIES_NAME;
235
+ if (tooltipPinnedCoords !== null && isCrosshairPinned) {
236
+ seriesMapping.pop();
237
+ } else if (seriesMapping.length !== data.length + 1) {
238
+ // Only add pinned crosshair line series when there is not one already in seriesMapping.
239
+ const pinnedCrosshair = merge(DEFAULT_PINNED_CROSSHAIR, {
240
+ markLine: {
241
+ data: [
242
+ {
243
+ xAxis: pointInGrid[0]
244
+ }
245
+ ]
246
+ }
247
+ });
248
+ seriesMapping.push(pinnedCrosshair);
249
+ }
216
250
  // Pin and unpin when clicking on chart canvas but not tooltip text.
217
251
  if (e.target instanceof HTMLCanvasElement) {
218
252
  setTooltipPinnedCoords((current)=>{
@@ -289,12 +323,18 @@ export const TimeChart = /*#__PURE__*/ forwardRef(function TimeChart({ height ,
289
323
  },
290
324
  children: [
291
325
  showTooltip === true && ((ref1 = option.tooltip) === null || ref1 === void 0 ? void 0 : ref1.showContent) === false && tooltipConfig.hidden !== true && /*#__PURE__*/ _jsx(TimeChartTooltip, {
326
+ containerId: chartsTheme.tooltipPortalContainerId,
292
327
  chartRef: chartRef,
293
328
  data: data,
294
329
  seriesMapping: seriesMapping,
295
330
  wrapLabels: tooltipConfig.wrapLabels,
296
331
  pinnedPos: tooltipPinnedCoords,
297
- unit: unit
332
+ unit: unit,
333
+ onUnpinClick: ()=>{
334
+ setTooltipPinnedCoords(null);
335
+ // Clear previously set pinned crosshair
336
+ seriesMapping.pop();
337
+ }
298
338
  }),
299
339
  /*#__PURE__*/ _jsx(EChart, {
300
340
  sx: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/TimeChart/TimeChart.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 { DatasetOption } from 'echarts/types/dist/shared';\nimport { forwardRef, MouseEvent, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { Box } from '@mui/material';\nimport { utcToZonedTime } from 'date-fns-tz';\nimport { getCommonTimeScale, TimeScale, UnitOptions, TimeSeries } from '@perses-dev/core';\nimport type {\n EChartsCoreOption,\n GridComponentOption,\n LineSeriesOption,\n YAXisComponentOption,\n TooltipComponentOption,\n} from 'echarts';\nimport { ECharts as EChartsInstance, use } from 'echarts/core';\nimport { LineChart as EChartsLineChart } from 'echarts/charts';\nimport {\n GridComponent,\n DatasetComponent,\n DataZoomComponent,\n MarkAreaComponent,\n MarkLineComponent,\n MarkPointComponent,\n TitleComponent,\n ToolboxComponent,\n TooltipComponent,\n LegendComponent,\n} from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { EChart, OnEventsType } from '../EChart';\nimport { ChartHandleFocusOpts, ChartHandle, TimeChartSeriesMapping } from '../model/graph';\nimport { useChartsTheme } from '../context/ChartsThemeProvider';\nimport {\n clearHighlightedSeries,\n enableDataZoom,\n getFormattedAxisLabel,\n getYAxes,\n restoreChart,\n ZoomEventData,\n} from '../utils';\nimport { CursorCoordinates, TimeChartTooltip, TooltipConfig } from '../TimeSeriesTooltip';\nimport { useTimeZone } from '../context/TimeZoneProvider';\n\nuse([\n EChartsLineChart,\n GridComponent,\n DatasetComponent,\n DataZoomComponent,\n MarkAreaComponent,\n MarkLineComponent,\n MarkPointComponent,\n TitleComponent,\n ToolboxComponent,\n TooltipComponent,\n LegendComponent,\n CanvasRenderer,\n]);\n\nexport interface TimeChartProps {\n height: number;\n data: TimeSeries[];\n seriesMapping: TimeChartSeriesMapping;\n timeScale?: TimeScale;\n yAxis?: YAXisComponentOption;\n unit?: UnitOptions;\n grid?: GridComponentOption;\n tooltipConfig?: TooltipConfig;\n noDataVariant?: 'chart' | 'message';\n syncGroup?: string;\n onDataZoom?: (e: ZoomEventData) => void;\n onDoubleClick?: (e: MouseEvent) => void;\n __experimentalEChartsOptionsOverride?: (options: EChartsCoreOption) => EChartsCoreOption;\n}\n\nexport const TimeChart = forwardRef<ChartHandle, TimeChartProps>(function TimeChart(\n {\n height,\n data,\n seriesMapping,\n timeScale: timeScaleProp,\n yAxis,\n unit,\n grid,\n tooltipConfig = { wrapLabels: true },\n noDataVariant = 'message',\n syncGroup,\n onDataZoom,\n onDoubleClick,\n __experimentalEChartsOptionsOverride,\n },\n ref\n) {\n const chartsTheme = useChartsTheme();\n const chartRef = useRef<EChartsInstance>();\n const [showTooltip, setShowTooltip] = useState<boolean>(true);\n const [tooltipPinnedCoords, setTooltipPinnedCoords] = useState<CursorCoordinates | null>(null);\n const [isDragging, setIsDragging] = useState(false);\n const [startX, setStartX] = useState(0);\n const { timeZone } = useTimeZone();\n const totalSeries = data?.length ?? 0;\n\n let timeScale: TimeScale;\n if (timeScaleProp === undefined) {\n const commonTimeScale = getCommonTimeScale(data);\n if (commonTimeScale === undefined) {\n // set default to past 5 years\n const today = new Date();\n const pastDate = new Date(today);\n pastDate.setFullYear(today.getFullYear() - 5);\n const todayMs = today.getTime();\n const pastDateMs = pastDate.getTime();\n timeScale = { startMs: pastDateMs, endMs: todayMs, stepMs: 1, rangeMs: todayMs - pastDateMs };\n } else {\n timeScale = commonTimeScale;\n }\n } else {\n timeScale = timeScaleProp;\n }\n\n useImperativeHandle(\n ref,\n () => {\n return {\n highlightSeries({ name }: ChartHandleFocusOpts) {\n if (!chartRef.current) {\n // No chart. Do nothing.\n return;\n }\n\n chartRef.current.dispatchAction({ type: 'highlight', seriesId: name });\n },\n clearHighlightedSeries: () => {\n if (!chartRef.current) {\n // No chart. Do nothing.\n return;\n }\n clearHighlightedSeries(chartRef.current, totalSeries);\n },\n };\n },\n [totalSeries]\n );\n\n const handleEvents: OnEventsType<LineSeriesOption['data'] | unknown> = useMemo(() => {\n return {\n datazoom: (params) => {\n if (onDataZoom === undefined) {\n setTimeout(() => {\n // workaround so unpin happens after click event\n setTooltipPinnedCoords(null);\n }, 10);\n }\n if (onDataZoom === undefined || params.batch[0] === undefined) return;\n const xAxisStartValue = params.batch[0].startValue;\n const xAxisEndValue = params.batch[0].endValue;\n if (xAxisStartValue !== undefined && xAxisEndValue !== undefined) {\n const zoomEvent: ZoomEventData = {\n start: xAxisStartValue,\n end: xAxisEndValue,\n };\n onDataZoom(zoomEvent);\n }\n },\n };\n }, [onDataZoom, setTooltipPinnedCoords]);\n\n if (chartRef.current !== undefined) {\n enableDataZoom(chartRef.current);\n }\n\n const { noDataOption } = chartsTheme;\n\n const option: EChartsCoreOption = useMemo(() => {\n // TODO: fix loading state and noData variants\n // if (data === undefined) return {};\n\n // The \"chart\" `noDataVariant` is only used when the `timeSeries` is an\n // empty array because a `null` value will throw an error.\n if (data === null || (data.length === 0 && noDataVariant === 'message')) return noDataOption;\n\n // Utilizes ECharts dataset so raw data is separate from series option style properties\n // https://apache.github.io/echarts-handbook/en/concepts/dataset/\n const dataset: DatasetOption[] = [];\n const isLocalTimeZone = timeZone === 'local';\n data.map((d, index) => {\n const values = d.values.map(([timestamp, value]) => {\n const val: string | number = value === null ? '-' : value; // echarts use '-' to represent null data\n return [isLocalTimeZone ? timestamp : utcToZonedTime(timestamp, timeZone), val];\n });\n dataset.push({ id: index, source: [...values], dimensions: ['time', 'value'] });\n });\n\n const option: EChartsCoreOption = {\n dataset: dataset,\n series: seriesMapping,\n xAxis: {\n type: 'time',\n min: isLocalTimeZone ? timeScale.startMs : utcToZonedTime(timeScale.startMs, timeZone),\n max: isLocalTimeZone ? timeScale.endMs : utcToZonedTime(timeScale.endMs, timeZone),\n axisLabel: {\n hideOverlap: true,\n formatter: getFormattedAxisLabel(timeScale.rangeMs ?? 0),\n },\n },\n yAxis: getYAxes(yAxis, unit),\n animation: false,\n tooltip: {\n show: true,\n trigger: 'axis',\n showContent: false, // echarts tooltip content hidden since we use custom tooltip instead\n },\n // https://echarts.apache.org/en/option.html#axisPointer\n axisPointer: {\n type: 'line',\n z: 0, // ensure point symbol shows on top of dashed line\n triggerEmphasis: false, // https://github.com/apache/echarts/issues/18495\n triggerTooltip: false,\n snap: true,\n },\n toolbox: {\n feature: {\n dataZoom: {\n icon: null, // https://stackoverflow.com/a/67684076/17575201\n yAxisIndex: 'none',\n },\n },\n },\n grid,\n };\n\n if (__experimentalEChartsOptionsOverride) {\n return __experimentalEChartsOptionsOverride(option);\n }\n return option;\n }, [\n data,\n seriesMapping,\n timeScale,\n yAxis,\n unit,\n grid,\n noDataOption,\n __experimentalEChartsOptionsOverride,\n noDataVariant,\n timeZone,\n ]);\n\n return (\n <Box\n sx={{ height }}\n onClick={(e) => {\n // Pin and unpin when clicking on chart canvas but not tooltip text.\n if (e.target instanceof HTMLCanvasElement) {\n setTooltipPinnedCoords((current) => {\n if (current === null) {\n return {\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.nativeEvent.offsetX,\n y: e.nativeEvent.offsetY,\n },\n target: e.target,\n };\n } else {\n return null;\n }\n });\n }\n }}\n onMouseDown={(e) => {\n const { clientX } = e;\n setIsDragging(true);\n setStartX(clientX);\n }}\n onMouseMove={(e) => {\n // Allow clicking inside tooltip to copy labels.\n if (!(e.target instanceof HTMLCanvasElement)) {\n return;\n }\n const { clientX } = e;\n if (isDragging) {\n const deltaX = clientX - startX;\n if (deltaX > 0) {\n // Hide tooltip when user drags to zoom.\n setShowTooltip(false);\n }\n }\n }}\n onMouseUp={() => {\n setIsDragging(false);\n setStartX(0);\n setShowTooltip(true);\n }}\n onMouseLeave={() => {\n if (tooltipPinnedCoords === null) {\n setShowTooltip(false);\n }\n if (chartRef.current !== undefined) {\n clearHighlightedSeries(chartRef.current, totalSeries);\n }\n }}\n onMouseEnter={() => {\n setShowTooltip(true);\n if (chartRef.current !== undefined) {\n enableDataZoom(chartRef.current);\n }\n }}\n onDoubleClick={(e) => {\n setTooltipPinnedCoords(null);\n // either dispatch ECharts restore action to return to orig state or allow consumer to define behavior\n if (onDoubleClick === undefined) {\n if (chartRef.current !== undefined) {\n restoreChart(chartRef.current);\n }\n } else {\n onDoubleClick(e);\n }\n }}\n >\n {/* Allows overrides prop to hide custom tooltip and use the ECharts option.tooltip instead */}\n {showTooltip === true &&\n (option.tooltip as TooltipComponentOption)?.showContent === false &&\n tooltipConfig.hidden !== true && (\n <TimeChartTooltip\n chartRef={chartRef}\n data={data}\n seriesMapping={seriesMapping}\n wrapLabels={tooltipConfig.wrapLabels}\n pinnedPos={tooltipPinnedCoords}\n unit={unit}\n />\n )}\n <EChart\n sx={{\n width: '100%',\n height: '100%',\n }}\n option={option}\n theme={chartsTheme.echartsTheme}\n onEvents={handleEvents}\n _instance={chartRef}\n syncGroup={syncGroup}\n />\n </Box>\n );\n});\n"],"names":["forwardRef","useImperativeHandle","useMemo","useRef","useState","Box","utcToZonedTime","getCommonTimeScale","use","LineChart","EChartsLineChart","GridComponent","DatasetComponent","DataZoomComponent","MarkAreaComponent","MarkLineComponent","MarkPointComponent","TitleComponent","ToolboxComponent","TooltipComponent","LegendComponent","CanvasRenderer","EChart","useChartsTheme","clearHighlightedSeries","enableDataZoom","getFormattedAxisLabel","getYAxes","restoreChart","TimeChartTooltip","useTimeZone","TimeChart","height","data","seriesMapping","timeScale","timeScaleProp","yAxis","unit","grid","tooltipConfig","wrapLabels","noDataVariant","syncGroup","onDataZoom","onDoubleClick","__experimentalEChartsOptionsOverride","ref","option","chartsTheme","chartRef","showTooltip","setShowTooltip","tooltipPinnedCoords","setTooltipPinnedCoords","isDragging","setIsDragging","startX","setStartX","timeZone","totalSeries","length","undefined","commonTimeScale","today","Date","pastDate","setFullYear","getFullYear","todayMs","getTime","pastDateMs","startMs","endMs","stepMs","rangeMs","highlightSeries","name","current","dispatchAction","type","seriesId","handleEvents","datazoom","params","setTimeout","batch","xAxisStartValue","startValue","xAxisEndValue","endValue","zoomEvent","start","end","noDataOption","dataset","isLocalTimeZone","map","d","index","values","timestamp","value","val","push","id","source","dimensions","series","xAxis","min","max","axisLabel","hideOverlap","formatter","animation","tooltip","show","trigger","showContent","axisPointer","z","triggerEmphasis","triggerTooltip","snap","toolbox","feature","dataZoom","icon","yAxisIndex","sx","onClick","e","target","HTMLCanvasElement","page","x","pageX","y","pageY","client","clientX","clientY","plotCanvas","nativeEvent","offsetX","offsetY","onMouseDown","onMouseMove","deltaX","onMouseUp","onMouseLeave","onMouseEnter","hidden","pinnedPos","width","theme","echartsTheme","onEvents","_instance"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/TimeChart/TimeChart.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 { forwardRef, MouseEvent, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { Box } from '@mui/material';\nimport merge from 'lodash/merge';\nimport { DatasetOption } from 'echarts/types/dist/shared';\nimport { utcToZonedTime } from 'date-fns-tz';\nimport { getCommonTimeScale, TimeScale, UnitOptions, TimeSeries } from '@perses-dev/core';\nimport type {\n EChartsCoreOption,\n GridComponentOption,\n LineSeriesOption,\n YAXisComponentOption,\n TooltipComponentOption,\n} from 'echarts';\nimport { ECharts as EChartsInstance, use } from 'echarts/core';\nimport { LineChart as EChartsLineChart, BarChart as EChartsBarChart } from 'echarts/charts';\nimport {\n GridComponent,\n DatasetComponent,\n DataZoomComponent,\n MarkAreaComponent,\n MarkLineComponent,\n MarkPointComponent,\n TitleComponent,\n ToolboxComponent,\n TooltipComponent,\n} from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { EChart, OnEventsType } from '../EChart';\nimport {\n ChartInstanceFocusOpts,\n ChartInstance,\n TimeChartSeriesMapping,\n DEFAULT_PINNED_CROSSHAIR,\n PINNED_CROSSHAIR_SERIES_NAME,\n} from '../model/graph';\nimport { useChartsTheme } from '../context/ChartsThemeProvider';\nimport {\n clearHighlightedSeries,\n enableDataZoom,\n getFormattedAxisLabel,\n getPointInGrid,\n getYAxes,\n restoreChart,\n ZoomEventData,\n} from '../utils';\nimport { CursorCoordinates, TimeChartTooltip, TooltipConfig } from '../TimeSeriesTooltip';\nimport { useTimeZone } from '../context/TimeZoneProvider';\n\nuse([\n EChartsLineChart,\n EChartsBarChart,\n GridComponent,\n DatasetComponent,\n DataZoomComponent,\n MarkAreaComponent,\n MarkLineComponent,\n MarkPointComponent,\n TitleComponent,\n ToolboxComponent,\n TooltipComponent,\n CanvasRenderer,\n]);\n\nexport interface TimeChartProps {\n height: number;\n data: TimeSeries[];\n seriesMapping: TimeChartSeriesMapping;\n timeScale?: TimeScale;\n yAxis?: YAXisComponentOption;\n unit?: UnitOptions;\n grid?: GridComponentOption;\n tooltipConfig?: TooltipConfig;\n noDataVariant?: 'chart' | 'message';\n syncGroup?: string;\n isStackedBar?: boolean;\n onDataZoom?: (e: ZoomEventData) => void;\n onDoubleClick?: (e: MouseEvent) => void;\n __experimentalEChartsOptionsOverride?: (options: EChartsCoreOption) => EChartsCoreOption;\n}\n\nexport const TimeChart = forwardRef<ChartInstance, TimeChartProps>(function TimeChart(\n {\n height,\n data,\n seriesMapping,\n timeScale: timeScaleProp,\n yAxis,\n unit,\n grid,\n isStackedBar = false,\n tooltipConfig = { wrapLabels: true },\n noDataVariant = 'message',\n syncGroup,\n onDataZoom,\n onDoubleClick,\n __experimentalEChartsOptionsOverride,\n },\n ref\n) {\n const chartsTheme = useChartsTheme();\n const chartRef = useRef<EChartsInstance>();\n const [showTooltip, setShowTooltip] = useState<boolean>(true);\n const [tooltipPinnedCoords, setTooltipPinnedCoords] = useState<CursorCoordinates | null>(null);\n const [isDragging, setIsDragging] = useState(false);\n const [startX, setStartX] = useState(0);\n const { timeZone } = useTimeZone();\n const totalSeries = data?.length ?? 0;\n\n let timeScale: TimeScale;\n if (timeScaleProp === undefined) {\n const commonTimeScale = getCommonTimeScale(data);\n if (commonTimeScale === undefined) {\n // set default to past 5 years\n const today = new Date();\n const pastDate = new Date(today);\n pastDate.setFullYear(today.getFullYear() - 5);\n const todayMs = today.getTime();\n const pastDateMs = pastDate.getTime();\n timeScale = { startMs: pastDateMs, endMs: todayMs, stepMs: 1, rangeMs: todayMs - pastDateMs };\n } else {\n timeScale = commonTimeScale;\n }\n } else {\n timeScale = timeScaleProp;\n }\n\n useImperativeHandle(\n ref,\n () => {\n return {\n highlightSeries({ name }: ChartInstanceFocusOpts) {\n if (!chartRef.current) {\n // when chart undef, do not highlight series when hovering over legend\n return;\n }\n\n chartRef.current.dispatchAction({ type: 'highlight', seriesId: name });\n },\n clearHighlightedSeries: () => {\n if (!chartRef.current) {\n // when chart undef, do not clear highlight series\n return;\n }\n clearHighlightedSeries(chartRef.current, totalSeries);\n },\n };\n },\n [totalSeries]\n );\n\n const handleEvents: OnEventsType<LineSeriesOption['data'] | unknown> = useMemo(() => {\n return {\n datazoom: (params) => {\n if (onDataZoom === undefined) {\n setTimeout(() => {\n // workaround so unpin happens after click event\n setTooltipPinnedCoords(null);\n }, 10);\n }\n if (onDataZoom === undefined || params.batch[0] === undefined) return;\n const xAxisStartValue = params.batch[0].startValue;\n const xAxisEndValue = params.batch[0].endValue;\n if (xAxisStartValue !== undefined && xAxisEndValue !== undefined) {\n const zoomEvent: ZoomEventData = {\n start: xAxisStartValue,\n end: xAxisEndValue,\n };\n onDataZoom(zoomEvent);\n }\n },\n finished: () => {\n if (chartRef.current !== undefined) {\n enableDataZoom(chartRef.current);\n }\n },\n };\n }, [onDataZoom, setTooltipPinnedCoords]);\n\n const { noDataOption } = chartsTheme;\n\n const option: EChartsCoreOption = useMemo(() => {\n // The \"chart\" `noDataVariant` is only used when the `timeSeries` is an\n // empty array because a `null` value will throw an error.\n if (data === null || (data.length === 0 && noDataVariant === 'message')) return noDataOption;\n\n // Utilizes ECharts dataset so raw data is separate from series option style properties\n // https://apache.github.io/echarts-handbook/en/concepts/dataset/\n const dataset: DatasetOption[] = [];\n const isLocalTimeZone = timeZone === 'local';\n data.map((d, index) => {\n const values = d.values.map(([timestamp, value]) => {\n const val: string | number = value === null ? '-' : value; // echarts use '-' to represent null data\n return [isLocalTimeZone ? timestamp : utcToZonedTime(timestamp, timeZone), val];\n });\n dataset.push({ id: index, source: [...values], dimensions: ['time', 'value'] });\n });\n\n const option: EChartsCoreOption = {\n dataset: dataset,\n series: seriesMapping,\n xAxis: {\n type: 'time',\n min: isLocalTimeZone ? timeScale.startMs : utcToZonedTime(timeScale.startMs, timeZone),\n max: isLocalTimeZone ? timeScale.endMs : utcToZonedTime(timeScale.endMs, timeZone),\n axisLabel: {\n hideOverlap: true,\n formatter: getFormattedAxisLabel(timeScale.rangeMs ?? 0),\n },\n axisPointer: {\n snap: false, // important so shared crosshair does not lag\n },\n },\n yAxis: getYAxes(yAxis, unit),\n animation: false,\n tooltip: {\n show: true,\n trigger: isStackedBar ? 'item' : 'axis',\n // ECharts tooltip content hidden since we use custom tooltip instead\n showContent: isStackedBar,\n appendToBody: true,\n },\n // https://echarts.apache.org/en/option.html#axisPointer\n axisPointer: {\n type: 'line',\n z: 0, // ensure point symbol shows on top of dashed line\n triggerEmphasis: false, // https://github.com/apache/echarts/issues/18495\n triggerTooltip: false,\n snap: false, // xAxis.axisPointer.snap takes priority\n },\n toolbox: {\n feature: {\n dataZoom: {\n icon: null, // https://stackoverflow.com/a/67684076/17575201\n yAxisIndex: 'none',\n },\n },\n },\n grid,\n };\n\n if (__experimentalEChartsOptionsOverride) {\n return __experimentalEChartsOptionsOverride(option);\n }\n\n return option;\n // tooltipPinnedCoords is needed in dep array so crosshair stays beside pinned tooltip onClick\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n data,\n seriesMapping,\n timeScale,\n yAxis,\n unit,\n grid,\n noDataOption,\n __experimentalEChartsOptionsOverride,\n noDataVariant,\n timeZone,\n tooltipPinnedCoords,\n isStackedBar,\n ]);\n\n return (\n <Box\n sx={{ height }}\n onClick={(e) => {\n // Determine where on chart canvas to plot pinned crosshair as markLine.\n const pointInGrid = getPointInGrid(e.nativeEvent.offsetX, e.nativeEvent.offsetY, chartRef.current);\n if (pointInGrid === null) {\n return;\n }\n\n // Clear previously set pinned crosshair\n const isCrosshairPinned = seriesMapping[seriesMapping.length - 1]?.name === PINNED_CROSSHAIR_SERIES_NAME;\n if (tooltipPinnedCoords !== null && isCrosshairPinned) {\n seriesMapping.pop();\n } else if (seriesMapping.length !== data.length + 1) {\n // Only add pinned crosshair line series when there is not one already in seriesMapping.\n const pinnedCrosshair = merge(DEFAULT_PINNED_CROSSHAIR, {\n markLine: {\n data: [\n {\n xAxis: pointInGrid[0],\n },\n ],\n },\n });\n seriesMapping.push(pinnedCrosshair);\n }\n\n // Pin and unpin when clicking on chart canvas but not tooltip text.\n if (e.target instanceof HTMLCanvasElement) {\n setTooltipPinnedCoords((current) => {\n if (current === null) {\n return {\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.nativeEvent.offsetX,\n y: e.nativeEvent.offsetY,\n },\n target: e.target,\n };\n } else {\n return null;\n }\n });\n }\n }}\n onMouseDown={(e) => {\n const { clientX } = e;\n setIsDragging(true);\n setStartX(clientX);\n }}\n onMouseMove={(e) => {\n // Allow clicking inside tooltip to copy labels.\n if (!(e.target instanceof HTMLCanvasElement)) {\n return;\n }\n const { clientX } = e;\n if (isDragging) {\n const deltaX = clientX - startX;\n if (deltaX > 0) {\n // Hide tooltip when user drags to zoom.\n setShowTooltip(false);\n }\n }\n }}\n onMouseUp={() => {\n setIsDragging(false);\n setStartX(0);\n setShowTooltip(true);\n }}\n onMouseLeave={() => {\n if (tooltipPinnedCoords === null) {\n setShowTooltip(false);\n }\n if (chartRef.current !== undefined) {\n clearHighlightedSeries(chartRef.current, totalSeries);\n }\n }}\n onMouseEnter={() => {\n setShowTooltip(true);\n if (chartRef.current !== undefined) {\n enableDataZoom(chartRef.current);\n }\n }}\n onDoubleClick={(e) => {\n setTooltipPinnedCoords(null);\n // either dispatch ECharts restore action to return to orig state or allow consumer to define behavior\n if (onDoubleClick === undefined) {\n if (chartRef.current !== undefined) {\n restoreChart(chartRef.current);\n }\n } else {\n onDoubleClick(e);\n }\n }}\n >\n {/* Allows overrides prop to hide custom tooltip and use the ECharts option.tooltip instead */}\n {showTooltip === true &&\n (option.tooltip as TooltipComponentOption)?.showContent === false &&\n tooltipConfig.hidden !== true && (\n <TimeChartTooltip\n containerId={chartsTheme.tooltipPortalContainerId}\n chartRef={chartRef}\n data={data}\n seriesMapping={seriesMapping}\n wrapLabels={tooltipConfig.wrapLabels}\n pinnedPos={tooltipPinnedCoords}\n unit={unit}\n onUnpinClick={() => {\n setTooltipPinnedCoords(null);\n // Clear previously set pinned crosshair\n seriesMapping.pop();\n }}\n />\n )}\n <EChart\n sx={{\n width: '100%',\n height: '100%',\n }}\n option={option}\n theme={chartsTheme.echartsTheme}\n onEvents={handleEvents}\n _instance={chartRef}\n syncGroup={syncGroup}\n />\n </Box>\n );\n});\n"],"names":["forwardRef","useImperativeHandle","useMemo","useRef","useState","Box","merge","utcToZonedTime","getCommonTimeScale","use","LineChart","EChartsLineChart","BarChart","EChartsBarChart","GridComponent","DatasetComponent","DataZoomComponent","MarkAreaComponent","MarkLineComponent","MarkPointComponent","TitleComponent","ToolboxComponent","TooltipComponent","CanvasRenderer","EChart","DEFAULT_PINNED_CROSSHAIR","PINNED_CROSSHAIR_SERIES_NAME","useChartsTheme","clearHighlightedSeries","enableDataZoom","getFormattedAxisLabel","getPointInGrid","getYAxes","restoreChart","TimeChartTooltip","useTimeZone","TimeChart","height","data","seriesMapping","timeScale","timeScaleProp","yAxis","unit","grid","isStackedBar","tooltipConfig","wrapLabels","noDataVariant","syncGroup","onDataZoom","onDoubleClick","__experimentalEChartsOptionsOverride","ref","option","chartsTheme","chartRef","showTooltip","setShowTooltip","tooltipPinnedCoords","setTooltipPinnedCoords","isDragging","setIsDragging","startX","setStartX","timeZone","totalSeries","length","undefined","commonTimeScale","today","Date","pastDate","setFullYear","getFullYear","todayMs","getTime","pastDateMs","startMs","endMs","stepMs","rangeMs","highlightSeries","name","current","dispatchAction","type","seriesId","handleEvents","datazoom","params","setTimeout","batch","xAxisStartValue","startValue","xAxisEndValue","endValue","zoomEvent","start","end","finished","noDataOption","dataset","isLocalTimeZone","map","d","index","values","timestamp","value","val","push","id","source","dimensions","series","xAxis","min","max","axisLabel","hideOverlap","formatter","axisPointer","snap","animation","tooltip","show","trigger","showContent","appendToBody","z","triggerEmphasis","triggerTooltip","toolbox","feature","dataZoom","icon","yAxisIndex","sx","onClick","e","pointInGrid","nativeEvent","offsetX","offsetY","isCrosshairPinned","pop","pinnedCrosshair","markLine","target","HTMLCanvasElement","page","x","pageX","y","pageY","client","clientX","clientY","plotCanvas","onMouseDown","onMouseMove","deltaX","onMouseUp","onMouseLeave","onMouseEnter","hidden","containerId","tooltipPortalContainerId","pinnedPos","onUnpinClick","width","theme","echartsTheme","onEvents","_instance"],"mappings":"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"}
@@ -10,6 +10,11 @@ export interface TimeSeriesTooltipProps {
10
10
  unit?: UnitOptions;
11
11
  onUnpinClick?: () => void;
12
12
  pinnedPos: CursorCoordinates | null;
13
+ /**
14
+ * The id of the container that will have the chart tooltip appended to it.
15
+ * By default, the chart tooltip is attached to document.body.
16
+ */
17
+ containerId?: string;
13
18
  }
14
19
  export declare const LineChartTooltip: import("react").NamedExoticComponent<TimeSeriesTooltipProps>;
15
20
  //# sourceMappingURL=LineChartTooltip.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LineChartTooltip.d.ts","sourceRoot":"","sources":["../../src/TimeSeriesTooltip/LineChartTooltip.tsx"],"names":[],"mappings":";AAcA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,cAAc,CAAC;AAG1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAI7C,OAAO,EACL,iBAAiB,EAOlB,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,KAAK,CAAC,gBAAgB,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;IAC9D,SAAS,EAAE,iBAAiB,CAAC;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACrC;AAED,eAAO,MAAM,gBAAgB,8DAkF3B,CAAC"}
1
+ {"version":3,"file":"LineChartTooltip.d.ts","sourceRoot":"","sources":["../../src/TimeSeriesTooltip/LineChartTooltip.tsx"],"names":[],"mappings":";AAcA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,cAAc,CAAC;AAG1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAI7C,OAAO,EACL,iBAAiB,EAOlB,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,KAAK,CAAC,gBAAgB,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;IAC9D,SAAS,EAAE,iBAAiB,CAAC;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,gBAAgB,8DA0F3B,CAAC"}
@@ -12,17 +12,18 @@
12
12
  // limitations under the License.
13
13
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
14
  import { Box, Portal, Stack } from '@mui/material';
15
- import { memo, useState } from 'react';
15
+ import { memo, useRef, useState } from 'react';
16
16
  import useResizeObserver from 'use-resize-observer';
17
17
  import { TooltipContent } from './TooltipContent';
18
18
  import { TooltipHeader } from './TooltipHeader';
19
19
  import { legacyGetNearbySeriesData } from './nearby-series';
20
20
  import { FALLBACK_CHART_WIDTH, TOOLTIP_BG_COLOR_FALLBACK, TOOLTIP_MAX_HEIGHT, TOOLTIP_MAX_WIDTH, TOOLTIP_MIN_WIDTH, useMousePosition } from './tooltip-model';
21
21
  import { assembleTransform } from './utils';
22
- export const LineChartTooltip = /*#__PURE__*/ memo(function LineChartTooltip({ chartRef , chartData , wrapLabels , unit , onUnpinClick , pinnedPos }) {
22
+ export const LineChartTooltip = /*#__PURE__*/ memo(function LineChartTooltip({ chartRef , chartData , wrapLabels , unit , onUnpinClick , pinnedPos , containerId }) {
23
23
  const [showAllSeries, setShowAllSeries] = useState(false);
24
24
  const mousePos = useMousePosition();
25
25
  const { height , width , ref: tooltipRef } = useResizeObserver();
26
+ const transform = useRef('');
26
27
  const isTooltipPinned = pinnedPos !== null;
27
28
  if (mousePos === null || mousePos.target === null) return null;
28
29
  // Ensure user is hovering over a chart before checking for nearby series.
@@ -30,7 +31,6 @@ export const LineChartTooltip = /*#__PURE__*/ memo(function LineChartTooltip({ c
30
31
  const chart = chartRef.current;
31
32
  var ref;
32
33
  const chartWidth = (ref = chart === null || chart === void 0 ? void 0 : chart.getWidth()) !== null && ref !== void 0 ? ref : FALLBACK_CHART_WIDTH; // Fallback width not likely to ever be needed.
33
- const cursorTransform = assembleTransform(mousePos, chartWidth, pinnedPos, height !== null && height !== void 0 ? height : 0, width !== null && width !== void 0 ? width : 0);
34
34
  // Get series nearby the cursor and pass into tooltip content children.
35
35
  const nearbySeries = legacyGetNearbySeriesData({
36
36
  mousePos,
@@ -44,8 +44,15 @@ export const LineChartTooltip = /*#__PURE__*/ memo(function LineChartTooltip({ c
44
44
  return null;
45
45
  }
46
46
  const totalSeries = chartData.timeSeries.length;
47
+ const containerElement = containerId ? document.querySelector(containerId) : undefined;
48
+ // if tooltip is attached to a container, set max height to the height of the container so tooltip does not get cut off
49
+ const maxHeight = containerElement ? containerElement.getBoundingClientRect().height : undefined;
50
+ if (!isTooltipPinned) {
51
+ transform.current = assembleTransform(mousePos, chartWidth, pinnedPos, height !== null && height !== void 0 ? height : 0, width !== null && width !== void 0 ? width : 0, containerElement);
52
+ }
47
53
  var ref1;
48
54
  return /*#__PURE__*/ _jsx(Portal, {
55
+ container: containerElement,
49
56
  children: /*#__PURE__*/ _jsx(Box, {
50
57
  ref: tooltipRef,
51
58
  sx: (theme)=>{
@@ -53,7 +60,7 @@ export const LineChartTooltip = /*#__PURE__*/ memo(function LineChartTooltip({ c
53
60
  return {
54
61
  minWidth: TOOLTIP_MIN_WIDTH,
55
62
  maxWidth: TOOLTIP_MAX_WIDTH,
56
- maxHeight: TOOLTIP_MAX_HEIGHT,
63
+ maxHeight: maxHeight !== null && maxHeight !== void 0 ? maxHeight : TOOLTIP_MAX_HEIGHT,
57
64
  padding: 0,
58
65
  position: 'absolute',
59
66
  top: 0,
@@ -74,7 +81,7 @@ export const LineChartTooltip = /*#__PURE__*/ memo(function LineChartTooltip({ c
74
81
  };
75
82
  },
76
83
  style: {
77
- transform: cursorTransform
84
+ transform: transform.current
78
85
  },
79
86
  children: /*#__PURE__*/ _jsxs(Stack, {
80
87
  spacing: 0.5,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/TimeSeriesTooltip/LineChartTooltip.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, Portal, Stack } from '@mui/material';\nimport { UnitOptions } from '@perses-dev/core';\nimport { ECharts as EChartsInstance } from 'echarts/core';\nimport { memo, useState } from 'react';\nimport useResizeObserver from 'use-resize-observer';\nimport { EChartsDataFormat } from '../model';\nimport { TooltipContent } from './TooltipContent';\nimport { TooltipHeader } from './TooltipHeader';\nimport { legacyGetNearbySeriesData } from './nearby-series';\nimport {\n CursorCoordinates,\n FALLBACK_CHART_WIDTH,\n TOOLTIP_BG_COLOR_FALLBACK,\n TOOLTIP_MAX_HEIGHT,\n TOOLTIP_MAX_WIDTH,\n TOOLTIP_MIN_WIDTH,\n useMousePosition,\n} from './tooltip-model';\nimport { assembleTransform } from './utils';\n\nexport interface TimeSeriesTooltipProps {\n chartRef: React.MutableRefObject<EChartsInstance | undefined>;\n chartData: EChartsDataFormat;\n wrapLabels?: boolean;\n unit?: UnitOptions;\n onUnpinClick?: () => void;\n pinnedPos: CursorCoordinates | null;\n}\n\nexport const LineChartTooltip = memo(function LineChartTooltip({\n chartRef,\n chartData,\n wrapLabels,\n unit,\n onUnpinClick,\n pinnedPos,\n}: TimeSeriesTooltipProps) {\n const [showAllSeries, setShowAllSeries] = useState(false);\n const mousePos = useMousePosition();\n const { height, width, ref: tooltipRef } = useResizeObserver();\n\n const isTooltipPinned = pinnedPos !== null;\n\n if (mousePos === null || mousePos.target === null) return null;\n\n // Ensure user is hovering over a chart before checking for nearby series.\n if (pinnedPos === null && (mousePos.target as HTMLElement).tagName !== 'CANVAS') return null;\n\n const chart = chartRef.current;\n const chartWidth = chart?.getWidth() ?? FALLBACK_CHART_WIDTH; // Fallback width not likely to ever be needed.\n const cursorTransform = assembleTransform(mousePos, chartWidth, pinnedPos, height ?? 0, width ?? 0);\n\n // Get series nearby the cursor and pass into tooltip content children.\n const nearbySeries = legacyGetNearbySeriesData({\n mousePos,\n chartData,\n pinnedPos,\n chart,\n unit,\n showAllSeries,\n });\n if (nearbySeries.length === 0) {\n return null;\n }\n\n const totalSeries = chartData.timeSeries.length;\n\n return (\n <Portal>\n <Box\n ref={tooltipRef}\n sx={(theme) => ({\n minWidth: TOOLTIP_MIN_WIDTH,\n maxWidth: TOOLTIP_MAX_WIDTH,\n maxHeight: 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 style={{\n transform: cursorTransform,\n }}\n >\n <Stack spacing={0.5}>\n <TooltipHeader\n nearbySeries={nearbySeries}\n totalSeries={totalSeries}\n isTooltipPinned={isTooltipPinned}\n showAllSeries={showAllSeries}\n onShowAllClick={(checked) => setShowAllSeries(checked)}\n onUnpinClick={onUnpinClick}\n />\n <TooltipContent series={nearbySeries} wrapLabels={wrapLabels} />\n </Stack>\n </Box>\n </Portal>\n );\n});\n"],"names":["Box","Portal","Stack","memo","useState","useResizeObserver","TooltipContent","TooltipHeader","legacyGetNearbySeriesData","FALLBACK_CHART_WIDTH","TOOLTIP_BG_COLOR_FALLBACK","TOOLTIP_MAX_HEIGHT","TOOLTIP_MAX_WIDTH","TOOLTIP_MIN_WIDTH","useMousePosition","assembleTransform","LineChartTooltip","chartRef","chartData","wrapLabels","unit","onUnpinClick","pinnedPos","showAllSeries","setShowAllSeries","mousePos","height","width","ref","tooltipRef","isTooltipPinned","target","tagName","chart","current","chartWidth","getWidth","cursorTransform","nearbySeries","length","totalSeries","timeSeries","theme","sx","minWidth","maxWidth","maxHeight","padding","position","top","left","backgroundColor","palette","designSystem","grey","borderRadius","color","fontSize","visibility","opacity","transition","zIndex","tooltip","overflow","overflowY","style","transform","spacing","onShowAllClick","checked","series"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/TimeSeriesTooltip/LineChartTooltip.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, Portal, Stack } from '@mui/material';\nimport { UnitOptions } from '@perses-dev/core';\nimport { ECharts as EChartsInstance } from 'echarts/core';\nimport { memo, useRef, useState } from 'react';\nimport useResizeObserver from 'use-resize-observer';\nimport { EChartsDataFormat } from '../model';\nimport { TooltipContent } from './TooltipContent';\nimport { TooltipHeader } from './TooltipHeader';\nimport { legacyGetNearbySeriesData } from './nearby-series';\nimport {\n CursorCoordinates,\n FALLBACK_CHART_WIDTH,\n TOOLTIP_BG_COLOR_FALLBACK,\n TOOLTIP_MAX_HEIGHT,\n TOOLTIP_MAX_WIDTH,\n TOOLTIP_MIN_WIDTH,\n useMousePosition,\n} from './tooltip-model';\nimport { assembleTransform } from './utils';\n\nexport interface TimeSeriesTooltipProps {\n chartRef: React.MutableRefObject<EChartsInstance | undefined>;\n chartData: EChartsDataFormat;\n wrapLabels?: boolean;\n unit?: UnitOptions;\n onUnpinClick?: () => void;\n pinnedPos: CursorCoordinates | null;\n /**\n * The id of the container that will have the chart tooltip appended to it.\n * By default, the chart tooltip is attached to document.body.\n */\n containerId?: string;\n}\n\nexport const LineChartTooltip = memo(function LineChartTooltip({\n chartRef,\n chartData,\n wrapLabels,\n unit,\n onUnpinClick,\n pinnedPos,\n containerId,\n}: TimeSeriesTooltipProps) {\n const [showAllSeries, setShowAllSeries] = useState(false);\n const mousePos = useMousePosition();\n const { height, width, ref: tooltipRef } = useResizeObserver();\n const transform = useRef('');\n\n const isTooltipPinned = pinnedPos !== null;\n\n if (mousePos === null || mousePos.target === null) return null;\n\n // Ensure user is hovering over a chart before checking for nearby series.\n if (pinnedPos === null && (mousePos.target as HTMLElement).tagName !== 'CANVAS') return null;\n\n const chart = chartRef.current;\n const chartWidth = chart?.getWidth() ?? FALLBACK_CHART_WIDTH; // Fallback width not likely to ever be needed.\n\n // Get series nearby the cursor and pass into tooltip content children.\n const nearbySeries = legacyGetNearbySeriesData({\n mousePos,\n chartData,\n pinnedPos,\n chart,\n unit,\n showAllSeries,\n });\n if (nearbySeries.length === 0) {\n return null;\n }\n\n const totalSeries = chartData.timeSeries.length;\n\n const containerElement = containerId ? document.querySelector(containerId) : undefined;\n // if tooltip is attached to a container, set max height to the height of the container so tooltip does not get cut off\n const maxHeight = containerElement ? containerElement.getBoundingClientRect().height : undefined;\n if (!isTooltipPinned) {\n transform.current = assembleTransform(mousePos, chartWidth, pinnedPos, height ?? 0, width ?? 0, containerElement);\n }\n\n return (\n <Portal container={containerElement}>\n <Box\n ref={tooltipRef}\n sx={(theme) => ({\n minWidth: TOOLTIP_MIN_WIDTH,\n maxWidth: TOOLTIP_MAX_WIDTH,\n maxHeight: maxHeight ?? 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 style={{\n transform: transform.current,\n }}\n >\n <Stack spacing={0.5}>\n <TooltipHeader\n nearbySeries={nearbySeries}\n totalSeries={totalSeries}\n isTooltipPinned={isTooltipPinned}\n showAllSeries={showAllSeries}\n onShowAllClick={(checked) => setShowAllSeries(checked)}\n onUnpinClick={onUnpinClick}\n />\n <TooltipContent series={nearbySeries} wrapLabels={wrapLabels} />\n </Stack>\n </Box>\n </Portal>\n );\n});\n"],"names":["Box","Portal","Stack","memo","useRef","useState","useResizeObserver","TooltipContent","TooltipHeader","legacyGetNearbySeriesData","FALLBACK_CHART_WIDTH","TOOLTIP_BG_COLOR_FALLBACK","TOOLTIP_MAX_HEIGHT","TOOLTIP_MAX_WIDTH","TOOLTIP_MIN_WIDTH","useMousePosition","assembleTransform","LineChartTooltip","chartRef","chartData","wrapLabels","unit","onUnpinClick","pinnedPos","containerId","showAllSeries","setShowAllSeries","mousePos","height","width","ref","tooltipRef","transform","isTooltipPinned","target","tagName","chart","current","chartWidth","getWidth","nearbySeries","length","totalSeries","timeSeries","containerElement","document","querySelector","undefined","maxHeight","getBoundingClientRect","theme","container","sx","minWidth","maxWidth","padding","position","top","left","backgroundColor","palette","designSystem","grey","borderRadius","color","fontSize","visibility","opacity","transition","zIndex","tooltip","overflow","overflowY","style","spacing","onShowAllClick","checked","series"],"mappings":"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"}
@@ -7,10 +7,15 @@ export interface TimeChartTooltipProps {
7
7
  chartRef: React.MutableRefObject<EChartsInstance | undefined>;
8
8
  data: TimeSeries[];
9
9
  seriesMapping: TimeChartSeriesMapping;
10
- wrapLabels?: boolean;
11
- unit?: UnitOptions;
12
- onUnpinClick?: () => void;
13
10
  pinnedPos: CursorCoordinates | null;
11
+ /**
12
+ * The id of the container that will have the chart tooltip appended to it.
13
+ * By default, the chart tooltip is attached to document.body.
14
+ */
15
+ containerId?: string;
16
+ onUnpinClick?: () => void;
17
+ unit?: UnitOptions;
18
+ wrapLabels?: boolean;
14
19
  }
15
20
  export declare const TimeChartTooltip: import("react").NamedExoticComponent<TimeChartTooltipProps>;
16
21
  //# sourceMappingURL=TimeChartTooltip.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TimeChartTooltip.d.ts","sourceRoot":"","sources":["../../src/TimeSeriesTooltip/TimeChartTooltip.tsx"],"names":[],"mappings":";AAeA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAA0C,MAAM,iBAAiB,CAAC;AAM5F,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,KAAK,CAAC,gBAAgB,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;IAC9D,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,aAAa,EAAE,sBAAsB,CAAC;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACrC;AAED,eAAO,MAAM,gBAAgB,6DA+D3B,CAAC"}
1
+ {"version":3,"file":"TimeChartTooltip.d.ts","sourceRoot":"","sources":["../../src/TimeSeriesTooltip/TimeChartTooltip.tsx"],"names":[],"mappings":";AAeA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAA0C,MAAM,iBAAiB,CAAC;AAM5F,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,KAAK,CAAC,gBAAgB,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;IAC9D,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,aAAa,EAAE,sBAAsB,CAAC;IACtC,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,gBAAgB,6DAyE3B,CAAC"}
@@ -11,7 +11,7 @@
11
11
  // See the License for the specific language governing permissions and
12
12
  // limitations under the License.
13
13
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
- import { memo, useState } from 'react';
14
+ import { memo, useRef, useState } from 'react';
15
15
  import { Box, Portal, Stack } from '@mui/material';
16
16
  import useResizeObserver from 'use-resize-observer';
17
17
  import { FALLBACK_CHART_WIDTH, useMousePosition } from './tooltip-model';
@@ -19,8 +19,9 @@ import { assembleTransform, getTooltipStyles } from './utils';
19
19
  import { getNearbySeriesData } from './nearby-series';
20
20
  import { TooltipHeader } from './TooltipHeader';
21
21
  import { TooltipContent } from './TooltipContent';
22
- export const TimeChartTooltip = /*#__PURE__*/ memo(function TimeChartTooltip({ chartRef , data , seriesMapping , wrapLabels , unit , onUnpinClick , pinnedPos }) {
22
+ export const TimeChartTooltip = /*#__PURE__*/ memo(function TimeChartTooltip({ containerId , chartRef , data , seriesMapping , wrapLabels , unit , onUnpinClick , pinnedPos }) {
23
23
  const [showAllSeries, setShowAllSeries] = useState(false);
24
+ const transform = useRef('');
24
25
  const mousePos = useMousePosition();
25
26
  const { height , width , ref: tooltipRef } = useResizeObserver();
26
27
  const isTooltipPinned = pinnedPos !== null;
@@ -30,7 +31,12 @@ export const TimeChartTooltip = /*#__PURE__*/ memo(function TimeChartTooltip({ c
30
31
  const chart = chartRef.current;
31
32
  var ref;
32
33
  const chartWidth = (ref = chart === null || chart === void 0 ? void 0 : chart.getWidth()) !== null && ref !== void 0 ? ref : FALLBACK_CHART_WIDTH; // Fallback width not likely to ever be needed.
33
- const cursorTransform = assembleTransform(mousePos, chartWidth, pinnedPos, height !== null && height !== void 0 ? height : 0, width !== null && width !== void 0 ? width : 0);
34
+ const containerElement = containerId ? document.querySelector(containerId) : undefined;
35
+ // if tooltip is attached to a container, set max height to the height of the container so tooltip does not get cut off
36
+ const maxHeight = containerElement ? containerElement.getBoundingClientRect().height : undefined;
37
+ if (!isTooltipPinned) {
38
+ transform.current = assembleTransform(mousePos, chartWidth, pinnedPos, height !== null && height !== void 0 ? height : 0, width !== null && width !== void 0 ? width : 0, containerElement);
39
+ }
34
40
  // Get series nearby the cursor and pass into tooltip content children.
35
41
  const nearbySeries = getNearbySeriesData({
36
42
  mousePos,
@@ -46,11 +52,12 @@ export const TimeChartTooltip = /*#__PURE__*/ memo(function TimeChartTooltip({ c
46
52
  }
47
53
  const totalSeries = data.length;
48
54
  return /*#__PURE__*/ _jsx(Portal, {
55
+ container: containerElement,
49
56
  children: /*#__PURE__*/ _jsx(Box, {
50
57
  ref: tooltipRef,
51
- sx: (theme)=>getTooltipStyles(theme, pinnedPos),
58
+ sx: (theme)=>getTooltipStyles(theme, pinnedPos, maxHeight),
52
59
  style: {
53
- transform: cursorTransform
60
+ transform: transform.current
54
61
  },
55
62
  children: /*#__PURE__*/ _jsxs(Stack, {
56
63
  spacing: 0.5,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/TimeSeriesTooltip/TimeChartTooltip.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 { memo, useState } from 'react';\nimport { Box, Portal, Stack } from '@mui/material';\nimport { ECharts as EChartsInstance } from 'echarts/core';\nimport { UnitOptions, TimeSeries } from '@perses-dev/core';\nimport useResizeObserver from 'use-resize-observer';\nimport { TimeChartSeriesMapping } from '../model';\nimport { CursorCoordinates, FALLBACK_CHART_WIDTH, useMousePosition } from './tooltip-model';\nimport { assembleTransform, getTooltipStyles } from './utils';\nimport { getNearbySeriesData } from './nearby-series';\nimport { TooltipHeader } from './TooltipHeader';\nimport { TooltipContent } from './TooltipContent';\n\nexport interface TimeChartTooltipProps {\n chartRef: React.MutableRefObject<EChartsInstance | undefined>;\n data: TimeSeries[];\n seriesMapping: TimeChartSeriesMapping;\n wrapLabels?: boolean;\n unit?: UnitOptions;\n onUnpinClick?: () => void;\n pinnedPos: CursorCoordinates | null;\n}\n\nexport const TimeChartTooltip = memo(function TimeChartTooltip({\n chartRef,\n data,\n seriesMapping,\n wrapLabels,\n unit,\n onUnpinClick,\n pinnedPos,\n}: TimeChartTooltipProps) {\n const [showAllSeries, setShowAllSeries] = useState(false);\n const mousePos = useMousePosition();\n const { height, width, ref: tooltipRef } = useResizeObserver();\n\n const isTooltipPinned = pinnedPos !== null;\n\n if (mousePos === null || mousePos.target === null || data === null) return null;\n\n // Ensure user is hovering over a chart before checking for nearby series.\n if (pinnedPos === null && (mousePos.target as HTMLElement).tagName !== 'CANVAS') return null;\n\n const chart = chartRef.current;\n const chartWidth = chart?.getWidth() ?? FALLBACK_CHART_WIDTH; // Fallback width not likely to ever be needed.\n const cursorTransform = assembleTransform(mousePos, chartWidth, pinnedPos, height ?? 0, width ?? 0);\n\n // Get series nearby the cursor and pass into tooltip content children.\n const nearbySeries = getNearbySeriesData({\n mousePos,\n data,\n seriesMapping,\n pinnedPos,\n chart,\n unit,\n showAllSeries,\n });\n if (nearbySeries.length === 0) {\n return null;\n }\n\n const totalSeries = data.length;\n\n return (\n <Portal>\n <Box\n ref={tooltipRef}\n sx={(theme) => getTooltipStyles(theme, pinnedPos)}\n style={{\n transform: cursorTransform,\n }}\n >\n <Stack spacing={0.5}>\n <TooltipHeader\n nearbySeries={nearbySeries}\n totalSeries={totalSeries}\n isTooltipPinned={isTooltipPinned}\n showAllSeries={showAllSeries}\n onShowAllClick={(checked) => setShowAllSeries(checked)}\n onUnpinClick={onUnpinClick}\n />\n <TooltipContent series={nearbySeries} wrapLabels={wrapLabels} />\n </Stack>\n </Box>\n </Portal>\n );\n});\n"],"names":["memo","useState","Box","Portal","Stack","useResizeObserver","FALLBACK_CHART_WIDTH","useMousePosition","assembleTransform","getTooltipStyles","getNearbySeriesData","TooltipHeader","TooltipContent","TimeChartTooltip","chartRef","data","seriesMapping","wrapLabels","unit","onUnpinClick","pinnedPos","showAllSeries","setShowAllSeries","mousePos","height","width","ref","tooltipRef","isTooltipPinned","target","tagName","chart","current","chartWidth","getWidth","cursorTransform","nearbySeries","length","totalSeries","sx","theme","style","transform","spacing","onShowAllClick","checked","series"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/TimeSeriesTooltip/TimeChartTooltip.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 { memo, useRef, useState } from 'react';\nimport { Box, Portal, Stack } from '@mui/material';\nimport { ECharts as EChartsInstance } from 'echarts/core';\nimport { UnitOptions, TimeSeries } from '@perses-dev/core';\nimport useResizeObserver from 'use-resize-observer';\nimport { TimeChartSeriesMapping } from '../model';\nimport { CursorCoordinates, FALLBACK_CHART_WIDTH, useMousePosition } from './tooltip-model';\nimport { assembleTransform, getTooltipStyles } from './utils';\nimport { getNearbySeriesData } from './nearby-series';\nimport { TooltipHeader } from './TooltipHeader';\nimport { TooltipContent } from './TooltipContent';\n\nexport interface TimeChartTooltipProps {\n chartRef: React.MutableRefObject<EChartsInstance | undefined>;\n data: TimeSeries[];\n seriesMapping: TimeChartSeriesMapping;\n pinnedPos: CursorCoordinates | null;\n /**\n * The id of the container that will have the chart tooltip appended to it.\n * By default, the chart tooltip is attached to document.body.\n */\n containerId?: string;\n onUnpinClick?: () => void;\n unit?: UnitOptions;\n wrapLabels?: boolean;\n}\n\nexport const TimeChartTooltip = memo(function TimeChartTooltip({\n containerId,\n chartRef,\n data,\n seriesMapping,\n wrapLabels,\n unit,\n onUnpinClick,\n pinnedPos,\n}: TimeChartTooltipProps) {\n const [showAllSeries, setShowAllSeries] = useState(false);\n const transform = useRef('');\n\n const mousePos = useMousePosition();\n const { height, width, ref: tooltipRef } = useResizeObserver();\n\n const isTooltipPinned = pinnedPos !== null;\n\n if (mousePos === null || mousePos.target === null || data === null) return null;\n\n // Ensure user is hovering over a chart before checking for nearby series.\n if (pinnedPos === null && (mousePos.target as HTMLElement).tagName !== 'CANVAS') return null;\n\n const chart = chartRef.current;\n const chartWidth = chart?.getWidth() ?? FALLBACK_CHART_WIDTH; // Fallback width not likely to ever be needed.\n\n const containerElement = containerId ? document.querySelector(containerId) : undefined;\n // if tooltip is attached to a container, set max height to the height of the container so tooltip does not get cut off\n const maxHeight = containerElement ? containerElement.getBoundingClientRect().height : undefined;\n\n if (!isTooltipPinned) {\n transform.current = assembleTransform(mousePos, chartWidth, pinnedPos, height ?? 0, width ?? 0, containerElement);\n }\n\n // Get series nearby the cursor and pass into tooltip content children.\n const nearbySeries = getNearbySeriesData({\n mousePos,\n data,\n seriesMapping,\n pinnedPos,\n chart,\n unit,\n showAllSeries,\n });\n if (nearbySeries.length === 0) {\n return null;\n }\n\n const totalSeries = data.length;\n\n return (\n <Portal container={containerElement}>\n <Box\n ref={tooltipRef}\n sx={(theme) => getTooltipStyles(theme, pinnedPos, maxHeight)}\n style={{\n transform: transform.current,\n }}\n >\n <Stack spacing={0.5}>\n <TooltipHeader\n nearbySeries={nearbySeries}\n totalSeries={totalSeries}\n isTooltipPinned={isTooltipPinned}\n showAllSeries={showAllSeries}\n onShowAllClick={(checked) => setShowAllSeries(checked)}\n onUnpinClick={onUnpinClick}\n />\n <TooltipContent series={nearbySeries} wrapLabels={wrapLabels} />\n </Stack>\n </Box>\n </Portal>\n );\n});\n"],"names":["memo","useRef","useState","Box","Portal","Stack","useResizeObserver","FALLBACK_CHART_WIDTH","useMousePosition","assembleTransform","getTooltipStyles","getNearbySeriesData","TooltipHeader","TooltipContent","TimeChartTooltip","containerId","chartRef","data","seriesMapping","wrapLabels","unit","onUnpinClick","pinnedPos","showAllSeries","setShowAllSeries","transform","mousePos","height","width","ref","tooltipRef","isTooltipPinned","target","tagName","chart","current","chartWidth","getWidth","containerElement","document","querySelector","undefined","maxHeight","getBoundingClientRect","nearbySeries","length","totalSeries","container","sx","theme","style","spacing","onShowAllClick","checked","series"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TooltipHeader.d.ts","sourceRoot":"","sources":["../../src/TimeSeriesTooltip/TooltipHeader.tsx"],"names":[],"mappings":";AAkBA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,iBAAiB,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,eAAO,MAAM,aAAa,0DAsHxB,CAAC"}
1
+ {"version":3,"file":"TooltipHeader.d.ts","sourceRoot":"","sources":["../../src/TimeSeriesTooltip/TooltipHeader.tsx"],"names":[],"mappings":";AAkBA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,iBAAiB,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,eAAO,MAAM,aAAa,0DAwHxB,CAAC"}
@@ -48,6 +48,7 @@ export const TooltipHeader = /*#__PURE__*/ memo(function TooltipHeader({ nearbyS
48
48
  };
49
49
  // TODO: accurately calc whether more series are outside scrollable region using yBuffer, avg series name length, TOOLTIP_MAX_HEIGHT
50
50
  const showAllSeriesToggle = totalSeries > 5;
51
+ const pinTooltipHelpText = isTooltipPinned ? 'Click to unpin' : 'Click chart to pin';
51
52
  var ref2;
52
53
  return /*#__PURE__*/ _jsxs(Box, {
53
54
  sx: (theme)=>{
@@ -117,16 +118,13 @@ export const TooltipHeader = /*#__PURE__*/ memo(function TooltipHeader({ nearbyS
117
118
  direction: "row",
118
119
  alignItems: "center",
119
120
  children: [
120
- /*#__PURE__*/ _jsxs(Typography, {
121
+ /*#__PURE__*/ _jsx(Typography, {
121
122
  sx: {
122
123
  marginRight: 0.5,
123
124
  fontSize: 11,
124
125
  verticalAlign: 'middle'
125
126
  },
126
- children: [
127
- "Click to ",
128
- isTooltipPinned ? 'Unpin' : 'Pin'
129
- ]
127
+ children: pinTooltipHelpText
130
128
  }),
131
129
  isTooltipPinned ? /*#__PURE__*/ _jsx(Pin, {
132
130
  onClick: ()=>{