@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.
Files changed (83) hide show
  1. package/es/Image/index.d.mts +2 -1
  2. package/es/Image/index.mjs +2 -1
  3. package/es/Image/index.mjs.map +1 -1
  4. package/es/Image/useImagePreview.d.mts +11 -0
  5. package/es/Image/useImagePreview.mjs +32 -0
  6. package/es/Image/useImagePreview.mjs.map +1 -0
  7. package/es/Image/viewer/registry.d.mts +1 -1
  8. package/es/awesome/BottomGradientButton/BottomGradientButton.d.mts +2 -3
  9. package/es/awesome/BottomGradientButton/BottomGradientButton.mjs +2 -2
  10. package/es/awesome/BottomGradientButton/BottomGradientButton.mjs.map +1 -1
  11. package/es/awesome/BottomGradientButton/index.d.mts +1 -1
  12. package/es/awesome/BottomGradientButton/style.mjs +4 -1
  13. package/es/awesome/BottomGradientButton/style.mjs.map +1 -1
  14. package/es/awesome/BottomGradientButton/type.d.mts +2 -2
  15. package/es/awesome/GradientButton/GradientButton.mjs +2 -2
  16. package/es/awesome/GradientButton/GradientButton.mjs.map +1 -1
  17. package/es/awesome/GradientButton/type.d.mts +2 -2
  18. package/es/awesome/Hero/Hero.mjs +35 -29
  19. package/es/awesome/Hero/Hero.mjs.map +1 -1
  20. package/es/awesome/Hero/style.mjs +4 -0
  21. package/es/awesome/Hero/style.mjs.map +1 -1
  22. package/es/awesome/index.d.mts +1 -1
  23. package/es/awesome/landingActions.mjs +1 -1
  24. package/es/awesome/landingActions.mjs.map +1 -1
  25. package/es/base-ui/Input/style.mjs +5 -0
  26. package/es/base-ui/Input/style.mjs.map +1 -1
  27. package/es/base-ui/index.d.mts +5 -5
  28. package/es/chat/BackBottom/BackBottom.mjs +4 -4
  29. package/es/chat/BackBottom/BackBottom.mjs.map +1 -1
  30. package/es/chat/BackBottom/type.d.mts +3 -4
  31. package/es/chat/ChatInputArea/ChatInputArea.mjs +32 -24
  32. package/es/chat/ChatInputArea/ChatInputArea.mjs.map +1 -1
  33. package/es/chat/ChatInputArea/components/ChatInputAreaInner.mjs +1 -1
  34. package/es/chat/ChatInputArea/components/ChatInputAreaInner.mjs.map +1 -1
  35. package/es/chat/ChatInputArea/components/ChatSendButton.mjs +1 -1
  36. package/es/chat/ChatInputArea/components/ChatSendButton.mjs.map +1 -1
  37. package/es/chat/ChatInputArea/style.mjs +12 -1
  38. package/es/chat/ChatInputArea/style.mjs.map +1 -1
  39. package/es/chat/ChatInputArea/type.d.mts +7 -8
  40. package/es/chat/ChatItem/components/Avatar.mjs +1 -1
  41. package/es/chat/ChatItem/components/Avatar.mjs.map +1 -1
  42. package/es/chat/ChatItem/components/ErrorContent.mjs +1 -1
  43. package/es/chat/ChatItem/components/ErrorContent.mjs.map +1 -1
  44. package/es/chat/ChatItem/type.d.mts +4 -4
  45. package/es/chat/ChatList/ChatList.mjs +4 -3
  46. package/es/chat/ChatList/ChatList.mjs.map +1 -1
  47. package/es/chat/ChatList/components/ChatListItem.mjs +3 -5
  48. package/es/chat/ChatList/components/ChatListItem.mjs.map +1 -1
  49. package/es/chat/ChatList/components/HistoryDivider.mjs +1 -1
  50. package/es/chat/ChatList/components/HistoryDivider.mjs.map +1 -1
  51. package/es/chat/ChatList/type.d.mts +2 -2
  52. package/es/chat/EditableMessageList/EditableMessageList.mjs +2 -3
  53. package/es/chat/EditableMessageList/EditableMessageList.mjs.map +1 -1
  54. package/es/chat/MessageInput/MessageInput.mjs +3 -3
  55. package/es/chat/MessageInput/MessageInput.mjs.map +1 -1
  56. package/es/chat/MessageInput/type.d.mts +2 -2
  57. package/es/chat/MessageModal/MessageModal.mjs +4 -5
  58. package/es/chat/MessageModal/MessageModal.mjs.map +1 -1
  59. package/es/chat/MessageModal/type.d.mts +3 -3
  60. package/es/chat/TokenTag/TokenTag.mjs +1 -1
  61. package/es/chat/TokenTag/TokenTag.mjs.map +1 -1
  62. package/es/color/ColorScales/ScaleRow.mjs +6 -4
  63. package/es/color/ColorScales/ScaleRow.mjs.map +1 -1
  64. package/es/color/ColorScales/index.mjs +10 -9
  65. package/es/color/ColorScales/index.mjs.map +1 -1
  66. package/es/color/CssVar/ScaleRow.mjs +6 -4
  67. package/es/color/CssVar/ScaleRow.mjs.map +1 -1
  68. package/es/color/CssVar/VarRow.mjs +6 -4
  69. package/es/color/CssVar/VarRow.mjs.map +1 -1
  70. package/es/color/CssVar/index.mjs +10 -9
  71. package/es/color/CssVar/index.mjs.map +1 -1
  72. package/es/index.d.mts +2 -1
  73. package/es/index.mjs +2 -1
  74. package/es/mobile/ChatInputArea/ChatInputArea.mjs +1 -1
  75. package/es/mobile/ChatInputArea/ChatInputArea.mjs.map +1 -1
  76. package/es/mobile/ChatInputArea/components/ChatSendButton.mjs +1 -1
  77. package/es/mobile/ChatInputArea/components/ChatSendButton.mjs.map +1 -1
  78. package/es/mobile/ChatInputArea/type.d.mts +6 -7
  79. package/es/static-css/baseline.mjs +0 -2
  80. package/es/static-css/baseline.mjs.map +1 -1
  81. package/es/storybook/StoryBook/index.mjs +1 -1
  82. package/es/storybook/StoryBook/index.mjs.map +1 -1
  83. package/package.json +1 -1
@@ -1,16 +1,44 @@
1
1
  "use client";
2
- import DraggablePanel from "../../DraggablePanel/index.mjs";
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: /* @__PURE__ */ jsxs("section", {
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 return (\n <DraggablePanel\n className={className}\n classNames={classNames}\n fullscreen={expand}\n headerHeight={heights?.headerHeight}\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 <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 </DraggablePanel>\n );\n },\n);\n\nexport default ChatInputArea;\n"],"mappings":";;;;;;;AAUA,MAAM,gBAAgB,MACnB,EACC,KACA,WACA,OACA,YACA,SAAS,MACT,WACA,cACA,WACA,cACA,SACA,QACA,GAAG,WACC;CACJ,OACE,oBAAC,gBAAD;EACa;EACC;EACZ,YAAY;EACZ,cAAc,SAAS;EACvB,WAAW,SAAS;EACpB,WAAW,SAAS;EACpB,WAAU;EACV,MAAM;GAAE,QAAQ,SAAS;GAAa,OAAO;EAAO;EACpD,OAAO;GAAE,QAAQ;GAAI,GAAG;EAAM;EAChB;EAEd,UAAA,qBAAC,WAAD;GAAS,WAAW,OAAO;GAAW,OAAO,EAAE,WAAW,SAAS,UAAU;GAA7E,UAAA;IACG;IACD,oBAAC,OAAD;KAAK,WAAW,OAAO;KACrB,UAAA,oBAAC,oBAAD;MACE,WAAW,OAAO;MACb;MACL,OAAO,EACL,eAAe,GACjB;MACA,cAAc;OACZ,SAAS;OACT,YAAY,KAAK;MACnB;MACA,GAAI;KACL,CAAA;IACE,CAAA;IACJ;GACM;;CACK,CAAA;AAEpB,CACF"}
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,UAAU;CACpD,OAAO;EACL,WAAW,GAAG;;;;;;;;;;;EAWd,UAAU,GAAG;;;;;;EAMb,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
+ {"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 { DraggablePanelProps } from "../../DraggablePanel/type.mjs";
4
- import "../../DraggablePanel/index.mjs";
5
- import { TextAreaProps as TextAreaProps$1 } from "../../Input/type.mjs";
6
- import "../../Input/index.mjs";
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<TextAreaRef>;
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$1, 'onInput'> {
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<TextAreaRef>;
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 { AlertProps } from "../../Alert/type.mjs";
5
- import "../../Alert/index.mjs";
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__ */ jsx("div", {
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":";;;;;;;;AAUA,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,oBAAC,OAAD;EAAK,WAAW,GAAG,OAAO,WAAW,SAAS;EAAG,GAAI;EAClD,UAAA,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;CACE,CAAA;AAET,CACF"}
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
- message.success(text?.copySuccess || "Copy Success");
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 { App } from 'antd';\nimport { memo, type ReactNode, useCallback, useMemo, useState } from 'react';\n\nimport { type AlertProps } from '@/Alert';\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 { message } = App.useApp();\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 message.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 const message = item.error?.message;\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 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
+ {"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 Icon from '@/Icon';\nimport Tag from '@/Tag';\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
+ {"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 Button from "../../Button/Button.mjs";
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';\nimport Select from '@/Select';\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 styles={{ popup: { root: { zIndex: 100 } } }}\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,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,IAAI,EAAE,EAAE;KAC3C,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;EAjCF,GAAA,GAAG,MAAM,GAAG,KAAK,SAiCf,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"}
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
- variant: "filled",
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 TextArea from '@/Input/TextArea';\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} variant={'filled'} 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,SAAS;EAAU,SAAS;EACvD,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
+ {"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 Modal from "../../Modal/Modal.mjs";
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(({ panelRef, editing, open, height = "75vh", onOpenChange, onEditingChange, placeholder, value, language = "markdown", onChange, text, footer, extra }) => {
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: () => {