@lobehub/chat 1.15.34 → 1.15.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of @lobehub/chat might be problematic. Click here for more details.

package/CHANGELOG.md CHANGED
@@ -2,6 +2,31 @@
2
2
 
3
3
  # Changelog
4
4
 
5
+ ### [Version 1.15.35](https://github.com/lobehub/lobe-chat/compare/v1.15.34...v1.15.35)
6
+
7
+ <sup>Released on **2024-09-10**</sup>
8
+
9
+ #### 💄 Styles
10
+
11
+ - **misc**: Update CustomLogo.
12
+
13
+ <br/>
14
+
15
+ <details>
16
+ <summary><kbd>Improvements and Fixes</kbd></summary>
17
+
18
+ #### Styles
19
+
20
+ - **misc**: Update CustomLogo, closes [#3874](https://github.com/lobehub/lobe-chat/issues/3874) ([dd7c8df](https://github.com/lobehub/lobe-chat/commit/dd7c8df))
21
+
22
+ </details>
23
+
24
+ <div align="right">
25
+
26
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
27
+
28
+ </div>
29
+
5
30
  ### [Version 1.15.34](https://github.com/lobehub/lobe-chat/compare/v1.15.33...v1.15.34)
6
31
 
7
32
  <sup>Released on **2024-09-10**</sup>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/chat",
3
- "version": "1.15.34",
3
+ "version": "1.15.35",
4
4
  "description": "Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.",
5
5
  "keywords": [
6
6
  "framework",
@@ -1,72 +1,125 @@
1
- import { LobeChatProps } from '@lobehub/ui/brand';
2
- import Image from 'next/image';
3
- import { memo } from 'react';
4
- import { Flexbox } from 'react-layout-kit';
1
+ import type { DivProps, SvgProps } from '@lobehub/ui';
2
+ import type { LobeChatProps } from '@lobehub/ui/brand';
3
+ import { createStyles, useTheme } from 'antd-style';
4
+ import Image, { ImageProps } from 'next/image';
5
+ import { ReactNode, memo } from 'react';
6
+ import { Flexbox, FlexboxProps } from 'react-layout-kit';
5
7
 
6
8
  import { BRANDING_LOGO_URL, BRANDING_NAME } from '@/const/branding';
7
9
 
8
- interface ProductLogoProps {
9
- className?: string;
10
- extra?: string;
11
- size?: number;
12
- type?: LobeChatProps['type'];
13
- }
10
+ const useStyles = createStyles(({ css }) => {
11
+ return {
12
+ extraTitle: css`
13
+ font-weight: 300;
14
+ white-space: nowrap;
15
+ `,
16
+ };
17
+ });
14
18
 
15
- const CustomLogo = memo<ProductLogoProps>(({ size = 32, className, type }) => {
16
- const textNode = (
19
+ const CustomTextLogo = memo<FlexboxProps & { size: number }>(({ size, style, ...rest }) => {
20
+ return (
17
21
  <Flexbox
18
- className={className}
19
22
  height={size}
20
23
  style={{
21
24
  fontSize: size / 1.5,
22
- fontWeight: 'bold',
25
+ fontWeight: 'bolder',
23
26
  userSelect: 'none',
27
+ ...style,
24
28
  }}
29
+ {...rest}
25
30
  >
26
31
  {BRANDING_NAME}
27
32
  </Flexbox>
28
33
  );
34
+ });
35
+
36
+ const CustomImageLogo = memo<Omit<ImageProps, 'alt' | 'src'> & { size: number }>(
37
+ ({ size, ...rest }) => {
38
+ return (
39
+ <Image
40
+ alt={BRANDING_NAME}
41
+ height={size}
42
+ src={BRANDING_LOGO_URL}
43
+ unoptimized={true}
44
+ width={size}
45
+ {...rest}
46
+ />
47
+ );
48
+ },
49
+ );
29
50
 
30
- const imageNode = (
31
- <Image
32
- alt={BRANDING_NAME}
33
- className={className}
51
+ const Divider = memo<SvgProps & DivProps & { size?: number }>(
52
+ ({ size = '1em', style, ...rest }) => (
53
+ <svg
54
+ fill="none"
34
55
  height={size}
35
- src={BRANDING_LOGO_URL}
36
- unoptimized={true}
56
+ shapeRendering="geometricPrecision"
57
+ stroke="currentColor"
58
+ strokeLinecap="round"
59
+ strokeLinejoin="round"
60
+ style={{ flex: 'none', lineHeight: 1, ...style }}
61
+ viewBox="0 0 24 24"
37
62
  width={size}
38
- />
39
- );
63
+ {...rest}
64
+ >
65
+ <path d="M16.88 3.549L7.12 20.451" />
66
+ </svg>
67
+ ),
68
+ );
69
+
70
+ const CustomLogo = memo<LobeChatProps>(({ extra, size = 32, className, style, type, ...rest }) => {
71
+ const theme = useTheme();
72
+ const { styles } = useStyles();
73
+ let logoComponent: ReactNode;
74
+
40
75
  switch (type) {
76
+ case '3d':
77
+ case 'flat': {
78
+ logoComponent = <CustomImageLogo size={size} style={style} {...rest} />;
79
+ break;
80
+ }
81
+ case 'mono': {
82
+ logoComponent = (
83
+ <CustomImageLogo size={size} style={{ filter: 'grayscale(100%)', ...style }} {...rest} />
84
+ );
85
+ break;
86
+ }
41
87
  case 'text': {
42
- return textNode;
88
+ logoComponent = <CustomTextLogo size={size} style={style} {...rest} />;
89
+ break;
43
90
  }
44
-
45
91
  case 'combine': {
46
- return (
47
- <Flexbox align={'center'} gap={4} horizontal>
48
- {imageNode}
49
- {textNode}
50
- </Flexbox>
92
+ logoComponent = (
93
+ <>
94
+ <CustomImageLogo size={size} />
95
+ <CustomTextLogo size={size} style={{ marginLeft: Math.round(size / 4) }} />
96
+ </>
51
97
  );
52
- }
53
98
 
54
- default:
55
- case 'flat':
56
- case 'mono':
57
- case '3d': {
58
- return (
59
- <Image
60
- alt={BRANDING_NAME}
61
- className={className}
62
- height={size}
63
- src={BRANDING_LOGO_URL}
64
- unoptimized={true}
65
- width={size}
66
- />
67
- );
99
+ if (!extra)
100
+ logoComponent = (
101
+ <Flexbox align={'center'} flex={'none'} horizontal {...rest}>
102
+ {logoComponent}
103
+ </Flexbox>
104
+ );
105
+
106
+ break;
68
107
  }
69
108
  }
109
+
110
+ if (!extra) return logoComponent;
111
+
112
+ const extraSize = Math.round((size / 3) * 1.9);
113
+
114
+ return (
115
+ <Flexbox align={'center'} className={className} flex={'none'} horizontal {...rest}>
116
+ {logoComponent}
117
+ <Divider size={extraSize} style={{ color: theme.colorFill }} />
118
+ <div className={styles.extraTitle} style={{ fontSize: extraSize }}>
119
+ {extra}
120
+ </div>
121
+ </Flexbox>
122
+ );
70
123
  });
71
124
 
72
125
  export default CustomLogo;
@@ -5,17 +5,10 @@ import { isCustomBranding } from '@/const/version';
5
5
 
6
6
  import CustomLogo from './CustomLogo';
7
7
 
8
- interface ProductLogoProps {
9
- className?: string;
10
- extra?: string;
11
- size?: number;
12
- type?: LobeChatProps['type'];
13
- }
14
-
15
- export const ProductLogo = memo<ProductLogoProps>(({ size, className, extra, type }) => {
8
+ export const ProductLogo = memo<LobeChatProps>((props) => {
16
9
  if (isCustomBranding) {
17
- return <CustomLogo className={className} extra={extra} size={size} type={type} />;
10
+ return <CustomLogo {...props} />;
18
11
  }
19
12
 
20
- return <LobeChat className={className} extra={extra} size={size} type={type} />;
13
+ return <LobeChat {...props} />;
21
14
  });
@@ -1,3 +1,4 @@
1
+ import { ProviderIcon } from '@lobehub/icons';
1
2
  import { Button } from 'antd';
2
3
  import { memo, useMemo } from 'react';
3
4
  import { useTranslation } from 'react-i18next';
@@ -9,7 +10,6 @@ import { GlobalLLMProviderKey } from '@/types/user/settings';
9
10
 
10
11
  import BedrockForm from './Bedrock';
11
12
  import ProviderApiKeyForm from './ProviderApiKeyForm';
12
- import ProviderAvatar from './ProviderAvatar';
13
13
 
14
14
  interface APIKeyFormProps {
15
15
  id: string;
@@ -64,7 +64,7 @@ const APIKeyForm = memo<APIKeyFormProps>(({ id, provider }) => {
64
64
  ) : (
65
65
  <ProviderApiKeyForm
66
66
  apiKeyPlaceholder={apiKeyPlaceholder}
67
- avatar={<ProviderAvatar provider={provider as ModelProvider} />}
67
+ avatar={<ProviderIcon provider={provider} size={80} type={'avatar'} />}
68
68
  provider={provider as GlobalLLMProviderKey}
69
69
  showEndpoint={provider === ModelProvider.OpenAI}
70
70
  />
@@ -1,118 +0,0 @@
1
- import {
2
- Ai360,
3
- AiMass,
4
- Anthropic,
5
- Baichuan,
6
- DeepSeek,
7
- Google,
8
- Groq,
9
- Minimax,
10
- Mistral,
11
- Moonshot,
12
- Novita,
13
- OpenAI,
14
- OpenRouter,
15
- Perplexity,
16
- Stepfun,
17
- Together,
18
- Tongyi,
19
- Upstage,
20
- ZeroOne,
21
- Zhipu,
22
- } from '@lobehub/icons';
23
- import { useTheme } from 'antd-style';
24
- import { memo } from 'react';
25
-
26
- import { ModelProvider } from '@/libs/agent-runtime';
27
-
28
- interface ProviderAvatarProps {
29
- provider: ModelProvider;
30
- }
31
-
32
- const ProviderAvatar = memo<ProviderAvatarProps>(({ provider }) => {
33
- const theme = useTheme();
34
-
35
- switch (provider as ModelProvider) {
36
- case ModelProvider.Google: {
37
- return <Google.Color size={56} />;
38
- }
39
-
40
- case ModelProvider.ZhiPu: {
41
- return <Zhipu.Color size={64} />;
42
- }
43
-
44
- case ModelProvider.Minimax: {
45
- return <Minimax.Color size={56} />;
46
- }
47
-
48
- case ModelProvider.Mistral: {
49
- return <Mistral.Color size={56} />;
50
- }
51
-
52
- case ModelProvider.Moonshot: {
53
- return <Moonshot size={56} />;
54
- }
55
-
56
- case ModelProvider.Perplexity: {
57
- return <Perplexity.Color size={56} />;
58
- }
59
-
60
- case ModelProvider.Anthropic: {
61
- return <Anthropic color={Anthropic.colorPrimary} size={52} />;
62
- }
63
-
64
- case ModelProvider.Baichuan: {
65
- return <Baichuan color={Baichuan.colorPrimary} size={56} />;
66
- }
67
-
68
- case ModelProvider.DeepSeek: {
69
- return <DeepSeek color={DeepSeek.colorPrimary} size={56} />;
70
- }
71
-
72
- case ModelProvider.Groq: {
73
- return <Groq color={Groq.colorPrimary} size={56} />;
74
- }
75
-
76
- case ModelProvider.OpenRouter: {
77
- return <OpenRouter color={OpenRouter.colorPrimary} size={56} />;
78
- }
79
-
80
- case ModelProvider.Qwen: {
81
- return <Tongyi color={Tongyi.colorPrimary} size={56} />;
82
- }
83
-
84
- case ModelProvider.Stepfun: {
85
- return <Stepfun color={Stepfun.colorPrimary} size={56} />;
86
- }
87
-
88
- case ModelProvider.Taichu: {
89
- return <AiMass.Color size={56} />;
90
- }
91
-
92
- case ModelProvider.TogetherAI: {
93
- return <Together color={Together.colorPrimary} size={56} />;
94
- }
95
-
96
- case ModelProvider.ZeroOne: {
97
- return <ZeroOne color={ZeroOne.colorPrimary} size={56} />;
98
- }
99
- case ModelProvider.Novita: {
100
- return <Novita color={Novita.colorPrimary} size={56} />;
101
- }
102
-
103
- case ModelProvider.Ai360: {
104
- return <Ai360 color={Ai360.colorPrimary} size={56} />;
105
- }
106
-
107
- case ModelProvider.Upstage: {
108
- return <Upstage color={Upstage.colorPrimary} size={56} />;
109
- }
110
-
111
- default:
112
- case ModelProvider.OpenAI: {
113
- return <OpenAI color={theme.colorText} size={64} />;
114
- }
115
- }
116
- });
117
-
118
- export default ProviderAvatar;