You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

option-card.tsx 1.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import React from 'react'
  2. import cn from '@/utils/classnames'
  3. type OptionCardProps = {
  4. label: string
  5. Icon: React.FC<React.SVGProps<SVGSVGElement>> | string
  6. selected: boolean
  7. onClick?: () => void
  8. }
  9. const OptionCard = ({
  10. label,
  11. Icon,
  12. selected,
  13. onClick,
  14. }: OptionCardProps) => {
  15. return (
  16. <div
  17. className={cn(
  18. 'flex items-center gap-2 rounded-xl border border-components-option-card-option-border bg-components-option-card-option-bg p-3 shadow-shadow-shadow-3',
  19. selected
  20. ? 'border-components-option-card-option-selected-border bg-components-option-card-option-selected-bg shadow-xs ring-[0.5px] ring-inset ring-components-option-card-option-selected-border'
  21. : 'hover:bg-components-option-card-bg-hover hover:border-components-option-card-option-border-hover hover:shadow-xs',
  22. )}
  23. onClick={onClick}
  24. >
  25. <div className='flex size-8 items-center justify-center rounded-lg border-[0.5px] border-components-panel-border bg-background-default-dodge p-1.5'>
  26. {
  27. typeof Icon === 'string'
  28. ? <div className='text-[18px] leading-[18px]'>{Icon}</div>
  29. : <Icon className='size-5' />
  30. }
  31. </div>
  32. <div className={cn('system-sm-medium text-text-secondary', selected && 'text-primary')}>
  33. {label}
  34. </div>
  35. </div>
  36. )
  37. }
  38. export default React.memo(OptionCard)