@splunk/visualizations 28.8.0 → 28.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/Area.config.js +2 -4
  2. package/Area.config.js.map +2 -2
  3. package/Area.js +245 -147
  4. package/Area.js.map +4 -4
  5. package/Bar.config.js +2 -4
  6. package/Bar.config.js.map +2 -2
  7. package/Bar.js +246 -148
  8. package/Bar.js.map +4 -4
  9. package/Bubble/Bubble.d.ts +3 -1
  10. package/Bubble/Bubble.d.ts.map +1 -1
  11. package/Bubble.js +216 -108
  12. package/Bubble.js.map +4 -4
  13. package/CHANGELOG.external.md +43 -1
  14. package/ChoroplethSvg/ChoroplethSvg.d.ts +3 -1
  15. package/ChoroplethSvg/ChoroplethSvg.d.ts.map +1 -1
  16. package/ChoroplethSvg/PureChoroplethSvg/PureChoroplethSvg.d.ts.map +1 -1
  17. package/ChoroplethSvg/PureChoroplethSvg/SvgMutator.d.ts.map +1 -1
  18. package/ChoroplethSvg.js +638 -209
  19. package/ChoroplethSvg.js.map +4 -4
  20. package/Column.config.js +2 -4
  21. package/Column.config.js.map +2 -2
  22. package/Column.js +246 -148
  23. package/Column.js.map +4 -4
  24. package/Ellipse/Ellipse.d.ts +3 -1
  25. package/Ellipse/Ellipse.d.ts.map +1 -1
  26. package/Ellipse.js +216 -105
  27. package/Ellipse.js.map +4 -4
  28. package/Events/Events.d.ts +5 -3
  29. package/Events/Events.d.ts.map +1 -1
  30. package/Events/PureEvents/FieldSummaryTooltip.d.ts.map +1 -1
  31. package/Events/PureEvents/PureEvents.d.ts +0 -1
  32. package/Events/PureEvents/PureEvents.d.ts.map +1 -1
  33. package/Events.js +270 -157
  34. package/Events.js.map +4 -4
  35. package/FillerGauge.js +243 -140
  36. package/FillerGauge.js.map +4 -4
  37. package/Image/Image.d.ts +3 -1
  38. package/Image/Image.d.ts.map +1 -1
  39. package/Image.js +217 -106
  40. package/Image.js.map +4 -4
  41. package/Line.config.js +2 -4
  42. package/Line.config.js.map +2 -2
  43. package/Line.js +246 -148
  44. package/Line.js.map +4 -4
  45. package/LinkGraph/LinkGraph.d.ts +3 -1
  46. package/LinkGraph/LinkGraph.d.ts.map +1 -1
  47. package/LinkGraph/PureLinkGraph/PureLinkGraphUtils.d.ts.map +1 -1
  48. package/LinkGraph/PureLinkGraph/components/Node.d.ts.map +1 -1
  49. package/LinkGraph.config.js +1 -1
  50. package/LinkGraph.config.js.map +2 -2
  51. package/LinkGraph.js +802 -682
  52. package/LinkGraph.js.map +4 -4
  53. package/Map/Map.d.ts +10 -9
  54. package/Map/Map.d.ts.map +1 -1
  55. package/Map/PureMap/BubbleLayer.d.ts.map +1 -1
  56. package/Map/PureMap/ChoroplethLayer.d.ts.map +1 -1
  57. package/Map/PureMap/ClusterLayer.d.ts.map +1 -1
  58. package/Map/PureMap/MapUtils.d.ts.map +1 -1
  59. package/Map/PureMap/MarkerWrapper.d.ts.map +1 -1
  60. package/Map/PureMap/PureMap.d.ts +8 -65
  61. package/Map/PureMap/PureMap.d.ts.map +1 -1
  62. package/Map/PureMap/mapWorker.d.ts +2 -0
  63. package/Map/PureMap/mapWorker.d.ts.map +1 -0
  64. package/Map.config.js +1 -1
  65. package/Map.config.js.map +2 -2
  66. package/Map.js +439 -336
  67. package/Map.js.map +4 -4
  68. package/Markdown/Markdown.d.ts +9 -1
  69. package/Markdown/Markdown.d.ts.map +1 -1
  70. package/Markdown/config.d.ts.map +1 -1
  71. package/Markdown.config.js +5 -0
  72. package/Markdown.config.js.map +2 -2
  73. package/Markdown.js +225 -94
  74. package/Markdown.js.map +3 -3
  75. package/MarkerGauge.js +239 -134
  76. package/MarkerGauge.js.map +4 -4
  77. package/NetworkGraph/PureNetworkGraph/PureNetworkGraph.d.ts.map +1 -1
  78. package/NetworkGraph/PureNetworkGraph/components/NetworkGraphSvg.d.ts +1 -0
  79. package/NetworkGraph/PureNetworkGraph/components/NetworkGraphSvg.d.ts.map +1 -1
  80. package/NetworkGraph/PureNetworkGraph/components/Node.d.ts +1 -0
  81. package/NetworkGraph/PureNetworkGraph/components/Node.d.ts.map +1 -1
  82. package/NetworkGraph/PureNetworkGraph/utils/networkGraphUtils.d.ts +3 -5
  83. package/NetworkGraph/PureNetworkGraph/utils/networkGraphUtils.d.ts.map +1 -1
  84. package/NetworkGraph.config.js +4 -2
  85. package/NetworkGraph.config.js.map +2 -2
  86. package/NetworkGraph.js +327 -188
  87. package/NetworkGraph.js.map +4 -4
  88. package/ParallelCoordinates/ParallelCoordinates.d.ts +3 -1
  89. package/ParallelCoordinates/ParallelCoordinates.d.ts.map +1 -1
  90. package/ParallelCoordinates.js +239 -128
  91. package/ParallelCoordinates.js.map +4 -4
  92. package/Pie/config.d.ts.map +1 -1
  93. package/Pie/pieUtils.d.ts.map +1 -1
  94. package/Pie.config.js +4 -2
  95. package/Pie.config.js.map +2 -2
  96. package/Pie.js +228 -125
  97. package/Pie.js.map +3 -3
  98. package/ProcessTree/ProcessTree.d.ts +3 -1
  99. package/ProcessTree/ProcessTree.d.ts.map +1 -1
  100. package/ProcessTree/PureProcessTree/PureProcessTree.d.ts +1 -0
  101. package/ProcessTree/PureProcessTree/PureProcessTree.d.ts.map +1 -1
  102. package/ProcessTree/PureProcessTree/components/ProcessTreeLeftPanel.d.ts +1 -0
  103. package/ProcessTree/PureProcessTree/components/ProcessTreeLeftPanel.d.ts.map +1 -1
  104. package/ProcessTree/PureProcessTree/hooks/useProcessTreeGraphData.d.ts +2 -1
  105. package/ProcessTree/PureProcessTree/hooks/useProcessTreeGraphData.d.ts.map +1 -1
  106. package/ProcessTree/PureProcessTree/utils/iconLoader.d.ts +2 -0
  107. package/ProcessTree/PureProcessTree/utils/iconLoader.d.ts.map +1 -1
  108. package/ProcessTree/PureProcessTree/utils/processTreeUtils.d.ts +5 -1
  109. package/ProcessTree/PureProcessTree/utils/processTreeUtils.d.ts.map +1 -1
  110. package/ProcessTree.js +435 -192
  111. package/ProcessTree.js.map +4 -4
  112. package/Punchcard/Punchcard.d.ts +3 -1
  113. package/Punchcard/Punchcard.d.ts.map +1 -1
  114. package/Punchcard.js +238 -129
  115. package/Punchcard.js.map +4 -4
  116. package/Rectangle/Rectangle.d.ts +3 -1
  117. package/Rectangle/Rectangle.d.ts.map +1 -1
  118. package/Rectangle.js +218 -116
  119. package/Rectangle.js.map +4 -4
  120. package/RichText/PureRichText/Editor/EditorPanel.d.ts +1 -4
  121. package/RichText/PureRichText/Editor/EditorPanel.d.ts.map +1 -1
  122. package/RichText/PureRichText/Editor/hooks/useConfigPanelFocus.d.ts +14 -0
  123. package/RichText/PureRichText/Editor/hooks/useConfigPanelFocus.d.ts.map +1 -0
  124. package/RichText/PureRichText/Editor/hooks/useEditorPanelSync.d.ts +15 -0
  125. package/RichText/PureRichText/Editor/hooks/useEditorPanelSync.d.ts.map +1 -0
  126. package/RichText/PureRichText/Editor/hooks/useLinkHandlers.d.ts.map +1 -1
  127. package/RichText/PureRichText/Editor/hooks/usePortalTarget.d.ts +9 -0
  128. package/RichText/PureRichText/Editor/hooks/usePortalTarget.d.ts.map +1 -0
  129. package/RichText/PureRichText/InnerEditor.d.ts +15 -9
  130. package/RichText/PureRichText/InnerEditor.d.ts.map +1 -1
  131. package/RichText/PureRichText/PureRichText.d.ts +5 -10
  132. package/RichText/PureRichText/PureRichText.d.ts.map +1 -1
  133. package/RichText/PureRichText/PureRichTextContext.d.ts +3 -6
  134. package/RichText/PureRichText/PureRichTextContext.d.ts.map +1 -1
  135. package/RichText/PureRichText/RichTextStyles.d.ts +5 -4
  136. package/RichText/PureRichText/RichTextStyles.d.ts.map +1 -1
  137. package/RichText/PureRichText/activeInstance.d.ts +6 -7
  138. package/RichText/PureRichText/activeInstance.d.ts.map +1 -1
  139. package/RichText/PureRichText/config.d.ts.map +1 -1
  140. package/RichText/PureRichText/hooks/useContentSync.d.ts +9 -9
  141. package/RichText/PureRichText/hooks/useContentSync.d.ts.map +1 -1
  142. package/RichText/PureRichText/hooks/useDashboardKeyboardNav.d.ts +2 -7
  143. package/RichText/PureRichText/hooks/useDashboardKeyboardNav.d.ts.map +1 -1
  144. package/RichText/PureRichText/hooks/useEditorSetup.d.ts +8 -4
  145. package/RichText/PureRichText/hooks/useEditorSetup.d.ts.map +1 -1
  146. package/RichText/PureRichText/hooks/useFocusHandlers.d.ts +2 -4
  147. package/RichText/PureRichText/hooks/useFocusHandlers.d.ts.map +1 -1
  148. package/RichText/PureRichText/hooks/useKeyboardShortcuts.d.ts.map +1 -1
  149. package/RichText/PureRichText/hooks/useMouseHandlers.d.ts +3 -7
  150. package/RichText/PureRichText/hooks/useMouseHandlers.d.ts.map +1 -1
  151. package/RichText/PureRichText/hooks/useStepFontSize.d.ts +2 -2
  152. package/RichText/PureRichText/hooks/useStepLineSpacing.d.ts +2 -3
  153. package/RichText/PureRichText/hooks/useStepLineSpacing.d.ts.map +1 -1
  154. package/RichText/PureRichText/hooks/useTokenMap.d.ts +13 -24
  155. package/RichText/PureRichText/hooks/useTokenMap.d.ts.map +1 -1
  156. package/RichText/PureRichText/renderers/ElementRenderer.d.ts +2 -5
  157. package/RichText/PureRichText/renderers/ElementRenderer.d.ts.map +1 -1
  158. package/RichText/PureRichText/types.d.ts +6 -0
  159. package/RichText/PureRichText/types.d.ts.map +1 -1
  160. package/RichText/PureRichText/utils/slateUtils.d.ts +26 -2
  161. package/RichText/PureRichText/utils/slateUtils.d.ts.map +1 -1
  162. package/RichText/RichText.d.ts +3 -1
  163. package/RichText/RichText.d.ts.map +1 -1
  164. package/RichText/config.d.ts.map +1 -1
  165. package/RichText.config.js +5 -0
  166. package/RichText.config.js.map +2 -2
  167. package/RichText.js +1848 -842
  168. package/RichText.js.map +4 -4
  169. package/Sankey/PureSankey/PureSankey.d.ts +2 -0
  170. package/Sankey/PureSankey/PureSankey.d.ts.map +1 -1
  171. package/Sankey/PureSankey/SankeyLink.d.ts +3 -1
  172. package/Sankey/PureSankey/SankeyLink.d.ts.map +1 -1
  173. package/Sankey/PureSankey/SankeyNode.d.ts +5 -2
  174. package/Sankey/PureSankey/SankeyNode.d.ts.map +1 -1
  175. package/Sankey/PureSankey/SankeyUtils.d.ts.map +1 -1
  176. package/Sankey/Sankey.d.ts +3 -1
  177. package/Sankey/Sankey.d.ts.map +1 -1
  178. package/Sankey.js +508 -219
  179. package/Sankey.js.map +4 -4
  180. package/Scatter.config.js +3 -5
  181. package/Scatter.config.js.map +2 -2
  182. package/Scatter.js +244 -146
  183. package/Scatter.js.map +4 -4
  184. package/SingleValue/SingleValue.d.ts.map +1 -1
  185. package/SingleValue.js +273 -173
  186. package/SingleValue.js.map +4 -4
  187. package/SingleValueBasic.js +4 -4
  188. package/SingleValueBasic.js.map +2 -2
  189. package/SingleValueIcon/SingleValueIcon.d.ts.map +1 -1
  190. package/SingleValueIcon.js +264 -164
  191. package/SingleValueIcon.js.map +4 -4
  192. package/SingleValueRadial.js +267 -167
  193. package/SingleValueRadial.js.map +4 -4
  194. package/SparkLine/SparkLine.d.ts.map +1 -1
  195. package/SparkLine.js.map +2 -2
  196. package/Table/PureTable.d.ts.map +1 -1
  197. package/Table/Table.d.ts +2 -5
  198. package/Table/Table.d.ts.map +1 -1
  199. package/Table/hooks.d.ts.map +1 -1
  200. package/Table.config.js +1 -1
  201. package/Table.config.js.map +2 -2
  202. package/Table.js +293 -271
  203. package/Table.js.map +4 -4
  204. package/Timeline/Timeline.d.ts +3 -1
  205. package/Timeline/Timeline.d.ts.map +1 -1
  206. package/Timeline.config.js +2 -2
  207. package/Timeline.config.js.map +2 -2
  208. package/Timeline.js +266 -142
  209. package/Timeline.js.map +4 -4
  210. package/Treemap/Treemap.d.ts +3 -1
  211. package/Treemap/Treemap.d.ts.map +1 -1
  212. package/Treemap.js +263 -147
  213. package/Treemap.js.map +4 -4
  214. package/common/Charting.js +8 -10
  215. package/common/Charting.js.map +2 -2
  216. package/common/ChartingApi.d.ts.map +1 -1
  217. package/common/ChartingApi.js +5 -2
  218. package/common/ChartingApi.js.map +2 -2
  219. package/common/DocExampleWithVizSandbox.d.ts +2 -0
  220. package/common/DocExampleWithVizSandbox.d.ts.map +1 -1
  221. package/common/DocExampleWithVizSandbox.js +54 -6
  222. package/common/DocExampleWithVizSandbox.js.map +2 -2
  223. package/common/GaugeMajorTicks.js.map +2 -2
  224. package/common/GaugeValueMarker.js.map +2 -2
  225. package/common/OptionsDoc.js +1 -1
  226. package/common/OptionsDoc.js.map +2 -2
  227. package/common/OverviewDoc.js +54 -6
  228. package/common/OverviewDoc.js.map +2 -2
  229. package/common/ThemesDoc.js.map +2 -2
  230. package/common/TimeSeriesChartWrapper.js +10 -9
  231. package/common/TimeSeriesChartWrapper.js.map +2 -2
  232. package/common/chartingUtils.d.ts.map +1 -1
  233. package/common/chartingUtils.js +12 -11
  234. package/common/chartingUtils.js.map +2 -2
  235. package/common/components/IconPlaceholder.d.ts.map +1 -1
  236. package/common/docUtils.d.ts.map +1 -1
  237. package/common/docUtils.js +15 -6
  238. package/common/docUtils.js.map +2 -2
  239. package/common/editorConfig/AxesChartDataDisplay.d.ts.map +1 -1
  240. package/common/gaugeUtils.d.ts.map +1 -1
  241. package/common/gaugeUtils.js +4 -2
  242. package/common/gaugeUtils.js.map +2 -2
  243. package/common/hooks/useSorting.d.ts.map +1 -1
  244. package/common/interfaces/VizEvent.d.ts +7 -0
  245. package/common/interfaces/VizEvent.d.ts.map +1 -1
  246. package/common/utils/dataUtils.d.ts.map +1 -1
  247. package/common/utils/dataUtils.js +6 -10
  248. package/common/utils/dataUtils.js.map +2 -2
  249. package/common/utils/featureFlagUtils.js +2 -2
  250. package/common/utils/featureFlagUtils.js.map +2 -2
  251. package/common/utils/focusUtils.js +1 -1
  252. package/common/utils/focusUtils.js.map +2 -2
  253. package/common/utils/mapUtils.d.ts.map +1 -1
  254. package/common/utils/mapUtils.js +17 -21
  255. package/common/utils/mapUtils.js.map +3 -3
  256. package/common/utils/singleValueUtils.js +22 -25
  257. package/common/utils/singleValueUtils.js.map +2 -2
  258. package/common/utils/textUtils.d.ts.map +1 -1
  259. package/common/utils/textUtils.js +37 -23
  260. package/common/utils/textUtils.js.map +2 -2
  261. package/common/utils/trellisUtils.d.ts.map +1 -1
  262. package/common/utils/trellisUtils.js +18 -17
  263. package/common/utils/trellisUtils.js.map +2 -2
  264. package/common/utils/urlUtils.js.map +2 -2
  265. package/common/utils/visualizationTheme.d.ts +15 -0
  266. package/common/utils/visualizationTheme.d.ts.map +1 -0
  267. package/common/utils/visualizationTheme.js +72 -0
  268. package/common/utils/visualizationTheme.js.map +7 -0
  269. package/common/withDashboardViz.d.ts +3 -1
  270. package/common/withDashboardViz.d.ts.map +1 -1
  271. package/common/withDashboardViz.js +216 -105
  272. package/common/withDashboardViz.js.map +4 -4
  273. package/docs-llm/map/examples-react.md +39 -39
  274. package/docs-llm/network-graph/options.md +2 -2
  275. package/docs-llm/pie/examples-json.md +195 -0
  276. package/docs-llm/pie/examples-react.md +123 -0
  277. package/docs-llm/pie/options.md +1 -1
  278. package/docs-llm/process-tree/options.md +3 -2
  279. package/package.json +32 -29
package/Markdown.js CHANGED
@@ -66,6 +66,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
66
66
  var Markdown_exports3 = {};
67
67
  __export(Markdown_exports3, {
68
68
  FONT_SIZES: () => FONT_SIZES,
69
+ MarkdownVisualization: () => MarkdownVisualization,
69
70
  computeVizProps: () => computeVizProps,
70
71
  config: () => config_default,
71
72
  default: () => Markdown_default3,
@@ -427,7 +428,10 @@ var useSortingParams = ({ requestParams, onRequestParamsChange }) => {
427
428
  onSort = (e, { sortKey, sortDir }) => {
428
429
  if (typeof sortKey === "string") {
429
430
  const nextSortDir = (0, lodash_exports.has)(nextSortDirMap, sortDir) ? nextSortDirMap[sortDir] : "none";
430
- onRequestParamsChange(__spreadValues(__spreadValues({}, requestParams), { offset: 0, sort: { [sortKey]: nextSortDir } }));
431
+ onRequestParamsChange(__spreadProps(__spreadValues({}, requestParams), {
432
+ offset: 0,
433
+ sort: { [sortKey]: nextSortDir }
434
+ }));
431
435
  } else {
432
436
  onRequestParamsChange(requestParams);
433
437
  }
@@ -562,7 +566,7 @@ var Cover = styled_components_default.div`
562
566
  bottom: 0;
563
567
  `;
564
568
  var Blocker = styled_components_default.div.attrs({
565
- "data-splunk-visualization-version": "28.8.0 - 633c53372"
569
+ "data-splunk-visualization-version": "28.9.1 - fba477a41"
566
570
  })`
567
571
  position: relative;
568
572
  width: 100%;
@@ -652,7 +656,7 @@ var withFixedSizeContainer = (Viz) => {
652
656
  FixSizeItem,
653
657
  {
654
658
  "data-test": "fix-size-item",
655
- "data-splunk-visualization-version": "28.8.0 - 633c53372",
659
+ "data-splunk-visualization-version": "28.9.1 - fba477a41",
656
660
  width,
657
661
  height,
658
662
  backgroundColor
@@ -673,6 +677,14 @@ var shouldShowIconPlaceholder = (dataSources, loading = false) => {
673
677
  const noFields = fields === void 0;
674
678
  return loading || noData || noFields;
675
679
  };
680
+ var PlaceholderContainer = styled_components_default.div`
681
+ /* The inline token color wins when supported. Older browsers discard an
682
+ unsupported oklch value and retain this inherited fallback instead. */
683
+ color: ${(0, themes_exports.pick)({
684
+ dark: "#fafafa",
685
+ light: "#2c2c2c"
686
+ })};
687
+ `;
676
688
  var IconPlaceholder = (props) => {
677
689
  const {
678
690
  width = SplunkVisualization_default.defaults.width,
@@ -687,7 +699,6 @@ var IconPlaceholder = (props) => {
687
699
  style: {
688
700
  left: "50%",
689
701
  top: "50%",
690
- color: iconColor,
691
702
  opacity: 0.15,
692
703
  position: "absolute",
693
704
  transform: "translate(-50%, -50%)"
@@ -697,7 +708,14 @@ var IconPlaceholder = (props) => {
697
708
  "data-test": "icon-placeholder"
698
709
  });
699
710
  }
700
- return /* @__PURE__ */ react_exports.createElement("div", { style: { width, height, background: backgroundColor } }, content);
711
+ return /* @__PURE__ */ react_exports.createElement(
712
+ PlaceholderContainer,
713
+ {
714
+ "data-test": "icon-placeholder-container",
715
+ style: { width, height, background: backgroundColor, color: iconColor }
716
+ },
717
+ content
718
+ );
701
719
  };
702
720
  var IconPlaceholder_default = FixedSizeContainer_default(IconPlaceholder);
703
721
 
@@ -771,7 +789,7 @@ var largestTriangleThreeBuckets = (data, threshold, preferredDownsampleIndices)
771
789
  let avgY = 0;
772
790
  let avgRangeStart = Math.floor((i + 1) * every) + 1;
773
791
  let avgRangeEnd = Math.floor((i + 2) * every) + 1;
774
- avgRangeEnd = avgRangeEnd < dataLength ? avgRangeEnd : dataLength;
792
+ avgRangeEnd = Math.min(avgRangeEnd, dataLength);
775
793
  const avgRangeLength = avgRangeEnd - avgRangeStart;
776
794
  for (; avgRangeStart < avgRangeEnd; avgRangeStart++) {
777
795
  avgX += Number(data[avgRangeStart][0]);
@@ -806,9 +824,9 @@ var largestTriangleThreeBuckets = (data, threshold, preferredDownsampleIndices)
806
824
  };
807
825
  var strictlyCoerceYColumn = (column, options) => {
808
826
  const isNullCoercionEnabled = options.nullValueDisplay === "zero";
809
- const canLooselyCoerceSomeValues = column.findIndex(
827
+ const canLooselyCoerceSomeValues = column.some(
810
828
  (value) => (0, numberUtils_exports.startsWithNumber)(`${value}`) || isNullCoercionEnabled && value === null
811
- ) >= 0;
829
+ );
812
830
  const coercedColumn = [];
813
831
  const canDownsampleColumn = !column.some((value) => {
814
832
  const coercedValue = Number(value);
@@ -827,7 +845,7 @@ var strictlyCoerceYColumn = (column, options) => {
827
845
  };
828
846
  var strictlyCoerceXColumn = (column, fieldType) => {
829
847
  if (fieldType === "number") {
830
- const coercedXColumn = column.map((xValue) => Number(xValue));
848
+ const coercedXColumn = column.map(Number);
831
849
  if (isColumnStrictlyIncreasing(coercedXColumn, fieldType)) {
832
850
  return coercedXColumn;
833
851
  }
@@ -1132,10 +1150,10 @@ var FeatureFlags_default = "default" in defaultImport30 ? defaultImport30.defaul
1132
1150
 
1133
1151
  // src/common/utils/featureFlagUtils.ts
1134
1152
  var getFeatureFlag = (context, flagName) => {
1135
- if (context && Object.keys(context).find((key) => key === flagName)) {
1153
+ if (context && Object.keys(context).includes(flagName)) {
1136
1154
  return context[flagName];
1137
1155
  }
1138
- if (Object.keys(FeatureFlags_default).find((key) => key === flagName)) {
1156
+ if (Object.keys(FeatureFlags_default).includes(flagName)) {
1139
1157
  return FeatureFlags_default[flagName];
1140
1158
  }
1141
1159
  return false;
@@ -1248,9 +1266,9 @@ var shouldEnableSearchZoom = (eventHandlers = [], xField = "") => {
1248
1266
  const xAxisIsTime = xField === "_time";
1249
1267
  return !!rangeSelectEventHandler && xAxisIsTime;
1250
1268
  };
1251
- var canvasSupportedTimeSeriesCharts = ["splunk.line", "splunk.area"];
1269
+ var canvasSupportedTimeSeriesCharts = /* @__PURE__ */ new Set(["splunk.line", "splunk.area"]);
1252
1270
  var isTimeSeriesCanvasRenderSupported = (vizConfigKey) => {
1253
- return canvasSupportedTimeSeriesCharts.includes(vizConfigKey);
1271
+ return canvasSupportedTimeSeriesCharts.has(vizConfigKey);
1254
1272
  };
1255
1273
  var filterChartDataFromInternalFields = (chartData) => {
1256
1274
  const { fields, columns } = chartData;
@@ -1266,7 +1284,7 @@ var filterChartDataFromInternalFields = (chartData) => {
1266
1284
  return { fields: filteredFields, columns: filteredColumns };
1267
1285
  };
1268
1286
  var convert2DArrayToNumbers = (arr) => {
1269
- return arr.map((subArray) => subArray.map((element) => parseFloat(element)));
1287
+ return arr.map((subArray) => subArray.map((element) => Number.parseFloat(element)));
1270
1288
  };
1271
1289
  var parseAxisValue = (val) => {
1272
1290
  if (val === void 0 || val === null || val === "auto" || val === "") {
@@ -1304,6 +1322,7 @@ var getLegend = (props) => {
1304
1322
  return (0, visualization_canvas_exports.TopLegendFactory)(__spreadValues({
1305
1323
  wrap: true
1306
1324
  }, commonLegendProps));
1325
+ // Note: By default, use right legend
1307
1326
  default:
1308
1327
  return (0, visualization_canvas_exports.SideLegendFactory)(__spreadValues({}, commonLegendProps));
1309
1328
  }
@@ -1436,10 +1455,10 @@ var getSeriesOverrides = (opts) => {
1436
1455
  let spanGaps;
1437
1456
  if (nullValueMode === "gaps") {
1438
1457
  spanGaps = false;
1439
- } else if (nullValueMode != null) {
1440
- spanGaps = true;
1441
- } else {
1458
+ } else if (nullValueMode == null) {
1442
1459
  spanGaps = void 0;
1460
+ } else {
1461
+ spanGaps = true;
1443
1462
  }
1444
1463
  const replaceNullsWithZero = nullValueMode === "zero" ? true : void 0;
1445
1464
  const isAreaChart = type === "area";
@@ -1879,11 +1898,11 @@ var TimeSeriesChartWrapper = (props) => {
1879
1898
  y2AxisMajorUnitFromSimpleXML,
1880
1899
  y2AxisMajorTickInterval
1881
1900
  );
1882
- const xAxisMajorTickSizeNum = xAxisMajorTickSize != null ? Number(xAxisMajorTickSize) : void 0;
1883
- const yAxisMajorTickSizeNum = yAxisMajorTickSize != null ? Number(yAxisMajorTickSize) : void 0;
1884
- const y2AxisMajorTickSizeNum = y2AxisMajorTickSize != null ? Number(y2AxisMajorTickSize) : void 0;
1885
- const yAxisMinorTickSizeNum = yAxisMinorTickSize != null ? Number(yAxisMinorTickSize) : void 0;
1886
- const y2AxisMinorTickSizeNum = y2AxisMinorTickSize != null ? Number(y2AxisMinorTickSize) : void 0;
1901
+ const xAxisMajorTickSizeNum = xAxisMajorTickSize == null ? void 0 : Number(xAxisMajorTickSize);
1902
+ const yAxisMajorTickSizeNum = yAxisMajorTickSize == null ? void 0 : Number(yAxisMajorTickSize);
1903
+ const y2AxisMajorTickSizeNum = y2AxisMajorTickSize == null ? void 0 : Number(y2AxisMajorTickSize);
1904
+ const yAxisMinorTickSizeNum = yAxisMinorTickSize == null ? void 0 : Number(yAxisMinorTickSize);
1905
+ const y2AxisMinorTickSizeNum = y2AxisMinorTickSize == null ? void 0 : Number(y2AxisMinorTickSize);
1887
1906
  const areaOpacityForCanvas = getAreaOpacityForCanvas(areaOpacity);
1888
1907
  const seriesColors = seriesColorsStr ? JSON.parse(seriesColorsStr) : void 0;
1889
1908
  const seriesColorsByField = fieldColors ? JSON.parse(fieldColors) : void 0;
@@ -2295,6 +2314,76 @@ var buildEventCallbackProps = (supportedEvents, evaluatedOptionsToUse, onEventTr
2295
2314
  });
2296
2315
  return result;
2297
2316
  };
2317
+ var buildAllEventCallbackProps = (events, evaluatedOptionsToUse, onEventTrigger, { supportsEvents, hasEventHandlers, mode }) => {
2318
+ if (!supportsEvents) return {};
2319
+ const defaultEvents = {};
2320
+ const userEvents = {};
2321
+ Object.entries(events || {}).forEach(([eventKey, eventConfig]) => {
2322
+ (eventConfig.source === "default" ? defaultEvents : userEvents)[eventKey] = eventConfig;
2323
+ });
2324
+ const userProps = hasEventHandlers && mode === "view" ? buildEventCallbackProps(userEvents, evaluatedOptionsToUse, onEventTrigger) : {};
2325
+ return __spreadValues(__spreadValues({}, userProps), buildEventCallbackProps(defaultEvents, evaluatedOptionsToUse, onEventTrigger));
2326
+ };
2327
+ var applyContextTimezone = (localeContext) => {
2328
+ if (localeContext.serializedTimezone && !moment_default.getDefaultSplunkTimezone()) {
2329
+ moment_default.setDefaultSplunkTimezone(localeContext.serializedTimezone);
2330
+ }
2331
+ };
2332
+ var getAsyncOptionsEvaluationParams = ({
2333
+ visualizationID,
2334
+ props,
2335
+ optionsToEvaluate,
2336
+ downsampledDataSources,
2337
+ vizConfig,
2338
+ bypassCloneDeepOptionScope,
2339
+ lazyLoadingDataFrame
2340
+ }) => {
2341
+ return {
2342
+ visualizationID,
2343
+ props,
2344
+ options: __spreadValues({}, optionsToEvaluate),
2345
+ dataSources: downsampledDataSources,
2346
+ theme: vizConfig.themes,
2347
+ bypassCloneDeepOptionScope,
2348
+ lazyLoadingDataFrame
2349
+ };
2350
+ };
2351
+ var evaluateOptionsSync = ({
2352
+ optionsToEvaluate,
2353
+ downsampledDataSources,
2354
+ dataSourcesInState,
2355
+ dataFramesInState,
2356
+ setDataSourcesInState,
2357
+ setDataFramesInState,
2358
+ computeDataFrames,
2359
+ featureFlagContext,
2360
+ themeFunc
2361
+ }) => {
2362
+ let dataFrames = dataFramesInState;
2363
+ if (downsampledDataSources !== dataSourcesInState) {
2364
+ setDataSourcesInState(downsampledDataSources);
2365
+ dataFrames = Options_exports.Options.dataFrameFromDataSource(
2366
+ downsampledDataSources,
2367
+ getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
2368
+ );
2369
+ setDataFramesInState(dataFrames);
2370
+ }
2371
+ let mergedFrames = dataFrames;
2372
+ if (computeDataFrames && dataFrames) {
2373
+ const derivedFrames = computeDataFrames({
2374
+ dataSources: downsampledDataSources,
2375
+ options: optionsToEvaluate.options
2376
+ });
2377
+ mergedFrames = __spreadValues(__spreadValues({}, dataFrames), derivedFrames);
2378
+ }
2379
+ return Options_exports.Options.evaluate(
2380
+ optionsToEvaluate,
2381
+ downsampledDataSources,
2382
+ themeFunc,
2383
+ mergedFrames,
2384
+ getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
2385
+ );
2386
+ };
2298
2387
  var withDashboardViz = (opts) => {
2299
2388
  const {
2300
2389
  ReactViz,
@@ -2326,11 +2415,7 @@ var withDashboardViz = (opts) => {
2326
2415
  onRequestParamsChange = lodash_exports.noop
2327
2416
  } = props;
2328
2417
  const localeContext = react_exports.useContext(TimezoneContext_default);
2329
- if (localeContext.serializedTimezone) {
2330
- if (!moment_default.getDefaultSplunkTimezone()) {
2331
- moment_default.setDefaultSplunkTimezone(localeContext.serializedTimezone);
2332
- }
2333
- }
2418
+ applyContextTimezone(localeContext);
2334
2419
  const themeFunc = (themeVar) => {
2335
2420
  var _a2, _b;
2336
2421
  return (_b = (_a2 = vizConfig.themes)[themeVar]) == null ? void 0 : _b.call(_a2, props);
@@ -2358,7 +2443,12 @@ var withDashboardViz = (opts) => {
2358
2443
  featureFlagContext == null ? void 0 : featureFlagContext.visualizations_enableAcceleratedRender
2359
2444
  );
2360
2445
  const isAcceleratedRenderOn = isAcceleratedRenderFeatureFlagOn && isTimeSeriesCanvasRenderSupported(vizConfig.key) && (options == null ? void 0 : options.acceleratedRender) === true;
2361
- const isMounted = react_exports.useRef(true);
2446
+ const bypassCloneDeepOptionScope = Boolean(
2447
+ getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
2448
+ );
2449
+ const lazyLoadingDataFrame = Boolean(
2450
+ getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
2451
+ );
2362
2452
  const optionsToEvaluate = react_exports.useMemo(() => {
2363
2453
  var _a2;
2364
2454
  const legendDisplay = turnOffLegendDisplayWhenTrellisIsOn(isTrellisOn, options);
@@ -2397,63 +2487,74 @@ var withDashboardViz = (opts) => {
2397
2487
  threshold,
2398
2488
  isDownsamplingEnabled
2399
2489
  });
2400
- evaluatedOptions = useDeepMemo(() => {
2490
+ const asyncOptionsEvaluationParams = useDeepMemo(
2491
+ () => getAsyncOptionsEvaluationParams({
2492
+ visualizationID,
2493
+ props,
2494
+ optionsToEvaluate,
2495
+ downsampledDataSources,
2496
+ vizConfig,
2497
+ bypassCloneDeepOptionScope,
2498
+ lazyLoadingDataFrame
2499
+ }),
2500
+ [
2501
+ visualizationID,
2502
+ optionsToEvaluate,
2503
+ downsampledDataSources,
2504
+ vizConfig,
2505
+ bypassCloneDeepOptionScope,
2506
+ lazyLoadingDataFrame,
2507
+ currentThemeFamily,
2508
+ currentThemeColorScheme,
2509
+ currentThemeDensity,
2510
+ localeContext.serializedTimezone
2511
+ ]
2512
+ );
2513
+ react_exports.useEffect(() => {
2514
+ if (!useAsyncEvaluatedOptions) {
2515
+ return void 0;
2516
+ }
2517
+ let ownsEvaluation = true;
2401
2518
  try {
2402
- if (useAsyncEvaluatedOptions) {
2403
- const asyncDynamicOptionsEvaluatorParams = {
2404
- visualizationID,
2405
- props,
2406
- options: optionsToEvaluate,
2407
- dataSources: downsampledDataSources,
2408
- theme: vizConfig.themes,
2409
- bypassCloneDeepOptionScope: Boolean(
2410
- getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
2411
- ),
2412
- lazyLoadingDataFrame: Boolean(
2413
- getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
2414
- )
2415
- };
2416
- async_dynamic_options_evaluator_default.evaluate(asyncDynamicOptionsEvaluatorParams).then((results) => {
2519
+ async_dynamic_options_evaluator_default.evaluate(asyncOptionsEvaluationParams).then((results) => {
2520
+ if (ownsEvaluation) {
2417
2521
  setEvaluatedOptionsAsync(results.results);
2418
- }).catch(() => {
2419
- if (isMounted.current) {
2420
- setUseAsyncEvaluatedOptions(false);
2421
- }
2422
- });
2423
- } else {
2424
- let dataFrames = dataFramesInState;
2425
- if (downsampledDataSources !== dataSourcesInState) {
2426
- setDataSourcesInState(downsampledDataSources);
2427
- dataFrames = Options_exports.Options.dataFrameFromDataSource(
2428
- downsampledDataSources,
2429
- getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
2430
- );
2431
- setDataFramesInState(dataFrames);
2432
2522
  }
2433
- let mergedFrames = dataFrames;
2434
- if (computeDataFrames && dataFrames) {
2435
- const derivedFrames = computeDataFrames({
2436
- dataSources: downsampledDataSources,
2437
- options: optionsToEvaluate.options
2438
- });
2439
- mergedFrames = __spreadValues(__spreadValues({}, dataFrames), derivedFrames);
2523
+ }).catch(() => {
2524
+ if (ownsEvaluation) {
2525
+ setUseAsyncEvaluatedOptions(false);
2440
2526
  }
2441
- const result = Options_exports.Options.evaluate(
2442
- optionsToEvaluate,
2443
- downsampledDataSources,
2444
- themeFunc,
2445
- mergedFrames,
2446
- getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
2447
- );
2448
- return result;
2527
+ });
2528
+ } catch (e) {
2529
+ setUseAsyncEvaluatedOptions(false);
2530
+ }
2531
+ return () => {
2532
+ ownsEvaluation = false;
2533
+ async_dynamic_options_evaluator_default.reset(visualizationID);
2534
+ };
2535
+ }, [asyncOptionsEvaluationParams, useAsyncEvaluatedOptions, visualizationID]);
2536
+ evaluatedOptions = useDeepMemo(() => {
2537
+ try {
2538
+ if (useAsyncEvaluatedOptions) {
2539
+ return {};
2449
2540
  }
2541
+ return evaluateOptionsSync({
2542
+ optionsToEvaluate,
2543
+ downsampledDataSources,
2544
+ dataSourcesInState,
2545
+ dataFramesInState,
2546
+ setDataSourcesInState,
2547
+ setDataFramesInState,
2548
+ computeDataFrames,
2549
+ featureFlagContext,
2550
+ themeFunc
2551
+ });
2450
2552
  } catch (e) {
2451
2553
  if (e instanceof Error) {
2452
2554
  console.error(`unexpected error evaluating options: ${e.message}`);
2453
2555
  }
2454
2556
  return {};
2455
2557
  }
2456
- return {};
2457
2558
  }, [
2458
2559
  currentThemeFamily,
2459
2560
  currentThemeColorScheme,
@@ -2463,7 +2564,7 @@ var withDashboardViz = (opts) => {
2463
2564
  localeContext.serializedTimezone,
2464
2565
  useAsyncEvaluatedOptions
2465
2566
  ]);
2466
- const evaluatedOptionsToUse = !useAsyncEvaluatedOptions ? evaluatedOptions : evaluatedOptionsAsync;
2567
+ const evaluatedOptionsToUse = useAsyncEvaluatedOptions ? evaluatedOptionsAsync : evaluatedOptions;
2467
2568
  let dataSourceMetadata = {};
2468
2569
  const OptionKey = "paginateDataSourceKey";
2469
2570
  const optsKey = (0, lodash_exports.has)(evaluatedOptionsToUse, OptionKey) && evaluatedOptionsToUse[OptionKey];
@@ -2485,7 +2586,7 @@ var withDashboardViz = (opts) => {
2485
2586
  sortParams,
2486
2587
  paginatorParams
2487
2588
  };
2488
- if (vizConfig.supports.indexOf("page-and-sort" /* PAGE_AND_SORT */) === -1 && !(0, lodash_exports.has)(dataSources, paginateDataSourceKey)) {
2589
+ if (!vizConfig.supports.includes("page-and-sort" /* PAGE_AND_SORT */) && !(0, lodash_exports.has)(dataSources, paginateDataSourceKey)) {
2489
2590
  dataSourceMetadata = {};
2490
2591
  }
2491
2592
  const clonedEvaluatedOptions = __spreadValues({}, evaluatedOptionsToUse);
@@ -2495,14 +2596,6 @@ var withDashboardViz = (opts) => {
2495
2596
  react_exports.useEffect(() => {
2496
2597
  onComputedProps(clonedEvaluatedOptions);
2497
2598
  });
2498
- react_exports.useEffect(() => {
2499
- return () => {
2500
- if (useAsyncEvaluatedOptions) {
2501
- isMounted.current = false;
2502
- async_dynamic_options_evaluator_default.reset(visualizationID);
2503
- }
2504
- };
2505
- }, []);
2506
2599
  const { requiredProps = [], supports } = vizConfig;
2507
2600
  const missing = missingKeys(requiredProps, evaluatedOptionsToUse);
2508
2601
  if (missing.length > 0 && supports.includes("placeholder" /* PLACEHOLDER */) && vizConfig.key !== "splunk.singlevalue") {
@@ -2517,7 +2610,16 @@ var withDashboardViz = (opts) => {
2517
2610
  }
2518
2611
  );
2519
2612
  }
2520
- const eventCallbackProps = hasEventHandlers && mode === "view" && vizConfig.supports.includes("events" /* EVENTS */) ? buildEventCallbackProps(vizConfig.events, evaluatedOptionsToUse, onEventTrigger) : {};
2613
+ const eventCallbackProps = buildAllEventCallbackProps(
2614
+ vizConfig.events,
2615
+ evaluatedOptionsToUse,
2616
+ onEventTrigger,
2617
+ {
2618
+ supportsEvents: vizConfig.supports.includes("events" /* EVENTS */),
2619
+ hasEventHandlers,
2620
+ mode
2621
+ }
2622
+ );
2521
2623
  const computedVizProps = computeVizProps2(__spreadProps(__spreadValues(__spreadProps(__spreadValues(__spreadValues({}, props), evaluatedOptionsToUse), {
2522
2624
  // Align option transformation with the actual renderer selected below.
2523
2625
  // This prevents canvas-only option preservation from leaking into Highcharts mode.
@@ -2545,8 +2647,9 @@ var withDashboardViz = (opts) => {
2545
2647
  onEventTrigger: SplunkVisualization_default.defaults.onEventTrigger
2546
2648
  });
2547
2649
  DashboardViz.config = vizConfig;
2548
- return (0, styled_components_exports.withTheme)(
2549
- withPlaceholder_default(withEditModeCover_default(DashboardViz, disableEditModeCover), useIconPlaceholder)
2650
+ return Object.assign(
2651
+ (0, styled_components_exports.withTheme)(withPlaceholder_default(withEditModeCover_default(DashboardViz, disableEditModeCover), useIconPlaceholder)),
2652
+ { config: vizConfig }
2550
2653
  );
2551
2654
  };
2552
2655
  var withDashboardViz_default = withDashboardViz;
@@ -2735,6 +2838,11 @@ var config = {
2735
2838
  events: {
2736
2839
  "markdown.click": {
2737
2840
  description: "triggered when user clicks on markdown area not formatted as a link"
2841
+ },
2842
+ "link.open": {
2843
+ description: "triggered when the user activates a link; payload carries the resolved url",
2844
+ // Default behavior: fires ungated by event handlers and in edit mode too.
2845
+ source: "default"
2738
2846
  }
2739
2847
  },
2740
2848
  supports: ["dynamic-options" /* DYNAMIC_OPTIONS */, "events" /* EVENTS */],
@@ -2788,7 +2896,7 @@ var MarkdownContainer = styled_components_default.div`
2788
2896
  color: ${(props) => props.fontColor};
2789
2897
  }
2790
2898
  ${({ startsWithHeader }) => startsWithHeader && `
2791
- h${startsWithHeader >= 4 ? 4 : startsWithHeader}:first-of-type {
2899
+ h${Math.min(startsWithHeader, 4)}:first-of-type {
2792
2900
  margin-top: 0px;
2793
2901
  }
2794
2902
  `};
@@ -2869,7 +2977,6 @@ var getFontMap = (fontSize) => {
2869
2977
  }
2870
2978
  return FONT_SIZES[font];
2871
2979
  };
2872
- var handleLinkClick = (e) => e.stopPropagation();
2873
2980
  var StyledA = styled_components_default.a`
2874
2981
  text-decoration: underlined;
2875
2982
  `;
@@ -2883,7 +2990,14 @@ var StyledButton = styled_components_default(Button_default)`
2883
2990
  background-color: ${themes_exports.variables.backgroundColorSection};
2884
2991
  }
2885
2992
  `;
2886
- var getMarkdownRenderer = (fontFamilyStyle, fontSize, customFontSize) => {
2993
+ var openHref = (e, href, onLinkOpen) => {
2994
+ e.stopPropagation();
2995
+ if (onLinkOpen && href) {
2996
+ e.preventDefault();
2997
+ onLinkOpen(href);
2998
+ }
2999
+ };
3000
+ var getMarkdownRenderer = (fontFamilyStyle, fontSize, customFontSize, onLinkOpen) => {
2887
3001
  const cleanedCustomFontSize = (0, types_exports.isNumber)(customFontSize) ? customFontSize : 14;
2888
3002
  const isCustomFontSize = fontSize === "custom";
2889
3003
  const fontMap = isCustomFontSize ? {
@@ -2947,7 +3061,17 @@ var getMarkdownRenderer = (fontFamilyStyle, fontSize, customFontSize) => {
2947
3061
  return /* @__PURE__ */ react_exports.createElement(CodeInlineContainer, { style: { fontSize: fontMap.p } }, children);
2948
3062
  },
2949
3063
  linkRenderer: ({ href, children }) => {
2950
- return /* @__PURE__ */ react_exports.createElement(StyledA, { href, onClick: handleLinkClick }, children);
3064
+ return /* @__PURE__ */ react_exports.createElement(
3065
+ StyledA,
3066
+ {
3067
+ href,
3068
+ onClick: (e) => openHref(e, href, onLinkOpen),
3069
+ onAuxClick: (e) => {
3070
+ if (e.button === 1) openHref(e, href, onLinkOpen);
3071
+ }
3072
+ },
3073
+ children
3074
+ );
2951
3075
  }
2952
3076
  };
2953
3077
  };
@@ -2962,17 +3086,23 @@ var MarkdownVisualization = ({
2962
3086
  customFontSize = 14,
2963
3087
  rotation = 0,
2964
3088
  hasEventHandlers = false,
2965
- onMarkdownClick = lodash_exports.noop
3089
+ onMarkdownClick = lodash_exports.noop,
3090
+ onLinkOpen
2966
3091
  }) => {
2967
3092
  const { fontFamily: defaultFontFamily } = (0, themes_exports.useSplunkTheme)();
2968
3093
  const markdownContentFontFamilyStyle = {
2969
3094
  fontFamily: `${fontFamily}, ${defaultFontFamily}`
2970
3095
  };
3096
+ const handleLinkOpen = react_exports.useMemo(
3097
+ () => onLinkOpen ? (url) => onLinkOpen({ payload: { url } }) : void 0,
3098
+ [onLinkOpen]
3099
+ );
2971
3100
  const stringifiedMarkdown = `${markdown}`;
2972
3101
  const renderersForFontSize = getMarkdownRenderer(
2973
3102
  markdownContentFontFamilyStyle,
2974
3103
  fontSize,
2975
- customFontSize
3104
+ customFontSize,
3105
+ handleLinkOpen
2976
3106
  );
2977
3107
  const trimmedMarkdown = stringifiedMarkdown.trim();
2978
3108
  const headerMatch = /^#+/.exec(trimmedMarkdown);
@@ -3015,7 +3145,8 @@ var computeVizProps = (props) => {
3015
3145
  var Markdown = withDashboardViz_default({
3016
3146
  ReactViz: MarkdownVisualization,
3017
3147
  vizConfig: config_default,
3018
- computeVizProps
3148
+ computeVizProps,
3149
+ disableEditModeCover: true
3019
3150
  });
3020
3151
  var { themes: themes2 } = config_default;
3021
3152
  var Markdown_default3 = Markdown;