A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.
1'use client';23import { Button } from '@/components/ui/button';4import { Tooltip } from '@/components/ui/tooltip';56export function Default() {7 return (8 <Tooltip>9 <Tooltip.Trigger asChild>10 <Button variant="outline">Hover me</Button>11 </Tooltip.Trigger>12 <Tooltip.Content>13 <p>Add to library</p>14 </Tooltip.Content>15 </Tooltip>16 );17}
Installation
pnpm dlx mateui add tooltip
Anatomy
1import { Tooltip } from '@/components/ui/tooltip';
1<Tooltip>2 <Tooltip.Trigger asChild>3 <Button variant="outline">Hover me</Button>4 </Tooltip.Trigger>5 <Tooltip.Content>6 <p>Helpful tooltip text</p>7 </Tooltip.Content>8</Tooltip>
Features
- Multiple positions - Top, bottom, left, or right placement
- Delay control - Configurable hover delay
- Smooth animations - Fade and blur entrance effects
- Arrow indicator - Visual pointer to the trigger element
Variants
Positions
1'use client';23import { Button } from '@/components/ui/button';4import { Tooltip } from '@/components/ui/tooltip';56export function Positions() {7 return (8 <div className="flex flex-col items-center gap-10 md:flex-row">9 <Tooltip>10 <Tooltip.Trigger asChild>11 <Button variant="outline">Top</Button>12 </Tooltip.Trigger>13 <Tooltip.Content side="top">Tooltip on top</Tooltip.Content>14 </Tooltip>1516 <Tooltip>17 <Tooltip.Trigger asChild>18 <Button variant="outline">Bottom</Button>19 </Tooltip.Trigger>20 <Tooltip.Content side="bottom">Tooltip on bottom</Tooltip.Content>21 </Tooltip>2223 <Tooltip>24 <Tooltip.Trigger asChild>25 <Button variant="outline">Left</Button>26 </Tooltip.Trigger>27 <Tooltip.Content side="left">Tooltip on left</Tooltip.Content>28 </Tooltip>2930 <Tooltip>31 <Tooltip.Trigger asChild>32 <Button variant="outline">Right</Button>33 </Tooltip.Trigger>34 <Tooltip.Content side="right">Tooltip on right</Tooltip.Content>35 </Tooltip>36 </div>37 );38}
API Reference
Tooltip
| Prop | Type | Default | Description |
|---|---|---|---|
delayDuration | number | 200 | Delay before showing (ms) |
open | boolean | - | Controlled open state |
onOpenChange | (open: boolean) => void | - | Callback when state changes |
Tooltip.Trigger
| Prop | Type | Default | Description |
|---|---|---|---|
asChild | boolean | false | Render as child element |
className | string | - | Additional CSS classes |
Tooltip.Content
| Prop | Type | Default | Description |
|---|---|---|---|
side | 'top' | 'bottom' | 'left' | 'right' | 'top' | Tooltip position |
sideOffset | number | 4 | Distance from trigger (px) |
className | string | - | Additional CSS classes |
Variants
Different Positions
1// Top (default)2<Tooltip>3 <Tooltip.Trigger asChild>4 <Button>Top</Button>5 </Tooltip.Trigger>6 <Tooltip.Content side="top">7 <p>Tooltip on top</p>8 </Tooltip.Content>9</Tooltip>1011// Bottom12<Tooltip>13 <Tooltip.Trigger asChild>14 <Button>Bottom</Button>15 </Tooltip.Trigger>16 <Tooltip.Content side="bottom">17 <p>Tooltip on bottom</p>18 </Tooltip.Content>19</Tooltip>
Custom Delay
1<Tooltip delayDuration={500}>2 <Tooltip.Trigger asChild>3 <Button>Slow tooltip</Button>4 </Tooltip.Trigger>5 <Tooltip.Content>6 <p>This appears after 500ms</p>7 </Tooltip.Content>8</Tooltip>