@splunk/visualizations 28.5.3 → 28.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (663) hide show
  1. package/Area/Area.d.ts.map +1 -1
  2. package/Area/areaUtils.d.ts +1 -1
  3. package/Area/areaUtils.d.ts.map +1 -1
  4. package/Area/config.d.ts.map +1 -1
  5. package/Area.config.js +93 -25
  6. package/Area.config.js.map +3 -3
  7. package/Area.js +708 -319
  8. package/Area.js.map +4 -4
  9. package/Bar/Bar.d.ts.map +1 -1
  10. package/Bar.config.js +81 -24
  11. package/Bar.config.js.map +3 -3
  12. package/Bar.js +528 -297
  13. package/Bar.js.map +4 -4
  14. package/Bubble.config.js +80 -23
  15. package/Bubble.config.js.map +2 -2
  16. package/Bubble.js +375 -208
  17. package/Bubble.js.map +4 -4
  18. package/CHANGELOG.external.md +75 -60
  19. package/ChoroplethSvg/PureChoroplethSvg/PureChoroplethSvg.d.ts +1 -0
  20. package/ChoroplethSvg/PureChoroplethSvg/PureChoroplethSvg.d.ts.map +1 -1
  21. package/ChoroplethSvg/PureChoroplethSvg/SvgChoroplethDynamic.d.ts +12 -25
  22. package/ChoroplethSvg/PureChoroplethSvg/SvgChoroplethDynamic.d.ts.map +1 -1
  23. package/ChoroplethSvg/PureChoroplethSvg/SvgMutator.d.ts +11 -4
  24. package/ChoroplethSvg/PureChoroplethSvg/SvgMutator.d.ts.map +1 -1
  25. package/ChoroplethSvg.js +1133 -253
  26. package/ChoroplethSvg.js.map +4 -4
  27. package/Column/Column.d.ts.map +1 -1
  28. package/Column.config.js +81 -24
  29. package/Column.config.js.map +3 -3
  30. package/Column.js +531 -300
  31. package/Column.js.map +4 -4
  32. package/Ellipse.config.js +1 -1
  33. package/Ellipse.config.js.map +2 -2
  34. package/Ellipse.js +277 -161
  35. package/Ellipse.js.map +4 -4
  36. package/Events/PureEvents/FieldSummaryTooltip.d.ts +8 -31
  37. package/Events/PureEvents/FieldSummaryTooltip.d.ts.map +1 -1
  38. package/Events/PureEvents/PureEvents.d.ts.map +1 -1
  39. package/Events/PureEvents/TimeControlsPopover.d.ts +6 -25
  40. package/Events/PureEvents/TimeControlsPopover.d.ts.map +1 -1
  41. package/Events/config.d.ts.map +1 -1
  42. package/Events.config.js +13 -3
  43. package/Events.config.js.map +2 -2
  44. package/Events.js +355 -293
  45. package/Events.js.map +4 -4
  46. package/FillerGauge/FillerGauge.d.ts.map +1 -1
  47. package/FillerGauge/config.d.ts.map +1 -1
  48. package/FillerGauge.config.js +76 -24
  49. package/FillerGauge.config.js.map +2 -2
  50. package/FillerGauge.js +512 -271
  51. package/FillerGauge.js.map +4 -4
  52. package/Image/config.d.ts.map +1 -1
  53. package/Image.config.js +7 -0
  54. package/Image.config.js.map +2 -2
  55. package/Image.js +282 -149
  56. package/Image.js.map +4 -4
  57. package/LICENSE +13 -0
  58. package/Line/Line.d.ts.map +1 -1
  59. package/Line/config.d.ts.map +1 -1
  60. package/Line/lineUtils.d.ts.map +1 -1
  61. package/Line/mockdata/LineData.d.ts +21 -0
  62. package/Line/mockdata/LineData.d.ts.map +1 -1
  63. package/Line.config.js +86 -25
  64. package/Line.config.js.map +3 -3
  65. package/Line.js +638 -382
  66. package/Line.js.map +4 -4
  67. package/LinkGraph/PureLinkGraph/PureLinkGraph.d.ts +47 -73
  68. package/LinkGraph/PureLinkGraph/PureLinkGraph.d.ts.map +1 -1
  69. package/LinkGraph/PureLinkGraph/PureLinkGraphUtils.d.ts +11 -2
  70. package/LinkGraph/PureLinkGraph/PureLinkGraphUtils.d.ts.map +1 -1
  71. package/LinkGraph/PureLinkGraph/components/Graph.d.ts +5 -5
  72. package/LinkGraph/PureLinkGraph/components/Node.d.ts +2 -2
  73. package/LinkGraph/PureLinkGraph/components/Nodes.d.ts +2 -2
  74. package/LinkGraph.js +886 -759
  75. package/LinkGraph.js.map +4 -4
  76. package/Map/Map.d.ts +1 -0
  77. package/Map/Map.d.ts.map +1 -1
  78. package/Map/PureMap/BubbleLayer.d.ts +22 -4
  79. package/Map/PureMap/BubbleLayer.d.ts.map +1 -1
  80. package/Map/PureMap/ChoroplethLayer.d.ts +9 -1
  81. package/Map/PureMap/ChoroplethLayer.d.ts.map +1 -1
  82. package/Map/PureMap/ClusterLayer.d.ts +3 -1
  83. package/Map/PureMap/ClusterLayer.d.ts.map +1 -1
  84. package/Map/PureMap/LocalChoroplethLayer.d.ts +1 -0
  85. package/Map/PureMap/LocalChoroplethLayer.d.ts.map +1 -1
  86. package/Map/PureMap/MapContext.d.ts +13 -0
  87. package/Map/PureMap/MapContext.d.ts.map +1 -0
  88. package/Map/PureMap/MarkerLayer.d.ts +19 -2
  89. package/Map/PureMap/MarkerLayer.d.ts.map +1 -1
  90. package/Map/PureMap/MarkerWrapper.d.ts +3 -2
  91. package/Map/PureMap/MarkerWrapper.d.ts.map +1 -1
  92. package/Map/PureMap/PureMap.d.ts +1 -0
  93. package/Map/PureMap/PureMap.d.ts.map +1 -1
  94. package/Map/PureMap/PureMapContainer.d.ts.map +1 -1
  95. package/Map/PureMap/Tooltip.d.ts +6 -1
  96. package/Map/PureMap/Tooltip.d.ts.map +1 -1
  97. package/Map/PureMap/keyboardConstants.d.ts +11 -0
  98. package/Map/PureMap/keyboardConstants.d.ts.map +1 -0
  99. package/Map/PureMap/useRovingTabindex.d.ts +18 -0
  100. package/Map/PureMap/useRovingTabindex.d.ts.map +1 -0
  101. package/Map/config.d.ts.map +1 -1
  102. package/Map.config.js +4 -1
  103. package/Map.config.js.map +2 -2
  104. package/Map.js +1594 -628
  105. package/Map.js.map +4 -4
  106. package/Markdown/Markdown.d.ts.map +1 -1
  107. package/Markdown.config.js.map +1 -1
  108. package/Markdown.js +304 -161
  109. package/Markdown.js.map +4 -4
  110. package/MarkerGauge/MarkerGauge.d.ts +1 -47
  111. package/MarkerGauge/MarkerGauge.d.ts.map +1 -1
  112. package/MarkerGauge/PureMarkerGauge/MarkerGauge.d.ts +22 -68
  113. package/MarkerGauge/PureMarkerGauge/MarkerGauge.d.ts.map +1 -1
  114. package/MarkerGauge/config.d.ts.map +1 -1
  115. package/MarkerGauge.config.js +75 -23
  116. package/MarkerGauge.config.js.map +2 -2
  117. package/MarkerGauge.js +560 -375
  118. package/MarkerGauge.js.map +4 -4
  119. package/NetworkGraph/NetworkGraph.d.ts +2 -5
  120. package/NetworkGraph/NetworkGraph.d.ts.map +1 -1
  121. package/NetworkGraph/PureNetworkGraph/PureNetworkGraph.d.ts.map +1 -1
  122. package/NetworkGraph/PureNetworkGraph/components/NetworkGraphSvg.d.ts +1 -0
  123. package/NetworkGraph/PureNetworkGraph/components/NetworkGraphSvg.d.ts.map +1 -1
  124. package/NetworkGraph/PureNetworkGraph/components/Node.d.ts +1 -0
  125. package/NetworkGraph/PureNetworkGraph/components/Node.d.ts.map +1 -1
  126. package/NetworkGraph/PureNetworkGraph/components/Tooltip.d.ts +1 -1
  127. package/NetworkGraph/PureNetworkGraph/components/Tooltip.d.ts.map +1 -1
  128. package/NetworkGraph/PureNetworkGraph/components/ZoomControls.d.ts +1 -0
  129. package/NetworkGraph/PureNetworkGraph/components/ZoomControls.d.ts.map +1 -1
  130. package/NetworkGraph/PureNetworkGraph/utils/networkGraphUtils.d.ts +23 -0
  131. package/NetworkGraph/PureNetworkGraph/utils/networkGraphUtils.d.ts.map +1 -1
  132. package/NetworkGraph.config.js +2 -0
  133. package/NetworkGraph.config.js.map +2 -2
  134. package/NetworkGraph.js +895 -455
  135. package/NetworkGraph.js.map +4 -4
  136. package/ParallelCoordinates.config.js.map +1 -1
  137. package/ParallelCoordinates.js +288 -172
  138. package/ParallelCoordinates.js.map +4 -4
  139. package/Pie/Pie.d.ts.map +1 -1
  140. package/Pie/pieUtils.d.ts +2 -2
  141. package/Pie.config.js +74 -22
  142. package/Pie.config.js.map +2 -2
  143. package/Pie.js +522 -296
  144. package/Pie.js.map +4 -4
  145. package/ProcessTree/ProcessTree.d.ts +23 -0
  146. package/ProcessTree/ProcessTree.d.ts.map +1 -0
  147. package/ProcessTree/PureProcessTree/PureProcessTree.d.ts +33 -0
  148. package/ProcessTree/PureProcessTree/PureProcessTree.d.ts.map +1 -0
  149. package/ProcessTree/PureProcessTree/components/DirectionalBytes.d.ts +8 -0
  150. package/ProcessTree/PureProcessTree/components/DirectionalBytes.d.ts.map +1 -0
  151. package/ProcessTree/PureProcessTree/components/ProcessTreeLeftPanel.d.ts +46 -0
  152. package/ProcessTree/PureProcessTree/components/ProcessTreeLeftPanel.d.ts.map +1 -0
  153. package/ProcessTree/PureProcessTree/components/ProcessTreeRightPanel.d.ts +20 -0
  154. package/ProcessTree/PureProcessTree/components/ProcessTreeRightPanel.d.ts.map +1 -0
  155. package/ProcessTree/PureProcessTree/hooks/useProcessTreeExpansionState.d.ts +20 -0
  156. package/ProcessTree/PureProcessTree/hooks/useProcessTreeExpansionState.d.ts.map +1 -0
  157. package/ProcessTree/PureProcessTree/hooks/useProcessTreeGraphData.d.ts +46 -0
  158. package/ProcessTree/PureProcessTree/hooks/useProcessTreeGraphData.d.ts.map +1 -0
  159. package/ProcessTree/PureProcessTree/hooks/useProcessTreeLinkOverlay.d.ts +23 -0
  160. package/ProcessTree/PureProcessTree/hooks/useProcessTreeLinkOverlay.d.ts.map +1 -0
  161. package/ProcessTree/PureProcessTree/mockdata/data.d.ts +235 -0
  162. package/ProcessTree/PureProcessTree/mockdata/data.d.ts.map +1 -0
  163. package/ProcessTree/PureProcessTree/utils/iconLoader.d.ts +9 -0
  164. package/ProcessTree/PureProcessTree/utils/iconLoader.d.ts.map +1 -0
  165. package/ProcessTree/PureProcessTree/utils/processTreeLinkOverlayUtils.d.ts +36 -0
  166. package/ProcessTree/PureProcessTree/utils/processTreeLinkOverlayUtils.d.ts.map +1 -0
  167. package/ProcessTree/PureProcessTree/utils/processTreeUtils.d.ts +82 -0
  168. package/ProcessTree/PureProcessTree/utils/processTreeUtils.d.ts.map +1 -0
  169. package/ProcessTree/config.d.ts +4 -0
  170. package/ProcessTree/config.d.ts.map +1 -0
  171. package/ProcessTree/index.d.ts +3 -0
  172. package/ProcessTree/index.d.ts.map +1 -0
  173. package/ProcessTree.config.js +192 -0
  174. package/ProcessTree.config.js.map +7 -0
  175. package/ProcessTree.js +5128 -0
  176. package/ProcessTree.js.map +7 -0
  177. package/Punchcard/Punchcard.d.ts +1 -5
  178. package/Punchcard/Punchcard.d.ts.map +1 -1
  179. package/Punchcard/PurePunchcard/Punchcard.d.ts +28 -32
  180. package/Punchcard/PurePunchcard/Punchcard.d.ts.map +1 -1
  181. package/Punchcard/PurePunchcard/src/PunchcardAxis.d.ts +7 -12
  182. package/Punchcard/PurePunchcard/src/PunchcardAxis.d.ts.map +1 -1
  183. package/Punchcard/PurePunchcard/src/PunchcardBubble.d.ts +14 -19
  184. package/Punchcard/PurePunchcard/src/PunchcardBubble.d.ts.map +1 -1
  185. package/Punchcard/PurePunchcard/src/PunchcardChartArea.d.ts +22 -27
  186. package/Punchcard/PurePunchcard/src/PunchcardChartArea.d.ts.map +1 -1
  187. package/Punchcard/PurePunchcard/src/PunchcardGridLines.d.ts +3 -8
  188. package/Punchcard/PurePunchcard/src/PunchcardGridLines.d.ts.map +1 -1
  189. package/Punchcard/PurePunchcard/src/PunchcardLegend.d.ts +9 -14
  190. package/Punchcard/PurePunchcard/src/PunchcardLegend.d.ts.map +1 -1
  191. package/Punchcard/PurePunchcard/src/PunchcardRow.d.ts.map +1 -1
  192. package/Punchcard.config.js.map +1 -1
  193. package/Punchcard.js +444 -631
  194. package/Punchcard.js.map +4 -4
  195. package/README.md +2 -0
  196. package/Rectangle.config.js +1 -1
  197. package/Rectangle.config.js.map +2 -2
  198. package/Rectangle.js +289 -173
  199. package/Rectangle.js.map +4 -4
  200. package/RichText/PureRichText/Editor/EditorPanel.d.ts +20 -0
  201. package/RichText/PureRichText/Editor/EditorPanel.d.ts.map +1 -0
  202. package/RichText/PureRichText/Editor/EditorPanelStyles.d.ts +17 -0
  203. package/RichText/PureRichText/Editor/EditorPanelStyles.d.ts.map +1 -0
  204. package/RichText/PureRichText/Editor/FontSelector.d.ts +15 -0
  205. package/RichText/PureRichText/Editor/FontSelector.d.ts.map +1 -0
  206. package/RichText/PureRichText/Editor/FormatButton.d.ts +23 -0
  207. package/RichText/PureRichText/Editor/FormatButton.d.ts.map +1 -0
  208. package/RichText/PureRichText/Editor/editorPanelUtils.d.ts +19 -0
  209. package/RichText/PureRichText/Editor/editorPanelUtils.d.ts.map +1 -0
  210. package/RichText/PureRichText/Editor/hooks/useLineSpacing.d.ts +11 -0
  211. package/RichText/PureRichText/Editor/hooks/useLineSpacing.d.ts.map +1 -0
  212. package/RichText/PureRichText/Editor/hooks/useLinkHandlers.d.ts +26 -0
  213. package/RichText/PureRichText/Editor/hooks/useLinkHandlers.d.ts.map +1 -0
  214. package/RichText/PureRichText/Editor/index.d.ts +9 -0
  215. package/RichText/PureRichText/Editor/index.d.ts.map +1 -0
  216. package/RichText/PureRichText/InnerEditor.d.ts +41 -0
  217. package/RichText/PureRichText/InnerEditor.d.ts.map +1 -0
  218. package/RichText/PureRichText/PureRichText.d.ts +19 -0
  219. package/RichText/PureRichText/PureRichText.d.ts.map +1 -0
  220. package/RichText/PureRichText/PureRichTextContext.d.ts +64 -0
  221. package/RichText/PureRichText/PureRichTextContext.d.ts.map +1 -0
  222. package/RichText/PureRichText/RichTextStyles.d.ts +25 -0
  223. package/RichText/PureRichText/RichTextStyles.d.ts.map +1 -0
  224. package/RichText/PureRichText/activeInstance.d.ts +23 -0
  225. package/RichText/PureRichText/activeInstance.d.ts.map +1 -0
  226. package/RichText/PureRichText/config.d.ts +17 -0
  227. package/RichText/PureRichText/config.d.ts.map +1 -0
  228. package/RichText/PureRichText/hooks/index.d.ts +12 -0
  229. package/RichText/PureRichText/hooks/index.d.ts.map +1 -0
  230. package/RichText/PureRichText/hooks/useContentSave.d.ts +25 -0
  231. package/RichText/PureRichText/hooks/useContentSave.d.ts.map +1 -0
  232. package/RichText/PureRichText/hooks/useContentSync.d.ts +28 -0
  233. package/RichText/PureRichText/hooks/useContentSync.d.ts.map +1 -0
  234. package/RichText/PureRichText/hooks/useDashboardKeyboardNav.d.ts +33 -0
  235. package/RichText/PureRichText/hooks/useDashboardKeyboardNav.d.ts.map +1 -0
  236. package/RichText/PureRichText/hooks/useEditModeEffect.d.ts +10 -0
  237. package/RichText/PureRichText/hooks/useEditModeEffect.d.ts.map +1 -0
  238. package/RichText/PureRichText/hooks/useEditorSetup.d.ts +36 -0
  239. package/RichText/PureRichText/hooks/useEditorSetup.d.ts.map +1 -0
  240. package/RichText/PureRichText/hooks/useFakeHighlight.d.ts +33 -0
  241. package/RichText/PureRichText/hooks/useFakeHighlight.d.ts.map +1 -0
  242. package/RichText/PureRichText/hooks/useFocusHandlers.d.ts +35 -0
  243. package/RichText/PureRichText/hooks/useFocusHandlers.d.ts.map +1 -0
  244. package/RichText/PureRichText/hooks/useKeyboardShortcuts.d.ts +18 -0
  245. package/RichText/PureRichText/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  246. package/RichText/PureRichText/hooks/useMouseHandlers.d.ts +24 -0
  247. package/RichText/PureRichText/hooks/useMouseHandlers.d.ts.map +1 -0
  248. package/RichText/PureRichText/hooks/useRichTextState.d.ts +38 -0
  249. package/RichText/PureRichText/hooks/useRichTextState.d.ts.map +1 -0
  250. package/RichText/PureRichText/hooks/useStepFontSize.d.ts +17 -0
  251. package/RichText/PureRichText/hooks/useStepFontSize.d.ts.map +1 -0
  252. package/RichText/PureRichText/hooks/useStepLineSpacing.d.ts +18 -0
  253. package/RichText/PureRichText/hooks/useStepLineSpacing.d.ts.map +1 -0
  254. package/RichText/PureRichText/hooks/useTokenMap.d.ts +45 -0
  255. package/RichText/PureRichText/hooks/useTokenMap.d.ts.map +1 -0
  256. package/RichText/PureRichText/index.d.ts +16 -0
  257. package/RichText/PureRichText/index.d.ts.map +1 -0
  258. package/RichText/PureRichText/renderers/ElementRenderer.d.ts +8 -0
  259. package/RichText/PureRichText/renderers/ElementRenderer.d.ts.map +1 -0
  260. package/RichText/PureRichText/renderers/LeafRenderer.d.ts +8 -0
  261. package/RichText/PureRichText/renderers/LeafRenderer.d.ts.map +1 -0
  262. package/RichText/PureRichText/types.d.ts +111 -0
  263. package/RichText/PureRichText/types.d.ts.map +1 -0
  264. package/RichText/PureRichText/utils/a11yUtils.d.ts +9 -0
  265. package/RichText/PureRichText/utils/a11yUtils.d.ts.map +1 -0
  266. package/RichText/PureRichText/utils/fontSize.d.ts +6 -0
  267. package/RichText/PureRichText/utils/fontSize.d.ts.map +1 -0
  268. package/RichText/PureRichText/utils/slateUtils.d.ts +99 -0
  269. package/RichText/PureRichText/utils/slateUtils.d.ts.map +1 -0
  270. package/RichText/RichText.d.ts +17 -0
  271. package/RichText/RichText.d.ts.map +1 -0
  272. package/RichText/config.d.ts +4 -0
  273. package/RichText/config.d.ts.map +1 -0
  274. package/RichText/index.d.ts +7 -0
  275. package/RichText/index.d.ts.map +1 -0
  276. package/RichText.config.js +268 -0
  277. package/RichText.config.js.map +7 -0
  278. package/RichText.js +7674 -0
  279. package/RichText.js.map +7 -0
  280. package/Sankey/PureSankey/PureSankey.d.ts.map +1 -1
  281. package/Sankey/PureSankey/SankeyLink.d.ts.map +1 -1
  282. package/Sankey/PureSankey/SankeyNode.d.ts +10 -3
  283. package/Sankey/PureSankey/SankeyNode.d.ts.map +1 -1
  284. package/Sankey/PureSankey/SankeyTooltip.d.ts.map +1 -1
  285. package/Sankey/PureSankey/SankeyUtils.d.ts +10 -0
  286. package/Sankey/PureSankey/SankeyUtils.d.ts.map +1 -1
  287. package/Sankey.config.js.map +1 -1
  288. package/Sankey.js +562 -290
  289. package/Sankey.js.map +4 -4
  290. package/Scatter/Scatter.d.ts.map +1 -1
  291. package/Scatter.config.js +81 -24
  292. package/Scatter.config.js.map +3 -3
  293. package/Scatter.js +528 -297
  294. package/Scatter.js.map +4 -4
  295. package/SingleValue/SingleValue.d.ts.map +1 -1
  296. package/SingleValue/config.d.ts.map +1 -1
  297. package/SingleValue.config.js +76 -24
  298. package/SingleValue.config.js.map +2 -2
  299. package/SingleValue.js +896 -779
  300. package/SingleValue.js.map +4 -4
  301. package/SingleValueBasic.js.map +1 -1
  302. package/SingleValueIcon/SingleValueIcon.d.ts.map +1 -1
  303. package/SingleValueIcon/config.d.ts.map +1 -1
  304. package/SingleValueIcon.config.js +76 -24
  305. package/SingleValueIcon.config.js.map +2 -2
  306. package/SingleValueIcon.js +512 -287
  307. package/SingleValueIcon.js.map +4 -4
  308. package/SingleValueRadial/PureSingleValueRadial/utils/gaugeUtils.d.ts +0 -8
  309. package/SingleValueRadial/PureSingleValueRadial/utils/gaugeUtils.d.ts.map +1 -1
  310. package/SingleValueRadial/SingleValueRadial.d.ts.map +1 -1
  311. package/SingleValueRadial/config.d.ts.map +1 -1
  312. package/SingleValueRadial.config.js +76 -24
  313. package/SingleValueRadial.config.js.map +2 -2
  314. package/SingleValueRadial.js +543 -326
  315. package/SingleValueRadial.js.map +4 -4
  316. package/SparkLine/SparkLine.d.ts +57 -0
  317. package/SparkLine/SparkLine.d.ts.map +1 -0
  318. package/SparkLine/index.d.ts +1 -1
  319. package/SparkLine/index.d.ts.map +1 -1
  320. package/SparkLine.js +384 -485
  321. package/SparkLine.js.map +4 -4
  322. package/TRELLIS.md +48 -0
  323. package/Table/PureTable.d.ts +1 -0
  324. package/Table/PureTable.d.ts.map +1 -1
  325. package/Table/Table.d.ts.map +1 -1
  326. package/Table/cells/ArrayCell.d.ts.map +1 -1
  327. package/Table/config.d.ts.map +1 -1
  328. package/Table/hooks.d.ts +1 -1
  329. package/Table/hooks.d.ts.map +1 -1
  330. package/Table/tableUtils.d.ts +14 -0
  331. package/Table/tableUtils.d.ts.map +1 -0
  332. package/Table.config.js +4 -10
  333. package/Table.config.js.map +2 -2
  334. package/Table.js +1158 -846
  335. package/Table.js.map +4 -4
  336. package/Timeline/PureTimeline/src/TimelineYAxis.d.ts.map +1 -1
  337. package/Timeline/PureTimeline/src/utils/timelineUtils.d.ts +5 -0
  338. package/Timeline/PureTimeline/src/utils/timelineUtils.d.ts.map +1 -1
  339. package/Timeline/Timeline.d.ts +2 -0
  340. package/Timeline/Timeline.d.ts.map +1 -1
  341. package/Timeline/config.d.ts.map +1 -1
  342. package/Timeline/mockdata/timelineDataSource.d.ts +34 -0
  343. package/Timeline/mockdata/timelineDataSource.d.ts.map +1 -1
  344. package/Timeline.config.js +15 -0
  345. package/Timeline.config.js.map +2 -2
  346. package/Timeline.js +348 -186
  347. package/Timeline.js.map +4 -4
  348. package/common/Charting.d.ts.map +1 -1
  349. package/common/Charting.js +50 -28
  350. package/common/Charting.js.map +2 -2
  351. package/common/ChartingApi.d.ts +1 -1
  352. package/common/ChartingApi.d.ts.map +1 -1
  353. package/common/ChartingApi.js.map +2 -2
  354. package/common/DocExampleWithVizSandbox.js.map +1 -1
  355. package/common/OptionsDoc.js.map +1 -1
  356. package/common/OverviewDoc.js.map +1 -1
  357. package/common/SplunkVisualization.d.ts +1 -1
  358. package/common/SplunkVisualization.d.ts.map +1 -1
  359. package/common/SplunkVisualization.js +6 -4
  360. package/common/SplunkVisualization.js.map +2 -2
  361. package/common/StyledSkipLink.d.ts +2 -0
  362. package/common/StyledSkipLink.d.ts.map +1 -0
  363. package/common/StyledSkipLink.js +81 -0
  364. package/common/StyledSkipLink.js.map +7 -0
  365. package/common/TimeSeriesChartWrapper.d.ts.map +1 -1
  366. package/common/TimeSeriesChartWrapper.js +228 -107
  367. package/common/TimeSeriesChartWrapper.js.map +4 -4
  368. package/common/chartingUtils.d.ts +32 -6
  369. package/common/chartingUtils.d.ts.map +1 -1
  370. package/common/chartingUtils.js +166 -39
  371. package/common/chartingUtils.js.map +4 -4
  372. package/common/components/TrellisTitle.d.ts.map +1 -1
  373. package/common/docUtils.js +1 -1
  374. package/common/docUtils.js.map +2 -2
  375. package/common/editorConfig/AxesChartDataDisplay.d.ts.map +1 -1
  376. package/common/editorConfig/AxesChartYGridAndLabels.d.ts.map +1 -1
  377. package/common/editorConfig/BackgroundColor.d.ts +2 -2
  378. package/common/editorConfig/TrellisEditors.d.ts +33 -5
  379. package/common/editorConfig/TrellisEditors.d.ts.map +1 -1
  380. package/common/hocs/mockdata/trellisData.d.ts +54 -0
  381. package/common/hocs/mockdata/trellisData.d.ts.map +1 -1
  382. package/common/hocs/withTrellis.d.ts +9 -0
  383. package/common/hocs/withTrellis.d.ts.map +1 -1
  384. package/common/hooks/useSorting.d.ts +2 -2
  385. package/common/hooks/useSorting.d.ts.map +1 -1
  386. package/common/shapeUtils.d.ts +1 -1
  387. package/common/shapeUtils.d.ts.map +1 -1
  388. package/common/shapeUtils.js.map +2 -2
  389. package/common/utils/dataUtils.js +2 -1
  390. package/common/utils/dataUtils.js.map +2 -2
  391. package/common/utils/focusUtils.d.ts +4 -0
  392. package/common/utils/focusUtils.d.ts.map +1 -0
  393. package/common/utils/focusUtils.js +101 -0
  394. package/common/utils/focusUtils.js.map +7 -0
  395. package/common/utils/mapUtils.js +513 -184
  396. package/common/utils/mapUtils.js.map +4 -4
  397. package/common/utils/shadowDomUtils.d.ts +2 -0
  398. package/common/utils/shadowDomUtils.d.ts.map +1 -0
  399. package/common/utils/shadowDomUtils.js +39 -0
  400. package/common/utils/shadowDomUtils.js.map +7 -0
  401. package/common/utils/singleValueUtils.js +14 -26
  402. package/common/utils/singleValueUtils.js.map +2 -2
  403. package/common/utils/trellisUtils.d.ts.map +1 -1
  404. package/common/utils/trellisUtils.js +76 -70
  405. package/common/utils/trellisUtils.js.map +2 -2
  406. package/common/withDashboardViz.d.ts.map +1 -1
  407. package/common/withDashboardViz.js +276 -151
  408. package/common/withDashboardViz.js.map +4 -4
  409. package/docs-llm/INDEX.md +118 -0
  410. package/docs-llm/area/examples-json.md +3854 -0
  411. package/docs-llm/area/examples-react.md +2816 -0
  412. package/docs-llm/area/options.md +97 -0
  413. package/docs-llm/area/overview.md +27 -0
  414. package/docs-llm/bar/examples-json.md +3380 -0
  415. package/docs-llm/bar/examples-react.md +2352 -0
  416. package/docs-llm/bar/options.md +89 -0
  417. package/docs-llm/bar/overview.md +25 -0
  418. package/docs-llm/bubble/examples-json.md +4082 -0
  419. package/docs-llm/bubble/examples-react.md +3977 -0
  420. package/docs-llm/bubble/options.md +62 -0
  421. package/docs-llm/bubble/overview.md +26 -0
  422. package/docs-llm/choropleth-svg/examples-json.md +397 -0
  423. package/docs-llm/choropleth-svg/examples-react.md +389 -0
  424. package/docs-llm/choropleth-svg/options.md +15 -0
  425. package/docs-llm/choropleth-svg/overview.md +23 -0
  426. package/docs-llm/column/examples-json.md +3898 -0
  427. package/docs-llm/column/examples-react.md +2653 -0
  428. package/docs-llm/column/options.md +94 -0
  429. package/docs-llm/column/overview.md +31 -0
  430. package/docs-llm/dsl/examples-json.md +43 -0
  431. package/docs-llm/dsl/examples-react.md +78 -0
  432. package/docs-llm/dsl/formatters/format-by-type-examples-json.md +58 -0
  433. package/docs-llm/dsl/formatters/format-by-type-examples-react.md +43 -0
  434. package/docs-llm/dsl/formatters/format-by-type.md +38 -0
  435. package/docs-llm/dsl/formatters/frame-examples-json.md +42 -0
  436. package/docs-llm/dsl/formatters/frame-examples-react.md +24 -0
  437. package/docs-llm/dsl/formatters/frame.md +6 -0
  438. package/docs-llm/dsl/formatters/gradient-examples-json.md +98 -0
  439. package/docs-llm/dsl/formatters/gradient-examples-react.md +44 -0
  440. package/docs-llm/dsl/formatters/gradient.md +23 -0
  441. package/docs-llm/dsl/formatters/lerp-examples-json.md +40 -0
  442. package/docs-llm/dsl/formatters/lerp-examples-react.md +28 -0
  443. package/docs-llm/dsl/formatters/lerp.md +19 -0
  444. package/docs-llm/dsl/formatters/match-value-examples-json.md +65 -0
  445. package/docs-llm/dsl/formatters/match-value-examples-react.md +37 -0
  446. package/docs-llm/dsl/formatters/match-value.md +13 -0
  447. package/docs-llm/dsl/formatters/max-contrast-examples-json.md +39 -0
  448. package/docs-llm/dsl/formatters/max-contrast-examples-react.md +27 -0
  449. package/docs-llm/dsl/formatters/max-contrast.md +9 -0
  450. package/docs-llm/dsl/formatters/multi-format-examples-json.md +67 -0
  451. package/docs-llm/dsl/formatters/multi-format-examples-react.md +49 -0
  452. package/docs-llm/dsl/formatters/multi-format.md +12 -0
  453. package/docs-llm/dsl/formatters/objects-examples-json.md +49 -0
  454. package/docs-llm/dsl/formatters/objects-examples-react.md +37 -0
  455. package/docs-llm/dsl/formatters/objects.md +3 -0
  456. package/docs-llm/dsl/formatters/pick-examples-json.md +59 -0
  457. package/docs-llm/dsl/formatters/pick-examples-react.md +30 -0
  458. package/docs-llm/dsl/formatters/pick.md +9 -0
  459. package/docs-llm/dsl/formatters/prefix-examples-json.md +29 -0
  460. package/docs-llm/dsl/formatters/prefix-examples-react.md +19 -0
  461. package/docs-llm/dsl/formatters/prefix.md +3 -0
  462. package/docs-llm/dsl/formatters/prepend-examples-json.md +51 -0
  463. package/docs-llm/dsl/formatters/prepend-examples-react.md +33 -0
  464. package/docs-llm/dsl/formatters/prepend.md +9 -0
  465. package/docs-llm/dsl/formatters/range-value-examples-json.md +48 -0
  466. package/docs-llm/dsl/formatters/range-value-examples-react.md +34 -0
  467. package/docs-llm/dsl/formatters/range-value.md +15 -0
  468. package/docs-llm/dsl/formatters/set-color-channel-examples-json.md +40 -0
  469. package/docs-llm/dsl/formatters/set-color-channel-examples-react.md +31 -0
  470. package/docs-llm/dsl/formatters/set-color-channel.md +9 -0
  471. package/docs-llm/dsl/formatters/suffix-examples-json.md +29 -0
  472. package/docs-llm/dsl/formatters/suffix-examples-react.md +19 -0
  473. package/docs-llm/dsl/formatters/suffix.md +3 -0
  474. package/docs-llm/dsl/formatters/type-examples-json.md +37 -0
  475. package/docs-llm/dsl/formatters/type-examples-react.md +20 -0
  476. package/docs-llm/dsl/formatters/type.md +3 -0
  477. package/docs-llm/dsl/overview.md +41 -0
  478. package/docs-llm/dsl/selectors/abs.md +7 -0
  479. package/docs-llm/dsl/selectors/ceil.md +7 -0
  480. package/docs-llm/dsl/selectors/data-frame-average-examples-json.md +41 -0
  481. package/docs-llm/dsl/selectors/data-frame-average-examples-react.md +36 -0
  482. package/docs-llm/dsl/selectors/data-frame-average.md +7 -0
  483. package/docs-llm/dsl/selectors/data-frame-count-examples-json.md +41 -0
  484. package/docs-llm/dsl/selectors/data-frame-count-examples-react.md +36 -0
  485. package/docs-llm/dsl/selectors/data-frame-count.md +7 -0
  486. package/docs-llm/dsl/selectors/data-frame-examples-json.md +830 -0
  487. package/docs-llm/dsl/selectors/data-frame-examples-react.md +929 -0
  488. package/docs-llm/dsl/selectors/data-frame-get-field-examples-json.md +89 -0
  489. package/docs-llm/dsl/selectors/data-frame-get-field-examples-react.md +124 -0
  490. package/docs-llm/dsl/selectors/data-frame-get-field.md +5 -0
  491. package/docs-llm/dsl/selectors/data-frame-get-raw-value.md +5 -0
  492. package/docs-llm/dsl/selectors/data-frame-get-type.md +5 -0
  493. package/docs-llm/dsl/selectors/data-frame-get-value.md +5 -0
  494. package/docs-llm/dsl/selectors/data-frame-max-examples-json.md +51 -0
  495. package/docs-llm/dsl/selectors/data-frame-max-examples-react.md +41 -0
  496. package/docs-llm/dsl/selectors/data-frame-max.md +7 -0
  497. package/docs-llm/dsl/selectors/data-frame-min-examples-json.md +51 -0
  498. package/docs-llm/dsl/selectors/data-frame-min-examples-react.md +41 -0
  499. package/docs-llm/dsl/selectors/data-frame-min.md +7 -0
  500. package/docs-llm/dsl/selectors/data-frame-percentile-examples-json.md +41 -0
  501. package/docs-llm/dsl/selectors/data-frame-percentile-examples-react.md +36 -0
  502. package/docs-llm/dsl/selectors/data-frame-percentile.md +8 -0
  503. package/docs-llm/dsl/selectors/data-frame-set-value.md +5 -0
  504. package/docs-llm/dsl/selectors/data-frame-sum-examples-json.md +51 -0
  505. package/docs-llm/dsl/selectors/data-frame-sum-examples-react.md +41 -0
  506. package/docs-llm/dsl/selectors/data-frame-sum.md +7 -0
  507. package/docs-llm/dsl/selectors/data-frame.md +4 -0
  508. package/docs-llm/dsl/selectors/data-point-get-field.md +5 -0
  509. package/docs-llm/dsl/selectors/data-point-get-raw-value.md +4 -0
  510. package/docs-llm/dsl/selectors/data-point-get-type.md +5 -0
  511. package/docs-llm/dsl/selectors/data-point-get-value.md +5 -0
  512. package/docs-llm/dsl/selectors/data-point-set-value.md +4 -0
  513. package/docs-llm/dsl/selectors/data-point.md +5 -0
  514. package/docs-llm/dsl/selectors/data-series-average.md +22 -0
  515. package/docs-llm/dsl/selectors/data-series-count.md +14 -0
  516. package/docs-llm/dsl/selectors/data-series-get-field.md +5 -0
  517. package/docs-llm/dsl/selectors/data-series-get-raw-value.md +4 -0
  518. package/docs-llm/dsl/selectors/data-series-get-type.md +5 -0
  519. package/docs-llm/dsl/selectors/data-series-get-value.md +4 -0
  520. package/docs-llm/dsl/selectors/data-series-max.md +5 -0
  521. package/docs-llm/dsl/selectors/data-series-min.md +5 -0
  522. package/docs-llm/dsl/selectors/data-series-percentile.md +17 -0
  523. package/docs-llm/dsl/selectors/data-series-set-value.md +4 -0
  524. package/docs-llm/dsl/selectors/data-series-sum.md +24 -0
  525. package/docs-llm/dsl/selectors/data-series.md +4 -0
  526. package/docs-llm/dsl/selectors/delta.md +7 -0
  527. package/docs-llm/dsl/selectors/divide.md +8 -0
  528. package/docs-llm/dsl/selectors/first-point.md +5 -0
  529. package/docs-llm/dsl/selectors/floor.md +7 -0
  530. package/docs-llm/dsl/selectors/frame-by-series-index-range-examples-json.md +89 -0
  531. package/docs-llm/dsl/selectors/frame-by-series-index-range-examples-react.md +88 -0
  532. package/docs-llm/dsl/selectors/frame-by-series-index-range.md +10 -0
  533. package/docs-llm/dsl/selectors/frame-by-series-indexes-examples-json.md +88 -0
  534. package/docs-llm/dsl/selectors/frame-by-series-indexes-examples-react.md +87 -0
  535. package/docs-llm/dsl/selectors/frame-by-series-indexes.md +9 -0
  536. package/docs-llm/dsl/selectors/frame-by-series-names-examples-json.md +89 -0
  537. package/docs-llm/dsl/selectors/frame-by-series-names-examples-react.md +88 -0
  538. package/docs-llm/dsl/selectors/frame-by-series-names-or-indexes-examples-json.md +89 -0
  539. package/docs-llm/dsl/selectors/frame-by-series-names-or-indexes-examples-react.md +88 -0
  540. package/docs-llm/dsl/selectors/frame-by-series-names-or-indexes.md +9 -0
  541. package/docs-llm/dsl/selectors/frame-by-series-names.md +9 -0
  542. package/docs-llm/dsl/selectors/frame-by-series-types-examples-json.md +89 -0
  543. package/docs-llm/dsl/selectors/frame-by-series-types-examples-react.md +88 -0
  544. package/docs-llm/dsl/selectors/frame-by-series-types.md +9 -0
  545. package/docs-llm/dsl/selectors/frame-without-internal-fields-examples-json.md +137 -0
  546. package/docs-llm/dsl/selectors/frame-without-internal-fields-examples-react.md +135 -0
  547. package/docs-llm/dsl/selectors/frame-without-internal-fields-except-examples-json.md +157 -0
  548. package/docs-llm/dsl/selectors/frame-without-internal-fields-except-examples-react.md +155 -0
  549. package/docs-llm/dsl/selectors/frame-without-internal-fields-except.md +21 -0
  550. package/docs-llm/dsl/selectors/frame-without-internal-fields.md +17 -0
  551. package/docs-llm/dsl/selectors/frame-without-series-names.md +8 -0
  552. package/docs-llm/dsl/selectors/last-point.md +5 -0
  553. package/docs-llm/dsl/selectors/minus.md +8 -0
  554. package/docs-llm/dsl/selectors/multiply.md +8 -0
  555. package/docs-llm/dsl/selectors/plus.md +8 -0
  556. package/docs-llm/dsl/selectors/point-by-index.md +6 -0
  557. package/docs-llm/dsl/selectors/points-by-indexes.md +6 -0
  558. package/docs-llm/dsl/selectors/round.md +7 -0
  559. package/docs-llm/dsl/selectors/series-by-index-examples-json.md +49 -0
  560. package/docs-llm/dsl/selectors/series-by-index-examples-react.md +39 -0
  561. package/docs-llm/dsl/selectors/series-by-index.md +8 -0
  562. package/docs-llm/dsl/selectors/series-by-name-examples-json.md +49 -0
  563. package/docs-llm/dsl/selectors/series-by-name-examples-react.md +39 -0
  564. package/docs-llm/dsl/selectors/series-by-name.md +8 -0
  565. package/docs-llm/dsl/selectors/series-by-prioritized-types-examples-json.md +47 -0
  566. package/docs-llm/dsl/selectors/series-by-prioritized-types-examples-react.md +39 -0
  567. package/docs-llm/dsl/selectors/series-by-prioritized-types.md +10 -0
  568. package/docs-llm/dsl/selectors/series-by-type-examples-json.md +49 -0
  569. package/docs-llm/dsl/selectors/series-by-type-examples-react.md +39 -0
  570. package/docs-llm/dsl/selectors/series-by-type.md +10 -0
  571. package/docs-llm/dsl/selectors/series-by-types.md +6 -0
  572. package/docs-llm/ellipse/examples-json.md +5 -0
  573. package/docs-llm/ellipse/examples-react.md +5 -0
  574. package/docs-llm/ellipse/options.md +16 -0
  575. package/docs-llm/ellipse/overview.md +5 -0
  576. package/docs-llm/events/examples-json.md +705 -0
  577. package/docs-llm/events/examples-react.md +536 -0
  578. package/docs-llm/events/options.md +18 -0
  579. package/docs-llm/events/overview.md +5 -0
  580. package/docs-llm/filler-gauge/examples-json.md +376 -0
  581. package/docs-llm/filler-gauge/examples-react.md +274 -0
  582. package/docs-llm/filler-gauge/options.md +26 -0
  583. package/docs-llm/filler-gauge/overview.md +5 -0
  584. package/docs-llm/image/examples-json.md +39 -0
  585. package/docs-llm/image/examples-react.md +65 -0
  586. package/docs-llm/image/options.md +13 -0
  587. package/docs-llm/image/overview.md +5 -0
  588. package/docs-llm/line/examples-json.md +3724 -0
  589. package/docs-llm/line/examples-react.md +2683 -0
  590. package/docs-llm/line/options.md +95 -0
  591. package/docs-llm/line/overview.md +29 -0
  592. package/docs-llm/link-graph/examples-json.md +5 -0
  593. package/docs-llm/link-graph/examples-react.md +5 -0
  594. package/docs-llm/link-graph/options.md +26 -0
  595. package/docs-llm/link-graph/overview.md +16 -0
  596. package/docs-llm/map/examples-json.md +13973 -0
  597. package/docs-llm/map/examples-react.md +6154 -0
  598. package/docs-llm/map/options.md +22 -0
  599. package/docs-llm/map/overview.md +32 -0
  600. package/docs-llm/markdown/examples-json.md +63 -0
  601. package/docs-llm/markdown/examples-react.md +98 -0
  602. package/docs-llm/markdown/options.md +17 -0
  603. package/docs-llm/markdown/overview.md +5 -0
  604. package/docs-llm/marker-gauge/examples-json.md +436 -0
  605. package/docs-llm/marker-gauge/examples-react.md +367 -0
  606. package/docs-llm/marker-gauge/options.md +26 -0
  607. package/docs-llm/marker-gauge/overview.md +5 -0
  608. package/docs-llm/network-graph/examples-json.md +8843 -0
  609. package/docs-llm/network-graph/examples-react.md +7339 -0
  610. package/docs-llm/network-graph/options.md +50 -0
  611. package/docs-llm/network-graph/overview.md +28 -0
  612. package/docs-llm/parallel-coordinates/examples-json.md +8376 -0
  613. package/docs-llm/parallel-coordinates/examples-react.md +2771 -0
  614. package/docs-llm/parallel-coordinates/options.md +14 -0
  615. package/docs-llm/parallel-coordinates/overview.md +22 -0
  616. package/docs-llm/pie/examples-json.md +851 -0
  617. package/docs-llm/pie/examples-react.md +606 -0
  618. package/docs-llm/pie/options.md +34 -0
  619. package/docs-llm/pie/overview.md +23 -0
  620. package/docs-llm/process-tree/options.md +32 -0
  621. package/docs-llm/punchcard/examples-json.md +6134 -0
  622. package/docs-llm/punchcard/examples-react.md +4562 -0
  623. package/docs-llm/punchcard/options.md +33 -0
  624. package/docs-llm/punchcard/overview.md +5 -0
  625. package/docs-llm/pure-rich-text/options.md +28 -0
  626. package/docs-llm/rectangle/examples-json.md +5 -0
  627. package/docs-llm/rectangle/examples-react.md +5 -0
  628. package/docs-llm/rectangle/options.md +19 -0
  629. package/docs-llm/rectangle/overview.md +5 -0
  630. package/docs-llm/rich-text/examples-json.md +96 -0
  631. package/docs-llm/rich-text/examples-react.md +119 -0
  632. package/docs-llm/rich-text/options.md +28 -0
  633. package/docs-llm/rich-text/overview.md +5 -0
  634. package/docs-llm/sankey/examples-json.md +844 -0
  635. package/docs-llm/sankey/examples-react.md +546 -0
  636. package/docs-llm/sankey/options.md +19 -0
  637. package/docs-llm/sankey/overview.md +24 -0
  638. package/docs-llm/scatter/examples-json.md +4012 -0
  639. package/docs-llm/scatter/examples-react.md +3914 -0
  640. package/docs-llm/scatter/options.md +68 -0
  641. package/docs-llm/scatter/overview.md +25 -0
  642. package/docs-llm/single-value/examples-json.md +2613 -0
  643. package/docs-llm/single-value/examples-react.md +2296 -0
  644. package/docs-llm/single-value/options.md +49 -0
  645. package/docs-llm/single-value/overview.md +23 -0
  646. package/docs-llm/single-value-icon/examples-json.md +1686 -0
  647. package/docs-llm/single-value-icon/examples-react.md +1573 -0
  648. package/docs-llm/single-value-icon/options.md +43 -0
  649. package/docs-llm/single-value-icon/overview.md +5 -0
  650. package/docs-llm/single-value-radial/examples-json.md +1178 -0
  651. package/docs-llm/single-value-radial/examples-react.md +1028 -0
  652. package/docs-llm/single-value-radial/options.md +41 -0
  653. package/docs-llm/single-value-radial/overview.md +5 -0
  654. package/docs-llm/table/examples-json.md +5 -0
  655. package/docs-llm/table/examples-react.md +5 -0
  656. package/docs-llm/table/options.md +25 -0
  657. package/docs-llm/table/overview.md +24 -0
  658. package/docs-llm/timeline/examples-json.md +5 -0
  659. package/docs-llm/timeline/examples-react.md +5 -0
  660. package/docs-llm/timeline/options.md +27 -0
  661. package/docs-llm/timeline/overview.md +24 -0
  662. package/package.json +39 -30
  663. package/LICENSE.md +0 -449
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/common/TimeSeriesChartWrapper.tsx", "esm-externals:react", "esm-externals:lodash", "esm-externals:styled-components", "esm-externals:@splunk/visualizations-shared/SizeAwareWrapper", "esm-externals:@splunk/visualization-canvas", "esm-externals:@splunk/visualizations-shared/style", "../src/common/components/VizStyleWrapper.jsx", "esm-externals:@splunk/themes/variables", "esm-externals:@splunk/react-icons/Triangle", "../src/common/chartingUtils.ts", "esm-externals:@splunk/visualization-context/FeatureFlagContext", "esm-externals:@splunk/visualization-schemas", "../src/common/hooks/useTrellisEnabled.ts", "../src/common/components/TrellisTitle.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nimport { useMemo, useRef } from 'react';\nimport { pick } from 'lodash';\nimport styled from 'styled-components';\nimport SizeAwareWrapper from '@splunk/visualizations-shared/SizeAwareWrapper';\nimport { TimeSeriesChart, RangeSelectionProvider } from '@splunk/visualization-canvas';\nimport { toDimension } from '@splunk/visualizations-shared/style';\nimport type { GenericDataSet } from '@splunk/visualization-canvas/types/types';\nimport VizStyleWrapper from './components/VizStyleWrapper';\nimport { ChartingProps } from './Charting';\nimport {\n convert2DArrayToNumbers,\n filterChartDataFromInternalFields,\n getComputedAxisTitles,\n getFieldName,\n getFieldNames,\n getLegend,\n getSeriesOverrides,\n getXScaleConfig,\n getYScaleConfig,\n getY2ScaleConfig,\n ellipsisAxisTitle,\n getAnnotationsForCanvas,\n triangleEventAnnotationRenderer,\n parseAxisValue,\n parseXAxisLineVisibility,\n findRangeIndices,\n shouldEnableSearchZoom,\n} from './chartingUtils';\nimport { useTrellisEnabled } from './hooks/useTrellisEnabled';\nimport { TrellisTitle, TRELLIS_TITLE_HEIGHT } from './components/TrellisTitle';\n\nconst TimeSeriesChartContainer = styled.div<{\n width: number | string;\n height: number | string;\n}>`\n overflow: hidden;\n ${props => toDimension(pick(props, ['width', 'height']))};\n\n canvas {\n position: absolute !important; // This is needed for canvas element export pdf/png to work correctly\n }\n`;\n\n/**\n * Adds trellis information to event payload\n * @param payload - The event payload object to modify\n * @param trellisKey - The current trellis key value (e.g., \"200\", \"404\")\n * @param trellisSplitBy - The field name being split by (e.g., \"status\")\n */\nexport const appendTrellisToPayload = (\n payload: Record<string, unknown>,\n trellisKey?: string,\n trellisSplitBy?: string\n): Record<string, unknown> => {\n const result = { ...payload };\n if (trellisSplitBy) {\n result['trellis.name'] = trellisSplitBy;\n }\n if (trellisKey) {\n result['trellis.value'] = trellisKey;\n }\n return result;\n};\n\n/**\n * Checks if the mouseover payload has changed compared to the previous payload\n * @param currentPayload - The current event payload\n * @param previousPayload - The previous event payload\n * @returns true if the payload has changed, false otherwise\n */\nexport const hasMouseoverPayloadChanged = (\n currentPayload: Record<string, unknown>,\n previousPayload: Record<string, unknown> | null\n): boolean => {\n if (!previousPayload) {\n return true;\n }\n\n // Check if data point index changed - this is the primary indicator of hovering a different point\n if (currentPayload.index !== previousPayload.index) {\n return true;\n }\n\n // Check if seriesIndex changed\n if (currentPayload.seriesIndex !== previousPayload.seriesIndex) {\n return true;\n }\n\n // Check if trellis fields changed (for trellis mode)\n if (currentPayload['trellis.name'] !== previousPayload['trellis.name']) {\n return true;\n }\n if (currentPayload['trellis.value'] !== previousPayload['trellis.value']) {\n return true;\n }\n\n return false;\n};\n\nexport const handleClick = (chartEvent, onClick, trellisKey?: string, trellisSplitBy?: string) => {\n const payload = {\n ...pick(chartEvent, 'value', 'seriesKey'),\n name: chartEvent.seriesKey,\n };\n delete payload.seriesKey;\n\n // Add row context fields in the format: row.${fieldName}.value\n if (chartEvent.rowContext) {\n Object.assign(\n payload,\n Object.keys(chartEvent.rowContext).reduce((acc, fieldName) => {\n acc[`row.${fieldName}.value`] = chartEvent.rowContext[fieldName];\n return acc;\n }, {})\n );\n }\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n if (onClick) {\n onClick({\n type: 'point.click',\n originalEvent: chartEvent,\n payload: updatedPayload,\n });\n }\n};\n\nexport const handleLegendClick = (chartEvent, onClick, trellisKey?: string, trellisSplitBy?: string) => {\n const payload = {\n name: chartEvent,\n };\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n if (onClick) {\n onClick({\n type: 'legend.click',\n originalEvent: chartEvent,\n payload: updatedPayload,\n });\n }\n};\n\nexport const handleRangeSelection = (\n rangeEvent,\n onSelect,\n chartData,\n trellisKey?: string,\n trellisSplitBy?: string\n) => {\n // Handle undefined range (clearing selection)\n if (!rangeEvent) {\n return;\n }\n\n // Find the indices in the data array that correspond to the start and end timestamps\n const xData = chartData?.columns?.[0] || [];\n const { startXIndex, endXIndex } = findRangeIndices(xData, rangeEvent.start, rangeEvent.end);\n\n const payload = {\n startXIndex,\n startXValue: rangeEvent.start,\n endXIndex,\n endXValue: rangeEvent.end,\n };\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n if (onSelect) {\n onSelect({\n type: 'range.selectBeforeZoom',\n originalEvent: rangeEvent,\n payload: updatedPayload,\n });\n }\n};\n\nexport const handleRangeZoom = (\n rangeEvent,\n onSelect,\n chartData,\n trellisKey?: string,\n trellisSplitBy?: string\n) => {\n // Find the indices in the data array that correspond to the start and end timestamps\n const xData = chartData?.columns?.[0] || [];\n const { startXIndex, endXIndex } = findRangeIndices(xData, rangeEvent.start, rangeEvent.end);\n\n const payload = {\n startXIndex,\n startXValue: rangeEvent.start,\n endXIndex,\n endXValue: rangeEvent.end,\n };\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n if (onSelect) {\n onSelect({\n type: 'range.select',\n originalEvent: rangeEvent,\n payload: updatedPayload,\n });\n }\n};\n\nexport const handleCrosshairChange = (\n chartEvent,\n onPointMouseOver,\n onPointMouseOut,\n trellisKey?: string,\n trellisSplitBy?: string,\n lastPayload = null,\n lastOriginalEvent = null\n) => {\n // Handle mouseout when chartEvent is undefined\n if (!chartEvent) {\n if (onPointMouseOut && lastPayload) {\n onPointMouseOut({\n type: 'point.mouseout',\n originalEvent: lastOriginalEvent,\n payload: lastPayload,\n });\n }\n return { payload: null, originalEvent: null };\n }\n\n // Handle mouseover\n const payload = {\n ...pick(chartEvent, 'value', 'seriesKey', 'time', 'index', 'seriesIndex'),\n name: chartEvent.seriesKey,\n };\n delete payload.seriesKey;\n\n // Add row context fields in the format: row.${fieldName}.value\n if (chartEvent.rowContext) {\n Object.assign(\n payload,\n Object.keys(chartEvent.rowContext).reduce((acc, fieldName) => {\n acc[`row.${fieldName}.value`] = chartEvent.rowContext[fieldName];\n return acc;\n }, {})\n );\n }\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n if (onPointMouseOver) {\n onPointMouseOver({\n type: 'point.mouseover',\n originalEvent: chartEvent,\n payload: updatedPayload,\n });\n }\n\n // Return payload and originalEvent for caller to store\n return { payload: updatedPayload, originalEvent: chartEvent };\n};\n\n/**\n * Helper function to parse array options that may be stringified JSON or already arrays\n */\nexport const parseArrayOption = (\n value: string[] | string | undefined | null\n): string[] | undefined | null => {\n if (Array.isArray(value)) {\n return value;\n }\n if (value) {\n return JSON.parse(value);\n }\n return undefined;\n};\n\nconst TimeSeriesChartWrapper = (props: ChartingProps) => {\n const {\n width,\n height,\n chartData,\n options,\n userLocale,\n annotationX,\n annotationLabel,\n annotationColor,\n legendDisplay,\n markerDisplay,\n onClick,\n onPointMouseOver,\n onPointMouseOut,\n onSelect,\n splitByLayout,\n trellisKey,\n trellisSplitBy,\n backgroundColor,\n defaultFontColor,\n additionalTooltipValues,\n // Extract axis line visibility options from props\n xAxisLineVisibility,\n yAxisLineVisibility,\n y2AxisLineVisibility,\n // Extract showYAxisWithZero directly from props for accelerated render mode\n showYAxisWithZero: showYAxisWithZeroFromProps,\n showY2AxisWithZero: showY2AxisWithZeroFromProps,\n ...otherOptions\n } = props as ChartingProps & {\n showYAxisWithZero?: boolean;\n showY2AxisWithZero?: boolean;\n xAxisLineVisibility?: string;\n yAxisLineVisibility?: string;\n y2AxisLineVisibility?: string;\n };\n const { eventHandlers, xField: xFieldFromProps } = otherOptions;\n const trellisEnabled = useTrellisEnabled(splitByLayout);\n const {\n backgroundColor: bgColorFromOptions,\n seriesColors: seriesColorsStr,\n fieldColors,\n legendLabels: legendLabelsStr,\n legendMode,\n legendTruncation,\n 'axisTitleX.text': xAxisTitleText,\n 'axisTitleY.text': yAxisTitleText,\n 'axisTitleY2.text': y2AxisTitleText,\n 'axisTitleX.visibility': xAxisTitleVisibility,\n 'axisTitleY.visibility': yAxisTitleVisibility,\n 'axisTitleY2.visibility': y2AxisTitleVisibility,\n 'axisLabelsX.majorLabelVisibility': xAxisLabelVisibility,\n 'axisLabelsX.majorLabelStyle.rotation': xAxisLabelRotation,\n 'axisLabelsX.maxLabelParts': xAxisMaxLabelParts,\n 'axisLabelsY.majorLabelVisibility': yAxisLabelVisibility,\n 'axisLabelsY.majorUnit': yAxisMajorUnitFromSimpleXML,\n 'axisLabelsY2.majorLabelVisibility': y2AxisLabelVisibility,\n 'axisLabelsY2.majorUnit': y2AxisMajorUnitFromSimpleXML,\n 'axisY.abbreviation': yAxisAbbreviation,\n 'axisY.scale': yAxisScale,\n 'axisY2.abbreviation': y2AxisAbbreviation,\n 'axisY2.fields': y2FieldsStr,\n 'axisY2.scale': y2AxisScale,\n 'axisY2.enabled': y2Enabled,\n 'axisLabelsY2.integerUnits': y2IntegerUnits,\n 'chart.overlayFields': overlayFieldsStr,\n 'chart.nullValueMode': nullValueMode,\n 'chart.showDataLabels': showDataLabels,\n lineWidth,\n lineDashStyle,\n fieldDashStyles: lineDashStylesByFieldStr,\n stepPosition,\n fieldStepPositions: stepPositionsByFieldStr,\n yAxisMin: yAxisMinRaw,\n yAxisMax: yAxisMaxRaw,\n y2AxisMin: y2AxisMinRaw,\n y2AxisMax: y2AxisMaxRaw,\n showXMajorGridLines,\n showYMajorGridLines,\n showY2MajorGridLines,\n showYMinorGridLines,\n showY2MinorGridLines,\n showLineSmoothing,\n xAxisMajorTickVisibility,\n xAxisMajorTickSize,\n yAxisMajorTickVisibility,\n y2AxisMajorTickVisibility,\n yAxisMajorTickSize,\n y2AxisMajorTickSize,\n yAxisMajorTickInterval,\n y2AxisMajorTickInterval,\n yAxisMinorTickVisibility,\n y2AxisMinorTickVisibility,\n yAxisMinorTickSize,\n y2AxisMinorTickSize,\n showYAxisWithZero: showYAxisWithZeroFromOptions,\n showY2AxisWithZero: showY2AxisWithZeroFromOptions,\n } = options;\n\n // Map showDataLabels back to dataValuesDisplay format for canvas mode\n const dataValuesDisplay = showDataLabels === 'none' ? 'off' : showDataLabels;\n\n // Get showYAxisWithZero from top-level props first (accelerated render mode),\n // then fall back to options object (non-accelerated render mode)\n const showYAxisWithZero = showYAxisWithZeroFromProps ?? showYAxisWithZeroFromOptions;\n const showY2AxisWithZero = showY2AxisWithZeroFromProps ?? showY2AxisWithZeroFromOptions;\n\n // Convert visibility to boolean for canvas renderer\n // X-axis ticks default to true (shown) when 'auto' or 'show', false when 'hide'\n const showXMajorTicks = xAxisMajorTickVisibility !== 'hide';\n const showYMajorTicks = yAxisMajorTickVisibility === 'show';\n const showY2MajorTicks = y2AxisMajorTickVisibility === 'show';\n const showYMinorTicks = yAxisMinorTickVisibility === 'show';\n const showY2MinorTicks = y2AxisMinorTickVisibility === 'show';\n // X-axis line defaults to true (shown) for backwards compatibility\n const showXAxisLine = parseXAxisLineVisibility(xAxisLineVisibility);\n const showYAxisLine = yAxisLineVisibility === 'show';\n const showY2AxisLine = y2AxisLineVisibility === 'show';\n\n // Parse axis values - convert strings to numbers\n const yAxisMin = parseAxisValue(yAxisMinRaw);\n const yAxisMax = parseAxisValue(yAxisMaxRaw);\n const y2AxisMin = parseAxisValue(y2AxisMinRaw);\n const y2AxisMax = parseAxisValue(y2AxisMaxRaw);\n\n // Parse tick interval and size values - convert strings to numbers\n // Priority: SimpleXML props (from transformed options) > canvas-specific props\n const parseTickInterval = (simpleXMLValue?: string | number, canvasValue?: number) => {\n if (simpleXMLValue) return Number(simpleXMLValue);\n if (canvasValue) return Number(canvasValue);\n return undefined;\n };\n const yAxisMajorTickIntervalNum = parseTickInterval(yAxisMajorUnitFromSimpleXML, yAxisMajorTickInterval);\n const y2AxisMajorTickIntervalNum = parseTickInterval(\n y2AxisMajorUnitFromSimpleXML,\n y2AxisMajorTickInterval\n );\n const xAxisMajorTickSizeNum = xAxisMajorTickSize != null ? Number(xAxisMajorTickSize) : undefined;\n const yAxisMajorTickSizeNum = yAxisMajorTickSize != null ? Number(yAxisMajorTickSize) : undefined;\n const y2AxisMajorTickSizeNum = y2AxisMajorTickSize != null ? Number(y2AxisMajorTickSize) : undefined;\n const yAxisMinorTickSizeNum = yAxisMinorTickSize != null ? Number(yAxisMinorTickSize) : undefined;\n const y2AxisMinorTickSizeNum = y2AxisMinorTickSize != null ? Number(y2AxisMinorTickSize) : undefined;\n const seriesColors = seriesColorsStr ? JSON.parse(seriesColorsStr) : undefined;\n const seriesColorsByField = fieldColors ? JSON.parse(fieldColors) : undefined;\n const lineDashStylesByField = lineDashStylesByFieldStr ? JSON.parse(lineDashStylesByFieldStr) : undefined;\n const stepPositionsByField = stepPositionsByFieldStr ? JSON.parse(stepPositionsByFieldStr) : undefined;\n const legendLabels = parseArrayOption(legendLabelsStr);\n const bgColor = backgroundColor || bgColorFromOptions;\n const [containerWidth, setContainerWidth] = React.useState(Number(props.width));\n const [containerHeight, setContainerHeight] = React.useState(Number(props.height));\n const cachedHandleResize = React.useCallback((w, h) => {\n setContainerWidth(w);\n setContainerHeight(h);\n }, []);\n const filteredChartData = filterChartDataFromInternalFields({\n fields: chartData.fields,\n columns: chartData.seriesList,\n });\n\n const xField = getFieldName(filteredChartData.fields[0]);\n const yFields = getFieldNames(\n filteredChartData.fields.length > 1 ? filteredChartData.fields.slice(1) : []\n );\n const y2Fields = useMemo(\n () => (y2FieldsStr ? y2FieldsStr.split(',').map(f => f.trim()) : []),\n [y2FieldsStr]\n );\n const overlayFields = useMemo(\n () => (overlayFieldsStr ? overlayFieldsStr.split(',').map(f => f.trim()) : []),\n [overlayFieldsStr]\n );\n\n let xAxisTitle = getComputedAxisTitles(xAxisTitleText, [xField], xAxisTitleVisibility);\n xAxisTitle = ellipsisAxisTitle(xAxisTitle, containerWidth);\n // Filter out y2 fields from yFields when computing y-axis title\n const yFieldsForTitle = y2Enabled ? yFields.filter(field => !y2Fields.includes(field)) : yFields;\n let yAxisTitle = getComputedAxisTitles(yAxisTitleText, yFieldsForTitle, yAxisTitleVisibility);\n yAxisTitle = ellipsisAxisTitle(yAxisTitle, containerHeight);\n const fieldsForY2Axis = y2Fields.length > 0 ? y2Fields : overlayFields;\n let y2AxisTitle = getComputedAxisTitles(y2AxisTitleText, fieldsForY2Axis, y2AxisTitleVisibility);\n y2AxisTitle = ellipsisAxisTitle(y2AxisTitle, containerHeight);\n\n const xScaleConfig = useMemo(\n () => getXScaleConfig(xAxisTitle, xAxisLabelVisibility, xAxisLabelRotation),\n [xAxisTitle, xAxisLabelVisibility, xAxisLabelRotation]\n );\n const yScaleConfig = useMemo(\n () =>\n getYScaleConfig(\n yAxisTitle,\n yAxisAbbreviation,\n yAxisScale,\n yAxisLabelVisibility,\n yAxisMin,\n yAxisMax\n ),\n [yAxisTitle, yAxisAbbreviation, yAxisScale, yAxisLabelVisibility, yAxisMin, yAxisMax]\n );\n const y2ScaleConfig = useMemo(() => {\n if (y2Enabled) {\n return getY2ScaleConfig(\n y2AxisTitle,\n y2AxisAbbreviation,\n y2AxisScale,\n y2IntegerUnits,\n y2AxisLabelVisibility,\n y2AxisMin,\n y2AxisMax\n );\n }\n return {};\n }, [\n y2Enabled,\n y2AxisTitle,\n y2AxisAbbreviation,\n y2AxisScale,\n y2IntegerUnits,\n y2AxisLabelVisibility,\n y2AxisMin,\n y2AxisMax,\n ]);\n const uplotContainerElement = useRef(null);\n\n const seriesDataFormatted = [\n filteredChartData.columns[0],\n ...convert2DArrayToNumbers(filteredChartData.columns.slice(1)),\n ];\n chartData.fields = filteredChartData.fields;\n chartData.columns = seriesDataFormatted;\n\n // Memoize seriesOverrides to prevent unnecessary recreations\n const seriesOverrides = useMemo(\n () =>\n getSeriesOverrides(\n yFields,\n y2Fields,\n lineWidth,\n overlayFields,\n y2Enabled,\n nullValueMode,\n markerDisplay,\n lineDashStyle,\n lineDashStylesByField,\n stepPosition,\n stepPositionsByField\n ),\n [\n yFields,\n y2Fields,\n lineWidth,\n overlayFields,\n y2Enabled,\n nullValueMode,\n markerDisplay,\n lineDashStyle,\n lineDashStylesByField,\n stepPosition,\n stepPositionsByField,\n ]\n );\n\n // Memoize annotations to prevent unnecessary recreations\n const chartingEventAnnotations = useMemo(\n () =>\n getAnnotationsForCanvas({\n annotationX,\n annotationColor,\n annotationLabel,\n }),\n [annotationX, annotationColor, annotationLabel]\n );\n\n // Memoize scaleConfig to prevent unnecessary recreations\n const scaleConfig = useMemo(\n () => ({ ...xScaleConfig, ...yScaleConfig, ...y2ScaleConfig }),\n [xScaleConfig, yScaleConfig, y2ScaleConfig]\n );\n\n // Memoize legend configuration\n // In seriesCompare mode, force the legend to the right side so that the legend's\n // fixed width (needed to prevent jitter when hover values appear/disappear) doesn't\n // affect layouts that would otherwise place it on the left.\n const isSeriesCompare = legendMode === 'seriesCompare';\n const legend = useMemo(\n () =>\n getLegend({\n legendDisplay: isSeriesCompare && legendDisplay !== 'off' ? 'right' : legendDisplay,\n isSeriesCompare,\n legendTruncation,\n }),\n [legendDisplay, isSeriesCompare, legendTruncation]\n );\n\n // Memoize click handlers to avoid recreating them on every render\n const handleChartClick = React.useCallback(\n event => {\n // Only invoke if onClick is defined to avoid unnecessary work\n if (onClick) {\n handleClick(event, onClick, trellisKey, trellisSplitBy);\n }\n },\n [onClick, trellisKey, trellisSplitBy]\n );\n\n const handleChartLegendClick = React.useCallback(\n event => {\n // Only invoke if onClick is defined to avoid unnecessary work\n if (onClick) {\n handleLegendClick(event, onClick, trellisKey, trellisSplitBy);\n }\n },\n [onClick, trellisKey, trellisSplitBy]\n );\n\n const handleChartRangeSelection = React.useCallback(\n range => {\n // Only invoke if onSelect is defined to avoid unnecessary work\n if (onSelect) {\n handleRangeSelection(range, onSelect, chartData, trellisKey, trellisSplitBy);\n }\n // Always allow range selection UI to appear, even if onSelect is undefined\n },\n [onSelect, chartData, trellisKey, trellisSplitBy]\n );\n\n const handleChartRangeZoom = React.useCallback(\n range => {\n // Only invoke if onSelect is defined to avoid unnecessary work\n if (onSelect) {\n handleRangeZoom(range, onSelect, chartData, trellisKey, trellisSplitBy);\n }\n },\n [onSelect, chartData, trellisKey, trellisSplitBy]\n );\n\n // Determine if search zoom should be enabled based on eventHandlers and xField\n // Use xFieldFromProps if available, otherwise fall back to computed xField from chartData\n const xFieldToUse = xFieldFromProps || xField;\n const enableSearchZoom = React.useMemo(\n () => shouldEnableSearchZoom(eventHandlers, xFieldToUse),\n [eventHandlers, xFieldToUse]\n );\n\n // Store the last payload and originalEvent to return on mouseout\n const lastPayloadRef = React.useRef<Record<string, any> | null>(null);\n const lastOriginalEventRef = React.useRef<any>(null);\n // Store the previous mouseover payload to check for changes\n const previousMouseoverPayloadRef = React.useRef<Record<string, unknown> | null>(null);\n // Store additionalTooltipValues in a ref to avoid chart remounts when it changes\n // The chart reads from this ref, so changes update the tooltip without remounting\n const additionalTooltipValuesRef = React.useRef(additionalTooltipValues);\n React.useEffect(() => {\n additionalTooltipValuesRef.current = additionalTooltipValues;\n }, [additionalTooltipValues]);\n\n const handleChartCrosshairChange = React.useCallback(\n event => {\n // Only invoke if onPointMouseOver or onPointMouseOut is defined to avoid unnecessary work\n if (onPointMouseOver || onPointMouseOut) {\n // Handle mouseout when event is undefined\n if (!event) {\n if (onPointMouseOut && lastPayloadRef.current) {\n onPointMouseOut({\n type: 'point.mouseout',\n originalEvent: lastOriginalEventRef.current,\n payload: lastPayloadRef.current,\n });\n }\n // Reset previous mouseover payload on mouseout\n previousMouseoverPayloadRef.current = null;\n return;\n }\n\n // Handle mouseover\n const payload = {\n ...pick(event, 'value', 'seriesKey', 'time', 'index', 'seriesIndex'),\n name: event.seriesKey,\n };\n delete payload.seriesKey;\n\n // Add row context fields in the format: row.${fieldName}.value\n if (event.rowContext) {\n Object.assign(\n payload,\n Object.keys(event.rowContext).reduce((acc, fieldName) => {\n acc[`row.${fieldName}.value`] = event.rowContext[fieldName];\n return acc;\n }, {})\n );\n }\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n // Check if the payload has actually changed to avoid emitting duplicate events\n if (!hasMouseoverPayloadChanged(updatedPayload, previousMouseoverPayloadRef.current)) {\n return;\n }\n\n // Store payload and originalEvent for mouseout\n lastPayloadRef.current = updatedPayload;\n lastOriginalEventRef.current = event;\n // Store current payload for next comparison\n previousMouseoverPayloadRef.current = { ...updatedPayload };\n\n if (onPointMouseOver) {\n onPointMouseOver({\n type: 'point.mouseover',\n originalEvent: event,\n payload: updatedPayload,\n });\n }\n }\n },\n [onPointMouseOver, onPointMouseOut, trellisKey, trellisSplitBy]\n );\n\n // Create a key to reset RangeSelectionProvider when data changes\n const dataKey = `${chartData.columns[0]?.[0]}-${chartData.columns[0]?.[chartData.columns[0].length - 1]}-${chartData.columns[0]?.length}`;\n\n const memoizedChart = useMemo(() => {\n // Always pass zoom handler when onSelect exists, serverSideZoom controls behavior\n const computedOnRangeZoom = onSelect ? handleChartRangeZoom : undefined;\n\n return (\n <RangeSelectionProvider key={dataKey}>\n <TimeSeriesChart\n data={chartData as GenericDataSet}\n width={containerWidth}\n height={containerHeight}\n seriesColors={seriesColors}\n seriesColorsByField={seriesColorsByField}\n seriesConfig={seriesOverrides}\n legend={legend}\n legendLabels={legendLabels}\n legendTruncation={legendTruncation}\n isSeriesCompare={legendMode === 'seriesCompare'}\n maxSeriesFocus={legendMode === 'seriesCompare' ? 0 : undefined}\n scaleConfig={scaleConfig}\n timestampFormat=\"expanded\"\n onCrosshairClick={onClick ? handleChartClick : undefined}\n onCrosshairChange={\n onPointMouseOver || onPointMouseOut ? handleChartCrosshairChange : undefined\n }\n onSeriesClick={onClick ? handleChartLegendClick : undefined}\n onRangeSelection={handleChartRangeSelection}\n onRangeZoom={computedOnRangeZoom}\n serverSideZoom={enableSearchZoom}\n userLocale={userLocale}\n events={chartingEventAnnotations}\n eventsConfig={{ renderer: triangleEventAnnotationRenderer }}\n additionalTooltipValuesRef={additionalTooltipValuesRef}\n showXMajorGridLines={showXMajorGridLines}\n showYMajorGridLines={showYMajorGridLines}\n showY2MajorGridLines={showY2MajorGridLines}\n showYMinorGridLines={showYMinorGridLines}\n showY2MinorGridLines={showY2MinorGridLines}\n showLineSmoothing={showLineSmoothing}\n dataValuesDisplay={dataValuesDisplay}\n showXMajorTicks={showXMajorTicks}\n xAxisMajorTickSize={xAxisMajorTickSizeNum}\n showYMajorTicks={showYMajorTicks}\n showY2MajorTicks={showY2MajorTicks}\n yAxisMajorTickSize={yAxisMajorTickSizeNum}\n y2AxisMajorTickSize={y2AxisMajorTickSizeNum}\n yAxisMajorTickInterval={yAxisMajorTickIntervalNum}\n y2AxisMajorTickInterval={y2AxisMajorTickIntervalNum}\n showYMinorTicks={showYMinorTicks}\n showY2MinorTicks={showY2MinorTicks}\n yAxisMinorTickSize={yAxisMinorTickSizeNum}\n y2AxisMinorTickSize={y2AxisMinorTickSizeNum}\n showYAxisWithZero={showYAxisWithZero}\n showY2AxisWithZero={showY2AxisWithZero}\n showXAxisLine={showXAxisLine}\n showYAxisLine={showYAxisLine}\n showY2AxisLine={showY2AxisLine}\n xAxisMaxLabelParts={xAxisMaxLabelParts}\n />\n </RangeSelectionProvider>\n );\n // Note: additionalTooltipValues passed via ref to avoid chart remount when switching stories.\n // The ref is updated via useEffect, so tooltip gets latest values without remounting chart.\n }, [\n onSelect,\n handleChartRangeZoom,\n dataKey,\n chartData,\n containerWidth,\n containerHeight,\n seriesColors,\n seriesColorsByField,\n seriesOverrides,\n legend,\n legendLabels,\n legendTruncation,\n scaleConfig,\n onClick,\n handleChartClick,\n onPointMouseOver,\n onPointMouseOut,\n handleChartCrosshairChange,\n handleChartLegendClick,\n handleChartRangeSelection,\n enableSearchZoom,\n userLocale,\n chartingEventAnnotations,\n showXMajorGridLines,\n showYMajorGridLines,\n showY2MajorGridLines,\n showYMinorGridLines,\n showY2MinorGridLines,\n showLineSmoothing,\n dataValuesDisplay,\n showXMajorTicks,\n xAxisMajorTickSizeNum,\n showYMajorTicks,\n showY2MajorTicks,\n yAxisMajorTickSizeNum,\n y2AxisMajorTickSizeNum,\n yAxisMajorTickIntervalNum,\n y2AxisMajorTickIntervalNum,\n showYMinorTicks,\n showY2MinorTicks,\n yAxisMinorTickSizeNum,\n y2AxisMinorTickSizeNum,\n showYAxisWithZero,\n showY2AxisWithZero,\n showXAxisLine,\n showYAxisLine,\n showY2AxisLine,\n legendMode,\n xAxisMaxLabelParts,\n ]);\n\n const memoizedVisualization = useMemo(() => {\n return <VizStyleWrapper backgroundColor={bgColor}>{memoizedChart}</VizStyleWrapper>;\n }, [bgColor, memoizedChart]);\n\n return (\n <>\n {trellisEnabled && (\n <TrellisTitle\n trellisKey={trellisKey}\n backgroundColor={bgColor}\n fontColor={defaultFontColor}\n />\n )}\n <TimeSeriesChartContainer\n height={trellisEnabled ? Number(height) - TRELLIS_TITLE_HEIGHT : height}\n width={width}\n ref={uplotContainerElement}\n data-test=\"timeseries-chart-wrapper\"\n >\n <SizeAwareWrapper width={width} height={height} onResize={cachedHandleResize} />\n {memoizedVisualization}\n </TimeSeriesChartContainer>\n </>\n );\n};\n\nexport default TimeSeriesChartWrapper;\n", "\nimport * as defaultImport from \"react\";\nexport * from \"react\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"lodash\";\nexport * from \"lodash\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"styled-components\";\nexport * from \"styled-components\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/SizeAwareWrapper\";\nexport * from \"@splunk/visualizations-shared/SizeAwareWrapper\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-canvas\";\nexport * from \"@splunk/visualization-canvas\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/style\";\nexport * from \"@splunk/visualizations-shared/style\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import styled from 'styled-components';\n\nconst VizStyleWrapper = styled.div.attrs(({ dataTestKey }) => ({\n 'data-test': dataTestKey,\n 'data-testid': dataTestKey,\n}))`\n display: flex;\n justify-content: center;\n flex-direction: column;\n width: 100%;\n height: 100%;\n background-color: ${props => props.backgroundColor};\n`;\n\nVizStyleWrapper.displayName = 'VizStyleWrapper';\n\nexport default VizStyleWrapper;\n", "\nimport * as defaultImport from \"@splunk/themes/variables\";\nexport * from \"@splunk/themes/variables\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/Triangle\";\nexport * from \"@splunk/react-icons/Triangle\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import { has, isArray, isUndefined } from 'lodash';\nimport React from 'react';\nimport styled from 'styled-components';\nimport variables from '@splunk/themes/variables';\nimport Triangle from '@splunk/react-icons/Triangle';\nimport {\n BottomLegendFactory,\n Legend,\n SideLegendFactory,\n LeftLegendFactory,\n TopLegendFactory,\n ScaleConfig,\n shortenNumber,\n SeriesConfig,\n EventAnnotation,\n EventAnnotationRendererProps,\n} from '@splunk/visualization-canvas';\nimport type { LegendTruncation } from '@splunk/visualization-canvas';\nimport type { JsonColumnData } from './interfaces/DataSource';\n\ninterface ChartOptions {\n [key: string]: any;\n}\n\nexport const DEFAULT_LINE_WIDTH = 2;\n/**\n * Get formatted annotations - highcharts expects annotations in a specific format\n * @method getAnnotations\n * @param {Object} options\n * @param {Array} options.annotationX\n * @param {Array} options.annotationColor\n * @param {Array} options.annotationLabel\n * @returns {Array}\n */\nexport const getAnnotations = ({ annotationX, annotationColor, annotationLabel }) =>\n annotationX && annotationX.length\n ? annotationX.map((timestamp, i) => ({\n color: annotationColor && annotationColor[i],\n label: annotationLabel && annotationLabel[i],\n time: timestamp,\n }))\n : [];\n\n/**\n * Get formatted annotations for canvas - viz-canvas timeseries expects annotations in a specific format\n * @method getAnnotationsForCanvas\n * @param {Object} options\n * @param {Array} options.annotationX\n * @param {Array} options.annotationColor\n * @param {Array} options.annotationLabel\n * @returns {Array}\n */\nexport const getAnnotationsForCanvas = ({\n annotationX,\n annotationColor,\n annotationLabel,\n}): EventAnnotation[] =>\n annotationX?.length\n ? annotationX.map((timestamp, i) => ({\n key: annotationLabel?.[i],\n time: timestamp,\n color: annotationColor?.[i],\n }))\n : [];\n\n/**\n * Styled Triangle component for event annotations with default severityColorNotice\n */\nconst StyledTriangle = styled(Triangle)<{ eventColor?: string }>`\n color: ${props => props.eventColor || variables.severityColorNotice(props)};\n`;\n\n/**\n * Custom event annotation renderer using Triangle icon from @splunk/react-icons\n * @method triangleEventAnnotationRenderer\n * @param {EventAnnotationRendererProps} props\n * @returns {ReactElement}\n */\nexport const triangleEventAnnotationRenderer: React.FC<EventAnnotationRendererProps> = ({\n event,\n dimensions,\n}) => {\n const eventWithColor = event as EventAnnotation & { color?: string };\n return React.createElement(StyledTriangle, {\n width: `${dimensions.width}px`,\n height: `${dimensions.height}px`,\n viewBox: '0 0 24 24',\n variant: 'filled',\n eventColor: eventWithColor.color,\n });\n};\n\n/**\n * Truncate the result set to given limit\n * @method truncateData\n * @param {Object} dataSet - dataSources.primary.data\n * @param {Number|String} truncationLimit - options['chart.resultTruncationLimit']\n * @returns {Object}\n */\nexport const truncateData = (dataSet, truncationLimit): Record<string, any[]> => {\n if (!dataSet) {\n return null;\n }\n\n const limit = parseInt(truncationLimit, 10);\n if (!limit || limit <= 0) {\n return dataSet;\n }\n\n const truncatedData: Record<string, Array<string[] | number[]>> = {\n ...dataSet,\n };\n truncatedData.columns = truncatedData.columns.map(columnData =>\n columnData && Array.isArray(columnData) ? columnData.slice(0, limit) : columnData\n );\n return truncatedData;\n};\n\n/**\n * Helper method to update the option values into the values that SC accepts\n * @method mapToValues\n * @param {Object} options\n * @returns {Object}\n */\nexport const mapToValues = (optionValuesSCMapping: Record<string, any>) => options => {\n const convertedOptions: Record<string, any> = { ...options };\n Object.keys(optionValuesSCMapping).forEach(key => {\n if (has(options, key)) {\n const updatedValue = optionValuesSCMapping[key][options[key]];\n if (!isUndefined(updatedValue)) {\n convertedOptions[key] = updatedValue;\n }\n }\n });\n return convertedOptions;\n};\n\ninterface y2AxisOptions extends ChartOptions {\n y2Fields?: string | string[];\n}\n\n/**\n * Helper method to process options related to y2Fields\n * @method convertY2AxisOptions\n * @param {Object} originalOptions\n * @returns {Object}\n */\nexport const convertY2AxisOptions = ({\n y2Fields,\n ...originalOptions\n}: y2AxisOptions): Record<string, any> => {\n const convertedOptions: Record<string, any> = {\n ...originalOptions,\n };\n if (y2Fields) {\n convertedOptions['axisY2.enabled'] = true;\n convertedOptions['axisY2.fields'] = isArray(y2Fields)\n ? y2Fields.filter(name => name).join(',')\n : y2Fields;\n }\n return convertedOptions;\n};\n\n/**\n * Helper method to format value for overlayFields\n * @method convertOverlayFields\n * @param {Object} originalOptions\n * @returns {Object}\n */\nexport const convertOverlayFields = (originalOptions: ChartOptions): ChartOptions => {\n const convertedOptions: ChartOptions = {\n ...originalOptions,\n };\n const { overlayFields } = originalOptions;\n if (overlayFields) {\n convertedOptions.overlayFields = Array.isArray(overlayFields)\n ? overlayFields\n .filter(field => field)\n .map(field => field.trim())\n .join(',')\n : overlayFields;\n }\n return convertedOptions;\n};\n\n/**\n * checks whether data is multi series data\n * @param {array} data array\n * @return {Boolean}\n */\nexport const isMultiSeriesData = (data: string[] | string[][]): boolean =>\n Array.isArray(data) && Array.isArray(data[0]);\n/**\n * checks whether data is multi series data and returns value as array\n * @param {array} data array\n * @param {*} value to return as array\n * @return {array}\n */\nexport const toArrayForSeries = (data, value): any[] => {\n if (isMultiSeriesData(data)) {\n return Array.isArray(value) ? value : [value];\n }\n return [value];\n};\ninterface ConstructFieldsAndColumnsParams {\n x: string[];\n y: string[] | string[][];\n xField: string;\n yFields: string | string[];\n y2?: string[] | string[][];\n y2Fields?: string | string[];\n}\nexport const constructFieldsAndColumns = ({\n x = [],\n y = [],\n xField,\n yFields,\n y2,\n y2Fields,\n}: ConstructFieldsAndColumnsParams): JsonColumnData => {\n const columns = [x.map(String), ...toArrayForSeries(y, y).map(series => series.map(String))];\n const yFieldsArray = toArrayForSeries(y, yFields);\n const fields = [{ name: xField }, ...yFieldsArray.map(field => ({ name: field }))];\n // splunk-charting requires y2 to be part of columns\n // when y & y2 options are configured with different (mutually exclusive) series\n // y2 columns need to be added to columns\n if (y2Fields) {\n const y2FieldsArray = toArrayForSeries(y2, y2Fields);\n const y2AsArray = toArrayForSeries(y2, y2).map(series => series?.map(String));\n y2FieldsArray.forEach((y2Field, index) => {\n if (yFieldsArray.indexOf(y2Field) === -1 && y2AsArray[index]) {\n fields.push({\n name: y2Field,\n });\n columns.push(y2AsArray[index]);\n }\n });\n }\n return {\n columns,\n fields,\n };\n};\n\nexport function constructAdditionalTooltipFieldsMap({ fields, columns, additionalTooltipFields }) {\n const map = {};\n\n additionalTooltipFields?.forEach(fieldName => {\n const index = fields.findIndex(f => f.name === fieldName);\n if (index !== -1) {\n map[fieldName] = columns[index];\n }\n });\n\n return map;\n}\n\n/**\n * Extracts additional tooltip values from columns and fields into an array of objects.\n * Each object in the array represents the values at a specific data point index.\n * This follows the same pattern used by Timeline visualization.\n *\n * @param columns - Array of column data\n * @param fields - Array of field definitions with name property\n * @param additionalTooltipFields - Array of field names to extract\n * @returns Array of objects, where each object maps field names to values at that index\n */\n// Type alias for a single tooltip field value record\ntype TooltipFieldRecord = Record<string, string | number | null>;\n\nexport function extractAdditionalTooltipValues(\n columns: (string | number | null)[][],\n fields: { name: string }[],\n additionalTooltipFields: string[]\n): TooltipFieldRecord[] {\n if (!additionalTooltipFields?.length || !columns?.length || !fields?.length) {\n return [];\n }\n\n // Create a mapping of field names to their column indices\n const fieldIndexMap = fields.reduce<Record<string, number>>((acc, field, index) => {\n acc[field.name] = index;\n return acc;\n }, {});\n\n const numRows = columns[0]?.length || 0;\n const additionalTooltipValuesArray: TooltipFieldRecord[] = [];\n\n for (let i = 0; i < numRows; i += 1) {\n const tooltipObject: TooltipFieldRecord = {};\n\n additionalTooltipFields.forEach(fieldName => {\n if (fieldName in fieldIndexMap) {\n const columnIndex = fieldIndexMap[fieldName];\n tooltipObject[fieldName] = columns[columnIndex]?.[i] ?? null;\n } else {\n tooltipObject[fieldName] = null;\n }\n });\n\n additionalTooltipValuesArray.push(tooltipObject);\n }\n\n return additionalTooltipValuesArray;\n}\n\n// Note: we are making the assumption that attaching a range.select listener means the user wants to enable search zoom\n// This is because we don't know if the time range tokens being updated by the drilldown is used by the current viz.\n// In the future we are considering using a shared context to pass this information from UDF to Viz.\ninterface OptionsProps {\n events?: string[];\n selectedItemId?: string;\n [key: string]: unknown;\n}\ninterface EventHandler {\n type: string;\n options: OptionsProps;\n}\n\nexport const shouldEnableSearchZoom = (eventHandlers: EventHandler[] = [], xField = '') => {\n const rangeSelectEventHandler = eventHandlers.find(eventHandler =>\n eventHandler.options.events?.includes('range.select')\n );\n // Check if xField is _time. This is how splunk-charting distinguishes a time chart from categorical.\n // Note: search zoom will be buggy if the x axis uses timestamp values but is not _time\n const xAxisIsTime = xField === '_time';\n\n return !!rangeSelectEventHandler && xAxisIsTime;\n};\n\nconst canvasSupportedTimeSeriesCharts = ['splunk.line'];\nexport const isTimeSeriesCanvasRenderSupported = (vizConfigKey: string): boolean => {\n return canvasSupportedTimeSeriesCharts.indexOf(vizConfigKey) > -1;\n};\n\ntype ChartData = {\n fields: (string | { name: string })[];\n columns: (string | number)[][];\n};\n\n// Filter all internal fields and columns except for _time fild\nexport const filterChartDataFromInternalFields = (chartData: ChartData): ChartData => {\n const { fields, columns } = chartData;\n\n // Determine the indexes to keep\n const keepIndexes = fields.reduce<number[]>((acc, field, index) => {\n const fieldName = typeof field === 'object' ? field?.name : field;\n if (!fieldName?.startsWith('_') || fieldName === '_time') {\n acc.push(index);\n }\n return acc;\n }, []);\n\n // Filter fields and columns\n const filteredFields = keepIndexes.map(index => fields[index]);\n const filteredColumns = keepIndexes.map(index => columns[index]);\n\n return { fields: filteredFields, columns: filteredColumns };\n};\n\nexport const isTimeField = (field): boolean => {\n return (\n (typeof field === 'object' && field?.name === '_time') ||\n (typeof field === 'string' && field === '_time')\n );\n};\n\nexport const convert2DArrayToNumbers = arr => {\n return arr.map(subArray => subArray.map(element => parseFloat(element)));\n};\n\nexport const convertTimeStringToUnix = arr => {\n return arr.map(timeStr => parseInt((new Date(timeStr).getTime() / 1000).toFixed(0), 10));\n};\n\n/**\n * Parses an axis value that may be 'auto', null, undefined, empty string, or a numeric value.\n * Returns undefined for non-numeric values, allowing the renderer to auto-calculate the range.\n * @param {any} val - The value to parse (string, number, null, undefined)\n * @returns {number | undefined} - Parsed number or undefined\n */\nexport const parseAxisValue = (val: any): number | undefined => {\n if (val === undefined || val === null || val === 'auto' || val === '') {\n return undefined;\n }\n const num = typeof val === 'number' ? val : Number.parseFloat(val);\n return Number.isNaN(num) ? undefined : num;\n};\n\n/**\n * Parses X-axis line visibility option from string to boolean or undefined.\n * @param {string | undefined} visibility - The visibility option ('hide', 'show', or other)\n * @returns {boolean | undefined} - false for 'hide', true for 'show', undefined otherwise\n */\nexport const parseXAxisLineVisibility = (visibility?: string): boolean | undefined => {\n if (visibility === 'hide') return false;\n if (visibility === 'show') return true;\n return undefined;\n};\n\n// Legend placement logic for canvas render, used in TimeseriesChartWrapper\nexport const getLegend = (props: {\n legendDisplay: string;\n isSeriesCompare: boolean;\n legendTruncation?: LegendTruncation;\n}): Legend | false => {\n const legendPlacement = props?.legendDisplay;\n const { isSeriesCompare, legendTruncation } = props;\n const commonLegendProps = {\n center: true,\n fontSize: 12,\n largerTiles: true,\n hideSeriesValue: !isSeriesCompare, // Show values if in seriesCompare mode\n legendTruncation,\n };\n\n // \"right\" | \"left\" | \"top\" | \"bottom\" | \"off\"\n switch (legendPlacement) {\n case 'off':\n return false;\n case 'left':\n return LeftLegendFactory({\n ...commonLegendProps,\n });\n case 'bottom':\n return BottomLegendFactory({\n wrap: true,\n ...commonLegendProps,\n });\n case 'top':\n return TopLegendFactory({\n wrap: true,\n ...commonLegendProps,\n });\n // Note: By default, use right legend\n default:\n return SideLegendFactory({\n ...commonLegendProps,\n });\n }\n};\n\nexport const getComputedAxisTitles = (\n inputAxisTitle: string,\n fields: string[],\n axisTitleVisibility: 'show' | 'collapsed'\n): string => {\n if (axisTitleVisibility === 'collapsed') {\n return '';\n }\n let fieldTitle = fields.length > 1 ? '' : fields[0]; // If more than one series (multi-series) default empty title\n if (!fieldTitle) {\n fieldTitle = '';\n }\n return inputAxisTitle?.length ? inputAxisTitle.trim() : fieldTitle;\n};\n\n/**\n * Truncates Y-axis title based on available container height and font metrics\n * @param axisTitle - The title text to potentially truncate\n * @param containerSpacing - Available height/ width in pixels depending on axis orientation\n * @param fontSize - Font size in pixels (default: 12)\n * @returns Truncated title with ellipsis if needed\n */\nexport const ellipsisAxisTitle = (axisTitle: string, containerSpacing: number, fontSize = 12): string => {\n if (!axisTitle) {\n return '';\n }\n if (Number.isNaN(containerSpacing) || containerSpacing <= 0) {\n return axisTitle;\n }\n // Calculate available height for text (leave 40% margin)\n const availableHeight = containerSpacing * 0.6;\n\n // Use a generic character width ratio that works across most fonts\n // 0.55 is a reasonable average for most fonts\n const avgCharWidth = fontSize * 0.55;\n\n // Calculate maximum characters that fit in available height\n const maxChars = Math.floor(availableHeight / avgCharWidth);\n\n // If title fits, return as-is\n if (axisTitle.length <= maxChars) {\n return axisTitle;\n }\n\n // Need to truncate - use middle ellipsis for better context\n if (maxChars <= 3) {\n return '...'; // Not enough space for meaningful text\n }\n\n // Reserve 3 characters for ellipsis\n const availableChars = maxChars - 3;\n const halfChars = Math.floor(availableChars / 2);\n\n // Create truncated title with middle ellipsis\n const start = axisTitle.slice(0, halfChars);\n const end = axisTitle.slice(-halfChars);\n\n return `${start}...${end}`;\n};\n\nexport type FieldObject = {\n name: string;\n};\n\nexport const getFieldName = (field: string | FieldObject): string => {\n const fieldName = typeof field === 'object' ? (field as unknown as FieldObject)?.name : field;\n return fieldName;\n};\n\nexport const getFieldNames = (fields: (string | FieldObject)[]): string[] => {\n return fields.map(field => getFieldName(field));\n};\n\n/**\n * Type alias for axis label visibility options\n */\nexport type AxisLabelVisibility = 'hide' | 'show' | 'auto';\n\n/**\n * Returns X scale config for viz-canvas charts\n * @param label\n * @param xAxisLabelVisibility\n * @returns\n */\nexport const getXScaleConfig = (\n label: string,\n xAxisLabelVisibility?: AxisLabelVisibility,\n xAxisLabelRotation?: -90 | -45 | 0 | 45 | 90\n): ScaleConfig => {\n const xConfig: ScaleConfig = { x: {} };\n xConfig.x.label = label;\n // Set hideLabels to true when xAxisLabelVisibility is \"hide\"\n if (xAxisLabelVisibility === 'hide') {\n xConfig.x.hideLabels = true;\n }\n // Set labelRotation if provided\n if (xAxisLabelRotation !== undefined) {\n xConfig.x.labelRotation = xAxisLabelRotation;\n }\n return xConfig;\n};\n\n/**\n * Returns Y scale config for viz-canvas charts\n * @param label\n * @param yAxisAbbreviation\n * @param yAxisScale\n * @param yAxisLabelVisibility\n * @param yAxisMin\n * @param yAxisMax\n * @returns\n */\nexport const getYScaleConfig = (\n label: string,\n yAxisAbbreviation: string,\n yAxisScale?: 'linear' | 'log',\n yAxisLabelVisibility?: AxisLabelVisibility,\n yAxisMin?: number,\n yAxisMax?: number\n): ScaleConfig => {\n const scaleType = yAxisScale ?? 'linear';\n const yConfig: ScaleConfig = { y: {} };\n yConfig.y.label = label;\n yConfig.y.type = scaleType;\n if (yAxisAbbreviation !== 'none') {\n yConfig.y.tickFmt = (v): string => shortenNumber(v, 1);\n }\n // Only set fixed width when abbreviation is ON\n // When abbreviation is OFF, width remains undefined to allow dynamic sizing in uplot-utils\n // based on actual data label lengths\n if (yAxisAbbreviation !== 'none') {\n yConfig.y.width = label && label.length > 0 ? 30 : 10;\n }\n if (yAxisLabelVisibility === 'hide') {\n yConfig.y.hideLabels = true;\n }\n if (yAxisMin !== undefined || yAxisMax !== undefined) {\n yConfig.y.range = (u, dataMin, dataMax) => {\n const min = yAxisMin ?? dataMin;\n const max = yAxisMax ?? dataMax;\n return [min, max];\n };\n }\n return yConfig;\n};\n/**\n * Returns Y2 scale config for viz-canvas charts\n * @param label\n * @param axisAbbreviation\n * @param axisScale\n * @param roundAxisLabelsToInteger\n * @param y2AxisLabelVisibility\n * @param y2AxisMin\n * @param y2AxisMax\n * @returns\n */\nexport const getY2ScaleConfig = (\n label: string,\n axisAbbreviation: string,\n axisScale?: 'linear' | 'log',\n roundAxisLabelsToInteger?: boolean,\n y2AxisLabelVisibility?: AxisLabelVisibility,\n y2AxisMin?: number,\n y2AxisMax?: number\n): ScaleConfig => {\n const y2Config: ScaleConfig = { y2: {} };\n const scaleType = axisScale ?? 'linear';\n y2Config.y2.label = label;\n y2Config.y2.side = 'right';\n // Note: showGrid is intentionally not set here so that the top-level\n // showY2MajorGridLines prop can control it (defaults to false)\n y2Config.y2.type = scaleType;\n if (axisAbbreviation !== 'none') {\n y2Config.y2.tickFmt = (v): string => shortenNumber(v, 1, roundAxisLabelsToInteger);\n // Set width for abbreviated Y2 axis\n // Y2 needs more width (50px) than Y-axis (30px) because of rotated title positioning\n // Width will be used to detect abbreviation setting in padding calculations\n y2Config.y2.width = label && label.length > 0 ? 50 : 10;\n } else if (roundAxisLabelsToInteger) {\n y2Config.y2.tickFmt = (v): string =>\n roundAxisLabelsToInteger ? Math.round(v).toString() : v.toString();\n }\n if (y2AxisLabelVisibility === 'hide') {\n y2Config.y2.hideLabels = true;\n }\n if (y2AxisMin !== undefined || y2AxisMax !== undefined) {\n y2Config.y2.range = (u, dataMin, dataMax) => {\n const min = y2AxisMin ?? dataMin;\n const max = y2AxisMax ?? dataMax;\n return [min, max];\n };\n }\n return y2Config;\n};\n\n/**\n * Add series overrides for viz-canvas charts (for eg:- line width)\n */\nexport const getSeriesOverrides = (\n yfields: string[],\n y2fields?: string[],\n lineWidth?: number,\n overlayFields?: string[],\n y2Enabled?: boolean,\n nullValueMode?: 'gaps' | 'connect' | 'zero',\n markerDisplay?: 'off' | 'filled' | 'outlined',\n lineDashStyle?: string,\n lineDashStylesByField?: Record<string, string>,\n stepPosition?: 'off' | 'before' | 'after',\n stepPositionsByField?: Record<string, 'off' | 'before' | 'after'>\n): SeriesConfig => {\n const seriesConfig: SeriesConfig = {};\n\n // Determine spanGaps based on nullValueMode\n let spanGaps: boolean | undefined;\n let replaceNullsWithZero: boolean | undefined;\n if (nullValueMode === 'gaps') {\n spanGaps = false;\n } else if (nullValueMode === 'connect' || nullValueMode === 'zero') {\n spanGaps = true;\n if (nullValueMode === 'zero') {\n replaceNullsWithZero = true;\n }\n }\n\n yfields.forEach(field => {\n seriesConfig[field] = {\n overrides: { width: lineWidth ?? DEFAULT_LINE_WIDTH },\n };\n\n // Add spanGaps if nullValueMode is provided\n if (spanGaps !== undefined) {\n seriesConfig[field].overrides.spanGaps = spanGaps;\n }\n\n // If y2Enabled is true, determine which fields go to y2 scale\n if (y2Enabled) {\n const shouldAssignToY2 =\n // If y2Fields are present, assign all y2Fields to y2 scale\n (y2fields?.length > 0 && y2fields.includes(field)) ||\n // Else, assign all overlayFields to y2 scale\n ((!y2fields || y2fields.length === 0) && overlayFields?.includes(field));\n\n if (shouldAssignToY2) {\n seriesConfig[field].overrides.scale = 'y2';\n } else {\n // Explicitly set scale to 'y' for fields not assigned to y2\n seriesConfig[field].overrides.scale = 'y';\n }\n }\n\n // If field is in overlayFields, set type to 'line'\n if (overlayFields?.includes(field)) {\n seriesConfig[field].type = 'line';\n }\n\n // Add markerDisplay if provided\n if (markerDisplay !== undefined) {\n seriesConfig[field].markerDisplay = markerDisplay;\n }\n\n // Add lineDashStyle - check per-field first, then fall back to global\n const fieldDashStyle = lineDashStylesByField?.[field] || lineDashStyle;\n if (fieldDashStyle) {\n seriesConfig[field].lineDashStyle = fieldDashStyle as any;\n }\n\n // Add stepPosition - check per-field first, then fall back to global.\n // Explicit \"off\" disables stepping for the field.\n const hasFieldStepPosition = Object.hasOwn(stepPositionsByField || {}, field);\n const fieldStepPosition = hasFieldStepPosition ? stepPositionsByField?.[field] : stepPosition;\n if (fieldStepPosition && fieldStepPosition !== 'off') {\n (seriesConfig[field] as SeriesConfig[string] & { stepPosition?: string }).stepPosition =\n fieldStepPosition;\n }\n\n // Add replaceNullsWithZero if nullValueMode is 'zero'\n if (replaceNullsWithZero !== undefined) {\n (\n seriesConfig[field] as SeriesConfig[string] & { replaceNullsWithZero?: boolean }\n ).replaceNullsWithZero = replaceNullsWithZero;\n }\n });\n\n return seriesConfig;\n};\n\n/**\n * Finds the start and end indices in time series data for a given range.\n * @param xData - Array of time values (can be ISO strings or epoch timestamps)\n * @param startValue - Start value of the range (epoch timestamp)\n * @param endValue - End value of the range (epoch timestamp)\n * @returns Object with startXIndex (first index where time >= startValue) and endXIndex (last index where time <= endValue)\n */\nexport const findRangeIndices = (\n xData: (string | number)[],\n startValue: number,\n endValue: number\n): { startXIndex: number; endXIndex: number } => {\n let startXIndex = -1;\n let endXIndex = -1;\n\n // Convert xData to epoch timestamps if they are ISO strings\n const xDataEpoch = xData.map(val => {\n if (typeof val === 'string') {\n return new Date(val).getTime() / 1000; // Convert to epoch seconds\n }\n return val;\n });\n\n // Find the closest time value >= startValue\n for (let i = 0; i < xDataEpoch.length; i += 1) {\n if (xDataEpoch[i] >= startValue) {\n startXIndex = i;\n break;\n }\n }\n\n // If no value >= startValue found, use the last index (all values are less)\n if (startXIndex === -1 && xDataEpoch.length > 0) {\n startXIndex = xDataEpoch.length - 1;\n }\n\n // Find the closest time value <= endValue\n for (let i = xDataEpoch.length - 1; i >= 0; i -= 1) {\n if (xDataEpoch[i] <= endValue) {\n endXIndex = i;\n break;\n }\n }\n\n // If no value <= endValue found, use the first index (all values are greater)\n if (endXIndex === -1 && xDataEpoch.length > 0) {\n endXIndex = 0;\n }\n\n return { startXIndex, endXIndex };\n};\n", "\nimport * as defaultImport from \"@splunk/visualization-context/FeatureFlagContext\";\nexport * from \"@splunk/visualization-context/FeatureFlagContext\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-schemas\";\nexport * from \"@splunk/visualization-schemas\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import { useContext } from 'react';\nimport FeatureFlagContext from '@splunk/visualization-context/FeatureFlagContext';\nimport { LAYOUT_TYPE } from '@splunk/visualization-schemas';\n\nexport const useTrellisFeatureFlagOn = (): boolean => {\n const context = useContext(FeatureFlagContext) as Record<string, unknown>;\n return Boolean(context?.visualizations_enableTrellis);\n};\n\nexport const useTrellisEnabled = (layoutType = LAYOUT_TYPE.Off): boolean => {\n const trellisFeatureEnabled = useTrellisFeatureFlagOn();\n return trellisFeatureEnabled && layoutType === LAYOUT_TYPE.Trellis;\n};\n", "import * as React from 'react';\nimport styled from 'styled-components';\n\nexport const TRELLIS_TITLE_HEIGHT = 28;\n\nconst TrellisTitleText = styled.div`\n margin-left: 10px;\n margin-right: 10px;\n padding-top: 8px;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n`;\n\nconst TrellisTitleDiv = styled.div<{\n fontColor: string;\n backgroundColor: string;\n}>`\n height: ${TRELLIS_TITLE_HEIGHT}px;\n font-size: 14px;\n font-weight: 700;\n color: ${props => props.fontColor};\n background-color: ${props => props.backgroundColor};\n box-shadow: 0 1px ${props => props.backgroundColor}; // this is added to avoid a 1px gap between title and viz divs that showed up intermittently because of pixel rounding error in chrome.\n`;\n\ninterface TrellisTitleProps {\n fontColor: string;\n backgroundColor: string;\n trellisKey: unknown;\n}\n\nexport const TrellisTitle = (props: TrellisTitleProps) => {\n const titleText = String(props.trellisKey).toString();\n return (\n <TrellisTitleDiv\n fontColor={props.fontColor}\n backgroundColor={props.backgroundColor}\n data-test=\"trellis-title\"\n title={titleText}\n >\n <TrellisTitleText>{titleText}</TrellisTitleText>\n </TrellisTitleDiv>\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport"]
3
+ "sources": ["../src/common/TimeSeriesChartWrapper.tsx", "esm-externals:react", "esm-externals:lodash", "esm-externals:styled-components", "esm-externals:@splunk/visualizations-shared/SizeAwareWrapper", "esm-externals:@splunk/visualization-canvas", "esm-externals:@splunk/visualizations-shared/style", "../src/common/components/VizStyleWrapper.jsx", "esm-externals:@splunk/themes/variables", "esm-externals:@splunk/react-icons/Triangle", "esm-externals:@splunk/visualizations-shared/propUtils", "esm-externals:@splunk/visualizations-shared/simpleXMLOptions", "../src/common/chartingUtils.ts", "esm-externals:@splunk/visualization-context/FeatureFlagContext", "esm-externals:@splunk/visualization-schemas", "../src/common/hooks/useTrellisEnabled.ts", "../src/common/components/TrellisTitle.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nimport { useMemo, useRef } from 'react';\nimport { pick } from 'lodash';\nimport styled from 'styled-components';\nimport SizeAwareWrapper from '@splunk/visualizations-shared/SizeAwareWrapper';\nimport { TimeSeriesChart, RangeSelectionProvider } from '@splunk/visualization-canvas';\nimport { toDimension } from '@splunk/visualizations-shared/style';\nimport type { GenericDataSet } from '@splunk/visualization-canvas/types/types';\nimport VizStyleWrapper from './components/VizStyleWrapper';\nimport { ChartingProps } from './Charting';\nimport {\n convert2DArrayToNumbers,\n filterChartDataFromInternalFields,\n getComputedAxisTitles,\n getFieldName,\n getFieldNames,\n getLegend,\n getSeriesOverrides,\n getXScaleConfig,\n getYScaleConfig,\n getY2ScaleConfig,\n ellipsisAxisTitle,\n getAnnotationsForCanvas,\n triangleEventAnnotationRenderer,\n parseAxisValue,\n parseXAxisLineVisibility,\n findRangeIndices,\n shouldEnableSearchZoom,\n} from './chartingUtils';\nimport { useTrellisEnabled } from './hooks/useTrellisEnabled';\nimport { TrellisTitle, TRELLIS_TITLE_HEIGHT } from './components/TrellisTitle';\n\nconst TimeSeriesChartContainer = styled.div<{\n width: number | string;\n height: number | string;\n}>`\n overflow: hidden;\n ${props => toDimension(pick(props, ['width', 'height']))};\n\n canvas {\n position: absolute !important; // This is needed for canvas element export pdf/png to work correctly\n }\n`;\n\n/**\n * Adds trellis information to event payload\n * @param payload - The event payload object to modify\n * @param trellisKey - The current trellis key value (e.g., \"200\", \"404\")\n * @param trellisSplitBy - The field name being split by (e.g., \"status\")\n */\nexport const appendTrellisToPayload = (\n payload: Record<string, unknown>,\n trellisKey?: string,\n trellisSplitBy?: string\n): Record<string, unknown> => {\n const result = { ...payload };\n if (trellisSplitBy) {\n result['trellis.name'] = trellisSplitBy;\n }\n if (trellisKey) {\n result['trellis.value'] = trellisKey;\n }\n return result;\n};\n\n/**\n * Checks if the mouseover payload has changed compared to the previous payload\n * @param currentPayload - The current event payload\n * @param previousPayload - The previous event payload\n * @returns true if the payload has changed, false otherwise\n */\nexport const hasMouseoverPayloadChanged = (\n currentPayload: Record<string, unknown>,\n previousPayload: Record<string, unknown> | null\n): boolean => {\n if (!previousPayload) {\n return true;\n }\n\n // Check if data point index changed - this is the primary indicator of hovering a different point\n if (currentPayload.index !== previousPayload.index) {\n return true;\n }\n\n // Check if seriesIndex changed\n if (currentPayload.seriesIndex !== previousPayload.seriesIndex) {\n return true;\n }\n\n // Check if trellis fields changed (for trellis mode)\n if (currentPayload['trellis.name'] !== previousPayload['trellis.name']) {\n return true;\n }\n if (currentPayload['trellis.value'] !== previousPayload['trellis.value']) {\n return true;\n }\n\n return false;\n};\n\nexport const handleClick = (chartEvent, onClick, trellisKey?: string, trellisSplitBy?: string) => {\n const payload = {\n ...pick(chartEvent, 'value', 'seriesKey'),\n name: chartEvent.seriesKey,\n };\n delete payload.seriesKey;\n\n // Add row context fields in the format: row.${fieldName}.value\n if (chartEvent.rowContext) {\n Object.assign(\n payload,\n Object.keys(chartEvent.rowContext).reduce((acc, fieldName) => {\n acc[`row.${fieldName}.value`] = chartEvent.rowContext[fieldName];\n return acc;\n }, {})\n );\n }\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n if (onClick) {\n onClick({\n type: 'point.click',\n originalEvent: chartEvent,\n payload: updatedPayload,\n });\n }\n};\n\nexport const handleLegendClick = (chartEvent, onClick, trellisKey?: string, trellisSplitBy?: string) => {\n const payload = {\n name: chartEvent,\n };\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n if (onClick) {\n onClick({\n type: 'legend.click',\n originalEvent: chartEvent,\n payload: updatedPayload,\n });\n }\n};\n\nexport const handleRangeSelection = (\n rangeEvent,\n onSelect,\n chartData,\n trellisKey?: string,\n trellisSplitBy?: string\n) => {\n // Handle undefined range (clearing selection)\n if (!rangeEvent) {\n return;\n }\n\n // Find the indices in the data array that correspond to the start and end timestamps\n const xData = chartData?.columns?.[0] || [];\n const { startXIndex, endXIndex } = findRangeIndices(xData, rangeEvent.start, rangeEvent.end);\n\n const payload = {\n startXIndex,\n startXValue: rangeEvent.start,\n endXIndex,\n endXValue: rangeEvent.end,\n };\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n if (onSelect) {\n onSelect({\n type: 'range.selectBeforeZoom',\n originalEvent: rangeEvent,\n payload: updatedPayload,\n });\n }\n};\n\nexport const handleRangeZoom = (\n rangeEvent,\n onSelect,\n chartData,\n trellisKey?: string,\n trellisSplitBy?: string\n) => {\n // Find the indices in the data array that correspond to the start and end timestamps\n const xData = chartData?.columns?.[0] || [];\n const { startXIndex, endXIndex } = findRangeIndices(xData, rangeEvent.start, rangeEvent.end);\n\n const payload = {\n startXIndex,\n startXValue: rangeEvent.start,\n endXIndex,\n endXValue: rangeEvent.end,\n };\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n if (onSelect) {\n onSelect({\n type: 'range.select',\n originalEvent: rangeEvent,\n payload: updatedPayload,\n });\n }\n};\n\nexport const handleCrosshairChange = (\n chartEvent,\n onPointMouseOver,\n onPointMouseOut,\n trellisKey?: string,\n trellisSplitBy?: string,\n lastPayload = null,\n lastOriginalEvent = null\n) => {\n // Handle mouseout when chartEvent is undefined\n if (!chartEvent) {\n if (onPointMouseOut && lastPayload) {\n onPointMouseOut({\n type: 'point.mouseout',\n originalEvent: lastOriginalEvent,\n payload: lastPayload,\n });\n }\n return { payload: null, originalEvent: null };\n }\n\n // Handle mouseover\n const payload = {\n ...pick(chartEvent, 'value', 'seriesKey', 'time', 'index', 'seriesIndex'),\n name: chartEvent.seriesKey,\n };\n delete payload.seriesKey;\n\n // Add row context fields in the format: row.${fieldName}.value\n if (chartEvent.rowContext) {\n Object.assign(\n payload,\n Object.keys(chartEvent.rowContext).reduce((acc, fieldName) => {\n acc[`row.${fieldName}.value`] = chartEvent.rowContext[fieldName];\n return acc;\n }, {})\n );\n }\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n if (onPointMouseOver) {\n onPointMouseOver({\n type: 'point.mouseover',\n originalEvent: chartEvent,\n payload: updatedPayload,\n });\n }\n\n // Return payload and originalEvent for caller to store\n return { payload: updatedPayload, originalEvent: chartEvent };\n};\n\n/**\n * Helper function to parse array options that may be stringified JSON or already arrays\n */\nexport const parseArrayOption = (\n value: string[] | string | undefined | null\n): string[] | undefined | null => {\n if (Array.isArray(value)) {\n return value;\n }\n if (value) {\n return JSON.parse(value);\n }\n return undefined;\n};\n\nconst getAreaOpacityForCanvas = (areaOpacity: number | undefined | null): number | undefined | null =>\n // Preserve legacy visualizations behavior where area opacity is squared to match charting output.\n areaOpacity !== undefined && areaOpacity !== null ? areaOpacity ** 2 : areaOpacity;\n\nconst parseTickIntervalOption = (\n simpleXMLValue?: string | number,\n canvasValue?: number\n): number | undefined => {\n if (simpleXMLValue) return Number(simpleXMLValue);\n if (canvasValue) return Number(canvasValue);\n return undefined;\n};\n\nconst getYAxisTitles = ({\n y2Enabled,\n yFields,\n y2Fields,\n overlayFields,\n yAxisTitleText,\n yAxisTitleVisibility,\n y2AxisTitleText,\n y2AxisTitleVisibility,\n containerHeight,\n}: {\n y2Enabled: boolean;\n yFields: string[];\n y2Fields: string[];\n overlayFields: string[];\n yAxisTitleText?: string;\n yAxisTitleVisibility?: 'show' | 'collapsed';\n y2AxisTitleText?: string;\n y2AxisTitleVisibility?: 'show' | 'collapsed';\n containerHeight: number;\n}) => {\n const yFieldsForTitle = y2Enabled ? yFields.filter(field => !y2Fields.includes(field)) : yFields;\n const fieldsForY2Axis = y2Fields.length > 0 ? y2Fields : overlayFields;\n\n const yAxisTitle = ellipsisAxisTitle(\n getComputedAxisTitles(yAxisTitleText, yFieldsForTitle, yAxisTitleVisibility),\n containerHeight\n );\n const y2AxisTitle = ellipsisAxisTitle(\n getComputedAxisTitles(y2AxisTitleText, fieldsForY2Axis, y2AxisTitleVisibility),\n containerHeight\n );\n\n return { yAxisTitle, y2AxisTitle };\n};\n\nconst TimeSeriesChartWrapper = (props: ChartingProps) => {\n const {\n width,\n height,\n chartData,\n options,\n userLocale,\n annotationX,\n annotationLabel,\n annotationColor,\n legendDisplay,\n markerDisplay,\n onClick,\n onPointMouseOver,\n onPointMouseOut,\n onSelect,\n splitByLayout,\n trellisKey,\n trellisSplitBy,\n backgroundColor,\n defaultFontColor,\n additionalTooltipValues,\n // Extract axis line visibility options from props\n xAxisLineVisibility,\n yAxisLineVisibility,\n y2AxisLineVisibility,\n // Extract showYAxisWithZero directly from props for accelerated render mode\n showYAxisWithZero: showYAxisWithZeroFromProps,\n showY2AxisWithZero: showY2AxisWithZeroFromProps,\n ...otherOptions\n } = props as ChartingProps & {\n showYAxisWithZero?: boolean;\n showY2AxisWithZero?: boolean;\n xAxisLineVisibility?: string;\n yAxisLineVisibility?: string;\n y2AxisLineVisibility?: string;\n };\n const { eventHandlers, xField: xFieldFromProps } = otherOptions;\n const trellisEnabled = useTrellisEnabled(splitByLayout);\n const {\n backgroundColor: bgColorFromOptions,\n seriesColors: seriesColorsStr,\n fieldColors,\n legendLabels: legendLabelsStr,\n legendMode,\n legendTruncation,\n 'axisTitleX.text': xAxisTitleText,\n 'axisTitleY.text': yAxisTitleText,\n 'axisTitleY2.text': y2AxisTitleText,\n 'axisTitleX.visibility': xAxisTitleVisibility,\n 'axisTitleY.visibility': yAxisTitleVisibility,\n 'axisTitleY2.visibility': y2AxisTitleVisibility,\n 'axisLabelsX.majorLabelVisibility': xAxisLabelVisibility,\n 'axisLabelsX.majorLabelStyle.rotation': xAxisLabelRotation,\n 'axisLabelsX.maxLabelParts': xAxisMaxLabelParts,\n 'axisLabelsY.majorLabelVisibility': yAxisLabelVisibility,\n 'axisLabelsY.majorUnit': yAxisMajorUnitFromSimpleXML,\n 'axisLabelsY2.majorLabelVisibility': y2AxisLabelVisibility,\n 'axisLabelsY2.majorUnit': y2AxisMajorUnitFromSimpleXML,\n 'axisY.abbreviation': yAxisAbbreviation,\n 'axisY.scale': yAxisScale,\n 'axisY2.abbreviation': y2AxisAbbreviation,\n 'axisY2.fields': y2FieldsStr,\n 'axisY2.scale': y2AxisScale,\n 'axisY2.enabled': y2Enabled,\n 'axisLabelsY2.integerUnits': y2IntegerUnits,\n 'chart.overlayFields': overlayFieldsStr,\n 'chart.nullValueMode': nullValueMode,\n 'chart.showDataLabels': showDataLabels,\n 'chart.showLines': showLines,\n 'chart.stackMode': stackMode,\n lineWidth,\n lineDashStyle,\n fieldDashStyles: lineDashStylesByFieldStr,\n stepPosition,\n fieldStepPositions: stepPositionsByFieldStr,\n yAxisMin: yAxisMinRaw,\n yAxisMax: yAxisMaxRaw,\n y2AxisMin: y2AxisMinRaw,\n y2AxisMax: y2AxisMaxRaw,\n showXMajorGridLines,\n showYMajorGridLines,\n showY2MajorGridLines,\n showYMinorGridLines,\n showY2MinorGridLines,\n showLineSmoothing,\n xAxisMajorTickVisibility,\n xAxisMajorTickSize,\n yAxisMajorTickVisibility,\n y2AxisMajorTickVisibility,\n yAxisMajorTickSize,\n y2AxisMajorTickSize,\n yAxisMajorTickInterval,\n y2AxisMajorTickInterval,\n yAxisMinorTickVisibility,\n y2AxisMinorTickVisibility,\n yAxisMinorTickSize,\n y2AxisMinorTickSize,\n showYAxisWithZero: showYAxisWithZeroFromOptions,\n showY2AxisWithZero: showY2AxisWithZeroFromOptions,\n // area only props\n areaFillOpacity: areaOpacity,\n chart: chartType,\n } = options;\n\n // Map showDataLabels back to dataValuesDisplay format for canvas mode\n const dataValuesDisplay = showDataLabels === 'none' ? 'off' : showDataLabels;\n\n // Get showYAxisWithZero from top-level props first (accelerated render mode),\n // then fall back to options object (non-accelerated render mode)\n const showYAxisWithZero = showYAxisWithZeroFromProps ?? showYAxisWithZeroFromOptions;\n const showY2AxisWithZero = showY2AxisWithZeroFromProps ?? showY2AxisWithZeroFromOptions;\n\n // Convert visibility to boolean for canvas renderer\n // X-axis ticks default to true (shown) when 'auto' or 'show', false when 'hide'\n const showXMajorTicks = xAxisMajorTickVisibility !== 'hide';\n const showYMajorTicks = yAxisMajorTickVisibility === 'show';\n const showY2MajorTicks = y2AxisMajorTickVisibility === 'show';\n const showYMinorTicks = yAxisMinorTickVisibility === 'show';\n const showY2MinorTicks = y2AxisMinorTickVisibility === 'show';\n // X-axis line defaults to true (shown) for backwards compatibility\n const showXAxisLine = parseXAxisLineVisibility(xAxisLineVisibility);\n const showYAxisLine = yAxisLineVisibility === 'show';\n const showY2AxisLine = y2AxisLineVisibility === 'show';\n\n // Parse axis values - convert strings to numbers\n const yAxisMin = parseAxisValue(yAxisMinRaw);\n const yAxisMax = parseAxisValue(yAxisMaxRaw);\n const y2AxisMin = parseAxisValue(y2AxisMinRaw);\n const y2AxisMax = parseAxisValue(y2AxisMaxRaw);\n\n // Parse tick interval and size values - convert strings to numbers\n // Priority: SimpleXML props (from transformed options) > canvas-specific props\n const yAxisMajorTickIntervalNum = parseTickIntervalOption(\n yAxisMajorUnitFromSimpleXML,\n yAxisMajorTickInterval\n );\n const y2AxisMajorTickIntervalNum = parseTickIntervalOption(\n y2AxisMajorUnitFromSimpleXML,\n y2AxisMajorTickInterval\n );\n const xAxisMajorTickSizeNum = xAxisMajorTickSize != null ? Number(xAxisMajorTickSize) : undefined;\n const yAxisMajorTickSizeNum = yAxisMajorTickSize != null ? Number(yAxisMajorTickSize) : undefined;\n const y2AxisMajorTickSizeNum = y2AxisMajorTickSize != null ? Number(y2AxisMajorTickSize) : undefined;\n const yAxisMinorTickSizeNum = yAxisMinorTickSize != null ? Number(yAxisMinorTickSize) : undefined;\n const y2AxisMinorTickSizeNum = y2AxisMinorTickSize != null ? Number(y2AxisMinorTickSize) : undefined;\n // Preserve legacy visualizations behavior where area opacity is squared to match charting output.\n const areaOpacityForCanvas = getAreaOpacityForCanvas(areaOpacity);\n const seriesColors = seriesColorsStr ? JSON.parse(seriesColorsStr) : undefined;\n const seriesColorsByField = fieldColors ? JSON.parse(fieldColors) : undefined;\n const lineDashStylesByField = lineDashStylesByFieldStr ? JSON.parse(lineDashStylesByFieldStr) : undefined;\n const stepPositionsByField = stepPositionsByFieldStr ? JSON.parse(stepPositionsByFieldStr) : undefined;\n const legendLabels = parseArrayOption(legendLabelsStr);\n const bgColor = backgroundColor || bgColorFromOptions;\n const [containerWidth, setContainerWidth] = React.useState(Number(props.width));\n const [containerHeight, setContainerHeight] = React.useState(Number(props.height));\n const cachedHandleResize = React.useCallback((w, h) => {\n setContainerWidth(w);\n setContainerHeight(h);\n }, []);\n const filteredChartData = filterChartDataFromInternalFields({\n fields: chartData.fields,\n columns: chartData.seriesList,\n });\n\n const xField = getFieldName(filteredChartData.fields[0]);\n const yFields = getFieldNames(\n filteredChartData.fields.length > 1 ? filteredChartData.fields.slice(1) : []\n );\n const y2Fields = useMemo(\n () => (y2FieldsStr ? y2FieldsStr.split(',').map(f => f.trim()) : []),\n [y2FieldsStr]\n );\n const overlayFields = useMemo(\n () => (overlayFieldsStr ? overlayFieldsStr.split(',').map(f => f.trim()) : []),\n [overlayFieldsStr]\n );\n\n let xAxisTitle = getComputedAxisTitles(xAxisTitleText, [xField], xAxisTitleVisibility);\n xAxisTitle = ellipsisAxisTitle(xAxisTitle, containerWidth);\n const { yAxisTitle, y2AxisTitle } = getYAxisTitles({\n y2Enabled,\n yFields,\n y2Fields,\n overlayFields,\n yAxisTitleText,\n yAxisTitleVisibility,\n y2AxisTitleText,\n y2AxisTitleVisibility,\n containerHeight,\n });\n\n const xScaleConfig = useMemo(\n () => getXScaleConfig(xAxisTitle, xAxisLabelVisibility, xAxisLabelRotation),\n [xAxisTitle, xAxisLabelVisibility, xAxisLabelRotation]\n );\n const isStacked100 = stackMode === 'stacked100';\n const yScaleConfig = useMemo(\n () => {\n const config = getYScaleConfig(\n yAxisTitle,\n yAxisAbbreviation,\n yAxisScale,\n yAxisLabelVisibility,\n yAxisMin,\n yAxisMax\n );\n // For stacked100, override tick formatter to show percentage labels (0-100%)\n // uPlot stores stacked100 values as 0-1 fractions after processPercentStacking\n if (isStacked100) {\n config.y.tickFmt = (v): string => `${Math.round(v * 100)}%`;\n config.y.range = () => [0, 1];\n }\n return config;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [yAxisTitle, yAxisAbbreviation, yAxisScale, yAxisLabelVisibility, yAxisMin, yAxisMax, isStacked100]\n );\n const y2ScaleConfig = useMemo(() => {\n if (y2Enabled) {\n return getY2ScaleConfig(\n y2AxisTitle,\n y2AxisAbbreviation,\n y2AxisScale,\n y2IntegerUnits,\n y2AxisLabelVisibility,\n y2AxisMin,\n y2AxisMax\n );\n }\n return {};\n }, [\n y2Enabled,\n y2AxisTitle,\n y2AxisAbbreviation,\n y2AxisScale,\n y2IntegerUnits,\n y2AxisLabelVisibility,\n y2AxisMin,\n y2AxisMax,\n ]);\n const uplotContainerElement = useRef(null);\n\n const seriesDataFormatted = [\n filteredChartData.columns[0],\n ...convert2DArrayToNumbers(filteredChartData.columns.slice(1)),\n ];\n chartData.fields = filteredChartData.fields;\n chartData.columns = seriesDataFormatted;\n\n // Map SimpleXML stackMode value ('default' | 'stacked' | 'stacked100') to getSeriesOverrides param\n const normalizedStackMode = stackMode === 'stacked' || stackMode === 'stacked100' ? stackMode : 'auto';\n\n // Memoize seriesOverrides to prevent unnecessary recreations\n const seriesOverrides = useMemo(\n () =>\n getSeriesOverrides({\n yfields: yFields,\n y2fields: y2Fields,\n lineWidth,\n overlayFields,\n y2Enabled,\n nullValueMode,\n markerDisplay,\n lineDashStyle,\n lineDashStylesByField,\n stepPosition,\n stepPositionsByField,\n type: chartType,\n stackMode: normalizedStackMode,\n showLines,\n }),\n [\n yFields,\n y2Fields,\n lineWidth,\n overlayFields,\n y2Enabled,\n nullValueMode,\n markerDisplay,\n lineDashStyle,\n lineDashStylesByField,\n stepPosition,\n stepPositionsByField,\n chartType,\n normalizedStackMode,\n showLines,\n ]\n );\n\n // Memoize annotations to prevent unnecessary recreations\n const chartingEventAnnotations = useMemo(\n () =>\n getAnnotationsForCanvas({\n annotationX,\n annotationColor,\n annotationLabel,\n }),\n [annotationX, annotationColor, annotationLabel]\n );\n\n // Memoize scaleConfig to prevent unnecessary recreations\n const scaleConfig = useMemo(\n () => ({ ...xScaleConfig, ...yScaleConfig, ...y2ScaleConfig }),\n [xScaleConfig, yScaleConfig, y2ScaleConfig]\n );\n\n // Memoize legend configuration\n // In seriesCompare mode, force the legend to the right side so that the legend's\n // fixed width (needed to prevent jitter when hover values appear/disappear) doesn't\n // affect layouts that would otherwise place it on the left.\n const isSeriesCompare = legendMode === 'seriesCompare';\n const legend = useMemo(\n () =>\n getLegend({\n legendDisplay: isSeriesCompare && legendDisplay !== 'off' ? 'right' : legendDisplay,\n isSeriesCompare,\n legendTruncation,\n }),\n [legendDisplay, isSeriesCompare, legendTruncation]\n );\n\n // Memoize click handlers to avoid recreating them on every render\n const handleChartClick = React.useCallback(\n event => {\n // Only invoke if onClick is defined to avoid unnecessary work\n if (onClick) {\n handleClick(event, onClick, trellisKey, trellisSplitBy);\n }\n },\n [onClick, trellisKey, trellisSplitBy]\n );\n\n const handleChartLegendClick = React.useCallback(\n event => {\n // Only invoke if onClick is defined to avoid unnecessary work\n if (onClick) {\n handleLegendClick(event, onClick, trellisKey, trellisSplitBy);\n }\n },\n [onClick, trellisKey, trellisSplitBy]\n );\n\n const handleChartRangeSelection = React.useCallback(\n range => {\n // Only invoke if onSelect is defined to avoid unnecessary work\n if (onSelect) {\n handleRangeSelection(range, onSelect, chartData, trellisKey, trellisSplitBy);\n }\n // Always allow range selection UI to appear, even if onSelect is undefined\n },\n [onSelect, chartData, trellisKey, trellisSplitBy]\n );\n\n const handleChartRangeZoom = React.useCallback(\n range => {\n // Only invoke if onSelect is defined to avoid unnecessary work\n if (onSelect) {\n handleRangeZoom(range, onSelect, chartData, trellisKey, trellisSplitBy);\n }\n },\n [onSelect, chartData, trellisKey, trellisSplitBy]\n );\n\n // Determine if search zoom should be enabled based on eventHandlers and xField\n // Use xFieldFromProps if available, otherwise fall back to computed xField from chartData\n const xFieldToUse = xFieldFromProps || xField;\n const enableSearchZoom = React.useMemo(\n () => shouldEnableSearchZoom(eventHandlers, xFieldToUse),\n [eventHandlers, xFieldToUse]\n );\n\n // Store the last payload and originalEvent to return on mouseout\n const lastPayloadRef = React.useRef<Record<string, any> | null>(null);\n const lastOriginalEventRef = React.useRef<any>(null);\n // Store the previous mouseover payload to check for changes\n const previousMouseoverPayloadRef = React.useRef<Record<string, unknown> | null>(null);\n // Store additionalTooltipValues in a ref to avoid chart remounts when it changes\n // The chart reads from this ref, so changes update the tooltip without remounting\n const additionalTooltipValuesRef = React.useRef(additionalTooltipValues);\n React.useEffect(() => {\n additionalTooltipValuesRef.current = additionalTooltipValues;\n }, [additionalTooltipValues]);\n\n const handleCrosshairMouseout = React.useCallback(() => {\n if (onPointMouseOut && lastPayloadRef.current) {\n onPointMouseOut({\n type: 'point.mouseout',\n originalEvent: lastOriginalEventRef.current,\n payload: lastPayloadRef.current,\n });\n }\n previousMouseoverPayloadRef.current = null;\n }, [onPointMouseOut]);\n\n const handleChartCrosshairChange = React.useCallback(\n event => {\n // Only invoke if onPointMouseOver or onPointMouseOut is defined to avoid unnecessary work\n if (!onPointMouseOver && !onPointMouseOut) {\n return;\n }\n\n // Handle mouseout when event is undefined\n if (!event) {\n handleCrosshairMouseout();\n return;\n }\n\n // Handle mouseover\n const payload = {\n ...pick(event, 'value', 'seriesKey', 'time', 'index', 'seriesIndex'),\n name: event.seriesKey,\n };\n delete payload.seriesKey;\n\n // Add row context fields in the format: row.${fieldName}.value\n if (event.rowContext) {\n Object.assign(\n payload,\n Object.keys(event.rowContext).reduce((acc, fieldName) => {\n acc[`row.${fieldName}.value`] = event.rowContext[fieldName];\n return acc;\n }, {})\n );\n }\n\n const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);\n\n // Check if the payload has actually changed to avoid emitting duplicate events\n if (!hasMouseoverPayloadChanged(updatedPayload, previousMouseoverPayloadRef.current)) {\n return;\n }\n\n // Store payload and originalEvent for mouseout\n lastPayloadRef.current = updatedPayload;\n lastOriginalEventRef.current = event;\n // Store current payload for next comparison\n previousMouseoverPayloadRef.current = { ...updatedPayload };\n\n if (onPointMouseOver) {\n onPointMouseOver({\n type: 'point.mouseover',\n originalEvent: event,\n payload: updatedPayload,\n });\n }\n },\n [onPointMouseOver, onPointMouseOut, trellisKey, trellisSplitBy, handleCrosshairMouseout]\n );\n\n // Create a key to reset RangeSelectionProvider when data changes\n const dataKey = `${chartData.columns[0]?.[0]}-${chartData.columns[0]?.[chartData.columns[0].length - 1]}-${chartData.columns[0]?.length}`;\n\n const memoizedChart = useMemo(() => {\n // Always pass zoom handler when onSelect exists, serverSideZoom controls behavior\n const computedOnRangeZoom = onSelect ? handleChartRangeZoom : undefined;\n\n return (\n <RangeSelectionProvider key={dataKey}>\n <TimeSeriesChart\n data={chartData as GenericDataSet}\n width={containerWidth}\n height={containerHeight}\n seriesColors={seriesColors}\n seriesColorsByField={seriesColorsByField}\n seriesConfig={seriesOverrides}\n legend={legend}\n legendLabels={legendLabels}\n legendTruncation={legendTruncation}\n isSeriesCompare={legendMode === 'seriesCompare'}\n maxSeriesFocus={legendMode === 'seriesCompare' ? 0 : undefined}\n scaleConfig={scaleConfig}\n timestampFormat=\"expanded\"\n onCrosshairClick={onClick ? handleChartClick : undefined}\n onCrosshairChange={\n onPointMouseOver || onPointMouseOut ? handleChartCrosshairChange : undefined\n }\n onSeriesClick={onClick ? handleChartLegendClick : undefined}\n onRangeSelection={handleChartRangeSelection}\n onRangeZoom={computedOnRangeZoom}\n serverSideZoom={enableSearchZoom}\n userLocale={userLocale}\n events={chartingEventAnnotations}\n eventsConfig={{ renderer: triangleEventAnnotationRenderer }}\n additionalTooltipValuesRef={additionalTooltipValuesRef}\n showXMajorGridLines={showXMajorGridLines}\n showYMajorGridLines={showYMajorGridLines}\n showY2MajorGridLines={showY2MajorGridLines}\n showYMinorGridLines={showYMinorGridLines}\n showY2MinorGridLines={showY2MinorGridLines}\n showLineSmoothing={showLineSmoothing}\n dataValuesDisplay={dataValuesDisplay}\n showXMajorTicks={showXMajorTicks}\n xAxisMajorTickSize={xAxisMajorTickSizeNum}\n showYMajorTicks={showYMajorTicks}\n showY2MajorTicks={showY2MajorTicks}\n yAxisMajorTickSize={yAxisMajorTickSizeNum}\n y2AxisMajorTickSize={y2AxisMajorTickSizeNum}\n yAxisMajorTickInterval={yAxisMajorTickIntervalNum}\n y2AxisMajorTickInterval={y2AxisMajorTickIntervalNum}\n showYMinorTicks={showYMinorTicks}\n showY2MinorTicks={showY2MinorTicks}\n yAxisMinorTickSize={yAxisMinorTickSizeNum}\n y2AxisMinorTickSize={y2AxisMinorTickSizeNum}\n showYAxisWithZero={showYAxisWithZero}\n showY2AxisWithZero={showY2AxisWithZero}\n showXAxisLine={showXAxisLine}\n showYAxisLine={showYAxisLine}\n showY2AxisLine={showY2AxisLine}\n xAxisMaxLabelParts={xAxisMaxLabelParts}\n areaOpacity={areaOpacityForCanvas}\n />\n </RangeSelectionProvider>\n );\n // Note: additionalTooltipValues passed via ref to avoid chart remount when switching stories.\n // The ref is updated via useEffect, so tooltip gets latest values without remounting chart.\n }, [\n onSelect,\n handleChartRangeZoom,\n dataKey,\n chartData,\n containerWidth,\n containerHeight,\n seriesColors,\n seriesColorsByField,\n seriesOverrides,\n legend,\n legendLabels,\n legendTruncation,\n scaleConfig,\n onClick,\n handleChartClick,\n onPointMouseOver,\n onPointMouseOut,\n handleChartCrosshairChange,\n handleChartLegendClick,\n handleChartRangeSelection,\n enableSearchZoom,\n userLocale,\n chartingEventAnnotations,\n showXMajorGridLines,\n showYMajorGridLines,\n showY2MajorGridLines,\n showYMinorGridLines,\n showY2MinorGridLines,\n showLineSmoothing,\n dataValuesDisplay,\n showXMajorTicks,\n xAxisMajorTickSizeNum,\n showYMajorTicks,\n showY2MajorTicks,\n yAxisMajorTickSizeNum,\n y2AxisMajorTickSizeNum,\n yAxisMajorTickIntervalNum,\n y2AxisMajorTickIntervalNum,\n showYMinorTicks,\n showY2MinorTicks,\n yAxisMinorTickSizeNum,\n y2AxisMinorTickSizeNum,\n showYAxisWithZero,\n showY2AxisWithZero,\n showXAxisLine,\n showYAxisLine,\n showY2AxisLine,\n legendMode,\n xAxisMaxLabelParts,\n areaOpacityForCanvas,\n ]);\n\n const memoizedVisualization = useMemo(() => {\n return <VizStyleWrapper backgroundColor={bgColor}>{memoizedChart}</VizStyleWrapper>;\n }, [bgColor, memoizedChart]);\n\n return (\n <>\n {trellisEnabled && (\n <TrellisTitle\n trellisKey={trellisKey}\n backgroundColor={bgColor}\n fontColor={defaultFontColor}\n />\n )}\n <TimeSeriesChartContainer\n height={trellisEnabled ? Number(height) - TRELLIS_TITLE_HEIGHT : height}\n width={width}\n ref={uplotContainerElement}\n data-test=\"timeseries-chart-wrapper\"\n >\n <SizeAwareWrapper width={width} height={height} onResize={cachedHandleResize} />\n {memoizedVisualization}\n </TimeSeriesChartContainer>\n </>\n );\n};\n\nexport default TimeSeriesChartWrapper;\n", "\nimport * as defaultImport from \"react\";\nexport * from \"react\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"lodash\";\nexport * from \"lodash\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"styled-components\";\nexport * from \"styled-components\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/SizeAwareWrapper\";\nexport * from \"@splunk/visualizations-shared/SizeAwareWrapper\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-canvas\";\nexport * from \"@splunk/visualization-canvas\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/style\";\nexport * from \"@splunk/visualizations-shared/style\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import styled from 'styled-components';\n\nconst VizStyleWrapper = styled.div.attrs(({ dataTestKey }) => ({\n 'data-test': dataTestKey,\n 'data-testid': dataTestKey,\n}))`\n display: flex;\n justify-content: center;\n flex-direction: column;\n width: 100%;\n height: 100%;\n background-color: ${props => props.backgroundColor};\n`;\n\nVizStyleWrapper.displayName = 'VizStyleWrapper';\n\nexport default VizStyleWrapper;\n", "\nimport * as defaultImport from \"@splunk/themes/variables\";\nexport * from \"@splunk/themes/variables\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/Triangle\";\nexport * from \"@splunk/react-icons/Triangle\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/propUtils\";\nexport * from \"@splunk/visualizations-shared/propUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/simpleXMLOptions\";\nexport * from \"@splunk/visualizations-shared/simpleXMLOptions\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import { has, isArray, isUndefined } from 'lodash';\nimport React from 'react';\nimport styled from 'styled-components';\nimport variables from '@splunk/themes/variables';\nimport Triangle from '@splunk/react-icons/Triangle';\nimport { adjustOptionsToSchema } from '@splunk/visualizations-shared/propUtils';\nimport { getSimpleXMLOptionsForProps } from '@splunk/visualizations-shared/simpleXMLOptions';\nimport {\n BottomLegendFactory,\n Legend,\n SideLegendFactory,\n LeftLegendFactory,\n TopLegendFactory,\n ScaleConfig,\n shortenNumber,\n SeriesConfig,\n EventAnnotation,\n EventAnnotationRendererProps,\n} from '@splunk/visualization-canvas';\nimport type { LegendTruncation } from '@splunk/visualization-canvas';\nimport type { JsonColumnData } from './interfaces/DataSource';\n\ninterface ChartOptions {\n [key: string]: any;\n}\n\ninterface TransformAxisChartOptionsParams {\n originalOptions: Record<string, any>;\n optionsSchema: Record<string, any>;\n chart: string;\n convertToSCProps: (options: Record<string, any>) => Record<string, any>;\n preservedProps: string[];\n}\n\nexport const SHARED_AXIS_CHART_CANVAS_SPECIFIC_PROPS = [\n 'yAxisMin',\n 'yAxisMax',\n 'y2AxisMin',\n 'y2AxisMax',\n 'showXMajorGridLines',\n 'showYMajorGridLines',\n 'showY2MajorGridLines',\n 'showYMinorGridLines',\n 'showY2MinorGridLines',\n 'xAxisMajorTickVisibility',\n 'xAxisMajorTickSize',\n 'yAxisMajorTickVisibility',\n 'y2AxisMajorTickVisibility',\n 'yAxisMajorTickSize',\n 'y2AxisMajorTickSize',\n 'yAxisMinorTickVisibility',\n 'y2AxisMinorTickVisibility',\n 'yAxisMinorTickSize',\n 'y2AxisMinorTickSize',\n 'legendMode',\n 'legendTruncation',\n];\n\nexport const transformAxisChartOptions = ({\n originalOptions,\n optionsSchema,\n chart,\n convertToSCProps,\n preservedProps,\n}: TransformAxisChartOptionsParams): Record<string, any> => {\n const returnOptions = adjustOptionsToSchema(originalOptions, optionsSchema);\n const convertedOptions = convertToSCProps(returnOptions);\n const transformed = {\n ...getSimpleXMLOptionsForProps(convertedOptions),\n chart,\n };\n\n const preserved = preservedProps.reduce(\n (acc, prop) => {\n if (returnOptions[prop] !== undefined) {\n acc[prop] = returnOptions[prop];\n }\n return acc;\n },\n {} as Record<string, any>\n );\n\n // Preserve legendLabels as stringified JSON (converted in convertTo*SCProperties)\n if (convertedOptions.legendLabels !== undefined) {\n preserved.legendLabels = convertedOptions.legendLabels;\n }\n\n return { ...transformed, ...preserved };\n};\n\nexport const DEFAULT_LINE_WIDTH = 2;\n/**\n * Get formatted annotations - highcharts expects annotations in a specific format\n * @method getAnnotations\n * @param {Object} options\n * @param {Array} options.annotationX\n * @param {Array} options.annotationColor\n * @param {Array} options.annotationLabel\n * @returns {Array}\n */\nexport const getAnnotations = ({ annotationX, annotationColor, annotationLabel }) =>\n annotationX?.length\n ? annotationX.map((timestamp, i) => ({\n color: annotationColor?.[i],\n label: annotationLabel?.[i],\n time: timestamp,\n }))\n : [];\n\n/**\n * Get formatted annotations for canvas - viz-canvas timeseries expects annotations in a specific format\n * @method getAnnotationsForCanvas\n * @param {Object} options\n * @param {Array} options.annotationX\n * @param {Array} options.annotationColor\n * @param {Array} options.annotationLabel\n * @returns {Array}\n */\nexport const getAnnotationsForCanvas = ({\n annotationX,\n annotationColor,\n annotationLabel,\n}): EventAnnotation[] =>\n annotationX?.length\n ? annotationX.map((timestamp, i) => ({\n key: annotationLabel?.[i],\n time: timestamp,\n color: annotationColor?.[i],\n }))\n : [];\n\n/**\n * Styled Triangle component for event annotations with default severityColorNotice\n */\nconst StyledTriangle = styled(Triangle)<{ eventColor?: string }>`\n color: ${props => props.eventColor || variables.severityColorNotice(props)};\n`;\n\n/**\n * Custom event annotation renderer using Triangle icon from @splunk/react-icons\n * @method triangleEventAnnotationRenderer\n * @param {EventAnnotationRendererProps} props\n * @returns {ReactElement}\n */\nexport const triangleEventAnnotationRenderer: React.FC<EventAnnotationRendererProps> = ({\n event,\n dimensions,\n}) => {\n const eventWithColor = event as EventAnnotation & { color?: string };\n return React.createElement(StyledTriangle, {\n width: `${dimensions.width}px`,\n height: `${dimensions.height}px`,\n viewBox: '0 0 24 24',\n variant: 'filled',\n eventColor: eventWithColor.color,\n });\n};\n\n/**\n * Truncate the result set to given limit\n * @method truncateData\n * @param {Object} dataSet - dataSources.primary.data\n * @param {Number|String} truncationLimit - options['chart.resultTruncationLimit']\n * @returns {Object}\n */\nexport const truncateData = (dataSet, truncationLimit): Record<string, any[]> => {\n if (!dataSet) {\n return null;\n }\n\n const limit = parseInt(truncationLimit, 10);\n if (!limit || limit <= 0) {\n return dataSet;\n }\n\n const truncatedData: Record<string, Array<string[] | number[]>> = {\n ...dataSet,\n };\n truncatedData.columns = truncatedData.columns.map(columnData =>\n columnData && Array.isArray(columnData) ? columnData.slice(0, limit) : columnData\n );\n return truncatedData;\n};\n\n/**\n * Helper method to update the option values into the values that SC accepts\n * @method mapToValues\n * @param {Object} options\n * @returns {Object}\n */\nexport const mapToValues = (optionValuesSCMapping: Record<string, any>) => options => {\n const convertedOptions: Record<string, any> = { ...options };\n Object.keys(optionValuesSCMapping).forEach(key => {\n if (has(options, key)) {\n const updatedValue = optionValuesSCMapping[key][options[key]];\n if (!isUndefined(updatedValue)) {\n convertedOptions[key] = updatedValue;\n }\n }\n });\n return convertedOptions;\n};\n\ninterface Y2AxisOptions extends ChartOptions {\n y2Fields?: string | string[];\n}\n\n/**\n * Helper method to process options related to y2Fields\n * @method convertY2AxisOptions\n * @param {Object} originalOptions\n * @returns {Object}\n */\nexport const convertY2AxisOptions = ({\n y2Fields,\n ...originalOptions\n}: Y2AxisOptions): Record<string, any> => {\n const convertedOptions: Record<string, any> = {\n ...originalOptions,\n };\n if (y2Fields) {\n convertedOptions['axisY2.enabled'] = true;\n convertedOptions['axisY2.fields'] = isArray(y2Fields)\n ? y2Fields.filter(name => name).join(',')\n : y2Fields;\n }\n return convertedOptions;\n};\n\n/**\n * Helper method to format value for overlayFields\n * @method convertOverlayFields\n * @param {Object} originalOptions\n * @returns {Object}\n */\nexport const convertOverlayFields = (originalOptions: ChartOptions): ChartOptions => {\n const convertedOptions: ChartOptions = {\n ...originalOptions,\n };\n const { overlayFields } = originalOptions;\n if (overlayFields) {\n convertedOptions.overlayFields = Array.isArray(overlayFields)\n ? overlayFields\n .filter(field => field)\n .map(field => field.trim())\n .join(',')\n : overlayFields;\n }\n return convertedOptions;\n};\n\n/**\n * checks whether data is multi series data\n * @param {array} data array\n * @return {Boolean}\n */\nexport const isMultiSeriesData = (data: string[] | string[][]): boolean =>\n Array.isArray(data) && Array.isArray(data[0]);\n/**\n * checks whether data is multi series data and returns value as array\n * @param {array} data array\n * @param {*} value to return as array\n * @return {array}\n */\nexport const toArrayForSeries = (data, value): any[] => {\n if (isMultiSeriesData(data)) {\n return Array.isArray(value) ? value : [value];\n }\n return [value];\n};\ninterface ConstructFieldsAndColumnsParams {\n x: string[];\n y: string[] | string[][];\n xField: string;\n yFields: string | string[];\n y2?: string[] | string[][];\n y2Fields?: string | string[];\n}\nexport const constructFieldsAndColumns = ({\n x = [],\n y = [],\n xField,\n yFields,\n y2,\n y2Fields,\n}: ConstructFieldsAndColumnsParams): JsonColumnData => {\n const columns = [x.map(String), ...toArrayForSeries(y, y).map(series => series.map(String))];\n const yFieldsArray = toArrayForSeries(y, yFields);\n const fields = [{ name: xField }, ...yFieldsArray.map(field => ({ name: field }))];\n // splunk-charting requires y2 to be part of columns\n // when y & y2 options are configured with different (mutually exclusive) series\n // y2 columns need to be added to columns\n if (y2Fields) {\n const y2FieldsArray = toArrayForSeries(y2, y2Fields);\n const y2AsArray = toArrayForSeries(y2, y2).map(series => series?.map(String));\n y2FieldsArray.forEach((y2Field, index) => {\n if (yFieldsArray.indexOf(y2Field) === -1 && y2AsArray[index]) {\n fields.push({\n name: y2Field,\n });\n columns.push(y2AsArray[index]);\n }\n });\n }\n return {\n columns,\n fields,\n };\n};\n\nexport function constructAdditionalTooltipFieldsMap({ fields, columns, additionalTooltipFields }) {\n const map = {};\n\n additionalTooltipFields?.forEach(fieldName => {\n const index = fields.findIndex(f => f.name === fieldName);\n if (index !== -1) {\n map[fieldName] = columns[index];\n }\n });\n\n return map;\n}\n\n/**\n * Extracts additional tooltip values from columns and fields into an array of objects.\n * Each object in the array represents the values at a specific data point index.\n * This follows the same pattern used by Timeline visualization.\n *\n * @param columns - Array of column data\n * @param fields - Array of field definitions with name property\n * @param additionalTooltipFields - Array of field names to extract\n * @returns Array of objects, where each object maps field names to values at that index\n */\n// Type alias for a single tooltip field value record\ntype TooltipFieldRecord = Record<string, string | number | null>;\n\nexport function extractAdditionalTooltipValues(\n columns: (string | number | null)[][],\n fields: { name: string }[],\n additionalTooltipFields: string[]\n): TooltipFieldRecord[] {\n if (!additionalTooltipFields?.length || !columns?.length || !fields?.length) {\n return [];\n }\n\n // Create a mapping of field names to their column indices\n const fieldIndexMap = fields.reduce<Record<string, number>>((acc, field, index) => {\n acc[field.name] = index;\n return acc;\n }, {});\n\n const numRows = columns[0]?.length || 0;\n const additionalTooltipValuesArray: TooltipFieldRecord[] = [];\n\n for (let i = 0; i < numRows; i += 1) {\n const tooltipObject: TooltipFieldRecord = {};\n\n additionalTooltipFields.forEach(fieldName => {\n if (fieldName in fieldIndexMap) {\n const columnIndex = fieldIndexMap[fieldName];\n tooltipObject[fieldName] = columns[columnIndex]?.[i] ?? null;\n } else {\n tooltipObject[fieldName] = null;\n }\n });\n\n additionalTooltipValuesArray.push(tooltipObject);\n }\n\n return additionalTooltipValuesArray;\n}\n\nexport type AdditionalTooltipResult = TooltipFieldRecord[];\n\ntype AdditionalTooltipValuesCache = {\n columns: unknown;\n fields: unknown;\n additionalTooltipFields: string[] | undefined;\n result: AdditionalTooltipResult | undefined;\n};\n\nexport const areStringArraysEqual = (a: string[] | undefined, b: string[] | undefined): boolean => {\n if (a === b) return true;\n if (!a || !b) return false;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i += 1) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n};\n\nexport const createAdditionalTooltipValuesMemoizer = () => {\n let cache: AdditionalTooltipValuesCache = {\n columns: null,\n fields: null,\n additionalTooltipFields: undefined,\n result: undefined,\n };\n\n return (\n columns: (string | number | null)[][],\n fields: { name: string }[],\n additionalTooltipFields: string[] | undefined\n ): AdditionalTooltipResult | undefined => {\n if (\n cache.columns === columns &&\n cache.fields === fields &&\n areStringArraysEqual(cache.additionalTooltipFields, additionalTooltipFields)\n ) {\n return cache.result;\n }\n\n let result: AdditionalTooltipResult | undefined;\n if (additionalTooltipFields?.length && columns && fields) {\n result = extractAdditionalTooltipValues(columns, fields, additionalTooltipFields);\n }\n\n cache = {\n columns,\n fields,\n additionalTooltipFields,\n result,\n };\n\n return result;\n };\n};\n\n// Note: we are making the assumption that attaching a range.select listener means the user wants to enable search zoom\n// This is because we don't know if the time range tokens being updated by the drilldown is used by the current viz.\n// In the future we are considering using a shared context to pass this information from UDF to Viz.\ninterface OptionsProps {\n events?: string[];\n selectedItemId?: string;\n [key: string]: unknown;\n}\ninterface EventHandler {\n type: string;\n options: OptionsProps;\n}\n\nexport const shouldEnableSearchZoom = (eventHandlers: EventHandler[] = [], xField = '') => {\n const rangeSelectEventHandler = eventHandlers.find(eventHandler =>\n eventHandler.options.events?.includes('range.select')\n );\n // Check if xField is _time. This is how splunk-charting distinguishes a time chart from categorical.\n // Note: search zoom will be buggy if the x axis uses timestamp values but is not _time\n const xAxisIsTime = xField === '_time';\n\n return !!rangeSelectEventHandler && xAxisIsTime;\n};\n\nconst canvasSupportedTimeSeriesCharts = ['splunk.line', 'splunk.area'];\nexport const isTimeSeriesCanvasRenderSupported = (vizConfigKey: string): boolean => {\n return canvasSupportedTimeSeriesCharts.includes(vizConfigKey);\n};\n\ntype ChartData = {\n fields: (string | { name: string })[];\n columns: (string | number)[][];\n};\n\n// Filter all internal fields and columns except for _time fild\nexport const filterChartDataFromInternalFields = (chartData: ChartData): ChartData => {\n const { fields, columns } = chartData;\n\n // Determine the indexes to keep\n const keepIndexes = fields.reduce<number[]>((acc, field, index) => {\n const fieldName = typeof field === 'object' ? field?.name : field;\n if (!fieldName?.startsWith('_') || fieldName === '_time') {\n acc.push(index);\n }\n return acc;\n }, []);\n\n // Filter fields and columns\n const filteredFields = keepIndexes.map(index => fields[index]);\n const filteredColumns = keepIndexes.map(index => columns[index]);\n\n return { fields: filteredFields, columns: filteredColumns };\n};\n\nexport const isTimeField = (field): boolean => {\n return (\n (typeof field === 'object' && field?.name === '_time') ||\n (typeof field === 'string' && field === '_time')\n );\n};\n\nexport const convert2DArrayToNumbers = arr => {\n return arr.map(subArray => subArray.map(element => parseFloat(element)));\n};\n\nexport const convertTimeStringToUnix = arr => {\n return arr.map(timeStr => parseInt((new Date(timeStr).getTime() / 1000).toFixed(0), 10));\n};\n\n/**\n * Parses an axis value that may be 'auto', null, undefined, empty string, or a numeric value.\n * Returns undefined for non-numeric values, allowing the renderer to auto-calculate the range.\n * @param {any} val - The value to parse (string, number, null, undefined)\n * @returns {number | undefined} - Parsed number or undefined\n */\nexport const parseAxisValue = (val: any): number | undefined => {\n if (val === undefined || val === null || val === 'auto' || val === '') {\n return undefined;\n }\n const num = typeof val === 'number' ? val : Number.parseFloat(val);\n return Number.isNaN(num) ? undefined : num;\n};\n\n/**\n * Parses X-axis line visibility option from string to boolean or undefined.\n * @param {string | undefined} visibility - The visibility option ('hide', 'show', or other)\n * @returns {boolean | undefined} - false for 'hide', true for 'show', undefined otherwise\n */\nexport const parseXAxisLineVisibility = (visibility?: string): boolean | undefined => {\n if (visibility === 'hide') return false;\n if (visibility === 'show') return true;\n return undefined;\n};\n\n// Legend placement logic for canvas render, used in TimeseriesChartWrapper\nexport const getLegend = (props: {\n legendDisplay: string;\n isSeriesCompare: boolean;\n legendTruncation?: LegendTruncation;\n}): Legend | false => {\n const legendPlacement = props?.legendDisplay;\n const { isSeriesCompare, legendTruncation } = props;\n const commonLegendProps = {\n center: true,\n fontSize: 12,\n largerTiles: true,\n hideSeriesValue: !isSeriesCompare, // Show values if in seriesCompare mode\n legendTruncation,\n };\n\n // \"right\" | \"left\" | \"top\" | \"bottom\" | \"off\"\n switch (legendPlacement) {\n case 'off':\n return false;\n case 'left':\n return LeftLegendFactory({\n ...commonLegendProps,\n });\n case 'bottom':\n return BottomLegendFactory({\n wrap: true,\n ...commonLegendProps,\n });\n case 'top':\n return TopLegendFactory({\n wrap: true,\n ...commonLegendProps,\n });\n // Note: By default, use right legend\n default:\n return SideLegendFactory({\n ...commonLegendProps,\n });\n }\n};\n\nexport const getComputedAxisTitles = (\n inputAxisTitle: string,\n fields: string[],\n axisTitleVisibility: 'show' | 'collapsed'\n): string => {\n if (axisTitleVisibility === 'collapsed') {\n return '';\n }\n let fieldTitle = fields.length > 1 ? '' : fields[0]; // If more than one series (multi-series) default empty title\n if (!fieldTitle) {\n fieldTitle = '';\n }\n return inputAxisTitle?.length ? inputAxisTitle.trim() : fieldTitle;\n};\n\n/**\n * Truncates Y-axis title based on available container height and font metrics\n * @param axisTitle - The title text to potentially truncate\n * @param containerSpacing - Available height/ width in pixels depending on axis orientation\n * @param fontSize - Font size in pixels (default: 12)\n * @returns Truncated title with ellipsis if needed\n */\nexport const ellipsisAxisTitle = (axisTitle: string, containerSpacing: number, fontSize = 12): string => {\n if (!axisTitle) {\n return '';\n }\n if (Number.isNaN(containerSpacing) || containerSpacing <= 0) {\n return axisTitle;\n }\n // Calculate available height for text (leave 40% margin)\n const availableHeight = containerSpacing * 0.6;\n\n // Use a generic character width ratio that works across most fonts\n // 0.55 is a reasonable average for most fonts\n const avgCharWidth = fontSize * 0.55;\n\n // Calculate maximum characters that fit in available height\n const maxChars = Math.floor(availableHeight / avgCharWidth);\n\n // If title fits, return as-is\n if (axisTitle.length <= maxChars) {\n return axisTitle;\n }\n\n // Need to truncate - use middle ellipsis for better context\n if (maxChars <= 3) {\n return '...'; // Not enough space for meaningful text\n }\n\n // Reserve 3 characters for ellipsis\n const availableChars = maxChars - 3;\n const halfChars = Math.floor(availableChars / 2);\n\n // Create truncated title with middle ellipsis\n const start = axisTitle.slice(0, halfChars);\n const end = axisTitle.slice(-halfChars);\n\n return `${start}...${end}`;\n};\n\nexport type FieldObject = {\n name: string;\n};\n\nexport const getFieldName = (field: string | FieldObject): string => {\n const fieldName = typeof field === 'object' ? (field as unknown as FieldObject)?.name : field;\n return fieldName;\n};\n\nexport const getFieldNames = (fields: (string | FieldObject)[]): string[] => {\n return fields.map(field => getFieldName(field));\n};\n\n/**\n * Type alias for axis label visibility options\n */\nexport type AxisLabelVisibility = 'hide' | 'show' | 'auto';\n\n/**\n * Returns X scale config for viz-canvas charts\n * @param label\n * @param xAxisLabelVisibility\n * @returns\n */\nexport const getXScaleConfig = (\n label: string,\n xAxisLabelVisibility?: AxisLabelVisibility,\n xAxisLabelRotation?: -90 | -45 | 0 | 45 | 90\n): ScaleConfig => {\n const xConfig: ScaleConfig = { x: {} };\n xConfig.x.label = label;\n // Set hideLabels to true when xAxisLabelVisibility is \"hide\"\n if (xAxisLabelVisibility === 'hide') {\n xConfig.x.hideLabels = true;\n }\n // Set labelRotation if provided\n if (xAxisLabelRotation !== undefined) {\n xConfig.x.labelRotation = xAxisLabelRotation;\n }\n return xConfig;\n};\n\n/**\n * Returns Y scale config for viz-canvas charts\n * @param label\n * @param yAxisAbbreviation\n * @param yAxisScale\n * @param yAxisLabelVisibility\n * @param yAxisMin\n * @param yAxisMax\n * @returns\n */\nexport const getYScaleConfig = (\n label: string,\n yAxisAbbreviation: string,\n yAxisScale?: 'linear' | 'log',\n yAxisLabelVisibility?: AxisLabelVisibility,\n yAxisMin?: number,\n yAxisMax?: number\n): ScaleConfig => {\n const scaleType = yAxisScale ?? 'linear';\n const yConfig: ScaleConfig = { y: {} };\n yConfig.y.label = label;\n yConfig.y.type = scaleType;\n if (yAxisAbbreviation !== 'none') {\n yConfig.y.tickFmt = (v): string => shortenNumber(v, 1);\n }\n // Only set fixed width when abbreviation is ON\n // When abbreviation is OFF, width remains undefined to allow dynamic sizing in uplot-utils\n // based on actual data label lengths\n if (yAxisAbbreviation !== 'none') {\n yConfig.y.width = label && label.length > 0 ? 30 : 10;\n }\n if (yAxisLabelVisibility === 'hide') {\n yConfig.y.hideLabels = true;\n }\n if (yAxisMin !== undefined || yAxisMax !== undefined) {\n yConfig.y.range = (u, dataMin, dataMax) => {\n const min = yAxisMin ?? dataMin;\n const max = yAxisMax ?? dataMax;\n return [min, max];\n };\n }\n return yConfig;\n};\n/**\n * Returns Y2 scale config for viz-canvas charts\n * @param label\n * @param axisAbbreviation\n * @param axisScale\n * @param roundAxisLabelsToInteger\n * @param y2AxisLabelVisibility\n * @param y2AxisMin\n * @param y2AxisMax\n * @returns\n */\nexport const getY2ScaleConfig = (\n label: string,\n axisAbbreviation: string,\n axisScale?: 'linear' | 'log',\n roundAxisLabelsToInteger?: boolean,\n y2AxisLabelVisibility?: AxisLabelVisibility,\n y2AxisMin?: number,\n y2AxisMax?: number\n): ScaleConfig => {\n const y2Config: ScaleConfig = { y2: {} };\n const scaleType = axisScale ?? 'linear';\n y2Config.y2.label = label;\n y2Config.y2.side = 'right';\n // Note: showGrid is intentionally not set here so that the top-level\n // showY2MajorGridLines prop can control it (defaults to false)\n y2Config.y2.type = scaleType;\n if (axisAbbreviation !== 'none') {\n y2Config.y2.tickFmt = (v): string => shortenNumber(v, 1, roundAxisLabelsToInteger);\n // Set width for abbreviated Y2 axis\n // Y2 needs more width (50px) than Y-axis (30px) because of rotated title positioning\n // Width will be used to detect abbreviation setting in padding calculations\n y2Config.y2.width = label && label.length > 0 ? 50 : 10;\n } else if (roundAxisLabelsToInteger) {\n y2Config.y2.tickFmt = (v): string =>\n roundAxisLabelsToInteger ? Math.round(v).toString() : v.toString();\n }\n if (y2AxisLabelVisibility === 'hide') {\n y2Config.y2.hideLabels = true;\n }\n if (y2AxisMin !== undefined || y2AxisMax !== undefined) {\n y2Config.y2.range = (u, dataMin, dataMax) => {\n const min = y2AxisMin ?? dataMin;\n const max = y2AxisMax ?? dataMax;\n return [min, max];\n };\n }\n return y2Config;\n};\n\n/**\n * Add series overrides for viz-canvas charts (for eg:- line width)\n */\nconst getSeriesType = (\n isOverlay: boolean,\n isAreaChart: boolean,\n isStacked: boolean\n): SeriesConfig[string]['type'] | undefined => {\n if (isOverlay) return 'line';\n if (!isAreaChart) return undefined;\n return isStacked ? 'stacked-area' : 'area';\n};\n\nconst getY2Scale = (\n field: string,\n y2fields: string[] | undefined,\n overlayFields: string[] | undefined\n): 'y' | 'y2' => {\n const assignToY2 =\n (y2fields?.length > 0 && y2fields.includes(field)) ||\n (!y2fields?.length && overlayFields?.includes(field));\n return assignToY2 ? 'y2' : 'y';\n};\n\nexport const getSeriesOverrides = (opts: {\n yfields: string[];\n y2fields?: string[];\n lineWidth?: number;\n overlayFields?: string[];\n y2Enabled?: boolean;\n nullValueMode?: 'gaps' | 'connect' | 'zero';\n markerDisplay?: 'off' | 'filled' | 'outlined';\n lineDashStyle?: string;\n lineDashStylesByField?: Record<string, string>;\n stepPosition?: 'off' | 'before' | 'after';\n stepPositionsByField?: Record<string, 'off' | 'before' | 'after'>;\n type?: 'line' | 'area';\n stackMode?: 'auto' | 'stacked' | 'stacked100';\n showLines?: boolean;\n}): SeriesConfig => {\n const {\n yfields,\n y2fields,\n lineWidth,\n overlayFields,\n y2Enabled,\n nullValueMode,\n markerDisplay,\n lineDashStyle,\n lineDashStylesByField,\n stepPosition,\n stepPositionsByField,\n type,\n stackMode,\n showLines,\n } = opts;\n const seriesConfig: SeriesConfig = {};\n\n let spanGaps: boolean | undefined;\n if (nullValueMode === 'gaps') {\n spanGaps = false;\n } else if (nullValueMode != null) {\n spanGaps = true;\n } else {\n spanGaps = undefined;\n }\n const replaceNullsWithZero = nullValueMode === 'zero' ? true : undefined;\n\n const isAreaChart = type === 'area';\n const isStacked = isAreaChart && (stackMode === 'stacked' || stackMode === 'stacked100');\n\n // Non-overlay area fields first, then overlay fields - so overlays render on top\n const areaFields = isAreaChart ? yfields.filter(f => !overlayFields?.includes(f)) : yfields;\n const overlayFieldsInOrder = overlayFields?.filter(f => yfields.includes(f)) ?? [];\n const orderedFields = isAreaChart ? [...areaFields, ...overlayFieldsInOrder] : yfields;\n\n orderedFields.forEach(field => {\n const isOverlay = overlayFields?.includes(field) ?? false;\n const isPercent = isAreaChart && stackMode === 'stacked100' && !isOverlay;\n const shouldHideAreaOutline = isAreaChart && showLines === false && !isOverlay;\n\n seriesConfig[field] = {\n overrides: {\n width: shouldHideAreaOutline ? 0 : (lineWidth ?? DEFAULT_LINE_WIDTH),\n ...(isPercent ? ({ stacking: { mode: 'percent', group: 'A' } } as object) : {}),\n } as SeriesConfig[string]['overrides'],\n };\n\n const seriesType = getSeriesType(isOverlay, isAreaChart, isStacked);\n if (seriesType !== undefined) seriesConfig[field].type = seriesType;\n\n if (spanGaps !== undefined) seriesConfig[field].overrides.spanGaps = spanGaps;\n\n if (y2Enabled) seriesConfig[field].overrides.scale = getY2Scale(field, y2fields, overlayFields);\n\n if (markerDisplay !== undefined) seriesConfig[field].markerDisplay = markerDisplay;\n\n if (!isAreaChart || isOverlay) {\n const fieldDashStyle = lineDashStylesByField?.[field] || lineDashStyle;\n if (fieldDashStyle) seriesConfig[field].lineDashStyle = fieldDashStyle as any;\n }\n\n const hasFieldStepPosition = Object.hasOwn(stepPositionsByField || {}, field);\n const fieldStepPosition = hasFieldStepPosition ? stepPositionsByField?.[field] : stepPosition;\n if (fieldStepPosition && fieldStepPosition !== 'off') {\n (seriesConfig[field] as SeriesConfig[string] & { stepPosition?: string }).stepPosition =\n fieldStepPosition;\n }\n\n if (replaceNullsWithZero !== undefined) {\n (\n seriesConfig[field] as SeriesConfig[string] & { replaceNullsWithZero?: boolean }\n ).replaceNullsWithZero = replaceNullsWithZero;\n }\n });\n\n return seriesConfig;\n};\n\n/**\n * Finds the start and end indices in time series data for a given range.\n * @param xData - Array of time values (can be ISO strings or epoch timestamps)\n * @param startValue - Start value of the range (epoch timestamp)\n * @param endValue - End value of the range (epoch timestamp)\n * @returns Object with startXIndex (first index where time >= startValue) and endXIndex (last index where time <= endValue)\n */\nexport const findRangeIndices = (\n xData: (string | number)[],\n startValue: number,\n endValue: number\n): { startXIndex: number; endXIndex: number } => {\n let startXIndex = -1;\n let endXIndex = -1;\n\n // Convert xData to epoch timestamps if they are ISO strings\n const xDataEpoch = xData.map(val => {\n if (typeof val === 'string') {\n return new Date(val).getTime() / 1000; // Convert to epoch seconds\n }\n return val;\n });\n\n // Find the closest time value >= startValue\n for (let i = 0; i < xDataEpoch.length; i += 1) {\n if (xDataEpoch[i] >= startValue) {\n startXIndex = i;\n break;\n }\n }\n\n // If no value >= startValue found, use the last index (all values are less)\n if (startXIndex === -1 && xDataEpoch.length > 0) {\n startXIndex = xDataEpoch.length - 1;\n }\n\n // Find the closest time value <= endValue\n for (let i = xDataEpoch.length - 1; i >= 0; i -= 1) {\n if (xDataEpoch[i] <= endValue) {\n endXIndex = i;\n break;\n }\n }\n\n // If no value <= endValue found, use the first index (all values are greater)\n if (endXIndex === -1 && xDataEpoch.length > 0) {\n endXIndex = 0;\n }\n\n return { startXIndex, endXIndex };\n};\n", "\nimport * as defaultImport from \"@splunk/visualization-context/FeatureFlagContext\";\nexport * from \"@splunk/visualization-context/FeatureFlagContext\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-schemas\";\nexport * from \"@splunk/visualization-schemas\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import { useContext } from 'react';\nimport FeatureFlagContext from '@splunk/visualization-context/FeatureFlagContext';\nimport { LAYOUT_TYPE } from '@splunk/visualization-schemas';\n\nexport const useTrellisFeatureFlagOn = (): boolean => {\n const context = useContext(FeatureFlagContext) as Record<string, unknown>;\n return Boolean(context?.visualizations_enableTrellis);\n};\n\nexport const useTrellisEnabled = (layoutType = LAYOUT_TYPE.Off): boolean => {\n const trellisFeatureEnabled = useTrellisFeatureFlagOn();\n return trellisFeatureEnabled && layoutType === LAYOUT_TYPE.Trellis;\n};\n", "import * as React from 'react';\nimport styled from 'styled-components';\n\nexport const TRELLIS_TITLE_HEIGHT = 28;\n\nconst TrellisTitleText = styled.div`\n margin-left: 10px;\n margin-right: 10px;\n padding-top: 8px;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n`;\n\nconst TrellisTitleDiv = styled.div<{\n fontColor: string;\n backgroundColor: string;\n}>`\n height: ${TRELLIS_TITLE_HEIGHT}px;\n font-size: 14px;\n font-weight: 700;\n color: ${props => props.fontColor};\n background-color: ${props => props.backgroundColor};\n box-shadow: 0 1px ${props => props.backgroundColor}; // this is added to avoid a 1px gap between title and viz divs that showed up intermittently because of pixel rounding error in chrome.\n`;\n\ninterface TrellisTitleProps {\n fontColor: string;\n backgroundColor: string;\n trellisKey: unknown;\n}\n\nconst formatTrellisKey = (value: TrellisTitleProps['trellisKey']): string => {\n if (value === null || value === undefined) {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return value.toString();\n }\n if (typeof value === 'symbol') {\n return value.toString();\n }\n try {\n return JSON.stringify(value);\n } catch {\n // JSON.stringify throws for BigInt and circular references\n return typeof value === 'bigint' ? value.toString() : '';\n }\n};\n\nexport const TrellisTitle = (props: TrellisTitleProps) => {\n const titleText = formatTrellisKey(props.trellisKey);\n return (\n <TrellisTitleDiv\n fontColor={props.fontColor}\n backgroundColor={props.backgroundColor}\n data-test=\"trellis-title\"\n title={titleText}\n >\n <TrellisTitleText>{titleText}</TrellisTitleText>\n </TrellisTitleDiv>\n );\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AACA,oBAA+B;AAC/B,0BAAc;AACd,IAAO,gBAAS,aAAa,gBAA8B,wBAAU;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAA,iBAA+B;AAC/B,2BAAc;AACd,IAAO,iBAAS,aAAaA,iBAA8B,yBAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,iBAA+B;AAC/B,sCAAc;AACd,IAAO,4BAAS,aAAaA,iBAA8B,yBAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,iBAA+B;AAC/B,qCAAc;AACd,IAAO,2BAAS,aAAaA,iBAA8B,yBAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,iBAA+B;AAC/B,yCAAc;AACd,IAAO,+BAAS,aAAaA,iBAA8B,yBAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,iBAA+B;AAC/B,0BAAc;AACd,IAAO,gBAAS,aAAaA,iBAA8B,yBAAUA;;;ACDrE,IAAM,kBAAkB,0BAAO,IAAI,MAAM,CAAC,EAAE,YAAY,OAAO;AAAA,EAC3D,aAAa;AAAA,EACb,eAAe;AACnB,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAMsB,WAAS,MAAM,eAAe;AAAA;AAGtD,gBAAgB,cAAc;AAE9B,IAAO,0BAAQ;;;AChBf;AAAA;AAAA;AAAA;AACA,IAAAC,iBAA+B;AAC/B,8BAAc;AACd,IAAO,oBAAS,aAAaA,iBAA8B,yBAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,iBAA+B;AAC/B,6BAAc;AACd,IAAO,mBAAS,aAAaA,iBAA8B,yBAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,iBAA+B;AAC/B,8BAAc;AACd,IAAO,oBAAS,aAAaA,iBAA8B,yBAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,qCAAc;AACd,IAAO,2BAAS,aAAaA,kBAA8B,0BAAUA;;;ACuF9D,IAAM,qBAAqB;AA4B3B,IAAM,0BAA0B,CAAC;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACJ,OACI,2CAAa,UACP,YAAY,IAAI,CAAC,WAAW,OAAO;AAAA,EAC/B,KAAK,mDAAkB;AAAA,EACvB,MAAM;AAAA,EACN,OAAO,mDAAkB;AAC7B,EAAE,IACF,CAAC;AAKX,IAAM,iBAAiB,0BAAO,gBAAQ;AAAA,aACzB,WAAS,MAAM,cAAc,kBAAU,oBAAoB,KAAK,CAAC;AAAA;AASvE,IAAM,kCAA0E,CAAC;AAAA,EACpF;AAAA,EACA;AACJ,MAAM;AACF,QAAM,iBAAiB;AACvB,SAAO,cAAM,cAAc,gBAAgB;AAAA,IACvC,OAAO,GAAG,WAAW,KAAK;AAAA,IAC1B,QAAQ,GAAG,WAAW,MAAM;AAAA,IAC5B,SAAS;AAAA,IACT,SAAS;AAAA,IACT,YAAY,eAAe;AAAA,EAC/B,CAAC;AACL;AA6RO,IAAM,yBAAyB,CAAC,gBAAgC,CAAC,GAAG,SAAS,OAAO;AACvF,QAAM,0BAA0B,cAAc;AAAA,IAAK,kBAAa;AA1bpE;AA2bQ,gCAAa,QAAQ,WAArB,mBAA6B,SAAS;AAAA;AAAA,EAC1C;AAGA,QAAM,cAAc,WAAW;AAE/B,SAAO,CAAC,CAAC,2BAA2B;AACxC;AAaO,IAAM,oCAAoC,CAAC,cAAoC;AAClF,QAAM,EAAE,QAAQ,QAAQ,IAAI;AAG5B,QAAM,cAAc,OAAO,OAAiB,CAAC,KAAK,OAAO,UAAU;AAC/D,UAAM,YAAY,OAAO,UAAU,WAAW,+BAAO,OAAO;AAC5D,QAAI,EAAC,uCAAW,WAAW,SAAQ,cAAc,SAAS;AACtD,UAAI,KAAK,KAAK;AAAA,IAClB;AACA,WAAO;AAAA,EACX,GAAG,CAAC,CAAC;AAGL,QAAM,iBAAiB,YAAY,IAAI,WAAS,OAAO,KAAK,CAAC;AAC7D,QAAM,kBAAkB,YAAY,IAAI,WAAS,QAAQ,KAAK,CAAC;AAE/D,SAAO,EAAE,QAAQ,gBAAgB,SAAS,gBAAgB;AAC9D;AASO,IAAM,0BAA0B,SAAO;AAC1C,SAAO,IAAI,IAAI,cAAY,SAAS,IAAI,aAAW,WAAW,OAAO,CAAC,CAAC;AAC3E;AAYO,IAAM,iBAAiB,CAAC,QAAiC;AAC5D,MAAI,QAAQ,UAAa,QAAQ,QAAQ,QAAQ,UAAU,QAAQ,IAAI;AACnE,WAAO;AAAA,EACX;AACA,QAAM,MAAM,OAAO,QAAQ,WAAW,MAAM,OAAO,WAAW,GAAG;AACjE,SAAO,OAAO,MAAM,GAAG,IAAI,SAAY;AAC3C;AAOO,IAAM,2BAA2B,CAAC,eAA6C;AAClF,MAAI,eAAe,OAAQ,QAAO;AAClC,MAAI,eAAe,OAAQ,QAAO;AAClC,SAAO;AACX;AAGO,IAAM,YAAY,CAAC,UAIJ;AAClB,QAAM,kBAAkB,+BAAO;AAC/B,QAAM,EAAE,iBAAiB,iBAAiB,IAAI;AAC9C,QAAM,oBAAoB;AAAA,IACtB,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,aAAa;AAAA,IACb,iBAAiB,CAAC;AAAA;AAAA,IAClB;AAAA,EACJ;AAGA,UAAQ,iBAAiB;AAAA,IACrB,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,iBAAO,gDAAkB,mBAClB,kBACN;AAAA,IACL,KAAK;AACD,iBAAO,kDAAoB;AAAA,QACvB,MAAM;AAAA,SACH,kBACN;AAAA,IACL,KAAK;AACD,iBAAO,+CAAiB;AAAA,QACpB,MAAM;AAAA,SACH,kBACN;AAAA,IAEL;AACI,iBAAO,gDAAkB,mBAClB,kBACN;AAAA,EACT;AACJ;AAEO,IAAM,wBAAwB,CACjC,gBACA,QACA,wBACS;AACT,MAAI,wBAAwB,aAAa;AACrC,WAAO;AAAA,EACX;AACA,MAAI,aAAa,OAAO,SAAS,IAAI,KAAK,OAAO,CAAC;AAClD,MAAI,CAAC,YAAY;AACb,iBAAa;AAAA,EACjB;AACA,UAAO,iDAAgB,UAAS,eAAe,KAAK,IAAI;AAC5D;AASO,IAAM,oBAAoB,CAAC,WAAmB,kBAA0B,WAAW,OAAe;AACrG,MAAI,CAAC,WAAW;AACZ,WAAO;AAAA,EACX;AACA,MAAI,OAAO,MAAM,gBAAgB,KAAK,oBAAoB,GAAG;AACzD,WAAO;AAAA,EACX;AAEA,QAAM,kBAAkB,mBAAmB;AAI3C,QAAM,eAAe,WAAW;AAGhC,QAAM,WAAW,KAAK,MAAM,kBAAkB,YAAY;AAG1D,MAAI,UAAU,UAAU,UAAU;AAC9B,WAAO;AAAA,EACX;AAGA,MAAI,YAAY,GAAG;AACf,WAAO;AAAA,EACX;AAGA,QAAM,iBAAiB,WAAW;AAClC,QAAM,YAAY,KAAK,MAAM,iBAAiB,CAAC;AAG/C,QAAM,QAAQ,UAAU,MAAM,GAAG,SAAS;AAC1C,QAAM,MAAM,UAAU,MAAM,CAAC,SAAS;AAEtC,SAAO,GAAG,KAAK,MAAM,GAAG;AAC5B;AAMO,IAAM,eAAe,CAAC,UAAwC;AACjE,QAAM,YAAY,OAAO,UAAU,WAAY,+BAAkC,OAAO;AACxF,SAAO;AACX;AAEO,IAAM,gBAAgB,CAAC,WAA+C;AACzE,SAAO,OAAO,IAAI,WAAS,aAAa,KAAK,CAAC;AAClD;AAaO,IAAM,kBAAkB,CAC3B,OACA,sBACA,uBACc;AACd,QAAM,UAAuB,EAAE,GAAG,CAAC,EAAE;AACrC,UAAQ,EAAE,QAAQ;AAElB,MAAI,yBAAyB,QAAQ;AACjC,YAAQ,EAAE,aAAa;AAAA,EAC3B;AAEA,MAAI,uBAAuB,QAAW;AAClC,YAAQ,EAAE,gBAAgB;AAAA,EAC9B;AACA,SAAO;AACX;AAYO,IAAM,kBAAkB,CAC3B,OACA,mBACA,YACA,sBACA,UACA,aACc;AACd,QAAM,YAAY,kCAAc;AAChC,QAAM,UAAuB,EAAE,GAAG,CAAC,EAAE;AACrC,UAAQ,EAAE,QAAQ;AAClB,UAAQ,EAAE,OAAO;AACjB,MAAI,sBAAsB,QAAQ;AAC9B,YAAQ,EAAE,UAAU,CAAC,UAAc,4CAAc,GAAG,CAAC;AAAA,EACzD;AAIA,MAAI,sBAAsB,QAAQ;AAC9B,YAAQ,EAAE,QAAQ,SAAS,MAAM,SAAS,IAAI,KAAK;AAAA,EACvD;AACA,MAAI,yBAAyB,QAAQ;AACjC,YAAQ,EAAE,aAAa;AAAA,EAC3B;AACA,MAAI,aAAa,UAAa,aAAa,QAAW;AAClD,YAAQ,EAAE,QAAQ,CAAC,GAAG,SAAS,YAAY;AACvC,YAAM,MAAM,8BAAY;AACxB,YAAM,MAAM,8BAAY;AACxB,aAAO,CAAC,KAAK,GAAG;AAAA,IACpB;AAAA,EACJ;AACA,SAAO;AACX;AAYO,IAAM,mBAAmB,CAC5B,OACA,kBACA,WACA,0BACA,uBACA,WACA,cACc;AACd,QAAM,WAAwB,EAAE,IAAI,CAAC,EAAE;AACvC,QAAM,YAAY,gCAAa;AAC/B,WAAS,GAAG,QAAQ;AACpB,WAAS,GAAG,OAAO;AAGnB,WAAS,GAAG,OAAO;AACnB,MAAI,qBAAqB,QAAQ;AAC7B,aAAS,GAAG,UAAU,CAAC,UAAc,4CAAc,GAAG,GAAG,wBAAwB;AAIjF,aAAS,GAAG,QAAQ,SAAS,MAAM,SAAS,IAAI,KAAK;AAAA,EACzD,WAAW,0BAA0B;AACjC,aAAS,GAAG,UAAU,CAAC,MACnB,2BAA2B,KAAK,MAAM,CAAC,EAAE,SAAS,IAAI,EAAE,SAAS;AAAA,EACzE;AACA,MAAI,0BAA0B,QAAQ;AAClC,aAAS,GAAG,aAAa;AAAA,EAC7B;AACA,MAAI,cAAc,UAAa,cAAc,QAAW;AACpD,aAAS,GAAG,QAAQ,CAAC,GAAG,SAAS,YAAY;AACzC,YAAM,MAAM,gCAAa;AACzB,YAAM,MAAM,gCAAa;AACzB,aAAO,CAAC,KAAK,GAAG;AAAA,IACpB;AAAA,EACJ;AACA,SAAO;AACX;AAKA,IAAM,gBAAgB,CAClB,WACA,aACA,cAC2C;AAC3C,MAAI,UAAW,QAAO;AACtB,MAAI,CAAC,YAAa,QAAO;AACzB,SAAO,YAAY,iBAAiB;AACxC;AAEA,IAAM,aAAa,CACf,OACA,UACA,kBACa;AACb,QAAM,cACD,qCAAU,UAAS,KAAK,SAAS,SAAS,KAAK,KAC/C,EAAC,qCAAU,YAAU,+CAAe,SAAS;AAClD,SAAO,aAAa,OAAO;AAC/B;AAEO,IAAM,qBAAqB,CAAC,SAef;AA9xBpB;AA+xBI,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,IAAI;AACJ,QAAM,eAA6B,CAAC;AAEpC,MAAI;AACJ,MAAI,kBAAkB,QAAQ;AAC1B,eAAW;AAAA,EACf,WAAW,iBAAiB,MAAM;AAC9B,eAAW;AAAA,EACf,OAAO;AACH,eAAW;AAAA,EACf;AACA,QAAM,uBAAuB,kBAAkB,SAAS,OAAO;AAE/D,QAAM,cAAc,SAAS;AAC7B,QAAM,YAAY,gBAAgB,cAAc,aAAa,cAAc;AAG3E,QAAM,aAAa,cAAc,QAAQ,OAAO,OAAK,EAAC,+CAAe,SAAS,GAAE,IAAI;AACpF,QAAM,wBAAuB,oDAAe,OAAO,OAAK,QAAQ,SAAS,CAAC,OAA7C,YAAmD,CAAC;AACjF,QAAM,gBAAgB,cAAc,CAAC,GAAG,YAAY,GAAG,oBAAoB,IAAI;AAE/E,gBAAc,QAAQ,WAAS;AAn0BnC,QAAAC;AAo0BQ,UAAM,aAAYA,MAAA,+CAAe,SAAS,WAAxB,OAAAA,MAAkC;AACpD,UAAM,YAAY,eAAe,cAAc,gBAAgB,CAAC;AAChE,UAAM,wBAAwB,eAAe,cAAc,SAAS,CAAC;AAErE,iBAAa,KAAK,IAAI;AAAA,MAClB,WAAW;AAAA,QACP,OAAO,wBAAwB,IAAK,gCAAa;AAAA,SAC7C,YAAa,EAAE,UAAU,EAAE,MAAM,WAAW,OAAO,IAAI,EAAE,IAAe,CAAC;AAAA,IAErF;AAEA,UAAM,aAAa,cAAc,WAAW,aAAa,SAAS;AAClE,QAAI,eAAe,OAAW,cAAa,KAAK,EAAE,OAAO;AAEzD,QAAI,aAAa,OAAW,cAAa,KAAK,EAAE,UAAU,WAAW;AAErE,QAAI,UAAW,cAAa,KAAK,EAAE,UAAU,QAAQ,WAAW,OAAO,UAAU,aAAa;AAE9F,QAAI,kBAAkB,OAAW,cAAa,KAAK,EAAE,gBAAgB;AAErE,QAAI,CAAC,eAAe,WAAW;AAC3B,YAAM,kBAAiB,+DAAwB,WAAU;AACzD,UAAI,eAAgB,cAAa,KAAK,EAAE,gBAAgB;AAAA,IAC5D;AAEA,UAAM,uBAAuB,OAAO,OAAO,wBAAwB,CAAC,GAAG,KAAK;AAC5E,UAAM,oBAAoB,uBAAuB,6DAAuB,SAAS;AACjF,QAAI,qBAAqB,sBAAsB,OAAO;AAClD,MAAC,aAAa,KAAK,EAAuD,eACtE;AAAA,IACR;AAEA,QAAI,yBAAyB,QAAW;AACpC,MACI,aAAa,KAAK,EACpB,uBAAuB;AAAA,IAC7B;AAAA,EACJ,CAAC;AAED,SAAO;AACX;AASO,IAAM,mBAAmB,CAC5B,OACA,YACA,aAC6C;AAC7C,MAAI,cAAc;AAClB,MAAI,YAAY;AAGhB,QAAM,aAAa,MAAM,IAAI,SAAO;AAChC,QAAI,OAAO,QAAQ,UAAU;AACzB,aAAO,IAAI,KAAK,GAAG,EAAE,QAAQ,IAAI;AAAA,IACrC;AACA,WAAO;AAAA,EACX,CAAC;AAGD,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK,GAAG;AAC3C,QAAI,WAAW,CAAC,KAAK,YAAY;AAC7B,oBAAc;AACd;AAAA,IACJ;AAAA,EACJ;AAGA,MAAI,gBAAgB,MAAM,WAAW,SAAS,GAAG;AAC7C,kBAAc,WAAW,SAAS;AAAA,EACtC;AAGA,WAAS,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG;AAChD,QAAI,WAAW,CAAC,KAAK,UAAU;AAC3B,kBAAY;AACZ;AAAA,IACJ;AAAA,EACJ;AAGA,MAAI,cAAc,MAAM,WAAW,SAAS,GAAG;AAC3C,gBAAY;AAAA,EAChB;AAEA,SAAO,EAAE,aAAa,UAAU;AACpC;;;ACh6BA;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,uCAAc;AACd,IAAO,6BAAS,aAAaA,kBAA8B,0BAAUA;;;ACHrE;AAAA;AAAA;AAAA;AACA,IAAAC,kBAA+B;AAC/B,0CAAc;AACd,IAAO,gCAAS,aAAaA,kBAA8B,0BAAUA;;;ACC9D,IAAM,0BAA0B,MAAe;AAClD,QAAM,cAAU,0BAAW,0BAAkB;AAC7C,SAAO,QAAQ,mCAAS,4BAA4B;AACxD;AAEO,IAAM,oBAAoB,CAAC,aAAa,0CAAY,QAAiB;AACxE,QAAM,wBAAwB,wBAAwB;AACtD,SAAO,yBAAyB,eAAe,0CAAY;AAC/D;;;ACTO,IAAM,uBAAuB;AAEpC,IAAM,mBAAmB,0BAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAShC,IAAM,kBAAkB,0BAAO;AAAA,cAIjB,oBAAoB;AAAA;AAAA;AAAA,aAGrB,WAAS,MAAM,SAAS;AAAA,wBACb,WAAS,MAAM,eAAe;AAAA,wBAC9B,WAAS,MAAM,eAAe;AAAA;AAStD,IAAM,mBAAmB,CAAC,UAAmD;AACzE,MAAI,UAAU,QAAQ,UAAU,QAAW;AACvC,WAAO;AAAA,EACX;AACA,MAAI,OAAO,UAAU,UAAU;AAC3B,WAAO;AAAA,EACX;AACA,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,WAAW;AACzD,WAAO,MAAM,SAAS;AAAA,EAC1B;AACA,MAAI,OAAO,UAAU,UAAU;AAC3B,WAAO,MAAM,SAAS;AAAA,EAC1B;AACA,MAAI;AACA,WAAO,KAAK,UAAU,KAAK;AAAA,EAC/B,SAAQ;AAEJ,WAAO,OAAO,UAAU,WAAW,MAAM,SAAS,IAAI;AAAA,EAC1D;AACJ;AAEO,IAAM,eAAe,CAAC,UAA6B;AACtD,QAAM,YAAY,iBAAiB,MAAM,UAAU;AACnD,SACI;AAAA,IAAC;AAAA;AAAA,MACG,WAAW,MAAM;AAAA,MACjB,iBAAiB,MAAM;AAAA,MACvB,aAAU;AAAA,MACV,OAAO;AAAA;AAAA,IAEP,4CAAC,wBAAkB,SAAU;AAAA,EACjC;AAER;;;AhBjCA,IAAM,2BAA2B,0BAAO;AAAA;AAAA,MAKlC,eAAS,+BAAY,qBAAK,OAAO,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAarD,IAAM,yBAAyB,CAClC,SACA,YACA,mBAC0B;AAC1B,QAAM,SAAS,mBAAK;AACpB,MAAI,gBAAgB;AAChB,WAAO,cAAc,IAAI;AAAA,EAC7B;AACA,MAAI,YAAY;AACZ,WAAO,eAAe,IAAI;AAAA,EAC9B;AACA,SAAO;AACX;AAQO,IAAM,6BAA6B,CACtC,gBACA,oBACU;AACV,MAAI,CAAC,iBAAiB;AAClB,WAAO;AAAA,EACX;AAGA,MAAI,eAAe,UAAU,gBAAgB,OAAO;AAChD,WAAO;AAAA,EACX;AAGA,MAAI,eAAe,gBAAgB,gBAAgB,aAAa;AAC5D,WAAO;AAAA,EACX;AAGA,MAAI,eAAe,cAAc,MAAM,gBAAgB,cAAc,GAAG;AACpE,WAAO;AAAA,EACX;AACA,MAAI,eAAe,eAAe,MAAM,gBAAgB,eAAe,GAAG;AACtE,WAAO;AAAA,EACX;AAEA,SAAO;AACX;AAEO,IAAM,cAAc,CAAC,YAAY,SAAS,YAAqB,mBAA4B;AAC9F,QAAM,UAAU,qCACT,qBAAK,YAAY,SAAS,WAAW,IAD5B;AAAA,IAEZ,MAAM,WAAW;AAAA,EACrB;AACA,SAAO,QAAQ;AAGf,MAAI,WAAW,YAAY;AACvB,WAAO;AAAA,MACH;AAAA,MACA,OAAO,KAAK,WAAW,UAAU,EAAE,OAAO,CAAC,KAAK,cAAc;AAC1D,YAAI,OAAO,SAAS,QAAQ,IAAI,WAAW,WAAW,SAAS;AAC/D,eAAO;AAAA,MACX,GAAG,CAAC,CAAC;AAAA,IACT;AAAA,EACJ;AAEA,QAAM,iBAAiB,uBAAuB,SAAS,YAAY,cAAc;AAEjF,MAAI,SAAS;AACT,YAAQ;AAAA,MACJ,MAAM;AAAA,MACN,eAAe;AAAA,MACf,SAAS;AAAA,IACb,CAAC;AAAA,EACL;AACJ;AAEO,IAAM,oBAAoB,CAAC,YAAY,SAAS,YAAqB,mBAA4B;AACpG,QAAM,UAAU;AAAA,IACZ,MAAM;AAAA,EACV;AAEA,QAAM,iBAAiB,uBAAuB,SAAS,YAAY,cAAc;AAEjF,MAAI,SAAS;AACT,YAAQ;AAAA,MACJ,MAAM;AAAA,MACN,eAAe;AAAA,MACf,SAAS;AAAA,IACb,CAAC;AAAA,EACL;AACJ;AAEO,IAAM,uBAAuB,CAChC,YACA,UACA,WACA,YACA,mBACC;AAvJL;AAyJI,MAAI,CAAC,YAAY;AACb;AAAA,EACJ;AAGA,QAAM,UAAQ,4CAAW,YAAX,mBAAqB,OAAM,CAAC;AAC1C,QAAM,EAAE,aAAa,UAAU,IAAI,iBAAiB,OAAO,WAAW,OAAO,WAAW,GAAG;AAE3F,QAAM,UAAU;AAAA,IACZ;AAAA,IACA,aAAa,WAAW;AAAA,IACxB;AAAA,IACA,WAAW,WAAW;AAAA,EAC1B;AAEA,QAAM,iBAAiB,uBAAuB,SAAS,YAAY,cAAc;AAEjF,MAAI,UAAU;AACV,aAAS;AAAA,MACL,MAAM;AAAA,MACN,eAAe;AAAA,MACf,SAAS;AAAA,IACb,CAAC;AAAA,EACL;AACJ;AAEO,IAAM,kBAAkB,CAC3B,YACA,UACA,WACA,YACA,mBACC;AAzLL;AA2LI,QAAM,UAAQ,4CAAW,YAAX,mBAAqB,OAAM,CAAC;AAC1C,QAAM,EAAE,aAAa,UAAU,IAAI,iBAAiB,OAAO,WAAW,OAAO,WAAW,GAAG;AAE3F,QAAM,UAAU;AAAA,IACZ;AAAA,IACA,aAAa,WAAW;AAAA,IACxB;AAAA,IACA,WAAW,WAAW;AAAA,EAC1B;AAEA,QAAM,iBAAiB,uBAAuB,SAAS,YAAY,cAAc;AAEjF,MAAI,UAAU;AACV,aAAS;AAAA,MACL,MAAM;AAAA,MACN,eAAe;AAAA,MACf,SAAS;AAAA,IACb,CAAC;AAAA,EACL;AACJ;AAEO,IAAM,wBAAwB,CACjC,YACA,kBACA,iBACA,YACA,gBACA,cAAc,MACd,oBAAoB,SACnB;AAED,MAAI,CAAC,YAAY;AACb,QAAI,mBAAmB,aAAa;AAChC,sBAAgB;AAAA,QACZ,MAAM;AAAA,QACN,eAAe;AAAA,QACf,SAAS;AAAA,MACb,CAAC;AAAA,IACL;AACA,WAAO,EAAE,SAAS,MAAM,eAAe,KAAK;AAAA,EAChD;AAGA,QAAM,UAAU,qCACT,qBAAK,YAAY,SAAS,aAAa,QAAQ,SAAS,aAAa,IAD5D;AAAA,IAEZ,MAAM,WAAW;AAAA,EACrB;AACA,SAAO,QAAQ;AAGf,MAAI,WAAW,YAAY;AACvB,WAAO;AAAA,MACH;AAAA,MACA,OAAO,KAAK,WAAW,UAAU,EAAE,OAAO,CAAC,KAAK,cAAc;AAC1D,YAAI,OAAO,SAAS,QAAQ,IAAI,WAAW,WAAW,SAAS;AAC/D,eAAO;AAAA,MACX,GAAG,CAAC,CAAC;AAAA,IACT;AAAA,EACJ;AAEA,QAAM,iBAAiB,uBAAuB,SAAS,YAAY,cAAc;AAEjF,MAAI,kBAAkB;AAClB,qBAAiB;AAAA,MACb,MAAM;AAAA,MACN,eAAe;AAAA,MACf,SAAS;AAAA,IACb,CAAC;AAAA,EACL;AAGA,SAAO,EAAE,SAAS,gBAAgB,eAAe,WAAW;AAChE;AAKO,IAAM,mBAAmB,CAC5B,UAC8B;AAC9B,MAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,WAAO;AAAA,EACX;AACA,MAAI,OAAO;AACP,WAAO,KAAK,MAAM,KAAK;AAAA,EAC3B;AACA,SAAO;AACX;AAEA,IAAM,0BAA0B,CAAC;AAAA;AAAA,EAE7B,gBAAgB,UAAa,gBAAgB,OAAO,mBAAe,KAAI;AAAA;AAE3E,IAAM,0BAA0B,CAC5B,gBACA,gBACqB;AACrB,MAAI,eAAgB,QAAO,OAAO,cAAc;AAChD,MAAI,YAAa,QAAO,OAAO,WAAW;AAC1C,SAAO;AACX;AAEA,IAAM,iBAAiB,CAAC;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAUM;AACF,QAAM,kBAAkB,YAAY,QAAQ,OAAO,WAAS,CAAC,SAAS,SAAS,KAAK,CAAC,IAAI;AACzF,QAAM,kBAAkB,SAAS,SAAS,IAAI,WAAW;AAEzD,QAAM,aAAa;AAAA,IACf,sBAAsB,gBAAgB,iBAAiB,oBAAoB;AAAA,IAC3E;AAAA,EACJ;AACA,QAAM,cAAc;AAAA,IAChB,sBAAsB,iBAAiB,iBAAiB,qBAAqB;AAAA,IAC7E;AAAA,EACJ;AAEA,SAAO,EAAE,YAAY,YAAY;AACrC;AAEA,IAAM,yBAAyB,CAAC,UAAyB;AArUzD;AAsUI,QA6BI,YA5BA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IAEA,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,EAjW5B,IAmWQ,IADG,yBACH,IADG;AAAA,IA3BH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA;AASJ,QAAM,EAAE,eAAe,QAAQ,gBAAgB,IAAI;AACnD,QAAM,iBAAiB,kBAAkB,aAAa;AACtD,QAAM;AAAA,IACF,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,yBAAyB;AAAA,IACzB,yBAAyB;AAAA,IACzB,0BAA0B;AAAA,IAC1B,oCAAoC;AAAA,IACpC,wCAAwC;AAAA,IACxC,6BAA6B;AAAA,IAC7B,oCAAoC;AAAA,IACpC,yBAAyB;AAAA,IACzB,qCAAqC;AAAA,IACrC,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,eAAe;AAAA,IACf,uBAAuB;AAAA,IACvB,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,6BAA6B;AAAA,IAC7B,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,IACvB,wBAAwB;AAAA,IACxB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB;AAAA,IACA,oBAAoB;AAAA,IACpB,UAAU;AAAA,IACV,UAAU;AAAA,IACV,WAAW;AAAA,IACX,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,mBAAmB;AAAA,IACnB,oBAAoB;AAAA;AAAA,IAEpB,iBAAiB;AAAA,IACjB,OAAO;AAAA,EACX,IAAI;AAGJ,QAAM,oBAAoB,mBAAmB,SAAS,QAAQ;AAI9D,QAAM,oBAAoB,kEAA8B;AACxD,QAAM,qBAAqB,oEAA+B;AAI1D,QAAM,kBAAkB,6BAA6B;AACrD,QAAM,kBAAkB,6BAA6B;AACrD,QAAM,mBAAmB,8BAA8B;AACvD,QAAM,kBAAkB,6BAA6B;AACrD,QAAM,mBAAmB,8BAA8B;AAEvD,QAAM,gBAAgB,yBAAyB,mBAAmB;AAClE,QAAM,gBAAgB,wBAAwB;AAC9C,QAAM,iBAAiB,yBAAyB;AAGhD,QAAM,WAAW,eAAe,WAAW;AAC3C,QAAM,WAAW,eAAe,WAAW;AAC3C,QAAM,YAAY,eAAe,YAAY;AAC7C,QAAM,YAAY,eAAe,YAAY;AAI7C,QAAM,4BAA4B;AAAA,IAC9B;AAAA,IACA;AAAA,EACJ;AACA,QAAM,6BAA6B;AAAA,IAC/B;AAAA,IACA;AAAA,EACJ;AACA,QAAM,wBAAwB,sBAAsB,OAAO,OAAO,kBAAkB,IAAI;AACxF,QAAM,wBAAwB,sBAAsB,OAAO,OAAO,kBAAkB,IAAI;AACxF,QAAM,yBAAyB,uBAAuB,OAAO,OAAO,mBAAmB,IAAI;AAC3F,QAAM,wBAAwB,sBAAsB,OAAO,OAAO,kBAAkB,IAAI;AACxF,QAAM,yBAAyB,uBAAuB,OAAO,OAAO,mBAAmB,IAAI;AAE3F,QAAM,uBAAuB,wBAAwB,WAAW;AAChE,QAAM,eAAe,kBAAkB,KAAK,MAAM,eAAe,IAAI;AACrE,QAAM,sBAAsB,cAAc,KAAK,MAAM,WAAW,IAAI;AACpE,QAAM,wBAAwB,2BAA2B,KAAK,MAAM,wBAAwB,IAAI;AAChG,QAAM,uBAAuB,0BAA0B,KAAK,MAAM,uBAAuB,IAAI;AAC7F,QAAM,eAAe,iBAAiB,eAAe;AACrD,QAAM,UAAU,mBAAmB;AACnC,QAAM,CAAC,gBAAgB,iBAAiB,IAAU,uBAAS,OAAO,MAAM,KAAK,CAAC;AAC9E,QAAM,CAAC,iBAAiB,kBAAkB,IAAU,uBAAS,OAAO,MAAM,MAAM,CAAC;AACjF,QAAM,qBAA2B,0BAAY,CAAC,GAAG,MAAM;AACnD,sBAAkB,CAAC;AACnB,uBAAmB,CAAC;AAAA,EACxB,GAAG,CAAC,CAAC;AACL,QAAM,oBAAoB,kCAAkC;AAAA,IACxD,QAAQ,UAAU;AAAA,IAClB,SAAS,UAAU;AAAA,EACvB,CAAC;AAED,QAAM,SAAS,aAAa,kBAAkB,OAAO,CAAC,CAAC;AACvD,QAAM,UAAU;AAAA,IACZ,kBAAkB,OAAO,SAAS,IAAI,kBAAkB,OAAO,MAAM,CAAC,IAAI,CAAC;AAAA,EAC/E;AACA,QAAM,eAAW;AAAA,IACb,MAAO,cAAc,YAAY,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC,IAAI,CAAC;AAAA,IAClE,CAAC,WAAW;AAAA,EAChB;AACA,QAAM,oBAAgB;AAAA,IAClB,MAAO,mBAAmB,iBAAiB,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC,IAAI,CAAC;AAAA,IAC5E,CAAC,gBAAgB;AAAA,EACrB;AAEA,MAAI,aAAa,sBAAsB,gBAAgB,CAAC,MAAM,GAAG,oBAAoB;AACrF,eAAa,kBAAkB,YAAY,cAAc;AACzD,QAAM,EAAE,YAAY,YAAY,IAAI,eAAe;AAAA,IAC/C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AAED,QAAM,mBAAe;AAAA,IACjB,MAAM,gBAAgB,YAAY,sBAAsB,kBAAkB;AAAA,IAC1E,CAAC,YAAY,sBAAsB,kBAAkB;AAAA,EACzD;AACA,QAAM,eAAe,cAAc;AACnC,QAAM,mBAAe;AAAA,IACjB,MAAM;AACF,YAAM,SAAS;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAGA,UAAI,cAAc;AACd,eAAO,EAAE,UAAU,CAAC,MAAc,GAAG,KAAK,MAAM,IAAI,GAAG,CAAC;AACxD,eAAO,EAAE,QAAQ,MAAM,CAAC,GAAG,CAAC;AAAA,MAChC;AACA,aAAO;AAAA,IACX;AAAA;AAAA,IAEA,CAAC,YAAY,mBAAmB,YAAY,sBAAsB,UAAU,UAAU,YAAY;AAAA,EACtG;AACA,QAAM,oBAAgB,uBAAQ,MAAM;AAChC,QAAI,WAAW;AACX,aAAO;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,CAAC;AAAA,EACZ,GAAG;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AACD,QAAM,4BAAwB,sBAAO,IAAI;AAEzC,QAAM,sBAAsB;AAAA,IACxB,kBAAkB,QAAQ,CAAC;AAAA,IAC3B,GAAG,wBAAwB,kBAAkB,QAAQ,MAAM,CAAC,CAAC;AAAA,EACjE;AACA,YAAU,SAAS,kBAAkB;AACrC,YAAU,UAAU;AAGpB,QAAM,sBAAsB,cAAc,aAAa,cAAc,eAAe,YAAY;AAGhG,QAAM,sBAAkB;AAAA,IACpB,MACI,mBAAmB;AAAA,MACf,SAAS;AAAA,MACT,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN,WAAW;AAAA,MACX;AAAA,IACJ,CAAC;AAAA,IACL;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AAGA,QAAM,+BAA2B;AAAA,IAC7B,MACI,wBAAwB;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,IACL,CAAC,aAAa,iBAAiB,eAAe;AAAA,EAClD;AAGA,QAAM,kBAAc;AAAA,IAChB,MAAO,iDAAK,eAAiB,eAAiB;AAAA,IAC9C,CAAC,cAAc,cAAc,aAAa;AAAA,EAC9C;AAMA,QAAM,kBAAkB,eAAe;AACvC,QAAM,aAAS;AAAA,IACX,MACI,UAAU;AAAA,MACN,eAAe,mBAAmB,kBAAkB,QAAQ,UAAU;AAAA,MACtE;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,IACL,CAAC,eAAe,iBAAiB,gBAAgB;AAAA,EACrD;AAGA,QAAM,mBAAyB;AAAA,IAC3B,WAAS;AAEL,UAAI,SAAS;AACT,oBAAY,OAAO,SAAS,YAAY,cAAc;AAAA,MAC1D;AAAA,IACJ;AAAA,IACA,CAAC,SAAS,YAAY,cAAc;AAAA,EACxC;AAEA,QAAM,yBAA+B;AAAA,IACjC,WAAS;AAEL,UAAI,SAAS;AACT,0BAAkB,OAAO,SAAS,YAAY,cAAc;AAAA,MAChE;AAAA,IACJ;AAAA,IACA,CAAC,SAAS,YAAY,cAAc;AAAA,EACxC;AAEA,QAAM,4BAAkC;AAAA,IACpC,WAAS;AAEL,UAAI,UAAU;AACV,6BAAqB,OAAO,UAAU,WAAW,YAAY,cAAc;AAAA,MAC/E;AAAA,IAEJ;AAAA,IACA,CAAC,UAAU,WAAW,YAAY,cAAc;AAAA,EACpD;AAEA,QAAM,uBAA6B;AAAA,IAC/B,WAAS;AAEL,UAAI,UAAU;AACV,wBAAgB,OAAO,UAAU,WAAW,YAAY,cAAc;AAAA,MAC1E;AAAA,IACJ;AAAA,IACA,CAAC,UAAU,WAAW,YAAY,cAAc;AAAA,EACpD;AAIA,QAAM,cAAc,mBAAmB;AACvC,QAAM,mBAAyB;AAAA,IAC3B,MAAM,uBAAuB,eAAe,WAAW;AAAA,IACvD,CAAC,eAAe,WAAW;AAAA,EAC/B;AAGA,QAAM,iBAAuB,qBAAmC,IAAI;AACpE,QAAM,uBAA6B,qBAAY,IAAI;AAEnD,QAAM,8BAAoC,qBAAuC,IAAI;AAGrF,QAAM,6BAAmC,qBAAO,uBAAuB;AACvE,EAAM,wBAAU,MAAM;AAClB,+BAA2B,UAAU;AAAA,EACzC,GAAG,CAAC,uBAAuB,CAAC;AAE5B,QAAM,0BAAgC,0BAAY,MAAM;AACpD,QAAI,mBAAmB,eAAe,SAAS;AAC3C,sBAAgB;AAAA,QACZ,MAAM;AAAA,QACN,eAAe,qBAAqB;AAAA,QACpC,SAAS,eAAe;AAAA,MAC5B,CAAC;AAAA,IACL;AACA,gCAA4B,UAAU;AAAA,EAC1C,GAAG,CAAC,eAAe,CAAC;AAEpB,QAAM,6BAAmC;AAAA,IACrC,WAAS;AAEL,UAAI,CAAC,oBAAoB,CAAC,iBAAiB;AACvC;AAAA,MACJ;AAGA,UAAI,CAAC,OAAO;AACR,gCAAwB;AACxB;AAAA,MACJ;AAGA,YAAM,UAAU,qCACT,qBAAK,OAAO,SAAS,aAAa,QAAQ,SAAS,aAAa,IADvD;AAAA,QAEZ,MAAM,MAAM;AAAA,MAChB;AACA,aAAO,QAAQ;AAGf,UAAI,MAAM,YAAY;AAClB,eAAO;AAAA,UACH;AAAA,UACA,OAAO,KAAK,MAAM,UAAU,EAAE,OAAO,CAAC,KAAK,cAAc;AACrD,gBAAI,OAAO,SAAS,QAAQ,IAAI,MAAM,WAAW,SAAS;AAC1D,mBAAO;AAAA,UACX,GAAG,CAAC,CAAC;AAAA,QACT;AAAA,MACJ;AAEA,YAAM,iBAAiB,uBAAuB,SAAS,YAAY,cAAc;AAGjF,UAAI,CAAC,2BAA2B,gBAAgB,4BAA4B,OAAO,GAAG;AAClF;AAAA,MACJ;AAGA,qBAAe,UAAU;AACzB,2BAAqB,UAAU;AAE/B,kCAA4B,UAAU,mBAAK;AAE3C,UAAI,kBAAkB;AAClB,yBAAiB;AAAA,UACb,MAAM;AAAA,UACN,eAAe;AAAA,UACf,SAAS;AAAA,QACb,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,IACA,CAAC,kBAAkB,iBAAiB,YAAY,gBAAgB,uBAAuB;AAAA,EAC3F;AAGA,QAAM,UAAU,IAAG,eAAU,QAAQ,CAAC,MAAnB,mBAAuB,EAAE,KAAI,eAAU,QAAQ,CAAC,MAAnB,mBAAuB,UAAU,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAI,eAAU,QAAQ,CAAC,MAAnB,mBAAsB,MAAM;AAEvI,QAAM,oBAAgB,uBAAQ,MAAM;AAEhC,UAAM,sBAAsB,WAAW,uBAAuB;AAE9D,WACI,4CAAC,uDAAuB,KAAK,WACzB;AAAA,MAAC;AAAA;AAAA,QACG,MAAM;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA,iBAAiB,eAAe;AAAA,QAChC,gBAAgB,eAAe,kBAAkB,IAAI;AAAA,QACrD;AAAA,QACA,iBAAgB;AAAA,QAChB,kBAAkB,UAAU,mBAAmB;AAAA,QAC/C,mBACI,oBAAoB,kBAAkB,6BAA6B;AAAA,QAEvE,eAAe,UAAU,yBAAyB;AAAA,QAClD,kBAAkB;AAAA,QAClB,aAAa;AAAA,QACb,gBAAgB;AAAA,QAChB;AAAA,QACA,QAAQ;AAAA,QACR,cAAc,EAAE,UAAU,gCAAgC;AAAA,QAC1D;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,oBAAoB;AAAA,QACpB;AAAA,QACA;AAAA,QACA,oBAAoB;AAAA,QACpB,qBAAqB;AAAA,QACrB,wBAAwB;AAAA,QACxB,yBAAyB;AAAA,QACzB;AAAA,QACA;AAAA,QACA,oBAAoB;AAAA,QACpB,qBAAqB;AAAA,QACrB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,aAAa;AAAA;AAAA,IACjB,CACJ;AAAA,EAIR,GAAG;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AAED,QAAM,4BAAwB,uBAAQ,MAAM;AACxC,WAAO,4CAAC,2BAAgB,iBAAiB,WAAU,aAAc;AAAA,EACrE,GAAG,CAAC,SAAS,aAAa,CAAC;AAE3B,SACI,0EACK,kBACG;AAAA,IAAC;AAAA;AAAA,MACG;AAAA,MACA,iBAAiB;AAAA,MACjB,WAAW;AAAA;AAAA,EACf,GAEJ;AAAA,IAAC;AAAA;AAAA,MACG,QAAQ,iBAAiB,OAAO,MAAM,IAAI,uBAAuB;AAAA,MACjE;AAAA,MACA,KAAK;AAAA,MACL,aAAU;AAAA;AAAA,IAEV,4CAAC,4BAAiB,OAAc,QAAgB,UAAU,oBAAoB;AAAA,IAC7E;AAAA,EACL,CACJ;AAER;AAEA,IAAO,iCAAQ;",
6
+ "names": ["defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "_a", "defaultImport", "defaultImport"]
7
7
  }
@@ -5,6 +5,15 @@ import type { JsonColumnData } from './interfaces/DataSource';
5
5
  interface ChartOptions {
6
6
  [key: string]: any;
7
7
  }
8
+ interface TransformAxisChartOptionsParams {
9
+ originalOptions: Record<string, any>;
10
+ optionsSchema: Record<string, any>;
11
+ chart: string;
12
+ convertToSCProps: (options: Record<string, any>) => Record<string, any>;
13
+ preservedProps: string[];
14
+ }
15
+ export declare const SHARED_AXIS_CHART_CANVAS_SPECIFIC_PROPS: string[];
16
+ export declare const transformAxisChartOptions: ({ originalOptions, optionsSchema, chart, convertToSCProps, preservedProps, }: TransformAxisChartOptionsParams) => Record<string, any>;
8
17
  export declare const DEFAULT_LINE_WIDTH = 2;
9
18
  /**
10
19
  * Get formatted annotations - highcharts expects annotations in a specific format
@@ -56,7 +65,7 @@ export declare const truncateData: (dataSet: any, truncationLimit: any) => Recor
56
65
  * @returns {Object}
57
66
  */
58
67
  export declare const mapToValues: (optionValuesSCMapping: Record<string, any>) => (options: any) => Record<string, any>;
59
- interface y2AxisOptions extends ChartOptions {
68
+ interface Y2AxisOptions extends ChartOptions {
60
69
  y2Fields?: string | string[];
61
70
  }
62
71
  /**
@@ -65,7 +74,7 @@ interface y2AxisOptions extends ChartOptions {
65
74
  * @param {Object} originalOptions
66
75
  * @returns {Object}
67
76
  */
68
- export declare const convertY2AxisOptions: ({ y2Fields, ...originalOptions }: y2AxisOptions) => Record<string, any>;
77
+ export declare const convertY2AxisOptions: ({ y2Fields, ...originalOptions }: Y2AxisOptions) => Record<string, any>;
69
78
  /**
70
79
  * Helper method to format value for overlayFields
71
80
  * @method convertOverlayFields
@@ -114,6 +123,11 @@ type TooltipFieldRecord = Record<string, string | number | null>;
114
123
  export declare function extractAdditionalTooltipValues(columns: (string | number | null)[][], fields: {
115
124
  name: string;
116
125
  }[], additionalTooltipFields: string[]): TooltipFieldRecord[];
126
+ export type AdditionalTooltipResult = TooltipFieldRecord[];
127
+ export declare const areStringArraysEqual: (a: string[] | undefined, b: string[] | undefined) => boolean;
128
+ export declare const createAdditionalTooltipValuesMemoizer: () => (columns: (string | number | null)[][], fields: {
129
+ name: string;
130
+ }[], additionalTooltipFields: string[] | undefined) => AdditionalTooltipResult | undefined;
117
131
  interface OptionsProps {
118
132
  events?: string[];
119
133
  selectedItemId?: string;
@@ -201,10 +215,22 @@ export declare const getYScaleConfig: (label: string, yAxisAbbreviation: string,
201
215
  * @returns
202
216
  */
203
217
  export declare const getY2ScaleConfig: (label: string, axisAbbreviation: string, axisScale?: "linear" | "log", roundAxisLabelsToInteger?: boolean, y2AxisLabelVisibility?: AxisLabelVisibility, y2AxisMin?: number, y2AxisMax?: number) => ScaleConfig;
204
- /**
205
- * Add series overrides for viz-canvas charts (for eg:- line width)
206
- */
207
- export declare const getSeriesOverrides: (yfields: string[], y2fields?: string[], lineWidth?: number, overlayFields?: string[], y2Enabled?: boolean, nullValueMode?: "gaps" | "connect" | "zero", markerDisplay?: "off" | "filled" | "outlined", lineDashStyle?: string, lineDashStylesByField?: Record<string, string>, stepPosition?: "off" | "before" | "after", stepPositionsByField?: Record<string, "off" | "before" | "after">) => SeriesConfig;
218
+ export declare const getSeriesOverrides: (opts: {
219
+ yfields: string[];
220
+ y2fields?: string[];
221
+ lineWidth?: number;
222
+ overlayFields?: string[];
223
+ y2Enabled?: boolean;
224
+ nullValueMode?: "gaps" | "connect" | "zero";
225
+ markerDisplay?: "off" | "filled" | "outlined";
226
+ lineDashStyle?: string;
227
+ lineDashStylesByField?: Record<string, string>;
228
+ stepPosition?: "off" | "before" | "after";
229
+ stepPositionsByField?: Record<string, "off" | "before" | "after">;
230
+ type?: "line" | "area";
231
+ stackMode?: "auto" | "stacked" | "stacked100";
232
+ showLines?: boolean;
233
+ }) => SeriesConfig;
208
234
  /**
209
235
  * Finds the start and end indices in time series data for a given range.
210
236
  * @param xData - Array of time values (can be ISO strings or epoch timestamps)
@@ -1 +1 @@
1
- {"version":3,"file":"chartingUtils.d.ts","sourceRoot":"","sources":["../src/common/chartingUtils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAEH,MAAM,EAIN,WAAW,EAEX,YAAY,EACZ,eAAe,EACf,4BAA4B,EAC/B,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,UAAU,YAAY;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,GAAI;;;;CAAiD,QAOpE,CAAC;AAEb;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,GAAI;;;;CAIvC,KAAG,eAAe,EAOP,CAAC;AASb;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CAYlF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GAAI,YAAO,EAAE,oBAAe,KAAG,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAiB3E,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,uBAAuB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAAK,YAAO,wBAWjF,CAAC;AAEF,UAAU,aAAc,SAAQ,YAAY;IACxC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAChC;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,kCAGlC,aAAa,KAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAWpC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,iBAAiB,YAAY,KAAG,YAcpE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,KAAG,OACf,CAAC;AAClD;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,SAAI,EAAE,UAAK,KAAG,GAAG,EAKjD,CAAC;AACF,UAAU,+BAA+B;IACrC,CAAC,EAAE,MAAM,EAAE,CAAC;IACZ,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAChC;AACD,eAAO,MAAM,yBAAyB,GAAI,0CAOvC,+BAA+B,KAAG,cAuBpC,CAAC;AAEF,wBAAgB,mCAAmC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,EAAE;;;;CAAA,MAW/F;AAED;;;;;;;;;GASG;AAEH,KAAK,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;AAEjE,wBAAgB,8BAA8B,CAC1C,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,EACrC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EAC1B,uBAAuB,EAAE,MAAM,EAAE,GAClC,kBAAkB,EAAE,CA8BtB;AAKD,UAAU,YAAY;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AACD,UAAU,YAAY;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;CACzB;AAED,eAAO,MAAM,sBAAsB,GAAI,gBAAe,YAAY,EAAO,EAAE,eAAW,YASrF,CAAC;AAGF,eAAO,MAAM,iCAAiC,GAAI,cAAc,MAAM,KAAG,OAExE,CAAC;AAEF,KAAK,SAAS,GAAG;IACb,MAAM,EAAE,CAAC,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;IACtC,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,CAAC;CAClC,CAAC;AAGF,eAAO,MAAM,iCAAiC,GAAI,WAAW,SAAS,KAAG,SAiBxE,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,UAAK,KAAG,OAKnC,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAG,QAAG,QAEzC,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAG,QAAG,QAEzC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,KAAK,GAAG,KAAG,MAAM,GAAG,SAMlD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GAAI,aAAa,MAAM,KAAG,OAAO,GAAG,SAIxE,CAAC;AAGF,eAAO,MAAM,SAAS,GAAI,OAAO;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACvC,KAAG,MAAM,GAAG,KAmCZ,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAC9B,gBAAgB,MAAM,EACtB,QAAQ,MAAM,EAAE,EAChB,qBAAqB,MAAM,GAAG,WAAW,KAC1C,MASF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,WAAW,MAAM,EAAE,kBAAkB,MAAM,EAAE,iBAAa,KAAG,MAoC9F,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,GAAG,WAAW,KAAG,MAG1D,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,QAAQ,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE,KAAG,MAAM,EAEtE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3D;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GACxB,OAAO,MAAM,EACb,uBAAuB,mBAAmB,EAC1C,qBAAqB,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,KAC7C,WAYF,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,GACxB,OAAO,MAAM,EACb,mBAAmB,MAAM,EACzB,aAAa,QAAQ,GAAG,KAAK,EAC7B,uBAAuB,mBAAmB,EAC1C,WAAW,MAAM,EACjB,WAAW,MAAM,KAClB,WAyBF,CAAC;AACF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,GACzB,OAAO,MAAM,EACb,kBAAkB,MAAM,EACxB,YAAY,QAAQ,GAAG,KAAK,EAC5B,2BAA2B,OAAO,EAClC,wBAAwB,mBAAmB,EAC3C,YAAY,MAAM,EAClB,YAAY,MAAM,KACnB,WA6BF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC3B,SAAS,MAAM,EAAE,EACjB,WAAW,MAAM,EAAE,EACnB,YAAY,MAAM,EAClB,gBAAgB,MAAM,EAAE,EACxB,YAAY,OAAO,EACnB,gBAAgB,MAAM,GAAG,SAAS,GAAG,MAAM,EAC3C,gBAAgB,KAAK,GAAG,QAAQ,GAAG,UAAU,EAC7C,gBAAgB,MAAM,EACtB,wBAAwB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9C,eAAe,KAAK,GAAG,QAAQ,GAAG,OAAO,EACzC,uBAAuB,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC,KAClE,YA2EF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GACzB,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAC1B,YAAY,MAAM,EAClB,UAAU,MAAM,KACjB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAuC1C,CAAC"}
1
+ {"version":3,"file":"chartingUtils.d.ts","sourceRoot":"","sources":["../src/common/chartingUtils.ts"],"names":[],"mappings":"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"}