@liveblocks/react-ui
Version:
A set of React pre-built components for the Liveblocks products. Liveblocks is the all-in-one toolkit to build collaborative products like Figma, Notion, and more.
79 lines (75 loc) • 2.55 kB
JavaScript
;
var jsxRuntime = require('react/jsx-runtime');
var reactSlot = require('@radix-ui/react-slot');
var react = require('react');
var ErrorBoundary = require('../../utils/ErrorBoundary.cjs');
var Markdown = require('../Markdown.cjs');
var toolInvocation = require('./tool-invocation.cjs');
const AI_MESSAGE_CONTENT_NAME = "AiMessageContent";
const defaultMessageContentComponents = {
TextPart: ({ part }) => {
return /* @__PURE__ */ jsxRuntime.jsx(Markdown.Markdown, {
content: part.text
});
},
ReasoningPart: ({ part }) => {
return /* @__PURE__ */ jsxRuntime.jsx(Markdown.Markdown, {
content: part.text
});
},
ToolInvocationPart: ({ part, message }) => {
return /* @__PURE__ */ jsxRuntime.jsx(ErrorBoundary.ErrorBoundary, {
fallback: null,
children: /* @__PURE__ */ jsxRuntime.jsx(toolInvocation.AiMessageToolInvocation, {
part,
message
})
});
}
};
const AiMessageContent = react.forwardRef(
({ message, components, asChild, copilotId, ...props }, forwardedRef) => {
const Component = asChild ? reactSlot.Slot : "div";
const { TextPart, ReasoningPart, ToolInvocationPart } = react.useMemo(
() => ({ ...defaultMessageContentComponents, ...components }),
[components]
);
const content = message.content ?? message.contentSoFar;
const numParts = content.length;
const isGenerating = message.role === "assistant" && message.status === "generating";
return /* @__PURE__ */ jsxRuntime.jsx(Component, {
...props,
ref: forwardedRef,
children: content.map((part, index) => {
const isStreaming = isGenerating && index === numParts - 1;
const extra = { index, isStreaming };
switch (part.type) {
case "text":
return /* @__PURE__ */ jsxRuntime.jsx(TextPart, {
part,
...extra
}, index);
case "reasoning":
return /* @__PURE__ */ jsxRuntime.jsx(ReasoningPart, {
part,
...extra
}, index);
case "tool-invocation":
return /* @__PURE__ */ jsxRuntime.jsx(ToolInvocationPart, {
part,
...extra,
message,
copilotId
}, index);
default:
return null;
}
})
});
}
);
if (process.env.NODE_ENV !== "production") {
AiMessageContent.displayName = AI_MESSAGE_CONTENT_NAME;
}
exports.Content = AiMessageContent;
//# sourceMappingURL=index.cjs.map