import { useState, useMemo } from 'react' import { MagnifyingGlass } from '@phosphor-icons/react' import { ICON_OPTIONS, type IconEntry } from '../utils/iconRegistry' import { ACCENT_COLORS } from '../utils/typeColors' import { cn } from '@/lib/utils' function filterIcons(icons: IconEntry[], query: string): IconEntry[] { if (!query) return icons const lower = query.toLowerCase() return icons.filter((o) => o.name.includes(lower)) } interface TypeCustomizePopoverProps { currentIcon: string | null currentColor: string | null onChangeIcon: (icon: string) => void onChangeColor: (color: string) => void onClose: () => void } export function TypeCustomizePopover({ currentIcon, currentColor, onChangeIcon, onChangeColor, onClose, }: TypeCustomizePopoverProps) { const [selectedColor, setSelectedColor] = useState(currentColor) const [selectedIcon, setSelectedIcon] = useState(currentIcon) const [search, setSearch] = useState('') const filteredIcons = useMemo(() => filterIcons(ICON_OPTIONS, search), [search]) const handleColorClick = (key: string) => { setSelectedColor(key) onChangeColor(key) } const handleIconClick = (name: string) => { setSelectedIcon(name) onChangeIcon(name) } return (
e.stopPropagation()} onContextMenu={(e) => e.stopPropagation()} > {/* Color section */}
COLOR
{ACCENT_COLORS.map((c) => (
{/* Icon section */}
ICON
{/* Search input */}
setSearch(e.target.value)} placeholder="Search icons…" className="w-full rounded border border-border bg-background pl-7 pr-2 py-1 text-[12px] text-foreground placeholder:text-muted-foreground outline-none focus:border-primary" />
{/* Icon grid */}
{filteredIcons.length === 0 ? (
No icons found
) : ( filteredIcons.map(({ name, Icon }) => ( )) )}
{/* Done button */}
) }