@liveblocks/react-ui 2.25.0-aiprivatebeta7 → 2.25.0-aiprivatebeta8
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/dist/_private/index.cjs +10 -4
- package/dist/_private/index.cjs.map +1 -1
- package/dist/_private/index.d.cts +76 -10
- package/dist/_private/index.d.ts +76 -10
- package/dist/_private/index.js +4 -2
- package/dist/_private/index.js.map +1 -1
- package/dist/components/AiChat.cjs +24 -27
- package/dist/components/AiChat.cjs.map +1 -1
- package/dist/components/AiChat.js +24 -27
- package/dist/components/AiChat.js.map +1 -1
- package/dist/components/AiToolDebugger.cjs +74 -0
- package/dist/components/AiToolDebugger.cjs.map +1 -0
- package/dist/components/AiToolDebugger.js +72 -0
- package/dist/components/AiToolDebugger.js.map +1 -0
- package/dist/components/Thread.cjs +3 -3
- package/dist/components/Thread.cjs.map +1 -1
- package/dist/components/Thread.js +3 -3
- package/dist/components/Thread.js.map +1 -1
- package/dist/components/internal/AiChatAssistantMessage.cjs +127 -147
- package/dist/components/internal/AiChatAssistantMessage.cjs.map +1 -1
- package/dist/components/internal/AiChatAssistantMessage.js +129 -149
- package/dist/components/internal/AiChatAssistantMessage.js.map +1 -1
- package/dist/components/internal/AiChatComposer.cjs +28 -16
- package/dist/components/internal/AiChatComposer.cjs.map +1 -1
- package/dist/components/internal/AiChatComposer.js +28 -16
- package/dist/components/internal/AiChatComposer.js.map +1 -1
- package/dist/icon.cjs +2 -0
- package/dist/icon.cjs.map +1 -1
- package/dist/icon.js +1 -0
- package/dist/icon.js.map +1 -1
- package/dist/icons/{Resolve.cjs → CheckCircle.cjs} +3 -3
- package/dist/icons/CheckCircle.cjs.map +1 -0
- package/dist/icons/{Resolve.js → CheckCircle.js} +3 -3
- package/dist/icons/CheckCircle.js.map +1 -0
- package/dist/icons/{Resolved.cjs → CheckCircleFill.cjs} +3 -3
- package/dist/icons/CheckCircleFill.cjs.map +1 -0
- package/dist/icons/{Resolved.js → CheckCircleFill.js} +3 -3
- package/dist/icons/CheckCircleFill.js.map +1 -0
- package/dist/icons/index.cjs +4 -4
- package/dist/icons/index.js +2 -2
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +27 -14
- package/dist/index.d.ts +27 -14
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/overrides.cjs +0 -4
- package/dist/overrides.cjs.map +1 -1
- package/dist/overrides.js +0 -4
- package/dist/overrides.js.map +1 -1
- package/dist/primitives/AiChatComposer/index.cjs +1 -2
- package/dist/primitives/AiChatComposer/index.cjs.map +1 -1
- package/dist/primitives/AiChatComposer/index.js +1 -2
- package/dist/primitives/AiChatComposer/index.js.map +1 -1
- package/dist/primitives/index.d.cts +0 -4
- package/dist/primitives/index.d.ts +0 -4
- package/dist/primitives/internal/Markdown.cjs +56 -25
- package/dist/primitives/internal/Markdown.cjs.map +1 -1
- package/dist/primitives/internal/Markdown.js +56 -25
- package/dist/primitives/internal/Markdown.js.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.js +1 -1
- package/package.json +5 -5
- package/src/styles/index.css +105 -61
- package/styles.css +1 -1
- package/styles.css.map +1 -1
- package/dist/icons/Resolve.cjs.map +0 -1
- package/dist/icons/Resolve.js.map +0 -1
- package/dist/icons/Resolved.cjs.map +0 -1
- package/dist/icons/Resolved.js.map +0 -1
package/dist/_private/index.cjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var components = require('../components.cjs');
|
|
3
4
|
var AiChatAssistantMessage = require('../components/internal/AiChatAssistantMessage.cjs');
|
|
4
5
|
var AiChatComposer = require('../components/internal/AiChatComposer.cjs');
|
|
5
6
|
var AiChatUserMessage = require('../components/internal/AiChatUserMessage.cjs');
|
|
@@ -8,6 +9,7 @@ var List = require('../components/internal/List.cjs');
|
|
|
8
9
|
var Tooltip = require('../components/internal/Tooltip.cjs');
|
|
9
10
|
var User = require('../components/internal/User.cjs');
|
|
10
11
|
require('../icons/index.cjs');
|
|
12
|
+
var index = require('../primitives/AiChatComposer/index.cjs');
|
|
11
13
|
var capitalize = require('../utils/capitalize.cjs');
|
|
12
14
|
var useInitial = require('../utils/use-initial.cjs');
|
|
13
15
|
var useRefs = require('../utils/use-refs.cjs');
|
|
@@ -22,6 +24,8 @@ var BellCrossed = require('../icons/BellCrossed.cjs');
|
|
|
22
24
|
var Blockquote = require('../icons/Blockquote.cjs');
|
|
23
25
|
var Bold = require('../icons/Bold.cjs');
|
|
24
26
|
var Check = require('../icons/Check.cjs');
|
|
27
|
+
var CheckCircle = require('../icons/CheckCircle.cjs');
|
|
28
|
+
var CheckCircleFill = require('../icons/CheckCircleFill.cjs');
|
|
25
29
|
var ChevronDown = require('../icons/ChevronDown.cjs');
|
|
26
30
|
var ChevronLeft = require('../icons/ChevronLeft.cjs');
|
|
27
31
|
var ChevronRight = require('../icons/ChevronRight.cjs');
|
|
@@ -45,8 +49,6 @@ var ListUnordered = require('../icons/ListUnordered.cjs');
|
|
|
45
49
|
var Mention = require('../icons/Mention.cjs');
|
|
46
50
|
var QuestionMark = require('../icons/QuestionMark.cjs');
|
|
47
51
|
var Redo = require('../icons/Redo.cjs');
|
|
48
|
-
var Resolve = require('../icons/Resolve.cjs');
|
|
49
|
-
var Resolved = require('../icons/Resolved.cjs');
|
|
50
52
|
var Restore = require('../icons/Restore.cjs');
|
|
51
53
|
var Retry = require('../icons/Retry.cjs');
|
|
52
54
|
var Search = require('../icons/Search.cjs');
|
|
@@ -65,6 +67,7 @@ var Warning = require('../icons/Warning.cjs');
|
|
|
65
67
|
|
|
66
68
|
|
|
67
69
|
|
|
70
|
+
exports.useComponents = components.useComponents;
|
|
68
71
|
exports.AiChatAssistantMessage = AiChatAssistantMessage.AiChatAssistantMessage;
|
|
69
72
|
exports.AiChatComposer = AiChatComposer.AiChatComposer;
|
|
70
73
|
exports.AiChatUserMessage = AiChatUserMessage.AiChatUserMessage;
|
|
@@ -74,6 +77,9 @@ exports.List = List.List;
|
|
|
74
77
|
exports.ShortcutTooltip = Tooltip.ShortcutTooltip;
|
|
75
78
|
exports.Tooltip = Tooltip.Tooltip;
|
|
76
79
|
exports.User = User.User;
|
|
80
|
+
exports.AiChatComposerEditor = index.AiChatComposerEditor;
|
|
81
|
+
exports.AiChatComposerForm = index.AiChatComposerForm;
|
|
82
|
+
exports.AiChatComposerSubmit = index.AiChatComposerSubmit;
|
|
77
83
|
exports.capitalize = capitalize.capitalize;
|
|
78
84
|
exports.useInitial = useInitial.useInitial;
|
|
79
85
|
exports.useRefs = useRefs.useRefs;
|
|
@@ -91,6 +97,8 @@ exports.BellCrossedIcon = BellCrossed.BellCrossedIcon;
|
|
|
91
97
|
exports.BlockquoteIcon = Blockquote.BlockquoteIcon;
|
|
92
98
|
exports.BoldIcon = Bold.BoldIcon;
|
|
93
99
|
exports.CheckIcon = Check.CheckIcon;
|
|
100
|
+
exports.CheckCircleIcon = CheckCircle.CheckCircleIcon;
|
|
101
|
+
exports.CheckCircleFillIcon = CheckCircleFill.CheckCircleFillIcon;
|
|
94
102
|
exports.ChevronDownIcon = ChevronDown.ChevronDownIcon;
|
|
95
103
|
exports.ChevronLeftIcon = ChevronLeft.ChevronLeftIcon;
|
|
96
104
|
exports.ChevronRightIcon = ChevronRight.ChevronRightIcon;
|
|
@@ -114,8 +122,6 @@ exports.ListUnorderedIcon = ListUnordered.ListUnorderedIcon;
|
|
|
114
122
|
exports.MentionIcon = Mention.MentionIcon;
|
|
115
123
|
exports.QuestionMarkIcon = QuestionMark.QuestionMarkIcon;
|
|
116
124
|
exports.RedoIcon = Redo.RedoIcon;
|
|
117
|
-
exports.ResolveIcon = Resolve.ResolveIcon;
|
|
118
|
-
exports.ResolvedIcon = Resolved.ResolvedIcon;
|
|
119
125
|
exports.RestoreIcon = Restore.RestoreIcon;
|
|
120
126
|
exports.RetryIcon = Retry.RetryIcon;
|
|
121
127
|
exports.SearchIcon = Search.SearchIcon;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { ComponentType, ComponentPropsWithoutRef, ElementType, ReactNode, ComponentProps, FormEvent, Ref, RefCallback } from 'react';
|
|
3
3
|
import { UiAssistantMessage, CopilotId, UiUserMessage } from '@liveblocks/core';
|
|
4
4
|
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
5
5
|
export { TooltipProvider } from '@radix-ui/react-tooltip';
|
|
6
6
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
7
7
|
|
|
8
|
+
interface GlobalComponents {
|
|
9
|
+
Anchor: ComponentType<ComponentPropsWithoutRef<"a">> | "a";
|
|
10
|
+
}
|
|
11
|
+
type Components = GlobalComponents;
|
|
12
|
+
declare function useComponents(components?: Partial<Components>): Components;
|
|
13
|
+
|
|
8
14
|
type SlotProp = {
|
|
9
15
|
/**
|
|
10
16
|
* Replace the rendered element by the one passed as a child.
|
|
@@ -29,15 +35,11 @@ interface GlobalOverrides {
|
|
|
29
35
|
interface AiChatComposerOverrides {
|
|
30
36
|
AI_CHAT_COMPOSER_PLACEHOLDER: string;
|
|
31
37
|
AI_CHAT_COMPOSER_SEND: string;
|
|
32
|
-
AI_CHAT_COMPOSER_ATTACH_FILES: string;
|
|
33
|
-
AI_CHAT_COMPOSER_REMOVE_ATTACHMENT: string;
|
|
34
38
|
AI_CHAT_COMPOSER_ABORT: string;
|
|
35
39
|
}
|
|
36
40
|
interface AiChatMessageOverrides {
|
|
37
41
|
AI_CHAT_MESSAGE_DELETED: string;
|
|
38
42
|
AI_CHAT_MESSAGE_THINKING: string;
|
|
39
|
-
AI_CHAT_MESSAGE_COPY: string;
|
|
40
|
-
AI_CHAT_MESSAGE_TRY_AGAIN: string;
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
interface AiChatAssistantMessageProps extends ComponentProps<"div"> {
|
|
@@ -49,6 +51,10 @@ interface AiChatAssistantMessageProps extends ComponentProps<"div"> {
|
|
|
49
51
|
* Override the component's strings.
|
|
50
52
|
*/
|
|
51
53
|
overrides?: Partial<GlobalOverrides & AiChatMessageOverrides>;
|
|
54
|
+
/**
|
|
55
|
+
* Override the component's components.
|
|
56
|
+
*/
|
|
57
|
+
components?: Partial<GlobalComponents>;
|
|
52
58
|
}
|
|
53
59
|
declare const AiChatAssistantMessage: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<AiChatAssistantMessageProps, "ref"> & react.RefAttributes<HTMLDivElement>>>;
|
|
54
60
|
|
|
@@ -160,6 +166,10 @@ declare function BoldIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.E
|
|
|
160
166
|
|
|
161
167
|
declare function CheckIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
162
168
|
|
|
169
|
+
declare function CheckCircleIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
170
|
+
|
|
171
|
+
declare function CheckCircleFillIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
172
|
+
|
|
163
173
|
declare function ChevronDownIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
164
174
|
|
|
165
175
|
declare function ChevronLeftIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
@@ -206,10 +216,6 @@ declare function QuestionMarkIcon(props: ComponentProps<"svg">): react_jsx_runti
|
|
|
206
216
|
|
|
207
217
|
declare function RedoIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
208
218
|
|
|
209
|
-
declare function ResolveIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
210
|
-
|
|
211
|
-
declare function ResolvedIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
212
|
-
|
|
213
219
|
declare function RestoreIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
214
220
|
|
|
215
221
|
declare function RetryIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
@@ -240,6 +246,66 @@ declare function UndoIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.E
|
|
|
240
246
|
|
|
241
247
|
declare function WarningIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
242
248
|
|
|
249
|
+
interface AiChatComposerFormProps extends ComponentPropsWithSlot<"form"> {
|
|
250
|
+
/**
|
|
251
|
+
* The event handler called when a chat message is submitted.
|
|
252
|
+
*/
|
|
253
|
+
onComposerSubmit?: (message: {
|
|
254
|
+
/**
|
|
255
|
+
* The submitted message text.
|
|
256
|
+
*/
|
|
257
|
+
text: string;
|
|
258
|
+
}, event: FormEvent<HTMLFormElement>) => void;
|
|
259
|
+
/**
|
|
260
|
+
* Whether the composer is disabled.
|
|
261
|
+
*/
|
|
262
|
+
disabled?: boolean;
|
|
263
|
+
}
|
|
264
|
+
interface AiChatComposerEditorProps extends Omit<ComponentPropsWithoutRef<"div">, "defaultValue"> {
|
|
265
|
+
/**
|
|
266
|
+
* The editor's initial value.
|
|
267
|
+
*/
|
|
268
|
+
defaultValue?: string;
|
|
269
|
+
/**
|
|
270
|
+
* The text to display when the editor is empty.
|
|
271
|
+
*/
|
|
272
|
+
placeholder?: string;
|
|
273
|
+
/**
|
|
274
|
+
* Whether the editor is disabled.
|
|
275
|
+
*/
|
|
276
|
+
disabled?: boolean;
|
|
277
|
+
/**
|
|
278
|
+
* Whether to focus the editor on mount.
|
|
279
|
+
*/
|
|
280
|
+
autoFocus?: boolean;
|
|
281
|
+
}
|
|
282
|
+
type AiChatComposerSubmitProps = ComponentPropsWithSlot<"button">;
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Surrounds the chat composer's content and handles submissions.
|
|
286
|
+
*
|
|
287
|
+
* @example
|
|
288
|
+
* <AiChatComposer.Form onComposerSubmit={({ text }) => {}}>
|
|
289
|
+
* <AiChatComposer.Editor />
|
|
290
|
+
* <AiChatComposer.Submit />
|
|
291
|
+
* </AiChatComposer.Form>
|
|
292
|
+
*/
|
|
293
|
+
declare const AiChatComposerForm: react.ForwardRefExoticComponent<AiChatComposerFormProps & react.RefAttributes<HTMLFormElement>>;
|
|
294
|
+
/**
|
|
295
|
+
* Displays the chat composer's editor.
|
|
296
|
+
*
|
|
297
|
+
* @example
|
|
298
|
+
* <AiChatComposer.Editor placeholder="Write a message…" />
|
|
299
|
+
*/
|
|
300
|
+
declare const AiChatComposerEditor: react.ForwardRefExoticComponent<AiChatComposerEditorProps & react.RefAttributes<HTMLDivElement>>;
|
|
301
|
+
/**
|
|
302
|
+
* A button to submit a chat message.
|
|
303
|
+
*
|
|
304
|
+
* @example
|
|
305
|
+
* <AiChatComposer.Submit>Send</AiChatComposer.Submit>
|
|
306
|
+
*/
|
|
307
|
+
declare const AiChatComposerSubmit: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & SlotProp & react.RefAttributes<HTMLButtonElement>>;
|
|
308
|
+
|
|
243
309
|
declare function capitalize(string: string): string;
|
|
244
310
|
|
|
245
311
|
/**
|
|
@@ -252,4 +318,4 @@ declare function useInitial<T>(value: T | (() => T)): T;
|
|
|
252
318
|
|
|
253
319
|
declare function useRefs<T>(...refs: Ref<T>[]): RefCallback<T>;
|
|
254
320
|
|
|
255
|
-
export { AiChatAssistantMessage, AiChatAssistantMessageProps, AiChatComposer, AiChatComposerProps, AiChatUserMessage, AiChatUserMessageProps, ArrowCornerDownRightIcon, ArrowCornerUpRightIcon, ArrowDownIcon, ArrowUpIcon, AttachmentIcon, BellCrossedIcon, BellIcon, BlockquoteIcon, BoldIcon, Button, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CodeIcon, CommentIcon, CopyIcon, CrossIcon, DeleteIcon, EditIcon, EllipsisIcon, EmojiIcon, EmojiPlusIcon, H1Icon, H2Icon, H3Icon, ItalicIcon, LengthenIcon, List, ListOrderedIcon, ListUnorderedIcon, MentionIcon, QuestionMarkIcon, RedoIcon,
|
|
321
|
+
export { AiChatAssistantMessage, AiChatAssistantMessageProps, AiChatComposer, AiChatComposerEditor, AiChatComposerEditorProps, AiChatComposerForm, AiChatComposerFormProps, AiChatComposerProps, AiChatComposerSubmit, AiChatComposerSubmitProps, AiChatUserMessage, AiChatUserMessageProps, ArrowCornerDownRightIcon, ArrowCornerUpRightIcon, ArrowDownIcon, ArrowUpIcon, AttachmentIcon, BellCrossedIcon, BellIcon, BlockquoteIcon, BoldIcon, Button, CheckCircleFillIcon, CheckCircleIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CodeIcon, CommentIcon, CopyIcon, CrossIcon, DeleteIcon, EditIcon, EllipsisIcon, EmojiIcon, EmojiPlusIcon, GlobalComponents, H1Icon, H2Icon, H3Icon, ItalicIcon, LengthenIcon, List, ListOrderedIcon, ListUnorderedIcon, MentionIcon, QuestionMarkIcon, RedoIcon, RestoreIcon, RetryIcon, SearchIcon, SelectButton, SendIcon, ShortcutTooltip, ShortenIcon, SparklesIcon, SparklesTextIcon, SpinnerIcon, StopIcon, StrikethroughIcon, TextIcon, Tooltip, TranslateIcon, UnderlineIcon, UndoIcon, User, WarningIcon, capitalize, useComponents, useInitial, useRefs };
|
package/dist/_private/index.d.ts
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { ComponentType, ComponentPropsWithoutRef, ElementType, ReactNode, ComponentProps, FormEvent, Ref, RefCallback } from 'react';
|
|
3
3
|
import { UiAssistantMessage, CopilotId, UiUserMessage } from '@liveblocks/core';
|
|
4
4
|
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
5
5
|
export { TooltipProvider } from '@radix-ui/react-tooltip';
|
|
6
6
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
7
7
|
|
|
8
|
+
interface GlobalComponents {
|
|
9
|
+
Anchor: ComponentType<ComponentPropsWithoutRef<"a">> | "a";
|
|
10
|
+
}
|
|
11
|
+
type Components = GlobalComponents;
|
|
12
|
+
declare function useComponents(components?: Partial<Components>): Components;
|
|
13
|
+
|
|
8
14
|
type SlotProp = {
|
|
9
15
|
/**
|
|
10
16
|
* Replace the rendered element by the one passed as a child.
|
|
@@ -29,15 +35,11 @@ interface GlobalOverrides {
|
|
|
29
35
|
interface AiChatComposerOverrides {
|
|
30
36
|
AI_CHAT_COMPOSER_PLACEHOLDER: string;
|
|
31
37
|
AI_CHAT_COMPOSER_SEND: string;
|
|
32
|
-
AI_CHAT_COMPOSER_ATTACH_FILES: string;
|
|
33
|
-
AI_CHAT_COMPOSER_REMOVE_ATTACHMENT: string;
|
|
34
38
|
AI_CHAT_COMPOSER_ABORT: string;
|
|
35
39
|
}
|
|
36
40
|
interface AiChatMessageOverrides {
|
|
37
41
|
AI_CHAT_MESSAGE_DELETED: string;
|
|
38
42
|
AI_CHAT_MESSAGE_THINKING: string;
|
|
39
|
-
AI_CHAT_MESSAGE_COPY: string;
|
|
40
|
-
AI_CHAT_MESSAGE_TRY_AGAIN: string;
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
interface AiChatAssistantMessageProps extends ComponentProps<"div"> {
|
|
@@ -49,6 +51,10 @@ interface AiChatAssistantMessageProps extends ComponentProps<"div"> {
|
|
|
49
51
|
* Override the component's strings.
|
|
50
52
|
*/
|
|
51
53
|
overrides?: Partial<GlobalOverrides & AiChatMessageOverrides>;
|
|
54
|
+
/**
|
|
55
|
+
* Override the component's components.
|
|
56
|
+
*/
|
|
57
|
+
components?: Partial<GlobalComponents>;
|
|
52
58
|
}
|
|
53
59
|
declare const AiChatAssistantMessage: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<AiChatAssistantMessageProps, "ref"> & react.RefAttributes<HTMLDivElement>>>;
|
|
54
60
|
|
|
@@ -160,6 +166,10 @@ declare function BoldIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.E
|
|
|
160
166
|
|
|
161
167
|
declare function CheckIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
162
168
|
|
|
169
|
+
declare function CheckCircleIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
170
|
+
|
|
171
|
+
declare function CheckCircleFillIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
172
|
+
|
|
163
173
|
declare function ChevronDownIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
164
174
|
|
|
165
175
|
declare function ChevronLeftIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
@@ -206,10 +216,6 @@ declare function QuestionMarkIcon(props: ComponentProps<"svg">): react_jsx_runti
|
|
|
206
216
|
|
|
207
217
|
declare function RedoIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
208
218
|
|
|
209
|
-
declare function ResolveIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
210
|
-
|
|
211
|
-
declare function ResolvedIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
212
|
-
|
|
213
219
|
declare function RestoreIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
214
220
|
|
|
215
221
|
declare function RetryIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
@@ -240,6 +246,66 @@ declare function UndoIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.E
|
|
|
240
246
|
|
|
241
247
|
declare function WarningIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
242
248
|
|
|
249
|
+
interface AiChatComposerFormProps extends ComponentPropsWithSlot<"form"> {
|
|
250
|
+
/**
|
|
251
|
+
* The event handler called when a chat message is submitted.
|
|
252
|
+
*/
|
|
253
|
+
onComposerSubmit?: (message: {
|
|
254
|
+
/**
|
|
255
|
+
* The submitted message text.
|
|
256
|
+
*/
|
|
257
|
+
text: string;
|
|
258
|
+
}, event: FormEvent<HTMLFormElement>) => void;
|
|
259
|
+
/**
|
|
260
|
+
* Whether the composer is disabled.
|
|
261
|
+
*/
|
|
262
|
+
disabled?: boolean;
|
|
263
|
+
}
|
|
264
|
+
interface AiChatComposerEditorProps extends Omit<ComponentPropsWithoutRef<"div">, "defaultValue"> {
|
|
265
|
+
/**
|
|
266
|
+
* The editor's initial value.
|
|
267
|
+
*/
|
|
268
|
+
defaultValue?: string;
|
|
269
|
+
/**
|
|
270
|
+
* The text to display when the editor is empty.
|
|
271
|
+
*/
|
|
272
|
+
placeholder?: string;
|
|
273
|
+
/**
|
|
274
|
+
* Whether the editor is disabled.
|
|
275
|
+
*/
|
|
276
|
+
disabled?: boolean;
|
|
277
|
+
/**
|
|
278
|
+
* Whether to focus the editor on mount.
|
|
279
|
+
*/
|
|
280
|
+
autoFocus?: boolean;
|
|
281
|
+
}
|
|
282
|
+
type AiChatComposerSubmitProps = ComponentPropsWithSlot<"button">;
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Surrounds the chat composer's content and handles submissions.
|
|
286
|
+
*
|
|
287
|
+
* @example
|
|
288
|
+
* <AiChatComposer.Form onComposerSubmit={({ text }) => {}}>
|
|
289
|
+
* <AiChatComposer.Editor />
|
|
290
|
+
* <AiChatComposer.Submit />
|
|
291
|
+
* </AiChatComposer.Form>
|
|
292
|
+
*/
|
|
293
|
+
declare const AiChatComposerForm: react.ForwardRefExoticComponent<AiChatComposerFormProps & react.RefAttributes<HTMLFormElement>>;
|
|
294
|
+
/**
|
|
295
|
+
* Displays the chat composer's editor.
|
|
296
|
+
*
|
|
297
|
+
* @example
|
|
298
|
+
* <AiChatComposer.Editor placeholder="Write a message…" />
|
|
299
|
+
*/
|
|
300
|
+
declare const AiChatComposerEditor: react.ForwardRefExoticComponent<AiChatComposerEditorProps & react.RefAttributes<HTMLDivElement>>;
|
|
301
|
+
/**
|
|
302
|
+
* A button to submit a chat message.
|
|
303
|
+
*
|
|
304
|
+
* @example
|
|
305
|
+
* <AiChatComposer.Submit>Send</AiChatComposer.Submit>
|
|
306
|
+
*/
|
|
307
|
+
declare const AiChatComposerSubmit: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & SlotProp & react.RefAttributes<HTMLButtonElement>>;
|
|
308
|
+
|
|
243
309
|
declare function capitalize(string: string): string;
|
|
244
310
|
|
|
245
311
|
/**
|
|
@@ -252,4 +318,4 @@ declare function useInitial<T>(value: T | (() => T)): T;
|
|
|
252
318
|
|
|
253
319
|
declare function useRefs<T>(...refs: Ref<T>[]): RefCallback<T>;
|
|
254
320
|
|
|
255
|
-
export { AiChatAssistantMessage, AiChatAssistantMessageProps, AiChatComposer, AiChatComposerProps, AiChatUserMessage, AiChatUserMessageProps, ArrowCornerDownRightIcon, ArrowCornerUpRightIcon, ArrowDownIcon, ArrowUpIcon, AttachmentIcon, BellCrossedIcon, BellIcon, BlockquoteIcon, BoldIcon, Button, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CodeIcon, CommentIcon, CopyIcon, CrossIcon, DeleteIcon, EditIcon, EllipsisIcon, EmojiIcon, EmojiPlusIcon, H1Icon, H2Icon, H3Icon, ItalicIcon, LengthenIcon, List, ListOrderedIcon, ListUnorderedIcon, MentionIcon, QuestionMarkIcon, RedoIcon,
|
|
321
|
+
export { AiChatAssistantMessage, AiChatAssistantMessageProps, AiChatComposer, AiChatComposerEditor, AiChatComposerEditorProps, AiChatComposerForm, AiChatComposerFormProps, AiChatComposerProps, AiChatComposerSubmit, AiChatComposerSubmitProps, AiChatUserMessage, AiChatUserMessageProps, ArrowCornerDownRightIcon, ArrowCornerUpRightIcon, ArrowDownIcon, ArrowUpIcon, AttachmentIcon, BellCrossedIcon, BellIcon, BlockquoteIcon, BoldIcon, Button, CheckCircleFillIcon, CheckCircleIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CodeIcon, CommentIcon, CopyIcon, CrossIcon, DeleteIcon, EditIcon, EllipsisIcon, EmojiIcon, EmojiPlusIcon, GlobalComponents, H1Icon, H2Icon, H3Icon, ItalicIcon, LengthenIcon, List, ListOrderedIcon, ListUnorderedIcon, MentionIcon, QuestionMarkIcon, RedoIcon, RestoreIcon, RetryIcon, SearchIcon, SelectButton, SendIcon, ShortcutTooltip, ShortenIcon, SparklesIcon, SparklesTextIcon, SpinnerIcon, StopIcon, StrikethroughIcon, TextIcon, Tooltip, TranslateIcon, UnderlineIcon, UndoIcon, User, WarningIcon, capitalize, useComponents, useInitial, useRefs };
|
package/dist/_private/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { useComponents } from '../components.js';
|
|
1
2
|
export { AiChatAssistantMessage } from '../components/internal/AiChatAssistantMessage.js';
|
|
2
3
|
export { AiChatComposer } from '../components/internal/AiChatComposer.js';
|
|
3
4
|
export { AiChatUserMessage } from '../components/internal/AiChatUserMessage.js';
|
|
@@ -6,6 +7,7 @@ export { List } from '../components/internal/List.js';
|
|
|
6
7
|
export { ShortcutTooltip, Tooltip } from '../components/internal/Tooltip.js';
|
|
7
8
|
export { User } from '../components/internal/User.js';
|
|
8
9
|
import '../icons/index.js';
|
|
10
|
+
export { AiChatComposerEditor, AiChatComposerForm, AiChatComposerSubmit } from '../primitives/AiChatComposer/index.js';
|
|
9
11
|
export { capitalize } from '../utils/capitalize.js';
|
|
10
12
|
export { useInitial } from '../utils/use-initial.js';
|
|
11
13
|
export { useRefs } from '../utils/use-refs.js';
|
|
@@ -20,6 +22,8 @@ export { BellCrossedIcon } from '../icons/BellCrossed.js';
|
|
|
20
22
|
export { BlockquoteIcon } from '../icons/Blockquote.js';
|
|
21
23
|
export { BoldIcon } from '../icons/Bold.js';
|
|
22
24
|
export { CheckIcon } from '../icons/Check.js';
|
|
25
|
+
export { CheckCircleIcon } from '../icons/CheckCircle.js';
|
|
26
|
+
export { CheckCircleFillIcon } from '../icons/CheckCircleFill.js';
|
|
23
27
|
export { ChevronDownIcon } from '../icons/ChevronDown.js';
|
|
24
28
|
export { ChevronLeftIcon } from '../icons/ChevronLeft.js';
|
|
25
29
|
export { ChevronRightIcon } from '../icons/ChevronRight.js';
|
|
@@ -43,8 +47,6 @@ export { ListUnorderedIcon } from '../icons/ListUnordered.js';
|
|
|
43
47
|
export { MentionIcon } from '../icons/Mention.js';
|
|
44
48
|
export { QuestionMarkIcon } from '../icons/QuestionMark.js';
|
|
45
49
|
export { RedoIcon } from '../icons/Redo.js';
|
|
46
|
-
export { ResolveIcon } from '../icons/Resolve.js';
|
|
47
|
-
export { ResolvedIcon } from '../icons/Resolved.js';
|
|
48
50
|
export { RestoreIcon } from '../icons/Restore.js';
|
|
49
51
|
export { RetryIcon } from '../icons/Retry.js';
|
|
50
52
|
export { SearchIcon } from '../icons/Search.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -20,8 +20,9 @@ const AiChat = react.forwardRef(
|
|
|
20
20
|
copilotId,
|
|
21
21
|
autoFocus,
|
|
22
22
|
overrides: overrides$1,
|
|
23
|
-
|
|
23
|
+
knowledge,
|
|
24
24
|
tools = {},
|
|
25
|
+
components,
|
|
25
26
|
className,
|
|
26
27
|
...props
|
|
27
28
|
}, forwardedRef) => {
|
|
@@ -32,29 +33,23 @@ const AiChat = react.forwardRef(
|
|
|
32
33
|
null
|
|
33
34
|
);
|
|
34
35
|
const client = react$1.useClient();
|
|
36
|
+
const ai = client[core.kInternal].ai;
|
|
37
|
+
const [lastSendMessageId, setLastSendMessageId] = react.useState(null);
|
|
35
38
|
react.useImperativeHandle(
|
|
36
39
|
forwardedRef,
|
|
37
40
|
() => containerRef.current,
|
|
38
41
|
[]
|
|
39
42
|
);
|
|
40
|
-
react.useEffect(() => {
|
|
41
|
-
const unregister = knowledgeSources.map(
|
|
42
|
-
(source) => client[core.kInternal].ai.registerKnowledgeSource(chatId, source)
|
|
43
|
-
);
|
|
44
|
-
return () => {
|
|
45
|
-
unregister.forEach((unregister2) => unregister2());
|
|
46
|
-
};
|
|
47
|
-
}, [client, chatId, knowledgeSources]);
|
|
48
43
|
react.useEffect(() => {
|
|
49
44
|
Object.entries(tools).map(
|
|
50
|
-
([key, value]) =>
|
|
45
|
+
([key, value]) => ai.registerChatTool(chatId, key, value)
|
|
51
46
|
);
|
|
52
47
|
return () => {
|
|
53
48
|
Object.entries(tools).map(
|
|
54
|
-
([key]) =>
|
|
49
|
+
([key]) => ai.unregisterChatTool(chatId, key)
|
|
55
50
|
);
|
|
56
51
|
};
|
|
57
|
-
}, [
|
|
52
|
+
}, [ai, chatId, tools]);
|
|
58
53
|
react.useEffect(() => {
|
|
59
54
|
const container = containerRef.current;
|
|
60
55
|
if (container === null)
|
|
@@ -84,16 +79,11 @@ const AiChat = react.forwardRef(
|
|
|
84
79
|
const container = containerRef.current;
|
|
85
80
|
if (container === null)
|
|
86
81
|
return;
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
top: container.scrollHeight,
|
|
93
|
-
behavior: "smooth"
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
}, [messages]);
|
|
82
|
+
container.scrollTo({
|
|
83
|
+
top: container.scrollHeight,
|
|
84
|
+
behavior: "smooth"
|
|
85
|
+
});
|
|
86
|
+
}, [lastSendMessageId]);
|
|
97
87
|
react.useEffect(() => {
|
|
98
88
|
const container = containerRef.current;
|
|
99
89
|
if (container === null)
|
|
@@ -129,6 +119,10 @@ const AiChat = react.forwardRef(
|
|
|
129
119
|
...props,
|
|
130
120
|
className: classNames.classNames("lb-root lb-ai-chat", className),
|
|
131
121
|
children: [
|
|
122
|
+
knowledge ? knowledge.map((source, index) => /* @__PURE__ */ jsxRuntime.jsx(react$1.RegisterAiKnowledge, {
|
|
123
|
+
description: source.description,
|
|
124
|
+
value: source.value
|
|
125
|
+
}, index)) : null,
|
|
132
126
|
/* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
133
127
|
className: "lb-ai-chat-content",
|
|
134
128
|
children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
@@ -142,6 +136,7 @@ const AiChat = react.forwardRef(
|
|
|
142
136
|
children: /* @__PURE__ */ jsxRuntime.jsx(Messages, {
|
|
143
137
|
messages,
|
|
144
138
|
overrides: $,
|
|
139
|
+
components,
|
|
145
140
|
onDistanceToBottomChange: scrollToBottomCallbackRef.current
|
|
146
141
|
})
|
|
147
142
|
})
|
|
@@ -179,7 +174,8 @@ const AiChat = react.forwardRef(
|
|
|
179
174
|
chatId,
|
|
180
175
|
copilotId,
|
|
181
176
|
overrides: $,
|
|
182
|
-
autoFocus
|
|
177
|
+
autoFocus,
|
|
178
|
+
onUserMessageCreate: ({ id }) => setLastSendMessageId(id)
|
|
183
179
|
}, chatId)
|
|
184
180
|
]
|
|
185
181
|
})
|
|
@@ -189,10 +185,10 @@ const AiChat = react.forwardRef(
|
|
|
189
185
|
);
|
|
190
186
|
function Messages({
|
|
191
187
|
messages,
|
|
192
|
-
overrides
|
|
188
|
+
overrides,
|
|
189
|
+
components,
|
|
193
190
|
onDistanceToBottomChange
|
|
194
191
|
}) {
|
|
195
|
-
const $ = overrides.useOverrides(overrides$1);
|
|
196
192
|
_private.useLayoutEffect(() => {
|
|
197
193
|
onDistanceToBottomChange();
|
|
198
194
|
}, [onDistanceToBottomChange]);
|
|
@@ -200,12 +196,13 @@ function Messages({
|
|
|
200
196
|
if (message.role === "user") {
|
|
201
197
|
return /* @__PURE__ */ jsxRuntime.jsx(AiChatUserMessage.AiChatUserMessage, {
|
|
202
198
|
message,
|
|
203
|
-
overrides
|
|
199
|
+
overrides
|
|
204
200
|
}, message.id);
|
|
205
201
|
} else if (message.role === "assistant") {
|
|
206
202
|
return /* @__PURE__ */ jsxRuntime.jsx(AiChatAssistantMessage.AiChatAssistantMessage, {
|
|
207
203
|
message,
|
|
208
|
-
overrides
|
|
204
|
+
overrides,
|
|
205
|
+
components
|
|
209
206
|
}, message.id);
|
|
210
207
|
} else {
|
|
211
208
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiChat.cjs","sources":["../../src/components/AiChat.tsx"],"sourcesContent":["import type {\n AiKnowledgeSource,\n ClientToolDefinition,\n CopilotId,\n UiChatMessage,\n} from \"@liveblocks/core\";\nimport { kInternal } from \"@liveblocks/core\";\nimport { useAiChatMessages, useClient } from \"@liveblocks/react\";\nimport { useLayoutEffect } from \"@liveblocks/react/_private\";\nimport {\n type ComponentProps,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\n\nimport { ArrowDownIcon } from \"../icons/ArrowDown\";\nimport { SpinnerIcon } from \"../icons/Spinner\";\nimport {\n type AiChatComposerOverrides,\n type AiChatMessageOverrides,\n type AiChatOverrides,\n type GlobalOverrides,\n useOverrides,\n} from \"../overrides\";\nimport { classNames } from \"../utils/class-names\";\nimport { AiChatAssistantMessage } from \"./internal/AiChatAssistantMessage\";\nimport { AiChatComposer } from \"./internal/AiChatComposer\";\nimport { AiChatUserMessage } from \"./internal/AiChatUserMessage\";\n\n/**\n * The number of pixels from the bottom of the messages list to trigger the scroll to bottom.\n */\nconst MIN_DISTANCE_TO_BOTTOM = 50;\n\nexport interface AiChatProps extends ComponentProps<\"div\"> {\n /**\n * The id of the chat the composer belongs to.\n */\n chatId: string;\n /**\n * Whether to focus the chat composer on mount.\n */\n autoFocus?: boolean;\n /**\n * The id of the copilot to use to send the message.\n */\n copilotId?: string;\n /**\n * The contextual knowledge to include in the chat. May be used by the assistant when generating responses.\n */\n knowledgeSources?: AiKnowledgeSource[];\n /**\n * Tool definitions to make available within this chat. May be used by the assistant when generating responses.\n */\n tools?: Record<string, ClientToolDefinition>;\n /**\n * Override the component's strings.\n */\n overrides?: Partial<\n GlobalOverrides &\n AiChatMessageOverrides &\n AiChatComposerOverrides &\n AiChatOverrides\n >;\n}\n\nexport const AiChat = forwardRef<HTMLDivElement, AiChatProps>(\n (\n {\n chatId,\n copilotId,\n autoFocus,\n overrides,\n knowledgeSources = [],\n tools = {},\n className,\n ...props\n },\n forwardedRef\n ) => {\n const { messages, isLoading, error } = useAiChatMessages(chatId);\n const $ = useOverrides(overrides);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [distanceToBottom, setDistanceToBottom] = useState<number | null>(\n null\n );\n const client = useClient();\n\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(\n forwardedRef,\n () => containerRef.current,\n []\n );\n\n // Add the provided contextual information to the chat on mount and remove on unmount\n // Note: 'contexts' will most likely be a new object on each render (unless user passes a stable object), but this won't be an issue as context addition and removal is a quick operation\n useEffect(() => {\n const unregister = knowledgeSources.map((source) =>\n client[kInternal].ai.registerKnowledgeSource(chatId, source)\n );\n return () => {\n unregister.forEach((unregister) => unregister());\n };\n }, [client, chatId, knowledgeSources]);\n\n // Register the provided tools to the chat on mount and unregister them on unmount\n useEffect(() => {\n Object.entries(tools).map(([key, value]) =>\n client[kInternal].ai.registerChatTool(chatId, key, value)\n );\n return () => {\n Object.entries(tools).map(([key]) =>\n client[kInternal].ai.unregisterChatTool(chatId, key)\n );\n };\n }, [client, chatId, tools]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n function handleScrollChange() {\n const container = containerRef.current;\n if (container === null) return;\n\n setDistanceToBottom(\n container.scrollHeight - container.clientHeight - container.scrollTop\n );\n }\n container.addEventListener(\"scroll\", handleScrollChange);\n return () => {\n container.removeEventListener(\"scroll\", handleScrollChange);\n };\n }, []);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n\n setDistanceToBottom(\n container.scrollHeight - container.clientHeight - container.scrollTop\n );\n }, [messages]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n\n if (messages === undefined) return;\n const lastMessage = messages[messages.length - 1];\n if (lastMessage !== undefined && lastMessage.role === \"user\") {\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"smooth\",\n });\n }\n }, [messages]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n\n const observer = new ResizeObserver(() => {\n const container = containerRef.current;\n if (container === null) return;\n setDistanceToBottom(\n container.scrollHeight - container.clientHeight - container.scrollTop\n );\n });\n observer.observe(container);\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const scrollToBottomCallbackRef = useRef<() => void>(undefined);\n if (scrollToBottomCallbackRef.current === undefined) {\n scrollToBottomCallbackRef.current = function () {\n const container = containerRef.current;\n if (container === null) return;\n\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"instant\",\n });\n };\n }\n const isScrollIndicatorVisible =\n distanceToBottom !== null && distanceToBottom > MIN_DISTANCE_TO_BOTTOM;\n\n return (\n <div\n ref={containerRef}\n {...props}\n className={classNames(\"lb-root lb-ai-chat\", className)}\n >\n <div className=\"lb-ai-chat-content\">\n {isLoading ? (\n <div className=\"lb-loading lb-ai-chat-loading\">\n <SpinnerIcon />\n </div>\n ) : error !== undefined ? (\n <div className=\"lb-error lb-ai-chat-error\">\n {$.AI_CHAT_MESSAGES_ERROR(error)}\n </div>\n ) : (\n <div className=\"lb-ai-chat-messages\">\n <Messages\n messages={messages}\n overrides={$}\n onDistanceToBottomChange={scrollToBottomCallbackRef.current}\n />\n </div>\n )}\n </div>\n\n <div className=\"lb-ai-chat-footer\">\n <div className=\"lb-ai-chat-footer-actions\">\n <div\n className=\"lb-elevation lb-ai-chat-scroll-indicator\"\n data-visible={isScrollIndicatorVisible ? \"\" : undefined}\n >\n <button\n className=\"lb-ai-chat-scroll-indicator-button\"\n tabIndex={isScrollIndicatorVisible ? 0 : -1}\n aria-hidden={!isScrollIndicatorVisible}\n disabled={!isScrollIndicatorVisible}\n onClick={() => {\n const container = containerRef.current;\n if (container === null) return;\n\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"smooth\",\n });\n }}\n >\n <span className=\"lb-icon-container\">\n <ArrowDownIcon />\n </span>\n </button>\n </div>\n </div>\n <AiChatComposer\n key={chatId}\n chatId={chatId}\n copilotId={copilotId as CopilotId}\n overrides={$}\n autoFocus={autoFocus}\n />\n </div>\n </div>\n );\n }\n);\n\nfunction Messages({\n messages,\n overrides,\n onDistanceToBottomChange,\n}: {\n messages: readonly UiChatMessage[];\n overrides: Partial<GlobalOverrides & AiChatMessageOverrides>;\n onDistanceToBottomChange: () => void;\n}) {\n const $ = useOverrides(overrides);\n\n useLayoutEffect(() => {\n onDistanceToBottomChange();\n }, [onDistanceToBottomChange]);\n\n return messages.map((message) => {\n if (message.role === \"user\") {\n return (\n <AiChatUserMessage key={message.id} message={message} overrides={$} />\n );\n } else if (message.role === \"assistant\") {\n return (\n <AiChatAssistantMessage\n key={message.id}\n message={message}\n overrides={$}\n />\n );\n } else {\n return null;\n }\n });\n}\n"],"names":["forwardRef","overrides","useAiChatMessages","useOverrides","useRef","useState","useClient","useImperativeHandle","useEffect","kInternal","unregister","container","jsxs","classNames","jsx","SpinnerIcon","ArrowDownIcon","AiChatComposer","useLayoutEffect","AiChatUserMessage","AiChatAssistantMessage"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AiChat.cjs","sources":["../../src/components/AiChat.tsx"],"sourcesContent":["import type {\n AiKnowledgeSource,\n AiToolDefinition,\n CopilotId,\n MessageId,\n UiChatMessage,\n} from \"@liveblocks/core\";\nimport { kInternal } from \"@liveblocks/core\";\nimport {\n RegisterAiKnowledge,\n useAiChatMessages,\n useClient,\n} from \"@liveblocks/react\";\nimport { useLayoutEffect } from \"@liveblocks/react/_private\";\nimport {\n type ComponentProps,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\n\nimport type { GlobalComponents } from \"../components\";\nimport { ArrowDownIcon } from \"../icons/ArrowDown\";\nimport { SpinnerIcon } from \"../icons/Spinner\";\nimport {\n type AiChatComposerOverrides,\n type AiChatMessageOverrides,\n type AiChatOverrides,\n type GlobalOverrides,\n useOverrides,\n} from \"../overrides\";\nimport { classNames } from \"../utils/class-names\";\nimport { AiChatAssistantMessage } from \"./internal/AiChatAssistantMessage\";\nimport { AiChatComposer } from \"./internal/AiChatComposer\";\nimport { AiChatUserMessage } from \"./internal/AiChatUserMessage\";\n\n/**\n * The number of pixels from the bottom of the messages list to trigger the scroll to bottom.\n */\nconst MIN_DISTANCE_TO_BOTTOM = 50;\n\nexport interface AiChatProps extends ComponentProps<\"div\"> {\n /**\n * The id of the chat the composer belongs to.\n */\n chatId: string;\n /**\n * Whether to focus the chat composer on mount.\n */\n autoFocus?: boolean;\n /**\n * The id of the copilot to use to send the message.\n */\n copilotId?: string;\n /**\n * The contextual knowledge to include in the chat. May be used by the assistant when generating responses.\n * Any knowledge you provide via this prop will be added to any already globally registered knowledge via <RegisterAiKnowledge />.\n */\n knowledge?: AiKnowledgeSource[];\n /**\n * Tool definitions to make available within this chat. May be used by the assistant when generating responses.\n */\n tools?: Record<string, AiToolDefinition>;\n /**\n * Override the component's strings.\n */\n overrides?: Partial<\n GlobalOverrides &\n AiChatMessageOverrides &\n AiChatComposerOverrides &\n AiChatOverrides\n >;\n /**\n * Override the component's components.\n */\n components?: Partial<GlobalComponents>; // TODO: Add more slots than the global ones over time (Markdown tags, the empty state, etc)\n}\n\nexport const AiChat = forwardRef<HTMLDivElement, AiChatProps>(\n (\n {\n chatId,\n copilotId,\n autoFocus,\n overrides,\n knowledge,\n tools = {},\n components,\n className,\n ...props\n },\n forwardedRef\n ) => {\n const { messages, isLoading, error } = useAiChatMessages(chatId);\n const $ = useOverrides(overrides);\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [distanceToBottom, setDistanceToBottom] = useState<number | null>(\n null\n );\n const client = useClient();\n const ai = client[kInternal].ai;\n\n const [lastSendMessageId, setLastSendMessageId] =\n useState<MessageId | null>(null);\n\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(\n forwardedRef,\n () => containerRef.current,\n []\n );\n\n // Register the provided tools to the chat on mount and unregister them on unmount\n useEffect(() => {\n Object.entries(tools).map(([key, value]) =>\n ai.registerChatTool(chatId, key, value)\n );\n return () => {\n Object.entries(tools).map(([key]) =>\n ai.unregisterChatTool(chatId, key)\n );\n };\n }, [ai, chatId, tools]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n function handleScrollChange() {\n const container = containerRef.current;\n if (container === null) return;\n\n setDistanceToBottom(\n container.scrollHeight - container.clientHeight - container.scrollTop\n );\n }\n container.addEventListener(\"scroll\", handleScrollChange);\n return () => {\n container.removeEventListener(\"scroll\", handleScrollChange);\n };\n }, []);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n\n setDistanceToBottom(\n container.scrollHeight - container.clientHeight - container.scrollTop\n );\n }, [messages]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"smooth\",\n });\n }, [lastSendMessageId]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (container === null) return;\n\n const observer = new ResizeObserver(() => {\n const container = containerRef.current;\n if (container === null) return;\n setDistanceToBottom(\n container.scrollHeight - container.clientHeight - container.scrollTop\n );\n });\n observer.observe(container);\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const scrollToBottomCallbackRef = useRef<() => void>(undefined);\n if (scrollToBottomCallbackRef.current === undefined) {\n scrollToBottomCallbackRef.current = function () {\n const container = containerRef.current;\n if (container === null) return;\n\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"instant\",\n });\n };\n }\n const isScrollIndicatorVisible =\n distanceToBottom !== null && distanceToBottom > MIN_DISTANCE_TO_BOTTOM;\n\n return (\n <div\n ref={containerRef}\n {...props}\n className={classNames(\"lb-root lb-ai-chat\", className)}\n >\n {knowledge\n ? knowledge.map((source, index) => (\n <RegisterAiKnowledge\n key={index}\n description={source.description}\n value={source.value}\n // knowledgeKey={source.knowledgeKey}\n />\n ))\n : null}\n <div className=\"lb-ai-chat-content\">\n {isLoading ? (\n <div className=\"lb-loading lb-ai-chat-loading\">\n <SpinnerIcon />\n </div>\n ) : error !== undefined ? (\n <div className=\"lb-error lb-ai-chat-error\">\n {$.AI_CHAT_MESSAGES_ERROR(error)}\n </div>\n ) : (\n <div className=\"lb-ai-chat-messages\">\n <Messages\n messages={messages}\n overrides={$}\n components={components}\n onDistanceToBottomChange={scrollToBottomCallbackRef.current}\n />\n </div>\n )}\n </div>\n\n <div className=\"lb-ai-chat-footer\">\n <div className=\"lb-ai-chat-footer-actions\">\n <div\n className=\"lb-elevation lb-ai-chat-scroll-indicator\"\n data-visible={isScrollIndicatorVisible ? \"\" : undefined}\n >\n <button\n className=\"lb-ai-chat-scroll-indicator-button\"\n tabIndex={isScrollIndicatorVisible ? 0 : -1}\n aria-hidden={!isScrollIndicatorVisible}\n disabled={!isScrollIndicatorVisible}\n onClick={() => {\n const container = containerRef.current;\n if (container === null) return;\n\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"smooth\",\n });\n }}\n >\n <span className=\"lb-icon-container\">\n <ArrowDownIcon />\n </span>\n </button>\n </div>\n </div>\n <AiChatComposer\n key={chatId}\n chatId={chatId}\n copilotId={copilotId as CopilotId}\n overrides={$}\n autoFocus={autoFocus}\n onUserMessageCreate={({ id }) => setLastSendMessageId(id)}\n />\n </div>\n </div>\n );\n }\n);\n\nfunction Messages({\n messages,\n overrides,\n components,\n onDistanceToBottomChange,\n}: {\n messages: readonly UiChatMessage[];\n overrides?: Partial<GlobalOverrides & AiChatMessageOverrides>;\n components?: Partial<GlobalComponents>;\n onDistanceToBottomChange: () => void;\n}) {\n useLayoutEffect(() => {\n onDistanceToBottomChange();\n }, [onDistanceToBottomChange]);\n\n return messages.map((message) => {\n if (message.role === \"user\") {\n return (\n <AiChatUserMessage\n key={message.id}\n message={message}\n overrides={overrides}\n />\n );\n } else if (message.role === \"assistant\") {\n return (\n <AiChatAssistantMessage\n key={message.id}\n message={message}\n overrides={overrides}\n components={components}\n />\n );\n } else {\n return null;\n }\n });\n}\n"],"names":["forwardRef","overrides","useAiChatMessages","useOverrides","useRef","useState","useClient","kInternal","useImperativeHandle","useEffect","container","jsxs","classNames","jsx","RegisterAiKnowledge","SpinnerIcon","ArrowDownIcon","AiChatComposer","useLayoutEffect","AiChatUserMessage","AiChatAssistantMessage"],"mappings":"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"}
|