@agentscope-ai/chat 1.1.46-beta.1767753123812 → 1.1.46-beta.1767868158421
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/components/Accordion/style.ts +1 -3
- package/components/AgentScopeRuntimeWebUI/core/Layout/index.tsx +4 -3
- package/components/AgentScopeRuntimeWebUI/core/Sessions/index.tsx +4 -2
- package/components/AgentScopeRuntimeWebUI/core/types/IChatAnywhere.ts +6 -0
- package/components/AssetsPreview/Audio.tsx +5 -0
- package/components/AssetsPreview/Image.tsx +19 -0
- package/components/AssetsPreview/Video.tsx +5 -0
- package/components/AssetsPreview/demo/index.tsx +15 -0
- package/components/AssetsPreview/index.en-US.md +12 -0
- package/components/AssetsPreview/index.tsx +62 -0
- package/components/AssetsPreview/index.zh-CN.md +11 -0
- package/components/AssetsPreview/style.ts +60 -0
- package/components/AssetsPreview/types.tsx +14 -0
- package/components/ImageGenerator/Spin.tsx +1 -0
- package/components/ImageGenerator/demo/basic.tsx +1 -1
- package/components/index.ts +5 -2
- package/lib/Accordion/style.js +1 -1
- package/lib/AgentScopeRuntimeWebUI/core/Layout/index.js +6 -0
- package/lib/AgentScopeRuntimeWebUI/core/Sessions/index.js +1 -1
- package/lib/AgentScopeRuntimeWebUI/core/types/IChatAnywhere.d.ts +5 -0
- package/lib/AssetsPreview/Audio.d.ts +2 -0
- package/lib/AssetsPreview/Audio.js +6 -0
- package/lib/AssetsPreview/Image.d.ts +2 -0
- package/lib/AssetsPreview/Image.js +24 -0
- package/lib/AssetsPreview/Video.d.ts +2 -0
- package/lib/AssetsPreview/Video.js +6 -0
- package/lib/AssetsPreview/index.d.ts +12 -0
- package/lib/AssetsPreview/index.js +77 -0
- package/lib/AssetsPreview/style.d.ts +3 -0
- package/lib/AssetsPreview/style.js +8 -0
- package/lib/AssetsPreview/types.d.ts +14 -0
- package/lib/AssetsPreview/types.js +1 -0
- package/lib/ImageGenerator/Spin.js +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/package.json +1 -1
|
@@ -12,13 +12,11 @@ export default createGlobalStyle`
|
|
|
12
12
|
.anticon-spin {
|
|
13
13
|
animation-duration: 2s;
|
|
14
14
|
}
|
|
15
|
+
|
|
15
16
|
&-icon-success {
|
|
16
17
|
color: ${(p) => p.theme.colorSuccess};
|
|
17
18
|
}
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
20
|
@keyframes ${(p) => p.theme.prefixCls}-loading {
|
|
23
21
|
0% {
|
|
24
22
|
transform: rotate(0deg);
|
|
@@ -20,12 +20,12 @@ function Layout(props: IProps, ref: React.Ref<any>) {
|
|
|
20
20
|
const { className } = props;
|
|
21
21
|
const prefixCls = useProviderContext().getPrefixCls('chat-anywhere-layout');
|
|
22
22
|
const narrowMode = useChatAnywhereOptions(v => v.theme.narrowMode);
|
|
23
|
+
const background = useChatAnywhereOptions(v => v.theme.background);
|
|
23
24
|
const rightHeader = useChatAnywhereOptions(v => v.theme.rightHeader);
|
|
24
25
|
const { session } = useChatAnywhereOptions(v => ({ session: v.session }));
|
|
25
26
|
const { collapsed } = useContext(ChatAnyWhereLayoutContext);
|
|
26
27
|
const showLeft = !narrowMode && session && session.multiple;
|
|
27
28
|
|
|
28
|
-
|
|
29
29
|
return <>
|
|
30
30
|
<Style />
|
|
31
31
|
<div className={cls(`${prefixCls}`, className)}>
|
|
@@ -38,11 +38,12 @@ function Layout(props: IProps, ref: React.Ref<any>) {
|
|
|
38
38
|
}
|
|
39
39
|
<div className={cls(`${prefixCls}-right`, {
|
|
40
40
|
[`${prefixCls}-right-has-header`]: !!rightHeader,
|
|
41
|
-
})}
|
|
41
|
+
})} style={{
|
|
42
|
+
background: background,
|
|
43
|
+
}}>
|
|
42
44
|
{
|
|
43
45
|
!!rightHeader && <Header />
|
|
44
46
|
}
|
|
45
|
-
|
|
46
47
|
<Chat />
|
|
47
48
|
</div>
|
|
48
49
|
</div>
|
|
@@ -45,7 +45,9 @@ export function InnerHeader({ className }: { className?: string }) {
|
|
|
45
45
|
return <>
|
|
46
46
|
<div className={cls(`${prefixCls}-header`, className)}>
|
|
47
47
|
<div className={`${prefixCls}-header-left`}>
|
|
48
|
-
|
|
48
|
+
{
|
|
49
|
+
logo && <img src={logo} alt="logo" height={32} />
|
|
50
|
+
}
|
|
49
51
|
<span>{title}</span>
|
|
50
52
|
</div>
|
|
51
53
|
|
|
@@ -68,7 +70,7 @@ export function InnerAdder(props: { style?: React.CSSProperties; narrowMode?: bo
|
|
|
68
70
|
const { toggleCollapsed } = useContext(ChatAnyWhereLayoutContext);
|
|
69
71
|
|
|
70
72
|
return <div className={`${prefixCls}-adder`} style={props.style}>
|
|
71
|
-
<Button block type="primary" icon={<SparkPlusLine />} disabled={loading} onClick={async() => {
|
|
73
|
+
<Button block type="primary" icon={<SparkPlusLine />} disabled={loading} onClick={async () => {
|
|
72
74
|
await createSession();
|
|
73
75
|
if (props.narrowMode) {
|
|
74
76
|
toggleCollapsed();
|
|
@@ -77,6 +77,12 @@ export interface IAgentScopeRuntimeWebUIThemeOptions {
|
|
|
77
77
|
* @descriptionEn Typography configuration
|
|
78
78
|
*/
|
|
79
79
|
typography?: IAgentScopeRuntimeWebUITypography;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* @description 背景色
|
|
83
|
+
* @descriptionEn Background color
|
|
84
|
+
*/
|
|
85
|
+
background?: string;
|
|
80
86
|
}
|
|
81
87
|
|
|
82
88
|
export interface IAgentScopeRuntimeWebUITypography {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { useProviderContext } from "..";
|
|
2
|
+
import { IImage } from "./types";
|
|
3
|
+
import { Image, ConfigProvider } from 'antd';
|
|
4
|
+
import { Locale } from "antd/es/locale";
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
export default function (props: IImage) {
|
|
8
|
+
const prefixCls = useProviderContext().getPrefixCls('assets-preview-image');
|
|
9
|
+
|
|
10
|
+
return <div className={prefixCls} style={{
|
|
11
|
+
aspectRatio: `${props.width}/${props.height}`,
|
|
12
|
+
}}>
|
|
13
|
+
<ConfigProvider
|
|
14
|
+
locale={{
|
|
15
|
+
Image: { preview: '' }
|
|
16
|
+
} as Locale}
|
|
17
|
+
><Image src={props.src} width={"100%"} height={"100%"} /></ConfigProvider>
|
|
18
|
+
</div>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { AssetsPreview } from '@agentscope-ai/chat';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
|
|
4
|
+
export default function () {
|
|
5
|
+
return <AssetsPreview type="image" data={[
|
|
6
|
+
{ src: 'https://img.alicdn.com/imgextra/i3/O1CN01dKprif1ar0awCMDwK_!!6000000003382-0-tps-2640-1100.jpg', width: 16, height: 9 },
|
|
7
|
+
{ src: 'https://img.alicdn.com/imgextra/i3/O1CN01dKprif1ar0awCMDwK_!!6000000003382-0-tps-2640-1100.jpg', width: 16, height: 9 },
|
|
8
|
+
{ src: 'https://img.alicdn.com/imgextra/i3/O1CN01dKprif1ar0awCMDwK_!!6000000003382-0-tps-2640-1100.jpg', width: 16, height: 9 },
|
|
9
|
+
{ src: 'https://img.alicdn.com/imgextra/i3/O1CN01dKprif1ar0awCMDwK_!!6000000003382-0-tps-2640-1100.jpg', width: 16, height: 9 },
|
|
10
|
+
{ src: 'https://img.alicdn.com/imgextra/i3/O1CN01dKprif1ar0awCMDwK_!!6000000003382-0-tps-2640-1100.jpg', width: 16, height: 9 },
|
|
11
|
+
{ src: 'https://img.alicdn.com/imgextra/i3/O1CN01dKprif1ar0awCMDwK_!!6000000003382-0-tps-2640-1100.jpg', width: 16, height: 9 },
|
|
12
|
+
{ src: 'https://img.alicdn.com/imgextra/i3/O1CN01dKprif1ar0awCMDwK_!!6000000003382-0-tps-2640-1100.jpg', width: 16, height: 9 },
|
|
13
|
+
{ src: 'https://img.alicdn.com/imgextra/i3/O1CN01dKprif1ar0awCMDwK_!!6000000003382-0-tps-2640-1100.jpg', width: 16, height: 9 },
|
|
14
|
+
]} />
|
|
15
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { useProviderContext } from '../Provider';
|
|
2
|
+
import Style from './style';
|
|
3
|
+
import cls from 'classnames';
|
|
4
|
+
import { IImage, IVideo, IAudio } from './types';
|
|
5
|
+
import Image from './Image';
|
|
6
|
+
import Video from './Video';
|
|
7
|
+
import Audio from './Audio';
|
|
8
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
9
|
+
import { SparkLeftLine, SparkRightLine } from '@agentscope-ai/icons';
|
|
10
|
+
import { IconButton } from '@agentscope-ai/design';
|
|
11
|
+
import { useDebounce } from 'ahooks';
|
|
12
|
+
|
|
13
|
+
export interface IAssetsPreviewProps {
|
|
14
|
+
className?: string;
|
|
15
|
+
classNames?: {
|
|
16
|
+
container?: string;
|
|
17
|
+
};
|
|
18
|
+
height?: number;
|
|
19
|
+
type: 'image' | 'video' | 'audio';
|
|
20
|
+
data: (IImage | IVideo | IAudio)[];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function AssetsPreview(props: IAssetsPreviewProps) {
|
|
24
|
+
const prefixCls = useProviderContext().getPrefixCls('assets-preview');
|
|
25
|
+
const Component = {
|
|
26
|
+
image: Image,
|
|
27
|
+
video: Video,
|
|
28
|
+
audio: Audio,
|
|
29
|
+
}[props.type];
|
|
30
|
+
const ref = useRef();
|
|
31
|
+
|
|
32
|
+
useEffect(() => { }, [props.data.length])
|
|
33
|
+
const { height = 144 } = props;
|
|
34
|
+
const [value, setValue] = useState<string>();
|
|
35
|
+
const debouncedValue = useDebounce(value, { wait: 500 });
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
const onScroll = useCallback((e) => {
|
|
39
|
+
console.log(e.target.scrollLeft, e.target.scrollWidth - e.target.clientWidth);
|
|
40
|
+
}, [])
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
return <>
|
|
44
|
+
<Style />
|
|
45
|
+
<div className={cls(`${prefixCls}`, props.className)}>
|
|
46
|
+
<div className={cls(`${prefixCls}-container`, props.className)} style={{ height }} onScroll={onScroll}>
|
|
47
|
+
{
|
|
48
|
+
props.data.map((item, index) => {
|
|
49
|
+
return <Component key={index} {...item as any} />;
|
|
50
|
+
})
|
|
51
|
+
}
|
|
52
|
+
</div>
|
|
53
|
+
<div className={cls(`${prefixCls}-left-edge`)} />
|
|
54
|
+
<div className={cls(`${prefixCls}-right-edge`)} />
|
|
55
|
+
<IconButton className={cls(`${prefixCls}-left-arrow`, `${prefixCls}-arrow`)} size="small" shape='circle' icon={<SparkLeftLine />}></IconButton>
|
|
56
|
+
<IconButton className={cls(`${prefixCls}-right-arrow`, `${prefixCls}-arrow`)} size="small" shape='circle' icon={<SparkRightLine />}></IconButton>
|
|
57
|
+
</div>
|
|
58
|
+
</>
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
export default AssetsPreview;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { createGlobalStyle } from 'antd-style';
|
|
2
|
+
|
|
3
|
+
export default createGlobalStyle`
|
|
4
|
+
.${(p) => p.theme.prefixCls}-assets-preview {
|
|
5
|
+
position: relative;
|
|
6
|
+
|
|
7
|
+
&-left-edge,
|
|
8
|
+
&-right-edge {
|
|
9
|
+
position: absolute;
|
|
10
|
+
top: 0;
|
|
11
|
+
bottom: 0;
|
|
12
|
+
width: 128px;
|
|
13
|
+
pointer-events: none;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
&-left-edge {
|
|
17
|
+
left: 0;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
&-right-edge {
|
|
21
|
+
right: 0;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
&-arrow {
|
|
25
|
+
position: absolute;
|
|
26
|
+
top: 50%;
|
|
27
|
+
transform: translateY(-65%);
|
|
28
|
+
bottom: 0;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
&-left-arrow {
|
|
32
|
+
left: 10px;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
&-right-arrow {
|
|
36
|
+
right: 10px;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
&-container {
|
|
40
|
+
display: flex;
|
|
41
|
+
padding: 8px;
|
|
42
|
+
gap: 8px;
|
|
43
|
+
overflow-x: auto;
|
|
44
|
+
justify-content: safe center;
|
|
45
|
+
background-color: ${(p) => p.theme.colorFillTertiary};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
&-image {
|
|
50
|
+
height: 100%;
|
|
51
|
+
flex-basis: auto;
|
|
52
|
+
flex-shrink: 0;
|
|
53
|
+
border-radius: 8px;
|
|
54
|
+
overflow: hidden;
|
|
55
|
+
background-size: cover;
|
|
56
|
+
background-position: center;
|
|
57
|
+
background-repeat: no-repeat;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
`;
|
|
@@ -233,6 +233,7 @@ const Spin = ({
|
|
|
233
233
|
.fluid-background-container .glass {
|
|
234
234
|
overflow: hidden;
|
|
235
235
|
position: absolute;
|
|
236
|
+
border-radius: 8px;
|
|
236
237
|
inset: 0;
|
|
237
238
|
backdrop-filter: blur(calc(var(--s) * 0.12));
|
|
238
239
|
box-shadow: 0 0 calc(var(--s) * 0.2) color-mix(in srgb, black, transparent 70%);
|
package/components/index.ts
CHANGED
|
@@ -2,7 +2,6 @@ export { ConfigProvider } from 'antd';
|
|
|
2
2
|
|
|
3
3
|
export { default as version } from './Version';
|
|
4
4
|
|
|
5
|
-
|
|
6
5
|
export {
|
|
7
6
|
CustomCardsContext,
|
|
8
7
|
CustomCardsProvider,
|
|
@@ -87,4 +86,8 @@ export {
|
|
|
87
86
|
|
|
88
87
|
export { default as AIGC } from './AIGC';
|
|
89
88
|
|
|
90
|
-
export {
|
|
89
|
+
export {
|
|
90
|
+
default as AssetsPreview,
|
|
91
|
+
type IAssetsPreviewProps,
|
|
92
|
+
} from './AssetsPreview';
|
|
93
|
+
export { Sandbox as GenerativeUISandbox } from './GenerativeUI';
|
package/lib/Accordion/style.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var _templateObject;
|
|
2
2
|
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
3
3
|
import { createGlobalStyle } from 'antd-style';
|
|
4
|
-
export default createGlobalStyle(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n.", "-accordion-group {\n width: 100%;\n\n svg {\n transform: scale(1.25);\n }\n \n .anticon-spin::before,\n .anticon-spin {\n animation-duration: 2s;\n }\n &-icon-success {\n color: ", ";\n }\n\n
|
|
4
|
+
export default createGlobalStyle(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n.", "-accordion-group {\n width: 100%;\n\n svg {\n transform: scale(1.25);\n }\n \n .anticon-spin::before,\n .anticon-spin {\n animation-duration: 2s;\n }\n\n &-icon-success {\n color: ", ";\n }\n\n @keyframes ", "-loading {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n\n &-icon-error {\n color: ", ";\n }\n\n &-header {\n display: flex;\n align-items: center;\n gap: 4px;\n color: ", ";\n padding: 6px 12px;\n font-size: 12px;\n cursor: pointer;\n line-height: 20px;\n background-color: ", ";\n\n &-arrow {\n display: flex;\n align-items: center;\n }\n\n &-close {\n border-radius: ", "px;\n border: 1px solid ", ";\n display: inline-flex;\n }\n\n &-icon {\n position: relative;\n display: flex;\n width: 16px;\n height: 16px;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n\n &-line {\n &::before,\n &::after {\n content: '';\n position: absolute;\n width: 1px;\n height: 7px;\n background-color: ", ";\n left: 50%;\n transform: translateX(-50%);\n }\n\n &::before {\n top: -9px;\n }\n\n &::after {\n bottom: -9px;\n }\n }\n\n &-last::after {\n content: none;\n }\n\n &-first::before {\n content: none;\n }\n }\n }\n\n &-open {\n overflow: hidden;\n border-radius: 8px;\n border: 1px solid ", ";\n background-color: ", ";\n }\n\n &-body {\n margin: 8px;\n color: ", ";\n font-size: 12px;\n border-radius: 8px;\n overflow: hidden;\n\n .", "-accordion-group-header {\n background-color: transparent;\n }\n\n \n\n .", "-accordion-group-header-close,\n .", "-accordion-group-open {\n border: 0;\n }\n\n .", "-accordion-group-header-close {\n display: flex;\n }\n\n &-inline {\n padding: 8px 0;\n margin: 0;\n background-color: transparent;\n }\n\n > .", "-accordion-group {\n background-color: ", ";\n\n &-open {\n border-radius: 0;\n }\n }\n\n &-close {\n height: 0;\n padding: 0;\n margin: 0;\n }\n }\n}\n\n.", "-accordion-deep-thinking {\n font-size: 12px;\n color: ", ";\n text-align: left;\n white-space: pre-wrap;\n line-height: 20px;\n padding: 0 12px;\n border-left: 1px solid ", ";\n}\n\n.", "-accordion-soft-light-title {\n font-size: 12px;\n position: relative;\n display: inline-block;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n mask-image: linear-gradient(\n 270deg,\n rgba(231, 231, 237, 0.88) 20%,\n rgba(231, 231, 237, 0.5) 50%,\n rgba(255, 255, 255, 0.4) 52%,\n rgba(231, 231, 237, 0.5) 70%,\n rgba(231, 231, 237, 0.88) 80%\n );\n mask-size: 200% 100%;\n animation: softlight-text 3s linear infinite;\n}\n\n\n@keyframes softlight-text {\n 0% {\n mask-position: 100% 0;\n }\n\n 100% {\n mask-position: -100% 0;\n }\n}\n\n.", "-accordion-content-body {\n border: 1px solid ", ";\n border-radius: 8px;\n overflow: hidden;\n &-header {\n display: flex;\n height: 24px;\n align-items: center;\n justify-content: space-between;\n padding: 0 12px;\n border-bottom: 1px solid ", ";\n background-color: ", ";\n color: ", ";\n }\n\n &-body {\n background-color: ", ";\n }\n}\n"])), function (p) {
|
|
5
5
|
return p.theme.prefixCls;
|
|
6
6
|
}, function (p) {
|
|
7
7
|
return p.theme.colorSuccess;
|
|
@@ -22,6 +22,9 @@ function Layout(props, ref) {
|
|
|
22
22
|
var narrowMode = useChatAnywhereOptions(function (v) {
|
|
23
23
|
return v.theme.narrowMode;
|
|
24
24
|
});
|
|
25
|
+
var background = useChatAnywhereOptions(function (v) {
|
|
26
|
+
return v.theme.background;
|
|
27
|
+
});
|
|
25
28
|
var rightHeader = useChatAnywhereOptions(function (v) {
|
|
26
29
|
return v.theme.rightHeader;
|
|
27
30
|
});
|
|
@@ -42,6 +45,9 @@ function Layout(props, ref) {
|
|
|
42
45
|
children: /*#__PURE__*/_jsx(Sessions, {})
|
|
43
46
|
}), /*#__PURE__*/_jsxs("div", {
|
|
44
47
|
className: cls("".concat(prefixCls, "-right"), _defineProperty({}, "".concat(prefixCls, "-right-has-header"), !!rightHeader)),
|
|
48
|
+
style: {
|
|
49
|
+
background: background
|
|
50
|
+
},
|
|
45
51
|
children: [!!rightHeader && /*#__PURE__*/_jsx(Header, {}), /*#__PURE__*/_jsx(Chat, {})]
|
|
46
52
|
})]
|
|
47
53
|
}), /*#__PURE__*/_jsx(Ref, {
|
|
@@ -60,7 +60,7 @@ export function InnerHeader(_ref) {
|
|
|
60
60
|
className: cls("".concat(prefixCls, "-header"), className),
|
|
61
61
|
children: [/*#__PURE__*/_jsxs("div", {
|
|
62
62
|
className: "".concat(prefixCls, "-header-left"),
|
|
63
|
-
children: [/*#__PURE__*/_jsx("img", {
|
|
63
|
+
children: [logo && /*#__PURE__*/_jsx("img", {
|
|
64
64
|
src: logo,
|
|
65
65
|
alt: "logo",
|
|
66
66
|
height: 32
|
|
@@ -79,6 +79,11 @@ export interface IAgentScopeRuntimeWebUIThemeOptions {
|
|
|
79
79
|
* @descriptionEn Typography configuration
|
|
80
80
|
*/
|
|
81
81
|
typography?: IAgentScopeRuntimeWebUITypography;
|
|
82
|
+
/**
|
|
83
|
+
* @description 背景色
|
|
84
|
+
* @descriptionEn Background color
|
|
85
|
+
*/
|
|
86
|
+
background?: string;
|
|
82
87
|
}
|
|
83
88
|
export interface IAgentScopeRuntimeWebUITypography {
|
|
84
89
|
/**
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { useProviderContext } from "..";
|
|
2
|
+
import { Image, ConfigProvider } from 'antd';
|
|
3
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
4
|
+
export default function (props) {
|
|
5
|
+
var prefixCls = useProviderContext().getPrefixCls('assets-preview-image');
|
|
6
|
+
return /*#__PURE__*/_jsx("div", {
|
|
7
|
+
className: prefixCls,
|
|
8
|
+
style: {
|
|
9
|
+
aspectRatio: "".concat(props.width, "/").concat(props.height)
|
|
10
|
+
},
|
|
11
|
+
children: /*#__PURE__*/_jsx(ConfigProvider, {
|
|
12
|
+
locale: {
|
|
13
|
+
Image: {
|
|
14
|
+
preview: ''
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
children: /*#__PURE__*/_jsx(Image, {
|
|
18
|
+
src: props.src,
|
|
19
|
+
width: "100%",
|
|
20
|
+
height: "100%"
|
|
21
|
+
})
|
|
22
|
+
})
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { IImage, IVideo, IAudio } from './types';
|
|
2
|
+
export interface IAssetsPreviewProps {
|
|
3
|
+
className?: string;
|
|
4
|
+
classNames?: {
|
|
5
|
+
container?: string;
|
|
6
|
+
};
|
|
7
|
+
height?: number;
|
|
8
|
+
type: 'image' | 'video' | 'audio';
|
|
9
|
+
data: (IImage | IVideo | IAudio)[];
|
|
10
|
+
}
|
|
11
|
+
declare function AssetsPreview(props: IAssetsPreviewProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export default AssetsPreview;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
5
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
6
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
7
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
8
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
9
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
10
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
11
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
12
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
13
|
+
import { useProviderContext } from "../Provider";
|
|
14
|
+
import Style from "./style";
|
|
15
|
+
import cls from 'classnames';
|
|
16
|
+
import Image from "./Image";
|
|
17
|
+
import Video from "./Video";
|
|
18
|
+
import Audio from "./Audio";
|
|
19
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
20
|
+
import { SparkLeftLine, SparkRightLine } from '@agentscope-ai/icons';
|
|
21
|
+
import { IconButton } from '@agentscope-ai/design';
|
|
22
|
+
import { useDebounce } from 'ahooks';
|
|
23
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
24
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
25
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
26
|
+
function AssetsPreview(props) {
|
|
27
|
+
var prefixCls = useProviderContext().getPrefixCls('assets-preview');
|
|
28
|
+
var Component = {
|
|
29
|
+
image: Image,
|
|
30
|
+
video: Video,
|
|
31
|
+
audio: Audio
|
|
32
|
+
}[props.type];
|
|
33
|
+
var ref = useRef();
|
|
34
|
+
useEffect(function () {}, [props.data.length]);
|
|
35
|
+
var _props$height = props.height,
|
|
36
|
+
height = _props$height === void 0 ? 144 : _props$height;
|
|
37
|
+
var _useState = useState(),
|
|
38
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
39
|
+
value = _useState2[0],
|
|
40
|
+
setValue = _useState2[1];
|
|
41
|
+
var debouncedValue = useDebounce(value, {
|
|
42
|
+
wait: 500
|
|
43
|
+
});
|
|
44
|
+
var onScroll = useCallback(function (e) {
|
|
45
|
+
console.log(e.target.scrollLeft, e.target.scrollWidth - e.target.clientWidth);
|
|
46
|
+
}, []);
|
|
47
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
48
|
+
children: [/*#__PURE__*/_jsx(Style, {}), /*#__PURE__*/_jsxs("div", {
|
|
49
|
+
className: cls("".concat(prefixCls), props.className),
|
|
50
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
51
|
+
className: cls("".concat(prefixCls, "-container"), props.className),
|
|
52
|
+
style: {
|
|
53
|
+
height: height
|
|
54
|
+
},
|
|
55
|
+
onScroll: onScroll,
|
|
56
|
+
children: props.data.map(function (item, index) {
|
|
57
|
+
return /*#__PURE__*/_jsx(Component, _objectSpread({}, item), index);
|
|
58
|
+
})
|
|
59
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
60
|
+
className: cls("".concat(prefixCls, "-left-edge"))
|
|
61
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
62
|
+
className: cls("".concat(prefixCls, "-right-edge"))
|
|
63
|
+
}), /*#__PURE__*/_jsx(IconButton, {
|
|
64
|
+
className: cls("".concat(prefixCls, "-left-arrow"), "".concat(prefixCls, "-arrow")),
|
|
65
|
+
size: "small",
|
|
66
|
+
shape: "circle",
|
|
67
|
+
icon: /*#__PURE__*/_jsx(SparkLeftLine, {})
|
|
68
|
+
}), /*#__PURE__*/_jsx(IconButton, {
|
|
69
|
+
className: cls("".concat(prefixCls, "-right-arrow"), "".concat(prefixCls, "-arrow")),
|
|
70
|
+
size: "small",
|
|
71
|
+
shape: "circle",
|
|
72
|
+
icon: /*#__PURE__*/_jsx(SparkRightLine, {})
|
|
73
|
+
})]
|
|
74
|
+
})]
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
export default AssetsPreview;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
var _templateObject;
|
|
2
|
+
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
3
|
+
import { createGlobalStyle } from 'antd-style';
|
|
4
|
+
export default createGlobalStyle(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n.", "-assets-preview {\n position: relative;\n\n &-left-edge,\n &-right-edge {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 128px;\n pointer-events: none;\n }\n\n &-left-edge {\n left: 0;\n }\n\n &-right-edge {\n right: 0;\n }\n\n &-arrow {\n position: absolute;\n top: 50%;\n transform: translateY(-65%);\n bottom: 0;\n }\n\n &-left-arrow {\n left: 10px;\n }\n\n &-right-arrow {\n right: 10px;\n }\n\n &-container {\n display: flex;\n padding: 8px;\n gap: 8px;\n overflow-x: auto;\n justify-content: safe center;\n background-color: ", ";\n }\n\n\n &-image {\n height: 100%;\n flex-basis: auto;\n flex-shrink: 0;\n border-radius: 8px;\n overflow: hidden;\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n }\n}\n"])), function (p) {
|
|
5
|
+
return p.theme.prefixCls;
|
|
6
|
+
}, function (p) {
|
|
7
|
+
return p.theme.colorFillTertiary;
|
|
8
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -113,7 +113,7 @@ var Spin = function Spin(_ref) {
|
|
|
113
113
|
}, []);
|
|
114
114
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
115
115
|
children: [/*#__PURE__*/_jsx("style", {
|
|
116
|
-
children: "\n @keyframes ai {\n from {\n --a: 360deg;\n --l: 0.35;\n --o: 1;\n }\n 30% {\n --l: 1.5;\n }\n 70% {\n --o: 0.4;\n --l: 0.05;\n }\n 98% {\n --o: 0.7;\n }\n to {\n --a: 0deg;\n --l: 0.35;\n --o: 1;\n }\n }\n\n @keyframes ring {\n from {\n --value: var(--start);\n --scale: 1;\n }\n 50% {\n --scale: 1.2;\n --width-ratio: 1.5;\n }\n 70% {\n --scale: 1;\n --value: calc(var(--start) + 180deg);\n --width-ratio: 1;\n }\n 80% {\n --scale: 1.2;\n --width-ratio: 1.5;\n }\n to {\n --value: calc(var(--start) + 360deg);\n --scale: 1;\n --width-ratio: 1;\n }\n }\n\n .fluid-background-container {\n \n --s: var(--actual-size);\n --p: calc(var(--s) / 4);\n --radius: calc(var(--s) * 0.25);\n --count: 4;\n --width: calc(var(--s) * 0.025);\n --duration: calc(8s / ".concat(speed, ");\n --ai-duration: calc(5.5s / ").concat(speed, ");\n \n --bg-color: color-mix(in srgb, #7b7bf4, transparent 90%);\n position: absolute;\n inset: 0;\n background: radial-gradient(\n 60% 75% at center,\n var(--bg-color) 50%,\n transparent 50%\n ),\n radial-gradient(75% 60% at center, var(--bg-color) 50%, transparent 50%);\n overflow: hidden;\n }\n\n .fluid-background-container .fluid-inner {\n overflow: hidden;\n background: ").concat(backgroundColor, ";\n width: 100%;\n height: 100%;\n position: relative;\n display: grid;\n place-items: center;\n }\n\n .fluid-background-container .c {\n opacity: 0.9;\n position: absolute;\n width: calc(var(--s) * 0.4);\n aspect-ratio: 1;\n border-radius: 50%;\n --offset-per-item: calc(360deg / var(--count));\n --current-angle-offset: calc(var(--offset-per-item) * var(--i) + var(--a));\n translate: calc(\n cos(var(--current-angle-offset)) * var(--radius) + var(--x, 0)\n )\n calc(sin(var(--current-angle-offset)) * var(--radius) * -1);\n scale: calc(0.6 + var(--l));\n animation: ai var(--ai-duration) cubic-bezier(0.45, -0.35, 0.16, 1.5) infinite;\n transition: opacity 0.3s linear;\n opacity: var(--o, 1);\n }\n\n .fluid-background-container .c1 {\n background: radial-gradient(50% 50% at center, ").concat(colors[0] || '#c979ee', ", color-mix(in srgb, ").concat(colors[0] || '#c979ee', ", transparent 30%));\n --x: calc(var(--s) * 0.04);\n width: calc(var(--s) * 0.6);\n animation-timing-function: cubic-bezier(0.12, 0.32, 0.68, 0.24);\n }\n\n .fluid-background-container .c2 {\n background: radial-gradient(50% 50% at center, ").concat(colors[1] || '#ef788c', ", color-mix(in srgb, ").concat(colors[1] || '#ef788c', ", white 40%));\n width: calc(var(--s) * 0.55);\n }\n\n .fluid-background-container .c3 {\n background: radial-gradient(50% 50% at center, ").concat(colors[2] || '#eb7fc6', ", transparent);\n width: calc(var(--s) * 0.2);\n opacity: 0.6;\n --x: calc(var(--s) * -0.04);\n }\n\n .fluid-background-container .c4 {\n background: ").concat(colors[3] || '#6d67c8', ";\n animation-timing-function: cubic-bezier(0.39, -0.03, 0.75, 0.47);\n }\n\n .fluid-background-container .glass {\n overflow: hidden;\n position: absolute;\n inset: 0;\n backdrop-filter: blur(calc(var(--s) * 0.12));\n box-shadow: 0 0 calc(var(--s) * 0.2) color-mix(in srgb, black, transparent 70%);\n }\n\n .fluid-background-container .glass::after {\n content: \"\";\n position: absolute;\n inset: 0;\n --c: rgba(255, 255, 255, 0.03);\n --w: 0.0625rem;\n --g: 0.1875rem;\n background: repeating-linear-gradient(\n var(--c),\n var(--c),\n var(--w),\n transparent var(--w),\n transparent calc(var(--w) + var(--g))\n );\n }\n\n .fluid-background-container .rings {\n aspect-ratio: 1;\n border-radius: 50%;\n position: absolute;\n inset: 0;\n perspective: calc(var(--s) * 2.75);\n opacity: 0.9;\n }\n\n .fluid-background-container .rings::before,\n .fluid-background-container .rings::after {\n content: \"\";\n position: absolute;\n inset: 0;\n background: rgba(255, 0, 0, 1);\n border-radius: 50%;\n --width-ratio: 1;\n border: calc(var(--width) * var(--width-ratio)) solid transparent;\n mask: linear-gradient(#fff 0 0) padding-box, linear-gradient(#fff 0 0);\n background: linear-gradient(\n ").concat(ringColors.join(', '), "\n ) border-box;\n mask-composite: exclude;\n animation: ring var(--duration) ease-in-out infinite;\n --start: 180deg;\n --value: var(--start);\n --scale: 1;\n transform: rotateY(var(--value)) rotateX(var(--value)) rotateZ(var(--value))\n scale(var(--scale));\n }\n\n .fluid-background-container .rings::before {\n --start: 180deg;\n }\n\n .fluid-background-container .rings::after {\n --start: 90deg;\n }\n ")
|
|
116
|
+
children: "\n @keyframes ai {\n from {\n --a: 360deg;\n --l: 0.35;\n --o: 1;\n }\n 30% {\n --l: 1.5;\n }\n 70% {\n --o: 0.4;\n --l: 0.05;\n }\n 98% {\n --o: 0.7;\n }\n to {\n --a: 0deg;\n --l: 0.35;\n --o: 1;\n }\n }\n\n @keyframes ring {\n from {\n --value: var(--start);\n --scale: 1;\n }\n 50% {\n --scale: 1.2;\n --width-ratio: 1.5;\n }\n 70% {\n --scale: 1;\n --value: calc(var(--start) + 180deg);\n --width-ratio: 1;\n }\n 80% {\n --scale: 1.2;\n --width-ratio: 1.5;\n }\n to {\n --value: calc(var(--start) + 360deg);\n --scale: 1;\n --width-ratio: 1;\n }\n }\n\n .fluid-background-container {\n \n --s: var(--actual-size);\n --p: calc(var(--s) / 4);\n --radius: calc(var(--s) * 0.25);\n --count: 4;\n --width: calc(var(--s) * 0.025);\n --duration: calc(8s / ".concat(speed, ");\n --ai-duration: calc(5.5s / ").concat(speed, ");\n \n --bg-color: color-mix(in srgb, #7b7bf4, transparent 90%);\n position: absolute;\n inset: 0;\n background: radial-gradient(\n 60% 75% at center,\n var(--bg-color) 50%,\n transparent 50%\n ),\n radial-gradient(75% 60% at center, var(--bg-color) 50%, transparent 50%);\n overflow: hidden;\n }\n\n .fluid-background-container .fluid-inner {\n overflow: hidden;\n background: ").concat(backgroundColor, ";\n width: 100%;\n height: 100%;\n position: relative;\n display: grid;\n place-items: center;\n }\n\n .fluid-background-container .c {\n opacity: 0.9;\n position: absolute;\n width: calc(var(--s) * 0.4);\n aspect-ratio: 1;\n border-radius: 50%;\n --offset-per-item: calc(360deg / var(--count));\n --current-angle-offset: calc(var(--offset-per-item) * var(--i) + var(--a));\n translate: calc(\n cos(var(--current-angle-offset)) * var(--radius) + var(--x, 0)\n )\n calc(sin(var(--current-angle-offset)) * var(--radius) * -1);\n scale: calc(0.6 + var(--l));\n animation: ai var(--ai-duration) cubic-bezier(0.45, -0.35, 0.16, 1.5) infinite;\n transition: opacity 0.3s linear;\n opacity: var(--o, 1);\n }\n\n .fluid-background-container .c1 {\n background: radial-gradient(50% 50% at center, ").concat(colors[0] || '#c979ee', ", color-mix(in srgb, ").concat(colors[0] || '#c979ee', ", transparent 30%));\n --x: calc(var(--s) * 0.04);\n width: calc(var(--s) * 0.6);\n animation-timing-function: cubic-bezier(0.12, 0.32, 0.68, 0.24);\n }\n\n .fluid-background-container .c2 {\n background: radial-gradient(50% 50% at center, ").concat(colors[1] || '#ef788c', ", color-mix(in srgb, ").concat(colors[1] || '#ef788c', ", white 40%));\n width: calc(var(--s) * 0.55);\n }\n\n .fluid-background-container .c3 {\n background: radial-gradient(50% 50% at center, ").concat(colors[2] || '#eb7fc6', ", transparent);\n width: calc(var(--s) * 0.2);\n opacity: 0.6;\n --x: calc(var(--s) * -0.04);\n }\n\n .fluid-background-container .c4 {\n background: ").concat(colors[3] || '#6d67c8', ";\n animation-timing-function: cubic-bezier(0.39, -0.03, 0.75, 0.47);\n }\n\n .fluid-background-container .glass {\n overflow: hidden;\n position: absolute;\n border-radius: 8px;\n inset: 0;\n backdrop-filter: blur(calc(var(--s) * 0.12));\n box-shadow: 0 0 calc(var(--s) * 0.2) color-mix(in srgb, black, transparent 70%);\n }\n\n .fluid-background-container .glass::after {\n content: \"\";\n position: absolute;\n inset: 0;\n --c: rgba(255, 255, 255, 0.03);\n --w: 0.0625rem;\n --g: 0.1875rem;\n background: repeating-linear-gradient(\n var(--c),\n var(--c),\n var(--w),\n transparent var(--w),\n transparent calc(var(--w) + var(--g))\n );\n }\n\n .fluid-background-container .rings {\n aspect-ratio: 1;\n border-radius: 50%;\n position: absolute;\n inset: 0;\n perspective: calc(var(--s) * 2.75);\n opacity: 0.9;\n }\n\n .fluid-background-container .rings::before,\n .fluid-background-container .rings::after {\n content: \"\";\n position: absolute;\n inset: 0;\n background: rgba(255, 0, 0, 1);\n border-radius: 50%;\n --width-ratio: 1;\n border: calc(var(--width) * var(--width-ratio)) solid transparent;\n mask: linear-gradient(#fff 0 0) padding-box, linear-gradient(#fff 0 0);\n background: linear-gradient(\n ").concat(ringColors.join(', '), "\n ) border-box;\n mask-composite: exclude;\n animation: ring var(--duration) ease-in-out infinite;\n --start: 180deg;\n --value: var(--start);\n --scale: 1;\n transform: rotateY(var(--value)) rotateX(var(--value)) rotateZ(var(--value))\n scale(var(--scale));\n }\n\n .fluid-background-container .rings::before {\n --start: 180deg;\n }\n\n .fluid-background-container .rings::after {\n --start: 90deg;\n }\n ")
|
|
117
117
|
}), /*#__PURE__*/_jsxs("div", {
|
|
118
118
|
ref: containerRef,
|
|
119
119
|
className: cn('fluid-background-container', className),
|
package/lib/index.d.ts
CHANGED
|
@@ -26,4 +26,5 @@ export { default as sleep } from './Util/sleep';
|
|
|
26
26
|
export { default as Welcome, type IWelcomeProps } from './Welcome';
|
|
27
27
|
export { default as Markdown, type MarkdownProps as IMarkdownProps, type MarkdownProps, } from './Markdown';
|
|
28
28
|
export { default as AIGC } from './AIGC';
|
|
29
|
+
export { default as AssetsPreview, type IAssetsPreviewProps, } from './AssetsPreview';
|
|
29
30
|
export { Sandbox as GenerativeUISandbox } from './GenerativeUI';
|
package/lib/index.js
CHANGED
|
@@ -25,4 +25,5 @@ export { default as sleep } from "./Util/sleep";
|
|
|
25
25
|
export { default as Welcome } from "./Welcome";
|
|
26
26
|
export { default as Markdown } from "./Markdown";
|
|
27
27
|
export { default as AIGC } from "./AIGC";
|
|
28
|
+
export { default as AssetsPreview } from "./AssetsPreview";
|
|
28
29
|
export { Sandbox as GenerativeUISandbox } from "./GenerativeUI";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentscope-ai/chat",
|
|
3
|
-
"version": "1.1.46-beta.
|
|
3
|
+
"version": "1.1.46-beta.1767868158421",
|
|
4
4
|
"description": "a free and open-source chat framework for building excellent LLM-powered chat experiences",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"sideEffects": [
|