import React, {useContext, useState} from 'react'; import {useLayoutEffect} from '@react-aria/utils'; import clsx from 'clsx'; import {TabContext} from './tabs-context'; interface TabLineStyle { width?: string; transform?: string; className?: string; } export function TabLine() { const {tabsRef, selectedTab} = useContext(TabContext); const [style, setStyle] = useState({ width: undefined, transform: undefined, className: undefined, }); useLayoutEffect(() => { if (selectedTab != null && tabsRef.current) { const el = tabsRef.current[selectedTab]; if (!el) return; setStyle(prevState => { return { width: `${el.offsetWidth}px`, transform: `translateX(${el.offsetLeft}px)`, // disable initial transition for tabline className: prevState.width === undefined ? '' : 'transition-all', }; }); } }, [setStyle, selectedTab, tabsRef]); return (
); }