@liveblocks/react-ui 3.23.1-exp3 → 3.23.1
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/components/HistoryVersionSummary.cjs +10 -8
- package/dist/components/HistoryVersionSummary.cjs.map +1 -1
- package/dist/components/HistoryVersionSummary.js +10 -8
- package/dist/components/HistoryVersionSummary.js.map +1 -1
- package/dist/index.d.cts +5 -2
- package/dist/index.d.ts +5 -2
- package/dist/overrides.cjs +2 -1
- package/dist/overrides.cjs.map +1 -1
- package/dist/overrides.js +2 -1
- package/dist/overrides.js.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +4 -4
- package/src/styles/index.css +2 -0
- package/styles.css +1 -1
- package/styles.css.map +1 -1
|
@@ -30,14 +30,16 @@ const HistoryVersionSummary = react.forwardRef(({ version, selected, className,
|
|
|
30
30
|
className: "lb-date lb-history-version-summary-date"
|
|
31
31
|
}
|
|
32
32
|
),
|
|
33
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "lb-history-version-summary-authors", children:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
33
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "lb-history-version-summary-authors", children: $.HISTORY_VERSION_SUMMARY_AUTHORS_LIST(
|
|
34
|
+
version.authors.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
35
|
+
List.List,
|
|
36
|
+
{
|
|
37
|
+
values: version.authors.map((author) => /* @__PURE__ */ jsxRuntime.jsx(User.User, { userId: author.id, replaceSelf: true }, author.id)),
|
|
38
|
+
formatRemaining: $.LIST_REMAINING_USERS,
|
|
39
|
+
truncate: AUTHORS_TRUNCATE,
|
|
40
|
+
locale: $.locale
|
|
41
|
+
}
|
|
42
|
+
) : void 0
|
|
41
43
|
) })
|
|
42
44
|
]
|
|
43
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HistoryVersionSummary.cjs","sources":["../../src/components/HistoryVersionSummary.tsx"],"sourcesContent":["\"use client\";\n\nimport type { HistoryVersion } from \"@liveblocks/core\";\nimport type { ComponentPropsWithoutRef } from \"react\";\nimport { forwardRef } from \"react\";\n\nimport { useOverrides } from \"../overrides\";\nimport { Timestamp } from \"../primitives\";\nimport { cn } from \"../utils/cn\";\nimport { List } from \"./internal/List\";\nimport { User } from \"./internal/User\";\n\nconst AUTHORS_TRUNCATE = 3;\n\nexport interface HistoryVersionSummaryProps extends ComponentPropsWithoutRef<\"button\"> {\n version: HistoryVersion;\n selected?: boolean;\n}\n\n/**\n * Displays some information about a version.\n *\n * @example\n * <HistoryVersionSummary version={version} />\n */\nexport const HistoryVersionSummary = forwardRef<\n HTMLButtonElement,\n HistoryVersionSummaryProps\n>(({ version, selected, className, ...props }, forwardedRef) => {\n const $ = useOverrides();\n\n return (\n <button\n {...props}\n className={cn(\"lb-root lb-history-version-summary\", className)}\n ref={forwardedRef}\n data-selected={selected ? \"\" : undefined}\n >\n <Timestamp\n locale={$.locale}\n date={version.createdAt}\n className=\"lb-date lb-history-version-summary-date\"\n />\n <span className=\"lb-history-version-summary-authors\">\n <List\n
|
|
1
|
+
{"version":3,"file":"HistoryVersionSummary.cjs","sources":["../../src/components/HistoryVersionSummary.tsx"],"sourcesContent":["\"use client\";\n\nimport type { HistoryVersion } from \"@liveblocks/core\";\nimport type { ComponentPropsWithoutRef } from \"react\";\nimport { forwardRef } from \"react\";\n\nimport { useOverrides } from \"../overrides\";\nimport { Timestamp } from \"../primitives\";\nimport { cn } from \"../utils/cn\";\nimport { List } from \"./internal/List\";\nimport { User } from \"./internal/User\";\n\nconst AUTHORS_TRUNCATE = 3;\n\nexport interface HistoryVersionSummaryProps extends ComponentPropsWithoutRef<\"button\"> {\n version: HistoryVersion;\n selected?: boolean;\n}\n\n/**\n * Displays some information about a version.\n *\n * @example\n * <HistoryVersionSummary version={version} />\n */\nexport const HistoryVersionSummary = forwardRef<\n HTMLButtonElement,\n HistoryVersionSummaryProps\n>(({ version, selected, className, ...props }, forwardedRef) => {\n const $ = useOverrides();\n\n return (\n <button\n {...props}\n className={cn(\"lb-root lb-history-version-summary\", className)}\n ref={forwardedRef}\n data-selected={selected ? \"\" : undefined}\n >\n <Timestamp\n locale={$.locale}\n date={version.createdAt}\n className=\"lb-date lb-history-version-summary-date\"\n />\n <span className=\"lb-history-version-summary-authors\">\n {$.HISTORY_VERSION_SUMMARY_AUTHORS_LIST(\n version.authors.length > 0 ? (\n <List\n values={version.authors.map((author) => (\n <User key={author.id} userId={author.id} replaceSelf />\n ))}\n formatRemaining={$.LIST_REMAINING_USERS}\n truncate={AUTHORS_TRUNCATE}\n locale={$.locale}\n />\n ) : undefined\n )}\n </span>\n </button>\n );\n});\n"],"names":[],"mappings":";;;;;;;;;;;;;AAYA;AAaa;AAIX;AAEA;AACE;AAAC;AAAA;AACK;AACyD;AACxD;AAC0B;AAE/B;AAAA;AAAC;AAAA;AACW;AACI;AACJ;AAAA;AACZ;AAEK;AAEC;AAAC;AAAA;AAGE;AACkB;AACT;AACA;AAAA;AAEV;AAER;AAAA;AAAA;AAGN;;"}
|
|
@@ -28,14 +28,16 @@ const HistoryVersionSummary = forwardRef(({ version, selected, className, ...pro
|
|
|
28
28
|
className: "lb-date lb-history-version-summary-date"
|
|
29
29
|
}
|
|
30
30
|
),
|
|
31
|
-
/* @__PURE__ */ jsx("span", { className: "lb-history-version-summary-authors", children:
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
31
|
+
/* @__PURE__ */ jsx("span", { className: "lb-history-version-summary-authors", children: $.HISTORY_VERSION_SUMMARY_AUTHORS_LIST(
|
|
32
|
+
version.authors.length > 0 ? /* @__PURE__ */ jsx(
|
|
33
|
+
List,
|
|
34
|
+
{
|
|
35
|
+
values: version.authors.map((author) => /* @__PURE__ */ jsx(User, { userId: author.id, replaceSelf: true }, author.id)),
|
|
36
|
+
formatRemaining: $.LIST_REMAINING_USERS,
|
|
37
|
+
truncate: AUTHORS_TRUNCATE,
|
|
38
|
+
locale: $.locale
|
|
39
|
+
}
|
|
40
|
+
) : void 0
|
|
39
41
|
) })
|
|
40
42
|
]
|
|
41
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HistoryVersionSummary.js","sources":["../../src/components/HistoryVersionSummary.tsx"],"sourcesContent":["\"use client\";\n\nimport type { HistoryVersion } from \"@liveblocks/core\";\nimport type { ComponentPropsWithoutRef } from \"react\";\nimport { forwardRef } from \"react\";\n\nimport { useOverrides } from \"../overrides\";\nimport { Timestamp } from \"../primitives\";\nimport { cn } from \"../utils/cn\";\nimport { List } from \"./internal/List\";\nimport { User } from \"./internal/User\";\n\nconst AUTHORS_TRUNCATE = 3;\n\nexport interface HistoryVersionSummaryProps extends ComponentPropsWithoutRef<\"button\"> {\n version: HistoryVersion;\n selected?: boolean;\n}\n\n/**\n * Displays some information about a version.\n *\n * @example\n * <HistoryVersionSummary version={version} />\n */\nexport const HistoryVersionSummary = forwardRef<\n HTMLButtonElement,\n HistoryVersionSummaryProps\n>(({ version, selected, className, ...props }, forwardedRef) => {\n const $ = useOverrides();\n\n return (\n <button\n {...props}\n className={cn(\"lb-root lb-history-version-summary\", className)}\n ref={forwardedRef}\n data-selected={selected ? \"\" : undefined}\n >\n <Timestamp\n locale={$.locale}\n date={version.createdAt}\n className=\"lb-date lb-history-version-summary-date\"\n />\n <span className=\"lb-history-version-summary-authors\">\n <List\n
|
|
1
|
+
{"version":3,"file":"HistoryVersionSummary.js","sources":["../../src/components/HistoryVersionSummary.tsx"],"sourcesContent":["\"use client\";\n\nimport type { HistoryVersion } from \"@liveblocks/core\";\nimport type { ComponentPropsWithoutRef } from \"react\";\nimport { forwardRef } from \"react\";\n\nimport { useOverrides } from \"../overrides\";\nimport { Timestamp } from \"../primitives\";\nimport { cn } from \"../utils/cn\";\nimport { List } from \"./internal/List\";\nimport { User } from \"./internal/User\";\n\nconst AUTHORS_TRUNCATE = 3;\n\nexport interface HistoryVersionSummaryProps extends ComponentPropsWithoutRef<\"button\"> {\n version: HistoryVersion;\n selected?: boolean;\n}\n\n/**\n * Displays some information about a version.\n *\n * @example\n * <HistoryVersionSummary version={version} />\n */\nexport const HistoryVersionSummary = forwardRef<\n HTMLButtonElement,\n HistoryVersionSummaryProps\n>(({ version, selected, className, ...props }, forwardedRef) => {\n const $ = useOverrides();\n\n return (\n <button\n {...props}\n className={cn(\"lb-root lb-history-version-summary\", className)}\n ref={forwardedRef}\n data-selected={selected ? \"\" : undefined}\n >\n <Timestamp\n locale={$.locale}\n date={version.createdAt}\n className=\"lb-date lb-history-version-summary-date\"\n />\n <span className=\"lb-history-version-summary-authors\">\n {$.HISTORY_VERSION_SUMMARY_AUTHORS_LIST(\n version.authors.length > 0 ? (\n <List\n values={version.authors.map((author) => (\n <User key={author.id} userId={author.id} replaceSelf />\n ))}\n formatRemaining={$.LIST_REMAINING_USERS}\n truncate={AUTHORS_TRUNCATE}\n locale={$.locale}\n />\n ) : undefined\n )}\n </span>\n </button>\n );\n});\n"],"names":[],"mappings":";;;;;;;;;;;AAYA;AAaa;AAIX;AAEA;AACE;AAAC;AAAA;AACK;AACyD;AACxD;AAC0B;AAE/B;AAAA;AAAC;AAAA;AACW;AACI;AACJ;AAAA;AACZ;AAEK;AAEC;AAAC;AAAA;AAGE;AACkB;AACT;AACA;AAAA;AAEV;AAER;AAAA;AAAA;AAGN;;"}
|
package/dist/index.d.cts
CHANGED
|
@@ -117,13 +117,16 @@ interface InboxNotificationOverrides {
|
|
|
117
117
|
INBOX_NOTIFICATION_THREAD_MENTION: (user: ReactNode, room: ReactNode | undefined) => ReactNode;
|
|
118
118
|
INBOX_NOTIFICATION_TEXT_MENTION: (user: ReactNode, room: ReactNode | undefined) => ReactNode;
|
|
119
119
|
}
|
|
120
|
+
interface HistoryVersionSummaryOverrides {
|
|
121
|
+
HISTORY_VERSION_SUMMARY_AUTHORS_LIST: (list: ReactNode | undefined) => ReactNode;
|
|
122
|
+
}
|
|
120
123
|
interface HistoryVersionPreviewOverrides {
|
|
121
|
-
HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode) => ReactNode;
|
|
124
|
+
HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode | undefined) => ReactNode;
|
|
122
125
|
HISTORY_VERSION_PREVIEW_RESTORE: string;
|
|
123
126
|
HISTORY_VERSION_PREVIEW_EMPTY: ReactNode;
|
|
124
127
|
HISTORY_VERSION_PREVIEW_ERROR: (error: Error) => ReactNode;
|
|
125
128
|
}
|
|
126
|
-
type Overrides = LocalizationOverrides & GlobalOverrides & ComposerOverrides & CommentOverrides & ThreadOverrides & InboxNotificationOverrides & HistoryVersionPreviewOverrides & AiComposerOverrides & AiChatMessageOverrides & AiChatOverrides & AiToolConfirmationOverrides;
|
|
129
|
+
type Overrides = LocalizationOverrides & GlobalOverrides & ComposerOverrides & CommentOverrides & ThreadOverrides & InboxNotificationOverrides & HistoryVersionSummaryOverrides & HistoryVersionPreviewOverrides & AiComposerOverrides & AiChatMessageOverrides & AiChatOverrides & AiToolConfirmationOverrides;
|
|
127
130
|
declare function useOverrides(overrides?: Partial<Overrides>): Overrides;
|
|
128
131
|
|
|
129
132
|
type MarkdownComponents = {
|
package/dist/index.d.ts
CHANGED
|
@@ -117,13 +117,16 @@ interface InboxNotificationOverrides {
|
|
|
117
117
|
INBOX_NOTIFICATION_THREAD_MENTION: (user: ReactNode, room: ReactNode | undefined) => ReactNode;
|
|
118
118
|
INBOX_NOTIFICATION_TEXT_MENTION: (user: ReactNode, room: ReactNode | undefined) => ReactNode;
|
|
119
119
|
}
|
|
120
|
+
interface HistoryVersionSummaryOverrides {
|
|
121
|
+
HISTORY_VERSION_SUMMARY_AUTHORS_LIST: (list: ReactNode | undefined) => ReactNode;
|
|
122
|
+
}
|
|
120
123
|
interface HistoryVersionPreviewOverrides {
|
|
121
|
-
HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode) => ReactNode;
|
|
124
|
+
HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode | undefined) => ReactNode;
|
|
122
125
|
HISTORY_VERSION_PREVIEW_RESTORE: string;
|
|
123
126
|
HISTORY_VERSION_PREVIEW_EMPTY: ReactNode;
|
|
124
127
|
HISTORY_VERSION_PREVIEW_ERROR: (error: Error) => ReactNode;
|
|
125
128
|
}
|
|
126
|
-
type Overrides = LocalizationOverrides & GlobalOverrides & ComposerOverrides & CommentOverrides & ThreadOverrides & InboxNotificationOverrides & HistoryVersionPreviewOverrides & AiComposerOverrides & AiChatMessageOverrides & AiChatOverrides & AiToolConfirmationOverrides;
|
|
129
|
+
type Overrides = LocalizationOverrides & GlobalOverrides & ComposerOverrides & CommentOverrides & ThreadOverrides & InboxNotificationOverrides & HistoryVersionSummaryOverrides & HistoryVersionPreviewOverrides & AiComposerOverrides & AiChatMessageOverrides & AiChatOverrides & AiToolConfirmationOverrides;
|
|
127
130
|
declare function useOverrides(overrides?: Partial<Overrides>): Overrides;
|
|
128
131
|
|
|
129
132
|
type MarkdownComponents = {
|
package/dist/overrides.cjs
CHANGED
|
@@ -100,7 +100,8 @@ const defaultOverrides = {
|
|
|
100
100
|
room
|
|
101
101
|
] }) : null
|
|
102
102
|
] }),
|
|
103
|
-
|
|
103
|
+
HISTORY_VERSION_SUMMARY_AUTHORS_LIST: (list) => list === void 0 ? "Unattributed" : list,
|
|
104
|
+
HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list) => list === void 0 ? "Unattributed edits" : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
104
105
|
"Edits from ",
|
|
105
106
|
list
|
|
106
107
|
] }),
|
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 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;AACgB;AACmC;AAExB;AACb;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;AAGjB;AAAA;AAAK;AAAmC;AAC3C;AAG6D;AAC/C;AACE;AACA;AACE;AACE;AACY;AAE0B;AAC/B;AACP;AACG;AACQ;AACN;AAMtB;AAAA;AAAK;AACI;AAAA;AAAK;AAAyB;AAC1C;AAIG;AAAA;AAAK;AAAwB;AAAA;AAAK;AAAW;AAChD;AAIG;AAAA;AAAK;AAAwB;AAAA;AAAK;AAAW;AAChD;AAGE;AAAA;AAAY;AAAK;AAEY;AACF;AAE7B;AACuB;AACP;AACC;AACM;AACC;AAKpB;AAAA;AAIK;AAAA;AAAI;AACD;AACJ;AAAC;AAAA;AACW;AACC;AACF;AAAA;AACX;AAEA;AACN;AAGF;AACE;AACI;AAAA;AACU;AAGV;AAAO;AAIP;AAAA;AACS;AAGT;AAGK;AAAA;AAAI;AACD;AACJ;AAAC;AAAA;AACW;AACC;AACF;AAAA;AACX;AAEA;AACN;AAGF;AACI;AAAA;AAIK;AAAA;AAAI;AACD;AAGJ;AAEA;AAAK;AAIT;AAAA;AAIK;AAAA;AAAI;AACD;AAGJ;AAEA;AAGC;AAAA;AAAI;AACD;AACJ;AAAC;AAAA;AACW;AACC;AACF;AAAA;AACX;AAEA;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;AAKF;;;;;"}
|
|
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 HistoryVersionSummaryOverrides {\n HISTORY_VERSION_SUMMARY_AUTHORS_LIST: (\n list: ReactNode | undefined\n ) => ReactNode;\n}\n\nexport interface HistoryVersionPreviewOverrides {\n HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (\n list: ReactNode | undefined\n ) => 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 HistoryVersionSummaryOverrides &\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_SUMMARY_AUTHORS_LIST: (list: ReactNode | undefined) =>\n list === undefined ? \"Unattributed\" : list,\n HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode | undefined) =>\n list === undefined ? \"Unattributed edits\" : <>Edits from {list}</>,\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;AAiJA;AAIE;AACF;AAEO;AAAoC;AACjC;AACH;AACM;AACG;AACK;AACgB;AACmC;AAExB;AACb;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;AAGjB;AAAA;AAAK;AAAmC;AAC3C;AAG6D;AAC/C;AACE;AACA;AACE;AACE;AACY;AAE0B;AAC/B;AACP;AACG;AACQ;AACN;AAMtB;AAAA;AAAK;AACI;AAAA;AAAK;AAAyB;AAC1C;AAIG;AAAA;AAAK;AAAwB;AAAA;AAAK;AAAW;AAChD;AAIG;AAAA;AAAK;AAAwB;AAAA;AAAK;AAAW;AAChD;AAGsC;AAEQ;AAAA;AAAY;AAAK;AAChC;AACF;AAE7B;AACuB;AACP;AACC;AACM;AACC;AAKpB;AAAA;AAIK;AAAA;AAAI;AACD;AACJ;AAAC;AAAA;AACW;AACC;AACF;AAAA;AACX;AAEA;AACN;AAGF;AACE;AACI;AAAA;AACU;AAGV;AAAO;AAIP;AAAA;AACS;AAGT;AAGK;AAAA;AAAI;AACD;AACJ;AAAC;AAAA;AACW;AACC;AACF;AAAA;AACX;AAEA;AACN;AAGF;AACI;AAAA;AAIK;AAAA;AAAI;AACD;AAGJ;AAEA;AAAK;AAIT;AAAA;AAIK;AAAA;AAAI;AACD;AAGJ;AAEA;AAGC;AAAA;AAAI;AACD;AACJ;AAAC;AAAA;AACW;AACC;AACF;AAAA;AACX;AAEA;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;AAKF;;;;;"}
|
package/dist/overrides.js
CHANGED
|
@@ -98,7 +98,8 @@ const defaultOverrides = {
|
|
|
98
98
|
room
|
|
99
99
|
] }) : null
|
|
100
100
|
] }),
|
|
101
|
-
|
|
101
|
+
HISTORY_VERSION_SUMMARY_AUTHORS_LIST: (list) => list === void 0 ? "Unattributed" : list,
|
|
102
|
+
HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list) => list === void 0 ? "Unattributed edits" : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
102
103
|
"Edits from ",
|
|
103
104
|
list
|
|
104
105
|
] }),
|
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 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;AACgB;AACmC;AAExB;AACb;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;AAGjB;AAAA;AAAK;AAAmC;AAC3C;AAG6D;AAC/C;AACE;AACA;AACE;AACE;AACY;AAE0B;AAC/B;AACP;AACG;AACQ;AACN;AAMtB;AAAA;AAAK;AACI;AAAA;AAAK;AAAyB;AAC1C;AAIG;AAAA;AAAK;AAAwB;AAAA;AAAK;AAAW;AAChD;AAIG;AAAA;AAAK;AAAwB;AAAA;AAAK;AAAW;AAChD;AAGE;AAAA;AAAY;AAAK;AAEY;AACF;AAE7B;AACuB;AACP;AACC;AACM;AACC;AAKpB;AAAA;AAIK;AAAA;AAAI;AACD;AACJ;AAAC;AAAA;AACW;AACC;AACF;AAAA;AACX;AAEA;AACN;AAGF;AACE;AACI;AAAA;AACU;AAGV;AAAO;AAIP;AAAA;AACS;AAGT;AAGK;AAAA;AAAI;AACD;AACJ;AAAC;AAAA;AACW;AACC;AACF;AAAA;AACX;AAEA;AACN;AAGF;AACI;AAAA;AAIK;AAAA;AAAI;AACD;AAGJ;AAEA;AAAK;AAIT;AAAA;AAIK;AAAA;AAAI;AACD;AAGJ;AAEA;AAGC;AAAA;AAAI;AACD;AACJ;AAAC;AAAA;AACW;AACC;AACF;AAAA;AACX;AAEA;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;AAKF;;"}
|
|
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 HistoryVersionSummaryOverrides {\n HISTORY_VERSION_SUMMARY_AUTHORS_LIST: (\n list: ReactNode | undefined\n ) => ReactNode;\n}\n\nexport interface HistoryVersionPreviewOverrides {\n HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (\n list: ReactNode | undefined\n ) => 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 HistoryVersionSummaryOverrides &\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_SUMMARY_AUTHORS_LIST: (list: ReactNode | undefined) =>\n list === undefined ? \"Unattributed\" : list,\n HISTORY_VERSION_PREVIEW_AUTHORS_LIST: (list: ReactNode | undefined) =>\n list === undefined ? \"Unattributed edits\" : <>Edits from {list}</>,\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;AAiJA;AAIE;AACF;AAEO;AAAoC;AACjC;AACH;AACM;AACG;AACK;AACgB;AACmC;AAExB;AACb;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;AAGjB;AAAA;AAAK;AAAmC;AAC3C;AAG6D;AAC/C;AACE;AACA;AACE;AACE;AACY;AAE0B;AAC/B;AACP;AACG;AACQ;AACN;AAMtB;AAAA;AAAK;AACI;AAAA;AAAK;AAAyB;AAC1C;AAIG;AAAA;AAAK;AAAwB;AAAA;AAAK;AAAW;AAChD;AAIG;AAAA;AAAK;AAAwB;AAAA;AAAK;AAAW;AAChD;AAGsC;AAEQ;AAAA;AAAY;AAAK;AAChC;AACF;AAE7B;AACuB;AACP;AACC;AACM;AACC;AAKpB;AAAA;AAIK;AAAA;AAAI;AACD;AACJ;AAAC;AAAA;AACW;AACC;AACF;AAAA;AACX;AAEA;AACN;AAGF;AACE;AACI;AAAA;AACU;AAGV;AAAO;AAIP;AAAA;AACS;AAGT;AAGK;AAAA;AAAI;AACD;AACJ;AAAC;AAAA;AACW;AACC;AACF;AAAA;AACX;AAEA;AACN;AAGF;AACI;AAAA;AAIK;AAAA;AAAI;AACD;AAGJ;AAEA;AAAK;AAIT;AAAA;AAIK;AAAA;AAAI;AACD;AAGJ;AAEA;AAGC;AAAA;AAAI;AACD;AACJ;AAAC;AAAA;AACW;AACC;AACF;AAAA;AACX;AAEA;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;AAKF;;"}
|
package/dist/version.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const PKG_NAME = "@liveblocks/react-ui";
|
|
4
|
-
const PKG_VERSION = typeof "3.23.1
|
|
4
|
+
const PKG_VERSION = typeof "3.23.1" === "string" && "3.23.1";
|
|
5
5
|
const PKG_FORMAT = typeof "cjs" === "string" && "cjs";
|
|
6
6
|
|
|
7
7
|
exports.PKG_FORMAT = PKG_FORMAT;
|
package/dist/version.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.cjs","sources":["../src/version.ts"],"sourcesContent":["declare const __VERSION__: string;\ndeclare const ROLLUP_FORMAT: string;\n\nexport const PKG_NAME = \"@liveblocks/react-ui\";\nexport const PKG_VERSION = typeof __VERSION__ === \"string\" && __VERSION__;\nexport const PKG_FORMAT = typeof ROLLUP_FORMAT === \"string\" && ROLLUP_FORMAT;\n"],"names":[],"mappings":";;AAGO,MAAM,QAAW,GAAA,uBAAA;AACX,MAAA,WAAA,GAAc,OAAO,
|
|
1
|
+
{"version":3,"file":"version.cjs","sources":["../src/version.ts"],"sourcesContent":["declare const __VERSION__: string;\ndeclare const ROLLUP_FORMAT: string;\n\nexport const PKG_NAME = \"@liveblocks/react-ui\";\nexport const PKG_VERSION = typeof __VERSION__ === \"string\" && __VERSION__;\nexport const PKG_FORMAT = typeof ROLLUP_FORMAT === \"string\" && ROLLUP_FORMAT;\n"],"names":[],"mappings":";;AAGO,MAAM,QAAW,GAAA,uBAAA;AACX,MAAA,WAAA,GAAc,OAAO,QAAA,KAAgB,QAAY,IAAA,SAAA;AACjD,MAAA,UAAA,GAAa,OAAO,KAAA,KAAkB,QAAY,IAAA;;;;;;"}
|
package/dist/version.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const PKG_NAME = "@liveblocks/react-ui";
|
|
2
|
-
const PKG_VERSION = typeof "3.23.1
|
|
2
|
+
const PKG_VERSION = typeof "3.23.1" === "string" && "3.23.1";
|
|
3
3
|
const PKG_FORMAT = typeof "esm" === "string" && "esm";
|
|
4
4
|
|
|
5
5
|
export { PKG_FORMAT, PKG_NAME, PKG_VERSION };
|
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sources":["../src/version.ts"],"sourcesContent":["declare const __VERSION__: string;\ndeclare const ROLLUP_FORMAT: string;\n\nexport const PKG_NAME = \"@liveblocks/react-ui\";\nexport const PKG_VERSION = typeof __VERSION__ === \"string\" && __VERSION__;\nexport const PKG_FORMAT = typeof ROLLUP_FORMAT === \"string\" && ROLLUP_FORMAT;\n"],"names":[],"mappings":"AAGO,MAAM,QAAW,GAAA,uBAAA;AACX,MAAA,WAAA,GAAc,OAAO,
|
|
1
|
+
{"version":3,"file":"version.js","sources":["../src/version.ts"],"sourcesContent":["declare const __VERSION__: string;\ndeclare const ROLLUP_FORMAT: string;\n\nexport const PKG_NAME = \"@liveblocks/react-ui\";\nexport const PKG_VERSION = typeof __VERSION__ === \"string\" && __VERSION__;\nexport const PKG_FORMAT = typeof ROLLUP_FORMAT === \"string\" && ROLLUP_FORMAT;\n"],"names":[],"mappings":"AAGO,MAAM,QAAW,GAAA,uBAAA;AACX,MAAA,WAAA,GAAc,OAAO,QAAA,KAAgB,QAAY,IAAA,SAAA;AACjD,MAAA,UAAA,GAAa,OAAO,KAAA,KAAkB,QAAY,IAAA;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@liveblocks/react-ui",
|
|
3
|
-
"version": "3.23.1
|
|
3
|
+
"version": "3.23.1",
|
|
4
4
|
"description": "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.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Liveblocks Inc.",
|
|
@@ -73,9 +73,9 @@
|
|
|
73
73
|
"slate-history": "^0.110.3",
|
|
74
74
|
"slate-hyperscript": "^0.100.0",
|
|
75
75
|
"slate-react": "^0.110.3",
|
|
76
|
-
"@liveblocks/client": "3.23.1
|
|
77
|
-
"@liveblocks/core": "3.23.1
|
|
78
|
-
"@liveblocks/react": "3.23.1
|
|
76
|
+
"@liveblocks/client": "3.23.1",
|
|
77
|
+
"@liveblocks/core": "3.23.1",
|
|
78
|
+
"@liveblocks/react": "3.23.1"
|
|
79
79
|
},
|
|
80
80
|
"peerDependencies": {
|
|
81
81
|
"@types/react": "^18 || ^19",
|