bx

Tooltip

A popup that displays information related to an element on focus or hover.

tsx
<Tooltip>
  <TooltipTrigger>
    <Button variant="outline">Hover</Button>
  </TooltipTrigger>
  <TooltipContent>Add to library</TooltipContent>
</Tooltip>

Tooltip — infobulle contextuelle qui apparaît au hover ou au focus du trigger. Contenu court (nom d'un bouton icône, shortcut clavier, description brève). Pour du contenu riche préférer HoverCard.

Pattern PRISM : le trigger et le content sont frères dans un wrapper Tooltip. L'island CSS-only rend le content via opacity-0 → group-hover:opacity-100 group-focus-within:opacity-100. Zéro JS.

Installation

Terminal
$ bext ui add tooltip

Usage

tsx
import { Tooltip, TooltipTrigger, TooltipContent } from "@bext-stack/ui/primitives"

<Tooltip>
  <TooltipTrigger>
    <Button variant="outline">Hover</Button>
  </TooltipTrigger>
  <TooltipContent>Add to library</TooltipContent>
</Tooltip>

Anatomy

<Tooltip>
  ├── <TooltipTrigger>
  │   └── <Button>Hover me</Button>
  └── <TooltipContent>Add to library</TooltipContent>

API Reference

Tooltip

Prop Type Default Description
className string Wrapper relative inline-block (group).

TooltipTrigger

Prop Type Default Description
children ReactNode Élément déclencheur (bouton, icône, texte).

TooltipContent

Prop Type Default Description
className string Contenu de l'infobulle. Défaut : absolute bg-primary text-primary-foreground text-xs px-2 py-1 rounded-md, invisible → visible au hover.

Data Attributes

Attributs qu'on peut cibler en CSS custom pour override le style par état.

Attribute On Values Description
group Tooltip Utilisé par group-hover: / group-focus-within: sur TooltipContent.

Keyboard

Key Action
Tab Focus le trigger → tooltip visible.

Accessibility

TooltipContent devrait porter role="tooltip" pour être annoncé aux AT.

Le trigger doit rester utilisable au clavier (pas seulement au hover). Le CSS group-focus-within active le tooltip aussi au focus keyboard — vérifier.

Contenu doit rester court (≤ 60 caractères). Pour plus, utiliser HoverCard ou Popover.

Examples

Sur icône (icon button)

tsx
<Tooltip>
  <TooltipTrigger>
    <Button variant="ghost" size="icon" aria-label="Copy"><CopyIcon /></Button>
  </TooltipTrigger>
  <TooltipContent>Copy to clipboard</TooltipContent>
</Tooltip>
Try it live
Open in play

Edit this component live in the bext playground. The PRISM + signals version is the bext-native idiom — fine-grained reactivity, no virtual DOM.

src/app/page.tsx 2 files · signals · runs in your browser
Pure PRISM + real bext signals — fine-grained, no re-render.