@liveblocks/react-ui 2.25.0-aiprivatebeta1 → 2.25.0-aiprivatebeta10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_private/index.cjs +18 -10
- package/dist/_private/index.cjs.map +1 -1
- package/dist/_private/index.d.cts +204 -172
- package/dist/_private/index.d.ts +204 -172
- package/dist/_private/index.js +12 -5
- package/dist/_private/index.js.map +1 -1
- package/dist/components/AiChat.cjs +185 -0
- package/dist/components/AiChat.cjs.map +1 -0
- package/dist/components/AiChat.js +183 -0
- package/dist/components/AiChat.js.map +1 -0
- package/dist/components/AiTool.cjs +164 -0
- package/dist/components/AiTool.cjs.map +1 -0
- package/dist/components/AiTool.js +162 -0
- package/dist/components/AiTool.js.map +1 -0
- package/dist/components/Comment.cjs +7 -5
- package/dist/components/Comment.cjs.map +1 -1
- package/dist/components/Comment.js +7 -5
- package/dist/components/Comment.js.map +1 -1
- package/dist/components/Composer.cjs +1 -2
- package/dist/components/Composer.cjs.map +1 -1
- package/dist/components/Composer.js +1 -2
- package/dist/components/Composer.js.map +1 -1
- package/dist/components/InboxNotificationList.cjs +11 -3
- package/dist/components/InboxNotificationList.cjs.map +1 -1
- package/dist/components/InboxNotificationList.js +12 -4
- package/dist/components/InboxNotificationList.js.map +1 -1
- package/dist/components/Thread.cjs +3 -3
- package/dist/components/Thread.cjs.map +1 -1
- package/dist/components/Thread.js +3 -3
- package/dist/components/Thread.js.map +1 -1
- package/dist/components/internal/AiChatAssistantMessage.cjs +74 -291
- package/dist/components/internal/AiChatAssistantMessage.cjs.map +1 -1
- package/dist/components/internal/AiChatAssistantMessage.js +76 -293
- package/dist/components/internal/AiChatAssistantMessage.js.map +1 -1
- package/dist/components/internal/AiChatComposer.cjs +58 -282
- package/dist/components/internal/AiChatComposer.cjs.map +1 -1
- package/dist/components/internal/AiChatComposer.js +63 -283
- package/dist/components/internal/AiChatComposer.js.map +1 -1
- package/dist/components/internal/AiChatUserMessage.cjs +26 -169
- package/dist/components/internal/AiChatUserMessage.cjs.map +1 -1
- package/dist/components/internal/AiChatUserMessage.js +28 -171
- package/dist/components/internal/AiChatUserMessage.js.map +1 -1
- package/dist/components/internal/Button.cjs.map +1 -1
- package/dist/components/internal/Button.js.map +1 -1
- package/dist/components/internal/CodeBlock.cjs +72 -0
- package/dist/components/internal/CodeBlock.cjs.map +1 -0
- package/dist/components/internal/CodeBlock.js +70 -0
- package/dist/components/internal/CodeBlock.js.map +1 -0
- package/dist/components/internal/Emoji.cjs +12 -4
- package/dist/components/internal/Emoji.cjs.map +1 -1
- package/dist/components/internal/Emoji.js +12 -4
- package/dist/components/internal/Emoji.js.map +1 -1
- package/dist/components/internal/Prose.cjs +37 -0
- package/dist/components/internal/Prose.cjs.map +1 -0
- package/dist/components/internal/Prose.js +35 -0
- package/dist/components/internal/Prose.js.map +1 -0
- package/dist/constants.cjs +2 -0
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.js +2 -1
- package/dist/constants.js.map +1 -1
- package/dist/icon.cjs +6 -0
- package/dist/icon.cjs.map +1 -1
- package/dist/icon.js +3 -0
- package/dist/icon.js.map +1 -1
- package/dist/icons/{Resolve.cjs → CheckCircle.cjs} +3 -3
- package/dist/icons/CheckCircle.cjs.map +1 -0
- package/dist/icons/{Resolve.js → CheckCircle.js} +3 -3
- package/dist/icons/CheckCircle.js.map +1 -0
- package/dist/icons/{Resolved.cjs → CheckCircleFill.cjs} +3 -3
- package/dist/icons/CheckCircleFill.cjs.map +1 -0
- package/dist/icons/{Resolved.js → CheckCircleFill.js} +3 -3
- package/dist/icons/CheckCircleFill.js.map +1 -0
- package/dist/icons/Copy.cjs +8 -9
- package/dist/icons/Copy.cjs.map +1 -1
- package/dist/icons/Copy.js +8 -9
- package/dist/icons/Copy.js.map +1 -1
- package/dist/icons/Retry.cjs +21 -0
- package/dist/icons/Retry.cjs.map +1 -0
- package/dist/icons/Retry.js +19 -0
- package/dist/icons/Retry.js.map +1 -0
- package/dist/icons/index.cjs +8 -4
- package/dist/icons/index.cjs.map +1 -1
- package/dist/icons/index.js +4 -2
- package/dist/icons/index.js.map +1 -1
- package/dist/index.cjs +3 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +102 -43
- package/dist/index.d.ts +102 -43
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/overrides.cjs +6 -12
- package/dist/overrides.cjs.map +1 -1
- package/dist/overrides.js +6 -12
- package/dist/overrides.js.map +1 -1
- package/dist/primitives/AiChatComposer/index.cjs +202 -0
- package/dist/primitives/AiChatComposer/index.cjs.map +1 -0
- package/dist/primitives/AiChatComposer/index.js +195 -0
- package/dist/primitives/AiChatComposer/index.js.map +1 -0
- package/dist/primitives/AiMessage/contexts.cjs +18 -0
- package/dist/primitives/AiMessage/contexts.cjs.map +1 -0
- package/dist/primitives/AiMessage/contexts.js +15 -0
- package/dist/primitives/AiMessage/contexts.js.map +1 -0
- package/dist/primitives/AiMessage/index.cjs +134 -0
- package/dist/primitives/AiMessage/index.cjs.map +1 -0
- package/dist/primitives/AiMessage/index.js +132 -0
- package/dist/primitives/AiMessage/index.js.map +1 -0
- package/dist/primitives/Collapsible/index.cjs +127 -0
- package/dist/primitives/Collapsible/index.cjs.map +1 -0
- package/dist/primitives/Collapsible/index.js +123 -0
- package/dist/primitives/Collapsible/index.js.map +1 -0
- package/dist/primitives/Comment/index.cjs +2 -2
- package/dist/primitives/Comment/index.cjs.map +1 -1
- package/dist/primitives/Comment/index.js +1 -1
- package/dist/primitives/Comment/index.js.map +1 -1
- package/dist/primitives/Composer/index.cjs +19 -14
- package/dist/primitives/Composer/index.cjs.map +1 -1
- package/dist/primitives/Composer/index.js +18 -13
- package/dist/primitives/Composer/index.js.map +1 -1
- package/dist/{slate → primitives/Composer/slate}/plugins/auto-formatting.cjs +3 -3
- package/dist/primitives/Composer/slate/plugins/auto-formatting.cjs.map +1 -0
- package/dist/{slate → primitives/Composer/slate}/plugins/auto-formatting.js +3 -3
- package/dist/primitives/Composer/slate/plugins/auto-formatting.js.map +1 -0
- package/dist/{slate → primitives/Composer/slate}/plugins/auto-links.cjs +7 -2
- package/dist/primitives/Composer/slate/plugins/auto-links.cjs.map +1 -0
- package/dist/{slate → primitives/Composer/slate}/plugins/auto-links.js +8 -3
- package/dist/primitives/Composer/slate/plugins/auto-links.js.map +1 -0
- package/dist/{slate → primitives/Composer/slate}/plugins/custom-links.cjs +8 -3
- package/dist/primitives/Composer/slate/plugins/custom-links.cjs.map +1 -0
- package/dist/{slate → primitives/Composer/slate}/plugins/custom-links.js +9 -4
- package/dist/primitives/Composer/slate/plugins/custom-links.js.map +1 -0
- package/dist/{slate → primitives/Composer/slate}/plugins/mentions.cjs +9 -10
- package/dist/primitives/Composer/slate/plugins/mentions.cjs.map +1 -0
- package/dist/{slate → primitives/Composer/slate}/plugins/mentions.js +6 -6
- package/dist/primitives/Composer/slate/plugins/mentions.js.map +1 -0
- package/dist/{slate → primitives/Composer/slate}/plugins/paste.cjs +1 -1
- package/dist/primitives/Composer/slate/plugins/paste.cjs.map +1 -0
- package/dist/{slate → primitives/Composer/slate}/plugins/paste.js +1 -1
- package/dist/primitives/Composer/slate/plugins/paste.js.map +1 -0
- package/dist/primitives/Composer/utils.cjs +4 -4
- package/dist/primitives/Composer/utils.cjs.map +1 -1
- package/dist/primitives/Composer/utils.js +4 -4
- package/dist/primitives/Composer/utils.js.map +1 -1
- package/dist/primitives/{internal/Markdown.cjs → Markdown.cjs} +150 -83
- package/dist/primitives/Markdown.cjs.map +1 -0
- package/dist/primitives/{internal/Markdown.js → Markdown.js} +151 -83
- package/dist/primitives/Markdown.js.map +1 -0
- package/dist/primitives/index.cjs +4 -9
- package/dist/primitives/index.cjs.map +1 -1
- package/dist/primitives/index.d.cts +4 -110
- package/dist/primitives/index.d.ts +4 -110
- package/dist/primitives/index.js +0 -1
- package/dist/primitives/index.js.map +1 -1
- package/dist/primitives/slate/plugins/empty-clear-formatting.cjs.map +1 -0
- package/dist/primitives/slate/plugins/empty-clear-formatting.js.map +1 -0
- package/dist/{slate → primitives/slate}/plugins/normalize.cjs +0 -5
- package/dist/primitives/slate/plugins/normalize.cjs.map +1 -0
- package/dist/{slate → primitives/slate}/plugins/normalize.js +0 -5
- package/dist/primitives/slate/plugins/normalize.js.map +1 -0
- package/dist/primitives/slate/utils/get-character.cjs.map +1 -0
- package/dist/primitives/slate/utils/get-character.js.map +1 -0
- package/dist/primitives/slate/utils/get-dom-range.cjs.map +1 -0
- package/dist/primitives/slate/utils/get-dom-range.js.map +1 -0
- package/dist/primitives/slate/utils/get-match-range.cjs.map +1 -0
- package/dist/primitives/slate/utils/get-match-range.js.map +1 -0
- package/dist/primitives/slate/utils/is-empty-string.cjs.map +1 -0
- package/dist/primitives/slate/utils/is-empty-string.js.map +1 -0
- package/dist/primitives/slate/utils/is-empty.cjs.map +1 -0
- package/dist/primitives/slate/utils/is-empty.js.map +1 -0
- package/dist/primitives/slate/utils/is-text.cjs.map +1 -0
- package/dist/primitives/slate/utils/is-text.js.map +1 -0
- package/dist/primitives/slate/utils/is-whitespace-character.cjs.map +1 -0
- package/dist/primitives/slate/utils/is-whitespace-character.js.map +1 -0
- package/dist/{slate → primitives/slate}/utils/marks.cjs +9 -9
- package/dist/primitives/slate/utils/marks.cjs.map +1 -0
- package/dist/{slate → primitives/slate}/utils/marks.js +9 -9
- package/dist/primitives/slate/utils/marks.js.map +1 -0
- package/dist/primitives/slate/utils/selection-contains-inlines.cjs.map +1 -0
- package/dist/primitives/slate/utils/selection-contains-inlines.js.map +1 -0
- package/dist/utils/ErrorBoundary.cjs +48 -0
- package/dist/utils/ErrorBoundary.cjs.map +1 -0
- package/dist/utils/ErrorBoundary.js +45 -0
- package/dist/utils/ErrorBoundary.js.map +1 -0
- package/dist/utils/use-visible.cjs +63 -45
- package/dist/utils/use-visible.cjs.map +1 -1
- package/dist/utils/use-visible.js +64 -46
- package/dist/utils/use-visible.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 +18 -6
- package/src/styles/constants.css +1 -1
- package/src/styles/dark/index.css +7 -3
- package/src/styles/index.css +640 -307
- package/src/styles/utils.css +8 -3
- package/styles/dark/attributes.css +1 -1
- package/styles/dark/attributes.css.map +1 -1
- package/styles/dark/media-query.css +1 -1
- package/styles/dark/media-query.css.map +1 -1
- package/styles.css +1 -1
- package/styles.css.map +1 -1
- package/dist/components/AiChat/AiChat.cjs +0 -211
- package/dist/components/AiChat/AiChat.cjs.map +0 -1
- package/dist/components/AiChat/AiChat.js +0 -209
- package/dist/components/AiChat/AiChat.js.map +0 -1
- package/dist/icons/Resolve.cjs.map +0 -1
- package/dist/icons/Resolve.js.map +0 -1
- package/dist/icons/Resolved.cjs.map +0 -1
- package/dist/icons/Resolved.js.map +0 -1
- package/dist/primitives/Chat/Composer/index.cjs +0 -323
- package/dist/primitives/Chat/Composer/index.cjs.map +0 -1
- package/dist/primitives/Chat/Composer/index.js +0 -315
- package/dist/primitives/Chat/Composer/index.js.map +0 -1
- package/dist/primitives/internal/Collapsible.cjs +0 -99
- package/dist/primitives/internal/Collapsible.cjs.map +0 -1
- package/dist/primitives/internal/Collapsible.js +0 -95
- package/dist/primitives/internal/Collapsible.js.map +0 -1
- package/dist/primitives/internal/Emoji.cjs +0 -32
- package/dist/primitives/internal/Emoji.cjs.map +0 -1
- package/dist/primitives/internal/Emoji.js +0 -30
- package/dist/primitives/internal/Emoji.js.map +0 -1
- package/dist/primitives/internal/Markdown.cjs.map +0 -1
- package/dist/primitives/internal/Markdown.js.map +0 -1
- package/dist/slate/plugins/auto-formatting.cjs.map +0 -1
- package/dist/slate/plugins/auto-formatting.js.map +0 -1
- package/dist/slate/plugins/auto-links.cjs.map +0 -1
- package/dist/slate/plugins/auto-links.js.map +0 -1
- package/dist/slate/plugins/custom-links.cjs.map +0 -1
- package/dist/slate/plugins/custom-links.js.map +0 -1
- package/dist/slate/plugins/empty-clear-formatting.cjs.map +0 -1
- package/dist/slate/plugins/empty-clear-formatting.js.map +0 -1
- package/dist/slate/plugins/mentions.cjs.map +0 -1
- package/dist/slate/plugins/mentions.js.map +0 -1
- package/dist/slate/plugins/normalize.cjs.map +0 -1
- package/dist/slate/plugins/normalize.js.map +0 -1
- package/dist/slate/plugins/paste.cjs.map +0 -1
- package/dist/slate/plugins/paste.js.map +0 -1
- package/dist/slate/utils/get-character.cjs.map +0 -1
- package/dist/slate/utils/get-character.js.map +0 -1
- package/dist/slate/utils/get-dom-range.cjs.map +0 -1
- package/dist/slate/utils/get-dom-range.js.map +0 -1
- package/dist/slate/utils/get-match-range.cjs.map +0 -1
- package/dist/slate/utils/get-match-range.js.map +0 -1
- package/dist/slate/utils/is-empty-string.cjs.map +0 -1
- package/dist/slate/utils/is-empty-string.js.map +0 -1
- package/dist/slate/utils/is-empty.cjs.map +0 -1
- package/dist/slate/utils/is-empty.js.map +0 -1
- package/dist/slate/utils/is-text.cjs.map +0 -1
- package/dist/slate/utils/is-text.js.map +0 -1
- package/dist/slate/utils/is-whitespace-character.cjs.map +0 -1
- package/dist/slate/utils/is-whitespace-character.js.map +0 -1
- package/dist/slate/utils/marks.cjs.map +0 -1
- package/dist/slate/utils/marks.js.map +0 -1
- package/dist/slate/utils/selection-contains-inlines.cjs.map +0 -1
- package/dist/slate/utils/selection-contains-inlines.js.map +0 -1
- /package/dist/{slate → primitives/slate}/plugins/empty-clear-formatting.cjs +0 -0
- /package/dist/{slate → primitives/slate}/plugins/empty-clear-formatting.js +0 -0
- /package/dist/{slate → primitives/slate}/utils/get-character.cjs +0 -0
- /package/dist/{slate → primitives/slate}/utils/get-character.js +0 -0
- /package/dist/{slate → primitives/slate}/utils/get-dom-range.cjs +0 -0
- /package/dist/{slate → primitives/slate}/utils/get-dom-range.js +0 -0
- /package/dist/{slate → primitives/slate}/utils/get-match-range.cjs +0 -0
- /package/dist/{slate → primitives/slate}/utils/get-match-range.js +0 -0
- /package/dist/{slate → primitives/slate}/utils/is-empty-string.cjs +0 -0
- /package/dist/{slate → primitives/slate}/utils/is-empty-string.js +0 -0
- /package/dist/{slate → primitives/slate}/utils/is-empty.cjs +0 -0
- /package/dist/{slate → primitives/slate}/utils/is-empty.js +0 -0
- /package/dist/{slate → primitives/slate}/utils/is-text.cjs +0 -0
- /package/dist/{slate → primitives/slate}/utils/is-text.js +0 -0
- /package/dist/{slate → primitives/slate}/utils/is-whitespace-character.cjs +0 -0
- /package/dist/{slate → primitives/slate}/utils/is-whitespace-character.js +0 -0
- /package/dist/{slate → primitives/slate}/utils/selection-contains-inlines.cjs +0 -0
- /package/dist/{slate → primitives/slate}/utils/selection-contains-inlines.js +0 -0
|
@@ -1,32 +1,102 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { Slot } from '@radix-ui/react-slot';
|
|
2
3
|
import { Lexer } from 'marked';
|
|
3
|
-
import { useMemo } from 'react';
|
|
4
|
+
import { forwardRef, useMemo, memo } from 'react';
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
return
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
6
|
+
const defaultComponents = {
|
|
7
|
+
CodeBlock: ({ language, code }) => {
|
|
8
|
+
return /* @__PURE__ */ jsx("pre", {
|
|
9
|
+
"data-language": language ?? void 0,
|
|
10
|
+
children: /* @__PURE__ */ jsx("code", {
|
|
11
|
+
children: code
|
|
12
|
+
})
|
|
13
|
+
});
|
|
14
|
+
},
|
|
15
|
+
Link: ({ href, title, children }) => {
|
|
16
|
+
return /* @__PURE__ */ jsx("a", {
|
|
17
|
+
href,
|
|
18
|
+
title,
|
|
19
|
+
target: "_blank",
|
|
20
|
+
rel: "noopener noreferrer",
|
|
21
|
+
children
|
|
22
|
+
});
|
|
23
|
+
},
|
|
24
|
+
Heading: ({ level, children }) => {
|
|
25
|
+
const Heading = `h${level}`;
|
|
26
|
+
return /* @__PURE__ */ jsx(Heading, {
|
|
27
|
+
children
|
|
28
|
+
});
|
|
29
|
+
},
|
|
30
|
+
Image: ({ src, alt, title }) => {
|
|
31
|
+
return /* @__PURE__ */ jsx("img", {
|
|
32
|
+
src,
|
|
33
|
+
alt,
|
|
34
|
+
title
|
|
35
|
+
});
|
|
36
|
+
},
|
|
37
|
+
Blockquote: ({ children }) => {
|
|
38
|
+
return /* @__PURE__ */ jsx("blockquote", {
|
|
39
|
+
children
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
const Markdown = forwardRef(
|
|
44
|
+
({ content, components, asChild, ...props }, forwardedRef) => {
|
|
45
|
+
const Component = asChild ? Slot : "div";
|
|
46
|
+
const tokens = useMemo(() => {
|
|
47
|
+
return new Lexer().lex(content);
|
|
48
|
+
}, [content]);
|
|
49
|
+
return /* @__PURE__ */ jsx(Component, {
|
|
50
|
+
...props,
|
|
51
|
+
ref: forwardedRef,
|
|
52
|
+
children: tokens.map((token, index) => {
|
|
53
|
+
return /* @__PURE__ */ jsx(MemoizedMarkdownBlockToken, {
|
|
54
|
+
token,
|
|
55
|
+
components
|
|
56
|
+
}, index);
|
|
57
|
+
})
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
);
|
|
61
|
+
const MemoizedMarkdownBlockToken = memo(
|
|
62
|
+
({
|
|
63
|
+
token,
|
|
64
|
+
components
|
|
65
|
+
}) => {
|
|
66
|
+
return /* @__PURE__ */ jsx(MarkdownBlockToken, {
|
|
67
|
+
token,
|
|
68
|
+
components
|
|
69
|
+
});
|
|
70
|
+
},
|
|
71
|
+
(prevProps, nextProps) => {
|
|
72
|
+
const prevToken = prevProps.token;
|
|
73
|
+
const nextToken = nextProps.token;
|
|
74
|
+
if (prevToken.raw.length !== nextToken.raw.length) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
if (prevToken.type !== nextToken.type) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
return prevToken.raw === nextToken.raw;
|
|
81
|
+
}
|
|
82
|
+
);
|
|
83
|
+
function MarkdownBlockToken({
|
|
84
|
+
token,
|
|
85
|
+
components
|
|
86
|
+
}) {
|
|
16
87
|
switch (token.type) {
|
|
17
88
|
case "space": {
|
|
18
89
|
return null;
|
|
19
90
|
}
|
|
20
91
|
case "code": {
|
|
21
|
-
let language =
|
|
92
|
+
let language = void 0;
|
|
22
93
|
if (token.lang !== void 0) {
|
|
23
|
-
language = token.lang.match(/^\S*/)?.[0] ??
|
|
94
|
+
language = token.lang.match(/^\S*/)?.[0] ?? void 0;
|
|
24
95
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
})
|
|
96
|
+
const CodeBlock = components?.CodeBlock ?? defaultComponents.CodeBlock;
|
|
97
|
+
return /* @__PURE__ */ jsx(CodeBlock, {
|
|
98
|
+
language,
|
|
99
|
+
code: token.text
|
|
30
100
|
});
|
|
31
101
|
}
|
|
32
102
|
case "blockquote": {
|
|
@@ -64,10 +134,12 @@ function BlockTokenComp({ token }) {
|
|
|
64
134
|
}
|
|
65
135
|
}
|
|
66
136
|
}
|
|
67
|
-
|
|
137
|
+
const Blockquote = components?.Blockquote ?? defaultComponents.Blockquote;
|
|
138
|
+
return /* @__PURE__ */ jsx(Blockquote, {
|
|
68
139
|
children: tokens.map((token2, index) => {
|
|
69
|
-
return /* @__PURE__ */ jsx(
|
|
70
|
-
token: token2
|
|
140
|
+
return /* @__PURE__ */ jsx(MarkdownBlockToken, {
|
|
141
|
+
token: token2,
|
|
142
|
+
components
|
|
71
143
|
}, index);
|
|
72
144
|
})
|
|
73
145
|
});
|
|
@@ -76,33 +148,12 @@ function BlockTokenComp({ token }) {
|
|
|
76
148
|
return token.text;
|
|
77
149
|
}
|
|
78
150
|
case "heading": {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
HeadingTag = "h2";
|
|
86
|
-
break;
|
|
87
|
-
case 3:
|
|
88
|
-
HeadingTag = "h3";
|
|
89
|
-
break;
|
|
90
|
-
case 4:
|
|
91
|
-
HeadingTag = "h4";
|
|
92
|
-
break;
|
|
93
|
-
case 5:
|
|
94
|
-
HeadingTag = "h5";
|
|
95
|
-
break;
|
|
96
|
-
case 6:
|
|
97
|
-
HeadingTag = "h6";
|
|
98
|
-
break;
|
|
99
|
-
default:
|
|
100
|
-
HeadingTag = "h1";
|
|
101
|
-
break;
|
|
102
|
-
}
|
|
103
|
-
return /* @__PURE__ */ jsx(HeadingTag, {
|
|
104
|
-
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(InlineTokenComp, {
|
|
105
|
-
token: token2
|
|
151
|
+
const Heading = components?.Heading ?? defaultComponents.Heading;
|
|
152
|
+
return /* @__PURE__ */ jsx(Heading, {
|
|
153
|
+
level: clampHeadingLevel(token.depth),
|
|
154
|
+
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
|
|
155
|
+
token: token2,
|
|
156
|
+
components
|
|
106
157
|
}, index))
|
|
107
158
|
});
|
|
108
159
|
}
|
|
@@ -185,8 +236,9 @@ function BlockTokenComp({ token }) {
|
|
|
185
236
|
}
|
|
186
237
|
return /* @__PURE__ */ jsx("li", {
|
|
187
238
|
children: items.map((token2, index2) => {
|
|
188
|
-
return /* @__PURE__ */ jsx(
|
|
189
|
-
token: token2
|
|
239
|
+
return /* @__PURE__ */ jsx(MarkdownBlockToken, {
|
|
240
|
+
token: token2,
|
|
241
|
+
components
|
|
190
242
|
}, index2);
|
|
191
243
|
})
|
|
192
244
|
}, index);
|
|
@@ -229,8 +281,9 @@ function BlockTokenComp({ token }) {
|
|
|
229
281
|
}
|
|
230
282
|
return /* @__PURE__ */ jsx("li", {
|
|
231
283
|
children: tokens.map((token2, index2) => {
|
|
232
|
-
return /* @__PURE__ */ jsx(
|
|
233
|
-
token: token2
|
|
284
|
+
return /* @__PURE__ */ jsx(MarkdownBlockToken, {
|
|
285
|
+
token: token2,
|
|
286
|
+
components
|
|
234
287
|
}, index2);
|
|
235
288
|
})
|
|
236
289
|
}, index);
|
|
@@ -247,13 +300,15 @@ function BlockTokenComp({ token }) {
|
|
|
247
300
|
case "list":
|
|
248
301
|
case "paragraph":
|
|
249
302
|
case "table": {
|
|
250
|
-
return /* @__PURE__ */ jsx(
|
|
251
|
-
token: token2
|
|
303
|
+
return /* @__PURE__ */ jsx(MarkdownBlockToken, {
|
|
304
|
+
token: token2,
|
|
305
|
+
components
|
|
252
306
|
}, index2);
|
|
253
307
|
}
|
|
254
308
|
case "text": {
|
|
255
|
-
return /* @__PURE__ */ jsx(
|
|
256
|
-
token: token2
|
|
309
|
+
return /* @__PURE__ */ jsx(MarkdownInlineToken, {
|
|
310
|
+
token: token2,
|
|
311
|
+
components
|
|
257
312
|
}, index2);
|
|
258
313
|
}
|
|
259
314
|
default: {
|
|
@@ -284,8 +339,9 @@ function BlockTokenComp({ token }) {
|
|
|
284
339
|
}
|
|
285
340
|
case "paragraph": {
|
|
286
341
|
return /* @__PURE__ */ jsx("p", {
|
|
287
|
-
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(
|
|
288
|
-
token: token2
|
|
342
|
+
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
|
|
343
|
+
token: token2,
|
|
344
|
+
components
|
|
289
345
|
}, index))
|
|
290
346
|
});
|
|
291
347
|
}
|
|
@@ -297,8 +353,9 @@ function BlockTokenComp({ token }) {
|
|
|
297
353
|
children: token.header.map((cell, index) => {
|
|
298
354
|
return /* @__PURE__ */ jsx("th", {
|
|
299
355
|
align: cell.align ?? void 0,
|
|
300
|
-
children: cell.tokens.map((token2, index2) => /* @__PURE__ */ jsx(
|
|
301
|
-
token: token2
|
|
356
|
+
children: cell.tokens.map((token2, index2) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
|
|
357
|
+
token: token2,
|
|
358
|
+
components
|
|
302
359
|
}, index2))
|
|
303
360
|
}, index);
|
|
304
361
|
})
|
|
@@ -310,8 +367,9 @@ function BlockTokenComp({ token }) {
|
|
|
310
367
|
children: row.map((cell, index2) => {
|
|
311
368
|
return /* @__PURE__ */ jsx("td", {
|
|
312
369
|
align: cell.align ?? void 0,
|
|
313
|
-
children: cell.tokens.map((token2, index3) => /* @__PURE__ */ jsx(
|
|
314
|
-
token: token2
|
|
370
|
+
children: cell.tokens.map((token2, index3) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
|
|
371
|
+
token: token2,
|
|
372
|
+
components
|
|
315
373
|
}, index3))
|
|
316
374
|
}, index2);
|
|
317
375
|
})
|
|
@@ -323,21 +381,24 @@ function BlockTokenComp({ token }) {
|
|
|
323
381
|
}
|
|
324
382
|
}
|
|
325
383
|
}
|
|
326
|
-
function
|
|
327
|
-
token
|
|
384
|
+
function MarkdownInlineToken({
|
|
385
|
+
token,
|
|
386
|
+
components
|
|
328
387
|
}) {
|
|
329
388
|
switch (token.type) {
|
|
330
389
|
case "strong": {
|
|
331
390
|
return /* @__PURE__ */ jsx("strong", {
|
|
332
|
-
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(
|
|
333
|
-
token: token2
|
|
391
|
+
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
|
|
392
|
+
token: token2,
|
|
393
|
+
components
|
|
334
394
|
}, index))
|
|
335
395
|
});
|
|
336
396
|
}
|
|
337
397
|
case "em": {
|
|
338
398
|
return /* @__PURE__ */ jsx("em", {
|
|
339
|
-
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(
|
|
340
|
-
token: token2
|
|
399
|
+
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
|
|
400
|
+
token: token2,
|
|
401
|
+
components
|
|
341
402
|
}, index))
|
|
342
403
|
});
|
|
343
404
|
}
|
|
@@ -351,8 +412,9 @@ function InlineTokenComp({
|
|
|
351
412
|
}
|
|
352
413
|
case "del": {
|
|
353
414
|
return /* @__PURE__ */ jsx("del", {
|
|
354
|
-
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(
|
|
355
|
-
token: token2
|
|
415
|
+
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
|
|
416
|
+
token: token2,
|
|
417
|
+
components
|
|
356
418
|
}, index))
|
|
357
419
|
});
|
|
358
420
|
}
|
|
@@ -369,17 +431,18 @@ function InlineTokenComp({
|
|
|
369
431
|
href = null;
|
|
370
432
|
}
|
|
371
433
|
if (href === null) {
|
|
372
|
-
return token.tokens.map((token2, index) => /* @__PURE__ */ jsx(
|
|
373
|
-
token: token2
|
|
434
|
+
return token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
|
|
435
|
+
token: token2,
|
|
436
|
+
components
|
|
374
437
|
}, index));
|
|
375
438
|
}
|
|
376
|
-
|
|
439
|
+
const Link = components?.Link ?? defaultComponents.Link;
|
|
440
|
+
return /* @__PURE__ */ jsx(Link, {
|
|
377
441
|
href,
|
|
378
|
-
title: token.title
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
token: token2
|
|
442
|
+
title: token.title ?? void 0,
|
|
443
|
+
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
|
|
444
|
+
token: token2,
|
|
445
|
+
components
|
|
383
446
|
}, index))
|
|
384
447
|
});
|
|
385
448
|
}
|
|
@@ -398,7 +461,8 @@ function InlineTokenComp({
|
|
|
398
461
|
if (href === null) {
|
|
399
462
|
return token.text;
|
|
400
463
|
}
|
|
401
|
-
|
|
464
|
+
const Image = components?.Image ?? defaultComponents.Image;
|
|
465
|
+
return /* @__PURE__ */ jsx(Image, {
|
|
402
466
|
src: href,
|
|
403
467
|
alt: token.text,
|
|
404
468
|
title: token.title ?? void 0
|
|
@@ -406,8 +470,9 @@ function InlineTokenComp({
|
|
|
406
470
|
}
|
|
407
471
|
case "text": {
|
|
408
472
|
if (token.tokens !== void 0) {
|
|
409
|
-
return token.tokens.map((token2, index) => /* @__PURE__ */ jsx(
|
|
410
|
-
token: token2
|
|
473
|
+
return token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
|
|
474
|
+
token: token2,
|
|
475
|
+
components
|
|
411
476
|
}, index));
|
|
412
477
|
} else {
|
|
413
478
|
return parseHtmlEntities(token.text);
|
|
@@ -435,6 +500,9 @@ function parseHtmlEntities(input) {
|
|
|
435
500
|
);
|
|
436
501
|
return document.body.textContent;
|
|
437
502
|
}
|
|
503
|
+
function clampHeadingLevel(level) {
|
|
504
|
+
return Math.max(1, Math.min(6, level));
|
|
505
|
+
}
|
|
438
506
|
|
|
439
|
-
export {
|
|
507
|
+
export { Markdown, MarkdownBlockToken };
|
|
440
508
|
//# sourceMappingURL=Markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Markdown.js","sources":["../../src/primitives/Markdown.tsx"],"sourcesContent":["import { Slot } from \"@radix-ui/react-slot\";\nimport { Lexer, type Tokens } from \"marked\";\nimport {\n type ComponentType,\n forwardRef,\n memo,\n type ReactNode,\n useMemo,\n} from \"react\";\n\nimport type { ComponentPropsWithSlot } from \"../types\";\n\nexport type MarkdownComponents = {\n CodeBlock: ComponentType<MarkdownComponentsCodeBlockProps>;\n Link: ComponentType<MarkdownComponentsLinkProps>;\n Heading: ComponentType<MarkdownComponentsHeadingProps>;\n Image: ComponentType<MarkdownComponentsImageProps>;\n Blockquote: ComponentType<MarkdownComponentsBlockquoteProps>;\n\n // Paragraph\n // Inline (text, strong, em, code, del)\n // Table\n // List\n // Separator (hr)\n};\n\nexport interface MarkdownComponentsBlockquoteProps {\n children: ReactNode;\n}\n\nexport interface MarkdownComponentsImageProps {\n src: string;\n alt: string;\n title?: string;\n}\n\nexport interface MarkdownComponentsHeadingProps {\n level: 1 | 2 | 3 | 4 | 5 | 6;\n children: ReactNode;\n}\n\nexport interface MarkdownComponentsLinkProps {\n href: string;\n title?: string;\n children: ReactNode;\n}\n\nexport interface MarkdownComponentsCodeBlockProps {\n code: string;\n language?: string;\n}\n\nexport interface MarkdownProps extends ComponentPropsWithSlot<\"div\"> {\n content: string;\n components?: Partial<MarkdownComponents>;\n}\n\n/**\n * Block level tokens include:\n * - space\n * - code\n * - blockquote\n * - html\n * - heading\n * - hr\n * - list\n * - paragraph\n * - table\n */\nexport type BlockToken =\n | Tokens.Space\n | Tokens.Code\n | Tokens.Blockquote\n | Tokens.HTML\n | Tokens.Heading\n | Tokens.Hr\n | Tokens.List\n | Tokens.Paragraph\n | Tokens.Table;\n\n/**\n * Inline tokens include:\n * - strong\n * - em\n * - codespan\n * - br\n * - del\n * - link\n * - image\n * - text\n */\ntype InlineToken =\n | Tokens.Strong\n | Tokens.Em\n | Tokens.Codespan\n | Tokens.Br\n | Tokens.Del\n | Tokens.Link\n | Tokens.Image\n | Tokens.Text\n | Tokens.Escape;\n\nconst defaultComponents: MarkdownComponents = {\n CodeBlock: ({ language, code }) => {\n return (\n <pre data-language={language ?? undefined}>\n <code>{code}</code>\n </pre>\n );\n },\n Link: ({ href, title, children }) => {\n return (\n <a href={href} title={title} target=\"_blank\" rel=\"noopener noreferrer\">\n {children}\n </a>\n );\n },\n Heading: ({ level, children }) => {\n const Heading = `h${level}` as const;\n\n return <Heading>{children}</Heading>;\n },\n Image: ({ src, alt, title }) => {\n return <img src={src} alt={alt} title={title} />;\n },\n Blockquote: ({ children }) => {\n return <blockquote>{children}</blockquote>;\n },\n};\n\nexport const Markdown = forwardRef<HTMLDivElement, MarkdownProps>(\n ({ content, components, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"div\";\n const tokens = useMemo(() => {\n return new Lexer().lex(content);\n }, [content]);\n\n return (\n <Component {...props} ref={forwardedRef}>\n {tokens.map((token, index) => {\n return (\n <MemoizedMarkdownBlockToken\n token={token as BlockToken}\n key={index}\n components={components}\n />\n );\n })}\n </Component>\n );\n }\n);\n\nconst MemoizedMarkdownBlockToken = memo(\n ({\n token,\n components,\n }: {\n token: BlockToken;\n components?: Partial<MarkdownComponents>;\n }) => {\n return <MarkdownBlockToken token={token} components={components} />;\n },\n (prevProps, nextProps) => {\n const prevToken = prevProps.token;\n const nextToken = nextProps.token;\n if (prevToken.raw.length !== nextToken.raw.length) {\n return false;\n }\n if (prevToken.type !== nextToken.type) {\n return false;\n }\n return prevToken.raw === nextToken.raw;\n }\n);\n\nexport function MarkdownBlockToken({\n token,\n components,\n}: {\n token: BlockToken;\n components: Partial<MarkdownComponents> | undefined;\n}) {\n switch (token.type) {\n case \"space\": {\n return null;\n }\n case \"code\": {\n let language: string | undefined = undefined;\n if (token.lang !== undefined) {\n language = token.lang.match(/^\\S*/)?.[0] ?? undefined;\n }\n\n const CodeBlock = components?.CodeBlock ?? defaultComponents.CodeBlock;\n\n return <CodeBlock language={language} code={token.text} />;\n }\n case \"blockquote\": {\n const tokens: BlockToken[] = [];\n for (let i = 0; i < token.tokens.length; i++) {\n switch (token.tokens[i]!.type) {\n case \"space\":\n case \"code\":\n case \"blockquote\":\n case \"html\":\n case \"heading\":\n case \"hr\":\n case \"list\":\n case \"paragraph\":\n case \"table\": {\n tokens.push(token.tokens[i] as BlockToken);\n break;\n }\n case \"text\": {\n const texts: Tokens.Text[] = [token.tokens[i] as Tokens.Text];\n while (\n i + 1 < token.tokens.length &&\n token.tokens[i + 1]!.type === \"text\"\n ) {\n i++;\n texts.push(token.tokens[i] as Tokens.Text);\n }\n tokens.push({\n type: \"paragraph\",\n tokens: texts,\n raw: texts.map((text) => text.raw).join(\"\"),\n text: texts.map((text) => text.text).join(\"\"),\n } satisfies Tokens.Paragraph);\n break;\n }\n default: {\n continue;\n }\n }\n }\n\n const Blockquote = components?.Blockquote ?? defaultComponents.Blockquote;\n\n return (\n <Blockquote>\n {tokens.map((token, index) => {\n return (\n <MarkdownBlockToken\n token={token}\n key={index}\n components={components}\n />\n );\n })}\n </Blockquote>\n );\n }\n case \"html\": {\n return token.text;\n }\n case \"heading\": {\n const Heading = components?.Heading ?? defaultComponents.Heading;\n\n return (\n <Heading level={clampHeadingLevel(token.depth)}>\n {token.tokens.map((token, index) => (\n <MarkdownInlineToken\n key={index}\n token={token as InlineToken}\n components={components}\n />\n ))}\n </Heading>\n );\n }\n case \"hr\": {\n return <hr />;\n }\n case \"list\": {\n const ListTag = token.ordered ? \"ol\" : \"ul\";\n\n return (\n <ListTag>\n {token.items.map((item, index) => {\n // A 'loose' list item in Markdown is one where the content is wrapped in a paragraph (or potentially other block) token\n if (item.loose) {\n // If the list item is a task list item, we need to add a checkbox to the start of the token\n if (item.task) {\n const tokens = [...item.tokens];\n if (tokens[0]?.type === \"paragraph\") {\n const token = tokens[0] as Tokens.Paragraph;\n token.tokens.unshift(\n {\n type: \"checkbox\",\n checked: item.checked,\n raw: \"\",\n },\n {\n type: \"text\",\n text: \" \",\n raw: \" \",\n escaped: false,\n }\n );\n } else {\n tokens.unshift(\n {\n type: \"checkbox\",\n checked: item.checked,\n raw: \"\",\n },\n {\n type: \"text\",\n text: \" \",\n raw: \" \",\n escaped: false,\n }\n );\n }\n\n const items: BlockToken[] = [];\n for (let i = 0; i < tokens.length; i++) {\n switch (tokens[i]!.type) {\n case \"space\":\n case \"code\":\n case \"blockquote\":\n case \"html\":\n case \"heading\":\n case \"hr\":\n case \"list\":\n case \"paragraph\":\n case \"table\": {\n items.push(tokens[i] as BlockToken);\n break;\n }\n case \"text\":\n case \"checkbox\": {\n const texts: (\n | Tokens.Text\n | {\n type: \"checkbox\";\n checked: boolean;\n raw: string;\n text: string;\n }\n )[] = [\n tokens[i] as\n | Tokens.Text\n | {\n type: \"checkbox\";\n checked: boolean;\n raw: string;\n text: string;\n },\n ];\n while (\n i + 1 < tokens.length &&\n tokens[i + 1]!.type === \"text\"\n ) {\n i++;\n texts.push(tokens[i] as Tokens.Text);\n }\n items.push({\n type: \"paragraph\",\n tokens: texts,\n raw: texts.map((text) => text.raw).join(\"\"),\n text: texts.map((text) => text.text).join(\"\"),\n } satisfies Tokens.Paragraph);\n break;\n }\n default: {\n continue;\n }\n }\n }\n\n return (\n <li key={index}>\n {items.map((token, index) => {\n return (\n <MarkdownBlockToken\n token={token}\n key={index}\n components={components}\n />\n );\n })}\n </li>\n );\n } else {\n const tokens: BlockToken[] = [];\n for (let i = 0; i < item.tokens.length; i++) {\n switch (item.tokens[i]!.type) {\n case \"space\":\n case \"code\":\n case \"blockquote\":\n case \"html\":\n case \"heading\":\n case \"hr\":\n case \"list\":\n case \"paragraph\":\n case \"table\": {\n tokens.push(item.tokens[i] as BlockToken);\n break;\n }\n case \"text\": {\n const texts: Tokens.Text[] = [\n item.tokens[i] as Tokens.Text,\n ];\n while (\n i + 1 < item.tokens.length &&\n item.tokens[i + 1]!.type === \"text\"\n ) {\n i++;\n texts.push(item.tokens[i] as Tokens.Text);\n }\n tokens.push({\n type: \"paragraph\",\n tokens: texts,\n raw: texts.map((text) => text.raw).join(\"\"),\n text: texts.map((text) => text.text).join(\"\"),\n } satisfies Tokens.Paragraph);\n break;\n }\n default: {\n continue;\n }\n }\n }\n\n return (\n <li key={index}>\n {tokens.map((token, index) => {\n return (\n <MarkdownBlockToken\n token={token}\n key={index}\n components={components}\n />\n );\n })}\n </li>\n );\n }\n } else {\n const Items: ReactNode = item.tokens.map((token, index) => {\n switch (token.type) {\n case \"space\":\n case \"code\":\n case \"blockquote\":\n case \"html\":\n case \"heading\":\n case \"hr\":\n case \"list\":\n case \"paragraph\":\n case \"table\": {\n return (\n <MarkdownBlockToken\n token={token as BlockToken}\n key={index}\n components={components}\n />\n );\n }\n case \"text\": {\n return (\n <MarkdownInlineToken\n token={token as Tokens.Text}\n key={index}\n components={components}\n />\n );\n }\n default: {\n return null;\n }\n }\n });\n if (item.task) {\n return (\n <li key={index}>\n <input type=\"checkbox\" disabled checked={item.checked} />{\" \"}\n {Items}\n </li>\n );\n } else {\n return <li key={index}>{Items}</li>;\n }\n }\n })}\n </ListTag>\n );\n }\n case \"paragraph\": {\n return (\n <p>\n {token.tokens.map((token, index) => (\n <MarkdownInlineToken\n key={index}\n token={token as InlineToken}\n components={components}\n />\n ))}\n </p>\n );\n }\n case \"table\": {\n return (\n <table>\n <thead>\n <tr>\n {token.header.map((cell, index) => {\n return (\n <th key={index} align={cell.align ?? undefined}>\n {cell.tokens.map((token, index) => (\n <MarkdownInlineToken\n key={index}\n token={token as InlineToken}\n components={components}\n />\n ))}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {token.rows.map((row, index) => {\n return (\n <tr key={index}>\n {row.map((cell, index) => {\n return (\n <td key={index} align={cell.align ?? undefined}>\n {cell.tokens.map((token, index) => (\n <MarkdownInlineToken\n key={index}\n token={token as InlineToken}\n components={components}\n />\n ))}\n </td>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n );\n }\n }\n}\n\nfunction MarkdownInlineToken({\n token,\n components,\n}: {\n token: InlineToken | { type: \"checkbox\"; checked: boolean };\n components: Partial<MarkdownComponents> | undefined;\n}) {\n switch (token.type) {\n case \"strong\": {\n return (\n <strong>\n {token.tokens.map((token, index) => (\n <MarkdownInlineToken\n key={index}\n token={token as InlineToken}\n components={components}\n />\n ))}\n </strong>\n );\n }\n case \"em\": {\n return (\n <em>\n {token.tokens.map((token, index) => (\n <MarkdownInlineToken\n key={index}\n token={token as InlineToken}\n components={components}\n />\n ))}\n </em>\n );\n }\n case \"codespan\": {\n return <code>{parseHtmlEntities(token.text)}</code>;\n }\n case \"br\": {\n return <br />;\n }\n case \"del\": {\n return (\n <del>\n {token.tokens.map((token, index) => (\n <MarkdownInlineToken\n key={index}\n token={token as InlineToken}\n components={components}\n />\n ))}\n </del>\n );\n }\n case \"link\": {\n let href: string | null;\n try {\n const url = new URL(token.href);\n if (url.protocol === \"http:\" || url.protocol === \"https:\") {\n href = url.toString();\n } else {\n href = null;\n }\n } catch {\n href = null;\n }\n\n if (href === null) {\n return token.tokens.map((token, index) => (\n <MarkdownInlineToken\n key={index}\n token={token as InlineToken}\n components={components}\n />\n ));\n }\n\n const Link = components?.Link ?? defaultComponents.Link;\n\n return (\n <Link href={href} title={token.title ?? undefined}>\n {token.tokens.map((token, index) => (\n <MarkdownInlineToken\n key={index}\n token={token as InlineToken}\n components={components}\n />\n ))}\n </Link>\n );\n }\n case \"image\": {\n let href: string | null;\n try {\n const url = new URL(token.href);\n if (url.protocol === \"http:\" || url.protocol === \"https:\") {\n href = url.toString();\n } else {\n href = null;\n }\n } catch {\n href = null;\n }\n\n if (href === null) {\n return token.text;\n }\n\n const Image = components?.Image ?? defaultComponents.Image;\n\n return (\n <Image src={href} alt={token.text} title={token.title ?? undefined} />\n );\n }\n case \"text\": {\n if (token.tokens !== undefined) {\n return token.tokens.map((token, index) => (\n <MarkdownInlineToken\n key={index}\n token={token as InlineToken}\n components={components}\n />\n ));\n } else {\n return parseHtmlEntities(token.text);\n }\n }\n case \"escape\": {\n return token.text;\n }\n case \"checkbox\": {\n return <input type=\"checkbox\" disabled checked={token.checked} />;\n }\n default: {\n return null;\n }\n }\n}\n\nfunction parseHtmlEntities(input: string) {\n const document = new DOMParser().parseFromString(\n `<!doctype html><body>${input}`,\n \"text/html\"\n );\n\n return document.body.textContent;\n}\n\nfunction clampHeadingLevel(level: number) {\n return Math.max(1, Math.min(6, level)) as 1 | 2 | 3 | 4 | 5 | 6;\n}\n"],"names":["token","index"],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./
|
|
4
|
-
var index$1 = require('./
|
|
5
|
-
var index$2 = require('./Composer/index.cjs');
|
|
3
|
+
var index = require('./Comment/index.cjs');
|
|
4
|
+
var index$1 = require('./Composer/index.cjs');
|
|
6
5
|
var contexts = require('./Composer/contexts.cjs');
|
|
7
6
|
var utils = require('./Composer/utils.cjs');
|
|
8
7
|
var FileSize = require('./FileSize.cjs');
|
|
@@ -10,12 +9,8 @@ var Timestamp = require('./Timestamp.cjs');
|
|
|
10
9
|
|
|
11
10
|
|
|
12
11
|
|
|
13
|
-
exports.
|
|
14
|
-
exports.
|
|
15
|
-
exports.ChatComposerForm = index.Form;
|
|
16
|
-
exports.ChatComposerSubmit = index.Submit;
|
|
17
|
-
exports.Comment = index$1;
|
|
18
|
-
exports.Composer = index$2;
|
|
12
|
+
exports.Comment = index;
|
|
13
|
+
exports.Composer = index$1;
|
|
19
14
|
exports.useComposer = contexts.useComposer;
|
|
20
15
|
exports.AttachmentTooLargeError = utils.AttachmentTooLargeError;
|
|
21
16
|
exports.FileSize = FileSize.FileSize;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { ElementType, ComponentPropsWithoutRef,
|
|
2
|
+
import { ElementType, ComponentPropsWithoutRef, ReactNode, ComponentType, FormEvent } from 'react';
|
|
3
3
|
import { CommentBody as CommentBody$1, CommentAttachment, CommentMixedAttachment } from '@liveblocks/core';
|
|
4
4
|
|
|
5
5
|
type Direction = "ltr" | "rtl";
|
|
@@ -22,112 +22,6 @@ type ComposerBodyMarks = {
|
|
|
22
22
|
[K in ComposerBodyMark]: boolean;
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
-
type FormProps = FormHTMLAttributes<HTMLFormElement> & {
|
|
26
|
-
/**
|
|
27
|
-
* The event handler called when a chat message is submitted.
|
|
28
|
-
*/
|
|
29
|
-
onComposerSubmit?: (message: {
|
|
30
|
-
/**
|
|
31
|
-
* The submitted message text.
|
|
32
|
-
*/
|
|
33
|
-
text: string;
|
|
34
|
-
}, event: FormEvent<HTMLFormElement>) => void;
|
|
35
|
-
/**
|
|
36
|
-
* Whether the composer is disabled.
|
|
37
|
-
*/
|
|
38
|
-
disabled?: boolean;
|
|
39
|
-
/**
|
|
40
|
-
* The id of the chat the composer belongs to.
|
|
41
|
-
*/
|
|
42
|
-
chatId: string;
|
|
43
|
-
};
|
|
44
|
-
/**
|
|
45
|
-
* Surrounds the chat composer's content and handles submissions.
|
|
46
|
-
*
|
|
47
|
-
* @example
|
|
48
|
-
* <Form onComposerSubmit={({ text }) => {}}>
|
|
49
|
-
* <Editor />
|
|
50
|
-
* <Submit />
|
|
51
|
-
* </Form>
|
|
52
|
-
*/
|
|
53
|
-
declare const Form: react.ForwardRefExoticComponent<FormHTMLAttributes<HTMLFormElement> & {
|
|
54
|
-
/**
|
|
55
|
-
* The event handler called when a chat message is submitted.
|
|
56
|
-
*/
|
|
57
|
-
onComposerSubmit?: (message: {
|
|
58
|
-
/**
|
|
59
|
-
* The submitted message text.
|
|
60
|
-
*/
|
|
61
|
-
text: string;
|
|
62
|
-
}, event: FormEvent<HTMLFormElement>) => void;
|
|
63
|
-
/**
|
|
64
|
-
* Whether the composer is disabled.
|
|
65
|
-
*/
|
|
66
|
-
disabled?: boolean;
|
|
67
|
-
/**
|
|
68
|
-
* The id of the chat the composer belongs to.
|
|
69
|
-
*/
|
|
70
|
-
chatId: string;
|
|
71
|
-
} & react.RefAttributes<HTMLFormElement>>;
|
|
72
|
-
type EditorProps = Omit<HTMLAttributes<HTMLDivElement>, "defaultValue"> & {
|
|
73
|
-
/**
|
|
74
|
-
* The editor's initial value.
|
|
75
|
-
*/
|
|
76
|
-
defaultValue?: string;
|
|
77
|
-
/**
|
|
78
|
-
* The text to display when the editor is empty.
|
|
79
|
-
*/
|
|
80
|
-
placeholder?: string;
|
|
81
|
-
/**
|
|
82
|
-
* Whether the editor is disabled.
|
|
83
|
-
*/
|
|
84
|
-
disabled?: boolean;
|
|
85
|
-
/**
|
|
86
|
-
* Whether to focus the editor on mount.
|
|
87
|
-
*/
|
|
88
|
-
autoFocus?: boolean;
|
|
89
|
-
};
|
|
90
|
-
/**
|
|
91
|
-
* Displays the chat composer's editor.
|
|
92
|
-
*
|
|
93
|
-
* @example
|
|
94
|
-
* <Editor placeholder="Write a message…" />
|
|
95
|
-
*/
|
|
96
|
-
declare const Editor: react.ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLDivElement>, "defaultValue"> & {
|
|
97
|
-
/**
|
|
98
|
-
* The editor's initial value.
|
|
99
|
-
*/
|
|
100
|
-
defaultValue?: string;
|
|
101
|
-
/**
|
|
102
|
-
* The text to display when the editor is empty.
|
|
103
|
-
*/
|
|
104
|
-
placeholder?: string;
|
|
105
|
-
/**
|
|
106
|
-
* Whether the editor is disabled.
|
|
107
|
-
*/
|
|
108
|
-
disabled?: boolean;
|
|
109
|
-
/**
|
|
110
|
-
* Whether to focus the editor on mount.
|
|
111
|
-
*/
|
|
112
|
-
autoFocus?: boolean;
|
|
113
|
-
} & react.RefAttributes<HTMLDivElement>>;
|
|
114
|
-
type SubmitProps = ButtonHTMLAttributes<HTMLButtonElement>;
|
|
115
|
-
/**
|
|
116
|
-
* A button to submit a chat message.
|
|
117
|
-
*
|
|
118
|
-
* @example
|
|
119
|
-
* <ChatComposer.Submit>Send</ChatComposer.Submit>
|
|
120
|
-
*/
|
|
121
|
-
declare const Submit: react.ForwardRefExoticComponent<SubmitProps & react.RefAttributes<HTMLButtonElement>>;
|
|
122
|
-
type AttachFilesProps = ButtonHTMLAttributes<HTMLButtonElement>;
|
|
123
|
-
/**
|
|
124
|
-
* A button which opens a file picker to create attachments.
|
|
125
|
-
*
|
|
126
|
-
* @example
|
|
127
|
-
* <Composer.AttachFiles>Attach files</Composer.AttachFiles>
|
|
128
|
-
*/
|
|
129
|
-
declare const AttachFiles: react.ForwardRefExoticComponent<AttachFilesProps & react.RefAttributes<HTMLButtonElement>>;
|
|
130
|
-
|
|
131
25
|
type CommentMentionProps = ComponentPropsWithSlot<"span">;
|
|
132
26
|
type CommentBodyMentionProps = {
|
|
133
27
|
/**
|
|
@@ -160,7 +54,7 @@ interface CommentBodyComponents {
|
|
|
160
54
|
*/
|
|
161
55
|
Link: ComponentType<CommentBodyLinkProps>;
|
|
162
56
|
}
|
|
163
|
-
interface CommentBodyProps extends
|
|
57
|
+
interface CommentBodyProps extends ComponentPropsWithSlot<"div"> {
|
|
164
58
|
/**
|
|
165
59
|
* The comment body to display.
|
|
166
60
|
* If not defined, the component will render `null`.
|
|
@@ -265,7 +159,7 @@ interface ComposerEditorComponents {
|
|
|
265
159
|
*/
|
|
266
160
|
FloatingToolbar?: ComponentType<ComposerEditorFloatingToolbarProps>;
|
|
267
161
|
}
|
|
268
|
-
interface ComposerEditorProps extends Omit<ComponentPropsWithoutRef<"div">, "defaultValue"> {
|
|
162
|
+
interface ComposerEditorProps extends Omit<ComponentPropsWithoutRef<"div">, "defaultValue" | "children"> {
|
|
269
163
|
/**
|
|
270
164
|
* The reading direction of the editor and related elements.
|
|
271
165
|
*/
|
|
@@ -600,4 +494,4 @@ interface TimestampProps extends Omit<ComponentPropsWithSlot<"time">, "children"
|
|
|
600
494
|
*/
|
|
601
495
|
declare const Timestamp: react.ForwardRefExoticComponent<TimestampProps & react.RefAttributes<HTMLTimeElement>>;
|
|
602
496
|
|
|
603
|
-
export { AttachmentTooLargeError,
|
|
497
|
+
export { AttachmentTooLargeError, index$1 as Comment, CommentBodyComponents, CommentBodyLinkProps, CommentBodyMentionProps, CommentBodyProps, CommentLinkProps, CommentMentionProps, index as Composer, ComposerAttachFilesProps, ComposerAttachmentsDropAreaProps, ComposerBodyMark, ComposerBodyMarks, ComposerContext, ComposerEditorComponents, ComposerEditorFloatingToolbarProps, ComposerEditorLinkProps, ComposerEditorMentionProps, ComposerEditorMentionSuggestionsProps, ComposerEditorProps, ComposerFloatingToolbarProps, ComposerFormProps, ComposerLinkProps, ComposerMarkToggleProps, ComposerMentionProps, ComposerSubmitComment, ComposerSubmitProps, ComposerSuggestionsListItemProps, ComposerSuggestionsListProps, FileSize, FileSizeProps, Timestamp, TimestampProps, useComposer };
|