Vercel wordmark
Tremor is joining Vercel.

UI

Tooltip

A popup displaying element information when it’s focused or hovered.

Installation

  1. 1

    Install dependencies:

    npm install @radix-ui/react-tooltip
  2. 2

    Add component:

    Copy and paste the code into your project’s component directory. Do not forget to update the import paths.
    // Tremor Tooltip [v1.0.0]
    import React from "react"import * as TooltipPrimitives from "@radix-ui/react-tooltip"
    import { cx } from "@/lib/utils"
    interface TooltipProps  extends Omit<TooltipPrimitives.TooltipContentProps, "content" | "onClick">,  Pick<    TooltipPrimitives.TooltipProps,    "open" | "defaultOpen" | "onOpenChange" | "delayDuration"  > {  content: React.ReactNode  onClick?: React.MouseEventHandler<HTMLButtonElement>  side?: "bottom" | "left" | "top" | "right"  showArrow?: boolean}
    const Tooltip = React.forwardRef<  React.ElementRef<typeof TooltipPrimitives.Content>,  TooltipProps>(  (    {      children,      className,      content,      delayDuration,      defaultOpen,      open,      onClick,      onOpenChange,      showArrow = true,      side,      sideOffset = 10,      asChild,      ...props    }: TooltipProps,    forwardedRef,  ) => {    return (      <TooltipPrimitives.Provider delayDuration={150}>        <TooltipPrimitives.Root          open={open}          defaultOpen={defaultOpen}          onOpenChange={onOpenChange}          delayDuration={delayDuration}          tremor-id="tremor-raw"        >          <TooltipPrimitives.Trigger onClick={onClick} asChild={asChild}>            {children}          </TooltipPrimitives.Trigger>          <TooltipPrimitives.Portal>            <TooltipPrimitives.Content              ref={forwardedRef}              side={side}              sideOffset={sideOffset}              align="center"              className={cx(                // base                "max-w-60 select-none rounded-md px-2.5 py-1.5 text-sm leading-5 shadow-md",                // text color                "text-gray-50 dark:text-gray-900",                // background color                "bg-gray-900 dark:bg-gray-50",                // transition                "will-change-[transform,opacity]",                "data-[side=bottom]:animate-slide-down-and-fade data-[side=left]:animate-slide-left-and-fade data-[side=right]:animate-slide-right-and-fade data-[side=top]:animate-slide-up-and-fade data-[state=closed]:animate-hide",                className,              )}              {...props}            >              {content}              {showArrow ? (                <TooltipPrimitives.Arrow                  className="border-none fill-gray-900 dark:fill-gray-50"                  width={12}                  height={7}                  aria-hidden="true"                />              ) : null}            </TooltipPrimitives.Content>          </TooltipPrimitives.Portal>        </TooltipPrimitives.Root>      </TooltipPrimitives.Provider>    )  },)
    Tooltip.displayName = "Tooltip"
    export { Tooltip, type TooltipProps }
    
  3. 3

    Update globals.css

    Extend your theme with our animation and keyframes.
    @theme {  --animate-hide: hide 150ms cubic-bezier(0.16, 1, 0.3, 1);  --animate-slide-down-and-fade: slideDownAndFade 150ms cubic-bezier(0.16, 1, 0.3, 1);  --animate-slide-left-and-fade: slideLeftAndFade 150ms cubic-bezier(0.16, 1, 0.3, 1);  --animate-slide-up-and-fade: slideUpAndFade 150ms cubic-bezier(0.16, 1, 0.3, 1);  --animate-slide-right-and-fade: slideRightAndFade 150ms cubic-bezier(0.16, 1, 0.3, 1);
      @keyframes hide {    from {      opacity: 1;    }    to {      opacity: 0;    }  }  @keyframes slideDownAndFade {    from {      opacity: 0;      transform: translateY(-6px);    }    to {      opacity: 1;      transform: translateY(0);    }  }  @keyframes slideLeftAndFade {    from {      opacity: 0;      transform: translateX(6px);    }    to {      opacity: 1;      transform: translateX(0);    }  }  @keyframes slideUpAndFade {    from {      opacity: 0;      transform: translateY(6px);    }    to {      opacity: 1;      transform: translateY(0);    }  }  @keyframes slideRightAndFade {    from {      opacity: 0;      transform: translateX(-6px);    }    to {      opacity: 1;      transform: translateX(0);    }  }}
    

Example: Tooltip Sides

There are 4 Tooltip sides. To can set a side, use the side prop.

Example: No arrow

To disable the arrow indicator, use the showArrow prop.

API Reference: Tooltip

This component uses the Radix UI API.

content
Required
React.ReactNode
Tooltip text on hover.
side
"bottom" | "left" | "top" | "right"
Placement of the tooltip relative to the trigger

Default: "top"

showArrow
boolean
Small arrow pointing to the tooltip trigger.

Default: true

asChild
boolean
When enabled, the wrapper component is rendered as the first child element and its properties combined. Does not work with icons.

Default: false