{"version":3,"file":"utils.mjs","sources":["../../../../src/components/Gauge/utils.ts"],"sourcesContent":["import {\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  theme: GrafanaTheme | GrafanaTheme2,\n  offsetColor = true\n): Threshold[] {\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\n  if (offsetColor) {\n    formatted.push({\n      value: parseFloat(min.toFixed(decimals)),\n      color: theme.visualization.getColorByName(first.color),\n    });\n  }\n\n  let skip = offsetColor;\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({\n      value: isFinite(step.value) ? step.value : 0,\n      color: theme.visualization.getColorByName((offsetColor ? prev : step).color),\n    });\n    if (step === last) {\n      break;\n    }\n  }\n  if (max > last.value) {\n    formatted.push({ value: parseFloat(max.toFixed(decimals)), color: theme.visualization.getColorByName(last.color) });\n  }\n  return formatted;\n}\n"],"names":[],"mappings":"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"}