import { useEffect, useRef, useState } from "react"; import "./index.scss"; import { Icon } from "../../../ui/atoms/icon"; export function InfoTooltip({ children }: { children: React.ReactNode }) { return ( {children} ); } function Tooltip({ children, extraClasses, }: { children: React.ReactNode; extraClasses?: string; }) { let ref = useRef(null); let [style, setStyle] = useState>({}); useEffect(() => { const onResize = () => { const parentRect = ref.current?.parentElement?.getBoundingClientRect(); const parentWH = (parentRect?.width || 0) / 2; const x = (parentRect?.x || 0) + parentWH; const rect = ref.current?.getBoundingClientRect(); const wH = (rect?.width || 0) / 2; const iW = window.innerWidth; const offset = -1 * (x <= iW / 2 // if the center of the parent is on the left half of the window ? x < wH // if the center of the parent is smaller than half of the tooltip ? x : wH : // the center of the parent is on the right half of the window x > iW - wH // if the inner width of the window is less than half the tooltip ? 2 * wH - (iW - x) : wH); const tooltipOffset = `${offset.toFixed(2)}px`; setStyle(Object.fromEntries([["--tooltip-offset", tooltipOffset]])); }; onResize(); window.addEventListener("resize", onResize); return () => { window.removeEventListener("resize", onResize); }; }, [ref]); return ( <> {children} ); }