import * as TooltipPrimitive from "@radix-ui/react-tooltip"; import * as React from "react"; import { useEffect, useState } from "react"; import { classNames } from "@sparkle/lib/utils"; const TooltipProvider = TooltipPrimitive.Provider; const TooltipRoot = TooltipPrimitive.Root; const TooltipPortal = TooltipPrimitive.Portal; const TooltipTrigger = TooltipPrimitive.Trigger; interface TooltipContentProps extends React.ComponentPropsWithoutRef< typeof TooltipPrimitive.Content > { mountPortal?: boolean; mountPortalContainer?: HTMLElement; } const TooltipContent = React.forwardRef< React.ElementRef, TooltipContentProps >( ( { className, sideOffset = 4, mountPortal = true, mountPortalContainer, ...props }, ref ) => { const content = ( ); const [container, setContainer] = useState( mountPortalContainer ); useEffect(() => { if (mountPortal && !container) { const dialogElements = document.querySelectorAll( ".s-sheet[role=dialog][data-state=open]" ); const defaultContainer = dialogElements[dialogElements.length - 1]; setContainer(defaultContainer); } }, [mountPortal, container]); return mountPortal ? ( {content} ) : ( content ); } ); interface TooltipProps extends TooltipContentProps { trigger: React.ReactNode; tooltipTriggerAsChild?: boolean; label: React.ReactNode; } const Tooltip = React.forwardRef( ( { trigger, tooltipTriggerAsChild = false, label, ...props }: TooltipProps, ref ) => ( {trigger} {label} ) ); TooltipContent.displayName = TooltipPrimitive.Content.displayName; export { Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipRoot, TooltipTrigger, };