questionTooltip.tsx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import * as React from 'react';
  2. import styled from '@emotion/styled';
  3. import Tooltip from 'sentry/components/tooltip';
  4. import {IconQuestion} from 'sentry/icons';
  5. import {IconSize} from 'sentry/utils/theme';
  6. type ContainerProps = {
  7. size: IconSize | string;
  8. className?: string;
  9. };
  10. const QuestionIconContainer = styled('span')<ContainerProps>`
  11. display: inline-block;
  12. height: ${p => p.theme.iconSizes[p.size] ?? p.size};
  13. line-height: ${p => p.theme.iconSizes[p.size] ?? p.size};
  14. & svg {
  15. transition: 120ms opacity;
  16. color: ${p => p.theme.gray300};
  17. opacity: 0.6;
  18. &:hover {
  19. opacity: 1;
  20. }
  21. }
  22. `;
  23. type QuestionProps = {
  24. size: string;
  25. title: React.ReactNode;
  26. className?: string;
  27. } & Pick<React.ComponentProps<typeof Tooltip>, 'position'> &
  28. Partial<
  29. Pick<
  30. React.ComponentProps<typeof Tooltip>,
  31. 'containerDisplayMode' | 'isHoverable' | 'popperStyle'
  32. >
  33. >;
  34. function QuestionTooltip({title, size, className, ...tooltipProps}: QuestionProps) {
  35. return (
  36. <QuestionIconContainer size={size} className={className}>
  37. <Tooltip title={title} {...tooltipProps}>
  38. <IconQuestion size={size} />
  39. </Tooltip>
  40. </QuestionIconContainer>
  41. );
  42. }
  43. export default QuestionTooltip;