@splunk/visualizations 28.7.0 → 28.8.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 (204) hide show
  1. package/Area.js +2 -2
  2. package/Area.js.map +2 -2
  3. package/Bar.js +2 -2
  4. package/Bar.js.map +2 -2
  5. package/Bubble.js +2 -2
  6. package/Bubble.js.map +2 -2
  7. package/CHANGELOG.external.md +26 -0
  8. package/ChoroplethSvg.js +2 -2
  9. package/ChoroplethSvg.js.map +2 -2
  10. package/Column.js +2 -2
  11. package/Column.js.map +2 -2
  12. package/Ellipse.js +2 -2
  13. package/Ellipse.js.map +2 -2
  14. package/Events.js +2 -2
  15. package/Events.js.map +2 -2
  16. package/FillerGauge.js +10 -5
  17. package/FillerGauge.js.map +2 -2
  18. package/Image.js +2 -2
  19. package/Image.js.map +2 -2
  20. package/Line.js +2 -2
  21. package/Line.js.map +2 -2
  22. package/LinkGraph.js +2 -2
  23. package/LinkGraph.js.map +2 -2
  24. package/Map.js +2 -2
  25. package/Map.js.map +2 -2
  26. package/Markdown.config.js +1 -1
  27. package/Markdown.config.js.map +1 -1
  28. package/Markdown.js +3 -3
  29. package/Markdown.js.map +2 -2
  30. package/MarkerGauge.js +10 -5
  31. package/MarkerGauge.js.map +2 -2
  32. package/NetworkGraph.js +2 -2
  33. package/NetworkGraph.js.map +2 -2
  34. package/ParallelCoordinates.js +2 -2
  35. package/ParallelCoordinates.js.map +2 -2
  36. package/Pie.js +2 -2
  37. package/Pie.js.map +2 -2
  38. package/ProcessTree.js +2 -2
  39. package/ProcessTree.js.map +2 -2
  40. package/Punchcard.js +2 -2
  41. package/Punchcard.js.map +2 -2
  42. package/Rectangle.js +2 -2
  43. package/Rectangle.js.map +2 -2
  44. package/RichText/PureRichText/Editor/EditorPanel.d.ts.map +1 -1
  45. package/RichText/PureRichText/InnerEditor.d.ts +10 -0
  46. package/RichText/PureRichText/InnerEditor.d.ts.map +1 -1
  47. package/RichText/PureRichText/PureRichText.d.ts +17 -0
  48. package/RichText/PureRichText/PureRichText.d.ts.map +1 -1
  49. package/RichText/PureRichText/PureRichTextContext.d.ts.map +1 -1
  50. package/RichText/PureRichText/hooks/useContentSave.d.ts +6 -0
  51. package/RichText/PureRichText/hooks/useContentSave.d.ts.map +1 -1
  52. package/RichText/PureRichText/hooks/useContentSync.d.ts +13 -1
  53. package/RichText/PureRichText/hooks/useContentSync.d.ts.map +1 -1
  54. package/RichText/PureRichText/hooks/useDashboardKeyboardNav.d.ts.map +1 -1
  55. package/RichText/PureRichText/hooks/useEditorSetup.d.ts.map +1 -1
  56. package/RichText/PureRichText/hooks/useFakeHighlight.d.ts +1 -16
  57. package/RichText/PureRichText/hooks/useFakeHighlight.d.ts.map +1 -1
  58. package/RichText/PureRichText/hooks/useTokenMap.d.ts +37 -35
  59. package/RichText/PureRichText/hooks/useTokenMap.d.ts.map +1 -1
  60. package/RichText/PureRichText/renderers/LeafRenderer.d.ts +0 -4
  61. package/RichText/PureRichText/renderers/LeafRenderer.d.ts.map +1 -1
  62. package/RichText/PureRichText/types.d.ts +15 -0
  63. package/RichText/PureRichText/types.d.ts.map +1 -1
  64. package/RichText/PureRichText/utils/slateUtils.d.ts.map +1 -1
  65. package/RichText/RichText.d.ts +2 -0
  66. package/RichText/RichText.d.ts.map +1 -1
  67. package/RichText/config.d.ts.map +1 -1
  68. package/RichText.config.js +14 -1
  69. package/RichText.config.js.map +2 -2
  70. package/RichText.js +733 -263
  71. package/RichText.js.map +4 -4
  72. package/Sankey.js +2 -2
  73. package/Sankey.js.map +2 -2
  74. package/Scatter.js +2 -2
  75. package/Scatter.js.map +2 -2
  76. package/SingleValue.js +2 -2
  77. package/SingleValue.js.map +2 -2
  78. package/SingleValueIcon.js +2 -2
  79. package/SingleValueIcon.js.map +2 -2
  80. package/SingleValueRadial.js +2 -2
  81. package/SingleValueRadial.js.map +2 -2
  82. package/Table/PureTable.d.ts +2 -0
  83. package/Table/PureTable.d.ts.map +1 -1
  84. package/Table/config.d.ts.map +1 -1
  85. package/Table.config.js +7 -0
  86. package/Table.config.js.map +2 -2
  87. package/Table.js +91 -9
  88. package/Table.js.map +4 -4
  89. package/Timeline/PureTimeline/PureTimeline.d.ts +6 -5
  90. package/Timeline/PureTimeline/PureTimeline.d.ts.map +1 -1
  91. package/Timeline/PureTimeline/src/CursorPlugin.d.ts +1 -0
  92. package/Timeline/PureTimeline/src/CursorPlugin.d.ts.map +1 -1
  93. package/Timeline/PureTimeline/src/TimelineLegend.d.ts +10 -7
  94. package/Timeline/PureTimeline/src/TimelineLegend.d.ts.map +1 -1
  95. package/Timeline/PureTimeline/src/TimelineTooltip.d.ts +5 -1
  96. package/Timeline/PureTimeline/src/TimelineTooltip.d.ts.map +1 -1
  97. package/Timeline/PureTimeline/src/TimelineUplot.d.ts +19 -2
  98. package/Timeline/PureTimeline/src/TimelineUplot.d.ts.map +1 -1
  99. package/Timeline/PureTimeline/src/TimelineYAxis.d.ts.map +1 -1
  100. package/Timeline/PureTimeline/src/XAxisPlugin.d.ts +1 -0
  101. package/Timeline/PureTimeline/src/XAxisPlugin.d.ts.map +1 -1
  102. package/Timeline/PureTimeline/src/utils/timelineUtils.d.ts +8 -0
  103. package/Timeline/PureTimeline/src/utils/timelineUtils.d.ts.map +1 -1
  104. package/Timeline.js +449 -211
  105. package/Timeline.js.map +4 -4
  106. package/Treemap/PureTreemap/components/PureTreemap.d.ts +42 -0
  107. package/Treemap/PureTreemap/components/PureTreemap.d.ts.map +1 -0
  108. package/Treemap/PureTreemap/components/TreemapBreadcrumb.d.ts +10 -0
  109. package/Treemap/PureTreemap/components/TreemapBreadcrumb.d.ts.map +1 -0
  110. package/Treemap/PureTreemap/components/TreemapChildCell.d.ts +28 -0
  111. package/Treemap/PureTreemap/components/TreemapChildCell.d.ts.map +1 -0
  112. package/Treemap/PureTreemap/components/TreemapHeader.d.ts +19 -0
  113. package/Treemap/PureTreemap/components/TreemapHeader.d.ts.map +1 -0
  114. package/Treemap/PureTreemap/components/TreemapHoverTarget.d.ts +17 -0
  115. package/Treemap/PureTreemap/components/TreemapHoverTarget.d.ts.map +1 -0
  116. package/Treemap/PureTreemap/components/TreemapLegend.d.ts +20 -0
  117. package/Treemap/PureTreemap/components/TreemapLegend.d.ts.map +1 -0
  118. package/Treemap/PureTreemap/components/TreemapNode.d.ts +5 -0
  119. package/Treemap/PureTreemap/components/TreemapNode.d.ts.map +1 -0
  120. package/Treemap/PureTreemap/components/TreemapParentNode.d.ts +10 -0
  121. package/Treemap/PureTreemap/components/TreemapParentNode.d.ts.map +1 -0
  122. package/Treemap/PureTreemap/components/TreemapStandaloneNode.d.ts +6 -0
  123. package/Treemap/PureTreemap/components/TreemapStandaloneNode.d.ts.map +1 -0
  124. package/Treemap/PureTreemap/components/TreemapTooltip.d.ts +17 -0
  125. package/Treemap/PureTreemap/components/TreemapTooltip.d.ts.map +1 -0
  126. package/Treemap/PureTreemap/mockdata/data.d.ts +90 -0
  127. package/Treemap/PureTreemap/mockdata/data.d.ts.map +1 -0
  128. package/Treemap/PureTreemap/utils/treemapColorUtils.d.ts +67 -0
  129. package/Treemap/PureTreemap/utils/treemapColorUtils.d.ts.map +1 -0
  130. package/Treemap/PureTreemap/utils/treemapDataColorUtils.d.ts +5 -0
  131. package/Treemap/PureTreemap/utils/treemapDataColorUtils.d.ts.map +1 -0
  132. package/Treemap/PureTreemap/utils/treemapDataUtils.d.ts +14 -0
  133. package/Treemap/PureTreemap/utils/treemapDataUtils.d.ts.map +1 -0
  134. package/Treemap/PureTreemap/utils/treemapLayout.d.ts +49 -0
  135. package/Treemap/PureTreemap/utils/treemapLayout.d.ts.map +1 -0
  136. package/Treemap/PureTreemap/utils/treemapNodeUtils.d.ts +81 -0
  137. package/Treemap/PureTreemap/utils/treemapNodeUtils.d.ts.map +1 -0
  138. package/Treemap/PureTreemap/utils/treemapTypes.d.ts +37 -0
  139. package/Treemap/PureTreemap/utils/treemapTypes.d.ts.map +1 -0
  140. package/Treemap/PureTreemap/utils/treemapUtils.d.ts +76 -0
  141. package/Treemap/PureTreemap/utils/treemapUtils.d.ts.map +1 -0
  142. package/Treemap/Treemap.d.ts +12 -0
  143. package/Treemap/Treemap.d.ts.map +1 -0
  144. package/Treemap/config.d.ts +4 -0
  145. package/Treemap/config.d.ts.map +1 -0
  146. package/Treemap/index.d.ts +3 -0
  147. package/Treemap/index.d.ts.map +1 -0
  148. package/Treemap.config.js +465 -0
  149. package/Treemap.config.js.map +7 -0
  150. package/Treemap.js +6233 -0
  151. package/Treemap.js.map +7 -0
  152. package/common/DocExampleWithVizSandbox.js.map +2 -2
  153. package/common/GaugeMajorTicks.js.map +2 -2
  154. package/common/GaugeValueMarker.js +1 -0
  155. package/common/GaugeValueMarker.js.map +2 -2
  156. package/common/OverviewDoc.js.map +2 -2
  157. package/common/docUtils.d.ts.map +1 -1
  158. package/common/docUtils.js +1 -8
  159. package/common/docUtils.js.map +2 -2
  160. package/common/gaugeUtils.d.ts.map +1 -1
  161. package/common/gaugeUtils.js +7 -3
  162. package/common/gaugeUtils.js.map +2 -2
  163. package/common/hocs/FixedSizeContainer.d.ts.map +1 -1
  164. package/common/hooks/useDynamicHeight.d.ts +67 -0
  165. package/common/hooks/useDynamicHeight.d.ts.map +1 -0
  166. package/common/interfaces/VizCategory.d.ts +2 -1
  167. package/common/interfaces/VizCategory.d.ts.map +1 -1
  168. package/common/withDashboardViz.js +2 -2
  169. package/common/withDashboardViz.js.map +2 -2
  170. package/docs-llm/INDEX.md +1 -0
  171. package/docs-llm/area/options.md +84 -84
  172. package/docs-llm/bar/options.md +77 -77
  173. package/docs-llm/bubble/options.md +51 -51
  174. package/docs-llm/choropleth-svg/options.md +5 -5
  175. package/docs-llm/column/options.md +82 -82
  176. package/docs-llm/ellipse/options.md +6 -6
  177. package/docs-llm/events/options.md +6 -6
  178. package/docs-llm/filler-gauge/options.md +16 -16
  179. package/docs-llm/image/options.md +3 -3
  180. package/docs-llm/line/options.md +82 -82
  181. package/docs-llm/link-graph/options.md +16 -16
  182. package/docs-llm/map/options.md +12 -12
  183. package/docs-llm/markdown/options.md +7 -7
  184. package/docs-llm/marker-gauge/options.md +16 -16
  185. package/docs-llm/network-graph/options.md +39 -39
  186. package/docs-llm/parallel-coordinates/options.md +4 -4
  187. package/docs-llm/pie/options.md +23 -23
  188. package/docs-llm/process-tree/options.md +22 -22
  189. package/docs-llm/punchcard/options.md +23 -23
  190. package/docs-llm/pure-rich-text/options.md +6 -5
  191. package/docs-llm/rectangle/options.md +9 -9
  192. package/docs-llm/rich-text/options.md +6 -5
  193. package/docs-llm/sankey/options.md +9 -9
  194. package/docs-llm/scatter/options.md +57 -57
  195. package/docs-llm/single-value/options.md +39 -39
  196. package/docs-llm/single-value-icon/options.md +33 -33
  197. package/docs-llm/single-value-radial/options.md +31 -31
  198. package/docs-llm/table/options.md +14 -13
  199. package/docs-llm/timeline/options.md +17 -17
  200. package/docs-llm/treemap/examples-json.md +5 -0
  201. package/docs-llm/treemap/examples-react.md +5 -0
  202. package/docs-llm/treemap/options.md +26 -0
  203. package/docs-llm/treemap/overview.md +27 -0
  204. package/package.json +28 -27
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/common/OverviewDoc.tsx", "esm-externals:react", "esm-externals:prop-types", "esm-externals:styled-components", "esm-externals:@splunk/react-ui/Paragraph", "esm-externals:@splunk/react-ui/Heading", "esm-externals:@splunk/react-ui/List", "esm-externals:@splunk/react-ui/Chip", "esm-externals:@splunk/react-ui/Prose", "esm-externals:@splunk/react-icons/enterprise/ChartLine", "esm-externals:@splunk/react-icons/enterprise/ChartBar", "esm-externals:@splunk/react-icons/enterprise/ChartScatter", "esm-externals:@splunk/react-icons/enterprise/ChoroplethMap", "esm-externals:@splunk/react-icons/enterprise/SplitBy", "esm-externals:@splunk/react-docs/DocExample", "esm-externals:@splunk/react-ui/Button", "esm-externals:@splunk/react-ui/Code", "esm-externals:@splunk/react-ui/TransitionOpen", "esm-externals:@splunk/react-icons/SquaresLayered", "esm-externals:@splunk/react-icons/Checkmark", "esm-externals:@splunk/react-icons/EyeSlashed", "esm-externals:@splunk/react-icons/WindowChevronsSlash", "esm-externals:@splunk/ui-utils/i18n", "esm-externals:@splunk/react-docs/UtilPage", "../src/common/docUtils.tsx", "../src/common/DocExampleWithVizSandbox.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nimport * as T from 'prop-types';\nimport styled from 'styled-components';\nimport P from '@splunk/react-ui/Paragraph';\nimport Heading from '@splunk/react-ui/Heading';\nimport List from '@splunk/react-ui/List';\nimport Chip from '@splunk/react-ui/Chip';\nimport Prose from '@splunk/react-ui/Prose';\nimport ChartLine from '@splunk/react-icons/enterprise/ChartLine';\nimport ChartBar from '@splunk/react-icons/enterprise/ChartBar';\nimport ChartScatter from '@splunk/react-icons/enterprise/ChartScatter';\nimport ChoroplethMap from '@splunk/react-icons/enterprise/ChoroplethMap';\nimport SplitBy from '@splunk/react-icons/enterprise/SplitBy';\nimport { Overview, Variation } from './interfaces/Overview';\nimport { VizCategory } from './interfaces/VizCategory';\nimport DocExampleWithVizSandbox from './DocExampleWithVizSandbox';\n\ninterface VariationCode {\n code: string;\n example: () => React.ReactElement;\n}\n\ninterface OverviewProps {\n overview: Overview;\n variationCode?: Record<string, VariationCode>;\n}\n\nconst chipIconStyles = {\n color: 'white',\n};\n\nconst chipType = {\n [VizCategory.TRENDS]: {\n backgroundColor: '#66AAF9',\n icon: <ChartLine style={chipIconStyles} />,\n },\n [VizCategory.COMPARISONS]: {\n backgroundColor: '#45D4BA',\n icon: <ChartBar style={chipIconStyles} />,\n },\n [VizCategory.CORRELATION]: {\n backgroundColor: '#FB865C',\n icon: <ChartScatter style={chipIconStyles} />,\n },\n [VizCategory.SPATIAL]: {\n backgroundColor: '#E85B79',\n icon: <ChoroplethMap style={chipIconStyles} />,\n },\n [VizCategory.FLOW]: {\n backgroundColor: '#9980FF',\n icon: <SplitBy style={chipIconStyles} />,\n },\n};\n\nconst StyledChip = styled(Chip)`\n [data-test='label'] {\n color: white;\n }\n margin-left: 10px;\n`;\n\nconst StyledWrapper = styled.div`\n display: flex;\n margin-bottom: 10px;\n align-items: center;\n`;\n\nconst Variations = ({ variations, variationCode, type }): React.ReactElement => (\n <>\n {variations.map((v: Variation): React.ReactElement => {\n const variationObj = variationCode[v.key];\n return (\n <DocExampleWithVizSandbox\n hideSandbox={v.hideSandbox ?? false}\n type={type}\n key={v.key}\n code={variationObj.code}\n example={variationObj.example}\n {...v}\n />\n );\n })}\n </>\n);\n\nVariations.propTypes = {\n variations: T.array,\n variationCode: T.object,\n type: T.string,\n};\n\nconst Tip = ({ tip }): React.ReactElement => <List.Item>{tip}</List.Item>;\n\nTip.propTypes = {\n tip: T.string,\n};\n\nconst Tips = ({ tips }): React.ReactElement => (\n <>\n <Heading level={3}>Tips</Heading>\n <List>\n {tips.map(\n (tip: string): React.ReactElement => (\n <Tip key={tip} tip={tip} />\n )\n )}\n </List>\n </>\n);\n\nTips.propTypes = {\n tips: T.array,\n};\n\nconst OverviewDoc = (props: OverviewProps): React.ReactElement => {\n const { typeOfViz, type, overview, note, tips, variations } = props.overview;\n const { variationCode } = props;\n const vizTypeDisplayNameMap = {\n [VizCategory.TRENDS]: 'Trend',\n [VizCategory.COMPARISONS]: 'Comparison',\n };\n const vizType = vizTypeDisplayNameMap[typeOfViz] || typeOfViz;\n return (\n <>\n {vizType && (\n <StyledWrapper>\n Chart Type\n <StyledChip\n data-test=\"viz-type-chip\"\n backgroundColor={chipType[typeOfViz].backgroundColor}\n icon={chipType[typeOfViz].icon}\n >\n {vizType}\n </StyledChip>\n </StyledWrapper>\n )}\n <Prose>\n <P data-test=\"overview-description\">{overview}</P>\n {note && <P data-test=\"overview-note\">{note}</P>}\n <Tips data-test=\"tips\" tips={tips} />\n </Prose>\n {variationCode && (\n <Variations variations={variations} type={type} variationCode={variationCode} />\n )}\n </>\n );\n};\n\nOverviewDoc.propTypes = {\n overview: T.object,\n variationCode: T.object,\n};\n\nexport default OverviewDoc;\n", "\nimport * as defaultImport from \"react\";\nexport * from \"react\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"prop-types\";\nexport * from \"prop-types\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"styled-components\";\nexport * from \"styled-components\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-ui/Paragraph\";\nexport * from \"@splunk/react-ui/Paragraph\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-ui/Heading\";\nexport * from \"@splunk/react-ui/Heading\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-ui/List\";\nexport * from \"@splunk/react-ui/List\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-ui/Chip\";\nexport * from \"@splunk/react-ui/Chip\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-ui/Prose\";\nexport * from \"@splunk/react-ui/Prose\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/enterprise/ChartLine\";\nexport * from \"@splunk/react-icons/enterprise/ChartLine\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/enterprise/ChartBar\";\nexport * from \"@splunk/react-icons/enterprise/ChartBar\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/enterprise/ChartScatter\";\nexport * from \"@splunk/react-icons/enterprise/ChartScatter\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/enterprise/ChoroplethMap\";\nexport * from \"@splunk/react-icons/enterprise/ChoroplethMap\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/enterprise/SplitBy\";\nexport * from \"@splunk/react-icons/enterprise/SplitBy\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-docs/DocExample\";\nexport * from \"@splunk/react-docs/DocExample\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-ui/Button\";\nexport * from \"@splunk/react-ui/Button\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-ui/Code\";\nexport * from \"@splunk/react-ui/Code\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-ui/TransitionOpen\";\nexport * from \"@splunk/react-ui/TransitionOpen\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/SquaresLayered\";\nexport * from \"@splunk/react-icons/SquaresLayered\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/Checkmark\";\nexport * from \"@splunk/react-icons/Checkmark\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/EyeSlashed\";\nexport * from \"@splunk/react-icons/EyeSlashed\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/WindowChevronsSlash\";\nexport * from \"@splunk/react-icons/WindowChevronsSlash\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/ui-utils/i18n\";\nexport * from \"@splunk/ui-utils/i18n\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-docs/UtilPage\";\nexport * from \"@splunk/react-docs/UtilPage\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as React from 'react';\nimport UtilPage from '@splunk/react-docs/UtilPage';\n\n// https://github.com/jsdoc2md/jsdoc-api#synopsis\ninterface JsDoc {\n access?: string;\n classdesc?: string;\n comment: string;\n kind: string;\n longname: string;\n meta: Record<string, unknown>;\n member: string;\n name: string;\n scope: string;\n}\n\nconst sharedSelectors = ['average', 'count', 'getField', 'getType', 'min', 'max', 'percentile', 'sum'];\n\nconst formatSidebarItemName = (name: string, className: string): string => {\n return sharedSelectors.find(sharedSelector => name === sharedSelector) ? `${className}#${name}` : name;\n};\n\nconst removePrependedClassName = (longname = ''): string => longname.slice(longname.indexOf('#') + 1);\n\nconst formatDSLSelectorDocs = (docs: JsDoc[]): JsDoc[] =>\n docs.map(doc => ({\n ...doc,\n longname: removePrependedClassName(doc.longname),\n }));\n\nexport const getFormatterClassdesc = (\n formatterDocs: JsDoc[],\n name: string\n): { name: string; markdown: string } => ({\n name,\n markdown: `# ${name}\\n ${formatterDocs.find(doc => doc.name === name && doc.kind === 'class').classdesc}`,\n});\n\nexport const extractDocItems = (\n docs: JsDoc[],\n className: string\n): { name: string; component: (...args: any[]) => any }[] => {\n const classHeaderDoc = docs[0];\n const fileDoc = docs[docs.length - 1];\n const filteredDocs = formatDSLSelectorDocs(docs).filter(\n ({ access, comment }) => access === 'public' && comment\n );\n\n return filteredDocs\n .map(doc => ({\n name: formatSidebarItemName(doc.name, className),\n component: function UtilDoc() {\n // named function so linter doesnt raise react/display-name error\n return (\n <UtilPage\n title={`${className}#${doc.name}`}\n status={1}\n docs={[classHeaderDoc, doc, fileDoc]}\n />\n );\n },\n }))\n .sort((a, b) => a.name.localeCompare(b.name));\n};\n\nexport const formatCodeStringToObject = (codeString: string, regexMatch: RegExp): any => {\n const match = regexMatch.exec(codeString);\n if (!match) return null;\n\n const stringToParse = `{${match[1]}}`;\n\n // remove trailing commas\n const removedCommas = stringToParse.replace(/,(?!\\s*?[-{[\"'\\w])/g, '');\n\n // convert double quotes (which only occur inside strings) to back quotes\n const backQuotes = removedCommas.replace(/\"/g, '`');\n // replace single quotes with double quotes\n const doubleQuotes = backQuotes.replace(/'/g, '\"');\n // replace back quotes with single quotes\n const singleQuotes = doubleQuotes.replace(/`/g, \"'\");\n\n // add quotes around keys\n const quotesAroundKeys = singleQuotes.replace(/\\b(\\w+)\\s*:(?=\\s)/g, '\"$1\":');\n\n let retval = null;\n try {\n retval = JSON.parse(quotesAroundKeys);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e);\n }\n return retval;\n};\n\nexport const extractDataFromReactCode = (codeString: string): any => {\n const primaryRegex = /dataSources={{([\\s\\S]*?primary:[\\s\\S]*?)}}/;\n const { primary } = formatCodeStringToObject(codeString, primaryRegex) ?? {};\n\n const optionsRegex = /options={{([\\s\\S]*?)}}/;\n const options = formatCodeStringToObject(codeString, optionsRegex);\n\n const contextRegex = /context={{([\\s\\S]*?)}}/;\n const context = formatCodeStringToObject(codeString, contextRegex);\n\n return { primary, options, context };\n};\n\n// Takes a stringified react viz example and a viz type\n// Returns a dashboard definition object.\n// e.g. codeString: '<Area dataSources={{}} options={{}} />'\n// type: 'splunk.area'\nexport const convertToDashboardJSON = (codeString: string, type: string): any => {\n const { options, primary, context } = extractDataFromReactCode(codeString);\n\n return {\n visualizations: {\n test_viz: {\n type,\n ...(options ? { options } : {}),\n ...(primary ? { dataSources: { primary: 'primary' } } : {}),\n ...(context ? { context } : {}),\n },\n },\n ...(primary\n ? {\n dataSources: {\n primary: { type: 'ds.test', options: primary },\n },\n }\n : {}),\n defaults: {\n dataSources: {\n global: {\n options: {\n queryParameters: {\n latest: '$global_time.latest$',\n earliest: '$global_time.earliest$',\n },\n },\n },\n },\n },\n inputs: {\n input_global_trp: {\n type: 'input.timerange',\n options: {\n token: 'global_time',\n defaultValue: '-24h@h,now',\n },\n title: 'Global Time Range',\n },\n },\n layout: {\n type: 'absolute',\n options: {},\n structure: [\n {\n item: 'test_viz',\n type: 'block',\n position: {\n x: 0,\n y: 0,\n w: 800,\n h: 500,\n },\n },\n ],\n globalInputs: ['input_global_trp'],\n },\n };\n};\n", "import * as React from 'react';\nimport DocExample from '@splunk/react-docs/DocExample';\nimport Button from '@splunk/react-ui/Button';\nimport Code from '@splunk/react-ui/Code';\nimport TransitionOpen from '@splunk/react-ui/TransitionOpen';\nimport SquaresLayered from '@splunk/react-icons/SquaresLayered';\nimport Checkmark from '@splunk/react-icons/Checkmark';\nimport EyeSlashed from '@splunk/react-icons/EyeSlashed';\nimport WindowChevronsSlash from '@splunk/react-icons/WindowChevronsSlash';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport * as T from 'prop-types';\nimport { convertToDashboardJSON } from './docUtils';\n\ninterface DocExampleWithVizSandboxProps {\n type: string;\n title: string;\n code: string;\n example: () => React.ReactElement;\n hideSandbox?: boolean;\n description?: string;\n}\n\nconst DocExampleWithVizSandbox = (props: DocExampleWithVizSandboxProps): React.ReactElement => {\n const { type, title, code, example, hideSandbox = false, description } = props;\n const [isCopied, setIsCopied] = React.useState(false);\n const [showCode, setShowCode] = React.useState(false);\n const isMounted = React.useRef(true);\n\n const toggleShowCode = React.useCallback(() => {\n setShowCode(state => !state);\n }, []);\n\n React.useEffect((): (() => void) => {\n return () => {\n isMounted.current = false;\n setIsCopied(false);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (hideSandbox) return <DocExample title={title} code={code} example={example} />;\n\n const objDefn = convertToDashboardJSON(code, type);\n // set spacing level to 4\n const prettyJson = JSON.stringify(objDefn, null, 4);\n\n const copyToClipBoard = () => {\n if ('clipboard' in navigator) {\n navigator.clipboard.writeText(prettyJson);\n setIsCopied(true);\n }\n setTimeout(() => {\n if (isMounted.current) {\n setIsCopied(false);\n }\n }, 5000);\n };\n\n const renderAdditionalActions = () => [\n <Button\n key=\"show-dashboard-definition\"\n appearance=\"secondary\"\n onClick={toggleShowCode}\n icon={showCode ? <EyeSlashed /> : <WindowChevronsSlash />}\n label={showCode ? _('Hide dashboard definition') : _('Show dashboard definition')}\n />,\n ];\n\n return (\n <DocExample\n renderAdditionalActions={renderAdditionalActions}\n title={title}\n code={code}\n example={example}\n description={description}\n >\n <TransitionOpen\n animation=\"slideFromTop\"\n open={showCode}\n retainFocus={false}\n takeFocus={false}\n renderChildrenWhenCollapsed={false}\n animateOnMount={false}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <Code value={prettyJson} language=\"json\" />\n <Button\n onClick={copyToClipBoard}\n icon={isCopied ? <Checkmark /> : <SquaresLayered />}\n label={isCopied ? _('Copied') : _('Copy to clipboard')}\n style={{ height: '30px', maxWidth: '164px' }}\n />\n </div>\n </TransitionOpen>\n </DocExample>\n );\n};\n\nDocExampleWithVizSandbox.propTypes = {\n type: T.string,\n title: T.string,\n code: T.string,\n example: T.func,\n hideSandbox: T.bool,\n};\n\nexport default DocExampleWithVizSandbox;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as React from 'react';\nimport * as T from 'prop-types';\nimport styled from 'styled-components';\nimport P from '@splunk/react-ui/Paragraph';\nimport Heading from '@splunk/react-ui/Heading';\nimport List from '@splunk/react-ui/List';\nimport Chip from '@splunk/react-ui/Chip';\nimport Prose from '@splunk/react-ui/Prose';\nimport ChartLine from '@splunk/react-icons/enterprise/ChartLine';\nimport ChartBar from '@splunk/react-icons/enterprise/ChartBar';\nimport ChartScatter from '@splunk/react-icons/enterprise/ChartScatter';\nimport ChoroplethMap from '@splunk/react-icons/enterprise/ChoroplethMap';\nimport SplitBy from '@splunk/react-icons/enterprise/SplitBy';\nimport { Overview, Variation } from './interfaces/Overview';\nimport { VizCategory } from './interfaces/VizCategory';\nimport DocExampleWithVizSandbox from './DocExampleWithVizSandbox';\n\ninterface VariationCode {\n code: string;\n example: () => React.ReactElement;\n}\n\ninterface OverviewProps {\n overview: Overview;\n variationCode?: Record<string, VariationCode>;\n}\n\nconst chipIconStyles = {\n color: 'white',\n};\n\nconst chipType = {\n [VizCategory.TRENDS]: {\n backgroundColor: '#66AAF9',\n icon: <ChartLine style={chipIconStyles} />,\n },\n [VizCategory.COMPARISONS]: {\n backgroundColor: '#45D4BA',\n icon: <ChartBar style={chipIconStyles} />,\n },\n [VizCategory.CORRELATION]: {\n backgroundColor: '#FB865C',\n icon: <ChartScatter style={chipIconStyles} />,\n },\n [VizCategory.SPATIAL]: {\n backgroundColor: '#E85B79',\n icon: <ChoroplethMap style={chipIconStyles} />,\n },\n [VizCategory.FLOW]: {\n backgroundColor: '#9980FF',\n icon: <SplitBy style={chipIconStyles} />,\n },\n};\n\nconst StyledChip = styled(Chip)`\n [data-test='label'] {\n color: white;\n }\n margin-left: 10px;\n`;\n\nconst StyledWrapper = styled.div`\n display: flex;\n margin-bottom: 10px;\n align-items: center;\n`;\n\nconst Variations = ({ variations, variationCode, type }): React.ReactElement => (\n <>\n {variations.map((v: Variation): React.ReactElement => {\n const variationObj = variationCode[v.key];\n return (\n <DocExampleWithVizSandbox\n hideSandbox={v.hideSandbox ?? false}\n type={type}\n key={v.key}\n code={variationObj.code}\n example={variationObj.example}\n {...v}\n />\n );\n })}\n </>\n);\n\nVariations.propTypes = {\n variations: T.array,\n variationCode: T.object,\n type: T.string,\n};\n\nconst Tip = ({ tip }): React.ReactElement => <List.Item>{tip}</List.Item>;\n\nTip.propTypes = {\n tip: T.string,\n};\n\nconst Tips = ({ tips }): React.ReactElement => (\n <>\n <Heading level={3}>Tips</Heading>\n <List>\n {tips.map(\n (tip: string): React.ReactElement => (\n <Tip key={tip} tip={tip} />\n )\n )}\n </List>\n </>\n);\n\nTips.propTypes = {\n tips: T.array,\n};\n\nconst OverviewDoc = (props: OverviewProps): React.ReactElement => {\n const { typeOfViz, type, overview, note, tips, variations } = props.overview;\n const { variationCode } = props;\n const vizTypeDisplayNameMap = {\n [VizCategory.TRENDS]: 'Trend',\n [VizCategory.COMPARISONS]: 'Comparison',\n };\n const vizType = vizTypeDisplayNameMap[typeOfViz] || typeOfViz;\n return (\n <>\n {vizType && (\n <StyledWrapper>\n Chart Type\n <StyledChip\n data-test=\"viz-type-chip\"\n backgroundColor={chipType[typeOfViz].backgroundColor}\n icon={chipType[typeOfViz].icon}\n >\n {vizType}\n </StyledChip>\n </StyledWrapper>\n )}\n <Prose>\n <P data-test=\"overview-description\">{overview}</P>\n {note && <P data-test=\"overview-note\">{note}</P>}\n <Tips data-test=\"tips\" tips={tips} />\n </Prose>\n {variationCode && (\n <Variations variations={variations} type={type} variationCode={variationCode} />\n )}\n </>\n );\n};\n\nOverviewDoc.propTypes = {\n overview: T.object,\n variationCode: T.object,\n};\n\nexport default OverviewDoc;\n", "\nimport * as defaultImport from \"react\";\nexport * from \"react\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"prop-types\";\nexport * from \"prop-types\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"styled-components\";\nexport * from \"styled-components\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-ui/Paragraph\";\nexport * from \"@splunk/react-ui/Paragraph\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-ui/Heading\";\nexport * from \"@splunk/react-ui/Heading\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-ui/List\";\nexport * from \"@splunk/react-ui/List\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-ui/Chip\";\nexport * from \"@splunk/react-ui/Chip\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-ui/Prose\";\nexport * from \"@splunk/react-ui/Prose\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/enterprise/ChartLine\";\nexport * from \"@splunk/react-icons/enterprise/ChartLine\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/enterprise/ChartBar\";\nexport * from \"@splunk/react-icons/enterprise/ChartBar\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/enterprise/ChartScatter\";\nexport * from \"@splunk/react-icons/enterprise/ChartScatter\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/enterprise/ChoroplethMap\";\nexport * from \"@splunk/react-icons/enterprise/ChoroplethMap\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/enterprise/SplitBy\";\nexport * from \"@splunk/react-icons/enterprise/SplitBy\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-docs/DocExample\";\nexport * from \"@splunk/react-docs/DocExample\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-ui/Button\";\nexport * from \"@splunk/react-ui/Button\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-ui/Code\";\nexport * from \"@splunk/react-ui/Code\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-ui/TransitionOpen\";\nexport * from \"@splunk/react-ui/TransitionOpen\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/SquaresLayered\";\nexport * from \"@splunk/react-icons/SquaresLayered\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/Checkmark\";\nexport * from \"@splunk/react-icons/Checkmark\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/EyeSlashed\";\nexport * from \"@splunk/react-icons/EyeSlashed\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/WindowChevronsSlash\";\nexport * from \"@splunk/react-icons/WindowChevronsSlash\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/ui-utils/i18n\";\nexport * from \"@splunk/ui-utils/i18n\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-docs/UtilPage\";\nexport * from \"@splunk/react-docs/UtilPage\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as React from 'react';\nimport UtilPage from '@splunk/react-docs/UtilPage';\n\n// https://github.com/jsdoc2md/jsdoc-api#synopsis\ninterface JsDoc {\n access?: string;\n classdesc?: string;\n comment: string;\n kind: string;\n longname: string;\n meta: Record<string, unknown>;\n member: string;\n name: string;\n scope: string;\n}\n\nconst sharedSelectors = ['average', 'count', 'getField', 'getType', 'min', 'max', 'percentile', 'sum'];\n\nconst formatSidebarItemName = (name: string, className: string): string => {\n return sharedSelectors.find(sharedSelector => name === sharedSelector) ? `${className}#${name}` : name;\n};\n\nconst removePrependedClassName = (longname = ''): string => longname.slice(longname.indexOf('#') + 1);\n\nconst formatDSLSelectorDocs = (docs: JsDoc[]): JsDoc[] =>\n docs.map(doc => ({\n ...doc,\n longname: removePrependedClassName(doc.longname),\n }));\n\nexport const getFormatterClassdesc = (\n formatterDocs: JsDoc[],\n name: string\n): { name: string; markdown: string } => ({\n name,\n markdown: `# ${name}\\n ${formatterDocs.find(doc => doc.name === name && doc.kind === 'class').classdesc}`,\n});\n\nexport const extractDocItems = (\n docs: JsDoc[],\n className: string\n): { name: string; component: (...args: any[]) => any }[] => {\n const classHeaderDoc = docs[0];\n const fileDoc = docs[docs.length - 1];\n const filteredDocs = formatDSLSelectorDocs(docs).filter(\n ({ access, comment }) => access === 'public' && comment\n );\n\n return filteredDocs\n .map(doc => ({\n name: formatSidebarItemName(doc.name, className),\n component: function UtilDoc() {\n // named function so linter doesnt raise react/display-name error\n return <UtilPage title={`${className}#${doc.name}`} docs={[classHeaderDoc, doc, fileDoc]} />;\n },\n }))\n .sort((a, b) => a.name.localeCompare(b.name));\n};\n\nexport const formatCodeStringToObject = (codeString: string, regexMatch: RegExp): any => {\n const match = regexMatch.exec(codeString);\n if (!match) return null;\n\n const stringToParse = `{${match[1]}}`;\n\n // remove trailing commas\n const removedCommas = stringToParse.replace(/,(?!\\s*?[-{[\"'\\w])/g, '');\n\n // convert double quotes (which only occur inside strings) to back quotes\n const backQuotes = removedCommas.replace(/\"/g, '`');\n // replace single quotes with double quotes\n const doubleQuotes = backQuotes.replace(/'/g, '\"');\n // replace back quotes with single quotes\n const singleQuotes = doubleQuotes.replace(/`/g, \"'\");\n\n // add quotes around keys\n const quotesAroundKeys = singleQuotes.replace(/\\b(\\w+)\\s*:(?=\\s)/g, '\"$1\":');\n\n let retval = null;\n try {\n retval = JSON.parse(quotesAroundKeys);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e);\n }\n return retval;\n};\n\nexport const extractDataFromReactCode = (codeString: string): any => {\n const primaryRegex = /dataSources={{([\\s\\S]*?primary:[\\s\\S]*?)}}/;\n const { primary } = formatCodeStringToObject(codeString, primaryRegex) ?? {};\n\n const optionsRegex = /options={{([\\s\\S]*?)}}/;\n const options = formatCodeStringToObject(codeString, optionsRegex);\n\n const contextRegex = /context={{([\\s\\S]*?)}}/;\n const context = formatCodeStringToObject(codeString, contextRegex);\n\n return { primary, options, context };\n};\n\n// Takes a stringified react viz example and a viz type\n// Returns a dashboard definition object.\n// e.g. codeString: '<Area dataSources={{}} options={{}} />'\n// type: 'splunk.area'\nexport const convertToDashboardJSON = (codeString: string, type: string): any => {\n const { options, primary, context } = extractDataFromReactCode(codeString);\n\n return {\n visualizations: {\n test_viz: {\n type,\n ...(options ? { options } : {}),\n ...(primary ? { dataSources: { primary: 'primary' } } : {}),\n ...(context ? { context } : {}),\n },\n },\n ...(primary\n ? {\n dataSources: {\n primary: { type: 'ds.test', options: primary },\n },\n }\n : {}),\n defaults: {\n dataSources: {\n global: {\n options: {\n queryParameters: {\n latest: '$global_time.latest$',\n earliest: '$global_time.earliest$',\n },\n },\n },\n },\n },\n inputs: {\n input_global_trp: {\n type: 'input.timerange',\n options: {\n token: 'global_time',\n defaultValue: '-24h@h,now',\n },\n title: 'Global Time Range',\n },\n },\n layout: {\n type: 'absolute',\n options: {},\n structure: [\n {\n item: 'test_viz',\n type: 'block',\n position: {\n x: 0,\n y: 0,\n w: 800,\n h: 500,\n },\n },\n ],\n globalInputs: ['input_global_trp'],\n },\n };\n};\n", "import * as React from 'react';\nimport DocExample from '@splunk/react-docs/DocExample';\nimport Button from '@splunk/react-ui/Button';\nimport Code from '@splunk/react-ui/Code';\nimport TransitionOpen from '@splunk/react-ui/TransitionOpen';\nimport SquaresLayered from '@splunk/react-icons/SquaresLayered';\nimport Checkmark from '@splunk/react-icons/Checkmark';\nimport EyeSlashed from '@splunk/react-icons/EyeSlashed';\nimport WindowChevronsSlash from '@splunk/react-icons/WindowChevronsSlash';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport * as T from 'prop-types';\nimport { convertToDashboardJSON } from './docUtils';\n\ninterface DocExampleWithVizSandboxProps {\n type: string;\n title: string;\n code: string;\n example: () => React.ReactElement;\n hideSandbox?: boolean;\n description?: string;\n}\n\nconst DocExampleWithVizSandbox = (props: DocExampleWithVizSandboxProps): React.ReactElement => {\n const { type, title, code, example, hideSandbox = false, description } = props;\n const [isCopied, setIsCopied] = React.useState(false);\n const [showCode, setShowCode] = React.useState(false);\n const isMounted = React.useRef(true);\n\n const toggleShowCode = React.useCallback(() => {\n setShowCode(state => !state);\n }, []);\n\n React.useEffect((): (() => void) => {\n return () => {\n isMounted.current = false;\n setIsCopied(false);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (hideSandbox) return <DocExample title={title} code={code} example={example} />;\n\n const objDefn = convertToDashboardJSON(code, type);\n // set spacing level to 4\n const prettyJson = JSON.stringify(objDefn, null, 4);\n\n const copyToClipBoard = () => {\n if ('clipboard' in navigator) {\n navigator.clipboard.writeText(prettyJson);\n setIsCopied(true);\n }\n setTimeout(() => {\n if (isMounted.current) {\n setIsCopied(false);\n }\n }, 5000);\n };\n\n const renderAdditionalActions = () => [\n <Button\n key=\"show-dashboard-definition\"\n appearance=\"secondary\"\n onClick={toggleShowCode}\n icon={showCode ? <EyeSlashed /> : <WindowChevronsSlash />}\n label={showCode ? _('Hide dashboard definition') : _('Show dashboard definition')}\n />,\n ];\n\n return (\n <DocExample\n renderAdditionalActions={renderAdditionalActions}\n title={title}\n code={code}\n example={example}\n description={description}\n >\n <TransitionOpen\n animation=\"slideFromTop\"\n open={showCode}\n retainFocus={false}\n takeFocus={false}\n renderChildrenWhenCollapsed={false}\n animateOnMount={false}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <Code value={prettyJson} language=\"json\" />\n <Button\n onClick={copyToClipBoard}\n icon={isCopied ? <Checkmark /> : <SquaresLayered />}\n label={isCopied ? _('Copied') : _('Copy to clipboard')}\n style={{ height: '30px', maxWidth: '164px' }}\n />\n </div>\n </TransitionOpen>\n </DocExample>\n );\n};\n\nDocExampleWithVizSandbox.propTypes = {\n type: T.string,\n title: T.string,\n code: T.string,\n example: T.func,\n hideSandbox: T.bool,\n};\n\nexport default DocExampleWithVizSandbox;\n"],
5
+ "mappings": "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",
6
6
  "names": ["defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport"]
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"docUtils.d.ts","sourceRoot":"","sources":["../src/common/docUtils.tsx"],"names":[],"mappings":"AAIA,UAAU,KAAK;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB;AAgBD,eAAO,MAAM,qBAAqB,GAC9B,eAAe,KAAK,EAAE,EACtB,MAAM,MAAM,KACb;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAGjC,CAAC;AAEH,eAAO,MAAM,eAAe,GACxB,MAAM,KAAK,EAAE,EACb,WAAW,MAAM,KAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;CAAE,EAsBtD,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,YAAY,MAAM,EAAE,YAAY,MAAM,KAAG,GA2BjF,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,YAAY,MAAM,KAAG,GAW7D,CAAC;AAMF,eAAO,MAAM,sBAAsB,GAAI,YAAY,MAAM,EAAE,MAAM,MAAM,KAAG,GA2DzE,CAAC"}
1
+ {"version":3,"file":"docUtils.d.ts","sourceRoot":"","sources":["../src/common/docUtils.tsx"],"names":[],"mappings":"AAIA,UAAU,KAAK;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB;AAgBD,eAAO,MAAM,qBAAqB,GAC9B,eAAe,KAAK,EAAE,EACtB,MAAM,MAAM,KACb;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAGjC,CAAC;AAEH,eAAO,MAAM,eAAe,GACxB,MAAM,KAAK,EAAE,EACb,WAAW,MAAM,KAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;CAAE,EAgBtD,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,YAAY,MAAM,EAAE,YAAY,MAAM,KAAG,GA2BjF,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,YAAY,MAAM,KAAG,GAW7D,CAAC;AAMF,eAAO,MAAM,sBAAsB,GAAI,YAAY,MAAM,EAAE,MAAM,MAAM,KAAG,GA2DzE,CAAC"}
@@ -100,14 +100,7 @@ var extractDocItems = (docs, className) => {
100
100
  return filteredDocs.map((doc) => ({
101
101
  name: formatSidebarItemName(doc.name, className),
102
102
  component: function UtilDoc() {
103
- return /* @__PURE__ */ react_exports.createElement(
104
- UtilPage_default,
105
- {
106
- title: `${className}#${doc.name}`,
107
- status: 1,
108
- docs: [classHeaderDoc, doc, fileDoc]
109
- }
110
- );
103
+ return /* @__PURE__ */ react_exports.createElement(UtilPage_default, { title: `${className}#${doc.name}`, docs: [classHeaderDoc, doc, fileDoc] });
111
104
  }
112
105
  })).sort((a, b) => a.name.localeCompare(b.name));
113
106
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/common/docUtils.tsx", "esm-externals:react", "esm-externals:@splunk/react-docs/UtilPage"],
4
- "sourcesContent": ["import * as React from 'react';\nimport UtilPage from '@splunk/react-docs/UtilPage';\n\n// https://github.com/jsdoc2md/jsdoc-api#synopsis\ninterface JsDoc {\n access?: string;\n classdesc?: string;\n comment: string;\n kind: string;\n longname: string;\n meta: Record<string, unknown>;\n member: string;\n name: string;\n scope: string;\n}\n\nconst sharedSelectors = ['average', 'count', 'getField', 'getType', 'min', 'max', 'percentile', 'sum'];\n\nconst formatSidebarItemName = (name: string, className: string): string => {\n return sharedSelectors.find(sharedSelector => name === sharedSelector) ? `${className}#${name}` : name;\n};\n\nconst removePrependedClassName = (longname = ''): string => longname.slice(longname.indexOf('#') + 1);\n\nconst formatDSLSelectorDocs = (docs: JsDoc[]): JsDoc[] =>\n docs.map(doc => ({\n ...doc,\n longname: removePrependedClassName(doc.longname),\n }));\n\nexport const getFormatterClassdesc = (\n formatterDocs: JsDoc[],\n name: string\n): { name: string; markdown: string } => ({\n name,\n markdown: `# ${name}\\n ${formatterDocs.find(doc => doc.name === name && doc.kind === 'class').classdesc}`,\n});\n\nexport const extractDocItems = (\n docs: JsDoc[],\n className: string\n): { name: string; component: (...args: any[]) => any }[] => {\n const classHeaderDoc = docs[0];\n const fileDoc = docs[docs.length - 1];\n const filteredDocs = formatDSLSelectorDocs(docs).filter(\n ({ access, comment }) => access === 'public' && comment\n );\n\n return filteredDocs\n .map(doc => ({\n name: formatSidebarItemName(doc.name, className),\n component: function UtilDoc() {\n // named function so linter doesnt raise react/display-name error\n return (\n <UtilPage\n title={`${className}#${doc.name}`}\n status={1}\n docs={[classHeaderDoc, doc, fileDoc]}\n />\n );\n },\n }))\n .sort((a, b) => a.name.localeCompare(b.name));\n};\n\nexport const formatCodeStringToObject = (codeString: string, regexMatch: RegExp): any => {\n const match = regexMatch.exec(codeString);\n if (!match) return null;\n\n const stringToParse = `{${match[1]}}`;\n\n // remove trailing commas\n const removedCommas = stringToParse.replace(/,(?!\\s*?[-{[\"'\\w])/g, '');\n\n // convert double quotes (which only occur inside strings) to back quotes\n const backQuotes = removedCommas.replace(/\"/g, '`');\n // replace single quotes with double quotes\n const doubleQuotes = backQuotes.replace(/'/g, '\"');\n // replace back quotes with single quotes\n const singleQuotes = doubleQuotes.replace(/`/g, \"'\");\n\n // add quotes around keys\n const quotesAroundKeys = singleQuotes.replace(/\\b(\\w+)\\s*:(?=\\s)/g, '\"$1\":');\n\n let retval = null;\n try {\n retval = JSON.parse(quotesAroundKeys);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e);\n }\n return retval;\n};\n\nexport const extractDataFromReactCode = (codeString: string): any => {\n const primaryRegex = /dataSources={{([\\s\\S]*?primary:[\\s\\S]*?)}}/;\n const { primary } = formatCodeStringToObject(codeString, primaryRegex) ?? {};\n\n const optionsRegex = /options={{([\\s\\S]*?)}}/;\n const options = formatCodeStringToObject(codeString, optionsRegex);\n\n const contextRegex = /context={{([\\s\\S]*?)}}/;\n const context = formatCodeStringToObject(codeString, contextRegex);\n\n return { primary, options, context };\n};\n\n// Takes a stringified react viz example and a viz type\n// Returns a dashboard definition object.\n// e.g. codeString: '<Area dataSources={{}} options={{}} />'\n// type: 'splunk.area'\nexport const convertToDashboardJSON = (codeString: string, type: string): any => {\n const { options, primary, context } = extractDataFromReactCode(codeString);\n\n return {\n visualizations: {\n test_viz: {\n type,\n ...(options ? { options } : {}),\n ...(primary ? { dataSources: { primary: 'primary' } } : {}),\n ...(context ? { context } : {}),\n },\n },\n ...(primary\n ? {\n dataSources: {\n primary: { type: 'ds.test', options: primary },\n },\n }\n : {}),\n defaults: {\n dataSources: {\n global: {\n options: {\n queryParameters: {\n latest: '$global_time.latest$',\n earliest: '$global_time.earliest$',\n },\n },\n },\n },\n },\n inputs: {\n input_global_trp: {\n type: 'input.timerange',\n options: {\n token: 'global_time',\n defaultValue: '-24h@h,now',\n },\n title: 'Global Time Range',\n },\n },\n layout: {\n type: 'absolute',\n options: {},\n structure: [\n {\n item: 'test_viz',\n type: 'block',\n position: {\n x: 0,\n y: 0,\n w: 800,\n h: 500,\n },\n },\n ],\n globalInputs: ['input_global_trp'],\n },\n };\n};\n", "\nimport * as defaultImport from \"react\";\nexport * from \"react\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-docs/UtilPage\";\nexport * from \"@splunk/react-docs/UtilPage\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as React from 'react';\nimport UtilPage from '@splunk/react-docs/UtilPage';\n\n// https://github.com/jsdoc2md/jsdoc-api#synopsis\ninterface JsDoc {\n access?: string;\n classdesc?: string;\n comment: string;\n kind: string;\n longname: string;\n meta: Record<string, unknown>;\n member: string;\n name: string;\n scope: string;\n}\n\nconst sharedSelectors = ['average', 'count', 'getField', 'getType', 'min', 'max', 'percentile', 'sum'];\n\nconst formatSidebarItemName = (name: string, className: string): string => {\n return sharedSelectors.find(sharedSelector => name === sharedSelector) ? `${className}#${name}` : name;\n};\n\nconst removePrependedClassName = (longname = ''): string => longname.slice(longname.indexOf('#') + 1);\n\nconst formatDSLSelectorDocs = (docs: JsDoc[]): JsDoc[] =>\n docs.map(doc => ({\n ...doc,\n longname: removePrependedClassName(doc.longname),\n }));\n\nexport const getFormatterClassdesc = (\n formatterDocs: JsDoc[],\n name: string\n): { name: string; markdown: string } => ({\n name,\n markdown: `# ${name}\\n ${formatterDocs.find(doc => doc.name === name && doc.kind === 'class').classdesc}`,\n});\n\nexport const extractDocItems = (\n docs: JsDoc[],\n className: string\n): { name: string; component: (...args: any[]) => any }[] => {\n const classHeaderDoc = docs[0];\n const fileDoc = docs[docs.length - 1];\n const filteredDocs = formatDSLSelectorDocs(docs).filter(\n ({ access, comment }) => access === 'public' && comment\n );\n\n return filteredDocs\n .map(doc => ({\n name: formatSidebarItemName(doc.name, className),\n component: function UtilDoc() {\n // named function so linter doesnt raise react/display-name error\n return <UtilPage title={`${className}#${doc.name}`} docs={[classHeaderDoc, doc, fileDoc]} />;\n },\n }))\n .sort((a, b) => a.name.localeCompare(b.name));\n};\n\nexport const formatCodeStringToObject = (codeString: string, regexMatch: RegExp): any => {\n const match = regexMatch.exec(codeString);\n if (!match) return null;\n\n const stringToParse = `{${match[1]}}`;\n\n // remove trailing commas\n const removedCommas = stringToParse.replace(/,(?!\\s*?[-{[\"'\\w])/g, '');\n\n // convert double quotes (which only occur inside strings) to back quotes\n const backQuotes = removedCommas.replace(/\"/g, '`');\n // replace single quotes with double quotes\n const doubleQuotes = backQuotes.replace(/'/g, '\"');\n // replace back quotes with single quotes\n const singleQuotes = doubleQuotes.replace(/`/g, \"'\");\n\n // add quotes around keys\n const quotesAroundKeys = singleQuotes.replace(/\\b(\\w+)\\s*:(?=\\s)/g, '\"$1\":');\n\n let retval = null;\n try {\n retval = JSON.parse(quotesAroundKeys);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e);\n }\n return retval;\n};\n\nexport const extractDataFromReactCode = (codeString: string): any => {\n const primaryRegex = /dataSources={{([\\s\\S]*?primary:[\\s\\S]*?)}}/;\n const { primary } = formatCodeStringToObject(codeString, primaryRegex) ?? {};\n\n const optionsRegex = /options={{([\\s\\S]*?)}}/;\n const options = formatCodeStringToObject(codeString, optionsRegex);\n\n const contextRegex = /context={{([\\s\\S]*?)}}/;\n const context = formatCodeStringToObject(codeString, contextRegex);\n\n return { primary, options, context };\n};\n\n// Takes a stringified react viz example and a viz type\n// Returns a dashboard definition object.\n// e.g. codeString: '<Area dataSources={{}} options={{}} />'\n// type: 'splunk.area'\nexport const convertToDashboardJSON = (codeString: string, type: string): any => {\n const { options, primary, context } = extractDataFromReactCode(codeString);\n\n return {\n visualizations: {\n test_viz: {\n type,\n ...(options ? { options } : {}),\n ...(primary ? { dataSources: { primary: 'primary' } } : {}),\n ...(context ? { context } : {}),\n },\n },\n ...(primary\n ? {\n dataSources: {\n primary: { type: 'ds.test', options: primary },\n },\n }\n : {}),\n defaults: {\n dataSources: {\n global: {\n options: {\n queryParameters: {\n latest: '$global_time.latest$',\n earliest: '$global_time.earliest$',\n },\n },\n },\n },\n },\n inputs: {\n input_global_trp: {\n type: 'input.timerange',\n options: {\n token: 'global_time',\n defaultValue: '-24h@h,now',\n },\n title: 'Global Time Range',\n },\n },\n layout: {\n type: 'absolute',\n options: {},\n structure: [\n {\n item: 'test_viz',\n type: 'block',\n position: {\n x: 0,\n y: 0,\n w: 800,\n h: 500,\n },\n },\n ],\n globalInputs: ['input_global_trp'],\n },\n };\n};\n", "\nimport * as defaultImport from \"react\";\nexport * from \"react\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-docs/UtilPage\";\nexport * from \"@splunk/react-docs/UtilPage\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n"],
5
+ "mappings": "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",
6
6
  "names": ["defaultImport"]
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gaugeUtils.d.ts","sourceRoot":"","sources":["../src/common/gaugeUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gaugeUtils.d.ts","sourceRoot":"","sources":["../src/common/gaugeUtils.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,cAAc,KAAK,CAAC;AAQjC;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GAAI;;;CAA+B,WACU,CAAC;AAExE;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,GAAI;;;CAAgC,WACS,CAAC;AAEzE;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,GAAI;;;;CAAgD,WAGvB,CAAC;AAEzD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,GAAI;;;;;CAA6D;;;CAWlG,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,kBAAkB,GAAI;;;;CAAgD;;;;;;CAsBlF,CAAC;AAEF;;;;;KAKK;AACL,eAAO,MAAM,gBAAgB,GAAI;;;;CAAmB,QAWnD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,GAAI;;;;;CAAgC,QAoBjE,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,yBAAyB,GAAI;;;;;;;CAOzC;;;CAeA,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAAI;;;CAA+B,QACA,CAAC;AAEjE;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,GAAI;;;CAA+B,QACD,CAAC;AAEjE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,oBAAoB,GAAI;;;;;;;;;;CAUpC;;;;;;CAoBA,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,kCAAkC,GAAI;;;;;CAAkD;;;CAepG,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,sBAAsB,GAAI;;;;;;;CAOtC;;;;;;CAoBA,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,kCAAkC,GAAI;;;;;;;;;CASlD;;;CAeA,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAG,WAAM,QAA0C,CAAC;AAEhF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAG,WAAM,QAyBnC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GAAG,WAAM;;;CAIlC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,GAAI;;;CAAuB,UAY7D,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,GAAI;;;CAAuB,QAI5D,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAAI;;;CAAuB,UAYvD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,GAAG,gBAAW;;;;;CAM/C,CAAC;AAEF,KAAK,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpC,UAAU,wBAAwB;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;CAChC;AAED,UAAU,wBAAwB;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,eAAe;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC;CAC/B;AAED,UAAU,wBAAwB;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAC9C;AAED,UAAU,0BAA0B;IAChC,KAAK,EAAE,YAAY,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,kBAAkB,EAAE,OAAO,CAAC;CAC/B;AAGD,eAAO,MAAM,gBAAgB,GAAI,OAAO,YAAY,KAAG,MAQtD,CAAC;AAIF,eAAO,MAAM,sBAAsB,GAAI,mCAGpC,wBAAwB,KAAG,MAiB7B,CAAC;AAGF,eAAO,MAAM,sBAAsB,GAAI,uBAAuB,wBAAwB,KAAG,MAKxF,CAAC;AAGF,eAAO,MAAM,aAAa,GAAI,8CAK3B,eAAe,KAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,OAAO,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAW3F,CAAC;AAGF,eAAO,MAAM,qBAAqB,GAAI,8CAKnC,eAAe,KAAG,wBAwDpB,CAAC;AAiBF,eAAO,MAAM,qBAAqB,GAAI,0CAKnC,0BAA0B,KAAG,MAyB/B,CAAC;AAEF,UAAU,YAAY;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAQD;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,SAAS,YAAY,KAAG,YAC2C,CAAC;AAEhG,KAAK,YAAY,GAAG,OAAO,GAAG,OAAO,CAAC;AAEtC;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,cAAc,YAAY,EAAE,SAAS,YAAY,KAAG,YAmBxF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,GAAI,iBAAiB,YAAY,KAAG,YAIzD,CAAC"}
@@ -176,13 +176,17 @@ var getGaugeBarLength = ({ gaugeLength, value, min, max }) => {
176
176
  if (max < min) {
177
177
  return null;
178
178
  }
179
- if (value >= max) {
179
+ const numericValue = Number(value);
180
+ if (!Number.isFinite(numericValue)) {
181
+ return 0;
182
+ }
183
+ if (numericValue >= max) {
180
184
  return gaugeLength;
181
185
  }
182
- if (value < min) {
186
+ if (numericValue < min) {
183
187
  return 0;
184
188
  }
185
- return gaugeLength * (value - min) / (max - min);
189
+ return gaugeLength * (numericValue - min) / (max - min);
186
190
  };
187
191
  var getGaugeBarStartPositions = ({
188
192
  gaugeStartX,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/common/gaugeUtils.ts", "esm-externals:lodash", "esm-externals:@splunk/visualizations-shared/colorConstants", "esm-externals:@splunk/visualizations-shared/numberUtils", "esm-externals:@splunk/ui-utils/i18n"],
4
- "sourcesContent": ["import { chain, mapKeys, omit, uniqBy } from 'lodash';\nimport {\n SEMANTIC_SUCCESS,\n SEMANTIC_WARNING,\n SEMANTIC_ERROR,\n} from '@splunk/visualizations-shared/colorConstants';\nimport { formatNumber } from '@splunk/visualizations-shared/numberUtils';\nimport { _ } from '@splunk/ui-utils/i18n';\n\nexport const GAUGE_THICKNESS = 50;\nexport const FILL_THICKNESS = 38;\nconst GRADIENT_STOP_OFFSET_MIN = 0;\nconst GRADIENT_STOP_OFFSET_MAX = 100;\nconst DEFAULT_NUM_OF_TICKS = 5;\nconst MAX_TICK_LABEL_DECIMAL_PLACES = 5;\nconst MAX_VALUE_LABEL_DIGITS_WITHOUT_PERCENT = 6;\nconst MAX_VALUE_LABEL_DIGITS_WITH_PERCENT = 5;\n\n/**\n * get width for the whole gauge viz for horizontal or vertical view\n * @method getGaugeWidth\n * @param {Object} input\n * @param {Number} containerWidth\n * @param {String} orientation\n * @return {Number} width\n */\nexport const getGaugeWidth = ({ containerWidth, orientation }) =>\n orientation === 'vertical' ? GAUGE_THICKNESS : containerWidth * 0.8;\n\n/**\n * get height for the whole gauge viz for horizontal or vertical view\n * @method getGaugeHeight\n * @param {Object} input\n * @param {Number} containerHeight\n * @param {String} orientation\n * @return {Number} height\n */\nexport const getGaugeHeight = ({ containerHeight, orientation }) =>\n orientation === 'vertical' ? containerHeight * 0.8 : GAUGE_THICKNESS;\n\n/**\n * get how long the gauge shoud be.\n * In horizontal view, gauge length equals to gauge width. In vertical view, it equals to gauge height.\n * @method getGaugeLength\n * @param {Object} input\n * @param {Number} input.containerWidth\n * @param {Number} input.containerHeight\n * @param {String} input.orientation\n * @return {Number} gaugeLength\n */\nexport const getGaugeLength = ({ containerWidth, containerHeight, orientation }) =>\n orientation === 'vertical'\n ? getGaugeHeight({ containerHeight, orientation })\n : getGaugeWidth({ containerWidth, orientation });\n\n/**\n * get start x and y for rendering gauge\n * @method getGaugeStartPosition\n * @param {Object} input\n * @param {Number} containerWidth\n * @param {Number} containerHeight\n * @param {Number} gaugeLength\n * @param {String} orientation\n * @return {Object} position\n * @return {Number} position.gaugeStartX\n * @return {Number} position.gaugeStartY\n */\nexport const getGaugeStartPosition = ({ containerWidth, containerHeight, gaugeLength, orientation }) => {\n // for horizontal view\n let gaugeStartX = (containerWidth - gaugeLength) / 2.0;\n let gaugeStartY = (containerHeight - GAUGE_THICKNESS) / 2.0;\n\n if (orientation === 'vertical') {\n gaugeStartX = (containerWidth - GAUGE_THICKNESS) / 2.0;\n gaugeStartY = (containerHeight - gaugeLength) / 2.0;\n }\n\n return { gaugeStartX, gaugeStartY };\n};\n\n/**\n * get dimensions for the whole gauge viz,\n * which can be useful to calculate background bar and major ticks positions.\n * @method getGaugeDimensions\n * @param {Object} input\n * @param {Number} input.containerWidth\n * @param {Number} input.containerHeight\n * @param {String} input.orientation 'horizontal' or 'vertical'\n * @return {Object} gaugeDimensions\n * @return {Number} gaugeDimensions.gaugeLength how long the gauge shoud be in horizontal or vertical orientation.\n * @return {Number} gaugeDimensions.gaugeStartX start x to render gauge\n * @return {Number} gaugeDimensions.gaugeStartY start y to render gauge\n * @return {Number} gaugeDimensions.gaugeWidth natural width of gauge\n * @return {Number} gaugeDimensions.gaugeHeight natural height of gauge\n */\nexport const getGaugeDimensions = ({ containerWidth, containerHeight, orientation }) => {\n const gaugeLength = getGaugeLength({\n containerWidth,\n containerHeight,\n orientation,\n });\n const { gaugeStartX, gaugeStartY } = getGaugeStartPosition({\n containerWidth,\n containerHeight,\n gaugeLength,\n orientation,\n });\n const gaugeWidth = getGaugeWidth({ containerWidth, orientation });\n const gaugeHeight = getGaugeHeight({ containerHeight, orientation });\n\n return {\n gaugeLength,\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n };\n};\n\n/**\n * if gaugeColor is not specified, auto assign a gauge color to the fill bar\n * based on how much percentage the value is taken between min and max\n * @method assignGaugeColor\n * @params\n * */\nexport const assignGaugeColor = ({ value, min, max }) => {\n const rate = (value - min) / (max - min);\n\n if (rate <= 0.3) {\n return SEMANTIC_SUCCESS;\n }\n if (rate > 0.3 && rate <= 0.6) {\n return SEMANTIC_WARNING;\n }\n\n return SEMANTIC_ERROR;\n};\n\n/**\n * get inner bar length in gauge\n * @method getGaugeBarLength\n * @param {Object} input\n * @param {Number} input.gaugeLength\n * @param {Number} input.value\n * @param {Number} input.min\n * @param {Number} input.max\n * @return {Number} gaugeBarLength\n */\nexport const getGaugeBarLength = ({ gaugeLength, value, min, max }) => {\n if (max < min) {\n return null;\n }\n\n if (value >= max) {\n return gaugeLength;\n }\n\n if (value < min) {\n return 0;\n }\n\n return (gaugeLength * (value - min)) / (max - min);\n};\n\n/**\n * get x and y position for rendering inner bar in gauge\n * @method getGaugeBarStartPositions\n * @param {Object} input\n * @param {Number} input.gaugeStartX\n * @param {Number} input.gaugeStartY\n * @param {Number} input.gaugeWidth\n * @param {Number} input.gaugeHeight\n * @param {Number} input.gaugeBarLength\n * @param {String} input.orientation\n * @return {Object} position\n * @return {Number} position.gaugeBarX\n * @return {Number} position.gaugeBarY\n */\nexport const getGaugeBarStartPositions = ({\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n gaugeBarLength,\n orientation,\n}) => {\n let gaugeBarX = gaugeStartX;\n let gaugeBarY = gaugeStartY;\n\n if (orientation === 'vertical') {\n gaugeBarX += (gaugeWidth - FILL_THICKNESS) / 2;\n gaugeBarY += gaugeHeight - gaugeBarLength;\n } else {\n gaugeBarY += (gaugeHeight - FILL_THICKNESS) / 2;\n }\n\n return {\n gaugeBarX,\n gaugeBarY,\n };\n};\n\n/**\n * get width of inner bar in gauge\n * @method getGaugeBarWidth\n * @param {Object} input\n * @param {Number} input.gaugeBarLength\n * @param {String} orientation\n * @return {Number} gaugeBarWidth\n */\nexport const getGaugeBarWidth = ({ gaugeBarLength, orientation }) =>\n orientation === 'vertical' ? FILL_THICKNESS : gaugeBarLength;\n\n/**\n * get height of inner bar in gauge\n * @method getGaugeBarWidth\n * @param {Object} input\n * @param {Number} input.gaugeBarLength\n * @param {String} orientation\n * @return {Number} gaugeBarHeight\n */\nexport const getGaugeBarHeight = ({ gaugeBarLength, orientation }) =>\n orientation === 'vertical' ? gaugeBarLength : FILL_THICKNESS;\n\n/**\n * get dimensions for the fill bar in the gauge\n * @method getFillBarDimensions\n * @param {Object} input\n * @param {Number} input.gaugeLength\n * @param {Number} input.gaugeStartX\n * @param {Number} input.gaugeStartY\n * @param {Number} input.gaugeWidth,\n * @param {Number} input.gaugeHeight,\n * @param {Number} input.value,\n * @param {Number} input.min,\n * @param {Number} input.max,\n * @param {String} input.orientation\n * @return {Object} fillBarDimensions\n * @return {Number} fillBarDimensions.fillBarLength\n * @return {Number} fillBarDimensions.fillBarX\n * @return {Number} fillBarDimensions.fillBarY\n * @return {Number} fillBarDimensions.fillBarWidth\n * @return {Number} fillBarDimensions.fillBarHeight\n */\nexport const getFillBarDimensions = ({\n gaugeLength,\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n value,\n min,\n max,\n orientation,\n}) => {\n const gaugeBarLength = getGaugeBarLength({ gaugeLength, value, max, min });\n const { gaugeBarX: fillBarX, gaugeBarY: fillBarY } = getGaugeBarStartPositions({\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n gaugeBarLength,\n orientation,\n });\n const fillBarWidth = getGaugeBarWidth({ gaugeBarLength, orientation });\n const fillBarHeight = getGaugeBarHeight({ gaugeBarLength, orientation });\n\n return {\n fillBarLength: gaugeBarLength,\n fillBarX,\n fillBarY,\n fillBarWidth,\n fillBarHeight,\n };\n};\n\n/**\n * get position x and y for value marker in filler gauge\n * @method getFillerGaugeValueMarkerPositions\n * @param {Object} input\n * @param {Number} input.fillBarX\n * @param {Number} input.fillBarY\n * @param {Number} input.fillBarLength\n * @param {String} input.orientation\n * @return {Object} position\n * @return {Number} position.valueMarkerX\n * @return {Number} position.valueMarkerY\n */\nexport const getFillerGaugeValueMarkerPositions = ({ fillBarX, fillBarY, fillBarLength, orientation }) => {\n let valueMarkerX = fillBarX;\n let valueMarkerY = fillBarY;\n\n if (orientation === 'vertical') {\n valueMarkerX -= (GAUGE_THICKNESS - FILL_THICKNESS) / 4;\n } else {\n valueMarkerX += fillBarLength;\n valueMarkerY -= (GAUGE_THICKNESS - FILL_THICKNESS) / 4;\n }\n\n return {\n valueMarkerX,\n valueMarkerY,\n };\n};\n\n/**\n * get dimensions for the marker bar in the gauge\n * @method getMarkerBarDimensions\n * @param {Object} input\n * @param {Number} input.gaugeLength\n * @param {Number} input.gaugeStartX\n * @param {Number} input.gaugeStartY\n * @param {Number} input.gaugeWidth,\n * @param {Number} input.gaugeHeight,\n * @param {String} input.orientation\n * @return {Object} markerBarDimensions\n * @return {Number} markerBarDimensions.markerBarLength\n * @return {Number} markerBarDimensions.markerBarX\n * @return {Number} markerBarDimensions.markerBarY\n * @return {Number} markerBarDimensions.markerBarWidth\n * @return {Number} markerBarDimensions.markerBarHeight\n */\nexport const getMarkerBarDimensions = ({\n gaugeLength,\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n orientation,\n}) => {\n const gaugeBarLength = gaugeLength; // For marker gauge, inner marker bar spans the entire gauge\n const { gaugeBarX: markerBarX, gaugeBarY: markerBarY } = getGaugeBarStartPositions({\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n gaugeBarLength,\n orientation,\n });\n const markerBarWidth = getGaugeBarWidth({ gaugeBarLength, orientation });\n const markerBarHeight = getGaugeBarHeight({ gaugeBarLength, orientation });\n\n return {\n markerBarLength: gaugeBarLength,\n markerBarX,\n markerBarY,\n markerBarWidth,\n markerBarHeight,\n };\n};\n\n/**\n * get position x and y for value marker in marker gauge\n * @method getMarkerGaugeValueMarkerPositions\n * @param {Object} input\n * @param {Number} input.markerBarX\n * @param {Number} input.markerBarY\n * @param {Number} input.markerBarHeight\n * @param {Number} input.markerBarLength\n * @param {Number} input.value\n * @param {Number} input.min\n * @param {Number} input.max\n * @param {String} input.orientation\n * @return {Object} position\n * @return {Number} position.valueMarkerX\n * @return {Number} position.valueMarkerY\n */\nexport const getMarkerGaugeValueMarkerPositions = ({\n markerBarX,\n markerBarY,\n markerBarHeight,\n markerBarLength: gaugeLength,\n orientation,\n value,\n min,\n max,\n}) => {\n let valueMarkerX = markerBarX;\n let valueMarkerY = markerBarY;\n if (orientation === 'vertical') {\n valueMarkerY += markerBarHeight - getGaugeBarLength({ gaugeLength, value, max, min });\n valueMarkerX -= (GAUGE_THICKNESS - FILL_THICKNESS) / 4;\n } else {\n valueMarkerX += getGaugeBarLength({ gaugeLength, value, max, min });\n valueMarkerY -= (GAUGE_THICKNESS - FILL_THICKNESS) / 4;\n }\n\n return {\n valueMarkerX,\n valueMarkerY,\n };\n};\n\n/**\n * sort the ranges in ascending order\n * @method getSortedRanges\n * @param {Array} ranges\n * @return {Array} sortedRanges\n */\nexport const getSortedRanges = ranges => ranges.sort((a, b) => a.from - b.from);\n\n/**\n * validate whether ranges prop is valid - continuous ranges, range.to < range.from, range.from != range.to\n * @method validateRanges\n * @param {Array} ranges\n * @return {String} error\n */\nexport const validateRanges = ranges => {\n if (!ranges.length) {\n return _('Prop \"ranges\" is missing entries');\n }\n\n // check whether a range has \"from\" >= \"to\" eg: 10 - 10, 100 - 10, -20 - -10 are invalid\n if (ranges.some(range => range.from >= range.to)) {\n return _('Prop \"ranges\" has invalid entries: invalid range');\n }\n\n // check whether ranges have duplicate \"from/to\" eg: 0 - 50, 25 - 50\n if (ranges.length !== uniqBy(ranges, 'to').length || ranges.length !== uniqBy(ranges, 'from').length) {\n return _('Prop \"ranges\" has invalid entries: duplicate values');\n }\n\n const sortedRanges = getSortedRanges(ranges);\n\n // check whether ranges are continuous eg: 0 - 10, 10 - 20, 20 - 30\n for (let i = 1; i < sortedRanges.length; i += 1) {\n if (sortedRanges[i].from !== sortedRanges[i - 1].to) {\n return _('Prop \"ranges\" has invalid entries: discontinuous ranges');\n }\n }\n\n return null;\n};\n\n/**\n * calculate min and max value of gauge\n * @method getGaugeRange\n * @param {Array} ranges\n * @return {Object} gaugeRange\n * @return {Number} gaugeRange.min\n * @return {Number} gaugeRange.max\n */\nexport const getGaugeRange = ranges => {\n const min = Math.min(...ranges.map(range => range.from));\n const max = Math.max(...ranges.map(range => range.to));\n return { min, max };\n};\n\n/**\n * calculate stop offsets for linear gradient\n * @method getGradientStopOffsets\n * @param {Array} ranges\n * @param {String} orientation\n * @return {Array} cumulativeOffsets\n */\nexport const getGradientStopOffsets = ({ ranges, orientation }) => {\n const { min, max } = getGaugeRange(ranges);\n const offsetScale = (GRADIENT_STOP_OFFSET_MAX - GRADIENT_STOP_OFFSET_MIN) / (max - min);\n let offsets = ranges.map(range => Math.abs(range.from - range.to) * offsetScale);\n // When orientation is vertical, since the gauge starts from bottom to top, linear gradient should be reversed\n offsets = orientation === 'vertical' ? offsets.reverse() : offsets;\n const cumulativeOffsets = [];\n offsets.reduce((accumulator, currentValue, idx) => {\n cumulativeOffsets[idx] = accumulator + currentValue;\n return cumulativeOffsets[idx];\n }, 0);\n return cumulativeOffsets;\n};\n\n/**\n * calculate stop colors for linear gradient\n * @method getGradientStopColors\n * @param {Array} ranges\n * @param {String} orientation\n * @return {Array} stopColors\n */\nexport const getGradientStopColors = ({ ranges, orientation }) => {\n const stopColors = ranges.map(range => range.value);\n // When orientation is vertical, since the gauge starts from bottom to top, linear gradient should be reversed\n return orientation === 'vertical' ? stopColors.reverse() : stopColors;\n};\n\n/**\n * calculate linear gradient stops from ranges\n * @method getGradientStops\n * @param {Object} input\n * @param {Array} ranges\n * @param {String} orientation\n * @return {Array} stops\n */\nexport const getGradientStops = ({ ranges, orientation }) => {\n const stops = [];\n const offsets = getGradientStopOffsets({ ranges, orientation });\n const stopColors = getGradientStopColors({ ranges, orientation });\n // Initialize stops with the first color stop\n stops.push({ offset: `${offsets[0]}%`, stopColor: stopColors[0] });\n // Add the remaining color stops with gradient change at each stop\n for (let i = 1; i < ranges.length; i += 1) {\n stops.push({ offset: `${offsets[i - 1]}%`, stopColor: stopColors[i] });\n stops.push({ offset: `${offsets[i]}%`, stopColor: stopColors[i] });\n }\n return stops;\n};\n\n/**\n * calculate linear gradient dimensions\n * @method getGradientDimensions\n * @param {String} orientation\n * @return {Object} dimensions\n * @return {String} dimensions.x1\n * @return {String} dimensions.y1\n * @return {String} dimensions.x2\n * @return {String} dimensions.y2\n */\nexport const getGradientDimensions = orientation => {\n const x1 = '0%';\n const y1 = '0%';\n const x2 = orientation === 'horizontal' ? '100%' : '0%';\n const y2 = orientation === 'horizontal' ? '0%' : '100%';\n return { x1, y1, x2, y2 };\n};\n\ntype NumericInput = number | string;\n\ninterface UniqueDecimalPlacesInput {\n values: number[];\n minimumDecimalPlaces: number;\n}\n\ninterface PercentageFromRangeInput {\n value: number;\n min: number;\n range: number;\n}\n\ninterface NumOfTicksInput {\n min: number;\n max: number;\n majorUnit: number | string;\n usePercentageRange: boolean;\n}\n\ninterface TickLabelFormatterResult {\n numOfTicks: number;\n numericStep: number;\n formatTickLabel: (value: number) => string;\n}\n\ninterface FormatGaugeValueLabelInput {\n value: NumericInput;\n min: number;\n max: number;\n usePercentageValue: boolean;\n}\n\n// Returns the number of fractional digits in a numeric input.\nexport const getDecimalPlaces = (value: NumericInput): number => {\n const numericValue = Number(value);\n if (!Number.isFinite(numericValue)) {\n return 0;\n }\n\n const fractionPart = numericValue.toString().split('.')[1];\n return fractionPart ? fractionPart.length : 0;\n};\n\n// Finds the smallest precision that keeps all rounded tick values unique.\n// This avoids duplicated rendered labels caused by rounding collisions.\nexport const getUniqueDecimalPlaces = ({\n values,\n minimumDecimalPlaces,\n}: UniqueDecimalPlacesInput): number => {\n if (values.length <= 1) {\n return minimumDecimalPlaces;\n }\n\n for (\n let decimalPlaces = minimumDecimalPlaces;\n decimalPlaces <= MAX_TICK_LABEL_DECIMAL_PLACES;\n decimalPlaces += 1\n ) {\n const roundedValues = values.map(value => Number(value.toFixed(decimalPlaces)));\n if (new Set(roundedValues).size === roundedValues.length) {\n return decimalPlaces;\n }\n }\n\n return MAX_TICK_LABEL_DECIMAL_PLACES;\n};\n\n// Converts a value within [min, max] to percentage space.\nexport const getPercentageFromRange = ({ value, min, range }: PercentageFromRangeInput): number => {\n if (range === 0) {\n return 0;\n }\n return ((value - min) / range) * 100;\n};\n\n// Computes interval count from auto mode or explicit majorUnit.\nexport const getNumOfTicks = ({\n min,\n max,\n majorUnit,\n usePercentageRange,\n}: NumOfTicksInput): { numOfTicks: number; isAutoMajorUnit: boolean; majorUnitNumber: number } => {\n const range = max - min;\n const majorUnitNumber = Number(majorUnit);\n const isAutoMajorUnit = majorUnit === 'auto' || Number.isNaN(majorUnitNumber) || majorUnitNumber <= 0;\n\n let numOfTicks = DEFAULT_NUM_OF_TICKS;\n if (!isAutoMajorUnit) {\n numOfTicks = usePercentageRange ? 100 / majorUnitNumber : range / majorUnitNumber;\n }\n\n return { numOfTicks, isAutoMajorUnit, majorUnitNumber };\n};\n\n// Builds a reusable formatter and step size for major tick rendering.\nexport const getTickLabelFormatter = ({\n min,\n max,\n majorUnit,\n usePercentageRange,\n}: NumOfTicksInput): TickLabelFormatterResult => {\n const range = max - min;\n const { numOfTicks, isAutoMajorUnit, majorUnitNumber } = getNumOfTicks({\n min,\n max,\n majorUnit,\n usePercentageRange,\n });\n const numericStep = range / numOfTicks;\n const tickValues = [];\n\n // Materialize all candidate tick values (plus max for uneven divisions).\n for (let i = 0; i <= numOfTicks; i += 1) {\n tickValues.push(min + numericStep * i);\n }\n\n if (!Number.isInteger(numOfTicks)) {\n tickValues.push(max);\n }\n\n const minimumNumericDecimalPlaces = Math.min(\n MAX_TICK_LABEL_DECIMAL_PLACES,\n Math.max(\n getDecimalPlaces(min),\n getDecimalPlaces(max),\n isAutoMajorUnit ? 0 : getDecimalPlaces(majorUnitNumber)\n )\n );\n const numericLabelDecimalPlaces = getUniqueDecimalPlaces({\n values: tickValues,\n minimumDecimalPlaces: minimumNumericDecimalPlaces,\n });\n const percentageLabelDecimalPlaces = getUniqueDecimalPlaces({\n values: tickValues.map(value => getPercentageFromRange({ value, min, range })),\n minimumDecimalPlaces: 0,\n });\n\n // Keep fixed-width decimal formatting when decimals are needed; otherwise use trend formatting.\n const formatTickLabel = value => {\n if (usePercentageRange) {\n const percentageValue = getPercentageFromRange({ value, min, range });\n return `${percentageValue.toFixed(percentageLabelDecimalPlaces)}%`;\n }\n\n const numericLabel = value.toFixed(numericLabelDecimalPlaces);\n if (numericLabel.includes('.')) {\n return numericLabel;\n }\n\n return formatNumber(Number(numericLabel), 0, {\n useThousandSeparators: true,\n useTrendUnits: true,\n }).replace(/k$/, 'K');\n };\n\n return { numOfTicks, numericStep, formatTickLabel };\n};\n\n// Limits decimal places so displayed value length stays within a fixed digit budget.\nconst getDigitsBeforeDecimal = (numericValue: NumericInput): number =>\n Math.abs(Math.trunc(Number(numericValue))).toString().length;\n\nconst getCappedDecimalPlaces = (\n numericValue: NumericInput,\n rawDecimalPlaces: number,\n maxDigits: number\n): number => {\n const digitsBeforeDecimal = getDigitsBeforeDecimal(numericValue);\n const maxDecimalPlaces = Math.max(0, maxDigits - digitsBeforeDecimal);\n return Math.min(rawDecimalPlaces, maxDecimalPlaces);\n};\n\n// Formats the marker value label in number or percentage mode with capped precision.\nexport const formatGaugeValueLabel = ({\n value,\n min,\n max,\n usePercentageValue,\n}: FormatGaugeValueLabelInput): string => {\n const numericValue = Number(value);\n const range = max - min || 1;\n const percentageValue = getPercentageFromRange({ value: numericValue, min, range });\n const trendFormatOptions = {\n useThousandSeparators: true,\n useTrendUnits: true,\n };\n\n if (usePercentageValue) {\n // Use the same number-mode formatting behavior (including K/M/B/T) for percentages.\n const percentageDecimalPlaces = getCappedDecimalPlaces(\n percentageValue,\n 2,\n MAX_VALUE_LABEL_DIGITS_WITH_PERCENT\n );\n return `${formatNumber(percentageValue, percentageDecimalPlaces, trendFormatOptions)}%`;\n }\n\n const valueDecimalPlaces = getCappedDecimalPlaces(\n numericValue,\n getDecimalPlaces(numericValue),\n MAX_VALUE_LABEL_DIGITS_WITHOUT_PERCENT\n );\n return formatNumber(numericValue, valueDecimalPlaces, trendFormatOptions);\n};\n\ninterface GaugeOptions {\n [key: string]: any;\n}\n\n// map for new options names to old option names\nconst gaugeOptionsMapping = {\n majorTickInterval: 'majorUnit',\n gaugeRanges: 'ranges',\n};\n\n/**\n * Helper method to update the option names which can be mapped to pure component options\n * @method mapToOldKey\n * @param {Object} options\n * @returns {Object}\n */\nexport const mapToOldKey = (options: GaugeOptions): GaugeOptions =>\n mapKeys(options, (val, key) => (gaugeOptionsMapping[key] ? gaugeOptionsMapping[key] : key));\n\ntype LabelOrValue = 'label' | 'value';\n\n/**\n * Helper method to map labelDisplay and valueDisplay options to pure component option names\n * @method mapToOldKey\n * @param {string} labelOrValue\n * @param {Object} options\n * @returns {Object}\n */\nexport const mapValueLabelDisplay = (labelOrValue: LabelOrValue, options: GaugeOptions): GaugeOptions => {\n const rangeOrValue: string = labelOrValue === 'value' ? 'Value' : 'Range';\n const showKey: string = labelOrValue === 'value' ? 'showValue' : 'showLabels';\n const percentKey = `usePercentage${rangeOrValue}`;\n const optionString = `${labelOrValue}Display`;\n const newOptions = { ...options };\n if (newOptions[optionString]) {\n if (newOptions[optionString] === 'number') {\n newOptions[showKey] = true;\n newOptions[percentKey] = false;\n } else if (newOptions[optionString] === 'percentage') {\n newOptions[showKey] = true;\n newOptions[percentKey] = true;\n } else {\n newOptions[showKey] = false;\n newOptions[percentKey] = false;\n }\n }\n return omit(newOptions, [optionString]);\n};\n\n/**\n * Chained helper for mapping the option properties (and values) we expose in config.ts into property values that pure component accepts\n * This is for options that has new key name and can not directly be mapped with pure component props\n * @method convertToGaugeProperties\n * @param {Object} originalOptions\n * @returns {Object}\n */\nexport const convertToGaugeProperties = (originalOptions: GaugeOptions): GaugeOptions =>\n chain(mapToOldKey(originalOptions))\n .thru(options => mapValueLabelDisplay('label', options))\n .thru(options => mapValueLabelDisplay('value', options))\n .value();\n", "\nimport * as defaultImport from \"lodash\";\nexport * from \"lodash\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/colorConstants\";\nexport * from \"@splunk/visualizations-shared/colorConstants\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/numberUtils\";\nexport * from \"@splunk/visualizations-shared/numberUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/ui-utils/i18n\";\nexport * from \"@splunk/ui-utils/i18n\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { chain, mapKeys, omit, uniqBy } from 'lodash';\nimport {\n SEMANTIC_SUCCESS,\n SEMANTIC_WARNING,\n SEMANTIC_ERROR,\n} from '@splunk/visualizations-shared/colorConstants';\nimport { formatNumber } from '@splunk/visualizations-shared/numberUtils';\nimport { _ } from '@splunk/ui-utils/i18n';\n\nexport const GAUGE_THICKNESS = 50;\nexport const FILL_THICKNESS = 38;\nconst GRADIENT_STOP_OFFSET_MIN = 0;\nconst GRADIENT_STOP_OFFSET_MAX = 100;\nconst DEFAULT_NUM_OF_TICKS = 5;\nconst MAX_TICK_LABEL_DECIMAL_PLACES = 5;\nconst MAX_VALUE_LABEL_DIGITS_WITHOUT_PERCENT = 6;\nconst MAX_VALUE_LABEL_DIGITS_WITH_PERCENT = 5;\n\n/**\n * get width for the whole gauge viz for horizontal or vertical view\n * @method getGaugeWidth\n * @param {Object} input\n * @param {Number} containerWidth\n * @param {String} orientation\n * @return {Number} width\n */\nexport const getGaugeWidth = ({ containerWidth, orientation }) =>\n orientation === 'vertical' ? GAUGE_THICKNESS : containerWidth * 0.8;\n\n/**\n * get height for the whole gauge viz for horizontal or vertical view\n * @method getGaugeHeight\n * @param {Object} input\n * @param {Number} containerHeight\n * @param {String} orientation\n * @return {Number} height\n */\nexport const getGaugeHeight = ({ containerHeight, orientation }) =>\n orientation === 'vertical' ? containerHeight * 0.8 : GAUGE_THICKNESS;\n\n/**\n * get how long the gauge shoud be.\n * In horizontal view, gauge length equals to gauge width. In vertical view, it equals to gauge height.\n * @method getGaugeLength\n * @param {Object} input\n * @param {Number} input.containerWidth\n * @param {Number} input.containerHeight\n * @param {String} input.orientation\n * @return {Number} gaugeLength\n */\nexport const getGaugeLength = ({ containerWidth, containerHeight, orientation }) =>\n orientation === 'vertical'\n ? getGaugeHeight({ containerHeight, orientation })\n : getGaugeWidth({ containerWidth, orientation });\n\n/**\n * get start x and y for rendering gauge\n * @method getGaugeStartPosition\n * @param {Object} input\n * @param {Number} containerWidth\n * @param {Number} containerHeight\n * @param {Number} gaugeLength\n * @param {String} orientation\n * @return {Object} position\n * @return {Number} position.gaugeStartX\n * @return {Number} position.gaugeStartY\n */\nexport const getGaugeStartPosition = ({ containerWidth, containerHeight, gaugeLength, orientation }) => {\n // for horizontal view\n let gaugeStartX = (containerWidth - gaugeLength) / 2.0;\n let gaugeStartY = (containerHeight - GAUGE_THICKNESS) / 2.0;\n\n if (orientation === 'vertical') {\n gaugeStartX = (containerWidth - GAUGE_THICKNESS) / 2.0;\n gaugeStartY = (containerHeight - gaugeLength) / 2.0;\n }\n\n return { gaugeStartX, gaugeStartY };\n};\n\n/**\n * get dimensions for the whole gauge viz,\n * which can be useful to calculate background bar and major ticks positions.\n * @method getGaugeDimensions\n * @param {Object} input\n * @param {Number} input.containerWidth\n * @param {Number} input.containerHeight\n * @param {String} input.orientation 'horizontal' or 'vertical'\n * @return {Object} gaugeDimensions\n * @return {Number} gaugeDimensions.gaugeLength how long the gauge shoud be in horizontal or vertical orientation.\n * @return {Number} gaugeDimensions.gaugeStartX start x to render gauge\n * @return {Number} gaugeDimensions.gaugeStartY start y to render gauge\n * @return {Number} gaugeDimensions.gaugeWidth natural width of gauge\n * @return {Number} gaugeDimensions.gaugeHeight natural height of gauge\n */\nexport const getGaugeDimensions = ({ containerWidth, containerHeight, orientation }) => {\n const gaugeLength = getGaugeLength({\n containerWidth,\n containerHeight,\n orientation,\n });\n const { gaugeStartX, gaugeStartY } = getGaugeStartPosition({\n containerWidth,\n containerHeight,\n gaugeLength,\n orientation,\n });\n const gaugeWidth = getGaugeWidth({ containerWidth, orientation });\n const gaugeHeight = getGaugeHeight({ containerHeight, orientation });\n\n return {\n gaugeLength,\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n };\n};\n\n/**\n * if gaugeColor is not specified, auto assign a gauge color to the fill bar\n * based on how much percentage the value is taken between min and max\n * @method assignGaugeColor\n * @params\n * */\nexport const assignGaugeColor = ({ value, min, max }) => {\n const rate = (value - min) / (max - min);\n\n if (rate <= 0.3) {\n return SEMANTIC_SUCCESS;\n }\n if (rate > 0.3 && rate <= 0.6) {\n return SEMANTIC_WARNING;\n }\n\n return SEMANTIC_ERROR;\n};\n\n/**\n * get inner bar length in gauge\n * @method getGaugeBarLength\n * @param {Object} input\n * @param {Number} input.gaugeLength\n * @param {Number} input.value\n * @param {Number} input.min\n * @param {Number} input.max\n * @return {Number} gaugeBarLength\n */\nexport const getGaugeBarLength = ({ gaugeLength, value, min, max }) => {\n if (max < min) {\n return null;\n }\n\n const numericValue = Number(value);\n\n if (!Number.isFinite(numericValue)) {\n return 0;\n }\n\n if (numericValue >= max) {\n return gaugeLength;\n }\n\n if (numericValue < min) {\n return 0;\n }\n\n return (gaugeLength * (numericValue - min)) / (max - min);\n};\n\n/**\n * get x and y position for rendering inner bar in gauge\n * @method getGaugeBarStartPositions\n * @param {Object} input\n * @param {Number} input.gaugeStartX\n * @param {Number} input.gaugeStartY\n * @param {Number} input.gaugeWidth\n * @param {Number} input.gaugeHeight\n * @param {Number} input.gaugeBarLength\n * @param {String} input.orientation\n * @return {Object} position\n * @return {Number} position.gaugeBarX\n * @return {Number} position.gaugeBarY\n */\nexport const getGaugeBarStartPositions = ({\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n gaugeBarLength,\n orientation,\n}) => {\n let gaugeBarX = gaugeStartX;\n let gaugeBarY = gaugeStartY;\n\n if (orientation === 'vertical') {\n gaugeBarX += (gaugeWidth - FILL_THICKNESS) / 2;\n gaugeBarY += gaugeHeight - gaugeBarLength;\n } else {\n gaugeBarY += (gaugeHeight - FILL_THICKNESS) / 2;\n }\n\n return {\n gaugeBarX,\n gaugeBarY,\n };\n};\n\n/**\n * get width of inner bar in gauge\n * @method getGaugeBarWidth\n * @param {Object} input\n * @param {Number} input.gaugeBarLength\n * @param {String} orientation\n * @return {Number} gaugeBarWidth\n */\nexport const getGaugeBarWidth = ({ gaugeBarLength, orientation }) =>\n orientation === 'vertical' ? FILL_THICKNESS : gaugeBarLength;\n\n/**\n * get height of inner bar in gauge\n * @method getGaugeBarWidth\n * @param {Object} input\n * @param {Number} input.gaugeBarLength\n * @param {String} orientation\n * @return {Number} gaugeBarHeight\n */\nexport const getGaugeBarHeight = ({ gaugeBarLength, orientation }) =>\n orientation === 'vertical' ? gaugeBarLength : FILL_THICKNESS;\n\n/**\n * get dimensions for the fill bar in the gauge\n * @method getFillBarDimensions\n * @param {Object} input\n * @param {Number} input.gaugeLength\n * @param {Number} input.gaugeStartX\n * @param {Number} input.gaugeStartY\n * @param {Number} input.gaugeWidth,\n * @param {Number} input.gaugeHeight,\n * @param {Number} input.value,\n * @param {Number} input.min,\n * @param {Number} input.max,\n * @param {String} input.orientation\n * @return {Object} fillBarDimensions\n * @return {Number} fillBarDimensions.fillBarLength\n * @return {Number} fillBarDimensions.fillBarX\n * @return {Number} fillBarDimensions.fillBarY\n * @return {Number} fillBarDimensions.fillBarWidth\n * @return {Number} fillBarDimensions.fillBarHeight\n */\nexport const getFillBarDimensions = ({\n gaugeLength,\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n value,\n min,\n max,\n orientation,\n}) => {\n const gaugeBarLength = getGaugeBarLength({ gaugeLength, value, max, min });\n const { gaugeBarX: fillBarX, gaugeBarY: fillBarY } = getGaugeBarStartPositions({\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n gaugeBarLength,\n orientation,\n });\n const fillBarWidth = getGaugeBarWidth({ gaugeBarLength, orientation });\n const fillBarHeight = getGaugeBarHeight({ gaugeBarLength, orientation });\n\n return {\n fillBarLength: gaugeBarLength,\n fillBarX,\n fillBarY,\n fillBarWidth,\n fillBarHeight,\n };\n};\n\n/**\n * get position x and y for value marker in filler gauge\n * @method getFillerGaugeValueMarkerPositions\n * @param {Object} input\n * @param {Number} input.fillBarX\n * @param {Number} input.fillBarY\n * @param {Number} input.fillBarLength\n * @param {String} input.orientation\n * @return {Object} position\n * @return {Number} position.valueMarkerX\n * @return {Number} position.valueMarkerY\n */\nexport const getFillerGaugeValueMarkerPositions = ({ fillBarX, fillBarY, fillBarLength, orientation }) => {\n let valueMarkerX = fillBarX;\n let valueMarkerY = fillBarY;\n\n if (orientation === 'vertical') {\n valueMarkerX -= (GAUGE_THICKNESS - FILL_THICKNESS) / 4;\n } else {\n valueMarkerX += fillBarLength;\n valueMarkerY -= (GAUGE_THICKNESS - FILL_THICKNESS) / 4;\n }\n\n return {\n valueMarkerX,\n valueMarkerY,\n };\n};\n\n/**\n * get dimensions for the marker bar in the gauge\n * @method getMarkerBarDimensions\n * @param {Object} input\n * @param {Number} input.gaugeLength\n * @param {Number} input.gaugeStartX\n * @param {Number} input.gaugeStartY\n * @param {Number} input.gaugeWidth,\n * @param {Number} input.gaugeHeight,\n * @param {String} input.orientation\n * @return {Object} markerBarDimensions\n * @return {Number} markerBarDimensions.markerBarLength\n * @return {Number} markerBarDimensions.markerBarX\n * @return {Number} markerBarDimensions.markerBarY\n * @return {Number} markerBarDimensions.markerBarWidth\n * @return {Number} markerBarDimensions.markerBarHeight\n */\nexport const getMarkerBarDimensions = ({\n gaugeLength,\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n orientation,\n}) => {\n const gaugeBarLength = gaugeLength; // For marker gauge, inner marker bar spans the entire gauge\n const { gaugeBarX: markerBarX, gaugeBarY: markerBarY } = getGaugeBarStartPositions({\n gaugeStartX,\n gaugeStartY,\n gaugeWidth,\n gaugeHeight,\n gaugeBarLength,\n orientation,\n });\n const markerBarWidth = getGaugeBarWidth({ gaugeBarLength, orientation });\n const markerBarHeight = getGaugeBarHeight({ gaugeBarLength, orientation });\n\n return {\n markerBarLength: gaugeBarLength,\n markerBarX,\n markerBarY,\n markerBarWidth,\n markerBarHeight,\n };\n};\n\n/**\n * get position x and y for value marker in marker gauge\n * @method getMarkerGaugeValueMarkerPositions\n * @param {Object} input\n * @param {Number} input.markerBarX\n * @param {Number} input.markerBarY\n * @param {Number} input.markerBarHeight\n * @param {Number} input.markerBarLength\n * @param {Number} input.value\n * @param {Number} input.min\n * @param {Number} input.max\n * @param {String} input.orientation\n * @return {Object} position\n * @return {Number} position.valueMarkerX\n * @return {Number} position.valueMarkerY\n */\nexport const getMarkerGaugeValueMarkerPositions = ({\n markerBarX,\n markerBarY,\n markerBarHeight,\n markerBarLength: gaugeLength,\n orientation,\n value,\n min,\n max,\n}) => {\n let valueMarkerX = markerBarX;\n let valueMarkerY = markerBarY;\n if (orientation === 'vertical') {\n valueMarkerY += markerBarHeight - getGaugeBarLength({ gaugeLength, value, max, min });\n valueMarkerX -= (GAUGE_THICKNESS - FILL_THICKNESS) / 4;\n } else {\n valueMarkerX += getGaugeBarLength({ gaugeLength, value, max, min });\n valueMarkerY -= (GAUGE_THICKNESS - FILL_THICKNESS) / 4;\n }\n\n return {\n valueMarkerX,\n valueMarkerY,\n };\n};\n\n/**\n * sort the ranges in ascending order\n * @method getSortedRanges\n * @param {Array} ranges\n * @return {Array} sortedRanges\n */\nexport const getSortedRanges = ranges => ranges.sort((a, b) => a.from - b.from);\n\n/**\n * validate whether ranges prop is valid - continuous ranges, range.to < range.from, range.from != range.to\n * @method validateRanges\n * @param {Array} ranges\n * @return {String} error\n */\nexport const validateRanges = ranges => {\n if (!ranges.length) {\n return _('Prop \"ranges\" is missing entries');\n }\n\n // check whether a range has \"from\" >= \"to\" eg: 10 - 10, 100 - 10, -20 - -10 are invalid\n if (ranges.some(range => range.from >= range.to)) {\n return _('Prop \"ranges\" has invalid entries: invalid range');\n }\n\n // check whether ranges have duplicate \"from/to\" eg: 0 - 50, 25 - 50\n if (ranges.length !== uniqBy(ranges, 'to').length || ranges.length !== uniqBy(ranges, 'from').length) {\n return _('Prop \"ranges\" has invalid entries: duplicate values');\n }\n\n const sortedRanges = getSortedRanges(ranges);\n\n // check whether ranges are continuous eg: 0 - 10, 10 - 20, 20 - 30\n for (let i = 1; i < sortedRanges.length; i += 1) {\n if (sortedRanges[i].from !== sortedRanges[i - 1].to) {\n return _('Prop \"ranges\" has invalid entries: discontinuous ranges');\n }\n }\n\n return null;\n};\n\n/**\n * calculate min and max value of gauge\n * @method getGaugeRange\n * @param {Array} ranges\n * @return {Object} gaugeRange\n * @return {Number} gaugeRange.min\n * @return {Number} gaugeRange.max\n */\nexport const getGaugeRange = ranges => {\n const min = Math.min(...ranges.map(range => range.from));\n const max = Math.max(...ranges.map(range => range.to));\n return { min, max };\n};\n\n/**\n * calculate stop offsets for linear gradient\n * @method getGradientStopOffsets\n * @param {Array} ranges\n * @param {String} orientation\n * @return {Array} cumulativeOffsets\n */\nexport const getGradientStopOffsets = ({ ranges, orientation }) => {\n const { min, max } = getGaugeRange(ranges);\n const offsetScale = (GRADIENT_STOP_OFFSET_MAX - GRADIENT_STOP_OFFSET_MIN) / (max - min);\n let offsets = ranges.map(range => Math.abs(range.from - range.to) * offsetScale);\n // When orientation is vertical, since the gauge starts from bottom to top, linear gradient should be reversed\n offsets = orientation === 'vertical' ? offsets.reverse() : offsets;\n const cumulativeOffsets = [];\n offsets.reduce((accumulator, currentValue, idx) => {\n cumulativeOffsets[idx] = accumulator + currentValue;\n return cumulativeOffsets[idx];\n }, 0);\n return cumulativeOffsets;\n};\n\n/**\n * calculate stop colors for linear gradient\n * @method getGradientStopColors\n * @param {Array} ranges\n * @param {String} orientation\n * @return {Array} stopColors\n */\nexport const getGradientStopColors = ({ ranges, orientation }) => {\n const stopColors = ranges.map(range => range.value);\n // When orientation is vertical, since the gauge starts from bottom to top, linear gradient should be reversed\n return orientation === 'vertical' ? stopColors.reverse() : stopColors;\n};\n\n/**\n * calculate linear gradient stops from ranges\n * @method getGradientStops\n * @param {Object} input\n * @param {Array} ranges\n * @param {String} orientation\n * @return {Array} stops\n */\nexport const getGradientStops = ({ ranges, orientation }) => {\n const stops = [];\n const offsets = getGradientStopOffsets({ ranges, orientation });\n const stopColors = getGradientStopColors({ ranges, orientation });\n // Initialize stops with the first color stop\n stops.push({ offset: `${offsets[0]}%`, stopColor: stopColors[0] });\n // Add the remaining color stops with gradient change at each stop\n for (let i = 1; i < ranges.length; i += 1) {\n stops.push({ offset: `${offsets[i - 1]}%`, stopColor: stopColors[i] });\n stops.push({ offset: `${offsets[i]}%`, stopColor: stopColors[i] });\n }\n return stops;\n};\n\n/**\n * calculate linear gradient dimensions\n * @method getGradientDimensions\n * @param {String} orientation\n * @return {Object} dimensions\n * @return {String} dimensions.x1\n * @return {String} dimensions.y1\n * @return {String} dimensions.x2\n * @return {String} dimensions.y2\n */\nexport const getGradientDimensions = orientation => {\n const x1 = '0%';\n const y1 = '0%';\n const x2 = orientation === 'horizontal' ? '100%' : '0%';\n const y2 = orientation === 'horizontal' ? '0%' : '100%';\n return { x1, y1, x2, y2 };\n};\n\ntype NumericInput = number | string;\n\ninterface UniqueDecimalPlacesInput {\n values: number[];\n minimumDecimalPlaces: number;\n}\n\ninterface PercentageFromRangeInput {\n value: number;\n min: number;\n range: number;\n}\n\ninterface NumOfTicksInput {\n min: number;\n max: number;\n majorUnit: number | string;\n usePercentageRange: boolean;\n}\n\ninterface TickLabelFormatterResult {\n numOfTicks: number;\n numericStep: number;\n formatTickLabel: (value: number) => string;\n}\n\ninterface FormatGaugeValueLabelInput {\n value: NumericInput;\n min: number;\n max: number;\n usePercentageValue: boolean;\n}\n\n// Returns the number of fractional digits in a numeric input.\nexport const getDecimalPlaces = (value: NumericInput): number => {\n const numericValue = Number(value);\n if (!Number.isFinite(numericValue)) {\n return 0;\n }\n\n const fractionPart = numericValue.toString().split('.')[1];\n return fractionPart ? fractionPart.length : 0;\n};\n\n// Finds the smallest precision that keeps all rounded tick values unique.\n// This avoids duplicated rendered labels caused by rounding collisions.\nexport const getUniqueDecimalPlaces = ({\n values,\n minimumDecimalPlaces,\n}: UniqueDecimalPlacesInput): number => {\n if (values.length <= 1) {\n return minimumDecimalPlaces;\n }\n\n for (\n let decimalPlaces = minimumDecimalPlaces;\n decimalPlaces <= MAX_TICK_LABEL_DECIMAL_PLACES;\n decimalPlaces += 1\n ) {\n const roundedValues = values.map(value => Number(value.toFixed(decimalPlaces)));\n if (new Set(roundedValues).size === roundedValues.length) {\n return decimalPlaces;\n }\n }\n\n return MAX_TICK_LABEL_DECIMAL_PLACES;\n};\n\n// Converts a value within [min, max] to percentage space.\nexport const getPercentageFromRange = ({ value, min, range }: PercentageFromRangeInput): number => {\n if (range === 0) {\n return 0;\n }\n return ((value - min) / range) * 100;\n};\n\n// Computes interval count from auto mode or explicit majorUnit.\nexport const getNumOfTicks = ({\n min,\n max,\n majorUnit,\n usePercentageRange,\n}: NumOfTicksInput): { numOfTicks: number; isAutoMajorUnit: boolean; majorUnitNumber: number } => {\n const range = max - min;\n const majorUnitNumber = Number(majorUnit);\n const isAutoMajorUnit = majorUnit === 'auto' || Number.isNaN(majorUnitNumber) || majorUnitNumber <= 0;\n\n let numOfTicks = DEFAULT_NUM_OF_TICKS;\n if (!isAutoMajorUnit) {\n numOfTicks = usePercentageRange ? 100 / majorUnitNumber : range / majorUnitNumber;\n }\n\n return { numOfTicks, isAutoMajorUnit, majorUnitNumber };\n};\n\n// Builds a reusable formatter and step size for major tick rendering.\nexport const getTickLabelFormatter = ({\n min,\n max,\n majorUnit,\n usePercentageRange,\n}: NumOfTicksInput): TickLabelFormatterResult => {\n const range = max - min;\n const { numOfTicks, isAutoMajorUnit, majorUnitNumber } = getNumOfTicks({\n min,\n max,\n majorUnit,\n usePercentageRange,\n });\n const numericStep = range / numOfTicks;\n const tickValues = [];\n\n // Materialize all candidate tick values (plus max for uneven divisions).\n for (let i = 0; i <= numOfTicks; i += 1) {\n tickValues.push(min + numericStep * i);\n }\n\n if (!Number.isInteger(numOfTicks)) {\n tickValues.push(max);\n }\n\n const minimumNumericDecimalPlaces = Math.min(\n MAX_TICK_LABEL_DECIMAL_PLACES,\n Math.max(\n getDecimalPlaces(min),\n getDecimalPlaces(max),\n isAutoMajorUnit ? 0 : getDecimalPlaces(majorUnitNumber)\n )\n );\n const numericLabelDecimalPlaces = getUniqueDecimalPlaces({\n values: tickValues,\n minimumDecimalPlaces: minimumNumericDecimalPlaces,\n });\n const percentageLabelDecimalPlaces = getUniqueDecimalPlaces({\n values: tickValues.map(value => getPercentageFromRange({ value, min, range })),\n minimumDecimalPlaces: 0,\n });\n\n // Keep fixed-width decimal formatting when decimals are needed; otherwise use trend formatting.\n const formatTickLabel = value => {\n if (usePercentageRange) {\n const percentageValue = getPercentageFromRange({ value, min, range });\n return `${percentageValue.toFixed(percentageLabelDecimalPlaces)}%`;\n }\n\n const numericLabel = value.toFixed(numericLabelDecimalPlaces);\n if (numericLabel.includes('.')) {\n return numericLabel;\n }\n\n return formatNumber(Number(numericLabel), 0, {\n useThousandSeparators: true,\n useTrendUnits: true,\n }).replace(/k$/, 'K');\n };\n\n return { numOfTicks, numericStep, formatTickLabel };\n};\n\n// Limits decimal places so displayed value length stays within a fixed digit budget.\nconst getDigitsBeforeDecimal = (numericValue: NumericInput): number =>\n Math.abs(Math.trunc(Number(numericValue))).toString().length;\n\nconst getCappedDecimalPlaces = (\n numericValue: NumericInput,\n rawDecimalPlaces: number,\n maxDigits: number\n): number => {\n const digitsBeforeDecimal = getDigitsBeforeDecimal(numericValue);\n const maxDecimalPlaces = Math.max(0, maxDigits - digitsBeforeDecimal);\n return Math.min(rawDecimalPlaces, maxDecimalPlaces);\n};\n\n// Formats the marker value label in number or percentage mode with capped precision.\nexport const formatGaugeValueLabel = ({\n value,\n min,\n max,\n usePercentageValue,\n}: FormatGaugeValueLabelInput): string => {\n const numericValue = Number(value);\n const range = max - min || 1;\n const percentageValue = getPercentageFromRange({ value: numericValue, min, range });\n const trendFormatOptions = {\n useThousandSeparators: true,\n useTrendUnits: true,\n };\n\n if (usePercentageValue) {\n // Use the same number-mode formatting behavior (including K/M/B/T) for percentages.\n const percentageDecimalPlaces = getCappedDecimalPlaces(\n percentageValue,\n 2,\n MAX_VALUE_LABEL_DIGITS_WITH_PERCENT\n );\n return `${formatNumber(percentageValue, percentageDecimalPlaces, trendFormatOptions)}%`;\n }\n\n const valueDecimalPlaces = getCappedDecimalPlaces(\n numericValue,\n getDecimalPlaces(numericValue),\n MAX_VALUE_LABEL_DIGITS_WITHOUT_PERCENT\n );\n return formatNumber(numericValue, valueDecimalPlaces, trendFormatOptions);\n};\n\ninterface GaugeOptions {\n [key: string]: any;\n}\n\n// map for new options names to old option names\nconst gaugeOptionsMapping = {\n majorTickInterval: 'majorUnit',\n gaugeRanges: 'ranges',\n};\n\n/**\n * Helper method to update the option names which can be mapped to pure component options\n * @method mapToOldKey\n * @param {Object} options\n * @returns {Object}\n */\nexport const mapToOldKey = (options: GaugeOptions): GaugeOptions =>\n mapKeys(options, (val, key) => (gaugeOptionsMapping[key] ? gaugeOptionsMapping[key] : key));\n\ntype LabelOrValue = 'label' | 'value';\n\n/**\n * Helper method to map labelDisplay and valueDisplay options to pure component option names\n * @method mapToOldKey\n * @param {string} labelOrValue\n * @param {Object} options\n * @returns {Object}\n */\nexport const mapValueLabelDisplay = (labelOrValue: LabelOrValue, options: GaugeOptions): GaugeOptions => {\n const rangeOrValue: string = labelOrValue === 'value' ? 'Value' : 'Range';\n const showKey: string = labelOrValue === 'value' ? 'showValue' : 'showLabels';\n const percentKey = `usePercentage${rangeOrValue}`;\n const optionString = `${labelOrValue}Display`;\n const newOptions = { ...options };\n if (newOptions[optionString]) {\n if (newOptions[optionString] === 'number') {\n newOptions[showKey] = true;\n newOptions[percentKey] = false;\n } else if (newOptions[optionString] === 'percentage') {\n newOptions[showKey] = true;\n newOptions[percentKey] = true;\n } else {\n newOptions[showKey] = false;\n newOptions[percentKey] = false;\n }\n }\n return omit(newOptions, [optionString]);\n};\n\n/**\n * Chained helper for mapping the option properties (and values) we expose in config.ts into property values that pure component accepts\n * This is for options that has new key name and can not directly be mapped with pure component props\n * @method convertToGaugeProperties\n * @param {Object} originalOptions\n * @returns {Object}\n */\nexport const convertToGaugeProperties = (originalOptions: GaugeOptions): GaugeOptions =>\n chain(mapToOldKey(originalOptions))\n .thru(options => mapValueLabelDisplay('label', options))\n .thru(options => mapValueLabelDisplay('value', options))\n .value();\n", "\nimport * as defaultImport from \"lodash\";\nexport * from \"lodash\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/colorConstants\";\nexport * from \"@splunk/visualizations-shared/colorConstants\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualizations-shared/numberUtils\";\nexport * from \"@splunk/visualizations-shared/numberUtils\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/ui-utils/i18n\";\nexport * from \"@splunk/ui-utils/i18n\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n"],
5
+ "mappings": "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",
6
6
  "names": ["defaultImport", "defaultImport", "defaultImport"]
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FixedSizeContainer.d.ts","sourceRoot":"","sources":["../../src/common/hocs/FixedSizeContainer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAwE/B,UAAU,mBAAmB;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,QAAA,MAAM,sBAAsB,GAAI,CAAC,SAAS,mBAAmB,EACzD,KAAK,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAC5B,KAAK,CAAC,aAAa,CAAC,CAAC,CAmCvB,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"FixedSizeContainer.d.ts","sourceRoot":"","sources":["../../src/common/hocs/FixedSizeContainer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAwE/B,UAAU,mBAAmB;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,QAAA,MAAM,sBAAsB,GAAI,CAAC,SAAS,mBAAmB,EACzD,KAAK,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAC5B,KAAK,CAAC,aAAa,CAAC,CAAC,CAoCvB,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Pixel height of the paginator bar, matching the value used in the Table
3
+ * styled component SUITableContainer. Exported so callers can share the constant
4
+ * rather than duplicate it.
5
+ */
6
+ export declare const PAGINATOR_CONTAINER_HEIGHT = 38;
7
+ /**
8
+ * Pixel spacing between the table body and the paginator bar.
9
+ */
10
+ export declare const PAGINATOR_SPACING = 5;
11
+ interface UseDynamicHeightParams {
12
+ /** Whether the dynamic-height feature is currently enabled. */
13
+ dynamicHeight?: boolean;
14
+ /**
15
+ * Framework-supplied callback that receives the viz's total natural height
16
+ * in pixels. Pass `undefined` to clear a previously reported override
17
+ * (e.g. when dynamic height is disabled).
18
+ */
19
+ onRequestHeight?: (height: number | undefined) => void;
20
+ /** Whether the paginator is currently active (adds chrome to the measurement). */
21
+ isPaging: boolean;
22
+ /**
23
+ * Opaque change signal — re-measuring is triggered whenever this value
24
+ * changes identity (use `tableBody.rows`).
25
+ */
26
+ rows: unknown;
27
+ /**
28
+ * Opaque change signal — re-measuring is triggered whenever this value
29
+ * changes identity (use the `expandedRowJson` memo from the component).
30
+ */
31
+ expandedRowJson: unknown;
32
+ }
33
+ interface UseDynamicHeightResult {
34
+ /** Attach to the outermost container element (`VizTableContainer`). */
35
+ containerRef: React.RefObject<HTMLDivElement | null>;
36
+ /** Attach to the scroll-viewport container (`SUITableContainer`). */
37
+ containerRefInner: React.RefObject<HTMLDivElement | null>;
38
+ /**
39
+ * Attach to the SUI Table element via its `elementRef` prop.
40
+ * The hook reaches the inner `<table>` node through this ref.
41
+ */
42
+ suiTableRef: React.RefObject<HTMLDivElement | null>;
43
+ }
44
+ /**
45
+ * Manages dynamic-height reporting for the Table visualization.
46
+ *
47
+ * Responsibilities:
48
+ * - Measures the table's natural content height (inner `<table>` scrollHeight +
49
+ * container padding + optional paginator chrome) and reports it via
50
+ * `onRequestHeight` whenever content changes size.
51
+ * - Dedupes: only fires `onRequestHeight` when the computed height changes.
52
+ * - Caches the last measured height so that toggling `dynamicHeight` back on
53
+ * can immediately re-report without waiting for a new ResizeObserver entry.
54
+ * - Clears the layout override (reports `undefined`) when `dynamicHeight` flips
55
+ * false, but keeps the cache so re-enabling restores the grown height.
56
+ *
57
+ * The hook owns and returns the three refs that must be attached to DOM nodes
58
+ * by the calling component.
59
+ *
60
+ * **Future seam:** the `onRequestHeight` prop will eventually be replaced by
61
+ * `useDynamicHeightCallback(id)` from `@splunk/dashboard-context` once that hook
62
+ * is available. The internal caching and enable/disable logic already mirrors the
63
+ * framework's `useDynamicHeightReporter` shape to make that swap straightforward.
64
+ */
65
+ export declare const useDynamicHeight: ({ dynamicHeight, onRequestHeight, isPaging, rows, expandedRowJson, }: UseDynamicHeightParams) => UseDynamicHeightResult;
66
+ export {};
67
+ //# sourceMappingURL=useDynamicHeight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDynamicHeight.d.ts","sourceRoot":"","sources":["../../src/common/hooks/useDynamicHeight.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C;;GAEG;AACH,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC,UAAU,sBAAsB;IAC5B,+DAA+D;IAC/D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACvD,kFAAkF;IAClF,QAAQ,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,IAAI,EAAE,OAAO,CAAC;IACd;;;OAGG;IACH,eAAe,EAAE,OAAO,CAAC;CAC5B;AAED,UAAU,sBAAsB;IAC5B,uEAAuE;IACvE,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACrD,qEAAqE;IACrE,iBAAiB,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC1D;;;OAGG;IACH,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;CACvD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,gBAAgB,GAAI,sEAM9B,sBAAsB,KAAG,sBA8F3B,CAAC"}
@@ -11,6 +11,7 @@ export declare enum VizCategory {
11
11
  MISC = "misc",
12
12
  FLOW = "Flow",
13
13
  CORRELATION = "Correlation",
14
- SPATIAL = "Spatial"
14
+ SPATIAL = "Spatial",
15
+ TEXT = "Text"
15
16
  }
16
17
  //# sourceMappingURL=VizCategory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VizCategory.d.ts","sourceRoot":"","sources":["../../src/common/interfaces/VizCategory.ts"],"names":[],"mappings":"AAAA,oBAAY,WAAW;IACnB,YAAY,iBAAiB;IAC7B,MAAM,WAAW;IACjB,WAAW,gBAAgB;IAC3B,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,aAAa,kBAAkB;IAC/B,UAAU,oBAAoB;IAC9B,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,WAAW,gBAAgB;IAC3B,OAAO,YAAY;CACtB"}
1
+ {"version":3,"file":"VizCategory.d.ts","sourceRoot":"","sources":["../../src/common/interfaces/VizCategory.ts"],"names":[],"mappings":"AAAA,oBAAY,WAAW;IACnB,YAAY,iBAAiB;IAC7B,MAAM,WAAW;IACjB,WAAW,gBAAgB;IAC3B,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,aAAa,kBAAkB;IAC/B,UAAU,oBAAoB;IAC9B,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,WAAW,gBAAgB;IAC3B,OAAO,YAAY;IACnB,IAAI,SAAS;CAChB"}
@@ -476,7 +476,7 @@ var Cover = styled_components_default.div`
476
476
  bottom: 0;
477
477
  `;
478
478
  var Blocker = styled_components_default.div.attrs({
479
- "data-splunk-visualization-version": "28.7.0 - d7b18cab6"
479
+ "data-splunk-visualization-version": "28.8.0 - 633c53372"
480
480
  })`
481
481
  position: relative;
482
482
  width: 100%;
@@ -575,7 +575,7 @@ var withFixedSizeContainer = (Viz) => {
575
575
  FixSizeItem,
576
576
  {
577
577
  "data-test": "fix-size-item",
578
- "data-splunk-visualization-version": "28.7.0 - d7b18cab6",
578
+ "data-splunk-visualization-version": "28.8.0 - 633c53372",
579
579
  width,
580
580
  height,
581
581
  backgroundColor