1import { X } from "lucide-react";
2import type { ReactNode } from "react";
3import { Tooltip, TooltipPopup, TooltipTrigger } from "~/components/ui/tooltip";
4
5interface PanelTabCloseButtonProps {
6 children: ReactNode;
7 label: string;
8 onClick: () => void;
9 tooltip?: string;
10}
11
12/** Inside a `group/tab` row, swaps the tab identity for its close action on hover or focus. */
13export function PanelTabCloseButton({
14 children,
15 label,
16 onClick,
17 tooltip,
18}: PanelTabCloseButtonProps) {
19 const button = (
20 <button
21 type="button"
22 className="cursor-pointer group/close relative flex size-4 shrink-0 items-center justify-center rounded-sm hover:bg-muted"
23 aria-label={label}
24 onClick={onClick}
25 >
26 <span className="relative flex size-3 items-center justify-center group-hover/tab:hidden group-focus-visible/close:hidden">
27 {children}
28 </span>
29 <X className="hidden size-3 group-hover/tab:block group-focus-visible/close:block" />
30 </button>
31 );
32
33 if (!tooltip) return button;
34
35 return (
36 <Tooltip>
37 <TooltipTrigger render={button} />
38 <TooltipPopup>{tooltip}</TooltipPopup>
39 </Tooltip>
40 );
41}