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.

prompt-option.tsx 1.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { memo } from 'react'
  2. type PromptMenuItemMenuItemProps = {
  3. icon: React.JSX.Element
  4. title: string
  5. disabled?: boolean
  6. isSelected: boolean
  7. onClick: () => void
  8. onMouseEnter: () => void
  9. setRefElement?: (element: HTMLDivElement) => void
  10. }
  11. export const PromptMenuItem = memo(({
  12. icon,
  13. title,
  14. disabled,
  15. isSelected,
  16. onClick,
  17. onMouseEnter,
  18. setRefElement,
  19. }: PromptMenuItemMenuItemProps) => {
  20. return (
  21. <div
  22. className={`
  23. flex h-6 cursor-pointer items-center rounded-md px-3 hover:bg-state-base-hover
  24. ${isSelected && !disabled && '!bg-state-base-hover'}
  25. ${disabled ? 'cursor-not-allowed opacity-30' : 'cursor-pointer hover:bg-state-base-hover'}
  26. `}
  27. tabIndex={-1}
  28. ref={setRefElement}
  29. onMouseEnter={() => {
  30. if (disabled)
  31. return
  32. onMouseEnter()
  33. }}
  34. onMouseDown={(e) => {
  35. e.preventDefault()
  36. e.stopPropagation()
  37. }}
  38. onClick={() => {
  39. if (disabled)
  40. return
  41. onClick()
  42. }}>
  43. {icon}
  44. <div className='ml-1 text-[13px] text-text-secondary'>{title}</div>
  45. </div>
  46. )
  47. })
  48. PromptMenuItem.displayName = 'PromptMenuItem'