/* eslint-disable max-len */ import React, { PropsWithChildren, useState, useRef, forwardRef, ReactElement, ReactNode } from 'react' import PortalUtils from '../../utils/portal-utils.jsx' import { TooltipControl } from './tooltip-control.jsx' import Props from './tooltip-props.js' const TooltipPortal = PortalUtils.createPortalForKey('TOOLTIP', TooltipControl) /** * @load ./tooltip.doc.md * @component * @subcategory Atoms * @hideconstructor * @new In version 3.3 * @section design-system */ export const Tooltip: React.FC> = (props) => { const { direction, title, children, size } = props const childRef = useRef(null) const [isVisible, setIsVisible] = useState(false) let TriggerElement: ReactElement let ContentElement: ReactNode const childrenCount = React.Children.count(children) if (childrenCount === 1) { TriggerElement = children as ReactElement } else if (childrenCount === 2) { React.Children.forEach(children, (child) => { const type = (child as any).type?.displayName if (type === 'TooltipContent') { ContentElement = child as ReactNode } else { TriggerElement = child as ReactElement } }) } const onEnter = () => { setIsVisible(true) } const onLeave = () => { setIsVisible(false) } // eslint-disable-next-line react/no-unstable-nested-components const ChildWithRef = forwardRef((triggerProps, ref) => React.cloneElement(TriggerElement, { ...triggerProps, displayName: 'TooltipTrigger', ref, })) as any return ( <> {isVisible && ( )} ) } Tooltip.displayName = 'Tooltip' export default Tooltip