Tessera UI

Tooltip

Rich tooltip card for product tours, feature walkthroughs, and contextual help. Supports title, image, subtitle, description, keyboard shortcuts, step counter, navigation buttons, a close button, 5 intent colors, 6 rounded variants, and all 12 arrow positions.

Installation

pnpm add @tessinaui/ui

Usage

import { Tooltip } from "@tessinaui/ui";
{/* Minimal */}
<Tooltip title="Feature name" description="A brief explanation." onClose={() => {}} />

{/* Full product tour step */}
<Tooltip
  intent="warning"
  arrowSide="bottom"
  arrowAlign="center"
  title="Title Placeholder Text"
  titleIcon={<CircleAlert className="w-5 h-5" />}
  image={<img src="..." className="w-full aspect-video object-cover" />}
  subtitle="Step title"
  subtitleIcon={<CircleAlert className="w-5 h-5" />}
  step={{ current: 2, total: 8 }}
  shortcuts={["⌘", "U"]}
  description="Learn how to use this feature."
  paginationText="1 of 4"
  onClose={() => {}}
  primaryAction={{ label: "Back",  leadingIcon: <ChevronLeft />, onClick: handleBack }}
  secondaryAction={{ label: "Skip", onClick: handleSkip }}
  ctaAction={{ label: "Next",       trailingIcon: <ChevronRight />, onClick: handleNext }}
/>

Playground

Preview
Loading...

Showcase

Preview
Loading...

API Reference

Tooltip props

Content slots

PropTypeDescription
titleReactNodeHeader title text
titleIconReactNodeIcon shown before the title
subtitleReactNodeSubheader label (inside content area)
subtitleIconReactNodeIcon shown before the subtitle
descriptionReactNodeBody paragraph text
imageReactNodeImage/media slot — rendered in a rounded container
shortcutsstring[]Keyboard shortcut keys (e.g. ["⌘", "U"]) rendered as Key badges
step{ current: number; total: number }Step counter shown in subheader row (e.g. "2 of 8")
paginationTextstringFooter step label (e.g. "1 of 4")

Actions

PropTypeDescription
onClose() => voidShows close (×) button when provided
primaryActionTooltipActionLeft footer button (outline style) — e.g. Cancel, Back
secondaryActionTooltipActionMiddle footer button (neutral fill) — e.g. Skip, Maybe later
ctaActionTooltipActionRight footer button (dark fill) — e.g. Confirm, Save, Next

Visibility overrides

All slots are shown automatically when their content is provided. Pass false to explicitly hide.

PropTypeDefault
showImagebooleanauto
showTitlebooleanauto
showSubtitlebooleanauto
showDescriptionbooleanauto
showShortcutsbooleanauto
showStepbooleanauto
showFooterbooleanauto
showClosebooleanauto

Style

PropTypeDefaultDescription
intent"none" | "error" | "warning" | "success" | "info""none"Card background color
rounded"none" | "sm" | "md" | "lg" | "xl" | "full""full"Card border radius
size"sm" | "md" | "lg""lg"Card width (256 / 320 / 384px). sm stacks footer buttons vertically; md/lg lay them out horizontally. Shortcut key badges scale with size (xs / sm / md).

Arrow

12 positions: 4 sides × 3 alignments.

PropTypeDefaultDescription
arrowSide"top" | "right" | "bottom" | "left" | "none""none"Which edge the arrow appears on
arrowAlign"start" | "center" | "end""center"Alignment along that edge

Direction

PropTypeDefault
dir"ltr" | "rtl""ltr"

TooltipAction type

interface TooltipAction {
  label: string;
  leadingIcon?: React.ReactNode;
  trailingIcon?: React.ReactNode;
  onClick?: () => void;
  /** Override button style. Defaults: primary=outline, secondary=ghost, cta=primary. */
  variant?:  "primary" | "secondary" | "ghost" | "outline";
  /** Override button intent color. */
  intent?:   "none" | "error" | "warning" | "success" | "info";
  /** Override border radius. Defaults to "full". */
  rounded?:  "none" | "sm" | "md" | "lg" | "full";
  disabled?: boolean;
  loading?:  boolean;
}

On this page