Get Started
Input
Feedback
Display
Installation
i18n
A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.
import { Button } from "@/components/ui/button"
import {
Tooltip,Installation#
Run the following command:
pnpm dlx shadcn@latest add https://ui.tyap.me/r/styles/base/tooltip.jsonnpx shadcn@latest add https://ui.tyap.me/r/styles/base/tooltip.jsonyarn dlx shadcn@latest add https://ui.tyap.me/r/styles/base/tooltip.jsonbunx --bun shadcn@latest add https://ui.tyap.me/r/styles/base/tooltip.json
Add the TooltipProvider to the root of your app.
import { TooltipProvider } from "@/components/ui/tooltip"
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
<TooltipProvider>{children}</TooltipProvider>
</body>
</html>
)
}Install the following dependencies:
pnpm add @base-ui/reactnpm install @base-ui/reactyarn add @base-ui/reactbun add @base-ui/react
Copy and paste the following code into your project.
"use client"
import * as React from "react"
import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip"
import { cn } from "@/lib/utils"
function TooltipProvider({
delayDuration,
delay = 0,
...props
}: TooltipPrimitive.Provider.Props & { delayDuration?: number }) {
return (
<TooltipPrimitive.Provider
data-slot="tooltip-provider"
delay={delayDuration ?? delay}
{...props}
/>
)
}
function Tooltip({ ...props }: TooltipPrimitive.Root.Props) {
return <TooltipPrimitive.Root data-slot="tooltip" {...props} />
}
function TooltipTrigger({
asChild,
children,
render,
...props
}: TooltipPrimitive.Trigger.Props & {
asChild?: boolean
children?: React.ReactNode
}) {
const resolvedRender =
asChild && React.isValidElement(children) ? children : render
return (
<TooltipPrimitive.Trigger
data-slot="tooltip-trigger"
render={resolvedRender}
{...props}
>
{asChild ? undefined : children}
</TooltipPrimitive.Trigger>
)
}
function TooltipArrow({
className,
...props
}: TooltipPrimitive.Arrow.Props & { className?: string }) {
return (
<TooltipPrimitive.Arrow
data-slot="tooltip-arrow"
className={cn(
"z-50 data-[side=bottom]:top-1 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5",
className
)}
{...props}
/>
)
}
function TooltipContent({
className,
side = "top",
sideOffset = 4,
align = "center",
alignOffset = 0,
showArrow = false,
children,
...props
}: TooltipPrimitive.Popup.Props &
Pick<
TooltipPrimitive.Positioner.Props,
"align" | "alignOffset" | "side" | "sideOffset"
> & {
showArrow?: boolean
}) {
return (
<TooltipPrimitive.Portal>
<TooltipPrimitive.Positioner
align={align}
alignOffset={alignOffset}
side={side}
sideOffset={sideOffset}
className="isolate z-50"
>
<TooltipPrimitive.Popup
data-slot="tooltip-content"
className={cn(
"z-50 w-fit max-w-xs origin-(--transform-origin)",
className
)}
{...props}
>
{children}
{showArrow && <TooltipArrow />}
</TooltipPrimitive.Popup>
</TooltipPrimitive.Positioner>
</TooltipPrimitive.Portal>
)
}
export {
Tooltip,
TooltipArrow,
TooltipContent,
TooltipProvider,
TooltipTrigger,
}
Update the import paths to match your project setup.
Add the TooltipProvider to the root of your app.
import { TooltipProvider } from "@/components/ui/tooltip"
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
<TooltipProvider>{children}</TooltipProvider>
</body>
</html>
)
}Usage#
import {
Tooltip,
TooltipContent,
TooltipTrigger,
} from "@/components/ui/tooltip"<Tooltip>
<TooltipTrigger>Hover</TooltipTrigger>
<TooltipContent>
<p>Add to library</p>
</TooltipContent>
</Tooltip>Composition#
Use the following composition to build a Tooltip:
Tooltip
├── TooltipTrigger
└── TooltipContentExamples#
Side#
Use the side prop to change the position of the tooltip.
import { Button } from "@/components/ui/button"
import {
Tooltip,With Keyboard Shortcut#
import { SaveIcon } from "lucide-react"
import { Button } from "@/components/ui/button"Disabled Button#
Show a tooltip on a disabled button by wrapping it with a span.
import { Button } from "@/components/ui/button"
import {
Tooltip,RTL#
To enable RTL support in shadcn/ui, see the RTL configuration guide.
"use client"
import {API Reference#
See the Base UI Tooltip documentation.