"use client" import { mergeProps } from "@base-ui/react/merge-props" import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip" import { AnchoredSurface, AnchoredSurfaceArrow, type AnchoredSurfaceProps, getAnchoredSurfaceSideOffset, } from "./anchored-surface" import { cn } from "../lib/utils" function TooltipProvider({ delay = 0, ...props }: TooltipPrimitive.Provider.Props) { return ( ) } function Tooltip({ ...props }: TooltipPrimitive.Root.Props) { return } function TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props) { return } type TooltipContentProps = TooltipPrimitive.Popup.Props & Pick< TooltipPrimitive.Positioner.Props, "align" | "alignOffset" | "arrowPadding" | "side" | "sideOffset" > & { /** * Renders the tooltip with an AnchoredSurface and connects its tail to the * trigger. Pass an object to configure the surface. */ showArrow?: boolean | Omit } function TooltipContent({ align = "center", alignOffset = 0, arrowPadding, children, className, side = "top", sideOffset, render, showArrow = false, ...props }: TooltipContentProps) { const usesAnchoredSurface = Boolean(showArrow) const anchoredSurfaceProps: | Omit | undefined = usesAnchoredSurface ? { borderWidth: 0, cornerRadius: "sm", pathClassName: "fill-foreground", tailSize: "sm", ...(typeof showArrow === "object" ? showArrow : undefined), } : undefined const resolvedSideOffset = sideOffset ?? (usesAnchoredSurface ? getAnchoredSurfaceSideOffset : 4) const resolvedArrowPadding = arrowPadding ?? (usesAnchoredSurface ? 10 : undefined) const resolvedRender: TooltipPrimitive.Popup.Props["render"] = !usesAnchoredSurface ? ( render ) : typeof render === "function" ? ( (popupProps, popupState) => ( (popupProps, anchoredSurfaceProps)} render={(surfaceProps) => render(surfaceProps, popupState)} /> ) ) : ( ) return ( {usesAnchoredSurface && ( } /> )} {children} ) } export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }