| 1234567891011121314151617181920212223242526272829303132333435363738 |
- "use client";
- import type { ReactNode } from "react";
- import { cn } from "@/lib/utils";
- interface TooltipProps {
- content: ReactNode;
- children: ReactNode;
- side?: "top" | "bottom";
- className?: string;
- }
- /**
- * Minimal CSS-only tooltip: wraps any trigger element and reveals
- * `content` on hover or keyboard focus.
- */
- export function Tooltip({
- content,
- children,
- side = "top",
- className,
- }: TooltipProps) {
- return (
- <span className={cn("group/tooltip relative inline-flex", className)}>
- {children}
- <span
- role="tooltip"
- className={cn(
- "pointer-events-none absolute left-1/2 z-50 -translate-x-1/2 whitespace-nowrap rounded-md border border-border bg-popover px-2 py-1 text-xs text-foreground opacity-0 shadow-lg transition-opacity group-hover/tooltip:opacity-100 group-focus-within/tooltip:opacity-100",
- side === "top" ? "bottom-full mb-2" : "top-full mt-2",
- )}
- >
- {content}
- </span>
- </span>
- );
- }
|