Tooltip
a primitive for creating Tooltip component.
- View ARIA pattern W3C
- View source code GitHub
- View code coverage v8-coverage
- View type documentation typedoc
Anatomy
API Reference
const state = createTooltipTriggerState(args: TooltipTriggerStateArguments): TooltipTriggerState;
const { tooltipProps, triggerProps} = createTooltipTrigger<T extends HTMLElement>(props: TooltipTriggerArguments, state: TooltipTriggerState, ref: Accessor<T>): AriaTooltipTrigger
const { tooltipProps} = createTooltip(props: TooltipArguments, state: Accessor<TooltipTriggerState>): AriaTooltipParameters
createTooltipTriggerState [TooltipTriggerStateArguments]
| Name | Type | Default | Description |
|---|---|---|---|
| closeDelay | number | 500 | The delay time for the tooltip to close. |
| defaultOpen | boolean | - | Whether the overlay is open by default (uncontrolled). |
| delay | number | 1500 | The delay time for the tooltip to show up. |
| isOpen | boolean | - | Whether the overlay is open by default (controlled). |
| onOpenChange | (isOpen: boolean) => void | - | Handler that is called when the overlay's open state changes. |
createTooltipTrigger [TooltipTriggerArguments]
| Name | Type | Default | Description |
|---|---|---|---|
| isDisabled | boolean | false | Whether the tooltip should be disabled, independent from the trigger. |
| trigger | 'focus' | undefined | - | By default, opens for both focus and hover. Can be made to open only for focus. |
Return value
createTooltipTriggerState [TooltipTriggerState]
| Name | Type | Description |
|---|---|---|
| close * | (immediate?: boolean) => void | Hides the tooltip. |
| isOpen * | boolean | Whether the tooltip is currently showing. |
| open * | (immediate?: boolean) => void | Shows the tooltip. By default, the tooltip becomes visible after a delay depending on a global warmup timer. The `immediate` option shows the tooltip immediately instead. |
createTooltipTrigger [AriaTooltipTrigger]
| Name | Type | Description |
|---|---|---|
| triggerProps * | JSX.HTMLAttributes<any> | Props for the trigger element. |
| tooltipProps * | JSX.HTMLAttributes<any> | Props for the tooltip container element. |
createTooltip [AriaTooltip]
| Name | Type | Description |
|---|---|---|
| tooltipProps * | JSX.HTMLAttributes<any> | Props for the tooltip container element. |
Example
Tooltip
import { createTooltip, createTooltipTrigger, createTooltipTriggerState, type TooltipTriggerArguments, type TooltipArguments} from "solid-apg/toolbar";
import type { FlowComponent } from "solid-js";
type TooltipTriggerProps = TooltipTriggerArguments;
interface TooltipProps extends TooltipArguments { state: TooltipTriggerState;}
const Tooltip: FlowComponent<TooltipProps> = (props) => { const [local, rest] = splitProps(props, ["state"]); const { tooltipProps } = createTooltip(props, () => local.state);
const merged = mergeProps(rest, tooltipProps);
return ( <div class="absolute left-1/2 -translate-x-1/2 top-full mt-3 bg-white text-black p-1 border" {...merged}> {props.children} </div> );};
export const TooltipTrigger: FlowComponent<TooltipTriggerProps> = (props) => { let trigger!: HTMLButtonElement;
const state = createTooltipTriggerState(props); const { tooltipProps, triggerProps } = createTooltipTrigger(props, state, () => trigger);
return ( <span class="relative"> <button class="btn" ref={trigger} {...triggerProps}> Hover or Focus me </button> {state.isOpen ? ( <Tooltip {...tooltipProps} state={state}> {props.children} </Tooltip> ) : null} </span> );};