'use client' import { useBreakpoint } from 'common' import { InfoIcon, XIcon } from 'lucide-react' import React, { useCallback, useEffect, useId, useRef, useState, type PropsWithChildren, } from 'react' import { ErrorBoundary } from 'react-error-boundary' import { Button, cn, CommandEmpty, Sheet, SheetContent, SheetHeader, Tooltip, TooltipContent, TooltipTrigger, } from 'ui' interface PopUpProps extends PropsWithChildren { tooltipContent: React.ReactNode className?: string contentContainerClassName?: string } const buttonClassName = cn( 'relative px-1 py-0 -my-px', 'rounded-sm bg-surface-200 border border-dashed', 'transition-colors hover:border-strong group/inline-popup' ) const InfoTooltip = ({ children, className, tooltipContent, contentContainerClassName, }: PopUpProps) => { const id = useId().replaceAll(':', '') const timeout = useRef | null>(null) const [mobileSheetOpen, setMobileSheetOpen] = useState(false) const [tooltipOpen, _setTooltipOpen] = useState(false) const isMobile = useBreakpoint('md') const setTooltipOpen = useCallback( (open: boolean) => { _setTooltipOpen(open) setMobileSheetOpen(true) timeout.current = setTimeout(() => { if (isMobile) return const targetElem: HTMLElement | null = document.querySelector(`#tooltip-content-${id}`) targetElem?.focus() }) }, [_setTooltipOpen, id, isMobile] ) useEffect(() => { return () => { if (timeout.current) { clearTimeout(timeout.current) } } }, []) return ( <> !isMobile && setTooltipOpen(open)}> setMobileSheetOpen(true)} className={cn(buttonClassName, className)} > {children} {tooltipContent} {isMobile && ( }>

{children}

{tooltipContent}
)} ) } export default InfoTooltip