Tooltip
Popup with brief information shown when user interacts with an element using keyboard focus or mouse hover.
#
Documentation
#
#
Usage
#
import { Button, Tooltip } from "@optiaxiom/react";
export function App() {
return (
<Tooltip content="Sample tooltip content">
<Button>Hover me</Button>
</Tooltip>
);
}#
Controlled
#
Use the open and defaultOpen props to toggle between controlled and uncontrolled usage. And combine it with onOpenChange to listen for changes to the state.
Open: false
"use client";
import { Button, Flex, Text, Tooltip } from "@optiaxiom/react";
import { useState } from "react";
export function App() {
const [open, setOpen] = useState(false);
return (
<Flex gap="12">
<Tooltip
content="This is a controlled tooltip"
onOpenChange={setOpen}
open={open}
>
<Button>Hover me</Button>
</Tooltip>
<Text>Open: {open ? "true" : "false"}</Text>
</Flex>
);
}#
Placement
#
Use the side and align props to control where the tooltip is placed by default.
import { Button, Grid, Tooltip } from "@optiaxiom/react";
import { Fragment } from "react";
export function App() {
return (
<Grid gap="8" gridTemplateColumns="3">
{(["top", "right", "bottom", "left"] as const).map((side) => (
<Fragment key={side}>
{(["start", "center", "end"] as const).map((align) => (
<Tooltip
align={align}
content={`${side} ${align}`}
key={align}
side={side}
>
<Button justifyContent="center" py="20">
{side} {align}
</Button>
</Tooltip>
))}
</Fragment>
))}
</Grid>
);
}#
Auto
#
Use the auto prop to only show the tooltip when the underlying text is clipped.
"use client";
import type { ComponentPropsWithoutRef } from "react";
import { Flex, Link, Text, Tooltip } from "@optiaxiom/react";
export function App({
auto = true,
}: Pick<ComponentPropsWithoutRef<typeof Tooltip>, "auto">) {
return (
<Flex alignItems="start" fontSize="md" w="224">
<Tooltip
auto={auto}
content="The quick brown fox jumps over the lazy dog."
>
<Link href="data:,">
<Text lineClamp="1">
The quick brown fox jumps over the lazy dog.
</Text>
</Link>
</Tooltip>
<Tooltip auto={auto} content="Sample non-clipped link">
<Link href="data:,">Sample non-clipped link</Link>
</Tooltip>
</Flex>
);
}#
Delay
#
Use the delayDuration prop to control how long to wait to open the tooltip after mouse hover.
import { Button, Flex, Tooltip } from "@optiaxiom/react";
export function App() {
return (
<Flex flexDirection="row">
<Tooltip content="Sample tooltip content" delayDuration={0}>
<Button>Delay duration 0ms</Button>
</Tooltip>
<Tooltip content="Sample tooltip content">
<Button>Delay duration 700ms</Button>
</Tooltip>
</Flex>
);
}#
Props
#
#
Tooltip
#
Doesn't render its own HTML element and forwards all props to the content component instead.
Prop |
|---|
align
|
aria-labelA more descriptive label for accessibility purpose
|
autoEnable this option to only show the tooltip when children is partially hidden due to text overflow.
|
className
|
contentThe tooltip content.
|
defaultOpenThe initial open state in uncontrolled mode.
|
delayDurationThe duration from when the pointer enters the trigger until the tooltip gets opened. This will override the prop with the same name passed to Provider. @defaultValue 700
|
disabledWhether to show or hide tooltip even if there’s content.
|
onEscapeKeyDownEvent handler called when the escape key is down. Can be prevented.
|
onOpenChangeHandler that is called when the open state changes.
|
onPointerDownOutsideEvent handler called when the a
|
openThe open state in controlled mode.
|
side
|
#
TooltipProvider
#
Doesn't render its own HTML element.
Prop |
|---|
delayDurationThe duration from when the pointer enters the trigger until the tooltip gets opened. @defaultValue 700
|
disableHoverableContentWhen
Default: |
skipDelayDurationHow much time a user has to enter another trigger without incurring a delay again. @defaultValue 300
|
#
Changelog
#
#
0.1.0
#
- Added component