@perses-dev/components 0.0.0-snapshot-time-chart-rewrite-4667058 → 0.0.0-snapshot-panel-extra-content-3-17f9c42

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 (131) 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 +8 -8
  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 +61 -21
  58. package/dist/TimeChart/TimeChart.js.map +1 -1
  59. package/dist/TimeSeriesTooltip/LineChartTooltip.d.ts +6 -0
  60. package/dist/TimeSeriesTooltip/LineChartTooltip.d.ts.map +1 -1
  61. package/dist/TimeSeriesTooltip/LineChartTooltip.js +14 -6
  62. package/dist/TimeSeriesTooltip/LineChartTooltip.js.map +1 -1
  63. package/dist/TimeSeriesTooltip/TimeChartTooltip.d.ts +9 -3
  64. package/dist/TimeSeriesTooltip/TimeChartTooltip.d.ts.map +1 -1
  65. package/dist/TimeSeriesTooltip/TimeChartTooltip.js +14 -6
  66. package/dist/TimeSeriesTooltip/TimeChartTooltip.js.map +1 -1
  67. package/dist/TimeSeriesTooltip/TooltipHeader.d.ts +1 -0
  68. package/dist/TimeSeriesTooltip/TooltipHeader.d.ts.map +1 -1
  69. package/dist/TimeSeriesTooltip/TooltipHeader.js +7 -9
  70. package/dist/TimeSeriesTooltip/TooltipHeader.js.map +1 -1
  71. package/dist/TimeSeriesTooltip/nearby-series.d.ts +1 -1
  72. package/dist/TimeSeriesTooltip/nearby-series.d.ts.map +1 -1
  73. package/dist/TimeSeriesTooltip/nearby-series.js +90 -102
  74. package/dist/TimeSeriesTooltip/nearby-series.js.map +1 -1
  75. package/dist/TimeSeriesTooltip/tooltip-model.d.ts +5 -0
  76. package/dist/TimeSeriesTooltip/tooltip-model.d.ts.map +1 -1
  77. package/dist/TimeSeriesTooltip/tooltip-model.js +7 -0
  78. package/dist/TimeSeriesTooltip/tooltip-model.js.map +1 -1
  79. package/dist/TimeSeriesTooltip/utils.d.ts +2 -2
  80. package/dist/TimeSeriesTooltip/utils.d.ts.map +1 -1
  81. package/dist/TimeSeriesTooltip/utils.js +22 -8
  82. package/dist/TimeSeriesTooltip/utils.js.map +1 -1
  83. package/dist/UnitSelector/UnitSelector.d.ts +2 -1
  84. package/dist/UnitSelector/UnitSelector.d.ts.map +1 -1
  85. package/dist/UnitSelector/UnitSelector.js +3 -2
  86. package/dist/UnitSelector/UnitSelector.js.map +1 -1
  87. package/dist/cjs/BarChart/BarChart.js +129 -0
  88. package/dist/cjs/BarChart/index.js +28 -0
  89. package/dist/cjs/Dialog/DiscardChangesConfirmationDialog.js +53 -0
  90. package/dist/cjs/Dialog/index.js +1 -0
  91. package/dist/cjs/FontSizeSelector/FontSizeSelector.js +130 -0
  92. package/dist/cjs/FontSizeSelector/index.js +28 -0
  93. package/dist/cjs/LineChart/LineChart.js +7 -7
  94. package/dist/cjs/ModeSelector/ModeSelector.js +49 -0
  95. package/dist/cjs/ModeSelector/index.js +28 -0
  96. package/dist/cjs/SortSelector/SortSelector.js +48 -0
  97. package/dist/cjs/SortSelector/index.js +28 -0
  98. package/dist/cjs/StatChart/StatChart.js +7 -5
  99. package/dist/cjs/StatChart/calculateFontSize.js +5 -1
  100. package/dist/cjs/TimeChart/TimeChart.js +62 -17
  101. package/dist/cjs/TimeSeriesTooltip/LineChartTooltip.js +13 -5
  102. package/dist/cjs/TimeSeriesTooltip/TimeChartTooltip.js +13 -5
  103. package/dist/cjs/TimeSeriesTooltip/TooltipHeader.js +6 -8
  104. package/dist/cjs/TimeSeriesTooltip/nearby-series.js +90 -102
  105. package/dist/cjs/TimeSeriesTooltip/tooltip-model.js +12 -1
  106. package/dist/cjs/TimeSeriesTooltip/utils.js +21 -7
  107. package/dist/cjs/UnitSelector/UnitSelector.js +3 -2
  108. package/dist/cjs/index.js +4 -0
  109. package/dist/cjs/model/graph.js +35 -3
  110. package/dist/cjs/utils/chart-actions.js +61 -1
  111. package/dist/cjs/utils/theme-gen.js +39 -7
  112. package/dist/index.d.ts +4 -0
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +4 -0
  115. package/dist/index.js.map +1 -1
  116. package/dist/model/graph.d.ts +14 -5
  117. package/dist/model/graph.d.ts.map +1 -1
  118. package/dist/model/graph.js +25 -0
  119. package/dist/model/graph.js.map +1 -1
  120. package/dist/model/theme.d.ts +5 -0
  121. package/dist/model/theme.d.ts.map +1 -1
  122. package/dist/model/theme.js.map +1 -1
  123. package/dist/utils/chart-actions.d.ts +3 -0
  124. package/dist/utils/chart-actions.d.ts.map +1 -1
  125. package/dist/utils/chart-actions.js +66 -0
  126. package/dist/utils/chart-actions.js.map +1 -1
  127. package/dist/utils/theme-gen.d.ts +6 -1
  128. package/dist/utils/theme-gen.d.ts.map +1 -1
  129. package/dist/utils/theme-gen.js +39 -7
  130. package/dist/utils/theme-gen.js.map +1 -1
  131. package/package.json +3 -3
@@ -16,8 +16,8 @@ import Pin from 'mdi-material-ui/Pin';
16
16
  import PinOutline from 'mdi-material-ui/PinOutline';
17
17
  import { memo } from 'react';
18
18
  import { format } from 'date-fns';
19
- import { TOOLTIP_BG_COLOR_FALLBACK, TOOLTIP_MAX_WIDTH } from './tooltip-model';
20
- export const TooltipHeader = /*#__PURE__*/ memo(function TooltipHeader({ nearbySeries , totalSeries , isTooltipPinned , showAllSeries , onShowAllClick , onUnpinClick }) {
19
+ import { TOOLTIP_BG_COLOR_FALLBACK, TOOLTIP_MAX_WIDTH, PIN_TOOLTIP_HELP_TEXT, UNPIN_TOOLTIP_HELP_TEXT } from './tooltip-model';
20
+ export const TooltipHeader = /*#__PURE__*/ memo(function TooltipHeader({ nearbySeries , totalSeries , isTooltipPinned , showAllSeries , enablePinning =true , onShowAllClick , onUnpinClick }) {
21
21
  var ref;
22
22
  var ref1;
23
23
  const seriesTimeMs = (ref1 = (ref = nearbySeries[0]) === null || ref === void 0 ? void 0 : ref.date) !== null && ref1 !== void 0 ? ref1 : null;
@@ -47,7 +47,8 @@ export const TooltipHeader = /*#__PURE__*/ memo(function TooltipHeader({ nearbyS
47
47
  });
48
48
  };
49
49
  // TODO: accurately calc whether more series are outside scrollable region using yBuffer, avg series name length, TOOLTIP_MAX_HEIGHT
50
- const showAllSeriesToggle = totalSeries > 5;
50
+ const showAllSeriesToggle = enablePinning && totalSeries > 5;
51
+ const pinTooltipHelpText = isTooltipPinned ? UNPIN_TOOLTIP_HELP_TEXT : PIN_TOOLTIP_HELP_TEXT;
51
52
  var ref2;
52
53
  return /*#__PURE__*/ _jsxs(Box, {
53
54
  sx: (theme)=>{
@@ -113,20 +114,17 @@ export const TooltipHeader = /*#__PURE__*/ memo(function TooltipHeader({ nearbyS
113
114
  })
114
115
  ]
115
116
  }),
116
- /*#__PURE__*/ _jsxs(Stack, {
117
+ enablePinning && /*#__PURE__*/ _jsxs(Stack, {
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: ()=>{
@@ -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 { TOOLTIP_BG_COLOR_FALLBACK, TOOLTIP_MAX_WIDTH } from './tooltip-model';\n\nexport interface TooltipHeaderProps {\n nearbySeries: NearbySeriesArray;\n totalSeries: number;\n isTooltipPinned: boolean;\n showAllSeries: 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 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 = totalSeries > 5;\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 <Stack direction=\"row\" alignItems=\"center\">\n <Typography\n sx={{\n marginRight: 0.5,\n fontSize: 11,\n verticalAlign: 'middle',\n }}\n >\n Click to {isTooltipPinned ? 'Unpin' : 'Pin'}\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 </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","TooltipHeader","nearbySeries","totalSeries","isTooltipPinned","showAllSeries","onShowAllClick","onUnpinClick","seriesTimeMs","date","formatTimeSeriesHeader","timeMs","Date","formattedDate","formattedTime","variant","sx","theme","color","palette","common","white","strong","showAllSeriesToggle","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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"}
@@ -21,7 +21,7 @@ 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, unit?: UnitOptions): 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
@@ -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":"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"}
@@ -12,6 +12,7 @@
12
12
  // limitations under the License.
13
13
  import { formatValue } from '@perses-dev/core';
14
14
  import { OPTIMIZED_MODE_SERIES_LIMIT } from '../model';
15
+ import { batchDispatchNearbySeriesActions, getPointInGrid } from '../utils';
15
16
  // increase multipliers to show more series in tooltip
16
17
  export const INCREASE_NEARBY_SERIES_MULTIPLIER = 5.5; // adjusts how many series show in tooltip (higher == more series shown)
17
18
  export const DYNAMIC_NEARBY_SERIES_MULTIPLIER = 30; // used for adjustment after series number divisor
@@ -26,13 +27,15 @@ export const SHOW_FEWER_SERIES_LIMIT = 5;
26
27
  var ref1;
27
28
  const cursorY = (ref1 = pointInGrid[1]) !== null && ref1 !== void 0 ? ref1 : null;
28
29
  if (cursorX === null || cursorY === null) return currentNearbySeriesData;
30
+ if (chart.dispatchAction === undefined) return currentNearbySeriesData;
29
31
  if (!Array.isArray(data)) return currentNearbySeriesData;
30
- // TODO: better way to calc xBuffer for longer time ranges
31
- // const xBuffer = cursorX * 0.0000005;
32
32
  const nearbySeriesIndexes = [];
33
33
  const emphasizedSeriesIndexes = [];
34
34
  const nonEmphasizedSeriesIndexes = [];
35
+ const emphasizedDatapoints = [];
36
+ const duplicateDatapoints = [];
35
37
  const totalSeries = data.length;
38
+ const yValueCounts = new Map();
36
39
  let closestTimestamp = null;
37
40
  let closestDistance = Infinity;
38
41
  // find the timestamp with data that is closest to cursorX
@@ -42,6 +45,8 @@ export const SHOW_FEWER_SERIES_LIMIT = 5;
42
45
  const currentDataset = totalSeries > 0 ? data[seriesIdx] : null;
43
46
  if (currentDataset == null) break;
44
47
  const currentDatasetValues = currentDataset.values;
48
+ // Determine closestTimestamp before checking whether it is equal to xValue. Consolidating
49
+ // with second currentDatasetValues loop below would result in duplicate nearby series
45
50
  for (const [timestamp] of currentDatasetValues){
46
51
  const distance = Math.abs(timestamp - cursorX);
47
52
  if (distance < closestDistance) {
@@ -62,7 +67,6 @@ export const SHOW_FEWER_SERIES_LIMIT = 5;
62
67
  const yValue = nearbyTimeSeries[1];
63
68
  // TODO: ensure null values not displayed in tooltip
64
69
  if (yValue !== undefined && yValue !== null) {
65
- // if (cursorX < xValue + xBuffer && cursorX > xValue - xBuffer) {
66
70
  if (closestTimestamp === xValue) {
67
71
  if (cursorY <= yValue + yBuffer && cursorY >= yValue - yBuffer) {
68
72
  // show fewer bold series in tooltip when many total series
@@ -74,19 +78,36 @@ export const SHOW_FEWER_SERIES_LIMIT = 5;
74
78
  percentage: percentRangeToCheck
75
79
  });
76
80
  if (isClosestToCursor) {
81
+ // shows as bold in tooltip, customize 'emphasis' options in getTimeSeries util
77
82
  emphasizedSeriesIndexes.push(seriesIdx);
78
- } else {
79
- nonEmphasizedSeriesIndexes.push(seriesIdx);
80
- // ensure series not close to cursor are not highlighted
81
- if ((chart === null || chart === void 0 ? void 0 : chart.dispatchAction) !== undefined) {
82
- chart.dispatchAction({
83
- type: 'downplay',
84
- seriesIndex: seriesIdx
83
+ var ref2;
84
+ // Used to determine which datapoint to apply select styles to.
85
+ // Accounts for cases where lines may be rendered directly on top of eachother.
86
+ const duplicateValuesCount = (ref2 = yValueCounts.get(yValue)) !== null && ref2 !== void 0 ? ref2 : 0;
87
+ yValueCounts.set(yValue, duplicateValuesCount + 1);
88
+ if (duplicateValuesCount > 0) {
89
+ duplicateDatapoints.push({
90
+ seriesIndex: seriesIdx,
91
+ dataIndex: datumIdx,
92
+ seriesName: currentSeriesName,
93
+ yValue: yValue
85
94
  });
86
95
  }
96
+ // keep track of all bold datapoints in tooltip so that 'select' state only applied to topmost
97
+ emphasizedDatapoints.push({
98
+ seriesIndex: seriesIdx,
99
+ dataIndex: datumIdx,
100
+ seriesName: currentSeriesName,
101
+ yValue: yValue
102
+ });
103
+ } else {
104
+ nonEmphasizedSeriesIndexes.push(seriesIdx);
105
+ // ensure series far away from cursor are not highlighted
106
+ chart.dispatchAction({
107
+ type: 'downplay',
108
+ seriesIndex: seriesIdx
109
+ });
87
110
  }
88
- // determine whether to convert timestamp to ms, see: https://stackoverflow.com/a/23982005/17575201
89
- // const xValueMilliSeconds = xValue > 99999999999 ? xValue : xValue * 1000;
90
111
  const formattedY = formatValue(yValue, unit);
91
112
  currentNearbySeriesData.push({
92
113
  seriesIdx: seriesIdx,
@@ -106,32 +127,7 @@ export const SHOW_FEWER_SERIES_LIMIT = 5;
106
127
  }
107
128
  }
108
129
  }
109
- if ((chart === null || chart === void 0 ? void 0 : chart.dispatchAction) !== undefined) {
110
- // Clears emphasis state of all lines that are not emphasized.
111
- // Emphasized is a subset of just the nearby series that are closest to cursor.
112
- chart.dispatchAction({
113
- type: 'downplay',
114
- seriesIndex: nonEmphasizedSeriesIndexes
115
- });
116
- // https://echarts.apache.org/en/api.html#action.highlight
117
- if (emphasizedSeriesIndexes.length > 0) {
118
- // Fadeout opacity of all series not closest to cursor.
119
- chart.dispatchAction({
120
- type: 'highlight',
121
- seriesIndex: emphasizedSeriesIndexes,
122
- notBlur: false,
123
- escapeConnect: true
124
- });
125
- } else {
126
- // When no emphasized series with bold text, notBlur allows opacity fadeout to not trigger.
127
- chart.dispatchAction({
128
- type: 'highlight',
129
- seriesIndex: nearbySeriesIndexes,
130
- notBlur: true,
131
- escapeConnect: true
132
- });
133
- }
134
- }
130
+ batchDispatchNearbySeriesActions(chart, nearbySeriesIndexes, emphasizedSeriesIndexes, nonEmphasizedSeriesIndexes, emphasizedDatapoints, duplicateDatapoints);
135
131
  return currentNearbySeriesData;
136
132
  }
137
133
  /**
@@ -153,55 +149,54 @@ export const SHOW_FEWER_SERIES_LIMIT = 5;
153
149
  if (Array.isArray(data.xAxis) && Array.isArray(data.timeSeries)) {
154
150
  for(let seriesIdx = 0; seriesIdx < totalSeries; seriesIdx++){
155
151
  const currentSeries = data.timeSeries[seriesIdx];
152
+ if (currentSeries === undefined) break;
156
153
  if (currentNearbySeriesData.length >= OPTIMIZED_MODE_SERIES_LIMIT) break;
157
- if (currentSeries !== undefined) {
158
- const currentSeriesName = currentSeries.name ? currentSeries.name.toString() : '';
159
- var _color;
160
- const markerColor = (_color = currentSeries.color) !== null && _color !== void 0 ? _color : '#000';
161
- if (Array.isArray(currentSeries.data)) {
162
- for(let datumIdx = 0; datumIdx < currentSeries.data.length; datumIdx++){
163
- var _datumIdx;
164
- const xValue = (_datumIdx = data.xAxis[datumIdx]) !== null && _datumIdx !== void 0 ? _datumIdx : 0;
165
- const yValue = currentSeries.data[datumIdx];
166
- // ensure null values not displayed in tooltip
167
- if (yValue !== undefined && yValue !== null && cursorX === datumIdx) {
168
- if (yValue !== '-' && cursorY <= yValue + yBuffer && cursorY >= yValue - yBuffer) {
169
- // show fewer bold series in tooltip when many total series
170
- const minPercentRange = totalSeries > SHOW_FEWER_SERIES_LIMIT ? 2 : 5;
171
- const percentRangeToCheck = Math.max(minPercentRange, 100 / totalSeries);
172
- const isClosestToCursor = isWithinPercentageRange({
173
- valueToCheck: cursorY,
174
- baseValue: yValue,
175
- percentage: percentRangeToCheck
176
- });
177
- if (isClosestToCursor) {
178
- emphasizedSeriesIndexes.push(seriesIdx);
179
- } else {
180
- nonEmphasizedSeriesIndexes.push(seriesIdx);
181
- // ensure series not close to cursor are not highlighted
182
- if ((chart === null || chart === void 0 ? void 0 : chart.dispatchAction) !== undefined) {
183
- chart.dispatchAction({
184
- type: 'downplay',
185
- seriesIndex: seriesIdx
186
- });
187
- }
154
+ const currentSeriesName = currentSeries.name ? currentSeries.name.toString() : '';
155
+ var _color;
156
+ const markerColor = (_color = currentSeries.color) !== null && _color !== void 0 ? _color : '#000';
157
+ if (Array.isArray(currentSeries.data)) {
158
+ for(let datumIdx = 0; datumIdx < currentSeries.data.length; datumIdx++){
159
+ var _datumIdx;
160
+ const xValue = (_datumIdx = data.xAxis[datumIdx]) !== null && _datumIdx !== void 0 ? _datumIdx : 0;
161
+ const yValue = currentSeries.data[datumIdx];
162
+ // ensure null values not displayed in tooltip
163
+ if (yValue !== undefined && yValue !== null && cursorX === datumIdx) {
164
+ if (yValue !== '-' && cursorY <= yValue + yBuffer && cursorY >= yValue - yBuffer) {
165
+ // show fewer bold series in tooltip when many total series
166
+ const minPercentRange = totalSeries > SHOW_FEWER_SERIES_LIMIT ? 2 : 5;
167
+ const percentRangeToCheck = Math.max(minPercentRange, 100 / totalSeries);
168
+ const isClosestToCursor = isWithinPercentageRange({
169
+ valueToCheck: cursorY,
170
+ baseValue: yValue,
171
+ percentage: percentRangeToCheck
172
+ });
173
+ if (isClosestToCursor) {
174
+ emphasizedSeriesIndexes.push(seriesIdx);
175
+ } else {
176
+ nonEmphasizedSeriesIndexes.push(seriesIdx);
177
+ // ensure series not close to cursor are not highlighted
178
+ if ((chart === null || chart === void 0 ? void 0 : chart.dispatchAction) !== undefined) {
179
+ chart.dispatchAction({
180
+ type: 'downplay',
181
+ seriesIndex: seriesIdx
182
+ });
188
183
  }
189
- // determine whether to convert timestamp to ms, see: https://stackoverflow.com/a/23982005/17575201
190
- const xValueMilliSeconds = xValue > 99999999999 ? xValue : xValue * 1000;
191
- const formattedY = formatValue(yValue, unit);
192
- currentNearbySeriesData.push({
193
- seriesIdx: seriesIdx,
194
- datumIdx: datumIdx,
195
- seriesName: currentSeriesName,
196
- date: xValueMilliSeconds,
197
- x: xValue,
198
- y: yValue,
199
- formattedY: formattedY,
200
- markerColor: markerColor.toString(),
201
- isClosestToCursor
202
- });
203
- nearbySeriesIndexes.push(seriesIdx);
204
184
  }
185
+ // determine whether to convert timestamp to ms, see: https://stackoverflow.com/a/23982005/17575201
186
+ const xValueMilliSeconds = xValue > 99999999999 ? xValue : xValue * 1000;
187
+ const formattedY = formatValue(yValue, unit);
188
+ currentNearbySeriesData.push({
189
+ seriesIdx: seriesIdx,
190
+ datumIdx: datumIdx,
191
+ seriesName: currentSeriesName,
192
+ date: xValueMilliSeconds,
193
+ x: xValue,
194
+ y: yValue,
195
+ formattedY: formattedY,
196
+ markerColor: markerColor.toString(),
197
+ isClosestToCursor
198
+ });
199
+ nearbySeriesIndexes.push(seriesIdx);
205
200
  }
206
201
  }
207
202
  }
@@ -262,24 +257,17 @@ export const SHOW_FEWER_SERIES_LIMIT = 5;
262
257
  }
263
258
  if (cursorTargetMatchesChart === false) return [];
264
259
  if (chart['_model'] === undefined || data === null) return [];
265
- const chartModel = chart['_model'];
266
- const yInterval = chartModel.getComponent('yAxis').axis.scale._interval;
267
- const totalSeries = data.length;
268
- const yBuffer = getYBuffer({
269
- yInterval,
270
- totalSeries,
271
- showAllSeries
272
- });
273
- var _x, _y;
274
- const pointInPixel = [
275
- (_x = mousePos.plotCanvas.x) !== null && _x !== void 0 ? _x : 0,
276
- (_y = mousePos.plotCanvas.y) !== null && _y !== void 0 ? _y : 0
277
- ];
278
- if (chart.containPixel('grid', pointInPixel)) {
279
- const pointInGrid = chart.convertFromPixel('grid', pointInPixel);
280
- if (pointInGrid[0] !== undefined && pointInGrid[1] !== undefined) {
281
- return checkforNearbyTimeSeries(data, seriesMapping, pointInGrid, yBuffer, chart, unit);
282
- }
260
+ const pointInGrid = getPointInGrid(mousePos.plotCanvas.x, mousePos.plotCanvas.y, chart);
261
+ if (pointInGrid !== null) {
262
+ const chartModel = chart['_model'];
263
+ const yInterval = chartModel.getComponent('yAxis').axis.scale._interval;
264
+ const totalSeries = data.length;
265
+ const yBuffer = getYBuffer({
266
+ yInterval,
267
+ totalSeries,
268
+ showAllSeries
269
+ });
270
+ return checkforNearbyTimeSeries(data, seriesMapping, pointInGrid, yBuffer, chart, unit);
283
271
  }
284
272
  return [];
285
273
  }
@@ -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 } from '../model';\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 (!Array.isArray(data)) return currentNearbySeriesData;\n\n // TODO: better way to calc xBuffer for longer time ranges\n // const xBuffer = cursorX * 0.0000005;\n\n const nearbySeriesIndexes: number[] = [];\n const emphasizedSeriesIndexes: number[] = [];\n const nonEmphasizedSeriesIndexes: number[] = [];\n const totalSeries = data.length;\n\n let closestTimestamp = null;\n let closestDistance = Infinity;\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\n for (const [timestamp] of currentDatasetValues) {\n const distance = Math.abs(timestamp - cursorX);\n\n if (distance < closestDistance) {\n closestTimestamp = timestamp;\n closestDistance = distance;\n }\n }\n\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 (cursorX < xValue + xBuffer && cursorX > xValue - xBuffer) {\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 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: 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 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 * [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 (currentNearbySeriesData.length >= OPTIMIZED_MODE_SERIES_LIMIT) break;\n if (currentSeries !== undefined) {\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 }\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 const chartModel = chart['_model'];\n const yInterval = chartModel.getComponent('yAxis').axis.scale._interval;\n const totalSeries = data.length;\n\n const yBuffer = getYBuffer({ yInterval, totalSeries, showAllSeries });\n\n const pointInPixel = [mousePos.plotCanvas.x ?? 0, mousePos.plotCanvas.y ?? 0];\n if (chart.containPixel('grid', pointInPixel)) {\n const pointInGrid: number[] = chart.convertFromPixel('grid', pointInPixel);\n if (pointInGrid[0] !== undefined && pointInGrid[1] !== undefined) {\n return checkforNearbyTimeSeries(data, seriesMapping, pointInGrid, yBuffer, chart, unit);\n }\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","INCREASE_NEARBY_SERIES_MULTIPLIER","DYNAMIC_NEARBY_SERIES_MULTIPLIER","SHOW_FEWER_SERIES_LIMIT","checkforNearbyTimeSeries","data","seriesMapping","pointInGrid","yBuffer","chart","unit","currentNearbySeriesData","cursorX","cursorY","Array","isArray","nearbySeriesIndexes","emphasizedSeriesIndexes","nonEmphasizedSeriesIndexes","totalSeries","length","closestTimestamp","closestDistance","Infinity","seriesIdx","currentSeries","undefined","currentDataset","currentDatasetValues","values","timestamp","distance","Math","abs","lineSeries","currentSeriesName","name","toString","markerColor","color","datumIdx","nearbyTimeSeries","xValue","yValue","minPercentRange","percentRangeToCheck","max","isClosestToCursor","isWithinPercentageRange","valueToCheck","baseValue","percentage","push","dispatchAction","type","seriesIndex","formattedY","seriesName","date","x","y","notBlur","escapeConnect","legacyCheckforNearbySeries","timeSeries","xAxis","xValueMilliSeconds","getNearbySeriesData","mousePos","pinnedPos","showAllSeries","cursorTargetMatchesChart","target","currentParent","parentElement","currentGrandparent","chartDom","getDom","chartModel","yInterval","getComponent","axis","scale","_interval","getYBuffer","pointInPixel","plotCanvas","containPixel","convertFromPixel","legacyGetNearbySeriesData","chartData","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, UnitOptions, TimeSeries } from '@perses-dev/core';\nimport { EChartsDataFormat, OPTIMIZED_MODE_SERIES_LIMIT, TimeChartSeriesMapping, DatapointInfo } from '../model';\nimport { batchDispatchNearbySeriesActions, getPointInGrid } 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 let closestTimestamp = null;\n let closestDistance = Infinity;\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\n // Determine closestTimestamp before checking whether it is equal to xValue. Consolidating\n // with second currentDatasetValues loop below would result in duplicate nearby series\n for (const [timestamp] of currentDatasetValues) {\n const distance = Math.abs(timestamp - cursorX);\n if (distance < closestDistance) {\n closestTimestamp = timestamp;\n closestDistance = distance;\n }\n }\n\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","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","closestTimestamp","closestDistance","Infinity","seriesIdx","currentSeries","currentDataset","currentDatasetValues","values","timestamp","distance","Math","abs","lineSeries","currentSeriesName","name","toString","markerColor","color","datumIdx","nearbyTimeSeries","xValue","yValue","minPercentRange","percentRangeToCheck","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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"}
@@ -4,6 +4,7 @@ export declare const TOOLTIP_MAX_WIDTH = 650;
4
4
  export declare const TOOLTIP_MAX_HEIGHT = 650;
5
5
  export declare const TOOLTIP_LABELS_MAX_WIDTH: number;
6
6
  export declare const TOOLTIP_ADJUST_Y_POS_MULTIPLIER = 0.75;
7
+ export declare const TOOLTIP_PADDING = 8;
7
8
  export declare const FALLBACK_CHART_WIDTH = 750;
8
9
  export declare const NEARBY_SERIES_DESCRIPTION = "nearby series showing in tooltip";
9
10
  export declare const EMPHASIZED_SERIES_DESCRIPTION = "emphasized series showing as bold in tooltip";
@@ -74,6 +75,10 @@ export declare const useMousePosition: () => CursorData['coords'];
74
75
  export declare type TooltipConfig = {
75
76
  wrapLabels: boolean;
76
77
  hidden?: boolean;
78
+ enablePinning?: boolean;
77
79
  };
80
+ export declare const DEFAULT_TOOLTIP_CONFIG: TooltipConfig;
81
+ export declare const PIN_TOOLTIP_HELP_TEXT = "Click chart to pin";
82
+ export declare const UNPIN_TOOLTIP_HELP_TEXT = "Click to unpin";
78
83
  export {};
79
84
  //# sourceMappingURL=tooltip-model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip-model.d.ts","sourceRoot":"","sources":["../../src/TimeSeriesTooltip/tooltip-model.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,wBAAwB,QAA0B,CAAC;AAChE,eAAO,MAAM,+BAA+B,OAAO,CAAC;AAEpD,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,eAAO,MAAM,yBAAyB,qCAAqC,CAAC;AAC5E,eAAO,MAAM,6BAA6B,iDAAiD,CAAC;AAE5F,eAAO,MAAM,yBAAyB,YAAY,CAAC;AAEnD,eAAO,MAAM,mBAAmB,qBAQ9B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;CAa7B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;CAG5B,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,CAAC,EAAE;QACR,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACxC,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,aAAK,iBAAiB,GAAG;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,cAAc,GAAG,gBAAgB,CAAC;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,oBAAY,eAAe,GAAG,UAAU,GAAG,iBAAiB,CAAC;AAE7D,eAAO,MAAM,gBAAgB,QAAO,UAAU,CAAC,QAAQ,CAoCtD,CAAC;AAEF,oBAAY,aAAa,GAAG;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC"}
1
+ {"version":3,"file":"tooltip-model.d.ts","sourceRoot":"","sources":["../../src/TimeSeriesTooltip/tooltip-model.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,wBAAwB,QAA0B,CAAC;AAChE,eAAO,MAAM,+BAA+B,OAAO,CAAC;AACpD,eAAO,MAAM,eAAe,IAAI,CAAC;AAEjC,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,eAAO,MAAM,yBAAyB,qCAAqC,CAAC;AAC5E,eAAO,MAAM,6BAA6B,iDAAiD,CAAC;AAE5F,eAAO,MAAM,yBAAyB,YAAY,CAAC;AAEnD,eAAO,MAAM,mBAAmB,qBAQ9B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;CAa7B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;CAG5B,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,CAAC,EAAE;QACR,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACxC,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,aAAK,iBAAiB,GAAG;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,cAAc,GAAG,gBAAgB,CAAC;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,oBAAY,eAAe,GAAG,UAAU,GAAG,iBAAiB,CAAC;AAE7D,eAAO,MAAM,gBAAgB,QAAO,UAAU,CAAC,QAAQ,CAoCtD,CAAC;AAEF,oBAAY,aAAa,GAAG;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,aAGpC,CAAC;AAEF,eAAO,MAAM,qBAAqB,uBAAuB,CAAC;AAE1D,eAAO,MAAM,uBAAuB,mBAAmB,CAAC"}
@@ -16,6 +16,7 @@ export const TOOLTIP_MAX_WIDTH = 650;
16
16
  export const TOOLTIP_MAX_HEIGHT = 650;
17
17
  export const TOOLTIP_LABELS_MAX_WIDTH = TOOLTIP_MAX_WIDTH - 150;
18
18
  export const TOOLTIP_ADJUST_Y_POS_MULTIPLIER = 0.75;
19
+ export const TOOLTIP_PADDING = 8;
19
20
  export const FALLBACK_CHART_WIDTH = 750;
20
21
  export const NEARBY_SERIES_DESCRIPTION = 'nearby series showing in tooltip';
21
22
  export const EMPHASIZED_SERIES_DESCRIPTION = 'emphasized series showing as bold in tooltip';
@@ -81,5 +82,11 @@ export const useMousePosition = ()=>{
81
82
  }, []);
82
83
  return coords;
83
84
  };
85
+ export const DEFAULT_TOOLTIP_CONFIG = {
86
+ wrapLabels: true,
87
+ enablePinning: true
88
+ };
89
+ export const PIN_TOOLTIP_HELP_TEXT = 'Click chart to pin';
90
+ export const UNPIN_TOOLTIP_HELP_TEXT = 'Click to unpin';
84
91
 
85
92
  //# sourceMappingURL=tooltip-model.js.map