{"version":3,"file":"VizLegendListItem.mjs","sources":["../../../../src/components/VizLegend/VizLegendListItem.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { useCallback } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { useStyles2 } from '../../themes';\n\nimport { VizLegendSeriesIcon } from './VizLegendSeriesIcon';\nimport { VizLegendStatsList } from './VizLegendStatsList';\nimport { VizLegendItem } from './types';\n\nexport interface Props<T> {\n  item: VizLegendItem<T>;\n  className?: string;\n  onLabelClick?: (item: VizLegendItem<T>, event: React.MouseEvent<HTMLButtonElement>) => void;\n  onLabelMouseOver?: (\n    item: VizLegendItem,\n    event: React.MouseEvent<HTMLButtonElement> | React.FocusEvent<HTMLButtonElement>\n  ) => void;\n  onLabelMouseOut?: (\n    item: VizLegendItem,\n    event: React.MouseEvent<HTMLButtonElement> | React.FocusEvent<HTMLButtonElement>\n  ) => void;\n  readonly?: boolean;\n}\n\n/**\n * @internal\n */\nexport const VizLegendListItem = <T = unknown,>({\n  item,\n  onLabelClick,\n  onLabelMouseOver,\n  onLabelMouseOut,\n  className,\n  readonly,\n}: Props<T>) => {\n  const styles = useStyles2(getStyles);\n\n  const onMouseOver = useCallback(\n    (event: React.MouseEvent<HTMLButtonElement, MouseEvent> | React.FocusEvent<HTMLButtonElement>) => {\n      if (onLabelMouseOver) {\n        onLabelMouseOver(item, event);\n      }\n    },\n    [item, onLabelMouseOver]\n  );\n\n  const onMouseOut = useCallback(\n    (event: React.MouseEvent<HTMLButtonElement, MouseEvent> | React.FocusEvent<HTMLButtonElement>) => {\n      if (onLabelMouseOut) {\n        onLabelMouseOut(item, event);\n      }\n    },\n    [item, onLabelMouseOut]\n  );\n\n  const onClick = useCallback(\n    (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n      if (onLabelClick) {\n        onLabelClick(item, event);\n      }\n    },\n    [item, onLabelClick]\n  );\n\n  return (\n    <div\n      className={cx(styles.itemWrapper, item.disabled && styles.itemDisabled, className)}\n      data-testid={selectors.components.VizLegend.seriesName(item.label)}\n    >\n      <VizLegendSeriesIcon\n        seriesName={item.fieldName ?? item.label}\n        color={item.color}\n        gradient={item.gradient}\n        readonly={readonly}\n        lineStyle={item.lineStyle}\n      />\n      <button\n        disabled={readonly}\n        type=\"button\"\n        onBlur={onMouseOut}\n        onFocus={onMouseOver}\n        onMouseOver={onMouseOver}\n        onMouseOut={onMouseOut}\n        onClick={onClick}\n        className={styles.label}\n      >\n        {item.label}\n      </button>\n\n      {item.getDisplayValues && <VizLegendStatsList stats={item.getDisplayValues()} />}\n    </div>\n  );\n};\n\nVizLegendListItem.displayName = 'VizLegendListItem';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n  label: css({\n    label: 'LegendLabel',\n    whiteSpace: 'nowrap',\n    background: 'none',\n    border: 'none',\n    fontSize: 'inherit',\n    padding: 0,\n    userSelect: 'text',\n  }),\n  itemDisabled: css({\n    label: 'LegendLabelDisabled',\n    color: theme.colors.text.disabled,\n  }),\n  itemWrapper: css({\n    label: 'LegendItemWrapper',\n    display: 'flex',\n    whiteSpace: 'nowrap',\n    alignItems: 'center',\n    flexGrow: 1,\n  }),\n  value: css({\n    textAlign: 'right',\n  }),\n  yAxisLabel: css({\n    color: theme.v1.palette.gray2,\n  }),\n});\n"],"names":[],"mappings":"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"}