@liveblocks/react-ui 2.25.0-aiprivatebeta8 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_private/package.json +2 -2
- package/dist/_private/index.cjs +14 -12
- package/dist/_private/index.cjs.map +1 -1
- package/dist/_private/index.d.cts +146 -113
- package/dist/_private/index.d.ts +146 -113
- package/dist/_private/index.js +10 -5
- package/dist/_private/index.js.map +1 -1
- package/dist/components/AiChat.cjs +85 -121
- package/dist/components/AiChat.cjs.map +1 -1
- package/dist/components/AiChat.js +87 -123
- package/dist/components/AiChat.js.map +1 -1
- package/dist/components/AiTool.cjs +188 -0
- package/dist/components/AiTool.cjs.map +1 -0
- package/dist/components/AiTool.js +186 -0
- package/dist/components/AiTool.js.map +1 -0
- package/dist/components/Comment.cjs +259 -238
- package/dist/components/Comment.cjs.map +1 -1
- package/dist/components/Comment.js +261 -240
- package/dist/components/Comment.js.map +1 -1
- package/dist/components/Composer.cjs +42 -30
- package/dist/components/Composer.cjs.map +1 -1
- package/dist/components/Composer.js +44 -32
- package/dist/components/Composer.js.map +1 -1
- package/dist/components/InboxNotificationList.cjs +11 -3
- package/dist/components/InboxNotificationList.cjs.map +1 -1
- package/dist/components/InboxNotificationList.js +12 -4
- package/dist/components/InboxNotificationList.js.map +1 -1
- package/dist/components/Thread.cjs +7 -1
- package/dist/components/Thread.cjs.map +1 -1
- package/dist/components/Thread.js +8 -2
- package/dist/components/Thread.js.map +1 -1
- package/dist/components/internal/AiChatAssistantMessage.cjs +75 -199
- package/dist/components/internal/AiChatAssistantMessage.cjs.map +1 -1
- package/dist/components/internal/AiChatAssistantMessage.js +77 -201
- package/dist/components/internal/AiChatAssistantMessage.js.map +1 -1
- package/dist/components/internal/AiChatComposer.cjs +1 -1
- package/dist/components/internal/AiChatComposer.cjs.map +1 -1
- package/dist/components/internal/AiChatComposer.js +1 -1
- package/dist/components/internal/AiChatComposer.js.map +1 -1
- package/dist/components/internal/AiChatUserMessage.cjs +17 -10
- package/dist/components/internal/AiChatUserMessage.cjs.map +1 -1
- package/dist/components/internal/AiChatUserMessage.js +17 -10
- package/dist/components/internal/AiChatUserMessage.js.map +1 -1
- package/dist/components/internal/Button.cjs.map +1 -1
- package/dist/components/internal/Button.js.map +1 -1
- package/dist/components/internal/CodeBlock.cjs +75 -0
- package/dist/components/internal/CodeBlock.cjs.map +1 -0
- package/dist/components/internal/CodeBlock.js +73 -0
- package/dist/components/internal/CodeBlock.js.map +1 -0
- package/dist/components/internal/Dropdown.cjs +1 -1
- package/dist/components/internal/Dropdown.cjs.map +1 -1
- package/dist/components/internal/Dropdown.js +2 -2
- package/dist/components/internal/Dropdown.js.map +1 -1
- package/dist/components/internal/Emoji.cjs +12 -4
- package/dist/components/internal/Emoji.cjs.map +1 -1
- package/dist/components/internal/Emoji.js +12 -4
- package/dist/components/internal/Emoji.js.map +1 -1
- package/dist/components/internal/EmojiPicker.cjs +1 -1
- package/dist/components/internal/EmojiPicker.cjs.map +1 -1
- package/dist/components/internal/EmojiPicker.js +2 -2
- package/dist/components/internal/EmojiPicker.js.map +1 -1
- package/dist/components/internal/InboxNotificationThread.cjs +5 -2
- package/dist/components/internal/InboxNotificationThread.cjs.map +1 -1
- package/dist/components/internal/InboxNotificationThread.js +6 -3
- package/dist/components/internal/InboxNotificationThread.js.map +1 -1
- package/dist/components/internal/Prose.cjs +37 -0
- package/dist/components/internal/Prose.cjs.map +1 -0
- package/dist/components/internal/Prose.js +35 -0
- package/dist/components/internal/Prose.js.map +1 -0
- package/dist/components/internal/Tooltip.cjs +1 -1
- package/dist/components/internal/Tooltip.cjs.map +1 -1
- package/dist/components/internal/Tooltip.js +2 -2
- package/dist/components/internal/Tooltip.js.map +1 -1
- package/dist/config.cjs +9 -9
- package/dist/config.cjs.map +1 -1
- package/dist/config.js +8 -8
- package/dist/config.js.map +1 -1
- package/dist/icons/CrossCircleFill.cjs +25 -0
- package/dist/icons/CrossCircleFill.cjs.map +1 -0
- package/dist/icons/CrossCircleFill.js +23 -0
- package/dist/icons/CrossCircleFill.js.map +1 -0
- package/dist/icons/MinusCircle.cjs +23 -0
- package/dist/icons/MinusCircle.cjs.map +1 -0
- package/dist/icons/MinusCircle.js +21 -0
- package/dist/icons/MinusCircle.js.map +1 -0
- package/dist/icons/index.cjs +4 -0
- package/dist/icons/index.cjs.map +1 -1
- package/dist/icons/index.js +2 -0
- package/dist/icons/index.js.map +1 -1
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +270 -22
- package/dist/index.d.ts +270 -22
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/overrides.cjs +6 -4
- package/dist/overrides.cjs.map +1 -1
- package/dist/overrides.js +6 -4
- package/dist/overrides.js.map +1 -1
- package/dist/primitives/AiMessage/contexts.cjs +18 -0
- package/dist/primitives/AiMessage/contexts.cjs.map +1 -0
- package/dist/primitives/AiMessage/contexts.js +15 -0
- package/dist/primitives/AiMessage/contexts.js.map +1 -0
- package/dist/primitives/AiMessage/index.cjs +77 -0
- package/dist/primitives/AiMessage/index.cjs.map +1 -0
- package/dist/primitives/AiMessage/index.js +75 -0
- package/dist/primitives/AiMessage/index.js.map +1 -0
- package/dist/primitives/AiMessage/tool-invocation.cjs +70 -0
- package/dist/primitives/AiMessage/tool-invocation.cjs.map +1 -0
- package/dist/primitives/AiMessage/tool-invocation.js +68 -0
- package/dist/primitives/AiMessage/tool-invocation.js.map +1 -0
- package/dist/primitives/{internal/Collapsible → Collapsible}/index.cjs +39 -17
- package/dist/primitives/Collapsible/index.cjs.map +1 -0
- package/dist/primitives/{internal/Collapsible → Collapsible}/index.js +37 -15
- package/dist/primitives/Collapsible/index.js.map +1 -0
- package/dist/primitives/Comment/index.cjs +5 -4
- package/dist/primitives/Comment/index.cjs.map +1 -1
- package/dist/primitives/Comment/index.js +5 -4
- package/dist/primitives/Comment/index.js.map +1 -1
- package/dist/primitives/Composer/index.cjs +49 -41
- package/dist/primitives/Composer/index.cjs.map +1 -1
- package/dist/primitives/Composer/index.js +50 -42
- package/dist/primitives/Composer/index.js.map +1 -1
- package/dist/primitives/Composer/slate/plugins/mentions.cjs +4 -4
- package/dist/primitives/Composer/slate/plugins/mentions.cjs.map +1 -1
- package/dist/primitives/Composer/slate/plugins/mentions.js +4 -4
- package/dist/primitives/Composer/slate/plugins/mentions.js.map +1 -1
- package/dist/primitives/Composer/utils.cjs +3 -6
- package/dist/primitives/Composer/utils.cjs.map +1 -1
- package/dist/primitives/Composer/utils.js +3 -6
- package/dist/primitives/Composer/utils.js.map +1 -1
- package/dist/primitives/{internal/Markdown.cjs → Markdown.cjs} +105 -65
- package/dist/primitives/Markdown.cjs.map +1 -0
- package/dist/primitives/{internal/Markdown.js → Markdown.js} +106 -65
- package/dist/primitives/Markdown.js.map +1 -0
- package/dist/primitives/index.cjs +4 -6
- package/dist/primitives/index.cjs.map +1 -1
- package/dist/primitives/index.d.cts +20 -93
- package/dist/primitives/index.d.ts +20 -93
- package/dist/primitives/index.js +4 -6
- package/dist/primitives/index.js.map +1 -1
- package/dist/utils/ErrorBoundary.cjs +48 -0
- package/dist/utils/ErrorBoundary.cjs.map +1 -0
- package/dist/utils/ErrorBoundary.js +45 -0
- package/dist/utils/ErrorBoundary.js.map +1 -0
- package/dist/utils/use-controllable-state.cjs +25 -2
- package/dist/utils/use-controllable-state.cjs.map +1 -1
- package/dist/utils/use-controllable-state.js +25 -3
- package/dist/utils/use-controllable-state.js.map +1 -1
- package/dist/utils/use-visible.cjs +65 -45
- package/dist/utils/use-visible.cjs.map +1 -1
- package/dist/utils/use-visible.js +66 -46
- package/dist/utils/use-visible.js.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +16 -5
- package/primitives/package.json +2 -2
- package/src/styles/constants.css +1 -1
- package/src/styles/dark/index.css +7 -3
- package/src/styles/index.css +572 -252
- package/src/styles/utils.css +1 -1
- package/styles/dark/attributes.css +1 -1
- package/styles/dark/attributes.css.map +1 -1
- package/styles/dark/media-query.css +1 -1
- package/styles/dark/media-query.css.map +1 -1
- package/styles.css +1 -1
- package/styles.css.map +1 -1
- package/dist/components/AiToolDebugger.cjs +0 -74
- package/dist/components/AiToolDebugger.cjs.map +0 -1
- package/dist/components/AiToolDebugger.js +0 -72
- package/dist/components/AiToolDebugger.js.map +0 -1
- package/dist/primitives/internal/Collapsible/index.cjs.map +0 -1
- package/dist/primitives/internal/Collapsible/index.js.map +0 -1
- package/dist/primitives/internal/Emoji.cjs +0 -32
- package/dist/primitives/internal/Emoji.cjs.map +0 -1
- package/dist/primitives/internal/Emoji.js +0 -30
- package/dist/primitives/internal/Emoji.js.map +0 -1
- package/dist/primitives/internal/Markdown.cjs.map +0 -1
- package/dist/primitives/internal/Markdown.js.map +0 -1
package/dist/_private/index.d.ts
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
2
|
+
import { ComponentProps, ReactNode, ElementType, ComponentPropsWithoutRef, Ref, RefCallback, FormEvent, ComponentType } from 'react';
|
|
3
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
4
|
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
5
5
|
export { TooltipProvider } from '@radix-ui/react-tooltip';
|
|
6
|
-
import
|
|
6
|
+
import { AiTextPart, AiReasoningPart, AiChatMessage } from '@liveblocks/core';
|
|
7
7
|
|
|
8
|
-
interface
|
|
9
|
-
|
|
8
|
+
interface ButtonProps extends ComponentProps<"button"> {
|
|
9
|
+
variant?: "default" | "toolbar" | "outline" | "primary" | "secondary" | "destructive";
|
|
10
|
+
size?: "default" | "large";
|
|
11
|
+
disableable?: boolean;
|
|
12
|
+
icon?: ReactNode;
|
|
10
13
|
}
|
|
11
|
-
|
|
12
|
-
declare
|
|
14
|
+
declare const Button: react.ForwardRefExoticComponent<Omit<ButtonProps, "ref"> & react.RefAttributes<HTMLButtonElement>>;
|
|
15
|
+
declare const SelectButton: react.ForwardRefExoticComponent<Omit<ButtonProps, "ref"> & react.RefAttributes<HTMLButtonElement>>;
|
|
13
16
|
|
|
14
17
|
type SlotProp = {
|
|
15
18
|
/**
|
|
@@ -19,103 +22,6 @@ type SlotProp = {
|
|
|
19
22
|
};
|
|
20
23
|
type ComponentPropsWithSlot<TElement extends ElementType<any>> = ComponentPropsWithoutRef<TElement> & SlotProp;
|
|
21
24
|
|
|
22
|
-
interface GlobalOverrides {
|
|
23
|
-
USER_SELF: string;
|
|
24
|
-
USER_UNKNOWN: string;
|
|
25
|
-
LIST_REMAINING: (count: number) => string;
|
|
26
|
-
LIST_REMAINING_USERS: (count: number) => string;
|
|
27
|
-
LIST_REMAINING_COMMENTS: (count: number) => string;
|
|
28
|
-
EMOJI_PICKER_SEARCH_PLACEHOLDER: string;
|
|
29
|
-
EMOJI_PICKER_EMPTY: ReactNode;
|
|
30
|
-
EMOJI_PICKER_ERROR: (error: Error) => ReactNode;
|
|
31
|
-
EMOJI_PICKER_CHANGE_SKIN_TONE: string;
|
|
32
|
-
ATTACHMENT_TOO_LARGE: (maxSize?: string) => string;
|
|
33
|
-
ATTACHMENT_ERROR: (error: Error) => string;
|
|
34
|
-
}
|
|
35
|
-
interface AiChatComposerOverrides {
|
|
36
|
-
AI_CHAT_COMPOSER_PLACEHOLDER: string;
|
|
37
|
-
AI_CHAT_COMPOSER_SEND: string;
|
|
38
|
-
AI_CHAT_COMPOSER_ABORT: string;
|
|
39
|
-
}
|
|
40
|
-
interface AiChatMessageOverrides {
|
|
41
|
-
AI_CHAT_MESSAGE_DELETED: string;
|
|
42
|
-
AI_CHAT_MESSAGE_THINKING: string;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
interface AiChatAssistantMessageProps extends ComponentProps<"div"> {
|
|
46
|
-
/**
|
|
47
|
-
* The message to display.
|
|
48
|
-
*/
|
|
49
|
-
message: UiAssistantMessage;
|
|
50
|
-
/**
|
|
51
|
-
* Override the component's strings.
|
|
52
|
-
*/
|
|
53
|
-
overrides?: Partial<GlobalOverrides & AiChatMessageOverrides>;
|
|
54
|
-
/**
|
|
55
|
-
* Override the component's components.
|
|
56
|
-
*/
|
|
57
|
-
components?: Partial<GlobalComponents>;
|
|
58
|
-
}
|
|
59
|
-
declare const AiChatAssistantMessage: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<AiChatAssistantMessageProps, "ref"> & react.RefAttributes<HTMLDivElement>>>;
|
|
60
|
-
|
|
61
|
-
interface AiChatComposerProps extends ComponentProps<"form"> {
|
|
62
|
-
/**
|
|
63
|
-
* The composer's initial value.
|
|
64
|
-
*/
|
|
65
|
-
defaultValue?: string;
|
|
66
|
-
/**
|
|
67
|
-
* The event handler called when a chat message is submitted.
|
|
68
|
-
*/
|
|
69
|
-
onComposerSubmit?: (message: {
|
|
70
|
-
/**
|
|
71
|
-
* The submitted message text.
|
|
72
|
-
*/
|
|
73
|
-
text: string;
|
|
74
|
-
}, event: FormEvent<HTMLFormElement>) => void;
|
|
75
|
-
/**
|
|
76
|
-
* Whether the composer is disabled.
|
|
77
|
-
*/
|
|
78
|
-
disabled?: boolean;
|
|
79
|
-
/**
|
|
80
|
-
* Whether to focus the editor on mount.
|
|
81
|
-
*/
|
|
82
|
-
autoFocus?: boolean;
|
|
83
|
-
/**
|
|
84
|
-
* Override the component's strings.
|
|
85
|
-
*/
|
|
86
|
-
overrides?: Partial<GlobalOverrides & AiChatComposerOverrides>;
|
|
87
|
-
/**
|
|
88
|
-
* The id of the chat the composer belongs to.
|
|
89
|
-
*/
|
|
90
|
-
chatId: string;
|
|
91
|
-
/**
|
|
92
|
-
* The id of the copilot to use to send the message.
|
|
93
|
-
*/
|
|
94
|
-
copilotId?: CopilotId;
|
|
95
|
-
}
|
|
96
|
-
declare const AiChatComposer: react.ForwardRefExoticComponent<Omit<AiChatComposerProps, "ref"> & react.RefAttributes<HTMLFormElement>>;
|
|
97
|
-
|
|
98
|
-
interface AiChatUserMessageProps extends ComponentProps<"div"> {
|
|
99
|
-
/**
|
|
100
|
-
* The message to display.
|
|
101
|
-
*/
|
|
102
|
-
message: UiUserMessage;
|
|
103
|
-
/**
|
|
104
|
-
* Override the component's strings.
|
|
105
|
-
*/
|
|
106
|
-
overrides?: Partial<GlobalOverrides>;
|
|
107
|
-
}
|
|
108
|
-
declare const AiChatUserMessage: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<AiChatUserMessageProps, "ref"> & react.RefAttributes<HTMLDivElement>>>;
|
|
109
|
-
|
|
110
|
-
interface ButtonProps extends ComponentProps<"button"> {
|
|
111
|
-
variant?: "default" | "toolbar" | "outline" | "primary" | "secondary";
|
|
112
|
-
size?: "default" | "large";
|
|
113
|
-
disableable?: boolean;
|
|
114
|
-
icon?: ReactNode;
|
|
115
|
-
}
|
|
116
|
-
declare const Button: react.ForwardRefExoticComponent<Omit<ButtonProps, "ref"> & react.RefAttributes<HTMLButtonElement>>;
|
|
117
|
-
declare const SelectButton: react.ForwardRefExoticComponent<Omit<ButtonProps, "ref"> & react.RefAttributes<HTMLButtonElement>>;
|
|
118
|
-
|
|
119
25
|
interface ListProps extends ComponentPropsWithSlot<"span"> {
|
|
120
26
|
values: ReactNode[];
|
|
121
27
|
formatRemaining?: (amount: number) => string;
|
|
@@ -124,6 +30,15 @@ interface ListProps extends ComponentPropsWithSlot<"span"> {
|
|
|
124
30
|
}
|
|
125
31
|
declare const List: react.ForwardRefExoticComponent<ListProps & react.RefAttributes<HTMLSpanElement>>;
|
|
126
32
|
|
|
33
|
+
interface ProseProps extends ComponentProps<"div"> {
|
|
34
|
+
content: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* This component renders Markdown content with `lb-prose`
|
|
38
|
+
* styles and custom components (code blocks, etc)
|
|
39
|
+
*/
|
|
40
|
+
declare function Prose({ content, className, ...props }: ProseProps): react_jsx_runtime.JSX.Element;
|
|
41
|
+
|
|
127
42
|
interface TooltipProps extends Pick<TooltipPrimitive.TooltipTriggerProps, "children">, Omit<TooltipPrimitive.TooltipContentProps, "content"> {
|
|
128
43
|
content: ReactNode;
|
|
129
44
|
multiline?: boolean;
|
|
@@ -186,6 +101,8 @@ declare function CopyIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.E
|
|
|
186
101
|
|
|
187
102
|
declare function CrossIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
188
103
|
|
|
104
|
+
declare function CrossCircleFillIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
105
|
+
|
|
189
106
|
declare function DeleteIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
190
107
|
|
|
191
108
|
declare function EditIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
@@ -212,6 +129,8 @@ declare function ListUnorderedIcon(props: ComponentProps<"svg">): react_jsx_runt
|
|
|
212
129
|
|
|
213
130
|
declare function MentionIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
214
131
|
|
|
132
|
+
declare function MinusCircleIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
133
|
+
|
|
215
134
|
declare function QuestionMarkIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
216
135
|
|
|
217
136
|
declare function RedoIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
@@ -246,6 +165,18 @@ declare function UndoIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.E
|
|
|
246
165
|
|
|
247
166
|
declare function WarningIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
248
167
|
|
|
168
|
+
declare function capitalize(string: string): string;
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* "Freezes" a given value, so that it will return the same value/instance on
|
|
172
|
+
* each subsequent render. This can be used to freeze "initial" values for
|
|
173
|
+
* custom hooks, much like how `useState(initialState)` or
|
|
174
|
+
* `useRef(initialValue)` works.
|
|
175
|
+
*/
|
|
176
|
+
declare function useInitial<T>(value: T | (() => T)): T;
|
|
177
|
+
|
|
178
|
+
declare function useRefs<T>(...refs: Ref<T>[]): RefCallback<T>;
|
|
179
|
+
|
|
249
180
|
interface AiChatComposerFormProps extends ComponentPropsWithSlot<"form"> {
|
|
250
181
|
/**
|
|
251
182
|
* The event handler called when a chat message is submitted.
|
|
@@ -261,7 +192,7 @@ interface AiChatComposerFormProps extends ComponentPropsWithSlot<"form"> {
|
|
|
261
192
|
*/
|
|
262
193
|
disabled?: boolean;
|
|
263
194
|
}
|
|
264
|
-
interface AiChatComposerEditorProps extends Omit<ComponentPropsWithoutRef<"div">, "defaultValue"> {
|
|
195
|
+
interface AiChatComposerEditorProps extends Omit<ComponentPropsWithoutRef<"div">, "defaultValue" | "children"> {
|
|
265
196
|
/**
|
|
266
197
|
* The editor's initial value.
|
|
267
198
|
*/
|
|
@@ -306,16 +237,118 @@ declare const AiChatComposerEditor: react.ForwardRefExoticComponent<AiChatCompos
|
|
|
306
237
|
*/
|
|
307
238
|
declare const AiChatComposerSubmit: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & SlotProp & react.RefAttributes<HTMLButtonElement>>;
|
|
308
239
|
|
|
309
|
-
declare
|
|
240
|
+
declare const index$2_AiChatComposerEditor: typeof AiChatComposerEditor;
|
|
241
|
+
declare const index$2_AiChatComposerForm: typeof AiChatComposerForm;
|
|
242
|
+
declare const index$2_AiChatComposerSubmit: typeof AiChatComposerSubmit;
|
|
243
|
+
declare namespace index$2 {
|
|
244
|
+
export {
|
|
245
|
+
index$2_AiChatComposerEditor as AiChatComposerEditor,
|
|
246
|
+
index$2_AiChatComposerForm as AiChatComposerForm,
|
|
247
|
+
index$2_AiChatComposerSubmit as AiChatComposerSubmit,
|
|
248
|
+
AiChatComposerEditor as Editor,
|
|
249
|
+
AiChatComposerForm as Form,
|
|
250
|
+
AiChatComposerSubmit as Submit,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
type AiMessageContentTextPartProps = {
|
|
255
|
+
part: AiTextPart;
|
|
256
|
+
};
|
|
257
|
+
type AiMessageContentReasoningPartProps = {
|
|
258
|
+
part: AiReasoningPart;
|
|
259
|
+
};
|
|
260
|
+
interface AiMessageContentComponents {
|
|
261
|
+
/**
|
|
262
|
+
* The component used to display text parts.
|
|
263
|
+
*/
|
|
264
|
+
TextPart: ComponentType<AiMessageContentTextPartProps>;
|
|
265
|
+
/**
|
|
266
|
+
* The component used to display reasoning parts.
|
|
267
|
+
*/
|
|
268
|
+
ReasoningPart: ComponentType<AiMessageContentReasoningPartProps>;
|
|
269
|
+
}
|
|
270
|
+
interface AiMessageContentProps extends ComponentPropsWithSlot<"div"> {
|
|
271
|
+
/**
|
|
272
|
+
* The message contents to display.
|
|
273
|
+
*/
|
|
274
|
+
message: AiChatMessage;
|
|
275
|
+
/**
|
|
276
|
+
* Optional overrides for the default components to render each part within
|
|
277
|
+
* the message content.
|
|
278
|
+
*/
|
|
279
|
+
components?: Partial<AiMessageContentComponents>;
|
|
280
|
+
}
|
|
310
281
|
|
|
311
282
|
/**
|
|
312
|
-
*
|
|
313
|
-
*
|
|
314
|
-
*
|
|
315
|
-
*
|
|
283
|
+
* --------------------------------------------------------------------------
|
|
284
|
+
* @private The API for this component is not yet stable.
|
|
285
|
+
* --------------------------------------------------------------------------
|
|
286
|
+
*
|
|
287
|
+
* Primitive to help display an user or assistant message’s content, which is
|
|
288
|
+
* an array of parts.
|
|
289
|
+
*
|
|
290
|
+
* @example
|
|
291
|
+
* <AiMessage.Content message={message} components={{ TextPart }} />
|
|
316
292
|
*/
|
|
317
|
-
declare
|
|
293
|
+
declare const AiMessageContent: react.ForwardRefExoticComponent<AiMessageContentProps & react.RefAttributes<HTMLDivElement>>;
|
|
318
294
|
|
|
319
|
-
declare
|
|
295
|
+
declare namespace index$1 {
|
|
296
|
+
export {
|
|
297
|
+
AiMessageContent as Content,
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
interface RootProps extends ComponentPropsWithSlot<"div"> {
|
|
302
|
+
defaultOpen?: boolean;
|
|
303
|
+
open?: boolean;
|
|
304
|
+
onOpenChange?: (open: boolean) => void;
|
|
305
|
+
disabled?: boolean;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
declare const CollapsibleRoot: react.ForwardRefExoticComponent<RootProps & react.RefAttributes<HTMLDivElement>>;
|
|
309
|
+
declare const CollapsibleTrigger: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & SlotProp & react.RefAttributes<HTMLButtonElement>>;
|
|
310
|
+
declare const CollapsibleContent: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & SlotProp & react.RefAttributes<HTMLDivElement>>;
|
|
311
|
+
|
|
312
|
+
declare namespace index {
|
|
313
|
+
export {
|
|
314
|
+
CollapsibleContent as Content,
|
|
315
|
+
CollapsibleRoot as Root,
|
|
316
|
+
CollapsibleTrigger as Trigger,
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
type MarkdownComponents = {
|
|
321
|
+
CodeBlock: ComponentType<MarkdownComponentsCodeBlockProps>;
|
|
322
|
+
Link: ComponentType<MarkdownComponentsLinkProps>;
|
|
323
|
+
Heading: ComponentType<MarkdownComponentsHeadingProps>;
|
|
324
|
+
Image: ComponentType<MarkdownComponentsImageProps>;
|
|
325
|
+
Blockquote: ComponentType<MarkdownComponentsBlockquoteProps>;
|
|
326
|
+
};
|
|
327
|
+
interface MarkdownComponentsBlockquoteProps {
|
|
328
|
+
children: ReactNode;
|
|
329
|
+
}
|
|
330
|
+
interface MarkdownComponentsImageProps {
|
|
331
|
+
src: string;
|
|
332
|
+
alt: string;
|
|
333
|
+
title?: string;
|
|
334
|
+
}
|
|
335
|
+
interface MarkdownComponentsHeadingProps {
|
|
336
|
+
level: 1 | 2 | 3 | 4 | 5 | 6;
|
|
337
|
+
children: ReactNode;
|
|
338
|
+
}
|
|
339
|
+
interface MarkdownComponentsLinkProps {
|
|
340
|
+
href: string;
|
|
341
|
+
title?: string;
|
|
342
|
+
children: ReactNode;
|
|
343
|
+
}
|
|
344
|
+
interface MarkdownComponentsCodeBlockProps {
|
|
345
|
+
code: string;
|
|
346
|
+
language?: string;
|
|
347
|
+
}
|
|
348
|
+
interface MarkdownProps extends ComponentPropsWithSlot<"div"> {
|
|
349
|
+
content: string;
|
|
350
|
+
components?: Partial<MarkdownComponents>;
|
|
351
|
+
}
|
|
352
|
+
declare const Markdown: react.ForwardRefExoticComponent<MarkdownProps & react.RefAttributes<HTMLDivElement>>;
|
|
320
353
|
|
|
321
|
-
export {
|
|
354
|
+
export { index$2 as AiChatComposer, AiChatComposerEditorProps, AiChatComposerFormProps, AiChatComposerSubmitProps, index$1 as AiMessage, AiMessageContentComponents, AiMessageContentProps, AiMessageContentReasoningPartProps, AiMessageContentTextPartProps, ArrowCornerDownRightIcon, ArrowCornerUpRightIcon, ArrowDownIcon, ArrowUpIcon, AttachmentIcon, BellCrossedIcon, BellIcon, BlockquoteIcon, BoldIcon, Button, CheckCircleFillIcon, CheckCircleIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CodeIcon, index as Collapsible, CommentIcon, CopyIcon, CrossCircleFillIcon, CrossIcon, DeleteIcon, EditIcon, EllipsisIcon, EmojiIcon, EmojiPlusIcon, H1Icon, H2Icon, H3Icon, ItalicIcon, LengthenIcon, List, ListOrderedIcon, ListUnorderedIcon, Markdown, MarkdownComponents, MarkdownComponentsBlockquoteProps, MarkdownComponentsCodeBlockProps, MarkdownComponentsHeadingProps, MarkdownComponentsImageProps, MarkdownComponentsLinkProps, MarkdownProps, MentionIcon, MinusCircleIcon, Prose, QuestionMarkIcon, RedoIcon, RestoreIcon, RetryIcon, SearchIcon, SelectButton, SendIcon, ShortcutTooltip, ShortenIcon, SparklesIcon, SparklesTextIcon, SpinnerIcon, StopIcon, StrikethroughIcon, TextIcon, Tooltip, TranslateIcon, UnderlineIcon, UndoIcon, User, WarningIcon, capitalize, useInitial, useRefs };
|
package/dist/_private/index.js
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
|
-
export { useComponents } from '../components.js';
|
|
2
|
-
export { AiChatAssistantMessage } from '../components/internal/AiChatAssistantMessage.js';
|
|
3
|
-
export { AiChatComposer } from '../components/internal/AiChatComposer.js';
|
|
4
|
-
export { AiChatUserMessage } from '../components/internal/AiChatUserMessage.js';
|
|
5
1
|
export { Button, SelectButton } from '../components/internal/Button.js';
|
|
6
2
|
export { List } from '../components/internal/List.js';
|
|
3
|
+
export { Prose } from '../components/internal/Prose.js';
|
|
7
4
|
export { ShortcutTooltip, Tooltip } from '../components/internal/Tooltip.js';
|
|
8
5
|
export { User } from '../components/internal/User.js';
|
|
9
6
|
import '../icons/index.js';
|
|
10
|
-
export { AiChatComposerEditor, AiChatComposerForm, AiChatComposerSubmit } from '../primitives/AiChatComposer/index.js';
|
|
11
7
|
export { capitalize } from '../utils/capitalize.js';
|
|
12
8
|
export { useInitial } from '../utils/use-initial.js';
|
|
13
9
|
export { useRefs } from '../utils/use-refs.js';
|
|
10
|
+
import * as index from '../primitives/AiChatComposer/index.js';
|
|
11
|
+
export { index as AiChatComposer };
|
|
12
|
+
import * as index$1 from '../primitives/AiMessage/index.js';
|
|
13
|
+
export { index$1 as AiMessage };
|
|
14
|
+
import * as index$2 from '../primitives/Collapsible/index.js';
|
|
15
|
+
export { index$2 as Collapsible };
|
|
16
|
+
export { Markdown } from '../primitives/Markdown.js';
|
|
14
17
|
export { TooltipProvider } from '@radix-ui/react-tooltip';
|
|
15
18
|
export { ArrowCornerDownRightIcon } from '../icons/ArrowCornerDownRight.js';
|
|
16
19
|
export { ArrowCornerUpRightIcon } from '../icons/ArrowCornerUpRight.js';
|
|
@@ -32,6 +35,7 @@ export { CodeIcon } from '../icons/Code.js';
|
|
|
32
35
|
export { CommentIcon } from '../icons/Comment.js';
|
|
33
36
|
export { CopyIcon } from '../icons/Copy.js';
|
|
34
37
|
export { CrossIcon } from '../icons/Cross.js';
|
|
38
|
+
export { CrossCircleFillIcon } from '../icons/CrossCircleFill.js';
|
|
35
39
|
export { DeleteIcon } from '../icons/Delete.js';
|
|
36
40
|
export { EditIcon } from '../icons/Edit.js';
|
|
37
41
|
export { EllipsisIcon } from '../icons/Ellipsis.js';
|
|
@@ -45,6 +49,7 @@ export { LengthenIcon } from '../icons/Lengthen.js';
|
|
|
45
49
|
export { ListOrderedIcon } from '../icons/ListOrdered.js';
|
|
46
50
|
export { ListUnorderedIcon } from '../icons/ListUnordered.js';
|
|
47
51
|
export { MentionIcon } from '../icons/Mention.js';
|
|
52
|
+
export { MinusCircleIcon } from '../icons/MinusCircle.js';
|
|
48
53
|
export { QuestionMarkIcon } from '../icons/QuestionMark.js';
|
|
49
54
|
export { RedoIcon } from '../icons/Redo.js';
|
|
50
55
|
export { RestoreIcon } from '../icons/Restore.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
var core = require('@liveblocks/core');
|
|
5
4
|
var react$1 = require('@liveblocks/react');
|
|
6
5
|
var _private = require('@liveblocks/react/_private');
|
|
7
6
|
var react = require('react');
|
|
@@ -9,11 +8,19 @@ var ArrowDown = require('../icons/ArrowDown.cjs');
|
|
|
9
8
|
var Spinner = require('../icons/Spinner.cjs');
|
|
10
9
|
var overrides = require('../overrides.cjs');
|
|
11
10
|
var classNames = require('../utils/class-names.cjs');
|
|
11
|
+
var useVisible = require('../utils/use-visible.cjs');
|
|
12
12
|
var AiChatAssistantMessage = require('./internal/AiChatAssistantMessage.cjs');
|
|
13
13
|
var AiChatComposer = require('./internal/AiChatComposer.cjs');
|
|
14
14
|
var AiChatUserMessage = require('./internal/AiChatUserMessage.cjs');
|
|
15
15
|
|
|
16
|
-
const
|
|
16
|
+
const MIN_DISTANCE_BOTTOM_SCROLL_INDICATOR = 50;
|
|
17
|
+
const defaultComponents = {
|
|
18
|
+
Empty: () => null,
|
|
19
|
+
Loading: () => /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
20
|
+
className: "lb-loading lb-ai-chat-loading",
|
|
21
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Spinner.SpinnerIcon, {})
|
|
22
|
+
})
|
|
23
|
+
};
|
|
17
24
|
const AiChat = react.forwardRef(
|
|
18
25
|
({
|
|
19
26
|
chatId,
|
|
@@ -22,123 +29,96 @@ const AiChat = react.forwardRef(
|
|
|
22
29
|
overrides: overrides$1,
|
|
23
30
|
knowledge,
|
|
24
31
|
tools = {},
|
|
32
|
+
layout = "inset",
|
|
25
33
|
components,
|
|
26
34
|
className,
|
|
27
35
|
...props
|
|
28
36
|
}, forwardedRef) => {
|
|
29
37
|
const { messages, isLoading, error } = react$1.useAiChatMessages(chatId);
|
|
30
38
|
const $ = overrides.useOverrides(overrides$1);
|
|
39
|
+
const Empty = components?.Empty ?? defaultComponents.Empty;
|
|
40
|
+
const Loading = components?.Loading ?? defaultComponents.Loading;
|
|
31
41
|
const containerRef = react.useRef(null);
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
42
|
+
const containerBottomRef = react.useRef(null);
|
|
43
|
+
const isScrollIndicatorEnabled = !isLoading && !error;
|
|
44
|
+
const isScrollAtBottom = useVisible.useVisible(containerBottomRef, {
|
|
45
|
+
enabled: isScrollIndicatorEnabled,
|
|
46
|
+
root: containerRef,
|
|
47
|
+
rootMargin: MIN_DISTANCE_BOTTOM_SCROLL_INDICATOR,
|
|
48
|
+
initialValue: null
|
|
49
|
+
});
|
|
50
|
+
const isScrollIndicatorVisible = isScrollIndicatorEnabled && isScrollAtBottom !== null ? !isScrollAtBottom : false;
|
|
51
|
+
const [lastSentMessageId, setLastSentMessageId] = react.useState(null);
|
|
38
52
|
react.useImperativeHandle(
|
|
39
53
|
forwardedRef,
|
|
40
54
|
() => containerRef.current,
|
|
41
55
|
[]
|
|
42
56
|
);
|
|
43
|
-
react.useEffect(() => {
|
|
44
|
-
Object.entries(tools).map(
|
|
45
|
-
([key, value]) => ai.registerChatTool(chatId, key, value)
|
|
46
|
-
);
|
|
47
|
-
return () => {
|
|
48
|
-
Object.entries(tools).map(
|
|
49
|
-
([key]) => ai.unregisterChatTool(chatId, key)
|
|
50
|
-
);
|
|
51
|
-
};
|
|
52
|
-
}, [ai, chatId, tools]);
|
|
53
|
-
react.useEffect(() => {
|
|
54
|
-
const container = containerRef.current;
|
|
55
|
-
if (container === null)
|
|
56
|
-
return;
|
|
57
|
-
function handleScrollChange() {
|
|
58
|
-
const container2 = containerRef.current;
|
|
59
|
-
if (container2 === null)
|
|
60
|
-
return;
|
|
61
|
-
setDistanceToBottom(
|
|
62
|
-
container2.scrollHeight - container2.clientHeight - container2.scrollTop
|
|
63
|
-
);
|
|
64
|
-
}
|
|
65
|
-
container.addEventListener("scroll", handleScrollChange);
|
|
66
|
-
return () => {
|
|
67
|
-
container.removeEventListener("scroll", handleScrollChange);
|
|
68
|
-
};
|
|
69
|
-
}, []);
|
|
70
|
-
react.useEffect(() => {
|
|
71
|
-
const container = containerRef.current;
|
|
72
|
-
if (container === null)
|
|
73
|
-
return;
|
|
74
|
-
setDistanceToBottom(
|
|
75
|
-
container.scrollHeight - container.clientHeight - container.scrollTop
|
|
76
|
-
);
|
|
77
|
-
}, [messages]);
|
|
78
|
-
react.useEffect(() => {
|
|
79
|
-
const container = containerRef.current;
|
|
80
|
-
if (container === null)
|
|
81
|
-
return;
|
|
82
|
-
container.scrollTo({
|
|
83
|
-
top: container.scrollHeight,
|
|
84
|
-
behavior: "smooth"
|
|
85
|
-
});
|
|
86
|
-
}, [lastSendMessageId]);
|
|
87
|
-
react.useEffect(() => {
|
|
88
|
-
const container = containerRef.current;
|
|
89
|
-
if (container === null)
|
|
90
|
-
return;
|
|
91
|
-
const observer = new ResizeObserver(() => {
|
|
92
|
-
const container2 = containerRef.current;
|
|
93
|
-
if (container2 === null)
|
|
94
|
-
return;
|
|
95
|
-
setDistanceToBottom(
|
|
96
|
-
container2.scrollHeight - container2.clientHeight - container2.scrollTop
|
|
97
|
-
);
|
|
98
|
-
});
|
|
99
|
-
observer.observe(container);
|
|
100
|
-
return () => {
|
|
101
|
-
observer.disconnect();
|
|
102
|
-
};
|
|
103
|
-
}, []);
|
|
104
57
|
const scrollToBottomCallbackRef = react.useRef(void 0);
|
|
105
58
|
if (scrollToBottomCallbackRef.current === void 0) {
|
|
106
|
-
scrollToBottomCallbackRef.current = function() {
|
|
59
|
+
scrollToBottomCallbackRef.current = function(behavior) {
|
|
107
60
|
const container = containerRef.current;
|
|
108
61
|
if (container === null)
|
|
109
62
|
return;
|
|
110
63
|
container.scrollTo({
|
|
111
64
|
top: container.scrollHeight,
|
|
112
|
-
behavior
|
|
65
|
+
behavior
|
|
113
66
|
});
|
|
114
67
|
};
|
|
115
68
|
}
|
|
116
|
-
const
|
|
69
|
+
const scrollToBottom = scrollToBottomCallbackRef.current;
|
|
117
70
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
118
71
|
ref: containerRef,
|
|
119
72
|
...props,
|
|
120
|
-
className: classNames.classNames(
|
|
73
|
+
className: classNames.classNames(
|
|
74
|
+
"lb-root lb-ai-chat",
|
|
75
|
+
layout === "compact" ? "lb-ai-chat:layout-compact" : "lb-ai-chat:layout-inset",
|
|
76
|
+
className
|
|
77
|
+
),
|
|
121
78
|
children: [
|
|
122
79
|
knowledge ? knowledge.map((source, index) => /* @__PURE__ */ jsxRuntime.jsx(react$1.RegisterAiKnowledge, {
|
|
123
80
|
description: source.description,
|
|
124
81
|
value: source.value
|
|
125
82
|
}, index)) : null,
|
|
83
|
+
Object.entries(tools).map(([name, tool]) => /* @__PURE__ */ jsxRuntime.jsx(react$1.RegisterAiTool, {
|
|
84
|
+
chatId,
|
|
85
|
+
name,
|
|
86
|
+
tool
|
|
87
|
+
}, name)),
|
|
126
88
|
/* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
127
89
|
className: "lb-ai-chat-content",
|
|
128
|
-
children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
129
|
-
className: "lb-loading lb-ai-chat-loading",
|
|
130
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(Spinner.SpinnerIcon, {})
|
|
131
|
-
}) : error !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
90
|
+
children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(Loading, {}) : error !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
132
91
|
className: "lb-error lb-ai-chat-error",
|
|
133
92
|
children: $.AI_CHAT_MESSAGES_ERROR(error)
|
|
134
|
-
}) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
93
|
+
}) : messages.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(Empty, {
|
|
94
|
+
chatId,
|
|
95
|
+
copilotId
|
|
96
|
+
}) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
97
|
+
children: [
|
|
98
|
+
/* @__PURE__ */ jsxRuntime.jsx(AutoScrollHandler, {
|
|
99
|
+
lastSentMessageId,
|
|
100
|
+
scrollToBottom
|
|
101
|
+
}),
|
|
102
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
103
|
+
className: "lb-ai-chat-messages",
|
|
104
|
+
children: messages.map((message) => {
|
|
105
|
+
if (message.role === "user") {
|
|
106
|
+
return /* @__PURE__ */ jsxRuntime.jsx(AiChatUserMessage.AiChatUserMessage, {
|
|
107
|
+
message,
|
|
108
|
+
overrides: overrides$1
|
|
109
|
+
}, message.id);
|
|
110
|
+
} else if (message.role === "assistant") {
|
|
111
|
+
return /* @__PURE__ */ jsxRuntime.jsx(AiChatAssistantMessage.AiChatAssistantMessage, {
|
|
112
|
+
message,
|
|
113
|
+
overrides: overrides$1,
|
|
114
|
+
components
|
|
115
|
+
}, message.id);
|
|
116
|
+
} else {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
})
|
|
120
|
+
})
|
|
121
|
+
]
|
|
142
122
|
})
|
|
143
123
|
}),
|
|
144
124
|
/* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
@@ -147,22 +127,13 @@ const AiChat = react.forwardRef(
|
|
|
147
127
|
/* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
148
128
|
className: "lb-ai-chat-footer-actions",
|
|
149
129
|
children: /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
150
|
-
className: "lb-elevation lb-ai-chat-scroll-indicator",
|
|
130
|
+
className: "lb-root lb-elevation lb-elevation-moderate lb-ai-chat-scroll-indicator",
|
|
151
131
|
"data-visible": isScrollIndicatorVisible ? "" : void 0,
|
|
152
132
|
children: /* @__PURE__ */ jsxRuntime.jsx("button", {
|
|
153
133
|
className: "lb-ai-chat-scroll-indicator-button",
|
|
154
134
|
tabIndex: isScrollIndicatorVisible ? 0 : -1,
|
|
155
135
|
"aria-hidden": !isScrollIndicatorVisible,
|
|
156
|
-
|
|
157
|
-
onClick: () => {
|
|
158
|
-
const container = containerRef.current;
|
|
159
|
-
if (container === null)
|
|
160
|
-
return;
|
|
161
|
-
container.scrollTo({
|
|
162
|
-
top: container.scrollHeight,
|
|
163
|
-
behavior: "smooth"
|
|
164
|
-
});
|
|
165
|
-
},
|
|
136
|
+
onClick: () => scrollToBottom("smooth"),
|
|
166
137
|
children: /* @__PURE__ */ jsxRuntime.jsx("span", {
|
|
167
138
|
className: "lb-icon-container",
|
|
168
139
|
children: /* @__PURE__ */ jsxRuntime.jsx(ArrowDown.ArrowDownIcon, {})
|
|
@@ -173,41 +144,34 @@ const AiChat = react.forwardRef(
|
|
|
173
144
|
/* @__PURE__ */ jsxRuntime.jsx(AiChatComposer.AiChatComposer, {
|
|
174
145
|
chatId,
|
|
175
146
|
copilotId,
|
|
176
|
-
overrides:
|
|
147
|
+
overrides: overrides$1,
|
|
177
148
|
autoFocus,
|
|
178
|
-
onUserMessageCreate: ({ id }) =>
|
|
149
|
+
onUserMessageCreate: ({ id }) => setLastSentMessageId(id),
|
|
150
|
+
className: layout === "inset" ? "lb-elevation lb-elevation-moderate" : void 0
|
|
179
151
|
}, chatId)
|
|
180
152
|
]
|
|
153
|
+
}),
|
|
154
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
155
|
+
ref: containerBottomRef,
|
|
156
|
+
style: { position: "sticky", height: 0 },
|
|
157
|
+
"aria-hidden": true,
|
|
158
|
+
"data-scroll-at-bottom": isScrollAtBottom ? "" : void 0
|
|
181
159
|
})
|
|
182
160
|
]
|
|
183
161
|
});
|
|
184
162
|
}
|
|
185
163
|
);
|
|
186
|
-
function
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
components,
|
|
190
|
-
onDistanceToBottomChange
|
|
164
|
+
function AutoScrollHandler({
|
|
165
|
+
lastSentMessageId,
|
|
166
|
+
scrollToBottom
|
|
191
167
|
}) {
|
|
192
168
|
_private.useLayoutEffect(() => {
|
|
193
|
-
|
|
194
|
-
}, [
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
overrides
|
|
200
|
-
}, message.id);
|
|
201
|
-
} else if (message.role === "assistant") {
|
|
202
|
-
return /* @__PURE__ */ jsxRuntime.jsx(AiChatAssistantMessage.AiChatAssistantMessage, {
|
|
203
|
-
message,
|
|
204
|
-
overrides,
|
|
205
|
-
components
|
|
206
|
-
}, message.id);
|
|
207
|
-
} else {
|
|
208
|
-
return null;
|
|
209
|
-
}
|
|
210
|
-
});
|
|
169
|
+
scrollToBottom("instant");
|
|
170
|
+
}, [scrollToBottom]);
|
|
171
|
+
react.useEffect(() => {
|
|
172
|
+
scrollToBottom("smooth");
|
|
173
|
+
}, [lastSentMessageId, scrollToBottom]);
|
|
174
|
+
return null;
|
|
211
175
|
}
|
|
212
176
|
|
|
213
177
|
exports.AiChat = AiChat;
|