@grafana/ui
Version:
Grafana Components Library
1 lines • 5.38 kB
Source Map (JSON)
{"version":3,"file":"utils.mjs","sources":["../../../../src/components/Gauge/utils.ts"],"sourcesContent":["import {\n DisplayValue,\n FALLBACK_COLOR,\n FieldColorModeId,\n FieldConfig,\n GAUGE_DEFAULT_MAXIMUM,\n GAUGE_DEFAULT_MINIMUM,\n getActiveThreshold,\n GrafanaTheme,\n GrafanaTheme2,\n Threshold,\n ThresholdsConfig,\n ThresholdsMode,\n} from '@grafana/data';\nimport { VizOrientation } from '@grafana/schema';\n\ninterface GaugeAutoProps {\n titleFontSize: number;\n gaugeHeight: number;\n showLabel: boolean;\n}\n\nexport const DEFAULT_THRESHOLDS: ThresholdsConfig = {\n mode: ThresholdsMode.Absolute,\n steps: [\n { value: -Infinity, color: 'green' },\n { value: 80, color: 'red' },\n ],\n};\n\nexport function calculateGaugeAutoProps(\n width: number,\n height: number,\n title: string | undefined,\n orientation?: VizOrientation\n): GaugeAutoProps {\n const showLabel = title !== null && title !== undefined;\n const titleFontSizeDimension = orientation === VizOrientation.Vertical ? height : width;\n const titleFontSize = Math.min((titleFontSizeDimension * 0.15) / 1.5, 20); // 20% of height * line-height, max 40px\n const titleHeight = titleFontSize * 1.5;\n const availableHeight = showLabel ? height - titleHeight : height;\n const gaugeHeight = Math.min(availableHeight, width);\n\n return {\n showLabel,\n gaugeHeight,\n titleFontSize,\n };\n}\n\nexport function getFormattedThresholds(\n decimals: number,\n field: FieldConfig,\n value: DisplayValue,\n theme: GrafanaTheme | GrafanaTheme2\n): Threshold[] {\n if (field.color?.mode !== FieldColorModeId.Thresholds) {\n return [{ value: field.min ?? GAUGE_DEFAULT_MINIMUM, color: value.color ?? FALLBACK_COLOR }];\n }\n\n const thresholds = field.thresholds ?? DEFAULT_THRESHOLDS;\n const isPercent = thresholds.mode === ThresholdsMode.Percentage;\n const steps = thresholds.steps;\n\n let min = field.min ?? GAUGE_DEFAULT_MINIMUM;\n let max = field.max ?? GAUGE_DEFAULT_MAXIMUM;\n\n if (isPercent) {\n min = 0;\n max = 100;\n }\n\n const first = getActiveThreshold(min, steps);\n const last = getActiveThreshold(max, steps);\n const formatted: Threshold[] = [\n { value: +min.toFixed(decimals), color: theme.visualization.getColorByName(first.color) },\n ];\n let skip = true;\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i];\n if (skip) {\n if (first === step) {\n skip = false;\n }\n continue;\n }\n const prev = steps[i - 1];\n formatted.push({ value: step.value, color: theme.visualization.getColorByName(prev.color) });\n if (step === last) {\n break;\n }\n }\n formatted.push({ value: +max.toFixed(decimals), color: theme.visualization.getColorByName(last.color) });\n return formatted;\n}\n"],"names":[],"mappings":"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"}