@liveblocks/react-ui 3.8.0 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_private/index.cjs +2 -0
- package/dist/_private/index.cjs.map +1 -1
- package/dist/_private/index.d.cts +7 -1
- package/dist/_private/index.d.ts +7 -1
- package/dist/_private/index.js +1 -0
- package/dist/_private/index.js.map +1 -1
- package/dist/components/AiChat.cjs +19 -4
- package/dist/components/AiChat.cjs.map +1 -1
- package/dist/components/AiChat.js +20 -5
- package/dist/components/AiChat.js.map +1 -1
- package/dist/components/internal/AiChatAssistantMessage.cjs +200 -39
- package/dist/components/internal/AiChatAssistantMessage.cjs.map +1 -1
- package/dist/components/internal/AiChatAssistantMessage.js +195 -34
- package/dist/components/internal/AiChatAssistantMessage.js.map +1 -1
- package/dist/components/internal/AiComposer.cjs +1 -3
- package/dist/components/internal/AiComposer.cjs.map +1 -1
- package/dist/components/internal/AiComposer.js +1 -3
- package/dist/components/internal/AiComposer.js.map +1 -1
- package/dist/components/internal/Favicon.cjs +26 -0
- package/dist/components/internal/Favicon.cjs.map +1 -0
- package/dist/components/internal/Favicon.js +24 -0
- package/dist/components/internal/Favicon.js.map +1 -0
- package/dist/icon.cjs +2 -0
- package/dist/icon.cjs.map +1 -1
- package/dist/icon.js +1 -0
- package/dist/icon.js.map +1 -1
- package/dist/icons/Globe.cjs +23 -0
- package/dist/icons/Globe.cjs.map +1 -0
- package/dist/icons/Globe.js +21 -0
- package/dist/icons/Globe.js.map +1 -0
- package/dist/icons/index.cjs +2 -0
- package/dist/icons/index.cjs.map +1 -1
- package/dist/icons/index.js +1 -0
- package/dist/icons/index.js.map +1 -1
- package/dist/index.d.cts +51 -2
- package/dist/index.d.ts +51 -2
- package/dist/overrides.cjs +79 -28
- package/dist/overrides.cjs.map +1 -1
- package/dist/overrides.js +79 -28
- package/dist/overrides.js.map +1 -1
- package/dist/primitives/AiComposer/index.cjs +6 -2
- package/dist/primitives/AiComposer/index.cjs.map +1 -1
- package/dist/primitives/AiComposer/index.js +6 -2
- package/dist/primitives/AiComposer/index.js.map +1 -1
- package/dist/primitives/AiMessage/index.cjs +16 -2
- package/dist/primitives/AiMessage/index.cjs.map +1 -1
- package/dist/primitives/AiMessage/index.js +16 -2
- package/dist/primitives/AiMessage/index.js.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -4
- package/src/styles/index.css +162 -54
- package/styles.css +1 -1
- package/styles.css.map +1 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var Icon = require('../components/internal/Icon.cjs');
|
|
5
|
+
|
|
6
|
+
function GlobeIcon(props) {
|
|
7
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Icon.Icon, {
|
|
8
|
+
...props,
|
|
9
|
+
children: [
|
|
10
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", {
|
|
11
|
+
cx: 10,
|
|
12
|
+
cy: 10,
|
|
13
|
+
r: 7
|
|
14
|
+
}),
|
|
15
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", {
|
|
16
|
+
d: "M3 10h14M10 3s-3 3-3 7 3 7 3 7M10 3s3 3 3 7-3 7-3 7"
|
|
17
|
+
})
|
|
18
|
+
]
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
exports.GlobeIcon = GlobeIcon;
|
|
23
|
+
//# sourceMappingURL=Globe.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Globe.cjs","sources":["../../src/icons/Globe.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\n\nimport { Icon } from \"../components/internal/Icon\";\n\nexport function GlobeIcon(props: ComponentProps<\"svg\">) {\n return (\n <Icon {...props}>\n <circle cx={10} cy={10} r={7} />\n <path d=\"M3 10h14M10 3s-3 3-3 7 3 7 3 7M10 3s3 3 3 7-3 7-3 7\" />\n </Icon>\n );\n}\n"],"names":["jsxs","Icon","jsx"],"mappings":";;;;;AAIO,SAAS,UAAU,KAA8B,EAAA;AACtD,EAAA,uBACGA,eAAA,CAAAC,SAAA,EAAA;AAAA,IAAM,GAAG,KAAA;AAAA,IACR,QAAA,EAAA;AAAA,sBAACC,cAAA,CAAA,QAAA,EAAA;AAAA,QAAO,EAAI,EAAA,EAAA;AAAA,QAAI,EAAI,EAAA,EAAA;AAAA,QAAI,CAAG,EAAA,CAAA;AAAA,OAAG,CAAA;AAAA,sBAC7BA,cAAA,CAAA,MAAA,EAAA;AAAA,QAAK,CAAE,EAAA,qDAAA;AAAA,OAAsD,CAAA;AAAA,KAAA;AAAA,GAChE,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Icon } from '../components/internal/Icon.js';
|
|
3
|
+
|
|
4
|
+
function GlobeIcon(props) {
|
|
5
|
+
return /* @__PURE__ */ jsxs(Icon, {
|
|
6
|
+
...props,
|
|
7
|
+
children: [
|
|
8
|
+
/* @__PURE__ */ jsx("circle", {
|
|
9
|
+
cx: 10,
|
|
10
|
+
cy: 10,
|
|
11
|
+
r: 7
|
|
12
|
+
}),
|
|
13
|
+
/* @__PURE__ */ jsx("path", {
|
|
14
|
+
d: "M3 10h14M10 3s-3 3-3 7 3 7 3 7M10 3s3 3 3 7-3 7-3 7"
|
|
15
|
+
})
|
|
16
|
+
]
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export { GlobeIcon };
|
|
21
|
+
//# sourceMappingURL=Globe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Globe.js","sources":["../../src/icons/Globe.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\n\nimport { Icon } from \"../components/internal/Icon\";\n\nexport function GlobeIcon(props: ComponentProps<\"svg\">) {\n return (\n <Icon {...props}>\n <circle cx={10} cy={10} r={7} />\n <path d=\"M3 10h14M10 3s-3 3-3 7 3 7 3 7M10 3s3 3 3 7-3 7-3 7\" />\n </Icon>\n );\n}\n"],"names":[],"mappings":";;;AAIO,SAAS,UAAU,KAA8B,EAAA;AACtD,EAAA,uBACG,IAAA,CAAA,IAAA,EAAA;AAAA,IAAM,GAAG,KAAA;AAAA,IACR,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,QAAA,EAAA;AAAA,QAAO,EAAI,EAAA,EAAA;AAAA,QAAI,EAAI,EAAA,EAAA;AAAA,QAAI,CAAG,EAAA,CAAA;AAAA,OAAG,CAAA;AAAA,sBAC7B,GAAA,CAAA,MAAA,EAAA;AAAA,QAAK,CAAE,EAAA,qDAAA;AAAA,OAAsD,CAAA;AAAA,KAAA;AAAA,GAChE,CAAA,CAAA;AAEJ;;;;"}
|
package/dist/icons/index.cjs
CHANGED
|
@@ -26,6 +26,7 @@ var Edit = require('./Edit.cjs');
|
|
|
26
26
|
var Ellipsis = require('./Ellipsis.cjs');
|
|
27
27
|
var Emoji = require('./Emoji.cjs');
|
|
28
28
|
var EmojiPlus = require('./EmojiPlus.cjs');
|
|
29
|
+
var Globe = require('./Globe.cjs');
|
|
29
30
|
var H1 = require('./H1.cjs');
|
|
30
31
|
var H2 = require('./H2.cjs');
|
|
31
32
|
var H3 = require('./H3.cjs');
|
|
@@ -83,6 +84,7 @@ exports.EditIcon = Edit.EditIcon;
|
|
|
83
84
|
exports.EllipsisIcon = Ellipsis.EllipsisIcon;
|
|
84
85
|
exports.EmojiIcon = Emoji.EmojiIcon;
|
|
85
86
|
exports.EmojiPlusIcon = EmojiPlus.EmojiPlusIcon;
|
|
87
|
+
exports.GlobeIcon = Globe.GlobeIcon;
|
|
86
88
|
exports.H1Icon = H1.H1Icon;
|
|
87
89
|
exports.H2Icon = H2.H2Icon;
|
|
88
90
|
exports.H3Icon = H3.H3Icon;
|
package/dist/icons/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/icons/index.js
CHANGED
|
@@ -24,6 +24,7 @@ export { EditIcon } from './Edit.js';
|
|
|
24
24
|
export { EllipsisIcon } from './Ellipsis.js';
|
|
25
25
|
export { EmojiIcon } from './Emoji.js';
|
|
26
26
|
export { EmojiPlusIcon } from './EmojiPlus.js';
|
|
27
|
+
export { GlobeIcon } from './Globe.js';
|
|
27
28
|
export { H1Icon } from './H1.js';
|
|
28
29
|
export { H2Icon } from './H2.js';
|
|
29
30
|
export { H3Icon } from './H3.js';
|
package/dist/icons/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { ComponentType, ComponentPropsWithoutRef, ElementType, ReactNode,
|
|
3
|
-
import { CommentAttachment, AiReasoningPart, AiRetrievalPart, Relax, CopilotId, AiKnowledgeSource, AiOpaqueToolDefinition, AiToolTypePack, JsonObject, AiToolExecuteCallback, NoInfr, CommentBody, MentionData, BaseMetadata, DM, CommentData, HistoryVersion, InboxNotificationData, InboxNotificationThreadData, InboxNotificationTextMentionData, InboxNotificationCustomData, KDAD, ThreadData } from '@liveblocks/core';
|
|
2
|
+
import { ComponentType, ComponentPropsWithoutRef, ElementType, ReactNode, ComponentProps, FormEvent, RefAttributes, MouseEvent, PropsWithChildren } from 'react';
|
|
3
|
+
import { CommentAttachment, AiReasoningPart, AiRetrievalPart, Relax, WithNavigation, AiAssistantMessage, CopilotId, AiKnowledgeSource, AiOpaqueToolDefinition, AiToolTypePack, JsonObject, AiToolExecuteCallback, NoInfr, CommentBody, MentionData, BaseMetadata, DM, CommentData, HistoryVersion, InboxNotificationData, InboxNotificationThreadData, InboxNotificationTextMentionData, InboxNotificationCustomData, KDAD, ThreadData } from '@liveblocks/core';
|
|
4
4
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
5
5
|
|
|
6
6
|
interface GlobalComponents {
|
|
@@ -385,6 +385,40 @@ interface MarkdownComponentsCodeBlockProps {
|
|
|
385
385
|
language?: string;
|
|
386
386
|
}
|
|
387
387
|
|
|
388
|
+
type UiAssistantMessage = WithNavigation<AiAssistantMessage>;
|
|
389
|
+
type AiChatAssistantMessageComponents = {
|
|
390
|
+
/**
|
|
391
|
+
* The components used to render Markdown content.
|
|
392
|
+
*/
|
|
393
|
+
markdown?: Partial<MarkdownComponents>;
|
|
394
|
+
};
|
|
395
|
+
interface AiChatAssistantMessageProps extends ComponentProps<"div"> {
|
|
396
|
+
/**
|
|
397
|
+
* The message to display.
|
|
398
|
+
*/
|
|
399
|
+
message: UiAssistantMessage;
|
|
400
|
+
/**
|
|
401
|
+
* How to show or hide reasoning.
|
|
402
|
+
*/
|
|
403
|
+
showReasoning?: boolean | "during";
|
|
404
|
+
/**
|
|
405
|
+
* How to show or hide retrievals.
|
|
406
|
+
*/
|
|
407
|
+
showRetrievals?: boolean | "during" | Record<AiRetrievalPart["kind"], boolean | "during">;
|
|
408
|
+
/**
|
|
409
|
+
* Whether to show sources.
|
|
410
|
+
*/
|
|
411
|
+
showSources?: boolean;
|
|
412
|
+
/**
|
|
413
|
+
* Override the component's strings.
|
|
414
|
+
*/
|
|
415
|
+
overrides?: Partial<GlobalOverrides & AiChatMessageOverrides>;
|
|
416
|
+
/**
|
|
417
|
+
* Override the component's components.
|
|
418
|
+
*/
|
|
419
|
+
components?: Partial<GlobalComponents & AiChatAssistantMessageComponents>;
|
|
420
|
+
}
|
|
421
|
+
|
|
388
422
|
interface AiComposerSubmitMessage {
|
|
389
423
|
/**
|
|
390
424
|
* The submitted message text.
|
|
@@ -520,6 +554,18 @@ interface AiChatProps extends ComponentProps<"div"> {
|
|
|
520
554
|
* The layout of the chat and its composer.
|
|
521
555
|
*/
|
|
522
556
|
layout?: "inset" | "compact";
|
|
557
|
+
/**
|
|
558
|
+
* How to show or hide reasoning.
|
|
559
|
+
*/
|
|
560
|
+
showReasoning?: AiChatAssistantMessageProps["showReasoning"];
|
|
561
|
+
/**
|
|
562
|
+
* How to show or hide retrievals.
|
|
563
|
+
*/
|
|
564
|
+
showRetrievals?: AiChatAssistantMessageProps["showRetrievals"];
|
|
565
|
+
/**
|
|
566
|
+
* Whether to show sources
|
|
567
|
+
*/
|
|
568
|
+
showSources?: AiChatAssistantMessageProps["showSources"];
|
|
523
569
|
/**
|
|
524
570
|
* The time, in milliseconds, before an AI response will timeout.
|
|
525
571
|
*/
|
|
@@ -1449,6 +1495,8 @@ declare function EmojiIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.
|
|
|
1449
1495
|
|
|
1450
1496
|
declare function EmojiPlusIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
1451
1497
|
|
|
1498
|
+
declare function GlobeIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
1499
|
+
|
|
1452
1500
|
declare function H1Icon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
1453
1501
|
|
|
1454
1502
|
declare function H2Icon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
@@ -1523,6 +1571,7 @@ declare namespace icon {
|
|
|
1523
1571
|
EllipsisIcon as Ellipsis,
|
|
1524
1572
|
EmojiIcon as Emoji,
|
|
1525
1573
|
EmojiPlusIcon as EmojiPlus,
|
|
1574
|
+
GlobeIcon as Globe,
|
|
1526
1575
|
H1Icon as H1,
|
|
1527
1576
|
H2Icon as H2,
|
|
1528
1577
|
H3Icon as H3,
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { ComponentType, ComponentPropsWithoutRef, ElementType, ReactNode,
|
|
3
|
-
import { CommentAttachment, AiReasoningPart, AiRetrievalPart, Relax, CopilotId, AiKnowledgeSource, AiOpaqueToolDefinition, AiToolTypePack, JsonObject, AiToolExecuteCallback, NoInfr, CommentBody, MentionData, BaseMetadata, DM, CommentData, HistoryVersion, InboxNotificationData, InboxNotificationThreadData, InboxNotificationTextMentionData, InboxNotificationCustomData, KDAD, ThreadData } from '@liveblocks/core';
|
|
2
|
+
import { ComponentType, ComponentPropsWithoutRef, ElementType, ReactNode, ComponentProps, FormEvent, RefAttributes, MouseEvent, PropsWithChildren } from 'react';
|
|
3
|
+
import { CommentAttachment, AiReasoningPart, AiRetrievalPart, Relax, WithNavigation, AiAssistantMessage, CopilotId, AiKnowledgeSource, AiOpaqueToolDefinition, AiToolTypePack, JsonObject, AiToolExecuteCallback, NoInfr, CommentBody, MentionData, BaseMetadata, DM, CommentData, HistoryVersion, InboxNotificationData, InboxNotificationThreadData, InboxNotificationTextMentionData, InboxNotificationCustomData, KDAD, ThreadData } from '@liveblocks/core';
|
|
4
4
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
5
5
|
|
|
6
6
|
interface GlobalComponents {
|
|
@@ -385,6 +385,40 @@ interface MarkdownComponentsCodeBlockProps {
|
|
|
385
385
|
language?: string;
|
|
386
386
|
}
|
|
387
387
|
|
|
388
|
+
type UiAssistantMessage = WithNavigation<AiAssistantMessage>;
|
|
389
|
+
type AiChatAssistantMessageComponents = {
|
|
390
|
+
/**
|
|
391
|
+
* The components used to render Markdown content.
|
|
392
|
+
*/
|
|
393
|
+
markdown?: Partial<MarkdownComponents>;
|
|
394
|
+
};
|
|
395
|
+
interface AiChatAssistantMessageProps extends ComponentProps<"div"> {
|
|
396
|
+
/**
|
|
397
|
+
* The message to display.
|
|
398
|
+
*/
|
|
399
|
+
message: UiAssistantMessage;
|
|
400
|
+
/**
|
|
401
|
+
* How to show or hide reasoning.
|
|
402
|
+
*/
|
|
403
|
+
showReasoning?: boolean | "during";
|
|
404
|
+
/**
|
|
405
|
+
* How to show or hide retrievals.
|
|
406
|
+
*/
|
|
407
|
+
showRetrievals?: boolean | "during" | Record<AiRetrievalPart["kind"], boolean | "during">;
|
|
408
|
+
/**
|
|
409
|
+
* Whether to show sources.
|
|
410
|
+
*/
|
|
411
|
+
showSources?: boolean;
|
|
412
|
+
/**
|
|
413
|
+
* Override the component's strings.
|
|
414
|
+
*/
|
|
415
|
+
overrides?: Partial<GlobalOverrides & AiChatMessageOverrides>;
|
|
416
|
+
/**
|
|
417
|
+
* Override the component's components.
|
|
418
|
+
*/
|
|
419
|
+
components?: Partial<GlobalComponents & AiChatAssistantMessageComponents>;
|
|
420
|
+
}
|
|
421
|
+
|
|
388
422
|
interface AiComposerSubmitMessage {
|
|
389
423
|
/**
|
|
390
424
|
* The submitted message text.
|
|
@@ -520,6 +554,18 @@ interface AiChatProps extends ComponentProps<"div"> {
|
|
|
520
554
|
* The layout of the chat and its composer.
|
|
521
555
|
*/
|
|
522
556
|
layout?: "inset" | "compact";
|
|
557
|
+
/**
|
|
558
|
+
* How to show or hide reasoning.
|
|
559
|
+
*/
|
|
560
|
+
showReasoning?: AiChatAssistantMessageProps["showReasoning"];
|
|
561
|
+
/**
|
|
562
|
+
* How to show or hide retrievals.
|
|
563
|
+
*/
|
|
564
|
+
showRetrievals?: AiChatAssistantMessageProps["showRetrievals"];
|
|
565
|
+
/**
|
|
566
|
+
* Whether to show sources
|
|
567
|
+
*/
|
|
568
|
+
showSources?: AiChatAssistantMessageProps["showSources"];
|
|
523
569
|
/**
|
|
524
570
|
* The time, in milliseconds, before an AI response will timeout.
|
|
525
571
|
*/
|
|
@@ -1449,6 +1495,8 @@ declare function EmojiIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.
|
|
|
1449
1495
|
|
|
1450
1496
|
declare function EmojiPlusIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
1451
1497
|
|
|
1498
|
+
declare function GlobeIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
1499
|
+
|
|
1452
1500
|
declare function H1Icon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
1453
1501
|
|
|
1454
1502
|
declare function H2Icon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
@@ -1523,6 +1571,7 @@ declare namespace icon {
|
|
|
1523
1571
|
EllipsisIcon as Ellipsis,
|
|
1524
1572
|
EmojiIcon as Emoji,
|
|
1525
1573
|
EmojiPlusIcon as EmojiPlus,
|
|
1574
|
+
GlobeIcon as Globe,
|
|
1526
1575
|
H1Icon as H1,
|
|
1527
1576
|
H2Icon as H2,
|
|
1528
1577
|
H3Icon as H3,
|
package/dist/overrides.cjs
CHANGED
|
@@ -151,38 +151,89 @@ const defaultOverrides = {
|
|
|
151
151
|
}) : null
|
|
152
152
|
]
|
|
153
153
|
}),
|
|
154
|
-
AI_CHAT_MESSAGE_RETRIEVAL: (isStreaming, part) =>
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
" ",
|
|
158
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", {
|
|
159
|
-
className: "lb-ai-chat-message-retrieval-query",
|
|
160
|
-
children: part.query
|
|
161
|
-
}),
|
|
162
|
-
"\u2026"
|
|
163
|
-
]
|
|
164
|
-
}) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
165
|
-
children: [
|
|
166
|
-
"Searched",
|
|
167
|
-
" ",
|
|
168
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", {
|
|
169
|
-
className: "lb-ai-chat-message-retrieval-query",
|
|
170
|
-
children: part.query
|
|
171
|
-
}),
|
|
172
|
-
isDurationVisible(part.startedAt, part.endedAt) ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
154
|
+
AI_CHAT_MESSAGE_RETRIEVAL: (isStreaming, part) => {
|
|
155
|
+
if (part.kind === "knowledge") {
|
|
156
|
+
return isStreaming ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
173
157
|
children: [
|
|
158
|
+
"Searching",
|
|
174
159
|
" ",
|
|
175
|
-
"
|
|
160
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", {
|
|
161
|
+
className: "lb-ai-chat-message-retrieval-query",
|
|
162
|
+
children: part.query
|
|
163
|
+
}),
|
|
164
|
+
"\u2026"
|
|
165
|
+
]
|
|
166
|
+
}) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
167
|
+
children: [
|
|
168
|
+
"Searched",
|
|
176
169
|
" ",
|
|
177
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
178
|
-
className: "lb-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
170
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", {
|
|
171
|
+
className: "lb-ai-chat-message-retrieval-query",
|
|
172
|
+
children: part.query
|
|
173
|
+
}),
|
|
174
|
+
isDurationVisible(part.startedAt, part.endedAt) ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
175
|
+
children: [
|
|
176
|
+
" ",
|
|
177
|
+
"for",
|
|
178
|
+
" ",
|
|
179
|
+
/* @__PURE__ */ jsxRuntime.jsx(Duration.Duration, {
|
|
180
|
+
className: "lb-duration lb-ai-chat-message-retrieval-duration",
|
|
181
|
+
from: part.startedAt,
|
|
182
|
+
to: part.endedAt
|
|
183
|
+
})
|
|
184
|
+
]
|
|
185
|
+
}) : null
|
|
182
186
|
]
|
|
183
|
-
})
|
|
184
|
-
|
|
185
|
-
|
|
187
|
+
});
|
|
188
|
+
} else if (part.kind === "web") {
|
|
189
|
+
return isStreaming ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
190
|
+
children: [
|
|
191
|
+
"Searching the web",
|
|
192
|
+
part.query ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
193
|
+
children: [
|
|
194
|
+
" ",
|
|
195
|
+
"for",
|
|
196
|
+
" ",
|
|
197
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", {
|
|
198
|
+
className: "lb-ai-chat-message-retrieval-query",
|
|
199
|
+
children: part.query
|
|
200
|
+
})
|
|
201
|
+
]
|
|
202
|
+
}) : null,
|
|
203
|
+
"\u2026"
|
|
204
|
+
]
|
|
205
|
+
}) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
206
|
+
children: [
|
|
207
|
+
"Searched the web",
|
|
208
|
+
part.query ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
209
|
+
children: [
|
|
210
|
+
" ",
|
|
211
|
+
"for",
|
|
212
|
+
" ",
|
|
213
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", {
|
|
214
|
+
className: "lb-ai-chat-message-retrieval-query",
|
|
215
|
+
children: part.query
|
|
216
|
+
})
|
|
217
|
+
]
|
|
218
|
+
}) : null,
|
|
219
|
+
isDurationVisible(part.startedAt, part.endedAt) ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
220
|
+
children: [
|
|
221
|
+
" ",
|
|
222
|
+
"for",
|
|
223
|
+
" ",
|
|
224
|
+
/* @__PURE__ */ jsxRuntime.jsx(Duration.Duration, {
|
|
225
|
+
className: "lb-duration lb-ai-chat-message-retrieval-duration",
|
|
226
|
+
from: part.startedAt,
|
|
227
|
+
to: part.endedAt
|
|
228
|
+
})
|
|
229
|
+
]
|
|
230
|
+
}) : null
|
|
231
|
+
]
|
|
232
|
+
});
|
|
233
|
+
} else {
|
|
234
|
+
return core.assertNever(part, "Unexpected retrieval kind");
|
|
235
|
+
}
|
|
236
|
+
},
|
|
186
237
|
AI_CHAT_MESSAGES_ERROR: () => "There was an error while getting the messages.",
|
|
187
238
|
AI_TOOL_CONFIRMATION_CONFIRM: "Confirm",
|
|
188
239
|
AI_TOOL_CONFIRMATION_CANCEL: "Cancel"
|
package/dist/overrides.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overrides.cjs","sources":["../src/overrides.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n type AiReasoningPart,\n type AiRetrievalPart,\n assertNever,\n} from \"@liveblocks/core\";\nimport type { PropsWithChildren, ReactNode } from \"react\";\nimport { createContext, useContext, useMemo } from \"react\";\n\nimport { Emoji } from \"./components/internal/Emoji\";\nimport { Duration, getDuration } from \"./primitives/Duration\";\nimport type { ComposerBodyMark, Direction } from \"./types\";\nimport { pluralize } from \"./utils/pluralize\";\n\nconst MINIMUM_VISIBLE_DURATION = 3 * 1000;\n\n// TODO: Move overrides to single-argument-as-object with Liveblocks 4.0,\n// it didn't make the cut for 3.0 but we should do it next time.\n\nexport interface LocalizationOverrides {\n locale: string;\n dir: Direction;\n}\n\nexport interface GlobalOverrides {\n USER_SELF: string;\n USER_UNKNOWN: string;\n LIST_REMAINING: (count: number) => string;\n LIST_REMAINING_USERS: (count: number) => string;\n LIST_REMAINING_COMMENTS: (count: number) => string;\n EMOJI_PICKER_SEARCH_PLACEHOLDER: string;\n EMOJI_PICKER_EMPTY: ReactNode;\n EMOJI_PICKER_ERROR: (error: Error) => ReactNode;\n EMOJI_PICKER_CHANGE_SKIN_TONE: string;\n ATTACHMENT_TOO_LARGE: (maxSize?: string) => string;\n ATTACHMENT_ERROR: (error: Error) => string;\n COPY_TO_CLIPBOARD: string;\n}\n\nexport interface CommentOverrides {\n COMMENT_EDITED: ReactNode;\n COMMENT_DELETED: ReactNode;\n COMMENT_MORE: string;\n COMMENT_EDIT: string;\n COMMENT_EDIT_COMPOSER_PLACEHOLDER: string;\n COMMENT_EDIT_COMPOSER_CANCEL: string;\n COMMENT_EDIT_COMPOSER_SAVE: string;\n COMMENT_DELETE: string;\n COMMENT_DELETE_ATTACHMENT: string;\n COMMENT_ADD_REACTION: string;\n COMMENT_REACTION_LIST: (\n list: ReactNode,\n emoji: string,\n count: number\n ) => ReactNode;\n COMMENT_REACTION_DESCRIPTION: (emoji: string, count: number) => string;\n}\n\nexport interface ComposerOverrides {\n COMPOSER_INSERT_MENTION: string;\n COMPOSER_INSERT_EMOJI: string;\n COMPOSER_ATTACH_FILES: string;\n COMPOSER_REMOVE_ATTACHMENT: string;\n COMPOSER_PLACEHOLDER: string;\n COMPOSER_SEND: string;\n COMPOSER_TOGGLE_MARK: (mark: ComposerBodyMark) => string;\n}\n\nexport interface AiToolConfirmationOverrides {\n AI_TOOL_CONFIRMATION_CONFIRM: string;\n AI_TOOL_CONFIRMATION_CANCEL: string;\n}\n\nexport interface AiComposerOverrides {\n AI_COMPOSER_PLACEHOLDER: string;\n AI_COMPOSER_SEND: string;\n AI_COMPOSER_ABORT: string;\n}\n\nexport interface AiChatMessageOverrides {\n AI_CHAT_MESSAGE_DELETED: string;\n AI_CHAT_MESSAGE_THINKING: ReactNode;\n AI_CHAT_MESSAGE_REASONING: (\n isStreaming: boolean,\n part: AiReasoningPart\n ) => ReactNode;\n AI_CHAT_MESSAGE_RETRIEVAL: (\n isStreaming: boolean,\n part: AiRetrievalPart\n ) => ReactNode;\n}\n\nexport interface AiChatOverrides {\n AI_CHAT_MESSAGES_ERROR: (error: Error) => ReactNode;\n}\n\nexport interface ThreadOverrides {\n THREAD_RESOLVE: string;\n THREAD_UNRESOLVE: string;\n THREAD_SUBSCRIBE: string;\n THREAD_UNSUBSCRIBE: string;\n THREAD_NEW_INDICATOR: string;\n THREAD_NEW_INDICATOR_DESCRIPTION: string;\n THREAD_SHOW_MORE_COMMENTS: (count: number) => string;\n THREAD_COMPOSER_PLACEHOLDER: string;\n THREAD_COMPOSER_SEND: string;\n}\n\nexport interface InboxNotificationOverrides {\n INBOX_NOTIFICATION_MORE: string;\n INBOX_NOTIFICATION_MARK_AS_READ: string;\n INBOX_NOTIFICATION_DELETE: string;\n INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (\n list: ReactNode,\n room: ReactNode | undefined,\n count: number\n ) => ReactNode;\n INBOX_NOTIFICATION_THREAD_MENTION: (\n user: ReactNode,\n room: ReactNode | undefined\n ) => ReactNode;\n INBOX_NOTIFICATION_TEXT_MENTION: (\n user: ReactNode,\n room: ReactNode | undefined\n ) => ReactNode;\n}\n\nexport interface HistoryVersionPreviewOverrides {\n HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode) => ReactNode;\n HISTORY_VERSION_PREVIEW_RESTORE: string;\n HISTORY_VERSION_PREVIEW_EMPTY: ReactNode;\n HISTORY_VERSION_PREVIEW_ERROR: (error: Error) => ReactNode;\n}\n\nexport type Overrides = LocalizationOverrides &\n GlobalOverrides &\n ComposerOverrides &\n CommentOverrides &\n ThreadOverrides &\n InboxNotificationOverrides &\n HistoryVersionPreviewOverrides &\n AiComposerOverrides &\n AiChatMessageOverrides &\n AiChatOverrides &\n AiToolConfirmationOverrides;\n\ntype OverridesProviderProps = PropsWithChildren<{\n overrides?: Partial<Overrides>;\n}>;\n\nfunction isDurationVisible(\n from: Date | string | number,\n to: Date | string | number | undefined\n) {\n return getDuration(from, to ?? Date.now()) >= MINIMUM_VISIBLE_DURATION;\n}\n\nexport const defaultOverrides: Overrides = {\n locale: \"en\",\n dir: \"ltr\",\n USER_SELF: \"you\",\n USER_UNKNOWN: \"Anonymous\",\n COPY_TO_CLIPBOARD: \"Copy\",\n LIST_REMAINING: (count) => `${count} more`,\n LIST_REMAINING_USERS: (count) => `${count} ${pluralize(count, \"other\")}`,\n LIST_REMAINING_COMMENTS: (count) =>\n `${count} more ${pluralize(count, \"comment\")}`,\n EMOJI_PICKER_SEARCH_PLACEHOLDER: \"Search…\",\n EMOJI_PICKER_EMPTY: \"No emoji found.\",\n EMOJI_PICKER_ERROR: () =>\n \"There was an error while getting the list of emoji.\",\n EMOJI_PICKER_CHANGE_SKIN_TONE: \"Change skin tone\",\n ATTACHMENT_TOO_LARGE: (maxSize) =>\n maxSize ? `The file is larger than ${maxSize}` : \"The file is too large\",\n ATTACHMENT_ERROR: () => \"The file couldn’t be uploaded.\",\n COMPOSER_INSERT_MENTION: \"Mention someone\",\n COMPOSER_INSERT_EMOJI: \"Add emoji\",\n COMPOSER_ATTACH_FILES: \"Attach files\",\n COMPOSER_REMOVE_ATTACHMENT: \"Remove attachment\",\n COMPOSER_PLACEHOLDER: \"Write a comment…\",\n COMPOSER_SEND: \"Send\",\n COMPOSER_TOGGLE_MARK: (format) => {\n switch (format) {\n case \"bold\":\n return \"Bold\";\n case \"italic\":\n return \"Italic\";\n case \"strikethrough\":\n return \"Strikethrough\";\n case \"code\":\n return \"Inline code\";\n default:\n return assertNever(format, \"Unexpected mark\");\n }\n },\n COMMENT_EDITED: \"(edited)\",\n COMMENT_DELETED: \"This comment has been deleted.\",\n COMMENT_MORE: \"More\",\n COMMENT_EDIT: \"Edit comment\",\n COMMENT_EDIT_COMPOSER_PLACEHOLDER: \"Edit comment…\",\n COMMENT_EDIT_COMPOSER_CANCEL: \"Cancel\",\n COMMENT_EDIT_COMPOSER_SAVE: \"Save\",\n COMMENT_DELETE: \"Delete comment\",\n COMMENT_DELETE_ATTACHMENT: \"Delete attachment\",\n COMMENT_ADD_REACTION: \"Add reaction\",\n COMMENT_REACTION_LIST: (list, emoji) => (\n <>\n {list} reacted with <Emoji emoji={emoji} />\n </>\n ),\n COMMENT_REACTION_DESCRIPTION: (emoji, count) =>\n `${count} ${pluralize(count, \"reaction\")}, react with ${emoji}`,\n THREAD_RESOLVE: \"Resolve thread\",\n THREAD_UNRESOLVE: \"Re-open thread\",\n THREAD_SUBSCRIBE: \"Subscribe to thread\",\n THREAD_UNSUBSCRIBE: \"Unsubscribe from thread\",\n THREAD_NEW_INDICATOR: \"New\",\n THREAD_NEW_INDICATOR_DESCRIPTION: \"New comments\",\n THREAD_SHOW_MORE_COMMENTS: (count) =>\n `Show ${count} more ${pluralize(count, \"reply\", \"replies\")}`,\n THREAD_COMPOSER_PLACEHOLDER: \"Reply to thread…\",\n THREAD_COMPOSER_SEND: \"Reply\",\n INBOX_NOTIFICATION_MORE: \"More\",\n INBOX_NOTIFICATION_MARK_AS_READ: \"Mark as read\",\n INBOX_NOTIFICATION_DELETE: \"Delete notification\",\n INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (\n list: ReactNode,\n room: ReactNode\n ) => (\n <>\n {list} commented\n {room ? <> in {room}</> : <> in a thread</>}\n </>\n ),\n INBOX_NOTIFICATION_THREAD_MENTION: (user: ReactNode, room: ReactNode) => (\n <>\n {user} mentioned you{room ? <> in {room}</> : null}\n </>\n ),\n INBOX_NOTIFICATION_TEXT_MENTION: (user: ReactNode, room: ReactNode) => (\n <>\n {user} mentioned you{room ? <> in {room}</> : null}\n </>\n ),\n HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode) => (\n <>Edits from {list}</>\n ),\n HISTORY_VERSION_PREVIEW_RESTORE: \"Restore\",\n HISTORY_VERSION_PREVIEW_EMPTY: \"No content.\",\n HISTORY_VERSION_PREVIEW_ERROR: () =>\n \"There was an error while getting this version.\",\n AI_COMPOSER_PLACEHOLDER: \"Ask anything…\",\n AI_COMPOSER_SEND: \"Send\",\n AI_COMPOSER_ABORT: \"Abort response\",\n AI_CHAT_MESSAGE_DELETED: \"This message has been deleted.\",\n AI_CHAT_MESSAGE_THINKING: \"Thinking…\",\n AI_CHAT_MESSAGE_REASONING: (isStreaming: boolean, part: AiReasoningPart) =>\n isStreaming ? (\n <>Reasoning…</>\n ) : (\n <>\n Reasoned\n {isDurationVisible(part.startedAt, part.endedAt) ? (\n <>\n {\" \"}\n for{\" \"}\n <Duration\n className=\"lb-duration lb-ai-chat-message-reasoning-duration\"\n from={part.startedAt}\n to={part.endedAt}\n />\n </>\n ) : null}\n </>\n ),\n AI_CHAT_MESSAGE_RETRIEVAL: (isStreaming: boolean, part: AiRetrievalPart) =>\n isStreaming ? (\n <>\n Searching{\" \"}\n <span className=\"lb-ai-chat-message-retrieval-query\">{part.query}</span>\n …\n </>\n ) : (\n <>\n Searched{\" \"}\n <span className=\"lb-ai-chat-message-retrieval-query\">{part.query}</span>\n {isDurationVisible(part.startedAt, part.endedAt) ? (\n <>\n {\" \"}\n for{\" \"}\n <Duration\n className=\"lb-duration lb-ai-chat-message-retrieval-duration\"\n from={part.startedAt}\n to={part.endedAt}\n />\n </>\n ) : null}\n </>\n ),\n AI_CHAT_MESSAGES_ERROR: () =>\n \"There was an error while getting the messages.\",\n AI_TOOL_CONFIRMATION_CONFIRM: \"Confirm\",\n AI_TOOL_CONFIRMATION_CANCEL: \"Cancel\",\n};\n\nexport const OverridesContext = createContext<Overrides | undefined>(undefined);\n\nexport function useOverrides(overrides?: Partial<Overrides>): Overrides {\n const contextOverrides = useContext(OverridesContext);\n\n return useMemo(\n () => ({\n ...defaultOverrides,\n ...contextOverrides,\n ...overrides,\n }),\n [contextOverrides, overrides]\n );\n}\n\nexport function OverridesProvider({\n children,\n overrides: providerOverrides,\n}: OverridesProviderProps) {\n const contextOverrides = useContext(OverridesContext);\n const overrides = useMemo(\n () => ({\n ...defaultOverrides,\n ...contextOverrides,\n ...providerOverrides,\n }),\n [contextOverrides, providerOverrides]\n );\n\n return (\n <OverridesContext.Provider value={overrides}>\n {children}\n </OverridesContext.Provider>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAeA;AAwIA;AAIE;AACF;AAEO;AAAoC;AACjC;AACH;AACM;AACG;AACK;AACW;AACuC;AAExB;AACZ;AACb;AAElB;AAC6B;AAEoB;AAC3B;AACC;AACF;AACA;AACK;AACN;AACP;AAEb;AAAgB;AAEZ;AAAO;AAEP;AAAO;AAEP;AAAO;AAEP;AAAO;AAEP;AAA4C;AAChD;AACF;AACgB;AACC;AACH;AACA;AACqB;AACL;AACF;AACZ;AACW;AACL;AAEpB;AACG;AAAA;AAAK;AAAe;AAAM;AAAc;AAAA;AAC3C;AAGwD;AAC1C;AACE;AACA;AACE;AACE;AACY;AAEyB;AAC9B;AACP;AACG;AACQ;AACN;AAKzB;AACG;AAAA;AAAK;AACE;AAAE;AAAA;AAAK;AAAA;AAAW;AAAE;AAAY;AAAA;AAC1C;AAGA;AACG;AAAA;AAAK;AAAsB;AAAE;AAAA;AAAK;AAAA;AAAW;AAAA;AAChD;AAGA;AACG;AAAA;AAAK;AAAsB;AAAE;AAAA;AAAK;AAAA;AAAW;AAAA;AAChD;AAGA;AAAE;AAAA;AAAY;AAAA;AAAK;AAEY;AACF;AAE7B;AACuB;AACP;AACC;AACM;AACC;AAGtB;AAAE;AAEF;AAAE;AAAA;AAGE;AACG;AAAA;AAAI;AACD;AACH;AACW;AACC;AACF;AACX;AAAA;AAEA;AAAA;AACN;AAIA;AAAE;AAAA;AACU;AACT;AAAe;AAA2C;AAAM;AAAO;AAAA;AAI1E;AAAE;AAAA;AACS;AACR;AAAe;AAA2C;AAAM;AAE/D;AACG;AAAA;AAAI;AACD;AACH;AACW;AACC;AACF;AACX;AAAA;AAEA;AAAA;AACN;AAGF;AAC4B;AAEhC;AAEa;AAEN;AACL;AAEA;AAAO;AACE;AACF;AACA;AACA;AACL;AAC4B;AAEhC;AAEO;AAA2B;AAChC;AAEF;AACE;AACA;AAAkB;AACT;AACF;AACA;AACA;AACL;AACoC;AAGtC;AACG;AAAiC;AAC/B;AAGP;;;;;"}
|
|
1
|
+
{"version":3,"file":"overrides.cjs","sources":["../src/overrides.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n type AiReasoningPart,\n type AiRetrievalPart,\n assertNever,\n} from \"@liveblocks/core\";\nimport type { PropsWithChildren, ReactNode } from \"react\";\nimport { createContext, useContext, useMemo } from \"react\";\n\nimport { Emoji } from \"./components/internal/Emoji\";\nimport { Duration, getDuration } from \"./primitives/Duration\";\nimport type { ComposerBodyMark, Direction } from \"./types\";\nimport { pluralize } from \"./utils/pluralize\";\n\nconst MINIMUM_VISIBLE_DURATION = 3 * 1000;\n\n// TODO: Move overrides to single-argument-as-object with Liveblocks 4.0,\n// it didn't make the cut for 3.0 but we should do it next time.\n\nexport interface LocalizationOverrides {\n locale: string;\n dir: Direction;\n}\n\nexport interface GlobalOverrides {\n USER_SELF: string;\n USER_UNKNOWN: string;\n LIST_REMAINING: (count: number) => string;\n LIST_REMAINING_USERS: (count: number) => string;\n LIST_REMAINING_COMMENTS: (count: number) => string;\n EMOJI_PICKER_SEARCH_PLACEHOLDER: string;\n EMOJI_PICKER_EMPTY: ReactNode;\n EMOJI_PICKER_ERROR: (error: Error) => ReactNode;\n EMOJI_PICKER_CHANGE_SKIN_TONE: string;\n ATTACHMENT_TOO_LARGE: (maxSize?: string) => string;\n ATTACHMENT_ERROR: (error: Error) => string;\n COPY_TO_CLIPBOARD: string;\n}\n\nexport interface CommentOverrides {\n COMMENT_EDITED: ReactNode;\n COMMENT_DELETED: ReactNode;\n COMMENT_MORE: string;\n COMMENT_EDIT: string;\n COMMENT_EDIT_COMPOSER_PLACEHOLDER: string;\n COMMENT_EDIT_COMPOSER_CANCEL: string;\n COMMENT_EDIT_COMPOSER_SAVE: string;\n COMMENT_DELETE: string;\n COMMENT_DELETE_ATTACHMENT: string;\n COMMENT_ADD_REACTION: string;\n COMMENT_REACTION_LIST: (\n list: ReactNode,\n emoji: string,\n count: number\n ) => ReactNode;\n COMMENT_REACTION_DESCRIPTION: (emoji: string, count: number) => string;\n}\n\nexport interface ComposerOverrides {\n COMPOSER_INSERT_MENTION: string;\n COMPOSER_INSERT_EMOJI: string;\n COMPOSER_ATTACH_FILES: string;\n COMPOSER_REMOVE_ATTACHMENT: string;\n COMPOSER_PLACEHOLDER: string;\n COMPOSER_SEND: string;\n COMPOSER_TOGGLE_MARK: (mark: ComposerBodyMark) => string;\n}\n\nexport interface AiToolConfirmationOverrides {\n AI_TOOL_CONFIRMATION_CONFIRM: string;\n AI_TOOL_CONFIRMATION_CANCEL: string;\n}\n\nexport interface AiComposerOverrides {\n AI_COMPOSER_PLACEHOLDER: string;\n AI_COMPOSER_SEND: string;\n AI_COMPOSER_ABORT: string;\n}\n\nexport interface AiChatMessageOverrides {\n AI_CHAT_MESSAGE_DELETED: string;\n AI_CHAT_MESSAGE_THINKING: ReactNode;\n AI_CHAT_MESSAGE_REASONING: (\n isStreaming: boolean,\n part: AiReasoningPart\n ) => ReactNode;\n AI_CHAT_MESSAGE_RETRIEVAL: (\n isStreaming: boolean,\n part: AiRetrievalPart\n ) => ReactNode;\n}\n\nexport interface AiChatOverrides {\n AI_CHAT_MESSAGES_ERROR: (error: Error) => ReactNode;\n}\n\nexport interface ThreadOverrides {\n THREAD_RESOLVE: string;\n THREAD_UNRESOLVE: string;\n THREAD_SUBSCRIBE: string;\n THREAD_UNSUBSCRIBE: string;\n THREAD_NEW_INDICATOR: string;\n THREAD_NEW_INDICATOR_DESCRIPTION: string;\n THREAD_SHOW_MORE_COMMENTS: (count: number) => string;\n THREAD_COMPOSER_PLACEHOLDER: string;\n THREAD_COMPOSER_SEND: string;\n}\n\nexport interface InboxNotificationOverrides {\n INBOX_NOTIFICATION_MORE: string;\n INBOX_NOTIFICATION_MARK_AS_READ: string;\n INBOX_NOTIFICATION_DELETE: string;\n INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (\n list: ReactNode,\n room: ReactNode | undefined,\n count: number\n ) => ReactNode;\n INBOX_NOTIFICATION_THREAD_MENTION: (\n user: ReactNode,\n room: ReactNode | undefined\n ) => ReactNode;\n INBOX_NOTIFICATION_TEXT_MENTION: (\n user: ReactNode,\n room: ReactNode | undefined\n ) => ReactNode;\n}\n\nexport interface HistoryVersionPreviewOverrides {\n HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode) => ReactNode;\n HISTORY_VERSION_PREVIEW_RESTORE: string;\n HISTORY_VERSION_PREVIEW_EMPTY: ReactNode;\n HISTORY_VERSION_PREVIEW_ERROR: (error: Error) => ReactNode;\n}\n\nexport type Overrides = LocalizationOverrides &\n GlobalOverrides &\n ComposerOverrides &\n CommentOverrides &\n ThreadOverrides &\n InboxNotificationOverrides &\n HistoryVersionPreviewOverrides &\n AiComposerOverrides &\n AiChatMessageOverrides &\n AiChatOverrides &\n AiToolConfirmationOverrides;\n\ntype OverridesProviderProps = PropsWithChildren<{\n overrides?: Partial<Overrides>;\n}>;\n\nfunction isDurationVisible(\n from: Date | string | number,\n to: Date | string | number | undefined\n) {\n return getDuration(from, to ?? Date.now()) >= MINIMUM_VISIBLE_DURATION;\n}\n\nexport const defaultOverrides: Overrides = {\n locale: \"en\",\n dir: \"ltr\",\n USER_SELF: \"you\",\n USER_UNKNOWN: \"Anonymous\",\n COPY_TO_CLIPBOARD: \"Copy\",\n LIST_REMAINING: (count) => `${count} more`,\n LIST_REMAINING_USERS: (count) => `${count} ${pluralize(count, \"other\")}`,\n LIST_REMAINING_COMMENTS: (count) =>\n `${count} more ${pluralize(count, \"comment\")}`,\n EMOJI_PICKER_SEARCH_PLACEHOLDER: \"Search…\",\n EMOJI_PICKER_EMPTY: \"No emoji found.\",\n EMOJI_PICKER_ERROR: () =>\n \"There was an error while getting the list of emoji.\",\n EMOJI_PICKER_CHANGE_SKIN_TONE: \"Change skin tone\",\n ATTACHMENT_TOO_LARGE: (maxSize) =>\n maxSize ? `The file is larger than ${maxSize}` : \"The file is too large\",\n ATTACHMENT_ERROR: () => \"The file couldn’t be uploaded.\",\n COMPOSER_INSERT_MENTION: \"Mention someone\",\n COMPOSER_INSERT_EMOJI: \"Add emoji\",\n COMPOSER_ATTACH_FILES: \"Attach files\",\n COMPOSER_REMOVE_ATTACHMENT: \"Remove attachment\",\n COMPOSER_PLACEHOLDER: \"Write a comment…\",\n COMPOSER_SEND: \"Send\",\n COMPOSER_TOGGLE_MARK: (format) => {\n switch (format) {\n case \"bold\":\n return \"Bold\";\n case \"italic\":\n return \"Italic\";\n case \"strikethrough\":\n return \"Strikethrough\";\n case \"code\":\n return \"Inline code\";\n default:\n return assertNever(format, \"Unexpected mark\");\n }\n },\n COMMENT_EDITED: \"(edited)\",\n COMMENT_DELETED: \"This comment has been deleted.\",\n COMMENT_MORE: \"More\",\n COMMENT_EDIT: \"Edit comment\",\n COMMENT_EDIT_COMPOSER_PLACEHOLDER: \"Edit comment…\",\n COMMENT_EDIT_COMPOSER_CANCEL: \"Cancel\",\n COMMENT_EDIT_COMPOSER_SAVE: \"Save\",\n COMMENT_DELETE: \"Delete comment\",\n COMMENT_DELETE_ATTACHMENT: \"Delete attachment\",\n COMMENT_ADD_REACTION: \"Add reaction\",\n COMMENT_REACTION_LIST: (list, emoji) => (\n <>\n {list} reacted with <Emoji emoji={emoji} />\n </>\n ),\n COMMENT_REACTION_DESCRIPTION: (emoji, count) =>\n `${count} ${pluralize(count, \"reaction\")}, react with ${emoji}`,\n THREAD_RESOLVE: \"Resolve thread\",\n THREAD_UNRESOLVE: \"Re-open thread\",\n THREAD_SUBSCRIBE: \"Subscribe to thread\",\n THREAD_UNSUBSCRIBE: \"Unsubscribe from thread\",\n THREAD_NEW_INDICATOR: \"New\",\n THREAD_NEW_INDICATOR_DESCRIPTION: \"New comments\",\n THREAD_SHOW_MORE_COMMENTS: (count) =>\n `Show ${count} more ${pluralize(count, \"reply\", \"replies\")}`,\n THREAD_COMPOSER_PLACEHOLDER: \"Reply to thread…\",\n THREAD_COMPOSER_SEND: \"Reply\",\n INBOX_NOTIFICATION_MORE: \"More\",\n INBOX_NOTIFICATION_MARK_AS_READ: \"Mark as read\",\n INBOX_NOTIFICATION_DELETE: \"Delete notification\",\n INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (\n list: ReactNode,\n room: ReactNode\n ) => (\n <>\n {list} commented\n {room ? <> in {room}</> : <> in a thread</>}\n </>\n ),\n INBOX_NOTIFICATION_THREAD_MENTION: (user: ReactNode, room: ReactNode) => (\n <>\n {user} mentioned you{room ? <> in {room}</> : null}\n </>\n ),\n INBOX_NOTIFICATION_TEXT_MENTION: (user: ReactNode, room: ReactNode) => (\n <>\n {user} mentioned you{room ? <> in {room}</> : null}\n </>\n ),\n HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode) => (\n <>Edits from {list}</>\n ),\n HISTORY_VERSION_PREVIEW_RESTORE: \"Restore\",\n HISTORY_VERSION_PREVIEW_EMPTY: \"No content.\",\n HISTORY_VERSION_PREVIEW_ERROR: () =>\n \"There was an error while getting this version.\",\n AI_COMPOSER_PLACEHOLDER: \"Ask anything…\",\n AI_COMPOSER_SEND: \"Send\",\n AI_COMPOSER_ABORT: \"Abort response\",\n AI_CHAT_MESSAGE_DELETED: \"This message has been deleted.\",\n AI_CHAT_MESSAGE_THINKING: \"Thinking…\",\n AI_CHAT_MESSAGE_REASONING: (isStreaming: boolean, part: AiReasoningPart) =>\n isStreaming ? (\n <>Reasoning…</>\n ) : (\n <>\n Reasoned\n {isDurationVisible(part.startedAt, part.endedAt) ? (\n <>\n {\" \"}\n for{\" \"}\n <Duration\n className=\"lb-duration lb-ai-chat-message-reasoning-duration\"\n from={part.startedAt}\n to={part.endedAt}\n />\n </>\n ) : null}\n </>\n ),\n AI_CHAT_MESSAGE_RETRIEVAL: (isStreaming: boolean, part: AiRetrievalPart) => {\n if (part.kind === \"knowledge\") {\n return isStreaming ? (\n <>\n Searching{\" \"}\n <span className=\"lb-ai-chat-message-retrieval-query\">\n {part.query}\n </span>\n …\n </>\n ) : (\n <>\n Searched{\" \"}\n <span className=\"lb-ai-chat-message-retrieval-query\">\n {part.query}\n </span>\n {isDurationVisible(part.startedAt, part.endedAt) ? (\n <>\n {\" \"}\n for{\" \"}\n <Duration\n className=\"lb-duration lb-ai-chat-message-retrieval-duration\"\n from={part.startedAt}\n to={part.endedAt}\n />\n </>\n ) : null}\n </>\n );\n } else if (part.kind === \"web\") {\n return isStreaming ? (\n <>\n Searching the web\n {part.query ? (\n <>\n {\" \"}\n for{\" \"}\n <span className=\"lb-ai-chat-message-retrieval-query\">\n {part.query}\n </span>\n </>\n ) : null}\n …\n </>\n ) : (\n <>\n Searched the web\n {part.query ? (\n <>\n {\" \"}\n for{\" \"}\n <span className=\"lb-ai-chat-message-retrieval-query\">\n {part.query}\n </span>\n </>\n ) : null}\n {isDurationVisible(part.startedAt, part.endedAt) ? (\n <>\n {\" \"}\n for{\" \"}\n <Duration\n className=\"lb-duration lb-ai-chat-message-retrieval-duration\"\n from={part.startedAt}\n to={part.endedAt}\n />\n </>\n ) : null}\n </>\n );\n } else {\n return assertNever(part, \"Unexpected retrieval kind\");\n }\n },\n AI_CHAT_MESSAGES_ERROR: () =>\n \"There was an error while getting the messages.\",\n AI_TOOL_CONFIRMATION_CONFIRM: \"Confirm\",\n AI_TOOL_CONFIRMATION_CANCEL: \"Cancel\",\n};\n\nexport const OverridesContext = createContext<Overrides | undefined>(undefined);\n\nexport function useOverrides(overrides?: Partial<Overrides>): Overrides {\n const contextOverrides = useContext(OverridesContext);\n\n return useMemo(\n () => ({\n ...defaultOverrides,\n ...contextOverrides,\n ...overrides,\n }),\n [contextOverrides, overrides]\n );\n}\n\nexport function OverridesProvider({\n children,\n overrides: providerOverrides,\n}: OverridesProviderProps) {\n const contextOverrides = useContext(OverridesContext);\n const overrides = useMemo(\n () => ({\n ...defaultOverrides,\n ...contextOverrides,\n ...providerOverrides,\n }),\n [contextOverrides, providerOverrides]\n );\n\n return (\n <OverridesContext.Provider value={overrides}>\n {children}\n </OverridesContext.Provider>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAeA;AAwIA;AAIE;AACF;AAEO;AAAoC;AACjC;AACH;AACM;AACG;AACK;AACW;AACuC;AAExB;AACZ;AACb;AAElB;AAC6B;AAEoB;AAC3B;AACC;AACF;AACA;AACK;AACN;AACP;AAEb;AAAgB;AAEZ;AAAO;AAEP;AAAO;AAEP;AAAO;AAEP;AAAO;AAEP;AAA4C;AAChD;AACF;AACgB;AACC;AACH;AACA;AACqB;AACL;AACF;AACZ;AACW;AACL;AAEpB;AACG;AAAA;AAAK;AAAe;AAAM;AAAc;AAAA;AAC3C;AAGwD;AAC1C;AACE;AACA;AACE;AACE;AACY;AAEyB;AAC9B;AACP;AACG;AACQ;AACN;AAKzB;AACG;AAAA;AAAK;AACE;AAAE;AAAA;AAAK;AAAA;AAAW;AAAE;AAAY;AAAA;AAC1C;AAGA;AACG;AAAA;AAAK;AAAsB;AAAE;AAAA;AAAK;AAAA;AAAW;AAAA;AAChD;AAGA;AACG;AAAA;AAAK;AAAsB;AAAE;AAAA;AAAK;AAAA;AAAW;AAAA;AAChD;AAGA;AAAE;AAAA;AAAY;AAAA;AAAK;AAEY;AACF;AAE7B;AACuB;AACP;AACC;AACM;AACC;AAGtB;AAAE;AAEF;AAAE;AAAA;AAGE;AACG;AAAA;AAAI;AACD;AACH;AACW;AACC;AACF;AACX;AAAA;AAEA;AAAA;AACN;AAGF;AACE;AACE;AAAE;AAAA;AACU;AACT;AAAe;AACR;AACR;AAAO;AAAA;AAIT;AAAE;AAAA;AACS;AACR;AAAe;AACR;AACR;AAEE;AACG;AAAA;AAAI;AACD;AACH;AACW;AACC;AACF;AACX;AAAA;AAEA;AAAA;AACN;AAGF;AACE;AAAE;AAAA;AAGE;AACG;AAAA;AAAI;AACD;AACH;AAAe;AACR;AACR;AAAA;AAEA;AAAK;AAAA;AAIX;AAAE;AAAA;AAGE;AACG;AAAA;AAAI;AACD;AACH;AAAe;AACR;AACR;AAAA;AAEA;AAEF;AACG;AAAA;AAAI;AACD;AACH;AACW;AACC;AACF;AACX;AAAA;AAEA;AAAA;AACN;AAGF;AAAoD;AACtD;AACF;AAEE;AAC4B;AAEhC;AAEa;AAEN;AACL;AAEA;AAAO;AACE;AACF;AACA;AACA;AACL;AAC4B;AAEhC;AAEO;AAA2B;AAChC;AAEF;AACE;AACA;AAAkB;AACT;AACF;AACA;AACA;AACL;AACoC;AAGtC;AACG;AAAiC;AAC/B;AAGP;;;;;"}
|
package/dist/overrides.js
CHANGED
|
@@ -149,38 +149,89 @@ const defaultOverrides = {
|
|
|
149
149
|
}) : null
|
|
150
150
|
]
|
|
151
151
|
}),
|
|
152
|
-
AI_CHAT_MESSAGE_RETRIEVAL: (isStreaming, part) =>
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
" ",
|
|
156
|
-
/* @__PURE__ */ jsx("span", {
|
|
157
|
-
className: "lb-ai-chat-message-retrieval-query",
|
|
158
|
-
children: part.query
|
|
159
|
-
}),
|
|
160
|
-
"\u2026"
|
|
161
|
-
]
|
|
162
|
-
}) : /* @__PURE__ */ jsxs(Fragment, {
|
|
163
|
-
children: [
|
|
164
|
-
"Searched",
|
|
165
|
-
" ",
|
|
166
|
-
/* @__PURE__ */ jsx("span", {
|
|
167
|
-
className: "lb-ai-chat-message-retrieval-query",
|
|
168
|
-
children: part.query
|
|
169
|
-
}),
|
|
170
|
-
isDurationVisible(part.startedAt, part.endedAt) ? /* @__PURE__ */ jsxs(Fragment, {
|
|
152
|
+
AI_CHAT_MESSAGE_RETRIEVAL: (isStreaming, part) => {
|
|
153
|
+
if (part.kind === "knowledge") {
|
|
154
|
+
return isStreaming ? /* @__PURE__ */ jsxs(Fragment, {
|
|
171
155
|
children: [
|
|
156
|
+
"Searching",
|
|
172
157
|
" ",
|
|
173
|
-
"
|
|
158
|
+
/* @__PURE__ */ jsx("span", {
|
|
159
|
+
className: "lb-ai-chat-message-retrieval-query",
|
|
160
|
+
children: part.query
|
|
161
|
+
}),
|
|
162
|
+
"\u2026"
|
|
163
|
+
]
|
|
164
|
+
}) : /* @__PURE__ */ jsxs(Fragment, {
|
|
165
|
+
children: [
|
|
166
|
+
"Searched",
|
|
174
167
|
" ",
|
|
175
|
-
/* @__PURE__ */ jsx(
|
|
176
|
-
className: "lb-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
168
|
+
/* @__PURE__ */ jsx("span", {
|
|
169
|
+
className: "lb-ai-chat-message-retrieval-query",
|
|
170
|
+
children: part.query
|
|
171
|
+
}),
|
|
172
|
+
isDurationVisible(part.startedAt, part.endedAt) ? /* @__PURE__ */ jsxs(Fragment, {
|
|
173
|
+
children: [
|
|
174
|
+
" ",
|
|
175
|
+
"for",
|
|
176
|
+
" ",
|
|
177
|
+
/* @__PURE__ */ jsx(Duration, {
|
|
178
|
+
className: "lb-duration lb-ai-chat-message-retrieval-duration",
|
|
179
|
+
from: part.startedAt,
|
|
180
|
+
to: part.endedAt
|
|
181
|
+
})
|
|
182
|
+
]
|
|
183
|
+
}) : null
|
|
180
184
|
]
|
|
181
|
-
})
|
|
182
|
-
|
|
183
|
-
|
|
185
|
+
});
|
|
186
|
+
} else if (part.kind === "web") {
|
|
187
|
+
return isStreaming ? /* @__PURE__ */ jsxs(Fragment, {
|
|
188
|
+
children: [
|
|
189
|
+
"Searching the web",
|
|
190
|
+
part.query ? /* @__PURE__ */ jsxs(Fragment, {
|
|
191
|
+
children: [
|
|
192
|
+
" ",
|
|
193
|
+
"for",
|
|
194
|
+
" ",
|
|
195
|
+
/* @__PURE__ */ jsx("span", {
|
|
196
|
+
className: "lb-ai-chat-message-retrieval-query",
|
|
197
|
+
children: part.query
|
|
198
|
+
})
|
|
199
|
+
]
|
|
200
|
+
}) : null,
|
|
201
|
+
"\u2026"
|
|
202
|
+
]
|
|
203
|
+
}) : /* @__PURE__ */ jsxs(Fragment, {
|
|
204
|
+
children: [
|
|
205
|
+
"Searched the web",
|
|
206
|
+
part.query ? /* @__PURE__ */ jsxs(Fragment, {
|
|
207
|
+
children: [
|
|
208
|
+
" ",
|
|
209
|
+
"for",
|
|
210
|
+
" ",
|
|
211
|
+
/* @__PURE__ */ jsx("span", {
|
|
212
|
+
className: "lb-ai-chat-message-retrieval-query",
|
|
213
|
+
children: part.query
|
|
214
|
+
})
|
|
215
|
+
]
|
|
216
|
+
}) : null,
|
|
217
|
+
isDurationVisible(part.startedAt, part.endedAt) ? /* @__PURE__ */ jsxs(Fragment, {
|
|
218
|
+
children: [
|
|
219
|
+
" ",
|
|
220
|
+
"for",
|
|
221
|
+
" ",
|
|
222
|
+
/* @__PURE__ */ jsx(Duration, {
|
|
223
|
+
className: "lb-duration lb-ai-chat-message-retrieval-duration",
|
|
224
|
+
from: part.startedAt,
|
|
225
|
+
to: part.endedAt
|
|
226
|
+
})
|
|
227
|
+
]
|
|
228
|
+
}) : null
|
|
229
|
+
]
|
|
230
|
+
});
|
|
231
|
+
} else {
|
|
232
|
+
return assertNever(part, "Unexpected retrieval kind");
|
|
233
|
+
}
|
|
234
|
+
},
|
|
184
235
|
AI_CHAT_MESSAGES_ERROR: () => "There was an error while getting the messages.",
|
|
185
236
|
AI_TOOL_CONFIRMATION_CONFIRM: "Confirm",
|
|
186
237
|
AI_TOOL_CONFIRMATION_CANCEL: "Cancel"
|
package/dist/overrides.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overrides.js","sources":["../src/overrides.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n type AiReasoningPart,\n type AiRetrievalPart,\n assertNever,\n} from \"@liveblocks/core\";\nimport type { PropsWithChildren, ReactNode } from \"react\";\nimport { createContext, useContext, useMemo } from \"react\";\n\nimport { Emoji } from \"./components/internal/Emoji\";\nimport { Duration, getDuration } from \"./primitives/Duration\";\nimport type { ComposerBodyMark, Direction } from \"./types\";\nimport { pluralize } from \"./utils/pluralize\";\n\nconst MINIMUM_VISIBLE_DURATION = 3 * 1000;\n\n// TODO: Move overrides to single-argument-as-object with Liveblocks 4.0,\n// it didn't make the cut for 3.0 but we should do it next time.\n\nexport interface LocalizationOverrides {\n locale: string;\n dir: Direction;\n}\n\nexport interface GlobalOverrides {\n USER_SELF: string;\n USER_UNKNOWN: string;\n LIST_REMAINING: (count: number) => string;\n LIST_REMAINING_USERS: (count: number) => string;\n LIST_REMAINING_COMMENTS: (count: number) => string;\n EMOJI_PICKER_SEARCH_PLACEHOLDER: string;\n EMOJI_PICKER_EMPTY: ReactNode;\n EMOJI_PICKER_ERROR: (error: Error) => ReactNode;\n EMOJI_PICKER_CHANGE_SKIN_TONE: string;\n ATTACHMENT_TOO_LARGE: (maxSize?: string) => string;\n ATTACHMENT_ERROR: (error: Error) => string;\n COPY_TO_CLIPBOARD: string;\n}\n\nexport interface CommentOverrides {\n COMMENT_EDITED: ReactNode;\n COMMENT_DELETED: ReactNode;\n COMMENT_MORE: string;\n COMMENT_EDIT: string;\n COMMENT_EDIT_COMPOSER_PLACEHOLDER: string;\n COMMENT_EDIT_COMPOSER_CANCEL: string;\n COMMENT_EDIT_COMPOSER_SAVE: string;\n COMMENT_DELETE: string;\n COMMENT_DELETE_ATTACHMENT: string;\n COMMENT_ADD_REACTION: string;\n COMMENT_REACTION_LIST: (\n list: ReactNode,\n emoji: string,\n count: number\n ) => ReactNode;\n COMMENT_REACTION_DESCRIPTION: (emoji: string, count: number) => string;\n}\n\nexport interface ComposerOverrides {\n COMPOSER_INSERT_MENTION: string;\n COMPOSER_INSERT_EMOJI: string;\n COMPOSER_ATTACH_FILES: string;\n COMPOSER_REMOVE_ATTACHMENT: string;\n COMPOSER_PLACEHOLDER: string;\n COMPOSER_SEND: string;\n COMPOSER_TOGGLE_MARK: (mark: ComposerBodyMark) => string;\n}\n\nexport interface AiToolConfirmationOverrides {\n AI_TOOL_CONFIRMATION_CONFIRM: string;\n AI_TOOL_CONFIRMATION_CANCEL: string;\n}\n\nexport interface AiComposerOverrides {\n AI_COMPOSER_PLACEHOLDER: string;\n AI_COMPOSER_SEND: string;\n AI_COMPOSER_ABORT: string;\n}\n\nexport interface AiChatMessageOverrides {\n AI_CHAT_MESSAGE_DELETED: string;\n AI_CHAT_MESSAGE_THINKING: ReactNode;\n AI_CHAT_MESSAGE_REASONING: (\n isStreaming: boolean,\n part: AiReasoningPart\n ) => ReactNode;\n AI_CHAT_MESSAGE_RETRIEVAL: (\n isStreaming: boolean,\n part: AiRetrievalPart\n ) => ReactNode;\n}\n\nexport interface AiChatOverrides {\n AI_CHAT_MESSAGES_ERROR: (error: Error) => ReactNode;\n}\n\nexport interface ThreadOverrides {\n THREAD_RESOLVE: string;\n THREAD_UNRESOLVE: string;\n THREAD_SUBSCRIBE: string;\n THREAD_UNSUBSCRIBE: string;\n THREAD_NEW_INDICATOR: string;\n THREAD_NEW_INDICATOR_DESCRIPTION: string;\n THREAD_SHOW_MORE_COMMENTS: (count: number) => string;\n THREAD_COMPOSER_PLACEHOLDER: string;\n THREAD_COMPOSER_SEND: string;\n}\n\nexport interface InboxNotificationOverrides {\n INBOX_NOTIFICATION_MORE: string;\n INBOX_NOTIFICATION_MARK_AS_READ: string;\n INBOX_NOTIFICATION_DELETE: string;\n INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (\n list: ReactNode,\n room: ReactNode | undefined,\n count: number\n ) => ReactNode;\n INBOX_NOTIFICATION_THREAD_MENTION: (\n user: ReactNode,\n room: ReactNode | undefined\n ) => ReactNode;\n INBOX_NOTIFICATION_TEXT_MENTION: (\n user: ReactNode,\n room: ReactNode | undefined\n ) => ReactNode;\n}\n\nexport interface HistoryVersionPreviewOverrides {\n HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode) => ReactNode;\n HISTORY_VERSION_PREVIEW_RESTORE: string;\n HISTORY_VERSION_PREVIEW_EMPTY: ReactNode;\n HISTORY_VERSION_PREVIEW_ERROR: (error: Error) => ReactNode;\n}\n\nexport type Overrides = LocalizationOverrides &\n GlobalOverrides &\n ComposerOverrides &\n CommentOverrides &\n ThreadOverrides &\n InboxNotificationOverrides &\n HistoryVersionPreviewOverrides &\n AiComposerOverrides &\n AiChatMessageOverrides &\n AiChatOverrides &\n AiToolConfirmationOverrides;\n\ntype OverridesProviderProps = PropsWithChildren<{\n overrides?: Partial<Overrides>;\n}>;\n\nfunction isDurationVisible(\n from: Date | string | number,\n to: Date | string | number | undefined\n) {\n return getDuration(from, to ?? Date.now()) >= MINIMUM_VISIBLE_DURATION;\n}\n\nexport const defaultOverrides: Overrides = {\n locale: \"en\",\n dir: \"ltr\",\n USER_SELF: \"you\",\n USER_UNKNOWN: \"Anonymous\",\n COPY_TO_CLIPBOARD: \"Copy\",\n LIST_REMAINING: (count) => `${count} more`,\n LIST_REMAINING_USERS: (count) => `${count} ${pluralize(count, \"other\")}`,\n LIST_REMAINING_COMMENTS: (count) =>\n `${count} more ${pluralize(count, \"comment\")}`,\n EMOJI_PICKER_SEARCH_PLACEHOLDER: \"Search…\",\n EMOJI_PICKER_EMPTY: \"No emoji found.\",\n EMOJI_PICKER_ERROR: () =>\n \"There was an error while getting the list of emoji.\",\n EMOJI_PICKER_CHANGE_SKIN_TONE: \"Change skin tone\",\n ATTACHMENT_TOO_LARGE: (maxSize) =>\n maxSize ? `The file is larger than ${maxSize}` : \"The file is too large\",\n ATTACHMENT_ERROR: () => \"The file couldn’t be uploaded.\",\n COMPOSER_INSERT_MENTION: \"Mention someone\",\n COMPOSER_INSERT_EMOJI: \"Add emoji\",\n COMPOSER_ATTACH_FILES: \"Attach files\",\n COMPOSER_REMOVE_ATTACHMENT: \"Remove attachment\",\n COMPOSER_PLACEHOLDER: \"Write a comment…\",\n COMPOSER_SEND: \"Send\",\n COMPOSER_TOGGLE_MARK: (format) => {\n switch (format) {\n case \"bold\":\n return \"Bold\";\n case \"italic\":\n return \"Italic\";\n case \"strikethrough\":\n return \"Strikethrough\";\n case \"code\":\n return \"Inline code\";\n default:\n return assertNever(format, \"Unexpected mark\");\n }\n },\n COMMENT_EDITED: \"(edited)\",\n COMMENT_DELETED: \"This comment has been deleted.\",\n COMMENT_MORE: \"More\",\n COMMENT_EDIT: \"Edit comment\",\n COMMENT_EDIT_COMPOSER_PLACEHOLDER: \"Edit comment…\",\n COMMENT_EDIT_COMPOSER_CANCEL: \"Cancel\",\n COMMENT_EDIT_COMPOSER_SAVE: \"Save\",\n COMMENT_DELETE: \"Delete comment\",\n COMMENT_DELETE_ATTACHMENT: \"Delete attachment\",\n COMMENT_ADD_REACTION: \"Add reaction\",\n COMMENT_REACTION_LIST: (list, emoji) => (\n <>\n {list} reacted with <Emoji emoji={emoji} />\n </>\n ),\n COMMENT_REACTION_DESCRIPTION: (emoji, count) =>\n `${count} ${pluralize(count, \"reaction\")}, react with ${emoji}`,\n THREAD_RESOLVE: \"Resolve thread\",\n THREAD_UNRESOLVE: \"Re-open thread\",\n THREAD_SUBSCRIBE: \"Subscribe to thread\",\n THREAD_UNSUBSCRIBE: \"Unsubscribe from thread\",\n THREAD_NEW_INDICATOR: \"New\",\n THREAD_NEW_INDICATOR_DESCRIPTION: \"New comments\",\n THREAD_SHOW_MORE_COMMENTS: (count) =>\n `Show ${count} more ${pluralize(count, \"reply\", \"replies\")}`,\n THREAD_COMPOSER_PLACEHOLDER: \"Reply to thread…\",\n THREAD_COMPOSER_SEND: \"Reply\",\n INBOX_NOTIFICATION_MORE: \"More\",\n INBOX_NOTIFICATION_MARK_AS_READ: \"Mark as read\",\n INBOX_NOTIFICATION_DELETE: \"Delete notification\",\n INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (\n list: ReactNode,\n room: ReactNode\n ) => (\n <>\n {list} commented\n {room ? <> in {room}</> : <> in a thread</>}\n </>\n ),\n INBOX_NOTIFICATION_THREAD_MENTION: (user: ReactNode, room: ReactNode) => (\n <>\n {user} mentioned you{room ? <> in {room}</> : null}\n </>\n ),\n INBOX_NOTIFICATION_TEXT_MENTION: (user: ReactNode, room: ReactNode) => (\n <>\n {user} mentioned you{room ? <> in {room}</> : null}\n </>\n ),\n HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode) => (\n <>Edits from {list}</>\n ),\n HISTORY_VERSION_PREVIEW_RESTORE: \"Restore\",\n HISTORY_VERSION_PREVIEW_EMPTY: \"No content.\",\n HISTORY_VERSION_PREVIEW_ERROR: () =>\n \"There was an error while getting this version.\",\n AI_COMPOSER_PLACEHOLDER: \"Ask anything…\",\n AI_COMPOSER_SEND: \"Send\",\n AI_COMPOSER_ABORT: \"Abort response\",\n AI_CHAT_MESSAGE_DELETED: \"This message has been deleted.\",\n AI_CHAT_MESSAGE_THINKING: \"Thinking…\",\n AI_CHAT_MESSAGE_REASONING: (isStreaming: boolean, part: AiReasoningPart) =>\n isStreaming ? (\n <>Reasoning…</>\n ) : (\n <>\n Reasoned\n {isDurationVisible(part.startedAt, part.endedAt) ? (\n <>\n {\" \"}\n for{\" \"}\n <Duration\n className=\"lb-duration lb-ai-chat-message-reasoning-duration\"\n from={part.startedAt}\n to={part.endedAt}\n />\n </>\n ) : null}\n </>\n ),\n AI_CHAT_MESSAGE_RETRIEVAL: (isStreaming: boolean, part: AiRetrievalPart) =>\n isStreaming ? (\n <>\n Searching{\" \"}\n <span className=\"lb-ai-chat-message-retrieval-query\">{part.query}</span>\n …\n </>\n ) : (\n <>\n Searched{\" \"}\n <span className=\"lb-ai-chat-message-retrieval-query\">{part.query}</span>\n {isDurationVisible(part.startedAt, part.endedAt) ? (\n <>\n {\" \"}\n for{\" \"}\n <Duration\n className=\"lb-duration lb-ai-chat-message-retrieval-duration\"\n from={part.startedAt}\n to={part.endedAt}\n />\n </>\n ) : null}\n </>\n ),\n AI_CHAT_MESSAGES_ERROR: () =>\n \"There was an error while getting the messages.\",\n AI_TOOL_CONFIRMATION_CONFIRM: \"Confirm\",\n AI_TOOL_CONFIRMATION_CANCEL: \"Cancel\",\n};\n\nexport const OverridesContext = createContext<Overrides | undefined>(undefined);\n\nexport function useOverrides(overrides?: Partial<Overrides>): Overrides {\n const contextOverrides = useContext(OverridesContext);\n\n return useMemo(\n () => ({\n ...defaultOverrides,\n ...contextOverrides,\n ...overrides,\n }),\n [contextOverrides, overrides]\n );\n}\n\nexport function OverridesProvider({\n children,\n overrides: providerOverrides,\n}: OverridesProviderProps) {\n const contextOverrides = useContext(OverridesContext);\n const overrides = useMemo(\n () => ({\n ...defaultOverrides,\n ...contextOverrides,\n ...providerOverrides,\n }),\n [contextOverrides, providerOverrides]\n );\n\n return (\n <OverridesContext.Provider value={overrides}>\n {children}\n </OverridesContext.Provider>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;AAeA;AAwIA;AAIE;AACF;AAEO;AAAoC;AACjC;AACH;AACM;AACG;AACK;AACW;AACuC;AAExB;AACZ;AACb;AAElB;AAC6B;AAEoB;AAC3B;AACC;AACF;AACA;AACK;AACN;AACP;AAEb;AAAgB;AAEZ;AAAO;AAEP;AAAO;AAEP;AAAO;AAEP;AAAO;AAEP;AAA4C;AAChD;AACF;AACgB;AACC;AACH;AACA;AACqB;AACL;AACF;AACZ;AACW;AACL;AAEpB;AACG;AAAA;AAAK;AAAe;AAAM;AAAc;AAAA;AAC3C;AAGwD;AAC1C;AACE;AACA;AACE;AACE;AACY;AAEyB;AAC9B;AACP;AACG;AACQ;AACN;AAKzB;AACG;AAAA;AAAK;AACE;AAAE;AAAA;AAAK;AAAA;AAAW;AAAE;AAAY;AAAA;AAC1C;AAGA;AACG;AAAA;AAAK;AAAsB;AAAE;AAAA;AAAK;AAAA;AAAW;AAAA;AAChD;AAGA;AACG;AAAA;AAAK;AAAsB;AAAE;AAAA;AAAK;AAAA;AAAW;AAAA;AAChD;AAGA;AAAE;AAAA;AAAY;AAAA;AAAK;AAEY;AACF;AAE7B;AACuB;AACP;AACC;AACM;AACC;AAGtB;AAAE;AAEF;AAAE;AAAA;AAGE;AACG;AAAA;AAAI;AACD;AACH;AACW;AACC;AACF;AACX;AAAA;AAEA;AAAA;AACN;AAIA;AAAE;AAAA;AACU;AACT;AAAe;AAA2C;AAAM;AAAO;AAAA;AAI1E;AAAE;AAAA;AACS;AACR;AAAe;AAA2C;AAAM;AAE/D;AACG;AAAA;AAAI;AACD;AACH;AACW;AACC;AACF;AACX;AAAA;AAEA;AAAA;AACN;AAGF;AAC4B;AAEhC;AAEa;AAEN;AACL;AAEA;AAAO;AACE;AACF;AACA;AACA;AACL;AAC4B;AAEhC;AAEO;AAA2B;AAChC;AAEF;AACE;AACA;AAAkB;AACT;AACF;AACA;AACA;AACL;AACoC;AAGtC;AACG;AAAiC;AAC/B;AAGP;;"}
|
|
1
|
+
{"version":3,"file":"overrides.js","sources":["../src/overrides.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n type AiReasoningPart,\n type AiRetrievalPart,\n assertNever,\n} from \"@liveblocks/core\";\nimport type { PropsWithChildren, ReactNode } from \"react\";\nimport { createContext, useContext, useMemo } from \"react\";\n\nimport { Emoji } from \"./components/internal/Emoji\";\nimport { Duration, getDuration } from \"./primitives/Duration\";\nimport type { ComposerBodyMark, Direction } from \"./types\";\nimport { pluralize } from \"./utils/pluralize\";\n\nconst MINIMUM_VISIBLE_DURATION = 3 * 1000;\n\n// TODO: Move overrides to single-argument-as-object with Liveblocks 4.0,\n// it didn't make the cut for 3.0 but we should do it next time.\n\nexport interface LocalizationOverrides {\n locale: string;\n dir: Direction;\n}\n\nexport interface GlobalOverrides {\n USER_SELF: string;\n USER_UNKNOWN: string;\n LIST_REMAINING: (count: number) => string;\n LIST_REMAINING_USERS: (count: number) => string;\n LIST_REMAINING_COMMENTS: (count: number) => string;\n EMOJI_PICKER_SEARCH_PLACEHOLDER: string;\n EMOJI_PICKER_EMPTY: ReactNode;\n EMOJI_PICKER_ERROR: (error: Error) => ReactNode;\n EMOJI_PICKER_CHANGE_SKIN_TONE: string;\n ATTACHMENT_TOO_LARGE: (maxSize?: string) => string;\n ATTACHMENT_ERROR: (error: Error) => string;\n COPY_TO_CLIPBOARD: string;\n}\n\nexport interface CommentOverrides {\n COMMENT_EDITED: ReactNode;\n COMMENT_DELETED: ReactNode;\n COMMENT_MORE: string;\n COMMENT_EDIT: string;\n COMMENT_EDIT_COMPOSER_PLACEHOLDER: string;\n COMMENT_EDIT_COMPOSER_CANCEL: string;\n COMMENT_EDIT_COMPOSER_SAVE: string;\n COMMENT_DELETE: string;\n COMMENT_DELETE_ATTACHMENT: string;\n COMMENT_ADD_REACTION: string;\n COMMENT_REACTION_LIST: (\n list: ReactNode,\n emoji: string,\n count: number\n ) => ReactNode;\n COMMENT_REACTION_DESCRIPTION: (emoji: string, count: number) => string;\n}\n\nexport interface ComposerOverrides {\n COMPOSER_INSERT_MENTION: string;\n COMPOSER_INSERT_EMOJI: string;\n COMPOSER_ATTACH_FILES: string;\n COMPOSER_REMOVE_ATTACHMENT: string;\n COMPOSER_PLACEHOLDER: string;\n COMPOSER_SEND: string;\n COMPOSER_TOGGLE_MARK: (mark: ComposerBodyMark) => string;\n}\n\nexport interface AiToolConfirmationOverrides {\n AI_TOOL_CONFIRMATION_CONFIRM: string;\n AI_TOOL_CONFIRMATION_CANCEL: string;\n}\n\nexport interface AiComposerOverrides {\n AI_COMPOSER_PLACEHOLDER: string;\n AI_COMPOSER_SEND: string;\n AI_COMPOSER_ABORT: string;\n}\n\nexport interface AiChatMessageOverrides {\n AI_CHAT_MESSAGE_DELETED: string;\n AI_CHAT_MESSAGE_THINKING: ReactNode;\n AI_CHAT_MESSAGE_REASONING: (\n isStreaming: boolean,\n part: AiReasoningPart\n ) => ReactNode;\n AI_CHAT_MESSAGE_RETRIEVAL: (\n isStreaming: boolean,\n part: AiRetrievalPart\n ) => ReactNode;\n}\n\nexport interface AiChatOverrides {\n AI_CHAT_MESSAGES_ERROR: (error: Error) => ReactNode;\n}\n\nexport interface ThreadOverrides {\n THREAD_RESOLVE: string;\n THREAD_UNRESOLVE: string;\n THREAD_SUBSCRIBE: string;\n THREAD_UNSUBSCRIBE: string;\n THREAD_NEW_INDICATOR: string;\n THREAD_NEW_INDICATOR_DESCRIPTION: string;\n THREAD_SHOW_MORE_COMMENTS: (count: number) => string;\n THREAD_COMPOSER_PLACEHOLDER: string;\n THREAD_COMPOSER_SEND: string;\n}\n\nexport interface InboxNotificationOverrides {\n INBOX_NOTIFICATION_MORE: string;\n INBOX_NOTIFICATION_MARK_AS_READ: string;\n INBOX_NOTIFICATION_DELETE: string;\n INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (\n list: ReactNode,\n room: ReactNode | undefined,\n count: number\n ) => ReactNode;\n INBOX_NOTIFICATION_THREAD_MENTION: (\n user: ReactNode,\n room: ReactNode | undefined\n ) => ReactNode;\n INBOX_NOTIFICATION_TEXT_MENTION: (\n user: ReactNode,\n room: ReactNode | undefined\n ) => ReactNode;\n}\n\nexport interface HistoryVersionPreviewOverrides {\n HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode) => ReactNode;\n HISTORY_VERSION_PREVIEW_RESTORE: string;\n HISTORY_VERSION_PREVIEW_EMPTY: ReactNode;\n HISTORY_VERSION_PREVIEW_ERROR: (error: Error) => ReactNode;\n}\n\nexport type Overrides = LocalizationOverrides &\n GlobalOverrides &\n ComposerOverrides &\n CommentOverrides &\n ThreadOverrides &\n InboxNotificationOverrides &\n HistoryVersionPreviewOverrides &\n AiComposerOverrides &\n AiChatMessageOverrides &\n AiChatOverrides &\n AiToolConfirmationOverrides;\n\ntype OverridesProviderProps = PropsWithChildren<{\n overrides?: Partial<Overrides>;\n}>;\n\nfunction isDurationVisible(\n from: Date | string | number,\n to: Date | string | number | undefined\n) {\n return getDuration(from, to ?? Date.now()) >= MINIMUM_VISIBLE_DURATION;\n}\n\nexport const defaultOverrides: Overrides = {\n locale: \"en\",\n dir: \"ltr\",\n USER_SELF: \"you\",\n USER_UNKNOWN: \"Anonymous\",\n COPY_TO_CLIPBOARD: \"Copy\",\n LIST_REMAINING: (count) => `${count} more`,\n LIST_REMAINING_USERS: (count) => `${count} ${pluralize(count, \"other\")}`,\n LIST_REMAINING_COMMENTS: (count) =>\n `${count} more ${pluralize(count, \"comment\")}`,\n EMOJI_PICKER_SEARCH_PLACEHOLDER: \"Search…\",\n EMOJI_PICKER_EMPTY: \"No emoji found.\",\n EMOJI_PICKER_ERROR: () =>\n \"There was an error while getting the list of emoji.\",\n EMOJI_PICKER_CHANGE_SKIN_TONE: \"Change skin tone\",\n ATTACHMENT_TOO_LARGE: (maxSize) =>\n maxSize ? `The file is larger than ${maxSize}` : \"The file is too large\",\n ATTACHMENT_ERROR: () => \"The file couldn’t be uploaded.\",\n COMPOSER_INSERT_MENTION: \"Mention someone\",\n COMPOSER_INSERT_EMOJI: \"Add emoji\",\n COMPOSER_ATTACH_FILES: \"Attach files\",\n COMPOSER_REMOVE_ATTACHMENT: \"Remove attachment\",\n COMPOSER_PLACEHOLDER: \"Write a comment…\",\n COMPOSER_SEND: \"Send\",\n COMPOSER_TOGGLE_MARK: (format) => {\n switch (format) {\n case \"bold\":\n return \"Bold\";\n case \"italic\":\n return \"Italic\";\n case \"strikethrough\":\n return \"Strikethrough\";\n case \"code\":\n return \"Inline code\";\n default:\n return assertNever(format, \"Unexpected mark\");\n }\n },\n COMMENT_EDITED: \"(edited)\",\n COMMENT_DELETED: \"This comment has been deleted.\",\n COMMENT_MORE: \"More\",\n COMMENT_EDIT: \"Edit comment\",\n COMMENT_EDIT_COMPOSER_PLACEHOLDER: \"Edit comment…\",\n COMMENT_EDIT_COMPOSER_CANCEL: \"Cancel\",\n COMMENT_EDIT_COMPOSER_SAVE: \"Save\",\n COMMENT_DELETE: \"Delete comment\",\n COMMENT_DELETE_ATTACHMENT: \"Delete attachment\",\n COMMENT_ADD_REACTION: \"Add reaction\",\n COMMENT_REACTION_LIST: (list, emoji) => (\n <>\n {list} reacted with <Emoji emoji={emoji} />\n </>\n ),\n COMMENT_REACTION_DESCRIPTION: (emoji, count) =>\n `${count} ${pluralize(count, \"reaction\")}, react with ${emoji}`,\n THREAD_RESOLVE: \"Resolve thread\",\n THREAD_UNRESOLVE: \"Re-open thread\",\n THREAD_SUBSCRIBE: \"Subscribe to thread\",\n THREAD_UNSUBSCRIBE: \"Unsubscribe from thread\",\n THREAD_NEW_INDICATOR: \"New\",\n THREAD_NEW_INDICATOR_DESCRIPTION: \"New comments\",\n THREAD_SHOW_MORE_COMMENTS: (count) =>\n `Show ${count} more ${pluralize(count, \"reply\", \"replies\")}`,\n THREAD_COMPOSER_PLACEHOLDER: \"Reply to thread…\",\n THREAD_COMPOSER_SEND: \"Reply\",\n INBOX_NOTIFICATION_MORE: \"More\",\n INBOX_NOTIFICATION_MARK_AS_READ: \"Mark as read\",\n INBOX_NOTIFICATION_DELETE: \"Delete notification\",\n INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (\n list: ReactNode,\n room: ReactNode\n ) => (\n <>\n {list} commented\n {room ? <> in {room}</> : <> in a thread</>}\n </>\n ),\n INBOX_NOTIFICATION_THREAD_MENTION: (user: ReactNode, room: ReactNode) => (\n <>\n {user} mentioned you{room ? <> in {room}</> : null}\n </>\n ),\n INBOX_NOTIFICATION_TEXT_MENTION: (user: ReactNode, room: ReactNode) => (\n <>\n {user} mentioned you{room ? <> in {room}</> : null}\n </>\n ),\n HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode) => (\n <>Edits from {list}</>\n ),\n HISTORY_VERSION_PREVIEW_RESTORE: \"Restore\",\n HISTORY_VERSION_PREVIEW_EMPTY: \"No content.\",\n HISTORY_VERSION_PREVIEW_ERROR: () =>\n \"There was an error while getting this version.\",\n AI_COMPOSER_PLACEHOLDER: \"Ask anything…\",\n AI_COMPOSER_SEND: \"Send\",\n AI_COMPOSER_ABORT: \"Abort response\",\n AI_CHAT_MESSAGE_DELETED: \"This message has been deleted.\",\n AI_CHAT_MESSAGE_THINKING: \"Thinking…\",\n AI_CHAT_MESSAGE_REASONING: (isStreaming: boolean, part: AiReasoningPart) =>\n isStreaming ? (\n <>Reasoning…</>\n ) : (\n <>\n Reasoned\n {isDurationVisible(part.startedAt, part.endedAt) ? (\n <>\n {\" \"}\n for{\" \"}\n <Duration\n className=\"lb-duration lb-ai-chat-message-reasoning-duration\"\n from={part.startedAt}\n to={part.endedAt}\n />\n </>\n ) : null}\n </>\n ),\n AI_CHAT_MESSAGE_RETRIEVAL: (isStreaming: boolean, part: AiRetrievalPart) => {\n if (part.kind === \"knowledge\") {\n return isStreaming ? (\n <>\n Searching{\" \"}\n <span className=\"lb-ai-chat-message-retrieval-query\">\n {part.query}\n </span>\n …\n </>\n ) : (\n <>\n Searched{\" \"}\n <span className=\"lb-ai-chat-message-retrieval-query\">\n {part.query}\n </span>\n {isDurationVisible(part.startedAt, part.endedAt) ? (\n <>\n {\" \"}\n for{\" \"}\n <Duration\n className=\"lb-duration lb-ai-chat-message-retrieval-duration\"\n from={part.startedAt}\n to={part.endedAt}\n />\n </>\n ) : null}\n </>\n );\n } else if (part.kind === \"web\") {\n return isStreaming ? (\n <>\n Searching the web\n {part.query ? (\n <>\n {\" \"}\n for{\" \"}\n <span className=\"lb-ai-chat-message-retrieval-query\">\n {part.query}\n </span>\n </>\n ) : null}\n …\n </>\n ) : (\n <>\n Searched the web\n {part.query ? (\n <>\n {\" \"}\n for{\" \"}\n <span className=\"lb-ai-chat-message-retrieval-query\">\n {part.query}\n </span>\n </>\n ) : null}\n {isDurationVisible(part.startedAt, part.endedAt) ? (\n <>\n {\" \"}\n for{\" \"}\n <Duration\n className=\"lb-duration lb-ai-chat-message-retrieval-duration\"\n from={part.startedAt}\n to={part.endedAt}\n />\n </>\n ) : null}\n </>\n );\n } else {\n return assertNever(part, \"Unexpected retrieval kind\");\n }\n },\n AI_CHAT_MESSAGES_ERROR: () =>\n \"There was an error while getting the messages.\",\n AI_TOOL_CONFIRMATION_CONFIRM: \"Confirm\",\n AI_TOOL_CONFIRMATION_CANCEL: \"Cancel\",\n};\n\nexport const OverridesContext = createContext<Overrides | undefined>(undefined);\n\nexport function useOverrides(overrides?: Partial<Overrides>): Overrides {\n const contextOverrides = useContext(OverridesContext);\n\n return useMemo(\n () => ({\n ...defaultOverrides,\n ...contextOverrides,\n ...overrides,\n }),\n [contextOverrides, overrides]\n );\n}\n\nexport function OverridesProvider({\n children,\n overrides: providerOverrides,\n}: OverridesProviderProps) {\n const contextOverrides = useContext(OverridesContext);\n const overrides = useMemo(\n () => ({\n ...defaultOverrides,\n ...contextOverrides,\n ...providerOverrides,\n }),\n [contextOverrides, providerOverrides]\n );\n\n return (\n <OverridesContext.Provider value={overrides}>\n {children}\n </OverridesContext.Provider>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;AAeA;AAwIA;AAIE;AACF;AAEO;AAAoC;AACjC;AACH;AACM;AACG;AACK;AACW;AACuC;AAExB;AACZ;AACb;AAElB;AAC6B;AAEoB;AAC3B;AACC;AACF;AACA;AACK;AACN;AACP;AAEb;AAAgB;AAEZ;AAAO;AAEP;AAAO;AAEP;AAAO;AAEP;AAAO;AAEP;AAA4C;AAChD;AACF;AACgB;AACC;AACH;AACA;AACqB;AACL;AACF;AACZ;AACW;AACL;AAEpB;AACG;AAAA;AAAK;AAAe;AAAM;AAAc;AAAA;AAC3C;AAGwD;AAC1C;AACE;AACA;AACE;AACE;AACY;AAEyB;AAC9B;AACP;AACG;AACQ;AACN;AAKzB;AACG;AAAA;AAAK;AACE;AAAE;AAAA;AAAK;AAAA;AAAW;AAAE;AAAY;AAAA;AAC1C;AAGA;AACG;AAAA;AAAK;AAAsB;AAAE;AAAA;AAAK;AAAA;AAAW;AAAA;AAChD;AAGA;AACG;AAAA;AAAK;AAAsB;AAAE;AAAA;AAAK;AAAA;AAAW;AAAA;AAChD;AAGA;AAAE;AAAA;AAAY;AAAA;AAAK;AAEY;AACF;AAE7B;AACuB;AACP;AACC;AACM;AACC;AAGtB;AAAE;AAEF;AAAE;AAAA;AAGE;AACG;AAAA;AAAI;AACD;AACH;AACW;AACC;AACF;AACX;AAAA;AAEA;AAAA;AACN;AAGF;AACE;AACE;AAAE;AAAA;AACU;AACT;AAAe;AACR;AACR;AAAO;AAAA;AAIT;AAAE;AAAA;AACS;AACR;AAAe;AACR;AACR;AAEE;AACG;AAAA;AAAI;AACD;AACH;AACW;AACC;AACF;AACX;AAAA;AAEA;AAAA;AACN;AAGF;AACE;AAAE;AAAA;AAGE;AACG;AAAA;AAAI;AACD;AACH;AAAe;AACR;AACR;AAAA;AAEA;AAAK;AAAA;AAIX;AAAE;AAAA;AAGE;AACG;AAAA;AAAI;AACD;AACH;AAAe;AACR;AACR;AAAA;AAEA;AAEF;AACG;AAAA;AAAI;AACD;AACH;AACW;AACC;AACF;AACX;AAAA;AAEA;AAAA;AACN;AAGF;AAAoD;AACtD;AACF;AAEE;AAC4B;AAEhC;AAEa;AAEN;AACL;AAEA;AAAO;AACE;AACF;AACA;AACA;AACL;AAC4B;AAEhC;AAEO;AAA2B;AAChC;AAEF;AACE;AACA;AAAkB;AACT;AACF;AACA;AACA;AACL;AACoC;AAGtC;AACG;AAAiC;AAC/B;AAGP;;"}
|
|
@@ -54,9 +54,13 @@ const AiComposerForm = react.forwardRef(
|
|
|
54
54
|
const messages\u03A3 = chatId ? client[core.kInternal].ai.signals.getChatMessagesForBranch\u03A3(chatId, branchId) : emptyMessages\u03A3;
|
|
55
55
|
const lastMessageId = _private.useSignal(messages\u03A3, getLastMessageId);
|
|
56
56
|
const abortableMessageId = _private.useSignal(messages\u03A3, getAbortableMessageId);
|
|
57
|
+
const isAvailable = _private.useSignal(
|
|
58
|
+
client[core.kInternal].ai.signals.status\u03A3,
|
|
59
|
+
(status) => status !== "disconnected"
|
|
60
|
+
);
|
|
57
61
|
const isDisabled = isSubmitting || disabled === true;
|
|
58
|
-
const canAbort = abortableMessageId !== void 0;
|
|
59
|
-
const canSubmit = !isEditorEmpty && !canAbort;
|
|
62
|
+
const canAbort = isAvailable && abortableMessageId !== void 0;
|
|
63
|
+
const canSubmit = isAvailable && !isEditorEmpty && !canAbort;
|
|
60
64
|
const clear = react.useCallback(() => {
|
|
61
65
|
slate.Transforms.delete(editor, {
|
|
62
66
|
at: {
|