{"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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"}