<TooltipProvider>
  <Tooltip content="Add new item" asChild>
    <Button shape="square" icon={PlusIcon} />
  </Tooltip>
</TooltipProvider>

Installation

Barrel

import { Tooltip, TooltipProvider } from "@cloudflare/kumo";

Granular

import { Tooltip, TooltipProvider } from "@cloudflare/kumo/components/tooltip";

Usage

import { Tooltip, TooltipProvider, Button } from "@cloudflare/kumo";

export default function Example() {
  return (
    <TooltipProvider>
      <Tooltip content="Tooltip text" asChild>
        <Button>Hover me</Button>
      </Tooltip>
    </TooltipProvider>
  );
}

Examples

Basic Tooltip

<TooltipProvider>
  <Tooltip content="Add" asChild>
    <Button shape="square" icon={PlusIcon} />
  </Tooltip>
</TooltipProvider>

Multiple Tooltips

<TooltipProvider>
  <div className="flex gap-2">
    <Tooltip content="Add" asChild>
      <Button shape="square" icon={PlusIcon} />
    </Tooltip>
    <Tooltip content="Change language" asChild>
      <Button shape="square" icon={TranslateIcon} />
    </Tooltip>
  </div>
</TooltipProvider>

Custom Trigger

We recommend using asChild with a Kumo Button (as shown above). However, when asChild is omitted, Tooltip wraps children in an internal button element. Defensive styles are applied to protect this element from global CSS pollution. You can override these defaults via className.

<Tooltip
  content="Click to learn more"
  className="inline-flex items-center gap-1.5 rounded-full bg-kumo-brand px-3 py-1.5 text-sm font-medium text-white shadow-md transition-transform hover:scale-105 active:scale-95"
>
  <Info className="size-4" />
  <span>Help</span>
</Tooltip>

API Reference

PropTypeDefaultDescription
side"top" | "bottom" | "left" | "right""top"-
classNamestring-Additional CSS classes
childrenReactNode-Child elements
content*ReactNode-Content to display in the tooltip