{"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":";;;AAsBO,MAAM,kBAAuC,GAAA;AAAA,EAClD,MAAM,cAAe,CAAA,QAAA;AAAA,EACrB,KAAO,EAAA;AAAA,IACL,EAAE,KAAA,EAAO,CAAW,QAAA,EAAA,KAAA,EAAO,OAAQ,EAAA;AAAA,IACnC,EAAE,KAAA,EAAO,EAAI,EAAA,KAAA,EAAO,KAAM;AAAA;AAE9B;AAEO,SAAS,uBACd,CAAA,KAAA,EACA,MACA,EAAA,KAAA,EACA,WACgB,EAAA;AAChB,EAAM,MAAA,SAAA,GAAY,KAAU,KAAA,IAAA,IAAQ,KAAU,KAAA,KAAA,CAAA;AAC9C,EAAA,MAAM,sBAAyB,GAAA,WAAA,KAAgB,cAAe,CAAA,QAAA,GAAW,MAAS,GAAA,KAAA;AAClF,EAAA,MAAM,gBAAgB,IAAK,CAAA,GAAA,CAAK,sBAAyB,GAAA,IAAA,GAAQ,KAAK,EAAE,CAAA;AACxE,EAAA,MAAM,cAAc,aAAgB,GAAA,GAAA;AACpC,EAAM,MAAA,eAAA,GAAkB,SAAY,GAAA,MAAA,GAAS,WAAc,GAAA,MAAA;AAC3D,EAAA,MAAM,WAAc,GAAA,IAAA,CAAK,GAAI,CAAA,eAAA,EAAiB,KAAK,CAAA;AAEnD,EAAO,OAAA;AAAA,IACL,SAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,sBACd,CAAA,QAAA,EACA,KACA,EAAA,KAAA,EACA,KACa,EAAA;AAvDf,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAwDE,EAAA,IAAA,CAAA,CAAI,EAAM,GAAA,KAAA,CAAA,KAAA,KAAN,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,MAAS,iBAAiB,UAAY,EAAA;AACrD,IAAA,OAAO,CAAC,EAAE,KAAO,EAAA,CAAA,EAAA,GAAA,KAAA,CAAM,GAAN,KAAA,IAAA,GAAA,EAAA,GAAa,qBAAuB,EAAA,KAAA,EAAA,CAAO,EAAM,GAAA,KAAA,CAAA,KAAA,KAAN,IAAe,GAAA,EAAA,GAAA,cAAA,EAAgB,CAAA;AAAA;AAG7F,EAAM,MAAA,UAAA,GAAA,CAAa,EAAM,GAAA,KAAA,CAAA,UAAA,KAAN,IAAoB,GAAA,EAAA,GAAA,kBAAA;AACvC,EAAM,MAAA,SAAA,GAAY,UAAW,CAAA,IAAA,KAAS,cAAe,CAAA,UAAA;AACrD,EAAA,MAAM,QAAQ,UAAW,CAAA,KAAA;AAEzB,EAAI,IAAA,GAAA,GAAA,CAAM,EAAM,GAAA,KAAA,CAAA,GAAA,KAAN,IAAa,GAAA,EAAA,GAAA,qBAAA;AACvB,EAAI,IAAA,GAAA,GAAA,CAAM,EAAM,GAAA,KAAA,CAAA,GAAA,KAAN,IAAa,GAAA,EAAA,GAAA,qBAAA;AAEvB,EAAA,IAAI,SAAW,EAAA;AACb,IAAM,GAAA,GAAA,CAAA;AACN,IAAM,GAAA,GAAA,GAAA;AAAA;AAGR,EAAM,MAAA,KAAA,GAAQ,kBAAmB,CAAA,GAAA,EAAK,KAAK,CAAA;AAC3C,EAAM,MAAA,IAAA,GAAO,kBAAmB,CAAA,GAAA,EAAK,KAAK,CAAA;AAC1C,EAAA,MAAM,SAAyB,GAAA;AAAA,IAC7B,EAAE,KAAA,EAAO,CAAC,GAAA,CAAI,OAAQ,CAAA,QAAQ,CAAG,EAAA,KAAA,EAAO,KAAM,CAAA,aAAA,CAAc,cAAe,CAAA,KAAA,CAAM,KAAK,CAAE;AAAA,GAC1F;AACA,EAAA,IAAI,IAAO,GAAA,IAAA;AACX,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,KAAA,CAAM,QAAQ,CAAK,EAAA,EAAA;AACrC,IAAM,MAAA,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,IAAI,UAAU,IAAM,EAAA;AAClB,QAAO,IAAA,GAAA,KAAA;AAAA;AAET,MAAA;AAAA;AAEF,IAAM,MAAA,IAAA,GAAO,KAAM,CAAA,CAAA,GAAI,CAAC,CAAA;AACxB,IAAA,SAAA,CAAU,IAAK,CAAA,EAAE,KAAO,EAAA,IAAA,CAAK,KAAO,EAAA,KAAA,EAAO,KAAM,CAAA,aAAA,CAAc,cAAe,CAAA,IAAA,CAAK,KAAK,CAAA,EAAG,CAAA;AAC3F,IAAA,IAAI,SAAS,IAAM,EAAA;AACjB,MAAA;AAAA;AACF;AAEF,EAAA,SAAA,CAAU,IAAK,CAAA,EAAE,KAAO,EAAA,CAAC,IAAI,OAAQ,CAAA,QAAQ,CAAG,EAAA,KAAA,EAAO,MAAM,aAAc,CAAA,cAAA,CAAe,IAAK,CAAA,KAAK,GAAG,CAAA;AACvG,EAAO,OAAA,SAAA;AACT;;;;"}