"use client";
import type { PersonaState } from "@/components/ai-elements/persona";
import { Persona } from "@/components/ai-elements/persona";
import { Button } from "@/components/ui/button";
import { ButtonGroup } from "@/components/ui/button-group";
import {
Tooltip,
TooltipContent,
TooltipTrigger,
} from "@/components/ui/tooltip";
import type { LucideIcon } from "lucide-react";
import {
BrainIcon,
CircleIcon,
EyeClosedIcon,
MegaphoneIcon,
MicIcon,
} from "lucide-react";
import { memo, useCallback, useState } from "react";
interface StateButtonProps {
state: { state: PersonaState; icon: LucideIcon; label: string };
currentState: PersonaState;
onStateChange: (state: PersonaState) => void;
}
const StateButton = memo(
({ state, currentState, onStateChange }: StateButtonProps) => {
const handleClick = useCallback(
() => onStateChange(state.state),
[onStateChange, state.state]
);
return (
{state.label}
);
}
);
StateButton.displayName = "StateButton";
const states: {
state: PersonaState;
icon: LucideIcon;
label: string;
}[] = [
{
icon: CircleIcon,
label: "Idle",
state: "idle",
},
{
icon: MicIcon,
label: "Listening",
state: "listening",
},
{
icon: BrainIcon,
label: "Thinking",
state: "thinking",
},
{
icon: MegaphoneIcon,
label: "Speaking",
state: "speaking",
},
{
icon: EyeClosedIcon,
label: "Asleep",
state: "asleep",
},
];
const Example = () => {
const [currentState, setCurrentState] = useState("idle");
const handleStateChange = useCallback((state: PersonaState) => {
setCurrentState(state);
}, []);
return (
{states.map((state) => (
))}
);
};
export default Example;