import { useState, useMemo } from "react"; import { type LucideIcon, } from "lucide-react"; import { AGENT_ICON_NAMES, type AgentIconName } from "@paperclipai/shared"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { Input } from "@/components/ui/input"; import { cn } from "@/lib/utils"; import { AGENT_ICONS, getAgentIcon } from "../lib/agent-icons"; const DEFAULT_ICON: AgentIconName = "bot"; interface AgentIconProps { icon: string | null | undefined; className?: string; } export function AgentIcon({ icon, className }: AgentIconProps) { const Icon = getAgentIcon(icon); return ; } interface AgentIconPickerProps { value: string | null | undefined; onChange: (icon: string) => void; children: React.ReactNode; } export function AgentIconPicker({ value, onChange, children }: AgentIconPickerProps) { const [open, setOpen] = useState(false); const [search, setSearch] = useState(""); const filtered = useMemo(() => { const entries = AGENT_ICON_NAMES.map((name) => [name, AGENT_ICONS[name]] as const); if (!search) return entries; const q = search.toLowerCase(); return entries.filter(([name]) => name.includes(q)); }, [search]); return ( {children} setSearch(e.target.value)} className="mb-2 h-8 text-sm" autoFocus />
{filtered.map(([name, Icon]) => ( ))} {filtered.length === 0 && (

No icons match

)}
); }