/* eslint-disable jsx-a11y/media-has-caption */ import { useEffect, useMemo } from 'react'; import { useRecoilValue } from 'recoil'; import type { TMessageAudio } from '~/common'; import { useLocalize, useTTSBrowser, useTTSEdge, useTTSExternal } from '~/hooks'; import { VolumeIcon, VolumeMuteIcon, Spinner } from '~/components/svg'; import { useToastContext } from '~/Providers/ToastContext'; import { logger } from '~/utils'; import store from '~/store'; export function BrowserTTS({ isLast, index, messageId, content, className }: TMessageAudio) { const localize = useLocalize(); const playbackRate = useRecoilValue(store.playbackRate); const { toggleSpeech, isSpeaking, isLoading, audioRef } = useTTSBrowser({ 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]); logger.log( 'MessageAudio: audioRef.current?.src, audioRef.current', audioRef.current?.src, audioRef.current, ); return ( <>