15 lines
1.1 KiB
TypeScript
15 lines
1.1 KiB
TypeScript
import records from "./icon-catalog-data.json" with { type: "json" };
|
|
|
|
export const iconCategories = [
|
|
["common", "常用"], ["all", "全部"], ["arrows", "箭头与导航"], ["people", "人物与表情"], ["office", "文件与办公"], ["media", "媒体与设计"], ["tech", "科技与设备"], ["business", "图表与商业"], ["nature", "自然与天气"], ["travel", "出行与地点"], ["shapes", "形状与符号"], ["other", "其他"],
|
|
] as const;
|
|
export const iconCatalog = records;
|
|
export const iconsById = new Map(iconCatalog.map((icon) => [icon.name, icon]));
|
|
export type IconSource = "all" | "lucide" | "tabler";
|
|
export function searchIcons(query: string, category = "all", source: IconSource = "all") {
|
|
const needle = query.trim().toLowerCase().replace(/[-_\s]/g, "");
|
|
return iconCatalog.filter((icon) => (source === "all" || icon.source === source)
|
|
&& (category === "all" || (category === "common" ? icon.common : category === "other" ? !icon.categories.length : icon.categories.includes(category)))
|
|
&& (icon.name + icon.label + icon.keywords).toLowerCase().replace(/[-_\s]/g, "").includes(needle));
|
|
}
|