@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.
@@ -2,7 +2,7 @@
2
2
  import { ActionIconProps } from "..";
3
3
  import { type LucideIcon } from 'lucide-react';
4
4
  import { DivProps } from "../types";
5
- interface ActionIconGroupItems {
5
+ export interface ActionIconGroupItems {
6
6
  icon: LucideIcon;
7
7
  key: string;
8
8
  label: string;
@@ -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
- srcSet: avatar
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 ErrorMessage = _ref.ErrorMessage,
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)), ErrorMessage]
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
  });
@@ -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", "ErrorMessage"];
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
- ErrorMessage = _ref.ErrorMessage,
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,
@@ -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 = ["primary", "text", "items", "dropdownMenu"];
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 { Copy, Edit, RotateCw, Trash } from 'lucide-react';
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 primary = _ref.primary,
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 groupItems = useMemo(function () {
20
- return [{
21
- icon: RotateCw,
22
- key: 'regenerate',
23
- label: (text === null || text === void 0 ? void 0 : text.regenerate) || 'Regenerate'
24
- }, primary ? {
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: groupDropdownMenu,
57
- items: groupItems,
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: (text === null || text === void 0 ? void 0 : text.history) || 'History Message'
20
+ children: text || 'History Message'
21
21
  })
22
22
  })
23
23
  });
@@ -1,12 +1,18 @@
1
- import { type FC, type ReactNode } from 'react';
1
+ import { FC } from 'react';
2
2
  import { type ChatItemProps } from "../ChatItem";
3
- import { ChatMessage, ChatMessageError, MessageRoleType } from "../types/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 RenderMessage = (content: ReactNode, message: ChatMessage) => ReactNode;
9
- export type RenderErrorMessage = (error: ChatMessageError, message: ChatMessage) => ReactNode;
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
- renderErrorMessage?: RenderErrorMessage;
25
- renderItem?: {
26
- [role: MessageRoleType | string]: (data: {
27
- key: string;
28
- } & ChatMessage & ListItemProps) => ReactNode;
33
+ renderErrorMessages?: {
34
+ [errorType: 'default' | string]: RenderErrorMessage;
35
+ };
36
+ renderItems?: {
37
+ [role: RenderRole]: RenderItem;
29
38
  };
30
39
  /**
31
40
  * @description 渲染消息的函数
32
41
  */
33
- renderMessage?: RenderMessage;
42
+ renderMessages?: {
43
+ [role: RenderRole]: RenderMessage;
44
+ };
34
45
  /**
35
46
  * @description 渲染消息额外内容的函数
36
47
  */
37
- renderMessageExtra?: MessageExtra;
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 聊天列表的类型
@@ -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 = ["renderMessageExtra", "showTitle", "onActionClick", "onMessageChange", "type", "text", "renderMessage", "renderErrorMessage", "loading", "groupNav", "renderItem"];
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 _item$error;
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
- renderMessage = props.renderMessage,
22
- renderErrorMessage = props.renderErrorMessage,
20
+ renderMessages = props.renderMessages,
21
+ renderErrorMessages = props.renderErrorMessages,
22
+ renderActions = props.renderActions,
23
23
  loading = props.loading,
24
24
  groupNav = props.groupNav,
25
- renderItem = props.renderItem,
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
- return renderItem && renderItem[item.role] ? renderItem[item.role] : undefined;
39
- }, [renderItem]);
40
- if (RenderItem) return /*#__PURE__*/_jsx(RenderItem, _objectSpread({}, props), item.id);
41
- return /*#__PURE__*/_jsx(ChatItem, {
42
- ErrorMessage: item.error ? renderErrorMessage === null || renderErrorMessage === void 0 ? void 0 : renderErrorMessage(item.error, item) : undefined,
43
- actions: /*#__PURE__*/_jsx(ActionsBar, {
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: item.error ? {
67
- message: (_item$error = item.error) === null || _item$error === void 0 ? void 0 : _item$error.message
68
- } : undefined,
104
+ error: error,
105
+ errorMessage: /*#__PURE__*/_jsx(ErrorMessage, {}),
69
106
  loading: loading,
70
107
  message: item.content,
71
- messageExtra: renderMessageExtra,
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: renderMessage ? innerRenderMessage : undefined,
115
+ renderMessage: innerRenderMessage,
79
116
  showTitle: showTitle,
80
117
  text: text,
81
118
  time: item.updateAt || item.createAt,
@@ -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;
@@ -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", "renderMessageExtra", "className", "data", "type", "text", "showTitle", "onMessageChange", "renderMessage", "renderErrorMessage", "loadingId", "renderItem", "enableHistoryCount", "historyCount"];
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
- MessageExtra = _ref.renderMessageExtra,
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
- renderMessage = _ref.renderMessage,
24
- renderErrorMessage = _ref.renderErrorMessage,
22
+ renderMessages = _ref.renderMessages,
23
+ renderErrorMessages = _ref.renderErrorMessages,
25
24
  loadingId = _ref.loadingId,
26
- renderItem = _ref.renderItem,
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 _item$children;
39
- var props = {
38
+ var itemProps = {
40
39
  loading: loadingId === item.id,
41
40
  onActionClick: onActionClick,
42
41
  onMessageChange: onMessageChange,
43
- renderErrorMessage: renderErrorMessage,
44
- renderItem: renderItem,
45
- renderMessage: renderMessage,
46
- renderMessageExtra: MessageExtra,
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({}, props), item))]
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, MessageRoleType } from "../types";
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: MessageRoleType;
21
+ role: LLMRoleType;
22
22
  type: 'updateMessageRole';
23
23
  } | {
24
24
  message: string;
@@ -63,6 +63,8 @@ export var messagesReducer = function messagesReducer(state, payload) {
63
63
  return produce(state, function (draftState) {
64
64
  var index = payload.index,
65
65
  error = payload.error;
66
+
67
+ // @ts-ignore
66
68
  draftState[index].error = error;
67
69
  });
68
70
  }
@@ -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?: string;
11
+ type: ErrorType;
12
+ }
13
+ export interface OpenAIFunctionCall {
14
+ arguments?: string;
15
+ name: string;
12
16
  }
13
- export interface SingleChatMessage extends BaseDataModel {
17
+ export interface ChatMessage extends BaseDataModel {
14
18
  /**
15
19
  * @title 内容
16
20
  * @description 消息内容
17
21
  */
18
22
  content: string;
19
- error?: ChatMessageError;
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: MessageRoleType;
32
- }
33
- export interface ChatMessage extends SingleChatMessage {
34
- children?: SingleChatMessage[];
35
- parentId?: string;
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
- * @title ChatGPTMessage 聊天消息
4
- * @category Model
2
+ * LLM 模型
5
3
  */
6
- export interface LLMMessage {
4
+ export declare enum LanguageModel {
7
5
  /**
8
- * @title 内容
9
- * @description 消息内容
6
+ * GPT 3.5 Turbo
10
7
  */
11
- content: string;
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
- error?: ChatMessageError;
25
+ max_tokens?: number;
16
26
  /**
17
- * @title 角色
18
- * @description 消息发送者的角色
19
- * @enum {MessageRoleType} ChatGPTAgent
27
+ * 控制生成文本中的惩罚系数,用于减少主题的变化
28
+ * @default 0
20
29
  */
21
- role: MessageRoleType;
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
- export {};
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
+ // 语言模型的设置参数
@@ -10,7 +10,7 @@ export interface MetaData {
10
10
  */
11
11
  backgroundColor?: string;
12
12
  description?: string;
13
- tag?: string[];
13
+ tags?: string[];
14
14
  /**
15
15
  * 名称
16
16
  * @description 可选参数,如果不传则使用默认名称
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/ui",
3
- "version": "1.103.0",
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": "^14",
139
+ "lint-staged": "^15.0.0",
139
140
  "prettier": "^3",
140
141
  "react": "^18",
141
142
  "react-dom": "^18",
@@ -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;
@@ -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;
@@ -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;