✨ feat: Add Poolside, Firecrawl, AgnesAI, Pi, HappyHorse, Celesto (#360)

* feat: add Poolside icon (#323)

* feat: add Firecrawl icon (#322)

* feat: add Agnes AI icon (#349)

Co-authored-by: CanisMinor <[email protected]>

* feat: add HappyHorse icon (#348)

Co-authored-by: CanisMinor <[email protected]>

* 💄 style: Update OpenRouter logo

* ✨ feat: Add Pi Agent and update StepFun

* ✨ feat: Update rn

* ✨ feat: Add CelestoAI

---------

Co-authored-by: changday <[email protected]>
This commit is contained in:
CanisMinor
2026-07-14 14:34:19 +08:00
committed by GitHub
co-authored by changday
parent 839d51acaf
commit 9349704d46
120 changed files with 2833 additions and 210 deletions
+17 -17
View File
@@ -86,33 +86,33 @@
},
"dependencies": {
"antd-style": "^4.1.0",
"es-toolkit": "^1.45.1",
"es-toolkit": "^1.49.0",
"lucide-react": "^0.469.0",
"polished": "^4.3.1"
},
"devDependencies": {
"@babel/runtime": "^7.29.2",
"@babel/runtime": "^7.29.7",
"@commitlint/cli": "^19.8.1",
"@lobehub/lint": "^1.26.3",
"@lobehub/ui": "^5.5.3",
"@lobehub/ui": "^5.20.2",
"@qiwi/multi-semantic-release": "^7.1.2",
"@testing-library/react": "^16.3.2",
"@types/pangu": "^4.0.2",
"@types/react": "^19.2.14",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"@vitest/coverage-v8": "^3.2.4",
"ajv": "^8.18.0",
"@vitest/coverage-v8": "^3.2.7",
"ajv": "^8.20.0",
"babel-plugin-antd-style": "^1.0.4",
"clean-package": "^2.2.0",
"commitlint": "^19.8.1",
"consola": "^3.4.2",
"cross-env": "^10.1.0",
"dotenv": "^17.3.1",
"dotenv": "^17.4.2",
"dpdm": "^3.15.1",
"dumi": "^2.4.23",
"dumi": "^2.4.44",
"dumi-theme-lobehub": "^4.1.0",
"eslint": "^8.57.1",
"father": "^4.6.17",
"father": "^4.6.30",
"glob": "^11.1.0",
"gray-matter": "^4.0.3",
"html-react-parser": "^5.2.17",
@@ -120,12 +120,12 @@
"jsdom": "^27.4.0",
"lint-staged": "^16.4.0",
"markdown-table": "^3.0.4",
"p-map": "^7.0.4",
"postcss-styled-syntax": "^0.7.1",
"prettier": "^3.8.1",
"puppeteer": "^24.40.0",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"p-map": "^7.0.5",
"postcss-styled-syntax": "^0.7.2",
"prettier": "^3.9.5",
"puppeteer": "^24.43.1",
"react": "^19.2.7",
"react-dom": "^19.2.7",
"remark": "^15.0.1",
"remark-cli": "^12.0.1",
"satori": "^0.15.2",
@@ -133,9 +133,9 @@
"sharp": "^0.34.5",
"stylelint": "^15.11.0",
"svgo-browser": "^1.3.8",
"tsx": "^4.21.0",
"tsx": "^4.23.1",
"typescript": "^5.9.3",
"vitest": "^3.2.4"
"vitest": "^3.2.7"
},
"peerDependencies": {
"@lobehub/ui": "^5.0.0",
@@ -0,0 +1,22 @@
import React, { memo } from 'react';
import { RNIconAvatar, type RNIconAvatarProps } from '@/features';
import { AVATAR_BACKGROUND, AVATAR_COLOR, AVATAR_ICON_MULTIPLE, TITLE } from '../style';
import Inner from './Inner';
export type AvatarProps = Omit<RNIconAvatarProps, 'Icon'>;
const Avatar = memo<AvatarProps>(({ background, ...rest }) => {
return (
<RNIconAvatar
Icon={Inner}
aria-label={TITLE}
background={background || AVATAR_BACKGROUND}
color={AVATAR_COLOR}
iconMultiple={AVATAR_ICON_MULTIPLE}
{...rest}
/>
);
});
export default Avatar;
@@ -0,0 +1,27 @@
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}
iconProps={{
shape: 'circle',
}}
spaceMultiple={COMBINE_SPACE_MULTIPLE}
textMultiple={COMBINE_TEXT_MULTIPLE}
{...rest}
/>
);
});
export default Combine;
@@ -0,0 +1,28 @@
import React, { memo } from 'react';
import { Path, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
const Icon = memo<RNIconProps>(({ size = 24, style, color = '#000000', ...rest }) => {
return (
<Svg
color={color}
fillRule="evenodd"
height={size}
style={style}
viewBox="0 0 24 24"
width={size}
{...rest}
>
<Path
clipRule="evenodd"
d="M1.386 16.186s-2 6.095 1.688 6.709c3.688.611 9.803-1.138 16.56-13.907 0 0-.835 4.01-1.288 6.308-.067.34-.252.646-.52.865a1.53 1.53 0 01-.959.345h-.9a.265.265 0 00-.15.487c.856.583 1.951 1.847 2.127 4.53a.822.822 0 00.404.653.848.848 0 00.776.05c.272-.125.498-.333.642-.596.144-.26.223-.549.23-.845l-.123-1.117c-.028-.285.042-.57.197-.811a1.3 1.3 0 01.66-.524c.8-.286 1.882-.886 2.411-2.114a.183.183 0 00-.128-.249.192.192 0 00-.105.005c-.536.19-1.552.504-2.439.499a.439.439 0 01-.412-.313.428.428 0 01-.012-.182l1.23-8.473a.815.815 0 00-.461-.865.845.845 0 00-.341-.081 3.257 3.257 0 00-.998.142c-.862.258-1.675.682-2.122 1.53-2.11 4.003-12.207 16.005-15.965 7.954h-.002zM21.47 3.534a2.034 2.034 0 10-4.015-.647 2.034 2.034 0 004.015.647z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'AgnesAIInner';
export default Icon;
@@ -0,0 +1,27 @@
import React, { memo } from 'react';
import { Path, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
const Icon = memo<RNIconProps>(({ size = 24, style, color = '#000000', ...rest }) => {
return (
<Svg
color={color}
fillRule="evenodd"
height={size}
style={style}
viewBox="0 0 24 24"
width={size}
{...rest}
>
<Path
d="M12 0c6.627 0 12 5.373 12 12s-5.373 12-12 12S0 18.627 0 12 5.373 0 12 0zm5.013 8.817c-.2-.003-.4.026-.59.084-.51.153-.991.405-1.256.906-1.248 2.369-7.222 9.47-9.446 4.707H5.72c-.007.021-1.176 3.606.999 3.968 2.182.362 5.8-.672 9.798-8.227-.007.03-.496 2.381-.762 3.731a.885.885 0 01-.308.513.906.906 0 01-.567.204h-.533a.157.157 0 00-.088.287c.506.345 1.154 1.094 1.258 2.68a.487.487 0 00.239.388.503.503 0 00.459.029.824.824 0 00.38-.353c.085-.154.132-.325.136-.5l-.073-.66a.77.77 0 01.507-.79c.474-.17 1.114-.525 1.427-1.252a.11.11 0 00.009-.046.11.11 0 00-.013-.045.108.108 0 00-.03-.036.113.113 0 00-.104-.017c-.317.113-.918.299-1.443.296a.261.261 0 01-.244-.185.254.254 0 01-.007-.108l.728-5.013a.484.484 0 00-.475-.56zm-.406-3.169a1.204 1.204 0 10-.384 2.378 1.204 1.204 0 00.384-2.378z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'AgnesAIMono';
export default Icon;
@@ -0,0 +1,27 @@
import React, { memo } from 'react';
import { Path, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
const Icon = memo<RNIconProps>(({ size = 24, style, color = '#000000', ...rest }) => {
return (
<Svg
color={color}
fillRule="evenodd"
height={size}
style={style}
viewBox="0 0 101 24"
width={size * 4.21} // 保持宽高比
{...rest}
>
<Path
d="M8.38 3.21l-3.347 9.132h6.68L8.38 3.211zm5.534 15.172l-1.239-3.343H4.071l-1.238 3.343H0L6.68 0h3.413l6.706 18.382h-2.885zm14.503-6.935c0-1.219-.443-2.272-1.33-3.158-.887-.885-1.946-1.328-3.176-1.328-1.23 0-2.288.443-3.175 1.328-.878.878-1.318 1.93-1.318 3.158 0 1.237.44 2.294 1.318 3.171.878.878 1.937 1.316 3.175 1.316 1.239 0 2.297-.438 3.176-1.316.887-.886 1.33-1.943 1.33-3.17zm2.701 5.395c0 1.948-.711 3.623-2.134 5.027C27.57 23.288 25.879 24 23.911 24a6.945 6.945 0 01-3.478-.934 7.317 7.317 0 01-1.476-1.092 8.05 8.05 0 01-1.186-1.408l2.28-1.487c.984 1.482 2.27 2.224 3.86 2.224 1.335 0 2.403-.439 3.202-1.316.747-.825 1.173-1.904 1.278-3.237-1.335 1.237-2.903 1.855-4.704 1.855-1.932 0-3.579-.706-4.94-2.118-1.353-1.404-2.03-3.083-2.03-5.04 0-1.965.707-3.653 2.122-5.065 1.431-1.413 3.122-2.119 5.072-2.119 1.968 0 3.659.706 5.073 2.119 1.423 1.412 2.134 3.1 2.134 5.065v5.395zm11.698 1.54v-8.053c0-.912-.334-1.702-1.002-2.368-.667-.667-1.458-1-2.371-1-.914 0-1.704.333-2.372 1-.667.666-1.001 1.456-1.001 2.368v8.053h-2.701v-8.053c0-1.605.61-3.018 1.831-4.237 1.221-1.22 2.636-1.829 4.243-1.829 1.599 0 3.008.61 4.23 1.83 1.229 1.227 1.844 2.64 1.844 4.236v8.053h-2.701zM57.254 7.987c-.861-.684-1.818-1.026-2.872-1.026-1.248 0-2.306.443-3.176 1.328-.87.886-1.304 1.948-1.304 3.185 0 .35.061.736.184 1.158l7.168-4.645zm4.348 3.276c-.009 2.026-.703 3.759-2.082 5.198-1.37 1.43-3.07 2.144-5.099 2.144-2.003 0-3.707-.688-5.112-2.066-1.405-1.377-2.108-3.065-2.108-5.065 0-1.983.698-3.68 2.095-5.092 1.396-1.413 3.092-2.119 5.086-2.119 1.458 0 2.788.404 3.992 1.21 1.203.808 2.103 1.891 2.7 3.25l-9.525 6.185c.852.684 1.81 1.026 2.872 1.026 1.283 0 2.341-.456 3.175-1.368.844-.921 1.27-2.022 1.279-3.303h2.727zM72.179 14.5c0 1.14-.413 2.11-1.238 2.908-.826.798-1.805 1.197-2.938 1.197-1.002 0-1.88-.311-2.635-.934-.756-.631-1.243-1.447-1.463-2.447l2.609-.698c.175.939.672 1.408 1.489 1.408.386 0 .733-.14 1.04-.42.308-.29.462-.628.462-1.014 0-.64-.488-1.171-1.463-1.592a84.566 84.566 0 01-1.858-.855c-.448-.22-.733-.378-.856-.474-.975-.72-1.463-1.768-1.463-3.145 0-1.123.409-2.1 1.226-2.934.825-.825 1.81-1.237 2.951-1.237 1.001 0 1.88.32 2.635.96.72.623 1.2 1.435 1.436 2.435l-2.635.684c-.202-.92-.68-1.381-1.436-1.381-.395 0-.742.149-1.04.447-.3.298-.449.64-.449 1.026 0 .632.488 1.163 1.463 1.592a29.78 29.78 0 011.818.842c.448.22.742.382.883.487.975.737 1.462 1.785 1.462 3.145zM88.841 3.21l-3.346 9.132h6.68L88.84 3.211zm5.534 15.172l-1.238-3.343h-8.604l-1.239 3.343h-2.832L87.142 0h3.412l6.707 18.382h-2.886zm3.937 0V0H101v18.382h-2.688z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'AgnesAIText';
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 = 'Agnes AI';
export const COMBINE_TEXT_MULTIPLE = 0.7;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#000';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
export const AVATAR_ICON_MULTIPLE = 0.6;
@@ -0,0 +1,22 @@
import React, { memo } from 'react';
import { RNIconAvatar, type RNIconAvatarProps } from '@/features';
import { AVATAR_BACKGROUND, AVATAR_COLOR, AVATAR_ICON_MULTIPLE, TITLE } from '../style';
import Color from './Color';
export type AvatarProps = Omit<RNIconAvatarProps, 'Icon'>;
const Avatar = memo<AvatarProps>(({ background, ...rest }) => {
return (
<RNIconAvatar
Icon={Color}
aria-label={TITLE}
background={background || AVATAR_BACKGROUND}
color={AVATAR_COLOR}
iconMultiple={AVATAR_ICON_MULTIPLE}
{...rest}
/>
);
});
export default Avatar;
@@ -0,0 +1,29 @@
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="M11.77.194c.044-.259.416-.259.46 0l1.081 6.45a.989.989 0 001.55.641l5.325-3.795c.213-.153.477.11.324.324L16.715 9.14a.989.989 0 00.641 1.549l6.45 1.082c.259.043.259.415 0 .458l-6.45 1.082a.989.989 0 00-.641 1.55l3.795 5.325c.153.213-.11.477-.324.324l-5.326-3.795a.989.989 0 00-1.549.641l-1.082 6.45c-.043.259-.415.259-.458 0l-1.082-6.45a.989.989 0 00-1.55-.641L3.815 20.51c-.214.153-.477-.11-.324-.324l3.795-5.326a.989.989 0 00-.641-1.549L.194 12.23c-.259-.043-.259-.415 0-.458l6.45-1.082a.989.989 0 00.641-1.55L3.49 3.815c-.153-.214.11-.477.324-.324L9.14 7.285a.989.989 0 001.549-.641L11.77.194z"
fill={fill}
/>
<Defs>
<LinearGradient gradientUnits="userSpaceOnUse" id={id} x1="0" x2="24" y1="12" y2="12">
<Stop stopColor="#FD2A26" />
<Stop offset="100%" stopColor="#FFBE46" />
</LinearGradient>
</Defs>
</Svg>
);
});
Icon.displayName = 'CelestoAIColor';
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="M11.77.194c.044-.259.416-.259.46 0l1.081 6.45a.989.989 0 001.55.641l5.325-3.795c.213-.153.477.11.324.324L16.715 9.14a.989.989 0 00.641 1.549l6.45 1.082c.259.043.259.415 0 .458l-6.45 1.082a.989.989 0 00-.641 1.55l3.795 5.325c.153.213-.11.477-.324.324l-5.326-3.795a.989.989 0 00-1.549.641l-1.082 6.45c-.043.259-.415.259-.458 0l-1.082-6.45a.989.989 0 00-1.55-.641L3.815 20.51c-.214.153-.477-.11-.324-.324l3.795-5.326a.989.989 0 00-.641-1.549L.194 12.23c-.259-.043-.259-.415 0-.458l6.45-1.082a.989.989 0 00.641-1.55L3.49 3.815c-.153-.214.11-.477.324-.324L9.14 7.285a.989.989 0 001.549-.641L11.77.194z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'CelestoAIMono';
export default Icon;
@@ -0,0 +1,27 @@
import React, { memo } from 'react';
import { Path, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
const Icon = memo<RNIconProps>(({ size = 24, style, color = '#000000', ...rest }) => {
return (
<Svg
color={color}
fillRule="nonzero"
height={size}
style={style}
viewBox="0 0 137 24"
width={size * 5.71} // 保持宽高比
{...rest}
>
<Path
d="M12.49 23c-1.52 0-2.923-.268-4.207-.803a10.25 10.25 0 01-3.32-2.319 10.334 10.334 0 01-2.192-3.508C2.256 15.022 2 13.546 2 11.94c0-1.605.257-3.072.77-4.4.514-1.327 1.235-2.477 2.164-3.448a9.873 9.873 0 013.319-2.29C9.537 1.269 10.95 1 12.49 1c1.699 0 3.23.337 4.593 1.01a8.828 8.828 0 013.349 2.855c.889 1.209 1.432 2.636 1.63 4.28h-3.794c-.237-1.604-.879-2.833-1.926-3.686-1.047-.872-2.321-1.308-3.823-1.308-1.323 0-2.48.317-3.467.952-.988.634-1.758 1.536-2.311 2.705-.554 1.15-.83 2.517-.83 4.103 0 1.625.276 3.032.83 4.221.553 1.17 1.333 2.081 2.34 2.736 1.008.654 2.164.98 3.468.98 1.462 0 2.716-.425 3.764-1.278 1.047-.872 1.708-2.1 1.985-3.686h3.823c-.237 1.625-.8 3.052-1.69 4.28a8.828 8.828 0 01-3.348 2.855c-1.363.654-2.894.981-4.593.981zM31.756 23c-1.6 0-3.002-.337-4.208-1.01a7.27 7.27 0 01-2.785-2.795c-.652-1.19-.978-2.557-.978-4.103 0-1.546.326-2.904.978-4.073a7.063 7.063 0 012.785-2.765c1.186-.674 2.569-1.01 4.15-1.01 1.5 0 2.805.316 3.911.95a6.436 6.436 0 012.578 2.617c.613 1.13.919 2.448.919 3.954a8.821 8.821 0 01-.118 1.486H26.095v-2.616h10.017l-.77.714c0-1.427-.327-2.498-.979-3.211-.652-.714-1.56-1.07-2.726-1.07-1.264 0-2.272.436-3.023 1.308-.73.872-1.096 2.13-1.096 3.775 0 1.626.365 2.874 1.096 3.746.751.853 1.808 1.279 3.171 1.279.79 0 1.482-.149 2.075-.446a2.743 2.743 0 001.303-1.368h3.527c-.494 1.427-1.334 2.557-2.519 3.39-1.165.832-2.637 1.248-4.415 1.248zM41.9 22.703V1.297h3.734v21.406H41.9zM56.385 23c-1.6 0-3.003-.337-4.209-1.01a7.27 7.27 0 01-2.785-2.795c-.652-1.19-.978-2.557-.978-4.103 0-1.546.326-2.904.978-4.073a7.062 7.062 0 012.785-2.765c1.186-.674 2.569-1.01 4.15-1.01 1.5 0 2.805.316 3.91.95a6.436 6.436 0 012.58 2.617c.612 1.13.918 2.448.918 3.954a8.821 8.821 0 01-.119 1.486h-12.89v-2.616H60.74l-.77.714c0-1.427-.327-2.498-.979-3.211-.652-.714-1.56-1.07-2.726-1.07-1.264 0-2.272.436-3.023 1.308-.73.872-1.096 2.13-1.096 3.775 0 1.626.365 2.874 1.096 3.746.75.853 1.808 1.279 3.171 1.279.79 0 1.482-.149 2.075-.446a2.743 2.743 0 001.303-1.368h3.527c-.494 1.427-1.334 2.557-2.519 3.39-1.166.832-2.637 1.248-4.415 1.248zM72.394 23c-2.095 0-3.764-.436-5.009-1.308-1.244-.892-1.926-2.12-2.044-3.687h3.408c.098.773.464 1.358 1.096 1.755.632.396 1.482.594 2.549.594.968 0 1.689-.149 2.163-.446.494-.317.74-.763.74-1.338 0-.416-.138-.753-.414-1.01-.277-.278-.8-.506-1.57-.684l-2.43-.565c-1.66-.357-2.895-.912-3.705-1.665-.79-.773-1.185-1.734-1.185-2.884 0-1.407.533-2.507 1.6-3.3 1.086-.812 2.578-1.219 4.475-1.219 1.877 0 3.378.407 4.504 1.22 1.146.792 1.778 1.892 1.897 3.3H75.06a1.904 1.904 0 00-.949-1.398c-.513-.317-1.224-.476-2.133-.476-.85 0-1.492.139-1.927.416-.434.258-.652.645-.652 1.16 0 .396.168.733.504 1.01.336.258.9.486 1.69.684l2.607.595c1.482.337 2.598.922 3.349 1.754a4.19 4.19 0 011.156 2.943c0 1.447-.553 2.567-1.66 3.36C75.94 22.604 74.39 23 72.394 23zM88.016 23c-1.857 0-3.23-.436-4.12-1.308-.869-.892-1.303-2.22-1.303-3.984V4.092l3.763-1.397v15.102c0 .734.198 1.279.593 1.635.395.357 1.017.536 1.867.536.336 0 .632-.02.889-.06.277-.06.533-.129.77-.208v2.913c-.237.12-.572.209-1.007.268-.435.08-.919.119-1.452.119zm-8.328-12.516V7.54h10.787v2.943H79.69zM99.68 23c-1.6 0-3.012-.337-4.237-1.01a7.213 7.213 0 01-2.815-2.795c-.672-1.21-1.008-2.587-1.008-4.133 0-1.546.336-2.903 1.008-4.073a7.067 7.067 0 012.815-2.735c1.225-.674 2.638-1.01 4.238-1.01 1.62 0 3.032.336 4.237 1.01a7.065 7.065 0 012.816 2.735c.671 1.17 1.007 2.527 1.007 4.073 0 1.546-.345 2.924-1.037 4.133a7.215 7.215 0 01-2.815 2.794c-1.205.674-2.608 1.011-4.208 1.011zm0-3.003c.791 0 1.502-.198 2.134-.594.633-.416 1.127-.991 1.482-1.725.356-.753.534-1.635.534-2.646 0-1.486-.396-2.655-1.186-3.508-.77-.852-1.758-1.278-2.963-1.278s-2.203.426-2.993 1.278c-.79.853-1.186 2.022-1.186 3.508 0 1.011.178 1.893.534 2.646.375.734.869 1.308 1.481 1.725.633.396 1.354.594 2.164.594zM108.406 22.703l7.853-21.406h3.319l-7.379 21.406h-3.793zm16.092 0l-7.35-21.406h3.497l7.824 21.406h-3.971zm-12.032-8.414h11.676v3.092h-11.676V14.29zM131.148 22.703V1.297H135v21.406h-3.852z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'CelestoAIText';
export default Icon;
@@ -0,0 +1,25 @@
import Avatar from './components/Avatar';
import Color from './components/Color';
import Combine from './components/Combine';
import Mono from './components/Mono';
import Text from './components/Text';
import { COLOR_PRIMARY, TITLE } from './style';
export type CompoundedIcon = typeof Mono & {
Avatar: typeof Avatar;
Color: typeof Color;
Combine: typeof Combine;
Text: typeof Text;
colorPrimary: string;
title: string;
};
const Icons = Mono as CompoundedIcon;
Icons.Color = Color;
Icons.Text = Text;
Icons.Combine = Combine;
Icons.Avatar = Avatar;
Icons.colorPrimary = COLOR_PRIMARY;
Icons.title = TITLE;
export default Icons;
@@ -0,0 +1,9 @@
export const TITLE = 'CelestoAI';
export const COMBINE_TEXT_MULTIPLE = 0.75;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#000';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
export const AVATAR_ICON_MULTIPLE = 0.75;
@@ -0,0 +1,22 @@
import React, { memo } from 'react';
import { RNIconAvatar, type RNIconAvatarProps } from '@/features';
import { AVATAR_BACKGROUND, AVATAR_COLOR, AVATAR_ICON_MULTIPLE, TITLE } from '../style';
import 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="M18.183 7.67c-.939.278-1.647.905-2.166 1.586-.11.146-.343.036-.299-.143.993-4.058-.318-7.432-4.407-9.092a.272.272 0 00-.368.317C12.803 7.76 4.98 7.135 5.969 15.55a.17.17 0 01-.266.159c-.37-.265-.784-.817-1.068-1.205a.17.17 0 00-.302.054A8.631 8.631 0 004 16.9a8.43 8.43 0 003.843 7.07c.133.086.303-.038.258-.189a4.533 4.533 0 01-.133-2.041c.097-.637.32-1.244.694-1.797 1.283-1.914 3.854-3.763 3.443-6.273-.026-.16.162-.264.281-.155 1.812 1.645 2.17 3.858 1.873 5.844-.026.172.192.264.302.129.277-.345.615-.647.983-.875a.17.17 0 01.25.088c.204.592.508 1.148.796 1.704a4.528 4.528 0 01.307 3.375.17.17 0 00.257.192A8.43 8.43 0 0021 16.9a8.746 8.746 0 00-.524-2.98c-.718-1.982-2.54-3.47-2.08-6.053a.17.17 0 00-.213-.195z"
fill="#ff4d00"
/>
</Svg>
);
});
Icon.displayName = 'FirecrawlColor';
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="M18.183 7.67c-.939.278-1.647.905-2.166 1.586-.11.146-.343.036-.299-.143.993-4.058-.318-7.432-4.407-9.092a.272.272 0 00-.368.317C12.803 7.76 4.98 7.135 5.969 15.55a.17.17 0 01-.266.159c-.37-.265-.784-.817-1.068-1.205a.17.17 0 00-.302.054A8.631 8.631 0 004 16.9a8.43 8.43 0 003.843 7.07c.133.086.303-.038.258-.189a4.533 4.533 0 01-.133-2.041c.097-.637.32-1.244.694-1.797 1.283-1.914 3.854-3.763 3.443-6.273-.026-.16.162-.264.281-.155 1.812 1.645 2.17 3.858 1.873 5.844-.026.172.192.264.302.129.277-.345.615-.647.983-.875a.17.17 0 01.25.088c.204.592.508 1.148.796 1.704a4.528 4.528 0 01.307 3.375.17.17 0 00.257.192A8.43 8.43 0 0021 16.9a8.746 8.746 0 00-.524-2.98c-.718-1.982-2.54-3.47-2.08-6.053a.17.17 0 00-.213-.195z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'FirecrawlMono';
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 131 24"
width={size * 5.46} // 保持宽高比
{...rest}
>
<Path
d="M0 23.799V.465h14.93v3.4H3.84v6.767h9.152v3.3H3.841v9.867H0zM19.177 4.333c-1.236 0-2.204-.9-2.204-2.166C16.973.9 17.94 0 19.177 0c1.236 0 2.204.9 2.204 2.167 0 1.266-.968 2.166-2.204 2.166zM17.34 23.801V6.732h3.607V23.8H17.34zM32.967 6.734h.802v3.367h-1.604c-3.206 0-4.241 2.5-4.241 5.134V23.8h-3.608V6.734h3.207l.4 2.567c.869-1.433 2.238-2.567 5.044-2.567zM43.128 23.998c-5.378 0-8.751-3.466-8.751-8.7 0-5.267 3.373-8.767 8.417-8.767 4.943 0 8.25 3.134 8.35 8.134 0 .433-.034.9-.1 1.366H38.15v.234c.1 2.9 1.937 4.8 4.776 4.8 2.205 0 3.808-1.1 4.309-3h3.607c-.601 3.366-3.474 5.933-7.715 5.933zm-4.843-10.6h9.118c-.3-2.533-2.071-3.967-4.576-3.967-2.305 0-4.275 1.534-4.542 3.967zM61.74 23.998c-5.178 0-8.484-3.367-8.484-8.7 0-5.267 3.407-8.767 8.584-8.767 4.408 0 7.147 2.434 7.849 6.3h-3.775c-.467-2-1.904-3.233-4.141-3.233-2.906 0-4.81 2.333-4.81 5.7 0 3.333 1.904 5.633 4.81 5.633 2.204 0 3.674-1.266 4.108-3.233h3.808c-.67 3.867-3.574 6.3-7.95 6.3zM80.933 6.734h.802v3.367h-1.603c-3.207 0-4.242 2.5-4.242 5.134V23.8h-3.607V6.734h3.207l.4 2.567c.868-1.433 2.238-2.567 5.043-2.567zM90.65 6.531c4.543 0 7.148 2.167 7.148 6.2v11.067h-3.14l-.3-2.433c-1.17 1.533-2.806 2.633-5.51 2.633-3.742 0-6.246-1.833-6.246-5 0-3.5 2.538-5.467 7.347-5.467h4.276v-1.033c0-1.9-1.37-3.067-3.741-3.067-2.138 0-3.574 1-3.841 2.5h-3.54c.367-3.333 3.24-5.4 7.548-5.4zm-1.202 14.667c3.006 0 4.743-1.767 4.777-4.4v-.6h-4.477c-2.237 0-3.472.833-3.472 2.567 0 1.433 1.201 2.433 3.172 2.433zM104.853 23.801L99.275 6.734h3.808l3.908 13.067 3.908-13.067h3.305l3.741 13.067 4.042-13.067h3.674l-5.678 17.067h-3.875l-3.606-11.6-3.741 11.6h-3.908zM127.393 23.799V.465H131v23.334h-3.607z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'FirecrawlText';
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 = 'Firecrawl';
export const COMBINE_TEXT_MULTIPLE = 0.6;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#ff4d00';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
export const AVATAR_ICON_MULTIPLE = 0.75;
@@ -0,0 +1,22 @@
import React, { memo } from 'react';
import { RNIconAvatar, type RNIconAvatarProps } from '@/features';
import { AVATAR_BACKGROUND, AVATAR_COLOR, AVATAR_ICON_MULTIPLE, TITLE } from '../style';
import Mono from './Mono';
export type AvatarProps = Omit<RNIconAvatarProps, 'Icon'>;
const Avatar = memo<AvatarProps>(({ background, ...rest }) => {
return (
<RNIconAvatar
Icon={Mono}
aria-label={TITLE}
background={background || AVATAR_BACKGROUND}
color={AVATAR_COLOR}
iconMultiple={AVATAR_ICON_MULTIPLE}
{...rest}
/>
);
});
export default Avatar;
@@ -0,0 +1,27 @@
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}
iconProps={{
shape: 'square',
}}
spaceMultiple={COMBINE_SPACE_MULTIPLE}
textMultiple={COMBINE_TEXT_MULTIPLE}
{...rest}
/>
);
});
export default Combine;
@@ -0,0 +1,28 @@
import React, { memo } from 'react';
import { Path, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
const Icon = memo<RNIconProps>(({ size = 24, style, color = '#000000', ...rest }) => {
return (
<Svg
color={color}
fillRule="evenodd"
height={size}
style={style}
viewBox="0 0 24 24"
width={size}
{...rest}
>
<Path
clipRule="evenodd"
d="M2.93 18.812a.79.79 0 01.45.142v-.002c.944.7 1.97 1.28 3.058 1.727a13.955 13.955 0 008.47.665c1.22-.288 2.397-.74 3.496-1.344.567-.311 1.113-.66 1.632-1.046a.787.787 0 01.327-.131l.123-.01c.444 0 .804.371.804.829 0 .14-.034.276-.1.399.03-.015.06-.032.09-.049l-.166.167a.82.82 0 01-.174.166C18.501 22.608 15.26 24 11.71 24c-3.55 0-6.787-1.389-9.223-3.668l-.19-.181a.842.842 0 01-.17-.51c0-.457.36-.829.804-.829H2.93zM5.536 0c.461.047.91.178 1.324.388a4.561 4.561 0 014.119.954 4.828 4.828 0 011.653 3.09l.856 5.005.1.586 2.1.411c.387.075.746.23 1.06.446.085-.155.185-.3.299-.433a2.39 2.39 0 011.818-.845c.84 0 1.581.441 2.016 1.11.243.373.391.816.409 1.293h.006a3.04 3.04 0 001.204 2.277c-.352.3-.8.467-1.262.469-.466 0-.893-.167-1.231-.444a2.032 2.032 0 01-.716-1.238l-.01.002c-.158-.905-.926-1.592-1.85-1.592l-.043.001a3.04 3.04 0 01.464 2.893c-.13.365-.327.695-.577.976l.022.002a3.266 3.266 0 00-.401 2.829l.557 1.9c-.862.403-1.764.713-2.692.926l-1.604-3.696a2.31 2.31 0 001.301-.62 2.81 2.81 0 01-1.624-.127c-.033-.013-.064-.025-.095-.039l-.377-.132-1.691-.621-1.257-.462-2.598 1.726.596 2.187H7.41c.023.093.035.192.035.293 0 .407-.202.765-.508.975a13.504 13.504 0 01-1.23-.531l-.334-1.112-.662-2.206a1.12 1.12 0 01.067-.915 1.1 1.1 0 01.375-.4l1.482-1.04-2.626-.964-.437 1.786H3.57c-.202.81-.916 1.41-1.766 1.41a1.8 1.8 0 01-.304-.027l.002-.014.785-3.216.1-.404.222-.91h.003a1.113 1.113 0 011.071-.854c.088 0 .172.01.253.03l.004.002.016.005c.238.073.476.148.713.223.444.14.93.3.956.326l.07-.212.275-.836.364-1.104.67-2.027.453-1.375a3.12 3.12 0 00.708-.866c.184-.332.313-.701.371-1.094-.165.43-.445.807-.808 1.09L6.7 5.718l-1.93.866-.011.005a.948.948 0 01-.325.075l-.054.003a.982.982 0 01-.884-.57 1.03 1.03 0 01.145-1.116l.424-.643L5.874 1.6 5.718.86 5.704.793 5.646.516 5.536 0z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'HappyHorseMono';
export default Icon;
@@ -0,0 +1,28 @@
import React, { memo } from 'react';
import { Path, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
const Icon = memo<RNIconProps>(({ size = 24, style, color = '#000000', ...rest }) => {
return (
<Svg
color={color}
fillRule="evenodd"
height={size}
style={style}
viewBox="0 0 153 24"
width={size * 6.38} // 保持宽高比
{...rest}
>
<Path
d="M40.473 17.519a6.058 6.058 0 110-12.116 6.058 6.058 0 010 12.116zM65.664 5.403L70.446 17.2M75.861 5.403L68.209 22.62M120.502 5.403v12.116M125.923 5.403a5.42 5.42 0 00-5.421 5.42v6.696M.62.62V17.52M12.414 8.591H1.254M12.414.62V17.52M88.297.62V17.52M100.097 8.591h-11.16M100.098.62V17.52M23.173 17.519a6.058 6.058 0 100-12.116 6.058 6.058 0 000 12.116zM29.23 5.403v12.116M34.416 5.403V22.62M56.733 17.519a6.058 6.058 0 110-12.116 6.058 6.058 0 010 12.116zM50.672 5.403V22.62M151.121 14.412c-.537.932-1.862 3.107-5.587 3.107-3.727 0-5.899-2.796-5.899-6.213 0-2.486 1.862-5.903 5.899-5.903 4.579 0 5.855 3.906 5.897 5.808a.094.094 0 01-.095.095H140.1M110.3 17.519a6.058 6.058 0 100-12.116 6.058 6.058 0 000 12.116zM135.943 7.7c0-.981-1.224-2.617-3.483-2.617-2.26 0-3.539 1.636-3.539 2.944s.225 2.354 3.539 3.27c3.314.915 3.86 2.289 3.86 3.433 0 1.145-.999 3.107-3.86 3.107-2.862 0-3.86-1.962-3.86-3.27"
stroke="currentColor"
stroke-linecap="round"
/>
</Svg>
);
});
Icon.displayName = 'HappyHorseText';
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 = 'Hedra';
export const COMBINE_TEXT_MULTIPLE = 0.8;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#000';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
export const AVATAR_ICON_MULTIPLE = 0.75;
@@ -0,0 +1,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="M18.654 3.87a5.087 5.087 0 110 10.174L23.7 19.09c.64.641.187 1.737-.72 1.737H8.48a8.479 8.479 0 010-16.958h10.175zM8.479 7.26a5.087 5.087 0 100 10.176 5.087 5.087 0 000-10.175z"
fill="#C8FF00"
/>
</Svg>
);
});
Icon.displayName = 'OpenRouterColor';
export default Icon;
@@ -2,24 +2,22 @@ import React, { memo } from 'react';
import { RNIconCombine, type RNIconCombineProps } from '@/features';
import { COLOR_PRIMARY, COMBINE_SPACE_MULTIPLE, COMBINE_TEXT_MULTIPLE, TITLE } from '../style';
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?: 'mono' | 'color';
type?: 'color' | 'mono';
}
const Combine = memo<CombineProps>(({ type = 'mono', ...rest }) => {
const Icon = type === 'color' ? Color : Mono;
const Combine = memo<CombineProps>(({ type = 'mono', iconProps, ...rest }) => {
return (
<RNIconCombine
Icon={Mono}
Text={Text as any}
Icon={Icon}
Text={Text}
aria-label={TITLE}
iconProps={{
color: type === 'color' ? COLOR_PRIMARY : undefined,
...iconProps,
}}
spaceMultiple={COMBINE_SPACE_MULTIPLE}
textMultiple={COMBINE_TEXT_MULTIPLE}
{...rest}
@@ -15,7 +15,7 @@ const Icon = memo<RNIconProps>(({ size = 24, style, color = '#000000', ...rest }
{...rest}
>
<Path
d="M16.804 1.957l7.22 4.105v.087L16.73 10.21l.017-2.117-.821-.03c-1.059-.028-1.611.002-2.268.11-1.064.175-2.038.577-3.147 1.352L8.345 11.03c-.284.195-.495.336-.68.455l-.515.322-.397.234.385.23.53.338c.476.314 1.17.796 2.701 1.866 1.11.775 2.083 1.177 3.147 1.352l.3.045c.694.091 1.375.094 2.825.033l.022-2.159 7.22 4.105v.087L16.589 22l.014-1.862-.635.022c-1.386.042-2.137.002-3.138-.162-1.694-.28-3.26-.926-4.881-2.059l-2.158-1.5a21.997 21.997 0 00-.755-.498l-.467-.28a55.927 55.927 0 00-.76-.43C2.908 14.73.563 14.116 0 14.116V9.888l.14.004c.564-.007 2.91-.622 3.809-1.124l1.016-.58.438-.274c.428-.28 1.072-.726 2.686-1.853 1.621-1.133 3.186-1.78 4.881-2.059 1.152-.19 1.974-.213 3.814-.138l.02-1.907z"
d="M18.654 3.87a5.087 5.087 0 110 10.174L23.7 19.09c.64.641.187 1.737-.72 1.737H8.48a8.479 8.479 0 010-16.958h10.175zM8.479 7.26a5.087 5.087 0 100 10.176 5.087 5.087 0 000-10.175z"
fill={color}
/>
</Svg>
File diff suppressed because one or more lines are too long
@@ -1,4 +1,5 @@
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';
@@ -6,6 +7,7 @@ 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;
@@ -13,9 +15,11 @@ export type CompoundedIcon = typeof Mono & {
};
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;
@@ -1,9 +1,9 @@
export const TITLE = 'OpenRouter';
export const COMBINE_TEXT_MULTIPLE = 1;
export const COMBINE_SPACE_MULTIPLE = 0.4;
export const COLOR_PRIMARY = '#6566F1';
export const COMBINE_SPACE_MULTIPLE = 0.3;
export const COLOR_PRIMARY = '#C8FF00';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
export const AVATAR_BACKGROUND = '#000';
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,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,29 @@
import React, { memo } from 'react';
import { Path, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
const Icon = memo<RNIconProps>(({ size = 24, style, color = '#000000', ...rest }) => {
return (
<Svg
color={color}
fillRule="evenodd"
height={size}
style={style}
viewBox="0 0 24 24"
width={size}
{...rest}
>
<Path
clipRule="evenodd"
d="M1 1h16.5v11H12v5.5H6.5V23H1V1zm5.5 5.5V12H12V6.5H6.5z"
fill={color}
/>
<Path d="M17.5 12H23v11h-5.5V12z" fill={color} />
</Svg>
);
});
Icon.displayName = 'PiMono';
export default Icon;
@@ -0,0 +1 @@
export { default } from './Mono';
@@ -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 = 'Pi';
export const COMBINE_TEXT_MULTIPLE = 0.8;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#000';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
export const AVATAR_ICON_MULTIPLE = 0.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,80 @@
import React, { memo } from 'react';
import { ClipPath, Defs, G, LinearGradient, Mask, Path, Stop, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
import { useFillIds } from '@/hooks/useFillId';
import { COLOR_PRIMARY, TITLE } from '../style';
const Icon = memo<RNIconProps>(({ size = 24, style, ...rest }) => {
const [a, b, c, d, e] = useFillIds(TITLE, 5);
return (
<Svg height={size} style={style} viewBox="0 0 24 24" width={size} {...rest}>
<G clipPath={a.fill}>
<Mask
height="24"
id={e.id}
maskUnits="userSpaceOnUse"
style={{ maskType: 'alpha' }}
width="24"
x="0"
y="0"
>
<Path d="M24 0H0v24h24V0z" fill={b.fill} />
<Path d="M24 0H0v24h24V0z" fill={c.fill} />
<Path d="M24 0H0v24h24V0z" fill={d.fill} />
</Mask>
<G mask={e.fill}>
<Path
d="M6.742 22.786a11.93 11.93 0 01-5.232-4.963 11.98 11.98 0 01-1.463-6.886.975.975 0 011.943.173c-.178 2.005.246 4 1.226 5.769a9.968 9.968 0 003.526 3.685l4.586-9.405c-1.795-.598-3.29-.338-3.425-.312l-.058.012a.972.972 0 01-1.054-.576c-.24-.448-.96-1.544-1.834-1.97-.873-.426-2.218-.289-2.651-.195a.977.977 0 01-1.087-1.38C4.117.792 11.315-1.686 17.262 1.215c5.946 2.9 8.422 10.093 5.529 16.038l-.01.02c-2.903 5.94-10.095 8.414-16.039 5.514zm6.338-10.773l-4.586 9.405c4.629 1.73 9.896-.192 12.304-4.558-.338-.524-.932-1.275-1.62-1.61-.888-.434-2.19-.292-2.637-.198a.989.989 0 01-.616-.055.984.984 0 01-.49-.473c-.028-.058-.739-1.438-2.355-2.51zM5.81 6.56c.747.365 1.356.944 1.81 1.49 1.406-2.15 3.314-3.774 4.787-4.82a20.81 20.81 0 011.66-1.067A10.078 10.078 0 003.882 6.077c.617.042 1.297.174 1.929.482zm12.671-2.243c.09.624.152 1.294.182 1.965.083 1.801-.021 4.296-.844 6.722.686.018 1.484.14 2.214.495.652.318 1.198.8 1.628 1.28a10.082 10.082 0 00-3.18-10.462zm-5.394 5.46a9.522 9.522 0 012.984 2.287c1.075-3.493.606-7.402.215-8.85-1.381.584-4.75 2.62-6.84 5.618a9.515 9.515 0 013.64.944z"
fill={COLOR_PRIMARY}
/>
</G>
</G>
<Defs>
<LinearGradient
gradientUnits="userSpaceOnUse"
id={b.id}
x1="6.75"
x2="5.625"
y1="20.55"
y2="20.55"
>
<Stop />
<Stop offset="100%" stopOpacity="0" />
</LinearGradient>
<LinearGradient
gradientUnits="userSpaceOnUse"
id={c.id}
x1="6.825"
x2="7.2"
y1="11.85"
y2="11.137"
>
<Stop stopOpacity="0" />
<Stop offset="100%" />
</LinearGradient>
<LinearGradient
gradientUnits="userSpaceOnUse"
id={d.id}
x1=".975"
x2=".975"
y1="20.512"
y2="10.912"
>
<Stop />
<Stop offset="10.5%" stopOpacity=".9" />
<Stop offset="90.4%" stopOpacity=".04" />
<Stop offset="100%" stopOpacity="0" />
</LinearGradient>
<ClipPath id="a">
<Path d="M0 0h24v24H0z" fill="#fff" />
</ClipPath>
</Defs>
</Svg>
);
});
Icon.displayName = 'PoolsideColor';
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'> {
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,88 @@
import React, { memo } from 'react';
import { ClipPath, Defs, G, LinearGradient, Mask, Path, Stop, Svg } from 'react-native-svg';
import type { RNIconProps } from '@/features';
import { useFillIds } from '@/hooks/useFillId';
import { TITLE } from '../style';
const Icon = memo<RNIconProps>(({ size = 24, style, color = '#000000', ...rest }) => {
const [a, b, c, d, e] = useFillIds(TITLE, 5);
return (
<Svg
color={color}
fillRule="evenodd"
height={size}
style={style}
viewBox="0 0 24 24"
width={size}
{...rest}
>
<G clipPath={a.fill}>
<Mask
height="24"
id={e.id}
maskUnits="userSpaceOnUse"
style={{ maskType: 'alpha' }}
width="24"
x="0"
y="0"
>
<Path d="M24 0H0v24h24V0z" fill={b.fill} />
<Path d="M24 0H0v24h24V0z" fill={c.fill} />
<Path d="M24 0H0v24h24V0z" fill={d.fill} />
</Mask>
<G mask={e.fill}>
<Path
d="M6.742 22.786a11.93 11.93 0 01-5.232-4.963 11.98 11.98 0 01-1.463-6.886.975.975 0 011.943.173c-.178 2.005.246 4 1.226 5.769a9.968 9.968 0 003.526 3.685l4.586-9.405c-1.795-.598-3.29-.338-3.425-.312l-.058.012a.972.972 0 01-1.054-.576c-.24-.448-.96-1.544-1.834-1.97-.873-.426-2.218-.289-2.651-.195a.977.977 0 01-1.087-1.38C4.117.792 11.315-1.686 17.262 1.215c5.946 2.9 8.422 10.093 5.529 16.038l-.01.02c-2.903 5.94-10.095 8.414-16.039 5.514zm6.338-10.773l-4.586 9.405c4.629 1.73 9.896-.192 12.304-4.558-.338-.524-.932-1.275-1.62-1.61-.888-.434-2.19-.292-2.637-.198a.989.989 0 01-.616-.055.984.984 0 01-.49-.473c-.028-.058-.739-1.438-2.355-2.51zM5.81 6.56c.747.365 1.356.944 1.81 1.49 1.406-2.15 3.314-3.774 4.787-4.82a20.81 20.81 0 011.66-1.067A10.078 10.078 0 003.882 6.077c.617.042 1.297.174 1.929.482zm12.671-2.243c.09.624.152 1.294.182 1.965.083 1.801-.021 4.296-.844 6.722.686.018 1.484.14 2.214.495.652.318 1.198.8 1.628 1.28a10.082 10.082 0 00-3.18-10.462zm-5.394 5.46a9.522 9.522 0 012.984 2.287c1.075-3.493.606-7.402.215-8.85-1.381.584-4.75 2.62-6.84 5.618a9.515 9.515 0 013.64.944z"
fill={color}
/>
</G>
</G>
<Defs>
<LinearGradient
gradientUnits="userSpaceOnUse"
id={b.id}
x1="6.75"
x2="5.625"
y1="20.55"
y2="20.55"
>
<Stop stopColor="currentColor" />
<Stop offset="100%" stopColor="currentColor" stopOpacity="0" />
</LinearGradient>
<LinearGradient
gradientUnits="userSpaceOnUse"
id={c.id}
x1="6.825"
x2="7.2"
y1="11.85"
y2="11.137"
>
<Stop stopColor="currentColor" stopOpacity="0" />
<Stop offset="100%" stopColor="currentColor" />
</LinearGradient>
<LinearGradient
gradientUnits="userSpaceOnUse"
id={d.id}
x1=".975"
x2=".975"
y1="20.512"
y2="10.912"
>
<Stop stopColor="currentColor" />
<Stop offset="10.5%" stopColor="currentColor" stopOpacity=".9" />
<Stop offset="90.4%" stopColor="currentColor" stopOpacity=".04" />
<Stop offset="100%" stopColor="currentColor" stopOpacity="0" />
</LinearGradient>
<ClipPath id={a.id}>
<Path d="M0 0h24v24H0z" fill={color} />
</ClipPath>
</Defs>
</Svg>
);
});
Icon.displayName = 'PoolsideMono';
export default Icon;
@@ -0,0 +1,42 @@
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 108 24"
width={size * 4.5} // 保持宽高比
{...rest}
>
<Path d="M50.477.293L53.709.27l.13 18.09-3.233.024-.13-18.091z" fill={color} />
<Path
clipRule="evenodd"
d="M75.914 9.047c-.38.826-.565 1.753-.558 2.777h-.004c.007.982.195 1.879.568 2.685a6.156 6.156 0 001.548 2.079c.66.577 1.446 1.023 2.361 1.337.916.315 1.923.466 3.013.458.465-.003.94-.044 1.415-.127.474-.082.934-.188 1.376-.321a9.278 9.278 0 001.24-.465c.385-.18.72-.368 1.003-.566l.008 1.21 3.233-.023L90.987 0l-3.233.023.045 6.156a6.862 6.862 0 00-.982-.458 9.2 9.2 0 00-1.181-.36c-.42-.099-.858-.175-1.31-.232a10.395 10.395 0 00-1.38-.079c-1.094.008-2.108.174-3.038.497-.929.323-1.736.78-2.412 1.371a6.288 6.288 0 00-1.582 2.129zm3.16 4.212a3.46 3.46 0 01-.323-1.46v-.008a3.596 3.596 0 011.21-2.777c.394-.353.88-.63 1.457-.835.576-.204 1.236-.307 1.977-.312a7.84 7.84 0 012.27.324c.379.113.752.26 1.117.438.365.18.715.4 1.043.658l.032 4.462a4.742 4.742 0 01-.916.738 6.62 6.62 0 01-1.133.566 7.677 7.677 0 01-1.26.363c-.432.087-.87.132-1.308.135-.684.005-1.3-.089-1.85-.285a4.306 4.306 0 01-1.413-.809 3.637 3.637 0 01-.903-1.198zM92.696 9.1a6.024 6.024 0 00-.518 2.507c.007.94.204 1.814.579 2.625.373.812.932 1.515 1.673 2.115.74.6 1.656 1.072 2.748 1.409 1.092.336 2.365.504 3.814.494a16.307 16.307 0 001.62-.086 14.104 14.104 0 001.47-.234 11.1 11.1 0 001.353-.382c.432-.152.929-.332 1.351-.53l-1.182-2.454a15.34 15.34 0 01-2.1.61 10.847 10.847 0 01-4.247.073 6.578 6.578 0 01-1.62-.528 4.268 4.268 0 01-1.17-.82 2.948 2.948 0 01-.68-1.052l12.185-.087c.013-.116.021-.242.025-.386.004-.144.002-.274.001-.4a7.034 7.034 0 00-.569-2.779 6.545 6.545 0 00-1.6-2.245c-.693-.638-1.531-1.134-2.521-1.495-.99-.36-2.095-.534-3.33-.525-1.234.009-2.336.198-3.307.568-.97.37-1.792.86-2.453 1.479A6.474 6.474 0 0092.696 9.1zm11.314.17c.245.306.429.635.548.992l-.005.01-8.788.063a3.04 3.04 0 01.543-.977c.249-.304.56-.576.94-.811.38-.236.816-.425 1.318-.568a6.257 6.257 0 011.67-.222 6.019 6.019 0 011.585.184c.481.127.906.306 1.271.531.365.226.674.493.918.799z"
fill={color}
/>
<Path
d="M72.327 3.6a2.644 2.644 0 01-.867-.128 1.988 1.988 0 01-.664-.368 1.676 1.676 0 01-.423-.541 1.566 1.566 0 01.406-1.874c.18-.155.398-.277.658-.372.26-.095.549-.139.865-.141.317-.002.62.042.882.129.261.086.48.21.664.362a1.569 1.569 0 01.576 1.206 1.586 1.586 0 01-.56 1.21c-.18.154-.398.281-.658.376-.26.095-.548.14-.879.141zM70.723 5.367l3.232-.023.092 12.87-3.232.023-.092-12.87zM56.224 14.396l-.001-.001.004-.004-.003.005z"
fill={color}
/>
<Path
d="M55.03 16.87l1.194-2.473c.88.514 1.84.893 2.89 1.132 1.05.24 2.122.357 3.22.35.741-.006 1.36-.061 1.853-.167.493-.106.888-.24 1.185-.4.297-.16.505-.343.63-.549.124-.205.183-.41.181-.624-.002-.308-.139-.567-.406-.784-.267-.217-.705-.32-1.316-.316a8.164 8.164 0 00-.917.062l-1.028.124c-.358.044-.735.084-1.122.124-.386.04-.782.062-1.182.064-.876.007-1.617-.081-2.233-.267-.616-.187-1.117-.44-1.505-.762a2.85 2.85 0 01-.847-1.157 3.994 3.994 0 01-.271-1.446 3.705 3.705 0 01.443-1.813c.299-.556.733-1.034 1.299-1.442.565-.41 1.247-.726 2.052-.96.804-.233 1.697-.352 2.689-.359.517-.003 1.058.025 1.622.082.563.056 1.118.136 1.664.235.546.098 1.073.21 1.577.342.419.11.896.298 1.268.446l.212.083-1.142 2.41a17.805 17.805 0 00-2.47-.709 11.96 11.96 0 00-2.53-.247 7.516 7.516 0 00-1.532.146c-.418.091-.757.215-1.017.365-.26.151-.45.325-.57.516-.119.192-.178.397-.177.607a.934.934 0 00.096.413.777.777 0 00.31.319c.145.087.327.156.56.205.234.05.513.066.849.064a9.07 9.07 0 00.973-.063l.284-.032.786-.092c.372-.044.754-.084 1.15-.124.395-.04.8-.062 1.215-.065.773-.005 1.449.083 2.028.26.578.178 1.06.43 1.44.753.38.323.666.707.86 1.148.194.44.291.924.295 1.45a3.927 3.927 0 01-.457 1.888c-.308.583-.77 1.09-1.386 1.522-.617.432-1.383.768-2.303 1.012-.92.244-1.982.372-3.193.381a16.982 16.982 0 01-4.13-.478c-.625-.153-1.223-.317-1.769-.536-.7-.28-.845-.366-1.028-.473a5.314 5.314 0 00-.295-.164z"
fill={color}
/>
<Path
clipRule="evenodd"
d="M33.963 9.468a6.068 6.068 0 00-.545 2.6c.007.926.2 1.786.582 2.593a6.334 6.334 0 001.622 2.105c.699.6 1.54 1.074 2.53 1.41.99.338 2.1.507 3.33.498 1.229-.008 2.34-.189 3.32-.545.981-.356 1.82-.836 2.51-1.446a6.32 6.32 0 001.587-2.129 6.055 6.055 0 00.545-2.6 6.124 6.124 0 00-.582-2.592 6.257 6.257 0 00-1.617-2.106c-.698-.6-1.54-1.073-2.53-1.41-.99-.338-2.1-.507-3.33-.498-1.229.009-2.34.189-3.32.545-.981.356-1.816.836-2.51 1.446a6.271 6.271 0 00-1.592 2.129zm3.173 4.04a3.494 3.494 0 01-.323-1.464 3.53 3.53 0 01.302-1.472c.206-.467.506-.884.9-1.235.393-.352.88-.635 1.446-.848.567-.214 1.218-.32 1.945-.326.727-.005 1.375.097 1.949.298.574.2 1.056.476 1.46.827a3.576 3.576 0 011.239 2.69 3.494 3.494 0 01-.302 1.468 3.604 3.604 0 01-.9 1.226 4.56 4.56 0 01-1.446.848c-.567.213-1.218.32-1.945.325-.727.005-1.375-.097-1.95-.298a4.478 4.478 0 01-1.458-.827 3.544 3.544 0 01-.917-1.212zM16.695 12.19a6.07 6.07 0 01.545-2.6 6.27 6.27 0 011.592-2.13c.694-.61 1.53-1.09 2.51-1.446.98-.356 2.092-.536 3.321-.545 1.23-.009 2.34.16 3.33.497.99.338 1.83.811 2.53 1.41a6.331 6.331 0 011.621 2.107c.383.806.576 1.666.582 2.592a6.057 6.057 0 01-.545 2.6 6.276 6.276 0 01-1.591 2.129c-.695.61-1.53 1.09-2.51 1.447-.98.355-2.092.536-3.321.544-1.23.01-2.34-.16-3.33-.497-.99-.337-1.831-.81-2.53-1.41a6.329 6.329 0 01-1.621-2.106 6.053 6.053 0 01-.582-2.592zm3.396-.025c.003.517.11 1.005.322 1.464.213.459.514.866.917 1.212.403.347.885.627 1.46.827.574.201 1.222.304 1.948.298.727-.005 1.378-.112 1.945-.325a4.562 4.562 0 001.447-.848c.393-.352.693-.764.9-1.226.206-.462.305-.951.301-1.468a3.578 3.578 0 00-1.24-2.69 4.396 4.396 0 00-1.459-.827c-.574-.2-1.222-.303-1.949-.298-.726.005-1.378.112-1.944.326a4.564 4.564 0 00-1.447.848 3.595 3.595 0 00-.9 1.235 3.532 3.532 0 00-.301 1.472zM.13 24.002l3.232-.023.005-.005-.045-6.184c.286.166.613.317.982.458.369.142.76.26 1.18.36.42.099.859.175 1.311.232.452.057.914.082 1.38.079 1.094-.008 2.108-.174 3.037-.497.93-.323 1.737-.78 2.412-1.371a6.288 6.288 0 001.583-2.129c.38-.826.564-1.795.557-2.777-.007-.982-.195-1.878-.568-2.686a6.155 6.155 0 00-1.548-2.078c-.66-.577-1.446-1.022-2.361-1.337-.916-.315-1.923-.466-3.012-.458-.476.004-.95.044-1.42.127-.47.082-.93.188-1.372.321a9.303 9.303 0 00-1.24.465c-.385.18-.72.368-1.002.566l-.009-1.21L0 5.878l.13 18.124zm4.209-8.667a5.866 5.866 0 01-1.044-.658l-.031-4.453c.258-.272.564-.516.916-.737.353-.221.729-.41 1.133-.566a7.68 7.68 0 011.26-.363 6.89 6.89 0 011.307-.135c.685-.005 1.3.088 1.851.284a4.306 4.306 0 011.413.81c.389.34.69.744.903 1.198.213.454.319.943.322 1.459a3.599 3.599 0 01-1.21 2.777c-.393.352-.88.63-1.456.834-.576.204-1.237.307-1.977.312a7.831 7.831 0 01-2.27-.323 7.31 7.31 0 01-1.117-.439z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'PoolsideText';
export default Icon;
@@ -0,0 +1,25 @@
import Avatar from './components/Avatar';
import Color from './components/Color';
import Combine from './components/Combine';
import Mono from './components/Mono';
import Text from './components/Text';
import { COLOR_PRIMARY, TITLE } from './style';
export type CompoundedIcon = typeof Mono & {
Avatar: typeof Avatar;
Color: typeof Color;
Combine: typeof Combine;
Text: typeof Text;
colorPrimary: string;
title: string;
};
const Icons = Mono as CompoundedIcon;
Icons.Color = Color;
Icons.Text = Text;
Icons.Combine = Combine;
Icons.Avatar = Avatar;
Icons.colorPrimary = COLOR_PRIMARY;
Icons.title = TITLE;
export default Icons;
@@ -0,0 +1,9 @@
export const TITLE = 'Poolside';
export const COMBINE_TEXT_MULTIPLE = 1;
export const COMBINE_SPACE_MULTIPLE = 0.25;
export const COLOR_PRIMARY = '#4137FF';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
export const AVATAR_ICON_MULTIPLE = 0.6;
@@ -3,14 +3,14 @@ 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';
import Inner from './Inner';
export type AvatarProps = Omit<RNIconAvatarProps, 'Icon'>;
const Avatar = memo<AvatarProps>(({ background, ...rest }) => {
return (
<RNIconAvatar
Icon={Mono}
Icon={Inner}
aria-label={TITLE}
background={background || AVATAR_BACKGROUND}
color={AVATAR_COLOR}
@@ -1,37 +0,0 @@
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="M22.012 0h1.032v.927H24v.968h-.956V3.78h-1.032V1.896h-1.878v-.97h1.878V0zM2.6 12.371V1.87h.969v10.502h-.97zm10.423.66h10.95v.918h-6.208v9.579h-4.742V13.03zM5.629 3.333v12.356H0v4.51h10.386V8L20.859 8l-.003-4.668-15.227.001z"
fill={fill}
fillRule="evenodd"
/>
<Defs>
<LinearGradient
gradientUnits="userSpaceOnUse"
id={id}
x1="1.646"
x2="18.342"
y1="1.916"
y2="22.091"
>
<Stop stopColor="#01A9FF" />
<Stop offset="100%" stopColor="#0160FF" />
</LinearGradient>
</Defs>
</Svg>
);
});
Icon.displayName = 'StepfunColor';
export default Icon;
@@ -3,22 +3,17 @@ 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', extraStyle, ...rest }) => {
const Icon = type === 'color' ? Color : Mono;
export type CombineProps = Omit<RNIconCombineProps, 'Icon' | 'Text'>;
const Combine = memo<CombineProps>(({ ...rest }) => {
return (
<RNIconCombine
Icon={Icon}
Text={Text}
Icon={Mono}
Text={Text as any}
aria-label={TITLE}
extraStyle={{ ...extraStyle }}
spaceMultiple={COMBINE_SPACE_MULTIPLE}
textMultiple={COMBINE_TEXT_MULTIPLE}
{...rest}
@@ -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="M1 23h6.335v-6.337H1V23zM8.832 23h6.336v-6.337H8.832V23zM8.832 15.17h6.336V8.835H8.832v6.337zM8.832 7.342h6.336V1.005H8.832v6.337zM16.665 7.337H23V1h-6.335v6.337z"
fill={color}
/>
</Svg>
);
});
Icon.displayName = 'StepfunInner';
export default Icon;
@@ -15,7 +15,7 @@ const Icon = memo<RNIconProps>(({ size = 24, style, color = '#000000', ...rest }
{...rest}
>
<Path
d="M22.012 0h1.032v.927H24v.968h-.956V3.78h-1.032V1.896h-1.878v-.97h1.878V0zM2.6 12.371V1.87h.969v10.502h-.97zm10.423.66h10.95v.918h-6.208v9.579h-4.742V13.03zM5.629 3.333v12.356H0v4.51h10.386V8L20.859 8l-.003-4.668-15.227.001z"
d="M12 0C5.372 0 0 5.372 0 12s5.372 12 12 12 12-5.372 12-12S18.628 0 12 0zM8.762 19.614H4.376v-4.386h4.386v4.386zm5.423 0H9.798v-4.386h4.387v4.386zm0-5.42H9.798V9.81h4.387v4.386zm0-5.418H9.798V4.39h4.387v4.386zm5.422-.004h-4.386V4.386h4.386v4.386z"
fill={color}
/>
</Svg>
@@ -10,26 +10,20 @@ const Icon = memo<RNIconProps>(({ size = 24, style, color = '#000000', ...rest }
fillRule="evenodd"
height={size}
style={style}
viewBox="0 0 90 24"
width={size * 3.75} // 保持宽高比
viewBox="0 0 88 24"
width={size * 3.67} // 保持宽高比
{...rest}
>
<Path
d="M19.408 6.051a49.571 49.571 0 01-2.53-3.567.845.845 0 00-.336-.361A.93.93 0 0016.08 2h-1.77a.93.93 0 00-.814.428 40.853 40.853 0 01-2.516 3.5A22.752 22.752 0 018.216 8.8l1.172 1.451c1.052-.851 2.078-1.896 3.045-3.106.945-1.182 1.733-2.263 2.342-3.213l.052-.08h.71l.05.078c1.934 2.895 3.717 5.022 5.297 6.323l1.193-1.451a17.713 17.713 0 01-2.673-2.749l.004-.002z"
d="M14.86 14.568c0 2.873-2.174 5.061-6.347 5.061-3.542 0-6.352-1.844-6.492-5.143h2.794c.18 1.795 1.67 2.766 3.824 2.766s3.45-1.121 3.45-2.562c0-1.296-.97-2.072-3.44-2.8l-1.514-.427c-2.853-.82-4.615-2.082-4.615-4.658 0-2.892 2.66-4.784 6.143-4.784 3.484 0 5.934 1.989 6.046 4.876h-2.741c-.224-1.553-1.442-2.504-3.392-2.504s-3.27.961-3.27 2.387c0 1.238 1.062 1.956 3.226 2.582l1.32.374c3.29.96 5.007 2.329 5.007 4.837v-.005zm5.4 1.13V9.12h2.339V6.683H20.26V3.874h-2.64v2.81H15.53v2.435h2.091v6.609c0 2.868 1.796 3.697 3.494 3.785.85.043 1.723-.073 1.723-.073v-2.174c-.296.015-.486.039-.85.039-.64 0-1.732-.116-1.732-1.606h.005zm28.42-2.391c0 3.93-2.732 6.308-5.915 6.308-1.335 0-2.742-.471-3.693-1.33v5.692h-2.64V7.08h2.64v1.17c.951-.86 2.358-1.33 3.693-1.33 3.032 0 5.914 2.465 5.914 6.386zm-2.62-.039c0-2.61-1.486-4.042-3.315-4.042-1.83 0-3.678 1.431-3.678 4.042 0 2.61 1.849 4.042 3.678 4.042 1.83 0 3.314-1.431 3.314-4.042z"
fill={color}
/>
<Path
clipRule="evenodd"
d="M38.76 15.054l.153-.347.164.341a18.47 18.47 0 005.207 6.504l1.217-1.542a16.082 16.082 0 01-3.386-3.648 17.204 17.204 0 01-2.118-4.286l-.075-.226h5.242V9.886h-5.33v-4.84l.159-.014c1.722-.15 3.217-.387 4.443-.705l-.61-1.876a23.937 23.937 0 01-3.578.595 51.91 51.91 0 01-4.149.191h-2.218V5.18h2.216c.365 0 .902-.013 1.593-.038l.181-.007v4.75h-5.058V2.722H25.34v7.242h3.12v8.21l-1.159.238v-6.178h-1.96v6.58l-.689.14.398 1.903 7.738-1.588-.398-1.903-1.969.405v-3.426h2.562V12.4h-2.562V9.963h2.575v1.887h4.72l-.042.206c-.496 2.432-2.002 4.933-4.481 7.448l.007.031-.045.01c-.316.319-.648.639-.995.959L33.445 22c2.517-2.31 4.304-4.648 5.313-6.946h.002zm-7.915-7.077h-3.527V4.665h3.527v3.312zM50.107 17.138l.659-2.926h6.055v1.652h-4.738l-.438 1.964h5.176v2.161h-8.517v1.943H67.32v-1.943h-8.516v-2.16h6.984v-1.965h-6.984v-1.652h7.425v-1.964h-7.425v-1.514h5.856a.314.314 0 00.053-.006h.952V2.546H49.846v.833l-.004.033a2.317 2.317 0 00-.009.093v6.267c0 .035.004.067.011.103v.851h1.005v.006h5.97v1.514h-5.614l.139-.616h-2.033l-1.238 5.506h2.032l.002.002zm1.731-12.65h11.823v1.18H51.838v-1.18zm0 4.28V7.61h11.823v1.157H51.838z"
d="M39.095 24h-2.688V7.056h2.688v1.14c.927-.815 2.29-1.3 3.669-1.3 1.518 0 3.018.63 4.114 1.732 1.18 1.184 1.83 2.848 1.83 4.682 0 1.835-.612 3.48-1.772 4.644-1.082 1.087-2.562 1.689-4.168 1.689-1.378 0-2.741-.486-3.668-1.3V24h-.005zm-2.634-.049h2.59v-5.72l.04.038c.916.83 2.29 1.325 3.677 1.325 2.926 0 5.89-2.16 5.89-6.284s-2.993-6.36-5.89-6.36c-1.383 0-2.756.494-3.678 1.324l-.038.039V7.109H36.46v16.847-.005zM8.51 19.657c-1.8 0-3.372-.466-4.536-1.339C2.747 17.396 2.063 16.071 2 14.49v-.025h2.839v.025c.174 1.717 1.591 2.741 3.804 2.741 2.018 0 3.425-1.043 3.425-2.538 0-1.27-.96-2.047-3.425-2.775l-1.514-.427c-1.563-.446-2.64-.98-3.387-1.674-.84-.776-1.247-1.761-1.247-3.008 0-1.408.611-2.616 1.776-3.494C5.387 2.465 6.944 2 8.662 2s3.212.47 4.309 1.359c1.097.888 1.708 2.11 1.761 3.542v.024h-2.79v-.02c-.228-1.576-1.456-2.484-3.367-2.484-1.912 0-3.246.927-3.246 2.363 0 1.155.931 1.897 3.212 2.557l1.32.374c3.522 1.029 5.026 2.484 5.026 4.857 0 1.475-.558 2.727-1.615 3.625-1.121.956-2.766 1.46-4.755 1.46h-.005zM2.05 14.51c.14 3.096 2.673 5.095 6.463 5.095s6.322-1.931 6.322-5.037c0-2.353-1.494-3.79-4.988-4.813l-1.32-.374C6.221 8.71 5.28 7.958 5.28 6.775c0-1.466 1.296-2.412 3.295-2.412 1.999 0 3.173.912 3.41 2.504h2.699c-.126-2.887-2.543-4.828-6.022-4.828s-6.119 1.96-6.119 4.76c0 2.324 1.374 3.712 4.6 4.639l1.514.427c2.49.732 3.46 1.523 3.46 2.819 0 1.523-1.427 2.586-3.474 2.586-2.227 0-3.664-1.034-3.848-2.766H2.049v.005zm19.457 5.037c-.131 0-.262 0-.393-.01-1-.049-1.805-.34-2.397-.854-.742-.645-1.121-1.64-1.121-2.955V9.143h-2.091V6.658h2.091v-2.81h2.688v2.81h2.339v2.485h-2.339v6.555c0 1.417.976 1.582 1.708 1.582.253 0 .427-.01.607-.025l.237-.014h.025v2.217h-.02s-.635.088-1.334.088zM15.557 9.094h2.091v6.633c0 2.96 1.888 3.678 3.47 3.76.766.04 1.557-.053 1.698-.072v-2.126c-.078 0-.145.01-.213.015a7.092 7.092 0 01-.612.024c-.432 0-1.756 0-1.756-1.63V9.094h2.338V6.707h-2.338v-2.81h-2.591v2.81h-2.092v2.387h.005zm27.187 8.244a3.654 3.654 0 01-2.542-1.048c-.757-.752-1.16-1.795-1.16-3.018 0-1.223.403-2.266 1.16-3.018a3.654 3.654 0 012.542-1.048c2 0 3.338 1.635 3.338 4.066 0 2.43-1.339 4.066-3.338 4.066zm0-8.089c-1.771 0-3.654 1.407-3.654 4.018 0 2.61 1.883 4.018 3.654 4.018 1.965 0 3.29-1.616 3.29-4.018 0-2.402-1.32-4.018-3.29-4.018zM31.98 15.704c-.535 1.097-1.495 1.597-2.81 1.636-1.854-.049-3.009-1.136-3.246-3.222h9.073c.025-.277.044-.563.044-.86 0-4.114-2.625-6.341-5.866-6.341-3.242 0-5.867 2.222-5.867 6.342 0 4.12 2.397 6.337 5.867 6.337 2.872 0 4.677-1.35 5.502-3.892h-2.698zm-2.81-6.55c1.805.048 2.945.912 3.227 2.902h-6.454c.281-1.99 1.422-2.854 3.227-2.902z"
fill={color}
/>
<Path
d="M12.964 9.752v4.823c0 1.34-.27 2.658-.804 3.918a12.493 12.493 0 01-2.206 3.464l-1.352-1.294a10.32 10.32 0 001.834-2.873c.45-1.059.68-2.14.68-3.215V9.752h1.848zM19.24 9.752h-1.848V21.78h1.848V9.752zM8.701 14.052c0 .463-.067.924-.202 1.368h-.002c-.482 1.534-1.693 2.658-3.598 3.343l-.677-1.809c1.277-.477 2.078-1.173 2.383-2.076.075-.264.111-.526.111-.779 0-.627-.144-1.281-.43-1.946-.287-.663-.577-1.19-.854-1.549a1.138 1.138 0 01-.19-.616.79.79 0 01.026-.235l1.313-5.14H3.983v17.385H2V2.648h5.822c.303 0 .553.125.766.38.15.178.227.373.227.58 0 .06-.017.151-.046.269l-1.474 5.93.038.062c.909 1.469 1.368 2.877 1.368 4.183zM73.342 6.593H87.86v1.964H73.342V6.593z"
fill={color}
/>
<Path d="M87.86 2.546H69.894l-.006 19.35h1.983V4.489H87.86V2.546z" fill={color} />
<Path
d="M77.575 19.945h-1.257v-7.55H87.86v-1.944H73.342v1.944h1.014v9.5l.587.002.01.014h3.258l5.266-3.736v-.001l1.613-1.143-1.613 1.144 2.789 3.737 1.595-1.167-2.77-3.714 2.768-1.962-1.155-1.597-4.405 3.123-4.724 3.35z"
d="M29.17 19.622c-1.748 0-3.218-.568-4.251-1.64-1.073-1.111-1.64-2.746-1.64-4.721s.596-3.59 1.727-4.731c1.043-1.053 2.523-1.635 4.168-1.635s3.12.582 4.168 1.635c1.13 1.14 1.727 2.775 1.727 4.73 0 .282-.014.573-.043.86v.024h-9.07c.244 2.023 1.355 3.125 3.218 3.173 1.364-.039 2.27-.568 2.785-1.62v-.015h2.751l-.01.034c-.844 2.591-2.702 3.906-5.526 3.906h-.005zm0-12.679c-3.495 0-5.843 2.538-5.843 6.318s2.237 6.312 5.842 6.312c2.79 0 4.63-1.29 5.469-3.843h-2.65c-.524 1.063-1.446 1.597-2.824 1.636-1.902-.054-3.032-1.174-3.27-3.246v-.03h9.074a9.77 9.77 0 00.038-.834c0-3.775-2.348-6.318-5.842-6.318l.005.005zm3.255 5.139h-6.507v-.03c.272-1.911 1.335-2.867 3.251-2.92 1.917.053 2.98 1.009 3.251 2.92v.03h.005zm-6.453-.049h6.395c-.272-1.868-1.32-2.8-3.198-2.853-1.878.053-2.926.985-3.198 2.853zM53.09 5.294v4.77h7.182v2.678h-7.181v6.914h-2.8V2.616h9.981v2.678h-7.181zM72.92 7.482v12.17h-2.63v-.893c-.612.786-1.82 1.325-3.775 1.208-1.956-.116-4.673-1.635-4.673-5.012V7.482h2.63v7.206c0 1.849 1.241 2.824 2.727 2.824 1.484 0 3.09-1.024 3.09-3.503V7.482h2.63zM75.011 19.66V7.49h2.63v.893c.612-.786 1.82-1.324 3.775-1.208 1.956.116 4.673 1.635 4.673 5.012v7.473h-2.63v-7.206c0-1.849-1.242-2.824-2.727-2.824-1.485 0-3.09 1.024-3.09 3.503v6.527h-2.63z"
fill={color}
/>
</Svg>
@@ -1,27 +1,22 @@
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_GRADIENT, COLOR_PRIMARY, TITLE } from './style';
import { COLOR_PRIMARY, TITLE } from './style';
export type CompoundedIcon = typeof Mono & {
Avatar: typeof Avatar;
Color: typeof Color;
Combine: typeof Combine;
Text: typeof Text;
colorGradient: string;
colorPrimary: string;
title: string;
};
const Icons = Mono as CompoundedIcon;
Icons.Color = Color;
Icons.Text = Text;
Icons.Combine = Combine;
Icons.Avatar = Avatar;
Icons.colorPrimary = COLOR_PRIMARY;
Icons.colorGradient = COLOR_GRADIENT;
Icons.title = TITLE;
export default Icons;
@@ -1,10 +1,9 @@
export const TITLE = 'Stepfun';
export const TITLE = 'StepFun';
export const COMBINE_TEXT_MULTIPLE = 0.9;
export const COMBINE_SPACE_MULTIPLE = 0.3;
export const COLOR_PRIMARY = '#005AFF';
export const COLOR_GRADIENT = 'linear-gradient(-45deg, #0160FF, #01A9FF)';
export const COLOR_PRIMARY = '#000';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
export const AVATAR_ICON_MULTIPLE = 0.6;
export const AVATAR_BACKGROUND = '#fff';
export const AVATAR_COLOR = COLOR_PRIMARY;
export const AVATAR_ICON_MULTIPLE = 0.65;
+6
View File
@@ -13,6 +13,7 @@ export {
type CompoundedIcon as AdobeFireflyProps,
} from './icons/AdobeFirefly';
export { default as AgentVoice, type CompoundedIcon as AgentVoiceProps } from './icons/AgentVoice';
export { default as AgnesAI, type CompoundedIcon as AgnesAIProps } from './icons/AgnesAI';
export { default as Agui, type CompoundedIcon as AguiProps } from './icons/Agui';
export { default as Ai2, type CompoundedIcon as Ai2Props } from './icons/Ai2';
export { default as Ai21, type CompoundedIcon as Ai21Props } from './icons/Ai21';
@@ -67,6 +68,7 @@ export { default as BriaAI, type CompoundedIcon as BriaAIProps } from './icons/B
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';
export { default as CelestoAI, type CompoundedIcon as CelestoAIProps } from './icons/CelestoAI';
export { default as CentML, type CompoundedIcon as CentMLProps } from './icons/CentML';
export { default as Cerebras, type CompoundedIcon as CerebrasProps } from './icons/Cerebras';
export { default as ChatGLM, type CompoundedIcon as ChatGLMProps } from './icons/ChatGLM';
@@ -134,6 +136,7 @@ export {
type CompoundedIcon as FeatherlessProps,
} from './icons/Featherless';
export { default as Figma, type CompoundedIcon as FigmaProps } from './icons/Figma';
export { default as Firecrawl, type CompoundedIcon as FirecrawlProps } from './icons/Firecrawl';
export { default as Fireworks, type CompoundedIcon as FireworksProps } from './icons/Fireworks';
export { default as FishAudio, type CompoundedIcon as FishAudioProps } from './icons/FishAudio';
export { default as Flora, type CompoundedIcon as FloraProps } from './icons/Flora';
@@ -164,6 +167,7 @@ export { default as Grok, type CompoundedIcon as GrokProps } from './icons/Grok'
export { default as Groq, type CompoundedIcon as GroqProps } from './icons/Groq';
export { default as Hailuo, type CompoundedIcon as HailuoProps } from './icons/Hailuo';
export { default as Haiper, type CompoundedIcon as HaiperProps } from './icons/Haiper';
export { default as HappyHorse, type CompoundedIcon as HappyHorseProps } from './icons/HappyHorse';
export { default as Hedra, type CompoundedIcon as HedraProps } from './icons/Hedra';
export {
default as HermesAgent,
@@ -278,6 +282,7 @@ export { default as Parasail, type CompoundedIcon as ParasailProps } from './ico
export { default as Perplexity, type CompoundedIcon as PerplexityProps } from './icons/Perplexity';
export { default as Phidata, type CompoundedIcon as PhidataProps } from './icons/Phidata';
export { default as Phind, type CompoundedIcon as PhindProps } from './icons/Phind';
export { default as Pi, type CompoundedIcon as PiProps } from './icons/Pi';
export { default as Pika, type CompoundedIcon as PikaProps } from './icons/Pika';
export { default as PixVerse, type CompoundedIcon as PixVerseProps } from './icons/PixVerse';
export { default as Player2, type CompoundedIcon as Player2Props } from './icons/Player2';
@@ -286,6 +291,7 @@ export {
default as Pollinations,
type CompoundedIcon as PollinationsProps,
} from './icons/Pollinations';
export { default as Poolside, type CompoundedIcon as PoolsideProps } from './icons/Poolside';
export { default as PPIO, type CompoundedIcon as PPIOProps } from './icons/PPIO';
export { default as PrunaAI, type CompoundedIcon as PrunaAIProps } from './icons/PrunaAI';
export { default as PydanticAI, type CompoundedIcon as PydanticAIProps } from './icons/PydanticAI';
+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 Inner from './Inner';
export type AvatarProps = Omit<IconAvatarProps, 'Icon'>;
const Avatar = memo<AvatarProps>(({ ...rest }) => {
return (
<IconAvatar
Icon={Inner}
aria-label={TITLE}
background={AVATAR_BACKGROUND}
color={AVATAR_COLOR}
iconMultiple={AVATAR_ICON_MULTIPLE}
{...rest}
/>
);
});
export default Avatar;
+29
View File
@@ -0,0 +1,29 @@
'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}
iconProps={{
shape: 'circle',
}}
spaceMultiple={COMBINE_SPACE_MULTIPLE}
textMultiple={COMBINE_TEXT_MULTIPLE}
{...rest}
/>
);
});
export default Combine;
+30
View File
@@ -0,0 +1,30 @@
'use client';
import { memo } from 'react';
import type { IconType } from '@/types';
import { TITLE } from '../style';
const Icon: IconType = memo(({ size = '1em', style, ...rest }) => {
return (
<svg
fill="currentColor"
fillRule="evenodd"
height={size}
style={{ flex: 'none', lineHeight: 1, ...style }}
viewBox="0 0 24 24"
width={size}
xmlns="http://www.w3.org/2000/svg"
{...rest}
>
<title>{TITLE}</title>
<path
clipRule="evenodd"
d="M1.386 16.186s-2 6.095 1.688 6.709c3.688.611 9.803-1.138 16.56-13.907 0 0-.835 4.01-1.288 6.308-.067.34-.252.646-.52.865a1.53 1.53 0 01-.959.345h-.9a.265.265 0 00-.15.487c.856.583 1.951 1.847 2.127 4.53a.822.822 0 00.404.653.848.848 0 00.776.05c.272-.125.498-.333.642-.596.144-.26.223-.549.23-.845l-.123-1.117c-.028-.285.042-.57.197-.811a1.3 1.3 0 01.66-.524c.8-.286 1.882-.886 2.411-2.114a.183.183 0 00-.128-.249.192.192 0 00-.105.005c-.536.19-1.552.504-2.439.499a.439.439 0 01-.412-.313.428.428 0 01-.012-.182l1.23-8.473a.815.815 0 00-.461-.865.845.845 0 00-.341-.081 3.257 3.257 0 00-.998.142c-.862.258-1.675.682-2.122 1.53-2.11 4.003-12.207 16.005-15.965 7.954h-.002zM21.47 3.534a2.034 2.034 0 10-4.015-.647 2.034 2.034 0 004.015.647z"
/>
</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 24 24"
width={size}
xmlns="http://www.w3.org/2000/svg"
{...rest}
>
<title>{TITLE}</title>
<path d="M12 0c6.627 0 12 5.373 12 12s-5.373 12-12 12S0 18.627 0 12 5.373 0 12 0zm5.013 8.817c-.2-.003-.4.026-.59.084-.51.153-.991.405-1.256.906-1.248 2.369-7.222 9.47-9.446 4.707H5.72c-.007.021-1.176 3.606.999 3.968 2.182.362 5.8-.672 9.798-8.227-.007.03-.496 2.381-.762 3.731a.885.885 0 01-.308.513.906.906 0 01-.567.204h-.533a.157.157 0 00-.088.287c.506.345 1.154 1.094 1.258 2.68a.487.487 0 00.239.388.503.503 0 00.459.029.824.824 0 00.38-.353c.085-.154.132-.325.136-.5l-.073-.66a.77.77 0 01.507-.79c.474-.17 1.114-.525 1.427-1.252a.11.11 0 00.009-.046.11.11 0 00-.013-.045.108.108 0 00-.03-.036.113.113 0 00-.104-.017c-.317.113-.918.299-1.443.296a.261.261 0 01-.244-.185.254.254 0 01-.007-.108l.728-5.013a.484.484 0 00-.475-.56zm-.406-3.169a1.204 1.204 0 10-.384 2.378 1.204 1.204 0 00.384-2.378z" />
</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 101 24"
xmlns="http://www.w3.org/2000/svg"
{...rest}
>
<title>{TITLE}</title>
<path d="M8.38 3.21l-3.347 9.132h6.68L8.38 3.211zm5.534 15.172l-1.239-3.343H4.071l-1.238 3.343H0L6.68 0h3.413l6.706 18.382h-2.885zm14.503-6.935c0-1.219-.443-2.272-1.33-3.158-.887-.885-1.946-1.328-3.176-1.328-1.23 0-2.288.443-3.175 1.328-.878.878-1.318 1.93-1.318 3.158 0 1.237.44 2.294 1.318 3.171.878.878 1.937 1.316 3.175 1.316 1.239 0 2.297-.438 3.176-1.316.887-.886 1.33-1.943 1.33-3.17zm2.701 5.395c0 1.948-.711 3.623-2.134 5.027C27.57 23.288 25.879 24 23.911 24a6.945 6.945 0 01-3.478-.934 7.317 7.317 0 01-1.476-1.092 8.05 8.05 0 01-1.186-1.408l2.28-1.487c.984 1.482 2.27 2.224 3.86 2.224 1.335 0 2.403-.439 3.202-1.316.747-.825 1.173-1.904 1.278-3.237-1.335 1.237-2.903 1.855-4.704 1.855-1.932 0-3.579-.706-4.94-2.118-1.353-1.404-2.03-3.083-2.03-5.04 0-1.965.707-3.653 2.122-5.065 1.431-1.413 3.122-2.119 5.072-2.119 1.968 0 3.659.706 5.073 2.119 1.423 1.412 2.134 3.1 2.134 5.065v5.395zm11.698 1.54v-8.053c0-.912-.334-1.702-1.002-2.368-.667-.667-1.458-1-2.371-1-.914 0-1.704.333-2.372 1-.667.666-1.001 1.456-1.001 2.368v8.053h-2.701v-8.053c0-1.605.61-3.018 1.831-4.237 1.221-1.22 2.636-1.829 4.243-1.829 1.599 0 3.008.61 4.23 1.83 1.229 1.227 1.844 2.64 1.844 4.236v8.053h-2.701zM57.254 7.987c-.861-.684-1.818-1.026-2.872-1.026-1.248 0-2.306.443-3.176 1.328-.87.886-1.304 1.948-1.304 3.185 0 .35.061.736.184 1.158l7.168-4.645zm4.348 3.276c-.009 2.026-.703 3.759-2.082 5.198-1.37 1.43-3.07 2.144-5.099 2.144-2.003 0-3.707-.688-5.112-2.066-1.405-1.377-2.108-3.065-2.108-5.065 0-1.983.698-3.68 2.095-5.092 1.396-1.413 3.092-2.119 5.086-2.119 1.458 0 2.788.404 3.992 1.21 1.203.808 2.103 1.891 2.7 3.25l-9.525 6.185c.852.684 1.81 1.026 2.872 1.026 1.283 0 2.341-.456 3.175-1.368.844-.921 1.27-2.022 1.279-3.303h2.727zM72.179 14.5c0 1.14-.413 2.11-1.238 2.908-.826.798-1.805 1.197-2.938 1.197-1.002 0-1.88-.311-2.635-.934-.756-.631-1.243-1.447-1.463-2.447l2.609-.698c.175.939.672 1.408 1.489 1.408.386 0 .733-.14 1.04-.42.308-.29.462-.628.462-1.014 0-.64-.488-1.171-1.463-1.592a84.566 84.566 0 01-1.858-.855c-.448-.22-.733-.378-.856-.474-.975-.72-1.463-1.768-1.463-3.145 0-1.123.409-2.1 1.226-2.934.825-.825 1.81-1.237 2.951-1.237 1.001 0 1.88.32 2.635.96.72.623 1.2 1.435 1.436 2.435l-2.635.684c-.202-.92-.68-1.381-1.436-1.381-.395 0-.742.149-1.04.447-.3.298-.449.64-.449 1.026 0 .632.488 1.163 1.463 1.592a29.78 29.78 0 011.818.842c.448.22.742.382.883.487.975.737 1.462 1.785 1.462 3.145zM88.841 3.21l-3.346 9.132h6.68L88.84 3.211zm5.534 15.172l-1.238-3.343h-8.604l-1.239 3.343h-2.832L87.142 0h3.412l6.707 18.382h-2.886zm3.937 0V0H101v18.382h-2.688z" />
</svg>
);
});
export default Icon;
+66
View File
@@ -0,0 +1,66 @@
---
nav: Components
group: Application
title: Agnes AI
atomId: AgnesAI
description: https://agnes-ai.com
---
## Icons
```tsx
import { AgnesAI } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => <AgnesAI size={64} />;
```
## Text
```tsx
import { AgnesAI } from '@lobehub/icons';
export default () => <AgnesAI.Text size={48} />;
```
## Combine
```tsx
import { AgnesAI } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} align={'flex-start'}>
<AgnesAI.Combine size={64} />
</Flexbox>
);
```
## Avatars
```tsx
import { AgnesAI } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} horizontal>
<AgnesAI.Avatar size={64} />
<AgnesAI.Avatar size={64} shape={'square'} />
</Flexbox>
);
```
## Colors
```tsx
import { AgnesAI } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
import ColorPreview from '../components/ColorPreview';
export default () => (
<Flexbox gap={16} horizontal>
<ColorPreview color={AgnesAI.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 = 'Agnes AI';
export const COMBINE_TEXT_MULTIPLE = 0.7;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#000';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
export const AVATAR_ICON_MULTIPLE = 0.6;
+25
View File
@@ -0,0 +1,25 @@
'use client';
import { memo } from 'react';
import IconAvatar, { type IconAvatarProps } from '@/features/IconAvatar';
import { AVATAR_BACKGROUND, AVATAR_COLOR, AVATAR_ICON_MULTIPLE, TITLE } from '../style';
import Color from './Color';
export type AvatarProps = Omit<IconAvatarProps, 'Icon'>;
const Avatar = memo<AvatarProps>(({ ...rest }) => {
return (
<IconAvatar
Icon={Color}
aria-label={TITLE}
background={AVATAR_BACKGROUND}
color={AVATAR_COLOR}
iconMultiple={AVATAR_ICON_MULTIPLE}
{...rest}
/>
);
});
export default Avatar;
+36
View File
@@ -0,0 +1,36 @@
'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="M11.77.194c.044-.259.416-.259.46 0l1.081 6.45a.989.989 0 001.55.641l5.325-3.795c.213-.153.477.11.324.324L16.715 9.14a.989.989 0 00.641 1.549l6.45 1.082c.259.043.259.415 0 .458l-6.45 1.082a.989.989 0 00-.641 1.55l3.795 5.325c.153.213-.11.477-.324.324l-5.326-3.795a.989.989 0 00-1.549.641l-1.082 6.45c-.043.259-.415.259-.458 0l-1.082-6.45a.989.989 0 00-1.55-.641L3.815 20.51c-.214.153-.477-.11-.324-.324l3.795-5.326a.989.989 0 00-.641-1.549L.194 12.23c-.259-.043-.259-.415 0-.458l6.45-1.082a.989.989 0 00.641-1.55L3.49 3.815c-.153-.214.11-.477.324-.324L9.14 7.285a.989.989 0 001.549-.641L11.77.194z"
fill={fill}
/>
<defs>
<linearGradient gradientUnits="userSpaceOnUse" id={id} x1="0" x2="24" y1="12" y2="12">
<stop stopColor="#FD2A26" />
<stop offset="1" stopColor="#FFBE46" />
</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="M11.77.194c.044-.259.416-.259.46 0l1.081 6.45a.989.989 0 001.55.641l5.325-3.795c.213-.153.477.11.324.324L16.715 9.14a.989.989 0 00.641 1.549l6.45 1.082c.259.043.259.415 0 .458l-6.45 1.082a.989.989 0 00-.641 1.55l3.795 5.325c.153.213-.11.477-.324.324l-5.326-3.795a.989.989 0 00-1.549.641l-1.082 6.45c-.043.259-.415.259-.458 0l-1.082-6.45a.989.989 0 00-1.55-.641L3.815 20.51c-.214.153-.477-.11-.324-.324l3.795-5.326a.989.989 0 00-.641-1.549L.194 12.23c-.259-.043-.259-.415 0-.458l6.45-1.082a.989.989 0 00.641-1.55L3.49 3.815c-.153-.214.11-.477.324-.324L9.14 7.285a.989.989 0 001.549-.641L11.77.194z" />
</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="nonzero"
height={size}
style={{ flex: 'none', lineHeight: 1, ...style }}
viewBox="0 0 137 24"
xmlns="http://www.w3.org/2000/svg"
{...rest}
>
<title>{TITLE}</title>
<path d="M12.49 23c-1.52 0-2.923-.268-4.207-.803a10.25 10.25 0 01-3.32-2.319 10.334 10.334 0 01-2.192-3.508C2.256 15.022 2 13.546 2 11.94c0-1.605.257-3.072.77-4.4.514-1.327 1.235-2.477 2.164-3.448a9.873 9.873 0 013.319-2.29C9.537 1.269 10.95 1 12.49 1c1.699 0 3.23.337 4.593 1.01a8.828 8.828 0 013.349 2.855c.889 1.209 1.432 2.636 1.63 4.28h-3.794c-.237-1.604-.879-2.833-1.926-3.686-1.047-.872-2.321-1.308-3.823-1.308-1.323 0-2.48.317-3.467.952-.988.634-1.758 1.536-2.311 2.705-.554 1.15-.83 2.517-.83 4.103 0 1.625.276 3.032.83 4.221.553 1.17 1.333 2.081 2.34 2.736 1.008.654 2.164.98 3.468.98 1.462 0 2.716-.425 3.764-1.278 1.047-.872 1.708-2.1 1.985-3.686h3.823c-.237 1.625-.8 3.052-1.69 4.28a8.828 8.828 0 01-3.348 2.855c-1.363.654-2.894.981-4.593.981zM31.756 23c-1.6 0-3.002-.337-4.208-1.01a7.27 7.27 0 01-2.785-2.795c-.652-1.19-.978-2.557-.978-4.103 0-1.546.326-2.904.978-4.073a7.063 7.063 0 012.785-2.765c1.186-.674 2.569-1.01 4.15-1.01 1.5 0 2.805.316 3.911.95a6.436 6.436 0 012.578 2.617c.613 1.13.919 2.448.919 3.954a8.821 8.821 0 01-.118 1.486H26.095v-2.616h10.017l-.77.714c0-1.427-.327-2.498-.979-3.211-.652-.714-1.56-1.07-2.726-1.07-1.264 0-2.272.436-3.023 1.308-.73.872-1.096 2.13-1.096 3.775 0 1.626.365 2.874 1.096 3.746.751.853 1.808 1.279 3.171 1.279.79 0 1.482-.149 2.075-.446a2.743 2.743 0 001.303-1.368h3.527c-.494 1.427-1.334 2.557-2.519 3.39-1.165.832-2.637 1.248-4.415 1.248zM41.9 22.703V1.297h3.734v21.406H41.9zM56.385 23c-1.6 0-3.003-.337-4.209-1.01a7.27 7.27 0 01-2.785-2.795c-.652-1.19-.978-2.557-.978-4.103 0-1.546.326-2.904.978-4.073a7.062 7.062 0 012.785-2.765c1.186-.674 2.569-1.01 4.15-1.01 1.5 0 2.805.316 3.91.95a6.436 6.436 0 012.58 2.617c.612 1.13.918 2.448.918 3.954a8.821 8.821 0 01-.119 1.486h-12.89v-2.616H60.74l-.77.714c0-1.427-.327-2.498-.979-3.211-.652-.714-1.56-1.07-2.726-1.07-1.264 0-2.272.436-3.023 1.308-.73.872-1.096 2.13-1.096 3.775 0 1.626.365 2.874 1.096 3.746.75.853 1.808 1.279 3.171 1.279.79 0 1.482-.149 2.075-.446a2.743 2.743 0 001.303-1.368h3.527c-.494 1.427-1.334 2.557-2.519 3.39-1.166.832-2.637 1.248-4.415 1.248zM72.394 23c-2.095 0-3.764-.436-5.009-1.308-1.244-.892-1.926-2.12-2.044-3.687h3.408c.098.773.464 1.358 1.096 1.755.632.396 1.482.594 2.549.594.968 0 1.689-.149 2.163-.446.494-.317.74-.763.74-1.338 0-.416-.138-.753-.414-1.01-.277-.278-.8-.506-1.57-.684l-2.43-.565c-1.66-.357-2.895-.912-3.705-1.665-.79-.773-1.185-1.734-1.185-2.884 0-1.407.533-2.507 1.6-3.3 1.086-.812 2.578-1.219 4.475-1.219 1.877 0 3.378.407 4.504 1.22 1.146.792 1.778 1.892 1.897 3.3H75.06a1.904 1.904 0 00-.949-1.398c-.513-.317-1.224-.476-2.133-.476-.85 0-1.492.139-1.927.416-.434.258-.652.645-.652 1.16 0 .396.168.733.504 1.01.336.258.9.486 1.69.684l2.607.595c1.482.337 2.598.922 3.349 1.754a4.19 4.19 0 011.156 2.943c0 1.447-.553 2.567-1.66 3.36C75.94 22.604 74.39 23 72.394 23zM88.016 23c-1.857 0-3.23-.436-4.12-1.308-.869-.892-1.303-2.22-1.303-3.984V4.092l3.763-1.397v15.102c0 .734.198 1.279.593 1.635.395.357 1.017.536 1.867.536.336 0 .632-.02.889-.06.277-.06.533-.129.77-.208v2.913c-.237.12-.572.209-1.007.268-.435.08-.919.119-1.452.119zm-8.328-12.516V7.54h10.787v2.943H79.69zM99.68 23c-1.6 0-3.012-.337-4.237-1.01a7.213 7.213 0 01-2.815-2.795c-.672-1.21-1.008-2.587-1.008-4.133 0-1.546.336-2.903 1.008-4.073a7.067 7.067 0 012.815-2.735c1.225-.674 2.638-1.01 4.238-1.01 1.62 0 3.032.336 4.237 1.01a7.065 7.065 0 012.816 2.735c.671 1.17 1.007 2.527 1.007 4.073 0 1.546-.345 2.924-1.037 4.133a7.215 7.215 0 01-2.815 2.794c-1.205.674-2.608 1.011-4.208 1.011zm0-3.003c.791 0 1.502-.198 2.134-.594.633-.416 1.127-.991 1.482-1.725.356-.753.534-1.635.534-2.646 0-1.486-.396-2.655-1.186-3.508-.77-.852-1.758-1.278-2.963-1.278s-2.203.426-2.993 1.278c-.79.853-1.186 2.022-1.186 3.508 0 1.011.178 1.893.534 2.646.375.734.869 1.308 1.481 1.725.633.396 1.354.594 2.164.594zM108.406 22.703l7.853-21.406h3.319l-7.379 21.406h-3.793zm16.092 0l-7.35-21.406h3.497l7.824 21.406h-3.971zm-12.032-8.414h11.676v3.092h-11.676V14.29zM131.148 22.703V1.297H135v21.406h-3.852z" />
</svg>
);
});
export default Icon;
+77
View File
@@ -0,0 +1,77 @@
---
nav: Components
group: Application
title: CelestoAI
atomId: CelestoAI
description: https://celesto.ai
---
## Icons
```tsx
import { CelestoAI } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} horizontal>
<CelestoAI size={64} />
<CelestoAI.Color size={64} />
</Flexbox>
);
```
## Text
```tsx
import { CelestoAI } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} align={'flex-start'}>
<CelestoAI.Text size={48} />
</Flexbox>
);
```
## Combine
```tsx
import { CelestoAI } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} align={'flex-start'}>
<CelestoAI.Combine size={64} />
<CelestoAI.Combine size={64} type={'color'} />
</Flexbox>
);
```
## Avatars
```tsx
import { CelestoAI } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} horizontal>
<CelestoAI.Avatar size={64} />
<CelestoAI.Avatar size={64} shape={'square'} />
</Flexbox>
);
```
## Colors
```tsx
import { CelestoAI } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
import ColorPreview from '../components/ColorPreview';
export default () => (
<Flexbox gap={16} horizontal>
<ColorPreview color={CelestoAI.colorPrimary} />
</Flexbox>
);
```
+25
View File
@@ -0,0 +1,25 @@
import Avatar from './components/Avatar';
import Color from './components/Color';
import Combine from './components/Combine';
import Mono from './components/Mono';
import Text from './components/Text';
import { COLOR_PRIMARY, TITLE } from './style';
export type CompoundedIcon = typeof Mono & {
Avatar: typeof Avatar;
Color: typeof Color;
Combine: typeof Combine;
Text: typeof Text;
colorPrimary: string;
title: string;
};
const Icons = Mono as CompoundedIcon;
Icons.Color = Color;
Icons.Text = Text;
Icons.Combine = Combine;
Icons.Avatar = Avatar;
Icons.colorPrimary = COLOR_PRIMARY;
Icons.title = TITLE;
export default Icons;
+9
View File
@@ -0,0 +1,9 @@
export const TITLE = 'CelestoAI';
export const COMBINE_TEXT_MULTIPLE = 0.75;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#000';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
export const AVATAR_ICON_MULTIPLE = 0.75;
+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="M18.183 7.67c-.939.278-1.647.905-2.166 1.586-.11.146-.343.036-.299-.143.993-4.058-.318-7.432-4.407-9.092a.272.272 0 00-.368.317C12.803 7.76 4.98 7.135 5.969 15.55a.17.17 0 01-.266.159c-.37-.265-.784-.817-1.068-1.205a.17.17 0 00-.302.054A8.631 8.631 0 004 16.9a8.43 8.43 0 003.843 7.07c.133.086.303-.038.258-.189a4.533 4.533 0 01-.133-2.041c.097-.637.32-1.244.694-1.797 1.283-1.914 3.854-3.763 3.443-6.273-.026-.16.162-.264.281-.155 1.812 1.645 2.17 3.858 1.873 5.844-.026.172.192.264.302.129.277-.345.615-.647.983-.875a.17.17 0 01.25.088c.204.592.508 1.148.796 1.704a4.528 4.528 0 01.307 3.375.17.17 0 00.257.192A8.43 8.43 0 0021 16.9a8.746 8.746 0 00-.524-2.98c-.718-1.982-2.54-3.47-2.08-6.053a.17.17 0 00-.213-.195z"
fill="#ff4d00"
/>
</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="M18.183 7.67c-.939.278-1.647.905-2.166 1.586-.11.146-.343.036-.299-.143.993-4.058-.318-7.432-4.407-9.092a.272.272 0 00-.368.317C12.803 7.76 4.98 7.135 5.969 15.55a.17.17 0 01-.266.159c-.37-.265-.784-.817-1.068-1.205a.17.17 0 00-.302.054A8.631 8.631 0 004 16.9a8.43 8.43 0 003.843 7.07c.133.086.303-.038.258-.189a4.533 4.533 0 01-.133-2.041c.097-.637.32-1.244.694-1.797 1.283-1.914 3.854-3.763 3.443-6.273-.026-.16.162-.264.281-.155 1.812 1.645 2.17 3.858 1.873 5.844-.026.172.192.264.302.129.277-.345.615-.647.983-.875a.17.17 0 01.25.088c.204.592.508 1.148.796 1.704a4.528 4.528 0 01.307 3.375.17.17 0 00.257.192A8.43 8.43 0 0021 16.9a8.746 8.746 0 00-.524-2.98c-.718-1.982-2.54-3.47-2.08-6.053a.17.17 0 00-.213-.195z" />
</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 131 24"
xmlns="http://www.w3.org/2000/svg"
{...rest}
>
<title>{TITLE}</title>
<path d="M0 23.799V.465h14.93v3.4H3.84v6.767h9.152v3.3H3.841v9.867H0zM19.177 4.333c-1.236 0-2.204-.9-2.204-2.166C16.973.9 17.94 0 19.177 0c1.236 0 2.204.9 2.204 2.167 0 1.266-.968 2.166-2.204 2.166zM17.34 23.801V6.732h3.607V23.8H17.34zM32.967 6.734h.802v3.367h-1.604c-3.206 0-4.241 2.5-4.241 5.134V23.8h-3.608V6.734h3.207l.4 2.567c.869-1.433 2.238-2.567 5.044-2.567zM43.128 23.998c-5.378 0-8.751-3.466-8.751-8.7 0-5.267 3.373-8.767 8.417-8.767 4.943 0 8.25 3.134 8.35 8.134 0 .433-.034.9-.1 1.366H38.15v.234c.1 2.9 1.937 4.8 4.776 4.8 2.205 0 3.808-1.1 4.309-3h3.607c-.601 3.366-3.474 5.933-7.715 5.933zm-4.843-10.6h9.118c-.3-2.533-2.071-3.967-4.576-3.967-2.305 0-4.275 1.534-4.542 3.967zM61.74 23.998c-5.178 0-8.484-3.367-8.484-8.7 0-5.267 3.407-8.767 8.584-8.767 4.408 0 7.147 2.434 7.849 6.3h-3.775c-.467-2-1.904-3.233-4.141-3.233-2.906 0-4.81 2.333-4.81 5.7 0 3.333 1.904 5.633 4.81 5.633 2.204 0 3.674-1.266 4.108-3.233h3.808c-.67 3.867-3.574 6.3-7.95 6.3zM80.933 6.734h.802v3.367h-1.603c-3.207 0-4.242 2.5-4.242 5.134V23.8h-3.607V6.734h3.207l.4 2.567c.868-1.433 2.238-2.567 5.043-2.567zM90.65 6.531c4.543 0 7.148 2.167 7.148 6.2v11.067h-3.14l-.3-2.433c-1.17 1.533-2.806 2.633-5.51 2.633-3.742 0-6.246-1.833-6.246-5 0-3.5 2.538-5.467 7.347-5.467h4.276v-1.033c0-1.9-1.37-3.067-3.741-3.067-2.138 0-3.574 1-3.841 2.5h-3.54c.367-3.333 3.24-5.4 7.548-5.4zm-1.202 14.667c3.006 0 4.743-1.767 4.777-4.4v-.6h-4.477c-2.237 0-3.472.833-3.472 2.567 0 1.433 1.201 2.433 3.172 2.433zM104.853 23.801L99.275 6.734h3.808l3.908 13.067 3.908-13.067h3.305l3.741 13.067 4.042-13.067h3.674l-5.678 17.067h-3.875l-3.606-11.6-3.741 11.6h-3.908zM127.393 23.799V.465H131v23.334h-3.607z" />
</svg>
);
});
export default Icon;
+72
View File
@@ -0,0 +1,72 @@
---
nav: Components
group: Application
title: Firecrawl
atomId: Firecrawl
description: https://firecrawl.dev
---
## Icons
```tsx
import { Firecrawl } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} horizontal>
<Firecrawl size={64} />
<Firecrawl.Color size={64} />
</Flexbox>
);
```
## Text
```tsx
import { Firecrawl } from '@lobehub/icons';
export default () => <Firecrawl.Text size={48} />;
```
## Combine
```tsx
import { Firecrawl } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} align={'flex-start'}>
<Firecrawl.Combine size={64} />
<Firecrawl.Combine type={'color'} size={64} />
</Flexbox>
);
```
## Avatars
```tsx
import { Firecrawl } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} horizontal>
<Firecrawl.Avatar size={64} />
<Firecrawl.Avatar size={64} shape={'square'} />
</Flexbox>
);
```
## Colors
```tsx
import { Firecrawl } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
import ColorPreview from '../components/ColorPreview';
export default () => (
<Flexbox gap={16} horizontal>
<ColorPreview color={Firecrawl.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 = 'Firecrawl';
export const COMBINE_TEXT_MULTIPLE = 0.6;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#ff4d00';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
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;
+29
View File
@@ -0,0 +1,29 @@
'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}
iconProps={{
shape: 'square',
}}
spaceMultiple={COMBINE_SPACE_MULTIPLE}
textMultiple={COMBINE_TEXT_MULTIPLE}
{...rest}
/>
);
});
export default Combine;
+30
View File
@@ -0,0 +1,30 @@
'use client';
import { memo } from 'react';
import type { IconType } from '@/types';
import { TITLE } from '../style';
const Icon: IconType = memo(({ size = '1em', style, ...rest }) => {
return (
<svg
fill="currentColor"
fillRule="evenodd"
height={size}
style={{ flex: 'none', lineHeight: 1, ...style }}
viewBox="0 0 24 24"
width={size}
xmlns="http://www.w3.org/2000/svg"
{...rest}
>
<title>{TITLE}</title>
<path
clipRule="evenodd"
d="M2.93 18.812a.79.79 0 01.45.142v-.002c.944.7 1.97 1.28 3.058 1.727a13.955 13.955 0 008.47.665c1.22-.288 2.397-.74 3.496-1.344.567-.311 1.113-.66 1.632-1.046a.787.787 0 01.327-.131l.123-.01c.444 0 .804.371.804.829 0 .14-.034.276-.1.399.03-.015.06-.032.09-.049l-.166.167a.82.82 0 01-.174.166C18.501 22.608 15.26 24 11.71 24c-3.55 0-6.787-1.389-9.223-3.668l-.19-.181a.842.842 0 01-.17-.51c0-.457.36-.829.804-.829H2.93zM5.536 0c.461.047.91.178 1.324.388a4.561 4.561 0 014.119.954 4.828 4.828 0 011.653 3.09l.856 5.005.1.586 2.1.411c.387.075.746.23 1.06.446.085-.155.185-.3.299-.433a2.39 2.39 0 011.818-.845c.84 0 1.581.441 2.016 1.11.243.373.391.816.409 1.293h.006a3.04 3.04 0 001.204 2.277c-.352.3-.8.467-1.262.469-.466 0-.893-.167-1.231-.444a2.032 2.032 0 01-.716-1.238l-.01.002c-.158-.905-.926-1.592-1.85-1.592l-.043.001a3.04 3.04 0 01.464 2.893c-.13.365-.327.695-.577.976l.022.002a3.266 3.266 0 00-.401 2.829l.557 1.9c-.862.403-1.764.713-2.692.926l-1.604-3.696a2.31 2.31 0 001.301-.62 2.81 2.81 0 01-1.624-.127c-.033-.013-.064-.025-.095-.039l-.377-.132-1.691-.621-1.257-.462-2.598 1.726.596 2.187H7.41c.023.093.035.192.035.293 0 .407-.202.765-.508.975a13.504 13.504 0 01-1.23-.531l-.334-1.112-.662-2.206a1.12 1.12 0 01.067-.915 1.1 1.1 0 01.375-.4l1.482-1.04-2.626-.964-.437 1.786H3.57c-.202.81-.916 1.41-1.766 1.41a1.8 1.8 0 01-.304-.027l.002-.014.785-3.216.1-.404.222-.91h.003a1.113 1.113 0 011.071-.854c.088 0 .172.01.253.03l.004.002.016.005c.238.073.476.148.713.223.444.14.93.3.956.326l.07-.212.275-.836.364-1.104.67-2.027.453-1.375a3.12 3.12 0 00.708-.866c.184-.332.313-.701.371-1.094-.165.43-.445.807-.808 1.09L6.7 5.718l-1.93.866-.011.005a.948.948 0 01-.325.075l-.054.003a.982.982 0 01-.884-.57 1.03 1.03 0 01.145-1.116l.424-.643L5.874 1.6 5.718.86 5.704.793 5.646.516 5.536 0z"
/>
</svg>
);
});
export default Icon;
+24
View File
@@ -0,0 +1,24 @@
'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="none"
height={size}
style={{ flex: 'none', lineHeight: 1, ...style }}
viewBox="0 0 153 24"
xmlns="http://www.w3.org/2000/svg"
{...rest}
>
<title>{TITLE}</title>
<path stroke="currentColor" stroke-linecap="round" d="M40.473 17.519a6.058 6.058 0 110-12.116 6.058 6.058 0 010 12.116zM65.664 5.403L70.446 17.2M75.861 5.403L68.209 22.62M120.502 5.403v12.116M125.923 5.403a5.42 5.42 0 00-5.421 5.42v6.696M.62.62V17.52M12.414 8.591H1.254M12.414.62V17.52M88.297.62V17.52M100.097 8.591h-11.16M100.098.62V17.52M23.173 17.519a6.058 6.058 0 100-12.116 6.058 6.058 0 000 12.116zM29.23 5.403v12.116M34.416 5.403V22.62M56.733 17.519a6.058 6.058 0 110-12.116 6.058 6.058 0 010 12.116zM50.672 5.403V22.62M151.121 14.412c-.537.932-1.862 3.107-5.587 3.107-3.727 0-5.899-2.796-5.899-6.213 0-2.486 1.862-5.903 5.899-5.903 4.579 0 5.855 3.906 5.897 5.808a.094.094 0 01-.095.095H140.1M110.3 17.519a6.058 6.058 0 100-12.116 6.058 6.058 0 000 12.116zM135.943 7.7c0-.981-1.224-2.617-3.483-2.617-2.26 0-3.539 1.636-3.539 2.944s.225 2.354 3.539 3.27c3.314.915 3.86 2.289 3.86 3.433 0 1.145-.999 3.107-3.86 3.107-2.862 0-3.86-1.962-3.86-3.27"></path>
</svg>
);
});
export default Icon;
+66
View File
@@ -0,0 +1,66 @@
---
nav: Components
group: Model
title: HappyHorse
atomId: HappyHorse
description: https://happyhorse.com
---
## Icons
```tsx
import { HappyHorse } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => <HappyHorse size={64} />;
```
## Text
```tsx
import { HappyHorse } from '@lobehub/icons';
export default () => <HappyHorse.Text size={48} />;
```
## Combine
```tsx
import { HappyHorse } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} align={'flex-start'}>
<HappyHorse.Combine size={64} />
</Flexbox>
);
```
## Avatars
```tsx
import { HappyHorse } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} horizontal>
<HappyHorse.Avatar size={64} />
<HappyHorse.Avatar size={64} shape={'square'} />
</Flexbox>
);
```
## Colors
```tsx
import { HappyHorse } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
import ColorPreview from '../components/ColorPreview';
export default () => (
<Flexbox gap={16} horizontal>
<ColorPreview color={HappyHorse.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 = 'Hedra';
export const COMBINE_TEXT_MULTIPLE = 0.8;
export const COMBINE_SPACE_MULTIPLE = 0.2;
export const COLOR_PRIMARY = '#000';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
export const AVATAR_ICON_MULTIPLE = 0.75;
+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="M18.654 3.87a5.087 5.087 0 110 10.174L23.7 19.09c.64.641.187 1.737-.72 1.737H8.48a8.479 8.479 0 010-16.958h10.175zM8.479 7.26a5.087 5.087 0 100 10.176 5.087 5.087 0 000-10.175z"
fill="#C8FF00"
/>
</svg>
);
});
export default Icon;
+7 -9
View File
@@ -4,24 +4,22 @@ import { memo } from 'react';
import IconCombine, { type IconCombineProps } from '@/features/IconCombine';
import { COLOR_PRIMARY, COMBINE_SPACE_MULTIPLE, COMBINE_TEXT_MULTIPLE, TITLE } from '../style';
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?: 'mono' | 'color';
type?: 'color' | 'mono';
}
const Combine = memo<CombineProps>(({ type = 'mono', ...rest }) => {
const Icon = type === 'color' ? Color : Mono;
const Combine = memo<CombineProps>(({ type = 'mono', iconProps, ...rest }) => {
return (
<IconCombine
Icon={Mono}
Text={Text as any}
Icon={Icon}
Text={Text}
aria-label={TITLE}
iconProps={{
color: type === 'color' ? COLOR_PRIMARY : undefined,
...iconProps,
}}
spaceMultiple={COMBINE_SPACE_MULTIPLE}
textMultiple={COMBINE_TEXT_MULTIPLE}
{...rest}
+1 -1
View File
@@ -19,7 +19,7 @@ const Icon: IconType = memo(({ size = '1em', style, ...rest }) => {
{...rest}
>
<title>{TITLE}</title>
<path d="M16.804 1.957l7.22 4.105v.087L16.73 10.21l.017-2.117-.821-.03c-1.059-.028-1.611.002-2.268.11-1.064.175-2.038.577-3.147 1.352L8.345 11.03c-.284.195-.495.336-.68.455l-.515.322-.397.234.385.23.53.338c.476.314 1.17.796 2.701 1.866 1.11.775 2.083 1.177 3.147 1.352l.3.045c.694.091 1.375.094 2.825.033l.022-2.159 7.22 4.105v.087L16.589 22l.014-1.862-.635.022c-1.386.042-2.137.002-3.138-.162-1.694-.28-3.26-.926-4.881-2.059l-2.158-1.5a21.997 21.997 0 00-.755-.498l-.467-.28a55.927 55.927 0 00-.76-.43C2.908 14.73.563 14.116 0 14.116V9.888l.14.004c.564-.007 2.91-.622 3.809-1.124l1.016-.58.438-.274c.428-.28 1.072-.726 2.686-1.853 1.621-1.133 3.186-1.78 4.881-2.059 1.152-.19 1.974-.213 3.814-.138l.02-1.907z" />
<path d="M18.654 3.87a5.087 5.087 0 110 10.174L23.7 19.09c.64.641.187 1.737-.72 1.737H8.48a8.479 8.479 0 010-16.958h10.175zM8.479 7.26a5.087 5.087 0 100 10.176 5.087 5.087 0 000-10.175z" />
</svg>
);
});
File diff suppressed because one or more lines are too long
+13 -2
View File
@@ -12,15 +12,25 @@ description: https://openrouter.ai
import { OpenRouter } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => <OpenRouter size={64} />;
export default () => (
<Flexbox gap={16} horizontal>
<OpenRouter size={64} />
<OpenRouter.Color size={64} />
</Flexbox>
);
```
## Text
```tsx
import { OpenRouter } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => <OpenRouter.Text size={48} />;
export default () => (
<Flexbox gap={16} align={'flex-start'}>
<OpenRouter.Text size={48} />
</Flexbox>
);
```
## Combine
@@ -32,6 +42,7 @@ import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} align={'flex-start'}>
<OpenRouter.Combine size={64} />
<OpenRouter.Combine size={64} type={'color'} />
</Flexbox>
);
```
+4
View File
@@ -1,4 +1,5 @@
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';
@@ -6,6 +7,7 @@ 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;
@@ -13,9 +15,11 @@ export type CompoundedIcon = typeof Mono & {
};
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;
+4 -4
View File
@@ -1,9 +1,9 @@
export const TITLE = 'OpenRouter';
export const COMBINE_TEXT_MULTIPLE = 1;
export const COMBINE_SPACE_MULTIPLE = 0.4;
export const COLOR_PRIMARY = '#6566F1';
export const COMBINE_SPACE_MULTIPLE = 0.3;
export const COLOR_PRIMARY = '#C8FF00';
// Avatar constants
export const AVATAR_BACKGROUND = COLOR_PRIMARY;
export const AVATAR_COLOR = '#fff';
export const AVATAR_BACKGROUND = '#000';
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;
+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;
+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
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 clipRule="evenodd" d="M1 1h16.5v11H12v5.5H6.5V23H1V1zm5.5 5.5V12H12V6.5H6.5z" />
<path d="M17.5 12H23v11h-5.5V12z" />
</svg>
);
});
export default Icon;
+1
View File
@@ -0,0 +1 @@
export { default } from './Mono';
+66
View File
@@ -0,0 +1,66 @@
---
nav: Components
group: Provider
title: Pi Agent
atomId: Pi
description: https://pi.dev
---
## Icons
```tsx
import { Pi } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => <Pi size={64} />;
```
## Text
```tsx
import { Pi } from '@lobehub/icons';
export default () => <Pi.Text size={48} />;
```
## Combine
```tsx
import { Pi } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} align={'flex-start'}>
<Pi.Combine size={64} />
</Flexbox>
);
```
## Avatars
```tsx
import { Pi } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
export default () => (
<Flexbox gap={16} horizontal>
<Pi.Avatar size={64} />
<Pi.Avatar size={64} shape={'square'} />
</Flexbox>
);
```
## Colors
```tsx
import { Pi } from '@lobehub/icons';
import { Flexbox } from '@lobehub/ui';
import ColorPreview from '../components/ColorPreview';
export default () => (
<Flexbox gap={16} horizontal>
<ColorPreview color={Pi.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;

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