import React, { useMemo } from 'react'; import Tippy from '@tippyjs/react'; import { Testable, useBuildTestId } from '../../modules/testing'; import { Styles, ContentContainer, Target } from './styled'; export type TriggerValue = 'mouseenter' | 'focus' | 'click' | 'manual'; export type Props = Pick, 'children' | 'style'> & Pick< React.ComponentProps, | 'className' | 'onShow' | 'onHide' | 'visible' | 'disabled' | 'hideOnClick' | 'interactive' | 'reference' | 'placement' | 'onClickOutside' > & Testable & { content: React.ReactNode; trigger?: TriggerValue | TriggerValue[]; targetHtmlTag?: NonNullable; }; export const Component = ({ visible, className, trigger: triggerProp = ['mouseenter', 'focus'], 'data-testid': testId, targetHtmlTag = 'div', ...otherProps }: Props) => { const { buildTestId } = useBuildTestId({ id: testId }); const trigger = useMemo(() => { if (!triggerProp) return undefined; if (!Array.isArray(triggerProp)) return triggerProp; return triggerProp.join(' '); }, [triggerProp]); const triggerVisible = useMemo(() => { if (typeof visible !== undefined) return { visible }; return { trigger }; }, [trigger, visible]); return ( <> {otherProps.content} } > {otherProps.children} ); }; Component.displayName = 'Tooltip';