@liveblocks/react-ui 2.25.0-aiprivatebeta13 → 2.25.0-aiprivatebeta15
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/components/Comment.cjs +254 -235
- package/dist/components/Comment.cjs.map +1 -1
- package/dist/components/Comment.js +255 -236
- package/dist/components/Comment.js.map +1 -1
- package/dist/components/Composer.cjs +39 -27
- package/dist/components/Composer.cjs.map +1 -1
- package/dist/components/Composer.js +41 -29
- package/dist/components/Composer.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 +30 -2
- package/dist/components/internal/AiChatAssistantMessage.cjs.map +1 -1
- package/dist/components/internal/AiChatAssistantMessage.js +30 -2
- package/dist/components/internal/AiChatAssistantMessage.js.map +1 -1
- 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/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/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/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +21 -13
- package/dist/index.d.ts +21 -13
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/primitives/AiMessage/index.cjs +14 -76
- package/dist/primitives/AiMessage/index.cjs.map +1 -1
- package/dist/primitives/AiMessage/index.js +13 -75
- package/dist/primitives/AiMessage/index.js.map +1 -1
- package/dist/primitives/AiMessage/tool-invocation.cjs +64 -0
- package/dist/primitives/AiMessage/tool-invocation.cjs.map +1 -0
- package/dist/primitives/AiMessage/tool-invocation.js +62 -0
- package/dist/primitives/AiMessage/tool-invocation.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/Markdown.cjs +6 -2
- package/dist/primitives/Markdown.cjs.map +1 -1
- package/dist/primitives/Markdown.js +6 -2
- package/dist/primitives/Markdown.js.map +1 -1
- package/dist/primitives/index.d.cts +16 -16
- package/dist/primitives/index.d.ts +16 -16
- package/dist/version.cjs +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -4
- package/primitives/package.json +2 -2
- package/src/styles/index.css +4 -0
- package/styles.css +1 -1
- package/styles.css.map +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { ComponentType, ComponentPropsWithoutRef, ElementType, ReactNode, ComponentProps, FormEvent, RefAttributes, MouseEvent, PropsWithChildren } from 'react';
|
|
3
|
-
import { CommentAttachment, AiKnowledgeSource, AiOpaqueToolDefinition, AiToolTypePack, JsonObject, ToolResultData, NoInfr, AiToolExecuteCallback, CommentBody, BaseMetadata, DM, CommentData, HistoryVersion, InboxNotificationData, InboxNotificationThreadData, InboxNotificationTextMentionData, InboxNotificationCustomData, KDAD, ThreadData } from '@liveblocks/core';
|
|
3
|
+
import { CommentAttachment, AiKnowledgeSource, AiOpaqueToolDefinition, AiToolTypePack, JsonObject, ToolResultData, NoInfr, AiToolExecuteCallback, CommentBody, MentionData, BaseMetadata, DM, CommentData, HistoryVersion, InboxNotificationData, InboxNotificationThreadData, InboxNotificationTextMentionData, InboxNotificationCustomData, KDAD, ThreadData } from '@liveblocks/core';
|
|
4
4
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
5
5
|
|
|
6
6
|
interface GlobalComponents {
|
|
@@ -240,9 +240,9 @@ interface ComposerEditorMentionProps {
|
|
|
240
240
|
*/
|
|
241
241
|
isSelected: boolean;
|
|
242
242
|
/**
|
|
243
|
-
* The mention
|
|
243
|
+
* The mention to display.
|
|
244
244
|
*/
|
|
245
|
-
|
|
245
|
+
mention: MentionData;
|
|
246
246
|
}
|
|
247
247
|
interface ComposerEditorLinkProps {
|
|
248
248
|
/**
|
|
@@ -260,13 +260,13 @@ interface ComposerEditorLinkProps {
|
|
|
260
260
|
}
|
|
261
261
|
type ComposerEditorMentionSuggestionsProps = {
|
|
262
262
|
/**
|
|
263
|
-
* The list of
|
|
263
|
+
* The list of mention suggestions.
|
|
264
264
|
*/
|
|
265
|
-
|
|
265
|
+
mentions: MentionData[];
|
|
266
266
|
/**
|
|
267
|
-
* The currently selected
|
|
267
|
+
* The currently selected mention's ID.
|
|
268
268
|
*/
|
|
269
|
-
|
|
269
|
+
selectedMentionId?: string;
|
|
270
270
|
};
|
|
271
271
|
type ComposerEditorFloatingToolbarProps = Record<string, never>;
|
|
272
272
|
interface ComposerEditorComponents {
|
|
@@ -480,7 +480,7 @@ interface CommentProps extends ComponentPropsWithoutRef<"div"> {
|
|
|
480
480
|
/**
|
|
481
481
|
* The event handler called when clicking on a mention.
|
|
482
482
|
*/
|
|
483
|
-
onMentionClick?: (
|
|
483
|
+
onMentionClick?: (mention: MentionData, event: MouseEvent<HTMLElement>) => void;
|
|
484
484
|
/**
|
|
485
485
|
* The event handler called when clicking on a comment's attachment.
|
|
486
486
|
*/
|
|
@@ -489,6 +489,10 @@ interface CommentProps extends ComponentPropsWithoutRef<"div"> {
|
|
|
489
489
|
* Override the component's strings.
|
|
490
490
|
*/
|
|
491
491
|
overrides?: Partial<GlobalOverrides & CommentOverrides & ComposerOverrides>;
|
|
492
|
+
/**
|
|
493
|
+
* Override the component's components.
|
|
494
|
+
*/
|
|
495
|
+
components?: Partial<GlobalComponents>;
|
|
492
496
|
}
|
|
493
497
|
/**
|
|
494
498
|
* Displays a single comment.
|
|
@@ -746,6 +750,10 @@ interface ThreadProps<M extends BaseMetadata = DM> extends ComponentPropsWithout
|
|
|
746
750
|
* Override the component's strings.
|
|
747
751
|
*/
|
|
748
752
|
overrides?: Partial<GlobalOverrides & ThreadOverrides & CommentOverrides & ComposerOverrides>;
|
|
753
|
+
/**
|
|
754
|
+
* Override the component's components.
|
|
755
|
+
*/
|
|
756
|
+
components?: Partial<GlobalComponents>;
|
|
749
757
|
}
|
|
750
758
|
/**
|
|
751
759
|
* Displays a thread of comments, with a composer to reply
|
|
@@ -760,7 +768,7 @@ interface ThreadProps<M extends BaseMetadata = DM> extends ComponentPropsWithout
|
|
|
760
768
|
*/
|
|
761
769
|
declare const Thread: <M extends BaseMetadata = DM>(props: ThreadProps<M> & RefAttributes<HTMLDivElement>) => JSX.Element;
|
|
762
770
|
|
|
763
|
-
type
|
|
771
|
+
type LiveblocksUiConfigProps = PropsWithChildren<{
|
|
764
772
|
/**
|
|
765
773
|
* Override the components' strings.
|
|
766
774
|
*/
|
|
@@ -804,11 +812,11 @@ type LiveblocksUIConfigProps = PropsWithChildren<{
|
|
|
804
812
|
* Set configuration options for all components.
|
|
805
813
|
*
|
|
806
814
|
* @example
|
|
807
|
-
* <
|
|
815
|
+
* <LiveblocksUiConfig overrides={{ locale: "fr", USER_UNKNOWN: "Anonyme", ... }}>
|
|
808
816
|
* <App />
|
|
809
|
-
* </
|
|
817
|
+
* </LiveblocksUiConfig>
|
|
810
818
|
*/
|
|
811
|
-
declare function
|
|
819
|
+
declare function LiveblocksUiConfig({ overrides, components, portalContainer, preventUnsavedComposerChanges, emojibaseUrl, children, }: LiveblocksUiConfigProps): react_jsx_runtime.JSX.Element;
|
|
812
820
|
|
|
813
821
|
declare function ArrowCornerDownRightIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
814
822
|
|
|
@@ -950,4 +958,4 @@ declare namespace icon {
|
|
|
950
958
|
};
|
|
951
959
|
}
|
|
952
960
|
|
|
953
|
-
export { AiChat, AiChatComponents, AiChatComponentsEmptyProps, AiChatComponentsLoadingProps, AiChatProps, AiTool, AiToolIconProps, AiToolProps, Comment, CommentAttachmentArgs, CommentOverrides, CommentProps, Composer, ComposerBodyMark, ComposerBodyMarks, ComposerOverrides, ComposerProps, ComposerSubmitComment, GlobalOverrides, HistoryVersionSummary, HistoryVersionSummaryList, HistoryVersionSummaryListProps, HistoryVersionSummaryProps, icon as Icon, InboxNotification, InboxNotificationAvatarProps, InboxNotificationCustomKindProps, InboxNotificationCustomProps, InboxNotificationIconProps, InboxNotificationList, InboxNotificationListProps, InboxNotificationOverrides, InboxNotificationProps, InboxNotificationTextMentionKindProps, InboxNotificationTextMentionProps, InboxNotificationThreadKindProps, InboxNotificationThreadProps,
|
|
961
|
+
export { AiChat, AiChatComponents, AiChatComponentsEmptyProps, AiChatComponentsLoadingProps, AiChatProps, AiTool, AiToolIconProps, AiToolProps, Comment, CommentAttachmentArgs, CommentOverrides, CommentProps, Composer, ComposerBodyMark, ComposerBodyMarks, ComposerOverrides, ComposerProps, ComposerSubmitComment, GlobalOverrides, HistoryVersionSummary, HistoryVersionSummaryList, HistoryVersionSummaryListProps, HistoryVersionSummaryProps, icon as Icon, InboxNotification, InboxNotificationAvatarProps, InboxNotificationCustomKindProps, InboxNotificationCustomProps, InboxNotificationIconProps, InboxNotificationList, InboxNotificationListProps, InboxNotificationOverrides, InboxNotificationProps, InboxNotificationTextMentionKindProps, InboxNotificationTextMentionProps, InboxNotificationThreadKindProps, InboxNotificationThreadProps, LiveblocksUiConfig, LocalizationOverrides, Overrides, Thread, ThreadOverrides, ThreadProps, useOverrides };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { ComponentType, ComponentPropsWithoutRef, ElementType, ReactNode, ComponentProps, FormEvent, RefAttributes, MouseEvent, PropsWithChildren } from 'react';
|
|
3
|
-
import { CommentAttachment, AiKnowledgeSource, AiOpaqueToolDefinition, AiToolTypePack, JsonObject, ToolResultData, NoInfr, AiToolExecuteCallback, CommentBody, BaseMetadata, DM, CommentData, HistoryVersion, InboxNotificationData, InboxNotificationThreadData, InboxNotificationTextMentionData, InboxNotificationCustomData, KDAD, ThreadData } from '@liveblocks/core';
|
|
3
|
+
import { CommentAttachment, AiKnowledgeSource, AiOpaqueToolDefinition, AiToolTypePack, JsonObject, ToolResultData, NoInfr, AiToolExecuteCallback, CommentBody, MentionData, BaseMetadata, DM, CommentData, HistoryVersion, InboxNotificationData, InboxNotificationThreadData, InboxNotificationTextMentionData, InboxNotificationCustomData, KDAD, ThreadData } from '@liveblocks/core';
|
|
4
4
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
5
5
|
|
|
6
6
|
interface GlobalComponents {
|
|
@@ -240,9 +240,9 @@ interface ComposerEditorMentionProps {
|
|
|
240
240
|
*/
|
|
241
241
|
isSelected: boolean;
|
|
242
242
|
/**
|
|
243
|
-
* The mention
|
|
243
|
+
* The mention to display.
|
|
244
244
|
*/
|
|
245
|
-
|
|
245
|
+
mention: MentionData;
|
|
246
246
|
}
|
|
247
247
|
interface ComposerEditorLinkProps {
|
|
248
248
|
/**
|
|
@@ -260,13 +260,13 @@ interface ComposerEditorLinkProps {
|
|
|
260
260
|
}
|
|
261
261
|
type ComposerEditorMentionSuggestionsProps = {
|
|
262
262
|
/**
|
|
263
|
-
* The list of
|
|
263
|
+
* The list of mention suggestions.
|
|
264
264
|
*/
|
|
265
|
-
|
|
265
|
+
mentions: MentionData[];
|
|
266
266
|
/**
|
|
267
|
-
* The currently selected
|
|
267
|
+
* The currently selected mention's ID.
|
|
268
268
|
*/
|
|
269
|
-
|
|
269
|
+
selectedMentionId?: string;
|
|
270
270
|
};
|
|
271
271
|
type ComposerEditorFloatingToolbarProps = Record<string, never>;
|
|
272
272
|
interface ComposerEditorComponents {
|
|
@@ -480,7 +480,7 @@ interface CommentProps extends ComponentPropsWithoutRef<"div"> {
|
|
|
480
480
|
/**
|
|
481
481
|
* The event handler called when clicking on a mention.
|
|
482
482
|
*/
|
|
483
|
-
onMentionClick?: (
|
|
483
|
+
onMentionClick?: (mention: MentionData, event: MouseEvent<HTMLElement>) => void;
|
|
484
484
|
/**
|
|
485
485
|
* The event handler called when clicking on a comment's attachment.
|
|
486
486
|
*/
|
|
@@ -489,6 +489,10 @@ interface CommentProps extends ComponentPropsWithoutRef<"div"> {
|
|
|
489
489
|
* Override the component's strings.
|
|
490
490
|
*/
|
|
491
491
|
overrides?: Partial<GlobalOverrides & CommentOverrides & ComposerOverrides>;
|
|
492
|
+
/**
|
|
493
|
+
* Override the component's components.
|
|
494
|
+
*/
|
|
495
|
+
components?: Partial<GlobalComponents>;
|
|
492
496
|
}
|
|
493
497
|
/**
|
|
494
498
|
* Displays a single comment.
|
|
@@ -746,6 +750,10 @@ interface ThreadProps<M extends BaseMetadata = DM> extends ComponentPropsWithout
|
|
|
746
750
|
* Override the component's strings.
|
|
747
751
|
*/
|
|
748
752
|
overrides?: Partial<GlobalOverrides & ThreadOverrides & CommentOverrides & ComposerOverrides>;
|
|
753
|
+
/**
|
|
754
|
+
* Override the component's components.
|
|
755
|
+
*/
|
|
756
|
+
components?: Partial<GlobalComponents>;
|
|
749
757
|
}
|
|
750
758
|
/**
|
|
751
759
|
* Displays a thread of comments, with a composer to reply
|
|
@@ -760,7 +768,7 @@ interface ThreadProps<M extends BaseMetadata = DM> extends ComponentPropsWithout
|
|
|
760
768
|
*/
|
|
761
769
|
declare const Thread: <M extends BaseMetadata = DM>(props: ThreadProps<M> & RefAttributes<HTMLDivElement>) => JSX.Element;
|
|
762
770
|
|
|
763
|
-
type
|
|
771
|
+
type LiveblocksUiConfigProps = PropsWithChildren<{
|
|
764
772
|
/**
|
|
765
773
|
* Override the components' strings.
|
|
766
774
|
*/
|
|
@@ -804,11 +812,11 @@ type LiveblocksUIConfigProps = PropsWithChildren<{
|
|
|
804
812
|
* Set configuration options for all components.
|
|
805
813
|
*
|
|
806
814
|
* @example
|
|
807
|
-
* <
|
|
815
|
+
* <LiveblocksUiConfig overrides={{ locale: "fr", USER_UNKNOWN: "Anonyme", ... }}>
|
|
808
816
|
* <App />
|
|
809
|
-
* </
|
|
817
|
+
* </LiveblocksUiConfig>
|
|
810
818
|
*/
|
|
811
|
-
declare function
|
|
819
|
+
declare function LiveblocksUiConfig({ overrides, components, portalContainer, preventUnsavedComposerChanges, emojibaseUrl, children, }: LiveblocksUiConfigProps): react_jsx_runtime.JSX.Element;
|
|
812
820
|
|
|
813
821
|
declare function ArrowCornerDownRightIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
814
822
|
|
|
@@ -950,4 +958,4 @@ declare namespace icon {
|
|
|
950
958
|
};
|
|
951
959
|
}
|
|
952
960
|
|
|
953
|
-
export { AiChat, AiChatComponents, AiChatComponentsEmptyProps, AiChatComponentsLoadingProps, AiChatProps, AiTool, AiToolIconProps, AiToolProps, Comment, CommentAttachmentArgs, CommentOverrides, CommentProps, Composer, ComposerBodyMark, ComposerBodyMarks, ComposerOverrides, ComposerProps, ComposerSubmitComment, GlobalOverrides, HistoryVersionSummary, HistoryVersionSummaryList, HistoryVersionSummaryListProps, HistoryVersionSummaryProps, icon as Icon, InboxNotification, InboxNotificationAvatarProps, InboxNotificationCustomKindProps, InboxNotificationCustomProps, InboxNotificationIconProps, InboxNotificationList, InboxNotificationListProps, InboxNotificationOverrides, InboxNotificationProps, InboxNotificationTextMentionKindProps, InboxNotificationTextMentionProps, InboxNotificationThreadKindProps, InboxNotificationThreadProps,
|
|
961
|
+
export { AiChat, AiChatComponents, AiChatComponentsEmptyProps, AiChatComponentsLoadingProps, AiChatProps, AiTool, AiToolIconProps, AiToolProps, Comment, CommentAttachmentArgs, CommentOverrides, CommentProps, Composer, ComposerBodyMark, ComposerBodyMarks, ComposerOverrides, ComposerProps, ComposerSubmitComment, GlobalOverrides, HistoryVersionSummary, HistoryVersionSummaryList, HistoryVersionSummaryListProps, HistoryVersionSummaryProps, icon as Icon, InboxNotification, InboxNotificationAvatarProps, InboxNotificationCustomKindProps, InboxNotificationCustomProps, InboxNotificationIconProps, InboxNotificationList, InboxNotificationListProps, InboxNotificationOverrides, InboxNotificationProps, InboxNotificationTextMentionKindProps, InboxNotificationTextMentionProps, InboxNotificationThreadKindProps, InboxNotificationThreadProps, LiveblocksUiConfig, LocalizationOverrides, Overrides, Thread, ThreadOverrides, ThreadProps, useOverrides };
|
package/dist/index.js
CHANGED
|
@@ -9,7 +9,7 @@ export { HistoryVersionSummaryList } from './components/HistoryVersionSummaryLis
|
|
|
9
9
|
export { InboxNotification } from './components/InboxNotification.js';
|
|
10
10
|
export { InboxNotificationList } from './components/InboxNotificationList.js';
|
|
11
11
|
export { Thread } from './components/Thread.js';
|
|
12
|
-
export {
|
|
12
|
+
export { LiveblocksUiConfig } from './config.js';
|
|
13
13
|
import * as icon from './icon.js';
|
|
14
14
|
export { icon as Icon };
|
|
15
15
|
export { useOverrides } from './overrides.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { detectDupes } from \"@liveblocks/core\";\n\nimport { PKG_FORMAT, PKG_NAME, PKG_VERSION } from \"./version\";\n\ndetectDupes(PKG_NAME, PKG_VERSION, PKG_FORMAT);\n\nexport type {\n AiChatComponents,\n AiChatComponentsEmptyProps,\n AiChatComponentsLoadingProps,\n AiChatProps,\n} from \"./components/AiChat\";\nexport { AiChat } from \"./components/AiChat\";\nexport type { AiToolIconProps, AiToolProps } from \"./components/AiTool\";\nexport { AiTool } from \"./components/AiTool\";\nexport type { CommentProps } from \"./components/Comment\";\nexport { Comment } from \"./components/Comment\";\nexport type { ComposerProps } from \"./components/Composer\";\nexport { Composer } from \"./components/Composer\";\nexport type { HistoryVersionSummaryProps } from \"./components/HistoryVersionSummary\";\nexport { HistoryVersionSummary } from \"./components/HistoryVersionSummary\";\nexport type { HistoryVersionSummaryListProps } from \"./components/HistoryVersionSummaryList\";\nexport { HistoryVersionSummaryList } from \"./components/HistoryVersionSummaryList\";\nexport type {\n InboxNotificationAvatarProps,\n InboxNotificationCustomKindProps,\n InboxNotificationCustomProps,\n InboxNotificationIconProps,\n InboxNotificationProps,\n InboxNotificationTextMentionKindProps,\n InboxNotificationTextMentionProps,\n InboxNotificationThreadKindProps,\n InboxNotificationThreadProps,\n} from \"./components/InboxNotification\";\nexport { InboxNotification } from \"./components/InboxNotification\";\nexport type { InboxNotificationListProps } from \"./components/InboxNotificationList\";\nexport { InboxNotificationList } from \"./components/InboxNotificationList\";\nexport type { ThreadProps } from \"./components/Thread\";\nexport { Thread } from \"./components/Thread\";\nexport {
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { detectDupes } from \"@liveblocks/core\";\n\nimport { PKG_FORMAT, PKG_NAME, PKG_VERSION } from \"./version\";\n\ndetectDupes(PKG_NAME, PKG_VERSION, PKG_FORMAT);\n\nexport type {\n AiChatComponents,\n AiChatComponentsEmptyProps,\n AiChatComponentsLoadingProps,\n AiChatProps,\n} from \"./components/AiChat\";\nexport { AiChat } from \"./components/AiChat\";\nexport type { AiToolIconProps, AiToolProps } from \"./components/AiTool\";\nexport { AiTool } from \"./components/AiTool\";\nexport type { CommentProps } from \"./components/Comment\";\nexport { Comment } from \"./components/Comment\";\nexport type { ComposerProps } from \"./components/Composer\";\nexport { Composer } from \"./components/Composer\";\nexport type { HistoryVersionSummaryProps } from \"./components/HistoryVersionSummary\";\nexport { HistoryVersionSummary } from \"./components/HistoryVersionSummary\";\nexport type { HistoryVersionSummaryListProps } from \"./components/HistoryVersionSummaryList\";\nexport { HistoryVersionSummaryList } from \"./components/HistoryVersionSummaryList\";\nexport type {\n InboxNotificationAvatarProps,\n InboxNotificationCustomKindProps,\n InboxNotificationCustomProps,\n InboxNotificationIconProps,\n InboxNotificationProps,\n InboxNotificationTextMentionKindProps,\n InboxNotificationTextMentionProps,\n InboxNotificationThreadKindProps,\n InboxNotificationThreadProps,\n} from \"./components/InboxNotification\";\nexport { InboxNotification } from \"./components/InboxNotification\";\nexport type { InboxNotificationListProps } from \"./components/InboxNotificationList\";\nexport { InboxNotificationList } from \"./components/InboxNotificationList\";\nexport type { ThreadProps } from \"./components/Thread\";\nexport { Thread } from \"./components/Thread\";\nexport { LiveblocksUiConfig } from \"./config\";\nexport * as Icon from \"./icon\";\nexport type {\n CommentOverrides,\n ComposerOverrides,\n GlobalOverrides,\n InboxNotificationOverrides,\n LocalizationOverrides,\n Overrides,\n ThreadOverrides,\n} from \"./overrides\";\nexport { useOverrides } from \"./overrides\";\nexport type { ComposerSubmitComment } from \"./primitives\";\nexport type {\n CommentAttachmentArgs,\n ComposerBodyMark,\n ComposerBodyMarks,\n} from \"./types\";\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAIA,WAAY,CAAA,QAAA,EAAU,aAAa,UAAU,CAAA"}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
var core = require('@liveblocks/core');
|
|
5
|
-
var react = require('@liveblocks/react');
|
|
6
|
-
var _private = require('@liveblocks/react/_private');
|
|
7
4
|
var reactSlot = require('@radix-ui/react-slot');
|
|
8
|
-
var react
|
|
5
|
+
var react = require('react');
|
|
9
6
|
var ErrorBoundary = require('../../utils/ErrorBoundary.cjs');
|
|
10
7
|
var Markdown = require('../Markdown.cjs');
|
|
11
|
-
var
|
|
8
|
+
var toolInvocation = require('./tool-invocation.cjs');
|
|
12
9
|
|
|
13
10
|
const AI_MESSAGE_CONTENT_NAME = "AiMessageContent";
|
|
14
11
|
const defaultMessageContentComponents = {
|
|
@@ -22,75 +19,20 @@ const defaultMessageContentComponents = {
|
|
|
22
19
|
content: part.text
|
|
23
20
|
});
|
|
24
21
|
},
|
|
25
|
-
ToolInvocationPart: ({
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
chatId,
|
|
32
|
-
messageId,
|
|
33
|
-
part
|
|
34
|
-
}) {
|
|
35
|
-
const client = react.useClient();
|
|
36
|
-
const ai = client[core.kInternal].ai;
|
|
37
|
-
const tool = _private.useSignal(ai.signals.getTool\u03A3(part.name, chatId));
|
|
38
|
-
const respond = react$1.useCallback(
|
|
39
|
-
(result) => {
|
|
40
|
-
if (part.stage === "receiving") {
|
|
41
|
-
console.log(
|
|
42
|
-
`Ignoring respond(): tool '${part.name}' (${part.invocationId}) is still receiving`
|
|
43
|
-
);
|
|
44
|
-
} else if (part.stage === "executed") {
|
|
45
|
-
console.log(
|
|
46
|
-
`Ignoring respond(): tool '${part.name}' (${part.invocationId}) has already executed`
|
|
47
|
-
);
|
|
48
|
-
} else {
|
|
49
|
-
ai.setToolResult(
|
|
50
|
-
chatId,
|
|
51
|
-
messageId,
|
|
52
|
-
part.invocationId,
|
|
53
|
-
result
|
|
54
|
-
);
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
[ai, chatId, messageId, part.stage, part.name, part.invocationId]
|
|
58
|
-
);
|
|
59
|
-
const props = react$1.useMemo(() => {
|
|
60
|
-
const { type: _, ...rest } = part;
|
|
61
|
-
return {
|
|
62
|
-
...rest,
|
|
63
|
-
respond,
|
|
64
|
-
types: void 0,
|
|
65
|
-
[core.kInternal]: {
|
|
66
|
-
execute: tool?.execute
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
}, [part, respond, tool?.execute]);
|
|
70
|
-
if (tool?.render === void 0)
|
|
71
|
-
return null;
|
|
72
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ErrorBoundary.ErrorBoundary, {
|
|
73
|
-
fallback: /* @__PURE__ */ jsxRuntime.jsxs("p", {
|
|
74
|
-
style: { color: "red" },
|
|
75
|
-
children: [
|
|
76
|
-
"Failed to render tool call result for \u2018",
|
|
77
|
-
part.name,
|
|
78
|
-
"\u2019. See console for details."
|
|
79
|
-
]
|
|
80
|
-
}),
|
|
81
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(contexts.AiToolInvocationContext.Provider, {
|
|
82
|
-
value: props,
|
|
83
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(StableRenderFn, {
|
|
84
|
-
renderFn: tool.render,
|
|
85
|
-
props
|
|
22
|
+
ToolInvocationPart: ({ part, message }) => {
|
|
23
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ErrorBoundary.ErrorBoundary, {
|
|
24
|
+
fallback: null,
|
|
25
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(toolInvocation.AiMessageToolInvocation, {
|
|
26
|
+
part,
|
|
27
|
+
message
|
|
86
28
|
})
|
|
87
|
-
})
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
const AiMessageContent = react
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const AiMessageContent = react.forwardRef(
|
|
91
33
|
({ message, components, asChild, ...props }, forwardedRef) => {
|
|
92
34
|
const Component = asChild ? reactSlot.Slot : "div";
|
|
93
|
-
const { TextPart, ReasoningPart, ToolInvocationPart } = react
|
|
35
|
+
const { TextPart, ReasoningPart, ToolInvocationPart } = react.useMemo(
|
|
94
36
|
() => ({ ...defaultMessageContentComponents, ...components }),
|
|
95
37
|
[components]
|
|
96
38
|
);
|
|
@@ -118,11 +60,7 @@ const AiMessageContent = react$1.forwardRef(
|
|
|
118
60
|
return /* @__PURE__ */ jsxRuntime.jsx(ToolInvocationPart, {
|
|
119
61
|
part,
|
|
120
62
|
...extra,
|
|
121
|
-
|
|
122
|
-
part,
|
|
123
|
-
chatId: message.chatId,
|
|
124
|
-
messageId: message.id
|
|
125
|
-
}, index)
|
|
63
|
+
message
|
|
126
64
|
}, index);
|
|
127
65
|
default:
|
|
128
66
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../src/primitives/AiMessage/index.tsx"],"sourcesContent":["import type {\n AiToolInvocationPart,\n AiToolInvocationProps,\n JsonObject,\n MessageId,\n ToolResultData,\n} from \"@liveblocks/core\";\nimport { kInternal } from \"@liveblocks/core\";\nimport { useClient } from \"@liveblocks/react\";\nimport { useSignal } from \"@liveblocks/react/_private\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport type { FunctionComponent } from \"react\";\nimport { forwardRef, useCallback, useMemo } from \"react\";\n\nimport { ErrorBoundary } from \"../../utils/ErrorBoundary\";\nimport { Markdown } from \"../Markdown\";\nimport { AiToolInvocationContext } from \"./contexts\";\nimport type {\n AiMessageContentComponents,\n AiMessageContentProps,\n} from \"./types\";\n\nconst AI_MESSAGE_CONTENT_NAME = \"AiMessageContent\";\n\nconst defaultMessageContentComponents: AiMessageContentComponents = {\n TextPart: ({ part }) => {\n return <Markdown content={part.text} />;\n },\n ReasoningPart: ({ part }) => {\n return <Markdown content={part.text} />;\n },\n ToolInvocationPart: ({ children }) => children,\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ToolInvocationPart\n * -----------------------------------------------------------------------------------------------*/\n\nfunction StableRenderFn(props: {\n renderFn: FunctionComponent<\n AiToolInvocationProps<JsonObject, ToolResultData>\n >;\n props: AiToolInvocationProps<JsonObject, ToolResultData>;\n}) {\n return props.renderFn(props.props);\n}\n\nfunction ToolInvocation({\n chatId,\n messageId,\n part,\n}: {\n chatId: string;\n messageId: MessageId;\n part: AiToolInvocationPart;\n}) {\n const client = useClient();\n const ai = client[kInternal].ai;\n const tool = useSignal(ai.signals.getToolΣ(part.name, chatId));\n\n const respond = useCallback(\n (result: ToolResultData) => {\n if (part.stage === \"receiving\") {\n console.log(\n `Ignoring respond(): tool '${part.name}' (${part.invocationId}) is still receiving`\n );\n } else if (part.stage === \"executed\") {\n console.log(\n `Ignoring respond(): tool '${part.name}' (${part.invocationId}) has already executed`\n );\n } else {\n ai.setToolResult(\n chatId,\n messageId,\n part.invocationId,\n result\n // TODO Pass in AiGenerationOptions here?\n );\n }\n },\n [ai, chatId, messageId, part.stage, part.name, part.invocationId]\n );\n\n const props = useMemo(() => {\n const { type: _, ...rest } = part;\n return {\n ...rest,\n respond,\n types: undefined as never,\n [kInternal]: {\n execute: tool?.execute,\n },\n };\n }, [part, respond, tool?.execute]);\n\n if (tool?.render === undefined) return null;\n return (\n <ErrorBoundary\n fallback={\n <p style={{ color: \"red\" }}>\n Failed to render tool call result for ‘{part.name}’. See console for\n details.\n </p>\n }\n >\n <AiToolInvocationContext.Provider value={props}>\n <StableRenderFn\n renderFn={\n tool.render as FunctionComponent<\n AiToolInvocationProps<JsonObject, ToolResultData>\n >\n }\n props={props}\n />\n </AiToolInvocationContext.Provider>\n </ErrorBoundary>\n );\n}\n\n/**\n * --------------------------------------------------------------------------\n * @private The API for this component is not yet stable.\n * --------------------------------------------------------------------------\n *\n * Primitive to help display an user or assistant message’s content, which is\n * an array of parts.\n *\n * @example\n * <AiMessage.Content message={message} components={{ TextPart }} />\n */\nconst AiMessageContent = forwardRef<HTMLDivElement, AiMessageContentProps>(\n ({ message, components, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"div\";\n const { TextPart, ReasoningPart, ToolInvocationPart } = useMemo(\n () => ({ ...defaultMessageContentComponents, ...components }),\n [components]\n );\n\n const content = message.content ?? message.contentSoFar;\n const numParts = content.length;\n const isGenerating =\n message.role === \"assistant\" && message.status === \"generating\";\n return (\n <Component {...props} ref={forwardedRef}>\n {content.map((part, index) => {\n // A part is considered to be still \"streaming in\" if it's the last\n // part in the content array, and the message is in \"generating\"\n // state.\n const isStreaming = isGenerating && index === numParts - 1;\n const extra = { index, isStreaming };\n switch (part.type) {\n case \"text\":\n return <TextPart key={index} part={part} {...extra} />;\n case \"reasoning\":\n return <ReasoningPart key={index} part={part} {...extra} />;\n case \"tool-invocation\":\n // TODO: If the render() method doesn't exist, we should not render the ToolInvocationPart\n // or pass it no children so that it can decide to not render?\n return (\n <ToolInvocationPart key={index} part={part} {...extra}>\n <ToolInvocation\n key={index}\n part={part}\n chatId={message.chatId}\n messageId={message.id}\n />\n </ToolInvocationPart>\n );\n default:\n return null;\n }\n })}\n </Component>\n );\n }\n);\n\nif (process.env.NODE_ENV !== \"production\") {\n AiMessageContent.displayName = AI_MESSAGE_CONTENT_NAME;\n}\n\n// NOTE: Every export from this file will be available publicly as AiMessage.*\nexport { AiMessageContent as Content };\n"],"names":["jsx","Markdown","useClient","kInternal","useSignal","useCallback","useMemo","ErrorBoundary","jsxs","AiToolInvocationContext","forwardRef","Slot"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/primitives/AiMessage/index.tsx"],"sourcesContent":["import { Slot } from \"@radix-ui/react-slot\";\nimport { forwardRef, useMemo } from \"react\";\n\nimport { ErrorBoundary } from \"../../utils/ErrorBoundary\";\nimport { Markdown } from \"../Markdown\";\nimport { AiMessageToolInvocation } from \"./tool-invocation\";\nimport type {\n AiMessageContentComponents,\n AiMessageContentProps,\n} from \"./types\";\n\nconst AI_MESSAGE_CONTENT_NAME = \"AiMessageContent\";\n\nconst defaultMessageContentComponents: AiMessageContentComponents = {\n TextPart: ({ part }) => {\n return <Markdown content={part.text} />;\n },\n ReasoningPart: ({ part }) => {\n return <Markdown content={part.text} />;\n },\n ToolInvocationPart: ({ part, message }) => {\n return (\n <ErrorBoundary fallback={null}>\n <AiMessageToolInvocation part={part} message={message} />\n </ErrorBoundary>\n );\n },\n};\n\n/**\n * --------------------------------------------------------------------------\n * @private The API for this component is not yet stable.\n * --------------------------------------------------------------------------\n *\n * Primitive to help display an user or assistant message’s content, which is\n * an array of parts.\n *\n * @example\n * <AiMessage.Content message={message} components={{ TextPart }} />\n */\nconst AiMessageContent = forwardRef<HTMLDivElement, AiMessageContentProps>(\n ({ message, components, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"div\";\n const { TextPart, ReasoningPart, ToolInvocationPart } = useMemo(\n () => ({ ...defaultMessageContentComponents, ...components }),\n [components]\n );\n\n const content = message.content ?? message.contentSoFar;\n const numParts = content.length;\n const isGenerating =\n message.role === \"assistant\" && message.status === \"generating\";\n return (\n <Component {...props} ref={forwardedRef}>\n {content.map((part, index) => {\n // A part is considered to be still \"streaming in\" if it's the last\n // part in the content array, and the message is in \"generating\"\n // state.\n const isStreaming = isGenerating && index === numParts - 1;\n const extra = { index, isStreaming };\n switch (part.type) {\n case \"text\":\n return <TextPart key={index} part={part} {...extra} />;\n case \"reasoning\":\n return <ReasoningPart key={index} part={part} {...extra} />;\n case \"tool-invocation\":\n return (\n <ToolInvocationPart\n key={index}\n part={part}\n {...extra}\n message={message}\n />\n );\n default:\n return null;\n }\n })}\n </Component>\n );\n }\n);\n\nif (process.env.NODE_ENV !== \"production\") {\n AiMessageContent.displayName = AI_MESSAGE_CONTENT_NAME;\n}\n\n// NOTE: Every export from this file will be available publicly as AiMessage.*\nexport { AiMessageContent as Content };\n"],"names":["jsx","Markdown","ErrorBoundary","AiMessageToolInvocation","forwardRef","Slot","useMemo"],"mappings":"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"}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
import { jsx
|
|
2
|
-
import { kInternal } from '@liveblocks/core';
|
|
3
|
-
import { useClient } from '@liveblocks/react';
|
|
4
|
-
import { useSignal } from '@liveblocks/react/_private';
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
2
|
import { Slot } from '@radix-ui/react-slot';
|
|
6
|
-
import {
|
|
3
|
+
import { forwardRef, useMemo } from 'react';
|
|
7
4
|
import { ErrorBoundary } from '../../utils/ErrorBoundary.js';
|
|
8
5
|
import { Markdown } from '../Markdown.js';
|
|
9
|
-
import {
|
|
6
|
+
import { AiMessageToolInvocation } from './tool-invocation.js';
|
|
10
7
|
|
|
11
8
|
const AI_MESSAGE_CONTENT_NAME = "AiMessageContent";
|
|
12
9
|
const defaultMessageContentComponents = {
|
|
@@ -20,71 +17,16 @@ const defaultMessageContentComponents = {
|
|
|
20
17
|
content: part.text
|
|
21
18
|
});
|
|
22
19
|
},
|
|
23
|
-
ToolInvocationPart: ({
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
chatId,
|
|
30
|
-
messageId,
|
|
31
|
-
part
|
|
32
|
-
}) {
|
|
33
|
-
const client = useClient();
|
|
34
|
-
const ai = client[kInternal].ai;
|
|
35
|
-
const tool = useSignal(ai.signals.getTool\u03A3(part.name, chatId));
|
|
36
|
-
const respond = useCallback(
|
|
37
|
-
(result) => {
|
|
38
|
-
if (part.stage === "receiving") {
|
|
39
|
-
console.log(
|
|
40
|
-
`Ignoring respond(): tool '${part.name}' (${part.invocationId}) is still receiving`
|
|
41
|
-
);
|
|
42
|
-
} else if (part.stage === "executed") {
|
|
43
|
-
console.log(
|
|
44
|
-
`Ignoring respond(): tool '${part.name}' (${part.invocationId}) has already executed`
|
|
45
|
-
);
|
|
46
|
-
} else {
|
|
47
|
-
ai.setToolResult(
|
|
48
|
-
chatId,
|
|
49
|
-
messageId,
|
|
50
|
-
part.invocationId,
|
|
51
|
-
result
|
|
52
|
-
);
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
[ai, chatId, messageId, part.stage, part.name, part.invocationId]
|
|
56
|
-
);
|
|
57
|
-
const props = useMemo(() => {
|
|
58
|
-
const { type: _, ...rest } = part;
|
|
59
|
-
return {
|
|
60
|
-
...rest,
|
|
61
|
-
respond,
|
|
62
|
-
types: void 0,
|
|
63
|
-
[kInternal]: {
|
|
64
|
-
execute: tool?.execute
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
}, [part, respond, tool?.execute]);
|
|
68
|
-
if (tool?.render === void 0)
|
|
69
|
-
return null;
|
|
70
|
-
return /* @__PURE__ */ jsx(ErrorBoundary, {
|
|
71
|
-
fallback: /* @__PURE__ */ jsxs("p", {
|
|
72
|
-
style: { color: "red" },
|
|
73
|
-
children: [
|
|
74
|
-
"Failed to render tool call result for \u2018",
|
|
75
|
-
part.name,
|
|
76
|
-
"\u2019. See console for details."
|
|
77
|
-
]
|
|
78
|
-
}),
|
|
79
|
-
children: /* @__PURE__ */ jsx(AiToolInvocationContext.Provider, {
|
|
80
|
-
value: props,
|
|
81
|
-
children: /* @__PURE__ */ jsx(StableRenderFn, {
|
|
82
|
-
renderFn: tool.render,
|
|
83
|
-
props
|
|
20
|
+
ToolInvocationPart: ({ part, message }) => {
|
|
21
|
+
return /* @__PURE__ */ jsx(ErrorBoundary, {
|
|
22
|
+
fallback: null,
|
|
23
|
+
children: /* @__PURE__ */ jsx(AiMessageToolInvocation, {
|
|
24
|
+
part,
|
|
25
|
+
message
|
|
84
26
|
})
|
|
85
|
-
})
|
|
86
|
-
}
|
|
87
|
-
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
};
|
|
88
30
|
const AiMessageContent = forwardRef(
|
|
89
31
|
({ message, components, asChild, ...props }, forwardedRef) => {
|
|
90
32
|
const Component = asChild ? Slot : "div";
|
|
@@ -116,11 +58,7 @@ const AiMessageContent = forwardRef(
|
|
|
116
58
|
return /* @__PURE__ */ jsx(ToolInvocationPart, {
|
|
117
59
|
part,
|
|
118
60
|
...extra,
|
|
119
|
-
|
|
120
|
-
part,
|
|
121
|
-
chatId: message.chatId,
|
|
122
|
-
messageId: message.id
|
|
123
|
-
}, index)
|
|
61
|
+
message
|
|
124
62
|
}, index);
|
|
125
63
|
default:
|
|
126
64
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/primitives/AiMessage/index.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/primitives/AiMessage/index.tsx"],"sourcesContent":["import { Slot } from \"@radix-ui/react-slot\";\nimport { forwardRef, useMemo } from \"react\";\n\nimport { ErrorBoundary } from \"../../utils/ErrorBoundary\";\nimport { Markdown } from \"../Markdown\";\nimport { AiMessageToolInvocation } from \"./tool-invocation\";\nimport type {\n AiMessageContentComponents,\n AiMessageContentProps,\n} from \"./types\";\n\nconst AI_MESSAGE_CONTENT_NAME = \"AiMessageContent\";\n\nconst defaultMessageContentComponents: AiMessageContentComponents = {\n TextPart: ({ part }) => {\n return <Markdown content={part.text} />;\n },\n ReasoningPart: ({ part }) => {\n return <Markdown content={part.text} />;\n },\n ToolInvocationPart: ({ part, message }) => {\n return (\n <ErrorBoundary fallback={null}>\n <AiMessageToolInvocation part={part} message={message} />\n </ErrorBoundary>\n );\n },\n};\n\n/**\n * --------------------------------------------------------------------------\n * @private The API for this component is not yet stable.\n * --------------------------------------------------------------------------\n *\n * Primitive to help display an user or assistant message’s content, which is\n * an array of parts.\n *\n * @example\n * <AiMessage.Content message={message} components={{ TextPart }} />\n */\nconst AiMessageContent = forwardRef<HTMLDivElement, AiMessageContentProps>(\n ({ message, components, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"div\";\n const { TextPart, ReasoningPart, ToolInvocationPart } = useMemo(\n () => ({ ...defaultMessageContentComponents, ...components }),\n [components]\n );\n\n const content = message.content ?? message.contentSoFar;\n const numParts = content.length;\n const isGenerating =\n message.role === \"assistant\" && message.status === \"generating\";\n return (\n <Component {...props} ref={forwardedRef}>\n {content.map((part, index) => {\n // A part is considered to be still \"streaming in\" if it's the last\n // part in the content array, and the message is in \"generating\"\n // state.\n const isStreaming = isGenerating && index === numParts - 1;\n const extra = { index, isStreaming };\n switch (part.type) {\n case \"text\":\n return <TextPart key={index} part={part} {...extra} />;\n case \"reasoning\":\n return <ReasoningPart key={index} part={part} {...extra} />;\n case \"tool-invocation\":\n return (\n <ToolInvocationPart\n key={index}\n part={part}\n {...extra}\n message={message}\n />\n );\n default:\n return null;\n }\n })}\n </Component>\n );\n }\n);\n\nif (process.env.NODE_ENV !== \"production\") {\n AiMessageContent.displayName = AI_MESSAGE_CONTENT_NAME;\n}\n\n// NOTE: Every export from this file will be available publicly as AiMessage.*\nexport { AiMessageContent as Content };\n"],"names":[],"mappings":";;;;;;;AAWA,MAAM,uBAA0B,GAAA,kBAAA,CAAA;AAEhC,MAAM,+BAA8D,GAAA;AAAA,EAClE,QAAU,EAAA,CAAC,EAAE,IAAA,EAAW,KAAA;AACtB,IAAA,uBAAQ,GAAA,CAAA,QAAA,EAAA;AAAA,MAAS,SAAS,IAAK,CAAA,IAAA;AAAA,KAAM,CAAA,CAAA;AAAA,GACvC;AAAA,EACA,aAAe,EAAA,CAAC,EAAE,IAAA,EAAW,KAAA;AAC3B,IAAA,uBAAQ,GAAA,CAAA,QAAA,EAAA;AAAA,MAAS,SAAS,IAAK,CAAA,IAAA;AAAA,KAAM,CAAA,CAAA;AAAA,GACvC;AAAA,EACA,kBAAoB,EAAA,CAAC,EAAE,IAAA,EAAM,SAAc,KAAA;AACzC,IAAA,uBACG,GAAA,CAAA,aAAA,EAAA;AAAA,MAAc,QAAU,EAAA,IAAA;AAAA,MACvB,QAAC,kBAAA,GAAA,CAAA,uBAAA,EAAA;AAAA,QAAwB,IAAA;AAAA,QAAY,OAAA;AAAA,OAAkB,CAAA;AAAA,KACzD,CAAA,CAAA;AAAA,GAEJ;AACF,CAAA,CAAA;AAaA,MAAM,gBAAmB,GAAA,UAAA;AAAA,EACvB,CAAC,EAAE,OAAA,EAAS,YAAY,OAAY,EAAA,GAAA,KAAA,IAAS,YAAiB,KAAA;AAC5D,IAAM,MAAA,SAAA,GAAY,UAAU,IAAO,GAAA,KAAA,CAAA;AACnC,IAAA,MAAM,EAAE,QAAA,EAAU,aAAe,EAAA,kBAAA,EAAuB,GAAA,OAAA;AAAA,MACtD,OAAO,EAAE,GAAG,+BAAA,EAAiC,GAAG,UAAW,EAAA,CAAA;AAAA,MAC3D,CAAC,UAAU,CAAA;AAAA,KACb,CAAA;AAEA,IAAM,MAAA,OAAA,GAAU,OAAQ,CAAA,OAAA,IAAW,OAAQ,CAAA,YAAA,CAAA;AAC3C,IAAA,MAAM,WAAW,OAAQ,CAAA,MAAA,CAAA;AACzB,IAAA,MAAM,YACJ,GAAA,OAAA,CAAQ,IAAS,KAAA,WAAA,IAAe,QAAQ,MAAW,KAAA,YAAA,CAAA;AACrD,IAAA,uBACG,GAAA,CAAA,SAAA,EAAA;AAAA,MAAW,GAAG,KAAA;AAAA,MAAO,GAAK,EAAA,YAAA;AAAA,MACxB,QAAQ,EAAA,OAAA,CAAA,GAAA,CAAI,CAAC,IAAA,EAAM,KAAU,KAAA;AAI5B,QAAM,MAAA,WAAA,GAAc,YAAgB,IAAA,KAAA,KAAU,QAAW,GAAA,CAAA,CAAA;AACzD,QAAM,MAAA,KAAA,GAAQ,EAAE,KAAA,EAAO,WAAY,EAAA,CAAA;AACnC,QAAA,QAAQ,KAAK,IAAM;AAAA,UACjB,KAAK,MAAA;AACH,YAAA,uBAAQ,GAAA,CAAA,QAAA,EAAA;AAAA,cAAqB,IAAA;AAAA,cAAa,GAAG,KAAA;AAAA,aAAA,EAAvB,KAA8B,CAAA,CAAA;AAAA,UACtD,KAAK,WAAA;AACH,YAAA,uBAAQ,GAAA,CAAA,aAAA,EAAA;AAAA,cAA0B,IAAA;AAAA,cAAa,GAAG,KAAA;AAAA,aAAA,EAAvB,KAA8B,CAAA,CAAA;AAAA,UAC3D,KAAK,iBAAA;AACH,YAAA,uBACG,GAAA,CAAA,kBAAA,EAAA;AAAA,cAEC,IAAA;AAAA,cACC,GAAG,KAAA;AAAA,cACJ,OAAA;AAAA,aAAA,EAHK,KAIP,CAAA,CAAA;AAAA,UAEJ;AACE,YAAO,OAAA,IAAA,CAAA;AAAA,SACX;AAAA,OACD,CAAA;AAAA,KACH,CAAA,CAAA;AAAA,GAEJ;AACF,EAAA;AAEA,IAAI,OAAA,CAAQ,GAAI,CAAA,QAAA,KAAa,YAAc,EAAA;AACzC,EAAA,gBAAA,CAAiB,WAAc,GAAA,uBAAA,CAAA;AACjC;;;;"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var core = require('@liveblocks/core');
|
|
5
|
+
var react = require('@liveblocks/react');
|
|
6
|
+
var _private = require('@liveblocks/react/_private');
|
|
7
|
+
var react$1 = require('react');
|
|
8
|
+
var contexts = require('./contexts.cjs');
|
|
9
|
+
|
|
10
|
+
function StableRenderFn(props) {
|
|
11
|
+
return props.renderFn(props.props);
|
|
12
|
+
}
|
|
13
|
+
function AiMessageToolInvocation({
|
|
14
|
+
message,
|
|
15
|
+
part
|
|
16
|
+
}) {
|
|
17
|
+
const client = react.useClient();
|
|
18
|
+
const ai = client[core.kInternal].ai;
|
|
19
|
+
const tool = _private.useSignal(ai.signals.getTool\u03A3(part.name, message.chatId));
|
|
20
|
+
const respond = react$1.useCallback(
|
|
21
|
+
(result) => {
|
|
22
|
+
if (part.stage === "receiving") {
|
|
23
|
+
console.log(
|
|
24
|
+
`Ignoring respond(): tool '${part.name}' (${part.invocationId}) is still receiving`
|
|
25
|
+
);
|
|
26
|
+
} else if (part.stage === "executed") {
|
|
27
|
+
console.log(
|
|
28
|
+
`Ignoring respond(): tool '${part.name}' (${part.invocationId}) has already executed`
|
|
29
|
+
);
|
|
30
|
+
} else {
|
|
31
|
+
ai.setToolResult(
|
|
32
|
+
message.chatId,
|
|
33
|
+
message.id,
|
|
34
|
+
part.invocationId,
|
|
35
|
+
result.data
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
[ai, message.chatId, message.id, part.stage, part.name, part.invocationId]
|
|
40
|
+
);
|
|
41
|
+
const props = react$1.useMemo(() => {
|
|
42
|
+
const { type: _, ...rest } = part;
|
|
43
|
+
return {
|
|
44
|
+
...rest,
|
|
45
|
+
respond,
|
|
46
|
+
types: void 0,
|
|
47
|
+
[core.kInternal]: {
|
|
48
|
+
execute: tool?.execute
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}, [part, respond, tool?.execute]);
|
|
52
|
+
if (tool?.render === void 0)
|
|
53
|
+
return null;
|
|
54
|
+
return /* @__PURE__ */ jsxRuntime.jsx(contexts.AiToolInvocationContext.Provider, {
|
|
55
|
+
value: props,
|
|
56
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(StableRenderFn, {
|
|
57
|
+
renderFn: tool.render,
|
|
58
|
+
props
|
|
59
|
+
})
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
exports.AiMessageToolInvocation = AiMessageToolInvocation;
|
|
64
|
+
//# sourceMappingURL=tool-invocation.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-invocation.cjs","sources":["../../../src/primitives/AiMessage/tool-invocation.tsx"],"sourcesContent":["import {\n type AiChatMessage,\n type AiToolInvocationPart,\n type AiToolInvocationProps,\n type JsonObject,\n kInternal,\n type ToolResultData,\n type ToolResultResponse,\n} from \"@liveblocks/core\";\nimport { useClient } from \"@liveblocks/react\";\nimport { useSignal } from \"@liveblocks/react/_private\";\nimport { type FunctionComponent, useCallback, useMemo } from \"react\";\n\nimport { AiToolInvocationContext } from \"./contexts\";\n\ntype OpaqueAiToolInvocationProps = AiToolInvocationProps<\n JsonObject,\n ToolResultData\n>;\n\nfunction StableRenderFn(props: {\n renderFn: FunctionComponent<OpaqueAiToolInvocationProps>;\n props: OpaqueAiToolInvocationProps;\n}) {\n return props.renderFn(props.props);\n}\n\n/**\n * @internal\n *\n * This could become publicly exposed as <AiMessage.ToolInvocation /> in the future,\n * but because namespace exports can't be marked `@internal`, we're keeping it in its\n * own file for now.\n */\nexport function AiMessageToolInvocation({\n message,\n part,\n}: {\n message: AiChatMessage;\n part: AiToolInvocationPart;\n}) {\n const client = useClient();\n const ai = client[kInternal].ai;\n const tool = useSignal(ai.signals.getToolΣ(part.name, message.chatId));\n\n const respond = useCallback(\n (result: ToolResultResponse) => {\n if (part.stage === \"receiving\") {\n console.log(\n `Ignoring respond(): tool '${part.name}' (${part.invocationId}) is still receiving`\n );\n } else if (part.stage === \"executed\") {\n console.log(\n `Ignoring respond(): tool '${part.name}' (${part.invocationId}) has already executed`\n );\n } else {\n ai.setToolResult(\n message.chatId,\n message.id,\n part.invocationId,\n result.data\n // TODO Pass in AiGenerationOptions here?\n );\n }\n },\n [ai, message.chatId, message.id, part.stage, part.name, part.invocationId]\n );\n\n const props = useMemo(() => {\n const { type: _, ...rest } = part;\n return {\n ...rest,\n respond,\n types: undefined as never,\n [kInternal]: {\n execute: tool?.execute,\n },\n };\n }, [part, respond, tool?.execute]);\n\n if (tool?.render === undefined) return null;\n return (\n <AiToolInvocationContext.Provider value={props}>\n <StableRenderFn\n renderFn={tool.render as FunctionComponent<OpaqueAiToolInvocationProps>}\n props={props}\n />\n </AiToolInvocationContext.Provider>\n );\n}\n"],"names":["useClient","kInternal","useSignal","useCallback","useMemo","jsx","AiToolInvocationContext"],"mappings":";;;;;;;;;AAoBA,SAAS,eAAe,KAGrB,EAAA;AACD,EAAO,OAAA,KAAA,CAAM,QAAS,CAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AACnC,CAAA;AASO,SAAS,uBAAwB,CAAA;AAAA,EACtC,OAAA;AAAA,EACA,IAAA;AACF,CAGG,EAAA;AACD,EAAA,MAAM,SAASA,eAAU,EAAA,CAAA;AACzB,EAAM,MAAA,EAAA,GAAK,OAAOC,cAAW,CAAA,CAAA,EAAA,CAAA;AAC7B,EAAM,MAAA,IAAA,GAAOC,mBAAU,EAAG,CAAA,OAAA,CAAQ,cAAS,IAAK,CAAA,IAAA,EAAM,OAAQ,CAAA,MAAM,CAAC,CAAA,CAAA;AAErE,EAAA,MAAM,OAAU,GAAAC,mBAAA;AAAA,IACd,CAAC,MAA+B,KAAA;AAC9B,MAAI,IAAA,IAAA,CAAK,UAAU,WAAa,EAAA;AAC9B,QAAQ,OAAA,CAAA,GAAA;AAAA,UACN,CAAA,0BAAA,EAA6B,IAAK,CAAA,IAAA,CAAA,GAAA,EAAU,IAAK,CAAA,YAAA,CAAA,oBAAA,CAAA;AAAA,SACnD,CAAA;AAAA,OACF,MAAA,IAAW,IAAK,CAAA,KAAA,KAAU,UAAY,EAAA;AACpC,QAAQ,OAAA,CAAA,GAAA;AAAA,UACN,CAAA,0BAAA,EAA6B,IAAK,CAAA,IAAA,CAAA,GAAA,EAAU,IAAK,CAAA,YAAA,CAAA,sBAAA,CAAA;AAAA,SACnD,CAAA;AAAA,OACK,MAAA;AACL,QAAG,EAAA,CAAA,aAAA;AAAA,UACD,OAAQ,CAAA,MAAA;AAAA,UACR,OAAQ,CAAA,EAAA;AAAA,UACR,IAAK,CAAA,YAAA;AAAA,UACL,MAAO,CAAA,IAAA;AAAA,SAET,CAAA;AAAA,OACF;AAAA,KACF;AAAA,IACA,CAAC,EAAI,EAAA,OAAA,CAAQ,MAAQ,EAAA,OAAA,CAAQ,EAAI,EAAA,IAAA,CAAK,KAAO,EAAA,IAAA,CAAK,IAAM,EAAA,IAAA,CAAK,YAAY,CAAA;AAAA,GAC3E,CAAA;AAEA,EAAM,MAAA,KAAA,GAAQC,gBAAQ,MAAM;AAC1B,IAAA,MAAM,EAAE,IAAA,EAAM,CAAM,EAAA,GAAA,IAAA,EAAS,GAAA,IAAA,CAAA;AAC7B,IAAO,OAAA;AAAA,MACL,GAAG,IAAA;AAAA,MACH,OAAA;AAAA,MACA,KAAO,EAAA,KAAA,CAAA;AAAA,MACP,CAACH,cAAY,GAAA;AAAA,QACX,SAAS,IAAM,EAAA,OAAA;AAAA,OACjB;AAAA,KACF,CAAA;AAAA,KACC,CAAC,IAAA,EAAM,OAAS,EAAA,IAAA,EAAM,OAAO,CAAC,CAAA,CAAA;AAEjC,EAAA,IAAI,MAAM,MAAW,KAAA,KAAA,CAAA;AAAW,IAAO,OAAA,IAAA,CAAA;AACvC,EACE,uBAAAI,cAAA,CAACC,iCAAwB,QAAxB,EAAA;AAAA,IAAiC,KAAO,EAAA,KAAA;AAAA,IACvC,QAAC,kBAAAD,cAAA,CAAA,cAAA,EAAA;AAAA,MACC,UAAU,IAAK,CAAA,MAAA;AAAA,MACf,KAAA;AAAA,KACF,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
|