UNPKG

@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
'use strict'; 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