import { useState } from 'react'; import { EModelEndpoint } from 'librechat-data-provider'; import type { TConversation, TMessage } from 'librechat-data-provider'; import { Clipboard, CheckMark, EditIcon, RegenerateIcon, ContinueIcon } from '~/components/svg'; import { useGenerationsByLatest, useLocalize } from '~/hooks'; import { Fork } from '~/components/Conversations'; import { cn } from '~/utils'; type THoverButtons = { isEditing: boolean; enterEdit: (cancel?: boolean) => void; copyToClipboard: (setIsCopied: React.Dispatch>) => void; conversation: TConversation | null; isSubmitting: boolean; message: TMessage; regenerate: () => void; handleContinue: (e: React.MouseEvent) => void; latestMessage: TMessage | null; isLast: boolean; }; export default function HoverButtons({ isEditing, enterEdit, copyToClipboard, conversation, isSubmitting, message, regenerate, handleContinue, latestMessage, isLast, }: THoverButtons) { const localize = useLocalize(); const { endpoint: _endpoint, endpointType } = conversation ?? {}; const endpoint = endpointType ?? _endpoint; const [isCopied, setIsCopied] = useState(false); const { hideEditButton, regenerateEnabled, continueSupported, forkingSupported } = useGenerationsByLatest({ isEditing, isSubmitting, message, endpoint: endpoint ?? '', latestMessage, }); if (!conversation) { return null; } const { isCreatedByUser } = message; const onEdit = () => { if (isEditing) { return enterEdit(true); } enterEdit(); }; return (
{endpoint !== EModelEndpoint.assistants && ( )} {regenerateEnabled ? ( ) : null} {continueSupported ? ( ) : null}
); }