|
import { jsx as _jsx } from "react/jsx-runtime"; |
|
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, }) { |
|
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 (_jsx("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, children: _jsx(FaMicrophone, { className: "text-base" }) })); |
|
} |
|
export default SpeechPrompt; |
|
|