@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.
117 lines (113 loc) • 4.11 kB
JavaScript
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var react$1 = require('@liveblocks/react');
var react = require('react');
var Send = require('../../icons/Send.cjs');
var Stop = require('../../icons/Stop.cjs');
var overrides = require('../../overrides.cjs');
var index = require('../../primitives/AiComposer/index.cjs');
var contexts = require('../../primitives/AiComposer/contexts.cjs');
var cn = require('../../utils/cn.cjs');
var Button = require('./Button.cjs');
var Tooltip = require('./Tooltip.cjs');
var TooltipPrimitive = require('@radix-ui/react-tooltip');
function AiComposerAction({
overrides: overrides$1
}) {
const { canAbort } = contexts.useAiComposer();
const $ = overrides.useOverrides(overrides$1);
const preventDefault = react.useCallback((event) => {
event.preventDefault();
}, []);
const stopPropagation = react.useCallback((event) => {
event.stopPropagation();
}, []);
return canAbort ? /* @__PURE__ */ jsxRuntime.jsx(Tooltip.ShortcutTooltip, { content: $.AI_COMPOSER_ABORT, children: /* @__PURE__ */ jsxRuntime.jsx(index.AiComposerAbort, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
Button.Button,
{
onPointerDown: preventDefault,
onClick: stopPropagation,
className: "lb-ai-composer-action",
variant: "secondary",
"aria-label": $.AI_COMPOSER_ABORT,
icon: /* @__PURE__ */ jsxRuntime.jsx(Stop.StopIcon, {})
}
) }) }) : /* @__PURE__ */ jsxRuntime.jsx(Tooltip.ShortcutTooltip, { content: $.AI_COMPOSER_SEND, shortcut: "Enter", children: /* @__PURE__ */ jsxRuntime.jsx(index.AiComposerSubmit, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
Button.Button,
{
onPointerDown: preventDefault,
onClick: stopPropagation,
className: "lb-ai-composer-action",
variant: "primary",
"aria-label": $.AI_COMPOSER_SEND,
icon: /* @__PURE__ */ jsxRuntime.jsx(Send.SendIcon, {})
}
) }) });
}
const AiComposer = react.forwardRef(
({
defaultValue,
onComposerSubmit,
disabled,
autoFocus,
overrides: overrides$1,
className,
chatId,
branchId,
copilotId,
responseTimeout,
stream = true,
onComposerSubmitted,
...props
}, forwardedRef) => {
const $ = overrides.useOverrides(overrides$1);
const sendAiMessage = react$1.useSendAiMessage(chatId, {
stream,
copilotId,
timeout: responseTimeout
});
const handleComposerSubmit = react.useCallback(
(message, event) => {
onComposerSubmit?.(message, event);
if (event.isDefaultPrevented())
return;
const newMessage = sendAiMessage(message.text);
onComposerSubmitted?.(newMessage);
},
[onComposerSubmit, sendAiMessage, onComposerSubmitted]
);
return /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive.TooltipProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(
index.AiComposerForm,
{
className: cn.cn(
"lb-root lb-ai-composer lb-ai-composer-form",
className
),
dir: $.dir,
...props,
disabled,
ref: forwardedRef,
onComposerSubmit: handleComposerSubmit,
chatId,
branchId,
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "lb-ai-composer-editor-container", children: [
/* @__PURE__ */ jsxRuntime.jsx(
index.Editor,
{
autoFocus,
className: "lb-ai-composer-editor",
placeholder: $.AI_COMPOSER_PLACEHOLDER,
defaultValue
}
),
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "lb-ai-composer-footer", children: [
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "lb-ai-composer-editor-actions" }),
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "lb-ai-composer-actions", children: /* @__PURE__ */ jsxRuntime.jsx(AiComposerAction, { overrides: overrides$1 }) })
] })
] })
}
) });
}
);
exports.AiComposer = AiComposer;
//# sourceMappingURL=AiComposer.cjs.map