Skip to content

Tooltip

Tooltips display informative text when users interact with the trigger element. They appear on hover or long-press.

import { Tooltip, Button } from '@truongdq01/ui';
<Tooltip title="Save your changes">
<Button label="Save" />
</Tooltip>;
PropTypeDefaultDescription
titleReactNodeRequired. Content to display in tooltip
childrenReactElementRequired. Trigger element
openbooleanControlled open state
onOpen() => voidCallback when tooltip opens
onClose() => voidCallback when tooltip closes
placementTooltipPlacement"top"Position relative to trigger
type TooltipPlacement =
| 'top'
| 'top-start'
| 'top-end'
| 'bottom'
| 'bottom-start'
| 'bottom-end'
| 'left'
| 'left-start'
| 'left-end'
| 'right'
| 'right-start'
| 'right-end';
<Tooltip title="Top" placement="top">
<Button label="Top" />
</Tooltip>
<Tooltip title="Bottom" placement="bottom">
<Button label="Bottom" />
</Tooltip>
<Tooltip title="Left" placement="left">
<Button label="Left" />
</Tooltip>
<Tooltip title="Right" placement="right">
<Button label="Right" />
</Tooltip>
<Tooltip title="Top Start" placement="top-start">
<Button label="Top Start" />
</Tooltip>
<Tooltip title="Top End" placement="top-end">
<Button label="Top End" />
</Tooltip>
function ControlledTooltip() {
const [open, setOpen] = useState(false);
return (
<Tooltip
title="This tooltip is controlled"
open={open}
onOpen={() => setOpen(true)}
onClose={() => setOpen(false)}
>
<Button label="Hover me" />
</Tooltip>
);
}
<Tooltip
title={
<View>
<Text style={{ fontWeight: '600' }}>Keyboard Shortcuts</Text>
<Text>⌘ + S: Save</Text>
<Text>⌘ + P: Print</Text>
</View>
}
>
<Button label="Help" />
</Tooltip>
import { Info, HelpCircle } from "lucide-react-native";
<Tooltip title="Learn more about this feature">
<Pressable>
<Info size={20} />
</Pressable>
</Tooltip>
<Tooltip title="Need help?">
<Pressable>
<HelpCircle size={20} />
</Pressable>
</Tooltip>
<Tooltip title="Upgrade to Pro to unlock this feature">
<View>
<Button label="Export PDF" disabled />
</View>
</Tooltip>
<Tooltip title="Password must be at least 8 characters">
<Pressable>
<Info size={16} />
</Pressable>
</Tooltip>
  • Tooltip appears on hover
  • Disappears when mouse leaves
  • Tooltip appears after 400ms long press
  • Tap outside to dismiss
<Tooltip
title="Required field"
onOpen={() => console.log('Tooltip opened')}
onClose={() => console.log('Tooltip closed')}
>
<Button
label="Submit"
accessibilityLabel="Submit form"
accessibilityHint="Double tap to submit"
/>
</Tooltip>
  • Keep tooltip text concise (1-2 sentences)
  • Use for supplementary information only
  • Place on interactive elements
  • Use appropriate placement to avoid screen edges
  • Don’t put critical information in tooltips
  • Don’t nest tooltips
  • Don’t use for long explanations (use help text instead)
  • Don’t auto-dismiss too quickly
  • Tooltip uses Reanimated 3 for smooth fade animations
  • Position calculation happens on open
  • Modal-based for proper layering
  1. Ensure children is a valid React element
  2. Check that trigger has measurable dimensions
  3. Verify placement doesn’t push tooltip off-screen
  • Try different placement values
  • Ensure trigger element has proper layout
  • Check for parent overflow: hidden