{"version":3,"file":"Button.mjs","sources":["../../../../src/components/Button/Button.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { AnchorHTMLAttributes, ButtonHTMLAttributes } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2, ThemeRichColor } from '@grafana/data';\n\nimport { useTheme2 } from '../../themes';\nimport { getFocusStyles, getMouseFocusStyles } from '../../themes/mixins';\nimport { ComponentSize, IconSize, IconType } from '../../types';\nimport { IconName } from '../../types/icon';\nimport { getPropertiesForButtonSize } from '../Forms/commonStyles';\nimport { Icon } from '../Icon/Icon';\nimport { PopoverContent, Tooltip, TooltipPlacement } from '../Tooltip';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'destructive' | 'success';\nexport const allButtonVariants: ButtonVariant[] = ['primary', 'secondary', 'destructive'];\nexport type ButtonFill = 'solid' | 'outline' | 'text';\nexport const allButtonFills: ButtonFill[] = ['solid', 'outline', 'text'];\n\ntype CommonProps = {\n  size?: ComponentSize;\n  variant?: ButtonVariant;\n  fill?: ButtonFill;\n  icon?: IconName | React.ReactElement;\n  className?: string;\n  children?: React.ReactNode;\n  fullWidth?: boolean;\n  type?: string;\n  /** Tooltip content to display on hover */\n  tooltip?: PopoverContent;\n  /** Position of the tooltip */\n  tooltipPlacement?: TooltipPlacement;\n};\n\nexport type ButtonProps = CommonProps & ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n  (\n    {\n      variant = 'primary',\n      size = 'md',\n      fill = 'solid',\n      icon,\n      fullWidth,\n      children,\n      className,\n      type = 'button',\n      tooltip,\n      disabled,\n      tooltipPlacement,\n      onClick,\n      ...otherProps\n    },\n    ref\n  ) => {\n    const theme = useTheme2();\n    const styles = getButtonStyles({\n      theme,\n      size,\n      variant,\n      fill,\n      fullWidth,\n      iconOnly: !children,\n    });\n\n    const buttonStyles = cx(\n      styles.button,\n      {\n        [styles.disabled]: disabled,\n      },\n      className\n    );\n\n    const hasTooltip = Boolean(tooltip);\n\n    // In order to standardise Button please always consider using IconButton when you need a button with an icon only\n    // When using tooltip, ref is forwarded to Tooltip component instead for https://github.com/grafana/grafana/issues/65632\n    const button = (\n      <button\n        className={buttonStyles}\n        type={type}\n        onClick={disabled ? undefined : onClick}\n        {...otherProps}\n        // In order for the tooltip to be accessible when disabled,\n        // we need to set aria-disabled instead of the native disabled attribute\n        aria-disabled={hasTooltip && disabled}\n        disabled={!hasTooltip && disabled}\n        ref={tooltip ? undefined : ref}\n      >\n        <IconRenderer icon={icon} size={size} className={styles.icon} />\n        {children && <span className={styles.content}>{children}</span>}\n      </button>\n    );\n\n    if (tooltip) {\n      return (\n        <Tooltip ref={ref} content={tooltip} placement={tooltipPlacement}>\n          {button}\n        </Tooltip>\n      );\n    }\n\n    return button;\n  }\n);\n\nButton.displayName = 'Button';\n\nexport type ButtonLinkProps = CommonProps &\n  ButtonHTMLAttributes<HTMLButtonElement> &\n  AnchorHTMLAttributes<HTMLAnchorElement>;\n\nexport const LinkButton = React.forwardRef<HTMLAnchorElement, ButtonLinkProps>(\n  (\n    {\n      variant = 'primary',\n      size = 'md',\n      fill = 'solid',\n      icon,\n      fullWidth,\n      children,\n      className,\n      onBlur,\n      onFocus,\n      disabled,\n      tooltip,\n      tooltipPlacement,\n      ...otherProps\n    },\n    ref\n  ) => {\n    const theme = useTheme2();\n    const styles = getButtonStyles({\n      theme,\n      fullWidth,\n      size,\n      variant,\n      fill,\n      iconOnly: !children,\n    });\n\n    const linkButtonStyles = cx(\n      styles.button,\n      {\n        [css(styles.disabled, {\n          pointerEvents: 'none',\n        })]: disabled,\n      },\n      className\n    );\n\n    // When using tooltip, ref is forwarded to Tooltip component instead for https://github.com/grafana/grafana/issues/65632\n    const button = (\n      <a\n        className={linkButtonStyles}\n        {...otherProps}\n        tabIndex={disabled ? -1 : 0}\n        aria-disabled={disabled}\n        ref={tooltip ? undefined : ref}\n      >\n        <IconRenderer icon={icon} size={size} className={styles.icon} />\n        {children && <span className={styles.content}>{children}</span>}\n      </a>\n    );\n\n    if (tooltip) {\n      return (\n        <Tooltip ref={ref} content={tooltip} placement={tooltipPlacement}>\n          {button}\n        </Tooltip>\n      );\n    }\n\n    return button;\n  }\n);\n\nLinkButton.displayName = 'LinkButton';\n\ninterface IconRendererProps {\n  icon?: IconName | React.ReactElement<{ className?: string; size?: IconSize }>;\n  size?: IconSize;\n  className?: string;\n  iconType?: IconType;\n}\nexport const IconRenderer = ({ icon, size, className, iconType }: IconRendererProps) => {\n  if (!icon) {\n    return null;\n  }\n  if (React.isValidElement(icon)) {\n    return React.cloneElement(icon, {\n      className,\n      size,\n    });\n  }\n  return <Icon name={icon} size={size} className={className} type={iconType} />;\n};\n\nexport interface StyleProps {\n  size: ComponentSize;\n  variant: ButtonVariant;\n  fill?: ButtonFill;\n  iconOnly?: boolean;\n  theme: GrafanaTheme2;\n  fullWidth?: boolean;\n  narrow?: boolean;\n}\n\nexport const getButtonStyles = (props: StyleProps) => {\n  const { theme, variant, fill = 'solid', size, iconOnly, fullWidth } = props;\n  const { height, padding, fontSize } = getPropertiesForButtonSize(size, theme);\n  const variantStyles = getPropertiesForVariant(theme, variant, fill);\n  const disabledStyles = getPropertiesForDisabled(theme, variant, fill);\n  const focusStyle = getFocusStyles(theme);\n  const paddingMinusBorder = theme.spacing.gridSize * padding - 1;\n\n  return {\n    button: css({\n      label: 'button',\n      display: 'inline-flex',\n      alignItems: 'center',\n      fontSize: fontSize,\n      fontWeight: theme.typography.fontWeightMedium,\n      fontFamily: theme.typography.fontFamily,\n      padding: `0 ${paddingMinusBorder}px`,\n      height: theme.spacing(height),\n      // Deduct border from line-height for perfect vertical centering on windows and linux\n      lineHeight: `${theme.spacing.gridSize * height - 2}px`,\n      verticalAlign: 'middle',\n      cursor: 'pointer',\n      borderRadius: theme.shape.radius.default,\n      '&:focus': focusStyle,\n      '&:focus-visible': focusStyle,\n      '&:focus:not(:focus-visible)': getMouseFocusStyles(theme),\n      ...(fullWidth && {\n        flexGrow: 1,\n        justifyContent: 'center',\n      }),\n      ...variantStyles,\n      ':disabled': disabledStyles,\n      '&[disabled]': disabledStyles,\n    }),\n    disabled: css(disabledStyles, {\n      '&:hover': css(disabledStyles),\n    }),\n    img: css({\n      width: '16px',\n      height: '16px',\n      margin: theme.spacing(0, 1, 0, 0.5),\n    }),\n    icon: iconOnly\n      ? css({\n          // Important not to set margin bottom here as it would override internal icon bottom margin\n          marginRight: theme.spacing(-padding / 2),\n          marginLeft: theme.spacing(-padding / 2),\n        })\n      : css({\n          marginRight: theme.spacing(padding / 2),\n        }),\n    content: css({\n      display: 'flex',\n      flexDirection: 'row',\n      alignItems: 'center',\n      whiteSpace: 'nowrap',\n      overflow: 'hidden',\n      height: '100%',\n    }),\n  };\n};\n\nfunction getButtonVariantStyles(theme: GrafanaTheme2, color: ThemeRichColor, fill: ButtonFill) {\n  let outlineBorderColor = color.border;\n  let borderColor = 'transparent';\n  let hoverBorderColor = 'transparent';\n\n  // Secondary button has some special rules as we lack theem color token to\n  // specify border color for normal button vs border color for outline button\n  if (color.name === 'secondary') {\n    borderColor = color.border;\n    hoverBorderColor = theme.colors.emphasize(color.border, 0.25);\n    outlineBorderColor = theme.colors.border.strong;\n  }\n\n  if (fill === 'outline') {\n    return {\n      background: 'transparent',\n      color: color.text,\n      border: `1px solid ${outlineBorderColor}`,\n      transition: theme.transitions.create(['background-color', 'border-color', 'color'], {\n        duration: theme.transitions.duration.short,\n      }),\n\n      '&:hover': {\n        background: color.transparent,\n        borderColor: theme.colors.emphasize(outlineBorderColor, 0.25),\n        color: color.text,\n      },\n    };\n  }\n\n  if (fill === 'text') {\n    return {\n      background: 'transparent',\n      color: color.text,\n      border: '1px solid transparent',\n      transition: theme.transitions.create(['background-color', 'color'], {\n        duration: theme.transitions.duration.short,\n      }),\n\n      '&:focus': {\n        outline: 'none',\n        textDecoration: 'none',\n      },\n\n      '&:hover': {\n        background: color.transparent,\n        textDecoration: 'none',\n      },\n    };\n  }\n\n  return {\n    background: color.main,\n    color: color.contrastText,\n    border: `1px solid ${borderColor}`,\n    transition: theme.transitions.create(['background-color', 'box-shadow', 'border-color', 'color'], {\n      duration: theme.transitions.duration.short,\n    }),\n\n    '&:hover': {\n      background: color.shade,\n      color: color.contrastText,\n      boxShadow: theme.shadows.z1,\n      borderColor: hoverBorderColor,\n    },\n  };\n}\n\nfunction getPropertiesForDisabled(theme: GrafanaTheme2, variant: ButtonVariant, fill: ButtonFill) {\n  const disabledStyles = {\n    cursor: 'not-allowed',\n    boxShadow: 'none',\n    color: theme.colors.text.disabled,\n    transition: 'none',\n  };\n\n  if (fill === 'text') {\n    return {\n      ...disabledStyles,\n      background: 'transparent',\n      border: `1px solid transparent`,\n    };\n  }\n\n  if (fill === 'outline') {\n    return {\n      ...disabledStyles,\n      background: 'transparent',\n      border: `1px solid ${theme.colors.border.weak}`,\n    };\n  }\n\n  return {\n    ...disabledStyles,\n    background: theme.colors.action.disabledBackground,\n    border: `1px solid transparent`,\n  };\n}\n\nexport function getPropertiesForVariant(theme: GrafanaTheme2, variant: ButtonVariant, fill: ButtonFill) {\n  switch (variant) {\n    case 'secondary':\n      // The seconday button has some special handling as it's outline border is it's default color border\n      return getButtonVariantStyles(theme, theme.colors.secondary, fill);\n\n    case 'destructive':\n      return getButtonVariantStyles(theme, theme.colors.error, fill);\n\n    case 'success':\n      return getButtonVariantStyles(theme, theme.colors.success, fill);\n\n    case 'primary':\n    default:\n      return getButtonVariantStyles(theme, theme.colors.primary, fill);\n  }\n}\n\nexport const clearButtonStyles = (theme: GrafanaTheme2) => {\n  return css({\n    background: 'transparent',\n    color: theme.colors.text.primary,\n    border: 'none',\n    padding: 0,\n  });\n};\n\nexport const clearLinkButtonStyles = (theme: GrafanaTheme2) => {\n  return css({\n    background: 'transparent',\n    border: 'none',\n    padding: 0,\n    fontFamily: 'inherit',\n    color: 'inherit',\n    height: '100%',\n    cursor: 'context-menu',\n    '&:hover': {\n      background: 'transparent',\n      color: 'inherit',\n    },\n  });\n};\n"],"names":[],"mappings":"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"}