@splunk/visualizations 28.6.0 → 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 (366) hide show
  1. package/Area.js +2 -2
  2. package/Bar.js +2 -2
  3. package/Bubble.js +2 -2
  4. package/CHANGELOG.external.md +19 -50
  5. package/ChoroplethSvg.js +2 -2
  6. package/Column.js +2 -2
  7. package/Ellipse.js +2 -2
  8. package/Events/PureEvents/FieldSummaryTooltip.d.ts +8 -31
  9. package/Events/PureEvents/FieldSummaryTooltip.d.ts.map +1 -1
  10. package/Events/PureEvents/PureEvents.d.ts.map +1 -1
  11. package/Events/PureEvents/TimeControlsPopover.d.ts +6 -25
  12. package/Events/PureEvents/TimeControlsPopover.d.ts.map +1 -1
  13. package/Events.js +27 -101
  14. package/Events.js.map +2 -2
  15. package/FillerGauge.js +2 -2
  16. package/Image.js +2 -2
  17. package/Line.js +2 -2
  18. package/LinkGraph.js +2 -2
  19. package/Map/Map.d.ts +1 -0
  20. package/Map/Map.d.ts.map +1 -1
  21. package/Map/PureMap/BubbleLayer.d.ts +22 -4
  22. package/Map/PureMap/BubbleLayer.d.ts.map +1 -1
  23. package/Map/PureMap/ChoroplethLayer.d.ts +9 -1
  24. package/Map/PureMap/ChoroplethLayer.d.ts.map +1 -1
  25. package/Map/PureMap/ClusterLayer.d.ts +3 -1
  26. package/Map/PureMap/ClusterLayer.d.ts.map +1 -1
  27. package/Map/PureMap/LocalChoroplethLayer.d.ts +1 -0
  28. package/Map/PureMap/LocalChoroplethLayer.d.ts.map +1 -1
  29. package/Map/PureMap/MapContext.d.ts +13 -0
  30. package/Map/PureMap/MapContext.d.ts.map +1 -0
  31. package/Map/PureMap/MarkerLayer.d.ts +19 -2
  32. package/Map/PureMap/MarkerLayer.d.ts.map +1 -1
  33. package/Map/PureMap/MarkerWrapper.d.ts +3 -2
  34. package/Map/PureMap/MarkerWrapper.d.ts.map +1 -1
  35. package/Map/PureMap/PureMap.d.ts +1 -0
  36. package/Map/PureMap/PureMap.d.ts.map +1 -1
  37. package/Map/PureMap/PureMapContainer.d.ts.map +1 -1
  38. package/Map/PureMap/Tooltip.d.ts +6 -1
  39. package/Map/PureMap/Tooltip.d.ts.map +1 -1
  40. package/Map/PureMap/keyboardConstants.d.ts +11 -0
  41. package/Map/PureMap/keyboardConstants.d.ts.map +1 -0
  42. package/Map/PureMap/useRovingTabindex.d.ts +18 -0
  43. package/Map/PureMap/useRovingTabindex.d.ts.map +1 -0
  44. package/Map.js +1317 -478
  45. package/Map.js.map +4 -4
  46. package/Markdown/Markdown.d.ts.map +1 -1
  47. package/Markdown.js +23 -6
  48. package/Markdown.js.map +2 -2
  49. package/MarkerGauge.js +2 -2
  50. package/NetworkGraph/NetworkGraph.d.ts +2 -5
  51. package/NetworkGraph/NetworkGraph.d.ts.map +1 -1
  52. package/NetworkGraph/PureNetworkGraph/PureNetworkGraph.d.ts.map +1 -1
  53. package/NetworkGraph/PureNetworkGraph/components/NetworkGraphSvg.d.ts +1 -0
  54. package/NetworkGraph/PureNetworkGraph/components/NetworkGraphSvg.d.ts.map +1 -1
  55. package/NetworkGraph/PureNetworkGraph/components/Node.d.ts +1 -0
  56. package/NetworkGraph/PureNetworkGraph/components/Node.d.ts.map +1 -1
  57. package/NetworkGraph/PureNetworkGraph/components/Tooltip.d.ts +1 -1
  58. package/NetworkGraph/PureNetworkGraph/components/Tooltip.d.ts.map +1 -1
  59. package/NetworkGraph/PureNetworkGraph/components/ZoomControls.d.ts +1 -0
  60. package/NetworkGraph/PureNetworkGraph/components/ZoomControls.d.ts.map +1 -1
  61. package/NetworkGraph/PureNetworkGraph/utils/networkGraphUtils.d.ts +23 -0
  62. package/NetworkGraph/PureNetworkGraph/utils/networkGraphUtils.d.ts.map +1 -1
  63. package/NetworkGraph.config.js +2 -0
  64. package/NetworkGraph.config.js.map +2 -2
  65. package/NetworkGraph.js +353 -40
  66. package/NetworkGraph.js.map +4 -4
  67. package/ParallelCoordinates.js +2 -2
  68. package/Pie.js +2 -2
  69. package/ProcessTree/ProcessTree.d.ts +3 -1
  70. package/ProcessTree/ProcessTree.d.ts.map +1 -1
  71. package/ProcessTree/PureProcessTree/PureProcessTree.d.ts +1 -0
  72. package/ProcessTree/PureProcessTree/PureProcessTree.d.ts.map +1 -1
  73. package/ProcessTree/PureProcessTree/components/ProcessTreeLeftPanel.d.ts +2 -0
  74. package/ProcessTree/PureProcessTree/components/ProcessTreeLeftPanel.d.ts.map +1 -1
  75. package/ProcessTree/PureProcessTree/components/ProcessTreeRightPanel.d.ts.map +1 -1
  76. package/ProcessTree/PureProcessTree/hooks/useProcessTreeGraphData.d.ts +3 -1
  77. package/ProcessTree/PureProcessTree/hooks/useProcessTreeGraphData.d.ts.map +1 -1
  78. package/ProcessTree/PureProcessTree/mockdata/data.d.ts.map +1 -1
  79. package/ProcessTree/PureProcessTree/utils/processTreeUtils.d.ts +3 -1
  80. package/ProcessTree/PureProcessTree/utils/processTreeUtils.d.ts.map +1 -1
  81. package/ProcessTree.js +101 -31
  82. package/ProcessTree.js.map +3 -3
  83. package/Punchcard.js +2 -2
  84. package/README.md +2 -0
  85. package/Rectangle.js +2 -2
  86. package/RichText.js +2 -2
  87. package/Sankey.js +2 -2
  88. package/Scatter.js +2 -2
  89. package/SingleValue.js +368 -471
  90. package/SingleValue.js.map +4 -4
  91. package/SingleValueIcon.js +2 -2
  92. package/SingleValueRadial.js +2 -2
  93. package/SparkLine/SparkLine.d.ts +57 -0
  94. package/SparkLine/SparkLine.d.ts.map +1 -0
  95. package/SparkLine/index.d.ts +1 -1
  96. package/SparkLine/index.d.ts.map +1 -1
  97. package/SparkLine.js +384 -485
  98. package/SparkLine.js.map +4 -4
  99. package/Table/PureTable.d.ts.map +1 -1
  100. package/Table/hooks.d.ts +1 -1
  101. package/Table/hooks.d.ts.map +1 -1
  102. package/Table.js +391 -493
  103. package/Table.js.map +4 -4
  104. package/Timeline.js +2 -2
  105. package/common/OptionsDoc.js.map +1 -1
  106. package/common/utils/mapUtils.js +512 -179
  107. package/common/utils/mapUtils.js.map +4 -4
  108. package/common/utils/shadowDomUtils.d.ts +2 -0
  109. package/common/utils/shadowDomUtils.d.ts.map +1 -0
  110. package/common/utils/shadowDomUtils.js +39 -0
  111. package/common/utils/shadowDomUtils.js.map +7 -0
  112. package/common/withDashboardViz.js +2 -2
  113. package/docs-llm/INDEX.md +118 -0
  114. package/docs-llm/area/examples-json.md +3854 -0
  115. package/docs-llm/area/examples-react.md +2816 -0
  116. package/docs-llm/area/options.md +97 -0
  117. package/docs-llm/area/overview.md +27 -0
  118. package/docs-llm/bar/examples-json.md +3380 -0
  119. package/docs-llm/bar/examples-react.md +2352 -0
  120. package/docs-llm/bar/options.md +89 -0
  121. package/docs-llm/bar/overview.md +25 -0
  122. package/docs-llm/bubble/examples-json.md +4082 -0
  123. package/docs-llm/bubble/examples-react.md +3977 -0
  124. package/docs-llm/bubble/options.md +62 -0
  125. package/docs-llm/bubble/overview.md +26 -0
  126. package/docs-llm/choropleth-svg/examples-json.md +397 -0
  127. package/docs-llm/choropleth-svg/examples-react.md +389 -0
  128. package/docs-llm/choropleth-svg/options.md +15 -0
  129. package/docs-llm/choropleth-svg/overview.md +23 -0
  130. package/docs-llm/column/examples-json.md +3898 -0
  131. package/docs-llm/column/examples-react.md +2653 -0
  132. package/docs-llm/column/options.md +94 -0
  133. package/docs-llm/column/overview.md +31 -0
  134. package/docs-llm/dsl/examples-json.md +43 -0
  135. package/docs-llm/dsl/examples-react.md +78 -0
  136. package/docs-llm/dsl/formatters/format-by-type-examples-json.md +58 -0
  137. package/docs-llm/dsl/formatters/format-by-type-examples-react.md +43 -0
  138. package/docs-llm/dsl/formatters/format-by-type.md +38 -0
  139. package/docs-llm/dsl/formatters/frame-examples-json.md +42 -0
  140. package/docs-llm/dsl/formatters/frame-examples-react.md +24 -0
  141. package/docs-llm/dsl/formatters/frame.md +6 -0
  142. package/docs-llm/dsl/formatters/gradient-examples-json.md +98 -0
  143. package/docs-llm/dsl/formatters/gradient-examples-react.md +44 -0
  144. package/docs-llm/dsl/formatters/gradient.md +23 -0
  145. package/docs-llm/dsl/formatters/lerp-examples-json.md +40 -0
  146. package/docs-llm/dsl/formatters/lerp-examples-react.md +28 -0
  147. package/docs-llm/dsl/formatters/lerp.md +19 -0
  148. package/docs-llm/dsl/formatters/match-value-examples-json.md +65 -0
  149. package/docs-llm/dsl/formatters/match-value-examples-react.md +37 -0
  150. package/docs-llm/dsl/formatters/match-value.md +13 -0
  151. package/docs-llm/dsl/formatters/max-contrast-examples-json.md +39 -0
  152. package/docs-llm/dsl/formatters/max-contrast-examples-react.md +27 -0
  153. package/docs-llm/dsl/formatters/max-contrast.md +9 -0
  154. package/docs-llm/dsl/formatters/multi-format-examples-json.md +67 -0
  155. package/docs-llm/dsl/formatters/multi-format-examples-react.md +49 -0
  156. package/docs-llm/dsl/formatters/multi-format.md +12 -0
  157. package/docs-llm/dsl/formatters/objects-examples-json.md +49 -0
  158. package/docs-llm/dsl/formatters/objects-examples-react.md +37 -0
  159. package/docs-llm/dsl/formatters/objects.md +3 -0
  160. package/docs-llm/dsl/formatters/pick-examples-json.md +59 -0
  161. package/docs-llm/dsl/formatters/pick-examples-react.md +30 -0
  162. package/docs-llm/dsl/formatters/pick.md +9 -0
  163. package/docs-llm/dsl/formatters/prefix-examples-json.md +29 -0
  164. package/docs-llm/dsl/formatters/prefix-examples-react.md +19 -0
  165. package/docs-llm/dsl/formatters/prefix.md +3 -0
  166. package/docs-llm/dsl/formatters/prepend-examples-json.md +51 -0
  167. package/docs-llm/dsl/formatters/prepend-examples-react.md +33 -0
  168. package/docs-llm/dsl/formatters/prepend.md +9 -0
  169. package/docs-llm/dsl/formatters/range-value-examples-json.md +48 -0
  170. package/docs-llm/dsl/formatters/range-value-examples-react.md +34 -0
  171. package/docs-llm/dsl/formatters/range-value.md +15 -0
  172. package/docs-llm/dsl/formatters/set-color-channel-examples-json.md +40 -0
  173. package/docs-llm/dsl/formatters/set-color-channel-examples-react.md +31 -0
  174. package/docs-llm/dsl/formatters/set-color-channel.md +9 -0
  175. package/docs-llm/dsl/formatters/suffix-examples-json.md +29 -0
  176. package/docs-llm/dsl/formatters/suffix-examples-react.md +19 -0
  177. package/docs-llm/dsl/formatters/suffix.md +3 -0
  178. package/docs-llm/dsl/formatters/type-examples-json.md +37 -0
  179. package/docs-llm/dsl/formatters/type-examples-react.md +20 -0
  180. package/docs-llm/dsl/formatters/type.md +3 -0
  181. package/docs-llm/dsl/overview.md +41 -0
  182. package/docs-llm/dsl/selectors/abs.md +7 -0
  183. package/docs-llm/dsl/selectors/ceil.md +7 -0
  184. package/docs-llm/dsl/selectors/data-frame-average-examples-json.md +41 -0
  185. package/docs-llm/dsl/selectors/data-frame-average-examples-react.md +36 -0
  186. package/docs-llm/dsl/selectors/data-frame-average.md +7 -0
  187. package/docs-llm/dsl/selectors/data-frame-count-examples-json.md +41 -0
  188. package/docs-llm/dsl/selectors/data-frame-count-examples-react.md +36 -0
  189. package/docs-llm/dsl/selectors/data-frame-count.md +7 -0
  190. package/docs-llm/dsl/selectors/data-frame-examples-json.md +830 -0
  191. package/docs-llm/dsl/selectors/data-frame-examples-react.md +929 -0
  192. package/docs-llm/dsl/selectors/data-frame-get-field-examples-json.md +89 -0
  193. package/docs-llm/dsl/selectors/data-frame-get-field-examples-react.md +124 -0
  194. package/docs-llm/dsl/selectors/data-frame-get-field.md +5 -0
  195. package/docs-llm/dsl/selectors/data-frame-get-raw-value.md +5 -0
  196. package/docs-llm/dsl/selectors/data-frame-get-type.md +5 -0
  197. package/docs-llm/dsl/selectors/data-frame-get-value.md +5 -0
  198. package/docs-llm/dsl/selectors/data-frame-max-examples-json.md +51 -0
  199. package/docs-llm/dsl/selectors/data-frame-max-examples-react.md +41 -0
  200. package/docs-llm/dsl/selectors/data-frame-max.md +7 -0
  201. package/docs-llm/dsl/selectors/data-frame-min-examples-json.md +51 -0
  202. package/docs-llm/dsl/selectors/data-frame-min-examples-react.md +41 -0
  203. package/docs-llm/dsl/selectors/data-frame-min.md +7 -0
  204. package/docs-llm/dsl/selectors/data-frame-percentile-examples-json.md +41 -0
  205. package/docs-llm/dsl/selectors/data-frame-percentile-examples-react.md +36 -0
  206. package/docs-llm/dsl/selectors/data-frame-percentile.md +8 -0
  207. package/docs-llm/dsl/selectors/data-frame-set-value.md +5 -0
  208. package/docs-llm/dsl/selectors/data-frame-sum-examples-json.md +51 -0
  209. package/docs-llm/dsl/selectors/data-frame-sum-examples-react.md +41 -0
  210. package/docs-llm/dsl/selectors/data-frame-sum.md +7 -0
  211. package/docs-llm/dsl/selectors/data-frame.md +4 -0
  212. package/docs-llm/dsl/selectors/data-point-get-field.md +5 -0
  213. package/docs-llm/dsl/selectors/data-point-get-raw-value.md +4 -0
  214. package/docs-llm/dsl/selectors/data-point-get-type.md +5 -0
  215. package/docs-llm/dsl/selectors/data-point-get-value.md +5 -0
  216. package/docs-llm/dsl/selectors/data-point-set-value.md +4 -0
  217. package/docs-llm/dsl/selectors/data-point.md +5 -0
  218. package/docs-llm/dsl/selectors/data-series-average.md +22 -0
  219. package/docs-llm/dsl/selectors/data-series-count.md +14 -0
  220. package/docs-llm/dsl/selectors/data-series-get-field.md +5 -0
  221. package/docs-llm/dsl/selectors/data-series-get-raw-value.md +4 -0
  222. package/docs-llm/dsl/selectors/data-series-get-type.md +5 -0
  223. package/docs-llm/dsl/selectors/data-series-get-value.md +4 -0
  224. package/docs-llm/dsl/selectors/data-series-max.md +5 -0
  225. package/docs-llm/dsl/selectors/data-series-min.md +5 -0
  226. package/docs-llm/dsl/selectors/data-series-percentile.md +17 -0
  227. package/docs-llm/dsl/selectors/data-series-set-value.md +4 -0
  228. package/docs-llm/dsl/selectors/data-series-sum.md +24 -0
  229. package/docs-llm/dsl/selectors/data-series.md +4 -0
  230. package/docs-llm/dsl/selectors/delta.md +7 -0
  231. package/docs-llm/dsl/selectors/divide.md +8 -0
  232. package/docs-llm/dsl/selectors/first-point.md +5 -0
  233. package/docs-llm/dsl/selectors/floor.md +7 -0
  234. package/docs-llm/dsl/selectors/frame-by-series-index-range-examples-json.md +89 -0
  235. package/docs-llm/dsl/selectors/frame-by-series-index-range-examples-react.md +88 -0
  236. package/docs-llm/dsl/selectors/frame-by-series-index-range.md +10 -0
  237. package/docs-llm/dsl/selectors/frame-by-series-indexes-examples-json.md +88 -0
  238. package/docs-llm/dsl/selectors/frame-by-series-indexes-examples-react.md +87 -0
  239. package/docs-llm/dsl/selectors/frame-by-series-indexes.md +9 -0
  240. package/docs-llm/dsl/selectors/frame-by-series-names-examples-json.md +89 -0
  241. package/docs-llm/dsl/selectors/frame-by-series-names-examples-react.md +88 -0
  242. package/docs-llm/dsl/selectors/frame-by-series-names-or-indexes-examples-json.md +89 -0
  243. package/docs-llm/dsl/selectors/frame-by-series-names-or-indexes-examples-react.md +88 -0
  244. package/docs-llm/dsl/selectors/frame-by-series-names-or-indexes.md +9 -0
  245. package/docs-llm/dsl/selectors/frame-by-series-names.md +9 -0
  246. package/docs-llm/dsl/selectors/frame-by-series-types-examples-json.md +89 -0
  247. package/docs-llm/dsl/selectors/frame-by-series-types-examples-react.md +88 -0
  248. package/docs-llm/dsl/selectors/frame-by-series-types.md +9 -0
  249. package/docs-llm/dsl/selectors/frame-without-internal-fields-examples-json.md +137 -0
  250. package/docs-llm/dsl/selectors/frame-without-internal-fields-examples-react.md +135 -0
  251. package/docs-llm/dsl/selectors/frame-without-internal-fields-except-examples-json.md +157 -0
  252. package/docs-llm/dsl/selectors/frame-without-internal-fields-except-examples-react.md +155 -0
  253. package/docs-llm/dsl/selectors/frame-without-internal-fields-except.md +21 -0
  254. package/docs-llm/dsl/selectors/frame-without-internal-fields.md +17 -0
  255. package/docs-llm/dsl/selectors/frame-without-series-names.md +8 -0
  256. package/docs-llm/dsl/selectors/last-point.md +5 -0
  257. package/docs-llm/dsl/selectors/minus.md +8 -0
  258. package/docs-llm/dsl/selectors/multiply.md +8 -0
  259. package/docs-llm/dsl/selectors/plus.md +8 -0
  260. package/docs-llm/dsl/selectors/point-by-index.md +6 -0
  261. package/docs-llm/dsl/selectors/points-by-indexes.md +6 -0
  262. package/docs-llm/dsl/selectors/round.md +7 -0
  263. package/docs-llm/dsl/selectors/series-by-index-examples-json.md +49 -0
  264. package/docs-llm/dsl/selectors/series-by-index-examples-react.md +39 -0
  265. package/docs-llm/dsl/selectors/series-by-index.md +8 -0
  266. package/docs-llm/dsl/selectors/series-by-name-examples-json.md +49 -0
  267. package/docs-llm/dsl/selectors/series-by-name-examples-react.md +39 -0
  268. package/docs-llm/dsl/selectors/series-by-name.md +8 -0
  269. package/docs-llm/dsl/selectors/series-by-prioritized-types-examples-json.md +47 -0
  270. package/docs-llm/dsl/selectors/series-by-prioritized-types-examples-react.md +39 -0
  271. package/docs-llm/dsl/selectors/series-by-prioritized-types.md +10 -0
  272. package/docs-llm/dsl/selectors/series-by-type-examples-json.md +49 -0
  273. package/docs-llm/dsl/selectors/series-by-type-examples-react.md +39 -0
  274. package/docs-llm/dsl/selectors/series-by-type.md +10 -0
  275. package/docs-llm/dsl/selectors/series-by-types.md +6 -0
  276. package/docs-llm/ellipse/examples-json.md +5 -0
  277. package/docs-llm/ellipse/examples-react.md +5 -0
  278. package/docs-llm/ellipse/options.md +16 -0
  279. package/docs-llm/ellipse/overview.md +5 -0
  280. package/docs-llm/events/examples-json.md +705 -0
  281. package/docs-llm/events/examples-react.md +536 -0
  282. package/docs-llm/events/options.md +18 -0
  283. package/docs-llm/events/overview.md +5 -0
  284. package/docs-llm/filler-gauge/examples-json.md +376 -0
  285. package/docs-llm/filler-gauge/examples-react.md +274 -0
  286. package/docs-llm/filler-gauge/options.md +26 -0
  287. package/docs-llm/filler-gauge/overview.md +5 -0
  288. package/docs-llm/image/examples-json.md +39 -0
  289. package/docs-llm/image/examples-react.md +65 -0
  290. package/docs-llm/image/options.md +13 -0
  291. package/docs-llm/image/overview.md +5 -0
  292. package/docs-llm/line/examples-json.md +3724 -0
  293. package/docs-llm/line/examples-react.md +2683 -0
  294. package/docs-llm/line/options.md +95 -0
  295. package/docs-llm/line/overview.md +29 -0
  296. package/docs-llm/link-graph/examples-json.md +5 -0
  297. package/docs-llm/link-graph/examples-react.md +5 -0
  298. package/docs-llm/link-graph/options.md +26 -0
  299. package/docs-llm/link-graph/overview.md +16 -0
  300. package/docs-llm/map/examples-json.md +13973 -0
  301. package/docs-llm/map/examples-react.md +6154 -0
  302. package/docs-llm/map/options.md +22 -0
  303. package/docs-llm/map/overview.md +32 -0
  304. package/docs-llm/markdown/examples-json.md +63 -0
  305. package/docs-llm/markdown/examples-react.md +98 -0
  306. package/docs-llm/markdown/options.md +17 -0
  307. package/docs-llm/markdown/overview.md +5 -0
  308. package/docs-llm/marker-gauge/examples-json.md +436 -0
  309. package/docs-llm/marker-gauge/examples-react.md +367 -0
  310. package/docs-llm/marker-gauge/options.md +26 -0
  311. package/docs-llm/marker-gauge/overview.md +5 -0
  312. package/docs-llm/network-graph/examples-json.md +8843 -0
  313. package/docs-llm/network-graph/examples-react.md +7339 -0
  314. package/docs-llm/network-graph/options.md +50 -0
  315. package/docs-llm/network-graph/overview.md +28 -0
  316. package/docs-llm/parallel-coordinates/examples-json.md +8376 -0
  317. package/docs-llm/parallel-coordinates/examples-react.md +2771 -0
  318. package/docs-llm/parallel-coordinates/options.md +14 -0
  319. package/docs-llm/parallel-coordinates/overview.md +22 -0
  320. package/docs-llm/pie/examples-json.md +851 -0
  321. package/docs-llm/pie/examples-react.md +606 -0
  322. package/docs-llm/pie/options.md +34 -0
  323. package/docs-llm/pie/overview.md +23 -0
  324. package/docs-llm/process-tree/options.md +32 -0
  325. package/docs-llm/punchcard/examples-json.md +6134 -0
  326. package/docs-llm/punchcard/examples-react.md +4562 -0
  327. package/docs-llm/punchcard/options.md +33 -0
  328. package/docs-llm/punchcard/overview.md +5 -0
  329. package/docs-llm/pure-rich-text/options.md +28 -0
  330. package/docs-llm/rectangle/examples-json.md +5 -0
  331. package/docs-llm/rectangle/examples-react.md +5 -0
  332. package/docs-llm/rectangle/options.md +19 -0
  333. package/docs-llm/rectangle/overview.md +5 -0
  334. package/docs-llm/rich-text/examples-json.md +96 -0
  335. package/docs-llm/rich-text/examples-react.md +119 -0
  336. package/docs-llm/rich-text/options.md +28 -0
  337. package/docs-llm/rich-text/overview.md +5 -0
  338. package/docs-llm/sankey/examples-json.md +844 -0
  339. package/docs-llm/sankey/examples-react.md +546 -0
  340. package/docs-llm/sankey/options.md +19 -0
  341. package/docs-llm/sankey/overview.md +24 -0
  342. package/docs-llm/scatter/examples-json.md +4012 -0
  343. package/docs-llm/scatter/examples-react.md +3914 -0
  344. package/docs-llm/scatter/options.md +68 -0
  345. package/docs-llm/scatter/overview.md +25 -0
  346. package/docs-llm/single-value/examples-json.md +2613 -0
  347. package/docs-llm/single-value/examples-react.md +2296 -0
  348. package/docs-llm/single-value/options.md +49 -0
  349. package/docs-llm/single-value/overview.md +23 -0
  350. package/docs-llm/single-value-icon/examples-json.md +1686 -0
  351. package/docs-llm/single-value-icon/examples-react.md +1573 -0
  352. package/docs-llm/single-value-icon/options.md +43 -0
  353. package/docs-llm/single-value-icon/overview.md +5 -0
  354. package/docs-llm/single-value-radial/examples-json.md +1178 -0
  355. package/docs-llm/single-value-radial/examples-react.md +1028 -0
  356. package/docs-llm/single-value-radial/options.md +41 -0
  357. package/docs-llm/single-value-radial/overview.md +5 -0
  358. package/docs-llm/table/examples-json.md +5 -0
  359. package/docs-llm/table/examples-react.md +5 -0
  360. package/docs-llm/table/options.md +25 -0
  361. package/docs-llm/table/overview.md +24 -0
  362. package/docs-llm/timeline/examples-json.md +5 -0
  363. package/docs-llm/timeline/examples-react.md +5 -0
  364. package/docs-llm/timeline/options.md +27 -0
  365. package/docs-llm/timeline/overview.md +24 -0
  366. package/package.json +28 -24
@@ -166,102 +166,74 @@ var defaultImport11 = __toESM(require("@splunk/visualization-context/FeatureFlag
166
166
  __reExport(FeatureFlagContext_exports, require("@splunk/visualization-context/FeatureFlagContext"));
167
167
  var FeatureFlagContext_default = "default" in defaultImport11 ? defaultImport11.default : defaultImport11;
168
168
 
169
- // esm-externals:@splunk/ui-utils/id
170
- var id_exports = {};
171
- __export(id_exports, {
172
- default: () => id_default
173
- });
174
- var defaultImport12 = __toESM(require("@splunk/ui-utils/id"));
175
- __reExport(id_exports, require("@splunk/ui-utils/id"));
176
- var id_default = "default" in defaultImport12 ? defaultImport12.default : defaultImport12;
177
-
178
- // esm-externals:d3-scale
179
- var d3_scale_exports = {};
180
- __export(d3_scale_exports, {
181
- default: () => d3_scale_default
182
- });
183
- var defaultImport13 = __toESM(require("d3-scale"));
184
- __reExport(d3_scale_exports, require("d3-scale"));
185
- var d3_scale_default = "default" in defaultImport13 ? defaultImport13.default : defaultImport13;
186
-
187
- // esm-externals:chroma-js
188
- var chroma_js_exports = {};
189
- __export(chroma_js_exports, {
190
- default: () => chroma_js_default
191
- });
192
- var defaultImport14 = __toESM(require("chroma-js"));
193
- __reExport(chroma_js_exports, require("chroma-js"));
194
- var chroma_js_default = "default" in defaultImport14 ? defaultImport14.default : defaultImport14;
195
-
196
- // esm-externals:@splunk/visualization-color-palettes
197
- var visualization_color_palettes_exports = {};
198
- __export(visualization_color_palettes_exports, {
199
- default: () => visualization_color_palettes_default
169
+ // esm-externals:@splunk/ui-utils/i18n
170
+ var i18n_exports = {};
171
+ __export(i18n_exports, {
172
+ default: () => i18n_default
200
173
  });
201
- var defaultImport15 = __toESM(require("@splunk/visualization-color-palettes"));
202
- __reExport(visualization_color_palettes_exports, require("@splunk/visualization-color-palettes"));
203
- var visualization_color_palettes_default = "default" in defaultImport15 ? defaultImport15.default : defaultImport15;
174
+ var defaultImport12 = __toESM(require("@splunk/ui-utils/i18n"));
175
+ __reExport(i18n_exports, require("@splunk/ui-utils/i18n"));
176
+ var i18n_default = "default" in defaultImport12 ? defaultImport12.default : defaultImport12;
204
177
 
205
- // esm-externals:@splunk/visualization-schemas
206
- var visualization_schemas_exports = {};
207
- __export(visualization_schemas_exports, {
208
- default: () => visualization_schemas_default
178
+ // esm-externals:@splunk/ui-utils/format
179
+ var format_exports = {};
180
+ __export(format_exports, {
181
+ default: () => format_default
209
182
  });
210
- var defaultImport16 = __toESM(require("@splunk/visualization-schemas"));
211
- __reExport(visualization_schemas_exports, require("@splunk/visualization-schemas"));
212
- var visualization_schemas_default = "default" in defaultImport16 ? defaultImport16.default : defaultImport16;
183
+ var defaultImport13 = __toESM(require("@splunk/ui-utils/format"));
184
+ __reExport(format_exports, require("@splunk/ui-utils/format"));
185
+ var format_default = "default" in defaultImport13 ? defaultImport13.default : defaultImport13;
213
186
 
214
- // src/Map/PureMap/MapUtils.ts
215
- var MIN_BUBBLE_RADIUS = 7.11;
216
- var MAX_BUBBLE_RADIUS = 45.26;
217
- var matchBubbleSize = (dataRange, data) => {
218
- const size = (0, d3_scale_exports.scalePow)().exponent(0.2).domain(dataRange).range([MIN_BUBBLE_RADIUS, MAX_BUBBLE_RADIUS])(
219
- data
220
- );
221
- if (size > MAX_BUBBLE_RADIUS) {
222
- return MAX_BUBBLE_RADIUS;
223
- }
224
- if (size < MIN_BUBBLE_RADIUS) {
225
- return MIN_BUBBLE_RADIUS;
226
- }
227
- return size;
187
+ // src/Map/PureMap/keyboardConstants.ts
188
+ var KEYBOARD_KEYS = {
189
+ ARROW_RIGHT: "ArrowRight",
190
+ ARROW_LEFT: "ArrowLeft",
191
+ ARROW_UP: "ArrowUp",
192
+ ARROW_DOWN: "ArrowDown",
193
+ HOME: "Home",
194
+ END: "End",
195
+ ENTER: "Enter",
196
+ SPACE: " "
228
197
  };
229
198
 
230
- // esm-externals:maplibre-gl
231
- var maplibre_gl_exports = {};
232
- __export(maplibre_gl_exports, {
233
- default: () => maplibre_gl_default
234
- });
235
- var defaultImport17 = __toESM(require("maplibre-gl"));
236
- __reExport(maplibre_gl_exports, require("maplibre-gl"));
237
- var maplibre_gl_default = "default" in defaultImport17 ? defaultImport17.default : defaultImport17;
238
-
239
199
  // esm-externals:@splunk/react-ui/Popover
240
200
  var Popover_exports = {};
241
201
  __export(Popover_exports, {
242
202
  default: () => Popover_default
243
203
  });
244
- var defaultImport18 = __toESM(require("@splunk/react-ui/Popover"));
204
+ var defaultImport14 = __toESM(require("@splunk/react-ui/Popover"));
245
205
  __reExport(Popover_exports, require("@splunk/react-ui/Popover"));
246
- var Popover_default = "default" in defaultImport18 ? defaultImport18.default : defaultImport18;
247
-
248
- // esm-externals:@splunk/ui-utils/i18n
249
- var i18n_exports = {};
250
- __export(i18n_exports, {
251
- default: () => i18n_default
252
- });
253
- var defaultImport19 = __toESM(require("@splunk/ui-utils/i18n"));
254
- __reExport(i18n_exports, require("@splunk/ui-utils/i18n"));
255
- var i18n_default = "default" in defaultImport19 ? defaultImport19.default : defaultImport19;
206
+ var Popover_default = "default" in defaultImport14 ? defaultImport14.default : defaultImport14;
256
207
 
257
208
  // esm-externals:@splunk/themes
258
209
  var themes_exports = {};
259
210
  __export(themes_exports, {
260
211
  default: () => themes_default
261
212
  });
262
- var defaultImport20 = __toESM(require("@splunk/themes"));
213
+ var defaultImport15 = __toESM(require("@splunk/themes"));
263
214
  __reExport(themes_exports, require("@splunk/themes"));
264
- var themes_default = "default" in defaultImport20 ? defaultImport20.default : defaultImport20;
215
+ var themes_default = "default" in defaultImport15 ? defaultImport15.default : defaultImport15;
216
+
217
+ // esm-externals:@splunk/ui-utils/id
218
+ var id_exports = {};
219
+ __export(id_exports, {
220
+ default: () => id_default
221
+ });
222
+ var defaultImport16 = __toESM(require("@splunk/ui-utils/id"));
223
+ __reExport(id_exports, require("@splunk/ui-utils/id"));
224
+ var id_default = "default" in defaultImport16 ? defaultImport16.default : defaultImport16;
225
+
226
+ // src/common/utils/shadowDomUtils.ts
227
+ var getFloatingLayerStyleTarget = (anchor) => {
228
+ if (!anchor || typeof anchor.getRootNode !== "function") {
229
+ return void 0;
230
+ }
231
+ const rootNode = anchor.getRootNode();
232
+ if (typeof ShadowRoot !== "undefined" && rootNode instanceof ShadowRoot) {
233
+ return anchor.ownerDocument.head;
234
+ }
235
+ return void 0;
236
+ };
265
237
 
266
238
  // src/Map/PureMap/Tooltip.tsx
267
239
  var StyledPopover = styled_components_default(Popover_default)`
@@ -336,6 +308,7 @@ var convertDegToDMS = (decimalDegree, type) => {
336
308
  return `${degrees}\xB0 ${minutes}' ${seconds}" ${direction}`;
337
309
  };
338
310
  var Tooltip = ({
311
+ id,
339
312
  open,
340
313
  anchor,
341
314
  latitude,
@@ -344,24 +317,105 @@ var Tooltip = ({
344
317
  areaValue,
345
318
  additionalFields = [],
346
319
  showCoordinates = true,
347
- tooltipHeader = null
320
+ tooltipHeader = null,
321
+ stylesManagedExternally = false,
322
+ onMouseEnter,
323
+ onMouseLeave
348
324
  }) => {
349
325
  const featureFlagContext = react_exports.useContext(FeatureFlagContext_default);
350
326
  const isTooltipIconFlagEnabled = Boolean(featureFlagContext == null ? void 0 : featureFlagContext.visualizations_enableTooltipIcon);
351
- return /* @__PURE__ */ react_exports.createElement(
327
+ const styleTarget = stylesManagedExternally ? void 0 : getFloatingLayerStyleTarget(anchor);
328
+ const popover = /* @__PURE__ */ react_exports.createElement(
352
329
  StyledPopover,
353
330
  {
331
+ id,
332
+ role: "tooltip",
354
333
  open,
355
334
  animation: false,
356
335
  anchor,
357
336
  "data-test": "map-marker-tooltip",
358
- defaultPlacement: "above"
337
+ defaultPlacement: "above",
338
+ onMouseEnter,
339
+ onMouseLeave
359
340
  },
360
341
  /* @__PURE__ */ react_exports.createElement(StyledTable, null, tooltipHeader && /* @__PURE__ */ react_exports.createElement(StyledTooltipHeader, { "data-test": "tooltip-header" }, /* @__PURE__ */ react_exports.createElement("tr", null, /* @__PURE__ */ react_exports.createElement("th", { colSpan: 2 }, /* @__PURE__ */ react_exports.createElement("span", { "data-test": "tooltip-header-value" }, tooltipHeader)))), /* @__PURE__ */ react_exports.createElement("tbody", null, Boolean(areaId && areaValue) && /* @__PURE__ */ react_exports.createElement("tr", null, /* @__PURE__ */ react_exports.createElement(StyledTitleColumn, { "data-test": "area-id" }, areaId), /* @__PURE__ */ react_exports.createElement(StyledValueColumn, { "data-test": "area-value" }, areaValue)), Boolean(showCoordinates && latitude) && /* @__PURE__ */ react_exports.createElement("tr", null, /* @__PURE__ */ react_exports.createElement(StyledTitleColumn, null, (0, i18n_exports._)("Latitude")), /* @__PURE__ */ react_exports.createElement(StyledValueColumn, { "data-test": "latitude" }, convertDegToDMS(latitude, "latitude"))), Boolean(showCoordinates && longitude) && /* @__PURE__ */ react_exports.createElement("tr", null, /* @__PURE__ */ react_exports.createElement(StyledTitleColumn, null, (0, i18n_exports._)("Longitude")), /* @__PURE__ */ react_exports.createElement(StyledValueColumn, { "data-test": "longitude" }, convertDegToDMS(longitude, "longitude"))), additionalFields.filter(({ value }) => value && String(value) !== "0").map(({ name, value, color, icon }) => /* @__PURE__ */ react_exports.createElement("tr", { key: (0, id_exports.createDOMID)() }, /* @__PURE__ */ react_exports.createElement(StyledTitleColumn, { "data-test": "field-title" }, color ? /* @__PURE__ */ react_exports.createElement(StyledColorBlock, { "data-test": "field-color", color }) : null, /* @__PURE__ */ react_exports.createElement("span", null, name, isTooltipIconFlagEnabled && icon && ((0, iconUtils_exports.isRemoteIcon)(icon) || (0, iconUtils_exports.isDataURI)(icon)) ? /* @__PURE__ */ react_exports.createElement(StyledIconWrapper, { "data-test": "field-icon" }, /* @__PURE__ */ react_exports.createElement(RemoteIcon_default, { iconURL: icon, width: 16, height: 16 })) : null)), /* @__PURE__ */ react_exports.createElement(StyledValueColumn, { "data-test": "field-value" }, value)))))
361
342
  );
343
+ return styleTarget ? /* @__PURE__ */ react_exports.createElement(styled_components_exports.StyleSheetManager, { target: styleTarget }, popover) : popover;
362
344
  };
363
345
  var Tooltip_default = Tooltip;
364
346
 
347
+ // esm-externals:d3-scale
348
+ var d3_scale_exports = {};
349
+ __export(d3_scale_exports, {
350
+ default: () => d3_scale_default
351
+ });
352
+ var defaultImport17 = __toESM(require("d3-scale"));
353
+ __reExport(d3_scale_exports, require("d3-scale"));
354
+ var d3_scale_default = "default" in defaultImport17 ? defaultImport17.default : defaultImport17;
355
+
356
+ // esm-externals:chroma-js
357
+ var chroma_js_exports = {};
358
+ __export(chroma_js_exports, {
359
+ default: () => chroma_js_default
360
+ });
361
+ var defaultImport18 = __toESM(require("chroma-js"));
362
+ __reExport(chroma_js_exports, require("chroma-js"));
363
+ var chroma_js_default = "default" in defaultImport18 ? defaultImport18.default : defaultImport18;
364
+
365
+ // esm-externals:@splunk/visualization-color-palettes
366
+ var visualization_color_palettes_exports = {};
367
+ __export(visualization_color_palettes_exports, {
368
+ default: () => visualization_color_palettes_default
369
+ });
370
+ var defaultImport19 = __toESM(require("@splunk/visualization-color-palettes"));
371
+ __reExport(visualization_color_palettes_exports, require("@splunk/visualization-color-palettes"));
372
+ var visualization_color_palettes_default = "default" in defaultImport19 ? defaultImport19.default : defaultImport19;
373
+
374
+ // esm-externals:@splunk/visualization-schemas
375
+ var visualization_schemas_exports = {};
376
+ __export(visualization_schemas_exports, {
377
+ default: () => visualization_schemas_default
378
+ });
379
+ var defaultImport20 = __toESM(require("@splunk/visualization-schemas"));
380
+ __reExport(visualization_schemas_exports, require("@splunk/visualization-schemas"));
381
+ var visualization_schemas_default = "default" in defaultImport20 ? defaultImport20.default : defaultImport20;
382
+
383
+ // src/Map/PureMap/MapUtils.ts
384
+ var MIN_BUBBLE_RADIUS = 7.11;
385
+ var MAX_BUBBLE_RADIUS = 45.26;
386
+ var matchBubbleSize = (dataRange, data) => {
387
+ const size = (0, d3_scale_exports.scalePow)().exponent(0.2).domain(dataRange).range([MIN_BUBBLE_RADIUS, MAX_BUBBLE_RADIUS])(
388
+ data
389
+ );
390
+ if (size > MAX_BUBBLE_RADIUS) {
391
+ return MAX_BUBBLE_RADIUS;
392
+ }
393
+ if (size < MIN_BUBBLE_RADIUS) {
394
+ return MIN_BUBBLE_RADIUS;
395
+ }
396
+ return size;
397
+ };
398
+
399
+ // esm-externals:maplibre-gl
400
+ var maplibre_gl_exports = {};
401
+ __export(maplibre_gl_exports, {
402
+ default: () => maplibre_gl_default
403
+ });
404
+ var defaultImport21 = __toESM(require("maplibre-gl"));
405
+ __reExport(maplibre_gl_exports, require("maplibre-gl"));
406
+ var maplibre_gl_default = "default" in defaultImport21 ? defaultImport21.default : defaultImport21;
407
+
408
+ // src/Map/PureMap/MapContext.tsx
409
+ var MapContext = react_exports.createContext({
410
+ activeTooltipId: null,
411
+ setActiveTooltipId: () => {
412
+ },
413
+ activeChoroplethId: null,
414
+ setActiveChoroplethId: () => {
415
+ }
416
+ });
417
+ var useMapContext = () => react_exports.useContext(MapContext);
418
+
365
419
  // src/Map/PureMap/MarkerWrapper.tsx
366
420
  var MarkerWrapper = (_a) => {
367
421
  var _b = _a, {
@@ -372,9 +426,10 @@ var MarkerWrapper = (_a) => {
372
426
  additionalFields = [],
373
427
  tooltipHeader = null,
374
428
  map,
375
- isChoroplethTooltipOpen,
376
429
  children,
377
- showCoordinates = true
430
+ showCoordinates = true,
431
+ stylesManagedExternally = false,
432
+ customMarkerId
378
433
  } = _b, otherProps = __objRest(_b, [
379
434
  "longitude",
380
435
  "latitude",
@@ -383,19 +438,120 @@ var MarkerWrapper = (_a) => {
383
438
  "additionalFields",
384
439
  "tooltipHeader",
385
440
  "map",
386
- "isChoroplethTooltipOpen",
387
441
  "children",
388
- "showCoordinates"
442
+ "showCoordinates",
443
+ "stylesManagedExternally",
444
+ "customMarkerId"
389
445
  ]);
390
446
  const container = react_exports.useRef();
391
447
  const marker = react_exports.useRef();
392
448
  const [isTooltipOpen, setTooltipOpenStatus] = react_exports.useState(false);
393
- const isChoroplethTooltip = react_exports.useCallback(
394
- () => isChoroplethTooltipOpen !== void 0,
395
- [isChoroplethTooltipOpen]
449
+ const [isFocused, setIsFocused] = react_exports.useState(false);
450
+ const [isHovered, setIsHovered] = react_exports.useState(false);
451
+ const [isPopoverHovered, setIsPopoverHovered] = react_exports.useState(false);
452
+ const tooltipId = react_exports.useMemo(() => (0, id_exports.createDOMID)(), []);
453
+ const pendingMoveEndHandler = react_exports.useRef(null);
454
+ const closeTimeoutRef = react_exports.useRef(null);
455
+ const generatedMarkerId = react_exports.useMemo(() => (0, id_exports.createDOMID)(), []);
456
+ const markerId = customMarkerId || generatedMarkerId;
457
+ const { activeTooltipId, setActiveTooltipId } = useMapContext();
458
+ const mapMoveHandlerRef = react_exports.useRef(null);
459
+ const openTooltip = react_exports.useCallback(() => {
460
+ setActiveTooltipId(markerId);
461
+ setTooltipOpenStatus(true);
462
+ }, [markerId, setActiveTooltipId]);
463
+ const cleanupPendingMoveEnd = react_exports.useCallback(() => {
464
+ if (pendingMoveEndHandler.current && map.current && typeof map.current.off === "function") {
465
+ map.current.off("moveend", pendingMoveEndHandler.current);
466
+ pendingMoveEndHandler.current = null;
467
+ }
468
+ }, [map]);
469
+ const cleanupMapMoveHandler = react_exports.useCallback(() => {
470
+ if (mapMoveHandlerRef.current && map.current && typeof map.current.off === "function") {
471
+ map.current.off("move", mapMoveHandlerRef.current);
472
+ mapMoveHandlerRef.current = null;
473
+ }
474
+ }, [map]);
475
+ const shouldCloseTooltip = react_exports.useCallback(
476
+ (focused, hovered, popoverHovered) => {
477
+ return !focused && !hovered && !popoverHovered;
478
+ },
479
+ []
480
+ );
481
+ const cancelCloseTimeout = react_exports.useCallback(() => {
482
+ if (closeTimeoutRef.current) {
483
+ clearTimeout(closeTimeoutRef.current);
484
+ closeTimeoutRef.current = null;
485
+ }
486
+ }, []);
487
+ const closeTooltipIfShould = react_exports.useCallback(
488
+ (focused, hovered, popoverHovered) => {
489
+ cancelCloseTimeout();
490
+ if (shouldCloseTooltip(focused, hovered, popoverHovered)) {
491
+ closeTimeoutRef.current = setTimeout(() => {
492
+ setTooltipOpenStatus(false);
493
+ setActiveTooltipId((currentId) => currentId === markerId ? null : currentId);
494
+ closeTimeoutRef.current = null;
495
+ }, 100);
496
+ }
497
+ },
498
+ [shouldCloseTooltip, markerId, setActiveTooltipId, cancelCloseTimeout]
396
499
  );
397
- const openTooltip = react_exports.useCallback(() => setTooltipOpenStatus(true), []);
398
- const closeTooltip = react_exports.useCallback(() => setTooltipOpenStatus(false), []);
500
+ const handleMouseEnter = react_exports.useCallback(() => {
501
+ cancelCloseTimeout();
502
+ setIsHovered(true);
503
+ openTooltip();
504
+ }, [openTooltip, cancelCloseTimeout]);
505
+ const handleMouseLeave = react_exports.useCallback(() => {
506
+ setIsHovered(false);
507
+ closeTooltipIfShould(isFocused, false, isPopoverHovered);
508
+ }, [isFocused, isPopoverHovered, closeTooltipIfShould]);
509
+ const handlePopoverMouseEnter = react_exports.useCallback(() => {
510
+ cancelCloseTimeout();
511
+ setIsPopoverHovered(true);
512
+ }, [cancelCloseTimeout]);
513
+ const handlePopoverMouseLeave = react_exports.useCallback(() => {
514
+ setIsPopoverHovered(false);
515
+ closeTooltipIfShould(isFocused, isHovered, false);
516
+ }, [isFocused, isHovered, closeTooltipIfShould]);
517
+ const handleBlur = react_exports.useCallback(() => {
518
+ setIsFocused(false);
519
+ cleanupPendingMoveEnd();
520
+ closeTooltipIfShould(false, isHovered, isPopoverHovered);
521
+ }, [isHovered, isPopoverHovered, cleanupPendingMoveEnd, closeTooltipIfShould]);
522
+ const handleEscapeKey = react_exports.useCallback(
523
+ (e) => {
524
+ if (e.key === "Escape" && activeTooltipId === markerId) {
525
+ cancelCloseTimeout();
526
+ setIsFocused(false);
527
+ setIsHovered(false);
528
+ setIsPopoverHovered(false);
529
+ cleanupPendingMoveEnd();
530
+ setTooltipOpenStatus(false);
531
+ setActiveTooltipId(null);
532
+ }
533
+ },
534
+ [activeTooltipId, markerId, cleanupPendingMoveEnd, setActiveTooltipId, cancelCloseTimeout]
535
+ );
536
+ const handleFocus = react_exports.useCallback(() => {
537
+ cleanupPendingMoveEnd();
538
+ if (map.current && longitude !== void 0 && latitude !== void 0 && typeof map.current.once === "function") {
539
+ const bounds = map.current.getBounds();
540
+ if (!bounds.contains([longitude, latitude])) {
541
+ const moveEndHandler = () => {
542
+ pendingMoveEndHandler.current = null;
543
+ setIsFocused(true);
544
+ openTooltip();
545
+ };
546
+ pendingMoveEndHandler.current = moveEndHandler;
547
+ map.current.once("moveend", moveEndHandler);
548
+ map.current.panTo([longitude, latitude]);
549
+ return;
550
+ }
551
+ }
552
+ setIsFocused(true);
553
+ openTooltip();
554
+ }, [openTooltip, map, longitude, latitude, cleanupPendingMoveEnd]);
399
555
  const cleanupMarker = react_exports.useCallback(() => {
400
556
  if (marker.current) {
401
557
  marker.current.remove();
@@ -416,35 +572,102 @@ var MarkerWrapper = (_a) => {
416
572
  cleanupMarker();
417
573
  }
418
574
  }, [latitude, longitude, map]);
419
- react_exports.useEffect(() => cleanupMarker, []);
575
+ react_exports.useEffect(() => {
576
+ if (isTooltipOpen && activeTooltipId === markerId) {
577
+ document.addEventListener("keydown", handleEscapeKey);
578
+ return () => {
579
+ document.removeEventListener("keydown", handleEscapeKey);
580
+ };
581
+ }
582
+ return void 0;
583
+ }, [isTooltipOpen, activeTooltipId, markerId, handleEscapeKey]);
584
+ react_exports.useEffect(() => {
585
+ if (isTooltipOpen && activeTooltipId !== markerId && activeTooltipId !== null) {
586
+ setTooltipOpenStatus(false);
587
+ }
588
+ }, [activeTooltipId, markerId, isTooltipOpen]);
589
+ react_exports.useEffect(() => {
590
+ if (!isTooltipOpen && activeTooltipId === null && (isFocused || isHovered || isPopoverHovered)) {
591
+ openTooltip();
592
+ }
593
+ }, [activeTooltipId, isTooltipOpen, isFocused, isHovered, isPopoverHovered, openTooltip]);
594
+ react_exports.useEffect(() => {
595
+ if (!customMarkerId) return;
596
+ if (activeTooltipId === markerId) {
597
+ setTooltipOpenStatus(true);
598
+ } else {
599
+ setTooltipOpenStatus(false);
600
+ }
601
+ }, [customMarkerId, activeTooltipId, markerId]);
602
+ const [, forceUpdate] = react_exports.useReducer((x) => x + 1, 0);
603
+ react_exports.useEffect(() => {
604
+ if (!isTooltipOpen || !map.current || typeof map.current.on !== "function") {
605
+ return void 0;
606
+ }
607
+ let rafId = null;
608
+ const handleMapMove = () => {
609
+ if (rafId === null) {
610
+ rafId = requestAnimationFrame(() => {
611
+ forceUpdate();
612
+ rafId = null;
613
+ });
614
+ }
615
+ };
616
+ mapMoveHandlerRef.current = handleMapMove;
617
+ map.current.on("move", handleMapMove);
618
+ return () => {
619
+ if (rafId !== null) {
620
+ cancelAnimationFrame(rafId);
621
+ }
622
+ cleanupMapMoveHandler();
623
+ };
624
+ }, [isTooltipOpen, map, cleanupMapMoveHandler]);
625
+ react_exports.useEffect(
626
+ () => () => {
627
+ cancelCloseTimeout();
628
+ cleanupPendingMoveEnd();
629
+ cleanupMapMoveHandler();
630
+ cleanupMarker();
631
+ },
632
+ [cancelCloseTimeout, cleanupPendingMoveEnd, cleanupMapMoveHandler, cleanupMarker]
633
+ );
420
634
  const filteredAdditionalFields = additionalFields.filter(({ value }) => value && String(value) !== "0");
421
- const showTooltip = showCoordinates || filteredAdditionalFields.length || areaId && areaValue;
422
- return /* @__PURE__ */ react_exports.createElement("div", { style: { visibility: isChoroplethTooltip() ? "hidden" : "visible" } }, /* @__PURE__ */ react_exports.createElement(
635
+ const showTooltip = showCoordinates || filteredAdditionalFields.length || areaId && !Number.isNaN(areaValue);
636
+ const isTooltipVisible = activeTooltipId === markerId && (isTooltipOpen || customMarkerId !== void 0);
637
+ const childrenWithTooltipId = react_exports.useMemo(() => {
638
+ if (!children) return null;
639
+ if (!react_exports.isValidElement(children)) return children;
640
+ return react_exports.cloneElement(children, {
641
+ "aria-describedby": tooltipId
642
+ });
643
+ }, [children, tooltipId]);
644
+ return /* @__PURE__ */ react_exports.createElement("div", null, /* @__PURE__ */ react_exports.createElement(
423
645
  "div",
424
646
  __spreadValues({
425
- style: {
426
- visibility: isChoroplethTooltip() ? "hidden" : "visible"
427
- },
428
647
  ref: container,
429
648
  "data-test": "map-marker",
430
- onMouseOver: openTooltip,
431
- onMouseLeave: closeTooltip,
432
- onFocus: openTooltip,
433
- onBlur: closeTooltip
649
+ onMouseEnter: handleMouseEnter,
650
+ onMouseLeave: handleMouseLeave,
651
+ onFocus: handleFocus,
652
+ onBlur: handleBlur
434
653
  }, otherProps),
435
- children
654
+ childrenWithTooltipId
436
655
  ), /* @__PURE__ */ react_exports.createElement("div", null, showTooltip && /* @__PURE__ */ react_exports.createElement(
437
656
  Tooltip_default,
438
657
  {
439
- open: isChoroplethTooltip() ? isChoroplethTooltipOpen : isTooltipOpen,
658
+ id: tooltipId,
659
+ open: isTooltipVisible,
440
660
  anchor: container.current,
441
- latitude: isChoroplethTooltip() ? null : latitude,
442
- longitude: isChoroplethTooltip() ? null : longitude,
661
+ latitude: showCoordinates ? latitude : null,
662
+ longitude: showCoordinates ? longitude : null,
443
663
  areaId,
444
664
  areaValue,
445
665
  additionalFields,
446
666
  showCoordinates,
447
- tooltipHeader
667
+ tooltipHeader,
668
+ stylesManagedExternally,
669
+ onMouseEnter: handlePopoverMouseEnter,
670
+ onMouseLeave: handlePopoverMouseLeave
448
671
  }
449
672
  )));
450
673
  };
@@ -461,21 +684,51 @@ var PieSegment = react_exports.memo(
461
684
  color,
462
685
  themeColor,
463
686
  segmentMetadata,
464
- handleBubbleClick
687
+ handleBubbleClick,
688
+ ariaLabel,
689
+ "aria-describedby": ariaDescribedBy,
690
+ onKeyDown,
691
+ onFocus,
692
+ onBlur,
693
+ elementRef,
694
+ hasEventHandlers
465
695
  }) => {
466
696
  const { name, value } = segmentMetadata != null ? segmentMetadata : {};
467
- const handleSegmentClick = react_exports.useCallback(
697
+ const handleInteraction = react_exports.useCallback(
468
698
  (e) => {
699
+ if ("key" in e && e.key !== KEYBOARD_KEYS.ENTER && e.key !== KEYBOARD_KEYS.SPACE) {
700
+ return;
701
+ }
702
+ e.preventDefault();
469
703
  handleBubbleClick(e, name, value);
470
704
  },
471
705
  [name, value, handleBubbleClick]
472
706
  );
707
+ const handleKeyDown = react_exports.useCallback(
708
+ (e) => {
709
+ if (hasEventHandlers && (e.key === KEYBOARD_KEYS.ENTER || e.key === KEYBOARD_KEYS.SPACE)) {
710
+ handleInteraction(e);
711
+ }
712
+ if (onKeyDown) {
713
+ onKeyDown(e);
714
+ }
715
+ },
716
+ [hasEventHandlers, handleInteraction, onKeyDown]
717
+ );
473
718
  if (end - start === 1) {
474
719
  return /* @__PURE__ */ react_exports.createElement(
475
720
  BubbleSegment,
476
721
  {
722
+ $hasEventHandlers: hasEventHandlers,
723
+ ref: elementRef,
477
724
  as: "circle",
478
- onClick: handleSegmentClick,
725
+ role: hasEventHandlers ? "button" : "graphics-symbol",
726
+ "aria-label": ariaLabel,
727
+ "aria-describedby": ariaDescribedBy,
728
+ onClick: hasEventHandlers ? handleInteraction : void 0,
729
+ onKeyDown: handleKeyDown,
730
+ onFocus,
731
+ onBlur,
479
732
  cx: radius,
480
733
  cy: radius,
481
734
  r: radius,
@@ -496,8 +749,16 @@ var PieSegment = react_exports.memo(
496
749
  return /* @__PURE__ */ react_exports.createElement(
497
750
  BubbleSegment,
498
751
  {
752
+ $hasEventHandlers: hasEventHandlers,
753
+ ref: elementRef,
499
754
  as: "path",
500
- onClick: handleSegmentClick,
755
+ role: hasEventHandlers ? "button" : "graphics-symbol",
756
+ "aria-label": ariaLabel,
757
+ "aria-describedby": ariaDescribedBy,
758
+ onClick: hasEventHandlers ? handleInteraction : void 0,
759
+ onKeyDown: handleKeyDown,
760
+ onFocus,
761
+ onBlur,
501
762
  d: `M ${radius} ${radius} L ${radius + radius * x0} ${radius + radius * y0} A ${radius} ${radius} 0 ${arc} 1 ${radius + radius * x1} ${radius + radius * y1} L ${radius} ${radius} A 0 0 0 ${arc} 0 ${radius} ${radius}`,
502
763
  fill: color,
503
764
  fillOpacity: 0.8,
@@ -512,10 +773,118 @@ PieSegment.displayName = "MapBubblePieSegment";
512
773
  var BubbleSegment = styled_components_default.path`
513
774
  transition: 0.2s ease-in-out;
514
775
  transition-property: fill, stroke;
776
+ ${({ $hasEventHandlers }) => $hasEventHandlers && "cursor: pointer;"}
777
+
778
+ &:focus {
779
+ outline: none;
780
+ }
515
781
  `;
516
- var StyledMarkerWrapper = styled_components_default(MarkerWrapper_default)`
517
- cursor: pointer;
518
- `;
782
+ var BubbleSvg = react_exports.memo(
783
+ ({
784
+ values,
785
+ valueRange,
786
+ tooltipHeader,
787
+ latitude,
788
+ longitude,
789
+ icon,
790
+ isPie,
791
+ themeColor,
792
+ segmentStartIndex,
793
+ colors,
794
+ bubbleSize,
795
+ onClick,
796
+ "aria-describedby": ariaDescribedBy,
797
+ onKeyDown,
798
+ onFocus,
799
+ onBlur,
800
+ setElementRef,
801
+ hasEventHandlers
802
+ }) => {
803
+ const featureFlagContext = react_exports.useContext(FeatureFlagContext_default);
804
+ const isBubbleMapIconFlagEnabled = Boolean(featureFlagContext == null ? void 0 : featureFlagContext.visualizations_enableBubbleMapIcon);
805
+ const total = values.reduce((totalValue, v) => totalValue + v, 0);
806
+ const radius = matchBubbleSize(valueRange, total);
807
+ const getAriaLabel = react_exports.useCallback(
808
+ (segmentName, segmentValue) => {
809
+ let segmentLabel = (0, i18n_exports._)("Map marker");
810
+ if (tooltipHeader) {
811
+ segmentLabel = tooltipHeader;
812
+ } else if (latitude !== void 0 && longitude !== void 0) {
813
+ segmentLabel = (0, format_exports.sprintf)((0, i18n_exports._)("Location: %(lat)s, %(lng)s"), {
814
+ lat: convertDegToDMS(latitude, "latitude"),
815
+ lng: convertDegToDMS(longitude, "longitude")
816
+ });
817
+ }
818
+ if (segmentName != null && segmentValue != null) {
819
+ segmentLabel = (0, format_exports.sprintf)((0, i18n_exports._)("%(locationLabel)s, %(segmentName)s: %(segmentValue)s"), {
820
+ locationLabel: segmentLabel,
821
+ segmentName,
822
+ segmentValue: segmentValue.toString()
823
+ });
824
+ }
825
+ if (hasEventHandlers) {
826
+ segmentLabel = (0, format_exports.sprintf)((0, i18n_exports._)("%(label)s, Click for drilldown"), { label: segmentLabel });
827
+ }
828
+ return segmentLabel;
829
+ },
830
+ [tooltipHeader, latitude, longitude, hasEventHandlers]
831
+ );
832
+ const offsets = [];
833
+ let runningTotal = 0;
834
+ values.forEach((count) => {
835
+ offsets.push(runningTotal);
836
+ runningTotal += count;
837
+ });
838
+ const width = radius * 2;
839
+ const showIcon = isBubbleMapIconFlagEnabled && radius >= ICON_DISPLAY_CUTOFF && icon && ((0, iconUtils_exports.isRemoteIcon)(icon) || (0, iconUtils_exports.isDataURI)(icon));
840
+ return /* @__PURE__ */ react_exports.createElement("svg", { width, height: width, viewBox: `-3 -3 ${width + 6} ${width + 6}` }, isPie && /* @__PURE__ */ react_exports.createElement(
841
+ "circle",
842
+ {
843
+ cx: radius,
844
+ cy: radius,
845
+ r: radius,
846
+ fill: "none",
847
+ strokeWidth: 2,
848
+ stroke: themeColor,
849
+ strokeOpacity: 0.3
850
+ }
851
+ ), values.map((v, i) => {
852
+ var _a, _b;
853
+ const globalIndex = segmentStartIndex + i;
854
+ return /* @__PURE__ */ react_exports.createElement(
855
+ PieSegment,
856
+ {
857
+ key: globalIndex,
858
+ start: offsets[i] / total,
859
+ end: (offsets[i] + v) / total,
860
+ radius,
861
+ color: colors[i],
862
+ themeColor,
863
+ segmentMetadata: bubbleSize[i],
864
+ handleBubbleClick: onClick,
865
+ ariaLabel: getAriaLabel((_a = bubbleSize[i]) == null ? void 0 : _a.name, (_b = bubbleSize[i]) == null ? void 0 : _b.value),
866
+ "aria-describedby": ariaDescribedBy,
867
+ onKeyDown,
868
+ onFocus,
869
+ onBlur,
870
+ elementRef: setElementRef ? (element) => setElementRef(globalIndex, element) : void 0,
871
+ hasEventHandlers
872
+ }
873
+ );
874
+ }), showIcon && /* @__PURE__ */ react_exports.createElement(
875
+ "foreignObject",
876
+ {
877
+ x: radius - radius * 0.8 / 2,
878
+ y: radius - radius * 0.8 / 2,
879
+ width: radius * 0.8,
880
+ height: radius * 0.8,
881
+ style: { pointerEvents: "none" },
882
+ "data-test": "bubble-icon-wrapper"
883
+ },
884
+ /* @__PURE__ */ react_exports.createElement(RemoteIcon_default, { iconURL: icon, width: radius * 0.8, height: radius * 0.8 })
885
+ ));
886
+ }
887
+ );
519
888
  var Bubble = react_exports.memo(
520
889
  ({
521
890
  originalValues,
@@ -531,10 +900,15 @@ var Bubble = react_exports.memo(
531
900
  map,
532
901
  handleMapClick,
533
902
  icon,
534
- showCoordinates
903
+ showCoordinates,
904
+ stylesManagedExternally,
905
+ segmentStartIndex = 0,
906
+ onKeyDown,
907
+ onFocus,
908
+ onBlur,
909
+ setElementRef,
910
+ hasEventHandlers
535
911
  }) => {
536
- const featureFlagContext = react_exports.useContext(FeatureFlagContext_default);
537
- const isBubbleMapIconFlagEnabled = Boolean(featureFlagContext == null ? void 0 : featureFlagContext.visualizations_enableBubbleMapIcon);
538
912
  const onBubbleClick = react_exports.useCallback(
539
913
  (e, name, value) => {
540
914
  handleMapClick(e, name, value);
@@ -544,58 +918,9 @@ var Bubble = react_exports.memo(
544
918
  );
545
919
  const allZeros = originalValues.every((v) => v === 0);
546
920
  const values = originalValues.map((v) => v > 0 ? v : 0);
547
- const total = values.reduce((totalValue, v) => totalValue + v, 0);
548
- const radius = matchBubbleSize(valueRange, total);
549
- const bubble = react_exports.useMemo(() => {
550
- if (allZeros || !originalValues.length) return null;
551
- const offsets = [];
552
- let runningTotal = 0;
553
- values.forEach((count) => {
554
- offsets.push(runningTotal);
555
- runningTotal += count;
556
- });
557
- const width = radius * 2;
558
- return /* @__PURE__ */ react_exports.createElement("svg", { width, height: width, viewBox: `-3 -3 ${width + 6} ${width + 6}` }, isPie && /* @__PURE__ */ react_exports.createElement(
559
- "circle",
560
- {
561
- cx: radius,
562
- cy: radius,
563
- r: radius,
564
- fill: "none",
565
- strokeWidth: 2,
566
- stroke: themeColor,
567
- strokeOpacity: 0.3
568
- }
569
- ), values.map((v, i) => /* @__PURE__ */ react_exports.createElement(
570
- PieSegment,
571
- {
572
- key: (0, id_exports.createDOMID)(),
573
- start: offsets[i] / total,
574
- end: (offsets[i] + v) / total,
575
- radius,
576
- color: colors[i],
577
- themeColor,
578
- segmentMetadata: bubbleSize[i],
579
- handleBubbleClick: onBubbleClick
580
- }
581
- )));
582
- }, [
583
- bubbleSize,
584
- colors,
585
- isPie,
586
- onBubbleClick,
587
- originalValues,
588
- themeColor,
589
- allZeros,
590
- radius,
591
- total,
592
- values
593
- ]);
594
- if (!bubble) {
595
- return null;
596
- }
921
+ if (allZeros || !originalValues.length) return null;
597
922
  return /* @__PURE__ */ react_exports.createElement(
598
- StyledMarkerWrapper,
923
+ MarkerWrapper_default,
599
924
  {
600
925
  longitude,
601
926
  latitude,
@@ -603,22 +928,30 @@ var Bubble = react_exports.memo(
603
928
  tooltipHeader,
604
929
  map,
605
930
  "data-test-type": "bubble",
606
- showCoordinates
931
+ showCoordinates,
932
+ stylesManagedExternally
607
933
  },
608
- bubble,
609
- isBubbleMapIconFlagEnabled && radius >= ICON_DISPLAY_CUTOFF && icon && ((0, iconUtils_exports.isRemoteIcon)(icon) || (0, iconUtils_exports.isDataURI)(icon)) && /* @__PURE__ */ react_exports.createElement(
610
- "div",
934
+ /* @__PURE__ */ react_exports.createElement(
935
+ BubbleSvg,
611
936
  {
612
- "data-test": "bubble-icon-wrapper",
613
- style: {
614
- position: "absolute",
615
- top: `${radius}px`,
616
- left: `${radius}px`,
617
- transform: "translate(-50%, -50%)",
618
- pointerEvents: "none"
619
- }
620
- },
621
- /* @__PURE__ */ react_exports.createElement(RemoteIcon_default, { iconURL: icon, width: radius * 0.8, height: radius * 0.8 })
937
+ values,
938
+ valueRange,
939
+ colors,
940
+ bubbleSize,
941
+ isPie,
942
+ themeColor,
943
+ segmentStartIndex,
944
+ latitude,
945
+ longitude,
946
+ tooltipHeader,
947
+ icon,
948
+ onClick: onBubbleClick,
949
+ onKeyDown,
950
+ onFocus,
951
+ onBlur,
952
+ setElementRef,
953
+ hasEventHandlers
954
+ }
622
955
  )
623
956
  );
624
957
  }