{"version":3,"file":"ColorSchemeButton.mjs","sources":["../../src/ColorSchemeButton.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { Button, Dropdown, Menu, useStyles2 } from '@grafana/ui';\n\nimport { byPackageGradient, byValueGradient, diffColorBlindGradient, diffDefaultGradient } from './FlameGraph/colors';\nimport { ColorScheme, ColorSchemeDiff } from './types';\n\ntype ColorSchemeButtonProps = {\n  value: ColorScheme | ColorSchemeDiff;\n  onChange: (colorScheme: ColorScheme | ColorSchemeDiff) => void;\n  isDiffMode: boolean;\n};\n\nexport function ColorSchemeButton(props: ColorSchemeButtonProps) {\n  const styles = useStyles2(getStyles);\n  let menu = (\n    <Menu>\n      <Menu.Item label=\"By package name\" onClick={() => props.onChange(ColorScheme.PackageBased)} />\n      <Menu.Item label=\"By value\" onClick={() => props.onChange(ColorScheme.ValueBased)} />\n    </Menu>\n  );\n\n  // Show a bit different gradient as a way to indicate selected value\n  const colorDotStyle =\n    {\n      [ColorScheme.ValueBased]: styles.colorDotByValue,\n      [ColorScheme.PackageBased]: styles.colorDotByPackage,\n      [ColorSchemeDiff.DiffColorBlind]: styles.colorDotDiffColorBlind,\n      [ColorSchemeDiff.Default]: styles.colorDotDiffDefault,\n    }[props.value] || styles.colorDotByValue;\n\n  let contents = <span className={cx(styles.colorDot, colorDotStyle)} />;\n\n  if (props.isDiffMode) {\n    menu = (\n      <Menu>\n        <Menu.Item label=\"Default (green to red)\" onClick={() => props.onChange(ColorSchemeDiff.Default)} />\n        <Menu.Item label=\"Color blind (blue to red)\" onClick={() => props.onChange(ColorSchemeDiff.DiffColorBlind)} />\n      </Menu>\n    );\n\n    contents = (\n      <div className={cx(styles.colorDotDiff, colorDotStyle)}>\n        <div>-100% (removed)</div>\n        <div>0%</div>\n        <div>+100% (added)</div>\n      </div>\n    );\n  }\n\n  return (\n    <Dropdown overlay={menu}>\n      <Button\n        variant={'secondary'}\n        fill={'outline'}\n        size={'sm'}\n        tooltip={'Change color scheme'}\n        onClick={() => {}}\n        className={styles.buttonSpacing}\n        aria-label={'Change color scheme'}\n      >\n        {contents}\n      </Button>\n    </Dropdown>\n  );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n  buttonSpacing: css({\n    label: 'buttonSpacing',\n    marginRight: theme.spacing(1),\n  }),\n  colorDot: css({\n    label: 'colorDot',\n    display: 'inline-block',\n    width: '10px',\n    height: '10px',\n    borderRadius: theme.shape.radius.circle,\n  }),\n  colorDotDiff: css({\n    label: 'colorDotDiff',\n    display: 'flex',\n    width: '200px',\n    height: '12px',\n    color: 'white',\n    fontSize: 9,\n    lineHeight: 1.3,\n    fontWeight: 300,\n    justifyContent: 'space-between',\n    padding: '0 2px',\n    // eslint-disable-next-line @grafana/no-border-radius-literal\n    borderRadius: '2px',\n  }),\n  colorDotByValue: css({\n    label: 'colorDotByValue',\n    background: byValueGradient,\n  }),\n  colorDotByPackage: css({\n    label: 'colorDotByPackage',\n    background: byPackageGradient,\n  }),\n  colorDotDiffDefault: css({\n    label: 'colorDotDiffDefault',\n    background: diffDefaultGradient,\n  }),\n  colorDotDiffColorBlind: css({\n    label: 'colorDotDiffColorBlind',\n    background: diffColorBlindGradient,\n  }),\n});\n"],"names":[],"mappings":"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"}