Spaces:
Paused
Paused
| "use client" | |
| import { ReactNode, useEffect, useState } from "react" | |
| import { onlyText } from "react-children-utilities" | |
| import { useTimeout } from "@/lib/useTimeout" | |
| import { useStore } from "./useStore" | |
| export function Speak({ | |
| children | |
| }: { | |
| children: ReactNode | |
| }) { | |
| const isSpeechSynthesisAvailable = useStore(state => state.isSpeechSynthesisAvailable) | |
| const lastSpokenSentence = useStore(state => state.lastSpokenSentence) | |
| const init = useStore(state => state.init) | |
| const speak = useStore(state => state.speak) | |
| const newMessage = onlyText(children).trim() | |
| useEffect(() => { init() }, []) | |
| const canSpeak = isSpeechSynthesisAvailable && newMessage?.length && newMessage !== lastSpokenSentence | |
| useEffect(() => { | |
| console.log("debug:", { canSpeak, newMessage }) | |
| if (canSpeak) { | |
| console.log("speaking!") | |
| speak(newMessage) | |
| } | |
| }, [canSpeak, newMessage]) | |
| return null | |
| } |