import * as React from 'react'; import { useRef } from 'react'; import { Tooltip as CoreTooltip, type TooltipContentProps, type TooltipProps as CoreTooltipProps, useTooltipState, } from '@shoptet/ui-core-web'; import { usePresence } from '@shoptet/utils'; import { isNativeHtmlStructure } from '../../utils/isNativeHtmlStructure'; import { Text } from '../Typography/Text/Text'; export interface TooltipProps { /** * The content wrapped by the tooltip. */ children: string | React.ReactElement; closeDelay?: CoreTooltipProps['closeDelay']; content: React.ReactNode; delay?: CoreTooltipProps['delay']; placement?: TooltipContentProps['placement']; } const TooltipContentWithPresence: React.FC<{ content: React.ReactNode; placement?: TooltipContentProps['placement']; }> = ({ content, placement, ...rest }) => { rest satisfies Record; const { open } = useTooltipState(); const ref = useRef(null); const { isPresent } = usePresence(open, ref); if (!isPresent) { return null; } return ( {isNativeHtmlStructure(content) ? {content} : content} ); }; export const Tooltip: React.FC = ({ children, closeDelay = 300, content, delay = 500, placement, ...rest }) => ( {children} );