@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
JavaScript
'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