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.

190 lines (186 loc) 6.21 kB
'use strict'; var jsxRuntime = require('react/jsx-runtime'); var react = require('react'); var ChevronRight = require('../../icons/ChevronRight.cjs'); var Warning = require('../../icons/Warning.cjs'); var overrides = require('../../overrides.cjs'); var index = require('../../primitives/AiMessage/index.cjs'); var toolInvocation = require('../../primitives/AiMessage/tool-invocation.cjs'); var index$1 = require('../../primitives/Collapsible/index.cjs'); var cn = require('../../utils/cn.cjs'); var ErrorBoundary = require('../../utils/ErrorBoundary.cjs'); var Prose = require('./Prose.cjs'); const AiChatAssistantMessage = react.memo( react.forwardRef( ({ message, className, overrides: overrides$1, components, copilotId, ...props }, forwardedRef) => { const $ = overrides.useOverrides(overrides$1); let children = null; if (message.deletedAt !== void 0) { children = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "lb-ai-chat-message-deleted", children: $.AI_CHAT_MESSAGE_DELETED }); } else if (message.status === "generating" || message.status === "awaiting-tool") { if (message.contentSoFar.length === 0) { children = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "lb-ai-chat-message-thinking lb-ai-chat-pending", children: $.AI_CHAT_MESSAGE_THINKING }); } else { children = /* @__PURE__ */ jsxRuntime.jsx(AssistantMessageContent, { message, components, copilotId }); } } else if (message.status === "completed") { children = /* @__PURE__ */ jsxRuntime.jsx(AssistantMessageContent, { message, components, copilotId }); } else if (message.status === "failed") { if (message.errorReason === "Aborted by user") { children = /* @__PURE__ */ jsxRuntime.jsx(AssistantMessageContent, { message, components, copilotId }); } else { children = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [ /* @__PURE__ */ jsxRuntime.jsx(AssistantMessageContent, { message, components, copilotId }), /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "lb-ai-chat-message-error", children: [ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "lb-icon-container", children: /* @__PURE__ */ jsxRuntime.jsx(Warning.WarningIcon, {}) }), message.errorReason ] }) ] }); } } return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn.cn( "lb-ai-chat-message lb-ai-chat-assistant-message", className ), ...props, ref: forwardedRef, children: /* @__PURE__ */ jsxRuntime.jsx(overrides.OverridesProvider, { overrides: overrides$1, children }) }); } ) ); function AssistantMessageContent({ message, components, copilotId }) { return /* @__PURE__ */ jsxRuntime.jsx(index.Content, { message, components: { TextPart: (props) => /* @__PURE__ */ jsxRuntime.jsx(TextPart, { ...props, components }), ReasoningPart: (props) => /* @__PURE__ */ jsxRuntime.jsx(ReasoningPart, { ...props, components }), ToolInvocationPart }, copilotId, className: "lb-ai-chat-message-content" }); } function TextPart({ part, components }) { return /* @__PURE__ */ jsxRuntime.jsx(Prose.Prose, { content: part.text, className: "lb-ai-chat-message-text", components }); } function ReasoningPart({ part, isStreaming, components }) { const [isOpen, setIsOpen] = react.useState(isStreaming); const $ = overrides.useOverrides(); react.useEffect(() => { if (!isStreaming) { setIsOpen(false); } }, [isStreaming]); return /* @__PURE__ */ jsxRuntime.jsxs(index$1.Root, { className: "lb-collapsible lb-ai-chat-message-reasoning", open: isOpen, onOpenChange: setIsOpen, children: [ /* @__PURE__ */ jsxRuntime.jsxs(index$1.Trigger, { className: cn.cn( "lb-collapsible-trigger", isStreaming && "lb-ai-chat-pending" ), children: [ $.AI_CHAT_MESSAGE_REASONING(isStreaming), /* @__PURE__ */ jsxRuntime.jsx("span", { className: "lb-collapsible-chevron lb-icon-container", children: /* @__PURE__ */ jsxRuntime.jsx(ChevronRight.ChevronRightIcon, {}) }) ] }), /* @__PURE__ */ jsxRuntime.jsx(index$1.Content, { className: "lb-collapsible-content", children: /* @__PURE__ */ jsxRuntime.jsx(Prose.Prose, { content: part.text, components }) }) ] }); } function ToolInvocationPart({ part, message, copilotId }) { return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "lb-ai-chat-message-tool-invocation", children: /* @__PURE__ */ jsxRuntime.jsx(ErrorBoundary.ErrorBoundary, { fallback: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "lb-ai-chat-message-error", children: [ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "lb-icon-container", children: /* @__PURE__ */ jsxRuntime.jsx(Warning.WarningIcon, {}) }), /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [ "Failed to render tool call result for ", /* @__PURE__ */ jsxRuntime.jsx("code", { children: part.name }), ". See console for details." ] }) ] }), children: /* @__PURE__ */ jsxRuntime.jsx(toolInvocation.AiMessageToolInvocation, { part, message, copilotId }) }) }); } exports.AiChatAssistantMessage = AiChatAssistantMessage; //# sourceMappingURL=AiChatAssistantMessage.cjs.map