From 8e63d1bfbc3c76c6e27958a41829d37d10c98fc6 Mon Sep 17 00:00:00 2001
From: CanisMinor
Date: Fri, 2 Feb 2024 08:50:45 +0000
Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20Add=20more=20ai=20brand?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/index.tsx | 91 ++++++++++---------
package.json | 2 +
src/Bing/components/Avatar.tsx | 22 +++++
src/Bing/components/Color.tsx | 69 ++++++++++++++
src/Bing/components/Combine.tsx | 27 ++++++
src/Bing/components/Mono.tsx | 23 +++++
src/Bing/components/Text.tsx | 22 +++++
src/Bing/index.md | 74 +++++++++++++++
src/Bing/index.ts | 25 ++++++
src/Bing/style.ts | 4 +
src/Copilot/components/Avatar.tsx | 14 +++
src/Copilot/components/Color.tsx | 109 +++++++++++++++++++++++
src/Copilot/components/Combine.tsx | 27 ++++++
src/Copilot/components/Mono.tsx | 23 +++++
src/Copilot/components/Text.tsx | 22 +++++
src/Copilot/index.md | 72 +++++++++++++++
src/Copilot/index.ts | 24 +++++
src/Copilot/style.ts | 3 +
src/DeepMind/components/Avatar.tsx | 14 +++
src/DeepMind/components/Color.tsx | 25 ++++++
src/DeepMind/components/Combine.tsx | 27 ++++++
src/DeepMind/components/Mono.tsx | 23 +++++
src/DeepMind/components/Text.tsx | 22 +++++
src/DeepMind/index.md | 72 +++++++++++++++
src/DeepMind/index.ts | 24 +++++
src/DeepMind/style.ts | 3 +
src/Gemini/index.ts | 1 -
src/Github/components/Avatar.tsx | 16 ++++
src/Github/components/Combine.tsx | 23 +++++
src/Github/components/Mono.tsx | 23 +++++
src/Github/components/Text.tsx | 22 +++++
src/Github/index.md | 66 ++++++++++++++
src/Github/index.ts | 20 +++++
src/Github/style.ts | 3 +
src/GithubCopilot/components/Avatar.tsx | 16 ++++
src/GithubCopilot/components/Combine.tsx | 23 +++++
src/GithubCopilot/components/Mono.tsx | 23 +++++
src/GithubCopilot/components/Text.tsx | 22 +++++
src/GithubCopilot/index.md | 66 ++++++++++++++
src/GithubCopilot/index.ts | 20 +++++
src/GithubCopilot/style.ts | 3 +
src/Google/components/Avatar.tsx | 14 +++
src/Google/components/BrandColor.tsx | 42 +++++++++
src/Google/components/BrandMono.tsx | 22 +++++
src/Google/components/Color.tsx | 38 ++++++++
src/Google/components/Mono.tsx | 23 +++++
src/Google/index.md | 64 +++++++++++++
src/Google/index.ts | 23 +++++
src/Google/style.ts | 1 +
src/Moonshot/components/Avatar.tsx | 16 ++++
src/Moonshot/components/Combine.tsx | 23 +++++
src/Moonshot/components/Mono.tsx | 23 +++++
src/Moonshot/components/Text.tsx | 22 +++++
src/Moonshot/index.md | 66 ++++++++++++++
src/Moonshot/index.ts | 20 +++++
src/Moonshot/style.ts | 3 +
src/Pollinations/components/Avatar.tsx | 16 ++++
src/Pollinations/components/Combine.tsx | 23 +++++
src/Pollinations/components/Mono.tsx | 23 +++++
src/Pollinations/components/Text.tsx | 22 +++++
src/Pollinations/index.md | 66 ++++++++++++++
src/Pollinations/index.ts | 20 +++++
src/Pollinations/style.ts | 3 +
src/components/Dashboard/Text.tsx | 57 ++++++++++++
src/components/Dashboard/index.tsx | 57 ++++++++++++
src/components/DownloadButton/index.tsx | 29 ++++++
src/components/IconPreview/index.tsx | 34 +++++--
src/index.ts | 11 +++
68 files changed, 1920 insertions(+), 51 deletions(-)
create mode 100644 src/Bing/components/Avatar.tsx
create mode 100644 src/Bing/components/Color.tsx
create mode 100644 src/Bing/components/Combine.tsx
create mode 100644 src/Bing/components/Mono.tsx
create mode 100644 src/Bing/components/Text.tsx
create mode 100644 src/Bing/index.md
create mode 100644 src/Bing/index.ts
create mode 100644 src/Bing/style.ts
create mode 100644 src/Copilot/components/Avatar.tsx
create mode 100644 src/Copilot/components/Color.tsx
create mode 100644 src/Copilot/components/Combine.tsx
create mode 100644 src/Copilot/components/Mono.tsx
create mode 100644 src/Copilot/components/Text.tsx
create mode 100644 src/Copilot/index.md
create mode 100644 src/Copilot/index.ts
create mode 100644 src/Copilot/style.ts
create mode 100644 src/DeepMind/components/Avatar.tsx
create mode 100644 src/DeepMind/components/Color.tsx
create mode 100644 src/DeepMind/components/Combine.tsx
create mode 100644 src/DeepMind/components/Mono.tsx
create mode 100644 src/DeepMind/components/Text.tsx
create mode 100644 src/DeepMind/index.md
create mode 100644 src/DeepMind/index.ts
create mode 100644 src/DeepMind/style.ts
create mode 100644 src/Github/components/Avatar.tsx
create mode 100644 src/Github/components/Combine.tsx
create mode 100644 src/Github/components/Mono.tsx
create mode 100644 src/Github/components/Text.tsx
create mode 100644 src/Github/index.md
create mode 100644 src/Github/index.ts
create mode 100644 src/Github/style.ts
create mode 100644 src/GithubCopilot/components/Avatar.tsx
create mode 100644 src/GithubCopilot/components/Combine.tsx
create mode 100644 src/GithubCopilot/components/Mono.tsx
create mode 100644 src/GithubCopilot/components/Text.tsx
create mode 100644 src/GithubCopilot/index.md
create mode 100644 src/GithubCopilot/index.ts
create mode 100644 src/GithubCopilot/style.ts
create mode 100644 src/Google/components/Avatar.tsx
create mode 100644 src/Google/components/BrandColor.tsx
create mode 100644 src/Google/components/BrandMono.tsx
create mode 100644 src/Google/components/Color.tsx
create mode 100644 src/Google/components/Mono.tsx
create mode 100644 src/Google/index.md
create mode 100644 src/Google/index.ts
create mode 100644 src/Google/style.ts
create mode 100644 src/Moonshot/components/Avatar.tsx
create mode 100644 src/Moonshot/components/Combine.tsx
create mode 100644 src/Moonshot/components/Mono.tsx
create mode 100644 src/Moonshot/components/Text.tsx
create mode 100644 src/Moonshot/index.md
create mode 100644 src/Moonshot/index.ts
create mode 100644 src/Moonshot/style.ts
create mode 100644 src/Pollinations/components/Avatar.tsx
create mode 100644 src/Pollinations/components/Combine.tsx
create mode 100644 src/Pollinations/components/Mono.tsx
create mode 100644 src/Pollinations/components/Text.tsx
create mode 100644 src/Pollinations/index.md
create mode 100644 src/Pollinations/index.ts
create mode 100644 src/Pollinations/style.ts
create mode 100644 src/components/Dashboard/Text.tsx
create mode 100644 src/components/Dashboard/index.tsx
create mode 100644 src/components/DownloadButton/index.tsx
diff --git a/docs/index.tsx b/docs/index.tsx
index 67247d48..8ce144d8 100644
--- a/docs/index.tsx
+++ b/docs/index.tsx
@@ -1,61 +1,68 @@
-import * as Icons from '@lobehub/icons';
-import { StoryBook, useControls, useCreateStore } from '@lobehub/ui';
+import { Features, FeaturesProps } from '@lobehub/ui';
+import { Segmented } from 'antd';
import { createStyles } from 'antd-style';
-import { Flexbox } from 'react-layout-kit';
+import { Expand, GitPullRequest, Trees } from 'lucide-react';
+import { useState } from 'react';
+import { Center } from 'react-layout-kit';
-const data = Object.values(Icons).filter((icon: any) => icon?.colorPrimary);
+import Dashboard from '@/components/Dashboard';
+import DashboardText from '@/components/Dashboard/Text';
+
+const items: FeaturesProps['items'] = [
+ {
+ description:
+ 'Icons are designed to be lightweight, utilizing highly optimized scalable vector graphics (SVG) for the best performance and quality.',
+ icon: Expand,
+ title: 'Lightweight & Scalable',
+ },
+ {
+ description:
+ 'The collection is tree-shakable, ensuring that you only import the icons that you use, which helps in reducing the overall bundle size of your project.',
+ icon: Trees,
+ title: 'Tree Shakable',
+ },
+ {
+ description:
+ 'Lobe Icons boasts an active community of designers and developers. Engage with us on platforms like GitHub and Discord to contribute or get support.',
+ icon: GitPullRequest,
+ title: 'Active Community',
+ },
+];
const useStyles = createStyles(({ css, token }) => ({
container: css`
+ margin-top: -4%;
+ `,
+ dashboard: css`
overflow: hidden;
-
max-width: 960px;
- margin-top: -4%;
-
border: 1px solid ${token.colorBorder};
border-radius: ${token.borderRadiusLG}px;
`,
- item: css`
- width: 96px;
- height: 96px;
- background: ${token.colorBgContainer};
+ segmented: css`
+ border: 1px solid ${token.colorBorder};
`,
}));
export default () => {
+ const [avtive, setActive] = useState('icons');
const { styles } = useStyles();
- const store = useCreateStore();
-
- const { size, color, monochrome } = useControls(
- {
- color: {
- color: true,
- value: '#fff',
- },
- monochrome: true,
- size: {
- max: 96,
- min: 16,
- step: 1,
- value: 48,
- },
- },
- { store },
- );
return (
-
-
- {data.map((Icon: any, index) => {
- const IconRender = !monochrome && Icon.Color ? Icon.Color : Icon;
-
- return (
-
-
-
- );
- })}
-
-
+
+ setActive(v as any)}
+ options={[
+ { label: 'Brand Icons', value: 'icons' },
+ { label: 'Brand Texts', value: 'texts' },
+ ]}
+ size={'large'}
+ value={avtive}
+ />
+ {avtive === 'icons' && }
+ {avtive === 'texts' && }
+
+
);
};
diff --git a/package.json b/package.json
index 189960cd..38cdddc9 100644
--- a/package.json
+++ b/package.json
@@ -83,6 +83,7 @@
"@types/react": "18.2.40",
"@types/react-dom": "^18",
"@vitest/coverage-v8": "latest",
+ "antd": "^5.13.3",
"antd-style": "^3",
"babel-plugin-antd-style": "latest",
"commitlint": "^18",
@@ -95,6 +96,7 @@
"husky": "^8",
"jsdom": "^23",
"lint-staged": "^15",
+ "lucide-react": "latest",
"prettier": "^3",
"react": "^18",
"react-dom": "^18",
diff --git a/src/Bing/components/Avatar.tsx b/src/Bing/components/Avatar.tsx
new file mode 100644
index 00000000..88db4463
--- /dev/null
+++ b/src/Bing/components/Avatar.tsx
@@ -0,0 +1,22 @@
+import { memo } from 'react';
+
+import IconAvatar, { type IconAvatarProps } from '@/IconAvatar';
+
+import { COLOR_GRADIENT } from '../style';
+import Mono from './Mono';
+
+export type AvatarProps = Omit;
+
+const Avatar = memo(({ background, iconStyle, size, ...rest }) => {
+ return (
+
+ );
+});
+
+export default Avatar;
diff --git a/src/Bing/components/Color.tsx b/src/Bing/components/Color.tsx
new file mode 100644
index 00000000..75590f4a
--- /dev/null
+++ b/src/Bing/components/Color.tsx
@@ -0,0 +1,69 @@
+import { forwardRef } from 'react';
+
+import { useFillIds } from '@/hooks/useFillId';
+import type { IconType } from '@/types';
+
+const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
+ const [a, b, c] = useFillIds('bing', 3);
+
+ return (
+
+ );
+});
+
+export default Icon;
diff --git a/src/Bing/components/Combine.tsx b/src/Bing/components/Combine.tsx
new file mode 100644
index 00000000..176cdc8d
--- /dev/null
+++ b/src/Bing/components/Combine.tsx
@@ -0,0 +1,27 @@
+import { memo } from 'react';
+
+import IconCombine, { type IconCombineProps } from '@/IconCombine';
+
+import { SPACE_MULTIPLE, TEXT_MULTIPLE } from '../style';
+import Color from './Color';
+import Mono from './Mono';
+import Text from './Text';
+
+export interface CombineProps extends Omit {
+ type?: 'color' | 'mono';
+}
+const Combine = memo(({ type = 'mono', ...rest }) => {
+ const Icon = type === 'color' ? Color : Mono;
+
+ return (
+
+ );
+});
+
+export default Combine;
diff --git a/src/Bing/components/Mono.tsx b/src/Bing/components/Mono.tsx
new file mode 100644
index 00000000..d93419a1
--- /dev/null
+++ b/src/Bing/components/Mono.tsx
@@ -0,0 +1,23 @@
+import { forwardRef } from 'react';
+
+import type { IconType } from '@/types';
+
+const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
+ return (
+
+ );
+});
+
+export default Icon;
diff --git a/src/Bing/components/Text.tsx b/src/Bing/components/Text.tsx
new file mode 100644
index 00000000..f527659a
--- /dev/null
+++ b/src/Bing/components/Text.tsx
@@ -0,0 +1,22 @@
+import { forwardRef } from 'react';
+
+import type { IconType } from '@/types';
+
+const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
+ return (
+
+ );
+});
+
+export default Icon;
diff --git a/src/Bing/index.md b/src/Bing/index.md
new file mode 100644
index 00000000..63afb66a
--- /dev/null
+++ b/src/Bing/index.md
@@ -0,0 +1,74 @@
+---
+nav: Components
+group: Icons
+title: Microsoft (Bing)
+atomId: Bing
+description: https://bing.com
+---
+
+## Icons
+
+```tsx
+import { Bing } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => (
+
+
+
+
+);
+```
+
+## Text
+
+```tsx
+import { Bing } from '@lobehub/icons';
+
+export default () => ;
+```
+
+## Combine
+
+```tsx
+import { Bing } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => (
+
+
+
+
+);
+```
+
+## Avatars
+
+```tsx
+import { Bing } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => (
+
+
+
+
+
+);
+```
+
+## Colors
+
+```tsx
+import { Bing } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+import ColorPreview from '../components/ColorPreview';
+
+export default () => (
+
+
+
+
+);
+```
diff --git a/src/Bing/index.ts b/src/Bing/index.ts
new file mode 100644
index 00000000..68d144c5
--- /dev/null
+++ b/src/Bing/index.ts
@@ -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_GRADIENT, COLOR_PRIMARY } from './style';
+
+export type CompoundedIcon = typeof Mono & {
+ Avatar: typeof Avatar;
+ Color: typeof Color;
+ Combine: typeof Combine;
+ Text: typeof Text;
+ colorGradient: string;
+ colorPrimary: 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;
+
+export default Icons;
diff --git a/src/Bing/style.ts b/src/Bing/style.ts
new file mode 100644
index 00000000..c73a8dd8
--- /dev/null
+++ b/src/Bing/style.ts
@@ -0,0 +1,4 @@
+export const TEXT_MULTIPLE = 0.8;
+export const SPACE_MULTIPLE = 0.1;
+export const COLOR_PRIMARY = '#174ae4';
+export const COLOR_GRADIENT = 'linear-gradient(130deg, #2870EA 20%, #1B4AEF 77.5%)';
diff --git a/src/Copilot/components/Avatar.tsx b/src/Copilot/components/Avatar.tsx
new file mode 100644
index 00000000..899f1aa6
--- /dev/null
+++ b/src/Copilot/components/Avatar.tsx
@@ -0,0 +1,14 @@
+import { memo } from 'react';
+
+import IconAvatar, { type IconAvatarProps } from '@/IconAvatar';
+
+import { COLOR_PRIMARY } from '../style';
+import Color from './Color';
+
+export type AvatarProps = Omit;
+
+const Avatar = memo(({ background, ...rest }) => {
+ return ;
+});
+
+export default Avatar;
diff --git a/src/Copilot/components/Color.tsx b/src/Copilot/components/Color.tsx
new file mode 100644
index 00000000..d1468e35
--- /dev/null
+++ b/src/Copilot/components/Color.tsx
@@ -0,0 +1,109 @@
+import { forwardRef } from 'react';
+
+import { useFillIds } from '@/hooks/useFillId';
+import type { IconType } from '@/types';
+
+const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
+ const [a, b, c, d, e, f] = useFillIds('copilot', 6);
+ return (
+
+ );
+});
+
+export default Icon;
diff --git a/src/Copilot/components/Combine.tsx b/src/Copilot/components/Combine.tsx
new file mode 100644
index 00000000..176cdc8d
--- /dev/null
+++ b/src/Copilot/components/Combine.tsx
@@ -0,0 +1,27 @@
+import { memo } from 'react';
+
+import IconCombine, { type IconCombineProps } from '@/IconCombine';
+
+import { SPACE_MULTIPLE, TEXT_MULTIPLE } from '../style';
+import Color from './Color';
+import Mono from './Mono';
+import Text from './Text';
+
+export interface CombineProps extends Omit {
+ type?: 'color' | 'mono';
+}
+const Combine = memo(({ type = 'mono', ...rest }) => {
+ const Icon = type === 'color' ? Color : Mono;
+
+ return (
+
+ );
+});
+
+export default Combine;
diff --git a/src/Copilot/components/Mono.tsx b/src/Copilot/components/Mono.tsx
new file mode 100644
index 00000000..d7cc46c1
--- /dev/null
+++ b/src/Copilot/components/Mono.tsx
@@ -0,0 +1,23 @@
+import { forwardRef } from 'react';
+
+import type { IconType } from '@/types';
+
+const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
+ return (
+
+ );
+});
+
+export default Icon;
diff --git a/src/Copilot/components/Text.tsx b/src/Copilot/components/Text.tsx
new file mode 100644
index 00000000..e9bcfd2c
--- /dev/null
+++ b/src/Copilot/components/Text.tsx
@@ -0,0 +1,22 @@
+import { forwardRef } from 'react';
+
+import type { IconType } from '@/types';
+
+const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
+ return (
+
+ );
+});
+
+export default Icon;
diff --git a/src/Copilot/index.md b/src/Copilot/index.md
new file mode 100644
index 00000000..d6f0f576
--- /dev/null
+++ b/src/Copilot/index.md
@@ -0,0 +1,72 @@
+---
+nav: Components
+group: Icons
+title: Microsoft (Copilot)
+atomId: Copilot
+description: https://copilot.microsoft.com
+---
+
+## Icons
+
+```tsx
+import { Copilot } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => (
+
+
+
+
+);
+```
+
+## Text
+
+```tsx
+import { Copilot } from '@lobehub/icons';
+
+export default () => ;
+```
+
+## Combine
+
+```tsx
+import { Copilot } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => (
+
+
+
+
+);
+```
+
+## Avatars
+
+```tsx
+import { Copilot } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => (
+
+
+
+
+);
+```
+
+## Colors
+
+```tsx
+import { Copilot } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+import ColorPreview from '../components/ColorPreview';
+
+export default () => (
+
+
+
+);
+```
diff --git a/src/Copilot/index.ts b/src/Copilot/index.ts
new file mode 100644
index 00000000..21fa8c71
--- /dev/null
+++ b/src/Copilot/index.ts
@@ -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 } from './style';
+
+export type CompoundedIcon = typeof Mono & {
+ Avatar: typeof Avatar;
+ Color: typeof Color;
+ Combine: typeof Combine;
+
+ Text: typeof Text;
+ colorPrimary: string;
+};
+
+const Icons = Mono as CompoundedIcon;
+Icons.Color = Color;
+Icons.Text = Text;
+Icons.Combine = Combine;
+Icons.Avatar = Avatar;
+Icons.colorPrimary = COLOR_PRIMARY;
+
+export default Icons;
diff --git a/src/Copilot/style.ts b/src/Copilot/style.ts
new file mode 100644
index 00000000..b5673f62
--- /dev/null
+++ b/src/Copilot/style.ts
@@ -0,0 +1,3 @@
+export const TEXT_MULTIPLE = 0.8;
+export const SPACE_MULTIPLE = 0.2;
+export const COLOR_PRIMARY = '#fff';
diff --git a/src/DeepMind/components/Avatar.tsx b/src/DeepMind/components/Avatar.tsx
new file mode 100644
index 00000000..e7c3a9d6
--- /dev/null
+++ b/src/DeepMind/components/Avatar.tsx
@@ -0,0 +1,14 @@
+import { memo } from 'react';
+
+import IconAvatar, { type IconAvatarProps } from '@/IconAvatar';
+
+import { COLOR_PRIMARY } from '../style';
+import Mono from './Mono';
+
+export type AvatarProps = Omit;
+
+const Avatar = memo(({ background, ...rest }) => {
+ return ;
+});
+
+export default Avatar;
diff --git a/src/DeepMind/components/Color.tsx b/src/DeepMind/components/Color.tsx
new file mode 100644
index 00000000..0df4cf01
--- /dev/null
+++ b/src/DeepMind/components/Color.tsx
@@ -0,0 +1,25 @@
+import { forwardRef } from 'react';
+
+import type { IconType } from '@/types';
+
+const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
+ return (
+
+ );
+});
+
+export default Icon;
diff --git a/src/DeepMind/components/Combine.tsx b/src/DeepMind/components/Combine.tsx
new file mode 100644
index 00000000..176cdc8d
--- /dev/null
+++ b/src/DeepMind/components/Combine.tsx
@@ -0,0 +1,27 @@
+import { memo } from 'react';
+
+import IconCombine, { type IconCombineProps } from '@/IconCombine';
+
+import { SPACE_MULTIPLE, TEXT_MULTIPLE } from '../style';
+import Color from './Color';
+import Mono from './Mono';
+import Text from './Text';
+
+export interface CombineProps extends Omit {
+ type?: 'color' | 'mono';
+}
+const Combine = memo(({ type = 'mono', ...rest }) => {
+ const Icon = type === 'color' ? Color : Mono;
+
+ return (
+
+ );
+});
+
+export default Combine;
diff --git a/src/DeepMind/components/Mono.tsx b/src/DeepMind/components/Mono.tsx
new file mode 100644
index 00000000..72bf2797
--- /dev/null
+++ b/src/DeepMind/components/Mono.tsx
@@ -0,0 +1,23 @@
+import { forwardRef } from 'react';
+
+import type { IconType } from '@/types';
+
+const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
+ return (
+
+ );
+});
+
+export default Icon;
diff --git a/src/DeepMind/components/Text.tsx b/src/DeepMind/components/Text.tsx
new file mode 100644
index 00000000..93fbe13c
--- /dev/null
+++ b/src/DeepMind/components/Text.tsx
@@ -0,0 +1,22 @@
+import { forwardRef } from 'react';
+
+import type { IconType } from '@/types';
+
+const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
+ return (
+
+ );
+});
+
+export default Icon;
diff --git a/src/DeepMind/index.md b/src/DeepMind/index.md
new file mode 100644
index 00000000..fef92ce7
--- /dev/null
+++ b/src/DeepMind/index.md
@@ -0,0 +1,72 @@
+---
+nav: Components
+group: Icons
+title: Google (DeepMind)
+atomId: DeepMind
+description: https://deepmind.google
+---
+
+## Icons
+
+```tsx
+import { DeepMind } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => (
+
+
+
+
+);
+```
+
+## Text
+
+```tsx
+import { DeepMind } from '@lobehub/icons';
+
+export default () => ;
+```
+
+## Combine
+
+```tsx
+import { DeepMind } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => (
+
+
+
+
+);
+```
+
+## Avatars
+
+```tsx
+import { DeepMind } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => (
+
+
+
+
+);
+```
+
+## Colors
+
+```tsx
+import { DeepMind } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+import ColorPreview from '../components/ColorPreview';
+
+export default () => (
+
+
+
+);
+```
diff --git a/src/DeepMind/index.ts b/src/DeepMind/index.ts
new file mode 100644
index 00000000..21fa8c71
--- /dev/null
+++ b/src/DeepMind/index.ts
@@ -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 } from './style';
+
+export type CompoundedIcon = typeof Mono & {
+ Avatar: typeof Avatar;
+ Color: typeof Color;
+ Combine: typeof Combine;
+
+ Text: typeof Text;
+ colorPrimary: string;
+};
+
+const Icons = Mono as CompoundedIcon;
+Icons.Color = Color;
+Icons.Text = Text;
+Icons.Combine = Combine;
+Icons.Avatar = Avatar;
+Icons.colorPrimary = COLOR_PRIMARY;
+
+export default Icons;
diff --git a/src/DeepMind/style.ts b/src/DeepMind/style.ts
new file mode 100644
index 00000000..2610f605
--- /dev/null
+++ b/src/DeepMind/style.ts
@@ -0,0 +1,3 @@
+export const TEXT_MULTIPLE = 0.8;
+export const SPACE_MULTIPLE = 0.3;
+export const COLOR_PRIMARY = '#4285F4';
diff --git a/src/Gemini/index.ts b/src/Gemini/index.ts
index 3acc3793..7cb176b2 100644
--- a/src/Gemini/index.ts
+++ b/src/Gemini/index.ts
@@ -13,7 +13,6 @@ export type CompoundedIcon = typeof Mono & {
BrandColor: typeof BrandColor;
Color: typeof Color;
Combine: typeof Combine;
-
Text: typeof Text;
colorGradient: string;
colorPrimary: string;
diff --git a/src/Github/components/Avatar.tsx b/src/Github/components/Avatar.tsx
new file mode 100644
index 00000000..6cfeaa16
--- /dev/null
+++ b/src/Github/components/Avatar.tsx
@@ -0,0 +1,16 @@
+import { memo } from 'react';
+
+import IconAvatar, { type IconAvatarProps } from '@/IconAvatar';
+
+import { COLOR_PRIMARY } from '../style';
+import Mono from './Mono';
+
+export type AvatarProps = Omit;
+
+const Avatar = memo(({ background, ...rest }) => {
+ return (
+
+ );
+});
+
+export default Avatar;
diff --git a/src/Github/components/Combine.tsx b/src/Github/components/Combine.tsx
new file mode 100644
index 00000000..3bef4f41
--- /dev/null
+++ b/src/Github/components/Combine.tsx
@@ -0,0 +1,23 @@
+import { memo } from 'react';
+
+import IconCombine, { type IconCombineProps } from '@/IconCombine';
+
+import { SPACE_MULTIPLE, TEXT_MULTIPLE } from '../style';
+import Mono from './Mono';
+import Text from './Text';
+
+export type CombineProps = Omit;
+
+const Combine = memo(({ ...rest }) => {
+ return (
+
+ );
+});
+
+export default Combine;
diff --git a/src/Github/components/Mono.tsx b/src/Github/components/Mono.tsx
new file mode 100644
index 00000000..f82dfffd
--- /dev/null
+++ b/src/Github/components/Mono.tsx
@@ -0,0 +1,23 @@
+import { forwardRef } from 'react';
+
+import type { IconType } from '@/types';
+
+const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
+ return (
+
+ );
+});
+
+export default Icon;
diff --git a/src/Github/components/Text.tsx b/src/Github/components/Text.tsx
new file mode 100644
index 00000000..3e4f4b82
--- /dev/null
+++ b/src/Github/components/Text.tsx
@@ -0,0 +1,22 @@
+import { forwardRef } from 'react';
+
+import type { IconType } from '@/types';
+
+const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
+ return (
+
+ );
+});
+
+export default Icon;
diff --git a/src/Github/index.md b/src/Github/index.md
new file mode 100644
index 00000000..d02858b8
--- /dev/null
+++ b/src/Github/index.md
@@ -0,0 +1,66 @@
+---
+nav: Components
+group: Icons
+title: Github
+atomId: Github
+description: https://github.com
+---
+
+## Icons
+
+```tsx
+import { Github } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => ;
+```
+
+## Text
+
+```tsx
+import { Github } from '@lobehub/icons';
+
+export default () => ;
+```
+
+## Combine
+
+```tsx
+import { Github } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => (
+
+
+
+);
+```
+
+## Avatars
+
+```tsx
+import { Github } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => (
+
+
+
+
+);
+```
+
+## Colors
+
+```tsx
+import { Github } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+import ColorPreview from '../components/ColorPreview';
+
+export default () => (
+
+
+
+);
+```
diff --git a/src/Github/index.ts b/src/Github/index.ts
new file mode 100644
index 00000000..a50b8e26
--- /dev/null
+++ b/src/Github/index.ts
@@ -0,0 +1,20 @@
+import Avatar from './components/Avatar';
+import Combine from './components/Combine';
+import Mono from './components/Mono';
+import Text from './components/Text';
+import { COLOR_PRIMARY } from './style';
+
+export type CompoundedIcon = typeof Mono & {
+ Avatar: typeof Avatar;
+ Combine: typeof Combine;
+
+ Text: typeof Text;
+ colorPrimary: string;
+};
+
+const Icons = Mono as CompoundedIcon;
+Icons.Text = Text;
+Icons.Combine = Combine;
+Icons.Avatar = Avatar;
+Icons.colorPrimary = COLOR_PRIMARY;
+export default Icons;
diff --git a/src/Github/style.ts b/src/Github/style.ts
new file mode 100644
index 00000000..1bf16702
--- /dev/null
+++ b/src/Github/style.ts
@@ -0,0 +1,3 @@
+export const TEXT_MULTIPLE = 0.8;
+export const SPACE_MULTIPLE = 0.2;
+export const COLOR_PRIMARY = '#000';
diff --git a/src/GithubCopilot/components/Avatar.tsx b/src/GithubCopilot/components/Avatar.tsx
new file mode 100644
index 00000000..29ee6850
--- /dev/null
+++ b/src/GithubCopilot/components/Avatar.tsx
@@ -0,0 +1,16 @@
+import { memo } from 'react';
+
+import IconAvatar, { type IconAvatarProps } from '@/IconAvatar';
+
+import { COLOR_PRIMARY } from '../style';
+import Mono from './Mono';
+
+export type AvatarProps = Omit;
+
+const Avatar = memo(({ background, ...rest }) => {
+ return (
+
+ );
+});
+
+export default Avatar;
diff --git a/src/GithubCopilot/components/Combine.tsx b/src/GithubCopilot/components/Combine.tsx
new file mode 100644
index 00000000..3bef4f41
--- /dev/null
+++ b/src/GithubCopilot/components/Combine.tsx
@@ -0,0 +1,23 @@
+import { memo } from 'react';
+
+import IconCombine, { type IconCombineProps } from '@/IconCombine';
+
+import { SPACE_MULTIPLE, TEXT_MULTIPLE } from '../style';
+import Mono from './Mono';
+import Text from './Text';
+
+export type CombineProps = Omit;
+
+const Combine = memo(({ ...rest }) => {
+ return (
+
+ );
+});
+
+export default Combine;
diff --git a/src/GithubCopilot/components/Mono.tsx b/src/GithubCopilot/components/Mono.tsx
new file mode 100644
index 00000000..4263c009
--- /dev/null
+++ b/src/GithubCopilot/components/Mono.tsx
@@ -0,0 +1,23 @@
+import { forwardRef } from 'react';
+
+import type { IconType } from '@/types';
+
+const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
+ return (
+
+ );
+});
+
+export default Icon;
diff --git a/src/GithubCopilot/components/Text.tsx b/src/GithubCopilot/components/Text.tsx
new file mode 100644
index 00000000..f3bb9ff6
--- /dev/null
+++ b/src/GithubCopilot/components/Text.tsx
@@ -0,0 +1,22 @@
+import { forwardRef } from 'react';
+
+import type { IconType } from '@/types';
+
+const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
+ return (
+
+ );
+});
+
+export default Icon;
diff --git a/src/GithubCopilot/index.md b/src/GithubCopilot/index.md
new file mode 100644
index 00000000..68a15a33
--- /dev/null
+++ b/src/GithubCopilot/index.md
@@ -0,0 +1,66 @@
+---
+nav: Components
+group: Icons
+title: Github (Copilot)
+atomId: GithubCopilot
+description: https://github.com/features/copilot
+---
+
+## Icons
+
+```tsx
+import { GithubCopilot } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => ;
+```
+
+## Text
+
+```tsx
+import { GithubCopilot } from '@lobehub/icons';
+
+export default () => ;
+```
+
+## Combine
+
+```tsx
+import { GithubCopilot } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => (
+
+
+
+);
+```
+
+## Avatars
+
+```tsx
+import { GithubCopilot } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => (
+
+
+
+
+);
+```
+
+## Colors
+
+```tsx
+import { GithubCopilot } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+import ColorPreview from '../components/ColorPreview';
+
+export default () => (
+
+
+
+);
+```
diff --git a/src/GithubCopilot/index.ts b/src/GithubCopilot/index.ts
new file mode 100644
index 00000000..a50b8e26
--- /dev/null
+++ b/src/GithubCopilot/index.ts
@@ -0,0 +1,20 @@
+import Avatar from './components/Avatar';
+import Combine from './components/Combine';
+import Mono from './components/Mono';
+import Text from './components/Text';
+import { COLOR_PRIMARY } from './style';
+
+export type CompoundedIcon = typeof Mono & {
+ Avatar: typeof Avatar;
+ Combine: typeof Combine;
+
+ Text: typeof Text;
+ colorPrimary: string;
+};
+
+const Icons = Mono as CompoundedIcon;
+Icons.Text = Text;
+Icons.Combine = Combine;
+Icons.Avatar = Avatar;
+Icons.colorPrimary = COLOR_PRIMARY;
+export default Icons;
diff --git a/src/GithubCopilot/style.ts b/src/GithubCopilot/style.ts
new file mode 100644
index 00000000..0c18c1e0
--- /dev/null
+++ b/src/GithubCopilot/style.ts
@@ -0,0 +1,3 @@
+export const TEXT_MULTIPLE = 0.75;
+export const SPACE_MULTIPLE = 0.3;
+export const COLOR_PRIMARY = '#000';
diff --git a/src/Google/components/Avatar.tsx b/src/Google/components/Avatar.tsx
new file mode 100644
index 00000000..899f1aa6
--- /dev/null
+++ b/src/Google/components/Avatar.tsx
@@ -0,0 +1,14 @@
+import { memo } from 'react';
+
+import IconAvatar, { type IconAvatarProps } from '@/IconAvatar';
+
+import { COLOR_PRIMARY } from '../style';
+import Color from './Color';
+
+export type AvatarProps = Omit;
+
+const Avatar = memo(({ background, ...rest }) => {
+ return ;
+});
+
+export default Avatar;
diff --git a/src/Google/components/BrandColor.tsx b/src/Google/components/BrandColor.tsx
new file mode 100644
index 00000000..dffedc3d
--- /dev/null
+++ b/src/Google/components/BrandColor.tsx
@@ -0,0 +1,42 @@
+import { forwardRef } from 'react';
+
+import type { IconType } from '@/types';
+
+const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
+ return (
+
+ );
+});
+
+export default Icon;
diff --git a/src/Google/components/BrandMono.tsx b/src/Google/components/BrandMono.tsx
new file mode 100644
index 00000000..10b8ceb8
--- /dev/null
+++ b/src/Google/components/BrandMono.tsx
@@ -0,0 +1,22 @@
+import { forwardRef } from 'react';
+
+import type { IconType } from '@/types';
+
+const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
+ return (
+
+ );
+});
+
+export default Icon;
diff --git a/src/Google/components/Color.tsx b/src/Google/components/Color.tsx
new file mode 100644
index 00000000..914efcfa
--- /dev/null
+++ b/src/Google/components/Color.tsx
@@ -0,0 +1,38 @@
+import { forwardRef } from 'react';
+
+import type { IconType } from '@/types';
+
+const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
+ return (
+
+ );
+});
+
+export default Icon;
diff --git a/src/Google/components/Mono.tsx b/src/Google/components/Mono.tsx
new file mode 100644
index 00000000..e79fafd1
--- /dev/null
+++ b/src/Google/components/Mono.tsx
@@ -0,0 +1,23 @@
+import { forwardRef } from 'react';
+
+import type { IconType } from '@/types';
+
+const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
+ return (
+
+ );
+});
+
+export default Icon;
diff --git a/src/Google/index.md b/src/Google/index.md
new file mode 100644
index 00000000..ecadbe81
--- /dev/null
+++ b/src/Google/index.md
@@ -0,0 +1,64 @@
+---
+nav: Components
+group: Icons
+title: Google
+atomId: Google
+description: https://google.com
+---
+
+## Icons
+
+```tsx
+import { Google } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => (
+
+
+
+
+);
+```
+
+## Brands
+
+```tsx
+import { Google } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => (
+
+
+
+
+);
+```
+
+## Avatars
+
+```tsx
+import { Google } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => (
+
+
+
+
+);
+```
+
+## Colors
+
+```tsx
+import { Google } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+import ColorPreview from '../components/ColorPreview';
+
+export default () => (
+
+
+
+);
+```
diff --git a/src/Google/index.ts b/src/Google/index.ts
new file mode 100644
index 00000000..9acdbddf
--- /dev/null
+++ b/src/Google/index.ts
@@ -0,0 +1,23 @@
+import Avatar from './components/Avatar';
+import BrandColor from './components/BrandColor';
+import BrandMono from './components/BrandMono';
+import Color from './components/Color';
+import Mono from './components/Mono';
+import { COLOR_PRIMARY } from './style';
+
+export type CompoundedIcon = typeof Mono & {
+ Avatar: typeof Avatar;
+ Brand: typeof BrandMono;
+ BrandColor: typeof BrandColor;
+ Color: typeof Color;
+ colorPrimary: string;
+};
+
+const Icons = Mono as CompoundedIcon;
+Icons.Color = Color;
+Icons.Brand = BrandMono;
+Icons.BrandColor = BrandColor;
+Icons.Avatar = Avatar;
+Icons.colorPrimary = COLOR_PRIMARY;
+
+export default Icons;
diff --git a/src/Google/style.ts b/src/Google/style.ts
new file mode 100644
index 00000000..a55bb87e
--- /dev/null
+++ b/src/Google/style.ts
@@ -0,0 +1 @@
+export const COLOR_PRIMARY = '#fff';
diff --git a/src/Moonshot/components/Avatar.tsx b/src/Moonshot/components/Avatar.tsx
new file mode 100644
index 00000000..6cfeaa16
--- /dev/null
+++ b/src/Moonshot/components/Avatar.tsx
@@ -0,0 +1,16 @@
+import { memo } from 'react';
+
+import IconAvatar, { type IconAvatarProps } from '@/IconAvatar';
+
+import { COLOR_PRIMARY } from '../style';
+import Mono from './Mono';
+
+export type AvatarProps = Omit;
+
+const Avatar = memo(({ background, ...rest }) => {
+ return (
+
+ );
+});
+
+export default Avatar;
diff --git a/src/Moonshot/components/Combine.tsx b/src/Moonshot/components/Combine.tsx
new file mode 100644
index 00000000..3bef4f41
--- /dev/null
+++ b/src/Moonshot/components/Combine.tsx
@@ -0,0 +1,23 @@
+import { memo } from 'react';
+
+import IconCombine, { type IconCombineProps } from '@/IconCombine';
+
+import { SPACE_MULTIPLE, TEXT_MULTIPLE } from '../style';
+import Mono from './Mono';
+import Text from './Text';
+
+export type CombineProps = Omit;
+
+const Combine = memo(({ ...rest }) => {
+ return (
+
+ );
+});
+
+export default Combine;
diff --git a/src/Moonshot/components/Mono.tsx b/src/Moonshot/components/Mono.tsx
new file mode 100644
index 00000000..7b1f8704
--- /dev/null
+++ b/src/Moonshot/components/Mono.tsx
@@ -0,0 +1,23 @@
+import { forwardRef } from 'react';
+
+import type { IconType } from '@/types';
+
+const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
+ return (
+
+ );
+});
+
+export default Icon;
diff --git a/src/Moonshot/components/Text.tsx b/src/Moonshot/components/Text.tsx
new file mode 100644
index 00000000..87f87b04
--- /dev/null
+++ b/src/Moonshot/components/Text.tsx
@@ -0,0 +1,22 @@
+import { forwardRef } from 'react';
+
+import type { IconType } from '@/types';
+
+const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
+ return (
+
+ );
+});
+
+export default Icon;
diff --git a/src/Moonshot/index.md b/src/Moonshot/index.md
new file mode 100644
index 00000000..bbd83c1c
--- /dev/null
+++ b/src/Moonshot/index.md
@@ -0,0 +1,66 @@
+---
+nav: Components
+group: Icons
+title: Moonshot (ζδΉζι’)
+atomId: Moonshot
+description: https://moonshot.cn
+---
+
+## Icons
+
+```tsx
+import { Moonshot } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => ;
+```
+
+## Text
+
+```tsx
+import { Moonshot } from '@lobehub/icons';
+
+export default () => ;
+```
+
+## Combine
+
+```tsx
+import { Moonshot } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => (
+
+
+
+);
+```
+
+## Avatars
+
+```tsx
+import { Moonshot } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => (
+
+
+
+
+);
+```
+
+## Colors
+
+```tsx
+import { Moonshot } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+import ColorPreview from '../components/ColorPreview';
+
+export default () => (
+
+
+
+);
+```
diff --git a/src/Moonshot/index.ts b/src/Moonshot/index.ts
new file mode 100644
index 00000000..a50b8e26
--- /dev/null
+++ b/src/Moonshot/index.ts
@@ -0,0 +1,20 @@
+import Avatar from './components/Avatar';
+import Combine from './components/Combine';
+import Mono from './components/Mono';
+import Text from './components/Text';
+import { COLOR_PRIMARY } from './style';
+
+export type CompoundedIcon = typeof Mono & {
+ Avatar: typeof Avatar;
+ Combine: typeof Combine;
+
+ Text: typeof Text;
+ colorPrimary: string;
+};
+
+const Icons = Mono as CompoundedIcon;
+Icons.Text = Text;
+Icons.Combine = Combine;
+Icons.Avatar = Avatar;
+Icons.colorPrimary = COLOR_PRIMARY;
+export default Icons;
diff --git a/src/Moonshot/style.ts b/src/Moonshot/style.ts
new file mode 100644
index 00000000..5b3ed6d5
--- /dev/null
+++ b/src/Moonshot/style.ts
@@ -0,0 +1,3 @@
+export const TEXT_MULTIPLE = 0.75;
+export const SPACE_MULTIPLE = 0.4;
+export const COLOR_PRIMARY = '#16191E';
diff --git a/src/Pollinations/components/Avatar.tsx b/src/Pollinations/components/Avatar.tsx
new file mode 100644
index 00000000..6cfeaa16
--- /dev/null
+++ b/src/Pollinations/components/Avatar.tsx
@@ -0,0 +1,16 @@
+import { memo } from 'react';
+
+import IconAvatar, { type IconAvatarProps } from '@/IconAvatar';
+
+import { COLOR_PRIMARY } from '../style';
+import Mono from './Mono';
+
+export type AvatarProps = Omit;
+
+const Avatar = memo(({ background, ...rest }) => {
+ return (
+
+ );
+});
+
+export default Avatar;
diff --git a/src/Pollinations/components/Combine.tsx b/src/Pollinations/components/Combine.tsx
new file mode 100644
index 00000000..3bef4f41
--- /dev/null
+++ b/src/Pollinations/components/Combine.tsx
@@ -0,0 +1,23 @@
+import { memo } from 'react';
+
+import IconCombine, { type IconCombineProps } from '@/IconCombine';
+
+import { SPACE_MULTIPLE, TEXT_MULTIPLE } from '../style';
+import Mono from './Mono';
+import Text from './Text';
+
+export type CombineProps = Omit;
+
+const Combine = memo(({ ...rest }) => {
+ return (
+
+ );
+});
+
+export default Combine;
diff --git a/src/Pollinations/components/Mono.tsx b/src/Pollinations/components/Mono.tsx
new file mode 100644
index 00000000..8b106c4b
--- /dev/null
+++ b/src/Pollinations/components/Mono.tsx
@@ -0,0 +1,23 @@
+import { forwardRef } from 'react';
+
+import type { IconType } from '@/types';
+
+const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
+ return (
+
+ );
+});
+
+export default Icon;
diff --git a/src/Pollinations/components/Text.tsx b/src/Pollinations/components/Text.tsx
new file mode 100644
index 00000000..7df57215
--- /dev/null
+++ b/src/Pollinations/components/Text.tsx
@@ -0,0 +1,22 @@
+import { forwardRef } from 'react';
+
+import type { IconType } from '@/types';
+
+const Icon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref) => {
+ return (
+
+ );
+});
+
+export default Icon;
diff --git a/src/Pollinations/index.md b/src/Pollinations/index.md
new file mode 100644
index 00000000..f4d33d1f
--- /dev/null
+++ b/src/Pollinations/index.md
@@ -0,0 +1,66 @@
+---
+nav: Components
+group: Icons
+title: Pollinations
+atomId: Pollinations
+description: https://pollinations.ai`
+---
+
+## Icons
+
+```tsx
+import { Pollinations } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => ;
+```
+
+## Text
+
+```tsx
+import { Pollinations } from '@lobehub/icons';
+
+export default () => ;
+```
+
+## Combine
+
+```tsx
+import { Pollinations } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => (
+
+
+
+);
+```
+
+## Avatars
+
+```tsx
+import { Pollinations } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+export default () => (
+
+
+
+
+);
+```
+
+## Colors
+
+```tsx
+import { Pollinations } from '@lobehub/icons';
+import { Flexbox } from 'react-layout-kit';
+
+import ColorPreview from '../components/ColorPreview';
+
+export default () => (
+
+
+
+);
+```
diff --git a/src/Pollinations/index.ts b/src/Pollinations/index.ts
new file mode 100644
index 00000000..a50b8e26
--- /dev/null
+++ b/src/Pollinations/index.ts
@@ -0,0 +1,20 @@
+import Avatar from './components/Avatar';
+import Combine from './components/Combine';
+import Mono from './components/Mono';
+import Text from './components/Text';
+import { COLOR_PRIMARY } from './style';
+
+export type CompoundedIcon = typeof Mono & {
+ Avatar: typeof Avatar;
+ Combine: typeof Combine;
+
+ Text: typeof Text;
+ colorPrimary: string;
+};
+
+const Icons = Mono as CompoundedIcon;
+Icons.Text = Text;
+Icons.Combine = Combine;
+Icons.Avatar = Avatar;
+Icons.colorPrimary = COLOR_PRIMARY;
+export default Icons;
diff --git a/src/Pollinations/style.ts b/src/Pollinations/style.ts
new file mode 100644
index 00000000..05bad406
--- /dev/null
+++ b/src/Pollinations/style.ts
@@ -0,0 +1,3 @@
+export const TEXT_MULTIPLE = 0.6;
+export const SPACE_MULTIPLE = 0.3;
+export const COLOR_PRIMARY = '#000';
diff --git a/src/components/Dashboard/Text.tsx b/src/components/Dashboard/Text.tsx
new file mode 100644
index 00000000..cc2ae4ca
--- /dev/null
+++ b/src/components/Dashboard/Text.tsx
@@ -0,0 +1,57 @@
+import * as Icons from '@lobehub/icons';
+import { StoryBook, useControls, useCreateStore } from '@lobehub/ui';
+import { createStyles } from 'antd-style';
+import { memo } from 'react';
+import { Flexbox } from 'react-layout-kit';
+
+import IconPreview from '@/components/IconPreview';
+
+const data = Object.values(Icons).filter((icon: any) => icon?.colorPrimary);
+
+const useStyles = createStyles(({ css, token }) => ({
+ item: css`
+ height: 96px;
+ padding: 16px;
+ background: ${token.colorBgContainer};
+ border: none;
+ `,
+}));
+
+const Dashboard = memo<{ className: string }>(({ className }) => {
+ const { styles } = useStyles();
+ const store = useCreateStore();
+
+ const { size, color } = useControls(
+ {
+ color: {
+ color: true,
+ value: '#fff',
+ },
+ size: {
+ max: 96,
+ min: 16,
+ step: 1,
+ value: 24,
+ },
+ },
+ { store },
+ );
+
+ return (
+
+
+ {data.map((Icon: any, index) => {
+ const IconRender = Icon.Text || Icon.Brand;
+ if (!IconRender) return null;
+ return (
+
+
+
+ );
+ })}
+
+
+ );
+});
+
+export default Dashboard;
diff --git a/src/components/Dashboard/index.tsx b/src/components/Dashboard/index.tsx
new file mode 100644
index 00000000..270715a5
--- /dev/null
+++ b/src/components/Dashboard/index.tsx
@@ -0,0 +1,57 @@
+import * as Icons from '@lobehub/icons';
+import { StoryBook, useControls, useCreateStore } from '@lobehub/ui';
+import { createStyles } from 'antd-style';
+import { memo } from 'react';
+import { Flexbox } from 'react-layout-kit';
+
+import IconPreview from '@/components/IconPreview';
+
+const data = Object.values(Icons).filter((icon: any) => icon?.colorPrimary);
+
+const useStyles = createStyles(({ css, token }) => ({
+ item: css`
+ width: 96px;
+ height: 96px;
+ background: ${token.colorBgContainer};
+ border: none;
+ `,
+}));
+
+const Dashboard = memo<{ className: string }>(({ className }) => {
+ const { styles } = useStyles();
+ const store = useCreateStore();
+
+ const { size, color, monochrome } = useControls(
+ {
+ color: {
+ color: true,
+ value: '#fff',
+ },
+ monochrome: false,
+ size: {
+ max: 96,
+ min: 16,
+ step: 1,
+ value: 48,
+ },
+ },
+ { store },
+ );
+
+ return (
+
+
+ {data.map((Icon: any, index) => {
+ const IconRender = !monochrome && Icon.Color ? Icon.Color : Icon;
+ return (
+
+
+
+ );
+ })}
+
+
+ );
+});
+
+export default Dashboard;
diff --git a/src/components/DownloadButton/index.tsx b/src/components/DownloadButton/index.tsx
new file mode 100644
index 00000000..8aad8e65
--- /dev/null
+++ b/src/components/DownloadButton/index.tsx
@@ -0,0 +1,29 @@
+import { ActionIcon, ActionIconSize, DivProps, TooltipProps } from '@lobehub/ui';
+import { Download } from 'lucide-react';
+import { memo } from 'react';
+
+export interface DownloadButtonProps extends DivProps {
+ className?: string;
+ onClick?: () => void;
+ placement?: TooltipProps['placement'];
+ size?: ActionIconSize;
+}
+
+const DownloadButton = memo(
+ ({ className, placement = 'right', size = 'site', onClick, ...rest }) => {
+ return (
+
+ );
+ },
+);
+
+export default DownloadButton;
diff --git a/src/components/IconPreview/index.tsx b/src/components/IconPreview/index.tsx
index e6646b6a..a82fe9c1 100644
--- a/src/components/IconPreview/index.tsx
+++ b/src/components/IconPreview/index.tsx
@@ -1,7 +1,8 @@
-import { CopyButton } from '@lobehub/ui';
import { createStyles } from 'antd-style';
import { ReactNode, memo, useRef } from 'react';
-import { Flexbox } from 'react-layout-kit';
+import { Flexbox, FlexboxProps } from 'react-layout-kit';
+
+import DownloadButton from '@/components/DownloadButton';
const useStyles = createStyles(({ css, token, cx }) => {
return {
@@ -49,17 +50,23 @@ const useStyles = createStyles(({ css, token, cx }) => {
};
});
-export interface IconPreviewProps {
+export interface IconPreviewProps extends FlexboxProps {
children: string | ReactNode;
}
-const IconPreview = memo(({ children }) => {
- const { styles } = useStyles();
+const IconPreview = memo(({ className, children, ...rest }) => {
+ const { cx, styles } = useStyles();
const ref = useRef(null);
const isString = typeof children === 'string';
return (
-
+
{isString ? (
) : (
@@ -67,9 +74,20 @@ const IconPreview = memo(({ children }) => {
{children}
)}
- {
+ const svgString = String(ref?.current?.querySelector('svg')?.outerHTML);
+ const blob = new Blob([svgString], { type: 'image/svg+xml;charset=utf-8' });
+ const url = URL.createObjectURL(blob);
+ const downloadLink = document.createElement('a');
+ downloadLink.href = url;
+ downloadLink.download = 'icon.svg';
+ document.body.append(downloadLink);
+ downloadLink.click();
+ downloadLink.remove();
+ URL.revokeObjectURL(url);
+ }}
/>
);
diff --git a/src/index.ts b/src/index.ts
index db99b456..52082df6 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -4,12 +4,21 @@ export { default as Aws, type CompoundedIcon as AwsProps } from './Aws';
export { default as Azure, type CompoundedIcon as AzureProps } from './Azure';
export { default as Baichuan, type CompoundedIcon as BaichuanProps } from './Baichuan';
export { default as Bedrock, type CompoundedIcon as BedrockProps } from './Bedrock';
+export { default as Bing, type CompoundedIcon as BingProps } from './Bing';
export { default as ChatGLM, type CompoundedIcon as ChatGLMProps } from './ChatGLM';
export { default as Cloudflare, type CompoundedIcon as CloudflareProps } from './Cloudflare';
export { default as Cohere, type CompoundedIcon as CohereProps } from './Cohere';
+export { default as Copilot, type CompoundedIcon as CopilotProps } from './Copilot';
export { default as Dalle, type CompoundedIcon as DalleProps } from './Dalle';
+export { default as DeepMind, type CompoundedIcon as DeepMindProps } from './DeepMind';
export { default as Fireworks, type CompoundedIcon as FireworksProps } from './Fireworks';
export { default as Gemini, type CompoundedIcon as GeminiProps } from './Gemini';
+export { default as Github, type CompoundedIcon as GithubProps } from './Github';
+export {
+ default as GithubCopilot,
+ type CompoundedIcon as GithubCopilotProps,
+} from './GithubCopilot';
+export { default as Google, type CompoundedIcon as GoogleProps } from './Google';
export { default as HuggingFace, type CompoundedIcon as HuggingFaceProps } from './HuggingFace';
export { default as Hunyuan, type CompoundedIcon as HunyuanProps } from './Hunyuan';
export { default as IconAvatar, type IconAvatarProps } from './IconAvatar';
@@ -18,9 +27,11 @@ export { default as Meta, type CompoundedIcon as MetaProps } from './Meta';
export { default as Midjourney, type CompoundedIcon as MidjourneyProps } from './Midjourney';
export { default as Minimax, type CompoundedIcon as MinimaxProps } from './Minimax';
export { default as Mistral, type CompoundedIcon as MistralProps } from './Mistral';
+export { default as Moonshot, type CompoundedIcon as MoonshotProps } from './Moonshot';
export { default as Ollama, type CompoundedIcon as OllamaProps } from './Ollama';
export { default as OpenAI, type CompoundedIcon as OpenAIProps } from './OpenAI';
export { default as Perplexity, type CompoundedIcon as PerplexityProps } from './Perplexity';
+export { default as Pollinations, type CompoundedIcon as PollinationsProps } from './Pollinations';
export { default as Qingyan, type CompoundedIcon as QingyanProps } from './Qingyan';
export { default as Replicate, type CompoundedIcon as ReplicateProps } from './Replicate';
export { default as Spark, type CompoundedIcon as SparkProps } from './Spark';