Morphos
Overlays

Tooltip

A floating label that appears on hover or focus to provide additional context for an element.

Interactive example

Installation

npm install @morphos/overlays
pnpm add @morphos/overlays
yarn add @morphos/overlays
bun add @morphos/overlays

Import

import { Tooltip, TooltipTrigger, TooltipContent } from '@morphos/overlays'

Usage

@Component()
class MyComponent extends StatefulComponent {
  @State() tooltip = new Tooltip()

  render() {
    return (
      <>
        <TooltipTrigger tooltip={this.tooltip}>
          Hover me
        </TooltipTrigger>
        <TooltipContent tooltip={this.tooltip}>
          This is a tooltip
        </TooltipContent>
      </>
    )
  }
}

Compound components

ComponentDescription
TooltipRoot state manager. Owns open state, open/close timers, and the computed anchor position.
TooltipTrigger<span> that shows the tooltip on mouseenter/focus and hides it on mouseleave/blur. Sets aria-describedby and data-open.
TooltipContentRenders into a Portal, positioned with position: fixed. Sets role="tooltip" and data-open.

Props — Tooltip

PropTypeDefaultDescription
openDelaynumber500Milliseconds to wait before opening.
closeDelaynumber0Milliseconds to wait before closing.
side"top" | "bottom" | "left" | "right""top"Which edge of the trigger the tooltip is placed against.
align"start" | "center" | "end""center"Alignment of the tooltip along the trigger's perpendicular axis.
sideOffsetnumber4Gap in pixels between the trigger and the tooltip.
childrenChildrenContent — typically TooltipTrigger and TooltipContent.

Methods

MethodDescription
show()Cancels any pending close, then opens the tooltip after openDelay ms (recomputing its position).
hide()Cancels any pending open, then closes the tooltip after closeDelay ms.

Props — TooltipTrigger

PropTypeDefaultDescription
tooltipTooltipThe Tooltip instance this trigger controls.
childrenChildrenThe trigger element content.
classstringCSS class.
idstringHTML id.

Props — TooltipContent

PropTypeDefaultDescription
tooltipTooltipThe Tooltip instance this content belongs to.
childrenChildrenTooltip content.
classstringCSS class.
idstringHTML id. Falls back to an auto-generated id.
aria-labelstringAccessible label for the tooltip content.

data-* attributes

AttributeElementWhen present
data-openTooltipTriggerTooltip is visible
data-openTooltipContent rootTooltip is visible

Activation

The tooltip opens and closes based on pointer and keyboard events on TooltipTrigger:

EventAction
mouseenterOpens after openDelay ms
mouseleaveCloses after closeDelay ms
focusOpens after openDelay ms
blurCloses after closeDelay ms

TooltipContent renders with role="tooltip" inside a Portal, so it is always appended to the document body and avoids overflow clipping from parent containers. Its position is computed with computeAnchorPosition() from @morphos/core, using TooltipTrigger's bounding rect and the side/align/sideOffset props on Tooltip. Tooltip does not trap focus or lock scroll — it is non-modal.

Styling example

.morphos-tooltip-content {
  z-index: 100;
  max-width: 20rem;
  padding: var(--morphos-space-1) var(--morphos-space-2);
  font-size: 0.8125rem;
  background: var(--morphos-color-text);
  color: var(--morphos-color-accent-text);
  border-radius: var(--morphos-radius-sm);
}

On this page