@splunk/visualizations 28.4.0 → 28.5.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.
- package/Area.config.js +28 -7
- package/Area.config.js.map +2 -2
- package/Area.js +106 -39
- package/Area.js.map +2 -2
- package/Bar.config.js +28 -7
- package/Bar.config.js.map +2 -2
- package/Bar.js +106 -39
- package/Bar.js.map +2 -2
- package/Bubble.config.js +4 -4
- package/Bubble.config.js.map +2 -2
- package/Bubble.js +78 -30
- package/Bubble.js.map +2 -2
- package/CHANGELOG.external.md +89 -0
- package/ChoroplethSvg.js +74 -26
- package/ChoroplethSvg.js.map +2 -2
- package/Column.config.js +28 -7
- package/Column.config.js.map +2 -2
- package/Column.js +106 -39
- package/Column.js.map +2 -2
- package/Ellipse/config.d.ts.map +1 -1
- package/Ellipse.config.js +14 -5
- package/Ellipse.config.js.map +4 -4
- package/Ellipse.js +130 -73
- package/Ellipse.js.map +4 -4
- package/Events.js +74 -26
- package/Events.js.map +2 -2
- package/FillerGauge.js +234 -47
- package/FillerGauge.js.map +2 -2
- package/Image.js +74 -26
- package/Image.js.map +2 -2
- package/Line/lineUtils.d.ts.map +1 -1
- package/Line/mockdata/LineData.d.ts +95 -0
- package/Line/mockdata/LineData.d.ts.map +1 -1
- package/Line.config.js +28 -7
- package/Line.config.js.map +2 -2
- package/Line.js +122 -41
- package/Line.js.map +2 -2
- package/LinkGraph.js +74 -26
- package/LinkGraph.js.map +2 -2
- package/Map/PureMap/BubbleLayer.d.ts.map +1 -1
- package/Map/PureMap/ClusterLayer.d.ts.map +1 -1
- package/Map/PureMap/MapUtils.d.ts +2 -2
- package/Map/PureMap/MapUtils.d.ts.map +1 -1
- package/Map/PureMap/PureMap.d.ts.map +1 -1
- package/Map.js +111 -37
- package/Map.js.map +2 -2
- package/Markdown/config.d.ts.map +1 -1
- package/Markdown.config.js +14 -5
- package/Markdown.config.js.map +4 -4
- package/Markdown.js +91 -34
- package/Markdown.js.map +4 -4
- package/MarkerGauge.js +243 -56
- package/MarkerGauge.js.map +4 -4
- package/NetworkGraph/PureNetworkGraph/PureNetworkGraph.d.ts.map +1 -1
- package/NetworkGraph/PureNetworkGraph/components/Node.d.ts.map +1 -1
- package/NetworkGraph/PureNetworkGraph/components/ZoomControls.d.ts.map +1 -1
- package/NetworkGraph/PureNetworkGraph/utils/dragUtils.d.ts +78 -0
- package/NetworkGraph/PureNetworkGraph/utils/dragUtils.d.ts.map +1 -0
- package/NetworkGraph/PureNetworkGraph/utils/networkGraphUtils.d.ts +1 -2
- package/NetworkGraph/PureNetworkGraph/utils/networkGraphUtils.d.ts.map +1 -1
- package/NetworkGraph.config.js.map +2 -2
- package/NetworkGraph.js +365 -105
- package/NetworkGraph.js.map +4 -4
- package/PERFORMANCE.md +23 -0
- package/ParallelCoordinates/ParallelCoordinates.d.ts +1 -46
- package/ParallelCoordinates/ParallelCoordinates.d.ts.map +1 -1
- package/ParallelCoordinates/PureParallelCoordinates/PureParallelCoordinates.d.ts +12 -58
- package/ParallelCoordinates/PureParallelCoordinates/PureParallelCoordinates.d.ts.map +1 -1
- package/ParallelCoordinates/PureParallelCoordinates/src/ParallelCoordinatesChart.d.ts +1 -0
- package/ParallelCoordinates/PureParallelCoordinates/src/ParallelCoordinatesChart.d.ts.map +1 -1
- package/ParallelCoordinates.js +150 -153
- package/ParallelCoordinates.js.map +4 -4
- package/Pie/Pie.d.ts.map +1 -1
- package/Pie/config.d.ts.map +1 -1
- package/Pie/pieUtils.d.ts +4 -0
- package/Pie/pieUtils.d.ts.map +1 -1
- package/Pie.config.js +16 -0
- package/Pie.config.js.map +2 -2
- package/Pie.js +118 -35
- package/Pie.js.map +2 -2
- package/Punchcard.js +74 -26
- package/Punchcard.js.map +2 -2
- package/Rectangle/config.d.ts.map +1 -1
- package/Rectangle.config.js +14 -5
- package/Rectangle.config.js.map +4 -4
- package/Rectangle.js +92 -35
- package/Rectangle.js.map +4 -4
- package/Sankey/PureSankey/PureSankey.d.ts +26 -72
- package/Sankey/PureSankey/PureSankey.d.ts.map +1 -1
- package/Sankey/PureSankey/SankeyLink.d.ts +3 -19
- package/Sankey/PureSankey/SankeyLink.d.ts.map +1 -1
- package/Sankey/PureSankey/SankeyNode.d.ts +3 -20
- package/Sankey/PureSankey/SankeyNode.d.ts.map +1 -1
- package/Sankey/PureSankey/SankeyTooltip.d.ts +3 -24
- package/Sankey/PureSankey/SankeyTooltip.d.ts.map +1 -1
- package/Sankey.js +270 -336
- package/Sankey.js.map +2 -2
- package/Scatter.config.js +168 -147
- package/Scatter.config.js.map +4 -4
- package/Scatter.js +246 -179
- package/Scatter.js.map +4 -4
- package/SingleValue.js +96 -75
- package/SingleValue.js.map +2 -2
- package/SingleValueIcon/config.d.ts.map +1 -1
- package/SingleValueIcon.config.js +14 -5
- package/SingleValueIcon.config.js.map +4 -4
- package/SingleValueIcon.js +118 -76
- package/SingleValueIcon.js.map +4 -4
- package/SingleValueRadial/PureSingleValueRadial/GaugeGraph.d.ts.map +1 -1
- package/SingleValueRadial.js +95 -76
- package/SingleValueRadial.js.map +2 -2
- package/Table/Table.d.ts.map +1 -1
- package/Table/hooks.d.ts +2 -0
- package/Table/hooks.d.ts.map +1 -1
- package/Table.js +95 -49
- package/Table.js.map +2 -2
- package/Timeline/PureTimeline/PureTimeline.d.ts.map +1 -1
- package/Timeline/PureTimeline/src/TimelinePlugin.d.ts.map +1 -1
- package/Timeline/PureTimeline/src/TimelineYAxis.d.ts.map +1 -1
- package/Timeline/PureTimeline/src/utils/timelineUtils.d.ts +2 -1
- package/Timeline/PureTimeline/src/utils/timelineUtils.d.ts.map +1 -1
- package/Timeline.js +154 -54
- package/Timeline.js.map +2 -2
- package/common/GaugeMajorTicks.js +150 -13
- package/common/GaugeMajorTicks.js.map +4 -4
- package/common/GaugeValueMarker.js +84 -17
- package/common/GaugeValueMarker.js.map +4 -4
- package/common/OptionsDoc.js.map +1 -1
- package/common/OverviewDoc.d.ts.map +1 -1
- package/common/OverviewDoc.js +2 -2
- package/common/OverviewDoc.js.map +2 -2
- package/common/TimeSeriesChartWrapper.d.ts.map +1 -1
- package/common/TimeSeriesChartWrapper.js +72 -24
- package/common/TimeSeriesChartWrapper.js.map +2 -2
- package/common/chartingUtils.d.ts +9 -3
- package/common/chartingUtils.d.ts.map +1 -1
- package/common/chartingUtils.js +21 -16
- package/common/chartingUtils.js.map +2 -2
- package/common/editorConfig/AxesChartDataConfig.d.ts +3 -3
- package/common/editorConfig/AxesChartDataConfig.d.ts.map +1 -1
- package/common/editorConfig/AxesChartDataDisplay.d.ts +4 -0
- package/common/editorConfig/AxesChartDataDisplay.d.ts.map +1 -1
- package/common/editorConfig/AxesChartLegend.d.ts.map +1 -1
- package/common/gaugeUtils.d.ts +37 -0
- package/common/gaugeUtils.d.ts.map +1 -1
- package/common/gaugeUtils.js +152 -2
- package/common/gaugeUtils.js.map +4 -4
- package/common/hocs/mockdata/trellisData.d.ts +119 -0
- package/common/hocs/mockdata/trellisData.d.ts.map +1 -1
- package/common/interfaces/Overview.d.ts +1 -0
- package/common/interfaces/Overview.d.ts.map +1 -1
- package/common/interfaces/VizConfig.d.ts +2 -1
- package/common/interfaces/VizConfig.d.ts.map +1 -1
- package/common/utils/mapUtils.js.map +1 -1
- package/common/utils/trellisUtils.d.ts.map +1 -1
- package/common/utils/trellisUtils.js +4 -6
- package/common/utils/trellisUtils.js.map +2 -2
- package/common/withDashboardViz.js +74 -26
- package/common/withDashboardViz.js.map +2 -2
- package/package.json +36 -36
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/common/chartingUtils.ts", "esm-externals:lodash", "esm-externals:react", "esm-externals:styled-components", "esm-externals:@splunk/themes/variables", "esm-externals:@splunk/react-icons/Triangle", "esm-externals:@splunk/visualization-canvas"],
|
|
4
|
-
"sourcesContent": ["import { has, isArray, isUndefined } from 'lodash';\nimport React from 'react';\nimport styled from 'styled-components';\nimport variables from '@splunk/themes/variables';\nimport Triangle from '@splunk/react-icons/Triangle';\nimport {\n BottomLegendFactory,\n Legend,\n SideLegendFactory,\n LeftLegendFactory,\n TopLegendFactory,\n ScaleConfig,\n shortenNumber,\n SeriesConfig,\n EventAnnotation,\n EventAnnotationRendererProps,\n} from '@splunk/visualization-canvas';\nimport type { JsonColumnData } from './interfaces/DataSource';\n\ninterface ChartOptions {\n [key: string]: any;\n}\n\nexport const DEFAULT_LINE_WIDTH = 2;\n/**\n * Get formatted annotations - highcharts expects annotations in a specific format\n * @method getAnnotations\n * @param {Object} options\n * @param {Array} options.annotationX\n * @param {Array} options.annotationColor\n * @param {Array} options.annotationLabel\n * @returns {Array}\n */\nexport const getAnnotations = ({ annotationX, annotationColor, annotationLabel }) =>\n annotationX && annotationX.length\n ? annotationX.map((timestamp, i) => ({\n color: annotationColor && annotationColor[i],\n label: annotationLabel && annotationLabel[i],\n time: timestamp,\n }))\n : [];\n\n/**\n * Get formatted annotations for canvas - viz-canvas timeseries expects annotations in a specific format\n * @method getAnnotationsForCanvas\n * @param {Object} options\n * @param {Array} options.annotationX\n * @param {Array} options.annotationColor\n * @param {Array} options.annotationLabel\n * @returns {Array}\n */\nexport const getAnnotationsForCanvas = ({\n annotationX,\n annotationColor,\n annotationLabel,\n}): EventAnnotation[] =>\n annotationX?.length\n ? annotationX.map((timestamp, i) => ({\n key: annotationLabel?.[i],\n time: timestamp,\n color: annotationColor?.[i],\n }))\n : [];\n\n/**\n * Styled Triangle component for event annotations with default severityColorNotice\n */\nconst StyledTriangle = styled(Triangle)<{ eventColor?: string }>`\n color: ${props => props.eventColor || variables.severityColorNotice(props)};\n`;\n\n/**\n * Custom event annotation renderer using Triangle icon from @splunk/react-icons\n * @method triangleEventAnnotationRenderer\n * @param {EventAnnotationRendererProps} props\n * @returns {ReactElement}\n */\nexport const triangleEventAnnotationRenderer: React.FC<EventAnnotationRendererProps> = ({\n event,\n dimensions,\n}) => {\n const eventWithColor = event as EventAnnotation & { color?: string };\n return React.createElement(StyledTriangle, {\n width: `${dimensions.width}px`,\n height: `${dimensions.height}px`,\n viewBox: '0 0 24 24',\n variant: 'filled',\n eventColor: eventWithColor.color,\n });\n};\n\n/**\n * Truncate the result set to given limit\n * @method truncateData\n * @param {Object} dataSet - dataSources.primary.data\n * @param {Number|String} truncationLimit - options['chart.resultTruncationLimit']\n * @returns {Object}\n */\nexport const truncateData = (dataSet, truncationLimit): Record<string, any[]> => {\n if (!dataSet) {\n return null;\n }\n\n const limit = parseInt(truncationLimit, 10);\n if (!limit || limit <= 0) {\n return dataSet;\n }\n\n const truncatedData: Record<string, Array<string[] | number[]>> = {\n ...dataSet,\n };\n truncatedData.columns = truncatedData.columns.map(columnData =>\n columnData && Array.isArray(columnData) ? columnData.slice(0, limit) : columnData\n );\n return truncatedData;\n};\n\n/**\n * Helper method to update the option values into the values that SC accepts\n * @method mapToValues\n * @param {Object} options\n * @returns {Object}\n */\nexport const mapToValues = (optionValuesSCMapping: Record<string, any>) => options => {\n const convertedOptions: Record<string, any> = { ...options };\n Object.keys(optionValuesSCMapping).forEach(key => {\n if (has(options, key)) {\n const updatedValue = optionValuesSCMapping[key][options[key]];\n if (!isUndefined(updatedValue)) {\n convertedOptions[key] = updatedValue;\n }\n }\n });\n return convertedOptions;\n};\n\ninterface y2AxisOptions extends ChartOptions {\n y2Fields?: string | string[];\n}\n\n/**\n * Helper method to process options related to y2Fields\n * @method convertY2AxisOptions\n * @param {Object} originalOptions\n * @returns {Object}\n */\nexport const convertY2AxisOptions = ({\n y2Fields,\n ...originalOptions\n}: y2AxisOptions): Record<string, any> => {\n const convertedOptions: Record<string, any> = {\n ...originalOptions,\n };\n if (y2Fields) {\n convertedOptions['axisY2.enabled'] = true;\n convertedOptions['axisY2.fields'] = isArray(y2Fields)\n ? y2Fields.filter(name => name).join(',')\n : y2Fields;\n }\n return convertedOptions;\n};\n\n/**\n * Helper method to format value for overlayFields\n * @method convertOverlayFields\n * @param {Object} originalOptions\n * @returns {Object}\n */\nexport const convertOverlayFields = (originalOptions: ChartOptions): ChartOptions => {\n const convertedOptions: ChartOptions = {\n ...originalOptions,\n };\n const { overlayFields } = originalOptions;\n if (overlayFields) {\n convertedOptions.overlayFields = Array.isArray(overlayFields)\n ? overlayFields\n .filter(field => field)\n .map(field => field.trim())\n .join(',')\n : overlayFields;\n }\n return convertedOptions;\n};\n\n/**\n * checks whether data is multi series data\n * @param {array} data array\n * @return {Boolean}\n */\nexport const isMultiSeriesData = (data: string[] | string[][]): boolean =>\n Array.isArray(data) && Array.isArray(data[0]);\n/**\n * checks whether data is multi series data and returns value as array\n * @param {array} data array\n * @param {*} value to return as array\n * @return {array}\n */\nexport const toArrayForSeries = (data, value): any[] => {\n if (isMultiSeriesData(data)) {\n return Array.isArray(value) ? value : [value];\n }\n return [value];\n};\ninterface ConstructFieldsAndColumnsParams {\n x: string[];\n y: string[] | string[][];\n xField: string;\n yFields: string | string[];\n y2?: string[] | string[][];\n y2Fields?: string | string[];\n}\nexport const constructFieldsAndColumns = ({\n x = [],\n y = [],\n xField,\n yFields,\n y2,\n y2Fields,\n}: ConstructFieldsAndColumnsParams): JsonColumnData => {\n const columns = [x.map(String), ...toArrayForSeries(y, y).map(series => series.map(String))];\n const yFieldsArray = toArrayForSeries(y, yFields);\n const fields = [{ name: xField }, ...yFieldsArray.map(field => ({ name: field }))];\n // splunk-charting requires y2 to be part of columns\n // when y & y2 options are configured with different (mutually exclusive) series\n // y2 columns need to be added to columns\n if (y2Fields) {\n const y2FieldsArray = toArrayForSeries(y2, y2Fields);\n const y2AsArray = toArrayForSeries(y2, y2).map(series => series?.map(String));\n y2FieldsArray.forEach((y2Field, index) => {\n if (yFieldsArray.indexOf(y2Field) === -1 && y2AsArray[index]) {\n fields.push({\n name: y2Field,\n });\n columns.push(y2AsArray[index]);\n }\n });\n }\n return {\n columns,\n fields,\n };\n};\n\nexport function constructAdditionalTooltipFieldsMap({ fields, columns, additionalTooltipFields }) {\n const map = {};\n\n additionalTooltipFields?.forEach(fieldName => {\n const index = fields.findIndex(f => f.name === fieldName);\n if (index !== -1) {\n map[fieldName] = columns[index];\n }\n });\n\n return map;\n}\n\n/**\n * Extracts additional tooltip values from columns and fields into an array of objects.\n * Each object in the array represents the values at a specific data point index.\n * This follows the same pattern used by Timeline visualization.\n *\n * @param columns - Array of column data\n * @param fields - Array of field definitions with name property\n * @param additionalTooltipFields - Array of field names to extract\n * @returns Array of objects, where each object maps field names to values at that index\n */\n// Type alias for a single tooltip field value record\ntype TooltipFieldRecord = Record<string, string | number | null>;\n\nexport function extractAdditionalTooltipValues(\n columns: (string | number | null)[][],\n fields: { name: string }[],\n additionalTooltipFields: string[]\n): TooltipFieldRecord[] {\n if (!additionalTooltipFields?.length || !columns?.length || !fields?.length) {\n return [];\n }\n\n // Create a mapping of field names to their column indices\n const fieldIndexMap = fields.reduce<Record<string, number>>((acc, field, index) => {\n acc[field.name] = index;\n return acc;\n }, {});\n\n const numRows = columns[0]?.length || 0;\n const additionalTooltipValuesArray: TooltipFieldRecord[] = [];\n\n for (let i = 0; i < numRows; i += 1) {\n const tooltipObject: TooltipFieldRecord = {};\n\n additionalTooltipFields.forEach(fieldName => {\n if (fieldName in fieldIndexMap) {\n const columnIndex = fieldIndexMap[fieldName];\n tooltipObject[fieldName] = columns[columnIndex]?.[i] ?? null;\n } else {\n tooltipObject[fieldName] = null;\n }\n });\n\n additionalTooltipValuesArray.push(tooltipObject);\n }\n\n return additionalTooltipValuesArray;\n}\n\n// Note: we are making the assumption that attaching a range.select listener means the user wants to enable search zoom\n// This is because we don't know if the time range tokens being updated by the drilldown is used by the current viz.\n// In the future we are considering using a shared context to pass this information from UDF to Viz.\ninterface OptionsProps {\n events?: string[];\n selectedItemId?: string;\n [key: string]: unknown;\n}\ninterface EventHandler {\n type: string;\n options: OptionsProps;\n}\n\nexport const shouldEnableSearchZoom = (eventHandlers: EventHandler[] = [], xField = '') => {\n const rangeSelectEventHandler = eventHandlers.find(eventHandler =>\n eventHandler.options.events?.includes('range.select')\n );\n // Check if xField is _time. This is how splunk-charting distinguishes a time chart from categorical.\n // Note: search zoom will be buggy if the x axis uses timestamp values but is not _time\n const xAxisIsTime = xField === '_time';\n\n return !!rangeSelectEventHandler && xAxisIsTime;\n};\n\nconst canvasSupportedTimeSeriesCharts = ['splunk.line'];\nexport const isTimeSeriesCanvasRenderSupported = (vizConfigKey: string): boolean => {\n return canvasSupportedTimeSeriesCharts.indexOf(vizConfigKey) > -1;\n};\n\ntype ChartData = {\n fields: (string | { name: string })[];\n columns: (string | number)[][];\n};\n\n// Filter all internal fields and columns except for _time fild\nexport const filterChartDataFromInternalFields = (chartData: ChartData): ChartData => {\n const { fields, columns } = chartData;\n\n // Determine the indexes to keep\n const keepIndexes = fields.reduce<number[]>((acc, field, index) => {\n const fieldName = typeof field === 'object' ? field?.name : field;\n if (!fieldName?.startsWith('_') || fieldName === '_time') {\n acc.push(index);\n }\n return acc;\n }, []);\n\n // Filter fields and columns\n const filteredFields = keepIndexes.map(index => fields[index]);\n const filteredColumns = keepIndexes.map(index => columns[index]);\n\n return { fields: filteredFields, columns: filteredColumns };\n};\n\nexport const isTimeField = (field): boolean => {\n return (\n (typeof field === 'object' && field?.name === '_time') ||\n (typeof field === 'string' && field === '_time')\n );\n};\n\nexport const convert2DArrayToNumbers = arr => {\n return arr.map(subArray => subArray.map(element => parseFloat(element)));\n};\n\nexport const convertTimeStringToUnix = arr => {\n return arr.map(timeStr => parseInt((new Date(timeStr).getTime() / 1000).toFixed(0), 10));\n};\n\n/**\n * Parses an axis value that may be 'auto', null, undefined, empty string, or a numeric value.\n * Returns undefined for non-numeric values, allowing the renderer to auto-calculate the range.\n * @param {any} val - The value to parse (string, number, null, undefined)\n * @returns {number | undefined} - Parsed number or undefined\n */\nexport const parseAxisValue = (val: any): number | undefined => {\n if (val === undefined || val === null || val === 'auto' || val === '') {\n return undefined;\n }\n const num = typeof val === 'number' ? val : Number.parseFloat(val);\n return Number.isNaN(num) ? undefined : num;\n};\n\nexport const SideLegendWidth = 75;\nexport const SeriesCompareLegendWidth = 200;\n\n// Legend placement logic for canvas render, used in TimeseriesChartWrapper\nexport const getLegend = (props: { legendDisplay: string; isSeriesCompare: boolean }): Legend | false => {\n const legendPlacement = props?.legendDisplay;\n const { isSeriesCompare } = props;\n const commonLegendProps = {\n center: true,\n fontSize: 12,\n largerTiles: true,\n hideSeriesValue: !isSeriesCompare, // Show values if in seriesCompare mode\n };\n\n // \"right\" | \"left\" | \"top\" | \"bottom\" | \"off\"\n switch (legendPlacement) {\n case 'off':\n return false;\n case 'left':\n return LeftLegendFactory({\n width: isSeriesCompare ? SeriesCompareLegendWidth : SideLegendWidth,\n ...commonLegendProps,\n });\n case 'bottom':\n return BottomLegendFactory({\n wrap: true,\n ...commonLegendProps,\n });\n case 'top':\n return TopLegendFactory({\n wrap: true,\n ...commonLegendProps,\n });\n // Note: By default, use right legend\n default:\n return SideLegendFactory({\n width: isSeriesCompare ? SeriesCompareLegendWidth : SideLegendWidth,\n ...commonLegendProps,\n });\n }\n};\n\nexport const getComputedAxisTitles = (\n inputAxisTitle: string,\n fields: string[],\n axisTitleVisibility: 'show' | 'collapsed'\n): string => {\n if (axisTitleVisibility === 'collapsed') {\n return '';\n }\n let fieldTitle = fields.length > 1 ? '' : fields[0]; // If more than one series (multi-series) default empty title\n if (!fieldTitle) {\n fieldTitle = '';\n }\n return inputAxisTitle?.length ? inputAxisTitle.trim() : fieldTitle;\n};\n\n/**\n * Truncates Y-axis title based on available container height and font metrics\n * @param axisTitle - The title text to potentially truncate\n * @param containerSpacing - Available height/ width in pixels depending on axis orientation\n * @param fontSize - Font size in pixels (default: 12)\n * @returns Truncated title with ellipsis if needed\n */\nexport const ellipsisAxisTitle = (axisTitle: string, containerSpacing: number, fontSize = 12): string => {\n if (!axisTitle) {\n return '';\n }\n if (Number.isNaN(containerSpacing) || containerSpacing <= 0) {\n return axisTitle;\n }\n // Calculate available height for text (leave 40% margin)\n const availableHeight = containerSpacing * 0.6;\n\n // Use a generic character width ratio that works across most fonts\n // 0.55 is a reasonable average for most fonts\n const avgCharWidth = fontSize * 0.55;\n\n // Calculate maximum characters that fit in available height\n const maxChars = Math.floor(availableHeight / avgCharWidth);\n\n // If title fits, return as-is\n if (axisTitle.length <= maxChars) {\n return axisTitle;\n }\n\n // Need to truncate - use middle ellipsis for better context\n if (maxChars <= 3) {\n return '...'; // Not enough space for meaningful text\n }\n\n // Reserve 3 characters for ellipsis\n const availableChars = maxChars - 3;\n const halfChars = Math.floor(availableChars / 2);\n\n // Create truncated title with middle ellipsis\n const start = axisTitle.slice(0, halfChars);\n const end = axisTitle.slice(-halfChars);\n\n return `${start}...${end}`;\n};\n\nexport type FieldObject = {\n name: string;\n};\n\nexport const getFieldName = (field: string | FieldObject): string => {\n const fieldName = typeof field === 'object' ? (field as unknown as FieldObject)?.name : field;\n return fieldName;\n};\n\nexport const getFieldNames = (fields: (string | FieldObject)[]): string[] => {\n return fields.map(field => getFieldName(field));\n};\n\n/**\n * Type alias for axis label visibility options\n */\nexport type AxisLabelVisibility = 'hide' | 'show' | 'auto';\n\n/**\n * Returns X scale config for viz-canvas charts\n * @param label\n * @param xAxisLabelVisibility\n * @returns\n */\nexport const getXScaleConfig = (\n label: string,\n xAxisLabelVisibility?: AxisLabelVisibility,\n xAxisLabelRotation?: -90 | -45 | 0 | 45 | 90\n): ScaleConfig => {\n const xConfig: ScaleConfig = { x: {} };\n xConfig.x.label = label;\n // Set hideLabels to true when xAxisLabelVisibility is \"hide\"\n if (xAxisLabelVisibility === 'hide') {\n xConfig.x.hideLabels = true;\n }\n // Set labelRotation if provided\n if (xAxisLabelRotation !== undefined) {\n xConfig.x.labelRotation = xAxisLabelRotation;\n }\n return xConfig;\n};\n\n/**\n * Returns Y scale config for viz-canvas charts\n * @param label\n * @param yAxisAbbreviation\n * @param yAxisScale\n * @param yAxisLabelVisibility\n * @param yAxisMin\n * @param yAxisMax\n * @returns\n */\nexport const getYScaleConfig = (\n label: string,\n yAxisAbbreviation: string,\n yAxisScale?: 'linear' | 'log',\n yAxisLabelVisibility?: AxisLabelVisibility,\n yAxisMin?: number,\n yAxisMax?: number\n): ScaleConfig => {\n const scaleType = yAxisScale ?? 'linear';\n const yConfig: ScaleConfig = { y: {} };\n yConfig.y.label = label;\n yConfig.y.type = scaleType;\n if (yAxisAbbreviation !== 'none') {\n yConfig.y.tickFmt = (v): string => shortenNumber(v, 1);\n }\n if (yAxisAbbreviation === 'none') {\n yConfig.y.width = 55;\n } else {\n yConfig.y.width = label && label.length > 0 ? 30 : 10;\n }\n if (yAxisLabelVisibility === 'hide') {\n yConfig.y.hideLabels = true;\n }\n if (yAxisMin !== undefined || yAxisMax !== undefined) {\n yConfig.y.range = (u, dataMin, dataMax) => {\n const min = yAxisMin ?? dataMin;\n const max = yAxisMax ?? dataMax;\n return [min, max];\n };\n }\n return yConfig;\n};\n/**\n * Returns Y2 scale config for viz-canvas charts\n * @param label\n * @param axisAbbreviation\n * @param axisScale\n * @param roundAxisLabelsToInteger\n * @param y2AxisLabelVisibility\n * @param y2AxisMin\n * @param y2AxisMax\n * @returns\n */\nexport const getY2ScaleConfig = (\n label: string,\n axisAbbreviation: string,\n axisScale?: 'linear' | 'log',\n roundAxisLabelsToInteger?: boolean,\n y2AxisLabelVisibility?: AxisLabelVisibility,\n y2AxisMin?: number,\n y2AxisMax?: number\n): ScaleConfig => {\n const y2Config: ScaleConfig = { y2: {} };\n const scaleType = axisScale ?? 'linear';\n y2Config.y2.label = label;\n y2Config.y2.side = 'right';\n // Note: showGrid is intentionally not set here so that the top-level\n // showY2MajorGridLines prop can control it (defaults to false)\n y2Config.y2.type = scaleType;\n if (axisAbbreviation !== 'none') {\n y2Config.y2.tickFmt = (v): string => shortenNumber(v, 1, roundAxisLabelsToInteger);\n } else if (roundAxisLabelsToInteger) {\n y2Config.y2.tickFmt = (v): string =>\n roundAxisLabelsToInteger ? Math.round(v).toString() : v.toString();\n }\n if (y2AxisLabelVisibility === 'hide') {\n y2Config.y2.hideLabels = true;\n }\n if (y2AxisMin !== undefined || y2AxisMax !== undefined) {\n y2Config.y2.range = (u, dataMin, dataMax) => {\n const min = y2AxisMin ?? dataMin;\n const max = y2AxisMax ?? dataMax;\n return [min, max];\n };\n }\n return y2Config;\n};\n\n/**\n * Add series overrides for viz-canvas charts (for eg:- line width)\n */\nexport const getSeriesOverrides = (\n yfields: string[],\n y2fields?: string[],\n lineWidth?: number,\n overlayFields?: string[],\n y2Enabled?: boolean,\n nullValueMode?: 'gaps' | 'connect' | 'zero',\n markerDisplay?: 'off' | 'filled' | 'outlined',\n lineDashStyle?: string,\n lineDashStylesByField?: Record<string, string>\n): SeriesConfig => {\n const seriesConfig: SeriesConfig = {};\n\n // Determine spanGaps based on nullValueMode\n let spanGaps: boolean | undefined;\n let replaceNullsWithZero: boolean | undefined;\n if (nullValueMode === 'gaps') {\n spanGaps = false;\n } else if (nullValueMode === 'connect' || nullValueMode === 'zero') {\n spanGaps = true;\n if (nullValueMode === 'zero') {\n replaceNullsWithZero = true;\n }\n }\n\n yfields.forEach(field => {\n seriesConfig[field] = {\n overrides: { width: lineWidth ?? DEFAULT_LINE_WIDTH },\n };\n\n // Add spanGaps if nullValueMode is provided\n if (spanGaps !== undefined) {\n seriesConfig[field].overrides.spanGaps = spanGaps;\n }\n\n // If y2Enabled is true, determine which fields go to y2 scale\n if (y2Enabled) {\n const shouldAssignToY2 =\n // If y2Fields are present, assign all y2Fields to y2 scale\n (y2fields?.length > 0 && y2fields.includes(field)) ||\n // Else, assign all overlayFields to y2 scale\n ((!y2fields || y2fields.length === 0) && overlayFields?.includes(field));\n\n if (shouldAssignToY2) {\n seriesConfig[field].overrides.scale = 'y2';\n }\n }\n\n // If field is in overlayFields, set type to 'line'\n if (overlayFields?.includes(field)) {\n seriesConfig[field].type = 'line';\n }\n\n // Add markerDisplay if provided\n if (markerDisplay !== undefined) {\n seriesConfig[field].markerDisplay = markerDisplay;\n }\n\n // Add lineDashStyle - check per-field first, then fall back to global\n const fieldDashStyle = lineDashStylesByField?.[field] || lineDashStyle;\n if (fieldDashStyle) {\n seriesConfig[field].lineDashStyle = fieldDashStyle as any;\n }\n\n // Add replaceNullsWithZero if nullValueMode is 'zero'\n if (replaceNullsWithZero !== undefined) {\n (\n seriesConfig[field] as SeriesConfig[string] & { replaceNullsWithZero?: boolean }\n ).replaceNullsWithZero = replaceNullsWithZero;\n }\n });\n\n return seriesConfig;\n};\n\n/**\n * Finds the start and end indices in time series data for a given range.\n * @param xData - Array of time values (can be ISO strings or epoch timestamps)\n * @param startValue - Start value of the range (epoch timestamp)\n * @param endValue - End value of the range (epoch timestamp)\n * @returns Object with startXIndex (first index where time >= startValue) and endXIndex (last index where time <= endValue)\n */\nexport const findRangeIndices = (\n xData: (string | number)[],\n startValue: number,\n endValue: number\n): { startXIndex: number; endXIndex: number } => {\n let startXIndex = -1;\n let endXIndex = -1;\n\n // Convert xData to epoch timestamps if they are ISO strings\n const xDataEpoch = xData.map(val => {\n if (typeof val === 'string') {\n return new Date(val).getTime() / 1000; // Convert to epoch seconds\n }\n return val;\n });\n\n // Find the closest time value >= startValue\n for (let i = 0; i < xDataEpoch.length; i += 1) {\n if (xDataEpoch[i] >= startValue) {\n startXIndex = i;\n break;\n }\n }\n\n // If no value >= startValue found, use the last index (all values are less)\n if (startXIndex === -1 && xDataEpoch.length > 0) {\n startXIndex = xDataEpoch.length - 1;\n }\n\n // Find the closest time value <= endValue\n for (let i = xDataEpoch.length - 1; i >= 0; i -= 1) {\n if (xDataEpoch[i] <= endValue) {\n endXIndex = i;\n break;\n }\n }\n\n // If no value <= endValue found, use the first index (all values are greater)\n if (endXIndex === -1 && xDataEpoch.length > 0) {\n endXIndex = 0;\n }\n\n return { startXIndex, endXIndex };\n};\n", "\nimport * as defaultImport from \"lodash\";\nexport * from \"lodash\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"react\";\nexport * from \"react\";\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/themes/variables\";\nexport * from \"@splunk/themes/variables\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/Triangle\";\nexport * from \"@splunk/react-icons/Triangle\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-canvas\";\nexport * from \"@splunk/visualization-canvas\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { has, isArray, isUndefined } from 'lodash';\nimport React from 'react';\nimport styled from 'styled-components';\nimport variables from '@splunk/themes/variables';\nimport Triangle from '@splunk/react-icons/Triangle';\nimport {\n BottomLegendFactory,\n Legend,\n SideLegendFactory,\n LeftLegendFactory,\n TopLegendFactory,\n ScaleConfig,\n shortenNumber,\n SeriesConfig,\n EventAnnotation,\n EventAnnotationRendererProps,\n} from '@splunk/visualization-canvas';\nimport type { LegendTruncation } from '@splunk/visualization-canvas';\nimport type { JsonColumnData } from './interfaces/DataSource';\n\ninterface ChartOptions {\n [key: string]: any;\n}\n\nexport const DEFAULT_LINE_WIDTH = 2;\n/**\n * Get formatted annotations - highcharts expects annotations in a specific format\n * @method getAnnotations\n * @param {Object} options\n * @param {Array} options.annotationX\n * @param {Array} options.annotationColor\n * @param {Array} options.annotationLabel\n * @returns {Array}\n */\nexport const getAnnotations = ({ annotationX, annotationColor, annotationLabel }) =>\n annotationX && annotationX.length\n ? annotationX.map((timestamp, i) => ({\n color: annotationColor && annotationColor[i],\n label: annotationLabel && annotationLabel[i],\n time: timestamp,\n }))\n : [];\n\n/**\n * Get formatted annotations for canvas - viz-canvas timeseries expects annotations in a specific format\n * @method getAnnotationsForCanvas\n * @param {Object} options\n * @param {Array} options.annotationX\n * @param {Array} options.annotationColor\n * @param {Array} options.annotationLabel\n * @returns {Array}\n */\nexport const getAnnotationsForCanvas = ({\n annotationX,\n annotationColor,\n annotationLabel,\n}): EventAnnotation[] =>\n annotationX?.length\n ? annotationX.map((timestamp, i) => ({\n key: annotationLabel?.[i],\n time: timestamp,\n color: annotationColor?.[i],\n }))\n : [];\n\n/**\n * Styled Triangle component for event annotations with default severityColorNotice\n */\nconst StyledTriangle = styled(Triangle)<{ eventColor?: string }>`\n color: ${props => props.eventColor || variables.severityColorNotice(props)};\n`;\n\n/**\n * Custom event annotation renderer using Triangle icon from @splunk/react-icons\n * @method triangleEventAnnotationRenderer\n * @param {EventAnnotationRendererProps} props\n * @returns {ReactElement}\n */\nexport const triangleEventAnnotationRenderer: React.FC<EventAnnotationRendererProps> = ({\n event,\n dimensions,\n}) => {\n const eventWithColor = event as EventAnnotation & { color?: string };\n return React.createElement(StyledTriangle, {\n width: `${dimensions.width}px`,\n height: `${dimensions.height}px`,\n viewBox: '0 0 24 24',\n variant: 'filled',\n eventColor: eventWithColor.color,\n });\n};\n\n/**\n * Truncate the result set to given limit\n * @method truncateData\n * @param {Object} dataSet - dataSources.primary.data\n * @param {Number|String} truncationLimit - options['chart.resultTruncationLimit']\n * @returns {Object}\n */\nexport const truncateData = (dataSet, truncationLimit): Record<string, any[]> => {\n if (!dataSet) {\n return null;\n }\n\n const limit = parseInt(truncationLimit, 10);\n if (!limit || limit <= 0) {\n return dataSet;\n }\n\n const truncatedData: Record<string, Array<string[] | number[]>> = {\n ...dataSet,\n };\n truncatedData.columns = truncatedData.columns.map(columnData =>\n columnData && Array.isArray(columnData) ? columnData.slice(0, limit) : columnData\n );\n return truncatedData;\n};\n\n/**\n * Helper method to update the option values into the values that SC accepts\n * @method mapToValues\n * @param {Object} options\n * @returns {Object}\n */\nexport const mapToValues = (optionValuesSCMapping: Record<string, any>) => options => {\n const convertedOptions: Record<string, any> = { ...options };\n Object.keys(optionValuesSCMapping).forEach(key => {\n if (has(options, key)) {\n const updatedValue = optionValuesSCMapping[key][options[key]];\n if (!isUndefined(updatedValue)) {\n convertedOptions[key] = updatedValue;\n }\n }\n });\n return convertedOptions;\n};\n\ninterface y2AxisOptions extends ChartOptions {\n y2Fields?: string | string[];\n}\n\n/**\n * Helper method to process options related to y2Fields\n * @method convertY2AxisOptions\n * @param {Object} originalOptions\n * @returns {Object}\n */\nexport const convertY2AxisOptions = ({\n y2Fields,\n ...originalOptions\n}: y2AxisOptions): Record<string, any> => {\n const convertedOptions: Record<string, any> = {\n ...originalOptions,\n };\n if (y2Fields) {\n convertedOptions['axisY2.enabled'] = true;\n convertedOptions['axisY2.fields'] = isArray(y2Fields)\n ? y2Fields.filter(name => name).join(',')\n : y2Fields;\n }\n return convertedOptions;\n};\n\n/**\n * Helper method to format value for overlayFields\n * @method convertOverlayFields\n * @param {Object} originalOptions\n * @returns {Object}\n */\nexport const convertOverlayFields = (originalOptions: ChartOptions): ChartOptions => {\n const convertedOptions: ChartOptions = {\n ...originalOptions,\n };\n const { overlayFields } = originalOptions;\n if (overlayFields) {\n convertedOptions.overlayFields = Array.isArray(overlayFields)\n ? overlayFields\n .filter(field => field)\n .map(field => field.trim())\n .join(',')\n : overlayFields;\n }\n return convertedOptions;\n};\n\n/**\n * checks whether data is multi series data\n * @param {array} data array\n * @return {Boolean}\n */\nexport const isMultiSeriesData = (data: string[] | string[][]): boolean =>\n Array.isArray(data) && Array.isArray(data[0]);\n/**\n * checks whether data is multi series data and returns value as array\n * @param {array} data array\n * @param {*} value to return as array\n * @return {array}\n */\nexport const toArrayForSeries = (data, value): any[] => {\n if (isMultiSeriesData(data)) {\n return Array.isArray(value) ? value : [value];\n }\n return [value];\n};\ninterface ConstructFieldsAndColumnsParams {\n x: string[];\n y: string[] | string[][];\n xField: string;\n yFields: string | string[];\n y2?: string[] | string[][];\n y2Fields?: string | string[];\n}\nexport const constructFieldsAndColumns = ({\n x = [],\n y = [],\n xField,\n yFields,\n y2,\n y2Fields,\n}: ConstructFieldsAndColumnsParams): JsonColumnData => {\n const columns = [x.map(String), ...toArrayForSeries(y, y).map(series => series.map(String))];\n const yFieldsArray = toArrayForSeries(y, yFields);\n const fields = [{ name: xField }, ...yFieldsArray.map(field => ({ name: field }))];\n // splunk-charting requires y2 to be part of columns\n // when y & y2 options are configured with different (mutually exclusive) series\n // y2 columns need to be added to columns\n if (y2Fields) {\n const y2FieldsArray = toArrayForSeries(y2, y2Fields);\n const y2AsArray = toArrayForSeries(y2, y2).map(series => series?.map(String));\n y2FieldsArray.forEach((y2Field, index) => {\n if (yFieldsArray.indexOf(y2Field) === -1 && y2AsArray[index]) {\n fields.push({\n name: y2Field,\n });\n columns.push(y2AsArray[index]);\n }\n });\n }\n return {\n columns,\n fields,\n };\n};\n\nexport function constructAdditionalTooltipFieldsMap({ fields, columns, additionalTooltipFields }) {\n const map = {};\n\n additionalTooltipFields?.forEach(fieldName => {\n const index = fields.findIndex(f => f.name === fieldName);\n if (index !== -1) {\n map[fieldName] = columns[index];\n }\n });\n\n return map;\n}\n\n/**\n * Extracts additional tooltip values from columns and fields into an array of objects.\n * Each object in the array represents the values at a specific data point index.\n * This follows the same pattern used by Timeline visualization.\n *\n * @param columns - Array of column data\n * @param fields - Array of field definitions with name property\n * @param additionalTooltipFields - Array of field names to extract\n * @returns Array of objects, where each object maps field names to values at that index\n */\n// Type alias for a single tooltip field value record\ntype TooltipFieldRecord = Record<string, string | number | null>;\n\nexport function extractAdditionalTooltipValues(\n columns: (string | number | null)[][],\n fields: { name: string }[],\n additionalTooltipFields: string[]\n): TooltipFieldRecord[] {\n if (!additionalTooltipFields?.length || !columns?.length || !fields?.length) {\n return [];\n }\n\n // Create a mapping of field names to their column indices\n const fieldIndexMap = fields.reduce<Record<string, number>>((acc, field, index) => {\n acc[field.name] = index;\n return acc;\n }, {});\n\n const numRows = columns[0]?.length || 0;\n const additionalTooltipValuesArray: TooltipFieldRecord[] = [];\n\n for (let i = 0; i < numRows; i += 1) {\n const tooltipObject: TooltipFieldRecord = {};\n\n additionalTooltipFields.forEach(fieldName => {\n if (fieldName in fieldIndexMap) {\n const columnIndex = fieldIndexMap[fieldName];\n tooltipObject[fieldName] = columns[columnIndex]?.[i] ?? null;\n } else {\n tooltipObject[fieldName] = null;\n }\n });\n\n additionalTooltipValuesArray.push(tooltipObject);\n }\n\n return additionalTooltipValuesArray;\n}\n\n// Note: we are making the assumption that attaching a range.select listener means the user wants to enable search zoom\n// This is because we don't know if the time range tokens being updated by the drilldown is used by the current viz.\n// In the future we are considering using a shared context to pass this information from UDF to Viz.\ninterface OptionsProps {\n events?: string[];\n selectedItemId?: string;\n [key: string]: unknown;\n}\ninterface EventHandler {\n type: string;\n options: OptionsProps;\n}\n\nexport const shouldEnableSearchZoom = (eventHandlers: EventHandler[] = [], xField = '') => {\n const rangeSelectEventHandler = eventHandlers.find(eventHandler =>\n eventHandler.options.events?.includes('range.select')\n );\n // Check if xField is _time. This is how splunk-charting distinguishes a time chart from categorical.\n // Note: search zoom will be buggy if the x axis uses timestamp values but is not _time\n const xAxisIsTime = xField === '_time';\n\n return !!rangeSelectEventHandler && xAxisIsTime;\n};\n\nconst canvasSupportedTimeSeriesCharts = ['splunk.line'];\nexport const isTimeSeriesCanvasRenderSupported = (vizConfigKey: string): boolean => {\n return canvasSupportedTimeSeriesCharts.indexOf(vizConfigKey) > -1;\n};\n\ntype ChartData = {\n fields: (string | { name: string })[];\n columns: (string | number)[][];\n};\n\n// Filter all internal fields and columns except for _time fild\nexport const filterChartDataFromInternalFields = (chartData: ChartData): ChartData => {\n const { fields, columns } = chartData;\n\n // Determine the indexes to keep\n const keepIndexes = fields.reduce<number[]>((acc, field, index) => {\n const fieldName = typeof field === 'object' ? field?.name : field;\n if (!fieldName?.startsWith('_') || fieldName === '_time') {\n acc.push(index);\n }\n return acc;\n }, []);\n\n // Filter fields and columns\n const filteredFields = keepIndexes.map(index => fields[index]);\n const filteredColumns = keepIndexes.map(index => columns[index]);\n\n return { fields: filteredFields, columns: filteredColumns };\n};\n\nexport const isTimeField = (field): boolean => {\n return (\n (typeof field === 'object' && field?.name === '_time') ||\n (typeof field === 'string' && field === '_time')\n );\n};\n\nexport const convert2DArrayToNumbers = arr => {\n return arr.map(subArray => subArray.map(element => parseFloat(element)));\n};\n\nexport const convertTimeStringToUnix = arr => {\n return arr.map(timeStr => parseInt((new Date(timeStr).getTime() / 1000).toFixed(0), 10));\n};\n\n/**\n * Parses an axis value that may be 'auto', null, undefined, empty string, or a numeric value.\n * Returns undefined for non-numeric values, allowing the renderer to auto-calculate the range.\n * @param {any} val - The value to parse (string, number, null, undefined)\n * @returns {number | undefined} - Parsed number or undefined\n */\nexport const parseAxisValue = (val: any): number | undefined => {\n if (val === undefined || val === null || val === 'auto' || val === '') {\n return undefined;\n }\n const num = typeof val === 'number' ? val : Number.parseFloat(val);\n return Number.isNaN(num) ? undefined : num;\n};\n\n/**\n * Parses X-axis line visibility option from string to boolean or undefined.\n * @param {string | undefined} visibility - The visibility option ('hide', 'show', or other)\n * @returns {boolean | undefined} - false for 'hide', true for 'show', undefined otherwise\n */\nexport const parseXAxisLineVisibility = (visibility?: string): boolean | undefined => {\n if (visibility === 'hide') return false;\n if (visibility === 'show') return true;\n return undefined;\n};\n\n// Legend placement logic for canvas render, used in TimeseriesChartWrapper\nexport const getLegend = (props: {\n legendDisplay: string;\n isSeriesCompare: boolean;\n legendTruncation?: LegendTruncation;\n}): Legend | false => {\n const legendPlacement = props?.legendDisplay;\n const { isSeriesCompare, legendTruncation } = props;\n const commonLegendProps = {\n center: true,\n fontSize: 12,\n largerTiles: true,\n hideSeriesValue: !isSeriesCompare, // Show values if in seriesCompare mode\n legendTruncation,\n };\n\n // \"right\" | \"left\" | \"top\" | \"bottom\" | \"off\"\n switch (legendPlacement) {\n case 'off':\n return false;\n case 'left':\n return LeftLegendFactory({\n ...commonLegendProps,\n });\n case 'bottom':\n return BottomLegendFactory({\n wrap: true,\n ...commonLegendProps,\n });\n case 'top':\n return TopLegendFactory({\n wrap: true,\n ...commonLegendProps,\n });\n // Note: By default, use right legend\n default:\n return SideLegendFactory({\n ...commonLegendProps,\n });\n }\n};\n\nexport const getComputedAxisTitles = (\n inputAxisTitle: string,\n fields: string[],\n axisTitleVisibility: 'show' | 'collapsed'\n): string => {\n if (axisTitleVisibility === 'collapsed') {\n return '';\n }\n let fieldTitle = fields.length > 1 ? '' : fields[0]; // If more than one series (multi-series) default empty title\n if (!fieldTitle) {\n fieldTitle = '';\n }\n return inputAxisTitle?.length ? inputAxisTitle.trim() : fieldTitle;\n};\n\n/**\n * Truncates Y-axis title based on available container height and font metrics\n * @param axisTitle - The title text to potentially truncate\n * @param containerSpacing - Available height/ width in pixels depending on axis orientation\n * @param fontSize - Font size in pixels (default: 12)\n * @returns Truncated title with ellipsis if needed\n */\nexport const ellipsisAxisTitle = (axisTitle: string, containerSpacing: number, fontSize = 12): string => {\n if (!axisTitle) {\n return '';\n }\n if (Number.isNaN(containerSpacing) || containerSpacing <= 0) {\n return axisTitle;\n }\n // Calculate available height for text (leave 40% margin)\n const availableHeight = containerSpacing * 0.6;\n\n // Use a generic character width ratio that works across most fonts\n // 0.55 is a reasonable average for most fonts\n const avgCharWidth = fontSize * 0.55;\n\n // Calculate maximum characters that fit in available height\n const maxChars = Math.floor(availableHeight / avgCharWidth);\n\n // If title fits, return as-is\n if (axisTitle.length <= maxChars) {\n return axisTitle;\n }\n\n // Need to truncate - use middle ellipsis for better context\n if (maxChars <= 3) {\n return '...'; // Not enough space for meaningful text\n }\n\n // Reserve 3 characters for ellipsis\n const availableChars = maxChars - 3;\n const halfChars = Math.floor(availableChars / 2);\n\n // Create truncated title with middle ellipsis\n const start = axisTitle.slice(0, halfChars);\n const end = axisTitle.slice(-halfChars);\n\n return `${start}...${end}`;\n};\n\nexport type FieldObject = {\n name: string;\n};\n\nexport const getFieldName = (field: string | FieldObject): string => {\n const fieldName = typeof field === 'object' ? (field as unknown as FieldObject)?.name : field;\n return fieldName;\n};\n\nexport const getFieldNames = (fields: (string | FieldObject)[]): string[] => {\n return fields.map(field => getFieldName(field));\n};\n\n/**\n * Type alias for axis label visibility options\n */\nexport type AxisLabelVisibility = 'hide' | 'show' | 'auto';\n\n/**\n * Returns X scale config for viz-canvas charts\n * @param label\n * @param xAxisLabelVisibility\n * @returns\n */\nexport const getXScaleConfig = (\n label: string,\n xAxisLabelVisibility?: AxisLabelVisibility,\n xAxisLabelRotation?: -90 | -45 | 0 | 45 | 90\n): ScaleConfig => {\n const xConfig: ScaleConfig = { x: {} };\n xConfig.x.label = label;\n // Set hideLabels to true when xAxisLabelVisibility is \"hide\"\n if (xAxisLabelVisibility === 'hide') {\n xConfig.x.hideLabels = true;\n }\n // Set labelRotation if provided\n if (xAxisLabelRotation !== undefined) {\n xConfig.x.labelRotation = xAxisLabelRotation;\n }\n return xConfig;\n};\n\n/**\n * Returns Y scale config for viz-canvas charts\n * @param label\n * @param yAxisAbbreviation\n * @param yAxisScale\n * @param yAxisLabelVisibility\n * @param yAxisMin\n * @param yAxisMax\n * @returns\n */\nexport const getYScaleConfig = (\n label: string,\n yAxisAbbreviation: string,\n yAxisScale?: 'linear' | 'log',\n yAxisLabelVisibility?: AxisLabelVisibility,\n yAxisMin?: number,\n yAxisMax?: number\n): ScaleConfig => {\n const scaleType = yAxisScale ?? 'linear';\n const yConfig: ScaleConfig = { y: {} };\n yConfig.y.label = label;\n yConfig.y.type = scaleType;\n if (yAxisAbbreviation !== 'none') {\n yConfig.y.tickFmt = (v): string => shortenNumber(v, 1);\n }\n // Only set fixed width when abbreviation is ON\n // When abbreviation is OFF, width remains undefined to allow dynamic sizing in uplot-utils\n // based on actual data label lengths\n if (yAxisAbbreviation !== 'none') {\n yConfig.y.width = label && label.length > 0 ? 30 : 10;\n }\n if (yAxisLabelVisibility === 'hide') {\n yConfig.y.hideLabels = true;\n }\n if (yAxisMin !== undefined || yAxisMax !== undefined) {\n yConfig.y.range = (u, dataMin, dataMax) => {\n const min = yAxisMin ?? dataMin;\n const max = yAxisMax ?? dataMax;\n return [min, max];\n };\n }\n return yConfig;\n};\n/**\n * Returns Y2 scale config for viz-canvas charts\n * @param label\n * @param axisAbbreviation\n * @param axisScale\n * @param roundAxisLabelsToInteger\n * @param y2AxisLabelVisibility\n * @param y2AxisMin\n * @param y2AxisMax\n * @returns\n */\nexport const getY2ScaleConfig = (\n label: string,\n axisAbbreviation: string,\n axisScale?: 'linear' | 'log',\n roundAxisLabelsToInteger?: boolean,\n y2AxisLabelVisibility?: AxisLabelVisibility,\n y2AxisMin?: number,\n y2AxisMax?: number\n): ScaleConfig => {\n const y2Config: ScaleConfig = { y2: {} };\n const scaleType = axisScale ?? 'linear';\n y2Config.y2.label = label;\n y2Config.y2.side = 'right';\n // Note: showGrid is intentionally not set here so that the top-level\n // showY2MajorGridLines prop can control it (defaults to false)\n y2Config.y2.type = scaleType;\n if (axisAbbreviation !== 'none') {\n y2Config.y2.tickFmt = (v): string => shortenNumber(v, 1, roundAxisLabelsToInteger);\n // Set width for abbreviated Y2 axis\n // Y2 needs more width (50px) than Y-axis (30px) because of rotated title positioning\n // Width will be used to detect abbreviation setting in padding calculations\n y2Config.y2.width = label && label.length > 0 ? 50 : 10;\n } else if (roundAxisLabelsToInteger) {\n y2Config.y2.tickFmt = (v): string =>\n roundAxisLabelsToInteger ? Math.round(v).toString() : v.toString();\n }\n if (y2AxisLabelVisibility === 'hide') {\n y2Config.y2.hideLabels = true;\n }\n if (y2AxisMin !== undefined || y2AxisMax !== undefined) {\n y2Config.y2.range = (u, dataMin, dataMax) => {\n const min = y2AxisMin ?? dataMin;\n const max = y2AxisMax ?? dataMax;\n return [min, max];\n };\n }\n return y2Config;\n};\n\n/**\n * Add series overrides for viz-canvas charts (for eg:- line width)\n */\nexport const getSeriesOverrides = (\n yfields: string[],\n y2fields?: string[],\n lineWidth?: number,\n overlayFields?: string[],\n y2Enabled?: boolean,\n nullValueMode?: 'gaps' | 'connect' | 'zero',\n markerDisplay?: 'off' | 'filled' | 'outlined',\n lineDashStyle?: string,\n lineDashStylesByField?: Record<string, string>,\n stepPosition?: 'off' | 'before' | 'after',\n stepPositionsByField?: Record<string, 'off' | 'before' | 'after'>\n): SeriesConfig => {\n const seriesConfig: SeriesConfig = {};\n\n // Determine spanGaps based on nullValueMode\n let spanGaps: boolean | undefined;\n let replaceNullsWithZero: boolean | undefined;\n if (nullValueMode === 'gaps') {\n spanGaps = false;\n } else if (nullValueMode === 'connect' || nullValueMode === 'zero') {\n spanGaps = true;\n if (nullValueMode === 'zero') {\n replaceNullsWithZero = true;\n }\n }\n\n yfields.forEach(field => {\n seriesConfig[field] = {\n overrides: { width: lineWidth ?? DEFAULT_LINE_WIDTH },\n };\n\n // Add spanGaps if nullValueMode is provided\n if (spanGaps !== undefined) {\n seriesConfig[field].overrides.spanGaps = spanGaps;\n }\n\n // If y2Enabled is true, determine which fields go to y2 scale\n if (y2Enabled) {\n const shouldAssignToY2 =\n // If y2Fields are present, assign all y2Fields to y2 scale\n (y2fields?.length > 0 && y2fields.includes(field)) ||\n // Else, assign all overlayFields to y2 scale\n ((!y2fields || y2fields.length === 0) && overlayFields?.includes(field));\n\n if (shouldAssignToY2) {\n seriesConfig[field].overrides.scale = 'y2';\n } else {\n // Explicitly set scale to 'y' for fields not assigned to y2\n seriesConfig[field].overrides.scale = 'y';\n }\n }\n\n // If field is in overlayFields, set type to 'line'\n if (overlayFields?.includes(field)) {\n seriesConfig[field].type = 'line';\n }\n\n // Add markerDisplay if provided\n if (markerDisplay !== undefined) {\n seriesConfig[field].markerDisplay = markerDisplay;\n }\n\n // Add lineDashStyle - check per-field first, then fall back to global\n const fieldDashStyle = lineDashStylesByField?.[field] || lineDashStyle;\n if (fieldDashStyle) {\n seriesConfig[field].lineDashStyle = fieldDashStyle as any;\n }\n\n // Add stepPosition - check per-field first, then fall back to global.\n // Explicit \"off\" disables stepping for the field.\n const hasFieldStepPosition = Object.hasOwn(stepPositionsByField || {}, field);\n const fieldStepPosition = hasFieldStepPosition ? stepPositionsByField?.[field] : stepPosition;\n if (fieldStepPosition && fieldStepPosition !== 'off') {\n (seriesConfig[field] as SeriesConfig[string] & { stepPosition?: string }).stepPosition =\n fieldStepPosition;\n }\n\n // Add replaceNullsWithZero if nullValueMode is 'zero'\n if (replaceNullsWithZero !== undefined) {\n (\n seriesConfig[field] as SeriesConfig[string] & { replaceNullsWithZero?: boolean }\n ).replaceNullsWithZero = replaceNullsWithZero;\n }\n });\n\n return seriesConfig;\n};\n\n/**\n * Finds the start and end indices in time series data for a given range.\n * @param xData - Array of time values (can be ISO strings or epoch timestamps)\n * @param startValue - Start value of the range (epoch timestamp)\n * @param endValue - End value of the range (epoch timestamp)\n * @returns Object with startXIndex (first index where time >= startValue) and endXIndex (last index where time <= endValue)\n */\nexport const findRangeIndices = (\n xData: (string | number)[],\n startValue: number,\n endValue: number\n): { startXIndex: number; endXIndex: number } => {\n let startXIndex = -1;\n let endXIndex = -1;\n\n // Convert xData to epoch timestamps if they are ISO strings\n const xDataEpoch = xData.map(val => {\n if (typeof val === 'string') {\n return new Date(val).getTime() / 1000; // Convert to epoch seconds\n }\n return val;\n });\n\n // Find the closest time value >= startValue\n for (let i = 0; i < xDataEpoch.length; i += 1) {\n if (xDataEpoch[i] >= startValue) {\n startXIndex = i;\n break;\n }\n }\n\n // If no value >= startValue found, use the last index (all values are less)\n if (startXIndex === -1 && xDataEpoch.length > 0) {\n startXIndex = xDataEpoch.length - 1;\n }\n\n // Find the closest time value <= endValue\n for (let i = xDataEpoch.length - 1; i >= 0; i -= 1) {\n if (xDataEpoch[i] <= endValue) {\n endXIndex = i;\n break;\n }\n }\n\n // If no value <= endValue found, use the first index (all values are greater)\n if (endXIndex === -1 && xDataEpoch.length > 0) {\n endXIndex = 0;\n }\n\n return { startXIndex, endXIndex };\n};\n", "\nimport * as defaultImport from \"lodash\";\nexport * from \"lodash\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"react\";\nexport * from \"react\";\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/themes/variables\";\nexport * from \"@splunk/themes/variables\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/react-icons/Triangle\";\nexport * from \"@splunk/react-icons/Triangle\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "\nimport * as defaultImport from \"@splunk/visualization-canvas\";\nexport * from \"@splunk/visualization-canvas\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "_a"]
|
|
7
7
|
}
|
|
@@ -6,13 +6,13 @@ export declare const isTrellisEnabled: ({ options, featureFlags }: {
|
|
|
6
6
|
options: any;
|
|
7
7
|
featureFlags: any;
|
|
8
8
|
}) => boolean;
|
|
9
|
+
export declare const isAcceleratedRenderFeatureFlagOn: ({ featureFlags }: {
|
|
10
|
+
featureFlags: any;
|
|
11
|
+
}) => boolean;
|
|
9
12
|
declare const AxesChartDataConfig: EditorConfig;
|
|
10
13
|
export declare const AxesChartDataConfigBar: EditorConfig;
|
|
11
14
|
export declare const AxesChartDataConfigScatter: EditorConfig;
|
|
12
15
|
export declare const AxesChartDataConfigBubble: EditorConfig;
|
|
13
|
-
export declare const isAcceleratedRenderFeatureFlagOn: ({ featureFlags }: {
|
|
14
|
-
featureFlags: any;
|
|
15
|
-
}) => boolean;
|
|
16
16
|
export declare const AcceleratedRenderEditorLayout: {
|
|
17
17
|
label: any;
|
|
18
18
|
option: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AxesChartDataConfig.d.ts","sourceRoot":"","sources":["../../src/common/editorConfig/AxesChartDataConfig.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,eAAO,MAAM,sBAAsB,GAAI;;CAAgB,KAAG,OAEzD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI;;;CAAyB,KAAG,OAG5D,CAAC;AAEF,QAAA,MAAM,mBAAmB,EAAE,YA8C1B,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,YAiBpC,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,YAmDxC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,YAevC,CAAC;AAEF,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"AxesChartDataConfig.d.ts","sourceRoot":"","sources":["../../src/common/editorConfig/AxesChartDataConfig.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,eAAO,MAAM,sBAAsB,GAAI;;CAAgB,KAAG,OAEzD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI;;;CAAyB,KAAG,OAG5D,CAAC;AAEF,eAAO,MAAM,gCAAgC,GAAI;;CAAgB,KAAG,OAEnE,CAAC;AAEF,QAAA,MAAM,mBAAmB,EAAE,YA8C1B,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,YAiBpC,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,YAmDxC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,YAevC,CAAC;AAEF,eAAO,MAAM,6BAA6B;;;;;;UA7I0B,OAAO;;;;;KAgK1E,CAAC;AAEF,eAAO,MAAM,iCAAiC,EAAE,YA6B/C,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,YAGrC,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -6,6 +6,10 @@ export declare const isTrellisEnabled: ({ options, featureFlags }: {
|
|
|
6
6
|
options: any;
|
|
7
7
|
featureFlags: any;
|
|
8
8
|
}) => boolean;
|
|
9
|
+
export declare const isAcceleratedRenderEnabled: ({ options, featureFlags }: {
|
|
10
|
+
options: any;
|
|
11
|
+
featureFlags: any;
|
|
12
|
+
}) => boolean;
|
|
9
13
|
export declare const AxesChartDataDisplayArea: EditorConfig;
|
|
10
14
|
export declare const AxesChartDataDisplayBar: EditorConfig;
|
|
11
15
|
export declare const AxesChartDataDisplayScatter: EditorConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AxesChartDataDisplay.d.ts","sourceRoot":"","sources":["../../src/common/editorConfig/AxesChartDataDisplay.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"AxesChartDataDisplay.d.ts","sourceRoot":"","sources":["../../src/common/editorConfig/AxesChartDataDisplay.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIpD,eAAO,MAAM,sBAAsB,GAAI;;CAAgB,KAAG,OAEzD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI;;;CAAyB,KAAG,OAG5D,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI;;;CAAyB,KAAG,OAGtE,CAAC;AA+FF,eAAO,MAAM,wBAAwB,EAAE,YAAuC,CAAC;AAE/E,eAAO,MAAM,uBAAuB,EAAE,YAOrC,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,YAazC,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,YA4BxC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,YAMtC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AxesChartLegend.d.ts","sourceRoot":"","sources":["../../src/common/editorConfig/AxesChartLegend.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,QAAA,MAAM,eAAe,EAAE,YAyCtB,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAAI;;;CAGjD,KAAG,
|
|
1
|
+
{"version":3,"file":"AxesChartLegend.d.ts","sourceRoot":"","sources":["../../src/common/editorConfig/AxesChartLegend.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,QAAA,MAAM,eAAe,EAAE,YAyCtB,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAAI;;;CAGjD,KAAG,YA8DF,CAAC;AAEH,eAAe,eAAe,CAAC"}
|
package/common/gaugeUtils.d.ts
CHANGED
|
@@ -356,6 +356,43 @@ export declare const getGradientDimensions: (orientation: any) => {
|
|
|
356
356
|
x2: string;
|
|
357
357
|
y2: string;
|
|
358
358
|
};
|
|
359
|
+
type NumericInput = number | string;
|
|
360
|
+
interface UniqueDecimalPlacesInput {
|
|
361
|
+
values: number[];
|
|
362
|
+
minimumDecimalPlaces: number;
|
|
363
|
+
}
|
|
364
|
+
interface PercentageFromRangeInput {
|
|
365
|
+
value: number;
|
|
366
|
+
min: number;
|
|
367
|
+
range: number;
|
|
368
|
+
}
|
|
369
|
+
interface NumOfTicksInput {
|
|
370
|
+
min: number;
|
|
371
|
+
max: number;
|
|
372
|
+
majorUnit: number | string;
|
|
373
|
+
usePercentageRange: boolean;
|
|
374
|
+
}
|
|
375
|
+
interface TickLabelFormatterResult {
|
|
376
|
+
numOfTicks: number;
|
|
377
|
+
numericStep: number;
|
|
378
|
+
formatTickLabel: (value: number) => string;
|
|
379
|
+
}
|
|
380
|
+
interface FormatGaugeValueLabelInput {
|
|
381
|
+
value: NumericInput;
|
|
382
|
+
min: number;
|
|
383
|
+
max: number;
|
|
384
|
+
usePercentageValue: boolean;
|
|
385
|
+
}
|
|
386
|
+
export declare const getDecimalPlaces: (value: NumericInput) => number;
|
|
387
|
+
export declare const getUniqueDecimalPlaces: ({ values, minimumDecimalPlaces, }: UniqueDecimalPlacesInput) => number;
|
|
388
|
+
export declare const getPercentageFromRange: ({ value, min, range }: PercentageFromRangeInput) => number;
|
|
389
|
+
export declare const getNumOfTicks: ({ min, max, majorUnit, usePercentageRange, }: NumOfTicksInput) => {
|
|
390
|
+
numOfTicks: number;
|
|
391
|
+
isAutoMajorUnit: boolean;
|
|
392
|
+
majorUnitNumber: number;
|
|
393
|
+
};
|
|
394
|
+
export declare const getTickLabelFormatter: ({ min, max, majorUnit, usePercentageRange, }: NumOfTicksInput) => TickLabelFormatterResult;
|
|
395
|
+
export declare const formatGaugeValueLabel: ({ value, min, max, usePercentageValue, }: FormatGaugeValueLabelInput) => string;
|
|
359
396
|
interface GaugeOptions {
|
|
360
397
|
[key: string]: any;
|
|
361
398
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gaugeUtils.d.ts","sourceRoot":"","sources":["../src/common/gaugeUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gaugeUtils.d.ts","sourceRoot":"","sources":["../src/common/gaugeUtils.ts"],"names":[],"mappings":"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"}
|
package/common/gaugeUtils.js
CHANGED
|
@@ -52,6 +52,8 @@ __export(gaugeUtils_exports, {
|
|
|
52
52
|
GAUGE_THICKNESS: () => GAUGE_THICKNESS,
|
|
53
53
|
assignGaugeColor: () => assignGaugeColor,
|
|
54
54
|
convertToGaugeProperties: () => convertToGaugeProperties,
|
|
55
|
+
formatGaugeValueLabel: () => formatGaugeValueLabel,
|
|
56
|
+
getDecimalPlaces: () => getDecimalPlaces,
|
|
55
57
|
getFillBarDimensions: () => getFillBarDimensions,
|
|
56
58
|
getFillerGaugeValueMarkerPositions: () => getFillerGaugeValueMarkerPositions,
|
|
57
59
|
getGaugeBarHeight: () => getGaugeBarHeight,
|
|
@@ -70,7 +72,11 @@ __export(gaugeUtils_exports, {
|
|
|
70
72
|
getGradientStops: () => getGradientStops,
|
|
71
73
|
getMarkerBarDimensions: () => getMarkerBarDimensions,
|
|
72
74
|
getMarkerGaugeValueMarkerPositions: () => getMarkerGaugeValueMarkerPositions,
|
|
75
|
+
getNumOfTicks: () => getNumOfTicks,
|
|
76
|
+
getPercentageFromRange: () => getPercentageFromRange,
|
|
73
77
|
getSortedRanges: () => getSortedRanges,
|
|
78
|
+
getTickLabelFormatter: () => getTickLabelFormatter,
|
|
79
|
+
getUniqueDecimalPlaces: () => getUniqueDecimalPlaces,
|
|
74
80
|
mapToOldKey: () => mapToOldKey,
|
|
75
81
|
mapValueLabelDisplay: () => mapValueLabelDisplay,
|
|
76
82
|
validateRanges: () => validateRanges
|
|
@@ -95,20 +101,33 @@ var defaultImport2 = __toESM(require("@splunk/visualizations-shared/colorConstan
|
|
|
95
101
|
__reExport(colorConstants_exports, require("@splunk/visualizations-shared/colorConstants"));
|
|
96
102
|
var colorConstants_default = "default" in defaultImport2 ? defaultImport2.default : defaultImport2;
|
|
97
103
|
|
|
104
|
+
// esm-externals:@splunk/visualizations-shared/numberUtils
|
|
105
|
+
var numberUtils_exports = {};
|
|
106
|
+
__export(numberUtils_exports, {
|
|
107
|
+
default: () => numberUtils_default
|
|
108
|
+
});
|
|
109
|
+
var defaultImport3 = __toESM(require("@splunk/visualizations-shared/numberUtils"));
|
|
110
|
+
__reExport(numberUtils_exports, require("@splunk/visualizations-shared/numberUtils"));
|
|
111
|
+
var numberUtils_default = "default" in defaultImport3 ? defaultImport3.default : defaultImport3;
|
|
112
|
+
|
|
98
113
|
// esm-externals:@splunk/ui-utils/i18n
|
|
99
114
|
var i18n_exports = {};
|
|
100
115
|
__export(i18n_exports, {
|
|
101
116
|
default: () => i18n_default
|
|
102
117
|
});
|
|
103
|
-
var
|
|
118
|
+
var defaultImport4 = __toESM(require("@splunk/ui-utils/i18n"));
|
|
104
119
|
__reExport(i18n_exports, require("@splunk/ui-utils/i18n"));
|
|
105
|
-
var i18n_default = "default" in
|
|
120
|
+
var i18n_default = "default" in defaultImport4 ? defaultImport4.default : defaultImport4;
|
|
106
121
|
|
|
107
122
|
// src/common/gaugeUtils.ts
|
|
108
123
|
var GAUGE_THICKNESS = 50;
|
|
109
124
|
var FILL_THICKNESS = 38;
|
|
110
125
|
var GRADIENT_STOP_OFFSET_MIN = 0;
|
|
111
126
|
var GRADIENT_STOP_OFFSET_MAX = 100;
|
|
127
|
+
var DEFAULT_NUM_OF_TICKS = 5;
|
|
128
|
+
var MAX_TICK_LABEL_DECIMAL_PLACES = 5;
|
|
129
|
+
var MAX_VALUE_LABEL_DIGITS_WITHOUT_PERCENT = 6;
|
|
130
|
+
var MAX_VALUE_LABEL_DIGITS_WITH_PERCENT = 5;
|
|
112
131
|
var getGaugeWidth = ({ containerWidth, orientation }) => orientation === "vertical" ? GAUGE_THICKNESS : containerWidth * 0.8;
|
|
113
132
|
var getGaugeHeight = ({ containerHeight, orientation }) => orientation === "vertical" ? containerHeight * 0.8 : GAUGE_THICKNESS;
|
|
114
133
|
var getGaugeLength = ({ containerWidth, containerHeight, orientation }) => orientation === "vertical" ? getGaugeHeight({ containerHeight, orientation }) : getGaugeWidth({ containerWidth, orientation });
|
|
@@ -341,6 +360,137 @@ var getGradientDimensions = (orientation) => {
|
|
|
341
360
|
const y2 = orientation === "horizontal" ? "0%" : "100%";
|
|
342
361
|
return { x1, y1, x2, y2 };
|
|
343
362
|
};
|
|
363
|
+
var getDecimalPlaces = (value) => {
|
|
364
|
+
const numericValue = Number(value);
|
|
365
|
+
if (!Number.isFinite(numericValue)) {
|
|
366
|
+
return 0;
|
|
367
|
+
}
|
|
368
|
+
const fractionPart = numericValue.toString().split(".")[1];
|
|
369
|
+
return fractionPart ? fractionPart.length : 0;
|
|
370
|
+
};
|
|
371
|
+
var getUniqueDecimalPlaces = ({
|
|
372
|
+
values,
|
|
373
|
+
minimumDecimalPlaces
|
|
374
|
+
}) => {
|
|
375
|
+
if (values.length <= 1) {
|
|
376
|
+
return minimumDecimalPlaces;
|
|
377
|
+
}
|
|
378
|
+
for (let decimalPlaces = minimumDecimalPlaces; decimalPlaces <= MAX_TICK_LABEL_DECIMAL_PLACES; decimalPlaces += 1) {
|
|
379
|
+
const roundedValues = values.map((value) => Number(value.toFixed(decimalPlaces)));
|
|
380
|
+
if (new Set(roundedValues).size === roundedValues.length) {
|
|
381
|
+
return decimalPlaces;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
return MAX_TICK_LABEL_DECIMAL_PLACES;
|
|
385
|
+
};
|
|
386
|
+
var getPercentageFromRange = ({ value, min, range }) => {
|
|
387
|
+
if (range === 0) {
|
|
388
|
+
return 0;
|
|
389
|
+
}
|
|
390
|
+
return (value - min) / range * 100;
|
|
391
|
+
};
|
|
392
|
+
var getNumOfTicks = ({
|
|
393
|
+
min,
|
|
394
|
+
max,
|
|
395
|
+
majorUnit,
|
|
396
|
+
usePercentageRange
|
|
397
|
+
}) => {
|
|
398
|
+
const range = max - min;
|
|
399
|
+
const majorUnitNumber = Number(majorUnit);
|
|
400
|
+
const isAutoMajorUnit = majorUnit === "auto" || Number.isNaN(majorUnitNumber) || majorUnitNumber <= 0;
|
|
401
|
+
let numOfTicks = DEFAULT_NUM_OF_TICKS;
|
|
402
|
+
if (!isAutoMajorUnit) {
|
|
403
|
+
numOfTicks = usePercentageRange ? 100 / majorUnitNumber : range / majorUnitNumber;
|
|
404
|
+
}
|
|
405
|
+
return { numOfTicks, isAutoMajorUnit, majorUnitNumber };
|
|
406
|
+
};
|
|
407
|
+
var getTickLabelFormatter = ({
|
|
408
|
+
min,
|
|
409
|
+
max,
|
|
410
|
+
majorUnit,
|
|
411
|
+
usePercentageRange
|
|
412
|
+
}) => {
|
|
413
|
+
const range = max - min;
|
|
414
|
+
const { numOfTicks, isAutoMajorUnit, majorUnitNumber } = getNumOfTicks({
|
|
415
|
+
min,
|
|
416
|
+
max,
|
|
417
|
+
majorUnit,
|
|
418
|
+
usePercentageRange
|
|
419
|
+
});
|
|
420
|
+
const numericStep = range / numOfTicks;
|
|
421
|
+
const tickValues = [];
|
|
422
|
+
for (let i = 0; i <= numOfTicks; i += 1) {
|
|
423
|
+
tickValues.push(min + numericStep * i);
|
|
424
|
+
}
|
|
425
|
+
if (!Number.isInteger(numOfTicks)) {
|
|
426
|
+
tickValues.push(max);
|
|
427
|
+
}
|
|
428
|
+
const minimumNumericDecimalPlaces = Math.min(
|
|
429
|
+
MAX_TICK_LABEL_DECIMAL_PLACES,
|
|
430
|
+
Math.max(
|
|
431
|
+
getDecimalPlaces(min),
|
|
432
|
+
getDecimalPlaces(max),
|
|
433
|
+
isAutoMajorUnit ? 0 : getDecimalPlaces(majorUnitNumber)
|
|
434
|
+
)
|
|
435
|
+
);
|
|
436
|
+
const numericLabelDecimalPlaces = getUniqueDecimalPlaces({
|
|
437
|
+
values: tickValues,
|
|
438
|
+
minimumDecimalPlaces: minimumNumericDecimalPlaces
|
|
439
|
+
});
|
|
440
|
+
const percentageLabelDecimalPlaces = getUniqueDecimalPlaces({
|
|
441
|
+
values: tickValues.map((value) => getPercentageFromRange({ value, min, range })),
|
|
442
|
+
minimumDecimalPlaces: 0
|
|
443
|
+
});
|
|
444
|
+
const formatTickLabel = (value) => {
|
|
445
|
+
if (usePercentageRange) {
|
|
446
|
+
const percentageValue = getPercentageFromRange({ value, min, range });
|
|
447
|
+
return `${percentageValue.toFixed(percentageLabelDecimalPlaces)}%`;
|
|
448
|
+
}
|
|
449
|
+
const numericLabel = value.toFixed(numericLabelDecimalPlaces);
|
|
450
|
+
if (numericLabel.includes(".")) {
|
|
451
|
+
return numericLabel;
|
|
452
|
+
}
|
|
453
|
+
return (0, numberUtils_exports.formatNumber)(Number(numericLabel), 0, {
|
|
454
|
+
useThousandSeparators: true,
|
|
455
|
+
useTrendUnits: true
|
|
456
|
+
}).replace(/k$/, "K");
|
|
457
|
+
};
|
|
458
|
+
return { numOfTicks, numericStep, formatTickLabel };
|
|
459
|
+
};
|
|
460
|
+
var getDigitsBeforeDecimal = (numericValue) => Math.abs(Math.trunc(Number(numericValue))).toString().length;
|
|
461
|
+
var getCappedDecimalPlaces = (numericValue, rawDecimalPlaces, maxDigits) => {
|
|
462
|
+
const digitsBeforeDecimal = getDigitsBeforeDecimal(numericValue);
|
|
463
|
+
const maxDecimalPlaces = Math.max(0, maxDigits - digitsBeforeDecimal);
|
|
464
|
+
return Math.min(rawDecimalPlaces, maxDecimalPlaces);
|
|
465
|
+
};
|
|
466
|
+
var formatGaugeValueLabel = ({
|
|
467
|
+
value,
|
|
468
|
+
min,
|
|
469
|
+
max,
|
|
470
|
+
usePercentageValue
|
|
471
|
+
}) => {
|
|
472
|
+
const numericValue = Number(value);
|
|
473
|
+
const range = max - min || 1;
|
|
474
|
+
const percentageValue = getPercentageFromRange({ value: numericValue, min, range });
|
|
475
|
+
const trendFormatOptions = {
|
|
476
|
+
useThousandSeparators: true,
|
|
477
|
+
useTrendUnits: true
|
|
478
|
+
};
|
|
479
|
+
if (usePercentageValue) {
|
|
480
|
+
const percentageDecimalPlaces = getCappedDecimalPlaces(
|
|
481
|
+
percentageValue,
|
|
482
|
+
2,
|
|
483
|
+
MAX_VALUE_LABEL_DIGITS_WITH_PERCENT
|
|
484
|
+
);
|
|
485
|
+
return `${(0, numberUtils_exports.formatNumber)(percentageValue, percentageDecimalPlaces, trendFormatOptions)}%`;
|
|
486
|
+
}
|
|
487
|
+
const valueDecimalPlaces = getCappedDecimalPlaces(
|
|
488
|
+
numericValue,
|
|
489
|
+
getDecimalPlaces(numericValue),
|
|
490
|
+
MAX_VALUE_LABEL_DIGITS_WITHOUT_PERCENT
|
|
491
|
+
);
|
|
492
|
+
return (0, numberUtils_exports.formatNumber)(numericValue, valueDecimalPlaces, trendFormatOptions);
|
|
493
|
+
};
|
|
344
494
|
var gaugeOptionsMapping = {
|
|
345
495
|
majorTickInterval: "majorUnit",
|
|
346
496
|
gaugeRanges: "ranges"
|