| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | 'use client'import type { FC } from 'react'import React from 'react'import cn from '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(className, !isActive && 'cursor-pointer', 'relative pb-2.5  leading-6 text-base font-semibold')}      onClick={() => !isActive && onClick(option.value)}    >      <div className={cn(isActive ? 'text-gray-900' : 'text-gray-600')}>{option.text}</div>      {isActive && (        <div className='absolute bottom-0 left-0 right-0 h-0.5 bg-[#155EEF]'></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-[#EAECF0]', '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)
 |