shadcn.io is not affiliated with official shadcn/ui
Shadcn Tooltip for React and Tailwind
Display information on hover or focus.
Installation
bunx --bun shadcn@latest add https://kit.dev/r/tooltip.jsonpnpm dlx shadcn@latest add https://kit.dev/r/tooltip.jsonnpx shadcn@latest add https://kit.dev/r/tooltip.jsonyarn shadcn@latest add https://kit.dev/r/tooltip.jsonInstall the following dependencies:
bun add @ark-ui/reactpnpm add @ark-ui/reactnpm install @ark-ui/reactyarn add @ark-ui/reactCopy and paste the following code into your project.
"use client";
import { Portal } from "@ark-ui/react/portal";
import {
Tooltip as ArkTooltip,
useTooltipContext,
} from "@ark-ui/react/tooltip";
import type React from "react";
import { cn } from "@/lib/utils";
export const useTooltip = useTooltipContext;
export const Tooltip = (
props: React.ComponentProps<typeof ArkTooltip.Root>
) => {
const {
positioning = {
placement: "top",
},
lazyMount = true,
unmountOnExit = true,
closeDelay = 100,
openDelay = 0,
...rest
} = props;
return (
<ArkTooltip.Root
closeDelay={closeDelay}
data-slot="tooltip"
lazyMount={lazyMount}
openDelay={openDelay}
positioning={positioning}
unmountOnExit={unmountOnExit}
{...rest}
/>
);
};
export const TooltipTrigger = (
props: React.ComponentProps<typeof ArkTooltip.Trigger>
) => <ArkTooltip.Trigger data-slot="tooltip-trigger" {...props} />;
export const TooltipContent = (
props: React.ComponentProps<typeof ArkTooltip.Content>
) => {
const { className, children, ...rest } = props;
return (
<Portal>
<ArkTooltip.Positioner data-slot="tooltip-positioner">
<ArkTooltip.Content
className={cn(
"z-50 w-fit",
"px-3 py-1.5",
"bg-foreground",
"text-background text-xs",
"rounded-lg shadow-lg/5",
"origin-(--transform-origin) animate-in",
"fade-in-0 zoom-in-[98%]",
"data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-[98%]",
"data-[state=closed]:animate-out",
"data-[placement=bottom]:slide-in-from-top-2",
"data-[placement=left]:slide-in-from-end-2",
"data-[placement=right]:slide-in-from-start-2",
"data-[placement=top]:slide-in-from-bottom-2",
"motion-reduce:animate-none!",
className
)}
data-slot="tooltip-content"
{...rest}
>
<TooltipArrow />
{children}
</ArkTooltip.Content>
</ArkTooltip.Positioner>
</Portal>
);
};
export const TooltipArrow = (
props: React.ComponentProps<typeof ArkTooltip.Arrow>
) => {
const { style, ...rest } = props;
return (
<ArkTooltip.Arrow
data-slot="tooltip-arrow"
style={
{
"--arrow-background": "var(--foreground)",
"--arrow-size": "calc(1.5 * var(--spacing))",
...style,
} as React.CSSProperties
}
{...rest}
>
<ArkTooltip.ArrowTip />
</ArkTooltip.Arrow>
);
};Update the import paths to match your project setup.
Anatomy
TooltipTrigger
TooltipArrow
└── TooltipArrowTip
TooltipContent
└── TooltipPositionerUsage
import {
BoldIcon,
ItalicIcon,
StrikethroughIcon,
UnderlineIcon,
} from "lucide-react";
import { Button } from "@/components/ui/button";
import { ButtonGroup } from "@/components/ui/button-group";
import {
Tooltip,
TooltipContent,
TooltipTrigger,
} from "@/components/ui/tooltip";<ButtonGroup>
<Tooltip>
<TooltipTrigger asChild>
<Button clickEffect={false} size="icon-md" variant="outline">
<BoldIcon />
</Button>
</TooltipTrigger>
<TooltipContent>Bold</TooltipContent>
</Tooltip>
<Tooltip>
<TooltipTrigger asChild>
<Button clickEffect={false} size="icon-md" variant="outline">
<ItalicIcon />
</Button>
</TooltipTrigger>
<TooltipContent>Italic</TooltipContent>
</Tooltip>
<Tooltip>
<TooltipTrigger asChild>
<Button clickEffect={false} size="icon-md" variant="outline">
<UnderlineIcon />
</Button>
</TooltipTrigger>
<TooltipContent>Underline</TooltipContent>
</Tooltip>
<Tooltip>
<TooltipTrigger asChild>
<Button clickEffect={false} size="icon-md" variant="outline">
<StrikethroughIcon />
</Button>
</TooltipTrigger>
<TooltipContent>Strikethrough</TooltipContent>
</Tooltip>
</ButtonGroup>Accessibility
| Key | Description |
|---|---|
Enter | Activate the focused item. |
Space | Activate the focused control. |
Demos
Disabled Button
Side
With Keyboard Shortcut
API Reference
Tooltip
PropType
AttributeType
TooltipTrigger
button
PropType
AttributeType
TooltipArrow
div
PropType
AttributeType
CSS variableType
TooltipArrowTip
div
PropType
AttributeType
CSS variableType
TooltipPositioner
div
PropType
AttributeType
CSS variableType
TooltipContent
div
PropType
AttributeType
CSS variableType
useTooltip
PropType