import { useState, useEffect } from "react"; import { motion } from "motion/react"; import { Bot } from "lucide-react"; function useLoadingMessages() { const [messages, setMessages] = useState([]); useEffect(() => { fetch("/loading-messages.yaml") .then((r) => r.text()) .then((text) => { const parsed = text .split("\n") .filter((l) => l.trimStart().startsWith("- ")) .map((l) => l.replace(/^\s*- /, "").trim()) .filter(Boolean); if (parsed.length > 0) setMessages(parsed); }) .catch(() => {}); }, []); return messages; } export default function TypingIndicator() { const loadingMessages = useLoadingMessages(); const [phraseIndex, setPhraseIndex] = useState(0); useEffect(() => { if (loadingMessages.length === 0) return; setPhraseIndex(Math.floor(Math.random() * loadingMessages.length)); const id = setInterval(() => { setPhraseIndex((prev) => { let next: number; do { next = Math.floor(Math.random() * loadingMessages.length); } while (loadingMessages.length > 1 && next === prev); return next; }); }, 300); return () => clearInterval(id); }, [loadingMessages]); return (
{loadingMessages.length > 0 ? ( {loadingMessages[phraseIndex]}… ) : (
)}
); }