From a2941967df9b4029bd43fc29fa62b55921259425 Mon Sep 17 00:00:00 2001 From: Acbox Date: Sun, 29 Mar 2026 17:46:33 +0800 Subject: [PATCH] refactor(web): migrate all icons from FontAwesome to Lucide and remove dead code Replace all FontAwesome icon usage across 80+ Vue files with lucide-vue-next components. Remove FontAwesome dependencies (@fortawesome/*) and global registration from main.ts. Delete unused components (data-table, warning-banner, session-metadata, bot-sidebar/bot-item in home, message-list, tts-provider-select), dead utilities (channel-icons.ts, custom-icons.ts), and stale assets (vue.svg). Update AGENTS.md to reflect the new icon strategy. --- apps/web/AGENTS.md | 8 +- apps/web/package.json | 5 - apps/web/src/assets/vue.svg | 1 - .../web/src/components/add-provider/index.vue | 4 +- .../src/components/chat/chat-status/index.vue | 24 +- apps/web/src/components/data-table/index.vue | 77 ------ .../src/components/file-manager/file-list.vue | 21 +- .../components/import-models-dialog/index.vue | 3 +- .../src/components/key-value-editor/index.vue | 6 +- .../master-detail-sidebar-layout/index.vue | 4 +- .../search-provider-logo/custom-icons.ts | 93 ------- .../components/search-provider-logo/index.vue | 4 +- .../searchable-select-popover/index.vue | 10 +- .../src/components/settings-sidebar/index.vue | 30 +-- apps/web/src/components/sidebar/bot-item.vue | 10 +- apps/web/src/components/sidebar/index.vue | 10 +- .../src/components/warning-banner/index.vue | 5 - apps/web/src/main.ts | 21 -- .../src/pages/bots/components/bot-access.vue | 20 +- .../src/pages/bots/components/bot-card.vue | 4 +- .../pages/bots/components/bot-channels.vue | 7 +- .../pages/bots/components/bot-compaction.vue | 4 +- .../src/pages/bots/components/bot-email.vue | 4 +- .../pages/bots/components/bot-heartbeat.vue | 4 +- .../web/src/pages/bots/components/bot-mcp.vue | 21 +- .../src/pages/bots/components/bot-memory.vue | 34 +-- .../pages/bots/components/bot-schedule.vue | 4 +- .../src/pages/bots/components/bot-skills.vue | 13 +- .../components/browser-context-select.vue | 10 +- .../components/channel-settings-panel.vue | 5 +- .../src/pages/bots/components/create-bot.vue | 4 +- .../components/memory-provider-select.vue | 10 +- .../pages/bots/components/message-list.vue | 235 ------------------ .../components/search-provider-select.vue | 4 +- .../bots/components/tts-model-select.vue | 10 +- .../bots/components/tts-provider-select.vue | 84 ------- .../pages/bots/components/weixin-qr-login.vue | 10 +- apps/web/src/pages/bots/detail.vue | 10 +- apps/web/src/pages/bots/index.vue | 6 +- .../components/add-browser-context.vue | 4 +- .../browser/components/context-setting.vue | 6 +- apps/web/src/pages/browser/index.vue | 9 +- .../email/components/add-email-provider.vue | 4 +- .../email/components/provider-setting.vue | 13 +- apps/web/src/pages/email/index.vue | 6 +- .../home/components/attachment-block.vue | 27 +- .../src/pages/home/components/bot-item.vue | 153 ------------ .../src/pages/home/components/bot-sidebar.vue | 192 -------------- .../src/pages/home/components/chat-area.vue | 23 +- .../src/pages/home/components/chat-header.vue | 3 +- .../components/media-gallery-lightbox.vue | 10 +- .../pages/home/components/message-item.vue | 4 +- .../pages/home/components/session-item.vue | 17 +- .../home/components/session-metadata.vue | 194 --------------- .../pages/home/components/session-sidebar.vue | 19 +- .../pages/home/components/thinking-block.vue | 9 +- .../home/components/tool-call-browser.vue | 18 +- .../home/components/tool-call-contacts.vue | 18 +- .../pages/home/components/tool-call-edit.vue | 23 +- .../pages/home/components/tool-call-email.vue | 21 +- .../pages/home/components/tool-call-exec.vue | 18 +- .../home/components/tool-call-generic.vue | 18 +- .../pages/home/components/tool-call-list.vue | 15 +- .../home/components/tool-call-memory.vue | 18 +- .../home/components/tool-call-message.vue | 22 +- .../pages/home/components/tool-call-read.vue | 15 +- .../home/components/tool-call-schedule.vue | 15 +- .../pages/home/components/tool-call-skill.vue | 15 +- .../home/components/tool-call-subagent.vue | 29 ++- .../home/components/tool-call-web-fetch.vue | 18 +- .../home/components/tool-call-web-search.vue | 18 +- .../pages/home/components/tool-call-write.vue | 23 +- apps/web/src/pages/home/index.vue | 2 - .../memory/components/add-memory-provider.vue | 4 +- apps/web/src/pages/memory/index.vue | 9 +- apps/web/src/pages/oauth/mcp-callback.vue | 7 +- .../profile/components/bind-code-section.vue | 4 +- .../profile/components/password-section.vue | 4 +- .../profile/components/profile-section.vue | 4 +- .../pages/providers/components/model-item.vue | 7 +- .../pages/providers/components/model-list.vue | 8 +- .../providers/components/provider-form.vue | 8 +- apps/web/src/pages/providers/index.vue | 3 +- .../speech/components/add-tts-provider.vue | 4 +- .../speech/components/model-config-editor.vue | 4 +- .../speech/components/provider-setting.vue | 12 +- apps/web/src/pages/speech/index.vue | 9 +- .../components/add-search-provider.vue | 4 +- .../components/provider-setting.vue | 3 +- apps/web/src/pages/web-search/index.vue | 6 +- apps/web/src/utils/channel-icons.ts | 34 --- pnpm-lock.yaml | 64 ----- 92 files changed, 407 insertions(+), 1629 deletions(-) delete mode 100644 apps/web/src/assets/vue.svg delete mode 100644 apps/web/src/components/data-table/index.vue delete mode 100644 apps/web/src/components/search-provider-logo/custom-icons.ts delete mode 100644 apps/web/src/components/warning-banner/index.vue delete mode 100644 apps/web/src/pages/bots/components/message-list.vue delete mode 100644 apps/web/src/pages/bots/components/tts-provider-select.vue delete mode 100755 apps/web/src/pages/home/components/bot-item.vue delete mode 100644 apps/web/src/pages/home/components/bot-sidebar.vue delete mode 100644 apps/web/src/pages/home/components/session-metadata.vue delete mode 100644 apps/web/src/utils/channel-icons.ts diff --git a/apps/web/AGENTS.md b/apps/web/AGENTS.md index 2f2d7c0d..32a7321a 100644 --- a/apps/web/AGENTS.md +++ b/apps/web/AGENTS.md @@ -16,7 +16,7 @@ | Data Fetching | Pinia Colada (`@pinia/colada`) + `@memohai/sdk` | | Forms | vee-validate + `@vee-validate/zod` + Zod | | i18n | vue-i18n (en / zh) | -| Icons | FontAwesome (primary: fas/far/fab) + lucide-vue-next (secondary) | +| Icons | lucide-vue-next (primary) + `@memohai/icon` (brand/provider icons) | | Toast | vue-sonner | | Tables | @tanstack/vue-table | | Markdown | markstream-vue + Shiki + Mermaid + KaTeX | @@ -308,8 +308,9 @@ const form = useForm({ ### Icon Usage -- **FontAwesome** (primary): Global ``, full `fas`/`far`/`fab` sets + custom search icons registered in `main.ts` -- **Lucide** (secondary): Direct imports ``, ``, used for theme toggle +- **Lucide** (primary): Direct component imports from `lucide-vue-next`. Example: `import { Plus, Search, Bot } from 'lucide-vue-next'` → ``. Used for all UI icons (actions, navigation, status indicators, etc.). +- **`@memohai/icon`** (brand icons): Workspace package (`packages/icons/`) providing AI provider, search engine, and channel platform SVG icons as Vue components. Example: `import { Openai, Claude } from '@memohai/icon'`. +- **Do NOT use FontAwesome** for new code. Legacy FontAwesome usage remains only in commented-out code blocks. Always use Lucide for UI icons and `@memohai/icon` for brand logos. ### Notification Pattern @@ -424,6 +425,7 @@ Chat supports two transport modes: **Server-Sent Events (SSE)** and **WebSocket* - Style with Tailwind utility classes; avoid `