| import React from 'react'; | |
| import { Clock4 } from 'lucide-react'; | |
| import { cn } from '~/utils'; | |
| export interface MentionItemProps { | |
| name: string; | |
| onClick: (e: React.MouseEvent<HTMLButtonElement>) => void; | |
| index: number; | |
| type?: 'prompt' | 'mention' | 'add-convo'; | |
| icon?: React.ReactNode; | |
| isActive?: boolean; | |
| description?: string; | |
| style?: React.CSSProperties; | |
| } | |
| export default function MentionItem({ | |
| name, | |
| onClick, | |
| index, | |
| icon, | |
| isActive, | |
| description, | |
| style, | |
| type = 'mention', | |
| }: MentionItemProps) { | |
| return ( | |
| <button | |
| tabIndex={index} | |
| onClick={onClick} | |
| id={`${type}-item-${index}`} | |
| className="w-full" | |
| style={style} | |
| > | |
| <div | |
| className={cn( | |
| 'text-token-text-primary bg-token-main-surface-secondary group flex h-10 items-center gap-2 rounded-lg px-2 text-sm font-medium hover:bg-surface-secondary', | |
| isActive === true ? 'bg-surface-active' : 'bg-transparent', | |
| )} | |
| > | |
| <div className="flex h-5 w-5 flex-shrink-0 items-center justify-center">{icon}</div> | |
| <div className="flex min-w-0 flex-grow items-center justify-between"> | |
| <div className="truncate"> | |
| <span className="font-medium">{name}</span> | |
| {description != null && description ? ( | |
| <span className="text-token-text-tertiary ml-2 text-sm font-light"> | |
| {description} | |
| </span> | |
| ) : null} | |
| </div> | |
| <Clock4 size={16} className="ml-2 flex-shrink-0" /> | |
| </div> | |
| </div> | |
| </button> | |
| ); | |
| } | |