{"version":3,"file":"BigValueLayout.cjs","sources":["../../../../src/components/BigValue/BigValueLayout.tsx"],"sourcesContent":["import { CSSProperties, type JSX } from 'react';\nimport * as React from 'react';\nimport tinycolor from 'tinycolor2';\n\nimport { formattedValueToString, DisplayValue, FieldConfig, FieldType, ThemeVisualizationColors } from '@grafana/data';\nimport { GraphDrawStyle, GraphFieldConfig, PercentChangeColorMode } from '@grafana/schema';\n\nimport { getTextColorForAlphaBackground } from '../../utils/colors';\nimport { calculateFontSize } from '../../utils/measureText';\nimport { Sparkline } from '../Sparkline/Sparkline';\n\nimport { BigValueColorMode, Props, BigValueJustifyMode, BigValueTextMode } from './BigValue';\nimport { percentChangeString } from './PercentChange';\n\nconst LINE_HEIGHT = 1.2;\nconst MAX_TITLE_SIZE = 30;\nconst VALUE_FONT_WEIGHT = 500;\n\nexport abstract class BigValueLayout {\n  titleFontSize: number;\n  valueFontSize: number;\n  percentFontSize: number;\n  chartHeight: number;\n  chartWidth: number;\n  valueColor: string;\n  panelPadding: number;\n  justifyCenter: boolean;\n  titleToAlignTo?: string;\n  valueToAlignTo: string;\n  maxTextWidth: number;\n  maxTextHeight: number;\n  textValues: BigValueTextValues;\n\n  constructor(private props: Props) {\n    const { width, height, value, text } = props;\n\n    this.valueColor = value.color ?? 'gray';\n    this.panelPadding = height > 100 ? 12 : 8;\n    this.textValues = getTextValues(props);\n    this.justifyCenter = shouldJustifyCenter(props.justifyMode, this.textValues.title);\n    this.valueToAlignTo = this.textValues.valueToAlignTo;\n    this.titleToAlignTo = this.textValues.titleToAlignTo;\n    this.titleFontSize = 0;\n    this.valueFontSize = 0;\n    this.percentFontSize = 0;\n    this.chartHeight = 0;\n    this.chartWidth = 0;\n    this.maxTextWidth = width - this.panelPadding * 2;\n    this.maxTextHeight = height - this.panelPadding * 2;\n\n    // Explicit font sizing\n    if (text) {\n      if (text.titleSize) {\n        this.titleFontSize = text.titleSize;\n        this.titleToAlignTo = undefined;\n      }\n      if (text.valueSize) {\n        this.valueFontSize = text.valueSize;\n        this.valueToAlignTo = '';\n      }\n      if (text.percentSize) {\n        this.percentFontSize = text.percentSize;\n      }\n    }\n  }\n\n  getTitleStyles(): CSSProperties {\n    const styles: CSSProperties = {\n      fontSize: `${this.titleFontSize}px`,\n      lineHeight: LINE_HEIGHT,\n    };\n\n    if (\n      this.props.colorMode === BigValueColorMode.Background ||\n      this.props.colorMode === BigValueColorMode.BackgroundSolid\n    ) {\n      styles.color = getTextColorForAlphaBackground(this.valueColor, this.props.theme.isDark);\n    }\n\n    return styles;\n  }\n\n  getValueStyles(): CSSProperties {\n    const styles: CSSProperties = {\n      fontSize: this.valueFontSize,\n      fontWeight: VALUE_FONT_WEIGHT,\n      lineHeight: LINE_HEIGHT,\n      position: 'relative',\n      zIndex: 1,\n    };\n\n    if (this.justifyCenter) {\n      styles.textAlign = 'center';\n    }\n\n    switch (this.props.colorMode) {\n      case BigValueColorMode.Value:\n        styles.color = this.valueColor;\n        break;\n      case BigValueColorMode.Background:\n      case BigValueColorMode.BackgroundSolid:\n        styles.color = getTextColorForAlphaBackground(this.valueColor, this.props.theme.isDark);\n        break;\n      case BigValueColorMode.None:\n        styles.color = this.props.theme.colors.text.primary;\n        break;\n    }\n\n    return styles;\n  }\n\n  getPercentChangeStyles(\n    percentChange: number,\n    percentChangeColorMode: PercentChangeColorMode | undefined,\n    valueStyles: React.CSSProperties\n  ): PercentChangeStyles {\n    const VALUE_TO_PERCENT_CHANGE_RATIO = 2.5;\n    const valueContainerStyles = this.getValueAndTitleContainerStyles();\n    const percentFontSize = this.percentFontSize || Math.max(this.valueFontSize / VALUE_TO_PERCENT_CHANGE_RATIO, 12);\n    let iconSize = this.percentFontSize ? this.percentFontSize - 3 : Math.max(this.valueFontSize / 3, 10);\n    const themeVisualizationColors = this.props.theme.visualization;\n    const color = getPercentChangeColor(percentChange, percentChangeColorMode, valueStyles, themeVisualizationColors);\n\n    const containerStyles: CSSProperties = {\n      fontSize: percentFontSize,\n      fontWeight: VALUE_FONT_WEIGHT,\n      lineHeight: LINE_HEIGHT,\n      position: 'relative',\n      display: 'flex',\n      alignItems: 'center',\n      gap: Math.max(percentFontSize / 3, 4),\n      zIndex: 1,\n      color,\n    };\n\n    if (this.justifyCenter) {\n      containerStyles.textAlign = 'center';\n    }\n\n    if (valueContainerStyles.flexDirection === 'column' && percentFontSize > 12) {\n      containerStyles.marginTop = -(percentFontSize / 4);\n    }\n\n    if (valueContainerStyles.flexDirection === 'row') {\n      containerStyles.alignItems = 'baseline';\n\n      // Center the percent change vertically relative to the value\n      // This approach seems to work the best for all edge cases\n      // Note: the fixed min font size causes this to be off for a few edge cases\n      containerStyles.lineHeight = LINE_HEIGHT * VALUE_TO_PERCENT_CHANGE_RATIO;\n    }\n\n    switch (this.props.colorMode) {\n      case BigValueColorMode.Background:\n      case BigValueColorMode.BackgroundSolid:\n        containerStyles.color = getTextColorForAlphaBackground(this.valueColor, this.props.theme.isDark);\n        break;\n    }\n\n    if (this.props.textMode === BigValueTextMode.None) {\n      containerStyles.fontSize = calculateFontSize(\n        percentChangeString(percentChange),\n        this.maxTextWidth * 0.8,\n        this.maxTextHeight * 0.8,\n        LINE_HEIGHT,\n        undefined,\n        VALUE_FONT_WEIGHT\n      );\n      iconSize = containerStyles.fontSize * 0.8;\n    }\n\n    return {\n      containerStyles,\n      iconSize,\n    };\n  }\n\n  getValueAndTitleContainerStyles() {\n    const styles: CSSProperties = {\n      display: 'flex',\n      flexWrap: 'wrap',\n    };\n\n    if (this.justifyCenter) {\n      styles.alignItems = 'center';\n      styles.justifyContent = 'center';\n      styles.flexGrow = 1;\n      styles.gap = '0.75ch';\n    }\n\n    return styles;\n  }\n\n  getPanelStyles(): CSSProperties {\n    const { width, height, theme, colorMode, textMode } = this.props;\n\n    const panelStyles: CSSProperties = {\n      width: `${width}px`,\n      height: `${height}px`,\n      padding: `${textMode === BigValueTextMode.None ? 2 : this.panelPadding}px`,\n      position: 'relative',\n      display: 'flex',\n    };\n\n    const themeFactor = theme.isDark ? 1 : -0.7;\n\n    switch (colorMode) {\n      case BigValueColorMode.Background:\n        const bgColor2 = tinycolor(this.valueColor)\n          .darken(15 * themeFactor)\n          .spin(8)\n          .toRgbString();\n        const bgColor3 = tinycolor(this.valueColor)\n          .darken(5 * themeFactor)\n          .spin(-8)\n          .toRgbString();\n        panelStyles.background = `linear-gradient(120deg, ${bgColor2}, ${bgColor3})`;\n        break;\n      case BigValueColorMode.BackgroundSolid:\n        panelStyles.background = tinycolor(this.valueColor).toString();\n        break;\n      case BigValueColorMode.Value:\n        panelStyles.background = `transparent`;\n        break;\n    }\n\n    if (this.justifyCenter) {\n      panelStyles.alignItems = 'center';\n      panelStyles.flexDirection = 'row';\n    }\n\n    return panelStyles;\n  }\n\n  renderChart(): JSX.Element | null {\n    const { sparkline, colorMode } = this.props;\n\n    if (!sparkline || sparkline.y?.type !== FieldType.number) {\n      return null;\n    }\n\n    let fillColor: string;\n    let lineColor: string;\n\n    switch (colorMode) {\n      case BigValueColorMode.Background:\n      case BigValueColorMode.BackgroundSolid:\n        fillColor = 'rgba(255,255,255,0.4)';\n        lineColor = tinycolor(this.valueColor).brighten(40).toRgbString();\n        break;\n      case BigValueColorMode.None:\n      case BigValueColorMode.Value:\n      default:\n        lineColor = this.valueColor;\n        fillColor = tinycolor(this.valueColor).setAlpha(0.2).toRgbString();\n        break;\n    }\n\n    // The graph field configuration applied to Y values\n    const config: FieldConfig<GraphFieldConfig> = {\n      custom: {\n        drawStyle: GraphDrawStyle.Line,\n        lineWidth: 1,\n        fillColor,\n        lineColor,\n      },\n    };\n\n    return (\n      <div style={this.getChartStyles()}>\n        <Sparkline\n          height={this.chartHeight}\n          width={this.chartWidth}\n          sparkline={sparkline}\n          config={config}\n          theme={this.props.theme}\n        />\n      </div>\n    );\n  }\n  getChartStyles(): CSSProperties {\n    return {\n      position: 'absolute',\n      right: 0,\n      bottom: 0,\n    };\n  }\n}\n\nexport class WideNoChartLayout extends BigValueLayout {\n  constructor(props: Props) {\n    super(props);\n\n    const valueWidthPercent = this.titleToAlignTo?.length ? 0.3 : 1.0;\n\n    if (this.valueToAlignTo.length) {\n      let valueHeight = this.maxTextHeight;\n      if (props.value.percentChange != null) {\n        // percent change uses 40% of value height, so we want to scale the value font size accordingly\n        valueHeight = valueHeight * 0.75;\n      }\n      // initial value size\n      this.valueFontSize = calculateFontSize(\n        this.valueToAlignTo,\n        this.maxTextWidth * valueWidthPercent,\n        valueHeight,\n        LINE_HEIGHT,\n        undefined,\n        VALUE_FONT_WEIGHT\n      );\n    }\n\n    if (this.titleToAlignTo?.length) {\n      // How big can we make the title and still have it fit\n      this.titleFontSize = calculateFontSize(\n        this.titleToAlignTo,\n        this.maxTextWidth * 0.6,\n        this.maxTextHeight,\n        LINE_HEIGHT,\n        MAX_TITLE_SIZE\n      );\n\n      // make sure it's a bit smaller than valueFontSize\n      this.titleFontSize = Math.min(this.valueFontSize * 0.7, this.titleFontSize);\n    }\n  }\n\n  getValueAndTitleContainerStyles() {\n    const styles = super.getValueAndTitleContainerStyles();\n    styles.flexDirection = 'row';\n    styles.alignItems = 'center';\n    styles.flexGrow = 1;\n\n    if (!this.justifyCenter) {\n      styles.justifyContent = 'space-between';\n    }\n\n    return styles;\n  }\n\n  renderChart(): JSX.Element | null {\n    return null;\n  }\n\n  getPanelStyles() {\n    const panelStyles = super.getPanelStyles();\n    panelStyles.alignItems = 'center';\n    return panelStyles;\n  }\n}\n\nexport class WideWithChartLayout extends BigValueLayout {\n  constructor(props: Props) {\n    super(props);\n\n    const { width, height } = props;\n\n    const chartHeightPercent = 0.5;\n    const titleWidthPercent = 0.6;\n    const valueWidthPercent = 1 - titleWidthPercent;\n    const textHeightPercent = 0.4;\n\n    this.chartWidth = width;\n    this.chartHeight = height * chartHeightPercent;\n\n    if (this.titleToAlignTo?.length) {\n      this.titleFontSize = calculateFontSize(\n        this.titleToAlignTo,\n        this.maxTextWidth * titleWidthPercent,\n        this.maxTextHeight * textHeightPercent,\n        LINE_HEIGHT,\n        MAX_TITLE_SIZE\n      );\n    }\n\n    if (this.valueToAlignTo.length) {\n      this.valueFontSize = calculateFontSize(\n        this.valueToAlignTo,\n        this.maxTextWidth * valueWidthPercent,\n        this.maxTextHeight * chartHeightPercent,\n        LINE_HEIGHT,\n        undefined,\n        VALUE_FONT_WEIGHT\n      );\n    }\n  }\n\n  getValueAndTitleContainerStyles() {\n    const styles = super.getValueAndTitleContainerStyles();\n    styles.flexDirection = 'row';\n    styles.flexGrow = 1;\n\n    if (!this.justifyCenter) {\n      styles.justifyContent = 'space-between';\n    }\n\n    return styles;\n  }\n\n  getPanelStyles() {\n    const styles = super.getPanelStyles();\n    styles.flexDirection = 'row';\n    styles.justifyContent = 'space-between';\n    return styles;\n  }\n}\n\nexport class StackedWithChartLayout extends BigValueLayout {\n  constructor(props: Props) {\n    super(props);\n\n    const { width, height } = props;\n    const titleHeightPercent = 0.15;\n    const chartHeightPercent = 0.25;\n    let titleHeight = 0;\n\n    this.chartHeight = height * chartHeightPercent;\n    this.chartWidth = width;\n\n    if (this.titleToAlignTo?.length) {\n      this.titleFontSize = calculateFontSize(\n        this.titleToAlignTo,\n        this.maxTextWidth,\n        height * titleHeightPercent,\n        LINE_HEIGHT,\n        MAX_TITLE_SIZE\n      );\n\n      titleHeight = this.titleFontSize * LINE_HEIGHT;\n    }\n\n    if (this.valueToAlignTo.length) {\n      this.valueFontSize = calculateFontSize(\n        this.valueToAlignTo,\n        this.maxTextWidth,\n        this.maxTextHeight - this.chartHeight - titleHeight,\n        LINE_HEIGHT,\n        undefined,\n        VALUE_FONT_WEIGHT\n      );\n    }\n\n    // make title fontsize it's a bit smaller than valueFontSize\n    if (this.titleToAlignTo?.length) {\n      this.titleFontSize = Math.min(this.valueFontSize * 0.7, this.titleFontSize);\n    }\n\n    // make chart take up unused space\n    this.chartHeight = height - this.titleFontSize * LINE_HEIGHT - this.valueFontSize * LINE_HEIGHT;\n  }\n\n  getValueAndTitleContainerStyles() {\n    const styles = super.getValueAndTitleContainerStyles();\n    styles.flexDirection = 'column';\n    styles.justifyContent = 'center';\n    return styles;\n  }\n\n  getPanelStyles() {\n    const styles = super.getPanelStyles();\n    styles.flexDirection = 'column';\n    return styles;\n  }\n}\n\nexport class StackedWithNoChartLayout extends BigValueLayout {\n  constructor(props: Props) {\n    super(props);\n\n    const { height } = props;\n    const titleHeightPercent = 0.15;\n    let titleHeight = 0;\n\n    if (this.titleToAlignTo?.length) {\n      this.titleFontSize = calculateFontSize(\n        this.titleToAlignTo,\n        this.maxTextWidth,\n        height * titleHeightPercent,\n        LINE_HEIGHT,\n        MAX_TITLE_SIZE\n      );\n\n      titleHeight = this.titleFontSize * LINE_HEIGHT;\n    }\n\n    if (this.valueToAlignTo.length) {\n      let valueHeight = this.maxTextHeight - titleHeight;\n      if (props.value.percentChange != null) {\n        // percent change uses 40% of value height, so we want to scale the value font size accordingly\n        valueHeight = valueHeight * 0.75;\n      }\n      this.valueFontSize = calculateFontSize(\n        this.valueToAlignTo,\n        this.maxTextWidth,\n        valueHeight,\n        LINE_HEIGHT,\n        undefined,\n        VALUE_FONT_WEIGHT\n      );\n    }\n\n    if (this.titleToAlignTo?.length) {\n      // make title fontsize it's a bit smaller than valueFontSize\n      this.titleFontSize = Math.min(this.valueFontSize * 0.7, this.titleFontSize);\n    }\n  }\n\n  getValueAndTitleContainerStyles() {\n    const styles = super.getValueAndTitleContainerStyles();\n    styles.flexDirection = 'column';\n    styles.flexGrow = 1;\n    return styles;\n  }\n\n  renderChart(): JSX.Element | null {\n    return null;\n  }\n\n  getPanelStyles() {\n    const styles = super.getPanelStyles();\n    styles.alignItems = 'center';\n    return styles;\n  }\n}\n\nexport function buildLayout(props: Props): BigValueLayout {\n  const { width, height, sparkline } = props;\n  const useWideLayout = width / height > 2.5 && !props.disableWideLayout;\n\n  if (useWideLayout) {\n    if (height > 50 && !!sparkline && sparkline.y.values.length > 1) {\n      return new WideWithChartLayout(props);\n    } else {\n      return new WideNoChartLayout(props);\n    }\n  }\n\n  // stacked layouts\n  if (height > 100 && sparkline && sparkline.y.values.length > 1) {\n    return new StackedWithChartLayout(props);\n  } else {\n    return new StackedWithNoChartLayout(props);\n  }\n}\n\nexport function shouldJustifyCenter(justifyMode?: BigValueJustifyMode, title?: string) {\n  if (justifyMode === BigValueJustifyMode.Center) {\n    return true;\n  }\n\n  return (title ?? '').length === 0;\n}\n\nexport interface BigValueTextValues extends DisplayValue {\n  valueToAlignTo: string;\n  titleToAlignTo?: string;\n  tooltip?: string;\n}\n\nfunction getTextValues(props: Props): BigValueTextValues {\n  const { value, alignmentFactors, count } = props;\n  let { textMode } = props;\n\n  const titleToAlignTo = alignmentFactors ? alignmentFactors.title : value.title;\n  const valueToAlignTo = formattedValueToString(alignmentFactors ? alignmentFactors : value);\n\n  // In the auto case we only show title if this big value is part of more panes (count > 1)\n  if (textMode === BigValueTextMode.Auto && (count ?? 1) === 1) {\n    textMode = BigValueTextMode.Value;\n  }\n\n  switch (textMode) {\n    case BigValueTextMode.Name:\n      return {\n        ...value,\n        title: undefined,\n        prefix: undefined,\n        suffix: undefined,\n        text: value.title || '',\n        titleToAlignTo: undefined,\n        valueToAlignTo: titleToAlignTo ?? '',\n        tooltip: formattedValueToString(value),\n      };\n    case BigValueTextMode.Value:\n      return {\n        ...value,\n        title: undefined,\n        titleToAlignTo: undefined,\n        valueToAlignTo,\n        tooltip: value.title,\n      };\n    case BigValueTextMode.None:\n      return {\n        numeric: value.numeric,\n        color: value.color,\n        title: undefined,\n        text: '',\n        titleToAlignTo: undefined,\n        valueToAlignTo: '1',\n        tooltip: `Name: ${value.title}\\nValue: ${formattedValueToString(value)}`,\n      };\n    case BigValueTextMode.ValueAndName:\n    default:\n      return {\n        ...value,\n        titleToAlignTo,\n        valueToAlignTo,\n      };\n  }\n}\n\nexport interface PercentChangeStyles {\n  containerStyles: CSSProperties;\n  iconSize: number;\n}\n\nexport function getPercentChangeColor(\n  percentChange: number,\n  percentChangeColorMode: PercentChangeColorMode | undefined,\n  valueStyles: CSSProperties,\n  themeVisualizationColors: ThemeVisualizationColors\n): string | undefined {\n  if (percentChangeColorMode === PercentChangeColorMode.SameAsValue) {\n    return valueStyles.color;\n  } else {\n    return percentChange * (percentChangeColorMode === PercentChangeColorMode.Inverted ? -1 : 1) > 0\n      ? themeVisualizationColors.getColorByName('green')\n      : themeVisualizationColors.getColorByName('red');\n  }\n}\n"],"names":["BigValueColorMode","getTextColorForAlphaBackground","BigValueTextMode","calculateFontSize","percentChangeString","tinycolor","FieldType","GraphDrawStyle","jsx","Sparkline","BigValueJustifyMode","formattedValueToString","PercentChangeColorMode"],"mappings":"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"}