You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Tooltip.tsx 1.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import * as RadixTooltip from '@radix-ui/react-tooltip'
  2. import * as React from 'react'
  3. import { Kbd } from '~components/Kbd'
  4. import { styled } from '~styles'
  5. /* -------------------------------------------------- */
  6. /* Tooltip */
  7. /* -------------------------------------------------- */
  8. interface TooltipProps {
  9. children: React.ReactNode
  10. label: string
  11. kbd?: string
  12. side?: 'bottom' | 'left' | 'right' | 'top'
  13. }
  14. export function Tooltip({
  15. children,
  16. label,
  17. kbd: kbdProp,
  18. side = 'top',
  19. }: TooltipProps): JSX.Element {
  20. return (
  21. <RadixTooltip.Root>
  22. <RadixTooltip.Trigger asChild={true}>
  23. <span>{children}</span>
  24. </RadixTooltip.Trigger>
  25. <StyledContent side={side} sideOffset={8}>
  26. {label}
  27. {kbdProp ? <Kbd variant="tooltip">{kbdProp}</Kbd> : null}
  28. <StyledArrow />
  29. </StyledContent>
  30. </RadixTooltip.Root>
  31. )
  32. }
  33. const StyledContent = styled(RadixTooltip.Content, {
  34. borderRadius: 3,
  35. padding: '$3 $3 $3 $3',
  36. fontSize: '$1',
  37. backgroundColor: '$tooltipBg',
  38. color: '$tooltipText',
  39. boxShadow: '$3',
  40. display: 'flex',
  41. alignItems: 'center',
  42. fontFamily: '$ui',
  43. userSelect: 'none',
  44. })
  45. const StyledArrow = styled(RadixTooltip.Arrow, {
  46. fill: '$tooltipBg',
  47. margin: '0 8px',
  48. })