@lobehub/ui 1.103.0 → 1.103.2
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/es/ActionIconGroup/index.d.ts +1 -1
- package/es/Avatar/index.js +3 -1
- package/es/ChatItem/components/ErrorContent.d.ts +1 -1
- package/es/ChatItem/components/ErrorContent.js +2 -2
- package/es/ChatItem/components/MessageContent.js +4 -0
- package/es/ChatItem/index.js +3 -3
- package/es/ChatItem/type.d.ts +1 -1
- package/es/ChatList/ActionsBar.d.ts +2 -2
- package/es/ChatList/ActionsBar.js +12 -47
- package/es/ChatList/HistoryDivider.d.ts +1 -3
- package/es/ChatList/HistoryDivider.js +1 -1
- package/es/ChatList/Item.d.ts +27 -12
- package/es/ChatList/Item.js +62 -25
- package/es/ChatList/index.d.ts +1 -1
- package/es/ChatList/index.js +14 -27
- package/es/EditableMessageList/messageReducer.d.ts +3 -3
- package/es/EditableMessageList/messageReducer.js +2 -0
- package/es/MessageModal/index.js +6 -0
- package/es/Modal/index.js +4 -2
- package/es/hooks/useChatListActionsBar.d.ts +17 -0
- package/es/hooks/useChatListActionsBar.js +28 -0
- package/es/index.d.ts +2 -1
- package/es/index.js +1 -0
- package/es/types/chatMessage.d.ts +26 -12
- package/es/types/error.d.ts +20 -0
- package/es/types/error.js +25 -0
- package/es/types/llm.d.ts +38 -13
- package/es/types/llm.js +12 -1
- package/es/types/meta.d.ts +1 -1
- package/package.json +3 -2
- package/es/ChatList/Group.d.ts +0 -8
- package/es/ChatList/Group.js +0 -31
- package/es/ChatList/GroupNav.d.ts +0 -9
- package/es/ChatList/GroupNav.js +0 -54
package/es/Avatar/index.js
CHANGED
|
@@ -24,6 +24,7 @@ var Avatar = /*#__PURE__*/memo(function (_ref) {
|
|
|
24
24
|
var isImage = Boolean(avatar && ['/', 'http', 'data:'].some(function (index) {
|
|
25
25
|
return avatar.startsWith(index);
|
|
26
26
|
}));
|
|
27
|
+
var isBase64 = Boolean(avatar === null || avatar === void 0 ? void 0 : avatar.startsWith('data'));
|
|
27
28
|
var emoji = useMemo(function () {
|
|
28
29
|
return avatar && !isImage && getEmoji(avatar);
|
|
29
30
|
}, [avatar]);
|
|
@@ -39,7 +40,8 @@ var Avatar = /*#__PURE__*/memo(function (_ref) {
|
|
|
39
40
|
className: cx(styles.avatar, className),
|
|
40
41
|
shape: shape,
|
|
41
42
|
size: size,
|
|
42
|
-
|
|
43
|
+
src: isBase64 ? avatar : undefined,
|
|
44
|
+
srcSet: isBase64 ? undefined : avatar
|
|
43
45
|
}, props)) : /*#__PURE__*/_jsx(AntAvatar, _objectSpread(_objectSpread({
|
|
44
46
|
className: cx(styles.avatar, className),
|
|
45
47
|
shape: shape,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { ChatItemProps } from "..";
|
|
3
3
|
export interface ErrorContentProps {
|
|
4
|
-
ErrorMessage?: ChatItemProps['ErrorMessage'];
|
|
5
4
|
error?: ChatItemProps['error'];
|
|
5
|
+
message?: ChatItemProps['errorMessage'];
|
|
6
6
|
placement?: ChatItemProps['placement'];
|
|
7
7
|
}
|
|
8
8
|
declare const ErrorContent: import("react").NamedExoticComponent<ErrorContentProps>;
|
|
@@ -8,7 +8,7 @@ import { useStyles } from "../style";
|
|
|
8
8
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
9
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
10
|
var ErrorContent = /*#__PURE__*/memo(function (_ref) {
|
|
11
|
-
var
|
|
11
|
+
var message = _ref.message,
|
|
12
12
|
error = _ref.error,
|
|
13
13
|
placement = _ref.placement;
|
|
14
14
|
var _useStyles = useStyles({
|
|
@@ -21,7 +21,7 @@ var ErrorContent = /*#__PURE__*/memo(function (_ref) {
|
|
|
21
21
|
className: styles.alert,
|
|
22
22
|
showIcon: true,
|
|
23
23
|
type: 'error'
|
|
24
|
-
}, error)),
|
|
24
|
+
}, error)), message]
|
|
25
25
|
});
|
|
26
26
|
});
|
|
27
27
|
export default ErrorContent;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { useResponsive } from 'antd-style';
|
|
1
2
|
import { memo } from 'react';
|
|
2
3
|
import { Flexbox } from 'react-layout-kit';
|
|
3
4
|
import EditableMessage from "../../EditableMessage";
|
|
@@ -23,6 +24,8 @@ var Loading = /*#__PURE__*/memo(function (_ref) {
|
|
|
23
24
|
}),
|
|
24
25
|
cx = _useStyles.cx,
|
|
25
26
|
styles = _useStyles.styles;
|
|
27
|
+
var _useResponsive = useResponsive(),
|
|
28
|
+
mobile = _useResponsive.mobile;
|
|
26
29
|
var content = /*#__PURE__*/_jsx(EditableMessage, {
|
|
27
30
|
classNames: {
|
|
28
31
|
input: styles.editingInput
|
|
@@ -32,6 +35,7 @@ var Loading = /*#__PURE__*/memo(function (_ref) {
|
|
|
32
35
|
fullFeaturedCodeBlock: true,
|
|
33
36
|
onChange: onChange,
|
|
34
37
|
onEditingChange: onEditingChange,
|
|
38
|
+
openModal: mobile ? editing : undefined,
|
|
35
39
|
text: text,
|
|
36
40
|
value: String(message || '...')
|
|
37
41
|
});
|
package/es/ChatItem/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
2
|
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
3
|
-
var _excluded = ["avatarAddon", "onAvatarClick", "actions", "className", "primary", "loading", "message", "placement", "type", "avatar", "error", "showTitle", "time", "editing", "onChange", "onEditingChange", "messageExtra", "renderMessage", "text", "
|
|
3
|
+
var _excluded = ["avatarAddon", "onAvatarClick", "actions", "className", "primary", "loading", "message", "placement", "type", "avatar", "error", "showTitle", "time", "editing", "onChange", "onEditingChange", "messageExtra", "renderMessage", "text", "errorMessage"];
|
|
4
4
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
5
5
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
6
6
|
import { useResponsive } from 'antd-style';
|
|
@@ -38,7 +38,7 @@ var ChatItem = /*#__PURE__*/memo(function (_ref) {
|
|
|
38
38
|
messageExtra = _ref.messageExtra,
|
|
39
39
|
renderMessage = _ref.renderMessage,
|
|
40
40
|
text = _ref.text,
|
|
41
|
-
|
|
41
|
+
errorMessage = _ref.errorMessage,
|
|
42
42
|
props = _objectWithoutProperties(_ref, _excluded);
|
|
43
43
|
var _useResponsive = useResponsive(),
|
|
44
44
|
mobile = _useResponsive.mobile;
|
|
@@ -78,8 +78,8 @@ var ChatItem = /*#__PURE__*/memo(function (_ref) {
|
|
|
78
78
|
direction: type === 'block' ? placement === 'left' ? 'horizontal' : 'horizontal-reverse' : 'vertical',
|
|
79
79
|
gap: 8,
|
|
80
80
|
children: [error ? /*#__PURE__*/_jsx(ErrorContent, {
|
|
81
|
-
ErrorMessage: ErrorMessage,
|
|
82
81
|
error: error,
|
|
82
|
+
message: errorMessage,
|
|
83
83
|
placement: placement
|
|
84
84
|
}) : /*#__PURE__*/_jsx(MessageContent, {
|
|
85
85
|
editing: editing,
|
package/es/ChatItem/type.d.ts
CHANGED
|
@@ -3,7 +3,6 @@ import { ReactNode } from 'react';
|
|
|
3
3
|
import { EditableMessageProps } from "../EditableMessage";
|
|
4
4
|
import { MetaData } from "../types";
|
|
5
5
|
export interface ChatItemProps {
|
|
6
|
-
ErrorMessage?: ReactNode;
|
|
7
6
|
/**
|
|
8
7
|
* @description Actions to be displayed in the chat item
|
|
9
8
|
*/
|
|
@@ -25,6 +24,7 @@ export interface ChatItemProps {
|
|
|
25
24
|
* @description Props for Error render
|
|
26
25
|
*/
|
|
27
26
|
error?: AlertProps;
|
|
27
|
+
errorMessage?: ReactNode;
|
|
28
28
|
/**
|
|
29
29
|
* @description Whether the chat item is in loading state
|
|
30
30
|
*/
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { type ActionIconGroupProps } from "../ActionIconGroup";
|
|
3
|
+
import { ChatMessage } from "../types";
|
|
3
4
|
export interface ActionsBarProps extends ActionIconGroupProps {
|
|
4
|
-
primary?: boolean;
|
|
5
5
|
text?: {
|
|
6
6
|
copy?: string;
|
|
7
7
|
delete?: string;
|
|
@@ -9,5 +9,5 @@ export interface ActionsBarProps extends ActionIconGroupProps {
|
|
|
9
9
|
regenerate?: string;
|
|
10
10
|
};
|
|
11
11
|
}
|
|
12
|
-
declare const ActionsBar: import("react").NamedExoticComponent<ActionsBarProps>;
|
|
12
|
+
declare const ActionsBar: import("react").NamedExoticComponent<ActionsBarProps & ChatMessage>;
|
|
13
13
|
export default ActionsBar;
|
|
@@ -1,60 +1,25 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
-
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
3
2
|
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
4
|
-
var _excluded = ["
|
|
3
|
+
var _excluded = ["role", "text"];
|
|
5
4
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
6
5
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
7
|
-
import {
|
|
8
|
-
import { memo, useMemo } from 'react';
|
|
6
|
+
import { memo } from 'react';
|
|
9
7
|
import ActionIconGroup from "../ActionIconGroup";
|
|
8
|
+
import { useChatListActionsBar } from "../hooks/useChatListActionsBar";
|
|
10
9
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
10
|
var ActionsBar = /*#__PURE__*/memo(function (_ref) {
|
|
12
|
-
var
|
|
11
|
+
var role = _ref.role,
|
|
13
12
|
text = _ref.text,
|
|
14
|
-
_ref$items = _ref.items,
|
|
15
|
-
items = _ref$items === void 0 ? [] : _ref$items,
|
|
16
|
-
_ref$dropdownMenu = _ref.dropdownMenu,
|
|
17
|
-
dropdownMenu = _ref$dropdownMenu === void 0 ? [] : _ref$dropdownMenu,
|
|
18
13
|
props = _objectWithoutProperties(_ref, _excluded);
|
|
19
|
-
var
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
icon: Edit,
|
|
26
|
-
key: 'edit',
|
|
27
|
-
label: (text === null || text === void 0 ? void 0 : text.edit) || 'Edit'
|
|
28
|
-
} : {
|
|
29
|
-
icon: Copy,
|
|
30
|
-
key: 'copy',
|
|
31
|
-
label: (text === null || text === void 0 ? void 0 : text.copy) || 'Copy'
|
|
32
|
-
}].concat(_toConsumableArray(items)).filter(Boolean);
|
|
33
|
-
}, [primary, items]);
|
|
34
|
-
var groupDropdownMenu = useMemo(function () {
|
|
35
|
-
return [].concat(_toConsumableArray(dropdownMenu), [{
|
|
36
|
-
icon: Edit,
|
|
37
|
-
key: 'edit',
|
|
38
|
-
label: (text === null || text === void 0 ? void 0 : text.edit) || 'Edit'
|
|
39
|
-
}, {
|
|
40
|
-
icon: Copy,
|
|
41
|
-
key: 'copy',
|
|
42
|
-
label: (text === null || text === void 0 ? void 0 : text.copy) || 'Copy'
|
|
43
|
-
}, {
|
|
44
|
-
icon: RotateCw,
|
|
45
|
-
key: 'regenerate',
|
|
46
|
-
label: (text === null || text === void 0 ? void 0 : text.regenerate) || 'Regenerate'
|
|
47
|
-
}, {
|
|
48
|
-
type: 'divider'
|
|
49
|
-
}, {
|
|
50
|
-
icon: Trash,
|
|
51
|
-
key: 'delete',
|
|
52
|
-
label: (text === null || text === void 0 ? void 0 : text.delete) || 'Delete'
|
|
53
|
-
}]);
|
|
54
|
-
}, [primary, dropdownMenu]);
|
|
14
|
+
var _useChatListActionsBa = useChatListActionsBar(text),
|
|
15
|
+
regenerate = _useChatListActionsBa.regenerate,
|
|
16
|
+
edit = _useChatListActionsBa.edit,
|
|
17
|
+
copy = _useChatListActionsBa.copy,
|
|
18
|
+
divider = _useChatListActionsBa.divider,
|
|
19
|
+
del = _useChatListActionsBa.del;
|
|
55
20
|
return /*#__PURE__*/_jsx(ActionIconGroup, _objectSpread({
|
|
56
|
-
dropdownMenu:
|
|
57
|
-
items:
|
|
21
|
+
dropdownMenu: [edit, copy, regenerate, divider, del],
|
|
22
|
+
items: [regenerate, role === 'user' ? edit : copy],
|
|
58
23
|
type: "ghost"
|
|
59
24
|
}, props));
|
|
60
25
|
});
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
interface HistoryDividerProps {
|
|
3
3
|
enable?: boolean;
|
|
4
|
-
text?:
|
|
5
|
-
history?: string;
|
|
6
|
-
};
|
|
4
|
+
text?: string;
|
|
7
5
|
}
|
|
8
6
|
declare const HistoryDivider: import("react").NamedExoticComponent<HistoryDividerProps>;
|
|
9
7
|
export default HistoryDivider;
|
|
@@ -17,7 +17,7 @@ var HistoryDivider = /*#__PURE__*/memo(function (_ref) {
|
|
|
17
17
|
icon: /*#__PURE__*/_jsx(Icon, {
|
|
18
18
|
icon: Timer
|
|
19
19
|
}),
|
|
20
|
-
children:
|
|
20
|
+
children: text || 'History Message'
|
|
21
21
|
})
|
|
22
22
|
})
|
|
23
23
|
});
|
package/es/ChatList/Item.d.ts
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FC } from 'react';
|
|
2
2
|
import { type ChatItemProps } from "../ChatItem";
|
|
3
|
-
import { ChatMessage
|
|
3
|
+
import { ChatMessage } from "../types/chatMessage";
|
|
4
|
+
import { LLMRoleType } from "../types/llm";
|
|
4
5
|
import { type ActionsBarProps } from './ActionsBar';
|
|
5
6
|
export type OnMessageChange = (id: string, content: string) => void;
|
|
6
|
-
export type MessageExtra = FC<ChatMessage>;
|
|
7
7
|
export type OnActionClick = (actionKey: string, messageId: string) => void;
|
|
8
|
-
export type
|
|
9
|
-
export type
|
|
8
|
+
export type RenderRole = LLMRoleType | 'default' | string;
|
|
9
|
+
export type RenderItem = FC<{
|
|
10
|
+
key: string;
|
|
11
|
+
} & ChatMessage & ListItemProps>;
|
|
12
|
+
export type RenderMessage = FC<ChatMessage>;
|
|
13
|
+
export type RenderMessageExtra = FC<ChatMessage>;
|
|
14
|
+
export type RenderErrorMessage = FC<ChatMessage>;
|
|
15
|
+
export type RenderAction = FC<ActionsBarProps & ChatMessage>;
|
|
10
16
|
export interface ListItemProps {
|
|
11
17
|
groupNav?: ChatItemProps['avatarAddon'];
|
|
12
18
|
loading?: boolean;
|
|
@@ -18,23 +24,30 @@ export interface ListItemProps {
|
|
|
18
24
|
* @description 消息变化的回调函数
|
|
19
25
|
*/
|
|
20
26
|
onMessageChange?: OnMessageChange;
|
|
27
|
+
renderActions?: {
|
|
28
|
+
[role: RenderRole]: RenderAction;
|
|
29
|
+
};
|
|
21
30
|
/**
|
|
22
31
|
* @description 渲染错误消息的函数
|
|
23
32
|
*/
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
33
|
+
renderErrorMessages?: {
|
|
34
|
+
[errorType: 'default' | string]: RenderErrorMessage;
|
|
35
|
+
};
|
|
36
|
+
renderItems?: {
|
|
37
|
+
[role: RenderRole]: RenderItem;
|
|
29
38
|
};
|
|
30
39
|
/**
|
|
31
40
|
* @description 渲染消息的函数
|
|
32
41
|
*/
|
|
33
|
-
|
|
42
|
+
renderMessages?: {
|
|
43
|
+
[role: RenderRole]: RenderMessage;
|
|
44
|
+
};
|
|
34
45
|
/**
|
|
35
46
|
* @description 渲染消息额外内容的函数
|
|
36
47
|
*/
|
|
37
|
-
|
|
48
|
+
renderMessagesExtra?: {
|
|
49
|
+
[role: RenderRole]: RenderMessageExtra;
|
|
50
|
+
};
|
|
38
51
|
/**
|
|
39
52
|
* @description 是否显示聊天项的名称
|
|
40
53
|
* @default false
|
|
@@ -46,6 +59,8 @@ export interface ListItemProps {
|
|
|
46
59
|
text?: ChatItemProps['text'] & ActionsBarProps['text'] & {
|
|
47
60
|
copySuccess?: string;
|
|
48
61
|
history?: string;
|
|
62
|
+
} & {
|
|
63
|
+
[key: string]: string;
|
|
49
64
|
};
|
|
50
65
|
/**
|
|
51
66
|
* @description 聊天列表的类型
|
package/es/ChatList/Item.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
3
3
|
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
4
|
-
var _excluded = ["
|
|
4
|
+
var _excluded = ["renderMessagesExtra", "showTitle", "onActionClick", "onMessageChange", "type", "text", "renderMessages", "renderErrorMessages", "renderActions", "loading", "groupNav", "renderItems"];
|
|
5
5
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
6
6
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
7
7
|
import { App } from 'antd';
|
|
@@ -11,36 +11,64 @@ import ChatItem from "../ChatItem";
|
|
|
11
11
|
import ActionsBar from "./ActionsBar";
|
|
12
12
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
13
|
var Item = /*#__PURE__*/memo(function (props) {
|
|
14
|
-
var
|
|
15
|
-
var MessageExtra = props.renderMessageExtra,
|
|
14
|
+
var renderMessagesExtra = props.renderMessagesExtra,
|
|
16
15
|
showTitle = props.showTitle,
|
|
17
16
|
_onActionClick = props.onActionClick,
|
|
18
17
|
onMessageChange = props.onMessageChange,
|
|
19
18
|
type = props.type,
|
|
20
19
|
text = props.text,
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
renderMessages = props.renderMessages,
|
|
21
|
+
renderErrorMessages = props.renderErrorMessages,
|
|
22
|
+
renderActions = props.renderActions,
|
|
23
23
|
loading = props.loading,
|
|
24
24
|
groupNav = props.groupNav,
|
|
25
|
-
|
|
25
|
+
renderItems = props.renderItems,
|
|
26
26
|
item = _objectWithoutProperties(props, _excluded);
|
|
27
|
-
var renderMessageExtra = MessageExtra ? /*#__PURE__*/_jsx(MessageExtra, _objectSpread({}, item)) : undefined;
|
|
28
27
|
var _useState = useState(false),
|
|
29
28
|
_useState2 = _slicedToArray(_useState, 2),
|
|
30
29
|
editing = _useState2[0],
|
|
31
30
|
setEditing = _useState2[1];
|
|
32
31
|
var _App$useApp = App.useApp(),
|
|
33
32
|
message = _App$useApp.message;
|
|
34
|
-
var innerRenderMessage = useCallback(function (content) {
|
|
35
|
-
return renderMessage === null || renderMessage === void 0 ? void 0 : renderMessage(content, item);
|
|
36
|
-
}, [renderMessage, item]);
|
|
37
33
|
var RenderItem = useMemo(function () {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
34
|
+
if (!renderItems || !(item !== null && item !== void 0 && item.role)) return;
|
|
35
|
+
if (renderItems !== null && renderItems !== void 0 && renderItems[item.role]) return renderItems[item.role];
|
|
36
|
+
if (renderItems !== null && renderItems !== void 0 && renderItems['default']) return renderItems['default'];
|
|
37
|
+
}, [renderItems, item]);
|
|
38
|
+
var innerRenderMessage = useCallback(function (content) {
|
|
39
|
+
if (!renderMessages || !(item !== null && item !== void 0 && item.role)) return;
|
|
40
|
+
var RenderFunction;
|
|
41
|
+
if (renderMessages !== null && renderMessages !== void 0 && renderMessages[item.role]) RenderFunction = renderMessages[item.role];
|
|
42
|
+
if (renderMessages !== null && renderMessages !== void 0 && renderMessages['default']) RenderFunction = renderMessages['default'];
|
|
43
|
+
if (!RenderFunction) return;
|
|
44
|
+
return /*#__PURE__*/_jsx(RenderFunction, _objectSpread(_objectSpread({}, item), {}, {
|
|
45
|
+
content: content
|
|
46
|
+
}));
|
|
47
|
+
}, [renderMessages, item]);
|
|
48
|
+
var MessageExtra = useCallback(function () {
|
|
49
|
+
if (!renderMessagesExtra || !(item !== null && item !== void 0 && item.role)) return;
|
|
50
|
+
var RenderFunction;
|
|
51
|
+
if (renderMessagesExtra !== null && renderMessagesExtra !== void 0 && renderMessagesExtra[item.role]) RenderFunction = renderMessagesExtra[item.role];
|
|
52
|
+
if (renderMessagesExtra !== null && renderMessagesExtra !== void 0 && renderMessagesExtra['default']) RenderFunction = renderMessagesExtra['default'];
|
|
53
|
+
if (!RenderFunction) return;
|
|
54
|
+
return /*#__PURE__*/_jsx(RenderFunction, _objectSpread({}, item));
|
|
55
|
+
}, [renderMessagesExtra, item]);
|
|
56
|
+
var ErrorMessage = useCallback(function () {
|
|
57
|
+
var _item$error;
|
|
58
|
+
if (!renderErrorMessages || !(item !== null && item !== void 0 && (_item$error = item.error) !== null && _item$error !== void 0 && _item$error.type)) return;
|
|
59
|
+
var RenderFunction;
|
|
60
|
+
if (renderErrorMessages !== null && renderErrorMessages !== void 0 && renderErrorMessages[item.error.type]) RenderFunction = renderErrorMessages[item.error.type];
|
|
61
|
+
if (renderErrorMessages !== null && renderErrorMessages !== void 0 && renderErrorMessages['default']) RenderFunction = renderErrorMessages['default'];
|
|
62
|
+
if (!RenderFunction) return;
|
|
63
|
+
return /*#__PURE__*/_jsx(RenderFunction, _objectSpread({}, item));
|
|
64
|
+
}, [renderErrorMessages, item.error]);
|
|
65
|
+
var Actions = useCallback(function () {
|
|
66
|
+
if (!renderActions || !(item !== null && item !== void 0 && item.role)) return;
|
|
67
|
+
var RenderFunction;
|
|
68
|
+
if (renderActions !== null && renderActions !== void 0 && renderActions[item.role]) RenderFunction = renderActions[item.role];
|
|
69
|
+
if (renderActions !== null && renderActions !== void 0 && renderActions['default']) RenderFunction = renderActions['default'];
|
|
70
|
+
if (!RenderFunction) RenderFunction = ActionsBar;
|
|
71
|
+
return /*#__PURE__*/_jsx(RenderFunction, _objectSpread(_objectSpread({}, item), {}, {
|
|
44
72
|
onActionClick: function onActionClick(actionKey) {
|
|
45
73
|
switch (actionKey) {
|
|
46
74
|
case 'copy':
|
|
@@ -57,25 +85,34 @@ var Item = /*#__PURE__*/memo(function (props) {
|
|
|
57
85
|
}
|
|
58
86
|
_onActionClick === null || _onActionClick === void 0 ? void 0 : _onActionClick(actionKey, item.id);
|
|
59
87
|
},
|
|
60
|
-
primary: item.role === 'user',
|
|
61
88
|
text: text
|
|
62
|
-
})
|
|
89
|
+
}));
|
|
90
|
+
}, [renderActions, item, text, _onActionClick]);
|
|
91
|
+
var error = useMemo(function () {
|
|
92
|
+
var _item$error2;
|
|
93
|
+
if (!item.error) return;
|
|
94
|
+
return {
|
|
95
|
+
message: (_item$error2 = item.error) === null || _item$error2 === void 0 ? void 0 : _item$error2.message
|
|
96
|
+
};
|
|
97
|
+
}, [item.error]);
|
|
98
|
+
if (RenderItem) return /*#__PURE__*/_jsx(RenderItem, _objectSpread({}, props), item.id);
|
|
99
|
+
return /*#__PURE__*/_jsx(ChatItem, {
|
|
100
|
+
actions: /*#__PURE__*/_jsx(Actions, {}),
|
|
63
101
|
avatar: item.meta,
|
|
64
102
|
avatarAddon: groupNav,
|
|
65
103
|
editing: editing,
|
|
66
|
-
error:
|
|
67
|
-
|
|
68
|
-
} : undefined,
|
|
104
|
+
error: error,
|
|
105
|
+
errorMessage: /*#__PURE__*/_jsx(ErrorMessage, {}),
|
|
69
106
|
loading: loading,
|
|
70
107
|
message: item.content,
|
|
71
|
-
messageExtra:
|
|
108
|
+
messageExtra: /*#__PURE__*/_jsx(MessageExtra, {}),
|
|
72
109
|
onChange: function onChange(value) {
|
|
73
|
-
onMessageChange === null || onMessageChange === void 0 ? void 0 : onMessageChange(item.id, value);
|
|
110
|
+
return onMessageChange === null || onMessageChange === void 0 ? void 0 : onMessageChange(item.id, value);
|
|
74
111
|
},
|
|
75
112
|
onEditingChange: setEditing,
|
|
76
113
|
placement: type === 'chat' ? item.role === 'user' ? 'right' : 'left' : 'left',
|
|
77
114
|
primary: item.role === 'user',
|
|
78
|
-
renderMessage:
|
|
115
|
+
renderMessage: innerRenderMessage,
|
|
79
116
|
showTitle: showTitle,
|
|
80
117
|
text: text,
|
|
81
118
|
time: item.updateAt || item.createAt,
|
package/es/ChatList/index.d.ts
CHANGED
|
@@ -10,6 +10,6 @@ export interface ChatListProps extends DivProps, ListItemProps {
|
|
|
10
10
|
historyCount?: number;
|
|
11
11
|
loadingId?: string;
|
|
12
12
|
}
|
|
13
|
-
export type { OnActionClick, OnMessageChange, RenderErrorMessage, RenderMessage } from './Item';
|
|
13
|
+
export type { OnActionClick, OnMessageChange, RenderAction, RenderErrorMessage, RenderItem, RenderMessage, RenderMessageExtra, } from './Item';
|
|
14
14
|
declare const ChatList: import("react").NamedExoticComponent<ChatListProps>;
|
|
15
15
|
export default ChatList;
|
package/es/ChatList/index.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
2
|
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
3
|
-
var _excluded = ["onActionClick", "
|
|
3
|
+
var _excluded = ["onActionClick", "renderMessagesExtra", "className", "data", "type", "text", "showTitle", "onMessageChange", "renderMessages", "renderErrorMessages", "loadingId", "renderItems", "enableHistoryCount", "renderActions", "historyCount"];
|
|
4
4
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
5
5
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
6
6
|
import { Fragment, memo } from 'react';
|
|
7
|
-
import Group from "./Group";
|
|
8
7
|
import HistoryDivider from "./HistoryDivider";
|
|
9
8
|
import Item from "./Item";
|
|
10
9
|
import { useStyles } from "./style";
|
|
@@ -12,7 +11,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
12
11
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
12
|
var ChatList = /*#__PURE__*/memo(function (_ref) {
|
|
14
13
|
var onActionClick = _ref.onActionClick,
|
|
15
|
-
|
|
14
|
+
renderMessagesExtra = _ref.renderMessagesExtra,
|
|
16
15
|
className = _ref.className,
|
|
17
16
|
data = _ref.data,
|
|
18
17
|
_ref$type = _ref.type,
|
|
@@ -20,11 +19,12 @@ var ChatList = /*#__PURE__*/memo(function (_ref) {
|
|
|
20
19
|
text = _ref.text,
|
|
21
20
|
showTitle = _ref.showTitle,
|
|
22
21
|
onMessageChange = _ref.onMessageChange,
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
renderMessages = _ref.renderMessages,
|
|
23
|
+
renderErrorMessages = _ref.renderErrorMessages,
|
|
25
24
|
loadingId = _ref.loadingId,
|
|
26
|
-
|
|
25
|
+
renderItems = _ref.renderItems,
|
|
27
26
|
enableHistoryCount = _ref.enableHistoryCount,
|
|
27
|
+
renderActions = _ref.renderActions,
|
|
28
28
|
_ref$historyCount = _ref.historyCount,
|
|
29
29
|
historyCount = _ref$historyCount === void 0 ? 0 : _ref$historyCount,
|
|
30
30
|
props = _objectWithoutProperties(_ref, _excluded);
|
|
@@ -35,39 +35,26 @@ var ChatList = /*#__PURE__*/memo(function (_ref) {
|
|
|
35
35
|
className: cx(styles.container, className)
|
|
36
36
|
}, props), {}, {
|
|
37
37
|
children: data.map(function (item, index) {
|
|
38
|
-
var
|
|
39
|
-
var props = {
|
|
38
|
+
var itemProps = {
|
|
40
39
|
loading: loadingId === item.id,
|
|
41
40
|
onActionClick: onActionClick,
|
|
42
41
|
onMessageChange: onMessageChange,
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
renderActions: renderActions,
|
|
43
|
+
renderErrorMessages: renderErrorMessages,
|
|
44
|
+
renderItems: renderItems,
|
|
45
|
+
renderMessages: renderMessages,
|
|
46
|
+
renderMessagesExtra: renderMessagesExtra,
|
|
47
47
|
showTitle: showTitle,
|
|
48
48
|
text: text,
|
|
49
49
|
type: type
|
|
50
50
|
};
|
|
51
51
|
var historyLength = data.length;
|
|
52
52
|
var enableHistoryDivider = enableHistoryCount && historyLength > historyCount && historyCount === historyLength - index + 1;
|
|
53
|
-
if (item.children && ((_item$children = item.children) === null || _item$children === void 0 ? void 0 : _item$children.length) > 0) {
|
|
54
|
-
return /*#__PURE__*/_jsxs(Fragment, {
|
|
55
|
-
children: [/*#__PURE__*/_jsx(HistoryDivider, {
|
|
56
|
-
enable: enableHistoryDivider,
|
|
57
|
-
text: text
|
|
58
|
-
}), /*#__PURE__*/_jsx(Group, {
|
|
59
|
-
data: item.children.map(function (childrenItem) {
|
|
60
|
-
return _objectSpread(_objectSpread({}, props), childrenItem);
|
|
61
|
-
}),
|
|
62
|
-
meta: item.meta
|
|
63
|
-
})]
|
|
64
|
-
}, item.children[0].id);
|
|
65
|
-
}
|
|
66
53
|
return /*#__PURE__*/_jsxs(Fragment, {
|
|
67
54
|
children: [/*#__PURE__*/_jsx(HistoryDivider, {
|
|
68
55
|
enable: enableHistoryDivider,
|
|
69
|
-
text: text
|
|
70
|
-
}), /*#__PURE__*/_jsx(Item, _objectSpread(_objectSpread({},
|
|
56
|
+
text: text === null || text === void 0 ? void 0 : text.history
|
|
57
|
+
}), /*#__PURE__*/_jsx(Item, _objectSpread(_objectSpread({}, itemProps), item))]
|
|
71
58
|
}, item.id);
|
|
72
59
|
})
|
|
73
60
|
}));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ChatMessageError
|
|
2
|
-
import { LLMMessage } from "../types/llm";
|
|
1
|
+
import { ChatMessageError } from "../types/chatMessage";
|
|
2
|
+
import { LLMMessage, LLMRoleType } from "../types/llm";
|
|
3
3
|
export type MessageDispatch = {
|
|
4
4
|
message: LLMMessage;
|
|
5
5
|
type: 'addMessage';
|
|
@@ -18,7 +18,7 @@ export type MessageDispatch = {
|
|
|
18
18
|
type: 'updateMessage';
|
|
19
19
|
} | {
|
|
20
20
|
index: number;
|
|
21
|
-
role:
|
|
21
|
+
role: LLMRoleType;
|
|
22
22
|
type: 'updateMessageRole';
|
|
23
23
|
} | {
|
|
24
24
|
message: string;
|
package/es/MessageModal/index.js
CHANGED
|
@@ -2,6 +2,7 @@ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
|
2
2
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
3
3
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
4
4
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
5
|
+
import { useResponsive } from 'antd-style';
|
|
5
6
|
import { memo } from 'react';
|
|
6
7
|
import useControlledState from 'use-merge-value';
|
|
7
8
|
import Markdown from "../Markdown";
|
|
@@ -19,6 +20,8 @@ var MessageModal = /*#__PURE__*/memo(function (_ref) {
|
|
|
19
20
|
value = _ref.value,
|
|
20
21
|
onChange = _ref.onChange,
|
|
21
22
|
text = _ref.text;
|
|
23
|
+
var _useResponsive = useResponsive(),
|
|
24
|
+
mobile = _useResponsive.mobile;
|
|
22
25
|
var _useControlledState = useControlledState(false, {
|
|
23
26
|
onChange: onEditingChange,
|
|
24
27
|
value: editing
|
|
@@ -40,6 +43,9 @@ var MessageModal = /*#__PURE__*/memo(function (_ref) {
|
|
|
40
43
|
overflowY: 'auto'
|
|
41
44
|
};
|
|
42
45
|
return /*#__PURE__*/_jsx(Modal, {
|
|
46
|
+
bodyStyle: mobile ? {
|
|
47
|
+
padding: 16
|
|
48
|
+
} : {},
|
|
43
49
|
cancelText: (text === null || text === void 0 ? void 0 : text.cancel) || 'Cancel',
|
|
44
50
|
footer: isEdit ? null : undefined,
|
|
45
51
|
okText: (text === null || text === void 0 ? void 0 : text.edit) || 'Edit',
|
package/es/Modal/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
2
|
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
3
3
|
import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
|
|
4
|
-
var _excluded = ["children", "title", "className", "wrapClassName", "width", "onCancel", "open", "destroyOnClose"];
|
|
4
|
+
var _excluded = ["children", "title", "className", "wrapClassName", "width", "onCancel", "open", "destroyOnClose", "bodyStyle"];
|
|
5
5
|
var _templateObject, _templateObject2;
|
|
6
6
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
7
7
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
@@ -32,6 +32,7 @@ var Modal = /*#__PURE__*/memo(function (_ref2) {
|
|
|
32
32
|
onCancel = _ref2.onCancel,
|
|
33
33
|
open = _ref2.open,
|
|
34
34
|
destroyOnClose = _ref2.destroyOnClose,
|
|
35
|
+
bodyStyle = _ref2.bodyStyle,
|
|
35
36
|
props = _objectWithoutProperties(_ref2, _excluded);
|
|
36
37
|
var _useResponsive = useResponsive(),
|
|
37
38
|
mobile = _useResponsive.mobile;
|
|
@@ -40,7 +41,7 @@ var Modal = /*#__PURE__*/memo(function (_ref2) {
|
|
|
40
41
|
cx = _useStyles.cx,
|
|
41
42
|
theme = _useStyles.theme;
|
|
42
43
|
if (mobile) return /*#__PURE__*/_jsx(Drawer, {
|
|
43
|
-
bodyStyle: {
|
|
44
|
+
bodyStyle: bodyStyle || {
|
|
44
45
|
padding: 0
|
|
45
46
|
},
|
|
46
47
|
closeIcon: /*#__PURE__*/_jsx(ActionIcon, {
|
|
@@ -72,6 +73,7 @@ var Modal = /*#__PURE__*/memo(function (_ref2) {
|
|
|
72
73
|
}
|
|
73
74
|
},
|
|
74
75
|
children: /*#__PURE__*/_jsx(AntModal, _objectSpread(_objectSpread({
|
|
76
|
+
bodyStyle: bodyStyle,
|
|
75
77
|
className: cx(styles.content, className),
|
|
76
78
|
closable: true,
|
|
77
79
|
closeIcon: /*#__PURE__*/_jsx(Icon, {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ActionIconGroupItems } from "../ActionIconGroup";
|
|
2
|
+
interface ChatListActionsBar {
|
|
3
|
+
copy: ActionIconGroupItems;
|
|
4
|
+
del: ActionIconGroupItems;
|
|
5
|
+
divider: {
|
|
6
|
+
type: 'divider';
|
|
7
|
+
};
|
|
8
|
+
edit: ActionIconGroupItems;
|
|
9
|
+
regenerate: ActionIconGroupItems;
|
|
10
|
+
}
|
|
11
|
+
export declare const useChatListActionsBar: (text?: {
|
|
12
|
+
copy?: string;
|
|
13
|
+
delete?: string;
|
|
14
|
+
edit?: string;
|
|
15
|
+
regenerate?: string;
|
|
16
|
+
}) => ChatListActionsBar;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Copy, Edit, RotateCw, Trash } from 'lucide-react';
|
|
2
|
+
export var useChatListActionsBar = function useChatListActionsBar(text) {
|
|
3
|
+
return {
|
|
4
|
+
copy: {
|
|
5
|
+
icon: Copy,
|
|
6
|
+
key: 'copy',
|
|
7
|
+
label: (text === null || text === void 0 ? void 0 : text.copy) || 'Copy'
|
|
8
|
+
},
|
|
9
|
+
del: {
|
|
10
|
+
icon: Trash,
|
|
11
|
+
key: 'delete',
|
|
12
|
+
label: (text === null || text === void 0 ? void 0 : text.delete) || 'Delete'
|
|
13
|
+
},
|
|
14
|
+
divider: {
|
|
15
|
+
type: 'divider'
|
|
16
|
+
},
|
|
17
|
+
edit: {
|
|
18
|
+
icon: Edit,
|
|
19
|
+
key: 'edit',
|
|
20
|
+
label: (text === null || text === void 0 ? void 0 : text.edit) || 'Edit'
|
|
21
|
+
},
|
|
22
|
+
regenerate: {
|
|
23
|
+
icon: RotateCw,
|
|
24
|
+
key: 'regenerate',
|
|
25
|
+
label: (text === null || text === void 0 ? void 0 : text.regenerate) || 'Regenerate'
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
};
|
package/es/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export { default as ChatHeader, type ChatHeaderProps } from './ChatHeader';
|
|
|
7
7
|
export { default as ChatHeaderTitle, type ChatHeaderTitleProps, } from './ChatHeader/ChatHeaderTitle';
|
|
8
8
|
export { default as ChatInputArea, type ChatInputAreaProps } from './ChatInputArea';
|
|
9
9
|
export { default as ChatItem, type ChatItemProps } from './ChatItem';
|
|
10
|
-
export type { ChatListProps, OnActionClick, OnMessageChange, RenderErrorMessage, RenderMessage, } from './ChatList';
|
|
10
|
+
export type { ChatListProps, OnActionClick, OnMessageChange, RenderAction, RenderErrorMessage, RenderItem, RenderMessage, RenderMessageExtra, } from './ChatList';
|
|
11
11
|
export { default as ChatList } from './ChatList';
|
|
12
12
|
export { default as CodeEditor, type CodeEditorProps } from './CodeEditor';
|
|
13
13
|
export { default as ColorScales, type ColorScalesProps } from './ColorScales';
|
|
@@ -40,6 +40,7 @@ export { default as GridShowcase, type GridShowcaseProps } from './GridBackgroun
|
|
|
40
40
|
export { default as Header, type HeaderProps } from './Header';
|
|
41
41
|
export { default as Hero, type HeroAction, type HeroProps } from './Hero';
|
|
42
42
|
export { default as Highlighter, type HighlighterProps, SyntaxHighlighter, type SyntaxHighlighterProps, } from './Highlighter';
|
|
43
|
+
export { useChatListActionsBar } from './hooks/useChatListActionsBar';
|
|
43
44
|
export { default as Icon, type IconProps, type IconSize } from './Icon';
|
|
44
45
|
export * from './Icon/icons';
|
|
45
46
|
export { Input, type InputProps, TextArea, type TextAreaProps } from './Input';
|
package/es/index.js
CHANGED
|
@@ -39,6 +39,7 @@ export { default as GridShowcase } from "./GridBackground/GridShowcase";
|
|
|
39
39
|
export { default as Header } from "./Header";
|
|
40
40
|
export { default as Hero } from "./Hero";
|
|
41
41
|
export { default as Highlighter, SyntaxHighlighter } from "./Highlighter";
|
|
42
|
+
export { useChatListActionsBar } from "./hooks/useChatListActionsBar";
|
|
42
43
|
export { default as Icon } from "./Icon";
|
|
43
44
|
export * from "./Icon/icons";
|
|
44
45
|
export { Input, TextArea } from "./Input";
|
|
@@ -1,36 +1,50 @@
|
|
|
1
|
+
import { PluginRequestPayload } from '@lobehub/chat-plugin-sdk';
|
|
2
|
+
import { ErrorType } from './error';
|
|
3
|
+
import { LLMRoleType } from './llm';
|
|
1
4
|
import { BaseDataModel } from './meta';
|
|
2
|
-
export type MessageRoleType = 'user' | 'system' | 'assistant' | 'function';
|
|
3
5
|
/**
|
|
4
6
|
* 聊天消息错误对象
|
|
5
7
|
*/
|
|
6
8
|
export interface ChatMessageError {
|
|
7
|
-
|
|
8
|
-
* 错误信息
|
|
9
|
-
*/
|
|
9
|
+
body?: any;
|
|
10
10
|
message: string;
|
|
11
|
-
type
|
|
11
|
+
type: ErrorType;
|
|
12
|
+
}
|
|
13
|
+
export interface OpenAIFunctionCall {
|
|
14
|
+
arguments?: string;
|
|
15
|
+
name: string;
|
|
12
16
|
}
|
|
13
|
-
export interface
|
|
17
|
+
export interface ChatMessage extends BaseDataModel {
|
|
14
18
|
/**
|
|
15
19
|
* @title 内容
|
|
16
20
|
* @description 消息内容
|
|
17
21
|
*/
|
|
18
22
|
content: string;
|
|
19
|
-
error?:
|
|
23
|
+
error?: any;
|
|
20
24
|
extra?: {
|
|
25
|
+
fromModel?: string;
|
|
21
26
|
translate?: {
|
|
22
27
|
target: string;
|
|
23
28
|
to: string;
|
|
24
29
|
};
|
|
25
30
|
} & Record<string, any>;
|
|
31
|
+
/**
|
|
32
|
+
* replace with plugin
|
|
33
|
+
* @deprecated
|
|
34
|
+
*/
|
|
35
|
+
function_call?: OpenAIFunctionCall;
|
|
36
|
+
name?: string;
|
|
37
|
+
parentId?: string;
|
|
38
|
+
plugin?: PluginRequestPayload;
|
|
26
39
|
quotaId?: string;
|
|
27
40
|
/**
|
|
28
41
|
* 角色
|
|
29
42
|
* @description 消息发送者的角色
|
|
30
43
|
*/
|
|
31
|
-
role:
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
44
|
+
role: LLMRoleType;
|
|
45
|
+
/**
|
|
46
|
+
* 保存到主题的消息
|
|
47
|
+
*/
|
|
48
|
+
topicId?: string;
|
|
36
49
|
}
|
|
50
|
+
export type ChatMessageMap = Record<string, ChatMessage>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const ChatErrorType: {
|
|
2
|
+
readonly InvalidAccessCode: "InvalidAccessCode";
|
|
3
|
+
readonly OpenAIBizError: "OpenAIBizError";
|
|
4
|
+
readonly NoAPIKey: "NoAPIKey";
|
|
5
|
+
readonly BadRequest: 400;
|
|
6
|
+
readonly Unauthorized: 401;
|
|
7
|
+
readonly Forbidden: 403;
|
|
8
|
+
readonly ContentNotFound: 404;
|
|
9
|
+
readonly MethodNotAllowed: 405;
|
|
10
|
+
readonly TooManyRequests: 429;
|
|
11
|
+
readonly InternalServerError: 500;
|
|
12
|
+
readonly BadGateway: 502;
|
|
13
|
+
readonly ServiceUnavailable: 503;
|
|
14
|
+
readonly GatewayTimeout: 504;
|
|
15
|
+
};
|
|
16
|
+
export type ErrorType = (typeof ChatErrorType)[keyof typeof ChatErrorType];
|
|
17
|
+
export interface ErrorResponse {
|
|
18
|
+
body: any;
|
|
19
|
+
errorType: ErrorType;
|
|
20
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/* eslint-disable sort-keys-fix/sort-keys-fix */
|
|
2
|
+
export var ChatErrorType = {
|
|
3
|
+
// ******* 业务错误语义 ******* //
|
|
4
|
+
|
|
5
|
+
InvalidAccessCode: 'InvalidAccessCode',
|
|
6
|
+
// 密码无效
|
|
7
|
+
OpenAIBizError: 'OpenAIBizError',
|
|
8
|
+
// OpenAI 返回的业务错误
|
|
9
|
+
NoAPIKey: 'NoAPIKey',
|
|
10
|
+
// ******* 客户端错误 ******* //
|
|
11
|
+
BadRequest: 400,
|
|
12
|
+
Unauthorized: 401,
|
|
13
|
+
Forbidden: 403,
|
|
14
|
+
ContentNotFound: 404,
|
|
15
|
+
// 没找到接口
|
|
16
|
+
MethodNotAllowed: 405,
|
|
17
|
+
// 不支持
|
|
18
|
+
TooManyRequests: 429,
|
|
19
|
+
// ******* 服务端错误 ******* //
|
|
20
|
+
InternalServerError: 500,
|
|
21
|
+
BadGateway: 502,
|
|
22
|
+
ServiceUnavailable: 503,
|
|
23
|
+
GatewayTimeout: 504
|
|
24
|
+
};
|
|
25
|
+
/* eslint-enable */
|
package/es/types/llm.d.ts
CHANGED
|
@@ -1,22 +1,47 @@
|
|
|
1
|
-
import { ChatMessageError, MessageRoleType } from "./chatMessage";
|
|
2
1
|
/**
|
|
3
|
-
*
|
|
4
|
-
* @category Model
|
|
2
|
+
* LLM 模型
|
|
5
3
|
*/
|
|
6
|
-
export
|
|
4
|
+
export declare enum LanguageModel {
|
|
7
5
|
/**
|
|
8
|
-
*
|
|
9
|
-
* @description 消息内容
|
|
6
|
+
* GPT 3.5 Turbo
|
|
10
7
|
*/
|
|
11
|
-
|
|
8
|
+
GPT3_5 = "gpt-3.5-turbo",
|
|
9
|
+
GPT3_5_16K = "gpt-3.5-turbo-16k",
|
|
10
|
+
/**
|
|
11
|
+
* GPT 4
|
|
12
|
+
*/
|
|
13
|
+
GPT4 = "gpt-4",
|
|
14
|
+
GPT4_32K = "gpt-4-32k"
|
|
15
|
+
}
|
|
16
|
+
export interface LLMParams {
|
|
17
|
+
/**
|
|
18
|
+
* 控制生成文本中的惩罚系数,用于减少重复性
|
|
19
|
+
* @default 0
|
|
20
|
+
*/
|
|
21
|
+
frequency_penalty?: number;
|
|
12
22
|
/**
|
|
13
|
-
*
|
|
23
|
+
* 生成文本的最大长度
|
|
14
24
|
*/
|
|
15
|
-
|
|
25
|
+
max_tokens?: number;
|
|
16
26
|
/**
|
|
17
|
-
*
|
|
18
|
-
* @
|
|
19
|
-
* @enum {MessageRoleType} ChatGPTAgent
|
|
27
|
+
* 控制生成文本中的惩罚系数,用于减少主题的变化
|
|
28
|
+
* @default 0
|
|
20
29
|
*/
|
|
21
|
-
|
|
30
|
+
presence_penalty?: number;
|
|
31
|
+
/**
|
|
32
|
+
* 生成文本的随机度量,用于控制文本的创造性和多样性
|
|
33
|
+
* @default 0.6
|
|
34
|
+
*/
|
|
35
|
+
temperature?: number;
|
|
36
|
+
/**
|
|
37
|
+
* 控制生成文本中最高概率的单个 token
|
|
38
|
+
* @default 1
|
|
39
|
+
*/
|
|
40
|
+
top_p?: number;
|
|
41
|
+
}
|
|
42
|
+
export type LLMRoleType = 'user' | 'system' | 'assistant' | 'function';
|
|
43
|
+
export interface LLMMessage {
|
|
44
|
+
content: string;
|
|
45
|
+
role: LLMRoleType;
|
|
22
46
|
}
|
|
47
|
+
export type LLMExample = LLMMessage[];
|
package/es/types/llm.js
CHANGED
|
@@ -1 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* LLM 模型
|
|
3
|
+
*/
|
|
4
|
+
export var LanguageModel = /*#__PURE__*/function (LanguageModel) {
|
|
5
|
+
LanguageModel["GPT3_5"] = "gpt-3.5-turbo";
|
|
6
|
+
LanguageModel["GPT3_5_16K"] = "gpt-3.5-turbo-16k";
|
|
7
|
+
LanguageModel["GPT4"] = "gpt-4";
|
|
8
|
+
LanguageModel["GPT4_32K"] = "gpt-4-32k";
|
|
9
|
+
return LanguageModel;
|
|
10
|
+
}({});
|
|
11
|
+
|
|
12
|
+
// 语言模型的设置参数
|
package/es/types/meta.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lobehub/ui",
|
|
3
|
-
"version": "1.103.
|
|
3
|
+
"version": "1.103.2",
|
|
4
4
|
"description": "Lobe UI is an open-source UI component library for building AIGC web apps",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"lobehub",
|
|
@@ -75,6 +75,7 @@
|
|
|
75
75
|
"@babel/runtime": "^7",
|
|
76
76
|
"@floating-ui/react": "^0",
|
|
77
77
|
"@giscus/react": "^2",
|
|
78
|
+
"@lobehub/chat-plugin-sdk": "latest",
|
|
78
79
|
"@lobehub/emojilib": "latest",
|
|
79
80
|
"@react-spring/three": "^9",
|
|
80
81
|
"@react-spring/web": "^9",
|
|
@@ -135,7 +136,7 @@
|
|
|
135
136
|
"father": "4.3.1",
|
|
136
137
|
"husky": "^8",
|
|
137
138
|
"jsdom": "^22",
|
|
138
|
-
"lint-staged": "^
|
|
139
|
+
"lint-staged": "^15.0.0",
|
|
139
140
|
"prettier": "^3",
|
|
140
141
|
"react": "^18",
|
|
141
142
|
"react-dom": "^18",
|
package/es/ChatList/Group.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import { ChatListItemProps } from './Item';
|
|
3
|
-
interface ChatListGroup {
|
|
4
|
-
data: ChatListItemProps[];
|
|
5
|
-
meta: ChatListItemProps['meta'];
|
|
6
|
-
}
|
|
7
|
-
declare const Group: import("react").NamedExoticComponent<ChatListGroup>;
|
|
8
|
-
export default Group;
|
package/es/ChatList/Group.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
-
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
3
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
4
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
5
|
-
import { memo, useMemo, useState } from 'react';
|
|
6
|
-
import GroupNav from "./GroupNav";
|
|
7
|
-
import Item from "./Item";
|
|
8
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
-
var Group = /*#__PURE__*/memo(function (_ref) {
|
|
10
|
-
var data = _ref.data,
|
|
11
|
-
meta = _ref.meta;
|
|
12
|
-
var _useState = useState(data[0].id),
|
|
13
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
14
|
-
active = _useState2[0],
|
|
15
|
-
setActive = _useState2[1];
|
|
16
|
-
var chatItem = useMemo(function () {
|
|
17
|
-
return data.find(function (item) {
|
|
18
|
-
return item.id === active;
|
|
19
|
-
}) || data[0];
|
|
20
|
-
}, [data, active]);
|
|
21
|
-
return /*#__PURE__*/_jsx(Item, _objectSpread(_objectSpread({
|
|
22
|
-
groupNav: /*#__PURE__*/_jsx(GroupNav, {
|
|
23
|
-
active: active,
|
|
24
|
-
data: data,
|
|
25
|
-
setActive: setActive
|
|
26
|
-
})
|
|
27
|
-
}, chatItem), {}, {
|
|
28
|
-
meta: meta
|
|
29
|
-
}));
|
|
30
|
-
});
|
|
31
|
-
export default Group;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import { ChatListItemProps } from "./Item";
|
|
3
|
-
interface GroupNavProps {
|
|
4
|
-
active: string;
|
|
5
|
-
data: ChatListItemProps[];
|
|
6
|
-
setActive: (id: string) => void;
|
|
7
|
-
}
|
|
8
|
-
declare const GroupNav: import("react").NamedExoticComponent<GroupNavProps>;
|
|
9
|
-
export default GroupNav;
|
package/es/ChatList/GroupNav.js
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { useTheme } from 'antd-style';
|
|
2
|
-
import { memo } from 'react';
|
|
3
|
-
import { Flexbox } from 'react-layout-kit';
|
|
4
|
-
import Avatar from "../Avatar";
|
|
5
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
-
var GroupNav = /*#__PURE__*/memo(function (_ref) {
|
|
7
|
-
var data = _ref.data,
|
|
8
|
-
active = _ref.active,
|
|
9
|
-
setActive = _ref.setActive;
|
|
10
|
-
var theme = useTheme();
|
|
11
|
-
var count = 1;
|
|
12
|
-
return /*#__PURE__*/_jsx(Flexbox, {
|
|
13
|
-
align: 'center',
|
|
14
|
-
gap: 4,
|
|
15
|
-
children: data.map(function (item) {
|
|
16
|
-
var _item$meta;
|
|
17
|
-
var avatar;
|
|
18
|
-
var isAvtive = active === item.id;
|
|
19
|
-
var metaAvatar = item === null || item === void 0 ? void 0 : (_item$meta = item.meta) === null || _item$meta === void 0 ? void 0 : _item$meta.avatar;
|
|
20
|
-
switch (item.role) {
|
|
21
|
-
case 'assistant':
|
|
22
|
-
{
|
|
23
|
-
avatar = String(count);
|
|
24
|
-
break;
|
|
25
|
-
}
|
|
26
|
-
case 'function':
|
|
27
|
-
{
|
|
28
|
-
avatar = metaAvatar || '🧩';
|
|
29
|
-
break;
|
|
30
|
-
}
|
|
31
|
-
case 'system':
|
|
32
|
-
{
|
|
33
|
-
avatar = metaAvatar || '🚨';
|
|
34
|
-
break;
|
|
35
|
-
}
|
|
36
|
-
default:
|
|
37
|
-
{
|
|
38
|
-
avatar = metaAvatar || String(count);
|
|
39
|
-
break;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
count++;
|
|
43
|
-
return /*#__PURE__*/_jsx(Avatar, {
|
|
44
|
-
avatar: avatar,
|
|
45
|
-
background: isAvtive ? theme.colorPrimary : theme.colorBgElevated,
|
|
46
|
-
onClick: function onClick() {
|
|
47
|
-
return setActive(item.id);
|
|
48
|
-
},
|
|
49
|
-
size: 20
|
|
50
|
-
}, item.id);
|
|
51
|
-
})
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
export default GroupNav;
|