enzostvs's picture
enzostvs HF Staff
reset transcript
0207f3e
import classNames from "classnames";
import { FaMicrophone } from "react-icons/fa";
import SpeechRecognition, {
useSpeechRecognition,
} from "react-speech-recognition";
import { useUpdateEffect } from "react-use";
function SpeechPrompt({
setPrompt,
}: {
setPrompt: React.Dispatch<React.SetStateAction<string>>;
}) {
const {
transcript,
listening,
browserSupportsSpeechRecognition,
resetTranscript,
} = useSpeechRecognition();
const startListening = () =>
SpeechRecognition.startListening({ continuous: true });
useUpdateEffect(() => {
if (transcript) setPrompt(transcript);
}, [transcript]);
useUpdateEffect(() => {
if (!listening) resetTranscript();
}, [listening]);
if (!browserSupportsSpeechRecognition) {
return null;
}
return (
<button
className={classNames(
"flex cursor-pointer flex-none items-center justify-center rounded-full text-sm font-semibold size-8 text-center bg-gray-800 hover:bg-gray-700 text-white shadow-sm dark:shadow-highlight/20 disabled:bg-gray-300 disabled:text-gray-500 disabled:cursor-not-allowed disabled:hover:bg-gray-300",
{
"animate-pulse !bg-orange-500": listening,
}
)}
onTouchStart={startListening}
onMouseDown={startListening}
onTouchEnd={SpeechRecognition.stopListening}
onMouseUp={SpeechRecognition.stopListening}
>
<FaMicrophone className="text-base" />
</button>
);
}
export default SpeechPrompt;