import { useEffect } from 'react'; import { useRecoilValue } from 'recoil'; import type { TMessage } from 'librechat-data-provider'; import { VolumeIcon, VolumeMuteIcon, Spinner } from '~/components/svg'; import { useLocalize, useTextToSpeech } from '~/hooks'; import store from '~/store'; type THoverButtons = { message: TMessage; isLast: boolean; index: number; }; export default function MessageAudio({ index, message, isLast }: THoverButtons) { const localize = useLocalize(); const playbackRate = useRecoilValue(store.playbackRate); const { toggleSpeech, isSpeaking, isLoading, audioRef } = useTextToSpeech(message, isLast, index); const renderIcon = (size: string) => { if (isLoading) { return ; } if (isSpeaking) { return ; } return ; }; useEffect(() => { const messageAudio = document.getElementById( `audio-${message.messageId}`, ) as HTMLAudioElement | null; if (!messageAudio) { return; } if ( playbackRate && playbackRate > 0 && messageAudio && messageAudio.playbackRate !== playbackRate ) { messageAudio.playbackRate = playbackRate; } }, [audioRef, isSpeaking, playbackRate, message.messageId]); return ( <>