@liveblocks/react-ui 3.1.4 → 3.2.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.d.cts +272 -37
- package/dist/_private/index.d.ts +272 -37
- package/dist/components/AiChat.cjs +213 -63
- package/dist/components/AiChat.cjs.map +1 -1
- package/dist/components/AiChat.js +215 -65
- package/dist/components/AiChat.js.map +1 -1
- package/dist/components/Composer.cjs +2 -0
- package/dist/components/Composer.cjs.map +1 -1
- package/dist/components/Composer.js +2 -0
- package/dist/components/Composer.js.map +1 -1
- package/dist/components/Thread.cjs +2 -0
- package/dist/components/Thread.cjs.map +1 -1
- package/dist/components/Thread.js +2 -0
- package/dist/components/Thread.js.map +1 -1
- package/dist/components/internal/AiChatAssistantMessage.cjs +21 -15
- package/dist/components/internal/AiChatAssistantMessage.cjs.map +1 -1
- package/dist/components/internal/AiChatAssistantMessage.js +20 -14
- package/dist/components/internal/AiChatAssistantMessage.js.map +1 -1
- package/dist/components/internal/AiChatUserMessage.cjs +2 -1
- package/dist/components/internal/AiChatUserMessage.cjs.map +1 -1
- package/dist/components/internal/AiChatUserMessage.js +2 -1
- package/dist/components/internal/AiChatUserMessage.js.map +1 -1
- package/dist/components/internal/Prose.cjs +15 -7
- package/dist/components/internal/Prose.cjs.map +1 -1
- package/dist/components/internal/Prose.js +16 -8
- package/dist/components/internal/Prose.js.map +1 -1
- package/dist/index.d.cts +277 -4
- package/dist/index.d.ts +277 -4
- package/dist/primitives/Composer/index.cjs +5 -2
- package/dist/primitives/Composer/index.cjs.map +1 -1
- package/dist/primitives/Composer/index.js +5 -2
- package/dist/primitives/Composer/index.js.map +1 -1
- package/dist/primitives/Composer/utils.cjs +1 -2
- package/dist/primitives/Composer/utils.cjs.map +1 -1
- package/dist/primitives/Composer/utils.js +1 -2
- package/dist/primitives/Composer/utils.js.map +1 -1
- package/dist/primitives/Markdown.cjs +267 -336
- package/dist/primitives/Markdown.cjs.map +1 -1
- package/dist/primitives/Markdown.js +269 -338
- package/dist/primitives/Markdown.js.map +1 -1
- package/dist/primitives/index.d.cts +4 -0
- package/dist/primitives/index.d.ts +4 -0
- package/dist/utils/use-observable.cjs +2 -2
- package/dist/utils/use-observable.cjs.map +1 -1
- package/dist/utils/use-observable.js +1 -1
- package/dist/utils/use-observable.js.map +1 -1
- package/dist/utils/use-visible.cjs +8 -6
- package/dist/utils/use-visible.cjs.map +1 -1
- package/dist/utils/use-visible.js +7 -5
- package/dist/utils/use-visible.js.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -4
- package/src/styles/constants.css +2 -2
- package/src/styles/index.css +14 -1
- package/styles/dark/attributes.css +1 -1
- package/styles/dark/media-query.css +1 -1
- package/styles.css +1 -1
- package/styles.css.map +1 -1
- package/dist/utils/use-latest.cjs +0 -14
- package/dist/utils/use-latest.cjs.map +0 -1
- package/dist/utils/use-latest.js +0 -12
- package/dist/utils/use-latest.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiChatAssistantMessage.js","sources":["../../../src/components/internal/AiChatAssistantMessage.tsx"],"sourcesContent":["import type { AiAssistantMessage, WithNavigation } from \"@liveblocks/core\";\nimport {\n type ComponentProps,\n forwardRef,\n memo,\n type ReactNode,\n useEffect,\n useState,\n} from \"react\";\n\nimport { ComponentsProvider, type GlobalComponents } from \"../../components\";\nimport { ChevronRightIcon } from \"../../icons/ChevronRight\";\nimport { WarningIcon } from \"../../icons/Warning\";\nimport {\n type AiChatMessageOverrides,\n type GlobalOverrides,\n OverridesProvider,\n useOverrides,\n} from \"../../overrides\";\nimport * as AiMessage from \"../../primitives/AiMessage\";\nimport { AiMessageToolInvocation } from \"../../primitives/AiMessage/tool-invocation\";\nimport type {\n AiMessageContentReasoningPartProps,\n AiMessageContentTextPartProps,\n AiMessageContentToolInvocationPartProps,\n} from \"../../primitives/AiMessage/types\";\nimport * as Collapsible from \"../../primitives/Collapsible\";\nimport { cn } from \"../../utils/cn\";\nimport { ErrorBoundary } from \"../../utils/ErrorBoundary\";\nimport { Prose } from \"./Prose\";\n\ntype UiAssistantMessage = WithNavigation<AiAssistantMessage>;\n\n/* -------------------------------------------------------------------------------------------------\n * AiChatAssistantMessage\n * -----------------------------------------------------------------------------------------------*/\nexport interface AiChatAssistantMessageProps extends ComponentProps<\"div\"> {\n /**\n * The message to display.\n */\n message: UiAssistantMessage;\n\n /**\n * Override the component's strings.\n */\n overrides?: Partial<GlobalOverrides & AiChatMessageOverrides>;\n\n /**\n * Override the component's components.\n */\n components?: Partial<GlobalComponents>;\n\n /**\n * @internal\n * The id of the copilot to use to set tool call result.\n */\n copilotId?: string;\n}\n\nexport const AiChatAssistantMessage = memo(\n forwardRef<HTMLDivElement, AiChatAssistantMessageProps>(\n (\n { message, className, overrides, components, copilotId, ...props },\n forwardedRef\n ) => {\n const $ = useOverrides(overrides);\n\n let children: ReactNode = null;\n\n if (message.deletedAt !== undefined) {\n children = (\n <div className=\"lb-ai-chat-message-deleted\">\n {$.AI_CHAT_MESSAGE_DELETED}\n </div>\n );\n } else if (\n message.status === \"generating\" ||\n message.status === \"awaiting-tool\"\n ) {\n if (message.contentSoFar.length === 0) {\n children = (\n <div className=\"lb-ai-chat-message-thinking lb-ai-chat-pending\">\n {$.AI_CHAT_MESSAGE_THINKING}\n </div>\n );\n } else {\n children = (\n <AssistantMessageContent message={message} copilotId={copilotId} />\n );\n }\n } else if (message.status === \"completed\") {\n children = (\n <AssistantMessageContent message={message} copilotId={copilotId} />\n );\n } else if (message.status === \"failed\") {\n // Do not include the error message if the user aborted the request.\n if (message.errorReason === \"Aborted by user\") {\n children = (\n <AssistantMessageContent message={message} copilotId={copilotId} />\n );\n } else {\n children = (\n <>\n <AssistantMessageContent\n message={message}\n copilotId={copilotId}\n />\n\n <div className=\"lb-ai-chat-message-error\">\n <span className=\"lb-icon-container\">\n <WarningIcon />\n </span>\n {message.errorReason}\n </div>\n </>\n );\n }\n }\n\n return (\n <div\n className={cn(\n \"lb-ai-chat-message lb-ai-chat-assistant-message\",\n className\n )}\n {...props}\n ref={forwardedRef}\n >\n <OverridesProvider overrides={overrides}>\n <ComponentsProvider components={components}>\n {children}\n </ComponentsProvider>\n </OverridesProvider>\n </div>\n );\n }\n )\n);\n\nfunction AssistantMessageContent({\n message,\n copilotId,\n}: {\n message: UiAssistantMessage;\n copilotId?: string;\n}) {\n return (\n <AiMessage.Content\n message={message}\n components={{\n TextPart,\n ReasoningPart,\n ToolInvocationPart,\n }}\n copilotId={copilotId}\n className=\"lb-ai-chat-message-content\"\n />\n );\n}\n\n/* -------------------------------------------------------------------------------------------------\n * TextPart\n * -----------------------------------------------------------------------------------------------*/\nfunction TextPart({ part }: AiMessageContentTextPartProps) {\n return <Prose content={part.text} className=\"lb-ai-chat-message-text\" />;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * ReasoningPart\n * -----------------------------------------------------------------------------------------------*/\nfunction ReasoningPart({\n part,\n isStreaming,\n}: AiMessageContentReasoningPartProps) {\n // Start collapsed if reasoning is already done.\n const [isOpen, setIsOpen] = useState(isStreaming);\n const $ = useOverrides();\n\n // Auto-collapse when reasoning is done, while still allowing the user to\n // open/collapse it manually during and after it's done.\n useEffect(() => {\n if (!isStreaming) {\n setIsOpen(false);\n }\n }, [isStreaming]);\n\n return (\n <Collapsible.Root\n className=\"lb-collapsible lb-ai-chat-message-reasoning\"\n open={isOpen}\n onOpenChange={setIsOpen}\n >\n <Collapsible.Trigger\n className={cn(\n \"lb-collapsible-trigger\",\n isStreaming && \"lb-ai-chat-pending\"\n )}\n >\n {/* TODO: Show duration as \"Reasoned for x seconds\"? */}\n {$.AI_CHAT_MESSAGE_REASONING(isStreaming)}\n <span className=\"lb-collapsible-chevron lb-icon-container\">\n <ChevronRightIcon />\n </span>\n </Collapsible.Trigger>\n\n <Collapsible.Content className=\"lb-collapsible-content\">\n <Prose content={part.text} />\n </Collapsible.Content>\n </Collapsible.Root>\n );\n}\n\n/* -------------------------------------------------------------------------------------------------\n * ToolInvocationPart\n * -----------------------------------------------------------------------------------------------*/\nfunction ToolInvocationPart({\n part,\n message,\n copilotId,\n}: AiMessageContentToolInvocationPartProps) {\n return (\n <div className=\"lb-ai-chat-message-tool-invocation\">\n <ErrorBoundary\n fallback={\n <div className=\"lb-ai-chat-message-error\">\n <span className=\"lb-icon-container\">\n <WarningIcon />\n </span>\n <p>\n Failed to render tool call result for <code>{part.name}</code>.\n See console for details.\n </p>\n </div>\n }\n >\n <AiMessageToolInvocation\n part={part}\n message={message}\n copilotId={copilotId}\n />\n </ErrorBoundary>\n </div>\n );\n}\n"],"names":["AiMessage.Content","Collapsible.Root","Collapsible.Trigger","Collapsible.Content"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AiChatAssistantMessage.js","sources":["../../../src/components/internal/AiChatAssistantMessage.tsx"],"sourcesContent":["import type { AiAssistantMessage, WithNavigation } from \"@liveblocks/core\";\nimport {\n type ComponentProps,\n forwardRef,\n memo,\n type ReactNode,\n useEffect,\n useState,\n} from \"react\";\n\nimport { type GlobalComponents } from \"../../components\";\nimport { ChevronRightIcon } from \"../../icons/ChevronRight\";\nimport { WarningIcon } from \"../../icons/Warning\";\nimport {\n type AiChatMessageOverrides,\n type GlobalOverrides,\n OverridesProvider,\n useOverrides,\n} from \"../../overrides\";\nimport * as AiMessage from \"../../primitives/AiMessage\";\nimport { AiMessageToolInvocation } from \"../../primitives/AiMessage/tool-invocation\";\nimport type {\n AiMessageContentReasoningPartProps,\n AiMessageContentTextPartProps,\n AiMessageContentToolInvocationPartProps,\n} from \"../../primitives/AiMessage/types\";\nimport * as Collapsible from \"../../primitives/Collapsible\";\nimport type { MarkdownComponents } from \"../../primitives/Markdown\";\nimport { cn } from \"../../utils/cn\";\nimport { ErrorBoundary } from \"../../utils/ErrorBoundary\";\nimport { Prose } from \"./Prose\";\n\ntype UiAssistantMessage = WithNavigation<AiAssistantMessage>;\n\ntype AiChatAssistantMessageComponents = {\n /**\n * The components used to render Markdown content.\n */\n markdown?: Partial<MarkdownComponents>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AiChatAssistantMessage\n * -----------------------------------------------------------------------------------------------*/\nexport interface AiChatAssistantMessageProps extends ComponentProps<\"div\"> {\n /**\n * The message to display.\n */\n message: UiAssistantMessage;\n\n /**\n * Override the component's strings.\n */\n overrides?: Partial<GlobalOverrides & AiChatMessageOverrides>;\n\n /**\n * @internal\n * The id of the copilot to use to set tool call result.\n */\n copilotId?: string;\n\n /**\n * Override the component's components.\n */\n components?: Partial<GlobalComponents & AiChatAssistantMessageComponents>;\n}\n\ninterface TextPartProps extends AiMessageContentTextPartProps {\n components?: Partial<GlobalComponents & AiChatAssistantMessageComponents>;\n}\n\ninterface ReasoningPartProps extends AiMessageContentReasoningPartProps {\n components?: Partial<GlobalComponents & AiChatAssistantMessageComponents>;\n}\n\nexport const AiChatAssistantMessage = memo(\n forwardRef<HTMLDivElement, AiChatAssistantMessageProps>(\n (\n { message, className, overrides, components, copilotId, ...props },\n forwardedRef\n ) => {\n const $ = useOverrides(overrides);\n\n let children: ReactNode = null;\n\n if (message.deletedAt !== undefined) {\n children = (\n <div className=\"lb-ai-chat-message-deleted\">\n {$.AI_CHAT_MESSAGE_DELETED}\n </div>\n );\n } else if (\n message.status === \"generating\" ||\n message.status === \"awaiting-tool\"\n ) {\n if (message.contentSoFar.length === 0) {\n children = (\n <div className=\"lb-ai-chat-message-thinking lb-ai-chat-pending\">\n {$.AI_CHAT_MESSAGE_THINKING}\n </div>\n );\n } else {\n children = (\n <AssistantMessageContent\n message={message}\n components={components}\n copilotId={copilotId}\n />\n );\n }\n } else if (message.status === \"completed\") {\n children = (\n <AssistantMessageContent\n message={message}\n components={components}\n copilotId={copilotId}\n />\n );\n } else if (message.status === \"failed\") {\n // Do not include the error message if the user aborted the request.\n if (message.errorReason === \"Aborted by user\") {\n children = (\n <AssistantMessageContent\n message={message}\n components={components}\n copilotId={copilotId}\n />\n );\n } else {\n children = (\n <>\n <AssistantMessageContent\n message={message}\n components={components}\n copilotId={copilotId}\n />\n\n <div className=\"lb-ai-chat-message-error\">\n <span className=\"lb-icon-container\">\n <WarningIcon />\n </span>\n {message.errorReason}\n </div>\n </>\n );\n }\n }\n\n return (\n <div\n className={cn(\n \"lb-ai-chat-message lb-ai-chat-assistant-message\",\n className\n )}\n {...props}\n ref={forwardedRef}\n >\n <OverridesProvider overrides={overrides}>\n {children}\n </OverridesProvider>\n </div>\n );\n }\n )\n);\n\nfunction AssistantMessageContent({\n message,\n components,\n copilotId,\n}: {\n message: UiAssistantMessage;\n components?: Partial<GlobalComponents & AiChatAssistantMessageComponents>;\n copilotId?: string;\n}) {\n return (\n <AiMessage.Content\n message={message}\n components={{\n TextPart: (props) => <TextPart {...props} components={components} />,\n ReasoningPart: (props) => (\n <ReasoningPart {...props} components={components} />\n ),\n ToolInvocationPart,\n }}\n copilotId={copilotId}\n className=\"lb-ai-chat-message-content\"\n />\n );\n}\n\n/* -------------------------------------------------------------------------------------------------\n * TextPart\n * -----------------------------------------------------------------------------------------------*/\nfunction TextPart({ part, components }: TextPartProps) {\n return (\n <Prose\n content={part.text}\n className=\"lb-ai-chat-message-text\"\n components={components}\n />\n );\n}\n\n/* -------------------------------------------------------------------------------------------------\n * ReasoningPart\n * -----------------------------------------------------------------------------------------------*/\nfunction ReasoningPart({ part, isStreaming, components }: ReasoningPartProps) {\n // Start collapsed if reasoning is already done.\n const [isOpen, setIsOpen] = useState(isStreaming);\n const $ = useOverrides();\n\n // Auto-collapse when reasoning is done, while still allowing the user to\n // open/collapse it manually during and after it's done.\n useEffect(() => {\n if (!isStreaming) {\n setIsOpen(false);\n }\n }, [isStreaming]);\n\n return (\n <Collapsible.Root\n className=\"lb-collapsible lb-ai-chat-message-reasoning\"\n open={isOpen}\n onOpenChange={setIsOpen}\n >\n <Collapsible.Trigger\n className={cn(\n \"lb-collapsible-trigger\",\n isStreaming && \"lb-ai-chat-pending\"\n )}\n >\n {/* TODO: Show duration as \"Reasoned for x seconds\"? */}\n {$.AI_CHAT_MESSAGE_REASONING(isStreaming)}\n <span className=\"lb-collapsible-chevron lb-icon-container\">\n <ChevronRightIcon />\n </span>\n </Collapsible.Trigger>\n\n <Collapsible.Content className=\"lb-collapsible-content\">\n <Prose content={part.text} components={components} />\n </Collapsible.Content>\n </Collapsible.Root>\n );\n}\n\n/* -------------------------------------------------------------------------------------------------\n * ToolInvocationPart\n * -----------------------------------------------------------------------------------------------*/\nfunction ToolInvocationPart({\n part,\n message,\n copilotId,\n}: AiMessageContentToolInvocationPartProps) {\n return (\n <div className=\"lb-ai-chat-message-tool-invocation\">\n <ErrorBoundary\n fallback={\n <div className=\"lb-ai-chat-message-error\">\n <span className=\"lb-icon-container\">\n <WarningIcon />\n </span>\n <p>\n Failed to render tool call result for <code>{part.name}</code>.\n See console for details.\n </p>\n </div>\n }\n >\n <AiMessageToolInvocation\n part={part}\n message={message}\n copilotId={copilotId}\n />\n </ErrorBoundary>\n </div>\n );\n}\n"],"names":["AiMessage.Content","Collapsible.Root","Collapsible.Trigger","Collapsible.Content"],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ function PlainTextPart({ part }) {
|
|
|
14
14
|
}
|
|
15
15
|
const AiChatUserMessage = react.memo(
|
|
16
16
|
react.forwardRef(
|
|
17
|
-
({ message, className, overrides: overrides$1 }, forwardedRef) => {
|
|
17
|
+
({ message, className, overrides: overrides$1, ...props }, forwardedRef) => {
|
|
18
18
|
const $ = overrides.useOverrides(overrides$1);
|
|
19
19
|
return /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
20
20
|
ref: forwardedRef,
|
|
@@ -22,6 +22,7 @@ const AiChatUserMessage = react.memo(
|
|
|
22
22
|
"lb-ai-chat-message lb-ai-chat-user-message",
|
|
23
23
|
className
|
|
24
24
|
),
|
|
25
|
+
...props,
|
|
25
26
|
children: message.deletedAt !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
26
27
|
className: "lb-ai-chat-message-deleted",
|
|
27
28
|
children: $.AI_CHAT_MESSAGE_DELETED
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiChatUserMessage.cjs","sources":["../../../src/components/internal/AiChatUserMessage.tsx"],"sourcesContent":["import type {\n AiTextPart,\n AiUserMessage,\n WithNavigation,\n} from \"@liveblocks/core\";\nimport type { ComponentProps } from \"react\";\nimport { forwardRef, memo } from \"react\";\n\nimport { AiMessage } from \"../../_private\";\nimport { type GlobalOverrides, useOverrides } from \"../../overrides\";\nimport { cn } from \"../../utils/cn\";\n\ntype UiUserMessage = WithNavigation<AiUserMessage>;\n\n/* -------------------------------------------------------------------------------------------------\n * AiChatUserMessage\n * -----------------------------------------------------------------------------------------------*/\nexport interface AiChatUserMessageProps extends ComponentProps<\"div\"> {\n /**\n * The message to display.\n */\n message: UiUserMessage;\n /**\n * Override the component's strings.\n */\n overrides?: Partial<GlobalOverrides>;\n}\n\ntype PlainTextPartProps = {\n part: AiTextPart;\n};\n\nfunction PlainTextPart({ part }: PlainTextPartProps) {\n return <p>{part.text}</p>;\n}\n\nexport const AiChatUserMessage = memo(\n forwardRef<HTMLDivElement, AiChatUserMessageProps>(\n ({ message, className, overrides }, forwardedRef) => {\n const $ = useOverrides(overrides);\n return (\n <div\n ref={forwardedRef}\n className={cn(\n \"lb-ai-chat-message lb-ai-chat-user-message\",\n className\n )}\n >\n {message.deletedAt !== undefined ? (\n <div className=\"lb-ai-chat-message-deleted\">\n {$.AI_CHAT_MESSAGE_DELETED}\n </div>\n ) : (\n <div className=\"lb-ai-chat-message-content\">\n <AiMessage.Content\n message={message}\n components={{\n TextPart: PlainTextPart,\n }}\n className=\"lb-prose lb-ai-chat-message-text\"\n />\n </div>\n )}\n </div>\n );\n }\n )\n);\n"],"names":["jsx","memo","forwardRef","overrides","useOverrides","cn","AiMessage.Content"],"mappings":";;;;;;;;;AAgCA,SAAS,aAAA,CAAc,EAAE,IAAA,EAA4B,EAAA;AACnD,EAAA,uBAAQA,cAAA,CAAA,GAAA,EAAA;AAAA,IAAG,QAAK,EAAA,IAAA,CAAA,IAAA;AAAA,GAAK,CAAA,CAAA;AACvB,CAAA;AAEO,MAAM,iBAAoB,GAAAC,UAAA;AAAA,EAC/BC,gBAAA;AAAA,IACE,CAAC,EAAE,OAAA,EAAS,
|
|
1
|
+
{"version":3,"file":"AiChatUserMessage.cjs","sources":["../../../src/components/internal/AiChatUserMessage.tsx"],"sourcesContent":["import type {\n AiTextPart,\n AiUserMessage,\n WithNavigation,\n} from \"@liveblocks/core\";\nimport type { ComponentProps } from \"react\";\nimport { forwardRef, memo } from \"react\";\n\nimport { AiMessage } from \"../../_private\";\nimport { type GlobalOverrides, useOverrides } from \"../../overrides\";\nimport { cn } from \"../../utils/cn\";\n\ntype UiUserMessage = WithNavigation<AiUserMessage>;\n\n/* -------------------------------------------------------------------------------------------------\n * AiChatUserMessage\n * -----------------------------------------------------------------------------------------------*/\nexport interface AiChatUserMessageProps extends ComponentProps<\"div\"> {\n /**\n * The message to display.\n */\n message: UiUserMessage;\n /**\n * Override the component's strings.\n */\n overrides?: Partial<GlobalOverrides>;\n}\n\ntype PlainTextPartProps = {\n part: AiTextPart;\n};\n\nfunction PlainTextPart({ part }: PlainTextPartProps) {\n return <p>{part.text}</p>;\n}\n\nexport const AiChatUserMessage = memo(\n forwardRef<HTMLDivElement, AiChatUserMessageProps>(\n ({ message, className, overrides, ...props }, forwardedRef) => {\n const $ = useOverrides(overrides);\n return (\n <div\n ref={forwardedRef}\n className={cn(\n \"lb-ai-chat-message lb-ai-chat-user-message\",\n className\n )}\n {...props}\n >\n {message.deletedAt !== undefined ? (\n <div className=\"lb-ai-chat-message-deleted\">\n {$.AI_CHAT_MESSAGE_DELETED}\n </div>\n ) : (\n <div className=\"lb-ai-chat-message-content\">\n <AiMessage.Content\n message={message}\n components={{\n TextPart: PlainTextPart,\n }}\n className=\"lb-prose lb-ai-chat-message-text\"\n />\n </div>\n )}\n </div>\n );\n }\n )\n);\n"],"names":["jsx","memo","forwardRef","overrides","useOverrides","cn","AiMessage.Content"],"mappings":";;;;;;;;;AAgCA,SAAS,aAAA,CAAc,EAAE,IAAA,EAA4B,EAAA;AACnD,EAAA,uBAAQA,cAAA,CAAA,GAAA,EAAA;AAAA,IAAG,QAAK,EAAA,IAAA,CAAA,IAAA;AAAA,GAAK,CAAA,CAAA;AACvB,CAAA;AAEO,MAAM,iBAAoB,GAAAC,UAAA;AAAA,EAC/BC,gBAAA;AAAA,IACE,CAAC,EAAE,OAAA,EAAS,sBAAWC,WAAc,EAAA,GAAA,KAAA,IAAS,YAAiB,KAAA;AAC7D,MAAM,MAAA,CAAA,GAAIC,uBAAaD,WAAS,CAAA,CAAA;AAChC,MAAA,uBACGH,cAAA,CAAA,KAAA,EAAA;AAAA,QACC,GAAK,EAAA,YAAA;AAAA,QACL,SAAW,EAAAK,KAAA;AAAA,UACT,4CAAA;AAAA,UACA,SAAA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA,OAAA,CAAQ,SAAc,KAAA,KAAA,CAAA,mBACpBL,cAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAU,EAAA,4BAAA;AAAA,UACZ,QAAE,EAAA,CAAA,CAAA,uBAAA;AAAA,SACL,oBAECA,cAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAU,EAAA,4BAAA;AAAA,UACb,QAAA,kBAAAA,cAAA,CAACM,aAAA,EAAA;AAAA,YACC,OAAA;AAAA,YACA,UAAY,EAAA;AAAA,cACV,QAAU,EAAA,aAAA;AAAA,aACZ;AAAA,YACA,SAAU,EAAA,kCAAA;AAAA,WACZ,CAAA;AAAA,SACF,CAAA;AAAA,OAEJ,CAAA,CAAA;AAAA,KAEJ;AAAA,GACF;AACF;;;;"}
|
|
@@ -12,7 +12,7 @@ function PlainTextPart({ part }) {
|
|
|
12
12
|
}
|
|
13
13
|
const AiChatUserMessage = memo(
|
|
14
14
|
forwardRef(
|
|
15
|
-
({ message, className, overrides }, forwardedRef) => {
|
|
15
|
+
({ message, className, overrides, ...props }, forwardedRef) => {
|
|
16
16
|
const $ = useOverrides(overrides);
|
|
17
17
|
return /* @__PURE__ */ jsx("div", {
|
|
18
18
|
ref: forwardedRef,
|
|
@@ -20,6 +20,7 @@ const AiChatUserMessage = memo(
|
|
|
20
20
|
"lb-ai-chat-message lb-ai-chat-user-message",
|
|
21
21
|
className
|
|
22
22
|
),
|
|
23
|
+
...props,
|
|
23
24
|
children: message.deletedAt !== void 0 ? /* @__PURE__ */ jsx("div", {
|
|
24
25
|
className: "lb-ai-chat-message-deleted",
|
|
25
26
|
children: $.AI_CHAT_MESSAGE_DELETED
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiChatUserMessage.js","sources":["../../../src/components/internal/AiChatUserMessage.tsx"],"sourcesContent":["import type {\n AiTextPart,\n AiUserMessage,\n WithNavigation,\n} from \"@liveblocks/core\";\nimport type { ComponentProps } from \"react\";\nimport { forwardRef, memo } from \"react\";\n\nimport { AiMessage } from \"../../_private\";\nimport { type GlobalOverrides, useOverrides } from \"../../overrides\";\nimport { cn } from \"../../utils/cn\";\n\ntype UiUserMessage = WithNavigation<AiUserMessage>;\n\n/* -------------------------------------------------------------------------------------------------\n * AiChatUserMessage\n * -----------------------------------------------------------------------------------------------*/\nexport interface AiChatUserMessageProps extends ComponentProps<\"div\"> {\n /**\n * The message to display.\n */\n message: UiUserMessage;\n /**\n * Override the component's strings.\n */\n overrides?: Partial<GlobalOverrides>;\n}\n\ntype PlainTextPartProps = {\n part: AiTextPart;\n};\n\nfunction PlainTextPart({ part }: PlainTextPartProps) {\n return <p>{part.text}</p>;\n}\n\nexport const AiChatUserMessage = memo(\n forwardRef<HTMLDivElement, AiChatUserMessageProps>(\n ({ message, className, overrides }, forwardedRef) => {\n const $ = useOverrides(overrides);\n return (\n <div\n ref={forwardedRef}\n className={cn(\n \"lb-ai-chat-message lb-ai-chat-user-message\",\n className\n )}\n >\n {message.deletedAt !== undefined ? (\n <div className=\"lb-ai-chat-message-deleted\">\n {$.AI_CHAT_MESSAGE_DELETED}\n </div>\n ) : (\n <div className=\"lb-ai-chat-message-content\">\n <AiMessage.Content\n message={message}\n components={{\n TextPart: PlainTextPart,\n }}\n className=\"lb-prose lb-ai-chat-message-text\"\n />\n </div>\n )}\n </div>\n );\n }\n )\n);\n"],"names":["AiMessage.Content"],"mappings":";;;;;;;AAgCA,SAAS,aAAA,CAAc,EAAE,IAAA,EAA4B,EAAA;AACnD,EAAA,uBAAQ,GAAA,CAAA,GAAA,EAAA;AAAA,IAAG,QAAK,EAAA,IAAA,CAAA,IAAA;AAAA,GAAK,CAAA,CAAA;AACvB,CAAA;AAEO,MAAM,iBAAoB,GAAA,IAAA;AAAA,EAC/B,UAAA;AAAA,IACE,CAAC,EAAE,OAAA,EAAS,
|
|
1
|
+
{"version":3,"file":"AiChatUserMessage.js","sources":["../../../src/components/internal/AiChatUserMessage.tsx"],"sourcesContent":["import type {\n AiTextPart,\n AiUserMessage,\n WithNavigation,\n} from \"@liveblocks/core\";\nimport type { ComponentProps } from \"react\";\nimport { forwardRef, memo } from \"react\";\n\nimport { AiMessage } from \"../../_private\";\nimport { type GlobalOverrides, useOverrides } from \"../../overrides\";\nimport { cn } from \"../../utils/cn\";\n\ntype UiUserMessage = WithNavigation<AiUserMessage>;\n\n/* -------------------------------------------------------------------------------------------------\n * AiChatUserMessage\n * -----------------------------------------------------------------------------------------------*/\nexport interface AiChatUserMessageProps extends ComponentProps<\"div\"> {\n /**\n * The message to display.\n */\n message: UiUserMessage;\n /**\n * Override the component's strings.\n */\n overrides?: Partial<GlobalOverrides>;\n}\n\ntype PlainTextPartProps = {\n part: AiTextPart;\n};\n\nfunction PlainTextPart({ part }: PlainTextPartProps) {\n return <p>{part.text}</p>;\n}\n\nexport const AiChatUserMessage = memo(\n forwardRef<HTMLDivElement, AiChatUserMessageProps>(\n ({ message, className, overrides, ...props }, forwardedRef) => {\n const $ = useOverrides(overrides);\n return (\n <div\n ref={forwardedRef}\n className={cn(\n \"lb-ai-chat-message lb-ai-chat-user-message\",\n className\n )}\n {...props}\n >\n {message.deletedAt !== undefined ? (\n <div className=\"lb-ai-chat-message-deleted\">\n {$.AI_CHAT_MESSAGE_DELETED}\n </div>\n ) : (\n <div className=\"lb-ai-chat-message-content\">\n <AiMessage.Content\n message={message}\n components={{\n TextPart: PlainTextPart,\n }}\n className=\"lb-prose lb-ai-chat-message-text\"\n />\n </div>\n )}\n </div>\n );\n }\n )\n);\n"],"names":["AiMessage.Content"],"mappings":";;;;;;;AAgCA,SAAS,aAAA,CAAc,EAAE,IAAA,EAA4B,EAAA;AACnD,EAAA,uBAAQ,GAAA,CAAA,GAAA,EAAA;AAAA,IAAG,QAAK,EAAA,IAAA,CAAA,IAAA;AAAA,GAAK,CAAA,CAAA;AACvB,CAAA;AAEO,MAAM,iBAAoB,GAAA,IAAA;AAAA,EAC/B,UAAA;AAAA,IACE,CAAC,EAAE,OAAA,EAAS,WAAW,SAAc,EAAA,GAAA,KAAA,IAAS,YAAiB,KAAA;AAC7D,MAAM,MAAA,CAAA,GAAI,aAAa,SAAS,CAAA,CAAA;AAChC,MAAA,uBACG,GAAA,CAAA,KAAA,EAAA;AAAA,QACC,GAAK,EAAA,YAAA;AAAA,QACL,SAAW,EAAA,EAAA;AAAA,UACT,4CAAA;AAAA,UACA,SAAA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA,OAAA,CAAQ,SAAc,KAAA,KAAA,CAAA,mBACpB,GAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAU,EAAA,4BAAA;AAAA,UACZ,QAAE,EAAA,CAAA,CAAA,uBAAA;AAAA,SACL,oBAEC,GAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAU,EAAA,4BAAA;AAAA,UACb,QAAA,kBAAA,GAAA,CAACA,gBAAA,EAAA;AAAA,YACC,OAAA;AAAA,YACA,UAAY,EAAA;AAAA,cACV,QAAU,EAAA,aAAA;AAAA,aACZ;AAAA,YACA,SAAU,EAAA,kCAAA;AAAA,WACZ,CAAA;AAAA,SACF,CAAA;AAAA,OAEJ,CAAA,CAAA;AAAA,KAEJ;AAAA,GACF;AACF;;;;"}
|
|
@@ -20,16 +20,24 @@ function CodeBlock({ language, code }) {
|
|
|
20
20
|
code
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
|
-
const
|
|
23
|
+
const defaultMarkdownComponents = {
|
|
24
24
|
Link,
|
|
25
25
|
CodeBlock
|
|
26
26
|
};
|
|
27
|
-
function Prose({
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
function Prose({
|
|
28
|
+
content,
|
|
29
|
+
components: components$1,
|
|
30
|
+
className,
|
|
31
|
+
...props
|
|
32
|
+
}) {
|
|
33
|
+
return /* @__PURE__ */ jsxRuntime.jsx(components.ComponentsProvider, {
|
|
34
|
+
components: components$1,
|
|
35
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Markdown.Markdown, {
|
|
36
|
+
content,
|
|
37
|
+
components: { ...defaultMarkdownComponents, ...components$1?.markdown },
|
|
38
|
+
className: cn.cn("lb-prose", className),
|
|
39
|
+
...props
|
|
40
|
+
})
|
|
33
41
|
});
|
|
34
42
|
}
|
|
35
43
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Prose.cjs","sources":["../../../src/components/internal/Prose.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\n\nimport { useComponents
|
|
1
|
+
{"version":3,"file":"Prose.cjs","sources":["../../../src/components/internal/Prose.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\n\nimport {\n ComponentsProvider,\n type GlobalComponents,\n useComponents,\n} from \"../../components\";\nimport type {\n MarkdownComponents,\n MarkdownComponentsCodeBlockProps,\n MarkdownComponentsLinkProps,\n} from \"../../primitives/Markdown\";\nimport { Markdown } from \"../../primitives/Markdown\";\nimport { cn } from \"../../utils/cn\";\nimport { CodeBlock as DefaultCodeBlock } from \"./CodeBlock\";\n\ninterface ProseProps extends ComponentProps<\"div\"> {\n content: string;\n components?: Partial<\n GlobalComponents & { markdown?: Partial<MarkdownComponents> }\n >;\n}\n\nfunction Link({ href, title, children }: MarkdownComponentsLinkProps) {\n const { Anchor } = useComponents();\n\n return (\n <Anchor href={href} title={title}>\n {children}\n </Anchor>\n );\n}\n\nfunction CodeBlock({ language, code }: MarkdownComponentsCodeBlockProps) {\n return <DefaultCodeBlock title={language || \"Plain text\"} code={code} />;\n}\n\nconst defaultMarkdownComponents: Partial<MarkdownComponents> = {\n Link,\n CodeBlock,\n};\n\n/**\n * This component renders Markdown content with `lb-prose`\n * styles and custom components (code blocks, etc)\n */\nexport function Prose({\n content,\n components,\n className,\n ...props\n}: ProseProps) {\n return (\n <ComponentsProvider components={components}>\n <Markdown\n content={content}\n components={{ ...defaultMarkdownComponents, ...components?.markdown }}\n className={cn(\"lb-prose\", className)}\n {...props}\n />\n </ComponentsProvider>\n );\n}\n"],"names":["useComponents","jsx","DefaultCodeBlock","components","ComponentsProvider","Markdown","cn"],"mappings":";;;;;;;;AAuBA,SAAS,IAAK,CAAA,EAAE,IAAM,EAAA,KAAA,EAAO,UAAyC,EAAA;AACpE,EAAM,MAAA,EAAE,MAAO,EAAA,GAAIA,wBAAc,EAAA,CAAA;AAEjC,EAAA,uBACGC,cAAA,CAAA,MAAA,EAAA;AAAA,IAAO,IAAA;AAAA,IAAY,KAAA;AAAA,IACjB,QAAA;AAAA,GACH,CAAA,CAAA;AAEJ,CAAA;AAEA,SAAS,SAAU,CAAA,EAAE,QAAU,EAAA,IAAA,EAA0C,EAAA;AACvE,EAAA,uBAAQA,cAAA,CAAAC,qBAAA,EAAA;AAAA,IAAiB,OAAO,QAAY,IAAA,YAAA;AAAA,IAAc,IAAA;AAAA,GAAY,CAAA,CAAA;AACxE,CAAA;AAEA,MAAM,yBAAyD,GAAA;AAAA,EAC7D,IAAA;AAAA,EACA,SAAA;AACF,CAAA,CAAA;AAMO,SAAS,KAAM,CAAA;AAAA,EACpB,OAAA;AAAA,cACAC,YAAA;AAAA,EACA,SAAA;AAAA,EACG,GAAA,KAAA;AACL,CAAe,EAAA;AACb,EAAA,uBACGF,cAAA,CAAAG,6BAAA,EAAA;AAAA,gBAAmBD,YAAA;AAAA,IAClB,QAAC,kBAAAF,cAAA,CAAAI,iBAAA,EAAA;AAAA,MACC,OAAA;AAAA,MACA,YAAY,EAAE,GAAG,yBAA2B,EAAA,GAAGF,cAAY,QAAS,EAAA;AAAA,MACpE,SAAA,EAAWG,KAAG,CAAA,UAAA,EAAY,SAAS,CAAA;AAAA,MAClC,GAAG,KAAA;AAAA,KACN,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { useComponents } from '../../components.js';
|
|
2
|
+
import { useComponents, ComponentsProvider } from '../../components.js';
|
|
3
3
|
import { Markdown } from '../../primitives/Markdown.js';
|
|
4
4
|
import { cn } from '../../utils/cn.js';
|
|
5
5
|
import { CodeBlock as CodeBlock$1 } from './CodeBlock.js';
|
|
@@ -18,16 +18,24 @@ function CodeBlock({ language, code }) {
|
|
|
18
18
|
code
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
|
-
const
|
|
21
|
+
const defaultMarkdownComponents = {
|
|
22
22
|
Link,
|
|
23
23
|
CodeBlock
|
|
24
24
|
};
|
|
25
|
-
function Prose({
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
function Prose({
|
|
26
|
+
content,
|
|
27
|
+
components,
|
|
28
|
+
className,
|
|
29
|
+
...props
|
|
30
|
+
}) {
|
|
31
|
+
return /* @__PURE__ */ jsx(ComponentsProvider, {
|
|
32
|
+
components,
|
|
33
|
+
children: /* @__PURE__ */ jsx(Markdown, {
|
|
34
|
+
content,
|
|
35
|
+
components: { ...defaultMarkdownComponents, ...components?.markdown },
|
|
36
|
+
className: cn("lb-prose", className),
|
|
37
|
+
...props
|
|
38
|
+
})
|
|
31
39
|
});
|
|
32
40
|
}
|
|
33
41
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Prose.js","sources":["../../../src/components/internal/Prose.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\n\nimport { useComponents
|
|
1
|
+
{"version":3,"file":"Prose.js","sources":["../../../src/components/internal/Prose.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\n\nimport {\n ComponentsProvider,\n type GlobalComponents,\n useComponents,\n} from \"../../components\";\nimport type {\n MarkdownComponents,\n MarkdownComponentsCodeBlockProps,\n MarkdownComponentsLinkProps,\n} from \"../../primitives/Markdown\";\nimport { Markdown } from \"../../primitives/Markdown\";\nimport { cn } from \"../../utils/cn\";\nimport { CodeBlock as DefaultCodeBlock } from \"./CodeBlock\";\n\ninterface ProseProps extends ComponentProps<\"div\"> {\n content: string;\n components?: Partial<\n GlobalComponents & { markdown?: Partial<MarkdownComponents> }\n >;\n}\n\nfunction Link({ href, title, children }: MarkdownComponentsLinkProps) {\n const { Anchor } = useComponents();\n\n return (\n <Anchor href={href} title={title}>\n {children}\n </Anchor>\n );\n}\n\nfunction CodeBlock({ language, code }: MarkdownComponentsCodeBlockProps) {\n return <DefaultCodeBlock title={language || \"Plain text\"} code={code} />;\n}\n\nconst defaultMarkdownComponents: Partial<MarkdownComponents> = {\n Link,\n CodeBlock,\n};\n\n/**\n * This component renders Markdown content with `lb-prose`\n * styles and custom components (code blocks, etc)\n */\nexport function Prose({\n content,\n components,\n className,\n ...props\n}: ProseProps) {\n return (\n <ComponentsProvider components={components}>\n <Markdown\n content={content}\n components={{ ...defaultMarkdownComponents, ...components?.markdown }}\n className={cn(\"lb-prose\", className)}\n {...props}\n />\n </ComponentsProvider>\n );\n}\n"],"names":["DefaultCodeBlock"],"mappings":";;;;;;AAuBA,SAAS,IAAK,CAAA,EAAE,IAAM,EAAA,KAAA,EAAO,UAAyC,EAAA;AACpE,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,aAAc,EAAA,CAAA;AAEjC,EAAA,uBACG,GAAA,CAAA,MAAA,EAAA;AAAA,IAAO,IAAA;AAAA,IAAY,KAAA;AAAA,IACjB,QAAA;AAAA,GACH,CAAA,CAAA;AAEJ,CAAA;AAEA,SAAS,SAAU,CAAA,EAAE,QAAU,EAAA,IAAA,EAA0C,EAAA;AACvE,EAAA,uBAAQ,GAAA,CAAAA,WAAA,EAAA;AAAA,IAAiB,OAAO,QAAY,IAAA,YAAA;AAAA,IAAc,IAAA;AAAA,GAAY,CAAA,CAAA;AACxE,CAAA;AAEA,MAAM,yBAAyD,GAAA;AAAA,EAC7D,IAAA;AAAA,EACA,SAAA;AACF,CAAA,CAAA;AAMO,SAAS,KAAM,CAAA;AAAA,EACpB,OAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACG,GAAA,KAAA;AACL,CAAe,EAAA;AACb,EAAA,uBACG,GAAA,CAAA,kBAAA,EAAA;AAAA,IAAmB,UAAA;AAAA,IAClB,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA;AAAA,MACC,OAAA;AAAA,MACA,YAAY,EAAE,GAAG,yBAA2B,EAAA,GAAG,YAAY,QAAS,EAAA;AAAA,MACpE,SAAA,EAAW,EAAG,CAAA,UAAA,EAAY,SAAS,CAAA;AAAA,MAClC,GAAG,KAAA;AAAA,KACN,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
|
package/dist/index.d.cts
CHANGED
|
@@ -123,13 +123,270 @@ interface HistoryVersionPreviewOverrides {
|
|
|
123
123
|
type Overrides = LocalizationOverrides & GlobalOverrides & ComposerOverrides & CommentOverrides & ThreadOverrides & InboxNotificationOverrides & HistoryVersionPreviewOverrides & AiChatComposerOverrides & AiChatMessageOverrides & AiChatOverrides & AiToolConfirmationOverrides;
|
|
124
124
|
declare function useOverrides(overrides?: Partial<Overrides>): Overrides;
|
|
125
125
|
|
|
126
|
+
type MarkdownComponents = {
|
|
127
|
+
/**
|
|
128
|
+
* The component used to render paragraphs.
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* ```md
|
|
132
|
+
* A paragraph.
|
|
133
|
+
*
|
|
134
|
+
* Another paragraph.
|
|
135
|
+
* ```
|
|
136
|
+
* ```tsx
|
|
137
|
+
* <Markdown
|
|
138
|
+
* components={{
|
|
139
|
+
* Paragraph: ({ children }) => <p className="...">{children}</p>
|
|
140
|
+
* }}
|
|
141
|
+
* />
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
Paragraph: ComponentType<MarkdownComponentsParagraphProps>;
|
|
145
|
+
/**
|
|
146
|
+
* The component used to render inline elements (bold, italic, strikethrough, and inline code).
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* ```md
|
|
150
|
+
* **Bold**, _italic_, ~~strikethrough~~, and `inline code`.
|
|
151
|
+
* ```
|
|
152
|
+
* ```tsx
|
|
153
|
+
* <Markdown
|
|
154
|
+
* components={{
|
|
155
|
+
* Inline: ({ type, children }) => {
|
|
156
|
+
* const Component = type;
|
|
157
|
+
* return <Component className="...">{children}</Component>;
|
|
158
|
+
* }
|
|
159
|
+
* }}
|
|
160
|
+
* />
|
|
161
|
+
* ```
|
|
162
|
+
*/
|
|
163
|
+
Inline: ComponentType<MarkdownComponentsInlineProps>;
|
|
164
|
+
/**
|
|
165
|
+
* The component used to render links.
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```md
|
|
169
|
+
* A [link](https://liveblocks.io).
|
|
170
|
+
* ```
|
|
171
|
+
* ```tsx
|
|
172
|
+
* <Markdown
|
|
173
|
+
* components={{
|
|
174
|
+
* Link: ({ href, children }) => <a href={href} className="...">{children}</a>
|
|
175
|
+
* }}
|
|
176
|
+
* />
|
|
177
|
+
* ```
|
|
178
|
+
*/
|
|
179
|
+
Link: ComponentType<MarkdownComponentsLinkProps>;
|
|
180
|
+
/**
|
|
181
|
+
* The component used to render headings.
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* ```md
|
|
185
|
+
* # Heading 1
|
|
186
|
+
* ## Heading 2
|
|
187
|
+
* ### Heading 3
|
|
188
|
+
* ```
|
|
189
|
+
* ```tsx
|
|
190
|
+
* <Markdown
|
|
191
|
+
* components={{
|
|
192
|
+
* Heading: ({ level, children }) => {
|
|
193
|
+
* const Heading = `h${level}` as const;
|
|
194
|
+
* return <Heading className="...">{children}</Heading>;
|
|
195
|
+
* }
|
|
196
|
+
* }}
|
|
197
|
+
* />
|
|
198
|
+
* ```
|
|
199
|
+
*/
|
|
200
|
+
Heading: ComponentType<MarkdownComponentsHeadingProps>;
|
|
201
|
+
/**
|
|
202
|
+
* The component used to render blockquotes.
|
|
203
|
+
*
|
|
204
|
+
* @example
|
|
205
|
+
* ```md
|
|
206
|
+
* > A blockquote.
|
|
207
|
+
* ```
|
|
208
|
+
* ```tsx
|
|
209
|
+
* <Markdown
|
|
210
|
+
* components={{
|
|
211
|
+
* Blockquote: ({ children }) => <blockquote className="...">{children}</blockquote>
|
|
212
|
+
* }}
|
|
213
|
+
* />
|
|
214
|
+
* ```
|
|
215
|
+
*/
|
|
216
|
+
Blockquote: ComponentType<MarkdownComponentsBlockquoteProps>;
|
|
217
|
+
/**
|
|
218
|
+
* The component used to render code blocks.
|
|
219
|
+
*
|
|
220
|
+
* @example
|
|
221
|
+
* ```md
|
|
222
|
+
* ```javascript
|
|
223
|
+
* const a = 1;
|
|
224
|
+
* ```
|
|
225
|
+
* ```
|
|
226
|
+
* ```tsx
|
|
227
|
+
* <Markdown
|
|
228
|
+
* components={{
|
|
229
|
+
* CodeBlock: ({ language, code }) => (
|
|
230
|
+
* <pre data-language={language} className="...">
|
|
231
|
+
* <code className="...">{code}</code>
|
|
232
|
+
* </pre>
|
|
233
|
+
* )
|
|
234
|
+
* }}
|
|
235
|
+
* />
|
|
236
|
+
* ```
|
|
237
|
+
*/
|
|
238
|
+
CodeBlock: ComponentType<MarkdownComponentsCodeBlockProps>;
|
|
239
|
+
/**
|
|
240
|
+
* The component used to render images.
|
|
241
|
+
*
|
|
242
|
+
* @example
|
|
243
|
+
* ```md
|
|
244
|
+
* 
|
|
245
|
+
* ```
|
|
246
|
+
* ```tsx
|
|
247
|
+
* <Markdown
|
|
248
|
+
* components={{
|
|
249
|
+
* Image: ({ src, alt }) => <img src={src} alt={alt} className="...">
|
|
250
|
+
* }}
|
|
251
|
+
* />
|
|
252
|
+
* ```
|
|
253
|
+
*/
|
|
254
|
+
Image: ComponentType<MarkdownComponentsImageProps>;
|
|
255
|
+
/**
|
|
256
|
+
* The component used to render lists.
|
|
257
|
+
*
|
|
258
|
+
* @example
|
|
259
|
+
* ```md
|
|
260
|
+
* 1. An ordered list item
|
|
261
|
+
* - An unordered list item
|
|
262
|
+
* - [x] A checked list item
|
|
263
|
+
* ```
|
|
264
|
+
* ```tsx
|
|
265
|
+
* <Markdown
|
|
266
|
+
* components={{
|
|
267
|
+
* List: ({ type, items }) => {
|
|
268
|
+
* const List = type === "ordered" ? "ol" : "ul";
|
|
269
|
+
* return (
|
|
270
|
+
* <List>
|
|
271
|
+
* {items.map((item, index) => (
|
|
272
|
+
* <li key={index}>
|
|
273
|
+
* {item.checked !== undefined && (
|
|
274
|
+
* <input type="checkbox" disabled checked={item.checked} />{" "}
|
|
275
|
+
* )}
|
|
276
|
+
* {item.children}
|
|
277
|
+
* </li>
|
|
278
|
+
* ))}
|
|
279
|
+
* </List>
|
|
280
|
+
* );
|
|
281
|
+
* }
|
|
282
|
+
* }}
|
|
283
|
+
* />
|
|
284
|
+
* ```
|
|
285
|
+
*/
|
|
286
|
+
List: ComponentType<MarkdownComponentsListProps>;
|
|
287
|
+
/**
|
|
288
|
+
* The component used to render tables.
|
|
289
|
+
*
|
|
290
|
+
* @example
|
|
291
|
+
* ```md
|
|
292
|
+
* | Heading 1 | Heading 2 |
|
|
293
|
+
* |-----------|-----------|
|
|
294
|
+
* | Cell 1 | Cell 2 |
|
|
295
|
+
* | Cell 3 | Cell 4 |
|
|
296
|
+
* ```
|
|
297
|
+
* ```tsx
|
|
298
|
+
* <Markdown
|
|
299
|
+
* components={{
|
|
300
|
+
* Table: ({ headings, rows }) => (
|
|
301
|
+
* <table>
|
|
302
|
+
* <thead>
|
|
303
|
+
* <tr>
|
|
304
|
+
* {headings.map(({ children }, index) => (
|
|
305
|
+
* <th key={index}>{children}</th>
|
|
306
|
+
* ))}
|
|
307
|
+
* </tr>
|
|
308
|
+
* </thead>
|
|
309
|
+
* <tbody>
|
|
310
|
+
* {rows.map((row, index) => (
|
|
311
|
+
* <tr key={index}>
|
|
312
|
+
* {row.map(({ children }, index) => (
|
|
313
|
+
* <td key={index}>{children}</td>
|
|
314
|
+
* ))}
|
|
315
|
+
* </tr>
|
|
316
|
+
* ))}
|
|
317
|
+
* </tbody>
|
|
318
|
+
* </table>
|
|
319
|
+
* )
|
|
320
|
+
* }}
|
|
321
|
+
* />
|
|
322
|
+
* ```
|
|
323
|
+
*/
|
|
324
|
+
Table: ComponentType<MarkdownComponentsTableProps>;
|
|
325
|
+
/**
|
|
326
|
+
* The component used to render separators.
|
|
327
|
+
*
|
|
328
|
+
* @example
|
|
329
|
+
* ```md
|
|
330
|
+
* ---
|
|
331
|
+
* ```
|
|
332
|
+
* ```tsx
|
|
333
|
+
* <Markdown components={{ Separator: () => <hr className="..." /> }} />
|
|
334
|
+
* ```
|
|
335
|
+
*/
|
|
336
|
+
Separator: ComponentType;
|
|
337
|
+
};
|
|
338
|
+
interface MarkdownComponentsInlineProps {
|
|
339
|
+
type: "strong" | "em" | "code" | "del";
|
|
340
|
+
children: ReactNode;
|
|
341
|
+
}
|
|
342
|
+
interface MarkdownComponentsParagraphProps {
|
|
343
|
+
children: ReactNode;
|
|
344
|
+
}
|
|
345
|
+
interface MarkdownComponentsTableCell {
|
|
346
|
+
align?: "left" | "center" | "right";
|
|
347
|
+
children: ReactNode;
|
|
348
|
+
}
|
|
349
|
+
interface MarkdownComponentsTableProps {
|
|
350
|
+
headings: MarkdownComponentsTableCell[];
|
|
351
|
+
rows: MarkdownComponentsTableCell[][];
|
|
352
|
+
}
|
|
353
|
+
interface MarkdownComponentsListItem {
|
|
354
|
+
checked?: boolean;
|
|
355
|
+
children: ReactNode;
|
|
356
|
+
}
|
|
357
|
+
interface MarkdownComponentsListProps {
|
|
358
|
+
type: "ordered" | "unordered";
|
|
359
|
+
items: MarkdownComponentsListItem[];
|
|
360
|
+
}
|
|
361
|
+
interface MarkdownComponentsBlockquoteProps {
|
|
362
|
+
children: ReactNode;
|
|
363
|
+
}
|
|
364
|
+
interface MarkdownComponentsImageProps {
|
|
365
|
+
src: string;
|
|
366
|
+
alt: string;
|
|
367
|
+
title?: string;
|
|
368
|
+
}
|
|
369
|
+
interface MarkdownComponentsHeadingProps {
|
|
370
|
+
level: 1 | 2 | 3 | 4 | 5 | 6;
|
|
371
|
+
children: ReactNode;
|
|
372
|
+
}
|
|
373
|
+
interface MarkdownComponentsLinkProps {
|
|
374
|
+
href: string;
|
|
375
|
+
title?: string;
|
|
376
|
+
children: ReactNode;
|
|
377
|
+
}
|
|
378
|
+
interface MarkdownComponentsCodeBlockProps {
|
|
379
|
+
code: string;
|
|
380
|
+
language?: string;
|
|
381
|
+
}
|
|
382
|
+
|
|
126
383
|
type AiChatComponentsEmptyProps = {
|
|
127
384
|
/**
|
|
128
|
-
* The chat
|
|
385
|
+
* The chat ID provided to the `AiChat` component.
|
|
129
386
|
*/
|
|
130
387
|
chatId: string;
|
|
131
388
|
/**
|
|
132
|
-
* The copilot
|
|
389
|
+
* The copilot ID provided to the `AiChat` component.
|
|
133
390
|
*/
|
|
134
391
|
copilotId?: string;
|
|
135
392
|
};
|
|
@@ -143,10 +400,14 @@ type AiChatComponents = {
|
|
|
143
400
|
* The component used to render the loading state of the chat.
|
|
144
401
|
*/
|
|
145
402
|
Loading: ComponentType<AiChatComponentsLoadingProps>;
|
|
403
|
+
/**
|
|
404
|
+
* The components used to render Markdown content.
|
|
405
|
+
*/
|
|
406
|
+
markdown?: Partial<MarkdownComponents>;
|
|
146
407
|
};
|
|
147
408
|
interface AiChatProps extends ComponentProps<"div"> {
|
|
148
409
|
/**
|
|
149
|
-
* The
|
|
410
|
+
* The ID of the chat the composer belongs to.
|
|
150
411
|
*/
|
|
151
412
|
chatId: string;
|
|
152
413
|
/**
|
|
@@ -154,7 +415,7 @@ interface AiChatProps extends ComponentProps<"div"> {
|
|
|
154
415
|
*/
|
|
155
416
|
autoFocus?: boolean;
|
|
156
417
|
/**
|
|
157
|
-
* The
|
|
418
|
+
* The ID of the copilot to use to send the message.
|
|
158
419
|
*/
|
|
159
420
|
copilotId?: string;
|
|
160
421
|
/**
|
|
@@ -501,6 +762,10 @@ interface ComposerFormProps extends ComponentPropsWithSlot<"form"> {
|
|
|
501
762
|
* Whether to create attachments when pasting files into the editor.
|
|
502
763
|
*/
|
|
503
764
|
pasteFilesAsAttachments?: boolean;
|
|
765
|
+
/**
|
|
766
|
+
* Whether to blur the editor when the form is submitted.
|
|
767
|
+
*/
|
|
768
|
+
blurOnSubmit?: boolean;
|
|
504
769
|
/**
|
|
505
770
|
* When `preventUnsavedChanges` is set on your Liveblocks client (or set on
|
|
506
771
|
* <LiveblocksProvider>), then closing a browser tab will be prevented when
|
|
@@ -594,6 +859,10 @@ type ComposerProps<M extends BaseMetadata = DM> = Omit<ComponentPropsWithoutRef<
|
|
|
594
859
|
* Whether to focus the composer on mount.
|
|
595
860
|
*/
|
|
596
861
|
autoFocus?: ComposerEditorProps["autoFocus"];
|
|
862
|
+
/**
|
|
863
|
+
* Whether to blur the composer editor when the composer is submitted.
|
|
864
|
+
*/
|
|
865
|
+
blurOnSubmit?: boolean;
|
|
597
866
|
/**
|
|
598
867
|
* Override the component's strings.
|
|
599
868
|
*/
|
|
@@ -899,6 +1168,10 @@ interface ThreadProps<M extends BaseMetadata = DM> extends ComponentPropsWithout
|
|
|
899
1168
|
* Whether to show the composer's formatting controls.
|
|
900
1169
|
*/
|
|
901
1170
|
showComposerFormattingControls?: ComposerProps["showFormattingControls"];
|
|
1171
|
+
/**
|
|
1172
|
+
* Whether to blur the composer editor when the composer is submitted.
|
|
1173
|
+
*/
|
|
1174
|
+
blurComposerOnSubmit?: ComposerProps["blurOnSubmit"];
|
|
902
1175
|
/**
|
|
903
1176
|
* Whether to indent the comments' content.
|
|
904
1177
|
*/
|