componentes / sobreposição
Tooltip
Mostre uma dica curta ao passar o mouse ou navegar com teclado.
tooltip-default.tsx
import { BoldIcon, ItalicIcon, LinkIcon, UnderlineIcon } from "lucide-react";
import { Button } from "@/components/ui/button";
import { Tip, TooltipProvider } from "@/components/ui/tooltip";
const tools = [
{ label: "Bold", Icon: BoldIcon },
{ label: "Italic", Icon: ItalicIcon },
{ label: "Underline", Icon: UnderlineIcon },
{ label: "Link", Icon: LinkIcon },
];
export default function TooltipDefault() {
return (
<TooltipProvider>
<div className="flex gap-1 rounded-lg border bg-background p-1">
{tools.map(({ label, Icon }) => (
<Tip content={label} key={label}>
<Button aria-label={label} size="icon-sm" variant="ghost">
<Icon aria-hidden="true" />
</Button>
</Tip>
))}
</div>
</TooltipProvider>
);
}Instalação
$ npx shadcn@latest add https://cd-ui.vercel.app/r/tooltip.jsonprimeira vez? configure o components.json e o tema antes: veja instalação.
Uso
import { Tip } from "@/components/ui/tooltip"
<Tip content="Bold">
<Button aria-label="Bold" size="icon-sm" variant="ghost">B</Button>
</Tip>
// full control
import { Tooltip, TooltipPopup, TooltipTrigger } from "@/components/ui/tooltip"
<Tooltip>
<TooltipTrigger aria-label="Help" onClick={openHelp} render={<Button />}>?</TooltipTrigger>
<TooltipPopup arrow side="bottom">help</TooltipPopup>
</Tooltip>Exemplos
Partes, lados e seta
As partes dão controle total. arrow adiciona uma seta apontando pro gatilho.
tooltip-parts.tsx
import { Button } from "@/components/ui/button";
import { Tooltip, TooltipPopup, TooltipTrigger } from "@/components/ui/tooltip";
export default function TooltipParts() {
return (
<div className="flex flex-wrap justify-center gap-3">
{(["top", "right", "bottom", "left"] as const).map((side) => (
<Tooltip key={side}>
<TooltipTrigger render={<Button variant="outline" />}>{side}</TooltipTrigger>
<TooltipPopup arrow side={side}>
Tooltip on the {side}
</TooltipPopup>
</Tooltip>
))}
</div>
);
}API
TooltipProvider
Base UI · Tooltip.ProviderOpcional. Compartilha o atraso entre tooltips vizinhos: depois do primeiro, os próximos abrem na hora.
| prop | tipo | padrão |
|---|---|---|
delayAtraso (ms) do primeiro tooltip. | number | 250 |
closeDelayAtraso (ms) antes de fechar. | number | 0 |
Tip
Atalho: envolve o elemento gatilho e mostra content num tooltip. Equivale a Tooltip + TooltipTrigger + TooltipPopup; aceita também side, sideOffset e arrow.
| prop | tipo | padrão |
|---|---|---|
contentO que o tooltip mostra. | ReactNode | - |
childrenO gatilho: um único elemento. | ReactElement | - |
Tooltip · TooltipTrigger
Base UI · Tooltip.Root · Tooltip.TriggerRaiz e gatilho.
| prop | tipo | padrão |
|---|---|---|
renderTroca o elemento renderizado mantendo comportamento e estilo (ex.: virar | ReactElement | (props) => ReactElement | - |
TooltipPopup
Base UI · Tooltip.PopupBalão pequeno no estilo Material. Nasce do gatilho em 160ms; os seguintes aparecem sem animação.
| prop | tipo | padrão |
|---|---|---|
sideLado preferido. | "top" | "bottom" | "left" | "right" | "top" |
sideOffsetDistância do gatilho (px). | number | 8 |
arrowMostra uma seta apontando pro gatilho. | boolean | false |
classNameClasses extras, mescladas com | string | - |
Acessibilidade
- Abre também com foco de teclado.
- Não coloque conteúdo interativo dentro do tooltip: use um Popover.