overlays
Tooltip
A short, non-interactive label appears near a control on hover or focus, and nowhere else.
- overlays
- tooltip
- label
- hover
Label only, hover/focus only; Adaptive Popover is the interactive contextual surface.
Live preview
Quick usage
import { Tooltip } from "@pinky-ui/systems";
<Tooltip content="Copy to clipboard">
<button>Copy</button>
</Tooltip>Presets
Default
Restrained production behaviour.
Default behaviour
Quiet
Reduced intensity for dense product screens.
disabled={true}
Install
Add @pinky-ui/systems as a dependency, or use the CLI to copy this component's source directly into your project — no dependency to manage, fully editable.
npm install @pinky-ui/systemspnpm add @pinky-ui/systemsyarn add @pinky-ui/systemsnpx pinky-ui add tooltipPrefer to run the whole repository locally instead?
git clone https://github.com/florash/Pinky-UI.git
cd Pinky-UI
npm install
npm run devProps
| Prop | Type | Default | Description |
|---|---|---|---|
| content | ReactNode | — | The short label shown near the trigger. |
| className | string | — | Styles the outer interaction surface. |
Accessibility
- Keyboard and touch paths match the pointer interaction.
- Stable labels and values remain available without motion.
Performance
- Position is measured only on open, not continuously.
- Nothing mounts until the trigger is hovered or focused past the delay.
Reduced motion
Motion resolves immediately while semantics, focus and state remain unchanged.
When to use
- A short label that clarifies an icon-only or ambiguous control
When not to use
- Interactive content, actions or anything a touch user must reach — use Adaptive Popover
Skill
Purpose
A short, non-interactive label for a control — nothing more. Use it to clarify an icon-only button or an ambiguous action, and nothing that needs its own actions or focus.
Interaction anatomy
- A single trigger element owns the tooltip via
aria-describedby. - Opens on hover after a short delay, and immediately on focus.
- Closes on blur, mouse leave, or the trigger unmounting.
- Position is measured once on open and clamped to the viewport; it does not track continuously.
Good for
- Clarifying an icon-only button, a truncated label, or an abbreviation
- Supplementary context that is genuinely optional to read
Avoid for
- Anything interactive — links, buttons, forms — inside the bubble; that's [[adaptive-popover]]
- Content a touch user must be able to reach; hover has no touch equivalent, so nothing essential can live only in a tooltip
- Long explanations; if it needs more than a line, it needs a popover
Usage
<Tooltip content="Copy to clipboard">
<button aria-label="Copy">
<CopyIcon />
</button>
</Tooltip>Accessibility
role="tooltip"andaria-describedbyconnect the label to its trigger the standard way — no custom ARIA pattern to learn.- Keyboard focus opens it exactly like hover does; there is no keyboard-only path that misses it.
- Because it's non-interactive, nothing essential should ever live only inside a tooltip.
Performance
Position is measured once per open, not on every frame or scroll event — there's no ResizeObserver or continuous tracking loop running while it's visible.
Composes with
Magnetic Button and other icon-only controls, where the label clarifies an action without adding visible chrome. Reach for Adaptive Popover the moment the bubble needs to do more than label something.