@lobehub/ui 5.53.0 → 5.55.0
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/Image/index.d.mts +2 -1
- package/es/Image/index.mjs +2 -1
- package/es/Image/index.mjs.map +1 -1
- package/es/Image/useImagePreview.d.mts +11 -0
- package/es/Image/useImagePreview.mjs +32 -0
- package/es/Image/useImagePreview.mjs.map +1 -0
- package/es/Image/viewer/registry.d.mts +1 -1
- package/es/awesome/BottomGradientButton/BottomGradientButton.d.mts +2 -3
- package/es/awesome/BottomGradientButton/BottomGradientButton.mjs +2 -2
- package/es/awesome/BottomGradientButton/BottomGradientButton.mjs.map +1 -1
- package/es/awesome/BottomGradientButton/index.d.mts +1 -1
- package/es/awesome/BottomGradientButton/style.mjs +4 -1
- package/es/awesome/BottomGradientButton/style.mjs.map +1 -1
- package/es/awesome/BottomGradientButton/type.d.mts +2 -2
- package/es/awesome/GradientButton/GradientButton.mjs +2 -2
- package/es/awesome/GradientButton/GradientButton.mjs.map +1 -1
- package/es/awesome/GradientButton/type.d.mts +2 -2
- package/es/awesome/Hero/Hero.mjs +35 -29
- package/es/awesome/Hero/Hero.mjs.map +1 -1
- package/es/awesome/Hero/style.mjs +4 -0
- package/es/awesome/Hero/style.mjs.map +1 -1
- package/es/awesome/index.d.mts +1 -1
- package/es/awesome/landingActions.mjs +1 -1
- package/es/awesome/landingActions.mjs.map +1 -1
- package/es/base-ui/Input/style.mjs +5 -0
- package/es/base-ui/Input/style.mjs.map +1 -1
- package/es/base-ui/index.d.mts +5 -5
- package/es/chat/BackBottom/BackBottom.mjs +4 -4
- package/es/chat/BackBottom/BackBottom.mjs.map +1 -1
- package/es/chat/BackBottom/type.d.mts +3 -4
- package/es/chat/ChatInputArea/ChatInputArea.mjs +32 -24
- package/es/chat/ChatInputArea/ChatInputArea.mjs.map +1 -1
- package/es/chat/ChatInputArea/components/ChatInputAreaInner.mjs +1 -1
- package/es/chat/ChatInputArea/components/ChatInputAreaInner.mjs.map +1 -1
- package/es/chat/ChatInputArea/components/ChatSendButton.mjs +1 -1
- package/es/chat/ChatInputArea/components/ChatSendButton.mjs.map +1 -1
- package/es/chat/ChatInputArea/style.mjs +12 -1
- package/es/chat/ChatInputArea/style.mjs.map +1 -1
- package/es/chat/ChatInputArea/type.d.mts +7 -8
- package/es/chat/ChatItem/components/Avatar.mjs +1 -1
- package/es/chat/ChatItem/components/Avatar.mjs.map +1 -1
- package/es/chat/ChatItem/components/ErrorContent.mjs +1 -1
- package/es/chat/ChatItem/components/ErrorContent.mjs.map +1 -1
- package/es/chat/ChatItem/type.d.mts +4 -4
- package/es/chat/ChatList/ChatList.mjs +4 -3
- package/es/chat/ChatList/ChatList.mjs.map +1 -1
- package/es/chat/ChatList/components/ChatListItem.mjs +3 -5
- package/es/chat/ChatList/components/ChatListItem.mjs.map +1 -1
- package/es/chat/ChatList/components/HistoryDivider.mjs +1 -1
- package/es/chat/ChatList/components/HistoryDivider.mjs.map +1 -1
- package/es/chat/ChatList/type.d.mts +2 -2
- package/es/chat/EditableMessageList/EditableMessageList.mjs +2 -3
- package/es/chat/EditableMessageList/EditableMessageList.mjs.map +1 -1
- package/es/chat/MessageInput/MessageInput.mjs +3 -3
- package/es/chat/MessageInput/MessageInput.mjs.map +1 -1
- package/es/chat/MessageInput/type.d.mts +2 -2
- package/es/chat/MessageModal/MessageModal.mjs +4 -5
- package/es/chat/MessageModal/MessageModal.mjs.map +1 -1
- package/es/chat/MessageModal/type.d.mts +3 -3
- package/es/chat/TokenTag/TokenTag.mjs +1 -1
- package/es/chat/TokenTag/TokenTag.mjs.map +1 -1
- package/es/color/ColorScales/ScaleRow.mjs +6 -4
- package/es/color/ColorScales/ScaleRow.mjs.map +1 -1
- package/es/color/ColorScales/index.mjs +10 -9
- package/es/color/ColorScales/index.mjs.map +1 -1
- package/es/color/CssVar/ScaleRow.mjs +6 -4
- package/es/color/CssVar/ScaleRow.mjs.map +1 -1
- package/es/color/CssVar/VarRow.mjs +6 -4
- package/es/color/CssVar/VarRow.mjs.map +1 -1
- package/es/color/CssVar/index.mjs +10 -9
- package/es/color/CssVar/index.mjs.map +1 -1
- package/es/index.d.mts +2 -1
- package/es/index.mjs +2 -1
- package/es/mobile/ChatInputArea/ChatInputArea.mjs +1 -1
- package/es/mobile/ChatInputArea/ChatInputArea.mjs.map +1 -1
- package/es/mobile/ChatInputArea/components/ChatSendButton.mjs +1 -1
- package/es/mobile/ChatInputArea/components/ChatSendButton.mjs.map +1 -1
- package/es/mobile/ChatInputArea/type.d.mts +6 -7
- package/es/static-css/baseline.mjs +0 -2
- package/es/static-css/baseline.mjs.map +1 -1
- package/es/storybook/StoryBook/index.mjs +1 -1
- package/es/storybook/StoryBook/index.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1,16 +1,44 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import DraggablePanel from "../../DraggablePanel/
|
|
2
|
+
import DraggablePanel from "../../base-ui/DraggablePanel/DraggablePanel.mjs";
|
|
3
3
|
import ChatInputAreaInner from "./components/ChatInputAreaInner.mjs";
|
|
4
4
|
import { styles } from "./style.mjs";
|
|
5
5
|
import { memo } from "react";
|
|
6
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { cx } from "antd-style";
|
|
7
8
|
//#region src/chat/ChatInputArea/ChatInputArea.tsx
|
|
8
9
|
const ChatInputArea = memo(({ ref, className, style, classNames, expand = true, setExpand, bottomAddons, topAddons, onSizeChange, heights, onSend, ...rest }) => {
|
|
10
|
+
const content = /* @__PURE__ */ jsxs("section", {
|
|
11
|
+
className: styles.container,
|
|
12
|
+
style: { minHeight: heights?.minHeight },
|
|
13
|
+
children: [
|
|
14
|
+
topAddons,
|
|
15
|
+
/* @__PURE__ */ jsx("div", {
|
|
16
|
+
className: styles.textareaContainer,
|
|
17
|
+
children: /* @__PURE__ */ jsx(ChatInputAreaInner, {
|
|
18
|
+
className: styles.textarea,
|
|
19
|
+
ref,
|
|
20
|
+
style: { paddingInline: 16 },
|
|
21
|
+
onSend: () => {
|
|
22
|
+
onSend?.();
|
|
23
|
+
setExpand?.(false);
|
|
24
|
+
},
|
|
25
|
+
...rest
|
|
26
|
+
})
|
|
27
|
+
}),
|
|
28
|
+
bottomAddons
|
|
29
|
+
]
|
|
30
|
+
});
|
|
31
|
+
if (expand) return /* @__PURE__ */ jsx("div", {
|
|
32
|
+
className: cx(styles.fullscreen, className),
|
|
33
|
+
style: {
|
|
34
|
+
insetBlockStart: heights?.headerHeight ?? 0,
|
|
35
|
+
...style
|
|
36
|
+
},
|
|
37
|
+
children: content
|
|
38
|
+
});
|
|
9
39
|
return /* @__PURE__ */ jsx(DraggablePanel, {
|
|
10
40
|
className,
|
|
11
41
|
classNames,
|
|
12
|
-
fullscreen: expand,
|
|
13
|
-
headerHeight: heights?.headerHeight,
|
|
14
42
|
maxHeight: heights?.maxHeight,
|
|
15
43
|
minHeight: heights?.minHeight,
|
|
16
44
|
placement: "bottom",
|
|
@@ -23,27 +51,7 @@ const ChatInputArea = memo(({ ref, className, style, classNames, expand = true,
|
|
|
23
51
|
...style
|
|
24
52
|
},
|
|
25
53
|
onSizeChange,
|
|
26
|
-
children:
|
|
27
|
-
className: styles.container,
|
|
28
|
-
style: { minHeight: heights?.minHeight },
|
|
29
|
-
children: [
|
|
30
|
-
topAddons,
|
|
31
|
-
/* @__PURE__ */ jsx("div", {
|
|
32
|
-
className: styles.textareaContainer,
|
|
33
|
-
children: /* @__PURE__ */ jsx(ChatInputAreaInner, {
|
|
34
|
-
className: styles.textarea,
|
|
35
|
-
ref,
|
|
36
|
-
style: { paddingInline: 16 },
|
|
37
|
-
onSend: () => {
|
|
38
|
-
onSend?.();
|
|
39
|
-
setExpand?.(false);
|
|
40
|
-
},
|
|
41
|
-
...rest
|
|
42
|
-
})
|
|
43
|
-
}),
|
|
44
|
-
bottomAddons
|
|
45
|
-
]
|
|
46
|
-
})
|
|
54
|
+
children: content
|
|
47
55
|
});
|
|
48
56
|
});
|
|
49
57
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatInputArea.mjs","names":[],"sources":["../../../src/chat/ChatInputArea/ChatInputArea.tsx"],"sourcesContent":["'use client';\n\nimport { memo } from 'react';\n\nimport DraggablePanel from '@/DraggablePanel';\n\nimport ChatInputAreaInner from './components/ChatInputAreaInner';\nimport { styles } from './style';\nimport type { ChatInputAreaProps } from './type';\n\nconst ChatInputArea = memo<ChatInputAreaProps>(\n ({\n ref,\n className,\n style,\n classNames,\n expand = true,\n setExpand,\n bottomAddons,\n topAddons,\n onSizeChange,\n heights,\n onSend,\n ...rest\n }) => {\n
|
|
1
|
+
{"version":3,"file":"ChatInputArea.mjs","names":[],"sources":["../../../src/chat/ChatInputArea/ChatInputArea.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { memo } from 'react';\n\nimport { DraggablePanel } from '@/base-ui/DraggablePanel';\n\nimport ChatInputAreaInner from './components/ChatInputAreaInner';\nimport { styles } from './style';\nimport type { ChatInputAreaProps } from './type';\n\nconst ChatInputArea = memo<ChatInputAreaProps>(\n ({\n ref,\n className,\n style,\n classNames,\n expand = true,\n setExpand,\n bottomAddons,\n topAddons,\n onSizeChange,\n heights,\n onSend,\n ...rest\n }) => {\n const content = (\n <section className={styles.container} style={{ minHeight: heights?.minHeight }}>\n {topAddons}\n <div className={styles.textareaContainer}>\n <ChatInputAreaInner\n className={styles.textarea}\n ref={ref}\n style={{\n paddingInline: 16,\n }}\n onSend={() => {\n onSend?.();\n setExpand?.(false);\n }}\n {...rest}\n />\n </div>\n {bottomAddons}\n </section>\n );\n\n if (expand)\n return (\n <div\n className={cx(styles.fullscreen, className)}\n style={{ insetBlockStart: heights?.headerHeight ?? 0, ...style }}\n >\n {content}\n </div>\n );\n\n return (\n <DraggablePanel\n className={className}\n classNames={classNames}\n maxHeight={heights?.maxHeight}\n minHeight={heights?.minHeight}\n placement=\"bottom\"\n size={{ height: heights?.inputHeight, width: '100%' }}\n style={{ zIndex: 10, ...style }}\n onSizeChange={onSizeChange}\n >\n {content}\n </DraggablePanel>\n );\n },\n);\n\nexport default ChatInputArea;\n"],"mappings":";;;;;;;;AAWA,MAAM,gBAAgB,MACnB,EACC,KACA,WACA,OACA,YACA,SAAS,MACT,WACA,cACA,WACA,cACA,SACA,QACA,GAAG,WACC;CACJ,MAAM,UACJ,qBAAC,WAAD;EAAS,WAAW,OAAO;EAAW,OAAO,EAAE,WAAW,SAAS,UAAU;EAA7E,UAAA;GACG;GACD,oBAAC,OAAD;IAAK,WAAW,OAAO;IACrB,UAAA,oBAAC,oBAAD;KACE,WAAW,OAAO;KACb;KACL,OAAO,EACL,eAAe,GACjB;KACA,cAAc;MACZ,SAAS;MACT,YAAY,KAAK;KACnB;KACA,GAAI;IACL,CAAA;GACE,CAAA;GACJ;EACM;;CAGX,IAAI,QACF,OACE,oBAAC,OAAD;EACE,WAAW,GAAG,OAAO,YAAY,SAAS;EAC1C,OAAO;GAAE,iBAAiB,SAAS,gBAAgB;GAAG,GAAG;EAAM;EAE9D,UAAA;CACE,CAAA;CAGT,OACE,oBAAC,gBAAD;EACa;EACC;EACZ,WAAW,SAAS;EACpB,WAAW,SAAS;EACpB,WAAU;EACV,MAAM;GAAE,QAAQ,SAAS;GAAa,OAAO;EAAO;EACpD,OAAO;GAAE,QAAQ;GAAI,GAAG;EAAM;EAChB;EAEb,UAAA;CACa,CAAA;AAEpB,CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import TextArea from "../../../Input/TextArea.mjs";
|
|
2
|
+
import TextArea from "../../../base-ui/Input/TextArea.mjs";
|
|
3
3
|
import { memo, useRef } from "react";
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
5
5
|
//#region src/chat/ChatInputArea/components/ChatInputAreaInner.tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatInputAreaInner.mjs","names":[],"sources":["../../../../src/chat/ChatInputArea/components/ChatInputAreaInner.tsx"],"sourcesContent":["'use client';\n\nimport { memo, useRef } from 'react';\n\nimport { TextArea } from '@/Input';\n\nimport type { ChatInputAreaInnerProps } from '../type';\n\nconst ChatInputAreaInner = memo<ChatInputAreaInnerProps>(\n ({\n ref,\n resize = false,\n onCompositionEnd,\n onPressEnter,\n onCompositionStart,\n className,\n onInput,\n loading,\n onSend,\n onBlur,\n onChange,\n ...rest\n }) => {\n const isChineseInput = useRef(false);\n\n return (\n <TextArea\n className={className}\n ref={ref}\n resize={resize}\n variant={'borderless'}\n onBlur={(e) => {\n onInput?.(e.target.value);\n onBlur?.(e);\n }}\n onChange={(e) => {\n onInput?.(e.target.value);\n onChange?.(e);\n }}\n onCompositionEnd={(e) => {\n isChineseInput.current = false;\n onCompositionEnd?.(e);\n }}\n onCompositionStart={(e) => {\n isChineseInput.current = true;\n onCompositionStart?.(e);\n }}\n onPressEnter={(e) => {\n onPressEnter?.(e);\n const isMobile = /mobi|android|iphone/i.test(navigator.userAgent);\n if (\n !loading &&\n !isChineseInput.current &&\n ((!isMobile && !e.shiftKey) || (isMobile && e.shiftKey))\n ) {\n e.preventDefault();\n onSend?.();\n }\n }}\n {...rest}\n />\n );\n },\n);\n\nexport default ChatInputAreaInner;\n"],"mappings":";;;;;AAQA,MAAM,qBAAqB,MACxB,EACC,KACA,SAAS,OACT,kBACA,cACA,oBACA,WACA,SACA,SACA,QACA,QACA,UACA,GAAG,WACC;CACJ,MAAM,iBAAiB,OAAO,KAAK;CAEnC,OACE,oBAAC,UAAD;EACa;EACN;EACG;EACR,SAAS;EACT,SAAS,MAAM;GACb,UAAU,EAAE,OAAO,KAAK;GACxB,SAAS,CAAC;EACZ;EACA,WAAW,MAAM;GACf,UAAU,EAAE,OAAO,KAAK;GACxB,WAAW,CAAC;EACd;EACA,mBAAmB,MAAM;GACvB,eAAe,UAAU;GACzB,mBAAmB,CAAC;EACtB;EACA,qBAAqB,MAAM;GACzB,eAAe,UAAU;GACzB,qBAAqB,CAAC;EACxB;EACA,eAAe,MAAM;GACnB,eAAe,CAAC;GAChB,MAAM,WAAW,uBAAuB,KAAK,UAAU,SAAS;GAChE,IACE,CAAC,WACD,CAAC,eAAe,YACd,CAAC,YAAY,CAAC,EAAE,YAAc,YAAY,EAAE,WAC9C;IACA,EAAE,eAAe;IACjB,SAAS;GACX;EACF;EACA,GAAI;CACL,CAAA;AAEL,CACF"}
|
|
1
|
+
{"version":3,"file":"ChatInputAreaInner.mjs","names":[],"sources":["../../../../src/chat/ChatInputArea/components/ChatInputAreaInner.tsx"],"sourcesContent":["'use client';\n\nimport { memo, useRef } from 'react';\n\nimport { TextArea } from '@/base-ui/Input';\n\nimport type { ChatInputAreaInnerProps } from '../type';\n\nconst ChatInputAreaInner = memo<ChatInputAreaInnerProps>(\n ({\n ref,\n resize = false,\n onCompositionEnd,\n onPressEnter,\n onCompositionStart,\n className,\n onInput,\n loading,\n onSend,\n onBlur,\n onChange,\n ...rest\n }) => {\n const isChineseInput = useRef(false);\n\n return (\n <TextArea\n className={className}\n ref={ref}\n resize={resize}\n variant={'borderless'}\n onBlur={(e) => {\n onInput?.(e.target.value);\n onBlur?.(e);\n }}\n onChange={(e) => {\n onInput?.(e.target.value);\n onChange?.(e);\n }}\n onCompositionEnd={(e) => {\n isChineseInput.current = false;\n onCompositionEnd?.(e);\n }}\n onCompositionStart={(e) => {\n isChineseInput.current = true;\n onCompositionStart?.(e);\n }}\n onPressEnter={(e) => {\n onPressEnter?.(e);\n const isMobile = /mobi|android|iphone/i.test(navigator.userAgent);\n if (\n !loading &&\n !isChineseInput.current &&\n ((!isMobile && !e.shiftKey) || (isMobile && e.shiftKey))\n ) {\n e.preventDefault();\n onSend?.();\n }\n }}\n {...rest}\n />\n );\n },\n);\n\nexport default ChatInputAreaInner;\n"],"mappings":";;;;;AAQA,MAAM,qBAAqB,MACxB,EACC,KACA,SAAS,OACT,kBACA,cACA,oBACA,WACA,SACA,SACA,QACA,QACA,UACA,GAAG,WACC;CACJ,MAAM,iBAAiB,OAAO,KAAK;CAEnC,OACE,oBAAC,UAAD;EACa;EACN;EACG;EACR,SAAS;EACT,SAAS,MAAM;GACb,UAAU,EAAE,OAAO,KAAK;GACxB,SAAS,CAAC;EACZ;EACA,WAAW,MAAM;GACf,UAAU,EAAE,OAAO,KAAK;GACxB,WAAW,CAAC;EACd;EACA,mBAAmB,MAAM;GACvB,eAAe,UAAU;GACzB,mBAAmB,CAAC;EACtB;EACA,qBAAqB,MAAM;GACzB,eAAe,UAAU;GACzB,qBAAqB,CAAC;EACxB;EACA,eAAe,MAAM;GACnB,eAAe,CAAC;GAChB,MAAM,WAAW,uBAAuB,KAAK,UAAU,SAAS;GAChE,IACE,CAAC,WACD,CAAC,eAAe,YACd,CAAC,YAAY,CAAC,EAAE,YAAc,YAAY,EAAE,WAC9C;IACA,EAAE,eAAe;IACjB,SAAS;GACX;EACF;EACA,GAAI;CACL,CAAA;AAEL,CACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import FlexBasic_default from "../../../Flex/FlexBasic.mjs";
|
|
2
2
|
import Icon from "../../../Icon/Icon.mjs";
|
|
3
|
-
import Button from "../../../Button/Button.mjs";
|
|
3
|
+
import Button from "../../../base-ui/Button/Button.mjs";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
import { cssVar } from "antd-style";
|
|
6
6
|
import { ArrowBigUp, CornerDownLeft, Loader2 } from "lucide-react";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatSendButton.mjs","names":["Flexbox"],"sources":["../../../../src/chat/ChatInputArea/components/ChatSendButton.tsx"],"sourcesContent":["import { cssVar } from 'antd-style';\nimport { ArrowBigUp, CornerDownLeft, Loader2 } from 'lucide-react';\nimport { type FC } from 'react';\n\nimport Button from '@/Button';\nimport { Flexbox } from '@/Flex';\nimport Icon from '@/Icon';\n\nimport type { ChatSendButtonProps } from '../type';\n\nconst ChatSendButton: FC<ChatSendButtonProps> = ({\n ref,\n leftAddons,\n rightAddons,\n texts,\n onSend,\n loading,\n onStop,\n ...rest\n}) => {\n return (\n <Flexbox\n horizontal\n align={'end'}\n distribution={'space-between'}\n flex={'none'}\n gap={8}\n paddingInline={16}\n ref={ref}\n {...rest}\n >\n <Flexbox horizontal align={'center'} gap={8}>\n {leftAddons}\n </Flexbox>\n <Flexbox horizontal align={'center'} gap={8}>\n <Flexbox\n horizontal\n gap={4}\n style={{ color: cssVar.colorTextDescription, fontSize: 12, marginRight: 12 }}\n >\n <Icon icon={CornerDownLeft} />\n <span>{texts?.send || 'Send'}</span>\n <span>/</span>\n <Flexbox horizontal>\n <Icon icon={ArrowBigUp} />\n <Icon icon={CornerDownLeft} />\n </Flexbox>\n <span>{texts?.warp || 'Warp'}</span>\n </Flexbox>\n {rightAddons}\n {loading ? (\n <Button icon={loading && Loader2} onClick={onStop}>\n {texts?.stop || 'Stop'}\n </Button>\n ) : (\n <Button type={'primary'} onClick={onSend}>\n {texts?.send || 'Send'}\n </Button>\n )}\n </Flexbox>\n </Flexbox>\n );\n};\n\nChatSendButton.displayName = 'ChatSendButton';\n\nexport default ChatSendButton;\n"],"mappings":";;;;;;;AAUA,MAAM,kBAA2C,EAC/C,KACA,YACA,aACA,OACA,QACA,SACA,QACA,GAAG,WACC;CACJ,OACE,qBAACA,mBAAD;EACE,YAAA;EACA,OAAO;EACP,cAAc;EACd,MAAM;EACN,KAAK;EACL,eAAe;EACV;EACL,GAAI;EARN,UAAA,CAUE,oBAACA,mBAAD;GAAS,YAAA;GAAW,OAAO;GAAU,KAAK;GACvC,UAAA;EACM,CAAA,GACT,qBAACA,mBAAD;GAAS,YAAA;GAAW,OAAO;GAAU,KAAK;GAA1C,UAAA;IACE,qBAACA,mBAAD;KACE,YAAA;KACA,KAAK;KACL,OAAO;MAAE,OAAO,OAAO;MAAsB,UAAU;MAAI,aAAa;KAAG;KAH7E,UAAA;MAKE,oBAAC,MAAD,EAAM,MAAM,eAAiB,CAAA;MAC7B,oBAAC,QAAD,EAAA,UAAO,OAAO,QAAQ,OAAa,CAAA;MACnC,oBAAC,QAAD,EAAA,UAAM,IAAO,CAAA;MACb,qBAACA,mBAAD;OAAS,YAAA;OAAT,UAAA,CACE,oBAAC,MAAD,EAAM,MAAM,WAAa,CAAA,GACzB,oBAAC,MAAD,EAAM,MAAM,eAAiB,CAAA,CACtB;;MACT,oBAAC,QAAD,EAAA,UAAO,OAAO,QAAQ,OAAa,CAAA;KAC5B;;IACR;IACA,UACC,oBAAC,QAAD;KAAQ,MAAM,WAAW;KAAS,SAAS;KACxC,UAAA,OAAO,QAAQ;IACV,CAAA,IAER,oBAAC,QAAD;KAAQ,MAAM;KAAW,SAAS;KAC/B,UAAA,OAAO,QAAQ;IACV,CAAA;GAEH;EACF,CAAA,CAAA;;AAEb;AAEA,eAAe,cAAc"}
|
|
1
|
+
{"version":3,"file":"ChatSendButton.mjs","names":["Flexbox"],"sources":["../../../../src/chat/ChatInputArea/components/ChatSendButton.tsx"],"sourcesContent":["import { cssVar } from 'antd-style';\nimport { ArrowBigUp, CornerDownLeft, Loader2 } from 'lucide-react';\nimport { type FC } from 'react';\n\nimport Button from '@/base-ui/Button';\nimport { Flexbox } from '@/Flex';\nimport Icon from '@/Icon';\n\nimport type { ChatSendButtonProps } from '../type';\n\nconst ChatSendButton: FC<ChatSendButtonProps> = ({\n ref,\n leftAddons,\n rightAddons,\n texts,\n onSend,\n loading,\n onStop,\n ...rest\n}) => {\n return (\n <Flexbox\n horizontal\n align={'end'}\n distribution={'space-between'}\n flex={'none'}\n gap={8}\n paddingInline={16}\n ref={ref}\n {...rest}\n >\n <Flexbox horizontal align={'center'} gap={8}>\n {leftAddons}\n </Flexbox>\n <Flexbox horizontal align={'center'} gap={8}>\n <Flexbox\n horizontal\n gap={4}\n style={{ color: cssVar.colorTextDescription, fontSize: 12, marginRight: 12 }}\n >\n <Icon icon={CornerDownLeft} />\n <span>{texts?.send || 'Send'}</span>\n <span>/</span>\n <Flexbox horizontal>\n <Icon icon={ArrowBigUp} />\n <Icon icon={CornerDownLeft} />\n </Flexbox>\n <span>{texts?.warp || 'Warp'}</span>\n </Flexbox>\n {rightAddons}\n {loading ? (\n <Button icon={loading && Loader2} onClick={onStop}>\n {texts?.stop || 'Stop'}\n </Button>\n ) : (\n <Button type={'primary'} onClick={onSend}>\n {texts?.send || 'Send'}\n </Button>\n )}\n </Flexbox>\n </Flexbox>\n );\n};\n\nChatSendButton.displayName = 'ChatSendButton';\n\nexport default ChatSendButton;\n"],"mappings":";;;;;;;AAUA,MAAM,kBAA2C,EAC/C,KACA,YACA,aACA,OACA,QACA,SACA,QACA,GAAG,WACC;CACJ,OACE,qBAACA,mBAAD;EACE,YAAA;EACA,OAAO;EACP,cAAc;EACd,MAAM;EACN,KAAK;EACL,eAAe;EACV;EACL,GAAI;EARN,UAAA,CAUE,oBAACA,mBAAD;GAAS,YAAA;GAAW,OAAO;GAAU,KAAK;GACvC,UAAA;EACM,CAAA,GACT,qBAACA,mBAAD;GAAS,YAAA;GAAW,OAAO;GAAU,KAAK;GAA1C,UAAA;IACE,qBAACA,mBAAD;KACE,YAAA;KACA,KAAK;KACL,OAAO;MAAE,OAAO,OAAO;MAAsB,UAAU;MAAI,aAAa;KAAG;KAH7E,UAAA;MAKE,oBAAC,MAAD,EAAM,MAAM,eAAiB,CAAA;MAC7B,oBAAC,QAAD,EAAA,UAAO,OAAO,QAAQ,OAAa,CAAA;MACnC,oBAAC,QAAD,EAAA,UAAM,IAAO,CAAA;MACb,qBAACA,mBAAD;OAAS,YAAA;OAAT,UAAA,CACE,oBAAC,MAAD,EAAM,MAAM,WAAa,CAAA,GACzB,oBAAC,MAAD,EAAM,MAAM,eAAiB,CAAA,CACtB;;MACT,oBAAC,QAAD,EAAA,UAAO,OAAO,QAAQ,OAAa,CAAA;KAC5B;;IACR;IACA,UACC,oBAAC,QAAD;KAAQ,MAAM,WAAW;KAAS,SAAS;KACxC,UAAA,OAAO,QAAQ;IACV,CAAA,IAER,oBAAC,QAAD;KAAQ,MAAM;KAAW,SAAS;KAC/B,UAAA,OAAO,QAAQ;IACV,CAAA;GAEH;EACF,CAAA,CAAA;;AAEb;AAEA,eAAe,cAAc"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { staticStylish } from "../../styles/theme/customStylishStatic.mjs";
|
|
2
2
|
import { createStaticStyles, cx } from "antd-style";
|
|
3
3
|
//#region src/chat/ChatInputArea/style.ts
|
|
4
|
-
const styles = createStaticStyles(({ css }) => {
|
|
4
|
+
const styles = createStaticStyles(({ css, cssVar }) => {
|
|
5
5
|
return {
|
|
6
6
|
container: css`
|
|
7
7
|
position: relative;
|
|
@@ -13,11 +13,22 @@ const styles = createStaticStyles(({ css }) => {
|
|
|
13
13
|
height: 100%;
|
|
14
14
|
padding-block: 8px 12px;
|
|
15
15
|
padding-inline: 0;
|
|
16
|
+
`,
|
|
17
|
+
fullscreen: css`
|
|
18
|
+
position: absolute;
|
|
19
|
+
z-index: 10;
|
|
20
|
+
inset-block-end: 0;
|
|
21
|
+
inset-inline: 0;
|
|
22
|
+
|
|
23
|
+
background: ${cssVar.colorBgContainer};
|
|
16
24
|
`,
|
|
17
25
|
textarea: css`
|
|
26
|
+
align-items: stretch;
|
|
27
|
+
|
|
18
28
|
height: 100% !important;
|
|
19
29
|
padding-block: 0;
|
|
20
30
|
padding-inline: 8px;
|
|
31
|
+
|
|
21
32
|
line-height: 1.5;
|
|
22
33
|
`,
|
|
23
34
|
textareaContainer: css`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.mjs","names":["lobeStaticStylish"],"sources":["../../../src/chat/ChatInputArea/style.ts"],"sourcesContent":["import { createStaticStyles, cx } from 'antd-style';\n\nimport { lobeStaticStylish } from '@/styles';\n\nexport const styles = createStaticStyles(({ css }) => {\n return {\n container: css`\n position: relative;\n\n display: flex;\n flex-direction: column;\n gap: 8px;\n\n height: 100%;\n padding-block: 8px 12px;\n padding-inline: 0;\n `,\n textarea: css`\n height: 100% !important;\n padding-block: 0;\n padding-inline: 8px;\n line-height: 1.5;\n `,\n textareaContainer: css`\n position: relative;\n flex: 1;\n `,\n };\n});\n\nexport const actionBarStyles = createStaticStyles(({ css }) => ({\n left: cx(\n lobeStaticStylish.noScrollbar,\n css`\n overflow: auto hidden;\n `,\n ),\n right: css``,\n root: css`\n position: relative;\n overflow: hidden;\n width: 100%;\n `,\n}));\n"],"mappings":";;;AAIA,MAAa,SAAS,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"style.mjs","names":["lobeStaticStylish"],"sources":["../../../src/chat/ChatInputArea/style.ts"],"sourcesContent":["import { createStaticStyles, cx } from 'antd-style';\n\nimport { lobeStaticStylish } from '@/styles';\n\nexport const styles = createStaticStyles(({ css, cssVar }) => {\n return {\n container: css`\n position: relative;\n\n display: flex;\n flex-direction: column;\n gap: 8px;\n\n height: 100%;\n padding-block: 8px 12px;\n padding-inline: 0;\n `,\n fullscreen: css`\n position: absolute;\n z-index: 10;\n inset-block-end: 0;\n inset-inline: 0;\n\n background: ${cssVar.colorBgContainer};\n `,\n textarea: css`\n align-items: stretch;\n\n height: 100% !important;\n padding-block: 0;\n padding-inline: 8px;\n\n line-height: 1.5;\n `,\n textareaContainer: css`\n position: relative;\n flex: 1;\n `,\n };\n});\n\nexport const actionBarStyles = createStaticStyles(({ css }) => ({\n left: cx(\n lobeStaticStylish.noScrollbar,\n css`\n overflow: auto hidden;\n `,\n ),\n right: css``,\n root: css`\n position: relative;\n overflow: hidden;\n width: 100%;\n `,\n}));\n"],"mappings":";;;AAIA,MAAa,SAAS,oBAAoB,EAAE,KAAK,aAAa;CAC5D,OAAO;EACL,WAAW,GAAG;;;;;;;;;;;EAWd,YAAY,GAAG;;;;;;oBAMC,OAAO,iBAAiB;;EAExC,UAAU,GAAG;;;;;;;;;EASb,mBAAmB,GAAG;;;;CAIxB;AACF,CAAC;AAED,MAAa,kBAAkB,oBAAoB,EAAE,WAAW;CAC9D,MAAM,GACJA,cAAkB,aAClB,GAAG;;KAGL;CACA,OAAO,GAAG;CACV,MAAM,GAAG;;;;;AAKX,EAAE"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { FlexboxProps } from "../../Flex/type.mjs";
|
|
2
2
|
import "../../Flex/index.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import "../../
|
|
5
|
-
import {
|
|
6
|
-
import "../../
|
|
3
|
+
import { TextAreaProps } from "../../base-ui/Input/type.mjs";
|
|
4
|
+
import "../../base-ui/Input/index.mjs";
|
|
5
|
+
import { DraggablePanelProps } from "../../base-ui/DraggablePanel/type.mjs";
|
|
6
|
+
import "../../base-ui/DraggablePanel/index.mjs";
|
|
7
7
|
import { CSSProperties, ReactNode, Ref } from "react";
|
|
8
|
-
import { TextAreaRef } from "antd/es/input/TextArea.js";
|
|
9
8
|
//#region src/chat/ChatInputArea/type.d.ts
|
|
10
9
|
interface ChatInputAreaProps extends Omit<ChatInputAreaInnerProps, 'classNames'> {
|
|
11
10
|
bottomAddons?: ReactNode;
|
|
@@ -18,7 +17,7 @@ interface ChatInputAreaProps extends Omit<ChatInputAreaInnerProps, 'classNames'>
|
|
|
18
17
|
minHeight?: number;
|
|
19
18
|
};
|
|
20
19
|
onSizeChange?: DraggablePanelProps['onSizeChange'];
|
|
21
|
-
ref?: Ref<
|
|
20
|
+
ref?: Ref<HTMLTextAreaElement>;
|
|
22
21
|
setExpand?: (expand: boolean) => void;
|
|
23
22
|
topAddons?: ReactNode;
|
|
24
23
|
}
|
|
@@ -29,12 +28,12 @@ interface ChatInputActionBarProps {
|
|
|
29
28
|
ref?: Ref<HTMLDivElement>;
|
|
30
29
|
rightAddons?: ReactNode;
|
|
31
30
|
}
|
|
32
|
-
interface ChatInputAreaInnerProps extends Omit<TextAreaProps
|
|
31
|
+
interface ChatInputAreaInnerProps extends Omit<TextAreaProps, 'onInput'> {
|
|
33
32
|
className?: string;
|
|
34
33
|
loading?: boolean;
|
|
35
34
|
onInput?: (value: string) => void;
|
|
36
35
|
onSend?: () => void;
|
|
37
|
-
ref?: Ref<
|
|
36
|
+
ref?: Ref<HTMLTextAreaElement>;
|
|
38
37
|
style?: CSSProperties;
|
|
39
38
|
}
|
|
40
39
|
interface ChatSendButtonProps extends FlexboxProps {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import FlexBasic_default from "../../../Flex/FlexBasic.mjs";
|
|
2
|
-
import Avatar$1 from "../../../Avatar/index.mjs";
|
|
2
|
+
import Avatar$1 from "../../../base-ui/Avatar/index.mjs";
|
|
3
3
|
import { styles } from "../style.mjs";
|
|
4
4
|
import Loading from "./Loading.mjs";
|
|
5
5
|
import { useMemo } from "react";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.mjs","names":["A","Flexbox"],"sources":["../../../../src/chat/ChatItem/components/Avatar.tsx"],"sourcesContent":["import { type CSSProperties, type FC, useMemo } from 'react';\n\nimport A from '@/Avatar';\nimport { Flexbox } from '@/Flex';\n\nimport { styles } from '../style';\nimport type { ChatItemProps } from '../type';\nimport Loading from './Loading';\n\nexport interface AvatarProps {\n addon?: ChatItemProps['avatarAddon'];\n alt?: string;\n avatar: ChatItemProps['avatar'];\n loading?: ChatItemProps['loading'];\n onClick?: ChatItemProps['onAvatarClick'];\n placement?: ChatItemProps['placement'];\n size?: number;\n style?: CSSProperties;\n unoptimized?: boolean;\n}\n\nconst Avatar: FC<AvatarProps> = ({\n loading,\n avatar,\n placement,\n unoptimized,\n addon,\n onClick,\n size = 40,\n style,\n alt,\n}) => {\n const cssVariables = useMemo<Record<string, string>>(\n () => ({\n '--chat-item-avatar-size': `${size}px`,\n }),\n [size],\n );\n\n const avatarContent = (\n <div className={styles.avatarContainer} style={{ ...cssVariables, ...style }}>\n <A\n alt={alt || avatar.title}\n animation={loading}\n avatar={avatar.avatar}\n background={avatar.backgroundColor}\n size={size}\n title={avatar.title}\n unoptimized={unoptimized}\n onClick={onClick}\n />\n <Loading loading={loading} placement={placement} />\n </div>\n );\n\n if (!addon) return avatarContent;\n return (\n <Flexbox align={'center'} className={styles.avatarGroupContainer} gap={8}>\n {avatarContent}\n {addon}\n </Flexbox>\n );\n};\n\nexport default Avatar;\n"],"mappings":";;;;;;;AAqBA,MAAM,UAA2B,EAC/B,SACA,QACA,WACA,aACA,OACA,SACA,OAAO,IACP,OACA,UACI;CACJ,MAAM,eAAe,eACZ,EACL,2BAA2B,GAAG,KAAK,IACrC,IACA,CAAC,IAAI,CACP;CAEA,MAAM,gBACJ,qBAAC,OAAD;EAAK,WAAW,OAAO;EAAiB,OAAO;GAAE,GAAG;GAAc,GAAG;EAAM;EAA3E,UAAA,CACE,oBAACA,UAAD;GACE,KAAK,OAAO,OAAO;GACnB,WAAW;GACX,QAAQ,OAAO;GACf,YAAY,OAAO;GACb;GACN,OAAO,OAAO;GACD;GACJ;EACV,CAAA,GACD,oBAAC,SAAD;GAAkB;GAAoB;EAAY,CAAA,CAC/C;;CAGP,IAAI,CAAC,OAAO,OAAO;CACnB,OACE,qBAACC,mBAAD;EAAS,OAAO;EAAU,WAAW,OAAO;EAAsB,KAAK;EAAvE,UAAA,CACG,eACA,KACM;;AAEb"}
|
|
1
|
+
{"version":3,"file":"Avatar.mjs","names":["A","Flexbox"],"sources":["../../../../src/chat/ChatItem/components/Avatar.tsx"],"sourcesContent":["import { type CSSProperties, type FC, useMemo } from 'react';\n\nimport A from '@/base-ui/Avatar';\nimport { Flexbox } from '@/Flex';\n\nimport { styles } from '../style';\nimport type { ChatItemProps } from '../type';\nimport Loading from './Loading';\n\nexport interface AvatarProps {\n addon?: ChatItemProps['avatarAddon'];\n alt?: string;\n avatar: ChatItemProps['avatar'];\n loading?: ChatItemProps['loading'];\n onClick?: ChatItemProps['onAvatarClick'];\n placement?: ChatItemProps['placement'];\n size?: number;\n style?: CSSProperties;\n unoptimized?: boolean;\n}\n\nconst Avatar: FC<AvatarProps> = ({\n loading,\n avatar,\n placement,\n unoptimized,\n addon,\n onClick,\n size = 40,\n style,\n alt,\n}) => {\n const cssVariables = useMemo<Record<string, string>>(\n () => ({\n '--chat-item-avatar-size': `${size}px`,\n }),\n [size],\n );\n\n const avatarContent = (\n <div className={styles.avatarContainer} style={{ ...cssVariables, ...style }}>\n <A\n alt={alt || avatar.title}\n animation={loading}\n avatar={avatar.avatar}\n background={avatar.backgroundColor}\n size={size}\n title={avatar.title}\n unoptimized={unoptimized}\n onClick={onClick}\n />\n <Loading loading={loading} placement={placement} />\n </div>\n );\n\n if (!addon) return avatarContent;\n return (\n <Flexbox align={'center'} className={styles.avatarGroupContainer} gap={8}>\n {avatarContent}\n {addon}\n </Flexbox>\n );\n};\n\nexport default Avatar;\n"],"mappings":";;;;;;;AAqBA,MAAM,UAA2B,EAC/B,SACA,QACA,WACA,aACA,OACA,SACA,OAAO,IACP,OACA,UACI;CACJ,MAAM,eAAe,eACZ,EACL,2BAA2B,GAAG,KAAK,IACrC,IACA,CAAC,IAAI,CACP;CAEA,MAAM,gBACJ,qBAAC,OAAD;EAAK,WAAW,OAAO;EAAiB,OAAO;GAAE,GAAG;GAAc,GAAG;EAAM;EAA3E,UAAA,CACE,oBAACA,UAAD;GACE,KAAK,OAAO,OAAO;GACnB,WAAW;GACX,QAAQ,OAAO;GACf,YAAY,OAAO;GACb;GACN,OAAO,OAAO;GACD;GACJ;EACV,CAAA,GACD,oBAAC,SAAD;GAAkB;GAAoB;EAAY,CAAA,CAC/C;;CAGP,IAAI,CAAC,OAAO,OAAO;CACnB,OACE,qBAACC,mBAAD;EAAS,OAAO;EAAU,WAAW,OAAO;EAAsB,KAAK;EAAvE,UAAA,CACG,eACA,KACM;;AAEb"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import FlexBasic_default from "../../../Flex/FlexBasic.mjs";
|
|
2
|
-
import Alert from "../../../Alert/Alert.mjs";
|
|
2
|
+
import Alert from "../../../base-ui/Alert/Alert.mjs";
|
|
3
3
|
import { styles } from "../style.mjs";
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
5
5
|
//#region src/chat/ChatItem/components/ErrorContent.tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorContent.mjs","names":["Flexbox"],"sources":["../../../../src/chat/ChatItem/components/ErrorContent.tsx"],"sourcesContent":["import type { FC } from 'react';\n\nimport Alert from '@/Alert';\nimport { type ChatItemProps } from '@/chat/ChatItem';\nimport { Flexbox } from '@/Flex';\n\nimport { styles } from '../style';\n\nexport interface ErrorContentProps {\n error?: ChatItemProps['error'];\n message?: ChatItemProps['errorMessage'];\n placement?: ChatItemProps['placement'];\n}\n\nconst ErrorContent: FC<ErrorContentProps> = ({ message, error }) => {\n return (\n <Flexbox className={styles.errorContainer}>\n <Alert showIcon closable={false} extra={message} type={'error'} {...error} />\n </Flexbox>\n );\n};\n\nexport default ErrorContent;\n"],"mappings":";;;;;AAcA,MAAM,gBAAuC,EAAE,SAAS,YAAY;CAClE,OACE,oBAACA,mBAAD;EAAS,WAAW,OAAO;EACzB,UAAA,oBAAC,OAAD;GAAO,UAAA;GAAS,UAAU;GAAO,OAAO;GAAS,MAAM;GAAS,GAAI;EAAQ,CAAA;CACrE,CAAA;AAEb"}
|
|
1
|
+
{"version":3,"file":"ErrorContent.mjs","names":["Flexbox"],"sources":["../../../../src/chat/ChatItem/components/ErrorContent.tsx"],"sourcesContent":["import type { FC } from 'react';\n\nimport Alert from '@/base-ui/Alert';\nimport { type ChatItemProps } from '@/chat/ChatItem';\nimport { Flexbox } from '@/Flex';\n\nimport { styles } from '../style';\n\nexport interface ErrorContentProps {\n error?: ChatItemProps['error'];\n message?: ChatItemProps['errorMessage'];\n placement?: ChatItemProps['placement'];\n}\n\nconst ErrorContent: FC<ErrorContentProps> = ({ message, error }) => {\n return (\n <Flexbox className={styles.errorContainer}>\n <Alert showIcon closable={false} extra={message} type={'error'} {...error} />\n </Flexbox>\n );\n};\n\nexport default ErrorContent;\n"],"mappings":";;;;;AAcA,MAAM,gBAAuC,EAAE,SAAS,YAAY;CAClE,OACE,oBAACA,mBAAD;EAAS,WAAW,OAAO;EACzB,UAAA,oBAAC,OAAD;GAAO,UAAA;GAAS,UAAU;GAAO,OAAO;GAAS,MAAM;GAAS,GAAI;EAAQ,CAAA;CACrE,CAAA;AAEb"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { FlexboxProps } from "../../Flex/type.mjs";
|
|
2
2
|
import "../../Flex/index.mjs";
|
|
3
3
|
import { DivProps } from "../../types/index.mjs";
|
|
4
|
-
import {
|
|
5
|
-
import "../../
|
|
6
|
-
import { AvatarProps } from "../../Avatar/type.mjs";
|
|
7
|
-
import "../../Avatar/index.mjs";
|
|
4
|
+
import { AvatarProps } from "../../base-ui/Avatar/type.mjs";
|
|
5
|
+
import "../../base-ui/Avatar/index.mjs";
|
|
8
6
|
import { MarkdownProps } from "../../Markdown/type.mjs";
|
|
9
7
|
import "../../Markdown/index.mjs";
|
|
8
|
+
import { AlertProps } from "../../base-ui/Alert/type.mjs";
|
|
9
|
+
import "../../base-ui/Alert/index.mjs";
|
|
10
10
|
import { EditableMessageProps } from "../EditableMessage/type.mjs";
|
|
11
11
|
import "../EditableMessage/index.mjs";
|
|
12
12
|
import { MetaData } from "../types/meta.mjs";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { ToastHost } from "../../base-ui/Toast/imperative.mjs";
|
|
2
3
|
import ChatListItem from "./components/ChatListItem.mjs";
|
|
3
4
|
import HistoryDivider from "./components/HistoryDivider.mjs";
|
|
4
5
|
import { styles } from "./style.mjs";
|
|
@@ -7,10 +8,10 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
7
8
|
import { cx } from "antd-style";
|
|
8
9
|
//#region src/chat/ChatList/ChatList.tsx
|
|
9
10
|
const ChatList = memo(({ onActionsClick, onAvatarsClick, renderMessagesExtra, className, data, variant = "bubble", text, showTitle, onMessageChange, renderMessages, renderErrorMessages, loadingId, renderItems, enableHistoryCount, renderActions, historyCount = 0, showAvatar, ...rest }) => {
|
|
10
|
-
return /* @__PURE__ */
|
|
11
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
11
12
|
className: cx(styles.container, className),
|
|
12
13
|
...rest,
|
|
13
|
-
children: data.map((item, index) => {
|
|
14
|
+
children: [data.map((item, index) => {
|
|
14
15
|
const itemProps = {
|
|
15
16
|
loading: loadingId === item.id,
|
|
16
17
|
onActionsClick,
|
|
@@ -35,7 +36,7 @@ const ChatList = memo(({ onActionsClick, onAvatarsClick, renderMessagesExtra, cl
|
|
|
35
36
|
...itemProps,
|
|
36
37
|
...item
|
|
37
38
|
})] }, item.id);
|
|
38
|
-
})
|
|
39
|
+
}), /* @__PURE__ */ jsx(ToastHost, {})]
|
|
39
40
|
});
|
|
40
41
|
});
|
|
41
42
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatList.mjs","names":[],"sources":["../../../src/chat/ChatList/ChatList.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { Fragment, memo } from 'react';\n\nimport ChatListItem from './components/ChatListItem';\nimport HistoryDivider from './components/HistoryDivider';\nimport { styles } from './style';\nimport type { ChatListProps } from './type';\n\nconst ChatList = memo<ChatListProps>(\n ({\n onActionsClick,\n onAvatarsClick,\n renderMessagesExtra,\n className,\n data,\n variant = 'bubble',\n text,\n showTitle,\n onMessageChange,\n renderMessages,\n renderErrorMessages,\n loadingId,\n renderItems,\n enableHistoryCount,\n renderActions,\n historyCount = 0,\n showAvatar,\n ...rest\n }) => {\n return (\n <div className={cx(styles.container, className)} {...rest}>\n {data.map((item, index) => {\n const itemProps = {\n loading: loadingId === item.id,\n onActionsClick,\n onAvatarsClick,\n onMessageChange,\n renderActions,\n renderErrorMessages,\n renderItems,\n renderMessages,\n renderMessagesExtra,\n showAvatar,\n showTitle,\n text,\n variant,\n };\n\n const historyLength = data.length;\n const enableHistoryDivider =\n enableHistoryCount &&\n historyLength > historyCount &&\n historyCount === historyLength - index + 1;\n\n return (\n <Fragment key={item.id}>\n <HistoryDivider enable={enableHistoryDivider} text={text?.history} />\n <ChatListItem {...itemProps} {...item} />\n </Fragment>\n );\n })}\n </div>\n );\n },\n);\n\nexport default ChatList;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChatList.mjs","names":[],"sources":["../../../src/chat/ChatList/ChatList.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { Fragment, memo } from 'react';\n\nimport { ToastHost } from '@/base-ui/Toast';\n\nimport ChatListItem from './components/ChatListItem';\nimport HistoryDivider from './components/HistoryDivider';\nimport { styles } from './style';\nimport type { ChatListProps } from './type';\n\nconst ChatList = memo<ChatListProps>(\n ({\n onActionsClick,\n onAvatarsClick,\n renderMessagesExtra,\n className,\n data,\n variant = 'bubble',\n text,\n showTitle,\n onMessageChange,\n renderMessages,\n renderErrorMessages,\n loadingId,\n renderItems,\n enableHistoryCount,\n renderActions,\n historyCount = 0,\n showAvatar,\n ...rest\n }) => {\n return (\n <div className={cx(styles.container, className)} {...rest}>\n {data.map((item, index) => {\n const itemProps = {\n loading: loadingId === item.id,\n onActionsClick,\n onAvatarsClick,\n onMessageChange,\n renderActions,\n renderErrorMessages,\n renderItems,\n renderMessages,\n renderMessagesExtra,\n showAvatar,\n showTitle,\n text,\n variant,\n };\n\n const historyLength = data.length;\n const enableHistoryDivider =\n enableHistoryCount &&\n historyLength > historyCount &&\n historyCount === historyLength - index + 1;\n\n return (\n <Fragment key={item.id}>\n <HistoryDivider enable={enableHistoryDivider} text={text?.history} />\n <ChatListItem {...itemProps} {...item} />\n </Fragment>\n );\n })}\n <ToastHost />\n </div>\n );\n },\n);\n\nexport default ChatList;\n"],"mappings":";;;;;;;;;AAYA,MAAM,WAAW,MACd,EACC,gBACA,gBACA,qBACA,WACA,MACA,UAAU,UACV,MACA,WACA,iBACA,gBACA,qBACA,WACA,aACA,oBACA,eACA,eAAe,GACf,YACA,GAAG,WACC;CACJ,OACE,qBAAC,OAAD;EAAK,WAAW,GAAG,OAAO,WAAW,SAAS;EAAG,GAAI;EAArD,UAAA,CACG,KAAK,KAAK,MAAM,UAAU;GACzB,MAAM,YAAY;IAChB,SAAS,cAAc,KAAK;IAC5B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAEA,MAAM,gBAAgB,KAAK;GAC3B,MAAM,uBACJ,sBACA,gBAAgB,gBAChB,iBAAiB,gBAAgB,QAAQ;GAE3C,OACE,qBAAC,UAAD,EAAA,UAAA,CACE,oBAAC,gBAAD;IAAgB,QAAQ;IAAsB,MAAM,MAAM;GAAU,CAAA,GACpE,oBAAC,cAAD;IAAc,GAAI;IAAW,GAAI;GAAO,CAAA,CAChC,EAAA,GAHK,KAAK,EAGV;EAEd,CAAC,GACD,oBAAC,WAAD,CAAY,CAAA,CACT;;AAET,CACF"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { copyToClipboard } from "../../../utils/copyToClipboard.mjs";
|
|
2
|
+
import { toast } from "../../../base-ui/Toast/imperative.mjs";
|
|
2
3
|
import ChatItem from "../../ChatItem/ChatItem.mjs";
|
|
3
4
|
import ChatActionsBar from "./ChatActionsBar.mjs";
|
|
4
5
|
import { memo, useCallback, useMemo, useState } from "react";
|
|
5
6
|
import { jsx } from "react/jsx-runtime";
|
|
6
|
-
import { App } from "antd";
|
|
7
7
|
//#region src/chat/ChatList/components/ChatListItem.tsx
|
|
8
8
|
const ChatListItem = memo((props) => {
|
|
9
9
|
const { renderMessagesExtra, showTitle, onActionsClick, onAvatarsClick, onMessageChange, variant, text, renderMessages, renderErrorMessages, renderActions, loading, groupNav, renderItems, showAvatar, ...item } = props;
|
|
10
10
|
const [editing, setEditing] = useState(false);
|
|
11
|
-
const { message } = App.useApp();
|
|
12
11
|
const RenderItem = useMemo(() => {
|
|
13
12
|
if (!renderItems || !item?.role) return;
|
|
14
13
|
let renderFunction;
|
|
@@ -54,7 +53,7 @@ const ChatListItem = memo((props) => {
|
|
|
54
53
|
switch (action.key) {
|
|
55
54
|
case "copy":
|
|
56
55
|
await copyToClipboard(data.content);
|
|
57
|
-
|
|
56
|
+
toast.success(text?.copySuccess || "Copy Success");
|
|
58
57
|
break;
|
|
59
58
|
case "edit": setEditing(true);
|
|
60
59
|
}
|
|
@@ -72,11 +71,10 @@ const ChatListItem = memo((props) => {
|
|
|
72
71
|
]);
|
|
73
72
|
const error = useMemo(() => {
|
|
74
73
|
if (!item.error) return;
|
|
75
|
-
const message = item.error?.message;
|
|
76
74
|
let alertConfig = {};
|
|
77
75
|
if (item.error.type && renderErrorMessages?.[item.error.type]) alertConfig = renderErrorMessages[item.error.type]?.config;
|
|
78
76
|
return {
|
|
79
|
-
message,
|
|
77
|
+
title: item.error?.message,
|
|
80
78
|
...alertConfig
|
|
81
79
|
};
|
|
82
80
|
}, [renderErrorMessages, item.error]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatListItem.mjs","names":[],"sources":["../../../../src/chat/ChatList/components/ChatListItem.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"ChatListItem.mjs","names":[],"sources":["../../../../src/chat/ChatList/components/ChatListItem.tsx"],"sourcesContent":["import { memo, type ReactNode, useCallback, useMemo, useState } from 'react';\n\nimport { type AlertProps } from '@/base-ui/Alert';\nimport { toast } from '@/base-ui/Toast';\nimport ChatItem from '@/chat/ChatItem';\nimport { type ChatMessage } from '@/chat/types';\nimport { copyToClipboard } from '@/utils/copyToClipboard';\n\nimport { type ChatListItemProps, type ListItemProps } from '../type';\nimport ChatActionsBar from './ChatActionsBar';\n\nconst ChatListItem = memo<ChatListItemProps>((props) => {\n const {\n renderMessagesExtra,\n showTitle,\n onActionsClick,\n onAvatarsClick,\n onMessageChange,\n variant,\n text,\n renderMessages,\n renderErrorMessages,\n renderActions,\n loading,\n groupNav,\n renderItems,\n showAvatar,\n ...item\n } = props;\n\n const [editing, setEditing] = useState(false);\n\n const RenderItem = useMemo(() => {\n if (!renderItems || !item?.role) return;\n let renderFunction;\n if (renderItems?.[item.role]) renderFunction = renderItems[item.role];\n if (!renderFunction && renderItems?.['default']) renderFunction = renderItems['default'];\n if (!renderFunction) return;\n return renderFunction;\n }, [renderItems?.[item.role]]);\n\n const RenderMessage = useCallback(\n ({ editableContent, data }: { data: ChatMessage; editableContent: ReactNode }) => {\n if (!renderMessages || !item?.role) return;\n let RenderFunction;\n if (renderMessages?.[item.role]) RenderFunction = renderMessages[item.role];\n if (!RenderFunction && renderMessages?.['default'])\n RenderFunction = renderMessages['default'];\n if (!RenderFunction) return;\n return <RenderFunction {...data} editableContent={editableContent} />;\n },\n [renderMessages?.[item.role]],\n );\n\n const MessageExtra = useCallback(\n ({ data }: { data: ChatMessage }) => {\n if (!renderMessagesExtra || !item?.role) return;\n let RenderFunction;\n if (renderMessagesExtra?.[item.role]) RenderFunction = renderMessagesExtra[item.role];\n if (renderMessagesExtra?.['default']) RenderFunction = renderMessagesExtra['default'];\n if (!RenderFunction) return;\n return <RenderFunction {...data} />;\n },\n [renderMessagesExtra?.[item.role]],\n );\n\n const ErrorMessage = useCallback(\n ({ data }: { data: ChatMessage }) => {\n if (!renderErrorMessages || !item?.error?.type) return;\n let RenderFunction;\n if (renderErrorMessages?.[item.error.type])\n RenderFunction = renderErrorMessages[item.error.type].Render;\n if (!RenderFunction && renderErrorMessages?.['default'])\n RenderFunction = renderErrorMessages['default'].Render;\n if (!RenderFunction) return;\n return <RenderFunction {...data} />;\n },\n [renderErrorMessages],\n );\n\n const Actions = useCallback(\n ({ data }: { data: ChatMessage }) => {\n if (!renderActions || !item?.role) return;\n let RenderFunction;\n if (renderActions?.[item.role]) RenderFunction = renderActions[item.role];\n if (renderActions?.['default']) RenderFunction = renderActions['default'];\n if (!RenderFunction) RenderFunction = ChatActionsBar;\n\n const handleActionClick: ListItemProps['onActionsClick'] = async (action, data) => {\n switch (action.key) {\n case 'copy': {\n await copyToClipboard(data.content);\n toast.success(text?.copySuccess || 'Copy Success');\n break;\n }\n case 'edit': {\n setEditing(true);\n }\n }\n\n onActionsClick?.(action, data);\n };\n\n return (\n <RenderFunction\n {...data}\n text={text}\n onActionClick={(actionKey) => handleActionClick?.(actionKey, data)}\n />\n );\n },\n [renderActions?.[item.role], text, onActionsClick],\n );\n\n const error = useMemo(() => {\n if (!item.error) return;\n let alertConfig = {};\n if (item.error.type && renderErrorMessages?.[item.error.type]) {\n alertConfig = renderErrorMessages[item.error.type]?.config as AlertProps;\n }\n return {\n title: item.error?.message,\n ...alertConfig,\n };\n }, [renderErrorMessages, item.error]);\n\n if (RenderItem) return <RenderItem key={item.id} {...props} />;\n\n return (\n <ChatItem\n actions={<Actions data={item} />}\n avatar={item.meta}\n avatarAddon={groupNav}\n editing={editing}\n error={error}\n errorMessage={<ErrorMessage data={item} />}\n loading={loading}\n message={item.content}\n messageExtra={<MessageExtra data={item} />}\n placement={variant === 'bubble' ? (item.role === 'user' ? 'right' : 'left') : 'left'}\n primary={item.role === 'user'}\n showAvatar={showAvatar}\n showTitle={showTitle}\n text={text}\n time={item.updateAt || item.createAt}\n variant={variant}\n renderMessage={(editableContent) => (\n <RenderMessage data={item} editableContent={editableContent} />\n )}\n onAvatarClick={onAvatarsClick?.(item.role)}\n onChange={(value) => onMessageChange?.(item.id, value)}\n onEditingChange={setEditing}\n onDoubleClick={(e) => {\n if (item.id === 'default' || item.error) return;\n if (item.role && ['assistant', 'user'].includes(item.role) && e.altKey) {\n setEditing(true);\n }\n }}\n />\n );\n});\n\nChatListItem.displayName = 'ChatListItem';\n\nexport default ChatListItem;\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Divider from "../../../base-ui/Divider/Divider.mjs";
|
|
2
2
|
import Icon from "../../../Icon/Icon.mjs";
|
|
3
|
-
import Tag from "../../../Tag/Tag.mjs";
|
|
3
|
+
import Tag from "../../../base-ui/Tag/Tag.mjs";
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
5
5
|
import { Timer } from "lucide-react";
|
|
6
6
|
//#region src/chat/ChatList/components/HistoryDivider.tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HistoryDivider.mjs","names":[],"sources":["../../../../src/chat/ChatList/components/HistoryDivider.tsx"],"sourcesContent":["import { Timer } from 'lucide-react';\nimport { type FC } from 'react';\n\nimport Divider from '@/base-ui/Divider';\nimport
|
|
1
|
+
{"version":3,"file":"HistoryDivider.mjs","names":[],"sources":["../../../../src/chat/ChatList/components/HistoryDivider.tsx"],"sourcesContent":["import { Timer } from 'lucide-react';\nimport { type FC } from 'react';\n\nimport Divider from '@/base-ui/Divider';\nimport Tag from '@/base-ui/Tag';\nimport Icon from '@/Icon';\n\ninterface HistoryDividerProps {\n enable?: boolean;\n text?: string;\n}\n\nconst HistoryDivider: FC<HistoryDividerProps> = ({ enable, text }) => {\n if (!enable) return null;\n\n return (\n <div style={{ padding: '0 20px' }}>\n <Divider style={{ marginBlock: 16 }}>\n <Tag icon={<Icon icon={Timer} />}>{text || 'History Message'}</Tag>\n </Divider>\n </div>\n );\n};\n\nexport default HistoryDivider;\n"],"mappings":";;;;;;AAYA,MAAM,kBAA2C,EAAE,QAAQ,WAAW;CACpE,IAAI,CAAC,QAAQ,OAAO;CAEpB,OACE,oBAAC,OAAD;EAAK,OAAO,EAAE,SAAS,SAAS;EAC9B,UAAA,oBAAC,SAAD;GAAS,OAAO,EAAE,aAAa,GAAG;GAChC,UAAA,oBAAC,KAAD;IAAK,MAAM,oBAAC,MAAD,EAAM,MAAM,MAAQ,CAAA;IAAI,UAAA,QAAQ;GAAuB,CAAA;EAC3D,CAAA;CACN,CAAA;AAET"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { DivProps } from "../../types/index.mjs";
|
|
2
2
|
import { ActionIconGroupEvent, ActionIconGroupProps } from "../../ActionIconGroup/type.mjs";
|
|
3
3
|
import "../../ActionIconGroup/index.mjs";
|
|
4
|
-
import { AlertProps } from "../../Alert/type.mjs";
|
|
5
|
-
import "../../Alert/index.mjs";
|
|
4
|
+
import { AlertProps } from "../../base-ui/Alert/type.mjs";
|
|
5
|
+
import "../../base-ui/Alert/index.mjs";
|
|
6
6
|
import { LLMRoleType } from "../types/llm.mjs";
|
|
7
7
|
import { ChatMessage } from "../types/chatMessage.mjs";
|
|
8
8
|
import "../types/index.mjs";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import FlexBasic_default from "../../Flex/FlexBasic.mjs";
|
|
3
|
+
import Button from "../../base-ui/Button/Button.mjs";
|
|
3
4
|
import ActionIcon from "../../base-ui/ActionIcon/ActionIcon.mjs";
|
|
4
|
-
import
|
|
5
|
+
import Select from "../../base-ui/Select/Select.mjs";
|
|
5
6
|
import { useTranslation } from "../../i18n/useTranslation.mjs";
|
|
6
7
|
import ControlInput from "../../EditableText/ControlInput.mjs";
|
|
7
|
-
import Select from "../../Select/Select.mjs";
|
|
8
8
|
import editableMessage_default from "../../i18n/resources/en/editableMessage.mjs";
|
|
9
9
|
import { messagesReducer } from "./messageReducer.mjs";
|
|
10
10
|
import { memo, useEffect, useReducer } from "react";
|
|
@@ -36,7 +36,6 @@ const EditableMessageList = memo(({ disabled, dataSources, onChange, texts }) =>
|
|
|
36
36
|
/* @__PURE__ */ jsx(Select, {
|
|
37
37
|
disabled,
|
|
38
38
|
style: { width: 120 },
|
|
39
|
-
styles: { popup: { root: { zIndex: 100 } } },
|
|
40
39
|
value: item.role,
|
|
41
40
|
options: [
|
|
42
41
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditableMessageList.mjs","names":["editableMessageMessages","Flexbox"],"sources":["../../../src/chat/EditableMessageList/EditableMessageList.tsx"],"sourcesContent":["'use client';\n\nimport isEqual from 'fast-deep-equal';\nimport { Plus, Trash } from 'lucide-react';\nimport { memo, useEffect, useReducer } from 'react';\n\nimport ActionIcon from '@/base-ui/ActionIcon';\nimport Button from '@/Button';\nimport ControlInput from '@/EditableText/ControlInput';\nimport { Flexbox } from '@/Flex';\nimport editableMessageMessages from '@/i18n/resources/en/editableMessage';\nimport { useTranslation } from '@/i18n/useTranslation';\
|
|
1
|
+
{"version":3,"file":"EditableMessageList.mjs","names":["editableMessageMessages","Flexbox"],"sources":["../../../src/chat/EditableMessageList/EditableMessageList.tsx"],"sourcesContent":["'use client';\n\nimport isEqual from 'fast-deep-equal';\nimport { Plus, Trash } from 'lucide-react';\nimport { memo, useEffect, useReducer } from 'react';\n\nimport ActionIcon from '@/base-ui/ActionIcon';\nimport Button from '@/base-ui/Button';\nimport Select from '@/base-ui/Select';\nimport ControlInput from '@/EditableText/ControlInput';\nimport { Flexbox } from '@/Flex';\nimport editableMessageMessages from '@/i18n/resources/en/editableMessage';\nimport { useTranslation } from '@/i18n/useTranslation';\n\nimport { messagesReducer } from './messageReducer';\nimport { type EditableMessageListProps } from './type';\n\nconst EditableMessageList = memo<EditableMessageListProps>(\n ({ disabled, dataSources, onChange, texts }) => {\n const [chatMessages, dispatch] = useReducer(messagesReducer, dataSources);\n const { t } = useTranslation(editableMessageMessages);\n\n const addPropsText = texts?.addProps ?? t('editableMessage.addProps');\n const deleteText = texts?.delete ?? t('editableMessage.delete');\n const inputPlaceholderText = texts?.inputPlaceholder ?? t('editableMessage.inputPlaceholder');\n const outputPlaceholderText =\n texts?.outputPlaceholder ?? t('editableMessage.outputPlaceholder');\n const systemText = texts?.system ?? t('editableMessage.system');\n const inputText = texts?.input ?? t('editableMessage.input');\n const outputText = texts?.output ?? t('editableMessage.output');\n\n useEffect(() => {\n if (!isEqual(dataSources, chatMessages)) {\n onChange?.(chatMessages);\n }\n }, [chatMessages]);\n\n return dataSources ? (\n <Flexbox gap={12}>\n {chatMessages.map((item, index) => (\n <Flexbox\n horizontal\n align={'center'}\n gap={8}\n key={`${index}-${item.content}`}\n width={'100%'}\n >\n <Select\n disabled={disabled}\n style={{ width: 120 }}\n value={item.role}\n options={[\n { label: systemText, value: 'system' },\n { label: inputText, value: 'user' },\n { label: outputText, value: 'assistant' },\n ]}\n onChange={(value) => {\n dispatch({ index, role: value, type: 'updateMessageRole' });\n }}\n />\n <ControlInput\n disabled={disabled}\n placeholder={item.role === 'user' ? inputPlaceholderText : outputPlaceholderText}\n value={item.content}\n onChange={(e) => {\n dispatch({ index, message: e, type: 'updateMessage' });\n }}\n />\n <ActionIcon\n icon={Trash}\n title={deleteText}\n variant={'filled'}\n onClick={() => {\n dispatch({ index, type: 'deleteMessage' });\n }}\n />\n </Flexbox>\n ))}\n\n <Button\n block\n disabled={disabled}\n icon={Plus}\n onClick={() => {\n const lastMeg = chatMessages.at(-1);\n\n dispatch({\n message: { content: '', role: lastMeg?.role === 'user' ? 'assistant' : 'user' },\n type: 'addMessage',\n });\n }}\n >\n {addPropsText}\n </Button>\n </Flexbox>\n ) : undefined;\n },\n isEqual,\n);\n\nEditableMessageList.displayName = 'EditableMessageList';\n\nexport default EditableMessageList;\n"],"mappings":";;;;;;;;;;;;;;AAiBA,MAAM,sBAAsB,MACzB,EAAE,UAAU,aAAa,UAAU,YAAY;CAC9C,MAAM,CAAC,cAAc,YAAY,WAAW,iBAAiB,WAAW;CACxE,MAAM,EAAE,MAAM,eAAeA,uBAAuB;CAEpD,MAAM,eAAe,OAAO,YAAY,EAAE,0BAA0B;CACpE,MAAM,aAAa,OAAO,UAAU,EAAE,wBAAwB;CAC9D,MAAM,uBAAuB,OAAO,oBAAoB,EAAE,kCAAkC;CAC5F,MAAM,wBACJ,OAAO,qBAAqB,EAAE,mCAAmC;CACnE,MAAM,aAAa,OAAO,UAAU,EAAE,wBAAwB;CAC9D,MAAM,YAAY,OAAO,SAAS,EAAE,uBAAuB;CAC3D,MAAM,aAAa,OAAO,UAAU,EAAE,wBAAwB;CAE9D,gBAAgB;EACd,IAAI,CAAC,QAAQ,aAAa,YAAY,GACpC,WAAW,YAAY;CAE3B,GAAG,CAAC,YAAY,CAAC;CAEjB,OAAO,cACL,qBAACC,mBAAD;EAAS,KAAK;EAAd,UAAA,CACG,aAAa,KAAK,MAAM,UACvB,qBAACA,mBAAD;GACE,YAAA;GACA,OAAO;GACP,KAAK;GAEL,OAAO;GALT,UAAA;IAOE,oBAAC,QAAD;KACY;KACV,OAAO,EAAE,OAAO,IAAI;KACpB,OAAO,KAAK;KACZ,SAAS;MACP;OAAE,OAAO;OAAY,OAAO;MAAS;MACrC;OAAE,OAAO;OAAW,OAAO;MAAO;MAClC;OAAE,OAAO;OAAY,OAAO;MAAY;KAC1C;KACA,WAAW,UAAU;MACnB,SAAS;OAAE;OAAO,MAAM;OAAO,MAAM;MAAoB,CAAC;KAC5D;IACD,CAAA;IACD,oBAAC,cAAD;KACY;KACV,aAAa,KAAK,SAAS,SAAS,uBAAuB;KAC3D,OAAO,KAAK;KACZ,WAAW,MAAM;MACf,SAAS;OAAE;OAAO,SAAS;OAAG,MAAM;MAAgB,CAAC;KACvD;IACD,CAAA;IACD,oBAAC,YAAD;KACE,MAAM;KACN,OAAO;KACP,SAAS;KACT,eAAe;MACb,SAAS;OAAE;OAAO,MAAM;MAAgB,CAAC;KAC3C;IACD,CAAA;GACM;EAhCF,GAAA,GAAG,MAAM,GAAG,KAAK,SAgCf,CACV,GAED,oBAAC,QAAD;GACE,OAAA;GACU;GACV,MAAM;GACN,eAAe;IACb,MAAM,UAAU,aAAa,GAAG,EAAE;IAElC,SAAS;KACP,SAAS;MAAE,SAAS;MAAI,MAAM,SAAS,SAAS,SAAS,cAAc;KAAO;KAC9E,MAAM;IACR,CAAC;GACH;GAEC,UAAA;EACK,CAAA,CACD;CACP,CAAA,IAAA,KAAA;AACN,GACA,OACF;AAEA,oBAAoB,cAAc"}
|
|
@@ -3,9 +3,9 @@ import FlexBasic_default from "../../Flex/FlexBasic.mjs";
|
|
|
3
3
|
import { KeyMapEnum } from "../../Hotkey/const.mjs";
|
|
4
4
|
import { combineKeys } from "../../Hotkey/utils.mjs";
|
|
5
5
|
import { Tooltip } from "../../base-ui/Tooltip/Tooltip.mjs";
|
|
6
|
-
import Button from "../../Button/Button.mjs";
|
|
6
|
+
import Button from "../../base-ui/Button/Button.mjs";
|
|
7
7
|
import CodeEditor from "../../CodeEditor/CodeEditor.mjs";
|
|
8
|
-
import TextArea from "../../Input/TextArea.mjs";
|
|
8
|
+
import TextArea from "../../base-ui/Input/TextArea.mjs";
|
|
9
9
|
import { styles } from "./style.mjs";
|
|
10
10
|
import { memo, useState } from "react";
|
|
11
11
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -34,7 +34,7 @@ const MessageInput = memo(({ text, variant = "borderless", onCancel, defaultValu
|
|
|
34
34
|
});
|
|
35
35
|
const cancllButton = /* @__PURE__ */ jsx(Button, {
|
|
36
36
|
size: editButtonSize,
|
|
37
|
-
|
|
37
|
+
type: "fill",
|
|
38
38
|
onClick: handleCancel,
|
|
39
39
|
children: text?.cancel || "Cancel"
|
|
40
40
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageInput.mjs","names":["Flexbox"],"sources":["../../../src/chat/MessageInput/MessageInput.tsx"],"sourcesContent":["'use client';\n\nimport { cx, useResponsive } from 'antd-style';\nimport { memo, useState } from 'react';\nimport { useHotkeys } from 'react-hotkeys-hook';\n\nimport Button from '@/Button';\nimport CodeEditor from '@/CodeEditor';\nimport { Flexbox } from '@/Flex';\nimport { KeyMapEnum } from '@/Hotkey/const';\nimport { combineKeys } from '@/Hotkey/utils';\nimport
|
|
1
|
+
{"version":3,"file":"MessageInput.mjs","names":["Flexbox"],"sources":["../../../src/chat/MessageInput/MessageInput.tsx"],"sourcesContent":["'use client';\n\nimport { cx, useResponsive } from 'antd-style';\nimport { memo, useState } from 'react';\nimport { useHotkeys } from 'react-hotkeys-hook';\n\nimport Button from '@/base-ui/Button';\nimport { TextArea } from '@/base-ui/Input';\nimport CodeEditor from '@/CodeEditor';\nimport { Flexbox } from '@/Flex';\nimport { KeyMapEnum } from '@/Hotkey/const';\nimport { combineKeys } from '@/Hotkey/utils';\nimport Tooltip from '@/Tooltip';\n\nimport { styles } from './style';\nimport type { MessageInputProps } from './type';\n\nconst MessageInput = memo<MessageInputProps>(\n ({\n text,\n variant = 'borderless',\n onCancel,\n defaultValue,\n onConfirm,\n renderButtons,\n placeholder,\n styles: customStyles,\n style,\n editButtonSize = 'middle',\n classNames,\n shortcut,\n language = 'markdown',\n ...rest\n }) => {\n const { mobile } = useResponsive();\n const [temporaryValue, setValue] = useState<string>(defaultValue || '');\n const confirmHotkey = combineKeys([KeyMapEnum.Mod, KeyMapEnum.Enter]);\n const confirmText = text?.confirm || 'Confirm';\n const cancelHotkey = combineKeys([KeyMapEnum.Esc]);\n const cancelText = text?.cancel || 'Cancel';\n\n const handleConfirm = () => onConfirm?.(temporaryValue);\n const handleCancel = () => onCancel?.();\n\n useHotkeys(confirmHotkey, handleConfirm, {\n enableOnFormTags: true,\n enabled: shortcut,\n preventDefault: true,\n });\n\n const confirmButton = (\n <Button size={editButtonSize} type=\"primary\" onClick={handleConfirm}>\n {confirmText}\n </Button>\n );\n\n const cancllButton = (\n <Button size={editButtonSize} type={'fill'} onClick={handleCancel}>\n {text?.cancel || 'Cancel'}\n </Button>\n );\n\n return (\n <Flexbox gap={16} style={{ flex: 1, width: '100%', ...style }} {...rest}>\n {mobile ? (\n <TextArea\n autoSize\n className={cx(styles, classNames?.editor)}\n placeholder={placeholder}\n style={customStyles?.editor}\n value={temporaryValue}\n variant={variant}\n onBlur={(e) => setValue(e.target.value)}\n onChange={(e) => setValue(e.target.value)}\n />\n ) : (\n <CodeEditor\n className={cx(styles, classNames?.editor)}\n classNames={classNames}\n language={language}\n placeholder={placeholder}\n style={customStyles?.editor}\n styles={customStyles}\n value={temporaryValue}\n variant={variant}\n onBlur={(e) => setValue(e.target.value)}\n onValueChange={(e) => setValue(e)}\n />\n )}\n <Flexbox direction={'horizontal-reverse'} gap={8}>\n {renderButtons ? (\n renderButtons(temporaryValue).map((buttonProps, index) => (\n <Button key={index} size={editButtonSize} {...buttonProps} />\n ))\n ) : (\n <>\n {shortcut ? (\n <Tooltip hotkey={confirmHotkey} title={confirmText}>\n {confirmButton}\n </Tooltip>\n ) : (\n confirmButton\n )}\n {shortcut ? (\n <Tooltip hotkey={cancelHotkey} title={cancelText}>\n {cancllButton}\n </Tooltip>\n ) : (\n cancllButton\n )}\n </>\n )}\n </Flexbox>\n </Flexbox>\n );\n },\n);\n\nexport default MessageInput;\n"],"mappings":";;;;;;;;;;;;;;AAiBA,MAAM,eAAe,MAClB,EACC,MACA,UAAU,cACV,UACA,cACA,WACA,eACA,aACA,QAAQ,cACR,OACA,iBAAiB,UACjB,YACA,UACA,WAAW,YACX,GAAG,WACC;CACJ,MAAM,EAAE,WAAW,cAAc;CACjC,MAAM,CAAC,gBAAgB,YAAY,SAAiB,gBAAgB,EAAE;CACtE,MAAM,gBAAgB,YAAY,CAAC,WAAW,KAAK,WAAW,KAAK,CAAC;CACpE,MAAM,cAAc,MAAM,WAAW;CACrC,MAAM,eAAe,YAAY,CAAC,WAAW,GAAG,CAAC;CACjD,MAAM,aAAa,MAAM,UAAU;CAEnC,MAAM,sBAAsB,YAAY,cAAc;CACtD,MAAM,qBAAqB,WAAW;CAEtC,WAAW,eAAe,eAAe;EACvC,kBAAkB;EAClB,SAAS;EACT,gBAAgB;CAClB,CAAC;CAED,MAAM,gBACJ,oBAAC,QAAD;EAAQ,MAAM;EAAgB,MAAK;EAAU,SAAS;EACnD,UAAA;CACK,CAAA;CAGV,MAAM,eACJ,oBAAC,QAAD;EAAQ,MAAM;EAAgB,MAAM;EAAQ,SAAS;EAClD,UAAA,MAAM,UAAU;CACX,CAAA;CAGV,OACE,qBAACA,mBAAD;EAAS,KAAK;EAAI,OAAO;GAAE,MAAM;GAAG,OAAO;GAAQ,GAAG;EAAM;EAAG,GAAI;EAAnE,UAAA,CACG,SACC,oBAAC,UAAD;GACE,UAAA;GACA,WAAW,GAAG,QAAQ,YAAY,MAAM;GAC3B;GACb,OAAO,cAAc;GACrB,OAAO;GACE;GACT,SAAS,MAAM,SAAS,EAAE,OAAO,KAAK;GACtC,WAAW,MAAM,SAAS,EAAE,OAAO,KAAK;EACzC,CAAA,IAED,oBAAC,YAAD;GACE,WAAW,GAAG,QAAQ,YAAY,MAAM;GAC5B;GACF;GACG;GACb,OAAO,cAAc;GACrB,QAAQ;GACR,OAAO;GACE;GACT,SAAS,MAAM,SAAS,EAAE,OAAO,KAAK;GACtC,gBAAgB,MAAM,SAAS,CAAC;EACjC,CAAA,GAEH,oBAACA,mBAAD;GAAS,WAAW;GAAsB,KAAK;GAC5C,UAAA,gBACC,cAAc,cAAc,CAAC,CAAC,KAAK,aAAa,UAC9C,oBAAC,QAAD;IAAoB,MAAM;IAAgB,GAAI;GAAc,GAA/C,KAA+C,CAC7D,IAED,qBAAA,YAAA,EAAA,UAAA,CACG,WACC,oBAAC,SAAD;IAAS,QAAQ;IAAe,OAAO;IACpC,UAAA;GACM,CAAA,IAET,eAED,WACC,oBAAC,SAAD;IAAS,QAAQ;IAAc,OAAO;IACnC,UAAA;GACM,CAAA,IAET,YAEF,EAAA,CAAA;EAEG,CAAA,CACF;;AAEb,CACF"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { FlexboxProps } from "../../Flex/type.mjs";
|
|
2
2
|
import "../../Flex/index.mjs";
|
|
3
|
-
import { ButtonProps } from "../../Button/type.mjs";
|
|
4
|
-
import "../../Button/index.mjs";
|
|
5
3
|
import { CodeEditorProps } from "../../CodeEditor/type.mjs";
|
|
6
4
|
import "../../CodeEditor/index.mjs";
|
|
5
|
+
import { ButtonProps } from "../../base-ui/Button/type.mjs";
|
|
6
|
+
import "../../base-ui/Button/index.mjs";
|
|
7
7
|
import { CSSProperties } from "react";
|
|
8
8
|
//#region src/chat/MessageInput/type.d.ts
|
|
9
9
|
interface MessageInputProps extends FlexboxProps {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import FlexBasic_default from "../../Flex/FlexBasic.mjs";
|
|
3
|
-
import Button from "../../Button/Button.mjs";
|
|
3
|
+
import Button from "../../base-ui/Button/Button.mjs";
|
|
4
4
|
import CodeEditor from "../../CodeEditor/CodeEditor.mjs";
|
|
5
5
|
import { useTranslation } from "../../i18n/useTranslation.mjs";
|
|
6
|
-
import
|
|
7
|
-
import TextArea from "../../Input/TextArea.mjs";
|
|
6
|
+
import TextArea from "../../base-ui/Input/TextArea.mjs";
|
|
8
7
|
import Markdown from "../../Markdown/Markdown.mjs";
|
|
8
|
+
import Modal from "../../base-ui/Modal/Modal.mjs";
|
|
9
9
|
import { styles } from "../MessageInput/style.mjs";
|
|
10
10
|
import messageModal_default from "../../i18n/resources/en/messageModal.mjs";
|
|
11
11
|
import { memo, useState } from "react";
|
|
@@ -13,7 +13,7 @@ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
|
13
13
|
import { useResponsive } from "antd-style";
|
|
14
14
|
import useMergeState from "use-merge-value";
|
|
15
15
|
//#region src/chat/MessageModal/MessageModal.tsx
|
|
16
|
-
const MessageModal = memo(({
|
|
16
|
+
const MessageModal = memo(({ editing, open, height = "75vh", onOpenChange, onEditingChange, placeholder, value, language = "markdown", onChange, text, footer, extra }) => {
|
|
17
17
|
const { mobile } = useResponsive();
|
|
18
18
|
const { t } = useTranslation(messageModal_default);
|
|
19
19
|
const [isEdit, setTyping] = useMergeState(false, {
|
|
@@ -54,7 +54,6 @@ const MessageModal = memo(({ panelRef, editing, open, height = "75vh", onOpenCha
|
|
|
54
54
|
height,
|
|
55
55
|
okText: editText,
|
|
56
56
|
open: showModal,
|
|
57
|
-
panelRef,
|
|
58
57
|
title: text?.title,
|
|
59
58
|
onOk: () => setTyping(true),
|
|
60
59
|
onCancel: () => {
|