Components
- Accordion
- Alert
- Alert Dialog
- Autocomplete
- Avatar
- Badge
- Breadcrumb
- Button
- Card
- Checkbox
- Checkbox Group
- Collapsible
- Combobox
- Dialog
- Field
- Fieldset
- Form
- Frame
- Group
- Input
- Label
- Menu
- Meter
- Number Field
- Pagination
- Popover
- Preview Card
- Progress
- Radio Group
- Scroll Area
- Select
- Separator
- Sheet
- Slider
- Switch
- Table
- Tabs
- Textarea
- Toast
- Toggle
- Toggle Group
- Toolbar
- Tooltip
Resources
Tooltip
A popup that appears when an element is hovered or focused, showing a hint for sighted users.
import { Button } from "@/components/ui/button"
import {
Tooltip,
TooltipPopup,
TooltipTrigger,
} from "@/components/ui/tooltip"
export function TooltipDemo() {
return (
<Tooltip>
<TooltipTrigger render={<Button variant="outline" />}>
Hover me
</TooltipTrigger>
<TooltipPopup>Helpful hint</TooltipPopup>
</Tooltip>
)
}
Installation
pnpm dlx shadcn@latest add https://coss.com/ui/r/tooltip.json
Usage
import {
Tooltip,
TooltipPopup,
TooltipProvider,
TooltipTrigger,
} from "@/components/ui/tooltip"
<Tooltip>
<TooltipTrigger render={<Button variant="outline" />}>
Hover me
</TooltipTrigger>
<TooltipPopup>Helpful hint</TooltipPopup>
</Tooltip>
Grouping Tooltips
To group multiple tooltips so they appear instantly after the first one is opened, wrap them in TooltipProvider
. The grouping logic ensures that once a tooltip becomes visible, the adjacent tooltips will be shown instantly.
<TooltipProvider>
<Tooltip>
<TooltipTrigger render={<Button variant="outline" />}>
Tooltip 1
</TooltipTrigger>
<TooltipPopup>Content 1</TooltipPopup>
</Tooltip>
<Tooltip>
<TooltipTrigger render={<Button variant="outline" />}>
Tooltip 2
</TooltipTrigger>
<TooltipPopup>Content 2</TooltipPopup>
</Tooltip>
</TooltipProvider>
Examples
Grouped Tooltips
import { BoldIcon, ItalicIcon, UnderlineIcon } from "lucide-react"
import { Toggle, ToggleGroup } from "@/components/ui/toggle-group"
import {
Tooltip,
TooltipPopup,
TooltipProvider,
TooltipTrigger,
} from "@/components/ui/tooltip"
export function TooltipDemo() {
return (
<TooltipProvider>
<ToggleGroup defaultValue={["bold"]} multiple>
<Tooltip>
<TooltipTrigger
render={<Toggle value="bold" aria-label="Toggle bold" />}
>
<BoldIcon />
</TooltipTrigger>
<TooltipPopup>Bold</TooltipPopup>
</Tooltip>
<Tooltip>
<TooltipTrigger
render={<Toggle value="italic" aria-label="Toggle italic" />}
>
<ItalicIcon />
</TooltipTrigger>
<TooltipPopup>Italic</TooltipPopup>
</Tooltip>
<Tooltip>
<TooltipTrigger
render={<Toggle value="underline" aria-label="Toggle underline" />}
>
<UnderlineIcon />
</TooltipTrigger>
<TooltipPopup>Underline</TooltipPopup>
</Tooltip>
</ToggleGroup>
</TooltipProvider>
)
}
Comparing with Radix / shadcn
If you’re already familiar with Radix UI and shadcn/ui, this guide highlights the small differences and similarities so you can get started with coss.com ui quickly.
Quick Checklist
- Replace
asChild
→render
onTooltipTrigger
- Prefer
TooltipPopup
;TooltipContent
remains for legacy - If you used
asChild
on parts, switch to therender
prop
Comparison Example
<Tooltip>
<TooltipTrigger asChild>
<Button variant="outline">Hover me</Button>
</TooltipTrigger>
<TooltipContent>Helpful hint</TooltipContent>
</Tooltip>
<Tooltip>
<TooltipTrigger render={<Button variant="outline" />}>
Hover me
</TooltipTrigger>
<TooltipPopup>Helpful hint</TooltipPopup>
</Tooltip>