✨ feat: Update rn

This commit is contained in:
canisminor1990
2026-02-03 13:41:21 +08:00
parent 07a5be1b31
commit af2f099f7b
30 changed files with 886 additions and 9 deletions
+2 -2
View File
@@ -32,9 +32,9 @@
"scripts": {
"auto-converter-web-icons-to-rn": "tsx scripts/rn-conversion/auto-converter.ts --lint",
"build": "npm run build:toc && father build && npm run build:rn",
"build:rn": "bun run --cwd packages/react-native build",
"build:rn": "tsx run --cwd packages/react-native build",
"build:static": "tsx scripts/svgWorkflow/index.ts",
"build:toc": "bun scripts/tocWorkflow/index.ts",
"build:toc": "tsx scripts/tocWorkflow/index.ts",
"build:watch": "father dev",
"ci": "npm run lint && npm run type-check",
"clean": "rm -r es lib dist coverage .dumi/tmp .eslintcache node_modules/.cache",
@@ -86,6 +86,7 @@ import V0 from '../icons/V0';
import VertexAI from '../icons/VertexAI';
import Voyage from '../icons/Voyage';
import Wenxin from '../icons/Wenxin';
import XiaomiMiMo from '../icons/XiaomiMiMo';
import Yi from '../icons/Yi';
import ZAI from '../icons/ZAI';
import type { RNIconAvatarProps, RNIconCombineProps, RNIconProps } from './types';
@@ -153,7 +154,10 @@ export const rnModelMappings: RNModelMapping[] = [
Icon: NousResearch,
keywords: ['deephermes', 'hermes', 'genstruct', 'minos'],
},
{ Icon: Nvidia, keywords: ['nemotron', 'openreasoning'] },
{
Icon: Nvidia,
keywords: ['nemotron', 'openreasoning', 'nemoretriever', 'neva-', 'nv-'],
},
{ Icon: Meta, keywords: ['llama', '/l3'] },
{ Icon: LLaVA, keywords: ['llava'] },
{ Icon: Gemini, keywords: ['gemini'] },
@@ -204,10 +208,13 @@ export const rnModelMappings: RNModelMapping[] = [
],
},
{ Icon: EssentialAI, keywords: ['^rnj-', '/rnj-'] },
{ Icon: DeepCogito, keywords: ['^deepcogito-', '/deepcogito-'] },
{
Icon: DeepCogito,
keywords: ['^deepcogito-', '/deepcogito-', '^cogito-', '/cogito-'],
},
{ Icon: Morph, keywords: ['^morph-', '/morph-'] },
{ Icon: Ai2, keywords: ['^olmo-', '/olmo-'] },
{ Icon: Inception, keywords: ['^mercury-', '/mercury-'] },
{ Icon: Inception, keywords: ['^mercury', '/mercury'] },
{ Icon: OpenChat, keywords: ['^openchat'] },
{ Icon: Aya, keywords: ['aya'] },
{ Icon: Cohere, keywords: ['command'] },
@@ -291,4 +298,5 @@ export const rnModelMappings: RNModelMapping[] = [
{ Icon: LongCat, keywords: ['longcat'] },
{ Icon: Kwaipilot, keywords: ['kat-'] },
{ Icon: Nova, keywords: ['^nova-', '/nova-'] },
{ Icon: XiaomiMiMo, keywords: ['^mimo-', '/mimo-'] },
];
@@ -5,53 +5,93 @@ import Ai302 from '../icons/Ai302';
import Ai360 from '../icons/Ai360';
import AiHubMix from '../icons/AiHubMix';
import AiMass from '../icons/AiMass';
import AiStudio from '../icons/AiStudio';
import AkashChat from '../icons/AkashChat';
import AlephAlpha from '../icons/AlephAlpha';
import Alibaba from '../icons/Alibaba';
import AlibabaCloud from '../icons/AlibabaCloud';
import AntGroup from '../icons/AntGroup';
import Anthropic from '../icons/Anthropic';
import Anyscale from '../icons/Anyscale';
import Apple from '../icons/Apple';
import AtlasCloud from '../icons/AtlasCloud';
import Aws from '../icons/Aws';
import Azure from '../icons/Azure';
import AzureAI from '../icons/AzureAI';
import Baichuan from '../icons/Baichuan';
import Baidu from '../icons/Baidu';
import BaiduCloud from '../icons/BaiduCloud';
import Bailian from '../icons/Bailian';
import Baseten from '../icons/Baseten';
import Bedrock from '../icons/Bedrock';
import Bfl from '../icons/Bfl';
import Bilibili from '../icons/Bilibili';
import BurnCloud from '../icons/BurnCloud';
import ByteDance from '../icons/ByteDance';
import CentML from '../icons/CentML';
import Cerebras from '../icons/Cerebras';
import Civitai from '../icons/Civitai';
import Claude from '../icons/Claude';
import Cloudflare from '../icons/Cloudflare';
import Cohere from '../icons/Cohere';
import CometAPI from '../icons/CometAPI';
import ComfyUI from '../icons/ComfyUI';
import Copilot from '../icons/Copilot';
import Crusoe from '../icons/Crusoe';
import DeepInfra from '../icons/DeepInfra';
import DeepMind from '../icons/DeepMind';
import DeepSeek from '../icons/DeepSeek';
import Doubao from '../icons/Doubao';
import Exa from '../icons/Exa';
import Fal from '../icons/Fal';
import Featherless from '../icons/Featherless';
import Fireworks from '../icons/Fireworks';
import Friendli from '../icons/Friendli';
import Gemini from '../icons/Gemini';
import GiteeAI from '../icons/GiteeAI';
import Github from '../icons/Github';
import GithubCopilot from '../icons/GithubCopilot';
import Google from '../icons/Google';
import GoogleCloud from '../icons/GoogleCloud';
import Groq from '../icons/Groq';
import Higress from '../icons/Higress';
import Huawei from '../icons/Huawei';
import HuaweiCloud from '../icons/HuaweiCloud';
import HuggingFace from '../icons/HuggingFace';
import Hunyuan from '../icons/Hunyuan';
import Hyperbolic from '../icons/Hyperbolic';
import IBM from '../icons/IBM';
import IFlyTekCloud from '../icons/IFlyTekCloud';
import Inference from '../icons/Inference';
import Infermatic from '../icons/Infermatic';
import Infinigence from '../icons/Infinigence';
import InternLM from '../icons/InternLM';
import Jina from '../icons/Jina';
import Kluster from '../icons/Kluster';
import LG from '../icons/LG';
import Lambda from '../icons/Lambda';
import LeptonAI from '../icons/LeptonAI';
import LmStudio from '../icons/LmStudio';
import LobeHub from '../icons/LobeHub';
import LongCat from '../icons/LongCat';
import Menlo from '../icons/Menlo';
import Meta from '../icons/Meta';
import Microsoft from '../icons/Microsoft';
import Minimax from '../icons/Minimax';
import Mistral from '../icons/Mistral';
import ModelScope from '../icons/ModelScope';
import Moonshot from '../icons/Moonshot';
import NPLCloud from '../icons/NPLCloud';
import Nebius from '../icons/Nebius';
import NewAPI from '../icons/NewAPI';
import NousResearch from '../icons/NousResearch';
import Novita from '../icons/Novita';
import Nvidia from '../icons/Nvidia';
import Ollama from '../icons/Ollama';
import OpenAI from '../icons/OpenAI';
import OpenRouter from '../icons/OpenRouter';
import PPIO from '../icons/PPIO';
import Parasail from '../icons/Parasail';
import Perplexity from '../icons/Perplexity';
import Player2 from '../icons/Player2';
import Qiniu from '../icons/Qiniu';
@@ -59,12 +99,21 @@ import Qwen from '../icons/Qwen';
import Replicate from '../icons/Replicate';
import SambaNova from '../icons/SambaNova';
import Search1API from '../icons/Search1API';
import SearchApi from '../icons/SearchApi';
import SenseNova from '../icons/SenseNova';
import SiliconCloud from '../icons/SiliconCloud';
import Snowflake from '../icons/Snowflake';
import SophNet from '../icons/SophNet';
import Spark from '../icons/Spark';
import Stability from '../icons/Stability';
import StateCloud from '../icons/StateCloud';
import Stepfun from '../icons/Stepfun';
import Straico from '../icons/Straico';
import StreamLake from '../icons/StreamLake';
import SubModel from '../icons/SubModel';
import TII from '../icons/TII';
import Targon from '../icons/Targon';
import Tencent from '../icons/Tencent';
import TencentCloud from '../icons/TencentCloud';
import Together from '../icons/Together';
import Upstage from '../icons/Upstage';
@@ -76,7 +125,9 @@ import Volcengine from '../icons/Volcengine';
import Wenxin from '../icons/Wenxin';
import WorkersAI from '../icons/WorkersAI';
import XAI from '../icons/XAI';
import XiaomiMiMo from '../icons/XiaomiMiMo';
import Xinference from '../icons/Xinference';
import Yandex from '../icons/Yandex';
import ZenMux from '../icons/ZenMux';
import ZeroOne from '../icons/ZeroOne';
import Zhipu from '../icons/Zhipu';
@@ -102,6 +153,55 @@ export interface RNProviderMapping {
}
export const rnProviderMappings: RNProviderMapping[] = [
{ Icon: Alibaba, keywords: [RNModelProvider.Alibaba] },
{ Icon: AlephAlpha, keywords: [RNModelProvider.AlephAlpha] },
{ Icon: AntGroup, keywords: [RNModelProvider.AntGroup] },
{ Icon: Anyscale, keywords: [RNModelProvider.Anyscale] },
{ Icon: Apple, keywords: [RNModelProvider.Apple] },
{ Icon: Baidu, keywords: [RNModelProvider.Baidu] },
{ Icon: Bailian, keywords: [RNModelProvider.Bailian] },
{ Icon: Baseten, keywords: [RNModelProvider.Baseten] },
{ Icon: Bilibili, keywords: [RNModelProvider.Bilibili] },
{ Icon: ByteDance, keywords: [RNModelProvider.ByteDance] },
{ Icon: CentML, keywords: [RNModelProvider.CentML] },
{ Icon: Civitai, keywords: [RNModelProvider.Civitai] },
{ Icon: Crusoe, keywords: [RNModelProvider.Crusoe] },
{ Icon: DeepInfra, keywords: [RNModelProvider.DeepInfra] },
{ Icon: DeepMind, keywords: [RNModelProvider.DeepMind] },
{ Icon: Exa, keywords: [RNModelProvider.Exa] },
{ Icon: Featherless, keywords: [RNModelProvider.Featherless] },
{ Icon: Friendli, keywords: [RNModelProvider.Friendli] },
{ Icon: GoogleCloud, keywords: [RNModelProvider.GoogleCloud] },
{ Icon: Huawei, keywords: [RNModelProvider.Huawei] },
{ Icon: HuaweiCloud, keywords: [RNModelProvider.HuaweiCloud] },
{ Icon: Hyperbolic, keywords: [RNModelProvider.Hyperbolic] },
{ Icon: IBM, keywords: [RNModelProvider.IBM] },
{ Icon: IFlyTekCloud, keywords: [RNModelProvider.IFlyTekCloud] },
{ Icon: Inference, keywords: [RNModelProvider.Inference] },
{ Icon: Infermatic, keywords: [RNModelProvider.Infermatic] },
{ Icon: Kluster, keywords: [RNModelProvider.Kluster] },
{ Icon: Lambda, keywords: [RNModelProvider.Lambda] },
{ Icon: LeptonAI, keywords: [RNModelProvider.LeptonAI] },
{ Icon: LG, keywords: [RNModelProvider.LG] },
{ Icon: Menlo, keywords: [RNModelProvider.Menlo] },
{ Icon: Meta, keywords: [RNModelProvider.Meta] },
{ Icon: Microsoft, keywords: [RNModelProvider.Microsoft] },
{ Icon: NPLCloud, keywords: [RNModelProvider.NPLCloud] },
{ Icon: NousResearch, keywords: [RNModelProvider.NousResearch] },
{ Icon: Parasail, keywords: [RNModelProvider.Parasail] },
{ Icon: SearchApi, keywords: [RNModelProvider.SearchApi] },
{ Icon: Snowflake, keywords: [RNModelProvider.Snowflake] },
{ Icon: Stability, keywords: [RNModelProvider.Stability] },
{ Icon: StateCloud, keywords: [RNModelProvider.StateCloud] },
{ Icon: StreamLake, keywords: [RNModelProvider.StreamLake] },
{ Icon: SubModel, keywords: [RNModelProvider.SubModel] },
{ Icon: Targon, keywords: [RNModelProvider.Targon] },
{ Icon: Tencent, keywords: [RNModelProvider.Tencent] },
{ Icon: TII, keywords: [RNModelProvider.TII] },
{ Icon: Yandex, keywords: [RNModelProvider.Yandex] },
{ Icon: AiMass, keywords: [RNModelProvider.AiMass] },
{ Icon: AiStudio, keywords: [RNModelProvider.AiStudio] },
{ Icon: LobeHub, combineMultiple: 1.1, keywords: [RNModelProvider.LobeHub] },
{ Icon: Zhipu, combineMultiple: 1.25, keywords: [RNModelProvider.ZhiPu] },
{
@@ -200,6 +300,12 @@ export const rnProviderMappings: RNProviderMapping[] = [
{ Icon: Ai21, combineMultiple: 0.9, keywords: [RNModelProvider.Ai21] },
{ Icon: Player2, combineMultiple: 0.9, keywords: [RNModelProvider.Player2] },
{ Icon: Github, combineMultiple: 0.95, keywords: [RNModelProvider.Github] },
{
Icon: GithubCopilot,
combineMultiple: 0.95,
keywords: [RNModelProvider.GithubCopilot, 'github-copilot'],
},
{ Icon: Copilot, combineMultiple: 0.95, keywords: [RNModelProvider.Copilot] },
{ Icon: Doubao, keywords: [RNModelProvider.Doubao] },
{ Icon: Hunyuan, keywords: [RNModelProvider.Hunyuan] },
{ Icon: Nvidia, keywords: [RNModelProvider.Nvidia] },
@@ -265,12 +371,17 @@ export const rnProviderMappings: RNProviderMapping[] = [
Icon: Vercel,
keywords: [RNModelProvider.V0],
},
{ Icon: Vercel, combineMultiple: 0.85, keywords: [RNModelProvider.Vercel] },
{
Icon: Vercel,
combineMultiple: 0.85,
keywords: [RNModelProvider.Vercel, RNModelProvider.VercelAIGateway],
},
{ Icon: Bfl, keywords: [RNModelProvider.Bfl] },
{ Icon: Replicate, combineMultiple: 0.9, keywords: [RNModelProvider.Replicate] },
{ Icon: Nebius, combineMultiple: 0.75, keywords: [RNModelProvider.Nebius] },
{ Icon: NewAPI, combineMultiple: 0.85, keywords: [RNModelProvider.NewAPI] },
{ Icon: AkashChat, combineMultiple: 0.8, keywords: [RNModelProvider.AkashChat] },
{ Icon: AtlasCloud, combineMultiple: 0.8, keywords: [RNModelProvider.AtlasCloud] },
{ Icon: SophNet, combineMultiple: 0.85, keywords: [RNModelProvider.SophNet] },
{
Combine: memo(({ size = 24, ...props }) => (
@@ -293,4 +404,5 @@ export const rnProviderMappings: RNProviderMapping[] = [
keywords: [RNModelProvider.ZenMux],
props: { inverse: true },
},
{ Icon: XiaomiMiMo, combineMultiple: 0.7, keywords: [RNModelProvider.XiaomiMiMo] },
];
@@ -3,42 +3,89 @@ export enum RNModelProvider {
Ai302 = 'ai302',
Ai360 = 'ai360',
AiHubMix = 'aihubmix',
AiMass = 'aimass',
AiStudio = 'aistudio',
AkashChat = 'akashchat',
AlephAlpha = 'alephalpha',
Alibaba = 'alibaba',
AlibabaCloud = 'alibabacloud',
AntGroup = 'antgroup',
Anthropic = 'anthropic',
Anyscale = 'anyscale',
Apple = 'apple',
AtlasCloud = 'atlascloud',
Aws = 'aws',
Azure = 'azure',
AzureAI = 'azureai',
Baichuan = 'baichuan',
Baidu = 'baidu',
BaiduCloud = 'baiducloud',
Bailian = 'bailian',
Baseten = 'baseten',
Bedrock = 'bedrock',
Bfl = 'bfl',
Bilibili = 'bilibili',
BurnCloud = 'burncloud',
ByteDance = 'bytedance',
CentML = 'centml',
Cerebras = 'cerebras',
Civitai = 'civitai',
Claude = 'claude',
Cloudflare = 'cloudflare',
Cohere = 'cohere',
CometAPI = 'cometapi',
ComfyUI = 'comfyui',
Copilot = 'copilot',
Crusoe = 'crusoe',
DeepInfra = 'deepinfra',
DeepMind = 'deepmind',
DeepSeek = 'deepseek',
Doubao = 'Doubao',
Doubao = 'doubao',
Exa = 'exa',
Fal = 'fal',
Featherless = 'featherless',
Fireworks = 'fireworks',
FireworksAI = 'fireworksai',
Friendli = 'friendli',
Gemini = 'gemini',
GiteeAI = 'giteeai',
Github = 'github',
GithubCopilot = 'githubcopilot',
Google = 'google',
GoogleCloud = 'googlecloud',
Groq = 'groq',
Higress = 'higress',
Huawei = 'huawei',
HuaweiCloud = 'huaweicloud',
HuggingFace = 'huggingface',
Hunyuan = 'hunyuan',
Hyperbolic = 'hyperbolic',
IBM = 'ibm',
IFlyTekCloud = 'iflytekcloud',
Inference = 'inference',
Infermatic = 'infermatic',
InfiniAI = 'infiniai',
Infinigence = 'infinigence',
InternLM = 'internlm',
Jina = 'jina',
Kluster = 'kluster',
LG = 'lg',
Lambda = 'lambda',
LeptonAI = 'leptonai',
LmStudio = 'lmstudio',
LobeHub = 'lobehub',
LongCat = 'longcat',
Menlo = 'menlo',
Meta = 'meta',
Microsoft = 'microsoft',
Minimax = 'minimax',
Mistral = 'mistral',
ModelScope = 'modelscope',
Moonshot = 'moonshot',
NPLCloud = 'nplcloud',
Nebius = 'nebius',
NewAPI = 'newapi',
NousResearch = 'nousresearch',
Novita = 'novita',
Nvidia = 'nvidia',
Ollama = 'ollama',
@@ -46,31 +93,45 @@ export enum RNModelProvider {
OpenAI = 'openai',
OpenRouter = 'openrouter',
PPIO = 'ppio',
Parasail = 'parasail',
Perplexity = 'perplexity',
Player2 = 'Player2',
Player2 = 'player2',
Qiniu = 'qiniu',
Qwen = 'qwen',
Replicate = 'replicate',
SambaNova = 'sambanova',
Search1API = 'search1api',
SearchApi = 'searchapi',
SenseNova = 'sensenova',
SiliconCloud = 'siliconcloud',
Snowflake = 'snowflake',
SophNet = 'sophnet',
Spark = 'spark',
Stability = 'stability',
StateCloud = 'statecloud',
Stepfun = 'stepfun',
Straico = 'straico',
StreamLake = 'streamlake',
SubModel = 'submodel',
TII = 'tii',
Taichu = 'taichu',
Targon = 'targon',
Tencent = 'tencent',
TencentCloud = 'tencentcloud',
TogetherAI = 'togetherai',
Upstage = 'upstage',
V0 = 'v0',
VLLM = 'vllm',
Vercel = 'vercelaigateway',
Vercel = 'vercel',
VercelAIGateway = 'vercelaigateway',
VertexAI = 'vertexai',
Volcengine = 'volcengine',
Wenxin = 'wenxin',
WorkersAI = 'workersai',
XAI = 'xai',
XiaomiMiMo = 'xiaomimimo',
Xinference = 'xinference',
Yandex = 'yandex',
ZenMux = 'zenmux',
ZeroOne = 'zeroone',
ZhiPu = 'zhipu',
@@ -0,0 +1,22 @@
import React, { memo } from 'react';
import { RNIconAvatar, type RNIconAvatarProps } from '@/features';
import { AVATAR_BACKGROUND, AVATAR_COLOR, AVATAR_ICON_MULTIPLE, TITLE } from '../style';
import Mono from './Mono';
export type AvatarProps = Omit<RNIconAvatarProps, 'Icon'>;
const Avatar = memo<AvatarProps>(({ background, ...rest }) => {
return (
<RNIconAvatar
Icon={Mono}
aria-label={TITLE}
background={background || AVATAR_BACKGROUND}
color={AVATAR_COLOR}
iconMultiple={AVATAR_ICON_MULTIPLE}
{...rest}
/>
);
});
export default Avatar;
@@ -0,0 +1,20 @@
import React, { memo } from 'react';
import { RNIconCombine, type RNIconCombineProps } from '@/features';
import { COMBINE_SPACE_MULTIPLE, COMBINE_TEXT_MULTIPLE, TITLE } from '../style';
import Text from './Text';
const Combine = memo<RNIconCombineProps>(({ ...rest }) => {
return (
<RNIconCombine
Text={Text}
aria-label={TITLE}
spaceMultiple={COMBINE_SPACE_MULTIPLE}
textMultiple={COMBINE_TEXT_MULTIPLE}
{...rest}
/>
);
});
export default Combine;
@@ -0,0 +1,27 @@
import React, { memo } from 'react';
import { Path, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
const Icon = memo<RNIconProps>(({ size = 24, style, color = '#000000', ...rest }) => {
return (
<Svg
color={color}
fillRule="evenodd"
height={size}
style={style}
viewBox="0 0 24 24"
width={size}
{...rest}
>
<Path
d="M20.2,18.01L12,0.47,3.8,18.01l-2.58,5.52c1.62,-1.05,3.39,-1.86,5.26,-2.41,1.76,-0.51,3.61,-0.79,5.52,-0.79,0.98,0,1.95,0.08,2.9,0.22l-1.86,-4.3c-0.53,-0.1,-2.87,-0.1,-4.59,0.3l3.56,-8.28,5.52,12.85c0.01,0,0.02,0.01,0.03,0.01,1.86,0.55,3.62,1.36,5.23,2.4l-2.58,-5.52Z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'AtlasCloudMono';
export default Icon;
@@ -0,0 +1,28 @@
import React, { memo } from 'react';
import { Path, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
const Icon = memo<RNIconProps>(({ size = 24, style, color = '#000000', ...rest }) => {
return (
<Svg
color={color}
fillRule="evenodd"
height={size}
style={style}
viewBox="0 0 162 24"
width={size * 6.75} // 保持宽高比
{...rest}
>
<Path
clipRule="evenodd"
d="M12.252 1L1 22.778c5.204-2.045 9.429-2.356 13.21-2.178l-1.735-3.822c-.756-.09-2.936-.09-3.959.178L12.252 8.6l5.649 12.311c1.067.178 4.002 1.156 5.603 1.911L12.252 1.044V1zM26.128 2.11v5.156h-2.446v2.711h2.447v12.045h3.557V9.978h2.491V7.265h-2.49V2.111h-3.559zM34.223 2.11h3.513v19.912h-3.513V2.11zM43.963 14.688c0 1.823 1.334 4.49 4.492 4.49 1.957 0 3.247-1.023 3.914-2.356.356-.667.489-1.333.578-2.09a4.281 4.281 0 00-.4-2.088c-.623-1.422-2.002-2.622-4.136-2.622-2.847 0-4.448 2.31-4.448 4.622v.044zm12.498 7.334h-3.514v-2.133c-.934 1.733-2.89 2.577-4.981 2.577-4.715 0-7.517-3.689-7.517-7.866 0-4.667 3.38-7.823 7.517-7.823 2.668 0 4.314 1.423 4.981 2.623V7.266h3.514v14.8-.044zM66.334 11.222c-.044-.8-.445-1.6-1.823-1.6-1.201 0-1.735.755-1.735 1.466.044.934 1.112 1.467 2.49 1.867 2.358.667 4.937 1.334 4.937 4.533.045 3.023-2.49 4.978-5.603 4.978-2.269 0-5.382-1.2-5.649-4.755h3.514c.133 1.6 1.512 1.91 2.179 1.91 1.112 0 2.046-.71 2.001-1.732 0-1.245-1.111-1.6-3.824-2.578-2.002-.623-3.603-1.734-3.648-3.867 0-2.889 2.447-4.711 5.293-4.711 2.002 0 4.937.889 5.248 4.444h-3.469l.089.045zM100.402 15.355c-1.2 4.134-5.07 7.067-9.74 7.067-6.093 0-10.452-4.8-10.452-10.356 0-5.555 4.092-10.31 10.407-10.31 5.738.044 8.984 4.266 9.74 7.155h-4.225c-.622-1.378-2.401-3.6-5.56-3.645-3.868 0-6.359 3.245-6.359 6.8 0 3.556 2.624 6.845 6.404 6.845 3.558 0 5.16-2.8 5.56-3.511h4.225v-.045zM103.026 2.11h3.513v19.912h-3.513V2.11zM112.766 14.644c0 2.578 1.957 4.489 4.403 4.489 2.446 0 4.359-1.911 4.359-4.533 0-2.623-1.957-4.534-4.359-4.534s-4.403 1.911-4.403 4.534v.044zm-3.514-.044c0-3.778 2.758-7.778 7.917-7.778s7.917 4 7.917 7.822-2.758 7.822-7.917 7.822-7.917-4-7.917-7.822V14.6zM141.364 22.022h-3.292v-1.955c-.622 1.155-1.957 2.444-4.581 2.444-4.847-.044-5.737-3.733-5.737-6.311V7.267h3.514v8.044c0 2.178.711 3.911 3.246 3.867 2.535 0 3.38-1.69 3.38-3.778V7.222h3.514v14.8h-.044zM147.59 14.644c0 2.49 1.823 4.533 4.536 4.533 1.29 0 2.447-.533 3.292-1.333.845-.844 1.334-2 1.245-3.289 0-1.289-.489-2.4-1.334-3.2-.801-.8-1.913-1.289-3.203-1.289-2.89 0-4.536 2.223-4.536 4.534v.044zm12.364 7.378h-3.38v-2.133c-.667 1.11-2.046 2.577-5.07 2.577-4.537 0-7.472-3.555-7.472-7.866 0-4.8 3.425-7.822 7.427-7.822 2.802 0 4.403 1.51 4.937 2.355V2.066h3.514v19.912l.044.044z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'AtlasCloudText';
export default Icon;
@@ -0,0 +1,23 @@
import Avatar from './components/Avatar';
import Combine from './components/Combine';
import Mono from './components/Mono';
import Text from './components/Text';
import { COLOR_PRIMARY, TITLE } from './style';
export type CompoundedIcon = typeof Mono & {
Avatar: typeof Avatar;
Combine: typeof Combine;
Text: typeof Text;
colorPrimary: string;
title: string;
};
const Icons = Mono as CompoundedIcon;
Icons.Text = Text;
Icons.Combine = Combine;
Icons.Avatar = Avatar;
Icons.colorPrimary = COLOR_PRIMARY;
Icons.title = TITLE;
export default Icons;
@@ -0,0 +1,8 @@
export const TITLE = 'Atlas Cloud';
export const COMBINE_TEXT_MULTIPLE = 0.75;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#7036F0';
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
export const AVATAR_ICON_MULTIPLE = 0.6;
@@ -0,0 +1,22 @@
import React, { memo } from 'react';
import { RNIconAvatar, type RNIconAvatarProps } from '@/features';
import { AVATAR_BACKGROUND, AVATAR_COLOR, AVATAR_ICON_MULTIPLE, TITLE } from '../style';
import Inner from './Inner';
export type AvatarProps = Omit<RNIconAvatarProps, 'Icon'>;
const Avatar = memo<AvatarProps>(({ background, ...rest }) => {
return (
<RNIconAvatar
Icon={Inner}
aria-label={TITLE}
background={background || AVATAR_BACKGROUND}
color={AVATAR_COLOR}
iconMultiple={AVATAR_ICON_MULTIPLE}
{...rest}
/>
);
});
export default Avatar;
@@ -0,0 +1,24 @@
import React, { memo } from 'react';
import { RNIconCombine, type RNIconCombineProps } from '@/features';
import { COMBINE_SPACE_MULTIPLE, COMBINE_TEXT_MULTIPLE, TITLE } from '../style';
import Mono from './Mono';
import Text from './Text';
export type CombineProps = Omit<RNIconCombineProps, 'Icon' | 'Text'>;
const Combine = memo<CombineProps>(({ ...rest }) => {
return (
<RNIconCombine
Icon={Mono}
Text={Text as any}
aria-label={TITLE}
spaceMultiple={COMBINE_SPACE_MULTIPLE}
textMultiple={COMBINE_TEXT_MULTIPLE}
{...rest}
/>
);
});
export default Combine;
@@ -0,0 +1,33 @@
import React, { memo } from 'react';
import { Path, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
const Icon = memo<RNIconProps>(({ size = 24, style, color = '#000000', ...rest }) => {
return (
<Svg
color={color}
fillRule="evenodd"
height={size}
style={style}
viewBox="0 0 24 24"
width={size}
{...rest}
>
<Path
d="M9.377 10.47l-.018 6.023 3.374.025-.01 1.523-4.891-.034.022-7.541 1.523.004z"
fill={color}
/>
<Path
clipRule="evenodd"
d="M15.365 5.778a3.794 3.794 0 010 7.585 3.794 3.794 0 010-7.585zm0 1.447A2.35 2.35 0 0013.02 9.57a2.349 2.349 0 002.346 2.346 2.348 2.348 0 002.346-2.346 2.349 2.349 0 00-2.346-2.346z"
fill={color}
/>
<Path d="M6.043 11.966l-3.508.004-.002-1.524 3.508-.004.002 1.524z" fill={color} />
</Svg>
);
});
Icon.displayName = 'LovartInner';
export default Icon;
@@ -0,0 +1,27 @@
import React, { memo } from 'react';
import { Path, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
const Icon = memo<RNIconProps>(({ size = 24, style, color = '#000000', ...rest }) => {
return (
<Svg
color={color}
fillRule="evenodd"
height={size}
style={style}
viewBox="0 0 24 24"
width={size}
{...rest}
>
<Path
d="M11.86-.14c6.622 0 12 5.377 12 12 0 6.622-5.378 12-12 12-6.623 0-12-5.378-12-12 0-6.623 5.377-12 12-12zM7.831 18.006l4.892.034.01-1.523-3.375-.025.018-6.023-1.523-.004-.022 7.54zm7.533-12.229a3.794 3.794 0 000 7.585 3.794 3.794 0 000-7.585zM2.533 10.446l.002 1.524 3.508-.004-.002-1.524-3.508.004zm12.832-3.221a2.349 2.349 0 012.346 2.346 2.348 2.348 0 01-2.346 2.346 2.349 2.349 0 01-2.346-2.346 2.35 2.35 0 012.346-2.346z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'LovartMono';
export default Icon;
@@ -0,0 +1,27 @@
import React, { memo } from 'react';
import { Path, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
const Icon = memo<RNIconProps>(({ size = 24, style, color = '#000000', ...rest }) => {
return (
<Svg
color={color}
fillRule="evenodd"
height={size}
style={style}
viewBox="0 0 101 24"
width={size * 4.21} // 保持宽高比
{...rest}
>
<Path
d="M55.024 13.262c0-4.784 3.217-8.631 7.922-8.631 2.318 0 4.397 1.057 5.209 2.869l.536-.01V4.965h3.612v16.56h-3.65v-2.884l-.729-.004c-.807 2.093-2.399 3.222-4.978 3.222-4.705 0-7.922-3.847-7.922-8.598zm13.63 0c0-2.91-2.007-5.052-4.74-5.052-2.906 0-4.982 2.141-4.982 5.052 0 2.91 2.076 5.018 4.982 5.018 2.698 0 4.74-2.075 4.74-5.018zm8.193 8.314V8.371h-1.923V4.869h3.957v3.323h.935c.415-1.165 1.595-3.49 5.727-3.49h1.394V7.96h-1.561c-1.58 0-2.773.454-3.581 1.364-.808.91-1.213 2.126-1.213 3.647v8.605h-3.734zm18.053.142c-1.022 0-1.817-.26-2.383-.78-.566-.519-.85-1.308-.85-2.366V7.962h-3.01v-2.95h3.038V0h3.735v5.011h4.152v2.952h-4.125v10.776H100v2.979h-5.1zM26.071 4.068c-4.957 0-8.975 4.014-8.975 8.966 0 4.952 4.018 8.966 8.975 8.966s8.975-4.014 8.975-8.966c0-4.952-4.018-8.967-8.975-8.967m0 14.177a5.212 5.212 0 01-5.215-5.21 5.212 5.212 0 015.215-5.21 5.212 5.212 0 015.215 5.21 5.212 5.212 0 01-5.215 5.21zm-17.233.133L8.828.005H2v3.432h2.964v18.28h11.907v-3.34H8.838zM54.528 4.97H50.6l-4.988 13.423v.57H44.13v-.565L39.142 4.974h-3.93l6.197 16.708 6.922-.006L54.529 4.97z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'LovartText';
export default Icon;
@@ -0,0 +1,21 @@
import Avatar from './components/Avatar';
import Combine from './components/Combine';
import Mono from './components/Mono';
import Text from './components/Text';
import { COLOR_PRIMARY, TITLE } from './style';
export type CompoundedIcon = typeof Mono & {
Avatar: typeof Avatar;
Combine: typeof Combine;
Text: typeof Text;
colorPrimary: string;
title: string;
};
const Icons = Mono as CompoundedIcon;
Icons.Text = Text;
Icons.Combine = Combine;
Icons.Avatar = Avatar;
Icons.colorPrimary = COLOR_PRIMARY;
Icons.title = TITLE;
export default Icons;
@@ -0,0 +1,9 @@
export const TITLE = 'Lovart';
export const COMBINE_TEXT_MULTIPLE = 0.65;
export const COMBINE_SPACE_MULTIPLE = 0.3;
export const COLOR_PRIMARY = '#000';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
export const AVATAR_ICON_MULTIPLE = 1;
@@ -0,0 +1,22 @@
import React, { memo } from 'react';
import { RNIconAvatar, type RNIconAvatarProps } from '@/features';
import { AVATAR_BACKGROUND, AVATAR_COLOR, AVATAR_ICON_MULTIPLE, TITLE } from '../style';
import Color from './Color';
export type AvatarProps = Omit<RNIconAvatarProps, 'Icon'>;
const Avatar = memo<AvatarProps>(({ background, ...rest }) => {
return (
<RNIconAvatar
Icon={Color}
aria-label={TITLE}
background={background || AVATAR_BACKGROUND}
color={AVATAR_COLOR}
iconMultiple={AVATAR_ICON_MULTIPLE}
{...rest}
/>
);
});
export default Avatar;
@@ -0,0 +1,80 @@
import React, { memo } from 'react';
import { Defs, LinearGradient, Path, Stop, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
import { useFillIds } from '@/hooks/useFillId';
import { TITLE } from '../style';
const Icon = memo<RNIconProps>(({ size = 24, style, ...rest }) => {
const [a, b, c] = useFillIds(TITLE, 3);
return (
<Svg height={size} style={style} viewBox="0 0 24 24" width={size} {...rest}>
<Path
d="M12 2.568c-6.33 0-9.495 5.275-9.495 9.495 0 4.22 3.165 8.44 6.33 9.494v2.11h2.11v-2.11s1.055.422 2.11 0v2.11h2.11v-2.11c3.165-1.055 6.33-5.274 6.33-9.494S18.33 2.568 12 2.568z"
fill={a.fill}
/>
<Path
d="M3.56 9.953C.396 8.898-.66 11.008.396 13.118c1.055 2.11 3.164 1.055 4.22-1.055.632-1.477 0-2.11-1.056-2.11z"
fill={b.fill}
/>
<Path
d="M20.44 9.953c3.164-1.055 4.22 1.055 3.164 3.165-1.055 2.11-3.164 1.055-4.22-1.055-.632-1.477 0-2.11 1.056-2.11z"
fill={c.fill}
/>
<Path
d="M5.507 1.875c.476-.285 1.036-.233 1.615.037.577.27 1.223.774 1.937 1.488a.316.316 0 01-.447.447c-.693-.693-1.279-1.138-1.757-1.361-.475-.222-.795-.205-1.022-.069a.317.317 0 01-.326-.542zM16.877 1.913c.58-.27 1.14-.323 1.616-.038a.317.317 0 01-.326.542c-.227-.136-.547-.153-1.022.069-.478.223-1.064.668-1.756 1.361a.316.316 0 11-.448-.447c.714-.714 1.36-1.218 1.936-1.487z"
fill="#FF4D4D"
/>
<Path
d="M8.835 9.109a1.266 1.266 0 100-2.532 1.266 1.266 0 000 2.532zM15.165 9.109a1.266 1.266 0 100-2.532 1.266 1.266 0 000 2.532z"
fill="#050810"
/>
<Path
d="M9.046 8.16a.527.527 0 100-1.056.527.527 0 000 1.055zM15.376 8.16a.527.527 0 100-1.055.527.527 0 000 1.054z"
fill="#00E5CC"
/>
<Defs>
<LinearGradient
gradientUnits="userSpaceOnUse"
id={a.id}
x1="-.659"
x2="27.023"
y1=".458"
y2="22.855"
>
<Stop stopColor="#FF4D4D" />
<Stop offset="100%" stopColor="#991B1B" />
</LinearGradient>
<LinearGradient
gradientUnits="userSpaceOnUse"
id={b.id}
x1="0"
x2="4.311"
y1="9.672"
y2="14.949"
>
<Stop stopColor="#FF4D4D" />
<Stop offset="100%" stopColor="#991B1B" />
</LinearGradient>
<LinearGradient
gradientUnits="userSpaceOnUse"
id={c.id}
x1="19.385"
x2="24.399"
y1="9.953"
y2="14.462"
>
<Stop stopColor="#FF4D4D" />
<Stop offset="100%" stopColor="#991B1B" />
</LinearGradient>
</Defs>
</Svg>
);
});
Icon.displayName = 'OpenClawColor';
export default Icon;
@@ -0,0 +1,28 @@
import React, { memo } from 'react';
import { RNIconCombine, type RNIconCombineProps } from '@/features';
import { COMBINE_SPACE_MULTIPLE, COMBINE_TEXT_MULTIPLE, TITLE } from '../style';
import Color from './Color';
import Mono from './Mono';
import Text from './Text';
export interface CombineProps extends Omit<RNIconCombineProps, 'Icon' | 'Text'> {
type?: 'color' | 'mono';
}
const Combine = memo<CombineProps>(({ type = 'mono', ...rest }) => {
const Icon = type === 'color' ? Color : Mono;
return (
<RNIconCombine
Icon={Icon}
Text={Text}
aria-label={TITLE}
spaceMultiple={COMBINE_SPACE_MULTIPLE}
textMultiple={COMBINE_TEXT_MULTIPLE}
{...rest}
/>
);
});
export default Combine;
@@ -0,0 +1,100 @@
import React, { memo } from 'react';
import { ClipPath, Defs, G, LinearGradient, Path, Stop, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
const Icon = memo<RNIconProps>(({ size = 24, style, color = '#000000', ...rest }) => {
return (
<Svg
color={color}
fillRule="evenodd"
height={size}
style={style}
viewBox="0 0 24 24"
width={size}
{...rest}
>
<G clipPath="url(#a)">
<Path d="M9.046 7.104a.527.527 0 110 1.055.527.527 0 010-1.055z" fill={color} />
<Path d="M15.376 7.104a.528.528 0 110 1.056.528.528 0 010-1.056z" fill={color} />
<Path
clipRule="evenodd"
d="M16.877 1.912c.58-.27 1.14-.323 1.616-.037a.317.317 0 01-.326.542c-.227-.136-.547-.153-1.022.068-.352.165-.765.45-1.234.866 2.683 1.17 4.4 3.5 5.148 5.921a6.421 6.421 0 00-.704.184c-.578.016-1.174.204-1.502.735-.338.55-.268 1.276.072 2.069l.005.012.007.014c.523 1.045 1.318 1.91 2.2 2.284-.912 3.274-3.44 6.144-5.972 6.988v2.109h-2.11v-2.11c-1.043.417-2.086.01-2.11 0v2.11h-2.11v-2.11c-2.531-.843-5.061-3.713-5.973-6.987.882-.373 1.678-1.238 2.2-2.284l.007-.014.006-.012c.34-.793.41-1.518.071-2.069-.327-.531-.923-.719-1.503-.735a6.409 6.409 0 00-.704-.183c.749-2.421 2.466-4.751 5.149-5.922-.47-.416-.88-.701-1.234-.866-.474-.221-.794-.204-1.021-.068a.318.318 0 01-.435-.109.317.317 0 01.109-.433c.476-.286 1.036-.233 1.615.037.49.229 1.031.628 1.621 1.182A9.924 9.924 0 0112 2.568c1.199 0 2.284.19 3.256.526.59-.554 1.13-.953 1.62-1.182zM8.835 6.577a1.266 1.266 0 100 2.532 1.266 1.266 0 000-2.532zm6.33 0a1.267 1.267 0 100 2.533 1.267 1.267 0 000-2.533z"
fill={color}
/>
<Path
d="M.395 13.118c-.966-1.932-.163-3.863 2.41-3.365v-.001l.05.01c.084.018.17.038.26.06.033.009.067.017.1.027.084.022.168.048.255.076l.09.027c.528 0 .95.158 1.16.501.212.343.212.87-.105 1.61-.085.17-.178.333-.276.489l-.01.017a4.967 4.967 0 01-.62.791l-.019.02c-1.092 1.117-2.496 1.336-3.295-.262z"
fill={color}
/>
<Path
d="M21.193 9.753c2.574-.5 3.378 1.433 2.411 3.365-.58 1.159-1.476 1.361-2.342.96l-.011-.005a2.419 2.419 0 01-.114-.056l-.019-.01a2.751 2.751 0 01-.115-.067l-.023-.014c-.035-.022-.071-.044-.106-.068l-.05-.035c-.55-.388-1.062-1.007-1.44-1.76-.276-.647-.311-1.132-.174-1.472.176-.439.636-.639 1.23-.639.032-.011.066-.02.099-.03.08-.026.16-.05.238-.072l.117-.03a5.502 5.502 0 01.3-.067z"
fill={color}
/>
</G>
<Defs>
<LinearGradient
gradientUnits="userSpaceOnUse"
id="b"
x1="-.659"
x2="27.023"
y1=".458"
y2="22.855"
>
<Stop stopColor="#FF4D4D" />
<Stop offset="100%" stopColor="#991B1B" />
</LinearGradient>
<LinearGradient
gradientUnits="userSpaceOnUse"
id="c"
x1="-.659"
x2="27.023"
y1=".458"
y2="22.855"
>
<Stop stopColor="#FF4D4D" />
<Stop offset="100%" stopColor="#991B1B" />
</LinearGradient>
<LinearGradient
gradientUnits="userSpaceOnUse"
id="d"
x1="-.659"
x2="27.023"
y1=".458"
y2="22.855"
>
<Stop stopColor="#FF4D4D" />
<Stop offset="100%" stopColor="#991B1B" />
</LinearGradient>
<LinearGradient
gradientUnits="userSpaceOnUse"
id="e"
x1="-.659"
x2="27.023"
y1=".458"
y2="22.855"
>
<Stop stopColor="#FF4D4D" />
<Stop offset="100%" stopColor="#991B1B" />
</LinearGradient>
<LinearGradient
gradientUnits="userSpaceOnUse"
id="f"
x1="-.659"
x2="27.023"
y1=".458"
y2="22.855"
>
<Stop stopColor="#FF4D4D" />
<Stop offset="100%" stopColor="#991B1B" />
</LinearGradient>
<ClipPath id="a">
<Path d="M0 0h24v24H0z" fill={color} />
</ClipPath>
</Defs>
</Svg>
);
});
Icon.displayName = 'OpenClawMono';
export default Icon;
@@ -0,0 +1,27 @@
import React, { memo } from 'react';
import { Path, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
const Icon = memo<RNIconProps>(({ size = 24, style, color = '#000000', ...rest }) => {
return (
<Svg
color={color}
fillRule="nonzero"
height={size}
style={style}
viewBox="0 0 140 24"
width={size * 5.83} // 保持宽高比
{...rest}
>
<Path
d="M122.59 19.6h-6.082l-3.287-13.044h5.047l.932 4.71.492 4.659h.336l1.087-5.177 1.294-4.192h6.264l1.294 4.192 1.087 5.177h.336l.518-4.659.906-4.71h4.969L134.341 19.6h-6.082l-1.683-5.228-.957-3.908h-.337l-.983 3.908-1.709 5.228zM112.685 19.6h-4.555v-2.899h-.259v-4.633c0-.655-.173-1.07-.518-1.242-.328-.19-.923-.285-1.786-.285-.793 0-1.345.095-1.656.285-.293.19-.44.561-.44 1.113v.104h-4.866v-.052c0-1.156.302-2.157.906-3.002.604-.863 1.458-1.527 2.562-1.993 1.105-.466 2.39-.7 3.857-.7 1.518 0 2.778.242 3.779.726 1 .465 1.742 1.138 2.225 2.018.501.863.751 1.907.751 3.132V19.6zm-9.732.259c-1.466 0-2.605-.32-3.416-.958-.794-.638-1.19-1.51-1.19-2.614 0-.62.146-1.173.44-1.656.293-.483.75-.872 1.371-1.165.621-.31 1.424-.518 2.407-.621l5.565-.543v2.691l-4.271.492c-.224.017-.388.069-.491.155a.453.453 0 00-.13.337c0 .207.095.345.285.414.207.052.5.078.88.078.863 0 1.544-.044 2.044-.13.501-.104.863-.285 1.087-.543.225-.26.337-.63.337-1.113l.362-.104v2.278h-.362c-.242.914-.768 1.648-1.579 2.2-.811.535-1.924.802-3.339.802zM97.18 19.6h-4.865V2.26h4.865V19.6zM81.715 19.858c-2.001 0-3.718-.362-5.15-1.087-1.432-.742-2.528-1.777-3.287-3.105-.76-1.346-1.14-2.925-1.14-4.737 0-1.811.38-3.382 1.14-4.71.759-1.346 1.855-2.381 3.287-3.106C77.997 2.37 79.714 2 81.715 2c1.95 0 3.615.293 4.995.88 1.398.587 2.468 1.432 3.21 2.536.742 1.105 1.113 2.433 1.113 3.986v.44h-5.436v-.44c0-.983-.276-1.682-.828-2.096-.552-.432-1.544-.647-2.976-.647-1.174 0-2.088.12-2.744.362a2.179 2.179 0 00-1.346 1.268c-.258.604-.388 1.484-.388 2.64 0 1.139.13 2.019.389 2.64a2.266 2.266 0 001.345 1.294c.656.225 1.57.337 2.744.337 1.432 0 2.424-.207 2.976-.621.552-.432.828-1.14.828-2.123v-.44h5.436v.44c0 1.536-.371 2.864-1.113 3.986-.742 1.104-1.812 1.95-3.21 2.537-1.38.586-3.045.88-4.995.88zM70.96 19.6h-4.866v-6.574c0-.914-.199-1.535-.596-1.863-.397-.345-1.13-.518-2.2-.518-1.07 0-1.786.164-2.148.492-.345.31-.518.888-.518 1.734h-.491l-.414-2.355h.854a5.758 5.758 0 01.698-2.045c.38-.638.932-1.156 1.657-1.553.742-.414 1.69-.621 2.847-.621 1.173 0 2.14.216 2.899.647.776.431 1.346 1.018 1.708 1.76.38.742.57 1.587.57 2.536v8.36zm-10.328 0h-4.865V6.556h4.555v4.011l.31.13V19.6zM47.192 19.859c-1.467 0-2.77-.224-3.908-.673-1.14-.449-2.028-1.173-2.666-2.174-.639-1-.958-2.312-.958-3.934 0-1.415.32-2.623.958-3.624a6.219 6.219 0 012.614-2.329c1.121-.552 2.407-.828 3.856-.828 1.501 0 2.804.25 3.908.75 1.105.484 1.959 1.208 2.563 2.175.604.949.906 2.122.906 3.52 0 .224-.009.43-.026.62 0 .173-.017.38-.052.622H42.844v-2.459h8.023l-1.061 1.527v-.906c0-.794-.207-1.346-.621-1.656-.397-.31-1.13-.466-2.2-.466-1.105 0-1.855.172-2.252.518-.38.345-.57.966-.57 1.863v1.242c0 .915.199 1.536.596 1.864.397.328 1.147.492 2.252.492.983 0 1.639-.087 1.967-.26.345-.189.517-.474.517-.853v-.285h4.866v.31c0 .967-.293 1.82-.88 2.563-.587.742-1.415 1.328-2.485 1.76-1.07.414-2.338.621-3.804.621zM32.648 19.859c-1.536 0-2.692-.328-3.469-.984-.776-.672-1.26-1.552-1.449-2.64h-.75v-3.002h.491c0 .604.112 1.07.337 1.398.241.31.595.526 1.06.647.484.103 1.088.155 1.813.155.759 0 1.354-.078 1.785-.233.449-.155.768-.405.958-.75.19-.345.285-.803.285-1.372 0-.587-.095-1.044-.285-1.372-.19-.345-.509-.586-.958-.724-.431-.156-1.026-.233-1.786-.233-1.087 0-1.898.146-2.432.44-.518.293-.777.914-.777 1.863h-.492l-.362-2.976h.802c.207-1.294.716-2.243 1.527-2.847.811-.622 1.976-.932 3.494-.932 1.33 0 2.45.276 3.365.828.932.535 1.63 1.311 2.096 2.33.484 1 .725 2.208.725 3.623s-.233 2.631-.699 3.65c-.465 1-1.147 1.776-2.044 2.329-.88.535-1.959.802-3.236.802zM27.47 24h-4.866V6.556h4.556v3.675l.31.336V24zM11.602 19.858c-2.001 0-3.727-.362-5.176-1.087-1.432-.742-2.528-1.777-3.287-3.105C2.379 14.32 2 12.74 2 10.929c0-1.811.38-3.382 1.139-4.71.759-1.346 1.855-2.381 3.287-3.106C7.876 2.37 9.6 2 11.602 2c2.07 0 3.822.371 5.254 1.113 1.45.725 2.554 1.76 3.313 3.106.76 1.328 1.139 2.899 1.139 4.71 0 1.812-.38 3.39-1.139 4.737-.76 1.328-1.863 2.363-3.313 3.105-1.432.725-3.183 1.087-5.254 1.087zm0-4.658c1.173 0 2.088-.112 2.744-.337.655-.241 1.113-.673 1.371-1.294.276-.621.414-1.501.414-2.64 0-1.156-.138-2.036-.414-2.64-.258-.62-.716-1.044-1.371-1.268-.656-.241-1.57-.362-2.744-.362-1.173 0-2.079.12-2.717.362A2.179 2.179 0 007.539 8.29c-.242.604-.363 1.484-.363 2.64 0 1.139.121 2.019.363 2.64a2.266 2.266 0 001.346 1.294c.638.225 1.544.337 2.717.337z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'OpenClawText';
export default Icon;
@@ -0,0 +1,25 @@
import Avatar from './components/Avatar';
import Color from './components/Color';
import Combine from './components/Combine';
import Mono from './components/Mono';
import Text from './components/Text';
import { COLOR_PRIMARY, TITLE } from './style';
export type CompoundedIcon = typeof Mono & {
Avatar: typeof Avatar;
Color: typeof Color;
Combine: typeof Combine;
Text: typeof Text;
colorPrimary: string;
title: string;
};
const Icons = Mono as CompoundedIcon;
Icons.Color = Color;
Icons.Text = Text;
Icons.Combine = Combine;
Icons.Avatar = Avatar;
Icons.colorPrimary = COLOR_PRIMARY;
Icons.title = TITLE;
export default Icons;
@@ -0,0 +1,9 @@
export const TITLE = 'OpenClaw';
export const COMBINE_TEXT_MULTIPLE = 0.75;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#ff4d4d';
// Avatar constants
export const AVATAR_BACKGROUND = '#000';
export const AVATAR_COLOR = '#fff';
export const AVATAR_ICON_MULTIPLE = 0.75;
@@ -0,0 +1,22 @@
import React, { memo } from 'react';
import { RNIconAvatar, type RNIconAvatarProps } from '@/features';
import { AVATAR_BACKGROUND, AVATAR_COLOR, AVATAR_ICON_MULTIPLE, TITLE } from '../style';
import Mono from './Mono';
export type AvatarProps = Omit<RNIconAvatarProps, 'Icon'>;
const Avatar = memo<AvatarProps>(({ background, ...rest }) => {
return (
<RNIconAvatar
Icon={Mono}
aria-label={TITLE}
background={background || AVATAR_BACKGROUND}
color={AVATAR_COLOR}
iconMultiple={AVATAR_ICON_MULTIPLE}
{...rest}
/>
);
});
export default Avatar;
@@ -0,0 +1,27 @@
import React, { memo } from 'react';
import { Path, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
const Icon = memo<RNIconProps>(({ size = 24, style, color = '#000000', ...rest }) => {
return (
<Svg
color={color}
fillRule="evenodd"
height={size}
style={style}
viewBox="0 0 24 24"
width={size}
{...rest}
>
<Path
d="M.958 15.936a.459.459 0 01.459.44v2.729a.46.46 0 01-.918 0v-2.729a.459.459 0 01.459-.44zm4.814-2.035a.46.46 0 01.553.45v4.754a.458.458 0 11-.918 0V15.48L3.74 17.202a.462.462 0 01-.655.016.462.462 0 01-.065-.082L.628 14.67a.459.459 0 01.658-.637l2.124 2.187 2.127-2.188a.46.46 0 01.235-.13zm2.068.004a.46.46 0 01.458.445v4.755a.46.46 0 01-.458.458.459.459 0 01-.458-.458V14.35a.459.459 0 01.458-.445zm1.973 2.014a.46.46 0 01.46.457v2.729a.46.46 0 01-.784.324.46.46 0 01-.134-.324v-2.729a.46.46 0 01.458-.458zm.002-2.045a.458.458 0 01.328.157l2.127 2.19 2.125-2.19a.459.459 0 01.784.318v4.756a.46.46 0 01-.455.458.46.46 0 01-.458-.458V15.48l-1.667 1.723a.46.46 0 01-.65.008l-.005-.005c0-.002-.002-.002-.004-.003l-2.455-2.534a.46.46 0 01-.008-.667.461.461 0 01.338-.128zm6.797 1.206a.46.46 0 01.53.651A1.966 1.966 0 0019.81 18.4a.462.462 0 01.623.18.46.46 0 01-.181.624 2.863 2.863 0 01-1.38.353l-.142-.004a2.88 2.88 0 01-2.393-4.263.461.461 0 01.274-.21zm.864-.931a2.884 2.884 0 013.915 3.914.46.46 0 01-.402.24l-.057-.004a.458.458 0 01-.164-.055.46.46 0 01-.182-.622 1.967 1.967 0 00-2.669-2.67.459.459 0 11-.441-.803zM9.59 6.368c1.481 0 1.696 1.202 1.696 1.654v2.648h-.917v-.432c-.26.346-.792.535-1.36.535-.133 0-1.289-.03-1.384-1.136-.082-.932.675-1.61 2.053-1.61h.691c0-.563-.367-.886-.983-.886-.44.013-.864.174-1.2.458l-.36-.664c.484-.379 1.012-.567 1.764-.567zm4.427.1c1.263 0 2.082.97 2.083 2.15 0 1.181-.824 2.154-2.083 2.154-1.26 0-2.084-.972-2.084-2.152 0-1.18.82-2.153 2.084-2.153zm6.801.015c.68 0 1.202.465 1.197 1.548v2.642H21.1V8.29c0-.312-.002-.98-.63-.98s-.628.667-.628.838v2.524h-.89V8.148c0-.17-.001-.838-.63-.838-.628 0-.628.668-.628.98v2.383h-.917v-4.03h.917V7a1.22 1.22 0 01.947-.516c.398 0 .76.193.982.686a1.321 1.321 0 011.195-.686zm-18.093.872l1.457-1.772H5.32L3.311 8.07l2.14 2.602H4.24L2.725 8.796 1.21 10.672H0L2.138 8.07.13 5.583h1.138l1.458 1.772zm4.149 3.317h-.916V6.644h.916v4.028zm16.99 0h-.916V6.644h.916v4.028zM9.925 8.71c-1.055 0-1.359.412-1.326.742.032.329.324.537.757.537a1.013 1.013 0 001.014-.968l.002-.31h-.447zM14.018 7.3c-.663 0-1.184.487-1.184 1.32 0 .832.52 1.32 1.184 1.32.662 0 1.182-.49 1.182-1.32 0-.832-.52-1.32-1.182-1.32zM6.417 5.001a.568.568 0 01.587.582.588.588 0 01-1.175 0A.57.57 0 016.417 5zm16.991 0a.57.57 0 01.592.582.588.588 0 01-1.174 0 .57.57 0 01.357-.542.572.572 0 01.225-.04z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'XiaomiMiMoMono';
export default Icon;
@@ -0,0 +1,32 @@
import React, { memo } from 'react';
import { Path, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
const Icon = memo<RNIconProps>(({ size = 24, style, color = '#000000', ...rest }) => {
return (
<Svg
color={color}
fillRule="evenodd"
height={size}
style={style}
viewBox="0 0 167 24"
width={size * 6.96} // 保持宽高比
{...rest}
>
<Path
clipRule="evenodd"
d="M34.192 6.736c5.13 0 5.87 4.168 5.87 5.733v9.174h-3.171v-1.497C35.99 21.344 34.147 22 32.18 22c-.46 0-4.46-.107-4.788-3.936-.283-3.23 2.335-5.58 7.103-5.58h2.395c0-1.948-1.27-3.068-3.405-3.068a6.746 6.746 0 00-4.152 1.586l-1.248-2.298c1.679-1.313 3.505-1.968 6.106-1.968zm1.156 8.115c-3.65 0-4.7 1.425-4.588 2.566.11 1.141 1.12 1.861 2.622 1.861a3.5 3.5 0 003.509-3.353l.005-1.074h-1.548zM49.511 7.083c4.373 0 7.21 3.362 7.21 7.454 0 4.09-2.85 7.458-7.21 7.458-4.358 0-7.21-3.367-7.21-7.456 0-4.088 2.835-7.456 7.21-7.456zm0 2.885c-2.294 0-4.093 1.686-4.093 4.571 0 2.884 1.8 4.573 4.093 4.573 2.295 0 4.093-1.693 4.093-4.573 0-2.881-1.797-4.57-4.093-4.57z"
fill={color}
/>
<Path
d="M109.72 2.376a1.58 1.58 0 01.923.082 1.583 1.583 0 01.991 1.475v16.47a1.593 1.593 0 01-.463 1.126 1.59 1.59 0 01-2.714-1.125V7.847l-5.769 5.966a1.596 1.596 0 01-2.268.057 1.593 1.593 0 01-.228-.285L91.914 5.04a1.593 1.593 0 01.075-2.206 1.59 1.59 0 012.203-.008l7.354 7.58 7.362-7.58c.219-.228.502-.385.812-.45zM116.876 2.391c.413 0 .81.16 1.107.449.295.288.466.68.477 1.093v16.476a1.584 1.584 0 01-2.706 1.12 1.591 1.591 0 01-.465-1.123V3.933a1.585 1.585 0 011.587-1.542zM123.707 9.366a1.587 1.587 0 011.585 1.589v9.449a1.593 1.593 0 01-.463 1.125 1.59 1.59 0 01-2.246 0 1.596 1.596 0 01-.463-1.125v-9.45a1.588 1.588 0 011.587-1.588zM123.712 2.282a1.591 1.591 0 011.132.545l7.366 7.59 7.352-7.59a1.583 1.583 0 012.441.228c.176.26.27.567.272.88v16.471a1.598 1.598 0 01-1.577 1.589 1.587 1.587 0 01-1.585-1.589V7.85l-5.769 5.966a1.597 1.597 0 01-1.117.481 1.592 1.592 0 01-1.129-.448l-.019-.023-.015-.012-8.496-8.775a1.597 1.597 0 01-.51-1.148 1.6 1.6 0 01.481-1.16c.154-.15.34-.267.542-.344.201-.077.416-.113.631-.104zM93.056 9.426a1.592 1.592 0 011.59 1.529v9.449a1.6 1.6 0 01-.469 1.125 1.59 1.59 0 01-.517.342 1.587 1.587 0 01-2.191-1.467v-9.45a1.592 1.592 0 011.587-1.528zM147.235 6.461a1.587 1.587 0 011.832 2.256 6.82 6.82 0 00-.772 4.238 6.819 6.819 0 001.926 3.855 6.803 6.803 0 008.082 1.155 1.595 1.595 0 012.157.624 1.603 1.603 0 01-.151 1.76c-.13.163-.291.299-.473.4a9.903 9.903 0 01-4.777 1.224 9.962 9.962 0 01-7.014-2.853 9.98 9.98 0 01-2.989-6.96 9.993 9.993 0 011.231-4.973 1.59 1.59 0 01.948-.726zM73.054 7.138c2.354 0 4.157 1.608 4.14 5.361v9.154h-3.167v-8.257c0-1.08-.004-3.395-2.181-3.395-2.174 0-2.174 2.314-2.174 2.905v8.745h-3.078v-8.745c0-.591-.003-2.905-2.179-2.905-2.175 0-2.174 2.316-2.174 3.395v8.257h-3.172V7.69h3.172v1.232a4.222 4.222 0 013.276-1.784c1.38 0 2.632.667 3.4 2.377a4.567 4.567 0 014.138-2.377zM10.431 10.16l5.044-6.143h3.94l-6.953 8.618 7.4 9.016h-4.189l-5.242-6.5-5.239 6.5H1l7.399-9.018-6.95-8.616h3.939l5.043 6.142zM24.793 21.65h-3.17V7.694h3.17v13.958zM83.595 21.65h-3.17V7.694h3.17v13.958zM150.224 3.236a9.975 9.975 0 016.21-1.13 9.98 9.98 0 018.465 8.475 10.003 10.003 0 01-1.126 6.216 1.592 1.592 0 01-1.392.828 1.59 1.59 0 01-1.391-2.357 6.819 6.819 0 00-1.154-8.093 6.802 6.802 0 00-8.085-1.155 1.582 1.582 0 01-1.223.158 1.588 1.588 0 01-1.159-1.365 1.596 1.596 0 01.364-1.183c.136-.162.302-.297.491-.394zM23.208 2.004a1.964 1.964 0 012.03 2.013 2.038 2.038 0 01-.594 1.438 2.034 2.034 0 01-1.436.597 2.033 2.033 0 01-1.877-1.257 2.037 2.037 0 01-.156-.778 1.97 1.97 0 012.033-2.013zM82.013 2.002A1.963 1.963 0 0184.06 4.02a2.03 2.03 0 11-4.063 0 1.97 1.97 0 012.016-2.018z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'XiaomiMiMoText';
export default Icon;
@@ -0,0 +1,20 @@
import Avatar from './components/Avatar';
import Mono from './components/Mono';
import Text from './components/Text';
import { COLOR_PRIMARY, TITLE } from './style';
export type CompoundedIcon = typeof Mono & {
Avatar: typeof Avatar;
Text: typeof Text;
colorPrimary: string;
title: string;
};
const Icons = Mono as CompoundedIcon;
Icons.Text = Text;
Icons.Avatar = Avatar;
Icons.colorPrimary = COLOR_PRIMARY;
Icons.title = TITLE;
export default Icons;
@@ -0,0 +1,9 @@
export const TITLE = 'XiaomiMiMo';
export const COMBINE_TEXT_MULTIPLE = 1;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#000';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
export const AVATAR_ICON_MULTIPLE = 0.7;
+4
View File
@@ -33,6 +33,7 @@ export { default as Anyscale, type CompoundedIcon as AnyscaleProps } from './ico
export { default as Apple, type CompoundedIcon as AppleProps } from './icons/Apple';
export { default as Arcee, type CompoundedIcon as ArceeProps } from './icons/Arcee';
export { default as AssemblyAI, type CompoundedIcon as AssemblyAIProps } from './icons/AssemblyAI';
export { default as AtlasCloud, type CompoundedIcon as AtlasCloudProps } from './icons/AtlasCloud';
export { default as Automatic, type CompoundedIcon as AutomaticProps } from './icons/Automatic';
export { default as Aws, type CompoundedIcon as AwsProps } from './icons/Aws';
export { default as Aya, type CompoundedIcon as AyaProps } from './icons/Aya';
@@ -196,6 +197,7 @@ export { default as LmStudio, type CompoundedIcon as LmStudioProps } from './ico
export { default as LobeHub, type CompoundedIcon as LobeHubProps } from './icons/LobeHub';
export { default as LongCat, type CompoundedIcon as LongCatProps } from './icons/LongCat';
export { default as Lovable, type CompoundedIcon as LovableProps } from './icons/Lovable';
export { default as Lovart, type CompoundedIcon as LovartProps } from './icons/Lovart';
export { default as Luma, type CompoundedIcon as LumaProps } from './icons/Luma';
export { default as Magic, type CompoundedIcon as MagicProps } from './icons/Magic';
export { default as Make, type CompoundedIcon as MakeProps } from './icons/Make';
@@ -233,6 +235,7 @@ export { default as Nvidia, type CompoundedIcon as NvidiaProps } from './icons/N
export { default as Ollama, type CompoundedIcon as OllamaProps } from './icons/Ollama';
export { default as OpenAI, type CompoundedIcon as OpenAIProps } from './icons/OpenAI';
export { default as OpenChat, type CompoundedIcon as OpenChatProps } from './icons/OpenChat';
export { default as OpenClaw, type CompoundedIcon as OpenClawProps } from './icons/OpenClaw';
export { default as OpenRouter, type CompoundedIcon as OpenRouterProps } from './icons/OpenRouter';
export { default as OpenWebUI, type CompoundedIcon as OpenWebUIProps } from './icons/OpenWebUI';
export { default as PaLM, type CompoundedIcon as PaLMProps } from './icons/PaLM';
@@ -319,6 +322,7 @@ export { default as Wenxin, type CompoundedIcon as WenxinProps } from './icons/W
export { default as Windsurf, type CompoundedIcon as WindsurfProps } from './icons/Windsurf';
export { default as WorkersAI, type CompoundedIcon as WorkersAIProps } from './icons/WorkersAI';
export { default as XAI, type CompoundedIcon as XAIProps } from './icons/XAI';
export { default as XiaomiMiMo, type CompoundedIcon as XiaomiMiMoProps } from './icons/XiaomiMiMo';
export { default as Xinference, type CompoundedIcon as XinferenceProps } from './icons/Xinference';
export { default as Xuanyuan, type CompoundedIcon as XuanyuanProps } from './icons/Xuanyuan';
export { default as Yandex, type CompoundedIcon as YandexProps } from './icons/Yandex';