diff --git a/components/PinnedItem.vue b/components/PinnedItem.vue index 73c6bb7b..7e32dee1 100644 --- a/components/PinnedItem.vue +++ b/components/PinnedItem.vue @@ -19,54 +19,177 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . --> + + diff --git a/utils/iconManager.ts b/utils/iconManager.ts new file mode 100644 index 00000000..5fa5034f --- /dev/null +++ b/utils/iconManager.ts @@ -0,0 +1,197 @@ +import { + PhArticle, + PhNotepad, + PhListChecks, + PhBookmark, + PhFlag, + PhStar, + PhPushPin, + // Add more icons here + PhNote, + PhBookmarks, + PhFiles, + PhFolder, + PhFolderOpen, + PhClipboard, + PhClipboardText, + PhKanban, + PhChartBar, + PhGraph, + PhBriefcase, + PhTarget, + PhLightbulb, + PhRocket, +} from "@phosphor-icons/vue"; +import type { Component } from "vue"; + +export interface IconDefinition { + name: string; + component: Component; + category: string; + tags?: string[]; +} + +const iconCategories = [ + "Common", + "Documents", + "Organization", + "Project Management", + "Misc", +] as const; + +export type IconCategory = (typeof iconCategories)[number]; + +export const availableIcons: IconDefinition[] = [ + // Common icons + { + name: "article", + component: PhArticle, + category: "Common", + tags: ["document", "paper", "file"], + }, + { + name: "star", + component: PhStar, + category: "Common", + tags: ["favorite", "important"], + }, + { + name: "pin", + component: PhPushPin, + category: "Common", + tags: ["pinned", "save"], + }, + + // Documents + { + name: "notepad", + component: PhNotepad, + category: "Documents", + tags: ["notes", "write"], + }, + { + name: "note", + component: PhNote, + category: "Documents", + tags: ["memo", "write"], + }, + { + name: "clipboard", + component: PhClipboard, + category: "Documents", + tags: ["tasks", "list"], + }, + { + name: "clipboard-text", + component: PhClipboardText, + category: "Documents", + tags: ["tasks", "list", "notes"], + }, + + // Organization + { + name: "folder", + component: PhFolder, + category: "Organization", + tags: ["directory", "storage"], + }, + { + name: "folder-open", + component: PhFolderOpen, + category: "Organization", + tags: ["directory", "storage"], + }, + { + name: "files", + component: PhFiles, + category: "Organization", + tags: ["documents", "multiple"], + }, + + // Project Management + { + name: "kanban", + component: PhKanban, + category: "Project Management", + tags: ["board", "tasks"], + }, + { + name: "list", + component: PhListChecks, + category: "Project Management", + tags: ["tasks", "todo"], + }, + { + name: "chart", + component: PhChartBar, + category: "Project Management", + tags: ["stats", "progress"], + }, + { + name: "graph", + component: PhGraph, + category: "Project Management", + tags: ["analytics", "progress"], + }, + { + name: "target", + component: PhTarget, + category: "Project Management", + tags: ["goal", "aim"], + }, + + // Misc + { + name: "bookmark", + component: PhBookmark, + category: "Misc", + tags: ["save", "mark"], + }, + { + name: "bookmarks", + component: PhBookmarks, + category: "Misc", + tags: ["save", "multiple"], + }, + { + name: "flag", + component: PhFlag, + category: "Misc", + tags: ["mark", "important"], + }, + { + name: "briefcase", + component: PhBriefcase, + category: "Misc", + tags: ["work", "business"], + }, + { + name: "lightbulb", + component: PhLightbulb, + category: "Misc", + tags: ["idea", "creative"], + }, + { + name: "rocket", + component: PhRocket, + category: "Misc", + tags: ["launch", "start"], + }, +]; + +export const getIconsByCategory = ( + category: IconCategory +): IconDefinition[] => { + return availableIcons.filter((icon) => icon.category === category); +}; + +export const searchIcons = (query: string): IconDefinition[] => { + const searchTerm = query.toLowerCase(); + return availableIcons.filter( + (icon) => + icon.name.toLowerCase().includes(searchTerm) || + icon.tags?.some((tag) => tag.toLowerCase().includes(searchTerm)) + ); +}; + +export const categories = iconCategories; diff --git a/yarn.lock b/yarn.lock index 973dbef7..50f671f8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1972,7 +1972,7 @@ resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-1.6.3.tgz#a78f5ccabbaca1d7ac3ce2acab2b1bd0276b53c4" integrity sha512-HUkWZ+lYHI/Gjkh2QjHD/OBDpqLVmvjZGpLK9losur1Eg974Jip6k+vsoTUxQBCBDfj30eDBct9E1FvXOspWeg== -"@tauri-apps/cli@1.6.3": +"@tauri-apps/cli@^1.6.3": version "1.6.3" resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-1.6.3.tgz#75e23dea0b67774fc6f150d637a0dbecf1f9592c" integrity sha512-q46umd6QLRKDd4Gg6WyZBGa2fWvk0pbeUA5vFomm4uOs1/17LIciHv2iQ4UD+2Yv5H7AO8YiE1t50V0POiEGEw==