import React, { useState, useMemo } from "react"; import { useTranslation } from "react-i18next"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { ProviderIcon } from "./ProviderIcon"; import { iconList } from "@/icons/extracted"; import { searchIcons, getIconMetadata } from "@/icons/extracted/metadata"; import { cn } from "@/lib/utils"; interface IconPickerProps { value?: string; // 当前选中的图标 onValueChange: (icon: string) => void; // 选择回调 color?: string; // 预览颜色 } export const IconPicker: React.FC = ({ value, onValueChange, }) => { const { t } = useTranslation(); const [searchQuery, setSearchQuery] = useState(""); // 过滤图标列表 const filteredIcons = useMemo(() => { if (!searchQuery) return iconList; return searchIcons(searchQuery); }, [searchQuery]); return (
setSearchQuery(e.target.value)} className="mt-2" />
{filteredIcons.map((iconName) => { const meta = getIconMetadata(iconName); const isSelected = value === iconName; return ( ); })}
{filteredIcons.length === 0 && (
{t("iconPicker.noResults", { defaultValue: "未找到匹配的图标" })}
)}
); };