From 897cc3219403423c8ca773e2a15498be2ded3651 Mon Sep 17 00:00:00 2001 From: Acbox Date: Sun, 22 Mar 2026 22:07:32 +0800 Subject: [PATCH] feat(web): add @memoh/icon package and unify brand icon system Replace FontAwesome/CDN brand icons with local SVG-based Vue components in a new shared @memoh/icon package. Provider icon URLs in conf/providers YAML files are replaced with preset names, intercepted by ProviderIcon component on the frontend. SearchProviderLogo and ChannelIcon components are migrated to @memoh/icon. All icon containers now use a unified circular gray (rounded-full bg-muted) style. Adds wechat and matrix channel icons. --- apps/web/package.json | 1 + .../web/src/components/channel-icon/index.vue | 49 ++++++ .../chat-list/channel-badge/index.vue | 22 +-- .../web/src/components/provider-icon/icons.ts | 140 ++++++++++++++++++ .../src/components/provider-icon/index.vue | 39 +++++ .../components/search-provider-logo/icons.ts | 33 ----- .../components/search-provider-logo/index.vue | 92 ++++++++++-- .../pages/bots/components/bot-channels.vue | 38 +---- .../components/channel-settings-panel.vue | 20 ++- apps/web/src/pages/models/index.vue | 17 +-- apps/web/src/pages/models/model-setting.vue | 16 +- apps/web/src/utils/channel-icons.ts | 28 ---- conf/providers/anthropic.yaml | 2 +- conf/providers/deepseek.yaml | 2 +- conf/providers/google.yaml | 2 +- conf/providers/groq.yaml | 2 +- conf/providers/huggingface.yaml | 2 +- conf/providers/lmstudio.yaml | 2 +- conf/providers/minimax.yaml | 2 +- conf/providers/mistral.yaml | 2 +- conf/providers/moonshot.yaml | 2 +- conf/providers/newapi.yaml | 2 +- conf/providers/ollama.yaml | 2 +- conf/providers/openai.yaml | 2 +- conf/providers/openrouter.yaml | 2 +- conf/providers/qwen.yaml | 2 +- conf/providers/xai.yaml | 2 +- mise.toml | 4 + packages/icons/icons/anthropic.svg | 1 + packages/icons/icons/azure-color.svg | 1 + packages/icons/icons/azure.svg | 1 + packages/icons/icons/baichuan-color.svg | 1 + packages/icons/icons/baichuan.svg | 1 + packages/icons/icons/bailian-color.svg | 1 + packages/icons/icons/bailian.svg | 1 + packages/icons/icons/bedrock-color.svg | 1 + packages/icons/icons/bedrock.svg | 1 + packages/icons/icons/bing-color.svg | 1 + packages/icons/icons/bing.svg | 1 + packages/icons/icons/bocha.svg | 1 + packages/icons/icons/brave.svg | 1 + packages/icons/icons/claude-color.svg | 1 + packages/icons/icons/claude.svg | 1 + packages/icons/icons/cohere-color.svg | 1 + packages/icons/icons/cohere.svg | 1 + packages/icons/icons/deepseek-color.svg | 1 + packages/icons/icons/deepseek.svg | 1 + packages/icons/icons/discord.svg | 1 + packages/icons/icons/doubao-color.svg | 1 + packages/icons/icons/doubao.svg | 1 + packages/icons/icons/duckduckgo.svg | 1 + packages/icons/icons/exa-color.svg | 1 + packages/icons/icons/exa.svg | 1 + packages/icons/icons/feishu.svg | 1 + packages/icons/icons/fireworks-color.svg | 1 + packages/icons/icons/fireworks.svg | 1 + packages/icons/icons/gemini-color.svg | 1 + packages/icons/icons/gemini.svg | 1 + packages/icons/icons/google-brand-color.svg | 1 + packages/icons/icons/google-color.svg | 1 + packages/icons/icons/google.svg | 1 + packages/icons/icons/groq.svg | 1 + packages/icons/icons/huggingface-color.svg | 1 + packages/icons/icons/huggingface.svg | 1 + packages/icons/icons/hunyuan-color.svg | 1 + packages/icons/icons/hunyuan.svg | 1 + packages/icons/icons/jina.svg | 1 + packages/icons/icons/kimi-color.svg | 1 + packages/icons/icons/kimi.svg | 1 + packages/icons/icons/lmstudio.svg | 1 + packages/icons/icons/matrix.svg | 5 + packages/icons/icons/meta-color.svg | 1 + packages/icons/icons/meta.svg | 1 + packages/icons/icons/microsoft-color.svg | 1 + packages/icons/icons/microsoft.svg | 1 + packages/icons/icons/minimax-color.svg | 1 + packages/icons/icons/minimax.svg | 1 + packages/icons/icons/mistral-color.svg | 1 + packages/icons/icons/mistral.svg | 1 + packages/icons/icons/moonshot.svg | 1 + packages/icons/icons/newapi-color.svg | 1 + packages/icons/icons/newapi.svg | 1 + packages/icons/icons/nvidia-color.svg | 1 + packages/icons/icons/nvidia.svg | 1 + packages/icons/icons/ollama.svg | 1 + packages/icons/icons/openai.svg | 1 + packages/icons/icons/openrouter.svg | 1 + packages/icons/icons/qq.svg | 1 + packages/icons/icons/qwen-color.svg | 1 + packages/icons/icons/qwen.svg | 1 + packages/icons/icons/searxng.svg | 1 + packages/icons/icons/serper.svg | 1 + packages/icons/icons/siliconcloud-color.svg | 1 + packages/icons/icons/siliconcloud.svg | 1 + packages/icons/icons/slack.svg | 1 + packages/icons/icons/sogou.svg | 1 + packages/icons/icons/spark-color.svg | 1 + packages/icons/icons/spark.svg | 1 + packages/icons/icons/stepfun-color.svg | 1 + packages/icons/icons/stepfun.svg | 1 + packages/icons/icons/tavily-color.svg | 1 + packages/icons/icons/tavily.svg | 1 + packages/icons/icons/telegram.svg | 1 + packages/icons/icons/together-color.svg | 1 + packages/icons/icons/together.svg | 1 + packages/icons/icons/vertexai-color.svg | 1 + packages/icons/icons/vertexai.svg | 1 + packages/icons/icons/volcengine-color.svg | 1 + packages/icons/icons/volcengine.svg | 1 + packages/icons/icons/wechat.svg | 1 + packages/icons/icons/xai.svg | 1 + packages/icons/icons/yandex.svg | 1 + packages/icons/icons/yi-color.svg | 1 + packages/icons/icons/yi.svg | 1 + packages/icons/icons/zhipu-color.svg | 1 + packages/icons/icons/zhipu.svg | 1 + packages/icons/package.json | 18 +++ packages/icons/scripts/generate.ts | 99 +++++++++++++ packages/icons/scripts/manifest.ts | 96 ++++++++++++ packages/icons/src/icons/Anthropic.vue | 15 ++ packages/icons/src/icons/Azure.vue | 15 ++ packages/icons/src/icons/AzureColor.vue | 14 ++ packages/icons/src/icons/Baichuan.vue | 15 ++ packages/icons/src/icons/BaichuanColor.vue | 14 ++ packages/icons/src/icons/Bailian.vue | 15 ++ packages/icons/src/icons/BailianColor.vue | 14 ++ packages/icons/src/icons/Bedrock.vue | 15 ++ packages/icons/src/icons/BedrockColor.vue | 14 ++ packages/icons/src/icons/Bing.vue | 15 ++ packages/icons/src/icons/BingColor.vue | 14 ++ packages/icons/src/icons/Bocha.vue | 15 ++ packages/icons/src/icons/Brave.vue | 15 ++ packages/icons/src/icons/Claude.vue | 15 ++ packages/icons/src/icons/ClaudeColor.vue | 14 ++ packages/icons/src/icons/Cohere.vue | 15 ++ packages/icons/src/icons/CohereColor.vue | 14 ++ packages/icons/src/icons/Deepseek.vue | 15 ++ packages/icons/src/icons/DeepseekColor.vue | 14 ++ packages/icons/src/icons/Discord.vue | 15 ++ packages/icons/src/icons/Doubao.vue | 15 ++ packages/icons/src/icons/DoubaoColor.vue | 14 ++ packages/icons/src/icons/Duckduckgo.vue | 15 ++ packages/icons/src/icons/Exa.vue | 15 ++ packages/icons/src/icons/ExaColor.vue | 14 ++ packages/icons/src/icons/Feishu.vue | 15 ++ packages/icons/src/icons/Fireworks.vue | 15 ++ packages/icons/src/icons/FireworksColor.vue | 14 ++ packages/icons/src/icons/Gemini.vue | 15 ++ packages/icons/src/icons/GeminiColor.vue | 14 ++ packages/icons/src/icons/Google.vue | 15 ++ packages/icons/src/icons/GoogleBrandColor.vue | 14 ++ packages/icons/src/icons/GoogleColor.vue | 14 ++ packages/icons/src/icons/Groq.vue | 15 ++ packages/icons/src/icons/Huggingface.vue | 15 ++ packages/icons/src/icons/HuggingfaceColor.vue | 14 ++ packages/icons/src/icons/Hunyuan.vue | 15 ++ packages/icons/src/icons/HunyuanColor.vue | 14 ++ packages/icons/src/icons/Jina.vue | 15 ++ packages/icons/src/icons/Kimi.vue | 15 ++ packages/icons/src/icons/KimiColor.vue | 14 ++ packages/icons/src/icons/Lmstudio.vue | 15 ++ packages/icons/src/icons/Matrix.vue | 16 ++ packages/icons/src/icons/Meta.vue | 15 ++ packages/icons/src/icons/MetaColor.vue | 14 ++ packages/icons/src/icons/Microsoft.vue | 15 ++ packages/icons/src/icons/MicrosoftColor.vue | 14 ++ packages/icons/src/icons/Minimax.vue | 15 ++ packages/icons/src/icons/MinimaxColor.vue | 14 ++ packages/icons/src/icons/Mistral.vue | 15 ++ packages/icons/src/icons/MistralColor.vue | 14 ++ packages/icons/src/icons/Moonshot.vue | 15 ++ packages/icons/src/icons/Newapi.vue | 15 ++ packages/icons/src/icons/NewapiColor.vue | 14 ++ packages/icons/src/icons/Nvidia.vue | 15 ++ packages/icons/src/icons/NvidiaColor.vue | 14 ++ packages/icons/src/icons/Ollama.vue | 15 ++ packages/icons/src/icons/Openai.vue | 15 ++ packages/icons/src/icons/Openrouter.vue | 15 ++ packages/icons/src/icons/Qq.vue | 15 ++ packages/icons/src/icons/Qwen.vue | 15 ++ packages/icons/src/icons/QwenColor.vue | 14 ++ packages/icons/src/icons/Searxng.vue | 15 ++ packages/icons/src/icons/Serper.vue | 15 ++ packages/icons/src/icons/Siliconcloud.vue | 15 ++ .../icons/src/icons/SiliconcloudColor.vue | 14 ++ packages/icons/src/icons/Slack.vue | 15 ++ packages/icons/src/icons/Sogou.vue | 15 ++ packages/icons/src/icons/Spark.vue | 15 ++ packages/icons/src/icons/SparkColor.vue | 14 ++ packages/icons/src/icons/Stepfun.vue | 15 ++ packages/icons/src/icons/StepfunColor.vue | 14 ++ packages/icons/src/icons/Tavily.vue | 15 ++ packages/icons/src/icons/TavilyColor.vue | 14 ++ packages/icons/src/icons/Telegram.vue | 14 ++ packages/icons/src/icons/Together.vue | 15 ++ packages/icons/src/icons/TogetherColor.vue | 15 ++ packages/icons/src/icons/Vertexai.vue | 15 ++ packages/icons/src/icons/VertexaiColor.vue | 14 ++ packages/icons/src/icons/Volcengine.vue | 15 ++ packages/icons/src/icons/VolcengineColor.vue | 14 ++ packages/icons/src/icons/Wechat.vue | 14 ++ packages/icons/src/icons/Xai.vue | 15 ++ packages/icons/src/icons/Yandex.vue | 15 ++ packages/icons/src/icons/Yi.vue | 15 ++ packages/icons/src/icons/YiColor.vue | 15 ++ packages/icons/src/icons/Zhipu.vue | 15 ++ packages/icons/src/icons/ZhipuColor.vue | 14 ++ packages/icons/src/index.ts | 88 +++++++++++ packages/icons/tsconfig.json | 12 ++ pnpm-lock.yaml | 13 ++ 210 files changed, 2076 insertions(+), 159 deletions(-) create mode 100644 apps/web/src/components/channel-icon/index.vue create mode 100644 apps/web/src/components/provider-icon/icons.ts create mode 100644 apps/web/src/components/provider-icon/index.vue delete mode 100644 apps/web/src/components/search-provider-logo/icons.ts delete mode 100644 apps/web/src/utils/channel-icons.ts create mode 100644 packages/icons/icons/anthropic.svg create mode 100644 packages/icons/icons/azure-color.svg create mode 100644 packages/icons/icons/azure.svg create mode 100644 packages/icons/icons/baichuan-color.svg create mode 100644 packages/icons/icons/baichuan.svg create mode 100644 packages/icons/icons/bailian-color.svg create mode 100644 packages/icons/icons/bailian.svg create mode 100644 packages/icons/icons/bedrock-color.svg create mode 100644 packages/icons/icons/bedrock.svg create mode 100644 packages/icons/icons/bing-color.svg create mode 100644 packages/icons/icons/bing.svg create mode 100644 packages/icons/icons/bocha.svg create mode 100644 packages/icons/icons/brave.svg create mode 100644 packages/icons/icons/claude-color.svg create mode 100644 packages/icons/icons/claude.svg create mode 100644 packages/icons/icons/cohere-color.svg create mode 100644 packages/icons/icons/cohere.svg create mode 100644 packages/icons/icons/deepseek-color.svg create mode 100644 packages/icons/icons/deepseek.svg create mode 100644 packages/icons/icons/discord.svg create mode 100644 packages/icons/icons/doubao-color.svg create mode 100644 packages/icons/icons/doubao.svg create mode 100644 packages/icons/icons/duckduckgo.svg create mode 100644 packages/icons/icons/exa-color.svg create mode 100644 packages/icons/icons/exa.svg create mode 100644 packages/icons/icons/feishu.svg create mode 100644 packages/icons/icons/fireworks-color.svg create mode 100644 packages/icons/icons/fireworks.svg create mode 100644 packages/icons/icons/gemini-color.svg create mode 100644 packages/icons/icons/gemini.svg create mode 100644 packages/icons/icons/google-brand-color.svg create mode 100644 packages/icons/icons/google-color.svg create mode 100644 packages/icons/icons/google.svg create mode 100644 packages/icons/icons/groq.svg create mode 100644 packages/icons/icons/huggingface-color.svg create mode 100644 packages/icons/icons/huggingface.svg create mode 100644 packages/icons/icons/hunyuan-color.svg create mode 100644 packages/icons/icons/hunyuan.svg create mode 100644 packages/icons/icons/jina.svg create mode 100644 packages/icons/icons/kimi-color.svg create mode 100644 packages/icons/icons/kimi.svg create mode 100644 packages/icons/icons/lmstudio.svg create mode 100644 packages/icons/icons/matrix.svg create mode 100644 packages/icons/icons/meta-color.svg create mode 100644 packages/icons/icons/meta.svg create mode 100644 packages/icons/icons/microsoft-color.svg create mode 100644 packages/icons/icons/microsoft.svg create mode 100644 packages/icons/icons/minimax-color.svg create mode 100644 packages/icons/icons/minimax.svg create mode 100644 packages/icons/icons/mistral-color.svg create mode 100644 packages/icons/icons/mistral.svg create mode 100644 packages/icons/icons/moonshot.svg create mode 100644 packages/icons/icons/newapi-color.svg create mode 100644 packages/icons/icons/newapi.svg create mode 100644 packages/icons/icons/nvidia-color.svg create mode 100644 packages/icons/icons/nvidia.svg create mode 100644 packages/icons/icons/ollama.svg create mode 100644 packages/icons/icons/openai.svg create mode 100644 packages/icons/icons/openrouter.svg create mode 100644 packages/icons/icons/qq.svg create mode 100644 packages/icons/icons/qwen-color.svg create mode 100644 packages/icons/icons/qwen.svg create mode 100644 packages/icons/icons/searxng.svg create mode 100644 packages/icons/icons/serper.svg create mode 100644 packages/icons/icons/siliconcloud-color.svg create mode 100644 packages/icons/icons/siliconcloud.svg create mode 100644 packages/icons/icons/slack.svg create mode 100644 packages/icons/icons/sogou.svg create mode 100644 packages/icons/icons/spark-color.svg create mode 100644 packages/icons/icons/spark.svg create mode 100644 packages/icons/icons/stepfun-color.svg create mode 100644 packages/icons/icons/stepfun.svg create mode 100644 packages/icons/icons/tavily-color.svg create mode 100644 packages/icons/icons/tavily.svg create mode 100644 packages/icons/icons/telegram.svg create mode 100644 packages/icons/icons/together-color.svg create mode 100644 packages/icons/icons/together.svg create mode 100644 packages/icons/icons/vertexai-color.svg create mode 100644 packages/icons/icons/vertexai.svg create mode 100644 packages/icons/icons/volcengine-color.svg create mode 100644 packages/icons/icons/volcengine.svg create mode 100644 packages/icons/icons/wechat.svg create mode 100644 packages/icons/icons/xai.svg create mode 100644 packages/icons/icons/yandex.svg create mode 100644 packages/icons/icons/yi-color.svg create mode 100644 packages/icons/icons/yi.svg create mode 100644 packages/icons/icons/zhipu-color.svg create mode 100644 packages/icons/icons/zhipu.svg create mode 100644 packages/icons/package.json create mode 100644 packages/icons/scripts/generate.ts create mode 100644 packages/icons/scripts/manifest.ts create mode 100644 packages/icons/src/icons/Anthropic.vue create mode 100644 packages/icons/src/icons/Azure.vue create mode 100644 packages/icons/src/icons/AzureColor.vue create mode 100644 packages/icons/src/icons/Baichuan.vue create mode 100644 packages/icons/src/icons/BaichuanColor.vue create mode 100644 packages/icons/src/icons/Bailian.vue create mode 100644 packages/icons/src/icons/BailianColor.vue create mode 100644 packages/icons/src/icons/Bedrock.vue create mode 100644 packages/icons/src/icons/BedrockColor.vue create mode 100644 packages/icons/src/icons/Bing.vue create mode 100644 packages/icons/src/icons/BingColor.vue create mode 100644 packages/icons/src/icons/Bocha.vue create mode 100644 packages/icons/src/icons/Brave.vue create mode 100644 packages/icons/src/icons/Claude.vue create mode 100644 packages/icons/src/icons/ClaudeColor.vue create mode 100644 packages/icons/src/icons/Cohere.vue create mode 100644 packages/icons/src/icons/CohereColor.vue create mode 100644 packages/icons/src/icons/Deepseek.vue create mode 100644 packages/icons/src/icons/DeepseekColor.vue create mode 100644 packages/icons/src/icons/Discord.vue create mode 100644 packages/icons/src/icons/Doubao.vue create mode 100644 packages/icons/src/icons/DoubaoColor.vue create mode 100644 packages/icons/src/icons/Duckduckgo.vue create mode 100644 packages/icons/src/icons/Exa.vue create mode 100644 packages/icons/src/icons/ExaColor.vue create mode 100644 packages/icons/src/icons/Feishu.vue create mode 100644 packages/icons/src/icons/Fireworks.vue create mode 100644 packages/icons/src/icons/FireworksColor.vue create mode 100644 packages/icons/src/icons/Gemini.vue create mode 100644 packages/icons/src/icons/GeminiColor.vue create mode 100644 packages/icons/src/icons/Google.vue create mode 100644 packages/icons/src/icons/GoogleBrandColor.vue create mode 100644 packages/icons/src/icons/GoogleColor.vue create mode 100644 packages/icons/src/icons/Groq.vue create mode 100644 packages/icons/src/icons/Huggingface.vue create mode 100644 packages/icons/src/icons/HuggingfaceColor.vue create mode 100644 packages/icons/src/icons/Hunyuan.vue create mode 100644 packages/icons/src/icons/HunyuanColor.vue create mode 100644 packages/icons/src/icons/Jina.vue create mode 100644 packages/icons/src/icons/Kimi.vue create mode 100644 packages/icons/src/icons/KimiColor.vue create mode 100644 packages/icons/src/icons/Lmstudio.vue create mode 100644 packages/icons/src/icons/Matrix.vue create mode 100644 packages/icons/src/icons/Meta.vue create mode 100644 packages/icons/src/icons/MetaColor.vue create mode 100644 packages/icons/src/icons/Microsoft.vue create mode 100644 packages/icons/src/icons/MicrosoftColor.vue create mode 100644 packages/icons/src/icons/Minimax.vue create mode 100644 packages/icons/src/icons/MinimaxColor.vue create mode 100644 packages/icons/src/icons/Mistral.vue create mode 100644 packages/icons/src/icons/MistralColor.vue create mode 100644 packages/icons/src/icons/Moonshot.vue create mode 100644 packages/icons/src/icons/Newapi.vue create mode 100644 packages/icons/src/icons/NewapiColor.vue create mode 100644 packages/icons/src/icons/Nvidia.vue create mode 100644 packages/icons/src/icons/NvidiaColor.vue create mode 100644 packages/icons/src/icons/Ollama.vue create mode 100644 packages/icons/src/icons/Openai.vue create mode 100644 packages/icons/src/icons/Openrouter.vue create mode 100644 packages/icons/src/icons/Qq.vue create mode 100644 packages/icons/src/icons/Qwen.vue create mode 100644 packages/icons/src/icons/QwenColor.vue create mode 100644 packages/icons/src/icons/Searxng.vue create mode 100644 packages/icons/src/icons/Serper.vue create mode 100644 packages/icons/src/icons/Siliconcloud.vue create mode 100644 packages/icons/src/icons/SiliconcloudColor.vue create mode 100644 packages/icons/src/icons/Slack.vue create mode 100644 packages/icons/src/icons/Sogou.vue create mode 100644 packages/icons/src/icons/Spark.vue create mode 100644 packages/icons/src/icons/SparkColor.vue create mode 100644 packages/icons/src/icons/Stepfun.vue create mode 100644 packages/icons/src/icons/StepfunColor.vue create mode 100644 packages/icons/src/icons/Tavily.vue create mode 100644 packages/icons/src/icons/TavilyColor.vue create mode 100644 packages/icons/src/icons/Telegram.vue create mode 100644 packages/icons/src/icons/Together.vue create mode 100644 packages/icons/src/icons/TogetherColor.vue create mode 100644 packages/icons/src/icons/Vertexai.vue create mode 100644 packages/icons/src/icons/VertexaiColor.vue create mode 100644 packages/icons/src/icons/Volcengine.vue create mode 100644 packages/icons/src/icons/VolcengineColor.vue create mode 100644 packages/icons/src/icons/Wechat.vue create mode 100644 packages/icons/src/icons/Xai.vue create mode 100644 packages/icons/src/icons/Yandex.vue create mode 100644 packages/icons/src/icons/Yi.vue create mode 100644 packages/icons/src/icons/YiColor.vue create mode 100644 packages/icons/src/icons/Zhipu.vue create mode 100644 packages/icons/src/icons/ZhipuColor.vue create mode 100644 packages/icons/src/index.ts create mode 100644 packages/icons/tsconfig.json diff --git a/apps/web/package.json b/apps/web/package.json index 1ad08c46..2dc6337e 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -14,6 +14,7 @@ "@fortawesome/free-regular-svg-icons": "^7.0.0", "@fortawesome/free-solid-svg-icons": "^7.0.0", "@fortawesome/vue-fontawesome": "^3.1.1", + "@memoh/icon": "workspace:*", "@memoh/sdk": "workspace:*", "@memoh/ui": "workspace:*", "@pinia/colada": "^0.21.1", diff --git a/apps/web/src/components/channel-icon/index.vue b/apps/web/src/components/channel-icon/index.vue new file mode 100644 index 00000000..7bce3596 --- /dev/null +++ b/apps/web/src/components/channel-icon/index.vue @@ -0,0 +1,49 @@ + + + diff --git a/apps/web/src/components/chat-list/channel-badge/index.vue b/apps/web/src/components/chat-list/channel-badge/index.vue index 7e1320a6..42e199f5 100644 --- a/apps/web/src/components/chat-list/channel-badge/index.vue +++ b/apps/web/src/components/chat-list/channel-badge/index.vue @@ -1,31 +1,23 @@ diff --git a/apps/web/src/components/provider-icon/icons.ts b/apps/web/src/components/provider-icon/icons.ts new file mode 100644 index 00000000..74455b1a --- /dev/null +++ b/apps/web/src/components/provider-icon/icons.ts @@ -0,0 +1,140 @@ +import type { Component } from 'vue' +import { + Anthropic, + Azure, + AzureColor, + Baichuan, + BaichuanColor, + Bailian, + BailianColor, + Bedrock, + BedrockColor, + Claude, + ClaudeColor, + Cohere, + CohereColor, + Deepseek, + DeepseekColor, + Doubao, + DoubaoColor, + Fireworks, + FireworksColor, + Gemini, + GeminiColor, + Google, + GoogleBrandColor, + GoogleColor, + Groq, + Huggingface, + HuggingfaceColor, + Hunyuan, + HunyuanColor, + Kimi, + KimiColor, + Lmstudio, + Meta, + MetaColor, + Minimax, + MinimaxColor, + Mistral, + MistralColor, + Moonshot, + Newapi, + NewapiColor, + Nvidia, + NvidiaColor, + Ollama, + Openai, + Openrouter, + Qwen, + QwenColor, + Siliconcloud, + SiliconcloudColor, + Spark, + SparkColor, + Stepfun, + StepfunColor, + Together, + TogetherColor, + Vertexai, + VertexaiColor, + Volcengine, + VolcengineColor, + Xai, + Yi, + YiColor, + Zhipu, + ZhipuColor, +} from '@memoh/icon' + +/** + * Maps preset icon names (stored in DB) to @memoh/icon Vue components. + * The key is the SVG filename without extension (e.g. 'openai', 'deepseek-color'). + */ +export const iconMap: Record = { + 'openai': Openai, + 'anthropic': Anthropic, + 'google': Google, + 'google-color': GoogleColor, + 'google-brand-color': GoogleBrandColor, + 'deepseek': Deepseek, + 'deepseek-color': DeepseekColor, + 'groq': Groq, + 'huggingface': Huggingface, + 'huggingface-color': HuggingfaceColor, + 'lmstudio': Lmstudio, + 'minimax': Minimax, + 'minimax-color': MinimaxColor, + 'mistral': Mistral, + 'mistral-color': MistralColor, + 'moonshot': Moonshot, + 'ollama': Ollama, + 'openrouter': Openrouter, + 'qwen': Qwen, + 'qwen-color': QwenColor, + 'xai': Xai, + 'claude': Claude, + 'claude-color': ClaudeColor, + 'gemini': Gemini, + 'gemini-color': GeminiColor, + 'meta': Meta, + 'meta-color': MetaColor, + 'cohere': Cohere, + 'cohere-color': CohereColor, + 'azure': Azure, + 'azure-color': AzureColor, + 'nvidia': Nvidia, + 'nvidia-color': NvidiaColor, + 'fireworks': Fireworks, + 'fireworks-color': FireworksColor, + 'together': Together, + 'together-color': TogetherColor, + 'bedrock': Bedrock, + 'bedrock-color': BedrockColor, + 'vertexai': Vertexai, + 'vertexai-color': VertexaiColor, + 'baichuan': Baichuan, + 'baichuan-color': BaichuanColor, + 'zhipu': Zhipu, + 'zhipu-color': ZhipuColor, + 'yi': Yi, + 'yi-color': YiColor, + 'stepfun': Stepfun, + 'stepfun-color': StepfunColor, + 'kimi': Kimi, + 'kimi-color': KimiColor, + 'doubao': Doubao, + 'doubao-color': DoubaoColor, + 'spark': Spark, + 'spark-color': SparkColor, + 'hunyuan': Hunyuan, + 'hunyuan-color': HunyuanColor, + 'bailian': Bailian, + 'bailian-color': BailianColor, + 'siliconcloud': Siliconcloud, + 'siliconcloud-color': SiliconcloudColor, + 'volcengine': Volcengine, + 'volcengine-color': VolcengineColor, + 'newapi': Newapi, + 'newapi-color': NewapiColor, +} diff --git a/apps/web/src/components/provider-icon/index.vue b/apps/web/src/components/provider-icon/index.vue new file mode 100644 index 00000000..0ce888a5 --- /dev/null +++ b/apps/web/src/components/provider-icon/index.vue @@ -0,0 +1,39 @@ + + + diff --git a/apps/web/src/components/search-provider-logo/icons.ts b/apps/web/src/components/search-provider-logo/icons.ts deleted file mode 100644 index b8890fa4..00000000 --- a/apps/web/src/components/search-provider-logo/icons.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Search provider icon registry (FontAwesome). - * - * To add a new provider icon: - * 1. Find the icon in FontAwesome (https://fontawesome.com/icons) - * or add a custom definition in custom-icons.ts - * 2. Import it in `main.ts` and add to `library.add()` - * 3. Add the [prefix, iconName] tuple to PROVIDER_ICONS below - * - * The key must match the `provider` field stored in the database (lowercase). - */ - -const PROVIDER_ICONS: Record = { - brave: ['fab', 'brave'], - bing: ['fab', 'microsoft'], - google: ['fab', 'google'], - yandex: ['fab', 'yandex'], - tavily: ['fac', 'tavily'], - jina: ['fac', 'jina'], - exa: ['fac', 'exa'], - bocha: ['fac', 'bocha'], - duckduckgo: ['fac', 'duckduckgo'], - searxng: ['fac', 'searxng'], - sogou: ['fac', 'sogou'], - serper: ['fac', 'serper'], -} - -const DEFAULT_ICON: [string, string] = ['fas', 'globe'] - -export function getSearchProviderIcon(provider: string): [string, string] { - if (!provider) return DEFAULT_ICON - return PROVIDER_ICONS[provider.trim().toLowerCase()] ?? DEFAULT_ICON -} diff --git a/apps/web/src/components/search-provider-logo/index.vue b/apps/web/src/components/search-provider-logo/index.vue index de57fbcf..d41ffad1 100644 --- a/apps/web/src/components/search-provider-logo/index.vue +++ b/apps/web/src/components/search-provider-logo/index.vue @@ -1,33 +1,99 @@ diff --git a/apps/web/src/pages/bots/components/bot-channels.vue b/apps/web/src/pages/bots/components/bot-channels.vue index 200733f8..a0d3b545 100644 --- a/apps/web/src/pages/bots/components/bot-channels.vue +++ b/apps/web/src/pages/bots/components/bot-channels.vue @@ -41,12 +41,9 @@ :class="{ 'bg-accent': selectedType === item.meta.type }" @click="selectedType = item.meta.type as string" > -
- {{ channelIcon(item.meta.type) }} -
+ + +
{{ item.meta.display_name }} @@ -103,12 +100,9 @@ class="flex w-full items-center gap-3 rounded-md px-3 py-2 text-sm hover:bg-accent transition-colors" @click="addChannel(item.meta.type)" > -
- {{ channelIcon(item.meta.type) }} -
+ + + {{ item.meta.display_name }} @@ -148,6 +142,7 @@ import { useQuery } from '@pinia/colada' import { getChannels, getBotsByIdChannelByPlatform } from '@memoh/sdk' import type { HandlersChannelMeta, ChannelChannelConfig } from '@memoh/sdk' import ChannelSettingsPanel from './channel-settings-panel.vue' +import ChannelIcon from '@/components/channel-icon/index.vue' export interface BotChannelItem { meta: HandlersChannelMeta @@ -219,23 +214,4 @@ function addChannel(type: string) { selectedType.value = type } -function channelIcon(type: string): string { - const icons: Record = { - qq: 'QQ', - telegram: 'TG', - matrix: 'MX', - feishu: '飞', - } - return icons[type] ?? type.slice(0, 2).toUpperCase() -} - -function channelBadgeClass(type: string): string { - const classes: Record = { - qq: 'bg-sky-100 text-sky-700 dark:bg-sky-900 dark:text-sky-300', - telegram: 'bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300', - matrix: 'bg-emerald-100 text-emerald-700 dark:bg-emerald-900 dark:text-emerald-300', - feishu: 'bg-indigo-100 text-indigo-700 dark:bg-indigo-900 dark:text-indigo-300', - } - return classes[type] ?? 'bg-secondary text-secondary-foreground' -} diff --git a/apps/web/src/pages/bots/components/channel-settings-panel.vue b/apps/web/src/pages/bots/components/channel-settings-panel.vue index 6526be6b..3654b91f 100644 --- a/apps/web/src/pages/bots/components/channel-settings-panel.vue +++ b/apps/web/src/pages/bots/components/channel-settings-panel.vue @@ -2,13 +2,18 @@
-
-

- {{ channelItem.meta.display_name }} -

-

- {{ channelItem.meta.type }} -

+
+ + + +
+

+ {{ channelItem.meta.display_name }} +

+

+ {{ channelItem.meta.type }} +

+
+` +} + +// --------------------------------------------------------------------------- +// Main +// --------------------------------------------------------------------------- + +console.log('🎨 @memoh/icon generator\n') + +fs.mkdirSync(SRC_ICONS_DIR, { recursive: true }) + +const exports: string[] = [] +let generated = 0 +let missing = 0 + +for (const file of manifest) { + const svgPath = path.join(ICONS_DIR, `${file}.svg`) + + if (!fs.existsSync(svgPath)) { + console.warn(` ⚠ SVG not found: ${file}.svg (skipping)`) + missing++ + continue + } + + const svg = fs.readFileSync(svgPath, 'utf-8').trim() + const { viewBox, innerContent, isColor } = extractSvgAttrs(svg) + + if (!innerContent) { + console.warn(` ⚠ Empty SVG content: ${file}.svg (skipping)`) + missing++ + continue + } + + const componentName = toPascalCase(file) + const sfcContent = generateVueSFC(viewBox, innerContent, isColor) + const outPath = path.join(SRC_ICONS_DIR, `${componentName}.vue`) + + fs.writeFileSync(outPath, sfcContent) + exports.push(`export { default as ${componentName} } from './icons/${componentName}.vue'`) + generated++ +} + +exports.sort() +fs.writeFileSync(INDEX_FILE, exports.join('\n') + '\n') + +console.log(` ✅ Generated: ${generated}, Missing: ${missing}`) +console.log(` 📄 Index: ${exports.length} exports written to src/index.ts`) +console.log('\n✨ Done!\n') diff --git a/packages/icons/scripts/manifest.ts b/packages/icons/scripts/manifest.ts new file mode 100644 index 00000000..e9de9857 --- /dev/null +++ b/packages/icons/scripts/manifest.ts @@ -0,0 +1,96 @@ +/** + * Icon manifest: list of SVG filenames (without .svg extension) in the icons/ directory. + * The generate script reads each file and produces a Vue SFC component. + * + * To add a new icon: place the .svg file in icons/ and add the filename here. + */ + +function withVariants(name: string, variants: string[]): string[] { + return [name, ...variants.map(v => `${name}-${v}`)] +} + +// --------------------------------------------------------------------------- +// LLM Providers +// --------------------------------------------------------------------------- + +const llmProviders: string[] = [ + ...withVariants('openai', []), + ...withVariants('anthropic', []), + ...withVariants('google', ['color', 'brand-color']), + ...withVariants('deepseek', ['color']), + ...withVariants('groq', []), + ...withVariants('huggingface', ['color']), + ...withVariants('lmstudio', []), + ...withVariants('minimax', ['color']), + ...withVariants('mistral', ['color']), + ...withVariants('moonshot', []), + ...withVariants('ollama', []), + ...withVariants('openrouter', []), + ...withVariants('qwen', ['color']), + ...withVariants('xai', []), + ...withVariants('claude', ['color']), + ...withVariants('gemini', ['color']), + ...withVariants('meta', ['color']), + ...withVariants('cohere', ['color']), + ...withVariants('azure', ['color']), + ...withVariants('nvidia', ['color']), + ...withVariants('fireworks', ['color']), + ...withVariants('together', ['color']), + ...withVariants('bedrock', ['color']), + ...withVariants('vertexai', ['color']), + ...withVariants('baichuan', ['color']), + ...withVariants('zhipu', ['color']), + ...withVariants('yi', ['color']), + ...withVariants('stepfun', ['color']), + ...withVariants('kimi', ['color']), + ...withVariants('doubao', ['color']), + ...withVariants('spark', ['color']), + ...withVariants('hunyuan', ['color']), + ...withVariants('bailian', ['color']), + ...withVariants('siliconcloud', ['color']), + ...withVariants('volcengine', ['color']), + ...withVariants('newapi', ['color']), +] + +// --------------------------------------------------------------------------- +// Search Providers +// --------------------------------------------------------------------------- + +const searchProviders: string[] = [ + ...withVariants('bing', ['color']), + ...withVariants('yandex', []), + ...withVariants('tavily', ['color']), + ...withVariants('jina', []), + ...withVariants('exa', ['color']), + ...withVariants('microsoft', ['color']), + 'brave', + 'bocha', + 'duckduckgo', + 'searxng', + 'sogou', + 'serper', +] + +// --------------------------------------------------------------------------- +// Channel Platforms +// --------------------------------------------------------------------------- + +const channelPlatforms: string[] = [ + 'qq', + 'telegram', + 'discord', + 'slack', + 'feishu', + 'wechat', + 'matrix', +] + +// --------------------------------------------------------------------------- +// Export +// --------------------------------------------------------------------------- + +export const manifest: string[] = [ + ...llmProviders, + ...searchProviders, + ...channelPlatforms, +] diff --git a/packages/icons/src/icons/Anthropic.vue b/packages/icons/src/icons/Anthropic.vue new file mode 100644 index 00000000..2498df62 --- /dev/null +++ b/packages/icons/src/icons/Anthropic.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Azure.vue b/packages/icons/src/icons/Azure.vue new file mode 100644 index 00000000..4c5d46ff --- /dev/null +++ b/packages/icons/src/icons/Azure.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/AzureColor.vue b/packages/icons/src/icons/AzureColor.vue new file mode 100644 index 00000000..bbcd35f8 --- /dev/null +++ b/packages/icons/src/icons/AzureColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Baichuan.vue b/packages/icons/src/icons/Baichuan.vue new file mode 100644 index 00000000..e2754f92 --- /dev/null +++ b/packages/icons/src/icons/Baichuan.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/BaichuanColor.vue b/packages/icons/src/icons/BaichuanColor.vue new file mode 100644 index 00000000..0a32ebef --- /dev/null +++ b/packages/icons/src/icons/BaichuanColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Bailian.vue b/packages/icons/src/icons/Bailian.vue new file mode 100644 index 00000000..0663e438 --- /dev/null +++ b/packages/icons/src/icons/Bailian.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/BailianColor.vue b/packages/icons/src/icons/BailianColor.vue new file mode 100644 index 00000000..84ddf72b --- /dev/null +++ b/packages/icons/src/icons/BailianColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Bedrock.vue b/packages/icons/src/icons/Bedrock.vue new file mode 100644 index 00000000..db8dccd5 --- /dev/null +++ b/packages/icons/src/icons/Bedrock.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/BedrockColor.vue b/packages/icons/src/icons/BedrockColor.vue new file mode 100644 index 00000000..a833170b --- /dev/null +++ b/packages/icons/src/icons/BedrockColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Bing.vue b/packages/icons/src/icons/Bing.vue new file mode 100644 index 00000000..0de65204 --- /dev/null +++ b/packages/icons/src/icons/Bing.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/BingColor.vue b/packages/icons/src/icons/BingColor.vue new file mode 100644 index 00000000..fb777d31 --- /dev/null +++ b/packages/icons/src/icons/BingColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Bocha.vue b/packages/icons/src/icons/Bocha.vue new file mode 100644 index 00000000..6607bc81 --- /dev/null +++ b/packages/icons/src/icons/Bocha.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Brave.vue b/packages/icons/src/icons/Brave.vue new file mode 100644 index 00000000..5c0ae844 --- /dev/null +++ b/packages/icons/src/icons/Brave.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Claude.vue b/packages/icons/src/icons/Claude.vue new file mode 100644 index 00000000..2ebdb193 --- /dev/null +++ b/packages/icons/src/icons/Claude.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/ClaudeColor.vue b/packages/icons/src/icons/ClaudeColor.vue new file mode 100644 index 00000000..259b8199 --- /dev/null +++ b/packages/icons/src/icons/ClaudeColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Cohere.vue b/packages/icons/src/icons/Cohere.vue new file mode 100644 index 00000000..0cab6544 --- /dev/null +++ b/packages/icons/src/icons/Cohere.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/CohereColor.vue b/packages/icons/src/icons/CohereColor.vue new file mode 100644 index 00000000..3a49f6e1 --- /dev/null +++ b/packages/icons/src/icons/CohereColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Deepseek.vue b/packages/icons/src/icons/Deepseek.vue new file mode 100644 index 00000000..8967ea3a --- /dev/null +++ b/packages/icons/src/icons/Deepseek.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/DeepseekColor.vue b/packages/icons/src/icons/DeepseekColor.vue new file mode 100644 index 00000000..9dc8aa21 --- /dev/null +++ b/packages/icons/src/icons/DeepseekColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Discord.vue b/packages/icons/src/icons/Discord.vue new file mode 100644 index 00000000..9fe5e229 --- /dev/null +++ b/packages/icons/src/icons/Discord.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Doubao.vue b/packages/icons/src/icons/Doubao.vue new file mode 100644 index 00000000..705bb691 --- /dev/null +++ b/packages/icons/src/icons/Doubao.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/DoubaoColor.vue b/packages/icons/src/icons/DoubaoColor.vue new file mode 100644 index 00000000..c94c09ae --- /dev/null +++ b/packages/icons/src/icons/DoubaoColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Duckduckgo.vue b/packages/icons/src/icons/Duckduckgo.vue new file mode 100644 index 00000000..177a71fd --- /dev/null +++ b/packages/icons/src/icons/Duckduckgo.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Exa.vue b/packages/icons/src/icons/Exa.vue new file mode 100644 index 00000000..aa8d59fc --- /dev/null +++ b/packages/icons/src/icons/Exa.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/ExaColor.vue b/packages/icons/src/icons/ExaColor.vue new file mode 100644 index 00000000..4ed4a3e4 --- /dev/null +++ b/packages/icons/src/icons/ExaColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Feishu.vue b/packages/icons/src/icons/Feishu.vue new file mode 100644 index 00000000..fc8e5655 --- /dev/null +++ b/packages/icons/src/icons/Feishu.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Fireworks.vue b/packages/icons/src/icons/Fireworks.vue new file mode 100644 index 00000000..a319f3fb --- /dev/null +++ b/packages/icons/src/icons/Fireworks.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/FireworksColor.vue b/packages/icons/src/icons/FireworksColor.vue new file mode 100644 index 00000000..722814ff --- /dev/null +++ b/packages/icons/src/icons/FireworksColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Gemini.vue b/packages/icons/src/icons/Gemini.vue new file mode 100644 index 00000000..12e2d611 --- /dev/null +++ b/packages/icons/src/icons/Gemini.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/GeminiColor.vue b/packages/icons/src/icons/GeminiColor.vue new file mode 100644 index 00000000..d0789c6c --- /dev/null +++ b/packages/icons/src/icons/GeminiColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Google.vue b/packages/icons/src/icons/Google.vue new file mode 100644 index 00000000..182bad2f --- /dev/null +++ b/packages/icons/src/icons/Google.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/GoogleBrandColor.vue b/packages/icons/src/icons/GoogleBrandColor.vue new file mode 100644 index 00000000..05cb521d --- /dev/null +++ b/packages/icons/src/icons/GoogleBrandColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/GoogleColor.vue b/packages/icons/src/icons/GoogleColor.vue new file mode 100644 index 00000000..a6c9f3f3 --- /dev/null +++ b/packages/icons/src/icons/GoogleColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Groq.vue b/packages/icons/src/icons/Groq.vue new file mode 100644 index 00000000..c4449868 --- /dev/null +++ b/packages/icons/src/icons/Groq.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Huggingface.vue b/packages/icons/src/icons/Huggingface.vue new file mode 100644 index 00000000..f01270aa --- /dev/null +++ b/packages/icons/src/icons/Huggingface.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/HuggingfaceColor.vue b/packages/icons/src/icons/HuggingfaceColor.vue new file mode 100644 index 00000000..958691ab --- /dev/null +++ b/packages/icons/src/icons/HuggingfaceColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Hunyuan.vue b/packages/icons/src/icons/Hunyuan.vue new file mode 100644 index 00000000..97fdb245 --- /dev/null +++ b/packages/icons/src/icons/Hunyuan.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/HunyuanColor.vue b/packages/icons/src/icons/HunyuanColor.vue new file mode 100644 index 00000000..0818bdf1 --- /dev/null +++ b/packages/icons/src/icons/HunyuanColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Jina.vue b/packages/icons/src/icons/Jina.vue new file mode 100644 index 00000000..027412c0 --- /dev/null +++ b/packages/icons/src/icons/Jina.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Kimi.vue b/packages/icons/src/icons/Kimi.vue new file mode 100644 index 00000000..889a59d3 --- /dev/null +++ b/packages/icons/src/icons/Kimi.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/KimiColor.vue b/packages/icons/src/icons/KimiColor.vue new file mode 100644 index 00000000..f7e59e81 --- /dev/null +++ b/packages/icons/src/icons/KimiColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Lmstudio.vue b/packages/icons/src/icons/Lmstudio.vue new file mode 100644 index 00000000..0e531ba7 --- /dev/null +++ b/packages/icons/src/icons/Lmstudio.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Matrix.vue b/packages/icons/src/icons/Matrix.vue new file mode 100644 index 00000000..56ba6c12 --- /dev/null +++ b/packages/icons/src/icons/Matrix.vue @@ -0,0 +1,16 @@ + + + diff --git a/packages/icons/src/icons/Meta.vue b/packages/icons/src/icons/Meta.vue new file mode 100644 index 00000000..c35f4a68 --- /dev/null +++ b/packages/icons/src/icons/Meta.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/MetaColor.vue b/packages/icons/src/icons/MetaColor.vue new file mode 100644 index 00000000..eace2ae9 --- /dev/null +++ b/packages/icons/src/icons/MetaColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Microsoft.vue b/packages/icons/src/icons/Microsoft.vue new file mode 100644 index 00000000..d044bf41 --- /dev/null +++ b/packages/icons/src/icons/Microsoft.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/MicrosoftColor.vue b/packages/icons/src/icons/MicrosoftColor.vue new file mode 100644 index 00000000..2b316500 --- /dev/null +++ b/packages/icons/src/icons/MicrosoftColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Minimax.vue b/packages/icons/src/icons/Minimax.vue new file mode 100644 index 00000000..0344f6a8 --- /dev/null +++ b/packages/icons/src/icons/Minimax.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/MinimaxColor.vue b/packages/icons/src/icons/MinimaxColor.vue new file mode 100644 index 00000000..854eeccc --- /dev/null +++ b/packages/icons/src/icons/MinimaxColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Mistral.vue b/packages/icons/src/icons/Mistral.vue new file mode 100644 index 00000000..9679d549 --- /dev/null +++ b/packages/icons/src/icons/Mistral.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/MistralColor.vue b/packages/icons/src/icons/MistralColor.vue new file mode 100644 index 00000000..9eb48da8 --- /dev/null +++ b/packages/icons/src/icons/MistralColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Moonshot.vue b/packages/icons/src/icons/Moonshot.vue new file mode 100644 index 00000000..80024fc4 --- /dev/null +++ b/packages/icons/src/icons/Moonshot.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Newapi.vue b/packages/icons/src/icons/Newapi.vue new file mode 100644 index 00000000..cae7fb4c --- /dev/null +++ b/packages/icons/src/icons/Newapi.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/NewapiColor.vue b/packages/icons/src/icons/NewapiColor.vue new file mode 100644 index 00000000..e91ea7d4 --- /dev/null +++ b/packages/icons/src/icons/NewapiColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Nvidia.vue b/packages/icons/src/icons/Nvidia.vue new file mode 100644 index 00000000..ab72d71e --- /dev/null +++ b/packages/icons/src/icons/Nvidia.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/NvidiaColor.vue b/packages/icons/src/icons/NvidiaColor.vue new file mode 100644 index 00000000..007077f7 --- /dev/null +++ b/packages/icons/src/icons/NvidiaColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Ollama.vue b/packages/icons/src/icons/Ollama.vue new file mode 100644 index 00000000..efcc91f4 --- /dev/null +++ b/packages/icons/src/icons/Ollama.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Openai.vue b/packages/icons/src/icons/Openai.vue new file mode 100644 index 00000000..d9cd0388 --- /dev/null +++ b/packages/icons/src/icons/Openai.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Openrouter.vue b/packages/icons/src/icons/Openrouter.vue new file mode 100644 index 00000000..d079ee3b --- /dev/null +++ b/packages/icons/src/icons/Openrouter.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Qq.vue b/packages/icons/src/icons/Qq.vue new file mode 100644 index 00000000..cf17b46b --- /dev/null +++ b/packages/icons/src/icons/Qq.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Qwen.vue b/packages/icons/src/icons/Qwen.vue new file mode 100644 index 00000000..4f886945 --- /dev/null +++ b/packages/icons/src/icons/Qwen.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/QwenColor.vue b/packages/icons/src/icons/QwenColor.vue new file mode 100644 index 00000000..00963160 --- /dev/null +++ b/packages/icons/src/icons/QwenColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Searxng.vue b/packages/icons/src/icons/Searxng.vue new file mode 100644 index 00000000..e52fda4b --- /dev/null +++ b/packages/icons/src/icons/Searxng.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Serper.vue b/packages/icons/src/icons/Serper.vue new file mode 100644 index 00000000..8a21a42b --- /dev/null +++ b/packages/icons/src/icons/Serper.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Siliconcloud.vue b/packages/icons/src/icons/Siliconcloud.vue new file mode 100644 index 00000000..6a6c071c --- /dev/null +++ b/packages/icons/src/icons/Siliconcloud.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/SiliconcloudColor.vue b/packages/icons/src/icons/SiliconcloudColor.vue new file mode 100644 index 00000000..804f9b7d --- /dev/null +++ b/packages/icons/src/icons/SiliconcloudColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Slack.vue b/packages/icons/src/icons/Slack.vue new file mode 100644 index 00000000..dd9638d1 --- /dev/null +++ b/packages/icons/src/icons/Slack.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Sogou.vue b/packages/icons/src/icons/Sogou.vue new file mode 100644 index 00000000..b2ac65a0 --- /dev/null +++ b/packages/icons/src/icons/Sogou.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Spark.vue b/packages/icons/src/icons/Spark.vue new file mode 100644 index 00000000..98aee41f --- /dev/null +++ b/packages/icons/src/icons/Spark.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/SparkColor.vue b/packages/icons/src/icons/SparkColor.vue new file mode 100644 index 00000000..6bcaaed3 --- /dev/null +++ b/packages/icons/src/icons/SparkColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Stepfun.vue b/packages/icons/src/icons/Stepfun.vue new file mode 100644 index 00000000..1138feca --- /dev/null +++ b/packages/icons/src/icons/Stepfun.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/StepfunColor.vue b/packages/icons/src/icons/StepfunColor.vue new file mode 100644 index 00000000..0e3fbcf5 --- /dev/null +++ b/packages/icons/src/icons/StepfunColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Tavily.vue b/packages/icons/src/icons/Tavily.vue new file mode 100644 index 00000000..4d2b7f60 --- /dev/null +++ b/packages/icons/src/icons/Tavily.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/TavilyColor.vue b/packages/icons/src/icons/TavilyColor.vue new file mode 100644 index 00000000..c6a75939 --- /dev/null +++ b/packages/icons/src/icons/TavilyColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Telegram.vue b/packages/icons/src/icons/Telegram.vue new file mode 100644 index 00000000..ad93bba5 --- /dev/null +++ b/packages/icons/src/icons/Telegram.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Together.vue b/packages/icons/src/icons/Together.vue new file mode 100644 index 00000000..e343c81b --- /dev/null +++ b/packages/icons/src/icons/Together.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/TogetherColor.vue b/packages/icons/src/icons/TogetherColor.vue new file mode 100644 index 00000000..d5124a43 --- /dev/null +++ b/packages/icons/src/icons/TogetherColor.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Vertexai.vue b/packages/icons/src/icons/Vertexai.vue new file mode 100644 index 00000000..43149ad5 --- /dev/null +++ b/packages/icons/src/icons/Vertexai.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/VertexaiColor.vue b/packages/icons/src/icons/VertexaiColor.vue new file mode 100644 index 00000000..a8ad18bc --- /dev/null +++ b/packages/icons/src/icons/VertexaiColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Volcengine.vue b/packages/icons/src/icons/Volcengine.vue new file mode 100644 index 00000000..6c911f86 --- /dev/null +++ b/packages/icons/src/icons/Volcengine.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/VolcengineColor.vue b/packages/icons/src/icons/VolcengineColor.vue new file mode 100644 index 00000000..57969e60 --- /dev/null +++ b/packages/icons/src/icons/VolcengineColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Wechat.vue b/packages/icons/src/icons/Wechat.vue new file mode 100644 index 00000000..6279eaad --- /dev/null +++ b/packages/icons/src/icons/Wechat.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/icons/Xai.vue b/packages/icons/src/icons/Xai.vue new file mode 100644 index 00000000..8a99d858 --- /dev/null +++ b/packages/icons/src/icons/Xai.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Yandex.vue b/packages/icons/src/icons/Yandex.vue new file mode 100644 index 00000000..ee8ba946 --- /dev/null +++ b/packages/icons/src/icons/Yandex.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Yi.vue b/packages/icons/src/icons/Yi.vue new file mode 100644 index 00000000..3b64f249 --- /dev/null +++ b/packages/icons/src/icons/Yi.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/YiColor.vue b/packages/icons/src/icons/YiColor.vue new file mode 100644 index 00000000..bd940a3f --- /dev/null +++ b/packages/icons/src/icons/YiColor.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/Zhipu.vue b/packages/icons/src/icons/Zhipu.vue new file mode 100644 index 00000000..6ad20849 --- /dev/null +++ b/packages/icons/src/icons/Zhipu.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/icons/src/icons/ZhipuColor.vue b/packages/icons/src/icons/ZhipuColor.vue new file mode 100644 index 00000000..e4592a48 --- /dev/null +++ b/packages/icons/src/icons/ZhipuColor.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/icons/src/index.ts b/packages/icons/src/index.ts new file mode 100644 index 00000000..63d0e2dd --- /dev/null +++ b/packages/icons/src/index.ts @@ -0,0 +1,88 @@ +export { default as Anthropic } from './icons/Anthropic.vue' +export { default as Azure } from './icons/Azure.vue' +export { default as AzureColor } from './icons/AzureColor.vue' +export { default as Baichuan } from './icons/Baichuan.vue' +export { default as BaichuanColor } from './icons/BaichuanColor.vue' +export { default as Bailian } from './icons/Bailian.vue' +export { default as BailianColor } from './icons/BailianColor.vue' +export { default as Bedrock } from './icons/Bedrock.vue' +export { default as BedrockColor } from './icons/BedrockColor.vue' +export { default as Bing } from './icons/Bing.vue' +export { default as BingColor } from './icons/BingColor.vue' +export { default as Bocha } from './icons/Bocha.vue' +export { default as Brave } from './icons/Brave.vue' +export { default as Claude } from './icons/Claude.vue' +export { default as ClaudeColor } from './icons/ClaudeColor.vue' +export { default as Cohere } from './icons/Cohere.vue' +export { default as CohereColor } from './icons/CohereColor.vue' +export { default as Deepseek } from './icons/Deepseek.vue' +export { default as DeepseekColor } from './icons/DeepseekColor.vue' +export { default as Discord } from './icons/Discord.vue' +export { default as Doubao } from './icons/Doubao.vue' +export { default as DoubaoColor } from './icons/DoubaoColor.vue' +export { default as Duckduckgo } from './icons/Duckduckgo.vue' +export { default as Exa } from './icons/Exa.vue' +export { default as ExaColor } from './icons/ExaColor.vue' +export { default as Feishu } from './icons/Feishu.vue' +export { default as Fireworks } from './icons/Fireworks.vue' +export { default as FireworksColor } from './icons/FireworksColor.vue' +export { default as Gemini } from './icons/Gemini.vue' +export { default as GeminiColor } from './icons/GeminiColor.vue' +export { default as Google } from './icons/Google.vue' +export { default as GoogleBrandColor } from './icons/GoogleBrandColor.vue' +export { default as GoogleColor } from './icons/GoogleColor.vue' +export { default as Groq } from './icons/Groq.vue' +export { default as Huggingface } from './icons/Huggingface.vue' +export { default as HuggingfaceColor } from './icons/HuggingfaceColor.vue' +export { default as Hunyuan } from './icons/Hunyuan.vue' +export { default as HunyuanColor } from './icons/HunyuanColor.vue' +export { default as Jina } from './icons/Jina.vue' +export { default as Kimi } from './icons/Kimi.vue' +export { default as KimiColor } from './icons/KimiColor.vue' +export { default as Lmstudio } from './icons/Lmstudio.vue' +export { default as Matrix } from './icons/Matrix.vue' +export { default as Meta } from './icons/Meta.vue' +export { default as MetaColor } from './icons/MetaColor.vue' +export { default as Microsoft } from './icons/Microsoft.vue' +export { default as MicrosoftColor } from './icons/MicrosoftColor.vue' +export { default as Minimax } from './icons/Minimax.vue' +export { default as MinimaxColor } from './icons/MinimaxColor.vue' +export { default as Mistral } from './icons/Mistral.vue' +export { default as MistralColor } from './icons/MistralColor.vue' +export { default as Moonshot } from './icons/Moonshot.vue' +export { default as Newapi } from './icons/Newapi.vue' +export { default as NewapiColor } from './icons/NewapiColor.vue' +export { default as Nvidia } from './icons/Nvidia.vue' +export { default as NvidiaColor } from './icons/NvidiaColor.vue' +export { default as Ollama } from './icons/Ollama.vue' +export { default as Openai } from './icons/Openai.vue' +export { default as Openrouter } from './icons/Openrouter.vue' +export { default as Qq } from './icons/Qq.vue' +export { default as Qwen } from './icons/Qwen.vue' +export { default as QwenColor } from './icons/QwenColor.vue' +export { default as Searxng } from './icons/Searxng.vue' +export { default as Serper } from './icons/Serper.vue' +export { default as Siliconcloud } from './icons/Siliconcloud.vue' +export { default as SiliconcloudColor } from './icons/SiliconcloudColor.vue' +export { default as Slack } from './icons/Slack.vue' +export { default as Sogou } from './icons/Sogou.vue' +export { default as Spark } from './icons/Spark.vue' +export { default as SparkColor } from './icons/SparkColor.vue' +export { default as Stepfun } from './icons/Stepfun.vue' +export { default as StepfunColor } from './icons/StepfunColor.vue' +export { default as Tavily } from './icons/Tavily.vue' +export { default as TavilyColor } from './icons/TavilyColor.vue' +export { default as Telegram } from './icons/Telegram.vue' +export { default as Together } from './icons/Together.vue' +export { default as TogetherColor } from './icons/TogetherColor.vue' +export { default as Vertexai } from './icons/Vertexai.vue' +export { default as VertexaiColor } from './icons/VertexaiColor.vue' +export { default as Volcengine } from './icons/Volcengine.vue' +export { default as VolcengineColor } from './icons/VolcengineColor.vue' +export { default as Wechat } from './icons/Wechat.vue' +export { default as Xai } from './icons/Xai.vue' +export { default as Yandex } from './icons/Yandex.vue' +export { default as Yi } from './icons/Yi.vue' +export { default as YiColor } from './icons/YiColor.vue' +export { default as Zhipu } from './icons/Zhipu.vue' +export { default as ZhipuColor } from './icons/ZhipuColor.vue' diff --git a/packages/icons/tsconfig.json b/packages/icons/tsconfig.json new file mode 100644 index 00000000..3ad4649a --- /dev/null +++ b/packages/icons/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "Bundler", + "strict": true, + "jsx": "preserve", + "noEmit": true, + "skipLibCheck": true + }, + "include": ["src/**/*", "src/**/*.vue"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b6b50fc7..f78c7765 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -91,6 +91,9 @@ importers: '@fortawesome/vue-fontawesome': specifier: ^3.1.1 version: 3.1.3(@fortawesome/fontawesome-svg-core@7.2.0)(vue@3.5.26(typescript@5.9.3)) + '@memoh/icon': + specifier: workspace:* + version: link:../../packages/icons '@memoh/sdk': specifier: workspace:* version: link:../../packages/sdk @@ -268,6 +271,16 @@ importers: specifier: ^5 version: 5.9.3 + packages/icons: + dependencies: + vue: + specifier: ^3.5.26 + version: 3.5.26(typescript@5.9.3) + devDependencies: + tsx: + specifier: ^4.21.0 + version: 4.21.0 + packages/sdk: dependencies: '@pinia/colada':