✨ feat: Add Anspire, Bocha, Brave, Browserless, Kagi, SearXNG

This commit is contained in:
canisminor1990
2026-07-14 21:18:21 +08:00
parent 6b461728d3
commit 53d1bd5ea7
91 changed files with 2547 additions and 0 deletions
@@ -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="M20.531 3.736A2.146 2.146 0 0018.419 2h-3.838c-1.071 0-2.07.54-2.65 1.435L.023 21.78a.142.142 0 00.12.22h3.6c.097 0 .188-.05.24-.131l3.547-5.492h6.274c1.46 0 2.73-.996 3.067-2.407l.167-.695.002-.01a.14.14 0 00-.139-.161H9.644l4.935-7.643a.861.861 0 01.724-.393h1.225c.276 0 .512.194.563.463l3.105 16.237a.286.286 0 00.281.232h3.38c.009 0 .018 0 .026-.003a.142.142 0 00.114-.166L20.531 3.736z"
fill="#514BFD"
/>
</Svg>
);
});
Icon.displayName = 'AnspireColor';
export default Icon;
@@ -0,0 +1,26 @@
import React, { memo } from 'react';
import { RNIconCombine, type RNIconCombineProps } from '@/features';
import { COMBINE_SPACE_MULTIPLE, COMBINE_TEXT_MULTIPLE, TITLE } from '../style';
import TextMono from './Text';
import TextColor from './TextColor';
export interface CombineProps extends Omit<RNIconCombineProps, 'Icon' | 'Text'> {
type?: 'color' | 'mono';
}
const Combine = memo<CombineProps>(({ type = 'mono', ...rest }) => {
const Text = type === 'color' ? TextColor : TextMono;
return (
<RNIconCombine
Text={Text}
aria-label={TITLE}
spaceMultiple={COMBINE_SPACE_MULTIPLE}
textMultiple={COMBINE_TEXT_MULTIPLE}
{...rest}
/>
);
});
export default Combine;
@@ -0,0 +1,27 @@
import React, { memo } from 'react';
import { Path, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
const Icon = memo<RNIconProps>(({ size = 24, style, color = '#000000', ...rest }) => {
return (
<Svg
color={color}
fillRule="evenodd"
height={size}
style={style}
viewBox="0 0 24 24"
width={size}
{...rest}
>
<Path
d="M20.531 3.736A2.146 2.146 0 0018.419 2h-3.838c-1.071 0-2.07.54-2.65 1.435L.023 21.78a.142.142 0 00.12.22h3.6c.097 0 .188-.05.24-.131l3.547-5.492h6.274c1.46 0 2.73-.996 3.067-2.407l.167-.695.002-.01a.14.14 0 00-.139-.161H9.644l4.935-7.643a.861.861 0 01.724-.393h1.225c.276 0 .512.194.563.463l3.105 16.237a.286.286 0 00.281.232h3.38c.009 0 .018 0 .026-.003a.142.142 0 00.114-.166L20.531 3.736z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'AnspireMono';
export default Icon;
@@ -0,0 +1,31 @@
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 106 24"
width={size * 4.42} // 保持宽高比
{...rest}
>
<Path
d="M60.467 6.88a.122.122 0 01.12.147l-.232 1.087a3.665 3.665 0 012.746-1.234h5.125a1.835 1.835 0 011.8 2.204l-1.542 7.34a3.43 3.43 0 01-3.36 2.716h-7.117l-.615 2.885a2.45 2.45 0 01-2.4 1.934H53.78a.122.122 0 01-.12-.148l3.565-16.738a.245.245 0 01.24-.193h3.002zm-5.947 0a.17.17 0 01.17.194l-.003.012-.165.765a1.837 1.837 0 01-1.799 1.444h-7.439c-.478 0-.89.333-.99.799a.858.858 0 00.623 1.007l6.194 1.63a2.44 2.44 0 011.775 2.849l-.172.83a3.43 3.43 0 01-3.363 2.73H39.187a.122.122 0 01-.12-.148l.45-2.075a.245.245 0 01.24-.192h8.629c.543 0 1.01-.385 1.112-.916a1.007 1.007 0 00-.728-1.16l-5.15-1.393v.002l-.877-.217a2.44 2.44 0 01-1.808-2.873l.124-.58a3.43 3.43 0 013.359-2.708H54.52zm11.503 2.415h-3.955a2.452 2.452 0 00-2.309 1.617l-1.238 5.813h5.36c.698 0 1.3-.488 1.441-1.168l1.181-5.675a.488.488 0 00-.48-.587zM29.197 6.88a.122.122 0 01.12.147l-.182.86a2.986 2.986 0 012.24-1.007h5.58a1.835 1.835 0 011.801 2.204l-1.807 8.6a1.837 1.837 0 01-1.8 1.456h-1.705a.122.122 0 01-.12-.147l1.908-9.11a.488.488 0 00-.48-.588h-3.93c-1.096 0-2.05.722-2.354 1.754l-1.665 7.897a.245.245 0 01-.24.194h-3.087a.061.061 0 01-.06-.073l2.53-11.993a.245.245 0 01.24-.194h3.01zm53.834 0a.122.122 0 01.12.147l-.18.856a3.233 3.233 0 012.343-1.003h4.522a.122.122 0 01.12.148l-.013.058-.063.289a2.45 2.45 0 01-2.397 1.924H84.67a2.514 2.514 0 00-2.325 1.55l-1.708 8.097a.245.245 0 01-.24.194h-3.012a.122.122 0 01-.12-.147l2.514-11.92a.245.245 0 01.24-.193h3.012zm18.149 9.82a.122.122 0 01.119.148l-.031.149-.046.212a2.45 2.45 0 01-2.399 1.931h-8.488a1.468 1.468 0 01-1.44-1.77l.052-.24.051-.237a.245.245 0 01.24-.193h11.942zM99.153 11.7a.122.122 0 01.119.15l-.47 1.98a.245.245 0 01-.24.187h-8.664a.122.122 0 01-.12-.15l.47-1.98a.245.245 0 01.24-.187h8.665zm4.724-4.82a.122.122 0 01.12.148l-.033.155-.045.208a2.45 2.45 0 01-2.398 1.93H90.875a.122.122 0 01-.12-.148l.063-.291.119-.554a1.837 1.837 0 011.799-1.447h11.141z"
fill={color}
/>
<Path
d="M16.76 2c.883 0 1.642.625 1.807 1.488l2.966 15.507a.122.122 0 01-.12.145H18.52a.245.245 0 01-.24-.199L15.623 5.026a.49.49 0 00-.482-.397h-1.048a.737.737 0 00-.62.337l-4.222 6.55h6.209a.12.12 0 01.119.137l-.002.01-.143.596a2.695 2.695 0 01-2.624 2.062H7.443l-3.034 4.707a.246.246 0 01-.207.112h-3.08a.122.122 0 01-.102-.188L11.209 3.23A2.701 2.701 0 0113.476 2h3.284zm60.137 5.027l-2.514 11.919a.245.245 0 01-.24.194H71.13a.122.122 0 01-.12-.147l2.514-11.92a.245.245 0 01.24-.193h3.012a.122.122 0 01.12.147zm.915-4.328l-.582 2.468a.245.245 0 01-.239.188h-2.913a.122.122 0 01-.12-.15l.296-1.253a1.826 1.826 0 011.78-1.403h1.659a.122.122 0 01.12.15z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'AnspireText';
export default Icon;
@@ -0,0 +1,31 @@
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 106 24"
width={size * 4.42} // 保持宽高比
{...rest}
>
<Path
d="M60.467 6.88a.122.122 0 01.12.147l-.232 1.087a3.665 3.665 0 012.746-1.234h5.125a1.835 1.835 0 011.8 2.204l-1.542 7.34a3.43 3.43 0 01-3.36 2.716h-7.117l-.615 2.885a2.45 2.45 0 01-2.4 1.934H53.78a.122.122 0 01-.12-.148l3.565-16.738a.245.245 0 01.24-.193h3.002zm-5.947 0a.17.17 0 01.17.194l-.003.012-.165.765a1.837 1.837 0 01-1.799 1.444h-7.439c-.478 0-.89.333-.99.799a.858.858 0 00.623 1.007l6.194 1.63a2.44 2.44 0 011.775 2.849l-.172.83a3.43 3.43 0 01-3.363 2.73H39.187a.122.122 0 01-.12-.148l.45-2.075a.245.245 0 01.24-.192h8.629c.543 0 1.01-.385 1.112-.916a1.007 1.007 0 00-.728-1.16l-5.15-1.393v.002l-.877-.217a2.44 2.44 0 01-1.808-2.873l.124-.58a3.43 3.43 0 013.359-2.708H54.52zm11.503 2.415h-3.955a2.452 2.452 0 00-2.309 1.617l-1.238 5.813h5.36c.698 0 1.3-.488 1.441-1.168l1.181-5.675a.488.488 0 00-.48-.587zM29.197 6.88a.122.122 0 01.12.147l-.182.86a2.986 2.986 0 012.24-1.007h5.58a1.835 1.835 0 011.801 2.204l-1.807 8.6a1.837 1.837 0 01-1.8 1.456h-1.705a.122.122 0 01-.12-.147l1.908-9.11a.488.488 0 00-.48-.588h-3.93c-1.096 0-2.05.722-2.354 1.754l-1.665 7.897a.245.245 0 01-.24.194h-3.087a.061.061 0 01-.06-.073l2.53-11.993a.245.245 0 01.24-.194h3.01zm53.834 0a.122.122 0 01.12.147l-.18.856a3.233 3.233 0 012.343-1.003h4.522a.122.122 0 01.12.148l-.013.058-.063.289a2.45 2.45 0 01-2.397 1.924H84.67a2.514 2.514 0 00-2.325 1.55l-1.708 8.097a.245.245 0 01-.24.194h-3.012a.122.122 0 01-.12-.147l2.514-11.92a.245.245 0 01.24-.193h3.012zm18.149 9.82a.122.122 0 01.119.148l-.031.149-.046.212a2.45 2.45 0 01-2.399 1.931h-8.488a1.468 1.468 0 01-1.44-1.77l.052-.24.051-.237a.245.245 0 01.24-.193h11.942zM99.153 11.7a.122.122 0 01.119.15l-.47 1.98a.245.245 0 01-.24.187h-8.664a.122.122 0 01-.12-.15l.47-1.98a.245.245 0 01.24-.187h8.665zm4.724-4.82a.122.122 0 01.12.148l-.033.155-.045.208a2.45 2.45 0 01-2.398 1.93H90.875a.122.122 0 01-.12-.148l.063-.291.119-.554a1.837 1.837 0 011.799-1.447h11.141z"
fill={color}
/>
<Path
d="M16.76 2c.883 0 1.642.625 1.807 1.488l2.966 15.507a.122.122 0 01-.12.145H18.52a.245.245 0 01-.24-.199L15.623 5.026a.49.49 0 00-.482-.397h-1.048a.737.737 0 00-.62.337l-4.222 6.55h6.209a.12.12 0 01.119.137l-.002.01-.143.596a2.695 2.695 0 01-2.624 2.062H7.443l-3.034 4.707a.246.246 0 01-.207.112h-3.08a.122.122 0 01-.102-.188L11.209 3.23A2.701 2.701 0 0113.476 2h3.284zm60.137 5.027l-2.514 11.919a.245.245 0 01-.24.194H71.13a.122.122 0 01-.12-.147l2.514-11.92a.245.245 0 01.24-.193h3.012a.122.122 0 01.12.147zm.915-4.328l-.582 2.468a.245.245 0 01-.239.188h-2.913a.122.122 0 01-.12-.15l.296-1.253a1.826 1.826 0 011.78-1.403h1.659a.122.122 0 01.12.15z"
fill="#514BFD"
/>
</Svg>
);
});
Icon.displayName = 'AnspireTextColor';
export default Icon;
@@ -0,0 +1,24 @@
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 = 'Anspire';
export const COMBINE_TEXT_MULTIPLE = 1;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#514BFD';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
export const AVATAR_ICON_MULTIPLE = 0.65;
@@ -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,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, ...rest }) => {
return (
<Svg height={size} style={style} viewBox="0 0 24 24" width={size} {...rest}>
<Path
d="M6.98 2c2.351.265 3.905 1.955 3.987 4.31a.035.035 0 00.019.031.036.036 0 00.036-.001c5.432-3.05 12.168.3 12.921 6.48.31 2.535-.668 5.04-2.33 6.946-1.41 1.619-3.653 2.561-5.763 2.738h-.996c-3.945-.28-7.106-2.99-7.99-6.805a.302.302 0 00-.078-.145l.013-.027a.114.114 0 00.01-.055l-.162-2.05.014-8.569L6.666 2h.314zm14.102 17.852c-.32-.386-.527-.643-.62-.773-.74-1.011-1.058-2.195-.952-3.552.044-.57.296-1.117.263-1.744-.146-2.74-2.503-4.64-5.21-4.232-1.772.268-3.215 1.678-3.61 3.4a4.44 4.44 0 001.574 4.488c1.119.879 2.37 1.166 3.753.86.675-.15 1.04-.226 1.096-.23 1.126-.083 2.098.273 2.918 1.069.486.472.74.718.763.738a.017.017 0 00.024 0 .017.017 0 000-.024z"
fill="#006EFF"
/>
<Path
d="M6.661 4.854l-.014 8.568-2.921-5.847-1.488-3.048a.106.106 0 01.022-.124.11.11 0 01.037-.024c1.57-.602 3.025-.444 4.364.475z"
fill="#A5CCFF"
/>
<Path
d="M3.726 7.575l2.921 5.847.161 2.05a.114.114 0 01-.01.055l-.012.027L.02 8.821a.07.07 0 01.001-.1C1.064 7.747 2.3 7.365 3.726 7.576z"
fill="#A5CCFF"
fillOpacity=".647"
/>
</Svg>
);
});
Icon.displayName = 'BochaColor';
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,37 @@
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.98 2c2.351.265 3.905 1.955 3.987 4.31a.035.035 0 00.019.031.036.036 0 00.036-.001c5.432-3.05 12.168.3 12.921 6.48.31 2.535-.668 5.04-2.33 6.946-1.41 1.619-3.653 2.561-5.763 2.738h-.996c-3.945-.28-7.106-2.99-7.99-6.805a.302.302 0 00-.078-.145l.013-.027a.114.114 0 00.01-.055l-.162-2.05.014-8.569L6.666 2h.314zm14.102 17.852c-.32-.386-.527-.643-.62-.773-.74-1.011-1.058-2.195-.952-3.552.044-.57.296-1.117.263-1.744-.146-2.74-2.503-4.64-5.21-4.232-1.772.268-3.215 1.678-3.61 3.4a4.44 4.44 0 001.574 4.488c1.119.879 2.37 1.166 3.753.86.675-.15 1.04-.226 1.096-.23 1.126-.083 2.098.273 2.918 1.069.486.472.74.718.763.738a.017.017 0 00.024 0 .017.017 0 000-.024z"
fill={color}
/>
<Path
d="M6.661 4.854l-.014 8.568-2.921-5.847-1.488-3.048a.106.106 0 01.022-.124.11.11 0 01.037-.024c1.57-.602 3.025-.444 4.364.475z"
fill={color}
fillOpacity=".35"
/>
<Path
d="M3.726 7.575l2.921 5.847.161 2.05a.114.114 0 01-.01.055l-.012.027L.02 8.821a.07.07 0 01.001-.1C1.064 7.747 2.3 7.365 3.726 7.576z"
fill={color}
fillOpacity=".21"
/>
</Svg>
);
});
Icon.displayName = 'BochaMono';
export default Icon;
@@ -0,0 +1,31 @@
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 49 24"
width={size * 2.04} // 保持宽高比
{...rest}
>
<Path
d="M21.707 1.003l2.706 1.102a.04.04 0 01.024.027.04.04 0 01-.007.035l-.815 1.005a.04.04 0 00.031.066h1.381a.04.04 0 01.04.049l-.6 2.414a.04.04 0 01-.04.03h-5.486a.04.04 0 00-.038.032l-.156.628a.04.04 0 00.039.049h4.57a.04.04 0 01.038.049l-1.952 7.852a.04.04 0 01-.039.031h-2.876a.04.04 0 01-.039-.05l.187-.75a.04.04 0 00-.021-.047.04.04 0 00-.018-.004h-1.64a.04.04 0 00-.039.03l-.185.745a.04.04 0 01-.039.03h-2.897a.04.04 0 01-.038-.049l.174-.707a.04.04 0 00-.008-.034.04.04 0 00-.031-.015h-1.71a.04.04 0 00-.039.031l-.292 1.176a.04.04 0 01-.038.03H9.12a.04.04 0 01-.038-.048l2.048-8.24a.04.04 0 01.039-.031h4.555a.04.04 0 00.038-.031l.156-.629a.04.04 0 00-.007-.033.04.04 0 00-.031-.016h-5.418a.04.04 0 01-.031-.015.04.04 0 01-.008-.033l.599-2.415a.04.04 0 01.038-.03h5.463a.04.04 0 00.04-.031l.485-1.95a.04.04 0 01.038-.032h2.896a.04.04 0 01.038.05l-.47 1.9a.04.04 0 00.007.033.04.04 0 00.03.015l1.682-.03a.04.04 0 00.016-.078l-.945-.385a.04.04 0 01-.024-.026.04.04 0 01.007-.036l1.339-1.653a.04.04 0 01.045-.011zm-6.502 7.641a.052.052 0 00-.01-.045.052.052 0 00-.04-.02h-1.68a.053.053 0 00-.05.04l-.11.442a.052.052 0 00.01.045.053.053 0 00.04.021h1.68a.053.053 0 00.052-.04l.108-.443zm2.873.435a.04.04 0 000 .018.04.04 0 00.02.026c.005.003.011.004.017.004h1.639a.039.039 0 00.038-.03l.116-.47a.039.039 0 00-.02-.045.039.039 0 00-.017-.004h-1.639a.039.039 0 00-.037.03l-.117.471zm-3.482 2.002a.045.045 0 00-.044-.055H12.86a.045.045 0 00-.044.034l-.126.505a.044.044 0 00.008.04.045.045 0 00.036.017h1.694a.045.045 0 00.044-.035l.125-.506zm4.702-.009a.04.04 0 000-.017.04.04 0 00-.02-.026.039.039 0 00-.017-.004h-1.64a.038.038 0 00-.038.03l-.129.518a.038.038 0 00.008.033.039.039 0 00.03.015h1.64a.039.039 0 00.037-.03l.13-.519z"
fill={color}
/>
<Path
d="M10.348 6.857L9.62 9.79a.039.039 0 01-.038.03H7.551a.039.039 0 00-.038.03L4.251 22.97a.039.039 0 01-.038.03H1.038a.038.038 0 01-.03-.015.038.038 0 01-.007-.032L4.256 9.867a.039.039 0 00-.037-.047H2.007a.039.039 0 01-.038-.048l.729-2.933a.039.039 0 01.037-.03H5a.039.039 0 00.037-.029l1.374-5.525a.039.039 0 01.038-.03h3.176a.039.039 0 01.037.048L8.296 6.762a.039.039 0 00.038.048h1.977a.038.038 0 01.038.03.039.039 0 010 .017zM41.136 6.557a.042.042 0 00-.037.026.04.04 0 00.008.043 12.912 12.912 0 004.111 2.756c.494.21.944.392 1.351.546a.051.051 0 01.015.088c-.892.782-1.748 1.609-2.461 2.518a.027.027 0 01-.035.008l-1.83-1.057a.036.036 0 00-.033-.002.038.038 0 00-.014.01.04.04 0 00-.008.015l-1.9 7.072a.055.055 0 01-.053.043H26.657a.043.043 0 01-.04-.053l1.79-6.668a.045.045 0 00-.063-.053 7.314 7.314 0 01-1.887.64.093.093 0 01-.103-.05c-.46-.91-.969-1.804-1.65-2.605a.024.024 0 01-.004-.021.021.021 0 01.015-.015 20.664 20.664 0 006.853-3.427.022.022 0 00-.014-.04l-5.229.096a.022.022 0 01-.022-.027l.685-2.755a.093.093 0 01.092-.071h8.464a.046.046 0 00.045-.035l.564-2.266a.062.062 0 01.06-.047H39.4a.05.05 0 01.049.063l-.56 2.253a.026.026 0 000 .011c0 .004.002.008.005.01a.027.027 0 00.009.008.029.029 0 00.011.003h8.682a.047.047 0 01.045.058l-.684 2.749a.092.092 0 01-.088.07l-5.732.106zm-10.9 4.38l10.861-.202c.005 0 .01-.001.013-.004a.023.023 0 00.008-.011.023.023 0 00-.007-.026 12.544 12.544 0 01-2.99-3.336.058.058 0 00-.058-.027.061.061 0 00-.05.044l-.737 2.746a.113.113 0 01-.11.085h-3.16a.044.044 0 01-.035-.018.047.047 0 01-.008-.04l.66-2.456a.03.03 0 00-.014-.032.03.03 0 00-.035.002 25.931 25.931 0 01-4.355 3.214.033.033 0 00-.015.037.033.033 0 00.033.024zm7.958 2.081a.05.05 0 00-.027-.056.048.048 0 00-.021-.005H31.35a.049.049 0 00-.047.038l-.156.627a.048.048 0 00.01.042.049.049 0 00.038.018h6.795a.049.049 0 00.048-.037l.156-.627zm-.679 2.76a.042.042 0 00-.041-.052h-6.812a.042.042 0 00-.041.032l-.168.67a.043.043 0 00.008.037.042.042 0 00.033.016h6.813a.042.042 0 00.04-.032l.168-.67zM19.69 15.405h2.396a.054.054 0 01.052.067l-.632 2.545a.058.058 0 01-.055.043h-2.41a.078.078 0 00-.076.06 95.011 95.011 0 01-.705 2.772c-.305 1.066-.82 1.797-2.019 1.922-.956.1-1.935.067-2.939-.099a.073.073 0 01-.06-.067c-.05-.84-.1-1.707-.414-2.419a.072.072 0 00-.053-.042.072.072 0 00-.064.02l-1.258 1.257a.067.067 0 01-.093.003 28.356 28.356 0 00-2.783-2.23.079.079 0 01-.01-.12l1.012-1.011a.03.03 0 00.006-.031.026.026 0 00-.026-.017H6.807a.055.055 0 01-.054-.043.055.055 0 010-.025l.625-2.514a.094.094 0 01.092-.071h8.972a.12.12 0 00.116-.09l.133-.536a.11.11 0 01.107-.084h2.934a.055.055 0 01.044.021.055.055 0 01.01.048l-.144.579a.05.05 0 00.026.057.048.048 0 00.021.005zm-7.98 2.789l1.734 1.224a.063.063 0 01.022.073.063.063 0 01-.014.024l-.604.603a.032.032 0 00-.009.035.035.035 0 00.028.023c.654.11 1.33.135 2.028.078.206-.018.38-.134.524-.348a.143.143 0 00.023-.052l.431-1.733a.038.038 0 000-.017.04.04 0 00-.038-.03l-4.111.077a.023.023 0 00-.014.005.023.023 0 000 .038zM43.554 19.544l-.703 2.827a.043.043 0 01-.015.024.043.043 0 01-.027.009H22.454a.043.043 0 01-.034-.017.043.043 0 01-.008-.036l.705-2.828a.042.042 0 01.041-.032h20.354a.043.043 0 01.042.053z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'BochaText';
export default Icon;
@@ -0,0 +1,24 @@
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 = 'Bocha';
export const COMBINE_TEXT_MULTIPLE = 0.75;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#006EFF';
// Avatar constants
export const AVATAR_BACKGROUND = '#fff';
export const AVATAR_COLOR = COLOR_PRIMARY;
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,37 @@
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="M17.544 2.375c.017-.005 1.844-.5 2.712.361.872.872 1.588 1.642 1.588 1.642l-.565 1.38v-.003.006-.003L22 7.8c-.014.05-2.112 7.983-2.357 8.954-.488 1.924-.819 2.663-2.202 3.638a212.634 212.634 0 01-4.305 2.917c-.41.252-.92.691-1.383.691-.463 0-.974-.439-1.383-.691a213.099 213.099 0 01-4.306-2.917c-1.383-.975-1.72-1.714-2.2-3.632-.246-.977-2.35-8.904-2.364-8.96l.722-2.045-.566-1.383s.722-.764 1.594-1.63c.866-.872 2.712-.36 2.712-.36L8.066 0h7.373l2.105 2.375zm-5.797 12.557c-.138 0-1.04.318-1.762.691l-.457.234c-.487.253-.823.428-.956.506-.168.108-.066.306.09.414.15.103 2.195 1.684 2.394 1.865l.09.078c.186.168.432.391.607.391.174 0 .415-.223.607-.391l.084-.078c.2-.169 2.244-1.756 2.394-1.865.15-.108.258-.3.09-.408-.133-.084-.475-.253-.956-.506h-.006l-.457-.24c-.722-.373-1.623-.691-1.762-.691zm.006-11.276c-.35.02-.694.092-1.023.211l-.378.126c-.493.169-.969.331-1.21.331-.312 0-2.554-.428-2.584-.433 0 0-2.706 3.26-2.706 3.957 0 .577.228.805.504 1.07l.174.175 2.033 2.152.06.067c.204.204.5.498.29.998l-.043.102c-.228.535-.511 1.203-.15 1.876.384.716 1.046 1.19 1.467 1.118.42-.084 1.419-.601 1.78-.841.367-.229 1.52-1.19 1.521-1.551 0-.307-.829-.812-1.238-1.053l-.18-.12-.199-.12c-.367-.229-1.035-.644-1.047-.825-.018-.228-.017-.294.283-.853l.21-.379c.289-.487.602-1.029.536-1.426-.085-.433-.777-.685-1.36-.901l-.21-.078-.613-.229c-.583-.222-1.232-.463-1.34-.511-.145-.073-.11-.132.335-.174l.223-.025c.553-.06 1.582-.168 2.08-.03l.32.09c.564.145 1.25.337 1.316.445l.03.048c.067.09.109.145.037.53l-.121.607c-.15.806-.391 2.069-.421 2.351l-.012.115c-.042.312-.066.529.301.613.438.119.884.206 1.335.259.216 0 .824-.144 1.24-.24l.095-.025c.367-.078.343-.289.3-.602l-.011-.12c-.03-.282-.27-1.54-.42-2.345l-.122-.614c-.072-.384-.024-.439.036-.529l.03-.048c.067-.108.753-.294 1.318-.444l.318-.091c.5-.138 1.528-.03 2.081.03l.216.018c.451.048.493.108.343.18-.11.049-.758.29-1.341.512-.273.108-.547.21-.823.307-.583.216-1.275.468-1.36.907-.066.391.247.939.535 1.42l.21.379c.301.56.308.625.284.854-.012.18-.68.595-1.053.824l-.192.126-.181.108c-.41.247-1.238.758-1.238 1.059 0 .367 1.16 1.316 1.521 1.55.367.235 1.36.758 1.78.836.421.078 1.082-.396 1.467-1.112.36-.673.078-1.335-.15-1.876l-.042-.102c-.21-.5.084-.794.289-1.004l.065-.06 2.02-2.147.181-.181c.271-.265.505-.493.505-1.07 0-.698-2.706-3.957-2.706-3.957-.03.006-2.275.44-2.586.44l.007-.007c-.252 0-.722-.156-1.215-.337l-.379-.12c-.612-.21-1.02-.21-1.022-.21z"
fill={fill}
/>
<Defs>
<LinearGradient
gradientUnits="userSpaceOnUse"
id={id}
x1="1.506"
x2="22"
y1="24.174"
y2="24.174"
>
<Stop stopColor="#FF5601" />
<Stop offset="5%" stopColor="#FF4000" />
<Stop offset="100%" stopColor="#FF1F01" />
</LinearGradient>
</Defs>
</Svg>
);
});
Icon.displayName = 'BraveColor';
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="M17.544 2.375c.017-.005 1.844-.5 2.712.361.872.872 1.588 1.642 1.588 1.642l-.565 1.38v-.003.006-.003L22 7.8c-.014.05-2.112 7.983-2.357 8.954-.488 1.924-.819 2.663-2.202 3.638a212.634 212.634 0 01-4.305 2.917c-.41.252-.92.691-1.383.691-.463 0-.974-.439-1.383-.691a213.099 213.099 0 01-4.306-2.917c-1.383-.975-1.72-1.714-2.2-3.632-.246-.977-2.35-8.904-2.364-8.96l.722-2.045-.566-1.383s.722-.764 1.594-1.63c.866-.872 2.712-.36 2.712-.36L8.066 0h7.373l2.105 2.375zm-5.797 12.557c-.138 0-1.04.318-1.762.691l-.457.234c-.487.253-.823.428-.956.506-.168.108-.066.306.09.414.15.103 2.195 1.684 2.394 1.865l.09.078c.186.168.432.391.607.391.174 0 .415-.223.607-.391l.084-.078c.2-.169 2.244-1.756 2.394-1.865.15-.108.258-.3.09-.408-.133-.084-.475-.253-.956-.506h-.006l-.457-.24c-.722-.373-1.623-.691-1.762-.691zm.006-11.276c-.35.02-.694.092-1.023.211l-.378.126c-.493.169-.969.331-1.21.331-.312 0-2.554-.428-2.584-.433 0 0-2.706 3.26-2.706 3.957 0 .577.228.805.504 1.07l.174.175 2.033 2.152.06.067c.204.204.5.498.29.998l-.043.102c-.228.535-.511 1.203-.15 1.876.384.716 1.046 1.19 1.467 1.118.42-.084 1.419-.601 1.78-.841.367-.229 1.52-1.19 1.521-1.551 0-.307-.829-.812-1.238-1.053l-.18-.12-.199-.12c-.367-.229-1.035-.644-1.047-.825-.018-.228-.017-.294.283-.853l.21-.379c.289-.487.602-1.029.536-1.426-.085-.433-.777-.685-1.36-.901l-.21-.078-.613-.229c-.583-.222-1.232-.463-1.34-.511-.145-.073-.11-.132.335-.174l.223-.025c.553-.06 1.582-.168 2.08-.03l.32.09c.564.145 1.25.337 1.316.445l.03.048c.067.09.109.145.037.53l-.121.607c-.15.806-.391 2.069-.421 2.351l-.012.115c-.042.312-.066.529.301.613.438.119.884.206 1.335.259.216 0 .824-.144 1.24-.24l.095-.025c.367-.078.343-.289.3-.602l-.011-.12c-.03-.282-.27-1.54-.42-2.345l-.122-.614c-.072-.384-.024-.439.036-.529l.03-.048c.067-.108.753-.294 1.318-.444l.318-.091c.5-.138 1.528-.03 2.081.03l.216.018c.451.048.493.108.343.18-.11.049-.758.29-1.341.512-.273.108-.547.21-.823.307-.583.216-1.275.468-1.36.907-.066.391.247.939.535 1.42l.21.379c.301.56.308.625.284.854-.012.18-.68.595-1.053.824l-.192.126-.181.108c-.41.247-1.238.758-1.238 1.059 0 .367 1.16 1.316 1.521 1.55.367.235 1.36.758 1.78.836.421.078 1.082-.396 1.467-1.112.36-.673.078-1.335-.15-1.876l-.042-.102c-.21-.5.084-.794.289-1.004l.065-.06 2.02-2.147.181-.181c.271-.265.505-.493.505-1.07 0-.698-2.706-3.957-2.706-3.957-.03.006-2.275.44-2.586.44l.007-.007c-.252 0-.722-.156-1.215-.337l-.379-.12c-.612-.21-1.02-.21-1.022-.21z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'BraveMono';
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 82 24"
width={size * 3.42} // 保持宽高比
{...rest}
>
<Path
d="M8.296 5.93a6.727 6.727 0 013.19-.734 7.112 7.112 0 016.442 3.95 9.394 9.394 0 01.981 4.39c0 1.668-.32 3.135-.98 4.418a7.424 7.424 0 01-2.667 2.988 6.965 6.965 0 01-3.776 1.054 6.737 6.737 0 01-3.19-.715c-.916-.486-1.64-1.1-2.181-1.87v2.319H2V0h4.115v7.845A5.847 5.847 0 018.296 5.93zm5.82 5.068a4.189 4.189 0 00-7.396.046c-.403.724-.605 1.576-.605 2.557 0 .971.202 1.833.605 2.557.394.724.926 1.273 1.585 1.65a4.116 4.116 0 004.216 0 4.344 4.344 0 001.595-1.678c.403-.733.605-1.585.605-2.584 0-1.008-.202-1.833-.605-2.539v-.01zm12.217-5.04c.852-.487 1.823-.734 2.923-.734v4.317h-1.1c-1.283 0-2.254.302-2.914.916-.65.605-.98 1.659-.98 3.162v8.11h-4.116V5.463h4.115v2.52a5.773 5.773 0 012.072-2.025zm4.426 3.207a7.186 7.186 0 012.676-2.933 7.121 7.121 0 013.776-1.036 6.617 6.617 0 015.37 2.585V5.462h4.143v16.259h-4.142v-2.383a6.085 6.085 0 01-2.19 1.897 6.7 6.7 0 01-3.208.751 6.972 6.972 0 01-3.758-1.063 7.387 7.387 0 01-2.658-2.978c-.66-1.283-.99-2.75-.99-4.418 0-1.668.33-3.107.981-4.38v.018zm11.236 1.86a4.133 4.133 0 00-3.73-2.218 4.188 4.188 0 00-3.684 2.19c-.403.716-.605 1.559-.605 2.54 0 .98.202 1.832.605 2.566.403.733.926 1.301 1.585 1.695a4.033 4.033 0 002.1.587c.732 0 1.475-.193 2.144-.578a4.134 4.134 0 001.585-1.65c.385-.705.587-1.557.587-2.566 0-.99-.202-1.85-.587-2.566zm14.352 6.92l4.125-12.483h4.371l-6.021 16.259h-4.995L47.824 5.462h4.4l4.123 12.483zm24.058-3.116H68.518c.092 1.173.504 2.098 1.228 2.758a3.794 3.794 0 002.677 1.008c1.52 0 2.611-.66 3.253-1.98h4.436a7.395 7.395 0 01-2.695 3.868 7.882 7.882 0 01-4.912 1.513c-1.558 0-2.97-.349-4.216-1.045A7.332 7.332 0 0165.384 18a9.037 9.037 0 01-1.036-4.4c0-1.667.34-3.17 1.027-4.435a7.148 7.148 0 012.877-2.933 8.624 8.624 0 014.253-1.036c1.604 0 2.933.33 4.16 1.009a7.038 7.038 0 012.842 2.822 8.597 8.597 0 011.017 4.216c0 .587-.037 1.118-.119 1.586zm-4.142-2.759a3.253 3.253 0 00-1.146-2.539 4.051 4.051 0 00-2.722-.953c-1.026 0-1.879.303-2.566.917a4.05 4.05 0 00-1.283 2.566h7.726l-.01.01z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'BraveText';
export default Icon;
@@ -0,0 +1,24 @@
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 = 'Brave';
export const COMBINE_TEXT_MULTIPLE = 0.75;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#FF4000';
// Avatar constants
export const AVATAR_BACKGROUND = '#fff';
export const AVATAR_COLOR = COLOR_PRIMARY;
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,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="M24 1.384L23.988 22.6a.34.34 0 00-.099.203c-.025.01-.038.029-.038.057l-.178.123c-.112.073-.288.054-.493.054a19172.166 19172.166 0 00-22.442 0c-.556.002-.737-.133-.737-.673V1.496c0-.129.03-.237.089-.325a.539.539 0 01.407-.17h22.448c.153.001.368.006.644.015.048.002.123.036.224.103.014.01.027.022.036.036l.151.23zM2.854 3.13c.07-.312.016-.6-.165-.866a.712.712 0 00-.525-.383c-.383-.071-.696.017-.939.265-.357.365-.427.931-.078 1.328.367.42.806.496 1.316.228a.725.725 0 00.391-.572zm2.933-.274a1 1 0 10-2.001 0 1 1 0 002 0zm2.878-.004a1.001 1.001 0 10-2.002 0 1.001 1.001 0 002.002 0zm14.353 1.99a.063.063 0 00-.063-.064H1.028a.063.063 0 00-.063.063v17.17a.064.064 0 00.063.063h21.927a.063.063 0 00.063-.064V4.84z"
fill={color}
/>
<Path
d="M10.979 15.344c-1.397.008-2.794.01-4.192.004-.17 0-.29-.012-.364-.034-.323-.209-.385-.456-.186-.743.27-.388.525-.825.773-1.142.24-.309.44-.667.662-.996.238-.35.663-.951.97-1.44.108-.173.247-.378.416-.615.173-.242.37-.544.679-.424a.517.517 0 01.227.197c.18.256.364.506.49.708.14.228.264.419.372.573.446.64.838 1.226 1.175 1.76.052.081.142.17.194.25.35.537.604.915.76 1.135a.506.506 0 01.099.277c.017.355-.293.478-.593.479-.494 0-.988.005-1.482.01z"
fill={color}
/>
<Path
d="M11.001 16.511c-.092-.086-.125-.151-.1-.194.573.024 1.145.031 1.713.022.114-.002.218-.012.313-.03.147-.03.248-.06.303-.09.466-.252.743-.63.83-1.135l.003-.363a.52.52 0 00-.043-.304 2.57 2.57 0 00-.395-.643l-.482-.733-.72-1.096a.047.047 0 01.016-.067c.164-.094.292-.15.386-.168.057-.011.138-.033.244-.066.093-.03.175-.048.244-.056.435-.05.83-.05 1.183.003.478.07.924.258 1.34.562.314.23.544.45.69.66.108.158.221.341.339.551.105.188.186.387.242.598.143.534.158 1.074.045 1.62-.02.104-.04.176-.058.216-.047.108-.048.184-.093.283-.236.517-.57 1.051-1.037 1.384-.336.24-.62.406-.852.497-.164.066-.455.16-.685.181-.117.011-.241.03-.371.055a.502.502 0 01-.127.009 5.841 5.841 0 01-.759-.095 2.608 2.608 0 01-.749-.276 4.305 4.305 0 01-.678-.434c-.246-.208-.493-.505-.742-.89z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'BrowserlessMono';
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 = 'Browserless';
export const COMBINE_TEXT_MULTIPLE = 0.75;
export const COMBINE_SPACE_MULTIPLE = 0.3;
export const COLOR_PRIMARY = '#fff';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#000';
export const AVATAR_ICON_MULTIPLE = 0.65;
@@ -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,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="M14.498 18.392h-5.14c-1.39 0-1.632-1.508-1.39-2.11.12-.302.423-.724.664-1.026a6.81 6.81 0 003.326.845 6.945 6.945 0 006.954-6.935c0-2.05-.907-3.86-2.298-5.186l.181-.181c.363-.362.907-.603 1.451-.543l.847.06V0h-1.451c-1.693 0-3.084 1.025-3.689 2.472a6.83 6.83 0 00-1.934-.301 6.945 6.945 0 00-6.954 6.935c0 1.507.484 2.954 1.33 4.1a1.84 1.84 0 01-.423.302l-.181.18c-1.391 1.327-2.056 3.015-1.693 4.945.181 1.025 1.088 2.11 1.995 2.714.605.422 1.39.603 2.177.603l5.804-.242c.665 0 1.27.302 1.633.905L16.432 24 20 22.794l-.605-1.327a5.425 5.425 0 00-4.897-3.075zm-2.48-12.543c1.814 0 3.326 1.508 3.326 3.317 0 1.809-1.512 3.316-3.325 3.316-1.814 0-3.326-1.507-3.326-3.316 0-1.87 1.451-3.317 3.325-3.317z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'KagiMono';
export default Icon;
@@ -0,0 +1,31 @@
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 47 24"
width={size * 1.96} // 保持宽高比
{...rest}
>
<Path
d="M41.856 16.824v.983h2.879V6.357h-2.879v10.467zM43.27 4.735a1.86 1.86 0 001.855-1.868A1.86 1.86 0 0043.27 1a1.86 1.86 0 00-1.854 1.867 1.86 1.86 0 001.854 1.868zM35.514 19.43h-4.146c-1.122 0-1.317-1.23-1.122-1.72.097-.246.341-.59.536-.836.781.442 1.708.688 2.683.688 3.123 0 5.61-2.556 5.61-5.652 0-1.67-.731-3.145-1.853-4.226l.146-.147c.293-.295.732-.492 1.17-.443l.684.05V4.44h-1.17c-1.367 0-2.489.836-2.977 2.015a5.46 5.46 0 00-1.56-.245c-3.123 0-5.61 2.555-5.61 5.651 0 1.229.39 2.408 1.072 3.342a1.484 1.484 0 01-.341.246l-.146.147c-1.122 1.081-1.659 2.457-1.366 4.03.146.835.878 1.72 1.61 2.212.487.344 1.122.491 1.756.491l4.683-.197c.537 0 1.024.246 1.317.738l.585 1.13 2.879-.983-.488-1.081c-.732-1.524-2.244-2.507-3.952-2.507zm-2-10.223c1.464 0 2.683 1.229 2.683 2.703 0 1.475-1.22 2.703-2.683 2.703-1.463 0-2.683-1.228-2.683-2.703 0-1.523 1.17-2.703 2.683-2.703zM19.172 6.16c-2.927.147-5.366 2.506-5.561 5.454-.244 3.49 2.488 6.39 5.854 6.39 1.122 0 2.146-.64 3.024-1.18v1.032h2.878V11.86c-.146-3.293-2.878-5.848-6.195-5.7zm.293 9.091c-1.757 0-3.122-1.425-3.122-3.145a3.124 3.124 0 013.122-3.145c1.756 0 3.122 1.425 3.122 3.145.049 1.72-1.366 3.145-3.122 3.145z"
fill={color}
/>
<Path
d="M13.66 6.357H9.61L6.098 9.895l-1.22 1.229V4.342H2v13.515h2.878v-5.062l1.22 1.228v-.049l3.805 3.883h4.049l-6.196-5.898 5.903-5.602z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'KagiText';
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 = 'Kagi';
export const COMBINE_TEXT_MULTIPLE = 1;
export const COMBINE_SPACE_MULTIPLE = 0.3;
export const COLOR_PRIMARY = '#FEB219';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#000';
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,26 @@
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.638 4.38a5.35 5.35 0 017.747 3.963 5.35 5.35 0 01-.56 3.284l-1.154-.61A4.044 4.044 0 007.237 5.54l-.6-1.158z"
fill="#3050FF"
/>
<Path
clipRule="evenodd"
d="M9.13 0a9.13 9.13 0 017.992 13.546l6.803 6.515-3.4 3.551-6.853-6.562A9.13 9.13 0 119.13 0zm0 2.61a6.521 6.521 0 100 13.042 6.521 6.521 0 000-13.043z"
fill="#3050FF"
fillRule="evenodd"
/>
</Svg>
);
});
Icon.displayName = 'SearXNGColor';
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
d="M6.638 4.38a5.35 5.35 0 017.747 3.963 5.35 5.35 0 01-.56 3.284l-1.154-.61A4.044 4.044 0 007.237 5.54l-.6-1.158z"
fill={color}
/>
<Path
clipRule="evenodd"
d="M9.13 0a9.13 9.13 0 017.992 13.546l6.803 6.515-3.4 3.551-6.853-6.562A9.13 9.13 0 119.13 0zm0 2.61a6.521 6.521 0 100 13.042 6.521 6.521 0 000-13.043z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'SearXNGMono';
export default Icon;
File diff suppressed because one or more lines are too long
@@ -0,0 +1,24 @@
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 = 'SearXNG';
export const COMBINE_TEXT_MULTIPLE = 0.75;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#3050FF';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
export const AVATAR_ICON_MULTIPLE = 0.7;
+9
View File
@@ -32,6 +32,7 @@ export {
type CompoundedIcon as AlibabaCloudProps,
} from './icons/AlibabaCloud';
export { default as Amp, type CompoundedIcon as AmpProps } from './icons/Amp';
export { default as Anspire, type CompoundedIcon as AnspireProps } from './icons/Anspire';
export { default as AntGroup, type CompoundedIcon as AntGroupProps } from './icons/AntGroup';
export { default as Anthropic, type CompoundedIcon as AnthropicProps } from './icons/Anthropic';
export {
@@ -64,7 +65,13 @@ export {
type CompoundedIcon as BilibiliIndexProps,
} from './icons/BilibiliIndex';
export { default as Bing, type CompoundedIcon as BingProps } from './icons/Bing';
export { default as Bocha, type CompoundedIcon as BochaProps } from './icons/Bocha';
export { default as Brave, type CompoundedIcon as BraveProps } from './icons/Brave';
export { default as BriaAI, type CompoundedIcon as BriaAIProps } from './icons/BriaAI';
export {
default as Browserless,
type CompoundedIcon as BrowserlessProps,
} from './icons/Browserless';
export { default as BurnCloud, type CompoundedIcon as BurnCloudProps } from './icons/BurnCloud';
export { default as ByteDance, type CompoundedIcon as ByteDanceProps } from './icons/ByteDance';
export { default as CapCut, type CompoundedIcon as CapCutProps } from './icons/CapCut';
@@ -203,6 +210,7 @@ export { default as InternLM, type CompoundedIcon as InternLMProps } from './ico
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 Kagi, type CompoundedIcon as KagiProps } from './icons/Kagi';
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 Kiro, type CompoundedIcon as KiroProps } from './icons/Kiro';
@@ -312,6 +320,7 @@ export { default as Rwkv, type CompoundedIcon as RwkvProps } from './icons/Rwkv'
export { default as SambaNova, type CompoundedIcon as SambaNovaProps } from './icons/SambaNova';
export { default as Search1API, type CompoundedIcon as Search1APIProps } from './icons/Search1API';
export { default as SearchApi, type CompoundedIcon as SearchApiProps } from './icons/SearchApi';
export { default as SearXNG, type CompoundedIcon as SearXNGProps } from './icons/SearXNG';
export { default as SenseNova, type CompoundedIcon as SenseNovaProps } from './icons/SenseNova';
export {
default as SiliconCloud,
+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;
+28
View File
@@ -0,0 +1,28 @@
'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="M20.531 3.736A2.146 2.146 0 0018.419 2h-3.838c-1.071 0-2.07.54-2.65 1.435L.023 21.78a.142.142 0 00.12.22h3.6c.097 0 .188-.05.24-.131l3.547-5.492h6.274c1.46 0 2.73-.996 3.067-2.407l.167-.695.002-.01a.14.14 0 00-.139-.161H9.644l4.935-7.643a.861.861 0 01.724-.393h1.225c.276 0 .512.194.563.463l3.105 16.237a.286.286 0 00.281.232h3.38c.009 0 .018 0 .026-.003a.142.142 0 00.114-.166L20.531 3.736z"
fill="#514BFD"
/>
</svg>
);
});
export default Icon;
+28
View File
@@ -0,0 +1,28 @@
'use client';
import { memo } from 'react';
import IconCombine, { type IconCombineProps } from '@/features/IconCombine';
import { COMBINE_SPACE_MULTIPLE, COMBINE_TEXT_MULTIPLE, TITLE } from '../style';
import TextMono from './Text';
import TextColor from './TextColor';
export interface CombineProps extends Omit<IconCombineProps, 'Icon' | 'Text'> {
type?: 'color' | 'mono';
}
const Combine = memo<CombineProps>(({ type = 'mono', ...rest }) => {
const Text = type === 'color' ? TextColor : TextMono;
return (
<IconCombine
Text={Text}
aria-label={TITLE}
spaceMultiple={COMBINE_SPACE_MULTIPLE}
textMultiple={COMBINE_TEXT_MULTIPLE}
{...rest}
/>
);
});
export default Combine;
+27
View File
@@ -0,0 +1,27 @@
'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="M20.531 3.736A2.146 2.146 0 0018.419 2h-3.838c-1.071 0-2.07.54-2.65 1.435L.023 21.78a.142.142 0 00.12.22h3.6c.097 0 .188-.05.24-.131l3.547-5.492h6.274c1.46 0 2.73-.996 3.067-2.407l.167-.695.002-.01a.14.14 0 00-.139-.161H9.644l4.935-7.643a.861.861 0 01.724-.393h1.225c.276 0 .512.194.563.463l3.105 16.237a.286.286 0 00.281.232h3.38c.009 0 .018 0 .026-.003a.142.142 0 00.114-.166L20.531 3.736z" />
</svg>
);
});
export default Icon;
+27
View File
@@ -0,0 +1,27 @@
'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 106 24"
xmlns="http://www.w3.org/2000/svg"
{...rest}
>
<title>{TITLE}</title>
<path d="M60.467 6.88a.122.122 0 01.12.147l-.232 1.087a3.665 3.665 0 012.746-1.234h5.125a1.835 1.835 0 011.8 2.204l-1.542 7.34a3.43 3.43 0 01-3.36 2.716h-7.117l-.615 2.885a2.45 2.45 0 01-2.4 1.934H53.78a.122.122 0 01-.12-.148l3.565-16.738a.245.245 0 01.24-.193h3.002zm-5.947 0a.17.17 0 01.17.194l-.003.012-.165.765a1.837 1.837 0 01-1.799 1.444h-7.439c-.478 0-.89.333-.99.799a.858.858 0 00.623 1.007l6.194 1.63a2.44 2.44 0 011.775 2.849l-.172.83a3.43 3.43 0 01-3.363 2.73H39.187a.122.122 0 01-.12-.148l.45-2.075a.245.245 0 01.24-.192h8.629c.543 0 1.01-.385 1.112-.916a1.007 1.007 0 00-.728-1.16l-5.15-1.393v.002l-.877-.217a2.44 2.44 0 01-1.808-2.873l.124-.58a3.43 3.43 0 013.359-2.708H54.52zm11.503 2.415h-3.955a2.452 2.452 0 00-2.309 1.617l-1.238 5.813h5.36c.698 0 1.3-.488 1.441-1.168l1.181-5.675a.488.488 0 00-.48-.587zM29.197 6.88a.122.122 0 01.12.147l-.182.86a2.986 2.986 0 012.24-1.007h5.58a1.835 1.835 0 011.801 2.204l-1.807 8.6a1.837 1.837 0 01-1.8 1.456h-1.705a.122.122 0 01-.12-.147l1.908-9.11a.488.488 0 00-.48-.588h-3.93c-1.096 0-2.05.722-2.354 1.754l-1.665 7.897a.245.245 0 01-.24.194h-3.087a.061.061 0 01-.06-.073l2.53-11.993a.245.245 0 01.24-.194h3.01zm53.834 0a.122.122 0 01.12.147l-.18.856a3.233 3.233 0 012.343-1.003h4.522a.122.122 0 01.12.148l-.013.058-.063.289a2.45 2.45 0 01-2.397 1.924H84.67a2.514 2.514 0 00-2.325 1.55l-1.708 8.097a.245.245 0 01-.24.194h-3.012a.122.122 0 01-.12-.147l2.514-11.92a.245.245 0 01.24-.193h3.012zm18.149 9.82a.122.122 0 01.119.148l-.031.149-.046.212a2.45 2.45 0 01-2.399 1.931h-8.488a1.468 1.468 0 01-1.44-1.77l.052-.24.051-.237a.245.245 0 01.24-.193h11.942zM99.153 11.7a.122.122 0 01.119.15l-.47 1.98a.245.245 0 01-.24.187h-8.664a.122.122 0 01-.12-.15l.47-1.98a.245.245 0 01.24-.187h8.665zm4.724-4.82a.122.122 0 01.12.148l-.033.155-.045.208a2.45 2.45 0 01-2.398 1.93H90.875a.122.122 0 01-.12-.148l.063-.291.119-.554a1.837 1.837 0 011.799-1.447h11.141z" />
<path d="M16.76 2c.883 0 1.642.625 1.807 1.488l2.966 15.507a.122.122 0 01-.12.145H18.52a.245.245 0 01-.24-.199L15.623 5.026a.49.49 0 00-.482-.397h-1.048a.737.737 0 00-.62.337l-4.222 6.55h6.209a.12.12 0 01.119.137l-.002.01-.143.596a2.695 2.695 0 01-2.624 2.062H7.443l-3.034 4.707a.246.246 0 01-.207.112h-3.08a.122.122 0 01-.102-.188L11.209 3.23A2.701 2.701 0 0113.476 2h3.284zm60.137 5.027l-2.514 11.919a.245.245 0 01-.24.194H71.13a.122.122 0 01-.12-.147l2.514-11.92a.245.245 0 01.24-.193h3.012a.122.122 0 01.12.147zm.915-4.328l-.582 2.468a.245.245 0 01-.239.188h-2.913a.122.122 0 01-.12-.15l.296-1.253a1.826 1.826 0 011.78-1.403h1.659a.122.122 0 01.12.15z" />
</svg>
);
});
export default Icon;
+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 106 24"
xmlns="http://www.w3.org/2000/svg"
{...rest}
>
<title>{TITLE}</title>
<path d="M60.467 6.88a.122.122 0 01.12.147l-.232 1.087a3.665 3.665 0 012.746-1.234h5.125a1.835 1.835 0 011.8 2.204l-1.542 7.34a3.43 3.43 0 01-3.36 2.716h-7.117l-.615 2.885a2.45 2.45 0 01-2.4 1.934H53.78a.122.122 0 01-.12-.148l3.565-16.738a.245.245 0 01.24-.193h3.002zm-5.947 0a.17.17 0 01.17.194l-.003.012-.165.765a1.837 1.837 0 01-1.799 1.444h-7.439c-.478 0-.89.333-.99.799a.858.858 0 00.623 1.007l6.194 1.63a2.44 2.44 0 011.775 2.849l-.172.83a3.43 3.43 0 01-3.363 2.73H39.187a.122.122 0 01-.12-.148l.45-2.075a.245.245 0 01.24-.192h8.629c.543 0 1.01-.385 1.112-.916a1.007 1.007 0 00-.728-1.16l-5.15-1.393v.002l-.877-.217a2.44 2.44 0 01-1.808-2.873l.124-.58a3.43 3.43 0 013.359-2.708H54.52zm11.503 2.415h-3.955a2.452 2.452 0 00-2.309 1.617l-1.238 5.813h5.36c.698 0 1.3-.488 1.441-1.168l1.181-5.675a.488.488 0 00-.48-.587zM29.197 6.88a.122.122 0 01.12.147l-.182.86a2.986 2.986 0 012.24-1.007h5.58a1.835 1.835 0 011.801 2.204l-1.807 8.6a1.837 1.837 0 01-1.8 1.456h-1.705a.122.122 0 01-.12-.147l1.908-9.11a.488.488 0 00-.48-.588h-3.93c-1.096 0-2.05.722-2.354 1.754l-1.665 7.897a.245.245 0 01-.24.194h-3.087a.061.061 0 01-.06-.073l2.53-11.993a.245.245 0 01.24-.194h3.01zm53.834 0a.122.122 0 01.12.147l-.18.856a3.233 3.233 0 012.343-1.003h4.522a.122.122 0 01.12.148l-.013.058-.063.289a2.45 2.45 0 01-2.397 1.924H84.67a2.514 2.514 0 00-2.325 1.55l-1.708 8.097a.245.245 0 01-.24.194h-3.012a.122.122 0 01-.12-.147l2.514-11.92a.245.245 0 01.24-.193h3.012zm18.149 9.82a.122.122 0 01.119.148l-.031.149-.046.212a2.45 2.45 0 01-2.399 1.931h-8.488a1.468 1.468 0 01-1.44-1.77l.052-.24.051-.237a.245.245 0 01.24-.193h11.942zM99.153 11.7a.122.122 0 01.119.15l-.47 1.98a.245.245 0 01-.24.187h-8.664a.122.122 0 01-.12-.15l.47-1.98a.245.245 0 01.24-.187h8.665zm4.724-4.82a.122.122 0 01.12.148l-.033.155-.045.208a2.45 2.45 0 01-2.398 1.93H90.875a.122.122 0 01-.12-.148l.063-.291.119-.554a1.837 1.837 0 011.799-1.447h11.141z" />
<path
d="M16.76 2c.883 0 1.642.625 1.807 1.488l2.966 15.507a.122.122 0 01-.12.145H18.52a.245.245 0 01-.24-.199L15.623 5.026a.49.49 0 00-.482-.397h-1.048a.737.737 0 00-.62.337l-4.222 6.55h6.209a.12.12 0 01.119.137l-.002.01-.143.596a2.695 2.695 0 01-2.624 2.062H7.443l-3.034 4.707a.246.246 0 01-.207.112h-3.08a.122.122 0 01-.102-.188L11.209 3.23A2.701 2.701 0 0113.476 2h3.284zm60.137 5.027l-2.514 11.919a.245.245 0 01-.24.194H71.13a.122.122 0 01-.12-.147l2.514-11.92a.245.245 0 01.24-.193h3.012a.122.122 0 01.12.147zm.915-4.328l-.582 2.468a.245.245 0 01-.239.188h-2.913a.122.122 0 01-.12-.15l.296-1.253a1.826 1.826 0 011.78-1.403h1.659a.122.122 0 01.12.15z"
fill="#514BFD"
/>
</svg>
);
});
export default Icon;
+72
View File
@@ -0,0 +1,72 @@
---
nav: Components
group: Provider
title: Anspire
atomId: Anspire
description: https://anspire.ai
---
## Icons
```tsx
import { Anspire } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} horizontal>
<Anspire size={64} />
<Anspire.Color size={64} />
</Flexbox>
);
```
## Text
```tsx
import { Anspire } from '@lobehub/icons';
export default () => <Anspire.Text size={48} />;
```
## Combine
```tsx
import { Anspire } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} align={'flex-start'}>
<Anspire.Combine size={64} />
<Anspire.Combine type={'color'} size={64} />
</Flexbox>
);
```
## Avatars
```tsx
import { Anspire } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} horizontal>
<Anspire.Avatar size={64} />
<Anspire.Avatar size={64} shape={'square'} />
</Flexbox>
);
```
## Colors
```tsx
import { Anspire } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
import ColorPreview from '../components/ColorPreview';
export default () => (
<Flexbox gap={16} horizontal>
<ColorPreview color={Anspire.colorPrimary} />
</Flexbox>
);
```
+24
View File
@@ -0,0 +1,24 @@
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 = 'Anspire';
export const COMBINE_TEXT_MULTIPLE = 1;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#514BFD';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
export const AVATAR_ICON_MULTIPLE = 0.65;
+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;
+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="M6.98 2c2.351.265 3.905 1.955 3.987 4.31a.035.035 0 00.019.031.036.036 0 00.036-.001c5.432-3.05 12.168.3 12.921 6.48.31 2.535-.668 5.04-2.33 6.946-1.41 1.619-3.653 2.561-5.763 2.738h-.996c-3.945-.28-7.106-2.99-7.99-6.805a.302.302 0 00-.078-.145l.013-.027a.114.114 0 00.01-.055l-.162-2.05.014-8.569L6.666 2h.314zm14.102 17.852c-.32-.386-.527-.643-.62-.773-.74-1.011-1.058-2.195-.952-3.552.044-.57.296-1.117.263-1.744-.146-2.74-2.503-4.64-5.21-4.232-1.772.268-3.215 1.678-3.61 3.4a4.44 4.44 0 001.574 4.488c1.119.879 2.37 1.166 3.753.86.675-.15 1.04-.226 1.096-.23 1.126-.083 2.098.273 2.918 1.069.486.472.74.718.763.738a.017.017 0 00.024 0 .017.017 0 000-.024z"
fill="#006EFF"
/>
<path
d="M6.661 4.854l-.014 8.568-2.921-5.847-1.488-3.048a.106.106 0 01.022-.124.11.11 0 01.037-.024c1.57-.602 3.025-.444 4.364.475z"
fill="#A5CCFF"
/>
<path
d="M3.726 7.575l2.921 5.847.161 2.05a.114.114 0 01-.01.055l-.012.027L.02 8.821a.07.07 0 01.001-.1C1.064 7.747 2.3 7.365 3.726 7.576z"
fill="#A5CCFF"
fillOpacity=".647"
/>
</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;
+35
View File
@@ -0,0 +1,35 @@
'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="M6.98 2c2.351.265 3.905 1.955 3.987 4.31a.035.035 0 00.019.031.036.036 0 00.036-.001c5.432-3.05 12.168.3 12.921 6.48.31 2.535-.668 5.04-2.33 6.946-1.41 1.619-3.653 2.561-5.763 2.738h-.996c-3.945-.28-7.106-2.99-7.99-6.805a.302.302 0 00-.078-.145l.013-.027a.114.114 0 00.01-.055l-.162-2.05.014-8.569L6.666 2h.314zm14.102 17.852c-.32-.386-.527-.643-.62-.773-.74-1.011-1.058-2.195-.952-3.552.044-.57.296-1.117.263-1.744-.146-2.74-2.503-4.64-5.21-4.232-1.772.268-3.215 1.678-3.61 3.4a4.44 4.44 0 001.574 4.488c1.119.879 2.37 1.166 3.753.86.675-.15 1.04-.226 1.096-.23 1.126-.083 2.098.273 2.918 1.069.486.472.74.718.763.738a.017.017 0 00.024 0 .017.017 0 000-.024z" />
<path
d="M6.661 4.854l-.014 8.568-2.921-5.847-1.488-3.048a.106.106 0 01.022-.124.11.11 0 01.037-.024c1.57-.602 3.025-.444 4.364.475z"
fillOpacity=".35"
/>
<path
d="M3.726 7.575l2.921 5.847.161 2.05a.114.114 0 01-.01.055l-.012.027L.02 8.821a.07.07 0 01.001-.1C1.064 7.747 2.3 7.365 3.726 7.576z"
fillOpacity=".21"
/>
</svg>
);
});
export default Icon;
+27
View File
@@ -0,0 +1,27 @@
'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 49 24"
xmlns="http://www.w3.org/2000/svg"
{...rest}
>
<title>{TITLE}</title>
<path d="M21.707 1.003l2.706 1.102a.04.04 0 01.024.027.04.04 0 01-.007.035l-.815 1.005a.04.04 0 00.031.066h1.381a.04.04 0 01.04.049l-.6 2.414a.04.04 0 01-.04.03h-5.486a.04.04 0 00-.038.032l-.156.628a.04.04 0 00.039.049h4.57a.04.04 0 01.038.049l-1.952 7.852a.04.04 0 01-.039.031h-2.876a.04.04 0 01-.039-.05l.187-.75a.04.04 0 00-.021-.047.04.04 0 00-.018-.004h-1.64a.04.04 0 00-.039.03l-.185.745a.04.04 0 01-.039.03h-2.897a.04.04 0 01-.038-.049l.174-.707a.04.04 0 00-.008-.034.04.04 0 00-.031-.015h-1.71a.04.04 0 00-.039.031l-.292 1.176a.04.04 0 01-.038.03H9.12a.04.04 0 01-.038-.048l2.048-8.24a.04.04 0 01.039-.031h4.555a.04.04 0 00.038-.031l.156-.629a.04.04 0 00-.007-.033.04.04 0 00-.031-.016h-5.418a.04.04 0 01-.031-.015.04.04 0 01-.008-.033l.599-2.415a.04.04 0 01.038-.03h5.463a.04.04 0 00.04-.031l.485-1.95a.04.04 0 01.038-.032h2.896a.04.04 0 01.038.05l-.47 1.9a.04.04 0 00.007.033.04.04 0 00.03.015l1.682-.03a.04.04 0 00.016-.078l-.945-.385a.04.04 0 01-.024-.026.04.04 0 01.007-.036l1.339-1.653a.04.04 0 01.045-.011zm-6.502 7.641a.052.052 0 00-.01-.045.052.052 0 00-.04-.02h-1.68a.053.053 0 00-.05.04l-.11.442a.052.052 0 00.01.045.053.053 0 00.04.021h1.68a.053.053 0 00.052-.04l.108-.443zm2.873.435a.04.04 0 000 .018.04.04 0 00.02.026c.005.003.011.004.017.004h1.639a.039.039 0 00.038-.03l.116-.47a.039.039 0 00-.02-.045.039.039 0 00-.017-.004h-1.639a.039.039 0 00-.037.03l-.117.471zm-3.482 2.002a.045.045 0 00-.044-.055H12.86a.045.045 0 00-.044.034l-.126.505a.044.044 0 00.008.04.045.045 0 00.036.017h1.694a.045.045 0 00.044-.035l.125-.506zm4.702-.009a.04.04 0 000-.017.04.04 0 00-.02-.026.039.039 0 00-.017-.004h-1.64a.038.038 0 00-.038.03l-.129.518a.038.038 0 00.008.033.039.039 0 00.03.015h1.64a.039.039 0 00.037-.03l.13-.519z" />
<path d="M10.348 6.857L9.62 9.79a.039.039 0 01-.038.03H7.551a.039.039 0 00-.038.03L4.251 22.97a.039.039 0 01-.038.03H1.038a.038.038 0 01-.03-.015.038.038 0 01-.007-.032L4.256 9.867a.039.039 0 00-.037-.047H2.007a.039.039 0 01-.038-.048l.729-2.933a.039.039 0 01.037-.03H5a.039.039 0 00.037-.029l1.374-5.525a.039.039 0 01.038-.03h3.176a.039.039 0 01.037.048L8.296 6.762a.039.039 0 00.038.048h1.977a.038.038 0 01.038.03.039.039 0 010 .017zM41.136 6.557a.042.042 0 00-.037.026.04.04 0 00.008.043 12.912 12.912 0 004.111 2.756c.494.21.944.392 1.351.546a.051.051 0 01.015.088c-.892.782-1.748 1.609-2.461 2.518a.027.027 0 01-.035.008l-1.83-1.057a.036.036 0 00-.033-.002.038.038 0 00-.014.01.04.04 0 00-.008.015l-1.9 7.072a.055.055 0 01-.053.043H26.657a.043.043 0 01-.04-.053l1.79-6.668a.045.045 0 00-.063-.053 7.314 7.314 0 01-1.887.64.093.093 0 01-.103-.05c-.46-.91-.969-1.804-1.65-2.605a.024.024 0 01-.004-.021.021.021 0 01.015-.015 20.664 20.664 0 006.853-3.427.022.022 0 00-.014-.04l-5.229.096a.022.022 0 01-.022-.027l.685-2.755a.093.093 0 01.092-.071h8.464a.046.046 0 00.045-.035l.564-2.266a.062.062 0 01.06-.047H39.4a.05.05 0 01.049.063l-.56 2.253a.026.026 0 000 .011c0 .004.002.008.005.01a.027.027 0 00.009.008.029.029 0 00.011.003h8.682a.047.047 0 01.045.058l-.684 2.749a.092.092 0 01-.088.07l-5.732.106zm-10.9 4.38l10.861-.202c.005 0 .01-.001.013-.004a.023.023 0 00.008-.011.023.023 0 00-.007-.026 12.544 12.544 0 01-2.99-3.336.058.058 0 00-.058-.027.061.061 0 00-.05.044l-.737 2.746a.113.113 0 01-.11.085h-3.16a.044.044 0 01-.035-.018.047.047 0 01-.008-.04l.66-2.456a.03.03 0 00-.014-.032.03.03 0 00-.035.002 25.931 25.931 0 01-4.355 3.214.033.033 0 00-.015.037.033.033 0 00.033.024zm7.958 2.081a.05.05 0 00-.027-.056.048.048 0 00-.021-.005H31.35a.049.049 0 00-.047.038l-.156.627a.048.048 0 00.01.042.049.049 0 00.038.018h6.795a.049.049 0 00.048-.037l.156-.627zm-.679 2.76a.042.042 0 00-.041-.052h-6.812a.042.042 0 00-.041.032l-.168.67a.043.043 0 00.008.037.042.042 0 00.033.016h6.813a.042.042 0 00.04-.032l.168-.67zM19.69 15.405h2.396a.054.054 0 01.052.067l-.632 2.545a.058.058 0 01-.055.043h-2.41a.078.078 0 00-.076.06 95.011 95.011 0 01-.705 2.772c-.305 1.066-.82 1.797-2.019 1.922-.956.1-1.935.067-2.939-.099a.073.073 0 01-.06-.067c-.05-.84-.1-1.707-.414-2.419a.072.072 0 00-.053-.042.072.072 0 00-.064.02l-1.258 1.257a.067.067 0 01-.093.003 28.356 28.356 0 00-2.783-2.23.079.079 0 01-.01-.12l1.012-1.011a.03.03 0 00.006-.031.026.026 0 00-.026-.017H6.807a.055.055 0 01-.054-.043.055.055 0 010-.025l.625-2.514a.094.094 0 01.092-.071h8.972a.12.12 0 00.116-.09l.133-.536a.11.11 0 01.107-.084h2.934a.055.055 0 01.044.021.055.055 0 01.01.048l-.144.579a.05.05 0 00.026.057.048.048 0 00.021.005zm-7.98 2.789l1.734 1.224a.063.063 0 01.022.073.063.063 0 01-.014.024l-.604.603a.032.032 0 00-.009.035.035.035 0 00.028.023c.654.11 1.33.135 2.028.078.206-.018.38-.134.524-.348a.143.143 0 00.023-.052l.431-1.733a.038.038 0 000-.017.04.04 0 00-.038-.03l-4.111.077a.023.023 0 00-.014.005.023.023 0 000 .038zM43.554 19.544l-.703 2.827a.043.043 0 01-.015.024.043.043 0 01-.027.009H22.454a.043.043 0 01-.034-.017.043.043 0 01-.008-.036l.705-2.828a.042.042 0 01.041-.032h20.354a.043.043 0 01.042.053z" />
</svg>
);
});
export default Icon;
+72
View File
@@ -0,0 +1,72 @@
---
nav: Components
group: Provider
title: Bocha (博查)
atomId: Bocha
description: https://open.bochaai.com
---
## Icons
```tsx
import { Bocha } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} horizontal>
<Bocha size={64} />
<Bocha.Color size={64} />
</Flexbox>
);
```
## Text
```tsx
import { Bocha } from '@lobehub/icons';
export default () => <Bocha.Text size={48} />;
```
## Combine
```tsx
import { Bocha } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} align={'flex-start'}>
<Bocha.Combine size={64} />
<Bocha.Combine type={'color'} size={64} />
</Flexbox>
);
```
## Avatars
```tsx
import { Bocha } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} horizontal>
<Bocha.Avatar size={64} />
<Bocha.Avatar size={64} shape={'square'} />
</Flexbox>
);
```
## Colors
```tsx
import { Bocha } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
import ColorPreview from '../components/ColorPreview';
export default () => (
<Flexbox gap={16} horizontal>
<ColorPreview color={Bocha.colorPrimary} />
</Flexbox>
);
```
+24
View File
@@ -0,0 +1,24 @@
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 = 'Bocha';
export const COMBINE_TEXT_MULTIPLE = 0.75;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#006EFF';
// Avatar constants
export const AVATAR_BACKGROUND = '#fff';
export const AVATAR_COLOR = COLOR_PRIMARY;
export const AVATAR_ICON_MULTIPLE = 0.75;
+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;
+44
View File
@@ -0,0 +1,44 @@
'use client';
import { memo } from 'react';
import { useFillId } from '@/hooks/useFillId';
import type { IconType } from '@/types';
import { TITLE } from '../style';
const Icon: IconType = memo(({ size = '1em', style, ...rest }) => {
const { id, fill } = useFillId(TITLE);
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="M17.544 2.375c.017-.005 1.844-.5 2.712.361.872.872 1.588 1.642 1.588 1.642l-.565 1.38v-.003.006-.003L22 7.8c-.014.05-2.112 7.983-2.357 8.954-.488 1.924-.819 2.663-2.202 3.638a212.634 212.634 0 01-4.305 2.917c-.41.252-.92.691-1.383.691-.463 0-.974-.439-1.383-.691a213.099 213.099 0 01-4.306-2.917c-1.383-.975-1.72-1.714-2.2-3.632-.246-.977-2.35-8.904-2.364-8.96l.722-2.045-.566-1.383s.722-.764 1.594-1.63c.866-.872 2.712-.36 2.712-.36L8.066 0h7.373l2.105 2.375zm-5.797 12.557c-.138 0-1.04.318-1.762.691l-.457.234c-.487.253-.823.428-.956.506-.168.108-.066.306.09.414.15.103 2.195 1.684 2.394 1.865l.09.078c.186.168.432.391.607.391.174 0 .415-.223.607-.391l.084-.078c.2-.169 2.244-1.756 2.394-1.865.15-.108.258-.3.09-.408-.133-.084-.475-.253-.956-.506h-.006l-.457-.24c-.722-.373-1.623-.691-1.762-.691zm.006-11.276c-.35.02-.694.092-1.023.211l-.378.126c-.493.169-.969.331-1.21.331-.312 0-2.554-.428-2.584-.433 0 0-2.706 3.26-2.706 3.957 0 .577.228.805.504 1.07l.174.175 2.033 2.152.06.067c.204.204.5.498.29.998l-.043.102c-.228.535-.511 1.203-.15 1.876.384.716 1.046 1.19 1.467 1.118.42-.084 1.419-.601 1.78-.841.367-.229 1.52-1.19 1.521-1.551 0-.307-.829-.812-1.238-1.053l-.18-.12-.199-.12c-.367-.229-1.035-.644-1.047-.825-.018-.228-.017-.294.283-.853l.21-.379c.289-.487.602-1.029.536-1.426-.085-.433-.777-.685-1.36-.901l-.21-.078-.613-.229c-.583-.222-1.232-.463-1.34-.511-.145-.073-.11-.132.335-.174l.223-.025c.553-.06 1.582-.168 2.08-.03l.32.09c.564.145 1.25.337 1.316.445l.03.048c.067.09.109.145.037.53l-.121.607c-.15.806-.391 2.069-.421 2.351l-.012.115c-.042.312-.066.529.301.613.438.119.884.206 1.335.259.216 0 .824-.144 1.24-.24l.095-.025c.367-.078.343-.289.3-.602l-.011-.12c-.03-.282-.27-1.54-.42-2.345l-.122-.614c-.072-.384-.024-.439.036-.529l.03-.048c.067-.108.753-.294 1.318-.444l.318-.091c.5-.138 1.528-.03 2.081.03l.216.018c.451.048.493.108.343.18-.11.049-.758.29-1.341.512-.273.108-.547.21-.823.307-.583.216-1.275.468-1.36.907-.066.391.247.939.535 1.42l.21.379c.301.56.308.625.284.854-.012.18-.68.595-1.053.824l-.192.126-.181.108c-.41.247-1.238.758-1.238 1.059 0 .367 1.16 1.316 1.521 1.55.367.235 1.36.758 1.78.836.421.078 1.082-.396 1.467-1.112.36-.673.078-1.335-.15-1.876l-.042-.102c-.21-.5.084-.794.289-1.004l.065-.06 2.02-2.147.181-.181c.271-.265.505-.493.505-1.07 0-.698-2.706-3.957-2.706-3.957-.03.006-2.275.44-2.586.44l.007-.007c-.252 0-.722-.156-1.215-.337l-.379-.12c-.612-.21-1.02-.21-1.022-.21z"
fill={fill}
/>
<defs>
<linearGradient
gradientUnits="userSpaceOnUse"
id={id}
x1="1.506"
x2="22"
y1="24.174"
y2="24.174"
>
<stop stopColor="#FF5601" />
<stop offset=".5" stopColor="#FF4000" />
<stop offset="1" stopColor="#FF1F01" />
</linearGradient>
</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;
+27
View File
@@ -0,0 +1,27 @@
'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="M17.544 2.375c.017-.005 1.844-.5 2.712.361.872.872 1.588 1.642 1.588 1.642l-.565 1.38v-.003.006-.003L22 7.8c-.014.05-2.112 7.983-2.357 8.954-.488 1.924-.819 2.663-2.202 3.638a212.634 212.634 0 01-4.305 2.917c-.41.252-.92.691-1.383.691-.463 0-.974-.439-1.383-.691a213.099 213.099 0 01-4.306-2.917c-1.383-.975-1.72-1.714-2.2-3.632-.246-.977-2.35-8.904-2.364-8.96l.722-2.045-.566-1.383s.722-.764 1.594-1.63c.866-.872 2.712-.36 2.712-.36L8.066 0h7.373l2.105 2.375zm-5.797 12.557c-.138 0-1.04.318-1.762.691l-.457.234c-.487.253-.823.428-.956.506-.168.108-.066.306.09.414.15.103 2.195 1.684 2.394 1.865l.09.078c.186.168.432.391.607.391.174 0 .415-.223.607-.391l.084-.078c.2-.169 2.244-1.756 2.394-1.865.15-.108.258-.3.09-.408-.133-.084-.475-.253-.956-.506h-.006l-.457-.24c-.722-.373-1.623-.691-1.762-.691zm.006-11.276c-.35.02-.694.092-1.023.211l-.378.126c-.493.169-.969.331-1.21.331-.312 0-2.554-.428-2.584-.433 0 0-2.706 3.26-2.706 3.957 0 .577.228.805.504 1.07l.174.175 2.033 2.152.06.067c.204.204.5.498.29.998l-.043.102c-.228.535-.511 1.203-.15 1.876.384.716 1.046 1.19 1.467 1.118.42-.084 1.419-.601 1.78-.841.367-.229 1.52-1.19 1.521-1.551 0-.307-.829-.812-1.238-1.053l-.18-.12-.199-.12c-.367-.229-1.035-.644-1.047-.825-.018-.228-.017-.294.283-.853l.21-.379c.289-.487.602-1.029.536-1.426-.085-.433-.777-.685-1.36-.901l-.21-.078-.613-.229c-.583-.222-1.232-.463-1.34-.511-.145-.073-.11-.132.335-.174l.223-.025c.553-.06 1.582-.168 2.08-.03l.32.09c.564.145 1.25.337 1.316.445l.03.048c.067.09.109.145.037.53l-.121.607c-.15.806-.391 2.069-.421 2.351l-.012.115c-.042.312-.066.529.301.613.438.119.884.206 1.335.259.216 0 .824-.144 1.24-.24l.095-.025c.367-.078.343-.289.3-.602l-.011-.12c-.03-.282-.27-1.54-.42-2.345l-.122-.614c-.072-.384-.024-.439.036-.529l.03-.048c.067-.108.753-.294 1.318-.444l.318-.091c.5-.138 1.528-.03 2.081.03l.216.018c.451.048.493.108.343.18-.11.049-.758.29-1.341.512-.273.108-.547.21-.823.307-.583.216-1.275.468-1.36.907-.066.391.247.939.535 1.42l.21.379c.301.56.308.625.284.854-.012.18-.68.595-1.053.824l-.192.126-.181.108c-.41.247-1.238.758-1.238 1.059 0 .367 1.16 1.316 1.521 1.55.367.235 1.36.758 1.78.836.421.078 1.082-.396 1.467-1.112.36-.673.078-1.335-.15-1.876l-.042-.102c-.21-.5.084-.794.289-1.004l.065-.06 2.02-2.147.181-.181c.271-.265.505-.493.505-1.07 0-.698-2.706-3.957-2.706-3.957-.03.006-2.275.44-2.586.44l.007-.007c-.252 0-.722-.156-1.215-.337l-.379-.12c-.612-.21-1.02-.21-1.022-.21z" />
</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 82 24"
xmlns="http://www.w3.org/2000/svg"
{...rest}
>
<title>{TITLE}</title>
<path d="M8.296 5.93a6.727 6.727 0 013.19-.734 7.112 7.112 0 016.442 3.95 9.394 9.394 0 01.981 4.39c0 1.668-.32 3.135-.98 4.418a7.424 7.424 0 01-2.667 2.988 6.965 6.965 0 01-3.776 1.054 6.737 6.737 0 01-3.19-.715c-.916-.486-1.64-1.1-2.181-1.87v2.319H2V0h4.115v7.845A5.847 5.847 0 018.296 5.93zm5.82 5.068a4.189 4.189 0 00-7.396.046c-.403.724-.605 1.576-.605 2.557 0 .971.202 1.833.605 2.557.394.724.926 1.273 1.585 1.65a4.116 4.116 0 004.216 0 4.344 4.344 0 001.595-1.678c.403-.733.605-1.585.605-2.584 0-1.008-.202-1.833-.605-2.539v-.01zm12.217-5.04c.852-.487 1.823-.734 2.923-.734v4.317h-1.1c-1.283 0-2.254.302-2.914.916-.65.605-.98 1.659-.98 3.162v8.11h-4.116V5.463h4.115v2.52a5.773 5.773 0 012.072-2.025zm4.426 3.207a7.186 7.186 0 012.676-2.933 7.121 7.121 0 013.776-1.036 6.617 6.617 0 015.37 2.585V5.462h4.143v16.259h-4.142v-2.383a6.085 6.085 0 01-2.19 1.897 6.7 6.7 0 01-3.208.751 6.972 6.972 0 01-3.758-1.063 7.387 7.387 0 01-2.658-2.978c-.66-1.283-.99-2.75-.99-4.418 0-1.668.33-3.107.981-4.38v.018zm11.236 1.86a4.133 4.133 0 00-3.73-2.218 4.188 4.188 0 00-3.684 2.19c-.403.716-.605 1.559-.605 2.54 0 .98.202 1.832.605 2.566.403.733.926 1.301 1.585 1.695a4.033 4.033 0 002.1.587c.732 0 1.475-.193 2.144-.578a4.134 4.134 0 001.585-1.65c.385-.705.587-1.557.587-2.566 0-.99-.202-1.85-.587-2.566zm14.352 6.92l4.125-12.483h4.371l-6.021 16.259h-4.995L47.824 5.462h4.4l4.123 12.483zm24.058-3.116H68.518c.092 1.173.504 2.098 1.228 2.758a3.794 3.794 0 002.677 1.008c1.52 0 2.611-.66 3.253-1.98h4.436a7.395 7.395 0 01-2.695 3.868 7.882 7.882 0 01-4.912 1.513c-1.558 0-2.97-.349-4.216-1.045A7.332 7.332 0 0165.384 18a9.037 9.037 0 01-1.036-4.4c0-1.667.34-3.17 1.027-4.435a7.148 7.148 0 012.877-2.933 8.624 8.624 0 014.253-1.036c1.604 0 2.933.33 4.16 1.009a7.038 7.038 0 012.842 2.822 8.597 8.597 0 011.017 4.216c0 .587-.037 1.118-.119 1.586zm-4.142-2.759a3.253 3.253 0 00-1.146-2.539 4.051 4.051 0 00-2.722-.953c-1.026 0-1.879.303-2.566.917a4.05 4.05 0 00-1.283 2.566h7.726l-.01.01z" />
</svg>
);
});
export default Icon;
+72
View File
@@ -0,0 +1,72 @@
---
nav: Components
group: Provider
title: Brave
atomId: Brave
description: https://brave.com
---
## Icons
```tsx
import { Brave } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} horizontal>
<Brave size={64} />
<Brave.Color size={64} />
</Flexbox>
);
```
## Text
```tsx
import { Brave } from '@lobehub/icons';
export default () => <Brave.Text size={48} />;
```
## Combine
```tsx
import { Brave } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} align={'flex-start'}>
<Brave.Combine size={64} />
<Brave.Combine type={'color'} size={64} />
</Flexbox>
);
```
## Avatars
```tsx
import { Brave } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} horizontal>
<Brave.Avatar size={64} />
<Brave.Avatar size={64} shape={'square'} />
</Flexbox>
);
```
## Colors
```tsx
import { Brave } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
import ColorPreview from '../components/ColorPreview';
export default () => (
<Flexbox gap={16} horizontal>
<ColorPreview color={Brave.colorPrimary} />
</Flexbox>
);
```
+24
View File
@@ -0,0 +1,24 @@
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 = 'Brave';
export const COMBINE_TEXT_MULTIPLE = 0.75;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#FF4000';
// Avatar constants
export const AVATAR_BACKGROUND = '#fff';
export const AVATAR_COLOR = COLOR_PRIMARY;
export const AVATAR_ICON_MULTIPLE = 0.75;
+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;
+26
View File
@@ -0,0 +1,26 @@
'use client';
import { memo } from 'react';
import IconCombine, { type IconCombineProps } from '@/features/IconCombine';
import { COMBINE_SPACE_MULTIPLE, COMBINE_TEXT_MULTIPLE, TITLE } from '../style';
import Mono from './Mono';
import Text from './Text';
export type CombineProps = Omit<IconCombineProps, 'Icon' | 'Text'>;
const Combine = memo<CombineProps>(({ ...rest }) => {
return (
<IconCombine
Icon={Mono}
Text={Text as any}
aria-label={TITLE}
spaceMultiple={COMBINE_SPACE_MULTIPLE}
textMultiple={COMBINE_TEXT_MULTIPLE}
{...rest}
/>
);
});
export default Combine;
+29
View File
@@ -0,0 +1,29 @@
'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="M24 1.384L23.988 22.6a.34.34 0 00-.099.203c-.025.01-.038.029-.038.057l-.178.123c-.112.073-.288.054-.493.054a19172.166 19172.166 0 00-22.442 0c-.556.002-.737-.133-.737-.673V1.496c0-.129.03-.237.089-.325a.539.539 0 01.407-.17h22.448c.153.001.368.006.644.015.048.002.123.036.224.103.014.01.027.022.036.036l.151.23zM2.854 3.13c.07-.312.016-.6-.165-.866a.712.712 0 00-.525-.383c-.383-.071-.696.017-.939.265-.357.365-.427.931-.078 1.328.367.42.806.496 1.316.228a.725.725 0 00.391-.572zm2.933-.274a1 1 0 10-2.001 0 1 1 0 002 0zm2.878-.004a1.001 1.001 0 10-2.002 0 1.001 1.001 0 002.002 0zm14.353 1.99a.063.063 0 00-.063-.064H1.028a.063.063 0 00-.063.063v17.17a.064.064 0 00.063.063h21.927a.063.063 0 00.063-.064V4.84z" />
<path d="M10.979 15.344c-1.397.008-2.794.01-4.192.004-.17 0-.29-.012-.364-.034-.323-.209-.385-.456-.186-.743.27-.388.525-.825.773-1.142.24-.309.44-.667.662-.996.238-.35.663-.951.97-1.44.108-.173.247-.378.416-.615.173-.242.37-.544.679-.424a.517.517 0 01.227.197c.18.256.364.506.49.708.14.228.264.419.372.573.446.64.838 1.226 1.175 1.76.052.081.142.17.194.25.35.537.604.915.76 1.135a.506.506 0 01.099.277c.017.355-.293.478-.593.479-.494 0-.988.005-1.482.01z" />
<path d="M11.001 16.511c-.092-.086-.125-.151-.1-.194.573.024 1.145.031 1.713.022.114-.002.218-.012.313-.03.147-.03.248-.06.303-.09.466-.252.743-.63.83-1.135l.003-.363a.52.52 0 00-.043-.304 2.57 2.57 0 00-.395-.643l-.482-.733-.72-1.096a.047.047 0 01.016-.067c.164-.094.292-.15.386-.168.057-.011.138-.033.244-.066.093-.03.175-.048.244-.056.435-.05.83-.05 1.183.003.478.07.924.258 1.34.562.314.23.544.45.69.66.108.158.221.341.339.551.105.188.186.387.242.598.143.534.158 1.074.045 1.62-.02.104-.04.176-.058.216-.047.108-.048.184-.093.283-.236.517-.57 1.051-1.037 1.384-.336.24-.62.406-.852.497-.164.066-.455.16-.685.181-.117.011-.241.03-.371.055a.502.502 0 01-.127.009 5.841 5.841 0 01-.759-.095 2.608 2.608 0 01-.749-.276 4.305 4.305 0 01-.678-.434c-.246-.208-.493-.505-.742-.89z" />
</svg>
);
});
export default Icon;
File diff suppressed because one or more lines are too long
+66
View File
@@ -0,0 +1,66 @@
---
nav: Components
group: Provider
title: Browserless
atomId: Browserless
description: https://browserless.js.org
---
## Icons
```tsx
import { Browserless } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => <Browserless size={64} />;
```
## Text
```tsx
import { Browserless } from '@lobehub/icons';
export default () => <Browserless.Text size={48} />;
```
## Combine
```tsx
import { Browserless } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} align={'flex-start'}>
<Browserless.Combine size={64} />
</Flexbox>
);
```
## Avatars
```tsx
import { Browserless } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} horizontal>
<Browserless.Avatar size={64} />
<Browserless.Avatar size={64} shape={'square'} />
</Flexbox>
);
```
## Colors
```tsx
import { Browserless } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
import ColorPreview from '../components/ColorPreview';
export default () => (
<Flexbox gap={16} horizontal>
<ColorPreview color={Browserless.colorPrimary} />
</Flexbox>
);
```
+21
View File
@@ -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;
+9
View File
@@ -0,0 +1,9 @@
export const TITLE = 'Browserless';
export const COMBINE_TEXT_MULTIPLE = 0.75;
export const COMBINE_SPACE_MULTIPLE = 0.3;
export const COLOR_PRIMARY = '#fff';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#000';
export const AVATAR_ICON_MULTIPLE = 0.65;
+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;
+24
View File
@@ -0,0 +1,24 @@
'use client';
import { memo } from 'react';
import IconCombine, { type IconCombineProps } from '@/features/IconCombine';
import { COMBINE_SPACE_MULTIPLE, COMBINE_TEXT_MULTIPLE, TITLE } from '../style';
import Text from './Text';
export type CombineProps = Omit<IconCombineProps, 'Icon' | 'Text'>;
const Combine = memo<CombineProps>(({ ...rest }) => {
return (
<IconCombine
Text={Text as any}
aria-label={TITLE}
spaceMultiple={COMBINE_SPACE_MULTIPLE}
textMultiple={COMBINE_TEXT_MULTIPLE}
{...rest}
/>
);
});
export default Combine;
+27
View File
@@ -0,0 +1,27 @@
'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="M14.498 18.392h-5.14c-1.39 0-1.632-1.508-1.39-2.11.12-.302.423-.724.664-1.026a6.81 6.81 0 003.326.845 6.945 6.945 0 006.954-6.935c0-2.05-.907-3.86-2.298-5.186l.181-.181c.363-.362.907-.603 1.451-.543l.847.06V0h-1.451c-1.693 0-3.084 1.025-3.689 2.472a6.83 6.83 0 00-1.934-.301 6.945 6.945 0 00-6.954 6.935c0 1.507.484 2.954 1.33 4.1a1.84 1.84 0 01-.423.302l-.181.18c-1.391 1.327-2.056 3.015-1.693 4.945.181 1.025 1.088 2.11 1.995 2.714.605.422 1.39.603 2.177.603l5.804-.242c.665 0 1.27.302 1.633.905L16.432 24 20 22.794l-.605-1.327a5.425 5.425 0 00-4.897-3.075zm-2.48-12.543c1.814 0 3.326 1.508 3.326 3.317 0 1.809-1.512 3.316-3.325 3.316-1.814 0-3.326-1.507-3.326-3.316 0-1.87 1.451-3.317 3.325-3.317z" />
</svg>
);
});
export default Icon;
+27
View File
@@ -0,0 +1,27 @@
'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 47 24"
xmlns="http://www.w3.org/2000/svg"
{...rest}
>
<title>{TITLE}</title>
<path d="M41.856 16.824v.983h2.879V6.357h-2.879v10.467zM43.27 4.735a1.86 1.86 0 001.855-1.868A1.86 1.86 0 0043.27 1a1.86 1.86 0 00-1.854 1.867 1.86 1.86 0 001.854 1.868zM35.514 19.43h-4.146c-1.122 0-1.317-1.23-1.122-1.72.097-.246.341-.59.536-.836.781.442 1.708.688 2.683.688 3.123 0 5.61-2.556 5.61-5.652 0-1.67-.731-3.145-1.853-4.226l.146-.147c.293-.295.732-.492 1.17-.443l.684.05V4.44h-1.17c-1.367 0-2.489.836-2.977 2.015a5.46 5.46 0 00-1.56-.245c-3.123 0-5.61 2.555-5.61 5.651 0 1.229.39 2.408 1.072 3.342a1.484 1.484 0 01-.341.246l-.146.147c-1.122 1.081-1.659 2.457-1.366 4.03.146.835.878 1.72 1.61 2.212.487.344 1.122.491 1.756.491l4.683-.197c.537 0 1.024.246 1.317.738l.585 1.13 2.879-.983-.488-1.081c-.732-1.524-2.244-2.507-3.952-2.507zm-2-10.223c1.464 0 2.683 1.229 2.683 2.703 0 1.475-1.22 2.703-2.683 2.703-1.463 0-2.683-1.228-2.683-2.703 0-1.523 1.17-2.703 2.683-2.703zM19.172 6.16c-2.927.147-5.366 2.506-5.561 5.454-.244 3.49 2.488 6.39 5.854 6.39 1.122 0 2.146-.64 3.024-1.18v1.032h2.878V11.86c-.146-3.293-2.878-5.848-6.195-5.7zm.293 9.091c-1.757 0-3.122-1.425-3.122-3.145a3.124 3.124 0 013.122-3.145c1.756 0 3.122 1.425 3.122 3.145.049 1.72-1.366 3.145-3.122 3.145z" />
<path d="M13.66 6.357H9.61L6.098 9.895l-1.22 1.229V4.342H2v13.515h2.878v-5.062l1.22 1.228v-.049l3.805 3.883h4.049l-6.196-5.898 5.903-5.602z" />
</svg>
);
});
export default Icon;
+66
View File
@@ -0,0 +1,66 @@
---
nav: Components
group: Provider
title: Kagi
atomId: Kagi
description: https://kagi.com
---
## Icons
```tsx
import { Kagi } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => <Kagi size={64} />;
```
## Text
```tsx
import { Kagi } from '@lobehub/icons';
export default () => <Kagi.Text size={48} />;
```
## Combine
```tsx
import { Kagi } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} align={'flex-start'}>
<Kagi.Combine size={64} />
</Flexbox>
);
```
## Avatars
```tsx
import { Kagi } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} horizontal>
<Kagi.Avatar size={64} />
<Kagi.Avatar size={64} shape={'square'} />
</Flexbox>
);
```
## Colors
```tsx
import { Kagi } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
import ColorPreview from '../components/ColorPreview';
export default () => (
<Flexbox gap={16} horizontal>
<ColorPreview color={Kagi.colorPrimary} />
</Flexbox>
);
```
+21
View File
@@ -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;
+9
View File
@@ -0,0 +1,9 @@
export const TITLE = 'Kagi';
export const COMBINE_TEXT_MULTIPLE = 1;
export const COMBINE_SPACE_MULTIPLE = 0.3;
export const COLOR_PRIMARY = '#FEB219';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#000';
export const AVATAR_ICON_MULTIPLE = 0.7;
+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;
+34
View File
@@ -0,0 +1,34 @@
'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="M6.638 4.38a5.35 5.35 0 017.747 3.963 5.35 5.35 0 01-.56 3.284l-1.154-.61A4.044 4.044 0 007.237 5.54l-.6-1.158z"
fill="#3050FF"
/>
<path
clipRule="evenodd"
d="M9.13 0a9.13 9.13 0 017.992 13.546l6.803 6.515-3.4 3.551-6.853-6.562A9.13 9.13 0 119.13 0zm0 2.61a6.521 6.521 0 100 13.042 6.521 6.521 0 000-13.043z"
fill="#3050FF"
fillRule="evenodd"
/>
</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;
+31
View File
@@ -0,0 +1,31 @@
'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="M6.638 4.38a5.35 5.35 0 017.747 3.963 5.35 5.35 0 01-.56 3.284l-1.154-.61A4.044 4.044 0 007.237 5.54l-.6-1.158z" />
<path
clipRule="evenodd"
d="M9.13 0a9.13 9.13 0 017.992 13.546l6.803 6.515-3.4 3.551-6.853-6.562A9.13 9.13 0 119.13 0zm0 2.61a6.521 6.521 0 100 13.042 6.521 6.521 0 000-13.043z"
/>
</svg>
);
});
export default Icon;
File diff suppressed because one or more lines are too long
+72
View File
@@ -0,0 +1,72 @@
---
nav: Components
group: Provider
title: SearXNG
atomId: SearXNG
description: https://searxng.org
---
## Icons
```tsx
import { SearXNG } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} horizontal>
<SearXNG size={64} />
<SearXNG.Color size={64} />
</Flexbox>
);
```
## Text
```tsx
import { SearXNG } from '@lobehub/icons';
export default () => <SearXNG.Text size={48} />;
```
## Combine
```tsx
import { SearXNG } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} align={'flex-start'}>
<SearXNG.Combine size={64} />
<SearXNG.Combine type={'color'} size={64} />
</Flexbox>
);
```
## Avatars
```tsx
import { SearXNG } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} horizontal>
<SearXNG.Avatar size={64} />
<SearXNG.Avatar size={64} shape={'square'} />
</Flexbox>
);
```
## Colors
```tsx
import { SearXNG } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
import ColorPreview from '../components/ColorPreview';
export default () => (
<Flexbox gap={16} horizontal>
<ColorPreview color={SearXNG.colorPrimary} />
</Flexbox>
);
```
+24
View File
@@ -0,0 +1,24 @@
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 = 'SearXNG';
export const COMBINE_TEXT_MULTIPLE = 0.75;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#3050FF';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
export const AVATAR_ICON_MULTIPLE = 0.7;
+6
View File
@@ -18,6 +18,7 @@ export { default as AlephAlpha, type CompoundedIcon as AlephAlphaProps } from '.
export { default as Alibaba, type CompoundedIcon as AlibabaProps } from './Alibaba';
export { default as AlibabaCloud, type CompoundedIcon as AlibabaCloudProps } from './AlibabaCloud';
export { default as Amp, type CompoundedIcon as AmpProps } from './Amp';
export { default as Anspire, type CompoundedIcon as AnspireProps } from './Anspire';
export { default as AntGroup, type CompoundedIcon as AntGroupProps } from './AntGroup';
export { default as Anthropic, type CompoundedIcon as AnthropicProps } from './Anthropic';
export { default as Antigravity, type CompoundedIcon as AntigravityProps } from './Antigravity';
@@ -47,7 +48,10 @@ export {
type CompoundedIcon as BilibiliIndexProps,
} from './BilibiliIndex';
export { default as Bing, type CompoundedIcon as BingProps } from './Bing';
export { default as Bocha, type CompoundedIcon as BochaProps } from './Bocha';
export { default as Brave, type CompoundedIcon as BraveProps } from './Brave';
export { default as BriaAI, type CompoundedIcon as BriaAIProps } from './BriaAI';
export { default as Browserless, type CompoundedIcon as BrowserlessProps } from './Browserless';
export { default as BurnCloud, type CompoundedIcon as BurnCloudProps } from './BurnCloud';
export { default as ByteDance, type CompoundedIcon as ByteDanceProps } from './ByteDance';
export { default as CapCut, type CompoundedIcon as CapCutProps } from './CapCut';
@@ -153,6 +157,7 @@ export { default as InternLM, type CompoundedIcon as InternLMProps } from './Int
export { default as Jimeng, type CompoundedIcon as JimengProps } from './Jimeng';
export { default as Jina, type CompoundedIcon as JinaProps } from './Jina';
export { default as Junie, type CompoundedIcon as JunieProps } from './Junie';
export { default as Kagi, type CompoundedIcon as KagiProps } from './Kagi';
export { default as KiloCode, type CompoundedIcon as KiloCodeProps } from './KiloCode';
export { default as Kimi, type CompoundedIcon as KimiProps } from './Kimi';
export { default as Kiro, type CompoundedIcon as KiroProps } from './Kiro';
@@ -256,6 +261,7 @@ export { default as Rwkv, type CompoundedIcon as RwkvProps } from './Rwkv';
export { default as SambaNova, type CompoundedIcon as SambaNovaProps } from './SambaNova';
export { default as Search1API, type CompoundedIcon as Search1APIProps } from './Search1API';
export { default as SearchApi, type CompoundedIcon as SearchApiProps } from './SearchApi';
export { default as SearXNG, type CompoundedIcon as SearXNGProps } from './SearXNG';
export { default as SenseNova, type CompoundedIcon as SenseNovaProps } from './SenseNova';
export { default as SiliconCloud, type CompoundedIcon as SiliconCloudProps } from './SiliconCloud';
export { default as SillyTavern, type CompoundedIcon as SillyTavernProps } from './SillyTavern';
+114
View File
@@ -381,6 +381,25 @@
},
"title": "Amp"
},
{
"color": "#514BFD",
"desc": "https://anspire.ai",
"docsUrl": "anspire",
"fullTitle": "Anspire",
"group": "provider",
"id": "Anspire",
"param": {
"hasAvatar": true,
"hasBrand": false,
"hasBrandColor": false,
"hasColor": true,
"hasCombine": true,
"hasText": true,
"hasTextCn": false,
"hasTextColor": true
},
"title": "Anspire"
},
{
"color": "#1677ff",
"desc": "https://antgroup.com",
@@ -878,6 +897,44 @@
},
"title": "Bing"
},
{
"color": "#006EFF",
"desc": "https://open.bochaai.com",
"docsUrl": "bocha",
"fullTitle": "Bocha (博查)",
"group": "provider",
"id": "Bocha",
"param": {
"hasAvatar": true,
"hasBrand": false,
"hasBrandColor": false,
"hasColor": true,
"hasCombine": true,
"hasText": true,
"hasTextCn": false,
"hasTextColor": false
},
"title": "Bocha"
},
{
"color": "#FF4000",
"desc": "https://brave.com",
"docsUrl": "brave",
"fullTitle": "Brave",
"group": "provider",
"id": "Brave",
"param": {
"hasAvatar": true,
"hasBrand": false,
"hasBrandColor": false,
"hasColor": true,
"hasCombine": true,
"hasText": true,
"hasTextCn": false,
"hasTextColor": false
},
"title": "Brave"
},
{
"color": "#671ECC",
"desc": "https://bria.ai",
@@ -897,6 +954,25 @@
},
"title": "BRIA AI"
},
{
"color": "#fff",
"desc": "https://browserless.js.org",
"docsUrl": "browserless",
"fullTitle": "Browserless",
"group": "provider",
"id": "Browserless",
"param": {
"hasAvatar": true,
"hasBrand": false,
"hasBrandColor": false,
"hasColor": false,
"hasCombine": true,
"hasText": true,
"hasTextCn": false,
"hasTextColor": false
},
"title": "Browserless"
},
{
"color": "#E95513",
"desc": "https://ai.burncloud.com",
@@ -2844,6 +2920,25 @@
},
"title": "Junie"
},
{
"color": "#FEB219",
"desc": "https://kagi.com",
"docsUrl": "kagi",
"fullTitle": "Kagi",
"group": "provider",
"id": "Kagi",
"param": {
"hasAvatar": true,
"hasBrand": false,
"hasBrandColor": false,
"hasColor": false,
"hasCombine": true,
"hasText": true,
"hasTextCn": false,
"hasTextColor": false
},
"title": "Kagi"
},
{
"color": "#F8F676",
"desc": "https://kilo.ai",
@@ -4812,6 +4907,25 @@
},
"title": "SearchApi"
},
{
"color": "#3050FF",
"desc": "https://searxng.org",
"docsUrl": "sear-xng",
"fullTitle": "SearXNG",
"group": "provider",
"id": "SearXNG",
"param": {
"hasAvatar": true,
"hasBrand": false,
"hasBrandColor": false,
"hasColor": true,
"hasCombine": true,
"hasText": true,
"hasTextCn": false,
"hasTextColor": false
},
"title": "SearXNG"
},
{
"color": "#5B2AD8",
"desc": "https://platform.sensenova.cn",