import { AgentState } from "@/lib/types"; import { useEffect, useState } from "react"; type AgentMultibandAudioVisualizerProps = { state: AgentState; barWidth: number; minBarHeight: number; maxBarHeight: number; accentColor: string; accentShade?: number; frequencies: Float32Array[]; borderRadius: number; gap: number; }; export const AgentMultibandAudioVisualizer = ({ state, barWidth, minBarHeight, maxBarHeight, accentColor, accentShade, frequencies, borderRadius, gap, }: AgentMultibandAudioVisualizerProps) => { const summedFrequencies = frequencies.map((bandFrequencies) => { const sum = bandFrequencies.reduce((a, b) => a + b, 0); return Math.sqrt(sum / bandFrequencies.length); }); const [thinkingIndex, setThinkingIndex] = useState( Math.floor(summedFrequencies.length / 2) ); const [thinkingDirection, setThinkingDirection] = useState<"left" | "right">( "right" ); useEffect(() => { if (state !== "thinking") { setThinkingIndex(Math.floor(summedFrequencies.length / 2)); return; } const timeout = setTimeout(() => { if (thinkingDirection === "right") { if (thinkingIndex === summedFrequencies.length - 1) { setThinkingDirection("left"); setThinkingIndex((prev) => prev - 1); } else { setThinkingIndex((prev) => prev + 1); } } else { if (thinkingIndex === 0) { setThinkingDirection("right"); setThinkingIndex((prev) => prev + 1); } else { setThinkingIndex((prev) => prev - 1); } } }, 200); return () => clearTimeout(timeout); }, [state, summedFrequencies.length, thinkingDirection, thinkingIndex]); return (