| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | 'use client'import type { FC } from 'react'import React from 'react'import cn from '@/utils/classnames'type Option = {  value: string  text: string | JSX.Element}type ItemProps = {  className?: string  isActive: boolean  onClick: (v: string) => void  option: Option}const Item: FC<ItemProps> = ({  className,  isActive,  onClick,  option,}) => {  return (    <div      key={option.value}      className={cn(        'relative pb-2.5 system-xl-semibold',        !isActive && 'cursor-pointer',        className,      )}      onClick={() => !isActive && onClick(option.value)}    >      <div className={cn(isActive ? 'text-text-primary' : 'text-text-tertiary')}>{option.text}</div>      {isActive && (        <div className='absolute bottom-0 left-0 right-0 h-0.5 bg-util-colors-blue-blue-500'></div>      )}    </div>  )}type Props = {  className?: string  value: string  onChange: (v: string) => void  options: Option[]  noBorderBottom?: boolean  itemClassName?: string}const TabSlider: FC<Props> = ({  className,  value,  onChange,  options,  noBorderBottom,  itemClassName,}) => {  return (    <div className={cn(className, !noBorderBottom && 'border-b border-divider-subtle', 'flex  space-x-6')}>      {options.map(option => (        <Item          isActive={option.value === value}          option={option}          onClick={onChange}          key={option.value}          className={itemClassName}        />      ))}    </div>  )}export default React.memo(TabSlider)
 |