| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | import type { FC } from 'react'import cn from '@/utils/classnames'type Option = {  value: string  text: string}type TabSliderProps = {  className?: string  itemWidth?: number  value: string  onChange: (v: string) => void  options: Option[]}const TabSlider: FC<TabSliderProps> = ({  className,  itemWidth = 118,  value,  onChange,  options,}) => {  const currentIndex = options.findIndex(option => option.value === value)  const current = options[currentIndex]  return (    <div className={cn(className, 'relative flex p-0.5 rounded-lg bg-gray-200')}>      {        options.map((option, index) => (          <div            key={option.value}            className={`              flex justify-center items-center h-7 text-[13px]               font-semibold text-gray-600 rounded-[7px] cursor-pointer              hover:bg-gray-50              ${index !== options.length - 1 && 'mr-[1px]'}            `}            style={{              width: itemWidth,            }}            onClick={() => onChange(option.value)}          >            {option.text}          </div>        ))      }      {        current && (          <div            className={`              absolute flex justify-center items-center h-7 bg-white text-[13px] font-semibold text-primary-600               border-[0.5px] border-gray-200 rounded-[7px] shadow-xs transition-transform            `}            style={{              width: itemWidth,              transform: `translateX(${currentIndex * itemWidth + 1}px)`,            }}          >            {current.text}          </div>        )      }    </div>  )}export default TabSlider
 |