"use client"; import React, { type SVGProps } from "react"; import { Button } from "@/components/ui/button"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { Filter as FilterIcon, Star, Book, FileText, Folder, Globe, Calendar, User, Users, Tag, Briefcase, Building2, Cog, Database, Cpu, Bot, MessageSquare, Search, Shield, Lock, Key, Link, Mail, Phone, Check, } from "lucide-react"; import { filterAccentClasses } from "./knowledge-filter-panel"; const ICON_MAP = { Filter: FilterIcon, Star, Book, FileText, Folder, Globe, Calendar, User, Users, Tag, Briefcase, Building2, Cog, Database, Cpu, Bot, MessageSquare, Search, Shield, Lock, Key, Link, Mail, Phone, } as const; export type IconKey = keyof typeof ICON_MAP; function iconKeyToComponent( key: string ): React.ComponentType> { return ( (ICON_MAP as Record>>)[ key ] || FilterIcon ); } const COLORS = [ "zinc", "pink", "purple", "indigo", "emerald", "amber", "red", ] as const; export type FilterColor = (typeof COLORS)[number]; const colorSwatchClasses = { zinc: "bg-muted-foreground", pink: "bg-accent-pink-foreground", purple: "bg-accent-purple-foreground", indigo: "bg-accent-indigo-foreground", emerald: "bg-accent-emerald-foreground", amber: "bg-accent-amber-foreground", red: "bg-accent-red-foreground", "": "bg-muted-foreground", }; export interface FilterIconPopoverProps { color: FilterColor; iconKey: IconKey | string; onColorChange: (c: FilterColor) => void; onIconChange: (k: IconKey) => void; triggerClassName?: string; } export function FilterIconPopover({ color, iconKey, onColorChange, onIconChange, triggerClassName, }: FilterIconPopoverProps) { const Icon = iconKeyToComponent(iconKey); return (
{COLORS.map((c) => ( ))}
Icon
{(Object.keys(ICON_MAP) as IconKey[]).map((k) => { const OptIcon = ICON_MAP[k]; const active = iconKey === k; return ( ); })}
); }