@lobehub/lobehub 2.0.0-next.282 → 2.0.0-next.283
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.
- package/CHANGELOG.md +25 -0
- package/changelog/v1.json +9 -0
- package/package.json +2 -2
- package/src/app/[variants]/(main)/agent/features/Conversation/Header/HeaderActions/useMenu.tsx +4 -4
- package/src/app/[variants]/(main)/community/(detail)/model/features/Details/Overview/ProviderList/index.tsx +6 -3
- package/src/app/[variants]/(main)/community/(detail)/provider/features/Details/Overview/ModelList/index.tsx +6 -3
- package/src/features/Conversation/Messages/components/Extras/Usage/UsageDetail/ModelCard.tsx +1 -1
- package/src/features/PageEditor/Header/useMenu.tsx +1 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,31 @@
|
|
|
2
2
|
|
|
3
3
|
# Changelog
|
|
4
4
|
|
|
5
|
+
## [Version 2.0.0-next.283](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.282...v2.0.0-next.283)
|
|
6
|
+
|
|
7
|
+
<sup>Released on **2026-01-14**</sup>
|
|
8
|
+
|
|
9
|
+
#### 💄 Styles
|
|
10
|
+
|
|
11
|
+
- **misc**: Fix UI issues with tooltip wrapping and dropdown type.
|
|
12
|
+
|
|
13
|
+
<br/>
|
|
14
|
+
|
|
15
|
+
<details>
|
|
16
|
+
<summary><kbd>Improvements and Fixes</kbd></summary>
|
|
17
|
+
|
|
18
|
+
#### Styles
|
|
19
|
+
|
|
20
|
+
- **misc**: Fix UI issues with tooltip wrapping and dropdown type, closes [#11495](https://github.com/lobehub/lobe-chat/issues/11495) ([9d90eba](https://github.com/lobehub/lobe-chat/commit/9d90eba))
|
|
21
|
+
|
|
22
|
+
</details>
|
|
23
|
+
|
|
24
|
+
<div align="right">
|
|
25
|
+
|
|
26
|
+
[](#readme-top)
|
|
27
|
+
|
|
28
|
+
</div>
|
|
29
|
+
|
|
5
30
|
## [Version 2.0.0-next.282](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.281...v2.0.0-next.282)
|
|
6
31
|
|
|
7
32
|
<sup>Released on **2026-01-14**</sup>
|
package/changelog/v1.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lobehub/lobehub",
|
|
3
|
-
"version": "2.0.0-next.
|
|
3
|
+
"version": "2.0.0-next.283",
|
|
4
4
|
"description": "LobeHub - an open-source,comprehensive AI Agent 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",
|
|
@@ -206,7 +206,7 @@
|
|
|
206
206
|
"@lobehub/icons": "^4.0.2",
|
|
207
207
|
"@lobehub/market-sdk": "0.28.1",
|
|
208
208
|
"@lobehub/tts": "^4.0.2",
|
|
209
|
-
"@lobehub/ui": "^4.
|
|
209
|
+
"@lobehub/ui": "^4.19.0",
|
|
210
210
|
"@modelcontextprotocol/sdk": "^1.25.1",
|
|
211
211
|
"@neondatabase/serverless": "^1.0.2",
|
|
212
212
|
"@next/third-parties": "^16.1.1",
|
package/src/app/[variants]/(main)/agent/features/Conversation/Header/HeaderActions/useMenu.tsx
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import type { DropdownItem } from '@lobehub/ui/es/DropdownMenu/type';
|
|
4
4
|
import { useMemo } from 'react';
|
|
5
5
|
import { useTranslation } from 'react-i18next';
|
|
6
6
|
|
|
7
7
|
import { useGlobalStore } from '@/store/global';
|
|
8
8
|
import { systemStatusSelectors } from '@/store/global/selectors';
|
|
9
9
|
|
|
10
|
-
export const useMenu = (): { menuItems:
|
|
10
|
+
export const useMenu = (): { menuItems: DropdownItem[] } => {
|
|
11
11
|
const { t } = useTranslation('chat');
|
|
12
12
|
|
|
13
13
|
const [wideScreen, toggleWideScreen] = useGlobalStore((s) => [
|
|
@@ -15,14 +15,14 @@ export const useMenu = (): { menuItems: DropdownMenuCheckboxItem[] } => {
|
|
|
15
15
|
s.toggleWideScreen,
|
|
16
16
|
]);
|
|
17
17
|
|
|
18
|
-
const menuItems = useMemo<
|
|
18
|
+
const menuItems = useMemo<DropdownItem[]>(
|
|
19
19
|
() => [
|
|
20
20
|
{
|
|
21
21
|
checked: wideScreen,
|
|
22
22
|
key: 'full-width',
|
|
23
23
|
label: t('viewMode.fullWidth'),
|
|
24
24
|
onCheckedChange: toggleWideScreen,
|
|
25
|
-
type: '
|
|
25
|
+
type: 'switch',
|
|
26
26
|
},
|
|
27
27
|
],
|
|
28
28
|
[t, wideScreen, toggleWideScreen],
|
|
@@ -74,6 +74,7 @@ const ProviderList = memo(() => {
|
|
|
74
74
|
: record.model?.maxDimension
|
|
75
75
|
? formatTokenNumber(record.model.maxDimension)
|
|
76
76
|
: '--',
|
|
77
|
+
showSorterTooltip: false,
|
|
77
78
|
sorter: (a, b) => {
|
|
78
79
|
const aValue = a.model?.maxOutput || a.model?.maxDimension || 0;
|
|
79
80
|
const bValue = b.model?.maxOutput || b.model?.maxDimension || 0;
|
|
@@ -81,7 +82,7 @@ const ProviderList = memo(() => {
|
|
|
81
82
|
},
|
|
82
83
|
title: (
|
|
83
84
|
<Tooltip title={t('models.providerInfo.maxOutputTooltip')}>
|
|
84
|
-
{t('models.providerInfo.maxOutput')}
|
|
85
|
+
<span>{t('models.providerInfo.maxOutput')}</span>
|
|
85
86
|
</Tooltip>
|
|
86
87
|
),
|
|
87
88
|
width: 120,
|
|
@@ -95,6 +96,7 @@ const ProviderList = memo(() => {
|
|
|
95
96
|
? '$' + formatPriceByCurrency(inputRate, record.model.pricing?.currency)
|
|
96
97
|
: '--';
|
|
97
98
|
},
|
|
99
|
+
showSorterTooltip: false,
|
|
98
100
|
sorter: (a, b) => {
|
|
99
101
|
const aRate = getTextInputUnitRate(a.model?.pricing) || 0;
|
|
100
102
|
const bRate = getTextInputUnitRate(b.model?.pricing) || 0;
|
|
@@ -102,7 +104,7 @@ const ProviderList = memo(() => {
|
|
|
102
104
|
},
|
|
103
105
|
title: (
|
|
104
106
|
<Tooltip title={t('models.providerInfo.inputTooltip')}>
|
|
105
|
-
{t('models.providerInfo.input')}
|
|
107
|
+
<span>{t('models.providerInfo.input')}</span>
|
|
106
108
|
</Tooltip>
|
|
107
109
|
),
|
|
108
110
|
width: 100,
|
|
@@ -116,6 +118,7 @@ const ProviderList = memo(() => {
|
|
|
116
118
|
? '$' + formatPriceByCurrency(outputRate, record.model.pricing?.currency)
|
|
117
119
|
: '--';
|
|
118
120
|
},
|
|
121
|
+
showSorterTooltip: false,
|
|
119
122
|
sorter: (a, b) => {
|
|
120
123
|
const aRate = getTextOutputUnitRate(a.model?.pricing) || 0;
|
|
121
124
|
const bRate = getTextOutputUnitRate(b.model?.pricing) || 0;
|
|
@@ -123,7 +126,7 @@ const ProviderList = memo(() => {
|
|
|
123
126
|
},
|
|
124
127
|
title: (
|
|
125
128
|
<Tooltip title={t('models.providerInfo.outputTooltip')}>
|
|
126
|
-
{t('models.providerInfo.output')}
|
|
129
|
+
<span>{t('models.providerInfo.output')}</span>
|
|
127
130
|
</Tooltip>
|
|
128
131
|
),
|
|
129
132
|
width: 100,
|
|
@@ -72,10 +72,11 @@ const ModelList = memo(() => {
|
|
|
72
72
|
key: 'maxOutput',
|
|
73
73
|
render: (_, record) =>
|
|
74
74
|
record.maxOutput ? formatTokenNumber(record.maxOutput) : '--',
|
|
75
|
+
showSorterTooltip: false,
|
|
75
76
|
sorter: (a, b) => (a.maxOutput || 0) - (b.maxOutput || 0),
|
|
76
77
|
title: (
|
|
77
78
|
<Tooltip title={t('models.providerInfo.maxOutputTooltip')}>
|
|
78
|
-
{t('models.providerInfo.maxOutput')}
|
|
79
|
+
<span>{t('models.providerInfo.maxOutput')}</span>
|
|
79
80
|
</Tooltip>
|
|
80
81
|
),
|
|
81
82
|
width: 120,
|
|
@@ -89,6 +90,7 @@ const ModelList = memo(() => {
|
|
|
89
90
|
? '$' + formatPriceByCurrency(inputRate, record.pricing?.currency)
|
|
90
91
|
: '--';
|
|
91
92
|
},
|
|
93
|
+
showSorterTooltip: false,
|
|
92
94
|
sorter: (a, b) => {
|
|
93
95
|
const aRate = getTextInputUnitRate(a.pricing) || 0;
|
|
94
96
|
const bRate = getTextInputUnitRate(b.pricing) || 0;
|
|
@@ -96,7 +98,7 @@ const ModelList = memo(() => {
|
|
|
96
98
|
},
|
|
97
99
|
title: (
|
|
98
100
|
<Tooltip title={t('models.providerInfo.inputTooltip')}>
|
|
99
|
-
{t('models.providerInfo.input')}
|
|
101
|
+
<span>{t('models.providerInfo.input')}</span>
|
|
100
102
|
</Tooltip>
|
|
101
103
|
),
|
|
102
104
|
width: 100,
|
|
@@ -110,6 +112,7 @@ const ModelList = memo(() => {
|
|
|
110
112
|
? '$' + formatPriceByCurrency(outputRate, record.pricing?.currency)
|
|
111
113
|
: '--';
|
|
112
114
|
},
|
|
115
|
+
showSorterTooltip: false,
|
|
113
116
|
sorter: (a, b) => {
|
|
114
117
|
const aRate = getTextOutputUnitRate(a.pricing) || 0;
|
|
115
118
|
const bRate = getTextOutputUnitRate(b.pricing) || 0;
|
|
@@ -117,7 +120,7 @@ const ModelList = memo(() => {
|
|
|
117
120
|
},
|
|
118
121
|
title: (
|
|
119
122
|
<Tooltip title={t('models.providerInfo.outputTooltip')}>
|
|
120
|
-
{t('models.providerInfo.output')}
|
|
123
|
+
<span>{t('models.providerInfo.output')}</span>
|
|
121
124
|
</Tooltip>
|
|
122
125
|
),
|
|
123
126
|
width: 100,
|
package/src/features/Conversation/Messages/components/Extras/Usage/UsageDetail/ModelCard.tsx
CHANGED
|
@@ -70,7 +70,7 @@ const ModelCard = memo<ModelCardProps>(({ pricing, id, provider, displayName })
|
|
|
70
70
|
{
|
|
71
71
|
label: (
|
|
72
72
|
<Tooltip title={t('messages.modelCard.creditTooltip')}>
|
|
73
|
-
{t('messages.modelCard.credit')}
|
|
73
|
+
<span>{t('messages.modelCard.credit')}</span>
|
|
74
74
|
</Tooltip>
|
|
75
75
|
),
|
|
76
76
|
value: 'credit',
|
|
@@ -84,8 +84,7 @@ export const useMenu = (): { menuItems: any[] } => {
|
|
|
84
84
|
key: 'full-width',
|
|
85
85
|
label: t('viewMode.fullWidth', { ns: 'chat' }),
|
|
86
86
|
onCheckedChange: toggleWideScreen,
|
|
87
|
-
|
|
88
|
-
type: 'checkbox' as const,
|
|
87
|
+
type: 'switch' as const,
|
|
89
88
|
},
|
|
90
89
|
{
|
|
91
90
|
type: 'divider' as const,
|