Getting Started
Components52
- Accordion
- Alert
- Alert Dialog
- Attachment
- Badge
- Breadcrumb
- Bubble
- Button
- Button Group
- Calendar
- Card
- Checkbox
- Collapsible
- Command
- Context Menu
- Data Table
- Dialog
- Drawer
- Dropdown Menu
- Empty
- Field
- Hover Card
- Input
- Input Group
- Item
- Kbd
- Label
- Marker
- Menubar
- Message
- Message Scroller
- Pagination
- Popover
- Progress
- Questionnaire
- Radio Group
- Scroll Area
- Select
- Separator
- Sheet
- Sidebar
- Skeleton
- Slider
- Sonner
- Spinner
- Switch
- Table
- Tabs
- Textarea
- Toggle
- Toggle Group
- Tooltip
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, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"
export function TooltipDemo() {
return (
<Tooltip>
<TooltipTrigger render={<Button variant="secondary" />}>
Hover
</TooltipTrigger>
<TooltipContent>Add to library</TooltipContent>
</Tooltip>
)
}Installation#
pnpm dlx shadcn@latest add https://ui.ikramhasan.com/r/tooltip.json
Usage#
import {
Tooltip,
TooltipContent,
TooltipTrigger,
} from "@/components/ui/tooltip"<Tooltip>
<TooltipTrigger>Hover</TooltipTrigger>
<TooltipContent>
<p>Add to library</p>
</TooltipContent>
</Tooltip>Examples#
Sides#
import { Button } from "@/components/ui/button"
import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"
export function TooltipSides() {
return (
<div className="flex flex-wrap items-center gap-2">
{(["top", "right", "bottom", "left"] as const).map((side) => (
<Tooltip key={side}>
<TooltipTrigger
render={<Button variant="outline" className="capitalize" />}
>
{side}
</TooltipTrigger>
<TooltipContent side={side}>Opens on the {side}</TooltipContent>
</Tooltip>
))}
</div>
)
}With shortcut#
import {
BoldIcon,
ItalicIcon,
StrikethroughIcon,
UnderlineIcon,
} from "lucide-react"
import { Button } from "@/components/ui/button"
import { Kbd, KbdGroup } from "@/components/ui/kbd"
import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"
export function TooltipWithShortcut() {
return (
<div className="flex items-center gap-0.5">
{formats.map(({ label, icon: Icon, key }) => (
<Tooltip key={label}>
<TooltipTrigger
render={
<Button variant="ghost" size="icon-sm" aria-label={label} />
}
>
<Icon />
</TooltipTrigger>
<TooltipContent>
{label}
<KbdGroup>
<Kbd>⌘</Kbd>
<Kbd>{key}</Kbd>
</KbdGroup>
</TooltipContent>
</Tooltip>
))}
</div>
)
}
const formats = [
{ label: "Bold", icon: BoldIcon, key: "B" },
{ label: "Italic", icon: ItalicIcon, key: "I" },
{ label: "Underline", icon: UnderlineIcon, key: "U" },
{ label: "Strikethrough", icon: StrikethroughIcon, key: "X" },
]Long content#
import { Button } from "@/components/ui/button"
import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"
export function TooltipLongContent() {
return (
<Tooltip>
<TooltipTrigger render={<Button variant="outline" />}>
Sync status
</TooltipTrigger>
<TooltipContent>
Last synced 2 minutes ago. Changes made offline upload as soon as you
reconnect.
</TooltipContent>
</Tooltip>
)
}Disabled#
import { Button } from "@/components/ui/button"
import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"
export function TooltipDisabled() {
return (
<Tooltip disabled>
<TooltipTrigger render={<Button variant="secondary" />}>
Hover
</TooltipTrigger>
<TooltipContent>Never shows</TooltipContent>
</Tooltip>
)
}API Reference#
Tooltip is built on the Base UI Tooltip primitive. See the Base UI documentation for every prop.