Skip to content
Components

Rich tooltip

Persistent anchored tip for onboarding tours, walkthroughs, and new-feature announcements — dismissible, with optional media and step counter.

Composition

Guided tour

  • <RichTooltipTour>
    • <RichTooltip>
      • <RichTooltipTrigger />
      • <RichTooltipContent>
        • <RichTooltipMedia />
        • <RichTooltipHeader>
          • <RichTooltipTitle />
          • <RichTooltipClose />
          </RichTooltipHeader>
        • <RichTooltipDescription />
        • <RichTooltipFooter>
          • <RichTooltipProgress />
          • <RichTooltipPrevious />
          • <RichTooltipNext />
          </RichTooltipFooter>
        </RichTooltipContent>
      </RichTooltip>
    </RichTooltipTour>

Installation

The Control UI source installs this primitive from src/registry/sources/control-ui/ui/rich-tooltip.tsx.

Registry command
See registry manifest

Dependencies

Tour navigationsrc/registry/sources/control-ui/ui/rich-tooltip-tour.tsSupport
Motionsrc/registry/lib/motion.tsUtil
Surface variantssrc/registry/sources/control-ui/surface-variants.tsSupport
DialogdialogPrimitive

Raw code

Primary installed source

src/registry/sources/control-ui/ui/rich-tooltip.tsx

Knobs

Typed custom properties the recipe paints with. Set one on the root — style, a utility class, or a skin — and every slot inherits it.

--cui-popup-* · 44 knobsHow the cascade resolves
--cui-popup-title-foreground<color>var(--cui-popup-foreground)
--cui-popup-title-font-size<length-percentage>var(--text-heading-3)
--cui-popup-title-font-weight<number>var(--font-weight-semibold)
--cui-popup-title-line-height<number>var(--text-heading-3--line-height)
--cui-popup-title-letter-spacing<length>-0.025em
--cui-popup-description-foreground<color>var(--muted-foreground)
--cui-popup-close-inset<length-percentage>calc(var(--spacing) * 3)
--cui-popup-item-inset<length-percentage>calc(var(--spacing) * 8)
--cui-popup-label-padding-block<length-percentage>var(--cui-popup-item-padding-block)
--cui-popup-label-padding-inline<length-percentage>var(--cui-popup-item-padding-inline)
--cui-popup-label-font-size<length-percentage>var(--text-micro)
--cui-popup-label-font-weight<number>var(--font-weight-medium)
--cui-popup-label-letter-spacing<length>0.08em
--cui-popup-label-text-transformnone | uppercase | lowercase | capitalizeuppercase
--cui-popup-separator-inset<length-percentage>calc(var(--popover-padding) * -1)
--cui-popup-shortcut-font-size<length-percentage>var(--text-body)
--cui-popup-shortcut-letter-spacing<length>0.02em
--cui-popup-status-success-foreground<color>var(--success-text)
--cui-popup-status-warning-foreground<color>var(--warning-text)
--cui-popup-status-info-foreground<color>var(--info-text)
--cui-popup-status-error-foreground<color>var(--destructive)
--cui-popup-radius<length-percentage>var(--radius-popover)
--cui-popup-background<color>var(--popover)
--cui-popup-foreground<color>var(--popover-foreground)
--cui-popup-border-color<color>var(--control-rim)
--cui-popup-border-width<length>var(--control-rim-width)
--cui-popup-shadow*var(--shadow-pop)
--cui-popup-backdrop-filter*blur(var(--backdrop-blur-popover))
--cui-popup-backdrop-background<color>oklch(from var(--foreground) l c h / var(--overlay-opacity))
--cui-popup-backdrop-blur<length>var(--backdrop-blur-overlay)
--cui-popup-item-radius<length-percentage>var(--radius-popup-item-fit)
--cui-popup-item-font-size<length-percentage>var(--text-body)
--cui-popup-item-icon-size<length-percentage>1rem
--cui-popup-item-padding-block<length-percentage>calc(var(--spacing) * 1)
--cui-popup-item-padding-inline<length-percentage>calc(var(--padding-x) * 0.5)
--cui-popup-item-min-height<length-percentage>max(var(--target-min), var(--control-h-xs))
--cui-popup-item-highlight-shadow*inset 0 0 0 1px oklch(from var(--foreground) l c h / 0.35)
--cui-popup-item-foreground<color>var(--foreground)
--cui-popup-item-highlight-background<color>var(--hover-fill)
--cui-popup-item-highlight-foreground<color>var(--cui-popup-item-foreground)
--cui-popup-item-highlight-muted-foreground<color>var(--muted-foreground)
--cui-popup-item-disabled-opacity<number>var(--disabled-opacity)
--cui-popup-separator-color<color>var(--border)
--cui-popup-shortcut-foreground<color>var(--muted-foreground)
--cui-rich-tooltip-* · 9 knobsHow the cascade resolves
--cui-rich-tooltip-content-background<color>var(--primary)
--cui-rich-tooltip-content-foreground<color>var(--primary-foreground)
--cui-rich-tooltip-content-radius<length-percentage>+var(--radius-popover)
--cui-rich-tooltip-content-shadow*inset 0 1px 0 oklch(from var(--shadow-highlight) l c h / calc(alpha * var(--shadow-opacity) * min(var(--shadow-size), 1))), 0 calc( 0.5px * var(--shadow-size) * var(--shadow-popover-multiplier) * var(--shadow-y) ) calc(0.75px * var(--shadow-size) * var(--shadow-popover-multiplier)) calc(-0.25px * var(--shadow-size) * var(--shadow-popover-multiplier)) oklch(from var(--shadow-color) l c h / calc(0.04 * var(--shadow-opacity))), 0 calc( 1.5px * var(--shadow-size) * var(--shadow-popover-multiplier) * var(--shadow-y) ) calc(3px * var(--shadow-size) * var(--shadow-popover-multiplier)) calc(-0.75px * var(--shadow-size) * var(--shadow-popover-multiplier)) oklch(from var(--shadow-color) l c h / calc(0.05 * var(--shadow-opacity))), 0 calc( 3px * var(--shadow-size) * var(--shadow-popover-multiplier) * var(--shadow-y) ) calc(6px * var(--shadow-size) * var(--shadow-popover-multiplier)) calc(-1.5px * var(--shadow-size) * var(--shadow-popover-multiplier)) oklch(from var(--shadow-color) l c h / calc(0.06 * var(--shadow-opacity))), 0 calc( 6px * var(--shadow-size) * var(--shadow-popover-multiplier) * var(--shadow-y) ) calc(14px * var(--shadow-size) * var(--shadow-popover-multiplier)) calc(-3px * var(--shadow-size) * var(--shadow-popover-multiplier)) oklch(from var(--shadow-color) l c h / calc(0.07 * var(--shadow-opacity)))
--cui-rich-tooltip-dot-background<color>currentcolor
--cui-rich-tooltip-action-radius<length-percentage>var(--radius-control)
--cui-rich-tooltip-action-background<color>transparent
--cui-rich-tooltip-action-foreground<color>currentColor
--cui-rich-tooltip-focus-ring-color<color>var(--cui-rich-tooltip-content-foreground)