"use client"; import React, { type SVGProps } from "react"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { Book, Scroll, Library, Map, FileImage, Layers3, Database, Folder, Archive, MessagesSquare, SquareStack, Ghost, Gem, Swords, Bolt, Shield, Hammer, Globe, HardDrive, Upload, Cable, ShoppingCart, ShoppingBag, Check, Filter, } from "lucide-react"; import { filterAccentClasses } from "./knowledge-filter-panel"; import { cn } from "@/lib/utils"; const ICON_MAP = { filter: Filter, book: Book, scroll: Scroll, library: Library, map: Map, image: FileImage, layers3: Layers3, database: Database, folder: Folder, archive: Archive, messagesSquare: MessagesSquare, squareStack: SquareStack, ghost: Ghost, gem: Gem, swords: Swords, bolt: Bolt, shield: Shield, hammer: Hammer, globe: Globe, hardDrive: HardDrive, upload: Upload, cable: Cable, shoppingCart: ShoppingCart, shoppingBag: ShoppingBag, } as const; export type IconKey = keyof typeof ICON_MAP; export function iconKeyToComponent( key?: string, ): React.ComponentType> | undefined { if (!key) return undefined; return ( ICON_MAP as Record>> )[key]; } 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", }; export interface FilterIconPopoverProps { color: FilterColor; iconKey: IconKey; 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) => ( ))}
{Object.keys(ICON_MAP).map((k: string) => { const OptIcon = ICON_MAP[k as IconKey]; const active = iconKey === k; return ( ); })}
); }