diff --git a/packages/headless/package.json b/packages/headless/package.json index 8080f593513..3c3e24d0d99 100644 --- a/packages/headless/package.json +++ b/packages/headless/package.json @@ -12,6 +12,10 @@ "import": "./dist/primitives/tabs/index.js", "types": "./dist/primitives/tabs/index.d.ts" }, + "./tooltip": { + "import": "./dist/primitives/tooltip/index.js", + "types": "./dist/primitives/tooltip/index.d.ts" + }, "./dialog": { "import": "./dist/primitives/dialog/index.js", "types": "./dist/primitives/dialog/index.d.ts" diff --git a/packages/headless/src/primitives/tooltip/README.md b/packages/headless/src/primitives/tooltip/README.md new file mode 100644 index 00000000000..41cca266d07 --- /dev/null +++ b/packages/headless/src/primitives/tooltip/README.md @@ -0,0 +1,115 @@ +# Tooltip + +A floating label that appears on hover or focus. Non-interactive, used for supplementary descriptions. No focus trapping — tooltips never receive focus. + +## When to Use + +- Describing icon buttons, truncated text, or any element that benefits from a short label. +- When the content is display-only (no interactive elements inside). +- Prefer Tooltip over Popover when the content is a simple text label that should appear on hover/focus and disappear immediately. + +## Usage + +```tsx +import { Tooltip } from '@/primitives/tooltip'; + + + + + + + + Settings + + + +; +``` + +### Controlled + +```tsx +const [open, setOpen] = useState(false); + + + {/* ... */} +; +``` + +### Custom Delay + +```tsx + + {/* Opens after 500ms hover, closes 100ms after leaving */} + +``` + +## Parts + +| Part | Default Element | Description | +| -------------------- | --------------- | ------------------------------------------------ | +| `Tooltip` | — | Root context provider | +| `Tooltip.Trigger` | `