Tooltip
A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.
Let us cook!
Props
Features
- 🎈 Fully customize Floating UI’s options
- 🎨 Animation support
Usage
<script lang="ts"> import { Tooltip } from "melt/builders";
const tooltip = new Tooltip();</script>
<button {...tooltip.trigger}> Hover me</button><div {...tooltip.content}> <div {...tooltip.arrow}></div> <p>Content</p></div>
<script lang="ts"> import { Tooltip } from "melt/components";</script>
<Tooltip> {#snippet children(tooltip)} <button {...tooltip.trigger}> Hover me </button> <div {...tooltip.content}> <div {...tooltip.arrow}></div> <p>Content</p> </div> {/snippet}</Tooltip>
API Reference
Constructor Props
The props that are passed when calling
new Tooltip()
new Tooltip()
export type TooltipProps = { /** * If the Tooltip is open. * * When passing a getter, it will be used as source of truth, * meaning that the value only changes when the getter returns a new value. * * Otherwise, if passing a static value, it'll serve as the default value. * * @default false */ open?: MaybeGetter<boolean | undefined>;
/** * Called when the value is supposed to change. */ onOpenChange?: (value: boolean) => void;
/** * Size of tooltip arrow in pixels. * * @default 8 */ arrowSize?: MaybeGetter<number | undefined>;
/** * If `true`, tooltip will close if trigger is pressed. * * @default true */ closeOnPointerDown?: MaybeGetter<boolean | undefined>;
/** * Tooltip open delay in milliseconds. * * @default 1000 */ openDelay?: MaybeGetter<number | undefined>;
/** * Tooltip close delay in milliseconds. * * @default 0 */ closeDelay?: MaybeGetter<number | undefined>;
/** * Options to be passed to Floating UI's `computePosition` * * @see https://floating-ui.com/docs/computePosition */ computePositionOptions?: MaybeGetter<Partial<ComputePositionConfig> | undefined>;
/** * If the popover visibility should be controlled by the user. * * @default false */ forceVisible?: MaybeGetter<boolean | undefined>;
/** * If `true`, leaving trigger will close the tooltip. * * @default false */ disableHoverableContent?: MaybeGetter<boolean | undefined>;};
export type TooltipProps = { /** * If the Tooltip is open. * * When passing a getter, it will be used as source of truth, * meaning that the value only changes when the getter returns a new value. * * Otherwise, if passing a static value, it'll serve as the default value. * * @default false */ open?: MaybeGetter<boolean | undefined>;
/** * Called when the value is supposed to change. */ onOpenChange?: (value: boolean) => void;
/** * Size of tooltip arrow in pixels. * * @default 8 */ arrowSize?: MaybeGetter<number | undefined>;
/** * If `true`, tooltip will close if trigger is pressed. * * @default true */ closeOnPointerDown?: MaybeGetter<boolean | undefined>;
/** * Tooltip open delay in milliseconds. * * @default 1000 */ openDelay?: MaybeGetter<number | undefined>;
/** * Tooltip close delay in milliseconds. * * @default 0 */ closeDelay?: MaybeGetter<number | undefined>;
/** * Options to be passed to Floating UI's `computePosition` * * @see https://floating-ui.com/docs/computePosition */ computePositionOptions?: MaybeGetter<Partial<ComputePositionConfig> | undefined>;
/** * If the popover visibility should be controlled by the user. * * @default false */ forceVisible?: MaybeGetter<boolean | undefined>;
/** * If `true`, leaving trigger will close the tooltip. * * @default false */ disableHoverableContent?: MaybeGetter<boolean | undefined>;};
Properties
The properties returned from
new Tooltip()
new Tooltip()
-
computePositionOptions
{} | Partial<{ placement?: Elements; }) => Promisable<Platform | undefined; }>{} | Partial<{ placement?: Elements; }) => Promisable<Platform | undefined; }> -
closeOnPointerDown
booleanboolean -
openDelay
numbernumber -
closeDelay
numbernumber -
disableHoverableContent
booleanboolean -
arrowSize
numbernumber -
forceVisible
booleanboolean -
isVisible
booleanbooleanState -
open
booleanboolean -
trigger
{readonly onfocusout: () => Promise<void>readonly "data-melt-tooltip-trigger": ""readonly id: stringreadonly popovertarget: stringreadonly "aria-describedby": stringreadonly "data-open": "" | undefinedreadonly onclick: (e: MouseEvent & { currentTarget: EventTarget & HTMLButtonElement },) => voidreadonly onpointerdown: () => voidreadonly onpointerenter: (e: PointerEvent & { currentTarget: EventTarget & HTMLButtonElement },) => voidreadonly onpointerleave: (e: PointerEvent & { currentTarget: EventTarget & HTMLButtonElement },) => voidreadonly onfocus: () => voidreadonly onblur: () => void}{readonly onfocusout: () => Promise<void>readonly "data-melt-tooltip-trigger": ""readonly id: stringreadonly popovertarget: stringreadonly "aria-describedby": stringreadonly "data-open": "" | undefinedreadonly onclick: (e: MouseEvent & { currentTarget: EventTarget & HTMLButtonElement },) => voidreadonly onpointerdown: () => voidreadonly onpointerenter: (e: PointerEvent & { currentTarget: EventTarget & HTMLButtonElement },) => voidreadonly onpointerleave: (e: PointerEvent & { currentTarget: EventTarget & HTMLButtonElement },) => voidreadonly onfocus: () => voidreadonly onblur: () => void} -
content
{readonly onfocusout: () => Promise<void>readonly "data-melt-tooltip-content": ""readonly id: stringreadonly popover: "manual"readonly role: "tooltip"readonly tabindex: -1readonly style: "overflow: visible;"readonly inert: booleanreadonly "data-open": "" | undefinedreadonly onpointerenter: () => voidreadonly onpointerleave: () => voidreadonly onpointerdown: () => void}{readonly onfocusout: () => Promise<void>readonly "data-melt-tooltip-content": ""readonly id: stringreadonly popover: "manual"readonly role: "tooltip"readonly tabindex: -1readonly style: "overflow: visible;"readonly inert: booleanreadonly "data-open": "" | undefinedreadonly onpointerenter: () => voidreadonly onpointerleave: () => voidreadonly onpointerdown: () => void} -
arrow
{readonly "data-melt-tooltip-arrow": ""readonly id: stringreadonly "data-arrow": ""readonly "data-open": "" | undefinedreadonly style: `position: absolute; width: var(--arrow-size, ${number}px); height: var(--arrow-size, ${number}px);`}{readonly "data-melt-tooltip-arrow": ""readonly id: stringreadonly "data-arrow": ""readonly "data-open": "" | undefinedreadonly style: `position: absolute; width: var(--arrow-size, ${number}px); height: var(--arrow-size, ${number}px);`}