✨ feat: Add AgentIcon

This commit is contained in:
canisminor1990
2026-02-28 12:25:26 +08:00
parent e1389b891c
commit f02a8cb1c2
191 changed files with 5662 additions and 113 deletions
+32
View File
@@ -0,0 +1,32 @@
---
nav: Components
group: Features
title: AgentIcon
apiHeader:
docUrl: 'https://github.com/lobehub/lobe-icons/tree/master/docs/features/agent-icon.md'
sourceUrl: 'https://github.com/lobehub/lobe-icons/tree/master/src/features/AgentIcon/index.tsx'
---
## Default
<code src="./demos/agent-icon/index.tsx" center></code>
## Mono
<code src="./demos/agent-icon/Mono.tsx" center></code>
## Color
<code src="./demos/agent-icon/Color.tsx" center></code>
## Combine
<code src="./demos/agent-icon/Combine.tsx" center></code>
## Combine Color
<code src="./demos/agent-icon/CombineColor.tsx" center></code>
## Config
- **Config:** <https://github.com/lobehub/lobe-icons/blob/master/src/features/agentConfig.ts>
+13
View File
@@ -0,0 +1,13 @@
import { AgentIcon, agentMappings } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => {
return (
<Flexbox gap={16} horizontal width={'100%'} wrap={'wrap'}>
{Object.values(agentMappings).map((item) => {
const agent = item.keywords[0].replace('^', '');
return <AgentIcon agent={agent} key={agent} size={48} type={'color'} />;
})}
</Flexbox>
);
};
@@ -0,0 +1,13 @@
import { AgentIcon, agentMappings } from '@lobehub/icons';
import { Grid } from '@lobehub/ui';
export default () => {
return (
<Grid gap={16} width={'100%'}>
{Object.values(agentMappings).map((item) => {
const agent = item.keywords[0].replace('^', '');
return <AgentIcon agent={agent} key={agent} size={28} type={'combine'} />;
})}
</Grid>
);
};
@@ -0,0 +1,13 @@
import { AgentIcon, agentMappings } from '@lobehub/icons';
import { Grid } from '@lobehub/ui';
export default () => {
return (
<Grid gap={16} rows={2} width={'100%'}>
{Object.values(agentMappings).map((item) => {
const agent = item.keywords[0].replace('^', '');
return <AgentIcon agent={agent} key={agent} size={28} type={'combine-color'} />;
})}
</Grid>
);
};
+13
View File
@@ -0,0 +1,13 @@
import { AgentIcon, agentMappings } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => {
return (
<Flexbox gap={16} horizontal width={'100%'} wrap={'wrap'}>
{Object.values(agentMappings).map((item) => {
const agent = item.keywords[0].replace('^', '');
return <AgentIcon agent={agent} key={agent} size={48} type={'mono'} />;
})}
</Flexbox>
);
};
+13
View File
@@ -0,0 +1,13 @@
import { AgentIcon, agentMappings } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => {
return (
<Flexbox gap={16} horizontal width={'100%'} wrap={'wrap'}>
{Object.values(agentMappings).map((item) => {
const agent = item.keywords[0].replace('^', '');
return <AgentIcon agent={agent} key={agent} size={48} />;
})}
</Flexbox>
);
};
+1 -1
View File
@@ -1,4 +1,4 @@
import { Snippet , Center, Flexbox } from '@lobehub/ui';
import { Center, Flexbox, Snippet } from '@lobehub/ui';
import { Features, FeaturesProps } from '@lobehub/ui/awesome';
import { Expand, GitPullRequest, Trees } from 'lucide-react';
@@ -2,43 +2,38 @@ import React, { memo } from 'react';
import { View } from 'react-native';
import type { RNIconAvatarProps } from '../types';
import DefaultIcon from './DefaultIcon';
const DefaultAvatar = memo<Omit<RNIconAvatarProps, 'Icon'>>(
({
shape = 'circle',
color = '#fff',
background = '#f0f0f0',
size,
style,
iconMultiple = 0.6,
iconStyle,
}) => {
const borderRadius = shape === 'circle' ? size / 2 : Math.floor(size * 0.1);
({
shape = 'circle',
color = '#fff',
background = '#f0f0f0',
size,
style,
iconMultiple = 0.6,
iconStyle,
}) => {
const borderRadius = shape === 'circle' ? size / 2 : Math.floor(size * 0.1);
return (
<View
style={[
{
alignItems: 'center',
backgroundColor: background,
borderRadius,
height: size,
justifyContent: 'center',
width: size,
},
style,
]}
>
<DefaultIcon
color={color}
size={size * iconMultiple}
style={iconStyle}
/>
</View>
);
},
return (
<View
style={[
{
alignItems: 'center',
backgroundColor: background,
borderRadius,
height: size,
justifyContent: 'center',
width: size,
},
style,
]}
>
<DefaultIcon color={color} size={size * iconMultiple} style={iconStyle} />
</View>
);
},
);
export default DefaultAvatar;
export default DefaultAvatar;
@@ -4,25 +4,25 @@ import { Text, type ViewStyle } from 'react-native';
import type { RNIconProps } from '../types';
interface DefaultIconProps extends RNIconProps {
style?: ViewStyle;
style?: ViewStyle;
}
const DefaultIcon = memo<DefaultIconProps>(({ color = '#666', size = 12, style, ...rest }) => {
return (
<Text
style={[
{
color,
fontSize: size,
fontWeight: 'bold',
},
style,
]}
{...rest}
>
🧠
</Text>
);
return (
<Text
style={[
{
color,
fontSize: size,
fontWeight: 'bold',
},
style,
]}
{...rest}
>
🧠
</Text>
);
});
export default DefaultIcon;
export default DefaultIcon;
@@ -2,43 +2,38 @@ import React, { memo } from 'react';
import { View } from 'react-native';
import type { RNIconAvatarProps } from '../types';
import DefaultIcon from './DefaultIcon';
const DefaultAvatar = memo<Omit<RNIconAvatarProps, 'Icon'>>(
({
shape = 'circle',
color = '#fff',
background = '#f0f0f0',
size,
style,
iconMultiple = 0.6,
iconStyle,
}) => {
const borderRadius = shape === 'circle' ? size / 2 : Math.floor(size * 0.1);
({
shape = 'circle',
color = '#fff',
background = '#f0f0f0',
size,
style,
iconMultiple = 0.6,
iconStyle,
}) => {
const borderRadius = shape === 'circle' ? size / 2 : Math.floor(size * 0.1);
return (
<View
style={[
{
alignItems: 'center',
backgroundColor: background,
borderRadius,
height: size,
justifyContent: 'center',
width: size,
},
style,
]}
>
<DefaultIcon
color={color}
size={size * iconMultiple}
style={iconStyle}
/>
</View>
);
},
return (
<View
style={[
{
alignItems: 'center',
backgroundColor: background,
borderRadius,
height: size,
justifyContent: 'center',
width: size,
},
style,
]}
>
<DefaultIcon color={color} size={size * iconMultiple} style={iconStyle} />
</View>
);
},
);
export default DefaultAvatar;
export default DefaultAvatar;
@@ -4,25 +4,25 @@ import { Text, type ViewStyle } from 'react-native';
import type { RNIconProps } from '../types';
interface DefaultIconProps extends RNIconProps {
style?: ViewStyle;
style?: ViewStyle;
}
const DefaultIcon = memo<DefaultIconProps>(({ color = '#666', size = 12, style, ...rest }) => {
return (
<Text
style={[
{
color,
fontSize: size,
fontWeight: 'bold',
},
style,
]}
{...rest}
>
📡
</Text>
);
return (
<Text
style={[
{
color,
fontSize: size,
fontWeight: 'bold',
},
style,
]}
{...rest}
>
📡
</Text>
);
});
export default DefaultIcon;
export default DefaultIcon;
@@ -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, ...rest }) => {
return (
<Svg height={size} style={style} viewBox="0 0 24 24" width={size} {...rest}>
<Path
d="M15.087 23.18L12.03 24l-2.097-7.823-5.738 5.738-2.251-2.251 5.718-5.719-7.769-2.082.82-3.057 11.294 3.08 3.08 11.295z"
fill="#F34E3F"
/>
<Path
d="M19.505 18.762l-3.057.82-2.564-9.573-9.572-2.564.819-3.057 11.295 3.079 3.08 11.295z"
fill="#F34E3F"
/>
<Path
d="M23.893 14.374l-3.057.82-2.565-9.572L8.7 3.057 9.52 0l11.295 3.08 3.079 11.294z"
fill="#F34E3F"
/>
</Svg>
);
});
Icon.displayName = 'AmpColor';
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,35 @@
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="M15.087 23.18L12.03 24l-2.097-7.823-5.738 5.738-2.251-2.251 5.718-5.719-7.769-2.082.82-3.057 11.294 3.08 3.08 11.295z"
fill={color}
/>
<Path
d="M19.505 18.762l-3.057.82-2.564-9.573-9.572-2.564.819-3.057 11.295 3.079 3.08 11.295z"
fill={color}
/>
<Path
d="M23.893 14.374l-3.057.82-2.565-9.572L8.7 3.057 9.52 0l11.295 3.08 3.079 11.294z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'AmpMono';
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 54 24"
width={size * 2.25} // 保持宽高比
{...rest}
>
<Path
d="M44.055 2C48.405 2 52 5.114 52 10.002c0 5.149-3.66 8.838-8.39 8.838-1.668 0-3.186-.311-4.435-1.015a6.072 6.072 0 01-2.443-2.53l-1.212 8.492-.03.213h-2.447l.041-.285 3.087-21.269h2.424l-.256 1.581C39.801 2.69 41.772 2 44.055 2zm-33.666.028c1.668 0 3.193.312 4.45 1.018a6.084 6.084 0 012.454 2.546l.409-2.932.03-.214h2.419l-2.264 15.763-.03.213h-2.42l.234-1.604c-1.45 1.359-3.443 2.05-5.726 2.05-4.35 0-7.945-3.114-7.945-8.002 0-5.149 3.66-8.838 8.39-8.838zm12.292 16.394h-2.42L22.555 2.66l.03-.213h2.417l-2.32 15.976zm4.354 0h-2.419L26.91 2.66l.03-.213h2.417l-2.32 15.976zM33.71 2.446l-2.32 15.976h-2.42L31.264 2.66l.03-.213h2.417zM10.64 4.143c-3.675 0-6.143 2.932-6.143 6.612 0 1.58.498 3.08 1.48 4.181.976 1.097 2.449 1.817 4.44 1.817 3.674 0 6.143-2.959 6.143-6.64 0-1.78-.617-3.27-1.657-4.314-1.04-1.043-2.517-1.656-4.264-1.656zm32.942-.027c-3.673 0-6.142 2.958-6.142 6.639 0 1.78.617 3.27 1.657 4.313 1.04 1.044 2.517 1.657 4.263 1.657 3.675 0 6.143-2.932 6.143-6.611 0-1.581-.498-3.081-1.479-4.182-.977-1.097-2.45-1.817-4.442-1.817z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'AmpText';
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 = 'Amp';
export const COMBINE_TEXT_MULTIPLE = 0.8;
export const COMBINE_SPACE_MULTIPLE = 0.3;
export const COLOR_PRIMARY = '#F34E3F';
// Avatar constants
export const AVATAR_BACKGROUND = '#000';
export const AVATAR_COLOR = COLOR_PRIMARY;
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 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,248 @@
import React, { memo } from 'react';
import {
Defs,
FeBlend,
FeFlood,
FeGaussianBlur,
Filter,
G,
Mask,
Path,
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, d, e, f, g, h, i, j, k, l] = useFillIds(TITLE, 12);
return (
<Svg height={size} style={style} viewBox="0 0 24 24" width={size} {...rest}>
<Mask height="23" id={a.id} maskUnits="userSpaceOnUse" width="24" x="0" y="1">
<Path
d="M21.751 22.607c1.34 1.005 3.35.335 1.508-1.508C17.73 15.74 18.904 1 12.037 1 5.17 1 6.342 15.74.815 21.1c-2.01 2.009.167 2.511 1.507 1.506 5.192-3.517 4.857-9.714 9.715-9.714 4.857 0 4.522 6.197 9.714 9.715z"
fill="#fff"
/>
</Mask>
<G mask={a.fill}>
<G filter={b.fill}>
<Path
d="M-1.018-3.992c-.408 3.591 2.686 6.89 6.91 7.37 4.225.48 7.98-2.043 8.387-5.633.408-3.59-2.686-6.89-6.91-7.37-4.225-.479-7.98 2.043-8.387 5.633z"
fill="#FFE432"
/>
</G>
<G filter={c.fill}>
<Path
d="M15.269 7.747c1.058 4.557 5.691 7.374 10.348 6.293 4.657-1.082 7.575-5.653 6.516-10.21-1.058-4.556-5.691-7.374-10.348-6.292-4.657 1.082-7.575 5.653-6.516 10.21z"
fill="#FC413D"
/>
</G>
<G filter={d.fill}>
<Path
d="M-12.443 10.804c1.338 4.703 7.36 7.11 13.453 5.378 6.092-1.733 9.947-6.95 8.61-11.652C8.282-.173 2.26-2.58-3.833-.848-9.925.884-13.78 6.1-12.443 10.804z"
fill="#00B95C"
/>
</G>
<G filter={e.fill}>
<Path
d="M-12.443 10.804c1.338 4.703 7.36 7.11 13.453 5.378 6.092-1.733 9.947-6.95 8.61-11.652C8.282-.173 2.26-2.58-3.833-.848-9.925.884-13.78 6.1-12.443 10.804z"
fill="#00B95C"
/>
</G>
<G filter={f.fill}>
<Path
d="M-7.608 14.703c3.352 3.424 9.126 3.208 12.896-.483 3.77-3.69 4.108-9.459.756-12.883C2.69-2.087-3.083-1.871-6.853 1.82c-3.77 3.69-4.108 9.458-.755 12.883z"
fill="#00B95C"
/>
</G>
<G filter={g.fill}>
<Path
d="M9.932 27.617c1.04 4.482 5.384 7.303 9.7 6.3 4.316-1.002 6.971-5.448 5.93-9.93-1.04-4.483-5.384-7.304-9.7-6.301-4.316 1.002-6.971 5.448-5.93 9.93z"
fill="#3186FF"
/>
</G>
<G filter={h.fill}>
<Path
d="M2.572-8.185C.392-3.329 2.778 2.472 7.9 4.771c5.122 2.3 11.042.227 13.222-4.63 2.18-4.855-.205-10.656-5.327-12.955-5.122-2.3-11.042-.227-13.222 4.63z"
fill="#FBBC04"
/>
</G>
<G filter={i.fill}>
<Path
d="M-3.267 38.686c-5.277-2.072 3.742-19.117 5.984-24.83 2.243-5.712 8.34-8.664 13.616-6.592 5.278 2.071 11.533 13.482 9.29 19.195-2.242 5.713-23.613 14.298-28.89 12.227z"
fill="#3186FF"
/>
</G>
<G filter={j.fill}>
<Path
d="M28.71 17.471c-1.413 1.649-5.1.808-8.236-1.878-3.135-2.687-4.531-6.201-3.118-7.85 1.412-1.649 5.1-.808 8.235 1.878s4.532 6.2 3.119 7.85z"
fill="#749BFF"
/>
</G>
<G filter={k.fill}>
<Path
d="M18.163 9.077c5.81 3.93 12.502 4.19 14.946.577 2.443-3.612-.287-9.727-6.098-13.658-5.81-3.931-12.502-4.19-14.946-.577-2.443 3.612.287 9.727 6.098 13.658z"
fill="#FC413D"
/>
</G>
<G filter={l.fill}>
<Path
d="M-.915 2.684c-1.44 3.473-.97 6.967 1.05 7.804 2.02.837 4.824-1.3 6.264-4.772 1.44-3.473.97-6.967-1.05-7.804-2.02-.837-4.824 1.3-6.264 4.772z"
fill="#FFEE48"
/>
</G>
</G>
<Defs>
<Filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="17.587"
id={b.id}
width="19.838"
x="-3.288"
y="-11.917"
>
<FeFlood floodOpacity="0" result="BackgroundImageFix" />
<FeBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<FeGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="1.117" />
</Filter>
<Filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="38.565"
id={c.id}
width="38.9"
x="4.251"
y="-13.493"
>
<FeFlood floodOpacity="0" result="BackgroundImageFix" />
<FeBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<FeGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="5.4" />
</Filter>
<Filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="36.517"
id={d.id}
width="40.955"
x="-21.889"
y="-10.592"
>
<FeFlood floodOpacity="0" result="BackgroundImageFix" />
<FeBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<FeGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="4.591" />
</Filter>
<Filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="36.517"
id={e.id}
width="40.955"
x="-21.889"
y="-10.592"
>
<FeFlood floodOpacity="0" result="BackgroundImageFix" />
<FeBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<FeGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="4.591" />
</Filter>
<Filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="36.595"
id={f.id}
width="36.632"
x="-19.099"
y="-10.278"
>
<FeFlood floodOpacity="0" result="BackgroundImageFix" />
<FeBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<FeGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="4.591" />
</Filter>
<Filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="34.087"
id={g.id}
width="33.533"
x=".981"
y="8.758"
>
<FeFlood floodOpacity="0" result="BackgroundImageFix" />
<FeBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<FeGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="4.363" />
</Filter>
<Filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="35.276"
id={h.id}
width="35.978"
x="-6.143"
y="-21.659"
>
<FeFlood floodOpacity="0" result="BackgroundImageFix" />
<FeBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<FeGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="3.954" />
</Filter>
<Filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="46.523"
id={i.id}
width="45.114"
x="-11.96"
y="-.46"
>
<FeFlood floodOpacity="0" result="BackgroundImageFix" />
<FeBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<FeGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="3.531" />
</Filter>
<Filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="24.054"
id={j.id}
width="25.094"
x="10.485"
y=".58"
>
<FeFlood floodOpacity="0" result="BackgroundImageFix" />
<FeBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<FeGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="3.159" />
</Filter>
<Filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="30.007"
id={k.id}
width="33.508"
x="5.833"
y="-12.467"
>
<FeFlood floodOpacity="0" result="BackgroundImageFix" />
<FeBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<FeGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="2.669" />
</Filter>
<Filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="26.151"
id={l.id}
width="22.194"
x="-8.355"
y="-8.876"
>
<FeFlood floodOpacity="0" result="BackgroundImageFix" />
<FeBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<FeGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="3.303" />
</Filter>
</Defs>
</Svg>
);
});
Icon.displayName = 'AntigravityColor';
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,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="M21.751 22.607c1.34 1.005 3.35.335 1.508-1.508C17.73 15.74 18.904 1 12.037 1 5.17 1 6.342 15.74.815 21.1c-2.01 2.009.167 2.511 1.507 1.506 5.192-3.517 4.857-9.714 9.715-9.714 4.857 0 4.522 6.197 9.714 9.715z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'AntigravityMono';
export default Icon;
File diff suppressed because one or more lines are too long
@@ -0,0 +1,26 @@
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;
colorGradient: string;
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 = 'Antigravity';
export const COMBINE_TEXT_MULTIPLE = 1;
export const COMBINE_SPACE_MULTIPLE = 0.3;
export const COLOR_PRIMARY = '#fff';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
export const AVATAR_ICON_MULTIPLE = 0.7;
@@ -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, ...rest }) => {
return (
<Svg height={size} style={style} viewBox="0 0 24 24" width={size} {...rest}>
<Path
d="M6.513 18.419c-1.6 0-3.107-.64-4.247-1.802A6.146 6.146 0 01.5 12.287c0-1.63.626-3.168 1.766-4.33 1.14-1.162 2.647-1.802 4.247-1.802s3.132.655 4.25 1.795c.835.849.835 2.23 0 3.078a2.11 2.11 0 01-3.02 0 1.737 1.737 0 00-1.234-.521c-.945 0-1.744.813-1.744 1.776 0 .964.799 1.777 1.744 1.777.46 0 .907-.19 1.234-.522a2.11 2.11 0 013.02 0c.835.85.835 2.23 0 3.079a5.997 5.997 0 01-4.25 1.794v.008z"
fill="#EA5E5D"
/>
<Path
d="M12.026 24c-1.6 0-3.107-.64-4.247-1.802a6.146 6.146 0 01-1.766-4.33c0-1.63.644-3.193 1.762-4.337a2.11 2.11 0 013.021 0c.834.849.834 2.23 0 3.078-.324.331-.51.788-.51 1.255 0 .964.798 1.777 1.744 1.777.945 0 1.744-.813 1.744-1.777 0-.341-.083-.83-.475-1.233a6.255 6.255 0 01-1.77-4.348c0-1.615.627-3.168 1.767-4.33s2.646-1.802 4.247-1.802c1.6 0 3.107.64 4.247 1.802a6.146 6.146 0 011.766 4.33c0 1.63-.644 3.194-1.762 4.337a2.11 2.11 0 01-3.021 0 2.206 2.206 0 010-3.078c.323-.331.51-.788.51-1.255 0-.964-.798-1.777-1.744-1.777s-1.744.813-1.744 1.777c0 .47.19.935.521 1.27 1.115 1.136 1.727 2.667 1.727 4.311a6.122 6.122 0 01-1.766 4.33C15.137 23.36 13.63 24 12.03 24h-.004z"
fill="#EA5E5D"
/>
<Path
d="M12.026 6.867L8.53 3.587a1.336 1.336 0 111.827-1.949l1.4 1.313L13.744.495a1.336 1.336 0 012.075 1.68l-3.798 4.692h.004z"
fill="#23AF69"
/>
</Svg>
);
});
Icon.displayName = 'CherryStudioColor';
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,35 @@
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="M6.513 18.419c-1.6 0-3.107-.64-4.247-1.802A6.146 6.146 0 01.5 12.287c0-1.63.626-3.168 1.766-4.33 1.14-1.162 2.647-1.802 4.247-1.802s3.132.655 4.25 1.795c.835.849.835 2.23 0 3.078a2.11 2.11 0 01-3.02 0 1.737 1.737 0 00-1.234-.521c-.945 0-1.744.813-1.744 1.776 0 .964.799 1.777 1.744 1.777.46 0 .907-.19 1.234-.522a2.11 2.11 0 013.02 0c.835.85.835 2.23 0 3.079a5.997 5.997 0 01-4.25 1.794v.008z"
fill={color}
/>
<Path
d="M12.026 24c-1.6 0-3.107-.64-4.247-1.802a6.146 6.146 0 01-1.766-4.33c0-1.63.644-3.193 1.762-4.337a2.11 2.11 0 013.021 0c.834.849.834 2.23 0 3.078-.324.331-.51.788-.51 1.255 0 .964.798 1.777 1.744 1.777.945 0 1.744-.813 1.744-1.777 0-.341-.083-.83-.475-1.233a6.255 6.255 0 01-1.77-4.348c0-1.615.627-3.168 1.767-4.33s2.646-1.802 4.247-1.802c1.6 0 3.107.64 4.247 1.802a6.146 6.146 0 011.766 4.33c0 1.63-.644 3.194-1.762 4.337a2.11 2.11 0 01-3.021 0 2.206 2.206 0 010-3.078c.323-.331.51-.788.51-1.255 0-.964-.798-1.777-1.744-1.777s-1.744.813-1.744 1.777c0 .47.19.935.521 1.27 1.115 1.136 1.727 2.667 1.727 4.311a6.122 6.122 0 01-1.766 4.33C15.137 23.36 13.63 24 12.03 24h-.004z"
fill={color}
/>
<Path
d="M12.026 6.867L8.53 3.587a1.336 1.336 0 111.827-1.949l1.4 1.313L13.744.495a1.336 1.336 0 012.075 1.68l-3.798 4.692h.004z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'CherryStudioMono';
export default Icon;
@@ -0,0 +1,59 @@
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 57 24"
width={size * 2.38} // 保持宽高比
{...rest}
>
<Path
d="M28.347 13.849c.26 0 .465.021.618.066.152.045.274.1.354.162.081.063.14.157.175.287.054.153.081.39.081.71v4.108c0 1.197-.372 2.288-1.117 3.266-.363.462-.83.839-1.4 1.121-.57.283-1.202.431-1.897.431a4.087 4.087 0 01-1.893-.436 3.983 3.983 0 01-1.381-1.143 5.232 5.232 0 01-1.104-3.266V15.06c0-.22.01-.377.023-.485a1.1 1.1 0 01.13-.36.594.594 0 01.367-.286c.17-.054.404-.08.695-.08.291 0 .52.026.695.08.17.053.292.148.355.287.108.21.162.494.162.857v4.082c0 .552.134 1.081.408 1.58.135.255.34.457.614.61.274.152.593.232.965.232.664 0 1.157-.246 1.485-.735.327-.49.489-1.059.489-1.7v-4.163c0-.355.045-.601.135-.75a.705.705 0 01.394-.3c.17-.054.387-.08.647-.08z"
fill={color}
/>
<Path
clipRule="evenodd"
d="M48.426 13.736c1.341 0 2.507.485 3.499 1.458.987.97 1.484 2.176 1.484 3.612 0 1.435-.47 2.664-1.417 3.674-.942 1.013-2.104 1.515-3.486 1.515-1.382 0-2.552-.498-3.517-1.498-.964-.996-1.449-2.185-1.449-3.566 0-.754.135-1.458.408-2.117a4.928 4.928 0 011.091-1.656 5.107 5.107 0 011.566-1.05 4.534 4.534 0 011.825-.38l-.004.008zm.04 2.405c-.646 0-1.225.251-1.74.754-.516.502-.777 1.157-.777 1.964v.01c0 .806.26 1.462.78 1.964s1.105.754 1.75.754c.646 0 1.225-.247 1.74-.736.517-.49.777-1.149.777-1.974s-.26-1.49-.78-1.987c-.52-.498-1.104-.75-1.75-.75z"
fill={color}
/>
<Path
d="M6.2 13.695c.542 0 1.04.072 1.488.211.449.14.758.283.933.43l.34.26c.284.265.423.486.423.67 0 .184-.108.43-.327.749-.31.453-.629.681-.952.681-.188 0-.426-.09-.709-.273a1.528 1.528 0 01-.157-.135 2.052 2.052 0 00-.21-.175c-.19-.116-.436-.175-.727-.175a1.25 1.25 0 00-.736.211.684.684 0 00-.292.583c0 .247.117.453.346.606.233.152.52.26.866.314.346.054.722.14 1.13.251.408.113.786.251 1.131.417.345.162.632.45.865.853.234.404.346.901.346 1.49 0 .587-.117 1.107-.354 1.556-.238.448-.543.794-.924 1.04-.736.48-1.521.722-2.356.722a4.62 4.62 0 01-1.21-.156 3.252 3.252 0 01-.925-.386c-.48-.292-.816-.57-1.004-.843l-.122-.149-.01-.013c-.237-.292-.354-.552-.354-.78 0-.23.194-.54.584-.92.229-.22.466-.328.722-.328.256 0 .61.229 1.063.682.126.152.31.3.543.444.238.14.453.211.655.211.843 0 1.265-.345 1.265-1.036 0-.206-.117-.382-.345-.525a2.581 2.581 0 00-.866-.305 7.525 7.525 0 01-1.117-.305 7.03 7.03 0 01-1.117-.498c-.345-.188-.633-.493-.866-.906-.234-.413-.345-.91-.345-1.49 0-.798.296-1.494.893-2.09.596-.597 1.404-.893 2.431-.893zM41.463 13.861c.637 0 1.01.166 1.13.502.046.153.068.39.068.71v7.568c0 .22-.009.377-.022.475-.014.099-.059.22-.13.355-.126.246-.48.367-1.064.367-.637 0-1.01-.17-1.117-.516-.054-.143-.08-.377-.08-.695V15.06c0-.207.009-.364.023-.472.013-.103.058-.224.13-.358.125-.247.479-.369 1.062-.369zM11.492 13.849h7.569c.29 0 .501.035.64.102.135.067.23.175.275.319.044.143.067.337.067.57 0 .233-.023.426-.067.565a.458.458 0 01-.234.291c-.161.081-.395.121-.695.121h-2.598v6.846c0 .21-.009.363-.022.462a1.104 1.104 0 01-.121.346.578.578 0 01-.359.278c-.17.054-.4.081-.682.081-.283 0-.507-.027-.673-.081a.582.582 0 01-.355-.278 1.11 1.11 0 01-.12-.355 3.89 3.89 0 01-.023-.47v-6.833h-2.61c-.292 0-.503-.036-.642-.103a.521.521 0 01-.274-.318 1.981 1.981 0 01-.067-.57c0-.234.023-.426.067-.565a.46.46 0 01.234-.292c.161-.08.395-.121.695-.121l-.005.005z"
fill={color}
/>
<Path
clipRule="evenodd"
d="M34.394 13.861c1.314 0 2.471.476 3.471 1.422.996.947 1.5 2.114 1.5 3.5 0 1.386-.49 2.57-1.464 3.557-.973.987-2.157 1.485-3.544 1.485h-2.489c-.552 0-.898-.112-1.037-.34-.108-.189-.161-.48-.161-.87v-7.57c0-.219.009-.376.022-.475.014-.098.058-.22.13-.354.126-.247.48-.367 1.062-.367l2.51.012zm-1.32 7.555h1.32v-.005c.654 0 1.242-.242 1.767-.726.525-.485.79-1.095.79-1.83 0-.736-.256-1.35-.767-1.844-.512-.494-1.113-.74-1.804-.74h-1.306v5.145z"
fill={color}
/>
<Path
d="M42.06 4.755a.22.22 0 110 .44.22.22 0 010-.44zM42.827 4.755a.22.22 0 110 .44.22.22 0 010-.44zM41.324 4.737a.22.22 0 110 .44.22.22 0 010-.44z"
fill={color}
/>
<Path
clipRule="evenodd"
d="M44.474 1.265c.583 0 .937.121 1.062.368a1.1 1.1 0 01.131.358h.004c.013.108.022.266.022.472v7.554c0 .318-.026.556-.08.709-.107.336-.48.502-1.117.502-.583 0-.938-.121-1.063-.368a1.1 1.1 0 01-.13-.359 3.947 3.947 0 01-.023-.47V8.49h-1.714l-.422-.026c-.618 1.471-.972 2.292-1.062 2.463a.985.985 0 01-.252.264.707.707 0 01-.434.13c-.175 0-.41-.067-.7-.193-.561-.233-.843-.525-.843-.87 0-.148.066-.381.2-.708.418-.942.728-1.656.925-2.136-.681-.66-1.023-1.503-1.023-2.53 0-.588.117-1.126.355-1.606.233-.48.534-.862.897-1.144.754-.579 1.53-.87 2.328-.87h2.939zm-2.432 2.212a5.406 5.406 0 00-1 .09c-.525.143-.911.569-.911 1.076v.614c0 .507.382.933.911 1.077.108.018.22.035.332.049a5.4 5.4 0 00.978.032c.188.247.287.426.417.403.085-.009.184-.108.255-.48.01-.054.019-.107.028-.17.05.004.125.009.215-.009.34-.063.516-.345.556-.408h.004a.882.882 0 00.13-.494v-.614c0-.247-.094-.476-.246-.66a1.314 1.314 0 00-.669-.417 5.406 5.406 0 00-1-.09z"
fill={color}
/>
<Path
d="M7.204.614c.426 0 .861.067 1.3.198.44.13.772.265 1 .404l.328.187c.162.099.292.18.382.247.238.189.354.41.354.647 0 .237-.094.493-.287.753-.354.489-.673.736-.95.736-.162 0-.396-.099-.696-.3-.382-.31-.889-.463-1.526-.463-.587 0-1.17.207-1.74.61-.273.198-.499.48-.682.844-.18.363-.274.771-.274 1.233 0 .462.09.871.274 1.234.179.364.412.65.695.857.552.399 1.13.601 1.727.601.283 0 .548-.036.794-.108.251-.072.43-.144.538-.22l-.004-.009.247-.174c.31-.18.525-.274.655-.274.282 0 .584.256.911.763.197.318.3.57.3.763 0 .192-.063.35-.184.475a2.066 2.066 0 01-.43.341c-.162.099-.319.193-.471.287-.148.09-.458.211-.92.355-.462.143-.91.22-1.34.22-.431 0-.867-.06-1.307-.172a5.572 5.572 0 01-1.359-.569 5.692 5.692 0 01-1.26-.978c-.373-.386-.678-.88-.92-1.485A5.241 5.241 0 012 5.652c0-.704.117-1.35.354-1.924.238-.575.539-1.054.907-1.431a5.159 5.159 0 011.26-.947C5.409.86 6.302.614 7.204.614zM53.85.624c.17 0 .435.112.794.34l.012.01c.444.31.67.605.67.897-.001.17-.105.413-.315.722l-2.939 4.396v2.598c0 .21-.009.363-.022.47a1.098 1.098 0 01-.13.359.593.593 0 01-.367.287c-.17.054-.404.081-.696.081a2.42 2.42 0 01-.695-.08.597.597 0 01-.368-.292 1.176 1.176 0 01-.13-.368 4.018 4.018 0 01-.022-.484V6.99l-2.939-4.397c-.21-.31-.314-.547-.314-.722 0-.291.197-.57.596-.839.4-.269.687-.404.858-.404.17 0 .31.036.408.107.153.099.318.288.488.557l2.109 3.373 2.108-3.373c.17-.274.324-.453.45-.538a.774.774 0 01.444-.13zM27.557.723c.21 0 .363.008.47.021.104.014.225.06.36.131.246.126.368.48.368 1.063 0 .637-.167 1.009-.503 1.117-.153.054-.39.08-.709.08h-4.176V4.51h2.695c.207 0 .364.009.472.022.103.014.224.058.359.13.246.126.368.48.368 1.063 0 .636-.17 1.009-.516 1.117-.152.054-.39.08-.709.08h-2.669V8.29h4.19c.21 0 .363.01.47.023a1.1 1.1 0 01.36.13c.246.125.368.48.368 1.063 0 .637-.167 1.01-.503 1.117-.153.054-.39.08-.709.08h-5.388c-.637 0-1.01-.17-1.117-.515-.054-.144-.08-.378-.08-.696V1.92c0-.462.085-.776.26-.946.17-.166.498-.251.978-.251h5.36zM18.634.731c.264 0 .47.022.628.067.152.045.273.1.354.162.081.063.144.152.189.273.044.153.067.39.067.71v7.554c0 .21-.009.363-.022.47a1.098 1.098 0 01-.13.36c-.126.246-.48.367-1.064.367-.636 0-1.01-.165-1.117-.502-.054-.152-.08-.39-.08-.709V6.72h-3.607v2.777c0 .21-.01.363-.023.47a1.098 1.098 0 01-.13.36c-.125.246-.48.367-1.063.367-.637 0-1.009-.166-1.116-.502-.054-.152-.082-.39-.082-.709V1.93c0-.206.01-.363.023-.471a1.1 1.1 0 01.13-.36c.126-.246.48-.367 1.063-.367.637 0 1.009.166 1.13.502.045.153.068.39.068.71v2.776h3.607v-2.79c0-.206.009-.363.022-.471.014-.103.059-.225.13-.36a.595.595 0 01.369-.286c.17-.054.39-.08.654-.08zM32.401 3.49a.22.22 0 110 .44.22.22 0 010-.44zM33.164 3.49a.22.22 0 110 .44.22.22 0 010-.44zM33.9 3.468a.22.22 0 01.22.22c0 .12-.1.22-.22.22a.22.22 0 010-.44z"
fill={color}
/>
<Path
clipRule="evenodd"
d="M33.69 0c.798 0 1.574.292 2.328.87.363.283.663.665.896 1.145.238.48.355 1.018.355 1.605 0 1.027-.341 1.87-1.023 2.53.197.48.507 1.194.924 2.136.134.327.202.56.202.708 0 .346-.283.637-.844.87-.291.126-.524.194-.699.194a.707.707 0 01-.435-.13.98.98 0 01-.251-.265c-.09-.17-.445-.991-1.064-2.463l-.422.027h-1.713v1.539c0 .21-.009.363-.022.47-.014.104-.06.225-.131.36-.126.246-.48.368-1.063.368-.637 0-1.009-.167-1.117-.503-.053-.153-.08-.39-.08-.709V1.193c0-.206.008-.363.022-.47l.005.004c.013-.104.058-.224.13-.359.125-.247.48-.368 1.063-.368h2.939zm-.508 2.212a5.407 5.407 0 00-1 .09c-.27.072-.502.22-.668.417a1.033 1.033 0 00-.247.659v.614c0 .103.004.297.13.494h.004c.041.064.216.346.556.409.09.017.166.013.216.008l.026.17c.072.372.17.472.256.48.13.023.23-.156.418-.403.103.005.206.01.309.01.228 0 .453-.015.669-.042a7.38 7.38 0 00.332-.049c.529-.143.91-.57.91-1.077v-.614c0-.507-.386-.933-.91-1.076a5.415 5.415 0 00-1.001-.09z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'CherryStudioText';
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 = 'CherryStudio';
export const COMBINE_TEXT_MULTIPLE = 0.8;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#EA5E5D';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
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,21 @@
import React, { memo } from 'react';
import { Path, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
const Icon = memo<RNIconProps>(({ size = 24, style, ...rest }) => {
return (
<Svg height={size} style={style} viewBox="0 0 24 24" width={size} {...rest}>
<Path
clipRule="evenodd"
d="M20.998 10.949H24v3.102h-3v3.028h-1.487V20H18v-2.921h-1.487V20H15v-2.921H9V20H7.488v-2.921H6V20H4.487v-2.921H3V14.05H0V10.95h3V5h17.998v5.949zM6 10.949h1.488V8.102H6v2.847zm10.51 0H18V8.102h-1.49v2.847z"
fill="#D97757"
fillRule="evenodd"
/>
</Svg>
);
});
Icon.displayName = 'ClaudeCodeColor';
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,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 24 24"
width={size}
{...rest}
>
<Path
clipRule="evenodd"
d="M20.998 10.949H24v3.102h-3v3.028h-1.487V20H18v-2.921h-1.487V20H15v-2.921H9V20H7.488v-2.921H6V20H4.487v-2.921H3V14.05H0V10.95h3V5h17.998v5.949zM6 10.949h1.488V8.102H6v2.847zm10.51 0H18V8.102h-1.49v2.847z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'ClaudeCodeMono';
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 56 24"
width={size * 2.33} // 保持宽高比
{...rest}
>
<Path
clipRule="evenodd"
d="M8.786 14.088h.67v2.31H4.614v4.506h4.172v.785h.67V24h-6.19v-1.138h-.298V22.1h-.67V20.96H2v-5.758h.968v-1.9h5.818v.785zm0 7.875h.417v1.763H3.519v-.864h-.126v1.001h5.936v-2.037h-.543v.137zm0 .899h-5.14v.728h5.43V22.1h-.29v.762zm-6.362-.9h.544v-.136h-.417v-.865h-.127v1.002zm.253-.273h.291v-.728h-.29v.728zm6.109-6.429H3.944v5.644h.29v-4.916h4.842v-1.49h-.29v.762zm0-.898h.417v1.763H4.36v4.779h.126v-4.642H9.33v-2.037h-.543v.137zM17.5 14.088h.671v1.115h.298v.785h.67V22.1h-.968V24h-6.19v-1.138h-.297V22.1h-.671V20.96h-.298v-5.758h.969v-1.9H17.5v.785zm.97 2.174h.416v5.564h-.968v1.9h-5.684v-.864h-.126v1.001h5.936v-1.9h.969v-5.838h-.544v.137zm0 4.7h-.97v1.9h-5.14v.728h5.431v-1.9h.969v-5.291h-.29v4.562zm-7.33 1h.544v-.136h-.418v-.865h-.127v1.002zm.252-.273h.292v-.728h-.291v.728zm1.267-.785h.29v-4.916h3.576v-.728H12.66v5.644zm.417 0h.127v-4.642h3.322v-.137h-3.449v4.779zm.253 0h3.196v-4.505H13.33v4.505zm4.172-5.701h.29v-.705h-.29v.705zm0-.841h.417v.84h.126v-.977h-.543v.137zM26.216 14.088h.67v1.115h.298v.785h.67V22.1h-.968V24h-6.19v-1.138H20.4v-9.56h5.817v.786zm.968 2.174h.417v5.564h-.968v1.9H20.95v-.864h-.127v1.001h5.936v-1.9h.969v-5.838h-.544v.137zm0 4.7h-.968v1.9h-5.14v.728h5.43v-1.9h.969v-5.291h-.29v4.562zm-4.841-.058h.29v-4.916h2.607v-.728h-2.897v5.644zm.416 0h.127v-4.642h2.354v-.137h-2.48v4.779zm.254 0h2.227v-4.505h-2.227v4.505zm3.203-5.701h.29v-.705h-.29v.705zm0-.841h.417v.84h.127v-.977h-.544v.137zM35.9 14.088h.67v2.31h-4.842v.705h2.235v.786h.67v2.31h-2.905v.704H35.9v.786h.67V24H29.41v-1.138h-.297v-9.56H35.9v.786zm0 7.875h.416v1.763h-6.651v-.864h-.127v1.001h6.905v-2.037H35.9v.137zm0 .899H29.79v.728h6.399V22.1h-.29v.762zm-1.937-3.801h-2.905v1.843h.29v-1.115h2.905v-1.49h-.29v.762zm0-.899h.417v1.764h-2.905v.978h.126v-.841h2.905v-2.037h-.543v.136zM35.9 15.26h-4.842v1.843h.29v-1.115h4.842v-1.49h-.29v.762zm0-.898h.416v1.763h-4.841v.978h.126v-.841h4.842v-2.037H35.9v.137zM8.786 0v.786h.67v2.31H4.614v4.505h4.172v.786h.67v2.31h-6.19V9.56h-.298v-.762h-.67V7.66H2V1.9h.968V0h5.818zm0 8.66h.417v1.764H3.519V9.56h-.126v1.002h5.936V8.524h-.543v.137zm0 .9h-5.14v.727h5.43v-1.49h-.29v.762zm-6.362-.9h.544v-.136h-.417v-.865h-.127v1.002zm.253-.273h.291V7.66h-.29v.728zm6.109-6.429H3.944v5.643h.29V2.686h4.842v-1.49h-.29v.762zm0-.899h.417v1.764H4.36V7.6h.126V2.96H9.33V.923h-.543v.136zM12.66.786h.67V7.6h4.17v.786h.671v2.31h-7.158V9.56h-.298V0h1.944v.786zM17.5 8.66h.418v1.763h-6.652V9.56h-.127v1.002h6.905V8.524h-.543v.137zm0 .898h-6.107v.728h6.398v-1.49h-.29v.762zm-4.84-1.958h.29V1.196h-.29v6.405zm0-6.542h.416v6.542h.127V.923h-.544v.136zM25.248.786h.67V1.9h.298v.786h.67v8.012H24.57V9.559h-.298V6.897h-2.228v3.8h-2.316V9.56h-.298V1.9h.969V0h4.849v.786zm-3.457 9.638h-1.81V9.56h-.127v1.002h2.064v-3.8h2.354v-.137h-2.48v3.8zm4.425-7.464h.417v7.464h-1.81V9.56h-.127v1.002h2.063V2.823h-.543v.137zm-4.842 6.6h-1.266v.727h1.556v-3.8h2.608v-.728h-2.898v3.8zm4.842 0h-1.267v.727h1.557v-7.19h-.29v6.462zM21.374 3.8h.29V2.687h2.608v-.728h-2.898v1.843zm.417 0h.127v-.84h2.354v-.137h-2.48V3.8zm.253 0h2.228v-.704h-2.228v.705zm3.204-1.9h.29v-.704h-.29V1.9zm0-.84h.416v.84h.127V.923h-.543v.136zM30.09.786h.67V7.6h3.196V0H35.9v.786h.67v8.011H35.6v1.9h-6.19V9.56h-.297v-.762h-.671V7.66h-.298V0h1.945v.786zm5.81.273h.416v7.465h-.968v1.9h-5.683V9.56h-.127v1.002h5.937v-1.9h.968V.923H35.9v.136zm0 6.6h-.969v1.9h-5.14v.728h5.43v-1.9h.969v-7.19h-.29v6.462zm-7.33 1.002h.544v-.137h-.418v-.865h-.126v1.002zm.253-.274h.29V7.66h-.29v.728zm1.267-.786h.29V1.196h-.29v6.405zm0-6.542h.416v6.542h.127V.923h-.543v.136zM43.647.786h.67V1.9h.298v.786h.67v6.111h-.969v1.9h-6.19V9.56h-.297V0h5.818v.786zm.968 2.174h.417v5.564h-.969v1.9H38.38V9.56h-.127v1.002h5.937v-1.9h.968V2.823h-.543v.137zm0 4.7h-.968v1.9h-5.14v.727h5.43v-1.9h.968v-5.29h-.29v4.562zM39.773 7.6h.29V2.686h2.608v-.728h-2.898v5.643zm.417 0h.127V2.96h2.354v-.137H40.19V7.6zm.253 0h2.228V3.096h-2.228v4.505zm3.204-5.7h.29v-.705h-.29V1.9zm0-.842h.416V1.9h.127V.923h-.543v.136zM53.33.786H54v2.31h-4.842v.705h2.235v.785h.67v2.311h-2.905v.704h4.172v.786H54v2.31h-7.158V9.56h-.298V0h6.786v.786zm0 7.875h.417v1.763h-6.652V9.56h-.127v1.002h6.905V8.524h-.543v.137zm0 .898h-6.108v.728h6.398v-1.49h-.29v.762zm-1.937-3.8h-2.905V7.6h.29V6.487h2.906v-1.49h-.29v.762zm0-.899h.417v1.764h-2.905V7.6h.127v-.84h2.905V4.722h-.544v.137zm1.937-2.902h-4.842v1.843h.29V2.686h4.842v-1.49h-.29v.762zm0-.899h.417v1.764h-4.842V3.8h.127V2.96h4.841V.923h-.543v.136z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'ClaudeCodeText';
export default Icon;
@@ -0,0 +1,26 @@
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;
colorGradient: string;
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 = 'Antigravity';
export const COMBINE_TEXT_MULTIPLE = 0.75;
export const COMBINE_SPACE_MULTIPLE = 0.3;
export const COLOR_PRIMARY = '#D97757';
// Avatar constants
export const AVATAR_BACKGROUND = '#09090B';
export const AVATAR_COLOR = COLOR_PRIMARY;
export const AVATAR_ICON_MULTIPLE = 0.7;
@@ -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,34 @@
import React, { memo } from 'react';
import { Defs, LinearGradient, Path, Stop, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
import { useFillId } from '@/hooks/useFillId';
import { TITLE } from '../style';
const Icon = memo<RNIconProps>(({ size = 24, style, ...rest }) => {
const { id, fill } = useFillId(TITLE);
return (
<Svg height={size} style={style} viewBox="0 0 24 24" width={size} {...rest}>
<Path
d="M19.503 0H4.496A4.496 4.496 0 000 4.496v15.007A4.496 4.496 0 004.496 24h15.007A4.496 4.496 0 0024 19.503V4.496A4.496 4.496 0 0019.503 0z"
fill="#fff"
/>
<Path
d="M9.064 3.344a4.578 4.578 0 012.285-.312c1 .115 1.891.54 2.673 1.275.01.01.024.017.037.021a.09.09 0 00.043 0 4.55 4.55 0 013.046.275l.047.022.116.057a4.581 4.581 0 012.188 2.399c.209.51.313 1.041.315 1.595a4.24 4.24 0 01-.134 1.223.123.123 0 00.03.115c.594.607.988 1.33 1.183 2.17.289 1.425-.007 2.71-.887 3.854l-.136.166a4.548 4.548 0 01-2.201 1.388.123.123 0 00-.081.076c-.191.551-.383 1.023-.74 1.494-.9 1.187-2.222 1.846-3.711 1.838-1.187-.006-2.239-.44-3.157-1.302a.107.107 0 00-.105-.024c-.388.125-.78.143-1.204.138a4.441 4.441 0 01-1.945-.466 4.544 4.544 0 01-1.61-1.335c-.152-.202-.303-.392-.414-.617a5.81 5.81 0 01-.37-.961 4.582 4.582 0 01-.014-2.298.124.124 0 00.006-.056.085.085 0 00-.027-.048 4.467 4.467 0 01-1.034-1.651 3.896 3.896 0 01-.251-1.192 5.189 5.189 0 01.141-1.6c.337-1.112.982-1.985 1.933-2.618.212-.141.413-.251.601-.33.215-.089.43-.164.646-.227a.098.098 0 00.065-.066 4.51 4.51 0 01.829-1.615 4.535 4.535 0 011.837-1.388zm3.482 10.565a.637.637 0 000 1.272h3.636a.637.637 0 100-1.272h-3.636zM8.462 9.23a.637.637 0 00-1.106.631l1.272 2.224-1.266 2.136a.636.636 0 101.095.649l1.454-2.455a.636.636 0 00.005-.64L8.462 9.23z"
fill={fill}
/>
<Defs>
<LinearGradient gradientUnits="userSpaceOnUse" id={id} x1="12" x2="12" y1="3" y2="21">
<Stop stopColor="#B1A7FF" />
<Stop offset="5%" stopColor="#7A9DFF" />
<Stop offset="100%" stopColor="#3941FF" />
</LinearGradient>
</Defs>
</Svg>
);
});
Icon.displayName = 'CodexColor';
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,32 @@
import React, { memo } from 'react';
import { Defs, LinearGradient, Path, Stop, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
import { useFillId } from '@/hooks/useFillId';
import { TITLE } from '../style';
const Icon = memo<RNIconProps>(({ size = 24, style, ...rest }) => {
const { id, fill } = useFillId(TITLE);
return (
<Svg height={size} style={style} viewBox="0 0 24 24" width={size} {...rest}>
<Path
clipRule="evenodd"
d="M8.086.457a6.105 6.105 0 013.046-.415c1.333.153 2.521.72 3.564 1.7a.117.117 0 00.107.029c1.408-.346 2.762-.224 4.061.366l.063.03.154.076c1.357.703 2.33 1.77 2.918 3.198.278.679.418 1.388.421 2.126a5.655 5.655 0 01-.18 1.631.167.167 0 00.04.155 5.982 5.982 0 011.578 2.891c.385 1.901-.01 3.615-1.183 5.14l-.182.22a6.063 6.063 0 01-2.934 1.851.162.162 0 00-.108.102c-.255.736-.511 1.364-.987 1.992-1.199 1.582-2.962 2.462-4.948 2.451-1.583-.008-2.986-.587-4.21-1.736a.145.145 0 00-.14-.032c-.518.167-1.04.191-1.604.185a5.924 5.924 0 01-2.595-.622 6.058 6.058 0 01-2.146-1.781c-.203-.269-.404-.522-.551-.821a7.74 7.74 0 01-.495-1.283 6.11 6.11 0 01-.017-3.064.166.166 0 00.008-.074.115.115 0 00-.037-.064 5.958 5.958 0 01-1.38-2.202 5.196 5.196 0 01-.333-1.589 6.915 6.915 0 01.188-2.132c.45-1.484 1.309-2.648 2.577-3.493.282-.188.55-.334.802-.438.286-.12.573-.22.861-.304a.129.129 0 00.087-.087A6.016 6.016 0 015.635 2.31C6.315 1.464 7.132.846 8.086.457zm-.804 7.85a.848.848 0 00-1.473.842l1.694 2.965-1.688 2.848a.849.849 0 001.46.864l1.94-3.272a.849.849 0 00.007-.854l-1.94-3.393zm5.446 6.24a.849.849 0 000 1.695h4.848a.849.849 0 000-1.696h-4.848z"
fill={fill}
fillRule="evenodd"
/>
<Defs>
<LinearGradient gradientUnits="userSpaceOnUse" id={id} x1="12" x2="12" y1="0" y2="24">
<Stop stopColor="#B1A7FF" />
<Stop offset="5%" stopColor="#7A9DFF" />
<Stop offset="100%" stopColor="#3941FF" />
</LinearGradient>
</Defs>
</Svg>
);
});
Icon.displayName = 'CodexInner';
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 24 24"
width={size}
{...rest}
>
<Path
clipRule="evenodd"
d="M8.086.457a6.105 6.105 0 013.046-.415c1.333.153 2.521.72 3.564 1.7a.117.117 0 00.107.029c1.408-.346 2.762-.224 4.061.366l.063.03.154.076c1.357.703 2.33 1.77 2.918 3.198.278.679.418 1.388.421 2.126a5.655 5.655 0 01-.18 1.631.167.167 0 00.04.155 5.982 5.982 0 011.578 2.891c.385 1.901-.01 3.615-1.183 5.14l-.182.22a6.063 6.063 0 01-2.934 1.851.162.162 0 00-.108.102c-.255.736-.511 1.364-.987 1.992-1.199 1.582-2.962 2.462-4.948 2.451-1.583-.008-2.986-.587-4.21-1.736a.145.145 0 00-.14-.032c-.518.167-1.04.191-1.604.185a5.924 5.924 0 01-2.595-.622 6.058 6.058 0 01-2.146-1.781c-.203-.269-.404-.522-.551-.821a7.74 7.74 0 01-.495-1.283 6.11 6.11 0 01-.017-3.064.166.166 0 00.008-.074.115.115 0 00-.037-.064 5.958 5.958 0 01-1.38-2.202 5.196 5.196 0 01-.333-1.589 6.915 6.915 0 01.188-2.132c.45-1.484 1.309-2.648 2.577-3.493.282-.188.55-.334.802-.438.286-.12.573-.22.861-.304a.129.129 0 00.087-.087A6.016 6.016 0 015.635 2.31C6.315 1.464 7.132.846 8.086.457zm-.804 7.85a.848.848 0 00-1.473.842l1.694 2.965-1.688 2.848a.849.849 0 001.46.864l1.94-3.272a.849.849 0 00.007-.854l-1.94-3.393zm5.446 6.24a.849.849 0 000 1.695h4.848a.849.849 0 000-1.696h-4.848z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'CodexMono';
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 91 24"
width={size * 3.79} // 保持宽高比
{...rest}
>
<Path
d="M79.915 14.964l-5.53-7.548h3.33l3.88 5.256 3.88-5.256h3.24l-5.5 7.486 5.683 7.792h-3.361l-4.003-5.5-4.064 5.5H74.2l5.715-7.73zM66.368 23c-1.345 0-2.567-.326-3.667-.978-1.08-.652-1.935-1.579-2.567-2.78-.631-1.203-.947-2.608-.947-4.217 0-1.59.316-2.974.947-4.156.652-1.202 1.518-2.129 2.597-2.78 1.08-.652 2.272-.978 3.575-.978 1.813 0 3.33.55 4.553 1.65 1.222 1.1 1.956 2.597 2.2 4.491.082.693.112 1.477.092 2.353H62.09c.06 1.548.489 2.76 1.283 3.636.815.876 1.793 1.314 2.933 1.314h.184c.855 0 1.599-.224 2.23-.672.632-.448 1.06-1.06 1.284-1.833h2.933a6.147 6.147 0 01-2.322 3.575C69.433 22.54 68.018 23 66.368 23zm3.819-9.687c-.082-1.16-.469-2.077-1.161-2.75-.693-.692-1.558-1.038-2.597-1.038h-.214c-.978 0-1.844.315-2.597.947-.734.611-1.212 1.558-1.437 2.841h8.006zM47.834 23c-1.324 0-2.516-.326-3.575-.978-1.039-.652-1.854-1.579-2.444-2.78-.591-1.202-.887-2.598-.887-4.187 0-1.588.306-2.984.917-4.186.611-1.201 1.446-2.128 2.506-2.78 1.08-.652 2.281-.978 3.605-.978 1.08 0 2.047.224 2.903.672.855.449 1.497 1.019 1.925 1.711V1.306h2.903v21.388h-2.903v-2.108c-.408.672-1.06 1.242-1.956 1.711-.896.469-1.894.703-2.994.703zm.58-2.475c.856 0 1.62-.234 2.292-.703.672-.468 1.192-1.11 1.558-1.925.387-.835.58-1.782.58-2.841 0-1.06-.193-1.997-.58-2.812-.366-.835-.886-1.487-1.558-1.955a3.911 3.911 0 00-2.292-.703h-.183c-1.304 0-2.363.51-3.178 1.528-.794 1.018-1.191 2.332-1.191 3.941 0 1.61.397 2.924 1.191 3.942.815 1.019 1.874 1.528 3.178 1.528h.183zM31.022 23c-1.406 0-2.679-.337-3.82-1.009a7.367 7.367 0 01-2.688-2.841c-.652-1.223-.978-2.587-.978-4.095 0-1.507.326-2.862.978-4.064.651-1.222 1.548-2.17 2.688-2.841 1.141-.693 2.414-1.04 3.82-1.04 1.405 0 2.668.347 3.789 1.04 1.14.672 2.037 1.62 2.688 2.841.652 1.202.978 2.557.978 4.064 0 1.508-.326 2.872-.977 4.095a7.367 7.367 0 01-2.69 2.841C33.69 22.663 32.428 23 31.023 23zm.06-2.476c.857 0 1.62-.224 2.293-.672.672-.468 1.201-1.11 1.589-1.925.386-.835.58-1.792.58-2.872 0-1.08-.194-2.027-.58-2.841-.388-.836-.917-1.477-1.59-1.925a3.911 3.911 0 00-2.291-.703H30.9c-1.304 0-2.373.51-3.209 1.528-.814.998-1.222 2.312-1.222 3.941 0 1.63.407 2.954 1.222 3.972.835.998 1.905 1.497 3.209 1.497h.183zM12.053 23c-2.037 0-3.82-.469-5.348-1.406-1.507-.957-2.668-2.271-3.483-3.941S2 14.098 2 12c0-2.098.407-3.982 1.222-5.653.835-1.67 2.017-2.974 3.545-3.91C8.294 1.478 10.057 1 12.053 1c1.609 0 3.055.316 4.338.947 1.304.611 2.363 1.477 3.178 2.597.815 1.1 1.304 2.374 1.467 3.82h-3.117c-.244-1.365-.876-2.465-1.894-3.3-1.019-.856-2.302-1.283-3.85-1.283h-.245c-1.385 0-2.597.356-3.636 1.069-1.039.713-1.833 1.69-2.383 2.933-.55 1.243-.825 2.648-.825 4.217 0 1.568.275 2.974.825 4.216.55 1.243 1.344 2.22 2.383 2.934 1.04.713 2.251 1.07 3.636 1.07h.245c1.548 0 2.831-.418 3.85-1.254 1.039-.855 1.68-1.976 1.925-3.36h3.086c-.184 1.446-.683 2.729-1.497 3.85-.795 1.12-1.844 1.996-3.148 2.627-1.303.611-2.75.917-4.338.917z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'CodexText';
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 = 'Codex';
export const COMBINE_TEXT_MULTIPLE = 0.8;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#fff';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
export const AVATAR_ICON_MULTIPLE = 0.7;
@@ -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,19 @@
import React, { memo } from 'react';
import { Path, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
const Icon = memo<RNIconProps>(({ size = 24, style, ...rest }) => {
return (
<Svg height={size} style={style} viewBox="0 0 24 24" width={size} {...rest}>
<Path
d="M24 9.333C24 18.666 20 24 9.333 24H8v-8h1.333C14 16 16 14 16 9.333V8h8v1.333zM8 16H0V8h8v8zM16 8H8V0h8v8z"
fill="#47E054"
/>
</Svg>
);
});
Icon.displayName = 'JunieColor';
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,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="M24 9.333C24 18.666 20 24 9.333 24H8v-8h1.333C14 16 16 14 16 9.333V8h8v1.333zM8 16H0V8h8v8zM16 8H8V0h8v8z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'JunieMono';
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 78 24"
width={size * 3.25} // 保持宽高比
{...rest}
>
<Path
d="M2 22.63V19.09h4.064c.7 0 1.268-.216 1.7-.649.433-.432.65-.999.65-1.699V1H12.2v16.176c0 1.07-.237 2.023-.711 2.858a4.792 4.792 0 01-1.978 1.915c-.856.454-1.834.68-2.937.68H2zM27.1 6.808h3.677v15.82h-3.585v-2.472c-.495.927-1.17 1.633-2.025 2.117S23.344 23 22.262 23c-1.133 0-2.133-.247-2.998-.742-.866-.494-1.54-1.21-2.025-2.147-.484-.937-.726-2.055-.726-3.353V6.81h3.662v9.378c0 1.143.29 2.029.866 2.657.587.618 1.406.927 2.457.927.7 0 1.324-.16 1.87-.479a3.358 3.358 0 001.268-1.36c.309-.576.463-1.235.463-1.977V6.81zm16.48-.37c1.134 0 2.133.246 2.999.74.875.495 1.555 1.211 2.039 2.148.485.938.727 2.055.727 3.353v9.95h-3.678V13.25c0-1.143-.294-2.024-.881-2.641-.577-.629-1.391-.943-2.442-.943-.7 0-1.324.165-1.87.495a3.36 3.36 0 00-1.283 1.344c-.299.576-.448 1.236-.448 1.977v9.146H35.08V6.81h3.57v2.472c.495-.927 1.17-1.633 2.025-2.117s1.824-.726 2.906-.726zm13.375 16.19h-3.678V6.81h3.678v15.82zM53.107 4.492V1h3.987v3.492h-3.987zM76 15.708H63.93c.104.824.356 1.55.758 2.178a4.3 4.3 0 001.545 1.468c.629.34 1.33.51 2.102.51.907 0 1.674-.134 2.303-.402.628-.268 1.112-.654 1.452-1.159h3.632c-.165.773-.572 1.52-1.221 2.24-.65.722-1.514 1.314-2.596 1.777-1.082.453-2.318.68-3.71.68-1.544 0-2.935-.355-4.172-1.066a7.541 7.541 0 01-2.874-2.95c-.69-1.268-1.035-2.694-1.035-4.28 0-1.566.35-2.977 1.05-4.234a7.65 7.65 0 012.89-2.95c1.236-.721 2.617-1.082 4.142-1.082 1.566 0 2.936.356 4.11 1.066a7.14 7.14 0 012.736 2.951c.639 1.246.958 2.662.958 4.249v1.004zm-7.789-6.226c-1.112 0-2.05.33-2.812.989-.752.659-1.231 1.555-1.438 2.688h8.268c-.185-1.133-.623-2.03-1.313-2.689-.68-.659-1.582-.988-2.705-.988z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'JunieText';
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 = 'Junie';
export const COMBINE_TEXT_MULTIPLE = 0.8;
export const COMBINE_SPACE_MULTIPLE = 0.3;
export const COLOR_PRIMARY = '#47E054';
// Avatar constants
export const AVATAR_BACKGROUND = '#000';
export const AVATAR_COLOR = COLOR_PRIMARY;
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,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="M16.4 21.016h3.667V24h-4.61l-1.99-2.025v-4.689H16.4v3.73zm6.6 0h-2.933v-3.73H16.4v-2.984h4.61L23 16.327v4.689zm-12.467-4.35H7.6v-2.984h2.933v2.984zM1 13.682h2.933v6.714h6.6v2.984H2.99L1 21.355v-7.673zm22-5.968v2.984h-9.533V7.714h3.278v-3.73h-3.278V1h4.22l1.991 2.025v4.689H23zM3.933 4.357H7.6l2.933 2.984v3.357H7.6V7.341H3.933v3.357H1V1h2.933v3.357zm6.6 0H7.6V1h2.933v3.357z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'KiloCodeInner';
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="M0 0v24h24V0H0zm22.222 22.222H1.778V1.778h20.444v20.444zm-7.555-4.964h2.222v1.778h-2.794L12.89 17.83v-2.794h1.778v2.222zm4 0h-1.778v-2.222h-2.222v-1.778h2.793l1.207 1.207v2.793zm-7.556-2.591H9.333v-1.778h1.778v1.778zm-5.778-1.778h1.778v4h4v1.778H6.54L5.333 17.46V12.89zm13.334-3.556v1.778h-5.778V9.333h1.987V7.111h-1.987V5.333h2.558l1.206 1.207v2.793h2.014zm-11.556-2h2.222l1.778 1.778v2H9.333v-2H7.111v2H5.333V5.333h1.778v2zm4 0H9.333v-2h1.778v2z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'KiloCodeMono';
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 147 24"
width={size * 6.13} // 保持宽高比
{...rest}
>
<Path
d="M138.579 21.999c-1.289 0-2.413-.249-3.371-.746-.959-.498-1.705-1.189-2.239-2.073-.516-.903-.774-1.953-.774-3.15v-3.815c0-1.197.258-2.238.774-3.123a5.467 5.467 0 012.239-2.1c.958-.498 2.082-.746 3.371-.746 1.272 0 2.377.248 3.317.746.958.497 1.695 1.197 2.211 2.1.534.885.801 1.926.801 3.123v2.736h-9.369v1.078c0 1.069.258 1.88.774 2.432.516.535 1.281.802 2.294.802.774 0 1.4-.13 1.879-.387.479-.277.783-.673.912-1.189h3.4c-.258 1.308-.958 2.359-2.101 3.151-1.124.774-2.496 1.16-4.118 1.16zm2.985-8.982v-.83c0-1.05-.249-1.851-.746-2.404-.498-.571-1.244-.857-2.239-.857-.995 0-1.75.286-2.266.857s-.774 1.382-.774 2.432v.58l6.274-.055-.249.277zM120.958 22c-1.511 0-2.736-.525-3.676-1.576-.921-1.05-1.382-2.46-1.382-4.228v-4.118c0-1.787.461-3.206 1.382-4.256.921-1.05 2.146-1.575 3.676-1.575 1.253 0 2.247.359 2.984 1.077.737.7 1.106 1.668 1.106 2.902l-.774-.801h.802l-.111-3.62V1.547h3.455v20.176h-3.372v-2.902h-.774l.774-.802c0 1.235-.369 2.211-1.106 2.93-.737.7-1.731 1.05-2.984 1.05zm1.216-2.985c.884 0 1.566-.258 2.045-.774.497-.534.746-1.271.746-2.21v-3.815c0-.94-.249-1.667-.746-2.183-.479-.534-1.161-.802-2.045-.802-.885 0-1.576.258-2.073.774-.498.516-.746 1.253-.746 2.211v3.814c0 .958.248 1.695.746 2.211.497.516 1.188.774 2.073.774zM105.961 21.972c-1.289 0-2.413-.24-3.371-.719a5.573 5.573 0 01-2.211-2.073c-.516-.902-.774-1.962-.774-3.178v-3.758c0-1.216.258-2.267.774-3.151a5.327 5.327 0 012.211-2.073c.958-.497 2.082-.746 3.371-.746 1.309 0 2.433.249 3.372.746a5.155 5.155 0 012.184 2.073c.534.884.801 1.925.801 3.123v3.786c0 1.216-.267 2.276-.801 3.178a5.386 5.386 0 01-2.184 2.073c-.939.48-2.063.719-3.372.719zm0-3.013c.922 0 1.631-.248 2.129-.746.515-.516.773-1.253.773-2.21v-3.76c0-.976-.258-1.713-.773-2.21-.498-.498-1.207-.747-2.129-.747-.902 0-1.612.25-2.128.747-.515.497-.773 1.234-.773 2.21v3.76c0 .957.258 1.694.773 2.21.516.498 1.226.746 2.128.746zM89.777 22c-1.29 0-2.423-.24-3.4-.719-.958-.497-1.704-1.188-2.238-2.072-.516-.903-.774-1.963-.774-3.179V7.242c0-1.235.258-2.294.774-3.179a5.347 5.347 0 012.239-2.045c.976-.497 2.11-.746 3.399-.746 1.308 0 2.432.249 3.372.746a5.347 5.347 0 012.238 2.045c.535.885.802 1.944.802 3.179h-3.483c0-.958-.258-1.686-.773-2.184-.498-.497-1.216-.746-2.156-.746-.94 0-1.668.249-2.183.746-.516.498-.774 1.216-.774 2.156v8.816c0 .94.258 1.668.774 2.183.516.498 1.243.747 2.183.747.94 0 1.658-.249 2.156-.747.515-.515.773-1.243.773-2.183h3.483c0 1.198-.267 2.248-.802 3.15a5.473 5.473 0 01-2.238 2.101c-.94.48-2.064.719-3.372.719zM57.076 21.972c-1.29 0-2.413-.24-3.372-.719a5.576 5.576 0 01-2.21-2.073c-.517-.902-.774-1.962-.774-3.178v-3.758c0-1.216.258-2.267.773-3.151a5.33 5.33 0 012.211-2.073c.959-.497 2.082-.746 3.372-.746 1.308 0 2.432.249 3.372.746a5.155 5.155 0 012.183 2.073c.535.884.802 1.925.802 3.123v3.786c0 1.216-.267 2.276-.802 3.178a5.385 5.385 0 01-2.183 2.073c-.94.48-2.064.719-3.372.719zm0-3.013c.921 0 1.63-.248 2.128-.746.516-.516.774-1.253.774-2.21v-3.76c0-.976-.258-1.713-.774-2.21-.497-.498-1.207-.747-2.128-.747-.903 0-1.612.25-2.128.747s-.774 1.234-.774 2.21v3.76c0 .957.258 1.694.774 2.21.516.498 1.225.746 2.128.746zM43.102 21.724c-.994 0-1.87-.203-2.625-.609a4.446 4.446 0 01-1.741-1.713c-.424-.756-.636-1.621-.636-2.598V4.671h-4.864V1.548h8.319v15.256c0 .553.157.995.47 1.327.331.313.773.47 1.326.47h4.588v3.123h-4.837zM18.295 21.723v-3.15h5.306V9.644h-4.615V6.522h7.932v12.05h4.698v3.15h-13.32zM24.983 3.98c-.7 0-1.253-.175-1.658-.525-.405-.369-.608-.857-.608-1.465 0-.608.203-1.087.608-1.437C23.73.184 24.283 0 24.983 0s1.253.184 1.659.553c.405.35.608.829.608 1.437 0 .608-.203 1.096-.608 1.465-.406.35-.959.525-1.659.525zM2 21.724V1.548h3.455v8.153h2.404l3.786-8.153h3.759l-4.505 9.673 4.726 10.503h-3.841l-3.98-8.872h-2.35v8.872H2z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'KiloCodeText';
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 = 'Kilo Code';
export const COMBINE_TEXT_MULTIPLE = 0.75;
export const COMBINE_SPACE_MULTIPLE = 0.4;
export const COLOR_PRIMARY = '#F8F676';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#1A1A18';
export const AVATAR_ICON_MULTIPLE = 0.7;
@@ -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,22 @@
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';
export type CombineProps = Omit<RNIconCombineProps, 'Icon' | 'Text'>;
const Combine = memo<CombineProps>(({ ...rest }) => {
return (
<RNIconCombine
Text={Text as any}
aria-label={TITLE}
spaceMultiple={COMBINE_SPACE_MULTIPLE}
textMultiple={COMBINE_TEXT_MULTIPLE}
{...rest}
/>
);
});
export default Combine;
@@ -0,0 +1,24 @@
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="M16 6H8v12h8V6zm4 16H4V2h16v20z" fill={color} />
</Svg>
);
});
Icon.displayName = 'OpenCodeMono';
export default Icon;
@@ -0,0 +1,64 @@
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 138 24"
width={size * 5.75} // 保持宽高比
{...rest}
>
<Path d="M12.429 17.143H5.57v-6.857h6.858v6.857z" fill={color} fillOpacity=".25" />
<Path
d="M12.428 6.857H5.571v10.286h6.857V6.857zm3.43 13.715H2.142V3.429h13.714v17.143z"
fill={color}
fillOpacity=".75"
/>
<Path d="M29.571 17.143h-6.857v-6.857h6.857v6.857z" fill={color} fillOpacity=".25" />
<Path
d="M22.714 17.143h6.858V6.857h-6.858v10.286zM33 20.572H22.714V24h-3.428V3.43H33v17.143z"
fill={color}
fillOpacity=".75"
/>
<Path d="M50.143 13.714v3.429H39.857v-3.429h10.286z" fill={color} fillOpacity=".25" />
<Path
d="M50.143 13.714H39.857v3.429h10.286v3.429H36.429V3.429h13.714v10.285zm-10.286-3.428h6.857V6.857h-6.857v3.429z"
fill={color}
fillOpacity=".75"
/>
<Path d="M63.857 20.571H57V10.286h6.857V20.57z" fill={color} fillOpacity=".25" />
<Path
d="M63.857 6.857H57v13.715h-3.429V3.429h10.286v3.428zm3.429 13.715h-3.429V6.857h3.429v13.715z"
fill={color}
fillOpacity=".75"
/>
<Path d="M84.428 17.143H74.144v-6.857h10.285v6.857z" fill={color} fillOpacity=".25" />
<Path d="M84.428 6.857H74.144v10.286h10.285v3.429H70.715V3.429H84.43v3.428z" fill={color} />
<Path d="M98.143 17.143h-6.857v-6.857h6.857v6.857z" fill={color} fillOpacity=".25" />
<Path
d="M98.143 6.857h-6.857v10.286h6.857V6.857zm3.428 13.715H87.857V3.429h13.714v17.143z"
fill={color}
/>
<Path d="M115.286 17.143h-6.857v-6.857h6.857v6.857z" fill={color} fillOpacity=".25" />
<Path
d="M115.286 6.857h-6.857v10.286h6.857V6.857zm3.428 13.714H105V3.43h10.286V0h3.428v20.571z"
fill={color}
/>
<Path d="M135.857 13.714v3.429h-10.286v-3.429h10.286z" fill={color} fillOpacity=".25" />
<Path
d="M125.571 6.857v3.429h6.858V6.857h-6.858zm10.286 6.857h-10.286v3.429h10.286v3.429h-13.714V3.429h13.714v10.285z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'OpenCodeText';
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 = 'opencode';
export const COMBINE_TEXT_MULTIPLE = 0.6;
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.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 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,29 @@
import React, { memo } from 'react';
import { Path, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
const Icon = memo<RNIconProps>(({ size = 24, style, ...rest }) => {
return (
<Svg height={size} style={style} viewBox="0 0 24 24" width={size} {...rest}>
<Path
d="M4.75 6.313c.743 0 1.083.357 1.083 1.94 0-1.374.449-1.551.993-1.552.544 0 .9.455.84 1.803-.074 1.719-.235 2.57-.297 3.755-.195 3.751.477 2.62.552 2.432.185-.467.756-1.56 1.559-2.193 1.003-.792 1.504.2 1.348.475-.178.308-.978 1.533-1.348 2.775-.296.994-1.003 2.004-1.56 2.457-1.136.925-3.832 1.004-5.364.317C1.023 17.835.722 16.321.6 15.748c-.211-.99 0-2.07 0-2.59 0-.58-.158-2.335-.21-2.936-.073-.84.166-1.214.694-1.25.406-.026.943.225.943 1.086V8.267c0-.714.614-.98.92-.98.307 0 .903.083.904.98V7.37c0-.528.278-1.056.898-1.057zM19.25 6.313c.62 0 .899.53.899 1.057v.897c0-.896.596-.98.903-.98.306 0 .92.266.92.98v1.791c0-.861.539-1.112.944-1.085.529.035.768.41.695 1.25-.052.6-.212 2.355-.212 2.935 0 .52.212 1.6 0 2.59-.122.573-.423 2.087-1.955 2.774-1.533.687-4.227.608-5.364-.317-.557-.453-1.263-1.463-1.56-2.457-.37-1.242-1.17-2.467-1.347-2.775-.157-.275.344-1.268 1.348-.475.803.634 1.374 1.726 1.559 2.193.075.189.745 1.32.55-2.432-.062-1.186-.221-2.036-.296-3.755-.06-1.348.296-1.802.84-1.803.544 0 .994.177.994 1.553 0-1.583.338-1.94 1.082-1.94z"
fill="#FFFF8B"
/>
<Path
clipRule="evenodd"
d="M4.75 5.937c.212 0 .43.025.63.11.21.09.382.238.51.445.022.035.04.073.059.112.274-.243.611-.28.877-.28.19 0 .382.04.56.144.177.104.317.26.42.453.196.372.267.905.237 1.6-.038.869-.098 1.519-.155 2.098-.058.58-.112 1.078-.143 1.66-.047.908-.041 1.513-.009 1.907.282-.572.807-1.428 1.51-1.983.29-.23.58-.358.862-.379.287-.022.532.07.716.217.178.141.296.33.357.51.054.158.093.403-.027.61-.193.336-.96 1.507-1.314 2.695-.316 1.06-1.062 2.137-1.682 2.641-.66.538-1.715.797-2.753.848-1.048.051-2.168-.105-3.003-.48C.68 18.095.352 16.39.232 15.828c-.116-.544-.114-1.102-.087-1.573.014-.236.035-.457.05-.644.018-.193.029-.34.029-.452 0-.558-.156-2.288-.21-2.902-.038-.446-.004-.845.17-1.148.193-.336.515-.487.875-.51.184-.013.393.016.592.104v-.435c0-.48.213-.83.485-1.05A1.352 1.352 0 013.51 7.01a1.48 1.48 0 01.255-.591c.216-.291.552-.483.985-.483zm2.076 1.141c-.24 0-.342.041-.412.125-.091.11-.205.383-.205 1.05l-.001.017v.001l-.002.059c-.006.28-.037.91-.073 1.613l-.006.093-.117 2.555-.313.041-1.796.24-.002-.002-2.064.329-.024-.415-.16-2.704V10.06c0-.35-.106-.516-.195-.597a.473.473 0 00-.347-.114c-.168.012-.23.065-.271.136-.06.102-.108.312-.074.707.051.585.213 2.366.213 2.967 0 .15-.015.331-.03.517-.018.192-.037.4-.05.623-.025.445-.023.924.072 1.371.124.582.4 1.908 1.742 2.51.697.312 1.692.46 2.658.413.976-.048 1.837-.291 2.314-.679.494-.402 1.16-1.347 1.436-2.273.37-1.24 1.147-2.462 1.356-2.813-.002-.008-.002-.02-.007-.034a.364.364 0 00-.113-.163.26.26 0 00-.19-.056c-.09.007-.241.053-.452.219-.728.575-1.268 1.597-1.442 2.037-.032.079-.111.23-.223.348a.62.62 0 01-.297.181.493.493 0 01-.481-.15.903.903 0 01-.194-.383 3.145 3.145 0 01-.088-.545c-.039-.444-.043-1.096.006-2.041.032-.604.088-1.124.145-1.696.056-.572.114-1.207.151-2.056.029-.654-.049-1.023-.15-1.215a.369.369 0 00-.134-.155.348.348 0 00-.18-.04zm-3.878.585a.61.61 0 00-.337.139.562.562 0 00-.207.465v1.791l.133 2.267.937-.15V8.268c0-.356-.112-.472-.177-.52-.09-.063-.219-.084-.349-.084zM4.75 6.69a.437.437 0 00-.38.179.856.856 0 00-.142.501v4.698l1.057-.14c.023-.561.055-1.231.087-1.848l.085-1.843c-.002-.778-.09-1.161-.207-1.349a.345.345 0 00-.165-.147.866.866 0 00-.335-.05zM19.252 5.937c.431 0 .767.192.983.483.131.177.213.382.255.591a1.354 1.354 0 011.376.205c.271.222.483.571.483 1.051v.435c.199-.088.408-.117.593-.105.36.024.68.175.874.511.174.303.209.702.17 1.147-.053.615-.21 2.345-.21 2.903 0 .111.012.26.028.452.017.187.037.408.05.644.028.471.03 1.029-.086 1.573-.12.562-.448 2.267-2.17 3.039-.835.374-1.955.53-3.003.479-1.038-.051-2.093-.31-2.753-.848-.62-.504-1.366-1.58-1.682-2.641-.354-1.187-1.119-2.358-1.313-2.695-.12-.207-.081-.452-.027-.61.06-.18.179-.369.357-.51.184-.146.428-.239.716-.217.28.021.57.149.861.379.703.554 1.227 1.41 1.509 1.982.032-.394.039-.999-.008-1.906-.03-.582-.085-1.08-.143-1.66a35.962 35.962 0 01-.154-2.098c-.03-.695.04-1.228.237-1.6.102-.193.242-.349.42-.453.177-.103.37-.143.56-.143.265 0 .6.036.875.279.02-.039.038-.077.06-.112.129-.207.3-.355.51-.445.201-.085.42-.11.631-.11zm-2.078 1.141a.35.35 0 00-.18.04.37.37 0 00-.134.155c-.101.192-.179.561-.15 1.215.037.85.095 1.484.151 2.056.057.572.114 1.092.145 1.696.05.945.045 1.597.006 2.041a3.15 3.15 0 01-.088.545.905.905 0 01-.192.384.494.494 0 01-.481.15.621.621 0 01-.299-.182 1.195 1.195 0 01-.223-.348c-.174-.44-.713-1.462-1.441-2.037-.21-.166-.362-.212-.452-.219a.26.26 0 00-.191.056.365.365 0 00-.112.163c-.005.014-.007.026-.009.034.21.35.988 1.573 1.357 2.813.276.926.942 1.871 1.437 2.273.476.388 1.338.631 2.314.68.967.047 1.961-.102 2.659-.414 1.342-.602 1.616-1.928 1.74-2.51.096-.447.097-.926.072-1.371-.013-.223-.032-.43-.049-.623a6.384 6.384 0 01-.03-.517c0-.601.161-2.382.212-2.967.034-.395-.015-.605-.073-.707-.04-.07-.104-.124-.272-.136a.473.473 0 00-.347.114c-.078.07-.168.207-.19.474l-.005.122v.022l-.159 2.704-.024.415-2.066-.329-2.11-.28-.117-2.554-.005-.093a74.933 74.933 0 01-.075-1.613l-.002-.059v-.017c0-.668-.113-.94-.205-1.05-.07-.085-.172-.126-.412-.126zm3.878.585c-.13 0-.258.021-.349.085-.065.047-.177.163-.177.519v3.909l.936.149.134-2.267V8.267a.563.563 0 00-.205-.465.614.614 0 00-.339-.139zM19.25 6.69c-.159 0-.264.02-.335.05a.346.346 0 00-.165.148c-.116.188-.205.571-.206 1.349l.078 1.699c.034.655.068 1.387.092 1.991l1.059.14V7.37a.857.857 0 00-.143-.501.438.438 0 00-.38-.179z"
fill="#000"
fillRule="evenodd"
/>
<Path
d="M8.912 3.873a.377.377 0 01.513.138l1.151 1.993a.377.377 0 01-.652.376l-1.15-1.993a.377.377 0 01.138-.514zM14.555 4.011a.376.376 0 01.652.376l-1.15 1.993a.377.377 0 01-.652-.376l1.15-1.993zM11.989 3c.208 0 .376.169.376.377v2.3a.377.377 0 01-.753 0v-2.3c0-.208.169-.377.377-.377z"
fill="#000"
/>
</Svg>
);
});
Icon.displayName = 'OpenHandsColor';
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,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 24 24"
width={size}
{...rest}
>
<Path
clipRule="evenodd"
d="M4.75 5.937c.212 0 .43.025.63.11.21.09.382.238.51.445.022.035.04.073.059.112.274-.243.611-.28.877-.28.19 0 .382.04.56.144.177.104.317.26.42.453.196.372.267.905.237 1.6-.038.869-.098 1.519-.155 2.098-.058.58-.112 1.078-.143 1.66-.047.908-.041 1.513-.009 1.907.282-.572.807-1.428 1.51-1.983.29-.23.58-.358.862-.379.287-.022.532.07.716.217.178.141.296.33.357.51.054.158.093.403-.027.61-.193.336-.96 1.507-1.314 2.695-.316 1.06-1.062 2.137-1.682 2.641-.66.538-1.715.797-2.753.848-1.048.051-2.168-.105-3.003-.48C.68 18.095.352 16.39.232 15.828c-.116-.544-.114-1.102-.087-1.573.014-.236.035-.457.05-.644.018-.193.029-.34.029-.452 0-.558-.156-2.288-.21-2.902-.038-.446-.004-.845.17-1.148.193-.336.515-.487.875-.51.184-.013.393.016.592.104v-.435c0-.48.213-.83.485-1.05A1.352 1.352 0 013.51 7.01a1.48 1.48 0 01.255-.591c.216-.291.552-.483.985-.483zm2.076 1.141c-.24 0-.342.041-.412.125-.091.11-.205.383-.205 1.05l-.001.017v.001l-.002.059c-.006.28-.037.91-.073 1.613l-.006.093-.117 2.555-.313.041-1.796.24-.002-.002-2.064.329-.024-.415-.16-2.704V10.06c0-.35-.106-.516-.195-.597a.473.473 0 00-.347-.114c-.168.012-.23.065-.271.136-.06.102-.108.312-.074.707.051.585.213 2.366.213 2.967 0 .15-.015.331-.03.517-.018.192-.037.4-.05.623-.025.445-.023.924.072 1.371.124.582.4 1.908 1.742 2.51.697.312 1.692.46 2.658.413.976-.048 1.837-.291 2.314-.679.494-.402 1.16-1.347 1.436-2.273.37-1.24 1.147-2.462 1.356-2.813-.002-.008-.002-.02-.007-.034a.364.364 0 00-.113-.163.26.26 0 00-.19-.056c-.09.007-.241.053-.452.219-.728.575-1.268 1.597-1.442 2.037-.032.079-.111.23-.223.348a.62.62 0 01-.297.181.493.493 0 01-.481-.15.903.903 0 01-.194-.383 3.145 3.145 0 01-.088-.545c-.039-.444-.043-1.096.006-2.041.032-.604.088-1.124.145-1.696.056-.572.114-1.207.151-2.056.029-.654-.049-1.023-.15-1.215a.369.369 0 00-.134-.155.348.348 0 00-.18-.04zm-3.878.585a.61.61 0 00-.337.139.562.562 0 00-.207.465v1.791l.133 2.267.937-.15V8.268c0-.356-.112-.472-.177-.52-.09-.063-.219-.084-.349-.084zM4.75 6.69a.437.437 0 00-.38.179.856.856 0 00-.142.501v4.698l1.057-.14c.023-.561.055-1.231.087-1.848l.085-1.843c-.002-.778-.09-1.161-.207-1.349a.345.345 0 00-.165-.147.866.866 0 00-.335-.05zM19.252 5.937c.431 0 .767.192.983.483.131.177.213.382.255.591a1.354 1.354 0 011.376.205c.271.222.483.571.483 1.051v.435c.199-.088.408-.117.593-.105.36.024.68.175.874.511.174.303.209.702.17 1.147-.053.615-.21 2.345-.21 2.903 0 .111.012.26.028.452.017.187.037.408.05.644.028.471.03 1.029-.086 1.573-.12.562-.448 2.267-2.17 3.039-.835.374-1.955.53-3.003.479-1.038-.051-2.093-.31-2.753-.848-.62-.504-1.366-1.58-1.682-2.641-.354-1.187-1.119-2.358-1.313-2.695-.12-.207-.081-.452-.027-.61.06-.18.179-.369.357-.51.184-.146.428-.239.716-.217.28.021.57.149.861.379.703.554 1.227 1.41 1.509 1.982.032-.394.039-.999-.008-1.906-.03-.582-.085-1.08-.143-1.66a35.962 35.962 0 01-.154-2.098c-.03-.695.04-1.228.237-1.6.102-.193.242-.349.42-.453.177-.103.37-.143.56-.143.265 0 .6.036.875.279.02-.039.038-.077.06-.112.129-.207.3-.355.51-.445.201-.085.42-.11.631-.11zm-2.078 1.141a.35.35 0 00-.18.04.37.37 0 00-.134.155c-.101.192-.179.561-.15 1.215.037.85.095 1.484.151 2.056.057.572.114 1.092.145 1.696.05.945.045 1.597.006 2.041a3.15 3.15 0 01-.088.545.905.905 0 01-.192.384.494.494 0 01-.481.15.621.621 0 01-.299-.182 1.195 1.195 0 01-.223-.348c-.174-.44-.713-1.462-1.441-2.037-.21-.166-.362-.212-.452-.219a.26.26 0 00-.191.056.365.365 0 00-.112.163c-.005.014-.007.026-.009.034.21.35.988 1.573 1.357 2.813.276.926.942 1.871 1.437 2.273.476.388 1.338.631 2.314.68.967.047 1.961-.102 2.659-.414 1.342-.602 1.616-1.928 1.74-2.51.096-.447.097-.926.072-1.371-.013-.223-.032-.43-.049-.623a6.384 6.384 0 01-.03-.517c0-.601.161-2.382.212-2.967.034-.395-.015-.605-.073-.707-.04-.07-.104-.124-.272-.136a.473.473 0 00-.347.114c-.078.07-.168.207-.19.474l-.005.122v.022l-.159 2.704-.024.415-2.066-.329-2.11-.28-.117-2.554-.005-.093a74.933 74.933 0 01-.075-1.613l-.002-.059v-.017c0-.668-.113-.94-.205-1.05-.07-.085-.172-.126-.412-.126zm3.878.585c-.13 0-.258.021-.349.085-.065.047-.177.163-.177.519v3.909l.936.149.134-2.267V8.267a.563.563 0 00-.205-.465.614.614 0 00-.339-.139zM19.25 6.69c-.159 0-.264.02-.335.05a.346.346 0 00-.165.148c-.116.188-.205.571-.206 1.349l.078 1.699c.034.655.068 1.387.092 1.991l1.059.14V7.37a.857.857 0 00-.143-.501.438.438 0 00-.38-.179z"
fill={color}
/>
<Path
d="M8.912 3.873a.377.377 0 01.513.138l1.151 1.993a.377.377 0 01-.652.376l-1.15-1.993a.377.377 0 01.138-.514zM14.555 4.011a.376.376 0 01.652.376l-1.15 1.993a.377.377 0 01-.652-.376l1.15-1.993zM11.989 3c.208 0 .376.169.376.377v2.3a.377.377 0 01-.753 0v-2.3c0-.208.169-.377.377-.377z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'OpenHandsMono';
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 130 24"
width={size * 5.42} // 保持宽高比
{...rest}
>
<Path
d="M2 10.955C2 5.679 5.398 2 10.106 2s8.106 3.679 8.106 8.955-3.398 8.955-8.106 8.955S2 16.23 2 10.955zm13.105 0c0-3.776-2.062-6.22-4.999-6.22s-5 2.444-5 6.22c0 3.775 2.063 6.22 5 6.22s5-2.445 5-6.22zM26.84 19.91c-1.651 0-2.865-.654-3.666-1.598V24h-2.912V6.937h2.912v1.356c.801-.944 2.015-1.598 3.665-1.598 3.568 0 5.607 3.001 5.607 6.608 0 3.606-2.04 6.607-5.607 6.607zm-3.738-6.97v.75c0 2.347 1.359 3.679 3.155 3.679 2.111 0 3.252-1.646 3.252-4.066s-1.14-4.066-3.252-4.066c-1.796 0-3.155 1.306-3.155 3.703zM39.841 19.91c-3.64 0-6.189-2.687-6.189-6.607 0-3.728 2.524-6.608 6.068-6.608 3.689 0 5.655 2.784 5.655 6.269v.968h-8.932c.219 2.178 1.53 3.51 3.398 3.51 1.432 0 2.573-.727 2.961-2.034l2.5.944c-.898 2.227-2.913 3.558-5.46 3.558zm-.145-10.77c-1.505 0-2.67.895-3.107 2.614h5.849c-.024-1.404-.898-2.614-2.742-2.614zM47.317 19.644V6.937h2.912v1.356c.729-.847 1.869-1.598 3.52-1.598 2.67 0 4.271 1.84 4.271 4.575v8.374h-2.913v-7.527c0-1.574-.63-2.711-2.232-2.711-1.31 0-2.646.968-2.646 2.783v7.455h-2.912zM72.327 2.267h3.106v17.377h-3.106v-7.6h-8.35v7.6h-3.106V2.267h3.106v7.067h8.35V2.267zM81.751 19.861c-2.427 0-4.296-1.476-4.296-3.751 0-2.42 1.82-3.485 4.272-3.993l3.519-.726v-.218c0-1.21-.631-1.96-2.185-1.96-1.383 0-2.11.629-2.451 1.863l-2.742-.63c.631-2.105 2.5-3.75 5.315-3.75 3.058 0 4.903 1.451 4.903 4.38v5.47c0 .726.315.944 1.115.847v2.25c-2.11.243-3.227-.169-3.664-1.21-.801.896-2.136 1.428-3.786 1.428zm3.495-4.695v-1.549l-2.742.581c-1.238.266-2.16.653-2.16 1.791 0 .992.728 1.549 1.844 1.549 1.553 0 3.058-.823 3.058-2.372zM91.028 19.644V6.937h2.913v1.356c.727-.847 1.868-1.598 3.519-1.598 2.669 0 4.271 1.84 4.271 4.575v8.374h-2.913v-7.527c0-1.574-.63-2.711-2.232-2.711-1.31 0-2.645.968-2.645 2.783v7.455h-2.913zM109.266 19.91c-3.567 0-5.606-3-5.606-6.607 0-3.606 2.039-6.607 5.606-6.607 1.65 0 2.864.653 3.665 1.597V2.267h2.913v17.377h-2.913v-1.331c-.801.944-2.015 1.597-3.665 1.597zm3.737-6.97c0-2.396-1.358-3.703-3.154-3.703-2.112 0-3.253 1.646-3.253 4.066s1.141 4.066 3.253 4.066c1.796 0 3.154-1.331 3.154-3.679v-.75zM117.317 17.223l2.184-1.742c.752 1.234 2.209 2.057 3.689 2.057 1.238 0 2.379-.436 2.379-1.573 0-1.09-1.068-1.21-3.083-1.622-2.014-.411-4.32-.92-4.32-3.63 0-2.324 2.039-4.018 4.975-4.018 2.233 0 4.224.993 5.145 2.396l-1.965 1.767c-.728-1.137-1.942-1.79-3.349-1.79-1.189 0-1.966.532-1.966 1.379 0 .92.922 1.089 2.524 1.428 2.16.46 4.878.92 4.878 3.824 0 2.565-2.354 4.21-5.242 4.21-2.354 0-4.708-.943-5.849-2.686z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'OpenHandsText';
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 = 'OpenHands';
export const COMBINE_TEXT_MULTIPLE = 0.8;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#fff';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#000';
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,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,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.113 5.5l-.442 1.557a.157.157 0 01-.196.106l-7.414-2.157a.16.16 0 00-.143.028l-7.342 5.74a.159.159 0 01-.074.032l-4.37.656a.154.154 0 00-.132.162l.02.245c.005.078.071.14.152.141l5.074.128.058.002 3.75-1.953a.16.16 0 01.164.01l2.657 1.847a.152.152 0 01.066.125l-.023 2.45c0 .032.01.063.028.089l3.737 5.227c.03.04.077.065.129.065h1.182a.153.153 0 00.14-.224l-2.664-4.919a.15.15 0 01.005-.152l1.389-2.169a.156.156 0 01.062-.055l4.965-2.456a.16.16 0 01.158.01l1.418.921a.16.16 0 00.087.026h1.289c.125 0 .2-.136.13-.237l-3.578-5.29c-.074-.109-.246-.082-.282.044z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'RooCodeMono';
export default Icon;
File diff suppressed because one or more lines are too long
@@ -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 = 'RooCode';
export const COMBINE_TEXT_MULTIPLE = 0.6;
export const COMBINE_SPACE_MULTIPLE = 0.4;
export const COLOR_PRIMARY = '#000';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
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,19 @@
import React, { memo } from 'react';
import { Path, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
const Icon = memo<RNIconProps>(({ size = 24, style, ...rest }) => {
return (
<Svg height={size} style={style} viewBox="0 0 24 24" width={size} {...rest}>
<Path
d="M9.898 16.313c-.302-1.02-.813-2.23-1.856-2.676-1.058-.412-2.263.079-3.13.703-.648.476-1.215 1.112-1.515 1.873-.101.26-.172.531-.206.805a4.81 4.81 0 00-.073.83c.031 1.809 1.007 3.544 2.348 4.721.73.624 1.675 1.197 2.68 1.126 1.602-.163 1.91-2.142 2.082-3.426.073-.53.076-1.067.05-1.6a10.58 10.58 0 00-.383-2.357h.003zM19.203 16.73a8.675 8.675 0 00-1.507-.545c-.77-.206-1.56-.335-2.362-.364-1.06-.028-2.37.082-3.117.94-.72.878-.624 2.18-.296 3.195.254.765.682 1.499 1.315 2.02.214.176.45.328.702.447.248.124.5.246.768.327 1.729.53 3.681.139 5.213-.773.816-.5 1.656-1.225 1.896-2.204.339-1.575-1.444-2.479-2.615-3.04l.003-.003zM23.818 8.037c-.225-.931-.651-1.956-1.506-2.486-1.391-.81-2.802.61-3.7 1.547a8.35 8.35 0 00-.981 1.263c-.434.67-.801 1.38-1.075 2.132-.352 1.001-.654 2.283-.07 3.254.612.954 1.876 1.267 2.942 1.27.807-.003 1.637-.186 2.328-.626a3.3 3.3 0 00.64-.53c.195-.199.387-.402.548-.628 1.038-1.481 1.27-3.46.874-5.201v.005zM14.937 8.762c1.097-.287 1.783-1.394 2.115-2.407.246-.768.328-1.614.124-2.408a3.457 3.457 0 00-.304-.772 4.815 4.815 0 00-.429-.715C15.354 1.015 13.546.185 11.768.021c-.956-.073-2.06.018-2.83.666-1.201 1.076-.287 2.857.328 3.997.254.471.564.909.9 1.324a10.506 10.506 0 001.695 1.682c.841.646 1.967 1.326 3.076 1.072zM5.626 12.378a10.523 10.523 0 002.125-1.092c.874-.602 1.867-1.463 1.969-2.595.065-1.132-.773-2.127-1.636-2.757-.655-.47-1.434-.81-2.252-.863a3.38 3.38 0 00-.826.05 5.016 5.016 0 00-.813.187C2.483 5.895 1.132 7.36.43 9.002c-.366.887-.62 1.968-.242 2.899.652 1.473 2.627 1.154 3.9.923a8.777 8.777 0 001.537-.446h.002z"
fill="#E65C2C"
/>
</Svg>
);
});
Icon.displayName = 'ZencoderColor';
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,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="M9.898 16.313c-.302-1.02-.813-2.23-1.856-2.676-1.058-.412-2.263.079-3.13.703-.648.476-1.215 1.112-1.515 1.873-.101.26-.172.531-.206.805a4.81 4.81 0 00-.073.83c.031 1.809 1.007 3.544 2.348 4.721.73.624 1.675 1.197 2.68 1.126 1.602-.163 1.91-2.142 2.082-3.426.073-.53.076-1.067.05-1.6a10.58 10.58 0 00-.383-2.357h.003zM19.203 16.73a8.675 8.675 0 00-1.507-.545c-.77-.206-1.56-.335-2.362-.364-1.06-.028-2.37.082-3.117.94-.72.878-.624 2.18-.296 3.195.254.765.682 1.499 1.315 2.02.214.176.45.328.702.447.248.124.5.246.768.327 1.729.53 3.681.139 5.213-.773.816-.5 1.656-1.225 1.896-2.204.339-1.575-1.444-2.479-2.615-3.04l.003-.003zM23.818 8.037c-.225-.931-.651-1.956-1.506-2.486-1.391-.81-2.802.61-3.7 1.547a8.35 8.35 0 00-.981 1.263c-.434.67-.801 1.38-1.075 2.132-.352 1.001-.654 2.283-.07 3.254.612.954 1.876 1.267 2.942 1.27.807-.003 1.637-.186 2.328-.626a3.3 3.3 0 00.64-.53c.195-.199.387-.402.548-.628 1.038-1.481 1.27-3.46.874-5.201v.005zM14.937 8.762c1.097-.287 1.783-1.394 2.115-2.407.246-.768.328-1.614.124-2.408a3.457 3.457 0 00-.304-.772 4.815 4.815 0 00-.429-.715C15.354 1.015 13.546.185 11.768.021c-.956-.073-2.06.018-2.83.666-1.201 1.076-.287 2.857.328 3.997.254.471.564.909.9 1.324a10.506 10.506 0 001.695 1.682c.841.646 1.967 1.326 3.076 1.072zM5.626 12.378a10.523 10.523 0 002.125-1.092c.874-.602 1.867-1.463 1.969-2.595.065-1.132-.773-2.127-1.636-2.757-.655-.47-1.434-.81-2.252-.863a3.38 3.38 0 00-.826.05 5.016 5.016 0 00-.813.187C2.483 5.895 1.132 7.36.43 9.002c-.366.887-.62 1.968-.242 2.899.652 1.473 2.627 1.154 3.9.923a8.777 8.777 0 001.537-.446h.002z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'ZencoderMono';
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 211 24"
width={size * 8.79} // 保持宽高比
{...rest}
>
<Path
d="M2 19.166L14.613 8.652v-.42H2.307V4.823h18.44v2.452L8.134 17.865v.739l12.613-.35v3.408H2v-2.495zM46.34 14.262H28.965c.306 2.56 1.944 4.636 7.09 4.636 4.466 0 6.035-1.326 6.304-2.728h3.99c-.201 2.935-3.102 5.824-10.294 5.824-8.898 0-11.487-4.429-11.487-8.62 0-5.386 4.128-8.895 11.212-8.895 7.085 0 10.568 3.203 10.568 8.414v1.37h-.006zm-3.982-2.727c0-2.246-1.807-3.954-6.41-3.954-4.227 0-6.271 1.432-6.847 4.053h13.257v-.1zM51.319 4.824h4.364l-.069 4.934h.42c1.262-3.44 3.64-5.279 9.092-5.279 6.885 0 9.304 3.309 9.304 7.432v9.745h-4.364v-8.582c0-2.996-1.532-5.01-6.578-5.01-4.09 0-7.805 1.939-7.805 6.03v7.562h-4.364V4.824zM79.232 13.237c0-4.773 3.715-8.758 11.112-8.758s10.293 3.159 10.293 6.806l-3.99.35c-.038-1.908-1.707-3.746-6.234-3.746-4.528 0-6.816 2.352-6.816 5.348 0 2.828 1.77 5.349 6.647 5.349 4.878 0 6.44-1.77 6.472-3.678l3.99.35c0 3.509-2.758 6.737-10.63 6.737-7.874 0-10.844-4.497-10.844-8.758zM105.339 13.274c0-4.428 3.27-8.79 11.556-8.79s11.555 4.362 11.555 8.79c0 4.429-3.201 8.72-11.555 8.72s-11.556-4.26-11.556-8.72zm18.74 0c0-2.797-1.945-5.386-7.19-5.386-5.247 0-7.192 2.59-7.192 5.386 0 2.796 1.907 5.31 7.192 5.31 5.283 0 7.19-2.52 7.19-5.31zM133.084 13.036c0-4.735 3.852-8.552 10.837-8.552 4.74 0 6.978 1.327 7.866 3.648h.388V0h4.364v21.656h-4.364c.068-1.226.137-2.933.168-4.323h-.418c-.819 2.759-3.09 4.667-8.136 4.667-6.815 0-10.699-3.546-10.699-8.964h-.006zm19.084.2v-.512c0-2.658-2.457-4.836-7.635-4.836-4.739 0-7.122 2.214-7.122 5.148 0 3.41 2.621 5.555 7.091 5.555 5.11 0 7.666-3.065 7.666-5.354zM183.384 14.262h-17.377c.306 2.56 1.944 4.636 7.09 4.636 4.466 0 6.035-1.326 6.304-2.728h3.989c-.2 2.935-3.101 5.824-10.293 5.824-8.898 0-11.486-4.429-11.486-8.62 0-5.386 4.127-8.895 11.212-8.895 7.084 0 10.567 3.203 10.567 8.414v1.37h-.006zm-3.989-2.727c0-2.246-1.808-3.954-6.41-3.954-4.227 0-6.272 1.432-6.847 4.053h13.257v-.1zM188.362 4.823h4.364l-.069 5.148h.42c1.056-3.034 3.088-5.487 7.828-5.487 5.559 0 7.666 3.065 7.666 7.77 0 1.295-.068 2.452-.099 2.996h-4.09a22.37 22.37 0 00.068-1.739c0-3.61-1.194-5.448-4.802-5.448-4.465 0-6.916 3.471-6.916 7.225v6.368h-4.364V4.823h-.006z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'ZencoderText';
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 = 'Zencoder';
export const COMBINE_TEXT_MULTIPLE = 0.8;
export const COMBINE_SPACE_MULTIPLE = 0.3;
export const COLOR_PRIMARY = '#E65C2C';
// Avatar constants
export const AVATAR_BACKGROUND = '#000';
export const AVATAR_COLOR = COLOR_PRIMARY;
export const AVATAR_ICON_MULTIPLE = 0.6;
+17
View File
@@ -27,8 +27,13 @@ export {
default as AlibabaCloud,
type CompoundedIcon as AlibabaCloudProps,
} from './icons/AlibabaCloud';
export { default as Amp, type CompoundedIcon as AmpProps } from './icons/Amp';
export { default as AntGroup, type CompoundedIcon as AntGroupProps } from './icons/AntGroup';
export { default as Anthropic, type CompoundedIcon as AnthropicProps } from './icons/Anthropic';
export {
default as Antigravity,
type CompoundedIcon as AntigravityProps,
} from './icons/Antigravity';
export { default as Anyscale, type CompoundedIcon as AnyscaleProps } from './icons/Anyscale';
export { default as Apple, type CompoundedIcon as AppleProps } from './icons/Apple';
export { default as Arcee, type CompoundedIcon as ArceeProps } from './icons/Arcee';
@@ -59,8 +64,13 @@ export { default as CapCut, type CompoundedIcon as CapCutProps } from './icons/C
export { default as CentML, type CompoundedIcon as CentMLProps } from './icons/CentML';
export { default as Cerebras, type CompoundedIcon as CerebrasProps } from './icons/Cerebras';
export { default as ChatGLM, type CompoundedIcon as ChatGLMProps } from './icons/ChatGLM';
export {
default as CherryStudio,
type CompoundedIcon as CherryStudioProps,
} from './icons/CherryStudio';
export { default as Civitai, type CompoundedIcon as CivitaiProps } from './icons/Civitai';
export { default as Claude, type CompoundedIcon as ClaudeProps } from './icons/Claude';
export { default as ClaudeCode, type CompoundedIcon as ClaudeCodeProps } from './icons/ClaudeCode';
export { default as Cline, type CompoundedIcon as ClineProps } from './icons/Cline';
export { default as Clipdrop, type CompoundedIcon as ClipdropProps } from './icons/Clipdrop';
export { default as Cloudflare, type CompoundedIcon as CloudflareProps } from './icons/Cloudflare';
@@ -69,6 +79,7 @@ export {
type CompoundedIcon as CodeFlickerProps,
} from './icons/CodeFlicker';
export { default as CodeGeeX, type CompoundedIcon as CodeGeeXProps } from './icons/CodeGeeX';
export { default as Codex, type CompoundedIcon as CodexProps } from './icons/Codex';
export { default as CogVideo, type CompoundedIcon as CogVideoProps } from './icons/CogVideo';
export { default as CogView, type CompoundedIcon as CogViewProps } from './icons/CogView';
export { default as Cohere, type CompoundedIcon as CohereProps } from './icons/Cohere';
@@ -174,6 +185,8 @@ export { default as Inflection, type CompoundedIcon as InflectionProps } from '.
export { default as InternLM, type CompoundedIcon as InternLMProps } from './icons/InternLM';
export { default as Jimeng, type CompoundedIcon as JimengProps } from './icons/Jimeng';
export { default as Jina, type CompoundedIcon as JinaProps } from './icons/Jina';
export { default as Junie, type CompoundedIcon as JunieProps } from './icons/Junie';
export { default as KiloCode, type CompoundedIcon as KiloCodeProps } from './icons/KiloCode';
export { default as Kimi, type CompoundedIcon as KimiProps } from './icons/Kimi';
export { default as Kling, type CompoundedIcon as KlingProps } from './icons/Kling';
export { default as Kluster, type CompoundedIcon as KlusterProps } from './icons/Kluster';
@@ -237,6 +250,8 @@ export { default as Ollama, type CompoundedIcon as OllamaProps } from './icons/O
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 OpenCode, type CompoundedIcon as OpenCodeProps } from './icons/OpenCode';
export { default as OpenHands, type CompoundedIcon as OpenHandsProps } from './icons/OpenHands';
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';
@@ -262,6 +277,7 @@ export { default as Recraft, type CompoundedIcon as RecraftProps } from './icons
export { default as Relace, type CompoundedIcon as RelaceProps } from './icons/Relace';
export { default as Replicate, type CompoundedIcon as ReplicateProps } from './icons/Replicate';
export { default as Replit, type CompoundedIcon as ReplitProps } from './icons/Replit';
export { default as RooCode, type CompoundedIcon as RooCodeProps } from './icons/RooCode';
export { default as RSSHub, type CompoundedIcon as RSSHubProps } from './icons/RSSHub';
export { default as Runway, type CompoundedIcon as RunwayProps } from './icons/Runway';
export { default as Rwkv, type CompoundedIcon as RwkvProps } from './icons/Rwkv';
@@ -333,6 +349,7 @@ export { default as Yuanbao, type CompoundedIcon as YuanbaoProps } from './icons
export { default as ZAI, type CompoundedIcon as ZAIProps } from './icons/ZAI';
export { default as Zapier, type CompoundedIcon as ZapierProps } from './icons/Zapier';
export { default as Zeabur, type CompoundedIcon as ZeaburProps } from './icons/Zeabur';
export { default as Zencoder, type CompoundedIcon as ZencoderProps } from './icons/Zencoder';
export { default as ZenMux, type CompoundedIcon as ZenMuxProps } from './icons/ZenMux';
export { default as ZeroOne, type CompoundedIcon as ZeroOneProps } from './icons/ZeroOne';
export { default as Zhipu, type CompoundedIcon as ZhipuProps } from './icons/Zhipu';
+1 -1
View File
@@ -23,7 +23,7 @@ const convertPngToSvg = async () => {
console.info(`Reading PNG file from: ${pngPath}`);
// 读取PNG文件
const fileBuffer:any = await fs.readFile(pngPath);
const fileBuffer: any = await fs.readFile(pngPath);
// 创建FormData对象
const formData = new FormData();
+25
View File
@@ -0,0 +1,25 @@
'use client';
import { memo } from 'react';
import IconAvatar, { type IconAvatarProps } from '@/features/IconAvatar';
import { AVATAR_BACKGROUND, AVATAR_COLOR, AVATAR_ICON_MULTIPLE, TITLE } from '../style';
import Mono from './Mono';
export type AvatarProps = Omit<IconAvatarProps, 'Icon'>;
const Avatar = memo<AvatarProps>(({ ...rest }) => {
return (
<IconAvatar
Icon={Mono}
aria-label={TITLE}
background={AVATAR_BACKGROUND}
color={AVATAR_COLOR}
iconMultiple={AVATAR_ICON_MULTIPLE}
{...rest}
/>
);
});
export default Avatar;
+37
View File
@@ -0,0 +1,37 @@
'use client';
import { memo } from 'react';
import type { IconType } from '@/types';
import { TITLE } from '../style';
const Icon: IconType = memo(({ size = '1em', style, ...rest }) => {
return (
<svg
height={size}
style={{ flex: 'none', lineHeight: 1, ...style }}
viewBox="0 0 24 24"
width={size}
xmlns="http://www.w3.org/2000/svg"
{...rest}
>
<title>{TITLE}</title>
<path
d="M15.087 23.18L12.03 24l-2.097-7.823-5.738 5.738-2.251-2.251 5.718-5.719-7.769-2.082.82-3.057 11.294 3.08 3.08 11.295z"
fill="#F34E3F"
/>
<path
d="M19.505 18.762l-3.057.82-2.564-9.573-9.572-2.564.819-3.057 11.295 3.079 3.08 11.295z"
fill="#F34E3F"
/>
<path
d="M23.893 14.374l-3.057.82-2.565-9.572L8.7 3.057 9.52 0l11.295 3.08 3.079 11.294z"
fill="#F34E3F"
/>
</svg>
);
});
export default Icon;
+30
View File
@@ -0,0 +1,30 @@
'use client';
import { memo } from 'react';
import IconCombine, { type IconCombineProps } from '@/features/IconCombine';
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<IconCombineProps, 'Icon' | 'Text'> {
type?: 'color' | 'mono';
}
const Combine = memo<CombineProps>(({ type = 'mono', ...rest }) => {
const Icon = type === 'color' ? Color : Mono;
return (
<IconCombine
Icon={Icon}
Text={Text}
aria-label={TITLE}
spaceMultiple={COMBINE_SPACE_MULTIPLE}
textMultiple={COMBINE_TEXT_MULTIPLE}
{...rest}
/>
);
});
export default Combine;
+30
View File
@@ -0,0 +1,30 @@
'use client';
import { memo } from 'react';
import type { IconType } from '@/types';
import { TITLE } from '../style';
const Icon: IconType = memo(({ size = '1em', style, ...rest }) => {
return (
<svg
fill="currentColor"
fillRule="evenodd"
height={size}
style={{ flex: 'none', lineHeight: 1, ...style }}
viewBox="0 0 24 24"
width={size}
xmlns="http://www.w3.org/2000/svg"
{...rest}
>
<title>{TITLE}</title>
<path d="M15.087 23.18L12.03 24l-2.097-7.823-5.738 5.738-2.251-2.251 5.718-5.719-7.769-2.082.82-3.057 11.294 3.08 3.08 11.295z" />
<path d="M19.505 18.762l-3.057.82-2.564-9.573-9.572-2.564.819-3.057 11.295 3.079 3.08 11.295z" />
<path d="M23.893 14.374l-3.057.82-2.565-9.572L8.7 3.057 9.52 0l11.295 3.08 3.079 11.294z" />
</svg>
);
});
export default Icon;
+26
View File
@@ -0,0 +1,26 @@
'use client';
import { memo } from 'react';
import type { IconType } from '@/types';
import { TITLE } from '../style';
const Icon: IconType = memo(({ size = '1em', style, ...rest }) => {
return (
<svg
fill="currentColor"
fillRule="evenodd"
height={size}
style={{ flex: 'none', lineHeight: 1, ...style }}
viewBox="0 0 54 24"
xmlns="http://www.w3.org/2000/svg"
{...rest}
>
<title>{TITLE}</title>
<path d="M44.055 2C48.405 2 52 5.114 52 10.002c0 5.149-3.66 8.838-8.39 8.838-1.668 0-3.186-.311-4.435-1.015a6.072 6.072 0 01-2.443-2.53l-1.212 8.492-.03.213h-2.447l.041-.285 3.087-21.269h2.424l-.256 1.581C39.801 2.69 41.772 2 44.055 2zm-33.666.028c1.668 0 3.193.312 4.45 1.018a6.084 6.084 0 012.454 2.546l.409-2.932.03-.214h2.419l-2.264 15.763-.03.213h-2.42l.234-1.604c-1.45 1.359-3.443 2.05-5.726 2.05-4.35 0-7.945-3.114-7.945-8.002 0-5.149 3.66-8.838 8.39-8.838zm12.292 16.394h-2.42L22.555 2.66l.03-.213h2.417l-2.32 15.976zm4.354 0h-2.419L26.91 2.66l.03-.213h2.417l-2.32 15.976zM33.71 2.446l-2.32 15.976h-2.42L31.264 2.66l.03-.213h2.417zM10.64 4.143c-3.675 0-6.143 2.932-6.143 6.612 0 1.58.498 3.08 1.48 4.181.976 1.097 2.449 1.817 4.44 1.817 3.674 0 6.143-2.959 6.143-6.64 0-1.78-.617-3.27-1.657-4.314-1.04-1.043-2.517-1.656-4.264-1.656zm32.942-.027c-3.673 0-6.142 2.958-6.142 6.639 0 1.78.617 3.27 1.657 4.313 1.04 1.044 2.517 1.657 4.263 1.657 3.675 0 6.143-2.932 6.143-6.611 0-1.581-.498-3.081-1.479-4.182-.977-1.097-2.45-1.817-4.442-1.817z" />
</svg>
);
});
export default Icon;
+72
View File
@@ -0,0 +1,72 @@
---
nav: Components
group: Application
title: Amp
atomId: Amp
description: https://ampcode.com
---
## Icons
```tsx
import { Amp } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} horizontal>
<Amp size={64} />
<Amp.Color size={64} />
</Flexbox>
);
```
## Text
```tsx
import { Amp } from '@lobehub/icons';
export default () => <Amp.Text size={48} />;
```
## Combine
```tsx
import { Amp } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} align={'flex-start'}>
<Amp.Combine size={64} />
<Amp.Combine size={64} type={'color'} />
</Flexbox>
);
```
## Avatars
```tsx
import { Amp } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} horizontal>
<Amp.Avatar size={64} />
<Amp.Avatar size={64} shape={'square'} />
</Flexbox>
);
```
## Colors
```tsx
import { Amp } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
import ColorPreview from '../components/ColorPreview';
export default () => (
<Flexbox gap={16} horizontal>
<ColorPreview color={Amp.colorPrimary} />
</Flexbox>
);
```
+25
View File
@@ -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;
+9
View File
@@ -0,0 +1,9 @@
export const TITLE = 'Amp';
export const COMBINE_TEXT_MULTIPLE = 0.8;
export const COMBINE_SPACE_MULTIPLE = 0.3;
export const COLOR_PRIMARY = '#F34E3F';
// Avatar constants
export const AVATAR_BACKGROUND = '#000';
export const AVATAR_COLOR = COLOR_PRIMARY;
export const AVATAR_ICON_MULTIPLE = 0.6;
+25
View File
@@ -0,0 +1,25 @@
'use client';
import { memo } from 'react';
import IconAvatar, { type IconAvatarProps } from '@/features/IconAvatar';
import { AVATAR_BACKGROUND, AVATAR_COLOR, AVATAR_ICON_MULTIPLE, TITLE } from '../style';
import Color from './Color';
export type AvatarProps = Omit<IconAvatarProps, 'Icon'>;
const Avatar = memo<AvatarProps>(({ ...rest }) => {
return (
<IconAvatar
Icon={Color}
aria-label={TITLE}
background={AVATAR_BACKGROUND}
color={AVATAR_COLOR}
iconMultiple={AVATAR_ICON_MULTIPLE}
{...rest}
/>
);
});
export default Avatar;
+245
View File
@@ -0,0 +1,245 @@
'use client';
import { memo } from 'react';
import { useFillIds } from '@/hooks/useFillId';
import type { IconType } from '@/types';
import { TITLE } from '../style';
const Icon: IconType = memo(({ size = '1em', style, ...rest }) => {
const [a, b, c, d, e, f, g, h, i, j, k, l] = useFillIds(TITLE, 12);
return (
<svg
height={size}
style={{ flex: 'none', lineHeight: 1, ...style }}
viewBox="0 0 24 24"
width={size}
xmlns="http://www.w3.org/2000/svg"
{...rest}
>
<title>{TITLE}</title>
<mask height="23" id={a.id} maskUnits="userSpaceOnUse" width="24" x="0" y="1">
<path
d="M21.751 22.607c1.34 1.005 3.35.335 1.508-1.508C17.73 15.74 18.904 1 12.037 1 5.17 1 6.342 15.74.815 21.1c-2.01 2.009.167 2.511 1.507 1.506 5.192-3.517 4.857-9.714 9.715-9.714 4.857 0 4.522 6.197 9.714 9.715z"
fill="#fff"
/>
</mask>
<g mask={a.fill}>
<g filter={b.fill}>
<path
d="M-1.018-3.992c-.408 3.591 2.686 6.89 6.91 7.37 4.225.48 7.98-2.043 8.387-5.633.408-3.59-2.686-6.89-6.91-7.37-4.225-.479-7.98 2.043-8.387 5.633z"
fill="#FFE432"
/>
</g>
<g filter={c.fill}>
<path
d="M15.269 7.747c1.058 4.557 5.691 7.374 10.348 6.293 4.657-1.082 7.575-5.653 6.516-10.21-1.058-4.556-5.691-7.374-10.348-6.292-4.657 1.082-7.575 5.653-6.516 10.21z"
fill="#FC413D"
/>
</g>
<g filter={d.fill}>
<path
d="M-12.443 10.804c1.338 4.703 7.36 7.11 13.453 5.378 6.092-1.733 9.947-6.95 8.61-11.652C8.282-.173 2.26-2.58-3.833-.848-9.925.884-13.78 6.1-12.443 10.804z"
fill="#00B95C"
/>
</g>
<g filter={e.fill}>
<path
d="M-12.443 10.804c1.338 4.703 7.36 7.11 13.453 5.378 6.092-1.733 9.947-6.95 8.61-11.652C8.282-.173 2.26-2.58-3.833-.848-9.925.884-13.78 6.1-12.443 10.804z"
fill="#00B95C"
/>
</g>
<g filter={f.fill}>
<path
d="M-7.608 14.703c3.352 3.424 9.126 3.208 12.896-.483 3.77-3.69 4.108-9.459.756-12.883C2.69-2.087-3.083-1.871-6.853 1.82c-3.77 3.69-4.108 9.458-.755 12.883z"
fill="#00B95C"
/>
</g>
<g filter={g.fill}>
<path
d="M9.932 27.617c1.04 4.482 5.384 7.303 9.7 6.3 4.316-1.002 6.971-5.448 5.93-9.93-1.04-4.483-5.384-7.304-9.7-6.301-4.316 1.002-6.971 5.448-5.93 9.93z"
fill="#3186FF"
/>
</g>
<g filter={h.fill}>
<path
d="M2.572-8.185C.392-3.329 2.778 2.472 7.9 4.771c5.122 2.3 11.042.227 13.222-4.63 2.18-4.855-.205-10.656-5.327-12.955-5.122-2.3-11.042-.227-13.222 4.63z"
fill="#FBBC04"
/>
</g>
<g filter={i.fill}>
<path
d="M-3.267 38.686c-5.277-2.072 3.742-19.117 5.984-24.83 2.243-5.712 8.34-8.664 13.616-6.592 5.278 2.071 11.533 13.482 9.29 19.195-2.242 5.713-23.613 14.298-28.89 12.227z"
fill="#3186FF"
/>
</g>
<g filter={j.fill}>
<path
d="M28.71 17.471c-1.413 1.649-5.1.808-8.236-1.878-3.135-2.687-4.531-6.201-3.118-7.85 1.412-1.649 5.1-.808 8.235 1.878s4.532 6.2 3.119 7.85z"
fill="#749BFF"
/>
</g>
<g filter={k.fill}>
<path
d="M18.163 9.077c5.81 3.93 12.502 4.19 14.946.577 2.443-3.612-.287-9.727-6.098-13.658-5.81-3.931-12.502-4.19-14.946-.577-2.443 3.612.287 9.727 6.098 13.658z"
fill="#FC413D"
/>
</g>
<g filter={l.fill}>
<path
d="M-.915 2.684c-1.44 3.473-.97 6.967 1.05 7.804 2.02.837 4.824-1.3 6.264-4.772 1.44-3.473.97-6.967-1.05-7.804-2.02-.837-4.824 1.3-6.264 4.772z"
fill="#FFEE48"
/>
</g>
</g>
<defs>
<filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="17.587"
id={b.id}
width="19.838"
x="-3.288"
y="-11.917"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="1.117" />
</filter>
<filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="38.565"
id={c.id}
width="38.9"
x="4.251"
y="-13.493"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="5.4" />
</filter>
<filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="36.517"
id={d.id}
width="40.955"
x="-21.889"
y="-10.592"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="4.591" />
</filter>
<filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="36.517"
id={e.id}
width="40.955"
x="-21.889"
y="-10.592"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="4.591" />
</filter>
<filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="36.595"
id={f.id}
width="36.632"
x="-19.099"
y="-10.278"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="4.591" />
</filter>
<filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="34.087"
id={g.id}
width="33.533"
x=".981"
y="8.758"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="4.363" />
</filter>
<filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="35.276"
id={h.id}
width="35.978"
x="-6.143"
y="-21.659"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="3.954" />
</filter>
<filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="46.523"
id={i.id}
width="45.114"
x="-11.96"
y="-.46"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="3.531" />
</filter>
<filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="24.054"
id={j.id}
width="25.094"
x="10.485"
y=".58"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="3.159" />
</filter>
<filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="30.007"
id={k.id}
width="33.508"
x="5.833"
y="-12.467"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="2.669" />
</filter>
<filter
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
height="26.151"
id={l.id}
width="22.194"
x="-8.355"
y="-8.876"
>
<feFlood floodOpacity="0" result="BackgroundImageFix" />
<feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
<feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="3.303" />
</filter>
</defs>
</svg>
);
});
export default Icon;
+30
View File
@@ -0,0 +1,30 @@
'use client';
import { memo } from 'react';
import IconCombine, { type IconCombineProps } from '@/features/IconCombine';
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<IconCombineProps, 'Icon' | 'Text'> {
type?: 'color' | 'mono';
}
const Combine = memo<CombineProps>(({ type = 'mono', ...rest }) => {
const Icon = type === 'color' ? Color : Mono;
return (
<IconCombine
Icon={Icon}
Text={Text}
aria-label={TITLE}
spaceMultiple={COMBINE_SPACE_MULTIPLE}
textMultiple={COMBINE_TEXT_MULTIPLE}
{...rest}
/>
);
});
export default Combine;

Some files were not shown because too many files have changed in this diff Show More