{"version":3,"file":"ToolbarButton.mjs","sources":["../../../../src/components/ToolbarButton/ToolbarButton.tsx"],"sourcesContent":["import { cx, css } from '@emotion/css';\nimport { forwardRef, ButtonHTMLAttributes } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2, IconName, isIconName } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { styleMixins, useStyles2 } from '../../themes';\nimport { getFocusStyles, getMouseFocusStyles } from '../../themes/mixins';\nimport { IconSize } from '../../types/icon';\nimport { getPropertiesForVariant } from '../Button';\nimport { Icon } from '../Icon/Icon';\nimport { Tooltip } from '../Tooltip';\n\ntype CommonProps = {\n  /** Icon name */\n  icon?: IconName | React.ReactNode;\n  /** Icon size */\n  iconSize?: IconSize;\n  /** Tooltip */\n  tooltip?: string;\n  /** For image icons */\n  imgSrc?: string;\n  /** Alt text for imgSrc */\n  imgAlt?: string;\n  /** if true or false will show angle-down/up */\n  isOpen?: boolean;\n  /** Controls flex-grow: 1 */\n  fullWidth?: boolean;\n  /** reduces padding to xs */\n  narrow?: boolean;\n  /** variant */\n  variant?: ToolbarButtonVariant;\n  /** Hide any children and only show icon */\n  iconOnly?: boolean;\n  /** Show highlight dot */\n  isHighlighted?: boolean;\n};\n\nexport type ToolbarButtonProps = CommonProps & ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport type ToolbarButtonVariant = 'default' | 'primary' | 'destructive' | 'active' | 'canvas';\n\nexport const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>(\n  (\n    {\n      tooltip,\n      icon,\n      iconSize,\n      className,\n      children,\n      imgSrc,\n      imgAlt,\n      fullWidth,\n      isOpen,\n      narrow,\n      variant = 'default',\n      iconOnly,\n      'aria-label': ariaLabel,\n      isHighlighted,\n      ...rest\n    },\n    ref\n  ) => {\n    const styles = useStyles2(getStyles);\n\n    const buttonStyles = cx(\n      {\n        [styles.button]: true,\n        [styles.buttonFullWidth]: fullWidth,\n        [styles.narrow]: narrow,\n      },\n      styles[variant],\n      className\n    );\n\n    const contentStyles = cx({\n      [styles.content]: true,\n      [styles.contentWithIcon]: !!icon,\n      [styles.contentWithRightIcon]: isOpen !== undefined,\n    });\n\n    const body = (\n      <button\n        ref={ref}\n        className={buttonStyles}\n        aria-label={getButtonAriaLabel(ariaLabel, tooltip)}\n        aria-expanded={isOpen}\n        type=\"button\"\n        {...rest}\n      >\n        {renderIcon(icon, iconSize)}\n        {imgSrc && <img className={styles.img} src={imgSrc} alt={imgAlt ?? ''} />}\n        {children && !iconOnly && <div className={contentStyles}>{children}</div>}\n        {isOpen === false && <Icon name=\"angle-down\" />}\n        {isOpen === true && <Icon name=\"angle-up\" />}\n        {isHighlighted && <div className={styles.highlight} />}\n      </button>\n    );\n\n    return tooltip ? (\n      <Tooltip ref={ref} content={tooltip} placement=\"bottom\">\n        {body}\n      </Tooltip>\n    ) : (\n      body\n    );\n  }\n);\n\nToolbarButton.displayName = 'ToolbarButton';\n\nfunction getButtonAriaLabel(ariaLabel: string | undefined, tooltip: string | undefined) {\n  return ariaLabel ? ariaLabel : tooltip ? selectors.components.PageToolbar.item(tooltip) : undefined;\n}\n\nfunction renderIcon(icon: IconName | React.ReactNode, iconSize?: IconSize) {\n  if (!icon) {\n    return null;\n  }\n\n  if (isIconName(icon)) {\n    return <Icon name={icon} size={`${iconSize ? iconSize : 'lg'}`} />;\n  }\n\n  return icon;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  const primaryVariant = getPropertiesForVariant(theme, 'primary', 'solid');\n  const destructiveVariant = getPropertiesForVariant(theme, 'destructive', 'solid');\n\n  const defaultOld = css({\n    color: theme.colors.text.primary,\n    background: theme.colors.secondary.main,\n\n    '&:hover': {\n      color: theme.colors.text.primary,\n      background: theme.colors.secondary.shade,\n      border: `1px solid ${theme.colors.border.medium}`,\n    },\n  });\n\n  return {\n    button: css({\n      label: 'toolbar-button',\n      position: 'relative',\n      display: 'flex',\n      alignItems: 'center',\n      height: theme.spacing(theme.components.height.md),\n      padding: theme.spacing(0, 1),\n      borderRadius: theme.shape.radius.default,\n      lineHeight: `${theme.components.height.md * theme.spacing.gridSize - 2}px`,\n      fontWeight: theme.typography.fontWeightMedium,\n      border: `1px solid ${theme.colors.secondary.border}`,\n      whiteSpace: 'nowrap',\n      [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n        transition: theme.transitions.create(['background', 'box-shadow', 'border-color', 'color'], {\n          duration: theme.transitions.duration.short,\n        }),\n      },\n\n      [theme.breakpoints.down('md')]: {\n        width: 'auto !important',\n      },\n\n      '&:focus, &:focus-visible': {\n        ...getFocusStyles(theme),\n        zIndex: 1,\n      },\n\n      '&:focus:not(:focus-visible)': getMouseFocusStyles(theme),\n\n      '&[disabled], &:disabled': {\n        cursor: 'not-allowed',\n        opacity: theme.colors.action.disabledOpacity,\n        background: theme.colors.action.disabledBackground,\n        boxShadow: 'none',\n\n        '&:hover': {\n          color: theme.colors.text.disabled,\n          background: theme.colors.action.disabledBackground,\n          boxShadow: 'none',\n        },\n      },\n    }),\n    default: css({\n      color: theme.colors.text.secondary,\n      background: 'transparent',\n      border: `1px solid transparent`,\n\n      '&:hover': {\n        color: theme.colors.text.primary,\n        background: theme.colors.action.hover,\n      },\n    }),\n    canvas: defaultOld,\n    active: cx(\n      defaultOld,\n      css({\n        '&::before': {\n          display: 'block',\n          content: '\" \"',\n          position: 'absolute',\n          left: 0,\n          right: 0,\n          height: '2px',\n          bottom: 0,\n          borderRadius: theme.shape.radius.default,\n          backgroundImage: theme.colors.gradients.brandHorizontal,\n        },\n      })\n    ),\n    primary: css(primaryVariant),\n    destructive: css(destructiveVariant),\n    narrow: css({\n      padding: theme.spacing(0, 0.5),\n    }),\n    img: css({\n      width: '16px',\n      height: '16px',\n      marginRight: theme.spacing(1),\n    }),\n    buttonFullWidth: css({\n      flexGrow: 1,\n    }),\n    content: css({\n      display: 'flex',\n      flexGrow: 1,\n    }),\n    contentWithIcon: css({\n      display: 'none',\n      paddingLeft: theme.spacing(1),\n\n      [`@media ${styleMixins.mediaUp(theme.v1.breakpoints.md)}`]: {\n        display: 'block',\n      },\n    }),\n    contentWithRightIcon: css({\n      paddingRight: theme.spacing(0.5),\n    }),\n    highlight: css({\n      backgroundColor: theme.colors.success.main,\n      borderRadius: theme.shape.radius.circle,\n      width: '6px',\n      height: '6px',\n      position: 'absolute',\n      top: '-3px',\n      right: '-3px',\n      zIndex: 1,\n    }),\n  };\n};\n"],"names":["styleMixins.mediaUp"],"mappings":"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"}