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